From e6f3131637dc6cf7875e2a33ee63cb181530d9af Mon Sep 17 00:00:00 2001 From: Facebook Community Bot <6422482+facebook-github-bot@users.noreply.github.com> Date: Thu, 14 May 2026 13:11:56 -0700 Subject: [PATCH 1/2] Re-sync with internal repository The internal and external repositories are out of sync. This Pull Request attempts to brings them back in sync by patching the GitHub repository. Please carefully review this patch. You must disable ShipIt for your project in order to merge this pull request. DO NOT IMPORT this pull request. Instead, merge it directly on GitHub using the MERGE BUTTON. Re-enable ShipIt after merging. fbshipit-source-id: b65f103f320570ce1830743524ebd37b97374a04 --- .github/dependabot.yml | 32 - .github/workflows/build.yml | 2 +- Include/internal/pycore_gc.h | 49 + Include/internal/pycore_pystate.h | 6 + Include/patchlevel.h | 2 +- Include/pystate.h | 2 + Lib/site.py | 9 + Lib/test/decimaltestdata/and.decTest | 676 +- Lib/test/decimaltestdata/class.decTest | 262 +- Lib/test/decimaltestdata/comparetotal.decTest | 1596 ++-- .../decimaltestdata/comparetotmag.decTest | 1580 ++-- Lib/test/decimaltestdata/copy.decTest | 172 +- Lib/test/decimaltestdata/copyabs.decTest | 172 +- Lib/test/decimaltestdata/copynegate.decTest | 172 +- Lib/test/decimaltestdata/copysign.decTest | 354 +- Lib/test/decimaltestdata/ddAbs.decTest | 252 +- Lib/test/decimaltestdata/ddAdd.decTest | 2656 +++---- Lib/test/decimaltestdata/ddAnd.decTest | 694 +- Lib/test/decimaltestdata/ddBase.decTest | 2208 +++--- Lib/test/decimaltestdata/ddCanonical.decTest | 714 +- Lib/test/decimaltestdata/ddClass.decTest | 152 +- Lib/test/decimaltestdata/ddCompare.decTest | 1488 ++-- Lib/test/decimaltestdata/ddCompareSig.decTest | 1294 ++-- .../decimaltestdata/ddCompareTotal.decTest | 1412 ++-- .../decimaltestdata/ddCompareTotalMag.decTest | 1412 ++-- Lib/test/decimaltestdata/ddCopy.decTest | 176 +- Lib/test/decimaltestdata/ddCopyAbs.decTest | 176 +- Lib/test/decimaltestdata/ddCopyNegate.decTest | 176 +- Lib/test/decimaltestdata/ddCopySign.decTest | 350 +- Lib/test/decimaltestdata/ddDivide.decTest | 1726 ++--- Lib/test/decimaltestdata/ddDivideInt.decTest | 898 +-- Lib/test/decimaltestdata/ddEncode.decTest | 990 +-- Lib/test/decimaltestdata/ddFMA.decTest | 3396 ++++---- Lib/test/decimaltestdata/ddInvert.decTest | 404 +- Lib/test/decimaltestdata/ddLogB.decTest | 318 +- Lib/test/decimaltestdata/ddMax.decTest | 644 +- Lib/test/decimaltestdata/ddMaxMag.decTest | 608 +- Lib/test/decimaltestdata/ddMin.decTest | 618 +- Lib/test/decimaltestdata/ddMinMag.decTest | 586 +- Lib/test/decimaltestdata/ddMinus.decTest | 176 +- Lib/test/decimaltestdata/ddMultiply.decTest | 1106 +-- Lib/test/decimaltestdata/ddNextMinus.decTest | 252 +- Lib/test/decimaltestdata/ddNextPlus.decTest | 248 +- Lib/test/decimaltestdata/ddNextToward.decTest | 748 +- Lib/test/decimaltestdata/ddOr.decTest | 584 +- Lib/test/decimaltestdata/ddPlus.decTest | 176 +- Lib/test/decimaltestdata/ddQuantize.decTest | 1666 ++-- Lib/test/decimaltestdata/ddReduce.decTest | 364 +- Lib/test/decimaltestdata/ddRemainder.decTest | 1200 +-- .../decimaltestdata/ddRemainderNear.decTest | 1258 +-- Lib/test/decimaltestdata/ddRotate.decTest | 524 +- .../decimaltestdata/ddSameQuantum.decTest | 778 +- Lib/test/decimaltestdata/ddScaleB.decTest | 486 +- Lib/test/decimaltestdata/ddShift.decTest | 524 +- Lib/test/decimaltestdata/ddSubtract.decTest | 1258 +-- Lib/test/decimaltestdata/ddToIntegral.decTest | 514 +- Lib/test/decimaltestdata/ddXor.decTest | 674 +- Lib/test/decimaltestdata/dqAbs.decTest | 252 +- Lib/test/decimaltestdata/dqAdd.decTest | 2430 +++--- Lib/test/decimaltestdata/dqAnd.decTest | 840 +- Lib/test/decimaltestdata/dqBase.decTest | 2162 +++--- Lib/test/decimaltestdata/dqCanonical.decTest | 744 +- Lib/test/decimaltestdata/dqClass.decTest | 154 +- Lib/test/decimaltestdata/dqCompare.decTest | 1506 ++-- Lib/test/decimaltestdata/dqCompareSig.decTest | 1294 ++-- .../decimaltestdata/dqCompareTotal.decTest | 1412 ++-- .../decimaltestdata/dqCompareTotalMag.decTest | 1412 ++-- Lib/test/decimaltestdata/dqCopy.decTest | 176 +- Lib/test/decimaltestdata/dqCopyAbs.decTest | 176 +- Lib/test/decimaltestdata/dqCopyNegate.decTest | 176 +- Lib/test/decimaltestdata/dqCopySign.decTest | 350 +- Lib/test/decimaltestdata/dqDivide.decTest | 1616 ++-- Lib/test/decimaltestdata/dqDivideInt.decTest | 906 +-- Lib/test/decimaltestdata/dqEncode.decTest | 954 +-- Lib/test/decimaltestdata/dqFMA.decTest | 3572 ++++----- Lib/test/decimaltestdata/dqInvert.decTest | 490 +- Lib/test/decimaltestdata/dqLogB.decTest | 320 +- Lib/test/decimaltestdata/dqMax.decTest | 644 +- Lib/test/decimaltestdata/dqMaxMag.decTest | 608 +- Lib/test/decimaltestdata/dqMin.decTest | 618 +- Lib/test/decimaltestdata/dqMinMag.decTest | 586 +- Lib/test/decimaltestdata/dqMinus.decTest | 176 +- Lib/test/decimaltestdata/dqMultiply.decTest | 1178 +-- Lib/test/decimaltestdata/dqNextMinus.decTest | 252 +- Lib/test/decimaltestdata/dqNextPlus.decTest | 248 +- Lib/test/decimaltestdata/dqNextToward.decTest | 750 +- Lib/test/decimaltestdata/dqOr.decTest | 802 +- Lib/test/decimaltestdata/dqPlus.decTest | 176 +- Lib/test/decimaltestdata/dqQuantize.decTest | 1672 ++-- Lib/test/decimaltestdata/dqReduce.decTest | 366 +- Lib/test/decimaltestdata/dqRemainder.decTest | 1194 +-- .../decimaltestdata/dqRemainderNear.decTest | 1262 +-- Lib/test/decimaltestdata/dqRotate.decTest | 596 +- .../decimaltestdata/dqSameQuantum.decTest | 778 +- Lib/test/decimaltestdata/dqScaleB.decTest | 520 +- Lib/test/decimaltestdata/dqShift.decTest | 596 +- Lib/test/decimaltestdata/dqSubtract.decTest | 1270 +-- Lib/test/decimaltestdata/dqToIntegral.decTest | 514 +- Lib/test/decimaltestdata/dqXor.decTest | 820 +- Lib/test/decimaltestdata/dsBase.decTest | 2124 ++--- Lib/test/decimaltestdata/dsEncode.decTest | 744 +- Lib/test/decimaltestdata/exp.decTest | 1348 ++-- Lib/test/decimaltestdata/fma.decTest | 6852 ++++++++--------- Lib/test/decimaltestdata/invert.decTest | 352 +- Lib/test/decimaltestdata/ln.decTest | 1222 +-- Lib/test/decimaltestdata/log10.decTest | 1102 +-- Lib/test/decimaltestdata/logb.decTest | 376 +- Lib/test/decimaltestdata/maxmag.decTest | 808 +- Lib/test/decimaltestdata/minmag.decTest | 780 +- Lib/test/decimaltestdata/nextminus.decTest | 296 +- Lib/test/decimaltestdata/nextplus.decTest | 300 +- Lib/test/decimaltestdata/nexttoward.decTest | 852 +- Lib/test/decimaltestdata/or.decTest | 668 +- Lib/test/decimaltestdata/powersqrt.decTest | 5940 +++++++------- Lib/test/decimaltestdata/rotate.decTest | 494 +- Lib/test/decimaltestdata/scaleb.decTest | 418 +- Lib/test/decimaltestdata/shift.decTest | 500 +- Lib/test/decimaltestdata/tointegralx.decTest | 510 +- Lib/test/decimaltestdata/xor.decTest | 670 +- Lib/test/test_email/data/msg_26.txt | 92 +- Lib/test/tokenizedata/coding20731.py | 8 +- Lib/test/xmltestdata/expat224_utf8_bug.xml | 4 +- .../expat224_utf8_bug.xml | 4 +- PC/layout/main.py | 6 +- Python/gc.c | 135 +- Python/pystate.c | 7 + Tools/cases_generator/analyzer.py | 4 + 127 files changed, 52159 insertions(+), 51995 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 4b77646e22d..00000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "quarterly" - labels: - - "skip issue" - - "skip news" - ignore: - - dependency-name: "*" - update-types: - - "version-update:semver-minor" - - "version-update:semver-patch" - groups: - actions: - patterns: - - "*" - cooldown: - # https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns - # Cooldowns protect against supply chain attacks by avoiding the - # highest-risk window immediately after new releases. - default-days: 14 - - package-ecosystem: "pip" - directory: "/Tools/" - schedule: - interval: "quarterly" - labels: - - "skip issue" - - "skip news" - cooldown: - default-days: 14 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1af3a0607f9..2b45c5adef5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - 'main' + - 'meta/main' - '3.*' pull_request: branches: diff --git a/Include/internal/pycore_gc.h b/Include/internal/pycore_gc.h index bfe52f42f11..b87e7e43570 100644 --- a/Include/internal/pycore_gc.h +++ b/Include/internal/pycore_gc.h @@ -343,6 +343,55 @@ extern void _PyGC_VisitObjectsWorldStopped(PyInterpreterState *interp, gcvisitobjects_t callback, void *arg); #endif +struct _Ci_PyGCImpl; + +/* + * Collect cyclic garbage. + * + * impl - Pointer to the collection implementation. + * tstate - Indirectly specifies (via tstate->interp) the interpreter + for which collection should be performed. + * generation - Collect generations <= this value + * reason - Why we're collecting + */ +typedef Py_ssize_t (*Ci_gc_collect_t)(struct _Ci_PyGCImpl *impl, PyThreadState* tstate, + int generation, _PyGC_Reason reason); + +// Free a collector +typedef void (*Ci_gc_finalize_t)(struct _Ci_PyGCImpl *impl); + +// An implementation of cyclic garbage collection +typedef struct _Ci_PyGCImpl { + Ci_gc_collect_t collect; + Ci_gc_finalize_t finalize; +} _Ci_PyGCImpl; + +struct _gc_runtime_state; + +/* + * Set the collection implementation. + * + * The callee takes ownership of impl. + * + * Returns a pointer to the previous impl, which the caller is responsible for freeing + * using the returned impl's finalize(). + */ +PyAPI_FUNC(_Ci_PyGCImpl *) _Ci_PyGC_SetImpl(struct _gc_runtime_state *gc_state, _Ci_PyGCImpl *impl); + +/* + * Returns a pointer to the current GC implementation but does not transfer + * ownership to the caller. + */ +PyAPI_FUNC(_Ci_PyGCImpl *) _Ci_PyGC_GetImpl(struct _gc_runtime_state *gc_state); + +/* + * Clear free lists (e.g. frames, tuples, etc.) for the given interpreter. + * + * This should be called by GC implementations after collecting the highest + * generation. + */ +PyAPI_FUNC(void) _Ci_PyGC_ClearFreeLists(PyInterpreterState* interp); + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index c9e918bceda..99cb5759cce 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -90,7 +90,13 @@ _Py_ThreadCanHandleSignals(PyInterpreterState *interp) and interpreter state */ #if !defined(Py_BUILD_CORE_MODULE) +# if defined(Py_ENABLE_SHARED) && _Py__has_attribute(tls_model) +__attribute__((tls_model("initial-exec"))) +# endif extern _Py_thread_local PyThreadState *_Py_tss_tstate; +# if defined(Py_ENABLE_SHARED) && _Py__has_attribute(tls_model) +__attribute__((tls_model("initial-exec"))) +# endif extern _Py_thread_local PyInterpreterState *_Py_tss_interp; #endif diff --git a/Include/patchlevel.h b/Include/patchlevel.h index d82d5258406..71ab529829d 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -27,7 +27,7 @@ #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.16.0a0" +#define PY_VERSION "3.16.0a0+meta" /*--end constants--*/ diff --git a/Include/pystate.h b/Include/pystate.h index 8dad748238f..df0ec96e733 100644 --- a/Include/pystate.h +++ b/Include/pystate.h @@ -119,6 +119,8 @@ PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE); */ PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void); +// Sets the thread state for multi-threaded GC +PyAPI_FUNC(void) Ci_SetTStateForGC(PyThreadState *tstate); /* PEP 788 -- Protection against interpreter finalization */ diff --git a/Lib/site.py b/Lib/site.py index 64e8192a9ac..6f38707bbe4 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -1023,6 +1023,15 @@ def main(): sethelper() if not sys.flags.isolated: enablerlcompleter() + # If we've been built with CinderX support there will be an init_cinderx.py + # included in the default module search path. In this case we import it + # which will have the side-effect of initializing CinderX. If this module + # is missing then we weren't build with CinderX so ignoring the import + # error is fine. + try: + import init_cinderx + except ImportError: + pass execsitecustomize() if ENABLE_USER_SITE: execusercustomize() diff --git a/Lib/test/decimaltestdata/and.decTest b/Lib/test/decimaltestdata/and.decTest index e912394877e..a0cc7865164 100644 --- a/Lib/test/decimaltestdata/and.decTest +++ b/Lib/test/decimaltestdata/and.decTest @@ -1,338 +1,338 @@ ------------------------------------------------------------------------- --- and.decTest -- digitwise logical AND -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check (truth table) -andx001 and 0 0 -> 0 -andx002 and 0 1 -> 0 -andx003 and 1 0 -> 0 -andx004 and 1 1 -> 1 -andx005 and 1100 1010 -> 1000 -andx006 and 1111 10 -> 10 -andx007 and 1111 1010 -> 1010 - --- and at msd and msd-1 -andx010 and 000000000 000000000 -> 0 -andx011 and 000000000 100000000 -> 0 -andx012 and 100000000 000000000 -> 0 -andx013 and 100000000 100000000 -> 100000000 -andx014 and 000000000 000000000 -> 0 -andx015 and 000000000 010000000 -> 0 -andx016 and 010000000 000000000 -> 0 -andx017 and 010000000 010000000 -> 10000000 - --- Various lengths --- 123456789 123456789 123456789 -andx021 and 111111111 111111111 -> 111111111 -andx022 and 111111111111 111111111 -> 111111111 -andx023 and 111111111111 11111111 -> 11111111 -andx024 and 111111111 11111111 -> 11111111 -andx025 and 111111111 1111111 -> 1111111 -andx026 and 111111111111 111111 -> 111111 -andx027 and 111111111111 11111 -> 11111 -andx028 and 111111111111 1111 -> 1111 -andx029 and 111111111111 111 -> 111 -andx031 and 111111111111 11 -> 11 -andx032 and 111111111111 1 -> 1 -andx033 and 111111111111 1111111111 -> 111111111 -andx034 and 11111111111 11111111111 -> 111111111 -andx035 and 1111111111 111111111111 -> 111111111 -andx036 and 111111111 1111111111111 -> 111111111 - -andx040 and 111111111 111111111111 -> 111111111 -andx041 and 11111111 111111111111 -> 11111111 -andx042 and 11111111 111111111 -> 11111111 -andx043 and 1111111 111111111 -> 1111111 -andx044 and 111111 111111111 -> 111111 -andx045 and 11111 111111111 -> 11111 -andx046 and 1111 111111111 -> 1111 -andx047 and 111 111111111 -> 111 -andx048 and 11 111111111 -> 11 -andx049 and 1 111111111 -> 1 - -andx050 and 1111111111 1 -> 1 -andx051 and 111111111 1 -> 1 -andx052 and 11111111 1 -> 1 -andx053 and 1111111 1 -> 1 -andx054 and 111111 1 -> 1 -andx055 and 11111 1 -> 1 -andx056 and 1111 1 -> 1 -andx057 and 111 1 -> 1 -andx058 and 11 1 -> 1 -andx059 and 1 1 -> 1 - -andx060 and 1111111111 0 -> 0 -andx061 and 111111111 0 -> 0 -andx062 and 11111111 0 -> 0 -andx063 and 1111111 0 -> 0 -andx064 and 111111 0 -> 0 -andx065 and 11111 0 -> 0 -andx066 and 1111 0 -> 0 -andx067 and 111 0 -> 0 -andx068 and 11 0 -> 0 -andx069 and 1 0 -> 0 - -andx070 and 1 1111111111 -> 1 -andx071 and 1 111111111 -> 1 -andx072 and 1 11111111 -> 1 -andx073 and 1 1111111 -> 1 -andx074 and 1 111111 -> 1 -andx075 and 1 11111 -> 1 -andx076 and 1 1111 -> 1 -andx077 and 1 111 -> 1 -andx078 and 1 11 -> 1 -andx079 and 1 1 -> 1 - -andx080 and 0 1111111111 -> 0 -andx081 and 0 111111111 -> 0 -andx082 and 0 11111111 -> 0 -andx083 and 0 1111111 -> 0 -andx084 and 0 111111 -> 0 -andx085 and 0 11111 -> 0 -andx086 and 0 1111 -> 0 -andx087 and 0 111 -> 0 -andx088 and 0 11 -> 0 -andx089 and 0 1 -> 0 - -andx090 and 011111111 111111111 -> 11111111 -andx091 and 101111111 111111111 -> 101111111 -andx092 and 110111111 111111111 -> 110111111 -andx093 and 111011111 111111111 -> 111011111 -andx094 and 111101111 111111111 -> 111101111 -andx095 and 111110111 111111111 -> 111110111 -andx096 and 111111011 111111111 -> 111111011 -andx097 and 111111101 111111111 -> 111111101 -andx098 and 111111110 111111111 -> 111111110 - -andx100 and 111111111 011111111 -> 11111111 -andx101 and 111111111 101111111 -> 101111111 -andx102 and 111111111 110111111 -> 110111111 -andx103 and 111111111 111011111 -> 111011111 -andx104 and 111111111 111101111 -> 111101111 -andx105 and 111111111 111110111 -> 111110111 -andx106 and 111111111 111111011 -> 111111011 -andx107 and 111111111 111111101 -> 111111101 -andx108 and 111111111 111111110 -> 111111110 - --- non-0/1 should not be accepted, nor should signs -andx220 and 111111112 111111111 -> NaN Invalid_operation -andx221 and 333333333 333333333 -> NaN Invalid_operation -andx222 and 555555555 555555555 -> NaN Invalid_operation -andx223 and 777777777 777777777 -> NaN Invalid_operation -andx224 and 999999999 999999999 -> NaN Invalid_operation -andx225 and 222222222 999999999 -> NaN Invalid_operation -andx226 and 444444444 999999999 -> NaN Invalid_operation -andx227 and 666666666 999999999 -> NaN Invalid_operation -andx228 and 888888888 999999999 -> NaN Invalid_operation -andx229 and 999999999 222222222 -> NaN Invalid_operation -andx230 and 999999999 444444444 -> NaN Invalid_operation -andx231 and 999999999 666666666 -> NaN Invalid_operation -andx232 and 999999999 888888888 -> NaN Invalid_operation --- a few randoms -andx240 and 567468689 -934981942 -> NaN Invalid_operation -andx241 and 567367689 934981942 -> NaN Invalid_operation -andx242 and -631917772 -706014634 -> NaN Invalid_operation -andx243 and -756253257 138579234 -> NaN Invalid_operation -andx244 and 835590149 567435400 -> NaN Invalid_operation --- test MSD -andx250 and 200000000 100000000 -> NaN Invalid_operation -andx251 and 700000000 100000000 -> NaN Invalid_operation -andx252 and 800000000 100000000 -> NaN Invalid_operation -andx253 and 900000000 100000000 -> NaN Invalid_operation -andx254 and 200000000 000000000 -> NaN Invalid_operation -andx255 and 700000000 000000000 -> NaN Invalid_operation -andx256 and 800000000 000000000 -> NaN Invalid_operation -andx257 and 900000000 000000000 -> NaN Invalid_operation -andx258 and 100000000 200000000 -> NaN Invalid_operation -andx259 and 100000000 700000000 -> NaN Invalid_operation -andx260 and 100000000 800000000 -> NaN Invalid_operation -andx261 and 100000000 900000000 -> NaN Invalid_operation -andx262 and 000000000 200000000 -> NaN Invalid_operation -andx263 and 000000000 700000000 -> NaN Invalid_operation -andx264 and 000000000 800000000 -> NaN Invalid_operation -andx265 and 000000000 900000000 -> NaN Invalid_operation --- test MSD-1 -andx270 and 020000000 100000000 -> NaN Invalid_operation -andx271 and 070100000 100000000 -> NaN Invalid_operation -andx272 and 080010000 100000001 -> NaN Invalid_operation -andx273 and 090001000 100000010 -> NaN Invalid_operation -andx274 and 100000100 020010100 -> NaN Invalid_operation -andx275 and 100000000 070001000 -> NaN Invalid_operation -andx276 and 100000010 080010100 -> NaN Invalid_operation -andx277 and 100000000 090000010 -> NaN Invalid_operation --- test LSD -andx280 and 001000002 100000000 -> NaN Invalid_operation -andx281 and 000000007 100000000 -> NaN Invalid_operation -andx282 and 000000008 100000000 -> NaN Invalid_operation -andx283 and 000000009 100000000 -> NaN Invalid_operation -andx284 and 100000000 000100002 -> NaN Invalid_operation -andx285 and 100100000 001000007 -> NaN Invalid_operation -andx286 and 100010000 010000008 -> NaN Invalid_operation -andx287 and 100001000 100000009 -> NaN Invalid_operation --- test Middie -andx288 and 001020000 100000000 -> NaN Invalid_operation -andx289 and 000070001 100000000 -> NaN Invalid_operation -andx290 and 000080000 100010000 -> NaN Invalid_operation -andx291 and 000090000 100001000 -> NaN Invalid_operation -andx292 and 100000010 000020100 -> NaN Invalid_operation -andx293 and 100100000 000070010 -> NaN Invalid_operation -andx294 and 100010100 000080001 -> NaN Invalid_operation -andx295 and 100001000 000090000 -> NaN Invalid_operation --- signs -andx296 and -100001000 -000000000 -> NaN Invalid_operation -andx297 and -100001000 000010000 -> NaN Invalid_operation -andx298 and 100001000 -000000000 -> NaN Invalid_operation -andx299 and 100001000 000011000 -> 1000 - --- Nmax, Nmin, Ntiny -andx331 and 2 9.99999999E+999 -> NaN Invalid_operation -andx332 and 3 1E-999 -> NaN Invalid_operation -andx333 and 4 1.00000000E-999 -> NaN Invalid_operation -andx334 and 5 1E-1007 -> NaN Invalid_operation -andx335 and 6 -1E-1007 -> NaN Invalid_operation -andx336 and 7 -1.00000000E-999 -> NaN Invalid_operation -andx337 and 8 -1E-999 -> NaN Invalid_operation -andx338 and 9 -9.99999999E+999 -> NaN Invalid_operation -andx341 and 9.99999999E+999 -18 -> NaN Invalid_operation -andx342 and 1E-999 01 -> NaN Invalid_operation -andx343 and 1.00000000E-999 -18 -> NaN Invalid_operation -andx344 and 1E-1007 18 -> NaN Invalid_operation -andx345 and -1E-1007 -10 -> NaN Invalid_operation -andx346 and -1.00000000E-999 18 -> NaN Invalid_operation -andx347 and -1E-999 10 -> NaN Invalid_operation -andx348 and -9.99999999E+999 -18 -> NaN Invalid_operation - --- A few other non-integers -andx361 and 1.0 1 -> NaN Invalid_operation -andx362 and 1E+1 1 -> NaN Invalid_operation -andx363 and 0.0 1 -> NaN Invalid_operation -andx364 and 0E+1 1 -> NaN Invalid_operation -andx365 and 9.9 1 -> NaN Invalid_operation -andx366 and 9E+1 1 -> NaN Invalid_operation -andx371 and 0 1.0 -> NaN Invalid_operation -andx372 and 0 1E+1 -> NaN Invalid_operation -andx373 and 0 0.0 -> NaN Invalid_operation -andx374 and 0 0E+1 -> NaN Invalid_operation -andx375 and 0 9.9 -> NaN Invalid_operation -andx376 and 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -andx780 and -Inf -Inf -> NaN Invalid_operation -andx781 and -Inf -1000 -> NaN Invalid_operation -andx782 and -Inf -1 -> NaN Invalid_operation -andx783 and -Inf -0 -> NaN Invalid_operation -andx784 and -Inf 0 -> NaN Invalid_operation -andx785 and -Inf 1 -> NaN Invalid_operation -andx786 and -Inf 1000 -> NaN Invalid_operation -andx787 and -1000 -Inf -> NaN Invalid_operation -andx788 and -Inf -Inf -> NaN Invalid_operation -andx789 and -1 -Inf -> NaN Invalid_operation -andx790 and -0 -Inf -> NaN Invalid_operation -andx791 and 0 -Inf -> NaN Invalid_operation -andx792 and 1 -Inf -> NaN Invalid_operation -andx793 and 1000 -Inf -> NaN Invalid_operation -andx794 and Inf -Inf -> NaN Invalid_operation - -andx800 and Inf -Inf -> NaN Invalid_operation -andx801 and Inf -1000 -> NaN Invalid_operation -andx802 and Inf -1 -> NaN Invalid_operation -andx803 and Inf -0 -> NaN Invalid_operation -andx804 and Inf 0 -> NaN Invalid_operation -andx805 and Inf 1 -> NaN Invalid_operation -andx806 and Inf 1000 -> NaN Invalid_operation -andx807 and Inf Inf -> NaN Invalid_operation -andx808 and -1000 Inf -> NaN Invalid_operation -andx809 and -Inf Inf -> NaN Invalid_operation -andx810 and -1 Inf -> NaN Invalid_operation -andx811 and -0 Inf -> NaN Invalid_operation -andx812 and 0 Inf -> NaN Invalid_operation -andx813 and 1 Inf -> NaN Invalid_operation -andx814 and 1000 Inf -> NaN Invalid_operation -andx815 and Inf Inf -> NaN Invalid_operation - -andx821 and NaN -Inf -> NaN Invalid_operation -andx822 and NaN -1000 -> NaN Invalid_operation -andx823 and NaN -1 -> NaN Invalid_operation -andx824 and NaN -0 -> NaN Invalid_operation -andx825 and NaN 0 -> NaN Invalid_operation -andx826 and NaN 1 -> NaN Invalid_operation -andx827 and NaN 1000 -> NaN Invalid_operation -andx828 and NaN Inf -> NaN Invalid_operation -andx829 and NaN NaN -> NaN Invalid_operation -andx830 and -Inf NaN -> NaN Invalid_operation -andx831 and -1000 NaN -> NaN Invalid_operation -andx832 and -1 NaN -> NaN Invalid_operation -andx833 and -0 NaN -> NaN Invalid_operation -andx834 and 0 NaN -> NaN Invalid_operation -andx835 and 1 NaN -> NaN Invalid_operation -andx836 and 1000 NaN -> NaN Invalid_operation -andx837 and Inf NaN -> NaN Invalid_operation - -andx841 and sNaN -Inf -> NaN Invalid_operation -andx842 and sNaN -1000 -> NaN Invalid_operation -andx843 and sNaN -1 -> NaN Invalid_operation -andx844 and sNaN -0 -> NaN Invalid_operation -andx845 and sNaN 0 -> NaN Invalid_operation -andx846 and sNaN 1 -> NaN Invalid_operation -andx847 and sNaN 1000 -> NaN Invalid_operation -andx848 and sNaN NaN -> NaN Invalid_operation -andx849 and sNaN sNaN -> NaN Invalid_operation -andx850 and NaN sNaN -> NaN Invalid_operation -andx851 and -Inf sNaN -> NaN Invalid_operation -andx852 and -1000 sNaN -> NaN Invalid_operation -andx853 and -1 sNaN -> NaN Invalid_operation -andx854 and -0 sNaN -> NaN Invalid_operation -andx855 and 0 sNaN -> NaN Invalid_operation -andx856 and 1 sNaN -> NaN Invalid_operation -andx857 and 1000 sNaN -> NaN Invalid_operation -andx858 and Inf sNaN -> NaN Invalid_operation -andx859 and NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -andx861 and NaN1 -Inf -> NaN Invalid_operation -andx862 and +NaN2 -1000 -> NaN Invalid_operation -andx863 and NaN3 1000 -> NaN Invalid_operation -andx864 and NaN4 Inf -> NaN Invalid_operation -andx865 and NaN5 +NaN6 -> NaN Invalid_operation -andx866 and -Inf NaN7 -> NaN Invalid_operation -andx867 and -1000 NaN8 -> NaN Invalid_operation -andx868 and 1000 NaN9 -> NaN Invalid_operation -andx869 and Inf +NaN10 -> NaN Invalid_operation -andx871 and sNaN11 -Inf -> NaN Invalid_operation -andx872 and sNaN12 -1000 -> NaN Invalid_operation -andx873 and sNaN13 1000 -> NaN Invalid_operation -andx874 and sNaN14 NaN17 -> NaN Invalid_operation -andx875 and sNaN15 sNaN18 -> NaN Invalid_operation -andx876 and NaN16 sNaN19 -> NaN Invalid_operation -andx877 and -Inf +sNaN20 -> NaN Invalid_operation -andx878 and -1000 sNaN21 -> NaN Invalid_operation -andx879 and 1000 sNaN22 -> NaN Invalid_operation -andx880 and Inf sNaN23 -> NaN Invalid_operation -andx881 and +NaN25 +sNaN24 -> NaN Invalid_operation -andx882 and -NaN26 NaN28 -> NaN Invalid_operation -andx883 and -sNaN27 sNaN29 -> NaN Invalid_operation -andx884 and 1000 -NaN30 -> NaN Invalid_operation -andx885 and 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- and.decTest -- digitwise logical AND -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check (truth table) +andx001 and 0 0 -> 0 +andx002 and 0 1 -> 0 +andx003 and 1 0 -> 0 +andx004 and 1 1 -> 1 +andx005 and 1100 1010 -> 1000 +andx006 and 1111 10 -> 10 +andx007 and 1111 1010 -> 1010 + +-- and at msd and msd-1 +andx010 and 000000000 000000000 -> 0 +andx011 and 000000000 100000000 -> 0 +andx012 and 100000000 000000000 -> 0 +andx013 and 100000000 100000000 -> 100000000 +andx014 and 000000000 000000000 -> 0 +andx015 and 000000000 010000000 -> 0 +andx016 and 010000000 000000000 -> 0 +andx017 and 010000000 010000000 -> 10000000 + +-- Various lengths +-- 123456789 123456789 123456789 +andx021 and 111111111 111111111 -> 111111111 +andx022 and 111111111111 111111111 -> 111111111 +andx023 and 111111111111 11111111 -> 11111111 +andx024 and 111111111 11111111 -> 11111111 +andx025 and 111111111 1111111 -> 1111111 +andx026 and 111111111111 111111 -> 111111 +andx027 and 111111111111 11111 -> 11111 +andx028 and 111111111111 1111 -> 1111 +andx029 and 111111111111 111 -> 111 +andx031 and 111111111111 11 -> 11 +andx032 and 111111111111 1 -> 1 +andx033 and 111111111111 1111111111 -> 111111111 +andx034 and 11111111111 11111111111 -> 111111111 +andx035 and 1111111111 111111111111 -> 111111111 +andx036 and 111111111 1111111111111 -> 111111111 + +andx040 and 111111111 111111111111 -> 111111111 +andx041 and 11111111 111111111111 -> 11111111 +andx042 and 11111111 111111111 -> 11111111 +andx043 and 1111111 111111111 -> 1111111 +andx044 and 111111 111111111 -> 111111 +andx045 and 11111 111111111 -> 11111 +andx046 and 1111 111111111 -> 1111 +andx047 and 111 111111111 -> 111 +andx048 and 11 111111111 -> 11 +andx049 and 1 111111111 -> 1 + +andx050 and 1111111111 1 -> 1 +andx051 and 111111111 1 -> 1 +andx052 and 11111111 1 -> 1 +andx053 and 1111111 1 -> 1 +andx054 and 111111 1 -> 1 +andx055 and 11111 1 -> 1 +andx056 and 1111 1 -> 1 +andx057 and 111 1 -> 1 +andx058 and 11 1 -> 1 +andx059 and 1 1 -> 1 + +andx060 and 1111111111 0 -> 0 +andx061 and 111111111 0 -> 0 +andx062 and 11111111 0 -> 0 +andx063 and 1111111 0 -> 0 +andx064 and 111111 0 -> 0 +andx065 and 11111 0 -> 0 +andx066 and 1111 0 -> 0 +andx067 and 111 0 -> 0 +andx068 and 11 0 -> 0 +andx069 and 1 0 -> 0 + +andx070 and 1 1111111111 -> 1 +andx071 and 1 111111111 -> 1 +andx072 and 1 11111111 -> 1 +andx073 and 1 1111111 -> 1 +andx074 and 1 111111 -> 1 +andx075 and 1 11111 -> 1 +andx076 and 1 1111 -> 1 +andx077 and 1 111 -> 1 +andx078 and 1 11 -> 1 +andx079 and 1 1 -> 1 + +andx080 and 0 1111111111 -> 0 +andx081 and 0 111111111 -> 0 +andx082 and 0 11111111 -> 0 +andx083 and 0 1111111 -> 0 +andx084 and 0 111111 -> 0 +andx085 and 0 11111 -> 0 +andx086 and 0 1111 -> 0 +andx087 and 0 111 -> 0 +andx088 and 0 11 -> 0 +andx089 and 0 1 -> 0 + +andx090 and 011111111 111111111 -> 11111111 +andx091 and 101111111 111111111 -> 101111111 +andx092 and 110111111 111111111 -> 110111111 +andx093 and 111011111 111111111 -> 111011111 +andx094 and 111101111 111111111 -> 111101111 +andx095 and 111110111 111111111 -> 111110111 +andx096 and 111111011 111111111 -> 111111011 +andx097 and 111111101 111111111 -> 111111101 +andx098 and 111111110 111111111 -> 111111110 + +andx100 and 111111111 011111111 -> 11111111 +andx101 and 111111111 101111111 -> 101111111 +andx102 and 111111111 110111111 -> 110111111 +andx103 and 111111111 111011111 -> 111011111 +andx104 and 111111111 111101111 -> 111101111 +andx105 and 111111111 111110111 -> 111110111 +andx106 and 111111111 111111011 -> 111111011 +andx107 and 111111111 111111101 -> 111111101 +andx108 and 111111111 111111110 -> 111111110 + +-- non-0/1 should not be accepted, nor should signs +andx220 and 111111112 111111111 -> NaN Invalid_operation +andx221 and 333333333 333333333 -> NaN Invalid_operation +andx222 and 555555555 555555555 -> NaN Invalid_operation +andx223 and 777777777 777777777 -> NaN Invalid_operation +andx224 and 999999999 999999999 -> NaN Invalid_operation +andx225 and 222222222 999999999 -> NaN Invalid_operation +andx226 and 444444444 999999999 -> NaN Invalid_operation +andx227 and 666666666 999999999 -> NaN Invalid_operation +andx228 and 888888888 999999999 -> NaN Invalid_operation +andx229 and 999999999 222222222 -> NaN Invalid_operation +andx230 and 999999999 444444444 -> NaN Invalid_operation +andx231 and 999999999 666666666 -> NaN Invalid_operation +andx232 and 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +andx240 and 567468689 -934981942 -> NaN Invalid_operation +andx241 and 567367689 934981942 -> NaN Invalid_operation +andx242 and -631917772 -706014634 -> NaN Invalid_operation +andx243 and -756253257 138579234 -> NaN Invalid_operation +andx244 and 835590149 567435400 -> NaN Invalid_operation +-- test MSD +andx250 and 200000000 100000000 -> NaN Invalid_operation +andx251 and 700000000 100000000 -> NaN Invalid_operation +andx252 and 800000000 100000000 -> NaN Invalid_operation +andx253 and 900000000 100000000 -> NaN Invalid_operation +andx254 and 200000000 000000000 -> NaN Invalid_operation +andx255 and 700000000 000000000 -> NaN Invalid_operation +andx256 and 800000000 000000000 -> NaN Invalid_operation +andx257 and 900000000 000000000 -> NaN Invalid_operation +andx258 and 100000000 200000000 -> NaN Invalid_operation +andx259 and 100000000 700000000 -> NaN Invalid_operation +andx260 and 100000000 800000000 -> NaN Invalid_operation +andx261 and 100000000 900000000 -> NaN Invalid_operation +andx262 and 000000000 200000000 -> NaN Invalid_operation +andx263 and 000000000 700000000 -> NaN Invalid_operation +andx264 and 000000000 800000000 -> NaN Invalid_operation +andx265 and 000000000 900000000 -> NaN Invalid_operation +-- test MSD-1 +andx270 and 020000000 100000000 -> NaN Invalid_operation +andx271 and 070100000 100000000 -> NaN Invalid_operation +andx272 and 080010000 100000001 -> NaN Invalid_operation +andx273 and 090001000 100000010 -> NaN Invalid_operation +andx274 and 100000100 020010100 -> NaN Invalid_operation +andx275 and 100000000 070001000 -> NaN Invalid_operation +andx276 and 100000010 080010100 -> NaN Invalid_operation +andx277 and 100000000 090000010 -> NaN Invalid_operation +-- test LSD +andx280 and 001000002 100000000 -> NaN Invalid_operation +andx281 and 000000007 100000000 -> NaN Invalid_operation +andx282 and 000000008 100000000 -> NaN Invalid_operation +andx283 and 000000009 100000000 -> NaN Invalid_operation +andx284 and 100000000 000100002 -> NaN Invalid_operation +andx285 and 100100000 001000007 -> NaN Invalid_operation +andx286 and 100010000 010000008 -> NaN Invalid_operation +andx287 and 100001000 100000009 -> NaN Invalid_operation +-- test Middie +andx288 and 001020000 100000000 -> NaN Invalid_operation +andx289 and 000070001 100000000 -> NaN Invalid_operation +andx290 and 000080000 100010000 -> NaN Invalid_operation +andx291 and 000090000 100001000 -> NaN Invalid_operation +andx292 and 100000010 000020100 -> NaN Invalid_operation +andx293 and 100100000 000070010 -> NaN Invalid_operation +andx294 and 100010100 000080001 -> NaN Invalid_operation +andx295 and 100001000 000090000 -> NaN Invalid_operation +-- signs +andx296 and -100001000 -000000000 -> NaN Invalid_operation +andx297 and -100001000 000010000 -> NaN Invalid_operation +andx298 and 100001000 -000000000 -> NaN Invalid_operation +andx299 and 100001000 000011000 -> 1000 + +-- Nmax, Nmin, Ntiny +andx331 and 2 9.99999999E+999 -> NaN Invalid_operation +andx332 and 3 1E-999 -> NaN Invalid_operation +andx333 and 4 1.00000000E-999 -> NaN Invalid_operation +andx334 and 5 1E-1007 -> NaN Invalid_operation +andx335 and 6 -1E-1007 -> NaN Invalid_operation +andx336 and 7 -1.00000000E-999 -> NaN Invalid_operation +andx337 and 8 -1E-999 -> NaN Invalid_operation +andx338 and 9 -9.99999999E+999 -> NaN Invalid_operation +andx341 and 9.99999999E+999 -18 -> NaN Invalid_operation +andx342 and 1E-999 01 -> NaN Invalid_operation +andx343 and 1.00000000E-999 -18 -> NaN Invalid_operation +andx344 and 1E-1007 18 -> NaN Invalid_operation +andx345 and -1E-1007 -10 -> NaN Invalid_operation +andx346 and -1.00000000E-999 18 -> NaN Invalid_operation +andx347 and -1E-999 10 -> NaN Invalid_operation +andx348 and -9.99999999E+999 -18 -> NaN Invalid_operation + +-- A few other non-integers +andx361 and 1.0 1 -> NaN Invalid_operation +andx362 and 1E+1 1 -> NaN Invalid_operation +andx363 and 0.0 1 -> NaN Invalid_operation +andx364 and 0E+1 1 -> NaN Invalid_operation +andx365 and 9.9 1 -> NaN Invalid_operation +andx366 and 9E+1 1 -> NaN Invalid_operation +andx371 and 0 1.0 -> NaN Invalid_operation +andx372 and 0 1E+1 -> NaN Invalid_operation +andx373 and 0 0.0 -> NaN Invalid_operation +andx374 and 0 0E+1 -> NaN Invalid_operation +andx375 and 0 9.9 -> NaN Invalid_operation +andx376 and 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +andx780 and -Inf -Inf -> NaN Invalid_operation +andx781 and -Inf -1000 -> NaN Invalid_operation +andx782 and -Inf -1 -> NaN Invalid_operation +andx783 and -Inf -0 -> NaN Invalid_operation +andx784 and -Inf 0 -> NaN Invalid_operation +andx785 and -Inf 1 -> NaN Invalid_operation +andx786 and -Inf 1000 -> NaN Invalid_operation +andx787 and -1000 -Inf -> NaN Invalid_operation +andx788 and -Inf -Inf -> NaN Invalid_operation +andx789 and -1 -Inf -> NaN Invalid_operation +andx790 and -0 -Inf -> NaN Invalid_operation +andx791 and 0 -Inf -> NaN Invalid_operation +andx792 and 1 -Inf -> NaN Invalid_operation +andx793 and 1000 -Inf -> NaN Invalid_operation +andx794 and Inf -Inf -> NaN Invalid_operation + +andx800 and Inf -Inf -> NaN Invalid_operation +andx801 and Inf -1000 -> NaN Invalid_operation +andx802 and Inf -1 -> NaN Invalid_operation +andx803 and Inf -0 -> NaN Invalid_operation +andx804 and Inf 0 -> NaN Invalid_operation +andx805 and Inf 1 -> NaN Invalid_operation +andx806 and Inf 1000 -> NaN Invalid_operation +andx807 and Inf Inf -> NaN Invalid_operation +andx808 and -1000 Inf -> NaN Invalid_operation +andx809 and -Inf Inf -> NaN Invalid_operation +andx810 and -1 Inf -> NaN Invalid_operation +andx811 and -0 Inf -> NaN Invalid_operation +andx812 and 0 Inf -> NaN Invalid_operation +andx813 and 1 Inf -> NaN Invalid_operation +andx814 and 1000 Inf -> NaN Invalid_operation +andx815 and Inf Inf -> NaN Invalid_operation + +andx821 and NaN -Inf -> NaN Invalid_operation +andx822 and NaN -1000 -> NaN Invalid_operation +andx823 and NaN -1 -> NaN Invalid_operation +andx824 and NaN -0 -> NaN Invalid_operation +andx825 and NaN 0 -> NaN Invalid_operation +andx826 and NaN 1 -> NaN Invalid_operation +andx827 and NaN 1000 -> NaN Invalid_operation +andx828 and NaN Inf -> NaN Invalid_operation +andx829 and NaN NaN -> NaN Invalid_operation +andx830 and -Inf NaN -> NaN Invalid_operation +andx831 and -1000 NaN -> NaN Invalid_operation +andx832 and -1 NaN -> NaN Invalid_operation +andx833 and -0 NaN -> NaN Invalid_operation +andx834 and 0 NaN -> NaN Invalid_operation +andx835 and 1 NaN -> NaN Invalid_operation +andx836 and 1000 NaN -> NaN Invalid_operation +andx837 and Inf NaN -> NaN Invalid_operation + +andx841 and sNaN -Inf -> NaN Invalid_operation +andx842 and sNaN -1000 -> NaN Invalid_operation +andx843 and sNaN -1 -> NaN Invalid_operation +andx844 and sNaN -0 -> NaN Invalid_operation +andx845 and sNaN 0 -> NaN Invalid_operation +andx846 and sNaN 1 -> NaN Invalid_operation +andx847 and sNaN 1000 -> NaN Invalid_operation +andx848 and sNaN NaN -> NaN Invalid_operation +andx849 and sNaN sNaN -> NaN Invalid_operation +andx850 and NaN sNaN -> NaN Invalid_operation +andx851 and -Inf sNaN -> NaN Invalid_operation +andx852 and -1000 sNaN -> NaN Invalid_operation +andx853 and -1 sNaN -> NaN Invalid_operation +andx854 and -0 sNaN -> NaN Invalid_operation +andx855 and 0 sNaN -> NaN Invalid_operation +andx856 and 1 sNaN -> NaN Invalid_operation +andx857 and 1000 sNaN -> NaN Invalid_operation +andx858 and Inf sNaN -> NaN Invalid_operation +andx859 and NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +andx861 and NaN1 -Inf -> NaN Invalid_operation +andx862 and +NaN2 -1000 -> NaN Invalid_operation +andx863 and NaN3 1000 -> NaN Invalid_operation +andx864 and NaN4 Inf -> NaN Invalid_operation +andx865 and NaN5 +NaN6 -> NaN Invalid_operation +andx866 and -Inf NaN7 -> NaN Invalid_operation +andx867 and -1000 NaN8 -> NaN Invalid_operation +andx868 and 1000 NaN9 -> NaN Invalid_operation +andx869 and Inf +NaN10 -> NaN Invalid_operation +andx871 and sNaN11 -Inf -> NaN Invalid_operation +andx872 and sNaN12 -1000 -> NaN Invalid_operation +andx873 and sNaN13 1000 -> NaN Invalid_operation +andx874 and sNaN14 NaN17 -> NaN Invalid_operation +andx875 and sNaN15 sNaN18 -> NaN Invalid_operation +andx876 and NaN16 sNaN19 -> NaN Invalid_operation +andx877 and -Inf +sNaN20 -> NaN Invalid_operation +andx878 and -1000 sNaN21 -> NaN Invalid_operation +andx879 and 1000 sNaN22 -> NaN Invalid_operation +andx880 and Inf sNaN23 -> NaN Invalid_operation +andx881 and +NaN25 +sNaN24 -> NaN Invalid_operation +andx882 and -NaN26 NaN28 -> NaN Invalid_operation +andx883 and -sNaN27 sNaN29 -> NaN Invalid_operation +andx884 and 1000 -NaN30 -> NaN Invalid_operation +andx885 and 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/class.decTest b/Lib/test/decimaltestdata/class.decTest index 62d2fa472f1..fa5bc3a12f0 100644 --- a/Lib/test/decimaltestdata/class.decTest +++ b/Lib/test/decimaltestdata/class.decTest @@ -1,131 +1,131 @@ ------------------------------------------------------------------------- --- class.decTest -- Class operations -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- [New 2006.11.27] - -precision: 9 -maxExponent: 999 -minExponent: -999 -extended: 1 -clamp: 1 -rounding: half_even - -clasx001 class 0 -> +Zero -clasx002 class 0.00 -> +Zero -clasx003 class 0E+5 -> +Zero -clasx004 class 1E-1007 -> +Subnormal -clasx005 class 0.1E-999 -> +Subnormal -clasx006 class 0.99999999E-999 -> +Subnormal -clasx007 class 1.00000000E-999 -> +Normal -clasx008 class 1E-999 -> +Normal -clasx009 class 1E-100 -> +Normal -clasx010 class 1E-10 -> +Normal -clasx012 class 1E-1 -> +Normal -clasx013 class 1 -> +Normal -clasx014 class 2.50 -> +Normal -clasx015 class 100.100 -> +Normal -clasx016 class 1E+30 -> +Normal -clasx017 class 1E+999 -> +Normal -clasx018 class 9.99999999E+999 -> +Normal -clasx019 class Inf -> +Infinity - -clasx021 class -0 -> -Zero -clasx022 class -0.00 -> -Zero -clasx023 class -0E+5 -> -Zero -clasx024 class -1E-1007 -> -Subnormal -clasx025 class -0.1E-999 -> -Subnormal -clasx026 class -0.99999999E-999 -> -Subnormal -clasx027 class -1.00000000E-999 -> -Normal -clasx028 class -1E-999 -> -Normal -clasx029 class -1E-100 -> -Normal -clasx030 class -1E-10 -> -Normal -clasx032 class -1E-1 -> -Normal -clasx033 class -1 -> -Normal -clasx034 class -2.50 -> -Normal -clasx035 class -100.100 -> -Normal -clasx036 class -1E+30 -> -Normal -clasx037 class -1E+999 -> -Normal -clasx038 class -9.99999999E+999 -> -Normal -clasx039 class -Inf -> -Infinity - -clasx041 class NaN -> NaN -clasx042 class -NaN -> NaN -clasx043 class +NaN12345 -> NaN -clasx044 class sNaN -> sNaN -clasx045 class -sNaN -> sNaN -clasx046 class +sNaN12345 -> sNaN - - --- decimal64 bounds - -precision: 16 -maxExponent: 384 -minExponent: -383 -clamp: 1 -rounding: half_even - -clasx201 class 0 -> +Zero -clasx202 class 0.00 -> +Zero -clasx203 class 0E+5 -> +Zero -clasx204 class 1E-396 -> +Subnormal -clasx205 class 0.1E-383 -> +Subnormal -clasx206 class 0.999999999999999E-383 -> +Subnormal -clasx207 class 1.000000000000000E-383 -> +Normal -clasx208 class 1E-383 -> +Normal -clasx209 class 1E-100 -> +Normal -clasx210 class 1E-10 -> +Normal -clasx212 class 1E-1 -> +Normal -clasx213 class 1 -> +Normal -clasx214 class 2.50 -> +Normal -clasx215 class 100.100 -> +Normal -clasx216 class 1E+30 -> +Normal -clasx217 class 1E+384 -> +Normal -clasx218 class 9.999999999999999E+384 -> +Normal -clasx219 class Inf -> +Infinity - -clasx221 class -0 -> -Zero -clasx222 class -0.00 -> -Zero -clasx223 class -0E+5 -> -Zero -clasx224 class -1E-396 -> -Subnormal -clasx225 class -0.1E-383 -> -Subnormal -clasx226 class -0.999999999999999E-383 -> -Subnormal -clasx227 class -1.000000000000000E-383 -> -Normal -clasx228 class -1E-383 -> -Normal -clasx229 class -1E-100 -> -Normal -clasx230 class -1E-10 -> -Normal -clasx232 class -1E-1 -> -Normal -clasx233 class -1 -> -Normal -clasx234 class -2.50 -> -Normal -clasx235 class -100.100 -> -Normal -clasx236 class -1E+30 -> -Normal -clasx237 class -1E+384 -> -Normal -clasx238 class -9.999999999999999E+384 -> -Normal -clasx239 class -Inf -> -Infinity - -clasx241 class NaN -> NaN -clasx242 class -NaN -> NaN -clasx243 class +NaN12345 -> NaN -clasx244 class sNaN -> sNaN -clasx245 class -sNaN -> sNaN -clasx246 class +sNaN12345 -> sNaN - - - +------------------------------------------------------------------------ +-- class.decTest -- Class operations -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- [New 2006.11.27] + +precision: 9 +maxExponent: 999 +minExponent: -999 +extended: 1 +clamp: 1 +rounding: half_even + +clasx001 class 0 -> +Zero +clasx002 class 0.00 -> +Zero +clasx003 class 0E+5 -> +Zero +clasx004 class 1E-1007 -> +Subnormal +clasx005 class 0.1E-999 -> +Subnormal +clasx006 class 0.99999999E-999 -> +Subnormal +clasx007 class 1.00000000E-999 -> +Normal +clasx008 class 1E-999 -> +Normal +clasx009 class 1E-100 -> +Normal +clasx010 class 1E-10 -> +Normal +clasx012 class 1E-1 -> +Normal +clasx013 class 1 -> +Normal +clasx014 class 2.50 -> +Normal +clasx015 class 100.100 -> +Normal +clasx016 class 1E+30 -> +Normal +clasx017 class 1E+999 -> +Normal +clasx018 class 9.99999999E+999 -> +Normal +clasx019 class Inf -> +Infinity + +clasx021 class -0 -> -Zero +clasx022 class -0.00 -> -Zero +clasx023 class -0E+5 -> -Zero +clasx024 class -1E-1007 -> -Subnormal +clasx025 class -0.1E-999 -> -Subnormal +clasx026 class -0.99999999E-999 -> -Subnormal +clasx027 class -1.00000000E-999 -> -Normal +clasx028 class -1E-999 -> -Normal +clasx029 class -1E-100 -> -Normal +clasx030 class -1E-10 -> -Normal +clasx032 class -1E-1 -> -Normal +clasx033 class -1 -> -Normal +clasx034 class -2.50 -> -Normal +clasx035 class -100.100 -> -Normal +clasx036 class -1E+30 -> -Normal +clasx037 class -1E+999 -> -Normal +clasx038 class -9.99999999E+999 -> -Normal +clasx039 class -Inf -> -Infinity + +clasx041 class NaN -> NaN +clasx042 class -NaN -> NaN +clasx043 class +NaN12345 -> NaN +clasx044 class sNaN -> sNaN +clasx045 class -sNaN -> sNaN +clasx046 class +sNaN12345 -> sNaN + + +-- decimal64 bounds + +precision: 16 +maxExponent: 384 +minExponent: -383 +clamp: 1 +rounding: half_even + +clasx201 class 0 -> +Zero +clasx202 class 0.00 -> +Zero +clasx203 class 0E+5 -> +Zero +clasx204 class 1E-396 -> +Subnormal +clasx205 class 0.1E-383 -> +Subnormal +clasx206 class 0.999999999999999E-383 -> +Subnormal +clasx207 class 1.000000000000000E-383 -> +Normal +clasx208 class 1E-383 -> +Normal +clasx209 class 1E-100 -> +Normal +clasx210 class 1E-10 -> +Normal +clasx212 class 1E-1 -> +Normal +clasx213 class 1 -> +Normal +clasx214 class 2.50 -> +Normal +clasx215 class 100.100 -> +Normal +clasx216 class 1E+30 -> +Normal +clasx217 class 1E+384 -> +Normal +clasx218 class 9.999999999999999E+384 -> +Normal +clasx219 class Inf -> +Infinity + +clasx221 class -0 -> -Zero +clasx222 class -0.00 -> -Zero +clasx223 class -0E+5 -> -Zero +clasx224 class -1E-396 -> -Subnormal +clasx225 class -0.1E-383 -> -Subnormal +clasx226 class -0.999999999999999E-383 -> -Subnormal +clasx227 class -1.000000000000000E-383 -> -Normal +clasx228 class -1E-383 -> -Normal +clasx229 class -1E-100 -> -Normal +clasx230 class -1E-10 -> -Normal +clasx232 class -1E-1 -> -Normal +clasx233 class -1 -> -Normal +clasx234 class -2.50 -> -Normal +clasx235 class -100.100 -> -Normal +clasx236 class -1E+30 -> -Normal +clasx237 class -1E+384 -> -Normal +clasx238 class -9.999999999999999E+384 -> -Normal +clasx239 class -Inf -> -Infinity + +clasx241 class NaN -> NaN +clasx242 class -NaN -> NaN +clasx243 class +NaN12345 -> NaN +clasx244 class sNaN -> sNaN +clasx245 class -sNaN -> sNaN +clasx246 class +sNaN12345 -> sNaN + + + diff --git a/Lib/test/decimaltestdata/comparetotal.decTest b/Lib/test/decimaltestdata/comparetotal.decTest index ad87b4ce29d..252c49fb61c 100644 --- a/Lib/test/decimaltestdata/comparetotal.decTest +++ b/Lib/test/decimaltestdata/comparetotal.decTest @@ -1,798 +1,798 @@ ------------------------------------------------------------------------- --- comparetotal.decTest -- decimal comparison using total ordering -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - -extended: 1 -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - --- sanity checks -cotx001 comparetotal -2 -2 -> 0 -cotx002 comparetotal -2 -1 -> -1 -cotx003 comparetotal -2 0 -> -1 -cotx004 comparetotal -2 1 -> -1 -cotx005 comparetotal -2 2 -> -1 -cotx006 comparetotal -1 -2 -> 1 -cotx007 comparetotal -1 -1 -> 0 -cotx008 comparetotal -1 0 -> -1 -cotx009 comparetotal -1 1 -> -1 -cotx010 comparetotal -1 2 -> -1 -cotx011 comparetotal 0 -2 -> 1 -cotx012 comparetotal 0 -1 -> 1 -cotx013 comparetotal 0 0 -> 0 -cotx014 comparetotal 0 1 -> -1 -cotx015 comparetotal 0 2 -> -1 -cotx016 comparetotal 1 -2 -> 1 -cotx017 comparetotal 1 -1 -> 1 -cotx018 comparetotal 1 0 -> 1 -cotx019 comparetotal 1 1 -> 0 -cotx020 comparetotal 1 2 -> -1 -cotx021 comparetotal 2 -2 -> 1 -cotx022 comparetotal 2 -1 -> 1 -cotx023 comparetotal 2 0 -> 1 -cotx025 comparetotal 2 1 -> 1 -cotx026 comparetotal 2 2 -> 0 - -cotx031 comparetotal -20 -20 -> 0 -cotx032 comparetotal -20 -10 -> -1 -cotx033 comparetotal -20 00 -> -1 -cotx034 comparetotal -20 10 -> -1 -cotx035 comparetotal -20 20 -> -1 -cotx036 comparetotal -10 -20 -> 1 -cotx037 comparetotal -10 -10 -> 0 -cotx038 comparetotal -10 00 -> -1 -cotx039 comparetotal -10 10 -> -1 -cotx040 comparetotal -10 20 -> -1 -cotx041 comparetotal 00 -20 -> 1 -cotx042 comparetotal 00 -10 -> 1 -cotx043 comparetotal 00 00 -> 0 -cotx044 comparetotal 00 10 -> -1 -cotx045 comparetotal 00 20 -> -1 -cotx046 comparetotal 10 -20 -> 1 -cotx047 comparetotal 10 -10 -> 1 -cotx048 comparetotal 10 00 -> 1 -cotx049 comparetotal 10 10 -> 0 -cotx050 comparetotal 10 20 -> -1 -cotx051 comparetotal 20 -20 -> 1 -cotx052 comparetotal 20 -10 -> 1 -cotx053 comparetotal 20 00 -> 1 -cotx055 comparetotal 20 10 -> 1 -cotx056 comparetotal 20 20 -> 0 - -cotx061 comparetotal -2.0 -2.0 -> 0 -cotx062 comparetotal -2.0 -1.0 -> -1 -cotx063 comparetotal -2.0 0.0 -> -1 -cotx064 comparetotal -2.0 1.0 -> -1 -cotx065 comparetotal -2.0 2.0 -> -1 -cotx066 comparetotal -1.0 -2.0 -> 1 -cotx067 comparetotal -1.0 -1.0 -> 0 -cotx068 comparetotal -1.0 0.0 -> -1 -cotx069 comparetotal -1.0 1.0 -> -1 -cotx070 comparetotal -1.0 2.0 -> -1 -cotx071 comparetotal 0.0 -2.0 -> 1 -cotx072 comparetotal 0.0 -1.0 -> 1 -cotx073 comparetotal 0.0 0.0 -> 0 -cotx074 comparetotal 0.0 1.0 -> -1 -cotx075 comparetotal 0.0 2.0 -> -1 -cotx076 comparetotal 1.0 -2.0 -> 1 -cotx077 comparetotal 1.0 -1.0 -> 1 -cotx078 comparetotal 1.0 0.0 -> 1 -cotx079 comparetotal 1.0 1.0 -> 0 -cotx080 comparetotal 1.0 2.0 -> -1 -cotx081 comparetotal 2.0 -2.0 -> 1 -cotx082 comparetotal 2.0 -1.0 -> 1 -cotx083 comparetotal 2.0 0.0 -> 1 -cotx085 comparetotal 2.0 1.0 -> 1 -cotx086 comparetotal 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -maxexponent: 999999999 -minexponent: -999999999 -cotx090 comparetotal 9.99999999E+999999999 9.99999999E+999999999 -> 0 -cotx091 comparetotal -9.99999999E+999999999 9.99999999E+999999999 -> -1 -cotx092 comparetotal 9.99999999E+999999999 -9.99999999E+999999999 -> 1 -cotx093 comparetotal -9.99999999E+999999999 -9.99999999E+999999999 -> 0 - --- Examples -cotx094 comparetotal 12.73 127.9 -> -1 -cotx095 comparetotal -127 12 -> -1 -cotx096 comparetotal 12.30 12.3 -> -1 -cotx097 comparetotal 12.30 12.30 -> 0 -cotx098 comparetotal 12.3 12.300 -> 1 -cotx099 comparetotal 12.3 NaN -> -1 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -cotx100 comparetotal 7.0 7.0 -> 0 -cotx101 comparetotal 7.0 7 -> -1 -cotx102 comparetotal 7 7.0 -> 1 -cotx103 comparetotal 7E+0 7.0 -> 1 -cotx104 comparetotal 70E-1 7.0 -> 0 -cotx105 comparetotal 0.7E+1 7 -> 0 -cotx106 comparetotal 70E-1 7 -> -1 -cotx107 comparetotal 7.0 7E+0 -> -1 -cotx108 comparetotal 7.0 70E-1 -> 0 -cotx109 comparetotal 7 0.7E+1 -> 0 -cotx110 comparetotal 7 70E-1 -> 1 - -cotx120 comparetotal 8.0 7.0 -> 1 -cotx121 comparetotal 8.0 7 -> 1 -cotx122 comparetotal 8 7.0 -> 1 -cotx123 comparetotal 8E+0 7.0 -> 1 -cotx124 comparetotal 80E-1 7.0 -> 1 -cotx125 comparetotal 0.8E+1 7 -> 1 -cotx126 comparetotal 80E-1 7 -> 1 -cotx127 comparetotal 8.0 7E+0 -> 1 -cotx128 comparetotal 8.0 70E-1 -> 1 -cotx129 comparetotal 8 0.7E+1 -> 1 -cotx130 comparetotal 8 70E-1 -> 1 - -cotx140 comparetotal 8.0 9.0 -> -1 -cotx141 comparetotal 8.0 9 -> -1 -cotx142 comparetotal 8 9.0 -> -1 -cotx143 comparetotal 8E+0 9.0 -> -1 -cotx144 comparetotal 80E-1 9.0 -> -1 -cotx145 comparetotal 0.8E+1 9 -> -1 -cotx146 comparetotal 80E-1 9 -> -1 -cotx147 comparetotal 8.0 9E+0 -> -1 -cotx148 comparetotal 8.0 90E-1 -> -1 -cotx149 comparetotal 8 0.9E+1 -> -1 -cotx150 comparetotal 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -cotx200 comparetotal -7.0 7.0 -> -1 -cotx201 comparetotal -7.0 7 -> -1 -cotx202 comparetotal -7 7.0 -> -1 -cotx203 comparetotal -7E+0 7.0 -> -1 -cotx204 comparetotal -70E-1 7.0 -> -1 -cotx205 comparetotal -0.7E+1 7 -> -1 -cotx206 comparetotal -70E-1 7 -> -1 -cotx207 comparetotal -7.0 7E+0 -> -1 -cotx208 comparetotal -7.0 70E-1 -> -1 -cotx209 comparetotal -7 0.7E+1 -> -1 -cotx210 comparetotal -7 70E-1 -> -1 - -cotx220 comparetotal -8.0 7.0 -> -1 -cotx221 comparetotal -8.0 7 -> -1 -cotx222 comparetotal -8 7.0 -> -1 -cotx223 comparetotal -8E+0 7.0 -> -1 -cotx224 comparetotal -80E-1 7.0 -> -1 -cotx225 comparetotal -0.8E+1 7 -> -1 -cotx226 comparetotal -80E-1 7 -> -1 -cotx227 comparetotal -8.0 7E+0 -> -1 -cotx228 comparetotal -8.0 70E-1 -> -1 -cotx229 comparetotal -8 0.7E+1 -> -1 -cotx230 comparetotal -8 70E-1 -> -1 - -cotx240 comparetotal -8.0 9.0 -> -1 -cotx241 comparetotal -8.0 9 -> -1 -cotx242 comparetotal -8 9.0 -> -1 -cotx243 comparetotal -8E+0 9.0 -> -1 -cotx244 comparetotal -80E-1 9.0 -> -1 -cotx245 comparetotal -0.8E+1 9 -> -1 -cotx246 comparetotal -80E-1 9 -> -1 -cotx247 comparetotal -8.0 9E+0 -> -1 -cotx248 comparetotal -8.0 90E-1 -> -1 -cotx249 comparetotal -8 0.9E+1 -> -1 -cotx250 comparetotal -8 90E-1 -> -1 - --- and again, with sign changes +- .. -cotx300 comparetotal 7.0 -7.0 -> 1 -cotx301 comparetotal 7.0 -7 -> 1 -cotx302 comparetotal 7 -7.0 -> 1 -cotx303 comparetotal 7E+0 -7.0 -> 1 -cotx304 comparetotal 70E-1 -7.0 -> 1 -cotx305 comparetotal .7E+1 -7 -> 1 -cotx306 comparetotal 70E-1 -7 -> 1 -cotx307 comparetotal 7.0 -7E+0 -> 1 -cotx308 comparetotal 7.0 -70E-1 -> 1 -cotx309 comparetotal 7 -.7E+1 -> 1 -cotx310 comparetotal 7 -70E-1 -> 1 - -cotx320 comparetotal 8.0 -7.0 -> 1 -cotx321 comparetotal 8.0 -7 -> 1 -cotx322 comparetotal 8 -7.0 -> 1 -cotx323 comparetotal 8E+0 -7.0 -> 1 -cotx324 comparetotal 80E-1 -7.0 -> 1 -cotx325 comparetotal .8E+1 -7 -> 1 -cotx326 comparetotal 80E-1 -7 -> 1 -cotx327 comparetotal 8.0 -7E+0 -> 1 -cotx328 comparetotal 8.0 -70E-1 -> 1 -cotx329 comparetotal 8 -.7E+1 -> 1 -cotx330 comparetotal 8 -70E-1 -> 1 - -cotx340 comparetotal 8.0 -9.0 -> 1 -cotx341 comparetotal 8.0 -9 -> 1 -cotx342 comparetotal 8 -9.0 -> 1 -cotx343 comparetotal 8E+0 -9.0 -> 1 -cotx344 comparetotal 80E-1 -9.0 -> 1 -cotx345 comparetotal .8E+1 -9 -> 1 -cotx346 comparetotal 80E-1 -9 -> 1 -cotx347 comparetotal 8.0 -9E+0 -> 1 -cotx348 comparetotal 8.0 -90E-1 -> 1 -cotx349 comparetotal 8 -.9E+1 -> 1 -cotx350 comparetotal 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -cotx400 comparetotal -7.0 -7.0 -> 0 -cotx401 comparetotal -7.0 -7 -> 1 -cotx402 comparetotal -7 -7.0 -> -1 -cotx403 comparetotal -7E+0 -7.0 -> -1 -cotx404 comparetotal -70E-1 -7.0 -> 0 -cotx405 comparetotal -.7E+1 -7 -> 0 -cotx406 comparetotal -70E-1 -7 -> 1 -cotx407 comparetotal -7.0 -7E+0 -> 1 -cotx408 comparetotal -7.0 -70E-1 -> 0 -cotx409 comparetotal -7 -.7E+1 -> 0 -cotx410 comparetotal -7 -70E-1 -> -1 - -cotx420 comparetotal -8.0 -7.0 -> -1 -cotx421 comparetotal -8.0 -7 -> -1 -cotx422 comparetotal -8 -7.0 -> -1 -cotx423 comparetotal -8E+0 -7.0 -> -1 -cotx424 comparetotal -80E-1 -7.0 -> -1 -cotx425 comparetotal -.8E+1 -7 -> -1 -cotx426 comparetotal -80E-1 -7 -> -1 -cotx427 comparetotal -8.0 -7E+0 -> -1 -cotx428 comparetotal -8.0 -70E-1 -> -1 -cotx429 comparetotal -8 -.7E+1 -> -1 -cotx430 comparetotal -8 -70E-1 -> -1 - -cotx440 comparetotal -8.0 -9.0 -> 1 -cotx441 comparetotal -8.0 -9 -> 1 -cotx442 comparetotal -8 -9.0 -> 1 -cotx443 comparetotal -8E+0 -9.0 -> 1 -cotx444 comparetotal -80E-1 -9.0 -> 1 -cotx445 comparetotal -.8E+1 -9 -> 1 -cotx446 comparetotal -80E-1 -9 -> 1 -cotx447 comparetotal -8.0 -9E+0 -> 1 -cotx448 comparetotal -8.0 -90E-1 -> 1 -cotx449 comparetotal -8 -.9E+1 -> 1 -cotx450 comparetotal -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -precision: 40 -cotx470 comparetotal 123.4560000000000000E789 123.456E789 -> -1 -cotx471 comparetotal 123.456000000000000E-89 123.456E-89 -> -1 -cotx472 comparetotal 123.45600000000000E789 123.456E789 -> -1 -cotx473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 -cotx474 comparetotal 123.456000000000E789 123.456E789 -> -1 -cotx475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 -cotx476 comparetotal 123.4560000000E789 123.456E789 -> -1 -cotx477 comparetotal 123.456000000E-89 123.456E-89 -> -1 -cotx478 comparetotal 123.45600000E789 123.456E789 -> -1 -cotx479 comparetotal 123.4560000E-89 123.456E-89 -> -1 -cotx480 comparetotal 123.456000E789 123.456E789 -> -1 -cotx481 comparetotal 123.45600E-89 123.456E-89 -> -1 -cotx482 comparetotal 123.4560E789 123.456E789 -> -1 -cotx483 comparetotal 123.456E-89 123.456E-89 -> 0 -cotx484 comparetotal 123.456E-89 123.4560000000000000E-89 -> 1 -cotx485 comparetotal 123.456E789 123.456000000000000E789 -> 1 -cotx486 comparetotal 123.456E-89 123.45600000000000E-89 -> 1 -cotx487 comparetotal 123.456E789 123.4560000000000E789 -> 1 -cotx488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 -cotx489 comparetotal 123.456E789 123.45600000000E789 -> 1 -cotx490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 -cotx491 comparetotal 123.456E789 123.456000000E789 -> 1 -cotx492 comparetotal 123.456E-89 123.45600000E-89 -> 1 -cotx493 comparetotal 123.456E789 123.4560000E789 -> 1 -cotx494 comparetotal 123.456E-89 123.456000E-89 -> 1 -cotx495 comparetotal 123.456E789 123.45600E789 -> 1 -cotx496 comparetotal 123.456E-89 123.4560E-89 -> 1 -cotx497 comparetotal 123.456E789 123.456E789 -> 0 - --- wide-ranging, around precision; signs equal -precision: 9 -cotx500 comparetotal 1 1E-15 -> 1 -cotx501 comparetotal 1 1E-14 -> 1 -cotx502 comparetotal 1 1E-13 -> 1 -cotx503 comparetotal 1 1E-12 -> 1 -cotx504 comparetotal 1 1E-11 -> 1 -cotx505 comparetotal 1 1E-10 -> 1 -cotx506 comparetotal 1 1E-9 -> 1 -cotx507 comparetotal 1 1E-8 -> 1 -cotx508 comparetotal 1 1E-7 -> 1 -cotx509 comparetotal 1 1E-6 -> 1 -cotx510 comparetotal 1 1E-5 -> 1 -cotx511 comparetotal 1 1E-4 -> 1 -cotx512 comparetotal 1 1E-3 -> 1 -cotx513 comparetotal 1 1E-2 -> 1 -cotx514 comparetotal 1 1E-1 -> 1 -cotx515 comparetotal 1 1E-0 -> 0 -cotx516 comparetotal 1 1E+1 -> -1 -cotx517 comparetotal 1 1E+2 -> -1 -cotx518 comparetotal 1 1E+3 -> -1 -cotx519 comparetotal 1 1E+4 -> -1 -cotx521 comparetotal 1 1E+5 -> -1 -cotx522 comparetotal 1 1E+6 -> -1 -cotx523 comparetotal 1 1E+7 -> -1 -cotx524 comparetotal 1 1E+8 -> -1 -cotx525 comparetotal 1 1E+9 -> -1 -cotx526 comparetotal 1 1E+10 -> -1 -cotx527 comparetotal 1 1E+11 -> -1 -cotx528 comparetotal 1 1E+12 -> -1 -cotx529 comparetotal 1 1E+13 -> -1 -cotx530 comparetotal 1 1E+14 -> -1 -cotx531 comparetotal 1 1E+15 -> -1 --- LR swap -cotx540 comparetotal 1E-15 1 -> -1 -cotx541 comparetotal 1E-14 1 -> -1 -cotx542 comparetotal 1E-13 1 -> -1 -cotx543 comparetotal 1E-12 1 -> -1 -cotx544 comparetotal 1E-11 1 -> -1 -cotx545 comparetotal 1E-10 1 -> -1 -cotx546 comparetotal 1E-9 1 -> -1 -cotx547 comparetotal 1E-8 1 -> -1 -cotx548 comparetotal 1E-7 1 -> -1 -cotx549 comparetotal 1E-6 1 -> -1 -cotx550 comparetotal 1E-5 1 -> -1 -cotx551 comparetotal 1E-4 1 -> -1 -cotx552 comparetotal 1E-3 1 -> -1 -cotx553 comparetotal 1E-2 1 -> -1 -cotx554 comparetotal 1E-1 1 -> -1 -cotx555 comparetotal 1E-0 1 -> 0 -cotx556 comparetotal 1E+1 1 -> 1 -cotx557 comparetotal 1E+2 1 -> 1 -cotx558 comparetotal 1E+3 1 -> 1 -cotx559 comparetotal 1E+4 1 -> 1 -cotx561 comparetotal 1E+5 1 -> 1 -cotx562 comparetotal 1E+6 1 -> 1 -cotx563 comparetotal 1E+7 1 -> 1 -cotx564 comparetotal 1E+8 1 -> 1 -cotx565 comparetotal 1E+9 1 -> 1 -cotx566 comparetotal 1E+10 1 -> 1 -cotx567 comparetotal 1E+11 1 -> 1 -cotx568 comparetotal 1E+12 1 -> 1 -cotx569 comparetotal 1E+13 1 -> 1 -cotx570 comparetotal 1E+14 1 -> 1 -cotx571 comparetotal 1E+15 1 -> 1 --- similar with an useful coefficient, one side only -cotx580 comparetotal 0.000000987654321 1E-15 -> 1 -cotx581 comparetotal 0.000000987654321 1E-14 -> 1 -cotx582 comparetotal 0.000000987654321 1E-13 -> 1 -cotx583 comparetotal 0.000000987654321 1E-12 -> 1 -cotx584 comparetotal 0.000000987654321 1E-11 -> 1 -cotx585 comparetotal 0.000000987654321 1E-10 -> 1 -cotx586 comparetotal 0.000000987654321 1E-9 -> 1 -cotx587 comparetotal 0.000000987654321 1E-8 -> 1 -cotx588 comparetotal 0.000000987654321 1E-7 -> 1 -cotx589 comparetotal 0.000000987654321 1E-6 -> -1 -cotx590 comparetotal 0.000000987654321 1E-5 -> -1 -cotx591 comparetotal 0.000000987654321 1E-4 -> -1 -cotx592 comparetotal 0.000000987654321 1E-3 -> -1 -cotx593 comparetotal 0.000000987654321 1E-2 -> -1 -cotx594 comparetotal 0.000000987654321 1E-1 -> -1 -cotx595 comparetotal 0.000000987654321 1E-0 -> -1 -cotx596 comparetotal 0.000000987654321 1E+1 -> -1 -cotx597 comparetotal 0.000000987654321 1E+2 -> -1 -cotx598 comparetotal 0.000000987654321 1E+3 -> -1 -cotx599 comparetotal 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -precision: 20 -cotx600 comparetotal 12 12.2345 -> -1 -cotx601 comparetotal 12.0 12.2345 -> -1 -cotx602 comparetotal 12.00 12.2345 -> -1 -cotx603 comparetotal 12.000 12.2345 -> -1 -cotx604 comparetotal 12.0000 12.2345 -> -1 -cotx605 comparetotal 12.00000 12.2345 -> -1 -cotx606 comparetotal 12.000000 12.2345 -> -1 -cotx607 comparetotal 12.0000000 12.2345 -> -1 -cotx608 comparetotal 12.00000000 12.2345 -> -1 -cotx609 comparetotal 12.000000000 12.2345 -> -1 -cotx610 comparetotal 12.1234 12 -> 1 -cotx611 comparetotal 12.1234 12.0 -> 1 -cotx612 comparetotal 12.1234 12.00 -> 1 -cotx613 comparetotal 12.1234 12.000 -> 1 -cotx614 comparetotal 12.1234 12.0000 -> 1 -cotx615 comparetotal 12.1234 12.00000 -> 1 -cotx616 comparetotal 12.1234 12.000000 -> 1 -cotx617 comparetotal 12.1234 12.0000000 -> 1 -cotx618 comparetotal 12.1234 12.00000000 -> 1 -cotx619 comparetotal 12.1234 12.000000000 -> 1 -cotx620 comparetotal -12 -12.2345 -> 1 -cotx621 comparetotal -12.0 -12.2345 -> 1 -cotx622 comparetotal -12.00 -12.2345 -> 1 -cotx623 comparetotal -12.000 -12.2345 -> 1 -cotx624 comparetotal -12.0000 -12.2345 -> 1 -cotx625 comparetotal -12.00000 -12.2345 -> 1 -cotx626 comparetotal -12.000000 -12.2345 -> 1 -cotx627 comparetotal -12.0000000 -12.2345 -> 1 -cotx628 comparetotal -12.00000000 -12.2345 -> 1 -cotx629 comparetotal -12.000000000 -12.2345 -> 1 -cotx630 comparetotal -12.1234 -12 -> -1 -cotx631 comparetotal -12.1234 -12.0 -> -1 -cotx632 comparetotal -12.1234 -12.00 -> -1 -cotx633 comparetotal -12.1234 -12.000 -> -1 -cotx634 comparetotal -12.1234 -12.0000 -> -1 -cotx635 comparetotal -12.1234 -12.00000 -> -1 -cotx636 comparetotal -12.1234 -12.000000 -> -1 -cotx637 comparetotal -12.1234 -12.0000000 -> -1 -cotx638 comparetotal -12.1234 -12.00000000 -> -1 -cotx639 comparetotal -12.1234 -12.000000000 -> -1 -precision: 9 - --- extended zeros -cotx640 comparetotal 0 0 -> 0 -cotx641 comparetotal 0 -0 -> 1 -cotx642 comparetotal 0 -0.0 -> 1 -cotx643 comparetotal 0 0.0 -> 1 -cotx644 comparetotal -0 0 -> -1 -cotx645 comparetotal -0 -0 -> 0 -cotx646 comparetotal -0 -0.0 -> -1 -cotx647 comparetotal -0 0.0 -> -1 -cotx648 comparetotal 0.0 0 -> -1 -cotx649 comparetotal 0.0 -0 -> 1 -cotx650 comparetotal 0.0 -0.0 -> 1 -cotx651 comparetotal 0.0 0.0 -> 0 -cotx652 comparetotal -0.0 0 -> -1 -cotx653 comparetotal -0.0 -0 -> 1 -cotx654 comparetotal -0.0 -0.0 -> 0 -cotx655 comparetotal -0.0 0.0 -> -1 - -cotx656 comparetotal -0E1 0.0 -> -1 -cotx657 comparetotal -0E2 0.0 -> -1 -cotx658 comparetotal 0E1 0.0 -> 1 -cotx659 comparetotal 0E2 0.0 -> 1 -cotx660 comparetotal -0E1 0 -> -1 -cotx661 comparetotal -0E2 0 -> -1 -cotx662 comparetotal 0E1 0 -> 1 -cotx663 comparetotal 0E2 0 -> 1 -cotx664 comparetotal -0E1 -0E1 -> 0 -cotx665 comparetotal -0E2 -0E1 -> -1 -cotx666 comparetotal 0E1 -0E1 -> 1 -cotx667 comparetotal 0E2 -0E1 -> 1 -cotx668 comparetotal -0E1 -0E2 -> 1 -cotx669 comparetotal -0E2 -0E2 -> 0 -cotx670 comparetotal 0E1 -0E2 -> 1 -cotx671 comparetotal 0E2 -0E2 -> 1 -cotx672 comparetotal -0E1 0E1 -> -1 -cotx673 comparetotal -0E2 0E1 -> -1 -cotx674 comparetotal 0E1 0E1 -> 0 -cotx675 comparetotal 0E2 0E1 -> 1 -cotx676 comparetotal -0E1 0E2 -> -1 -cotx677 comparetotal -0E2 0E2 -> -1 -cotx678 comparetotal 0E1 0E2 -> -1 -cotx679 comparetotal 0E2 0E2 -> 0 - --- trailing zeros; unit-y -precision: 20 -cotx680 comparetotal 12 12 -> 0 -cotx681 comparetotal 12 12.0 -> 1 -cotx682 comparetotal 12 12.00 -> 1 -cotx683 comparetotal 12 12.000 -> 1 -cotx684 comparetotal 12 12.0000 -> 1 -cotx685 comparetotal 12 12.00000 -> 1 -cotx686 comparetotal 12 12.000000 -> 1 -cotx687 comparetotal 12 12.0000000 -> 1 -cotx688 comparetotal 12 12.00000000 -> 1 -cotx689 comparetotal 12 12.000000000 -> 1 -cotx690 comparetotal 12 12 -> 0 -cotx691 comparetotal 12.0 12 -> -1 -cotx692 comparetotal 12.00 12 -> -1 -cotx693 comparetotal 12.000 12 -> -1 -cotx694 comparetotal 12.0000 12 -> -1 -cotx695 comparetotal 12.00000 12 -> -1 -cotx696 comparetotal 12.000000 12 -> -1 -cotx697 comparetotal 12.0000000 12 -> -1 -cotx698 comparetotal 12.00000000 12 -> -1 -cotx699 comparetotal 12.000000000 12 -> -1 - --- long operand checks -maxexponent: 999 -minexponent: -999 -precision: 9 -cotx701 comparetotal 12345678000 1 -> 1 -cotx702 comparetotal 1 12345678000 -> -1 -cotx703 comparetotal 1234567800 1 -> 1 -cotx704 comparetotal 1 1234567800 -> -1 -cotx705 comparetotal 1234567890 1 -> 1 -cotx706 comparetotal 1 1234567890 -> -1 -cotx707 comparetotal 1234567891 1 -> 1 -cotx708 comparetotal 1 1234567891 -> -1 -cotx709 comparetotal 12345678901 1 -> 1 -cotx710 comparetotal 1 12345678901 -> -1 -cotx711 comparetotal 1234567896 1 -> 1 -cotx712 comparetotal 1 1234567896 -> -1 -cotx713 comparetotal -1234567891 1 -> -1 -cotx714 comparetotal 1 -1234567891 -> 1 -cotx715 comparetotal -12345678901 1 -> -1 -cotx716 comparetotal 1 -12345678901 -> 1 -cotx717 comparetotal -1234567896 1 -> -1 -cotx718 comparetotal 1 -1234567896 -> 1 - -precision: 15 --- same with plenty of precision -cotx721 comparetotal 12345678000 1 -> 1 -cotx722 comparetotal 1 12345678000 -> -1 -cotx723 comparetotal 1234567800 1 -> 1 -cotx724 comparetotal 1 1234567800 -> -1 -cotx725 comparetotal 1234567890 1 -> 1 -cotx726 comparetotal 1 1234567890 -> -1 -cotx727 comparetotal 1234567891 1 -> 1 -cotx728 comparetotal 1 1234567891 -> -1 -cotx729 comparetotal 12345678901 1 -> 1 -cotx730 comparetotal 1 12345678901 -> -1 -cotx731 comparetotal 1234567896 1 -> 1 -cotx732 comparetotal 1 1234567896 -> -1 - --- residue cases -precision: 5 -cotx740 comparetotal 1 0.9999999 -> 1 -cotx741 comparetotal 1 0.999999 -> 1 -cotx742 comparetotal 1 0.99999 -> 1 -cotx743 comparetotal 1 1.0000 -> 1 -cotx744 comparetotal 1 1.00001 -> -1 -cotx745 comparetotal 1 1.000001 -> -1 -cotx746 comparetotal 1 1.0000001 -> -1 -cotx750 comparetotal 0.9999999 1 -> -1 -cotx751 comparetotal 0.999999 1 -> -1 -cotx752 comparetotal 0.99999 1 -> -1 -cotx753 comparetotal 1.0000 1 -> -1 -cotx754 comparetotal 1.00001 1 -> 1 -cotx755 comparetotal 1.000001 1 -> 1 -cotx756 comparetotal 1.0000001 1 -> 1 - --- a selection of longies -cotx760 comparetotal -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> -1 -cotx761 comparetotal -36852134.84194296250843579428931 -36852134.84194296250843579428931 -> 0 -cotx762 comparetotal -36852134.94194296250843579428931 -36852134.84194296250843579428931 -> -1 -cotx763 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 --- precisions above or below the difference should have no effect -precision: 11 -cotx764 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 10 -cotx765 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 9 -cotx766 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 8 -cotx767 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 7 -cotx768 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 6 -cotx769 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 5 -cotx770 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 4 -cotx771 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 3 -cotx772 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 2 -cotx773 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 1 -cotx774 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 - --- Specials -precision: 9 -cotx780 comparetotal Inf -Inf -> 1 -cotx781 comparetotal Inf -1000 -> 1 -cotx782 comparetotal Inf -1 -> 1 -cotx783 comparetotal Inf -0 -> 1 -cotx784 comparetotal Inf 0 -> 1 -cotx785 comparetotal Inf 1 -> 1 -cotx786 comparetotal Inf 1000 -> 1 -cotx787 comparetotal Inf Inf -> 0 -cotx788 comparetotal -1000 Inf -> -1 -cotx789 comparetotal -Inf Inf -> -1 -cotx790 comparetotal -1 Inf -> -1 -cotx791 comparetotal -0 Inf -> -1 -cotx792 comparetotal 0 Inf -> -1 -cotx793 comparetotal 1 Inf -> -1 -cotx794 comparetotal 1000 Inf -> -1 -cotx795 comparetotal Inf Inf -> 0 - -cotx800 comparetotal -Inf -Inf -> 0 -cotx801 comparetotal -Inf -1000 -> -1 -cotx802 comparetotal -Inf -1 -> -1 -cotx803 comparetotal -Inf -0 -> -1 -cotx804 comparetotal -Inf 0 -> -1 -cotx805 comparetotal -Inf 1 -> -1 -cotx806 comparetotal -Inf 1000 -> -1 -cotx807 comparetotal -Inf Inf -> -1 -cotx808 comparetotal -Inf -Inf -> 0 -cotx809 comparetotal -1000 -Inf -> 1 -cotx810 comparetotal -1 -Inf -> 1 -cotx811 comparetotal -0 -Inf -> 1 -cotx812 comparetotal 0 -Inf -> 1 -cotx813 comparetotal 1 -Inf -> 1 -cotx814 comparetotal 1000 -Inf -> 1 -cotx815 comparetotal Inf -Inf -> 1 - -cotx821 comparetotal NaN -Inf -> 1 -cotx822 comparetotal NaN -1000 -> 1 -cotx823 comparetotal NaN -1 -> 1 -cotx824 comparetotal NaN -0 -> 1 -cotx825 comparetotal NaN 0 -> 1 -cotx826 comparetotal NaN 1 -> 1 -cotx827 comparetotal NaN 1000 -> 1 -cotx828 comparetotal NaN Inf -> 1 -cotx829 comparetotal NaN NaN -> 0 -cotx830 comparetotal -Inf NaN -> -1 -cotx831 comparetotal -1000 NaN -> -1 -cotx832 comparetotal -1 NaN -> -1 -cotx833 comparetotal -0 NaN -> -1 -cotx834 comparetotal 0 NaN -> -1 -cotx835 comparetotal 1 NaN -> -1 -cotx836 comparetotal 1000 NaN -> -1 -cotx837 comparetotal Inf NaN -> -1 -cotx838 comparetotal -NaN -NaN -> 0 -cotx839 comparetotal +NaN -NaN -> 1 -cotx840 comparetotal -NaN +NaN -> -1 - -cotx841 comparetotal sNaN -sNaN -> 1 -cotx842 comparetotal sNaN -NaN -> 1 -cotx843 comparetotal sNaN -Inf -> 1 -cotx844 comparetotal sNaN -1000 -> 1 -cotx845 comparetotal sNaN -1 -> 1 -cotx846 comparetotal sNaN -0 -> 1 -cotx847 comparetotal sNaN 0 -> 1 -cotx848 comparetotal sNaN 1 -> 1 -cotx849 comparetotal sNaN 1000 -> 1 -cotx850 comparetotal sNaN NaN -> -1 -cotx851 comparetotal sNaN sNaN -> 0 - -cotx852 comparetotal -sNaN sNaN -> -1 -cotx853 comparetotal -NaN sNaN -> -1 -cotx854 comparetotal -Inf sNaN -> -1 -cotx855 comparetotal -1000 sNaN -> -1 -cotx856 comparetotal -1 sNaN -> -1 -cotx857 comparetotal -0 sNaN -> -1 -cotx858 comparetotal 0 sNaN -> -1 -cotx859 comparetotal 1 sNaN -> -1 -cotx860 comparetotal 1000 sNaN -> -1 -cotx861 comparetotal Inf sNaN -> -1 -cotx862 comparetotal NaN sNaN -> 1 -cotx863 comparetotal sNaN sNaN -> 0 - -cotx871 comparetotal -sNaN -sNaN -> 0 -cotx872 comparetotal -sNaN -NaN -> 1 -cotx873 comparetotal -sNaN -Inf -> -1 -cotx874 comparetotal -sNaN -1000 -> -1 -cotx875 comparetotal -sNaN -1 -> -1 -cotx876 comparetotal -sNaN -0 -> -1 -cotx877 comparetotal -sNaN 0 -> -1 -cotx878 comparetotal -sNaN 1 -> -1 -cotx879 comparetotal -sNaN 1000 -> -1 -cotx880 comparetotal -sNaN NaN -> -1 -cotx881 comparetotal -sNaN sNaN -> -1 - -cotx882 comparetotal -sNaN -sNaN -> 0 -cotx883 comparetotal -NaN -sNaN -> -1 -cotx884 comparetotal -Inf -sNaN -> 1 -cotx885 comparetotal -1000 -sNaN -> 1 -cotx886 comparetotal -1 -sNaN -> 1 -cotx887 comparetotal -0 -sNaN -> 1 -cotx888 comparetotal 0 -sNaN -> 1 -cotx889 comparetotal 1 -sNaN -> 1 -cotx890 comparetotal 1000 -sNaN -> 1 -cotx891 comparetotal Inf -sNaN -> 1 -cotx892 comparetotal NaN -sNaN -> 1 -cotx893 comparetotal sNaN -sNaN -> 1 - --- NaNs with payload -cotx960 comparetotal NaN9 -Inf -> 1 -cotx961 comparetotal NaN8 999 -> 1 -cotx962 comparetotal NaN77 Inf -> 1 -cotx963 comparetotal -NaN67 NaN5 -> -1 -cotx964 comparetotal -Inf -NaN4 -> 1 -cotx965 comparetotal -999 -NaN33 -> 1 -cotx966 comparetotal Inf NaN2 -> -1 - -cotx970 comparetotal -NaN41 -NaN42 -> 1 -cotx971 comparetotal +NaN41 -NaN42 -> 1 -cotx972 comparetotal -NaN41 +NaN42 -> -1 -cotx973 comparetotal +NaN41 +NaN42 -> -1 -cotx974 comparetotal -NaN42 -NaN01 -> -1 -cotx975 comparetotal +NaN42 -NaN01 -> 1 -cotx976 comparetotal -NaN42 +NaN01 -> -1 -cotx977 comparetotal +NaN42 +NaN01 -> 1 - -cotx980 comparetotal -sNaN771 -sNaN772 -> 1 -cotx981 comparetotal +sNaN771 -sNaN772 -> 1 -cotx982 comparetotal -sNaN771 +sNaN772 -> -1 -cotx983 comparetotal +sNaN771 +sNaN772 -> -1 -cotx984 comparetotal -sNaN772 -sNaN771 -> -1 -cotx985 comparetotal +sNaN772 -sNaN771 -> 1 -cotx986 comparetotal -sNaN772 +sNaN771 -> -1 -cotx987 comparetotal +sNaN772 +sNaN771 -> 1 - -cotx991 comparetotal -sNaN99 -Inf -> -1 -cotx992 comparetotal sNaN98 -11 -> 1 -cotx993 comparetotal sNaN97 NaN -> -1 -cotx994 comparetotal sNaN16 sNaN94 -> -1 -cotx995 comparetotal NaN85 sNaN83 -> 1 -cotx996 comparetotal -Inf sNaN92 -> -1 -cotx997 comparetotal 088 sNaN81 -> -1 -cotx998 comparetotal Inf sNaN90 -> -1 -cotx999 comparetotal NaN -sNaN89 -> 1 - --- overflow and underflow tests .. subnormal results now allowed -maxExponent: 999999999 -minexponent: -999999999 -cotx1080 comparetotal +1.23456789012345E-0 9E+999999999 -> -1 -cotx1081 comparetotal 9E+999999999 +1.23456789012345E-0 -> 1 -cotx1082 comparetotal +0.100 9E-999999999 -> 1 -cotx1083 comparetotal 9E-999999999 +0.100 -> -1 -cotx1085 comparetotal -1.23456789012345E-0 9E+999999999 -> -1 -cotx1086 comparetotal 9E+999999999 -1.23456789012345E-0 -> 1 -cotx1087 comparetotal -0.100 9E-999999999 -> -1 -cotx1088 comparetotal 9E-999999999 -0.100 -> 1 - -cotx1089 comparetotal 1e-599999999 1e-400000001 -> -1 -cotx1090 comparetotal 1e-599999999 1e-400000000 -> -1 -cotx1091 comparetotal 1e-600000000 1e-400000000 -> -1 -cotx1092 comparetotal 9e-999999998 0.01 -> -1 -cotx1093 comparetotal 9e-999999998 0.1 -> -1 -cotx1094 comparetotal 0.01 9e-999999998 -> 1 -cotx1095 comparetotal 1e599999999 1e400000001 -> 1 -cotx1096 comparetotal 1e599999999 1e400000000 -> 1 -cotx1097 comparetotal 1e600000000 1e400000000 -> 1 -cotx1098 comparetotal 9e999999998 100 -> 1 -cotx1099 comparetotal 9e999999998 10 -> 1 -cotx1100 comparetotal 100 9e999999998 -> -1 --- signs -cotx1101 comparetotal 1e+777777777 1e+411111111 -> 1 -cotx1102 comparetotal 1e+777777777 -1e+411111111 -> 1 -cotx1103 comparetotal -1e+777777777 1e+411111111 -> -1 -cotx1104 comparetotal -1e+777777777 -1e+411111111 -> -1 -cotx1105 comparetotal 1e-777777777 1e-411111111 -> -1 -cotx1106 comparetotal 1e-777777777 -1e-411111111 -> 1 -cotx1107 comparetotal -1e-777777777 1e-411111111 -> -1 -cotx1108 comparetotal -1e-777777777 -1e-411111111 -> 1 - --- spread zeros -cotx1110 comparetotal 0E-383 0 -> -1 -cotx1111 comparetotal 0E-383 -0 -> 1 -cotx1112 comparetotal -0E-383 0 -> -1 -cotx1113 comparetotal -0E-383 -0 -> 1 -cotx1114 comparetotal 0E-383 0E+384 -> -1 -cotx1115 comparetotal 0E-383 -0E+384 -> 1 -cotx1116 comparetotal -0E-383 0E+384 -> -1 -cotx1117 comparetotal -0E-383 -0E+384 -> 1 -cotx1118 comparetotal 0 0E+384 -> -1 -cotx1119 comparetotal 0 -0E+384 -> 1 -cotx1120 comparetotal -0 0E+384 -> -1 -cotx1121 comparetotal -0 -0E+384 -> 1 - -cotx1130 comparetotal 0E+384 0 -> 1 -cotx1131 comparetotal 0E+384 -0 -> 1 -cotx1132 comparetotal -0E+384 0 -> -1 -cotx1133 comparetotal -0E+384 -0 -> -1 -cotx1134 comparetotal 0E+384 0E-383 -> 1 -cotx1135 comparetotal 0E+384 -0E-383 -> 1 -cotx1136 comparetotal -0E+384 0E-383 -> -1 -cotx1137 comparetotal -0E+384 -0E-383 -> -1 -cotx1138 comparetotal 0 0E-383 -> 1 -cotx1139 comparetotal 0 -0E-383 -> 1 -cotx1140 comparetotal -0 0E-383 -> -1 -cotx1141 comparetotal -0 -0E-383 -> -1 - --- Null tests -cotx9990 comparetotal 10 # -> NaN Invalid_operation -cotx9991 comparetotal # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- comparetotal.decTest -- decimal comparison using total ordering -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +extended: 1 +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +-- sanity checks +cotx001 comparetotal -2 -2 -> 0 +cotx002 comparetotal -2 -1 -> -1 +cotx003 comparetotal -2 0 -> -1 +cotx004 comparetotal -2 1 -> -1 +cotx005 comparetotal -2 2 -> -1 +cotx006 comparetotal -1 -2 -> 1 +cotx007 comparetotal -1 -1 -> 0 +cotx008 comparetotal -1 0 -> -1 +cotx009 comparetotal -1 1 -> -1 +cotx010 comparetotal -1 2 -> -1 +cotx011 comparetotal 0 -2 -> 1 +cotx012 comparetotal 0 -1 -> 1 +cotx013 comparetotal 0 0 -> 0 +cotx014 comparetotal 0 1 -> -1 +cotx015 comparetotal 0 2 -> -1 +cotx016 comparetotal 1 -2 -> 1 +cotx017 comparetotal 1 -1 -> 1 +cotx018 comparetotal 1 0 -> 1 +cotx019 comparetotal 1 1 -> 0 +cotx020 comparetotal 1 2 -> -1 +cotx021 comparetotal 2 -2 -> 1 +cotx022 comparetotal 2 -1 -> 1 +cotx023 comparetotal 2 0 -> 1 +cotx025 comparetotal 2 1 -> 1 +cotx026 comparetotal 2 2 -> 0 + +cotx031 comparetotal -20 -20 -> 0 +cotx032 comparetotal -20 -10 -> -1 +cotx033 comparetotal -20 00 -> -1 +cotx034 comparetotal -20 10 -> -1 +cotx035 comparetotal -20 20 -> -1 +cotx036 comparetotal -10 -20 -> 1 +cotx037 comparetotal -10 -10 -> 0 +cotx038 comparetotal -10 00 -> -1 +cotx039 comparetotal -10 10 -> -1 +cotx040 comparetotal -10 20 -> -1 +cotx041 comparetotal 00 -20 -> 1 +cotx042 comparetotal 00 -10 -> 1 +cotx043 comparetotal 00 00 -> 0 +cotx044 comparetotal 00 10 -> -1 +cotx045 comparetotal 00 20 -> -1 +cotx046 comparetotal 10 -20 -> 1 +cotx047 comparetotal 10 -10 -> 1 +cotx048 comparetotal 10 00 -> 1 +cotx049 comparetotal 10 10 -> 0 +cotx050 comparetotal 10 20 -> -1 +cotx051 comparetotal 20 -20 -> 1 +cotx052 comparetotal 20 -10 -> 1 +cotx053 comparetotal 20 00 -> 1 +cotx055 comparetotal 20 10 -> 1 +cotx056 comparetotal 20 20 -> 0 + +cotx061 comparetotal -2.0 -2.0 -> 0 +cotx062 comparetotal -2.0 -1.0 -> -1 +cotx063 comparetotal -2.0 0.0 -> -1 +cotx064 comparetotal -2.0 1.0 -> -1 +cotx065 comparetotal -2.0 2.0 -> -1 +cotx066 comparetotal -1.0 -2.0 -> 1 +cotx067 comparetotal -1.0 -1.0 -> 0 +cotx068 comparetotal -1.0 0.0 -> -1 +cotx069 comparetotal -1.0 1.0 -> -1 +cotx070 comparetotal -1.0 2.0 -> -1 +cotx071 comparetotal 0.0 -2.0 -> 1 +cotx072 comparetotal 0.0 -1.0 -> 1 +cotx073 comparetotal 0.0 0.0 -> 0 +cotx074 comparetotal 0.0 1.0 -> -1 +cotx075 comparetotal 0.0 2.0 -> -1 +cotx076 comparetotal 1.0 -2.0 -> 1 +cotx077 comparetotal 1.0 -1.0 -> 1 +cotx078 comparetotal 1.0 0.0 -> 1 +cotx079 comparetotal 1.0 1.0 -> 0 +cotx080 comparetotal 1.0 2.0 -> -1 +cotx081 comparetotal 2.0 -2.0 -> 1 +cotx082 comparetotal 2.0 -1.0 -> 1 +cotx083 comparetotal 2.0 0.0 -> 1 +cotx085 comparetotal 2.0 1.0 -> 1 +cotx086 comparetotal 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +maxexponent: 999999999 +minexponent: -999999999 +cotx090 comparetotal 9.99999999E+999999999 9.99999999E+999999999 -> 0 +cotx091 comparetotal -9.99999999E+999999999 9.99999999E+999999999 -> -1 +cotx092 comparetotal 9.99999999E+999999999 -9.99999999E+999999999 -> 1 +cotx093 comparetotal -9.99999999E+999999999 -9.99999999E+999999999 -> 0 + +-- Examples +cotx094 comparetotal 12.73 127.9 -> -1 +cotx095 comparetotal -127 12 -> -1 +cotx096 comparetotal 12.30 12.3 -> -1 +cotx097 comparetotal 12.30 12.30 -> 0 +cotx098 comparetotal 12.3 12.300 -> 1 +cotx099 comparetotal 12.3 NaN -> -1 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +cotx100 comparetotal 7.0 7.0 -> 0 +cotx101 comparetotal 7.0 7 -> -1 +cotx102 comparetotal 7 7.0 -> 1 +cotx103 comparetotal 7E+0 7.0 -> 1 +cotx104 comparetotal 70E-1 7.0 -> 0 +cotx105 comparetotal 0.7E+1 7 -> 0 +cotx106 comparetotal 70E-1 7 -> -1 +cotx107 comparetotal 7.0 7E+0 -> -1 +cotx108 comparetotal 7.0 70E-1 -> 0 +cotx109 comparetotal 7 0.7E+1 -> 0 +cotx110 comparetotal 7 70E-1 -> 1 + +cotx120 comparetotal 8.0 7.0 -> 1 +cotx121 comparetotal 8.0 7 -> 1 +cotx122 comparetotal 8 7.0 -> 1 +cotx123 comparetotal 8E+0 7.0 -> 1 +cotx124 comparetotal 80E-1 7.0 -> 1 +cotx125 comparetotal 0.8E+1 7 -> 1 +cotx126 comparetotal 80E-1 7 -> 1 +cotx127 comparetotal 8.0 7E+0 -> 1 +cotx128 comparetotal 8.0 70E-1 -> 1 +cotx129 comparetotal 8 0.7E+1 -> 1 +cotx130 comparetotal 8 70E-1 -> 1 + +cotx140 comparetotal 8.0 9.0 -> -1 +cotx141 comparetotal 8.0 9 -> -1 +cotx142 comparetotal 8 9.0 -> -1 +cotx143 comparetotal 8E+0 9.0 -> -1 +cotx144 comparetotal 80E-1 9.0 -> -1 +cotx145 comparetotal 0.8E+1 9 -> -1 +cotx146 comparetotal 80E-1 9 -> -1 +cotx147 comparetotal 8.0 9E+0 -> -1 +cotx148 comparetotal 8.0 90E-1 -> -1 +cotx149 comparetotal 8 0.9E+1 -> -1 +cotx150 comparetotal 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +cotx200 comparetotal -7.0 7.0 -> -1 +cotx201 comparetotal -7.0 7 -> -1 +cotx202 comparetotal -7 7.0 -> -1 +cotx203 comparetotal -7E+0 7.0 -> -1 +cotx204 comparetotal -70E-1 7.0 -> -1 +cotx205 comparetotal -0.7E+1 7 -> -1 +cotx206 comparetotal -70E-1 7 -> -1 +cotx207 comparetotal -7.0 7E+0 -> -1 +cotx208 comparetotal -7.0 70E-1 -> -1 +cotx209 comparetotal -7 0.7E+1 -> -1 +cotx210 comparetotal -7 70E-1 -> -1 + +cotx220 comparetotal -8.0 7.0 -> -1 +cotx221 comparetotal -8.0 7 -> -1 +cotx222 comparetotal -8 7.0 -> -1 +cotx223 comparetotal -8E+0 7.0 -> -1 +cotx224 comparetotal -80E-1 7.0 -> -1 +cotx225 comparetotal -0.8E+1 7 -> -1 +cotx226 comparetotal -80E-1 7 -> -1 +cotx227 comparetotal -8.0 7E+0 -> -1 +cotx228 comparetotal -8.0 70E-1 -> -1 +cotx229 comparetotal -8 0.7E+1 -> -1 +cotx230 comparetotal -8 70E-1 -> -1 + +cotx240 comparetotal -8.0 9.0 -> -1 +cotx241 comparetotal -8.0 9 -> -1 +cotx242 comparetotal -8 9.0 -> -1 +cotx243 comparetotal -8E+0 9.0 -> -1 +cotx244 comparetotal -80E-1 9.0 -> -1 +cotx245 comparetotal -0.8E+1 9 -> -1 +cotx246 comparetotal -80E-1 9 -> -1 +cotx247 comparetotal -8.0 9E+0 -> -1 +cotx248 comparetotal -8.0 90E-1 -> -1 +cotx249 comparetotal -8 0.9E+1 -> -1 +cotx250 comparetotal -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +cotx300 comparetotal 7.0 -7.0 -> 1 +cotx301 comparetotal 7.0 -7 -> 1 +cotx302 comparetotal 7 -7.0 -> 1 +cotx303 comparetotal 7E+0 -7.0 -> 1 +cotx304 comparetotal 70E-1 -7.0 -> 1 +cotx305 comparetotal .7E+1 -7 -> 1 +cotx306 comparetotal 70E-1 -7 -> 1 +cotx307 comparetotal 7.0 -7E+0 -> 1 +cotx308 comparetotal 7.0 -70E-1 -> 1 +cotx309 comparetotal 7 -.7E+1 -> 1 +cotx310 comparetotal 7 -70E-1 -> 1 + +cotx320 comparetotal 8.0 -7.0 -> 1 +cotx321 comparetotal 8.0 -7 -> 1 +cotx322 comparetotal 8 -7.0 -> 1 +cotx323 comparetotal 8E+0 -7.0 -> 1 +cotx324 comparetotal 80E-1 -7.0 -> 1 +cotx325 comparetotal .8E+1 -7 -> 1 +cotx326 comparetotal 80E-1 -7 -> 1 +cotx327 comparetotal 8.0 -7E+0 -> 1 +cotx328 comparetotal 8.0 -70E-1 -> 1 +cotx329 comparetotal 8 -.7E+1 -> 1 +cotx330 comparetotal 8 -70E-1 -> 1 + +cotx340 comparetotal 8.0 -9.0 -> 1 +cotx341 comparetotal 8.0 -9 -> 1 +cotx342 comparetotal 8 -9.0 -> 1 +cotx343 comparetotal 8E+0 -9.0 -> 1 +cotx344 comparetotal 80E-1 -9.0 -> 1 +cotx345 comparetotal .8E+1 -9 -> 1 +cotx346 comparetotal 80E-1 -9 -> 1 +cotx347 comparetotal 8.0 -9E+0 -> 1 +cotx348 comparetotal 8.0 -90E-1 -> 1 +cotx349 comparetotal 8 -.9E+1 -> 1 +cotx350 comparetotal 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +cotx400 comparetotal -7.0 -7.0 -> 0 +cotx401 comparetotal -7.0 -7 -> 1 +cotx402 comparetotal -7 -7.0 -> -1 +cotx403 comparetotal -7E+0 -7.0 -> -1 +cotx404 comparetotal -70E-1 -7.0 -> 0 +cotx405 comparetotal -.7E+1 -7 -> 0 +cotx406 comparetotal -70E-1 -7 -> 1 +cotx407 comparetotal -7.0 -7E+0 -> 1 +cotx408 comparetotal -7.0 -70E-1 -> 0 +cotx409 comparetotal -7 -.7E+1 -> 0 +cotx410 comparetotal -7 -70E-1 -> -1 + +cotx420 comparetotal -8.0 -7.0 -> -1 +cotx421 comparetotal -8.0 -7 -> -1 +cotx422 comparetotal -8 -7.0 -> -1 +cotx423 comparetotal -8E+0 -7.0 -> -1 +cotx424 comparetotal -80E-1 -7.0 -> -1 +cotx425 comparetotal -.8E+1 -7 -> -1 +cotx426 comparetotal -80E-1 -7 -> -1 +cotx427 comparetotal -8.0 -7E+0 -> -1 +cotx428 comparetotal -8.0 -70E-1 -> -1 +cotx429 comparetotal -8 -.7E+1 -> -1 +cotx430 comparetotal -8 -70E-1 -> -1 + +cotx440 comparetotal -8.0 -9.0 -> 1 +cotx441 comparetotal -8.0 -9 -> 1 +cotx442 comparetotal -8 -9.0 -> 1 +cotx443 comparetotal -8E+0 -9.0 -> 1 +cotx444 comparetotal -80E-1 -9.0 -> 1 +cotx445 comparetotal -.8E+1 -9 -> 1 +cotx446 comparetotal -80E-1 -9 -> 1 +cotx447 comparetotal -8.0 -9E+0 -> 1 +cotx448 comparetotal -8.0 -90E-1 -> 1 +cotx449 comparetotal -8 -.9E+1 -> 1 +cotx450 comparetotal -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +precision: 40 +cotx470 comparetotal 123.4560000000000000E789 123.456E789 -> -1 +cotx471 comparetotal 123.456000000000000E-89 123.456E-89 -> -1 +cotx472 comparetotal 123.45600000000000E789 123.456E789 -> -1 +cotx473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 +cotx474 comparetotal 123.456000000000E789 123.456E789 -> -1 +cotx475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 +cotx476 comparetotal 123.4560000000E789 123.456E789 -> -1 +cotx477 comparetotal 123.456000000E-89 123.456E-89 -> -1 +cotx478 comparetotal 123.45600000E789 123.456E789 -> -1 +cotx479 comparetotal 123.4560000E-89 123.456E-89 -> -1 +cotx480 comparetotal 123.456000E789 123.456E789 -> -1 +cotx481 comparetotal 123.45600E-89 123.456E-89 -> -1 +cotx482 comparetotal 123.4560E789 123.456E789 -> -1 +cotx483 comparetotal 123.456E-89 123.456E-89 -> 0 +cotx484 comparetotal 123.456E-89 123.4560000000000000E-89 -> 1 +cotx485 comparetotal 123.456E789 123.456000000000000E789 -> 1 +cotx486 comparetotal 123.456E-89 123.45600000000000E-89 -> 1 +cotx487 comparetotal 123.456E789 123.4560000000000E789 -> 1 +cotx488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 +cotx489 comparetotal 123.456E789 123.45600000000E789 -> 1 +cotx490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 +cotx491 comparetotal 123.456E789 123.456000000E789 -> 1 +cotx492 comparetotal 123.456E-89 123.45600000E-89 -> 1 +cotx493 comparetotal 123.456E789 123.4560000E789 -> 1 +cotx494 comparetotal 123.456E-89 123.456000E-89 -> 1 +cotx495 comparetotal 123.456E789 123.45600E789 -> 1 +cotx496 comparetotal 123.456E-89 123.4560E-89 -> 1 +cotx497 comparetotal 123.456E789 123.456E789 -> 0 + +-- wide-ranging, around precision; signs equal +precision: 9 +cotx500 comparetotal 1 1E-15 -> 1 +cotx501 comparetotal 1 1E-14 -> 1 +cotx502 comparetotal 1 1E-13 -> 1 +cotx503 comparetotal 1 1E-12 -> 1 +cotx504 comparetotal 1 1E-11 -> 1 +cotx505 comparetotal 1 1E-10 -> 1 +cotx506 comparetotal 1 1E-9 -> 1 +cotx507 comparetotal 1 1E-8 -> 1 +cotx508 comparetotal 1 1E-7 -> 1 +cotx509 comparetotal 1 1E-6 -> 1 +cotx510 comparetotal 1 1E-5 -> 1 +cotx511 comparetotal 1 1E-4 -> 1 +cotx512 comparetotal 1 1E-3 -> 1 +cotx513 comparetotal 1 1E-2 -> 1 +cotx514 comparetotal 1 1E-1 -> 1 +cotx515 comparetotal 1 1E-0 -> 0 +cotx516 comparetotal 1 1E+1 -> -1 +cotx517 comparetotal 1 1E+2 -> -1 +cotx518 comparetotal 1 1E+3 -> -1 +cotx519 comparetotal 1 1E+4 -> -1 +cotx521 comparetotal 1 1E+5 -> -1 +cotx522 comparetotal 1 1E+6 -> -1 +cotx523 comparetotal 1 1E+7 -> -1 +cotx524 comparetotal 1 1E+8 -> -1 +cotx525 comparetotal 1 1E+9 -> -1 +cotx526 comparetotal 1 1E+10 -> -1 +cotx527 comparetotal 1 1E+11 -> -1 +cotx528 comparetotal 1 1E+12 -> -1 +cotx529 comparetotal 1 1E+13 -> -1 +cotx530 comparetotal 1 1E+14 -> -1 +cotx531 comparetotal 1 1E+15 -> -1 +-- LR swap +cotx540 comparetotal 1E-15 1 -> -1 +cotx541 comparetotal 1E-14 1 -> -1 +cotx542 comparetotal 1E-13 1 -> -1 +cotx543 comparetotal 1E-12 1 -> -1 +cotx544 comparetotal 1E-11 1 -> -1 +cotx545 comparetotal 1E-10 1 -> -1 +cotx546 comparetotal 1E-9 1 -> -1 +cotx547 comparetotal 1E-8 1 -> -1 +cotx548 comparetotal 1E-7 1 -> -1 +cotx549 comparetotal 1E-6 1 -> -1 +cotx550 comparetotal 1E-5 1 -> -1 +cotx551 comparetotal 1E-4 1 -> -1 +cotx552 comparetotal 1E-3 1 -> -1 +cotx553 comparetotal 1E-2 1 -> -1 +cotx554 comparetotal 1E-1 1 -> -1 +cotx555 comparetotal 1E-0 1 -> 0 +cotx556 comparetotal 1E+1 1 -> 1 +cotx557 comparetotal 1E+2 1 -> 1 +cotx558 comparetotal 1E+3 1 -> 1 +cotx559 comparetotal 1E+4 1 -> 1 +cotx561 comparetotal 1E+5 1 -> 1 +cotx562 comparetotal 1E+6 1 -> 1 +cotx563 comparetotal 1E+7 1 -> 1 +cotx564 comparetotal 1E+8 1 -> 1 +cotx565 comparetotal 1E+9 1 -> 1 +cotx566 comparetotal 1E+10 1 -> 1 +cotx567 comparetotal 1E+11 1 -> 1 +cotx568 comparetotal 1E+12 1 -> 1 +cotx569 comparetotal 1E+13 1 -> 1 +cotx570 comparetotal 1E+14 1 -> 1 +cotx571 comparetotal 1E+15 1 -> 1 +-- similar with an useful coefficient, one side only +cotx580 comparetotal 0.000000987654321 1E-15 -> 1 +cotx581 comparetotal 0.000000987654321 1E-14 -> 1 +cotx582 comparetotal 0.000000987654321 1E-13 -> 1 +cotx583 comparetotal 0.000000987654321 1E-12 -> 1 +cotx584 comparetotal 0.000000987654321 1E-11 -> 1 +cotx585 comparetotal 0.000000987654321 1E-10 -> 1 +cotx586 comparetotal 0.000000987654321 1E-9 -> 1 +cotx587 comparetotal 0.000000987654321 1E-8 -> 1 +cotx588 comparetotal 0.000000987654321 1E-7 -> 1 +cotx589 comparetotal 0.000000987654321 1E-6 -> -1 +cotx590 comparetotal 0.000000987654321 1E-5 -> -1 +cotx591 comparetotal 0.000000987654321 1E-4 -> -1 +cotx592 comparetotal 0.000000987654321 1E-3 -> -1 +cotx593 comparetotal 0.000000987654321 1E-2 -> -1 +cotx594 comparetotal 0.000000987654321 1E-1 -> -1 +cotx595 comparetotal 0.000000987654321 1E-0 -> -1 +cotx596 comparetotal 0.000000987654321 1E+1 -> -1 +cotx597 comparetotal 0.000000987654321 1E+2 -> -1 +cotx598 comparetotal 0.000000987654321 1E+3 -> -1 +cotx599 comparetotal 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +precision: 20 +cotx600 comparetotal 12 12.2345 -> -1 +cotx601 comparetotal 12.0 12.2345 -> -1 +cotx602 comparetotal 12.00 12.2345 -> -1 +cotx603 comparetotal 12.000 12.2345 -> -1 +cotx604 comparetotal 12.0000 12.2345 -> -1 +cotx605 comparetotal 12.00000 12.2345 -> -1 +cotx606 comparetotal 12.000000 12.2345 -> -1 +cotx607 comparetotal 12.0000000 12.2345 -> -1 +cotx608 comparetotal 12.00000000 12.2345 -> -1 +cotx609 comparetotal 12.000000000 12.2345 -> -1 +cotx610 comparetotal 12.1234 12 -> 1 +cotx611 comparetotal 12.1234 12.0 -> 1 +cotx612 comparetotal 12.1234 12.00 -> 1 +cotx613 comparetotal 12.1234 12.000 -> 1 +cotx614 comparetotal 12.1234 12.0000 -> 1 +cotx615 comparetotal 12.1234 12.00000 -> 1 +cotx616 comparetotal 12.1234 12.000000 -> 1 +cotx617 comparetotal 12.1234 12.0000000 -> 1 +cotx618 comparetotal 12.1234 12.00000000 -> 1 +cotx619 comparetotal 12.1234 12.000000000 -> 1 +cotx620 comparetotal -12 -12.2345 -> 1 +cotx621 comparetotal -12.0 -12.2345 -> 1 +cotx622 comparetotal -12.00 -12.2345 -> 1 +cotx623 comparetotal -12.000 -12.2345 -> 1 +cotx624 comparetotal -12.0000 -12.2345 -> 1 +cotx625 comparetotal -12.00000 -12.2345 -> 1 +cotx626 comparetotal -12.000000 -12.2345 -> 1 +cotx627 comparetotal -12.0000000 -12.2345 -> 1 +cotx628 comparetotal -12.00000000 -12.2345 -> 1 +cotx629 comparetotal -12.000000000 -12.2345 -> 1 +cotx630 comparetotal -12.1234 -12 -> -1 +cotx631 comparetotal -12.1234 -12.0 -> -1 +cotx632 comparetotal -12.1234 -12.00 -> -1 +cotx633 comparetotal -12.1234 -12.000 -> -1 +cotx634 comparetotal -12.1234 -12.0000 -> -1 +cotx635 comparetotal -12.1234 -12.00000 -> -1 +cotx636 comparetotal -12.1234 -12.000000 -> -1 +cotx637 comparetotal -12.1234 -12.0000000 -> -1 +cotx638 comparetotal -12.1234 -12.00000000 -> -1 +cotx639 comparetotal -12.1234 -12.000000000 -> -1 +precision: 9 + +-- extended zeros +cotx640 comparetotal 0 0 -> 0 +cotx641 comparetotal 0 -0 -> 1 +cotx642 comparetotal 0 -0.0 -> 1 +cotx643 comparetotal 0 0.0 -> 1 +cotx644 comparetotal -0 0 -> -1 +cotx645 comparetotal -0 -0 -> 0 +cotx646 comparetotal -0 -0.0 -> -1 +cotx647 comparetotal -0 0.0 -> -1 +cotx648 comparetotal 0.0 0 -> -1 +cotx649 comparetotal 0.0 -0 -> 1 +cotx650 comparetotal 0.0 -0.0 -> 1 +cotx651 comparetotal 0.0 0.0 -> 0 +cotx652 comparetotal -0.0 0 -> -1 +cotx653 comparetotal -0.0 -0 -> 1 +cotx654 comparetotal -0.0 -0.0 -> 0 +cotx655 comparetotal -0.0 0.0 -> -1 + +cotx656 comparetotal -0E1 0.0 -> -1 +cotx657 comparetotal -0E2 0.0 -> -1 +cotx658 comparetotal 0E1 0.0 -> 1 +cotx659 comparetotal 0E2 0.0 -> 1 +cotx660 comparetotal -0E1 0 -> -1 +cotx661 comparetotal -0E2 0 -> -1 +cotx662 comparetotal 0E1 0 -> 1 +cotx663 comparetotal 0E2 0 -> 1 +cotx664 comparetotal -0E1 -0E1 -> 0 +cotx665 comparetotal -0E2 -0E1 -> -1 +cotx666 comparetotal 0E1 -0E1 -> 1 +cotx667 comparetotal 0E2 -0E1 -> 1 +cotx668 comparetotal -0E1 -0E2 -> 1 +cotx669 comparetotal -0E2 -0E2 -> 0 +cotx670 comparetotal 0E1 -0E2 -> 1 +cotx671 comparetotal 0E2 -0E2 -> 1 +cotx672 comparetotal -0E1 0E1 -> -1 +cotx673 comparetotal -0E2 0E1 -> -1 +cotx674 comparetotal 0E1 0E1 -> 0 +cotx675 comparetotal 0E2 0E1 -> 1 +cotx676 comparetotal -0E1 0E2 -> -1 +cotx677 comparetotal -0E2 0E2 -> -1 +cotx678 comparetotal 0E1 0E2 -> -1 +cotx679 comparetotal 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +precision: 20 +cotx680 comparetotal 12 12 -> 0 +cotx681 comparetotal 12 12.0 -> 1 +cotx682 comparetotal 12 12.00 -> 1 +cotx683 comparetotal 12 12.000 -> 1 +cotx684 comparetotal 12 12.0000 -> 1 +cotx685 comparetotal 12 12.00000 -> 1 +cotx686 comparetotal 12 12.000000 -> 1 +cotx687 comparetotal 12 12.0000000 -> 1 +cotx688 comparetotal 12 12.00000000 -> 1 +cotx689 comparetotal 12 12.000000000 -> 1 +cotx690 comparetotal 12 12 -> 0 +cotx691 comparetotal 12.0 12 -> -1 +cotx692 comparetotal 12.00 12 -> -1 +cotx693 comparetotal 12.000 12 -> -1 +cotx694 comparetotal 12.0000 12 -> -1 +cotx695 comparetotal 12.00000 12 -> -1 +cotx696 comparetotal 12.000000 12 -> -1 +cotx697 comparetotal 12.0000000 12 -> -1 +cotx698 comparetotal 12.00000000 12 -> -1 +cotx699 comparetotal 12.000000000 12 -> -1 + +-- long operand checks +maxexponent: 999 +minexponent: -999 +precision: 9 +cotx701 comparetotal 12345678000 1 -> 1 +cotx702 comparetotal 1 12345678000 -> -1 +cotx703 comparetotal 1234567800 1 -> 1 +cotx704 comparetotal 1 1234567800 -> -1 +cotx705 comparetotal 1234567890 1 -> 1 +cotx706 comparetotal 1 1234567890 -> -1 +cotx707 comparetotal 1234567891 1 -> 1 +cotx708 comparetotal 1 1234567891 -> -1 +cotx709 comparetotal 12345678901 1 -> 1 +cotx710 comparetotal 1 12345678901 -> -1 +cotx711 comparetotal 1234567896 1 -> 1 +cotx712 comparetotal 1 1234567896 -> -1 +cotx713 comparetotal -1234567891 1 -> -1 +cotx714 comparetotal 1 -1234567891 -> 1 +cotx715 comparetotal -12345678901 1 -> -1 +cotx716 comparetotal 1 -12345678901 -> 1 +cotx717 comparetotal -1234567896 1 -> -1 +cotx718 comparetotal 1 -1234567896 -> 1 + +precision: 15 +-- same with plenty of precision +cotx721 comparetotal 12345678000 1 -> 1 +cotx722 comparetotal 1 12345678000 -> -1 +cotx723 comparetotal 1234567800 1 -> 1 +cotx724 comparetotal 1 1234567800 -> -1 +cotx725 comparetotal 1234567890 1 -> 1 +cotx726 comparetotal 1 1234567890 -> -1 +cotx727 comparetotal 1234567891 1 -> 1 +cotx728 comparetotal 1 1234567891 -> -1 +cotx729 comparetotal 12345678901 1 -> 1 +cotx730 comparetotal 1 12345678901 -> -1 +cotx731 comparetotal 1234567896 1 -> 1 +cotx732 comparetotal 1 1234567896 -> -1 + +-- residue cases +precision: 5 +cotx740 comparetotal 1 0.9999999 -> 1 +cotx741 comparetotal 1 0.999999 -> 1 +cotx742 comparetotal 1 0.99999 -> 1 +cotx743 comparetotal 1 1.0000 -> 1 +cotx744 comparetotal 1 1.00001 -> -1 +cotx745 comparetotal 1 1.000001 -> -1 +cotx746 comparetotal 1 1.0000001 -> -1 +cotx750 comparetotal 0.9999999 1 -> -1 +cotx751 comparetotal 0.999999 1 -> -1 +cotx752 comparetotal 0.99999 1 -> -1 +cotx753 comparetotal 1.0000 1 -> -1 +cotx754 comparetotal 1.00001 1 -> 1 +cotx755 comparetotal 1.000001 1 -> 1 +cotx756 comparetotal 1.0000001 1 -> 1 + +-- a selection of longies +cotx760 comparetotal -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> -1 +cotx761 comparetotal -36852134.84194296250843579428931 -36852134.84194296250843579428931 -> 0 +cotx762 comparetotal -36852134.94194296250843579428931 -36852134.84194296250843579428931 -> -1 +cotx763 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +-- precisions above or below the difference should have no effect +precision: 11 +cotx764 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 10 +cotx765 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 9 +cotx766 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 8 +cotx767 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 7 +cotx768 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 6 +cotx769 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 5 +cotx770 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 4 +cotx771 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 3 +cotx772 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 2 +cotx773 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 1 +cotx774 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 + +-- Specials +precision: 9 +cotx780 comparetotal Inf -Inf -> 1 +cotx781 comparetotal Inf -1000 -> 1 +cotx782 comparetotal Inf -1 -> 1 +cotx783 comparetotal Inf -0 -> 1 +cotx784 comparetotal Inf 0 -> 1 +cotx785 comparetotal Inf 1 -> 1 +cotx786 comparetotal Inf 1000 -> 1 +cotx787 comparetotal Inf Inf -> 0 +cotx788 comparetotal -1000 Inf -> -1 +cotx789 comparetotal -Inf Inf -> -1 +cotx790 comparetotal -1 Inf -> -1 +cotx791 comparetotal -0 Inf -> -1 +cotx792 comparetotal 0 Inf -> -1 +cotx793 comparetotal 1 Inf -> -1 +cotx794 comparetotal 1000 Inf -> -1 +cotx795 comparetotal Inf Inf -> 0 + +cotx800 comparetotal -Inf -Inf -> 0 +cotx801 comparetotal -Inf -1000 -> -1 +cotx802 comparetotal -Inf -1 -> -1 +cotx803 comparetotal -Inf -0 -> -1 +cotx804 comparetotal -Inf 0 -> -1 +cotx805 comparetotal -Inf 1 -> -1 +cotx806 comparetotal -Inf 1000 -> -1 +cotx807 comparetotal -Inf Inf -> -1 +cotx808 comparetotal -Inf -Inf -> 0 +cotx809 comparetotal -1000 -Inf -> 1 +cotx810 comparetotal -1 -Inf -> 1 +cotx811 comparetotal -0 -Inf -> 1 +cotx812 comparetotal 0 -Inf -> 1 +cotx813 comparetotal 1 -Inf -> 1 +cotx814 comparetotal 1000 -Inf -> 1 +cotx815 comparetotal Inf -Inf -> 1 + +cotx821 comparetotal NaN -Inf -> 1 +cotx822 comparetotal NaN -1000 -> 1 +cotx823 comparetotal NaN -1 -> 1 +cotx824 comparetotal NaN -0 -> 1 +cotx825 comparetotal NaN 0 -> 1 +cotx826 comparetotal NaN 1 -> 1 +cotx827 comparetotal NaN 1000 -> 1 +cotx828 comparetotal NaN Inf -> 1 +cotx829 comparetotal NaN NaN -> 0 +cotx830 comparetotal -Inf NaN -> -1 +cotx831 comparetotal -1000 NaN -> -1 +cotx832 comparetotal -1 NaN -> -1 +cotx833 comparetotal -0 NaN -> -1 +cotx834 comparetotal 0 NaN -> -1 +cotx835 comparetotal 1 NaN -> -1 +cotx836 comparetotal 1000 NaN -> -1 +cotx837 comparetotal Inf NaN -> -1 +cotx838 comparetotal -NaN -NaN -> 0 +cotx839 comparetotal +NaN -NaN -> 1 +cotx840 comparetotal -NaN +NaN -> -1 + +cotx841 comparetotal sNaN -sNaN -> 1 +cotx842 comparetotal sNaN -NaN -> 1 +cotx843 comparetotal sNaN -Inf -> 1 +cotx844 comparetotal sNaN -1000 -> 1 +cotx845 comparetotal sNaN -1 -> 1 +cotx846 comparetotal sNaN -0 -> 1 +cotx847 comparetotal sNaN 0 -> 1 +cotx848 comparetotal sNaN 1 -> 1 +cotx849 comparetotal sNaN 1000 -> 1 +cotx850 comparetotal sNaN NaN -> -1 +cotx851 comparetotal sNaN sNaN -> 0 + +cotx852 comparetotal -sNaN sNaN -> -1 +cotx853 comparetotal -NaN sNaN -> -1 +cotx854 comparetotal -Inf sNaN -> -1 +cotx855 comparetotal -1000 sNaN -> -1 +cotx856 comparetotal -1 sNaN -> -1 +cotx857 comparetotal -0 sNaN -> -1 +cotx858 comparetotal 0 sNaN -> -1 +cotx859 comparetotal 1 sNaN -> -1 +cotx860 comparetotal 1000 sNaN -> -1 +cotx861 comparetotal Inf sNaN -> -1 +cotx862 comparetotal NaN sNaN -> 1 +cotx863 comparetotal sNaN sNaN -> 0 + +cotx871 comparetotal -sNaN -sNaN -> 0 +cotx872 comparetotal -sNaN -NaN -> 1 +cotx873 comparetotal -sNaN -Inf -> -1 +cotx874 comparetotal -sNaN -1000 -> -1 +cotx875 comparetotal -sNaN -1 -> -1 +cotx876 comparetotal -sNaN -0 -> -1 +cotx877 comparetotal -sNaN 0 -> -1 +cotx878 comparetotal -sNaN 1 -> -1 +cotx879 comparetotal -sNaN 1000 -> -1 +cotx880 comparetotal -sNaN NaN -> -1 +cotx881 comparetotal -sNaN sNaN -> -1 + +cotx882 comparetotal -sNaN -sNaN -> 0 +cotx883 comparetotal -NaN -sNaN -> -1 +cotx884 comparetotal -Inf -sNaN -> 1 +cotx885 comparetotal -1000 -sNaN -> 1 +cotx886 comparetotal -1 -sNaN -> 1 +cotx887 comparetotal -0 -sNaN -> 1 +cotx888 comparetotal 0 -sNaN -> 1 +cotx889 comparetotal 1 -sNaN -> 1 +cotx890 comparetotal 1000 -sNaN -> 1 +cotx891 comparetotal Inf -sNaN -> 1 +cotx892 comparetotal NaN -sNaN -> 1 +cotx893 comparetotal sNaN -sNaN -> 1 + +-- NaNs with payload +cotx960 comparetotal NaN9 -Inf -> 1 +cotx961 comparetotal NaN8 999 -> 1 +cotx962 comparetotal NaN77 Inf -> 1 +cotx963 comparetotal -NaN67 NaN5 -> -1 +cotx964 comparetotal -Inf -NaN4 -> 1 +cotx965 comparetotal -999 -NaN33 -> 1 +cotx966 comparetotal Inf NaN2 -> -1 + +cotx970 comparetotal -NaN41 -NaN42 -> 1 +cotx971 comparetotal +NaN41 -NaN42 -> 1 +cotx972 comparetotal -NaN41 +NaN42 -> -1 +cotx973 comparetotal +NaN41 +NaN42 -> -1 +cotx974 comparetotal -NaN42 -NaN01 -> -1 +cotx975 comparetotal +NaN42 -NaN01 -> 1 +cotx976 comparetotal -NaN42 +NaN01 -> -1 +cotx977 comparetotal +NaN42 +NaN01 -> 1 + +cotx980 comparetotal -sNaN771 -sNaN772 -> 1 +cotx981 comparetotal +sNaN771 -sNaN772 -> 1 +cotx982 comparetotal -sNaN771 +sNaN772 -> -1 +cotx983 comparetotal +sNaN771 +sNaN772 -> -1 +cotx984 comparetotal -sNaN772 -sNaN771 -> -1 +cotx985 comparetotal +sNaN772 -sNaN771 -> 1 +cotx986 comparetotal -sNaN772 +sNaN771 -> -1 +cotx987 comparetotal +sNaN772 +sNaN771 -> 1 + +cotx991 comparetotal -sNaN99 -Inf -> -1 +cotx992 comparetotal sNaN98 -11 -> 1 +cotx993 comparetotal sNaN97 NaN -> -1 +cotx994 comparetotal sNaN16 sNaN94 -> -1 +cotx995 comparetotal NaN85 sNaN83 -> 1 +cotx996 comparetotal -Inf sNaN92 -> -1 +cotx997 comparetotal 088 sNaN81 -> -1 +cotx998 comparetotal Inf sNaN90 -> -1 +cotx999 comparetotal NaN -sNaN89 -> 1 + +-- overflow and underflow tests .. subnormal results now allowed +maxExponent: 999999999 +minexponent: -999999999 +cotx1080 comparetotal +1.23456789012345E-0 9E+999999999 -> -1 +cotx1081 comparetotal 9E+999999999 +1.23456789012345E-0 -> 1 +cotx1082 comparetotal +0.100 9E-999999999 -> 1 +cotx1083 comparetotal 9E-999999999 +0.100 -> -1 +cotx1085 comparetotal -1.23456789012345E-0 9E+999999999 -> -1 +cotx1086 comparetotal 9E+999999999 -1.23456789012345E-0 -> 1 +cotx1087 comparetotal -0.100 9E-999999999 -> -1 +cotx1088 comparetotal 9E-999999999 -0.100 -> 1 + +cotx1089 comparetotal 1e-599999999 1e-400000001 -> -1 +cotx1090 comparetotal 1e-599999999 1e-400000000 -> -1 +cotx1091 comparetotal 1e-600000000 1e-400000000 -> -1 +cotx1092 comparetotal 9e-999999998 0.01 -> -1 +cotx1093 comparetotal 9e-999999998 0.1 -> -1 +cotx1094 comparetotal 0.01 9e-999999998 -> 1 +cotx1095 comparetotal 1e599999999 1e400000001 -> 1 +cotx1096 comparetotal 1e599999999 1e400000000 -> 1 +cotx1097 comparetotal 1e600000000 1e400000000 -> 1 +cotx1098 comparetotal 9e999999998 100 -> 1 +cotx1099 comparetotal 9e999999998 10 -> 1 +cotx1100 comparetotal 100 9e999999998 -> -1 +-- signs +cotx1101 comparetotal 1e+777777777 1e+411111111 -> 1 +cotx1102 comparetotal 1e+777777777 -1e+411111111 -> 1 +cotx1103 comparetotal -1e+777777777 1e+411111111 -> -1 +cotx1104 comparetotal -1e+777777777 -1e+411111111 -> -1 +cotx1105 comparetotal 1e-777777777 1e-411111111 -> -1 +cotx1106 comparetotal 1e-777777777 -1e-411111111 -> 1 +cotx1107 comparetotal -1e-777777777 1e-411111111 -> -1 +cotx1108 comparetotal -1e-777777777 -1e-411111111 -> 1 + +-- spread zeros +cotx1110 comparetotal 0E-383 0 -> -1 +cotx1111 comparetotal 0E-383 -0 -> 1 +cotx1112 comparetotal -0E-383 0 -> -1 +cotx1113 comparetotal -0E-383 -0 -> 1 +cotx1114 comparetotal 0E-383 0E+384 -> -1 +cotx1115 comparetotal 0E-383 -0E+384 -> 1 +cotx1116 comparetotal -0E-383 0E+384 -> -1 +cotx1117 comparetotal -0E-383 -0E+384 -> 1 +cotx1118 comparetotal 0 0E+384 -> -1 +cotx1119 comparetotal 0 -0E+384 -> 1 +cotx1120 comparetotal -0 0E+384 -> -1 +cotx1121 comparetotal -0 -0E+384 -> 1 + +cotx1130 comparetotal 0E+384 0 -> 1 +cotx1131 comparetotal 0E+384 -0 -> 1 +cotx1132 comparetotal -0E+384 0 -> -1 +cotx1133 comparetotal -0E+384 -0 -> -1 +cotx1134 comparetotal 0E+384 0E-383 -> 1 +cotx1135 comparetotal 0E+384 -0E-383 -> 1 +cotx1136 comparetotal -0E+384 0E-383 -> -1 +cotx1137 comparetotal -0E+384 -0E-383 -> -1 +cotx1138 comparetotal 0 0E-383 -> 1 +cotx1139 comparetotal 0 -0E-383 -> 1 +cotx1140 comparetotal -0 0E-383 -> -1 +cotx1141 comparetotal -0 -0E-383 -> -1 + +-- Null tests +cotx9990 comparetotal 10 # -> NaN Invalid_operation +cotx9991 comparetotal # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/comparetotmag.decTest b/Lib/test/decimaltestdata/comparetotmag.decTest index e87c9f2dbf2..cedfdf8843a 100644 --- a/Lib/test/decimaltestdata/comparetotmag.decTest +++ b/Lib/test/decimaltestdata/comparetotmag.decTest @@ -1,790 +1,790 @@ ------------------------------------------------------------------------- --- comparetotmag.decTest -- decimal comparison, abs. total ordering -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that it cannot be assumed that add/subtract tests cover paths --- for this operation adequately, here, because the code might be --- quite different (comparison cannot overflow or underflow, so --- actual subtractions are not necessary). Similarly, comparetotal --- will have some radically different paths than compare. - -extended: 1 -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - --- sanity checks -ctmx001 comparetotmag -2 -2 -> 0 -ctmx002 comparetotmag -2 -1 -> 1 -ctmx003 comparetotmag -2 0 -> 1 -ctmx004 comparetotmag -2 1 -> 1 -ctmx005 comparetotmag -2 2 -> 0 -ctmx006 comparetotmag -1 -2 -> -1 -ctmx007 comparetotmag -1 -1 -> 0 -ctmx008 comparetotmag -1 0 -> 1 -ctmx009 comparetotmag -1 1 -> 0 -ctmx010 comparetotmag -1 2 -> -1 -ctmx011 comparetotmag 0 -2 -> -1 -ctmx012 comparetotmag 0 -1 -> -1 -ctmx013 comparetotmag 0 0 -> 0 -ctmx014 comparetotmag 0 1 -> -1 -ctmx015 comparetotmag 0 2 -> -1 -ctmx016 comparetotmag 1 -2 -> -1 -ctmx017 comparetotmag 1 -1 -> 0 -ctmx018 comparetotmag 1 0 -> 1 -ctmx019 comparetotmag 1 1 -> 0 -ctmx020 comparetotmag 1 2 -> -1 -ctmx021 comparetotmag 2 -2 -> 0 -ctmx022 comparetotmag 2 -1 -> 1 -ctmx023 comparetotmag 2 0 -> 1 -ctmx025 comparetotmag 2 1 -> 1 -ctmx026 comparetotmag 2 2 -> 0 - -ctmx031 comparetotmag -20 -20 -> 0 -ctmx032 comparetotmag -20 -10 -> 1 -ctmx033 comparetotmag -20 00 -> 1 -ctmx034 comparetotmag -20 10 -> 1 -ctmx035 comparetotmag -20 20 -> 0 -ctmx036 comparetotmag -10 -20 -> -1 -ctmx037 comparetotmag -10 -10 -> 0 -ctmx038 comparetotmag -10 00 -> 1 -ctmx039 comparetotmag -10 10 -> 0 -ctmx040 comparetotmag -10 20 -> -1 -ctmx041 comparetotmag 00 -20 -> -1 -ctmx042 comparetotmag 00 -10 -> -1 -ctmx043 comparetotmag 00 00 -> 0 -ctmx044 comparetotmag 00 10 -> -1 -ctmx045 comparetotmag 00 20 -> -1 -ctmx046 comparetotmag 10 -20 -> -1 -ctmx047 comparetotmag 10 -10 -> 0 -ctmx048 comparetotmag 10 00 -> 1 -ctmx049 comparetotmag 10 10 -> 0 -ctmx050 comparetotmag 10 20 -> -1 -ctmx051 comparetotmag 20 -20 -> 0 -ctmx052 comparetotmag 20 -10 -> 1 -ctmx053 comparetotmag 20 00 -> 1 -ctmx055 comparetotmag 20 10 -> 1 -ctmx056 comparetotmag 20 20 -> 0 - -ctmx061 comparetotmag -2.0 -2.0 -> 0 -ctmx062 comparetotmag -2.0 -1.0 -> 1 -ctmx063 comparetotmag -2.0 0.0 -> 1 -ctmx064 comparetotmag -2.0 1.0 -> 1 -ctmx065 comparetotmag -2.0 2.0 -> 0 -ctmx066 comparetotmag -1.0 -2.0 -> -1 -ctmx067 comparetotmag -1.0 -1.0 -> 0 -ctmx068 comparetotmag -1.0 0.0 -> 1 -ctmx069 comparetotmag -1.0 1.0 -> 0 -ctmx070 comparetotmag -1.0 2.0 -> -1 -ctmx071 comparetotmag 0.0 -2.0 -> -1 -ctmx072 comparetotmag 0.0 -1.0 -> -1 -ctmx073 comparetotmag 0.0 0.0 -> 0 -ctmx074 comparetotmag 0.0 1.0 -> -1 -ctmx075 comparetotmag 0.0 2.0 -> -1 -ctmx076 comparetotmag 1.0 -2.0 -> -1 -ctmx077 comparetotmag 1.0 -1.0 -> 0 -ctmx078 comparetotmag 1.0 0.0 -> 1 -ctmx079 comparetotmag 1.0 1.0 -> 0 -ctmx080 comparetotmag 1.0 2.0 -> -1 -ctmx081 comparetotmag 2.0 -2.0 -> 0 -ctmx082 comparetotmag 2.0 -1.0 -> 1 -ctmx083 comparetotmag 2.0 0.0 -> 1 -ctmx085 comparetotmag 2.0 1.0 -> 1 -ctmx086 comparetotmag 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -maxexponent: 999999999 -minexponent: -999999999 -ctmx090 comparetotmag 9.99999999E+999999999 9.99999999E+999999999 -> 0 -ctmx091 comparetotmag -9.99999999E+999999999 9.99999999E+999999999 -> 0 -ctmx092 comparetotmag 9.99999999E+999999999 -9.99999999E+999999999 -> 0 -ctmx093 comparetotmag -9.99999999E+999999999 -9.99999999E+999999999 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -ctmx100 comparetotmag 7.0 7.0 -> 0 -ctmx101 comparetotmag 7.0 7 -> -1 -ctmx102 comparetotmag 7 7.0 -> 1 -ctmx103 comparetotmag 7E+0 7.0 -> 1 -ctmx104 comparetotmag 70E-1 7.0 -> 0 -ctmx105 comparetotmag 0.7E+1 7 -> 0 -ctmx106 comparetotmag 70E-1 7 -> -1 -ctmx107 comparetotmag 7.0 7E+0 -> -1 -ctmx108 comparetotmag 7.0 70E-1 -> 0 -ctmx109 comparetotmag 7 0.7E+1 -> 0 -ctmx110 comparetotmag 7 70E-1 -> 1 - -ctmx120 comparetotmag 8.0 7.0 -> 1 -ctmx121 comparetotmag 8.0 7 -> 1 -ctmx122 comparetotmag 8 7.0 -> 1 -ctmx123 comparetotmag 8E+0 7.0 -> 1 -ctmx124 comparetotmag 80E-1 7.0 -> 1 -ctmx125 comparetotmag 0.8E+1 7 -> 1 -ctmx126 comparetotmag 80E-1 7 -> 1 -ctmx127 comparetotmag 8.0 7E+0 -> 1 -ctmx128 comparetotmag 8.0 70E-1 -> 1 -ctmx129 comparetotmag 8 0.7E+1 -> 1 -ctmx130 comparetotmag 8 70E-1 -> 1 - -ctmx140 comparetotmag 8.0 9.0 -> -1 -ctmx141 comparetotmag 8.0 9 -> -1 -ctmx142 comparetotmag 8 9.0 -> -1 -ctmx143 comparetotmag 8E+0 9.0 -> -1 -ctmx144 comparetotmag 80E-1 9.0 -> -1 -ctmx145 comparetotmag 0.8E+1 9 -> -1 -ctmx146 comparetotmag 80E-1 9 -> -1 -ctmx147 comparetotmag 8.0 9E+0 -> -1 -ctmx148 comparetotmag 8.0 90E-1 -> -1 -ctmx149 comparetotmag 8 0.9E+1 -> -1 -ctmx150 comparetotmag 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ctmx200 comparetotmag -7.0 7.0 -> 0 -ctmx201 comparetotmag -7.0 7 -> -1 -ctmx202 comparetotmag -7 7.0 -> 1 -ctmx203 comparetotmag -7E+0 7.0 -> 1 -ctmx204 comparetotmag -70E-1 7.0 -> 0 -ctmx205 comparetotmag -0.7E+1 7 -> 0 -ctmx206 comparetotmag -70E-1 7 -> -1 -ctmx207 comparetotmag -7.0 7E+0 -> -1 -ctmx208 comparetotmag -7.0 70E-1 -> 0 -ctmx209 comparetotmag -7 0.7E+1 -> 0 -ctmx210 comparetotmag -7 70E-1 -> 1 - -ctmx220 comparetotmag -8.0 7.0 -> 1 -ctmx221 comparetotmag -8.0 7 -> 1 -ctmx222 comparetotmag -8 7.0 -> 1 -ctmx223 comparetotmag -8E+0 7.0 -> 1 -ctmx224 comparetotmag -80E-1 7.0 -> 1 -ctmx225 comparetotmag -0.8E+1 7 -> 1 -ctmx226 comparetotmag -80E-1 7 -> 1 -ctmx227 comparetotmag -8.0 7E+0 -> 1 -ctmx228 comparetotmag -8.0 70E-1 -> 1 -ctmx229 comparetotmag -8 0.7E+1 -> 1 -ctmx230 comparetotmag -8 70E-1 -> 1 - -ctmx240 comparetotmag -8.0 9.0 -> -1 -ctmx241 comparetotmag -8.0 9 -> -1 -ctmx242 comparetotmag -8 9.0 -> -1 -ctmx243 comparetotmag -8E+0 9.0 -> -1 -ctmx244 comparetotmag -80E-1 9.0 -> -1 -ctmx245 comparetotmag -0.8E+1 9 -> -1 -ctmx246 comparetotmag -80E-1 9 -> -1 -ctmx247 comparetotmag -8.0 9E+0 -> -1 -ctmx248 comparetotmag -8.0 90E-1 -> -1 -ctmx249 comparetotmag -8 0.9E+1 -> -1 -ctmx250 comparetotmag -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ctmx300 comparetotmag 7.0 -7.0 -> 0 -ctmx301 comparetotmag 7.0 -7 -> -1 -ctmx302 comparetotmag 7 -7.0 -> 1 -ctmx303 comparetotmag 7E+0 -7.0 -> 1 -ctmx304 comparetotmag 70E-1 -7.0 -> 0 -ctmx305 comparetotmag .7E+1 -7 -> 0 -ctmx306 comparetotmag 70E-1 -7 -> -1 -ctmx307 comparetotmag 7.0 -7E+0 -> -1 -ctmx308 comparetotmag 7.0 -70E-1 -> 0 -ctmx309 comparetotmag 7 -.7E+1 -> 0 -ctmx310 comparetotmag 7 -70E-1 -> 1 - -ctmx320 comparetotmag 8.0 -7.0 -> 1 -ctmx321 comparetotmag 8.0 -7 -> 1 -ctmx322 comparetotmag 8 -7.0 -> 1 -ctmx323 comparetotmag 8E+0 -7.0 -> 1 -ctmx324 comparetotmag 80E-1 -7.0 -> 1 -ctmx325 comparetotmag .8E+1 -7 -> 1 -ctmx326 comparetotmag 80E-1 -7 -> 1 -ctmx327 comparetotmag 8.0 -7E+0 -> 1 -ctmx328 comparetotmag 8.0 -70E-1 -> 1 -ctmx329 comparetotmag 8 -.7E+1 -> 1 -ctmx330 comparetotmag 8 -70E-1 -> 1 - -ctmx340 comparetotmag 8.0 -9.0 -> -1 -ctmx341 comparetotmag 8.0 -9 -> -1 -ctmx342 comparetotmag 8 -9.0 -> -1 -ctmx343 comparetotmag 8E+0 -9.0 -> -1 -ctmx344 comparetotmag 80E-1 -9.0 -> -1 -ctmx345 comparetotmag .8E+1 -9 -> -1 -ctmx346 comparetotmag 80E-1 -9 -> -1 -ctmx347 comparetotmag 8.0 -9E+0 -> -1 -ctmx348 comparetotmag 8.0 -90E-1 -> -1 -ctmx349 comparetotmag 8 -.9E+1 -> -1 -ctmx350 comparetotmag 8 -90E-1 -> -1 - --- and again, with sign changes -- .. -ctmx400 comparetotmag -7.0 -7.0 -> 0 -ctmx401 comparetotmag -7.0 -7 -> -1 -ctmx402 comparetotmag -7 -7.0 -> 1 -ctmx403 comparetotmag -7E+0 -7.0 -> 1 -ctmx404 comparetotmag -70E-1 -7.0 -> 0 -ctmx405 comparetotmag -.7E+1 -7 -> 0 -ctmx406 comparetotmag -70E-1 -7 -> -1 -ctmx407 comparetotmag -7.0 -7E+0 -> -1 -ctmx408 comparetotmag -7.0 -70E-1 -> 0 -ctmx409 comparetotmag -7 -.7E+1 -> 0 -ctmx410 comparetotmag -7 -70E-1 -> 1 - -ctmx420 comparetotmag -8.0 -7.0 -> 1 -ctmx421 comparetotmag -8.0 -7 -> 1 -ctmx422 comparetotmag -8 -7.0 -> 1 -ctmx423 comparetotmag -8E+0 -7.0 -> 1 -ctmx424 comparetotmag -80E-1 -7.0 -> 1 -ctmx425 comparetotmag -.8E+1 -7 -> 1 -ctmx426 comparetotmag -80E-1 -7 -> 1 -ctmx427 comparetotmag -8.0 -7E+0 -> 1 -ctmx428 comparetotmag -8.0 -70E-1 -> 1 -ctmx429 comparetotmag -8 -.7E+1 -> 1 -ctmx430 comparetotmag -8 -70E-1 -> 1 - -ctmx440 comparetotmag -8.0 -9.0 -> -1 -ctmx441 comparetotmag -8.0 -9 -> -1 -ctmx442 comparetotmag -8 -9.0 -> -1 -ctmx443 comparetotmag -8E+0 -9.0 -> -1 -ctmx444 comparetotmag -80E-1 -9.0 -> -1 -ctmx445 comparetotmag -.8E+1 -9 -> -1 -ctmx446 comparetotmag -80E-1 -9 -> -1 -ctmx447 comparetotmag -8.0 -9E+0 -> -1 -ctmx448 comparetotmag -8.0 -90E-1 -> -1 -ctmx449 comparetotmag -8 -.9E+1 -> -1 -ctmx450 comparetotmag -8 -90E-1 -> -1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -precision: 40 -ctmx470 comparetotmag 123.4560000000000000E789 123.456E789 -> -1 -ctmx471 comparetotmag 123.456000000000000E-89 123.456E-89 -> -1 -ctmx472 comparetotmag 123.45600000000000E789 123.456E789 -> -1 -ctmx473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 -ctmx474 comparetotmag 123.456000000000E789 123.456E789 -> -1 -ctmx475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 -ctmx476 comparetotmag 123.4560000000E789 123.456E789 -> -1 -ctmx477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 -ctmx478 comparetotmag 123.45600000E789 123.456E789 -> -1 -ctmx479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 -ctmx480 comparetotmag 123.456000E789 123.456E789 -> -1 -ctmx481 comparetotmag 123.45600E-89 123.456E-89 -> -1 -ctmx482 comparetotmag 123.4560E789 123.456E789 -> -1 -ctmx483 comparetotmag 123.456E-89 123.456E-89 -> 0 -ctmx484 comparetotmag 123.456E-89 123.4560000000000000E-89 -> 1 -ctmx485 comparetotmag 123.456E789 123.456000000000000E789 -> 1 -ctmx486 comparetotmag 123.456E-89 123.45600000000000E-89 -> 1 -ctmx487 comparetotmag 123.456E789 123.4560000000000E789 -> 1 -ctmx488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 -ctmx489 comparetotmag 123.456E789 123.45600000000E789 -> 1 -ctmx490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 -ctmx491 comparetotmag 123.456E789 123.456000000E789 -> 1 -ctmx492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 -ctmx493 comparetotmag 123.456E789 123.4560000E789 -> 1 -ctmx494 comparetotmag 123.456E-89 123.456000E-89 -> 1 -ctmx495 comparetotmag 123.456E789 123.45600E789 -> 1 -ctmx496 comparetotmag 123.456E-89 123.4560E-89 -> 1 -ctmx497 comparetotmag 123.456E789 123.456E789 -> 0 - --- wide-ranging, around precision; signs equal -precision: 9 -ctmx500 comparetotmag 1 1E-15 -> 1 -ctmx501 comparetotmag 1 1E-14 -> 1 -ctmx502 comparetotmag 1 1E-13 -> 1 -ctmx503 comparetotmag 1 1E-12 -> 1 -ctmx504 comparetotmag 1 1E-11 -> 1 -ctmx505 comparetotmag 1 1E-10 -> 1 -ctmx506 comparetotmag 1 1E-9 -> 1 -ctmx507 comparetotmag 1 1E-8 -> 1 -ctmx508 comparetotmag 1 1E-7 -> 1 -ctmx509 comparetotmag 1 1E-6 -> 1 -ctmx510 comparetotmag 1 1E-5 -> 1 -ctmx511 comparetotmag 1 1E-4 -> 1 -ctmx512 comparetotmag 1 1E-3 -> 1 -ctmx513 comparetotmag 1 1E-2 -> 1 -ctmx514 comparetotmag 1 1E-1 -> 1 -ctmx515 comparetotmag 1 1E-0 -> 0 -ctmx516 comparetotmag 1 1E+1 -> -1 -ctmx517 comparetotmag 1 1E+2 -> -1 -ctmx518 comparetotmag 1 1E+3 -> -1 -ctmx519 comparetotmag 1 1E+4 -> -1 -ctmx521 comparetotmag 1 1E+5 -> -1 -ctmx522 comparetotmag 1 1E+6 -> -1 -ctmx523 comparetotmag 1 1E+7 -> -1 -ctmx524 comparetotmag 1 1E+8 -> -1 -ctmx525 comparetotmag 1 1E+9 -> -1 -ctmx526 comparetotmag 1 1E+10 -> -1 -ctmx527 comparetotmag 1 1E+11 -> -1 -ctmx528 comparetotmag 1 1E+12 -> -1 -ctmx529 comparetotmag 1 1E+13 -> -1 -ctmx530 comparetotmag 1 1E+14 -> -1 -ctmx531 comparetotmag 1 1E+15 -> -1 --- LR swap -ctmx540 comparetotmag 1E-15 1 -> -1 -ctmx541 comparetotmag 1E-14 1 -> -1 -ctmx542 comparetotmag 1E-13 1 -> -1 -ctmx543 comparetotmag 1E-12 1 -> -1 -ctmx544 comparetotmag 1E-11 1 -> -1 -ctmx545 comparetotmag 1E-10 1 -> -1 -ctmx546 comparetotmag 1E-9 1 -> -1 -ctmx547 comparetotmag 1E-8 1 -> -1 -ctmx548 comparetotmag 1E-7 1 -> -1 -ctmx549 comparetotmag 1E-6 1 -> -1 -ctmx550 comparetotmag 1E-5 1 -> -1 -ctmx551 comparetotmag 1E-4 1 -> -1 -ctmx552 comparetotmag 1E-3 1 -> -1 -ctmx553 comparetotmag 1E-2 1 -> -1 -ctmx554 comparetotmag 1E-1 1 -> -1 -ctmx555 comparetotmag 1E-0 1 -> 0 -ctmx556 comparetotmag 1E+1 1 -> 1 -ctmx557 comparetotmag 1E+2 1 -> 1 -ctmx558 comparetotmag 1E+3 1 -> 1 -ctmx559 comparetotmag 1E+4 1 -> 1 -ctmx561 comparetotmag 1E+5 1 -> 1 -ctmx562 comparetotmag 1E+6 1 -> 1 -ctmx563 comparetotmag 1E+7 1 -> 1 -ctmx564 comparetotmag 1E+8 1 -> 1 -ctmx565 comparetotmag 1E+9 1 -> 1 -ctmx566 comparetotmag 1E+10 1 -> 1 -ctmx567 comparetotmag 1E+11 1 -> 1 -ctmx568 comparetotmag 1E+12 1 -> 1 -ctmx569 comparetotmag 1E+13 1 -> 1 -ctmx570 comparetotmag 1E+14 1 -> 1 -ctmx571 comparetotmag 1E+15 1 -> 1 --- similar with an useful coefficient, one side only -ctmx580 comparetotmag 0.000000987654321 1E-15 -> 1 -ctmx581 comparetotmag 0.000000987654321 1E-14 -> 1 -ctmx582 comparetotmag 0.000000987654321 1E-13 -> 1 -ctmx583 comparetotmag 0.000000987654321 1E-12 -> 1 -ctmx584 comparetotmag 0.000000987654321 1E-11 -> 1 -ctmx585 comparetotmag 0.000000987654321 1E-10 -> 1 -ctmx586 comparetotmag 0.000000987654321 1E-9 -> 1 -ctmx587 comparetotmag 0.000000987654321 1E-8 -> 1 -ctmx588 comparetotmag 0.000000987654321 1E-7 -> 1 -ctmx589 comparetotmag 0.000000987654321 1E-6 -> -1 -ctmx590 comparetotmag 0.000000987654321 1E-5 -> -1 -ctmx591 comparetotmag 0.000000987654321 1E-4 -> -1 -ctmx592 comparetotmag 0.000000987654321 1E-3 -> -1 -ctmx593 comparetotmag 0.000000987654321 1E-2 -> -1 -ctmx594 comparetotmag 0.000000987654321 1E-1 -> -1 -ctmx595 comparetotmag 0.000000987654321 1E-0 -> -1 -ctmx596 comparetotmag 0.000000987654321 1E+1 -> -1 -ctmx597 comparetotmag 0.000000987654321 1E+2 -> -1 -ctmx598 comparetotmag 0.000000987654321 1E+3 -> -1 -ctmx599 comparetotmag 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -precision: 20 -ctmx600 comparetotmag 12 12.2345 -> -1 -ctmx601 comparetotmag 12.0 12.2345 -> -1 -ctmx602 comparetotmag 12.00 12.2345 -> -1 -ctmx603 comparetotmag 12.000 12.2345 -> -1 -ctmx604 comparetotmag 12.0000 12.2345 -> -1 -ctmx605 comparetotmag 12.00000 12.2345 -> -1 -ctmx606 comparetotmag 12.000000 12.2345 -> -1 -ctmx607 comparetotmag 12.0000000 12.2345 -> -1 -ctmx608 comparetotmag 12.00000000 12.2345 -> -1 -ctmx609 comparetotmag 12.000000000 12.2345 -> -1 -ctmx610 comparetotmag 12.1234 12 -> 1 -ctmx611 comparetotmag 12.1234 12.0 -> 1 -ctmx612 comparetotmag 12.1234 12.00 -> 1 -ctmx613 comparetotmag 12.1234 12.000 -> 1 -ctmx614 comparetotmag 12.1234 12.0000 -> 1 -ctmx615 comparetotmag 12.1234 12.00000 -> 1 -ctmx616 comparetotmag 12.1234 12.000000 -> 1 -ctmx617 comparetotmag 12.1234 12.0000000 -> 1 -ctmx618 comparetotmag 12.1234 12.00000000 -> 1 -ctmx619 comparetotmag 12.1234 12.000000000 -> 1 -ctmx620 comparetotmag -12 -12.2345 -> -1 -ctmx621 comparetotmag -12.0 -12.2345 -> -1 -ctmx622 comparetotmag -12.00 -12.2345 -> -1 -ctmx623 comparetotmag -12.000 -12.2345 -> -1 -ctmx624 comparetotmag -12.0000 -12.2345 -> -1 -ctmx625 comparetotmag -12.00000 -12.2345 -> -1 -ctmx626 comparetotmag -12.000000 -12.2345 -> -1 -ctmx627 comparetotmag -12.0000000 -12.2345 -> -1 -ctmx628 comparetotmag -12.00000000 -12.2345 -> -1 -ctmx629 comparetotmag -12.000000000 -12.2345 -> -1 -ctmx630 comparetotmag -12.1234 -12 -> 1 -ctmx631 comparetotmag -12.1234 -12.0 -> 1 -ctmx632 comparetotmag -12.1234 -12.00 -> 1 -ctmx633 comparetotmag -12.1234 -12.000 -> 1 -ctmx634 comparetotmag -12.1234 -12.0000 -> 1 -ctmx635 comparetotmag -12.1234 -12.00000 -> 1 -ctmx636 comparetotmag -12.1234 -12.000000 -> 1 -ctmx637 comparetotmag -12.1234 -12.0000000 -> 1 -ctmx638 comparetotmag -12.1234 -12.00000000 -> 1 -ctmx639 comparetotmag -12.1234 -12.000000000 -> 1 -precision: 9 - --- extended zeros -ctmx640 comparetotmag 0 0 -> 0 -ctmx641 comparetotmag 0 -0 -> 0 -ctmx642 comparetotmag 0 -0.0 -> 1 -ctmx643 comparetotmag 0 0.0 -> 1 -ctmx644 comparetotmag -0 0 -> 0 -ctmx645 comparetotmag -0 -0 -> 0 -ctmx646 comparetotmag -0 -0.0 -> 1 -ctmx647 comparetotmag -0 0.0 -> 1 -ctmx648 comparetotmag 0.0 0 -> -1 -ctmx649 comparetotmag 0.0 -0 -> -1 -ctmx650 comparetotmag 0.0 -0.0 -> 0 -ctmx651 comparetotmag 0.0 0.0 -> 0 -ctmx652 comparetotmag -0.0 0 -> -1 -ctmx653 comparetotmag -0.0 -0 -> -1 -ctmx654 comparetotmag -0.0 -0.0 -> 0 -ctmx655 comparetotmag -0.0 0.0 -> 0 - -ctmx656 comparetotmag -0E1 0.0 -> 1 -ctmx657 comparetotmag -0E2 0.0 -> 1 -ctmx658 comparetotmag 0E1 0.0 -> 1 -ctmx659 comparetotmag 0E2 0.0 -> 1 -ctmx660 comparetotmag -0E1 0 -> 1 -ctmx661 comparetotmag -0E2 0 -> 1 -ctmx662 comparetotmag 0E1 0 -> 1 -ctmx663 comparetotmag 0E2 0 -> 1 -ctmx664 comparetotmag -0E1 -0E1 -> 0 -ctmx665 comparetotmag -0E2 -0E1 -> 1 -ctmx666 comparetotmag 0E1 -0E1 -> 0 -ctmx667 comparetotmag 0E2 -0E1 -> 1 -ctmx668 comparetotmag -0E1 -0E2 -> -1 -ctmx669 comparetotmag -0E2 -0E2 -> 0 -ctmx670 comparetotmag 0E1 -0E2 -> -1 -ctmx671 comparetotmag 0E2 -0E2 -> 0 -ctmx672 comparetotmag -0E1 0E1 -> 0 -ctmx673 comparetotmag -0E2 0E1 -> 1 -ctmx674 comparetotmag 0E1 0E1 -> 0 -ctmx675 comparetotmag 0E2 0E1 -> 1 -ctmx676 comparetotmag -0E1 0E2 -> -1 -ctmx677 comparetotmag -0E2 0E2 -> 0 -ctmx678 comparetotmag 0E1 0E2 -> -1 -ctmx679 comparetotmag 0E2 0E2 -> 0 - --- trailing zeros; unit-y -precision: 20 -ctmx680 comparetotmag 12 12 -> 0 -ctmx681 comparetotmag 12 12.0 -> 1 -ctmx682 comparetotmag 12 12.00 -> 1 -ctmx683 comparetotmag 12 12.000 -> 1 -ctmx684 comparetotmag 12 12.0000 -> 1 -ctmx685 comparetotmag 12 12.00000 -> 1 -ctmx686 comparetotmag 12 12.000000 -> 1 -ctmx687 comparetotmag 12 12.0000000 -> 1 -ctmx688 comparetotmag 12 12.00000000 -> 1 -ctmx689 comparetotmag 12 12.000000000 -> 1 -ctmx690 comparetotmag 12 12 -> 0 -ctmx691 comparetotmag 12.0 12 -> -1 -ctmx692 comparetotmag 12.00 12 -> -1 -ctmx693 comparetotmag 12.000 12 -> -1 -ctmx694 comparetotmag 12.0000 12 -> -1 -ctmx695 comparetotmag 12.00000 12 -> -1 -ctmx696 comparetotmag 12.000000 12 -> -1 -ctmx697 comparetotmag 12.0000000 12 -> -1 -ctmx698 comparetotmag 12.00000000 12 -> -1 -ctmx699 comparetotmag 12.000000000 12 -> -1 - --- long operand checks -maxexponent: 999 -minexponent: -999 -precision: 9 -ctmx701 comparetotmag 12345678000 1 -> 1 -ctmx702 comparetotmag 1 12345678000 -> -1 -ctmx703 comparetotmag 1234567800 1 -> 1 -ctmx704 comparetotmag 1 1234567800 -> -1 -ctmx705 comparetotmag 1234567890 1 -> 1 -ctmx706 comparetotmag 1 1234567890 -> -1 -ctmx707 comparetotmag 1234567891 1 -> 1 -ctmx708 comparetotmag 1 1234567891 -> -1 -ctmx709 comparetotmag 12345678901 1 -> 1 -ctmx710 comparetotmag 1 12345678901 -> -1 -ctmx711 comparetotmag 1234567896 1 -> 1 -ctmx712 comparetotmag 1 1234567896 -> -1 -ctmx713 comparetotmag -1234567891 1 -> 1 -ctmx714 comparetotmag 1 -1234567891 -> -1 -ctmx715 comparetotmag -12345678901 1 -> 1 -ctmx716 comparetotmag 1 -12345678901 -> -1 -ctmx717 comparetotmag -1234567896 1 -> 1 -ctmx718 comparetotmag 1 -1234567896 -> -1 - -precision: 15 --- same with plenty of precision -ctmx721 comparetotmag 12345678000 1 -> 1 -ctmx722 comparetotmag 1 12345678000 -> -1 -ctmx723 comparetotmag 1234567800 1 -> 1 -ctmx724 comparetotmag 1 1234567800 -> -1 -ctmx725 comparetotmag 1234567890 1 -> 1 -ctmx726 comparetotmag 1 1234567890 -> -1 -ctmx727 comparetotmag 1234567891 1 -> 1 -ctmx728 comparetotmag 1 1234567891 -> -1 -ctmx729 comparetotmag 12345678901 1 -> 1 -ctmx730 comparetotmag 1 12345678901 -> -1 -ctmx731 comparetotmag 1234567896 1 -> 1 -ctmx732 comparetotmag 1 1234567896 -> -1 - --- residue cases -precision: 5 -ctmx740 comparetotmag 1 0.9999999 -> 1 -ctmx741 comparetotmag 1 0.999999 -> 1 -ctmx742 comparetotmag 1 0.99999 -> 1 -ctmx743 comparetotmag 1 1.0000 -> 1 -ctmx744 comparetotmag 1 1.00001 -> -1 -ctmx745 comparetotmag 1 1.000001 -> -1 -ctmx746 comparetotmag 1 1.0000001 -> -1 -ctmx750 comparetotmag 0.9999999 1 -> -1 -ctmx751 comparetotmag 0.999999 1 -> -1 -ctmx752 comparetotmag 0.99999 1 -> -1 -ctmx753 comparetotmag 1.0000 1 -> -1 -ctmx754 comparetotmag 1.00001 1 -> 1 -ctmx755 comparetotmag 1.000001 1 -> 1 -ctmx756 comparetotmag 1.0000001 1 -> 1 - --- a selection of longies -ctmx760 comparetotmag -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> 1 -ctmx761 comparetotmag -36852134.84194296250843579428931 -36852134.84194296250843579428931 -> 0 -ctmx762 comparetotmag -36852134.94194296250843579428931 -36852134.84194296250843579428931 -> 1 -ctmx763 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 --- precisions above or below the difference should have no effect -precision: 11 -ctmx764 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 10 -ctmx765 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 9 -ctmx766 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 8 -ctmx767 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 7 -ctmx768 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 6 -ctmx769 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 5 -ctmx770 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 4 -ctmx771 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 3 -ctmx772 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 2 -ctmx773 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 1 -ctmx774 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 - --- Specials -precision: 9 -ctmx780 comparetotmag Inf -Inf -> 0 -ctmx781 comparetotmag Inf -1000 -> 1 -ctmx782 comparetotmag Inf -1 -> 1 -ctmx783 comparetotmag Inf -0 -> 1 -ctmx784 comparetotmag Inf 0 -> 1 -ctmx785 comparetotmag Inf 1 -> 1 -ctmx786 comparetotmag Inf 1000 -> 1 -ctmx787 comparetotmag Inf Inf -> 0 -ctmx788 comparetotmag -1000 Inf -> -1 -ctmx789 comparetotmag -Inf Inf -> 0 -ctmx790 comparetotmag -1 Inf -> -1 -ctmx791 comparetotmag -0 Inf -> -1 -ctmx792 comparetotmag 0 Inf -> -1 -ctmx793 comparetotmag 1 Inf -> -1 -ctmx794 comparetotmag 1000 Inf -> -1 -ctmx795 comparetotmag Inf Inf -> 0 - -ctmx800 comparetotmag -Inf -Inf -> 0 -ctmx801 comparetotmag -Inf -1000 -> 1 -ctmx802 comparetotmag -Inf -1 -> 1 -ctmx803 comparetotmag -Inf -0 -> 1 -ctmx804 comparetotmag -Inf 0 -> 1 -ctmx805 comparetotmag -Inf 1 -> 1 -ctmx806 comparetotmag -Inf 1000 -> 1 -ctmx807 comparetotmag -Inf Inf -> 0 -ctmx808 comparetotmag -Inf -Inf -> 0 -ctmx809 comparetotmag -1000 -Inf -> -1 -ctmx810 comparetotmag -1 -Inf -> -1 -ctmx811 comparetotmag -0 -Inf -> -1 -ctmx812 comparetotmag 0 -Inf -> -1 -ctmx813 comparetotmag 1 -Inf -> -1 -ctmx814 comparetotmag 1000 -Inf -> -1 -ctmx815 comparetotmag Inf -Inf -> 0 - -ctmx821 comparetotmag NaN -Inf -> 1 -ctmx822 comparetotmag NaN -1000 -> 1 -ctmx823 comparetotmag NaN -1 -> 1 -ctmx824 comparetotmag NaN -0 -> 1 -ctmx825 comparetotmag NaN 0 -> 1 -ctmx826 comparetotmag NaN 1 -> 1 -ctmx827 comparetotmag NaN 1000 -> 1 -ctmx828 comparetotmag NaN Inf -> 1 -ctmx829 comparetotmag NaN NaN -> 0 -ctmx830 comparetotmag -Inf NaN -> -1 -ctmx831 comparetotmag -1000 NaN -> -1 -ctmx832 comparetotmag -1 NaN -> -1 -ctmx833 comparetotmag -0 NaN -> -1 -ctmx834 comparetotmag 0 NaN -> -1 -ctmx835 comparetotmag 1 NaN -> -1 -ctmx836 comparetotmag 1000 NaN -> -1 -ctmx837 comparetotmag Inf NaN -> -1 -ctmx838 comparetotmag -NaN -NaN -> 0 -ctmx839 comparetotmag +NaN -NaN -> 0 -ctmx840 comparetotmag -NaN +NaN -> 0 - -ctmx841 comparetotmag sNaN -sNaN -> 0 -ctmx842 comparetotmag sNaN -NaN -> -1 -ctmx843 comparetotmag sNaN -Inf -> 1 -ctmx844 comparetotmag sNaN -1000 -> 1 -ctmx845 comparetotmag sNaN -1 -> 1 -ctmx846 comparetotmag sNaN -0 -> 1 -ctmx847 comparetotmag sNaN 0 -> 1 -ctmx848 comparetotmag sNaN 1 -> 1 -ctmx849 comparetotmag sNaN 1000 -> 1 -ctmx850 comparetotmag sNaN NaN -> -1 -ctmx851 comparetotmag sNaN sNaN -> 0 - -ctmx852 comparetotmag -sNaN sNaN -> 0 -ctmx853 comparetotmag -NaN sNaN -> 1 -ctmx854 comparetotmag -Inf sNaN -> -1 -ctmx855 comparetotmag -1000 sNaN -> -1 -ctmx856 comparetotmag -1 sNaN -> -1 -ctmx857 comparetotmag -0 sNaN -> -1 -ctmx858 comparetotmag 0 sNaN -> -1 -ctmx859 comparetotmag 1 sNaN -> -1 -ctmx860 comparetotmag 1000 sNaN -> -1 -ctmx861 comparetotmag Inf sNaN -> -1 -ctmx862 comparetotmag NaN sNaN -> 1 -ctmx863 comparetotmag sNaN sNaN -> 0 - -ctmx871 comparetotmag -sNaN -sNaN -> 0 -ctmx872 comparetotmag -sNaN -NaN -> -1 -ctmx873 comparetotmag -sNaN -Inf -> 1 -ctmx874 comparetotmag -sNaN -1000 -> 1 -ctmx875 comparetotmag -sNaN -1 -> 1 -ctmx876 comparetotmag -sNaN -0 -> 1 -ctmx877 comparetotmag -sNaN 0 -> 1 -ctmx878 comparetotmag -sNaN 1 -> 1 -ctmx879 comparetotmag -sNaN 1000 -> 1 -ctmx880 comparetotmag -sNaN NaN -> -1 -ctmx881 comparetotmag -sNaN sNaN -> 0 - -ctmx882 comparetotmag -sNaN -sNaN -> 0 -ctmx883 comparetotmag -NaN -sNaN -> 1 -ctmx884 comparetotmag -Inf -sNaN -> -1 -ctmx885 comparetotmag -1000 -sNaN -> -1 -ctmx886 comparetotmag -1 -sNaN -> -1 -ctmx887 comparetotmag -0 -sNaN -> -1 -ctmx888 comparetotmag 0 -sNaN -> -1 -ctmx889 comparetotmag 1 -sNaN -> -1 -ctmx890 comparetotmag 1000 -sNaN -> -1 -ctmx891 comparetotmag Inf -sNaN -> -1 -ctmx892 comparetotmag NaN -sNaN -> 1 -ctmx893 comparetotmag sNaN -sNaN -> 0 - --- NaNs with payload -ctmx960 comparetotmag NaN9 -Inf -> 1 -ctmx961 comparetotmag NaN8 999 -> 1 -ctmx962 comparetotmag NaN77 Inf -> 1 -ctmx963 comparetotmag -NaN67 NaN5 -> 1 -ctmx964 comparetotmag -Inf -NaN4 -> -1 -ctmx965 comparetotmag -999 -NaN33 -> -1 -ctmx966 comparetotmag Inf NaN2 -> -1 - -ctmx970 comparetotmag -NaN41 -NaN42 -> -1 -ctmx971 comparetotmag +NaN41 -NaN42 -> -1 -ctmx972 comparetotmag -NaN41 +NaN42 -> -1 -ctmx973 comparetotmag +NaN41 +NaN42 -> -1 -ctmx974 comparetotmag -NaN42 -NaN01 -> 1 -ctmx975 comparetotmag +NaN42 -NaN01 -> 1 -ctmx976 comparetotmag -NaN42 +NaN01 -> 1 -ctmx977 comparetotmag +NaN42 +NaN01 -> 1 - -ctmx980 comparetotmag -sNaN771 -sNaN772 -> -1 -ctmx981 comparetotmag +sNaN771 -sNaN772 -> -1 -ctmx982 comparetotmag -sNaN771 +sNaN772 -> -1 -ctmx983 comparetotmag +sNaN771 +sNaN772 -> -1 -ctmx984 comparetotmag -sNaN772 -sNaN771 -> 1 -ctmx985 comparetotmag +sNaN772 -sNaN771 -> 1 -ctmx986 comparetotmag -sNaN772 +sNaN771 -> 1 -ctmx987 comparetotmag +sNaN772 +sNaN771 -> 1 - -ctmx991 comparetotmag -sNaN99 -Inf -> 1 -ctmx992 comparetotmag sNaN98 -11 -> 1 -ctmx993 comparetotmag sNaN97 NaN -> -1 -ctmx994 comparetotmag sNaN16 sNaN94 -> -1 -ctmx995 comparetotmag NaN85 sNaN83 -> 1 -ctmx996 comparetotmag -Inf sNaN92 -> -1 -ctmx997 comparetotmag 088 sNaN81 -> -1 -ctmx998 comparetotmag Inf sNaN90 -> -1 -ctmx999 comparetotmag NaN -sNaN89 -> 1 - --- overflow and underflow tests .. subnormal results now allowed -maxExponent: 999999999 -minexponent: -999999999 -ctmx1080 comparetotmag +1.23456789012345E-0 9E+999999999 -> -1 -ctmx1081 comparetotmag 9E+999999999 +1.23456789012345E-0 -> 1 -ctmx1082 comparetotmag +0.100 9E-999999999 -> 1 -ctmx1083 comparetotmag 9E-999999999 +0.100 -> -1 -ctmx1085 comparetotmag -1.23456789012345E-0 9E+999999999 -> -1 -ctmx1086 comparetotmag 9E+999999999 -1.23456789012345E-0 -> 1 -ctmx1087 comparetotmag -0.100 9E-999999999 -> 1 -ctmx1088 comparetotmag 9E-999999999 -0.100 -> -1 - -ctmx1089 comparetotmag 1e-599999999 1e-400000001 -> -1 -ctmx1090 comparetotmag 1e-599999999 1e-400000000 -> -1 -ctmx1091 comparetotmag 1e-600000000 1e-400000000 -> -1 -ctmx1092 comparetotmag 9e-999999998 0.01 -> -1 -ctmx1093 comparetotmag 9e-999999998 0.1 -> -1 -ctmx1094 comparetotmag 0.01 9e-999999998 -> 1 -ctmx1095 comparetotmag 1e599999999 1e400000001 -> 1 -ctmx1096 comparetotmag 1e599999999 1e400000000 -> 1 -ctmx1097 comparetotmag 1e600000000 1e400000000 -> 1 -ctmx1098 comparetotmag 9e999999998 100 -> 1 -ctmx1099 comparetotmag 9e999999998 10 -> 1 -ctmx1100 comparetotmag 100 9e999999998 -> -1 --- signs -ctmx1101 comparetotmag 1e+777777777 1e+411111111 -> 1 -ctmx1102 comparetotmag 1e+777777777 -1e+411111111 -> 1 -ctmx1103 comparetotmag -1e+777777777 1e+411111111 -> 1 -ctmx1104 comparetotmag -1e+777777777 -1e+411111111 -> 1 -ctmx1105 comparetotmag 1e-777777777 1e-411111111 -> -1 -ctmx1106 comparetotmag 1e-777777777 -1e-411111111 -> -1 -ctmx1107 comparetotmag -1e-777777777 1e-411111111 -> -1 -ctmx1108 comparetotmag -1e-777777777 -1e-411111111 -> -1 - --- spread zeros -ctmx1110 comparetotmag 0E-383 0 -> -1 -ctmx1111 comparetotmag 0E-383 -0 -> -1 -ctmx1112 comparetotmag -0E-383 0 -> -1 -ctmx1113 comparetotmag -0E-383 -0 -> -1 -ctmx1114 comparetotmag 0E-383 0E+384 -> -1 -ctmx1115 comparetotmag 0E-383 -0E+384 -> -1 -ctmx1116 comparetotmag -0E-383 0E+384 -> -1 -ctmx1117 comparetotmag -0E-383 -0E+384 -> -1 -ctmx1118 comparetotmag 0 0E+384 -> -1 -ctmx1119 comparetotmag 0 -0E+384 -> -1 -ctmx1120 comparetotmag -0 0E+384 -> -1 -ctmx1121 comparetotmag -0 -0E+384 -> -1 - -ctmx1130 comparetotmag 0E+384 0 -> 1 -ctmx1131 comparetotmag 0E+384 -0 -> 1 -ctmx1132 comparetotmag -0E+384 0 -> 1 -ctmx1133 comparetotmag -0E+384 -0 -> 1 -ctmx1134 comparetotmag 0E+384 0E-383 -> 1 -ctmx1135 comparetotmag 0E+384 -0E-383 -> 1 -ctmx1136 comparetotmag -0E+384 0E-383 -> 1 -ctmx1137 comparetotmag -0E+384 -0E-383 -> 1 -ctmx1138 comparetotmag 0 0E-383 -> 1 -ctmx1139 comparetotmag 0 -0E-383 -> 1 -ctmx1140 comparetotmag -0 0E-383 -> 1 -ctmx1141 comparetotmag -0 -0E-383 -> 1 - --- Null tests -ctmx9990 comparetotmag 10 # -> NaN Invalid_operation -ctmx9991 comparetotmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- comparetotmag.decTest -- decimal comparison, abs. total ordering -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that it cannot be assumed that add/subtract tests cover paths +-- for this operation adequately, here, because the code might be +-- quite different (comparison cannot overflow or underflow, so +-- actual subtractions are not necessary). Similarly, comparetotal +-- will have some radically different paths than compare. + +extended: 1 +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +-- sanity checks +ctmx001 comparetotmag -2 -2 -> 0 +ctmx002 comparetotmag -2 -1 -> 1 +ctmx003 comparetotmag -2 0 -> 1 +ctmx004 comparetotmag -2 1 -> 1 +ctmx005 comparetotmag -2 2 -> 0 +ctmx006 comparetotmag -1 -2 -> -1 +ctmx007 comparetotmag -1 -1 -> 0 +ctmx008 comparetotmag -1 0 -> 1 +ctmx009 comparetotmag -1 1 -> 0 +ctmx010 comparetotmag -1 2 -> -1 +ctmx011 comparetotmag 0 -2 -> -1 +ctmx012 comparetotmag 0 -1 -> -1 +ctmx013 comparetotmag 0 0 -> 0 +ctmx014 comparetotmag 0 1 -> -1 +ctmx015 comparetotmag 0 2 -> -1 +ctmx016 comparetotmag 1 -2 -> -1 +ctmx017 comparetotmag 1 -1 -> 0 +ctmx018 comparetotmag 1 0 -> 1 +ctmx019 comparetotmag 1 1 -> 0 +ctmx020 comparetotmag 1 2 -> -1 +ctmx021 comparetotmag 2 -2 -> 0 +ctmx022 comparetotmag 2 -1 -> 1 +ctmx023 comparetotmag 2 0 -> 1 +ctmx025 comparetotmag 2 1 -> 1 +ctmx026 comparetotmag 2 2 -> 0 + +ctmx031 comparetotmag -20 -20 -> 0 +ctmx032 comparetotmag -20 -10 -> 1 +ctmx033 comparetotmag -20 00 -> 1 +ctmx034 comparetotmag -20 10 -> 1 +ctmx035 comparetotmag -20 20 -> 0 +ctmx036 comparetotmag -10 -20 -> -1 +ctmx037 comparetotmag -10 -10 -> 0 +ctmx038 comparetotmag -10 00 -> 1 +ctmx039 comparetotmag -10 10 -> 0 +ctmx040 comparetotmag -10 20 -> -1 +ctmx041 comparetotmag 00 -20 -> -1 +ctmx042 comparetotmag 00 -10 -> -1 +ctmx043 comparetotmag 00 00 -> 0 +ctmx044 comparetotmag 00 10 -> -1 +ctmx045 comparetotmag 00 20 -> -1 +ctmx046 comparetotmag 10 -20 -> -1 +ctmx047 comparetotmag 10 -10 -> 0 +ctmx048 comparetotmag 10 00 -> 1 +ctmx049 comparetotmag 10 10 -> 0 +ctmx050 comparetotmag 10 20 -> -1 +ctmx051 comparetotmag 20 -20 -> 0 +ctmx052 comparetotmag 20 -10 -> 1 +ctmx053 comparetotmag 20 00 -> 1 +ctmx055 comparetotmag 20 10 -> 1 +ctmx056 comparetotmag 20 20 -> 0 + +ctmx061 comparetotmag -2.0 -2.0 -> 0 +ctmx062 comparetotmag -2.0 -1.0 -> 1 +ctmx063 comparetotmag -2.0 0.0 -> 1 +ctmx064 comparetotmag -2.0 1.0 -> 1 +ctmx065 comparetotmag -2.0 2.0 -> 0 +ctmx066 comparetotmag -1.0 -2.0 -> -1 +ctmx067 comparetotmag -1.0 -1.0 -> 0 +ctmx068 comparetotmag -1.0 0.0 -> 1 +ctmx069 comparetotmag -1.0 1.0 -> 0 +ctmx070 comparetotmag -1.0 2.0 -> -1 +ctmx071 comparetotmag 0.0 -2.0 -> -1 +ctmx072 comparetotmag 0.0 -1.0 -> -1 +ctmx073 comparetotmag 0.0 0.0 -> 0 +ctmx074 comparetotmag 0.0 1.0 -> -1 +ctmx075 comparetotmag 0.0 2.0 -> -1 +ctmx076 comparetotmag 1.0 -2.0 -> -1 +ctmx077 comparetotmag 1.0 -1.0 -> 0 +ctmx078 comparetotmag 1.0 0.0 -> 1 +ctmx079 comparetotmag 1.0 1.0 -> 0 +ctmx080 comparetotmag 1.0 2.0 -> -1 +ctmx081 comparetotmag 2.0 -2.0 -> 0 +ctmx082 comparetotmag 2.0 -1.0 -> 1 +ctmx083 comparetotmag 2.0 0.0 -> 1 +ctmx085 comparetotmag 2.0 1.0 -> 1 +ctmx086 comparetotmag 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +maxexponent: 999999999 +minexponent: -999999999 +ctmx090 comparetotmag 9.99999999E+999999999 9.99999999E+999999999 -> 0 +ctmx091 comparetotmag -9.99999999E+999999999 9.99999999E+999999999 -> 0 +ctmx092 comparetotmag 9.99999999E+999999999 -9.99999999E+999999999 -> 0 +ctmx093 comparetotmag -9.99999999E+999999999 -9.99999999E+999999999 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +ctmx100 comparetotmag 7.0 7.0 -> 0 +ctmx101 comparetotmag 7.0 7 -> -1 +ctmx102 comparetotmag 7 7.0 -> 1 +ctmx103 comparetotmag 7E+0 7.0 -> 1 +ctmx104 comparetotmag 70E-1 7.0 -> 0 +ctmx105 comparetotmag 0.7E+1 7 -> 0 +ctmx106 comparetotmag 70E-1 7 -> -1 +ctmx107 comparetotmag 7.0 7E+0 -> -1 +ctmx108 comparetotmag 7.0 70E-1 -> 0 +ctmx109 comparetotmag 7 0.7E+1 -> 0 +ctmx110 comparetotmag 7 70E-1 -> 1 + +ctmx120 comparetotmag 8.0 7.0 -> 1 +ctmx121 comparetotmag 8.0 7 -> 1 +ctmx122 comparetotmag 8 7.0 -> 1 +ctmx123 comparetotmag 8E+0 7.0 -> 1 +ctmx124 comparetotmag 80E-1 7.0 -> 1 +ctmx125 comparetotmag 0.8E+1 7 -> 1 +ctmx126 comparetotmag 80E-1 7 -> 1 +ctmx127 comparetotmag 8.0 7E+0 -> 1 +ctmx128 comparetotmag 8.0 70E-1 -> 1 +ctmx129 comparetotmag 8 0.7E+1 -> 1 +ctmx130 comparetotmag 8 70E-1 -> 1 + +ctmx140 comparetotmag 8.0 9.0 -> -1 +ctmx141 comparetotmag 8.0 9 -> -1 +ctmx142 comparetotmag 8 9.0 -> -1 +ctmx143 comparetotmag 8E+0 9.0 -> -1 +ctmx144 comparetotmag 80E-1 9.0 -> -1 +ctmx145 comparetotmag 0.8E+1 9 -> -1 +ctmx146 comparetotmag 80E-1 9 -> -1 +ctmx147 comparetotmag 8.0 9E+0 -> -1 +ctmx148 comparetotmag 8.0 90E-1 -> -1 +ctmx149 comparetotmag 8 0.9E+1 -> -1 +ctmx150 comparetotmag 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ctmx200 comparetotmag -7.0 7.0 -> 0 +ctmx201 comparetotmag -7.0 7 -> -1 +ctmx202 comparetotmag -7 7.0 -> 1 +ctmx203 comparetotmag -7E+0 7.0 -> 1 +ctmx204 comparetotmag -70E-1 7.0 -> 0 +ctmx205 comparetotmag -0.7E+1 7 -> 0 +ctmx206 comparetotmag -70E-1 7 -> -1 +ctmx207 comparetotmag -7.0 7E+0 -> -1 +ctmx208 comparetotmag -7.0 70E-1 -> 0 +ctmx209 comparetotmag -7 0.7E+1 -> 0 +ctmx210 comparetotmag -7 70E-1 -> 1 + +ctmx220 comparetotmag -8.0 7.0 -> 1 +ctmx221 comparetotmag -8.0 7 -> 1 +ctmx222 comparetotmag -8 7.0 -> 1 +ctmx223 comparetotmag -8E+0 7.0 -> 1 +ctmx224 comparetotmag -80E-1 7.0 -> 1 +ctmx225 comparetotmag -0.8E+1 7 -> 1 +ctmx226 comparetotmag -80E-1 7 -> 1 +ctmx227 comparetotmag -8.0 7E+0 -> 1 +ctmx228 comparetotmag -8.0 70E-1 -> 1 +ctmx229 comparetotmag -8 0.7E+1 -> 1 +ctmx230 comparetotmag -8 70E-1 -> 1 + +ctmx240 comparetotmag -8.0 9.0 -> -1 +ctmx241 comparetotmag -8.0 9 -> -1 +ctmx242 comparetotmag -8 9.0 -> -1 +ctmx243 comparetotmag -8E+0 9.0 -> -1 +ctmx244 comparetotmag -80E-1 9.0 -> -1 +ctmx245 comparetotmag -0.8E+1 9 -> -1 +ctmx246 comparetotmag -80E-1 9 -> -1 +ctmx247 comparetotmag -8.0 9E+0 -> -1 +ctmx248 comparetotmag -8.0 90E-1 -> -1 +ctmx249 comparetotmag -8 0.9E+1 -> -1 +ctmx250 comparetotmag -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ctmx300 comparetotmag 7.0 -7.0 -> 0 +ctmx301 comparetotmag 7.0 -7 -> -1 +ctmx302 comparetotmag 7 -7.0 -> 1 +ctmx303 comparetotmag 7E+0 -7.0 -> 1 +ctmx304 comparetotmag 70E-1 -7.0 -> 0 +ctmx305 comparetotmag .7E+1 -7 -> 0 +ctmx306 comparetotmag 70E-1 -7 -> -1 +ctmx307 comparetotmag 7.0 -7E+0 -> -1 +ctmx308 comparetotmag 7.0 -70E-1 -> 0 +ctmx309 comparetotmag 7 -.7E+1 -> 0 +ctmx310 comparetotmag 7 -70E-1 -> 1 + +ctmx320 comparetotmag 8.0 -7.0 -> 1 +ctmx321 comparetotmag 8.0 -7 -> 1 +ctmx322 comparetotmag 8 -7.0 -> 1 +ctmx323 comparetotmag 8E+0 -7.0 -> 1 +ctmx324 comparetotmag 80E-1 -7.0 -> 1 +ctmx325 comparetotmag .8E+1 -7 -> 1 +ctmx326 comparetotmag 80E-1 -7 -> 1 +ctmx327 comparetotmag 8.0 -7E+0 -> 1 +ctmx328 comparetotmag 8.0 -70E-1 -> 1 +ctmx329 comparetotmag 8 -.7E+1 -> 1 +ctmx330 comparetotmag 8 -70E-1 -> 1 + +ctmx340 comparetotmag 8.0 -9.0 -> -1 +ctmx341 comparetotmag 8.0 -9 -> -1 +ctmx342 comparetotmag 8 -9.0 -> -1 +ctmx343 comparetotmag 8E+0 -9.0 -> -1 +ctmx344 comparetotmag 80E-1 -9.0 -> -1 +ctmx345 comparetotmag .8E+1 -9 -> -1 +ctmx346 comparetotmag 80E-1 -9 -> -1 +ctmx347 comparetotmag 8.0 -9E+0 -> -1 +ctmx348 comparetotmag 8.0 -90E-1 -> -1 +ctmx349 comparetotmag 8 -.9E+1 -> -1 +ctmx350 comparetotmag 8 -90E-1 -> -1 + +-- and again, with sign changes -- .. +ctmx400 comparetotmag -7.0 -7.0 -> 0 +ctmx401 comparetotmag -7.0 -7 -> -1 +ctmx402 comparetotmag -7 -7.0 -> 1 +ctmx403 comparetotmag -7E+0 -7.0 -> 1 +ctmx404 comparetotmag -70E-1 -7.0 -> 0 +ctmx405 comparetotmag -.7E+1 -7 -> 0 +ctmx406 comparetotmag -70E-1 -7 -> -1 +ctmx407 comparetotmag -7.0 -7E+0 -> -1 +ctmx408 comparetotmag -7.0 -70E-1 -> 0 +ctmx409 comparetotmag -7 -.7E+1 -> 0 +ctmx410 comparetotmag -7 -70E-1 -> 1 + +ctmx420 comparetotmag -8.0 -7.0 -> 1 +ctmx421 comparetotmag -8.0 -7 -> 1 +ctmx422 comparetotmag -8 -7.0 -> 1 +ctmx423 comparetotmag -8E+0 -7.0 -> 1 +ctmx424 comparetotmag -80E-1 -7.0 -> 1 +ctmx425 comparetotmag -.8E+1 -7 -> 1 +ctmx426 comparetotmag -80E-1 -7 -> 1 +ctmx427 comparetotmag -8.0 -7E+0 -> 1 +ctmx428 comparetotmag -8.0 -70E-1 -> 1 +ctmx429 comparetotmag -8 -.7E+1 -> 1 +ctmx430 comparetotmag -8 -70E-1 -> 1 + +ctmx440 comparetotmag -8.0 -9.0 -> -1 +ctmx441 comparetotmag -8.0 -9 -> -1 +ctmx442 comparetotmag -8 -9.0 -> -1 +ctmx443 comparetotmag -8E+0 -9.0 -> -1 +ctmx444 comparetotmag -80E-1 -9.0 -> -1 +ctmx445 comparetotmag -.8E+1 -9 -> -1 +ctmx446 comparetotmag -80E-1 -9 -> -1 +ctmx447 comparetotmag -8.0 -9E+0 -> -1 +ctmx448 comparetotmag -8.0 -90E-1 -> -1 +ctmx449 comparetotmag -8 -.9E+1 -> -1 +ctmx450 comparetotmag -8 -90E-1 -> -1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +precision: 40 +ctmx470 comparetotmag 123.4560000000000000E789 123.456E789 -> -1 +ctmx471 comparetotmag 123.456000000000000E-89 123.456E-89 -> -1 +ctmx472 comparetotmag 123.45600000000000E789 123.456E789 -> -1 +ctmx473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 +ctmx474 comparetotmag 123.456000000000E789 123.456E789 -> -1 +ctmx475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 +ctmx476 comparetotmag 123.4560000000E789 123.456E789 -> -1 +ctmx477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 +ctmx478 comparetotmag 123.45600000E789 123.456E789 -> -1 +ctmx479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 +ctmx480 comparetotmag 123.456000E789 123.456E789 -> -1 +ctmx481 comparetotmag 123.45600E-89 123.456E-89 -> -1 +ctmx482 comparetotmag 123.4560E789 123.456E789 -> -1 +ctmx483 comparetotmag 123.456E-89 123.456E-89 -> 0 +ctmx484 comparetotmag 123.456E-89 123.4560000000000000E-89 -> 1 +ctmx485 comparetotmag 123.456E789 123.456000000000000E789 -> 1 +ctmx486 comparetotmag 123.456E-89 123.45600000000000E-89 -> 1 +ctmx487 comparetotmag 123.456E789 123.4560000000000E789 -> 1 +ctmx488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 +ctmx489 comparetotmag 123.456E789 123.45600000000E789 -> 1 +ctmx490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 +ctmx491 comparetotmag 123.456E789 123.456000000E789 -> 1 +ctmx492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 +ctmx493 comparetotmag 123.456E789 123.4560000E789 -> 1 +ctmx494 comparetotmag 123.456E-89 123.456000E-89 -> 1 +ctmx495 comparetotmag 123.456E789 123.45600E789 -> 1 +ctmx496 comparetotmag 123.456E-89 123.4560E-89 -> 1 +ctmx497 comparetotmag 123.456E789 123.456E789 -> 0 + +-- wide-ranging, around precision; signs equal +precision: 9 +ctmx500 comparetotmag 1 1E-15 -> 1 +ctmx501 comparetotmag 1 1E-14 -> 1 +ctmx502 comparetotmag 1 1E-13 -> 1 +ctmx503 comparetotmag 1 1E-12 -> 1 +ctmx504 comparetotmag 1 1E-11 -> 1 +ctmx505 comparetotmag 1 1E-10 -> 1 +ctmx506 comparetotmag 1 1E-9 -> 1 +ctmx507 comparetotmag 1 1E-8 -> 1 +ctmx508 comparetotmag 1 1E-7 -> 1 +ctmx509 comparetotmag 1 1E-6 -> 1 +ctmx510 comparetotmag 1 1E-5 -> 1 +ctmx511 comparetotmag 1 1E-4 -> 1 +ctmx512 comparetotmag 1 1E-3 -> 1 +ctmx513 comparetotmag 1 1E-2 -> 1 +ctmx514 comparetotmag 1 1E-1 -> 1 +ctmx515 comparetotmag 1 1E-0 -> 0 +ctmx516 comparetotmag 1 1E+1 -> -1 +ctmx517 comparetotmag 1 1E+2 -> -1 +ctmx518 comparetotmag 1 1E+3 -> -1 +ctmx519 comparetotmag 1 1E+4 -> -1 +ctmx521 comparetotmag 1 1E+5 -> -1 +ctmx522 comparetotmag 1 1E+6 -> -1 +ctmx523 comparetotmag 1 1E+7 -> -1 +ctmx524 comparetotmag 1 1E+8 -> -1 +ctmx525 comparetotmag 1 1E+9 -> -1 +ctmx526 comparetotmag 1 1E+10 -> -1 +ctmx527 comparetotmag 1 1E+11 -> -1 +ctmx528 comparetotmag 1 1E+12 -> -1 +ctmx529 comparetotmag 1 1E+13 -> -1 +ctmx530 comparetotmag 1 1E+14 -> -1 +ctmx531 comparetotmag 1 1E+15 -> -1 +-- LR swap +ctmx540 comparetotmag 1E-15 1 -> -1 +ctmx541 comparetotmag 1E-14 1 -> -1 +ctmx542 comparetotmag 1E-13 1 -> -1 +ctmx543 comparetotmag 1E-12 1 -> -1 +ctmx544 comparetotmag 1E-11 1 -> -1 +ctmx545 comparetotmag 1E-10 1 -> -1 +ctmx546 comparetotmag 1E-9 1 -> -1 +ctmx547 comparetotmag 1E-8 1 -> -1 +ctmx548 comparetotmag 1E-7 1 -> -1 +ctmx549 comparetotmag 1E-6 1 -> -1 +ctmx550 comparetotmag 1E-5 1 -> -1 +ctmx551 comparetotmag 1E-4 1 -> -1 +ctmx552 comparetotmag 1E-3 1 -> -1 +ctmx553 comparetotmag 1E-2 1 -> -1 +ctmx554 comparetotmag 1E-1 1 -> -1 +ctmx555 comparetotmag 1E-0 1 -> 0 +ctmx556 comparetotmag 1E+1 1 -> 1 +ctmx557 comparetotmag 1E+2 1 -> 1 +ctmx558 comparetotmag 1E+3 1 -> 1 +ctmx559 comparetotmag 1E+4 1 -> 1 +ctmx561 comparetotmag 1E+5 1 -> 1 +ctmx562 comparetotmag 1E+6 1 -> 1 +ctmx563 comparetotmag 1E+7 1 -> 1 +ctmx564 comparetotmag 1E+8 1 -> 1 +ctmx565 comparetotmag 1E+9 1 -> 1 +ctmx566 comparetotmag 1E+10 1 -> 1 +ctmx567 comparetotmag 1E+11 1 -> 1 +ctmx568 comparetotmag 1E+12 1 -> 1 +ctmx569 comparetotmag 1E+13 1 -> 1 +ctmx570 comparetotmag 1E+14 1 -> 1 +ctmx571 comparetotmag 1E+15 1 -> 1 +-- similar with an useful coefficient, one side only +ctmx580 comparetotmag 0.000000987654321 1E-15 -> 1 +ctmx581 comparetotmag 0.000000987654321 1E-14 -> 1 +ctmx582 comparetotmag 0.000000987654321 1E-13 -> 1 +ctmx583 comparetotmag 0.000000987654321 1E-12 -> 1 +ctmx584 comparetotmag 0.000000987654321 1E-11 -> 1 +ctmx585 comparetotmag 0.000000987654321 1E-10 -> 1 +ctmx586 comparetotmag 0.000000987654321 1E-9 -> 1 +ctmx587 comparetotmag 0.000000987654321 1E-8 -> 1 +ctmx588 comparetotmag 0.000000987654321 1E-7 -> 1 +ctmx589 comparetotmag 0.000000987654321 1E-6 -> -1 +ctmx590 comparetotmag 0.000000987654321 1E-5 -> -1 +ctmx591 comparetotmag 0.000000987654321 1E-4 -> -1 +ctmx592 comparetotmag 0.000000987654321 1E-3 -> -1 +ctmx593 comparetotmag 0.000000987654321 1E-2 -> -1 +ctmx594 comparetotmag 0.000000987654321 1E-1 -> -1 +ctmx595 comparetotmag 0.000000987654321 1E-0 -> -1 +ctmx596 comparetotmag 0.000000987654321 1E+1 -> -1 +ctmx597 comparetotmag 0.000000987654321 1E+2 -> -1 +ctmx598 comparetotmag 0.000000987654321 1E+3 -> -1 +ctmx599 comparetotmag 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +precision: 20 +ctmx600 comparetotmag 12 12.2345 -> -1 +ctmx601 comparetotmag 12.0 12.2345 -> -1 +ctmx602 comparetotmag 12.00 12.2345 -> -1 +ctmx603 comparetotmag 12.000 12.2345 -> -1 +ctmx604 comparetotmag 12.0000 12.2345 -> -1 +ctmx605 comparetotmag 12.00000 12.2345 -> -1 +ctmx606 comparetotmag 12.000000 12.2345 -> -1 +ctmx607 comparetotmag 12.0000000 12.2345 -> -1 +ctmx608 comparetotmag 12.00000000 12.2345 -> -1 +ctmx609 comparetotmag 12.000000000 12.2345 -> -1 +ctmx610 comparetotmag 12.1234 12 -> 1 +ctmx611 comparetotmag 12.1234 12.0 -> 1 +ctmx612 comparetotmag 12.1234 12.00 -> 1 +ctmx613 comparetotmag 12.1234 12.000 -> 1 +ctmx614 comparetotmag 12.1234 12.0000 -> 1 +ctmx615 comparetotmag 12.1234 12.00000 -> 1 +ctmx616 comparetotmag 12.1234 12.000000 -> 1 +ctmx617 comparetotmag 12.1234 12.0000000 -> 1 +ctmx618 comparetotmag 12.1234 12.00000000 -> 1 +ctmx619 comparetotmag 12.1234 12.000000000 -> 1 +ctmx620 comparetotmag -12 -12.2345 -> -1 +ctmx621 comparetotmag -12.0 -12.2345 -> -1 +ctmx622 comparetotmag -12.00 -12.2345 -> -1 +ctmx623 comparetotmag -12.000 -12.2345 -> -1 +ctmx624 comparetotmag -12.0000 -12.2345 -> -1 +ctmx625 comparetotmag -12.00000 -12.2345 -> -1 +ctmx626 comparetotmag -12.000000 -12.2345 -> -1 +ctmx627 comparetotmag -12.0000000 -12.2345 -> -1 +ctmx628 comparetotmag -12.00000000 -12.2345 -> -1 +ctmx629 comparetotmag -12.000000000 -12.2345 -> -1 +ctmx630 comparetotmag -12.1234 -12 -> 1 +ctmx631 comparetotmag -12.1234 -12.0 -> 1 +ctmx632 comparetotmag -12.1234 -12.00 -> 1 +ctmx633 comparetotmag -12.1234 -12.000 -> 1 +ctmx634 comparetotmag -12.1234 -12.0000 -> 1 +ctmx635 comparetotmag -12.1234 -12.00000 -> 1 +ctmx636 comparetotmag -12.1234 -12.000000 -> 1 +ctmx637 comparetotmag -12.1234 -12.0000000 -> 1 +ctmx638 comparetotmag -12.1234 -12.00000000 -> 1 +ctmx639 comparetotmag -12.1234 -12.000000000 -> 1 +precision: 9 + +-- extended zeros +ctmx640 comparetotmag 0 0 -> 0 +ctmx641 comparetotmag 0 -0 -> 0 +ctmx642 comparetotmag 0 -0.0 -> 1 +ctmx643 comparetotmag 0 0.0 -> 1 +ctmx644 comparetotmag -0 0 -> 0 +ctmx645 comparetotmag -0 -0 -> 0 +ctmx646 comparetotmag -0 -0.0 -> 1 +ctmx647 comparetotmag -0 0.0 -> 1 +ctmx648 comparetotmag 0.0 0 -> -1 +ctmx649 comparetotmag 0.0 -0 -> -1 +ctmx650 comparetotmag 0.0 -0.0 -> 0 +ctmx651 comparetotmag 0.0 0.0 -> 0 +ctmx652 comparetotmag -0.0 0 -> -1 +ctmx653 comparetotmag -0.0 -0 -> -1 +ctmx654 comparetotmag -0.0 -0.0 -> 0 +ctmx655 comparetotmag -0.0 0.0 -> 0 + +ctmx656 comparetotmag -0E1 0.0 -> 1 +ctmx657 comparetotmag -0E2 0.0 -> 1 +ctmx658 comparetotmag 0E1 0.0 -> 1 +ctmx659 comparetotmag 0E2 0.0 -> 1 +ctmx660 comparetotmag -0E1 0 -> 1 +ctmx661 comparetotmag -0E2 0 -> 1 +ctmx662 comparetotmag 0E1 0 -> 1 +ctmx663 comparetotmag 0E2 0 -> 1 +ctmx664 comparetotmag -0E1 -0E1 -> 0 +ctmx665 comparetotmag -0E2 -0E1 -> 1 +ctmx666 comparetotmag 0E1 -0E1 -> 0 +ctmx667 comparetotmag 0E2 -0E1 -> 1 +ctmx668 comparetotmag -0E1 -0E2 -> -1 +ctmx669 comparetotmag -0E2 -0E2 -> 0 +ctmx670 comparetotmag 0E1 -0E2 -> -1 +ctmx671 comparetotmag 0E2 -0E2 -> 0 +ctmx672 comparetotmag -0E1 0E1 -> 0 +ctmx673 comparetotmag -0E2 0E1 -> 1 +ctmx674 comparetotmag 0E1 0E1 -> 0 +ctmx675 comparetotmag 0E2 0E1 -> 1 +ctmx676 comparetotmag -0E1 0E2 -> -1 +ctmx677 comparetotmag -0E2 0E2 -> 0 +ctmx678 comparetotmag 0E1 0E2 -> -1 +ctmx679 comparetotmag 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +precision: 20 +ctmx680 comparetotmag 12 12 -> 0 +ctmx681 comparetotmag 12 12.0 -> 1 +ctmx682 comparetotmag 12 12.00 -> 1 +ctmx683 comparetotmag 12 12.000 -> 1 +ctmx684 comparetotmag 12 12.0000 -> 1 +ctmx685 comparetotmag 12 12.00000 -> 1 +ctmx686 comparetotmag 12 12.000000 -> 1 +ctmx687 comparetotmag 12 12.0000000 -> 1 +ctmx688 comparetotmag 12 12.00000000 -> 1 +ctmx689 comparetotmag 12 12.000000000 -> 1 +ctmx690 comparetotmag 12 12 -> 0 +ctmx691 comparetotmag 12.0 12 -> -1 +ctmx692 comparetotmag 12.00 12 -> -1 +ctmx693 comparetotmag 12.000 12 -> -1 +ctmx694 comparetotmag 12.0000 12 -> -1 +ctmx695 comparetotmag 12.00000 12 -> -1 +ctmx696 comparetotmag 12.000000 12 -> -1 +ctmx697 comparetotmag 12.0000000 12 -> -1 +ctmx698 comparetotmag 12.00000000 12 -> -1 +ctmx699 comparetotmag 12.000000000 12 -> -1 + +-- long operand checks +maxexponent: 999 +minexponent: -999 +precision: 9 +ctmx701 comparetotmag 12345678000 1 -> 1 +ctmx702 comparetotmag 1 12345678000 -> -1 +ctmx703 comparetotmag 1234567800 1 -> 1 +ctmx704 comparetotmag 1 1234567800 -> -1 +ctmx705 comparetotmag 1234567890 1 -> 1 +ctmx706 comparetotmag 1 1234567890 -> -1 +ctmx707 comparetotmag 1234567891 1 -> 1 +ctmx708 comparetotmag 1 1234567891 -> -1 +ctmx709 comparetotmag 12345678901 1 -> 1 +ctmx710 comparetotmag 1 12345678901 -> -1 +ctmx711 comparetotmag 1234567896 1 -> 1 +ctmx712 comparetotmag 1 1234567896 -> -1 +ctmx713 comparetotmag -1234567891 1 -> 1 +ctmx714 comparetotmag 1 -1234567891 -> -1 +ctmx715 comparetotmag -12345678901 1 -> 1 +ctmx716 comparetotmag 1 -12345678901 -> -1 +ctmx717 comparetotmag -1234567896 1 -> 1 +ctmx718 comparetotmag 1 -1234567896 -> -1 + +precision: 15 +-- same with plenty of precision +ctmx721 comparetotmag 12345678000 1 -> 1 +ctmx722 comparetotmag 1 12345678000 -> -1 +ctmx723 comparetotmag 1234567800 1 -> 1 +ctmx724 comparetotmag 1 1234567800 -> -1 +ctmx725 comparetotmag 1234567890 1 -> 1 +ctmx726 comparetotmag 1 1234567890 -> -1 +ctmx727 comparetotmag 1234567891 1 -> 1 +ctmx728 comparetotmag 1 1234567891 -> -1 +ctmx729 comparetotmag 12345678901 1 -> 1 +ctmx730 comparetotmag 1 12345678901 -> -1 +ctmx731 comparetotmag 1234567896 1 -> 1 +ctmx732 comparetotmag 1 1234567896 -> -1 + +-- residue cases +precision: 5 +ctmx740 comparetotmag 1 0.9999999 -> 1 +ctmx741 comparetotmag 1 0.999999 -> 1 +ctmx742 comparetotmag 1 0.99999 -> 1 +ctmx743 comparetotmag 1 1.0000 -> 1 +ctmx744 comparetotmag 1 1.00001 -> -1 +ctmx745 comparetotmag 1 1.000001 -> -1 +ctmx746 comparetotmag 1 1.0000001 -> -1 +ctmx750 comparetotmag 0.9999999 1 -> -1 +ctmx751 comparetotmag 0.999999 1 -> -1 +ctmx752 comparetotmag 0.99999 1 -> -1 +ctmx753 comparetotmag 1.0000 1 -> -1 +ctmx754 comparetotmag 1.00001 1 -> 1 +ctmx755 comparetotmag 1.000001 1 -> 1 +ctmx756 comparetotmag 1.0000001 1 -> 1 + +-- a selection of longies +ctmx760 comparetotmag -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> 1 +ctmx761 comparetotmag -36852134.84194296250843579428931 -36852134.84194296250843579428931 -> 0 +ctmx762 comparetotmag -36852134.94194296250843579428931 -36852134.84194296250843579428931 -> 1 +ctmx763 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +-- precisions above or below the difference should have no effect +precision: 11 +ctmx764 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 10 +ctmx765 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 9 +ctmx766 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 8 +ctmx767 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 7 +ctmx768 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 6 +ctmx769 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 5 +ctmx770 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 4 +ctmx771 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 3 +ctmx772 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 2 +ctmx773 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 1 +ctmx774 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 + +-- Specials +precision: 9 +ctmx780 comparetotmag Inf -Inf -> 0 +ctmx781 comparetotmag Inf -1000 -> 1 +ctmx782 comparetotmag Inf -1 -> 1 +ctmx783 comparetotmag Inf -0 -> 1 +ctmx784 comparetotmag Inf 0 -> 1 +ctmx785 comparetotmag Inf 1 -> 1 +ctmx786 comparetotmag Inf 1000 -> 1 +ctmx787 comparetotmag Inf Inf -> 0 +ctmx788 comparetotmag -1000 Inf -> -1 +ctmx789 comparetotmag -Inf Inf -> 0 +ctmx790 comparetotmag -1 Inf -> -1 +ctmx791 comparetotmag -0 Inf -> -1 +ctmx792 comparetotmag 0 Inf -> -1 +ctmx793 comparetotmag 1 Inf -> -1 +ctmx794 comparetotmag 1000 Inf -> -1 +ctmx795 comparetotmag Inf Inf -> 0 + +ctmx800 comparetotmag -Inf -Inf -> 0 +ctmx801 comparetotmag -Inf -1000 -> 1 +ctmx802 comparetotmag -Inf -1 -> 1 +ctmx803 comparetotmag -Inf -0 -> 1 +ctmx804 comparetotmag -Inf 0 -> 1 +ctmx805 comparetotmag -Inf 1 -> 1 +ctmx806 comparetotmag -Inf 1000 -> 1 +ctmx807 comparetotmag -Inf Inf -> 0 +ctmx808 comparetotmag -Inf -Inf -> 0 +ctmx809 comparetotmag -1000 -Inf -> -1 +ctmx810 comparetotmag -1 -Inf -> -1 +ctmx811 comparetotmag -0 -Inf -> -1 +ctmx812 comparetotmag 0 -Inf -> -1 +ctmx813 comparetotmag 1 -Inf -> -1 +ctmx814 comparetotmag 1000 -Inf -> -1 +ctmx815 comparetotmag Inf -Inf -> 0 + +ctmx821 comparetotmag NaN -Inf -> 1 +ctmx822 comparetotmag NaN -1000 -> 1 +ctmx823 comparetotmag NaN -1 -> 1 +ctmx824 comparetotmag NaN -0 -> 1 +ctmx825 comparetotmag NaN 0 -> 1 +ctmx826 comparetotmag NaN 1 -> 1 +ctmx827 comparetotmag NaN 1000 -> 1 +ctmx828 comparetotmag NaN Inf -> 1 +ctmx829 comparetotmag NaN NaN -> 0 +ctmx830 comparetotmag -Inf NaN -> -1 +ctmx831 comparetotmag -1000 NaN -> -1 +ctmx832 comparetotmag -1 NaN -> -1 +ctmx833 comparetotmag -0 NaN -> -1 +ctmx834 comparetotmag 0 NaN -> -1 +ctmx835 comparetotmag 1 NaN -> -1 +ctmx836 comparetotmag 1000 NaN -> -1 +ctmx837 comparetotmag Inf NaN -> -1 +ctmx838 comparetotmag -NaN -NaN -> 0 +ctmx839 comparetotmag +NaN -NaN -> 0 +ctmx840 comparetotmag -NaN +NaN -> 0 + +ctmx841 comparetotmag sNaN -sNaN -> 0 +ctmx842 comparetotmag sNaN -NaN -> -1 +ctmx843 comparetotmag sNaN -Inf -> 1 +ctmx844 comparetotmag sNaN -1000 -> 1 +ctmx845 comparetotmag sNaN -1 -> 1 +ctmx846 comparetotmag sNaN -0 -> 1 +ctmx847 comparetotmag sNaN 0 -> 1 +ctmx848 comparetotmag sNaN 1 -> 1 +ctmx849 comparetotmag sNaN 1000 -> 1 +ctmx850 comparetotmag sNaN NaN -> -1 +ctmx851 comparetotmag sNaN sNaN -> 0 + +ctmx852 comparetotmag -sNaN sNaN -> 0 +ctmx853 comparetotmag -NaN sNaN -> 1 +ctmx854 comparetotmag -Inf sNaN -> -1 +ctmx855 comparetotmag -1000 sNaN -> -1 +ctmx856 comparetotmag -1 sNaN -> -1 +ctmx857 comparetotmag -0 sNaN -> -1 +ctmx858 comparetotmag 0 sNaN -> -1 +ctmx859 comparetotmag 1 sNaN -> -1 +ctmx860 comparetotmag 1000 sNaN -> -1 +ctmx861 comparetotmag Inf sNaN -> -1 +ctmx862 comparetotmag NaN sNaN -> 1 +ctmx863 comparetotmag sNaN sNaN -> 0 + +ctmx871 comparetotmag -sNaN -sNaN -> 0 +ctmx872 comparetotmag -sNaN -NaN -> -1 +ctmx873 comparetotmag -sNaN -Inf -> 1 +ctmx874 comparetotmag -sNaN -1000 -> 1 +ctmx875 comparetotmag -sNaN -1 -> 1 +ctmx876 comparetotmag -sNaN -0 -> 1 +ctmx877 comparetotmag -sNaN 0 -> 1 +ctmx878 comparetotmag -sNaN 1 -> 1 +ctmx879 comparetotmag -sNaN 1000 -> 1 +ctmx880 comparetotmag -sNaN NaN -> -1 +ctmx881 comparetotmag -sNaN sNaN -> 0 + +ctmx882 comparetotmag -sNaN -sNaN -> 0 +ctmx883 comparetotmag -NaN -sNaN -> 1 +ctmx884 comparetotmag -Inf -sNaN -> -1 +ctmx885 comparetotmag -1000 -sNaN -> -1 +ctmx886 comparetotmag -1 -sNaN -> -1 +ctmx887 comparetotmag -0 -sNaN -> -1 +ctmx888 comparetotmag 0 -sNaN -> -1 +ctmx889 comparetotmag 1 -sNaN -> -1 +ctmx890 comparetotmag 1000 -sNaN -> -1 +ctmx891 comparetotmag Inf -sNaN -> -1 +ctmx892 comparetotmag NaN -sNaN -> 1 +ctmx893 comparetotmag sNaN -sNaN -> 0 + +-- NaNs with payload +ctmx960 comparetotmag NaN9 -Inf -> 1 +ctmx961 comparetotmag NaN8 999 -> 1 +ctmx962 comparetotmag NaN77 Inf -> 1 +ctmx963 comparetotmag -NaN67 NaN5 -> 1 +ctmx964 comparetotmag -Inf -NaN4 -> -1 +ctmx965 comparetotmag -999 -NaN33 -> -1 +ctmx966 comparetotmag Inf NaN2 -> -1 + +ctmx970 comparetotmag -NaN41 -NaN42 -> -1 +ctmx971 comparetotmag +NaN41 -NaN42 -> -1 +ctmx972 comparetotmag -NaN41 +NaN42 -> -1 +ctmx973 comparetotmag +NaN41 +NaN42 -> -1 +ctmx974 comparetotmag -NaN42 -NaN01 -> 1 +ctmx975 comparetotmag +NaN42 -NaN01 -> 1 +ctmx976 comparetotmag -NaN42 +NaN01 -> 1 +ctmx977 comparetotmag +NaN42 +NaN01 -> 1 + +ctmx980 comparetotmag -sNaN771 -sNaN772 -> -1 +ctmx981 comparetotmag +sNaN771 -sNaN772 -> -1 +ctmx982 comparetotmag -sNaN771 +sNaN772 -> -1 +ctmx983 comparetotmag +sNaN771 +sNaN772 -> -1 +ctmx984 comparetotmag -sNaN772 -sNaN771 -> 1 +ctmx985 comparetotmag +sNaN772 -sNaN771 -> 1 +ctmx986 comparetotmag -sNaN772 +sNaN771 -> 1 +ctmx987 comparetotmag +sNaN772 +sNaN771 -> 1 + +ctmx991 comparetotmag -sNaN99 -Inf -> 1 +ctmx992 comparetotmag sNaN98 -11 -> 1 +ctmx993 comparetotmag sNaN97 NaN -> -1 +ctmx994 comparetotmag sNaN16 sNaN94 -> -1 +ctmx995 comparetotmag NaN85 sNaN83 -> 1 +ctmx996 comparetotmag -Inf sNaN92 -> -1 +ctmx997 comparetotmag 088 sNaN81 -> -1 +ctmx998 comparetotmag Inf sNaN90 -> -1 +ctmx999 comparetotmag NaN -sNaN89 -> 1 + +-- overflow and underflow tests .. subnormal results now allowed +maxExponent: 999999999 +minexponent: -999999999 +ctmx1080 comparetotmag +1.23456789012345E-0 9E+999999999 -> -1 +ctmx1081 comparetotmag 9E+999999999 +1.23456789012345E-0 -> 1 +ctmx1082 comparetotmag +0.100 9E-999999999 -> 1 +ctmx1083 comparetotmag 9E-999999999 +0.100 -> -1 +ctmx1085 comparetotmag -1.23456789012345E-0 9E+999999999 -> -1 +ctmx1086 comparetotmag 9E+999999999 -1.23456789012345E-0 -> 1 +ctmx1087 comparetotmag -0.100 9E-999999999 -> 1 +ctmx1088 comparetotmag 9E-999999999 -0.100 -> -1 + +ctmx1089 comparetotmag 1e-599999999 1e-400000001 -> -1 +ctmx1090 comparetotmag 1e-599999999 1e-400000000 -> -1 +ctmx1091 comparetotmag 1e-600000000 1e-400000000 -> -1 +ctmx1092 comparetotmag 9e-999999998 0.01 -> -1 +ctmx1093 comparetotmag 9e-999999998 0.1 -> -1 +ctmx1094 comparetotmag 0.01 9e-999999998 -> 1 +ctmx1095 comparetotmag 1e599999999 1e400000001 -> 1 +ctmx1096 comparetotmag 1e599999999 1e400000000 -> 1 +ctmx1097 comparetotmag 1e600000000 1e400000000 -> 1 +ctmx1098 comparetotmag 9e999999998 100 -> 1 +ctmx1099 comparetotmag 9e999999998 10 -> 1 +ctmx1100 comparetotmag 100 9e999999998 -> -1 +-- signs +ctmx1101 comparetotmag 1e+777777777 1e+411111111 -> 1 +ctmx1102 comparetotmag 1e+777777777 -1e+411111111 -> 1 +ctmx1103 comparetotmag -1e+777777777 1e+411111111 -> 1 +ctmx1104 comparetotmag -1e+777777777 -1e+411111111 -> 1 +ctmx1105 comparetotmag 1e-777777777 1e-411111111 -> -1 +ctmx1106 comparetotmag 1e-777777777 -1e-411111111 -> -1 +ctmx1107 comparetotmag -1e-777777777 1e-411111111 -> -1 +ctmx1108 comparetotmag -1e-777777777 -1e-411111111 -> -1 + +-- spread zeros +ctmx1110 comparetotmag 0E-383 0 -> -1 +ctmx1111 comparetotmag 0E-383 -0 -> -1 +ctmx1112 comparetotmag -0E-383 0 -> -1 +ctmx1113 comparetotmag -0E-383 -0 -> -1 +ctmx1114 comparetotmag 0E-383 0E+384 -> -1 +ctmx1115 comparetotmag 0E-383 -0E+384 -> -1 +ctmx1116 comparetotmag -0E-383 0E+384 -> -1 +ctmx1117 comparetotmag -0E-383 -0E+384 -> -1 +ctmx1118 comparetotmag 0 0E+384 -> -1 +ctmx1119 comparetotmag 0 -0E+384 -> -1 +ctmx1120 comparetotmag -0 0E+384 -> -1 +ctmx1121 comparetotmag -0 -0E+384 -> -1 + +ctmx1130 comparetotmag 0E+384 0 -> 1 +ctmx1131 comparetotmag 0E+384 -0 -> 1 +ctmx1132 comparetotmag -0E+384 0 -> 1 +ctmx1133 comparetotmag -0E+384 -0 -> 1 +ctmx1134 comparetotmag 0E+384 0E-383 -> 1 +ctmx1135 comparetotmag 0E+384 -0E-383 -> 1 +ctmx1136 comparetotmag -0E+384 0E-383 -> 1 +ctmx1137 comparetotmag -0E+384 -0E-383 -> 1 +ctmx1138 comparetotmag 0 0E-383 -> 1 +ctmx1139 comparetotmag 0 -0E-383 -> 1 +ctmx1140 comparetotmag -0 0E-383 -> 1 +ctmx1141 comparetotmag -0 -0E-383 -> 1 + +-- Null tests +ctmx9990 comparetotmag 10 # -> NaN Invalid_operation +ctmx9991 comparetotmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/copy.decTest b/Lib/test/decimaltestdata/copy.decTest index b47e499a7bd..d9f299e2273 100644 --- a/Lib/test/decimaltestdata/copy.decTest +++ b/Lib/test/decimaltestdata/copy.decTest @@ -1,86 +1,86 @@ ------------------------------------------------------------------------- --- copy.decTest -- quiet copy -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -cpyx001 copy +7.50 -> 7.50 - --- Infinities -cpyx011 copy Infinity -> Infinity -cpyx012 copy -Infinity -> -Infinity - --- NaNs, 0 payload -cpyx021 copy NaN -> NaN -cpyx022 copy -NaN -> -NaN -cpyx023 copy sNaN -> sNaN -cpyx024 copy -sNaN -> -sNaN - --- NaNs, non-0 payload -cpyx031 copy NaN10 -> NaN10 -cpyx032 copy -NaN10 -> -NaN10 -cpyx033 copy sNaN10 -> sNaN10 -cpyx034 copy -sNaN10 -> -sNaN10 -cpyx035 copy NaN7 -> NaN7 -cpyx036 copy -NaN7 -> -NaN7 -cpyx037 copy sNaN101 -> sNaN101 -cpyx038 copy -sNaN101 -> -sNaN101 - --- finites -cpyx101 copy 7 -> 7 -cpyx102 copy -7 -> -7 -cpyx103 copy 75 -> 75 -cpyx104 copy -75 -> -75 -cpyx105 copy 7.50 -> 7.50 -cpyx106 copy -7.50 -> -7.50 -cpyx107 copy 7.500 -> 7.500 -cpyx108 copy -7.500 -> -7.500 - --- zeros -cpyx111 copy 0 -> 0 -cpyx112 copy -0 -> -0 -cpyx113 copy 0E+4 -> 0E+4 -cpyx114 copy -0E+4 -> -0E+4 -cpyx115 copy 0.0000 -> 0.0000 -cpyx116 copy -0.0000 -> -0.0000 -cpyx117 copy 0E-141 -> 0E-141 -cpyx118 copy -0E-141 -> -0E-141 - --- full coefficients, alternating bits -cpyx121 copy 268268268 -> 268268268 -cpyx122 copy -268268268 -> -268268268 -cpyx123 copy 134134134 -> 134134134 -cpyx124 copy -134134134 -> -134134134 - --- Nmax, Nmin, Ntiny -cpyx131 copy 9.99999999E+999 -> 9.99999999E+999 -cpyx132 copy 1E-999 -> 1E-999 -cpyx133 copy 1.00000000E-999 -> 1.00000000E-999 -cpyx134 copy 1E-1007 -> 1E-1007 - -cpyx135 copy -1E-1007 -> -1E-1007 -cpyx136 copy -1.00000000E-999 -> -1.00000000E-999 -cpyx137 copy -1E-999 -> -1E-999 -cpyx138 copy -9.99999999E+999 -> -9.99999999E+999 +------------------------------------------------------------------------ +-- copy.decTest -- quiet copy -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +cpyx001 copy +7.50 -> 7.50 + +-- Infinities +cpyx011 copy Infinity -> Infinity +cpyx012 copy -Infinity -> -Infinity + +-- NaNs, 0 payload +cpyx021 copy NaN -> NaN +cpyx022 copy -NaN -> -NaN +cpyx023 copy sNaN -> sNaN +cpyx024 copy -sNaN -> -sNaN + +-- NaNs, non-0 payload +cpyx031 copy NaN10 -> NaN10 +cpyx032 copy -NaN10 -> -NaN10 +cpyx033 copy sNaN10 -> sNaN10 +cpyx034 copy -sNaN10 -> -sNaN10 +cpyx035 copy NaN7 -> NaN7 +cpyx036 copy -NaN7 -> -NaN7 +cpyx037 copy sNaN101 -> sNaN101 +cpyx038 copy -sNaN101 -> -sNaN101 + +-- finites +cpyx101 copy 7 -> 7 +cpyx102 copy -7 -> -7 +cpyx103 copy 75 -> 75 +cpyx104 copy -75 -> -75 +cpyx105 copy 7.50 -> 7.50 +cpyx106 copy -7.50 -> -7.50 +cpyx107 copy 7.500 -> 7.500 +cpyx108 copy -7.500 -> -7.500 + +-- zeros +cpyx111 copy 0 -> 0 +cpyx112 copy -0 -> -0 +cpyx113 copy 0E+4 -> 0E+4 +cpyx114 copy -0E+4 -> -0E+4 +cpyx115 copy 0.0000 -> 0.0000 +cpyx116 copy -0.0000 -> -0.0000 +cpyx117 copy 0E-141 -> 0E-141 +cpyx118 copy -0E-141 -> -0E-141 + +-- full coefficients, alternating bits +cpyx121 copy 268268268 -> 268268268 +cpyx122 copy -268268268 -> -268268268 +cpyx123 copy 134134134 -> 134134134 +cpyx124 copy -134134134 -> -134134134 + +-- Nmax, Nmin, Ntiny +cpyx131 copy 9.99999999E+999 -> 9.99999999E+999 +cpyx132 copy 1E-999 -> 1E-999 +cpyx133 copy 1.00000000E-999 -> 1.00000000E-999 +cpyx134 copy 1E-1007 -> 1E-1007 + +cpyx135 copy -1E-1007 -> -1E-1007 +cpyx136 copy -1.00000000E-999 -> -1.00000000E-999 +cpyx137 copy -1E-999 -> -1E-999 +cpyx138 copy -9.99999999E+999 -> -9.99999999E+999 diff --git a/Lib/test/decimaltestdata/copyabs.decTest b/Lib/test/decimaltestdata/copyabs.decTest index f7d0f864581..52002dc431a 100644 --- a/Lib/test/decimaltestdata/copyabs.decTest +++ b/Lib/test/decimaltestdata/copyabs.decTest @@ -1,86 +1,86 @@ ------------------------------------------------------------------------- --- copyAbs.decTest -- quiet copy and set sign to zero -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -cpax001 copyabs +7.50 -> 7.50 - --- Infinities -cpax011 copyabs Infinity -> Infinity -cpax012 copyabs -Infinity -> Infinity - --- NaNs, 0 payload -cpax021 copyabs NaN -> NaN -cpax022 copyabs -NaN -> NaN -cpax023 copyabs sNaN -> sNaN -cpax024 copyabs -sNaN -> sNaN - --- NaNs, non-0 payload -cpax031 copyabs NaN10 -> NaN10 -cpax032 copyabs -NaN15 -> NaN15 -cpax033 copyabs sNaN15 -> sNaN15 -cpax034 copyabs -sNaN10 -> sNaN10 -cpax035 copyabs NaN7 -> NaN7 -cpax036 copyabs -NaN7 -> NaN7 -cpax037 copyabs sNaN101 -> sNaN101 -cpax038 copyabs -sNaN101 -> sNaN101 - --- finites -cpax101 copyabs 7 -> 7 -cpax102 copyabs -7 -> 7 -cpax103 copyabs 75 -> 75 -cpax104 copyabs -75 -> 75 -cpax105 copyabs 7.10 -> 7.10 -cpax106 copyabs -7.10 -> 7.10 -cpax107 copyabs 7.500 -> 7.500 -cpax108 copyabs -7.500 -> 7.500 - --- zeros -cpax111 copyabs 0 -> 0 -cpax112 copyabs -0 -> 0 -cpax113 copyabs 0E+6 -> 0E+6 -cpax114 copyabs -0E+6 -> 0E+6 -cpax115 copyabs 0.0000 -> 0.0000 -cpax116 copyabs -0.0000 -> 0.0000 -cpax117 copyabs 0E-141 -> 0E-141 -cpax118 copyabs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -cpax121 copyabs 268268268 -> 268268268 -cpax122 copyabs -268268268 -> 268268268 -cpax123 copyabs 134134134 -> 134134134 -cpax124 copyabs -134134134 -> 134134134 - --- Nmax, Nmin, Ntiny -cpax131 copyabs 9.99999999E+999 -> 9.99999999E+999 -cpax132 copyabs 1E-999 -> 1E-999 -cpax133 copyabs 1.00000000E-999 -> 1.00000000E-999 -cpax134 copyabs 1E-1007 -> 1E-1007 - -cpax135 copyabs -1E-1007 -> 1E-1007 -cpax136 copyabs -1.00000000E-999 -> 1.00000000E-999 -cpax137 copyabs -1E-999 -> 1E-999 -cpax199 copyabs -9.99999999E+999 -> 9.99999999E+999 +------------------------------------------------------------------------ +-- copyAbs.decTest -- quiet copy and set sign to zero -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +cpax001 copyabs +7.50 -> 7.50 + +-- Infinities +cpax011 copyabs Infinity -> Infinity +cpax012 copyabs -Infinity -> Infinity + +-- NaNs, 0 payload +cpax021 copyabs NaN -> NaN +cpax022 copyabs -NaN -> NaN +cpax023 copyabs sNaN -> sNaN +cpax024 copyabs -sNaN -> sNaN + +-- NaNs, non-0 payload +cpax031 copyabs NaN10 -> NaN10 +cpax032 copyabs -NaN15 -> NaN15 +cpax033 copyabs sNaN15 -> sNaN15 +cpax034 copyabs -sNaN10 -> sNaN10 +cpax035 copyabs NaN7 -> NaN7 +cpax036 copyabs -NaN7 -> NaN7 +cpax037 copyabs sNaN101 -> sNaN101 +cpax038 copyabs -sNaN101 -> sNaN101 + +-- finites +cpax101 copyabs 7 -> 7 +cpax102 copyabs -7 -> 7 +cpax103 copyabs 75 -> 75 +cpax104 copyabs -75 -> 75 +cpax105 copyabs 7.10 -> 7.10 +cpax106 copyabs -7.10 -> 7.10 +cpax107 copyabs 7.500 -> 7.500 +cpax108 copyabs -7.500 -> 7.500 + +-- zeros +cpax111 copyabs 0 -> 0 +cpax112 copyabs -0 -> 0 +cpax113 copyabs 0E+6 -> 0E+6 +cpax114 copyabs -0E+6 -> 0E+6 +cpax115 copyabs 0.0000 -> 0.0000 +cpax116 copyabs -0.0000 -> 0.0000 +cpax117 copyabs 0E-141 -> 0E-141 +cpax118 copyabs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +cpax121 copyabs 268268268 -> 268268268 +cpax122 copyabs -268268268 -> 268268268 +cpax123 copyabs 134134134 -> 134134134 +cpax124 copyabs -134134134 -> 134134134 + +-- Nmax, Nmin, Ntiny +cpax131 copyabs 9.99999999E+999 -> 9.99999999E+999 +cpax132 copyabs 1E-999 -> 1E-999 +cpax133 copyabs 1.00000000E-999 -> 1.00000000E-999 +cpax134 copyabs 1E-1007 -> 1E-1007 + +cpax135 copyabs -1E-1007 -> 1E-1007 +cpax136 copyabs -1.00000000E-999 -> 1.00000000E-999 +cpax137 copyabs -1E-999 -> 1E-999 +cpax199 copyabs -9.99999999E+999 -> 9.99999999E+999 diff --git a/Lib/test/decimaltestdata/copynegate.decTest b/Lib/test/decimaltestdata/copynegate.decTest index 38235b60f9f..7f8de9d9321 100644 --- a/Lib/test/decimaltestdata/copynegate.decTest +++ b/Lib/test/decimaltestdata/copynegate.decTest @@ -1,86 +1,86 @@ ------------------------------------------------------------------------- --- copyNegate.decTest -- quiet copy and negate -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -cpnx001 copynegate +7.50 -> -7.50 - --- Infinities -cpnx011 copynegate Infinity -> -Infinity -cpnx012 copynegate -Infinity -> Infinity - --- NaNs, 0 payload -cpnx021 copynegate NaN -> -NaN -cpnx022 copynegate -NaN -> NaN -cpnx023 copynegate sNaN -> -sNaN -cpnx024 copynegate -sNaN -> sNaN - --- NaNs, non-0 payload -cpnx031 copynegate NaN13 -> -NaN13 -cpnx032 copynegate -NaN13 -> NaN13 -cpnx033 copynegate sNaN13 -> -sNaN13 -cpnx034 copynegate -sNaN13 -> sNaN13 -cpnx035 copynegate NaN70 -> -NaN70 -cpnx036 copynegate -NaN70 -> NaN70 -cpnx037 copynegate sNaN101 -> -sNaN101 -cpnx038 copynegate -sNaN101 -> sNaN101 - --- finites -cpnx101 copynegate 7 -> -7 -cpnx102 copynegate -7 -> 7 -cpnx103 copynegate 75 -> -75 -cpnx104 copynegate -75 -> 75 -cpnx105 copynegate 7.50 -> -7.50 -cpnx106 copynegate -7.50 -> 7.50 -cpnx107 copynegate 7.500 -> -7.500 -cpnx108 copynegate -7.500 -> 7.500 - --- zeros -cpnx111 copynegate 0 -> -0 -cpnx112 copynegate -0 -> 0 -cpnx113 copynegate 0E+4 -> -0E+4 -cpnx114 copynegate -0E+4 -> 0E+4 -cpnx115 copynegate 0.0000 -> -0.0000 -cpnx116 copynegate -0.0000 -> 0.0000 -cpnx117 copynegate 0E-141 -> -0E-141 -cpnx118 copynegate -0E-141 -> 0E-141 - --- full coefficients, alternating bits -cpnx121 copynegate 268268268 -> -268268268 -cpnx122 copynegate -268268268 -> 268268268 -cpnx123 copynegate 134134134 -> -134134134 -cpnx124 copynegate -134134134 -> 134134134 - --- Nmax, Nmin, Ntiny -cpnx131 copynegate 9.99999999E+999 -> -9.99999999E+999 -cpnx132 copynegate 1E-999 -> -1E-999 -cpnx133 copynegate 1.00000000E-999 -> -1.00000000E-999 -cpnx134 copynegate 1E-1007 -> -1E-1007 - -cpnx135 copynegate -1E-1007 -> 1E-1007 -cpnx136 copynegate -1.00000000E-999 -> 1.00000000E-999 -cpnx137 copynegate -1E-999 -> 1E-999 -cpnx138 copynegate -9.99999999E+999 -> 9.99999999E+999 +------------------------------------------------------------------------ +-- copyNegate.decTest -- quiet copy and negate -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +cpnx001 copynegate +7.50 -> -7.50 + +-- Infinities +cpnx011 copynegate Infinity -> -Infinity +cpnx012 copynegate -Infinity -> Infinity + +-- NaNs, 0 payload +cpnx021 copynegate NaN -> -NaN +cpnx022 copynegate -NaN -> NaN +cpnx023 copynegate sNaN -> -sNaN +cpnx024 copynegate -sNaN -> sNaN + +-- NaNs, non-0 payload +cpnx031 copynegate NaN13 -> -NaN13 +cpnx032 copynegate -NaN13 -> NaN13 +cpnx033 copynegate sNaN13 -> -sNaN13 +cpnx034 copynegate -sNaN13 -> sNaN13 +cpnx035 copynegate NaN70 -> -NaN70 +cpnx036 copynegate -NaN70 -> NaN70 +cpnx037 copynegate sNaN101 -> -sNaN101 +cpnx038 copynegate -sNaN101 -> sNaN101 + +-- finites +cpnx101 copynegate 7 -> -7 +cpnx102 copynegate -7 -> 7 +cpnx103 copynegate 75 -> -75 +cpnx104 copynegate -75 -> 75 +cpnx105 copynegate 7.50 -> -7.50 +cpnx106 copynegate -7.50 -> 7.50 +cpnx107 copynegate 7.500 -> -7.500 +cpnx108 copynegate -7.500 -> 7.500 + +-- zeros +cpnx111 copynegate 0 -> -0 +cpnx112 copynegate -0 -> 0 +cpnx113 copynegate 0E+4 -> -0E+4 +cpnx114 copynegate -0E+4 -> 0E+4 +cpnx115 copynegate 0.0000 -> -0.0000 +cpnx116 copynegate -0.0000 -> 0.0000 +cpnx117 copynegate 0E-141 -> -0E-141 +cpnx118 copynegate -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +cpnx121 copynegate 268268268 -> -268268268 +cpnx122 copynegate -268268268 -> 268268268 +cpnx123 copynegate 134134134 -> -134134134 +cpnx124 copynegate -134134134 -> 134134134 + +-- Nmax, Nmin, Ntiny +cpnx131 copynegate 9.99999999E+999 -> -9.99999999E+999 +cpnx132 copynegate 1E-999 -> -1E-999 +cpnx133 copynegate 1.00000000E-999 -> -1.00000000E-999 +cpnx134 copynegate 1E-1007 -> -1E-1007 + +cpnx135 copynegate -1E-1007 -> 1E-1007 +cpnx136 copynegate -1.00000000E-999 -> 1.00000000E-999 +cpnx137 copynegate -1E-999 -> 1E-999 +cpnx138 copynegate -9.99999999E+999 -> 9.99999999E+999 diff --git a/Lib/test/decimaltestdata/copysign.decTest b/Lib/test/decimaltestdata/copysign.decTest index 8061a4219cc..afdd670d3c1 100644 --- a/Lib/test/decimaltestdata/copysign.decTest +++ b/Lib/test/decimaltestdata/copysign.decTest @@ -1,177 +1,177 @@ ------------------------------------------------------------------------- --- copysign.decTest -- quiet copy with sign from rhs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check, and examples from decArith -cpsx001 copysign +7.50 11 -> 7.50 -cpsx002 copysign '1.50' '7.33' -> 1.50 -cpsx003 copysign '-1.50' '7.33' -> 1.50 -cpsx004 copysign '1.50' '-7.33' -> -1.50 -cpsx005 copysign '-1.50' '-7.33' -> -1.50 - --- Infinities -cpsx011 copysign Infinity 11 -> Infinity -cpsx012 copysign -Infinity 11 -> Infinity - --- NaNs, 0 payload -cpsx021 copysign NaN 11 -> NaN -cpsx022 copysign -NaN 11 -> NaN -cpsx023 copysign sNaN 11 -> sNaN -cpsx024 copysign -sNaN 11 -> sNaN - --- NaNs, non-0 payload -cpsx031 copysign NaN10 11 -> NaN10 -cpsx032 copysign -NaN10 11 -> NaN10 -cpsx033 copysign sNaN10 11 -> sNaN10 -cpsx034 copysign -sNaN10 11 -> sNaN10 -cpsx035 copysign NaN7 11 -> NaN7 -cpsx036 copysign -NaN7 11 -> NaN7 -cpsx037 copysign sNaN101 11 -> sNaN101 -cpsx038 copysign -sNaN101 11 -> sNaN101 - --- finites -cpsx101 copysign 7 11 -> 7 -cpsx102 copysign -7 11 -> 7 -cpsx103 copysign 75 11 -> 75 -cpsx104 copysign -75 11 -> 75 -cpsx105 copysign 7.50 11 -> 7.50 -cpsx106 copysign -7.50 11 -> 7.50 -cpsx107 copysign 7.500 11 -> 7.500 -cpsx108 copysign -7.500 11 -> 7.500 - --- zeros -cpsx111 copysign 0 11 -> 0 -cpsx112 copysign -0 11 -> 0 -cpsx113 copysign 0E+4 11 -> 0E+4 -cpsx114 copysign -0E+4 11 -> 0E+4 -cpsx115 copysign 0.0000 11 -> 0.0000 -cpsx116 copysign -0.0000 11 -> 0.0000 -cpsx117 copysign 0E-141 11 -> 0E-141 -cpsx118 copysign -0E-141 11 -> 0E-141 - --- full coefficients, alternating bits -cpsx121 copysign 268268268 11 -> 268268268 -cpsx122 copysign -268268268 11 -> 268268268 -cpsx123 copysign 134134134 11 -> 134134134 -cpsx124 copysign -134134134 11 -> 134134134 - --- Nmax, Nmin, Ntiny -cpsx131 copysign 9.99999999E+999 11 -> 9.99999999E+999 -cpsx132 copysign 1E-999 11 -> 1E-999 -cpsx133 copysign 1.00000000E-999 11 -> 1.00000000E-999 -cpsx134 copysign 1E-1007 11 -> 1E-1007 - -cpsx135 copysign -1E-1007 11 -> 1E-1007 -cpsx136 copysign -1.00000000E-999 11 -> 1.00000000E-999 -cpsx137 copysign -1E-999 11 -> 1E-999 -cpsx138 copysign -9.99999999E+999 11 -> 9.99999999E+999 - --- repeat with negative RHS - --- Infinities -cpsx211 copysign Infinity -34 -> -Infinity -cpsx212 copysign -Infinity -34 -> -Infinity - --- NaNs, 0 payload -cpsx221 copysign NaN -34 -> -NaN -cpsx222 copysign -NaN -34 -> -NaN -cpsx223 copysign sNaN -34 -> -sNaN -cpsx224 copysign -sNaN -34 -> -sNaN - --- NaNs, non-0 payload -cpsx231 copysign NaN10 -34 -> -NaN10 -cpsx232 copysign -NaN10 -34 -> -NaN10 -cpsx233 copysign sNaN10 -34 -> -sNaN10 -cpsx234 copysign -sNaN10 -34 -> -sNaN10 -cpsx235 copysign NaN7 -34 -> -NaN7 -cpsx236 copysign -NaN7 -34 -> -NaN7 -cpsx237 copysign sNaN101 -34 -> -sNaN101 -cpsx238 copysign -sNaN101 -34 -> -sNaN101 - --- finites -cpsx301 copysign 7 -34 -> -7 -cpsx302 copysign -7 -34 -> -7 -cpsx303 copysign 75 -34 -> -75 -cpsx304 copysign -75 -34 -> -75 -cpsx305 copysign 7.50 -34 -> -7.50 -cpsx306 copysign -7.50 -34 -> -7.50 -cpsx307 copysign 7.500 -34 -> -7.500 -cpsx308 copysign -7.500 -34 -> -7.500 - --- zeros -cpsx311 copysign 0 -34 -> -0 -cpsx312 copysign -0 -34 -> -0 -cpsx313 copysign 0E+4 -34 -> -0E+4 -cpsx314 copysign -0E+4 -34 -> -0E+4 -cpsx315 copysign 0.0000 -34 -> -0.0000 -cpsx316 copysign -0.0000 -34 -> -0.0000 -cpsx317 copysign 0E-141 -34 -> -0E-141 -cpsx318 copysign -0E-141 -34 -> -0E-141 - --- full coefficients, alternating bits -cpsx321 copysign 268268268 -18 -> -268268268 -cpsx322 copysign -268268268 -18 -> -268268268 -cpsx323 copysign 134134134 -18 -> -134134134 -cpsx324 copysign -134134134 -18 -> -134134134 - --- Nmax, Nmin, Ntiny -cpsx331 copysign 9.99999999E+999 -18 -> -9.99999999E+999 -cpsx332 copysign 1E-999 -18 -> -1E-999 -cpsx333 copysign 1.00000000E-999 -18 -> -1.00000000E-999 -cpsx334 copysign 1E-1007 -18 -> -1E-1007 - -cpsx335 copysign -1E-1007 -18 -> -1E-1007 -cpsx336 copysign -1.00000000E-999 -18 -> -1.00000000E-999 -cpsx337 copysign -1E-999 -18 -> -1E-999 -cpsx338 copysign -9.99999999E+999 -18 -> -9.99999999E+999 - --- Other kinds of RHS -cpsx401 copysign 701 -34 -> -701 -cpsx402 copysign -720 -34 -> -720 -cpsx403 copysign 701 -0 -> -701 -cpsx404 copysign -720 -0 -> -720 -cpsx405 copysign 701 +0 -> 701 -cpsx406 copysign -720 +0 -> 720 -cpsx407 copysign 701 +34 -> 701 -cpsx408 copysign -720 +34 -> 720 - -cpsx413 copysign 701 -Inf -> -701 -cpsx414 copysign -720 -Inf -> -720 -cpsx415 copysign 701 +Inf -> 701 -cpsx416 copysign -720 +Inf -> 720 - -cpsx420 copysign 701 -NaN -> -701 -cpsx421 copysign -720 -NaN -> -720 -cpsx422 copysign 701 +NaN -> 701 -cpsx423 copysign -720 +NaN -> 720 -cpsx425 copysign -720 +NaN8 -> 720 - -cpsx426 copysign 701 -sNaN -> -701 -cpsx427 copysign -720 -sNaN -> -720 -cpsx428 copysign 701 +sNaN -> 701 -cpsx429 copysign -720 +sNaN -> 720 -cpsx430 copysign -720 +sNaN3 -> 720 - +------------------------------------------------------------------------ +-- copysign.decTest -- quiet copy with sign from rhs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check, and examples from decArith +cpsx001 copysign +7.50 11 -> 7.50 +cpsx002 copysign '1.50' '7.33' -> 1.50 +cpsx003 copysign '-1.50' '7.33' -> 1.50 +cpsx004 copysign '1.50' '-7.33' -> -1.50 +cpsx005 copysign '-1.50' '-7.33' -> -1.50 + +-- Infinities +cpsx011 copysign Infinity 11 -> Infinity +cpsx012 copysign -Infinity 11 -> Infinity + +-- NaNs, 0 payload +cpsx021 copysign NaN 11 -> NaN +cpsx022 copysign -NaN 11 -> NaN +cpsx023 copysign sNaN 11 -> sNaN +cpsx024 copysign -sNaN 11 -> sNaN + +-- NaNs, non-0 payload +cpsx031 copysign NaN10 11 -> NaN10 +cpsx032 copysign -NaN10 11 -> NaN10 +cpsx033 copysign sNaN10 11 -> sNaN10 +cpsx034 copysign -sNaN10 11 -> sNaN10 +cpsx035 copysign NaN7 11 -> NaN7 +cpsx036 copysign -NaN7 11 -> NaN7 +cpsx037 copysign sNaN101 11 -> sNaN101 +cpsx038 copysign -sNaN101 11 -> sNaN101 + +-- finites +cpsx101 copysign 7 11 -> 7 +cpsx102 copysign -7 11 -> 7 +cpsx103 copysign 75 11 -> 75 +cpsx104 copysign -75 11 -> 75 +cpsx105 copysign 7.50 11 -> 7.50 +cpsx106 copysign -7.50 11 -> 7.50 +cpsx107 copysign 7.500 11 -> 7.500 +cpsx108 copysign -7.500 11 -> 7.500 + +-- zeros +cpsx111 copysign 0 11 -> 0 +cpsx112 copysign -0 11 -> 0 +cpsx113 copysign 0E+4 11 -> 0E+4 +cpsx114 copysign -0E+4 11 -> 0E+4 +cpsx115 copysign 0.0000 11 -> 0.0000 +cpsx116 copysign -0.0000 11 -> 0.0000 +cpsx117 copysign 0E-141 11 -> 0E-141 +cpsx118 copysign -0E-141 11 -> 0E-141 + +-- full coefficients, alternating bits +cpsx121 copysign 268268268 11 -> 268268268 +cpsx122 copysign -268268268 11 -> 268268268 +cpsx123 copysign 134134134 11 -> 134134134 +cpsx124 copysign -134134134 11 -> 134134134 + +-- Nmax, Nmin, Ntiny +cpsx131 copysign 9.99999999E+999 11 -> 9.99999999E+999 +cpsx132 copysign 1E-999 11 -> 1E-999 +cpsx133 copysign 1.00000000E-999 11 -> 1.00000000E-999 +cpsx134 copysign 1E-1007 11 -> 1E-1007 + +cpsx135 copysign -1E-1007 11 -> 1E-1007 +cpsx136 copysign -1.00000000E-999 11 -> 1.00000000E-999 +cpsx137 copysign -1E-999 11 -> 1E-999 +cpsx138 copysign -9.99999999E+999 11 -> 9.99999999E+999 + +-- repeat with negative RHS + +-- Infinities +cpsx211 copysign Infinity -34 -> -Infinity +cpsx212 copysign -Infinity -34 -> -Infinity + +-- NaNs, 0 payload +cpsx221 copysign NaN -34 -> -NaN +cpsx222 copysign -NaN -34 -> -NaN +cpsx223 copysign sNaN -34 -> -sNaN +cpsx224 copysign -sNaN -34 -> -sNaN + +-- NaNs, non-0 payload +cpsx231 copysign NaN10 -34 -> -NaN10 +cpsx232 copysign -NaN10 -34 -> -NaN10 +cpsx233 copysign sNaN10 -34 -> -sNaN10 +cpsx234 copysign -sNaN10 -34 -> -sNaN10 +cpsx235 copysign NaN7 -34 -> -NaN7 +cpsx236 copysign -NaN7 -34 -> -NaN7 +cpsx237 copysign sNaN101 -34 -> -sNaN101 +cpsx238 copysign -sNaN101 -34 -> -sNaN101 + +-- finites +cpsx301 copysign 7 -34 -> -7 +cpsx302 copysign -7 -34 -> -7 +cpsx303 copysign 75 -34 -> -75 +cpsx304 copysign -75 -34 -> -75 +cpsx305 copysign 7.50 -34 -> -7.50 +cpsx306 copysign -7.50 -34 -> -7.50 +cpsx307 copysign 7.500 -34 -> -7.500 +cpsx308 copysign -7.500 -34 -> -7.500 + +-- zeros +cpsx311 copysign 0 -34 -> -0 +cpsx312 copysign -0 -34 -> -0 +cpsx313 copysign 0E+4 -34 -> -0E+4 +cpsx314 copysign -0E+4 -34 -> -0E+4 +cpsx315 copysign 0.0000 -34 -> -0.0000 +cpsx316 copysign -0.0000 -34 -> -0.0000 +cpsx317 copysign 0E-141 -34 -> -0E-141 +cpsx318 copysign -0E-141 -34 -> -0E-141 + +-- full coefficients, alternating bits +cpsx321 copysign 268268268 -18 -> -268268268 +cpsx322 copysign -268268268 -18 -> -268268268 +cpsx323 copysign 134134134 -18 -> -134134134 +cpsx324 copysign -134134134 -18 -> -134134134 + +-- Nmax, Nmin, Ntiny +cpsx331 copysign 9.99999999E+999 -18 -> -9.99999999E+999 +cpsx332 copysign 1E-999 -18 -> -1E-999 +cpsx333 copysign 1.00000000E-999 -18 -> -1.00000000E-999 +cpsx334 copysign 1E-1007 -18 -> -1E-1007 + +cpsx335 copysign -1E-1007 -18 -> -1E-1007 +cpsx336 copysign -1.00000000E-999 -18 -> -1.00000000E-999 +cpsx337 copysign -1E-999 -18 -> -1E-999 +cpsx338 copysign -9.99999999E+999 -18 -> -9.99999999E+999 + +-- Other kinds of RHS +cpsx401 copysign 701 -34 -> -701 +cpsx402 copysign -720 -34 -> -720 +cpsx403 copysign 701 -0 -> -701 +cpsx404 copysign -720 -0 -> -720 +cpsx405 copysign 701 +0 -> 701 +cpsx406 copysign -720 +0 -> 720 +cpsx407 copysign 701 +34 -> 701 +cpsx408 copysign -720 +34 -> 720 + +cpsx413 copysign 701 -Inf -> -701 +cpsx414 copysign -720 -Inf -> -720 +cpsx415 copysign 701 +Inf -> 701 +cpsx416 copysign -720 +Inf -> 720 + +cpsx420 copysign 701 -NaN -> -701 +cpsx421 copysign -720 -NaN -> -720 +cpsx422 copysign 701 +NaN -> 701 +cpsx423 copysign -720 +NaN -> 720 +cpsx425 copysign -720 +NaN8 -> 720 + +cpsx426 copysign 701 -sNaN -> -701 +cpsx427 copysign -720 -sNaN -> -720 +cpsx428 copysign 701 +sNaN -> 701 +cpsx429 copysign -720 +sNaN -> 720 +cpsx430 copysign -720 +sNaN3 -> 720 + diff --git a/Lib/test/decimaltestdata/ddAbs.decTest b/Lib/test/decimaltestdata/ddAbs.decTest index c6f5a7cda39..b98d64a11aa 100644 --- a/Lib/test/decimaltestdata/ddAbs.decTest +++ b/Lib/test/decimaltestdata/ddAbs.decTest @@ -1,126 +1,126 @@ ------------------------------------------------------------------------- --- ddAbs.decTest -- decDouble absolute value, heeding sNaN -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddabs001 abs '1' -> '1' -ddabs002 abs '-1' -> '1' -ddabs003 abs '1.00' -> '1.00' -ddabs004 abs '-1.00' -> '1.00' -ddabs005 abs '0' -> '0' -ddabs006 abs '0.00' -> '0.00' -ddabs007 abs '00.0' -> '0.0' -ddabs008 abs '00.00' -> '0.00' -ddabs009 abs '00' -> '0' - -ddabs010 abs '-2' -> '2' -ddabs011 abs '2' -> '2' -ddabs012 abs '-2.00' -> '2.00' -ddabs013 abs '2.00' -> '2.00' -ddabs014 abs '-0' -> '0' -ddabs015 abs '-0.00' -> '0.00' -ddabs016 abs '-00.0' -> '0.0' -ddabs017 abs '-00.00' -> '0.00' -ddabs018 abs '-00' -> '0' - -ddabs020 abs '-2000000' -> '2000000' -ddabs021 abs '2000000' -> '2000000' - -ddabs030 abs '+0.1' -> '0.1' -ddabs031 abs '-0.1' -> '0.1' -ddabs032 abs '+0.01' -> '0.01' -ddabs033 abs '-0.01' -> '0.01' -ddabs034 abs '+0.001' -> '0.001' -ddabs035 abs '-0.001' -> '0.001' -ddabs036 abs '+0.000001' -> '0.000001' -ddabs037 abs '-0.000001' -> '0.000001' -ddabs038 abs '+0.000000000001' -> '1E-12' -ddabs039 abs '-0.000000000001' -> '1E-12' - --- examples from decArith -ddabs040 abs '2.1' -> '2.1' -ddabs041 abs '-100' -> '100' -ddabs042 abs '101.5' -> '101.5' -ddabs043 abs '-101.5' -> '101.5' - --- more fixed, potential LHS swaps/overlays if done by subtract 0 -ddabs060 abs '-56267E-10' -> '0.0000056267' -ddabs061 abs '-56267E-5' -> '0.56267' -ddabs062 abs '-56267E-2' -> '562.67' -ddabs063 abs '-56267E-1' -> '5626.7' -ddabs065 abs '-56267E-0' -> '56267' - --- subnormals and underflow - --- long operand tests -ddabs321 abs 1234567890123456 -> 1234567890123456 -ddabs322 abs 12345678000 -> 12345678000 -ddabs323 abs 1234567800 -> 1234567800 -ddabs324 abs 1234567890 -> 1234567890 -ddabs325 abs 1234567891 -> 1234567891 -ddabs326 abs 12345678901 -> 12345678901 -ddabs327 abs 1234567896 -> 1234567896 - --- zeros -ddabs111 abs 0 -> 0 -ddabs112 abs -0 -> 0 -ddabs113 abs 0E+6 -> 0E+6 -ddabs114 abs -0E+6 -> 0E+6 -ddabs115 abs 0.0000 -> 0.0000 -ddabs116 abs -0.0000 -> 0.0000 -ddabs117 abs 0E-141 -> 0E-141 -ddabs118 abs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddabs121 abs 2682682682682682 -> 2682682682682682 -ddabs122 abs -2682682682682682 -> 2682682682682682 -ddabs123 abs 1341341341341341 -> 1341341341341341 -ddabs124 abs -1341341341341341 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddabs131 abs 9.999999999999999E+384 -> 9.999999999999999E+384 -ddabs132 abs 1E-383 -> 1E-383 -ddabs133 abs 1.000000000000000E-383 -> 1.000000000000000E-383 -ddabs134 abs 1E-398 -> 1E-398 Subnormal - -ddabs135 abs -1E-398 -> 1E-398 Subnormal -ddabs136 abs -1.000000000000000E-383 -> 1.000000000000000E-383 -ddabs137 abs -1E-383 -> 1E-383 -ddabs138 abs -9.999999999999999E+384 -> 9.999999999999999E+384 - --- specials -ddabs520 abs 'Inf' -> 'Infinity' -ddabs521 abs '-Inf' -> 'Infinity' -ddabs522 abs NaN -> NaN -ddabs523 abs sNaN -> NaN Invalid_operation -ddabs524 abs NaN22 -> NaN22 -ddabs525 abs sNaN33 -> NaN33 Invalid_operation -ddabs526 abs -NaN22 -> -NaN22 -ddabs527 abs -sNaN33 -> -NaN33 Invalid_operation - --- Null tests -ddabs900 abs # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddAbs.decTest -- decDouble absolute value, heeding sNaN -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddabs001 abs '1' -> '1' +ddabs002 abs '-1' -> '1' +ddabs003 abs '1.00' -> '1.00' +ddabs004 abs '-1.00' -> '1.00' +ddabs005 abs '0' -> '0' +ddabs006 abs '0.00' -> '0.00' +ddabs007 abs '00.0' -> '0.0' +ddabs008 abs '00.00' -> '0.00' +ddabs009 abs '00' -> '0' + +ddabs010 abs '-2' -> '2' +ddabs011 abs '2' -> '2' +ddabs012 abs '-2.00' -> '2.00' +ddabs013 abs '2.00' -> '2.00' +ddabs014 abs '-0' -> '0' +ddabs015 abs '-0.00' -> '0.00' +ddabs016 abs '-00.0' -> '0.0' +ddabs017 abs '-00.00' -> '0.00' +ddabs018 abs '-00' -> '0' + +ddabs020 abs '-2000000' -> '2000000' +ddabs021 abs '2000000' -> '2000000' + +ddabs030 abs '+0.1' -> '0.1' +ddabs031 abs '-0.1' -> '0.1' +ddabs032 abs '+0.01' -> '0.01' +ddabs033 abs '-0.01' -> '0.01' +ddabs034 abs '+0.001' -> '0.001' +ddabs035 abs '-0.001' -> '0.001' +ddabs036 abs '+0.000001' -> '0.000001' +ddabs037 abs '-0.000001' -> '0.000001' +ddabs038 abs '+0.000000000001' -> '1E-12' +ddabs039 abs '-0.000000000001' -> '1E-12' + +-- examples from decArith +ddabs040 abs '2.1' -> '2.1' +ddabs041 abs '-100' -> '100' +ddabs042 abs '101.5' -> '101.5' +ddabs043 abs '-101.5' -> '101.5' + +-- more fixed, potential LHS swaps/overlays if done by subtract 0 +ddabs060 abs '-56267E-10' -> '0.0000056267' +ddabs061 abs '-56267E-5' -> '0.56267' +ddabs062 abs '-56267E-2' -> '562.67' +ddabs063 abs '-56267E-1' -> '5626.7' +ddabs065 abs '-56267E-0' -> '56267' + +-- subnormals and underflow + +-- long operand tests +ddabs321 abs 1234567890123456 -> 1234567890123456 +ddabs322 abs 12345678000 -> 12345678000 +ddabs323 abs 1234567800 -> 1234567800 +ddabs324 abs 1234567890 -> 1234567890 +ddabs325 abs 1234567891 -> 1234567891 +ddabs326 abs 12345678901 -> 12345678901 +ddabs327 abs 1234567896 -> 1234567896 + +-- zeros +ddabs111 abs 0 -> 0 +ddabs112 abs -0 -> 0 +ddabs113 abs 0E+6 -> 0E+6 +ddabs114 abs -0E+6 -> 0E+6 +ddabs115 abs 0.0000 -> 0.0000 +ddabs116 abs -0.0000 -> 0.0000 +ddabs117 abs 0E-141 -> 0E-141 +ddabs118 abs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddabs121 abs 2682682682682682 -> 2682682682682682 +ddabs122 abs -2682682682682682 -> 2682682682682682 +ddabs123 abs 1341341341341341 -> 1341341341341341 +ddabs124 abs -1341341341341341 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddabs131 abs 9.999999999999999E+384 -> 9.999999999999999E+384 +ddabs132 abs 1E-383 -> 1E-383 +ddabs133 abs 1.000000000000000E-383 -> 1.000000000000000E-383 +ddabs134 abs 1E-398 -> 1E-398 Subnormal + +ddabs135 abs -1E-398 -> 1E-398 Subnormal +ddabs136 abs -1.000000000000000E-383 -> 1.000000000000000E-383 +ddabs137 abs -1E-383 -> 1E-383 +ddabs138 abs -9.999999999999999E+384 -> 9.999999999999999E+384 + +-- specials +ddabs520 abs 'Inf' -> 'Infinity' +ddabs521 abs '-Inf' -> 'Infinity' +ddabs522 abs NaN -> NaN +ddabs523 abs sNaN -> NaN Invalid_operation +ddabs524 abs NaN22 -> NaN22 +ddabs525 abs sNaN33 -> NaN33 Invalid_operation +ddabs526 abs -NaN22 -> -NaN22 +ddabs527 abs -sNaN33 -> -NaN33 Invalid_operation + +-- Null tests +ddabs900 abs # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddAdd.decTest b/Lib/test/decimaltestdata/ddAdd.decTest index c0a25b34130..0f12ce44459 100644 --- a/Lib/test/decimaltestdata/ddAdd.decTest +++ b/Lib/test/decimaltestdata/ddAdd.decTest @@ -1,1328 +1,1328 @@ ------------------------------------------------------------------------- --- ddAdd.decTest -- decDouble addition -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decDoubles only; all arguments are --- representable in a decDouble -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- [first group are 'quick confidence check'] -ddadd001 add 1 1 -> 2 -ddadd002 add 2 3 -> 5 -ddadd003 add '5.75' '3.3' -> 9.05 -ddadd004 add '5' '-3' -> 2 -ddadd005 add '-5' '-3' -> -8 -ddadd006 add '-7' '2.5' -> -4.5 -ddadd007 add '0.7' '0.3' -> 1.0 -ddadd008 add '1.25' '1.25' -> 2.50 -ddadd009 add '1.23456789' '1.00000000' -> '2.23456789' -ddadd010 add '1.23456789' '1.00000011' -> '2.23456800' - --- 1234567890123456 1234567890123456 -ddadd011 add '0.4444444444444446' '0.5555555555555555' -> '1.000000000000000' Inexact Rounded -ddadd012 add '0.4444444444444445' '0.5555555555555555' -> '1.000000000000000' Rounded -ddadd013 add '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' -ddadd014 add '4444444444444444' '0.49' -> '4444444444444444' Inexact Rounded -ddadd015 add '4444444444444444' '0.499' -> '4444444444444444' Inexact Rounded -ddadd016 add '4444444444444444' '0.4999' -> '4444444444444444' Inexact Rounded -ddadd017 add '4444444444444444' '0.5000' -> '4444444444444444' Inexact Rounded -ddadd018 add '4444444444444444' '0.5001' -> '4444444444444445' Inexact Rounded -ddadd019 add '4444444444444444' '0.501' -> '4444444444444445' Inexact Rounded -ddadd020 add '4444444444444444' '0.51' -> '4444444444444445' Inexact Rounded - -ddadd021 add 0 1 -> 1 -ddadd022 add 1 1 -> 2 -ddadd023 add 2 1 -> 3 -ddadd024 add 3 1 -> 4 -ddadd025 add 4 1 -> 5 -ddadd026 add 5 1 -> 6 -ddadd027 add 6 1 -> 7 -ddadd028 add 7 1 -> 8 -ddadd029 add 8 1 -> 9 -ddadd030 add 9 1 -> 10 - --- some carrying effects -ddadd031 add '0.9998' '0.0000' -> '0.9998' -ddadd032 add '0.9998' '0.0001' -> '0.9999' -ddadd033 add '0.9998' '0.0002' -> '1.0000' -ddadd034 add '0.9998' '0.0003' -> '1.0001' - -ddadd035 add '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddadd036 add '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddadd037 add '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddadd038 add '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded -ddadd039 add '700000' '10000e+16' -> '1.000000000000007E+20' Rounded - --- symmetry: -ddadd040 add '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded -ddadd041 add '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded -ddadd042 add '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded -ddadd044 add '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded -ddadd045 add '10000e+16' '700000' -> '1.000000000000007E+20' Rounded - --- same, without rounding -ddadd046 add '10000e+9' '7' -> '10000000000007' -ddadd047 add '10000e+9' '70' -> '10000000000070' -ddadd048 add '10000e+9' '700' -> '10000000000700' -ddadd049 add '10000e+9' '7000' -> '10000000007000' -ddadd050 add '10000e+9' '70000' -> '10000000070000' -ddadd051 add '10000e+9' '700000' -> '10000000700000' -ddadd052 add '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -ddadd053 add '12' '7.00' -> '19.00' -ddadd054 add '1.3' '-1.07' -> '0.23' -ddadd055 add '1.3' '-1.30' -> '0.00' -ddadd056 add '1.3' '-2.07' -> '-0.77' -ddadd057 add '1E+2' '1E+4' -> '1.01E+4' - --- leading zero preservation -ddadd061 add 1 '0.0001' -> '1.0001' -ddadd062 add 1 '0.00001' -> '1.00001' -ddadd063 add 1 '0.000001' -> '1.000001' -ddadd064 add 1 '0.0000001' -> '1.0000001' -ddadd065 add 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -ddadd070 add 1 0 -> 1 -ddadd071 add 1 0. -> 1 -ddadd072 add 1 .0 -> 1.0 -ddadd073 add 1 0.0 -> 1.0 -ddadd074 add 1 0.00 -> 1.00 -ddadd075 add 0 1 -> 1 -ddadd076 add 0. 1 -> 1 -ddadd077 add .0 1 -> 1.0 -ddadd078 add 0.0 1 -> 1.0 -ddadd079 add 0.00 1 -> 1.00 - --- some carries -ddadd080 add 999999998 1 -> 999999999 -ddadd081 add 999999999 1 -> 1000000000 -ddadd082 add 99999999 1 -> 100000000 -ddadd083 add 9999999 1 -> 10000000 -ddadd084 add 999999 1 -> 1000000 -ddadd085 add 99999 1 -> 100000 -ddadd086 add 9999 1 -> 10000 -ddadd087 add 999 1 -> 1000 -ddadd088 add 99 1 -> 100 -ddadd089 add 9 1 -> 10 - - --- more LHS swaps -ddadd090 add '-56267E-10' 0 -> '-0.0000056267' -ddadd091 add '-56267E-6' 0 -> '-0.056267' -ddadd092 add '-56267E-5' 0 -> '-0.56267' -ddadd093 add '-56267E-4' 0 -> '-5.6267' -ddadd094 add '-56267E-3' 0 -> '-56.267' -ddadd095 add '-56267E-2' 0 -> '-562.67' -ddadd096 add '-56267E-1' 0 -> '-5626.7' -ddadd097 add '-56267E-0' 0 -> '-56267' -ddadd098 add '-5E-10' 0 -> '-5E-10' -ddadd099 add '-5E-7' 0 -> '-5E-7' -ddadd100 add '-5E-6' 0 -> '-0.000005' -ddadd101 add '-5E-5' 0 -> '-0.00005' -ddadd102 add '-5E-4' 0 -> '-0.0005' -ddadd103 add '-5E-1' 0 -> '-0.5' -ddadd104 add '-5E0' 0 -> '-5' -ddadd105 add '-5E1' 0 -> '-50' -ddadd106 add '-5E5' 0 -> '-500000' -ddadd107 add '-5E15' 0 -> '-5000000000000000' -ddadd108 add '-5E16' 0 -> '-5.000000000000000E+16' Rounded -ddadd109 add '-5E17' 0 -> '-5.000000000000000E+17' Rounded -ddadd110 add '-5E18' 0 -> '-5.000000000000000E+18' Rounded -ddadd111 add '-5E100' 0 -> '-5.000000000000000E+100' Rounded - --- more RHS swaps -ddadd113 add 0 '-56267E-10' -> '-0.0000056267' -ddadd114 add 0 '-56267E-6' -> '-0.056267' -ddadd116 add 0 '-56267E-5' -> '-0.56267' -ddadd117 add 0 '-56267E-4' -> '-5.6267' -ddadd119 add 0 '-56267E-3' -> '-56.267' -ddadd120 add 0 '-56267E-2' -> '-562.67' -ddadd121 add 0 '-56267E-1' -> '-5626.7' -ddadd122 add 0 '-56267E-0' -> '-56267' -ddadd123 add 0 '-5E-10' -> '-5E-10' -ddadd124 add 0 '-5E-7' -> '-5E-7' -ddadd125 add 0 '-5E-6' -> '-0.000005' -ddadd126 add 0 '-5E-5' -> '-0.00005' -ddadd127 add 0 '-5E-4' -> '-0.0005' -ddadd128 add 0 '-5E-1' -> '-0.5' -ddadd129 add 0 '-5E0' -> '-5' -ddadd130 add 0 '-5E1' -> '-50' -ddadd131 add 0 '-5E5' -> '-500000' -ddadd132 add 0 '-5E15' -> '-5000000000000000' -ddadd133 add 0 '-5E16' -> '-5.000000000000000E+16' Rounded -ddadd134 add 0 '-5E17' -> '-5.000000000000000E+17' Rounded -ddadd135 add 0 '-5E18' -> '-5.000000000000000E+18' Rounded -ddadd136 add 0 '-5E100' -> '-5.000000000000000E+100' Rounded - --- related -ddadd137 add 1 '0E-19' -> '1.000000000000000' Rounded -ddadd138 add -1 '0E-19' -> '-1.000000000000000' Rounded -ddadd139 add '0E-19' 1 -> '1.000000000000000' Rounded -ddadd140 add '0E-19' -1 -> '-1.000000000000000' Rounded -ddadd141 add 1E+11 0.0000 -> '100000000000.0000' -ddadd142 add 1E+11 0.00000 -> '100000000000.0000' Rounded -ddadd143 add 0.000 1E+12 -> '1000000000000.000' -ddadd144 add 0.0000 1E+12 -> '1000000000000.000' Rounded - --- [some of the next group are really constructor tests] -ddadd146 add '00.0' 0 -> '0.0' -ddadd147 add '0.00' 0 -> '0.00' -ddadd148 add 0 '0.00' -> '0.00' -ddadd149 add 0 '00.0' -> '0.0' -ddadd150 add '00.0' '0.00' -> '0.00' -ddadd151 add '0.00' '00.0' -> '0.00' -ddadd152 add '3' '.3' -> '3.3' -ddadd153 add '3.' '.3' -> '3.3' -ddadd154 add '3.0' '.3' -> '3.3' -ddadd155 add '3.00' '.3' -> '3.30' -ddadd156 add '3' '3' -> '6' -ddadd157 add '3' '+3' -> '6' -ddadd158 add '3' '-3' -> '0' -ddadd159 add '0.3' '-0.3' -> '0.0' -ddadd160 add '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -ddadd161 add '1E+12' '-1' -> '999999999999' -ddadd162 add '1E+12' '1.11' -> '1000000000001.11' -ddadd163 add '1.11' '1E+12' -> '1000000000001.11' -ddadd164 add '-1' '1E+12' -> '999999999999' -ddadd165 add '7E+12' '-1' -> '6999999999999' -ddadd166 add '7E+12' '1.11' -> '7000000000001.11' -ddadd167 add '1.11' '7E+12' -> '7000000000001.11' -ddadd168 add '-1' '7E+12' -> '6999999999999' - -rounding: half_up --- 1.234567890123456 1234567890123456 1 234567890123456 -ddadd170 add '4.444444444444444' '0.5555555555555567' -> '5.000000000000001' Inexact Rounded -ddadd171 add '4.444444444444444' '0.5555555555555566' -> '5.000000000000001' Inexact Rounded -ddadd172 add '4.444444444444444' '0.5555555555555565' -> '5.000000000000001' Inexact Rounded -ddadd173 add '4.444444444444444' '0.5555555555555564' -> '5.000000000000000' Inexact Rounded -ddadd174 add '4.444444444444444' '0.5555555555555553' -> '4.999999999999999' Inexact Rounded -ddadd175 add '4.444444444444444' '0.5555555555555552' -> '4.999999999999999' Inexact Rounded -ddadd176 add '4.444444444444444' '0.5555555555555551' -> '4.999999999999999' Inexact Rounded -ddadd177 add '4.444444444444444' '0.5555555555555550' -> '4.999999999999999' Rounded -ddadd178 add '4.444444444444444' '0.5555555555555545' -> '4.999999999999999' Inexact Rounded -ddadd179 add '4.444444444444444' '0.5555555555555544' -> '4.999999999999998' Inexact Rounded -ddadd180 add '4.444444444444444' '0.5555555555555543' -> '4.999999999999998' Inexact Rounded -ddadd181 add '4.444444444444444' '0.5555555555555542' -> '4.999999999999998' Inexact Rounded -ddadd182 add '4.444444444444444' '0.5555555555555541' -> '4.999999999999998' Inexact Rounded -ddadd183 add '4.444444444444444' '0.5555555555555540' -> '4.999999999999998' Rounded - --- and some more, including residue effects and different roundings -rounding: half_up -ddadd200 add '1234560123456789' 0 -> '1234560123456789' -ddadd201 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddadd202 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddadd203 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddadd204 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddadd205 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddadd206 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddadd207 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddadd208 add '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded -ddadd209 add '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded -ddadd210 add '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded -ddadd211 add '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded -ddadd212 add '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded -ddadd213 add '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded -ddadd214 add '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded -ddadd215 add '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded -ddadd216 add '1234560123456789' 1 -> '1234560123456790' -ddadd217 add '1234560123456789' 1.000000001 -> '1234560123456790' Inexact Rounded -ddadd218 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddadd219 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded - -rounding: half_even -ddadd220 add '1234560123456789' 0 -> '1234560123456789' -ddadd221 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddadd222 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddadd223 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddadd224 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddadd225 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddadd226 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddadd227 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddadd228 add '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded -ddadd229 add '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded -ddadd230 add '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded -ddadd231 add '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded -ddadd232 add '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded -ddadd233 add '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded -ddadd234 add '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded -ddadd235 add '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded -ddadd236 add '1234560123456789' 1 -> '1234560123456790' -ddadd237 add '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded -ddadd238 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddadd239 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded --- critical few with even bottom digit... -ddadd240 add '1234560123456788' 0.499999999 -> '1234560123456788' Inexact Rounded -ddadd241 add '1234560123456788' 0.5 -> '1234560123456788' Inexact Rounded -ddadd242 add '1234560123456788' 0.500000001 -> '1234560123456789' Inexact Rounded - -rounding: down -ddadd250 add '1234560123456789' 0 -> '1234560123456789' -ddadd251 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddadd252 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddadd253 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddadd254 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddadd255 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddadd256 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddadd257 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddadd258 add '1234560123456789' 0.5 -> '1234560123456789' Inexact Rounded -ddadd259 add '1234560123456789' 0.500000001 -> '1234560123456789' Inexact Rounded -ddadd260 add '1234560123456789' 0.500001 -> '1234560123456789' Inexact Rounded -ddadd261 add '1234560123456789' 0.51 -> '1234560123456789' Inexact Rounded -ddadd262 add '1234560123456789' 0.6 -> '1234560123456789' Inexact Rounded -ddadd263 add '1234560123456789' 0.9 -> '1234560123456789' Inexact Rounded -ddadd264 add '1234560123456789' 0.99999 -> '1234560123456789' Inexact Rounded -ddadd265 add '1234560123456789' 0.999999999 -> '1234560123456789' Inexact Rounded -ddadd266 add '1234560123456789' 1 -> '1234560123456790' -ddadd267 add '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded -ddadd268 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddadd269 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_up -ddadd301 add -1 1 -> 0 -ddadd302 add 0 1 -> 1 -ddadd303 add 1 1 -> 2 -ddadd304 add 12 1 -> 13 -ddadd305 add 98 1 -> 99 -ddadd306 add 99 1 -> 100 -ddadd307 add 100 1 -> 101 -ddadd308 add 101 1 -> 102 -ddadd309 add -1 -1 -> -2 -ddadd310 add 0 -1 -> -1 -ddadd311 add 1 -1 -> 0 -ddadd312 add 12 -1 -> 11 -ddadd313 add 98 -1 -> 97 -ddadd314 add 99 -1 -> 98 -ddadd315 add 100 -1 -> 99 -ddadd316 add 101 -1 -> 100 - -ddadd321 add -0.01 0.01 -> 0.00 -ddadd322 add 0.00 0.01 -> 0.01 -ddadd323 add 0.01 0.01 -> 0.02 -ddadd324 add 0.12 0.01 -> 0.13 -ddadd325 add 0.98 0.01 -> 0.99 -ddadd326 add 0.99 0.01 -> 1.00 -ddadd327 add 1.00 0.01 -> 1.01 -ddadd328 add 1.01 0.01 -> 1.02 -ddadd329 add -0.01 -0.01 -> -0.02 -ddadd330 add 0.00 -0.01 -> -0.01 -ddadd331 add 0.01 -0.01 -> 0.00 -ddadd332 add 0.12 -0.01 -> 0.11 -ddadd333 add 0.98 -0.01 -> 0.97 -ddadd334 add 0.99 -0.01 -> 0.98 -ddadd335 add 1.00 -0.01 -> 0.99 -ddadd336 add 1.01 -0.01 -> 1.00 - --- some more cases where adding 0 affects the coefficient -ddadd340 add 1E+3 0 -> 1000 -ddadd341 add 1E+15 0 -> 1000000000000000 -ddadd342 add 1E+16 0 -> 1.000000000000000E+16 Rounded -ddadd343 add 1E+20 0 -> 1.000000000000000E+20 Rounded --- which simply follow from these cases ... -ddadd344 add 1E+3 1 -> 1001 -ddadd345 add 1E+15 1 -> 1000000000000001 -ddadd346 add 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded -ddadd347 add 1E+20 1 -> 1.000000000000000E+20 Inexact Rounded -ddadd348 add 1E+3 7 -> 1007 -ddadd349 add 1E+15 7 -> 1000000000000007 -ddadd350 add 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded -ddadd351 add 1E+20 7 -> 1.000000000000000E+20 Inexact Rounded - --- tryzeros cases -rounding: half_up -ddadd360 add 0E+50 10000E+1 -> 1.0000E+5 -ddadd361 add 0E-50 10000E+1 -> 100000.0000000000 Rounded -ddadd362 add 10000E+1 0E-50 -> 100000.0000000000 Rounded -ddadd363 add 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact -ddadd364 add 9.999999999999999E+384 -9.999999999999999E+384 -> 0E+369 - --- a curiosity from JSR 13 testing -rounding: half_down -ddadd370 add 999999999999999 815 -> 1000000000000814 -ddadd371 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact -rounding: half_up -ddadd372 add 999999999999999 815 -> 1000000000000814 -ddadd373 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact -rounding: half_even -ddadd374 add 999999999999999 815 -> 1000000000000814 -ddadd375 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact - --- operands folded -ddadd380 add 1E+384 1E+384 -> 2.000000000000000E+384 Clamped -ddadd381 add 1E+380 1E+380 -> 2.00000000000E+380 Clamped -ddadd382 add 1E+376 1E+376 -> 2.0000000E+376 Clamped -ddadd383 add 1E+372 1E+372 -> 2.000E+372 Clamped -ddadd384 add 1E+370 1E+370 -> 2.0E+370 Clamped -ddadd385 add 1E+369 1E+369 -> 2E+369 -ddadd386 add 1E+368 1E+368 -> 2E+368 - --- ulp replacement tests -ddadd400 add 1 77e-14 -> 1.00000000000077 -ddadd401 add 1 77e-15 -> 1.000000000000077 -ddadd402 add 1 77e-16 -> 1.000000000000008 Inexact Rounded -ddadd403 add 1 77e-17 -> 1.000000000000001 Inexact Rounded -ddadd404 add 1 77e-18 -> 1.000000000000000 Inexact Rounded -ddadd405 add 1 77e-19 -> 1.000000000000000 Inexact Rounded -ddadd406 add 1 77e-299 -> 1.000000000000000 Inexact Rounded - -ddadd410 add 10 77e-14 -> 10.00000000000077 -ddadd411 add 10 77e-15 -> 10.00000000000008 Inexact Rounded -ddadd412 add 10 77e-16 -> 10.00000000000001 Inexact Rounded -ddadd413 add 10 77e-17 -> 10.00000000000000 Inexact Rounded -ddadd414 add 10 77e-18 -> 10.00000000000000 Inexact Rounded -ddadd415 add 10 77e-19 -> 10.00000000000000 Inexact Rounded -ddadd416 add 10 77e-299 -> 10.00000000000000 Inexact Rounded - -ddadd420 add 77e-14 1 -> 1.00000000000077 -ddadd421 add 77e-15 1 -> 1.000000000000077 -ddadd422 add 77e-16 1 -> 1.000000000000008 Inexact Rounded -ddadd423 add 77e-17 1 -> 1.000000000000001 Inexact Rounded -ddadd424 add 77e-18 1 -> 1.000000000000000 Inexact Rounded -ddadd425 add 77e-19 1 -> 1.000000000000000 Inexact Rounded -ddadd426 add 77e-299 1 -> 1.000000000000000 Inexact Rounded - -ddadd430 add 77e-14 10 -> 10.00000000000077 -ddadd431 add 77e-15 10 -> 10.00000000000008 Inexact Rounded -ddadd432 add 77e-16 10 -> 10.00000000000001 Inexact Rounded -ddadd433 add 77e-17 10 -> 10.00000000000000 Inexact Rounded -ddadd434 add 77e-18 10 -> 10.00000000000000 Inexact Rounded -ddadd435 add 77e-19 10 -> 10.00000000000000 Inexact Rounded -ddadd436 add 77e-299 10 -> 10.00000000000000 Inexact Rounded - --- fastpath boundary (more in dqadd) --- 1234567890123456 -ddadd539 add '4444444444444444' '3333333333333333' -> '7777777777777777' -ddadd540 add '4444444444444444' '4444444444444444' -> '8888888888888888' -ddadd541 add '4444444444444444' '5555555555555555' -> '9999999999999999' -ddadd542 add '3333333333333333' '4444444444444444' -> '7777777777777777' -ddadd543 add '4444444444444444' '4444444444444444' -> '8888888888888888' -ddadd544 add '5555555555555555' '4444444444444444' -> '9999999999999999' -ddadd545 add '3000004000000000' '3000000000000040' -> '6000004000000040' -ddadd546 add '3000000400000000' '4000000000000400' -> '7000000400000400' -ddadd547 add '3000000040000000' '5000000000004000' -> '8000000040004000' -ddadd548 add '4000000004000000' '3000000000040000' -> '7000000004040000' -ddadd549 add '4000000000400000' '4000000000400000' -> '8000000000800000' -ddadd550 add '4000000000040000' '5000000004000000' -> '9000000004040000' -ddadd551 add '5000000000004000' '3000000040000000' -> '8000000040004000' -ddadd552 add '5000000000000400' '4000000400000000' -> '9000000400000400' -ddadd553 add '5000000000000040' '5000004000000000' -> 1.000000400000004E+16 Rounded --- check propagation -ddadd554 add '8999999999999999' '0000000000000001' -> 9000000000000000 -ddadd555 add '0000000000000001' '8999999999999999' -> 9000000000000000 -ddadd556 add '0999999999999999' '0000000000000001' -> 1000000000000000 -ddadd557 add '0000000000000001' '0999999999999999' -> 1000000000000000 -ddadd558 add '4444444444444444' '4555555555555556' -> 9000000000000000 -ddadd559 add '4555555555555556' '4444444444444444' -> 9000000000000000 - --- negative ulps -ddadd6440 add 1 -77e-14 -> 0.99999999999923 -ddadd6441 add 1 -77e-15 -> 0.999999999999923 -ddadd6442 add 1 -77e-16 -> 0.9999999999999923 -ddadd6443 add 1 -77e-17 -> 0.9999999999999992 Inexact Rounded -ddadd6444 add 1 -77e-18 -> 0.9999999999999999 Inexact Rounded -ddadd6445 add 1 -77e-19 -> 1.000000000000000 Inexact Rounded -ddadd6446 add 1 -77e-99 -> 1.000000000000000 Inexact Rounded - -ddadd6450 add 10 -77e-14 -> 9.99999999999923 -ddadd6451 add 10 -77e-15 -> 9.999999999999923 -ddadd6452 add 10 -77e-16 -> 9.999999999999992 Inexact Rounded -ddadd6453 add 10 -77e-17 -> 9.999999999999999 Inexact Rounded -ddadd6454 add 10 -77e-18 -> 10.00000000000000 Inexact Rounded -ddadd6455 add 10 -77e-19 -> 10.00000000000000 Inexact Rounded -ddadd6456 add 10 -77e-99 -> 10.00000000000000 Inexact Rounded - -ddadd6460 add -77e-14 1 -> 0.99999999999923 -ddadd6461 add -77e-15 1 -> 0.999999999999923 -ddadd6462 add -77e-16 1 -> 0.9999999999999923 -ddadd6463 add -77e-17 1 -> 0.9999999999999992 Inexact Rounded -ddadd6464 add -77e-18 1 -> 0.9999999999999999 Inexact Rounded -ddadd6465 add -77e-19 1 -> 1.000000000000000 Inexact Rounded -ddadd6466 add -77e-99 1 -> 1.000000000000000 Inexact Rounded - -ddadd6470 add -77e-14 10 -> 9.99999999999923 -ddadd6471 add -77e-15 10 -> 9.999999999999923 -ddadd6472 add -77e-16 10 -> 9.999999999999992 Inexact Rounded -ddadd6473 add -77e-17 10 -> 9.999999999999999 Inexact Rounded -ddadd6474 add -77e-18 10 -> 10.00000000000000 Inexact Rounded -ddadd6475 add -77e-19 10 -> 10.00000000000000 Inexact Rounded -ddadd6476 add -77e-99 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -ddadd6480 add -1 77e-14 -> -0.99999999999923 -ddadd6481 add -1 77e-15 -> -0.999999999999923 -ddadd6482 add -1 77e-16 -> -0.9999999999999923 -ddadd6483 add -1 77e-17 -> -0.9999999999999992 Inexact Rounded -ddadd6484 add -1 77e-18 -> -0.9999999999999999 Inexact Rounded -ddadd6485 add -1 77e-19 -> -1.000000000000000 Inexact Rounded -ddadd6486 add -1 77e-99 -> -1.000000000000000 Inexact Rounded - -ddadd6490 add -10 77e-14 -> -9.99999999999923 -ddadd6491 add -10 77e-15 -> -9.999999999999923 -ddadd6492 add -10 77e-16 -> -9.999999999999992 Inexact Rounded -ddadd6493 add -10 77e-17 -> -9.999999999999999 Inexact Rounded -ddadd6494 add -10 77e-18 -> -10.00000000000000 Inexact Rounded -ddadd6495 add -10 77e-19 -> -10.00000000000000 Inexact Rounded -ddadd6496 add -10 77e-99 -> -10.00000000000000 Inexact Rounded - -ddadd6500 add 77e-14 -1 -> -0.99999999999923 -ddadd6501 add 77e-15 -1 -> -0.999999999999923 -ddadd6502 add 77e-16 -1 -> -0.9999999999999923 -ddadd6503 add 77e-17 -1 -> -0.9999999999999992 Inexact Rounded -ddadd6504 add 77e-18 -1 -> -0.9999999999999999 Inexact Rounded -ddadd6505 add 77e-19 -1 -> -1.000000000000000 Inexact Rounded -ddadd6506 add 77e-99 -1 -> -1.000000000000000 Inexact Rounded - -ddadd6510 add 77e-14 -10 -> -9.99999999999923 -ddadd6511 add 77e-15 -10 -> -9.999999999999923 -ddadd6512 add 77e-16 -10 -> -9.999999999999992 Inexact Rounded -ddadd6513 add 77e-17 -10 -> -9.999999999999999 Inexact Rounded -ddadd6514 add 77e-18 -10 -> -10.00000000000000 Inexact Rounded -ddadd6515 add 77e-19 -10 -> -10.00000000000000 Inexact Rounded -ddadd6516 add 77e-99 -10 -> -10.00000000000000 Inexact Rounded - --- and some more residue effects and different roundings -rounding: half_up -ddadd6540 add '6543210123456789' 0 -> '6543210123456789' -ddadd6541 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddadd6542 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddadd6543 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddadd6544 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddadd6545 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddadd6546 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddadd6547 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddadd6548 add '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -ddadd6549 add '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -ddadd6550 add '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -ddadd6551 add '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -ddadd6552 add '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -ddadd6553 add '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -ddadd6554 add '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -ddadd6555 add '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded -ddadd6556 add '6543210123456789' 1 -> '6543210123456790' -ddadd6557 add '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded -ddadd6558 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddadd6559 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - -rounding: half_even -ddadd6560 add '6543210123456789' 0 -> '6543210123456789' -ddadd6561 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddadd6562 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddadd6563 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddadd6564 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddadd6565 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddadd6566 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddadd6567 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddadd6568 add '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -ddadd6569 add '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -ddadd6570 add '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -ddadd6571 add '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -ddadd6572 add '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -ddadd6573 add '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -ddadd6574 add '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -ddadd6575 add '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded -ddadd6576 add '6543210123456789' 1 -> '6543210123456790' -ddadd6577 add '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -ddadd6578 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddadd6579 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - --- critical few with even bottom digit... -ddadd7540 add '6543210123456788' 0.499999999 -> '6543210123456788' Inexact Rounded -ddadd7541 add '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded -ddadd7542 add '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded - -rounding: down -ddadd7550 add '6543210123456789' 0 -> '6543210123456789' -ddadd7551 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddadd7552 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddadd7553 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddadd7554 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddadd7555 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddadd7556 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddadd7557 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddadd7558 add '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded -ddadd7559 add '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded -ddadd7560 add '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded -ddadd7561 add '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded -ddadd7562 add '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded -ddadd7563 add '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded -ddadd7564 add '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded -ddadd7565 add '6543210123456789' 0.999999999 -> '6543210123456789' Inexact Rounded -ddadd7566 add '6543210123456789' 1 -> '6543210123456790' -ddadd7567 add '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -ddadd7568 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddadd7569 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - --- verify a query -rounding: down -ddadd7661 add 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded -ddadd7662 add 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded -ddadd7663 add 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded -ddadd7664 add 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded - --- more zeros, etc. -rounding: half_even - -ddadd7701 add 5.00 1.00E-3 -> 5.00100 -ddadd7702 add 00.00 0.000 -> 0.000 -ddadd7703 add 00.00 0E-3 -> 0.000 -ddadd7704 add 0E-3 00.00 -> 0.000 - -ddadd7710 add 0E+3 00.00 -> 0.00 -ddadd7711 add 0E+3 00.0 -> 0.0 -ddadd7712 add 0E+3 00. -> 0 -ddadd7713 add 0E+3 00.E+1 -> 0E+1 -ddadd7714 add 0E+3 00.E+2 -> 0E+2 -ddadd7715 add 0E+3 00.E+3 -> 0E+3 -ddadd7716 add 0E+3 00.E+4 -> 0E+3 -ddadd7717 add 0E+3 00.E+5 -> 0E+3 -ddadd7718 add 0E+3 -00.0 -> 0.0 -ddadd7719 add 0E+3 -00. -> 0 -ddadd7731 add 0E+3 -00.E+1 -> 0E+1 - -ddadd7720 add 00.00 0E+3 -> 0.00 -ddadd7721 add 00.0 0E+3 -> 0.0 -ddadd7722 add 00. 0E+3 -> 0 -ddadd7723 add 00.E+1 0E+3 -> 0E+1 -ddadd7724 add 00.E+2 0E+3 -> 0E+2 -ddadd7725 add 00.E+3 0E+3 -> 0E+3 -ddadd7726 add 00.E+4 0E+3 -> 0E+3 -ddadd7727 add 00.E+5 0E+3 -> 0E+3 -ddadd7728 add -00.00 0E+3 -> 0.00 -ddadd7729 add -00.0 0E+3 -> 0.0 -ddadd7730 add -00. 0E+3 -> 0 - -ddadd7732 add 0 0 -> 0 -ddadd7733 add 0 -0 -> 0 -ddadd7734 add -0 0 -> 0 -ddadd7735 add -0 -0 -> -0 -- IEEE 854 special case - -ddadd7736 add 1 -1 -> 0 -ddadd7737 add -1 -1 -> -2 -ddadd7738 add 1 1 -> 2 -ddadd7739 add -1 1 -> 0 - -ddadd7741 add 0 -1 -> -1 -ddadd7742 add -0 -1 -> -1 -ddadd7743 add 0 1 -> 1 -ddadd7744 add -0 1 -> 1 -ddadd7745 add -1 0 -> -1 -ddadd7746 add -1 -0 -> -1 -ddadd7747 add 1 0 -> 1 -ddadd7748 add 1 -0 -> 1 - -ddadd7751 add 0.0 -1 -> -1.0 -ddadd7752 add -0.0 -1 -> -1.0 -ddadd7753 add 0.0 1 -> 1.0 -ddadd7754 add -0.0 1 -> 1.0 -ddadd7755 add -1.0 0 -> -1.0 -ddadd7756 add -1.0 -0 -> -1.0 -ddadd7757 add 1.0 0 -> 1.0 -ddadd7758 add 1.0 -0 -> 1.0 - -ddadd7761 add 0 -1.0 -> -1.0 -ddadd7762 add -0 -1.0 -> -1.0 -ddadd7763 add 0 1.0 -> 1.0 -ddadd7764 add -0 1.0 -> 1.0 -ddadd7765 add -1 0.0 -> -1.0 -ddadd7766 add -1 -0.0 -> -1.0 -ddadd7767 add 1 0.0 -> 1.0 -ddadd7768 add 1 -0.0 -> 1.0 - -ddadd7771 add 0.0 -1.0 -> -1.0 -ddadd7772 add -0.0 -1.0 -> -1.0 -ddadd7773 add 0.0 1.0 -> 1.0 -ddadd7774 add -0.0 1.0 -> 1.0 -ddadd7775 add -1.0 0.0 -> -1.0 -ddadd7776 add -1.0 -0.0 -> -1.0 -ddadd7777 add 1.0 0.0 -> 1.0 -ddadd7778 add 1.0 -0.0 -> 1.0 - --- Specials -ddadd7780 add -Inf -Inf -> -Infinity -ddadd7781 add -Inf -1000 -> -Infinity -ddadd7782 add -Inf -1 -> -Infinity -ddadd7783 add -Inf -0 -> -Infinity -ddadd7784 add -Inf 0 -> -Infinity -ddadd7785 add -Inf 1 -> -Infinity -ddadd7786 add -Inf 1000 -> -Infinity -ddadd7787 add -1000 -Inf -> -Infinity -ddadd7788 add -Inf -Inf -> -Infinity -ddadd7789 add -1 -Inf -> -Infinity -ddadd7790 add -0 -Inf -> -Infinity -ddadd7791 add 0 -Inf -> -Infinity -ddadd7792 add 1 -Inf -> -Infinity -ddadd7793 add 1000 -Inf -> -Infinity -ddadd7794 add Inf -Inf -> NaN Invalid_operation - -ddadd7800 add Inf -Inf -> NaN Invalid_operation -ddadd7801 add Inf -1000 -> Infinity -ddadd7802 add Inf -1 -> Infinity -ddadd7803 add Inf -0 -> Infinity -ddadd7804 add Inf 0 -> Infinity -ddadd7805 add Inf 1 -> Infinity -ddadd7806 add Inf 1000 -> Infinity -ddadd7807 add Inf Inf -> Infinity -ddadd7808 add -1000 Inf -> Infinity -ddadd7809 add -Inf Inf -> NaN Invalid_operation -ddadd7810 add -1 Inf -> Infinity -ddadd7811 add -0 Inf -> Infinity -ddadd7812 add 0 Inf -> Infinity -ddadd7813 add 1 Inf -> Infinity -ddadd7814 add 1000 Inf -> Infinity -ddadd7815 add Inf Inf -> Infinity - -ddadd7821 add NaN -Inf -> NaN -ddadd7822 add NaN -1000 -> NaN -ddadd7823 add NaN -1 -> NaN -ddadd7824 add NaN -0 -> NaN -ddadd7825 add NaN 0 -> NaN -ddadd7826 add NaN 1 -> NaN -ddadd7827 add NaN 1000 -> NaN -ddadd7828 add NaN Inf -> NaN -ddadd7829 add NaN NaN -> NaN -ddadd7830 add -Inf NaN -> NaN -ddadd7831 add -1000 NaN -> NaN -ddadd7832 add -1 NaN -> NaN -ddadd7833 add -0 NaN -> NaN -ddadd7834 add 0 NaN -> NaN -ddadd7835 add 1 NaN -> NaN -ddadd7836 add 1000 NaN -> NaN -ddadd7837 add Inf NaN -> NaN - -ddadd7841 add sNaN -Inf -> NaN Invalid_operation -ddadd7842 add sNaN -1000 -> NaN Invalid_operation -ddadd7843 add sNaN -1 -> NaN Invalid_operation -ddadd7844 add sNaN -0 -> NaN Invalid_operation -ddadd7845 add sNaN 0 -> NaN Invalid_operation -ddadd7846 add sNaN 1 -> NaN Invalid_operation -ddadd7847 add sNaN 1000 -> NaN Invalid_operation -ddadd7848 add sNaN NaN -> NaN Invalid_operation -ddadd7849 add sNaN sNaN -> NaN Invalid_operation -ddadd7850 add NaN sNaN -> NaN Invalid_operation -ddadd7851 add -Inf sNaN -> NaN Invalid_operation -ddadd7852 add -1000 sNaN -> NaN Invalid_operation -ddadd7853 add -1 sNaN -> NaN Invalid_operation -ddadd7854 add -0 sNaN -> NaN Invalid_operation -ddadd7855 add 0 sNaN -> NaN Invalid_operation -ddadd7856 add 1 sNaN -> NaN Invalid_operation -ddadd7857 add 1000 sNaN -> NaN Invalid_operation -ddadd7858 add Inf sNaN -> NaN Invalid_operation -ddadd7859 add NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddadd7861 add NaN1 -Inf -> NaN1 -ddadd7862 add +NaN2 -1000 -> NaN2 -ddadd7863 add NaN3 1000 -> NaN3 -ddadd7864 add NaN4 Inf -> NaN4 -ddadd7865 add NaN5 +NaN6 -> NaN5 -ddadd7866 add -Inf NaN7 -> NaN7 -ddadd7867 add -1000 NaN8 -> NaN8 -ddadd7868 add 1000 NaN9 -> NaN9 -ddadd7869 add Inf +NaN10 -> NaN10 -ddadd7871 add sNaN11 -Inf -> NaN11 Invalid_operation -ddadd7872 add sNaN12 -1000 -> NaN12 Invalid_operation -ddadd7873 add sNaN13 1000 -> NaN13 Invalid_operation -ddadd7874 add sNaN14 NaN17 -> NaN14 Invalid_operation -ddadd7875 add sNaN15 sNaN18 -> NaN15 Invalid_operation -ddadd7876 add NaN16 sNaN19 -> NaN19 Invalid_operation -ddadd7877 add -Inf +sNaN20 -> NaN20 Invalid_operation -ddadd7878 add -1000 sNaN21 -> NaN21 Invalid_operation -ddadd7879 add 1000 sNaN22 -> NaN22 Invalid_operation -ddadd7880 add Inf sNaN23 -> NaN23 Invalid_operation -ddadd7881 add +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddadd7882 add -NaN26 NaN28 -> -NaN26 -ddadd7883 add -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddadd7884 add 1000 -NaN30 -> -NaN30 -ddadd7885 add 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Here we explore near the boundary of rounding a subnormal to Nmin -ddadd7575 add 1E-383 -1E-398 -> 9.99999999999999E-384 Subnormal -ddadd7576 add -1E-383 +1E-398 -> -9.99999999999999E-384 Subnormal - --- and another curious case -ddadd7577 add 7.000000000000E-385 -1.00000E-391 -> 6.999999000000E-385 Subnormal - --- check overflow edge case --- 1234567890123456 -ddadd7972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 -ddadd7973 add 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded -ddadd7974 add 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded -ddadd7975 add 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded -ddadd7976 add 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded -ddadd7977 add 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded -ddadd7978 add 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded -ddadd7979 add 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded -ddadd7980 add 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded -ddadd7981 add 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded -ddadd7982 add 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded -ddadd7983 add 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded -ddadd7984 add 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded - -ddadd7985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 -ddadd7986 add -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded -ddadd7987 add -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded -ddadd7988 add -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded -ddadd7989 add -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded -ddadd7990 add -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded -ddadd7991 add -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded -ddadd7992 add -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded -ddadd7993 add -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded -ddadd7994 add -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded -ddadd7995 add -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded -ddadd7996 add -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded -ddadd7997 add -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -ddadd71100 add 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact -ddadd71101 add 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact -ddadd71103 add +1 -1e-383 -> 0.9999999999999999 Rounded Inexact -ddadd71104 add 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact -ddadd71105 add 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact -ddadd71106 add 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact -ddadd71107 add 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact -ddadd71108 add 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact -ddadd71109 add 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact - -rounding: ceiling -ddadd71110 add -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact -ddadd71111 add -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact -ddadd71113 add -1 +1e-383 -> -0.9999999999999999 Rounded Inexact -ddadd71114 add -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact -ddadd71115 add -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact -ddadd71116 add -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact -ddadd71117 add -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact -ddadd71118 add -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact -ddadd71119 add -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -ddadd71300 add 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded -ddadd71310 add 1E16 -0.51 -> 9999999999999999 Inexact Rounded -ddadd71311 add 1E16 -0.501 -> 9999999999999999 Inexact Rounded -ddadd71312 add 1E16 -0.5001 -> 9999999999999999 Inexact Rounded -ddadd71313 add 1E16 -0.50001 -> 9999999999999999 Inexact Rounded -ddadd71314 add 1E16 -0.500001 -> 9999999999999999 Inexact Rounded -ddadd71315 add 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded -ddadd71316 add 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded -ddadd71317 add 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded -ddadd71318 add 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded -ddadd71319 add 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded -ddadd71320 add 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded -ddadd71321 add 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded -ddadd71322 add 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded -ddadd71323 add 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded -ddadd71324 add 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded -ddadd71325 add 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71326 add 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71327 add 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71328 add 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71329 add 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71330 add 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71331 add 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71332 add 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71333 add 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71334 add 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71335 add 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71336 add 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71337 add 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71338 add 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded -ddadd71339 add 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded - -ddadd71340 add 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded -ddadd71341 add 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded - -ddadd71349 add 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded -ddadd71350 add 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded -ddadd71351 add 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded -ddadd71352 add 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded -ddadd71353 add 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded -ddadd71354 add 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded -ddadd71355 add 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded -ddadd71356 add 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded -ddadd71357 add 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded -ddadd71358 add 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded -ddadd71359 add 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded -ddadd71360 add 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded -ddadd71361 add 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded -ddadd71362 add 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded -ddadd71363 add 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded -ddadd71364 add 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded -ddadd71365 add 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71367 add 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71368 add 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71369 add 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71370 add 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71371 add 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71372 add 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71373 add 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71374 add 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71375 add 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71376 add 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71377 add 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71378 add 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71379 add 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded -ddadd71380 add 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded -ddadd71381 add 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded -ddadd71382 add 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71383 add 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71384 add 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71385 add 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71386 add 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71387 add 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71388 add 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71389 add 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71390 add 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71391 add 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71392 add 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71393 add 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71394 add 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71395 add 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded -ddadd71396 add 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -ddadd71420 add 0 1.123456789012345 -> 1.123456789012345 -ddadd71421 add 0 1.123456789012345E-1 -> 0.1123456789012345 -ddadd71422 add 0 1.123456789012345E-2 -> 0.01123456789012345 -ddadd71423 add 0 1.123456789012345E-3 -> 0.001123456789012345 -ddadd71424 add 0 1.123456789012345E-4 -> 0.0001123456789012345 -ddadd71425 add 0 1.123456789012345E-5 -> 0.00001123456789012345 -ddadd71426 add 0 1.123456789012345E-6 -> 0.000001123456789012345 -ddadd71427 add 0 1.123456789012345E-7 -> 1.123456789012345E-7 -ddadd71428 add 0 1.123456789012345E-8 -> 1.123456789012345E-8 -ddadd71429 add 0 1.123456789012345E-9 -> 1.123456789012345E-9 -ddadd71430 add 0 1.123456789012345E-10 -> 1.123456789012345E-10 -ddadd71431 add 0 1.123456789012345E-11 -> 1.123456789012345E-11 -ddadd71432 add 0 1.123456789012345E-12 -> 1.123456789012345E-12 -ddadd71433 add 0 1.123456789012345E-13 -> 1.123456789012345E-13 -ddadd71434 add 0 1.123456789012345E-14 -> 1.123456789012345E-14 -ddadd71435 add 0 1.123456789012345E-15 -> 1.123456789012345E-15 -ddadd71436 add 0 1.123456789012345E-16 -> 1.123456789012345E-16 -ddadd71437 add 0 1.123456789012345E-17 -> 1.123456789012345E-17 -ddadd71438 add 0 1.123456789012345E-18 -> 1.123456789012345E-18 -ddadd71439 add 0 1.123456789012345E-19 -> 1.123456789012345E-19 - --- same, reversed 0 -ddadd71440 add 1.123456789012345 0 -> 1.123456789012345 -ddadd71441 add 1.123456789012345E-1 0 -> 0.1123456789012345 -ddadd71442 add 1.123456789012345E-2 0 -> 0.01123456789012345 -ddadd71443 add 1.123456789012345E-3 0 -> 0.001123456789012345 -ddadd71444 add 1.123456789012345E-4 0 -> 0.0001123456789012345 -ddadd71445 add 1.123456789012345E-5 0 -> 0.00001123456789012345 -ddadd71446 add 1.123456789012345E-6 0 -> 0.000001123456789012345 -ddadd71447 add 1.123456789012345E-7 0 -> 1.123456789012345E-7 -ddadd71448 add 1.123456789012345E-8 0 -> 1.123456789012345E-8 -ddadd71449 add 1.123456789012345E-9 0 -> 1.123456789012345E-9 -ddadd71450 add 1.123456789012345E-10 0 -> 1.123456789012345E-10 -ddadd71451 add 1.123456789012345E-11 0 -> 1.123456789012345E-11 -ddadd71452 add 1.123456789012345E-12 0 -> 1.123456789012345E-12 -ddadd71453 add 1.123456789012345E-13 0 -> 1.123456789012345E-13 -ddadd71454 add 1.123456789012345E-14 0 -> 1.123456789012345E-14 -ddadd71455 add 1.123456789012345E-15 0 -> 1.123456789012345E-15 -ddadd71456 add 1.123456789012345E-16 0 -> 1.123456789012345E-16 -ddadd71457 add 1.123456789012345E-17 0 -> 1.123456789012345E-17 -ddadd71458 add 1.123456789012345E-18 0 -> 1.123456789012345E-18 -ddadd71459 add 1.123456789012345E-19 0 -> 1.123456789012345E-19 - --- same, Es on the 0 -ddadd71460 add 1.123456789012345 0E-0 -> 1.123456789012345 -ddadd71461 add 1.123456789012345 0E-1 -> 1.123456789012345 -ddadd71462 add 1.123456789012345 0E-2 -> 1.123456789012345 -ddadd71463 add 1.123456789012345 0E-3 -> 1.123456789012345 -ddadd71464 add 1.123456789012345 0E-4 -> 1.123456789012345 -ddadd71465 add 1.123456789012345 0E-5 -> 1.123456789012345 -ddadd71466 add 1.123456789012345 0E-6 -> 1.123456789012345 -ddadd71467 add 1.123456789012345 0E-7 -> 1.123456789012345 -ddadd71468 add 1.123456789012345 0E-8 -> 1.123456789012345 -ddadd71469 add 1.123456789012345 0E-9 -> 1.123456789012345 -ddadd71470 add 1.123456789012345 0E-10 -> 1.123456789012345 -ddadd71471 add 1.123456789012345 0E-11 -> 1.123456789012345 -ddadd71472 add 1.123456789012345 0E-12 -> 1.123456789012345 -ddadd71473 add 1.123456789012345 0E-13 -> 1.123456789012345 -ddadd71474 add 1.123456789012345 0E-14 -> 1.123456789012345 -ddadd71475 add 1.123456789012345 0E-15 -> 1.123456789012345 --- next four flag Rounded because the 0 extends the result -ddadd71476 add 1.123456789012345 0E-16 -> 1.123456789012345 Rounded -ddadd71477 add 1.123456789012345 0E-17 -> 1.123456789012345 Rounded -ddadd71478 add 1.123456789012345 0E-18 -> 1.123456789012345 Rounded -ddadd71479 add 1.123456789012345 0E-19 -> 1.123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -ddadd71500 add 0 0E-19 -> 0E-19 -ddadd71501 add -0 0E-19 -> 0E-19 -ddadd71502 add 0 -0E-19 -> 0E-19 -ddadd71503 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71511 add -11 11 -> 0 -ddadd71512 add 11 -11 -> 0 - -rounding: half_down --- exact zeros from zeros -ddadd71520 add 0 0E-19 -> 0E-19 -ddadd71521 add -0 0E-19 -> 0E-19 -ddadd71522 add 0 -0E-19 -> 0E-19 -ddadd71523 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71531 add -11 11 -> 0 -ddadd71532 add 11 -11 -> 0 - -rounding: half_even --- exact zeros from zeros -ddadd71540 add 0 0E-19 -> 0E-19 -ddadd71541 add -0 0E-19 -> 0E-19 -ddadd71542 add 0 -0E-19 -> 0E-19 -ddadd71543 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71551 add -11 11 -> 0 -ddadd71552 add 11 -11 -> 0 - -rounding: up --- exact zeros from zeros -ddadd71560 add 0 0E-19 -> 0E-19 -ddadd71561 add -0 0E-19 -> 0E-19 -ddadd71562 add 0 -0E-19 -> 0E-19 -ddadd71563 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71571 add -11 11 -> 0 -ddadd71572 add 11 -11 -> 0 - -rounding: down --- exact zeros from zeros -ddadd71580 add 0 0E-19 -> 0E-19 -ddadd71581 add -0 0E-19 -> 0E-19 -ddadd71582 add 0 -0E-19 -> 0E-19 -ddadd71583 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71591 add -11 11 -> 0 -ddadd71592 add 11 -11 -> 0 - -rounding: ceiling --- exact zeros from zeros -ddadd71600 add 0 0E-19 -> 0E-19 -ddadd71601 add -0 0E-19 -> 0E-19 -ddadd71602 add 0 -0E-19 -> 0E-19 -ddadd71603 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71611 add -11 11 -> 0 -ddadd71612 add 11 -11 -> 0 - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -ddadd71620 add 0 0E-19 -> 0E-19 -ddadd71621 add -0 0E-19 -> -0E-19 -- * -ddadd71622 add 0 -0E-19 -> -0E-19 -- * -ddadd71623 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71631 add -11 11 -> -0 -- * -ddadd71632 add 11 -11 -> -0 -- * - --- Examples from SQL proposal (Krishna Kulkarni) -ddadd71701 add 130E-2 120E-2 -> 2.50 -ddadd71702 add 130E-2 12E-1 -> 2.50 -ddadd71703 add 130E-2 1E0 -> 2.30 -ddadd71704 add 1E2 1E4 -> 1.01E+4 -ddadd71705 add 130E-2 -120E-2 -> 0.10 -ddadd71706 add 130E-2 -12E-1 -> 0.10 -ddadd71707 add 130E-2 -1E0 -> 0.30 -ddadd71708 add 1E2 -1E4 -> -9.9E+3 - --- query from Vincent Kulandaisamy -rounding: ceiling -ddadd71801 add 7.8822773805862E+277 -5.1757503820663E-21 -> 7.882277380586200E+277 Inexact Rounded -ddadd71802 add 7.882277380586200E+277 12.341 -> 7.882277380586201E+277 Inexact Rounded -ddadd71803 add 7.882277380586201E+277 2.7270545046613E-31 -> 7.882277380586202E+277 Inexact Rounded - -ddadd71811 add 12.341 -5.1757503820663E-21 -> 12.34100000000000 Inexact Rounded -ddadd71812 add 12.34100000000000 2.7270545046613E-31 -> 12.34100000000001 Inexact Rounded -ddadd71813 add 12.34100000000001 7.8822773805862E+277 -> 7.882277380586201E+277 Inexact Rounded - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -ddadd75001 add 1234567890123456 1 -> 1234567890123457 -ddadd75002 add 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded -ddadd75003 add 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded -ddadd75004 add 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded -ddadd75005 add 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded -ddadd75006 add 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded -ddadd75007 add 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded -ddadd75008 add 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded -ddadd75009 add 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded -ddadd75010 add 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded -ddadd75011 add 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded -ddadd75012 add 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded -ddadd75013 add 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded -ddadd75014 add 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded -ddadd75015 add 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded -ddadd75016 add 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded -ddadd75017 add 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded -ddadd75018 add 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded -ddadd75019 add 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded -ddadd75020 add 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded -ddadd75021 add 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded - --- widening second argument at gap -ddadd75030 add 12345678 1 -> 12345679 -ddadd75031 add 12345678 0.1 -> 12345678.1 -ddadd75032 add 12345678 0.12 -> 12345678.12 -ddadd75033 add 12345678 0.123 -> 12345678.123 -ddadd75034 add 12345678 0.1234 -> 12345678.1234 -ddadd75035 add 12345678 0.12345 -> 12345678.12345 -ddadd75036 add 12345678 0.123456 -> 12345678.123456 -ddadd75037 add 12345678 0.1234567 -> 12345678.1234567 -ddadd75038 add 12345678 0.12345678 -> 12345678.12345678 -ddadd75039 add 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded -ddadd75040 add 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded -ddadd75041 add 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded -ddadd75042 add 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded -ddadd75043 add 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded -ddadd75044 add 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded -ddadd75045 add 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded -ddadd75046 add 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded -ddadd75047 add 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded -ddadd75048 add 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded -ddadd75049 add 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -ddadd75050 add 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded -ddadd75051 add 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded -ddadd75052 add 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded -ddadd75053 add 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded -ddadd75054 add 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded -ddadd75055 add 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded -ddadd75056 add 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded -ddadd75057 add 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded -ddadd75060 add 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded -ddadd75061 add 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded -ddadd75062 add 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded -ddadd75063 add 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded -ddadd75064 add 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded -ddadd75065 add 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded -ddadd75066 add 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded -ddadd75067 add 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -ddadd75070 add 12345678 1E-8 -> 12345678.00000001 -ddadd75071 add 12345678 1E-9 -> 12345678.00000001 Inexact Rounded -ddadd75072 add 12345678 1E-10 -> 12345678.00000001 Inexact Rounded -ddadd75073 add 12345678 1E-11 -> 12345678.00000001 Inexact Rounded -ddadd75074 add 12345678 1E-12 -> 12345678.00000001 Inexact Rounded -ddadd75075 add 12345678 1E-13 -> 12345678.00000001 Inexact Rounded -ddadd75076 add 12345678 1E-14 -> 12345678.00000001 Inexact Rounded -ddadd75077 add 12345678 1E-15 -> 12345678.00000001 Inexact Rounded -ddadd75078 add 12345678 1E-16 -> 12345678.00000001 Inexact Rounded -ddadd75079 add 12345678 1E-17 -> 12345678.00000001 Inexact Rounded -ddadd75080 add 12345678 1E-18 -> 12345678.00000001 Inexact Rounded -ddadd75081 add 12345678 1E-19 -> 12345678.00000001 Inexact Rounded -ddadd75082 add 12345678 1E-20 -> 12345678.00000001 Inexact Rounded -ddadd75083 add 12345678 1E-25 -> 12345678.00000001 Inexact Rounded -ddadd75084 add 12345678 1E-30 -> 12345678.00000001 Inexact Rounded -ddadd75085 add 12345678 1E-31 -> 12345678.00000001 Inexact Rounded -ddadd75086 add 12345678 1E-32 -> 12345678.00000001 Inexact Rounded -ddadd75087 add 12345678 1E-33 -> 12345678.00000001 Inexact Rounded -ddadd75088 add 12345678 1E-34 -> 12345678.00000001 Inexact Rounded -ddadd75089 add 12345678 1E-35 -> 12345678.00000001 Inexact Rounded - --- Punit's -ddadd75100 add 1.000 -200.000 -> -199.000 - --- Rounding swathe -rounding: half_even -ddadd81100 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81101 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81102 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81103 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81104 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81105 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81106 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81107 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81108 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81109 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81120 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81121 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: half_up -ddadd81200 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81201 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81202 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81203 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81204 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81205 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81206 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81207 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81208 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81209 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81220 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81221 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: half_down -ddadd81300 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81301 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81302 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81303 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81304 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81305 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81306 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81307 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81308 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81309 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81320 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81321 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: up -ddadd81400 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81401 add .2301 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81402 add .2310 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81403 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81404 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81405 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81406 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81407 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81408 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81409 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81411 add -.2399 -12345678901234.00 -> -12345678901234.24 Inexact Rounded -ddadd81420 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81421 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: down -ddadd81500 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81501 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81502 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81503 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81504 add .2351 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81505 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81506 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81507 add .2360 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81508 add .2370 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81509 add .2399 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81511 add -.2399 -12345678901234.00 -> -12345678901234.23 Inexact Rounded -ddadd81520 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded -ddadd81521 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded - -rounding: ceiling -ddadd81600 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81601 add .2301 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81602 add .2310 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81603 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81604 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81605 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81606 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81607 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81608 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81609 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81611 add -.2399 -12345678901234.00 -> -12345678901234.23 Inexact Rounded -ddadd81620 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81621 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded - -rounding: floor -ddadd81700 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81701 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81702 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81703 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81704 add .2351 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81705 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81706 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81707 add .2360 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81708 add .2370 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81709 add .2399 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81711 add -.2399 -12345678901234.00 -> -12345678901234.24 Inexact Rounded -ddadd81720 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded -ddadd81721 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: 05up -ddadd81800 add .2000 12345678901234.00 -> 12345678901234.20 Rounded -ddadd81801 add .2001 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81802 add .2010 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81803 add .2050 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81804 add .2051 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81807 add .2060 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81808 add .2070 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81809 add .2099 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81811 add -.2099 -12345678901234.00 -> -12345678901234.21 Inexact Rounded -ddadd81820 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded -ddadd81821 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded - -ddadd81900 add .2100 12345678901234.00 -> 12345678901234.21 Rounded -ddadd81901 add .2101 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81902 add .2110 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81903 add .2150 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81904 add .2151 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81907 add .2160 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81908 add .2170 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81909 add .2199 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81911 add -.2199 -12345678901234.00 -> -12345678901234.21 Inexact Rounded - -ddadd82000 add .2400 12345678901234.00 -> 12345678901234.24 Rounded -ddadd82001 add .2401 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82002 add .2410 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82003 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82004 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82007 add .2460 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82008 add .2470 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82009 add .2499 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82011 add -.2499 -12345678901234.00 -> -12345678901234.24 Inexact Rounded - -ddadd82100 add .2500 12345678901234.00 -> 12345678901234.25 Rounded -ddadd82101 add .2501 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82102 add .2510 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82103 add .2550 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82104 add .2551 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82107 add .2560 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82108 add .2570 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82109 add .2599 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82111 add -.2599 -12345678901234.00 -> -12345678901234.26 Inexact Rounded - -ddadd82200 add .2600 12345678901234.00 -> 12345678901234.26 Rounded -ddadd82201 add .2601 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82202 add .2610 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82203 add .2650 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82204 add .2651 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82207 add .2660 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82208 add .2670 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82209 add .2699 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82211 add -.2699 -12345678901234.00 -> -12345678901234.26 Inexact Rounded - -ddadd82300 add .2900 12345678901234.00 -> 12345678901234.29 Rounded -ddadd82301 add .2901 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82302 add .2910 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82303 add .2950 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82304 add .2951 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82307 add .2960 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82308 add .2970 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82309 add .2999 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82311 add -.2999 -12345678901234.00 -> -12345678901234.29 Inexact Rounded - --- Null tests -ddadd9990 add 10 # -> NaN Invalid_operation -ddadd9991 add # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddAdd.decTest -- decDouble addition -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decDoubles only; all arguments are +-- representable in a decDouble +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- [first group are 'quick confidence check'] +ddadd001 add 1 1 -> 2 +ddadd002 add 2 3 -> 5 +ddadd003 add '5.75' '3.3' -> 9.05 +ddadd004 add '5' '-3' -> 2 +ddadd005 add '-5' '-3' -> -8 +ddadd006 add '-7' '2.5' -> -4.5 +ddadd007 add '0.7' '0.3' -> 1.0 +ddadd008 add '1.25' '1.25' -> 2.50 +ddadd009 add '1.23456789' '1.00000000' -> '2.23456789' +ddadd010 add '1.23456789' '1.00000011' -> '2.23456800' + +-- 1234567890123456 1234567890123456 +ddadd011 add '0.4444444444444446' '0.5555555555555555' -> '1.000000000000000' Inexact Rounded +ddadd012 add '0.4444444444444445' '0.5555555555555555' -> '1.000000000000000' Rounded +ddadd013 add '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' +ddadd014 add '4444444444444444' '0.49' -> '4444444444444444' Inexact Rounded +ddadd015 add '4444444444444444' '0.499' -> '4444444444444444' Inexact Rounded +ddadd016 add '4444444444444444' '0.4999' -> '4444444444444444' Inexact Rounded +ddadd017 add '4444444444444444' '0.5000' -> '4444444444444444' Inexact Rounded +ddadd018 add '4444444444444444' '0.5001' -> '4444444444444445' Inexact Rounded +ddadd019 add '4444444444444444' '0.501' -> '4444444444444445' Inexact Rounded +ddadd020 add '4444444444444444' '0.51' -> '4444444444444445' Inexact Rounded + +ddadd021 add 0 1 -> 1 +ddadd022 add 1 1 -> 2 +ddadd023 add 2 1 -> 3 +ddadd024 add 3 1 -> 4 +ddadd025 add 4 1 -> 5 +ddadd026 add 5 1 -> 6 +ddadd027 add 6 1 -> 7 +ddadd028 add 7 1 -> 8 +ddadd029 add 8 1 -> 9 +ddadd030 add 9 1 -> 10 + +-- some carrying effects +ddadd031 add '0.9998' '0.0000' -> '0.9998' +ddadd032 add '0.9998' '0.0001' -> '0.9999' +ddadd033 add '0.9998' '0.0002' -> '1.0000' +ddadd034 add '0.9998' '0.0003' -> '1.0001' + +ddadd035 add '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddadd036 add '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddadd037 add '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddadd038 add '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded +ddadd039 add '700000' '10000e+16' -> '1.000000000000007E+20' Rounded + +-- symmetry: +ddadd040 add '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded +ddadd041 add '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded +ddadd042 add '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded +ddadd044 add '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded +ddadd045 add '10000e+16' '700000' -> '1.000000000000007E+20' Rounded + +-- same, without rounding +ddadd046 add '10000e+9' '7' -> '10000000000007' +ddadd047 add '10000e+9' '70' -> '10000000000070' +ddadd048 add '10000e+9' '700' -> '10000000000700' +ddadd049 add '10000e+9' '7000' -> '10000000007000' +ddadd050 add '10000e+9' '70000' -> '10000000070000' +ddadd051 add '10000e+9' '700000' -> '10000000700000' +ddadd052 add '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +ddadd053 add '12' '7.00' -> '19.00' +ddadd054 add '1.3' '-1.07' -> '0.23' +ddadd055 add '1.3' '-1.30' -> '0.00' +ddadd056 add '1.3' '-2.07' -> '-0.77' +ddadd057 add '1E+2' '1E+4' -> '1.01E+4' + +-- leading zero preservation +ddadd061 add 1 '0.0001' -> '1.0001' +ddadd062 add 1 '0.00001' -> '1.00001' +ddadd063 add 1 '0.000001' -> '1.000001' +ddadd064 add 1 '0.0000001' -> '1.0000001' +ddadd065 add 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +ddadd070 add 1 0 -> 1 +ddadd071 add 1 0. -> 1 +ddadd072 add 1 .0 -> 1.0 +ddadd073 add 1 0.0 -> 1.0 +ddadd074 add 1 0.00 -> 1.00 +ddadd075 add 0 1 -> 1 +ddadd076 add 0. 1 -> 1 +ddadd077 add .0 1 -> 1.0 +ddadd078 add 0.0 1 -> 1.0 +ddadd079 add 0.00 1 -> 1.00 + +-- some carries +ddadd080 add 999999998 1 -> 999999999 +ddadd081 add 999999999 1 -> 1000000000 +ddadd082 add 99999999 1 -> 100000000 +ddadd083 add 9999999 1 -> 10000000 +ddadd084 add 999999 1 -> 1000000 +ddadd085 add 99999 1 -> 100000 +ddadd086 add 9999 1 -> 10000 +ddadd087 add 999 1 -> 1000 +ddadd088 add 99 1 -> 100 +ddadd089 add 9 1 -> 10 + + +-- more LHS swaps +ddadd090 add '-56267E-10' 0 -> '-0.0000056267' +ddadd091 add '-56267E-6' 0 -> '-0.056267' +ddadd092 add '-56267E-5' 0 -> '-0.56267' +ddadd093 add '-56267E-4' 0 -> '-5.6267' +ddadd094 add '-56267E-3' 0 -> '-56.267' +ddadd095 add '-56267E-2' 0 -> '-562.67' +ddadd096 add '-56267E-1' 0 -> '-5626.7' +ddadd097 add '-56267E-0' 0 -> '-56267' +ddadd098 add '-5E-10' 0 -> '-5E-10' +ddadd099 add '-5E-7' 0 -> '-5E-7' +ddadd100 add '-5E-6' 0 -> '-0.000005' +ddadd101 add '-5E-5' 0 -> '-0.00005' +ddadd102 add '-5E-4' 0 -> '-0.0005' +ddadd103 add '-5E-1' 0 -> '-0.5' +ddadd104 add '-5E0' 0 -> '-5' +ddadd105 add '-5E1' 0 -> '-50' +ddadd106 add '-5E5' 0 -> '-500000' +ddadd107 add '-5E15' 0 -> '-5000000000000000' +ddadd108 add '-5E16' 0 -> '-5.000000000000000E+16' Rounded +ddadd109 add '-5E17' 0 -> '-5.000000000000000E+17' Rounded +ddadd110 add '-5E18' 0 -> '-5.000000000000000E+18' Rounded +ddadd111 add '-5E100' 0 -> '-5.000000000000000E+100' Rounded + +-- more RHS swaps +ddadd113 add 0 '-56267E-10' -> '-0.0000056267' +ddadd114 add 0 '-56267E-6' -> '-0.056267' +ddadd116 add 0 '-56267E-5' -> '-0.56267' +ddadd117 add 0 '-56267E-4' -> '-5.6267' +ddadd119 add 0 '-56267E-3' -> '-56.267' +ddadd120 add 0 '-56267E-2' -> '-562.67' +ddadd121 add 0 '-56267E-1' -> '-5626.7' +ddadd122 add 0 '-56267E-0' -> '-56267' +ddadd123 add 0 '-5E-10' -> '-5E-10' +ddadd124 add 0 '-5E-7' -> '-5E-7' +ddadd125 add 0 '-5E-6' -> '-0.000005' +ddadd126 add 0 '-5E-5' -> '-0.00005' +ddadd127 add 0 '-5E-4' -> '-0.0005' +ddadd128 add 0 '-5E-1' -> '-0.5' +ddadd129 add 0 '-5E0' -> '-5' +ddadd130 add 0 '-5E1' -> '-50' +ddadd131 add 0 '-5E5' -> '-500000' +ddadd132 add 0 '-5E15' -> '-5000000000000000' +ddadd133 add 0 '-5E16' -> '-5.000000000000000E+16' Rounded +ddadd134 add 0 '-5E17' -> '-5.000000000000000E+17' Rounded +ddadd135 add 0 '-5E18' -> '-5.000000000000000E+18' Rounded +ddadd136 add 0 '-5E100' -> '-5.000000000000000E+100' Rounded + +-- related +ddadd137 add 1 '0E-19' -> '1.000000000000000' Rounded +ddadd138 add -1 '0E-19' -> '-1.000000000000000' Rounded +ddadd139 add '0E-19' 1 -> '1.000000000000000' Rounded +ddadd140 add '0E-19' -1 -> '-1.000000000000000' Rounded +ddadd141 add 1E+11 0.0000 -> '100000000000.0000' +ddadd142 add 1E+11 0.00000 -> '100000000000.0000' Rounded +ddadd143 add 0.000 1E+12 -> '1000000000000.000' +ddadd144 add 0.0000 1E+12 -> '1000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +ddadd146 add '00.0' 0 -> '0.0' +ddadd147 add '0.00' 0 -> '0.00' +ddadd148 add 0 '0.00' -> '0.00' +ddadd149 add 0 '00.0' -> '0.0' +ddadd150 add '00.0' '0.00' -> '0.00' +ddadd151 add '0.00' '00.0' -> '0.00' +ddadd152 add '3' '.3' -> '3.3' +ddadd153 add '3.' '.3' -> '3.3' +ddadd154 add '3.0' '.3' -> '3.3' +ddadd155 add '3.00' '.3' -> '3.30' +ddadd156 add '3' '3' -> '6' +ddadd157 add '3' '+3' -> '6' +ddadd158 add '3' '-3' -> '0' +ddadd159 add '0.3' '-0.3' -> '0.0' +ddadd160 add '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +ddadd161 add '1E+12' '-1' -> '999999999999' +ddadd162 add '1E+12' '1.11' -> '1000000000001.11' +ddadd163 add '1.11' '1E+12' -> '1000000000001.11' +ddadd164 add '-1' '1E+12' -> '999999999999' +ddadd165 add '7E+12' '-1' -> '6999999999999' +ddadd166 add '7E+12' '1.11' -> '7000000000001.11' +ddadd167 add '1.11' '7E+12' -> '7000000000001.11' +ddadd168 add '-1' '7E+12' -> '6999999999999' + +rounding: half_up +-- 1.234567890123456 1234567890123456 1 234567890123456 +ddadd170 add '4.444444444444444' '0.5555555555555567' -> '5.000000000000001' Inexact Rounded +ddadd171 add '4.444444444444444' '0.5555555555555566' -> '5.000000000000001' Inexact Rounded +ddadd172 add '4.444444444444444' '0.5555555555555565' -> '5.000000000000001' Inexact Rounded +ddadd173 add '4.444444444444444' '0.5555555555555564' -> '5.000000000000000' Inexact Rounded +ddadd174 add '4.444444444444444' '0.5555555555555553' -> '4.999999999999999' Inexact Rounded +ddadd175 add '4.444444444444444' '0.5555555555555552' -> '4.999999999999999' Inexact Rounded +ddadd176 add '4.444444444444444' '0.5555555555555551' -> '4.999999999999999' Inexact Rounded +ddadd177 add '4.444444444444444' '0.5555555555555550' -> '4.999999999999999' Rounded +ddadd178 add '4.444444444444444' '0.5555555555555545' -> '4.999999999999999' Inexact Rounded +ddadd179 add '4.444444444444444' '0.5555555555555544' -> '4.999999999999998' Inexact Rounded +ddadd180 add '4.444444444444444' '0.5555555555555543' -> '4.999999999999998' Inexact Rounded +ddadd181 add '4.444444444444444' '0.5555555555555542' -> '4.999999999999998' Inexact Rounded +ddadd182 add '4.444444444444444' '0.5555555555555541' -> '4.999999999999998' Inexact Rounded +ddadd183 add '4.444444444444444' '0.5555555555555540' -> '4.999999999999998' Rounded + +-- and some more, including residue effects and different roundings +rounding: half_up +ddadd200 add '1234560123456789' 0 -> '1234560123456789' +ddadd201 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddadd202 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddadd203 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddadd204 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddadd205 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddadd206 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddadd207 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddadd208 add '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded +ddadd209 add '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded +ddadd210 add '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded +ddadd211 add '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded +ddadd212 add '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded +ddadd213 add '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded +ddadd214 add '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded +ddadd215 add '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded +ddadd216 add '1234560123456789' 1 -> '1234560123456790' +ddadd217 add '1234560123456789' 1.000000001 -> '1234560123456790' Inexact Rounded +ddadd218 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddadd219 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded + +rounding: half_even +ddadd220 add '1234560123456789' 0 -> '1234560123456789' +ddadd221 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddadd222 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddadd223 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddadd224 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddadd225 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddadd226 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddadd227 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddadd228 add '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded +ddadd229 add '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded +ddadd230 add '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded +ddadd231 add '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded +ddadd232 add '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded +ddadd233 add '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded +ddadd234 add '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded +ddadd235 add '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded +ddadd236 add '1234560123456789' 1 -> '1234560123456790' +ddadd237 add '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded +ddadd238 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddadd239 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded +-- critical few with even bottom digit... +ddadd240 add '1234560123456788' 0.499999999 -> '1234560123456788' Inexact Rounded +ddadd241 add '1234560123456788' 0.5 -> '1234560123456788' Inexact Rounded +ddadd242 add '1234560123456788' 0.500000001 -> '1234560123456789' Inexact Rounded + +rounding: down +ddadd250 add '1234560123456789' 0 -> '1234560123456789' +ddadd251 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddadd252 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddadd253 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddadd254 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddadd255 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddadd256 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddadd257 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddadd258 add '1234560123456789' 0.5 -> '1234560123456789' Inexact Rounded +ddadd259 add '1234560123456789' 0.500000001 -> '1234560123456789' Inexact Rounded +ddadd260 add '1234560123456789' 0.500001 -> '1234560123456789' Inexact Rounded +ddadd261 add '1234560123456789' 0.51 -> '1234560123456789' Inexact Rounded +ddadd262 add '1234560123456789' 0.6 -> '1234560123456789' Inexact Rounded +ddadd263 add '1234560123456789' 0.9 -> '1234560123456789' Inexact Rounded +ddadd264 add '1234560123456789' 0.99999 -> '1234560123456789' Inexact Rounded +ddadd265 add '1234560123456789' 0.999999999 -> '1234560123456789' Inexact Rounded +ddadd266 add '1234560123456789' 1 -> '1234560123456790' +ddadd267 add '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded +ddadd268 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddadd269 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +ddadd301 add -1 1 -> 0 +ddadd302 add 0 1 -> 1 +ddadd303 add 1 1 -> 2 +ddadd304 add 12 1 -> 13 +ddadd305 add 98 1 -> 99 +ddadd306 add 99 1 -> 100 +ddadd307 add 100 1 -> 101 +ddadd308 add 101 1 -> 102 +ddadd309 add -1 -1 -> -2 +ddadd310 add 0 -1 -> -1 +ddadd311 add 1 -1 -> 0 +ddadd312 add 12 -1 -> 11 +ddadd313 add 98 -1 -> 97 +ddadd314 add 99 -1 -> 98 +ddadd315 add 100 -1 -> 99 +ddadd316 add 101 -1 -> 100 + +ddadd321 add -0.01 0.01 -> 0.00 +ddadd322 add 0.00 0.01 -> 0.01 +ddadd323 add 0.01 0.01 -> 0.02 +ddadd324 add 0.12 0.01 -> 0.13 +ddadd325 add 0.98 0.01 -> 0.99 +ddadd326 add 0.99 0.01 -> 1.00 +ddadd327 add 1.00 0.01 -> 1.01 +ddadd328 add 1.01 0.01 -> 1.02 +ddadd329 add -0.01 -0.01 -> -0.02 +ddadd330 add 0.00 -0.01 -> -0.01 +ddadd331 add 0.01 -0.01 -> 0.00 +ddadd332 add 0.12 -0.01 -> 0.11 +ddadd333 add 0.98 -0.01 -> 0.97 +ddadd334 add 0.99 -0.01 -> 0.98 +ddadd335 add 1.00 -0.01 -> 0.99 +ddadd336 add 1.01 -0.01 -> 1.00 + +-- some more cases where adding 0 affects the coefficient +ddadd340 add 1E+3 0 -> 1000 +ddadd341 add 1E+15 0 -> 1000000000000000 +ddadd342 add 1E+16 0 -> 1.000000000000000E+16 Rounded +ddadd343 add 1E+20 0 -> 1.000000000000000E+20 Rounded +-- which simply follow from these cases ... +ddadd344 add 1E+3 1 -> 1001 +ddadd345 add 1E+15 1 -> 1000000000000001 +ddadd346 add 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded +ddadd347 add 1E+20 1 -> 1.000000000000000E+20 Inexact Rounded +ddadd348 add 1E+3 7 -> 1007 +ddadd349 add 1E+15 7 -> 1000000000000007 +ddadd350 add 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded +ddadd351 add 1E+20 7 -> 1.000000000000000E+20 Inexact Rounded + +-- tryzeros cases +rounding: half_up +ddadd360 add 0E+50 10000E+1 -> 1.0000E+5 +ddadd361 add 0E-50 10000E+1 -> 100000.0000000000 Rounded +ddadd362 add 10000E+1 0E-50 -> 100000.0000000000 Rounded +ddadd363 add 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact +ddadd364 add 9.999999999999999E+384 -9.999999999999999E+384 -> 0E+369 + +-- a curiosity from JSR 13 testing +rounding: half_down +ddadd370 add 999999999999999 815 -> 1000000000000814 +ddadd371 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact +rounding: half_up +ddadd372 add 999999999999999 815 -> 1000000000000814 +ddadd373 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact +rounding: half_even +ddadd374 add 999999999999999 815 -> 1000000000000814 +ddadd375 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact + +-- operands folded +ddadd380 add 1E+384 1E+384 -> 2.000000000000000E+384 Clamped +ddadd381 add 1E+380 1E+380 -> 2.00000000000E+380 Clamped +ddadd382 add 1E+376 1E+376 -> 2.0000000E+376 Clamped +ddadd383 add 1E+372 1E+372 -> 2.000E+372 Clamped +ddadd384 add 1E+370 1E+370 -> 2.0E+370 Clamped +ddadd385 add 1E+369 1E+369 -> 2E+369 +ddadd386 add 1E+368 1E+368 -> 2E+368 + +-- ulp replacement tests +ddadd400 add 1 77e-14 -> 1.00000000000077 +ddadd401 add 1 77e-15 -> 1.000000000000077 +ddadd402 add 1 77e-16 -> 1.000000000000008 Inexact Rounded +ddadd403 add 1 77e-17 -> 1.000000000000001 Inexact Rounded +ddadd404 add 1 77e-18 -> 1.000000000000000 Inexact Rounded +ddadd405 add 1 77e-19 -> 1.000000000000000 Inexact Rounded +ddadd406 add 1 77e-299 -> 1.000000000000000 Inexact Rounded + +ddadd410 add 10 77e-14 -> 10.00000000000077 +ddadd411 add 10 77e-15 -> 10.00000000000008 Inexact Rounded +ddadd412 add 10 77e-16 -> 10.00000000000001 Inexact Rounded +ddadd413 add 10 77e-17 -> 10.00000000000000 Inexact Rounded +ddadd414 add 10 77e-18 -> 10.00000000000000 Inexact Rounded +ddadd415 add 10 77e-19 -> 10.00000000000000 Inexact Rounded +ddadd416 add 10 77e-299 -> 10.00000000000000 Inexact Rounded + +ddadd420 add 77e-14 1 -> 1.00000000000077 +ddadd421 add 77e-15 1 -> 1.000000000000077 +ddadd422 add 77e-16 1 -> 1.000000000000008 Inexact Rounded +ddadd423 add 77e-17 1 -> 1.000000000000001 Inexact Rounded +ddadd424 add 77e-18 1 -> 1.000000000000000 Inexact Rounded +ddadd425 add 77e-19 1 -> 1.000000000000000 Inexact Rounded +ddadd426 add 77e-299 1 -> 1.000000000000000 Inexact Rounded + +ddadd430 add 77e-14 10 -> 10.00000000000077 +ddadd431 add 77e-15 10 -> 10.00000000000008 Inexact Rounded +ddadd432 add 77e-16 10 -> 10.00000000000001 Inexact Rounded +ddadd433 add 77e-17 10 -> 10.00000000000000 Inexact Rounded +ddadd434 add 77e-18 10 -> 10.00000000000000 Inexact Rounded +ddadd435 add 77e-19 10 -> 10.00000000000000 Inexact Rounded +ddadd436 add 77e-299 10 -> 10.00000000000000 Inexact Rounded + +-- fastpath boundary (more in dqadd) +-- 1234567890123456 +ddadd539 add '4444444444444444' '3333333333333333' -> '7777777777777777' +ddadd540 add '4444444444444444' '4444444444444444' -> '8888888888888888' +ddadd541 add '4444444444444444' '5555555555555555' -> '9999999999999999' +ddadd542 add '3333333333333333' '4444444444444444' -> '7777777777777777' +ddadd543 add '4444444444444444' '4444444444444444' -> '8888888888888888' +ddadd544 add '5555555555555555' '4444444444444444' -> '9999999999999999' +ddadd545 add '3000004000000000' '3000000000000040' -> '6000004000000040' +ddadd546 add '3000000400000000' '4000000000000400' -> '7000000400000400' +ddadd547 add '3000000040000000' '5000000000004000' -> '8000000040004000' +ddadd548 add '4000000004000000' '3000000000040000' -> '7000000004040000' +ddadd549 add '4000000000400000' '4000000000400000' -> '8000000000800000' +ddadd550 add '4000000000040000' '5000000004000000' -> '9000000004040000' +ddadd551 add '5000000000004000' '3000000040000000' -> '8000000040004000' +ddadd552 add '5000000000000400' '4000000400000000' -> '9000000400000400' +ddadd553 add '5000000000000040' '5000004000000000' -> 1.000000400000004E+16 Rounded +-- check propagation +ddadd554 add '8999999999999999' '0000000000000001' -> 9000000000000000 +ddadd555 add '0000000000000001' '8999999999999999' -> 9000000000000000 +ddadd556 add '0999999999999999' '0000000000000001' -> 1000000000000000 +ddadd557 add '0000000000000001' '0999999999999999' -> 1000000000000000 +ddadd558 add '4444444444444444' '4555555555555556' -> 9000000000000000 +ddadd559 add '4555555555555556' '4444444444444444' -> 9000000000000000 + +-- negative ulps +ddadd6440 add 1 -77e-14 -> 0.99999999999923 +ddadd6441 add 1 -77e-15 -> 0.999999999999923 +ddadd6442 add 1 -77e-16 -> 0.9999999999999923 +ddadd6443 add 1 -77e-17 -> 0.9999999999999992 Inexact Rounded +ddadd6444 add 1 -77e-18 -> 0.9999999999999999 Inexact Rounded +ddadd6445 add 1 -77e-19 -> 1.000000000000000 Inexact Rounded +ddadd6446 add 1 -77e-99 -> 1.000000000000000 Inexact Rounded + +ddadd6450 add 10 -77e-14 -> 9.99999999999923 +ddadd6451 add 10 -77e-15 -> 9.999999999999923 +ddadd6452 add 10 -77e-16 -> 9.999999999999992 Inexact Rounded +ddadd6453 add 10 -77e-17 -> 9.999999999999999 Inexact Rounded +ddadd6454 add 10 -77e-18 -> 10.00000000000000 Inexact Rounded +ddadd6455 add 10 -77e-19 -> 10.00000000000000 Inexact Rounded +ddadd6456 add 10 -77e-99 -> 10.00000000000000 Inexact Rounded + +ddadd6460 add -77e-14 1 -> 0.99999999999923 +ddadd6461 add -77e-15 1 -> 0.999999999999923 +ddadd6462 add -77e-16 1 -> 0.9999999999999923 +ddadd6463 add -77e-17 1 -> 0.9999999999999992 Inexact Rounded +ddadd6464 add -77e-18 1 -> 0.9999999999999999 Inexact Rounded +ddadd6465 add -77e-19 1 -> 1.000000000000000 Inexact Rounded +ddadd6466 add -77e-99 1 -> 1.000000000000000 Inexact Rounded + +ddadd6470 add -77e-14 10 -> 9.99999999999923 +ddadd6471 add -77e-15 10 -> 9.999999999999923 +ddadd6472 add -77e-16 10 -> 9.999999999999992 Inexact Rounded +ddadd6473 add -77e-17 10 -> 9.999999999999999 Inexact Rounded +ddadd6474 add -77e-18 10 -> 10.00000000000000 Inexact Rounded +ddadd6475 add -77e-19 10 -> 10.00000000000000 Inexact Rounded +ddadd6476 add -77e-99 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +ddadd6480 add -1 77e-14 -> -0.99999999999923 +ddadd6481 add -1 77e-15 -> -0.999999999999923 +ddadd6482 add -1 77e-16 -> -0.9999999999999923 +ddadd6483 add -1 77e-17 -> -0.9999999999999992 Inexact Rounded +ddadd6484 add -1 77e-18 -> -0.9999999999999999 Inexact Rounded +ddadd6485 add -1 77e-19 -> -1.000000000000000 Inexact Rounded +ddadd6486 add -1 77e-99 -> -1.000000000000000 Inexact Rounded + +ddadd6490 add -10 77e-14 -> -9.99999999999923 +ddadd6491 add -10 77e-15 -> -9.999999999999923 +ddadd6492 add -10 77e-16 -> -9.999999999999992 Inexact Rounded +ddadd6493 add -10 77e-17 -> -9.999999999999999 Inexact Rounded +ddadd6494 add -10 77e-18 -> -10.00000000000000 Inexact Rounded +ddadd6495 add -10 77e-19 -> -10.00000000000000 Inexact Rounded +ddadd6496 add -10 77e-99 -> -10.00000000000000 Inexact Rounded + +ddadd6500 add 77e-14 -1 -> -0.99999999999923 +ddadd6501 add 77e-15 -1 -> -0.999999999999923 +ddadd6502 add 77e-16 -1 -> -0.9999999999999923 +ddadd6503 add 77e-17 -1 -> -0.9999999999999992 Inexact Rounded +ddadd6504 add 77e-18 -1 -> -0.9999999999999999 Inexact Rounded +ddadd6505 add 77e-19 -1 -> -1.000000000000000 Inexact Rounded +ddadd6506 add 77e-99 -1 -> -1.000000000000000 Inexact Rounded + +ddadd6510 add 77e-14 -10 -> -9.99999999999923 +ddadd6511 add 77e-15 -10 -> -9.999999999999923 +ddadd6512 add 77e-16 -10 -> -9.999999999999992 Inexact Rounded +ddadd6513 add 77e-17 -10 -> -9.999999999999999 Inexact Rounded +ddadd6514 add 77e-18 -10 -> -10.00000000000000 Inexact Rounded +ddadd6515 add 77e-19 -10 -> -10.00000000000000 Inexact Rounded +ddadd6516 add 77e-99 -10 -> -10.00000000000000 Inexact Rounded + +-- and some more residue effects and different roundings +rounding: half_up +ddadd6540 add '6543210123456789' 0 -> '6543210123456789' +ddadd6541 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddadd6542 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddadd6543 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddadd6544 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddadd6545 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddadd6546 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddadd6547 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddadd6548 add '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +ddadd6549 add '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +ddadd6550 add '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +ddadd6551 add '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +ddadd6552 add '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +ddadd6553 add '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +ddadd6554 add '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +ddadd6555 add '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded +ddadd6556 add '6543210123456789' 1 -> '6543210123456790' +ddadd6557 add '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded +ddadd6558 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddadd6559 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +rounding: half_even +ddadd6560 add '6543210123456789' 0 -> '6543210123456789' +ddadd6561 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddadd6562 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddadd6563 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddadd6564 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddadd6565 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddadd6566 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddadd6567 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddadd6568 add '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +ddadd6569 add '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +ddadd6570 add '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +ddadd6571 add '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +ddadd6572 add '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +ddadd6573 add '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +ddadd6574 add '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +ddadd6575 add '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded +ddadd6576 add '6543210123456789' 1 -> '6543210123456790' +ddadd6577 add '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +ddadd6578 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddadd6579 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +-- critical few with even bottom digit... +ddadd7540 add '6543210123456788' 0.499999999 -> '6543210123456788' Inexact Rounded +ddadd7541 add '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded +ddadd7542 add '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded + +rounding: down +ddadd7550 add '6543210123456789' 0 -> '6543210123456789' +ddadd7551 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddadd7552 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddadd7553 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddadd7554 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddadd7555 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddadd7556 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddadd7557 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddadd7558 add '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded +ddadd7559 add '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded +ddadd7560 add '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded +ddadd7561 add '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded +ddadd7562 add '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded +ddadd7563 add '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded +ddadd7564 add '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded +ddadd7565 add '6543210123456789' 0.999999999 -> '6543210123456789' Inexact Rounded +ddadd7566 add '6543210123456789' 1 -> '6543210123456790' +ddadd7567 add '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +ddadd7568 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddadd7569 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +-- verify a query +rounding: down +ddadd7661 add 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded +ddadd7662 add 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded +ddadd7663 add 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded +ddadd7664 add 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded + +-- more zeros, etc. +rounding: half_even + +ddadd7701 add 5.00 1.00E-3 -> 5.00100 +ddadd7702 add 00.00 0.000 -> 0.000 +ddadd7703 add 00.00 0E-3 -> 0.000 +ddadd7704 add 0E-3 00.00 -> 0.000 + +ddadd7710 add 0E+3 00.00 -> 0.00 +ddadd7711 add 0E+3 00.0 -> 0.0 +ddadd7712 add 0E+3 00. -> 0 +ddadd7713 add 0E+3 00.E+1 -> 0E+1 +ddadd7714 add 0E+3 00.E+2 -> 0E+2 +ddadd7715 add 0E+3 00.E+3 -> 0E+3 +ddadd7716 add 0E+3 00.E+4 -> 0E+3 +ddadd7717 add 0E+3 00.E+5 -> 0E+3 +ddadd7718 add 0E+3 -00.0 -> 0.0 +ddadd7719 add 0E+3 -00. -> 0 +ddadd7731 add 0E+3 -00.E+1 -> 0E+1 + +ddadd7720 add 00.00 0E+3 -> 0.00 +ddadd7721 add 00.0 0E+3 -> 0.0 +ddadd7722 add 00. 0E+3 -> 0 +ddadd7723 add 00.E+1 0E+3 -> 0E+1 +ddadd7724 add 00.E+2 0E+3 -> 0E+2 +ddadd7725 add 00.E+3 0E+3 -> 0E+3 +ddadd7726 add 00.E+4 0E+3 -> 0E+3 +ddadd7727 add 00.E+5 0E+3 -> 0E+3 +ddadd7728 add -00.00 0E+3 -> 0.00 +ddadd7729 add -00.0 0E+3 -> 0.0 +ddadd7730 add -00. 0E+3 -> 0 + +ddadd7732 add 0 0 -> 0 +ddadd7733 add 0 -0 -> 0 +ddadd7734 add -0 0 -> 0 +ddadd7735 add -0 -0 -> -0 -- IEEE 854 special case + +ddadd7736 add 1 -1 -> 0 +ddadd7737 add -1 -1 -> -2 +ddadd7738 add 1 1 -> 2 +ddadd7739 add -1 1 -> 0 + +ddadd7741 add 0 -1 -> -1 +ddadd7742 add -0 -1 -> -1 +ddadd7743 add 0 1 -> 1 +ddadd7744 add -0 1 -> 1 +ddadd7745 add -1 0 -> -1 +ddadd7746 add -1 -0 -> -1 +ddadd7747 add 1 0 -> 1 +ddadd7748 add 1 -0 -> 1 + +ddadd7751 add 0.0 -1 -> -1.0 +ddadd7752 add -0.0 -1 -> -1.0 +ddadd7753 add 0.0 1 -> 1.0 +ddadd7754 add -0.0 1 -> 1.0 +ddadd7755 add -1.0 0 -> -1.0 +ddadd7756 add -1.0 -0 -> -1.0 +ddadd7757 add 1.0 0 -> 1.0 +ddadd7758 add 1.0 -0 -> 1.0 + +ddadd7761 add 0 -1.0 -> -1.0 +ddadd7762 add -0 -1.0 -> -1.0 +ddadd7763 add 0 1.0 -> 1.0 +ddadd7764 add -0 1.0 -> 1.0 +ddadd7765 add -1 0.0 -> -1.0 +ddadd7766 add -1 -0.0 -> -1.0 +ddadd7767 add 1 0.0 -> 1.0 +ddadd7768 add 1 -0.0 -> 1.0 + +ddadd7771 add 0.0 -1.0 -> -1.0 +ddadd7772 add -0.0 -1.0 -> -1.0 +ddadd7773 add 0.0 1.0 -> 1.0 +ddadd7774 add -0.0 1.0 -> 1.0 +ddadd7775 add -1.0 0.0 -> -1.0 +ddadd7776 add -1.0 -0.0 -> -1.0 +ddadd7777 add 1.0 0.0 -> 1.0 +ddadd7778 add 1.0 -0.0 -> 1.0 + +-- Specials +ddadd7780 add -Inf -Inf -> -Infinity +ddadd7781 add -Inf -1000 -> -Infinity +ddadd7782 add -Inf -1 -> -Infinity +ddadd7783 add -Inf -0 -> -Infinity +ddadd7784 add -Inf 0 -> -Infinity +ddadd7785 add -Inf 1 -> -Infinity +ddadd7786 add -Inf 1000 -> -Infinity +ddadd7787 add -1000 -Inf -> -Infinity +ddadd7788 add -Inf -Inf -> -Infinity +ddadd7789 add -1 -Inf -> -Infinity +ddadd7790 add -0 -Inf -> -Infinity +ddadd7791 add 0 -Inf -> -Infinity +ddadd7792 add 1 -Inf -> -Infinity +ddadd7793 add 1000 -Inf -> -Infinity +ddadd7794 add Inf -Inf -> NaN Invalid_operation + +ddadd7800 add Inf -Inf -> NaN Invalid_operation +ddadd7801 add Inf -1000 -> Infinity +ddadd7802 add Inf -1 -> Infinity +ddadd7803 add Inf -0 -> Infinity +ddadd7804 add Inf 0 -> Infinity +ddadd7805 add Inf 1 -> Infinity +ddadd7806 add Inf 1000 -> Infinity +ddadd7807 add Inf Inf -> Infinity +ddadd7808 add -1000 Inf -> Infinity +ddadd7809 add -Inf Inf -> NaN Invalid_operation +ddadd7810 add -1 Inf -> Infinity +ddadd7811 add -0 Inf -> Infinity +ddadd7812 add 0 Inf -> Infinity +ddadd7813 add 1 Inf -> Infinity +ddadd7814 add 1000 Inf -> Infinity +ddadd7815 add Inf Inf -> Infinity + +ddadd7821 add NaN -Inf -> NaN +ddadd7822 add NaN -1000 -> NaN +ddadd7823 add NaN -1 -> NaN +ddadd7824 add NaN -0 -> NaN +ddadd7825 add NaN 0 -> NaN +ddadd7826 add NaN 1 -> NaN +ddadd7827 add NaN 1000 -> NaN +ddadd7828 add NaN Inf -> NaN +ddadd7829 add NaN NaN -> NaN +ddadd7830 add -Inf NaN -> NaN +ddadd7831 add -1000 NaN -> NaN +ddadd7832 add -1 NaN -> NaN +ddadd7833 add -0 NaN -> NaN +ddadd7834 add 0 NaN -> NaN +ddadd7835 add 1 NaN -> NaN +ddadd7836 add 1000 NaN -> NaN +ddadd7837 add Inf NaN -> NaN + +ddadd7841 add sNaN -Inf -> NaN Invalid_operation +ddadd7842 add sNaN -1000 -> NaN Invalid_operation +ddadd7843 add sNaN -1 -> NaN Invalid_operation +ddadd7844 add sNaN -0 -> NaN Invalid_operation +ddadd7845 add sNaN 0 -> NaN Invalid_operation +ddadd7846 add sNaN 1 -> NaN Invalid_operation +ddadd7847 add sNaN 1000 -> NaN Invalid_operation +ddadd7848 add sNaN NaN -> NaN Invalid_operation +ddadd7849 add sNaN sNaN -> NaN Invalid_operation +ddadd7850 add NaN sNaN -> NaN Invalid_operation +ddadd7851 add -Inf sNaN -> NaN Invalid_operation +ddadd7852 add -1000 sNaN -> NaN Invalid_operation +ddadd7853 add -1 sNaN -> NaN Invalid_operation +ddadd7854 add -0 sNaN -> NaN Invalid_operation +ddadd7855 add 0 sNaN -> NaN Invalid_operation +ddadd7856 add 1 sNaN -> NaN Invalid_operation +ddadd7857 add 1000 sNaN -> NaN Invalid_operation +ddadd7858 add Inf sNaN -> NaN Invalid_operation +ddadd7859 add NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddadd7861 add NaN1 -Inf -> NaN1 +ddadd7862 add +NaN2 -1000 -> NaN2 +ddadd7863 add NaN3 1000 -> NaN3 +ddadd7864 add NaN4 Inf -> NaN4 +ddadd7865 add NaN5 +NaN6 -> NaN5 +ddadd7866 add -Inf NaN7 -> NaN7 +ddadd7867 add -1000 NaN8 -> NaN8 +ddadd7868 add 1000 NaN9 -> NaN9 +ddadd7869 add Inf +NaN10 -> NaN10 +ddadd7871 add sNaN11 -Inf -> NaN11 Invalid_operation +ddadd7872 add sNaN12 -1000 -> NaN12 Invalid_operation +ddadd7873 add sNaN13 1000 -> NaN13 Invalid_operation +ddadd7874 add sNaN14 NaN17 -> NaN14 Invalid_operation +ddadd7875 add sNaN15 sNaN18 -> NaN15 Invalid_operation +ddadd7876 add NaN16 sNaN19 -> NaN19 Invalid_operation +ddadd7877 add -Inf +sNaN20 -> NaN20 Invalid_operation +ddadd7878 add -1000 sNaN21 -> NaN21 Invalid_operation +ddadd7879 add 1000 sNaN22 -> NaN22 Invalid_operation +ddadd7880 add Inf sNaN23 -> NaN23 Invalid_operation +ddadd7881 add +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddadd7882 add -NaN26 NaN28 -> -NaN26 +ddadd7883 add -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddadd7884 add 1000 -NaN30 -> -NaN30 +ddadd7885 add 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Here we explore near the boundary of rounding a subnormal to Nmin +ddadd7575 add 1E-383 -1E-398 -> 9.99999999999999E-384 Subnormal +ddadd7576 add -1E-383 +1E-398 -> -9.99999999999999E-384 Subnormal + +-- and another curious case +ddadd7577 add 7.000000000000E-385 -1.00000E-391 -> 6.999999000000E-385 Subnormal + +-- check overflow edge case +-- 1234567890123456 +ddadd7972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 +ddadd7973 add 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded +ddadd7974 add 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded +ddadd7975 add 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded +ddadd7976 add 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded +ddadd7977 add 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded +ddadd7978 add 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded +ddadd7979 add 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded +ddadd7980 add 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded +ddadd7981 add 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded +ddadd7982 add 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded +ddadd7983 add 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded +ddadd7984 add 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded + +ddadd7985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 +ddadd7986 add -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded +ddadd7987 add -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded +ddadd7988 add -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded +ddadd7989 add -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded +ddadd7990 add -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded +ddadd7991 add -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded +ddadd7992 add -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded +ddadd7993 add -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded +ddadd7994 add -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded +ddadd7995 add -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded +ddadd7996 add -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded +ddadd7997 add -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +ddadd71100 add 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact +ddadd71101 add 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact +ddadd71103 add +1 -1e-383 -> 0.9999999999999999 Rounded Inexact +ddadd71104 add 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact +ddadd71105 add 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact +ddadd71106 add 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact +ddadd71107 add 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact +ddadd71108 add 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact +ddadd71109 add 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact + +rounding: ceiling +ddadd71110 add -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact +ddadd71111 add -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact +ddadd71113 add -1 +1e-383 -> -0.9999999999999999 Rounded Inexact +ddadd71114 add -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact +ddadd71115 add -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact +ddadd71116 add -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact +ddadd71117 add -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact +ddadd71118 add -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact +ddadd71119 add -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +ddadd71300 add 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded +ddadd71310 add 1E16 -0.51 -> 9999999999999999 Inexact Rounded +ddadd71311 add 1E16 -0.501 -> 9999999999999999 Inexact Rounded +ddadd71312 add 1E16 -0.5001 -> 9999999999999999 Inexact Rounded +ddadd71313 add 1E16 -0.50001 -> 9999999999999999 Inexact Rounded +ddadd71314 add 1E16 -0.500001 -> 9999999999999999 Inexact Rounded +ddadd71315 add 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded +ddadd71316 add 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded +ddadd71317 add 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded +ddadd71318 add 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded +ddadd71319 add 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded +ddadd71320 add 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded +ddadd71321 add 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded +ddadd71322 add 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded +ddadd71323 add 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded +ddadd71324 add 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded +ddadd71325 add 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71326 add 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71327 add 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71328 add 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71329 add 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71330 add 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71331 add 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71332 add 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71333 add 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71334 add 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71335 add 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71336 add 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71337 add 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71338 add 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded +ddadd71339 add 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded + +ddadd71340 add 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded +ddadd71341 add 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded + +ddadd71349 add 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded +ddadd71350 add 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded +ddadd71351 add 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded +ddadd71352 add 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded +ddadd71353 add 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded +ddadd71354 add 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded +ddadd71355 add 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded +ddadd71356 add 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded +ddadd71357 add 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded +ddadd71358 add 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded +ddadd71359 add 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded +ddadd71360 add 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded +ddadd71361 add 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded +ddadd71362 add 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded +ddadd71363 add 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded +ddadd71364 add 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded +ddadd71365 add 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71367 add 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71368 add 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71369 add 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71370 add 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71371 add 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71372 add 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71373 add 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71374 add 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71375 add 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71376 add 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71377 add 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71378 add 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71379 add 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded +ddadd71380 add 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded +ddadd71381 add 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded +ddadd71382 add 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71383 add 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71384 add 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71385 add 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71386 add 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71387 add 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71388 add 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71389 add 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71390 add 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71391 add 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71392 add 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71393 add 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71394 add 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71395 add 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded +ddadd71396 add 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +ddadd71420 add 0 1.123456789012345 -> 1.123456789012345 +ddadd71421 add 0 1.123456789012345E-1 -> 0.1123456789012345 +ddadd71422 add 0 1.123456789012345E-2 -> 0.01123456789012345 +ddadd71423 add 0 1.123456789012345E-3 -> 0.001123456789012345 +ddadd71424 add 0 1.123456789012345E-4 -> 0.0001123456789012345 +ddadd71425 add 0 1.123456789012345E-5 -> 0.00001123456789012345 +ddadd71426 add 0 1.123456789012345E-6 -> 0.000001123456789012345 +ddadd71427 add 0 1.123456789012345E-7 -> 1.123456789012345E-7 +ddadd71428 add 0 1.123456789012345E-8 -> 1.123456789012345E-8 +ddadd71429 add 0 1.123456789012345E-9 -> 1.123456789012345E-9 +ddadd71430 add 0 1.123456789012345E-10 -> 1.123456789012345E-10 +ddadd71431 add 0 1.123456789012345E-11 -> 1.123456789012345E-11 +ddadd71432 add 0 1.123456789012345E-12 -> 1.123456789012345E-12 +ddadd71433 add 0 1.123456789012345E-13 -> 1.123456789012345E-13 +ddadd71434 add 0 1.123456789012345E-14 -> 1.123456789012345E-14 +ddadd71435 add 0 1.123456789012345E-15 -> 1.123456789012345E-15 +ddadd71436 add 0 1.123456789012345E-16 -> 1.123456789012345E-16 +ddadd71437 add 0 1.123456789012345E-17 -> 1.123456789012345E-17 +ddadd71438 add 0 1.123456789012345E-18 -> 1.123456789012345E-18 +ddadd71439 add 0 1.123456789012345E-19 -> 1.123456789012345E-19 + +-- same, reversed 0 +ddadd71440 add 1.123456789012345 0 -> 1.123456789012345 +ddadd71441 add 1.123456789012345E-1 0 -> 0.1123456789012345 +ddadd71442 add 1.123456789012345E-2 0 -> 0.01123456789012345 +ddadd71443 add 1.123456789012345E-3 0 -> 0.001123456789012345 +ddadd71444 add 1.123456789012345E-4 0 -> 0.0001123456789012345 +ddadd71445 add 1.123456789012345E-5 0 -> 0.00001123456789012345 +ddadd71446 add 1.123456789012345E-6 0 -> 0.000001123456789012345 +ddadd71447 add 1.123456789012345E-7 0 -> 1.123456789012345E-7 +ddadd71448 add 1.123456789012345E-8 0 -> 1.123456789012345E-8 +ddadd71449 add 1.123456789012345E-9 0 -> 1.123456789012345E-9 +ddadd71450 add 1.123456789012345E-10 0 -> 1.123456789012345E-10 +ddadd71451 add 1.123456789012345E-11 0 -> 1.123456789012345E-11 +ddadd71452 add 1.123456789012345E-12 0 -> 1.123456789012345E-12 +ddadd71453 add 1.123456789012345E-13 0 -> 1.123456789012345E-13 +ddadd71454 add 1.123456789012345E-14 0 -> 1.123456789012345E-14 +ddadd71455 add 1.123456789012345E-15 0 -> 1.123456789012345E-15 +ddadd71456 add 1.123456789012345E-16 0 -> 1.123456789012345E-16 +ddadd71457 add 1.123456789012345E-17 0 -> 1.123456789012345E-17 +ddadd71458 add 1.123456789012345E-18 0 -> 1.123456789012345E-18 +ddadd71459 add 1.123456789012345E-19 0 -> 1.123456789012345E-19 + +-- same, Es on the 0 +ddadd71460 add 1.123456789012345 0E-0 -> 1.123456789012345 +ddadd71461 add 1.123456789012345 0E-1 -> 1.123456789012345 +ddadd71462 add 1.123456789012345 0E-2 -> 1.123456789012345 +ddadd71463 add 1.123456789012345 0E-3 -> 1.123456789012345 +ddadd71464 add 1.123456789012345 0E-4 -> 1.123456789012345 +ddadd71465 add 1.123456789012345 0E-5 -> 1.123456789012345 +ddadd71466 add 1.123456789012345 0E-6 -> 1.123456789012345 +ddadd71467 add 1.123456789012345 0E-7 -> 1.123456789012345 +ddadd71468 add 1.123456789012345 0E-8 -> 1.123456789012345 +ddadd71469 add 1.123456789012345 0E-9 -> 1.123456789012345 +ddadd71470 add 1.123456789012345 0E-10 -> 1.123456789012345 +ddadd71471 add 1.123456789012345 0E-11 -> 1.123456789012345 +ddadd71472 add 1.123456789012345 0E-12 -> 1.123456789012345 +ddadd71473 add 1.123456789012345 0E-13 -> 1.123456789012345 +ddadd71474 add 1.123456789012345 0E-14 -> 1.123456789012345 +ddadd71475 add 1.123456789012345 0E-15 -> 1.123456789012345 +-- next four flag Rounded because the 0 extends the result +ddadd71476 add 1.123456789012345 0E-16 -> 1.123456789012345 Rounded +ddadd71477 add 1.123456789012345 0E-17 -> 1.123456789012345 Rounded +ddadd71478 add 1.123456789012345 0E-18 -> 1.123456789012345 Rounded +ddadd71479 add 1.123456789012345 0E-19 -> 1.123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +ddadd71500 add 0 0E-19 -> 0E-19 +ddadd71501 add -0 0E-19 -> 0E-19 +ddadd71502 add 0 -0E-19 -> 0E-19 +ddadd71503 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71511 add -11 11 -> 0 +ddadd71512 add 11 -11 -> 0 + +rounding: half_down +-- exact zeros from zeros +ddadd71520 add 0 0E-19 -> 0E-19 +ddadd71521 add -0 0E-19 -> 0E-19 +ddadd71522 add 0 -0E-19 -> 0E-19 +ddadd71523 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71531 add -11 11 -> 0 +ddadd71532 add 11 -11 -> 0 + +rounding: half_even +-- exact zeros from zeros +ddadd71540 add 0 0E-19 -> 0E-19 +ddadd71541 add -0 0E-19 -> 0E-19 +ddadd71542 add 0 -0E-19 -> 0E-19 +ddadd71543 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71551 add -11 11 -> 0 +ddadd71552 add 11 -11 -> 0 + +rounding: up +-- exact zeros from zeros +ddadd71560 add 0 0E-19 -> 0E-19 +ddadd71561 add -0 0E-19 -> 0E-19 +ddadd71562 add 0 -0E-19 -> 0E-19 +ddadd71563 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71571 add -11 11 -> 0 +ddadd71572 add 11 -11 -> 0 + +rounding: down +-- exact zeros from zeros +ddadd71580 add 0 0E-19 -> 0E-19 +ddadd71581 add -0 0E-19 -> 0E-19 +ddadd71582 add 0 -0E-19 -> 0E-19 +ddadd71583 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71591 add -11 11 -> 0 +ddadd71592 add 11 -11 -> 0 + +rounding: ceiling +-- exact zeros from zeros +ddadd71600 add 0 0E-19 -> 0E-19 +ddadd71601 add -0 0E-19 -> 0E-19 +ddadd71602 add 0 -0E-19 -> 0E-19 +ddadd71603 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71611 add -11 11 -> 0 +ddadd71612 add 11 -11 -> 0 + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +ddadd71620 add 0 0E-19 -> 0E-19 +ddadd71621 add -0 0E-19 -> -0E-19 -- * +ddadd71622 add 0 -0E-19 -> -0E-19 -- * +ddadd71623 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71631 add -11 11 -> -0 -- * +ddadd71632 add 11 -11 -> -0 -- * + +-- Examples from SQL proposal (Krishna Kulkarni) +ddadd71701 add 130E-2 120E-2 -> 2.50 +ddadd71702 add 130E-2 12E-1 -> 2.50 +ddadd71703 add 130E-2 1E0 -> 2.30 +ddadd71704 add 1E2 1E4 -> 1.01E+4 +ddadd71705 add 130E-2 -120E-2 -> 0.10 +ddadd71706 add 130E-2 -12E-1 -> 0.10 +ddadd71707 add 130E-2 -1E0 -> 0.30 +ddadd71708 add 1E2 -1E4 -> -9.9E+3 + +-- query from Vincent Kulandaisamy +rounding: ceiling +ddadd71801 add 7.8822773805862E+277 -5.1757503820663E-21 -> 7.882277380586200E+277 Inexact Rounded +ddadd71802 add 7.882277380586200E+277 12.341 -> 7.882277380586201E+277 Inexact Rounded +ddadd71803 add 7.882277380586201E+277 2.7270545046613E-31 -> 7.882277380586202E+277 Inexact Rounded + +ddadd71811 add 12.341 -5.1757503820663E-21 -> 12.34100000000000 Inexact Rounded +ddadd71812 add 12.34100000000000 2.7270545046613E-31 -> 12.34100000000001 Inexact Rounded +ddadd71813 add 12.34100000000001 7.8822773805862E+277 -> 7.882277380586201E+277 Inexact Rounded + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +ddadd75001 add 1234567890123456 1 -> 1234567890123457 +ddadd75002 add 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded +ddadd75003 add 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded +ddadd75004 add 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded +ddadd75005 add 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded +ddadd75006 add 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded +ddadd75007 add 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded +ddadd75008 add 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded +ddadd75009 add 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded +ddadd75010 add 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded +ddadd75011 add 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded +ddadd75012 add 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded +ddadd75013 add 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded +ddadd75014 add 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded +ddadd75015 add 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded +ddadd75016 add 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded +ddadd75017 add 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded +ddadd75018 add 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded +ddadd75019 add 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded +ddadd75020 add 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded +ddadd75021 add 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded + +-- widening second argument at gap +ddadd75030 add 12345678 1 -> 12345679 +ddadd75031 add 12345678 0.1 -> 12345678.1 +ddadd75032 add 12345678 0.12 -> 12345678.12 +ddadd75033 add 12345678 0.123 -> 12345678.123 +ddadd75034 add 12345678 0.1234 -> 12345678.1234 +ddadd75035 add 12345678 0.12345 -> 12345678.12345 +ddadd75036 add 12345678 0.123456 -> 12345678.123456 +ddadd75037 add 12345678 0.1234567 -> 12345678.1234567 +ddadd75038 add 12345678 0.12345678 -> 12345678.12345678 +ddadd75039 add 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded +ddadd75040 add 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded +ddadd75041 add 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded +ddadd75042 add 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded +ddadd75043 add 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded +ddadd75044 add 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded +ddadd75045 add 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded +ddadd75046 add 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded +ddadd75047 add 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded +ddadd75048 add 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded +ddadd75049 add 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +ddadd75050 add 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded +ddadd75051 add 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded +ddadd75052 add 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded +ddadd75053 add 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded +ddadd75054 add 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded +ddadd75055 add 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded +ddadd75056 add 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded +ddadd75057 add 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded +ddadd75060 add 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded +ddadd75061 add 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded +ddadd75062 add 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded +ddadd75063 add 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded +ddadd75064 add 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded +ddadd75065 add 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded +ddadd75066 add 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded +ddadd75067 add 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +ddadd75070 add 12345678 1E-8 -> 12345678.00000001 +ddadd75071 add 12345678 1E-9 -> 12345678.00000001 Inexact Rounded +ddadd75072 add 12345678 1E-10 -> 12345678.00000001 Inexact Rounded +ddadd75073 add 12345678 1E-11 -> 12345678.00000001 Inexact Rounded +ddadd75074 add 12345678 1E-12 -> 12345678.00000001 Inexact Rounded +ddadd75075 add 12345678 1E-13 -> 12345678.00000001 Inexact Rounded +ddadd75076 add 12345678 1E-14 -> 12345678.00000001 Inexact Rounded +ddadd75077 add 12345678 1E-15 -> 12345678.00000001 Inexact Rounded +ddadd75078 add 12345678 1E-16 -> 12345678.00000001 Inexact Rounded +ddadd75079 add 12345678 1E-17 -> 12345678.00000001 Inexact Rounded +ddadd75080 add 12345678 1E-18 -> 12345678.00000001 Inexact Rounded +ddadd75081 add 12345678 1E-19 -> 12345678.00000001 Inexact Rounded +ddadd75082 add 12345678 1E-20 -> 12345678.00000001 Inexact Rounded +ddadd75083 add 12345678 1E-25 -> 12345678.00000001 Inexact Rounded +ddadd75084 add 12345678 1E-30 -> 12345678.00000001 Inexact Rounded +ddadd75085 add 12345678 1E-31 -> 12345678.00000001 Inexact Rounded +ddadd75086 add 12345678 1E-32 -> 12345678.00000001 Inexact Rounded +ddadd75087 add 12345678 1E-33 -> 12345678.00000001 Inexact Rounded +ddadd75088 add 12345678 1E-34 -> 12345678.00000001 Inexact Rounded +ddadd75089 add 12345678 1E-35 -> 12345678.00000001 Inexact Rounded + +-- Punit's +ddadd75100 add 1.000 -200.000 -> -199.000 + +-- Rounding swathe +rounding: half_even +ddadd81100 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81101 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81102 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81103 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81104 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81105 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81106 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81107 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81108 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81109 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81120 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81121 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: half_up +ddadd81200 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81201 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81202 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81203 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81204 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81205 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81206 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81207 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81208 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81209 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81220 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81221 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: half_down +ddadd81300 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81301 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81302 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81303 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81304 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81305 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81306 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81307 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81308 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81309 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81320 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81321 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: up +ddadd81400 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81401 add .2301 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81402 add .2310 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81403 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81404 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81405 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81406 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81407 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81408 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81409 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81411 add -.2399 -12345678901234.00 -> -12345678901234.24 Inexact Rounded +ddadd81420 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81421 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: down +ddadd81500 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81501 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81502 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81503 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81504 add .2351 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81505 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81506 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81507 add .2360 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81508 add .2370 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81509 add .2399 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81511 add -.2399 -12345678901234.00 -> -12345678901234.23 Inexact Rounded +ddadd81520 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded +ddadd81521 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded + +rounding: ceiling +ddadd81600 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81601 add .2301 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81602 add .2310 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81603 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81604 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81605 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81606 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81607 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81608 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81609 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81611 add -.2399 -12345678901234.00 -> -12345678901234.23 Inexact Rounded +ddadd81620 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81621 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded + +rounding: floor +ddadd81700 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81701 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81702 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81703 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81704 add .2351 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81705 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81706 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81707 add .2360 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81708 add .2370 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81709 add .2399 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81711 add -.2399 -12345678901234.00 -> -12345678901234.24 Inexact Rounded +ddadd81720 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded +ddadd81721 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: 05up +ddadd81800 add .2000 12345678901234.00 -> 12345678901234.20 Rounded +ddadd81801 add .2001 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81802 add .2010 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81803 add .2050 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81804 add .2051 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81807 add .2060 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81808 add .2070 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81809 add .2099 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81811 add -.2099 -12345678901234.00 -> -12345678901234.21 Inexact Rounded +ddadd81820 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded +ddadd81821 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded + +ddadd81900 add .2100 12345678901234.00 -> 12345678901234.21 Rounded +ddadd81901 add .2101 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81902 add .2110 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81903 add .2150 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81904 add .2151 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81907 add .2160 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81908 add .2170 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81909 add .2199 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81911 add -.2199 -12345678901234.00 -> -12345678901234.21 Inexact Rounded + +ddadd82000 add .2400 12345678901234.00 -> 12345678901234.24 Rounded +ddadd82001 add .2401 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82002 add .2410 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82003 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82004 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82007 add .2460 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82008 add .2470 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82009 add .2499 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82011 add -.2499 -12345678901234.00 -> -12345678901234.24 Inexact Rounded + +ddadd82100 add .2500 12345678901234.00 -> 12345678901234.25 Rounded +ddadd82101 add .2501 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82102 add .2510 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82103 add .2550 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82104 add .2551 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82107 add .2560 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82108 add .2570 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82109 add .2599 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82111 add -.2599 -12345678901234.00 -> -12345678901234.26 Inexact Rounded + +ddadd82200 add .2600 12345678901234.00 -> 12345678901234.26 Rounded +ddadd82201 add .2601 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82202 add .2610 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82203 add .2650 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82204 add .2651 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82207 add .2660 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82208 add .2670 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82209 add .2699 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82211 add -.2699 -12345678901234.00 -> -12345678901234.26 Inexact Rounded + +ddadd82300 add .2900 12345678901234.00 -> 12345678901234.29 Rounded +ddadd82301 add .2901 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82302 add .2910 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82303 add .2950 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82304 add .2951 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82307 add .2960 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82308 add .2970 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82309 add .2999 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82311 add -.2999 -12345678901234.00 -> -12345678901234.29 Inexact Rounded + +-- Null tests +ddadd9990 add 10 # -> NaN Invalid_operation +ddadd9991 add # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddAnd.decTest b/Lib/test/decimaltestdata/ddAnd.decTest index 676517548c6..64a9f92df9a 100644 --- a/Lib/test/decimaltestdata/ddAnd.decTest +++ b/Lib/test/decimaltestdata/ddAnd.decTest @@ -1,347 +1,347 @@ ------------------------------------------------------------------------- --- ddAnd.decTest -- digitwise logical AND for decDoubles -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check (truth table) -ddand001 and 0 0 -> 0 -ddand002 and 0 1 -> 0 -ddand003 and 1 0 -> 0 -ddand004 and 1 1 -> 1 -ddand005 and 1100 1010 -> 1000 --- and at msd and msd-1 --- 1234567890123456 1234567890123456 1234567890123456 -ddand006 and 0000000000000000 0000000000000000 -> 0 -ddand007 and 0000000000000000 1000000000000000 -> 0 -ddand008 and 1000000000000000 0000000000000000 -> 0 -ddand009 and 1000000000000000 1000000000000000 -> 1000000000000000 -ddand010 and 0000000000000000 0000000000000000 -> 0 -ddand011 and 0000000000000000 0100000000000000 -> 0 -ddand012 and 0100000000000000 0000000000000000 -> 0 -ddand013 and 0100000000000000 0100000000000000 -> 100000000000000 - --- Various lengths --- 1234567890123456 1234567890123456 1234567890123456 -ddand021 and 1111111111111111 1111111111111111 -> 1111111111111111 -ddand024 and 1111111111111111 111111111111111 -> 111111111111111 -ddand025 and 1111111111111111 11111111111111 -> 11111111111111 -ddand026 and 1111111111111111 1111111111111 -> 1111111111111 -ddand027 and 1111111111111111 111111111111 -> 111111111111 -ddand028 and 1111111111111111 11111111111 -> 11111111111 -ddand029 and 1111111111111111 1111111111 -> 1111111111 -ddand030 and 1111111111111111 111111111 -> 111111111 -ddand031 and 1111111111111111 11111111 -> 11111111 -ddand032 and 1111111111111111 1111111 -> 1111111 -ddand033 and 1111111111111111 111111 -> 111111 -ddand034 and 1111111111111111 11111 -> 11111 -ddand035 and 1111111111111111 1111 -> 1111 -ddand036 and 1111111111111111 111 -> 111 -ddand037 and 1111111111111111 11 -> 11 -ddand038 and 1111111111111111 1 -> 1 -ddand039 and 1111111111111111 0 -> 0 - -ddand040 and 1111111111111111 1111111111111111 -> 1111111111111111 -ddand041 and 111111111111111 1111111111111111 -> 111111111111111 -ddand042 and 111111111111111 1111111111111111 -> 111111111111111 -ddand043 and 11111111111111 1111111111111111 -> 11111111111111 -ddand044 and 1111111111111 1111111111111111 -> 1111111111111 -ddand045 and 111111111111 1111111111111111 -> 111111111111 -ddand046 and 11111111111 1111111111111111 -> 11111111111 -ddand047 and 1111111111 1111111111111111 -> 1111111111 -ddand048 and 111111111 1111111111111111 -> 111111111 -ddand049 and 11111111 1111111111111111 -> 11111111 -ddand050 and 1111111 1111111111111111 -> 1111111 -ddand051 and 111111 1111111111111111 -> 111111 -ddand052 and 11111 1111111111111111 -> 11111 -ddand053 and 1111 1111111111111111 -> 1111 -ddand054 and 111 1111111111111111 -> 111 -ddand055 and 11 1111111111111111 -> 11 -ddand056 and 1 1111111111111111 -> 1 -ddand057 and 0 1111111111111111 -> 0 - -ddand150 and 1111111111 1 -> 1 -ddand151 and 111111111 1 -> 1 -ddand152 and 11111111 1 -> 1 -ddand153 and 1111111 1 -> 1 -ddand154 and 111111 1 -> 1 -ddand155 and 11111 1 -> 1 -ddand156 and 1111 1 -> 1 -ddand157 and 111 1 -> 1 -ddand158 and 11 1 -> 1 -ddand159 and 1 1 -> 1 - -ddand160 and 1111111111 0 -> 0 -ddand161 and 111111111 0 -> 0 -ddand162 and 11111111 0 -> 0 -ddand163 and 1111111 0 -> 0 -ddand164 and 111111 0 -> 0 -ddand165 and 11111 0 -> 0 -ddand166 and 1111 0 -> 0 -ddand167 and 111 0 -> 0 -ddand168 and 11 0 -> 0 -ddand169 and 1 0 -> 0 - -ddand170 and 1 1111111111 -> 1 -ddand171 and 1 111111111 -> 1 -ddand172 and 1 11111111 -> 1 -ddand173 and 1 1111111 -> 1 -ddand174 and 1 111111 -> 1 -ddand175 and 1 11111 -> 1 -ddand176 and 1 1111 -> 1 -ddand177 and 1 111 -> 1 -ddand178 and 1 11 -> 1 -ddand179 and 1 1 -> 1 - -ddand180 and 0 1111111111 -> 0 -ddand181 and 0 111111111 -> 0 -ddand182 and 0 11111111 -> 0 -ddand183 and 0 1111111 -> 0 -ddand184 and 0 111111 -> 0 -ddand185 and 0 11111 -> 0 -ddand186 and 0 1111 -> 0 -ddand187 and 0 111 -> 0 -ddand188 and 0 11 -> 0 -ddand189 and 0 1 -> 0 - -ddand090 and 011111111 111111111 -> 11111111 -ddand091 and 101111111 111111111 -> 101111111 -ddand092 and 110111111 111111111 -> 110111111 -ddand093 and 111011111 111111111 -> 111011111 -ddand094 and 111101111 111111111 -> 111101111 -ddand095 and 111110111 111111111 -> 111110111 -ddand096 and 111111011 111111111 -> 111111011 -ddand097 and 111111101 111111111 -> 111111101 -ddand098 and 111111110 111111111 -> 111111110 - -ddand100 and 111111111 011111111 -> 11111111 -ddand101 and 111111111 101111111 -> 101111111 -ddand102 and 111111111 110111111 -> 110111111 -ddand103 and 111111111 111011111 -> 111011111 -ddand104 and 111111111 111101111 -> 111101111 -ddand105 and 111111111 111110111 -> 111110111 -ddand106 and 111111111 111111011 -> 111111011 -ddand107 and 111111111 111111101 -> 111111101 -ddand108 and 111111111 111111110 -> 111111110 - --- non-0/1 should not be accepted, nor should signs -ddand220 and 111111112 111111111 -> NaN Invalid_operation -ddand221 and 333333333 333333333 -> NaN Invalid_operation -ddand222 and 555555555 555555555 -> NaN Invalid_operation -ddand223 and 777777777 777777777 -> NaN Invalid_operation -ddand224 and 999999999 999999999 -> NaN Invalid_operation -ddand225 and 222222222 999999999 -> NaN Invalid_operation -ddand226 and 444444444 999999999 -> NaN Invalid_operation -ddand227 and 666666666 999999999 -> NaN Invalid_operation -ddand228 and 888888888 999999999 -> NaN Invalid_operation -ddand229 and 999999999 222222222 -> NaN Invalid_operation -ddand230 and 999999999 444444444 -> NaN Invalid_operation -ddand231 and 999999999 666666666 -> NaN Invalid_operation -ddand232 and 999999999 888888888 -> NaN Invalid_operation --- a few randoms -ddand240 and 567468689 -934981942 -> NaN Invalid_operation -ddand241 and 567367689 934981942 -> NaN Invalid_operation -ddand242 and -631917772 -706014634 -> NaN Invalid_operation -ddand243 and -756253257 138579234 -> NaN Invalid_operation -ddand244 and 835590149 567435400 -> NaN Invalid_operation --- test MSD -ddand250 and 2000000000000000 1000000000000000 -> NaN Invalid_operation -ddand251 and 7000000000000000 1000000000000000 -> NaN Invalid_operation -ddand252 and 8000000000000000 1000000000000000 -> NaN Invalid_operation -ddand253 and 9000000000000000 1000000000000000 -> NaN Invalid_operation -ddand254 and 2000000000000000 0000000000000000 -> NaN Invalid_operation -ddand255 and 7000000000000000 0000000000000000 -> NaN Invalid_operation -ddand256 and 8000000000000000 0000000000000000 -> NaN Invalid_operation -ddand257 and 9000000000000000 0000000000000000 -> NaN Invalid_operation -ddand258 and 1000000000000000 2000000000000000 -> NaN Invalid_operation -ddand259 and 1000000000000000 7000000000000000 -> NaN Invalid_operation -ddand260 and 1000000000000000 8000000000000000 -> NaN Invalid_operation -ddand261 and 1000000000000000 9000000000000000 -> NaN Invalid_operation -ddand262 and 0000000000000000 2000000000000000 -> NaN Invalid_operation -ddand263 and 0000000000000000 7000000000000000 -> NaN Invalid_operation -ddand264 and 0000000000000000 8000000000000000 -> NaN Invalid_operation -ddand265 and 0000000000000000 9000000000000000 -> NaN Invalid_operation --- test MSD-1 -ddand270 and 0200001000000000 1000100000000010 -> NaN Invalid_operation -ddand271 and 0700000100000000 1000010000000100 -> NaN Invalid_operation -ddand272 and 0800000010000000 1000001000001000 -> NaN Invalid_operation -ddand273 and 0900000001000000 1000000100010000 -> NaN Invalid_operation -ddand274 and 1000000000100000 0200000010100000 -> NaN Invalid_operation -ddand275 and 1000000000010000 0700000001000000 -> NaN Invalid_operation -ddand276 and 1000000000001000 0800000010100000 -> NaN Invalid_operation -ddand277 and 1000000000000100 0900000000010000 -> NaN Invalid_operation --- test LSD -ddand280 and 0010000000000002 1000000100000001 -> NaN Invalid_operation -ddand281 and 0001000000000007 1000001000000011 -> NaN Invalid_operation -ddand282 and 0000100000000008 1000010000000001 -> NaN Invalid_operation -ddand283 and 0000010000000009 1000100000000001 -> NaN Invalid_operation -ddand284 and 1000001000000000 0001000000000002 -> NaN Invalid_operation -ddand285 and 1000000100000000 0010000000000007 -> NaN Invalid_operation -ddand286 and 1000000010000000 0100000000000008 -> NaN Invalid_operation -ddand287 and 1000000001000000 1000000000000009 -> NaN Invalid_operation --- test Middie -ddand288 and 0010000020000000 1000001000000000 -> NaN Invalid_operation -ddand289 and 0001000070000001 1000000100000000 -> NaN Invalid_operation -ddand290 and 0000100080000010 1000000010000000 -> NaN Invalid_operation -ddand291 and 0000010090000100 1000000001000000 -> NaN Invalid_operation -ddand292 and 1000001000001000 0000000020100000 -> NaN Invalid_operation -ddand293 and 1000000100010000 0000000070010000 -> NaN Invalid_operation -ddand294 and 1000000010100000 0000000080001000 -> NaN Invalid_operation -ddand295 and 1000000001000000 0000000090000100 -> NaN Invalid_operation --- signs -ddand296 and -1000000001000000 -0000010000000100 -> NaN Invalid_operation -ddand297 and -1000000001000000 0000000010000100 -> NaN Invalid_operation -ddand298 and 1000000001000000 -0000001000000100 -> NaN Invalid_operation -ddand299 and 1000000001000000 0000000011000100 -> 1000000 - --- Nmax, Nmin, Ntiny-like -ddand331 and 2 9.99999999E+199 -> NaN Invalid_operation -ddand332 and 3 1E-199 -> NaN Invalid_operation -ddand333 and 4 1.00000000E-199 -> NaN Invalid_operation -ddand334 and 5 1E-100 -> NaN Invalid_operation -ddand335 and 6 -1E-100 -> NaN Invalid_operation -ddand336 and 7 -1.00000000E-199 -> NaN Invalid_operation -ddand337 and 8 -1E-199 -> NaN Invalid_operation -ddand338 and 9 -9.99999999E+199 -> NaN Invalid_operation -ddand341 and 9.99999999E+199 -18 -> NaN Invalid_operation -ddand342 and 1E-199 01 -> NaN Invalid_operation -ddand343 and 1.00000000E-199 -18 -> NaN Invalid_operation -ddand344 and 1E-100 18 -> NaN Invalid_operation -ddand345 and -1E-100 -10 -> NaN Invalid_operation -ddand346 and -1.00000000E-199 18 -> NaN Invalid_operation -ddand347 and -1E-199 10 -> NaN Invalid_operation -ddand348 and -9.99999999E+199 -18 -> NaN Invalid_operation - --- A few other non-integers -ddand361 and 1.0 1 -> NaN Invalid_operation -ddand362 and 1E+1 1 -> NaN Invalid_operation -ddand363 and 0.0 1 -> NaN Invalid_operation -ddand364 and 0E+1 1 -> NaN Invalid_operation -ddand365 and 9.9 1 -> NaN Invalid_operation -ddand366 and 9E+1 1 -> NaN Invalid_operation -ddand371 and 0 1.0 -> NaN Invalid_operation -ddand372 and 0 1E+1 -> NaN Invalid_operation -ddand373 and 0 0.0 -> NaN Invalid_operation -ddand374 and 0 0E+1 -> NaN Invalid_operation -ddand375 and 0 9.9 -> NaN Invalid_operation -ddand376 and 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -ddand780 and -Inf -Inf -> NaN Invalid_operation -ddand781 and -Inf -1000 -> NaN Invalid_operation -ddand782 and -Inf -1 -> NaN Invalid_operation -ddand783 and -Inf -0 -> NaN Invalid_operation -ddand784 and -Inf 0 -> NaN Invalid_operation -ddand785 and -Inf 1 -> NaN Invalid_operation -ddand786 and -Inf 1000 -> NaN Invalid_operation -ddand787 and -1000 -Inf -> NaN Invalid_operation -ddand788 and -Inf -Inf -> NaN Invalid_operation -ddand789 and -1 -Inf -> NaN Invalid_operation -ddand790 and -0 -Inf -> NaN Invalid_operation -ddand791 and 0 -Inf -> NaN Invalid_operation -ddand792 and 1 -Inf -> NaN Invalid_operation -ddand793 and 1000 -Inf -> NaN Invalid_operation -ddand794 and Inf -Inf -> NaN Invalid_operation - -ddand800 and Inf -Inf -> NaN Invalid_operation -ddand801 and Inf -1000 -> NaN Invalid_operation -ddand802 and Inf -1 -> NaN Invalid_operation -ddand803 and Inf -0 -> NaN Invalid_operation -ddand804 and Inf 0 -> NaN Invalid_operation -ddand805 and Inf 1 -> NaN Invalid_operation -ddand806 and Inf 1000 -> NaN Invalid_operation -ddand807 and Inf Inf -> NaN Invalid_operation -ddand808 and -1000 Inf -> NaN Invalid_operation -ddand809 and -Inf Inf -> NaN Invalid_operation -ddand810 and -1 Inf -> NaN Invalid_operation -ddand811 and -0 Inf -> NaN Invalid_operation -ddand812 and 0 Inf -> NaN Invalid_operation -ddand813 and 1 Inf -> NaN Invalid_operation -ddand814 and 1000 Inf -> NaN Invalid_operation -ddand815 and Inf Inf -> NaN Invalid_operation - -ddand821 and NaN -Inf -> NaN Invalid_operation -ddand822 and NaN -1000 -> NaN Invalid_operation -ddand823 and NaN -1 -> NaN Invalid_operation -ddand824 and NaN -0 -> NaN Invalid_operation -ddand825 and NaN 0 -> NaN Invalid_operation -ddand826 and NaN 1 -> NaN Invalid_operation -ddand827 and NaN 1000 -> NaN Invalid_operation -ddand828 and NaN Inf -> NaN Invalid_operation -ddand829 and NaN NaN -> NaN Invalid_operation -ddand830 and -Inf NaN -> NaN Invalid_operation -ddand831 and -1000 NaN -> NaN Invalid_operation -ddand832 and -1 NaN -> NaN Invalid_operation -ddand833 and -0 NaN -> NaN Invalid_operation -ddand834 and 0 NaN -> NaN Invalid_operation -ddand835 and 1 NaN -> NaN Invalid_operation -ddand836 and 1000 NaN -> NaN Invalid_operation -ddand837 and Inf NaN -> NaN Invalid_operation - -ddand841 and sNaN -Inf -> NaN Invalid_operation -ddand842 and sNaN -1000 -> NaN Invalid_operation -ddand843 and sNaN -1 -> NaN Invalid_operation -ddand844 and sNaN -0 -> NaN Invalid_operation -ddand845 and sNaN 0 -> NaN Invalid_operation -ddand846 and sNaN 1 -> NaN Invalid_operation -ddand847 and sNaN 1000 -> NaN Invalid_operation -ddand848 and sNaN NaN -> NaN Invalid_operation -ddand849 and sNaN sNaN -> NaN Invalid_operation -ddand850 and NaN sNaN -> NaN Invalid_operation -ddand851 and -Inf sNaN -> NaN Invalid_operation -ddand852 and -1000 sNaN -> NaN Invalid_operation -ddand853 and -1 sNaN -> NaN Invalid_operation -ddand854 and -0 sNaN -> NaN Invalid_operation -ddand855 and 0 sNaN -> NaN Invalid_operation -ddand856 and 1 sNaN -> NaN Invalid_operation -ddand857 and 1000 sNaN -> NaN Invalid_operation -ddand858 and Inf sNaN -> NaN Invalid_operation -ddand859 and NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddand861 and NaN1 -Inf -> NaN Invalid_operation -ddand862 and +NaN2 -1000 -> NaN Invalid_operation -ddand863 and NaN3 1000 -> NaN Invalid_operation -ddand864 and NaN4 Inf -> NaN Invalid_operation -ddand865 and NaN5 +NaN6 -> NaN Invalid_operation -ddand866 and -Inf NaN7 -> NaN Invalid_operation -ddand867 and -1000 NaN8 -> NaN Invalid_operation -ddand868 and 1000 NaN9 -> NaN Invalid_operation -ddand869 and Inf +NaN10 -> NaN Invalid_operation -ddand871 and sNaN11 -Inf -> NaN Invalid_operation -ddand872 and sNaN12 -1000 -> NaN Invalid_operation -ddand873 and sNaN13 1000 -> NaN Invalid_operation -ddand874 and sNaN14 NaN17 -> NaN Invalid_operation -ddand875 and sNaN15 sNaN18 -> NaN Invalid_operation -ddand876 and NaN16 sNaN19 -> NaN Invalid_operation -ddand877 and -Inf +sNaN20 -> NaN Invalid_operation -ddand878 and -1000 sNaN21 -> NaN Invalid_operation -ddand879 and 1000 sNaN22 -> NaN Invalid_operation -ddand880 and Inf sNaN23 -> NaN Invalid_operation -ddand881 and +NaN25 +sNaN24 -> NaN Invalid_operation -ddand882 and -NaN26 NaN28 -> NaN Invalid_operation -ddand883 and -sNaN27 sNaN29 -> NaN Invalid_operation -ddand884 and 1000 -NaN30 -> NaN Invalid_operation -ddand885 and 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddAnd.decTest -- digitwise logical AND for decDoubles -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check (truth table) +ddand001 and 0 0 -> 0 +ddand002 and 0 1 -> 0 +ddand003 and 1 0 -> 0 +ddand004 and 1 1 -> 1 +ddand005 and 1100 1010 -> 1000 +-- and at msd and msd-1 +-- 1234567890123456 1234567890123456 1234567890123456 +ddand006 and 0000000000000000 0000000000000000 -> 0 +ddand007 and 0000000000000000 1000000000000000 -> 0 +ddand008 and 1000000000000000 0000000000000000 -> 0 +ddand009 and 1000000000000000 1000000000000000 -> 1000000000000000 +ddand010 and 0000000000000000 0000000000000000 -> 0 +ddand011 and 0000000000000000 0100000000000000 -> 0 +ddand012 and 0100000000000000 0000000000000000 -> 0 +ddand013 and 0100000000000000 0100000000000000 -> 100000000000000 + +-- Various lengths +-- 1234567890123456 1234567890123456 1234567890123456 +ddand021 and 1111111111111111 1111111111111111 -> 1111111111111111 +ddand024 and 1111111111111111 111111111111111 -> 111111111111111 +ddand025 and 1111111111111111 11111111111111 -> 11111111111111 +ddand026 and 1111111111111111 1111111111111 -> 1111111111111 +ddand027 and 1111111111111111 111111111111 -> 111111111111 +ddand028 and 1111111111111111 11111111111 -> 11111111111 +ddand029 and 1111111111111111 1111111111 -> 1111111111 +ddand030 and 1111111111111111 111111111 -> 111111111 +ddand031 and 1111111111111111 11111111 -> 11111111 +ddand032 and 1111111111111111 1111111 -> 1111111 +ddand033 and 1111111111111111 111111 -> 111111 +ddand034 and 1111111111111111 11111 -> 11111 +ddand035 and 1111111111111111 1111 -> 1111 +ddand036 and 1111111111111111 111 -> 111 +ddand037 and 1111111111111111 11 -> 11 +ddand038 and 1111111111111111 1 -> 1 +ddand039 and 1111111111111111 0 -> 0 + +ddand040 and 1111111111111111 1111111111111111 -> 1111111111111111 +ddand041 and 111111111111111 1111111111111111 -> 111111111111111 +ddand042 and 111111111111111 1111111111111111 -> 111111111111111 +ddand043 and 11111111111111 1111111111111111 -> 11111111111111 +ddand044 and 1111111111111 1111111111111111 -> 1111111111111 +ddand045 and 111111111111 1111111111111111 -> 111111111111 +ddand046 and 11111111111 1111111111111111 -> 11111111111 +ddand047 and 1111111111 1111111111111111 -> 1111111111 +ddand048 and 111111111 1111111111111111 -> 111111111 +ddand049 and 11111111 1111111111111111 -> 11111111 +ddand050 and 1111111 1111111111111111 -> 1111111 +ddand051 and 111111 1111111111111111 -> 111111 +ddand052 and 11111 1111111111111111 -> 11111 +ddand053 and 1111 1111111111111111 -> 1111 +ddand054 and 111 1111111111111111 -> 111 +ddand055 and 11 1111111111111111 -> 11 +ddand056 and 1 1111111111111111 -> 1 +ddand057 and 0 1111111111111111 -> 0 + +ddand150 and 1111111111 1 -> 1 +ddand151 and 111111111 1 -> 1 +ddand152 and 11111111 1 -> 1 +ddand153 and 1111111 1 -> 1 +ddand154 and 111111 1 -> 1 +ddand155 and 11111 1 -> 1 +ddand156 and 1111 1 -> 1 +ddand157 and 111 1 -> 1 +ddand158 and 11 1 -> 1 +ddand159 and 1 1 -> 1 + +ddand160 and 1111111111 0 -> 0 +ddand161 and 111111111 0 -> 0 +ddand162 and 11111111 0 -> 0 +ddand163 and 1111111 0 -> 0 +ddand164 and 111111 0 -> 0 +ddand165 and 11111 0 -> 0 +ddand166 and 1111 0 -> 0 +ddand167 and 111 0 -> 0 +ddand168 and 11 0 -> 0 +ddand169 and 1 0 -> 0 + +ddand170 and 1 1111111111 -> 1 +ddand171 and 1 111111111 -> 1 +ddand172 and 1 11111111 -> 1 +ddand173 and 1 1111111 -> 1 +ddand174 and 1 111111 -> 1 +ddand175 and 1 11111 -> 1 +ddand176 and 1 1111 -> 1 +ddand177 and 1 111 -> 1 +ddand178 and 1 11 -> 1 +ddand179 and 1 1 -> 1 + +ddand180 and 0 1111111111 -> 0 +ddand181 and 0 111111111 -> 0 +ddand182 and 0 11111111 -> 0 +ddand183 and 0 1111111 -> 0 +ddand184 and 0 111111 -> 0 +ddand185 and 0 11111 -> 0 +ddand186 and 0 1111 -> 0 +ddand187 and 0 111 -> 0 +ddand188 and 0 11 -> 0 +ddand189 and 0 1 -> 0 + +ddand090 and 011111111 111111111 -> 11111111 +ddand091 and 101111111 111111111 -> 101111111 +ddand092 and 110111111 111111111 -> 110111111 +ddand093 and 111011111 111111111 -> 111011111 +ddand094 and 111101111 111111111 -> 111101111 +ddand095 and 111110111 111111111 -> 111110111 +ddand096 and 111111011 111111111 -> 111111011 +ddand097 and 111111101 111111111 -> 111111101 +ddand098 and 111111110 111111111 -> 111111110 + +ddand100 and 111111111 011111111 -> 11111111 +ddand101 and 111111111 101111111 -> 101111111 +ddand102 and 111111111 110111111 -> 110111111 +ddand103 and 111111111 111011111 -> 111011111 +ddand104 and 111111111 111101111 -> 111101111 +ddand105 and 111111111 111110111 -> 111110111 +ddand106 and 111111111 111111011 -> 111111011 +ddand107 and 111111111 111111101 -> 111111101 +ddand108 and 111111111 111111110 -> 111111110 + +-- non-0/1 should not be accepted, nor should signs +ddand220 and 111111112 111111111 -> NaN Invalid_operation +ddand221 and 333333333 333333333 -> NaN Invalid_operation +ddand222 and 555555555 555555555 -> NaN Invalid_operation +ddand223 and 777777777 777777777 -> NaN Invalid_operation +ddand224 and 999999999 999999999 -> NaN Invalid_operation +ddand225 and 222222222 999999999 -> NaN Invalid_operation +ddand226 and 444444444 999999999 -> NaN Invalid_operation +ddand227 and 666666666 999999999 -> NaN Invalid_operation +ddand228 and 888888888 999999999 -> NaN Invalid_operation +ddand229 and 999999999 222222222 -> NaN Invalid_operation +ddand230 and 999999999 444444444 -> NaN Invalid_operation +ddand231 and 999999999 666666666 -> NaN Invalid_operation +ddand232 and 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +ddand240 and 567468689 -934981942 -> NaN Invalid_operation +ddand241 and 567367689 934981942 -> NaN Invalid_operation +ddand242 and -631917772 -706014634 -> NaN Invalid_operation +ddand243 and -756253257 138579234 -> NaN Invalid_operation +ddand244 and 835590149 567435400 -> NaN Invalid_operation +-- test MSD +ddand250 and 2000000000000000 1000000000000000 -> NaN Invalid_operation +ddand251 and 7000000000000000 1000000000000000 -> NaN Invalid_operation +ddand252 and 8000000000000000 1000000000000000 -> NaN Invalid_operation +ddand253 and 9000000000000000 1000000000000000 -> NaN Invalid_operation +ddand254 and 2000000000000000 0000000000000000 -> NaN Invalid_operation +ddand255 and 7000000000000000 0000000000000000 -> NaN Invalid_operation +ddand256 and 8000000000000000 0000000000000000 -> NaN Invalid_operation +ddand257 and 9000000000000000 0000000000000000 -> NaN Invalid_operation +ddand258 and 1000000000000000 2000000000000000 -> NaN Invalid_operation +ddand259 and 1000000000000000 7000000000000000 -> NaN Invalid_operation +ddand260 and 1000000000000000 8000000000000000 -> NaN Invalid_operation +ddand261 and 1000000000000000 9000000000000000 -> NaN Invalid_operation +ddand262 and 0000000000000000 2000000000000000 -> NaN Invalid_operation +ddand263 and 0000000000000000 7000000000000000 -> NaN Invalid_operation +ddand264 and 0000000000000000 8000000000000000 -> NaN Invalid_operation +ddand265 and 0000000000000000 9000000000000000 -> NaN Invalid_operation +-- test MSD-1 +ddand270 and 0200001000000000 1000100000000010 -> NaN Invalid_operation +ddand271 and 0700000100000000 1000010000000100 -> NaN Invalid_operation +ddand272 and 0800000010000000 1000001000001000 -> NaN Invalid_operation +ddand273 and 0900000001000000 1000000100010000 -> NaN Invalid_operation +ddand274 and 1000000000100000 0200000010100000 -> NaN Invalid_operation +ddand275 and 1000000000010000 0700000001000000 -> NaN Invalid_operation +ddand276 and 1000000000001000 0800000010100000 -> NaN Invalid_operation +ddand277 and 1000000000000100 0900000000010000 -> NaN Invalid_operation +-- test LSD +ddand280 and 0010000000000002 1000000100000001 -> NaN Invalid_operation +ddand281 and 0001000000000007 1000001000000011 -> NaN Invalid_operation +ddand282 and 0000100000000008 1000010000000001 -> NaN Invalid_operation +ddand283 and 0000010000000009 1000100000000001 -> NaN Invalid_operation +ddand284 and 1000001000000000 0001000000000002 -> NaN Invalid_operation +ddand285 and 1000000100000000 0010000000000007 -> NaN Invalid_operation +ddand286 and 1000000010000000 0100000000000008 -> NaN Invalid_operation +ddand287 and 1000000001000000 1000000000000009 -> NaN Invalid_operation +-- test Middie +ddand288 and 0010000020000000 1000001000000000 -> NaN Invalid_operation +ddand289 and 0001000070000001 1000000100000000 -> NaN Invalid_operation +ddand290 and 0000100080000010 1000000010000000 -> NaN Invalid_operation +ddand291 and 0000010090000100 1000000001000000 -> NaN Invalid_operation +ddand292 and 1000001000001000 0000000020100000 -> NaN Invalid_operation +ddand293 and 1000000100010000 0000000070010000 -> NaN Invalid_operation +ddand294 and 1000000010100000 0000000080001000 -> NaN Invalid_operation +ddand295 and 1000000001000000 0000000090000100 -> NaN Invalid_operation +-- signs +ddand296 and -1000000001000000 -0000010000000100 -> NaN Invalid_operation +ddand297 and -1000000001000000 0000000010000100 -> NaN Invalid_operation +ddand298 and 1000000001000000 -0000001000000100 -> NaN Invalid_operation +ddand299 and 1000000001000000 0000000011000100 -> 1000000 + +-- Nmax, Nmin, Ntiny-like +ddand331 and 2 9.99999999E+199 -> NaN Invalid_operation +ddand332 and 3 1E-199 -> NaN Invalid_operation +ddand333 and 4 1.00000000E-199 -> NaN Invalid_operation +ddand334 and 5 1E-100 -> NaN Invalid_operation +ddand335 and 6 -1E-100 -> NaN Invalid_operation +ddand336 and 7 -1.00000000E-199 -> NaN Invalid_operation +ddand337 and 8 -1E-199 -> NaN Invalid_operation +ddand338 and 9 -9.99999999E+199 -> NaN Invalid_operation +ddand341 and 9.99999999E+199 -18 -> NaN Invalid_operation +ddand342 and 1E-199 01 -> NaN Invalid_operation +ddand343 and 1.00000000E-199 -18 -> NaN Invalid_operation +ddand344 and 1E-100 18 -> NaN Invalid_operation +ddand345 and -1E-100 -10 -> NaN Invalid_operation +ddand346 and -1.00000000E-199 18 -> NaN Invalid_operation +ddand347 and -1E-199 10 -> NaN Invalid_operation +ddand348 and -9.99999999E+199 -18 -> NaN Invalid_operation + +-- A few other non-integers +ddand361 and 1.0 1 -> NaN Invalid_operation +ddand362 and 1E+1 1 -> NaN Invalid_operation +ddand363 and 0.0 1 -> NaN Invalid_operation +ddand364 and 0E+1 1 -> NaN Invalid_operation +ddand365 and 9.9 1 -> NaN Invalid_operation +ddand366 and 9E+1 1 -> NaN Invalid_operation +ddand371 and 0 1.0 -> NaN Invalid_operation +ddand372 and 0 1E+1 -> NaN Invalid_operation +ddand373 and 0 0.0 -> NaN Invalid_operation +ddand374 and 0 0E+1 -> NaN Invalid_operation +ddand375 and 0 9.9 -> NaN Invalid_operation +ddand376 and 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +ddand780 and -Inf -Inf -> NaN Invalid_operation +ddand781 and -Inf -1000 -> NaN Invalid_operation +ddand782 and -Inf -1 -> NaN Invalid_operation +ddand783 and -Inf -0 -> NaN Invalid_operation +ddand784 and -Inf 0 -> NaN Invalid_operation +ddand785 and -Inf 1 -> NaN Invalid_operation +ddand786 and -Inf 1000 -> NaN Invalid_operation +ddand787 and -1000 -Inf -> NaN Invalid_operation +ddand788 and -Inf -Inf -> NaN Invalid_operation +ddand789 and -1 -Inf -> NaN Invalid_operation +ddand790 and -0 -Inf -> NaN Invalid_operation +ddand791 and 0 -Inf -> NaN Invalid_operation +ddand792 and 1 -Inf -> NaN Invalid_operation +ddand793 and 1000 -Inf -> NaN Invalid_operation +ddand794 and Inf -Inf -> NaN Invalid_operation + +ddand800 and Inf -Inf -> NaN Invalid_operation +ddand801 and Inf -1000 -> NaN Invalid_operation +ddand802 and Inf -1 -> NaN Invalid_operation +ddand803 and Inf -0 -> NaN Invalid_operation +ddand804 and Inf 0 -> NaN Invalid_operation +ddand805 and Inf 1 -> NaN Invalid_operation +ddand806 and Inf 1000 -> NaN Invalid_operation +ddand807 and Inf Inf -> NaN Invalid_operation +ddand808 and -1000 Inf -> NaN Invalid_operation +ddand809 and -Inf Inf -> NaN Invalid_operation +ddand810 and -1 Inf -> NaN Invalid_operation +ddand811 and -0 Inf -> NaN Invalid_operation +ddand812 and 0 Inf -> NaN Invalid_operation +ddand813 and 1 Inf -> NaN Invalid_operation +ddand814 and 1000 Inf -> NaN Invalid_operation +ddand815 and Inf Inf -> NaN Invalid_operation + +ddand821 and NaN -Inf -> NaN Invalid_operation +ddand822 and NaN -1000 -> NaN Invalid_operation +ddand823 and NaN -1 -> NaN Invalid_operation +ddand824 and NaN -0 -> NaN Invalid_operation +ddand825 and NaN 0 -> NaN Invalid_operation +ddand826 and NaN 1 -> NaN Invalid_operation +ddand827 and NaN 1000 -> NaN Invalid_operation +ddand828 and NaN Inf -> NaN Invalid_operation +ddand829 and NaN NaN -> NaN Invalid_operation +ddand830 and -Inf NaN -> NaN Invalid_operation +ddand831 and -1000 NaN -> NaN Invalid_operation +ddand832 and -1 NaN -> NaN Invalid_operation +ddand833 and -0 NaN -> NaN Invalid_operation +ddand834 and 0 NaN -> NaN Invalid_operation +ddand835 and 1 NaN -> NaN Invalid_operation +ddand836 and 1000 NaN -> NaN Invalid_operation +ddand837 and Inf NaN -> NaN Invalid_operation + +ddand841 and sNaN -Inf -> NaN Invalid_operation +ddand842 and sNaN -1000 -> NaN Invalid_operation +ddand843 and sNaN -1 -> NaN Invalid_operation +ddand844 and sNaN -0 -> NaN Invalid_operation +ddand845 and sNaN 0 -> NaN Invalid_operation +ddand846 and sNaN 1 -> NaN Invalid_operation +ddand847 and sNaN 1000 -> NaN Invalid_operation +ddand848 and sNaN NaN -> NaN Invalid_operation +ddand849 and sNaN sNaN -> NaN Invalid_operation +ddand850 and NaN sNaN -> NaN Invalid_operation +ddand851 and -Inf sNaN -> NaN Invalid_operation +ddand852 and -1000 sNaN -> NaN Invalid_operation +ddand853 and -1 sNaN -> NaN Invalid_operation +ddand854 and -0 sNaN -> NaN Invalid_operation +ddand855 and 0 sNaN -> NaN Invalid_operation +ddand856 and 1 sNaN -> NaN Invalid_operation +ddand857 and 1000 sNaN -> NaN Invalid_operation +ddand858 and Inf sNaN -> NaN Invalid_operation +ddand859 and NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddand861 and NaN1 -Inf -> NaN Invalid_operation +ddand862 and +NaN2 -1000 -> NaN Invalid_operation +ddand863 and NaN3 1000 -> NaN Invalid_operation +ddand864 and NaN4 Inf -> NaN Invalid_operation +ddand865 and NaN5 +NaN6 -> NaN Invalid_operation +ddand866 and -Inf NaN7 -> NaN Invalid_operation +ddand867 and -1000 NaN8 -> NaN Invalid_operation +ddand868 and 1000 NaN9 -> NaN Invalid_operation +ddand869 and Inf +NaN10 -> NaN Invalid_operation +ddand871 and sNaN11 -Inf -> NaN Invalid_operation +ddand872 and sNaN12 -1000 -> NaN Invalid_operation +ddand873 and sNaN13 1000 -> NaN Invalid_operation +ddand874 and sNaN14 NaN17 -> NaN Invalid_operation +ddand875 and sNaN15 sNaN18 -> NaN Invalid_operation +ddand876 and NaN16 sNaN19 -> NaN Invalid_operation +ddand877 and -Inf +sNaN20 -> NaN Invalid_operation +ddand878 and -1000 sNaN21 -> NaN Invalid_operation +ddand879 and 1000 sNaN22 -> NaN Invalid_operation +ddand880 and Inf sNaN23 -> NaN Invalid_operation +ddand881 and +NaN25 +sNaN24 -> NaN Invalid_operation +ddand882 and -NaN26 NaN28 -> NaN Invalid_operation +ddand883 and -sNaN27 sNaN29 -> NaN Invalid_operation +ddand884 and 1000 -NaN30 -> NaN Invalid_operation +ddand885 and 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddBase.decTest b/Lib/test/decimaltestdata/ddBase.decTest index fbd6ccd94de..40febf86c5e 100644 --- a/Lib/test/decimaltestdata/ddBase.decTest +++ b/Lib/test/decimaltestdata/ddBase.decTest @@ -1,1104 +1,1104 @@ ------------------------------------------------------------------------- --- ddBase.decTest -- base decDouble <--> string conversions -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests base conversions from string to a decimal number --- and back to a string (in Scientific form) - --- Note that unlike other operations the operand is subject to rounding --- to conform to emax and precision settings (that is, numbers will --- conform to rules and exponent will be in permitted range). The --- 'left hand side', therefore, may have numbers that cannot be --- represented in a decDouble. Some testcases go to the limit of the --- next-wider format, and hence these testcases may also be used to --- test narrowing and widening operations. - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddbas001 toSci 0 -> 0 -ddbas002 toSci 1 -> 1 -ddbas003 toSci 1.0 -> 1.0 -ddbas004 toSci 1.00 -> 1.00 -ddbas005 toSci 10 -> 10 -ddbas006 toSci 1000 -> 1000 -ddbas007 toSci 10.0 -> 10.0 -ddbas008 toSci 10.1 -> 10.1 -ddbas009 toSci 10.4 -> 10.4 -ddbas010 toSci 10.5 -> 10.5 -ddbas011 toSci 10.6 -> 10.6 -ddbas012 toSci 10.9 -> 10.9 -ddbas013 toSci 11.0 -> 11.0 -ddbas014 toSci 1.234 -> 1.234 -ddbas015 toSci 0.123 -> 0.123 -ddbas016 toSci 0.012 -> 0.012 -ddbas017 toSci -0 -> -0 -ddbas018 toSci -0.0 -> -0.0 -ddbas019 toSci -00.00 -> -0.00 - -ddbas021 toSci -1 -> -1 -ddbas022 toSci -1.0 -> -1.0 -ddbas023 toSci -0.1 -> -0.1 -ddbas024 toSci -9.1 -> -9.1 -ddbas025 toSci -9.11 -> -9.11 -ddbas026 toSci -9.119 -> -9.119 -ddbas027 toSci -9.999 -> -9.999 - -ddbas030 toSci '123456789.123456' -> '123456789.123456' -ddbas031 toSci '123456789.000000' -> '123456789.000000' -ddbas032 toSci '123456789123456' -> '123456789123456' -ddbas033 toSci '0.0000123456789' -> '0.0000123456789' -ddbas034 toSci '0.00000123456789' -> '0.00000123456789' -ddbas035 toSci '0.000000123456789' -> '1.23456789E-7' -ddbas036 toSci '0.0000000123456789' -> '1.23456789E-8' - -ddbas037 toSci '0.123456789012344' -> '0.123456789012344' -ddbas038 toSci '0.123456789012345' -> '0.123456789012345' - --- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) -ddbsn001 toSci -9.999999999999999E+384 -> -9.999999999999999E+384 -ddbsn002 toSci -1E-383 -> -1E-383 -ddbsn003 toSci -1E-398 -> -1E-398 Subnormal -ddbsn004 toSci -0 -> -0 -ddbsn005 toSci +0 -> 0 -ddbsn006 toSci +1E-398 -> 1E-398 Subnormal -ddbsn007 toSci +1E-383 -> 1E-383 -ddbsn008 toSci +9.999999999999999E+384 -> 9.999999999999999E+384 - --- String [many more examples are implicitly tested elsewhere] --- strings without E cannot generate E in result -ddbas040 toSci "12" -> '12' -ddbas041 toSci "-76" -> '-76' -ddbas042 toSci "12.76" -> '12.76' -ddbas043 toSci "+12.76" -> '12.76' -ddbas044 toSci "012.76" -> '12.76' -ddbas045 toSci "+0.003" -> '0.003' -ddbas046 toSci "17." -> '17' -ddbas047 toSci ".5" -> '0.5' -ddbas048 toSci "044" -> '44' -ddbas049 toSci "0044" -> '44' -ddbas050 toSci "0.0005" -> '0.0005' -ddbas051 toSci "00.00005" -> '0.00005' -ddbas052 toSci "0.000005" -> '0.000005' -ddbas053 toSci "0.0000050" -> '0.0000050' -ddbas054 toSci "0.0000005" -> '5E-7' -ddbas055 toSci "0.00000005" -> '5E-8' -ddbas056 toSci "12345678.543210" -> '12345678.543210' -ddbas057 toSci "2345678.543210" -> '2345678.543210' -ddbas058 toSci "345678.543210" -> '345678.543210' -ddbas059 toSci "0345678.54321" -> '345678.54321' -ddbas060 toSci "345678.5432" -> '345678.5432' -ddbas061 toSci "+345678.5432" -> '345678.5432' -ddbas062 toSci "+0345678.5432" -> '345678.5432' -ddbas063 toSci "+00345678.5432" -> '345678.5432' -ddbas064 toSci "-345678.5432" -> '-345678.5432' -ddbas065 toSci "-0345678.5432" -> '-345678.5432' -ddbas066 toSci "-00345678.5432" -> '-345678.5432' --- examples -ddbas067 toSci "5E-6" -> '0.000005' -ddbas068 toSci "50E-7" -> '0.0000050' -ddbas069 toSci "5E-7" -> '5E-7' - --- [No exotics as no Unicode] - --- rounded with dots in all (including edge) places -ddbas071 toSci .1234567890123456123 -> 0.1234567890123456 Inexact Rounded -ddbas072 toSci 1.234567890123456123 -> 1.234567890123456 Inexact Rounded -ddbas073 toSci 12.34567890123456123 -> 12.34567890123456 Inexact Rounded -ddbas074 toSci 123.4567890123456123 -> 123.4567890123456 Inexact Rounded -ddbas075 toSci 1234.567890123456123 -> 1234.567890123456 Inexact Rounded -ddbas076 toSci 12345.67890123456123 -> 12345.67890123456 Inexact Rounded -ddbas077 toSci 123456.7890123456123 -> 123456.7890123456 Inexact Rounded -ddbas078 toSci 1234567.890123456123 -> 1234567.890123456 Inexact Rounded -ddbas079 toSci 12345678.90123456123 -> 12345678.90123456 Inexact Rounded -ddbas080 toSci 123456789.0123456123 -> 123456789.0123456 Inexact Rounded -ddbas081 toSci 1234567890.123456123 -> 1234567890.123456 Inexact Rounded -ddbas082 toSci 12345678901.23456123 -> 12345678901.23456 Inexact Rounded -ddbas083 toSci 123456789012.3456123 -> 123456789012.3456 Inexact Rounded -ddbas084 toSci 1234567890123.456123 -> 1234567890123.456 Inexact Rounded -ddbas085 toSci 12345678901234.56123 -> 12345678901234.56 Inexact Rounded -ddbas086 toSci 123456789012345.6123 -> 123456789012345.6 Inexact Rounded -ddbas087 toSci 1234567890123456.123 -> 1234567890123456 Inexact Rounded -ddbas088 toSci 12345678901234561.23 -> 1.234567890123456E+16 Inexact Rounded -ddbas089 toSci 123456789012345612.3 -> 1.234567890123456E+17 Inexact Rounded -ddbas090 toSci 1234567890123456123. -> 1.234567890123456E+18 Inexact Rounded - - --- Numbers with E -ddbas130 toSci "0.000E-1" -> '0.0000' -ddbas131 toSci "0.000E-2" -> '0.00000' -ddbas132 toSci "0.000E-3" -> '0.000000' -ddbas133 toSci "0.000E-4" -> '0E-7' -ddbas134 toSci "0.00E-2" -> '0.0000' -ddbas135 toSci "0.00E-3" -> '0.00000' -ddbas136 toSci "0.00E-4" -> '0.000000' -ddbas137 toSci "0.00E-5" -> '0E-7' -ddbas138 toSci "+0E+9" -> '0E+9' -ddbas139 toSci "-0E+9" -> '-0E+9' -ddbas140 toSci "1E+9" -> '1E+9' -ddbas141 toSci "1e+09" -> '1E+9' -ddbas142 toSci "1E+90" -> '1E+90' -ddbas143 toSci "+1E+009" -> '1E+9' -ddbas144 toSci "0E+9" -> '0E+9' -ddbas145 toSci "1E+9" -> '1E+9' -ddbas146 toSci "1E+09" -> '1E+9' -ddbas147 toSci "1e+90" -> '1E+90' -ddbas148 toSci "1E+009" -> '1E+9' -ddbas149 toSci "000E+9" -> '0E+9' -ddbas150 toSci "1E9" -> '1E+9' -ddbas151 toSci "1e09" -> '1E+9' -ddbas152 toSci "1E90" -> '1E+90' -ddbas153 toSci "1E009" -> '1E+9' -ddbas154 toSci "0E9" -> '0E+9' -ddbas155 toSci "0.000e+0" -> '0.000' -ddbas156 toSci "0.000E-1" -> '0.0000' -ddbas157 toSci "4E+9" -> '4E+9' -ddbas158 toSci "44E+9" -> '4.4E+10' -ddbas159 toSci "0.73e-7" -> '7.3E-8' -ddbas160 toSci "00E+9" -> '0E+9' -ddbas161 toSci "00E-9" -> '0E-9' -ddbas162 toSci "10E+9" -> '1.0E+10' -ddbas163 toSci "10E+09" -> '1.0E+10' -ddbas164 toSci "10e+90" -> '1.0E+91' -ddbas165 toSci "10E+009" -> '1.0E+10' -ddbas166 toSci "100e+9" -> '1.00E+11' -ddbas167 toSci "100e+09" -> '1.00E+11' -ddbas168 toSci "100E+90" -> '1.00E+92' -ddbas169 toSci "100e+009" -> '1.00E+11' - -ddbas170 toSci "1.265" -> '1.265' -ddbas171 toSci "1.265E-20" -> '1.265E-20' -ddbas172 toSci "1.265E-8" -> '1.265E-8' -ddbas173 toSci "1.265E-4" -> '0.0001265' -ddbas174 toSci "1.265E-3" -> '0.001265' -ddbas175 toSci "1.265E-2" -> '0.01265' -ddbas176 toSci "1.265E-1" -> '0.1265' -ddbas177 toSci "1.265E-0" -> '1.265' -ddbas178 toSci "1.265E+1" -> '12.65' -ddbas179 toSci "1.265E+2" -> '126.5' -ddbas180 toSci "1.265E+3" -> '1265' -ddbas181 toSci "1.265E+4" -> '1.265E+4' -ddbas182 toSci "1.265E+8" -> '1.265E+8' -ddbas183 toSci "1.265E+20" -> '1.265E+20' - -ddbas190 toSci "12.65" -> '12.65' -ddbas191 toSci "12.65E-20" -> '1.265E-19' -ddbas192 toSci "12.65E-8" -> '1.265E-7' -ddbas193 toSci "12.65E-4" -> '0.001265' -ddbas194 toSci "12.65E-3" -> '0.01265' -ddbas195 toSci "12.65E-2" -> '0.1265' -ddbas196 toSci "12.65E-1" -> '1.265' -ddbas197 toSci "12.65E-0" -> '12.65' -ddbas198 toSci "12.65E+1" -> '126.5' -ddbas199 toSci "12.65E+2" -> '1265' -ddbas200 toSci "12.65E+3" -> '1.265E+4' -ddbas201 toSci "12.65E+4" -> '1.265E+5' -ddbas202 toSci "12.65E+8" -> '1.265E+9' -ddbas203 toSci "12.65E+20" -> '1.265E+21' - -ddbas210 toSci "126.5" -> '126.5' -ddbas211 toSci "126.5E-20" -> '1.265E-18' -ddbas212 toSci "126.5E-8" -> '0.000001265' -ddbas213 toSci "126.5E-4" -> '0.01265' -ddbas214 toSci "126.5E-3" -> '0.1265' -ddbas215 toSci "126.5E-2" -> '1.265' -ddbas216 toSci "126.5E-1" -> '12.65' -ddbas217 toSci "126.5E-0" -> '126.5' -ddbas218 toSci "126.5E+1" -> '1265' -ddbas219 toSci "126.5E+2" -> '1.265E+4' -ddbas220 toSci "126.5E+3" -> '1.265E+5' -ddbas221 toSci "126.5E+4" -> '1.265E+6' -ddbas222 toSci "126.5E+8" -> '1.265E+10' -ddbas223 toSci "126.5E+20" -> '1.265E+22' - -ddbas230 toSci "1265" -> '1265' -ddbas231 toSci "1265E-20" -> '1.265E-17' -ddbas232 toSci "1265E-8" -> '0.00001265' -ddbas233 toSci "1265E-4" -> '0.1265' -ddbas234 toSci "1265E-3" -> '1.265' -ddbas235 toSci "1265E-2" -> '12.65' -ddbas236 toSci "1265E-1" -> '126.5' -ddbas237 toSci "1265E-0" -> '1265' -ddbas238 toSci "1265E+1" -> '1.265E+4' -ddbas239 toSci "1265E+2" -> '1.265E+5' -ddbas240 toSci "1265E+3" -> '1.265E+6' -ddbas241 toSci "1265E+4" -> '1.265E+7' -ddbas242 toSci "1265E+8" -> '1.265E+11' -ddbas243 toSci "1265E+20" -> '1.265E+23' -ddbas244 toSci "1265E-9" -> '0.000001265' -ddbas245 toSci "1265E-10" -> '1.265E-7' -ddbas246 toSci "1265E-11" -> '1.265E-8' -ddbas247 toSci "1265E-12" -> '1.265E-9' - -ddbas250 toSci "0.1265" -> '0.1265' -ddbas251 toSci "0.1265E-20" -> '1.265E-21' -ddbas252 toSci "0.1265E-8" -> '1.265E-9' -ddbas253 toSci "0.1265E-4" -> '0.00001265' -ddbas254 toSci "0.1265E-3" -> '0.0001265' -ddbas255 toSci "0.1265E-2" -> '0.001265' -ddbas256 toSci "0.1265E-1" -> '0.01265' -ddbas257 toSci "0.1265E-0" -> '0.1265' -ddbas258 toSci "0.1265E+1" -> '1.265' -ddbas259 toSci "0.1265E+2" -> '12.65' -ddbas260 toSci "0.1265E+3" -> '126.5' -ddbas261 toSci "0.1265E+4" -> '1265' -ddbas262 toSci "0.1265E+8" -> '1.265E+7' -ddbas263 toSci "0.1265E+20" -> '1.265E+19' - --- some more negative zeros [systematic tests below] -ddbas290 toSci "-0.000E-1" -> '-0.0000' -ddbas291 toSci "-0.000E-2" -> '-0.00000' -ddbas292 toSci "-0.000E-3" -> '-0.000000' -ddbas293 toSci "-0.000E-4" -> '-0E-7' -ddbas294 toSci "-0.00E-2" -> '-0.0000' -ddbas295 toSci "-0.00E-3" -> '-0.00000' -ddbas296 toSci "-0.0E-2" -> '-0.000' -ddbas297 toSci "-0.0E-3" -> '-0.0000' -ddbas298 toSci "-0E-2" -> '-0.00' -ddbas299 toSci "-0E-3" -> '-0.000' - --- Engineering notation tests -ddbas301 toSci 10e12 -> 1.0E+13 -ddbas302 toEng 10e12 -> 10E+12 -ddbas303 toSci 10e11 -> 1.0E+12 -ddbas304 toEng 10e11 -> 1.0E+12 -ddbas305 toSci 10e10 -> 1.0E+11 -ddbas306 toEng 10e10 -> 100E+9 -ddbas307 toSci 10e9 -> 1.0E+10 -ddbas308 toEng 10e9 -> 10E+9 -ddbas309 toSci 10e8 -> 1.0E+9 -ddbas310 toEng 10e8 -> 1.0E+9 -ddbas311 toSci 10e7 -> 1.0E+8 -ddbas312 toEng 10e7 -> 100E+6 -ddbas313 toSci 10e6 -> 1.0E+7 -ddbas314 toEng 10e6 -> 10E+6 -ddbas315 toSci 10e5 -> 1.0E+6 -ddbas316 toEng 10e5 -> 1.0E+6 -ddbas317 toSci 10e4 -> 1.0E+5 -ddbas318 toEng 10e4 -> 100E+3 -ddbas319 toSci 10e3 -> 1.0E+4 -ddbas320 toEng 10e3 -> 10E+3 -ddbas321 toSci 10e2 -> 1.0E+3 -ddbas322 toEng 10e2 -> 1.0E+3 -ddbas323 toSci 10e1 -> 1.0E+2 -ddbas324 toEng 10e1 -> 100 -ddbas325 toSci 10e0 -> 10 -ddbas326 toEng 10e0 -> 10 -ddbas327 toSci 10e-1 -> 1.0 -ddbas328 toEng 10e-1 -> 1.0 -ddbas329 toSci 10e-2 -> 0.10 -ddbas330 toEng 10e-2 -> 0.10 -ddbas331 toSci 10e-3 -> 0.010 -ddbas332 toEng 10e-3 -> 0.010 -ddbas333 toSci 10e-4 -> 0.0010 -ddbas334 toEng 10e-4 -> 0.0010 -ddbas335 toSci 10e-5 -> 0.00010 -ddbas336 toEng 10e-5 -> 0.00010 -ddbas337 toSci 10e-6 -> 0.000010 -ddbas338 toEng 10e-6 -> 0.000010 -ddbas339 toSci 10e-7 -> 0.0000010 -ddbas340 toEng 10e-7 -> 0.0000010 -ddbas341 toSci 10e-8 -> 1.0E-7 -ddbas342 toEng 10e-8 -> 100E-9 -ddbas343 toSci 10e-9 -> 1.0E-8 -ddbas344 toEng 10e-9 -> 10E-9 -ddbas345 toSci 10e-10 -> 1.0E-9 -ddbas346 toEng 10e-10 -> 1.0E-9 -ddbas347 toSci 10e-11 -> 1.0E-10 -ddbas348 toEng 10e-11 -> 100E-12 -ddbas349 toSci 10e-12 -> 1.0E-11 -ddbas350 toEng 10e-12 -> 10E-12 -ddbas351 toSci 10e-13 -> 1.0E-12 -ddbas352 toEng 10e-13 -> 1.0E-12 - -ddbas361 toSci 7E12 -> 7E+12 -ddbas362 toEng 7E12 -> 7E+12 -ddbas363 toSci 7E11 -> 7E+11 -ddbas364 toEng 7E11 -> 700E+9 -ddbas365 toSci 7E10 -> 7E+10 -ddbas366 toEng 7E10 -> 70E+9 -ddbas367 toSci 7E9 -> 7E+9 -ddbas368 toEng 7E9 -> 7E+9 -ddbas369 toSci 7E8 -> 7E+8 -ddbas370 toEng 7E8 -> 700E+6 -ddbas371 toSci 7E7 -> 7E+7 -ddbas372 toEng 7E7 -> 70E+6 -ddbas373 toSci 7E6 -> 7E+6 -ddbas374 toEng 7E6 -> 7E+6 -ddbas375 toSci 7E5 -> 7E+5 -ddbas376 toEng 7E5 -> 700E+3 -ddbas377 toSci 7E4 -> 7E+4 -ddbas378 toEng 7E4 -> 70E+3 -ddbas379 toSci 7E3 -> 7E+3 -ddbas380 toEng 7E3 -> 7E+3 -ddbas381 toSci 7E2 -> 7E+2 -ddbas382 toEng 7E2 -> 700 -ddbas383 toSci 7E1 -> 7E+1 -ddbas384 toEng 7E1 -> 70 -ddbas385 toSci 7E0 -> 7 -ddbas386 toEng 7E0 -> 7 -ddbas387 toSci 7E-1 -> 0.7 -ddbas388 toEng 7E-1 -> 0.7 -ddbas389 toSci 7E-2 -> 0.07 -ddbas390 toEng 7E-2 -> 0.07 -ddbas391 toSci 7E-3 -> 0.007 -ddbas392 toEng 7E-3 -> 0.007 -ddbas393 toSci 7E-4 -> 0.0007 -ddbas394 toEng 7E-4 -> 0.0007 -ddbas395 toSci 7E-5 -> 0.00007 -ddbas396 toEng 7E-5 -> 0.00007 -ddbas397 toSci 7E-6 -> 0.000007 -ddbas398 toEng 7E-6 -> 0.000007 -ddbas399 toSci 7E-7 -> 7E-7 -ddbas400 toEng 7E-7 -> 700E-9 -ddbas401 toSci 7E-8 -> 7E-8 -ddbas402 toEng 7E-8 -> 70E-9 -ddbas403 toSci 7E-9 -> 7E-9 -ddbas404 toEng 7E-9 -> 7E-9 -ddbas405 toSci 7E-10 -> 7E-10 -ddbas406 toEng 7E-10 -> 700E-12 -ddbas407 toSci 7E-11 -> 7E-11 -ddbas408 toEng 7E-11 -> 70E-12 -ddbas409 toSci 7E-12 -> 7E-12 -ddbas410 toEng 7E-12 -> 7E-12 -ddbas411 toSci 7E-13 -> 7E-13 -ddbas412 toEng 7E-13 -> 700E-15 - --- Exacts remain exact up to precision .. -rounding: half_up -ddbas420 toSci 100 -> 100 -ddbas421 toEng 100 -> 100 -ddbas422 toSci 1000 -> 1000 -ddbas423 toEng 1000 -> 1000 -ddbas424 toSci 999.9 -> 999.9 -ddbas425 toEng 999.9 -> 999.9 -ddbas426 toSci 1000.0 -> 1000.0 -ddbas427 toEng 1000.0 -> 1000.0 -ddbas428 toSci 1000.1 -> 1000.1 -ddbas429 toEng 1000.1 -> 1000.1 -ddbas430 toSci 10000 -> 10000 -ddbas431 toEng 10000 -> 10000 -ddbas432 toSci 100000 -> 100000 -ddbas433 toEng 100000 -> 100000 -ddbas434 toSci 1000000 -> 1000000 -ddbas435 toEng 1000000 -> 1000000 -ddbas436 toSci 10000000 -> 10000000 -ddbas437 toEng 10000000 -> 10000000 -ddbas438 toSci 100000000 -> 100000000 -ddbas439 toEng 1000000000000000 -> 1000000000000000 -ddbas440 toSci 10000000000000000 -> 1.000000000000000E+16 Rounded -ddbas441 toEng 10000000000000000 -> 10.00000000000000E+15 Rounded -ddbas442 toSci 10000000000000001 -> 1.000000000000000E+16 Rounded Inexact -ddbas443 toEng 10000000000000001 -> 10.00000000000000E+15 Rounded Inexact -ddbas444 toSci 10000000000000003 -> 1.000000000000000E+16 Rounded Inexact -ddbas445 toEng 10000000000000003 -> 10.00000000000000E+15 Rounded Inexact -ddbas446 toSci 10000000000000005 -> 1.000000000000001E+16 Rounded Inexact -ddbas447 toEng 10000000000000005 -> 10.00000000000001E+15 Rounded Inexact -ddbas448 toSci 100000000000000050 -> 1.000000000000001E+17 Rounded Inexact -ddbas449 toEng 100000000000000050 -> 100.0000000000001E+15 Rounded Inexact -ddbas450 toSci 10000000000000009 -> 1.000000000000001E+16 Rounded Inexact -ddbas451 toEng 10000000000000009 -> 10.00000000000001E+15 Rounded Inexact -ddbas452 toSci 100000000000000000 -> 1.000000000000000E+17 Rounded -ddbas453 toEng 100000000000000000 -> 100.0000000000000E+15 Rounded -ddbas454 toSci 100000000000000003 -> 1.000000000000000E+17 Rounded Inexact -ddbas455 toEng 100000000000000003 -> 100.0000000000000E+15 Rounded Inexact -ddbas456 toSci 100000000000000005 -> 1.000000000000000E+17 Rounded Inexact -ddbas457 toEng 100000000000000005 -> 100.0000000000000E+15 Rounded Inexact -ddbas458 toSci 100000000000000009 -> 1.000000000000000E+17 Rounded Inexact -ddbas459 toEng 100000000000000009 -> 100.0000000000000E+15 Rounded Inexact -ddbas460 toSci 1000000000000000000 -> 1.000000000000000E+18 Rounded -ddbas461 toEng 1000000000000000000 -> 1.000000000000000E+18 Rounded -ddbas462 toSci 1000000000000000300 -> 1.000000000000000E+18 Rounded Inexact -ddbas463 toEng 1000000000000000300 -> 1.000000000000000E+18 Rounded Inexact -ddbas464 toSci 1000000000000000500 -> 1.000000000000001E+18 Rounded Inexact -ddbas465 toEng 1000000000000000500 -> 1.000000000000001E+18 Rounded Inexact -ddbas466 toSci 1000000000000000900 -> 1.000000000000001E+18 Rounded Inexact -ddbas467 toEng 1000000000000000900 -> 1.000000000000001E+18 Rounded Inexact -ddbas468 toSci 10000000000000000000 -> 1.000000000000000E+19 Rounded -ddbas469 toEng 10000000000000000000 -> 10.00000000000000E+18 Rounded -ddbas470 toSci 10000000000000003000 -> 1.000000000000000E+19 Rounded Inexact -ddbas471 toEng 10000000000000003000 -> 10.00000000000000E+18 Rounded Inexact -ddbas472 toSci 10000000000000005000 -> 1.000000000000001E+19 Rounded Inexact -ddbas473 toEng 10000000000000005000 -> 10.00000000000001E+18 Rounded Inexact -ddbas474 toSci 10000000000000009000 -> 1.000000000000001E+19 Rounded Inexact -ddbas475 toEng 10000000000000009000 -> 10.00000000000001E+18 Rounded Inexact - --- check rounding modes heeded -rounding: ceiling -ddbsr401 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr402 toSci 1.11111111111234549 -> 1.111111111112346 Rounded Inexact -ddbsr403 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact -ddbsr404 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact -rounding: up -ddbsr405 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr406 toSci 1.11111111111234549 -> 1.111111111112346 Rounded Inexact -ddbsr407 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact -ddbsr408 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact -rounding: floor -ddbsr410 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr411 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr412 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact -ddbsr413 toSci 1.11111111111234551 -> 1.111111111112345 Rounded Inexact -rounding: half_down -ddbsr415 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr416 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr417 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact -ddbsr418 toSci 1.11111111111234650 -> 1.111111111112346 Rounded Inexact -ddbsr419 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact -rounding: half_even -ddbsr421 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr422 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr423 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact -ddbsr424 toSci 1.11111111111234650 -> 1.111111111112346 Rounded Inexact -ddbsr425 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact -rounding: down -ddbsr426 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr427 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr428 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact -ddbsr429 toSci 1.11111111111234551 -> 1.111111111112345 Rounded Inexact -rounding: half_up -ddbsr431 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr432 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr433 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact -ddbsr434 toSci 1.11111111111234650 -> 1.111111111112347 Rounded Inexact -ddbsr435 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact --- negatives -rounding: ceiling -ddbsr501 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr502 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr503 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact -ddbsr504 toSci -1.11111111111234551 -> -1.111111111112345 Rounded Inexact -rounding: up -ddbsr505 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr506 toSci -1.11111111111234549 -> -1.111111111112346 Rounded Inexact -ddbsr507 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact -ddbsr508 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact -rounding: floor -ddbsr510 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr511 toSci -1.11111111111234549 -> -1.111111111112346 Rounded Inexact -ddbsr512 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact -ddbsr513 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact -rounding: half_down -ddbsr515 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr516 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr517 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact -ddbsr518 toSci -1.11111111111234650 -> -1.111111111112346 Rounded Inexact -ddbsr519 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact -rounding: half_even -ddbsr521 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr522 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr523 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact -ddbsr524 toSci -1.11111111111234650 -> -1.111111111112346 Rounded Inexact -ddbsr525 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact -rounding: down -ddbsr526 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr527 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr528 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact -ddbsr529 toSci -1.11111111111234551 -> -1.111111111112345 Rounded Inexact -rounding: half_up -ddbsr531 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr532 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr533 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact -ddbsr534 toSci -1.11111111111234650 -> -1.111111111112347 Rounded Inexact -ddbsr535 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact - -rounding: half_even - --- The 'baddies' tests from DiagBigDecimal, plus some new ones -ddbas500 toSci '1..2' -> NaN Conversion_syntax -ddbas501 toSci '.' -> NaN Conversion_syntax -ddbas502 toSci '..' -> NaN Conversion_syntax -ddbas503 toSci '++1' -> NaN Conversion_syntax -ddbas504 toSci '--1' -> NaN Conversion_syntax -ddbas505 toSci '-+1' -> NaN Conversion_syntax -ddbas506 toSci '+-1' -> NaN Conversion_syntax -ddbas507 toSci '12e' -> NaN Conversion_syntax -ddbas508 toSci '12e++' -> NaN Conversion_syntax -ddbas509 toSci '12f4' -> NaN Conversion_syntax -ddbas510 toSci ' +1' -> NaN Conversion_syntax -ddbas511 toSci '+ 1' -> NaN Conversion_syntax -ddbas512 toSci '12 ' -> NaN Conversion_syntax -ddbas513 toSci ' + 1' -> NaN Conversion_syntax -ddbas514 toSci ' - 1 ' -> NaN Conversion_syntax -ddbas515 toSci 'x' -> NaN Conversion_syntax -ddbas516 toSci '-1-' -> NaN Conversion_syntax -ddbas517 toSci '12-' -> NaN Conversion_syntax -ddbas518 toSci '3+' -> NaN Conversion_syntax -ddbas519 toSci '' -> NaN Conversion_syntax -ddbas520 toSci '1e-' -> NaN Conversion_syntax -ddbas521 toSci '7e99999a' -> NaN Conversion_syntax -ddbas522 toSci '7e123567890x' -> NaN Conversion_syntax -ddbas523 toSci '7e12356789012x' -> NaN Conversion_syntax -ddbas524 toSci '' -> NaN Conversion_syntax -ddbas525 toSci 'e100' -> NaN Conversion_syntax -ddbas526 toSci '\u0e5a' -> NaN Conversion_syntax -ddbas527 toSci '\u0b65' -> NaN Conversion_syntax -ddbas528 toSci '123,65' -> NaN Conversion_syntax -ddbas529 toSci '1.34.5' -> NaN Conversion_syntax -ddbas530 toSci '.123.5' -> NaN Conversion_syntax -ddbas531 toSci '01.35.' -> NaN Conversion_syntax -ddbas532 toSci '01.35-' -> NaN Conversion_syntax -ddbas533 toSci '0000..' -> NaN Conversion_syntax -ddbas534 toSci '.0000.' -> NaN Conversion_syntax -ddbas535 toSci '00..00' -> NaN Conversion_syntax -ddbas536 toSci '111e*123' -> NaN Conversion_syntax -ddbas537 toSci '111e123-' -> NaN Conversion_syntax -ddbas538 toSci '111e+12+' -> NaN Conversion_syntax -ddbas539 toSci '111e1-3-' -> NaN Conversion_syntax -ddbas540 toSci '111e1*23' -> NaN Conversion_syntax -ddbas541 toSci '111e1e+3' -> NaN Conversion_syntax -ddbas542 toSci '1e1.0' -> NaN Conversion_syntax -ddbas543 toSci '1e123e' -> NaN Conversion_syntax -ddbas544 toSci 'ten' -> NaN Conversion_syntax -ddbas545 toSci 'ONE' -> NaN Conversion_syntax -ddbas546 toSci '1e.1' -> NaN Conversion_syntax -ddbas547 toSci '1e1.' -> NaN Conversion_syntax -ddbas548 toSci '1ee' -> NaN Conversion_syntax -ddbas549 toSci 'e+1' -> NaN Conversion_syntax -ddbas550 toSci '1.23.4' -> NaN Conversion_syntax -ddbas551 toSci '1.2.1' -> NaN Conversion_syntax -ddbas552 toSci '1E+1.2' -> NaN Conversion_syntax -ddbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax -ddbas554 toSci '1E++1' -> NaN Conversion_syntax -ddbas555 toSci '1E--1' -> NaN Conversion_syntax -ddbas556 toSci '1E+-1' -> NaN Conversion_syntax -ddbas557 toSci '1E-+1' -> NaN Conversion_syntax -ddbas558 toSci '1E''1' -> NaN Conversion_syntax -ddbas559 toSci "1E""1" -> NaN Conversion_syntax -ddbas560 toSci "1E""""" -> NaN Conversion_syntax --- Near-specials -ddbas561 toSci "qNaN" -> NaN Conversion_syntax -ddbas562 toSci "NaNq" -> NaN Conversion_syntax -ddbas563 toSci "NaNs" -> NaN Conversion_syntax -ddbas564 toSci "Infi" -> NaN Conversion_syntax -ddbas565 toSci "Infin" -> NaN Conversion_syntax -ddbas566 toSci "Infini" -> NaN Conversion_syntax -ddbas567 toSci "Infinit" -> NaN Conversion_syntax -ddbas568 toSci "-Infinit" -> NaN Conversion_syntax -ddbas569 toSci "0Inf" -> NaN Conversion_syntax -ddbas570 toSci "9Inf" -> NaN Conversion_syntax -ddbas571 toSci "-0Inf" -> NaN Conversion_syntax -ddbas572 toSci "-9Inf" -> NaN Conversion_syntax -ddbas573 toSci "-sNa" -> NaN Conversion_syntax -ddbas574 toSci "xNaN" -> NaN Conversion_syntax -ddbas575 toSci "0sNaN" -> NaN Conversion_syntax - --- some baddies with dots and Es and dots and specials -ddbas576 toSci 'e+1' -> NaN Conversion_syntax -ddbas577 toSci '.e+1' -> NaN Conversion_syntax -ddbas578 toSci '+.e+1' -> NaN Conversion_syntax -ddbas579 toSci '-.e+' -> NaN Conversion_syntax -ddbas580 toSci '-.e' -> NaN Conversion_syntax -ddbas581 toSci 'E+1' -> NaN Conversion_syntax -ddbas582 toSci '.E+1' -> NaN Conversion_syntax -ddbas583 toSci '+.E+1' -> NaN Conversion_syntax -ddbas584 toSci '-.E+' -> NaN Conversion_syntax -ddbas585 toSci '-.E' -> NaN Conversion_syntax - -ddbas586 toSci '.NaN' -> NaN Conversion_syntax -ddbas587 toSci '-.NaN' -> NaN Conversion_syntax -ddbas588 toSci '+.sNaN' -> NaN Conversion_syntax -ddbas589 toSci '+.Inf' -> NaN Conversion_syntax -ddbas590 toSci '.Infinity' -> NaN Conversion_syntax - --- Zeros -ddbas601 toSci 0.000000000 -> 0E-9 -ddbas602 toSci 0.00000000 -> 0E-8 -ddbas603 toSci 0.0000000 -> 0E-7 -ddbas604 toSci 0.000000 -> 0.000000 -ddbas605 toSci 0.00000 -> 0.00000 -ddbas606 toSci 0.0000 -> 0.0000 -ddbas607 toSci 0.000 -> 0.000 -ddbas608 toSci 0.00 -> 0.00 -ddbas609 toSci 0.0 -> 0.0 -ddbas610 toSci .0 -> 0.0 -ddbas611 toSci 0. -> 0 -ddbas612 toSci -.0 -> -0.0 -ddbas613 toSci -0. -> -0 -ddbas614 toSci -0.0 -> -0.0 -ddbas615 toSci -0.00 -> -0.00 -ddbas616 toSci -0.000 -> -0.000 -ddbas617 toSci -0.0000 -> -0.0000 -ddbas618 toSci -0.00000 -> -0.00000 -ddbas619 toSci -0.000000 -> -0.000000 -ddbas620 toSci -0.0000000 -> -0E-7 -ddbas621 toSci -0.00000000 -> -0E-8 -ddbas622 toSci -0.000000000 -> -0E-9 - -ddbas630 toSci 0.00E+0 -> 0.00 -ddbas631 toSci 0.00E+1 -> 0.0 -ddbas632 toSci 0.00E+2 -> 0 -ddbas633 toSci 0.00E+3 -> 0E+1 -ddbas634 toSci 0.00E+4 -> 0E+2 -ddbas635 toSci 0.00E+5 -> 0E+3 -ddbas636 toSci 0.00E+6 -> 0E+4 -ddbas637 toSci 0.00E+7 -> 0E+5 -ddbas638 toSci 0.00E+8 -> 0E+6 -ddbas639 toSci 0.00E+9 -> 0E+7 - -ddbas640 toSci 0.0E+0 -> 0.0 -ddbas641 toSci 0.0E+1 -> 0 -ddbas642 toSci 0.0E+2 -> 0E+1 -ddbas643 toSci 0.0E+3 -> 0E+2 -ddbas644 toSci 0.0E+4 -> 0E+3 -ddbas645 toSci 0.0E+5 -> 0E+4 -ddbas646 toSci 0.0E+6 -> 0E+5 -ddbas647 toSci 0.0E+7 -> 0E+6 -ddbas648 toSci 0.0E+8 -> 0E+7 -ddbas649 toSci 0.0E+9 -> 0E+8 - -ddbas650 toSci 0E+0 -> 0 -ddbas651 toSci 0E+1 -> 0E+1 -ddbas652 toSci 0E+2 -> 0E+2 -ddbas653 toSci 0E+3 -> 0E+3 -ddbas654 toSci 0E+4 -> 0E+4 -ddbas655 toSci 0E+5 -> 0E+5 -ddbas656 toSci 0E+6 -> 0E+6 -ddbas657 toSci 0E+7 -> 0E+7 -ddbas658 toSci 0E+8 -> 0E+8 -ddbas659 toSci 0E+9 -> 0E+9 - -ddbas660 toSci 0.0E-0 -> 0.0 -ddbas661 toSci 0.0E-1 -> 0.00 -ddbas662 toSci 0.0E-2 -> 0.000 -ddbas663 toSci 0.0E-3 -> 0.0000 -ddbas664 toSci 0.0E-4 -> 0.00000 -ddbas665 toSci 0.0E-5 -> 0.000000 -ddbas666 toSci 0.0E-6 -> 0E-7 -ddbas667 toSci 0.0E-7 -> 0E-8 -ddbas668 toSci 0.0E-8 -> 0E-9 -ddbas669 toSci 0.0E-9 -> 0E-10 - -ddbas670 toSci 0.00E-0 -> 0.00 -ddbas671 toSci 0.00E-1 -> 0.000 -ddbas672 toSci 0.00E-2 -> 0.0000 -ddbas673 toSci 0.00E-3 -> 0.00000 -ddbas674 toSci 0.00E-4 -> 0.000000 -ddbas675 toSci 0.00E-5 -> 0E-7 -ddbas676 toSci 0.00E-6 -> 0E-8 -ddbas677 toSci 0.00E-7 -> 0E-9 -ddbas678 toSci 0.00E-8 -> 0E-10 -ddbas679 toSci 0.00E-9 -> 0E-11 - -ddbas680 toSci 000000. -> 0 -ddbas681 toSci 00000. -> 0 -ddbas682 toSci 0000. -> 0 -ddbas683 toSci 000. -> 0 -ddbas684 toSci 00. -> 0 -ddbas685 toSci 0. -> 0 -ddbas686 toSci +00000. -> 0 -ddbas687 toSci -00000. -> -0 -ddbas688 toSci +0. -> 0 -ddbas689 toSci -0. -> -0 - --- Specials -ddbas700 toSci "NaN" -> NaN -ddbas701 toSci "nan" -> NaN -ddbas702 toSci "nAn" -> NaN -ddbas703 toSci "NAN" -> NaN -ddbas704 toSci "+NaN" -> NaN -ddbas705 toSci "+nan" -> NaN -ddbas706 toSci "+nAn" -> NaN -ddbas707 toSci "+NAN" -> NaN -ddbas708 toSci "-NaN" -> -NaN -ddbas709 toSci "-nan" -> -NaN -ddbas710 toSci "-nAn" -> -NaN -ddbas711 toSci "-NAN" -> -NaN -ddbas712 toSci 'NaN0' -> NaN -ddbas713 toSci 'NaN1' -> NaN1 -ddbas714 toSci 'NaN12' -> NaN12 -ddbas715 toSci 'NaN123' -> NaN123 -ddbas716 toSci 'NaN1234' -> NaN1234 -ddbas717 toSci 'NaN01' -> NaN1 -ddbas718 toSci 'NaN012' -> NaN12 -ddbas719 toSci 'NaN0123' -> NaN123 -ddbas720 toSci 'NaN01234' -> NaN1234 -ddbas721 toSci 'NaN001' -> NaN1 -ddbas722 toSci 'NaN0012' -> NaN12 -ddbas723 toSci 'NaN00123' -> NaN123 -ddbas724 toSci 'NaN001234' -> NaN1234 -ddbas725 toSci 'NaN1234567890123456' -> NaN Conversion_syntax -ddbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax -ddbas727 toSci 'NaN12.45' -> NaN Conversion_syntax -ddbas728 toSci 'NaN-12' -> NaN Conversion_syntax -ddbas729 toSci 'NaN+12' -> NaN Conversion_syntax - -ddbas730 toSci "sNaN" -> sNaN -ddbas731 toSci "snan" -> sNaN -ddbas732 toSci "SnAn" -> sNaN -ddbas733 toSci "SNAN" -> sNaN -ddbas734 toSci "+sNaN" -> sNaN -ddbas735 toSci "+snan" -> sNaN -ddbas736 toSci "+SnAn" -> sNaN -ddbas737 toSci "+SNAN" -> sNaN -ddbas738 toSci "-sNaN" -> -sNaN -ddbas739 toSci "-snan" -> -sNaN -ddbas740 toSci "-SnAn" -> -sNaN -ddbas741 toSci "-SNAN" -> -sNaN -ddbas742 toSci 'sNaN0000' -> sNaN -ddbas743 toSci 'sNaN7' -> sNaN7 -ddbas744 toSci 'sNaN007234' -> sNaN7234 -ddbas745 toSci 'sNaN7234561234567890' -> NaN Conversion_syntax -ddbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax -ddbas747 toSci 'sNaN-72' -> NaN Conversion_syntax - -ddbas748 toSci "Inf" -> Infinity -ddbas749 toSci "inf" -> Infinity -ddbas750 toSci "iNf" -> Infinity -ddbas751 toSci "INF" -> Infinity -ddbas752 toSci "+Inf" -> Infinity -ddbas753 toSci "+inf" -> Infinity -ddbas754 toSci "+iNf" -> Infinity -ddbas755 toSci "+INF" -> Infinity -ddbas756 toSci "-Inf" -> -Infinity -ddbas757 toSci "-inf" -> -Infinity -ddbas758 toSci "-iNf" -> -Infinity -ddbas759 toSci "-INF" -> -Infinity - -ddbas760 toSci "Infinity" -> Infinity -ddbas761 toSci "infinity" -> Infinity -ddbas762 toSci "iNfInItY" -> Infinity -ddbas763 toSci "INFINITY" -> Infinity -ddbas764 toSci "+Infinity" -> Infinity -ddbas765 toSci "+infinity" -> Infinity -ddbas766 toSci "+iNfInItY" -> Infinity -ddbas767 toSci "+INFINITY" -> Infinity -ddbas768 toSci "-Infinity" -> -Infinity -ddbas769 toSci "-infinity" -> -Infinity -ddbas770 toSci "-iNfInItY" -> -Infinity -ddbas771 toSci "-INFINITY" -> -Infinity - --- Specials and zeros for toEng -ddbast772 toEng "NaN" -> NaN -ddbast773 toEng "-Infinity" -> -Infinity -ddbast774 toEng "-sNaN" -> -sNaN -ddbast775 toEng "-NaN" -> -NaN -ddbast776 toEng "+Infinity" -> Infinity -ddbast778 toEng "+sNaN" -> sNaN -ddbast779 toEng "+NaN" -> NaN -ddbast780 toEng "INFINITY" -> Infinity -ddbast781 toEng "SNAN" -> sNaN -ddbast782 toEng "NAN" -> NaN -ddbast783 toEng "infinity" -> Infinity -ddbast784 toEng "snan" -> sNaN -ddbast785 toEng "nan" -> NaN -ddbast786 toEng "InFINITY" -> Infinity -ddbast787 toEng "SnAN" -> sNaN -ddbast788 toEng "nAN" -> NaN -ddbast789 toEng "iNfinity" -> Infinity -ddbast790 toEng "sNan" -> sNaN -ddbast791 toEng "Nan" -> NaN -ddbast792 toEng "Infinity" -> Infinity -ddbast793 toEng "sNaN" -> sNaN - --- Zero toEng, etc. -ddbast800 toEng 0e+1 -> "0.00E+3" -- doc example - -ddbast801 toEng 0.000000000 -> 0E-9 -ddbast802 toEng 0.00000000 -> 0.00E-6 -ddbast803 toEng 0.0000000 -> 0.0E-6 -ddbast804 toEng 0.000000 -> 0.000000 -ddbast805 toEng 0.00000 -> 0.00000 -ddbast806 toEng 0.0000 -> 0.0000 -ddbast807 toEng 0.000 -> 0.000 -ddbast808 toEng 0.00 -> 0.00 -ddbast809 toEng 0.0 -> 0.0 -ddbast810 toEng .0 -> 0.0 -ddbast811 toEng 0. -> 0 -ddbast812 toEng -.0 -> -0.0 -ddbast813 toEng -0. -> -0 -ddbast814 toEng -0.0 -> -0.0 -ddbast815 toEng -0.00 -> -0.00 -ddbast816 toEng -0.000 -> -0.000 -ddbast817 toEng -0.0000 -> -0.0000 -ddbast818 toEng -0.00000 -> -0.00000 -ddbast819 toEng -0.000000 -> -0.000000 -ddbast820 toEng -0.0000000 -> -0.0E-6 -ddbast821 toEng -0.00000000 -> -0.00E-6 -ddbast822 toEng -0.000000000 -> -0E-9 - -ddbast830 toEng 0.00E+0 -> 0.00 -ddbast831 toEng 0.00E+1 -> 0.0 -ddbast832 toEng 0.00E+2 -> 0 -ddbast833 toEng 0.00E+3 -> 0.00E+3 -ddbast834 toEng 0.00E+4 -> 0.0E+3 -ddbast835 toEng 0.00E+5 -> 0E+3 -ddbast836 toEng 0.00E+6 -> 0.00E+6 -ddbast837 toEng 0.00E+7 -> 0.0E+6 -ddbast838 toEng 0.00E+8 -> 0E+6 -ddbast839 toEng 0.00E+9 -> 0.00E+9 - -ddbast840 toEng 0.0E+0 -> 0.0 -ddbast841 toEng 0.0E+1 -> 0 -ddbast842 toEng 0.0E+2 -> 0.00E+3 -ddbast843 toEng 0.0E+3 -> 0.0E+3 -ddbast844 toEng 0.0E+4 -> 0E+3 -ddbast845 toEng 0.0E+5 -> 0.00E+6 -ddbast846 toEng 0.0E+6 -> 0.0E+6 -ddbast847 toEng 0.0E+7 -> 0E+6 -ddbast848 toEng 0.0E+8 -> 0.00E+9 -ddbast849 toEng 0.0E+9 -> 0.0E+9 - -ddbast850 toEng 0E+0 -> 0 -ddbast851 toEng 0E+1 -> 0.00E+3 -ddbast852 toEng 0E+2 -> 0.0E+3 -ddbast853 toEng 0E+3 -> 0E+3 -ddbast854 toEng 0E+4 -> 0.00E+6 -ddbast855 toEng 0E+5 -> 0.0E+6 -ddbast856 toEng 0E+6 -> 0E+6 -ddbast857 toEng 0E+7 -> 0.00E+9 -ddbast858 toEng 0E+8 -> 0.0E+9 -ddbast859 toEng 0E+9 -> 0E+9 - -ddbast860 toEng 0.0E-0 -> 0.0 -ddbast861 toEng 0.0E-1 -> 0.00 -ddbast862 toEng 0.0E-2 -> 0.000 -ddbast863 toEng 0.0E-3 -> 0.0000 -ddbast864 toEng 0.0E-4 -> 0.00000 -ddbast865 toEng 0.0E-5 -> 0.000000 -ddbast866 toEng 0.0E-6 -> 0.0E-6 -ddbast867 toEng 0.0E-7 -> 0.00E-6 -ddbast868 toEng 0.0E-8 -> 0E-9 -ddbast869 toEng 0.0E-9 -> 0.0E-9 - -ddbast870 toEng 0.00E-0 -> 0.00 -ddbast871 toEng 0.00E-1 -> 0.000 -ddbast872 toEng 0.00E-2 -> 0.0000 -ddbast873 toEng 0.00E-3 -> 0.00000 -ddbast874 toEng 0.00E-4 -> 0.000000 -ddbast875 toEng 0.00E-5 -> 0.0E-6 -ddbast876 toEng 0.00E-6 -> 0.00E-6 -ddbast877 toEng 0.00E-7 -> 0E-9 -ddbast878 toEng 0.00E-8 -> 0.0E-9 -ddbast879 toEng 0.00E-9 -> 0.00E-9 - --- long input strings -ddbas801 tosci '01234567890123456' -> 1234567890123456 -ddbas802 tosci '001234567890123456' -> 1234567890123456 -ddbas803 tosci '0001234567890123456' -> 1234567890123456 -ddbas804 tosci '00001234567890123456' -> 1234567890123456 -ddbas805 tosci '000001234567890123456' -> 1234567890123456 -ddbas806 tosci '0000001234567890123456' -> 1234567890123456 -ddbas807 tosci '00000001234567890123456' -> 1234567890123456 -ddbas808 tosci '000000001234567890123456' -> 1234567890123456 -ddbas809 tosci '0000000001234567890123456' -> 1234567890123456 -ddbas810 tosci '00000000001234567890123456' -> 1234567890123456 - -ddbas811 tosci '0.1234567890123456' -> 0.1234567890123456 -ddbas812 tosci '0.01234567890123456' -> 0.01234567890123456 -ddbas813 tosci '0.001234567890123456' -> 0.001234567890123456 -ddbas814 tosci '0.0001234567890123456' -> 0.0001234567890123456 -ddbas815 tosci '0.00001234567890123456' -> 0.00001234567890123456 -ddbas816 tosci '0.000001234567890123456' -> 0.000001234567890123456 -ddbas817 tosci '0.0000001234567890123456' -> 1.234567890123456E-7 -ddbas818 tosci '0.00000001234567890123456' -> 1.234567890123456E-8 -ddbas819 tosci '0.000000001234567890123456' -> 1.234567890123456E-9 -ddbas820 tosci '0.0000000001234567890123456' -> 1.234567890123456E-10 - -ddbas821 tosci '12345678901234567890' -> 1.234567890123457E+19 Inexact Rounded -ddbas822 tosci '123456789012345678901' -> 1.234567890123457E+20 Inexact Rounded -ddbas823 tosci '1234567890123456789012' -> 1.234567890123457E+21 Inexact Rounded -ddbas824 tosci '12345678901234567890123' -> 1.234567890123457E+22 Inexact Rounded -ddbas825 tosci '123456789012345678901234' -> 1.234567890123457E+23 Inexact Rounded -ddbas826 tosci '1234567890123456789012345' -> 1.234567890123457E+24 Inexact Rounded -ddbas827 tosci '12345678901234567890123456' -> 1.234567890123457E+25 Inexact Rounded -ddbas828 tosci '123456789012345678901234567' -> 1.234567890123457E+26 Inexact Rounded -ddbas829 tosci '1234567890123456789012345678' -> 1.234567890123457E+27 Inexact Rounded - --- subnormals and overflows -ddbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded -ddbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded -ddbas908 toSci '0.9e-999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas909 toSci '0.09e-999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded -ddbas911 toSci '10e-1000000000' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded -ddbas913 toSci '99e-9999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded -ddbas915 toSci '1111e-9999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas916 toSci '1111e-99999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded --- negatives the same -ddbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded -ddbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded -ddbas920 toSci '-0.9e-999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas921 toSci '-0.09e-999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded -ddbas923 toSci '-10e-1000000000' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded -ddbas925 toSci '-99e-9999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded -ddbas927 toSci '-1111e-9999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas928 toSci '-1111e-99999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded - --- overflow results at different rounding modes -rounding: ceiling -ddbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas931 toSci '-7e10000' -> -9.999999999999999E+384 Overflow Inexact Rounded -rounding: up -ddbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: down -ddbas934 toSci '7e10000' -> 9.999999999999999E+384 Overflow Inexact Rounded -ddbas935 toSci '-7e10000' -> -9.999999999999999E+384 Overflow Inexact Rounded -rounding: floor -ddbas936 toSci '7e10000' -> 9.999999999999999E+384 Overflow Inexact Rounded -ddbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_up -ddbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_even -ddbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_down -ddbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_even - --- Now check 854/754r some subnormals and underflow to 0 -ddbem400 toSci 1.0000E-383 -> 1.0000E-383 -ddbem401 toSci 0.1E-394 -> 1E-395 Subnormal -ddbem402 toSci 0.1000E-394 -> 1.000E-395 Subnormal -ddbem403 toSci 0.0100E-394 -> 1.00E-396 Subnormal -ddbem404 toSci 0.0010E-394 -> 1.0E-397 Subnormal -ddbem405 toSci 0.0001E-394 -> 1E-398 Subnormal -ddbem406 toSci 0.00010E-394 -> 1E-398 Subnormal Rounded -ddbem407 toSci 0.00013E-394 -> 1E-398 Underflow Subnormal Inexact Rounded -ddbem408 toSci 0.00015E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem409 toSci 0.00017E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem410 toSci 0.00023E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem411 toSci 0.00025E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem412 toSci 0.00027E-394 -> 3E-398 Underflow Subnormal Inexact Rounded -ddbem413 toSci 0.000149E-394 -> 1E-398 Underflow Subnormal Inexact Rounded -ddbem414 toSci 0.000150E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem415 toSci 0.000151E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem416 toSci 0.000249E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem417 toSci 0.000250E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem418 toSci 0.000251E-394 -> 3E-398 Underflow Subnormal Inexact Rounded -ddbem419 toSci 0.00009E-394 -> 1E-398 Underflow Subnormal Inexact Rounded -ddbem420 toSci 0.00005E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem421 toSci 0.00003E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem422 toSci 0.000009E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem423 toSci 0.000005E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem424 toSci 0.000003E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - -ddbem425 toSci 0.001049E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded -ddbem426 toSci 0.001050E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded -ddbem427 toSci 0.001051E-394 -> 1.1E-397 Underflow Subnormal Inexact Rounded -ddbem428 toSci 0.001149E-394 -> 1.1E-397 Underflow Subnormal Inexact Rounded -ddbem429 toSci 0.001150E-394 -> 1.2E-397 Underflow Subnormal Inexact Rounded -ddbem430 toSci 0.001151E-394 -> 1.2E-397 Underflow Subnormal Inexact Rounded - -ddbem432 toSci 0.010049E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded -ddbem433 toSci 0.010050E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded -ddbem434 toSci 0.010051E-394 -> 1.01E-396 Underflow Subnormal Inexact Rounded -ddbem435 toSci 0.010149E-394 -> 1.01E-396 Underflow Subnormal Inexact Rounded -ddbem436 toSci 0.010150E-394 -> 1.02E-396 Underflow Subnormal Inexact Rounded -ddbem437 toSci 0.010151E-394 -> 1.02E-396 Underflow Subnormal Inexact Rounded - -ddbem440 toSci 0.10103E-394 -> 1.010E-395 Underflow Subnormal Inexact Rounded -ddbem441 toSci 0.10105E-394 -> 1.010E-395 Underflow Subnormal Inexact Rounded -ddbem442 toSci 0.10107E-394 -> 1.011E-395 Underflow Subnormal Inexact Rounded -ddbem443 toSci 0.10113E-394 -> 1.011E-395 Underflow Subnormal Inexact Rounded -ddbem444 toSci 0.10115E-394 -> 1.012E-395 Underflow Subnormal Inexact Rounded -ddbem445 toSci 0.10117E-394 -> 1.012E-395 Underflow Subnormal Inexact Rounded - -ddbem450 toSci 1.10730E-395 -> 1.107E-395 Underflow Subnormal Inexact Rounded -ddbem451 toSci 1.10750E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded -ddbem452 toSci 1.10770E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded -ddbem453 toSci 1.10830E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded -ddbem454 toSci 1.10850E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded -ddbem455 toSci 1.10870E-395 -> 1.109E-395 Underflow Subnormal Inexact Rounded - --- make sure sign OK -ddbem456 toSci -0.10103E-394 -> -1.010E-395 Underflow Subnormal Inexact Rounded -ddbem457 toSci -0.10105E-394 -> -1.010E-395 Underflow Subnormal Inexact Rounded -ddbem458 toSci -0.10107E-394 -> -1.011E-395 Underflow Subnormal Inexact Rounded -ddbem459 toSci -0.10113E-394 -> -1.011E-395 Underflow Subnormal Inexact Rounded -ddbem460 toSci -0.10115E-394 -> -1.012E-395 Underflow Subnormal Inexact Rounded -ddbem461 toSci -0.10117E-394 -> -1.012E-395 Underflow Subnormal Inexact Rounded - --- '999s' cases -ddbem464 toSci 999999E-395 -> 9.99999E-390 Subnormal -ddbem465 toSci 99999.0E-394 -> 9.99990E-390 Subnormal -ddbem466 toSci 99999.E-394 -> 9.9999E-390 Subnormal -ddbem467 toSci 9999.9E-394 -> 9.9999E-391 Subnormal -ddbem468 toSci 999.99E-394 -> 9.9999E-392 Subnormal -ddbem469 toSci 99.999E-394 -> 9.9999E-393 Subnormal -ddbem470 toSci 9.9999E-394 -> 9.9999E-394 Subnormal -ddbem471 toSci 0.99999E-394 -> 1.0000E-394 Underflow Subnormal Inexact Rounded -ddbem472 toSci 0.099999E-394 -> 1.000E-395 Underflow Subnormal Inexact Rounded -ddbem473 toSci 0.0099999E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded -ddbem474 toSci 0.00099999E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded -ddbem475 toSci 0.000099999E-394 -> 1E-398 Underflow Subnormal Inexact Rounded -ddbem476 toSci 0.0000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem477 toSci 0.00000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem478 toSci 0.000000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- Exponents with insignificant leading zeros -ddbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded -ddbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded -ddbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded -ddbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded -ddbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded -ddbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded -ddbas1007 toSci 1e-999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1008 toSci 1e-0999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1009 toSci 1e-00999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1010 toSci 1e-000999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1011 toSci 1e-000000000000999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1012 toSci 1e-000000000001000000007 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- check for double-rounded subnormals -ddbas1041 toSci 1.1111111111152444E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow -ddbas1042 toSci 1.1111111111152445E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow -ddbas1043 toSci 1.1111111111152446E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow - --- clamped large normals -ddbas1070 toSci 1E+369 -> 1E+369 -ddbas1071 toSci 1E+370 -> 1.0E+370 Clamped -ddbas1072 toSci 1E+378 -> 1.000000000E+378 Clamped -ddbas1073 toSci 1E+384 -> 1.000000000000000E+384 Clamped -ddbas1074 toSci 1E+385 -> Infinity Overflow Inexact Rounded - - --- clamped zeros [see also clamp.decTest] -ddbas1075 toSci 0e+10000 -> 0E+369 Clamped -ddbas1076 toSci 0e-10000 -> 0E-398 Clamped -ddbas1077 toSci -0e+10000 -> -0E+369 Clamped -ddbas1078 toSci -0e-10000 -> -0E-398 Clamped - --- extreme values from next-wider -ddbas1101 toSci -9.99999999999999999999999999999999E+6144 -> -Infinity Overflow Inexact Rounded -ddbas1102 toSci -1E-6143 -> -0E-398 Inexact Rounded Subnormal Underflow Clamped -ddbas1103 toSci -1E-6176 -> -0E-398 Inexact Rounded Subnormal Underflow Clamped -ddbas1104 toSci -0 -> -0 -ddbas1105 toSci +0 -> 0 -ddbas1106 toSci +1E-6176 -> 0E-398 Inexact Rounded Subnormal Underflow Clamped -ddbas1107 toSci +1E-6173 -> 0E-398 Inexact Rounded Subnormal Underflow Clamped -ddbas1108 toSci +9.99999999999999999999999999999999E+6144 -> Infinity Overflow Inexact Rounded - +------------------------------------------------------------------------ +-- ddBase.decTest -- base decDouble <--> string conversions -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests base conversions from string to a decimal number +-- and back to a string (in Scientific form) + +-- Note that unlike other operations the operand is subject to rounding +-- to conform to emax and precision settings (that is, numbers will +-- conform to rules and exponent will be in permitted range). The +-- 'left hand side', therefore, may have numbers that cannot be +-- represented in a decDouble. Some testcases go to the limit of the +-- next-wider format, and hence these testcases may also be used to +-- test narrowing and widening operations. + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddbas001 toSci 0 -> 0 +ddbas002 toSci 1 -> 1 +ddbas003 toSci 1.0 -> 1.0 +ddbas004 toSci 1.00 -> 1.00 +ddbas005 toSci 10 -> 10 +ddbas006 toSci 1000 -> 1000 +ddbas007 toSci 10.0 -> 10.0 +ddbas008 toSci 10.1 -> 10.1 +ddbas009 toSci 10.4 -> 10.4 +ddbas010 toSci 10.5 -> 10.5 +ddbas011 toSci 10.6 -> 10.6 +ddbas012 toSci 10.9 -> 10.9 +ddbas013 toSci 11.0 -> 11.0 +ddbas014 toSci 1.234 -> 1.234 +ddbas015 toSci 0.123 -> 0.123 +ddbas016 toSci 0.012 -> 0.012 +ddbas017 toSci -0 -> -0 +ddbas018 toSci -0.0 -> -0.0 +ddbas019 toSci -00.00 -> -0.00 + +ddbas021 toSci -1 -> -1 +ddbas022 toSci -1.0 -> -1.0 +ddbas023 toSci -0.1 -> -0.1 +ddbas024 toSci -9.1 -> -9.1 +ddbas025 toSci -9.11 -> -9.11 +ddbas026 toSci -9.119 -> -9.119 +ddbas027 toSci -9.999 -> -9.999 + +ddbas030 toSci '123456789.123456' -> '123456789.123456' +ddbas031 toSci '123456789.000000' -> '123456789.000000' +ddbas032 toSci '123456789123456' -> '123456789123456' +ddbas033 toSci '0.0000123456789' -> '0.0000123456789' +ddbas034 toSci '0.00000123456789' -> '0.00000123456789' +ddbas035 toSci '0.000000123456789' -> '1.23456789E-7' +ddbas036 toSci '0.0000000123456789' -> '1.23456789E-8' + +ddbas037 toSci '0.123456789012344' -> '0.123456789012344' +ddbas038 toSci '0.123456789012345' -> '0.123456789012345' + +-- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) +ddbsn001 toSci -9.999999999999999E+384 -> -9.999999999999999E+384 +ddbsn002 toSci -1E-383 -> -1E-383 +ddbsn003 toSci -1E-398 -> -1E-398 Subnormal +ddbsn004 toSci -0 -> -0 +ddbsn005 toSci +0 -> 0 +ddbsn006 toSci +1E-398 -> 1E-398 Subnormal +ddbsn007 toSci +1E-383 -> 1E-383 +ddbsn008 toSci +9.999999999999999E+384 -> 9.999999999999999E+384 + +-- String [many more examples are implicitly tested elsewhere] +-- strings without E cannot generate E in result +ddbas040 toSci "12" -> '12' +ddbas041 toSci "-76" -> '-76' +ddbas042 toSci "12.76" -> '12.76' +ddbas043 toSci "+12.76" -> '12.76' +ddbas044 toSci "012.76" -> '12.76' +ddbas045 toSci "+0.003" -> '0.003' +ddbas046 toSci "17." -> '17' +ddbas047 toSci ".5" -> '0.5' +ddbas048 toSci "044" -> '44' +ddbas049 toSci "0044" -> '44' +ddbas050 toSci "0.0005" -> '0.0005' +ddbas051 toSci "00.00005" -> '0.00005' +ddbas052 toSci "0.000005" -> '0.000005' +ddbas053 toSci "0.0000050" -> '0.0000050' +ddbas054 toSci "0.0000005" -> '5E-7' +ddbas055 toSci "0.00000005" -> '5E-8' +ddbas056 toSci "12345678.543210" -> '12345678.543210' +ddbas057 toSci "2345678.543210" -> '2345678.543210' +ddbas058 toSci "345678.543210" -> '345678.543210' +ddbas059 toSci "0345678.54321" -> '345678.54321' +ddbas060 toSci "345678.5432" -> '345678.5432' +ddbas061 toSci "+345678.5432" -> '345678.5432' +ddbas062 toSci "+0345678.5432" -> '345678.5432' +ddbas063 toSci "+00345678.5432" -> '345678.5432' +ddbas064 toSci "-345678.5432" -> '-345678.5432' +ddbas065 toSci "-0345678.5432" -> '-345678.5432' +ddbas066 toSci "-00345678.5432" -> '-345678.5432' +-- examples +ddbas067 toSci "5E-6" -> '0.000005' +ddbas068 toSci "50E-7" -> '0.0000050' +ddbas069 toSci "5E-7" -> '5E-7' + +-- [No exotics as no Unicode] + +-- rounded with dots in all (including edge) places +ddbas071 toSci .1234567890123456123 -> 0.1234567890123456 Inexact Rounded +ddbas072 toSci 1.234567890123456123 -> 1.234567890123456 Inexact Rounded +ddbas073 toSci 12.34567890123456123 -> 12.34567890123456 Inexact Rounded +ddbas074 toSci 123.4567890123456123 -> 123.4567890123456 Inexact Rounded +ddbas075 toSci 1234.567890123456123 -> 1234.567890123456 Inexact Rounded +ddbas076 toSci 12345.67890123456123 -> 12345.67890123456 Inexact Rounded +ddbas077 toSci 123456.7890123456123 -> 123456.7890123456 Inexact Rounded +ddbas078 toSci 1234567.890123456123 -> 1234567.890123456 Inexact Rounded +ddbas079 toSci 12345678.90123456123 -> 12345678.90123456 Inexact Rounded +ddbas080 toSci 123456789.0123456123 -> 123456789.0123456 Inexact Rounded +ddbas081 toSci 1234567890.123456123 -> 1234567890.123456 Inexact Rounded +ddbas082 toSci 12345678901.23456123 -> 12345678901.23456 Inexact Rounded +ddbas083 toSci 123456789012.3456123 -> 123456789012.3456 Inexact Rounded +ddbas084 toSci 1234567890123.456123 -> 1234567890123.456 Inexact Rounded +ddbas085 toSci 12345678901234.56123 -> 12345678901234.56 Inexact Rounded +ddbas086 toSci 123456789012345.6123 -> 123456789012345.6 Inexact Rounded +ddbas087 toSci 1234567890123456.123 -> 1234567890123456 Inexact Rounded +ddbas088 toSci 12345678901234561.23 -> 1.234567890123456E+16 Inexact Rounded +ddbas089 toSci 123456789012345612.3 -> 1.234567890123456E+17 Inexact Rounded +ddbas090 toSci 1234567890123456123. -> 1.234567890123456E+18 Inexact Rounded + + +-- Numbers with E +ddbas130 toSci "0.000E-1" -> '0.0000' +ddbas131 toSci "0.000E-2" -> '0.00000' +ddbas132 toSci "0.000E-3" -> '0.000000' +ddbas133 toSci "0.000E-4" -> '0E-7' +ddbas134 toSci "0.00E-2" -> '0.0000' +ddbas135 toSci "0.00E-3" -> '0.00000' +ddbas136 toSci "0.00E-4" -> '0.000000' +ddbas137 toSci "0.00E-5" -> '0E-7' +ddbas138 toSci "+0E+9" -> '0E+9' +ddbas139 toSci "-0E+9" -> '-0E+9' +ddbas140 toSci "1E+9" -> '1E+9' +ddbas141 toSci "1e+09" -> '1E+9' +ddbas142 toSci "1E+90" -> '1E+90' +ddbas143 toSci "+1E+009" -> '1E+9' +ddbas144 toSci "0E+9" -> '0E+9' +ddbas145 toSci "1E+9" -> '1E+9' +ddbas146 toSci "1E+09" -> '1E+9' +ddbas147 toSci "1e+90" -> '1E+90' +ddbas148 toSci "1E+009" -> '1E+9' +ddbas149 toSci "000E+9" -> '0E+9' +ddbas150 toSci "1E9" -> '1E+9' +ddbas151 toSci "1e09" -> '1E+9' +ddbas152 toSci "1E90" -> '1E+90' +ddbas153 toSci "1E009" -> '1E+9' +ddbas154 toSci "0E9" -> '0E+9' +ddbas155 toSci "0.000e+0" -> '0.000' +ddbas156 toSci "0.000E-1" -> '0.0000' +ddbas157 toSci "4E+9" -> '4E+9' +ddbas158 toSci "44E+9" -> '4.4E+10' +ddbas159 toSci "0.73e-7" -> '7.3E-8' +ddbas160 toSci "00E+9" -> '0E+9' +ddbas161 toSci "00E-9" -> '0E-9' +ddbas162 toSci "10E+9" -> '1.0E+10' +ddbas163 toSci "10E+09" -> '1.0E+10' +ddbas164 toSci "10e+90" -> '1.0E+91' +ddbas165 toSci "10E+009" -> '1.0E+10' +ddbas166 toSci "100e+9" -> '1.00E+11' +ddbas167 toSci "100e+09" -> '1.00E+11' +ddbas168 toSci "100E+90" -> '1.00E+92' +ddbas169 toSci "100e+009" -> '1.00E+11' + +ddbas170 toSci "1.265" -> '1.265' +ddbas171 toSci "1.265E-20" -> '1.265E-20' +ddbas172 toSci "1.265E-8" -> '1.265E-8' +ddbas173 toSci "1.265E-4" -> '0.0001265' +ddbas174 toSci "1.265E-3" -> '0.001265' +ddbas175 toSci "1.265E-2" -> '0.01265' +ddbas176 toSci "1.265E-1" -> '0.1265' +ddbas177 toSci "1.265E-0" -> '1.265' +ddbas178 toSci "1.265E+1" -> '12.65' +ddbas179 toSci "1.265E+2" -> '126.5' +ddbas180 toSci "1.265E+3" -> '1265' +ddbas181 toSci "1.265E+4" -> '1.265E+4' +ddbas182 toSci "1.265E+8" -> '1.265E+8' +ddbas183 toSci "1.265E+20" -> '1.265E+20' + +ddbas190 toSci "12.65" -> '12.65' +ddbas191 toSci "12.65E-20" -> '1.265E-19' +ddbas192 toSci "12.65E-8" -> '1.265E-7' +ddbas193 toSci "12.65E-4" -> '0.001265' +ddbas194 toSci "12.65E-3" -> '0.01265' +ddbas195 toSci "12.65E-2" -> '0.1265' +ddbas196 toSci "12.65E-1" -> '1.265' +ddbas197 toSci "12.65E-0" -> '12.65' +ddbas198 toSci "12.65E+1" -> '126.5' +ddbas199 toSci "12.65E+2" -> '1265' +ddbas200 toSci "12.65E+3" -> '1.265E+4' +ddbas201 toSci "12.65E+4" -> '1.265E+5' +ddbas202 toSci "12.65E+8" -> '1.265E+9' +ddbas203 toSci "12.65E+20" -> '1.265E+21' + +ddbas210 toSci "126.5" -> '126.5' +ddbas211 toSci "126.5E-20" -> '1.265E-18' +ddbas212 toSci "126.5E-8" -> '0.000001265' +ddbas213 toSci "126.5E-4" -> '0.01265' +ddbas214 toSci "126.5E-3" -> '0.1265' +ddbas215 toSci "126.5E-2" -> '1.265' +ddbas216 toSci "126.5E-1" -> '12.65' +ddbas217 toSci "126.5E-0" -> '126.5' +ddbas218 toSci "126.5E+1" -> '1265' +ddbas219 toSci "126.5E+2" -> '1.265E+4' +ddbas220 toSci "126.5E+3" -> '1.265E+5' +ddbas221 toSci "126.5E+4" -> '1.265E+6' +ddbas222 toSci "126.5E+8" -> '1.265E+10' +ddbas223 toSci "126.5E+20" -> '1.265E+22' + +ddbas230 toSci "1265" -> '1265' +ddbas231 toSci "1265E-20" -> '1.265E-17' +ddbas232 toSci "1265E-8" -> '0.00001265' +ddbas233 toSci "1265E-4" -> '0.1265' +ddbas234 toSci "1265E-3" -> '1.265' +ddbas235 toSci "1265E-2" -> '12.65' +ddbas236 toSci "1265E-1" -> '126.5' +ddbas237 toSci "1265E-0" -> '1265' +ddbas238 toSci "1265E+1" -> '1.265E+4' +ddbas239 toSci "1265E+2" -> '1.265E+5' +ddbas240 toSci "1265E+3" -> '1.265E+6' +ddbas241 toSci "1265E+4" -> '1.265E+7' +ddbas242 toSci "1265E+8" -> '1.265E+11' +ddbas243 toSci "1265E+20" -> '1.265E+23' +ddbas244 toSci "1265E-9" -> '0.000001265' +ddbas245 toSci "1265E-10" -> '1.265E-7' +ddbas246 toSci "1265E-11" -> '1.265E-8' +ddbas247 toSci "1265E-12" -> '1.265E-9' + +ddbas250 toSci "0.1265" -> '0.1265' +ddbas251 toSci "0.1265E-20" -> '1.265E-21' +ddbas252 toSci "0.1265E-8" -> '1.265E-9' +ddbas253 toSci "0.1265E-4" -> '0.00001265' +ddbas254 toSci "0.1265E-3" -> '0.0001265' +ddbas255 toSci "0.1265E-2" -> '0.001265' +ddbas256 toSci "0.1265E-1" -> '0.01265' +ddbas257 toSci "0.1265E-0" -> '0.1265' +ddbas258 toSci "0.1265E+1" -> '1.265' +ddbas259 toSci "0.1265E+2" -> '12.65' +ddbas260 toSci "0.1265E+3" -> '126.5' +ddbas261 toSci "0.1265E+4" -> '1265' +ddbas262 toSci "0.1265E+8" -> '1.265E+7' +ddbas263 toSci "0.1265E+20" -> '1.265E+19' + +-- some more negative zeros [systematic tests below] +ddbas290 toSci "-0.000E-1" -> '-0.0000' +ddbas291 toSci "-0.000E-2" -> '-0.00000' +ddbas292 toSci "-0.000E-3" -> '-0.000000' +ddbas293 toSci "-0.000E-4" -> '-0E-7' +ddbas294 toSci "-0.00E-2" -> '-0.0000' +ddbas295 toSci "-0.00E-3" -> '-0.00000' +ddbas296 toSci "-0.0E-2" -> '-0.000' +ddbas297 toSci "-0.0E-3" -> '-0.0000' +ddbas298 toSci "-0E-2" -> '-0.00' +ddbas299 toSci "-0E-3" -> '-0.000' + +-- Engineering notation tests +ddbas301 toSci 10e12 -> 1.0E+13 +ddbas302 toEng 10e12 -> 10E+12 +ddbas303 toSci 10e11 -> 1.0E+12 +ddbas304 toEng 10e11 -> 1.0E+12 +ddbas305 toSci 10e10 -> 1.0E+11 +ddbas306 toEng 10e10 -> 100E+9 +ddbas307 toSci 10e9 -> 1.0E+10 +ddbas308 toEng 10e9 -> 10E+9 +ddbas309 toSci 10e8 -> 1.0E+9 +ddbas310 toEng 10e8 -> 1.0E+9 +ddbas311 toSci 10e7 -> 1.0E+8 +ddbas312 toEng 10e7 -> 100E+6 +ddbas313 toSci 10e6 -> 1.0E+7 +ddbas314 toEng 10e6 -> 10E+6 +ddbas315 toSci 10e5 -> 1.0E+6 +ddbas316 toEng 10e5 -> 1.0E+6 +ddbas317 toSci 10e4 -> 1.0E+5 +ddbas318 toEng 10e4 -> 100E+3 +ddbas319 toSci 10e3 -> 1.0E+4 +ddbas320 toEng 10e3 -> 10E+3 +ddbas321 toSci 10e2 -> 1.0E+3 +ddbas322 toEng 10e2 -> 1.0E+3 +ddbas323 toSci 10e1 -> 1.0E+2 +ddbas324 toEng 10e1 -> 100 +ddbas325 toSci 10e0 -> 10 +ddbas326 toEng 10e0 -> 10 +ddbas327 toSci 10e-1 -> 1.0 +ddbas328 toEng 10e-1 -> 1.0 +ddbas329 toSci 10e-2 -> 0.10 +ddbas330 toEng 10e-2 -> 0.10 +ddbas331 toSci 10e-3 -> 0.010 +ddbas332 toEng 10e-3 -> 0.010 +ddbas333 toSci 10e-4 -> 0.0010 +ddbas334 toEng 10e-4 -> 0.0010 +ddbas335 toSci 10e-5 -> 0.00010 +ddbas336 toEng 10e-5 -> 0.00010 +ddbas337 toSci 10e-6 -> 0.000010 +ddbas338 toEng 10e-6 -> 0.000010 +ddbas339 toSci 10e-7 -> 0.0000010 +ddbas340 toEng 10e-7 -> 0.0000010 +ddbas341 toSci 10e-8 -> 1.0E-7 +ddbas342 toEng 10e-8 -> 100E-9 +ddbas343 toSci 10e-9 -> 1.0E-8 +ddbas344 toEng 10e-9 -> 10E-9 +ddbas345 toSci 10e-10 -> 1.0E-9 +ddbas346 toEng 10e-10 -> 1.0E-9 +ddbas347 toSci 10e-11 -> 1.0E-10 +ddbas348 toEng 10e-11 -> 100E-12 +ddbas349 toSci 10e-12 -> 1.0E-11 +ddbas350 toEng 10e-12 -> 10E-12 +ddbas351 toSci 10e-13 -> 1.0E-12 +ddbas352 toEng 10e-13 -> 1.0E-12 + +ddbas361 toSci 7E12 -> 7E+12 +ddbas362 toEng 7E12 -> 7E+12 +ddbas363 toSci 7E11 -> 7E+11 +ddbas364 toEng 7E11 -> 700E+9 +ddbas365 toSci 7E10 -> 7E+10 +ddbas366 toEng 7E10 -> 70E+9 +ddbas367 toSci 7E9 -> 7E+9 +ddbas368 toEng 7E9 -> 7E+9 +ddbas369 toSci 7E8 -> 7E+8 +ddbas370 toEng 7E8 -> 700E+6 +ddbas371 toSci 7E7 -> 7E+7 +ddbas372 toEng 7E7 -> 70E+6 +ddbas373 toSci 7E6 -> 7E+6 +ddbas374 toEng 7E6 -> 7E+6 +ddbas375 toSci 7E5 -> 7E+5 +ddbas376 toEng 7E5 -> 700E+3 +ddbas377 toSci 7E4 -> 7E+4 +ddbas378 toEng 7E4 -> 70E+3 +ddbas379 toSci 7E3 -> 7E+3 +ddbas380 toEng 7E3 -> 7E+3 +ddbas381 toSci 7E2 -> 7E+2 +ddbas382 toEng 7E2 -> 700 +ddbas383 toSci 7E1 -> 7E+1 +ddbas384 toEng 7E1 -> 70 +ddbas385 toSci 7E0 -> 7 +ddbas386 toEng 7E0 -> 7 +ddbas387 toSci 7E-1 -> 0.7 +ddbas388 toEng 7E-1 -> 0.7 +ddbas389 toSci 7E-2 -> 0.07 +ddbas390 toEng 7E-2 -> 0.07 +ddbas391 toSci 7E-3 -> 0.007 +ddbas392 toEng 7E-3 -> 0.007 +ddbas393 toSci 7E-4 -> 0.0007 +ddbas394 toEng 7E-4 -> 0.0007 +ddbas395 toSci 7E-5 -> 0.00007 +ddbas396 toEng 7E-5 -> 0.00007 +ddbas397 toSci 7E-6 -> 0.000007 +ddbas398 toEng 7E-6 -> 0.000007 +ddbas399 toSci 7E-7 -> 7E-7 +ddbas400 toEng 7E-7 -> 700E-9 +ddbas401 toSci 7E-8 -> 7E-8 +ddbas402 toEng 7E-8 -> 70E-9 +ddbas403 toSci 7E-9 -> 7E-9 +ddbas404 toEng 7E-9 -> 7E-9 +ddbas405 toSci 7E-10 -> 7E-10 +ddbas406 toEng 7E-10 -> 700E-12 +ddbas407 toSci 7E-11 -> 7E-11 +ddbas408 toEng 7E-11 -> 70E-12 +ddbas409 toSci 7E-12 -> 7E-12 +ddbas410 toEng 7E-12 -> 7E-12 +ddbas411 toSci 7E-13 -> 7E-13 +ddbas412 toEng 7E-13 -> 700E-15 + +-- Exacts remain exact up to precision .. +rounding: half_up +ddbas420 toSci 100 -> 100 +ddbas421 toEng 100 -> 100 +ddbas422 toSci 1000 -> 1000 +ddbas423 toEng 1000 -> 1000 +ddbas424 toSci 999.9 -> 999.9 +ddbas425 toEng 999.9 -> 999.9 +ddbas426 toSci 1000.0 -> 1000.0 +ddbas427 toEng 1000.0 -> 1000.0 +ddbas428 toSci 1000.1 -> 1000.1 +ddbas429 toEng 1000.1 -> 1000.1 +ddbas430 toSci 10000 -> 10000 +ddbas431 toEng 10000 -> 10000 +ddbas432 toSci 100000 -> 100000 +ddbas433 toEng 100000 -> 100000 +ddbas434 toSci 1000000 -> 1000000 +ddbas435 toEng 1000000 -> 1000000 +ddbas436 toSci 10000000 -> 10000000 +ddbas437 toEng 10000000 -> 10000000 +ddbas438 toSci 100000000 -> 100000000 +ddbas439 toEng 1000000000000000 -> 1000000000000000 +ddbas440 toSci 10000000000000000 -> 1.000000000000000E+16 Rounded +ddbas441 toEng 10000000000000000 -> 10.00000000000000E+15 Rounded +ddbas442 toSci 10000000000000001 -> 1.000000000000000E+16 Rounded Inexact +ddbas443 toEng 10000000000000001 -> 10.00000000000000E+15 Rounded Inexact +ddbas444 toSci 10000000000000003 -> 1.000000000000000E+16 Rounded Inexact +ddbas445 toEng 10000000000000003 -> 10.00000000000000E+15 Rounded Inexact +ddbas446 toSci 10000000000000005 -> 1.000000000000001E+16 Rounded Inexact +ddbas447 toEng 10000000000000005 -> 10.00000000000001E+15 Rounded Inexact +ddbas448 toSci 100000000000000050 -> 1.000000000000001E+17 Rounded Inexact +ddbas449 toEng 100000000000000050 -> 100.0000000000001E+15 Rounded Inexact +ddbas450 toSci 10000000000000009 -> 1.000000000000001E+16 Rounded Inexact +ddbas451 toEng 10000000000000009 -> 10.00000000000001E+15 Rounded Inexact +ddbas452 toSci 100000000000000000 -> 1.000000000000000E+17 Rounded +ddbas453 toEng 100000000000000000 -> 100.0000000000000E+15 Rounded +ddbas454 toSci 100000000000000003 -> 1.000000000000000E+17 Rounded Inexact +ddbas455 toEng 100000000000000003 -> 100.0000000000000E+15 Rounded Inexact +ddbas456 toSci 100000000000000005 -> 1.000000000000000E+17 Rounded Inexact +ddbas457 toEng 100000000000000005 -> 100.0000000000000E+15 Rounded Inexact +ddbas458 toSci 100000000000000009 -> 1.000000000000000E+17 Rounded Inexact +ddbas459 toEng 100000000000000009 -> 100.0000000000000E+15 Rounded Inexact +ddbas460 toSci 1000000000000000000 -> 1.000000000000000E+18 Rounded +ddbas461 toEng 1000000000000000000 -> 1.000000000000000E+18 Rounded +ddbas462 toSci 1000000000000000300 -> 1.000000000000000E+18 Rounded Inexact +ddbas463 toEng 1000000000000000300 -> 1.000000000000000E+18 Rounded Inexact +ddbas464 toSci 1000000000000000500 -> 1.000000000000001E+18 Rounded Inexact +ddbas465 toEng 1000000000000000500 -> 1.000000000000001E+18 Rounded Inexact +ddbas466 toSci 1000000000000000900 -> 1.000000000000001E+18 Rounded Inexact +ddbas467 toEng 1000000000000000900 -> 1.000000000000001E+18 Rounded Inexact +ddbas468 toSci 10000000000000000000 -> 1.000000000000000E+19 Rounded +ddbas469 toEng 10000000000000000000 -> 10.00000000000000E+18 Rounded +ddbas470 toSci 10000000000000003000 -> 1.000000000000000E+19 Rounded Inexact +ddbas471 toEng 10000000000000003000 -> 10.00000000000000E+18 Rounded Inexact +ddbas472 toSci 10000000000000005000 -> 1.000000000000001E+19 Rounded Inexact +ddbas473 toEng 10000000000000005000 -> 10.00000000000001E+18 Rounded Inexact +ddbas474 toSci 10000000000000009000 -> 1.000000000000001E+19 Rounded Inexact +ddbas475 toEng 10000000000000009000 -> 10.00000000000001E+18 Rounded Inexact + +-- check rounding modes heeded +rounding: ceiling +ddbsr401 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr402 toSci 1.11111111111234549 -> 1.111111111112346 Rounded Inexact +ddbsr403 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact +ddbsr404 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +rounding: up +ddbsr405 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr406 toSci 1.11111111111234549 -> 1.111111111112346 Rounded Inexact +ddbsr407 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact +ddbsr408 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +rounding: floor +ddbsr410 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr411 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr412 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact +ddbsr413 toSci 1.11111111111234551 -> 1.111111111112345 Rounded Inexact +rounding: half_down +ddbsr415 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr416 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr417 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact +ddbsr418 toSci 1.11111111111234650 -> 1.111111111112346 Rounded Inexact +ddbsr419 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +rounding: half_even +ddbsr421 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr422 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr423 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact +ddbsr424 toSci 1.11111111111234650 -> 1.111111111112346 Rounded Inexact +ddbsr425 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +rounding: down +ddbsr426 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr427 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr428 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact +ddbsr429 toSci 1.11111111111234551 -> 1.111111111112345 Rounded Inexact +rounding: half_up +ddbsr431 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr432 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr433 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact +ddbsr434 toSci 1.11111111111234650 -> 1.111111111112347 Rounded Inexact +ddbsr435 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +-- negatives +rounding: ceiling +ddbsr501 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr502 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr503 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact +ddbsr504 toSci -1.11111111111234551 -> -1.111111111112345 Rounded Inexact +rounding: up +ddbsr505 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr506 toSci -1.11111111111234549 -> -1.111111111112346 Rounded Inexact +ddbsr507 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact +ddbsr508 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact +rounding: floor +ddbsr510 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr511 toSci -1.11111111111234549 -> -1.111111111112346 Rounded Inexact +ddbsr512 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact +ddbsr513 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact +rounding: half_down +ddbsr515 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr516 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr517 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact +ddbsr518 toSci -1.11111111111234650 -> -1.111111111112346 Rounded Inexact +ddbsr519 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact +rounding: half_even +ddbsr521 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr522 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr523 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact +ddbsr524 toSci -1.11111111111234650 -> -1.111111111112346 Rounded Inexact +ddbsr525 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact +rounding: down +ddbsr526 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr527 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr528 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact +ddbsr529 toSci -1.11111111111234551 -> -1.111111111112345 Rounded Inexact +rounding: half_up +ddbsr531 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr532 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr533 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact +ddbsr534 toSci -1.11111111111234650 -> -1.111111111112347 Rounded Inexact +ddbsr535 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact + +rounding: half_even + +-- The 'baddies' tests from DiagBigDecimal, plus some new ones +ddbas500 toSci '1..2' -> NaN Conversion_syntax +ddbas501 toSci '.' -> NaN Conversion_syntax +ddbas502 toSci '..' -> NaN Conversion_syntax +ddbas503 toSci '++1' -> NaN Conversion_syntax +ddbas504 toSci '--1' -> NaN Conversion_syntax +ddbas505 toSci '-+1' -> NaN Conversion_syntax +ddbas506 toSci '+-1' -> NaN Conversion_syntax +ddbas507 toSci '12e' -> NaN Conversion_syntax +ddbas508 toSci '12e++' -> NaN Conversion_syntax +ddbas509 toSci '12f4' -> NaN Conversion_syntax +ddbas510 toSci ' +1' -> NaN Conversion_syntax +ddbas511 toSci '+ 1' -> NaN Conversion_syntax +ddbas512 toSci '12 ' -> NaN Conversion_syntax +ddbas513 toSci ' + 1' -> NaN Conversion_syntax +ddbas514 toSci ' - 1 ' -> NaN Conversion_syntax +ddbas515 toSci 'x' -> NaN Conversion_syntax +ddbas516 toSci '-1-' -> NaN Conversion_syntax +ddbas517 toSci '12-' -> NaN Conversion_syntax +ddbas518 toSci '3+' -> NaN Conversion_syntax +ddbas519 toSci '' -> NaN Conversion_syntax +ddbas520 toSci '1e-' -> NaN Conversion_syntax +ddbas521 toSci '7e99999a' -> NaN Conversion_syntax +ddbas522 toSci '7e123567890x' -> NaN Conversion_syntax +ddbas523 toSci '7e12356789012x' -> NaN Conversion_syntax +ddbas524 toSci '' -> NaN Conversion_syntax +ddbas525 toSci 'e100' -> NaN Conversion_syntax +ddbas526 toSci '\u0e5a' -> NaN Conversion_syntax +ddbas527 toSci '\u0b65' -> NaN Conversion_syntax +ddbas528 toSci '123,65' -> NaN Conversion_syntax +ddbas529 toSci '1.34.5' -> NaN Conversion_syntax +ddbas530 toSci '.123.5' -> NaN Conversion_syntax +ddbas531 toSci '01.35.' -> NaN Conversion_syntax +ddbas532 toSci '01.35-' -> NaN Conversion_syntax +ddbas533 toSci '0000..' -> NaN Conversion_syntax +ddbas534 toSci '.0000.' -> NaN Conversion_syntax +ddbas535 toSci '00..00' -> NaN Conversion_syntax +ddbas536 toSci '111e*123' -> NaN Conversion_syntax +ddbas537 toSci '111e123-' -> NaN Conversion_syntax +ddbas538 toSci '111e+12+' -> NaN Conversion_syntax +ddbas539 toSci '111e1-3-' -> NaN Conversion_syntax +ddbas540 toSci '111e1*23' -> NaN Conversion_syntax +ddbas541 toSci '111e1e+3' -> NaN Conversion_syntax +ddbas542 toSci '1e1.0' -> NaN Conversion_syntax +ddbas543 toSci '1e123e' -> NaN Conversion_syntax +ddbas544 toSci 'ten' -> NaN Conversion_syntax +ddbas545 toSci 'ONE' -> NaN Conversion_syntax +ddbas546 toSci '1e.1' -> NaN Conversion_syntax +ddbas547 toSci '1e1.' -> NaN Conversion_syntax +ddbas548 toSci '1ee' -> NaN Conversion_syntax +ddbas549 toSci 'e+1' -> NaN Conversion_syntax +ddbas550 toSci '1.23.4' -> NaN Conversion_syntax +ddbas551 toSci '1.2.1' -> NaN Conversion_syntax +ddbas552 toSci '1E+1.2' -> NaN Conversion_syntax +ddbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax +ddbas554 toSci '1E++1' -> NaN Conversion_syntax +ddbas555 toSci '1E--1' -> NaN Conversion_syntax +ddbas556 toSci '1E+-1' -> NaN Conversion_syntax +ddbas557 toSci '1E-+1' -> NaN Conversion_syntax +ddbas558 toSci '1E''1' -> NaN Conversion_syntax +ddbas559 toSci "1E""1" -> NaN Conversion_syntax +ddbas560 toSci "1E""""" -> NaN Conversion_syntax +-- Near-specials +ddbas561 toSci "qNaN" -> NaN Conversion_syntax +ddbas562 toSci "NaNq" -> NaN Conversion_syntax +ddbas563 toSci "NaNs" -> NaN Conversion_syntax +ddbas564 toSci "Infi" -> NaN Conversion_syntax +ddbas565 toSci "Infin" -> NaN Conversion_syntax +ddbas566 toSci "Infini" -> NaN Conversion_syntax +ddbas567 toSci "Infinit" -> NaN Conversion_syntax +ddbas568 toSci "-Infinit" -> NaN Conversion_syntax +ddbas569 toSci "0Inf" -> NaN Conversion_syntax +ddbas570 toSci "9Inf" -> NaN Conversion_syntax +ddbas571 toSci "-0Inf" -> NaN Conversion_syntax +ddbas572 toSci "-9Inf" -> NaN Conversion_syntax +ddbas573 toSci "-sNa" -> NaN Conversion_syntax +ddbas574 toSci "xNaN" -> NaN Conversion_syntax +ddbas575 toSci "0sNaN" -> NaN Conversion_syntax + +-- some baddies with dots and Es and dots and specials +ddbas576 toSci 'e+1' -> NaN Conversion_syntax +ddbas577 toSci '.e+1' -> NaN Conversion_syntax +ddbas578 toSci '+.e+1' -> NaN Conversion_syntax +ddbas579 toSci '-.e+' -> NaN Conversion_syntax +ddbas580 toSci '-.e' -> NaN Conversion_syntax +ddbas581 toSci 'E+1' -> NaN Conversion_syntax +ddbas582 toSci '.E+1' -> NaN Conversion_syntax +ddbas583 toSci '+.E+1' -> NaN Conversion_syntax +ddbas584 toSci '-.E+' -> NaN Conversion_syntax +ddbas585 toSci '-.E' -> NaN Conversion_syntax + +ddbas586 toSci '.NaN' -> NaN Conversion_syntax +ddbas587 toSci '-.NaN' -> NaN Conversion_syntax +ddbas588 toSci '+.sNaN' -> NaN Conversion_syntax +ddbas589 toSci '+.Inf' -> NaN Conversion_syntax +ddbas590 toSci '.Infinity' -> NaN Conversion_syntax + +-- Zeros +ddbas601 toSci 0.000000000 -> 0E-9 +ddbas602 toSci 0.00000000 -> 0E-8 +ddbas603 toSci 0.0000000 -> 0E-7 +ddbas604 toSci 0.000000 -> 0.000000 +ddbas605 toSci 0.00000 -> 0.00000 +ddbas606 toSci 0.0000 -> 0.0000 +ddbas607 toSci 0.000 -> 0.000 +ddbas608 toSci 0.00 -> 0.00 +ddbas609 toSci 0.0 -> 0.0 +ddbas610 toSci .0 -> 0.0 +ddbas611 toSci 0. -> 0 +ddbas612 toSci -.0 -> -0.0 +ddbas613 toSci -0. -> -0 +ddbas614 toSci -0.0 -> -0.0 +ddbas615 toSci -0.00 -> -0.00 +ddbas616 toSci -0.000 -> -0.000 +ddbas617 toSci -0.0000 -> -0.0000 +ddbas618 toSci -0.00000 -> -0.00000 +ddbas619 toSci -0.000000 -> -0.000000 +ddbas620 toSci -0.0000000 -> -0E-7 +ddbas621 toSci -0.00000000 -> -0E-8 +ddbas622 toSci -0.000000000 -> -0E-9 + +ddbas630 toSci 0.00E+0 -> 0.00 +ddbas631 toSci 0.00E+1 -> 0.0 +ddbas632 toSci 0.00E+2 -> 0 +ddbas633 toSci 0.00E+3 -> 0E+1 +ddbas634 toSci 0.00E+4 -> 0E+2 +ddbas635 toSci 0.00E+5 -> 0E+3 +ddbas636 toSci 0.00E+6 -> 0E+4 +ddbas637 toSci 0.00E+7 -> 0E+5 +ddbas638 toSci 0.00E+8 -> 0E+6 +ddbas639 toSci 0.00E+9 -> 0E+7 + +ddbas640 toSci 0.0E+0 -> 0.0 +ddbas641 toSci 0.0E+1 -> 0 +ddbas642 toSci 0.0E+2 -> 0E+1 +ddbas643 toSci 0.0E+3 -> 0E+2 +ddbas644 toSci 0.0E+4 -> 0E+3 +ddbas645 toSci 0.0E+5 -> 0E+4 +ddbas646 toSci 0.0E+6 -> 0E+5 +ddbas647 toSci 0.0E+7 -> 0E+6 +ddbas648 toSci 0.0E+8 -> 0E+7 +ddbas649 toSci 0.0E+9 -> 0E+8 + +ddbas650 toSci 0E+0 -> 0 +ddbas651 toSci 0E+1 -> 0E+1 +ddbas652 toSci 0E+2 -> 0E+2 +ddbas653 toSci 0E+3 -> 0E+3 +ddbas654 toSci 0E+4 -> 0E+4 +ddbas655 toSci 0E+5 -> 0E+5 +ddbas656 toSci 0E+6 -> 0E+6 +ddbas657 toSci 0E+7 -> 0E+7 +ddbas658 toSci 0E+8 -> 0E+8 +ddbas659 toSci 0E+9 -> 0E+9 + +ddbas660 toSci 0.0E-0 -> 0.0 +ddbas661 toSci 0.0E-1 -> 0.00 +ddbas662 toSci 0.0E-2 -> 0.000 +ddbas663 toSci 0.0E-3 -> 0.0000 +ddbas664 toSci 0.0E-4 -> 0.00000 +ddbas665 toSci 0.0E-5 -> 0.000000 +ddbas666 toSci 0.0E-6 -> 0E-7 +ddbas667 toSci 0.0E-7 -> 0E-8 +ddbas668 toSci 0.0E-8 -> 0E-9 +ddbas669 toSci 0.0E-9 -> 0E-10 + +ddbas670 toSci 0.00E-0 -> 0.00 +ddbas671 toSci 0.00E-1 -> 0.000 +ddbas672 toSci 0.00E-2 -> 0.0000 +ddbas673 toSci 0.00E-3 -> 0.00000 +ddbas674 toSci 0.00E-4 -> 0.000000 +ddbas675 toSci 0.00E-5 -> 0E-7 +ddbas676 toSci 0.00E-6 -> 0E-8 +ddbas677 toSci 0.00E-7 -> 0E-9 +ddbas678 toSci 0.00E-8 -> 0E-10 +ddbas679 toSci 0.00E-9 -> 0E-11 + +ddbas680 toSci 000000. -> 0 +ddbas681 toSci 00000. -> 0 +ddbas682 toSci 0000. -> 0 +ddbas683 toSci 000. -> 0 +ddbas684 toSci 00. -> 0 +ddbas685 toSci 0. -> 0 +ddbas686 toSci +00000. -> 0 +ddbas687 toSci -00000. -> -0 +ddbas688 toSci +0. -> 0 +ddbas689 toSci -0. -> -0 + +-- Specials +ddbas700 toSci "NaN" -> NaN +ddbas701 toSci "nan" -> NaN +ddbas702 toSci "nAn" -> NaN +ddbas703 toSci "NAN" -> NaN +ddbas704 toSci "+NaN" -> NaN +ddbas705 toSci "+nan" -> NaN +ddbas706 toSci "+nAn" -> NaN +ddbas707 toSci "+NAN" -> NaN +ddbas708 toSci "-NaN" -> -NaN +ddbas709 toSci "-nan" -> -NaN +ddbas710 toSci "-nAn" -> -NaN +ddbas711 toSci "-NAN" -> -NaN +ddbas712 toSci 'NaN0' -> NaN +ddbas713 toSci 'NaN1' -> NaN1 +ddbas714 toSci 'NaN12' -> NaN12 +ddbas715 toSci 'NaN123' -> NaN123 +ddbas716 toSci 'NaN1234' -> NaN1234 +ddbas717 toSci 'NaN01' -> NaN1 +ddbas718 toSci 'NaN012' -> NaN12 +ddbas719 toSci 'NaN0123' -> NaN123 +ddbas720 toSci 'NaN01234' -> NaN1234 +ddbas721 toSci 'NaN001' -> NaN1 +ddbas722 toSci 'NaN0012' -> NaN12 +ddbas723 toSci 'NaN00123' -> NaN123 +ddbas724 toSci 'NaN001234' -> NaN1234 +ddbas725 toSci 'NaN1234567890123456' -> NaN Conversion_syntax +ddbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax +ddbas727 toSci 'NaN12.45' -> NaN Conversion_syntax +ddbas728 toSci 'NaN-12' -> NaN Conversion_syntax +ddbas729 toSci 'NaN+12' -> NaN Conversion_syntax + +ddbas730 toSci "sNaN" -> sNaN +ddbas731 toSci "snan" -> sNaN +ddbas732 toSci "SnAn" -> sNaN +ddbas733 toSci "SNAN" -> sNaN +ddbas734 toSci "+sNaN" -> sNaN +ddbas735 toSci "+snan" -> sNaN +ddbas736 toSci "+SnAn" -> sNaN +ddbas737 toSci "+SNAN" -> sNaN +ddbas738 toSci "-sNaN" -> -sNaN +ddbas739 toSci "-snan" -> -sNaN +ddbas740 toSci "-SnAn" -> -sNaN +ddbas741 toSci "-SNAN" -> -sNaN +ddbas742 toSci 'sNaN0000' -> sNaN +ddbas743 toSci 'sNaN7' -> sNaN7 +ddbas744 toSci 'sNaN007234' -> sNaN7234 +ddbas745 toSci 'sNaN7234561234567890' -> NaN Conversion_syntax +ddbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax +ddbas747 toSci 'sNaN-72' -> NaN Conversion_syntax + +ddbas748 toSci "Inf" -> Infinity +ddbas749 toSci "inf" -> Infinity +ddbas750 toSci "iNf" -> Infinity +ddbas751 toSci "INF" -> Infinity +ddbas752 toSci "+Inf" -> Infinity +ddbas753 toSci "+inf" -> Infinity +ddbas754 toSci "+iNf" -> Infinity +ddbas755 toSci "+INF" -> Infinity +ddbas756 toSci "-Inf" -> -Infinity +ddbas757 toSci "-inf" -> -Infinity +ddbas758 toSci "-iNf" -> -Infinity +ddbas759 toSci "-INF" -> -Infinity + +ddbas760 toSci "Infinity" -> Infinity +ddbas761 toSci "infinity" -> Infinity +ddbas762 toSci "iNfInItY" -> Infinity +ddbas763 toSci "INFINITY" -> Infinity +ddbas764 toSci "+Infinity" -> Infinity +ddbas765 toSci "+infinity" -> Infinity +ddbas766 toSci "+iNfInItY" -> Infinity +ddbas767 toSci "+INFINITY" -> Infinity +ddbas768 toSci "-Infinity" -> -Infinity +ddbas769 toSci "-infinity" -> -Infinity +ddbas770 toSci "-iNfInItY" -> -Infinity +ddbas771 toSci "-INFINITY" -> -Infinity + +-- Specials and zeros for toEng +ddbast772 toEng "NaN" -> NaN +ddbast773 toEng "-Infinity" -> -Infinity +ddbast774 toEng "-sNaN" -> -sNaN +ddbast775 toEng "-NaN" -> -NaN +ddbast776 toEng "+Infinity" -> Infinity +ddbast778 toEng "+sNaN" -> sNaN +ddbast779 toEng "+NaN" -> NaN +ddbast780 toEng "INFINITY" -> Infinity +ddbast781 toEng "SNAN" -> sNaN +ddbast782 toEng "NAN" -> NaN +ddbast783 toEng "infinity" -> Infinity +ddbast784 toEng "snan" -> sNaN +ddbast785 toEng "nan" -> NaN +ddbast786 toEng "InFINITY" -> Infinity +ddbast787 toEng "SnAN" -> sNaN +ddbast788 toEng "nAN" -> NaN +ddbast789 toEng "iNfinity" -> Infinity +ddbast790 toEng "sNan" -> sNaN +ddbast791 toEng "Nan" -> NaN +ddbast792 toEng "Infinity" -> Infinity +ddbast793 toEng "sNaN" -> sNaN + +-- Zero toEng, etc. +ddbast800 toEng 0e+1 -> "0.00E+3" -- doc example + +ddbast801 toEng 0.000000000 -> 0E-9 +ddbast802 toEng 0.00000000 -> 0.00E-6 +ddbast803 toEng 0.0000000 -> 0.0E-6 +ddbast804 toEng 0.000000 -> 0.000000 +ddbast805 toEng 0.00000 -> 0.00000 +ddbast806 toEng 0.0000 -> 0.0000 +ddbast807 toEng 0.000 -> 0.000 +ddbast808 toEng 0.00 -> 0.00 +ddbast809 toEng 0.0 -> 0.0 +ddbast810 toEng .0 -> 0.0 +ddbast811 toEng 0. -> 0 +ddbast812 toEng -.0 -> -0.0 +ddbast813 toEng -0. -> -0 +ddbast814 toEng -0.0 -> -0.0 +ddbast815 toEng -0.00 -> -0.00 +ddbast816 toEng -0.000 -> -0.000 +ddbast817 toEng -0.0000 -> -0.0000 +ddbast818 toEng -0.00000 -> -0.00000 +ddbast819 toEng -0.000000 -> -0.000000 +ddbast820 toEng -0.0000000 -> -0.0E-6 +ddbast821 toEng -0.00000000 -> -0.00E-6 +ddbast822 toEng -0.000000000 -> -0E-9 + +ddbast830 toEng 0.00E+0 -> 0.00 +ddbast831 toEng 0.00E+1 -> 0.0 +ddbast832 toEng 0.00E+2 -> 0 +ddbast833 toEng 0.00E+3 -> 0.00E+3 +ddbast834 toEng 0.00E+4 -> 0.0E+3 +ddbast835 toEng 0.00E+5 -> 0E+3 +ddbast836 toEng 0.00E+6 -> 0.00E+6 +ddbast837 toEng 0.00E+7 -> 0.0E+6 +ddbast838 toEng 0.00E+8 -> 0E+6 +ddbast839 toEng 0.00E+9 -> 0.00E+9 + +ddbast840 toEng 0.0E+0 -> 0.0 +ddbast841 toEng 0.0E+1 -> 0 +ddbast842 toEng 0.0E+2 -> 0.00E+3 +ddbast843 toEng 0.0E+3 -> 0.0E+3 +ddbast844 toEng 0.0E+4 -> 0E+3 +ddbast845 toEng 0.0E+5 -> 0.00E+6 +ddbast846 toEng 0.0E+6 -> 0.0E+6 +ddbast847 toEng 0.0E+7 -> 0E+6 +ddbast848 toEng 0.0E+8 -> 0.00E+9 +ddbast849 toEng 0.0E+9 -> 0.0E+9 + +ddbast850 toEng 0E+0 -> 0 +ddbast851 toEng 0E+1 -> 0.00E+3 +ddbast852 toEng 0E+2 -> 0.0E+3 +ddbast853 toEng 0E+3 -> 0E+3 +ddbast854 toEng 0E+4 -> 0.00E+6 +ddbast855 toEng 0E+5 -> 0.0E+6 +ddbast856 toEng 0E+6 -> 0E+6 +ddbast857 toEng 0E+7 -> 0.00E+9 +ddbast858 toEng 0E+8 -> 0.0E+9 +ddbast859 toEng 0E+9 -> 0E+9 + +ddbast860 toEng 0.0E-0 -> 0.0 +ddbast861 toEng 0.0E-1 -> 0.00 +ddbast862 toEng 0.0E-2 -> 0.000 +ddbast863 toEng 0.0E-3 -> 0.0000 +ddbast864 toEng 0.0E-4 -> 0.00000 +ddbast865 toEng 0.0E-5 -> 0.000000 +ddbast866 toEng 0.0E-6 -> 0.0E-6 +ddbast867 toEng 0.0E-7 -> 0.00E-6 +ddbast868 toEng 0.0E-8 -> 0E-9 +ddbast869 toEng 0.0E-9 -> 0.0E-9 + +ddbast870 toEng 0.00E-0 -> 0.00 +ddbast871 toEng 0.00E-1 -> 0.000 +ddbast872 toEng 0.00E-2 -> 0.0000 +ddbast873 toEng 0.00E-3 -> 0.00000 +ddbast874 toEng 0.00E-4 -> 0.000000 +ddbast875 toEng 0.00E-5 -> 0.0E-6 +ddbast876 toEng 0.00E-6 -> 0.00E-6 +ddbast877 toEng 0.00E-7 -> 0E-9 +ddbast878 toEng 0.00E-8 -> 0.0E-9 +ddbast879 toEng 0.00E-9 -> 0.00E-9 + +-- long input strings +ddbas801 tosci '01234567890123456' -> 1234567890123456 +ddbas802 tosci '001234567890123456' -> 1234567890123456 +ddbas803 tosci '0001234567890123456' -> 1234567890123456 +ddbas804 tosci '00001234567890123456' -> 1234567890123456 +ddbas805 tosci '000001234567890123456' -> 1234567890123456 +ddbas806 tosci '0000001234567890123456' -> 1234567890123456 +ddbas807 tosci '00000001234567890123456' -> 1234567890123456 +ddbas808 tosci '000000001234567890123456' -> 1234567890123456 +ddbas809 tosci '0000000001234567890123456' -> 1234567890123456 +ddbas810 tosci '00000000001234567890123456' -> 1234567890123456 + +ddbas811 tosci '0.1234567890123456' -> 0.1234567890123456 +ddbas812 tosci '0.01234567890123456' -> 0.01234567890123456 +ddbas813 tosci '0.001234567890123456' -> 0.001234567890123456 +ddbas814 tosci '0.0001234567890123456' -> 0.0001234567890123456 +ddbas815 tosci '0.00001234567890123456' -> 0.00001234567890123456 +ddbas816 tosci '0.000001234567890123456' -> 0.000001234567890123456 +ddbas817 tosci '0.0000001234567890123456' -> 1.234567890123456E-7 +ddbas818 tosci '0.00000001234567890123456' -> 1.234567890123456E-8 +ddbas819 tosci '0.000000001234567890123456' -> 1.234567890123456E-9 +ddbas820 tosci '0.0000000001234567890123456' -> 1.234567890123456E-10 + +ddbas821 tosci '12345678901234567890' -> 1.234567890123457E+19 Inexact Rounded +ddbas822 tosci '123456789012345678901' -> 1.234567890123457E+20 Inexact Rounded +ddbas823 tosci '1234567890123456789012' -> 1.234567890123457E+21 Inexact Rounded +ddbas824 tosci '12345678901234567890123' -> 1.234567890123457E+22 Inexact Rounded +ddbas825 tosci '123456789012345678901234' -> 1.234567890123457E+23 Inexact Rounded +ddbas826 tosci '1234567890123456789012345' -> 1.234567890123457E+24 Inexact Rounded +ddbas827 tosci '12345678901234567890123456' -> 1.234567890123457E+25 Inexact Rounded +ddbas828 tosci '123456789012345678901234567' -> 1.234567890123457E+26 Inexact Rounded +ddbas829 tosci '1234567890123456789012345678' -> 1.234567890123457E+27 Inexact Rounded + +-- subnormals and overflows +ddbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded +ddbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded +ddbas908 toSci '0.9e-999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas909 toSci '0.09e-999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded +ddbas911 toSci '10e-1000000000' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded +ddbas913 toSci '99e-9999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded +ddbas915 toSci '1111e-9999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas916 toSci '1111e-99999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded +-- negatives the same +ddbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded +ddbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded +ddbas920 toSci '-0.9e-999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas921 toSci '-0.09e-999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded +ddbas923 toSci '-10e-1000000000' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded +ddbas925 toSci '-99e-9999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded +ddbas927 toSci '-1111e-9999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas928 toSci '-1111e-99999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded + +-- overflow results at different rounding modes +rounding: ceiling +ddbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas931 toSci '-7e10000' -> -9.999999999999999E+384 Overflow Inexact Rounded +rounding: up +ddbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: down +ddbas934 toSci '7e10000' -> 9.999999999999999E+384 Overflow Inexact Rounded +ddbas935 toSci '-7e10000' -> -9.999999999999999E+384 Overflow Inexact Rounded +rounding: floor +ddbas936 toSci '7e10000' -> 9.999999999999999E+384 Overflow Inexact Rounded +ddbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_up +ddbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_even +ddbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_down +ddbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_even + +-- Now check 854/754r some subnormals and underflow to 0 +ddbem400 toSci 1.0000E-383 -> 1.0000E-383 +ddbem401 toSci 0.1E-394 -> 1E-395 Subnormal +ddbem402 toSci 0.1000E-394 -> 1.000E-395 Subnormal +ddbem403 toSci 0.0100E-394 -> 1.00E-396 Subnormal +ddbem404 toSci 0.0010E-394 -> 1.0E-397 Subnormal +ddbem405 toSci 0.0001E-394 -> 1E-398 Subnormal +ddbem406 toSci 0.00010E-394 -> 1E-398 Subnormal Rounded +ddbem407 toSci 0.00013E-394 -> 1E-398 Underflow Subnormal Inexact Rounded +ddbem408 toSci 0.00015E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem409 toSci 0.00017E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem410 toSci 0.00023E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem411 toSci 0.00025E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem412 toSci 0.00027E-394 -> 3E-398 Underflow Subnormal Inexact Rounded +ddbem413 toSci 0.000149E-394 -> 1E-398 Underflow Subnormal Inexact Rounded +ddbem414 toSci 0.000150E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem415 toSci 0.000151E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem416 toSci 0.000249E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem417 toSci 0.000250E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem418 toSci 0.000251E-394 -> 3E-398 Underflow Subnormal Inexact Rounded +ddbem419 toSci 0.00009E-394 -> 1E-398 Underflow Subnormal Inexact Rounded +ddbem420 toSci 0.00005E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem421 toSci 0.00003E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem422 toSci 0.000009E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem423 toSci 0.000005E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem424 toSci 0.000003E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +ddbem425 toSci 0.001049E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded +ddbem426 toSci 0.001050E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded +ddbem427 toSci 0.001051E-394 -> 1.1E-397 Underflow Subnormal Inexact Rounded +ddbem428 toSci 0.001149E-394 -> 1.1E-397 Underflow Subnormal Inexact Rounded +ddbem429 toSci 0.001150E-394 -> 1.2E-397 Underflow Subnormal Inexact Rounded +ddbem430 toSci 0.001151E-394 -> 1.2E-397 Underflow Subnormal Inexact Rounded + +ddbem432 toSci 0.010049E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded +ddbem433 toSci 0.010050E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded +ddbem434 toSci 0.010051E-394 -> 1.01E-396 Underflow Subnormal Inexact Rounded +ddbem435 toSci 0.010149E-394 -> 1.01E-396 Underflow Subnormal Inexact Rounded +ddbem436 toSci 0.010150E-394 -> 1.02E-396 Underflow Subnormal Inexact Rounded +ddbem437 toSci 0.010151E-394 -> 1.02E-396 Underflow Subnormal Inexact Rounded + +ddbem440 toSci 0.10103E-394 -> 1.010E-395 Underflow Subnormal Inexact Rounded +ddbem441 toSci 0.10105E-394 -> 1.010E-395 Underflow Subnormal Inexact Rounded +ddbem442 toSci 0.10107E-394 -> 1.011E-395 Underflow Subnormal Inexact Rounded +ddbem443 toSci 0.10113E-394 -> 1.011E-395 Underflow Subnormal Inexact Rounded +ddbem444 toSci 0.10115E-394 -> 1.012E-395 Underflow Subnormal Inexact Rounded +ddbem445 toSci 0.10117E-394 -> 1.012E-395 Underflow Subnormal Inexact Rounded + +ddbem450 toSci 1.10730E-395 -> 1.107E-395 Underflow Subnormal Inexact Rounded +ddbem451 toSci 1.10750E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded +ddbem452 toSci 1.10770E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded +ddbem453 toSci 1.10830E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded +ddbem454 toSci 1.10850E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded +ddbem455 toSci 1.10870E-395 -> 1.109E-395 Underflow Subnormal Inexact Rounded + +-- make sure sign OK +ddbem456 toSci -0.10103E-394 -> -1.010E-395 Underflow Subnormal Inexact Rounded +ddbem457 toSci -0.10105E-394 -> -1.010E-395 Underflow Subnormal Inexact Rounded +ddbem458 toSci -0.10107E-394 -> -1.011E-395 Underflow Subnormal Inexact Rounded +ddbem459 toSci -0.10113E-394 -> -1.011E-395 Underflow Subnormal Inexact Rounded +ddbem460 toSci -0.10115E-394 -> -1.012E-395 Underflow Subnormal Inexact Rounded +ddbem461 toSci -0.10117E-394 -> -1.012E-395 Underflow Subnormal Inexact Rounded + +-- '999s' cases +ddbem464 toSci 999999E-395 -> 9.99999E-390 Subnormal +ddbem465 toSci 99999.0E-394 -> 9.99990E-390 Subnormal +ddbem466 toSci 99999.E-394 -> 9.9999E-390 Subnormal +ddbem467 toSci 9999.9E-394 -> 9.9999E-391 Subnormal +ddbem468 toSci 999.99E-394 -> 9.9999E-392 Subnormal +ddbem469 toSci 99.999E-394 -> 9.9999E-393 Subnormal +ddbem470 toSci 9.9999E-394 -> 9.9999E-394 Subnormal +ddbem471 toSci 0.99999E-394 -> 1.0000E-394 Underflow Subnormal Inexact Rounded +ddbem472 toSci 0.099999E-394 -> 1.000E-395 Underflow Subnormal Inexact Rounded +ddbem473 toSci 0.0099999E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded +ddbem474 toSci 0.00099999E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded +ddbem475 toSci 0.000099999E-394 -> 1E-398 Underflow Subnormal Inexact Rounded +ddbem476 toSci 0.0000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem477 toSci 0.00000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem478 toSci 0.000000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- Exponents with insignificant leading zeros +ddbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded +ddbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded +ddbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded +ddbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded +ddbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded +ddbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded +ddbas1007 toSci 1e-999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1008 toSci 1e-0999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1009 toSci 1e-00999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1010 toSci 1e-000999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1011 toSci 1e-000000000000999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1012 toSci 1e-000000000001000000007 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- check for double-rounded subnormals +ddbas1041 toSci 1.1111111111152444E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow +ddbas1042 toSci 1.1111111111152445E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow +ddbas1043 toSci 1.1111111111152446E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow + +-- clamped large normals +ddbas1070 toSci 1E+369 -> 1E+369 +ddbas1071 toSci 1E+370 -> 1.0E+370 Clamped +ddbas1072 toSci 1E+378 -> 1.000000000E+378 Clamped +ddbas1073 toSci 1E+384 -> 1.000000000000000E+384 Clamped +ddbas1074 toSci 1E+385 -> Infinity Overflow Inexact Rounded + + +-- clamped zeros [see also clamp.decTest] +ddbas1075 toSci 0e+10000 -> 0E+369 Clamped +ddbas1076 toSci 0e-10000 -> 0E-398 Clamped +ddbas1077 toSci -0e+10000 -> -0E+369 Clamped +ddbas1078 toSci -0e-10000 -> -0E-398 Clamped + +-- extreme values from next-wider +ddbas1101 toSci -9.99999999999999999999999999999999E+6144 -> -Infinity Overflow Inexact Rounded +ddbas1102 toSci -1E-6143 -> -0E-398 Inexact Rounded Subnormal Underflow Clamped +ddbas1103 toSci -1E-6176 -> -0E-398 Inexact Rounded Subnormal Underflow Clamped +ddbas1104 toSci -0 -> -0 +ddbas1105 toSci +0 -> 0 +ddbas1106 toSci +1E-6176 -> 0E-398 Inexact Rounded Subnormal Underflow Clamped +ddbas1107 toSci +1E-6173 -> 0E-398 Inexact Rounded Subnormal Underflow Clamped +ddbas1108 toSci +9.99999999999999999999999999999999E+6144 -> Infinity Overflow Inexact Rounded + diff --git a/Lib/test/decimaltestdata/ddCanonical.decTest b/Lib/test/decimaltestdata/ddCanonical.decTest index 824de83aba7..b4f9e32c986 100644 --- a/Lib/test/decimaltestdata/ddCanonical.decTest +++ b/Lib/test/decimaltestdata/ddCanonical.decTest @@ -1,357 +1,357 @@ ------------------------------------------------------------------------- --- ddCanonical.decTest -- test decDouble canonical results -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests that copy operations leave uncanonical operands --- unchanged, and vice versa --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Uncanonical declets are: abc, where: --- a=1,2,3 --- b=6,7,e,f --- c=e,f - --- assert some standard (canonical) values; this tests that FromString --- produces canonical results (many more in decimalNN) -ddcan001 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff -ddcan002 apply 0 -> #2238000000000000 -ddcan003 apply 1 -> #2238000000000001 -ddcan004 apply -1 -> #a238000000000001 -ddcan005 apply Infinity -> #7800000000000000 -ddcan006 apply -Infinity -> #f800000000000000 -ddcan007 apply -NaN -> #fc00000000000000 -ddcan008 apply -sNaN -> #fe00000000000000 -ddcan009 apply NaN999999999999999 -> #7c00ff3fcff3fcff -ddcan010 apply sNaN999999999999999 -> #7e00ff3fcff3fcff -decan011 apply 9999999999999999 -> #6e38ff3fcff3fcff -ddcan012 apply 7.50 -> #22300000000003d0 -ddcan013 apply 9.99 -> #22300000000000ff - --- Base tests for canonical encodings (individual operator --- propagation is tested later) - --- Finites: declets in coefficient -ddcan021 canonical #77fcff3fcff3fcff -> #77fcff3fcff3fcff -ddcan022 canonical #77fcff3fcff3fcff -> #77fcff3fcff3fcff -ddcan023 canonical #77ffff3fcff3fcff -> #77fcff3fcff3fcff -ddcan024 canonical #77ffff3fcff3fcff -> #77fcff3fcff3fcff -ddcan025 canonical #77fcffffcff3fcff -> #77fcff3fcff3fcff -ddcan026 canonical #77fcffffcff3fcff -> #77fcff3fcff3fcff -ddcan027 canonical #77fcff3ffff3fcff -> #77fcff3fcff3fcff -ddcan028 canonical #77fcff3ffff3fcff -> #77fcff3fcff3fcff -ddcan030 canonical #77fcff3fcffffcff -> #77fcff3fcff3fcff -ddcan031 canonical #77fcff3fcffffcff -> #77fcff3fcff3fcff -ddcan032 canonical #77fcff3fcff3ffff -> #77fcff3fcff3fcff -ddcan033 canonical #77fcff3fcff3ffff -> #77fcff3fcff3fcff -ddcan035 canonical #77fcff3fdff3fcff -> #77fcff3fcff3fcff -ddcan036 canonical #77fcff3feff3fcff -> #77fcff3fcff3fcff - --- NaN: declets in payload -ddcan100 canonical NaN999999999999999 -> #7c00ff3fcff3fcff -ddcan101 canonical #7c00ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan102 canonical #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan103 canonical #7c00ffffcff3fcff -> #7c00ff3fcff3fcff -ddcan104 canonical #7c00ff3ffff3fcff -> #7c00ff3fcff3fcff -ddcan105 canonical #7c00ff3fcffffcff -> #7c00ff3fcff3fcff -ddcan106 canonical #7c00ff3fcff3ffff -> #7c00ff3fcff3fcff -ddcan107 canonical #7c00ff3fcff3ffff -> #7c00ff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -ddcan110 canonical #7c00ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan112 canonical #7d00ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan113 canonical #7c80ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan114 canonical #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan115 canonical #7c20ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan116 canonical #7c10ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan117 canonical #7c08ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan118 canonical #7c04ff3fcff3fcff -> #7c00ff3fcff3fcff - --- sNaN: declets in payload -ddcan120 canonical sNaN999999999999999 -> #7e00ff3fcff3fcff -ddcan121 canonical #7e00ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan122 canonical #7e03ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan123 canonical #7e00ffffcff3fcff -> #7e00ff3fcff3fcff -ddcan124 canonical #7e00ff3ffff3fcff -> #7e00ff3fcff3fcff -ddcan125 canonical #7e00ff3fcffffcff -> #7e00ff3fcff3fcff -ddcan126 canonical #7e00ff3fcff3ffff -> #7e00ff3fcff3fcff -ddcan127 canonical #7e00ff3fcff3ffff -> #7e00ff3fcff3fcff --- sNaN: exponent continuation bits [excluding sNaN selector] -ddcan130 canonical #7e00ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan132 canonical #7f00ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan133 canonical #7e80ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan134 canonical #7e40ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan135 canonical #7e20ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan136 canonical #7e10ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan137 canonical #7e08ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan138 canonical #7e04ff3fcff3fcff -> #7e00ff3fcff3fcff - --- Inf: exponent continuation bits -ddcan140 canonical #7800000000000000 -> #7800000000000000 -ddcan141 canonical #7900000000000000 -> #7800000000000000 -ddcan142 canonical #7a00000000000000 -> #7800000000000000 -ddcan143 canonical #7880000000000000 -> #7800000000000000 -ddcan144 canonical #7840000000000000 -> #7800000000000000 -ddcan145 canonical #7820000000000000 -> #7800000000000000 -ddcan146 canonical #7810000000000000 -> #7800000000000000 -ddcan147 canonical #7808000000000000 -> #7800000000000000 -ddcan148 canonical #7804000000000000 -> #7800000000000000 - --- Inf: coefficient continuation bits (first, last, and a few others) -ddcan150 canonical #7800000000000000 -> #7800000000000000 -ddcan151 canonical #7802000000000000 -> #7800000000000000 -ddcan152 canonical #7800000000000001 -> #7800000000000000 -ddcan153 canonical #7801000000000000 -> #7800000000000000 -ddcan154 canonical #7800200000000000 -> #7800000000000000 -ddcan155 canonical #7800080000000000 -> #7800000000000000 -ddcan156 canonical #7800002000000000 -> #7800000000000000 -ddcan157 canonical #7800000400000000 -> #7800000000000000 -ddcan158 canonical #7800000040000000 -> #7800000000000000 -ddcan159 canonical #7800000008000000 -> #7800000000000000 -ddcan160 canonical #7800000000400000 -> #7800000000000000 -ddcan161 canonical #7800000000020000 -> #7800000000000000 -ddcan162 canonical #7800000000008000 -> #7800000000000000 -ddcan163 canonical #7800000000000200 -> #7800000000000000 -ddcan164 canonical #7800000000000040 -> #7800000000000000 -ddcan165 canonical #7800000000000008 -> #7800000000000000 - - --- Now the operators -- trying to check paths that might fail to --- canonicalize propagated operands - ------ Add: --- Finites: neutral 0 -ddcan202 add 0E+384 #77ffff3fcff3fcff -> #77fcff3fcff3fcff -ddcan203 add #77fcffffcff3fcff 0E+384 -> #77fcff3fcff3fcff --- tiny zero -ddcan204 add 0E-398 #77ffff3fcff3fcff -> #77fcff3fcff3fcff Rounded -ddcan205 add #77fcffffcff3fcff 0E-398 -> #77fcff3fcff3fcff Rounded --- tiny non zero -ddcan206 add -1E-398 #77ffff3fcff3fcff -> #77fcff3fcff3fcff Inexact Rounded -ddcan207 add #77ffff3fcff3fcff -1E-398 -> #77fcff3fcff3fcff Inexact Rounded --- NaN: declets in payload -ddcan211 add 0 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan212 add #7c03ff3fcff3fcff 0 -> #7c00ff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -ddcan213 add 0 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan214 add #7c40ff3fcff3fcff 0 -> #7c00ff3fcff3fcff --- sNaN: declets in payload -ddcan215 add 0 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan216 add #7e00ffffcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -ddcan217 add 0 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan218 add #7e80ff3fcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -ddcan220 add 0 #7880000000000000 -> #7800000000000000 -ddcan221 add #7880000000000000 0 -> #7800000000000000 --- Inf: coefficient continuation bits -ddcan222 add 0 #7802000000000000 -> #7800000000000000 -ddcan223 add #7802000000000000 0 -> #7800000000000000 -ddcan224 add 0 #7800000000000001 -> #7800000000000000 -ddcan225 add #7800000000000001 0 -> #7800000000000000 -ddcan226 add 0 #7800002000000000 -> #7800000000000000 -ddcan227 add #7800002000000000 0 -> #7800000000000000 - ------ Class: [does not return encoded] - ------ Compare: -ddcan231 compare -Inf 1 -> #a238000000000001 -ddcan232 compare -Inf -Inf -> #2238000000000000 -ddcan233 compare 1 -Inf -> #2238000000000001 -ddcan234 compare #7c00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff -ddcan235 compare #7e00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation - ------ CompareSig: -ddcan241 comparesig -Inf 1 -> #a238000000000001 -ddcan242 comparesig -Inf -Inf -> #2238000000000000 -ddcan243 comparesig 1 -Inf -> #2238000000000001 -ddcan244 comparesig #7c00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation -ddcan245 comparesig #7e00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation - ------ Copy: [does not usually canonicalize] --- finites -ddcan250 copy #77ffff3fcff3fcff -> #77ffff3fcff3fcff -ddcan251 copy #77fcff3fdff3fcff -> #77fcff3fdff3fcff --- NaNs -ddcan252 copy #7c03ff3fcff3fcff -> #7c03ff3fcff3fcff -ddcan253 copy #7c00ff3fcff3ffff -> #7c00ff3fcff3ffff -ddcan254 copy #7d00ff3fcff3fcff -> #7d00ff3fcff3fcff -ddcan255 copy #7c04ff3fcff3fcff -> #7c04ff3fcff3fcff --- sNaN -ddcan256 copy #7e00ff3fcffffcff -> #7e00ff3fcffffcff -ddcan257 copy #7e40ff3fcff3fcff -> #7e40ff3fcff3fcff --- Inf -ddcan258 copy #7a00000000000000 -> #7a00000000000000 -ddcan259 copy #7800200000000000 -> #7800200000000000 - ------ CopyAbs: [does not usually canonicalize] --- finites -ddcan260 copyabs #f7ffff3fcff3fcff -> #77ffff3fcff3fcff -ddcan261 copyabs #f7fcff3fdff3fcff -> #77fcff3fdff3fcff --- NaNs -ddcan262 copyabs #fc03ff3fcff3fcff -> #7c03ff3fcff3fcff -ddcan263 copyabs #fc00ff3fcff3ffff -> #7c00ff3fcff3ffff -ddcan264 copyabs #fd00ff3fcff3fcff -> #7d00ff3fcff3fcff -ddcan265 copyabs #fc04ff3fcff3fcff -> #7c04ff3fcff3fcff --- sNaN -ddcan266 copyabs #fe00ff3fcffffcff -> #7e00ff3fcffffcff -ddcan267 copyabs #fe40ff3fcff3fcff -> #7e40ff3fcff3fcff --- Inf -ddcan268 copyabs #fa00000000000000 -> #7a00000000000000 -ddcan269 copyabs #f800200000000000 -> #7800200000000000 - ------ CopyNegate: [does not usually canonicalize] --- finites -ddcan270 copynegate #77ffff3fcff3fcff -> #f7ffff3fcff3fcff -ddcan271 copynegate #77fcff3fdff3fcff -> #f7fcff3fdff3fcff --- NaNs -ddcan272 copynegate #7c03ff3fcff3fcff -> #fc03ff3fcff3fcff -ddcan273 copynegate #7c00ff3fcff3ffff -> #fc00ff3fcff3ffff -ddcan274 copynegate #7d00ff3fcff3fcff -> #fd00ff3fcff3fcff -ddcan275 copynegate #7c04ff3fcff3fcff -> #fc04ff3fcff3fcff --- sNaN -ddcan276 copynegate #7e00ff3fcffffcff -> #fe00ff3fcffffcff -ddcan277 copynegate #7e40ff3fcff3fcff -> #fe40ff3fcff3fcff --- Inf -ddcan278 copynegate #7a00000000000000 -> #fa00000000000000 -ddcan279 copynegate #7800200000000000 -> #f800200000000000 - ------ CopySign: [does not usually canonicalize] --- finites -ddcan280 copysign #77ffff3fcff3fcff -1 -> #f7ffff3fcff3fcff -ddcan281 copysign #77fcff3fdff3fcff 1 -> #77fcff3fdff3fcff --- NaNs -ddcan282 copysign #7c03ff3fcff3fcff -1 -> #fc03ff3fcff3fcff -ddcan283 copysign #7c00ff3fcff3ffff 1 -> #7c00ff3fcff3ffff -ddcan284 copysign #7d00ff3fcff3fcff -1 -> #fd00ff3fcff3fcff -ddcan285 copysign #7c04ff3fcff3fcff 1 -> #7c04ff3fcff3fcff --- sNaN -ddcan286 copysign #7e00ff3fcffffcff -1 -> #fe00ff3fcffffcff -ddcan287 copysign #7e40ff3fcff3fcff 1 -> #7e40ff3fcff3fcff --- Inf -ddcan288 copysign #7a00000000000000 -1 -> #fa00000000000000 -ddcan289 copysign #7800200000000000 1 -> #7800200000000000 - ------ Multiply: --- Finites: neutral 0 -ddcan302 multiply 1 #77ffff3fcff3fcff -> #77fcff3fcff3fcff -ddcan303 multiply #77fcffffcff3fcff 1 -> #77fcff3fcff3fcff --- negative -ddcan306 multiply -1 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff -ddcan307 multiply #77fcffffcff3fcff -1 -> #f7fcff3fcff3fcff --- NaN: declets in payload -ddcan311 multiply 1 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan312 multiply #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -ddcan313 multiply 1 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan314 multiply #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff --- sNaN: declets in payload -ddcan315 multiply 1 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan316 multiply #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -ddcan317 multiply 1 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan318 multiply #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -ddcan320 multiply 1 #7880000000000000 -> #7800000000000000 -ddcan321 multiply #7880000000000000 1 -> #7800000000000000 --- Inf: coefficient continuation bits -ddcan322 multiply 1 #7802000000000000 -> #7800000000000000 -ddcan323 multiply #7802000000000000 1 -> #7800000000000000 -ddcan324 multiply 1 #7800000000000001 -> #7800000000000000 -ddcan325 multiply #7800000000000001 1 -> #7800000000000000 -ddcan326 multiply 1 #7800002000000000 -> #7800000000000000 -ddcan327 multiply #7800002000000000 1 -> #7800000000000000 - ------ Quantize: -ddcan401 quantize #6e38ff3ffff3fcff 1 -> #6e38ff3fcff3fcff -ddcan402 quantize #6e38ff3fcff3fdff 0 -> #6e38ff3fcff3fcff -ddcan403 quantize #7880000000000000 Inf -> #7800000000000000 -ddcan404 quantize #7802000000000000 -Inf -> #7800000000000000 -ddcan410 quantize #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff -ddcan411 quantize #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff -ddcan412 quantize #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff -ddcan413 quantize #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff -ddcan414 quantize #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation -ddcan415 quantize #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation -ddcan416 quantize #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation -ddcan417 quantize #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation - ------ Subtract: --- Finites: neutral 0 -ddcan502 subtract 0E+384 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff -ddcan503 subtract #77fcffffcff3fcff 0E+384 -> #77fcff3fcff3fcff --- tiny zero -ddcan504 subtract 0E-398 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff Rounded -ddcan505 subtract #77fcffffcff3fcff 0E-398 -> #77fcff3fcff3fcff Rounded --- tiny non zero -ddcan506 subtract -1E-398 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff Inexact Rounded -ddcan507 subtract #77ffff3fcff3fcff -1E-398 -> #77fcff3fcff3fcff Inexact Rounded --- NaN: declets in payload -ddcan511 subtract 0 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan512 subtract #7c03ff3fcff3fcff 0 -> #7c00ff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -ddcan513 subtract 0 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan514 subtract #7c40ff3fcff3fcff 0 -> #7c00ff3fcff3fcff --- sNaN: declets in payload -ddcan515 subtract 0 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan516 subtract #7e00ffffcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -ddcan517 subtract 0 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan518 subtract #7e80ff3fcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -ddcan520 subtract 0 #7880000000000000 -> #f800000000000000 -ddcan521 subtract #7880000000000000 0 -> #7800000000000000 --- Inf: coefficient continuation bits -ddcan522 subtract 0 #7802000000000000 -> #f800000000000000 -ddcan523 subtract #7802000000000000 0 -> #7800000000000000 -ddcan524 subtract 0 #7800000000000001 -> #f800000000000000 -ddcan525 subtract #7800000000000001 0 -> #7800000000000000 -ddcan526 subtract 0 #7800002000000000 -> #f800000000000000 -ddcan527 subtract #7800002000000000 0 -> #7800000000000000 - ------ ToIntegral: -ddcan601 tointegralx #6e38ff3ffff3fcff -> #6e38ff3fcff3fcff -ddcan602 tointegralx #6e38ff3fcff3fdff -> #6e38ff3fcff3fcff -ddcan603 tointegralx #7880000000000000 -> #7800000000000000 -ddcan604 tointegralx #7802000000000000 -> #7800000000000000 -ddcan610 tointegralx #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan611 tointegralx #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan612 tointegralx #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan613 tointegralx #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan614 tointegralx #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan615 tointegralx #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan616 tointegralx #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan617 tointegralx #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation --- uncanonical 3999, 39.99, 3.99, 0.399, and negatives -ddcan618 tointegralx #2238000000000fff -> #2238000000000cff -ddcan619 tointegralx #2230000000000fff -> #2238000000000040 Inexact Rounded -ddcan620 tointegralx #222c000000000fff -> #2238000000000004 Inexact Rounded -ddcan621 tointegralx #2228000000000fff -> #2238000000000000 Inexact Rounded -ddcan622 tointegralx #a238000000000fff -> #a238000000000cff -ddcan623 tointegralx #a230000000000fff -> #a238000000000040 Inexact Rounded -ddcan624 tointegralx #a22c000000000fff -> #a238000000000004 Inexact Rounded -ddcan625 tointegralx #a228000000000fff -> #a238000000000000 Inexact Rounded - - - +------------------------------------------------------------------------ +-- ddCanonical.decTest -- test decDouble canonical results -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests that copy operations leave uncanonical operands +-- unchanged, and vice versa +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Uncanonical declets are: abc, where: +-- a=1,2,3 +-- b=6,7,e,f +-- c=e,f + +-- assert some standard (canonical) values; this tests that FromString +-- produces canonical results (many more in decimalNN) +ddcan001 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff +ddcan002 apply 0 -> #2238000000000000 +ddcan003 apply 1 -> #2238000000000001 +ddcan004 apply -1 -> #a238000000000001 +ddcan005 apply Infinity -> #7800000000000000 +ddcan006 apply -Infinity -> #f800000000000000 +ddcan007 apply -NaN -> #fc00000000000000 +ddcan008 apply -sNaN -> #fe00000000000000 +ddcan009 apply NaN999999999999999 -> #7c00ff3fcff3fcff +ddcan010 apply sNaN999999999999999 -> #7e00ff3fcff3fcff +decan011 apply 9999999999999999 -> #6e38ff3fcff3fcff +ddcan012 apply 7.50 -> #22300000000003d0 +ddcan013 apply 9.99 -> #22300000000000ff + +-- Base tests for canonical encodings (individual operator +-- propagation is tested later) + +-- Finites: declets in coefficient +ddcan021 canonical #77fcff3fcff3fcff -> #77fcff3fcff3fcff +ddcan022 canonical #77fcff3fcff3fcff -> #77fcff3fcff3fcff +ddcan023 canonical #77ffff3fcff3fcff -> #77fcff3fcff3fcff +ddcan024 canonical #77ffff3fcff3fcff -> #77fcff3fcff3fcff +ddcan025 canonical #77fcffffcff3fcff -> #77fcff3fcff3fcff +ddcan026 canonical #77fcffffcff3fcff -> #77fcff3fcff3fcff +ddcan027 canonical #77fcff3ffff3fcff -> #77fcff3fcff3fcff +ddcan028 canonical #77fcff3ffff3fcff -> #77fcff3fcff3fcff +ddcan030 canonical #77fcff3fcffffcff -> #77fcff3fcff3fcff +ddcan031 canonical #77fcff3fcffffcff -> #77fcff3fcff3fcff +ddcan032 canonical #77fcff3fcff3ffff -> #77fcff3fcff3fcff +ddcan033 canonical #77fcff3fcff3ffff -> #77fcff3fcff3fcff +ddcan035 canonical #77fcff3fdff3fcff -> #77fcff3fcff3fcff +ddcan036 canonical #77fcff3feff3fcff -> #77fcff3fcff3fcff + +-- NaN: declets in payload +ddcan100 canonical NaN999999999999999 -> #7c00ff3fcff3fcff +ddcan101 canonical #7c00ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan102 canonical #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan103 canonical #7c00ffffcff3fcff -> #7c00ff3fcff3fcff +ddcan104 canonical #7c00ff3ffff3fcff -> #7c00ff3fcff3fcff +ddcan105 canonical #7c00ff3fcffffcff -> #7c00ff3fcff3fcff +ddcan106 canonical #7c00ff3fcff3ffff -> #7c00ff3fcff3fcff +ddcan107 canonical #7c00ff3fcff3ffff -> #7c00ff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +ddcan110 canonical #7c00ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan112 canonical #7d00ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan113 canonical #7c80ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan114 canonical #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan115 canonical #7c20ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan116 canonical #7c10ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan117 canonical #7c08ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan118 canonical #7c04ff3fcff3fcff -> #7c00ff3fcff3fcff + +-- sNaN: declets in payload +ddcan120 canonical sNaN999999999999999 -> #7e00ff3fcff3fcff +ddcan121 canonical #7e00ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan122 canonical #7e03ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan123 canonical #7e00ffffcff3fcff -> #7e00ff3fcff3fcff +ddcan124 canonical #7e00ff3ffff3fcff -> #7e00ff3fcff3fcff +ddcan125 canonical #7e00ff3fcffffcff -> #7e00ff3fcff3fcff +ddcan126 canonical #7e00ff3fcff3ffff -> #7e00ff3fcff3fcff +ddcan127 canonical #7e00ff3fcff3ffff -> #7e00ff3fcff3fcff +-- sNaN: exponent continuation bits [excluding sNaN selector] +ddcan130 canonical #7e00ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan132 canonical #7f00ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan133 canonical #7e80ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan134 canonical #7e40ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan135 canonical #7e20ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan136 canonical #7e10ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan137 canonical #7e08ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan138 canonical #7e04ff3fcff3fcff -> #7e00ff3fcff3fcff + +-- Inf: exponent continuation bits +ddcan140 canonical #7800000000000000 -> #7800000000000000 +ddcan141 canonical #7900000000000000 -> #7800000000000000 +ddcan142 canonical #7a00000000000000 -> #7800000000000000 +ddcan143 canonical #7880000000000000 -> #7800000000000000 +ddcan144 canonical #7840000000000000 -> #7800000000000000 +ddcan145 canonical #7820000000000000 -> #7800000000000000 +ddcan146 canonical #7810000000000000 -> #7800000000000000 +ddcan147 canonical #7808000000000000 -> #7800000000000000 +ddcan148 canonical #7804000000000000 -> #7800000000000000 + +-- Inf: coefficient continuation bits (first, last, and a few others) +ddcan150 canonical #7800000000000000 -> #7800000000000000 +ddcan151 canonical #7802000000000000 -> #7800000000000000 +ddcan152 canonical #7800000000000001 -> #7800000000000000 +ddcan153 canonical #7801000000000000 -> #7800000000000000 +ddcan154 canonical #7800200000000000 -> #7800000000000000 +ddcan155 canonical #7800080000000000 -> #7800000000000000 +ddcan156 canonical #7800002000000000 -> #7800000000000000 +ddcan157 canonical #7800000400000000 -> #7800000000000000 +ddcan158 canonical #7800000040000000 -> #7800000000000000 +ddcan159 canonical #7800000008000000 -> #7800000000000000 +ddcan160 canonical #7800000000400000 -> #7800000000000000 +ddcan161 canonical #7800000000020000 -> #7800000000000000 +ddcan162 canonical #7800000000008000 -> #7800000000000000 +ddcan163 canonical #7800000000000200 -> #7800000000000000 +ddcan164 canonical #7800000000000040 -> #7800000000000000 +ddcan165 canonical #7800000000000008 -> #7800000000000000 + + +-- Now the operators -- trying to check paths that might fail to +-- canonicalize propagated operands + +----- Add: +-- Finites: neutral 0 +ddcan202 add 0E+384 #77ffff3fcff3fcff -> #77fcff3fcff3fcff +ddcan203 add #77fcffffcff3fcff 0E+384 -> #77fcff3fcff3fcff +-- tiny zero +ddcan204 add 0E-398 #77ffff3fcff3fcff -> #77fcff3fcff3fcff Rounded +ddcan205 add #77fcffffcff3fcff 0E-398 -> #77fcff3fcff3fcff Rounded +-- tiny non zero +ddcan206 add -1E-398 #77ffff3fcff3fcff -> #77fcff3fcff3fcff Inexact Rounded +ddcan207 add #77ffff3fcff3fcff -1E-398 -> #77fcff3fcff3fcff Inexact Rounded +-- NaN: declets in payload +ddcan211 add 0 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan212 add #7c03ff3fcff3fcff 0 -> #7c00ff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +ddcan213 add 0 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan214 add #7c40ff3fcff3fcff 0 -> #7c00ff3fcff3fcff +-- sNaN: declets in payload +ddcan215 add 0 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan216 add #7e00ffffcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +ddcan217 add 0 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan218 add #7e80ff3fcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +ddcan220 add 0 #7880000000000000 -> #7800000000000000 +ddcan221 add #7880000000000000 0 -> #7800000000000000 +-- Inf: coefficient continuation bits +ddcan222 add 0 #7802000000000000 -> #7800000000000000 +ddcan223 add #7802000000000000 0 -> #7800000000000000 +ddcan224 add 0 #7800000000000001 -> #7800000000000000 +ddcan225 add #7800000000000001 0 -> #7800000000000000 +ddcan226 add 0 #7800002000000000 -> #7800000000000000 +ddcan227 add #7800002000000000 0 -> #7800000000000000 + +----- Class: [does not return encoded] + +----- Compare: +ddcan231 compare -Inf 1 -> #a238000000000001 +ddcan232 compare -Inf -Inf -> #2238000000000000 +ddcan233 compare 1 -Inf -> #2238000000000001 +ddcan234 compare #7c00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff +ddcan235 compare #7e00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation + +----- CompareSig: +ddcan241 comparesig -Inf 1 -> #a238000000000001 +ddcan242 comparesig -Inf -Inf -> #2238000000000000 +ddcan243 comparesig 1 -Inf -> #2238000000000001 +ddcan244 comparesig #7c00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation +ddcan245 comparesig #7e00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation + +----- Copy: [does not usually canonicalize] +-- finites +ddcan250 copy #77ffff3fcff3fcff -> #77ffff3fcff3fcff +ddcan251 copy #77fcff3fdff3fcff -> #77fcff3fdff3fcff +-- NaNs +ddcan252 copy #7c03ff3fcff3fcff -> #7c03ff3fcff3fcff +ddcan253 copy #7c00ff3fcff3ffff -> #7c00ff3fcff3ffff +ddcan254 copy #7d00ff3fcff3fcff -> #7d00ff3fcff3fcff +ddcan255 copy #7c04ff3fcff3fcff -> #7c04ff3fcff3fcff +-- sNaN +ddcan256 copy #7e00ff3fcffffcff -> #7e00ff3fcffffcff +ddcan257 copy #7e40ff3fcff3fcff -> #7e40ff3fcff3fcff +-- Inf +ddcan258 copy #7a00000000000000 -> #7a00000000000000 +ddcan259 copy #7800200000000000 -> #7800200000000000 + +----- CopyAbs: [does not usually canonicalize] +-- finites +ddcan260 copyabs #f7ffff3fcff3fcff -> #77ffff3fcff3fcff +ddcan261 copyabs #f7fcff3fdff3fcff -> #77fcff3fdff3fcff +-- NaNs +ddcan262 copyabs #fc03ff3fcff3fcff -> #7c03ff3fcff3fcff +ddcan263 copyabs #fc00ff3fcff3ffff -> #7c00ff3fcff3ffff +ddcan264 copyabs #fd00ff3fcff3fcff -> #7d00ff3fcff3fcff +ddcan265 copyabs #fc04ff3fcff3fcff -> #7c04ff3fcff3fcff +-- sNaN +ddcan266 copyabs #fe00ff3fcffffcff -> #7e00ff3fcffffcff +ddcan267 copyabs #fe40ff3fcff3fcff -> #7e40ff3fcff3fcff +-- Inf +ddcan268 copyabs #fa00000000000000 -> #7a00000000000000 +ddcan269 copyabs #f800200000000000 -> #7800200000000000 + +----- CopyNegate: [does not usually canonicalize] +-- finites +ddcan270 copynegate #77ffff3fcff3fcff -> #f7ffff3fcff3fcff +ddcan271 copynegate #77fcff3fdff3fcff -> #f7fcff3fdff3fcff +-- NaNs +ddcan272 copynegate #7c03ff3fcff3fcff -> #fc03ff3fcff3fcff +ddcan273 copynegate #7c00ff3fcff3ffff -> #fc00ff3fcff3ffff +ddcan274 copynegate #7d00ff3fcff3fcff -> #fd00ff3fcff3fcff +ddcan275 copynegate #7c04ff3fcff3fcff -> #fc04ff3fcff3fcff +-- sNaN +ddcan276 copynegate #7e00ff3fcffffcff -> #fe00ff3fcffffcff +ddcan277 copynegate #7e40ff3fcff3fcff -> #fe40ff3fcff3fcff +-- Inf +ddcan278 copynegate #7a00000000000000 -> #fa00000000000000 +ddcan279 copynegate #7800200000000000 -> #f800200000000000 + +----- CopySign: [does not usually canonicalize] +-- finites +ddcan280 copysign #77ffff3fcff3fcff -1 -> #f7ffff3fcff3fcff +ddcan281 copysign #77fcff3fdff3fcff 1 -> #77fcff3fdff3fcff +-- NaNs +ddcan282 copysign #7c03ff3fcff3fcff -1 -> #fc03ff3fcff3fcff +ddcan283 copysign #7c00ff3fcff3ffff 1 -> #7c00ff3fcff3ffff +ddcan284 copysign #7d00ff3fcff3fcff -1 -> #fd00ff3fcff3fcff +ddcan285 copysign #7c04ff3fcff3fcff 1 -> #7c04ff3fcff3fcff +-- sNaN +ddcan286 copysign #7e00ff3fcffffcff -1 -> #fe00ff3fcffffcff +ddcan287 copysign #7e40ff3fcff3fcff 1 -> #7e40ff3fcff3fcff +-- Inf +ddcan288 copysign #7a00000000000000 -1 -> #fa00000000000000 +ddcan289 copysign #7800200000000000 1 -> #7800200000000000 + +----- Multiply: +-- Finites: neutral 0 +ddcan302 multiply 1 #77ffff3fcff3fcff -> #77fcff3fcff3fcff +ddcan303 multiply #77fcffffcff3fcff 1 -> #77fcff3fcff3fcff +-- negative +ddcan306 multiply -1 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff +ddcan307 multiply #77fcffffcff3fcff -1 -> #f7fcff3fcff3fcff +-- NaN: declets in payload +ddcan311 multiply 1 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan312 multiply #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +ddcan313 multiply 1 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan314 multiply #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +-- sNaN: declets in payload +ddcan315 multiply 1 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan316 multiply #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +ddcan317 multiply 1 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan318 multiply #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +ddcan320 multiply 1 #7880000000000000 -> #7800000000000000 +ddcan321 multiply #7880000000000000 1 -> #7800000000000000 +-- Inf: coefficient continuation bits +ddcan322 multiply 1 #7802000000000000 -> #7800000000000000 +ddcan323 multiply #7802000000000000 1 -> #7800000000000000 +ddcan324 multiply 1 #7800000000000001 -> #7800000000000000 +ddcan325 multiply #7800000000000001 1 -> #7800000000000000 +ddcan326 multiply 1 #7800002000000000 -> #7800000000000000 +ddcan327 multiply #7800002000000000 1 -> #7800000000000000 + +----- Quantize: +ddcan401 quantize #6e38ff3ffff3fcff 1 -> #6e38ff3fcff3fcff +ddcan402 quantize #6e38ff3fcff3fdff 0 -> #6e38ff3fcff3fcff +ddcan403 quantize #7880000000000000 Inf -> #7800000000000000 +ddcan404 quantize #7802000000000000 -Inf -> #7800000000000000 +ddcan410 quantize #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +ddcan411 quantize #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +ddcan412 quantize #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +ddcan413 quantize #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +ddcan414 quantize #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +ddcan415 quantize #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +ddcan416 quantize #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +ddcan417 quantize #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation + +----- Subtract: +-- Finites: neutral 0 +ddcan502 subtract 0E+384 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff +ddcan503 subtract #77fcffffcff3fcff 0E+384 -> #77fcff3fcff3fcff +-- tiny zero +ddcan504 subtract 0E-398 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff Rounded +ddcan505 subtract #77fcffffcff3fcff 0E-398 -> #77fcff3fcff3fcff Rounded +-- tiny non zero +ddcan506 subtract -1E-398 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff Inexact Rounded +ddcan507 subtract #77ffff3fcff3fcff -1E-398 -> #77fcff3fcff3fcff Inexact Rounded +-- NaN: declets in payload +ddcan511 subtract 0 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan512 subtract #7c03ff3fcff3fcff 0 -> #7c00ff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +ddcan513 subtract 0 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan514 subtract #7c40ff3fcff3fcff 0 -> #7c00ff3fcff3fcff +-- sNaN: declets in payload +ddcan515 subtract 0 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan516 subtract #7e00ffffcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +ddcan517 subtract 0 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan518 subtract #7e80ff3fcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +ddcan520 subtract 0 #7880000000000000 -> #f800000000000000 +ddcan521 subtract #7880000000000000 0 -> #7800000000000000 +-- Inf: coefficient continuation bits +ddcan522 subtract 0 #7802000000000000 -> #f800000000000000 +ddcan523 subtract #7802000000000000 0 -> #7800000000000000 +ddcan524 subtract 0 #7800000000000001 -> #f800000000000000 +ddcan525 subtract #7800000000000001 0 -> #7800000000000000 +ddcan526 subtract 0 #7800002000000000 -> #f800000000000000 +ddcan527 subtract #7800002000000000 0 -> #7800000000000000 + +----- ToIntegral: +ddcan601 tointegralx #6e38ff3ffff3fcff -> #6e38ff3fcff3fcff +ddcan602 tointegralx #6e38ff3fcff3fdff -> #6e38ff3fcff3fcff +ddcan603 tointegralx #7880000000000000 -> #7800000000000000 +ddcan604 tointegralx #7802000000000000 -> #7800000000000000 +ddcan610 tointegralx #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan611 tointegralx #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan612 tointegralx #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan613 tointegralx #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan614 tointegralx #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan615 tointegralx #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan616 tointegralx #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan617 tointegralx #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +-- uncanonical 3999, 39.99, 3.99, 0.399, and negatives +ddcan618 tointegralx #2238000000000fff -> #2238000000000cff +ddcan619 tointegralx #2230000000000fff -> #2238000000000040 Inexact Rounded +ddcan620 tointegralx #222c000000000fff -> #2238000000000004 Inexact Rounded +ddcan621 tointegralx #2228000000000fff -> #2238000000000000 Inexact Rounded +ddcan622 tointegralx #a238000000000fff -> #a238000000000cff +ddcan623 tointegralx #a230000000000fff -> #a238000000000040 Inexact Rounded +ddcan624 tointegralx #a22c000000000fff -> #a238000000000004 Inexact Rounded +ddcan625 tointegralx #a228000000000fff -> #a238000000000000 Inexact Rounded + + + diff --git a/Lib/test/decimaltestdata/ddClass.decTest b/Lib/test/decimaltestdata/ddClass.decTest index a1d233b86d6..bb34c42d4a6 100644 --- a/Lib/test/decimaltestdata/ddClass.decTest +++ b/Lib/test/decimaltestdata/ddClass.decTest @@ -1,76 +1,76 @@ ------------------------------------------------------------------------- --- ddClass.decTest -- decDouble Class operations -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- [New 2006.11.27] -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddcla001 class 0 -> +Zero -ddcla002 class 0.00 -> +Zero -ddcla003 class 0E+5 -> +Zero -ddcla004 class 1E-396 -> +Subnormal -ddcla005 class 0.1E-383 -> +Subnormal -ddcla006 class 0.999999999999999E-383 -> +Subnormal -ddcla007 class 1.000000000000000E-383 -> +Normal -ddcla008 class 1E-383 -> +Normal -ddcla009 class 1E-100 -> +Normal -ddcla010 class 1E-10 -> +Normal -ddcla012 class 1E-1 -> +Normal -ddcla013 class 1 -> +Normal -ddcla014 class 2.50 -> +Normal -ddcla015 class 100.100 -> +Normal -ddcla016 class 1E+30 -> +Normal -ddcla017 class 1E+384 -> +Normal -ddcla018 class 9.999999999999999E+384 -> +Normal -ddcla019 class Inf -> +Infinity - -ddcla021 class -0 -> -Zero -ddcla022 class -0.00 -> -Zero -ddcla023 class -0E+5 -> -Zero -ddcla024 class -1E-396 -> -Subnormal -ddcla025 class -0.1E-383 -> -Subnormal -ddcla026 class -0.999999999999999E-383 -> -Subnormal -ddcla027 class -1.000000000000000E-383 -> -Normal -ddcla028 class -1E-383 -> -Normal -ddcla029 class -1E-100 -> -Normal -ddcla030 class -1E-10 -> -Normal -ddcla032 class -1E-1 -> -Normal -ddcla033 class -1 -> -Normal -ddcla034 class -2.50 -> -Normal -ddcla035 class -100.100 -> -Normal -ddcla036 class -1E+30 -> -Normal -ddcla037 class -1E+384 -> -Normal -ddcla038 class -9.999999999999999E+384 -> -Normal -ddcla039 class -Inf -> -Infinity - -ddcla041 class NaN -> NaN -ddcla042 class -NaN -> NaN -ddcla043 class +NaN12345 -> NaN -ddcla044 class sNaN -> sNaN -ddcla045 class -sNaN -> sNaN -ddcla046 class +sNaN12345 -> sNaN - - - +------------------------------------------------------------------------ +-- ddClass.decTest -- decDouble Class operations -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- [New 2006.11.27] +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddcla001 class 0 -> +Zero +ddcla002 class 0.00 -> +Zero +ddcla003 class 0E+5 -> +Zero +ddcla004 class 1E-396 -> +Subnormal +ddcla005 class 0.1E-383 -> +Subnormal +ddcla006 class 0.999999999999999E-383 -> +Subnormal +ddcla007 class 1.000000000000000E-383 -> +Normal +ddcla008 class 1E-383 -> +Normal +ddcla009 class 1E-100 -> +Normal +ddcla010 class 1E-10 -> +Normal +ddcla012 class 1E-1 -> +Normal +ddcla013 class 1 -> +Normal +ddcla014 class 2.50 -> +Normal +ddcla015 class 100.100 -> +Normal +ddcla016 class 1E+30 -> +Normal +ddcla017 class 1E+384 -> +Normal +ddcla018 class 9.999999999999999E+384 -> +Normal +ddcla019 class Inf -> +Infinity + +ddcla021 class -0 -> -Zero +ddcla022 class -0.00 -> -Zero +ddcla023 class -0E+5 -> -Zero +ddcla024 class -1E-396 -> -Subnormal +ddcla025 class -0.1E-383 -> -Subnormal +ddcla026 class -0.999999999999999E-383 -> -Subnormal +ddcla027 class -1.000000000000000E-383 -> -Normal +ddcla028 class -1E-383 -> -Normal +ddcla029 class -1E-100 -> -Normal +ddcla030 class -1E-10 -> -Normal +ddcla032 class -1E-1 -> -Normal +ddcla033 class -1 -> -Normal +ddcla034 class -2.50 -> -Normal +ddcla035 class -100.100 -> -Normal +ddcla036 class -1E+30 -> -Normal +ddcla037 class -1E+384 -> -Normal +ddcla038 class -9.999999999999999E+384 -> -Normal +ddcla039 class -Inf -> -Infinity + +ddcla041 class NaN -> NaN +ddcla042 class -NaN -> NaN +ddcla043 class +NaN12345 -> NaN +ddcla044 class sNaN -> sNaN +ddcla045 class -sNaN -> sNaN +ddcla046 class +sNaN12345 -> sNaN + + + diff --git a/Lib/test/decimaltestdata/ddCompare.decTest b/Lib/test/decimaltestdata/ddCompare.decTest index a20ae210cc9..6debfc7a138 100644 --- a/Lib/test/decimaltestdata/ddCompare.decTest +++ b/Lib/test/decimaltestdata/ddCompare.decTest @@ -1,744 +1,744 @@ ------------------------------------------------------------------------- --- ddCompare.decTest -- decDouble comparison that allows quiet NaNs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddcom001 compare -2 -2 -> 0 -ddcom002 compare -2 -1 -> -1 -ddcom003 compare -2 0 -> -1 -ddcom004 compare -2 1 -> -1 -ddcom005 compare -2 2 -> -1 -ddcom006 compare -1 -2 -> 1 -ddcom007 compare -1 -1 -> 0 -ddcom008 compare -1 0 -> -1 -ddcom009 compare -1 1 -> -1 -ddcom010 compare -1 2 -> -1 -ddcom011 compare 0 -2 -> 1 -ddcom012 compare 0 -1 -> 1 -ddcom013 compare 0 0 -> 0 -ddcom014 compare 0 1 -> -1 -ddcom015 compare 0 2 -> -1 -ddcom016 compare 1 -2 -> 1 -ddcom017 compare 1 -1 -> 1 -ddcom018 compare 1 0 -> 1 -ddcom019 compare 1 1 -> 0 -ddcom020 compare 1 2 -> -1 -ddcom021 compare 2 -2 -> 1 -ddcom022 compare 2 -1 -> 1 -ddcom023 compare 2 0 -> 1 -ddcom025 compare 2 1 -> 1 -ddcom026 compare 2 2 -> 0 - -ddcom031 compare -20 -20 -> 0 -ddcom032 compare -20 -10 -> -1 -ddcom033 compare -20 00 -> -1 -ddcom034 compare -20 10 -> -1 -ddcom035 compare -20 20 -> -1 -ddcom036 compare -10 -20 -> 1 -ddcom037 compare -10 -10 -> 0 -ddcom038 compare -10 00 -> -1 -ddcom039 compare -10 10 -> -1 -ddcom040 compare -10 20 -> -1 -ddcom041 compare 00 -20 -> 1 -ddcom042 compare 00 -10 -> 1 -ddcom043 compare 00 00 -> 0 -ddcom044 compare 00 10 -> -1 -ddcom045 compare 00 20 -> -1 -ddcom046 compare 10 -20 -> 1 -ddcom047 compare 10 -10 -> 1 -ddcom048 compare 10 00 -> 1 -ddcom049 compare 10 10 -> 0 -ddcom050 compare 10 20 -> -1 -ddcom051 compare 20 -20 -> 1 -ddcom052 compare 20 -10 -> 1 -ddcom053 compare 20 00 -> 1 -ddcom055 compare 20 10 -> 1 -ddcom056 compare 20 20 -> 0 - -ddcom061 compare -2.0 -2.0 -> 0 -ddcom062 compare -2.0 -1.0 -> -1 -ddcom063 compare -2.0 0.0 -> -1 -ddcom064 compare -2.0 1.0 -> -1 -ddcom065 compare -2.0 2.0 -> -1 -ddcom066 compare -1.0 -2.0 -> 1 -ddcom067 compare -1.0 -1.0 -> 0 -ddcom068 compare -1.0 0.0 -> -1 -ddcom069 compare -1.0 1.0 -> -1 -ddcom070 compare -1.0 2.0 -> -1 -ddcom071 compare 0.0 -2.0 -> 1 -ddcom072 compare 0.0 -1.0 -> 1 -ddcom073 compare 0.0 0.0 -> 0 -ddcom074 compare 0.0 1.0 -> -1 -ddcom075 compare 0.0 2.0 -> -1 -ddcom076 compare 1.0 -2.0 -> 1 -ddcom077 compare 1.0 -1.0 -> 1 -ddcom078 compare 1.0 0.0 -> 1 -ddcom079 compare 1.0 1.0 -> 0 -ddcom080 compare 1.0 2.0 -> -1 -ddcom081 compare 2.0 -2.0 -> 1 -ddcom082 compare 2.0 -1.0 -> 1 -ddcom083 compare 2.0 0.0 -> 1 -ddcom085 compare 2.0 1.0 -> 1 -ddcom086 compare 2.0 2.0 -> 0 -ddcom087 compare 1.0 0.1 -> 1 -ddcom088 compare 0.1 1.0 -> -1 - --- now some cases which might overflow if subtract were used -ddcom095 compare 9.999999999999999E+384 9.999999999999999E+384 -> 0 -ddcom096 compare -9.999999999999999E+384 9.999999999999999E+384 -> -1 -ddcom097 compare 9.999999999999999E+384 -9.999999999999999E+384 -> 1 -ddcom098 compare -9.999999999999999E+384 -9.999999999999999E+384 -> 0 - --- some differing length/exponent cases -ddcom100 compare 7.0 7.0 -> 0 -ddcom101 compare 7.0 7 -> 0 -ddcom102 compare 7 7.0 -> 0 -ddcom103 compare 7E+0 7.0 -> 0 -ddcom104 compare 70E-1 7.0 -> 0 -ddcom105 compare 0.7E+1 7 -> 0 -ddcom106 compare 70E-1 7 -> 0 -ddcom107 compare 7.0 7E+0 -> 0 -ddcom108 compare 7.0 70E-1 -> 0 -ddcom109 compare 7 0.7E+1 -> 0 -ddcom110 compare 7 70E-1 -> 0 - -ddcom120 compare 8.0 7.0 -> 1 -ddcom121 compare 8.0 7 -> 1 -ddcom122 compare 8 7.0 -> 1 -ddcom123 compare 8E+0 7.0 -> 1 -ddcom124 compare 80E-1 7.0 -> 1 -ddcom125 compare 0.8E+1 7 -> 1 -ddcom126 compare 80E-1 7 -> 1 -ddcom127 compare 8.0 7E+0 -> 1 -ddcom128 compare 8.0 70E-1 -> 1 -ddcom129 compare 8 0.7E+1 -> 1 -ddcom130 compare 8 70E-1 -> 1 - -ddcom140 compare 8.0 9.0 -> -1 -ddcom141 compare 8.0 9 -> -1 -ddcom142 compare 8 9.0 -> -1 -ddcom143 compare 8E+0 9.0 -> -1 -ddcom144 compare 80E-1 9.0 -> -1 -ddcom145 compare 0.8E+1 9 -> -1 -ddcom146 compare 80E-1 9 -> -1 -ddcom147 compare 8.0 9E+0 -> -1 -ddcom148 compare 8.0 90E-1 -> -1 -ddcom149 compare 8 0.9E+1 -> -1 -ddcom150 compare 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ddcom200 compare -7.0 7.0 -> -1 -ddcom201 compare -7.0 7 -> -1 -ddcom202 compare -7 7.0 -> -1 -ddcom203 compare -7E+0 7.0 -> -1 -ddcom204 compare -70E-1 7.0 -> -1 -ddcom205 compare -0.7E+1 7 -> -1 -ddcom206 compare -70E-1 7 -> -1 -ddcom207 compare -7.0 7E+0 -> -1 -ddcom208 compare -7.0 70E-1 -> -1 -ddcom209 compare -7 0.7E+1 -> -1 -ddcom210 compare -7 70E-1 -> -1 - -ddcom220 compare -8.0 7.0 -> -1 -ddcom221 compare -8.0 7 -> -1 -ddcom222 compare -8 7.0 -> -1 -ddcom223 compare -8E+0 7.0 -> -1 -ddcom224 compare -80E-1 7.0 -> -1 -ddcom225 compare -0.8E+1 7 -> -1 -ddcom226 compare -80E-1 7 -> -1 -ddcom227 compare -8.0 7E+0 -> -1 -ddcom228 compare -8.0 70E-1 -> -1 -ddcom229 compare -8 0.7E+1 -> -1 -ddcom230 compare -8 70E-1 -> -1 - -ddcom240 compare -8.0 9.0 -> -1 -ddcom241 compare -8.0 9 -> -1 -ddcom242 compare -8 9.0 -> -1 -ddcom243 compare -8E+0 9.0 -> -1 -ddcom244 compare -80E-1 9.0 -> -1 -ddcom245 compare -0.8E+1 9 -> -1 -ddcom246 compare -80E-1 9 -> -1 -ddcom247 compare -8.0 9E+0 -> -1 -ddcom248 compare -8.0 90E-1 -> -1 -ddcom249 compare -8 0.9E+1 -> -1 -ddcom250 compare -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ddcom300 compare 7.0 -7.0 -> 1 -ddcom301 compare 7.0 -7 -> 1 -ddcom302 compare 7 -7.0 -> 1 -ddcom303 compare 7E+0 -7.0 -> 1 -ddcom304 compare 70E-1 -7.0 -> 1 -ddcom305 compare .7E+1 -7 -> 1 -ddcom306 compare 70E-1 -7 -> 1 -ddcom307 compare 7.0 -7E+0 -> 1 -ddcom308 compare 7.0 -70E-1 -> 1 -ddcom309 compare 7 -.7E+1 -> 1 -ddcom310 compare 7 -70E-1 -> 1 - -ddcom320 compare 8.0 -7.0 -> 1 -ddcom321 compare 8.0 -7 -> 1 -ddcom322 compare 8 -7.0 -> 1 -ddcom323 compare 8E+0 -7.0 -> 1 -ddcom324 compare 80E-1 -7.0 -> 1 -ddcom325 compare .8E+1 -7 -> 1 -ddcom326 compare 80E-1 -7 -> 1 -ddcom327 compare 8.0 -7E+0 -> 1 -ddcom328 compare 8.0 -70E-1 -> 1 -ddcom329 compare 8 -.7E+1 -> 1 -ddcom330 compare 8 -70E-1 -> 1 - -ddcom340 compare 8.0 -9.0 -> 1 -ddcom341 compare 8.0 -9 -> 1 -ddcom342 compare 8 -9.0 -> 1 -ddcom343 compare 8E+0 -9.0 -> 1 -ddcom344 compare 80E-1 -9.0 -> 1 -ddcom345 compare .8E+1 -9 -> 1 -ddcom346 compare 80E-1 -9 -> 1 -ddcom347 compare 8.0 -9E+0 -> 1 -ddcom348 compare 8.0 -90E-1 -> 1 -ddcom349 compare 8 -.9E+1 -> 1 -ddcom350 compare 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -ddcom400 compare -7.0 -7.0 -> 0 -ddcom401 compare -7.0 -7 -> 0 -ddcom402 compare -7 -7.0 -> 0 -ddcom403 compare -7E+0 -7.0 -> 0 -ddcom404 compare -70E-1 -7.0 -> 0 -ddcom405 compare -.7E+1 -7 -> 0 -ddcom406 compare -70E-1 -7 -> 0 -ddcom407 compare -7.0 -7E+0 -> 0 -ddcom408 compare -7.0 -70E-1 -> 0 -ddcom409 compare -7 -.7E+1 -> 0 -ddcom410 compare -7 -70E-1 -> 0 - -ddcom420 compare -8.0 -7.0 -> -1 -ddcom421 compare -8.0 -7 -> -1 -ddcom422 compare -8 -7.0 -> -1 -ddcom423 compare -8E+0 -7.0 -> -1 -ddcom424 compare -80E-1 -7.0 -> -1 -ddcom425 compare -.8E+1 -7 -> -1 -ddcom426 compare -80E-1 -7 -> -1 -ddcom427 compare -8.0 -7E+0 -> -1 -ddcom428 compare -8.0 -70E-1 -> -1 -ddcom429 compare -8 -.7E+1 -> -1 -ddcom430 compare -8 -70E-1 -> -1 - -ddcom440 compare -8.0 -9.0 -> 1 -ddcom441 compare -8.0 -9 -> 1 -ddcom442 compare -8 -9.0 -> 1 -ddcom443 compare -8E+0 -9.0 -> 1 -ddcom444 compare -80E-1 -9.0 -> 1 -ddcom445 compare -.8E+1 -9 -> 1 -ddcom446 compare -80E-1 -9 -> 1 -ddcom447 compare -8.0 -9E+0 -> 1 -ddcom448 compare -8.0 -90E-1 -> 1 -ddcom449 compare -8 -.9E+1 -> 1 -ddcom450 compare -8 -90E-1 -> 1 - --- misalignment traps for little-endian -ddcom451 compare 1.0 0.1 -> 1 -ddcom452 compare 0.1 1.0 -> -1 -ddcom453 compare 10.0 0.1 -> 1 -ddcom454 compare 0.1 10.0 -> -1 -ddcom455 compare 100 1.0 -> 1 -ddcom456 compare 1.0 100 -> -1 -ddcom457 compare 1000 10.0 -> 1 -ddcom458 compare 10.0 1000 -> -1 -ddcom459 compare 10000 100.0 -> 1 -ddcom460 compare 100.0 10000 -> -1 -ddcom461 compare 100000 1000.0 -> 1 -ddcom462 compare 1000.0 100000 -> -1 -ddcom463 compare 1000000 10000.0 -> 1 -ddcom464 compare 10000.0 1000000 -> -1 - --- testcases that subtract to lots of zeros at boundaries [pgr] -ddcom473 compare 123.4560000000000E-89 123.456E-89 -> 0 -ddcom474 compare 123.456000000000E+89 123.456E+89 -> 0 -ddcom475 compare 123.45600000000E-89 123.456E-89 -> 0 -ddcom476 compare 123.4560000000E+89 123.456E+89 -> 0 -ddcom477 compare 123.456000000E-89 123.456E-89 -> 0 -ddcom478 compare 123.45600000E+89 123.456E+89 -> 0 -ddcom479 compare 123.4560000E-89 123.456E-89 -> 0 -ddcom480 compare 123.456000E+89 123.456E+89 -> 0 -ddcom481 compare 123.45600E-89 123.456E-89 -> 0 -ddcom482 compare 123.4560E+89 123.456E+89 -> 0 -ddcom483 compare 123.456E-89 123.456E-89 -> 0 -ddcom487 compare 123.456E+89 123.4560000000000E+89 -> 0 -ddcom488 compare 123.456E-89 123.456000000000E-89 -> 0 -ddcom489 compare 123.456E+89 123.45600000000E+89 -> 0 -ddcom490 compare 123.456E-89 123.4560000000E-89 -> 0 -ddcom491 compare 123.456E+89 123.456000000E+89 -> 0 -ddcom492 compare 123.456E-89 123.45600000E-89 -> 0 -ddcom493 compare 123.456E+89 123.4560000E+89 -> 0 -ddcom494 compare 123.456E-89 123.456000E-89 -> 0 -ddcom495 compare 123.456E+89 123.45600E+89 -> 0 -ddcom496 compare 123.456E-89 123.4560E-89 -> 0 -ddcom497 compare 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -ddcom500 compare 1 1E-15 -> 1 -ddcom501 compare 1 1E-14 -> 1 -ddcom502 compare 1 1E-13 -> 1 -ddcom503 compare 1 1E-12 -> 1 -ddcom504 compare 1 1E-11 -> 1 -ddcom505 compare 1 1E-10 -> 1 -ddcom506 compare 1 1E-9 -> 1 -ddcom507 compare 1 1E-8 -> 1 -ddcom508 compare 1 1E-7 -> 1 -ddcom509 compare 1 1E-6 -> 1 -ddcom510 compare 1 1E-5 -> 1 -ddcom511 compare 1 1E-4 -> 1 -ddcom512 compare 1 1E-3 -> 1 -ddcom513 compare 1 1E-2 -> 1 -ddcom514 compare 1 1E-1 -> 1 -ddcom515 compare 1 1E-0 -> 0 -ddcom516 compare 1 1E+1 -> -1 -ddcom517 compare 1 1E+2 -> -1 -ddcom518 compare 1 1E+3 -> -1 -ddcom519 compare 1 1E+4 -> -1 -ddcom521 compare 1 1E+5 -> -1 -ddcom522 compare 1 1E+6 -> -1 -ddcom523 compare 1 1E+7 -> -1 -ddcom524 compare 1 1E+8 -> -1 -ddcom525 compare 1 1E+9 -> -1 -ddcom526 compare 1 1E+10 -> -1 -ddcom527 compare 1 1E+11 -> -1 -ddcom528 compare 1 1E+12 -> -1 -ddcom529 compare 1 1E+13 -> -1 -ddcom530 compare 1 1E+14 -> -1 -ddcom531 compare 1 1E+15 -> -1 --- LR swap -ddcom540 compare 1E-15 1 -> -1 -ddcom541 compare 1E-14 1 -> -1 -ddcom542 compare 1E-13 1 -> -1 -ddcom543 compare 1E-12 1 -> -1 -ddcom544 compare 1E-11 1 -> -1 -ddcom545 compare 1E-10 1 -> -1 -ddcom546 compare 1E-9 1 -> -1 -ddcom547 compare 1E-8 1 -> -1 -ddcom548 compare 1E-7 1 -> -1 -ddcom549 compare 1E-6 1 -> -1 -ddcom550 compare 1E-5 1 -> -1 -ddcom551 compare 1E-4 1 -> -1 -ddcom552 compare 1E-3 1 -> -1 -ddcom553 compare 1E-2 1 -> -1 -ddcom554 compare 1E-1 1 -> -1 -ddcom555 compare 1E-0 1 -> 0 -ddcom556 compare 1E+1 1 -> 1 -ddcom557 compare 1E+2 1 -> 1 -ddcom558 compare 1E+3 1 -> 1 -ddcom559 compare 1E+4 1 -> 1 -ddcom561 compare 1E+5 1 -> 1 -ddcom562 compare 1E+6 1 -> 1 -ddcom563 compare 1E+7 1 -> 1 -ddcom564 compare 1E+8 1 -> 1 -ddcom565 compare 1E+9 1 -> 1 -ddcom566 compare 1E+10 1 -> 1 -ddcom567 compare 1E+11 1 -> 1 -ddcom568 compare 1E+12 1 -> 1 -ddcom569 compare 1E+13 1 -> 1 -ddcom570 compare 1E+14 1 -> 1 -ddcom571 compare 1E+15 1 -> 1 --- similar with a useful coefficient, one side only -ddcom580 compare 0.000000987654321 1E-15 -> 1 -ddcom581 compare 0.000000987654321 1E-14 -> 1 -ddcom582 compare 0.000000987654321 1E-13 -> 1 -ddcom583 compare 0.000000987654321 1E-12 -> 1 -ddcom584 compare 0.000000987654321 1E-11 -> 1 -ddcom585 compare 0.000000987654321 1E-10 -> 1 -ddcom586 compare 0.000000987654321 1E-9 -> 1 -ddcom587 compare 0.000000987654321 1E-8 -> 1 -ddcom588 compare 0.000000987654321 1E-7 -> 1 -ddcom589 compare 0.000000987654321 1E-6 -> -1 -ddcom590 compare 0.000000987654321 1E-5 -> -1 -ddcom591 compare 0.000000987654321 1E-4 -> -1 -ddcom592 compare 0.000000987654321 1E-3 -> -1 -ddcom593 compare 0.000000987654321 1E-2 -> -1 -ddcom594 compare 0.000000987654321 1E-1 -> -1 -ddcom595 compare 0.000000987654321 1E-0 -> -1 -ddcom596 compare 0.000000987654321 1E+1 -> -1 -ddcom597 compare 0.000000987654321 1E+2 -> -1 -ddcom598 compare 0.000000987654321 1E+3 -> -1 -ddcom599 compare 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -ddcom600 compare 12 12.2345 -> -1 -ddcom601 compare 12.0 12.2345 -> -1 -ddcom602 compare 12.00 12.2345 -> -1 -ddcom603 compare 12.000 12.2345 -> -1 -ddcom604 compare 12.0000 12.2345 -> -1 -ddcom605 compare 12.00000 12.2345 -> -1 -ddcom606 compare 12.000000 12.2345 -> -1 -ddcom607 compare 12.0000000 12.2345 -> -1 -ddcom608 compare 12.00000000 12.2345 -> -1 -ddcom609 compare 12.000000000 12.2345 -> -1 -ddcom610 compare 12.1234 12 -> 1 -ddcom611 compare 12.1234 12.0 -> 1 -ddcom612 compare 12.1234 12.00 -> 1 -ddcom613 compare 12.1234 12.000 -> 1 -ddcom614 compare 12.1234 12.0000 -> 1 -ddcom615 compare 12.1234 12.00000 -> 1 -ddcom616 compare 12.1234 12.000000 -> 1 -ddcom617 compare 12.1234 12.0000000 -> 1 -ddcom618 compare 12.1234 12.00000000 -> 1 -ddcom619 compare 12.1234 12.000000000 -> 1 -ddcom620 compare -12 -12.2345 -> 1 -ddcom621 compare -12.0 -12.2345 -> 1 -ddcom622 compare -12.00 -12.2345 -> 1 -ddcom623 compare -12.000 -12.2345 -> 1 -ddcom624 compare -12.0000 -12.2345 -> 1 -ddcom625 compare -12.00000 -12.2345 -> 1 -ddcom626 compare -12.000000 -12.2345 -> 1 -ddcom627 compare -12.0000000 -12.2345 -> 1 -ddcom628 compare -12.00000000 -12.2345 -> 1 -ddcom629 compare -12.000000000 -12.2345 -> 1 -ddcom630 compare -12.1234 -12 -> -1 -ddcom631 compare -12.1234 -12.0 -> -1 -ddcom632 compare -12.1234 -12.00 -> -1 -ddcom633 compare -12.1234 -12.000 -> -1 -ddcom634 compare -12.1234 -12.0000 -> -1 -ddcom635 compare -12.1234 -12.00000 -> -1 -ddcom636 compare -12.1234 -12.000000 -> -1 -ddcom637 compare -12.1234 -12.0000000 -> -1 -ddcom638 compare -12.1234 -12.00000000 -> -1 -ddcom639 compare -12.1234 -12.000000000 -> -1 - --- extended zeros -ddcom640 compare 0 0 -> 0 -ddcom641 compare 0 -0 -> 0 -ddcom642 compare 0 -0.0 -> 0 -ddcom643 compare 0 0.0 -> 0 -ddcom644 compare -0 0 -> 0 -ddcom645 compare -0 -0 -> 0 -ddcom646 compare -0 -0.0 -> 0 -ddcom647 compare -0 0.0 -> 0 -ddcom648 compare 0.0 0 -> 0 -ddcom649 compare 0.0 -0 -> 0 -ddcom650 compare 0.0 -0.0 -> 0 -ddcom651 compare 0.0 0.0 -> 0 -ddcom652 compare -0.0 0 -> 0 -ddcom653 compare -0.0 -0 -> 0 -ddcom654 compare -0.0 -0.0 -> 0 -ddcom655 compare -0.0 0.0 -> 0 - -ddcom656 compare -0E1 0.0 -> 0 -ddcom657 compare -0E2 0.0 -> 0 -ddcom658 compare 0E1 0.0 -> 0 -ddcom659 compare 0E2 0.0 -> 0 -ddcom660 compare -0E1 0 -> 0 -ddcom661 compare -0E2 0 -> 0 -ddcom662 compare 0E1 0 -> 0 -ddcom663 compare 0E2 0 -> 0 -ddcom664 compare -0E1 -0E1 -> 0 -ddcom665 compare -0E2 -0E1 -> 0 -ddcom666 compare 0E1 -0E1 -> 0 -ddcom667 compare 0E2 -0E1 -> 0 -ddcom668 compare -0E1 -0E2 -> 0 -ddcom669 compare -0E2 -0E2 -> 0 -ddcom670 compare 0E1 -0E2 -> 0 -ddcom671 compare 0E2 -0E2 -> 0 -ddcom672 compare -0E1 0E1 -> 0 -ddcom673 compare -0E2 0E1 -> 0 -ddcom674 compare 0E1 0E1 -> 0 -ddcom675 compare 0E2 0E1 -> 0 -ddcom676 compare -0E1 0E2 -> 0 -ddcom677 compare -0E2 0E2 -> 0 -ddcom678 compare 0E1 0E2 -> 0 -ddcom679 compare 0E2 0E2 -> 0 - --- trailing zeros; unit-y -ddcom680 compare 12 12 -> 0 -ddcom681 compare 12 12.0 -> 0 -ddcom682 compare 12 12.00 -> 0 -ddcom683 compare 12 12.000 -> 0 -ddcom684 compare 12 12.0000 -> 0 -ddcom685 compare 12 12.00000 -> 0 -ddcom686 compare 12 12.000000 -> 0 -ddcom687 compare 12 12.0000000 -> 0 -ddcom688 compare 12 12.00000000 -> 0 -ddcom689 compare 12 12.000000000 -> 0 -ddcom690 compare 12 12 -> 0 -ddcom691 compare 12.0 12 -> 0 -ddcom692 compare 12.00 12 -> 0 -ddcom693 compare 12.000 12 -> 0 -ddcom694 compare 12.0000 12 -> 0 -ddcom695 compare 12.00000 12 -> 0 -ddcom696 compare 12.000000 12 -> 0 -ddcom697 compare 12.0000000 12 -> 0 -ddcom698 compare 12.00000000 12 -> 0 -ddcom699 compare 12.000000000 12 -> 0 - --- first, second, & last digit -ddcom700 compare 1234567890123456 1234567890123455 -> 1 -ddcom701 compare 1234567890123456 1234567890123456 -> 0 -ddcom702 compare 1234567890123456 1234567890123457 -> -1 -ddcom703 compare 1234567890123456 0234567890123456 -> 1 -ddcom704 compare 1234567890123456 1234567890123456 -> 0 -ddcom705 compare 1234567890123456 2234567890123456 -> -1 -ddcom706 compare 1134567890123456 1034567890123456 -> 1 -ddcom707 compare 1134567890123456 1134567890123456 -> 0 -ddcom708 compare 1134567890123456 1234567890123456 -> -1 - --- miscellaneous -ddcom721 compare 12345678000 1 -> 1 -ddcom722 compare 1 12345678000 -> -1 -ddcom723 compare 1234567800 1 -> 1 -ddcom724 compare 1 1234567800 -> -1 -ddcom725 compare 1234567890 1 -> 1 -ddcom726 compare 1 1234567890 -> -1 -ddcom727 compare 1234567891 1 -> 1 -ddcom728 compare 1 1234567891 -> -1 -ddcom729 compare 12345678901 1 -> 1 -ddcom730 compare 1 12345678901 -> -1 -ddcom731 compare 1234567896 1 -> 1 -ddcom732 compare 1 1234567896 -> -1 - --- residue cases at lower precision -ddcom740 compare 1 0.9999999 -> 1 -ddcom741 compare 1 0.999999 -> 1 -ddcom742 compare 1 0.99999 -> 1 -ddcom743 compare 1 1.0000 -> 0 -ddcom744 compare 1 1.00001 -> -1 -ddcom745 compare 1 1.000001 -> -1 -ddcom746 compare 1 1.0000001 -> -1 -ddcom750 compare 0.9999999 1 -> -1 -ddcom751 compare 0.999999 1 -> -1 -ddcom752 compare 0.99999 1 -> -1 -ddcom753 compare 1.0000 1 -> 0 -ddcom754 compare 1.00001 1 -> 1 -ddcom755 compare 1.000001 1 -> 1 -ddcom756 compare 1.0000001 1 -> 1 - --- Specials -ddcom780 compare Inf -Inf -> 1 -ddcom781 compare Inf -1000 -> 1 -ddcom782 compare Inf -1 -> 1 -ddcom783 compare Inf -0 -> 1 -ddcom784 compare Inf 0 -> 1 -ddcom785 compare Inf 1 -> 1 -ddcom786 compare Inf 1000 -> 1 -ddcom787 compare Inf Inf -> 0 -ddcom788 compare -1000 Inf -> -1 -ddcom789 compare -Inf Inf -> -1 -ddcom790 compare -1 Inf -> -1 -ddcom791 compare -0 Inf -> -1 -ddcom792 compare 0 Inf -> -1 -ddcom793 compare 1 Inf -> -1 -ddcom794 compare 1000 Inf -> -1 -ddcom795 compare Inf Inf -> 0 - -ddcom800 compare -Inf -Inf -> 0 -ddcom801 compare -Inf -1000 -> -1 -ddcom802 compare -Inf -1 -> -1 -ddcom803 compare -Inf -0 -> -1 -ddcom804 compare -Inf 0 -> -1 -ddcom805 compare -Inf 1 -> -1 -ddcom806 compare -Inf 1000 -> -1 -ddcom807 compare -Inf Inf -> -1 -ddcom808 compare -Inf -Inf -> 0 -ddcom809 compare -1000 -Inf -> 1 -ddcom810 compare -1 -Inf -> 1 -ddcom811 compare -0 -Inf -> 1 -ddcom812 compare 0 -Inf -> 1 -ddcom813 compare 1 -Inf -> 1 -ddcom814 compare 1000 -Inf -> 1 -ddcom815 compare Inf -Inf -> 1 - -ddcom821 compare NaN -Inf -> NaN -ddcom822 compare NaN -1000 -> NaN -ddcom823 compare NaN -1 -> NaN -ddcom824 compare NaN -0 -> NaN -ddcom825 compare NaN 0 -> NaN -ddcom826 compare NaN 1 -> NaN -ddcom827 compare NaN 1000 -> NaN -ddcom828 compare NaN Inf -> NaN -ddcom829 compare NaN NaN -> NaN -ddcom830 compare -Inf NaN -> NaN -ddcom831 compare -1000 NaN -> NaN -ddcom832 compare -1 NaN -> NaN -ddcom833 compare -0 NaN -> NaN -ddcom834 compare 0 NaN -> NaN -ddcom835 compare 1 NaN -> NaN -ddcom836 compare 1000 NaN -> NaN -ddcom837 compare Inf NaN -> NaN -ddcom838 compare -NaN -NaN -> -NaN -ddcom839 compare +NaN -NaN -> NaN -ddcom840 compare -NaN +NaN -> -NaN - -ddcom841 compare sNaN -Inf -> NaN Invalid_operation -ddcom842 compare sNaN -1000 -> NaN Invalid_operation -ddcom843 compare sNaN -1 -> NaN Invalid_operation -ddcom844 compare sNaN -0 -> NaN Invalid_operation -ddcom845 compare sNaN 0 -> NaN Invalid_operation -ddcom846 compare sNaN 1 -> NaN Invalid_operation -ddcom847 compare sNaN 1000 -> NaN Invalid_operation -ddcom848 compare sNaN NaN -> NaN Invalid_operation -ddcom849 compare sNaN sNaN -> NaN Invalid_operation -ddcom850 compare NaN sNaN -> NaN Invalid_operation -ddcom851 compare -Inf sNaN -> NaN Invalid_operation -ddcom852 compare -1000 sNaN -> NaN Invalid_operation -ddcom853 compare -1 sNaN -> NaN Invalid_operation -ddcom854 compare -0 sNaN -> NaN Invalid_operation -ddcom855 compare 0 sNaN -> NaN Invalid_operation -ddcom856 compare 1 sNaN -> NaN Invalid_operation -ddcom857 compare 1000 sNaN -> NaN Invalid_operation -ddcom858 compare Inf sNaN -> NaN Invalid_operation -ddcom859 compare NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddcom860 compare NaN9 -Inf -> NaN9 -ddcom861 compare NaN8 999 -> NaN8 -ddcom862 compare NaN77 Inf -> NaN77 -ddcom863 compare -NaN67 NaN5 -> -NaN67 -ddcom864 compare -Inf -NaN4 -> -NaN4 -ddcom865 compare -999 -NaN33 -> -NaN33 -ddcom866 compare Inf NaN2 -> NaN2 -ddcom867 compare -NaN41 -NaN42 -> -NaN41 -ddcom868 compare +NaN41 -NaN42 -> NaN41 -ddcom869 compare -NaN41 +NaN42 -> -NaN41 -ddcom870 compare +NaN41 +NaN42 -> NaN41 - -ddcom871 compare -sNaN99 -Inf -> -NaN99 Invalid_operation -ddcom872 compare sNaN98 -11 -> NaN98 Invalid_operation -ddcom873 compare sNaN97 NaN -> NaN97 Invalid_operation -ddcom874 compare sNaN16 sNaN94 -> NaN16 Invalid_operation -ddcom875 compare NaN85 sNaN83 -> NaN83 Invalid_operation -ddcom876 compare -Inf sNaN92 -> NaN92 Invalid_operation -ddcom877 compare 088 sNaN81 -> NaN81 Invalid_operation -ddcom878 compare Inf sNaN90 -> NaN90 Invalid_operation -ddcom879 compare NaN -sNaN89 -> -NaN89 Invalid_operation - --- wide range -ddcom880 compare +1.23456789012345E-0 9E+384 -> -1 -ddcom881 compare 9E+384 +1.23456789012345E-0 -> 1 -ddcom882 compare +0.100 9E-383 -> 1 -ddcom883 compare 9E-383 +0.100 -> -1 -ddcom885 compare -1.23456789012345E-0 9E+384 -> -1 -ddcom886 compare 9E+384 -1.23456789012345E-0 -> 1 -ddcom887 compare -0.100 9E-383 -> -1 -ddcom888 compare 9E-383 -0.100 -> 1 - --- spread zeros -ddcom900 compare 0E-383 0 -> 0 -ddcom901 compare 0E-383 -0 -> 0 -ddcom902 compare -0E-383 0 -> 0 -ddcom903 compare -0E-383 -0 -> 0 -ddcom904 compare 0E-383 0E+384 -> 0 -ddcom905 compare 0E-383 -0E+384 -> 0 -ddcom906 compare -0E-383 0E+384 -> 0 -ddcom907 compare -0E-383 -0E+384 -> 0 -ddcom908 compare 0 0E+384 -> 0 -ddcom909 compare 0 -0E+384 -> 0 -ddcom910 compare -0 0E+384 -> 0 -ddcom911 compare -0 -0E+384 -> 0 -ddcom930 compare 0E+384 0 -> 0 -ddcom931 compare 0E+384 -0 -> 0 -ddcom932 compare -0E+384 0 -> 0 -ddcom933 compare -0E+384 -0 -> 0 -ddcom934 compare 0E+384 0E-383 -> 0 -ddcom935 compare 0E+384 -0E-383 -> 0 -ddcom936 compare -0E+384 0E-383 -> 0 -ddcom937 compare -0E+384 -0E-383 -> 0 -ddcom938 compare 0 0E-383 -> 0 -ddcom939 compare 0 -0E-383 -> 0 -ddcom940 compare -0 0E-383 -> 0 -ddcom941 compare -0 -0E-383 -> 0 - --- signs -ddcom961 compare 1e+77 1e+11 -> 1 -ddcom962 compare 1e+77 -1e+11 -> 1 -ddcom963 compare -1e+77 1e+11 -> -1 -ddcom964 compare -1e+77 -1e+11 -> -1 -ddcom965 compare 1e-77 1e-11 -> -1 -ddcom966 compare 1e-77 -1e-11 -> 1 -ddcom967 compare -1e-77 1e-11 -> -1 -ddcom968 compare -1e-77 -1e-11 -> 1 - --- full alignment range, both ways -ddcomp1001 compare 1 1.000000000000000 -> 0 -ddcomp1002 compare 1 1.00000000000000 -> 0 -ddcomp1003 compare 1 1.0000000000000 -> 0 -ddcomp1004 compare 1 1.000000000000 -> 0 -ddcomp1005 compare 1 1.00000000000 -> 0 -ddcomp1006 compare 1 1.0000000000 -> 0 -ddcomp1007 compare 1 1.000000000 -> 0 -ddcomp1008 compare 1 1.00000000 -> 0 -ddcomp1009 compare 1 1.0000000 -> 0 -ddcomp1010 compare 1 1.000000 -> 0 -ddcomp1011 compare 1 1.00000 -> 0 -ddcomp1012 compare 1 1.0000 -> 0 -ddcomp1013 compare 1 1.000 -> 0 -ddcomp1014 compare 1 1.00 -> 0 -ddcomp1015 compare 1 1.0 -> 0 -ddcomp1021 compare 1.000000000000000 1 -> 0 -ddcomp1022 compare 1.00000000000000 1 -> 0 -ddcomp1023 compare 1.0000000000000 1 -> 0 -ddcomp1024 compare 1.000000000000 1 -> 0 -ddcomp1025 compare 1.00000000000 1 -> 0 -ddcomp1026 compare 1.0000000000 1 -> 0 -ddcomp1027 compare 1.000000000 1 -> 0 -ddcomp1028 compare 1.00000000 1 -> 0 -ddcomp1029 compare 1.0000000 1 -> 0 -ddcomp1030 compare 1.000000 1 -> 0 -ddcomp1031 compare 1.00000 1 -> 0 -ddcomp1032 compare 1.0000 1 -> 0 -ddcomp1033 compare 1.000 1 -> 0 -ddcomp1034 compare 1.00 1 -> 0 -ddcomp1035 compare 1.0 1 -> 0 - --- check MSD always detected non-zero -ddcomp1040 compare 0 0.000000000000000 -> 0 -ddcomp1041 compare 0 1.000000000000000 -> -1 -ddcomp1042 compare 0 2.000000000000000 -> -1 -ddcomp1043 compare 0 3.000000000000000 -> -1 -ddcomp1044 compare 0 4.000000000000000 -> -1 -ddcomp1045 compare 0 5.000000000000000 -> -1 -ddcomp1046 compare 0 6.000000000000000 -> -1 -ddcomp1047 compare 0 7.000000000000000 -> -1 -ddcomp1048 compare 0 8.000000000000000 -> -1 -ddcomp1049 compare 0 9.000000000000000 -> -1 -ddcomp1050 compare 0.000000000000000 0 -> 0 -ddcomp1051 compare 1.000000000000000 0 -> 1 -ddcomp1052 compare 2.000000000000000 0 -> 1 -ddcomp1053 compare 3.000000000000000 0 -> 1 -ddcomp1054 compare 4.000000000000000 0 -> 1 -ddcomp1055 compare 5.000000000000000 0 -> 1 -ddcomp1056 compare 6.000000000000000 0 -> 1 -ddcomp1057 compare 7.000000000000000 0 -> 1 -ddcomp1058 compare 8.000000000000000 0 -> 1 -ddcomp1059 compare 9.000000000000000 0 -> 1 - --- Null tests -ddcom9990 compare 10 # -> NaN Invalid_operation -ddcom9991 compare # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddCompare.decTest -- decDouble comparison that allows quiet NaNs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddcom001 compare -2 -2 -> 0 +ddcom002 compare -2 -1 -> -1 +ddcom003 compare -2 0 -> -1 +ddcom004 compare -2 1 -> -1 +ddcom005 compare -2 2 -> -1 +ddcom006 compare -1 -2 -> 1 +ddcom007 compare -1 -1 -> 0 +ddcom008 compare -1 0 -> -1 +ddcom009 compare -1 1 -> -1 +ddcom010 compare -1 2 -> -1 +ddcom011 compare 0 -2 -> 1 +ddcom012 compare 0 -1 -> 1 +ddcom013 compare 0 0 -> 0 +ddcom014 compare 0 1 -> -1 +ddcom015 compare 0 2 -> -1 +ddcom016 compare 1 -2 -> 1 +ddcom017 compare 1 -1 -> 1 +ddcom018 compare 1 0 -> 1 +ddcom019 compare 1 1 -> 0 +ddcom020 compare 1 2 -> -1 +ddcom021 compare 2 -2 -> 1 +ddcom022 compare 2 -1 -> 1 +ddcom023 compare 2 0 -> 1 +ddcom025 compare 2 1 -> 1 +ddcom026 compare 2 2 -> 0 + +ddcom031 compare -20 -20 -> 0 +ddcom032 compare -20 -10 -> -1 +ddcom033 compare -20 00 -> -1 +ddcom034 compare -20 10 -> -1 +ddcom035 compare -20 20 -> -1 +ddcom036 compare -10 -20 -> 1 +ddcom037 compare -10 -10 -> 0 +ddcom038 compare -10 00 -> -1 +ddcom039 compare -10 10 -> -1 +ddcom040 compare -10 20 -> -1 +ddcom041 compare 00 -20 -> 1 +ddcom042 compare 00 -10 -> 1 +ddcom043 compare 00 00 -> 0 +ddcom044 compare 00 10 -> -1 +ddcom045 compare 00 20 -> -1 +ddcom046 compare 10 -20 -> 1 +ddcom047 compare 10 -10 -> 1 +ddcom048 compare 10 00 -> 1 +ddcom049 compare 10 10 -> 0 +ddcom050 compare 10 20 -> -1 +ddcom051 compare 20 -20 -> 1 +ddcom052 compare 20 -10 -> 1 +ddcom053 compare 20 00 -> 1 +ddcom055 compare 20 10 -> 1 +ddcom056 compare 20 20 -> 0 + +ddcom061 compare -2.0 -2.0 -> 0 +ddcom062 compare -2.0 -1.0 -> -1 +ddcom063 compare -2.0 0.0 -> -1 +ddcom064 compare -2.0 1.0 -> -1 +ddcom065 compare -2.0 2.0 -> -1 +ddcom066 compare -1.0 -2.0 -> 1 +ddcom067 compare -1.0 -1.0 -> 0 +ddcom068 compare -1.0 0.0 -> -1 +ddcom069 compare -1.0 1.0 -> -1 +ddcom070 compare -1.0 2.0 -> -1 +ddcom071 compare 0.0 -2.0 -> 1 +ddcom072 compare 0.0 -1.0 -> 1 +ddcom073 compare 0.0 0.0 -> 0 +ddcom074 compare 0.0 1.0 -> -1 +ddcom075 compare 0.0 2.0 -> -1 +ddcom076 compare 1.0 -2.0 -> 1 +ddcom077 compare 1.0 -1.0 -> 1 +ddcom078 compare 1.0 0.0 -> 1 +ddcom079 compare 1.0 1.0 -> 0 +ddcom080 compare 1.0 2.0 -> -1 +ddcom081 compare 2.0 -2.0 -> 1 +ddcom082 compare 2.0 -1.0 -> 1 +ddcom083 compare 2.0 0.0 -> 1 +ddcom085 compare 2.0 1.0 -> 1 +ddcom086 compare 2.0 2.0 -> 0 +ddcom087 compare 1.0 0.1 -> 1 +ddcom088 compare 0.1 1.0 -> -1 + +-- now some cases which might overflow if subtract were used +ddcom095 compare 9.999999999999999E+384 9.999999999999999E+384 -> 0 +ddcom096 compare -9.999999999999999E+384 9.999999999999999E+384 -> -1 +ddcom097 compare 9.999999999999999E+384 -9.999999999999999E+384 -> 1 +ddcom098 compare -9.999999999999999E+384 -9.999999999999999E+384 -> 0 + +-- some differing length/exponent cases +ddcom100 compare 7.0 7.0 -> 0 +ddcom101 compare 7.0 7 -> 0 +ddcom102 compare 7 7.0 -> 0 +ddcom103 compare 7E+0 7.0 -> 0 +ddcom104 compare 70E-1 7.0 -> 0 +ddcom105 compare 0.7E+1 7 -> 0 +ddcom106 compare 70E-1 7 -> 0 +ddcom107 compare 7.0 7E+0 -> 0 +ddcom108 compare 7.0 70E-1 -> 0 +ddcom109 compare 7 0.7E+1 -> 0 +ddcom110 compare 7 70E-1 -> 0 + +ddcom120 compare 8.0 7.0 -> 1 +ddcom121 compare 8.0 7 -> 1 +ddcom122 compare 8 7.0 -> 1 +ddcom123 compare 8E+0 7.0 -> 1 +ddcom124 compare 80E-1 7.0 -> 1 +ddcom125 compare 0.8E+1 7 -> 1 +ddcom126 compare 80E-1 7 -> 1 +ddcom127 compare 8.0 7E+0 -> 1 +ddcom128 compare 8.0 70E-1 -> 1 +ddcom129 compare 8 0.7E+1 -> 1 +ddcom130 compare 8 70E-1 -> 1 + +ddcom140 compare 8.0 9.0 -> -1 +ddcom141 compare 8.0 9 -> -1 +ddcom142 compare 8 9.0 -> -1 +ddcom143 compare 8E+0 9.0 -> -1 +ddcom144 compare 80E-1 9.0 -> -1 +ddcom145 compare 0.8E+1 9 -> -1 +ddcom146 compare 80E-1 9 -> -1 +ddcom147 compare 8.0 9E+0 -> -1 +ddcom148 compare 8.0 90E-1 -> -1 +ddcom149 compare 8 0.9E+1 -> -1 +ddcom150 compare 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ddcom200 compare -7.0 7.0 -> -1 +ddcom201 compare -7.0 7 -> -1 +ddcom202 compare -7 7.0 -> -1 +ddcom203 compare -7E+0 7.0 -> -1 +ddcom204 compare -70E-1 7.0 -> -1 +ddcom205 compare -0.7E+1 7 -> -1 +ddcom206 compare -70E-1 7 -> -1 +ddcom207 compare -7.0 7E+0 -> -1 +ddcom208 compare -7.0 70E-1 -> -1 +ddcom209 compare -7 0.7E+1 -> -1 +ddcom210 compare -7 70E-1 -> -1 + +ddcom220 compare -8.0 7.0 -> -1 +ddcom221 compare -8.0 7 -> -1 +ddcom222 compare -8 7.0 -> -1 +ddcom223 compare -8E+0 7.0 -> -1 +ddcom224 compare -80E-1 7.0 -> -1 +ddcom225 compare -0.8E+1 7 -> -1 +ddcom226 compare -80E-1 7 -> -1 +ddcom227 compare -8.0 7E+0 -> -1 +ddcom228 compare -8.0 70E-1 -> -1 +ddcom229 compare -8 0.7E+1 -> -1 +ddcom230 compare -8 70E-1 -> -1 + +ddcom240 compare -8.0 9.0 -> -1 +ddcom241 compare -8.0 9 -> -1 +ddcom242 compare -8 9.0 -> -1 +ddcom243 compare -8E+0 9.0 -> -1 +ddcom244 compare -80E-1 9.0 -> -1 +ddcom245 compare -0.8E+1 9 -> -1 +ddcom246 compare -80E-1 9 -> -1 +ddcom247 compare -8.0 9E+0 -> -1 +ddcom248 compare -8.0 90E-1 -> -1 +ddcom249 compare -8 0.9E+1 -> -1 +ddcom250 compare -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ddcom300 compare 7.0 -7.0 -> 1 +ddcom301 compare 7.0 -7 -> 1 +ddcom302 compare 7 -7.0 -> 1 +ddcom303 compare 7E+0 -7.0 -> 1 +ddcom304 compare 70E-1 -7.0 -> 1 +ddcom305 compare .7E+1 -7 -> 1 +ddcom306 compare 70E-1 -7 -> 1 +ddcom307 compare 7.0 -7E+0 -> 1 +ddcom308 compare 7.0 -70E-1 -> 1 +ddcom309 compare 7 -.7E+1 -> 1 +ddcom310 compare 7 -70E-1 -> 1 + +ddcom320 compare 8.0 -7.0 -> 1 +ddcom321 compare 8.0 -7 -> 1 +ddcom322 compare 8 -7.0 -> 1 +ddcom323 compare 8E+0 -7.0 -> 1 +ddcom324 compare 80E-1 -7.0 -> 1 +ddcom325 compare .8E+1 -7 -> 1 +ddcom326 compare 80E-1 -7 -> 1 +ddcom327 compare 8.0 -7E+0 -> 1 +ddcom328 compare 8.0 -70E-1 -> 1 +ddcom329 compare 8 -.7E+1 -> 1 +ddcom330 compare 8 -70E-1 -> 1 + +ddcom340 compare 8.0 -9.0 -> 1 +ddcom341 compare 8.0 -9 -> 1 +ddcom342 compare 8 -9.0 -> 1 +ddcom343 compare 8E+0 -9.0 -> 1 +ddcom344 compare 80E-1 -9.0 -> 1 +ddcom345 compare .8E+1 -9 -> 1 +ddcom346 compare 80E-1 -9 -> 1 +ddcom347 compare 8.0 -9E+0 -> 1 +ddcom348 compare 8.0 -90E-1 -> 1 +ddcom349 compare 8 -.9E+1 -> 1 +ddcom350 compare 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +ddcom400 compare -7.0 -7.0 -> 0 +ddcom401 compare -7.0 -7 -> 0 +ddcom402 compare -7 -7.0 -> 0 +ddcom403 compare -7E+0 -7.0 -> 0 +ddcom404 compare -70E-1 -7.0 -> 0 +ddcom405 compare -.7E+1 -7 -> 0 +ddcom406 compare -70E-1 -7 -> 0 +ddcom407 compare -7.0 -7E+0 -> 0 +ddcom408 compare -7.0 -70E-1 -> 0 +ddcom409 compare -7 -.7E+1 -> 0 +ddcom410 compare -7 -70E-1 -> 0 + +ddcom420 compare -8.0 -7.0 -> -1 +ddcom421 compare -8.0 -7 -> -1 +ddcom422 compare -8 -7.0 -> -1 +ddcom423 compare -8E+0 -7.0 -> -1 +ddcom424 compare -80E-1 -7.0 -> -1 +ddcom425 compare -.8E+1 -7 -> -1 +ddcom426 compare -80E-1 -7 -> -1 +ddcom427 compare -8.0 -7E+0 -> -1 +ddcom428 compare -8.0 -70E-1 -> -1 +ddcom429 compare -8 -.7E+1 -> -1 +ddcom430 compare -8 -70E-1 -> -1 + +ddcom440 compare -8.0 -9.0 -> 1 +ddcom441 compare -8.0 -9 -> 1 +ddcom442 compare -8 -9.0 -> 1 +ddcom443 compare -8E+0 -9.0 -> 1 +ddcom444 compare -80E-1 -9.0 -> 1 +ddcom445 compare -.8E+1 -9 -> 1 +ddcom446 compare -80E-1 -9 -> 1 +ddcom447 compare -8.0 -9E+0 -> 1 +ddcom448 compare -8.0 -90E-1 -> 1 +ddcom449 compare -8 -.9E+1 -> 1 +ddcom450 compare -8 -90E-1 -> 1 + +-- misalignment traps for little-endian +ddcom451 compare 1.0 0.1 -> 1 +ddcom452 compare 0.1 1.0 -> -1 +ddcom453 compare 10.0 0.1 -> 1 +ddcom454 compare 0.1 10.0 -> -1 +ddcom455 compare 100 1.0 -> 1 +ddcom456 compare 1.0 100 -> -1 +ddcom457 compare 1000 10.0 -> 1 +ddcom458 compare 10.0 1000 -> -1 +ddcom459 compare 10000 100.0 -> 1 +ddcom460 compare 100.0 10000 -> -1 +ddcom461 compare 100000 1000.0 -> 1 +ddcom462 compare 1000.0 100000 -> -1 +ddcom463 compare 1000000 10000.0 -> 1 +ddcom464 compare 10000.0 1000000 -> -1 + +-- testcases that subtract to lots of zeros at boundaries [pgr] +ddcom473 compare 123.4560000000000E-89 123.456E-89 -> 0 +ddcom474 compare 123.456000000000E+89 123.456E+89 -> 0 +ddcom475 compare 123.45600000000E-89 123.456E-89 -> 0 +ddcom476 compare 123.4560000000E+89 123.456E+89 -> 0 +ddcom477 compare 123.456000000E-89 123.456E-89 -> 0 +ddcom478 compare 123.45600000E+89 123.456E+89 -> 0 +ddcom479 compare 123.4560000E-89 123.456E-89 -> 0 +ddcom480 compare 123.456000E+89 123.456E+89 -> 0 +ddcom481 compare 123.45600E-89 123.456E-89 -> 0 +ddcom482 compare 123.4560E+89 123.456E+89 -> 0 +ddcom483 compare 123.456E-89 123.456E-89 -> 0 +ddcom487 compare 123.456E+89 123.4560000000000E+89 -> 0 +ddcom488 compare 123.456E-89 123.456000000000E-89 -> 0 +ddcom489 compare 123.456E+89 123.45600000000E+89 -> 0 +ddcom490 compare 123.456E-89 123.4560000000E-89 -> 0 +ddcom491 compare 123.456E+89 123.456000000E+89 -> 0 +ddcom492 compare 123.456E-89 123.45600000E-89 -> 0 +ddcom493 compare 123.456E+89 123.4560000E+89 -> 0 +ddcom494 compare 123.456E-89 123.456000E-89 -> 0 +ddcom495 compare 123.456E+89 123.45600E+89 -> 0 +ddcom496 compare 123.456E-89 123.4560E-89 -> 0 +ddcom497 compare 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +ddcom500 compare 1 1E-15 -> 1 +ddcom501 compare 1 1E-14 -> 1 +ddcom502 compare 1 1E-13 -> 1 +ddcom503 compare 1 1E-12 -> 1 +ddcom504 compare 1 1E-11 -> 1 +ddcom505 compare 1 1E-10 -> 1 +ddcom506 compare 1 1E-9 -> 1 +ddcom507 compare 1 1E-8 -> 1 +ddcom508 compare 1 1E-7 -> 1 +ddcom509 compare 1 1E-6 -> 1 +ddcom510 compare 1 1E-5 -> 1 +ddcom511 compare 1 1E-4 -> 1 +ddcom512 compare 1 1E-3 -> 1 +ddcom513 compare 1 1E-2 -> 1 +ddcom514 compare 1 1E-1 -> 1 +ddcom515 compare 1 1E-0 -> 0 +ddcom516 compare 1 1E+1 -> -1 +ddcom517 compare 1 1E+2 -> -1 +ddcom518 compare 1 1E+3 -> -1 +ddcom519 compare 1 1E+4 -> -1 +ddcom521 compare 1 1E+5 -> -1 +ddcom522 compare 1 1E+6 -> -1 +ddcom523 compare 1 1E+7 -> -1 +ddcom524 compare 1 1E+8 -> -1 +ddcom525 compare 1 1E+9 -> -1 +ddcom526 compare 1 1E+10 -> -1 +ddcom527 compare 1 1E+11 -> -1 +ddcom528 compare 1 1E+12 -> -1 +ddcom529 compare 1 1E+13 -> -1 +ddcom530 compare 1 1E+14 -> -1 +ddcom531 compare 1 1E+15 -> -1 +-- LR swap +ddcom540 compare 1E-15 1 -> -1 +ddcom541 compare 1E-14 1 -> -1 +ddcom542 compare 1E-13 1 -> -1 +ddcom543 compare 1E-12 1 -> -1 +ddcom544 compare 1E-11 1 -> -1 +ddcom545 compare 1E-10 1 -> -1 +ddcom546 compare 1E-9 1 -> -1 +ddcom547 compare 1E-8 1 -> -1 +ddcom548 compare 1E-7 1 -> -1 +ddcom549 compare 1E-6 1 -> -1 +ddcom550 compare 1E-5 1 -> -1 +ddcom551 compare 1E-4 1 -> -1 +ddcom552 compare 1E-3 1 -> -1 +ddcom553 compare 1E-2 1 -> -1 +ddcom554 compare 1E-1 1 -> -1 +ddcom555 compare 1E-0 1 -> 0 +ddcom556 compare 1E+1 1 -> 1 +ddcom557 compare 1E+2 1 -> 1 +ddcom558 compare 1E+3 1 -> 1 +ddcom559 compare 1E+4 1 -> 1 +ddcom561 compare 1E+5 1 -> 1 +ddcom562 compare 1E+6 1 -> 1 +ddcom563 compare 1E+7 1 -> 1 +ddcom564 compare 1E+8 1 -> 1 +ddcom565 compare 1E+9 1 -> 1 +ddcom566 compare 1E+10 1 -> 1 +ddcom567 compare 1E+11 1 -> 1 +ddcom568 compare 1E+12 1 -> 1 +ddcom569 compare 1E+13 1 -> 1 +ddcom570 compare 1E+14 1 -> 1 +ddcom571 compare 1E+15 1 -> 1 +-- similar with a useful coefficient, one side only +ddcom580 compare 0.000000987654321 1E-15 -> 1 +ddcom581 compare 0.000000987654321 1E-14 -> 1 +ddcom582 compare 0.000000987654321 1E-13 -> 1 +ddcom583 compare 0.000000987654321 1E-12 -> 1 +ddcom584 compare 0.000000987654321 1E-11 -> 1 +ddcom585 compare 0.000000987654321 1E-10 -> 1 +ddcom586 compare 0.000000987654321 1E-9 -> 1 +ddcom587 compare 0.000000987654321 1E-8 -> 1 +ddcom588 compare 0.000000987654321 1E-7 -> 1 +ddcom589 compare 0.000000987654321 1E-6 -> -1 +ddcom590 compare 0.000000987654321 1E-5 -> -1 +ddcom591 compare 0.000000987654321 1E-4 -> -1 +ddcom592 compare 0.000000987654321 1E-3 -> -1 +ddcom593 compare 0.000000987654321 1E-2 -> -1 +ddcom594 compare 0.000000987654321 1E-1 -> -1 +ddcom595 compare 0.000000987654321 1E-0 -> -1 +ddcom596 compare 0.000000987654321 1E+1 -> -1 +ddcom597 compare 0.000000987654321 1E+2 -> -1 +ddcom598 compare 0.000000987654321 1E+3 -> -1 +ddcom599 compare 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +ddcom600 compare 12 12.2345 -> -1 +ddcom601 compare 12.0 12.2345 -> -1 +ddcom602 compare 12.00 12.2345 -> -1 +ddcom603 compare 12.000 12.2345 -> -1 +ddcom604 compare 12.0000 12.2345 -> -1 +ddcom605 compare 12.00000 12.2345 -> -1 +ddcom606 compare 12.000000 12.2345 -> -1 +ddcom607 compare 12.0000000 12.2345 -> -1 +ddcom608 compare 12.00000000 12.2345 -> -1 +ddcom609 compare 12.000000000 12.2345 -> -1 +ddcom610 compare 12.1234 12 -> 1 +ddcom611 compare 12.1234 12.0 -> 1 +ddcom612 compare 12.1234 12.00 -> 1 +ddcom613 compare 12.1234 12.000 -> 1 +ddcom614 compare 12.1234 12.0000 -> 1 +ddcom615 compare 12.1234 12.00000 -> 1 +ddcom616 compare 12.1234 12.000000 -> 1 +ddcom617 compare 12.1234 12.0000000 -> 1 +ddcom618 compare 12.1234 12.00000000 -> 1 +ddcom619 compare 12.1234 12.000000000 -> 1 +ddcom620 compare -12 -12.2345 -> 1 +ddcom621 compare -12.0 -12.2345 -> 1 +ddcom622 compare -12.00 -12.2345 -> 1 +ddcom623 compare -12.000 -12.2345 -> 1 +ddcom624 compare -12.0000 -12.2345 -> 1 +ddcom625 compare -12.00000 -12.2345 -> 1 +ddcom626 compare -12.000000 -12.2345 -> 1 +ddcom627 compare -12.0000000 -12.2345 -> 1 +ddcom628 compare -12.00000000 -12.2345 -> 1 +ddcom629 compare -12.000000000 -12.2345 -> 1 +ddcom630 compare -12.1234 -12 -> -1 +ddcom631 compare -12.1234 -12.0 -> -1 +ddcom632 compare -12.1234 -12.00 -> -1 +ddcom633 compare -12.1234 -12.000 -> -1 +ddcom634 compare -12.1234 -12.0000 -> -1 +ddcom635 compare -12.1234 -12.00000 -> -1 +ddcom636 compare -12.1234 -12.000000 -> -1 +ddcom637 compare -12.1234 -12.0000000 -> -1 +ddcom638 compare -12.1234 -12.00000000 -> -1 +ddcom639 compare -12.1234 -12.000000000 -> -1 + +-- extended zeros +ddcom640 compare 0 0 -> 0 +ddcom641 compare 0 -0 -> 0 +ddcom642 compare 0 -0.0 -> 0 +ddcom643 compare 0 0.0 -> 0 +ddcom644 compare -0 0 -> 0 +ddcom645 compare -0 -0 -> 0 +ddcom646 compare -0 -0.0 -> 0 +ddcom647 compare -0 0.0 -> 0 +ddcom648 compare 0.0 0 -> 0 +ddcom649 compare 0.0 -0 -> 0 +ddcom650 compare 0.0 -0.0 -> 0 +ddcom651 compare 0.0 0.0 -> 0 +ddcom652 compare -0.0 0 -> 0 +ddcom653 compare -0.0 -0 -> 0 +ddcom654 compare -0.0 -0.0 -> 0 +ddcom655 compare -0.0 0.0 -> 0 + +ddcom656 compare -0E1 0.0 -> 0 +ddcom657 compare -0E2 0.0 -> 0 +ddcom658 compare 0E1 0.0 -> 0 +ddcom659 compare 0E2 0.0 -> 0 +ddcom660 compare -0E1 0 -> 0 +ddcom661 compare -0E2 0 -> 0 +ddcom662 compare 0E1 0 -> 0 +ddcom663 compare 0E2 0 -> 0 +ddcom664 compare -0E1 -0E1 -> 0 +ddcom665 compare -0E2 -0E1 -> 0 +ddcom666 compare 0E1 -0E1 -> 0 +ddcom667 compare 0E2 -0E1 -> 0 +ddcom668 compare -0E1 -0E2 -> 0 +ddcom669 compare -0E2 -0E2 -> 0 +ddcom670 compare 0E1 -0E2 -> 0 +ddcom671 compare 0E2 -0E2 -> 0 +ddcom672 compare -0E1 0E1 -> 0 +ddcom673 compare -0E2 0E1 -> 0 +ddcom674 compare 0E1 0E1 -> 0 +ddcom675 compare 0E2 0E1 -> 0 +ddcom676 compare -0E1 0E2 -> 0 +ddcom677 compare -0E2 0E2 -> 0 +ddcom678 compare 0E1 0E2 -> 0 +ddcom679 compare 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +ddcom680 compare 12 12 -> 0 +ddcom681 compare 12 12.0 -> 0 +ddcom682 compare 12 12.00 -> 0 +ddcom683 compare 12 12.000 -> 0 +ddcom684 compare 12 12.0000 -> 0 +ddcom685 compare 12 12.00000 -> 0 +ddcom686 compare 12 12.000000 -> 0 +ddcom687 compare 12 12.0000000 -> 0 +ddcom688 compare 12 12.00000000 -> 0 +ddcom689 compare 12 12.000000000 -> 0 +ddcom690 compare 12 12 -> 0 +ddcom691 compare 12.0 12 -> 0 +ddcom692 compare 12.00 12 -> 0 +ddcom693 compare 12.000 12 -> 0 +ddcom694 compare 12.0000 12 -> 0 +ddcom695 compare 12.00000 12 -> 0 +ddcom696 compare 12.000000 12 -> 0 +ddcom697 compare 12.0000000 12 -> 0 +ddcom698 compare 12.00000000 12 -> 0 +ddcom699 compare 12.000000000 12 -> 0 + +-- first, second, & last digit +ddcom700 compare 1234567890123456 1234567890123455 -> 1 +ddcom701 compare 1234567890123456 1234567890123456 -> 0 +ddcom702 compare 1234567890123456 1234567890123457 -> -1 +ddcom703 compare 1234567890123456 0234567890123456 -> 1 +ddcom704 compare 1234567890123456 1234567890123456 -> 0 +ddcom705 compare 1234567890123456 2234567890123456 -> -1 +ddcom706 compare 1134567890123456 1034567890123456 -> 1 +ddcom707 compare 1134567890123456 1134567890123456 -> 0 +ddcom708 compare 1134567890123456 1234567890123456 -> -1 + +-- miscellaneous +ddcom721 compare 12345678000 1 -> 1 +ddcom722 compare 1 12345678000 -> -1 +ddcom723 compare 1234567800 1 -> 1 +ddcom724 compare 1 1234567800 -> -1 +ddcom725 compare 1234567890 1 -> 1 +ddcom726 compare 1 1234567890 -> -1 +ddcom727 compare 1234567891 1 -> 1 +ddcom728 compare 1 1234567891 -> -1 +ddcom729 compare 12345678901 1 -> 1 +ddcom730 compare 1 12345678901 -> -1 +ddcom731 compare 1234567896 1 -> 1 +ddcom732 compare 1 1234567896 -> -1 + +-- residue cases at lower precision +ddcom740 compare 1 0.9999999 -> 1 +ddcom741 compare 1 0.999999 -> 1 +ddcom742 compare 1 0.99999 -> 1 +ddcom743 compare 1 1.0000 -> 0 +ddcom744 compare 1 1.00001 -> -1 +ddcom745 compare 1 1.000001 -> -1 +ddcom746 compare 1 1.0000001 -> -1 +ddcom750 compare 0.9999999 1 -> -1 +ddcom751 compare 0.999999 1 -> -1 +ddcom752 compare 0.99999 1 -> -1 +ddcom753 compare 1.0000 1 -> 0 +ddcom754 compare 1.00001 1 -> 1 +ddcom755 compare 1.000001 1 -> 1 +ddcom756 compare 1.0000001 1 -> 1 + +-- Specials +ddcom780 compare Inf -Inf -> 1 +ddcom781 compare Inf -1000 -> 1 +ddcom782 compare Inf -1 -> 1 +ddcom783 compare Inf -0 -> 1 +ddcom784 compare Inf 0 -> 1 +ddcom785 compare Inf 1 -> 1 +ddcom786 compare Inf 1000 -> 1 +ddcom787 compare Inf Inf -> 0 +ddcom788 compare -1000 Inf -> -1 +ddcom789 compare -Inf Inf -> -1 +ddcom790 compare -1 Inf -> -1 +ddcom791 compare -0 Inf -> -1 +ddcom792 compare 0 Inf -> -1 +ddcom793 compare 1 Inf -> -1 +ddcom794 compare 1000 Inf -> -1 +ddcom795 compare Inf Inf -> 0 + +ddcom800 compare -Inf -Inf -> 0 +ddcom801 compare -Inf -1000 -> -1 +ddcom802 compare -Inf -1 -> -1 +ddcom803 compare -Inf -0 -> -1 +ddcom804 compare -Inf 0 -> -1 +ddcom805 compare -Inf 1 -> -1 +ddcom806 compare -Inf 1000 -> -1 +ddcom807 compare -Inf Inf -> -1 +ddcom808 compare -Inf -Inf -> 0 +ddcom809 compare -1000 -Inf -> 1 +ddcom810 compare -1 -Inf -> 1 +ddcom811 compare -0 -Inf -> 1 +ddcom812 compare 0 -Inf -> 1 +ddcom813 compare 1 -Inf -> 1 +ddcom814 compare 1000 -Inf -> 1 +ddcom815 compare Inf -Inf -> 1 + +ddcom821 compare NaN -Inf -> NaN +ddcom822 compare NaN -1000 -> NaN +ddcom823 compare NaN -1 -> NaN +ddcom824 compare NaN -0 -> NaN +ddcom825 compare NaN 0 -> NaN +ddcom826 compare NaN 1 -> NaN +ddcom827 compare NaN 1000 -> NaN +ddcom828 compare NaN Inf -> NaN +ddcom829 compare NaN NaN -> NaN +ddcom830 compare -Inf NaN -> NaN +ddcom831 compare -1000 NaN -> NaN +ddcom832 compare -1 NaN -> NaN +ddcom833 compare -0 NaN -> NaN +ddcom834 compare 0 NaN -> NaN +ddcom835 compare 1 NaN -> NaN +ddcom836 compare 1000 NaN -> NaN +ddcom837 compare Inf NaN -> NaN +ddcom838 compare -NaN -NaN -> -NaN +ddcom839 compare +NaN -NaN -> NaN +ddcom840 compare -NaN +NaN -> -NaN + +ddcom841 compare sNaN -Inf -> NaN Invalid_operation +ddcom842 compare sNaN -1000 -> NaN Invalid_operation +ddcom843 compare sNaN -1 -> NaN Invalid_operation +ddcom844 compare sNaN -0 -> NaN Invalid_operation +ddcom845 compare sNaN 0 -> NaN Invalid_operation +ddcom846 compare sNaN 1 -> NaN Invalid_operation +ddcom847 compare sNaN 1000 -> NaN Invalid_operation +ddcom848 compare sNaN NaN -> NaN Invalid_operation +ddcom849 compare sNaN sNaN -> NaN Invalid_operation +ddcom850 compare NaN sNaN -> NaN Invalid_operation +ddcom851 compare -Inf sNaN -> NaN Invalid_operation +ddcom852 compare -1000 sNaN -> NaN Invalid_operation +ddcom853 compare -1 sNaN -> NaN Invalid_operation +ddcom854 compare -0 sNaN -> NaN Invalid_operation +ddcom855 compare 0 sNaN -> NaN Invalid_operation +ddcom856 compare 1 sNaN -> NaN Invalid_operation +ddcom857 compare 1000 sNaN -> NaN Invalid_operation +ddcom858 compare Inf sNaN -> NaN Invalid_operation +ddcom859 compare NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddcom860 compare NaN9 -Inf -> NaN9 +ddcom861 compare NaN8 999 -> NaN8 +ddcom862 compare NaN77 Inf -> NaN77 +ddcom863 compare -NaN67 NaN5 -> -NaN67 +ddcom864 compare -Inf -NaN4 -> -NaN4 +ddcom865 compare -999 -NaN33 -> -NaN33 +ddcom866 compare Inf NaN2 -> NaN2 +ddcom867 compare -NaN41 -NaN42 -> -NaN41 +ddcom868 compare +NaN41 -NaN42 -> NaN41 +ddcom869 compare -NaN41 +NaN42 -> -NaN41 +ddcom870 compare +NaN41 +NaN42 -> NaN41 + +ddcom871 compare -sNaN99 -Inf -> -NaN99 Invalid_operation +ddcom872 compare sNaN98 -11 -> NaN98 Invalid_operation +ddcom873 compare sNaN97 NaN -> NaN97 Invalid_operation +ddcom874 compare sNaN16 sNaN94 -> NaN16 Invalid_operation +ddcom875 compare NaN85 sNaN83 -> NaN83 Invalid_operation +ddcom876 compare -Inf sNaN92 -> NaN92 Invalid_operation +ddcom877 compare 088 sNaN81 -> NaN81 Invalid_operation +ddcom878 compare Inf sNaN90 -> NaN90 Invalid_operation +ddcom879 compare NaN -sNaN89 -> -NaN89 Invalid_operation + +-- wide range +ddcom880 compare +1.23456789012345E-0 9E+384 -> -1 +ddcom881 compare 9E+384 +1.23456789012345E-0 -> 1 +ddcom882 compare +0.100 9E-383 -> 1 +ddcom883 compare 9E-383 +0.100 -> -1 +ddcom885 compare -1.23456789012345E-0 9E+384 -> -1 +ddcom886 compare 9E+384 -1.23456789012345E-0 -> 1 +ddcom887 compare -0.100 9E-383 -> -1 +ddcom888 compare 9E-383 -0.100 -> 1 + +-- spread zeros +ddcom900 compare 0E-383 0 -> 0 +ddcom901 compare 0E-383 -0 -> 0 +ddcom902 compare -0E-383 0 -> 0 +ddcom903 compare -0E-383 -0 -> 0 +ddcom904 compare 0E-383 0E+384 -> 0 +ddcom905 compare 0E-383 -0E+384 -> 0 +ddcom906 compare -0E-383 0E+384 -> 0 +ddcom907 compare -0E-383 -0E+384 -> 0 +ddcom908 compare 0 0E+384 -> 0 +ddcom909 compare 0 -0E+384 -> 0 +ddcom910 compare -0 0E+384 -> 0 +ddcom911 compare -0 -0E+384 -> 0 +ddcom930 compare 0E+384 0 -> 0 +ddcom931 compare 0E+384 -0 -> 0 +ddcom932 compare -0E+384 0 -> 0 +ddcom933 compare -0E+384 -0 -> 0 +ddcom934 compare 0E+384 0E-383 -> 0 +ddcom935 compare 0E+384 -0E-383 -> 0 +ddcom936 compare -0E+384 0E-383 -> 0 +ddcom937 compare -0E+384 -0E-383 -> 0 +ddcom938 compare 0 0E-383 -> 0 +ddcom939 compare 0 -0E-383 -> 0 +ddcom940 compare -0 0E-383 -> 0 +ddcom941 compare -0 -0E-383 -> 0 + +-- signs +ddcom961 compare 1e+77 1e+11 -> 1 +ddcom962 compare 1e+77 -1e+11 -> 1 +ddcom963 compare -1e+77 1e+11 -> -1 +ddcom964 compare -1e+77 -1e+11 -> -1 +ddcom965 compare 1e-77 1e-11 -> -1 +ddcom966 compare 1e-77 -1e-11 -> 1 +ddcom967 compare -1e-77 1e-11 -> -1 +ddcom968 compare -1e-77 -1e-11 -> 1 + +-- full alignment range, both ways +ddcomp1001 compare 1 1.000000000000000 -> 0 +ddcomp1002 compare 1 1.00000000000000 -> 0 +ddcomp1003 compare 1 1.0000000000000 -> 0 +ddcomp1004 compare 1 1.000000000000 -> 0 +ddcomp1005 compare 1 1.00000000000 -> 0 +ddcomp1006 compare 1 1.0000000000 -> 0 +ddcomp1007 compare 1 1.000000000 -> 0 +ddcomp1008 compare 1 1.00000000 -> 0 +ddcomp1009 compare 1 1.0000000 -> 0 +ddcomp1010 compare 1 1.000000 -> 0 +ddcomp1011 compare 1 1.00000 -> 0 +ddcomp1012 compare 1 1.0000 -> 0 +ddcomp1013 compare 1 1.000 -> 0 +ddcomp1014 compare 1 1.00 -> 0 +ddcomp1015 compare 1 1.0 -> 0 +ddcomp1021 compare 1.000000000000000 1 -> 0 +ddcomp1022 compare 1.00000000000000 1 -> 0 +ddcomp1023 compare 1.0000000000000 1 -> 0 +ddcomp1024 compare 1.000000000000 1 -> 0 +ddcomp1025 compare 1.00000000000 1 -> 0 +ddcomp1026 compare 1.0000000000 1 -> 0 +ddcomp1027 compare 1.000000000 1 -> 0 +ddcomp1028 compare 1.00000000 1 -> 0 +ddcomp1029 compare 1.0000000 1 -> 0 +ddcomp1030 compare 1.000000 1 -> 0 +ddcomp1031 compare 1.00000 1 -> 0 +ddcomp1032 compare 1.0000 1 -> 0 +ddcomp1033 compare 1.000 1 -> 0 +ddcomp1034 compare 1.00 1 -> 0 +ddcomp1035 compare 1.0 1 -> 0 + +-- check MSD always detected non-zero +ddcomp1040 compare 0 0.000000000000000 -> 0 +ddcomp1041 compare 0 1.000000000000000 -> -1 +ddcomp1042 compare 0 2.000000000000000 -> -1 +ddcomp1043 compare 0 3.000000000000000 -> -1 +ddcomp1044 compare 0 4.000000000000000 -> -1 +ddcomp1045 compare 0 5.000000000000000 -> -1 +ddcomp1046 compare 0 6.000000000000000 -> -1 +ddcomp1047 compare 0 7.000000000000000 -> -1 +ddcomp1048 compare 0 8.000000000000000 -> -1 +ddcomp1049 compare 0 9.000000000000000 -> -1 +ddcomp1050 compare 0.000000000000000 0 -> 0 +ddcomp1051 compare 1.000000000000000 0 -> 1 +ddcomp1052 compare 2.000000000000000 0 -> 1 +ddcomp1053 compare 3.000000000000000 0 -> 1 +ddcomp1054 compare 4.000000000000000 0 -> 1 +ddcomp1055 compare 5.000000000000000 0 -> 1 +ddcomp1056 compare 6.000000000000000 0 -> 1 +ddcomp1057 compare 7.000000000000000 0 -> 1 +ddcomp1058 compare 8.000000000000000 0 -> 1 +ddcomp1059 compare 9.000000000000000 0 -> 1 + +-- Null tests +ddcom9990 compare 10 # -> NaN Invalid_operation +ddcom9991 compare # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddCompareSig.decTest b/Lib/test/decimaltestdata/ddCompareSig.decTest index 8d3fce08c7c..c82ec455170 100644 --- a/Lib/test/decimaltestdata/ddCompareSig.decTest +++ b/Lib/test/decimaltestdata/ddCompareSig.decTest @@ -1,647 +1,647 @@ ------------------------------------------------------------------------- --- ddCompareSig.decTest -- decDouble comparison; all NaNs signal -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddcms001 comparesig -2 -2 -> 0 -ddcms002 comparesig -2 -1 -> -1 -ddcms003 comparesig -2 0 -> -1 -ddcms004 comparesig -2 1 -> -1 -ddcms005 comparesig -2 2 -> -1 -ddcms006 comparesig -1 -2 -> 1 -ddcms007 comparesig -1 -1 -> 0 -ddcms008 comparesig -1 0 -> -1 -ddcms009 comparesig -1 1 -> -1 -ddcms010 comparesig -1 2 -> -1 -ddcms011 comparesig 0 -2 -> 1 -ddcms012 comparesig 0 -1 -> 1 -ddcms013 comparesig 0 0 -> 0 -ddcms014 comparesig 0 1 -> -1 -ddcms015 comparesig 0 2 -> -1 -ddcms016 comparesig 1 -2 -> 1 -ddcms017 comparesig 1 -1 -> 1 -ddcms018 comparesig 1 0 -> 1 -ddcms019 comparesig 1 1 -> 0 -ddcms020 comparesig 1 2 -> -1 -ddcms021 comparesig 2 -2 -> 1 -ddcms022 comparesig 2 -1 -> 1 -ddcms023 comparesig 2 0 -> 1 -ddcms025 comparesig 2 1 -> 1 -ddcms026 comparesig 2 2 -> 0 - -ddcms031 comparesig -20 -20 -> 0 -ddcms032 comparesig -20 -10 -> -1 -ddcms033 comparesig -20 00 -> -1 -ddcms034 comparesig -20 10 -> -1 -ddcms035 comparesig -20 20 -> -1 -ddcms036 comparesig -10 -20 -> 1 -ddcms037 comparesig -10 -10 -> 0 -ddcms038 comparesig -10 00 -> -1 -ddcms039 comparesig -10 10 -> -1 -ddcms040 comparesig -10 20 -> -1 -ddcms041 comparesig 00 -20 -> 1 -ddcms042 comparesig 00 -10 -> 1 -ddcms043 comparesig 00 00 -> 0 -ddcms044 comparesig 00 10 -> -1 -ddcms045 comparesig 00 20 -> -1 -ddcms046 comparesig 10 -20 -> 1 -ddcms047 comparesig 10 -10 -> 1 -ddcms048 comparesig 10 00 -> 1 -ddcms049 comparesig 10 10 -> 0 -ddcms050 comparesig 10 20 -> -1 -ddcms051 comparesig 20 -20 -> 1 -ddcms052 comparesig 20 -10 -> 1 -ddcms053 comparesig 20 00 -> 1 -ddcms055 comparesig 20 10 -> 1 -ddcms056 comparesig 20 20 -> 0 - -ddcms061 comparesig -2.0 -2.0 -> 0 -ddcms062 comparesig -2.0 -1.0 -> -1 -ddcms063 comparesig -2.0 0.0 -> -1 -ddcms064 comparesig -2.0 1.0 -> -1 -ddcms065 comparesig -2.0 2.0 -> -1 -ddcms066 comparesig -1.0 -2.0 -> 1 -ddcms067 comparesig -1.0 -1.0 -> 0 -ddcms068 comparesig -1.0 0.0 -> -1 -ddcms069 comparesig -1.0 1.0 -> -1 -ddcms070 comparesig -1.0 2.0 -> -1 -ddcms071 comparesig 0.0 -2.0 -> 1 -ddcms072 comparesig 0.0 -1.0 -> 1 -ddcms073 comparesig 0.0 0.0 -> 0 -ddcms074 comparesig 0.0 1.0 -> -1 -ddcms075 comparesig 0.0 2.0 -> -1 -ddcms076 comparesig 1.0 -2.0 -> 1 -ddcms077 comparesig 1.0 -1.0 -> 1 -ddcms078 comparesig 1.0 0.0 -> 1 -ddcms079 comparesig 1.0 1.0 -> 0 -ddcms080 comparesig 1.0 2.0 -> -1 -ddcms081 comparesig 2.0 -2.0 -> 1 -ddcms082 comparesig 2.0 -1.0 -> 1 -ddcms083 comparesig 2.0 0.0 -> 1 -ddcms085 comparesig 2.0 1.0 -> 1 -ddcms086 comparesig 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -ddcms090 comparesig 9.999999999999999E+384 9.999999999999999E+384 -> 0 -ddcms091 comparesig -9.999999999999999E+384 9.999999999999999E+384 -> -1 -ddcms092 comparesig 9.999999999999999E+384 -9.999999999999999E+384 -> 1 -ddcms093 comparesig -9.999999999999999E+384 -9.999999999999999E+384 -> 0 - --- some differing length/exponent cases -ddcms100 comparesig 7.0 7.0 -> 0 -ddcms101 comparesig 7.0 7 -> 0 -ddcms102 comparesig 7 7.0 -> 0 -ddcms103 comparesig 7E+0 7.0 -> 0 -ddcms104 comparesig 70E-1 7.0 -> 0 -ddcms105 comparesig 0.7E+1 7 -> 0 -ddcms106 comparesig 70E-1 7 -> 0 -ddcms107 comparesig 7.0 7E+0 -> 0 -ddcms108 comparesig 7.0 70E-1 -> 0 -ddcms109 comparesig 7 0.7E+1 -> 0 -ddcms110 comparesig 7 70E-1 -> 0 - -ddcms120 comparesig 8.0 7.0 -> 1 -ddcms121 comparesig 8.0 7 -> 1 -ddcms122 comparesig 8 7.0 -> 1 -ddcms123 comparesig 8E+0 7.0 -> 1 -ddcms124 comparesig 80E-1 7.0 -> 1 -ddcms125 comparesig 0.8E+1 7 -> 1 -ddcms126 comparesig 80E-1 7 -> 1 -ddcms127 comparesig 8.0 7E+0 -> 1 -ddcms128 comparesig 8.0 70E-1 -> 1 -ddcms129 comparesig 8 0.7E+1 -> 1 -ddcms130 comparesig 8 70E-1 -> 1 - -ddcms140 comparesig 8.0 9.0 -> -1 -ddcms141 comparesig 8.0 9 -> -1 -ddcms142 comparesig 8 9.0 -> -1 -ddcms143 comparesig 8E+0 9.0 -> -1 -ddcms144 comparesig 80E-1 9.0 -> -1 -ddcms145 comparesig 0.8E+1 9 -> -1 -ddcms146 comparesig 80E-1 9 -> -1 -ddcms147 comparesig 8.0 9E+0 -> -1 -ddcms148 comparesig 8.0 90E-1 -> -1 -ddcms149 comparesig 8 0.9E+1 -> -1 -ddcms150 comparesig 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ddcms200 comparesig -7.0 7.0 -> -1 -ddcms201 comparesig -7.0 7 -> -1 -ddcms202 comparesig -7 7.0 -> -1 -ddcms203 comparesig -7E+0 7.0 -> -1 -ddcms204 comparesig -70E-1 7.0 -> -1 -ddcms205 comparesig -0.7E+1 7 -> -1 -ddcms206 comparesig -70E-1 7 -> -1 -ddcms207 comparesig -7.0 7E+0 -> -1 -ddcms208 comparesig -7.0 70E-1 -> -1 -ddcms209 comparesig -7 0.7E+1 -> -1 -ddcms210 comparesig -7 70E-1 -> -1 - -ddcms220 comparesig -8.0 7.0 -> -1 -ddcms221 comparesig -8.0 7 -> -1 -ddcms222 comparesig -8 7.0 -> -1 -ddcms223 comparesig -8E+0 7.0 -> -1 -ddcms224 comparesig -80E-1 7.0 -> -1 -ddcms225 comparesig -0.8E+1 7 -> -1 -ddcms226 comparesig -80E-1 7 -> -1 -ddcms227 comparesig -8.0 7E+0 -> -1 -ddcms228 comparesig -8.0 70E-1 -> -1 -ddcms229 comparesig -8 0.7E+1 -> -1 -ddcms230 comparesig -8 70E-1 -> -1 - -ddcms240 comparesig -8.0 9.0 -> -1 -ddcms241 comparesig -8.0 9 -> -1 -ddcms242 comparesig -8 9.0 -> -1 -ddcms243 comparesig -8E+0 9.0 -> -1 -ddcms244 comparesig -80E-1 9.0 -> -1 -ddcms245 comparesig -0.8E+1 9 -> -1 -ddcms246 comparesig -80E-1 9 -> -1 -ddcms247 comparesig -8.0 9E+0 -> -1 -ddcms248 comparesig -8.0 90E-1 -> -1 -ddcms249 comparesig -8 0.9E+1 -> -1 -ddcms250 comparesig -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ddcms300 comparesig 7.0 -7.0 -> 1 -ddcms301 comparesig 7.0 -7 -> 1 -ddcms302 comparesig 7 -7.0 -> 1 -ddcms303 comparesig 7E+0 -7.0 -> 1 -ddcms304 comparesig 70E-1 -7.0 -> 1 -ddcms305 comparesig .7E+1 -7 -> 1 -ddcms306 comparesig 70E-1 -7 -> 1 -ddcms307 comparesig 7.0 -7E+0 -> 1 -ddcms308 comparesig 7.0 -70E-1 -> 1 -ddcms309 comparesig 7 -.7E+1 -> 1 -ddcms310 comparesig 7 -70E-1 -> 1 - -ddcms320 comparesig 8.0 -7.0 -> 1 -ddcms321 comparesig 8.0 -7 -> 1 -ddcms322 comparesig 8 -7.0 -> 1 -ddcms323 comparesig 8E+0 -7.0 -> 1 -ddcms324 comparesig 80E-1 -7.0 -> 1 -ddcms325 comparesig .8E+1 -7 -> 1 -ddcms326 comparesig 80E-1 -7 -> 1 -ddcms327 comparesig 8.0 -7E+0 -> 1 -ddcms328 comparesig 8.0 -70E-1 -> 1 -ddcms329 comparesig 8 -.7E+1 -> 1 -ddcms330 comparesig 8 -70E-1 -> 1 - -ddcms340 comparesig 8.0 -9.0 -> 1 -ddcms341 comparesig 8.0 -9 -> 1 -ddcms342 comparesig 8 -9.0 -> 1 -ddcms343 comparesig 8E+0 -9.0 -> 1 -ddcms344 comparesig 80E-1 -9.0 -> 1 -ddcms345 comparesig .8E+1 -9 -> 1 -ddcms346 comparesig 80E-1 -9 -> 1 -ddcms347 comparesig 8.0 -9E+0 -> 1 -ddcms348 comparesig 8.0 -90E-1 -> 1 -ddcms349 comparesig 8 -.9E+1 -> 1 -ddcms350 comparesig 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -ddcms400 comparesig -7.0 -7.0 -> 0 -ddcms401 comparesig -7.0 -7 -> 0 -ddcms402 comparesig -7 -7.0 -> 0 -ddcms403 comparesig -7E+0 -7.0 -> 0 -ddcms404 comparesig -70E-1 -7.0 -> 0 -ddcms405 comparesig -.7E+1 -7 -> 0 -ddcms406 comparesig -70E-1 -7 -> 0 -ddcms407 comparesig -7.0 -7E+0 -> 0 -ddcms408 comparesig -7.0 -70E-1 -> 0 -ddcms409 comparesig -7 -.7E+1 -> 0 -ddcms410 comparesig -7 -70E-1 -> 0 - -ddcms420 comparesig -8.0 -7.0 -> -1 -ddcms421 comparesig -8.0 -7 -> -1 -ddcms422 comparesig -8 -7.0 -> -1 -ddcms423 comparesig -8E+0 -7.0 -> -1 -ddcms424 comparesig -80E-1 -7.0 -> -1 -ddcms425 comparesig -.8E+1 -7 -> -1 -ddcms426 comparesig -80E-1 -7 -> -1 -ddcms427 comparesig -8.0 -7E+0 -> -1 -ddcms428 comparesig -8.0 -70E-1 -> -1 -ddcms429 comparesig -8 -.7E+1 -> -1 -ddcms430 comparesig -8 -70E-1 -> -1 - -ddcms440 comparesig -8.0 -9.0 -> 1 -ddcms441 comparesig -8.0 -9 -> 1 -ddcms442 comparesig -8 -9.0 -> 1 -ddcms443 comparesig -8E+0 -9.0 -> 1 -ddcms444 comparesig -80E-1 -9.0 -> 1 -ddcms445 comparesig -.8E+1 -9 -> 1 -ddcms446 comparesig -80E-1 -9 -> 1 -ddcms447 comparesig -8.0 -9E+0 -> 1 -ddcms448 comparesig -8.0 -90E-1 -> 1 -ddcms449 comparesig -8 -.9E+1 -> 1 -ddcms450 comparesig -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -ddcms473 comparesig 123.4560000000000E-89 123.456E-89 -> 0 -ddcms474 comparesig 123.456000000000E+89 123.456E+89 -> 0 -ddcms475 comparesig 123.45600000000E-89 123.456E-89 -> 0 -ddcms476 comparesig 123.4560000000E+89 123.456E+89 -> 0 -ddcms477 comparesig 123.456000000E-89 123.456E-89 -> 0 -ddcms478 comparesig 123.45600000E+89 123.456E+89 -> 0 -ddcms479 comparesig 123.4560000E-89 123.456E-89 -> 0 -ddcms480 comparesig 123.456000E+89 123.456E+89 -> 0 -ddcms481 comparesig 123.45600E-89 123.456E-89 -> 0 -ddcms482 comparesig 123.4560E+89 123.456E+89 -> 0 -ddcms483 comparesig 123.456E-89 123.456E-89 -> 0 -ddcms487 comparesig 123.456E+89 123.4560000000000E+89 -> 0 -ddcms488 comparesig 123.456E-89 123.456000000000E-89 -> 0 -ddcms489 comparesig 123.456E+89 123.45600000000E+89 -> 0 -ddcms490 comparesig 123.456E-89 123.4560000000E-89 -> 0 -ddcms491 comparesig 123.456E+89 123.456000000E+89 -> 0 -ddcms492 comparesig 123.456E-89 123.45600000E-89 -> 0 -ddcms493 comparesig 123.456E+89 123.4560000E+89 -> 0 -ddcms494 comparesig 123.456E-89 123.456000E-89 -> 0 -ddcms495 comparesig 123.456E+89 123.45600E+89 -> 0 -ddcms496 comparesig 123.456E-89 123.4560E-89 -> 0 -ddcms497 comparesig 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -ddcms500 comparesig 1 1E-15 -> 1 -ddcms501 comparesig 1 1E-14 -> 1 -ddcms502 comparesig 1 1E-13 -> 1 -ddcms503 comparesig 1 1E-12 -> 1 -ddcms504 comparesig 1 1E-11 -> 1 -ddcms505 comparesig 1 1E-10 -> 1 -ddcms506 comparesig 1 1E-9 -> 1 -ddcms507 comparesig 1 1E-8 -> 1 -ddcms508 comparesig 1 1E-7 -> 1 -ddcms509 comparesig 1 1E-6 -> 1 -ddcms510 comparesig 1 1E-5 -> 1 -ddcms511 comparesig 1 1E-4 -> 1 -ddcms512 comparesig 1 1E-3 -> 1 -ddcms513 comparesig 1 1E-2 -> 1 -ddcms514 comparesig 1 1E-1 -> 1 -ddcms515 comparesig 1 1E-0 -> 0 -ddcms516 comparesig 1 1E+1 -> -1 -ddcms517 comparesig 1 1E+2 -> -1 -ddcms518 comparesig 1 1E+3 -> -1 -ddcms519 comparesig 1 1E+4 -> -1 -ddcms521 comparesig 1 1E+5 -> -1 -ddcms522 comparesig 1 1E+6 -> -1 -ddcms523 comparesig 1 1E+7 -> -1 -ddcms524 comparesig 1 1E+8 -> -1 -ddcms525 comparesig 1 1E+9 -> -1 -ddcms526 comparesig 1 1E+10 -> -1 -ddcms527 comparesig 1 1E+11 -> -1 -ddcms528 comparesig 1 1E+12 -> -1 -ddcms529 comparesig 1 1E+13 -> -1 -ddcms530 comparesig 1 1E+14 -> -1 -ddcms531 comparesig 1 1E+15 -> -1 --- LR swap -ddcms540 comparesig 1E-15 1 -> -1 -ddcms541 comparesig 1E-14 1 -> -1 -ddcms542 comparesig 1E-13 1 -> -1 -ddcms543 comparesig 1E-12 1 -> -1 -ddcms544 comparesig 1E-11 1 -> -1 -ddcms545 comparesig 1E-10 1 -> -1 -ddcms546 comparesig 1E-9 1 -> -1 -ddcms547 comparesig 1E-8 1 -> -1 -ddcms548 comparesig 1E-7 1 -> -1 -ddcms549 comparesig 1E-6 1 -> -1 -ddcms550 comparesig 1E-5 1 -> -1 -ddcms551 comparesig 1E-4 1 -> -1 -ddcms552 comparesig 1E-3 1 -> -1 -ddcms553 comparesig 1E-2 1 -> -1 -ddcms554 comparesig 1E-1 1 -> -1 -ddcms555 comparesig 1E-0 1 -> 0 -ddcms556 comparesig 1E+1 1 -> 1 -ddcms557 comparesig 1E+2 1 -> 1 -ddcms558 comparesig 1E+3 1 -> 1 -ddcms559 comparesig 1E+4 1 -> 1 -ddcms561 comparesig 1E+5 1 -> 1 -ddcms562 comparesig 1E+6 1 -> 1 -ddcms563 comparesig 1E+7 1 -> 1 -ddcms564 comparesig 1E+8 1 -> 1 -ddcms565 comparesig 1E+9 1 -> 1 -ddcms566 comparesig 1E+10 1 -> 1 -ddcms567 comparesig 1E+11 1 -> 1 -ddcms568 comparesig 1E+12 1 -> 1 -ddcms569 comparesig 1E+13 1 -> 1 -ddcms570 comparesig 1E+14 1 -> 1 -ddcms571 comparesig 1E+15 1 -> 1 --- similar with a useful coefficient, one side only -ddcms580 comparesig 0.000000987654321 1E-15 -> 1 -ddcms581 comparesig 0.000000987654321 1E-14 -> 1 -ddcms582 comparesig 0.000000987654321 1E-13 -> 1 -ddcms583 comparesig 0.000000987654321 1E-12 -> 1 -ddcms584 comparesig 0.000000987654321 1E-11 -> 1 -ddcms585 comparesig 0.000000987654321 1E-10 -> 1 -ddcms586 comparesig 0.000000987654321 1E-9 -> 1 -ddcms587 comparesig 0.000000987654321 1E-8 -> 1 -ddcms588 comparesig 0.000000987654321 1E-7 -> 1 -ddcms589 comparesig 0.000000987654321 1E-6 -> -1 -ddcms590 comparesig 0.000000987654321 1E-5 -> -1 -ddcms591 comparesig 0.000000987654321 1E-4 -> -1 -ddcms592 comparesig 0.000000987654321 1E-3 -> -1 -ddcms593 comparesig 0.000000987654321 1E-2 -> -1 -ddcms594 comparesig 0.000000987654321 1E-1 -> -1 -ddcms595 comparesig 0.000000987654321 1E-0 -> -1 -ddcms596 comparesig 0.000000987654321 1E+1 -> -1 -ddcms597 comparesig 0.000000987654321 1E+2 -> -1 -ddcms598 comparesig 0.000000987654321 1E+3 -> -1 -ddcms599 comparesig 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -ddcms600 comparesig 12 12.2345 -> -1 -ddcms601 comparesig 12.0 12.2345 -> -1 -ddcms602 comparesig 12.00 12.2345 -> -1 -ddcms603 comparesig 12.000 12.2345 -> -1 -ddcms604 comparesig 12.0000 12.2345 -> -1 -ddcms605 comparesig 12.00000 12.2345 -> -1 -ddcms606 comparesig 12.000000 12.2345 -> -1 -ddcms607 comparesig 12.0000000 12.2345 -> -1 -ddcms608 comparesig 12.00000000 12.2345 -> -1 -ddcms609 comparesig 12.000000000 12.2345 -> -1 -ddcms610 comparesig 12.1234 12 -> 1 -ddcms611 comparesig 12.1234 12.0 -> 1 -ddcms612 comparesig 12.1234 12.00 -> 1 -ddcms613 comparesig 12.1234 12.000 -> 1 -ddcms614 comparesig 12.1234 12.0000 -> 1 -ddcms615 comparesig 12.1234 12.00000 -> 1 -ddcms616 comparesig 12.1234 12.000000 -> 1 -ddcms617 comparesig 12.1234 12.0000000 -> 1 -ddcms618 comparesig 12.1234 12.00000000 -> 1 -ddcms619 comparesig 12.1234 12.000000000 -> 1 -ddcms620 comparesig -12 -12.2345 -> 1 -ddcms621 comparesig -12.0 -12.2345 -> 1 -ddcms622 comparesig -12.00 -12.2345 -> 1 -ddcms623 comparesig -12.000 -12.2345 -> 1 -ddcms624 comparesig -12.0000 -12.2345 -> 1 -ddcms625 comparesig -12.00000 -12.2345 -> 1 -ddcms626 comparesig -12.000000 -12.2345 -> 1 -ddcms627 comparesig -12.0000000 -12.2345 -> 1 -ddcms628 comparesig -12.00000000 -12.2345 -> 1 -ddcms629 comparesig -12.000000000 -12.2345 -> 1 -ddcms630 comparesig -12.1234 -12 -> -1 -ddcms631 comparesig -12.1234 -12.0 -> -1 -ddcms632 comparesig -12.1234 -12.00 -> -1 -ddcms633 comparesig -12.1234 -12.000 -> -1 -ddcms634 comparesig -12.1234 -12.0000 -> -1 -ddcms635 comparesig -12.1234 -12.00000 -> -1 -ddcms636 comparesig -12.1234 -12.000000 -> -1 -ddcms637 comparesig -12.1234 -12.0000000 -> -1 -ddcms638 comparesig -12.1234 -12.00000000 -> -1 -ddcms639 comparesig -12.1234 -12.000000000 -> -1 - --- extended zeros -ddcms640 comparesig 0 0 -> 0 -ddcms641 comparesig 0 -0 -> 0 -ddcms642 comparesig 0 -0.0 -> 0 -ddcms643 comparesig 0 0.0 -> 0 -ddcms644 comparesig -0 0 -> 0 -ddcms645 comparesig -0 -0 -> 0 -ddcms646 comparesig -0 -0.0 -> 0 -ddcms647 comparesig -0 0.0 -> 0 -ddcms648 comparesig 0.0 0 -> 0 -ddcms649 comparesig 0.0 -0 -> 0 -ddcms650 comparesig 0.0 -0.0 -> 0 -ddcms651 comparesig 0.0 0.0 -> 0 -ddcms652 comparesig -0.0 0 -> 0 -ddcms653 comparesig -0.0 -0 -> 0 -ddcms654 comparesig -0.0 -0.0 -> 0 -ddcms655 comparesig -0.0 0.0 -> 0 - -ddcms656 comparesig -0E1 0.0 -> 0 -ddcms657 comparesig -0E2 0.0 -> 0 -ddcms658 comparesig 0E1 0.0 -> 0 -ddcms659 comparesig 0E2 0.0 -> 0 -ddcms660 comparesig -0E1 0 -> 0 -ddcms661 comparesig -0E2 0 -> 0 -ddcms662 comparesig 0E1 0 -> 0 -ddcms663 comparesig 0E2 0 -> 0 -ddcms664 comparesig -0E1 -0E1 -> 0 -ddcms665 comparesig -0E2 -0E1 -> 0 -ddcms666 comparesig 0E1 -0E1 -> 0 -ddcms667 comparesig 0E2 -0E1 -> 0 -ddcms668 comparesig -0E1 -0E2 -> 0 -ddcms669 comparesig -0E2 -0E2 -> 0 -ddcms670 comparesig 0E1 -0E2 -> 0 -ddcms671 comparesig 0E2 -0E2 -> 0 -ddcms672 comparesig -0E1 0E1 -> 0 -ddcms673 comparesig -0E2 0E1 -> 0 -ddcms674 comparesig 0E1 0E1 -> 0 -ddcms675 comparesig 0E2 0E1 -> 0 -ddcms676 comparesig -0E1 0E2 -> 0 -ddcms677 comparesig -0E2 0E2 -> 0 -ddcms678 comparesig 0E1 0E2 -> 0 -ddcms679 comparesig 0E2 0E2 -> 0 - --- trailing zeros; unit-y -ddcms680 comparesig 12 12 -> 0 -ddcms681 comparesig 12 12.0 -> 0 -ddcms682 comparesig 12 12.00 -> 0 -ddcms683 comparesig 12 12.000 -> 0 -ddcms684 comparesig 12 12.0000 -> 0 -ddcms685 comparesig 12 12.00000 -> 0 -ddcms686 comparesig 12 12.000000 -> 0 -ddcms687 comparesig 12 12.0000000 -> 0 -ddcms688 comparesig 12 12.00000000 -> 0 -ddcms689 comparesig 12 12.000000000 -> 0 -ddcms690 comparesig 12 12 -> 0 -ddcms691 comparesig 12.0 12 -> 0 -ddcms692 comparesig 12.00 12 -> 0 -ddcms693 comparesig 12.000 12 -> 0 -ddcms694 comparesig 12.0000 12 -> 0 -ddcms695 comparesig 12.00000 12 -> 0 -ddcms696 comparesig 12.000000 12 -> 0 -ddcms697 comparesig 12.0000000 12 -> 0 -ddcms698 comparesig 12.00000000 12 -> 0 -ddcms699 comparesig 12.000000000 12 -> 0 - --- first, second, & last digit -ddcms700 comparesig 1234567890123456 1234567890123455 -> 1 -ddcms701 comparesig 1234567890123456 1234567890123456 -> 0 -ddcms702 comparesig 1234567890123456 1234567890123457 -> -1 -ddcms703 comparesig 1234567890123456 0234567890123456 -> 1 -ddcms704 comparesig 1234567890123456 1234567890123456 -> 0 -ddcms705 comparesig 1234567890123456 2234567890123456 -> -1 -ddcms706 comparesig 1134567890123456 1034567890123456 -> 1 -ddcms707 comparesig 1134567890123456 1134567890123456 -> 0 -ddcms708 comparesig 1134567890123456 1234567890123456 -> -1 - --- miscellaneous -ddcms721 comparesig 12345678000 1 -> 1 -ddcms722 comparesig 1 12345678000 -> -1 -ddcms723 comparesig 1234567800 1 -> 1 -ddcms724 comparesig 1 1234567800 -> -1 -ddcms725 comparesig 1234567890 1 -> 1 -ddcms726 comparesig 1 1234567890 -> -1 -ddcms727 comparesig 1234567891 1 -> 1 -ddcms728 comparesig 1 1234567891 -> -1 -ddcms729 comparesig 12345678901 1 -> 1 -ddcms730 comparesig 1 12345678901 -> -1 -ddcms731 comparesig 1234567896 1 -> 1 -ddcms732 comparesig 1 1234567896 -> -1 - --- residue cases at lower precision -ddcms740 comparesig 1 0.9999999 -> 1 -ddcms741 comparesig 1 0.999999 -> 1 -ddcms742 comparesig 1 0.99999 -> 1 -ddcms743 comparesig 1 1.0000 -> 0 -ddcms744 comparesig 1 1.00001 -> -1 -ddcms745 comparesig 1 1.000001 -> -1 -ddcms746 comparesig 1 1.0000001 -> -1 -ddcms750 comparesig 0.9999999 1 -> -1 -ddcms751 comparesig 0.999999 1 -> -1 -ddcms752 comparesig 0.99999 1 -> -1 -ddcms753 comparesig 1.0000 1 -> 0 -ddcms754 comparesig 1.00001 1 -> 1 -ddcms755 comparesig 1.000001 1 -> 1 -ddcms756 comparesig 1.0000001 1 -> 1 - --- Specials -ddcms780 comparesig Inf -Inf -> 1 -ddcms781 comparesig Inf -1000 -> 1 -ddcms782 comparesig Inf -1 -> 1 -ddcms783 comparesig Inf -0 -> 1 -ddcms784 comparesig Inf 0 -> 1 -ddcms785 comparesig Inf 1 -> 1 -ddcms786 comparesig Inf 1000 -> 1 -ddcms787 comparesig Inf Inf -> 0 -ddcms788 comparesig -1000 Inf -> -1 -ddcms789 comparesig -Inf Inf -> -1 -ddcms790 comparesig -1 Inf -> -1 -ddcms791 comparesig -0 Inf -> -1 -ddcms792 comparesig 0 Inf -> -1 -ddcms793 comparesig 1 Inf -> -1 -ddcms794 comparesig 1000 Inf -> -1 -ddcms795 comparesig Inf Inf -> 0 - -ddcms800 comparesig -Inf -Inf -> 0 -ddcms801 comparesig -Inf -1000 -> -1 -ddcms802 comparesig -Inf -1 -> -1 -ddcms803 comparesig -Inf -0 -> -1 -ddcms804 comparesig -Inf 0 -> -1 -ddcms805 comparesig -Inf 1 -> -1 -ddcms806 comparesig -Inf 1000 -> -1 -ddcms807 comparesig -Inf Inf -> -1 -ddcms808 comparesig -Inf -Inf -> 0 -ddcms809 comparesig -1000 -Inf -> 1 -ddcms810 comparesig -1 -Inf -> 1 -ddcms811 comparesig -0 -Inf -> 1 -ddcms812 comparesig 0 -Inf -> 1 -ddcms813 comparesig 1 -Inf -> 1 -ddcms814 comparesig 1000 -Inf -> 1 -ddcms815 comparesig Inf -Inf -> 1 - -ddcms821 comparesig NaN -Inf -> NaN Invalid_operation -ddcms822 comparesig NaN -1000 -> NaN Invalid_operation -ddcms823 comparesig NaN -1 -> NaN Invalid_operation -ddcms824 comparesig NaN -0 -> NaN Invalid_operation -ddcms825 comparesig NaN 0 -> NaN Invalid_operation -ddcms826 comparesig NaN 1 -> NaN Invalid_operation -ddcms827 comparesig NaN 1000 -> NaN Invalid_operation -ddcms828 comparesig NaN Inf -> NaN Invalid_operation -ddcms829 comparesig NaN NaN -> NaN Invalid_operation -ddcms830 comparesig -Inf NaN -> NaN Invalid_operation -ddcms831 comparesig -1000 NaN -> NaN Invalid_operation -ddcms832 comparesig -1 NaN -> NaN Invalid_operation -ddcms833 comparesig -0 NaN -> NaN Invalid_operation -ddcms834 comparesig 0 NaN -> NaN Invalid_operation -ddcms835 comparesig 1 NaN -> NaN Invalid_operation -ddcms836 comparesig 1000 NaN -> NaN Invalid_operation -ddcms837 comparesig Inf NaN -> NaN Invalid_operation -ddcms838 comparesig -NaN -NaN -> -NaN Invalid_operation -ddcms839 comparesig +NaN -NaN -> NaN Invalid_operation -ddcms840 comparesig -NaN +NaN -> -NaN Invalid_operation - -ddcms841 comparesig sNaN -Inf -> NaN Invalid_operation -ddcms842 comparesig sNaN -1000 -> NaN Invalid_operation -ddcms843 comparesig sNaN -1 -> NaN Invalid_operation -ddcms844 comparesig sNaN -0 -> NaN Invalid_operation -ddcms845 comparesig sNaN 0 -> NaN Invalid_operation -ddcms846 comparesig sNaN 1 -> NaN Invalid_operation -ddcms847 comparesig sNaN 1000 -> NaN Invalid_operation -ddcms848 comparesig sNaN NaN -> NaN Invalid_operation -ddcms849 comparesig sNaN sNaN -> NaN Invalid_operation -ddcms850 comparesig NaN sNaN -> NaN Invalid_operation -ddcms851 comparesig -Inf sNaN -> NaN Invalid_operation -ddcms852 comparesig -1000 sNaN -> NaN Invalid_operation -ddcms853 comparesig -1 sNaN -> NaN Invalid_operation -ddcms854 comparesig -0 sNaN -> NaN Invalid_operation -ddcms855 comparesig 0 sNaN -> NaN Invalid_operation -ddcms856 comparesig 1 sNaN -> NaN Invalid_operation -ddcms857 comparesig 1000 sNaN -> NaN Invalid_operation -ddcms858 comparesig Inf sNaN -> NaN Invalid_operation -ddcms859 comparesig NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddcms860 comparesig NaN9 -Inf -> NaN9 Invalid_operation -ddcms861 comparesig NaN8 999 -> NaN8 Invalid_operation -ddcms862 comparesig NaN77 Inf -> NaN77 Invalid_operation -ddcms863 comparesig -NaN67 NaN5 -> -NaN67 Invalid_operation -ddcms864 comparesig -Inf -NaN4 -> -NaN4 Invalid_operation -ddcms865 comparesig -999 -NaN33 -> -NaN33 Invalid_operation -ddcms866 comparesig Inf NaN2 -> NaN2 Invalid_operation -ddcms867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation -ddcms868 comparesig +NaN41 -NaN42 -> NaN41 Invalid_operation -ddcms869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation -ddcms870 comparesig +NaN41 +NaN42 -> NaN41 Invalid_operation - -ddcms871 comparesig -sNaN99 -Inf -> -NaN99 Invalid_operation -ddcms872 comparesig sNaN98 -11 -> NaN98 Invalid_operation -ddcms873 comparesig sNaN97 NaN -> NaN97 Invalid_operation -ddcms874 comparesig sNaN16 sNaN94 -> NaN16 Invalid_operation -ddcms875 comparesig NaN85 sNaN83 -> NaN83 Invalid_operation -ddcms876 comparesig -Inf sNaN92 -> NaN92 Invalid_operation -ddcms877 comparesig 088 sNaN81 -> NaN81 Invalid_operation -ddcms878 comparesig Inf sNaN90 -> NaN90 Invalid_operation -ddcms879 comparesig NaN -sNaN89 -> -NaN89 Invalid_operation - --- wide range -ddcms880 comparesig +1.23456789012345E-0 9E+384 -> -1 -ddcms881 comparesig 9E+384 +1.23456789012345E-0 -> 1 -ddcms882 comparesig +0.100 9E-383 -> 1 -ddcms883 comparesig 9E-383 +0.100 -> -1 -ddcms885 comparesig -1.23456789012345E-0 9E+384 -> -1 -ddcms886 comparesig 9E+384 -1.23456789012345E-0 -> 1 -ddcms887 comparesig -0.100 9E-383 -> -1 -ddcms888 comparesig 9E-383 -0.100 -> 1 - --- signs -ddcms901 comparesig 1e+77 1e+11 -> 1 -ddcms902 comparesig 1e+77 -1e+11 -> 1 -ddcms903 comparesig -1e+77 1e+11 -> -1 -ddcms904 comparesig -1e+77 -1e+11 -> -1 -ddcms905 comparesig 1e-77 1e-11 -> -1 -ddcms906 comparesig 1e-77 -1e-11 -> 1 -ddcms907 comparesig -1e-77 1e-11 -> -1 -ddcms908 comparesig -1e-77 -1e-11 -> 1 - --- Null tests -ddcms990 comparesig 10 # -> NaN Invalid_operation -ddcms991 comparesig # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddCompareSig.decTest -- decDouble comparison; all NaNs signal -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddcms001 comparesig -2 -2 -> 0 +ddcms002 comparesig -2 -1 -> -1 +ddcms003 comparesig -2 0 -> -1 +ddcms004 comparesig -2 1 -> -1 +ddcms005 comparesig -2 2 -> -1 +ddcms006 comparesig -1 -2 -> 1 +ddcms007 comparesig -1 -1 -> 0 +ddcms008 comparesig -1 0 -> -1 +ddcms009 comparesig -1 1 -> -1 +ddcms010 comparesig -1 2 -> -1 +ddcms011 comparesig 0 -2 -> 1 +ddcms012 comparesig 0 -1 -> 1 +ddcms013 comparesig 0 0 -> 0 +ddcms014 comparesig 0 1 -> -1 +ddcms015 comparesig 0 2 -> -1 +ddcms016 comparesig 1 -2 -> 1 +ddcms017 comparesig 1 -1 -> 1 +ddcms018 comparesig 1 0 -> 1 +ddcms019 comparesig 1 1 -> 0 +ddcms020 comparesig 1 2 -> -1 +ddcms021 comparesig 2 -2 -> 1 +ddcms022 comparesig 2 -1 -> 1 +ddcms023 comparesig 2 0 -> 1 +ddcms025 comparesig 2 1 -> 1 +ddcms026 comparesig 2 2 -> 0 + +ddcms031 comparesig -20 -20 -> 0 +ddcms032 comparesig -20 -10 -> -1 +ddcms033 comparesig -20 00 -> -1 +ddcms034 comparesig -20 10 -> -1 +ddcms035 comparesig -20 20 -> -1 +ddcms036 comparesig -10 -20 -> 1 +ddcms037 comparesig -10 -10 -> 0 +ddcms038 comparesig -10 00 -> -1 +ddcms039 comparesig -10 10 -> -1 +ddcms040 comparesig -10 20 -> -1 +ddcms041 comparesig 00 -20 -> 1 +ddcms042 comparesig 00 -10 -> 1 +ddcms043 comparesig 00 00 -> 0 +ddcms044 comparesig 00 10 -> -1 +ddcms045 comparesig 00 20 -> -1 +ddcms046 comparesig 10 -20 -> 1 +ddcms047 comparesig 10 -10 -> 1 +ddcms048 comparesig 10 00 -> 1 +ddcms049 comparesig 10 10 -> 0 +ddcms050 comparesig 10 20 -> -1 +ddcms051 comparesig 20 -20 -> 1 +ddcms052 comparesig 20 -10 -> 1 +ddcms053 comparesig 20 00 -> 1 +ddcms055 comparesig 20 10 -> 1 +ddcms056 comparesig 20 20 -> 0 + +ddcms061 comparesig -2.0 -2.0 -> 0 +ddcms062 comparesig -2.0 -1.0 -> -1 +ddcms063 comparesig -2.0 0.0 -> -1 +ddcms064 comparesig -2.0 1.0 -> -1 +ddcms065 comparesig -2.0 2.0 -> -1 +ddcms066 comparesig -1.0 -2.0 -> 1 +ddcms067 comparesig -1.0 -1.0 -> 0 +ddcms068 comparesig -1.0 0.0 -> -1 +ddcms069 comparesig -1.0 1.0 -> -1 +ddcms070 comparesig -1.0 2.0 -> -1 +ddcms071 comparesig 0.0 -2.0 -> 1 +ddcms072 comparesig 0.0 -1.0 -> 1 +ddcms073 comparesig 0.0 0.0 -> 0 +ddcms074 comparesig 0.0 1.0 -> -1 +ddcms075 comparesig 0.0 2.0 -> -1 +ddcms076 comparesig 1.0 -2.0 -> 1 +ddcms077 comparesig 1.0 -1.0 -> 1 +ddcms078 comparesig 1.0 0.0 -> 1 +ddcms079 comparesig 1.0 1.0 -> 0 +ddcms080 comparesig 1.0 2.0 -> -1 +ddcms081 comparesig 2.0 -2.0 -> 1 +ddcms082 comparesig 2.0 -1.0 -> 1 +ddcms083 comparesig 2.0 0.0 -> 1 +ddcms085 comparesig 2.0 1.0 -> 1 +ddcms086 comparesig 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +ddcms090 comparesig 9.999999999999999E+384 9.999999999999999E+384 -> 0 +ddcms091 comparesig -9.999999999999999E+384 9.999999999999999E+384 -> -1 +ddcms092 comparesig 9.999999999999999E+384 -9.999999999999999E+384 -> 1 +ddcms093 comparesig -9.999999999999999E+384 -9.999999999999999E+384 -> 0 + +-- some differing length/exponent cases +ddcms100 comparesig 7.0 7.0 -> 0 +ddcms101 comparesig 7.0 7 -> 0 +ddcms102 comparesig 7 7.0 -> 0 +ddcms103 comparesig 7E+0 7.0 -> 0 +ddcms104 comparesig 70E-1 7.0 -> 0 +ddcms105 comparesig 0.7E+1 7 -> 0 +ddcms106 comparesig 70E-1 7 -> 0 +ddcms107 comparesig 7.0 7E+0 -> 0 +ddcms108 comparesig 7.0 70E-1 -> 0 +ddcms109 comparesig 7 0.7E+1 -> 0 +ddcms110 comparesig 7 70E-1 -> 0 + +ddcms120 comparesig 8.0 7.0 -> 1 +ddcms121 comparesig 8.0 7 -> 1 +ddcms122 comparesig 8 7.0 -> 1 +ddcms123 comparesig 8E+0 7.0 -> 1 +ddcms124 comparesig 80E-1 7.0 -> 1 +ddcms125 comparesig 0.8E+1 7 -> 1 +ddcms126 comparesig 80E-1 7 -> 1 +ddcms127 comparesig 8.0 7E+0 -> 1 +ddcms128 comparesig 8.0 70E-1 -> 1 +ddcms129 comparesig 8 0.7E+1 -> 1 +ddcms130 comparesig 8 70E-1 -> 1 + +ddcms140 comparesig 8.0 9.0 -> -1 +ddcms141 comparesig 8.0 9 -> -1 +ddcms142 comparesig 8 9.0 -> -1 +ddcms143 comparesig 8E+0 9.0 -> -1 +ddcms144 comparesig 80E-1 9.0 -> -1 +ddcms145 comparesig 0.8E+1 9 -> -1 +ddcms146 comparesig 80E-1 9 -> -1 +ddcms147 comparesig 8.0 9E+0 -> -1 +ddcms148 comparesig 8.0 90E-1 -> -1 +ddcms149 comparesig 8 0.9E+1 -> -1 +ddcms150 comparesig 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ddcms200 comparesig -7.0 7.0 -> -1 +ddcms201 comparesig -7.0 7 -> -1 +ddcms202 comparesig -7 7.0 -> -1 +ddcms203 comparesig -7E+0 7.0 -> -1 +ddcms204 comparesig -70E-1 7.0 -> -1 +ddcms205 comparesig -0.7E+1 7 -> -1 +ddcms206 comparesig -70E-1 7 -> -1 +ddcms207 comparesig -7.0 7E+0 -> -1 +ddcms208 comparesig -7.0 70E-1 -> -1 +ddcms209 comparesig -7 0.7E+1 -> -1 +ddcms210 comparesig -7 70E-1 -> -1 + +ddcms220 comparesig -8.0 7.0 -> -1 +ddcms221 comparesig -8.0 7 -> -1 +ddcms222 comparesig -8 7.0 -> -1 +ddcms223 comparesig -8E+0 7.0 -> -1 +ddcms224 comparesig -80E-1 7.0 -> -1 +ddcms225 comparesig -0.8E+1 7 -> -1 +ddcms226 comparesig -80E-1 7 -> -1 +ddcms227 comparesig -8.0 7E+0 -> -1 +ddcms228 comparesig -8.0 70E-1 -> -1 +ddcms229 comparesig -8 0.7E+1 -> -1 +ddcms230 comparesig -8 70E-1 -> -1 + +ddcms240 comparesig -8.0 9.0 -> -1 +ddcms241 comparesig -8.0 9 -> -1 +ddcms242 comparesig -8 9.0 -> -1 +ddcms243 comparesig -8E+0 9.0 -> -1 +ddcms244 comparesig -80E-1 9.0 -> -1 +ddcms245 comparesig -0.8E+1 9 -> -1 +ddcms246 comparesig -80E-1 9 -> -1 +ddcms247 comparesig -8.0 9E+0 -> -1 +ddcms248 comparesig -8.0 90E-1 -> -1 +ddcms249 comparesig -8 0.9E+1 -> -1 +ddcms250 comparesig -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ddcms300 comparesig 7.0 -7.0 -> 1 +ddcms301 comparesig 7.0 -7 -> 1 +ddcms302 comparesig 7 -7.0 -> 1 +ddcms303 comparesig 7E+0 -7.0 -> 1 +ddcms304 comparesig 70E-1 -7.0 -> 1 +ddcms305 comparesig .7E+1 -7 -> 1 +ddcms306 comparesig 70E-1 -7 -> 1 +ddcms307 comparesig 7.0 -7E+0 -> 1 +ddcms308 comparesig 7.0 -70E-1 -> 1 +ddcms309 comparesig 7 -.7E+1 -> 1 +ddcms310 comparesig 7 -70E-1 -> 1 + +ddcms320 comparesig 8.0 -7.0 -> 1 +ddcms321 comparesig 8.0 -7 -> 1 +ddcms322 comparesig 8 -7.0 -> 1 +ddcms323 comparesig 8E+0 -7.0 -> 1 +ddcms324 comparesig 80E-1 -7.0 -> 1 +ddcms325 comparesig .8E+1 -7 -> 1 +ddcms326 comparesig 80E-1 -7 -> 1 +ddcms327 comparesig 8.0 -7E+0 -> 1 +ddcms328 comparesig 8.0 -70E-1 -> 1 +ddcms329 comparesig 8 -.7E+1 -> 1 +ddcms330 comparesig 8 -70E-1 -> 1 + +ddcms340 comparesig 8.0 -9.0 -> 1 +ddcms341 comparesig 8.0 -9 -> 1 +ddcms342 comparesig 8 -9.0 -> 1 +ddcms343 comparesig 8E+0 -9.0 -> 1 +ddcms344 comparesig 80E-1 -9.0 -> 1 +ddcms345 comparesig .8E+1 -9 -> 1 +ddcms346 comparesig 80E-1 -9 -> 1 +ddcms347 comparesig 8.0 -9E+0 -> 1 +ddcms348 comparesig 8.0 -90E-1 -> 1 +ddcms349 comparesig 8 -.9E+1 -> 1 +ddcms350 comparesig 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +ddcms400 comparesig -7.0 -7.0 -> 0 +ddcms401 comparesig -7.0 -7 -> 0 +ddcms402 comparesig -7 -7.0 -> 0 +ddcms403 comparesig -7E+0 -7.0 -> 0 +ddcms404 comparesig -70E-1 -7.0 -> 0 +ddcms405 comparesig -.7E+1 -7 -> 0 +ddcms406 comparesig -70E-1 -7 -> 0 +ddcms407 comparesig -7.0 -7E+0 -> 0 +ddcms408 comparesig -7.0 -70E-1 -> 0 +ddcms409 comparesig -7 -.7E+1 -> 0 +ddcms410 comparesig -7 -70E-1 -> 0 + +ddcms420 comparesig -8.0 -7.0 -> -1 +ddcms421 comparesig -8.0 -7 -> -1 +ddcms422 comparesig -8 -7.0 -> -1 +ddcms423 comparesig -8E+0 -7.0 -> -1 +ddcms424 comparesig -80E-1 -7.0 -> -1 +ddcms425 comparesig -.8E+1 -7 -> -1 +ddcms426 comparesig -80E-1 -7 -> -1 +ddcms427 comparesig -8.0 -7E+0 -> -1 +ddcms428 comparesig -8.0 -70E-1 -> -1 +ddcms429 comparesig -8 -.7E+1 -> -1 +ddcms430 comparesig -8 -70E-1 -> -1 + +ddcms440 comparesig -8.0 -9.0 -> 1 +ddcms441 comparesig -8.0 -9 -> 1 +ddcms442 comparesig -8 -9.0 -> 1 +ddcms443 comparesig -8E+0 -9.0 -> 1 +ddcms444 comparesig -80E-1 -9.0 -> 1 +ddcms445 comparesig -.8E+1 -9 -> 1 +ddcms446 comparesig -80E-1 -9 -> 1 +ddcms447 comparesig -8.0 -9E+0 -> 1 +ddcms448 comparesig -8.0 -90E-1 -> 1 +ddcms449 comparesig -8 -.9E+1 -> 1 +ddcms450 comparesig -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +ddcms473 comparesig 123.4560000000000E-89 123.456E-89 -> 0 +ddcms474 comparesig 123.456000000000E+89 123.456E+89 -> 0 +ddcms475 comparesig 123.45600000000E-89 123.456E-89 -> 0 +ddcms476 comparesig 123.4560000000E+89 123.456E+89 -> 0 +ddcms477 comparesig 123.456000000E-89 123.456E-89 -> 0 +ddcms478 comparesig 123.45600000E+89 123.456E+89 -> 0 +ddcms479 comparesig 123.4560000E-89 123.456E-89 -> 0 +ddcms480 comparesig 123.456000E+89 123.456E+89 -> 0 +ddcms481 comparesig 123.45600E-89 123.456E-89 -> 0 +ddcms482 comparesig 123.4560E+89 123.456E+89 -> 0 +ddcms483 comparesig 123.456E-89 123.456E-89 -> 0 +ddcms487 comparesig 123.456E+89 123.4560000000000E+89 -> 0 +ddcms488 comparesig 123.456E-89 123.456000000000E-89 -> 0 +ddcms489 comparesig 123.456E+89 123.45600000000E+89 -> 0 +ddcms490 comparesig 123.456E-89 123.4560000000E-89 -> 0 +ddcms491 comparesig 123.456E+89 123.456000000E+89 -> 0 +ddcms492 comparesig 123.456E-89 123.45600000E-89 -> 0 +ddcms493 comparesig 123.456E+89 123.4560000E+89 -> 0 +ddcms494 comparesig 123.456E-89 123.456000E-89 -> 0 +ddcms495 comparesig 123.456E+89 123.45600E+89 -> 0 +ddcms496 comparesig 123.456E-89 123.4560E-89 -> 0 +ddcms497 comparesig 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +ddcms500 comparesig 1 1E-15 -> 1 +ddcms501 comparesig 1 1E-14 -> 1 +ddcms502 comparesig 1 1E-13 -> 1 +ddcms503 comparesig 1 1E-12 -> 1 +ddcms504 comparesig 1 1E-11 -> 1 +ddcms505 comparesig 1 1E-10 -> 1 +ddcms506 comparesig 1 1E-9 -> 1 +ddcms507 comparesig 1 1E-8 -> 1 +ddcms508 comparesig 1 1E-7 -> 1 +ddcms509 comparesig 1 1E-6 -> 1 +ddcms510 comparesig 1 1E-5 -> 1 +ddcms511 comparesig 1 1E-4 -> 1 +ddcms512 comparesig 1 1E-3 -> 1 +ddcms513 comparesig 1 1E-2 -> 1 +ddcms514 comparesig 1 1E-1 -> 1 +ddcms515 comparesig 1 1E-0 -> 0 +ddcms516 comparesig 1 1E+1 -> -1 +ddcms517 comparesig 1 1E+2 -> -1 +ddcms518 comparesig 1 1E+3 -> -1 +ddcms519 comparesig 1 1E+4 -> -1 +ddcms521 comparesig 1 1E+5 -> -1 +ddcms522 comparesig 1 1E+6 -> -1 +ddcms523 comparesig 1 1E+7 -> -1 +ddcms524 comparesig 1 1E+8 -> -1 +ddcms525 comparesig 1 1E+9 -> -1 +ddcms526 comparesig 1 1E+10 -> -1 +ddcms527 comparesig 1 1E+11 -> -1 +ddcms528 comparesig 1 1E+12 -> -1 +ddcms529 comparesig 1 1E+13 -> -1 +ddcms530 comparesig 1 1E+14 -> -1 +ddcms531 comparesig 1 1E+15 -> -1 +-- LR swap +ddcms540 comparesig 1E-15 1 -> -1 +ddcms541 comparesig 1E-14 1 -> -1 +ddcms542 comparesig 1E-13 1 -> -1 +ddcms543 comparesig 1E-12 1 -> -1 +ddcms544 comparesig 1E-11 1 -> -1 +ddcms545 comparesig 1E-10 1 -> -1 +ddcms546 comparesig 1E-9 1 -> -1 +ddcms547 comparesig 1E-8 1 -> -1 +ddcms548 comparesig 1E-7 1 -> -1 +ddcms549 comparesig 1E-6 1 -> -1 +ddcms550 comparesig 1E-5 1 -> -1 +ddcms551 comparesig 1E-4 1 -> -1 +ddcms552 comparesig 1E-3 1 -> -1 +ddcms553 comparesig 1E-2 1 -> -1 +ddcms554 comparesig 1E-1 1 -> -1 +ddcms555 comparesig 1E-0 1 -> 0 +ddcms556 comparesig 1E+1 1 -> 1 +ddcms557 comparesig 1E+2 1 -> 1 +ddcms558 comparesig 1E+3 1 -> 1 +ddcms559 comparesig 1E+4 1 -> 1 +ddcms561 comparesig 1E+5 1 -> 1 +ddcms562 comparesig 1E+6 1 -> 1 +ddcms563 comparesig 1E+7 1 -> 1 +ddcms564 comparesig 1E+8 1 -> 1 +ddcms565 comparesig 1E+9 1 -> 1 +ddcms566 comparesig 1E+10 1 -> 1 +ddcms567 comparesig 1E+11 1 -> 1 +ddcms568 comparesig 1E+12 1 -> 1 +ddcms569 comparesig 1E+13 1 -> 1 +ddcms570 comparesig 1E+14 1 -> 1 +ddcms571 comparesig 1E+15 1 -> 1 +-- similar with a useful coefficient, one side only +ddcms580 comparesig 0.000000987654321 1E-15 -> 1 +ddcms581 comparesig 0.000000987654321 1E-14 -> 1 +ddcms582 comparesig 0.000000987654321 1E-13 -> 1 +ddcms583 comparesig 0.000000987654321 1E-12 -> 1 +ddcms584 comparesig 0.000000987654321 1E-11 -> 1 +ddcms585 comparesig 0.000000987654321 1E-10 -> 1 +ddcms586 comparesig 0.000000987654321 1E-9 -> 1 +ddcms587 comparesig 0.000000987654321 1E-8 -> 1 +ddcms588 comparesig 0.000000987654321 1E-7 -> 1 +ddcms589 comparesig 0.000000987654321 1E-6 -> -1 +ddcms590 comparesig 0.000000987654321 1E-5 -> -1 +ddcms591 comparesig 0.000000987654321 1E-4 -> -1 +ddcms592 comparesig 0.000000987654321 1E-3 -> -1 +ddcms593 comparesig 0.000000987654321 1E-2 -> -1 +ddcms594 comparesig 0.000000987654321 1E-1 -> -1 +ddcms595 comparesig 0.000000987654321 1E-0 -> -1 +ddcms596 comparesig 0.000000987654321 1E+1 -> -1 +ddcms597 comparesig 0.000000987654321 1E+2 -> -1 +ddcms598 comparesig 0.000000987654321 1E+3 -> -1 +ddcms599 comparesig 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +ddcms600 comparesig 12 12.2345 -> -1 +ddcms601 comparesig 12.0 12.2345 -> -1 +ddcms602 comparesig 12.00 12.2345 -> -1 +ddcms603 comparesig 12.000 12.2345 -> -1 +ddcms604 comparesig 12.0000 12.2345 -> -1 +ddcms605 comparesig 12.00000 12.2345 -> -1 +ddcms606 comparesig 12.000000 12.2345 -> -1 +ddcms607 comparesig 12.0000000 12.2345 -> -1 +ddcms608 comparesig 12.00000000 12.2345 -> -1 +ddcms609 comparesig 12.000000000 12.2345 -> -1 +ddcms610 comparesig 12.1234 12 -> 1 +ddcms611 comparesig 12.1234 12.0 -> 1 +ddcms612 comparesig 12.1234 12.00 -> 1 +ddcms613 comparesig 12.1234 12.000 -> 1 +ddcms614 comparesig 12.1234 12.0000 -> 1 +ddcms615 comparesig 12.1234 12.00000 -> 1 +ddcms616 comparesig 12.1234 12.000000 -> 1 +ddcms617 comparesig 12.1234 12.0000000 -> 1 +ddcms618 comparesig 12.1234 12.00000000 -> 1 +ddcms619 comparesig 12.1234 12.000000000 -> 1 +ddcms620 comparesig -12 -12.2345 -> 1 +ddcms621 comparesig -12.0 -12.2345 -> 1 +ddcms622 comparesig -12.00 -12.2345 -> 1 +ddcms623 comparesig -12.000 -12.2345 -> 1 +ddcms624 comparesig -12.0000 -12.2345 -> 1 +ddcms625 comparesig -12.00000 -12.2345 -> 1 +ddcms626 comparesig -12.000000 -12.2345 -> 1 +ddcms627 comparesig -12.0000000 -12.2345 -> 1 +ddcms628 comparesig -12.00000000 -12.2345 -> 1 +ddcms629 comparesig -12.000000000 -12.2345 -> 1 +ddcms630 comparesig -12.1234 -12 -> -1 +ddcms631 comparesig -12.1234 -12.0 -> -1 +ddcms632 comparesig -12.1234 -12.00 -> -1 +ddcms633 comparesig -12.1234 -12.000 -> -1 +ddcms634 comparesig -12.1234 -12.0000 -> -1 +ddcms635 comparesig -12.1234 -12.00000 -> -1 +ddcms636 comparesig -12.1234 -12.000000 -> -1 +ddcms637 comparesig -12.1234 -12.0000000 -> -1 +ddcms638 comparesig -12.1234 -12.00000000 -> -1 +ddcms639 comparesig -12.1234 -12.000000000 -> -1 + +-- extended zeros +ddcms640 comparesig 0 0 -> 0 +ddcms641 comparesig 0 -0 -> 0 +ddcms642 comparesig 0 -0.0 -> 0 +ddcms643 comparesig 0 0.0 -> 0 +ddcms644 comparesig -0 0 -> 0 +ddcms645 comparesig -0 -0 -> 0 +ddcms646 comparesig -0 -0.0 -> 0 +ddcms647 comparesig -0 0.0 -> 0 +ddcms648 comparesig 0.0 0 -> 0 +ddcms649 comparesig 0.0 -0 -> 0 +ddcms650 comparesig 0.0 -0.0 -> 0 +ddcms651 comparesig 0.0 0.0 -> 0 +ddcms652 comparesig -0.0 0 -> 0 +ddcms653 comparesig -0.0 -0 -> 0 +ddcms654 comparesig -0.0 -0.0 -> 0 +ddcms655 comparesig -0.0 0.0 -> 0 + +ddcms656 comparesig -0E1 0.0 -> 0 +ddcms657 comparesig -0E2 0.0 -> 0 +ddcms658 comparesig 0E1 0.0 -> 0 +ddcms659 comparesig 0E2 0.0 -> 0 +ddcms660 comparesig -0E1 0 -> 0 +ddcms661 comparesig -0E2 0 -> 0 +ddcms662 comparesig 0E1 0 -> 0 +ddcms663 comparesig 0E2 0 -> 0 +ddcms664 comparesig -0E1 -0E1 -> 0 +ddcms665 comparesig -0E2 -0E1 -> 0 +ddcms666 comparesig 0E1 -0E1 -> 0 +ddcms667 comparesig 0E2 -0E1 -> 0 +ddcms668 comparesig -0E1 -0E2 -> 0 +ddcms669 comparesig -0E2 -0E2 -> 0 +ddcms670 comparesig 0E1 -0E2 -> 0 +ddcms671 comparesig 0E2 -0E2 -> 0 +ddcms672 comparesig -0E1 0E1 -> 0 +ddcms673 comparesig -0E2 0E1 -> 0 +ddcms674 comparesig 0E1 0E1 -> 0 +ddcms675 comparesig 0E2 0E1 -> 0 +ddcms676 comparesig -0E1 0E2 -> 0 +ddcms677 comparesig -0E2 0E2 -> 0 +ddcms678 comparesig 0E1 0E2 -> 0 +ddcms679 comparesig 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +ddcms680 comparesig 12 12 -> 0 +ddcms681 comparesig 12 12.0 -> 0 +ddcms682 comparesig 12 12.00 -> 0 +ddcms683 comparesig 12 12.000 -> 0 +ddcms684 comparesig 12 12.0000 -> 0 +ddcms685 comparesig 12 12.00000 -> 0 +ddcms686 comparesig 12 12.000000 -> 0 +ddcms687 comparesig 12 12.0000000 -> 0 +ddcms688 comparesig 12 12.00000000 -> 0 +ddcms689 comparesig 12 12.000000000 -> 0 +ddcms690 comparesig 12 12 -> 0 +ddcms691 comparesig 12.0 12 -> 0 +ddcms692 comparesig 12.00 12 -> 0 +ddcms693 comparesig 12.000 12 -> 0 +ddcms694 comparesig 12.0000 12 -> 0 +ddcms695 comparesig 12.00000 12 -> 0 +ddcms696 comparesig 12.000000 12 -> 0 +ddcms697 comparesig 12.0000000 12 -> 0 +ddcms698 comparesig 12.00000000 12 -> 0 +ddcms699 comparesig 12.000000000 12 -> 0 + +-- first, second, & last digit +ddcms700 comparesig 1234567890123456 1234567890123455 -> 1 +ddcms701 comparesig 1234567890123456 1234567890123456 -> 0 +ddcms702 comparesig 1234567890123456 1234567890123457 -> -1 +ddcms703 comparesig 1234567890123456 0234567890123456 -> 1 +ddcms704 comparesig 1234567890123456 1234567890123456 -> 0 +ddcms705 comparesig 1234567890123456 2234567890123456 -> -1 +ddcms706 comparesig 1134567890123456 1034567890123456 -> 1 +ddcms707 comparesig 1134567890123456 1134567890123456 -> 0 +ddcms708 comparesig 1134567890123456 1234567890123456 -> -1 + +-- miscellaneous +ddcms721 comparesig 12345678000 1 -> 1 +ddcms722 comparesig 1 12345678000 -> -1 +ddcms723 comparesig 1234567800 1 -> 1 +ddcms724 comparesig 1 1234567800 -> -1 +ddcms725 comparesig 1234567890 1 -> 1 +ddcms726 comparesig 1 1234567890 -> -1 +ddcms727 comparesig 1234567891 1 -> 1 +ddcms728 comparesig 1 1234567891 -> -1 +ddcms729 comparesig 12345678901 1 -> 1 +ddcms730 comparesig 1 12345678901 -> -1 +ddcms731 comparesig 1234567896 1 -> 1 +ddcms732 comparesig 1 1234567896 -> -1 + +-- residue cases at lower precision +ddcms740 comparesig 1 0.9999999 -> 1 +ddcms741 comparesig 1 0.999999 -> 1 +ddcms742 comparesig 1 0.99999 -> 1 +ddcms743 comparesig 1 1.0000 -> 0 +ddcms744 comparesig 1 1.00001 -> -1 +ddcms745 comparesig 1 1.000001 -> -1 +ddcms746 comparesig 1 1.0000001 -> -1 +ddcms750 comparesig 0.9999999 1 -> -1 +ddcms751 comparesig 0.999999 1 -> -1 +ddcms752 comparesig 0.99999 1 -> -1 +ddcms753 comparesig 1.0000 1 -> 0 +ddcms754 comparesig 1.00001 1 -> 1 +ddcms755 comparesig 1.000001 1 -> 1 +ddcms756 comparesig 1.0000001 1 -> 1 + +-- Specials +ddcms780 comparesig Inf -Inf -> 1 +ddcms781 comparesig Inf -1000 -> 1 +ddcms782 comparesig Inf -1 -> 1 +ddcms783 comparesig Inf -0 -> 1 +ddcms784 comparesig Inf 0 -> 1 +ddcms785 comparesig Inf 1 -> 1 +ddcms786 comparesig Inf 1000 -> 1 +ddcms787 comparesig Inf Inf -> 0 +ddcms788 comparesig -1000 Inf -> -1 +ddcms789 comparesig -Inf Inf -> -1 +ddcms790 comparesig -1 Inf -> -1 +ddcms791 comparesig -0 Inf -> -1 +ddcms792 comparesig 0 Inf -> -1 +ddcms793 comparesig 1 Inf -> -1 +ddcms794 comparesig 1000 Inf -> -1 +ddcms795 comparesig Inf Inf -> 0 + +ddcms800 comparesig -Inf -Inf -> 0 +ddcms801 comparesig -Inf -1000 -> -1 +ddcms802 comparesig -Inf -1 -> -1 +ddcms803 comparesig -Inf -0 -> -1 +ddcms804 comparesig -Inf 0 -> -1 +ddcms805 comparesig -Inf 1 -> -1 +ddcms806 comparesig -Inf 1000 -> -1 +ddcms807 comparesig -Inf Inf -> -1 +ddcms808 comparesig -Inf -Inf -> 0 +ddcms809 comparesig -1000 -Inf -> 1 +ddcms810 comparesig -1 -Inf -> 1 +ddcms811 comparesig -0 -Inf -> 1 +ddcms812 comparesig 0 -Inf -> 1 +ddcms813 comparesig 1 -Inf -> 1 +ddcms814 comparesig 1000 -Inf -> 1 +ddcms815 comparesig Inf -Inf -> 1 + +ddcms821 comparesig NaN -Inf -> NaN Invalid_operation +ddcms822 comparesig NaN -1000 -> NaN Invalid_operation +ddcms823 comparesig NaN -1 -> NaN Invalid_operation +ddcms824 comparesig NaN -0 -> NaN Invalid_operation +ddcms825 comparesig NaN 0 -> NaN Invalid_operation +ddcms826 comparesig NaN 1 -> NaN Invalid_operation +ddcms827 comparesig NaN 1000 -> NaN Invalid_operation +ddcms828 comparesig NaN Inf -> NaN Invalid_operation +ddcms829 comparesig NaN NaN -> NaN Invalid_operation +ddcms830 comparesig -Inf NaN -> NaN Invalid_operation +ddcms831 comparesig -1000 NaN -> NaN Invalid_operation +ddcms832 comparesig -1 NaN -> NaN Invalid_operation +ddcms833 comparesig -0 NaN -> NaN Invalid_operation +ddcms834 comparesig 0 NaN -> NaN Invalid_operation +ddcms835 comparesig 1 NaN -> NaN Invalid_operation +ddcms836 comparesig 1000 NaN -> NaN Invalid_operation +ddcms837 comparesig Inf NaN -> NaN Invalid_operation +ddcms838 comparesig -NaN -NaN -> -NaN Invalid_operation +ddcms839 comparesig +NaN -NaN -> NaN Invalid_operation +ddcms840 comparesig -NaN +NaN -> -NaN Invalid_operation + +ddcms841 comparesig sNaN -Inf -> NaN Invalid_operation +ddcms842 comparesig sNaN -1000 -> NaN Invalid_operation +ddcms843 comparesig sNaN -1 -> NaN Invalid_operation +ddcms844 comparesig sNaN -0 -> NaN Invalid_operation +ddcms845 comparesig sNaN 0 -> NaN Invalid_operation +ddcms846 comparesig sNaN 1 -> NaN Invalid_operation +ddcms847 comparesig sNaN 1000 -> NaN Invalid_operation +ddcms848 comparesig sNaN NaN -> NaN Invalid_operation +ddcms849 comparesig sNaN sNaN -> NaN Invalid_operation +ddcms850 comparesig NaN sNaN -> NaN Invalid_operation +ddcms851 comparesig -Inf sNaN -> NaN Invalid_operation +ddcms852 comparesig -1000 sNaN -> NaN Invalid_operation +ddcms853 comparesig -1 sNaN -> NaN Invalid_operation +ddcms854 comparesig -0 sNaN -> NaN Invalid_operation +ddcms855 comparesig 0 sNaN -> NaN Invalid_operation +ddcms856 comparesig 1 sNaN -> NaN Invalid_operation +ddcms857 comparesig 1000 sNaN -> NaN Invalid_operation +ddcms858 comparesig Inf sNaN -> NaN Invalid_operation +ddcms859 comparesig NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddcms860 comparesig NaN9 -Inf -> NaN9 Invalid_operation +ddcms861 comparesig NaN8 999 -> NaN8 Invalid_operation +ddcms862 comparesig NaN77 Inf -> NaN77 Invalid_operation +ddcms863 comparesig -NaN67 NaN5 -> -NaN67 Invalid_operation +ddcms864 comparesig -Inf -NaN4 -> -NaN4 Invalid_operation +ddcms865 comparesig -999 -NaN33 -> -NaN33 Invalid_operation +ddcms866 comparesig Inf NaN2 -> NaN2 Invalid_operation +ddcms867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation +ddcms868 comparesig +NaN41 -NaN42 -> NaN41 Invalid_operation +ddcms869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation +ddcms870 comparesig +NaN41 +NaN42 -> NaN41 Invalid_operation + +ddcms871 comparesig -sNaN99 -Inf -> -NaN99 Invalid_operation +ddcms872 comparesig sNaN98 -11 -> NaN98 Invalid_operation +ddcms873 comparesig sNaN97 NaN -> NaN97 Invalid_operation +ddcms874 comparesig sNaN16 sNaN94 -> NaN16 Invalid_operation +ddcms875 comparesig NaN85 sNaN83 -> NaN83 Invalid_operation +ddcms876 comparesig -Inf sNaN92 -> NaN92 Invalid_operation +ddcms877 comparesig 088 sNaN81 -> NaN81 Invalid_operation +ddcms878 comparesig Inf sNaN90 -> NaN90 Invalid_operation +ddcms879 comparesig NaN -sNaN89 -> -NaN89 Invalid_operation + +-- wide range +ddcms880 comparesig +1.23456789012345E-0 9E+384 -> -1 +ddcms881 comparesig 9E+384 +1.23456789012345E-0 -> 1 +ddcms882 comparesig +0.100 9E-383 -> 1 +ddcms883 comparesig 9E-383 +0.100 -> -1 +ddcms885 comparesig -1.23456789012345E-0 9E+384 -> -1 +ddcms886 comparesig 9E+384 -1.23456789012345E-0 -> 1 +ddcms887 comparesig -0.100 9E-383 -> -1 +ddcms888 comparesig 9E-383 -0.100 -> 1 + +-- signs +ddcms901 comparesig 1e+77 1e+11 -> 1 +ddcms902 comparesig 1e+77 -1e+11 -> 1 +ddcms903 comparesig -1e+77 1e+11 -> -1 +ddcms904 comparesig -1e+77 -1e+11 -> -1 +ddcms905 comparesig 1e-77 1e-11 -> -1 +ddcms906 comparesig 1e-77 -1e-11 -> 1 +ddcms907 comparesig -1e-77 1e-11 -> -1 +ddcms908 comparesig -1e-77 -1e-11 -> 1 + +-- Null tests +ddcms990 comparesig 10 # -> NaN Invalid_operation +ddcms991 comparesig # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddCompareTotal.decTest b/Lib/test/decimaltestdata/ddCompareTotal.decTest index 76beed5681b..10c984c7ff5 100644 --- a/Lib/test/decimaltestdata/ddCompareTotal.decTest +++ b/Lib/test/decimaltestdata/ddCompareTotal.decTest @@ -1,706 +1,706 @@ ------------------------------------------------------------------------- --- ddCompareTotal.decTest -- decDouble comparison using total ordering-- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddcot001 comparetotal -2 -2 -> 0 -ddcot002 comparetotal -2 -1 -> -1 -ddcot003 comparetotal -2 0 -> -1 -ddcot004 comparetotal -2 1 -> -1 -ddcot005 comparetotal -2 2 -> -1 -ddcot006 comparetotal -1 -2 -> 1 -ddcot007 comparetotal -1 -1 -> 0 -ddcot008 comparetotal -1 0 -> -1 -ddcot009 comparetotal -1 1 -> -1 -ddcot010 comparetotal -1 2 -> -1 -ddcot011 comparetotal 0 -2 -> 1 -ddcot012 comparetotal 0 -1 -> 1 -ddcot013 comparetotal 0 0 -> 0 -ddcot014 comparetotal 0 1 -> -1 -ddcot015 comparetotal 0 2 -> -1 -ddcot016 comparetotal 1 -2 -> 1 -ddcot017 comparetotal 1 -1 -> 1 -ddcot018 comparetotal 1 0 -> 1 -ddcot019 comparetotal 1 1 -> 0 -ddcot020 comparetotal 1 2 -> -1 -ddcot021 comparetotal 2 -2 -> 1 -ddcot022 comparetotal 2 -1 -> 1 -ddcot023 comparetotal 2 0 -> 1 -ddcot025 comparetotal 2 1 -> 1 -ddcot026 comparetotal 2 2 -> 0 - -ddcot031 comparetotal -20 -20 -> 0 -ddcot032 comparetotal -20 -10 -> -1 -ddcot033 comparetotal -20 00 -> -1 -ddcot034 comparetotal -20 10 -> -1 -ddcot035 comparetotal -20 20 -> -1 -ddcot036 comparetotal -10 -20 -> 1 -ddcot037 comparetotal -10 -10 -> 0 -ddcot038 comparetotal -10 00 -> -1 -ddcot039 comparetotal -10 10 -> -1 -ddcot040 comparetotal -10 20 -> -1 -ddcot041 comparetotal 00 -20 -> 1 -ddcot042 comparetotal 00 -10 -> 1 -ddcot043 comparetotal 00 00 -> 0 -ddcot044 comparetotal 00 10 -> -1 -ddcot045 comparetotal 00 20 -> -1 -ddcot046 comparetotal 10 -20 -> 1 -ddcot047 comparetotal 10 -10 -> 1 -ddcot048 comparetotal 10 00 -> 1 -ddcot049 comparetotal 10 10 -> 0 -ddcot050 comparetotal 10 20 -> -1 -ddcot051 comparetotal 20 -20 -> 1 -ddcot052 comparetotal 20 -10 -> 1 -ddcot053 comparetotal 20 00 -> 1 -ddcot055 comparetotal 20 10 -> 1 -ddcot056 comparetotal 20 20 -> 0 - -ddcot061 comparetotal -2.0 -2.0 -> 0 -ddcot062 comparetotal -2.0 -1.0 -> -1 -ddcot063 comparetotal -2.0 0.0 -> -1 -ddcot064 comparetotal -2.0 1.0 -> -1 -ddcot065 comparetotal -2.0 2.0 -> -1 -ddcot066 comparetotal -1.0 -2.0 -> 1 -ddcot067 comparetotal -1.0 -1.0 -> 0 -ddcot068 comparetotal -1.0 0.0 -> -1 -ddcot069 comparetotal -1.0 1.0 -> -1 -ddcot070 comparetotal -1.0 2.0 -> -1 -ddcot071 comparetotal 0.0 -2.0 -> 1 -ddcot072 comparetotal 0.0 -1.0 -> 1 -ddcot073 comparetotal 0.0 0.0 -> 0 -ddcot074 comparetotal 0.0 1.0 -> -1 -ddcot075 comparetotal 0.0 2.0 -> -1 -ddcot076 comparetotal 1.0 -2.0 -> 1 -ddcot077 comparetotal 1.0 -1.0 -> 1 -ddcot078 comparetotal 1.0 0.0 -> 1 -ddcot079 comparetotal 1.0 1.0 -> 0 -ddcot080 comparetotal 1.0 2.0 -> -1 -ddcot081 comparetotal 2.0 -2.0 -> 1 -ddcot082 comparetotal 2.0 -1.0 -> 1 -ddcot083 comparetotal 2.0 0.0 -> 1 -ddcot085 comparetotal 2.0 1.0 -> 1 -ddcot086 comparetotal 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -ddcot090 comparetotal 9.99999999E+384 9.99999999E+384 -> 0 -ddcot091 comparetotal -9.99999999E+384 9.99999999E+384 -> -1 -ddcot092 comparetotal 9.99999999E+384 -9.99999999E+384 -> 1 -ddcot093 comparetotal -9.99999999E+384 -9.99999999E+384 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -ddcot100 comparetotal 7.0 7.0 -> 0 -ddcot101 comparetotal 7.0 7 -> -1 -ddcot102 comparetotal 7 7.0 -> 1 -ddcot103 comparetotal 7E+0 7.0 -> 1 -ddcot104 comparetotal 70E-1 7.0 -> 0 -ddcot105 comparetotal 0.7E+1 7 -> 0 -ddcot106 comparetotal 70E-1 7 -> -1 -ddcot107 comparetotal 7.0 7E+0 -> -1 -ddcot108 comparetotal 7.0 70E-1 -> 0 -ddcot109 comparetotal 7 0.7E+1 -> 0 -ddcot110 comparetotal 7 70E-1 -> 1 - -ddcot120 comparetotal 8.0 7.0 -> 1 -ddcot121 comparetotal 8.0 7 -> 1 -ddcot122 comparetotal 8 7.0 -> 1 -ddcot123 comparetotal 8E+0 7.0 -> 1 -ddcot124 comparetotal 80E-1 7.0 -> 1 -ddcot125 comparetotal 0.8E+1 7 -> 1 -ddcot126 comparetotal 80E-1 7 -> 1 -ddcot127 comparetotal 8.0 7E+0 -> 1 -ddcot128 comparetotal 8.0 70E-1 -> 1 -ddcot129 comparetotal 8 0.7E+1 -> 1 -ddcot130 comparetotal 8 70E-1 -> 1 - -ddcot140 comparetotal 8.0 9.0 -> -1 -ddcot141 comparetotal 8.0 9 -> -1 -ddcot142 comparetotal 8 9.0 -> -1 -ddcot143 comparetotal 8E+0 9.0 -> -1 -ddcot144 comparetotal 80E-1 9.0 -> -1 -ddcot145 comparetotal 0.8E+1 9 -> -1 -ddcot146 comparetotal 80E-1 9 -> -1 -ddcot147 comparetotal 8.0 9E+0 -> -1 -ddcot148 comparetotal 8.0 90E-1 -> -1 -ddcot149 comparetotal 8 0.9E+1 -> -1 -ddcot150 comparetotal 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ddcot200 comparetotal -7.0 7.0 -> -1 -ddcot201 comparetotal -7.0 7 -> -1 -ddcot202 comparetotal -7 7.0 -> -1 -ddcot203 comparetotal -7E+0 7.0 -> -1 -ddcot204 comparetotal -70E-1 7.0 -> -1 -ddcot205 comparetotal -0.7E+1 7 -> -1 -ddcot206 comparetotal -70E-1 7 -> -1 -ddcot207 comparetotal -7.0 7E+0 -> -1 -ddcot208 comparetotal -7.0 70E-1 -> -1 -ddcot209 comparetotal -7 0.7E+1 -> -1 -ddcot210 comparetotal -7 70E-1 -> -1 - -ddcot220 comparetotal -8.0 7.0 -> -1 -ddcot221 comparetotal -8.0 7 -> -1 -ddcot222 comparetotal -8 7.0 -> -1 -ddcot223 comparetotal -8E+0 7.0 -> -1 -ddcot224 comparetotal -80E-1 7.0 -> -1 -ddcot225 comparetotal -0.8E+1 7 -> -1 -ddcot226 comparetotal -80E-1 7 -> -1 -ddcot227 comparetotal -8.0 7E+0 -> -1 -ddcot228 comparetotal -8.0 70E-1 -> -1 -ddcot229 comparetotal -8 0.7E+1 -> -1 -ddcot230 comparetotal -8 70E-1 -> -1 - -ddcot240 comparetotal -8.0 9.0 -> -1 -ddcot241 comparetotal -8.0 9 -> -1 -ddcot242 comparetotal -8 9.0 -> -1 -ddcot243 comparetotal -8E+0 9.0 -> -1 -ddcot244 comparetotal -80E-1 9.0 -> -1 -ddcot245 comparetotal -0.8E+1 9 -> -1 -ddcot246 comparetotal -80E-1 9 -> -1 -ddcot247 comparetotal -8.0 9E+0 -> -1 -ddcot248 comparetotal -8.0 90E-1 -> -1 -ddcot249 comparetotal -8 0.9E+1 -> -1 -ddcot250 comparetotal -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ddcot300 comparetotal 7.0 -7.0 -> 1 -ddcot301 comparetotal 7.0 -7 -> 1 -ddcot302 comparetotal 7 -7.0 -> 1 -ddcot303 comparetotal 7E+0 -7.0 -> 1 -ddcot304 comparetotal 70E-1 -7.0 -> 1 -ddcot305 comparetotal .7E+1 -7 -> 1 -ddcot306 comparetotal 70E-1 -7 -> 1 -ddcot307 comparetotal 7.0 -7E+0 -> 1 -ddcot308 comparetotal 7.0 -70E-1 -> 1 -ddcot309 comparetotal 7 -.7E+1 -> 1 -ddcot310 comparetotal 7 -70E-1 -> 1 - -ddcot320 comparetotal 8.0 -7.0 -> 1 -ddcot321 comparetotal 8.0 -7 -> 1 -ddcot322 comparetotal 8 -7.0 -> 1 -ddcot323 comparetotal 8E+0 -7.0 -> 1 -ddcot324 comparetotal 80E-1 -7.0 -> 1 -ddcot325 comparetotal .8E+1 -7 -> 1 -ddcot326 comparetotal 80E-1 -7 -> 1 -ddcot327 comparetotal 8.0 -7E+0 -> 1 -ddcot328 comparetotal 8.0 -70E-1 -> 1 -ddcot329 comparetotal 8 -.7E+1 -> 1 -ddcot330 comparetotal 8 -70E-1 -> 1 - -ddcot340 comparetotal 8.0 -9.0 -> 1 -ddcot341 comparetotal 8.0 -9 -> 1 -ddcot342 comparetotal 8 -9.0 -> 1 -ddcot343 comparetotal 8E+0 -9.0 -> 1 -ddcot344 comparetotal 80E-1 -9.0 -> 1 -ddcot345 comparetotal .8E+1 -9 -> 1 -ddcot346 comparetotal 80E-1 -9 -> 1 -ddcot347 comparetotal 8.0 -9E+0 -> 1 -ddcot348 comparetotal 8.0 -90E-1 -> 1 -ddcot349 comparetotal 8 -.9E+1 -> 1 -ddcot350 comparetotal 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -ddcot400 comparetotal -7.0 -7.0 -> 0 -ddcot401 comparetotal -7.0 -7 -> 1 -ddcot402 comparetotal -7 -7.0 -> -1 -ddcot403 comparetotal -7E+0 -7.0 -> -1 -ddcot404 comparetotal -70E-1 -7.0 -> 0 -ddcot405 comparetotal -.7E+1 -7 -> 0 -ddcot406 comparetotal -70E-1 -7 -> 1 -ddcot407 comparetotal -7.0 -7E+0 -> 1 -ddcot408 comparetotal -7.0 -70E-1 -> 0 -ddcot409 comparetotal -7 -.7E+1 -> 0 -ddcot410 comparetotal -7 -70E-1 -> -1 - -ddcot420 comparetotal -8.0 -7.0 -> -1 -ddcot421 comparetotal -8.0 -7 -> -1 -ddcot422 comparetotal -8 -7.0 -> -1 -ddcot423 comparetotal -8E+0 -7.0 -> -1 -ddcot424 comparetotal -80E-1 -7.0 -> -1 -ddcot425 comparetotal -.8E+1 -7 -> -1 -ddcot426 comparetotal -80E-1 -7 -> -1 -ddcot427 comparetotal -8.0 -7E+0 -> -1 -ddcot428 comparetotal -8.0 -70E-1 -> -1 -ddcot429 comparetotal -8 -.7E+1 -> -1 -ddcot430 comparetotal -8 -70E-1 -> -1 - -ddcot440 comparetotal -8.0 -9.0 -> 1 -ddcot441 comparetotal -8.0 -9 -> 1 -ddcot442 comparetotal -8 -9.0 -> 1 -ddcot443 comparetotal -8E+0 -9.0 -> 1 -ddcot444 comparetotal -80E-1 -9.0 -> 1 -ddcot445 comparetotal -.8E+1 -9 -> 1 -ddcot446 comparetotal -80E-1 -9 -> 1 -ddcot447 comparetotal -8.0 -9E+0 -> 1 -ddcot448 comparetotal -8.0 -90E-1 -> 1 -ddcot449 comparetotal -8 -.9E+1 -> 1 -ddcot450 comparetotal -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -ddcot473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 -ddcot474 comparetotal 123.456000000000E+89 123.456E+89 -> -1 -ddcot475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 -ddcot476 comparetotal 123.4560000000E+89 123.456E+89 -> -1 -ddcot477 comparetotal 123.456000000E-89 123.456E-89 -> -1 -ddcot478 comparetotal 123.45600000E+89 123.456E+89 -> -1 -ddcot479 comparetotal 123.4560000E-89 123.456E-89 -> -1 -ddcot480 comparetotal 123.456000E+89 123.456E+89 -> -1 -ddcot481 comparetotal 123.45600E-89 123.456E-89 -> -1 -ddcot482 comparetotal 123.4560E+89 123.456E+89 -> -1 -ddcot483 comparetotal 123.456E-89 123.456E-89 -> 0 -ddcot487 comparetotal 123.456E+89 123.4560000000000E+89 -> 1 -ddcot488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 -ddcot489 comparetotal 123.456E+89 123.45600000000E+89 -> 1 -ddcot490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 -ddcot491 comparetotal 123.456E+89 123.456000000E+89 -> 1 -ddcot492 comparetotal 123.456E-89 123.45600000E-89 -> 1 -ddcot493 comparetotal 123.456E+89 123.4560000E+89 -> 1 -ddcot494 comparetotal 123.456E-89 123.456000E-89 -> 1 -ddcot495 comparetotal 123.456E+89 123.45600E+89 -> 1 -ddcot496 comparetotal 123.456E-89 123.4560E-89 -> 1 -ddcot497 comparetotal 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -ddcot498 comparetotal 1 1E-17 -> 1 -ddcot499 comparetotal 1 1E-16 -> 1 -ddcot500 comparetotal 1 1E-15 -> 1 -ddcot501 comparetotal 1 1E-14 -> 1 -ddcot502 comparetotal 1 1E-13 -> 1 -ddcot503 comparetotal 1 1E-12 -> 1 -ddcot504 comparetotal 1 1E-11 -> 1 -ddcot505 comparetotal 1 1E-10 -> 1 -ddcot506 comparetotal 1 1E-9 -> 1 -ddcot507 comparetotal 1 1E-8 -> 1 -ddcot508 comparetotal 1 1E-7 -> 1 -ddcot509 comparetotal 1 1E-6 -> 1 -ddcot510 comparetotal 1 1E-5 -> 1 -ddcot511 comparetotal 1 1E-4 -> 1 -ddcot512 comparetotal 1 1E-3 -> 1 -ddcot513 comparetotal 1 1E-2 -> 1 -ddcot514 comparetotal 1 1E-1 -> 1 -ddcot515 comparetotal 1 1E-0 -> 0 -ddcot516 comparetotal 1 1E+1 -> -1 -ddcot517 comparetotal 1 1E+2 -> -1 -ddcot518 comparetotal 1 1E+3 -> -1 -ddcot519 comparetotal 1 1E+4 -> -1 -ddcot521 comparetotal 1 1E+5 -> -1 -ddcot522 comparetotal 1 1E+6 -> -1 -ddcot523 comparetotal 1 1E+7 -> -1 -ddcot524 comparetotal 1 1E+8 -> -1 -ddcot525 comparetotal 1 1E+9 -> -1 -ddcot526 comparetotal 1 1E+10 -> -1 -ddcot527 comparetotal 1 1E+11 -> -1 -ddcot528 comparetotal 1 1E+12 -> -1 -ddcot529 comparetotal 1 1E+13 -> -1 -ddcot530 comparetotal 1 1E+14 -> -1 -ddcot531 comparetotal 1 1E+15 -> -1 -ddcot532 comparetotal 1 1E+16 -> -1 -ddcot533 comparetotal 1 1E+17 -> -1 --- LR swap -ddcot538 comparetotal 1E-17 1 -> -1 -ddcot539 comparetotal 1E-16 1 -> -1 -ddcot540 comparetotal 1E-15 1 -> -1 -ddcot541 comparetotal 1E-14 1 -> -1 -ddcot542 comparetotal 1E-13 1 -> -1 -ddcot543 comparetotal 1E-12 1 -> -1 -ddcot544 comparetotal 1E-11 1 -> -1 -ddcot545 comparetotal 1E-10 1 -> -1 -ddcot546 comparetotal 1E-9 1 -> -1 -ddcot547 comparetotal 1E-8 1 -> -1 -ddcot548 comparetotal 1E-7 1 -> -1 -ddcot549 comparetotal 1E-6 1 -> -1 -ddcot550 comparetotal 1E-5 1 -> -1 -ddcot551 comparetotal 1E-4 1 -> -1 -ddcot552 comparetotal 1E-3 1 -> -1 -ddcot553 comparetotal 1E-2 1 -> -1 -ddcot554 comparetotal 1E-1 1 -> -1 -ddcot555 comparetotal 1E-0 1 -> 0 -ddcot556 comparetotal 1E+1 1 -> 1 -ddcot557 comparetotal 1E+2 1 -> 1 -ddcot558 comparetotal 1E+3 1 -> 1 -ddcot559 comparetotal 1E+4 1 -> 1 -ddcot561 comparetotal 1E+5 1 -> 1 -ddcot562 comparetotal 1E+6 1 -> 1 -ddcot563 comparetotal 1E+7 1 -> 1 -ddcot564 comparetotal 1E+8 1 -> 1 -ddcot565 comparetotal 1E+9 1 -> 1 -ddcot566 comparetotal 1E+10 1 -> 1 -ddcot567 comparetotal 1E+11 1 -> 1 -ddcot568 comparetotal 1E+12 1 -> 1 -ddcot569 comparetotal 1E+13 1 -> 1 -ddcot570 comparetotal 1E+14 1 -> 1 -ddcot571 comparetotal 1E+15 1 -> 1 -ddcot572 comparetotal 1E+16 1 -> 1 -ddcot573 comparetotal 1E+17 1 -> 1 --- similar with a useful coefficient, one side only -ddcot578 comparetotal 0.000000987654321 1E-17 -> 1 -ddcot579 comparetotal 0.000000987654321 1E-16 -> 1 -ddcot580 comparetotal 0.000000987654321 1E-15 -> 1 -ddcot581 comparetotal 0.000000987654321 1E-14 -> 1 -ddcot582 comparetotal 0.000000987654321 1E-13 -> 1 -ddcot583 comparetotal 0.000000987654321 1E-12 -> 1 -ddcot584 comparetotal 0.000000987654321 1E-11 -> 1 -ddcot585 comparetotal 0.000000987654321 1E-10 -> 1 -ddcot586 comparetotal 0.000000987654321 1E-9 -> 1 -ddcot587 comparetotal 0.000000987654321 1E-8 -> 1 -ddcot588 comparetotal 0.000000987654321 1E-7 -> 1 -ddcot589 comparetotal 0.000000987654321 1E-6 -> -1 -ddcot590 comparetotal 0.000000987654321 1E-5 -> -1 -ddcot591 comparetotal 0.000000987654321 1E-4 -> -1 -ddcot592 comparetotal 0.000000987654321 1E-3 -> -1 -ddcot593 comparetotal 0.000000987654321 1E-2 -> -1 -ddcot594 comparetotal 0.000000987654321 1E-1 -> -1 -ddcot595 comparetotal 0.000000987654321 1E-0 -> -1 -ddcot596 comparetotal 0.000000987654321 1E+1 -> -1 -ddcot597 comparetotal 0.000000987654321 1E+2 -> -1 -ddcot598 comparetotal 0.000000987654321 1E+3 -> -1 -ddcot599 comparetotal 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -ddcot600 comparetotal 12 12.2345 -> -1 -ddcot601 comparetotal 12.0 12.2345 -> -1 -ddcot602 comparetotal 12.00 12.2345 -> -1 -ddcot603 comparetotal 12.000 12.2345 -> -1 -ddcot604 comparetotal 12.0000 12.2345 -> -1 -ddcot605 comparetotal 12.00000 12.2345 -> -1 -ddcot606 comparetotal 12.000000 12.2345 -> -1 -ddcot607 comparetotal 12.0000000 12.2345 -> -1 -ddcot608 comparetotal 12.00000000 12.2345 -> -1 -ddcot609 comparetotal 12.000000000 12.2345 -> -1 -ddcot610 comparetotal 12.1234 12 -> 1 -ddcot611 comparetotal 12.1234 12.0 -> 1 -ddcot612 comparetotal 12.1234 12.00 -> 1 -ddcot613 comparetotal 12.1234 12.000 -> 1 -ddcot614 comparetotal 12.1234 12.0000 -> 1 -ddcot615 comparetotal 12.1234 12.00000 -> 1 -ddcot616 comparetotal 12.1234 12.000000 -> 1 -ddcot617 comparetotal 12.1234 12.0000000 -> 1 -ddcot618 comparetotal 12.1234 12.00000000 -> 1 -ddcot619 comparetotal 12.1234 12.000000000 -> 1 -ddcot620 comparetotal -12 -12.2345 -> 1 -ddcot621 comparetotal -12.0 -12.2345 -> 1 -ddcot622 comparetotal -12.00 -12.2345 -> 1 -ddcot623 comparetotal -12.000 -12.2345 -> 1 -ddcot624 comparetotal -12.0000 -12.2345 -> 1 -ddcot625 comparetotal -12.00000 -12.2345 -> 1 -ddcot626 comparetotal -12.000000 -12.2345 -> 1 -ddcot627 comparetotal -12.0000000 -12.2345 -> 1 -ddcot628 comparetotal -12.00000000 -12.2345 -> 1 -ddcot629 comparetotal -12.000000000 -12.2345 -> 1 -ddcot630 comparetotal -12.1234 -12 -> -1 -ddcot631 comparetotal -12.1234 -12.0 -> -1 -ddcot632 comparetotal -12.1234 -12.00 -> -1 -ddcot633 comparetotal -12.1234 -12.000 -> -1 -ddcot634 comparetotal -12.1234 -12.0000 -> -1 -ddcot635 comparetotal -12.1234 -12.00000 -> -1 -ddcot636 comparetotal -12.1234 -12.000000 -> -1 -ddcot637 comparetotal -12.1234 -12.0000000 -> -1 -ddcot638 comparetotal -12.1234 -12.00000000 -> -1 -ddcot639 comparetotal -12.1234 -12.000000000 -> -1 - --- extended zeros -ddcot640 comparetotal 0 0 -> 0 -ddcot641 comparetotal 0 -0 -> 1 -ddcot642 comparetotal 0 -0.0 -> 1 -ddcot643 comparetotal 0 0.0 -> 1 -ddcot644 comparetotal -0 0 -> -1 -ddcot645 comparetotal -0 -0 -> 0 -ddcot646 comparetotal -0 -0.0 -> -1 -ddcot647 comparetotal -0 0.0 -> -1 -ddcot648 comparetotal 0.0 0 -> -1 -ddcot649 comparetotal 0.0 -0 -> 1 -ddcot650 comparetotal 0.0 -0.0 -> 1 -ddcot651 comparetotal 0.0 0.0 -> 0 -ddcot652 comparetotal -0.0 0 -> -1 -ddcot653 comparetotal -0.0 -0 -> 1 -ddcot654 comparetotal -0.0 -0.0 -> 0 -ddcot655 comparetotal -0.0 0.0 -> -1 - -ddcot656 comparetotal -0E1 0.0 -> -1 -ddcot657 comparetotal -0E2 0.0 -> -1 -ddcot658 comparetotal 0E1 0.0 -> 1 -ddcot659 comparetotal 0E2 0.0 -> 1 -ddcot660 comparetotal -0E1 0 -> -1 -ddcot661 comparetotal -0E2 0 -> -1 -ddcot662 comparetotal 0E1 0 -> 1 -ddcot663 comparetotal 0E2 0 -> 1 -ddcot664 comparetotal -0E1 -0E1 -> 0 -ddcot665 comparetotal -0E2 -0E1 -> -1 -ddcot666 comparetotal 0E1 -0E1 -> 1 -ddcot667 comparetotal 0E2 -0E1 -> 1 -ddcot668 comparetotal -0E1 -0E2 -> 1 -ddcot669 comparetotal -0E2 -0E2 -> 0 -ddcot670 comparetotal 0E1 -0E2 -> 1 -ddcot671 comparetotal 0E2 -0E2 -> 1 -ddcot672 comparetotal -0E1 0E1 -> -1 -ddcot673 comparetotal -0E2 0E1 -> -1 -ddcot674 comparetotal 0E1 0E1 -> 0 -ddcot675 comparetotal 0E2 0E1 -> 1 -ddcot676 comparetotal -0E1 0E2 -> -1 -ddcot677 comparetotal -0E2 0E2 -> -1 -ddcot678 comparetotal 0E1 0E2 -> -1 -ddcot679 comparetotal 0E2 0E2 -> 0 - --- trailing zeros; unit-y -ddcot680 comparetotal 12 12 -> 0 -ddcot681 comparetotal 12 12.0 -> 1 -ddcot682 comparetotal 12 12.00 -> 1 -ddcot683 comparetotal 12 12.000 -> 1 -ddcot684 comparetotal 12 12.0000 -> 1 -ddcot685 comparetotal 12 12.00000 -> 1 -ddcot686 comparetotal 12 12.000000 -> 1 -ddcot687 comparetotal 12 12.0000000 -> 1 -ddcot688 comparetotal 12 12.00000000 -> 1 -ddcot689 comparetotal 12 12.000000000 -> 1 -ddcot690 comparetotal 12 12 -> 0 -ddcot691 comparetotal 12.0 12 -> -1 -ddcot692 comparetotal 12.00 12 -> -1 -ddcot693 comparetotal 12.000 12 -> -1 -ddcot694 comparetotal 12.0000 12 -> -1 -ddcot695 comparetotal 12.00000 12 -> -1 -ddcot696 comparetotal 12.000000 12 -> -1 -ddcot697 comparetotal 12.0000000 12 -> -1 -ddcot698 comparetotal 12.00000000 12 -> -1 -ddcot699 comparetotal 12.000000000 12 -> -1 - --- old long operand checks -ddcot701 comparetotal 12345678000 1 -> 1 -ddcot702 comparetotal 1 12345678000 -> -1 -ddcot703 comparetotal 1234567800 1 -> 1 -ddcot704 comparetotal 1 1234567800 -> -1 -ddcot705 comparetotal 1234567890 1 -> 1 -ddcot706 comparetotal 1 1234567890 -> -1 -ddcot707 comparetotal 1234567891 1 -> 1 -ddcot708 comparetotal 1 1234567891 -> -1 -ddcot709 comparetotal 12345678901 1 -> 1 -ddcot710 comparetotal 1 12345678901 -> -1 -ddcot711 comparetotal 1234567896 1 -> 1 -ddcot712 comparetotal 1 1234567896 -> -1 -ddcot713 comparetotal -1234567891 1 -> -1 -ddcot714 comparetotal 1 -1234567891 -> 1 -ddcot715 comparetotal -12345678901 1 -> -1 -ddcot716 comparetotal 1 -12345678901 -> 1 -ddcot717 comparetotal -1234567896 1 -> -1 -ddcot718 comparetotal 1 -1234567896 -> 1 - --- old residue cases -ddcot740 comparetotal 1 0.9999999 -> 1 -ddcot741 comparetotal 1 0.999999 -> 1 -ddcot742 comparetotal 1 0.99999 -> 1 -ddcot743 comparetotal 1 1.0000 -> 1 -ddcot744 comparetotal 1 1.00001 -> -1 -ddcot745 comparetotal 1 1.000001 -> -1 -ddcot746 comparetotal 1 1.0000001 -> -1 -ddcot750 comparetotal 0.9999999 1 -> -1 -ddcot751 comparetotal 0.999999 1 -> -1 -ddcot752 comparetotal 0.99999 1 -> -1 -ddcot753 comparetotal 1.0000 1 -> -1 -ddcot754 comparetotal 1.00001 1 -> 1 -ddcot755 comparetotal 1.000001 1 -> 1 -ddcot756 comparetotal 1.0000001 1 -> 1 - --- Specials -ddcot780 comparetotal Inf -Inf -> 1 -ddcot781 comparetotal Inf -1000 -> 1 -ddcot782 comparetotal Inf -1 -> 1 -ddcot783 comparetotal Inf -0 -> 1 -ddcot784 comparetotal Inf 0 -> 1 -ddcot785 comparetotal Inf 1 -> 1 -ddcot786 comparetotal Inf 1000 -> 1 -ddcot787 comparetotal Inf Inf -> 0 -ddcot788 comparetotal -1000 Inf -> -1 -ddcot789 comparetotal -Inf Inf -> -1 -ddcot790 comparetotal -1 Inf -> -1 -ddcot791 comparetotal -0 Inf -> -1 -ddcot792 comparetotal 0 Inf -> -1 -ddcot793 comparetotal 1 Inf -> -1 -ddcot794 comparetotal 1000 Inf -> -1 -ddcot795 comparetotal Inf Inf -> 0 - -ddcot800 comparetotal -Inf -Inf -> 0 -ddcot801 comparetotal -Inf -1000 -> -1 -ddcot802 comparetotal -Inf -1 -> -1 -ddcot803 comparetotal -Inf -0 -> -1 -ddcot804 comparetotal -Inf 0 -> -1 -ddcot805 comparetotal -Inf 1 -> -1 -ddcot806 comparetotal -Inf 1000 -> -1 -ddcot807 comparetotal -Inf Inf -> -1 -ddcot808 comparetotal -Inf -Inf -> 0 -ddcot809 comparetotal -1000 -Inf -> 1 -ddcot810 comparetotal -1 -Inf -> 1 -ddcot811 comparetotal -0 -Inf -> 1 -ddcot812 comparetotal 0 -Inf -> 1 -ddcot813 comparetotal 1 -Inf -> 1 -ddcot814 comparetotal 1000 -Inf -> 1 -ddcot815 comparetotal Inf -Inf -> 1 - -ddcot821 comparetotal NaN -Inf -> 1 -ddcot822 comparetotal NaN -1000 -> 1 -ddcot823 comparetotal NaN -1 -> 1 -ddcot824 comparetotal NaN -0 -> 1 -ddcot825 comparetotal NaN 0 -> 1 -ddcot826 comparetotal NaN 1 -> 1 -ddcot827 comparetotal NaN 1000 -> 1 -ddcot828 comparetotal NaN Inf -> 1 -ddcot829 comparetotal NaN NaN -> 0 -ddcot830 comparetotal -Inf NaN -> -1 -ddcot831 comparetotal -1000 NaN -> -1 -ddcot832 comparetotal -1 NaN -> -1 -ddcot833 comparetotal -0 NaN -> -1 -ddcot834 comparetotal 0 NaN -> -1 -ddcot835 comparetotal 1 NaN -> -1 -ddcot836 comparetotal 1000 NaN -> -1 -ddcot837 comparetotal Inf NaN -> -1 -ddcot838 comparetotal -NaN -NaN -> 0 -ddcot839 comparetotal +NaN -NaN -> 1 -ddcot840 comparetotal -NaN +NaN -> -1 - -ddcot841 comparetotal sNaN -sNaN -> 1 -ddcot842 comparetotal sNaN -NaN -> 1 -ddcot843 comparetotal sNaN -Inf -> 1 -ddcot844 comparetotal sNaN -1000 -> 1 -ddcot845 comparetotal sNaN -1 -> 1 -ddcot846 comparetotal sNaN -0 -> 1 -ddcot847 comparetotal sNaN 0 -> 1 -ddcot848 comparetotal sNaN 1 -> 1 -ddcot849 comparetotal sNaN 1000 -> 1 -ddcot850 comparetotal sNaN NaN -> -1 -ddcot851 comparetotal sNaN sNaN -> 0 - -ddcot852 comparetotal -sNaN sNaN -> -1 -ddcot853 comparetotal -NaN sNaN -> -1 -ddcot854 comparetotal -Inf sNaN -> -1 -ddcot855 comparetotal -1000 sNaN -> -1 -ddcot856 comparetotal -1 sNaN -> -1 -ddcot857 comparetotal -0 sNaN -> -1 -ddcot858 comparetotal 0 sNaN -> -1 -ddcot859 comparetotal 1 sNaN -> -1 -ddcot860 comparetotal 1000 sNaN -> -1 -ddcot861 comparetotal Inf sNaN -> -1 -ddcot862 comparetotal NaN sNaN -> 1 -ddcot863 comparetotal sNaN sNaN -> 0 - -ddcot871 comparetotal -sNaN -sNaN -> 0 -ddcot872 comparetotal -sNaN -NaN -> 1 -ddcot873 comparetotal -sNaN -Inf -> -1 -ddcot874 comparetotal -sNaN -1000 -> -1 -ddcot875 comparetotal -sNaN -1 -> -1 -ddcot876 comparetotal -sNaN -0 -> -1 -ddcot877 comparetotal -sNaN 0 -> -1 -ddcot878 comparetotal -sNaN 1 -> -1 -ddcot879 comparetotal -sNaN 1000 -> -1 -ddcot880 comparetotal -sNaN NaN -> -1 -ddcot881 comparetotal -sNaN sNaN -> -1 - -ddcot882 comparetotal -sNaN -sNaN -> 0 -ddcot883 comparetotal -NaN -sNaN -> -1 -ddcot884 comparetotal -Inf -sNaN -> 1 -ddcot885 comparetotal -1000 -sNaN -> 1 -ddcot886 comparetotal -1 -sNaN -> 1 -ddcot887 comparetotal -0 -sNaN -> 1 -ddcot888 comparetotal 0 -sNaN -> 1 -ddcot889 comparetotal 1 -sNaN -> 1 -ddcot890 comparetotal 1000 -sNaN -> 1 -ddcot891 comparetotal Inf -sNaN -> 1 -ddcot892 comparetotal NaN -sNaN -> 1 -ddcot893 comparetotal sNaN -sNaN -> 1 - --- NaNs with payload -ddcot960 comparetotal NaN9 -Inf -> 1 -ddcot961 comparetotal NaN8 999 -> 1 -ddcot962 comparetotal NaN77 Inf -> 1 -ddcot963 comparetotal -NaN67 NaN5 -> -1 -ddcot964 comparetotal -Inf -NaN4 -> 1 -ddcot965 comparetotal -999 -NaN33 -> 1 -ddcot966 comparetotal Inf NaN2 -> -1 - -ddcot970 comparetotal -NaN41 -NaN42 -> 1 -ddcot971 comparetotal +NaN41 -NaN42 -> 1 -ddcot972 comparetotal -NaN41 +NaN42 -> -1 -ddcot973 comparetotal +NaN41 +NaN42 -> -1 -ddcot974 comparetotal -NaN42 -NaN01 -> -1 -ddcot975 comparetotal +NaN42 -NaN01 -> 1 -ddcot976 comparetotal -NaN42 +NaN01 -> -1 -ddcot977 comparetotal +NaN42 +NaN01 -> 1 - -ddcot980 comparetotal -sNaN771 -sNaN772 -> 1 -ddcot981 comparetotal +sNaN771 -sNaN772 -> 1 -ddcot982 comparetotal -sNaN771 +sNaN772 -> -1 -ddcot983 comparetotal +sNaN771 +sNaN772 -> -1 -ddcot984 comparetotal -sNaN772 -sNaN771 -> -1 -ddcot985 comparetotal +sNaN772 -sNaN771 -> 1 -ddcot986 comparetotal -sNaN772 +sNaN771 -> -1 -ddcot987 comparetotal +sNaN772 +sNaN771 -> 1 - -ddcot991 comparetotal -sNaN99 -Inf -> -1 -ddcot992 comparetotal sNaN98 -11 -> 1 -ddcot993 comparetotal sNaN97 NaN -> -1 -ddcot994 comparetotal sNaN16 sNaN94 -> -1 -ddcot995 comparetotal NaN85 sNaN83 -> 1 -ddcot996 comparetotal -Inf sNaN92 -> -1 -ddcot997 comparetotal 088 sNaN81 -> -1 -ddcot998 comparetotal Inf sNaN90 -> -1 -ddcot999 comparetotal NaN -sNaN89 -> 1 - --- spread zeros -ddcot1110 comparetotal 0E-383 0 -> -1 -ddcot1111 comparetotal 0E-383 -0 -> 1 -ddcot1112 comparetotal -0E-383 0 -> -1 -ddcot1113 comparetotal -0E-383 -0 -> 1 -ddcot1114 comparetotal 0E-383 0E+384 -> -1 -ddcot1115 comparetotal 0E-383 -0E+384 -> 1 -ddcot1116 comparetotal -0E-383 0E+384 -> -1 -ddcot1117 comparetotal -0E-383 -0E+384 -> 1 -ddcot1118 comparetotal 0 0E+384 -> -1 -ddcot1119 comparetotal 0 -0E+384 -> 1 -ddcot1120 comparetotal -0 0E+384 -> -1 -ddcot1121 comparetotal -0 -0E+384 -> 1 - -ddcot1130 comparetotal 0E+384 0 -> 1 -ddcot1131 comparetotal 0E+384 -0 -> 1 -ddcot1132 comparetotal -0E+384 0 -> -1 -ddcot1133 comparetotal -0E+384 -0 -> -1 -ddcot1134 comparetotal 0E+384 0E-383 -> 1 -ddcot1135 comparetotal 0E+384 -0E-383 -> 1 -ddcot1136 comparetotal -0E+384 0E-383 -> -1 -ddcot1137 comparetotal -0E+384 -0E-383 -> -1 -ddcot1138 comparetotal 0 0E-383 -> 1 -ddcot1139 comparetotal 0 -0E-383 -> 1 -ddcot1140 comparetotal -0 0E-383 -> -1 -ddcot1141 comparetotal -0 -0E-383 -> -1 - --- Null tests -ddcot9990 comparetotal 10 # -> NaN Invalid_operation -ddcot9991 comparetotal # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddCompareTotal.decTest -- decDouble comparison using total ordering-- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddcot001 comparetotal -2 -2 -> 0 +ddcot002 comparetotal -2 -1 -> -1 +ddcot003 comparetotal -2 0 -> -1 +ddcot004 comparetotal -2 1 -> -1 +ddcot005 comparetotal -2 2 -> -1 +ddcot006 comparetotal -1 -2 -> 1 +ddcot007 comparetotal -1 -1 -> 0 +ddcot008 comparetotal -1 0 -> -1 +ddcot009 comparetotal -1 1 -> -1 +ddcot010 comparetotal -1 2 -> -1 +ddcot011 comparetotal 0 -2 -> 1 +ddcot012 comparetotal 0 -1 -> 1 +ddcot013 comparetotal 0 0 -> 0 +ddcot014 comparetotal 0 1 -> -1 +ddcot015 comparetotal 0 2 -> -1 +ddcot016 comparetotal 1 -2 -> 1 +ddcot017 comparetotal 1 -1 -> 1 +ddcot018 comparetotal 1 0 -> 1 +ddcot019 comparetotal 1 1 -> 0 +ddcot020 comparetotal 1 2 -> -1 +ddcot021 comparetotal 2 -2 -> 1 +ddcot022 comparetotal 2 -1 -> 1 +ddcot023 comparetotal 2 0 -> 1 +ddcot025 comparetotal 2 1 -> 1 +ddcot026 comparetotal 2 2 -> 0 + +ddcot031 comparetotal -20 -20 -> 0 +ddcot032 comparetotal -20 -10 -> -1 +ddcot033 comparetotal -20 00 -> -1 +ddcot034 comparetotal -20 10 -> -1 +ddcot035 comparetotal -20 20 -> -1 +ddcot036 comparetotal -10 -20 -> 1 +ddcot037 comparetotal -10 -10 -> 0 +ddcot038 comparetotal -10 00 -> -1 +ddcot039 comparetotal -10 10 -> -1 +ddcot040 comparetotal -10 20 -> -1 +ddcot041 comparetotal 00 -20 -> 1 +ddcot042 comparetotal 00 -10 -> 1 +ddcot043 comparetotal 00 00 -> 0 +ddcot044 comparetotal 00 10 -> -1 +ddcot045 comparetotal 00 20 -> -1 +ddcot046 comparetotal 10 -20 -> 1 +ddcot047 comparetotal 10 -10 -> 1 +ddcot048 comparetotal 10 00 -> 1 +ddcot049 comparetotal 10 10 -> 0 +ddcot050 comparetotal 10 20 -> -1 +ddcot051 comparetotal 20 -20 -> 1 +ddcot052 comparetotal 20 -10 -> 1 +ddcot053 comparetotal 20 00 -> 1 +ddcot055 comparetotal 20 10 -> 1 +ddcot056 comparetotal 20 20 -> 0 + +ddcot061 comparetotal -2.0 -2.0 -> 0 +ddcot062 comparetotal -2.0 -1.0 -> -1 +ddcot063 comparetotal -2.0 0.0 -> -1 +ddcot064 comparetotal -2.0 1.0 -> -1 +ddcot065 comparetotal -2.0 2.0 -> -1 +ddcot066 comparetotal -1.0 -2.0 -> 1 +ddcot067 comparetotal -1.0 -1.0 -> 0 +ddcot068 comparetotal -1.0 0.0 -> -1 +ddcot069 comparetotal -1.0 1.0 -> -1 +ddcot070 comparetotal -1.0 2.0 -> -1 +ddcot071 comparetotal 0.0 -2.0 -> 1 +ddcot072 comparetotal 0.0 -1.0 -> 1 +ddcot073 comparetotal 0.0 0.0 -> 0 +ddcot074 comparetotal 0.0 1.0 -> -1 +ddcot075 comparetotal 0.0 2.0 -> -1 +ddcot076 comparetotal 1.0 -2.0 -> 1 +ddcot077 comparetotal 1.0 -1.0 -> 1 +ddcot078 comparetotal 1.0 0.0 -> 1 +ddcot079 comparetotal 1.0 1.0 -> 0 +ddcot080 comparetotal 1.0 2.0 -> -1 +ddcot081 comparetotal 2.0 -2.0 -> 1 +ddcot082 comparetotal 2.0 -1.0 -> 1 +ddcot083 comparetotal 2.0 0.0 -> 1 +ddcot085 comparetotal 2.0 1.0 -> 1 +ddcot086 comparetotal 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +ddcot090 comparetotal 9.99999999E+384 9.99999999E+384 -> 0 +ddcot091 comparetotal -9.99999999E+384 9.99999999E+384 -> -1 +ddcot092 comparetotal 9.99999999E+384 -9.99999999E+384 -> 1 +ddcot093 comparetotal -9.99999999E+384 -9.99999999E+384 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +ddcot100 comparetotal 7.0 7.0 -> 0 +ddcot101 comparetotal 7.0 7 -> -1 +ddcot102 comparetotal 7 7.0 -> 1 +ddcot103 comparetotal 7E+0 7.0 -> 1 +ddcot104 comparetotal 70E-1 7.0 -> 0 +ddcot105 comparetotal 0.7E+1 7 -> 0 +ddcot106 comparetotal 70E-1 7 -> -1 +ddcot107 comparetotal 7.0 7E+0 -> -1 +ddcot108 comparetotal 7.0 70E-1 -> 0 +ddcot109 comparetotal 7 0.7E+1 -> 0 +ddcot110 comparetotal 7 70E-1 -> 1 + +ddcot120 comparetotal 8.0 7.0 -> 1 +ddcot121 comparetotal 8.0 7 -> 1 +ddcot122 comparetotal 8 7.0 -> 1 +ddcot123 comparetotal 8E+0 7.0 -> 1 +ddcot124 comparetotal 80E-1 7.0 -> 1 +ddcot125 comparetotal 0.8E+1 7 -> 1 +ddcot126 comparetotal 80E-1 7 -> 1 +ddcot127 comparetotal 8.0 7E+0 -> 1 +ddcot128 comparetotal 8.0 70E-1 -> 1 +ddcot129 comparetotal 8 0.7E+1 -> 1 +ddcot130 comparetotal 8 70E-1 -> 1 + +ddcot140 comparetotal 8.0 9.0 -> -1 +ddcot141 comparetotal 8.0 9 -> -1 +ddcot142 comparetotal 8 9.0 -> -1 +ddcot143 comparetotal 8E+0 9.0 -> -1 +ddcot144 comparetotal 80E-1 9.0 -> -1 +ddcot145 comparetotal 0.8E+1 9 -> -1 +ddcot146 comparetotal 80E-1 9 -> -1 +ddcot147 comparetotal 8.0 9E+0 -> -1 +ddcot148 comparetotal 8.0 90E-1 -> -1 +ddcot149 comparetotal 8 0.9E+1 -> -1 +ddcot150 comparetotal 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ddcot200 comparetotal -7.0 7.0 -> -1 +ddcot201 comparetotal -7.0 7 -> -1 +ddcot202 comparetotal -7 7.0 -> -1 +ddcot203 comparetotal -7E+0 7.0 -> -1 +ddcot204 comparetotal -70E-1 7.0 -> -1 +ddcot205 comparetotal -0.7E+1 7 -> -1 +ddcot206 comparetotal -70E-1 7 -> -1 +ddcot207 comparetotal -7.0 7E+0 -> -1 +ddcot208 comparetotal -7.0 70E-1 -> -1 +ddcot209 comparetotal -7 0.7E+1 -> -1 +ddcot210 comparetotal -7 70E-1 -> -1 + +ddcot220 comparetotal -8.0 7.0 -> -1 +ddcot221 comparetotal -8.0 7 -> -1 +ddcot222 comparetotal -8 7.0 -> -1 +ddcot223 comparetotal -8E+0 7.0 -> -1 +ddcot224 comparetotal -80E-1 7.0 -> -1 +ddcot225 comparetotal -0.8E+1 7 -> -1 +ddcot226 comparetotal -80E-1 7 -> -1 +ddcot227 comparetotal -8.0 7E+0 -> -1 +ddcot228 comparetotal -8.0 70E-1 -> -1 +ddcot229 comparetotal -8 0.7E+1 -> -1 +ddcot230 comparetotal -8 70E-1 -> -1 + +ddcot240 comparetotal -8.0 9.0 -> -1 +ddcot241 comparetotal -8.0 9 -> -1 +ddcot242 comparetotal -8 9.0 -> -1 +ddcot243 comparetotal -8E+0 9.0 -> -1 +ddcot244 comparetotal -80E-1 9.0 -> -1 +ddcot245 comparetotal -0.8E+1 9 -> -1 +ddcot246 comparetotal -80E-1 9 -> -1 +ddcot247 comparetotal -8.0 9E+0 -> -1 +ddcot248 comparetotal -8.0 90E-1 -> -1 +ddcot249 comparetotal -8 0.9E+1 -> -1 +ddcot250 comparetotal -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ddcot300 comparetotal 7.0 -7.0 -> 1 +ddcot301 comparetotal 7.0 -7 -> 1 +ddcot302 comparetotal 7 -7.0 -> 1 +ddcot303 comparetotal 7E+0 -7.0 -> 1 +ddcot304 comparetotal 70E-1 -7.0 -> 1 +ddcot305 comparetotal .7E+1 -7 -> 1 +ddcot306 comparetotal 70E-1 -7 -> 1 +ddcot307 comparetotal 7.0 -7E+0 -> 1 +ddcot308 comparetotal 7.0 -70E-1 -> 1 +ddcot309 comparetotal 7 -.7E+1 -> 1 +ddcot310 comparetotal 7 -70E-1 -> 1 + +ddcot320 comparetotal 8.0 -7.0 -> 1 +ddcot321 comparetotal 8.0 -7 -> 1 +ddcot322 comparetotal 8 -7.0 -> 1 +ddcot323 comparetotal 8E+0 -7.0 -> 1 +ddcot324 comparetotal 80E-1 -7.0 -> 1 +ddcot325 comparetotal .8E+1 -7 -> 1 +ddcot326 comparetotal 80E-1 -7 -> 1 +ddcot327 comparetotal 8.0 -7E+0 -> 1 +ddcot328 comparetotal 8.0 -70E-1 -> 1 +ddcot329 comparetotal 8 -.7E+1 -> 1 +ddcot330 comparetotal 8 -70E-1 -> 1 + +ddcot340 comparetotal 8.0 -9.0 -> 1 +ddcot341 comparetotal 8.0 -9 -> 1 +ddcot342 comparetotal 8 -9.0 -> 1 +ddcot343 comparetotal 8E+0 -9.0 -> 1 +ddcot344 comparetotal 80E-1 -9.0 -> 1 +ddcot345 comparetotal .8E+1 -9 -> 1 +ddcot346 comparetotal 80E-1 -9 -> 1 +ddcot347 comparetotal 8.0 -9E+0 -> 1 +ddcot348 comparetotal 8.0 -90E-1 -> 1 +ddcot349 comparetotal 8 -.9E+1 -> 1 +ddcot350 comparetotal 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +ddcot400 comparetotal -7.0 -7.0 -> 0 +ddcot401 comparetotal -7.0 -7 -> 1 +ddcot402 comparetotal -7 -7.0 -> -1 +ddcot403 comparetotal -7E+0 -7.0 -> -1 +ddcot404 comparetotal -70E-1 -7.0 -> 0 +ddcot405 comparetotal -.7E+1 -7 -> 0 +ddcot406 comparetotal -70E-1 -7 -> 1 +ddcot407 comparetotal -7.0 -7E+0 -> 1 +ddcot408 comparetotal -7.0 -70E-1 -> 0 +ddcot409 comparetotal -7 -.7E+1 -> 0 +ddcot410 comparetotal -7 -70E-1 -> -1 + +ddcot420 comparetotal -8.0 -7.0 -> -1 +ddcot421 comparetotal -8.0 -7 -> -1 +ddcot422 comparetotal -8 -7.0 -> -1 +ddcot423 comparetotal -8E+0 -7.0 -> -1 +ddcot424 comparetotal -80E-1 -7.0 -> -1 +ddcot425 comparetotal -.8E+1 -7 -> -1 +ddcot426 comparetotal -80E-1 -7 -> -1 +ddcot427 comparetotal -8.0 -7E+0 -> -1 +ddcot428 comparetotal -8.0 -70E-1 -> -1 +ddcot429 comparetotal -8 -.7E+1 -> -1 +ddcot430 comparetotal -8 -70E-1 -> -1 + +ddcot440 comparetotal -8.0 -9.0 -> 1 +ddcot441 comparetotal -8.0 -9 -> 1 +ddcot442 comparetotal -8 -9.0 -> 1 +ddcot443 comparetotal -8E+0 -9.0 -> 1 +ddcot444 comparetotal -80E-1 -9.0 -> 1 +ddcot445 comparetotal -.8E+1 -9 -> 1 +ddcot446 comparetotal -80E-1 -9 -> 1 +ddcot447 comparetotal -8.0 -9E+0 -> 1 +ddcot448 comparetotal -8.0 -90E-1 -> 1 +ddcot449 comparetotal -8 -.9E+1 -> 1 +ddcot450 comparetotal -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +ddcot473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 +ddcot474 comparetotal 123.456000000000E+89 123.456E+89 -> -1 +ddcot475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 +ddcot476 comparetotal 123.4560000000E+89 123.456E+89 -> -1 +ddcot477 comparetotal 123.456000000E-89 123.456E-89 -> -1 +ddcot478 comparetotal 123.45600000E+89 123.456E+89 -> -1 +ddcot479 comparetotal 123.4560000E-89 123.456E-89 -> -1 +ddcot480 comparetotal 123.456000E+89 123.456E+89 -> -1 +ddcot481 comparetotal 123.45600E-89 123.456E-89 -> -1 +ddcot482 comparetotal 123.4560E+89 123.456E+89 -> -1 +ddcot483 comparetotal 123.456E-89 123.456E-89 -> 0 +ddcot487 comparetotal 123.456E+89 123.4560000000000E+89 -> 1 +ddcot488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 +ddcot489 comparetotal 123.456E+89 123.45600000000E+89 -> 1 +ddcot490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 +ddcot491 comparetotal 123.456E+89 123.456000000E+89 -> 1 +ddcot492 comparetotal 123.456E-89 123.45600000E-89 -> 1 +ddcot493 comparetotal 123.456E+89 123.4560000E+89 -> 1 +ddcot494 comparetotal 123.456E-89 123.456000E-89 -> 1 +ddcot495 comparetotal 123.456E+89 123.45600E+89 -> 1 +ddcot496 comparetotal 123.456E-89 123.4560E-89 -> 1 +ddcot497 comparetotal 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +ddcot498 comparetotal 1 1E-17 -> 1 +ddcot499 comparetotal 1 1E-16 -> 1 +ddcot500 comparetotal 1 1E-15 -> 1 +ddcot501 comparetotal 1 1E-14 -> 1 +ddcot502 comparetotal 1 1E-13 -> 1 +ddcot503 comparetotal 1 1E-12 -> 1 +ddcot504 comparetotal 1 1E-11 -> 1 +ddcot505 comparetotal 1 1E-10 -> 1 +ddcot506 comparetotal 1 1E-9 -> 1 +ddcot507 comparetotal 1 1E-8 -> 1 +ddcot508 comparetotal 1 1E-7 -> 1 +ddcot509 comparetotal 1 1E-6 -> 1 +ddcot510 comparetotal 1 1E-5 -> 1 +ddcot511 comparetotal 1 1E-4 -> 1 +ddcot512 comparetotal 1 1E-3 -> 1 +ddcot513 comparetotal 1 1E-2 -> 1 +ddcot514 comparetotal 1 1E-1 -> 1 +ddcot515 comparetotal 1 1E-0 -> 0 +ddcot516 comparetotal 1 1E+1 -> -1 +ddcot517 comparetotal 1 1E+2 -> -1 +ddcot518 comparetotal 1 1E+3 -> -1 +ddcot519 comparetotal 1 1E+4 -> -1 +ddcot521 comparetotal 1 1E+5 -> -1 +ddcot522 comparetotal 1 1E+6 -> -1 +ddcot523 comparetotal 1 1E+7 -> -1 +ddcot524 comparetotal 1 1E+8 -> -1 +ddcot525 comparetotal 1 1E+9 -> -1 +ddcot526 comparetotal 1 1E+10 -> -1 +ddcot527 comparetotal 1 1E+11 -> -1 +ddcot528 comparetotal 1 1E+12 -> -1 +ddcot529 comparetotal 1 1E+13 -> -1 +ddcot530 comparetotal 1 1E+14 -> -1 +ddcot531 comparetotal 1 1E+15 -> -1 +ddcot532 comparetotal 1 1E+16 -> -1 +ddcot533 comparetotal 1 1E+17 -> -1 +-- LR swap +ddcot538 comparetotal 1E-17 1 -> -1 +ddcot539 comparetotal 1E-16 1 -> -1 +ddcot540 comparetotal 1E-15 1 -> -1 +ddcot541 comparetotal 1E-14 1 -> -1 +ddcot542 comparetotal 1E-13 1 -> -1 +ddcot543 comparetotal 1E-12 1 -> -1 +ddcot544 comparetotal 1E-11 1 -> -1 +ddcot545 comparetotal 1E-10 1 -> -1 +ddcot546 comparetotal 1E-9 1 -> -1 +ddcot547 comparetotal 1E-8 1 -> -1 +ddcot548 comparetotal 1E-7 1 -> -1 +ddcot549 comparetotal 1E-6 1 -> -1 +ddcot550 comparetotal 1E-5 1 -> -1 +ddcot551 comparetotal 1E-4 1 -> -1 +ddcot552 comparetotal 1E-3 1 -> -1 +ddcot553 comparetotal 1E-2 1 -> -1 +ddcot554 comparetotal 1E-1 1 -> -1 +ddcot555 comparetotal 1E-0 1 -> 0 +ddcot556 comparetotal 1E+1 1 -> 1 +ddcot557 comparetotal 1E+2 1 -> 1 +ddcot558 comparetotal 1E+3 1 -> 1 +ddcot559 comparetotal 1E+4 1 -> 1 +ddcot561 comparetotal 1E+5 1 -> 1 +ddcot562 comparetotal 1E+6 1 -> 1 +ddcot563 comparetotal 1E+7 1 -> 1 +ddcot564 comparetotal 1E+8 1 -> 1 +ddcot565 comparetotal 1E+9 1 -> 1 +ddcot566 comparetotal 1E+10 1 -> 1 +ddcot567 comparetotal 1E+11 1 -> 1 +ddcot568 comparetotal 1E+12 1 -> 1 +ddcot569 comparetotal 1E+13 1 -> 1 +ddcot570 comparetotal 1E+14 1 -> 1 +ddcot571 comparetotal 1E+15 1 -> 1 +ddcot572 comparetotal 1E+16 1 -> 1 +ddcot573 comparetotal 1E+17 1 -> 1 +-- similar with a useful coefficient, one side only +ddcot578 comparetotal 0.000000987654321 1E-17 -> 1 +ddcot579 comparetotal 0.000000987654321 1E-16 -> 1 +ddcot580 comparetotal 0.000000987654321 1E-15 -> 1 +ddcot581 comparetotal 0.000000987654321 1E-14 -> 1 +ddcot582 comparetotal 0.000000987654321 1E-13 -> 1 +ddcot583 comparetotal 0.000000987654321 1E-12 -> 1 +ddcot584 comparetotal 0.000000987654321 1E-11 -> 1 +ddcot585 comparetotal 0.000000987654321 1E-10 -> 1 +ddcot586 comparetotal 0.000000987654321 1E-9 -> 1 +ddcot587 comparetotal 0.000000987654321 1E-8 -> 1 +ddcot588 comparetotal 0.000000987654321 1E-7 -> 1 +ddcot589 comparetotal 0.000000987654321 1E-6 -> -1 +ddcot590 comparetotal 0.000000987654321 1E-5 -> -1 +ddcot591 comparetotal 0.000000987654321 1E-4 -> -1 +ddcot592 comparetotal 0.000000987654321 1E-3 -> -1 +ddcot593 comparetotal 0.000000987654321 1E-2 -> -1 +ddcot594 comparetotal 0.000000987654321 1E-1 -> -1 +ddcot595 comparetotal 0.000000987654321 1E-0 -> -1 +ddcot596 comparetotal 0.000000987654321 1E+1 -> -1 +ddcot597 comparetotal 0.000000987654321 1E+2 -> -1 +ddcot598 comparetotal 0.000000987654321 1E+3 -> -1 +ddcot599 comparetotal 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +ddcot600 comparetotal 12 12.2345 -> -1 +ddcot601 comparetotal 12.0 12.2345 -> -1 +ddcot602 comparetotal 12.00 12.2345 -> -1 +ddcot603 comparetotal 12.000 12.2345 -> -1 +ddcot604 comparetotal 12.0000 12.2345 -> -1 +ddcot605 comparetotal 12.00000 12.2345 -> -1 +ddcot606 comparetotal 12.000000 12.2345 -> -1 +ddcot607 comparetotal 12.0000000 12.2345 -> -1 +ddcot608 comparetotal 12.00000000 12.2345 -> -1 +ddcot609 comparetotal 12.000000000 12.2345 -> -1 +ddcot610 comparetotal 12.1234 12 -> 1 +ddcot611 comparetotal 12.1234 12.0 -> 1 +ddcot612 comparetotal 12.1234 12.00 -> 1 +ddcot613 comparetotal 12.1234 12.000 -> 1 +ddcot614 comparetotal 12.1234 12.0000 -> 1 +ddcot615 comparetotal 12.1234 12.00000 -> 1 +ddcot616 comparetotal 12.1234 12.000000 -> 1 +ddcot617 comparetotal 12.1234 12.0000000 -> 1 +ddcot618 comparetotal 12.1234 12.00000000 -> 1 +ddcot619 comparetotal 12.1234 12.000000000 -> 1 +ddcot620 comparetotal -12 -12.2345 -> 1 +ddcot621 comparetotal -12.0 -12.2345 -> 1 +ddcot622 comparetotal -12.00 -12.2345 -> 1 +ddcot623 comparetotal -12.000 -12.2345 -> 1 +ddcot624 comparetotal -12.0000 -12.2345 -> 1 +ddcot625 comparetotal -12.00000 -12.2345 -> 1 +ddcot626 comparetotal -12.000000 -12.2345 -> 1 +ddcot627 comparetotal -12.0000000 -12.2345 -> 1 +ddcot628 comparetotal -12.00000000 -12.2345 -> 1 +ddcot629 comparetotal -12.000000000 -12.2345 -> 1 +ddcot630 comparetotal -12.1234 -12 -> -1 +ddcot631 comparetotal -12.1234 -12.0 -> -1 +ddcot632 comparetotal -12.1234 -12.00 -> -1 +ddcot633 comparetotal -12.1234 -12.000 -> -1 +ddcot634 comparetotal -12.1234 -12.0000 -> -1 +ddcot635 comparetotal -12.1234 -12.00000 -> -1 +ddcot636 comparetotal -12.1234 -12.000000 -> -1 +ddcot637 comparetotal -12.1234 -12.0000000 -> -1 +ddcot638 comparetotal -12.1234 -12.00000000 -> -1 +ddcot639 comparetotal -12.1234 -12.000000000 -> -1 + +-- extended zeros +ddcot640 comparetotal 0 0 -> 0 +ddcot641 comparetotal 0 -0 -> 1 +ddcot642 comparetotal 0 -0.0 -> 1 +ddcot643 comparetotal 0 0.0 -> 1 +ddcot644 comparetotal -0 0 -> -1 +ddcot645 comparetotal -0 -0 -> 0 +ddcot646 comparetotal -0 -0.0 -> -1 +ddcot647 comparetotal -0 0.0 -> -1 +ddcot648 comparetotal 0.0 0 -> -1 +ddcot649 comparetotal 0.0 -0 -> 1 +ddcot650 comparetotal 0.0 -0.0 -> 1 +ddcot651 comparetotal 0.0 0.0 -> 0 +ddcot652 comparetotal -0.0 0 -> -1 +ddcot653 comparetotal -0.0 -0 -> 1 +ddcot654 comparetotal -0.0 -0.0 -> 0 +ddcot655 comparetotal -0.0 0.0 -> -1 + +ddcot656 comparetotal -0E1 0.0 -> -1 +ddcot657 comparetotal -0E2 0.0 -> -1 +ddcot658 comparetotal 0E1 0.0 -> 1 +ddcot659 comparetotal 0E2 0.0 -> 1 +ddcot660 comparetotal -0E1 0 -> -1 +ddcot661 comparetotal -0E2 0 -> -1 +ddcot662 comparetotal 0E1 0 -> 1 +ddcot663 comparetotal 0E2 0 -> 1 +ddcot664 comparetotal -0E1 -0E1 -> 0 +ddcot665 comparetotal -0E2 -0E1 -> -1 +ddcot666 comparetotal 0E1 -0E1 -> 1 +ddcot667 comparetotal 0E2 -0E1 -> 1 +ddcot668 comparetotal -0E1 -0E2 -> 1 +ddcot669 comparetotal -0E2 -0E2 -> 0 +ddcot670 comparetotal 0E1 -0E2 -> 1 +ddcot671 comparetotal 0E2 -0E2 -> 1 +ddcot672 comparetotal -0E1 0E1 -> -1 +ddcot673 comparetotal -0E2 0E1 -> -1 +ddcot674 comparetotal 0E1 0E1 -> 0 +ddcot675 comparetotal 0E2 0E1 -> 1 +ddcot676 comparetotal -0E1 0E2 -> -1 +ddcot677 comparetotal -0E2 0E2 -> -1 +ddcot678 comparetotal 0E1 0E2 -> -1 +ddcot679 comparetotal 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +ddcot680 comparetotal 12 12 -> 0 +ddcot681 comparetotal 12 12.0 -> 1 +ddcot682 comparetotal 12 12.00 -> 1 +ddcot683 comparetotal 12 12.000 -> 1 +ddcot684 comparetotal 12 12.0000 -> 1 +ddcot685 comparetotal 12 12.00000 -> 1 +ddcot686 comparetotal 12 12.000000 -> 1 +ddcot687 comparetotal 12 12.0000000 -> 1 +ddcot688 comparetotal 12 12.00000000 -> 1 +ddcot689 comparetotal 12 12.000000000 -> 1 +ddcot690 comparetotal 12 12 -> 0 +ddcot691 comparetotal 12.0 12 -> -1 +ddcot692 comparetotal 12.00 12 -> -1 +ddcot693 comparetotal 12.000 12 -> -1 +ddcot694 comparetotal 12.0000 12 -> -1 +ddcot695 comparetotal 12.00000 12 -> -1 +ddcot696 comparetotal 12.000000 12 -> -1 +ddcot697 comparetotal 12.0000000 12 -> -1 +ddcot698 comparetotal 12.00000000 12 -> -1 +ddcot699 comparetotal 12.000000000 12 -> -1 + +-- old long operand checks +ddcot701 comparetotal 12345678000 1 -> 1 +ddcot702 comparetotal 1 12345678000 -> -1 +ddcot703 comparetotal 1234567800 1 -> 1 +ddcot704 comparetotal 1 1234567800 -> -1 +ddcot705 comparetotal 1234567890 1 -> 1 +ddcot706 comparetotal 1 1234567890 -> -1 +ddcot707 comparetotal 1234567891 1 -> 1 +ddcot708 comparetotal 1 1234567891 -> -1 +ddcot709 comparetotal 12345678901 1 -> 1 +ddcot710 comparetotal 1 12345678901 -> -1 +ddcot711 comparetotal 1234567896 1 -> 1 +ddcot712 comparetotal 1 1234567896 -> -1 +ddcot713 comparetotal -1234567891 1 -> -1 +ddcot714 comparetotal 1 -1234567891 -> 1 +ddcot715 comparetotal -12345678901 1 -> -1 +ddcot716 comparetotal 1 -12345678901 -> 1 +ddcot717 comparetotal -1234567896 1 -> -1 +ddcot718 comparetotal 1 -1234567896 -> 1 + +-- old residue cases +ddcot740 comparetotal 1 0.9999999 -> 1 +ddcot741 comparetotal 1 0.999999 -> 1 +ddcot742 comparetotal 1 0.99999 -> 1 +ddcot743 comparetotal 1 1.0000 -> 1 +ddcot744 comparetotal 1 1.00001 -> -1 +ddcot745 comparetotal 1 1.000001 -> -1 +ddcot746 comparetotal 1 1.0000001 -> -1 +ddcot750 comparetotal 0.9999999 1 -> -1 +ddcot751 comparetotal 0.999999 1 -> -1 +ddcot752 comparetotal 0.99999 1 -> -1 +ddcot753 comparetotal 1.0000 1 -> -1 +ddcot754 comparetotal 1.00001 1 -> 1 +ddcot755 comparetotal 1.000001 1 -> 1 +ddcot756 comparetotal 1.0000001 1 -> 1 + +-- Specials +ddcot780 comparetotal Inf -Inf -> 1 +ddcot781 comparetotal Inf -1000 -> 1 +ddcot782 comparetotal Inf -1 -> 1 +ddcot783 comparetotal Inf -0 -> 1 +ddcot784 comparetotal Inf 0 -> 1 +ddcot785 comparetotal Inf 1 -> 1 +ddcot786 comparetotal Inf 1000 -> 1 +ddcot787 comparetotal Inf Inf -> 0 +ddcot788 comparetotal -1000 Inf -> -1 +ddcot789 comparetotal -Inf Inf -> -1 +ddcot790 comparetotal -1 Inf -> -1 +ddcot791 comparetotal -0 Inf -> -1 +ddcot792 comparetotal 0 Inf -> -1 +ddcot793 comparetotal 1 Inf -> -1 +ddcot794 comparetotal 1000 Inf -> -1 +ddcot795 comparetotal Inf Inf -> 0 + +ddcot800 comparetotal -Inf -Inf -> 0 +ddcot801 comparetotal -Inf -1000 -> -1 +ddcot802 comparetotal -Inf -1 -> -1 +ddcot803 comparetotal -Inf -0 -> -1 +ddcot804 comparetotal -Inf 0 -> -1 +ddcot805 comparetotal -Inf 1 -> -1 +ddcot806 comparetotal -Inf 1000 -> -1 +ddcot807 comparetotal -Inf Inf -> -1 +ddcot808 comparetotal -Inf -Inf -> 0 +ddcot809 comparetotal -1000 -Inf -> 1 +ddcot810 comparetotal -1 -Inf -> 1 +ddcot811 comparetotal -0 -Inf -> 1 +ddcot812 comparetotal 0 -Inf -> 1 +ddcot813 comparetotal 1 -Inf -> 1 +ddcot814 comparetotal 1000 -Inf -> 1 +ddcot815 comparetotal Inf -Inf -> 1 + +ddcot821 comparetotal NaN -Inf -> 1 +ddcot822 comparetotal NaN -1000 -> 1 +ddcot823 comparetotal NaN -1 -> 1 +ddcot824 comparetotal NaN -0 -> 1 +ddcot825 comparetotal NaN 0 -> 1 +ddcot826 comparetotal NaN 1 -> 1 +ddcot827 comparetotal NaN 1000 -> 1 +ddcot828 comparetotal NaN Inf -> 1 +ddcot829 comparetotal NaN NaN -> 0 +ddcot830 comparetotal -Inf NaN -> -1 +ddcot831 comparetotal -1000 NaN -> -1 +ddcot832 comparetotal -1 NaN -> -1 +ddcot833 comparetotal -0 NaN -> -1 +ddcot834 comparetotal 0 NaN -> -1 +ddcot835 comparetotal 1 NaN -> -1 +ddcot836 comparetotal 1000 NaN -> -1 +ddcot837 comparetotal Inf NaN -> -1 +ddcot838 comparetotal -NaN -NaN -> 0 +ddcot839 comparetotal +NaN -NaN -> 1 +ddcot840 comparetotal -NaN +NaN -> -1 + +ddcot841 comparetotal sNaN -sNaN -> 1 +ddcot842 comparetotal sNaN -NaN -> 1 +ddcot843 comparetotal sNaN -Inf -> 1 +ddcot844 comparetotal sNaN -1000 -> 1 +ddcot845 comparetotal sNaN -1 -> 1 +ddcot846 comparetotal sNaN -0 -> 1 +ddcot847 comparetotal sNaN 0 -> 1 +ddcot848 comparetotal sNaN 1 -> 1 +ddcot849 comparetotal sNaN 1000 -> 1 +ddcot850 comparetotal sNaN NaN -> -1 +ddcot851 comparetotal sNaN sNaN -> 0 + +ddcot852 comparetotal -sNaN sNaN -> -1 +ddcot853 comparetotal -NaN sNaN -> -1 +ddcot854 comparetotal -Inf sNaN -> -1 +ddcot855 comparetotal -1000 sNaN -> -1 +ddcot856 comparetotal -1 sNaN -> -1 +ddcot857 comparetotal -0 sNaN -> -1 +ddcot858 comparetotal 0 sNaN -> -1 +ddcot859 comparetotal 1 sNaN -> -1 +ddcot860 comparetotal 1000 sNaN -> -1 +ddcot861 comparetotal Inf sNaN -> -1 +ddcot862 comparetotal NaN sNaN -> 1 +ddcot863 comparetotal sNaN sNaN -> 0 + +ddcot871 comparetotal -sNaN -sNaN -> 0 +ddcot872 comparetotal -sNaN -NaN -> 1 +ddcot873 comparetotal -sNaN -Inf -> -1 +ddcot874 comparetotal -sNaN -1000 -> -1 +ddcot875 comparetotal -sNaN -1 -> -1 +ddcot876 comparetotal -sNaN -0 -> -1 +ddcot877 comparetotal -sNaN 0 -> -1 +ddcot878 comparetotal -sNaN 1 -> -1 +ddcot879 comparetotal -sNaN 1000 -> -1 +ddcot880 comparetotal -sNaN NaN -> -1 +ddcot881 comparetotal -sNaN sNaN -> -1 + +ddcot882 comparetotal -sNaN -sNaN -> 0 +ddcot883 comparetotal -NaN -sNaN -> -1 +ddcot884 comparetotal -Inf -sNaN -> 1 +ddcot885 comparetotal -1000 -sNaN -> 1 +ddcot886 comparetotal -1 -sNaN -> 1 +ddcot887 comparetotal -0 -sNaN -> 1 +ddcot888 comparetotal 0 -sNaN -> 1 +ddcot889 comparetotal 1 -sNaN -> 1 +ddcot890 comparetotal 1000 -sNaN -> 1 +ddcot891 comparetotal Inf -sNaN -> 1 +ddcot892 comparetotal NaN -sNaN -> 1 +ddcot893 comparetotal sNaN -sNaN -> 1 + +-- NaNs with payload +ddcot960 comparetotal NaN9 -Inf -> 1 +ddcot961 comparetotal NaN8 999 -> 1 +ddcot962 comparetotal NaN77 Inf -> 1 +ddcot963 comparetotal -NaN67 NaN5 -> -1 +ddcot964 comparetotal -Inf -NaN4 -> 1 +ddcot965 comparetotal -999 -NaN33 -> 1 +ddcot966 comparetotal Inf NaN2 -> -1 + +ddcot970 comparetotal -NaN41 -NaN42 -> 1 +ddcot971 comparetotal +NaN41 -NaN42 -> 1 +ddcot972 comparetotal -NaN41 +NaN42 -> -1 +ddcot973 comparetotal +NaN41 +NaN42 -> -1 +ddcot974 comparetotal -NaN42 -NaN01 -> -1 +ddcot975 comparetotal +NaN42 -NaN01 -> 1 +ddcot976 comparetotal -NaN42 +NaN01 -> -1 +ddcot977 comparetotal +NaN42 +NaN01 -> 1 + +ddcot980 comparetotal -sNaN771 -sNaN772 -> 1 +ddcot981 comparetotal +sNaN771 -sNaN772 -> 1 +ddcot982 comparetotal -sNaN771 +sNaN772 -> -1 +ddcot983 comparetotal +sNaN771 +sNaN772 -> -1 +ddcot984 comparetotal -sNaN772 -sNaN771 -> -1 +ddcot985 comparetotal +sNaN772 -sNaN771 -> 1 +ddcot986 comparetotal -sNaN772 +sNaN771 -> -1 +ddcot987 comparetotal +sNaN772 +sNaN771 -> 1 + +ddcot991 comparetotal -sNaN99 -Inf -> -1 +ddcot992 comparetotal sNaN98 -11 -> 1 +ddcot993 comparetotal sNaN97 NaN -> -1 +ddcot994 comparetotal sNaN16 sNaN94 -> -1 +ddcot995 comparetotal NaN85 sNaN83 -> 1 +ddcot996 comparetotal -Inf sNaN92 -> -1 +ddcot997 comparetotal 088 sNaN81 -> -1 +ddcot998 comparetotal Inf sNaN90 -> -1 +ddcot999 comparetotal NaN -sNaN89 -> 1 + +-- spread zeros +ddcot1110 comparetotal 0E-383 0 -> -1 +ddcot1111 comparetotal 0E-383 -0 -> 1 +ddcot1112 comparetotal -0E-383 0 -> -1 +ddcot1113 comparetotal -0E-383 -0 -> 1 +ddcot1114 comparetotal 0E-383 0E+384 -> -1 +ddcot1115 comparetotal 0E-383 -0E+384 -> 1 +ddcot1116 comparetotal -0E-383 0E+384 -> -1 +ddcot1117 comparetotal -0E-383 -0E+384 -> 1 +ddcot1118 comparetotal 0 0E+384 -> -1 +ddcot1119 comparetotal 0 -0E+384 -> 1 +ddcot1120 comparetotal -0 0E+384 -> -1 +ddcot1121 comparetotal -0 -0E+384 -> 1 + +ddcot1130 comparetotal 0E+384 0 -> 1 +ddcot1131 comparetotal 0E+384 -0 -> 1 +ddcot1132 comparetotal -0E+384 0 -> -1 +ddcot1133 comparetotal -0E+384 -0 -> -1 +ddcot1134 comparetotal 0E+384 0E-383 -> 1 +ddcot1135 comparetotal 0E+384 -0E-383 -> 1 +ddcot1136 comparetotal -0E+384 0E-383 -> -1 +ddcot1137 comparetotal -0E+384 -0E-383 -> -1 +ddcot1138 comparetotal 0 0E-383 -> 1 +ddcot1139 comparetotal 0 -0E-383 -> 1 +ddcot1140 comparetotal -0 0E-383 -> -1 +ddcot1141 comparetotal -0 -0E-383 -> -1 + +-- Null tests +ddcot9990 comparetotal 10 # -> NaN Invalid_operation +ddcot9991 comparetotal # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddCompareTotalMag.decTest b/Lib/test/decimaltestdata/ddCompareTotalMag.decTest index f16537a35d7..087a092f0b0 100644 --- a/Lib/test/decimaltestdata/ddCompareTotalMag.decTest +++ b/Lib/test/decimaltestdata/ddCompareTotalMag.decTest @@ -1,706 +1,706 @@ ------------------------------------------------------------------------- --- ddCompareTotalMag.decTest -- decDouble comparison; abs. total order-- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddctm001 comparetotmag -2 -2 -> 0 -ddctm002 comparetotmag -2 -1 -> 1 -ddctm003 comparetotmag -2 0 -> 1 -ddctm004 comparetotmag -2 1 -> 1 -ddctm005 comparetotmag -2 2 -> 0 -ddctm006 comparetotmag -1 -2 -> -1 -ddctm007 comparetotmag -1 -1 -> 0 -ddctm008 comparetotmag -1 0 -> 1 -ddctm009 comparetotmag -1 1 -> 0 -ddctm010 comparetotmag -1 2 -> -1 -ddctm011 comparetotmag 0 -2 -> -1 -ddctm012 comparetotmag 0 -1 -> -1 -ddctm013 comparetotmag 0 0 -> 0 -ddctm014 comparetotmag 0 1 -> -1 -ddctm015 comparetotmag 0 2 -> -1 -ddctm016 comparetotmag 1 -2 -> -1 -ddctm017 comparetotmag 1 -1 -> 0 -ddctm018 comparetotmag 1 0 -> 1 -ddctm019 comparetotmag 1 1 -> 0 -ddctm020 comparetotmag 1 2 -> -1 -ddctm021 comparetotmag 2 -2 -> 0 -ddctm022 comparetotmag 2 -1 -> 1 -ddctm023 comparetotmag 2 0 -> 1 -ddctm025 comparetotmag 2 1 -> 1 -ddctm026 comparetotmag 2 2 -> 0 - -ddctm031 comparetotmag -20 -20 -> 0 -ddctm032 comparetotmag -20 -10 -> 1 -ddctm033 comparetotmag -20 00 -> 1 -ddctm034 comparetotmag -20 10 -> 1 -ddctm035 comparetotmag -20 20 -> 0 -ddctm036 comparetotmag -10 -20 -> -1 -ddctm037 comparetotmag -10 -10 -> 0 -ddctm038 comparetotmag -10 00 -> 1 -ddctm039 comparetotmag -10 10 -> 0 -ddctm040 comparetotmag -10 20 -> -1 -ddctm041 comparetotmag 00 -20 -> -1 -ddctm042 comparetotmag 00 -10 -> -1 -ddctm043 comparetotmag 00 00 -> 0 -ddctm044 comparetotmag 00 10 -> -1 -ddctm045 comparetotmag 00 20 -> -1 -ddctm046 comparetotmag 10 -20 -> -1 -ddctm047 comparetotmag 10 -10 -> 0 -ddctm048 comparetotmag 10 00 -> 1 -ddctm049 comparetotmag 10 10 -> 0 -ddctm050 comparetotmag 10 20 -> -1 -ddctm051 comparetotmag 20 -20 -> 0 -ddctm052 comparetotmag 20 -10 -> 1 -ddctm053 comparetotmag 20 00 -> 1 -ddctm055 comparetotmag 20 10 -> 1 -ddctm056 comparetotmag 20 20 -> 0 - -ddctm061 comparetotmag -2.0 -2.0 -> 0 -ddctm062 comparetotmag -2.0 -1.0 -> 1 -ddctm063 comparetotmag -2.0 0.0 -> 1 -ddctm064 comparetotmag -2.0 1.0 -> 1 -ddctm065 comparetotmag -2.0 2.0 -> 0 -ddctm066 comparetotmag -1.0 -2.0 -> -1 -ddctm067 comparetotmag -1.0 -1.0 -> 0 -ddctm068 comparetotmag -1.0 0.0 -> 1 -ddctm069 comparetotmag -1.0 1.0 -> 0 -ddctm070 comparetotmag -1.0 2.0 -> -1 -ddctm071 comparetotmag 0.0 -2.0 -> -1 -ddctm072 comparetotmag 0.0 -1.0 -> -1 -ddctm073 comparetotmag 0.0 0.0 -> 0 -ddctm074 comparetotmag 0.0 1.0 -> -1 -ddctm075 comparetotmag 0.0 2.0 -> -1 -ddctm076 comparetotmag 1.0 -2.0 -> -1 -ddctm077 comparetotmag 1.0 -1.0 -> 0 -ddctm078 comparetotmag 1.0 0.0 -> 1 -ddctm079 comparetotmag 1.0 1.0 -> 0 -ddctm080 comparetotmag 1.0 2.0 -> -1 -ddctm081 comparetotmag 2.0 -2.0 -> 0 -ddctm082 comparetotmag 2.0 -1.0 -> 1 -ddctm083 comparetotmag 2.0 0.0 -> 1 -ddctm085 comparetotmag 2.0 1.0 -> 1 -ddctm086 comparetotmag 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -ddctm090 comparetotmag 9.99999999E+384 9.99999999E+384 -> 0 -ddctm091 comparetotmag -9.99999999E+384 9.99999999E+384 -> 0 -ddctm092 comparetotmag 9.99999999E+384 -9.99999999E+384 -> 0 -ddctm093 comparetotmag -9.99999999E+384 -9.99999999E+384 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -ddctm100 comparetotmag 7.0 7.0 -> 0 -ddctm101 comparetotmag 7.0 7 -> -1 -ddctm102 comparetotmag 7 7.0 -> 1 -ddctm103 comparetotmag 7E+0 7.0 -> 1 -ddctm104 comparetotmag 70E-1 7.0 -> 0 -ddctm105 comparetotmag 0.7E+1 7 -> 0 -ddctm106 comparetotmag 70E-1 7 -> -1 -ddctm107 comparetotmag 7.0 7E+0 -> -1 -ddctm108 comparetotmag 7.0 70E-1 -> 0 -ddctm109 comparetotmag 7 0.7E+1 -> 0 -ddctm110 comparetotmag 7 70E-1 -> 1 - -ddctm120 comparetotmag 8.0 7.0 -> 1 -ddctm121 comparetotmag 8.0 7 -> 1 -ddctm122 comparetotmag 8 7.0 -> 1 -ddctm123 comparetotmag 8E+0 7.0 -> 1 -ddctm124 comparetotmag 80E-1 7.0 -> 1 -ddctm125 comparetotmag 0.8E+1 7 -> 1 -ddctm126 comparetotmag 80E-1 7 -> 1 -ddctm127 comparetotmag 8.0 7E+0 -> 1 -ddctm128 comparetotmag 8.0 70E-1 -> 1 -ddctm129 comparetotmag 8 0.7E+1 -> 1 -ddctm130 comparetotmag 8 70E-1 -> 1 - -ddctm140 comparetotmag 8.0 9.0 -> -1 -ddctm141 comparetotmag 8.0 9 -> -1 -ddctm142 comparetotmag 8 9.0 -> -1 -ddctm143 comparetotmag 8E+0 9.0 -> -1 -ddctm144 comparetotmag 80E-1 9.0 -> -1 -ddctm145 comparetotmag 0.8E+1 9 -> -1 -ddctm146 comparetotmag 80E-1 9 -> -1 -ddctm147 comparetotmag 8.0 9E+0 -> -1 -ddctm148 comparetotmag 8.0 90E-1 -> -1 -ddctm149 comparetotmag 8 0.9E+1 -> -1 -ddctm150 comparetotmag 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ddctm200 comparetotmag -7.0 7.0 -> 0 -ddctm201 comparetotmag -7.0 7 -> -1 -ddctm202 comparetotmag -7 7.0 -> 1 -ddctm203 comparetotmag -7E+0 7.0 -> 1 -ddctm204 comparetotmag -70E-1 7.0 -> 0 -ddctm205 comparetotmag -0.7E+1 7 -> 0 -ddctm206 comparetotmag -70E-1 7 -> -1 -ddctm207 comparetotmag -7.0 7E+0 -> -1 -ddctm208 comparetotmag -7.0 70E-1 -> 0 -ddctm209 comparetotmag -7 0.7E+1 -> 0 -ddctm210 comparetotmag -7 70E-1 -> 1 - -ddctm220 comparetotmag -8.0 7.0 -> 1 -ddctm221 comparetotmag -8.0 7 -> 1 -ddctm222 comparetotmag -8 7.0 -> 1 -ddctm223 comparetotmag -8E+0 7.0 -> 1 -ddctm224 comparetotmag -80E-1 7.0 -> 1 -ddctm225 comparetotmag -0.8E+1 7 -> 1 -ddctm226 comparetotmag -80E-1 7 -> 1 -ddctm227 comparetotmag -8.0 7E+0 -> 1 -ddctm228 comparetotmag -8.0 70E-1 -> 1 -ddctm229 comparetotmag -8 0.7E+1 -> 1 -ddctm230 comparetotmag -8 70E-1 -> 1 - -ddctm240 comparetotmag -8.0 9.0 -> -1 -ddctm241 comparetotmag -8.0 9 -> -1 -ddctm242 comparetotmag -8 9.0 -> -1 -ddctm243 comparetotmag -8E+0 9.0 -> -1 -ddctm244 comparetotmag -80E-1 9.0 -> -1 -ddctm245 comparetotmag -0.8E+1 9 -> -1 -ddctm246 comparetotmag -80E-1 9 -> -1 -ddctm247 comparetotmag -8.0 9E+0 -> -1 -ddctm248 comparetotmag -8.0 90E-1 -> -1 -ddctm249 comparetotmag -8 0.9E+1 -> -1 -ddctm250 comparetotmag -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ddctm300 comparetotmag 7.0 -7.0 -> 0 -ddctm301 comparetotmag 7.0 -7 -> -1 -ddctm302 comparetotmag 7 -7.0 -> 1 -ddctm303 comparetotmag 7E+0 -7.0 -> 1 -ddctm304 comparetotmag 70E-1 -7.0 -> 0 -ddctm305 comparetotmag .7E+1 -7 -> 0 -ddctm306 comparetotmag 70E-1 -7 -> -1 -ddctm307 comparetotmag 7.0 -7E+0 -> -1 -ddctm308 comparetotmag 7.0 -70E-1 -> 0 -ddctm309 comparetotmag 7 -.7E+1 -> 0 -ddctm310 comparetotmag 7 -70E-1 -> 1 - -ddctm320 comparetotmag 8.0 -7.0 -> 1 -ddctm321 comparetotmag 8.0 -7 -> 1 -ddctm322 comparetotmag 8 -7.0 -> 1 -ddctm323 comparetotmag 8E+0 -7.0 -> 1 -ddctm324 comparetotmag 80E-1 -7.0 -> 1 -ddctm325 comparetotmag .8E+1 -7 -> 1 -ddctm326 comparetotmag 80E-1 -7 -> 1 -ddctm327 comparetotmag 8.0 -7E+0 -> 1 -ddctm328 comparetotmag 8.0 -70E-1 -> 1 -ddctm329 comparetotmag 8 -.7E+1 -> 1 -ddctm330 comparetotmag 8 -70E-1 -> 1 - -ddctm340 comparetotmag 8.0 -9.0 -> -1 -ddctm341 comparetotmag 8.0 -9 -> -1 -ddctm342 comparetotmag 8 -9.0 -> -1 -ddctm343 comparetotmag 8E+0 -9.0 -> -1 -ddctm344 comparetotmag 80E-1 -9.0 -> -1 -ddctm345 comparetotmag .8E+1 -9 -> -1 -ddctm346 comparetotmag 80E-1 -9 -> -1 -ddctm347 comparetotmag 8.0 -9E+0 -> -1 -ddctm348 comparetotmag 8.0 -90E-1 -> -1 -ddctm349 comparetotmag 8 -.9E+1 -> -1 -ddctm350 comparetotmag 8 -90E-1 -> -1 - --- and again, with sign changes -- .. -ddctm400 comparetotmag -7.0 -7.0 -> 0 -ddctm401 comparetotmag -7.0 -7 -> -1 -ddctm402 comparetotmag -7 -7.0 -> 1 -ddctm403 comparetotmag -7E+0 -7.0 -> 1 -ddctm404 comparetotmag -70E-1 -7.0 -> 0 -ddctm405 comparetotmag -.7E+1 -7 -> 0 -ddctm406 comparetotmag -70E-1 -7 -> -1 -ddctm407 comparetotmag -7.0 -7E+0 -> -1 -ddctm408 comparetotmag -7.0 -70E-1 -> 0 -ddctm409 comparetotmag -7 -.7E+1 -> 0 -ddctm410 comparetotmag -7 -70E-1 -> 1 - -ddctm420 comparetotmag -8.0 -7.0 -> 1 -ddctm421 comparetotmag -8.0 -7 -> 1 -ddctm422 comparetotmag -8 -7.0 -> 1 -ddctm423 comparetotmag -8E+0 -7.0 -> 1 -ddctm424 comparetotmag -80E-1 -7.0 -> 1 -ddctm425 comparetotmag -.8E+1 -7 -> 1 -ddctm426 comparetotmag -80E-1 -7 -> 1 -ddctm427 comparetotmag -8.0 -7E+0 -> 1 -ddctm428 comparetotmag -8.0 -70E-1 -> 1 -ddctm429 comparetotmag -8 -.7E+1 -> 1 -ddctm430 comparetotmag -8 -70E-1 -> 1 - -ddctm440 comparetotmag -8.0 -9.0 -> -1 -ddctm441 comparetotmag -8.0 -9 -> -1 -ddctm442 comparetotmag -8 -9.0 -> -1 -ddctm443 comparetotmag -8E+0 -9.0 -> -1 -ddctm444 comparetotmag -80E-1 -9.0 -> -1 -ddctm445 comparetotmag -.8E+1 -9 -> -1 -ddctm446 comparetotmag -80E-1 -9 -> -1 -ddctm447 comparetotmag -8.0 -9E+0 -> -1 -ddctm448 comparetotmag -8.0 -90E-1 -> -1 -ddctm449 comparetotmag -8 -.9E+1 -> -1 -ddctm450 comparetotmag -8 -90E-1 -> -1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -ddctm473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 -ddctm474 comparetotmag 123.456000000000E+89 123.456E+89 -> -1 -ddctm475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 -ddctm476 comparetotmag 123.4560000000E+89 123.456E+89 -> -1 -ddctm477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 -ddctm478 comparetotmag 123.45600000E+89 123.456E+89 -> -1 -ddctm479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 -ddctm480 comparetotmag 123.456000E+89 123.456E+89 -> -1 -ddctm481 comparetotmag 123.45600E-89 123.456E-89 -> -1 -ddctm482 comparetotmag 123.4560E+89 123.456E+89 -> -1 -ddctm483 comparetotmag 123.456E-89 123.456E-89 -> 0 -ddctm487 comparetotmag 123.456E+89 123.4560000000000E+89 -> 1 -ddctm488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 -ddctm489 comparetotmag 123.456E+89 123.45600000000E+89 -> 1 -ddctm490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 -ddctm491 comparetotmag 123.456E+89 123.456000000E+89 -> 1 -ddctm492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 -ddctm493 comparetotmag 123.456E+89 123.4560000E+89 -> 1 -ddctm494 comparetotmag 123.456E-89 123.456000E-89 -> 1 -ddctm495 comparetotmag 123.456E+89 123.45600E+89 -> 1 -ddctm496 comparetotmag 123.456E-89 123.4560E-89 -> 1 -ddctm497 comparetotmag 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -ddctm498 comparetotmag 1 1E-17 -> 1 -ddctm499 comparetotmag 1 1E-16 -> 1 -ddctm500 comparetotmag 1 1E-15 -> 1 -ddctm501 comparetotmag 1 1E-14 -> 1 -ddctm502 comparetotmag 1 1E-13 -> 1 -ddctm503 comparetotmag 1 1E-12 -> 1 -ddctm504 comparetotmag 1 1E-11 -> 1 -ddctm505 comparetotmag 1 1E-10 -> 1 -ddctm506 comparetotmag 1 1E-9 -> 1 -ddctm507 comparetotmag 1 1E-8 -> 1 -ddctm508 comparetotmag 1 1E-7 -> 1 -ddctm509 comparetotmag 1 1E-6 -> 1 -ddctm510 comparetotmag 1 1E-5 -> 1 -ddctm511 comparetotmag 1 1E-4 -> 1 -ddctm512 comparetotmag 1 1E-3 -> 1 -ddctm513 comparetotmag 1 1E-2 -> 1 -ddctm514 comparetotmag 1 1E-1 -> 1 -ddctm515 comparetotmag 1 1E-0 -> 0 -ddctm516 comparetotmag 1 1E+1 -> -1 -ddctm517 comparetotmag 1 1E+2 -> -1 -ddctm518 comparetotmag 1 1E+3 -> -1 -ddctm519 comparetotmag 1 1E+4 -> -1 -ddctm521 comparetotmag 1 1E+5 -> -1 -ddctm522 comparetotmag 1 1E+6 -> -1 -ddctm523 comparetotmag 1 1E+7 -> -1 -ddctm524 comparetotmag 1 1E+8 -> -1 -ddctm525 comparetotmag 1 1E+9 -> -1 -ddctm526 comparetotmag 1 1E+10 -> -1 -ddctm527 comparetotmag 1 1E+11 -> -1 -ddctm528 comparetotmag 1 1E+12 -> -1 -ddctm529 comparetotmag 1 1E+13 -> -1 -ddctm530 comparetotmag 1 1E+14 -> -1 -ddctm531 comparetotmag 1 1E+15 -> -1 -ddctm532 comparetotmag 1 1E+16 -> -1 -ddctm533 comparetotmag 1 1E+17 -> -1 --- LR swap -ddctm538 comparetotmag 1E-17 1 -> -1 -ddctm539 comparetotmag 1E-16 1 -> -1 -ddctm540 comparetotmag 1E-15 1 -> -1 -ddctm541 comparetotmag 1E-14 1 -> -1 -ddctm542 comparetotmag 1E-13 1 -> -1 -ddctm543 comparetotmag 1E-12 1 -> -1 -ddctm544 comparetotmag 1E-11 1 -> -1 -ddctm545 comparetotmag 1E-10 1 -> -1 -ddctm546 comparetotmag 1E-9 1 -> -1 -ddctm547 comparetotmag 1E-8 1 -> -1 -ddctm548 comparetotmag 1E-7 1 -> -1 -ddctm549 comparetotmag 1E-6 1 -> -1 -ddctm550 comparetotmag 1E-5 1 -> -1 -ddctm551 comparetotmag 1E-4 1 -> -1 -ddctm552 comparetotmag 1E-3 1 -> -1 -ddctm553 comparetotmag 1E-2 1 -> -1 -ddctm554 comparetotmag 1E-1 1 -> -1 -ddctm555 comparetotmag 1E-0 1 -> 0 -ddctm556 comparetotmag 1E+1 1 -> 1 -ddctm557 comparetotmag 1E+2 1 -> 1 -ddctm558 comparetotmag 1E+3 1 -> 1 -ddctm559 comparetotmag 1E+4 1 -> 1 -ddctm561 comparetotmag 1E+5 1 -> 1 -ddctm562 comparetotmag 1E+6 1 -> 1 -ddctm563 comparetotmag 1E+7 1 -> 1 -ddctm564 comparetotmag 1E+8 1 -> 1 -ddctm565 comparetotmag 1E+9 1 -> 1 -ddctm566 comparetotmag 1E+10 1 -> 1 -ddctm567 comparetotmag 1E+11 1 -> 1 -ddctm568 comparetotmag 1E+12 1 -> 1 -ddctm569 comparetotmag 1E+13 1 -> 1 -ddctm570 comparetotmag 1E+14 1 -> 1 -ddctm571 comparetotmag 1E+15 1 -> 1 -ddctm572 comparetotmag 1E+16 1 -> 1 -ddctm573 comparetotmag 1E+17 1 -> 1 --- similar with a useful coefficient, one side only -ddctm578 comparetotmag 0.000000987654321 1E-17 -> 1 -ddctm579 comparetotmag 0.000000987654321 1E-16 -> 1 -ddctm580 comparetotmag 0.000000987654321 1E-15 -> 1 -ddctm581 comparetotmag 0.000000987654321 1E-14 -> 1 -ddctm582 comparetotmag 0.000000987654321 1E-13 -> 1 -ddctm583 comparetotmag 0.000000987654321 1E-12 -> 1 -ddctm584 comparetotmag 0.000000987654321 1E-11 -> 1 -ddctm585 comparetotmag 0.000000987654321 1E-10 -> 1 -ddctm586 comparetotmag 0.000000987654321 1E-9 -> 1 -ddctm587 comparetotmag 0.000000987654321 1E-8 -> 1 -ddctm588 comparetotmag 0.000000987654321 1E-7 -> 1 -ddctm589 comparetotmag 0.000000987654321 1E-6 -> -1 -ddctm590 comparetotmag 0.000000987654321 1E-5 -> -1 -ddctm591 comparetotmag 0.000000987654321 1E-4 -> -1 -ddctm592 comparetotmag 0.000000987654321 1E-3 -> -1 -ddctm593 comparetotmag 0.000000987654321 1E-2 -> -1 -ddctm594 comparetotmag 0.000000987654321 1E-1 -> -1 -ddctm595 comparetotmag 0.000000987654321 1E-0 -> -1 -ddctm596 comparetotmag 0.000000987654321 1E+1 -> -1 -ddctm597 comparetotmag 0.000000987654321 1E+2 -> -1 -ddctm598 comparetotmag 0.000000987654321 1E+3 -> -1 -ddctm599 comparetotmag 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -ddctm600 comparetotmag 12 12.2345 -> -1 -ddctm601 comparetotmag 12.0 12.2345 -> -1 -ddctm602 comparetotmag 12.00 12.2345 -> -1 -ddctm603 comparetotmag 12.000 12.2345 -> -1 -ddctm604 comparetotmag 12.0000 12.2345 -> -1 -ddctm605 comparetotmag 12.00000 12.2345 -> -1 -ddctm606 comparetotmag 12.000000 12.2345 -> -1 -ddctm607 comparetotmag 12.0000000 12.2345 -> -1 -ddctm608 comparetotmag 12.00000000 12.2345 -> -1 -ddctm609 comparetotmag 12.000000000 12.2345 -> -1 -ddctm610 comparetotmag 12.1234 12 -> 1 -ddctm611 comparetotmag 12.1234 12.0 -> 1 -ddctm612 comparetotmag 12.1234 12.00 -> 1 -ddctm613 comparetotmag 12.1234 12.000 -> 1 -ddctm614 comparetotmag 12.1234 12.0000 -> 1 -ddctm615 comparetotmag 12.1234 12.00000 -> 1 -ddctm616 comparetotmag 12.1234 12.000000 -> 1 -ddctm617 comparetotmag 12.1234 12.0000000 -> 1 -ddctm618 comparetotmag 12.1234 12.00000000 -> 1 -ddctm619 comparetotmag 12.1234 12.000000000 -> 1 -ddctm620 comparetotmag -12 -12.2345 -> -1 -ddctm621 comparetotmag -12.0 -12.2345 -> -1 -ddctm622 comparetotmag -12.00 -12.2345 -> -1 -ddctm623 comparetotmag -12.000 -12.2345 -> -1 -ddctm624 comparetotmag -12.0000 -12.2345 -> -1 -ddctm625 comparetotmag -12.00000 -12.2345 -> -1 -ddctm626 comparetotmag -12.000000 -12.2345 -> -1 -ddctm627 comparetotmag -12.0000000 -12.2345 -> -1 -ddctm628 comparetotmag -12.00000000 -12.2345 -> -1 -ddctm629 comparetotmag -12.000000000 -12.2345 -> -1 -ddctm630 comparetotmag -12.1234 -12 -> 1 -ddctm631 comparetotmag -12.1234 -12.0 -> 1 -ddctm632 comparetotmag -12.1234 -12.00 -> 1 -ddctm633 comparetotmag -12.1234 -12.000 -> 1 -ddctm634 comparetotmag -12.1234 -12.0000 -> 1 -ddctm635 comparetotmag -12.1234 -12.00000 -> 1 -ddctm636 comparetotmag -12.1234 -12.000000 -> 1 -ddctm637 comparetotmag -12.1234 -12.0000000 -> 1 -ddctm638 comparetotmag -12.1234 -12.00000000 -> 1 -ddctm639 comparetotmag -12.1234 -12.000000000 -> 1 - --- extended zeros -ddctm640 comparetotmag 0 0 -> 0 -ddctm641 comparetotmag 0 -0 -> 0 -ddctm642 comparetotmag 0 -0.0 -> 1 -ddctm643 comparetotmag 0 0.0 -> 1 -ddctm644 comparetotmag -0 0 -> 0 -ddctm645 comparetotmag -0 -0 -> 0 -ddctm646 comparetotmag -0 -0.0 -> 1 -ddctm647 comparetotmag -0 0.0 -> 1 -ddctm648 comparetotmag 0.0 0 -> -1 -ddctm649 comparetotmag 0.0 -0 -> -1 -ddctm650 comparetotmag 0.0 -0.0 -> 0 -ddctm651 comparetotmag 0.0 0.0 -> 0 -ddctm652 comparetotmag -0.0 0 -> -1 -ddctm653 comparetotmag -0.0 -0 -> -1 -ddctm654 comparetotmag -0.0 -0.0 -> 0 -ddctm655 comparetotmag -0.0 0.0 -> 0 - -ddctm656 comparetotmag -0E1 0.0 -> 1 -ddctm657 comparetotmag -0E2 0.0 -> 1 -ddctm658 comparetotmag 0E1 0.0 -> 1 -ddctm659 comparetotmag 0E2 0.0 -> 1 -ddctm660 comparetotmag -0E1 0 -> 1 -ddctm661 comparetotmag -0E2 0 -> 1 -ddctm662 comparetotmag 0E1 0 -> 1 -ddctm663 comparetotmag 0E2 0 -> 1 -ddctm664 comparetotmag -0E1 -0E1 -> 0 -ddctm665 comparetotmag -0E2 -0E1 -> 1 -ddctm666 comparetotmag 0E1 -0E1 -> 0 -ddctm667 comparetotmag 0E2 -0E1 -> 1 -ddctm668 comparetotmag -0E1 -0E2 -> -1 -ddctm669 comparetotmag -0E2 -0E2 -> 0 -ddctm670 comparetotmag 0E1 -0E2 -> -1 -ddctm671 comparetotmag 0E2 -0E2 -> 0 -ddctm672 comparetotmag -0E1 0E1 -> 0 -ddctm673 comparetotmag -0E2 0E1 -> 1 -ddctm674 comparetotmag 0E1 0E1 -> 0 -ddctm675 comparetotmag 0E2 0E1 -> 1 -ddctm676 comparetotmag -0E1 0E2 -> -1 -ddctm677 comparetotmag -0E2 0E2 -> 0 -ddctm678 comparetotmag 0E1 0E2 -> -1 -ddctm679 comparetotmag 0E2 0E2 -> 0 - --- trailing zeros; unit-y -ddctm680 comparetotmag 12 12 -> 0 -ddctm681 comparetotmag 12 12.0 -> 1 -ddctm682 comparetotmag 12 12.00 -> 1 -ddctm683 comparetotmag 12 12.000 -> 1 -ddctm684 comparetotmag 12 12.0000 -> 1 -ddctm685 comparetotmag 12 12.00000 -> 1 -ddctm686 comparetotmag 12 12.000000 -> 1 -ddctm687 comparetotmag 12 12.0000000 -> 1 -ddctm688 comparetotmag 12 12.00000000 -> 1 -ddctm689 comparetotmag 12 12.000000000 -> 1 -ddctm690 comparetotmag 12 12 -> 0 -ddctm691 comparetotmag 12.0 12 -> -1 -ddctm692 comparetotmag 12.00 12 -> -1 -ddctm693 comparetotmag 12.000 12 -> -1 -ddctm694 comparetotmag 12.0000 12 -> -1 -ddctm695 comparetotmag 12.00000 12 -> -1 -ddctm696 comparetotmag 12.000000 12 -> -1 -ddctm697 comparetotmag 12.0000000 12 -> -1 -ddctm698 comparetotmag 12.00000000 12 -> -1 -ddctm699 comparetotmag 12.000000000 12 -> -1 - --- old long operand checks -ddctm701 comparetotmag 12345678000 1 -> 1 -ddctm702 comparetotmag 1 12345678000 -> -1 -ddctm703 comparetotmag 1234567800 1 -> 1 -ddctm704 comparetotmag 1 1234567800 -> -1 -ddctm705 comparetotmag 1234567890 1 -> 1 -ddctm706 comparetotmag 1 1234567890 -> -1 -ddctm707 comparetotmag 1234567891 1 -> 1 -ddctm708 comparetotmag 1 1234567891 -> -1 -ddctm709 comparetotmag 12345678901 1 -> 1 -ddctm710 comparetotmag 1 12345678901 -> -1 -ddctm711 comparetotmag 1234567896 1 -> 1 -ddctm712 comparetotmag 1 1234567896 -> -1 -ddctm713 comparetotmag -1234567891 1 -> 1 -ddctm714 comparetotmag 1 -1234567891 -> -1 -ddctm715 comparetotmag -12345678901 1 -> 1 -ddctm716 comparetotmag 1 -12345678901 -> -1 -ddctm717 comparetotmag -1234567896 1 -> 1 -ddctm718 comparetotmag 1 -1234567896 -> -1 - --- old residue cases -ddctm740 comparetotmag 1 0.9999999 -> 1 -ddctm741 comparetotmag 1 0.999999 -> 1 -ddctm742 comparetotmag 1 0.99999 -> 1 -ddctm743 comparetotmag 1 1.0000 -> 1 -ddctm744 comparetotmag 1 1.00001 -> -1 -ddctm745 comparetotmag 1 1.000001 -> -1 -ddctm746 comparetotmag 1 1.0000001 -> -1 -ddctm750 comparetotmag 0.9999999 1 -> -1 -ddctm751 comparetotmag 0.999999 1 -> -1 -ddctm752 comparetotmag 0.99999 1 -> -1 -ddctm753 comparetotmag 1.0000 1 -> -1 -ddctm754 comparetotmag 1.00001 1 -> 1 -ddctm755 comparetotmag 1.000001 1 -> 1 -ddctm756 comparetotmag 1.0000001 1 -> 1 - --- Specials -ddctm780 comparetotmag Inf -Inf -> 0 -ddctm781 comparetotmag Inf -1000 -> 1 -ddctm782 comparetotmag Inf -1 -> 1 -ddctm783 comparetotmag Inf -0 -> 1 -ddctm784 comparetotmag Inf 0 -> 1 -ddctm785 comparetotmag Inf 1 -> 1 -ddctm786 comparetotmag Inf 1000 -> 1 -ddctm787 comparetotmag Inf Inf -> 0 -ddctm788 comparetotmag -1000 Inf -> -1 -ddctm789 comparetotmag -Inf Inf -> 0 -ddctm790 comparetotmag -1 Inf -> -1 -ddctm791 comparetotmag -0 Inf -> -1 -ddctm792 comparetotmag 0 Inf -> -1 -ddctm793 comparetotmag 1 Inf -> -1 -ddctm794 comparetotmag 1000 Inf -> -1 -ddctm795 comparetotmag Inf Inf -> 0 - -ddctm800 comparetotmag -Inf -Inf -> 0 -ddctm801 comparetotmag -Inf -1000 -> 1 -ddctm802 comparetotmag -Inf -1 -> 1 -ddctm803 comparetotmag -Inf -0 -> 1 -ddctm804 comparetotmag -Inf 0 -> 1 -ddctm805 comparetotmag -Inf 1 -> 1 -ddctm806 comparetotmag -Inf 1000 -> 1 -ddctm807 comparetotmag -Inf Inf -> 0 -ddctm808 comparetotmag -Inf -Inf -> 0 -ddctm809 comparetotmag -1000 -Inf -> -1 -ddctm810 comparetotmag -1 -Inf -> -1 -ddctm811 comparetotmag -0 -Inf -> -1 -ddctm812 comparetotmag 0 -Inf -> -1 -ddctm813 comparetotmag 1 -Inf -> -1 -ddctm814 comparetotmag 1000 -Inf -> -1 -ddctm815 comparetotmag Inf -Inf -> 0 - -ddctm821 comparetotmag NaN -Inf -> 1 -ddctm822 comparetotmag NaN -1000 -> 1 -ddctm823 comparetotmag NaN -1 -> 1 -ddctm824 comparetotmag NaN -0 -> 1 -ddctm825 comparetotmag NaN 0 -> 1 -ddctm826 comparetotmag NaN 1 -> 1 -ddctm827 comparetotmag NaN 1000 -> 1 -ddctm828 comparetotmag NaN Inf -> 1 -ddctm829 comparetotmag NaN NaN -> 0 -ddctm830 comparetotmag -Inf NaN -> -1 -ddctm831 comparetotmag -1000 NaN -> -1 -ddctm832 comparetotmag -1 NaN -> -1 -ddctm833 comparetotmag -0 NaN -> -1 -ddctm834 comparetotmag 0 NaN -> -1 -ddctm835 comparetotmag 1 NaN -> -1 -ddctm836 comparetotmag 1000 NaN -> -1 -ddctm837 comparetotmag Inf NaN -> -1 -ddctm838 comparetotmag -NaN -NaN -> 0 -ddctm839 comparetotmag +NaN -NaN -> 0 -ddctm840 comparetotmag -NaN +NaN -> 0 - -ddctm841 comparetotmag sNaN -sNaN -> 0 -ddctm842 comparetotmag sNaN -NaN -> -1 -ddctm843 comparetotmag sNaN -Inf -> 1 -ddctm844 comparetotmag sNaN -1000 -> 1 -ddctm845 comparetotmag sNaN -1 -> 1 -ddctm846 comparetotmag sNaN -0 -> 1 -ddctm847 comparetotmag sNaN 0 -> 1 -ddctm848 comparetotmag sNaN 1 -> 1 -ddctm849 comparetotmag sNaN 1000 -> 1 -ddctm850 comparetotmag sNaN NaN -> -1 -ddctm851 comparetotmag sNaN sNaN -> 0 - -ddctm852 comparetotmag -sNaN sNaN -> 0 -ddctm853 comparetotmag -NaN sNaN -> 1 -ddctm854 comparetotmag -Inf sNaN -> -1 -ddctm855 comparetotmag -1000 sNaN -> -1 -ddctm856 comparetotmag -1 sNaN -> -1 -ddctm857 comparetotmag -0 sNaN -> -1 -ddctm858 comparetotmag 0 sNaN -> -1 -ddctm859 comparetotmag 1 sNaN -> -1 -ddctm860 comparetotmag 1000 sNaN -> -1 -ddctm861 comparetotmag Inf sNaN -> -1 -ddctm862 comparetotmag NaN sNaN -> 1 -ddctm863 comparetotmag sNaN sNaN -> 0 - -ddctm871 comparetotmag -sNaN -sNaN -> 0 -ddctm872 comparetotmag -sNaN -NaN -> -1 -ddctm873 comparetotmag -sNaN -Inf -> 1 -ddctm874 comparetotmag -sNaN -1000 -> 1 -ddctm875 comparetotmag -sNaN -1 -> 1 -ddctm876 comparetotmag -sNaN -0 -> 1 -ddctm877 comparetotmag -sNaN 0 -> 1 -ddctm878 comparetotmag -sNaN 1 -> 1 -ddctm879 comparetotmag -sNaN 1000 -> 1 -ddctm880 comparetotmag -sNaN NaN -> -1 -ddctm881 comparetotmag -sNaN sNaN -> 0 - -ddctm882 comparetotmag -sNaN -sNaN -> 0 -ddctm883 comparetotmag -NaN -sNaN -> 1 -ddctm884 comparetotmag -Inf -sNaN -> -1 -ddctm885 comparetotmag -1000 -sNaN -> -1 -ddctm886 comparetotmag -1 -sNaN -> -1 -ddctm887 comparetotmag -0 -sNaN -> -1 -ddctm888 comparetotmag 0 -sNaN -> -1 -ddctm889 comparetotmag 1 -sNaN -> -1 -ddctm890 comparetotmag 1000 -sNaN -> -1 -ddctm891 comparetotmag Inf -sNaN -> -1 -ddctm892 comparetotmag NaN -sNaN -> 1 -ddctm893 comparetotmag sNaN -sNaN -> 0 - --- NaNs with payload -ddctm960 comparetotmag NaN9 -Inf -> 1 -ddctm961 comparetotmag NaN8 999 -> 1 -ddctm962 comparetotmag NaN77 Inf -> 1 -ddctm963 comparetotmag -NaN67 NaN5 -> 1 -ddctm964 comparetotmag -Inf -NaN4 -> -1 -ddctm965 comparetotmag -999 -NaN33 -> -1 -ddctm966 comparetotmag Inf NaN2 -> -1 - -ddctm970 comparetotmag -NaN41 -NaN42 -> -1 -ddctm971 comparetotmag +NaN41 -NaN42 -> -1 -ddctm972 comparetotmag -NaN41 +NaN42 -> -1 -ddctm973 comparetotmag +NaN41 +NaN42 -> -1 -ddctm974 comparetotmag -NaN42 -NaN01 -> 1 -ddctm975 comparetotmag +NaN42 -NaN01 -> 1 -ddctm976 comparetotmag -NaN42 +NaN01 -> 1 -ddctm977 comparetotmag +NaN42 +NaN01 -> 1 - -ddctm980 comparetotmag -sNaN771 -sNaN772 -> -1 -ddctm981 comparetotmag +sNaN771 -sNaN772 -> -1 -ddctm982 comparetotmag -sNaN771 +sNaN772 -> -1 -ddctm983 comparetotmag +sNaN771 +sNaN772 -> -1 -ddctm984 comparetotmag -sNaN772 -sNaN771 -> 1 -ddctm985 comparetotmag +sNaN772 -sNaN771 -> 1 -ddctm986 comparetotmag -sNaN772 +sNaN771 -> 1 -ddctm987 comparetotmag +sNaN772 +sNaN771 -> 1 - -ddctm991 comparetotmag -sNaN99 -Inf -> 1 -ddctm992 comparetotmag sNaN98 -11 -> 1 -ddctm993 comparetotmag sNaN97 NaN -> -1 -ddctm994 comparetotmag sNaN16 sNaN94 -> -1 -ddctm995 comparetotmag NaN85 sNaN83 -> 1 -ddctm996 comparetotmag -Inf sNaN92 -> -1 -ddctm997 comparetotmag 088 sNaN81 -> -1 -ddctm998 comparetotmag Inf sNaN90 -> -1 -ddctm999 comparetotmag NaN -sNaN89 -> 1 - --- spread zeros -ddctm1110 comparetotmag 0E-383 0 -> -1 -ddctm1111 comparetotmag 0E-383 -0 -> -1 -ddctm1112 comparetotmag -0E-383 0 -> -1 -ddctm1113 comparetotmag -0E-383 -0 -> -1 -ddctm1114 comparetotmag 0E-383 0E+384 -> -1 -ddctm1115 comparetotmag 0E-383 -0E+384 -> -1 -ddctm1116 comparetotmag -0E-383 0E+384 -> -1 -ddctm1117 comparetotmag -0E-383 -0E+384 -> -1 -ddctm1118 comparetotmag 0 0E+384 -> -1 -ddctm1119 comparetotmag 0 -0E+384 -> -1 -ddctm1120 comparetotmag -0 0E+384 -> -1 -ddctm1121 comparetotmag -0 -0E+384 -> -1 - -ddctm1130 comparetotmag 0E+384 0 -> 1 -ddctm1131 comparetotmag 0E+384 -0 -> 1 -ddctm1132 comparetotmag -0E+384 0 -> 1 -ddctm1133 comparetotmag -0E+384 -0 -> 1 -ddctm1134 comparetotmag 0E+384 0E-383 -> 1 -ddctm1135 comparetotmag 0E+384 -0E-383 -> 1 -ddctm1136 comparetotmag -0E+384 0E-383 -> 1 -ddctm1137 comparetotmag -0E+384 -0E-383 -> 1 -ddctm1138 comparetotmag 0 0E-383 -> 1 -ddctm1139 comparetotmag 0 -0E-383 -> 1 -ddctm1140 comparetotmag -0 0E-383 -> 1 -ddctm1141 comparetotmag -0 -0E-383 -> 1 - --- Null tests -ddctm9990 comparetotmag 10 # -> NaN Invalid_operation -ddctm9991 comparetotmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddCompareTotalMag.decTest -- decDouble comparison; abs. total order-- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddctm001 comparetotmag -2 -2 -> 0 +ddctm002 comparetotmag -2 -1 -> 1 +ddctm003 comparetotmag -2 0 -> 1 +ddctm004 comparetotmag -2 1 -> 1 +ddctm005 comparetotmag -2 2 -> 0 +ddctm006 comparetotmag -1 -2 -> -1 +ddctm007 comparetotmag -1 -1 -> 0 +ddctm008 comparetotmag -1 0 -> 1 +ddctm009 comparetotmag -1 1 -> 0 +ddctm010 comparetotmag -1 2 -> -1 +ddctm011 comparetotmag 0 -2 -> -1 +ddctm012 comparetotmag 0 -1 -> -1 +ddctm013 comparetotmag 0 0 -> 0 +ddctm014 comparetotmag 0 1 -> -1 +ddctm015 comparetotmag 0 2 -> -1 +ddctm016 comparetotmag 1 -2 -> -1 +ddctm017 comparetotmag 1 -1 -> 0 +ddctm018 comparetotmag 1 0 -> 1 +ddctm019 comparetotmag 1 1 -> 0 +ddctm020 comparetotmag 1 2 -> -1 +ddctm021 comparetotmag 2 -2 -> 0 +ddctm022 comparetotmag 2 -1 -> 1 +ddctm023 comparetotmag 2 0 -> 1 +ddctm025 comparetotmag 2 1 -> 1 +ddctm026 comparetotmag 2 2 -> 0 + +ddctm031 comparetotmag -20 -20 -> 0 +ddctm032 comparetotmag -20 -10 -> 1 +ddctm033 comparetotmag -20 00 -> 1 +ddctm034 comparetotmag -20 10 -> 1 +ddctm035 comparetotmag -20 20 -> 0 +ddctm036 comparetotmag -10 -20 -> -1 +ddctm037 comparetotmag -10 -10 -> 0 +ddctm038 comparetotmag -10 00 -> 1 +ddctm039 comparetotmag -10 10 -> 0 +ddctm040 comparetotmag -10 20 -> -1 +ddctm041 comparetotmag 00 -20 -> -1 +ddctm042 comparetotmag 00 -10 -> -1 +ddctm043 comparetotmag 00 00 -> 0 +ddctm044 comparetotmag 00 10 -> -1 +ddctm045 comparetotmag 00 20 -> -1 +ddctm046 comparetotmag 10 -20 -> -1 +ddctm047 comparetotmag 10 -10 -> 0 +ddctm048 comparetotmag 10 00 -> 1 +ddctm049 comparetotmag 10 10 -> 0 +ddctm050 comparetotmag 10 20 -> -1 +ddctm051 comparetotmag 20 -20 -> 0 +ddctm052 comparetotmag 20 -10 -> 1 +ddctm053 comparetotmag 20 00 -> 1 +ddctm055 comparetotmag 20 10 -> 1 +ddctm056 comparetotmag 20 20 -> 0 + +ddctm061 comparetotmag -2.0 -2.0 -> 0 +ddctm062 comparetotmag -2.0 -1.0 -> 1 +ddctm063 comparetotmag -2.0 0.0 -> 1 +ddctm064 comparetotmag -2.0 1.0 -> 1 +ddctm065 comparetotmag -2.0 2.0 -> 0 +ddctm066 comparetotmag -1.0 -2.0 -> -1 +ddctm067 comparetotmag -1.0 -1.0 -> 0 +ddctm068 comparetotmag -1.0 0.0 -> 1 +ddctm069 comparetotmag -1.0 1.0 -> 0 +ddctm070 comparetotmag -1.0 2.0 -> -1 +ddctm071 comparetotmag 0.0 -2.0 -> -1 +ddctm072 comparetotmag 0.0 -1.0 -> -1 +ddctm073 comparetotmag 0.0 0.0 -> 0 +ddctm074 comparetotmag 0.0 1.0 -> -1 +ddctm075 comparetotmag 0.0 2.0 -> -1 +ddctm076 comparetotmag 1.0 -2.0 -> -1 +ddctm077 comparetotmag 1.0 -1.0 -> 0 +ddctm078 comparetotmag 1.0 0.0 -> 1 +ddctm079 comparetotmag 1.0 1.0 -> 0 +ddctm080 comparetotmag 1.0 2.0 -> -1 +ddctm081 comparetotmag 2.0 -2.0 -> 0 +ddctm082 comparetotmag 2.0 -1.0 -> 1 +ddctm083 comparetotmag 2.0 0.0 -> 1 +ddctm085 comparetotmag 2.0 1.0 -> 1 +ddctm086 comparetotmag 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +ddctm090 comparetotmag 9.99999999E+384 9.99999999E+384 -> 0 +ddctm091 comparetotmag -9.99999999E+384 9.99999999E+384 -> 0 +ddctm092 comparetotmag 9.99999999E+384 -9.99999999E+384 -> 0 +ddctm093 comparetotmag -9.99999999E+384 -9.99999999E+384 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +ddctm100 comparetotmag 7.0 7.0 -> 0 +ddctm101 comparetotmag 7.0 7 -> -1 +ddctm102 comparetotmag 7 7.0 -> 1 +ddctm103 comparetotmag 7E+0 7.0 -> 1 +ddctm104 comparetotmag 70E-1 7.0 -> 0 +ddctm105 comparetotmag 0.7E+1 7 -> 0 +ddctm106 comparetotmag 70E-1 7 -> -1 +ddctm107 comparetotmag 7.0 7E+0 -> -1 +ddctm108 comparetotmag 7.0 70E-1 -> 0 +ddctm109 comparetotmag 7 0.7E+1 -> 0 +ddctm110 comparetotmag 7 70E-1 -> 1 + +ddctm120 comparetotmag 8.0 7.0 -> 1 +ddctm121 comparetotmag 8.0 7 -> 1 +ddctm122 comparetotmag 8 7.0 -> 1 +ddctm123 comparetotmag 8E+0 7.0 -> 1 +ddctm124 comparetotmag 80E-1 7.0 -> 1 +ddctm125 comparetotmag 0.8E+1 7 -> 1 +ddctm126 comparetotmag 80E-1 7 -> 1 +ddctm127 comparetotmag 8.0 7E+0 -> 1 +ddctm128 comparetotmag 8.0 70E-1 -> 1 +ddctm129 comparetotmag 8 0.7E+1 -> 1 +ddctm130 comparetotmag 8 70E-1 -> 1 + +ddctm140 comparetotmag 8.0 9.0 -> -1 +ddctm141 comparetotmag 8.0 9 -> -1 +ddctm142 comparetotmag 8 9.0 -> -1 +ddctm143 comparetotmag 8E+0 9.0 -> -1 +ddctm144 comparetotmag 80E-1 9.0 -> -1 +ddctm145 comparetotmag 0.8E+1 9 -> -1 +ddctm146 comparetotmag 80E-1 9 -> -1 +ddctm147 comparetotmag 8.0 9E+0 -> -1 +ddctm148 comparetotmag 8.0 90E-1 -> -1 +ddctm149 comparetotmag 8 0.9E+1 -> -1 +ddctm150 comparetotmag 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ddctm200 comparetotmag -7.0 7.0 -> 0 +ddctm201 comparetotmag -7.0 7 -> -1 +ddctm202 comparetotmag -7 7.0 -> 1 +ddctm203 comparetotmag -7E+0 7.0 -> 1 +ddctm204 comparetotmag -70E-1 7.0 -> 0 +ddctm205 comparetotmag -0.7E+1 7 -> 0 +ddctm206 comparetotmag -70E-1 7 -> -1 +ddctm207 comparetotmag -7.0 7E+0 -> -1 +ddctm208 comparetotmag -7.0 70E-1 -> 0 +ddctm209 comparetotmag -7 0.7E+1 -> 0 +ddctm210 comparetotmag -7 70E-1 -> 1 + +ddctm220 comparetotmag -8.0 7.0 -> 1 +ddctm221 comparetotmag -8.0 7 -> 1 +ddctm222 comparetotmag -8 7.0 -> 1 +ddctm223 comparetotmag -8E+0 7.0 -> 1 +ddctm224 comparetotmag -80E-1 7.0 -> 1 +ddctm225 comparetotmag -0.8E+1 7 -> 1 +ddctm226 comparetotmag -80E-1 7 -> 1 +ddctm227 comparetotmag -8.0 7E+0 -> 1 +ddctm228 comparetotmag -8.0 70E-1 -> 1 +ddctm229 comparetotmag -8 0.7E+1 -> 1 +ddctm230 comparetotmag -8 70E-1 -> 1 + +ddctm240 comparetotmag -8.0 9.0 -> -1 +ddctm241 comparetotmag -8.0 9 -> -1 +ddctm242 comparetotmag -8 9.0 -> -1 +ddctm243 comparetotmag -8E+0 9.0 -> -1 +ddctm244 comparetotmag -80E-1 9.0 -> -1 +ddctm245 comparetotmag -0.8E+1 9 -> -1 +ddctm246 comparetotmag -80E-1 9 -> -1 +ddctm247 comparetotmag -8.0 9E+0 -> -1 +ddctm248 comparetotmag -8.0 90E-1 -> -1 +ddctm249 comparetotmag -8 0.9E+1 -> -1 +ddctm250 comparetotmag -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ddctm300 comparetotmag 7.0 -7.0 -> 0 +ddctm301 comparetotmag 7.0 -7 -> -1 +ddctm302 comparetotmag 7 -7.0 -> 1 +ddctm303 comparetotmag 7E+0 -7.0 -> 1 +ddctm304 comparetotmag 70E-1 -7.0 -> 0 +ddctm305 comparetotmag .7E+1 -7 -> 0 +ddctm306 comparetotmag 70E-1 -7 -> -1 +ddctm307 comparetotmag 7.0 -7E+0 -> -1 +ddctm308 comparetotmag 7.0 -70E-1 -> 0 +ddctm309 comparetotmag 7 -.7E+1 -> 0 +ddctm310 comparetotmag 7 -70E-1 -> 1 + +ddctm320 comparetotmag 8.0 -7.0 -> 1 +ddctm321 comparetotmag 8.0 -7 -> 1 +ddctm322 comparetotmag 8 -7.0 -> 1 +ddctm323 comparetotmag 8E+0 -7.0 -> 1 +ddctm324 comparetotmag 80E-1 -7.0 -> 1 +ddctm325 comparetotmag .8E+1 -7 -> 1 +ddctm326 comparetotmag 80E-1 -7 -> 1 +ddctm327 comparetotmag 8.0 -7E+0 -> 1 +ddctm328 comparetotmag 8.0 -70E-1 -> 1 +ddctm329 comparetotmag 8 -.7E+1 -> 1 +ddctm330 comparetotmag 8 -70E-1 -> 1 + +ddctm340 comparetotmag 8.0 -9.0 -> -1 +ddctm341 comparetotmag 8.0 -9 -> -1 +ddctm342 comparetotmag 8 -9.0 -> -1 +ddctm343 comparetotmag 8E+0 -9.0 -> -1 +ddctm344 comparetotmag 80E-1 -9.0 -> -1 +ddctm345 comparetotmag .8E+1 -9 -> -1 +ddctm346 comparetotmag 80E-1 -9 -> -1 +ddctm347 comparetotmag 8.0 -9E+0 -> -1 +ddctm348 comparetotmag 8.0 -90E-1 -> -1 +ddctm349 comparetotmag 8 -.9E+1 -> -1 +ddctm350 comparetotmag 8 -90E-1 -> -1 + +-- and again, with sign changes -- .. +ddctm400 comparetotmag -7.0 -7.0 -> 0 +ddctm401 comparetotmag -7.0 -7 -> -1 +ddctm402 comparetotmag -7 -7.0 -> 1 +ddctm403 comparetotmag -7E+0 -7.0 -> 1 +ddctm404 comparetotmag -70E-1 -7.0 -> 0 +ddctm405 comparetotmag -.7E+1 -7 -> 0 +ddctm406 comparetotmag -70E-1 -7 -> -1 +ddctm407 comparetotmag -7.0 -7E+0 -> -1 +ddctm408 comparetotmag -7.0 -70E-1 -> 0 +ddctm409 comparetotmag -7 -.7E+1 -> 0 +ddctm410 comparetotmag -7 -70E-1 -> 1 + +ddctm420 comparetotmag -8.0 -7.0 -> 1 +ddctm421 comparetotmag -8.0 -7 -> 1 +ddctm422 comparetotmag -8 -7.0 -> 1 +ddctm423 comparetotmag -8E+0 -7.0 -> 1 +ddctm424 comparetotmag -80E-1 -7.0 -> 1 +ddctm425 comparetotmag -.8E+1 -7 -> 1 +ddctm426 comparetotmag -80E-1 -7 -> 1 +ddctm427 comparetotmag -8.0 -7E+0 -> 1 +ddctm428 comparetotmag -8.0 -70E-1 -> 1 +ddctm429 comparetotmag -8 -.7E+1 -> 1 +ddctm430 comparetotmag -8 -70E-1 -> 1 + +ddctm440 comparetotmag -8.0 -9.0 -> -1 +ddctm441 comparetotmag -8.0 -9 -> -1 +ddctm442 comparetotmag -8 -9.0 -> -1 +ddctm443 comparetotmag -8E+0 -9.0 -> -1 +ddctm444 comparetotmag -80E-1 -9.0 -> -1 +ddctm445 comparetotmag -.8E+1 -9 -> -1 +ddctm446 comparetotmag -80E-1 -9 -> -1 +ddctm447 comparetotmag -8.0 -9E+0 -> -1 +ddctm448 comparetotmag -8.0 -90E-1 -> -1 +ddctm449 comparetotmag -8 -.9E+1 -> -1 +ddctm450 comparetotmag -8 -90E-1 -> -1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +ddctm473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 +ddctm474 comparetotmag 123.456000000000E+89 123.456E+89 -> -1 +ddctm475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 +ddctm476 comparetotmag 123.4560000000E+89 123.456E+89 -> -1 +ddctm477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 +ddctm478 comparetotmag 123.45600000E+89 123.456E+89 -> -1 +ddctm479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 +ddctm480 comparetotmag 123.456000E+89 123.456E+89 -> -1 +ddctm481 comparetotmag 123.45600E-89 123.456E-89 -> -1 +ddctm482 comparetotmag 123.4560E+89 123.456E+89 -> -1 +ddctm483 comparetotmag 123.456E-89 123.456E-89 -> 0 +ddctm487 comparetotmag 123.456E+89 123.4560000000000E+89 -> 1 +ddctm488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 +ddctm489 comparetotmag 123.456E+89 123.45600000000E+89 -> 1 +ddctm490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 +ddctm491 comparetotmag 123.456E+89 123.456000000E+89 -> 1 +ddctm492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 +ddctm493 comparetotmag 123.456E+89 123.4560000E+89 -> 1 +ddctm494 comparetotmag 123.456E-89 123.456000E-89 -> 1 +ddctm495 comparetotmag 123.456E+89 123.45600E+89 -> 1 +ddctm496 comparetotmag 123.456E-89 123.4560E-89 -> 1 +ddctm497 comparetotmag 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +ddctm498 comparetotmag 1 1E-17 -> 1 +ddctm499 comparetotmag 1 1E-16 -> 1 +ddctm500 comparetotmag 1 1E-15 -> 1 +ddctm501 comparetotmag 1 1E-14 -> 1 +ddctm502 comparetotmag 1 1E-13 -> 1 +ddctm503 comparetotmag 1 1E-12 -> 1 +ddctm504 comparetotmag 1 1E-11 -> 1 +ddctm505 comparetotmag 1 1E-10 -> 1 +ddctm506 comparetotmag 1 1E-9 -> 1 +ddctm507 comparetotmag 1 1E-8 -> 1 +ddctm508 comparetotmag 1 1E-7 -> 1 +ddctm509 comparetotmag 1 1E-6 -> 1 +ddctm510 comparetotmag 1 1E-5 -> 1 +ddctm511 comparetotmag 1 1E-4 -> 1 +ddctm512 comparetotmag 1 1E-3 -> 1 +ddctm513 comparetotmag 1 1E-2 -> 1 +ddctm514 comparetotmag 1 1E-1 -> 1 +ddctm515 comparetotmag 1 1E-0 -> 0 +ddctm516 comparetotmag 1 1E+1 -> -1 +ddctm517 comparetotmag 1 1E+2 -> -1 +ddctm518 comparetotmag 1 1E+3 -> -1 +ddctm519 comparetotmag 1 1E+4 -> -1 +ddctm521 comparetotmag 1 1E+5 -> -1 +ddctm522 comparetotmag 1 1E+6 -> -1 +ddctm523 comparetotmag 1 1E+7 -> -1 +ddctm524 comparetotmag 1 1E+8 -> -1 +ddctm525 comparetotmag 1 1E+9 -> -1 +ddctm526 comparetotmag 1 1E+10 -> -1 +ddctm527 comparetotmag 1 1E+11 -> -1 +ddctm528 comparetotmag 1 1E+12 -> -1 +ddctm529 comparetotmag 1 1E+13 -> -1 +ddctm530 comparetotmag 1 1E+14 -> -1 +ddctm531 comparetotmag 1 1E+15 -> -1 +ddctm532 comparetotmag 1 1E+16 -> -1 +ddctm533 comparetotmag 1 1E+17 -> -1 +-- LR swap +ddctm538 comparetotmag 1E-17 1 -> -1 +ddctm539 comparetotmag 1E-16 1 -> -1 +ddctm540 comparetotmag 1E-15 1 -> -1 +ddctm541 comparetotmag 1E-14 1 -> -1 +ddctm542 comparetotmag 1E-13 1 -> -1 +ddctm543 comparetotmag 1E-12 1 -> -1 +ddctm544 comparetotmag 1E-11 1 -> -1 +ddctm545 comparetotmag 1E-10 1 -> -1 +ddctm546 comparetotmag 1E-9 1 -> -1 +ddctm547 comparetotmag 1E-8 1 -> -1 +ddctm548 comparetotmag 1E-7 1 -> -1 +ddctm549 comparetotmag 1E-6 1 -> -1 +ddctm550 comparetotmag 1E-5 1 -> -1 +ddctm551 comparetotmag 1E-4 1 -> -1 +ddctm552 comparetotmag 1E-3 1 -> -1 +ddctm553 comparetotmag 1E-2 1 -> -1 +ddctm554 comparetotmag 1E-1 1 -> -1 +ddctm555 comparetotmag 1E-0 1 -> 0 +ddctm556 comparetotmag 1E+1 1 -> 1 +ddctm557 comparetotmag 1E+2 1 -> 1 +ddctm558 comparetotmag 1E+3 1 -> 1 +ddctm559 comparetotmag 1E+4 1 -> 1 +ddctm561 comparetotmag 1E+5 1 -> 1 +ddctm562 comparetotmag 1E+6 1 -> 1 +ddctm563 comparetotmag 1E+7 1 -> 1 +ddctm564 comparetotmag 1E+8 1 -> 1 +ddctm565 comparetotmag 1E+9 1 -> 1 +ddctm566 comparetotmag 1E+10 1 -> 1 +ddctm567 comparetotmag 1E+11 1 -> 1 +ddctm568 comparetotmag 1E+12 1 -> 1 +ddctm569 comparetotmag 1E+13 1 -> 1 +ddctm570 comparetotmag 1E+14 1 -> 1 +ddctm571 comparetotmag 1E+15 1 -> 1 +ddctm572 comparetotmag 1E+16 1 -> 1 +ddctm573 comparetotmag 1E+17 1 -> 1 +-- similar with a useful coefficient, one side only +ddctm578 comparetotmag 0.000000987654321 1E-17 -> 1 +ddctm579 comparetotmag 0.000000987654321 1E-16 -> 1 +ddctm580 comparetotmag 0.000000987654321 1E-15 -> 1 +ddctm581 comparetotmag 0.000000987654321 1E-14 -> 1 +ddctm582 comparetotmag 0.000000987654321 1E-13 -> 1 +ddctm583 comparetotmag 0.000000987654321 1E-12 -> 1 +ddctm584 comparetotmag 0.000000987654321 1E-11 -> 1 +ddctm585 comparetotmag 0.000000987654321 1E-10 -> 1 +ddctm586 comparetotmag 0.000000987654321 1E-9 -> 1 +ddctm587 comparetotmag 0.000000987654321 1E-8 -> 1 +ddctm588 comparetotmag 0.000000987654321 1E-7 -> 1 +ddctm589 comparetotmag 0.000000987654321 1E-6 -> -1 +ddctm590 comparetotmag 0.000000987654321 1E-5 -> -1 +ddctm591 comparetotmag 0.000000987654321 1E-4 -> -1 +ddctm592 comparetotmag 0.000000987654321 1E-3 -> -1 +ddctm593 comparetotmag 0.000000987654321 1E-2 -> -1 +ddctm594 comparetotmag 0.000000987654321 1E-1 -> -1 +ddctm595 comparetotmag 0.000000987654321 1E-0 -> -1 +ddctm596 comparetotmag 0.000000987654321 1E+1 -> -1 +ddctm597 comparetotmag 0.000000987654321 1E+2 -> -1 +ddctm598 comparetotmag 0.000000987654321 1E+3 -> -1 +ddctm599 comparetotmag 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +ddctm600 comparetotmag 12 12.2345 -> -1 +ddctm601 comparetotmag 12.0 12.2345 -> -1 +ddctm602 comparetotmag 12.00 12.2345 -> -1 +ddctm603 comparetotmag 12.000 12.2345 -> -1 +ddctm604 comparetotmag 12.0000 12.2345 -> -1 +ddctm605 comparetotmag 12.00000 12.2345 -> -1 +ddctm606 comparetotmag 12.000000 12.2345 -> -1 +ddctm607 comparetotmag 12.0000000 12.2345 -> -1 +ddctm608 comparetotmag 12.00000000 12.2345 -> -1 +ddctm609 comparetotmag 12.000000000 12.2345 -> -1 +ddctm610 comparetotmag 12.1234 12 -> 1 +ddctm611 comparetotmag 12.1234 12.0 -> 1 +ddctm612 comparetotmag 12.1234 12.00 -> 1 +ddctm613 comparetotmag 12.1234 12.000 -> 1 +ddctm614 comparetotmag 12.1234 12.0000 -> 1 +ddctm615 comparetotmag 12.1234 12.00000 -> 1 +ddctm616 comparetotmag 12.1234 12.000000 -> 1 +ddctm617 comparetotmag 12.1234 12.0000000 -> 1 +ddctm618 comparetotmag 12.1234 12.00000000 -> 1 +ddctm619 comparetotmag 12.1234 12.000000000 -> 1 +ddctm620 comparetotmag -12 -12.2345 -> -1 +ddctm621 comparetotmag -12.0 -12.2345 -> -1 +ddctm622 comparetotmag -12.00 -12.2345 -> -1 +ddctm623 comparetotmag -12.000 -12.2345 -> -1 +ddctm624 comparetotmag -12.0000 -12.2345 -> -1 +ddctm625 comparetotmag -12.00000 -12.2345 -> -1 +ddctm626 comparetotmag -12.000000 -12.2345 -> -1 +ddctm627 comparetotmag -12.0000000 -12.2345 -> -1 +ddctm628 comparetotmag -12.00000000 -12.2345 -> -1 +ddctm629 comparetotmag -12.000000000 -12.2345 -> -1 +ddctm630 comparetotmag -12.1234 -12 -> 1 +ddctm631 comparetotmag -12.1234 -12.0 -> 1 +ddctm632 comparetotmag -12.1234 -12.00 -> 1 +ddctm633 comparetotmag -12.1234 -12.000 -> 1 +ddctm634 comparetotmag -12.1234 -12.0000 -> 1 +ddctm635 comparetotmag -12.1234 -12.00000 -> 1 +ddctm636 comparetotmag -12.1234 -12.000000 -> 1 +ddctm637 comparetotmag -12.1234 -12.0000000 -> 1 +ddctm638 comparetotmag -12.1234 -12.00000000 -> 1 +ddctm639 comparetotmag -12.1234 -12.000000000 -> 1 + +-- extended zeros +ddctm640 comparetotmag 0 0 -> 0 +ddctm641 comparetotmag 0 -0 -> 0 +ddctm642 comparetotmag 0 -0.0 -> 1 +ddctm643 comparetotmag 0 0.0 -> 1 +ddctm644 comparetotmag -0 0 -> 0 +ddctm645 comparetotmag -0 -0 -> 0 +ddctm646 comparetotmag -0 -0.0 -> 1 +ddctm647 comparetotmag -0 0.0 -> 1 +ddctm648 comparetotmag 0.0 0 -> -1 +ddctm649 comparetotmag 0.0 -0 -> -1 +ddctm650 comparetotmag 0.0 -0.0 -> 0 +ddctm651 comparetotmag 0.0 0.0 -> 0 +ddctm652 comparetotmag -0.0 0 -> -1 +ddctm653 comparetotmag -0.0 -0 -> -1 +ddctm654 comparetotmag -0.0 -0.0 -> 0 +ddctm655 comparetotmag -0.0 0.0 -> 0 + +ddctm656 comparetotmag -0E1 0.0 -> 1 +ddctm657 comparetotmag -0E2 0.0 -> 1 +ddctm658 comparetotmag 0E1 0.0 -> 1 +ddctm659 comparetotmag 0E2 0.0 -> 1 +ddctm660 comparetotmag -0E1 0 -> 1 +ddctm661 comparetotmag -0E2 0 -> 1 +ddctm662 comparetotmag 0E1 0 -> 1 +ddctm663 comparetotmag 0E2 0 -> 1 +ddctm664 comparetotmag -0E1 -0E1 -> 0 +ddctm665 comparetotmag -0E2 -0E1 -> 1 +ddctm666 comparetotmag 0E1 -0E1 -> 0 +ddctm667 comparetotmag 0E2 -0E1 -> 1 +ddctm668 comparetotmag -0E1 -0E2 -> -1 +ddctm669 comparetotmag -0E2 -0E2 -> 0 +ddctm670 comparetotmag 0E1 -0E2 -> -1 +ddctm671 comparetotmag 0E2 -0E2 -> 0 +ddctm672 comparetotmag -0E1 0E1 -> 0 +ddctm673 comparetotmag -0E2 0E1 -> 1 +ddctm674 comparetotmag 0E1 0E1 -> 0 +ddctm675 comparetotmag 0E2 0E1 -> 1 +ddctm676 comparetotmag -0E1 0E2 -> -1 +ddctm677 comparetotmag -0E2 0E2 -> 0 +ddctm678 comparetotmag 0E1 0E2 -> -1 +ddctm679 comparetotmag 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +ddctm680 comparetotmag 12 12 -> 0 +ddctm681 comparetotmag 12 12.0 -> 1 +ddctm682 comparetotmag 12 12.00 -> 1 +ddctm683 comparetotmag 12 12.000 -> 1 +ddctm684 comparetotmag 12 12.0000 -> 1 +ddctm685 comparetotmag 12 12.00000 -> 1 +ddctm686 comparetotmag 12 12.000000 -> 1 +ddctm687 comparetotmag 12 12.0000000 -> 1 +ddctm688 comparetotmag 12 12.00000000 -> 1 +ddctm689 comparetotmag 12 12.000000000 -> 1 +ddctm690 comparetotmag 12 12 -> 0 +ddctm691 comparetotmag 12.0 12 -> -1 +ddctm692 comparetotmag 12.00 12 -> -1 +ddctm693 comparetotmag 12.000 12 -> -1 +ddctm694 comparetotmag 12.0000 12 -> -1 +ddctm695 comparetotmag 12.00000 12 -> -1 +ddctm696 comparetotmag 12.000000 12 -> -1 +ddctm697 comparetotmag 12.0000000 12 -> -1 +ddctm698 comparetotmag 12.00000000 12 -> -1 +ddctm699 comparetotmag 12.000000000 12 -> -1 + +-- old long operand checks +ddctm701 comparetotmag 12345678000 1 -> 1 +ddctm702 comparetotmag 1 12345678000 -> -1 +ddctm703 comparetotmag 1234567800 1 -> 1 +ddctm704 comparetotmag 1 1234567800 -> -1 +ddctm705 comparetotmag 1234567890 1 -> 1 +ddctm706 comparetotmag 1 1234567890 -> -1 +ddctm707 comparetotmag 1234567891 1 -> 1 +ddctm708 comparetotmag 1 1234567891 -> -1 +ddctm709 comparetotmag 12345678901 1 -> 1 +ddctm710 comparetotmag 1 12345678901 -> -1 +ddctm711 comparetotmag 1234567896 1 -> 1 +ddctm712 comparetotmag 1 1234567896 -> -1 +ddctm713 comparetotmag -1234567891 1 -> 1 +ddctm714 comparetotmag 1 -1234567891 -> -1 +ddctm715 comparetotmag -12345678901 1 -> 1 +ddctm716 comparetotmag 1 -12345678901 -> -1 +ddctm717 comparetotmag -1234567896 1 -> 1 +ddctm718 comparetotmag 1 -1234567896 -> -1 + +-- old residue cases +ddctm740 comparetotmag 1 0.9999999 -> 1 +ddctm741 comparetotmag 1 0.999999 -> 1 +ddctm742 comparetotmag 1 0.99999 -> 1 +ddctm743 comparetotmag 1 1.0000 -> 1 +ddctm744 comparetotmag 1 1.00001 -> -1 +ddctm745 comparetotmag 1 1.000001 -> -1 +ddctm746 comparetotmag 1 1.0000001 -> -1 +ddctm750 comparetotmag 0.9999999 1 -> -1 +ddctm751 comparetotmag 0.999999 1 -> -1 +ddctm752 comparetotmag 0.99999 1 -> -1 +ddctm753 comparetotmag 1.0000 1 -> -1 +ddctm754 comparetotmag 1.00001 1 -> 1 +ddctm755 comparetotmag 1.000001 1 -> 1 +ddctm756 comparetotmag 1.0000001 1 -> 1 + +-- Specials +ddctm780 comparetotmag Inf -Inf -> 0 +ddctm781 comparetotmag Inf -1000 -> 1 +ddctm782 comparetotmag Inf -1 -> 1 +ddctm783 comparetotmag Inf -0 -> 1 +ddctm784 comparetotmag Inf 0 -> 1 +ddctm785 comparetotmag Inf 1 -> 1 +ddctm786 comparetotmag Inf 1000 -> 1 +ddctm787 comparetotmag Inf Inf -> 0 +ddctm788 comparetotmag -1000 Inf -> -1 +ddctm789 comparetotmag -Inf Inf -> 0 +ddctm790 comparetotmag -1 Inf -> -1 +ddctm791 comparetotmag -0 Inf -> -1 +ddctm792 comparetotmag 0 Inf -> -1 +ddctm793 comparetotmag 1 Inf -> -1 +ddctm794 comparetotmag 1000 Inf -> -1 +ddctm795 comparetotmag Inf Inf -> 0 + +ddctm800 comparetotmag -Inf -Inf -> 0 +ddctm801 comparetotmag -Inf -1000 -> 1 +ddctm802 comparetotmag -Inf -1 -> 1 +ddctm803 comparetotmag -Inf -0 -> 1 +ddctm804 comparetotmag -Inf 0 -> 1 +ddctm805 comparetotmag -Inf 1 -> 1 +ddctm806 comparetotmag -Inf 1000 -> 1 +ddctm807 comparetotmag -Inf Inf -> 0 +ddctm808 comparetotmag -Inf -Inf -> 0 +ddctm809 comparetotmag -1000 -Inf -> -1 +ddctm810 comparetotmag -1 -Inf -> -1 +ddctm811 comparetotmag -0 -Inf -> -1 +ddctm812 comparetotmag 0 -Inf -> -1 +ddctm813 comparetotmag 1 -Inf -> -1 +ddctm814 comparetotmag 1000 -Inf -> -1 +ddctm815 comparetotmag Inf -Inf -> 0 + +ddctm821 comparetotmag NaN -Inf -> 1 +ddctm822 comparetotmag NaN -1000 -> 1 +ddctm823 comparetotmag NaN -1 -> 1 +ddctm824 comparetotmag NaN -0 -> 1 +ddctm825 comparetotmag NaN 0 -> 1 +ddctm826 comparetotmag NaN 1 -> 1 +ddctm827 comparetotmag NaN 1000 -> 1 +ddctm828 comparetotmag NaN Inf -> 1 +ddctm829 comparetotmag NaN NaN -> 0 +ddctm830 comparetotmag -Inf NaN -> -1 +ddctm831 comparetotmag -1000 NaN -> -1 +ddctm832 comparetotmag -1 NaN -> -1 +ddctm833 comparetotmag -0 NaN -> -1 +ddctm834 comparetotmag 0 NaN -> -1 +ddctm835 comparetotmag 1 NaN -> -1 +ddctm836 comparetotmag 1000 NaN -> -1 +ddctm837 comparetotmag Inf NaN -> -1 +ddctm838 comparetotmag -NaN -NaN -> 0 +ddctm839 comparetotmag +NaN -NaN -> 0 +ddctm840 comparetotmag -NaN +NaN -> 0 + +ddctm841 comparetotmag sNaN -sNaN -> 0 +ddctm842 comparetotmag sNaN -NaN -> -1 +ddctm843 comparetotmag sNaN -Inf -> 1 +ddctm844 comparetotmag sNaN -1000 -> 1 +ddctm845 comparetotmag sNaN -1 -> 1 +ddctm846 comparetotmag sNaN -0 -> 1 +ddctm847 comparetotmag sNaN 0 -> 1 +ddctm848 comparetotmag sNaN 1 -> 1 +ddctm849 comparetotmag sNaN 1000 -> 1 +ddctm850 comparetotmag sNaN NaN -> -1 +ddctm851 comparetotmag sNaN sNaN -> 0 + +ddctm852 comparetotmag -sNaN sNaN -> 0 +ddctm853 comparetotmag -NaN sNaN -> 1 +ddctm854 comparetotmag -Inf sNaN -> -1 +ddctm855 comparetotmag -1000 sNaN -> -1 +ddctm856 comparetotmag -1 sNaN -> -1 +ddctm857 comparetotmag -0 sNaN -> -1 +ddctm858 comparetotmag 0 sNaN -> -1 +ddctm859 comparetotmag 1 sNaN -> -1 +ddctm860 comparetotmag 1000 sNaN -> -1 +ddctm861 comparetotmag Inf sNaN -> -1 +ddctm862 comparetotmag NaN sNaN -> 1 +ddctm863 comparetotmag sNaN sNaN -> 0 + +ddctm871 comparetotmag -sNaN -sNaN -> 0 +ddctm872 comparetotmag -sNaN -NaN -> -1 +ddctm873 comparetotmag -sNaN -Inf -> 1 +ddctm874 comparetotmag -sNaN -1000 -> 1 +ddctm875 comparetotmag -sNaN -1 -> 1 +ddctm876 comparetotmag -sNaN -0 -> 1 +ddctm877 comparetotmag -sNaN 0 -> 1 +ddctm878 comparetotmag -sNaN 1 -> 1 +ddctm879 comparetotmag -sNaN 1000 -> 1 +ddctm880 comparetotmag -sNaN NaN -> -1 +ddctm881 comparetotmag -sNaN sNaN -> 0 + +ddctm882 comparetotmag -sNaN -sNaN -> 0 +ddctm883 comparetotmag -NaN -sNaN -> 1 +ddctm884 comparetotmag -Inf -sNaN -> -1 +ddctm885 comparetotmag -1000 -sNaN -> -1 +ddctm886 comparetotmag -1 -sNaN -> -1 +ddctm887 comparetotmag -0 -sNaN -> -1 +ddctm888 comparetotmag 0 -sNaN -> -1 +ddctm889 comparetotmag 1 -sNaN -> -1 +ddctm890 comparetotmag 1000 -sNaN -> -1 +ddctm891 comparetotmag Inf -sNaN -> -1 +ddctm892 comparetotmag NaN -sNaN -> 1 +ddctm893 comparetotmag sNaN -sNaN -> 0 + +-- NaNs with payload +ddctm960 comparetotmag NaN9 -Inf -> 1 +ddctm961 comparetotmag NaN8 999 -> 1 +ddctm962 comparetotmag NaN77 Inf -> 1 +ddctm963 comparetotmag -NaN67 NaN5 -> 1 +ddctm964 comparetotmag -Inf -NaN4 -> -1 +ddctm965 comparetotmag -999 -NaN33 -> -1 +ddctm966 comparetotmag Inf NaN2 -> -1 + +ddctm970 comparetotmag -NaN41 -NaN42 -> -1 +ddctm971 comparetotmag +NaN41 -NaN42 -> -1 +ddctm972 comparetotmag -NaN41 +NaN42 -> -1 +ddctm973 comparetotmag +NaN41 +NaN42 -> -1 +ddctm974 comparetotmag -NaN42 -NaN01 -> 1 +ddctm975 comparetotmag +NaN42 -NaN01 -> 1 +ddctm976 comparetotmag -NaN42 +NaN01 -> 1 +ddctm977 comparetotmag +NaN42 +NaN01 -> 1 + +ddctm980 comparetotmag -sNaN771 -sNaN772 -> -1 +ddctm981 comparetotmag +sNaN771 -sNaN772 -> -1 +ddctm982 comparetotmag -sNaN771 +sNaN772 -> -1 +ddctm983 comparetotmag +sNaN771 +sNaN772 -> -1 +ddctm984 comparetotmag -sNaN772 -sNaN771 -> 1 +ddctm985 comparetotmag +sNaN772 -sNaN771 -> 1 +ddctm986 comparetotmag -sNaN772 +sNaN771 -> 1 +ddctm987 comparetotmag +sNaN772 +sNaN771 -> 1 + +ddctm991 comparetotmag -sNaN99 -Inf -> 1 +ddctm992 comparetotmag sNaN98 -11 -> 1 +ddctm993 comparetotmag sNaN97 NaN -> -1 +ddctm994 comparetotmag sNaN16 sNaN94 -> -1 +ddctm995 comparetotmag NaN85 sNaN83 -> 1 +ddctm996 comparetotmag -Inf sNaN92 -> -1 +ddctm997 comparetotmag 088 sNaN81 -> -1 +ddctm998 comparetotmag Inf sNaN90 -> -1 +ddctm999 comparetotmag NaN -sNaN89 -> 1 + +-- spread zeros +ddctm1110 comparetotmag 0E-383 0 -> -1 +ddctm1111 comparetotmag 0E-383 -0 -> -1 +ddctm1112 comparetotmag -0E-383 0 -> -1 +ddctm1113 comparetotmag -0E-383 -0 -> -1 +ddctm1114 comparetotmag 0E-383 0E+384 -> -1 +ddctm1115 comparetotmag 0E-383 -0E+384 -> -1 +ddctm1116 comparetotmag -0E-383 0E+384 -> -1 +ddctm1117 comparetotmag -0E-383 -0E+384 -> -1 +ddctm1118 comparetotmag 0 0E+384 -> -1 +ddctm1119 comparetotmag 0 -0E+384 -> -1 +ddctm1120 comparetotmag -0 0E+384 -> -1 +ddctm1121 comparetotmag -0 -0E+384 -> -1 + +ddctm1130 comparetotmag 0E+384 0 -> 1 +ddctm1131 comparetotmag 0E+384 -0 -> 1 +ddctm1132 comparetotmag -0E+384 0 -> 1 +ddctm1133 comparetotmag -0E+384 -0 -> 1 +ddctm1134 comparetotmag 0E+384 0E-383 -> 1 +ddctm1135 comparetotmag 0E+384 -0E-383 -> 1 +ddctm1136 comparetotmag -0E+384 0E-383 -> 1 +ddctm1137 comparetotmag -0E+384 -0E-383 -> 1 +ddctm1138 comparetotmag 0 0E-383 -> 1 +ddctm1139 comparetotmag 0 -0E-383 -> 1 +ddctm1140 comparetotmag -0 0E-383 -> 1 +ddctm1141 comparetotmag -0 -0E-383 -> 1 + +-- Null tests +ddctm9990 comparetotmag 10 # -> NaN Invalid_operation +ddctm9991 comparetotmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddCopy.decTest b/Lib/test/decimaltestdata/ddCopy.decTest index f99d86a4267..9a175c5ea75 100644 --- a/Lib/test/decimaltestdata/ddCopy.decTest +++ b/Lib/test/decimaltestdata/ddCopy.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddCopy.decTest -- quiet decDouble copy -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddcpy001 copy +7.50 -> 7.50 - --- Infinities -ddcpy011 copy Infinity -> Infinity -ddcpy012 copy -Infinity -> -Infinity - --- NaNs, 0 payload -ddcpy021 copy NaN -> NaN -ddcpy022 copy -NaN -> -NaN -ddcpy023 copy sNaN -> sNaN -ddcpy024 copy -sNaN -> -sNaN - --- NaNs, non-0 payload -ddcpy031 copy NaN10 -> NaN10 -ddcpy032 copy -NaN10 -> -NaN10 -ddcpy033 copy sNaN10 -> sNaN10 -ddcpy034 copy -sNaN10 -> -sNaN10 -ddcpy035 copy NaN7 -> NaN7 -ddcpy036 copy -NaN7 -> -NaN7 -ddcpy037 copy sNaN101 -> sNaN101 -ddcpy038 copy -sNaN101 -> -sNaN101 - --- finites -ddcpy101 copy 7 -> 7 -ddcpy102 copy -7 -> -7 -ddcpy103 copy 75 -> 75 -ddcpy104 copy -75 -> -75 -ddcpy105 copy 7.50 -> 7.50 -ddcpy106 copy -7.50 -> -7.50 -ddcpy107 copy 7.500 -> 7.500 -ddcpy108 copy -7.500 -> -7.500 - --- zeros -ddcpy111 copy 0 -> 0 -ddcpy112 copy -0 -> -0 -ddcpy113 copy 0E+4 -> 0E+4 -ddcpy114 copy -0E+4 -> -0E+4 -ddcpy115 copy 0.0000 -> 0.0000 -ddcpy116 copy -0.0000 -> -0.0000 -ddcpy117 copy 0E-141 -> 0E-141 -ddcpy118 copy -0E-141 -> -0E-141 - --- full coefficients, alternating bits -ddcpy121 copy 2682682682682682 -> 2682682682682682 -ddcpy122 copy -2682682682682682 -> -2682682682682682 -ddcpy123 copy 1341341341341341 -> 1341341341341341 -ddcpy124 copy -1341341341341341 -> -1341341341341341 - --- Nmax, Nmin, Ntiny -ddcpy131 copy 9.999999999999999E+384 -> 9.999999999999999E+384 -ddcpy132 copy 1E-383 -> 1E-383 -ddcpy133 copy 1.000000000000000E-383 -> 1.000000000000000E-383 -ddcpy134 copy 1E-398 -> 1E-398 - -ddcpy135 copy -1E-398 -> -1E-398 -ddcpy136 copy -1.000000000000000E-383 -> -1.000000000000000E-383 -ddcpy137 copy -1E-383 -> -1E-383 -ddcpy138 copy -9.999999999999999E+384 -> -9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddCopy.decTest -- quiet decDouble copy -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddcpy001 copy +7.50 -> 7.50 + +-- Infinities +ddcpy011 copy Infinity -> Infinity +ddcpy012 copy -Infinity -> -Infinity + +-- NaNs, 0 payload +ddcpy021 copy NaN -> NaN +ddcpy022 copy -NaN -> -NaN +ddcpy023 copy sNaN -> sNaN +ddcpy024 copy -sNaN -> -sNaN + +-- NaNs, non-0 payload +ddcpy031 copy NaN10 -> NaN10 +ddcpy032 copy -NaN10 -> -NaN10 +ddcpy033 copy sNaN10 -> sNaN10 +ddcpy034 copy -sNaN10 -> -sNaN10 +ddcpy035 copy NaN7 -> NaN7 +ddcpy036 copy -NaN7 -> -NaN7 +ddcpy037 copy sNaN101 -> sNaN101 +ddcpy038 copy -sNaN101 -> -sNaN101 + +-- finites +ddcpy101 copy 7 -> 7 +ddcpy102 copy -7 -> -7 +ddcpy103 copy 75 -> 75 +ddcpy104 copy -75 -> -75 +ddcpy105 copy 7.50 -> 7.50 +ddcpy106 copy -7.50 -> -7.50 +ddcpy107 copy 7.500 -> 7.500 +ddcpy108 copy -7.500 -> -7.500 + +-- zeros +ddcpy111 copy 0 -> 0 +ddcpy112 copy -0 -> -0 +ddcpy113 copy 0E+4 -> 0E+4 +ddcpy114 copy -0E+4 -> -0E+4 +ddcpy115 copy 0.0000 -> 0.0000 +ddcpy116 copy -0.0000 -> -0.0000 +ddcpy117 copy 0E-141 -> 0E-141 +ddcpy118 copy -0E-141 -> -0E-141 + +-- full coefficients, alternating bits +ddcpy121 copy 2682682682682682 -> 2682682682682682 +ddcpy122 copy -2682682682682682 -> -2682682682682682 +ddcpy123 copy 1341341341341341 -> 1341341341341341 +ddcpy124 copy -1341341341341341 -> -1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcpy131 copy 9.999999999999999E+384 -> 9.999999999999999E+384 +ddcpy132 copy 1E-383 -> 1E-383 +ddcpy133 copy 1.000000000000000E-383 -> 1.000000000000000E-383 +ddcpy134 copy 1E-398 -> 1E-398 + +ddcpy135 copy -1E-398 -> -1E-398 +ddcpy136 copy -1.000000000000000E-383 -> -1.000000000000000E-383 +ddcpy137 copy -1E-383 -> -1E-383 +ddcpy138 copy -9.999999999999999E+384 -> -9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddCopyAbs.decTest b/Lib/test/decimaltestdata/ddCopyAbs.decTest index d436a1940c1..4823cf2d771 100644 --- a/Lib/test/decimaltestdata/ddCopyAbs.decTest +++ b/Lib/test/decimaltestdata/ddCopyAbs.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddCopyAbs.decTest -- quiet decDouble copy and set sign to zero -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddcpa001 copyabs +7.50 -> 7.50 - --- Infinities -ddcpa011 copyabs Infinity -> Infinity -ddcpa012 copyabs -Infinity -> Infinity - --- NaNs, 0 payload -ddcpa021 copyabs NaN -> NaN -ddcpa022 copyabs -NaN -> NaN -ddcpa023 copyabs sNaN -> sNaN -ddcpa024 copyabs -sNaN -> sNaN - --- NaNs, non-0 payload -ddcpa031 copyabs NaN10 -> NaN10 -ddcpa032 copyabs -NaN15 -> NaN15 -ddcpa033 copyabs sNaN15 -> sNaN15 -ddcpa034 copyabs -sNaN10 -> sNaN10 -ddcpa035 copyabs NaN7 -> NaN7 -ddcpa036 copyabs -NaN7 -> NaN7 -ddcpa037 copyabs sNaN101 -> sNaN101 -ddcpa038 copyabs -sNaN101 -> sNaN101 - --- finites -ddcpa101 copyabs 7 -> 7 -ddcpa102 copyabs -7 -> 7 -ddcpa103 copyabs 75 -> 75 -ddcpa104 copyabs -75 -> 75 -ddcpa105 copyabs 7.10 -> 7.10 -ddcpa106 copyabs -7.10 -> 7.10 -ddcpa107 copyabs 7.500 -> 7.500 -ddcpa108 copyabs -7.500 -> 7.500 - --- zeros -ddcpa111 copyabs 0 -> 0 -ddcpa112 copyabs -0 -> 0 -ddcpa113 copyabs 0E+6 -> 0E+6 -ddcpa114 copyabs -0E+6 -> 0E+6 -ddcpa115 copyabs 0.0000 -> 0.0000 -ddcpa116 copyabs -0.0000 -> 0.0000 -ddcpa117 copyabs 0E-141 -> 0E-141 -ddcpa118 copyabs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddcpa121 copyabs 2682682682682682 -> 2682682682682682 -ddcpa122 copyabs -2682682682682682 -> 2682682682682682 -ddcpa123 copyabs 1341341341341341 -> 1341341341341341 -ddcpa124 copyabs -1341341341341341 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddcpa131 copyabs 9.999999999999999E+384 -> 9.999999999999999E+384 -ddcpa132 copyabs 1E-383 -> 1E-383 -ddcpa133 copyabs 1.000000000000000E-383 -> 1.000000000000000E-383 -ddcpa134 copyabs 1E-398 -> 1E-398 - -ddcpa135 copyabs -1E-398 -> 1E-398 -ddcpa136 copyabs -1.000000000000000E-383 -> 1.000000000000000E-383 -ddcpa137 copyabs -1E-383 -> 1E-383 -ddcpa138 copyabs -9.999999999999999E+384 -> 9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddCopyAbs.decTest -- quiet decDouble copy and set sign to zero -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddcpa001 copyabs +7.50 -> 7.50 + +-- Infinities +ddcpa011 copyabs Infinity -> Infinity +ddcpa012 copyabs -Infinity -> Infinity + +-- NaNs, 0 payload +ddcpa021 copyabs NaN -> NaN +ddcpa022 copyabs -NaN -> NaN +ddcpa023 copyabs sNaN -> sNaN +ddcpa024 copyabs -sNaN -> sNaN + +-- NaNs, non-0 payload +ddcpa031 copyabs NaN10 -> NaN10 +ddcpa032 copyabs -NaN15 -> NaN15 +ddcpa033 copyabs sNaN15 -> sNaN15 +ddcpa034 copyabs -sNaN10 -> sNaN10 +ddcpa035 copyabs NaN7 -> NaN7 +ddcpa036 copyabs -NaN7 -> NaN7 +ddcpa037 copyabs sNaN101 -> sNaN101 +ddcpa038 copyabs -sNaN101 -> sNaN101 + +-- finites +ddcpa101 copyabs 7 -> 7 +ddcpa102 copyabs -7 -> 7 +ddcpa103 copyabs 75 -> 75 +ddcpa104 copyabs -75 -> 75 +ddcpa105 copyabs 7.10 -> 7.10 +ddcpa106 copyabs -7.10 -> 7.10 +ddcpa107 copyabs 7.500 -> 7.500 +ddcpa108 copyabs -7.500 -> 7.500 + +-- zeros +ddcpa111 copyabs 0 -> 0 +ddcpa112 copyabs -0 -> 0 +ddcpa113 copyabs 0E+6 -> 0E+6 +ddcpa114 copyabs -0E+6 -> 0E+6 +ddcpa115 copyabs 0.0000 -> 0.0000 +ddcpa116 copyabs -0.0000 -> 0.0000 +ddcpa117 copyabs 0E-141 -> 0E-141 +ddcpa118 copyabs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddcpa121 copyabs 2682682682682682 -> 2682682682682682 +ddcpa122 copyabs -2682682682682682 -> 2682682682682682 +ddcpa123 copyabs 1341341341341341 -> 1341341341341341 +ddcpa124 copyabs -1341341341341341 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcpa131 copyabs 9.999999999999999E+384 -> 9.999999999999999E+384 +ddcpa132 copyabs 1E-383 -> 1E-383 +ddcpa133 copyabs 1.000000000000000E-383 -> 1.000000000000000E-383 +ddcpa134 copyabs 1E-398 -> 1E-398 + +ddcpa135 copyabs -1E-398 -> 1E-398 +ddcpa136 copyabs -1.000000000000000E-383 -> 1.000000000000000E-383 +ddcpa137 copyabs -1E-383 -> 1E-383 +ddcpa138 copyabs -9.999999999999999E+384 -> 9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddCopyNegate.decTest b/Lib/test/decimaltestdata/ddCopyNegate.decTest index a4c42743729..121945c755c 100644 --- a/Lib/test/decimaltestdata/ddCopyNegate.decTest +++ b/Lib/test/decimaltestdata/ddCopyNegate.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddCopyNegate.decTest -- quiet decDouble copy and negate -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddcpn001 copynegate +7.50 -> -7.50 - --- Infinities -ddcpn011 copynegate Infinity -> -Infinity -ddcpn012 copynegate -Infinity -> Infinity - --- NaNs, 0 payload -ddcpn021 copynegate NaN -> -NaN -ddcpn022 copynegate -NaN -> NaN -ddcpn023 copynegate sNaN -> -sNaN -ddcpn024 copynegate -sNaN -> sNaN - --- NaNs, non-0 payload -ddcpn031 copynegate NaN13 -> -NaN13 -ddcpn032 copynegate -NaN13 -> NaN13 -ddcpn033 copynegate sNaN13 -> -sNaN13 -ddcpn034 copynegate -sNaN13 -> sNaN13 -ddcpn035 copynegate NaN70 -> -NaN70 -ddcpn036 copynegate -NaN70 -> NaN70 -ddcpn037 copynegate sNaN101 -> -sNaN101 -ddcpn038 copynegate -sNaN101 -> sNaN101 - --- finites -ddcpn101 copynegate 7 -> -7 -ddcpn102 copynegate -7 -> 7 -ddcpn103 copynegate 75 -> -75 -ddcpn104 copynegate -75 -> 75 -ddcpn105 copynegate 7.50 -> -7.50 -ddcpn106 copynegate -7.50 -> 7.50 -ddcpn107 copynegate 7.500 -> -7.500 -ddcpn108 copynegate -7.500 -> 7.500 - --- zeros -ddcpn111 copynegate 0 -> -0 -ddcpn112 copynegate -0 -> 0 -ddcpn113 copynegate 0E+4 -> -0E+4 -ddcpn114 copynegate -0E+4 -> 0E+4 -ddcpn115 copynegate 0.0000 -> -0.0000 -ddcpn116 copynegate -0.0000 -> 0.0000 -ddcpn117 copynegate 0E-141 -> -0E-141 -ddcpn118 copynegate -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddcpn121 copynegate 2682682682682682 -> -2682682682682682 -ddcpn122 copynegate -2682682682682682 -> 2682682682682682 -ddcpn123 copynegate 1341341341341341 -> -1341341341341341 -ddcpn124 copynegate -1341341341341341 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddcpn131 copynegate 9.999999999999999E+384 -> -9.999999999999999E+384 -ddcpn132 copynegate 1E-383 -> -1E-383 -ddcpn133 copynegate 1.000000000000000E-383 -> -1.000000000000000E-383 -ddcpn134 copynegate 1E-398 -> -1E-398 - -ddcpn135 copynegate -1E-398 -> 1E-398 -ddcpn136 copynegate -1.000000000000000E-383 -> 1.000000000000000E-383 -ddcpn137 copynegate -1E-383 -> 1E-383 -ddcpn138 copynegate -9.999999999999999E+384 -> 9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddCopyNegate.decTest -- quiet decDouble copy and negate -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddcpn001 copynegate +7.50 -> -7.50 + +-- Infinities +ddcpn011 copynegate Infinity -> -Infinity +ddcpn012 copynegate -Infinity -> Infinity + +-- NaNs, 0 payload +ddcpn021 copynegate NaN -> -NaN +ddcpn022 copynegate -NaN -> NaN +ddcpn023 copynegate sNaN -> -sNaN +ddcpn024 copynegate -sNaN -> sNaN + +-- NaNs, non-0 payload +ddcpn031 copynegate NaN13 -> -NaN13 +ddcpn032 copynegate -NaN13 -> NaN13 +ddcpn033 copynegate sNaN13 -> -sNaN13 +ddcpn034 copynegate -sNaN13 -> sNaN13 +ddcpn035 copynegate NaN70 -> -NaN70 +ddcpn036 copynegate -NaN70 -> NaN70 +ddcpn037 copynegate sNaN101 -> -sNaN101 +ddcpn038 copynegate -sNaN101 -> sNaN101 + +-- finites +ddcpn101 copynegate 7 -> -7 +ddcpn102 copynegate -7 -> 7 +ddcpn103 copynegate 75 -> -75 +ddcpn104 copynegate -75 -> 75 +ddcpn105 copynegate 7.50 -> -7.50 +ddcpn106 copynegate -7.50 -> 7.50 +ddcpn107 copynegate 7.500 -> -7.500 +ddcpn108 copynegate -7.500 -> 7.500 + +-- zeros +ddcpn111 copynegate 0 -> -0 +ddcpn112 copynegate -0 -> 0 +ddcpn113 copynegate 0E+4 -> -0E+4 +ddcpn114 copynegate -0E+4 -> 0E+4 +ddcpn115 copynegate 0.0000 -> -0.0000 +ddcpn116 copynegate -0.0000 -> 0.0000 +ddcpn117 copynegate 0E-141 -> -0E-141 +ddcpn118 copynegate -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddcpn121 copynegate 2682682682682682 -> -2682682682682682 +ddcpn122 copynegate -2682682682682682 -> 2682682682682682 +ddcpn123 copynegate 1341341341341341 -> -1341341341341341 +ddcpn124 copynegate -1341341341341341 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcpn131 copynegate 9.999999999999999E+384 -> -9.999999999999999E+384 +ddcpn132 copynegate 1E-383 -> -1E-383 +ddcpn133 copynegate 1.000000000000000E-383 -> -1.000000000000000E-383 +ddcpn134 copynegate 1E-398 -> -1E-398 + +ddcpn135 copynegate -1E-398 -> 1E-398 +ddcpn136 copynegate -1.000000000000000E-383 -> 1.000000000000000E-383 +ddcpn137 copynegate -1E-383 -> 1E-383 +ddcpn138 copynegate -9.999999999999999E+384 -> 9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddCopySign.decTest b/Lib/test/decimaltestdata/ddCopySign.decTest index 6a78083ad55..c99544d9aba 100644 --- a/Lib/test/decimaltestdata/ddCopySign.decTest +++ b/Lib/test/decimaltestdata/ddCopySign.decTest @@ -1,175 +1,175 @@ ------------------------------------------------------------------------- --- ddCopySign.decTest -- quiet decDouble copy with sign from rhs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddcps001 copysign +7.50 11 -> 7.50 - --- Infinities -ddcps011 copysign Infinity 11 -> Infinity -ddcps012 copysign -Infinity 11 -> Infinity - --- NaNs, 0 payload -ddcps021 copysign NaN 11 -> NaN -ddcps022 copysign -NaN 11 -> NaN -ddcps023 copysign sNaN 11 -> sNaN -ddcps024 copysign -sNaN 11 -> sNaN - --- NaNs, non-0 payload -ddcps031 copysign NaN10 11 -> NaN10 -ddcps032 copysign -NaN10 11 -> NaN10 -ddcps033 copysign sNaN10 11 -> sNaN10 -ddcps034 copysign -sNaN10 11 -> sNaN10 -ddcps035 copysign NaN7 11 -> NaN7 -ddcps036 copysign -NaN7 11 -> NaN7 -ddcps037 copysign sNaN101 11 -> sNaN101 -ddcps038 copysign -sNaN101 11 -> sNaN101 - --- finites -ddcps101 copysign 7 11 -> 7 -ddcps102 copysign -7 11 -> 7 -ddcps103 copysign 75 11 -> 75 -ddcps104 copysign -75 11 -> 75 -ddcps105 copysign 7.50 11 -> 7.50 -ddcps106 copysign -7.50 11 -> 7.50 -ddcps107 copysign 7.500 11 -> 7.500 -ddcps108 copysign -7.500 11 -> 7.500 - --- zeros -ddcps111 copysign 0 11 -> 0 -ddcps112 copysign -0 11 -> 0 -ddcps113 copysign 0E+4 11 -> 0E+4 -ddcps114 copysign -0E+4 11 -> 0E+4 -ddcps115 copysign 0.0000 11 -> 0.0000 -ddcps116 copysign -0.0000 11 -> 0.0000 -ddcps117 copysign 0E-141 11 -> 0E-141 -ddcps118 copysign -0E-141 11 -> 0E-141 - --- full coefficients, alternating bits -ddcps121 copysign 2682682682682682 11 -> 2682682682682682 -ddcps122 copysign -2682682682682682 11 -> 2682682682682682 -ddcps123 copysign 1341341341341341 11 -> 1341341341341341 -ddcps124 copysign -1341341341341341 11 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddcps131 copysign 9.999999999999999E+384 11 -> 9.999999999999999E+384 -ddcps132 copysign 1E-383 11 -> 1E-383 -ddcps133 copysign 1.000000000000000E-383 11 -> 1.000000000000000E-383 -ddcps134 copysign 1E-398 11 -> 1E-398 - -ddcps135 copysign -1E-398 11 -> 1E-398 -ddcps136 copysign -1.000000000000000E-383 11 -> 1.000000000000000E-383 -ddcps137 copysign -1E-383 11 -> 1E-383 -ddcps138 copysign -9.999999999999999E+384 11 -> 9.999999999999999E+384 - --- repeat with negative RHS - --- Infinities -ddcps211 copysign Infinity -34 -> -Infinity -ddcps212 copysign -Infinity -34 -> -Infinity - --- NaNs, 0 payload -ddcps221 copysign NaN -34 -> -NaN -ddcps222 copysign -NaN -34 -> -NaN -ddcps223 copysign sNaN -34 -> -sNaN -ddcps224 copysign -sNaN -34 -> -sNaN - --- NaNs, non-0 payload -ddcps231 copysign NaN10 -34 -> -NaN10 -ddcps232 copysign -NaN10 -34 -> -NaN10 -ddcps233 copysign sNaN10 -34 -> -sNaN10 -ddcps234 copysign -sNaN10 -34 -> -sNaN10 -ddcps235 copysign NaN7 -34 -> -NaN7 -ddcps236 copysign -NaN7 -34 -> -NaN7 -ddcps237 copysign sNaN101 -34 -> -sNaN101 -ddcps238 copysign -sNaN101 -34 -> -sNaN101 - --- finites -ddcps301 copysign 7 -34 -> -7 -ddcps302 copysign -7 -34 -> -7 -ddcps303 copysign 75 -34 -> -75 -ddcps304 copysign -75 -34 -> -75 -ddcps305 copysign 7.50 -34 -> -7.50 -ddcps306 copysign -7.50 -34 -> -7.50 -ddcps307 copysign 7.500 -34 -> -7.500 -ddcps308 copysign -7.500 -34 -> -7.500 - --- zeros -ddcps311 copysign 0 -34 -> -0 -ddcps312 copysign -0 -34 -> -0 -ddcps313 copysign 0E+4 -34 -> -0E+4 -ddcps314 copysign -0E+4 -34 -> -0E+4 -ddcps315 copysign 0.0000 -34 -> -0.0000 -ddcps316 copysign -0.0000 -34 -> -0.0000 -ddcps317 copysign 0E-141 -34 -> -0E-141 -ddcps318 copysign -0E-141 -34 -> -0E-141 - --- full coefficients, alternating bits -ddcps321 copysign 2682682682682682 -34 -> -2682682682682682 -ddcps322 copysign -2682682682682682 -34 -> -2682682682682682 -ddcps323 copysign 1341341341341341 -34 -> -1341341341341341 -ddcps324 copysign -1341341341341341 -34 -> -1341341341341341 - --- Nmax, Nmin, Ntiny -ddcps331 copysign 9.999999999999999E+384 -34 -> -9.999999999999999E+384 -ddcps332 copysign 1E-383 -34 -> -1E-383 -ddcps333 copysign 1.000000000000000E-383 -34 -> -1.000000000000000E-383 -ddcps334 copysign 1E-398 -34 -> -1E-398 - -ddcps335 copysign -1E-398 -34 -> -1E-398 -ddcps336 copysign -1.000000000000000E-383 -34 -> -1.000000000000000E-383 -ddcps337 copysign -1E-383 -34 -> -1E-383 -ddcps338 copysign -9.999999999999999E+384 -34 -> -9.999999999999999E+384 - --- Other kinds of RHS -ddcps401 copysign 701 -34 -> -701 -ddcps402 copysign -720 -34 -> -720 -ddcps403 copysign 701 -0 -> -701 -ddcps404 copysign -720 -0 -> -720 -ddcps405 copysign 701 +0 -> 701 -ddcps406 copysign -720 +0 -> 720 -ddcps407 copysign 701 +34 -> 701 -ddcps408 copysign -720 +34 -> 720 - -ddcps413 copysign 701 -Inf -> -701 -ddcps414 copysign -720 -Inf -> -720 -ddcps415 copysign 701 +Inf -> 701 -ddcps416 copysign -720 +Inf -> 720 - -ddcps420 copysign 701 -NaN -> -701 -ddcps421 copysign -720 -NaN -> -720 -ddcps422 copysign 701 +NaN -> 701 -ddcps423 copysign -720 +NaN -> 720 -ddcps425 copysign -720 +NaN8 -> 720 - -ddcps426 copysign 701 -sNaN -> -701 -ddcps427 copysign -720 -sNaN -> -720 -ddcps428 copysign 701 +sNaN -> 701 -ddcps429 copysign -720 +sNaN -> 720 -ddcps430 copysign -720 +sNaN3 -> 720 - +------------------------------------------------------------------------ +-- ddCopySign.decTest -- quiet decDouble copy with sign from rhs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddcps001 copysign +7.50 11 -> 7.50 + +-- Infinities +ddcps011 copysign Infinity 11 -> Infinity +ddcps012 copysign -Infinity 11 -> Infinity + +-- NaNs, 0 payload +ddcps021 copysign NaN 11 -> NaN +ddcps022 copysign -NaN 11 -> NaN +ddcps023 copysign sNaN 11 -> sNaN +ddcps024 copysign -sNaN 11 -> sNaN + +-- NaNs, non-0 payload +ddcps031 copysign NaN10 11 -> NaN10 +ddcps032 copysign -NaN10 11 -> NaN10 +ddcps033 copysign sNaN10 11 -> sNaN10 +ddcps034 copysign -sNaN10 11 -> sNaN10 +ddcps035 copysign NaN7 11 -> NaN7 +ddcps036 copysign -NaN7 11 -> NaN7 +ddcps037 copysign sNaN101 11 -> sNaN101 +ddcps038 copysign -sNaN101 11 -> sNaN101 + +-- finites +ddcps101 copysign 7 11 -> 7 +ddcps102 copysign -7 11 -> 7 +ddcps103 copysign 75 11 -> 75 +ddcps104 copysign -75 11 -> 75 +ddcps105 copysign 7.50 11 -> 7.50 +ddcps106 copysign -7.50 11 -> 7.50 +ddcps107 copysign 7.500 11 -> 7.500 +ddcps108 copysign -7.500 11 -> 7.500 + +-- zeros +ddcps111 copysign 0 11 -> 0 +ddcps112 copysign -0 11 -> 0 +ddcps113 copysign 0E+4 11 -> 0E+4 +ddcps114 copysign -0E+4 11 -> 0E+4 +ddcps115 copysign 0.0000 11 -> 0.0000 +ddcps116 copysign -0.0000 11 -> 0.0000 +ddcps117 copysign 0E-141 11 -> 0E-141 +ddcps118 copysign -0E-141 11 -> 0E-141 + +-- full coefficients, alternating bits +ddcps121 copysign 2682682682682682 11 -> 2682682682682682 +ddcps122 copysign -2682682682682682 11 -> 2682682682682682 +ddcps123 copysign 1341341341341341 11 -> 1341341341341341 +ddcps124 copysign -1341341341341341 11 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcps131 copysign 9.999999999999999E+384 11 -> 9.999999999999999E+384 +ddcps132 copysign 1E-383 11 -> 1E-383 +ddcps133 copysign 1.000000000000000E-383 11 -> 1.000000000000000E-383 +ddcps134 copysign 1E-398 11 -> 1E-398 + +ddcps135 copysign -1E-398 11 -> 1E-398 +ddcps136 copysign -1.000000000000000E-383 11 -> 1.000000000000000E-383 +ddcps137 copysign -1E-383 11 -> 1E-383 +ddcps138 copysign -9.999999999999999E+384 11 -> 9.999999999999999E+384 + +-- repeat with negative RHS + +-- Infinities +ddcps211 copysign Infinity -34 -> -Infinity +ddcps212 copysign -Infinity -34 -> -Infinity + +-- NaNs, 0 payload +ddcps221 copysign NaN -34 -> -NaN +ddcps222 copysign -NaN -34 -> -NaN +ddcps223 copysign sNaN -34 -> -sNaN +ddcps224 copysign -sNaN -34 -> -sNaN + +-- NaNs, non-0 payload +ddcps231 copysign NaN10 -34 -> -NaN10 +ddcps232 copysign -NaN10 -34 -> -NaN10 +ddcps233 copysign sNaN10 -34 -> -sNaN10 +ddcps234 copysign -sNaN10 -34 -> -sNaN10 +ddcps235 copysign NaN7 -34 -> -NaN7 +ddcps236 copysign -NaN7 -34 -> -NaN7 +ddcps237 copysign sNaN101 -34 -> -sNaN101 +ddcps238 copysign -sNaN101 -34 -> -sNaN101 + +-- finites +ddcps301 copysign 7 -34 -> -7 +ddcps302 copysign -7 -34 -> -7 +ddcps303 copysign 75 -34 -> -75 +ddcps304 copysign -75 -34 -> -75 +ddcps305 copysign 7.50 -34 -> -7.50 +ddcps306 copysign -7.50 -34 -> -7.50 +ddcps307 copysign 7.500 -34 -> -7.500 +ddcps308 copysign -7.500 -34 -> -7.500 + +-- zeros +ddcps311 copysign 0 -34 -> -0 +ddcps312 copysign -0 -34 -> -0 +ddcps313 copysign 0E+4 -34 -> -0E+4 +ddcps314 copysign -0E+4 -34 -> -0E+4 +ddcps315 copysign 0.0000 -34 -> -0.0000 +ddcps316 copysign -0.0000 -34 -> -0.0000 +ddcps317 copysign 0E-141 -34 -> -0E-141 +ddcps318 copysign -0E-141 -34 -> -0E-141 + +-- full coefficients, alternating bits +ddcps321 copysign 2682682682682682 -34 -> -2682682682682682 +ddcps322 copysign -2682682682682682 -34 -> -2682682682682682 +ddcps323 copysign 1341341341341341 -34 -> -1341341341341341 +ddcps324 copysign -1341341341341341 -34 -> -1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcps331 copysign 9.999999999999999E+384 -34 -> -9.999999999999999E+384 +ddcps332 copysign 1E-383 -34 -> -1E-383 +ddcps333 copysign 1.000000000000000E-383 -34 -> -1.000000000000000E-383 +ddcps334 copysign 1E-398 -34 -> -1E-398 + +ddcps335 copysign -1E-398 -34 -> -1E-398 +ddcps336 copysign -1.000000000000000E-383 -34 -> -1.000000000000000E-383 +ddcps337 copysign -1E-383 -34 -> -1E-383 +ddcps338 copysign -9.999999999999999E+384 -34 -> -9.999999999999999E+384 + +-- Other kinds of RHS +ddcps401 copysign 701 -34 -> -701 +ddcps402 copysign -720 -34 -> -720 +ddcps403 copysign 701 -0 -> -701 +ddcps404 copysign -720 -0 -> -720 +ddcps405 copysign 701 +0 -> 701 +ddcps406 copysign -720 +0 -> 720 +ddcps407 copysign 701 +34 -> 701 +ddcps408 copysign -720 +34 -> 720 + +ddcps413 copysign 701 -Inf -> -701 +ddcps414 copysign -720 -Inf -> -720 +ddcps415 copysign 701 +Inf -> 701 +ddcps416 copysign -720 +Inf -> 720 + +ddcps420 copysign 701 -NaN -> -701 +ddcps421 copysign -720 -NaN -> -720 +ddcps422 copysign 701 +NaN -> 701 +ddcps423 copysign -720 +NaN -> 720 +ddcps425 copysign -720 +NaN8 -> 720 + +ddcps426 copysign 701 -sNaN -> -701 +ddcps427 copysign -720 -sNaN -> -720 +ddcps428 copysign 701 +sNaN -> 701 +ddcps429 copysign -720 +sNaN -> 720 +ddcps430 copysign -720 +sNaN3 -> 720 + diff --git a/Lib/test/decimaltestdata/ddDivide.decTest b/Lib/test/decimaltestdata/ddDivide.decTest index 5b2651b2b66..719c72b254d 100644 --- a/Lib/test/decimaltestdata/ddDivide.decTest +++ b/Lib/test/decimaltestdata/ddDivide.decTest @@ -1,863 +1,863 @@ ------------------------------------------------------------------------- --- ddDivide.decTest -- decDouble division -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -dddiv001 divide 1 1 -> 1 -dddiv002 divide 2 1 -> 2 -dddiv003 divide 1 2 -> 0.5 -dddiv004 divide 2 2 -> 1 -dddiv005 divide 0 1 -> 0 -dddiv006 divide 0 2 -> 0 -dddiv007 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv008 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv009 divide 3 3 -> 1 - -dddiv010 divide 2.4 1 -> 2.4 -dddiv011 divide 2.4 -1 -> -2.4 -dddiv012 divide -2.4 1 -> -2.4 -dddiv013 divide -2.4 -1 -> 2.4 -dddiv014 divide 2.40 1 -> 2.40 -dddiv015 divide 2.400 1 -> 2.400 -dddiv016 divide 2.4 2 -> 1.2 -dddiv017 divide 2.400 2 -> 1.200 -dddiv018 divide 2. 2 -> 1 -dddiv019 divide 20 20 -> 1 - -dddiv020 divide 187 187 -> 1 -dddiv021 divide 5 2 -> 2.5 -dddiv022 divide 50 20 -> 2.5 -dddiv023 divide 500 200 -> 2.5 -dddiv024 divide 50.0 20.0 -> 2.5 -dddiv025 divide 5.00 2.00 -> 2.5 -dddiv026 divide 5 2.0 -> 2.5 -dddiv027 divide 5 2.000 -> 2.5 -dddiv028 divide 5 0.20 -> 25 -dddiv029 divide 5 0.200 -> 25 -dddiv030 divide 10 1 -> 10 -dddiv031 divide 100 1 -> 100 -dddiv032 divide 1000 1 -> 1000 -dddiv033 divide 1000 100 -> 10 - -dddiv035 divide 1 2 -> 0.5 -dddiv036 divide 1 4 -> 0.25 -dddiv037 divide 1 8 -> 0.125 -dddiv038 divide 1 16 -> 0.0625 -dddiv039 divide 1 32 -> 0.03125 -dddiv040 divide 1 64 -> 0.015625 -dddiv041 divide 1 -2 -> -0.5 -dddiv042 divide 1 -4 -> -0.25 -dddiv043 divide 1 -8 -> -0.125 -dddiv044 divide 1 -16 -> -0.0625 -dddiv045 divide 1 -32 -> -0.03125 -dddiv046 divide 1 -64 -> -0.015625 -dddiv047 divide -1 2 -> -0.5 -dddiv048 divide -1 4 -> -0.25 -dddiv049 divide -1 8 -> -0.125 -dddiv050 divide -1 16 -> -0.0625 -dddiv051 divide -1 32 -> -0.03125 -dddiv052 divide -1 64 -> -0.015625 -dddiv053 divide -1 -2 -> 0.5 -dddiv054 divide -1 -4 -> 0.25 -dddiv055 divide -1 -8 -> 0.125 -dddiv056 divide -1 -16 -> 0.0625 -dddiv057 divide -1 -32 -> 0.03125 -dddiv058 divide -1 -64 -> 0.015625 - --- bcdTime -dddiv060 divide 1 7 -> 0.1428571428571429 Inexact Rounded -dddiv061 divide 1.2345678 1.9876543 -> 0.6211179680490717 Inexact Rounded - --- 1234567890123456 -dddiv071 divide 9999999999999999 1 -> 9999999999999999 -dddiv072 divide 999999999999999 1 -> 999999999999999 -dddiv073 divide 99999999999999 1 -> 99999999999999 -dddiv074 divide 9999999999999 1 -> 9999999999999 -dddiv075 divide 999999999999 1 -> 999999999999 -dddiv076 divide 99999999999 1 -> 99999999999 -dddiv077 divide 9999999999 1 -> 9999999999 -dddiv078 divide 999999999 1 -> 999999999 -dddiv079 divide 99999999 1 -> 99999999 -dddiv080 divide 9999999 1 -> 9999999 -dddiv081 divide 999999 1 -> 999999 -dddiv082 divide 99999 1 -> 99999 -dddiv083 divide 9999 1 -> 9999 -dddiv084 divide 999 1 -> 999 -dddiv085 divide 99 1 -> 99 -dddiv086 divide 9 1 -> 9 - -dddiv090 divide 0. 1 -> 0 -dddiv091 divide .0 1 -> 0.0 -dddiv092 divide 0.00 1 -> 0.00 -dddiv093 divide 0.00E+9 1 -> 0E+7 -dddiv094 divide 0.0000E-50 1 -> 0E-54 - -dddiv095 divide 1 1E-8 -> 1E+8 -dddiv096 divide 1 1E-9 -> 1E+9 -dddiv097 divide 1 1E-10 -> 1E+10 -dddiv098 divide 1 1E-11 -> 1E+11 -dddiv099 divide 1 1E-12 -> 1E+12 - -dddiv100 divide 1 1 -> 1 -dddiv101 divide 1 2 -> 0.5 -dddiv102 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv103 divide 1 4 -> 0.25 -dddiv104 divide 1 5 -> 0.2 -dddiv105 divide 1 6 -> 0.1666666666666667 Inexact Rounded -dddiv106 divide 1 7 -> 0.1428571428571429 Inexact Rounded -dddiv107 divide 1 8 -> 0.125 -dddiv108 divide 1 9 -> 0.1111111111111111 Inexact Rounded -dddiv109 divide 1 10 -> 0.1 -dddiv110 divide 1 1 -> 1 -dddiv111 divide 2 1 -> 2 -dddiv112 divide 3 1 -> 3 -dddiv113 divide 4 1 -> 4 -dddiv114 divide 5 1 -> 5 -dddiv115 divide 6 1 -> 6 -dddiv116 divide 7 1 -> 7 -dddiv117 divide 8 1 -> 8 -dddiv118 divide 9 1 -> 9 -dddiv119 divide 10 1 -> 10 - -dddiv120 divide 3E+1 0.001 -> 3E+4 -dddiv121 divide 2.200 2 -> 1.100 - -dddiv130 divide 12345 4.999 -> 2469.493898779756 Inexact Rounded -dddiv131 divide 12345 4.99 -> 2473.947895791583 Inexact Rounded -dddiv132 divide 12345 4.9 -> 2519.387755102041 Inexact Rounded -dddiv133 divide 12345 5 -> 2469 -dddiv134 divide 12345 5.1 -> 2420.588235294118 Inexact Rounded -dddiv135 divide 12345 5.01 -> 2464.071856287425 Inexact Rounded -dddiv136 divide 12345 5.001 -> 2468.506298740252 Inexact Rounded - --- test possibly imprecise results -dddiv220 divide 391 597 -> 0.6549413735343384 Inexact Rounded -dddiv221 divide 391 -597 -> -0.6549413735343384 Inexact Rounded -dddiv222 divide -391 597 -> -0.6549413735343384 Inexact Rounded -dddiv223 divide -391 -597 -> 0.6549413735343384 Inexact Rounded - --- test some cases that are close to exponent overflow, some with coefficient padding -dddiv270 divide 1 1e384 -> 1E-384 Subnormal -dddiv271 divide 1 0.9e384 -> 1.11111111111111E-384 Rounded Inexact Subnormal Underflow -dddiv272 divide 1 0.99e384 -> 1.01010101010101E-384 Rounded Inexact Subnormal Underflow -dddiv273 divide 1 0.9999999999999999e384 -> 1.00000000000000E-384 Rounded Inexact Subnormal Underflow -dddiv274 divide 9e384 1 -> 9.000000000000000E+384 Clamped -dddiv275 divide 9.9e384 1 -> 9.900000000000000E+384 Clamped -dddiv276 divide 9.99e384 1 -> 9.990000000000000E+384 Clamped -dddiv277 divide 9.9999999999999e384 1 -> 9.999999999999900E+384 Clamped -dddiv278 divide 9.99999999999999e384 1 -> 9.999999999999990E+384 Clamped -dddiv279 divide 9.999999999999999e384 1 -> 9.999999999999999E+384 - -dddiv285 divide 9.9e384 1.1 -> 9.000000000000000E+384 Clamped -dddiv286 divide 9.99e384 1.1 -> 9.081818181818182E+384 Inexact Rounded -dddiv287 divide 9.9999999999999e384 1.1 -> 9.090909090909000E+384 Clamped -dddiv288 divide 9.99999999999999e384 1.1 -> 9.090909090909082E+384 Inexact Rounded -dddiv289 divide 9.999999999999999e384 1.1 -> 9.090909090909090E+384 Clamped - - --- Divide into 0 tests -dddiv301 divide 0 7 -> 0 -dddiv302 divide 0 7E-5 -> 0E+5 -dddiv303 divide 0 7E-1 -> 0E+1 -dddiv304 divide 0 7E+1 -> 0.0 -dddiv305 divide 0 7E+5 -> 0.00000 -dddiv306 divide 0 7E+6 -> 0.000000 -dddiv307 divide 0 7E+7 -> 0E-7 -dddiv308 divide 0 70E-5 -> 0E+5 -dddiv309 divide 0 70E-1 -> 0E+1 -dddiv310 divide 0 70E+0 -> 0 -dddiv311 divide 0 70E+1 -> 0.0 -dddiv312 divide 0 70E+5 -> 0.00000 -dddiv313 divide 0 70E+6 -> 0.000000 -dddiv314 divide 0 70E+7 -> 0E-7 -dddiv315 divide 0 700E-5 -> 0E+5 -dddiv316 divide 0 700E-1 -> 0E+1 -dddiv317 divide 0 700E+0 -> 0 -dddiv318 divide 0 700E+1 -> 0.0 -dddiv319 divide 0 700E+5 -> 0.00000 -dddiv320 divide 0 700E+6 -> 0.000000 -dddiv321 divide 0 700E+7 -> 0E-7 -dddiv322 divide 0 700E+77 -> 0E-77 - -dddiv331 divide 0E-3 7E-5 -> 0E+2 -dddiv332 divide 0E-3 7E-1 -> 0.00 -dddiv333 divide 0E-3 7E+1 -> 0.0000 -dddiv334 divide 0E-3 7E+5 -> 0E-8 -dddiv335 divide 0E-1 7E-5 -> 0E+4 -dddiv336 divide 0E-1 7E-1 -> 0 -dddiv337 divide 0E-1 7E+1 -> 0.00 -dddiv338 divide 0E-1 7E+5 -> 0.000000 -dddiv339 divide 0E+1 7E-5 -> 0E+6 -dddiv340 divide 0E+1 7E-1 -> 0E+2 -dddiv341 divide 0E+1 7E+1 -> 0 -dddiv342 divide 0E+1 7E+5 -> 0.0000 -dddiv343 divide 0E+3 7E-5 -> 0E+8 -dddiv344 divide 0E+3 7E-1 -> 0E+4 -dddiv345 divide 0E+3 7E+1 -> 0E+2 -dddiv346 divide 0E+3 7E+5 -> 0.00 - --- These were 'input rounding' -dddiv441 divide 12345678000 1 -> 12345678000 -dddiv442 divide 1 12345678000 -> 8.100000664200054E-11 Inexact Rounded -dddiv443 divide 1234567800 1 -> 1234567800 -dddiv444 divide 1 1234567800 -> 8.100000664200054E-10 Inexact Rounded -dddiv445 divide 1234567890 1 -> 1234567890 -dddiv446 divide 1 1234567890 -> 8.100000073710001E-10 Inexact Rounded -dddiv447 divide 1234567891 1 -> 1234567891 -dddiv448 divide 1 1234567891 -> 8.100000067149001E-10 Inexact Rounded -dddiv449 divide 12345678901 1 -> 12345678901 -dddiv450 divide 1 12345678901 -> 8.100000073053901E-11 Inexact Rounded -dddiv451 divide 1234567896 1 -> 1234567896 -dddiv452 divide 1 1234567896 -> 8.100000034344000E-10 Inexact Rounded - --- high-lows -dddiv453 divide 1e+1 1 -> 1E+1 -dddiv454 divide 1e+1 1.0 -> 1E+1 -dddiv455 divide 1e+1 1.00 -> 1E+1 -dddiv456 divide 1e+2 2 -> 5E+1 -dddiv457 divide 1e+2 2.0 -> 5E+1 -dddiv458 divide 1e+2 2.00 -> 5E+1 - --- some from IEEE discussions -dddiv460 divide 3e0 2e0 -> 1.5 -dddiv461 divide 30e-1 2e0 -> 1.5 -dddiv462 divide 300e-2 2e0 -> 1.50 -dddiv464 divide 3000e-3 2e0 -> 1.500 -dddiv465 divide 3e0 20e-1 -> 1.5 -dddiv466 divide 30e-1 20e-1 -> 1.5 -dddiv467 divide 300e-2 20e-1 -> 1.5 -dddiv468 divide 3000e-3 20e-1 -> 1.50 -dddiv469 divide 3e0 200e-2 -> 1.5 -dddiv470 divide 30e-1 200e-2 -> 1.5 -dddiv471 divide 300e-2 200e-2 -> 1.5 -dddiv472 divide 3000e-3 200e-2 -> 1.5 -dddiv473 divide 3e0 2000e-3 -> 1.5 -dddiv474 divide 30e-1 2000e-3 -> 1.5 -dddiv475 divide 300e-2 2000e-3 -> 1.5 -dddiv476 divide 3000e-3 2000e-3 -> 1.5 - --- some reciprocals -dddiv480 divide 1 1.0E+33 -> 1E-33 -dddiv481 divide 1 10E+33 -> 1E-34 -dddiv482 divide 1 1.0E-33 -> 1E+33 -dddiv483 divide 1 10E-33 -> 1E+32 - --- RMS discussion table -dddiv484 divide 0e5 1e3 -> 0E+2 -dddiv485 divide 0e5 2e3 -> 0E+2 -dddiv486 divide 0e5 10e2 -> 0E+3 -dddiv487 divide 0e5 20e2 -> 0E+3 -dddiv488 divide 0e5 100e1 -> 0E+4 -dddiv489 divide 0e5 200e1 -> 0E+4 - -dddiv491 divide 1e5 1e3 -> 1E+2 -dddiv492 divide 1e5 2e3 -> 5E+1 -dddiv493 divide 1e5 10e2 -> 1E+2 -dddiv494 divide 1e5 20e2 -> 5E+1 -dddiv495 divide 1e5 100e1 -> 1E+2 -dddiv496 divide 1e5 200e1 -> 5E+1 - --- tryzeros cases -rounding: half_up -dddiv497 divide 0E+380 1000E-13 -> 0E+369 Clamped -dddiv498 divide 0E-390 1000E+13 -> 0E-398 Clamped - -rounding: half_up - --- focus on trailing zeros issues -dddiv500 divide 1 9.9 -> 0.1010101010101010 Inexact Rounded -dddiv501 divide 1 9.09 -> 0.1100110011001100 Inexact Rounded -dddiv502 divide 1 9.009 -> 0.1110001110001110 Inexact Rounded - -dddiv511 divide 1 2 -> 0.5 -dddiv512 divide 1.0 2 -> 0.5 -dddiv513 divide 1.00 2 -> 0.50 -dddiv514 divide 1.000 2 -> 0.500 -dddiv515 divide 1.0000 2 -> 0.5000 -dddiv516 divide 1.00000 2 -> 0.50000 -dddiv517 divide 1.000000 2 -> 0.500000 -dddiv518 divide 1.0000000 2 -> 0.5000000 -dddiv519 divide 1.00 2.00 -> 0.5 - -dddiv521 divide 2 1 -> 2 -dddiv522 divide 2 1.0 -> 2 -dddiv523 divide 2 1.00 -> 2 -dddiv524 divide 2 1.000 -> 2 -dddiv525 divide 2 1.0000 -> 2 -dddiv526 divide 2 1.00000 -> 2 -dddiv527 divide 2 1.000000 -> 2 -dddiv528 divide 2 1.0000000 -> 2 -dddiv529 divide 2.00 1.00 -> 2 - -dddiv530 divide 2.40 2 -> 1.20 -dddiv531 divide 2.40 4 -> 0.60 -dddiv532 divide 2.40 10 -> 0.24 -dddiv533 divide 2.40 2.0 -> 1.2 -dddiv534 divide 2.40 4.0 -> 0.6 -dddiv535 divide 2.40 10.0 -> 0.24 -dddiv536 divide 2.40 2.00 -> 1.2 -dddiv537 divide 2.40 4.00 -> 0.6 -dddiv538 divide 2.40 10.00 -> 0.24 -dddiv539 divide 0.9 0.1 -> 9 -dddiv540 divide 0.9 0.01 -> 9E+1 -dddiv541 divide 0.9 0.001 -> 9E+2 -dddiv542 divide 5 2 -> 2.5 -dddiv543 divide 5 2.0 -> 2.5 -dddiv544 divide 5 2.00 -> 2.5 -dddiv545 divide 5 20 -> 0.25 -dddiv546 divide 5 20.0 -> 0.25 -dddiv547 divide 2.400 2 -> 1.200 -dddiv548 divide 2.400 2.0 -> 1.20 -dddiv549 divide 2.400 2.400 -> 1 - -dddiv550 divide 240 1 -> 240 -dddiv551 divide 240 10 -> 24 -dddiv552 divide 240 100 -> 2.4 -dddiv553 divide 240 1000 -> 0.24 -dddiv554 divide 2400 1 -> 2400 -dddiv555 divide 2400 10 -> 240 -dddiv556 divide 2400 100 -> 24 -dddiv557 divide 2400 1000 -> 2.4 - --- +ve exponent -dddiv600 divide 2.4E+9 2 -> 1.2E+9 -dddiv601 divide 2.40E+9 2 -> 1.20E+9 -dddiv602 divide 2.400E+9 2 -> 1.200E+9 -dddiv603 divide 2.4000E+9 2 -> 1.2000E+9 -dddiv604 divide 24E+8 2 -> 1.2E+9 -dddiv605 divide 240E+7 2 -> 1.20E+9 -dddiv606 divide 2400E+6 2 -> 1.200E+9 -dddiv607 divide 24000E+5 2 -> 1.2000E+9 - --- more zeros, etc. -dddiv731 divide 5.00 1E-3 -> 5.00E+3 -dddiv732 divide 00.00 0.000 -> NaN Division_undefined -dddiv733 divide 00.00 0E-3 -> NaN Division_undefined -dddiv734 divide 0 -0 -> NaN Division_undefined -dddiv735 divide -0 0 -> NaN Division_undefined -dddiv736 divide -0 -0 -> NaN Division_undefined - -dddiv741 divide 0 -1 -> -0 -dddiv742 divide -0 -1 -> 0 -dddiv743 divide 0 1 -> 0 -dddiv744 divide -0 1 -> -0 -dddiv745 divide -1 0 -> -Infinity Division_by_zero -dddiv746 divide -1 -0 -> Infinity Division_by_zero -dddiv747 divide 1 0 -> Infinity Division_by_zero -dddiv748 divide 1 -0 -> -Infinity Division_by_zero - -dddiv751 divide 0.0 -1 -> -0.0 -dddiv752 divide -0.0 -1 -> 0.0 -dddiv753 divide 0.0 1 -> 0.0 -dddiv754 divide -0.0 1 -> -0.0 -dddiv755 divide -1.0 0 -> -Infinity Division_by_zero -dddiv756 divide -1.0 -0 -> Infinity Division_by_zero -dddiv757 divide 1.0 0 -> Infinity Division_by_zero -dddiv758 divide 1.0 -0 -> -Infinity Division_by_zero - -dddiv761 divide 0 -1.0 -> -0E+1 -dddiv762 divide -0 -1.0 -> 0E+1 -dddiv763 divide 0 1.0 -> 0E+1 -dddiv764 divide -0 1.0 -> -0E+1 -dddiv765 divide -1 0.0 -> -Infinity Division_by_zero -dddiv766 divide -1 -0.0 -> Infinity Division_by_zero -dddiv767 divide 1 0.0 -> Infinity Division_by_zero -dddiv768 divide 1 -0.0 -> -Infinity Division_by_zero - -dddiv771 divide 0.0 -1.0 -> -0 -dddiv772 divide -0.0 -1.0 -> 0 -dddiv773 divide 0.0 1.0 -> 0 -dddiv774 divide -0.0 1.0 -> -0 -dddiv775 divide -1.0 0.0 -> -Infinity Division_by_zero -dddiv776 divide -1.0 -0.0 -> Infinity Division_by_zero -dddiv777 divide 1.0 0.0 -> Infinity Division_by_zero -dddiv778 divide 1.0 -0.0 -> -Infinity Division_by_zero - --- Specials -dddiv780 divide Inf -Inf -> NaN Invalid_operation -dddiv781 divide Inf -1000 -> -Infinity -dddiv782 divide Inf -1 -> -Infinity -dddiv783 divide Inf -0 -> -Infinity -dddiv784 divide Inf 0 -> Infinity -dddiv785 divide Inf 1 -> Infinity -dddiv786 divide Inf 1000 -> Infinity -dddiv787 divide Inf Inf -> NaN Invalid_operation -dddiv788 divide -1000 Inf -> -0E-398 Clamped -dddiv789 divide -Inf Inf -> NaN Invalid_operation -dddiv790 divide -1 Inf -> -0E-398 Clamped -dddiv791 divide -0 Inf -> -0E-398 Clamped -dddiv792 divide 0 Inf -> 0E-398 Clamped -dddiv793 divide 1 Inf -> 0E-398 Clamped -dddiv794 divide 1000 Inf -> 0E-398 Clamped -dddiv795 divide Inf Inf -> NaN Invalid_operation - -dddiv800 divide -Inf -Inf -> NaN Invalid_operation -dddiv801 divide -Inf -1000 -> Infinity -dddiv802 divide -Inf -1 -> Infinity -dddiv803 divide -Inf -0 -> Infinity -dddiv804 divide -Inf 0 -> -Infinity -dddiv805 divide -Inf 1 -> -Infinity -dddiv806 divide -Inf 1000 -> -Infinity -dddiv807 divide -Inf Inf -> NaN Invalid_operation -dddiv808 divide -1000 Inf -> -0E-398 Clamped -dddiv809 divide -Inf -Inf -> NaN Invalid_operation -dddiv810 divide -1 -Inf -> 0E-398 Clamped -dddiv811 divide -0 -Inf -> 0E-398 Clamped -dddiv812 divide 0 -Inf -> -0E-398 Clamped -dddiv813 divide 1 -Inf -> -0E-398 Clamped -dddiv814 divide 1000 -Inf -> -0E-398 Clamped -dddiv815 divide Inf -Inf -> NaN Invalid_operation - -dddiv821 divide NaN -Inf -> NaN -dddiv822 divide NaN -1000 -> NaN -dddiv823 divide NaN -1 -> NaN -dddiv824 divide NaN -0 -> NaN -dddiv825 divide NaN 0 -> NaN -dddiv826 divide NaN 1 -> NaN -dddiv827 divide NaN 1000 -> NaN -dddiv828 divide NaN Inf -> NaN -dddiv829 divide NaN NaN -> NaN -dddiv830 divide -Inf NaN -> NaN -dddiv831 divide -1000 NaN -> NaN -dddiv832 divide -1 NaN -> NaN -dddiv833 divide -0 NaN -> NaN -dddiv834 divide 0 NaN -> NaN -dddiv835 divide 1 NaN -> NaN -dddiv836 divide 1000 NaN -> NaN -dddiv837 divide Inf NaN -> NaN - -dddiv841 divide sNaN -Inf -> NaN Invalid_operation -dddiv842 divide sNaN -1000 -> NaN Invalid_operation -dddiv843 divide sNaN -1 -> NaN Invalid_operation -dddiv844 divide sNaN -0 -> NaN Invalid_operation -dddiv845 divide sNaN 0 -> NaN Invalid_operation -dddiv846 divide sNaN 1 -> NaN Invalid_operation -dddiv847 divide sNaN 1000 -> NaN Invalid_operation -dddiv848 divide sNaN NaN -> NaN Invalid_operation -dddiv849 divide sNaN sNaN -> NaN Invalid_operation -dddiv850 divide NaN sNaN -> NaN Invalid_operation -dddiv851 divide -Inf sNaN -> NaN Invalid_operation -dddiv852 divide -1000 sNaN -> NaN Invalid_operation -dddiv853 divide -1 sNaN -> NaN Invalid_operation -dddiv854 divide -0 sNaN -> NaN Invalid_operation -dddiv855 divide 0 sNaN -> NaN Invalid_operation -dddiv856 divide 1 sNaN -> NaN Invalid_operation -dddiv857 divide 1000 sNaN -> NaN Invalid_operation -dddiv858 divide Inf sNaN -> NaN Invalid_operation -dddiv859 divide NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dddiv861 divide NaN9 -Inf -> NaN9 -dddiv862 divide NaN8 1000 -> NaN8 -dddiv863 divide NaN7 Inf -> NaN7 -dddiv864 divide NaN6 NaN5 -> NaN6 -dddiv865 divide -Inf NaN4 -> NaN4 -dddiv866 divide -1000 NaN3 -> NaN3 -dddiv867 divide Inf NaN2 -> NaN2 - -dddiv871 divide sNaN99 -Inf -> NaN99 Invalid_operation -dddiv872 divide sNaN98 -1 -> NaN98 Invalid_operation -dddiv873 divide sNaN97 NaN -> NaN97 Invalid_operation -dddiv874 divide sNaN96 sNaN94 -> NaN96 Invalid_operation -dddiv875 divide NaN95 sNaN93 -> NaN93 Invalid_operation -dddiv876 divide -Inf sNaN92 -> NaN92 Invalid_operation -dddiv877 divide 0 sNaN91 -> NaN91 Invalid_operation -dddiv878 divide Inf sNaN90 -> NaN90 Invalid_operation -dddiv879 divide NaN sNaN89 -> NaN89 Invalid_operation - -dddiv881 divide -NaN9 -Inf -> -NaN9 -dddiv882 divide -NaN8 1000 -> -NaN8 -dddiv883 divide -NaN7 Inf -> -NaN7 -dddiv884 divide -NaN6 -NaN5 -> -NaN6 -dddiv885 divide -Inf -NaN4 -> -NaN4 -dddiv886 divide -1000 -NaN3 -> -NaN3 -dddiv887 divide Inf -NaN2 -> -NaN2 - -dddiv891 divide -sNaN99 -Inf -> -NaN99 Invalid_operation -dddiv892 divide -sNaN98 -1 -> -NaN98 Invalid_operation -dddiv893 divide -sNaN97 NaN -> -NaN97 Invalid_operation -dddiv894 divide -sNaN96 -sNaN94 -> -NaN96 Invalid_operation -dddiv895 divide -NaN95 -sNaN93 -> -NaN93 Invalid_operation -dddiv896 divide -Inf -sNaN92 -> -NaN92 Invalid_operation -dddiv897 divide 0 -sNaN91 -> -NaN91 Invalid_operation -dddiv898 divide Inf -sNaN90 -> -NaN90 Invalid_operation -dddiv899 divide -NaN -sNaN89 -> -NaN89 Invalid_operation - --- Various flavours of divide by 0 -dddiv901 divide 0 0 -> NaN Division_undefined -dddiv902 divide 0.0E5 0 -> NaN Division_undefined -dddiv903 divide 0.000 0 -> NaN Division_undefined -dddiv904 divide 0.0001 0 -> Infinity Division_by_zero -dddiv905 divide 0.01 0 -> Infinity Division_by_zero -dddiv906 divide 0.1 0 -> Infinity Division_by_zero -dddiv907 divide 1 0 -> Infinity Division_by_zero -dddiv908 divide 1 0.0 -> Infinity Division_by_zero -dddiv909 divide 10 0.0 -> Infinity Division_by_zero -dddiv910 divide 1E+100 0.0 -> Infinity Division_by_zero -dddiv911 divide 1E+100 0 -> Infinity Division_by_zero - -dddiv921 divide -0.0001 0 -> -Infinity Division_by_zero -dddiv922 divide -0.01 0 -> -Infinity Division_by_zero -dddiv923 divide -0.1 0 -> -Infinity Division_by_zero -dddiv924 divide -1 0 -> -Infinity Division_by_zero -dddiv925 divide -1 0.0 -> -Infinity Division_by_zero -dddiv926 divide -10 0.0 -> -Infinity Division_by_zero -dddiv927 divide -1E+100 0.0 -> -Infinity Division_by_zero -dddiv928 divide -1E+100 0 -> -Infinity Division_by_zero - -dddiv931 divide 0.0001 -0 -> -Infinity Division_by_zero -dddiv932 divide 0.01 -0 -> -Infinity Division_by_zero -dddiv933 divide 0.1 -0 -> -Infinity Division_by_zero -dddiv934 divide 1 -0 -> -Infinity Division_by_zero -dddiv935 divide 1 -0.0 -> -Infinity Division_by_zero -dddiv936 divide 10 -0.0 -> -Infinity Division_by_zero -dddiv937 divide 1E+100 -0.0 -> -Infinity Division_by_zero -dddiv938 divide 1E+100 -0 -> -Infinity Division_by_zero - -dddiv941 divide -0.0001 -0 -> Infinity Division_by_zero -dddiv942 divide -0.01 -0 -> Infinity Division_by_zero -dddiv943 divide -0.1 -0 -> Infinity Division_by_zero -dddiv944 divide -1 -0 -> Infinity Division_by_zero -dddiv945 divide -1 -0.0 -> Infinity Division_by_zero -dddiv946 divide -10 -0.0 -> Infinity Division_by_zero -dddiv947 divide -1E+100 -0.0 -> Infinity Division_by_zero -dddiv948 divide -1E+100 -0 -> Infinity Division_by_zero - --- Examples from SQL proposal (Krishna Kulkarni) -dddiv1021 divide 1E0 1E0 -> 1 -dddiv1022 divide 1E0 2E0 -> 0.5 -dddiv1023 divide 1E0 3E0 -> 0.3333333333333333 Inexact Rounded -dddiv1024 divide 100E-2 1000E-3 -> 1 -dddiv1025 divide 24E-1 2E0 -> 1.2 -dddiv1026 divide 2400E-3 2E0 -> 1.200 -dddiv1027 divide 5E0 2E0 -> 2.5 -dddiv1028 divide 5E0 20E-1 -> 2.5 -dddiv1029 divide 5E0 2000E-3 -> 2.5 -dddiv1030 divide 5E0 2E-1 -> 25 -dddiv1031 divide 5E0 20E-2 -> 25 -dddiv1032 divide 480E-2 3E0 -> 1.60 -dddiv1033 divide 47E-1 2E0 -> 2.35 - --- ECMAScript bad examples -rounding: half_down -dddiv1040 divide 5 9 -> 0.5555555555555556 Inexact Rounded -rounding: half_even -dddiv1041 divide 6 11 -> 0.5454545454545455 Inexact Rounded - --- overflow and underflow tests .. note subnormal results --- signs -dddiv1051 divide 1e+277 1e-311 -> Infinity Overflow Inexact Rounded -dddiv1052 divide 1e+277 -1e-311 -> -Infinity Overflow Inexact Rounded -dddiv1053 divide -1e+277 1e-311 -> -Infinity Overflow Inexact Rounded -dddiv1054 divide -1e+277 -1e-311 -> Infinity Overflow Inexact Rounded -dddiv1055 divide 1e-277 1e+311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1056 divide 1e-277 -1e+311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1057 divide -1e-277 1e+311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1058 divide -1e-277 -1e+311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dddiv1060 divide 1e-291 1e+101 -> 1E-392 Subnormal -dddiv1061 divide 1e-291 1e+102 -> 1E-393 Subnormal -dddiv1062 divide 1e-291 1e+103 -> 1E-394 Subnormal -dddiv1063 divide 1e-291 1e+104 -> 1E-395 Subnormal -dddiv1064 divide 1e-291 1e+105 -> 1E-396 Subnormal -dddiv1065 divide 1e-291 1e+106 -> 1E-397 Subnormal -dddiv1066 divide 1e-291 1e+107 -> 1E-398 Subnormal -dddiv1067 divide 1e-291 1e+108 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1068 divide 1e-291 1e+109 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1069 divide 1e-291 1e+110 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -dddiv1070 divide 1e+60 1e-321 -> 1.000000000000E+381 Clamped -dddiv1071 divide 1e+60 1e-322 -> 1.0000000000000E+382 Clamped -dddiv1072 divide 1e+60 1e-323 -> 1.00000000000000E+383 Clamped -dddiv1073 divide 1e+60 1e-324 -> 1.000000000000000E+384 Clamped -dddiv1074 divide 1e+60 1e-325 -> Infinity Overflow Inexact Rounded -dddiv1075 divide 1e+60 1e-326 -> Infinity Overflow Inexact Rounded -dddiv1076 divide 1e+60 1e-327 -> Infinity Overflow Inexact Rounded -dddiv1077 divide 1e+60 1e-328 -> Infinity Overflow Inexact Rounded -dddiv1078 divide 1e+60 1e-329 -> Infinity Overflow Inexact Rounded -dddiv1079 divide 1e+60 1e-330 -> Infinity Overflow Inexact Rounded - -dddiv1101 divide 1.0000E-394 1 -> 1.0000E-394 Subnormal -dddiv1102 divide 1.000E-394 1e+1 -> 1.000E-395 Subnormal -dddiv1103 divide 1.00E-394 1e+2 -> 1.00E-396 Subnormal -dddiv1104 divide 1.0E-394 1e+3 -> 1.0E-397 Subnormal -dddiv1105 divide 1.0E-394 1e+4 -> 1E-398 Subnormal Rounded -dddiv1106 divide 1.3E-394 1e+4 -> 1E-398 Underflow Subnormal Inexact Rounded -dddiv1107 divide 1.5E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1108 divide 1.7E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1109 divide 2.3E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1110 divide 2.5E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1111 divide 2.7E-394 1e+4 -> 3E-398 Underflow Subnormal Inexact Rounded -dddiv1112 divide 1.49E-394 1e+4 -> 1E-398 Underflow Subnormal Inexact Rounded -dddiv1113 divide 1.50E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1114 divide 1.51E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1115 divide 2.49E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1116 divide 2.50E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1117 divide 2.51E-394 1e+4 -> 3E-398 Underflow Subnormal Inexact Rounded - -dddiv1118 divide 1E-394 1e+4 -> 1E-398 Subnormal -dddiv1119 divide 3E-394 1e+5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1120 divide 5E-394 1e+5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1121 divide 7E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded -dddiv1122 divide 9E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded -dddiv1123 divide 9.9E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded - -dddiv1124 divide 1E-394 -1e+4 -> -1E-398 Subnormal -dddiv1125 divide 3E-394 -1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1126 divide -5E-394 1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1127 divide 7E-394 -1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded -dddiv1128 divide -9E-394 1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded -dddiv1129 divide 9.9E-394 -1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded -dddiv1130 divide 3.0E-394 -1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped - -dddiv1131 divide 1.0E-199 1e+200 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1132 divide 1.0E-199 1e+199 -> 1E-398 Subnormal Rounded -dddiv1133 divide 1.0E-199 1e+198 -> 1.0E-397 Subnormal -dddiv1134 divide 2.0E-199 2e+198 -> 1.0E-397 Subnormal -dddiv1135 divide 4.0E-199 4e+198 -> 1.0E-397 Subnormal -dddiv1136 divide 10.0E-199 10e+198 -> 1.0E-397 Subnormal -dddiv1137 divide 30.0E-199 30e+198 -> 1.0E-397 Subnormal - --- randoms -dddiv2010 divide -3.303226714900711E-35 8.796578842713183E+73 -> -3.755126594058783E-109 Inexact Rounded -dddiv2011 divide 933153327821073.6 68782181090246.25 -> 13.56678885475763 Inexact Rounded -dddiv2012 divide 5.04752436057906E-72 -8.179481771238642E+64 -> -6.170958627632835E-137 Inexact Rounded -dddiv2013 divide -3707613309582318 3394911196503.048 -> -1092.109070010836 Inexact Rounded -dddiv2014 divide 99689.0555190461 -4.735208553891464 -> -21052.72753765411 Inexact Rounded -dddiv2015 divide -1447915775613329 269750797.8184875 -> -5367605.164925653 Inexact Rounded -dddiv2016 divide -9.394881304225258E-19 -830585.0252671636 -> 1.131116143251358E-24 Inexact Rounded -dddiv2017 divide -1.056283432738934 88.58754555124013 -> -0.01192361100159352 Inexact Rounded -dddiv2018 divide 5763220933343.081 689089567025052.1 -> 0.008363529516524456 Inexact Rounded -dddiv2019 divide 873819.122103216 9.740612494523300E-49 -> 8.970884763093948E+53 Inexact Rounded -dddiv2020 divide 8022914.838533576 6178.566801742713 -> 1298.507420243583 Inexact Rounded -dddiv2021 divide 203982.7605650363 -2158.283639053435 -> -94.51156320422168 Inexact Rounded -dddiv2022 divide 803.6310547013030 7101143795399.238 -> 1.131692411611166E-10 Inexact Rounded -dddiv2023 divide 9.251697842123399E-82 -1.342350220606119E-7 -> -6.892163982321936E-75 Inexact Rounded -dddiv2024 divide -1.980600645637992E-53 -5.474262753214457E+77 -> 3.618022617703168E-131 Inexact Rounded -dddiv2025 divide -210.0322996351690 -8.580951835872843E+80 -> 2.447657365434971E-79 Inexact Rounded -dddiv2026 divide -1.821980314020370E+85 -3.018915267138165 -> 6.035215144503042E+84 Inexact Rounded -dddiv2027 divide -772264503601.1047 5.158258271408988E-86 -> -1.497141986630614E+97 Inexact Rounded -dddiv2028 divide -767.0532415847106 2.700027228028939E-59 -> -2.840909282772941E+61 Inexact Rounded -dddiv2029 divide 496724.8548250093 7.32700588163100E+66 -> 6.779370220929013E-62 Inexact Rounded -dddiv2030 divide -304232651447703.9 -108.9730808657440 -> 2791814721862.565 Inexact Rounded -dddiv2031 divide -7.233817192699405E+42 -5711302004.149411 -> 1.266579352211430E+33 Inexact Rounded -dddiv2032 divide -9.999221444912745E+96 4010569406446197 -> -2.493217404202250E+81 Inexact Rounded -dddiv2033 divide -1837272.061937622 8.356322838066762 -> -219866.0939196882 Inexact Rounded -dddiv2034 divide 2168.517555606529 209.1910258615061 -> 10.36620737756784 Inexact Rounded -dddiv2035 divide -1.884389790576371E+88 2.95181953870583E+20 -> -6.383824505079828E+67 Inexact Rounded -dddiv2036 divide 732263.6037438196 961222.3634446889 -> 0.7618045850698269 Inexact Rounded -dddiv2037 divide -813461419.0348336 5.376293753809143E+84 -> -1.513052404285927E-76 Inexact Rounded -dddiv2038 divide -45562133508108.50 -9.776843494690107E+51 -> 4.660208945029519E-39 Inexact Rounded -dddiv2039 divide -6.489393172441016E+80 -9101965.097852113 -> 7.129661674897421E+73 Inexact Rounded -dddiv2040 divide 3.694576237117349E+93 6683512.012622003 -> 5.527896456443912E+86 Inexact Rounded -dddiv2041 divide -2.252877726403272E+19 -7451913256.181367 -> 3023220546.125531 Inexact Rounded -dddiv2042 divide 518303.1989111842 50.01587020474133 -> 10362.77479107123 Inexact Rounded -dddiv2043 divide 2.902087881880103E+24 33.32400992305702 -> 8.708699488989578E+22 Inexact Rounded -dddiv2044 divide 549619.4559510557 1660824845196338 -> 3.309316196351104E-10 Inexact Rounded -dddiv2045 divide -6775670774684043 8292152023.077262 -> -817118.4941891062 Inexact Rounded -dddiv2046 divide -77.50923921524079 -5.636882655425815E+74 -> 1.375037302588405E-73 Inexact Rounded -dddiv2047 divide -2.984889459605149E-10 -88106156784122.99 -> 3.387833005721384E-24 Inexact Rounded -dddiv2048 divide 0.949517293997085 44767115.96450998 -> 2.121015110175589E-8 Inexact Rounded -dddiv2049 divide -2760937211.084521 -1087015876975408 -> 0.000002539923537057024 Inexact Rounded -dddiv2050 divide 28438351.85030536 -4.209397904088624E-47 -> -6.755919135770688E+53 Inexact Rounded -dddiv2051 divide -85562731.6820956 -7.166045442530185E+45 -> 1.194002080621542E-38 Inexact Rounded -dddiv2052 divide 2533802852165.25 7154.119606235955 -> 354173957.3317501 Inexact Rounded -dddiv2053 divide -8858831346851.474 97.59734208801716 -> -90769186509.83577 Inexact Rounded -dddiv2054 divide 176783629801387.5 840073263.3109817 -> 210438.3480848206 Inexact Rounded -dddiv2055 divide -493506471796175.6 79733894790822.03 -> -6.189418854940746 Inexact Rounded -dddiv2056 divide 790.1682542103445 829.9449370367435 -> 0.9520731062371214 Inexact Rounded -dddiv2057 divide -8920459838.583164 -4767.889187899214 -> 1870945.294035581 Inexact Rounded -dddiv2058 divide 53536687164422.1 53137.5007032689 -> 1007512330.385698 Inexact Rounded -dddiv2059 divide 4.051532311146561E-74 -2.343089768972261E+94 -> -1.729140882606332E-168 Inexact Rounded -dddiv2060 divide -14847758778636.88 3.062543516383807E-43 -> -4.848178874587497E+55 Inexact Rounded - --- Division probably has pre-rounding, so need to test rounding --- explicitly rather than assume included through other tests; --- tests include simple rounding and also the tricky cases of sticky --- bits following two zeros --- --- 1/99999 gives 0.0000100001000010000100001000010000100001 --- 1234567890123456 --- --- 1/999999 gives 0.000001000001000001000001000001000001000001 --- 1234567890123456 - -rounding: ceiling -dddiv3001 divide 1 3 -> 0.3333333333333334 Inexact Rounded -dddiv3002 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3003 divide 1 99999 -> 0.00001000010000100002 Inexact Rounded -dddiv3004 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded - -rounding: floor -dddiv3011 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3012 divide 2 3 -> 0.6666666666666666 Inexact Rounded -dddiv3013 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3014 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: up -dddiv3021 divide 1 3 -> 0.3333333333333334 Inexact Rounded -dddiv3022 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3023 divide 1 99999 -> 0.00001000010000100002 Inexact Rounded -dddiv3024 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded - -rounding: down -dddiv3031 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3032 divide 2 3 -> 0.6666666666666666 Inexact Rounded -dddiv3033 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3034 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: half_up -dddiv3041 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3042 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3043 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3044 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: half_down -dddiv3051 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3052 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3053 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3054 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: half_even -dddiv3061 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3062 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3063 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3064 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: 05up -dddiv3071 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3072 divide 2 3 -> 0.6666666666666666 Inexact Rounded -dddiv3073 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3074 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded - --- random divide tests with result near 1 -rounding: half_even -dddiv4001 divide 3195385192916917 3195385192946695 -> 0.9999999999906809 Inexact Rounded -dddiv4002 divide 1393723067526993 1393723067519475 -> 1.000000000005394 Inexact Rounded -dddiv4003 divide 759985543702302 759985543674015 -> 1.000000000037220 Inexact Rounded -dddiv4004 divide 9579158456027302 9579158456036864 -> 0.9999999999990018 Inexact Rounded -dddiv4005 divide 7079398299143569 7079398299156904 -> 0.9999999999981164 Inexact Rounded -dddiv4006 divide 6636169255366598 6636169255336386 -> 1.000000000004553 Inexact Rounded -dddiv4007 divide 6964813971340090 6964813971321554 -> 1.000000000002661 Inexact Rounded -dddiv4008 divide 4182275225480784 4182275225454009 -> 1.000000000006402 Inexact Rounded -dddiv4009 divide 9228325124938029 9228325124918730 -> 1.000000000002091 Inexact Rounded -dddiv4010 divide 3428346338630192 3428346338609843 -> 1.000000000005936 Inexact Rounded -dddiv4011 divide 2143511550722893 2143511550751754 -> 0.9999999999865356 Inexact Rounded -dddiv4012 divide 1672732924396785 1672732924401811 -> 0.9999999999969953 Inexact Rounded -dddiv4013 divide 4190714611948216 4190714611948664 -> 0.9999999999998931 Inexact Rounded -dddiv4014 divide 3942254800848877 3942254800814556 -> 1.000000000008706 Inexact Rounded -dddiv4015 divide 2854459826952334 2854459826960762 -> 0.9999999999970474 Inexact Rounded -dddiv4016 divide 2853258953664731 2853258953684471 -> 0.9999999999930816 Inexact Rounded -dddiv4017 divide 9453512638125978 9453512638146425 -> 0.9999999999978371 Inexact Rounded -dddiv4018 divide 339476633940369 339476633912887 -> 1.000000000080954 Inexact Rounded -dddiv4019 divide 4542181492688467 4542181492697735 -> 0.9999999999979596 Inexact Rounded -dddiv4020 divide 7312600192399197 7312600192395424 -> 1.000000000000516 Inexact Rounded -dddiv4021 divide 1811674985570111 1811674985603935 -> 0.9999999999813300 Inexact Rounded -dddiv4022 divide 1706462639003481 1706462639017740 -> 0.9999999999916441 Inexact Rounded -dddiv4023 divide 6697052654940368 6697052654934110 -> 1.000000000000934 Inexact Rounded -dddiv4024 divide 5015283664277539 5015283664310719 -> 0.9999999999933842 Inexact Rounded -dddiv4025 divide 2359501561537464 2359501561502464 -> 1.000000000014834 Inexact Rounded -dddiv4026 divide 2669850227909157 2669850227901548 -> 1.000000000002850 Inexact Rounded -dddiv4027 divide 9329725546974648 9329725547002445 -> 0.9999999999970206 Inexact Rounded -dddiv4028 divide 3228562867071248 3228562867106206 -> 0.9999999999891723 Inexact Rounded -dddiv4029 divide 4862226644921175 4862226644909380 -> 1.000000000002426 Inexact Rounded -dddiv4030 divide 1022267997054529 1022267997071329 -> 0.9999999999835660 Inexact Rounded -dddiv4031 divide 1048777482023719 1048777482000948 -> 1.000000000021712 Inexact Rounded -dddiv4032 divide 9980113777337098 9980113777330539 -> 1.000000000000657 Inexact Rounded -dddiv4033 divide 7506839167963908 7506839167942901 -> 1.000000000002798 Inexact Rounded -dddiv4034 divide 231119751977860 231119751962453 -> 1.000000000066662 Inexact Rounded -dddiv4035 divide 4034903664762962 4034903664795526 -> 0.9999999999919294 Inexact Rounded -dddiv4036 divide 5700122152274696 5700122152251386 -> 1.000000000004089 Inexact Rounded -dddiv4037 divide 6869599590293110 6869599590293495 -> 0.9999999999999440 Inexact Rounded -dddiv4038 divide 5576281960092797 5576281960105579 -> 0.9999999999977078 Inexact Rounded -dddiv4039 divide 2304844888381318 2304844888353073 -> 1.000000000012255 Inexact Rounded -dddiv4040 divide 3265933651656452 3265933651682779 -> 0.9999999999919389 Inexact Rounded -dddiv4041 divide 5235714985079914 5235714985066131 -> 1.000000000002632 Inexact Rounded -dddiv4042 divide 5578481572827551 5578481572822945 -> 1.000000000000826 Inexact Rounded -dddiv4043 divide 4909616081396134 4909616081373076 -> 1.000000000004696 Inexact Rounded -dddiv4044 divide 636447224349537 636447224338757 -> 1.000000000016938 Inexact Rounded -dddiv4045 divide 1539373428396640 1539373428364727 -> 1.000000000020731 Inexact Rounded -dddiv4046 divide 2028786707377893 2028786707378866 -> 0.9999999999995204 Inexact Rounded -dddiv4047 divide 137643260486222 137643260487419 -> 0.9999999999913036 Inexact Rounded -dddiv4048 divide 247451519746765 247451519752267 -> 0.9999999999777653 Inexact Rounded -dddiv4049 divide 7877858475022054 7877858474999794 -> 1.000000000002826 Inexact Rounded -dddiv4050 divide 7333242694766258 7333242694744628 -> 1.000000000002950 Inexact Rounded -dddiv4051 divide 124051503698592 124051503699397 -> 0.9999999999935108 Inexact Rounded -dddiv4052 divide 8944737432385188 8944737432406860 -> 0.9999999999975771 Inexact Rounded -dddiv4053 divide 9883948923406874 9883948923424843 -> 0.9999999999981820 Inexact Rounded -dddiv4054 divide 6829178741654284 6829178741671973 -> 0.9999999999974098 Inexact Rounded -dddiv4055 divide 7342752479768122 7342752479793385 -> 0.9999999999965595 Inexact Rounded -dddiv4056 divide 8066426579008783 8066426578977563 -> 1.000000000003870 Inexact Rounded -dddiv4057 divide 8992775071383295 8992775071352712 -> 1.000000000003401 Inexact Rounded -dddiv4058 divide 5485011755545641 5485011755543611 -> 1.000000000000370 Inexact Rounded -dddiv4059 divide 5779983054353918 5779983054365300 -> 0.9999999999980308 Inexact Rounded -dddiv4060 divide 9502265102713774 9502265102735208 -> 0.9999999999977443 Inexact Rounded -dddiv4061 divide 2109558399130981 2109558399116281 -> 1.000000000006968 Inexact Rounded -dddiv4062 divide 5296182636350471 5296182636351521 -> 0.9999999999998017 Inexact Rounded -dddiv4063 divide 1440019225591883 1440019225601844 -> 0.9999999999930827 Inexact Rounded -dddiv4064 divide 8182110791881341 8182110791847174 -> 1.000000000004176 Inexact Rounded -dddiv4065 divide 489098235512060 489098235534516 -> 0.9999999999540869 Inexact Rounded -dddiv4066 divide 6475687084782038 6475687084756089 -> 1.000000000004007 Inexact Rounded -dddiv4067 divide 8094348555736948 8094348555759236 -> 0.9999999999972465 Inexact Rounded -dddiv4068 divide 1982766816291543 1982766816309463 -> 0.9999999999909621 Inexact Rounded -dddiv4069 divide 9277314300113251 9277314300084467 -> 1.000000000003103 Inexact Rounded -dddiv4070 divide 4335532959318934 4335532959293167 -> 1.000000000005943 Inexact Rounded -dddiv4071 divide 7767113032981348 7767113032968132 -> 1.000000000001702 Inexact Rounded -dddiv4072 divide 1578548053342868 1578548053370448 -> 0.9999999999825282 Inexact Rounded -dddiv4073 divide 3790420686666898 3790420686636315 -> 1.000000000008068 Inexact Rounded -dddiv4074 divide 871682421955147 871682421976441 -> 0.9999999999755714 Inexact Rounded -dddiv4075 divide 744141054479940 744141054512329 -> 0.9999999999564746 Inexact Rounded -dddiv4076 divide 8956824183670735 8956824183641741 -> 1.000000000003237 Inexact Rounded -dddiv4077 divide 8337291694485682 8337291694451193 -> 1.000000000004137 Inexact Rounded -dddiv4078 divide 4107775944683669 4107775944657097 -> 1.000000000006469 Inexact Rounded -dddiv4079 divide 8691900057964648 8691900057997555 -> 0.9999999999962141 Inexact Rounded -dddiv4080 divide 2229528520536462 2229528520502337 -> 1.000000000015306 Inexact Rounded -dddiv4081 divide 398442083774322 398442083746273 -> 1.000000000070397 Inexact Rounded -dddiv4082 divide 5319819776808759 5319819776838313 -> 0.9999999999944445 Inexact Rounded -dddiv4083 divide 7710491299066855 7710491299041858 -> 1.000000000003242 Inexact Rounded -dddiv4084 divide 9083231296087266 9083231296058160 -> 1.000000000003204 Inexact Rounded -dddiv4085 divide 3566873574904559 3566873574890328 -> 1.000000000003990 Inexact Rounded -dddiv4086 divide 596343290550525 596343290555614 -> 0.9999999999914663 Inexact Rounded -dddiv4087 divide 278227925093192 278227925068104 -> 1.000000000090171 Inexact Rounded -dddiv4088 divide 3292902958490649 3292902958519881 -> 0.9999999999911227 Inexact Rounded -dddiv4089 divide 5521871364245881 5521871364229536 -> 1.000000000002960 Inexact Rounded -dddiv4090 divide 2406505602883617 2406505602857997 -> 1.000000000010646 Inexact Rounded -dddiv4091 divide 7741146984869208 7741146984867255 -> 1.000000000000252 Inexact Rounded -dddiv4092 divide 4576041832414909 4576041832405102 -> 1.000000000002143 Inexact Rounded -dddiv4093 divide 9183756982878057 9183756982901934 -> 0.9999999999974001 Inexact Rounded -dddiv4094 divide 6215736513855159 6215736513870342 -> 0.9999999999975573 Inexact Rounded -dddiv4095 divide 248554968534533 248554968551417 -> 0.9999999999320714 Inexact Rounded -dddiv4096 divide 376314165668645 376314165659755 -> 1.000000000023624 Inexact Rounded -dddiv4097 divide 5513569249809718 5513569249808906 -> 1.000000000000147 Inexact Rounded -dddiv4098 divide 3367992242167904 3367992242156228 -> 1.000000000003467 Inexact Rounded -dddiv4099 divide 6134869538966967 6134869538985986 -> 0.9999999999968999 Inexact Rounded - --- Null tests -dddiv9998 divide 10 # -> NaN Invalid_operation -dddiv9999 divide # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddDivide.decTest -- decDouble division -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +dddiv001 divide 1 1 -> 1 +dddiv002 divide 2 1 -> 2 +dddiv003 divide 1 2 -> 0.5 +dddiv004 divide 2 2 -> 1 +dddiv005 divide 0 1 -> 0 +dddiv006 divide 0 2 -> 0 +dddiv007 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv008 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv009 divide 3 3 -> 1 + +dddiv010 divide 2.4 1 -> 2.4 +dddiv011 divide 2.4 -1 -> -2.4 +dddiv012 divide -2.4 1 -> -2.4 +dddiv013 divide -2.4 -1 -> 2.4 +dddiv014 divide 2.40 1 -> 2.40 +dddiv015 divide 2.400 1 -> 2.400 +dddiv016 divide 2.4 2 -> 1.2 +dddiv017 divide 2.400 2 -> 1.200 +dddiv018 divide 2. 2 -> 1 +dddiv019 divide 20 20 -> 1 + +dddiv020 divide 187 187 -> 1 +dddiv021 divide 5 2 -> 2.5 +dddiv022 divide 50 20 -> 2.5 +dddiv023 divide 500 200 -> 2.5 +dddiv024 divide 50.0 20.0 -> 2.5 +dddiv025 divide 5.00 2.00 -> 2.5 +dddiv026 divide 5 2.0 -> 2.5 +dddiv027 divide 5 2.000 -> 2.5 +dddiv028 divide 5 0.20 -> 25 +dddiv029 divide 5 0.200 -> 25 +dddiv030 divide 10 1 -> 10 +dddiv031 divide 100 1 -> 100 +dddiv032 divide 1000 1 -> 1000 +dddiv033 divide 1000 100 -> 10 + +dddiv035 divide 1 2 -> 0.5 +dddiv036 divide 1 4 -> 0.25 +dddiv037 divide 1 8 -> 0.125 +dddiv038 divide 1 16 -> 0.0625 +dddiv039 divide 1 32 -> 0.03125 +dddiv040 divide 1 64 -> 0.015625 +dddiv041 divide 1 -2 -> -0.5 +dddiv042 divide 1 -4 -> -0.25 +dddiv043 divide 1 -8 -> -0.125 +dddiv044 divide 1 -16 -> -0.0625 +dddiv045 divide 1 -32 -> -0.03125 +dddiv046 divide 1 -64 -> -0.015625 +dddiv047 divide -1 2 -> -0.5 +dddiv048 divide -1 4 -> -0.25 +dddiv049 divide -1 8 -> -0.125 +dddiv050 divide -1 16 -> -0.0625 +dddiv051 divide -1 32 -> -0.03125 +dddiv052 divide -1 64 -> -0.015625 +dddiv053 divide -1 -2 -> 0.5 +dddiv054 divide -1 -4 -> 0.25 +dddiv055 divide -1 -8 -> 0.125 +dddiv056 divide -1 -16 -> 0.0625 +dddiv057 divide -1 -32 -> 0.03125 +dddiv058 divide -1 -64 -> 0.015625 + +-- bcdTime +dddiv060 divide 1 7 -> 0.1428571428571429 Inexact Rounded +dddiv061 divide 1.2345678 1.9876543 -> 0.6211179680490717 Inexact Rounded + +-- 1234567890123456 +dddiv071 divide 9999999999999999 1 -> 9999999999999999 +dddiv072 divide 999999999999999 1 -> 999999999999999 +dddiv073 divide 99999999999999 1 -> 99999999999999 +dddiv074 divide 9999999999999 1 -> 9999999999999 +dddiv075 divide 999999999999 1 -> 999999999999 +dddiv076 divide 99999999999 1 -> 99999999999 +dddiv077 divide 9999999999 1 -> 9999999999 +dddiv078 divide 999999999 1 -> 999999999 +dddiv079 divide 99999999 1 -> 99999999 +dddiv080 divide 9999999 1 -> 9999999 +dddiv081 divide 999999 1 -> 999999 +dddiv082 divide 99999 1 -> 99999 +dddiv083 divide 9999 1 -> 9999 +dddiv084 divide 999 1 -> 999 +dddiv085 divide 99 1 -> 99 +dddiv086 divide 9 1 -> 9 + +dddiv090 divide 0. 1 -> 0 +dddiv091 divide .0 1 -> 0.0 +dddiv092 divide 0.00 1 -> 0.00 +dddiv093 divide 0.00E+9 1 -> 0E+7 +dddiv094 divide 0.0000E-50 1 -> 0E-54 + +dddiv095 divide 1 1E-8 -> 1E+8 +dddiv096 divide 1 1E-9 -> 1E+9 +dddiv097 divide 1 1E-10 -> 1E+10 +dddiv098 divide 1 1E-11 -> 1E+11 +dddiv099 divide 1 1E-12 -> 1E+12 + +dddiv100 divide 1 1 -> 1 +dddiv101 divide 1 2 -> 0.5 +dddiv102 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv103 divide 1 4 -> 0.25 +dddiv104 divide 1 5 -> 0.2 +dddiv105 divide 1 6 -> 0.1666666666666667 Inexact Rounded +dddiv106 divide 1 7 -> 0.1428571428571429 Inexact Rounded +dddiv107 divide 1 8 -> 0.125 +dddiv108 divide 1 9 -> 0.1111111111111111 Inexact Rounded +dddiv109 divide 1 10 -> 0.1 +dddiv110 divide 1 1 -> 1 +dddiv111 divide 2 1 -> 2 +dddiv112 divide 3 1 -> 3 +dddiv113 divide 4 1 -> 4 +dddiv114 divide 5 1 -> 5 +dddiv115 divide 6 1 -> 6 +dddiv116 divide 7 1 -> 7 +dddiv117 divide 8 1 -> 8 +dddiv118 divide 9 1 -> 9 +dddiv119 divide 10 1 -> 10 + +dddiv120 divide 3E+1 0.001 -> 3E+4 +dddiv121 divide 2.200 2 -> 1.100 + +dddiv130 divide 12345 4.999 -> 2469.493898779756 Inexact Rounded +dddiv131 divide 12345 4.99 -> 2473.947895791583 Inexact Rounded +dddiv132 divide 12345 4.9 -> 2519.387755102041 Inexact Rounded +dddiv133 divide 12345 5 -> 2469 +dddiv134 divide 12345 5.1 -> 2420.588235294118 Inexact Rounded +dddiv135 divide 12345 5.01 -> 2464.071856287425 Inexact Rounded +dddiv136 divide 12345 5.001 -> 2468.506298740252 Inexact Rounded + +-- test possibly imprecise results +dddiv220 divide 391 597 -> 0.6549413735343384 Inexact Rounded +dddiv221 divide 391 -597 -> -0.6549413735343384 Inexact Rounded +dddiv222 divide -391 597 -> -0.6549413735343384 Inexact Rounded +dddiv223 divide -391 -597 -> 0.6549413735343384 Inexact Rounded + +-- test some cases that are close to exponent overflow, some with coefficient padding +dddiv270 divide 1 1e384 -> 1E-384 Subnormal +dddiv271 divide 1 0.9e384 -> 1.11111111111111E-384 Rounded Inexact Subnormal Underflow +dddiv272 divide 1 0.99e384 -> 1.01010101010101E-384 Rounded Inexact Subnormal Underflow +dddiv273 divide 1 0.9999999999999999e384 -> 1.00000000000000E-384 Rounded Inexact Subnormal Underflow +dddiv274 divide 9e384 1 -> 9.000000000000000E+384 Clamped +dddiv275 divide 9.9e384 1 -> 9.900000000000000E+384 Clamped +dddiv276 divide 9.99e384 1 -> 9.990000000000000E+384 Clamped +dddiv277 divide 9.9999999999999e384 1 -> 9.999999999999900E+384 Clamped +dddiv278 divide 9.99999999999999e384 1 -> 9.999999999999990E+384 Clamped +dddiv279 divide 9.999999999999999e384 1 -> 9.999999999999999E+384 + +dddiv285 divide 9.9e384 1.1 -> 9.000000000000000E+384 Clamped +dddiv286 divide 9.99e384 1.1 -> 9.081818181818182E+384 Inexact Rounded +dddiv287 divide 9.9999999999999e384 1.1 -> 9.090909090909000E+384 Clamped +dddiv288 divide 9.99999999999999e384 1.1 -> 9.090909090909082E+384 Inexact Rounded +dddiv289 divide 9.999999999999999e384 1.1 -> 9.090909090909090E+384 Clamped + + +-- Divide into 0 tests +dddiv301 divide 0 7 -> 0 +dddiv302 divide 0 7E-5 -> 0E+5 +dddiv303 divide 0 7E-1 -> 0E+1 +dddiv304 divide 0 7E+1 -> 0.0 +dddiv305 divide 0 7E+5 -> 0.00000 +dddiv306 divide 0 7E+6 -> 0.000000 +dddiv307 divide 0 7E+7 -> 0E-7 +dddiv308 divide 0 70E-5 -> 0E+5 +dddiv309 divide 0 70E-1 -> 0E+1 +dddiv310 divide 0 70E+0 -> 0 +dddiv311 divide 0 70E+1 -> 0.0 +dddiv312 divide 0 70E+5 -> 0.00000 +dddiv313 divide 0 70E+6 -> 0.000000 +dddiv314 divide 0 70E+7 -> 0E-7 +dddiv315 divide 0 700E-5 -> 0E+5 +dddiv316 divide 0 700E-1 -> 0E+1 +dddiv317 divide 0 700E+0 -> 0 +dddiv318 divide 0 700E+1 -> 0.0 +dddiv319 divide 0 700E+5 -> 0.00000 +dddiv320 divide 0 700E+6 -> 0.000000 +dddiv321 divide 0 700E+7 -> 0E-7 +dddiv322 divide 0 700E+77 -> 0E-77 + +dddiv331 divide 0E-3 7E-5 -> 0E+2 +dddiv332 divide 0E-3 7E-1 -> 0.00 +dddiv333 divide 0E-3 7E+1 -> 0.0000 +dddiv334 divide 0E-3 7E+5 -> 0E-8 +dddiv335 divide 0E-1 7E-5 -> 0E+4 +dddiv336 divide 0E-1 7E-1 -> 0 +dddiv337 divide 0E-1 7E+1 -> 0.00 +dddiv338 divide 0E-1 7E+5 -> 0.000000 +dddiv339 divide 0E+1 7E-5 -> 0E+6 +dddiv340 divide 0E+1 7E-1 -> 0E+2 +dddiv341 divide 0E+1 7E+1 -> 0 +dddiv342 divide 0E+1 7E+5 -> 0.0000 +dddiv343 divide 0E+3 7E-5 -> 0E+8 +dddiv344 divide 0E+3 7E-1 -> 0E+4 +dddiv345 divide 0E+3 7E+1 -> 0E+2 +dddiv346 divide 0E+3 7E+5 -> 0.00 + +-- These were 'input rounding' +dddiv441 divide 12345678000 1 -> 12345678000 +dddiv442 divide 1 12345678000 -> 8.100000664200054E-11 Inexact Rounded +dddiv443 divide 1234567800 1 -> 1234567800 +dddiv444 divide 1 1234567800 -> 8.100000664200054E-10 Inexact Rounded +dddiv445 divide 1234567890 1 -> 1234567890 +dddiv446 divide 1 1234567890 -> 8.100000073710001E-10 Inexact Rounded +dddiv447 divide 1234567891 1 -> 1234567891 +dddiv448 divide 1 1234567891 -> 8.100000067149001E-10 Inexact Rounded +dddiv449 divide 12345678901 1 -> 12345678901 +dddiv450 divide 1 12345678901 -> 8.100000073053901E-11 Inexact Rounded +dddiv451 divide 1234567896 1 -> 1234567896 +dddiv452 divide 1 1234567896 -> 8.100000034344000E-10 Inexact Rounded + +-- high-lows +dddiv453 divide 1e+1 1 -> 1E+1 +dddiv454 divide 1e+1 1.0 -> 1E+1 +dddiv455 divide 1e+1 1.00 -> 1E+1 +dddiv456 divide 1e+2 2 -> 5E+1 +dddiv457 divide 1e+2 2.0 -> 5E+1 +dddiv458 divide 1e+2 2.00 -> 5E+1 + +-- some from IEEE discussions +dddiv460 divide 3e0 2e0 -> 1.5 +dddiv461 divide 30e-1 2e0 -> 1.5 +dddiv462 divide 300e-2 2e0 -> 1.50 +dddiv464 divide 3000e-3 2e0 -> 1.500 +dddiv465 divide 3e0 20e-1 -> 1.5 +dddiv466 divide 30e-1 20e-1 -> 1.5 +dddiv467 divide 300e-2 20e-1 -> 1.5 +dddiv468 divide 3000e-3 20e-1 -> 1.50 +dddiv469 divide 3e0 200e-2 -> 1.5 +dddiv470 divide 30e-1 200e-2 -> 1.5 +dddiv471 divide 300e-2 200e-2 -> 1.5 +dddiv472 divide 3000e-3 200e-2 -> 1.5 +dddiv473 divide 3e0 2000e-3 -> 1.5 +dddiv474 divide 30e-1 2000e-3 -> 1.5 +dddiv475 divide 300e-2 2000e-3 -> 1.5 +dddiv476 divide 3000e-3 2000e-3 -> 1.5 + +-- some reciprocals +dddiv480 divide 1 1.0E+33 -> 1E-33 +dddiv481 divide 1 10E+33 -> 1E-34 +dddiv482 divide 1 1.0E-33 -> 1E+33 +dddiv483 divide 1 10E-33 -> 1E+32 + +-- RMS discussion table +dddiv484 divide 0e5 1e3 -> 0E+2 +dddiv485 divide 0e5 2e3 -> 0E+2 +dddiv486 divide 0e5 10e2 -> 0E+3 +dddiv487 divide 0e5 20e2 -> 0E+3 +dddiv488 divide 0e5 100e1 -> 0E+4 +dddiv489 divide 0e5 200e1 -> 0E+4 + +dddiv491 divide 1e5 1e3 -> 1E+2 +dddiv492 divide 1e5 2e3 -> 5E+1 +dddiv493 divide 1e5 10e2 -> 1E+2 +dddiv494 divide 1e5 20e2 -> 5E+1 +dddiv495 divide 1e5 100e1 -> 1E+2 +dddiv496 divide 1e5 200e1 -> 5E+1 + +-- tryzeros cases +rounding: half_up +dddiv497 divide 0E+380 1000E-13 -> 0E+369 Clamped +dddiv498 divide 0E-390 1000E+13 -> 0E-398 Clamped + +rounding: half_up + +-- focus on trailing zeros issues +dddiv500 divide 1 9.9 -> 0.1010101010101010 Inexact Rounded +dddiv501 divide 1 9.09 -> 0.1100110011001100 Inexact Rounded +dddiv502 divide 1 9.009 -> 0.1110001110001110 Inexact Rounded + +dddiv511 divide 1 2 -> 0.5 +dddiv512 divide 1.0 2 -> 0.5 +dddiv513 divide 1.00 2 -> 0.50 +dddiv514 divide 1.000 2 -> 0.500 +dddiv515 divide 1.0000 2 -> 0.5000 +dddiv516 divide 1.00000 2 -> 0.50000 +dddiv517 divide 1.000000 2 -> 0.500000 +dddiv518 divide 1.0000000 2 -> 0.5000000 +dddiv519 divide 1.00 2.00 -> 0.5 + +dddiv521 divide 2 1 -> 2 +dddiv522 divide 2 1.0 -> 2 +dddiv523 divide 2 1.00 -> 2 +dddiv524 divide 2 1.000 -> 2 +dddiv525 divide 2 1.0000 -> 2 +dddiv526 divide 2 1.00000 -> 2 +dddiv527 divide 2 1.000000 -> 2 +dddiv528 divide 2 1.0000000 -> 2 +dddiv529 divide 2.00 1.00 -> 2 + +dddiv530 divide 2.40 2 -> 1.20 +dddiv531 divide 2.40 4 -> 0.60 +dddiv532 divide 2.40 10 -> 0.24 +dddiv533 divide 2.40 2.0 -> 1.2 +dddiv534 divide 2.40 4.0 -> 0.6 +dddiv535 divide 2.40 10.0 -> 0.24 +dddiv536 divide 2.40 2.00 -> 1.2 +dddiv537 divide 2.40 4.00 -> 0.6 +dddiv538 divide 2.40 10.00 -> 0.24 +dddiv539 divide 0.9 0.1 -> 9 +dddiv540 divide 0.9 0.01 -> 9E+1 +dddiv541 divide 0.9 0.001 -> 9E+2 +dddiv542 divide 5 2 -> 2.5 +dddiv543 divide 5 2.0 -> 2.5 +dddiv544 divide 5 2.00 -> 2.5 +dddiv545 divide 5 20 -> 0.25 +dddiv546 divide 5 20.0 -> 0.25 +dddiv547 divide 2.400 2 -> 1.200 +dddiv548 divide 2.400 2.0 -> 1.20 +dddiv549 divide 2.400 2.400 -> 1 + +dddiv550 divide 240 1 -> 240 +dddiv551 divide 240 10 -> 24 +dddiv552 divide 240 100 -> 2.4 +dddiv553 divide 240 1000 -> 0.24 +dddiv554 divide 2400 1 -> 2400 +dddiv555 divide 2400 10 -> 240 +dddiv556 divide 2400 100 -> 24 +dddiv557 divide 2400 1000 -> 2.4 + +-- +ve exponent +dddiv600 divide 2.4E+9 2 -> 1.2E+9 +dddiv601 divide 2.40E+9 2 -> 1.20E+9 +dddiv602 divide 2.400E+9 2 -> 1.200E+9 +dddiv603 divide 2.4000E+9 2 -> 1.2000E+9 +dddiv604 divide 24E+8 2 -> 1.2E+9 +dddiv605 divide 240E+7 2 -> 1.20E+9 +dddiv606 divide 2400E+6 2 -> 1.200E+9 +dddiv607 divide 24000E+5 2 -> 1.2000E+9 + +-- more zeros, etc. +dddiv731 divide 5.00 1E-3 -> 5.00E+3 +dddiv732 divide 00.00 0.000 -> NaN Division_undefined +dddiv733 divide 00.00 0E-3 -> NaN Division_undefined +dddiv734 divide 0 -0 -> NaN Division_undefined +dddiv735 divide -0 0 -> NaN Division_undefined +dddiv736 divide -0 -0 -> NaN Division_undefined + +dddiv741 divide 0 -1 -> -0 +dddiv742 divide -0 -1 -> 0 +dddiv743 divide 0 1 -> 0 +dddiv744 divide -0 1 -> -0 +dddiv745 divide -1 0 -> -Infinity Division_by_zero +dddiv746 divide -1 -0 -> Infinity Division_by_zero +dddiv747 divide 1 0 -> Infinity Division_by_zero +dddiv748 divide 1 -0 -> -Infinity Division_by_zero + +dddiv751 divide 0.0 -1 -> -0.0 +dddiv752 divide -0.0 -1 -> 0.0 +dddiv753 divide 0.0 1 -> 0.0 +dddiv754 divide -0.0 1 -> -0.0 +dddiv755 divide -1.0 0 -> -Infinity Division_by_zero +dddiv756 divide -1.0 -0 -> Infinity Division_by_zero +dddiv757 divide 1.0 0 -> Infinity Division_by_zero +dddiv758 divide 1.0 -0 -> -Infinity Division_by_zero + +dddiv761 divide 0 -1.0 -> -0E+1 +dddiv762 divide -0 -1.0 -> 0E+1 +dddiv763 divide 0 1.0 -> 0E+1 +dddiv764 divide -0 1.0 -> -0E+1 +dddiv765 divide -1 0.0 -> -Infinity Division_by_zero +dddiv766 divide -1 -0.0 -> Infinity Division_by_zero +dddiv767 divide 1 0.0 -> Infinity Division_by_zero +dddiv768 divide 1 -0.0 -> -Infinity Division_by_zero + +dddiv771 divide 0.0 -1.0 -> -0 +dddiv772 divide -0.0 -1.0 -> 0 +dddiv773 divide 0.0 1.0 -> 0 +dddiv774 divide -0.0 1.0 -> -0 +dddiv775 divide -1.0 0.0 -> -Infinity Division_by_zero +dddiv776 divide -1.0 -0.0 -> Infinity Division_by_zero +dddiv777 divide 1.0 0.0 -> Infinity Division_by_zero +dddiv778 divide 1.0 -0.0 -> -Infinity Division_by_zero + +-- Specials +dddiv780 divide Inf -Inf -> NaN Invalid_operation +dddiv781 divide Inf -1000 -> -Infinity +dddiv782 divide Inf -1 -> -Infinity +dddiv783 divide Inf -0 -> -Infinity +dddiv784 divide Inf 0 -> Infinity +dddiv785 divide Inf 1 -> Infinity +dddiv786 divide Inf 1000 -> Infinity +dddiv787 divide Inf Inf -> NaN Invalid_operation +dddiv788 divide -1000 Inf -> -0E-398 Clamped +dddiv789 divide -Inf Inf -> NaN Invalid_operation +dddiv790 divide -1 Inf -> -0E-398 Clamped +dddiv791 divide -0 Inf -> -0E-398 Clamped +dddiv792 divide 0 Inf -> 0E-398 Clamped +dddiv793 divide 1 Inf -> 0E-398 Clamped +dddiv794 divide 1000 Inf -> 0E-398 Clamped +dddiv795 divide Inf Inf -> NaN Invalid_operation + +dddiv800 divide -Inf -Inf -> NaN Invalid_operation +dddiv801 divide -Inf -1000 -> Infinity +dddiv802 divide -Inf -1 -> Infinity +dddiv803 divide -Inf -0 -> Infinity +dddiv804 divide -Inf 0 -> -Infinity +dddiv805 divide -Inf 1 -> -Infinity +dddiv806 divide -Inf 1000 -> -Infinity +dddiv807 divide -Inf Inf -> NaN Invalid_operation +dddiv808 divide -1000 Inf -> -0E-398 Clamped +dddiv809 divide -Inf -Inf -> NaN Invalid_operation +dddiv810 divide -1 -Inf -> 0E-398 Clamped +dddiv811 divide -0 -Inf -> 0E-398 Clamped +dddiv812 divide 0 -Inf -> -0E-398 Clamped +dddiv813 divide 1 -Inf -> -0E-398 Clamped +dddiv814 divide 1000 -Inf -> -0E-398 Clamped +dddiv815 divide Inf -Inf -> NaN Invalid_operation + +dddiv821 divide NaN -Inf -> NaN +dddiv822 divide NaN -1000 -> NaN +dddiv823 divide NaN -1 -> NaN +dddiv824 divide NaN -0 -> NaN +dddiv825 divide NaN 0 -> NaN +dddiv826 divide NaN 1 -> NaN +dddiv827 divide NaN 1000 -> NaN +dddiv828 divide NaN Inf -> NaN +dddiv829 divide NaN NaN -> NaN +dddiv830 divide -Inf NaN -> NaN +dddiv831 divide -1000 NaN -> NaN +dddiv832 divide -1 NaN -> NaN +dddiv833 divide -0 NaN -> NaN +dddiv834 divide 0 NaN -> NaN +dddiv835 divide 1 NaN -> NaN +dddiv836 divide 1000 NaN -> NaN +dddiv837 divide Inf NaN -> NaN + +dddiv841 divide sNaN -Inf -> NaN Invalid_operation +dddiv842 divide sNaN -1000 -> NaN Invalid_operation +dddiv843 divide sNaN -1 -> NaN Invalid_operation +dddiv844 divide sNaN -0 -> NaN Invalid_operation +dddiv845 divide sNaN 0 -> NaN Invalid_operation +dddiv846 divide sNaN 1 -> NaN Invalid_operation +dddiv847 divide sNaN 1000 -> NaN Invalid_operation +dddiv848 divide sNaN NaN -> NaN Invalid_operation +dddiv849 divide sNaN sNaN -> NaN Invalid_operation +dddiv850 divide NaN sNaN -> NaN Invalid_operation +dddiv851 divide -Inf sNaN -> NaN Invalid_operation +dddiv852 divide -1000 sNaN -> NaN Invalid_operation +dddiv853 divide -1 sNaN -> NaN Invalid_operation +dddiv854 divide -0 sNaN -> NaN Invalid_operation +dddiv855 divide 0 sNaN -> NaN Invalid_operation +dddiv856 divide 1 sNaN -> NaN Invalid_operation +dddiv857 divide 1000 sNaN -> NaN Invalid_operation +dddiv858 divide Inf sNaN -> NaN Invalid_operation +dddiv859 divide NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dddiv861 divide NaN9 -Inf -> NaN9 +dddiv862 divide NaN8 1000 -> NaN8 +dddiv863 divide NaN7 Inf -> NaN7 +dddiv864 divide NaN6 NaN5 -> NaN6 +dddiv865 divide -Inf NaN4 -> NaN4 +dddiv866 divide -1000 NaN3 -> NaN3 +dddiv867 divide Inf NaN2 -> NaN2 + +dddiv871 divide sNaN99 -Inf -> NaN99 Invalid_operation +dddiv872 divide sNaN98 -1 -> NaN98 Invalid_operation +dddiv873 divide sNaN97 NaN -> NaN97 Invalid_operation +dddiv874 divide sNaN96 sNaN94 -> NaN96 Invalid_operation +dddiv875 divide NaN95 sNaN93 -> NaN93 Invalid_operation +dddiv876 divide -Inf sNaN92 -> NaN92 Invalid_operation +dddiv877 divide 0 sNaN91 -> NaN91 Invalid_operation +dddiv878 divide Inf sNaN90 -> NaN90 Invalid_operation +dddiv879 divide NaN sNaN89 -> NaN89 Invalid_operation + +dddiv881 divide -NaN9 -Inf -> -NaN9 +dddiv882 divide -NaN8 1000 -> -NaN8 +dddiv883 divide -NaN7 Inf -> -NaN7 +dddiv884 divide -NaN6 -NaN5 -> -NaN6 +dddiv885 divide -Inf -NaN4 -> -NaN4 +dddiv886 divide -1000 -NaN3 -> -NaN3 +dddiv887 divide Inf -NaN2 -> -NaN2 + +dddiv891 divide -sNaN99 -Inf -> -NaN99 Invalid_operation +dddiv892 divide -sNaN98 -1 -> -NaN98 Invalid_operation +dddiv893 divide -sNaN97 NaN -> -NaN97 Invalid_operation +dddiv894 divide -sNaN96 -sNaN94 -> -NaN96 Invalid_operation +dddiv895 divide -NaN95 -sNaN93 -> -NaN93 Invalid_operation +dddiv896 divide -Inf -sNaN92 -> -NaN92 Invalid_operation +dddiv897 divide 0 -sNaN91 -> -NaN91 Invalid_operation +dddiv898 divide Inf -sNaN90 -> -NaN90 Invalid_operation +dddiv899 divide -NaN -sNaN89 -> -NaN89 Invalid_operation + +-- Various flavours of divide by 0 +dddiv901 divide 0 0 -> NaN Division_undefined +dddiv902 divide 0.0E5 0 -> NaN Division_undefined +dddiv903 divide 0.000 0 -> NaN Division_undefined +dddiv904 divide 0.0001 0 -> Infinity Division_by_zero +dddiv905 divide 0.01 0 -> Infinity Division_by_zero +dddiv906 divide 0.1 0 -> Infinity Division_by_zero +dddiv907 divide 1 0 -> Infinity Division_by_zero +dddiv908 divide 1 0.0 -> Infinity Division_by_zero +dddiv909 divide 10 0.0 -> Infinity Division_by_zero +dddiv910 divide 1E+100 0.0 -> Infinity Division_by_zero +dddiv911 divide 1E+100 0 -> Infinity Division_by_zero + +dddiv921 divide -0.0001 0 -> -Infinity Division_by_zero +dddiv922 divide -0.01 0 -> -Infinity Division_by_zero +dddiv923 divide -0.1 0 -> -Infinity Division_by_zero +dddiv924 divide -1 0 -> -Infinity Division_by_zero +dddiv925 divide -1 0.0 -> -Infinity Division_by_zero +dddiv926 divide -10 0.0 -> -Infinity Division_by_zero +dddiv927 divide -1E+100 0.0 -> -Infinity Division_by_zero +dddiv928 divide -1E+100 0 -> -Infinity Division_by_zero + +dddiv931 divide 0.0001 -0 -> -Infinity Division_by_zero +dddiv932 divide 0.01 -0 -> -Infinity Division_by_zero +dddiv933 divide 0.1 -0 -> -Infinity Division_by_zero +dddiv934 divide 1 -0 -> -Infinity Division_by_zero +dddiv935 divide 1 -0.0 -> -Infinity Division_by_zero +dddiv936 divide 10 -0.0 -> -Infinity Division_by_zero +dddiv937 divide 1E+100 -0.0 -> -Infinity Division_by_zero +dddiv938 divide 1E+100 -0 -> -Infinity Division_by_zero + +dddiv941 divide -0.0001 -0 -> Infinity Division_by_zero +dddiv942 divide -0.01 -0 -> Infinity Division_by_zero +dddiv943 divide -0.1 -0 -> Infinity Division_by_zero +dddiv944 divide -1 -0 -> Infinity Division_by_zero +dddiv945 divide -1 -0.0 -> Infinity Division_by_zero +dddiv946 divide -10 -0.0 -> Infinity Division_by_zero +dddiv947 divide -1E+100 -0.0 -> Infinity Division_by_zero +dddiv948 divide -1E+100 -0 -> Infinity Division_by_zero + +-- Examples from SQL proposal (Krishna Kulkarni) +dddiv1021 divide 1E0 1E0 -> 1 +dddiv1022 divide 1E0 2E0 -> 0.5 +dddiv1023 divide 1E0 3E0 -> 0.3333333333333333 Inexact Rounded +dddiv1024 divide 100E-2 1000E-3 -> 1 +dddiv1025 divide 24E-1 2E0 -> 1.2 +dddiv1026 divide 2400E-3 2E0 -> 1.200 +dddiv1027 divide 5E0 2E0 -> 2.5 +dddiv1028 divide 5E0 20E-1 -> 2.5 +dddiv1029 divide 5E0 2000E-3 -> 2.5 +dddiv1030 divide 5E0 2E-1 -> 25 +dddiv1031 divide 5E0 20E-2 -> 25 +dddiv1032 divide 480E-2 3E0 -> 1.60 +dddiv1033 divide 47E-1 2E0 -> 2.35 + +-- ECMAScript bad examples +rounding: half_down +dddiv1040 divide 5 9 -> 0.5555555555555556 Inexact Rounded +rounding: half_even +dddiv1041 divide 6 11 -> 0.5454545454545455 Inexact Rounded + +-- overflow and underflow tests .. note subnormal results +-- signs +dddiv1051 divide 1e+277 1e-311 -> Infinity Overflow Inexact Rounded +dddiv1052 divide 1e+277 -1e-311 -> -Infinity Overflow Inexact Rounded +dddiv1053 divide -1e+277 1e-311 -> -Infinity Overflow Inexact Rounded +dddiv1054 divide -1e+277 -1e-311 -> Infinity Overflow Inexact Rounded +dddiv1055 divide 1e-277 1e+311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1056 divide 1e-277 -1e+311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1057 divide -1e-277 1e+311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1058 divide -1e-277 -1e+311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dddiv1060 divide 1e-291 1e+101 -> 1E-392 Subnormal +dddiv1061 divide 1e-291 1e+102 -> 1E-393 Subnormal +dddiv1062 divide 1e-291 1e+103 -> 1E-394 Subnormal +dddiv1063 divide 1e-291 1e+104 -> 1E-395 Subnormal +dddiv1064 divide 1e-291 1e+105 -> 1E-396 Subnormal +dddiv1065 divide 1e-291 1e+106 -> 1E-397 Subnormal +dddiv1066 divide 1e-291 1e+107 -> 1E-398 Subnormal +dddiv1067 divide 1e-291 1e+108 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1068 divide 1e-291 1e+109 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1069 divide 1e-291 1e+110 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +dddiv1070 divide 1e+60 1e-321 -> 1.000000000000E+381 Clamped +dddiv1071 divide 1e+60 1e-322 -> 1.0000000000000E+382 Clamped +dddiv1072 divide 1e+60 1e-323 -> 1.00000000000000E+383 Clamped +dddiv1073 divide 1e+60 1e-324 -> 1.000000000000000E+384 Clamped +dddiv1074 divide 1e+60 1e-325 -> Infinity Overflow Inexact Rounded +dddiv1075 divide 1e+60 1e-326 -> Infinity Overflow Inexact Rounded +dddiv1076 divide 1e+60 1e-327 -> Infinity Overflow Inexact Rounded +dddiv1077 divide 1e+60 1e-328 -> Infinity Overflow Inexact Rounded +dddiv1078 divide 1e+60 1e-329 -> Infinity Overflow Inexact Rounded +dddiv1079 divide 1e+60 1e-330 -> Infinity Overflow Inexact Rounded + +dddiv1101 divide 1.0000E-394 1 -> 1.0000E-394 Subnormal +dddiv1102 divide 1.000E-394 1e+1 -> 1.000E-395 Subnormal +dddiv1103 divide 1.00E-394 1e+2 -> 1.00E-396 Subnormal +dddiv1104 divide 1.0E-394 1e+3 -> 1.0E-397 Subnormal +dddiv1105 divide 1.0E-394 1e+4 -> 1E-398 Subnormal Rounded +dddiv1106 divide 1.3E-394 1e+4 -> 1E-398 Underflow Subnormal Inexact Rounded +dddiv1107 divide 1.5E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1108 divide 1.7E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1109 divide 2.3E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1110 divide 2.5E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1111 divide 2.7E-394 1e+4 -> 3E-398 Underflow Subnormal Inexact Rounded +dddiv1112 divide 1.49E-394 1e+4 -> 1E-398 Underflow Subnormal Inexact Rounded +dddiv1113 divide 1.50E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1114 divide 1.51E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1115 divide 2.49E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1116 divide 2.50E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1117 divide 2.51E-394 1e+4 -> 3E-398 Underflow Subnormal Inexact Rounded + +dddiv1118 divide 1E-394 1e+4 -> 1E-398 Subnormal +dddiv1119 divide 3E-394 1e+5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1120 divide 5E-394 1e+5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1121 divide 7E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded +dddiv1122 divide 9E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded +dddiv1123 divide 9.9E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded + +dddiv1124 divide 1E-394 -1e+4 -> -1E-398 Subnormal +dddiv1125 divide 3E-394 -1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1126 divide -5E-394 1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1127 divide 7E-394 -1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded +dddiv1128 divide -9E-394 1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded +dddiv1129 divide 9.9E-394 -1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded +dddiv1130 divide 3.0E-394 -1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped + +dddiv1131 divide 1.0E-199 1e+200 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1132 divide 1.0E-199 1e+199 -> 1E-398 Subnormal Rounded +dddiv1133 divide 1.0E-199 1e+198 -> 1.0E-397 Subnormal +dddiv1134 divide 2.0E-199 2e+198 -> 1.0E-397 Subnormal +dddiv1135 divide 4.0E-199 4e+198 -> 1.0E-397 Subnormal +dddiv1136 divide 10.0E-199 10e+198 -> 1.0E-397 Subnormal +dddiv1137 divide 30.0E-199 30e+198 -> 1.0E-397 Subnormal + +-- randoms +dddiv2010 divide -3.303226714900711E-35 8.796578842713183E+73 -> -3.755126594058783E-109 Inexact Rounded +dddiv2011 divide 933153327821073.6 68782181090246.25 -> 13.56678885475763 Inexact Rounded +dddiv2012 divide 5.04752436057906E-72 -8.179481771238642E+64 -> -6.170958627632835E-137 Inexact Rounded +dddiv2013 divide -3707613309582318 3394911196503.048 -> -1092.109070010836 Inexact Rounded +dddiv2014 divide 99689.0555190461 -4.735208553891464 -> -21052.72753765411 Inexact Rounded +dddiv2015 divide -1447915775613329 269750797.8184875 -> -5367605.164925653 Inexact Rounded +dddiv2016 divide -9.394881304225258E-19 -830585.0252671636 -> 1.131116143251358E-24 Inexact Rounded +dddiv2017 divide -1.056283432738934 88.58754555124013 -> -0.01192361100159352 Inexact Rounded +dddiv2018 divide 5763220933343.081 689089567025052.1 -> 0.008363529516524456 Inexact Rounded +dddiv2019 divide 873819.122103216 9.740612494523300E-49 -> 8.970884763093948E+53 Inexact Rounded +dddiv2020 divide 8022914.838533576 6178.566801742713 -> 1298.507420243583 Inexact Rounded +dddiv2021 divide 203982.7605650363 -2158.283639053435 -> -94.51156320422168 Inexact Rounded +dddiv2022 divide 803.6310547013030 7101143795399.238 -> 1.131692411611166E-10 Inexact Rounded +dddiv2023 divide 9.251697842123399E-82 -1.342350220606119E-7 -> -6.892163982321936E-75 Inexact Rounded +dddiv2024 divide -1.980600645637992E-53 -5.474262753214457E+77 -> 3.618022617703168E-131 Inexact Rounded +dddiv2025 divide -210.0322996351690 -8.580951835872843E+80 -> 2.447657365434971E-79 Inexact Rounded +dddiv2026 divide -1.821980314020370E+85 -3.018915267138165 -> 6.035215144503042E+84 Inexact Rounded +dddiv2027 divide -772264503601.1047 5.158258271408988E-86 -> -1.497141986630614E+97 Inexact Rounded +dddiv2028 divide -767.0532415847106 2.700027228028939E-59 -> -2.840909282772941E+61 Inexact Rounded +dddiv2029 divide 496724.8548250093 7.32700588163100E+66 -> 6.779370220929013E-62 Inexact Rounded +dddiv2030 divide -304232651447703.9 -108.9730808657440 -> 2791814721862.565 Inexact Rounded +dddiv2031 divide -7.233817192699405E+42 -5711302004.149411 -> 1.266579352211430E+33 Inexact Rounded +dddiv2032 divide -9.999221444912745E+96 4010569406446197 -> -2.493217404202250E+81 Inexact Rounded +dddiv2033 divide -1837272.061937622 8.356322838066762 -> -219866.0939196882 Inexact Rounded +dddiv2034 divide 2168.517555606529 209.1910258615061 -> 10.36620737756784 Inexact Rounded +dddiv2035 divide -1.884389790576371E+88 2.95181953870583E+20 -> -6.383824505079828E+67 Inexact Rounded +dddiv2036 divide 732263.6037438196 961222.3634446889 -> 0.7618045850698269 Inexact Rounded +dddiv2037 divide -813461419.0348336 5.376293753809143E+84 -> -1.513052404285927E-76 Inexact Rounded +dddiv2038 divide -45562133508108.50 -9.776843494690107E+51 -> 4.660208945029519E-39 Inexact Rounded +dddiv2039 divide -6.489393172441016E+80 -9101965.097852113 -> 7.129661674897421E+73 Inexact Rounded +dddiv2040 divide 3.694576237117349E+93 6683512.012622003 -> 5.527896456443912E+86 Inexact Rounded +dddiv2041 divide -2.252877726403272E+19 -7451913256.181367 -> 3023220546.125531 Inexact Rounded +dddiv2042 divide 518303.1989111842 50.01587020474133 -> 10362.77479107123 Inexact Rounded +dddiv2043 divide 2.902087881880103E+24 33.32400992305702 -> 8.708699488989578E+22 Inexact Rounded +dddiv2044 divide 549619.4559510557 1660824845196338 -> 3.309316196351104E-10 Inexact Rounded +dddiv2045 divide -6775670774684043 8292152023.077262 -> -817118.4941891062 Inexact Rounded +dddiv2046 divide -77.50923921524079 -5.636882655425815E+74 -> 1.375037302588405E-73 Inexact Rounded +dddiv2047 divide -2.984889459605149E-10 -88106156784122.99 -> 3.387833005721384E-24 Inexact Rounded +dddiv2048 divide 0.949517293997085 44767115.96450998 -> 2.121015110175589E-8 Inexact Rounded +dddiv2049 divide -2760937211.084521 -1087015876975408 -> 0.000002539923537057024 Inexact Rounded +dddiv2050 divide 28438351.85030536 -4.209397904088624E-47 -> -6.755919135770688E+53 Inexact Rounded +dddiv2051 divide -85562731.6820956 -7.166045442530185E+45 -> 1.194002080621542E-38 Inexact Rounded +dddiv2052 divide 2533802852165.25 7154.119606235955 -> 354173957.3317501 Inexact Rounded +dddiv2053 divide -8858831346851.474 97.59734208801716 -> -90769186509.83577 Inexact Rounded +dddiv2054 divide 176783629801387.5 840073263.3109817 -> 210438.3480848206 Inexact Rounded +dddiv2055 divide -493506471796175.6 79733894790822.03 -> -6.189418854940746 Inexact Rounded +dddiv2056 divide 790.1682542103445 829.9449370367435 -> 0.9520731062371214 Inexact Rounded +dddiv2057 divide -8920459838.583164 -4767.889187899214 -> 1870945.294035581 Inexact Rounded +dddiv2058 divide 53536687164422.1 53137.5007032689 -> 1007512330.385698 Inexact Rounded +dddiv2059 divide 4.051532311146561E-74 -2.343089768972261E+94 -> -1.729140882606332E-168 Inexact Rounded +dddiv2060 divide -14847758778636.88 3.062543516383807E-43 -> -4.848178874587497E+55 Inexact Rounded + +-- Division probably has pre-rounding, so need to test rounding +-- explicitly rather than assume included through other tests; +-- tests include simple rounding and also the tricky cases of sticky +-- bits following two zeros +-- +-- 1/99999 gives 0.0000100001000010000100001000010000100001 +-- 1234567890123456 +-- +-- 1/999999 gives 0.000001000001000001000001000001000001000001 +-- 1234567890123456 + +rounding: ceiling +dddiv3001 divide 1 3 -> 0.3333333333333334 Inexact Rounded +dddiv3002 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3003 divide 1 99999 -> 0.00001000010000100002 Inexact Rounded +dddiv3004 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded + +rounding: floor +dddiv3011 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3012 divide 2 3 -> 0.6666666666666666 Inexact Rounded +dddiv3013 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3014 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: up +dddiv3021 divide 1 3 -> 0.3333333333333334 Inexact Rounded +dddiv3022 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3023 divide 1 99999 -> 0.00001000010000100002 Inexact Rounded +dddiv3024 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded + +rounding: down +dddiv3031 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3032 divide 2 3 -> 0.6666666666666666 Inexact Rounded +dddiv3033 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3034 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: half_up +dddiv3041 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3042 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3043 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3044 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: half_down +dddiv3051 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3052 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3053 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3054 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: half_even +dddiv3061 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3062 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3063 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3064 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: 05up +dddiv3071 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3072 divide 2 3 -> 0.6666666666666666 Inexact Rounded +dddiv3073 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3074 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded + +-- random divide tests with result near 1 +rounding: half_even +dddiv4001 divide 3195385192916917 3195385192946695 -> 0.9999999999906809 Inexact Rounded +dddiv4002 divide 1393723067526993 1393723067519475 -> 1.000000000005394 Inexact Rounded +dddiv4003 divide 759985543702302 759985543674015 -> 1.000000000037220 Inexact Rounded +dddiv4004 divide 9579158456027302 9579158456036864 -> 0.9999999999990018 Inexact Rounded +dddiv4005 divide 7079398299143569 7079398299156904 -> 0.9999999999981164 Inexact Rounded +dddiv4006 divide 6636169255366598 6636169255336386 -> 1.000000000004553 Inexact Rounded +dddiv4007 divide 6964813971340090 6964813971321554 -> 1.000000000002661 Inexact Rounded +dddiv4008 divide 4182275225480784 4182275225454009 -> 1.000000000006402 Inexact Rounded +dddiv4009 divide 9228325124938029 9228325124918730 -> 1.000000000002091 Inexact Rounded +dddiv4010 divide 3428346338630192 3428346338609843 -> 1.000000000005936 Inexact Rounded +dddiv4011 divide 2143511550722893 2143511550751754 -> 0.9999999999865356 Inexact Rounded +dddiv4012 divide 1672732924396785 1672732924401811 -> 0.9999999999969953 Inexact Rounded +dddiv4013 divide 4190714611948216 4190714611948664 -> 0.9999999999998931 Inexact Rounded +dddiv4014 divide 3942254800848877 3942254800814556 -> 1.000000000008706 Inexact Rounded +dddiv4015 divide 2854459826952334 2854459826960762 -> 0.9999999999970474 Inexact Rounded +dddiv4016 divide 2853258953664731 2853258953684471 -> 0.9999999999930816 Inexact Rounded +dddiv4017 divide 9453512638125978 9453512638146425 -> 0.9999999999978371 Inexact Rounded +dddiv4018 divide 339476633940369 339476633912887 -> 1.000000000080954 Inexact Rounded +dddiv4019 divide 4542181492688467 4542181492697735 -> 0.9999999999979596 Inexact Rounded +dddiv4020 divide 7312600192399197 7312600192395424 -> 1.000000000000516 Inexact Rounded +dddiv4021 divide 1811674985570111 1811674985603935 -> 0.9999999999813300 Inexact Rounded +dddiv4022 divide 1706462639003481 1706462639017740 -> 0.9999999999916441 Inexact Rounded +dddiv4023 divide 6697052654940368 6697052654934110 -> 1.000000000000934 Inexact Rounded +dddiv4024 divide 5015283664277539 5015283664310719 -> 0.9999999999933842 Inexact Rounded +dddiv4025 divide 2359501561537464 2359501561502464 -> 1.000000000014834 Inexact Rounded +dddiv4026 divide 2669850227909157 2669850227901548 -> 1.000000000002850 Inexact Rounded +dddiv4027 divide 9329725546974648 9329725547002445 -> 0.9999999999970206 Inexact Rounded +dddiv4028 divide 3228562867071248 3228562867106206 -> 0.9999999999891723 Inexact Rounded +dddiv4029 divide 4862226644921175 4862226644909380 -> 1.000000000002426 Inexact Rounded +dddiv4030 divide 1022267997054529 1022267997071329 -> 0.9999999999835660 Inexact Rounded +dddiv4031 divide 1048777482023719 1048777482000948 -> 1.000000000021712 Inexact Rounded +dddiv4032 divide 9980113777337098 9980113777330539 -> 1.000000000000657 Inexact Rounded +dddiv4033 divide 7506839167963908 7506839167942901 -> 1.000000000002798 Inexact Rounded +dddiv4034 divide 231119751977860 231119751962453 -> 1.000000000066662 Inexact Rounded +dddiv4035 divide 4034903664762962 4034903664795526 -> 0.9999999999919294 Inexact Rounded +dddiv4036 divide 5700122152274696 5700122152251386 -> 1.000000000004089 Inexact Rounded +dddiv4037 divide 6869599590293110 6869599590293495 -> 0.9999999999999440 Inexact Rounded +dddiv4038 divide 5576281960092797 5576281960105579 -> 0.9999999999977078 Inexact Rounded +dddiv4039 divide 2304844888381318 2304844888353073 -> 1.000000000012255 Inexact Rounded +dddiv4040 divide 3265933651656452 3265933651682779 -> 0.9999999999919389 Inexact Rounded +dddiv4041 divide 5235714985079914 5235714985066131 -> 1.000000000002632 Inexact Rounded +dddiv4042 divide 5578481572827551 5578481572822945 -> 1.000000000000826 Inexact Rounded +dddiv4043 divide 4909616081396134 4909616081373076 -> 1.000000000004696 Inexact Rounded +dddiv4044 divide 636447224349537 636447224338757 -> 1.000000000016938 Inexact Rounded +dddiv4045 divide 1539373428396640 1539373428364727 -> 1.000000000020731 Inexact Rounded +dddiv4046 divide 2028786707377893 2028786707378866 -> 0.9999999999995204 Inexact Rounded +dddiv4047 divide 137643260486222 137643260487419 -> 0.9999999999913036 Inexact Rounded +dddiv4048 divide 247451519746765 247451519752267 -> 0.9999999999777653 Inexact Rounded +dddiv4049 divide 7877858475022054 7877858474999794 -> 1.000000000002826 Inexact Rounded +dddiv4050 divide 7333242694766258 7333242694744628 -> 1.000000000002950 Inexact Rounded +dddiv4051 divide 124051503698592 124051503699397 -> 0.9999999999935108 Inexact Rounded +dddiv4052 divide 8944737432385188 8944737432406860 -> 0.9999999999975771 Inexact Rounded +dddiv4053 divide 9883948923406874 9883948923424843 -> 0.9999999999981820 Inexact Rounded +dddiv4054 divide 6829178741654284 6829178741671973 -> 0.9999999999974098 Inexact Rounded +dddiv4055 divide 7342752479768122 7342752479793385 -> 0.9999999999965595 Inexact Rounded +dddiv4056 divide 8066426579008783 8066426578977563 -> 1.000000000003870 Inexact Rounded +dddiv4057 divide 8992775071383295 8992775071352712 -> 1.000000000003401 Inexact Rounded +dddiv4058 divide 5485011755545641 5485011755543611 -> 1.000000000000370 Inexact Rounded +dddiv4059 divide 5779983054353918 5779983054365300 -> 0.9999999999980308 Inexact Rounded +dddiv4060 divide 9502265102713774 9502265102735208 -> 0.9999999999977443 Inexact Rounded +dddiv4061 divide 2109558399130981 2109558399116281 -> 1.000000000006968 Inexact Rounded +dddiv4062 divide 5296182636350471 5296182636351521 -> 0.9999999999998017 Inexact Rounded +dddiv4063 divide 1440019225591883 1440019225601844 -> 0.9999999999930827 Inexact Rounded +dddiv4064 divide 8182110791881341 8182110791847174 -> 1.000000000004176 Inexact Rounded +dddiv4065 divide 489098235512060 489098235534516 -> 0.9999999999540869 Inexact Rounded +dddiv4066 divide 6475687084782038 6475687084756089 -> 1.000000000004007 Inexact Rounded +dddiv4067 divide 8094348555736948 8094348555759236 -> 0.9999999999972465 Inexact Rounded +dddiv4068 divide 1982766816291543 1982766816309463 -> 0.9999999999909621 Inexact Rounded +dddiv4069 divide 9277314300113251 9277314300084467 -> 1.000000000003103 Inexact Rounded +dddiv4070 divide 4335532959318934 4335532959293167 -> 1.000000000005943 Inexact Rounded +dddiv4071 divide 7767113032981348 7767113032968132 -> 1.000000000001702 Inexact Rounded +dddiv4072 divide 1578548053342868 1578548053370448 -> 0.9999999999825282 Inexact Rounded +dddiv4073 divide 3790420686666898 3790420686636315 -> 1.000000000008068 Inexact Rounded +dddiv4074 divide 871682421955147 871682421976441 -> 0.9999999999755714 Inexact Rounded +dddiv4075 divide 744141054479940 744141054512329 -> 0.9999999999564746 Inexact Rounded +dddiv4076 divide 8956824183670735 8956824183641741 -> 1.000000000003237 Inexact Rounded +dddiv4077 divide 8337291694485682 8337291694451193 -> 1.000000000004137 Inexact Rounded +dddiv4078 divide 4107775944683669 4107775944657097 -> 1.000000000006469 Inexact Rounded +dddiv4079 divide 8691900057964648 8691900057997555 -> 0.9999999999962141 Inexact Rounded +dddiv4080 divide 2229528520536462 2229528520502337 -> 1.000000000015306 Inexact Rounded +dddiv4081 divide 398442083774322 398442083746273 -> 1.000000000070397 Inexact Rounded +dddiv4082 divide 5319819776808759 5319819776838313 -> 0.9999999999944445 Inexact Rounded +dddiv4083 divide 7710491299066855 7710491299041858 -> 1.000000000003242 Inexact Rounded +dddiv4084 divide 9083231296087266 9083231296058160 -> 1.000000000003204 Inexact Rounded +dddiv4085 divide 3566873574904559 3566873574890328 -> 1.000000000003990 Inexact Rounded +dddiv4086 divide 596343290550525 596343290555614 -> 0.9999999999914663 Inexact Rounded +dddiv4087 divide 278227925093192 278227925068104 -> 1.000000000090171 Inexact Rounded +dddiv4088 divide 3292902958490649 3292902958519881 -> 0.9999999999911227 Inexact Rounded +dddiv4089 divide 5521871364245881 5521871364229536 -> 1.000000000002960 Inexact Rounded +dddiv4090 divide 2406505602883617 2406505602857997 -> 1.000000000010646 Inexact Rounded +dddiv4091 divide 7741146984869208 7741146984867255 -> 1.000000000000252 Inexact Rounded +dddiv4092 divide 4576041832414909 4576041832405102 -> 1.000000000002143 Inexact Rounded +dddiv4093 divide 9183756982878057 9183756982901934 -> 0.9999999999974001 Inexact Rounded +dddiv4094 divide 6215736513855159 6215736513870342 -> 0.9999999999975573 Inexact Rounded +dddiv4095 divide 248554968534533 248554968551417 -> 0.9999999999320714 Inexact Rounded +dddiv4096 divide 376314165668645 376314165659755 -> 1.000000000023624 Inexact Rounded +dddiv4097 divide 5513569249809718 5513569249808906 -> 1.000000000000147 Inexact Rounded +dddiv4098 divide 3367992242167904 3367992242156228 -> 1.000000000003467 Inexact Rounded +dddiv4099 divide 6134869538966967 6134869538985986 -> 0.9999999999968999 Inexact Rounded + +-- Null tests +dddiv9998 divide 10 # -> NaN Invalid_operation +dddiv9999 divide # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddDivideInt.decTest b/Lib/test/decimaltestdata/ddDivideInt.decTest index 342d13041b1..1c397ce1417 100644 --- a/Lib/test/decimaltestdata/ddDivideInt.decTest +++ b/Lib/test/decimaltestdata/ddDivideInt.decTest @@ -1,449 +1,449 @@ ------------------------------------------------------------------------- --- ddDivideInt.decTest -- decDouble integer division -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -dddvi001 divideint 1 1 -> 1 -dddvi002 divideint 2 1 -> 2 -dddvi003 divideint 1 2 -> 0 -dddvi004 divideint 2 2 -> 1 -dddvi005 divideint 0 1 -> 0 -dddvi006 divideint 0 2 -> 0 -dddvi007 divideint 1 3 -> 0 -dddvi008 divideint 2 3 -> 0 -dddvi009 divideint 3 3 -> 1 - -dddvi010 divideint 2.4 1 -> 2 -dddvi011 divideint 2.4 -1 -> -2 -dddvi012 divideint -2.4 1 -> -2 -dddvi013 divideint -2.4 -1 -> 2 -dddvi014 divideint 2.40 1 -> 2 -dddvi015 divideint 2.400 1 -> 2 -dddvi016 divideint 2.4 2 -> 1 -dddvi017 divideint 2.400 2 -> 1 -dddvi018 divideint 2. 2 -> 1 -dddvi019 divideint 20 20 -> 1 - -dddvi020 divideint 187 187 -> 1 -dddvi021 divideint 5 2 -> 2 -dddvi022 divideint 5 2.0 -> 2 -dddvi023 divideint 5 2.000 -> 2 -dddvi024 divideint 5 0.200 -> 25 -dddvi025 divideint 5 0.200 -> 25 - -dddvi030 divideint 1 2 -> 0 -dddvi031 divideint 1 4 -> 0 -dddvi032 divideint 1 8 -> 0 -dddvi033 divideint 1 16 -> 0 -dddvi034 divideint 1 32 -> 0 -dddvi035 divideint 1 64 -> 0 -dddvi040 divideint 1 -2 -> -0 -dddvi041 divideint 1 -4 -> -0 -dddvi042 divideint 1 -8 -> -0 -dddvi043 divideint 1 -16 -> -0 -dddvi044 divideint 1 -32 -> -0 -dddvi045 divideint 1 -64 -> -0 -dddvi050 divideint -1 2 -> -0 -dddvi051 divideint -1 4 -> -0 -dddvi052 divideint -1 8 -> -0 -dddvi053 divideint -1 16 -> -0 -dddvi054 divideint -1 32 -> -0 -dddvi055 divideint -1 64 -> -0 -dddvi060 divideint -1 -2 -> 0 -dddvi061 divideint -1 -4 -> 0 -dddvi062 divideint -1 -8 -> 0 -dddvi063 divideint -1 -16 -> 0 -dddvi064 divideint -1 -32 -> 0 -dddvi065 divideint -1 -64 -> 0 - --- similar with powers of ten -dddvi160 divideint 1 1 -> 1 -dddvi161 divideint 1 10 -> 0 -dddvi162 divideint 1 100 -> 0 -dddvi163 divideint 1 1000 -> 0 -dddvi164 divideint 1 10000 -> 0 -dddvi165 divideint 1 100000 -> 0 -dddvi166 divideint 1 1000000 -> 0 -dddvi167 divideint 1 10000000 -> 0 -dddvi168 divideint 1 100000000 -> 0 -dddvi170 divideint 1 -1 -> -1 -dddvi171 divideint 1 -10 -> -0 -dddvi172 divideint 1 -100 -> -0 -dddvi173 divideint 1 -1000 -> -0 -dddvi174 divideint 1 -10000 -> -0 -dddvi175 divideint 1 -100000 -> -0 -dddvi176 divideint 1 -1000000 -> -0 -dddvi177 divideint 1 -10000000 -> -0 -dddvi178 divideint 1 -100000000 -> -0 -dddvi180 divideint -1 1 -> -1 -dddvi181 divideint -1 10 -> -0 -dddvi182 divideint -1 100 -> -0 -dddvi183 divideint -1 1000 -> -0 -dddvi184 divideint -1 10000 -> -0 -dddvi185 divideint -1 100000 -> -0 -dddvi186 divideint -1 1000000 -> -0 -dddvi187 divideint -1 10000000 -> -0 -dddvi188 divideint -1 100000000 -> -0 -dddvi190 divideint -1 -1 -> 1 -dddvi191 divideint -1 -10 -> 0 -dddvi192 divideint -1 -100 -> 0 -dddvi193 divideint -1 -1000 -> 0 -dddvi194 divideint -1 -10000 -> 0 -dddvi195 divideint -1 -100000 -> 0 -dddvi196 divideint -1 -1000000 -> 0 -dddvi197 divideint -1 -10000000 -> 0 -dddvi198 divideint -1 -100000000 -> 0 - --- some long operand (at p=9) cases -dddvi070 divideint 999999999 1 -> 999999999 -dddvi071 divideint 999999999.4 1 -> 999999999 -dddvi072 divideint 999999999.5 1 -> 999999999 -dddvi073 divideint 999999999.9 1 -> 999999999 -dddvi074 divideint 999999999.999 1 -> 999999999 - -dddvi090 divideint 0. 1 -> 0 -dddvi091 divideint .0 1 -> 0 -dddvi092 divideint 0.00 1 -> 0 -dddvi093 divideint 0.00E+9 1 -> 0 -dddvi094 divideint 0.0000E-50 1 -> 0 - -dddvi100 divideint 1 1 -> 1 -dddvi101 divideint 1 2 -> 0 -dddvi102 divideint 1 3 -> 0 -dddvi103 divideint 1 4 -> 0 -dddvi104 divideint 1 5 -> 0 -dddvi105 divideint 1 6 -> 0 -dddvi106 divideint 1 7 -> 0 -dddvi107 divideint 1 8 -> 0 -dddvi108 divideint 1 9 -> 0 -dddvi109 divideint 1 10 -> 0 -dddvi110 divideint 1 1 -> 1 -dddvi111 divideint 2 1 -> 2 -dddvi112 divideint 3 1 -> 3 -dddvi113 divideint 4 1 -> 4 -dddvi114 divideint 5 1 -> 5 -dddvi115 divideint 6 1 -> 6 -dddvi116 divideint 7 1 -> 7 -dddvi117 divideint 8 1 -> 8 -dddvi118 divideint 9 1 -> 9 -dddvi119 divideint 10 1 -> 10 - --- from DiagBigDecimal -dddvi131 divideint 101.3 1 -> 101 -dddvi132 divideint 101.0 1 -> 101 -dddvi133 divideint 101.3 3 -> 33 -dddvi134 divideint 101.0 3 -> 33 -dddvi135 divideint 2.4 1 -> 2 -dddvi136 divideint 2.400 1 -> 2 -dddvi137 divideint 18 18 -> 1 -dddvi138 divideint 1120 1000 -> 1 -dddvi139 divideint 2.4 2 -> 1 -dddvi140 divideint 2.400 2 -> 1 -dddvi141 divideint 0.5 2.000 -> 0 -dddvi142 divideint 8.005 7 -> 1 -dddvi143 divideint 5 2 -> 2 -dddvi144 divideint 0 2 -> 0 -dddvi145 divideint 0.00 2 -> 0 - --- Others -dddvi150 divideint 12345 4.999 -> 2469 -dddvi151 divideint 12345 4.99 -> 2473 -dddvi152 divideint 12345 4.9 -> 2519 -dddvi153 divideint 12345 5 -> 2469 -dddvi154 divideint 12345 5.1 -> 2420 -dddvi155 divideint 12345 5.01 -> 2464 -dddvi156 divideint 12345 5.001 -> 2468 -dddvi157 divideint 101 7.6 -> 13 - --- Various flavours of divideint by 0 -dddvi201 divideint 0 0 -> NaN Division_undefined -dddvi202 divideint 0.0E5 0 -> NaN Division_undefined -dddvi203 divideint 0.000 0 -> NaN Division_undefined -dddvi204 divideint 0.0001 0 -> Infinity Division_by_zero -dddvi205 divideint 0.01 0 -> Infinity Division_by_zero -dddvi206 divideint 0.1 0 -> Infinity Division_by_zero -dddvi207 divideint 1 0 -> Infinity Division_by_zero -dddvi208 divideint 1 0.0 -> Infinity Division_by_zero -dddvi209 divideint 10 0.0 -> Infinity Division_by_zero -dddvi210 divideint 1E+100 0.0 -> Infinity Division_by_zero -dddvi211 divideint 1E+380 0 -> Infinity Division_by_zero -dddvi214 divideint -0.0001 0 -> -Infinity Division_by_zero -dddvi215 divideint -0.01 0 -> -Infinity Division_by_zero -dddvi216 divideint -0.1 0 -> -Infinity Division_by_zero -dddvi217 divideint -1 0 -> -Infinity Division_by_zero -dddvi218 divideint -1 0.0 -> -Infinity Division_by_zero -dddvi219 divideint -10 0.0 -> -Infinity Division_by_zero -dddvi220 divideint -1E+100 0.0 -> -Infinity Division_by_zero -dddvi221 divideint -1E+380 0 -> -Infinity Division_by_zero - --- test some cases that are close to exponent overflow -dddvi270 divideint 1 1e384 -> 0 -dddvi271 divideint 1 0.9e384 -> 0 -dddvi272 divideint 1 0.99e384 -> 0 -dddvi273 divideint 1 0.9999999999999999e384 -> 0 -dddvi274 divideint 9e384 1 -> NaN Division_impossible -dddvi275 divideint 9.9e384 1 -> NaN Division_impossible -dddvi276 divideint 9.99e384 1 -> NaN Division_impossible -dddvi277 divideint 9.999999999999999e384 1 -> NaN Division_impossible - -dddvi280 divideint 0.1 9e-383 -> NaN Division_impossible -dddvi281 divideint 0.1 99e-383 -> NaN Division_impossible -dddvi282 divideint 0.1 999e-383 -> NaN Division_impossible -dddvi283 divideint 0.1 9e-382 -> NaN Division_impossible -dddvi284 divideint 0.1 99e-382 -> NaN Division_impossible - --- GD edge cases: lhs smaller than rhs but more digits -dddvi301 divideint 0.9 2 -> 0 -dddvi302 divideint 0.9 2.0 -> 0 -dddvi303 divideint 0.9 2.1 -> 0 -dddvi304 divideint 0.9 2.00 -> 0 -dddvi305 divideint 0.9 2.01 -> 0 -dddvi306 divideint 0.12 1 -> 0 -dddvi307 divideint 0.12 1.0 -> 0 -dddvi308 divideint 0.12 1.00 -> 0 -dddvi309 divideint 0.12 1.0 -> 0 -dddvi310 divideint 0.12 1.00 -> 0 -dddvi311 divideint 0.12 2 -> 0 -dddvi312 divideint 0.12 2.0 -> 0 -dddvi313 divideint 0.12 2.1 -> 0 -dddvi314 divideint 0.12 2.00 -> 0 -dddvi315 divideint 0.12 2.01 -> 0 - --- edge cases of impossible -dddvi330 divideint 1234567890123456 10 -> 123456789012345 -dddvi331 divideint 1234567890123456 1 -> 1234567890123456 -dddvi332 divideint 1234567890123456 0.1 -> NaN Division_impossible -dddvi333 divideint 1234567890123456 0.01 -> NaN Division_impossible - --- overflow and underflow tests [from divide] -dddvi1051 divideint 1e+277 1e-311 -> NaN Division_impossible -dddvi1052 divideint 1e+277 -1e-311 -> NaN Division_impossible -dddvi1053 divideint -1e+277 1e-311 -> NaN Division_impossible -dddvi1054 divideint -1e+277 -1e-311 -> NaN Division_impossible -dddvi1055 divideint 1e-277 1e+311 -> 0 -dddvi1056 divideint 1e-277 -1e+311 -> -0 -dddvi1057 divideint -1e-277 1e+311 -> -0 -dddvi1058 divideint -1e-277 -1e+311 -> 0 - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dddvi1060 divideint 1e-291 1e+101 -> 0 -dddvi1061 divideint 1e-291 1e+102 -> 0 -dddvi1062 divideint 1e-291 1e+103 -> 0 -dddvi1063 divideint 1e-291 1e+104 -> 0 -dddvi1064 divideint 1e-291 1e+105 -> 0 -dddvi1065 divideint 1e-291 1e+106 -> 0 -dddvi1066 divideint 1e-291 1e+107 -> 0 -dddvi1067 divideint 1e-291 1e+108 -> 0 -dddvi1068 divideint 1e-291 1e+109 -> 0 -dddvi1069 divideint 1e-291 1e+110 -> 0 - -dddvi1101 divideint 1.0000E-394 1 -> 0 -dddvi1102 divideint 1.000E-394 1e+1 -> 0 -dddvi1103 divideint 1.00E-394 1e+2 -> 0 - -dddvi1118 divideint 1E-394 1e+4 -> 0 -dddvi1119 divideint 3E-394 -1e+5 -> -0 -dddvi1120 divideint 5E-394 1e+5 -> 0 - -dddvi1124 divideint 1E-394 -1e+4 -> -0 -dddvi1130 divideint 3.0E-394 -1e+5 -> -0 - -dddvi1131 divideint 1.0E-199 1e+200 -> 0 -dddvi1132 divideint 1.0E-199 1e+199 -> 0 -dddvi1133 divideint 1.0E-199 1e+198 -> 0 -dddvi1134 divideint 2.0E-199 2e+198 -> 0 -dddvi1135 divideint 4.0E-199 4e+198 -> 0 - --- long operand checks -dddvi401 divideint 12345678000 100 -> 123456780 -dddvi402 divideint 1 12345678000 -> 0 -dddvi403 divideint 1234567800 10 -> 123456780 -dddvi404 divideint 1 1234567800 -> 0 -dddvi405 divideint 1234567890 10 -> 123456789 -dddvi406 divideint 1 1234567890 -> 0 -dddvi407 divideint 1234567891 10 -> 123456789 -dddvi408 divideint 1 1234567891 -> 0 -dddvi409 divideint 12345678901 100 -> 123456789 -dddvi410 divideint 1 12345678901 -> 0 -dddvi411 divideint 1234567896 10 -> 123456789 -dddvi412 divideint 1 1234567896 -> 0 -dddvi413 divideint 12345678948 100 -> 123456789 -dddvi414 divideint 12345678949 100 -> 123456789 -dddvi415 divideint 12345678950 100 -> 123456789 -dddvi416 divideint 12345678951 100 -> 123456789 -dddvi417 divideint 12345678999 100 -> 123456789 -dddvi441 divideint 12345678000 1 -> 12345678000 -dddvi442 divideint 1 12345678000 -> 0 -dddvi443 divideint 1234567800 1 -> 1234567800 -dddvi444 divideint 1 1234567800 -> 0 -dddvi445 divideint 1234567890 1 -> 1234567890 -dddvi446 divideint 1 1234567890 -> 0 -dddvi447 divideint 1234567891 1 -> 1234567891 -dddvi448 divideint 1 1234567891 -> 0 -dddvi449 divideint 12345678901 1 -> 12345678901 -dddvi450 divideint 1 12345678901 -> 0 -dddvi451 divideint 1234567896 1 -> 1234567896 -dddvi452 divideint 1 1234567896 -> 0 - --- more zeros, etc. -dddvi531 divideint 5.00 1E-3 -> 5000 -dddvi532 divideint 00.00 0.000 -> NaN Division_undefined -dddvi533 divideint 00.00 0E-3 -> NaN Division_undefined -dddvi534 divideint 0 -0 -> NaN Division_undefined -dddvi535 divideint -0 0 -> NaN Division_undefined -dddvi536 divideint -0 -0 -> NaN Division_undefined - -dddvi541 divideint 0 -1 -> -0 -dddvi542 divideint -0 -1 -> 0 -dddvi543 divideint 0 1 -> 0 -dddvi544 divideint -0 1 -> -0 -dddvi545 divideint -1 0 -> -Infinity Division_by_zero -dddvi546 divideint -1 -0 -> Infinity Division_by_zero -dddvi547 divideint 1 0 -> Infinity Division_by_zero -dddvi548 divideint 1 -0 -> -Infinity Division_by_zero - -dddvi551 divideint 0.0 -1 -> -0 -dddvi552 divideint -0.0 -1 -> 0 -dddvi553 divideint 0.0 1 -> 0 -dddvi554 divideint -0.0 1 -> -0 -dddvi555 divideint -1.0 0 -> -Infinity Division_by_zero -dddvi556 divideint -1.0 -0 -> Infinity Division_by_zero -dddvi557 divideint 1.0 0 -> Infinity Division_by_zero -dddvi558 divideint 1.0 -0 -> -Infinity Division_by_zero - -dddvi561 divideint 0 -1.0 -> -0 -dddvi562 divideint -0 -1.0 -> 0 -dddvi563 divideint 0 1.0 -> 0 -dddvi564 divideint -0 1.0 -> -0 -dddvi565 divideint -1 0.0 -> -Infinity Division_by_zero -dddvi566 divideint -1 -0.0 -> Infinity Division_by_zero -dddvi567 divideint 1 0.0 -> Infinity Division_by_zero -dddvi568 divideint 1 -0.0 -> -Infinity Division_by_zero - -dddvi571 divideint 0.0 -1.0 -> -0 -dddvi572 divideint -0.0 -1.0 -> 0 -dddvi573 divideint 0.0 1.0 -> 0 -dddvi574 divideint -0.0 1.0 -> -0 -dddvi575 divideint -1.0 0.0 -> -Infinity Division_by_zero -dddvi576 divideint -1.0 -0.0 -> Infinity Division_by_zero -dddvi577 divideint 1.0 0.0 -> Infinity Division_by_zero -dddvi578 divideint 1.0 -0.0 -> -Infinity Division_by_zero - --- Specials -dddvi580 divideint Inf -Inf -> NaN Invalid_operation -dddvi581 divideint Inf -1000 -> -Infinity -dddvi582 divideint Inf -1 -> -Infinity -dddvi583 divideint Inf -0 -> -Infinity -dddvi584 divideint Inf 0 -> Infinity -dddvi585 divideint Inf 1 -> Infinity -dddvi586 divideint Inf 1000 -> Infinity -dddvi587 divideint Inf Inf -> NaN Invalid_operation -dddvi588 divideint -1000 Inf -> -0 -dddvi589 divideint -Inf Inf -> NaN Invalid_operation -dddvi590 divideint -1 Inf -> -0 -dddvi591 divideint -0 Inf -> -0 -dddvi592 divideint 0 Inf -> 0 -dddvi593 divideint 1 Inf -> 0 -dddvi594 divideint 1000 Inf -> 0 -dddvi595 divideint Inf Inf -> NaN Invalid_operation - -dddvi600 divideint -Inf -Inf -> NaN Invalid_operation -dddvi601 divideint -Inf -1000 -> Infinity -dddvi602 divideint -Inf -1 -> Infinity -dddvi603 divideint -Inf -0 -> Infinity -dddvi604 divideint -Inf 0 -> -Infinity -dddvi605 divideint -Inf 1 -> -Infinity -dddvi606 divideint -Inf 1000 -> -Infinity -dddvi607 divideint -Inf Inf -> NaN Invalid_operation -dddvi608 divideint -1000 Inf -> -0 -dddvi609 divideint -Inf -Inf -> NaN Invalid_operation -dddvi610 divideint -1 -Inf -> 0 -dddvi611 divideint -0 -Inf -> 0 -dddvi612 divideint 0 -Inf -> -0 -dddvi613 divideint 1 -Inf -> -0 -dddvi614 divideint 1000 -Inf -> -0 -dddvi615 divideint Inf -Inf -> NaN Invalid_operation - -dddvi621 divideint NaN -Inf -> NaN -dddvi622 divideint NaN -1000 -> NaN -dddvi623 divideint NaN -1 -> NaN -dddvi624 divideint NaN -0 -> NaN -dddvi625 divideint NaN 0 -> NaN -dddvi626 divideint NaN 1 -> NaN -dddvi627 divideint NaN 1000 -> NaN -dddvi628 divideint NaN Inf -> NaN -dddvi629 divideint NaN NaN -> NaN -dddvi630 divideint -Inf NaN -> NaN -dddvi631 divideint -1000 NaN -> NaN -dddvi632 divideint -1 NaN -> NaN -dddvi633 divideint -0 NaN -> NaN -dddvi634 divideint 0 NaN -> NaN -dddvi635 divideint 1 NaN -> NaN -dddvi636 divideint 1000 NaN -> NaN -dddvi637 divideint Inf NaN -> NaN - -dddvi641 divideint sNaN -Inf -> NaN Invalid_operation -dddvi642 divideint sNaN -1000 -> NaN Invalid_operation -dddvi643 divideint sNaN -1 -> NaN Invalid_operation -dddvi644 divideint sNaN -0 -> NaN Invalid_operation -dddvi645 divideint sNaN 0 -> NaN Invalid_operation -dddvi646 divideint sNaN 1 -> NaN Invalid_operation -dddvi647 divideint sNaN 1000 -> NaN Invalid_operation -dddvi648 divideint sNaN NaN -> NaN Invalid_operation -dddvi649 divideint sNaN sNaN -> NaN Invalid_operation -dddvi650 divideint NaN sNaN -> NaN Invalid_operation -dddvi651 divideint -Inf sNaN -> NaN Invalid_operation -dddvi652 divideint -1000 sNaN -> NaN Invalid_operation -dddvi653 divideint -1 sNaN -> NaN Invalid_operation -dddvi654 divideint -0 sNaN -> NaN Invalid_operation -dddvi655 divideint 0 sNaN -> NaN Invalid_operation -dddvi656 divideint 1 sNaN -> NaN Invalid_operation -dddvi657 divideint 1000 sNaN -> NaN Invalid_operation -dddvi658 divideint Inf sNaN -> NaN Invalid_operation -dddvi659 divideint NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dddvi661 divideint NaN9 -Inf -> NaN9 -dddvi662 divideint NaN8 1000 -> NaN8 -dddvi663 divideint NaN7 Inf -> NaN7 -dddvi664 divideint -NaN6 NaN5 -> -NaN6 -dddvi665 divideint -Inf NaN4 -> NaN4 -dddvi666 divideint -1000 NaN3 -> NaN3 -dddvi667 divideint Inf -NaN2 -> -NaN2 - -dddvi671 divideint -sNaN99 -Inf -> -NaN99 Invalid_operation -dddvi672 divideint sNaN98 -1 -> NaN98 Invalid_operation -dddvi673 divideint sNaN97 NaN -> NaN97 Invalid_operation -dddvi674 divideint sNaN96 sNaN94 -> NaN96 Invalid_operation -dddvi675 divideint NaN95 sNaN93 -> NaN93 Invalid_operation -dddvi676 divideint -Inf sNaN92 -> NaN92 Invalid_operation -dddvi677 divideint 0 sNaN91 -> NaN91 Invalid_operation -dddvi678 divideint Inf -sNaN90 -> -NaN90 Invalid_operation -dddvi679 divideint NaN sNaN89 -> NaN89 Invalid_operation - --- Null tests -dddvi900 divideint 10 # -> NaN Invalid_operation -dddvi901 divideint # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddDivideInt.decTest -- decDouble integer division -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +dddvi001 divideint 1 1 -> 1 +dddvi002 divideint 2 1 -> 2 +dddvi003 divideint 1 2 -> 0 +dddvi004 divideint 2 2 -> 1 +dddvi005 divideint 0 1 -> 0 +dddvi006 divideint 0 2 -> 0 +dddvi007 divideint 1 3 -> 0 +dddvi008 divideint 2 3 -> 0 +dddvi009 divideint 3 3 -> 1 + +dddvi010 divideint 2.4 1 -> 2 +dddvi011 divideint 2.4 -1 -> -2 +dddvi012 divideint -2.4 1 -> -2 +dddvi013 divideint -2.4 -1 -> 2 +dddvi014 divideint 2.40 1 -> 2 +dddvi015 divideint 2.400 1 -> 2 +dddvi016 divideint 2.4 2 -> 1 +dddvi017 divideint 2.400 2 -> 1 +dddvi018 divideint 2. 2 -> 1 +dddvi019 divideint 20 20 -> 1 + +dddvi020 divideint 187 187 -> 1 +dddvi021 divideint 5 2 -> 2 +dddvi022 divideint 5 2.0 -> 2 +dddvi023 divideint 5 2.000 -> 2 +dddvi024 divideint 5 0.200 -> 25 +dddvi025 divideint 5 0.200 -> 25 + +dddvi030 divideint 1 2 -> 0 +dddvi031 divideint 1 4 -> 0 +dddvi032 divideint 1 8 -> 0 +dddvi033 divideint 1 16 -> 0 +dddvi034 divideint 1 32 -> 0 +dddvi035 divideint 1 64 -> 0 +dddvi040 divideint 1 -2 -> -0 +dddvi041 divideint 1 -4 -> -0 +dddvi042 divideint 1 -8 -> -0 +dddvi043 divideint 1 -16 -> -0 +dddvi044 divideint 1 -32 -> -0 +dddvi045 divideint 1 -64 -> -0 +dddvi050 divideint -1 2 -> -0 +dddvi051 divideint -1 4 -> -0 +dddvi052 divideint -1 8 -> -0 +dddvi053 divideint -1 16 -> -0 +dddvi054 divideint -1 32 -> -0 +dddvi055 divideint -1 64 -> -0 +dddvi060 divideint -1 -2 -> 0 +dddvi061 divideint -1 -4 -> 0 +dddvi062 divideint -1 -8 -> 0 +dddvi063 divideint -1 -16 -> 0 +dddvi064 divideint -1 -32 -> 0 +dddvi065 divideint -1 -64 -> 0 + +-- similar with powers of ten +dddvi160 divideint 1 1 -> 1 +dddvi161 divideint 1 10 -> 0 +dddvi162 divideint 1 100 -> 0 +dddvi163 divideint 1 1000 -> 0 +dddvi164 divideint 1 10000 -> 0 +dddvi165 divideint 1 100000 -> 0 +dddvi166 divideint 1 1000000 -> 0 +dddvi167 divideint 1 10000000 -> 0 +dddvi168 divideint 1 100000000 -> 0 +dddvi170 divideint 1 -1 -> -1 +dddvi171 divideint 1 -10 -> -0 +dddvi172 divideint 1 -100 -> -0 +dddvi173 divideint 1 -1000 -> -0 +dddvi174 divideint 1 -10000 -> -0 +dddvi175 divideint 1 -100000 -> -0 +dddvi176 divideint 1 -1000000 -> -0 +dddvi177 divideint 1 -10000000 -> -0 +dddvi178 divideint 1 -100000000 -> -0 +dddvi180 divideint -1 1 -> -1 +dddvi181 divideint -1 10 -> -0 +dddvi182 divideint -1 100 -> -0 +dddvi183 divideint -1 1000 -> -0 +dddvi184 divideint -1 10000 -> -0 +dddvi185 divideint -1 100000 -> -0 +dddvi186 divideint -1 1000000 -> -0 +dddvi187 divideint -1 10000000 -> -0 +dddvi188 divideint -1 100000000 -> -0 +dddvi190 divideint -1 -1 -> 1 +dddvi191 divideint -1 -10 -> 0 +dddvi192 divideint -1 -100 -> 0 +dddvi193 divideint -1 -1000 -> 0 +dddvi194 divideint -1 -10000 -> 0 +dddvi195 divideint -1 -100000 -> 0 +dddvi196 divideint -1 -1000000 -> 0 +dddvi197 divideint -1 -10000000 -> 0 +dddvi198 divideint -1 -100000000 -> 0 + +-- some long operand (at p=9) cases +dddvi070 divideint 999999999 1 -> 999999999 +dddvi071 divideint 999999999.4 1 -> 999999999 +dddvi072 divideint 999999999.5 1 -> 999999999 +dddvi073 divideint 999999999.9 1 -> 999999999 +dddvi074 divideint 999999999.999 1 -> 999999999 + +dddvi090 divideint 0. 1 -> 0 +dddvi091 divideint .0 1 -> 0 +dddvi092 divideint 0.00 1 -> 0 +dddvi093 divideint 0.00E+9 1 -> 0 +dddvi094 divideint 0.0000E-50 1 -> 0 + +dddvi100 divideint 1 1 -> 1 +dddvi101 divideint 1 2 -> 0 +dddvi102 divideint 1 3 -> 0 +dddvi103 divideint 1 4 -> 0 +dddvi104 divideint 1 5 -> 0 +dddvi105 divideint 1 6 -> 0 +dddvi106 divideint 1 7 -> 0 +dddvi107 divideint 1 8 -> 0 +dddvi108 divideint 1 9 -> 0 +dddvi109 divideint 1 10 -> 0 +dddvi110 divideint 1 1 -> 1 +dddvi111 divideint 2 1 -> 2 +dddvi112 divideint 3 1 -> 3 +dddvi113 divideint 4 1 -> 4 +dddvi114 divideint 5 1 -> 5 +dddvi115 divideint 6 1 -> 6 +dddvi116 divideint 7 1 -> 7 +dddvi117 divideint 8 1 -> 8 +dddvi118 divideint 9 1 -> 9 +dddvi119 divideint 10 1 -> 10 + +-- from DiagBigDecimal +dddvi131 divideint 101.3 1 -> 101 +dddvi132 divideint 101.0 1 -> 101 +dddvi133 divideint 101.3 3 -> 33 +dddvi134 divideint 101.0 3 -> 33 +dddvi135 divideint 2.4 1 -> 2 +dddvi136 divideint 2.400 1 -> 2 +dddvi137 divideint 18 18 -> 1 +dddvi138 divideint 1120 1000 -> 1 +dddvi139 divideint 2.4 2 -> 1 +dddvi140 divideint 2.400 2 -> 1 +dddvi141 divideint 0.5 2.000 -> 0 +dddvi142 divideint 8.005 7 -> 1 +dddvi143 divideint 5 2 -> 2 +dddvi144 divideint 0 2 -> 0 +dddvi145 divideint 0.00 2 -> 0 + +-- Others +dddvi150 divideint 12345 4.999 -> 2469 +dddvi151 divideint 12345 4.99 -> 2473 +dddvi152 divideint 12345 4.9 -> 2519 +dddvi153 divideint 12345 5 -> 2469 +dddvi154 divideint 12345 5.1 -> 2420 +dddvi155 divideint 12345 5.01 -> 2464 +dddvi156 divideint 12345 5.001 -> 2468 +dddvi157 divideint 101 7.6 -> 13 + +-- Various flavours of divideint by 0 +dddvi201 divideint 0 0 -> NaN Division_undefined +dddvi202 divideint 0.0E5 0 -> NaN Division_undefined +dddvi203 divideint 0.000 0 -> NaN Division_undefined +dddvi204 divideint 0.0001 0 -> Infinity Division_by_zero +dddvi205 divideint 0.01 0 -> Infinity Division_by_zero +dddvi206 divideint 0.1 0 -> Infinity Division_by_zero +dddvi207 divideint 1 0 -> Infinity Division_by_zero +dddvi208 divideint 1 0.0 -> Infinity Division_by_zero +dddvi209 divideint 10 0.0 -> Infinity Division_by_zero +dddvi210 divideint 1E+100 0.0 -> Infinity Division_by_zero +dddvi211 divideint 1E+380 0 -> Infinity Division_by_zero +dddvi214 divideint -0.0001 0 -> -Infinity Division_by_zero +dddvi215 divideint -0.01 0 -> -Infinity Division_by_zero +dddvi216 divideint -0.1 0 -> -Infinity Division_by_zero +dddvi217 divideint -1 0 -> -Infinity Division_by_zero +dddvi218 divideint -1 0.0 -> -Infinity Division_by_zero +dddvi219 divideint -10 0.0 -> -Infinity Division_by_zero +dddvi220 divideint -1E+100 0.0 -> -Infinity Division_by_zero +dddvi221 divideint -1E+380 0 -> -Infinity Division_by_zero + +-- test some cases that are close to exponent overflow +dddvi270 divideint 1 1e384 -> 0 +dddvi271 divideint 1 0.9e384 -> 0 +dddvi272 divideint 1 0.99e384 -> 0 +dddvi273 divideint 1 0.9999999999999999e384 -> 0 +dddvi274 divideint 9e384 1 -> NaN Division_impossible +dddvi275 divideint 9.9e384 1 -> NaN Division_impossible +dddvi276 divideint 9.99e384 1 -> NaN Division_impossible +dddvi277 divideint 9.999999999999999e384 1 -> NaN Division_impossible + +dddvi280 divideint 0.1 9e-383 -> NaN Division_impossible +dddvi281 divideint 0.1 99e-383 -> NaN Division_impossible +dddvi282 divideint 0.1 999e-383 -> NaN Division_impossible +dddvi283 divideint 0.1 9e-382 -> NaN Division_impossible +dddvi284 divideint 0.1 99e-382 -> NaN Division_impossible + +-- GD edge cases: lhs smaller than rhs but more digits +dddvi301 divideint 0.9 2 -> 0 +dddvi302 divideint 0.9 2.0 -> 0 +dddvi303 divideint 0.9 2.1 -> 0 +dddvi304 divideint 0.9 2.00 -> 0 +dddvi305 divideint 0.9 2.01 -> 0 +dddvi306 divideint 0.12 1 -> 0 +dddvi307 divideint 0.12 1.0 -> 0 +dddvi308 divideint 0.12 1.00 -> 0 +dddvi309 divideint 0.12 1.0 -> 0 +dddvi310 divideint 0.12 1.00 -> 0 +dddvi311 divideint 0.12 2 -> 0 +dddvi312 divideint 0.12 2.0 -> 0 +dddvi313 divideint 0.12 2.1 -> 0 +dddvi314 divideint 0.12 2.00 -> 0 +dddvi315 divideint 0.12 2.01 -> 0 + +-- edge cases of impossible +dddvi330 divideint 1234567890123456 10 -> 123456789012345 +dddvi331 divideint 1234567890123456 1 -> 1234567890123456 +dddvi332 divideint 1234567890123456 0.1 -> NaN Division_impossible +dddvi333 divideint 1234567890123456 0.01 -> NaN Division_impossible + +-- overflow and underflow tests [from divide] +dddvi1051 divideint 1e+277 1e-311 -> NaN Division_impossible +dddvi1052 divideint 1e+277 -1e-311 -> NaN Division_impossible +dddvi1053 divideint -1e+277 1e-311 -> NaN Division_impossible +dddvi1054 divideint -1e+277 -1e-311 -> NaN Division_impossible +dddvi1055 divideint 1e-277 1e+311 -> 0 +dddvi1056 divideint 1e-277 -1e+311 -> -0 +dddvi1057 divideint -1e-277 1e+311 -> -0 +dddvi1058 divideint -1e-277 -1e+311 -> 0 + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dddvi1060 divideint 1e-291 1e+101 -> 0 +dddvi1061 divideint 1e-291 1e+102 -> 0 +dddvi1062 divideint 1e-291 1e+103 -> 0 +dddvi1063 divideint 1e-291 1e+104 -> 0 +dddvi1064 divideint 1e-291 1e+105 -> 0 +dddvi1065 divideint 1e-291 1e+106 -> 0 +dddvi1066 divideint 1e-291 1e+107 -> 0 +dddvi1067 divideint 1e-291 1e+108 -> 0 +dddvi1068 divideint 1e-291 1e+109 -> 0 +dddvi1069 divideint 1e-291 1e+110 -> 0 + +dddvi1101 divideint 1.0000E-394 1 -> 0 +dddvi1102 divideint 1.000E-394 1e+1 -> 0 +dddvi1103 divideint 1.00E-394 1e+2 -> 0 + +dddvi1118 divideint 1E-394 1e+4 -> 0 +dddvi1119 divideint 3E-394 -1e+5 -> -0 +dddvi1120 divideint 5E-394 1e+5 -> 0 + +dddvi1124 divideint 1E-394 -1e+4 -> -0 +dddvi1130 divideint 3.0E-394 -1e+5 -> -0 + +dddvi1131 divideint 1.0E-199 1e+200 -> 0 +dddvi1132 divideint 1.0E-199 1e+199 -> 0 +dddvi1133 divideint 1.0E-199 1e+198 -> 0 +dddvi1134 divideint 2.0E-199 2e+198 -> 0 +dddvi1135 divideint 4.0E-199 4e+198 -> 0 + +-- long operand checks +dddvi401 divideint 12345678000 100 -> 123456780 +dddvi402 divideint 1 12345678000 -> 0 +dddvi403 divideint 1234567800 10 -> 123456780 +dddvi404 divideint 1 1234567800 -> 0 +dddvi405 divideint 1234567890 10 -> 123456789 +dddvi406 divideint 1 1234567890 -> 0 +dddvi407 divideint 1234567891 10 -> 123456789 +dddvi408 divideint 1 1234567891 -> 0 +dddvi409 divideint 12345678901 100 -> 123456789 +dddvi410 divideint 1 12345678901 -> 0 +dddvi411 divideint 1234567896 10 -> 123456789 +dddvi412 divideint 1 1234567896 -> 0 +dddvi413 divideint 12345678948 100 -> 123456789 +dddvi414 divideint 12345678949 100 -> 123456789 +dddvi415 divideint 12345678950 100 -> 123456789 +dddvi416 divideint 12345678951 100 -> 123456789 +dddvi417 divideint 12345678999 100 -> 123456789 +dddvi441 divideint 12345678000 1 -> 12345678000 +dddvi442 divideint 1 12345678000 -> 0 +dddvi443 divideint 1234567800 1 -> 1234567800 +dddvi444 divideint 1 1234567800 -> 0 +dddvi445 divideint 1234567890 1 -> 1234567890 +dddvi446 divideint 1 1234567890 -> 0 +dddvi447 divideint 1234567891 1 -> 1234567891 +dddvi448 divideint 1 1234567891 -> 0 +dddvi449 divideint 12345678901 1 -> 12345678901 +dddvi450 divideint 1 12345678901 -> 0 +dddvi451 divideint 1234567896 1 -> 1234567896 +dddvi452 divideint 1 1234567896 -> 0 + +-- more zeros, etc. +dddvi531 divideint 5.00 1E-3 -> 5000 +dddvi532 divideint 00.00 0.000 -> NaN Division_undefined +dddvi533 divideint 00.00 0E-3 -> NaN Division_undefined +dddvi534 divideint 0 -0 -> NaN Division_undefined +dddvi535 divideint -0 0 -> NaN Division_undefined +dddvi536 divideint -0 -0 -> NaN Division_undefined + +dddvi541 divideint 0 -1 -> -0 +dddvi542 divideint -0 -1 -> 0 +dddvi543 divideint 0 1 -> 0 +dddvi544 divideint -0 1 -> -0 +dddvi545 divideint -1 0 -> -Infinity Division_by_zero +dddvi546 divideint -1 -0 -> Infinity Division_by_zero +dddvi547 divideint 1 0 -> Infinity Division_by_zero +dddvi548 divideint 1 -0 -> -Infinity Division_by_zero + +dddvi551 divideint 0.0 -1 -> -0 +dddvi552 divideint -0.0 -1 -> 0 +dddvi553 divideint 0.0 1 -> 0 +dddvi554 divideint -0.0 1 -> -0 +dddvi555 divideint -1.0 0 -> -Infinity Division_by_zero +dddvi556 divideint -1.0 -0 -> Infinity Division_by_zero +dddvi557 divideint 1.0 0 -> Infinity Division_by_zero +dddvi558 divideint 1.0 -0 -> -Infinity Division_by_zero + +dddvi561 divideint 0 -1.0 -> -0 +dddvi562 divideint -0 -1.0 -> 0 +dddvi563 divideint 0 1.0 -> 0 +dddvi564 divideint -0 1.0 -> -0 +dddvi565 divideint -1 0.0 -> -Infinity Division_by_zero +dddvi566 divideint -1 -0.0 -> Infinity Division_by_zero +dddvi567 divideint 1 0.0 -> Infinity Division_by_zero +dddvi568 divideint 1 -0.0 -> -Infinity Division_by_zero + +dddvi571 divideint 0.0 -1.0 -> -0 +dddvi572 divideint -0.0 -1.0 -> 0 +dddvi573 divideint 0.0 1.0 -> 0 +dddvi574 divideint -0.0 1.0 -> -0 +dddvi575 divideint -1.0 0.0 -> -Infinity Division_by_zero +dddvi576 divideint -1.0 -0.0 -> Infinity Division_by_zero +dddvi577 divideint 1.0 0.0 -> Infinity Division_by_zero +dddvi578 divideint 1.0 -0.0 -> -Infinity Division_by_zero + +-- Specials +dddvi580 divideint Inf -Inf -> NaN Invalid_operation +dddvi581 divideint Inf -1000 -> -Infinity +dddvi582 divideint Inf -1 -> -Infinity +dddvi583 divideint Inf -0 -> -Infinity +dddvi584 divideint Inf 0 -> Infinity +dddvi585 divideint Inf 1 -> Infinity +dddvi586 divideint Inf 1000 -> Infinity +dddvi587 divideint Inf Inf -> NaN Invalid_operation +dddvi588 divideint -1000 Inf -> -0 +dddvi589 divideint -Inf Inf -> NaN Invalid_operation +dddvi590 divideint -1 Inf -> -0 +dddvi591 divideint -0 Inf -> -0 +dddvi592 divideint 0 Inf -> 0 +dddvi593 divideint 1 Inf -> 0 +dddvi594 divideint 1000 Inf -> 0 +dddvi595 divideint Inf Inf -> NaN Invalid_operation + +dddvi600 divideint -Inf -Inf -> NaN Invalid_operation +dddvi601 divideint -Inf -1000 -> Infinity +dddvi602 divideint -Inf -1 -> Infinity +dddvi603 divideint -Inf -0 -> Infinity +dddvi604 divideint -Inf 0 -> -Infinity +dddvi605 divideint -Inf 1 -> -Infinity +dddvi606 divideint -Inf 1000 -> -Infinity +dddvi607 divideint -Inf Inf -> NaN Invalid_operation +dddvi608 divideint -1000 Inf -> -0 +dddvi609 divideint -Inf -Inf -> NaN Invalid_operation +dddvi610 divideint -1 -Inf -> 0 +dddvi611 divideint -0 -Inf -> 0 +dddvi612 divideint 0 -Inf -> -0 +dddvi613 divideint 1 -Inf -> -0 +dddvi614 divideint 1000 -Inf -> -0 +dddvi615 divideint Inf -Inf -> NaN Invalid_operation + +dddvi621 divideint NaN -Inf -> NaN +dddvi622 divideint NaN -1000 -> NaN +dddvi623 divideint NaN -1 -> NaN +dddvi624 divideint NaN -0 -> NaN +dddvi625 divideint NaN 0 -> NaN +dddvi626 divideint NaN 1 -> NaN +dddvi627 divideint NaN 1000 -> NaN +dddvi628 divideint NaN Inf -> NaN +dddvi629 divideint NaN NaN -> NaN +dddvi630 divideint -Inf NaN -> NaN +dddvi631 divideint -1000 NaN -> NaN +dddvi632 divideint -1 NaN -> NaN +dddvi633 divideint -0 NaN -> NaN +dddvi634 divideint 0 NaN -> NaN +dddvi635 divideint 1 NaN -> NaN +dddvi636 divideint 1000 NaN -> NaN +dddvi637 divideint Inf NaN -> NaN + +dddvi641 divideint sNaN -Inf -> NaN Invalid_operation +dddvi642 divideint sNaN -1000 -> NaN Invalid_operation +dddvi643 divideint sNaN -1 -> NaN Invalid_operation +dddvi644 divideint sNaN -0 -> NaN Invalid_operation +dddvi645 divideint sNaN 0 -> NaN Invalid_operation +dddvi646 divideint sNaN 1 -> NaN Invalid_operation +dddvi647 divideint sNaN 1000 -> NaN Invalid_operation +dddvi648 divideint sNaN NaN -> NaN Invalid_operation +dddvi649 divideint sNaN sNaN -> NaN Invalid_operation +dddvi650 divideint NaN sNaN -> NaN Invalid_operation +dddvi651 divideint -Inf sNaN -> NaN Invalid_operation +dddvi652 divideint -1000 sNaN -> NaN Invalid_operation +dddvi653 divideint -1 sNaN -> NaN Invalid_operation +dddvi654 divideint -0 sNaN -> NaN Invalid_operation +dddvi655 divideint 0 sNaN -> NaN Invalid_operation +dddvi656 divideint 1 sNaN -> NaN Invalid_operation +dddvi657 divideint 1000 sNaN -> NaN Invalid_operation +dddvi658 divideint Inf sNaN -> NaN Invalid_operation +dddvi659 divideint NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dddvi661 divideint NaN9 -Inf -> NaN9 +dddvi662 divideint NaN8 1000 -> NaN8 +dddvi663 divideint NaN7 Inf -> NaN7 +dddvi664 divideint -NaN6 NaN5 -> -NaN6 +dddvi665 divideint -Inf NaN4 -> NaN4 +dddvi666 divideint -1000 NaN3 -> NaN3 +dddvi667 divideint Inf -NaN2 -> -NaN2 + +dddvi671 divideint -sNaN99 -Inf -> -NaN99 Invalid_operation +dddvi672 divideint sNaN98 -1 -> NaN98 Invalid_operation +dddvi673 divideint sNaN97 NaN -> NaN97 Invalid_operation +dddvi674 divideint sNaN96 sNaN94 -> NaN96 Invalid_operation +dddvi675 divideint NaN95 sNaN93 -> NaN93 Invalid_operation +dddvi676 divideint -Inf sNaN92 -> NaN92 Invalid_operation +dddvi677 divideint 0 sNaN91 -> NaN91 Invalid_operation +dddvi678 divideint Inf -sNaN90 -> -NaN90 Invalid_operation +dddvi679 divideint NaN sNaN89 -> NaN89 Invalid_operation + +-- Null tests +dddvi900 divideint 10 # -> NaN Invalid_operation +dddvi901 divideint # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddEncode.decTest b/Lib/test/decimaltestdata/ddEncode.decTest index e91ec6143c2..de9d31c0a6a 100644 --- a/Lib/test/decimaltestdata/ddEncode.decTest +++ b/Lib/test/decimaltestdata/ddEncode.decTest @@ -1,495 +1,495 @@ ------------------------------------------------------------------------- --- ddEncode.decTest -- decimal eight-byte format testcases -- --- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- --- [Previously called decimal64.decTest] -version: 2.59 - --- This set of tests is for the eight-byte concrete representation. --- Its characteristics are: --- --- 1 bit sign --- 5 bits combination field --- 8 bits exponent continuation --- 50 bits coefficient continuation --- --- Total exponent length 10 bits --- Total coefficient length 54 bits (16 digits) --- --- Elimit = 767 (maximum encoded exponent) --- Emax = 384 (largest exponent value) --- Emin = -383 (smallest exponent value) --- bias = 398 (subtracted from encoded exponent) = -Etiny - --- The testcases here have only exactly representable data on the --- 'left-hand-side'; rounding from strings is tested in 'base' --- testcase groups. - -extended: 1 -clamp: 1 -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - --- General testcases --- (mostly derived from the Strawman 4 document and examples) -dece001 apply #A2300000000003D0 -> -7.50 -dece002 apply -7.50 -> #A2300000000003D0 --- derivative canonical plain strings -dece003 apply #A23c0000000003D0 -> -7.50E+3 -dece004 apply -7.50E+3 -> #A23c0000000003D0 -dece005 apply #A2380000000003D0 -> -750 -dece006 apply -750 -> #A2380000000003D0 -dece007 apply #A2340000000003D0 -> -75.0 -dece008 apply -75.0 -> #A2340000000003D0 -dece009 apply #A22c0000000003D0 -> -0.750 -dece010 apply -0.750 -> #A22c0000000003D0 -dece011 apply #A2280000000003D0 -> -0.0750 -dece012 apply -0.0750 -> #A2280000000003D0 -dece013 apply #A2200000000003D0 -> -0.000750 -dece014 apply -0.000750 -> #A2200000000003D0 -dece015 apply #A2180000000003D0 -> -0.00000750 -dece016 apply -0.00000750 -> #A2180000000003D0 -dece017 apply #A2140000000003D0 -> -7.50E-7 -dece018 apply -7.50E-7 -> #A2140000000003D0 - --- Normality -dece020 apply 1234567890123456 -> #263934b9c1e28e56 -dece021 apply -1234567890123456 -> #a63934b9c1e28e56 -dece022 apply 1234.567890123456 -> #260934b9c1e28e56 -dece023 apply #260934b9c1e28e56 -> 1234.567890123456 -dece024 apply 1111111111111111 -> #2638912449124491 -dece025 apply 9999999999999999 -> #6e38ff3fcff3fcff - --- Nmax and similar -dece031 apply 9999999999999999E+369 -> #77fcff3fcff3fcff -dece032 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff -dece033 apply #77fcff3fcff3fcff -> 9.999999999999999E+384 -dece034 apply 1.234567890123456E+384 -> #47fd34b9c1e28e56 -dece035 apply #47fd34b9c1e28e56 -> 1.234567890123456E+384 --- fold-downs (more below) -dece036 apply 1.23E+384 -> #47fd300000000000 Clamped -dece037 apply #47fd300000000000 -> 1.230000000000000E+384 -decd038 apply 1E+384 -> #47fc000000000000 Clamped -decd039 apply #47fc000000000000 -> 1.000000000000000E+384 - -decd051 apply 12345 -> #22380000000049c5 -decd052 apply #22380000000049c5 -> 12345 -decd053 apply 1234 -> #2238000000000534 -decd054 apply #2238000000000534 -> 1234 -decd055 apply 123 -> #22380000000000a3 -decd056 apply #22380000000000a3 -> 123 -decd057 apply 12 -> #2238000000000012 -decd058 apply #2238000000000012 -> 12 -decd059 apply 1 -> #2238000000000001 -decd060 apply #2238000000000001 -> 1 -decd061 apply 1.23 -> #22300000000000a3 -decd062 apply #22300000000000a3 -> 1.23 -decd063 apply 123.45 -> #22300000000049c5 -decd064 apply #22300000000049c5 -> 123.45 - --- Nmin and below -decd071 apply 1E-383 -> #003c000000000001 -decd072 apply #003c000000000001 -> 1E-383 -decd073 apply 1.000000000000000E-383 -> #0400000000000000 -decd074 apply #0400000000000000 -> 1.000000000000000E-383 -decd075 apply 1.000000000000001E-383 -> #0400000000000001 -decd076 apply #0400000000000001 -> 1.000000000000001E-383 - -decd077 apply 0.100000000000000E-383 -> #0000800000000000 Subnormal -decd078 apply #0000800000000000 -> 1.00000000000000E-384 Subnormal -decd079 apply 0.000000000000010E-383 -> #0000000000000010 Subnormal -decd080 apply #0000000000000010 -> 1.0E-397 Subnormal -decd081 apply 0.00000000000001E-383 -> #0004000000000001 Subnormal -decd082 apply #0004000000000001 -> 1E-397 Subnormal -decd083 apply 0.000000000000001E-383 -> #0000000000000001 Subnormal -decd084 apply #0000000000000001 -> 1E-398 Subnormal --- next is smallest all-nines -decd085 apply 9999999999999999E-398 -> #6400ff3fcff3fcff -decd086 apply #6400ff3fcff3fcff -> 9.999999999999999E-383 --- and a problematic divide result -decd088 apply 1.111111111111111E-383 -> #0400912449124491 -decd089 apply #0400912449124491 -> 1.111111111111111E-383 - --- forties -decd090 apply 40 -> #2238000000000040 -decd091 apply 39.99 -> #2230000000000cff - --- underflows cannot be tested as all LHS exact - --- Same again, negatives --- Nmax and similar -decd122 apply -9.999999999999999E+384 -> #f7fcff3fcff3fcff -decd123 apply #f7fcff3fcff3fcff -> -9.999999999999999E+384 -decd124 apply -1.234567890123456E+384 -> #c7fd34b9c1e28e56 -decd125 apply #c7fd34b9c1e28e56 -> -1.234567890123456E+384 --- fold-downs (more below) -decd130 apply -1.23E+384 -> #c7fd300000000000 Clamped -decd131 apply #c7fd300000000000 -> -1.230000000000000E+384 -decd132 apply -1E+384 -> #c7fc000000000000 Clamped -decd133 apply #c7fc000000000000 -> -1.000000000000000E+384 - --- overflows -decd151 apply -12345 -> #a2380000000049c5 -decd152 apply #a2380000000049c5 -> -12345 -decd153 apply -1234 -> #a238000000000534 -decd154 apply #a238000000000534 -> -1234 -decd155 apply -123 -> #a2380000000000a3 -decd156 apply #a2380000000000a3 -> -123 -decd157 apply -12 -> #a238000000000012 -decd158 apply #a238000000000012 -> -12 -decd159 apply -1 -> #a238000000000001 -decd160 apply #a238000000000001 -> -1 -decd161 apply -1.23 -> #a2300000000000a3 -decd162 apply #a2300000000000a3 -> -1.23 -decd163 apply -123.45 -> #a2300000000049c5 -decd164 apply #a2300000000049c5 -> -123.45 - --- Nmin and below -decd171 apply -1E-383 -> #803c000000000001 -decd172 apply #803c000000000001 -> -1E-383 -decd173 apply -1.000000000000000E-383 -> #8400000000000000 -decd174 apply #8400000000000000 -> -1.000000000000000E-383 -decd175 apply -1.000000000000001E-383 -> #8400000000000001 -decd176 apply #8400000000000001 -> -1.000000000000001E-383 - -decd177 apply -0.100000000000000E-383 -> #8000800000000000 Subnormal -decd178 apply #8000800000000000 -> -1.00000000000000E-384 Subnormal -decd179 apply -0.000000000000010E-383 -> #8000000000000010 Subnormal -decd180 apply #8000000000000010 -> -1.0E-397 Subnormal -decd181 apply -0.00000000000001E-383 -> #8004000000000001 Subnormal -decd182 apply #8004000000000001 -> -1E-397 Subnormal -decd183 apply -0.000000000000001E-383 -> #8000000000000001 Subnormal -decd184 apply #8000000000000001 -> -1E-398 Subnormal --- next is smallest all-nines -decd185 apply -9999999999999999E-398 -> #e400ff3fcff3fcff -decd186 apply #e400ff3fcff3fcff -> -9.999999999999999E-383 --- and a tricky subnormal -decd187 apply 1.11111111111524E-384 -> #00009124491246a4 Subnormal -decd188 apply #00009124491246a4 -> 1.11111111111524E-384 Subnormal - --- near-underflows -decd189 apply -1e-398 -> #8000000000000001 Subnormal -decd190 apply -1.0e-398 -> #8000000000000001 Subnormal Rounded - --- zeros -decd401 apply 0E-500 -> #0000000000000000 Clamped -decd402 apply 0E-400 -> #0000000000000000 Clamped -decd403 apply 0E-398 -> #0000000000000000 -decd404 apply #0000000000000000 -> 0E-398 -decd405 apply 0.000000000000000E-383 -> #0000000000000000 -decd406 apply #0000000000000000 -> 0E-398 -decd407 apply 0E-2 -> #2230000000000000 -decd408 apply #2230000000000000 -> 0.00 -decd409 apply 0 -> #2238000000000000 -decd410 apply #2238000000000000 -> 0 -decd411 apply 0E+3 -> #2244000000000000 -decd412 apply #2244000000000000 -> 0E+3 -decd413 apply 0E+369 -> #43fc000000000000 -decd414 apply #43fc000000000000 -> 0E+369 --- clamped zeros... -decd415 apply 0E+370 -> #43fc000000000000 Clamped -decd416 apply #43fc000000000000 -> 0E+369 -decd417 apply 0E+384 -> #43fc000000000000 Clamped -decd418 apply #43fc000000000000 -> 0E+369 -decd419 apply 0E+400 -> #43fc000000000000 Clamped -decd420 apply #43fc000000000000 -> 0E+369 -decd421 apply 0E+500 -> #43fc000000000000 Clamped -decd422 apply #43fc000000000000 -> 0E+369 - --- negative zeros -decd431 apply -0E-400 -> #8000000000000000 Clamped -decd432 apply -0E-400 -> #8000000000000000 Clamped -decd433 apply -0E-398 -> #8000000000000000 -decd434 apply #8000000000000000 -> -0E-398 -decd435 apply -0.000000000000000E-383 -> #8000000000000000 -decd436 apply #8000000000000000 -> -0E-398 -decd437 apply -0E-2 -> #a230000000000000 -decd438 apply #a230000000000000 -> -0.00 -decd439 apply -0 -> #a238000000000000 -decd440 apply #a238000000000000 -> -0 -decd441 apply -0E+3 -> #a244000000000000 -decd442 apply #a244000000000000 -> -0E+3 -decd443 apply -0E+369 -> #c3fc000000000000 -decd444 apply #c3fc000000000000 -> -0E+369 --- clamped zeros... -decd445 apply -0E+370 -> #c3fc000000000000 Clamped -decd446 apply #c3fc000000000000 -> -0E+369 -decd447 apply -0E+384 -> #c3fc000000000000 Clamped -decd448 apply #c3fc000000000000 -> -0E+369 -decd449 apply -0E+400 -> #c3fc000000000000 Clamped -decd450 apply #c3fc000000000000 -> -0E+369 -decd451 apply -0E+500 -> #c3fc000000000000 Clamped -decd452 apply #c3fc000000000000 -> -0E+369 - --- exponents -decd460 apply #225c000000000007 -> 7E+9 -decd461 apply 7E+9 -> #225c000000000007 -decd462 apply #23c4000000000007 -> 7E+99 -decd463 apply 7E+99 -> #23c4000000000007 - --- Specials -decd500 apply Infinity -> #7800000000000000 -decd501 apply #7878787878787878 -> #7800000000000000 -decd502 apply #7800000000000000 -> Infinity -decd503 apply #7979797979797979 -> #7800000000000000 -decd504 apply #7900000000000000 -> Infinity -decd505 apply #7a7a7a7a7a7a7a7a -> #7800000000000000 -decd506 apply #7a00000000000000 -> Infinity -decd507 apply #7b7b7b7b7b7b7b7b -> #7800000000000000 -decd508 apply #7b00000000000000 -> Infinity - -decd509 apply NaN -> #7c00000000000000 -decd510 apply #7c7c7c7c7c7c7c7c -> #7c007c7c7c7c7c7c -decd511 apply #7c00000000000000 -> NaN -decd512 apply #7d7d7d7d7d7d7d7d -> #7c017d7d7d7d7d7d -decd513 apply #7d00000000000000 -> NaN -decd514 apply #7e7e7e7e7e7e7e7e -> #7e007e7e7e7e7c7e -decd515 apply #7e00000000000000 -> sNaN -decd516 apply #7f7f7f7f7f7f7f7f -> #7e007f7f7f7f7c7f -decd517 apply #7f00000000000000 -> sNaN -decd518 apply #7fffffffffffffff -> sNaN999999999999999 -decd519 apply #7fffffffffffffff -> #7e00ff3fcff3fcff - -decd520 apply -Infinity -> #f800000000000000 -decd521 apply #f878787878787878 -> #f800000000000000 -decd522 apply #f800000000000000 -> -Infinity -decd523 apply #f979797979797979 -> #f800000000000000 -decd524 apply #f900000000000000 -> -Infinity -decd525 apply #fa7a7a7a7a7a7a7a -> #f800000000000000 -decd526 apply #fa00000000000000 -> -Infinity -decd527 apply #fb7b7b7b7b7b7b7b -> #f800000000000000 -decd528 apply #fb00000000000000 -> -Infinity - -decd529 apply -NaN -> #fc00000000000000 -decd530 apply #fc7c7c7c7c7c7c7c -> #fc007c7c7c7c7c7c -decd531 apply #fc00000000000000 -> -NaN -decd532 apply #fd7d7d7d7d7d7d7d -> #fc017d7d7d7d7d7d -decd533 apply #fd00000000000000 -> -NaN -decd534 apply #fe7e7e7e7e7e7e7e -> #fe007e7e7e7e7c7e -decd535 apply #fe00000000000000 -> -sNaN -decd536 apply #ff7f7f7f7f7f7f7f -> #fe007f7f7f7f7c7f -decd537 apply #ff00000000000000 -> -sNaN -decd538 apply #ffffffffffffffff -> -sNaN999999999999999 -decd539 apply #ffffffffffffffff -> #fe00ff3fcff3fcff - --- diagnostic NaNs -decd540 apply NaN -> #7c00000000000000 -decd541 apply NaN0 -> #7c00000000000000 -decd542 apply NaN1 -> #7c00000000000001 -decd543 apply NaN12 -> #7c00000000000012 -decd544 apply NaN79 -> #7c00000000000079 -decd545 apply NaN12345 -> #7c000000000049c5 -decd546 apply NaN123456 -> #7c00000000028e56 -decd547 apply NaN799799 -> #7c000000000f7fdf -decd548 apply NaN799799799799799 -> #7c03dff7fdff7fdf -decd549 apply NaN999999999999999 -> #7c00ff3fcff3fcff --- too many digits - --- fold-down full sequence -decd601 apply 1E+384 -> #47fc000000000000 Clamped -decd602 apply #47fc000000000000 -> 1.000000000000000E+384 -decd603 apply 1E+383 -> #43fc800000000000 Clamped -decd604 apply #43fc800000000000 -> 1.00000000000000E+383 -decd605 apply 1E+382 -> #43fc100000000000 Clamped -decd606 apply #43fc100000000000 -> 1.0000000000000E+382 -decd607 apply 1E+381 -> #43fc010000000000 Clamped -decd608 apply #43fc010000000000 -> 1.000000000000E+381 -decd609 apply 1E+380 -> #43fc002000000000 Clamped -decd610 apply #43fc002000000000 -> 1.00000000000E+380 -decd611 apply 1E+379 -> #43fc000400000000 Clamped -decd612 apply #43fc000400000000 -> 1.0000000000E+379 -decd613 apply 1E+378 -> #43fc000040000000 Clamped -decd614 apply #43fc000040000000 -> 1.000000000E+378 -decd615 apply 1E+377 -> #43fc000008000000 Clamped -decd616 apply #43fc000008000000 -> 1.00000000E+377 -decd617 apply 1E+376 -> #43fc000001000000 Clamped -decd618 apply #43fc000001000000 -> 1.0000000E+376 -decd619 apply 1E+375 -> #43fc000000100000 Clamped -decd620 apply #43fc000000100000 -> 1.000000E+375 -decd621 apply 1E+374 -> #43fc000000020000 Clamped -decd622 apply #43fc000000020000 -> 1.00000E+374 -decd623 apply 1E+373 -> #43fc000000004000 Clamped -decd624 apply #43fc000000004000 -> 1.0000E+373 -decd625 apply 1E+372 -> #43fc000000000400 Clamped -decd626 apply #43fc000000000400 -> 1.000E+372 -decd627 apply 1E+371 -> #43fc000000000080 Clamped -decd628 apply #43fc000000000080 -> 1.00E+371 -decd629 apply 1E+370 -> #43fc000000000010 Clamped -decd630 apply #43fc000000000010 -> 1.0E+370 -decd631 apply 1E+369 -> #43fc000000000001 -decd632 apply #43fc000000000001 -> 1E+369 -decd633 apply 1E+368 -> #43f8000000000001 -decd634 apply #43f8000000000001 -> 1E+368 --- same with 9s -decd641 apply 9E+384 -> #77fc000000000000 Clamped -decd642 apply #77fc000000000000 -> 9.000000000000000E+384 -decd643 apply 9E+383 -> #43fc8c0000000000 Clamped -decd644 apply #43fc8c0000000000 -> 9.00000000000000E+383 -decd645 apply 9E+382 -> #43fc1a0000000000 Clamped -decd646 apply #43fc1a0000000000 -> 9.0000000000000E+382 -decd647 apply 9E+381 -> #43fc090000000000 Clamped -decd648 apply #43fc090000000000 -> 9.000000000000E+381 -decd649 apply 9E+380 -> #43fc002300000000 Clamped -decd650 apply #43fc002300000000 -> 9.00000000000E+380 -decd651 apply 9E+379 -> #43fc000680000000 Clamped -decd652 apply #43fc000680000000 -> 9.0000000000E+379 -decd653 apply 9E+378 -> #43fc000240000000 Clamped -decd654 apply #43fc000240000000 -> 9.000000000E+378 -decd655 apply 9E+377 -> #43fc000008c00000 Clamped -decd656 apply #43fc000008c00000 -> 9.00000000E+377 -decd657 apply 9E+376 -> #43fc000001a00000 Clamped -decd658 apply #43fc000001a00000 -> 9.0000000E+376 -decd659 apply 9E+375 -> #43fc000000900000 Clamped -decd660 apply #43fc000000900000 -> 9.000000E+375 -decd661 apply 9E+374 -> #43fc000000023000 Clamped -decd662 apply #43fc000000023000 -> 9.00000E+374 -decd663 apply 9E+373 -> #43fc000000006800 Clamped -decd664 apply #43fc000000006800 -> 9.0000E+373 -decd665 apply 9E+372 -> #43fc000000002400 Clamped -decd666 apply #43fc000000002400 -> 9.000E+372 -decd667 apply 9E+371 -> #43fc00000000008c Clamped -decd668 apply #43fc00000000008c -> 9.00E+371 -decd669 apply 9E+370 -> #43fc00000000001a Clamped -decd670 apply #43fc00000000001a -> 9.0E+370 -decd671 apply 9E+369 -> #43fc000000000009 -decd672 apply #43fc000000000009 -> 9E+369 -decd673 apply 9E+368 -> #43f8000000000009 -decd674 apply #43f8000000000009 -> 9E+368 - - --- Selected DPD codes -decd700 apply #2238000000000000 -> 0 -decd701 apply #2238000000000009 -> 9 -decd702 apply #2238000000000010 -> 10 -decd703 apply #2238000000000019 -> 19 -decd704 apply #2238000000000020 -> 20 -decd705 apply #2238000000000029 -> 29 -decd706 apply #2238000000000030 -> 30 -decd707 apply #2238000000000039 -> 39 -decd708 apply #2238000000000040 -> 40 -decd709 apply #2238000000000049 -> 49 -decd710 apply #2238000000000050 -> 50 -decd711 apply #2238000000000059 -> 59 -decd712 apply #2238000000000060 -> 60 -decd713 apply #2238000000000069 -> 69 -decd714 apply #2238000000000070 -> 70 -decd715 apply #2238000000000071 -> 71 -decd716 apply #2238000000000072 -> 72 -decd717 apply #2238000000000073 -> 73 -decd718 apply #2238000000000074 -> 74 -decd719 apply #2238000000000075 -> 75 -decd720 apply #2238000000000076 -> 76 -decd721 apply #2238000000000077 -> 77 -decd722 apply #2238000000000078 -> 78 -decd723 apply #2238000000000079 -> 79 - -decd725 apply #223800000000029e -> 994 -decd726 apply #223800000000029f -> 995 -decd727 apply #22380000000002a0 -> 520 -decd728 apply #22380000000002a1 -> 521 --- from telco test data -decd730 apply #2238000000000188 -> 308 -decd731 apply #22380000000001a3 -> 323 -decd732 apply #223800000000002a -> 82 -decd733 apply #22380000000001a9 -> 329 -decd734 apply #2238000000000081 -> 101 -decd735 apply #22380000000002a2 -> 522 - --- DPD: one of each of the huffman groups -decd740 apply #22380000000003f7 -> 777 -decd741 apply #22380000000003f8 -> 778 -decd742 apply #22380000000003eb -> 787 -decd743 apply #223800000000037d -> 877 -decd744 apply #223800000000039f -> 997 -decd745 apply #22380000000003bf -> 979 -decd746 apply #22380000000003df -> 799 -decd747 apply #223800000000006e -> 888 - --- DPD all-highs cases (includes the 24 redundant codes) -decd750 apply #223800000000006e -> 888 -decd751 apply #223800000000016e -> 888 -decd752 apply #223800000000026e -> 888 -decd753 apply #223800000000036e -> 888 -decd754 apply #223800000000006f -> 889 -decd755 apply #223800000000016f -> 889 -decd756 apply #223800000000026f -> 889 -decd757 apply #223800000000036f -> 889 - -decd760 apply #223800000000007e -> 898 -decd761 apply #223800000000017e -> 898 -decd762 apply #223800000000027e -> 898 -decd763 apply #223800000000037e -> 898 -decd764 apply #223800000000007f -> 899 -decd765 apply #223800000000017f -> 899 -decd766 apply #223800000000027f -> 899 -decd767 apply #223800000000037f -> 899 - -decd770 apply #22380000000000ee -> 988 -decd771 apply #22380000000001ee -> 988 -decd772 apply #22380000000002ee -> 988 -decd773 apply #22380000000003ee -> 988 -decd774 apply #22380000000000ef -> 989 -decd775 apply #22380000000001ef -> 989 -decd776 apply #22380000000002ef -> 989 -decd777 apply #22380000000003ef -> 989 - -decd780 apply #22380000000000fe -> 998 -decd781 apply #22380000000001fe -> 998 -decd782 apply #22380000000002fe -> 998 -decd783 apply #22380000000003fe -> 998 -decd784 apply #22380000000000ff -> 999 -decd785 apply #22380000000001ff -> 999 -decd786 apply #22380000000002ff -> 999 -decd787 apply #22380000000003ff -> 999 - --- values around [u]int32 edges (zeros done earlier) -decd800 apply -2147483646 -> #a23800008c78af46 -decd801 apply -2147483647 -> #a23800008c78af47 -decd802 apply -2147483648 -> #a23800008c78af48 -decd803 apply -2147483649 -> #a23800008c78af49 -decd804 apply 2147483646 -> #223800008c78af46 -decd805 apply 2147483647 -> #223800008c78af47 -decd806 apply 2147483648 -> #223800008c78af48 -decd807 apply 2147483649 -> #223800008c78af49 -decd808 apply 4294967294 -> #2238000115afb55a -decd809 apply 4294967295 -> #2238000115afb55b -decd810 apply 4294967296 -> #2238000115afb57a -decd811 apply 4294967297 -> #2238000115afb57b - -decd820 apply #a23800008c78af46 -> -2147483646 -decd821 apply #a23800008c78af47 -> -2147483647 -decd822 apply #a23800008c78af48 -> -2147483648 -decd823 apply #a23800008c78af49 -> -2147483649 -decd824 apply #223800008c78af46 -> 2147483646 -decd825 apply #223800008c78af47 -> 2147483647 -decd826 apply #223800008c78af48 -> 2147483648 -decd827 apply #223800008c78af49 -> 2147483649 -decd828 apply #2238000115afb55a -> 4294967294 -decd829 apply #2238000115afb55b -> 4294967295 -decd830 apply #2238000115afb57a -> 4294967296 -decd831 apply #2238000115afb57b -> 4294967297 - --- for narrowing -decd840 apply #2870000000000000 -> 2.000000000000000E-99 - --- some miscellaneous -decd850 apply #0004070000000000 -> 7.000000000000E-385 Subnormal -decd851 apply #0008000000020000 -> 1.00000E-391 Subnormal - +------------------------------------------------------------------------ +-- ddEncode.decTest -- decimal eight-byte format testcases -- +-- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +-- [Previously called decimal64.decTest] +version: 2.59 + +-- This set of tests is for the eight-byte concrete representation. +-- Its characteristics are: +-- +-- 1 bit sign +-- 5 bits combination field +-- 8 bits exponent continuation +-- 50 bits coefficient continuation +-- +-- Total exponent length 10 bits +-- Total coefficient length 54 bits (16 digits) +-- +-- Elimit = 767 (maximum encoded exponent) +-- Emax = 384 (largest exponent value) +-- Emin = -383 (smallest exponent value) +-- bias = 398 (subtracted from encoded exponent) = -Etiny + +-- The testcases here have only exactly representable data on the +-- 'left-hand-side'; rounding from strings is tested in 'base' +-- testcase groups. + +extended: 1 +clamp: 1 +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +-- General testcases +-- (mostly derived from the Strawman 4 document and examples) +dece001 apply #A2300000000003D0 -> -7.50 +dece002 apply -7.50 -> #A2300000000003D0 +-- derivative canonical plain strings +dece003 apply #A23c0000000003D0 -> -7.50E+3 +dece004 apply -7.50E+3 -> #A23c0000000003D0 +dece005 apply #A2380000000003D0 -> -750 +dece006 apply -750 -> #A2380000000003D0 +dece007 apply #A2340000000003D0 -> -75.0 +dece008 apply -75.0 -> #A2340000000003D0 +dece009 apply #A22c0000000003D0 -> -0.750 +dece010 apply -0.750 -> #A22c0000000003D0 +dece011 apply #A2280000000003D0 -> -0.0750 +dece012 apply -0.0750 -> #A2280000000003D0 +dece013 apply #A2200000000003D0 -> -0.000750 +dece014 apply -0.000750 -> #A2200000000003D0 +dece015 apply #A2180000000003D0 -> -0.00000750 +dece016 apply -0.00000750 -> #A2180000000003D0 +dece017 apply #A2140000000003D0 -> -7.50E-7 +dece018 apply -7.50E-7 -> #A2140000000003D0 + +-- Normality +dece020 apply 1234567890123456 -> #263934b9c1e28e56 +dece021 apply -1234567890123456 -> #a63934b9c1e28e56 +dece022 apply 1234.567890123456 -> #260934b9c1e28e56 +dece023 apply #260934b9c1e28e56 -> 1234.567890123456 +dece024 apply 1111111111111111 -> #2638912449124491 +dece025 apply 9999999999999999 -> #6e38ff3fcff3fcff + +-- Nmax and similar +dece031 apply 9999999999999999E+369 -> #77fcff3fcff3fcff +dece032 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff +dece033 apply #77fcff3fcff3fcff -> 9.999999999999999E+384 +dece034 apply 1.234567890123456E+384 -> #47fd34b9c1e28e56 +dece035 apply #47fd34b9c1e28e56 -> 1.234567890123456E+384 +-- fold-downs (more below) +dece036 apply 1.23E+384 -> #47fd300000000000 Clamped +dece037 apply #47fd300000000000 -> 1.230000000000000E+384 +decd038 apply 1E+384 -> #47fc000000000000 Clamped +decd039 apply #47fc000000000000 -> 1.000000000000000E+384 + +decd051 apply 12345 -> #22380000000049c5 +decd052 apply #22380000000049c5 -> 12345 +decd053 apply 1234 -> #2238000000000534 +decd054 apply #2238000000000534 -> 1234 +decd055 apply 123 -> #22380000000000a3 +decd056 apply #22380000000000a3 -> 123 +decd057 apply 12 -> #2238000000000012 +decd058 apply #2238000000000012 -> 12 +decd059 apply 1 -> #2238000000000001 +decd060 apply #2238000000000001 -> 1 +decd061 apply 1.23 -> #22300000000000a3 +decd062 apply #22300000000000a3 -> 1.23 +decd063 apply 123.45 -> #22300000000049c5 +decd064 apply #22300000000049c5 -> 123.45 + +-- Nmin and below +decd071 apply 1E-383 -> #003c000000000001 +decd072 apply #003c000000000001 -> 1E-383 +decd073 apply 1.000000000000000E-383 -> #0400000000000000 +decd074 apply #0400000000000000 -> 1.000000000000000E-383 +decd075 apply 1.000000000000001E-383 -> #0400000000000001 +decd076 apply #0400000000000001 -> 1.000000000000001E-383 + +decd077 apply 0.100000000000000E-383 -> #0000800000000000 Subnormal +decd078 apply #0000800000000000 -> 1.00000000000000E-384 Subnormal +decd079 apply 0.000000000000010E-383 -> #0000000000000010 Subnormal +decd080 apply #0000000000000010 -> 1.0E-397 Subnormal +decd081 apply 0.00000000000001E-383 -> #0004000000000001 Subnormal +decd082 apply #0004000000000001 -> 1E-397 Subnormal +decd083 apply 0.000000000000001E-383 -> #0000000000000001 Subnormal +decd084 apply #0000000000000001 -> 1E-398 Subnormal +-- next is smallest all-nines +decd085 apply 9999999999999999E-398 -> #6400ff3fcff3fcff +decd086 apply #6400ff3fcff3fcff -> 9.999999999999999E-383 +-- and a problematic divide result +decd088 apply 1.111111111111111E-383 -> #0400912449124491 +decd089 apply #0400912449124491 -> 1.111111111111111E-383 + +-- forties +decd090 apply 40 -> #2238000000000040 +decd091 apply 39.99 -> #2230000000000cff + +-- underflows cannot be tested as all LHS exact + +-- Same again, negatives +-- Nmax and similar +decd122 apply -9.999999999999999E+384 -> #f7fcff3fcff3fcff +decd123 apply #f7fcff3fcff3fcff -> -9.999999999999999E+384 +decd124 apply -1.234567890123456E+384 -> #c7fd34b9c1e28e56 +decd125 apply #c7fd34b9c1e28e56 -> -1.234567890123456E+384 +-- fold-downs (more below) +decd130 apply -1.23E+384 -> #c7fd300000000000 Clamped +decd131 apply #c7fd300000000000 -> -1.230000000000000E+384 +decd132 apply -1E+384 -> #c7fc000000000000 Clamped +decd133 apply #c7fc000000000000 -> -1.000000000000000E+384 + +-- overflows +decd151 apply -12345 -> #a2380000000049c5 +decd152 apply #a2380000000049c5 -> -12345 +decd153 apply -1234 -> #a238000000000534 +decd154 apply #a238000000000534 -> -1234 +decd155 apply -123 -> #a2380000000000a3 +decd156 apply #a2380000000000a3 -> -123 +decd157 apply -12 -> #a238000000000012 +decd158 apply #a238000000000012 -> -12 +decd159 apply -1 -> #a238000000000001 +decd160 apply #a238000000000001 -> -1 +decd161 apply -1.23 -> #a2300000000000a3 +decd162 apply #a2300000000000a3 -> -1.23 +decd163 apply -123.45 -> #a2300000000049c5 +decd164 apply #a2300000000049c5 -> -123.45 + +-- Nmin and below +decd171 apply -1E-383 -> #803c000000000001 +decd172 apply #803c000000000001 -> -1E-383 +decd173 apply -1.000000000000000E-383 -> #8400000000000000 +decd174 apply #8400000000000000 -> -1.000000000000000E-383 +decd175 apply -1.000000000000001E-383 -> #8400000000000001 +decd176 apply #8400000000000001 -> -1.000000000000001E-383 + +decd177 apply -0.100000000000000E-383 -> #8000800000000000 Subnormal +decd178 apply #8000800000000000 -> -1.00000000000000E-384 Subnormal +decd179 apply -0.000000000000010E-383 -> #8000000000000010 Subnormal +decd180 apply #8000000000000010 -> -1.0E-397 Subnormal +decd181 apply -0.00000000000001E-383 -> #8004000000000001 Subnormal +decd182 apply #8004000000000001 -> -1E-397 Subnormal +decd183 apply -0.000000000000001E-383 -> #8000000000000001 Subnormal +decd184 apply #8000000000000001 -> -1E-398 Subnormal +-- next is smallest all-nines +decd185 apply -9999999999999999E-398 -> #e400ff3fcff3fcff +decd186 apply #e400ff3fcff3fcff -> -9.999999999999999E-383 +-- and a tricky subnormal +decd187 apply 1.11111111111524E-384 -> #00009124491246a4 Subnormal +decd188 apply #00009124491246a4 -> 1.11111111111524E-384 Subnormal + +-- near-underflows +decd189 apply -1e-398 -> #8000000000000001 Subnormal +decd190 apply -1.0e-398 -> #8000000000000001 Subnormal Rounded + +-- zeros +decd401 apply 0E-500 -> #0000000000000000 Clamped +decd402 apply 0E-400 -> #0000000000000000 Clamped +decd403 apply 0E-398 -> #0000000000000000 +decd404 apply #0000000000000000 -> 0E-398 +decd405 apply 0.000000000000000E-383 -> #0000000000000000 +decd406 apply #0000000000000000 -> 0E-398 +decd407 apply 0E-2 -> #2230000000000000 +decd408 apply #2230000000000000 -> 0.00 +decd409 apply 0 -> #2238000000000000 +decd410 apply #2238000000000000 -> 0 +decd411 apply 0E+3 -> #2244000000000000 +decd412 apply #2244000000000000 -> 0E+3 +decd413 apply 0E+369 -> #43fc000000000000 +decd414 apply #43fc000000000000 -> 0E+369 +-- clamped zeros... +decd415 apply 0E+370 -> #43fc000000000000 Clamped +decd416 apply #43fc000000000000 -> 0E+369 +decd417 apply 0E+384 -> #43fc000000000000 Clamped +decd418 apply #43fc000000000000 -> 0E+369 +decd419 apply 0E+400 -> #43fc000000000000 Clamped +decd420 apply #43fc000000000000 -> 0E+369 +decd421 apply 0E+500 -> #43fc000000000000 Clamped +decd422 apply #43fc000000000000 -> 0E+369 + +-- negative zeros +decd431 apply -0E-400 -> #8000000000000000 Clamped +decd432 apply -0E-400 -> #8000000000000000 Clamped +decd433 apply -0E-398 -> #8000000000000000 +decd434 apply #8000000000000000 -> -0E-398 +decd435 apply -0.000000000000000E-383 -> #8000000000000000 +decd436 apply #8000000000000000 -> -0E-398 +decd437 apply -0E-2 -> #a230000000000000 +decd438 apply #a230000000000000 -> -0.00 +decd439 apply -0 -> #a238000000000000 +decd440 apply #a238000000000000 -> -0 +decd441 apply -0E+3 -> #a244000000000000 +decd442 apply #a244000000000000 -> -0E+3 +decd443 apply -0E+369 -> #c3fc000000000000 +decd444 apply #c3fc000000000000 -> -0E+369 +-- clamped zeros... +decd445 apply -0E+370 -> #c3fc000000000000 Clamped +decd446 apply #c3fc000000000000 -> -0E+369 +decd447 apply -0E+384 -> #c3fc000000000000 Clamped +decd448 apply #c3fc000000000000 -> -0E+369 +decd449 apply -0E+400 -> #c3fc000000000000 Clamped +decd450 apply #c3fc000000000000 -> -0E+369 +decd451 apply -0E+500 -> #c3fc000000000000 Clamped +decd452 apply #c3fc000000000000 -> -0E+369 + +-- exponents +decd460 apply #225c000000000007 -> 7E+9 +decd461 apply 7E+9 -> #225c000000000007 +decd462 apply #23c4000000000007 -> 7E+99 +decd463 apply 7E+99 -> #23c4000000000007 + +-- Specials +decd500 apply Infinity -> #7800000000000000 +decd501 apply #7878787878787878 -> #7800000000000000 +decd502 apply #7800000000000000 -> Infinity +decd503 apply #7979797979797979 -> #7800000000000000 +decd504 apply #7900000000000000 -> Infinity +decd505 apply #7a7a7a7a7a7a7a7a -> #7800000000000000 +decd506 apply #7a00000000000000 -> Infinity +decd507 apply #7b7b7b7b7b7b7b7b -> #7800000000000000 +decd508 apply #7b00000000000000 -> Infinity + +decd509 apply NaN -> #7c00000000000000 +decd510 apply #7c7c7c7c7c7c7c7c -> #7c007c7c7c7c7c7c +decd511 apply #7c00000000000000 -> NaN +decd512 apply #7d7d7d7d7d7d7d7d -> #7c017d7d7d7d7d7d +decd513 apply #7d00000000000000 -> NaN +decd514 apply #7e7e7e7e7e7e7e7e -> #7e007e7e7e7e7c7e +decd515 apply #7e00000000000000 -> sNaN +decd516 apply #7f7f7f7f7f7f7f7f -> #7e007f7f7f7f7c7f +decd517 apply #7f00000000000000 -> sNaN +decd518 apply #7fffffffffffffff -> sNaN999999999999999 +decd519 apply #7fffffffffffffff -> #7e00ff3fcff3fcff + +decd520 apply -Infinity -> #f800000000000000 +decd521 apply #f878787878787878 -> #f800000000000000 +decd522 apply #f800000000000000 -> -Infinity +decd523 apply #f979797979797979 -> #f800000000000000 +decd524 apply #f900000000000000 -> -Infinity +decd525 apply #fa7a7a7a7a7a7a7a -> #f800000000000000 +decd526 apply #fa00000000000000 -> -Infinity +decd527 apply #fb7b7b7b7b7b7b7b -> #f800000000000000 +decd528 apply #fb00000000000000 -> -Infinity + +decd529 apply -NaN -> #fc00000000000000 +decd530 apply #fc7c7c7c7c7c7c7c -> #fc007c7c7c7c7c7c +decd531 apply #fc00000000000000 -> -NaN +decd532 apply #fd7d7d7d7d7d7d7d -> #fc017d7d7d7d7d7d +decd533 apply #fd00000000000000 -> -NaN +decd534 apply #fe7e7e7e7e7e7e7e -> #fe007e7e7e7e7c7e +decd535 apply #fe00000000000000 -> -sNaN +decd536 apply #ff7f7f7f7f7f7f7f -> #fe007f7f7f7f7c7f +decd537 apply #ff00000000000000 -> -sNaN +decd538 apply #ffffffffffffffff -> -sNaN999999999999999 +decd539 apply #ffffffffffffffff -> #fe00ff3fcff3fcff + +-- diagnostic NaNs +decd540 apply NaN -> #7c00000000000000 +decd541 apply NaN0 -> #7c00000000000000 +decd542 apply NaN1 -> #7c00000000000001 +decd543 apply NaN12 -> #7c00000000000012 +decd544 apply NaN79 -> #7c00000000000079 +decd545 apply NaN12345 -> #7c000000000049c5 +decd546 apply NaN123456 -> #7c00000000028e56 +decd547 apply NaN799799 -> #7c000000000f7fdf +decd548 apply NaN799799799799799 -> #7c03dff7fdff7fdf +decd549 apply NaN999999999999999 -> #7c00ff3fcff3fcff +-- too many digits + +-- fold-down full sequence +decd601 apply 1E+384 -> #47fc000000000000 Clamped +decd602 apply #47fc000000000000 -> 1.000000000000000E+384 +decd603 apply 1E+383 -> #43fc800000000000 Clamped +decd604 apply #43fc800000000000 -> 1.00000000000000E+383 +decd605 apply 1E+382 -> #43fc100000000000 Clamped +decd606 apply #43fc100000000000 -> 1.0000000000000E+382 +decd607 apply 1E+381 -> #43fc010000000000 Clamped +decd608 apply #43fc010000000000 -> 1.000000000000E+381 +decd609 apply 1E+380 -> #43fc002000000000 Clamped +decd610 apply #43fc002000000000 -> 1.00000000000E+380 +decd611 apply 1E+379 -> #43fc000400000000 Clamped +decd612 apply #43fc000400000000 -> 1.0000000000E+379 +decd613 apply 1E+378 -> #43fc000040000000 Clamped +decd614 apply #43fc000040000000 -> 1.000000000E+378 +decd615 apply 1E+377 -> #43fc000008000000 Clamped +decd616 apply #43fc000008000000 -> 1.00000000E+377 +decd617 apply 1E+376 -> #43fc000001000000 Clamped +decd618 apply #43fc000001000000 -> 1.0000000E+376 +decd619 apply 1E+375 -> #43fc000000100000 Clamped +decd620 apply #43fc000000100000 -> 1.000000E+375 +decd621 apply 1E+374 -> #43fc000000020000 Clamped +decd622 apply #43fc000000020000 -> 1.00000E+374 +decd623 apply 1E+373 -> #43fc000000004000 Clamped +decd624 apply #43fc000000004000 -> 1.0000E+373 +decd625 apply 1E+372 -> #43fc000000000400 Clamped +decd626 apply #43fc000000000400 -> 1.000E+372 +decd627 apply 1E+371 -> #43fc000000000080 Clamped +decd628 apply #43fc000000000080 -> 1.00E+371 +decd629 apply 1E+370 -> #43fc000000000010 Clamped +decd630 apply #43fc000000000010 -> 1.0E+370 +decd631 apply 1E+369 -> #43fc000000000001 +decd632 apply #43fc000000000001 -> 1E+369 +decd633 apply 1E+368 -> #43f8000000000001 +decd634 apply #43f8000000000001 -> 1E+368 +-- same with 9s +decd641 apply 9E+384 -> #77fc000000000000 Clamped +decd642 apply #77fc000000000000 -> 9.000000000000000E+384 +decd643 apply 9E+383 -> #43fc8c0000000000 Clamped +decd644 apply #43fc8c0000000000 -> 9.00000000000000E+383 +decd645 apply 9E+382 -> #43fc1a0000000000 Clamped +decd646 apply #43fc1a0000000000 -> 9.0000000000000E+382 +decd647 apply 9E+381 -> #43fc090000000000 Clamped +decd648 apply #43fc090000000000 -> 9.000000000000E+381 +decd649 apply 9E+380 -> #43fc002300000000 Clamped +decd650 apply #43fc002300000000 -> 9.00000000000E+380 +decd651 apply 9E+379 -> #43fc000680000000 Clamped +decd652 apply #43fc000680000000 -> 9.0000000000E+379 +decd653 apply 9E+378 -> #43fc000240000000 Clamped +decd654 apply #43fc000240000000 -> 9.000000000E+378 +decd655 apply 9E+377 -> #43fc000008c00000 Clamped +decd656 apply #43fc000008c00000 -> 9.00000000E+377 +decd657 apply 9E+376 -> #43fc000001a00000 Clamped +decd658 apply #43fc000001a00000 -> 9.0000000E+376 +decd659 apply 9E+375 -> #43fc000000900000 Clamped +decd660 apply #43fc000000900000 -> 9.000000E+375 +decd661 apply 9E+374 -> #43fc000000023000 Clamped +decd662 apply #43fc000000023000 -> 9.00000E+374 +decd663 apply 9E+373 -> #43fc000000006800 Clamped +decd664 apply #43fc000000006800 -> 9.0000E+373 +decd665 apply 9E+372 -> #43fc000000002400 Clamped +decd666 apply #43fc000000002400 -> 9.000E+372 +decd667 apply 9E+371 -> #43fc00000000008c Clamped +decd668 apply #43fc00000000008c -> 9.00E+371 +decd669 apply 9E+370 -> #43fc00000000001a Clamped +decd670 apply #43fc00000000001a -> 9.0E+370 +decd671 apply 9E+369 -> #43fc000000000009 +decd672 apply #43fc000000000009 -> 9E+369 +decd673 apply 9E+368 -> #43f8000000000009 +decd674 apply #43f8000000000009 -> 9E+368 + + +-- Selected DPD codes +decd700 apply #2238000000000000 -> 0 +decd701 apply #2238000000000009 -> 9 +decd702 apply #2238000000000010 -> 10 +decd703 apply #2238000000000019 -> 19 +decd704 apply #2238000000000020 -> 20 +decd705 apply #2238000000000029 -> 29 +decd706 apply #2238000000000030 -> 30 +decd707 apply #2238000000000039 -> 39 +decd708 apply #2238000000000040 -> 40 +decd709 apply #2238000000000049 -> 49 +decd710 apply #2238000000000050 -> 50 +decd711 apply #2238000000000059 -> 59 +decd712 apply #2238000000000060 -> 60 +decd713 apply #2238000000000069 -> 69 +decd714 apply #2238000000000070 -> 70 +decd715 apply #2238000000000071 -> 71 +decd716 apply #2238000000000072 -> 72 +decd717 apply #2238000000000073 -> 73 +decd718 apply #2238000000000074 -> 74 +decd719 apply #2238000000000075 -> 75 +decd720 apply #2238000000000076 -> 76 +decd721 apply #2238000000000077 -> 77 +decd722 apply #2238000000000078 -> 78 +decd723 apply #2238000000000079 -> 79 + +decd725 apply #223800000000029e -> 994 +decd726 apply #223800000000029f -> 995 +decd727 apply #22380000000002a0 -> 520 +decd728 apply #22380000000002a1 -> 521 +-- from telco test data +decd730 apply #2238000000000188 -> 308 +decd731 apply #22380000000001a3 -> 323 +decd732 apply #223800000000002a -> 82 +decd733 apply #22380000000001a9 -> 329 +decd734 apply #2238000000000081 -> 101 +decd735 apply #22380000000002a2 -> 522 + +-- DPD: one of each of the huffman groups +decd740 apply #22380000000003f7 -> 777 +decd741 apply #22380000000003f8 -> 778 +decd742 apply #22380000000003eb -> 787 +decd743 apply #223800000000037d -> 877 +decd744 apply #223800000000039f -> 997 +decd745 apply #22380000000003bf -> 979 +decd746 apply #22380000000003df -> 799 +decd747 apply #223800000000006e -> 888 + +-- DPD all-highs cases (includes the 24 redundant codes) +decd750 apply #223800000000006e -> 888 +decd751 apply #223800000000016e -> 888 +decd752 apply #223800000000026e -> 888 +decd753 apply #223800000000036e -> 888 +decd754 apply #223800000000006f -> 889 +decd755 apply #223800000000016f -> 889 +decd756 apply #223800000000026f -> 889 +decd757 apply #223800000000036f -> 889 + +decd760 apply #223800000000007e -> 898 +decd761 apply #223800000000017e -> 898 +decd762 apply #223800000000027e -> 898 +decd763 apply #223800000000037e -> 898 +decd764 apply #223800000000007f -> 899 +decd765 apply #223800000000017f -> 899 +decd766 apply #223800000000027f -> 899 +decd767 apply #223800000000037f -> 899 + +decd770 apply #22380000000000ee -> 988 +decd771 apply #22380000000001ee -> 988 +decd772 apply #22380000000002ee -> 988 +decd773 apply #22380000000003ee -> 988 +decd774 apply #22380000000000ef -> 989 +decd775 apply #22380000000001ef -> 989 +decd776 apply #22380000000002ef -> 989 +decd777 apply #22380000000003ef -> 989 + +decd780 apply #22380000000000fe -> 998 +decd781 apply #22380000000001fe -> 998 +decd782 apply #22380000000002fe -> 998 +decd783 apply #22380000000003fe -> 998 +decd784 apply #22380000000000ff -> 999 +decd785 apply #22380000000001ff -> 999 +decd786 apply #22380000000002ff -> 999 +decd787 apply #22380000000003ff -> 999 + +-- values around [u]int32 edges (zeros done earlier) +decd800 apply -2147483646 -> #a23800008c78af46 +decd801 apply -2147483647 -> #a23800008c78af47 +decd802 apply -2147483648 -> #a23800008c78af48 +decd803 apply -2147483649 -> #a23800008c78af49 +decd804 apply 2147483646 -> #223800008c78af46 +decd805 apply 2147483647 -> #223800008c78af47 +decd806 apply 2147483648 -> #223800008c78af48 +decd807 apply 2147483649 -> #223800008c78af49 +decd808 apply 4294967294 -> #2238000115afb55a +decd809 apply 4294967295 -> #2238000115afb55b +decd810 apply 4294967296 -> #2238000115afb57a +decd811 apply 4294967297 -> #2238000115afb57b + +decd820 apply #a23800008c78af46 -> -2147483646 +decd821 apply #a23800008c78af47 -> -2147483647 +decd822 apply #a23800008c78af48 -> -2147483648 +decd823 apply #a23800008c78af49 -> -2147483649 +decd824 apply #223800008c78af46 -> 2147483646 +decd825 apply #223800008c78af47 -> 2147483647 +decd826 apply #223800008c78af48 -> 2147483648 +decd827 apply #223800008c78af49 -> 2147483649 +decd828 apply #2238000115afb55a -> 4294967294 +decd829 apply #2238000115afb55b -> 4294967295 +decd830 apply #2238000115afb57a -> 4294967296 +decd831 apply #2238000115afb57b -> 4294967297 + +-- for narrowing +decd840 apply #2870000000000000 -> 2.000000000000000E-99 + +-- some miscellaneous +decd850 apply #0004070000000000 -> 7.000000000000E-385 Subnormal +decd851 apply #0008000000020000 -> 1.00000E-391 Subnormal + diff --git a/Lib/test/decimaltestdata/ddFMA.decTest b/Lib/test/decimaltestdata/ddFMA.decTest index 7f2e5230374..1c23e0310e7 100644 --- a/Lib/test/decimaltestdata/ddFMA.decTest +++ b/Lib/test/decimaltestdata/ddFMA.decTest @@ -1,1698 +1,1698 @@ ------------------------------------------------------------------------- --- ddFMA.decTest -- decDouble Fused Multiply Add -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- These tests comprise three parts: --- 1. Sanity checks and other three-operand tests (especially those --- where the fused operation makes a difference) --- 2. Multiply tests (third operand is neutral zero [0E+emax]) --- 3. Addition tests (first operand is 1) --- The multiply and addition tests are extensive because FMA may have --- its own dedicated multiplication or addition routine(s), and they --- also inherently check the left-to-right properties. - --- Sanity checks -ddfma0001 fma 1 1 1 -> 2 -ddfma0002 fma 1 1 2 -> 3 -ddfma0003 fma 2 2 3 -> 7 -ddfma0004 fma 9 9 9 -> 90 -ddfma0005 fma -1 1 1 -> 0 -ddfma0006 fma -1 1 2 -> 1 -ddfma0007 fma -2 2 3 -> -1 -ddfma0008 fma -9 9 9 -> -72 -ddfma0011 fma 1 -1 1 -> 0 -ddfma0012 fma 1 -1 2 -> 1 -ddfma0013 fma 2 -2 3 -> -1 -ddfma0014 fma 9 -9 9 -> -72 -ddfma0015 fma 1 1 -1 -> 0 -ddfma0016 fma 1 1 -2 -> -1 -ddfma0017 fma 2 2 -3 -> 1 -ddfma0018 fma 9 9 -9 -> 72 - --- non-integer exacts -ddfma0100 fma 25.2 63.6 -438 -> 1164.72 -ddfma0101 fma 0.301 0.380 334 -> 334.114380 -ddfma0102 fma 49.2 -4.8 23.3 -> -212.86 -ddfma0103 fma 4.22 0.079 -94.6 -> -94.26662 -ddfma0104 fma 903 0.797 0.887 -> 720.578 -ddfma0105 fma 6.13 -161 65.9 -> -921.03 -ddfma0106 fma 28.2 727 5.45 -> 20506.85 -ddfma0107 fma 4 605 688 -> 3108 -ddfma0108 fma 93.3 0.19 0.226 -> 17.953 -ddfma0109 fma 0.169 -341 5.61 -> -52.019 -ddfma0110 fma -72.2 30 -51.2 -> -2217.2 -ddfma0111 fma -0.409 13 20.4 -> 15.083 -ddfma0112 fma 317 77.0 19.0 -> 24428.0 -ddfma0113 fma 47 6.58 1.62 -> 310.88 -ddfma0114 fma 1.36 0.984 0.493 -> 1.83124 -ddfma0115 fma 72.7 274 1.56 -> 19921.36 -ddfma0116 fma 335 847 83 -> 283828 -ddfma0117 fma 666 0.247 25.4 -> 189.902 -ddfma0118 fma -3.87 3.06 78.0 -> 66.1578 -ddfma0119 fma 0.742 192 35.6 -> 178.064 -ddfma0120 fma -91.6 5.29 0.153 -> -484.411 - --- cases where result is different from separate multiply + add; each --- is preceded by the result of unfused multiply and add --- [this is about 20% of all similar cases in general] --- -> 7.123356429257969E+16 -ddfma0201 fma 27583489.6645 2582471078.04 2593183.42371 -> 7.123356429257970E+16 Inexact Rounded --- -> 22813275328.80506 -ddfma0208 fma 24280.355566 939577.397653 2032.013252 -> 22813275328.80507 Inexact Rounded --- -> -2.030397734278062E+16 -ddfma0209 fma 7848976432 -2586831.2281 137903.517909 -> -2.030397734278061E+16 Inexact Rounded --- -> 2040774094814.077 -ddfma0217 fma 56890.388731 35872030.4255 339337.123410 -> 2040774094814.078 Inexact Rounded --- -> 2.714469575205049E+18 -ddfma0220 fma 7533543.57445 360317763928 5073392.31638 -> 2.714469575205050E+18 Inexact Rounded --- -> 1.011676297716716E+19 -ddfma0223 fma 739945255.563 13672312784.1 -994381.53572 -> 1.011676297716715E+19 Inexact Rounded --- -> -2.914135721455315E+23 -ddfma0224 fma -413510957218 704729988550 9234162614.0 -> -2.914135721455314E+23 Inexact Rounded --- -> 2.620119863365786E+17 -ddfma0226 fma 437484.00601 598906432790 894450638.442 -> 2.620119863365787E+17 Inexact Rounded --- -> 1.272647995808178E+19 -ddfma0253 fma 73287556929 173651305.784 -358312568.389 -> 1.272647995808177E+19 Inexact Rounded --- -> -1.753769320861851E+18 -ddfma0257 fma 203258304486 -8628278.8066 153127.446727 -> -1.753769320861850E+18 Inexact Rounded --- -> -1.550737835263346E+17 -ddfma0260 fma 42560533.1774 -3643605282.86 178277.96377 -> -1.550737835263347E+17 Inexact Rounded --- -> 2.897624620576005E+22 -ddfma0269 fma 142656587375 203118879670 604576103991 -> 2.897624620576004E+22 Inexact Rounded - --- Cases where multiply would overflow or underflow if separate -fma0300 fma 9e+384 10 0 -> Infinity Overflow Inexact Rounded -fma0301 fma 1e+384 10 0 -> Infinity Overflow Inexact Rounded -fma0302 fma 1e+384 10 -1e+384 -> 9.000000000000000E+384 Clamped -fma0303 fma 1e+384 10 -9e+384 -> 1.000000000000000E+384 Clamped --- subnormal etc. -fma0305 fma 1e-398 0.1 0 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -fma0306 fma 1e-398 0.1 1 -> 1.000000000000000 Inexact Rounded -fma0307 fma 1e-398 0.1 1e-398 -> 1E-398 Underflow Subnormal Inexact Rounded - --- Infinite combinations -ddfma0800 fma Inf Inf Inf -> Infinity -ddfma0801 fma Inf Inf -Inf -> NaN Invalid_operation -ddfma0802 fma Inf -Inf Inf -> NaN Invalid_operation -ddfma0803 fma Inf -Inf -Inf -> -Infinity -ddfma0804 fma -Inf Inf Inf -> NaN Invalid_operation -ddfma0805 fma -Inf Inf -Inf -> -Infinity -ddfma0806 fma -Inf -Inf Inf -> Infinity -ddfma0807 fma -Inf -Inf -Inf -> NaN Invalid_operation - --- Triple NaN propagation -ddfma0900 fma NaN2 NaN3 NaN5 -> NaN2 -ddfma0901 fma 0 NaN3 NaN5 -> NaN3 -ddfma0902 fma 0 0 NaN5 -> NaN5 --- first sNaN wins (consider qNaN from earlier sNaN being --- overridden by an sNaN in third operand) -ddfma0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -ddfma0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation -ddfma0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation -ddfma0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -ddfma0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation -ddfma0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation - --- MULTIPLICATION TESTS ------------------------------------------------ - --- sanity checks -ddfma2000 fma 2 2 0e+384 -> 4 -ddfma2001 fma 2 3 0e+384 -> 6 -ddfma2002 fma 5 1 0e+384 -> 5 -ddfma2003 fma 5 2 0e+384 -> 10 -ddfma2004 fma 1.20 2 0e+384 -> 2.40 -ddfma2005 fma 1.20 0 0e+384 -> 0.00 -ddfma2006 fma 1.20 -2 0e+384 -> -2.40 -ddfma2007 fma -1.20 2 0e+384 -> -2.40 -ddfma2008 fma -1.20 0 0e+384 -> 0.00 -ddfma2009 fma -1.20 -2 0e+384 -> 2.40 -ddfma2010 fma 5.09 7.1 0e+384 -> 36.139 -ddfma2011 fma 2.5 4 0e+384 -> 10.0 -ddfma2012 fma 2.50 4 0e+384 -> 10.00 -ddfma2013 fma 1.23456789 1.00000000 0e+384 -> 1.234567890000000 Rounded -ddfma2015 fma 2.50 4 0e+384 -> 10.00 -ddfma2016 fma 9.999999999 9.999999999 0e+384 -> 99.99999998000000 Inexact Rounded -ddfma2017 fma 9.999999999 -9.999999999 0e+384 -> -99.99999998000000 Inexact Rounded -ddfma2018 fma -9.999999999 9.999999999 0e+384 -> -99.99999998000000 Inexact Rounded -ddfma2019 fma -9.999999999 -9.999999999 0e+384 -> 99.99999998000000 Inexact Rounded - --- zeros, etc. -ddfma2021 fma 0 0 0e+384 -> 0 -ddfma2022 fma 0 -0 0e+384 -> 0 -ddfma2023 fma -0 0 0e+384 -> 0 -ddfma2024 fma -0 -0 0e+384 -> 0 -ddfma2025 fma -0.0 -0.0 0e+384 -> 0.00 -ddfma2026 fma -0.0 -0.0 0e+384 -> 0.00 -ddfma2027 fma -0.0 -0.0 0e+384 -> 0.00 -ddfma2028 fma -0.0 -0.0 0e+384 -> 0.00 -ddfma2030 fma 5.00 1E-3 0e+384 -> 0.00500 -ddfma2031 fma 00.00 0.000 0e+384 -> 0.00000 -ddfma2032 fma 00.00 0E-3 0e+384 -> 0.00000 -- rhs is 0 -ddfma2033 fma 0E-3 00.00 0e+384 -> 0.00000 -- lhs is 0 -ddfma2034 fma -5.00 1E-3 0e+384 -> -0.00500 -ddfma2035 fma -00.00 0.000 0e+384 -> 0.00000 -ddfma2036 fma -00.00 0E-3 0e+384 -> 0.00000 -- rhs is 0 -ddfma2037 fma -0E-3 00.00 0e+384 -> 0.00000 -- lhs is 0 -ddfma2038 fma 5.00 -1E-3 0e+384 -> -0.00500 -ddfma2039 fma 00.00 -0.000 0e+384 -> 0.00000 -ddfma2040 fma 00.00 -0E-3 0e+384 -> 0.00000 -- rhs is 0 -ddfma2041 fma 0E-3 -00.00 0e+384 -> 0.00000 -- lhs is 0 -ddfma2042 fma -5.00 -1E-3 0e+384 -> 0.00500 -ddfma2043 fma -00.00 -0.000 0e+384 -> 0.00000 -ddfma2044 fma -00.00 -0E-3 0e+384 -> 0.00000 -- rhs is 0 -ddfma2045 fma -0E-3 -00.00 -0e+384 -> 0.00000 -- lhs is 0 -ddfma2046 fma -0E-3 00.00 -0e+384 -> -0.00000 -ddfma2047 fma 0E-3 -00.00 -0e+384 -> -0.00000 -ddfma2048 fma 0E-3 00.00 -0e+384 -> 0.00000 - --- examples from decarith -ddfma2050 fma 1.20 3 0e+384 -> 3.60 -ddfma2051 fma 7 3 0e+384 -> 21 -ddfma2052 fma 0.9 0.8 0e+384 -> 0.72 -ddfma2053 fma 0.9 -0 0e+384 -> 0.0 -ddfma2054 fma 654321 654321 0e+384 -> 428135971041 - -ddfma2060 fma 123.45 1e7 0e+384 -> 1.2345E+9 -ddfma2061 fma 123.45 1e8 0e+384 -> 1.2345E+10 -ddfma2062 fma 123.45 1e+9 0e+384 -> 1.2345E+11 -ddfma2063 fma 123.45 1e10 0e+384 -> 1.2345E+12 -ddfma2064 fma 123.45 1e11 0e+384 -> 1.2345E+13 -ddfma2065 fma 123.45 1e12 0e+384 -> 1.2345E+14 -ddfma2066 fma 123.45 1e13 0e+384 -> 1.2345E+15 - - --- test some intermediate lengths --- 1234567890123456 -ddfma2080 fma 0.1 1230123456456789 0e+384 -> 123012345645678.9 -ddfma2084 fma 0.1 1230123456456789 0e+384 -> 123012345645678.9 -ddfma2090 fma 1230123456456789 0.1 0e+384 -> 123012345645678.9 -ddfma2094 fma 1230123456456789 0.1 0e+384 -> 123012345645678.9 - --- test some more edge cases and carries -ddfma2101 fma 9 9 0e+384 -> 81 -ddfma2102 fma 9 90 0e+384 -> 810 -ddfma2103 fma 9 900 0e+384 -> 8100 -ddfma2104 fma 9 9000 0e+384 -> 81000 -ddfma2105 fma 9 90000 0e+384 -> 810000 -ddfma2106 fma 9 900000 0e+384 -> 8100000 -ddfma2107 fma 9 9000000 0e+384 -> 81000000 -ddfma2108 fma 9 90000000 0e+384 -> 810000000 -ddfma2109 fma 9 900000000 0e+384 -> 8100000000 -ddfma2110 fma 9 9000000000 0e+384 -> 81000000000 -ddfma2111 fma 9 90000000000 0e+384 -> 810000000000 -ddfma2112 fma 9 900000000000 0e+384 -> 8100000000000 -ddfma2113 fma 9 9000000000000 0e+384 -> 81000000000000 -ddfma2114 fma 9 90000000000000 0e+384 -> 810000000000000 -ddfma2115 fma 9 900000000000000 0e+384 -> 8100000000000000 ---ddfma2116 fma 9 9000000000000000 0e+384 -> 81000000000000000 ---ddfma2117 fma 9 90000000000000000 0e+384 -> 810000000000000000 ---ddfma2118 fma 9 900000000000000000 0e+384 -> 8100000000000000000 ---ddfma2119 fma 9 9000000000000000000 0e+384 -> 81000000000000000000 ---ddfma2120 fma 9 90000000000000000000 0e+384 -> 810000000000000000000 ---ddfma2121 fma 9 900000000000000000000 0e+384 -> 8100000000000000000000 ---ddfma2122 fma 9 9000000000000000000000 0e+384 -> 81000000000000000000000 ---ddfma2123 fma 9 90000000000000000000000 0e+384 -> 810000000000000000000000 --- test some more edge cases without carries -ddfma2131 fma 3 3 0e+384 -> 9 -ddfma2132 fma 3 30 0e+384 -> 90 -ddfma2133 fma 3 300 0e+384 -> 900 -ddfma2134 fma 3 3000 0e+384 -> 9000 -ddfma2135 fma 3 30000 0e+384 -> 90000 -ddfma2136 fma 3 300000 0e+384 -> 900000 -ddfma2137 fma 3 3000000 0e+384 -> 9000000 -ddfma2138 fma 3 30000000 0e+384 -> 90000000 -ddfma2139 fma 3 300000000 0e+384 -> 900000000 -ddfma2140 fma 3 3000000000 0e+384 -> 9000000000 -ddfma2141 fma 3 30000000000 0e+384 -> 90000000000 -ddfma2142 fma 3 300000000000 0e+384 -> 900000000000 -ddfma2143 fma 3 3000000000000 0e+384 -> 9000000000000 -ddfma2144 fma 3 30000000000000 0e+384 -> 90000000000000 -ddfma2145 fma 3 300000000000000 0e+384 -> 900000000000000 - --- test some edge cases with exact rounding -ddfma2301 fma 9 9 0e+384 -> 81 -ddfma2302 fma 9 90 0e+384 -> 810 -ddfma2303 fma 9 900 0e+384 -> 8100 -ddfma2304 fma 9 9000 0e+384 -> 81000 -ddfma2305 fma 9 90000 0e+384 -> 810000 -ddfma2306 fma 9 900000 0e+384 -> 8100000 -ddfma2307 fma 9 9000000 0e+384 -> 81000000 -ddfma2308 fma 9 90000000 0e+384 -> 810000000 -ddfma2309 fma 9 900000000 0e+384 -> 8100000000 -ddfma2310 fma 9 9000000000 0e+384 -> 81000000000 -ddfma2311 fma 9 90000000000 0e+384 -> 810000000000 -ddfma2312 fma 9 900000000000 0e+384 -> 8100000000000 -ddfma2313 fma 9 9000000000000 0e+384 -> 81000000000000 -ddfma2314 fma 9 90000000000000 0e+384 -> 810000000000000 -ddfma2315 fma 9 900000000000000 0e+384 -> 8100000000000000 -ddfma2316 fma 9 9000000000000000 0e+384 -> 8.100000000000000E+16 Rounded -ddfma2317 fma 90 9000000000000000 0e+384 -> 8.100000000000000E+17 Rounded -ddfma2318 fma 900 9000000000000000 0e+384 -> 8.100000000000000E+18 Rounded -ddfma2319 fma 9000 9000000000000000 0e+384 -> 8.100000000000000E+19 Rounded -ddfma2320 fma 90000 9000000000000000 0e+384 -> 8.100000000000000E+20 Rounded -ddfma2321 fma 900000 9000000000000000 0e+384 -> 8.100000000000000E+21 Rounded -ddfma2322 fma 9000000 9000000000000000 0e+384 -> 8.100000000000000E+22 Rounded -ddfma2323 fma 90000000 9000000000000000 0e+384 -> 8.100000000000000E+23 Rounded - --- tryzeros cases -ddfma2504 fma 0E-260 1000E-260 0e+384 -> 0E-398 Clamped -ddfma2505 fma 100E+260 0E+260 0e+384 -> 0E+369 Clamped - --- mixed with zeros -ddfma2541 fma 0 -1 0e+384 -> 0 -ddfma2542 fma -0 -1 0e+384 -> 0 -ddfma2543 fma 0 1 0e+384 -> 0 -ddfma2544 fma -0 1 0e+384 -> 0 -ddfma2545 fma -1 0 0e+384 -> 0 -ddfma2546 fma -1 -0 0e+384 -> 0 -ddfma2547 fma 1 0 0e+384 -> 0 -ddfma2548 fma 1 -0 0e+384 -> 0 - -ddfma2551 fma 0.0 -1 0e+384 -> 0.0 -ddfma2552 fma -0.0 -1 0e+384 -> 0.0 -ddfma2553 fma 0.0 1 0e+384 -> 0.0 -ddfma2554 fma -0.0 1 0e+384 -> 0.0 -ddfma2555 fma -1.0 0 0e+384 -> 0.0 -ddfma2556 fma -1.0 -0 0e+384 -> 0.0 -ddfma2557 fma 1.0 0 0e+384 -> 0.0 -ddfma2558 fma 1.0 -0 0e+384 -> 0.0 - -ddfma2561 fma 0 -1.0 0e+384 -> 0.0 -ddfma2562 fma -0 -1.0 0e+384 -> 0.0 -ddfma2563 fma 0 1.0 0e+384 -> 0.0 -ddfma2564 fma -0 1.0 0e+384 -> 0.0 -ddfma2565 fma -1 0.0 0e+384 -> 0.0 -ddfma2566 fma -1 -0.0 0e+384 -> 0.0 -ddfma2567 fma 1 0.0 0e+384 -> 0.0 -ddfma2568 fma 1 -0.0 0e+384 -> 0.0 - -ddfma2571 fma 0.0 -1.0 0e+384 -> 0.00 -ddfma2572 fma -0.0 -1.0 0e+384 -> 0.00 -ddfma2573 fma 0.0 1.0 0e+384 -> 0.00 -ddfma2574 fma -0.0 1.0 0e+384 -> 0.00 -ddfma2575 fma -1.0 0.0 0e+384 -> 0.00 -ddfma2576 fma -1.0 -0.0 0e+384 -> 0.00 -ddfma2577 fma 1.0 0.0 0e+384 -> 0.00 -ddfma2578 fma 1.0 -0.0 0e+384 -> 0.00 - --- Specials -ddfma2580 fma Inf -Inf 0e+384 -> -Infinity -ddfma2581 fma Inf -1000 0e+384 -> -Infinity -ddfma2582 fma Inf -1 0e+384 -> -Infinity -ddfma2583 fma Inf -0 0e+384 -> NaN Invalid_operation -ddfma2584 fma Inf 0 0e+384 -> NaN Invalid_operation -ddfma2585 fma Inf 1 0e+384 -> Infinity -ddfma2586 fma Inf 1000 0e+384 -> Infinity -ddfma2587 fma Inf Inf 0e+384 -> Infinity -ddfma2588 fma -1000 Inf 0e+384 -> -Infinity -ddfma2589 fma -Inf Inf 0e+384 -> -Infinity -ddfma2590 fma -1 Inf 0e+384 -> -Infinity -ddfma2591 fma -0 Inf 0e+384 -> NaN Invalid_operation -ddfma2592 fma 0 Inf 0e+384 -> NaN Invalid_operation -ddfma2593 fma 1 Inf 0e+384 -> Infinity -ddfma2594 fma 1000 Inf 0e+384 -> Infinity -ddfma2595 fma Inf Inf 0e+384 -> Infinity - -ddfma2600 fma -Inf -Inf 0e+384 -> Infinity -ddfma2601 fma -Inf -1000 0e+384 -> Infinity -ddfma2602 fma -Inf -1 0e+384 -> Infinity -ddfma2603 fma -Inf -0 0e+384 -> NaN Invalid_operation -ddfma2604 fma -Inf 0 0e+384 -> NaN Invalid_operation -ddfma2605 fma -Inf 1 0e+384 -> -Infinity -ddfma2606 fma -Inf 1000 0e+384 -> -Infinity -ddfma2607 fma -Inf Inf 0e+384 -> -Infinity -ddfma2608 fma -1000 Inf 0e+384 -> -Infinity -ddfma2609 fma -Inf -Inf 0e+384 -> Infinity -ddfma2610 fma -1 -Inf 0e+384 -> Infinity -ddfma2611 fma -0 -Inf 0e+384 -> NaN Invalid_operation -ddfma2612 fma 0 -Inf 0e+384 -> NaN Invalid_operation -ddfma2613 fma 1 -Inf 0e+384 -> -Infinity -ddfma2614 fma 1000 -Inf 0e+384 -> -Infinity -ddfma2615 fma Inf -Inf 0e+384 -> -Infinity - -ddfma2621 fma NaN -Inf 0e+384 -> NaN -ddfma2622 fma NaN -1000 0e+384 -> NaN -ddfma2623 fma NaN -1 0e+384 -> NaN -ddfma2624 fma NaN -0 0e+384 -> NaN -ddfma2625 fma NaN 0 0e+384 -> NaN -ddfma2626 fma NaN 1 0e+384 -> NaN -ddfma2627 fma NaN 1000 0e+384 -> NaN -ddfma2628 fma NaN Inf 0e+384 -> NaN -ddfma2629 fma NaN NaN 0e+384 -> NaN -ddfma2630 fma -Inf NaN 0e+384 -> NaN -ddfma2631 fma -1000 NaN 0e+384 -> NaN -ddfma2632 fma -1 NaN 0e+384 -> NaN -ddfma2633 fma -0 NaN 0e+384 -> NaN -ddfma2634 fma 0 NaN 0e+384 -> NaN -ddfma2635 fma 1 NaN 0e+384 -> NaN -ddfma2636 fma 1000 NaN 0e+384 -> NaN -ddfma2637 fma Inf NaN 0e+384 -> NaN - -ddfma2641 fma sNaN -Inf 0e+384 -> NaN Invalid_operation -ddfma2642 fma sNaN -1000 0e+384 -> NaN Invalid_operation -ddfma2643 fma sNaN -1 0e+384 -> NaN Invalid_operation -ddfma2644 fma sNaN -0 0e+384 -> NaN Invalid_operation -ddfma2645 fma sNaN 0 0e+384 -> NaN Invalid_operation -ddfma2646 fma sNaN 1 0e+384 -> NaN Invalid_operation -ddfma2647 fma sNaN 1000 0e+384 -> NaN Invalid_operation -ddfma2648 fma sNaN NaN 0e+384 -> NaN Invalid_operation -ddfma2649 fma sNaN sNaN 0e+384 -> NaN Invalid_operation -ddfma2650 fma NaN sNaN 0e+384 -> NaN Invalid_operation -ddfma2651 fma -Inf sNaN 0e+384 -> NaN Invalid_operation -ddfma2652 fma -1000 sNaN 0e+384 -> NaN Invalid_operation -ddfma2653 fma -1 sNaN 0e+384 -> NaN Invalid_operation -ddfma2654 fma -0 sNaN 0e+384 -> NaN Invalid_operation -ddfma2655 fma 0 sNaN 0e+384 -> NaN Invalid_operation -ddfma2656 fma 1 sNaN 0e+384 -> NaN Invalid_operation -ddfma2657 fma 1000 sNaN 0e+384 -> NaN Invalid_operation -ddfma2658 fma Inf sNaN 0e+384 -> NaN Invalid_operation -ddfma2659 fma NaN sNaN 0e+384 -> NaN Invalid_operation - --- propagating NaNs -ddfma2661 fma NaN9 -Inf 0e+384 -> NaN9 -ddfma2662 fma NaN8 999 0e+384 -> NaN8 -ddfma2663 fma NaN71 Inf 0e+384 -> NaN71 -ddfma2664 fma NaN6 NaN5 0e+384 -> NaN6 -ddfma2665 fma -Inf NaN4 0e+384 -> NaN4 -ddfma2666 fma -999 NaN33 0e+384 -> NaN33 -ddfma2667 fma Inf NaN2 0e+384 -> NaN2 - -ddfma2671 fma sNaN99 -Inf 0e+384 -> NaN99 Invalid_operation -ddfma2672 fma sNaN98 -11 0e+384 -> NaN98 Invalid_operation -ddfma2673 fma sNaN97 NaN 0e+384 -> NaN97 Invalid_operation -ddfma2674 fma sNaN16 sNaN94 0e+384 -> NaN16 Invalid_operation -ddfma2675 fma NaN95 sNaN93 0e+384 -> NaN93 Invalid_operation -ddfma2676 fma -Inf sNaN92 0e+384 -> NaN92 Invalid_operation -ddfma2677 fma 088 sNaN91 0e+384 -> NaN91 Invalid_operation -ddfma2678 fma Inf sNaN90 0e+384 -> NaN90 Invalid_operation -ddfma2679 fma NaN sNaN89 0e+384 -> NaN89 Invalid_operation - -ddfma2681 fma -NaN9 -Inf 0e+384 -> -NaN9 -ddfma2682 fma -NaN8 999 0e+384 -> -NaN8 -ddfma2683 fma -NaN71 Inf 0e+384 -> -NaN71 -ddfma2684 fma -NaN6 -NaN5 0e+384 -> -NaN6 -ddfma2685 fma -Inf -NaN4 0e+384 -> -NaN4 -ddfma2686 fma -999 -NaN33 0e+384 -> -NaN33 -ddfma2687 fma Inf -NaN2 0e+384 -> -NaN2 - -ddfma2691 fma -sNaN99 -Inf 0e+384 -> -NaN99 Invalid_operation -ddfma2692 fma -sNaN98 -11 0e+384 -> -NaN98 Invalid_operation -ddfma2693 fma -sNaN97 NaN 0e+384 -> -NaN97 Invalid_operation -ddfma2694 fma -sNaN16 -sNaN94 0e+384 -> -NaN16 Invalid_operation -ddfma2695 fma -NaN95 -sNaN93 0e+384 -> -NaN93 Invalid_operation -ddfma2696 fma -Inf -sNaN92 0e+384 -> -NaN92 Invalid_operation -ddfma2697 fma 088 -sNaN91 0e+384 -> -NaN91 Invalid_operation -ddfma2698 fma Inf -sNaN90 0e+384 -> -NaN90 Invalid_operation -ddfma2699 fma -NaN -sNaN89 0e+384 -> -NaN89 Invalid_operation - -ddfma2701 fma -NaN -Inf 0e+384 -> -NaN -ddfma2702 fma -NaN 999 0e+384 -> -NaN -ddfma2703 fma -NaN Inf 0e+384 -> -NaN -ddfma2704 fma -NaN -NaN 0e+384 -> -NaN -ddfma2705 fma -Inf -NaN0 0e+384 -> -NaN -ddfma2706 fma -999 -NaN 0e+384 -> -NaN -ddfma2707 fma Inf -NaN 0e+384 -> -NaN - -ddfma2711 fma -sNaN -Inf 0e+384 -> -NaN Invalid_operation -ddfma2712 fma -sNaN -11 0e+384 -> -NaN Invalid_operation -ddfma2713 fma -sNaN00 NaN 0e+384 -> -NaN Invalid_operation -ddfma2714 fma -sNaN -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2715 fma -NaN -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2716 fma -Inf -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2717 fma 088 -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2718 fma Inf -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2719 fma -NaN -sNaN 0e+384 -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results --- signs -ddfma2751 fma 1e+277 1e+311 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2752 fma 1e+277 -1e+311 0e+384 -> -Infinity Overflow Inexact Rounded -ddfma2753 fma -1e+277 1e+311 0e+384 -> -Infinity Overflow Inexact Rounded -ddfma2754 fma -1e+277 -1e+311 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2755 fma 1e-277 1e-311 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2756 fma 1e-277 -1e-311 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2757 fma -1e-277 1e-311 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2758 fma -1e-277 -1e-311 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -ddfma2760 fma 1e-291 1e-101 0e+384 -> 1E-392 Subnormal -ddfma2761 fma 1e-291 1e-102 0e+384 -> 1E-393 Subnormal -ddfma2762 fma 1e-291 1e-103 0e+384 -> 1E-394 Subnormal -ddfma2763 fma 1e-291 1e-104 0e+384 -> 1E-395 Subnormal -ddfma2764 fma 1e-291 1e-105 0e+384 -> 1E-396 Subnormal -ddfma2765 fma 1e-291 1e-106 0e+384 -> 1E-397 Subnormal -ddfma2766 fma 1e-291 1e-107 0e+384 -> 1E-398 Subnormal -ddfma2767 fma 1e-291 1e-108 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2768 fma 1e-291 1e-109 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2769 fma 1e-291 1e-110 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -ddfma2770 fma 1e+60 1e+321 0e+384 -> 1.000000000000E+381 Clamped -ddfma2771 fma 1e+60 1e+322 0e+384 -> 1.0000000000000E+382 Clamped -ddfma2772 fma 1e+60 1e+323 0e+384 -> 1.00000000000000E+383 Clamped -ddfma2773 fma 1e+60 1e+324 0e+384 -> 1.000000000000000E+384 Clamped -ddfma2774 fma 1e+60 1e+325 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2775 fma 1e+60 1e+326 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2776 fma 1e+60 1e+327 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2777 fma 1e+60 1e+328 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2778 fma 1e+60 1e+329 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2779 fma 1e+60 1e+330 0e+384 -> Infinity Overflow Inexact Rounded - -ddfma2801 fma 1.0000E-394 1 0e+384 -> 1.0000E-394 Subnormal -ddfma2802 fma 1.000E-394 1e-1 0e+384 -> 1.000E-395 Subnormal -ddfma2803 fma 1.00E-394 1e-2 0e+384 -> 1.00E-396 Subnormal -ddfma2804 fma 1.0E-394 1e-3 0e+384 -> 1.0E-397 Subnormal -ddfma2805 fma 1.0E-394 1e-4 0e+384 -> 1E-398 Subnormal Rounded -ddfma2806 fma 1.3E-394 1e-4 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded -ddfma2807 fma 1.5E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2808 fma 1.7E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2809 fma 2.3E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2810 fma 2.5E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2811 fma 2.7E-394 1e-4 0e+384 -> 3E-398 Underflow Subnormal Inexact Rounded -ddfma2812 fma 1.49E-394 1e-4 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded -ddfma2813 fma 1.50E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2814 fma 1.51E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2815 fma 2.49E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2816 fma 2.50E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2817 fma 2.51E-394 1e-4 0e+384 -> 3E-398 Underflow Subnormal Inexact Rounded - -ddfma2818 fma 1E-394 1e-4 0e+384 -> 1E-398 Subnormal -ddfma2819 fma 3E-394 1e-5 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2820 fma 5E-394 1e-5 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2821 fma 7E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded -ddfma2822 fma 9E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded -ddfma2823 fma 9.9E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded - -ddfma2824 fma 1E-394 -1e-4 0e+384 -> -1E-398 Subnormal -ddfma2825 fma 3E-394 -1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2826 fma -5E-394 1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2827 fma 7E-394 -1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded -ddfma2828 fma -9E-394 1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded -ddfma2829 fma 9.9E-394 -1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded -ddfma2830 fma 3.0E-394 -1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped - -ddfma2831 fma 1.0E-199 1e-200 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2832 fma 1.0E-199 1e-199 0e+384 -> 1E-398 Subnormal Rounded -ddfma2833 fma 1.0E-199 1e-198 0e+384 -> 1.0E-397 Subnormal -ddfma2834 fma 2.0E-199 2e-198 0e+384 -> 4.0E-397 Subnormal -ddfma2835 fma 4.0E-199 4e-198 0e+384 -> 1.60E-396 Subnormal -ddfma2836 fma 10.0E-199 10e-198 0e+384 -> 1.000E-395 Subnormal -ddfma2837 fma 30.0E-199 30e-198 0e+384 -> 9.000E-395 Subnormal -ddfma2838 fma 40.0E-199 40e-188 0e+384 -> 1.6000E-384 Subnormal -ddfma2839 fma 40.0E-199 40e-187 0e+384 -> 1.6000E-383 -ddfma2840 fma 40.0E-199 40e-186 0e+384 -> 1.6000E-382 - --- Long operand overflow may be a different path -ddfma2870 fma 100 9.999E+383 0e+384 -> Infinity Inexact Overflow Rounded -ddfma2871 fma 100 -9.999E+383 0e+384 -> -Infinity Inexact Overflow Rounded -ddfma2872 fma 9.999E+383 100 0e+384 -> Infinity Inexact Overflow Rounded -ddfma2873 fma -9.999E+383 100 0e+384 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -ddfma2881 fma 1.2347E-355 1.2347E-40 0e+384 -> 1.524E-395 Inexact Rounded Subnormal Underflow -ddfma2882 fma 1.234E-355 1.234E-40 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddfma2883 fma 1.23E-355 1.23E-40 0e+384 -> 1.513E-395 Inexact Rounded Subnormal Underflow -ddfma2884 fma 1.2E-355 1.2E-40 0e+384 -> 1.44E-395 Subnormal -ddfma2885 fma 1.2E-355 1.2E-41 0e+384 -> 1.44E-396 Subnormal -ddfma2886 fma 1.2E-355 1.2E-42 0e+384 -> 1.4E-397 Subnormal Inexact Rounded Underflow -ddfma2887 fma 1.2E-355 1.3E-42 0e+384 -> 1.6E-397 Subnormal Inexact Rounded Underflow -ddfma2888 fma 1.3E-355 1.3E-42 0e+384 -> 1.7E-397 Subnormal Inexact Rounded Underflow -ddfma2889 fma 1.3E-355 1.3E-43 0e+384 -> 2E-398 Subnormal Inexact Rounded Underflow -ddfma2890 fma 1.3E-356 1.3E-43 0e+384 -> 0E-398 Clamped Subnormal Inexact Rounded Underflow - -ddfma2891 fma 1.2345E-39 1.234E-355 0e+384 -> 1.5234E-394 Inexact Rounded Subnormal Underflow -ddfma2892 fma 1.23456E-39 1.234E-355 0e+384 -> 1.5234E-394 Inexact Rounded Subnormal Underflow -ddfma2893 fma 1.2345E-40 1.234E-355 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddfma2894 fma 1.23456E-40 1.234E-355 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddfma2895 fma 1.2345E-41 1.234E-355 0e+384 -> 1.52E-396 Inexact Rounded Subnormal Underflow -ddfma2896 fma 1.23456E-41 1.234E-355 0e+384 -> 1.52E-396 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow -ddfma2900 fma 0.3000000000E-191 0.3000000000E-191 0e+384 -> 9.00000000000000E-384 Subnormal Rounded -ddfma2901 fma 0.3000000001E-191 0.3000000001E-191 0e+384 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded -ddfma2902 fma 9.999999999999999E-383 0.0999999999999 0e+384 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded -ddfma2903 fma 9.999999999999999E-383 0.09999999999999 0e+384 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded -ddfma2904 fma 9.999999999999999E-383 0.099999999999999 0e+384 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded -ddfma2905 fma 9.999999999999999E-383 0.0999999999999999 0e+384 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded --- prove operands are exact -ddfma2906 fma 9.999999999999999E-383 1 0e+384 -> 9.999999999999999E-383 -ddfma2907 fma 1 0.09999999999999999 0e+384 -> 0.09999999999999999 --- the next rounds to Nmin -ddfma2908 fma 9.999999999999999E-383 0.09999999999999999 0e+384 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded - --- hugest -ddfma2909 fma 9999999999999999 9999999999999999 0e+384 -> 9.999999999999998E+31 Inexact Rounded - --- Null tests -ddfma2990 fma 10 # 0e+384 -> NaN Invalid_operation -ddfma2991 fma # 10 0e+384 -> NaN Invalid_operation - - --- ADDITION TESTS ------------------------------------------------------ - --- [first group are 'quick confidence check'] -ddfma3001 fma 1 1 1 -> 2 -ddfma3002 fma 1 2 3 -> 5 -ddfma3003 fma 1 '5.75' '3.3' -> 9.05 -ddfma3004 fma 1 '5' '-3' -> 2 -ddfma3005 fma 1 '-5' '-3' -> -8 -ddfma3006 fma 1 '-7' '2.5' -> -4.5 -ddfma3007 fma 1 '0.7' '0.3' -> 1.0 -ddfma3008 fma 1 '1.25' '1.25' -> 2.50 -ddfma3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' -ddfma3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' - --- 1234567890123456 1234567890123456 -ddfma3011 fma 1 '0.4444444444444446' '0.5555555555555555' -> '1.000000000000000' Inexact Rounded -ddfma3012 fma 1 '0.4444444444444445' '0.5555555555555555' -> '1.000000000000000' Rounded -ddfma3013 fma 1 '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' -ddfma3014 fma 1 '4444444444444444' '0.49' -> '4444444444444444' Inexact Rounded -ddfma3015 fma 1 '4444444444444444' '0.499' -> '4444444444444444' Inexact Rounded -ddfma3016 fma 1 '4444444444444444' '0.4999' -> '4444444444444444' Inexact Rounded -ddfma3017 fma 1 '4444444444444444' '0.5000' -> '4444444444444444' Inexact Rounded -ddfma3018 fma 1 '4444444444444444' '0.5001' -> '4444444444444445' Inexact Rounded -ddfma3019 fma 1 '4444444444444444' '0.501' -> '4444444444444445' Inexact Rounded -ddfma3020 fma 1 '4444444444444444' '0.51' -> '4444444444444445' Inexact Rounded - -ddfma3021 fma 1 0 1 -> 1 -ddfma3022 fma 1 1 1 -> 2 -ddfma3023 fma 1 2 1 -> 3 -ddfma3024 fma 1 3 1 -> 4 -ddfma3025 fma 1 4 1 -> 5 -ddfma3026 fma 1 5 1 -> 6 -ddfma3027 fma 1 6 1 -> 7 -ddfma3028 fma 1 7 1 -> 8 -ddfma3029 fma 1 8 1 -> 9 -ddfma3030 fma 1 9 1 -> 10 - --- some carrying effects -ddfma3031 fma 1 '0.9998' '0.0000' -> '0.9998' -ddfma3032 fma 1 '0.9998' '0.0001' -> '0.9999' -ddfma3033 fma 1 '0.9998' '0.0002' -> '1.0000' -ddfma3034 fma 1 '0.9998' '0.0003' -> '1.0001' - -ddfma3035 fma 1 '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddfma3036 fma 1 '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddfma3037 fma 1 '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddfma3038 fma 1 '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded -ddfma3039 fma 1 '700000' '10000e+16' -> '1.000000000000007E+20' Rounded - --- symmetry: -ddfma3040 fma 1 '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded -ddfma3041 fma 1 '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded -ddfma3042 fma 1 '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded -ddfma3044 fma 1 '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded -ddfma3045 fma 1 '10000e+16' '700000' -> '1.000000000000007E+20' Rounded - --- same, without rounding -ddfma3046 fma 1 '10000e+9' '7' -> '10000000000007' -ddfma3047 fma 1 '10000e+9' '70' -> '10000000000070' -ddfma3048 fma 1 '10000e+9' '700' -> '10000000000700' -ddfma3049 fma 1 '10000e+9' '7000' -> '10000000007000' -ddfma3050 fma 1 '10000e+9' '70000' -> '10000000070000' -ddfma3051 fma 1 '10000e+9' '700000' -> '10000000700000' -ddfma3052 fma 1 '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -ddfma3053 fma 1 '12' '7.00' -> '19.00' -ddfma3054 fma 1 '1.3' '-1.07' -> '0.23' -ddfma3055 fma 1 '1.3' '-1.30' -> '0.00' -ddfma3056 fma 1 '1.3' '-2.07' -> '-0.77' -ddfma3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' - --- leading zero preservation -ddfma3061 fma 1 1 '0.0001' -> '1.0001' -ddfma3062 fma 1 1 '0.00001' -> '1.00001' -ddfma3063 fma 1 1 '0.000001' -> '1.000001' -ddfma3064 fma 1 1 '0.0000001' -> '1.0000001' -ddfma3065 fma 1 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -ddfma3070 fma 1 1 0 -> 1 -ddfma3071 fma 1 1 0. -> 1 -ddfma3072 fma 1 1 .0 -> 1.0 -ddfma3073 fma 1 1 0.0 -> 1.0 -ddfma3074 fma 1 1 0.00 -> 1.00 -ddfma3075 fma 1 0 1 -> 1 -ddfma3076 fma 1 0. 1 -> 1 -ddfma3077 fma 1 .0 1 -> 1.0 -ddfma3078 fma 1 0.0 1 -> 1.0 -ddfma3079 fma 1 0.00 1 -> 1.00 - --- some carries -ddfma3080 fma 1 999999998 1 -> 999999999 -ddfma3081 fma 1 999999999 1 -> 1000000000 -ddfma3082 fma 1 99999999 1 -> 100000000 -ddfma3083 fma 1 9999999 1 -> 10000000 -ddfma3084 fma 1 999999 1 -> 1000000 -ddfma3085 fma 1 99999 1 -> 100000 -ddfma3086 fma 1 9999 1 -> 10000 -ddfma3087 fma 1 999 1 -> 1000 -ddfma3088 fma 1 99 1 -> 100 -ddfma3089 fma 1 9 1 -> 10 - - --- more LHS swaps -ddfma3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' -ddfma3091 fma 1 '-56267E-6' 0 -> '-0.056267' -ddfma3092 fma 1 '-56267E-5' 0 -> '-0.56267' -ddfma3093 fma 1 '-56267E-4' 0 -> '-5.6267' -ddfma3094 fma 1 '-56267E-3' 0 -> '-56.267' -ddfma3095 fma 1 '-56267E-2' 0 -> '-562.67' -ddfma3096 fma 1 '-56267E-1' 0 -> '-5626.7' -ddfma3097 fma 1 '-56267E-0' 0 -> '-56267' -ddfma3098 fma 1 '-5E-10' 0 -> '-5E-10' -ddfma3099 fma 1 '-5E-7' 0 -> '-5E-7' -ddfma3100 fma 1 '-5E-6' 0 -> '-0.000005' -ddfma3101 fma 1 '-5E-5' 0 -> '-0.00005' -ddfma3102 fma 1 '-5E-4' 0 -> '-0.0005' -ddfma3103 fma 1 '-5E-1' 0 -> '-0.5' -ddfma3104 fma 1 '-5E0' 0 -> '-5' -ddfma3105 fma 1 '-5E1' 0 -> '-50' -ddfma3106 fma 1 '-5E5' 0 -> '-500000' -ddfma3107 fma 1 '-5E15' 0 -> '-5000000000000000' -ddfma3108 fma 1 '-5E16' 0 -> '-5.000000000000000E+16' Rounded -ddfma3109 fma 1 '-5E17' 0 -> '-5.000000000000000E+17' Rounded -ddfma3110 fma 1 '-5E18' 0 -> '-5.000000000000000E+18' Rounded -ddfma3111 fma 1 '-5E100' 0 -> '-5.000000000000000E+100' Rounded - --- more RHS swaps -ddfma3113 fma 1 0 '-56267E-10' -> '-0.0000056267' -ddfma3114 fma 1 0 '-56267E-6' -> '-0.056267' -ddfma3116 fma 1 0 '-56267E-5' -> '-0.56267' -ddfma3117 fma 1 0 '-56267E-4' -> '-5.6267' -ddfma3119 fma 1 0 '-56267E-3' -> '-56.267' -ddfma3120 fma 1 0 '-56267E-2' -> '-562.67' -ddfma3121 fma 1 0 '-56267E-1' -> '-5626.7' -ddfma3122 fma 1 0 '-56267E-0' -> '-56267' -ddfma3123 fma 1 0 '-5E-10' -> '-5E-10' -ddfma3124 fma 1 0 '-5E-7' -> '-5E-7' -ddfma3125 fma 1 0 '-5E-6' -> '-0.000005' -ddfma3126 fma 1 0 '-5E-5' -> '-0.00005' -ddfma3127 fma 1 0 '-5E-4' -> '-0.0005' -ddfma3128 fma 1 0 '-5E-1' -> '-0.5' -ddfma3129 fma 1 0 '-5E0' -> '-5' -ddfma3130 fma 1 0 '-5E1' -> '-50' -ddfma3131 fma 1 0 '-5E5' -> '-500000' -ddfma3132 fma 1 0 '-5E15' -> '-5000000000000000' -ddfma3133 fma 1 0 '-5E16' -> '-5.000000000000000E+16' Rounded -ddfma3134 fma 1 0 '-5E17' -> '-5.000000000000000E+17' Rounded -ddfma3135 fma 1 0 '-5E18' -> '-5.000000000000000E+18' Rounded -ddfma3136 fma 1 0 '-5E100' -> '-5.000000000000000E+100' Rounded - --- related -ddfma3137 fma 1 1 '0E-19' -> '1.000000000000000' Rounded -ddfma3138 fma 1 -1 '0E-19' -> '-1.000000000000000' Rounded -ddfma3139 fma 1 '0E-19' 1 -> '1.000000000000000' Rounded -ddfma3140 fma 1 '0E-19' -1 -> '-1.000000000000000' Rounded -ddfma3141 fma 1 1E+11 0.0000 -> '100000000000.0000' -ddfma3142 fma 1 1E+11 0.00000 -> '100000000000.0000' Rounded -ddfma3143 fma 1 0.000 1E+12 -> '1000000000000.000' -ddfma3144 fma 1 0.0000 1E+12 -> '1000000000000.000' Rounded - --- [some of the next group are really constructor tests] -ddfma3146 fma 1 '00.0' 0 -> '0.0' -ddfma3147 fma 1 '0.00' 0 -> '0.00' -ddfma3148 fma 1 0 '0.00' -> '0.00' -ddfma3149 fma 1 0 '00.0' -> '0.0' -ddfma3150 fma 1 '00.0' '0.00' -> '0.00' -ddfma3151 fma 1 '0.00' '00.0' -> '0.00' -ddfma3152 fma 1 '3' '.3' -> '3.3' -ddfma3153 fma 1 '3.' '.3' -> '3.3' -ddfma3154 fma 1 '3.0' '.3' -> '3.3' -ddfma3155 fma 1 '3.00' '.3' -> '3.30' -ddfma3156 fma 1 '3' '3' -> '6' -ddfma3157 fma 1 '3' '+3' -> '6' -ddfma3158 fma 1 '3' '-3' -> '0' -ddfma3159 fma 1 '0.3' '-0.3' -> '0.0' -ddfma3160 fma 1 '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -ddfma3161 fma 1 '1E+12' '-1' -> '999999999999' -ddfma3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' -ddfma3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' -ddfma3164 fma 1 '-1' '1E+12' -> '999999999999' -ddfma3165 fma 1 '7E+12' '-1' -> '6999999999999' -ddfma3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' -ddfma3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' -ddfma3168 fma 1 '-1' '7E+12' -> '6999999999999' - -rounding: half_up --- 1.234567890123456 1234567890123456 1 234567890123456 -ddfma3170 fma 1 '4.444444444444444' '0.5555555555555567' -> '5.000000000000001' Inexact Rounded -ddfma3171 fma 1 '4.444444444444444' '0.5555555555555566' -> '5.000000000000001' Inexact Rounded -ddfma3172 fma 1 '4.444444444444444' '0.5555555555555565' -> '5.000000000000001' Inexact Rounded -ddfma3173 fma 1 '4.444444444444444' '0.5555555555555564' -> '5.000000000000000' Inexact Rounded -ddfma3174 fma 1 '4.444444444444444' '0.5555555555555553' -> '4.999999999999999' Inexact Rounded -ddfma3175 fma 1 '4.444444444444444' '0.5555555555555552' -> '4.999999999999999' Inexact Rounded -ddfma3176 fma 1 '4.444444444444444' '0.5555555555555551' -> '4.999999999999999' Inexact Rounded -ddfma3177 fma 1 '4.444444444444444' '0.5555555555555550' -> '4.999999999999999' Rounded -ddfma3178 fma 1 '4.444444444444444' '0.5555555555555545' -> '4.999999999999999' Inexact Rounded -ddfma3179 fma 1 '4.444444444444444' '0.5555555555555544' -> '4.999999999999998' Inexact Rounded -ddfma3180 fma 1 '4.444444444444444' '0.5555555555555543' -> '4.999999999999998' Inexact Rounded -ddfma3181 fma 1 '4.444444444444444' '0.5555555555555542' -> '4.999999999999998' Inexact Rounded -ddfma3182 fma 1 '4.444444444444444' '0.5555555555555541' -> '4.999999999999998' Inexact Rounded -ddfma3183 fma 1 '4.444444444444444' '0.5555555555555540' -> '4.999999999999998' Rounded - --- and some more, including residue effects and different roundings -rounding: half_up -ddfma3200 fma 1 '1234560123456789' 0 -> '1234560123456789' -ddfma3201 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddfma3202 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddfma3203 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddfma3204 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddfma3205 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddfma3206 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddfma3207 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddfma3208 fma 1 '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded -ddfma3209 fma 1 '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded -ddfma3210 fma 1 '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded -ddfma3211 fma 1 '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded -ddfma3212 fma 1 '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded -ddfma3213 fma 1 '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded -ddfma3214 fma 1 '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded -ddfma3215 fma 1 '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded -ddfma3216 fma 1 '1234560123456789' 1 -> '1234560123456790' -ddfma3217 fma 1 '1234560123456789' 1.000000001 -> '1234560123456790' Inexact Rounded -ddfma3218 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddfma3219 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded - -rounding: half_even -ddfma3220 fma 1 '1234560123456789' 0 -> '1234560123456789' -ddfma3221 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddfma3222 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddfma3223 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddfma3224 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddfma3225 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddfma3226 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddfma3227 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddfma3228 fma 1 '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded -ddfma3229 fma 1 '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded -ddfma3230 fma 1 '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded -ddfma3231 fma 1 '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded -ddfma3232 fma 1 '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded -ddfma3233 fma 1 '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded -ddfma3234 fma 1 '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded -ddfma3235 fma 1 '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded -ddfma3236 fma 1 '1234560123456789' 1 -> '1234560123456790' -ddfma3237 fma 1 '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded -ddfma3238 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddfma3239 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded --- critical few with even bottom digit... -ddfma3240 fma 1 '1234560123456788' 0.499999999 -> '1234560123456788' Inexact Rounded -ddfma3241 fma 1 '1234560123456788' 0.5 -> '1234560123456788' Inexact Rounded -ddfma3242 fma 1 '1234560123456788' 0.500000001 -> '1234560123456789' Inexact Rounded - -rounding: down -ddfma3250 fma 1 '1234560123456789' 0 -> '1234560123456789' -ddfma3251 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddfma3252 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddfma3253 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddfma3254 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddfma3255 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddfma3256 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddfma3257 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddfma3258 fma 1 '1234560123456789' 0.5 -> '1234560123456789' Inexact Rounded -ddfma3259 fma 1 '1234560123456789' 0.500000001 -> '1234560123456789' Inexact Rounded -ddfma3260 fma 1 '1234560123456789' 0.500001 -> '1234560123456789' Inexact Rounded -ddfma3261 fma 1 '1234560123456789' 0.51 -> '1234560123456789' Inexact Rounded -ddfma3262 fma 1 '1234560123456789' 0.6 -> '1234560123456789' Inexact Rounded -ddfma3263 fma 1 '1234560123456789' 0.9 -> '1234560123456789' Inexact Rounded -ddfma3264 fma 1 '1234560123456789' 0.99999 -> '1234560123456789' Inexact Rounded -ddfma3265 fma 1 '1234560123456789' 0.999999999 -> '1234560123456789' Inexact Rounded -ddfma3266 fma 1 '1234560123456789' 1 -> '1234560123456790' -ddfma3267 fma 1 '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded -ddfma3268 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddfma3269 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_up -ddfma3301 fma 1 -1 1 -> 0 -ddfma3302 fma 1 0 1 -> 1 -ddfma3303 fma 1 1 1 -> 2 -ddfma3304 fma 1 12 1 -> 13 -ddfma3305 fma 1 98 1 -> 99 -ddfma3306 fma 1 99 1 -> 100 -ddfma3307 fma 1 100 1 -> 101 -ddfma3308 fma 1 101 1 -> 102 -ddfma3309 fma 1 -1 -1 -> -2 -ddfma3310 fma 1 0 -1 -> -1 -ddfma3311 fma 1 1 -1 -> 0 -ddfma3312 fma 1 12 -1 -> 11 -ddfma3313 fma 1 98 -1 -> 97 -ddfma3314 fma 1 99 -1 -> 98 -ddfma3315 fma 1 100 -1 -> 99 -ddfma3316 fma 1 101 -1 -> 100 - -ddfma3321 fma 1 -0.01 0.01 -> 0.00 -ddfma3322 fma 1 0.00 0.01 -> 0.01 -ddfma3323 fma 1 0.01 0.01 -> 0.02 -ddfma3324 fma 1 0.12 0.01 -> 0.13 -ddfma3325 fma 1 0.98 0.01 -> 0.99 -ddfma3326 fma 1 0.99 0.01 -> 1.00 -ddfma3327 fma 1 1.00 0.01 -> 1.01 -ddfma3328 fma 1 1.01 0.01 -> 1.02 -ddfma3329 fma 1 -0.01 -0.01 -> -0.02 -ddfma3330 fma 1 0.00 -0.01 -> -0.01 -ddfma3331 fma 1 0.01 -0.01 -> 0.00 -ddfma3332 fma 1 0.12 -0.01 -> 0.11 -ddfma3333 fma 1 0.98 -0.01 -> 0.97 -ddfma3334 fma 1 0.99 -0.01 -> 0.98 -ddfma3335 fma 1 1.00 -0.01 -> 0.99 -ddfma3336 fma 1 1.01 -0.01 -> 1.00 - --- some more cases where adding 0 affects the coefficient -ddfma3340 fma 1 1E+3 0 -> 1000 -ddfma3341 fma 1 1E+15 0 -> 1000000000000000 -ddfma3342 fma 1 1E+16 0 -> 1.000000000000000E+16 Rounded -ddfma3343 fma 1 1E+20 0 -> 1.000000000000000E+20 Rounded --- which simply follow from these cases ... -ddfma3344 fma 1 1E+3 1 -> 1001 -ddfma3345 fma 1 1E+15 1 -> 1000000000000001 -ddfma3346 fma 1 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded -ddfma3347 fma 1 1E+20 1 -> 1.000000000000000E+20 Inexact Rounded -ddfma3348 fma 1 1E+3 7 -> 1007 -ddfma3349 fma 1 1E+15 7 -> 1000000000000007 -ddfma3350 fma 1 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded -ddfma3351 fma 1 1E+20 7 -> 1.000000000000000E+20 Inexact Rounded - --- tryzeros cases -rounding: half_up -ddfma3360 fma 1 0E+50 10000E+1 -> 1.0000E+5 -ddfma3361 fma 1 0E-50 10000E+1 -> 100000.0000000000 Rounded -ddfma3362 fma 1 10000E+1 0E-50 -> 100000.0000000000 Rounded -ddfma3363 fma 1 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact -ddfma3364 fma 1 9.999999999999999E+384 -9.999999999999999E+384 -> 0E+369 - --- a curiosity from JSR 13 testing -rounding: half_down -ddfma3370 fma 1 999999999999999 815 -> 1000000000000814 -ddfma3371 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact -rounding: half_up -ddfma3372 fma 1 999999999999999 815 -> 1000000000000814 -ddfma3373 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact -rounding: half_even -ddfma3374 fma 1 999999999999999 815 -> 1000000000000814 -ddfma3375 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact - --- ulp replacement tests -ddfma3400 fma 1 1 77e-14 -> 1.00000000000077 -ddfma3401 fma 1 1 77e-15 -> 1.000000000000077 -ddfma3402 fma 1 1 77e-16 -> 1.000000000000008 Inexact Rounded -ddfma3403 fma 1 1 77e-17 -> 1.000000000000001 Inexact Rounded -ddfma3404 fma 1 1 77e-18 -> 1.000000000000000 Inexact Rounded -ddfma3405 fma 1 1 77e-19 -> 1.000000000000000 Inexact Rounded -ddfma3406 fma 1 1 77e-299 -> 1.000000000000000 Inexact Rounded - -ddfma3410 fma 1 10 77e-14 -> 10.00000000000077 -ddfma3411 fma 1 10 77e-15 -> 10.00000000000008 Inexact Rounded -ddfma3412 fma 1 10 77e-16 -> 10.00000000000001 Inexact Rounded -ddfma3413 fma 1 10 77e-17 -> 10.00000000000000 Inexact Rounded -ddfma3414 fma 1 10 77e-18 -> 10.00000000000000 Inexact Rounded -ddfma3415 fma 1 10 77e-19 -> 10.00000000000000 Inexact Rounded -ddfma3416 fma 1 10 77e-299 -> 10.00000000000000 Inexact Rounded - -ddfma3420 fma 1 77e-14 1 -> 1.00000000000077 -ddfma3421 fma 1 77e-15 1 -> 1.000000000000077 -ddfma3422 fma 1 77e-16 1 -> 1.000000000000008 Inexact Rounded -ddfma3423 fma 1 77e-17 1 -> 1.000000000000001 Inexact Rounded -ddfma3424 fma 1 77e-18 1 -> 1.000000000000000 Inexact Rounded -ddfma3425 fma 1 77e-19 1 -> 1.000000000000000 Inexact Rounded -ddfma3426 fma 1 77e-299 1 -> 1.000000000000000 Inexact Rounded - -ddfma3430 fma 1 77e-14 10 -> 10.00000000000077 -ddfma3431 fma 1 77e-15 10 -> 10.00000000000008 Inexact Rounded -ddfma3432 fma 1 77e-16 10 -> 10.00000000000001 Inexact Rounded -ddfma3433 fma 1 77e-17 10 -> 10.00000000000000 Inexact Rounded -ddfma3434 fma 1 77e-18 10 -> 10.00000000000000 Inexact Rounded -ddfma3435 fma 1 77e-19 10 -> 10.00000000000000 Inexact Rounded -ddfma3436 fma 1 77e-299 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -ddfma36440 fma 1 1 -77e-14 -> 0.99999999999923 -ddfma36441 fma 1 1 -77e-15 -> 0.999999999999923 -ddfma36442 fma 1 1 -77e-16 -> 0.9999999999999923 -ddfma36443 fma 1 1 -77e-17 -> 0.9999999999999992 Inexact Rounded -ddfma36444 fma 1 1 -77e-18 -> 0.9999999999999999 Inexact Rounded -ddfma36445 fma 1 1 -77e-19 -> 1.000000000000000 Inexact Rounded -ddfma36446 fma 1 1 -77e-99 -> 1.000000000000000 Inexact Rounded - -ddfma36450 fma 1 10 -77e-14 -> 9.99999999999923 -ddfma36451 fma 1 10 -77e-15 -> 9.999999999999923 -ddfma36452 fma 1 10 -77e-16 -> 9.999999999999992 Inexact Rounded -ddfma36453 fma 1 10 -77e-17 -> 9.999999999999999 Inexact Rounded -ddfma36454 fma 1 10 -77e-18 -> 10.00000000000000 Inexact Rounded -ddfma36455 fma 1 10 -77e-19 -> 10.00000000000000 Inexact Rounded -ddfma36456 fma 1 10 -77e-99 -> 10.00000000000000 Inexact Rounded - -ddfma36460 fma 1 -77e-14 1 -> 0.99999999999923 -ddfma36461 fma 1 -77e-15 1 -> 0.999999999999923 -ddfma36462 fma 1 -77e-16 1 -> 0.9999999999999923 -ddfma36463 fma 1 -77e-17 1 -> 0.9999999999999992 Inexact Rounded -ddfma36464 fma 1 -77e-18 1 -> 0.9999999999999999 Inexact Rounded -ddfma36465 fma 1 -77e-19 1 -> 1.000000000000000 Inexact Rounded -ddfma36466 fma 1 -77e-99 1 -> 1.000000000000000 Inexact Rounded - -ddfma36470 fma 1 -77e-14 10 -> 9.99999999999923 -ddfma36471 fma 1 -77e-15 10 -> 9.999999999999923 -ddfma36472 fma 1 -77e-16 10 -> 9.999999999999992 Inexact Rounded -ddfma36473 fma 1 -77e-17 10 -> 9.999999999999999 Inexact Rounded -ddfma36474 fma 1 -77e-18 10 -> 10.00000000000000 Inexact Rounded -ddfma36475 fma 1 -77e-19 10 -> 10.00000000000000 Inexact Rounded -ddfma36476 fma 1 -77e-99 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -ddfma36480 fma 1 -1 77e-14 -> -0.99999999999923 -ddfma36481 fma 1 -1 77e-15 -> -0.999999999999923 -ddfma36482 fma 1 -1 77e-16 -> -0.9999999999999923 -ddfma36483 fma 1 -1 77e-17 -> -0.9999999999999992 Inexact Rounded -ddfma36484 fma 1 -1 77e-18 -> -0.9999999999999999 Inexact Rounded -ddfma36485 fma 1 -1 77e-19 -> -1.000000000000000 Inexact Rounded -ddfma36486 fma 1 -1 77e-99 -> -1.000000000000000 Inexact Rounded - -ddfma36490 fma 1 -10 77e-14 -> -9.99999999999923 -ddfma36491 fma 1 -10 77e-15 -> -9.999999999999923 -ddfma36492 fma 1 -10 77e-16 -> -9.999999999999992 Inexact Rounded -ddfma36493 fma 1 -10 77e-17 -> -9.999999999999999 Inexact Rounded -ddfma36494 fma 1 -10 77e-18 -> -10.00000000000000 Inexact Rounded -ddfma36495 fma 1 -10 77e-19 -> -10.00000000000000 Inexact Rounded -ddfma36496 fma 1 -10 77e-99 -> -10.00000000000000 Inexact Rounded - -ddfma36500 fma 1 77e-14 -1 -> -0.99999999999923 -ddfma36501 fma 1 77e-15 -1 -> -0.999999999999923 -ddfma36502 fma 1 77e-16 -1 -> -0.9999999999999923 -ddfma36503 fma 1 77e-17 -1 -> -0.9999999999999992 Inexact Rounded -ddfma36504 fma 1 77e-18 -1 -> -0.9999999999999999 Inexact Rounded -ddfma36505 fma 1 77e-19 -1 -> -1.000000000000000 Inexact Rounded -ddfma36506 fma 1 77e-99 -1 -> -1.000000000000000 Inexact Rounded - -ddfma36510 fma 1 77e-14 -10 -> -9.99999999999923 -ddfma36511 fma 1 77e-15 -10 -> -9.999999999999923 -ddfma36512 fma 1 77e-16 -10 -> -9.999999999999992 Inexact Rounded -ddfma36513 fma 1 77e-17 -10 -> -9.999999999999999 Inexact Rounded -ddfma36514 fma 1 77e-18 -10 -> -10.00000000000000 Inexact Rounded -ddfma36515 fma 1 77e-19 -10 -> -10.00000000000000 Inexact Rounded -ddfma36516 fma 1 77e-99 -10 -> -10.00000000000000 Inexact Rounded - --- and a couple more with longer RHS -ddfma36520 fma 1 1 -7777e-16 -> 0.9999999999992223 -ddfma36521 fma 1 1 -7777e-17 -> 0.9999999999999222 Inexact Rounded -ddfma36522 fma 1 1 -7777e-18 -> 0.9999999999999922 Inexact Rounded -ddfma36523 fma 1 1 -7777e-19 -> 0.9999999999999992 Inexact Rounded -ddfma36524 fma 1 1 -7777e-20 -> 0.9999999999999999 Inexact Rounded -ddfma36525 fma 1 1 -7777e-21 -> 1.000000000000000 Inexact Rounded -ddfma36526 fma 1 1 -7777e-22 -> 1.000000000000000 Inexact Rounded - - --- and some more residue effects and different roundings -rounding: half_up -ddfma36540 fma 1 '6543210123456789' 0 -> '6543210123456789' -ddfma36541 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddfma36542 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddfma36543 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddfma36544 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddfma36545 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddfma36546 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddfma36547 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddfma36548 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -ddfma36549 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -ddfma36550 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -ddfma36551 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -ddfma36552 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -ddfma36553 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -ddfma36554 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -ddfma36555 fma 1 '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded -ddfma36556 fma 1 '6543210123456789' 1 -> '6543210123456790' -ddfma36557 fma 1 '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded -ddfma36558 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddfma36559 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - -rounding: half_even -ddfma36560 fma 1 '6543210123456789' 0 -> '6543210123456789' -ddfma36561 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddfma36562 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddfma36563 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddfma36564 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddfma36565 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddfma36566 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddfma36567 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddfma36568 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -ddfma36569 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -ddfma36570 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -ddfma36571 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -ddfma36572 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -ddfma36573 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -ddfma36574 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -ddfma36575 fma 1 '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded -ddfma36576 fma 1 '6543210123456789' 1 -> '6543210123456790' -ddfma36577 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -ddfma36578 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddfma36579 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - --- critical few with even bottom digit... -ddfma37540 fma 1 '6543210123456788' 0.499999999 -> '6543210123456788' Inexact Rounded -ddfma37541 fma 1 '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded -ddfma37542 fma 1 '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded - -rounding: down -ddfma37550 fma 1 '6543210123456789' 0 -> '6543210123456789' -ddfma37551 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddfma37552 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddfma37553 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddfma37554 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddfma37555 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddfma37556 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddfma37557 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddfma37558 fma 1 '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded -ddfma37559 fma 1 '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded -ddfma37560 fma 1 '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded -ddfma37561 fma 1 '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded -ddfma37562 fma 1 '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded -ddfma37563 fma 1 '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded -ddfma37564 fma 1 '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded -ddfma37565 fma 1 '6543210123456789' 0.999999999 -> '6543210123456789' Inexact Rounded -ddfma37566 fma 1 '6543210123456789' 1 -> '6543210123456790' -ddfma37567 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -ddfma37568 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddfma37569 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - - --- verify a query -rounding: down -ddfma37661 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded -ddfma37662 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded -ddfma37663 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded -ddfma37664 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded - --- more zeros, etc. -rounding: half_even - -ddfma37701 fma 1 5.00 1.00E-3 -> 5.00100 -ddfma37702 fma 1 00.00 0.000 -> 0.000 -ddfma37703 fma 1 00.00 0E-3 -> 0.000 -ddfma37704 fma 1 0E-3 00.00 -> 0.000 - -ddfma37710 fma 1 0E+3 00.00 -> 0.00 -ddfma37711 fma 1 0E+3 00.0 -> 0.0 -ddfma37712 fma 1 0E+3 00. -> 0 -ddfma37713 fma 1 0E+3 00.E+1 -> 0E+1 -ddfma37714 fma 1 0E+3 00.E+2 -> 0E+2 -ddfma37715 fma 1 0E+3 00.E+3 -> 0E+3 -ddfma37716 fma 1 0E+3 00.E+4 -> 0E+3 -ddfma37717 fma 1 0E+3 00.E+5 -> 0E+3 -ddfma37718 fma 1 0E+3 -00.0 -> 0.0 -ddfma37719 fma 1 0E+3 -00. -> 0 -ddfma37731 fma 1 0E+3 -00.E+1 -> 0E+1 - -ddfma37720 fma 1 00.00 0E+3 -> 0.00 -ddfma37721 fma 1 00.0 0E+3 -> 0.0 -ddfma37722 fma 1 00. 0E+3 -> 0 -ddfma37723 fma 1 00.E+1 0E+3 -> 0E+1 -ddfma37724 fma 1 00.E+2 0E+3 -> 0E+2 -ddfma37725 fma 1 00.E+3 0E+3 -> 0E+3 -ddfma37726 fma 1 00.E+4 0E+3 -> 0E+3 -ddfma37727 fma 1 00.E+5 0E+3 -> 0E+3 -ddfma37728 fma 1 -00.00 0E+3 -> 0.00 -ddfma37729 fma 1 -00.0 0E+3 -> 0.0 -ddfma37730 fma 1 -00. 0E+3 -> 0 - -ddfma37732 fma 1 0 0 -> 0 -ddfma37733 fma 1 0 -0 -> 0 -ddfma37734 fma 1 -0 0 -> 0 -ddfma37735 fma 1 -0 -0 -> -0 -- IEEE 854 special case - -ddfma37736 fma 1 1 -1 -> 0 -ddfma37737 fma 1 -1 -1 -> -2 -ddfma37738 fma 1 1 1 -> 2 -ddfma37739 fma 1 -1 1 -> 0 - -ddfma37741 fma 1 0 -1 -> -1 -ddfma37742 fma 1 -0 -1 -> -1 -ddfma37743 fma 1 0 1 -> 1 -ddfma37744 fma 1 -0 1 -> 1 -ddfma37745 fma 1 -1 0 -> -1 -ddfma37746 fma 1 -1 -0 -> -1 -ddfma37747 fma 1 1 0 -> 1 -ddfma37748 fma 1 1 -0 -> 1 - -ddfma37751 fma 1 0.0 -1 -> -1.0 -ddfma37752 fma 1 -0.0 -1 -> -1.0 -ddfma37753 fma 1 0.0 1 -> 1.0 -ddfma37754 fma 1 -0.0 1 -> 1.0 -ddfma37755 fma 1 -1.0 0 -> -1.0 -ddfma37756 fma 1 -1.0 -0 -> -1.0 -ddfma37757 fma 1 1.0 0 -> 1.0 -ddfma37758 fma 1 1.0 -0 -> 1.0 - -ddfma37761 fma 1 0 -1.0 -> -1.0 -ddfma37762 fma 1 -0 -1.0 -> -1.0 -ddfma37763 fma 1 0 1.0 -> 1.0 -ddfma37764 fma 1 -0 1.0 -> 1.0 -ddfma37765 fma 1 -1 0.0 -> -1.0 -ddfma37766 fma 1 -1 -0.0 -> -1.0 -ddfma37767 fma 1 1 0.0 -> 1.0 -ddfma37768 fma 1 1 -0.0 -> 1.0 - -ddfma37771 fma 1 0.0 -1.0 -> -1.0 -ddfma37772 fma 1 -0.0 -1.0 -> -1.0 -ddfma37773 fma 1 0.0 1.0 -> 1.0 -ddfma37774 fma 1 -0.0 1.0 -> 1.0 -ddfma37775 fma 1 -1.0 0.0 -> -1.0 -ddfma37776 fma 1 -1.0 -0.0 -> -1.0 -ddfma37777 fma 1 1.0 0.0 -> 1.0 -ddfma37778 fma 1 1.0 -0.0 -> 1.0 - --- Specials -ddfma37780 fma 1 -Inf -Inf -> -Infinity -ddfma37781 fma 1 -Inf -1000 -> -Infinity -ddfma37782 fma 1 -Inf -1 -> -Infinity -ddfma37783 fma 1 -Inf -0 -> -Infinity -ddfma37784 fma 1 -Inf 0 -> -Infinity -ddfma37785 fma 1 -Inf 1 -> -Infinity -ddfma37786 fma 1 -Inf 1000 -> -Infinity -ddfma37787 fma 1 -1000 -Inf -> -Infinity -ddfma37788 fma 1 -Inf -Inf -> -Infinity -ddfma37789 fma 1 -1 -Inf -> -Infinity -ddfma37790 fma 1 -0 -Inf -> -Infinity -ddfma37791 fma 1 0 -Inf -> -Infinity -ddfma37792 fma 1 1 -Inf -> -Infinity -ddfma37793 fma 1 1000 -Inf -> -Infinity -ddfma37794 fma 1 Inf -Inf -> NaN Invalid_operation - -ddfma37800 fma 1 Inf -Inf -> NaN Invalid_operation -ddfma37801 fma 1 Inf -1000 -> Infinity -ddfma37802 fma 1 Inf -1 -> Infinity -ddfma37803 fma 1 Inf -0 -> Infinity -ddfma37804 fma 1 Inf 0 -> Infinity -ddfma37805 fma 1 Inf 1 -> Infinity -ddfma37806 fma 1 Inf 1000 -> Infinity -ddfma37807 fma 1 Inf Inf -> Infinity -ddfma37808 fma 1 -1000 Inf -> Infinity -ddfma37809 fma 1 -Inf Inf -> NaN Invalid_operation -ddfma37810 fma 1 -1 Inf -> Infinity -ddfma37811 fma 1 -0 Inf -> Infinity -ddfma37812 fma 1 0 Inf -> Infinity -ddfma37813 fma 1 1 Inf -> Infinity -ddfma37814 fma 1 1000 Inf -> Infinity -ddfma37815 fma 1 Inf Inf -> Infinity - -ddfma37821 fma 1 NaN -Inf -> NaN -ddfma37822 fma 1 NaN -1000 -> NaN -ddfma37823 fma 1 NaN -1 -> NaN -ddfma37824 fma 1 NaN -0 -> NaN -ddfma37825 fma 1 NaN 0 -> NaN -ddfma37826 fma 1 NaN 1 -> NaN -ddfma37827 fma 1 NaN 1000 -> NaN -ddfma37828 fma 1 NaN Inf -> NaN -ddfma37829 fma 1 NaN NaN -> NaN -ddfma37830 fma 1 -Inf NaN -> NaN -ddfma37831 fma 1 -1000 NaN -> NaN -ddfma37832 fma 1 -1 NaN -> NaN -ddfma37833 fma 1 -0 NaN -> NaN -ddfma37834 fma 1 0 NaN -> NaN -ddfma37835 fma 1 1 NaN -> NaN -ddfma37836 fma 1 1000 NaN -> NaN -ddfma37837 fma 1 Inf NaN -> NaN - -ddfma37841 fma 1 sNaN -Inf -> NaN Invalid_operation -ddfma37842 fma 1 sNaN -1000 -> NaN Invalid_operation -ddfma37843 fma 1 sNaN -1 -> NaN Invalid_operation -ddfma37844 fma 1 sNaN -0 -> NaN Invalid_operation -ddfma37845 fma 1 sNaN 0 -> NaN Invalid_operation -ddfma37846 fma 1 sNaN 1 -> NaN Invalid_operation -ddfma37847 fma 1 sNaN 1000 -> NaN Invalid_operation -ddfma37848 fma 1 sNaN NaN -> NaN Invalid_operation -ddfma37849 fma 1 sNaN sNaN -> NaN Invalid_operation -ddfma37850 fma 1 NaN sNaN -> NaN Invalid_operation -ddfma37851 fma 1 -Inf sNaN -> NaN Invalid_operation -ddfma37852 fma 1 -1000 sNaN -> NaN Invalid_operation -ddfma37853 fma 1 -1 sNaN -> NaN Invalid_operation -ddfma37854 fma 1 -0 sNaN -> NaN Invalid_operation -ddfma37855 fma 1 0 sNaN -> NaN Invalid_operation -ddfma37856 fma 1 1 sNaN -> NaN Invalid_operation -ddfma37857 fma 1 1000 sNaN -> NaN Invalid_operation -ddfma37858 fma 1 Inf sNaN -> NaN Invalid_operation -ddfma37859 fma 1 NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddfma37861 fma 1 NaN1 -Inf -> NaN1 -ddfma37862 fma 1 +NaN2 -1000 -> NaN2 -ddfma37863 fma 1 NaN3 1000 -> NaN3 -ddfma37864 fma 1 NaN4 Inf -> NaN4 -ddfma37865 fma 1 NaN5 +NaN6 -> NaN5 -ddfma37866 fma 1 -Inf NaN7 -> NaN7 -ddfma37867 fma 1 -1000 NaN8 -> NaN8 -ddfma37868 fma 1 1000 NaN9 -> NaN9 -ddfma37869 fma 1 Inf +NaN10 -> NaN10 -ddfma37871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation -ddfma37872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation -ddfma37873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation -ddfma37874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation -ddfma37875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation -ddfma37876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation -ddfma37877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation -ddfma37878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation -ddfma37879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation -ddfma37880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation -ddfma37881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddfma37882 fma 1 -NaN26 NaN28 -> -NaN26 -ddfma37883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddfma37884 fma 1 1000 -NaN30 -> -NaN30 -ddfma37885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Here we explore near the boundary of rounding a subnormal to Nmin -ddfma37575 fma 1 1E-383 -1E-398 -> 9.99999999999999E-384 Subnormal -ddfma37576 fma 1 -1E-383 +1E-398 -> -9.99999999999999E-384 Subnormal - --- check overflow edge case --- 1234567890123456 -ddfma37972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 -ddfma37973 fma 1 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded -ddfma37974 fma 1 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded -ddfma37975 fma 1 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded -ddfma37976 fma 1 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded -ddfma37977 fma 1 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded -ddfma37978 fma 1 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded -ddfma37979 fma 1 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded -ddfma37980 fma 1 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded -ddfma37981 fma 1 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded -ddfma37982 fma 1 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded -ddfma37983 fma 1 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded -ddfma37984 fma 1 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded - -ddfma37985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 -ddfma37986 fma 1 -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded -ddfma37987 fma 1 -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded -ddfma37988 fma 1 -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded -ddfma37989 fma 1 -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded -ddfma37990 fma 1 -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded -ddfma37991 fma 1 -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded -ddfma37992 fma 1 -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded -ddfma37993 fma 1 -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded -ddfma37994 fma 1 -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded -ddfma37995 fma 1 -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded -ddfma37996 fma 1 -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded -ddfma37997 fma 1 -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -ddfma371100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact -ddfma371101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact -ddfma371103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact -ddfma371104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact -ddfma371105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact -ddfma371106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact -ddfma371107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact -ddfma371108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact -ddfma371109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact - -rounding: ceiling -ddfma371110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact -ddfma371111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact -ddfma371113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact -ddfma371114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact -ddfma371115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact -ddfma371116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact -ddfma371117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact -ddfma371118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact -ddfma371119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -ddfma371300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded -ddfma371310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded -ddfma371311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded -ddfma371312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded -ddfma371313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded -ddfma371314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded -ddfma371315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded -ddfma371316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded -ddfma371317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded -ddfma371318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded -ddfma371319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded -ddfma371320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded -ddfma371321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded -ddfma371322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded -ddfma371323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded -ddfma371324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded -ddfma371325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded -ddfma371339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded - -ddfma371340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded -ddfma371341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded - -ddfma371349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded -ddfma371350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded -ddfma371351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded -ddfma371352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded -ddfma371353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded -ddfma371354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded -ddfma371355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded -ddfma371356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded -ddfma371357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded -ddfma371358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded -ddfma371359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded -ddfma371360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded -ddfma371361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded -ddfma371362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded -ddfma371363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded -ddfma371364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded -ddfma371365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded -ddfma371380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded -ddfma371381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded -ddfma371382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded -ddfma371396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -ddfma371420 fma 1 0 1.123456789012345 -> 1.123456789012345 -ddfma371421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 -ddfma371422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 -ddfma371423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 -ddfma371424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 -ddfma371425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 -ddfma371426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 -ddfma371427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 -ddfma371428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 -ddfma371429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 -ddfma371430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 -ddfma371431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 -ddfma371432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 -ddfma371433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 -ddfma371434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 -ddfma371435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 -ddfma371436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 -ddfma371437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 -ddfma371438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 -ddfma371439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 - --- same, reversed 0 -ddfma371440 fma 1 1.123456789012345 0 -> 1.123456789012345 -ddfma371441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 -ddfma371442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 -ddfma371443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 -ddfma371444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 -ddfma371445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 -ddfma371446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 -ddfma371447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 -ddfma371448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 -ddfma371449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 -ddfma371450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 -ddfma371451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 -ddfma371452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 -ddfma371453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 -ddfma371454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 -ddfma371455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 -ddfma371456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 -ddfma371457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 -ddfma371458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 -ddfma371459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 - --- same, Es on the 0 -ddfma371460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 -ddfma371461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 -ddfma371462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 -ddfma371463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 -ddfma371464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 -ddfma371465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 -ddfma371466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 -ddfma371467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 -ddfma371468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 -ddfma371469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 -ddfma371470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 -ddfma371471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 -ddfma371472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 -ddfma371473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 -ddfma371474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 -ddfma371475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 --- next four flag Rounded because the 0 extends the result -ddfma371476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded -ddfma371477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded -ddfma371478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded -ddfma371479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -ddfma371500 fma 1 0 0E-19 -> 0E-19 -ddfma371501 fma 1 -0 0E-19 -> 0E-19 -ddfma371502 fma 1 0 -0E-19 -> 0E-19 -ddfma371503 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371511 fma 1 -11 11 -> 0 -ddfma371512 fma 1 11 -11 -> 0 - -rounding: half_down --- exact zeros from zeros -ddfma371520 fma 1 0 0E-19 -> 0E-19 -ddfma371521 fma 1 -0 0E-19 -> 0E-19 -ddfma371522 fma 1 0 -0E-19 -> 0E-19 -ddfma371523 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371531 fma 1 -11 11 -> 0 -ddfma371532 fma 1 11 -11 -> 0 - -rounding: half_even --- exact zeros from zeros -ddfma371540 fma 1 0 0E-19 -> 0E-19 -ddfma371541 fma 1 -0 0E-19 -> 0E-19 -ddfma371542 fma 1 0 -0E-19 -> 0E-19 -ddfma371543 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371551 fma 1 -11 11 -> 0 -ddfma371552 fma 1 11 -11 -> 0 - -rounding: up --- exact zeros from zeros -ddfma371560 fma 1 0 0E-19 -> 0E-19 -ddfma371561 fma 1 -0 0E-19 -> 0E-19 -ddfma371562 fma 1 0 -0E-19 -> 0E-19 -ddfma371563 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371571 fma 1 -11 11 -> 0 -ddfma371572 fma 1 11 -11 -> 0 - -rounding: down --- exact zeros from zeros -ddfma371580 fma 1 0 0E-19 -> 0E-19 -ddfma371581 fma 1 -0 0E-19 -> 0E-19 -ddfma371582 fma 1 0 -0E-19 -> 0E-19 -ddfma371583 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371591 fma 1 -11 11 -> 0 -ddfma371592 fma 1 11 -11 -> 0 - -rounding: ceiling --- exact zeros from zeros -ddfma371600 fma 1 0 0E-19 -> 0E-19 -ddfma371601 fma 1 -0 0E-19 -> 0E-19 -ddfma371602 fma 1 0 -0E-19 -> 0E-19 -ddfma371603 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371611 fma 1 -11 11 -> 0 -ddfma371612 fma 1 11 -11 -> 0 - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -ddfma371620 fma 1 0 0E-19 -> 0E-19 -ddfma371621 fma 1 -0 0E-19 -> -0E-19 -- * -ddfma371622 fma 1 0 -0E-19 -> -0E-19 -- * -ddfma371623 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371631 fma 1 -11 11 -> -0 -- * -ddfma371632 fma 1 11 -11 -> -0 -- * - --- Examples from SQL proposal (Krishna Kulkarni) -ddfma371701 fma 1 130E-2 120E-2 -> 2.50 -ddfma371702 fma 1 130E-2 12E-1 -> 2.50 -ddfma371703 fma 1 130E-2 1E0 -> 2.30 -ddfma371704 fma 1 1E2 1E4 -> 1.01E+4 -ddfma371705 fma 1 130E-2 -120E-2 -> 0.10 -ddfma371706 fma 1 130E-2 -12E-1 -> 0.10 -ddfma371707 fma 1 130E-2 -1E0 -> 0.30 -ddfma371708 fma 1 1E2 -1E4 -> -9.9E+3 - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -ddfma375001 fma 1 1234567890123456 1 -> 1234567890123457 -ddfma375002 fma 1 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded -ddfma375003 fma 1 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded -ddfma375004 fma 1 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded -ddfma375005 fma 1 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded -ddfma375006 fma 1 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded -ddfma375007 fma 1 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded -ddfma375008 fma 1 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded -ddfma375009 fma 1 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded -ddfma375010 fma 1 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded -ddfma375011 fma 1 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded -ddfma375012 fma 1 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded -ddfma375013 fma 1 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded -ddfma375014 fma 1 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded -ddfma375015 fma 1 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded -ddfma375016 fma 1 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded -ddfma375017 fma 1 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded -ddfma375018 fma 1 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded -ddfma375019 fma 1 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded -ddfma375020 fma 1 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded -ddfma375021 fma 1 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded - --- widening second argument at gap -ddfma375030 fma 1 12345678 1 -> 12345679 -ddfma375031 fma 1 12345678 0.1 -> 12345678.1 -ddfma375032 fma 1 12345678 0.12 -> 12345678.12 -ddfma375033 fma 1 12345678 0.123 -> 12345678.123 -ddfma375034 fma 1 12345678 0.1234 -> 12345678.1234 -ddfma375035 fma 1 12345678 0.12345 -> 12345678.12345 -ddfma375036 fma 1 12345678 0.123456 -> 12345678.123456 -ddfma375037 fma 1 12345678 0.1234567 -> 12345678.1234567 -ddfma375038 fma 1 12345678 0.12345678 -> 12345678.12345678 -ddfma375039 fma 1 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded -ddfma375040 fma 1 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded -ddfma375041 fma 1 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded -ddfma375042 fma 1 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded -ddfma375043 fma 1 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded -ddfma375044 fma 1 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded -ddfma375045 fma 1 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded -ddfma375046 fma 1 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded -ddfma375047 fma 1 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded -ddfma375048 fma 1 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded -ddfma375049 fma 1 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -ddfma375050 fma 1 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded -ddfma375051 fma 1 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded -ddfma375052 fma 1 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded -ddfma375053 fma 1 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded -ddfma375054 fma 1 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded -ddfma375055 fma 1 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded -ddfma375056 fma 1 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded -ddfma375057 fma 1 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded -ddfma375060 fma 1 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded -ddfma375061 fma 1 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded -ddfma375062 fma 1 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded -ddfma375063 fma 1 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded -ddfma375064 fma 1 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded -ddfma375065 fma 1 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded -ddfma375066 fma 1 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded -ddfma375067 fma 1 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -ddfma375070 fma 1 12345678 1E-8 -> 12345678.00000001 -ddfma375071 fma 1 12345678 1E-9 -> 12345678.00000001 Inexact Rounded -ddfma375072 fma 1 12345678 1E-10 -> 12345678.00000001 Inexact Rounded -ddfma375073 fma 1 12345678 1E-11 -> 12345678.00000001 Inexact Rounded -ddfma375074 fma 1 12345678 1E-12 -> 12345678.00000001 Inexact Rounded -ddfma375075 fma 1 12345678 1E-13 -> 12345678.00000001 Inexact Rounded -ddfma375076 fma 1 12345678 1E-14 -> 12345678.00000001 Inexact Rounded -ddfma375077 fma 1 12345678 1E-15 -> 12345678.00000001 Inexact Rounded -ddfma375078 fma 1 12345678 1E-16 -> 12345678.00000001 Inexact Rounded -ddfma375079 fma 1 12345678 1E-17 -> 12345678.00000001 Inexact Rounded -ddfma375080 fma 1 12345678 1E-18 -> 12345678.00000001 Inexact Rounded -ddfma375081 fma 1 12345678 1E-19 -> 12345678.00000001 Inexact Rounded -ddfma375082 fma 1 12345678 1E-20 -> 12345678.00000001 Inexact Rounded -ddfma375083 fma 1 12345678 1E-25 -> 12345678.00000001 Inexact Rounded -ddfma375084 fma 1 12345678 1E-30 -> 12345678.00000001 Inexact Rounded -ddfma375085 fma 1 12345678 1E-31 -> 12345678.00000001 Inexact Rounded -ddfma375086 fma 1 12345678 1E-32 -> 12345678.00000001 Inexact Rounded -ddfma375087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexact Rounded -ddfma375088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded -ddfma375089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded - --- destructive subtraction (from remainder tests) - --- +++ some of these will be off-by-one remainder vs remainderNear - -ddfma4000 fma -1234567890123454 1.000000000000001 1234567890123456 -> 0.765432109876546 -ddfma4001 fma -1234567890123443 1.00000000000001 1234567890123456 -> 0.65432109876557 -ddfma4002 fma -1234567890123332 1.0000000000001 1234567890123456 -> 0.5432109876668 -ddfma4003 fma -308641972530863 4.000000000000001 1234567890123455 -> 2.691358027469137 -ddfma4004 fma -308641972530863 4.000000000000001 1234567890123456 -> 3.691358027469137 -ddfma4005 fma -246913578024696 4.9999999999999 1234567890123456 -> 0.6913578024696 -ddfma4006 fma -246913578024691 4.99999999999999 1234567890123456 -> 3.46913578024691 -ddfma4007 fma -246913578024691 4.999999999999999 1234567890123456 -> 1.246913578024691 -ddfma4008 fma -246913578024691 5.000000000000001 1234567890123456 -> 0.753086421975309 -ddfma4009 fma -246913578024690 5.00000000000001 1234567890123456 -> 3.53086421975310 -ddfma4010 fma -246913578024686 5.0000000000001 1234567890123456 -> 1.3086421975314 -ddfma4011 fma -1234567890123455 1.000000000000001 1234567890123456 -> -0.234567890123455 -ddfma4012 fma -1234567890123444 1.00000000000001 1234567890123456 -> -0.34567890123444 -ddfma4013 fma -1234567890123333 1.0000000000001 1234567890123456 -> -0.4567890123333 -ddfma4014 fma -308641972530864 4.000000000000001 1234567890123455 -> -1.308641972530864 -ddfma4015 fma -308641972530864 4.000000000000001 1234567890123456 -> -0.308641972530864 -ddfma4016 fma -246913578024696 4.9999999999999 1234567890123456 -> 0.6913578024696 -ddfma4017 fma -246913578024692 4.99999999999999 1234567890123456 -> -1.53086421975308 -ddfma4018 fma -246913578024691 4.999999999999999 1234567890123456 -> 1.246913578024691 -ddfma4019 fma -246913578024691 5.000000000000001 1234567890123456 -> 0.753086421975309 -ddfma4020 fma -246913578024691 5.00000000000001 1234567890123456 -> -1.46913578024691 -ddfma4021 fma -246913578024686 5.0000000000001 1234567890123456 -> 1.3086421975314 - - --- Null tests -ddfma39990 fma 1 10 # -> NaN Invalid_operation -ddfma39991 fma 1 # 10 -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- ddFMA.decTest -- decDouble Fused Multiply Add -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- These tests comprise three parts: +-- 1. Sanity checks and other three-operand tests (especially those +-- where the fused operation makes a difference) +-- 2. Multiply tests (third operand is neutral zero [0E+emax]) +-- 3. Addition tests (first operand is 1) +-- The multiply and addition tests are extensive because FMA may have +-- its own dedicated multiplication or addition routine(s), and they +-- also inherently check the left-to-right properties. + +-- Sanity checks +ddfma0001 fma 1 1 1 -> 2 +ddfma0002 fma 1 1 2 -> 3 +ddfma0003 fma 2 2 3 -> 7 +ddfma0004 fma 9 9 9 -> 90 +ddfma0005 fma -1 1 1 -> 0 +ddfma0006 fma -1 1 2 -> 1 +ddfma0007 fma -2 2 3 -> -1 +ddfma0008 fma -9 9 9 -> -72 +ddfma0011 fma 1 -1 1 -> 0 +ddfma0012 fma 1 -1 2 -> 1 +ddfma0013 fma 2 -2 3 -> -1 +ddfma0014 fma 9 -9 9 -> -72 +ddfma0015 fma 1 1 -1 -> 0 +ddfma0016 fma 1 1 -2 -> -1 +ddfma0017 fma 2 2 -3 -> 1 +ddfma0018 fma 9 9 -9 -> 72 + +-- non-integer exacts +ddfma0100 fma 25.2 63.6 -438 -> 1164.72 +ddfma0101 fma 0.301 0.380 334 -> 334.114380 +ddfma0102 fma 49.2 -4.8 23.3 -> -212.86 +ddfma0103 fma 4.22 0.079 -94.6 -> -94.26662 +ddfma0104 fma 903 0.797 0.887 -> 720.578 +ddfma0105 fma 6.13 -161 65.9 -> -921.03 +ddfma0106 fma 28.2 727 5.45 -> 20506.85 +ddfma0107 fma 4 605 688 -> 3108 +ddfma0108 fma 93.3 0.19 0.226 -> 17.953 +ddfma0109 fma 0.169 -341 5.61 -> -52.019 +ddfma0110 fma -72.2 30 -51.2 -> -2217.2 +ddfma0111 fma -0.409 13 20.4 -> 15.083 +ddfma0112 fma 317 77.0 19.0 -> 24428.0 +ddfma0113 fma 47 6.58 1.62 -> 310.88 +ddfma0114 fma 1.36 0.984 0.493 -> 1.83124 +ddfma0115 fma 72.7 274 1.56 -> 19921.36 +ddfma0116 fma 335 847 83 -> 283828 +ddfma0117 fma 666 0.247 25.4 -> 189.902 +ddfma0118 fma -3.87 3.06 78.0 -> 66.1578 +ddfma0119 fma 0.742 192 35.6 -> 178.064 +ddfma0120 fma -91.6 5.29 0.153 -> -484.411 + +-- cases where result is different from separate multiply + add; each +-- is preceded by the result of unfused multiply and add +-- [this is about 20% of all similar cases in general] +-- -> 7.123356429257969E+16 +ddfma0201 fma 27583489.6645 2582471078.04 2593183.42371 -> 7.123356429257970E+16 Inexact Rounded +-- -> 22813275328.80506 +ddfma0208 fma 24280.355566 939577.397653 2032.013252 -> 22813275328.80507 Inexact Rounded +-- -> -2.030397734278062E+16 +ddfma0209 fma 7848976432 -2586831.2281 137903.517909 -> -2.030397734278061E+16 Inexact Rounded +-- -> 2040774094814.077 +ddfma0217 fma 56890.388731 35872030.4255 339337.123410 -> 2040774094814.078 Inexact Rounded +-- -> 2.714469575205049E+18 +ddfma0220 fma 7533543.57445 360317763928 5073392.31638 -> 2.714469575205050E+18 Inexact Rounded +-- -> 1.011676297716716E+19 +ddfma0223 fma 739945255.563 13672312784.1 -994381.53572 -> 1.011676297716715E+19 Inexact Rounded +-- -> -2.914135721455315E+23 +ddfma0224 fma -413510957218 704729988550 9234162614.0 -> -2.914135721455314E+23 Inexact Rounded +-- -> 2.620119863365786E+17 +ddfma0226 fma 437484.00601 598906432790 894450638.442 -> 2.620119863365787E+17 Inexact Rounded +-- -> 1.272647995808178E+19 +ddfma0253 fma 73287556929 173651305.784 -358312568.389 -> 1.272647995808177E+19 Inexact Rounded +-- -> -1.753769320861851E+18 +ddfma0257 fma 203258304486 -8628278.8066 153127.446727 -> -1.753769320861850E+18 Inexact Rounded +-- -> -1.550737835263346E+17 +ddfma0260 fma 42560533.1774 -3643605282.86 178277.96377 -> -1.550737835263347E+17 Inexact Rounded +-- -> 2.897624620576005E+22 +ddfma0269 fma 142656587375 203118879670 604576103991 -> 2.897624620576004E+22 Inexact Rounded + +-- Cases where multiply would overflow or underflow if separate +fma0300 fma 9e+384 10 0 -> Infinity Overflow Inexact Rounded +fma0301 fma 1e+384 10 0 -> Infinity Overflow Inexact Rounded +fma0302 fma 1e+384 10 -1e+384 -> 9.000000000000000E+384 Clamped +fma0303 fma 1e+384 10 -9e+384 -> 1.000000000000000E+384 Clamped +-- subnormal etc. +fma0305 fma 1e-398 0.1 0 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +fma0306 fma 1e-398 0.1 1 -> 1.000000000000000 Inexact Rounded +fma0307 fma 1e-398 0.1 1e-398 -> 1E-398 Underflow Subnormal Inexact Rounded + +-- Infinite combinations +ddfma0800 fma Inf Inf Inf -> Infinity +ddfma0801 fma Inf Inf -Inf -> NaN Invalid_operation +ddfma0802 fma Inf -Inf Inf -> NaN Invalid_operation +ddfma0803 fma Inf -Inf -Inf -> -Infinity +ddfma0804 fma -Inf Inf Inf -> NaN Invalid_operation +ddfma0805 fma -Inf Inf -Inf -> -Infinity +ddfma0806 fma -Inf -Inf Inf -> Infinity +ddfma0807 fma -Inf -Inf -Inf -> NaN Invalid_operation + +-- Triple NaN propagation +ddfma0900 fma NaN2 NaN3 NaN5 -> NaN2 +ddfma0901 fma 0 NaN3 NaN5 -> NaN3 +ddfma0902 fma 0 0 NaN5 -> NaN5 +-- first sNaN wins (consider qNaN from earlier sNaN being +-- overridden by an sNaN in third operand) +ddfma0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +ddfma0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation +ddfma0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation +ddfma0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +ddfma0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation +ddfma0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation + +-- MULTIPLICATION TESTS ------------------------------------------------ + +-- sanity checks +ddfma2000 fma 2 2 0e+384 -> 4 +ddfma2001 fma 2 3 0e+384 -> 6 +ddfma2002 fma 5 1 0e+384 -> 5 +ddfma2003 fma 5 2 0e+384 -> 10 +ddfma2004 fma 1.20 2 0e+384 -> 2.40 +ddfma2005 fma 1.20 0 0e+384 -> 0.00 +ddfma2006 fma 1.20 -2 0e+384 -> -2.40 +ddfma2007 fma -1.20 2 0e+384 -> -2.40 +ddfma2008 fma -1.20 0 0e+384 -> 0.00 +ddfma2009 fma -1.20 -2 0e+384 -> 2.40 +ddfma2010 fma 5.09 7.1 0e+384 -> 36.139 +ddfma2011 fma 2.5 4 0e+384 -> 10.0 +ddfma2012 fma 2.50 4 0e+384 -> 10.00 +ddfma2013 fma 1.23456789 1.00000000 0e+384 -> 1.234567890000000 Rounded +ddfma2015 fma 2.50 4 0e+384 -> 10.00 +ddfma2016 fma 9.999999999 9.999999999 0e+384 -> 99.99999998000000 Inexact Rounded +ddfma2017 fma 9.999999999 -9.999999999 0e+384 -> -99.99999998000000 Inexact Rounded +ddfma2018 fma -9.999999999 9.999999999 0e+384 -> -99.99999998000000 Inexact Rounded +ddfma2019 fma -9.999999999 -9.999999999 0e+384 -> 99.99999998000000 Inexact Rounded + +-- zeros, etc. +ddfma2021 fma 0 0 0e+384 -> 0 +ddfma2022 fma 0 -0 0e+384 -> 0 +ddfma2023 fma -0 0 0e+384 -> 0 +ddfma2024 fma -0 -0 0e+384 -> 0 +ddfma2025 fma -0.0 -0.0 0e+384 -> 0.00 +ddfma2026 fma -0.0 -0.0 0e+384 -> 0.00 +ddfma2027 fma -0.0 -0.0 0e+384 -> 0.00 +ddfma2028 fma -0.0 -0.0 0e+384 -> 0.00 +ddfma2030 fma 5.00 1E-3 0e+384 -> 0.00500 +ddfma2031 fma 00.00 0.000 0e+384 -> 0.00000 +ddfma2032 fma 00.00 0E-3 0e+384 -> 0.00000 -- rhs is 0 +ddfma2033 fma 0E-3 00.00 0e+384 -> 0.00000 -- lhs is 0 +ddfma2034 fma -5.00 1E-3 0e+384 -> -0.00500 +ddfma2035 fma -00.00 0.000 0e+384 -> 0.00000 +ddfma2036 fma -00.00 0E-3 0e+384 -> 0.00000 -- rhs is 0 +ddfma2037 fma -0E-3 00.00 0e+384 -> 0.00000 -- lhs is 0 +ddfma2038 fma 5.00 -1E-3 0e+384 -> -0.00500 +ddfma2039 fma 00.00 -0.000 0e+384 -> 0.00000 +ddfma2040 fma 00.00 -0E-3 0e+384 -> 0.00000 -- rhs is 0 +ddfma2041 fma 0E-3 -00.00 0e+384 -> 0.00000 -- lhs is 0 +ddfma2042 fma -5.00 -1E-3 0e+384 -> 0.00500 +ddfma2043 fma -00.00 -0.000 0e+384 -> 0.00000 +ddfma2044 fma -00.00 -0E-3 0e+384 -> 0.00000 -- rhs is 0 +ddfma2045 fma -0E-3 -00.00 -0e+384 -> 0.00000 -- lhs is 0 +ddfma2046 fma -0E-3 00.00 -0e+384 -> -0.00000 +ddfma2047 fma 0E-3 -00.00 -0e+384 -> -0.00000 +ddfma2048 fma 0E-3 00.00 -0e+384 -> 0.00000 + +-- examples from decarith +ddfma2050 fma 1.20 3 0e+384 -> 3.60 +ddfma2051 fma 7 3 0e+384 -> 21 +ddfma2052 fma 0.9 0.8 0e+384 -> 0.72 +ddfma2053 fma 0.9 -0 0e+384 -> 0.0 +ddfma2054 fma 654321 654321 0e+384 -> 428135971041 + +ddfma2060 fma 123.45 1e7 0e+384 -> 1.2345E+9 +ddfma2061 fma 123.45 1e8 0e+384 -> 1.2345E+10 +ddfma2062 fma 123.45 1e+9 0e+384 -> 1.2345E+11 +ddfma2063 fma 123.45 1e10 0e+384 -> 1.2345E+12 +ddfma2064 fma 123.45 1e11 0e+384 -> 1.2345E+13 +ddfma2065 fma 123.45 1e12 0e+384 -> 1.2345E+14 +ddfma2066 fma 123.45 1e13 0e+384 -> 1.2345E+15 + + +-- test some intermediate lengths +-- 1234567890123456 +ddfma2080 fma 0.1 1230123456456789 0e+384 -> 123012345645678.9 +ddfma2084 fma 0.1 1230123456456789 0e+384 -> 123012345645678.9 +ddfma2090 fma 1230123456456789 0.1 0e+384 -> 123012345645678.9 +ddfma2094 fma 1230123456456789 0.1 0e+384 -> 123012345645678.9 + +-- test some more edge cases and carries +ddfma2101 fma 9 9 0e+384 -> 81 +ddfma2102 fma 9 90 0e+384 -> 810 +ddfma2103 fma 9 900 0e+384 -> 8100 +ddfma2104 fma 9 9000 0e+384 -> 81000 +ddfma2105 fma 9 90000 0e+384 -> 810000 +ddfma2106 fma 9 900000 0e+384 -> 8100000 +ddfma2107 fma 9 9000000 0e+384 -> 81000000 +ddfma2108 fma 9 90000000 0e+384 -> 810000000 +ddfma2109 fma 9 900000000 0e+384 -> 8100000000 +ddfma2110 fma 9 9000000000 0e+384 -> 81000000000 +ddfma2111 fma 9 90000000000 0e+384 -> 810000000000 +ddfma2112 fma 9 900000000000 0e+384 -> 8100000000000 +ddfma2113 fma 9 9000000000000 0e+384 -> 81000000000000 +ddfma2114 fma 9 90000000000000 0e+384 -> 810000000000000 +ddfma2115 fma 9 900000000000000 0e+384 -> 8100000000000000 +--ddfma2116 fma 9 9000000000000000 0e+384 -> 81000000000000000 +--ddfma2117 fma 9 90000000000000000 0e+384 -> 810000000000000000 +--ddfma2118 fma 9 900000000000000000 0e+384 -> 8100000000000000000 +--ddfma2119 fma 9 9000000000000000000 0e+384 -> 81000000000000000000 +--ddfma2120 fma 9 90000000000000000000 0e+384 -> 810000000000000000000 +--ddfma2121 fma 9 900000000000000000000 0e+384 -> 8100000000000000000000 +--ddfma2122 fma 9 9000000000000000000000 0e+384 -> 81000000000000000000000 +--ddfma2123 fma 9 90000000000000000000000 0e+384 -> 810000000000000000000000 +-- test some more edge cases without carries +ddfma2131 fma 3 3 0e+384 -> 9 +ddfma2132 fma 3 30 0e+384 -> 90 +ddfma2133 fma 3 300 0e+384 -> 900 +ddfma2134 fma 3 3000 0e+384 -> 9000 +ddfma2135 fma 3 30000 0e+384 -> 90000 +ddfma2136 fma 3 300000 0e+384 -> 900000 +ddfma2137 fma 3 3000000 0e+384 -> 9000000 +ddfma2138 fma 3 30000000 0e+384 -> 90000000 +ddfma2139 fma 3 300000000 0e+384 -> 900000000 +ddfma2140 fma 3 3000000000 0e+384 -> 9000000000 +ddfma2141 fma 3 30000000000 0e+384 -> 90000000000 +ddfma2142 fma 3 300000000000 0e+384 -> 900000000000 +ddfma2143 fma 3 3000000000000 0e+384 -> 9000000000000 +ddfma2144 fma 3 30000000000000 0e+384 -> 90000000000000 +ddfma2145 fma 3 300000000000000 0e+384 -> 900000000000000 + +-- test some edge cases with exact rounding +ddfma2301 fma 9 9 0e+384 -> 81 +ddfma2302 fma 9 90 0e+384 -> 810 +ddfma2303 fma 9 900 0e+384 -> 8100 +ddfma2304 fma 9 9000 0e+384 -> 81000 +ddfma2305 fma 9 90000 0e+384 -> 810000 +ddfma2306 fma 9 900000 0e+384 -> 8100000 +ddfma2307 fma 9 9000000 0e+384 -> 81000000 +ddfma2308 fma 9 90000000 0e+384 -> 810000000 +ddfma2309 fma 9 900000000 0e+384 -> 8100000000 +ddfma2310 fma 9 9000000000 0e+384 -> 81000000000 +ddfma2311 fma 9 90000000000 0e+384 -> 810000000000 +ddfma2312 fma 9 900000000000 0e+384 -> 8100000000000 +ddfma2313 fma 9 9000000000000 0e+384 -> 81000000000000 +ddfma2314 fma 9 90000000000000 0e+384 -> 810000000000000 +ddfma2315 fma 9 900000000000000 0e+384 -> 8100000000000000 +ddfma2316 fma 9 9000000000000000 0e+384 -> 8.100000000000000E+16 Rounded +ddfma2317 fma 90 9000000000000000 0e+384 -> 8.100000000000000E+17 Rounded +ddfma2318 fma 900 9000000000000000 0e+384 -> 8.100000000000000E+18 Rounded +ddfma2319 fma 9000 9000000000000000 0e+384 -> 8.100000000000000E+19 Rounded +ddfma2320 fma 90000 9000000000000000 0e+384 -> 8.100000000000000E+20 Rounded +ddfma2321 fma 900000 9000000000000000 0e+384 -> 8.100000000000000E+21 Rounded +ddfma2322 fma 9000000 9000000000000000 0e+384 -> 8.100000000000000E+22 Rounded +ddfma2323 fma 90000000 9000000000000000 0e+384 -> 8.100000000000000E+23 Rounded + +-- tryzeros cases +ddfma2504 fma 0E-260 1000E-260 0e+384 -> 0E-398 Clamped +ddfma2505 fma 100E+260 0E+260 0e+384 -> 0E+369 Clamped + +-- mixed with zeros +ddfma2541 fma 0 -1 0e+384 -> 0 +ddfma2542 fma -0 -1 0e+384 -> 0 +ddfma2543 fma 0 1 0e+384 -> 0 +ddfma2544 fma -0 1 0e+384 -> 0 +ddfma2545 fma -1 0 0e+384 -> 0 +ddfma2546 fma -1 -0 0e+384 -> 0 +ddfma2547 fma 1 0 0e+384 -> 0 +ddfma2548 fma 1 -0 0e+384 -> 0 + +ddfma2551 fma 0.0 -1 0e+384 -> 0.0 +ddfma2552 fma -0.0 -1 0e+384 -> 0.0 +ddfma2553 fma 0.0 1 0e+384 -> 0.0 +ddfma2554 fma -0.0 1 0e+384 -> 0.0 +ddfma2555 fma -1.0 0 0e+384 -> 0.0 +ddfma2556 fma -1.0 -0 0e+384 -> 0.0 +ddfma2557 fma 1.0 0 0e+384 -> 0.0 +ddfma2558 fma 1.0 -0 0e+384 -> 0.0 + +ddfma2561 fma 0 -1.0 0e+384 -> 0.0 +ddfma2562 fma -0 -1.0 0e+384 -> 0.0 +ddfma2563 fma 0 1.0 0e+384 -> 0.0 +ddfma2564 fma -0 1.0 0e+384 -> 0.0 +ddfma2565 fma -1 0.0 0e+384 -> 0.0 +ddfma2566 fma -1 -0.0 0e+384 -> 0.0 +ddfma2567 fma 1 0.0 0e+384 -> 0.0 +ddfma2568 fma 1 -0.0 0e+384 -> 0.0 + +ddfma2571 fma 0.0 -1.0 0e+384 -> 0.00 +ddfma2572 fma -0.0 -1.0 0e+384 -> 0.00 +ddfma2573 fma 0.0 1.0 0e+384 -> 0.00 +ddfma2574 fma -0.0 1.0 0e+384 -> 0.00 +ddfma2575 fma -1.0 0.0 0e+384 -> 0.00 +ddfma2576 fma -1.0 -0.0 0e+384 -> 0.00 +ddfma2577 fma 1.0 0.0 0e+384 -> 0.00 +ddfma2578 fma 1.0 -0.0 0e+384 -> 0.00 + +-- Specials +ddfma2580 fma Inf -Inf 0e+384 -> -Infinity +ddfma2581 fma Inf -1000 0e+384 -> -Infinity +ddfma2582 fma Inf -1 0e+384 -> -Infinity +ddfma2583 fma Inf -0 0e+384 -> NaN Invalid_operation +ddfma2584 fma Inf 0 0e+384 -> NaN Invalid_operation +ddfma2585 fma Inf 1 0e+384 -> Infinity +ddfma2586 fma Inf 1000 0e+384 -> Infinity +ddfma2587 fma Inf Inf 0e+384 -> Infinity +ddfma2588 fma -1000 Inf 0e+384 -> -Infinity +ddfma2589 fma -Inf Inf 0e+384 -> -Infinity +ddfma2590 fma -1 Inf 0e+384 -> -Infinity +ddfma2591 fma -0 Inf 0e+384 -> NaN Invalid_operation +ddfma2592 fma 0 Inf 0e+384 -> NaN Invalid_operation +ddfma2593 fma 1 Inf 0e+384 -> Infinity +ddfma2594 fma 1000 Inf 0e+384 -> Infinity +ddfma2595 fma Inf Inf 0e+384 -> Infinity + +ddfma2600 fma -Inf -Inf 0e+384 -> Infinity +ddfma2601 fma -Inf -1000 0e+384 -> Infinity +ddfma2602 fma -Inf -1 0e+384 -> Infinity +ddfma2603 fma -Inf -0 0e+384 -> NaN Invalid_operation +ddfma2604 fma -Inf 0 0e+384 -> NaN Invalid_operation +ddfma2605 fma -Inf 1 0e+384 -> -Infinity +ddfma2606 fma -Inf 1000 0e+384 -> -Infinity +ddfma2607 fma -Inf Inf 0e+384 -> -Infinity +ddfma2608 fma -1000 Inf 0e+384 -> -Infinity +ddfma2609 fma -Inf -Inf 0e+384 -> Infinity +ddfma2610 fma -1 -Inf 0e+384 -> Infinity +ddfma2611 fma -0 -Inf 0e+384 -> NaN Invalid_operation +ddfma2612 fma 0 -Inf 0e+384 -> NaN Invalid_operation +ddfma2613 fma 1 -Inf 0e+384 -> -Infinity +ddfma2614 fma 1000 -Inf 0e+384 -> -Infinity +ddfma2615 fma Inf -Inf 0e+384 -> -Infinity + +ddfma2621 fma NaN -Inf 0e+384 -> NaN +ddfma2622 fma NaN -1000 0e+384 -> NaN +ddfma2623 fma NaN -1 0e+384 -> NaN +ddfma2624 fma NaN -0 0e+384 -> NaN +ddfma2625 fma NaN 0 0e+384 -> NaN +ddfma2626 fma NaN 1 0e+384 -> NaN +ddfma2627 fma NaN 1000 0e+384 -> NaN +ddfma2628 fma NaN Inf 0e+384 -> NaN +ddfma2629 fma NaN NaN 0e+384 -> NaN +ddfma2630 fma -Inf NaN 0e+384 -> NaN +ddfma2631 fma -1000 NaN 0e+384 -> NaN +ddfma2632 fma -1 NaN 0e+384 -> NaN +ddfma2633 fma -0 NaN 0e+384 -> NaN +ddfma2634 fma 0 NaN 0e+384 -> NaN +ddfma2635 fma 1 NaN 0e+384 -> NaN +ddfma2636 fma 1000 NaN 0e+384 -> NaN +ddfma2637 fma Inf NaN 0e+384 -> NaN + +ddfma2641 fma sNaN -Inf 0e+384 -> NaN Invalid_operation +ddfma2642 fma sNaN -1000 0e+384 -> NaN Invalid_operation +ddfma2643 fma sNaN -1 0e+384 -> NaN Invalid_operation +ddfma2644 fma sNaN -0 0e+384 -> NaN Invalid_operation +ddfma2645 fma sNaN 0 0e+384 -> NaN Invalid_operation +ddfma2646 fma sNaN 1 0e+384 -> NaN Invalid_operation +ddfma2647 fma sNaN 1000 0e+384 -> NaN Invalid_operation +ddfma2648 fma sNaN NaN 0e+384 -> NaN Invalid_operation +ddfma2649 fma sNaN sNaN 0e+384 -> NaN Invalid_operation +ddfma2650 fma NaN sNaN 0e+384 -> NaN Invalid_operation +ddfma2651 fma -Inf sNaN 0e+384 -> NaN Invalid_operation +ddfma2652 fma -1000 sNaN 0e+384 -> NaN Invalid_operation +ddfma2653 fma -1 sNaN 0e+384 -> NaN Invalid_operation +ddfma2654 fma -0 sNaN 0e+384 -> NaN Invalid_operation +ddfma2655 fma 0 sNaN 0e+384 -> NaN Invalid_operation +ddfma2656 fma 1 sNaN 0e+384 -> NaN Invalid_operation +ddfma2657 fma 1000 sNaN 0e+384 -> NaN Invalid_operation +ddfma2658 fma Inf sNaN 0e+384 -> NaN Invalid_operation +ddfma2659 fma NaN sNaN 0e+384 -> NaN Invalid_operation + +-- propagating NaNs +ddfma2661 fma NaN9 -Inf 0e+384 -> NaN9 +ddfma2662 fma NaN8 999 0e+384 -> NaN8 +ddfma2663 fma NaN71 Inf 0e+384 -> NaN71 +ddfma2664 fma NaN6 NaN5 0e+384 -> NaN6 +ddfma2665 fma -Inf NaN4 0e+384 -> NaN4 +ddfma2666 fma -999 NaN33 0e+384 -> NaN33 +ddfma2667 fma Inf NaN2 0e+384 -> NaN2 + +ddfma2671 fma sNaN99 -Inf 0e+384 -> NaN99 Invalid_operation +ddfma2672 fma sNaN98 -11 0e+384 -> NaN98 Invalid_operation +ddfma2673 fma sNaN97 NaN 0e+384 -> NaN97 Invalid_operation +ddfma2674 fma sNaN16 sNaN94 0e+384 -> NaN16 Invalid_operation +ddfma2675 fma NaN95 sNaN93 0e+384 -> NaN93 Invalid_operation +ddfma2676 fma -Inf sNaN92 0e+384 -> NaN92 Invalid_operation +ddfma2677 fma 088 sNaN91 0e+384 -> NaN91 Invalid_operation +ddfma2678 fma Inf sNaN90 0e+384 -> NaN90 Invalid_operation +ddfma2679 fma NaN sNaN89 0e+384 -> NaN89 Invalid_operation + +ddfma2681 fma -NaN9 -Inf 0e+384 -> -NaN9 +ddfma2682 fma -NaN8 999 0e+384 -> -NaN8 +ddfma2683 fma -NaN71 Inf 0e+384 -> -NaN71 +ddfma2684 fma -NaN6 -NaN5 0e+384 -> -NaN6 +ddfma2685 fma -Inf -NaN4 0e+384 -> -NaN4 +ddfma2686 fma -999 -NaN33 0e+384 -> -NaN33 +ddfma2687 fma Inf -NaN2 0e+384 -> -NaN2 + +ddfma2691 fma -sNaN99 -Inf 0e+384 -> -NaN99 Invalid_operation +ddfma2692 fma -sNaN98 -11 0e+384 -> -NaN98 Invalid_operation +ddfma2693 fma -sNaN97 NaN 0e+384 -> -NaN97 Invalid_operation +ddfma2694 fma -sNaN16 -sNaN94 0e+384 -> -NaN16 Invalid_operation +ddfma2695 fma -NaN95 -sNaN93 0e+384 -> -NaN93 Invalid_operation +ddfma2696 fma -Inf -sNaN92 0e+384 -> -NaN92 Invalid_operation +ddfma2697 fma 088 -sNaN91 0e+384 -> -NaN91 Invalid_operation +ddfma2698 fma Inf -sNaN90 0e+384 -> -NaN90 Invalid_operation +ddfma2699 fma -NaN -sNaN89 0e+384 -> -NaN89 Invalid_operation + +ddfma2701 fma -NaN -Inf 0e+384 -> -NaN +ddfma2702 fma -NaN 999 0e+384 -> -NaN +ddfma2703 fma -NaN Inf 0e+384 -> -NaN +ddfma2704 fma -NaN -NaN 0e+384 -> -NaN +ddfma2705 fma -Inf -NaN0 0e+384 -> -NaN +ddfma2706 fma -999 -NaN 0e+384 -> -NaN +ddfma2707 fma Inf -NaN 0e+384 -> -NaN + +ddfma2711 fma -sNaN -Inf 0e+384 -> -NaN Invalid_operation +ddfma2712 fma -sNaN -11 0e+384 -> -NaN Invalid_operation +ddfma2713 fma -sNaN00 NaN 0e+384 -> -NaN Invalid_operation +ddfma2714 fma -sNaN -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2715 fma -NaN -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2716 fma -Inf -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2717 fma 088 -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2718 fma Inf -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2719 fma -NaN -sNaN 0e+384 -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +-- signs +ddfma2751 fma 1e+277 1e+311 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2752 fma 1e+277 -1e+311 0e+384 -> -Infinity Overflow Inexact Rounded +ddfma2753 fma -1e+277 1e+311 0e+384 -> -Infinity Overflow Inexact Rounded +ddfma2754 fma -1e+277 -1e+311 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2755 fma 1e-277 1e-311 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2756 fma 1e-277 -1e-311 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2757 fma -1e-277 1e-311 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2758 fma -1e-277 -1e-311 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +ddfma2760 fma 1e-291 1e-101 0e+384 -> 1E-392 Subnormal +ddfma2761 fma 1e-291 1e-102 0e+384 -> 1E-393 Subnormal +ddfma2762 fma 1e-291 1e-103 0e+384 -> 1E-394 Subnormal +ddfma2763 fma 1e-291 1e-104 0e+384 -> 1E-395 Subnormal +ddfma2764 fma 1e-291 1e-105 0e+384 -> 1E-396 Subnormal +ddfma2765 fma 1e-291 1e-106 0e+384 -> 1E-397 Subnormal +ddfma2766 fma 1e-291 1e-107 0e+384 -> 1E-398 Subnormal +ddfma2767 fma 1e-291 1e-108 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2768 fma 1e-291 1e-109 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2769 fma 1e-291 1e-110 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +ddfma2770 fma 1e+60 1e+321 0e+384 -> 1.000000000000E+381 Clamped +ddfma2771 fma 1e+60 1e+322 0e+384 -> 1.0000000000000E+382 Clamped +ddfma2772 fma 1e+60 1e+323 0e+384 -> 1.00000000000000E+383 Clamped +ddfma2773 fma 1e+60 1e+324 0e+384 -> 1.000000000000000E+384 Clamped +ddfma2774 fma 1e+60 1e+325 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2775 fma 1e+60 1e+326 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2776 fma 1e+60 1e+327 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2777 fma 1e+60 1e+328 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2778 fma 1e+60 1e+329 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2779 fma 1e+60 1e+330 0e+384 -> Infinity Overflow Inexact Rounded + +ddfma2801 fma 1.0000E-394 1 0e+384 -> 1.0000E-394 Subnormal +ddfma2802 fma 1.000E-394 1e-1 0e+384 -> 1.000E-395 Subnormal +ddfma2803 fma 1.00E-394 1e-2 0e+384 -> 1.00E-396 Subnormal +ddfma2804 fma 1.0E-394 1e-3 0e+384 -> 1.0E-397 Subnormal +ddfma2805 fma 1.0E-394 1e-4 0e+384 -> 1E-398 Subnormal Rounded +ddfma2806 fma 1.3E-394 1e-4 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded +ddfma2807 fma 1.5E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2808 fma 1.7E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2809 fma 2.3E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2810 fma 2.5E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2811 fma 2.7E-394 1e-4 0e+384 -> 3E-398 Underflow Subnormal Inexact Rounded +ddfma2812 fma 1.49E-394 1e-4 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded +ddfma2813 fma 1.50E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2814 fma 1.51E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2815 fma 2.49E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2816 fma 2.50E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2817 fma 2.51E-394 1e-4 0e+384 -> 3E-398 Underflow Subnormal Inexact Rounded + +ddfma2818 fma 1E-394 1e-4 0e+384 -> 1E-398 Subnormal +ddfma2819 fma 3E-394 1e-5 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2820 fma 5E-394 1e-5 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2821 fma 7E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded +ddfma2822 fma 9E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded +ddfma2823 fma 9.9E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded + +ddfma2824 fma 1E-394 -1e-4 0e+384 -> -1E-398 Subnormal +ddfma2825 fma 3E-394 -1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2826 fma -5E-394 1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2827 fma 7E-394 -1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded +ddfma2828 fma -9E-394 1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded +ddfma2829 fma 9.9E-394 -1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded +ddfma2830 fma 3.0E-394 -1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped + +ddfma2831 fma 1.0E-199 1e-200 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2832 fma 1.0E-199 1e-199 0e+384 -> 1E-398 Subnormal Rounded +ddfma2833 fma 1.0E-199 1e-198 0e+384 -> 1.0E-397 Subnormal +ddfma2834 fma 2.0E-199 2e-198 0e+384 -> 4.0E-397 Subnormal +ddfma2835 fma 4.0E-199 4e-198 0e+384 -> 1.60E-396 Subnormal +ddfma2836 fma 10.0E-199 10e-198 0e+384 -> 1.000E-395 Subnormal +ddfma2837 fma 30.0E-199 30e-198 0e+384 -> 9.000E-395 Subnormal +ddfma2838 fma 40.0E-199 40e-188 0e+384 -> 1.6000E-384 Subnormal +ddfma2839 fma 40.0E-199 40e-187 0e+384 -> 1.6000E-383 +ddfma2840 fma 40.0E-199 40e-186 0e+384 -> 1.6000E-382 + +-- Long operand overflow may be a different path +ddfma2870 fma 100 9.999E+383 0e+384 -> Infinity Inexact Overflow Rounded +ddfma2871 fma 100 -9.999E+383 0e+384 -> -Infinity Inexact Overflow Rounded +ddfma2872 fma 9.999E+383 100 0e+384 -> Infinity Inexact Overflow Rounded +ddfma2873 fma -9.999E+383 100 0e+384 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +ddfma2881 fma 1.2347E-355 1.2347E-40 0e+384 -> 1.524E-395 Inexact Rounded Subnormal Underflow +ddfma2882 fma 1.234E-355 1.234E-40 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddfma2883 fma 1.23E-355 1.23E-40 0e+384 -> 1.513E-395 Inexact Rounded Subnormal Underflow +ddfma2884 fma 1.2E-355 1.2E-40 0e+384 -> 1.44E-395 Subnormal +ddfma2885 fma 1.2E-355 1.2E-41 0e+384 -> 1.44E-396 Subnormal +ddfma2886 fma 1.2E-355 1.2E-42 0e+384 -> 1.4E-397 Subnormal Inexact Rounded Underflow +ddfma2887 fma 1.2E-355 1.3E-42 0e+384 -> 1.6E-397 Subnormal Inexact Rounded Underflow +ddfma2888 fma 1.3E-355 1.3E-42 0e+384 -> 1.7E-397 Subnormal Inexact Rounded Underflow +ddfma2889 fma 1.3E-355 1.3E-43 0e+384 -> 2E-398 Subnormal Inexact Rounded Underflow +ddfma2890 fma 1.3E-356 1.3E-43 0e+384 -> 0E-398 Clamped Subnormal Inexact Rounded Underflow + +ddfma2891 fma 1.2345E-39 1.234E-355 0e+384 -> 1.5234E-394 Inexact Rounded Subnormal Underflow +ddfma2892 fma 1.23456E-39 1.234E-355 0e+384 -> 1.5234E-394 Inexact Rounded Subnormal Underflow +ddfma2893 fma 1.2345E-40 1.234E-355 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddfma2894 fma 1.23456E-40 1.234E-355 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddfma2895 fma 1.2345E-41 1.234E-355 0e+384 -> 1.52E-396 Inexact Rounded Subnormal Underflow +ddfma2896 fma 1.23456E-41 1.234E-355 0e+384 -> 1.52E-396 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +ddfma2900 fma 0.3000000000E-191 0.3000000000E-191 0e+384 -> 9.00000000000000E-384 Subnormal Rounded +ddfma2901 fma 0.3000000001E-191 0.3000000001E-191 0e+384 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded +ddfma2902 fma 9.999999999999999E-383 0.0999999999999 0e+384 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded +ddfma2903 fma 9.999999999999999E-383 0.09999999999999 0e+384 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded +ddfma2904 fma 9.999999999999999E-383 0.099999999999999 0e+384 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded +ddfma2905 fma 9.999999999999999E-383 0.0999999999999999 0e+384 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded +-- prove operands are exact +ddfma2906 fma 9.999999999999999E-383 1 0e+384 -> 9.999999999999999E-383 +ddfma2907 fma 1 0.09999999999999999 0e+384 -> 0.09999999999999999 +-- the next rounds to Nmin +ddfma2908 fma 9.999999999999999E-383 0.09999999999999999 0e+384 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded + +-- hugest +ddfma2909 fma 9999999999999999 9999999999999999 0e+384 -> 9.999999999999998E+31 Inexact Rounded + +-- Null tests +ddfma2990 fma 10 # 0e+384 -> NaN Invalid_operation +ddfma2991 fma # 10 0e+384 -> NaN Invalid_operation + + +-- ADDITION TESTS ------------------------------------------------------ + +-- [first group are 'quick confidence check'] +ddfma3001 fma 1 1 1 -> 2 +ddfma3002 fma 1 2 3 -> 5 +ddfma3003 fma 1 '5.75' '3.3' -> 9.05 +ddfma3004 fma 1 '5' '-3' -> 2 +ddfma3005 fma 1 '-5' '-3' -> -8 +ddfma3006 fma 1 '-7' '2.5' -> -4.5 +ddfma3007 fma 1 '0.7' '0.3' -> 1.0 +ddfma3008 fma 1 '1.25' '1.25' -> 2.50 +ddfma3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' +ddfma3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' + +-- 1234567890123456 1234567890123456 +ddfma3011 fma 1 '0.4444444444444446' '0.5555555555555555' -> '1.000000000000000' Inexact Rounded +ddfma3012 fma 1 '0.4444444444444445' '0.5555555555555555' -> '1.000000000000000' Rounded +ddfma3013 fma 1 '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' +ddfma3014 fma 1 '4444444444444444' '0.49' -> '4444444444444444' Inexact Rounded +ddfma3015 fma 1 '4444444444444444' '0.499' -> '4444444444444444' Inexact Rounded +ddfma3016 fma 1 '4444444444444444' '0.4999' -> '4444444444444444' Inexact Rounded +ddfma3017 fma 1 '4444444444444444' '0.5000' -> '4444444444444444' Inexact Rounded +ddfma3018 fma 1 '4444444444444444' '0.5001' -> '4444444444444445' Inexact Rounded +ddfma3019 fma 1 '4444444444444444' '0.501' -> '4444444444444445' Inexact Rounded +ddfma3020 fma 1 '4444444444444444' '0.51' -> '4444444444444445' Inexact Rounded + +ddfma3021 fma 1 0 1 -> 1 +ddfma3022 fma 1 1 1 -> 2 +ddfma3023 fma 1 2 1 -> 3 +ddfma3024 fma 1 3 1 -> 4 +ddfma3025 fma 1 4 1 -> 5 +ddfma3026 fma 1 5 1 -> 6 +ddfma3027 fma 1 6 1 -> 7 +ddfma3028 fma 1 7 1 -> 8 +ddfma3029 fma 1 8 1 -> 9 +ddfma3030 fma 1 9 1 -> 10 + +-- some carrying effects +ddfma3031 fma 1 '0.9998' '0.0000' -> '0.9998' +ddfma3032 fma 1 '0.9998' '0.0001' -> '0.9999' +ddfma3033 fma 1 '0.9998' '0.0002' -> '1.0000' +ddfma3034 fma 1 '0.9998' '0.0003' -> '1.0001' + +ddfma3035 fma 1 '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddfma3036 fma 1 '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddfma3037 fma 1 '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddfma3038 fma 1 '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded +ddfma3039 fma 1 '700000' '10000e+16' -> '1.000000000000007E+20' Rounded + +-- symmetry: +ddfma3040 fma 1 '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded +ddfma3041 fma 1 '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded +ddfma3042 fma 1 '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded +ddfma3044 fma 1 '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded +ddfma3045 fma 1 '10000e+16' '700000' -> '1.000000000000007E+20' Rounded + +-- same, without rounding +ddfma3046 fma 1 '10000e+9' '7' -> '10000000000007' +ddfma3047 fma 1 '10000e+9' '70' -> '10000000000070' +ddfma3048 fma 1 '10000e+9' '700' -> '10000000000700' +ddfma3049 fma 1 '10000e+9' '7000' -> '10000000007000' +ddfma3050 fma 1 '10000e+9' '70000' -> '10000000070000' +ddfma3051 fma 1 '10000e+9' '700000' -> '10000000700000' +ddfma3052 fma 1 '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +ddfma3053 fma 1 '12' '7.00' -> '19.00' +ddfma3054 fma 1 '1.3' '-1.07' -> '0.23' +ddfma3055 fma 1 '1.3' '-1.30' -> '0.00' +ddfma3056 fma 1 '1.3' '-2.07' -> '-0.77' +ddfma3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' + +-- leading zero preservation +ddfma3061 fma 1 1 '0.0001' -> '1.0001' +ddfma3062 fma 1 1 '0.00001' -> '1.00001' +ddfma3063 fma 1 1 '0.000001' -> '1.000001' +ddfma3064 fma 1 1 '0.0000001' -> '1.0000001' +ddfma3065 fma 1 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +ddfma3070 fma 1 1 0 -> 1 +ddfma3071 fma 1 1 0. -> 1 +ddfma3072 fma 1 1 .0 -> 1.0 +ddfma3073 fma 1 1 0.0 -> 1.0 +ddfma3074 fma 1 1 0.00 -> 1.00 +ddfma3075 fma 1 0 1 -> 1 +ddfma3076 fma 1 0. 1 -> 1 +ddfma3077 fma 1 .0 1 -> 1.0 +ddfma3078 fma 1 0.0 1 -> 1.0 +ddfma3079 fma 1 0.00 1 -> 1.00 + +-- some carries +ddfma3080 fma 1 999999998 1 -> 999999999 +ddfma3081 fma 1 999999999 1 -> 1000000000 +ddfma3082 fma 1 99999999 1 -> 100000000 +ddfma3083 fma 1 9999999 1 -> 10000000 +ddfma3084 fma 1 999999 1 -> 1000000 +ddfma3085 fma 1 99999 1 -> 100000 +ddfma3086 fma 1 9999 1 -> 10000 +ddfma3087 fma 1 999 1 -> 1000 +ddfma3088 fma 1 99 1 -> 100 +ddfma3089 fma 1 9 1 -> 10 + + +-- more LHS swaps +ddfma3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' +ddfma3091 fma 1 '-56267E-6' 0 -> '-0.056267' +ddfma3092 fma 1 '-56267E-5' 0 -> '-0.56267' +ddfma3093 fma 1 '-56267E-4' 0 -> '-5.6267' +ddfma3094 fma 1 '-56267E-3' 0 -> '-56.267' +ddfma3095 fma 1 '-56267E-2' 0 -> '-562.67' +ddfma3096 fma 1 '-56267E-1' 0 -> '-5626.7' +ddfma3097 fma 1 '-56267E-0' 0 -> '-56267' +ddfma3098 fma 1 '-5E-10' 0 -> '-5E-10' +ddfma3099 fma 1 '-5E-7' 0 -> '-5E-7' +ddfma3100 fma 1 '-5E-6' 0 -> '-0.000005' +ddfma3101 fma 1 '-5E-5' 0 -> '-0.00005' +ddfma3102 fma 1 '-5E-4' 0 -> '-0.0005' +ddfma3103 fma 1 '-5E-1' 0 -> '-0.5' +ddfma3104 fma 1 '-5E0' 0 -> '-5' +ddfma3105 fma 1 '-5E1' 0 -> '-50' +ddfma3106 fma 1 '-5E5' 0 -> '-500000' +ddfma3107 fma 1 '-5E15' 0 -> '-5000000000000000' +ddfma3108 fma 1 '-5E16' 0 -> '-5.000000000000000E+16' Rounded +ddfma3109 fma 1 '-5E17' 0 -> '-5.000000000000000E+17' Rounded +ddfma3110 fma 1 '-5E18' 0 -> '-5.000000000000000E+18' Rounded +ddfma3111 fma 1 '-5E100' 0 -> '-5.000000000000000E+100' Rounded + +-- more RHS swaps +ddfma3113 fma 1 0 '-56267E-10' -> '-0.0000056267' +ddfma3114 fma 1 0 '-56267E-6' -> '-0.056267' +ddfma3116 fma 1 0 '-56267E-5' -> '-0.56267' +ddfma3117 fma 1 0 '-56267E-4' -> '-5.6267' +ddfma3119 fma 1 0 '-56267E-3' -> '-56.267' +ddfma3120 fma 1 0 '-56267E-2' -> '-562.67' +ddfma3121 fma 1 0 '-56267E-1' -> '-5626.7' +ddfma3122 fma 1 0 '-56267E-0' -> '-56267' +ddfma3123 fma 1 0 '-5E-10' -> '-5E-10' +ddfma3124 fma 1 0 '-5E-7' -> '-5E-7' +ddfma3125 fma 1 0 '-5E-6' -> '-0.000005' +ddfma3126 fma 1 0 '-5E-5' -> '-0.00005' +ddfma3127 fma 1 0 '-5E-4' -> '-0.0005' +ddfma3128 fma 1 0 '-5E-1' -> '-0.5' +ddfma3129 fma 1 0 '-5E0' -> '-5' +ddfma3130 fma 1 0 '-5E1' -> '-50' +ddfma3131 fma 1 0 '-5E5' -> '-500000' +ddfma3132 fma 1 0 '-5E15' -> '-5000000000000000' +ddfma3133 fma 1 0 '-5E16' -> '-5.000000000000000E+16' Rounded +ddfma3134 fma 1 0 '-5E17' -> '-5.000000000000000E+17' Rounded +ddfma3135 fma 1 0 '-5E18' -> '-5.000000000000000E+18' Rounded +ddfma3136 fma 1 0 '-5E100' -> '-5.000000000000000E+100' Rounded + +-- related +ddfma3137 fma 1 1 '0E-19' -> '1.000000000000000' Rounded +ddfma3138 fma 1 -1 '0E-19' -> '-1.000000000000000' Rounded +ddfma3139 fma 1 '0E-19' 1 -> '1.000000000000000' Rounded +ddfma3140 fma 1 '0E-19' -1 -> '-1.000000000000000' Rounded +ddfma3141 fma 1 1E+11 0.0000 -> '100000000000.0000' +ddfma3142 fma 1 1E+11 0.00000 -> '100000000000.0000' Rounded +ddfma3143 fma 1 0.000 1E+12 -> '1000000000000.000' +ddfma3144 fma 1 0.0000 1E+12 -> '1000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +ddfma3146 fma 1 '00.0' 0 -> '0.0' +ddfma3147 fma 1 '0.00' 0 -> '0.00' +ddfma3148 fma 1 0 '0.00' -> '0.00' +ddfma3149 fma 1 0 '00.0' -> '0.0' +ddfma3150 fma 1 '00.0' '0.00' -> '0.00' +ddfma3151 fma 1 '0.00' '00.0' -> '0.00' +ddfma3152 fma 1 '3' '.3' -> '3.3' +ddfma3153 fma 1 '3.' '.3' -> '3.3' +ddfma3154 fma 1 '3.0' '.3' -> '3.3' +ddfma3155 fma 1 '3.00' '.3' -> '3.30' +ddfma3156 fma 1 '3' '3' -> '6' +ddfma3157 fma 1 '3' '+3' -> '6' +ddfma3158 fma 1 '3' '-3' -> '0' +ddfma3159 fma 1 '0.3' '-0.3' -> '0.0' +ddfma3160 fma 1 '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +ddfma3161 fma 1 '1E+12' '-1' -> '999999999999' +ddfma3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' +ddfma3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' +ddfma3164 fma 1 '-1' '1E+12' -> '999999999999' +ddfma3165 fma 1 '7E+12' '-1' -> '6999999999999' +ddfma3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' +ddfma3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' +ddfma3168 fma 1 '-1' '7E+12' -> '6999999999999' + +rounding: half_up +-- 1.234567890123456 1234567890123456 1 234567890123456 +ddfma3170 fma 1 '4.444444444444444' '0.5555555555555567' -> '5.000000000000001' Inexact Rounded +ddfma3171 fma 1 '4.444444444444444' '0.5555555555555566' -> '5.000000000000001' Inexact Rounded +ddfma3172 fma 1 '4.444444444444444' '0.5555555555555565' -> '5.000000000000001' Inexact Rounded +ddfma3173 fma 1 '4.444444444444444' '0.5555555555555564' -> '5.000000000000000' Inexact Rounded +ddfma3174 fma 1 '4.444444444444444' '0.5555555555555553' -> '4.999999999999999' Inexact Rounded +ddfma3175 fma 1 '4.444444444444444' '0.5555555555555552' -> '4.999999999999999' Inexact Rounded +ddfma3176 fma 1 '4.444444444444444' '0.5555555555555551' -> '4.999999999999999' Inexact Rounded +ddfma3177 fma 1 '4.444444444444444' '0.5555555555555550' -> '4.999999999999999' Rounded +ddfma3178 fma 1 '4.444444444444444' '0.5555555555555545' -> '4.999999999999999' Inexact Rounded +ddfma3179 fma 1 '4.444444444444444' '0.5555555555555544' -> '4.999999999999998' Inexact Rounded +ddfma3180 fma 1 '4.444444444444444' '0.5555555555555543' -> '4.999999999999998' Inexact Rounded +ddfma3181 fma 1 '4.444444444444444' '0.5555555555555542' -> '4.999999999999998' Inexact Rounded +ddfma3182 fma 1 '4.444444444444444' '0.5555555555555541' -> '4.999999999999998' Inexact Rounded +ddfma3183 fma 1 '4.444444444444444' '0.5555555555555540' -> '4.999999999999998' Rounded + +-- and some more, including residue effects and different roundings +rounding: half_up +ddfma3200 fma 1 '1234560123456789' 0 -> '1234560123456789' +ddfma3201 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddfma3202 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddfma3203 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddfma3204 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddfma3205 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddfma3206 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddfma3207 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddfma3208 fma 1 '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded +ddfma3209 fma 1 '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded +ddfma3210 fma 1 '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded +ddfma3211 fma 1 '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded +ddfma3212 fma 1 '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded +ddfma3213 fma 1 '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded +ddfma3214 fma 1 '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded +ddfma3215 fma 1 '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded +ddfma3216 fma 1 '1234560123456789' 1 -> '1234560123456790' +ddfma3217 fma 1 '1234560123456789' 1.000000001 -> '1234560123456790' Inexact Rounded +ddfma3218 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddfma3219 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded + +rounding: half_even +ddfma3220 fma 1 '1234560123456789' 0 -> '1234560123456789' +ddfma3221 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddfma3222 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddfma3223 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddfma3224 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddfma3225 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddfma3226 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddfma3227 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddfma3228 fma 1 '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded +ddfma3229 fma 1 '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded +ddfma3230 fma 1 '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded +ddfma3231 fma 1 '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded +ddfma3232 fma 1 '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded +ddfma3233 fma 1 '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded +ddfma3234 fma 1 '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded +ddfma3235 fma 1 '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded +ddfma3236 fma 1 '1234560123456789' 1 -> '1234560123456790' +ddfma3237 fma 1 '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded +ddfma3238 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddfma3239 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded +-- critical few with even bottom digit... +ddfma3240 fma 1 '1234560123456788' 0.499999999 -> '1234560123456788' Inexact Rounded +ddfma3241 fma 1 '1234560123456788' 0.5 -> '1234560123456788' Inexact Rounded +ddfma3242 fma 1 '1234560123456788' 0.500000001 -> '1234560123456789' Inexact Rounded + +rounding: down +ddfma3250 fma 1 '1234560123456789' 0 -> '1234560123456789' +ddfma3251 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddfma3252 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddfma3253 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddfma3254 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddfma3255 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddfma3256 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddfma3257 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddfma3258 fma 1 '1234560123456789' 0.5 -> '1234560123456789' Inexact Rounded +ddfma3259 fma 1 '1234560123456789' 0.500000001 -> '1234560123456789' Inexact Rounded +ddfma3260 fma 1 '1234560123456789' 0.500001 -> '1234560123456789' Inexact Rounded +ddfma3261 fma 1 '1234560123456789' 0.51 -> '1234560123456789' Inexact Rounded +ddfma3262 fma 1 '1234560123456789' 0.6 -> '1234560123456789' Inexact Rounded +ddfma3263 fma 1 '1234560123456789' 0.9 -> '1234560123456789' Inexact Rounded +ddfma3264 fma 1 '1234560123456789' 0.99999 -> '1234560123456789' Inexact Rounded +ddfma3265 fma 1 '1234560123456789' 0.999999999 -> '1234560123456789' Inexact Rounded +ddfma3266 fma 1 '1234560123456789' 1 -> '1234560123456790' +ddfma3267 fma 1 '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded +ddfma3268 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddfma3269 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +ddfma3301 fma 1 -1 1 -> 0 +ddfma3302 fma 1 0 1 -> 1 +ddfma3303 fma 1 1 1 -> 2 +ddfma3304 fma 1 12 1 -> 13 +ddfma3305 fma 1 98 1 -> 99 +ddfma3306 fma 1 99 1 -> 100 +ddfma3307 fma 1 100 1 -> 101 +ddfma3308 fma 1 101 1 -> 102 +ddfma3309 fma 1 -1 -1 -> -2 +ddfma3310 fma 1 0 -1 -> -1 +ddfma3311 fma 1 1 -1 -> 0 +ddfma3312 fma 1 12 -1 -> 11 +ddfma3313 fma 1 98 -1 -> 97 +ddfma3314 fma 1 99 -1 -> 98 +ddfma3315 fma 1 100 -1 -> 99 +ddfma3316 fma 1 101 -1 -> 100 + +ddfma3321 fma 1 -0.01 0.01 -> 0.00 +ddfma3322 fma 1 0.00 0.01 -> 0.01 +ddfma3323 fma 1 0.01 0.01 -> 0.02 +ddfma3324 fma 1 0.12 0.01 -> 0.13 +ddfma3325 fma 1 0.98 0.01 -> 0.99 +ddfma3326 fma 1 0.99 0.01 -> 1.00 +ddfma3327 fma 1 1.00 0.01 -> 1.01 +ddfma3328 fma 1 1.01 0.01 -> 1.02 +ddfma3329 fma 1 -0.01 -0.01 -> -0.02 +ddfma3330 fma 1 0.00 -0.01 -> -0.01 +ddfma3331 fma 1 0.01 -0.01 -> 0.00 +ddfma3332 fma 1 0.12 -0.01 -> 0.11 +ddfma3333 fma 1 0.98 -0.01 -> 0.97 +ddfma3334 fma 1 0.99 -0.01 -> 0.98 +ddfma3335 fma 1 1.00 -0.01 -> 0.99 +ddfma3336 fma 1 1.01 -0.01 -> 1.00 + +-- some more cases where adding 0 affects the coefficient +ddfma3340 fma 1 1E+3 0 -> 1000 +ddfma3341 fma 1 1E+15 0 -> 1000000000000000 +ddfma3342 fma 1 1E+16 0 -> 1.000000000000000E+16 Rounded +ddfma3343 fma 1 1E+20 0 -> 1.000000000000000E+20 Rounded +-- which simply follow from these cases ... +ddfma3344 fma 1 1E+3 1 -> 1001 +ddfma3345 fma 1 1E+15 1 -> 1000000000000001 +ddfma3346 fma 1 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded +ddfma3347 fma 1 1E+20 1 -> 1.000000000000000E+20 Inexact Rounded +ddfma3348 fma 1 1E+3 7 -> 1007 +ddfma3349 fma 1 1E+15 7 -> 1000000000000007 +ddfma3350 fma 1 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded +ddfma3351 fma 1 1E+20 7 -> 1.000000000000000E+20 Inexact Rounded + +-- tryzeros cases +rounding: half_up +ddfma3360 fma 1 0E+50 10000E+1 -> 1.0000E+5 +ddfma3361 fma 1 0E-50 10000E+1 -> 100000.0000000000 Rounded +ddfma3362 fma 1 10000E+1 0E-50 -> 100000.0000000000 Rounded +ddfma3363 fma 1 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact +ddfma3364 fma 1 9.999999999999999E+384 -9.999999999999999E+384 -> 0E+369 + +-- a curiosity from JSR 13 testing +rounding: half_down +ddfma3370 fma 1 999999999999999 815 -> 1000000000000814 +ddfma3371 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact +rounding: half_up +ddfma3372 fma 1 999999999999999 815 -> 1000000000000814 +ddfma3373 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact +rounding: half_even +ddfma3374 fma 1 999999999999999 815 -> 1000000000000814 +ddfma3375 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact + +-- ulp replacement tests +ddfma3400 fma 1 1 77e-14 -> 1.00000000000077 +ddfma3401 fma 1 1 77e-15 -> 1.000000000000077 +ddfma3402 fma 1 1 77e-16 -> 1.000000000000008 Inexact Rounded +ddfma3403 fma 1 1 77e-17 -> 1.000000000000001 Inexact Rounded +ddfma3404 fma 1 1 77e-18 -> 1.000000000000000 Inexact Rounded +ddfma3405 fma 1 1 77e-19 -> 1.000000000000000 Inexact Rounded +ddfma3406 fma 1 1 77e-299 -> 1.000000000000000 Inexact Rounded + +ddfma3410 fma 1 10 77e-14 -> 10.00000000000077 +ddfma3411 fma 1 10 77e-15 -> 10.00000000000008 Inexact Rounded +ddfma3412 fma 1 10 77e-16 -> 10.00000000000001 Inexact Rounded +ddfma3413 fma 1 10 77e-17 -> 10.00000000000000 Inexact Rounded +ddfma3414 fma 1 10 77e-18 -> 10.00000000000000 Inexact Rounded +ddfma3415 fma 1 10 77e-19 -> 10.00000000000000 Inexact Rounded +ddfma3416 fma 1 10 77e-299 -> 10.00000000000000 Inexact Rounded + +ddfma3420 fma 1 77e-14 1 -> 1.00000000000077 +ddfma3421 fma 1 77e-15 1 -> 1.000000000000077 +ddfma3422 fma 1 77e-16 1 -> 1.000000000000008 Inexact Rounded +ddfma3423 fma 1 77e-17 1 -> 1.000000000000001 Inexact Rounded +ddfma3424 fma 1 77e-18 1 -> 1.000000000000000 Inexact Rounded +ddfma3425 fma 1 77e-19 1 -> 1.000000000000000 Inexact Rounded +ddfma3426 fma 1 77e-299 1 -> 1.000000000000000 Inexact Rounded + +ddfma3430 fma 1 77e-14 10 -> 10.00000000000077 +ddfma3431 fma 1 77e-15 10 -> 10.00000000000008 Inexact Rounded +ddfma3432 fma 1 77e-16 10 -> 10.00000000000001 Inexact Rounded +ddfma3433 fma 1 77e-17 10 -> 10.00000000000000 Inexact Rounded +ddfma3434 fma 1 77e-18 10 -> 10.00000000000000 Inexact Rounded +ddfma3435 fma 1 77e-19 10 -> 10.00000000000000 Inexact Rounded +ddfma3436 fma 1 77e-299 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +ddfma36440 fma 1 1 -77e-14 -> 0.99999999999923 +ddfma36441 fma 1 1 -77e-15 -> 0.999999999999923 +ddfma36442 fma 1 1 -77e-16 -> 0.9999999999999923 +ddfma36443 fma 1 1 -77e-17 -> 0.9999999999999992 Inexact Rounded +ddfma36444 fma 1 1 -77e-18 -> 0.9999999999999999 Inexact Rounded +ddfma36445 fma 1 1 -77e-19 -> 1.000000000000000 Inexact Rounded +ddfma36446 fma 1 1 -77e-99 -> 1.000000000000000 Inexact Rounded + +ddfma36450 fma 1 10 -77e-14 -> 9.99999999999923 +ddfma36451 fma 1 10 -77e-15 -> 9.999999999999923 +ddfma36452 fma 1 10 -77e-16 -> 9.999999999999992 Inexact Rounded +ddfma36453 fma 1 10 -77e-17 -> 9.999999999999999 Inexact Rounded +ddfma36454 fma 1 10 -77e-18 -> 10.00000000000000 Inexact Rounded +ddfma36455 fma 1 10 -77e-19 -> 10.00000000000000 Inexact Rounded +ddfma36456 fma 1 10 -77e-99 -> 10.00000000000000 Inexact Rounded + +ddfma36460 fma 1 -77e-14 1 -> 0.99999999999923 +ddfma36461 fma 1 -77e-15 1 -> 0.999999999999923 +ddfma36462 fma 1 -77e-16 1 -> 0.9999999999999923 +ddfma36463 fma 1 -77e-17 1 -> 0.9999999999999992 Inexact Rounded +ddfma36464 fma 1 -77e-18 1 -> 0.9999999999999999 Inexact Rounded +ddfma36465 fma 1 -77e-19 1 -> 1.000000000000000 Inexact Rounded +ddfma36466 fma 1 -77e-99 1 -> 1.000000000000000 Inexact Rounded + +ddfma36470 fma 1 -77e-14 10 -> 9.99999999999923 +ddfma36471 fma 1 -77e-15 10 -> 9.999999999999923 +ddfma36472 fma 1 -77e-16 10 -> 9.999999999999992 Inexact Rounded +ddfma36473 fma 1 -77e-17 10 -> 9.999999999999999 Inexact Rounded +ddfma36474 fma 1 -77e-18 10 -> 10.00000000000000 Inexact Rounded +ddfma36475 fma 1 -77e-19 10 -> 10.00000000000000 Inexact Rounded +ddfma36476 fma 1 -77e-99 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +ddfma36480 fma 1 -1 77e-14 -> -0.99999999999923 +ddfma36481 fma 1 -1 77e-15 -> -0.999999999999923 +ddfma36482 fma 1 -1 77e-16 -> -0.9999999999999923 +ddfma36483 fma 1 -1 77e-17 -> -0.9999999999999992 Inexact Rounded +ddfma36484 fma 1 -1 77e-18 -> -0.9999999999999999 Inexact Rounded +ddfma36485 fma 1 -1 77e-19 -> -1.000000000000000 Inexact Rounded +ddfma36486 fma 1 -1 77e-99 -> -1.000000000000000 Inexact Rounded + +ddfma36490 fma 1 -10 77e-14 -> -9.99999999999923 +ddfma36491 fma 1 -10 77e-15 -> -9.999999999999923 +ddfma36492 fma 1 -10 77e-16 -> -9.999999999999992 Inexact Rounded +ddfma36493 fma 1 -10 77e-17 -> -9.999999999999999 Inexact Rounded +ddfma36494 fma 1 -10 77e-18 -> -10.00000000000000 Inexact Rounded +ddfma36495 fma 1 -10 77e-19 -> -10.00000000000000 Inexact Rounded +ddfma36496 fma 1 -10 77e-99 -> -10.00000000000000 Inexact Rounded + +ddfma36500 fma 1 77e-14 -1 -> -0.99999999999923 +ddfma36501 fma 1 77e-15 -1 -> -0.999999999999923 +ddfma36502 fma 1 77e-16 -1 -> -0.9999999999999923 +ddfma36503 fma 1 77e-17 -1 -> -0.9999999999999992 Inexact Rounded +ddfma36504 fma 1 77e-18 -1 -> -0.9999999999999999 Inexact Rounded +ddfma36505 fma 1 77e-19 -1 -> -1.000000000000000 Inexact Rounded +ddfma36506 fma 1 77e-99 -1 -> -1.000000000000000 Inexact Rounded + +ddfma36510 fma 1 77e-14 -10 -> -9.99999999999923 +ddfma36511 fma 1 77e-15 -10 -> -9.999999999999923 +ddfma36512 fma 1 77e-16 -10 -> -9.999999999999992 Inexact Rounded +ddfma36513 fma 1 77e-17 -10 -> -9.999999999999999 Inexact Rounded +ddfma36514 fma 1 77e-18 -10 -> -10.00000000000000 Inexact Rounded +ddfma36515 fma 1 77e-19 -10 -> -10.00000000000000 Inexact Rounded +ddfma36516 fma 1 77e-99 -10 -> -10.00000000000000 Inexact Rounded + +-- and a couple more with longer RHS +ddfma36520 fma 1 1 -7777e-16 -> 0.9999999999992223 +ddfma36521 fma 1 1 -7777e-17 -> 0.9999999999999222 Inexact Rounded +ddfma36522 fma 1 1 -7777e-18 -> 0.9999999999999922 Inexact Rounded +ddfma36523 fma 1 1 -7777e-19 -> 0.9999999999999992 Inexact Rounded +ddfma36524 fma 1 1 -7777e-20 -> 0.9999999999999999 Inexact Rounded +ddfma36525 fma 1 1 -7777e-21 -> 1.000000000000000 Inexact Rounded +ddfma36526 fma 1 1 -7777e-22 -> 1.000000000000000 Inexact Rounded + + +-- and some more residue effects and different roundings +rounding: half_up +ddfma36540 fma 1 '6543210123456789' 0 -> '6543210123456789' +ddfma36541 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddfma36542 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddfma36543 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddfma36544 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddfma36545 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddfma36546 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddfma36547 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddfma36548 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +ddfma36549 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +ddfma36550 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +ddfma36551 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +ddfma36552 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +ddfma36553 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +ddfma36554 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +ddfma36555 fma 1 '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded +ddfma36556 fma 1 '6543210123456789' 1 -> '6543210123456790' +ddfma36557 fma 1 '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded +ddfma36558 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddfma36559 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +rounding: half_even +ddfma36560 fma 1 '6543210123456789' 0 -> '6543210123456789' +ddfma36561 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddfma36562 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddfma36563 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddfma36564 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddfma36565 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddfma36566 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddfma36567 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddfma36568 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +ddfma36569 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +ddfma36570 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +ddfma36571 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +ddfma36572 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +ddfma36573 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +ddfma36574 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +ddfma36575 fma 1 '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded +ddfma36576 fma 1 '6543210123456789' 1 -> '6543210123456790' +ddfma36577 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +ddfma36578 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddfma36579 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +-- critical few with even bottom digit... +ddfma37540 fma 1 '6543210123456788' 0.499999999 -> '6543210123456788' Inexact Rounded +ddfma37541 fma 1 '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded +ddfma37542 fma 1 '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded + +rounding: down +ddfma37550 fma 1 '6543210123456789' 0 -> '6543210123456789' +ddfma37551 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddfma37552 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddfma37553 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddfma37554 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddfma37555 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddfma37556 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddfma37557 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddfma37558 fma 1 '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded +ddfma37559 fma 1 '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded +ddfma37560 fma 1 '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded +ddfma37561 fma 1 '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded +ddfma37562 fma 1 '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded +ddfma37563 fma 1 '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded +ddfma37564 fma 1 '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded +ddfma37565 fma 1 '6543210123456789' 0.999999999 -> '6543210123456789' Inexact Rounded +ddfma37566 fma 1 '6543210123456789' 1 -> '6543210123456790' +ddfma37567 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +ddfma37568 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddfma37569 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + + +-- verify a query +rounding: down +ddfma37661 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded +ddfma37662 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded +ddfma37663 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded +ddfma37664 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded + +-- more zeros, etc. +rounding: half_even + +ddfma37701 fma 1 5.00 1.00E-3 -> 5.00100 +ddfma37702 fma 1 00.00 0.000 -> 0.000 +ddfma37703 fma 1 00.00 0E-3 -> 0.000 +ddfma37704 fma 1 0E-3 00.00 -> 0.000 + +ddfma37710 fma 1 0E+3 00.00 -> 0.00 +ddfma37711 fma 1 0E+3 00.0 -> 0.0 +ddfma37712 fma 1 0E+3 00. -> 0 +ddfma37713 fma 1 0E+3 00.E+1 -> 0E+1 +ddfma37714 fma 1 0E+3 00.E+2 -> 0E+2 +ddfma37715 fma 1 0E+3 00.E+3 -> 0E+3 +ddfma37716 fma 1 0E+3 00.E+4 -> 0E+3 +ddfma37717 fma 1 0E+3 00.E+5 -> 0E+3 +ddfma37718 fma 1 0E+3 -00.0 -> 0.0 +ddfma37719 fma 1 0E+3 -00. -> 0 +ddfma37731 fma 1 0E+3 -00.E+1 -> 0E+1 + +ddfma37720 fma 1 00.00 0E+3 -> 0.00 +ddfma37721 fma 1 00.0 0E+3 -> 0.0 +ddfma37722 fma 1 00. 0E+3 -> 0 +ddfma37723 fma 1 00.E+1 0E+3 -> 0E+1 +ddfma37724 fma 1 00.E+2 0E+3 -> 0E+2 +ddfma37725 fma 1 00.E+3 0E+3 -> 0E+3 +ddfma37726 fma 1 00.E+4 0E+3 -> 0E+3 +ddfma37727 fma 1 00.E+5 0E+3 -> 0E+3 +ddfma37728 fma 1 -00.00 0E+3 -> 0.00 +ddfma37729 fma 1 -00.0 0E+3 -> 0.0 +ddfma37730 fma 1 -00. 0E+3 -> 0 + +ddfma37732 fma 1 0 0 -> 0 +ddfma37733 fma 1 0 -0 -> 0 +ddfma37734 fma 1 -0 0 -> 0 +ddfma37735 fma 1 -0 -0 -> -0 -- IEEE 854 special case + +ddfma37736 fma 1 1 -1 -> 0 +ddfma37737 fma 1 -1 -1 -> -2 +ddfma37738 fma 1 1 1 -> 2 +ddfma37739 fma 1 -1 1 -> 0 + +ddfma37741 fma 1 0 -1 -> -1 +ddfma37742 fma 1 -0 -1 -> -1 +ddfma37743 fma 1 0 1 -> 1 +ddfma37744 fma 1 -0 1 -> 1 +ddfma37745 fma 1 -1 0 -> -1 +ddfma37746 fma 1 -1 -0 -> -1 +ddfma37747 fma 1 1 0 -> 1 +ddfma37748 fma 1 1 -0 -> 1 + +ddfma37751 fma 1 0.0 -1 -> -1.0 +ddfma37752 fma 1 -0.0 -1 -> -1.0 +ddfma37753 fma 1 0.0 1 -> 1.0 +ddfma37754 fma 1 -0.0 1 -> 1.0 +ddfma37755 fma 1 -1.0 0 -> -1.0 +ddfma37756 fma 1 -1.0 -0 -> -1.0 +ddfma37757 fma 1 1.0 0 -> 1.0 +ddfma37758 fma 1 1.0 -0 -> 1.0 + +ddfma37761 fma 1 0 -1.0 -> -1.0 +ddfma37762 fma 1 -0 -1.0 -> -1.0 +ddfma37763 fma 1 0 1.0 -> 1.0 +ddfma37764 fma 1 -0 1.0 -> 1.0 +ddfma37765 fma 1 -1 0.0 -> -1.0 +ddfma37766 fma 1 -1 -0.0 -> -1.0 +ddfma37767 fma 1 1 0.0 -> 1.0 +ddfma37768 fma 1 1 -0.0 -> 1.0 + +ddfma37771 fma 1 0.0 -1.0 -> -1.0 +ddfma37772 fma 1 -0.0 -1.0 -> -1.0 +ddfma37773 fma 1 0.0 1.0 -> 1.0 +ddfma37774 fma 1 -0.0 1.0 -> 1.0 +ddfma37775 fma 1 -1.0 0.0 -> -1.0 +ddfma37776 fma 1 -1.0 -0.0 -> -1.0 +ddfma37777 fma 1 1.0 0.0 -> 1.0 +ddfma37778 fma 1 1.0 -0.0 -> 1.0 + +-- Specials +ddfma37780 fma 1 -Inf -Inf -> -Infinity +ddfma37781 fma 1 -Inf -1000 -> -Infinity +ddfma37782 fma 1 -Inf -1 -> -Infinity +ddfma37783 fma 1 -Inf -0 -> -Infinity +ddfma37784 fma 1 -Inf 0 -> -Infinity +ddfma37785 fma 1 -Inf 1 -> -Infinity +ddfma37786 fma 1 -Inf 1000 -> -Infinity +ddfma37787 fma 1 -1000 -Inf -> -Infinity +ddfma37788 fma 1 -Inf -Inf -> -Infinity +ddfma37789 fma 1 -1 -Inf -> -Infinity +ddfma37790 fma 1 -0 -Inf -> -Infinity +ddfma37791 fma 1 0 -Inf -> -Infinity +ddfma37792 fma 1 1 -Inf -> -Infinity +ddfma37793 fma 1 1000 -Inf -> -Infinity +ddfma37794 fma 1 Inf -Inf -> NaN Invalid_operation + +ddfma37800 fma 1 Inf -Inf -> NaN Invalid_operation +ddfma37801 fma 1 Inf -1000 -> Infinity +ddfma37802 fma 1 Inf -1 -> Infinity +ddfma37803 fma 1 Inf -0 -> Infinity +ddfma37804 fma 1 Inf 0 -> Infinity +ddfma37805 fma 1 Inf 1 -> Infinity +ddfma37806 fma 1 Inf 1000 -> Infinity +ddfma37807 fma 1 Inf Inf -> Infinity +ddfma37808 fma 1 -1000 Inf -> Infinity +ddfma37809 fma 1 -Inf Inf -> NaN Invalid_operation +ddfma37810 fma 1 -1 Inf -> Infinity +ddfma37811 fma 1 -0 Inf -> Infinity +ddfma37812 fma 1 0 Inf -> Infinity +ddfma37813 fma 1 1 Inf -> Infinity +ddfma37814 fma 1 1000 Inf -> Infinity +ddfma37815 fma 1 Inf Inf -> Infinity + +ddfma37821 fma 1 NaN -Inf -> NaN +ddfma37822 fma 1 NaN -1000 -> NaN +ddfma37823 fma 1 NaN -1 -> NaN +ddfma37824 fma 1 NaN -0 -> NaN +ddfma37825 fma 1 NaN 0 -> NaN +ddfma37826 fma 1 NaN 1 -> NaN +ddfma37827 fma 1 NaN 1000 -> NaN +ddfma37828 fma 1 NaN Inf -> NaN +ddfma37829 fma 1 NaN NaN -> NaN +ddfma37830 fma 1 -Inf NaN -> NaN +ddfma37831 fma 1 -1000 NaN -> NaN +ddfma37832 fma 1 -1 NaN -> NaN +ddfma37833 fma 1 -0 NaN -> NaN +ddfma37834 fma 1 0 NaN -> NaN +ddfma37835 fma 1 1 NaN -> NaN +ddfma37836 fma 1 1000 NaN -> NaN +ddfma37837 fma 1 Inf NaN -> NaN + +ddfma37841 fma 1 sNaN -Inf -> NaN Invalid_operation +ddfma37842 fma 1 sNaN -1000 -> NaN Invalid_operation +ddfma37843 fma 1 sNaN -1 -> NaN Invalid_operation +ddfma37844 fma 1 sNaN -0 -> NaN Invalid_operation +ddfma37845 fma 1 sNaN 0 -> NaN Invalid_operation +ddfma37846 fma 1 sNaN 1 -> NaN Invalid_operation +ddfma37847 fma 1 sNaN 1000 -> NaN Invalid_operation +ddfma37848 fma 1 sNaN NaN -> NaN Invalid_operation +ddfma37849 fma 1 sNaN sNaN -> NaN Invalid_operation +ddfma37850 fma 1 NaN sNaN -> NaN Invalid_operation +ddfma37851 fma 1 -Inf sNaN -> NaN Invalid_operation +ddfma37852 fma 1 -1000 sNaN -> NaN Invalid_operation +ddfma37853 fma 1 -1 sNaN -> NaN Invalid_operation +ddfma37854 fma 1 -0 sNaN -> NaN Invalid_operation +ddfma37855 fma 1 0 sNaN -> NaN Invalid_operation +ddfma37856 fma 1 1 sNaN -> NaN Invalid_operation +ddfma37857 fma 1 1000 sNaN -> NaN Invalid_operation +ddfma37858 fma 1 Inf sNaN -> NaN Invalid_operation +ddfma37859 fma 1 NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddfma37861 fma 1 NaN1 -Inf -> NaN1 +ddfma37862 fma 1 +NaN2 -1000 -> NaN2 +ddfma37863 fma 1 NaN3 1000 -> NaN3 +ddfma37864 fma 1 NaN4 Inf -> NaN4 +ddfma37865 fma 1 NaN5 +NaN6 -> NaN5 +ddfma37866 fma 1 -Inf NaN7 -> NaN7 +ddfma37867 fma 1 -1000 NaN8 -> NaN8 +ddfma37868 fma 1 1000 NaN9 -> NaN9 +ddfma37869 fma 1 Inf +NaN10 -> NaN10 +ddfma37871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation +ddfma37872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation +ddfma37873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation +ddfma37874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation +ddfma37875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation +ddfma37876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation +ddfma37877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation +ddfma37878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation +ddfma37879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation +ddfma37880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation +ddfma37881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddfma37882 fma 1 -NaN26 NaN28 -> -NaN26 +ddfma37883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddfma37884 fma 1 1000 -NaN30 -> -NaN30 +ddfma37885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Here we explore near the boundary of rounding a subnormal to Nmin +ddfma37575 fma 1 1E-383 -1E-398 -> 9.99999999999999E-384 Subnormal +ddfma37576 fma 1 -1E-383 +1E-398 -> -9.99999999999999E-384 Subnormal + +-- check overflow edge case +-- 1234567890123456 +ddfma37972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 +ddfma37973 fma 1 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded +ddfma37974 fma 1 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded +ddfma37975 fma 1 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded +ddfma37976 fma 1 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded +ddfma37977 fma 1 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded +ddfma37978 fma 1 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded +ddfma37979 fma 1 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded +ddfma37980 fma 1 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded +ddfma37981 fma 1 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded +ddfma37982 fma 1 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded +ddfma37983 fma 1 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded +ddfma37984 fma 1 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded + +ddfma37985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 +ddfma37986 fma 1 -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded +ddfma37987 fma 1 -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded +ddfma37988 fma 1 -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded +ddfma37989 fma 1 -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded +ddfma37990 fma 1 -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded +ddfma37991 fma 1 -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded +ddfma37992 fma 1 -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded +ddfma37993 fma 1 -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded +ddfma37994 fma 1 -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded +ddfma37995 fma 1 -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded +ddfma37996 fma 1 -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded +ddfma37997 fma 1 -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +ddfma371100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact +ddfma371101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact +ddfma371103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact +ddfma371104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact +ddfma371105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact +ddfma371106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact +ddfma371107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact +ddfma371108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact +ddfma371109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact + +rounding: ceiling +ddfma371110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact +ddfma371111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact +ddfma371113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact +ddfma371114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact +ddfma371115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact +ddfma371116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact +ddfma371117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact +ddfma371118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact +ddfma371119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +ddfma371300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded +ddfma371310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded +ddfma371311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded +ddfma371312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded +ddfma371313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded +ddfma371314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded +ddfma371315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded +ddfma371316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded +ddfma371317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded +ddfma371318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded +ddfma371319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded +ddfma371320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded +ddfma371321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded +ddfma371322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded +ddfma371323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded +ddfma371324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded +ddfma371325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded +ddfma371339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded + +ddfma371340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded +ddfma371341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded + +ddfma371349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded +ddfma371350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded +ddfma371351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded +ddfma371352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded +ddfma371353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded +ddfma371354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded +ddfma371355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded +ddfma371356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded +ddfma371357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded +ddfma371358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded +ddfma371359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded +ddfma371360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded +ddfma371361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded +ddfma371362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded +ddfma371363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded +ddfma371364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded +ddfma371365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded +ddfma371380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded +ddfma371381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded +ddfma371382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded +ddfma371396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +ddfma371420 fma 1 0 1.123456789012345 -> 1.123456789012345 +ddfma371421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 +ddfma371422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 +ddfma371423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 +ddfma371424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 +ddfma371425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 +ddfma371426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 +ddfma371427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 +ddfma371428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 +ddfma371429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 +ddfma371430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 +ddfma371431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 +ddfma371432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 +ddfma371433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 +ddfma371434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 +ddfma371435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 +ddfma371436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 +ddfma371437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 +ddfma371438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 +ddfma371439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 + +-- same, reversed 0 +ddfma371440 fma 1 1.123456789012345 0 -> 1.123456789012345 +ddfma371441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 +ddfma371442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 +ddfma371443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 +ddfma371444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 +ddfma371445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 +ddfma371446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 +ddfma371447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 +ddfma371448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 +ddfma371449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 +ddfma371450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 +ddfma371451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 +ddfma371452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 +ddfma371453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 +ddfma371454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 +ddfma371455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 +ddfma371456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 +ddfma371457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 +ddfma371458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 +ddfma371459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 + +-- same, Es on the 0 +ddfma371460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 +ddfma371461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 +ddfma371462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 +ddfma371463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 +ddfma371464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 +ddfma371465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 +ddfma371466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 +ddfma371467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 +ddfma371468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 +ddfma371469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 +ddfma371470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 +ddfma371471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 +ddfma371472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 +ddfma371473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 +ddfma371474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 +ddfma371475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 +-- next four flag Rounded because the 0 extends the result +ddfma371476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded +ddfma371477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded +ddfma371478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded +ddfma371479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +ddfma371500 fma 1 0 0E-19 -> 0E-19 +ddfma371501 fma 1 -0 0E-19 -> 0E-19 +ddfma371502 fma 1 0 -0E-19 -> 0E-19 +ddfma371503 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371511 fma 1 -11 11 -> 0 +ddfma371512 fma 1 11 -11 -> 0 + +rounding: half_down +-- exact zeros from zeros +ddfma371520 fma 1 0 0E-19 -> 0E-19 +ddfma371521 fma 1 -0 0E-19 -> 0E-19 +ddfma371522 fma 1 0 -0E-19 -> 0E-19 +ddfma371523 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371531 fma 1 -11 11 -> 0 +ddfma371532 fma 1 11 -11 -> 0 + +rounding: half_even +-- exact zeros from zeros +ddfma371540 fma 1 0 0E-19 -> 0E-19 +ddfma371541 fma 1 -0 0E-19 -> 0E-19 +ddfma371542 fma 1 0 -0E-19 -> 0E-19 +ddfma371543 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371551 fma 1 -11 11 -> 0 +ddfma371552 fma 1 11 -11 -> 0 + +rounding: up +-- exact zeros from zeros +ddfma371560 fma 1 0 0E-19 -> 0E-19 +ddfma371561 fma 1 -0 0E-19 -> 0E-19 +ddfma371562 fma 1 0 -0E-19 -> 0E-19 +ddfma371563 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371571 fma 1 -11 11 -> 0 +ddfma371572 fma 1 11 -11 -> 0 + +rounding: down +-- exact zeros from zeros +ddfma371580 fma 1 0 0E-19 -> 0E-19 +ddfma371581 fma 1 -0 0E-19 -> 0E-19 +ddfma371582 fma 1 0 -0E-19 -> 0E-19 +ddfma371583 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371591 fma 1 -11 11 -> 0 +ddfma371592 fma 1 11 -11 -> 0 + +rounding: ceiling +-- exact zeros from zeros +ddfma371600 fma 1 0 0E-19 -> 0E-19 +ddfma371601 fma 1 -0 0E-19 -> 0E-19 +ddfma371602 fma 1 0 -0E-19 -> 0E-19 +ddfma371603 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371611 fma 1 -11 11 -> 0 +ddfma371612 fma 1 11 -11 -> 0 + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +ddfma371620 fma 1 0 0E-19 -> 0E-19 +ddfma371621 fma 1 -0 0E-19 -> -0E-19 -- * +ddfma371622 fma 1 0 -0E-19 -> -0E-19 -- * +ddfma371623 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371631 fma 1 -11 11 -> -0 -- * +ddfma371632 fma 1 11 -11 -> -0 -- * + +-- Examples from SQL proposal (Krishna Kulkarni) +ddfma371701 fma 1 130E-2 120E-2 -> 2.50 +ddfma371702 fma 1 130E-2 12E-1 -> 2.50 +ddfma371703 fma 1 130E-2 1E0 -> 2.30 +ddfma371704 fma 1 1E2 1E4 -> 1.01E+4 +ddfma371705 fma 1 130E-2 -120E-2 -> 0.10 +ddfma371706 fma 1 130E-2 -12E-1 -> 0.10 +ddfma371707 fma 1 130E-2 -1E0 -> 0.30 +ddfma371708 fma 1 1E2 -1E4 -> -9.9E+3 + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +ddfma375001 fma 1 1234567890123456 1 -> 1234567890123457 +ddfma375002 fma 1 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded +ddfma375003 fma 1 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded +ddfma375004 fma 1 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded +ddfma375005 fma 1 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded +ddfma375006 fma 1 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded +ddfma375007 fma 1 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded +ddfma375008 fma 1 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded +ddfma375009 fma 1 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded +ddfma375010 fma 1 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded +ddfma375011 fma 1 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded +ddfma375012 fma 1 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded +ddfma375013 fma 1 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded +ddfma375014 fma 1 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded +ddfma375015 fma 1 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded +ddfma375016 fma 1 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded +ddfma375017 fma 1 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded +ddfma375018 fma 1 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded +ddfma375019 fma 1 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded +ddfma375020 fma 1 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded +ddfma375021 fma 1 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded + +-- widening second argument at gap +ddfma375030 fma 1 12345678 1 -> 12345679 +ddfma375031 fma 1 12345678 0.1 -> 12345678.1 +ddfma375032 fma 1 12345678 0.12 -> 12345678.12 +ddfma375033 fma 1 12345678 0.123 -> 12345678.123 +ddfma375034 fma 1 12345678 0.1234 -> 12345678.1234 +ddfma375035 fma 1 12345678 0.12345 -> 12345678.12345 +ddfma375036 fma 1 12345678 0.123456 -> 12345678.123456 +ddfma375037 fma 1 12345678 0.1234567 -> 12345678.1234567 +ddfma375038 fma 1 12345678 0.12345678 -> 12345678.12345678 +ddfma375039 fma 1 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded +ddfma375040 fma 1 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded +ddfma375041 fma 1 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded +ddfma375042 fma 1 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded +ddfma375043 fma 1 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded +ddfma375044 fma 1 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded +ddfma375045 fma 1 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded +ddfma375046 fma 1 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded +ddfma375047 fma 1 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded +ddfma375048 fma 1 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded +ddfma375049 fma 1 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +ddfma375050 fma 1 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded +ddfma375051 fma 1 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded +ddfma375052 fma 1 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded +ddfma375053 fma 1 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded +ddfma375054 fma 1 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded +ddfma375055 fma 1 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded +ddfma375056 fma 1 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded +ddfma375057 fma 1 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded +ddfma375060 fma 1 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded +ddfma375061 fma 1 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded +ddfma375062 fma 1 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded +ddfma375063 fma 1 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded +ddfma375064 fma 1 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded +ddfma375065 fma 1 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded +ddfma375066 fma 1 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded +ddfma375067 fma 1 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +ddfma375070 fma 1 12345678 1E-8 -> 12345678.00000001 +ddfma375071 fma 1 12345678 1E-9 -> 12345678.00000001 Inexact Rounded +ddfma375072 fma 1 12345678 1E-10 -> 12345678.00000001 Inexact Rounded +ddfma375073 fma 1 12345678 1E-11 -> 12345678.00000001 Inexact Rounded +ddfma375074 fma 1 12345678 1E-12 -> 12345678.00000001 Inexact Rounded +ddfma375075 fma 1 12345678 1E-13 -> 12345678.00000001 Inexact Rounded +ddfma375076 fma 1 12345678 1E-14 -> 12345678.00000001 Inexact Rounded +ddfma375077 fma 1 12345678 1E-15 -> 12345678.00000001 Inexact Rounded +ddfma375078 fma 1 12345678 1E-16 -> 12345678.00000001 Inexact Rounded +ddfma375079 fma 1 12345678 1E-17 -> 12345678.00000001 Inexact Rounded +ddfma375080 fma 1 12345678 1E-18 -> 12345678.00000001 Inexact Rounded +ddfma375081 fma 1 12345678 1E-19 -> 12345678.00000001 Inexact Rounded +ddfma375082 fma 1 12345678 1E-20 -> 12345678.00000001 Inexact Rounded +ddfma375083 fma 1 12345678 1E-25 -> 12345678.00000001 Inexact Rounded +ddfma375084 fma 1 12345678 1E-30 -> 12345678.00000001 Inexact Rounded +ddfma375085 fma 1 12345678 1E-31 -> 12345678.00000001 Inexact Rounded +ddfma375086 fma 1 12345678 1E-32 -> 12345678.00000001 Inexact Rounded +ddfma375087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexact Rounded +ddfma375088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded +ddfma375089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded + +-- destructive subtraction (from remainder tests) + +-- +++ some of these will be off-by-one remainder vs remainderNear + +ddfma4000 fma -1234567890123454 1.000000000000001 1234567890123456 -> 0.765432109876546 +ddfma4001 fma -1234567890123443 1.00000000000001 1234567890123456 -> 0.65432109876557 +ddfma4002 fma -1234567890123332 1.0000000000001 1234567890123456 -> 0.5432109876668 +ddfma4003 fma -308641972530863 4.000000000000001 1234567890123455 -> 2.691358027469137 +ddfma4004 fma -308641972530863 4.000000000000001 1234567890123456 -> 3.691358027469137 +ddfma4005 fma -246913578024696 4.9999999999999 1234567890123456 -> 0.6913578024696 +ddfma4006 fma -246913578024691 4.99999999999999 1234567890123456 -> 3.46913578024691 +ddfma4007 fma -246913578024691 4.999999999999999 1234567890123456 -> 1.246913578024691 +ddfma4008 fma -246913578024691 5.000000000000001 1234567890123456 -> 0.753086421975309 +ddfma4009 fma -246913578024690 5.00000000000001 1234567890123456 -> 3.53086421975310 +ddfma4010 fma -246913578024686 5.0000000000001 1234567890123456 -> 1.3086421975314 +ddfma4011 fma -1234567890123455 1.000000000000001 1234567890123456 -> -0.234567890123455 +ddfma4012 fma -1234567890123444 1.00000000000001 1234567890123456 -> -0.34567890123444 +ddfma4013 fma -1234567890123333 1.0000000000001 1234567890123456 -> -0.4567890123333 +ddfma4014 fma -308641972530864 4.000000000000001 1234567890123455 -> -1.308641972530864 +ddfma4015 fma -308641972530864 4.000000000000001 1234567890123456 -> -0.308641972530864 +ddfma4016 fma -246913578024696 4.9999999999999 1234567890123456 -> 0.6913578024696 +ddfma4017 fma -246913578024692 4.99999999999999 1234567890123456 -> -1.53086421975308 +ddfma4018 fma -246913578024691 4.999999999999999 1234567890123456 -> 1.246913578024691 +ddfma4019 fma -246913578024691 5.000000000000001 1234567890123456 -> 0.753086421975309 +ddfma4020 fma -246913578024691 5.00000000000001 1234567890123456 -> -1.46913578024691 +ddfma4021 fma -246913578024686 5.0000000000001 1234567890123456 -> 1.3086421975314 + + +-- Null tests +ddfma39990 fma 1 10 # -> NaN Invalid_operation +ddfma39991 fma 1 # 10 -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/ddInvert.decTest b/Lib/test/decimaltestdata/ddInvert.decTest index 321e4e9ee97..5d19fba829b 100644 --- a/Lib/test/decimaltestdata/ddInvert.decTest +++ b/Lib/test/decimaltestdata/ddInvert.decTest @@ -1,202 +1,202 @@ ------------------------------------------------------------------------- --- ddInvert.decTest -- digitwise logical INVERT for decDoubles -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check (truth table) -ddinv001 invert 0 -> 1111111111111111 -ddinv002 invert 1 -> 1111111111111110 -ddinv003 invert 10 -> 1111111111111101 -ddinv004 invert 111111111 -> 1111111000000000 -ddinv005 invert 000000000 -> 1111111111111111 --- and at msd and msd-1 -ddinv007 invert 0000000000000000 -> 1111111111111111 -ddinv008 invert 1000000000000000 -> 111111111111111 -ddinv009 invert 0000000000000000 -> 1111111111111111 -ddinv010 invert 0100000000000000 -> 1011111111111111 -ddinv011 invert 0111111111111111 -> 1000000000000000 -ddinv012 invert 1111111111111111 -> 0 -ddinv013 invert 0011111111111111 -> 1100000000000000 -ddinv014 invert 0111111111111111 -> 1000000000000000 - --- Various lengths --- 123456789 1234567890123456 -ddinv021 invert 111111111 -> 1111111000000000 -ddinv022 invert 111111111111 -> 1111000000000000 -ddinv023 invert 11111111 -> 1111111100000000 -ddinv025 invert 1111111 -> 1111111110000000 -ddinv026 invert 111111 -> 1111111111000000 -ddinv027 invert 11111 -> 1111111111100000 -ddinv028 invert 1111 -> 1111111111110000 -ddinv029 invert 111 -> 1111111111111000 -ddinv031 invert 11 -> 1111111111111100 -ddinv032 invert 1 -> 1111111111111110 -ddinv033 invert 111111111111 -> 1111000000000000 -ddinv034 invert 11111111111 -> 1111100000000000 -ddinv035 invert 1111111111 -> 1111110000000000 -ddinv036 invert 111111111 -> 1111111000000000 - -ddinv040 invert 011111111 -> 1111111100000000 -ddinv041 invert 101111111 -> 1111111010000000 -ddinv042 invert 110111111 -> 1111111001000000 -ddinv043 invert 111011111 -> 1111111000100000 -ddinv044 invert 111101111 -> 1111111000010000 -ddinv045 invert 111110111 -> 1111111000001000 -ddinv046 invert 111111011 -> 1111111000000100 -ddinv047 invert 111111101 -> 1111111000000010 -ddinv048 invert 111111110 -> 1111111000000001 -ddinv049 invert 011111011 -> 1111111100000100 -ddinv050 invert 101111101 -> 1111111010000010 -ddinv051 invert 110111110 -> 1111111001000001 -ddinv052 invert 111011101 -> 1111111000100010 -ddinv053 invert 111101011 -> 1111111000010100 -ddinv054 invert 111110111 -> 1111111000001000 -ddinv055 invert 111101011 -> 1111111000010100 -ddinv056 invert 111011101 -> 1111111000100010 -ddinv057 invert 110111110 -> 1111111001000001 -ddinv058 invert 101111101 -> 1111111010000010 -ddinv059 invert 011111011 -> 1111111100000100 - -ddinv080 invert 1000000011111111 -> 111111100000000 -ddinv081 invert 0100000101111111 -> 1011111010000000 -ddinv082 invert 0010000110111111 -> 1101111001000000 -ddinv083 invert 0001000111011111 -> 1110111000100000 -ddinv084 invert 0000100111101111 -> 1111011000010000 -ddinv085 invert 0000010111110111 -> 1111101000001000 -ddinv086 invert 0000001111111011 -> 1111110000000100 -ddinv087 invert 0000010111111101 -> 1111101000000010 -ddinv088 invert 0000100111111110 -> 1111011000000001 -ddinv089 invert 0001000011111011 -> 1110111100000100 -ddinv090 invert 0010000101111101 -> 1101111010000010 -ddinv091 invert 0100000110111110 -> 1011111001000001 -ddinv092 invert 1000000111011101 -> 111111000100010 -ddinv093 invert 0100000111101011 -> 1011111000010100 -ddinv094 invert 0010000111110111 -> 1101111000001000 -ddinv095 invert 0001000111101011 -> 1110111000010100 -ddinv096 invert 0000100111011101 -> 1111011000100010 -ddinv097 invert 0000010110111110 -> 1111101001000001 -ddinv098 invert 0000001101111101 -> 1111110010000010 -ddinv099 invert 0000010011111011 -> 1111101100000100 - --- non-0/1 should not be accepted, nor should signs -ddinv220 invert 111111112 -> NaN Invalid_operation -ddinv221 invert 333333333 -> NaN Invalid_operation -ddinv222 invert 555555555 -> NaN Invalid_operation -ddinv223 invert 777777777 -> NaN Invalid_operation -ddinv224 invert 999999999 -> NaN Invalid_operation -ddinv225 invert 222222222 -> NaN Invalid_operation -ddinv226 invert 444444444 -> NaN Invalid_operation -ddinv227 invert 666666666 -> NaN Invalid_operation -ddinv228 invert 888888888 -> NaN Invalid_operation -ddinv229 invert 999999999 -> NaN Invalid_operation -ddinv230 invert 999999999 -> NaN Invalid_operation -ddinv231 invert 999999999 -> NaN Invalid_operation -ddinv232 invert 999999999 -> NaN Invalid_operation --- a few randoms -ddinv240 invert 567468689 -> NaN Invalid_operation -ddinv241 invert 567367689 -> NaN Invalid_operation -ddinv242 invert -631917772 -> NaN Invalid_operation -ddinv243 invert -756253257 -> NaN Invalid_operation -ddinv244 invert 835590149 -> NaN Invalid_operation --- test MSD -ddinv250 invert 2000000000000000 -> NaN Invalid_operation -ddinv251 invert 3000000000000000 -> NaN Invalid_operation -ddinv252 invert 4000000000000000 -> NaN Invalid_operation -ddinv253 invert 5000000000000000 -> NaN Invalid_operation -ddinv254 invert 6000000000000000 -> NaN Invalid_operation -ddinv255 invert 7000000000000000 -> NaN Invalid_operation -ddinv256 invert 8000000000000000 -> NaN Invalid_operation -ddinv257 invert 9000000000000000 -> NaN Invalid_operation --- test MSD-1 -ddinv270 invert 0200001000000000 -> NaN Invalid_operation -ddinv271 invert 0300000100000000 -> NaN Invalid_operation -ddinv272 invert 0400000010000000 -> NaN Invalid_operation -ddinv273 invert 0500000001000000 -> NaN Invalid_operation -ddinv274 invert 1600000000100000 -> NaN Invalid_operation -ddinv275 invert 1700000000010000 -> NaN Invalid_operation -ddinv276 invert 1800000000001000 -> NaN Invalid_operation -ddinv277 invert 1900000000000100 -> NaN Invalid_operation --- test LSD -ddinv280 invert 0010000000000002 -> NaN Invalid_operation -ddinv281 invert 0001000000000003 -> NaN Invalid_operation -ddinv282 invert 0000100000000004 -> NaN Invalid_operation -ddinv283 invert 0000010000000005 -> NaN Invalid_operation -ddinv284 invert 1000001000000006 -> NaN Invalid_operation -ddinv285 invert 1000000100000007 -> NaN Invalid_operation -ddinv286 invert 1000000010000008 -> NaN Invalid_operation -ddinv287 invert 1000000001000009 -> NaN Invalid_operation --- test Middie -ddinv288 invert 0010000020000000 -> NaN Invalid_operation -ddinv289 invert 0001000030000001 -> NaN Invalid_operation -ddinv290 invert 0000100040000010 -> NaN Invalid_operation -ddinv291 invert 0000010050000100 -> NaN Invalid_operation -ddinv292 invert 1000001060001000 -> NaN Invalid_operation -ddinv293 invert 1000000170010000 -> NaN Invalid_operation -ddinv294 invert 1000000080100000 -> NaN Invalid_operation -ddinv295 invert 1000000091000000 -> NaN Invalid_operation --- sign -ddinv296 invert -1000000001000000 -> NaN Invalid_operation -ddinv299 invert 1000000001000000 -> 111111110111111 - - --- Nmax, Nmin, Ntiny-like -ddinv341 invert 9.99999999E+299 -> NaN Invalid_operation -ddinv342 invert 1E-299 -> NaN Invalid_operation -ddinv343 invert 1.00000000E-299 -> NaN Invalid_operation -ddinv344 invert 1E-207 -> NaN Invalid_operation -ddinv345 invert -1E-207 -> NaN Invalid_operation -ddinv346 invert -1.00000000E-299 -> NaN Invalid_operation -ddinv347 invert -1E-299 -> NaN Invalid_operation -ddinv348 invert -9.99999999E+299 -> NaN Invalid_operation - --- A few other non-integers -ddinv361 invert 1.0 -> NaN Invalid_operation -ddinv362 invert 1E+1 -> NaN Invalid_operation -ddinv363 invert 0.0 -> NaN Invalid_operation -ddinv364 invert 0E+1 -> NaN Invalid_operation -ddinv365 invert 9.9 -> NaN Invalid_operation -ddinv366 invert 9E+1 -> NaN Invalid_operation - --- All Specials are in error -ddinv788 invert -Inf -> NaN Invalid_operation -ddinv794 invert Inf -> NaN Invalid_operation -ddinv821 invert NaN -> NaN Invalid_operation -ddinv841 invert sNaN -> NaN Invalid_operation --- propagating NaNs -ddinv861 invert NaN1 -> NaN Invalid_operation -ddinv862 invert +NaN2 -> NaN Invalid_operation -ddinv863 invert NaN3 -> NaN Invalid_operation -ddinv864 invert NaN4 -> NaN Invalid_operation -ddinv865 invert NaN5 -> NaN Invalid_operation -ddinv871 invert sNaN11 -> NaN Invalid_operation -ddinv872 invert sNaN12 -> NaN Invalid_operation -ddinv873 invert sNaN13 -> NaN Invalid_operation -ddinv874 invert sNaN14 -> NaN Invalid_operation -ddinv875 invert sNaN15 -> NaN Invalid_operation -ddinv876 invert NaN16 -> NaN Invalid_operation -ddinv881 invert +NaN25 -> NaN Invalid_operation -ddinv882 invert -NaN26 -> NaN Invalid_operation -ddinv883 invert -sNaN27 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddInvert.decTest -- digitwise logical INVERT for decDoubles -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check (truth table) +ddinv001 invert 0 -> 1111111111111111 +ddinv002 invert 1 -> 1111111111111110 +ddinv003 invert 10 -> 1111111111111101 +ddinv004 invert 111111111 -> 1111111000000000 +ddinv005 invert 000000000 -> 1111111111111111 +-- and at msd and msd-1 +ddinv007 invert 0000000000000000 -> 1111111111111111 +ddinv008 invert 1000000000000000 -> 111111111111111 +ddinv009 invert 0000000000000000 -> 1111111111111111 +ddinv010 invert 0100000000000000 -> 1011111111111111 +ddinv011 invert 0111111111111111 -> 1000000000000000 +ddinv012 invert 1111111111111111 -> 0 +ddinv013 invert 0011111111111111 -> 1100000000000000 +ddinv014 invert 0111111111111111 -> 1000000000000000 + +-- Various lengths +-- 123456789 1234567890123456 +ddinv021 invert 111111111 -> 1111111000000000 +ddinv022 invert 111111111111 -> 1111000000000000 +ddinv023 invert 11111111 -> 1111111100000000 +ddinv025 invert 1111111 -> 1111111110000000 +ddinv026 invert 111111 -> 1111111111000000 +ddinv027 invert 11111 -> 1111111111100000 +ddinv028 invert 1111 -> 1111111111110000 +ddinv029 invert 111 -> 1111111111111000 +ddinv031 invert 11 -> 1111111111111100 +ddinv032 invert 1 -> 1111111111111110 +ddinv033 invert 111111111111 -> 1111000000000000 +ddinv034 invert 11111111111 -> 1111100000000000 +ddinv035 invert 1111111111 -> 1111110000000000 +ddinv036 invert 111111111 -> 1111111000000000 + +ddinv040 invert 011111111 -> 1111111100000000 +ddinv041 invert 101111111 -> 1111111010000000 +ddinv042 invert 110111111 -> 1111111001000000 +ddinv043 invert 111011111 -> 1111111000100000 +ddinv044 invert 111101111 -> 1111111000010000 +ddinv045 invert 111110111 -> 1111111000001000 +ddinv046 invert 111111011 -> 1111111000000100 +ddinv047 invert 111111101 -> 1111111000000010 +ddinv048 invert 111111110 -> 1111111000000001 +ddinv049 invert 011111011 -> 1111111100000100 +ddinv050 invert 101111101 -> 1111111010000010 +ddinv051 invert 110111110 -> 1111111001000001 +ddinv052 invert 111011101 -> 1111111000100010 +ddinv053 invert 111101011 -> 1111111000010100 +ddinv054 invert 111110111 -> 1111111000001000 +ddinv055 invert 111101011 -> 1111111000010100 +ddinv056 invert 111011101 -> 1111111000100010 +ddinv057 invert 110111110 -> 1111111001000001 +ddinv058 invert 101111101 -> 1111111010000010 +ddinv059 invert 011111011 -> 1111111100000100 + +ddinv080 invert 1000000011111111 -> 111111100000000 +ddinv081 invert 0100000101111111 -> 1011111010000000 +ddinv082 invert 0010000110111111 -> 1101111001000000 +ddinv083 invert 0001000111011111 -> 1110111000100000 +ddinv084 invert 0000100111101111 -> 1111011000010000 +ddinv085 invert 0000010111110111 -> 1111101000001000 +ddinv086 invert 0000001111111011 -> 1111110000000100 +ddinv087 invert 0000010111111101 -> 1111101000000010 +ddinv088 invert 0000100111111110 -> 1111011000000001 +ddinv089 invert 0001000011111011 -> 1110111100000100 +ddinv090 invert 0010000101111101 -> 1101111010000010 +ddinv091 invert 0100000110111110 -> 1011111001000001 +ddinv092 invert 1000000111011101 -> 111111000100010 +ddinv093 invert 0100000111101011 -> 1011111000010100 +ddinv094 invert 0010000111110111 -> 1101111000001000 +ddinv095 invert 0001000111101011 -> 1110111000010100 +ddinv096 invert 0000100111011101 -> 1111011000100010 +ddinv097 invert 0000010110111110 -> 1111101001000001 +ddinv098 invert 0000001101111101 -> 1111110010000010 +ddinv099 invert 0000010011111011 -> 1111101100000100 + +-- non-0/1 should not be accepted, nor should signs +ddinv220 invert 111111112 -> NaN Invalid_operation +ddinv221 invert 333333333 -> NaN Invalid_operation +ddinv222 invert 555555555 -> NaN Invalid_operation +ddinv223 invert 777777777 -> NaN Invalid_operation +ddinv224 invert 999999999 -> NaN Invalid_operation +ddinv225 invert 222222222 -> NaN Invalid_operation +ddinv226 invert 444444444 -> NaN Invalid_operation +ddinv227 invert 666666666 -> NaN Invalid_operation +ddinv228 invert 888888888 -> NaN Invalid_operation +ddinv229 invert 999999999 -> NaN Invalid_operation +ddinv230 invert 999999999 -> NaN Invalid_operation +ddinv231 invert 999999999 -> NaN Invalid_operation +ddinv232 invert 999999999 -> NaN Invalid_operation +-- a few randoms +ddinv240 invert 567468689 -> NaN Invalid_operation +ddinv241 invert 567367689 -> NaN Invalid_operation +ddinv242 invert -631917772 -> NaN Invalid_operation +ddinv243 invert -756253257 -> NaN Invalid_operation +ddinv244 invert 835590149 -> NaN Invalid_operation +-- test MSD +ddinv250 invert 2000000000000000 -> NaN Invalid_operation +ddinv251 invert 3000000000000000 -> NaN Invalid_operation +ddinv252 invert 4000000000000000 -> NaN Invalid_operation +ddinv253 invert 5000000000000000 -> NaN Invalid_operation +ddinv254 invert 6000000000000000 -> NaN Invalid_operation +ddinv255 invert 7000000000000000 -> NaN Invalid_operation +ddinv256 invert 8000000000000000 -> NaN Invalid_operation +ddinv257 invert 9000000000000000 -> NaN Invalid_operation +-- test MSD-1 +ddinv270 invert 0200001000000000 -> NaN Invalid_operation +ddinv271 invert 0300000100000000 -> NaN Invalid_operation +ddinv272 invert 0400000010000000 -> NaN Invalid_operation +ddinv273 invert 0500000001000000 -> NaN Invalid_operation +ddinv274 invert 1600000000100000 -> NaN Invalid_operation +ddinv275 invert 1700000000010000 -> NaN Invalid_operation +ddinv276 invert 1800000000001000 -> NaN Invalid_operation +ddinv277 invert 1900000000000100 -> NaN Invalid_operation +-- test LSD +ddinv280 invert 0010000000000002 -> NaN Invalid_operation +ddinv281 invert 0001000000000003 -> NaN Invalid_operation +ddinv282 invert 0000100000000004 -> NaN Invalid_operation +ddinv283 invert 0000010000000005 -> NaN Invalid_operation +ddinv284 invert 1000001000000006 -> NaN Invalid_operation +ddinv285 invert 1000000100000007 -> NaN Invalid_operation +ddinv286 invert 1000000010000008 -> NaN Invalid_operation +ddinv287 invert 1000000001000009 -> NaN Invalid_operation +-- test Middie +ddinv288 invert 0010000020000000 -> NaN Invalid_operation +ddinv289 invert 0001000030000001 -> NaN Invalid_operation +ddinv290 invert 0000100040000010 -> NaN Invalid_operation +ddinv291 invert 0000010050000100 -> NaN Invalid_operation +ddinv292 invert 1000001060001000 -> NaN Invalid_operation +ddinv293 invert 1000000170010000 -> NaN Invalid_operation +ddinv294 invert 1000000080100000 -> NaN Invalid_operation +ddinv295 invert 1000000091000000 -> NaN Invalid_operation +-- sign +ddinv296 invert -1000000001000000 -> NaN Invalid_operation +ddinv299 invert 1000000001000000 -> 111111110111111 + + +-- Nmax, Nmin, Ntiny-like +ddinv341 invert 9.99999999E+299 -> NaN Invalid_operation +ddinv342 invert 1E-299 -> NaN Invalid_operation +ddinv343 invert 1.00000000E-299 -> NaN Invalid_operation +ddinv344 invert 1E-207 -> NaN Invalid_operation +ddinv345 invert -1E-207 -> NaN Invalid_operation +ddinv346 invert -1.00000000E-299 -> NaN Invalid_operation +ddinv347 invert -1E-299 -> NaN Invalid_operation +ddinv348 invert -9.99999999E+299 -> NaN Invalid_operation + +-- A few other non-integers +ddinv361 invert 1.0 -> NaN Invalid_operation +ddinv362 invert 1E+1 -> NaN Invalid_operation +ddinv363 invert 0.0 -> NaN Invalid_operation +ddinv364 invert 0E+1 -> NaN Invalid_operation +ddinv365 invert 9.9 -> NaN Invalid_operation +ddinv366 invert 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +ddinv788 invert -Inf -> NaN Invalid_operation +ddinv794 invert Inf -> NaN Invalid_operation +ddinv821 invert NaN -> NaN Invalid_operation +ddinv841 invert sNaN -> NaN Invalid_operation +-- propagating NaNs +ddinv861 invert NaN1 -> NaN Invalid_operation +ddinv862 invert +NaN2 -> NaN Invalid_operation +ddinv863 invert NaN3 -> NaN Invalid_operation +ddinv864 invert NaN4 -> NaN Invalid_operation +ddinv865 invert NaN5 -> NaN Invalid_operation +ddinv871 invert sNaN11 -> NaN Invalid_operation +ddinv872 invert sNaN12 -> NaN Invalid_operation +ddinv873 invert sNaN13 -> NaN Invalid_operation +ddinv874 invert sNaN14 -> NaN Invalid_operation +ddinv875 invert sNaN15 -> NaN Invalid_operation +ddinv876 invert NaN16 -> NaN Invalid_operation +ddinv881 invert +NaN25 -> NaN Invalid_operation +ddinv882 invert -NaN26 -> NaN Invalid_operation +ddinv883 invert -sNaN27 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddLogB.decTest b/Lib/test/decimaltestdata/ddLogB.decTest index 00589b60c35..de728e5968d 100644 --- a/Lib/test/decimaltestdata/ddLogB.decTest +++ b/Lib/test/decimaltestdata/ddLogB.decTest @@ -1,159 +1,159 @@ ------------------------------------------------------------------------- --- ddLogB.decTest -- integral 754r adjusted exponent, for decDoubles -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- basics -ddlogb000 logb 0 -> -Infinity Division_by_zero -ddlogb001 logb 1E-398 -> -398 -ddlogb002 logb 1E-383 -> -383 -ddlogb003 logb 0.001 -> -3 -ddlogb004 logb 0.03 -> -2 -ddlogb005 logb 1 -> 0 -ddlogb006 logb 2 -> 0 -ddlogb007 logb 2.5 -> 0 -ddlogb008 logb 2.500 -> 0 -ddlogb009 logb 10 -> 1 -ddlogb010 logb 70 -> 1 -ddlogb011 logb 100 -> 2 -ddlogb012 logb 333 -> 2 -ddlogb013 logb 9E+384 -> 384 -ddlogb014 logb +Infinity -> Infinity - --- negatives appear to be treated as positives -ddlogb021 logb -0 -> -Infinity Division_by_zero -ddlogb022 logb -1E-398 -> -398 -ddlogb023 logb -9E-383 -> -383 -ddlogb024 logb -0.001 -> -3 -ddlogb025 logb -1 -> 0 -ddlogb026 logb -2 -> 0 -ddlogb027 logb -10 -> 1 -ddlogb028 logb -70 -> 1 -ddlogb029 logb -100 -> 2 -ddlogb030 logb -9E+384 -> 384 -ddlogb031 logb -Infinity -> Infinity - --- zeros -ddlogb111 logb 0 -> -Infinity Division_by_zero -ddlogb112 logb -0 -> -Infinity Division_by_zero -ddlogb113 logb 0E+4 -> -Infinity Division_by_zero -ddlogb114 logb -0E+4 -> -Infinity Division_by_zero -ddlogb115 logb 0.0000 -> -Infinity Division_by_zero -ddlogb116 logb -0.0000 -> -Infinity Division_by_zero -ddlogb117 logb 0E-141 -> -Infinity Division_by_zero -ddlogb118 logb -0E-141 -> -Infinity Division_by_zero - --- full coefficients, alternating bits -ddlogb121 logb 268268268 -> 8 -ddlogb122 logb -268268268 -> 8 -ddlogb123 logb 134134134 -> 8 -ddlogb124 logb -134134134 -> 8 - --- Nmax, Nmin, Ntiny -ddlogb131 logb 9.999999999999999E+384 -> 384 -ddlogb132 logb 1E-383 -> -383 -ddlogb133 logb 1.000000000000000E-383 -> -383 -ddlogb134 logb 1E-398 -> -398 - -ddlogb135 logb -1E-398 -> -398 -ddlogb136 logb -1.000000000000000E-383 -> -383 -ddlogb137 logb -1E-383 -> -383 -ddlogb138 logb -9.999999999999999E+384 -> 384 - --- ones -ddlogb0061 logb 1 -> 0 -ddlogb0062 logb 1.0 -> 0 -ddlogb0063 logb 1.000000000000000 -> 0 - --- notable cases -- exact powers of 10 -ddlogb1100 logb 1 -> 0 -ddlogb1101 logb 10 -> 1 -ddlogb1102 logb 100 -> 2 -ddlogb1103 logb 1000 -> 3 -ddlogb1104 logb 10000 -> 4 -ddlogb1105 logb 100000 -> 5 -ddlogb1106 logb 1000000 -> 6 -ddlogb1107 logb 10000000 -> 7 -ddlogb1108 logb 100000000 -> 8 -ddlogb1109 logb 1000000000 -> 9 -ddlogb1110 logb 10000000000 -> 10 -ddlogb1111 logb 100000000000 -> 11 -ddlogb1112 logb 1000000000000 -> 12 -ddlogb1113 logb 0.00000000001 -> -11 -ddlogb1114 logb 0.0000000001 -> -10 -ddlogb1115 logb 0.000000001 -> -9 -ddlogb1116 logb 0.00000001 -> -8 -ddlogb1117 logb 0.0000001 -> -7 -ddlogb1118 logb 0.000001 -> -6 -ddlogb1119 logb 0.00001 -> -5 -ddlogb1120 logb 0.0001 -> -4 -ddlogb1121 logb 0.001 -> -3 -ddlogb1122 logb 0.01 -> -2 -ddlogb1123 logb 0.1 -> -1 -ddlogb1124 logb 1E-99 -> -99 -ddlogb1125 logb 1E-100 -> -100 -ddlogb1127 logb 1E-299 -> -299 -ddlogb1126 logb 1E-383 -> -383 - --- suggestions from Ilan Nehama -ddlogb1400 logb 10E-3 -> -2 -ddlogb1401 logb 10E-2 -> -1 -ddlogb1402 logb 100E-2 -> 0 -ddlogb1403 logb 1000E-2 -> 1 -ddlogb1404 logb 10000E-2 -> 2 -ddlogb1405 logb 10E-1 -> 0 -ddlogb1406 logb 100E-1 -> 1 -ddlogb1407 logb 1000E-1 -> 2 -ddlogb1408 logb 10000E-1 -> 3 -ddlogb1409 logb 10E0 -> 1 -ddlogb1410 logb 100E0 -> 2 -ddlogb1411 logb 1000E0 -> 3 -ddlogb1412 logb 10000E0 -> 4 -ddlogb1413 logb 10E1 -> 2 -ddlogb1414 logb 100E1 -> 3 -ddlogb1415 logb 1000E1 -> 4 -ddlogb1416 logb 10000E1 -> 5 -ddlogb1417 logb 10E2 -> 3 -ddlogb1418 logb 100E2 -> 4 -ddlogb1419 logb 1000E2 -> 5 -ddlogb1420 logb 10000E2 -> 6 - --- special values -ddlogb820 logb Infinity -> Infinity -ddlogb821 logb 0 -> -Infinity Division_by_zero -ddlogb822 logb NaN -> NaN -ddlogb823 logb sNaN -> NaN Invalid_operation --- propagating NaNs -ddlogb824 logb sNaN123 -> NaN123 Invalid_operation -ddlogb825 logb -sNaN321 -> -NaN321 Invalid_operation -ddlogb826 logb NaN456 -> NaN456 -ddlogb827 logb -NaN654 -> -NaN654 -ddlogb828 logb NaN1 -> NaN1 - --- Null test -ddlogb900 logb # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- ddLogB.decTest -- integral 754r adjusted exponent, for decDoubles -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- basics +ddlogb000 logb 0 -> -Infinity Division_by_zero +ddlogb001 logb 1E-398 -> -398 +ddlogb002 logb 1E-383 -> -383 +ddlogb003 logb 0.001 -> -3 +ddlogb004 logb 0.03 -> -2 +ddlogb005 logb 1 -> 0 +ddlogb006 logb 2 -> 0 +ddlogb007 logb 2.5 -> 0 +ddlogb008 logb 2.500 -> 0 +ddlogb009 logb 10 -> 1 +ddlogb010 logb 70 -> 1 +ddlogb011 logb 100 -> 2 +ddlogb012 logb 333 -> 2 +ddlogb013 logb 9E+384 -> 384 +ddlogb014 logb +Infinity -> Infinity + +-- negatives appear to be treated as positives +ddlogb021 logb -0 -> -Infinity Division_by_zero +ddlogb022 logb -1E-398 -> -398 +ddlogb023 logb -9E-383 -> -383 +ddlogb024 logb -0.001 -> -3 +ddlogb025 logb -1 -> 0 +ddlogb026 logb -2 -> 0 +ddlogb027 logb -10 -> 1 +ddlogb028 logb -70 -> 1 +ddlogb029 logb -100 -> 2 +ddlogb030 logb -9E+384 -> 384 +ddlogb031 logb -Infinity -> Infinity + +-- zeros +ddlogb111 logb 0 -> -Infinity Division_by_zero +ddlogb112 logb -0 -> -Infinity Division_by_zero +ddlogb113 logb 0E+4 -> -Infinity Division_by_zero +ddlogb114 logb -0E+4 -> -Infinity Division_by_zero +ddlogb115 logb 0.0000 -> -Infinity Division_by_zero +ddlogb116 logb -0.0000 -> -Infinity Division_by_zero +ddlogb117 logb 0E-141 -> -Infinity Division_by_zero +ddlogb118 logb -0E-141 -> -Infinity Division_by_zero + +-- full coefficients, alternating bits +ddlogb121 logb 268268268 -> 8 +ddlogb122 logb -268268268 -> 8 +ddlogb123 logb 134134134 -> 8 +ddlogb124 logb -134134134 -> 8 + +-- Nmax, Nmin, Ntiny +ddlogb131 logb 9.999999999999999E+384 -> 384 +ddlogb132 logb 1E-383 -> -383 +ddlogb133 logb 1.000000000000000E-383 -> -383 +ddlogb134 logb 1E-398 -> -398 + +ddlogb135 logb -1E-398 -> -398 +ddlogb136 logb -1.000000000000000E-383 -> -383 +ddlogb137 logb -1E-383 -> -383 +ddlogb138 logb -9.999999999999999E+384 -> 384 + +-- ones +ddlogb0061 logb 1 -> 0 +ddlogb0062 logb 1.0 -> 0 +ddlogb0063 logb 1.000000000000000 -> 0 + +-- notable cases -- exact powers of 10 +ddlogb1100 logb 1 -> 0 +ddlogb1101 logb 10 -> 1 +ddlogb1102 logb 100 -> 2 +ddlogb1103 logb 1000 -> 3 +ddlogb1104 logb 10000 -> 4 +ddlogb1105 logb 100000 -> 5 +ddlogb1106 logb 1000000 -> 6 +ddlogb1107 logb 10000000 -> 7 +ddlogb1108 logb 100000000 -> 8 +ddlogb1109 logb 1000000000 -> 9 +ddlogb1110 logb 10000000000 -> 10 +ddlogb1111 logb 100000000000 -> 11 +ddlogb1112 logb 1000000000000 -> 12 +ddlogb1113 logb 0.00000000001 -> -11 +ddlogb1114 logb 0.0000000001 -> -10 +ddlogb1115 logb 0.000000001 -> -9 +ddlogb1116 logb 0.00000001 -> -8 +ddlogb1117 logb 0.0000001 -> -7 +ddlogb1118 logb 0.000001 -> -6 +ddlogb1119 logb 0.00001 -> -5 +ddlogb1120 logb 0.0001 -> -4 +ddlogb1121 logb 0.001 -> -3 +ddlogb1122 logb 0.01 -> -2 +ddlogb1123 logb 0.1 -> -1 +ddlogb1124 logb 1E-99 -> -99 +ddlogb1125 logb 1E-100 -> -100 +ddlogb1127 logb 1E-299 -> -299 +ddlogb1126 logb 1E-383 -> -383 + +-- suggestions from Ilan Nehama +ddlogb1400 logb 10E-3 -> -2 +ddlogb1401 logb 10E-2 -> -1 +ddlogb1402 logb 100E-2 -> 0 +ddlogb1403 logb 1000E-2 -> 1 +ddlogb1404 logb 10000E-2 -> 2 +ddlogb1405 logb 10E-1 -> 0 +ddlogb1406 logb 100E-1 -> 1 +ddlogb1407 logb 1000E-1 -> 2 +ddlogb1408 logb 10000E-1 -> 3 +ddlogb1409 logb 10E0 -> 1 +ddlogb1410 logb 100E0 -> 2 +ddlogb1411 logb 1000E0 -> 3 +ddlogb1412 logb 10000E0 -> 4 +ddlogb1413 logb 10E1 -> 2 +ddlogb1414 logb 100E1 -> 3 +ddlogb1415 logb 1000E1 -> 4 +ddlogb1416 logb 10000E1 -> 5 +ddlogb1417 logb 10E2 -> 3 +ddlogb1418 logb 100E2 -> 4 +ddlogb1419 logb 1000E2 -> 5 +ddlogb1420 logb 10000E2 -> 6 + +-- special values +ddlogb820 logb Infinity -> Infinity +ddlogb821 logb 0 -> -Infinity Division_by_zero +ddlogb822 logb NaN -> NaN +ddlogb823 logb sNaN -> NaN Invalid_operation +-- propagating NaNs +ddlogb824 logb sNaN123 -> NaN123 Invalid_operation +ddlogb825 logb -sNaN321 -> -NaN321 Invalid_operation +ddlogb826 logb NaN456 -> NaN456 +ddlogb827 logb -NaN654 -> -NaN654 +ddlogb828 logb NaN1 -> NaN1 + +-- Null test +ddlogb900 logb # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/ddMax.decTest b/Lib/test/decimaltestdata/ddMax.decTest index 45ea9b4c933..1ac63958b87 100644 --- a/Lib/test/decimaltestdata/ddMax.decTest +++ b/Lib/test/decimaltestdata/ddMax.decTest @@ -1,322 +1,322 @@ ------------------------------------------------------------------------- --- ddMax.decTest -- decDouble maxnum -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmax001 max -2 -2 -> -2 -ddmax002 max -2 -1 -> -1 -ddmax003 max -2 0 -> 0 -ddmax004 max -2 1 -> 1 -ddmax005 max -2 2 -> 2 -ddmax006 max -1 -2 -> -1 -ddmax007 max -1 -1 -> -1 -ddmax008 max -1 0 -> 0 -ddmax009 max -1 1 -> 1 -ddmax010 max -1 2 -> 2 -ddmax011 max 0 -2 -> 0 -ddmax012 max 0 -1 -> 0 -ddmax013 max 0 0 -> 0 -ddmax014 max 0 1 -> 1 -ddmax015 max 0 2 -> 2 -ddmax016 max 1 -2 -> 1 -ddmax017 max 1 -1 -> 1 -ddmax018 max 1 0 -> 1 -ddmax019 max 1 1 -> 1 -ddmax020 max 1 2 -> 2 -ddmax021 max 2 -2 -> 2 -ddmax022 max 2 -1 -> 2 -ddmax023 max 2 0 -> 2 -ddmax025 max 2 1 -> 2 -ddmax026 max 2 2 -> 2 - --- extended zeros -ddmax030 max 0 0 -> 0 -ddmax031 max 0 -0 -> 0 -ddmax032 max 0 -0.0 -> 0 -ddmax033 max 0 0.0 -> 0 -ddmax034 max -0 0 -> 0 -- note: -0 = 0, but 0 chosen -ddmax035 max -0 -0 -> -0 -ddmax036 max -0 -0.0 -> -0.0 -ddmax037 max -0 0.0 -> 0.0 -ddmax038 max 0.0 0 -> 0 -ddmax039 max 0.0 -0 -> 0.0 -ddmax040 max 0.0 -0.0 -> 0.0 -ddmax041 max 0.0 0.0 -> 0.0 -ddmax042 max -0.0 0 -> 0 -ddmax043 max -0.0 -0 -> -0.0 -ddmax044 max -0.0 -0.0 -> -0.0 -ddmax045 max -0.0 0.0 -> 0.0 - -ddmax050 max -0E1 0E1 -> 0E+1 -ddmax051 max -0E2 0E2 -> 0E+2 -ddmax052 max -0E2 0E1 -> 0E+1 -ddmax053 max -0E1 0E2 -> 0E+2 -ddmax054 max 0E1 -0E1 -> 0E+1 -ddmax055 max 0E2 -0E2 -> 0E+2 -ddmax056 max 0E2 -0E1 -> 0E+2 -ddmax057 max 0E1 -0E2 -> 0E+1 - -ddmax058 max 0E1 0E1 -> 0E+1 -ddmax059 max 0E2 0E2 -> 0E+2 -ddmax060 max 0E2 0E1 -> 0E+2 -ddmax061 max 0E1 0E2 -> 0E+2 -ddmax062 max -0E1 -0E1 -> -0E+1 -ddmax063 max -0E2 -0E2 -> -0E+2 -ddmax064 max -0E2 -0E1 -> -0E+1 -ddmax065 max -0E1 -0E2 -> -0E+1 - --- Specials -ddmax090 max Inf -Inf -> Infinity -ddmax091 max Inf -1000 -> Infinity -ddmax092 max Inf -1 -> Infinity -ddmax093 max Inf -0 -> Infinity -ddmax094 max Inf 0 -> Infinity -ddmax095 max Inf 1 -> Infinity -ddmax096 max Inf 1000 -> Infinity -ddmax097 max Inf Inf -> Infinity -ddmax098 max -1000 Inf -> Infinity -ddmax099 max -Inf Inf -> Infinity -ddmax100 max -1 Inf -> Infinity -ddmax101 max -0 Inf -> Infinity -ddmax102 max 0 Inf -> Infinity -ddmax103 max 1 Inf -> Infinity -ddmax104 max 1000 Inf -> Infinity -ddmax105 max Inf Inf -> Infinity - -ddmax120 max -Inf -Inf -> -Infinity -ddmax121 max -Inf -1000 -> -1000 -ddmax122 max -Inf -1 -> -1 -ddmax123 max -Inf -0 -> -0 -ddmax124 max -Inf 0 -> 0 -ddmax125 max -Inf 1 -> 1 -ddmax126 max -Inf 1000 -> 1000 -ddmax127 max -Inf Inf -> Infinity -ddmax128 max -Inf -Inf -> -Infinity -ddmax129 max -1000 -Inf -> -1000 -ddmax130 max -1 -Inf -> -1 -ddmax131 max -0 -Inf -> -0 -ddmax132 max 0 -Inf -> 0 -ddmax133 max 1 -Inf -> 1 -ddmax134 max 1000 -Inf -> 1000 -ddmax135 max Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -ddmax141 max NaN -Inf -> -Infinity -ddmax142 max NaN -1000 -> -1000 -ddmax143 max NaN -1 -> -1 -ddmax144 max NaN -0 -> -0 -ddmax145 max NaN 0 -> 0 -ddmax146 max NaN 1 -> 1 -ddmax147 max NaN 1000 -> 1000 -ddmax148 max NaN Inf -> Infinity -ddmax149 max NaN NaN -> NaN -ddmax150 max -Inf NaN -> -Infinity -ddmax151 max -1000 NaN -> -1000 -ddmax152 max -1 NaN -> -1 -ddmax153 max -0 NaN -> -0 -ddmax154 max 0 NaN -> 0 -ddmax155 max 1 NaN -> 1 -ddmax156 max 1000 NaN -> 1000 -ddmax157 max Inf NaN -> Infinity - -ddmax161 max sNaN -Inf -> NaN Invalid_operation -ddmax162 max sNaN -1000 -> NaN Invalid_operation -ddmax163 max sNaN -1 -> NaN Invalid_operation -ddmax164 max sNaN -0 -> NaN Invalid_operation -ddmax165 max sNaN 0 -> NaN Invalid_operation -ddmax166 max sNaN 1 -> NaN Invalid_operation -ddmax167 max sNaN 1000 -> NaN Invalid_operation -ddmax168 max sNaN NaN -> NaN Invalid_operation -ddmax169 max sNaN sNaN -> NaN Invalid_operation -ddmax170 max NaN sNaN -> NaN Invalid_operation -ddmax171 max -Inf sNaN -> NaN Invalid_operation -ddmax172 max -1000 sNaN -> NaN Invalid_operation -ddmax173 max -1 sNaN -> NaN Invalid_operation -ddmax174 max -0 sNaN -> NaN Invalid_operation -ddmax175 max 0 sNaN -> NaN Invalid_operation -ddmax176 max 1 sNaN -> NaN Invalid_operation -ddmax177 max 1000 sNaN -> NaN Invalid_operation -ddmax178 max Inf sNaN -> NaN Invalid_operation -ddmax179 max NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmax181 max NaN9 -Inf -> -Infinity -ddmax182 max NaN8 9 -> 9 -ddmax183 max -NaN7 Inf -> Infinity - -ddmax184 max -NaN1 NaN11 -> -NaN1 -ddmax185 max NaN2 NaN12 -> NaN2 -ddmax186 max -NaN13 -NaN7 -> -NaN13 -ddmax187 max NaN14 -NaN5 -> NaN14 - -ddmax188 max -Inf NaN4 -> -Infinity -ddmax189 max -9 -NaN3 -> -9 -ddmax190 max Inf NaN2 -> Infinity - -ddmax191 max sNaN99 -Inf -> NaN99 Invalid_operation -ddmax192 max sNaN98 -1 -> NaN98 Invalid_operation -ddmax193 max -sNaN97 NaN -> -NaN97 Invalid_operation -ddmax194 max sNaN96 sNaN94 -> NaN96 Invalid_operation -ddmax195 max NaN95 sNaN93 -> NaN93 Invalid_operation -ddmax196 max -Inf sNaN92 -> NaN92 Invalid_operation -ddmax197 max 0 sNaN91 -> NaN91 Invalid_operation -ddmax198 max Inf -sNaN90 -> -NaN90 Invalid_operation -ddmax199 max NaN sNaN89 -> NaN89 Invalid_operation - --- old rounding checks -ddmax221 max 12345678000 1 -> 12345678000 -ddmax222 max 1 12345678000 -> 12345678000 -ddmax223 max 1234567800 1 -> 1234567800 -ddmax224 max 1 1234567800 -> 1234567800 -ddmax225 max 1234567890 1 -> 1234567890 -ddmax226 max 1 1234567890 -> 1234567890 -ddmax227 max 1234567891 1 -> 1234567891 -ddmax228 max 1 1234567891 -> 1234567891 -ddmax229 max 12345678901 1 -> 12345678901 -ddmax230 max 1 12345678901 -> 12345678901 -ddmax231 max 1234567896 1 -> 1234567896 -ddmax232 max 1 1234567896 -> 1234567896 -ddmax233 max -1234567891 1 -> 1 -ddmax234 max 1 -1234567891 -> 1 -ddmax235 max -12345678901 1 -> 1 -ddmax236 max 1 -12345678901 -> 1 -ddmax237 max -1234567896 1 -> 1 -ddmax238 max 1 -1234567896 -> 1 - --- from examples -ddmax280 max '3' '2' -> '3' -ddmax281 max '-10' '3' -> '3' -ddmax282 max '1.0' '1' -> '1' -ddmax283 max '1' '1.0' -> '1' -ddmax284 max '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -ddmax401 max Inf 1.1 -> Infinity -ddmax402 max 1.1 1 -> 1.1 -ddmax403 max 1 1.0 -> 1 -ddmax404 max 1.0 0.1 -> 1.0 -ddmax405 max 0.1 0.10 -> 0.1 -ddmax406 max 0.10 0.100 -> 0.10 -ddmax407 max 0.10 0 -> 0.10 -ddmax408 max 0 0.0 -> 0 -ddmax409 max 0.0 -0 -> 0.0 -ddmax410 max 0.0 -0.0 -> 0.0 -ddmax411 max 0.00 -0.0 -> 0.00 -ddmax412 max 0.0 -0.00 -> 0.0 -ddmax413 max 0 -0.0 -> 0 -ddmax414 max 0 -0 -> 0 -ddmax415 max -0.0 -0 -> -0.0 -ddmax416 max -0 -0.100 -> -0 -ddmax417 max -0.100 -0.10 -> -0.100 -ddmax418 max -0.10 -0.1 -> -0.10 -ddmax419 max -0.1 -1.0 -> -0.1 -ddmax420 max -1.0 -1 -> -1.0 -ddmax421 max -1 -1.1 -> -1 -ddmax423 max -1.1 -Inf -> -1.1 --- same with operands reversed -ddmax431 max 1.1 Inf -> Infinity -ddmax432 max 1 1.1 -> 1.1 -ddmax433 max 1.0 1 -> 1 -ddmax434 max 0.1 1.0 -> 1.0 -ddmax435 max 0.10 0.1 -> 0.1 -ddmax436 max 0.100 0.10 -> 0.10 -ddmax437 max 0 0.10 -> 0.10 -ddmax438 max 0.0 0 -> 0 -ddmax439 max -0 0.0 -> 0.0 -ddmax440 max -0.0 0.0 -> 0.0 -ddmax441 max -0.0 0.00 -> 0.00 -ddmax442 max -0.00 0.0 -> 0.0 -ddmax443 max -0.0 0 -> 0 -ddmax444 max -0 0 -> 0 -ddmax445 max -0 -0.0 -> -0.0 -ddmax446 max -0.100 -0 -> -0 -ddmax447 max -0.10 -0.100 -> -0.100 -ddmax448 max -0.1 -0.10 -> -0.10 -ddmax449 max -1.0 -0.1 -> -0.1 -ddmax450 max -1 -1.0 -> -1.0 -ddmax451 max -1.1 -1 -> -1 -ddmax453 max -Inf -1.1 -> -1.1 --- largies -ddmax460 max 1000 1E+3 -> 1E+3 -ddmax461 max 1E+3 1000 -> 1E+3 -ddmax462 max 1000 -1E+3 -> 1000 -ddmax463 max 1E+3 -1000 -> 1E+3 -ddmax464 max -1000 1E+3 -> 1E+3 -ddmax465 max -1E+3 1000 -> 1000 -ddmax466 max -1000 -1E+3 -> -1000 -ddmax467 max -1E+3 -1000 -> -1000 - --- misalignment traps for little-endian -ddmax471 max 1.0 0.1 -> 1.0 -ddmax472 max 0.1 1.0 -> 1.0 -ddmax473 max 10.0 0.1 -> 10.0 -ddmax474 max 0.1 10.0 -> 10.0 -ddmax475 max 100 1.0 -> 100 -ddmax476 max 1.0 100 -> 100 -ddmax477 max 1000 10.0 -> 1000 -ddmax478 max 10.0 1000 -> 1000 -ddmax479 max 10000 100.0 -> 10000 -ddmax480 max 100.0 10000 -> 10000 -ddmax481 max 100000 1000.0 -> 100000 -ddmax482 max 1000.0 100000 -> 100000 -ddmax483 max 1000000 10000.0 -> 1000000 -ddmax484 max 10000.0 1000000 -> 1000000 - --- subnormals -ddmax510 max 1.00E-383 0 -> 1.00E-383 -ddmax511 max 0.1E-383 0 -> 1E-384 Subnormal -ddmax512 max 0.10E-383 0 -> 1.0E-384 Subnormal -ddmax513 max 0.100E-383 0 -> 1.00E-384 Subnormal -ddmax514 max 0.01E-383 0 -> 1E-385 Subnormal -ddmax515 max 0.999E-383 0 -> 9.99E-384 Subnormal -ddmax516 max 0.099E-383 0 -> 9.9E-385 Subnormal -ddmax517 max 0.009E-383 0 -> 9E-386 Subnormal -ddmax518 max 0.001E-383 0 -> 1E-386 Subnormal -ddmax519 max 0.0009E-383 0 -> 9E-387 Subnormal -ddmax520 max 0.0001E-383 0 -> 1E-387 Subnormal - -ddmax530 max -1.00E-383 0 -> 0 -ddmax531 max -0.1E-383 0 -> 0 -ddmax532 max -0.10E-383 0 -> 0 -ddmax533 max -0.100E-383 0 -> 0 -ddmax534 max -0.01E-383 0 -> 0 -ddmax535 max -0.999E-383 0 -> 0 -ddmax536 max -0.099E-383 0 -> 0 -ddmax537 max -0.009E-383 0 -> 0 -ddmax538 max -0.001E-383 0 -> 0 -ddmax539 max -0.0009E-383 0 -> 0 -ddmax540 max -0.0001E-383 0 -> 0 - --- Null tests -ddmax900 max 10 # -> NaN Invalid_operation -ddmax901 max # 10 -> NaN Invalid_operation - - - +------------------------------------------------------------------------ +-- ddMax.decTest -- decDouble maxnum -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmax001 max -2 -2 -> -2 +ddmax002 max -2 -1 -> -1 +ddmax003 max -2 0 -> 0 +ddmax004 max -2 1 -> 1 +ddmax005 max -2 2 -> 2 +ddmax006 max -1 -2 -> -1 +ddmax007 max -1 -1 -> -1 +ddmax008 max -1 0 -> 0 +ddmax009 max -1 1 -> 1 +ddmax010 max -1 2 -> 2 +ddmax011 max 0 -2 -> 0 +ddmax012 max 0 -1 -> 0 +ddmax013 max 0 0 -> 0 +ddmax014 max 0 1 -> 1 +ddmax015 max 0 2 -> 2 +ddmax016 max 1 -2 -> 1 +ddmax017 max 1 -1 -> 1 +ddmax018 max 1 0 -> 1 +ddmax019 max 1 1 -> 1 +ddmax020 max 1 2 -> 2 +ddmax021 max 2 -2 -> 2 +ddmax022 max 2 -1 -> 2 +ddmax023 max 2 0 -> 2 +ddmax025 max 2 1 -> 2 +ddmax026 max 2 2 -> 2 + +-- extended zeros +ddmax030 max 0 0 -> 0 +ddmax031 max 0 -0 -> 0 +ddmax032 max 0 -0.0 -> 0 +ddmax033 max 0 0.0 -> 0 +ddmax034 max -0 0 -> 0 -- note: -0 = 0, but 0 chosen +ddmax035 max -0 -0 -> -0 +ddmax036 max -0 -0.0 -> -0.0 +ddmax037 max -0 0.0 -> 0.0 +ddmax038 max 0.0 0 -> 0 +ddmax039 max 0.0 -0 -> 0.0 +ddmax040 max 0.0 -0.0 -> 0.0 +ddmax041 max 0.0 0.0 -> 0.0 +ddmax042 max -0.0 0 -> 0 +ddmax043 max -0.0 -0 -> -0.0 +ddmax044 max -0.0 -0.0 -> -0.0 +ddmax045 max -0.0 0.0 -> 0.0 + +ddmax050 max -0E1 0E1 -> 0E+1 +ddmax051 max -0E2 0E2 -> 0E+2 +ddmax052 max -0E2 0E1 -> 0E+1 +ddmax053 max -0E1 0E2 -> 0E+2 +ddmax054 max 0E1 -0E1 -> 0E+1 +ddmax055 max 0E2 -0E2 -> 0E+2 +ddmax056 max 0E2 -0E1 -> 0E+2 +ddmax057 max 0E1 -0E2 -> 0E+1 + +ddmax058 max 0E1 0E1 -> 0E+1 +ddmax059 max 0E2 0E2 -> 0E+2 +ddmax060 max 0E2 0E1 -> 0E+2 +ddmax061 max 0E1 0E2 -> 0E+2 +ddmax062 max -0E1 -0E1 -> -0E+1 +ddmax063 max -0E2 -0E2 -> -0E+2 +ddmax064 max -0E2 -0E1 -> -0E+1 +ddmax065 max -0E1 -0E2 -> -0E+1 + +-- Specials +ddmax090 max Inf -Inf -> Infinity +ddmax091 max Inf -1000 -> Infinity +ddmax092 max Inf -1 -> Infinity +ddmax093 max Inf -0 -> Infinity +ddmax094 max Inf 0 -> Infinity +ddmax095 max Inf 1 -> Infinity +ddmax096 max Inf 1000 -> Infinity +ddmax097 max Inf Inf -> Infinity +ddmax098 max -1000 Inf -> Infinity +ddmax099 max -Inf Inf -> Infinity +ddmax100 max -1 Inf -> Infinity +ddmax101 max -0 Inf -> Infinity +ddmax102 max 0 Inf -> Infinity +ddmax103 max 1 Inf -> Infinity +ddmax104 max 1000 Inf -> Infinity +ddmax105 max Inf Inf -> Infinity + +ddmax120 max -Inf -Inf -> -Infinity +ddmax121 max -Inf -1000 -> -1000 +ddmax122 max -Inf -1 -> -1 +ddmax123 max -Inf -0 -> -0 +ddmax124 max -Inf 0 -> 0 +ddmax125 max -Inf 1 -> 1 +ddmax126 max -Inf 1000 -> 1000 +ddmax127 max -Inf Inf -> Infinity +ddmax128 max -Inf -Inf -> -Infinity +ddmax129 max -1000 -Inf -> -1000 +ddmax130 max -1 -Inf -> -1 +ddmax131 max -0 -Inf -> -0 +ddmax132 max 0 -Inf -> 0 +ddmax133 max 1 -Inf -> 1 +ddmax134 max 1000 -Inf -> 1000 +ddmax135 max Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +ddmax141 max NaN -Inf -> -Infinity +ddmax142 max NaN -1000 -> -1000 +ddmax143 max NaN -1 -> -1 +ddmax144 max NaN -0 -> -0 +ddmax145 max NaN 0 -> 0 +ddmax146 max NaN 1 -> 1 +ddmax147 max NaN 1000 -> 1000 +ddmax148 max NaN Inf -> Infinity +ddmax149 max NaN NaN -> NaN +ddmax150 max -Inf NaN -> -Infinity +ddmax151 max -1000 NaN -> -1000 +ddmax152 max -1 NaN -> -1 +ddmax153 max -0 NaN -> -0 +ddmax154 max 0 NaN -> 0 +ddmax155 max 1 NaN -> 1 +ddmax156 max 1000 NaN -> 1000 +ddmax157 max Inf NaN -> Infinity + +ddmax161 max sNaN -Inf -> NaN Invalid_operation +ddmax162 max sNaN -1000 -> NaN Invalid_operation +ddmax163 max sNaN -1 -> NaN Invalid_operation +ddmax164 max sNaN -0 -> NaN Invalid_operation +ddmax165 max sNaN 0 -> NaN Invalid_operation +ddmax166 max sNaN 1 -> NaN Invalid_operation +ddmax167 max sNaN 1000 -> NaN Invalid_operation +ddmax168 max sNaN NaN -> NaN Invalid_operation +ddmax169 max sNaN sNaN -> NaN Invalid_operation +ddmax170 max NaN sNaN -> NaN Invalid_operation +ddmax171 max -Inf sNaN -> NaN Invalid_operation +ddmax172 max -1000 sNaN -> NaN Invalid_operation +ddmax173 max -1 sNaN -> NaN Invalid_operation +ddmax174 max -0 sNaN -> NaN Invalid_operation +ddmax175 max 0 sNaN -> NaN Invalid_operation +ddmax176 max 1 sNaN -> NaN Invalid_operation +ddmax177 max 1000 sNaN -> NaN Invalid_operation +ddmax178 max Inf sNaN -> NaN Invalid_operation +ddmax179 max NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmax181 max NaN9 -Inf -> -Infinity +ddmax182 max NaN8 9 -> 9 +ddmax183 max -NaN7 Inf -> Infinity + +ddmax184 max -NaN1 NaN11 -> -NaN1 +ddmax185 max NaN2 NaN12 -> NaN2 +ddmax186 max -NaN13 -NaN7 -> -NaN13 +ddmax187 max NaN14 -NaN5 -> NaN14 + +ddmax188 max -Inf NaN4 -> -Infinity +ddmax189 max -9 -NaN3 -> -9 +ddmax190 max Inf NaN2 -> Infinity + +ddmax191 max sNaN99 -Inf -> NaN99 Invalid_operation +ddmax192 max sNaN98 -1 -> NaN98 Invalid_operation +ddmax193 max -sNaN97 NaN -> -NaN97 Invalid_operation +ddmax194 max sNaN96 sNaN94 -> NaN96 Invalid_operation +ddmax195 max NaN95 sNaN93 -> NaN93 Invalid_operation +ddmax196 max -Inf sNaN92 -> NaN92 Invalid_operation +ddmax197 max 0 sNaN91 -> NaN91 Invalid_operation +ddmax198 max Inf -sNaN90 -> -NaN90 Invalid_operation +ddmax199 max NaN sNaN89 -> NaN89 Invalid_operation + +-- old rounding checks +ddmax221 max 12345678000 1 -> 12345678000 +ddmax222 max 1 12345678000 -> 12345678000 +ddmax223 max 1234567800 1 -> 1234567800 +ddmax224 max 1 1234567800 -> 1234567800 +ddmax225 max 1234567890 1 -> 1234567890 +ddmax226 max 1 1234567890 -> 1234567890 +ddmax227 max 1234567891 1 -> 1234567891 +ddmax228 max 1 1234567891 -> 1234567891 +ddmax229 max 12345678901 1 -> 12345678901 +ddmax230 max 1 12345678901 -> 12345678901 +ddmax231 max 1234567896 1 -> 1234567896 +ddmax232 max 1 1234567896 -> 1234567896 +ddmax233 max -1234567891 1 -> 1 +ddmax234 max 1 -1234567891 -> 1 +ddmax235 max -12345678901 1 -> 1 +ddmax236 max 1 -12345678901 -> 1 +ddmax237 max -1234567896 1 -> 1 +ddmax238 max 1 -1234567896 -> 1 + +-- from examples +ddmax280 max '3' '2' -> '3' +ddmax281 max '-10' '3' -> '3' +ddmax282 max '1.0' '1' -> '1' +ddmax283 max '1' '1.0' -> '1' +ddmax284 max '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +ddmax401 max Inf 1.1 -> Infinity +ddmax402 max 1.1 1 -> 1.1 +ddmax403 max 1 1.0 -> 1 +ddmax404 max 1.0 0.1 -> 1.0 +ddmax405 max 0.1 0.10 -> 0.1 +ddmax406 max 0.10 0.100 -> 0.10 +ddmax407 max 0.10 0 -> 0.10 +ddmax408 max 0 0.0 -> 0 +ddmax409 max 0.0 -0 -> 0.0 +ddmax410 max 0.0 -0.0 -> 0.0 +ddmax411 max 0.00 -0.0 -> 0.00 +ddmax412 max 0.0 -0.00 -> 0.0 +ddmax413 max 0 -0.0 -> 0 +ddmax414 max 0 -0 -> 0 +ddmax415 max -0.0 -0 -> -0.0 +ddmax416 max -0 -0.100 -> -0 +ddmax417 max -0.100 -0.10 -> -0.100 +ddmax418 max -0.10 -0.1 -> -0.10 +ddmax419 max -0.1 -1.0 -> -0.1 +ddmax420 max -1.0 -1 -> -1.0 +ddmax421 max -1 -1.1 -> -1 +ddmax423 max -1.1 -Inf -> -1.1 +-- same with operands reversed +ddmax431 max 1.1 Inf -> Infinity +ddmax432 max 1 1.1 -> 1.1 +ddmax433 max 1.0 1 -> 1 +ddmax434 max 0.1 1.0 -> 1.0 +ddmax435 max 0.10 0.1 -> 0.1 +ddmax436 max 0.100 0.10 -> 0.10 +ddmax437 max 0 0.10 -> 0.10 +ddmax438 max 0.0 0 -> 0 +ddmax439 max -0 0.0 -> 0.0 +ddmax440 max -0.0 0.0 -> 0.0 +ddmax441 max -0.0 0.00 -> 0.00 +ddmax442 max -0.00 0.0 -> 0.0 +ddmax443 max -0.0 0 -> 0 +ddmax444 max -0 0 -> 0 +ddmax445 max -0 -0.0 -> -0.0 +ddmax446 max -0.100 -0 -> -0 +ddmax447 max -0.10 -0.100 -> -0.100 +ddmax448 max -0.1 -0.10 -> -0.10 +ddmax449 max -1.0 -0.1 -> -0.1 +ddmax450 max -1 -1.0 -> -1.0 +ddmax451 max -1.1 -1 -> -1 +ddmax453 max -Inf -1.1 -> -1.1 +-- largies +ddmax460 max 1000 1E+3 -> 1E+3 +ddmax461 max 1E+3 1000 -> 1E+3 +ddmax462 max 1000 -1E+3 -> 1000 +ddmax463 max 1E+3 -1000 -> 1E+3 +ddmax464 max -1000 1E+3 -> 1E+3 +ddmax465 max -1E+3 1000 -> 1000 +ddmax466 max -1000 -1E+3 -> -1000 +ddmax467 max -1E+3 -1000 -> -1000 + +-- misalignment traps for little-endian +ddmax471 max 1.0 0.1 -> 1.0 +ddmax472 max 0.1 1.0 -> 1.0 +ddmax473 max 10.0 0.1 -> 10.0 +ddmax474 max 0.1 10.0 -> 10.0 +ddmax475 max 100 1.0 -> 100 +ddmax476 max 1.0 100 -> 100 +ddmax477 max 1000 10.0 -> 1000 +ddmax478 max 10.0 1000 -> 1000 +ddmax479 max 10000 100.0 -> 10000 +ddmax480 max 100.0 10000 -> 10000 +ddmax481 max 100000 1000.0 -> 100000 +ddmax482 max 1000.0 100000 -> 100000 +ddmax483 max 1000000 10000.0 -> 1000000 +ddmax484 max 10000.0 1000000 -> 1000000 + +-- subnormals +ddmax510 max 1.00E-383 0 -> 1.00E-383 +ddmax511 max 0.1E-383 0 -> 1E-384 Subnormal +ddmax512 max 0.10E-383 0 -> 1.0E-384 Subnormal +ddmax513 max 0.100E-383 0 -> 1.00E-384 Subnormal +ddmax514 max 0.01E-383 0 -> 1E-385 Subnormal +ddmax515 max 0.999E-383 0 -> 9.99E-384 Subnormal +ddmax516 max 0.099E-383 0 -> 9.9E-385 Subnormal +ddmax517 max 0.009E-383 0 -> 9E-386 Subnormal +ddmax518 max 0.001E-383 0 -> 1E-386 Subnormal +ddmax519 max 0.0009E-383 0 -> 9E-387 Subnormal +ddmax520 max 0.0001E-383 0 -> 1E-387 Subnormal + +ddmax530 max -1.00E-383 0 -> 0 +ddmax531 max -0.1E-383 0 -> 0 +ddmax532 max -0.10E-383 0 -> 0 +ddmax533 max -0.100E-383 0 -> 0 +ddmax534 max -0.01E-383 0 -> 0 +ddmax535 max -0.999E-383 0 -> 0 +ddmax536 max -0.099E-383 0 -> 0 +ddmax537 max -0.009E-383 0 -> 0 +ddmax538 max -0.001E-383 0 -> 0 +ddmax539 max -0.0009E-383 0 -> 0 +ddmax540 max -0.0001E-383 0 -> 0 + +-- Null tests +ddmax900 max 10 # -> NaN Invalid_operation +ddmax901 max # 10 -> NaN Invalid_operation + + + diff --git a/Lib/test/decimaltestdata/ddMaxMag.decTest b/Lib/test/decimaltestdata/ddMaxMag.decTest index ec2b8305411..19c3e9085c2 100644 --- a/Lib/test/decimaltestdata/ddMaxMag.decTest +++ b/Lib/test/decimaltestdata/ddMaxMag.decTest @@ -1,304 +1,304 @@ ------------------------------------------------------------------------- --- ddMaxMag.decTest -- decDouble maxnummag -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmxg001 maxmag -2 -2 -> -2 -ddmxg002 maxmag -2 -1 -> -2 -ddmxg003 maxmag -2 0 -> -2 -ddmxg004 maxmag -2 1 -> -2 -ddmxg005 maxmag -2 2 -> 2 -ddmxg006 maxmag -1 -2 -> -2 -ddmxg007 maxmag -1 -1 -> -1 -ddmxg008 maxmag -1 0 -> -1 -ddmxg009 maxmag -1 1 -> 1 -ddmxg010 maxmag -1 2 -> 2 -ddmxg011 maxmag 0 -2 -> -2 -ddmxg012 maxmag 0 -1 -> -1 -ddmxg013 maxmag 0 0 -> 0 -ddmxg014 maxmag 0 1 -> 1 -ddmxg015 maxmag 0 2 -> 2 -ddmxg016 maxmag 1 -2 -> -2 -ddmxg017 maxmag 1 -1 -> 1 -ddmxg018 maxmag 1 0 -> 1 -ddmxg019 maxmag 1 1 -> 1 -ddmxg020 maxmag 1 2 -> 2 -ddmxg021 maxmag 2 -2 -> 2 -ddmxg022 maxmag 2 -1 -> 2 -ddmxg023 maxmag 2 0 -> 2 -ddmxg025 maxmag 2 1 -> 2 -ddmxg026 maxmag 2 2 -> 2 - --- extended zeros -ddmxg030 maxmag 0 0 -> 0 -ddmxg031 maxmag 0 -0 -> 0 -ddmxg032 maxmag 0 -0.0 -> 0 -ddmxg033 maxmag 0 0.0 -> 0 -ddmxg034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen -ddmxg035 maxmag -0 -0 -> -0 -ddmxg036 maxmag -0 -0.0 -> -0.0 -ddmxg037 maxmag -0 0.0 -> 0.0 -ddmxg038 maxmag 0.0 0 -> 0 -ddmxg039 maxmag 0.0 -0 -> 0.0 -ddmxg040 maxmag 0.0 -0.0 -> 0.0 -ddmxg041 maxmag 0.0 0.0 -> 0.0 -ddmxg042 maxmag -0.0 0 -> 0 -ddmxg043 maxmag -0.0 -0 -> -0.0 -ddmxg044 maxmag -0.0 -0.0 -> -0.0 -ddmxg045 maxmag -0.0 0.0 -> 0.0 - -ddmxg050 maxmag -0E1 0E1 -> 0E+1 -ddmxg051 maxmag -0E2 0E2 -> 0E+2 -ddmxg052 maxmag -0E2 0E1 -> 0E+1 -ddmxg053 maxmag -0E1 0E2 -> 0E+2 -ddmxg054 maxmag 0E1 -0E1 -> 0E+1 -ddmxg055 maxmag 0E2 -0E2 -> 0E+2 -ddmxg056 maxmag 0E2 -0E1 -> 0E+2 -ddmxg057 maxmag 0E1 -0E2 -> 0E+1 - -ddmxg058 maxmag 0E1 0E1 -> 0E+1 -ddmxg059 maxmag 0E2 0E2 -> 0E+2 -ddmxg060 maxmag 0E2 0E1 -> 0E+2 -ddmxg061 maxmag 0E1 0E2 -> 0E+2 -ddmxg062 maxmag -0E1 -0E1 -> -0E+1 -ddmxg063 maxmag -0E2 -0E2 -> -0E+2 -ddmxg064 maxmag -0E2 -0E1 -> -0E+1 -ddmxg065 maxmag -0E1 -0E2 -> -0E+1 - --- Specials -ddmxg090 maxmag Inf -Inf -> Infinity -ddmxg091 maxmag Inf -1000 -> Infinity -ddmxg092 maxmag Inf -1 -> Infinity -ddmxg093 maxmag Inf -0 -> Infinity -ddmxg094 maxmag Inf 0 -> Infinity -ddmxg095 maxmag Inf 1 -> Infinity -ddmxg096 maxmag Inf 1000 -> Infinity -ddmxg097 maxmag Inf Inf -> Infinity -ddmxg098 maxmag -1000 Inf -> Infinity -ddmxg099 maxmag -Inf Inf -> Infinity -ddmxg100 maxmag -1 Inf -> Infinity -ddmxg101 maxmag -0 Inf -> Infinity -ddmxg102 maxmag 0 Inf -> Infinity -ddmxg103 maxmag 1 Inf -> Infinity -ddmxg104 maxmag 1000 Inf -> Infinity -ddmxg105 maxmag Inf Inf -> Infinity - -ddmxg120 maxmag -Inf -Inf -> -Infinity -ddmxg121 maxmag -Inf -1000 -> -Infinity -ddmxg122 maxmag -Inf -1 -> -Infinity -ddmxg123 maxmag -Inf -0 -> -Infinity -ddmxg124 maxmag -Inf 0 -> -Infinity -ddmxg125 maxmag -Inf 1 -> -Infinity -ddmxg126 maxmag -Inf 1000 -> -Infinity -ddmxg127 maxmag -Inf Inf -> Infinity -ddmxg128 maxmag -Inf -Inf -> -Infinity -ddmxg129 maxmag -1000 -Inf -> -Infinity -ddmxg130 maxmag -1 -Inf -> -Infinity -ddmxg131 maxmag -0 -Inf -> -Infinity -ddmxg132 maxmag 0 -Inf -> -Infinity -ddmxg133 maxmag 1 -Inf -> -Infinity -ddmxg134 maxmag 1000 -Inf -> -Infinity -ddmxg135 maxmag Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -ddmxg141 maxmag NaN -Inf -> -Infinity -ddmxg142 maxmag NaN -1000 -> -1000 -ddmxg143 maxmag NaN -1 -> -1 -ddmxg144 maxmag NaN -0 -> -0 -ddmxg145 maxmag NaN 0 -> 0 -ddmxg146 maxmag NaN 1 -> 1 -ddmxg147 maxmag NaN 1000 -> 1000 -ddmxg148 maxmag NaN Inf -> Infinity -ddmxg149 maxmag NaN NaN -> NaN -ddmxg150 maxmag -Inf NaN -> -Infinity -ddmxg151 maxmag -1000 NaN -> -1000 -ddmxg152 maxmag -1 NaN -> -1 -ddmxg153 maxmag -0 NaN -> -0 -ddmxg154 maxmag 0 NaN -> 0 -ddmxg155 maxmag 1 NaN -> 1 -ddmxg156 maxmag 1000 NaN -> 1000 -ddmxg157 maxmag Inf NaN -> Infinity - -ddmxg161 maxmag sNaN -Inf -> NaN Invalid_operation -ddmxg162 maxmag sNaN -1000 -> NaN Invalid_operation -ddmxg163 maxmag sNaN -1 -> NaN Invalid_operation -ddmxg164 maxmag sNaN -0 -> NaN Invalid_operation -ddmxg165 maxmag sNaN 0 -> NaN Invalid_operation -ddmxg166 maxmag sNaN 1 -> NaN Invalid_operation -ddmxg167 maxmag sNaN 1000 -> NaN Invalid_operation -ddmxg168 maxmag sNaN NaN -> NaN Invalid_operation -ddmxg169 maxmag sNaN sNaN -> NaN Invalid_operation -ddmxg170 maxmag NaN sNaN -> NaN Invalid_operation -ddmxg171 maxmag -Inf sNaN -> NaN Invalid_operation -ddmxg172 maxmag -1000 sNaN -> NaN Invalid_operation -ddmxg173 maxmag -1 sNaN -> NaN Invalid_operation -ddmxg174 maxmag -0 sNaN -> NaN Invalid_operation -ddmxg175 maxmag 0 sNaN -> NaN Invalid_operation -ddmxg176 maxmag 1 sNaN -> NaN Invalid_operation -ddmxg177 maxmag 1000 sNaN -> NaN Invalid_operation -ddmxg178 maxmag Inf sNaN -> NaN Invalid_operation -ddmxg179 maxmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmxg181 maxmag NaN9 -Inf -> -Infinity -ddmxg182 maxmag NaN8 9 -> 9 -ddmxg183 maxmag -NaN7 Inf -> Infinity - -ddmxg184 maxmag -NaN1 NaN11 -> -NaN1 -ddmxg185 maxmag NaN2 NaN12 -> NaN2 -ddmxg186 maxmag -NaN13 -NaN7 -> -NaN13 -ddmxg187 maxmag NaN14 -NaN5 -> NaN14 - -ddmxg188 maxmag -Inf NaN4 -> -Infinity -ddmxg189 maxmag -9 -NaN3 -> -9 -ddmxg190 maxmag Inf NaN2 -> Infinity - -ddmxg191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation -ddmxg192 maxmag sNaN98 -1 -> NaN98 Invalid_operation -ddmxg193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation -ddmxg194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation -ddmxg195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation -ddmxg196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation -ddmxg197 maxmag 0 sNaN91 -> NaN91 Invalid_operation -ddmxg198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation -ddmxg199 maxmag NaN sNaN89 -> NaN89 Invalid_operation - --- old rounding checks -ddmxg221 maxmag 12345678000 1 -> 12345678000 -ddmxg222 maxmag 1 12345678000 -> 12345678000 -ddmxg223 maxmag 1234567800 1 -> 1234567800 -ddmxg224 maxmag 1 1234567800 -> 1234567800 -ddmxg225 maxmag 1234567890 1 -> 1234567890 -ddmxg226 maxmag 1 1234567890 -> 1234567890 -ddmxg227 maxmag 1234567891 1 -> 1234567891 -ddmxg228 maxmag 1 1234567891 -> 1234567891 -ddmxg229 maxmag 12345678901 1 -> 12345678901 -ddmxg230 maxmag 1 12345678901 -> 12345678901 -ddmxg231 maxmag 1234567896 1 -> 1234567896 -ddmxg232 maxmag 1 1234567896 -> 1234567896 -ddmxg233 maxmag -1234567891 1 -> -1234567891 -ddmxg234 maxmag 1 -1234567891 -> -1234567891 -ddmxg235 maxmag -12345678901 1 -> -12345678901 -ddmxg236 maxmag 1 -12345678901 -> -12345678901 -ddmxg237 maxmag -1234567896 1 -> -1234567896 -ddmxg238 maxmag 1 -1234567896 -> -1234567896 - --- from examples -ddmxg280 maxmag '3' '2' -> '3' -ddmxg281 maxmag '-10' '3' -> '-10' -ddmxg282 maxmag '1.0' '1' -> '1' -ddmxg283 maxmag '1' '1.0' -> '1' -ddmxg284 maxmag '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -ddmxg401 maxmag Inf 1.1 -> Infinity -ddmxg402 maxmag 1.1 1 -> 1.1 -ddmxg403 maxmag 1 1.0 -> 1 -ddmxg404 maxmag 1.0 0.1 -> 1.0 -ddmxg405 maxmag 0.1 0.10 -> 0.1 -ddmxg406 maxmag 0.10 0.100 -> 0.10 -ddmxg407 maxmag 0.10 0 -> 0.10 -ddmxg408 maxmag 0 0.0 -> 0 -ddmxg409 maxmag 0.0 -0 -> 0.0 -ddmxg410 maxmag 0.0 -0.0 -> 0.0 -ddmxg411 maxmag 0.00 -0.0 -> 0.00 -ddmxg412 maxmag 0.0 -0.00 -> 0.0 -ddmxg413 maxmag 0 -0.0 -> 0 -ddmxg414 maxmag 0 -0 -> 0 -ddmxg415 maxmag -0.0 -0 -> -0.0 -ddmxg416 maxmag -0 -0.100 -> -0.100 -ddmxg417 maxmag -0.100 -0.10 -> -0.100 -ddmxg418 maxmag -0.10 -0.1 -> -0.10 -ddmxg419 maxmag -0.1 -1.0 -> -1.0 -ddmxg420 maxmag -1.0 -1 -> -1.0 -ddmxg421 maxmag -1 -1.1 -> -1.1 -ddmxg423 maxmag -1.1 -Inf -> -Infinity --- same with operands reversed -ddmxg431 maxmag 1.1 Inf -> Infinity -ddmxg432 maxmag 1 1.1 -> 1.1 -ddmxg433 maxmag 1.0 1 -> 1 -ddmxg434 maxmag 0.1 1.0 -> 1.0 -ddmxg435 maxmag 0.10 0.1 -> 0.1 -ddmxg436 maxmag 0.100 0.10 -> 0.10 -ddmxg437 maxmag 0 0.10 -> 0.10 -ddmxg438 maxmag 0.0 0 -> 0 -ddmxg439 maxmag -0 0.0 -> 0.0 -ddmxg440 maxmag -0.0 0.0 -> 0.0 -ddmxg441 maxmag -0.0 0.00 -> 0.00 -ddmxg442 maxmag -0.00 0.0 -> 0.0 -ddmxg443 maxmag -0.0 0 -> 0 -ddmxg444 maxmag -0 0 -> 0 -ddmxg445 maxmag -0 -0.0 -> -0.0 -ddmxg446 maxmag -0.100 -0 -> -0.100 -ddmxg447 maxmag -0.10 -0.100 -> -0.100 -ddmxg448 maxmag -0.1 -0.10 -> -0.10 -ddmxg449 maxmag -1.0 -0.1 -> -1.0 -ddmxg450 maxmag -1 -1.0 -> -1.0 -ddmxg451 maxmag -1.1 -1 -> -1.1 -ddmxg453 maxmag -Inf -1.1 -> -Infinity --- largies -ddmxg460 maxmag 1000 1E+3 -> 1E+3 -ddmxg461 maxmag 1E+3 1000 -> 1E+3 -ddmxg462 maxmag 1000 -1E+3 -> 1000 -ddmxg463 maxmag 1E+3 -1000 -> 1E+3 -ddmxg464 maxmag -1000 1E+3 -> 1E+3 -ddmxg465 maxmag -1E+3 1000 -> 1000 -ddmxg466 maxmag -1000 -1E+3 -> -1000 -ddmxg467 maxmag -1E+3 -1000 -> -1000 - --- subnormals -ddmxg510 maxmag 1.00E-383 0 -> 1.00E-383 -ddmxg511 maxmag 0.1E-383 0 -> 1E-384 Subnormal -ddmxg512 maxmag 0.10E-383 0 -> 1.0E-384 Subnormal -ddmxg513 maxmag 0.100E-383 0 -> 1.00E-384 Subnormal -ddmxg514 maxmag 0.01E-383 0 -> 1E-385 Subnormal -ddmxg515 maxmag 0.999E-383 0 -> 9.99E-384 Subnormal -ddmxg516 maxmag 0.099E-383 0 -> 9.9E-385 Subnormal -ddmxg517 maxmag 0.009E-383 0 -> 9E-386 Subnormal -ddmxg518 maxmag 0.001E-383 0 -> 1E-386 Subnormal -ddmxg519 maxmag 0.0009E-383 0 -> 9E-387 Subnormal -ddmxg520 maxmag 0.0001E-383 0 -> 1E-387 Subnormal - -ddmxg530 maxmag -1.00E-383 0 -> -1.00E-383 -ddmxg531 maxmag -0.1E-383 0 -> -1E-384 Subnormal -ddmxg532 maxmag -0.10E-383 0 -> -1.0E-384 Subnormal -ddmxg533 maxmag -0.100E-383 0 -> -1.00E-384 Subnormal -ddmxg534 maxmag -0.01E-383 0 -> -1E-385 Subnormal -ddmxg535 maxmag -0.999E-383 0 -> -9.99E-384 Subnormal -ddmxg536 maxmag -0.099E-383 0 -> -9.9E-385 Subnormal -ddmxg537 maxmag -0.009E-383 0 -> -9E-386 Subnormal -ddmxg538 maxmag -0.001E-383 0 -> -1E-386 Subnormal -ddmxg539 maxmag -0.0009E-383 0 -> -9E-387 Subnormal -ddmxg540 maxmag -0.0001E-383 0 -> -1E-387 Subnormal - --- Null tests -ddmxg900 maxmag 10 # -> NaN Invalid_operation -ddmxg901 maxmag # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddMaxMag.decTest -- decDouble maxnummag -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmxg001 maxmag -2 -2 -> -2 +ddmxg002 maxmag -2 -1 -> -2 +ddmxg003 maxmag -2 0 -> -2 +ddmxg004 maxmag -2 1 -> -2 +ddmxg005 maxmag -2 2 -> 2 +ddmxg006 maxmag -1 -2 -> -2 +ddmxg007 maxmag -1 -1 -> -1 +ddmxg008 maxmag -1 0 -> -1 +ddmxg009 maxmag -1 1 -> 1 +ddmxg010 maxmag -1 2 -> 2 +ddmxg011 maxmag 0 -2 -> -2 +ddmxg012 maxmag 0 -1 -> -1 +ddmxg013 maxmag 0 0 -> 0 +ddmxg014 maxmag 0 1 -> 1 +ddmxg015 maxmag 0 2 -> 2 +ddmxg016 maxmag 1 -2 -> -2 +ddmxg017 maxmag 1 -1 -> 1 +ddmxg018 maxmag 1 0 -> 1 +ddmxg019 maxmag 1 1 -> 1 +ddmxg020 maxmag 1 2 -> 2 +ddmxg021 maxmag 2 -2 -> 2 +ddmxg022 maxmag 2 -1 -> 2 +ddmxg023 maxmag 2 0 -> 2 +ddmxg025 maxmag 2 1 -> 2 +ddmxg026 maxmag 2 2 -> 2 + +-- extended zeros +ddmxg030 maxmag 0 0 -> 0 +ddmxg031 maxmag 0 -0 -> 0 +ddmxg032 maxmag 0 -0.0 -> 0 +ddmxg033 maxmag 0 0.0 -> 0 +ddmxg034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen +ddmxg035 maxmag -0 -0 -> -0 +ddmxg036 maxmag -0 -0.0 -> -0.0 +ddmxg037 maxmag -0 0.0 -> 0.0 +ddmxg038 maxmag 0.0 0 -> 0 +ddmxg039 maxmag 0.0 -0 -> 0.0 +ddmxg040 maxmag 0.0 -0.0 -> 0.0 +ddmxg041 maxmag 0.0 0.0 -> 0.0 +ddmxg042 maxmag -0.0 0 -> 0 +ddmxg043 maxmag -0.0 -0 -> -0.0 +ddmxg044 maxmag -0.0 -0.0 -> -0.0 +ddmxg045 maxmag -0.0 0.0 -> 0.0 + +ddmxg050 maxmag -0E1 0E1 -> 0E+1 +ddmxg051 maxmag -0E2 0E2 -> 0E+2 +ddmxg052 maxmag -0E2 0E1 -> 0E+1 +ddmxg053 maxmag -0E1 0E2 -> 0E+2 +ddmxg054 maxmag 0E1 -0E1 -> 0E+1 +ddmxg055 maxmag 0E2 -0E2 -> 0E+2 +ddmxg056 maxmag 0E2 -0E1 -> 0E+2 +ddmxg057 maxmag 0E1 -0E2 -> 0E+1 + +ddmxg058 maxmag 0E1 0E1 -> 0E+1 +ddmxg059 maxmag 0E2 0E2 -> 0E+2 +ddmxg060 maxmag 0E2 0E1 -> 0E+2 +ddmxg061 maxmag 0E1 0E2 -> 0E+2 +ddmxg062 maxmag -0E1 -0E1 -> -0E+1 +ddmxg063 maxmag -0E2 -0E2 -> -0E+2 +ddmxg064 maxmag -0E2 -0E1 -> -0E+1 +ddmxg065 maxmag -0E1 -0E2 -> -0E+1 + +-- Specials +ddmxg090 maxmag Inf -Inf -> Infinity +ddmxg091 maxmag Inf -1000 -> Infinity +ddmxg092 maxmag Inf -1 -> Infinity +ddmxg093 maxmag Inf -0 -> Infinity +ddmxg094 maxmag Inf 0 -> Infinity +ddmxg095 maxmag Inf 1 -> Infinity +ddmxg096 maxmag Inf 1000 -> Infinity +ddmxg097 maxmag Inf Inf -> Infinity +ddmxg098 maxmag -1000 Inf -> Infinity +ddmxg099 maxmag -Inf Inf -> Infinity +ddmxg100 maxmag -1 Inf -> Infinity +ddmxg101 maxmag -0 Inf -> Infinity +ddmxg102 maxmag 0 Inf -> Infinity +ddmxg103 maxmag 1 Inf -> Infinity +ddmxg104 maxmag 1000 Inf -> Infinity +ddmxg105 maxmag Inf Inf -> Infinity + +ddmxg120 maxmag -Inf -Inf -> -Infinity +ddmxg121 maxmag -Inf -1000 -> -Infinity +ddmxg122 maxmag -Inf -1 -> -Infinity +ddmxg123 maxmag -Inf -0 -> -Infinity +ddmxg124 maxmag -Inf 0 -> -Infinity +ddmxg125 maxmag -Inf 1 -> -Infinity +ddmxg126 maxmag -Inf 1000 -> -Infinity +ddmxg127 maxmag -Inf Inf -> Infinity +ddmxg128 maxmag -Inf -Inf -> -Infinity +ddmxg129 maxmag -1000 -Inf -> -Infinity +ddmxg130 maxmag -1 -Inf -> -Infinity +ddmxg131 maxmag -0 -Inf -> -Infinity +ddmxg132 maxmag 0 -Inf -> -Infinity +ddmxg133 maxmag 1 -Inf -> -Infinity +ddmxg134 maxmag 1000 -Inf -> -Infinity +ddmxg135 maxmag Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +ddmxg141 maxmag NaN -Inf -> -Infinity +ddmxg142 maxmag NaN -1000 -> -1000 +ddmxg143 maxmag NaN -1 -> -1 +ddmxg144 maxmag NaN -0 -> -0 +ddmxg145 maxmag NaN 0 -> 0 +ddmxg146 maxmag NaN 1 -> 1 +ddmxg147 maxmag NaN 1000 -> 1000 +ddmxg148 maxmag NaN Inf -> Infinity +ddmxg149 maxmag NaN NaN -> NaN +ddmxg150 maxmag -Inf NaN -> -Infinity +ddmxg151 maxmag -1000 NaN -> -1000 +ddmxg152 maxmag -1 NaN -> -1 +ddmxg153 maxmag -0 NaN -> -0 +ddmxg154 maxmag 0 NaN -> 0 +ddmxg155 maxmag 1 NaN -> 1 +ddmxg156 maxmag 1000 NaN -> 1000 +ddmxg157 maxmag Inf NaN -> Infinity + +ddmxg161 maxmag sNaN -Inf -> NaN Invalid_operation +ddmxg162 maxmag sNaN -1000 -> NaN Invalid_operation +ddmxg163 maxmag sNaN -1 -> NaN Invalid_operation +ddmxg164 maxmag sNaN -0 -> NaN Invalid_operation +ddmxg165 maxmag sNaN 0 -> NaN Invalid_operation +ddmxg166 maxmag sNaN 1 -> NaN Invalid_operation +ddmxg167 maxmag sNaN 1000 -> NaN Invalid_operation +ddmxg168 maxmag sNaN NaN -> NaN Invalid_operation +ddmxg169 maxmag sNaN sNaN -> NaN Invalid_operation +ddmxg170 maxmag NaN sNaN -> NaN Invalid_operation +ddmxg171 maxmag -Inf sNaN -> NaN Invalid_operation +ddmxg172 maxmag -1000 sNaN -> NaN Invalid_operation +ddmxg173 maxmag -1 sNaN -> NaN Invalid_operation +ddmxg174 maxmag -0 sNaN -> NaN Invalid_operation +ddmxg175 maxmag 0 sNaN -> NaN Invalid_operation +ddmxg176 maxmag 1 sNaN -> NaN Invalid_operation +ddmxg177 maxmag 1000 sNaN -> NaN Invalid_operation +ddmxg178 maxmag Inf sNaN -> NaN Invalid_operation +ddmxg179 maxmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmxg181 maxmag NaN9 -Inf -> -Infinity +ddmxg182 maxmag NaN8 9 -> 9 +ddmxg183 maxmag -NaN7 Inf -> Infinity + +ddmxg184 maxmag -NaN1 NaN11 -> -NaN1 +ddmxg185 maxmag NaN2 NaN12 -> NaN2 +ddmxg186 maxmag -NaN13 -NaN7 -> -NaN13 +ddmxg187 maxmag NaN14 -NaN5 -> NaN14 + +ddmxg188 maxmag -Inf NaN4 -> -Infinity +ddmxg189 maxmag -9 -NaN3 -> -9 +ddmxg190 maxmag Inf NaN2 -> Infinity + +ddmxg191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation +ddmxg192 maxmag sNaN98 -1 -> NaN98 Invalid_operation +ddmxg193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation +ddmxg194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation +ddmxg195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation +ddmxg196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation +ddmxg197 maxmag 0 sNaN91 -> NaN91 Invalid_operation +ddmxg198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation +ddmxg199 maxmag NaN sNaN89 -> NaN89 Invalid_operation + +-- old rounding checks +ddmxg221 maxmag 12345678000 1 -> 12345678000 +ddmxg222 maxmag 1 12345678000 -> 12345678000 +ddmxg223 maxmag 1234567800 1 -> 1234567800 +ddmxg224 maxmag 1 1234567800 -> 1234567800 +ddmxg225 maxmag 1234567890 1 -> 1234567890 +ddmxg226 maxmag 1 1234567890 -> 1234567890 +ddmxg227 maxmag 1234567891 1 -> 1234567891 +ddmxg228 maxmag 1 1234567891 -> 1234567891 +ddmxg229 maxmag 12345678901 1 -> 12345678901 +ddmxg230 maxmag 1 12345678901 -> 12345678901 +ddmxg231 maxmag 1234567896 1 -> 1234567896 +ddmxg232 maxmag 1 1234567896 -> 1234567896 +ddmxg233 maxmag -1234567891 1 -> -1234567891 +ddmxg234 maxmag 1 -1234567891 -> -1234567891 +ddmxg235 maxmag -12345678901 1 -> -12345678901 +ddmxg236 maxmag 1 -12345678901 -> -12345678901 +ddmxg237 maxmag -1234567896 1 -> -1234567896 +ddmxg238 maxmag 1 -1234567896 -> -1234567896 + +-- from examples +ddmxg280 maxmag '3' '2' -> '3' +ddmxg281 maxmag '-10' '3' -> '-10' +ddmxg282 maxmag '1.0' '1' -> '1' +ddmxg283 maxmag '1' '1.0' -> '1' +ddmxg284 maxmag '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +ddmxg401 maxmag Inf 1.1 -> Infinity +ddmxg402 maxmag 1.1 1 -> 1.1 +ddmxg403 maxmag 1 1.0 -> 1 +ddmxg404 maxmag 1.0 0.1 -> 1.0 +ddmxg405 maxmag 0.1 0.10 -> 0.1 +ddmxg406 maxmag 0.10 0.100 -> 0.10 +ddmxg407 maxmag 0.10 0 -> 0.10 +ddmxg408 maxmag 0 0.0 -> 0 +ddmxg409 maxmag 0.0 -0 -> 0.0 +ddmxg410 maxmag 0.0 -0.0 -> 0.0 +ddmxg411 maxmag 0.00 -0.0 -> 0.00 +ddmxg412 maxmag 0.0 -0.00 -> 0.0 +ddmxg413 maxmag 0 -0.0 -> 0 +ddmxg414 maxmag 0 -0 -> 0 +ddmxg415 maxmag -0.0 -0 -> -0.0 +ddmxg416 maxmag -0 -0.100 -> -0.100 +ddmxg417 maxmag -0.100 -0.10 -> -0.100 +ddmxg418 maxmag -0.10 -0.1 -> -0.10 +ddmxg419 maxmag -0.1 -1.0 -> -1.0 +ddmxg420 maxmag -1.0 -1 -> -1.0 +ddmxg421 maxmag -1 -1.1 -> -1.1 +ddmxg423 maxmag -1.1 -Inf -> -Infinity +-- same with operands reversed +ddmxg431 maxmag 1.1 Inf -> Infinity +ddmxg432 maxmag 1 1.1 -> 1.1 +ddmxg433 maxmag 1.0 1 -> 1 +ddmxg434 maxmag 0.1 1.0 -> 1.0 +ddmxg435 maxmag 0.10 0.1 -> 0.1 +ddmxg436 maxmag 0.100 0.10 -> 0.10 +ddmxg437 maxmag 0 0.10 -> 0.10 +ddmxg438 maxmag 0.0 0 -> 0 +ddmxg439 maxmag -0 0.0 -> 0.0 +ddmxg440 maxmag -0.0 0.0 -> 0.0 +ddmxg441 maxmag -0.0 0.00 -> 0.00 +ddmxg442 maxmag -0.00 0.0 -> 0.0 +ddmxg443 maxmag -0.0 0 -> 0 +ddmxg444 maxmag -0 0 -> 0 +ddmxg445 maxmag -0 -0.0 -> -0.0 +ddmxg446 maxmag -0.100 -0 -> -0.100 +ddmxg447 maxmag -0.10 -0.100 -> -0.100 +ddmxg448 maxmag -0.1 -0.10 -> -0.10 +ddmxg449 maxmag -1.0 -0.1 -> -1.0 +ddmxg450 maxmag -1 -1.0 -> -1.0 +ddmxg451 maxmag -1.1 -1 -> -1.1 +ddmxg453 maxmag -Inf -1.1 -> -Infinity +-- largies +ddmxg460 maxmag 1000 1E+3 -> 1E+3 +ddmxg461 maxmag 1E+3 1000 -> 1E+3 +ddmxg462 maxmag 1000 -1E+3 -> 1000 +ddmxg463 maxmag 1E+3 -1000 -> 1E+3 +ddmxg464 maxmag -1000 1E+3 -> 1E+3 +ddmxg465 maxmag -1E+3 1000 -> 1000 +ddmxg466 maxmag -1000 -1E+3 -> -1000 +ddmxg467 maxmag -1E+3 -1000 -> -1000 + +-- subnormals +ddmxg510 maxmag 1.00E-383 0 -> 1.00E-383 +ddmxg511 maxmag 0.1E-383 0 -> 1E-384 Subnormal +ddmxg512 maxmag 0.10E-383 0 -> 1.0E-384 Subnormal +ddmxg513 maxmag 0.100E-383 0 -> 1.00E-384 Subnormal +ddmxg514 maxmag 0.01E-383 0 -> 1E-385 Subnormal +ddmxg515 maxmag 0.999E-383 0 -> 9.99E-384 Subnormal +ddmxg516 maxmag 0.099E-383 0 -> 9.9E-385 Subnormal +ddmxg517 maxmag 0.009E-383 0 -> 9E-386 Subnormal +ddmxg518 maxmag 0.001E-383 0 -> 1E-386 Subnormal +ddmxg519 maxmag 0.0009E-383 0 -> 9E-387 Subnormal +ddmxg520 maxmag 0.0001E-383 0 -> 1E-387 Subnormal + +ddmxg530 maxmag -1.00E-383 0 -> -1.00E-383 +ddmxg531 maxmag -0.1E-383 0 -> -1E-384 Subnormal +ddmxg532 maxmag -0.10E-383 0 -> -1.0E-384 Subnormal +ddmxg533 maxmag -0.100E-383 0 -> -1.00E-384 Subnormal +ddmxg534 maxmag -0.01E-383 0 -> -1E-385 Subnormal +ddmxg535 maxmag -0.999E-383 0 -> -9.99E-384 Subnormal +ddmxg536 maxmag -0.099E-383 0 -> -9.9E-385 Subnormal +ddmxg537 maxmag -0.009E-383 0 -> -9E-386 Subnormal +ddmxg538 maxmag -0.001E-383 0 -> -1E-386 Subnormal +ddmxg539 maxmag -0.0009E-383 0 -> -9E-387 Subnormal +ddmxg540 maxmag -0.0001E-383 0 -> -1E-387 Subnormal + +-- Null tests +ddmxg900 maxmag 10 # -> NaN Invalid_operation +ddmxg901 maxmag # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddMin.decTest b/Lib/test/decimaltestdata/ddMin.decTest index 9ce42824638..eb942ff1598 100644 --- a/Lib/test/decimaltestdata/ddMin.decTest +++ b/Lib/test/decimaltestdata/ddMin.decTest @@ -1,309 +1,309 @@ ------------------------------------------------------------------------- --- ddMin.decTest -- decDouble minnum -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmin001 min -2 -2 -> -2 -ddmin002 min -2 -1 -> -2 -ddmin003 min -2 0 -> -2 -ddmin004 min -2 1 -> -2 -ddmin005 min -2 2 -> -2 -ddmin006 min -1 -2 -> -2 -ddmin007 min -1 -1 -> -1 -ddmin008 min -1 0 -> -1 -ddmin009 min -1 1 -> -1 -ddmin010 min -1 2 -> -1 -ddmin011 min 0 -2 -> -2 -ddmin012 min 0 -1 -> -1 -ddmin013 min 0 0 -> 0 -ddmin014 min 0 1 -> 0 -ddmin015 min 0 2 -> 0 -ddmin016 min 1 -2 -> -2 -ddmin017 min 1 -1 -> -1 -ddmin018 min 1 0 -> 0 -ddmin019 min 1 1 -> 1 -ddmin020 min 1 2 -> 1 -ddmin021 min 2 -2 -> -2 -ddmin022 min 2 -1 -> -1 -ddmin023 min 2 0 -> 0 -ddmin025 min 2 1 -> 1 -ddmin026 min 2 2 -> 2 - --- extended zeros -ddmin030 min 0 0 -> 0 -ddmin031 min 0 -0 -> -0 -ddmin032 min 0 -0.0 -> -0.0 -ddmin033 min 0 0.0 -> 0.0 -ddmin034 min -0 0 -> -0 -ddmin035 min -0 -0 -> -0 -ddmin036 min -0 -0.0 -> -0 -ddmin037 min -0 0.0 -> -0 -ddmin038 min 0.0 0 -> 0.0 -ddmin039 min 0.0 -0 -> -0 -ddmin040 min 0.0 -0.0 -> -0.0 -ddmin041 min 0.0 0.0 -> 0.0 -ddmin042 min -0.0 0 -> -0.0 -ddmin043 min -0.0 -0 -> -0 -ddmin044 min -0.0 -0.0 -> -0.0 -ddmin045 min -0.0 0.0 -> -0.0 - -ddmin046 min 0E1 -0E1 -> -0E+1 -ddmin047 min -0E1 0E2 -> -0E+1 -ddmin048 min 0E2 0E1 -> 0E+1 -ddmin049 min 0E1 0E2 -> 0E+1 -ddmin050 min -0E3 -0E2 -> -0E+3 -ddmin051 min -0E2 -0E3 -> -0E+3 - --- Specials -ddmin090 min Inf -Inf -> -Infinity -ddmin091 min Inf -1000 -> -1000 -ddmin092 min Inf -1 -> -1 -ddmin093 min Inf -0 -> -0 -ddmin094 min Inf 0 -> 0 -ddmin095 min Inf 1 -> 1 -ddmin096 min Inf 1000 -> 1000 -ddmin097 min Inf Inf -> Infinity -ddmin098 min -1000 Inf -> -1000 -ddmin099 min -Inf Inf -> -Infinity -ddmin100 min -1 Inf -> -1 -ddmin101 min -0 Inf -> -0 -ddmin102 min 0 Inf -> 0 -ddmin103 min 1 Inf -> 1 -ddmin104 min 1000 Inf -> 1000 -ddmin105 min Inf Inf -> Infinity - -ddmin120 min -Inf -Inf -> -Infinity -ddmin121 min -Inf -1000 -> -Infinity -ddmin122 min -Inf -1 -> -Infinity -ddmin123 min -Inf -0 -> -Infinity -ddmin124 min -Inf 0 -> -Infinity -ddmin125 min -Inf 1 -> -Infinity -ddmin126 min -Inf 1000 -> -Infinity -ddmin127 min -Inf Inf -> -Infinity -ddmin128 min -Inf -Inf -> -Infinity -ddmin129 min -1000 -Inf -> -Infinity -ddmin130 min -1 -Inf -> -Infinity -ddmin131 min -0 -Inf -> -Infinity -ddmin132 min 0 -Inf -> -Infinity -ddmin133 min 1 -Inf -> -Infinity -ddmin134 min 1000 -Inf -> -Infinity -ddmin135 min Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -ddmin141 min NaN -Inf -> -Infinity -ddmin142 min NaN -1000 -> -1000 -ddmin143 min NaN -1 -> -1 -ddmin144 min NaN -0 -> -0 -ddmin145 min NaN 0 -> 0 -ddmin146 min NaN 1 -> 1 -ddmin147 min NaN 1000 -> 1000 -ddmin148 min NaN Inf -> Infinity -ddmin149 min NaN NaN -> NaN -ddmin150 min -Inf NaN -> -Infinity -ddmin151 min -1000 NaN -> -1000 -ddmin152 min -1 -NaN -> -1 -ddmin153 min -0 NaN -> -0 -ddmin154 min 0 -NaN -> 0 -ddmin155 min 1 NaN -> 1 -ddmin156 min 1000 NaN -> 1000 -ddmin157 min Inf NaN -> Infinity - -ddmin161 min sNaN -Inf -> NaN Invalid_operation -ddmin162 min sNaN -1000 -> NaN Invalid_operation -ddmin163 min sNaN -1 -> NaN Invalid_operation -ddmin164 min sNaN -0 -> NaN Invalid_operation -ddmin165 min -sNaN 0 -> -NaN Invalid_operation -ddmin166 min -sNaN 1 -> -NaN Invalid_operation -ddmin167 min sNaN 1000 -> NaN Invalid_operation -ddmin168 min sNaN NaN -> NaN Invalid_operation -ddmin169 min sNaN sNaN -> NaN Invalid_operation -ddmin170 min NaN sNaN -> NaN Invalid_operation -ddmin171 min -Inf sNaN -> NaN Invalid_operation -ddmin172 min -1000 sNaN -> NaN Invalid_operation -ddmin173 min -1 sNaN -> NaN Invalid_operation -ddmin174 min -0 sNaN -> NaN Invalid_operation -ddmin175 min 0 sNaN -> NaN Invalid_operation -ddmin176 min 1 sNaN -> NaN Invalid_operation -ddmin177 min 1000 sNaN -> NaN Invalid_operation -ddmin178 min Inf sNaN -> NaN Invalid_operation -ddmin179 min NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmin181 min NaN9 -Inf -> -Infinity -ddmin182 min -NaN8 9990 -> 9990 -ddmin183 min NaN71 Inf -> Infinity - -ddmin184 min NaN1 NaN54 -> NaN1 -ddmin185 min NaN22 -NaN53 -> NaN22 -ddmin186 min -NaN3 NaN6 -> -NaN3 -ddmin187 min -NaN44 NaN7 -> -NaN44 - -ddmin188 min -Inf NaN41 -> -Infinity -ddmin189 min -9999 -NaN33 -> -9999 -ddmin190 min Inf NaN2 -> Infinity - -ddmin191 min sNaN99 -Inf -> NaN99 Invalid_operation -ddmin192 min sNaN98 -11 -> NaN98 Invalid_operation -ddmin193 min -sNaN97 NaN8 -> -NaN97 Invalid_operation -ddmin194 min sNaN69 sNaN94 -> NaN69 Invalid_operation -ddmin195 min NaN95 sNaN93 -> NaN93 Invalid_operation -ddmin196 min -Inf sNaN92 -> NaN92 Invalid_operation -ddmin197 min 088 sNaN91 -> NaN91 Invalid_operation -ddmin198 min Inf -sNaN90 -> -NaN90 Invalid_operation -ddmin199 min NaN sNaN86 -> NaN86 Invalid_operation - --- old rounding checks -ddmin221 min -12345678000 1 -> -12345678000 -ddmin222 min 1 -12345678000 -> -12345678000 -ddmin223 min -1234567800 1 -> -1234567800 -ddmin224 min 1 -1234567800 -> -1234567800 -ddmin225 min -1234567890 1 -> -1234567890 -ddmin226 min 1 -1234567890 -> -1234567890 -ddmin227 min -1234567891 1 -> -1234567891 -ddmin228 min 1 -1234567891 -> -1234567891 -ddmin229 min -12345678901 1 -> -12345678901 -ddmin230 min 1 -12345678901 -> -12345678901 -ddmin231 min -1234567896 1 -> -1234567896 -ddmin232 min 1 -1234567896 -> -1234567896 -ddmin233 min 1234567891 1 -> 1 -ddmin234 min 1 1234567891 -> 1 -ddmin235 min 12345678901 1 -> 1 -ddmin236 min 1 12345678901 -> 1 -ddmin237 min 1234567896 1 -> 1 -ddmin238 min 1 1234567896 -> 1 - --- from examples -ddmin280 min '3' '2' -> '2' -ddmin281 min '-10' '3' -> '-10' -ddmin282 min '1.0' '1' -> '1.0' -ddmin283 min '1' '1.0' -> '1.0' -ddmin284 min '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -ddmin401 min Inf 1.1 -> 1.1 -ddmin402 min 1.1 1 -> 1 -ddmin403 min 1 1.0 -> 1.0 -ddmin404 min 1.0 0.1 -> 0.1 -ddmin405 min 0.1 0.10 -> 0.10 -ddmin406 min 0.10 0.100 -> 0.100 -ddmin407 min 0.10 0 -> 0 -ddmin408 min 0 0.0 -> 0.0 -ddmin409 min 0.0 -0 -> -0 -ddmin410 min 0.0 -0.0 -> -0.0 -ddmin411 min 0.00 -0.0 -> -0.0 -ddmin412 min 0.0 -0.00 -> -0.00 -ddmin413 min 0 -0.0 -> -0.0 -ddmin414 min 0 -0 -> -0 -ddmin415 min -0.0 -0 -> -0 -ddmin416 min -0 -0.100 -> -0.100 -ddmin417 min -0.100 -0.10 -> -0.10 -ddmin418 min -0.10 -0.1 -> -0.1 -ddmin419 min -0.1 -1.0 -> -1.0 -ddmin420 min -1.0 -1 -> -1 -ddmin421 min -1 -1.1 -> -1.1 -ddmin423 min -1.1 -Inf -> -Infinity --- same with operands reversed -ddmin431 min 1.1 Inf -> 1.1 -ddmin432 min 1 1.1 -> 1 -ddmin433 min 1.0 1 -> 1.0 -ddmin434 min 0.1 1.0 -> 0.1 -ddmin435 min 0.10 0.1 -> 0.10 -ddmin436 min 0.100 0.10 -> 0.100 -ddmin437 min 0 0.10 -> 0 -ddmin438 min 0.0 0 -> 0.0 -ddmin439 min -0 0.0 -> -0 -ddmin440 min -0.0 0.0 -> -0.0 -ddmin441 min -0.0 0.00 -> -0.0 -ddmin442 min -0.00 0.0 -> -0.00 -ddmin443 min -0.0 0 -> -0.0 -ddmin444 min -0 0 -> -0 -ddmin445 min -0 -0.0 -> -0 -ddmin446 min -0.100 -0 -> -0.100 -ddmin447 min -0.10 -0.100 -> -0.10 -ddmin448 min -0.1 -0.10 -> -0.1 -ddmin449 min -1.0 -0.1 -> -1.0 -ddmin450 min -1 -1.0 -> -1 -ddmin451 min -1.1 -1 -> -1.1 -ddmin453 min -Inf -1.1 -> -Infinity --- largies -ddmin460 min 1000 1E+3 -> 1000 -ddmin461 min 1E+3 1000 -> 1000 -ddmin462 min 1000 -1E+3 -> -1E+3 -ddmin463 min 1E+3 -384 -> -384 -ddmin464 min -384 1E+3 -> -384 -ddmin465 min -1E+3 1000 -> -1E+3 -ddmin466 min -384 -1E+3 -> -1E+3 -ddmin467 min -1E+3 -384 -> -1E+3 - --- misalignment traps for little-endian -ddmin471 min 1.0 0.1 -> 0.1 -ddmin472 min 0.1 1.0 -> 0.1 -ddmin473 min 10.0 0.1 -> 0.1 -ddmin474 min 0.1 10.0 -> 0.1 -ddmin475 min 100 1.0 -> 1.0 -ddmin476 min 1.0 100 -> 1.0 -ddmin477 min 1000 10.0 -> 10.0 -ddmin478 min 10.0 1000 -> 10.0 -ddmin479 min 10000 100.0 -> 100.0 -ddmin480 min 100.0 10000 -> 100.0 -ddmin481 min 100000 1000.0 -> 1000.0 -ddmin482 min 1000.0 100000 -> 1000.0 -ddmin483 min 1000000 10000.0 -> 10000.0 -ddmin484 min 10000.0 1000000 -> 10000.0 - --- subnormals -ddmin510 min 1.00E-383 0 -> 0 -ddmin511 min 0.1E-383 0 -> 0 -ddmin512 min 0.10E-383 0 -> 0 -ddmin513 min 0.100E-383 0 -> 0 -ddmin514 min 0.01E-383 0 -> 0 -ddmin515 min 0.999E-383 0 -> 0 -ddmin516 min 0.099E-383 0 -> 0 -ddmin517 min 0.009E-383 0 -> 0 -ddmin518 min 0.001E-383 0 -> 0 -ddmin519 min 0.0009E-383 0 -> 0 -ddmin520 min 0.0001E-383 0 -> 0 - -ddmin530 min -1.00E-383 0 -> -1.00E-383 -ddmin531 min -0.1E-383 0 -> -1E-384 Subnormal -ddmin532 min -0.10E-383 0 -> -1.0E-384 Subnormal -ddmin533 min -0.100E-383 0 -> -1.00E-384 Subnormal -ddmin534 min -0.01E-383 0 -> -1E-385 Subnormal -ddmin535 min -0.999E-383 0 -> -9.99E-384 Subnormal -ddmin536 min -0.099E-383 0 -> -9.9E-385 Subnormal -ddmin537 min -0.009E-383 0 -> -9E-386 Subnormal -ddmin538 min -0.001E-383 0 -> -1E-386 Subnormal -ddmin539 min -0.0009E-383 0 -> -9E-387 Subnormal -ddmin540 min -0.0001E-383 0 -> -1E-387 Subnormal - - --- Null tests -ddmin900 min 10 # -> NaN Invalid_operation -ddmin901 min # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddMin.decTest -- decDouble minnum -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmin001 min -2 -2 -> -2 +ddmin002 min -2 -1 -> -2 +ddmin003 min -2 0 -> -2 +ddmin004 min -2 1 -> -2 +ddmin005 min -2 2 -> -2 +ddmin006 min -1 -2 -> -2 +ddmin007 min -1 -1 -> -1 +ddmin008 min -1 0 -> -1 +ddmin009 min -1 1 -> -1 +ddmin010 min -1 2 -> -1 +ddmin011 min 0 -2 -> -2 +ddmin012 min 0 -1 -> -1 +ddmin013 min 0 0 -> 0 +ddmin014 min 0 1 -> 0 +ddmin015 min 0 2 -> 0 +ddmin016 min 1 -2 -> -2 +ddmin017 min 1 -1 -> -1 +ddmin018 min 1 0 -> 0 +ddmin019 min 1 1 -> 1 +ddmin020 min 1 2 -> 1 +ddmin021 min 2 -2 -> -2 +ddmin022 min 2 -1 -> -1 +ddmin023 min 2 0 -> 0 +ddmin025 min 2 1 -> 1 +ddmin026 min 2 2 -> 2 + +-- extended zeros +ddmin030 min 0 0 -> 0 +ddmin031 min 0 -0 -> -0 +ddmin032 min 0 -0.0 -> -0.0 +ddmin033 min 0 0.0 -> 0.0 +ddmin034 min -0 0 -> -0 +ddmin035 min -0 -0 -> -0 +ddmin036 min -0 -0.0 -> -0 +ddmin037 min -0 0.0 -> -0 +ddmin038 min 0.0 0 -> 0.0 +ddmin039 min 0.0 -0 -> -0 +ddmin040 min 0.0 -0.0 -> -0.0 +ddmin041 min 0.0 0.0 -> 0.0 +ddmin042 min -0.0 0 -> -0.0 +ddmin043 min -0.0 -0 -> -0 +ddmin044 min -0.0 -0.0 -> -0.0 +ddmin045 min -0.0 0.0 -> -0.0 + +ddmin046 min 0E1 -0E1 -> -0E+1 +ddmin047 min -0E1 0E2 -> -0E+1 +ddmin048 min 0E2 0E1 -> 0E+1 +ddmin049 min 0E1 0E2 -> 0E+1 +ddmin050 min -0E3 -0E2 -> -0E+3 +ddmin051 min -0E2 -0E3 -> -0E+3 + +-- Specials +ddmin090 min Inf -Inf -> -Infinity +ddmin091 min Inf -1000 -> -1000 +ddmin092 min Inf -1 -> -1 +ddmin093 min Inf -0 -> -0 +ddmin094 min Inf 0 -> 0 +ddmin095 min Inf 1 -> 1 +ddmin096 min Inf 1000 -> 1000 +ddmin097 min Inf Inf -> Infinity +ddmin098 min -1000 Inf -> -1000 +ddmin099 min -Inf Inf -> -Infinity +ddmin100 min -1 Inf -> -1 +ddmin101 min -0 Inf -> -0 +ddmin102 min 0 Inf -> 0 +ddmin103 min 1 Inf -> 1 +ddmin104 min 1000 Inf -> 1000 +ddmin105 min Inf Inf -> Infinity + +ddmin120 min -Inf -Inf -> -Infinity +ddmin121 min -Inf -1000 -> -Infinity +ddmin122 min -Inf -1 -> -Infinity +ddmin123 min -Inf -0 -> -Infinity +ddmin124 min -Inf 0 -> -Infinity +ddmin125 min -Inf 1 -> -Infinity +ddmin126 min -Inf 1000 -> -Infinity +ddmin127 min -Inf Inf -> -Infinity +ddmin128 min -Inf -Inf -> -Infinity +ddmin129 min -1000 -Inf -> -Infinity +ddmin130 min -1 -Inf -> -Infinity +ddmin131 min -0 -Inf -> -Infinity +ddmin132 min 0 -Inf -> -Infinity +ddmin133 min 1 -Inf -> -Infinity +ddmin134 min 1000 -Inf -> -Infinity +ddmin135 min Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +ddmin141 min NaN -Inf -> -Infinity +ddmin142 min NaN -1000 -> -1000 +ddmin143 min NaN -1 -> -1 +ddmin144 min NaN -0 -> -0 +ddmin145 min NaN 0 -> 0 +ddmin146 min NaN 1 -> 1 +ddmin147 min NaN 1000 -> 1000 +ddmin148 min NaN Inf -> Infinity +ddmin149 min NaN NaN -> NaN +ddmin150 min -Inf NaN -> -Infinity +ddmin151 min -1000 NaN -> -1000 +ddmin152 min -1 -NaN -> -1 +ddmin153 min -0 NaN -> -0 +ddmin154 min 0 -NaN -> 0 +ddmin155 min 1 NaN -> 1 +ddmin156 min 1000 NaN -> 1000 +ddmin157 min Inf NaN -> Infinity + +ddmin161 min sNaN -Inf -> NaN Invalid_operation +ddmin162 min sNaN -1000 -> NaN Invalid_operation +ddmin163 min sNaN -1 -> NaN Invalid_operation +ddmin164 min sNaN -0 -> NaN Invalid_operation +ddmin165 min -sNaN 0 -> -NaN Invalid_operation +ddmin166 min -sNaN 1 -> -NaN Invalid_operation +ddmin167 min sNaN 1000 -> NaN Invalid_operation +ddmin168 min sNaN NaN -> NaN Invalid_operation +ddmin169 min sNaN sNaN -> NaN Invalid_operation +ddmin170 min NaN sNaN -> NaN Invalid_operation +ddmin171 min -Inf sNaN -> NaN Invalid_operation +ddmin172 min -1000 sNaN -> NaN Invalid_operation +ddmin173 min -1 sNaN -> NaN Invalid_operation +ddmin174 min -0 sNaN -> NaN Invalid_operation +ddmin175 min 0 sNaN -> NaN Invalid_operation +ddmin176 min 1 sNaN -> NaN Invalid_operation +ddmin177 min 1000 sNaN -> NaN Invalid_operation +ddmin178 min Inf sNaN -> NaN Invalid_operation +ddmin179 min NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmin181 min NaN9 -Inf -> -Infinity +ddmin182 min -NaN8 9990 -> 9990 +ddmin183 min NaN71 Inf -> Infinity + +ddmin184 min NaN1 NaN54 -> NaN1 +ddmin185 min NaN22 -NaN53 -> NaN22 +ddmin186 min -NaN3 NaN6 -> -NaN3 +ddmin187 min -NaN44 NaN7 -> -NaN44 + +ddmin188 min -Inf NaN41 -> -Infinity +ddmin189 min -9999 -NaN33 -> -9999 +ddmin190 min Inf NaN2 -> Infinity + +ddmin191 min sNaN99 -Inf -> NaN99 Invalid_operation +ddmin192 min sNaN98 -11 -> NaN98 Invalid_operation +ddmin193 min -sNaN97 NaN8 -> -NaN97 Invalid_operation +ddmin194 min sNaN69 sNaN94 -> NaN69 Invalid_operation +ddmin195 min NaN95 sNaN93 -> NaN93 Invalid_operation +ddmin196 min -Inf sNaN92 -> NaN92 Invalid_operation +ddmin197 min 088 sNaN91 -> NaN91 Invalid_operation +ddmin198 min Inf -sNaN90 -> -NaN90 Invalid_operation +ddmin199 min NaN sNaN86 -> NaN86 Invalid_operation + +-- old rounding checks +ddmin221 min -12345678000 1 -> -12345678000 +ddmin222 min 1 -12345678000 -> -12345678000 +ddmin223 min -1234567800 1 -> -1234567800 +ddmin224 min 1 -1234567800 -> -1234567800 +ddmin225 min -1234567890 1 -> -1234567890 +ddmin226 min 1 -1234567890 -> -1234567890 +ddmin227 min -1234567891 1 -> -1234567891 +ddmin228 min 1 -1234567891 -> -1234567891 +ddmin229 min -12345678901 1 -> -12345678901 +ddmin230 min 1 -12345678901 -> -12345678901 +ddmin231 min -1234567896 1 -> -1234567896 +ddmin232 min 1 -1234567896 -> -1234567896 +ddmin233 min 1234567891 1 -> 1 +ddmin234 min 1 1234567891 -> 1 +ddmin235 min 12345678901 1 -> 1 +ddmin236 min 1 12345678901 -> 1 +ddmin237 min 1234567896 1 -> 1 +ddmin238 min 1 1234567896 -> 1 + +-- from examples +ddmin280 min '3' '2' -> '2' +ddmin281 min '-10' '3' -> '-10' +ddmin282 min '1.0' '1' -> '1.0' +ddmin283 min '1' '1.0' -> '1.0' +ddmin284 min '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +ddmin401 min Inf 1.1 -> 1.1 +ddmin402 min 1.1 1 -> 1 +ddmin403 min 1 1.0 -> 1.0 +ddmin404 min 1.0 0.1 -> 0.1 +ddmin405 min 0.1 0.10 -> 0.10 +ddmin406 min 0.10 0.100 -> 0.100 +ddmin407 min 0.10 0 -> 0 +ddmin408 min 0 0.0 -> 0.0 +ddmin409 min 0.0 -0 -> -0 +ddmin410 min 0.0 -0.0 -> -0.0 +ddmin411 min 0.00 -0.0 -> -0.0 +ddmin412 min 0.0 -0.00 -> -0.00 +ddmin413 min 0 -0.0 -> -0.0 +ddmin414 min 0 -0 -> -0 +ddmin415 min -0.0 -0 -> -0 +ddmin416 min -0 -0.100 -> -0.100 +ddmin417 min -0.100 -0.10 -> -0.10 +ddmin418 min -0.10 -0.1 -> -0.1 +ddmin419 min -0.1 -1.0 -> -1.0 +ddmin420 min -1.0 -1 -> -1 +ddmin421 min -1 -1.1 -> -1.1 +ddmin423 min -1.1 -Inf -> -Infinity +-- same with operands reversed +ddmin431 min 1.1 Inf -> 1.1 +ddmin432 min 1 1.1 -> 1 +ddmin433 min 1.0 1 -> 1.0 +ddmin434 min 0.1 1.0 -> 0.1 +ddmin435 min 0.10 0.1 -> 0.10 +ddmin436 min 0.100 0.10 -> 0.100 +ddmin437 min 0 0.10 -> 0 +ddmin438 min 0.0 0 -> 0.0 +ddmin439 min -0 0.0 -> -0 +ddmin440 min -0.0 0.0 -> -0.0 +ddmin441 min -0.0 0.00 -> -0.0 +ddmin442 min -0.00 0.0 -> -0.00 +ddmin443 min -0.0 0 -> -0.0 +ddmin444 min -0 0 -> -0 +ddmin445 min -0 -0.0 -> -0 +ddmin446 min -0.100 -0 -> -0.100 +ddmin447 min -0.10 -0.100 -> -0.10 +ddmin448 min -0.1 -0.10 -> -0.1 +ddmin449 min -1.0 -0.1 -> -1.0 +ddmin450 min -1 -1.0 -> -1 +ddmin451 min -1.1 -1 -> -1.1 +ddmin453 min -Inf -1.1 -> -Infinity +-- largies +ddmin460 min 1000 1E+3 -> 1000 +ddmin461 min 1E+3 1000 -> 1000 +ddmin462 min 1000 -1E+3 -> -1E+3 +ddmin463 min 1E+3 -384 -> -384 +ddmin464 min -384 1E+3 -> -384 +ddmin465 min -1E+3 1000 -> -1E+3 +ddmin466 min -384 -1E+3 -> -1E+3 +ddmin467 min -1E+3 -384 -> -1E+3 + +-- misalignment traps for little-endian +ddmin471 min 1.0 0.1 -> 0.1 +ddmin472 min 0.1 1.0 -> 0.1 +ddmin473 min 10.0 0.1 -> 0.1 +ddmin474 min 0.1 10.0 -> 0.1 +ddmin475 min 100 1.0 -> 1.0 +ddmin476 min 1.0 100 -> 1.0 +ddmin477 min 1000 10.0 -> 10.0 +ddmin478 min 10.0 1000 -> 10.0 +ddmin479 min 10000 100.0 -> 100.0 +ddmin480 min 100.0 10000 -> 100.0 +ddmin481 min 100000 1000.0 -> 1000.0 +ddmin482 min 1000.0 100000 -> 1000.0 +ddmin483 min 1000000 10000.0 -> 10000.0 +ddmin484 min 10000.0 1000000 -> 10000.0 + +-- subnormals +ddmin510 min 1.00E-383 0 -> 0 +ddmin511 min 0.1E-383 0 -> 0 +ddmin512 min 0.10E-383 0 -> 0 +ddmin513 min 0.100E-383 0 -> 0 +ddmin514 min 0.01E-383 0 -> 0 +ddmin515 min 0.999E-383 0 -> 0 +ddmin516 min 0.099E-383 0 -> 0 +ddmin517 min 0.009E-383 0 -> 0 +ddmin518 min 0.001E-383 0 -> 0 +ddmin519 min 0.0009E-383 0 -> 0 +ddmin520 min 0.0001E-383 0 -> 0 + +ddmin530 min -1.00E-383 0 -> -1.00E-383 +ddmin531 min -0.1E-383 0 -> -1E-384 Subnormal +ddmin532 min -0.10E-383 0 -> -1.0E-384 Subnormal +ddmin533 min -0.100E-383 0 -> -1.00E-384 Subnormal +ddmin534 min -0.01E-383 0 -> -1E-385 Subnormal +ddmin535 min -0.999E-383 0 -> -9.99E-384 Subnormal +ddmin536 min -0.099E-383 0 -> -9.9E-385 Subnormal +ddmin537 min -0.009E-383 0 -> -9E-386 Subnormal +ddmin538 min -0.001E-383 0 -> -1E-386 Subnormal +ddmin539 min -0.0009E-383 0 -> -9E-387 Subnormal +ddmin540 min -0.0001E-383 0 -> -1E-387 Subnormal + + +-- Null tests +ddmin900 min 10 # -> NaN Invalid_operation +ddmin901 min # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddMinMag.decTest b/Lib/test/decimaltestdata/ddMinMag.decTest index 5537cc8a7e4..1012f1ec81e 100644 --- a/Lib/test/decimaltestdata/ddMinMag.decTest +++ b/Lib/test/decimaltestdata/ddMinMag.decTest @@ -1,293 +1,293 @@ ------------------------------------------------------------------------- --- ddMinMag.decTest -- decDouble minnummag -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmng001 minmag -2 -2 -> -2 -ddmng002 minmag -2 -1 -> -1 -ddmng003 minmag -2 0 -> 0 -ddmng004 minmag -2 1 -> 1 -ddmng005 minmag -2 2 -> -2 -ddmng006 minmag -1 -2 -> -1 -ddmng007 minmag -1 -1 -> -1 -ddmng008 minmag -1 0 -> 0 -ddmng009 minmag -1 1 -> -1 -ddmng010 minmag -1 2 -> -1 -ddmng011 minmag 0 -2 -> 0 -ddmng012 minmag 0 -1 -> 0 -ddmng013 minmag 0 0 -> 0 -ddmng014 minmag 0 1 -> 0 -ddmng015 minmag 0 2 -> 0 -ddmng016 minmag 1 -2 -> 1 -ddmng017 minmag 1 -1 -> -1 -ddmng018 minmag 1 0 -> 0 -ddmng019 minmag 1 1 -> 1 -ddmng020 minmag 1 2 -> 1 -ddmng021 minmag 2 -2 -> -2 -ddmng022 minmag 2 -1 -> -1 -ddmng023 minmag 2 0 -> 0 -ddmng025 minmag 2 1 -> 1 -ddmng026 minmag 2 2 -> 2 - --- extended zeros -ddmng030 minmag 0 0 -> 0 -ddmng031 minmag 0 -0 -> -0 -ddmng032 minmag 0 -0.0 -> -0.0 -ddmng033 minmag 0 0.0 -> 0.0 -ddmng034 minmag -0 0 -> -0 -ddmng035 minmag -0 -0 -> -0 -ddmng036 minmag -0 -0.0 -> -0 -ddmng037 minmag -0 0.0 -> -0 -ddmng038 minmag 0.0 0 -> 0.0 -ddmng039 minmag 0.0 -0 -> -0 -ddmng040 minmag 0.0 -0.0 -> -0.0 -ddmng041 minmag 0.0 0.0 -> 0.0 -ddmng042 minmag -0.0 0 -> -0.0 -ddmng043 minmag -0.0 -0 -> -0 -ddmng044 minmag -0.0 -0.0 -> -0.0 -ddmng045 minmag -0.0 0.0 -> -0.0 - -ddmng046 minmag 0E1 -0E1 -> -0E+1 -ddmng047 minmag -0E1 0E2 -> -0E+1 -ddmng048 minmag 0E2 0E1 -> 0E+1 -ddmng049 minmag 0E1 0E2 -> 0E+1 -ddmng050 minmag -0E3 -0E2 -> -0E+3 -ddmng051 minmag -0E2 -0E3 -> -0E+3 - --- Specials -ddmng090 minmag Inf -Inf -> -Infinity -ddmng091 minmag Inf -1000 -> -1000 -ddmng092 minmag Inf -1 -> -1 -ddmng093 minmag Inf -0 -> -0 -ddmng094 minmag Inf 0 -> 0 -ddmng095 minmag Inf 1 -> 1 -ddmng096 minmag Inf 1000 -> 1000 -ddmng097 minmag Inf Inf -> Infinity -ddmng098 minmag -1000 Inf -> -1000 -ddmng099 minmag -Inf Inf -> -Infinity -ddmng100 minmag -1 Inf -> -1 -ddmng101 minmag -0 Inf -> -0 -ddmng102 minmag 0 Inf -> 0 -ddmng103 minmag 1 Inf -> 1 -ddmng104 minmag 1000 Inf -> 1000 -ddmng105 minmag Inf Inf -> Infinity - -ddmng120 minmag -Inf -Inf -> -Infinity -ddmng121 minmag -Inf -1000 -> -1000 -ddmng122 minmag -Inf -1 -> -1 -ddmng123 minmag -Inf -0 -> -0 -ddmng124 minmag -Inf 0 -> 0 -ddmng125 minmag -Inf 1 -> 1 -ddmng126 minmag -Inf 1000 -> 1000 -ddmng127 minmag -Inf Inf -> -Infinity -ddmng128 minmag -Inf -Inf -> -Infinity -ddmng129 minmag -1000 -Inf -> -1000 -ddmng130 minmag -1 -Inf -> -1 -ddmng131 minmag -0 -Inf -> -0 -ddmng132 minmag 0 -Inf -> 0 -ddmng133 minmag 1 -Inf -> 1 -ddmng134 minmag 1000 -Inf -> 1000 -ddmng135 minmag Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -ddmng141 minmag NaN -Inf -> -Infinity -ddmng142 minmag NaN -1000 -> -1000 -ddmng143 minmag NaN -1 -> -1 -ddmng144 minmag NaN -0 -> -0 -ddmng145 minmag NaN 0 -> 0 -ddmng146 minmag NaN 1 -> 1 -ddmng147 minmag NaN 1000 -> 1000 -ddmng148 minmag NaN Inf -> Infinity -ddmng149 minmag NaN NaN -> NaN -ddmng150 minmag -Inf NaN -> -Infinity -ddmng151 minmag -1000 NaN -> -1000 -ddmng152 minmag -1 -NaN -> -1 -ddmng153 minmag -0 NaN -> -0 -ddmng154 minmag 0 -NaN -> 0 -ddmng155 minmag 1 NaN -> 1 -ddmng156 minmag 1000 NaN -> 1000 -ddmng157 minmag Inf NaN -> Infinity - -ddmng161 minmag sNaN -Inf -> NaN Invalid_operation -ddmng162 minmag sNaN -1000 -> NaN Invalid_operation -ddmng163 minmag sNaN -1 -> NaN Invalid_operation -ddmng164 minmag sNaN -0 -> NaN Invalid_operation -ddmng165 minmag -sNaN 0 -> -NaN Invalid_operation -ddmng166 minmag -sNaN 1 -> -NaN Invalid_operation -ddmng167 minmag sNaN 1000 -> NaN Invalid_operation -ddmng168 minmag sNaN NaN -> NaN Invalid_operation -ddmng169 minmag sNaN sNaN -> NaN Invalid_operation -ddmng170 minmag NaN sNaN -> NaN Invalid_operation -ddmng171 minmag -Inf sNaN -> NaN Invalid_operation -ddmng172 minmag -1000 sNaN -> NaN Invalid_operation -ddmng173 minmag -1 sNaN -> NaN Invalid_operation -ddmng174 minmag -0 sNaN -> NaN Invalid_operation -ddmng175 minmag 0 sNaN -> NaN Invalid_operation -ddmng176 minmag 1 sNaN -> NaN Invalid_operation -ddmng177 minmag 1000 sNaN -> NaN Invalid_operation -ddmng178 minmag Inf sNaN -> NaN Invalid_operation -ddmng179 minmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmng181 minmag NaN9 -Inf -> -Infinity -ddmng182 minmag -NaN8 9990 -> 9990 -ddmng183 minmag NaN71 Inf -> Infinity - -ddmng184 minmag NaN1 NaN54 -> NaN1 -ddmng185 minmag NaN22 -NaN53 -> NaN22 -ddmng186 minmag -NaN3 NaN6 -> -NaN3 -ddmng187 minmag -NaN44 NaN7 -> -NaN44 - -ddmng188 minmag -Inf NaN41 -> -Infinity -ddmng189 minmag -9999 -NaN33 -> -9999 -ddmng190 minmag Inf NaN2 -> Infinity - -ddmng191 minmag sNaN99 -Inf -> NaN99 Invalid_operation -ddmng192 minmag sNaN98 -11 -> NaN98 Invalid_operation -ddmng193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation -ddmng194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation -ddmng195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation -ddmng196 minmag -Inf sNaN92 -> NaN92 Invalid_operation -ddmng197 minmag 088 sNaN91 -> NaN91 Invalid_operation -ddmng198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation -ddmng199 minmag NaN sNaN86 -> NaN86 Invalid_operation - --- old rounding checks -ddmng221 minmag -12345678000 1 -> 1 -ddmng222 minmag 1 -12345678000 -> 1 -ddmng223 minmag -1234567800 1 -> 1 -ddmng224 minmag 1 -1234567800 -> 1 -ddmng225 minmag -1234567890 1 -> 1 -ddmng226 minmag 1 -1234567890 -> 1 -ddmng227 minmag -1234567891 1 -> 1 -ddmng228 minmag 1 -1234567891 -> 1 -ddmng229 minmag -12345678901 1 -> 1 -ddmng230 minmag 1 -12345678901 -> 1 -ddmng231 minmag -1234567896 1 -> 1 -ddmng232 minmag 1 -1234567896 -> 1 -ddmng233 minmag 1234567891 1 -> 1 -ddmng234 minmag 1 1234567891 -> 1 -ddmng235 minmag 12345678901 1 -> 1 -ddmng236 minmag 1 12345678901 -> 1 -ddmng237 minmag 1234567896 1 -> 1 -ddmng238 minmag 1 1234567896 -> 1 - --- from examples -ddmng280 minmag '3' '2' -> '2' -ddmng281 minmag '-10' '3' -> '3' -ddmng282 minmag '1.0' '1' -> '1.0' -ddmng283 minmag '1' '1.0' -> '1.0' -ddmng284 minmag '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -ddmng401 minmag Inf 1.1 -> 1.1 -ddmng402 minmag 1.1 1 -> 1 -ddmng403 minmag 1 1.0 -> 1.0 -ddmng404 minmag 1.0 0.1 -> 0.1 -ddmng405 minmag 0.1 0.10 -> 0.10 -ddmng406 minmag 0.10 0.100 -> 0.100 -ddmng407 minmag 0.10 0 -> 0 -ddmng408 minmag 0 0.0 -> 0.0 -ddmng409 minmag 0.0 -0 -> -0 -ddmng410 minmag 0.0 -0.0 -> -0.0 -ddmng411 minmag 0.00 -0.0 -> -0.0 -ddmng412 minmag 0.0 -0.00 -> -0.00 -ddmng413 minmag 0 -0.0 -> -0.0 -ddmng414 minmag 0 -0 -> -0 -ddmng415 minmag -0.0 -0 -> -0 -ddmng416 minmag -0 -0.100 -> -0 -ddmng417 minmag -0.100 -0.10 -> -0.10 -ddmng418 minmag -0.10 -0.1 -> -0.1 -ddmng419 minmag -0.1 -1.0 -> -0.1 -ddmng420 minmag -1.0 -1 -> -1 -ddmng421 minmag -1 -1.1 -> -1 -ddmng423 minmag -1.1 -Inf -> -1.1 --- same with operands reversed -ddmng431 minmag 1.1 Inf -> 1.1 -ddmng432 minmag 1 1.1 -> 1 -ddmng433 minmag 1.0 1 -> 1.0 -ddmng434 minmag 0.1 1.0 -> 0.1 -ddmng435 minmag 0.10 0.1 -> 0.10 -ddmng436 minmag 0.100 0.10 -> 0.100 -ddmng437 minmag 0 0.10 -> 0 -ddmng438 minmag 0.0 0 -> 0.0 -ddmng439 minmag -0 0.0 -> -0 -ddmng440 minmag -0.0 0.0 -> -0.0 -ddmng441 minmag -0.0 0.00 -> -0.0 -ddmng442 minmag -0.00 0.0 -> -0.00 -ddmng443 minmag -0.0 0 -> -0.0 -ddmng444 minmag -0 0 -> -0 -ddmng445 minmag -0 -0.0 -> -0 -ddmng446 minmag -0.100 -0 -> -0 -ddmng447 minmag -0.10 -0.100 -> -0.10 -ddmng448 minmag -0.1 -0.10 -> -0.1 -ddmng449 minmag -1.0 -0.1 -> -0.1 -ddmng450 minmag -1 -1.0 -> -1 -ddmng451 minmag -1.1 -1 -> -1 -ddmng453 minmag -Inf -1.1 -> -1.1 --- largies -ddmng460 minmag 1000 1E+3 -> 1000 -ddmng461 minmag 1E+3 1000 -> 1000 -ddmng462 minmag 1000 -1E+3 -> -1E+3 -ddmng463 minmag 1E+3 -384 -> -384 -ddmng464 minmag -384 1E+3 -> -384 -ddmng465 minmag -1E+3 1000 -> -1E+3 -ddmng466 minmag -384 -1E+3 -> -384 -ddmng467 minmag -1E+3 -384 -> -384 - --- subnormals -ddmng510 minmag 1.00E-383 0 -> 0 -ddmng511 minmag 0.1E-383 0 -> 0 -ddmng512 minmag 0.10E-383 0 -> 0 -ddmng513 minmag 0.100E-383 0 -> 0 -ddmng514 minmag 0.01E-383 0 -> 0 -ddmng515 minmag 0.999E-383 0 -> 0 -ddmng516 minmag 0.099E-383 0 -> 0 -ddmng517 minmag 0.009E-383 0 -> 0 -ddmng518 minmag 0.001E-383 0 -> 0 -ddmng519 minmag 0.0009E-383 0 -> 0 -ddmng520 minmag 0.0001E-383 0 -> 0 - -ddmng530 minmag -1.00E-383 0 -> 0 -ddmng531 minmag -0.1E-383 0 -> 0 -ddmng532 minmag -0.10E-383 0 -> 0 -ddmng533 minmag -0.100E-383 0 -> 0 -ddmng534 minmag -0.01E-383 0 -> 0 -ddmng535 minmag -0.999E-383 0 -> 0 -ddmng536 minmag -0.099E-383 0 -> 0 -ddmng537 minmag -0.009E-383 0 -> 0 -ddmng538 minmag -0.001E-383 0 -> 0 -ddmng539 minmag -0.0009E-383 0 -> 0 -ddmng540 minmag -0.0001E-383 0 -> 0 - - --- Null tests -ddmng900 minmag 10 # -> NaN Invalid_operation -ddmng901 minmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddMinMag.decTest -- decDouble minnummag -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmng001 minmag -2 -2 -> -2 +ddmng002 minmag -2 -1 -> -1 +ddmng003 minmag -2 0 -> 0 +ddmng004 minmag -2 1 -> 1 +ddmng005 minmag -2 2 -> -2 +ddmng006 minmag -1 -2 -> -1 +ddmng007 minmag -1 -1 -> -1 +ddmng008 minmag -1 0 -> 0 +ddmng009 minmag -1 1 -> -1 +ddmng010 minmag -1 2 -> -1 +ddmng011 minmag 0 -2 -> 0 +ddmng012 minmag 0 -1 -> 0 +ddmng013 minmag 0 0 -> 0 +ddmng014 minmag 0 1 -> 0 +ddmng015 minmag 0 2 -> 0 +ddmng016 minmag 1 -2 -> 1 +ddmng017 minmag 1 -1 -> -1 +ddmng018 minmag 1 0 -> 0 +ddmng019 minmag 1 1 -> 1 +ddmng020 minmag 1 2 -> 1 +ddmng021 minmag 2 -2 -> -2 +ddmng022 minmag 2 -1 -> -1 +ddmng023 minmag 2 0 -> 0 +ddmng025 minmag 2 1 -> 1 +ddmng026 minmag 2 2 -> 2 + +-- extended zeros +ddmng030 minmag 0 0 -> 0 +ddmng031 minmag 0 -0 -> -0 +ddmng032 minmag 0 -0.0 -> -0.0 +ddmng033 minmag 0 0.0 -> 0.0 +ddmng034 minmag -0 0 -> -0 +ddmng035 minmag -0 -0 -> -0 +ddmng036 minmag -0 -0.0 -> -0 +ddmng037 minmag -0 0.0 -> -0 +ddmng038 minmag 0.0 0 -> 0.0 +ddmng039 minmag 0.0 -0 -> -0 +ddmng040 minmag 0.0 -0.0 -> -0.0 +ddmng041 minmag 0.0 0.0 -> 0.0 +ddmng042 minmag -0.0 0 -> -0.0 +ddmng043 minmag -0.0 -0 -> -0 +ddmng044 minmag -0.0 -0.0 -> -0.0 +ddmng045 minmag -0.0 0.0 -> -0.0 + +ddmng046 minmag 0E1 -0E1 -> -0E+1 +ddmng047 minmag -0E1 0E2 -> -0E+1 +ddmng048 minmag 0E2 0E1 -> 0E+1 +ddmng049 minmag 0E1 0E2 -> 0E+1 +ddmng050 minmag -0E3 -0E2 -> -0E+3 +ddmng051 minmag -0E2 -0E3 -> -0E+3 + +-- Specials +ddmng090 minmag Inf -Inf -> -Infinity +ddmng091 minmag Inf -1000 -> -1000 +ddmng092 minmag Inf -1 -> -1 +ddmng093 minmag Inf -0 -> -0 +ddmng094 minmag Inf 0 -> 0 +ddmng095 minmag Inf 1 -> 1 +ddmng096 minmag Inf 1000 -> 1000 +ddmng097 minmag Inf Inf -> Infinity +ddmng098 minmag -1000 Inf -> -1000 +ddmng099 minmag -Inf Inf -> -Infinity +ddmng100 minmag -1 Inf -> -1 +ddmng101 minmag -0 Inf -> -0 +ddmng102 minmag 0 Inf -> 0 +ddmng103 minmag 1 Inf -> 1 +ddmng104 minmag 1000 Inf -> 1000 +ddmng105 minmag Inf Inf -> Infinity + +ddmng120 minmag -Inf -Inf -> -Infinity +ddmng121 minmag -Inf -1000 -> -1000 +ddmng122 minmag -Inf -1 -> -1 +ddmng123 minmag -Inf -0 -> -0 +ddmng124 minmag -Inf 0 -> 0 +ddmng125 minmag -Inf 1 -> 1 +ddmng126 minmag -Inf 1000 -> 1000 +ddmng127 minmag -Inf Inf -> -Infinity +ddmng128 minmag -Inf -Inf -> -Infinity +ddmng129 minmag -1000 -Inf -> -1000 +ddmng130 minmag -1 -Inf -> -1 +ddmng131 minmag -0 -Inf -> -0 +ddmng132 minmag 0 -Inf -> 0 +ddmng133 minmag 1 -Inf -> 1 +ddmng134 minmag 1000 -Inf -> 1000 +ddmng135 minmag Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +ddmng141 minmag NaN -Inf -> -Infinity +ddmng142 minmag NaN -1000 -> -1000 +ddmng143 minmag NaN -1 -> -1 +ddmng144 minmag NaN -0 -> -0 +ddmng145 minmag NaN 0 -> 0 +ddmng146 minmag NaN 1 -> 1 +ddmng147 minmag NaN 1000 -> 1000 +ddmng148 minmag NaN Inf -> Infinity +ddmng149 minmag NaN NaN -> NaN +ddmng150 minmag -Inf NaN -> -Infinity +ddmng151 minmag -1000 NaN -> -1000 +ddmng152 minmag -1 -NaN -> -1 +ddmng153 minmag -0 NaN -> -0 +ddmng154 minmag 0 -NaN -> 0 +ddmng155 minmag 1 NaN -> 1 +ddmng156 minmag 1000 NaN -> 1000 +ddmng157 minmag Inf NaN -> Infinity + +ddmng161 minmag sNaN -Inf -> NaN Invalid_operation +ddmng162 minmag sNaN -1000 -> NaN Invalid_operation +ddmng163 minmag sNaN -1 -> NaN Invalid_operation +ddmng164 minmag sNaN -0 -> NaN Invalid_operation +ddmng165 minmag -sNaN 0 -> -NaN Invalid_operation +ddmng166 minmag -sNaN 1 -> -NaN Invalid_operation +ddmng167 minmag sNaN 1000 -> NaN Invalid_operation +ddmng168 minmag sNaN NaN -> NaN Invalid_operation +ddmng169 minmag sNaN sNaN -> NaN Invalid_operation +ddmng170 minmag NaN sNaN -> NaN Invalid_operation +ddmng171 minmag -Inf sNaN -> NaN Invalid_operation +ddmng172 minmag -1000 sNaN -> NaN Invalid_operation +ddmng173 minmag -1 sNaN -> NaN Invalid_operation +ddmng174 minmag -0 sNaN -> NaN Invalid_operation +ddmng175 minmag 0 sNaN -> NaN Invalid_operation +ddmng176 minmag 1 sNaN -> NaN Invalid_operation +ddmng177 minmag 1000 sNaN -> NaN Invalid_operation +ddmng178 minmag Inf sNaN -> NaN Invalid_operation +ddmng179 minmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmng181 minmag NaN9 -Inf -> -Infinity +ddmng182 minmag -NaN8 9990 -> 9990 +ddmng183 minmag NaN71 Inf -> Infinity + +ddmng184 minmag NaN1 NaN54 -> NaN1 +ddmng185 minmag NaN22 -NaN53 -> NaN22 +ddmng186 minmag -NaN3 NaN6 -> -NaN3 +ddmng187 minmag -NaN44 NaN7 -> -NaN44 + +ddmng188 minmag -Inf NaN41 -> -Infinity +ddmng189 minmag -9999 -NaN33 -> -9999 +ddmng190 minmag Inf NaN2 -> Infinity + +ddmng191 minmag sNaN99 -Inf -> NaN99 Invalid_operation +ddmng192 minmag sNaN98 -11 -> NaN98 Invalid_operation +ddmng193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation +ddmng194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation +ddmng195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation +ddmng196 minmag -Inf sNaN92 -> NaN92 Invalid_operation +ddmng197 minmag 088 sNaN91 -> NaN91 Invalid_operation +ddmng198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation +ddmng199 minmag NaN sNaN86 -> NaN86 Invalid_operation + +-- old rounding checks +ddmng221 minmag -12345678000 1 -> 1 +ddmng222 minmag 1 -12345678000 -> 1 +ddmng223 minmag -1234567800 1 -> 1 +ddmng224 minmag 1 -1234567800 -> 1 +ddmng225 minmag -1234567890 1 -> 1 +ddmng226 minmag 1 -1234567890 -> 1 +ddmng227 minmag -1234567891 1 -> 1 +ddmng228 minmag 1 -1234567891 -> 1 +ddmng229 minmag -12345678901 1 -> 1 +ddmng230 minmag 1 -12345678901 -> 1 +ddmng231 minmag -1234567896 1 -> 1 +ddmng232 minmag 1 -1234567896 -> 1 +ddmng233 minmag 1234567891 1 -> 1 +ddmng234 minmag 1 1234567891 -> 1 +ddmng235 minmag 12345678901 1 -> 1 +ddmng236 minmag 1 12345678901 -> 1 +ddmng237 minmag 1234567896 1 -> 1 +ddmng238 minmag 1 1234567896 -> 1 + +-- from examples +ddmng280 minmag '3' '2' -> '2' +ddmng281 minmag '-10' '3' -> '3' +ddmng282 minmag '1.0' '1' -> '1.0' +ddmng283 minmag '1' '1.0' -> '1.0' +ddmng284 minmag '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +ddmng401 minmag Inf 1.1 -> 1.1 +ddmng402 minmag 1.1 1 -> 1 +ddmng403 minmag 1 1.0 -> 1.0 +ddmng404 minmag 1.0 0.1 -> 0.1 +ddmng405 minmag 0.1 0.10 -> 0.10 +ddmng406 minmag 0.10 0.100 -> 0.100 +ddmng407 minmag 0.10 0 -> 0 +ddmng408 minmag 0 0.0 -> 0.0 +ddmng409 minmag 0.0 -0 -> -0 +ddmng410 minmag 0.0 -0.0 -> -0.0 +ddmng411 minmag 0.00 -0.0 -> -0.0 +ddmng412 minmag 0.0 -0.00 -> -0.00 +ddmng413 minmag 0 -0.0 -> -0.0 +ddmng414 minmag 0 -0 -> -0 +ddmng415 minmag -0.0 -0 -> -0 +ddmng416 minmag -0 -0.100 -> -0 +ddmng417 minmag -0.100 -0.10 -> -0.10 +ddmng418 minmag -0.10 -0.1 -> -0.1 +ddmng419 minmag -0.1 -1.0 -> -0.1 +ddmng420 minmag -1.0 -1 -> -1 +ddmng421 minmag -1 -1.1 -> -1 +ddmng423 minmag -1.1 -Inf -> -1.1 +-- same with operands reversed +ddmng431 minmag 1.1 Inf -> 1.1 +ddmng432 minmag 1 1.1 -> 1 +ddmng433 minmag 1.0 1 -> 1.0 +ddmng434 minmag 0.1 1.0 -> 0.1 +ddmng435 minmag 0.10 0.1 -> 0.10 +ddmng436 minmag 0.100 0.10 -> 0.100 +ddmng437 minmag 0 0.10 -> 0 +ddmng438 minmag 0.0 0 -> 0.0 +ddmng439 minmag -0 0.0 -> -0 +ddmng440 minmag -0.0 0.0 -> -0.0 +ddmng441 minmag -0.0 0.00 -> -0.0 +ddmng442 minmag -0.00 0.0 -> -0.00 +ddmng443 minmag -0.0 0 -> -0.0 +ddmng444 minmag -0 0 -> -0 +ddmng445 minmag -0 -0.0 -> -0 +ddmng446 minmag -0.100 -0 -> -0 +ddmng447 minmag -0.10 -0.100 -> -0.10 +ddmng448 minmag -0.1 -0.10 -> -0.1 +ddmng449 minmag -1.0 -0.1 -> -0.1 +ddmng450 minmag -1 -1.0 -> -1 +ddmng451 minmag -1.1 -1 -> -1 +ddmng453 minmag -Inf -1.1 -> -1.1 +-- largies +ddmng460 minmag 1000 1E+3 -> 1000 +ddmng461 minmag 1E+3 1000 -> 1000 +ddmng462 minmag 1000 -1E+3 -> -1E+3 +ddmng463 minmag 1E+3 -384 -> -384 +ddmng464 minmag -384 1E+3 -> -384 +ddmng465 minmag -1E+3 1000 -> -1E+3 +ddmng466 minmag -384 -1E+3 -> -384 +ddmng467 minmag -1E+3 -384 -> -384 + +-- subnormals +ddmng510 minmag 1.00E-383 0 -> 0 +ddmng511 minmag 0.1E-383 0 -> 0 +ddmng512 minmag 0.10E-383 0 -> 0 +ddmng513 minmag 0.100E-383 0 -> 0 +ddmng514 minmag 0.01E-383 0 -> 0 +ddmng515 minmag 0.999E-383 0 -> 0 +ddmng516 minmag 0.099E-383 0 -> 0 +ddmng517 minmag 0.009E-383 0 -> 0 +ddmng518 minmag 0.001E-383 0 -> 0 +ddmng519 minmag 0.0009E-383 0 -> 0 +ddmng520 minmag 0.0001E-383 0 -> 0 + +ddmng530 minmag -1.00E-383 0 -> 0 +ddmng531 minmag -0.1E-383 0 -> 0 +ddmng532 minmag -0.10E-383 0 -> 0 +ddmng533 minmag -0.100E-383 0 -> 0 +ddmng534 minmag -0.01E-383 0 -> 0 +ddmng535 minmag -0.999E-383 0 -> 0 +ddmng536 minmag -0.099E-383 0 -> 0 +ddmng537 minmag -0.009E-383 0 -> 0 +ddmng538 minmag -0.001E-383 0 -> 0 +ddmng539 minmag -0.0009E-383 0 -> 0 +ddmng540 minmag -0.0001E-383 0 -> 0 + + +-- Null tests +ddmng900 minmag 10 # -> NaN Invalid_operation +ddmng901 minmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddMinus.decTest b/Lib/test/decimaltestdata/ddMinus.decTest index 2705e79ea25..b7ffff7d897 100644 --- a/Lib/test/decimaltestdata/ddMinus.decTest +++ b/Lib/test/decimaltestdata/ddMinus.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddMinus.decTest -- decDouble 0-x -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddmns001 minus +7.50 -> -7.50 - --- Infinities -ddmns011 minus Infinity -> -Infinity -ddmns012 minus -Infinity -> Infinity - --- NaNs, 0 payload -ddmns021 minus NaN -> NaN -ddmns022 minus -NaN -> -NaN -ddmns023 minus sNaN -> NaN Invalid_operation -ddmns024 minus -sNaN -> -NaN Invalid_operation - --- NaNs, non-0 payload -ddmns031 minus NaN13 -> NaN13 -ddmns032 minus -NaN13 -> -NaN13 -ddmns033 minus sNaN13 -> NaN13 Invalid_operation -ddmns034 minus -sNaN13 -> -NaN13 Invalid_operation -ddmns035 minus NaN70 -> NaN70 -ddmns036 minus -NaN70 -> -NaN70 -ddmns037 minus sNaN101 -> NaN101 Invalid_operation -ddmns038 minus -sNaN101 -> -NaN101 Invalid_operation - --- finites -ddmns101 minus 7 -> -7 -ddmns102 minus -7 -> 7 -ddmns103 minus 75 -> -75 -ddmns104 minus -75 -> 75 -ddmns105 minus 7.50 -> -7.50 -ddmns106 minus -7.50 -> 7.50 -ddmns107 minus 7.500 -> -7.500 -ddmns108 minus -7.500 -> 7.500 - --- zeros -ddmns111 minus 0 -> 0 -ddmns112 minus -0 -> 0 -ddmns113 minus 0E+4 -> 0E+4 -ddmns114 minus -0E+4 -> 0E+4 -ddmns115 minus 0.0000 -> 0.0000 -ddmns116 minus -0.0000 -> 0.0000 -ddmns117 minus 0E-141 -> 0E-141 -ddmns118 minus -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddmns121 minus 2682682682682682 -> -2682682682682682 -ddmns122 minus -2682682682682682 -> 2682682682682682 -ddmns123 minus 1341341341341341 -> -1341341341341341 -ddmns124 minus -1341341341341341 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddmns131 minus 9.999999999999999E+384 -> -9.999999999999999E+384 -ddmns132 minus 1E-383 -> -1E-383 -ddmns133 minus 1.000000000000000E-383 -> -1.000000000000000E-383 -ddmns134 minus 1E-398 -> -1E-398 Subnormal - -ddmns135 minus -1E-398 -> 1E-398 Subnormal -ddmns136 minus -1.000000000000000E-383 -> 1.000000000000000E-383 -ddmns137 minus -1E-383 -> 1E-383 -ddmns138 minus -9.999999999999999E+384 -> 9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddMinus.decTest -- decDouble 0-x -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddmns001 minus +7.50 -> -7.50 + +-- Infinities +ddmns011 minus Infinity -> -Infinity +ddmns012 minus -Infinity -> Infinity + +-- NaNs, 0 payload +ddmns021 minus NaN -> NaN +ddmns022 minus -NaN -> -NaN +ddmns023 minus sNaN -> NaN Invalid_operation +ddmns024 minus -sNaN -> -NaN Invalid_operation + +-- NaNs, non-0 payload +ddmns031 minus NaN13 -> NaN13 +ddmns032 minus -NaN13 -> -NaN13 +ddmns033 minus sNaN13 -> NaN13 Invalid_operation +ddmns034 minus -sNaN13 -> -NaN13 Invalid_operation +ddmns035 minus NaN70 -> NaN70 +ddmns036 minus -NaN70 -> -NaN70 +ddmns037 minus sNaN101 -> NaN101 Invalid_operation +ddmns038 minus -sNaN101 -> -NaN101 Invalid_operation + +-- finites +ddmns101 minus 7 -> -7 +ddmns102 minus -7 -> 7 +ddmns103 minus 75 -> -75 +ddmns104 minus -75 -> 75 +ddmns105 minus 7.50 -> -7.50 +ddmns106 minus -7.50 -> 7.50 +ddmns107 minus 7.500 -> -7.500 +ddmns108 minus -7.500 -> 7.500 + +-- zeros +ddmns111 minus 0 -> 0 +ddmns112 minus -0 -> 0 +ddmns113 minus 0E+4 -> 0E+4 +ddmns114 minus -0E+4 -> 0E+4 +ddmns115 minus 0.0000 -> 0.0000 +ddmns116 minus -0.0000 -> 0.0000 +ddmns117 minus 0E-141 -> 0E-141 +ddmns118 minus -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddmns121 minus 2682682682682682 -> -2682682682682682 +ddmns122 minus -2682682682682682 -> 2682682682682682 +ddmns123 minus 1341341341341341 -> -1341341341341341 +ddmns124 minus -1341341341341341 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddmns131 minus 9.999999999999999E+384 -> -9.999999999999999E+384 +ddmns132 minus 1E-383 -> -1E-383 +ddmns133 minus 1.000000000000000E-383 -> -1.000000000000000E-383 +ddmns134 minus 1E-398 -> -1E-398 Subnormal + +ddmns135 minus -1E-398 -> 1E-398 Subnormal +ddmns136 minus -1.000000000000000E-383 -> 1.000000000000000E-383 +ddmns137 minus -1E-383 -> 1E-383 +ddmns138 minus -9.999999999999999E+384 -> 9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddMultiply.decTest b/Lib/test/decimaltestdata/ddMultiply.decTest index b7342ac2fe7..fec0e12c637 100644 --- a/Lib/test/decimaltestdata/ddMultiply.decTest +++ b/Lib/test/decimaltestdata/ddMultiply.decTest @@ -1,553 +1,553 @@ ------------------------------------------------------------------------- --- ddMultiply.decTest -- decDouble multiplication -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decDoubles only; all arguments are --- representable in a decDouble -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmul000 multiply 2 2 -> 4 -ddmul001 multiply 2 3 -> 6 -ddmul002 multiply 5 1 -> 5 -ddmul003 multiply 5 2 -> 10 -ddmul004 multiply 1.20 2 -> 2.40 -ddmul005 multiply 1.20 0 -> 0.00 -ddmul006 multiply 1.20 -2 -> -2.40 -ddmul007 multiply -1.20 2 -> -2.40 -ddmul008 multiply -1.20 0 -> -0.00 -ddmul009 multiply -1.20 -2 -> 2.40 -ddmul010 multiply 5.09 7.1 -> 36.139 -ddmul011 multiply 2.5 4 -> 10.0 -ddmul012 multiply 2.50 4 -> 10.00 -ddmul013 multiply 1.23456789 1.00000000 -> 1.234567890000000 Rounded -ddmul015 multiply 2.50 4 -> 10.00 -ddmul016 multiply 9.999999999 9.999999999 -> 99.99999998000000 Inexact Rounded -ddmul017 multiply 9.999999999 -9.999999999 -> -99.99999998000000 Inexact Rounded -ddmul018 multiply -9.999999999 9.999999999 -> -99.99999998000000 Inexact Rounded -ddmul019 multiply -9.999999999 -9.999999999 -> 99.99999998000000 Inexact Rounded - --- zeros, etc. -ddmul021 multiply 0 0 -> 0 -ddmul022 multiply 0 -0 -> -0 -ddmul023 multiply -0 0 -> -0 -ddmul024 multiply -0 -0 -> 0 -ddmul025 multiply -0.0 -0.0 -> 0.00 -ddmul026 multiply -0.0 -0.0 -> 0.00 -ddmul027 multiply -0.0 -0.0 -> 0.00 -ddmul028 multiply -0.0 -0.0 -> 0.00 -ddmul030 multiply 5.00 1E-3 -> 0.00500 -ddmul031 multiply 00.00 0.000 -> 0.00000 -ddmul032 multiply 00.00 0E-3 -> 0.00000 -- rhs is 0 -ddmul033 multiply 0E-3 00.00 -> 0.00000 -- lhs is 0 -ddmul034 multiply -5.00 1E-3 -> -0.00500 -ddmul035 multiply -00.00 0.000 -> -0.00000 -ddmul036 multiply -00.00 0E-3 -> -0.00000 -- rhs is 0 -ddmul037 multiply -0E-3 00.00 -> -0.00000 -- lhs is 0 -ddmul038 multiply 5.00 -1E-3 -> -0.00500 -ddmul039 multiply 00.00 -0.000 -> -0.00000 -ddmul040 multiply 00.00 -0E-3 -> -0.00000 -- rhs is 0 -ddmul041 multiply 0E-3 -00.00 -> -0.00000 -- lhs is 0 -ddmul042 multiply -5.00 -1E-3 -> 0.00500 -ddmul043 multiply -00.00 -0.000 -> 0.00000 -ddmul044 multiply -00.00 -0E-3 -> 0.00000 -- rhs is 0 -ddmul045 multiply -0E-3 -00.00 -> 0.00000 -- lhs is 0 - --- examples from decarith -ddmul050 multiply 1.20 3 -> 3.60 -ddmul051 multiply 7 3 -> 21 -ddmul052 multiply 0.9 0.8 -> 0.72 -ddmul053 multiply 0.9 -0 -> -0.0 -ddmul054 multiply 654321 654321 -> 428135971041 - -ddmul060 multiply 123.45 1e7 -> 1.2345E+9 -ddmul061 multiply 123.45 1e8 -> 1.2345E+10 -ddmul062 multiply 123.45 1e+9 -> 1.2345E+11 -ddmul063 multiply 123.45 1e10 -> 1.2345E+12 -ddmul064 multiply 123.45 1e11 -> 1.2345E+13 -ddmul065 multiply 123.45 1e12 -> 1.2345E+14 -ddmul066 multiply 123.45 1e13 -> 1.2345E+15 - - --- test some intermediate lengths --- 1234567890123456 -ddmul080 multiply 0.1 1230123456456789 -> 123012345645678.9 -ddmul084 multiply 0.1 1230123456456789 -> 123012345645678.9 -ddmul090 multiply 1230123456456789 0.1 -> 123012345645678.9 -ddmul094 multiply 1230123456456789 0.1 -> 123012345645678.9 - --- test some more edge cases and carries -ddmul101 multiply 9 9 -> 81 -ddmul102 multiply 9 90 -> 810 -ddmul103 multiply 9 900 -> 8100 -ddmul104 multiply 9 9000 -> 81000 -ddmul105 multiply 9 90000 -> 810000 -ddmul106 multiply 9 900000 -> 8100000 -ddmul107 multiply 9 9000000 -> 81000000 -ddmul108 multiply 9 90000000 -> 810000000 -ddmul109 multiply 9 900000000 -> 8100000000 -ddmul110 multiply 9 9000000000 -> 81000000000 -ddmul111 multiply 9 90000000000 -> 810000000000 -ddmul112 multiply 9 900000000000 -> 8100000000000 -ddmul113 multiply 9 9000000000000 -> 81000000000000 -ddmul114 multiply 9 90000000000000 -> 810000000000000 -ddmul115 multiply 9 900000000000000 -> 8100000000000000 ---ddmul116 multiply 9 9000000000000000 -> 81000000000000000 ---ddmul117 multiply 9 90000000000000000 -> 810000000000000000 ---ddmul118 multiply 9 900000000000000000 -> 8100000000000000000 ---ddmul119 multiply 9 9000000000000000000 -> 81000000000000000000 ---ddmul120 multiply 9 90000000000000000000 -> 810000000000000000000 ---ddmul121 multiply 9 900000000000000000000 -> 8100000000000000000000 ---ddmul122 multiply 9 9000000000000000000000 -> 81000000000000000000000 ---ddmul123 multiply 9 90000000000000000000000 -> 810000000000000000000000 --- test some more edge cases without carries -ddmul131 multiply 3 3 -> 9 -ddmul132 multiply 3 30 -> 90 -ddmul133 multiply 3 300 -> 900 -ddmul134 multiply 3 3000 -> 9000 -ddmul135 multiply 3 30000 -> 90000 -ddmul136 multiply 3 300000 -> 900000 -ddmul137 multiply 3 3000000 -> 9000000 -ddmul138 multiply 3 30000000 -> 90000000 -ddmul139 multiply 3 300000000 -> 900000000 -ddmul140 multiply 3 3000000000 -> 9000000000 -ddmul141 multiply 3 30000000000 -> 90000000000 -ddmul142 multiply 3 300000000000 -> 900000000000 -ddmul143 multiply 3 3000000000000 -> 9000000000000 -ddmul144 multiply 3 30000000000000 -> 90000000000000 -ddmul145 multiply 3 300000000000000 -> 900000000000000 - --- test some edge cases with exact rounding -ddmul301 multiply 9 9 -> 81 -ddmul302 multiply 9 90 -> 810 -ddmul303 multiply 9 900 -> 8100 -ddmul304 multiply 9 9000 -> 81000 -ddmul305 multiply 9 90000 -> 810000 -ddmul306 multiply 9 900000 -> 8100000 -ddmul307 multiply 9 9000000 -> 81000000 -ddmul308 multiply 9 90000000 -> 810000000 -ddmul309 multiply 9 900000000 -> 8100000000 -ddmul310 multiply 9 9000000000 -> 81000000000 -ddmul311 multiply 9 90000000000 -> 810000000000 -ddmul312 multiply 9 900000000000 -> 8100000000000 -ddmul313 multiply 9 9000000000000 -> 81000000000000 -ddmul314 multiply 9 90000000000000 -> 810000000000000 -ddmul315 multiply 9 900000000000000 -> 8100000000000000 -ddmul316 multiply 9 9000000000000000 -> 8.100000000000000E+16 Rounded -ddmul317 multiply 90 9000000000000000 -> 8.100000000000000E+17 Rounded -ddmul318 multiply 900 9000000000000000 -> 8.100000000000000E+18 Rounded -ddmul319 multiply 9000 9000000000000000 -> 8.100000000000000E+19 Rounded -ddmul320 multiply 90000 9000000000000000 -> 8.100000000000000E+20 Rounded -ddmul321 multiply 900000 9000000000000000 -> 8.100000000000000E+21 Rounded -ddmul322 multiply 9000000 9000000000000000 -> 8.100000000000000E+22 Rounded -ddmul323 multiply 90000000 9000000000000000 -> 8.100000000000000E+23 Rounded - --- tryzeros cases -ddmul504 multiply 0E-260 1000E-260 -> 0E-398 Clamped -ddmul505 multiply 100E+260 0E+260 -> 0E+369 Clamped --- 65K-1 case -ddmul506 multiply 77.1 850 -> 65535.0 - --- mixed with zeros -ddmul541 multiply 0 -1 -> -0 -ddmul542 multiply -0 -1 -> 0 -ddmul543 multiply 0 1 -> 0 -ddmul544 multiply -0 1 -> -0 -ddmul545 multiply -1 0 -> -0 -ddmul546 multiply -1 -0 -> 0 -ddmul547 multiply 1 0 -> 0 -ddmul548 multiply 1 -0 -> -0 - -ddmul551 multiply 0.0 -1 -> -0.0 -ddmul552 multiply -0.0 -1 -> 0.0 -ddmul553 multiply 0.0 1 -> 0.0 -ddmul554 multiply -0.0 1 -> -0.0 -ddmul555 multiply -1.0 0 -> -0.0 -ddmul556 multiply -1.0 -0 -> 0.0 -ddmul557 multiply 1.0 0 -> 0.0 -ddmul558 multiply 1.0 -0 -> -0.0 - -ddmul561 multiply 0 -1.0 -> -0.0 -ddmul562 multiply -0 -1.0 -> 0.0 -ddmul563 multiply 0 1.0 -> 0.0 -ddmul564 multiply -0 1.0 -> -0.0 -ddmul565 multiply -1 0.0 -> -0.0 -ddmul566 multiply -1 -0.0 -> 0.0 -ddmul567 multiply 1 0.0 -> 0.0 -ddmul568 multiply 1 -0.0 -> -0.0 - -ddmul571 multiply 0.0 -1.0 -> -0.00 -ddmul572 multiply -0.0 -1.0 -> 0.00 -ddmul573 multiply 0.0 1.0 -> 0.00 -ddmul574 multiply -0.0 1.0 -> -0.00 -ddmul575 multiply -1.0 0.0 -> -0.00 -ddmul576 multiply -1.0 -0.0 -> 0.00 -ddmul577 multiply 1.0 0.0 -> 0.00 -ddmul578 multiply 1.0 -0.0 -> -0.00 - - --- Specials -ddmul580 multiply Inf -Inf -> -Infinity -ddmul581 multiply Inf -1000 -> -Infinity -ddmul582 multiply Inf -1 -> -Infinity -ddmul583 multiply Inf -0 -> NaN Invalid_operation -ddmul584 multiply Inf 0 -> NaN Invalid_operation -ddmul585 multiply Inf 1 -> Infinity -ddmul586 multiply Inf 1000 -> Infinity -ddmul587 multiply Inf Inf -> Infinity -ddmul588 multiply -1000 Inf -> -Infinity -ddmul589 multiply -Inf Inf -> -Infinity -ddmul590 multiply -1 Inf -> -Infinity -ddmul591 multiply -0 Inf -> NaN Invalid_operation -ddmul592 multiply 0 Inf -> NaN Invalid_operation -ddmul593 multiply 1 Inf -> Infinity -ddmul594 multiply 1000 Inf -> Infinity -ddmul595 multiply Inf Inf -> Infinity - -ddmul600 multiply -Inf -Inf -> Infinity -ddmul601 multiply -Inf -1000 -> Infinity -ddmul602 multiply -Inf -1 -> Infinity -ddmul603 multiply -Inf -0 -> NaN Invalid_operation -ddmul604 multiply -Inf 0 -> NaN Invalid_operation -ddmul605 multiply -Inf 1 -> -Infinity -ddmul606 multiply -Inf 1000 -> -Infinity -ddmul607 multiply -Inf Inf -> -Infinity -ddmul608 multiply -1000 Inf -> -Infinity -ddmul609 multiply -Inf -Inf -> Infinity -ddmul610 multiply -1 -Inf -> Infinity -ddmul611 multiply -0 -Inf -> NaN Invalid_operation -ddmul612 multiply 0 -Inf -> NaN Invalid_operation -ddmul613 multiply 1 -Inf -> -Infinity -ddmul614 multiply 1000 -Inf -> -Infinity -ddmul615 multiply Inf -Inf -> -Infinity - -ddmul621 multiply NaN -Inf -> NaN -ddmul622 multiply NaN -1000 -> NaN -ddmul623 multiply NaN -1 -> NaN -ddmul624 multiply NaN -0 -> NaN -ddmul625 multiply NaN 0 -> NaN -ddmul626 multiply NaN 1 -> NaN -ddmul627 multiply NaN 1000 -> NaN -ddmul628 multiply NaN Inf -> NaN -ddmul629 multiply NaN NaN -> NaN -ddmul630 multiply -Inf NaN -> NaN -ddmul631 multiply -1000 NaN -> NaN -ddmul632 multiply -1 NaN -> NaN -ddmul633 multiply -0 NaN -> NaN -ddmul634 multiply 0 NaN -> NaN -ddmul635 multiply 1 NaN -> NaN -ddmul636 multiply 1000 NaN -> NaN -ddmul637 multiply Inf NaN -> NaN - -ddmul641 multiply sNaN -Inf -> NaN Invalid_operation -ddmul642 multiply sNaN -1000 -> NaN Invalid_operation -ddmul643 multiply sNaN -1 -> NaN Invalid_operation -ddmul644 multiply sNaN -0 -> NaN Invalid_operation -ddmul645 multiply sNaN 0 -> NaN Invalid_operation -ddmul646 multiply sNaN 1 -> NaN Invalid_operation -ddmul647 multiply sNaN 1000 -> NaN Invalid_operation -ddmul648 multiply sNaN NaN -> NaN Invalid_operation -ddmul649 multiply sNaN sNaN -> NaN Invalid_operation -ddmul650 multiply NaN sNaN -> NaN Invalid_operation -ddmul651 multiply -Inf sNaN -> NaN Invalid_operation -ddmul652 multiply -1000 sNaN -> NaN Invalid_operation -ddmul653 multiply -1 sNaN -> NaN Invalid_operation -ddmul654 multiply -0 sNaN -> NaN Invalid_operation -ddmul655 multiply 0 sNaN -> NaN Invalid_operation -ddmul656 multiply 1 sNaN -> NaN Invalid_operation -ddmul657 multiply 1000 sNaN -> NaN Invalid_operation -ddmul658 multiply Inf sNaN -> NaN Invalid_operation -ddmul659 multiply NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmul661 multiply NaN9 -Inf -> NaN9 -ddmul662 multiply NaN8 999 -> NaN8 -ddmul663 multiply NaN71 Inf -> NaN71 -ddmul664 multiply NaN6 NaN5 -> NaN6 -ddmul665 multiply -Inf NaN4 -> NaN4 -ddmul666 multiply -999 NaN33 -> NaN33 -ddmul667 multiply Inf NaN2 -> NaN2 - -ddmul671 multiply sNaN99 -Inf -> NaN99 Invalid_operation -ddmul672 multiply sNaN98 -11 -> NaN98 Invalid_operation -ddmul673 multiply sNaN97 NaN -> NaN97 Invalid_operation -ddmul674 multiply sNaN16 sNaN94 -> NaN16 Invalid_operation -ddmul675 multiply NaN95 sNaN93 -> NaN93 Invalid_operation -ddmul676 multiply -Inf sNaN92 -> NaN92 Invalid_operation -ddmul677 multiply 088 sNaN91 -> NaN91 Invalid_operation -ddmul678 multiply Inf sNaN90 -> NaN90 Invalid_operation -ddmul679 multiply NaN sNaN89 -> NaN89 Invalid_operation - -ddmul681 multiply -NaN9 -Inf -> -NaN9 -ddmul682 multiply -NaN8 999 -> -NaN8 -ddmul683 multiply -NaN71 Inf -> -NaN71 -ddmul684 multiply -NaN6 -NaN5 -> -NaN6 -ddmul685 multiply -Inf -NaN4 -> -NaN4 -ddmul686 multiply -999 -NaN33 -> -NaN33 -ddmul687 multiply Inf -NaN2 -> -NaN2 - -ddmul691 multiply -sNaN99 -Inf -> -NaN99 Invalid_operation -ddmul692 multiply -sNaN98 -11 -> -NaN98 Invalid_operation -ddmul693 multiply -sNaN97 NaN -> -NaN97 Invalid_operation -ddmul694 multiply -sNaN16 -sNaN94 -> -NaN16 Invalid_operation -ddmul695 multiply -NaN95 -sNaN93 -> -NaN93 Invalid_operation -ddmul696 multiply -Inf -sNaN92 -> -NaN92 Invalid_operation -ddmul697 multiply 088 -sNaN91 -> -NaN91 Invalid_operation -ddmul698 multiply Inf -sNaN90 -> -NaN90 Invalid_operation -ddmul699 multiply -NaN -sNaN89 -> -NaN89 Invalid_operation - -ddmul701 multiply -NaN -Inf -> -NaN -ddmul702 multiply -NaN 999 -> -NaN -ddmul703 multiply -NaN Inf -> -NaN -ddmul704 multiply -NaN -NaN -> -NaN -ddmul705 multiply -Inf -NaN0 -> -NaN -ddmul706 multiply -999 -NaN -> -NaN -ddmul707 multiply Inf -NaN -> -NaN - -ddmul711 multiply -sNaN -Inf -> -NaN Invalid_operation -ddmul712 multiply -sNaN -11 -> -NaN Invalid_operation -ddmul713 multiply -sNaN00 NaN -> -NaN Invalid_operation -ddmul714 multiply -sNaN -sNaN -> -NaN Invalid_operation -ddmul715 multiply -NaN -sNaN -> -NaN Invalid_operation -ddmul716 multiply -Inf -sNaN -> -NaN Invalid_operation -ddmul717 multiply 088 -sNaN -> -NaN Invalid_operation -ddmul718 multiply Inf -sNaN -> -NaN Invalid_operation -ddmul719 multiply -NaN -sNaN -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results --- signs -ddmul751 multiply 1e+277 1e+311 -> Infinity Overflow Inexact Rounded -ddmul752 multiply 1e+277 -1e+311 -> -Infinity Overflow Inexact Rounded -ddmul753 multiply -1e+277 1e+311 -> -Infinity Overflow Inexact Rounded -ddmul754 multiply -1e+277 -1e+311 -> Infinity Overflow Inexact Rounded -ddmul755 multiply 1e-277 1e-311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul756 multiply 1e-277 -1e-311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul757 multiply -1e-277 1e-311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul758 multiply -1e-277 -1e-311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -ddmul760 multiply 1e-291 1e-101 -> 1E-392 Subnormal -ddmul761 multiply 1e-291 1e-102 -> 1E-393 Subnormal -ddmul762 multiply 1e-291 1e-103 -> 1E-394 Subnormal -ddmul763 multiply 1e-291 1e-104 -> 1E-395 Subnormal -ddmul764 multiply 1e-291 1e-105 -> 1E-396 Subnormal -ddmul765 multiply 1e-291 1e-106 -> 1E-397 Subnormal -ddmul766 multiply 1e-291 1e-107 -> 1E-398 Subnormal -ddmul767 multiply 1e-291 1e-108 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul768 multiply 1e-291 1e-109 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul769 multiply 1e-291 1e-110 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -ddmul770 multiply 1e+60 1e+321 -> 1.000000000000E+381 Clamped -ddmul771 multiply 1e+60 1e+322 -> 1.0000000000000E+382 Clamped -ddmul772 multiply 1e+60 1e+323 -> 1.00000000000000E+383 Clamped -ddmul773 multiply 1e+60 1e+324 -> 1.000000000000000E+384 Clamped -ddmul774 multiply 1e+60 1e+325 -> Infinity Overflow Inexact Rounded -ddmul775 multiply 1e+60 1e+326 -> Infinity Overflow Inexact Rounded -ddmul776 multiply 1e+60 1e+327 -> Infinity Overflow Inexact Rounded -ddmul777 multiply 1e+60 1e+328 -> Infinity Overflow Inexact Rounded -ddmul778 multiply 1e+60 1e+329 -> Infinity Overflow Inexact Rounded -ddmul779 multiply 1e+60 1e+330 -> Infinity Overflow Inexact Rounded - -ddmul801 multiply 1.0000E-394 1 -> 1.0000E-394 Subnormal -ddmul802 multiply 1.000E-394 1e-1 -> 1.000E-395 Subnormal -ddmul803 multiply 1.00E-394 1e-2 -> 1.00E-396 Subnormal -ddmul804 multiply 1.0E-394 1e-3 -> 1.0E-397 Subnormal -ddmul805 multiply 1.0E-394 1e-4 -> 1E-398 Subnormal Rounded -ddmul806 multiply 1.3E-394 1e-4 -> 1E-398 Underflow Subnormal Inexact Rounded -ddmul807 multiply 1.5E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul808 multiply 1.7E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul809 multiply 2.3E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul810 multiply 2.5E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul811 multiply 2.7E-394 1e-4 -> 3E-398 Underflow Subnormal Inexact Rounded -ddmul812 multiply 1.49E-394 1e-4 -> 1E-398 Underflow Subnormal Inexact Rounded -ddmul813 multiply 1.50E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul814 multiply 1.51E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul815 multiply 2.49E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul816 multiply 2.50E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul817 multiply 2.51E-394 1e-4 -> 3E-398 Underflow Subnormal Inexact Rounded - -ddmul818 multiply 1E-394 1e-4 -> 1E-398 Subnormal -ddmul819 multiply 3E-394 1e-5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul820 multiply 5E-394 1e-5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul821 multiply 7E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded -ddmul822 multiply 9E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded -ddmul823 multiply 9.9E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded - -ddmul824 multiply 1E-394 -1e-4 -> -1E-398 Subnormal -ddmul825 multiply 3E-394 -1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul826 multiply -5E-394 1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul827 multiply 7E-394 -1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded -ddmul828 multiply -9E-394 1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded -ddmul829 multiply 9.9E-394 -1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded -ddmul830 multiply 3.0E-394 -1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped - -ddmul831 multiply 1.0E-199 1e-200 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul832 multiply 1.0E-199 1e-199 -> 1E-398 Subnormal Rounded -ddmul833 multiply 1.0E-199 1e-198 -> 1.0E-397 Subnormal -ddmul834 multiply 2.0E-199 2e-198 -> 4.0E-397 Subnormal -ddmul835 multiply 4.0E-199 4e-198 -> 1.60E-396 Subnormal -ddmul836 multiply 10.0E-199 10e-198 -> 1.000E-395 Subnormal -ddmul837 multiply 30.0E-199 30e-198 -> 9.000E-395 Subnormal -ddmul838 multiply 40.0E-199 40e-188 -> 1.6000E-384 Subnormal -ddmul839 multiply 40.0E-199 40e-187 -> 1.6000E-383 -ddmul840 multiply 40.0E-199 40e-186 -> 1.6000E-382 - --- Long operand overflow may be a different path -ddmul870 multiply 100 9.999E+383 -> Infinity Inexact Overflow Rounded -ddmul871 multiply 100 -9.999E+383 -> -Infinity Inexact Overflow Rounded -ddmul872 multiply 9.999E+383 100 -> Infinity Inexact Overflow Rounded -ddmul873 multiply -9.999E+383 100 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -ddmul881 multiply 1.2347E-355 1.2347E-40 -> 1.524E-395 Inexact Rounded Subnormal Underflow -ddmul882 multiply 1.234E-355 1.234E-40 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddmul883 multiply 1.23E-355 1.23E-40 -> 1.513E-395 Inexact Rounded Subnormal Underflow -ddmul884 multiply 1.2E-355 1.2E-40 -> 1.44E-395 Subnormal -ddmul885 multiply 1.2E-355 1.2E-41 -> 1.44E-396 Subnormal -ddmul886 multiply 1.2E-355 1.2E-42 -> 1.4E-397 Subnormal Inexact Rounded Underflow -ddmul887 multiply 1.2E-355 1.3E-42 -> 1.6E-397 Subnormal Inexact Rounded Underflow -ddmul888 multiply 1.3E-355 1.3E-42 -> 1.7E-397 Subnormal Inexact Rounded Underflow -ddmul889 multiply 1.3E-355 1.3E-43 -> 2E-398 Subnormal Inexact Rounded Underflow -ddmul890 multiply 1.3E-356 1.3E-43 -> 0E-398 Clamped Subnormal Inexact Rounded Underflow - -ddmul891 multiply 1.2345E-39 1.234E-355 -> 1.5234E-394 Inexact Rounded Subnormal Underflow -ddmul892 multiply 1.23456E-39 1.234E-355 -> 1.5234E-394 Inexact Rounded Subnormal Underflow -ddmul893 multiply 1.2345E-40 1.234E-355 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddmul894 multiply 1.23456E-40 1.234E-355 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddmul895 multiply 1.2345E-41 1.234E-355 -> 1.52E-396 Inexact Rounded Subnormal Underflow -ddmul896 multiply 1.23456E-41 1.234E-355 -> 1.52E-396 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow --- 1 234567890123456 -ddmul900 multiply 0.3000000000E-191 0.3000000000E-191 -> 9.00000000000000E-384 Subnormal Rounded -ddmul901 multiply 0.3000000001E-191 0.3000000001E-191 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded -ddmul902 multiply 9.999999999999999E-383 0.0999999999999 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded -ddmul903 multiply 9.999999999999999E-383 0.09999999999999 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded -ddmul904 multiply 9.999999999999999E-383 0.099999999999999 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded -ddmul905 multiply 9.999999999999999E-383 0.0999999999999999 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded --- The next rounds to Nmin (b**emin); this is the distinguishing case --- for detecting tininess (before or after rounding) -- if after --- rounding then the result would be the same, but the Underflow flag --- would not be set -ddmul906 multiply 9.999999999999999E-383 0.09999999999999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded --- prove those operands were exact -ddmul907 multiply 9.999999999999999E-383 1 -> 9.999999999999999E-383 -ddmul908 multiply 1 0.09999999999999999 -> 0.09999999999999999 - --- reducing tiniest -ddmul910 multiply 1e-398 0.99 -> 1E-398 Subnormal Inexact Rounded Underflow -ddmul911 multiply 1e-398 0.75 -> 1E-398 Subnormal Inexact Rounded Underflow -ddmul912 multiply 1e-398 0.5 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -ddmul913 multiply 1e-398 0.25 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -ddmul914 multiply 1e-398 0.01 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped - --- hugest -ddmul920 multiply 9999999999999999 9999999999999999 -> 9.999999999999998E+31 Inexact Rounded - --- power-of-ten edge cases -ddmul1001 multiply 1 10 -> 10 -ddmul1002 multiply 1 100 -> 100 -ddmul1003 multiply 1 1000 -> 1000 -ddmul1004 multiply 1 10000 -> 10000 -ddmul1005 multiply 1 100000 -> 100000 -ddmul1006 multiply 1 1000000 -> 1000000 -ddmul1007 multiply 1 10000000 -> 10000000 -ddmul1008 multiply 1 100000000 -> 100000000 -ddmul1009 multiply 1 1000000000 -> 1000000000 -ddmul1010 multiply 1 10000000000 -> 10000000000 -ddmul1011 multiply 1 100000000000 -> 100000000000 -ddmul1012 multiply 1 1000000000000 -> 1000000000000 -ddmul1013 multiply 1 10000000000000 -> 10000000000000 -ddmul1014 multiply 1 100000000000000 -> 100000000000000 -ddmul1015 multiply 1 1000000000000000 -> 1000000000000000 -ddmul1021 multiply 10 1 -> 10 -ddmul1022 multiply 10 10 -> 100 -ddmul1023 multiply 10 100 -> 1000 -ddmul1024 multiply 10 1000 -> 10000 -ddmul1025 multiply 10 10000 -> 100000 -ddmul1026 multiply 10 100000 -> 1000000 -ddmul1027 multiply 10 1000000 -> 10000000 -ddmul1028 multiply 10 10000000 -> 100000000 -ddmul1029 multiply 10 100000000 -> 1000000000 -ddmul1030 multiply 10 1000000000 -> 10000000000 -ddmul1031 multiply 10 10000000000 -> 100000000000 -ddmul1032 multiply 10 100000000000 -> 1000000000000 -ddmul1033 multiply 10 1000000000000 -> 10000000000000 -ddmul1034 multiply 10 10000000000000 -> 100000000000000 -ddmul1035 multiply 10 100000000000000 -> 1000000000000000 -ddmul1041 multiply 100 0.1 -> 10.0 -ddmul1042 multiply 100 1 -> 100 -ddmul1043 multiply 100 10 -> 1000 -ddmul1044 multiply 100 100 -> 10000 -ddmul1045 multiply 100 1000 -> 100000 -ddmul1046 multiply 100 10000 -> 1000000 -ddmul1047 multiply 100 100000 -> 10000000 -ddmul1048 multiply 100 1000000 -> 100000000 -ddmul1049 multiply 100 10000000 -> 1000000000 -ddmul1050 multiply 100 100000000 -> 10000000000 -ddmul1051 multiply 100 1000000000 -> 100000000000 -ddmul1052 multiply 100 10000000000 -> 1000000000000 -ddmul1053 multiply 100 100000000000 -> 10000000000000 -ddmul1054 multiply 100 1000000000000 -> 100000000000000 -ddmul1055 multiply 100 10000000000000 -> 1000000000000000 -ddmul1061 multiply 1000 0.01 -> 10.00 -ddmul1062 multiply 1000 0.1 -> 100.0 -ddmul1063 multiply 1000 1 -> 1000 -ddmul1064 multiply 1000 10 -> 10000 -ddmul1065 multiply 1000 100 -> 100000 -ddmul1066 multiply 1000 1000 -> 1000000 -ddmul1067 multiply 1000 10000 -> 10000000 -ddmul1068 multiply 1000 100000 -> 100000000 -ddmul1069 multiply 1000 1000000 -> 1000000000 -ddmul1070 multiply 1000 10000000 -> 10000000000 -ddmul1071 multiply 1000 100000000 -> 100000000000 -ddmul1072 multiply 1000 1000000000 -> 1000000000000 -ddmul1073 multiply 1000 10000000000 -> 10000000000000 -ddmul1074 multiply 1000 100000000000 -> 100000000000000 -ddmul1075 multiply 1000 1000000000000 -> 1000000000000000 -ddmul1081 multiply 10000 0.001 -> 10.000 -ddmul1082 multiply 10000 0.01 -> 100.00 -ddmul1083 multiply 10000 0.1 -> 1000.0 -ddmul1084 multiply 10000 1 -> 10000 -ddmul1085 multiply 10000 10 -> 100000 -ddmul1086 multiply 10000 100 -> 1000000 -ddmul1087 multiply 10000 1000 -> 10000000 -ddmul1088 multiply 10000 10000 -> 100000000 -ddmul1089 multiply 10000 100000 -> 1000000000 -ddmul1090 multiply 10000 1000000 -> 10000000000 -ddmul1091 multiply 10000 10000000 -> 100000000000 -ddmul1092 multiply 10000 100000000 -> 1000000000000 -ddmul1093 multiply 10000 1000000000 -> 10000000000000 -ddmul1094 multiply 10000 10000000000 -> 100000000000000 -ddmul1095 multiply 10000 100000000000 -> 1000000000000000 - -ddmul1097 multiply 10000 99999999999 -> 999999999990000 -ddmul1098 multiply 10000 99999999999 -> 999999999990000 - - --- Null tests -ddmul9990 multiply 10 # -> NaN Invalid_operation -ddmul9991 multiply # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddMultiply.decTest -- decDouble multiplication -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decDoubles only; all arguments are +-- representable in a decDouble +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmul000 multiply 2 2 -> 4 +ddmul001 multiply 2 3 -> 6 +ddmul002 multiply 5 1 -> 5 +ddmul003 multiply 5 2 -> 10 +ddmul004 multiply 1.20 2 -> 2.40 +ddmul005 multiply 1.20 0 -> 0.00 +ddmul006 multiply 1.20 -2 -> -2.40 +ddmul007 multiply -1.20 2 -> -2.40 +ddmul008 multiply -1.20 0 -> -0.00 +ddmul009 multiply -1.20 -2 -> 2.40 +ddmul010 multiply 5.09 7.1 -> 36.139 +ddmul011 multiply 2.5 4 -> 10.0 +ddmul012 multiply 2.50 4 -> 10.00 +ddmul013 multiply 1.23456789 1.00000000 -> 1.234567890000000 Rounded +ddmul015 multiply 2.50 4 -> 10.00 +ddmul016 multiply 9.999999999 9.999999999 -> 99.99999998000000 Inexact Rounded +ddmul017 multiply 9.999999999 -9.999999999 -> -99.99999998000000 Inexact Rounded +ddmul018 multiply -9.999999999 9.999999999 -> -99.99999998000000 Inexact Rounded +ddmul019 multiply -9.999999999 -9.999999999 -> 99.99999998000000 Inexact Rounded + +-- zeros, etc. +ddmul021 multiply 0 0 -> 0 +ddmul022 multiply 0 -0 -> -0 +ddmul023 multiply -0 0 -> -0 +ddmul024 multiply -0 -0 -> 0 +ddmul025 multiply -0.0 -0.0 -> 0.00 +ddmul026 multiply -0.0 -0.0 -> 0.00 +ddmul027 multiply -0.0 -0.0 -> 0.00 +ddmul028 multiply -0.0 -0.0 -> 0.00 +ddmul030 multiply 5.00 1E-3 -> 0.00500 +ddmul031 multiply 00.00 0.000 -> 0.00000 +ddmul032 multiply 00.00 0E-3 -> 0.00000 -- rhs is 0 +ddmul033 multiply 0E-3 00.00 -> 0.00000 -- lhs is 0 +ddmul034 multiply -5.00 1E-3 -> -0.00500 +ddmul035 multiply -00.00 0.000 -> -0.00000 +ddmul036 multiply -00.00 0E-3 -> -0.00000 -- rhs is 0 +ddmul037 multiply -0E-3 00.00 -> -0.00000 -- lhs is 0 +ddmul038 multiply 5.00 -1E-3 -> -0.00500 +ddmul039 multiply 00.00 -0.000 -> -0.00000 +ddmul040 multiply 00.00 -0E-3 -> -0.00000 -- rhs is 0 +ddmul041 multiply 0E-3 -00.00 -> -0.00000 -- lhs is 0 +ddmul042 multiply -5.00 -1E-3 -> 0.00500 +ddmul043 multiply -00.00 -0.000 -> 0.00000 +ddmul044 multiply -00.00 -0E-3 -> 0.00000 -- rhs is 0 +ddmul045 multiply -0E-3 -00.00 -> 0.00000 -- lhs is 0 + +-- examples from decarith +ddmul050 multiply 1.20 3 -> 3.60 +ddmul051 multiply 7 3 -> 21 +ddmul052 multiply 0.9 0.8 -> 0.72 +ddmul053 multiply 0.9 -0 -> -0.0 +ddmul054 multiply 654321 654321 -> 428135971041 + +ddmul060 multiply 123.45 1e7 -> 1.2345E+9 +ddmul061 multiply 123.45 1e8 -> 1.2345E+10 +ddmul062 multiply 123.45 1e+9 -> 1.2345E+11 +ddmul063 multiply 123.45 1e10 -> 1.2345E+12 +ddmul064 multiply 123.45 1e11 -> 1.2345E+13 +ddmul065 multiply 123.45 1e12 -> 1.2345E+14 +ddmul066 multiply 123.45 1e13 -> 1.2345E+15 + + +-- test some intermediate lengths +-- 1234567890123456 +ddmul080 multiply 0.1 1230123456456789 -> 123012345645678.9 +ddmul084 multiply 0.1 1230123456456789 -> 123012345645678.9 +ddmul090 multiply 1230123456456789 0.1 -> 123012345645678.9 +ddmul094 multiply 1230123456456789 0.1 -> 123012345645678.9 + +-- test some more edge cases and carries +ddmul101 multiply 9 9 -> 81 +ddmul102 multiply 9 90 -> 810 +ddmul103 multiply 9 900 -> 8100 +ddmul104 multiply 9 9000 -> 81000 +ddmul105 multiply 9 90000 -> 810000 +ddmul106 multiply 9 900000 -> 8100000 +ddmul107 multiply 9 9000000 -> 81000000 +ddmul108 multiply 9 90000000 -> 810000000 +ddmul109 multiply 9 900000000 -> 8100000000 +ddmul110 multiply 9 9000000000 -> 81000000000 +ddmul111 multiply 9 90000000000 -> 810000000000 +ddmul112 multiply 9 900000000000 -> 8100000000000 +ddmul113 multiply 9 9000000000000 -> 81000000000000 +ddmul114 multiply 9 90000000000000 -> 810000000000000 +ddmul115 multiply 9 900000000000000 -> 8100000000000000 +--ddmul116 multiply 9 9000000000000000 -> 81000000000000000 +--ddmul117 multiply 9 90000000000000000 -> 810000000000000000 +--ddmul118 multiply 9 900000000000000000 -> 8100000000000000000 +--ddmul119 multiply 9 9000000000000000000 -> 81000000000000000000 +--ddmul120 multiply 9 90000000000000000000 -> 810000000000000000000 +--ddmul121 multiply 9 900000000000000000000 -> 8100000000000000000000 +--ddmul122 multiply 9 9000000000000000000000 -> 81000000000000000000000 +--ddmul123 multiply 9 90000000000000000000000 -> 810000000000000000000000 +-- test some more edge cases without carries +ddmul131 multiply 3 3 -> 9 +ddmul132 multiply 3 30 -> 90 +ddmul133 multiply 3 300 -> 900 +ddmul134 multiply 3 3000 -> 9000 +ddmul135 multiply 3 30000 -> 90000 +ddmul136 multiply 3 300000 -> 900000 +ddmul137 multiply 3 3000000 -> 9000000 +ddmul138 multiply 3 30000000 -> 90000000 +ddmul139 multiply 3 300000000 -> 900000000 +ddmul140 multiply 3 3000000000 -> 9000000000 +ddmul141 multiply 3 30000000000 -> 90000000000 +ddmul142 multiply 3 300000000000 -> 900000000000 +ddmul143 multiply 3 3000000000000 -> 9000000000000 +ddmul144 multiply 3 30000000000000 -> 90000000000000 +ddmul145 multiply 3 300000000000000 -> 900000000000000 + +-- test some edge cases with exact rounding +ddmul301 multiply 9 9 -> 81 +ddmul302 multiply 9 90 -> 810 +ddmul303 multiply 9 900 -> 8100 +ddmul304 multiply 9 9000 -> 81000 +ddmul305 multiply 9 90000 -> 810000 +ddmul306 multiply 9 900000 -> 8100000 +ddmul307 multiply 9 9000000 -> 81000000 +ddmul308 multiply 9 90000000 -> 810000000 +ddmul309 multiply 9 900000000 -> 8100000000 +ddmul310 multiply 9 9000000000 -> 81000000000 +ddmul311 multiply 9 90000000000 -> 810000000000 +ddmul312 multiply 9 900000000000 -> 8100000000000 +ddmul313 multiply 9 9000000000000 -> 81000000000000 +ddmul314 multiply 9 90000000000000 -> 810000000000000 +ddmul315 multiply 9 900000000000000 -> 8100000000000000 +ddmul316 multiply 9 9000000000000000 -> 8.100000000000000E+16 Rounded +ddmul317 multiply 90 9000000000000000 -> 8.100000000000000E+17 Rounded +ddmul318 multiply 900 9000000000000000 -> 8.100000000000000E+18 Rounded +ddmul319 multiply 9000 9000000000000000 -> 8.100000000000000E+19 Rounded +ddmul320 multiply 90000 9000000000000000 -> 8.100000000000000E+20 Rounded +ddmul321 multiply 900000 9000000000000000 -> 8.100000000000000E+21 Rounded +ddmul322 multiply 9000000 9000000000000000 -> 8.100000000000000E+22 Rounded +ddmul323 multiply 90000000 9000000000000000 -> 8.100000000000000E+23 Rounded + +-- tryzeros cases +ddmul504 multiply 0E-260 1000E-260 -> 0E-398 Clamped +ddmul505 multiply 100E+260 0E+260 -> 0E+369 Clamped +-- 65K-1 case +ddmul506 multiply 77.1 850 -> 65535.0 + +-- mixed with zeros +ddmul541 multiply 0 -1 -> -0 +ddmul542 multiply -0 -1 -> 0 +ddmul543 multiply 0 1 -> 0 +ddmul544 multiply -0 1 -> -0 +ddmul545 multiply -1 0 -> -0 +ddmul546 multiply -1 -0 -> 0 +ddmul547 multiply 1 0 -> 0 +ddmul548 multiply 1 -0 -> -0 + +ddmul551 multiply 0.0 -1 -> -0.0 +ddmul552 multiply -0.0 -1 -> 0.0 +ddmul553 multiply 0.0 1 -> 0.0 +ddmul554 multiply -0.0 1 -> -0.0 +ddmul555 multiply -1.0 0 -> -0.0 +ddmul556 multiply -1.0 -0 -> 0.0 +ddmul557 multiply 1.0 0 -> 0.0 +ddmul558 multiply 1.0 -0 -> -0.0 + +ddmul561 multiply 0 -1.0 -> -0.0 +ddmul562 multiply -0 -1.0 -> 0.0 +ddmul563 multiply 0 1.0 -> 0.0 +ddmul564 multiply -0 1.0 -> -0.0 +ddmul565 multiply -1 0.0 -> -0.0 +ddmul566 multiply -1 -0.0 -> 0.0 +ddmul567 multiply 1 0.0 -> 0.0 +ddmul568 multiply 1 -0.0 -> -0.0 + +ddmul571 multiply 0.0 -1.0 -> -0.00 +ddmul572 multiply -0.0 -1.0 -> 0.00 +ddmul573 multiply 0.0 1.0 -> 0.00 +ddmul574 multiply -0.0 1.0 -> -0.00 +ddmul575 multiply -1.0 0.0 -> -0.00 +ddmul576 multiply -1.0 -0.0 -> 0.00 +ddmul577 multiply 1.0 0.0 -> 0.00 +ddmul578 multiply 1.0 -0.0 -> -0.00 + + +-- Specials +ddmul580 multiply Inf -Inf -> -Infinity +ddmul581 multiply Inf -1000 -> -Infinity +ddmul582 multiply Inf -1 -> -Infinity +ddmul583 multiply Inf -0 -> NaN Invalid_operation +ddmul584 multiply Inf 0 -> NaN Invalid_operation +ddmul585 multiply Inf 1 -> Infinity +ddmul586 multiply Inf 1000 -> Infinity +ddmul587 multiply Inf Inf -> Infinity +ddmul588 multiply -1000 Inf -> -Infinity +ddmul589 multiply -Inf Inf -> -Infinity +ddmul590 multiply -1 Inf -> -Infinity +ddmul591 multiply -0 Inf -> NaN Invalid_operation +ddmul592 multiply 0 Inf -> NaN Invalid_operation +ddmul593 multiply 1 Inf -> Infinity +ddmul594 multiply 1000 Inf -> Infinity +ddmul595 multiply Inf Inf -> Infinity + +ddmul600 multiply -Inf -Inf -> Infinity +ddmul601 multiply -Inf -1000 -> Infinity +ddmul602 multiply -Inf -1 -> Infinity +ddmul603 multiply -Inf -0 -> NaN Invalid_operation +ddmul604 multiply -Inf 0 -> NaN Invalid_operation +ddmul605 multiply -Inf 1 -> -Infinity +ddmul606 multiply -Inf 1000 -> -Infinity +ddmul607 multiply -Inf Inf -> -Infinity +ddmul608 multiply -1000 Inf -> -Infinity +ddmul609 multiply -Inf -Inf -> Infinity +ddmul610 multiply -1 -Inf -> Infinity +ddmul611 multiply -0 -Inf -> NaN Invalid_operation +ddmul612 multiply 0 -Inf -> NaN Invalid_operation +ddmul613 multiply 1 -Inf -> -Infinity +ddmul614 multiply 1000 -Inf -> -Infinity +ddmul615 multiply Inf -Inf -> -Infinity + +ddmul621 multiply NaN -Inf -> NaN +ddmul622 multiply NaN -1000 -> NaN +ddmul623 multiply NaN -1 -> NaN +ddmul624 multiply NaN -0 -> NaN +ddmul625 multiply NaN 0 -> NaN +ddmul626 multiply NaN 1 -> NaN +ddmul627 multiply NaN 1000 -> NaN +ddmul628 multiply NaN Inf -> NaN +ddmul629 multiply NaN NaN -> NaN +ddmul630 multiply -Inf NaN -> NaN +ddmul631 multiply -1000 NaN -> NaN +ddmul632 multiply -1 NaN -> NaN +ddmul633 multiply -0 NaN -> NaN +ddmul634 multiply 0 NaN -> NaN +ddmul635 multiply 1 NaN -> NaN +ddmul636 multiply 1000 NaN -> NaN +ddmul637 multiply Inf NaN -> NaN + +ddmul641 multiply sNaN -Inf -> NaN Invalid_operation +ddmul642 multiply sNaN -1000 -> NaN Invalid_operation +ddmul643 multiply sNaN -1 -> NaN Invalid_operation +ddmul644 multiply sNaN -0 -> NaN Invalid_operation +ddmul645 multiply sNaN 0 -> NaN Invalid_operation +ddmul646 multiply sNaN 1 -> NaN Invalid_operation +ddmul647 multiply sNaN 1000 -> NaN Invalid_operation +ddmul648 multiply sNaN NaN -> NaN Invalid_operation +ddmul649 multiply sNaN sNaN -> NaN Invalid_operation +ddmul650 multiply NaN sNaN -> NaN Invalid_operation +ddmul651 multiply -Inf sNaN -> NaN Invalid_operation +ddmul652 multiply -1000 sNaN -> NaN Invalid_operation +ddmul653 multiply -1 sNaN -> NaN Invalid_operation +ddmul654 multiply -0 sNaN -> NaN Invalid_operation +ddmul655 multiply 0 sNaN -> NaN Invalid_operation +ddmul656 multiply 1 sNaN -> NaN Invalid_operation +ddmul657 multiply 1000 sNaN -> NaN Invalid_operation +ddmul658 multiply Inf sNaN -> NaN Invalid_operation +ddmul659 multiply NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmul661 multiply NaN9 -Inf -> NaN9 +ddmul662 multiply NaN8 999 -> NaN8 +ddmul663 multiply NaN71 Inf -> NaN71 +ddmul664 multiply NaN6 NaN5 -> NaN6 +ddmul665 multiply -Inf NaN4 -> NaN4 +ddmul666 multiply -999 NaN33 -> NaN33 +ddmul667 multiply Inf NaN2 -> NaN2 + +ddmul671 multiply sNaN99 -Inf -> NaN99 Invalid_operation +ddmul672 multiply sNaN98 -11 -> NaN98 Invalid_operation +ddmul673 multiply sNaN97 NaN -> NaN97 Invalid_operation +ddmul674 multiply sNaN16 sNaN94 -> NaN16 Invalid_operation +ddmul675 multiply NaN95 sNaN93 -> NaN93 Invalid_operation +ddmul676 multiply -Inf sNaN92 -> NaN92 Invalid_operation +ddmul677 multiply 088 sNaN91 -> NaN91 Invalid_operation +ddmul678 multiply Inf sNaN90 -> NaN90 Invalid_operation +ddmul679 multiply NaN sNaN89 -> NaN89 Invalid_operation + +ddmul681 multiply -NaN9 -Inf -> -NaN9 +ddmul682 multiply -NaN8 999 -> -NaN8 +ddmul683 multiply -NaN71 Inf -> -NaN71 +ddmul684 multiply -NaN6 -NaN5 -> -NaN6 +ddmul685 multiply -Inf -NaN4 -> -NaN4 +ddmul686 multiply -999 -NaN33 -> -NaN33 +ddmul687 multiply Inf -NaN2 -> -NaN2 + +ddmul691 multiply -sNaN99 -Inf -> -NaN99 Invalid_operation +ddmul692 multiply -sNaN98 -11 -> -NaN98 Invalid_operation +ddmul693 multiply -sNaN97 NaN -> -NaN97 Invalid_operation +ddmul694 multiply -sNaN16 -sNaN94 -> -NaN16 Invalid_operation +ddmul695 multiply -NaN95 -sNaN93 -> -NaN93 Invalid_operation +ddmul696 multiply -Inf -sNaN92 -> -NaN92 Invalid_operation +ddmul697 multiply 088 -sNaN91 -> -NaN91 Invalid_operation +ddmul698 multiply Inf -sNaN90 -> -NaN90 Invalid_operation +ddmul699 multiply -NaN -sNaN89 -> -NaN89 Invalid_operation + +ddmul701 multiply -NaN -Inf -> -NaN +ddmul702 multiply -NaN 999 -> -NaN +ddmul703 multiply -NaN Inf -> -NaN +ddmul704 multiply -NaN -NaN -> -NaN +ddmul705 multiply -Inf -NaN0 -> -NaN +ddmul706 multiply -999 -NaN -> -NaN +ddmul707 multiply Inf -NaN -> -NaN + +ddmul711 multiply -sNaN -Inf -> -NaN Invalid_operation +ddmul712 multiply -sNaN -11 -> -NaN Invalid_operation +ddmul713 multiply -sNaN00 NaN -> -NaN Invalid_operation +ddmul714 multiply -sNaN -sNaN -> -NaN Invalid_operation +ddmul715 multiply -NaN -sNaN -> -NaN Invalid_operation +ddmul716 multiply -Inf -sNaN -> -NaN Invalid_operation +ddmul717 multiply 088 -sNaN -> -NaN Invalid_operation +ddmul718 multiply Inf -sNaN -> -NaN Invalid_operation +ddmul719 multiply -NaN -sNaN -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +-- signs +ddmul751 multiply 1e+277 1e+311 -> Infinity Overflow Inexact Rounded +ddmul752 multiply 1e+277 -1e+311 -> -Infinity Overflow Inexact Rounded +ddmul753 multiply -1e+277 1e+311 -> -Infinity Overflow Inexact Rounded +ddmul754 multiply -1e+277 -1e+311 -> Infinity Overflow Inexact Rounded +ddmul755 multiply 1e-277 1e-311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul756 multiply 1e-277 -1e-311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul757 multiply -1e-277 1e-311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul758 multiply -1e-277 -1e-311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +ddmul760 multiply 1e-291 1e-101 -> 1E-392 Subnormal +ddmul761 multiply 1e-291 1e-102 -> 1E-393 Subnormal +ddmul762 multiply 1e-291 1e-103 -> 1E-394 Subnormal +ddmul763 multiply 1e-291 1e-104 -> 1E-395 Subnormal +ddmul764 multiply 1e-291 1e-105 -> 1E-396 Subnormal +ddmul765 multiply 1e-291 1e-106 -> 1E-397 Subnormal +ddmul766 multiply 1e-291 1e-107 -> 1E-398 Subnormal +ddmul767 multiply 1e-291 1e-108 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul768 multiply 1e-291 1e-109 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul769 multiply 1e-291 1e-110 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +ddmul770 multiply 1e+60 1e+321 -> 1.000000000000E+381 Clamped +ddmul771 multiply 1e+60 1e+322 -> 1.0000000000000E+382 Clamped +ddmul772 multiply 1e+60 1e+323 -> 1.00000000000000E+383 Clamped +ddmul773 multiply 1e+60 1e+324 -> 1.000000000000000E+384 Clamped +ddmul774 multiply 1e+60 1e+325 -> Infinity Overflow Inexact Rounded +ddmul775 multiply 1e+60 1e+326 -> Infinity Overflow Inexact Rounded +ddmul776 multiply 1e+60 1e+327 -> Infinity Overflow Inexact Rounded +ddmul777 multiply 1e+60 1e+328 -> Infinity Overflow Inexact Rounded +ddmul778 multiply 1e+60 1e+329 -> Infinity Overflow Inexact Rounded +ddmul779 multiply 1e+60 1e+330 -> Infinity Overflow Inexact Rounded + +ddmul801 multiply 1.0000E-394 1 -> 1.0000E-394 Subnormal +ddmul802 multiply 1.000E-394 1e-1 -> 1.000E-395 Subnormal +ddmul803 multiply 1.00E-394 1e-2 -> 1.00E-396 Subnormal +ddmul804 multiply 1.0E-394 1e-3 -> 1.0E-397 Subnormal +ddmul805 multiply 1.0E-394 1e-4 -> 1E-398 Subnormal Rounded +ddmul806 multiply 1.3E-394 1e-4 -> 1E-398 Underflow Subnormal Inexact Rounded +ddmul807 multiply 1.5E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul808 multiply 1.7E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul809 multiply 2.3E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul810 multiply 2.5E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul811 multiply 2.7E-394 1e-4 -> 3E-398 Underflow Subnormal Inexact Rounded +ddmul812 multiply 1.49E-394 1e-4 -> 1E-398 Underflow Subnormal Inexact Rounded +ddmul813 multiply 1.50E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul814 multiply 1.51E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul815 multiply 2.49E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul816 multiply 2.50E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul817 multiply 2.51E-394 1e-4 -> 3E-398 Underflow Subnormal Inexact Rounded + +ddmul818 multiply 1E-394 1e-4 -> 1E-398 Subnormal +ddmul819 multiply 3E-394 1e-5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul820 multiply 5E-394 1e-5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul821 multiply 7E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded +ddmul822 multiply 9E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded +ddmul823 multiply 9.9E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded + +ddmul824 multiply 1E-394 -1e-4 -> -1E-398 Subnormal +ddmul825 multiply 3E-394 -1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul826 multiply -5E-394 1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul827 multiply 7E-394 -1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded +ddmul828 multiply -9E-394 1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded +ddmul829 multiply 9.9E-394 -1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded +ddmul830 multiply 3.0E-394 -1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped + +ddmul831 multiply 1.0E-199 1e-200 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul832 multiply 1.0E-199 1e-199 -> 1E-398 Subnormal Rounded +ddmul833 multiply 1.0E-199 1e-198 -> 1.0E-397 Subnormal +ddmul834 multiply 2.0E-199 2e-198 -> 4.0E-397 Subnormal +ddmul835 multiply 4.0E-199 4e-198 -> 1.60E-396 Subnormal +ddmul836 multiply 10.0E-199 10e-198 -> 1.000E-395 Subnormal +ddmul837 multiply 30.0E-199 30e-198 -> 9.000E-395 Subnormal +ddmul838 multiply 40.0E-199 40e-188 -> 1.6000E-384 Subnormal +ddmul839 multiply 40.0E-199 40e-187 -> 1.6000E-383 +ddmul840 multiply 40.0E-199 40e-186 -> 1.6000E-382 + +-- Long operand overflow may be a different path +ddmul870 multiply 100 9.999E+383 -> Infinity Inexact Overflow Rounded +ddmul871 multiply 100 -9.999E+383 -> -Infinity Inexact Overflow Rounded +ddmul872 multiply 9.999E+383 100 -> Infinity Inexact Overflow Rounded +ddmul873 multiply -9.999E+383 100 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +ddmul881 multiply 1.2347E-355 1.2347E-40 -> 1.524E-395 Inexact Rounded Subnormal Underflow +ddmul882 multiply 1.234E-355 1.234E-40 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddmul883 multiply 1.23E-355 1.23E-40 -> 1.513E-395 Inexact Rounded Subnormal Underflow +ddmul884 multiply 1.2E-355 1.2E-40 -> 1.44E-395 Subnormal +ddmul885 multiply 1.2E-355 1.2E-41 -> 1.44E-396 Subnormal +ddmul886 multiply 1.2E-355 1.2E-42 -> 1.4E-397 Subnormal Inexact Rounded Underflow +ddmul887 multiply 1.2E-355 1.3E-42 -> 1.6E-397 Subnormal Inexact Rounded Underflow +ddmul888 multiply 1.3E-355 1.3E-42 -> 1.7E-397 Subnormal Inexact Rounded Underflow +ddmul889 multiply 1.3E-355 1.3E-43 -> 2E-398 Subnormal Inexact Rounded Underflow +ddmul890 multiply 1.3E-356 1.3E-43 -> 0E-398 Clamped Subnormal Inexact Rounded Underflow + +ddmul891 multiply 1.2345E-39 1.234E-355 -> 1.5234E-394 Inexact Rounded Subnormal Underflow +ddmul892 multiply 1.23456E-39 1.234E-355 -> 1.5234E-394 Inexact Rounded Subnormal Underflow +ddmul893 multiply 1.2345E-40 1.234E-355 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddmul894 multiply 1.23456E-40 1.234E-355 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddmul895 multiply 1.2345E-41 1.234E-355 -> 1.52E-396 Inexact Rounded Subnormal Underflow +ddmul896 multiply 1.23456E-41 1.234E-355 -> 1.52E-396 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +-- 1 234567890123456 +ddmul900 multiply 0.3000000000E-191 0.3000000000E-191 -> 9.00000000000000E-384 Subnormal Rounded +ddmul901 multiply 0.3000000001E-191 0.3000000001E-191 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded +ddmul902 multiply 9.999999999999999E-383 0.0999999999999 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded +ddmul903 multiply 9.999999999999999E-383 0.09999999999999 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded +ddmul904 multiply 9.999999999999999E-383 0.099999999999999 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded +ddmul905 multiply 9.999999999999999E-383 0.0999999999999999 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded +-- The next rounds to Nmin (b**emin); this is the distinguishing case +-- for detecting tininess (before or after rounding) -- if after +-- rounding then the result would be the same, but the Underflow flag +-- would not be set +ddmul906 multiply 9.999999999999999E-383 0.09999999999999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +-- prove those operands were exact +ddmul907 multiply 9.999999999999999E-383 1 -> 9.999999999999999E-383 +ddmul908 multiply 1 0.09999999999999999 -> 0.09999999999999999 + +-- reducing tiniest +ddmul910 multiply 1e-398 0.99 -> 1E-398 Subnormal Inexact Rounded Underflow +ddmul911 multiply 1e-398 0.75 -> 1E-398 Subnormal Inexact Rounded Underflow +ddmul912 multiply 1e-398 0.5 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +ddmul913 multiply 1e-398 0.25 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +ddmul914 multiply 1e-398 0.01 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped + +-- hugest +ddmul920 multiply 9999999999999999 9999999999999999 -> 9.999999999999998E+31 Inexact Rounded + +-- power-of-ten edge cases +ddmul1001 multiply 1 10 -> 10 +ddmul1002 multiply 1 100 -> 100 +ddmul1003 multiply 1 1000 -> 1000 +ddmul1004 multiply 1 10000 -> 10000 +ddmul1005 multiply 1 100000 -> 100000 +ddmul1006 multiply 1 1000000 -> 1000000 +ddmul1007 multiply 1 10000000 -> 10000000 +ddmul1008 multiply 1 100000000 -> 100000000 +ddmul1009 multiply 1 1000000000 -> 1000000000 +ddmul1010 multiply 1 10000000000 -> 10000000000 +ddmul1011 multiply 1 100000000000 -> 100000000000 +ddmul1012 multiply 1 1000000000000 -> 1000000000000 +ddmul1013 multiply 1 10000000000000 -> 10000000000000 +ddmul1014 multiply 1 100000000000000 -> 100000000000000 +ddmul1015 multiply 1 1000000000000000 -> 1000000000000000 +ddmul1021 multiply 10 1 -> 10 +ddmul1022 multiply 10 10 -> 100 +ddmul1023 multiply 10 100 -> 1000 +ddmul1024 multiply 10 1000 -> 10000 +ddmul1025 multiply 10 10000 -> 100000 +ddmul1026 multiply 10 100000 -> 1000000 +ddmul1027 multiply 10 1000000 -> 10000000 +ddmul1028 multiply 10 10000000 -> 100000000 +ddmul1029 multiply 10 100000000 -> 1000000000 +ddmul1030 multiply 10 1000000000 -> 10000000000 +ddmul1031 multiply 10 10000000000 -> 100000000000 +ddmul1032 multiply 10 100000000000 -> 1000000000000 +ddmul1033 multiply 10 1000000000000 -> 10000000000000 +ddmul1034 multiply 10 10000000000000 -> 100000000000000 +ddmul1035 multiply 10 100000000000000 -> 1000000000000000 +ddmul1041 multiply 100 0.1 -> 10.0 +ddmul1042 multiply 100 1 -> 100 +ddmul1043 multiply 100 10 -> 1000 +ddmul1044 multiply 100 100 -> 10000 +ddmul1045 multiply 100 1000 -> 100000 +ddmul1046 multiply 100 10000 -> 1000000 +ddmul1047 multiply 100 100000 -> 10000000 +ddmul1048 multiply 100 1000000 -> 100000000 +ddmul1049 multiply 100 10000000 -> 1000000000 +ddmul1050 multiply 100 100000000 -> 10000000000 +ddmul1051 multiply 100 1000000000 -> 100000000000 +ddmul1052 multiply 100 10000000000 -> 1000000000000 +ddmul1053 multiply 100 100000000000 -> 10000000000000 +ddmul1054 multiply 100 1000000000000 -> 100000000000000 +ddmul1055 multiply 100 10000000000000 -> 1000000000000000 +ddmul1061 multiply 1000 0.01 -> 10.00 +ddmul1062 multiply 1000 0.1 -> 100.0 +ddmul1063 multiply 1000 1 -> 1000 +ddmul1064 multiply 1000 10 -> 10000 +ddmul1065 multiply 1000 100 -> 100000 +ddmul1066 multiply 1000 1000 -> 1000000 +ddmul1067 multiply 1000 10000 -> 10000000 +ddmul1068 multiply 1000 100000 -> 100000000 +ddmul1069 multiply 1000 1000000 -> 1000000000 +ddmul1070 multiply 1000 10000000 -> 10000000000 +ddmul1071 multiply 1000 100000000 -> 100000000000 +ddmul1072 multiply 1000 1000000000 -> 1000000000000 +ddmul1073 multiply 1000 10000000000 -> 10000000000000 +ddmul1074 multiply 1000 100000000000 -> 100000000000000 +ddmul1075 multiply 1000 1000000000000 -> 1000000000000000 +ddmul1081 multiply 10000 0.001 -> 10.000 +ddmul1082 multiply 10000 0.01 -> 100.00 +ddmul1083 multiply 10000 0.1 -> 1000.0 +ddmul1084 multiply 10000 1 -> 10000 +ddmul1085 multiply 10000 10 -> 100000 +ddmul1086 multiply 10000 100 -> 1000000 +ddmul1087 multiply 10000 1000 -> 10000000 +ddmul1088 multiply 10000 10000 -> 100000000 +ddmul1089 multiply 10000 100000 -> 1000000000 +ddmul1090 multiply 10000 1000000 -> 10000000000 +ddmul1091 multiply 10000 10000000 -> 100000000000 +ddmul1092 multiply 10000 100000000 -> 1000000000000 +ddmul1093 multiply 10000 1000000000 -> 10000000000000 +ddmul1094 multiply 10000 10000000000 -> 100000000000000 +ddmul1095 multiply 10000 100000000000 -> 1000000000000000 + +ddmul1097 multiply 10000 99999999999 -> 999999999990000 +ddmul1098 multiply 10000 99999999999 -> 999999999990000 + + +-- Null tests +ddmul9990 multiply 10 # -> NaN Invalid_operation +ddmul9991 multiply # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddNextMinus.decTest b/Lib/test/decimaltestdata/ddNextMinus.decTest index f8a3c0eb329..39f58c14a44 100644 --- a/Lib/test/decimaltestdata/ddNextMinus.decTest +++ b/Lib/test/decimaltestdata/ddNextMinus.decTest @@ -1,126 +1,126 @@ ------------------------------------------------------------------------- --- ddNextMinus.decTest -- decDouble next that is less [754r nextdown] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddnextm001 nextminus 0.9999999999999995 -> 0.9999999999999994 -ddnextm002 nextminus 0.9999999999999996 -> 0.9999999999999995 -ddnextm003 nextminus 0.9999999999999997 -> 0.9999999999999996 -ddnextm004 nextminus 0.9999999999999998 -> 0.9999999999999997 -ddnextm005 nextminus 0.9999999999999999 -> 0.9999999999999998 -ddnextm006 nextminus 1.000000000000000 -> 0.9999999999999999 -ddnextm007 nextminus 1.0 -> 0.9999999999999999 -ddnextm008 nextminus 1 -> 0.9999999999999999 -ddnextm009 nextminus 1.000000000000001 -> 1.000000000000000 -ddnextm010 nextminus 1.000000000000002 -> 1.000000000000001 -ddnextm011 nextminus 1.000000000000003 -> 1.000000000000002 -ddnextm012 nextminus 1.000000000000004 -> 1.000000000000003 -ddnextm013 nextminus 1.000000000000005 -> 1.000000000000004 -ddnextm014 nextminus 1.000000000000006 -> 1.000000000000005 -ddnextm015 nextminus 1.000000000000007 -> 1.000000000000006 -ddnextm016 nextminus 1.000000000000008 -> 1.000000000000007 -ddnextm017 nextminus 1.000000000000009 -> 1.000000000000008 -ddnextm018 nextminus 1.000000000000010 -> 1.000000000000009 -ddnextm019 nextminus 1.000000000000011 -> 1.000000000000010 -ddnextm020 nextminus 1.000000000000012 -> 1.000000000000011 - -ddnextm021 nextminus -0.9999999999999995 -> -0.9999999999999996 -ddnextm022 nextminus -0.9999999999999996 -> -0.9999999999999997 -ddnextm023 nextminus -0.9999999999999997 -> -0.9999999999999998 -ddnextm024 nextminus -0.9999999999999998 -> -0.9999999999999999 -ddnextm025 nextminus -0.9999999999999999 -> -1.000000000000000 -ddnextm026 nextminus -1.000000000000000 -> -1.000000000000001 -ddnextm027 nextminus -1.0 -> -1.000000000000001 -ddnextm028 nextminus -1 -> -1.000000000000001 -ddnextm029 nextminus -1.000000000000001 -> -1.000000000000002 -ddnextm030 nextminus -1.000000000000002 -> -1.000000000000003 -ddnextm031 nextminus -1.000000000000003 -> -1.000000000000004 -ddnextm032 nextminus -1.000000000000004 -> -1.000000000000005 -ddnextm033 nextminus -1.000000000000005 -> -1.000000000000006 -ddnextm034 nextminus -1.000000000000006 -> -1.000000000000007 -ddnextm035 nextminus -1.000000000000007 -> -1.000000000000008 -ddnextm036 nextminus -1.000000000000008 -> -1.000000000000009 -ddnextm037 nextminus -1.000000000000009 -> -1.000000000000010 -ddnextm038 nextminus -1.000000000000010 -> -1.000000000000011 -ddnextm039 nextminus -1.000000000000011 -> -1.000000000000012 - --- ultra-tiny inputs -ddnextm062 nextminus 1E-398 -> 0E-398 -ddnextm065 nextminus -1E-398 -> -2E-398 - --- Zeros -ddnextm100 nextminus -0 -> -1E-398 -ddnextm101 nextminus 0 -> -1E-398 -ddnextm102 nextminus 0.00 -> -1E-398 -ddnextm103 nextminus -0.00 -> -1E-398 -ddnextm104 nextminus 0E-300 -> -1E-398 -ddnextm105 nextminus 0E+300 -> -1E-398 -ddnextm106 nextminus 0E+30000 -> -1E-398 -ddnextm107 nextminus -0E+30000 -> -1E-398 - --- specials -ddnextm150 nextminus Inf -> 9.999999999999999E+384 -ddnextm151 nextminus -Inf -> -Infinity -ddnextm152 nextminus NaN -> NaN -ddnextm153 nextminus sNaN -> NaN Invalid_operation -ddnextm154 nextminus NaN77 -> NaN77 -ddnextm155 nextminus sNaN88 -> NaN88 Invalid_operation -ddnextm156 nextminus -NaN -> -NaN -ddnextm157 nextminus -sNaN -> -NaN Invalid_operation -ddnextm158 nextminus -NaN77 -> -NaN77 -ddnextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -ddnextm170 nextminus 9.999999999999999E+384 -> 9.999999999999998E+384 -ddnextm171 nextminus 9.999999999999998E+384 -> 9.999999999999997E+384 -ddnextm172 nextminus 1E-383 -> 9.99999999999999E-384 -ddnextm173 nextminus 1.000000000000000E-383 -> 9.99999999999999E-384 -ddnextm174 nextminus 9E-398 -> 8E-398 -ddnextm175 nextminus 9.9E-397 -> 9.8E-397 -ddnextm176 nextminus 9.99999999999E-387 -> 9.99999999998E-387 -ddnextm177 nextminus 9.99999999999999E-384 -> 9.99999999999998E-384 -ddnextm178 nextminus 9.99999999999998E-384 -> 9.99999999999997E-384 -ddnextm179 nextminus 9.99999999999997E-384 -> 9.99999999999996E-384 -ddnextm180 nextminus 0E-398 -> -1E-398 -ddnextm181 nextminus 1E-398 -> 0E-398 -ddnextm182 nextminus 2E-398 -> 1E-398 - -ddnextm183 nextminus -0E-398 -> -1E-398 -ddnextm184 nextminus -1E-398 -> -2E-398 -ddnextm185 nextminus -2E-398 -> -3E-398 -ddnextm186 nextminus -10E-398 -> -1.1E-397 -ddnextm187 nextminus -100E-398 -> -1.01E-396 -ddnextm188 nextminus -100000E-398 -> -1.00001E-393 -ddnextm189 nextminus -1.00000000000E-383 -> -1.000000000000001E-383 -ddnextm190 nextminus -1.000000000000000E-383 -> -1.000000000000001E-383 -ddnextm191 nextminus -1E-383 -> -1.000000000000001E-383 -ddnextm192 nextminus -9.999999999999998E+384 -> -9.999999999999999E+384 -ddnextm193 nextminus -9.999999999999999E+384 -> -Infinity - --- Null tests -ddnextm900 nextminus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddNextMinus.decTest -- decDouble next that is less [754r nextdown] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddnextm001 nextminus 0.9999999999999995 -> 0.9999999999999994 +ddnextm002 nextminus 0.9999999999999996 -> 0.9999999999999995 +ddnextm003 nextminus 0.9999999999999997 -> 0.9999999999999996 +ddnextm004 nextminus 0.9999999999999998 -> 0.9999999999999997 +ddnextm005 nextminus 0.9999999999999999 -> 0.9999999999999998 +ddnextm006 nextminus 1.000000000000000 -> 0.9999999999999999 +ddnextm007 nextminus 1.0 -> 0.9999999999999999 +ddnextm008 nextminus 1 -> 0.9999999999999999 +ddnextm009 nextminus 1.000000000000001 -> 1.000000000000000 +ddnextm010 nextminus 1.000000000000002 -> 1.000000000000001 +ddnextm011 nextminus 1.000000000000003 -> 1.000000000000002 +ddnextm012 nextminus 1.000000000000004 -> 1.000000000000003 +ddnextm013 nextminus 1.000000000000005 -> 1.000000000000004 +ddnextm014 nextminus 1.000000000000006 -> 1.000000000000005 +ddnextm015 nextminus 1.000000000000007 -> 1.000000000000006 +ddnextm016 nextminus 1.000000000000008 -> 1.000000000000007 +ddnextm017 nextminus 1.000000000000009 -> 1.000000000000008 +ddnextm018 nextminus 1.000000000000010 -> 1.000000000000009 +ddnextm019 nextminus 1.000000000000011 -> 1.000000000000010 +ddnextm020 nextminus 1.000000000000012 -> 1.000000000000011 + +ddnextm021 nextminus -0.9999999999999995 -> -0.9999999999999996 +ddnextm022 nextminus -0.9999999999999996 -> -0.9999999999999997 +ddnextm023 nextminus -0.9999999999999997 -> -0.9999999999999998 +ddnextm024 nextminus -0.9999999999999998 -> -0.9999999999999999 +ddnextm025 nextminus -0.9999999999999999 -> -1.000000000000000 +ddnextm026 nextminus -1.000000000000000 -> -1.000000000000001 +ddnextm027 nextminus -1.0 -> -1.000000000000001 +ddnextm028 nextminus -1 -> -1.000000000000001 +ddnextm029 nextminus -1.000000000000001 -> -1.000000000000002 +ddnextm030 nextminus -1.000000000000002 -> -1.000000000000003 +ddnextm031 nextminus -1.000000000000003 -> -1.000000000000004 +ddnextm032 nextminus -1.000000000000004 -> -1.000000000000005 +ddnextm033 nextminus -1.000000000000005 -> -1.000000000000006 +ddnextm034 nextminus -1.000000000000006 -> -1.000000000000007 +ddnextm035 nextminus -1.000000000000007 -> -1.000000000000008 +ddnextm036 nextminus -1.000000000000008 -> -1.000000000000009 +ddnextm037 nextminus -1.000000000000009 -> -1.000000000000010 +ddnextm038 nextminus -1.000000000000010 -> -1.000000000000011 +ddnextm039 nextminus -1.000000000000011 -> -1.000000000000012 + +-- ultra-tiny inputs +ddnextm062 nextminus 1E-398 -> 0E-398 +ddnextm065 nextminus -1E-398 -> -2E-398 + +-- Zeros +ddnextm100 nextminus -0 -> -1E-398 +ddnextm101 nextminus 0 -> -1E-398 +ddnextm102 nextminus 0.00 -> -1E-398 +ddnextm103 nextminus -0.00 -> -1E-398 +ddnextm104 nextminus 0E-300 -> -1E-398 +ddnextm105 nextminus 0E+300 -> -1E-398 +ddnextm106 nextminus 0E+30000 -> -1E-398 +ddnextm107 nextminus -0E+30000 -> -1E-398 + +-- specials +ddnextm150 nextminus Inf -> 9.999999999999999E+384 +ddnextm151 nextminus -Inf -> -Infinity +ddnextm152 nextminus NaN -> NaN +ddnextm153 nextminus sNaN -> NaN Invalid_operation +ddnextm154 nextminus NaN77 -> NaN77 +ddnextm155 nextminus sNaN88 -> NaN88 Invalid_operation +ddnextm156 nextminus -NaN -> -NaN +ddnextm157 nextminus -sNaN -> -NaN Invalid_operation +ddnextm158 nextminus -NaN77 -> -NaN77 +ddnextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +ddnextm170 nextminus 9.999999999999999E+384 -> 9.999999999999998E+384 +ddnextm171 nextminus 9.999999999999998E+384 -> 9.999999999999997E+384 +ddnextm172 nextminus 1E-383 -> 9.99999999999999E-384 +ddnextm173 nextminus 1.000000000000000E-383 -> 9.99999999999999E-384 +ddnextm174 nextminus 9E-398 -> 8E-398 +ddnextm175 nextminus 9.9E-397 -> 9.8E-397 +ddnextm176 nextminus 9.99999999999E-387 -> 9.99999999998E-387 +ddnextm177 nextminus 9.99999999999999E-384 -> 9.99999999999998E-384 +ddnextm178 nextminus 9.99999999999998E-384 -> 9.99999999999997E-384 +ddnextm179 nextminus 9.99999999999997E-384 -> 9.99999999999996E-384 +ddnextm180 nextminus 0E-398 -> -1E-398 +ddnextm181 nextminus 1E-398 -> 0E-398 +ddnextm182 nextminus 2E-398 -> 1E-398 + +ddnextm183 nextminus -0E-398 -> -1E-398 +ddnextm184 nextminus -1E-398 -> -2E-398 +ddnextm185 nextminus -2E-398 -> -3E-398 +ddnextm186 nextminus -10E-398 -> -1.1E-397 +ddnextm187 nextminus -100E-398 -> -1.01E-396 +ddnextm188 nextminus -100000E-398 -> -1.00001E-393 +ddnextm189 nextminus -1.00000000000E-383 -> -1.000000000000001E-383 +ddnextm190 nextminus -1.000000000000000E-383 -> -1.000000000000001E-383 +ddnextm191 nextminus -1E-383 -> -1.000000000000001E-383 +ddnextm192 nextminus -9.999999999999998E+384 -> -9.999999999999999E+384 +ddnextm193 nextminus -9.999999999999999E+384 -> -Infinity + +-- Null tests +ddnextm900 nextminus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddNextPlus.decTest b/Lib/test/decimaltestdata/ddNextPlus.decTest index 4a749a18c9f..d41dfbab3f7 100644 --- a/Lib/test/decimaltestdata/ddNextPlus.decTest +++ b/Lib/test/decimaltestdata/ddNextPlus.decTest @@ -1,124 +1,124 @@ ------------------------------------------------------------------------- --- ddNextPlus.decTest -- decDouble next that is greater [754r nextup] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddnextp001 nextplus 0.9999999999999995 -> 0.9999999999999996 -ddnextp002 nextplus 0.9999999999999996 -> 0.9999999999999997 -ddnextp003 nextplus 0.9999999999999997 -> 0.9999999999999998 -ddnextp004 nextplus 0.9999999999999998 -> 0.9999999999999999 -ddnextp005 nextplus 0.9999999999999999 -> 1.000000000000000 -ddnextp006 nextplus 1.000000000000000 -> 1.000000000000001 -ddnextp007 nextplus 1.0 -> 1.000000000000001 -ddnextp008 nextplus 1 -> 1.000000000000001 -ddnextp009 nextplus 1.000000000000001 -> 1.000000000000002 -ddnextp010 nextplus 1.000000000000002 -> 1.000000000000003 -ddnextp011 nextplus 1.000000000000003 -> 1.000000000000004 -ddnextp012 nextplus 1.000000000000004 -> 1.000000000000005 -ddnextp013 nextplus 1.000000000000005 -> 1.000000000000006 -ddnextp014 nextplus 1.000000000000006 -> 1.000000000000007 -ddnextp015 nextplus 1.000000000000007 -> 1.000000000000008 -ddnextp016 nextplus 1.000000000000008 -> 1.000000000000009 -ddnextp017 nextplus 1.000000000000009 -> 1.000000000000010 -ddnextp018 nextplus 1.000000000000010 -> 1.000000000000011 -ddnextp019 nextplus 1.000000000000011 -> 1.000000000000012 - -ddnextp021 nextplus -0.9999999999999995 -> -0.9999999999999994 -ddnextp022 nextplus -0.9999999999999996 -> -0.9999999999999995 -ddnextp023 nextplus -0.9999999999999997 -> -0.9999999999999996 -ddnextp024 nextplus -0.9999999999999998 -> -0.9999999999999997 -ddnextp025 nextplus -0.9999999999999999 -> -0.9999999999999998 -ddnextp026 nextplus -1.000000000000000 -> -0.9999999999999999 -ddnextp027 nextplus -1.0 -> -0.9999999999999999 -ddnextp028 nextplus -1 -> -0.9999999999999999 -ddnextp029 nextplus -1.000000000000001 -> -1.000000000000000 -ddnextp030 nextplus -1.000000000000002 -> -1.000000000000001 -ddnextp031 nextplus -1.000000000000003 -> -1.000000000000002 -ddnextp032 nextplus -1.000000000000004 -> -1.000000000000003 -ddnextp033 nextplus -1.000000000000005 -> -1.000000000000004 -ddnextp034 nextplus -1.000000000000006 -> -1.000000000000005 -ddnextp035 nextplus -1.000000000000007 -> -1.000000000000006 -ddnextp036 nextplus -1.000000000000008 -> -1.000000000000007 -ddnextp037 nextplus -1.000000000000009 -> -1.000000000000008 -ddnextp038 nextplus -1.000000000000010 -> -1.000000000000009 -ddnextp039 nextplus -1.000000000000011 -> -1.000000000000010 -ddnextp040 nextplus -1.000000000000012 -> -1.000000000000011 - --- Zeros -ddnextp100 nextplus 0 -> 1E-398 -ddnextp101 nextplus 0.00 -> 1E-398 -ddnextp102 nextplus 0E-300 -> 1E-398 -ddnextp103 nextplus 0E+300 -> 1E-398 -ddnextp104 nextplus 0E+30000 -> 1E-398 -ddnextp105 nextplus -0 -> 1E-398 -ddnextp106 nextplus -0.00 -> 1E-398 -ddnextp107 nextplus -0E-300 -> 1E-398 -ddnextp108 nextplus -0E+300 -> 1E-398 -ddnextp109 nextplus -0E+30000 -> 1E-398 - --- specials -ddnextp150 nextplus Inf -> Infinity -ddnextp151 nextplus -Inf -> -9.999999999999999E+384 -ddnextp152 nextplus NaN -> NaN -ddnextp153 nextplus sNaN -> NaN Invalid_operation -ddnextp154 nextplus NaN77 -> NaN77 -ddnextp155 nextplus sNaN88 -> NaN88 Invalid_operation -ddnextp156 nextplus -NaN -> -NaN -ddnextp157 nextplus -sNaN -> -NaN Invalid_operation -ddnextp158 nextplus -NaN77 -> -NaN77 -ddnextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -ddnextp170 nextplus -9.999999999999999E+384 -> -9.999999999999998E+384 -ddnextp171 nextplus -9.999999999999998E+384 -> -9.999999999999997E+384 -ddnextp172 nextplus -1E-383 -> -9.99999999999999E-384 -ddnextp173 nextplus -1.000000000000000E-383 -> -9.99999999999999E-384 -ddnextp174 nextplus -9E-398 -> -8E-398 -ddnextp175 nextplus -9.9E-397 -> -9.8E-397 -ddnextp176 nextplus -9.99999999999E-387 -> -9.99999999998E-387 -ddnextp177 nextplus -9.99999999999999E-384 -> -9.99999999999998E-384 -ddnextp178 nextplus -9.99999999999998E-384 -> -9.99999999999997E-384 -ddnextp179 nextplus -9.99999999999997E-384 -> -9.99999999999996E-384 -ddnextp180 nextplus -0E-398 -> 1E-398 -ddnextp181 nextplus -1E-398 -> -0E-398 -ddnextp182 nextplus -2E-398 -> -1E-398 - -ddnextp183 nextplus 0E-398 -> 1E-398 -ddnextp184 nextplus 1E-398 -> 2E-398 -ddnextp185 nextplus 2E-398 -> 3E-398 -ddnextp186 nextplus 10E-398 -> 1.1E-397 -ddnextp187 nextplus 100E-398 -> 1.01E-396 -ddnextp188 nextplus 100000E-398 -> 1.00001E-393 -ddnextp189 nextplus 1.00000000000E-383 -> 1.000000000000001E-383 -ddnextp190 nextplus 1.000000000000000E-383 -> 1.000000000000001E-383 -ddnextp191 nextplus 1E-383 -> 1.000000000000001E-383 -ddnextp192 nextplus 9.999999999999998E+384 -> 9.999999999999999E+384 -ddnextp193 nextplus 9.999999999999999E+384 -> Infinity - --- Null tests -ddnextp900 nextplus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddNextPlus.decTest -- decDouble next that is greater [754r nextup] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddnextp001 nextplus 0.9999999999999995 -> 0.9999999999999996 +ddnextp002 nextplus 0.9999999999999996 -> 0.9999999999999997 +ddnextp003 nextplus 0.9999999999999997 -> 0.9999999999999998 +ddnextp004 nextplus 0.9999999999999998 -> 0.9999999999999999 +ddnextp005 nextplus 0.9999999999999999 -> 1.000000000000000 +ddnextp006 nextplus 1.000000000000000 -> 1.000000000000001 +ddnextp007 nextplus 1.0 -> 1.000000000000001 +ddnextp008 nextplus 1 -> 1.000000000000001 +ddnextp009 nextplus 1.000000000000001 -> 1.000000000000002 +ddnextp010 nextplus 1.000000000000002 -> 1.000000000000003 +ddnextp011 nextplus 1.000000000000003 -> 1.000000000000004 +ddnextp012 nextplus 1.000000000000004 -> 1.000000000000005 +ddnextp013 nextplus 1.000000000000005 -> 1.000000000000006 +ddnextp014 nextplus 1.000000000000006 -> 1.000000000000007 +ddnextp015 nextplus 1.000000000000007 -> 1.000000000000008 +ddnextp016 nextplus 1.000000000000008 -> 1.000000000000009 +ddnextp017 nextplus 1.000000000000009 -> 1.000000000000010 +ddnextp018 nextplus 1.000000000000010 -> 1.000000000000011 +ddnextp019 nextplus 1.000000000000011 -> 1.000000000000012 + +ddnextp021 nextplus -0.9999999999999995 -> -0.9999999999999994 +ddnextp022 nextplus -0.9999999999999996 -> -0.9999999999999995 +ddnextp023 nextplus -0.9999999999999997 -> -0.9999999999999996 +ddnextp024 nextplus -0.9999999999999998 -> -0.9999999999999997 +ddnextp025 nextplus -0.9999999999999999 -> -0.9999999999999998 +ddnextp026 nextplus -1.000000000000000 -> -0.9999999999999999 +ddnextp027 nextplus -1.0 -> -0.9999999999999999 +ddnextp028 nextplus -1 -> -0.9999999999999999 +ddnextp029 nextplus -1.000000000000001 -> -1.000000000000000 +ddnextp030 nextplus -1.000000000000002 -> -1.000000000000001 +ddnextp031 nextplus -1.000000000000003 -> -1.000000000000002 +ddnextp032 nextplus -1.000000000000004 -> -1.000000000000003 +ddnextp033 nextplus -1.000000000000005 -> -1.000000000000004 +ddnextp034 nextplus -1.000000000000006 -> -1.000000000000005 +ddnextp035 nextplus -1.000000000000007 -> -1.000000000000006 +ddnextp036 nextplus -1.000000000000008 -> -1.000000000000007 +ddnextp037 nextplus -1.000000000000009 -> -1.000000000000008 +ddnextp038 nextplus -1.000000000000010 -> -1.000000000000009 +ddnextp039 nextplus -1.000000000000011 -> -1.000000000000010 +ddnextp040 nextplus -1.000000000000012 -> -1.000000000000011 + +-- Zeros +ddnextp100 nextplus 0 -> 1E-398 +ddnextp101 nextplus 0.00 -> 1E-398 +ddnextp102 nextplus 0E-300 -> 1E-398 +ddnextp103 nextplus 0E+300 -> 1E-398 +ddnextp104 nextplus 0E+30000 -> 1E-398 +ddnextp105 nextplus -0 -> 1E-398 +ddnextp106 nextplus -0.00 -> 1E-398 +ddnextp107 nextplus -0E-300 -> 1E-398 +ddnextp108 nextplus -0E+300 -> 1E-398 +ddnextp109 nextplus -0E+30000 -> 1E-398 + +-- specials +ddnextp150 nextplus Inf -> Infinity +ddnextp151 nextplus -Inf -> -9.999999999999999E+384 +ddnextp152 nextplus NaN -> NaN +ddnextp153 nextplus sNaN -> NaN Invalid_operation +ddnextp154 nextplus NaN77 -> NaN77 +ddnextp155 nextplus sNaN88 -> NaN88 Invalid_operation +ddnextp156 nextplus -NaN -> -NaN +ddnextp157 nextplus -sNaN -> -NaN Invalid_operation +ddnextp158 nextplus -NaN77 -> -NaN77 +ddnextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +ddnextp170 nextplus -9.999999999999999E+384 -> -9.999999999999998E+384 +ddnextp171 nextplus -9.999999999999998E+384 -> -9.999999999999997E+384 +ddnextp172 nextplus -1E-383 -> -9.99999999999999E-384 +ddnextp173 nextplus -1.000000000000000E-383 -> -9.99999999999999E-384 +ddnextp174 nextplus -9E-398 -> -8E-398 +ddnextp175 nextplus -9.9E-397 -> -9.8E-397 +ddnextp176 nextplus -9.99999999999E-387 -> -9.99999999998E-387 +ddnextp177 nextplus -9.99999999999999E-384 -> -9.99999999999998E-384 +ddnextp178 nextplus -9.99999999999998E-384 -> -9.99999999999997E-384 +ddnextp179 nextplus -9.99999999999997E-384 -> -9.99999999999996E-384 +ddnextp180 nextplus -0E-398 -> 1E-398 +ddnextp181 nextplus -1E-398 -> -0E-398 +ddnextp182 nextplus -2E-398 -> -1E-398 + +ddnextp183 nextplus 0E-398 -> 1E-398 +ddnextp184 nextplus 1E-398 -> 2E-398 +ddnextp185 nextplus 2E-398 -> 3E-398 +ddnextp186 nextplus 10E-398 -> 1.1E-397 +ddnextp187 nextplus 100E-398 -> 1.01E-396 +ddnextp188 nextplus 100000E-398 -> 1.00001E-393 +ddnextp189 nextplus 1.00000000000E-383 -> 1.000000000000001E-383 +ddnextp190 nextplus 1.000000000000000E-383 -> 1.000000000000001E-383 +ddnextp191 nextplus 1E-383 -> 1.000000000000001E-383 +ddnextp192 nextplus 9.999999999999998E+384 -> 9.999999999999999E+384 +ddnextp193 nextplus 9.999999999999999E+384 -> Infinity + +-- Null tests +ddnextp900 nextplus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddNextToward.decTest b/Lib/test/decimaltestdata/ddNextToward.decTest index 75386add312..f9e474d70f4 100644 --- a/Lib/test/decimaltestdata/ddNextToward.decTest +++ b/Lib/test/decimaltestdata/ddNextToward.decTest @@ -1,374 +1,374 @@ ------------------------------------------------------------------------- --- ddNextToward.decTest -- decDouble next toward rhs [754r nextafter] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check with a scattering of numerics -ddnextt001 nexttoward 10 10 -> 10 -ddnextt002 nexttoward -10 -10 -> -10 -ddnextt003 nexttoward 1 10 -> 1.000000000000001 -ddnextt004 nexttoward 1 -10 -> 0.9999999999999999 -ddnextt005 nexttoward -1 10 -> -0.9999999999999999 -ddnextt006 nexttoward -1 -10 -> -1.000000000000001 -ddnextt007 nexttoward 0 10 -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt008 nexttoward 0 -10 -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt009 nexttoward 9.999999999999999E+384 +Infinity -> Infinity Overflow Inexact Rounded -ddnextt010 nexttoward -9.999999999999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded -ddnextt011 nexttoward 9.999999999999999 10 -> 10.00000000000000 -ddnextt012 nexttoward 10 9.999999999999999 -> 9.999999999999999 -ddnextt013 nexttoward -9.999999999999999 -10 -> -10.00000000000000 -ddnextt014 nexttoward -10 -9.999999999999999 -> -9.999999999999999 -ddnextt015 nexttoward 9.999999999999998 10 -> 9.999999999999999 -ddnextt016 nexttoward 10 9.999999999999998 -> 9.999999999999999 -ddnextt017 nexttoward -9.999999999999998 -10 -> -9.999999999999999 -ddnextt018 nexttoward -10 -9.999999999999998 -> -9.999999999999999 - -------- lhs=rhs --- finites -ddnextt101 nexttoward 7 7 -> 7 -ddnextt102 nexttoward -7 -7 -> -7 -ddnextt103 nexttoward 75 75 -> 75 -ddnextt104 nexttoward -75 -75 -> -75 -ddnextt105 nexttoward 7.50 7.5 -> 7.50 -ddnextt106 nexttoward -7.50 -7.50 -> -7.50 -ddnextt107 nexttoward 7.500 7.5000 -> 7.500 -ddnextt108 nexttoward -7.500 -7.5 -> -7.500 - --- zeros -ddnextt111 nexttoward 0 0 -> 0 -ddnextt112 nexttoward -0 -0 -> -0 -ddnextt113 nexttoward 0E+4 0 -> 0E+4 -ddnextt114 nexttoward -0E+4 -0 -> -0E+4 -ddnextt115 nexttoward 0.00000000000 0.000000000000 -> 0E-11 -ddnextt116 nexttoward -0.00000000000 -0.00 -> -0E-11 -ddnextt117 nexttoward 0E-141 0 -> 0E-141 -ddnextt118 nexttoward -0E-141 -000 -> -0E-141 - --- full coefficients, alternating bits -ddnextt121 nexttoward 268268268 268268268 -> 268268268 -ddnextt122 nexttoward -268268268 -268268268 -> -268268268 -ddnextt123 nexttoward 134134134 134134134 -> 134134134 -ddnextt124 nexttoward -134134134 -134134134 -> -134134134 - --- Nmax, Nmin, Ntiny -ddnextt131 nexttoward 9.999999999999999E+384 9.999999999999999E+384 -> 9.999999999999999E+384 -ddnextt132 nexttoward 1E-383 1E-383 -> 1E-383 -ddnextt133 nexttoward 1.000000000000000E-383 1.000000000000000E-383 -> 1.000000000000000E-383 -ddnextt134 nexttoward 1E-398 1E-398 -> 1E-398 - -ddnextt135 nexttoward -1E-398 -1E-398 -> -1E-398 -ddnextt136 nexttoward -1.000000000000000E-383 -1.000000000000000E-383 -> -1.000000000000000E-383 -ddnextt137 nexttoward -1E-383 -1E-383 -> -1E-383 -ddnextt138 nexttoward -9.999999999999999E+384 -9.999999999999999E+384 -> -9.999999999999999E+384 - -------- lhs 0.9999999999999996 -ddnextt202 nexttoward 0.9999999999999996 Infinity -> 0.9999999999999997 -ddnextt203 nexttoward 0.9999999999999997 Infinity -> 0.9999999999999998 -ddnextt204 nexttoward 0.9999999999999998 Infinity -> 0.9999999999999999 -ddnextt205 nexttoward 0.9999999999999999 Infinity -> 1.000000000000000 -ddnextt206 nexttoward 1.000000000000000 Infinity -> 1.000000000000001 -ddnextt207 nexttoward 1.0 Infinity -> 1.000000000000001 -ddnextt208 nexttoward 1 Infinity -> 1.000000000000001 -ddnextt209 nexttoward 1.000000000000001 Infinity -> 1.000000000000002 -ddnextt210 nexttoward 1.000000000000002 Infinity -> 1.000000000000003 -ddnextt211 nexttoward 1.000000000000003 Infinity -> 1.000000000000004 -ddnextt212 nexttoward 1.000000000000004 Infinity -> 1.000000000000005 -ddnextt213 nexttoward 1.000000000000005 Infinity -> 1.000000000000006 -ddnextt214 nexttoward 1.000000000000006 Infinity -> 1.000000000000007 -ddnextt215 nexttoward 1.000000000000007 Infinity -> 1.000000000000008 -ddnextt216 nexttoward 1.000000000000008 Infinity -> 1.000000000000009 -ddnextt217 nexttoward 1.000000000000009 Infinity -> 1.000000000000010 -ddnextt218 nexttoward 1.000000000000010 Infinity -> 1.000000000000011 -ddnextt219 nexttoward 1.000000000000011 Infinity -> 1.000000000000012 - -ddnextt221 nexttoward -0.9999999999999995 Infinity -> -0.9999999999999994 -ddnextt222 nexttoward -0.9999999999999996 Infinity -> -0.9999999999999995 -ddnextt223 nexttoward -0.9999999999999997 Infinity -> -0.9999999999999996 -ddnextt224 nexttoward -0.9999999999999998 Infinity -> -0.9999999999999997 -ddnextt225 nexttoward -0.9999999999999999 Infinity -> -0.9999999999999998 -ddnextt226 nexttoward -1.000000000000000 Infinity -> -0.9999999999999999 -ddnextt227 nexttoward -1.0 Infinity -> -0.9999999999999999 -ddnextt228 nexttoward -1 Infinity -> -0.9999999999999999 -ddnextt229 nexttoward -1.000000000000001 Infinity -> -1.000000000000000 -ddnextt230 nexttoward -1.000000000000002 Infinity -> -1.000000000000001 -ddnextt231 nexttoward -1.000000000000003 Infinity -> -1.000000000000002 -ddnextt232 nexttoward -1.000000000000004 Infinity -> -1.000000000000003 -ddnextt233 nexttoward -1.000000000000005 Infinity -> -1.000000000000004 -ddnextt234 nexttoward -1.000000000000006 Infinity -> -1.000000000000005 -ddnextt235 nexttoward -1.000000000000007 Infinity -> -1.000000000000006 -ddnextt236 nexttoward -1.000000000000008 Infinity -> -1.000000000000007 -ddnextt237 nexttoward -1.000000000000009 Infinity -> -1.000000000000008 -ddnextt238 nexttoward -1.000000000000010 Infinity -> -1.000000000000009 -ddnextt239 nexttoward -1.000000000000011 Infinity -> -1.000000000000010 -ddnextt240 nexttoward -1.000000000000012 Infinity -> -1.000000000000011 - --- Zeros -ddnextt300 nexttoward 0 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt301 nexttoward 0.00 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt302 nexttoward 0E-300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt303 nexttoward 0E+300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt304 nexttoward 0E+30000 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt305 nexttoward -0 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt306 nexttoward -0.00 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt307 nexttoward -0E-300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt308 nexttoward -0E+300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt309 nexttoward -0E+30000 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded - --- specials -ddnextt350 nexttoward Inf Infinity -> Infinity -ddnextt351 nexttoward -Inf Infinity -> -9.999999999999999E+384 -ddnextt352 nexttoward NaN Infinity -> NaN -ddnextt353 nexttoward sNaN Infinity -> NaN Invalid_operation -ddnextt354 nexttoward NaN77 Infinity -> NaN77 -ddnextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation -ddnextt356 nexttoward -NaN Infinity -> -NaN -ddnextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation -ddnextt358 nexttoward -NaN77 Infinity -> -NaN77 -ddnextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -ddnextt370 nexttoward -9.999999999999999E+384 Infinity -> -9.999999999999998E+384 -ddnextt371 nexttoward -9.999999999999998E+384 Infinity -> -9.999999999999997E+384 -ddnextt372 nexttoward -1E-383 Infinity -> -9.99999999999999E-384 Underflow Subnormal Inexact Rounded -ddnextt373 nexttoward -1.000000000000000E-383 Infinity -> -9.99999999999999E-384 Underflow Subnormal Inexact Rounded -ddnextt374 nexttoward -9E-398 Infinity -> -8E-398 Underflow Subnormal Inexact Rounded -ddnextt375 nexttoward -9.9E-397 Infinity -> -9.8E-397 Underflow Subnormal Inexact Rounded -ddnextt376 nexttoward -9.99999999999E-387 Infinity -> -9.99999999998E-387 Underflow Subnormal Inexact Rounded -ddnextt377 nexttoward -9.99999999999999E-384 Infinity -> -9.99999999999998E-384 Underflow Subnormal Inexact Rounded -ddnextt378 nexttoward -9.99999999999998E-384 Infinity -> -9.99999999999997E-384 Underflow Subnormal Inexact Rounded -ddnextt379 nexttoward -9.99999999999997E-384 Infinity -> -9.99999999999996E-384 Underflow Subnormal Inexact Rounded -ddnextt380 nexttoward -0E-398 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt381 nexttoward -1E-398 Infinity -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddnextt382 nexttoward -2E-398 Infinity -> -1E-398 Underflow Subnormal Inexact Rounded - -ddnextt383 nexttoward 0E-398 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt384 nexttoward 1E-398 Infinity -> 2E-398 Underflow Subnormal Inexact Rounded -ddnextt385 nexttoward 2E-398 Infinity -> 3E-398 Underflow Subnormal Inexact Rounded -ddnextt386 nexttoward 10E-398 Infinity -> 1.1E-397 Underflow Subnormal Inexact Rounded -ddnextt387 nexttoward 100E-398 Infinity -> 1.01E-396 Underflow Subnormal Inexact Rounded -ddnextt388 nexttoward 100000E-398 Infinity -> 1.00001E-393 Underflow Subnormal Inexact Rounded -ddnextt389 nexttoward 1.00000000000E-383 Infinity -> 1.000000000000001E-383 -ddnextt390 nexttoward 1.000000000000000E-383 Infinity -> 1.000000000000001E-383 -ddnextt391 nexttoward 1E-383 Infinity -> 1.000000000000001E-383 -ddnextt392 nexttoward 9.999999999999997E+384 Infinity -> 9.999999999999998E+384 -ddnextt393 nexttoward 9.999999999999998E+384 Infinity -> 9.999999999999999E+384 -ddnextt394 nexttoward 9.999999999999999E+384 Infinity -> Infinity Overflow Inexact Rounded - -------- lhs>rhs -ddnextt401 nexttoward 0.9999999999999995 -Infinity -> 0.9999999999999994 -ddnextt402 nexttoward 0.9999999999999996 -Infinity -> 0.9999999999999995 -ddnextt403 nexttoward 0.9999999999999997 -Infinity -> 0.9999999999999996 -ddnextt404 nexttoward 0.9999999999999998 -Infinity -> 0.9999999999999997 -ddnextt405 nexttoward 0.9999999999999999 -Infinity -> 0.9999999999999998 -ddnextt406 nexttoward 1.000000000000000 -Infinity -> 0.9999999999999999 -ddnextt407 nexttoward 1.0 -Infinity -> 0.9999999999999999 -ddnextt408 nexttoward 1 -Infinity -> 0.9999999999999999 -ddnextt409 nexttoward 1.000000000000001 -Infinity -> 1.000000000000000 -ddnextt410 nexttoward 1.000000000000002 -Infinity -> 1.000000000000001 -ddnextt411 nexttoward 1.000000000000003 -Infinity -> 1.000000000000002 -ddnextt412 nexttoward 1.000000000000004 -Infinity -> 1.000000000000003 -ddnextt413 nexttoward 1.000000000000005 -Infinity -> 1.000000000000004 -ddnextt414 nexttoward 1.000000000000006 -Infinity -> 1.000000000000005 -ddnextt415 nexttoward 1.000000000000007 -Infinity -> 1.000000000000006 -ddnextt416 nexttoward 1.000000000000008 -Infinity -> 1.000000000000007 -ddnextt417 nexttoward 1.000000000000009 -Infinity -> 1.000000000000008 -ddnextt418 nexttoward 1.000000000000010 -Infinity -> 1.000000000000009 -ddnextt419 nexttoward 1.000000000000011 -Infinity -> 1.000000000000010 -ddnextt420 nexttoward 1.000000000000012 -Infinity -> 1.000000000000011 - -ddnextt421 nexttoward -0.9999999999999995 -Infinity -> -0.9999999999999996 -ddnextt422 nexttoward -0.9999999999999996 -Infinity -> -0.9999999999999997 -ddnextt423 nexttoward -0.9999999999999997 -Infinity -> -0.9999999999999998 -ddnextt424 nexttoward -0.9999999999999998 -Infinity -> -0.9999999999999999 -ddnextt425 nexttoward -0.9999999999999999 -Infinity -> -1.000000000000000 -ddnextt426 nexttoward -1.000000000000000 -Infinity -> -1.000000000000001 -ddnextt427 nexttoward -1.0 -Infinity -> -1.000000000000001 -ddnextt428 nexttoward -1 -Infinity -> -1.000000000000001 -ddnextt429 nexttoward -1.000000000000001 -Infinity -> -1.000000000000002 -ddnextt430 nexttoward -1.000000000000002 -Infinity -> -1.000000000000003 -ddnextt431 nexttoward -1.000000000000003 -Infinity -> -1.000000000000004 -ddnextt432 nexttoward -1.000000000000004 -Infinity -> -1.000000000000005 -ddnextt433 nexttoward -1.000000000000005 -Infinity -> -1.000000000000006 -ddnextt434 nexttoward -1.000000000000006 -Infinity -> -1.000000000000007 -ddnextt435 nexttoward -1.000000000000007 -Infinity -> -1.000000000000008 -ddnextt436 nexttoward -1.000000000000008 -Infinity -> -1.000000000000009 -ddnextt437 nexttoward -1.000000000000009 -Infinity -> -1.000000000000010 -ddnextt438 nexttoward -1.000000000000010 -Infinity -> -1.000000000000011 -ddnextt439 nexttoward -1.000000000000011 -Infinity -> -1.000000000000012 - --- Zeros -ddnextt500 nexttoward -0 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt501 nexttoward 0 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt502 nexttoward 0.00 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt503 nexttoward -0.00 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt504 nexttoward 0E-300 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt505 nexttoward 0E+300 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt506 nexttoward 0E+30000 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt507 nexttoward -0E+30000 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded - --- specials -ddnextt550 nexttoward Inf -Infinity -> 9.999999999999999E+384 -ddnextt551 nexttoward -Inf -Infinity -> -Infinity -ddnextt552 nexttoward NaN -Infinity -> NaN -ddnextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation -ddnextt554 nexttoward NaN77 -Infinity -> NaN77 -ddnextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation -ddnextt556 nexttoward -NaN -Infinity -> -NaN -ddnextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation -ddnextt558 nexttoward -NaN77 -Infinity -> -NaN77 -ddnextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -ddnextt670 nexttoward 9.999999999999999E+384 -Infinity -> 9.999999999999998E+384 -ddnextt671 nexttoward 9.999999999999998E+384 -Infinity -> 9.999999999999997E+384 -ddnextt672 nexttoward 1E-383 -Infinity -> 9.99999999999999E-384 Underflow Subnormal Inexact Rounded -ddnextt673 nexttoward 1.000000000000000E-383 -Infinity -> 9.99999999999999E-384 Underflow Subnormal Inexact Rounded -ddnextt674 nexttoward 9E-398 -Infinity -> 8E-398 Underflow Subnormal Inexact Rounded -ddnextt675 nexttoward 9.9E-397 -Infinity -> 9.8E-397 Underflow Subnormal Inexact Rounded -ddnextt676 nexttoward 9.99999999999E-387 -Infinity -> 9.99999999998E-387 Underflow Subnormal Inexact Rounded -ddnextt677 nexttoward 9.99999999999999E-384 -Infinity -> 9.99999999999998E-384 Underflow Subnormal Inexact Rounded -ddnextt678 nexttoward 9.99999999999998E-384 -Infinity -> 9.99999999999997E-384 Underflow Subnormal Inexact Rounded -ddnextt679 nexttoward 9.99999999999997E-384 -Infinity -> 9.99999999999996E-384 Underflow Subnormal Inexact Rounded -ddnextt680 nexttoward 0E-398 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt681 nexttoward 1E-398 -Infinity -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddnextt682 nexttoward 2E-398 -Infinity -> 1E-398 Underflow Subnormal Inexact Rounded - -ddnextt683 nexttoward -0E-398 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt684 nexttoward -1E-398 -Infinity -> -2E-398 Underflow Subnormal Inexact Rounded -ddnextt685 nexttoward -2E-398 -Infinity -> -3E-398 Underflow Subnormal Inexact Rounded -ddnextt686 nexttoward -10E-398 -Infinity -> -1.1E-397 Underflow Subnormal Inexact Rounded -ddnextt687 nexttoward -100E-398 -Infinity -> -1.01E-396 Underflow Subnormal Inexact Rounded -ddnextt688 nexttoward -100000E-398 -Infinity -> -1.00001E-393 Underflow Subnormal Inexact Rounded -ddnextt689 nexttoward -1.00000000000E-383 -Infinity -> -1.000000000000001E-383 -ddnextt690 nexttoward -1.000000000000000E-383 -Infinity -> -1.000000000000001E-383 -ddnextt691 nexttoward -1E-383 -Infinity -> -1.000000000000001E-383 -ddnextt692 nexttoward -9.999999999999998E+384 -Infinity -> -9.999999999999999E+384 -ddnextt693 nexttoward -9.999999999999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded - -------- Specials -ddnextt780 nexttoward -Inf -Inf -> -Infinity -ddnextt781 nexttoward -Inf -1000 -> -9.999999999999999E+384 -ddnextt782 nexttoward -Inf -1 -> -9.999999999999999E+384 -ddnextt783 nexttoward -Inf -0 -> -9.999999999999999E+384 -ddnextt784 nexttoward -Inf 0 -> -9.999999999999999E+384 -ddnextt785 nexttoward -Inf 1 -> -9.999999999999999E+384 -ddnextt786 nexttoward -Inf 1000 -> -9.999999999999999E+384 -ddnextt787 nexttoward -1000 -Inf -> -1000.000000000001 -ddnextt788 nexttoward -Inf -Inf -> -Infinity -ddnextt789 nexttoward -1 -Inf -> -1.000000000000001 -ddnextt790 nexttoward -0 -Inf -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt791 nexttoward 0 -Inf -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt792 nexttoward 1 -Inf -> 0.9999999999999999 -ddnextt793 nexttoward 1000 -Inf -> 999.9999999999999 -ddnextt794 nexttoward Inf -Inf -> 9.999999999999999E+384 - -ddnextt800 nexttoward Inf -Inf -> 9.999999999999999E+384 -ddnextt801 nexttoward Inf -1000 -> 9.999999999999999E+384 -ddnextt802 nexttoward Inf -1 -> 9.999999999999999E+384 -ddnextt803 nexttoward Inf -0 -> 9.999999999999999E+384 -ddnextt804 nexttoward Inf 0 -> 9.999999999999999E+384 -ddnextt805 nexttoward Inf 1 -> 9.999999999999999E+384 -ddnextt806 nexttoward Inf 1000 -> 9.999999999999999E+384 -ddnextt807 nexttoward Inf Inf -> Infinity -ddnextt808 nexttoward -1000 Inf -> -999.9999999999999 -ddnextt809 nexttoward -Inf Inf -> -9.999999999999999E+384 -ddnextt810 nexttoward -1 Inf -> -0.9999999999999999 -ddnextt811 nexttoward -0 Inf -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt812 nexttoward 0 Inf -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt813 nexttoward 1 Inf -> 1.000000000000001 -ddnextt814 nexttoward 1000 Inf -> 1000.000000000001 -ddnextt815 nexttoward Inf Inf -> Infinity - -ddnextt821 nexttoward NaN -Inf -> NaN -ddnextt822 nexttoward NaN -1000 -> NaN -ddnextt823 nexttoward NaN -1 -> NaN -ddnextt824 nexttoward NaN -0 -> NaN -ddnextt825 nexttoward NaN 0 -> NaN -ddnextt826 nexttoward NaN 1 -> NaN -ddnextt827 nexttoward NaN 1000 -> NaN -ddnextt828 nexttoward NaN Inf -> NaN -ddnextt829 nexttoward NaN NaN -> NaN -ddnextt830 nexttoward -Inf NaN -> NaN -ddnextt831 nexttoward -1000 NaN -> NaN -ddnextt832 nexttoward -1 NaN -> NaN -ddnextt833 nexttoward -0 NaN -> NaN -ddnextt834 nexttoward 0 NaN -> NaN -ddnextt835 nexttoward 1 NaN -> NaN -ddnextt836 nexttoward 1000 NaN -> NaN -ddnextt837 nexttoward Inf NaN -> NaN - -ddnextt841 nexttoward sNaN -Inf -> NaN Invalid_operation -ddnextt842 nexttoward sNaN -1000 -> NaN Invalid_operation -ddnextt843 nexttoward sNaN -1 -> NaN Invalid_operation -ddnextt844 nexttoward sNaN -0 -> NaN Invalid_operation -ddnextt845 nexttoward sNaN 0 -> NaN Invalid_operation -ddnextt846 nexttoward sNaN 1 -> NaN Invalid_operation -ddnextt847 nexttoward sNaN 1000 -> NaN Invalid_operation -ddnextt848 nexttoward sNaN NaN -> NaN Invalid_operation -ddnextt849 nexttoward sNaN sNaN -> NaN Invalid_operation -ddnextt850 nexttoward NaN sNaN -> NaN Invalid_operation -ddnextt851 nexttoward -Inf sNaN -> NaN Invalid_operation -ddnextt852 nexttoward -1000 sNaN -> NaN Invalid_operation -ddnextt853 nexttoward -1 sNaN -> NaN Invalid_operation -ddnextt854 nexttoward -0 sNaN -> NaN Invalid_operation -ddnextt855 nexttoward 0 sNaN -> NaN Invalid_operation -ddnextt856 nexttoward 1 sNaN -> NaN Invalid_operation -ddnextt857 nexttoward 1000 sNaN -> NaN Invalid_operation -ddnextt858 nexttoward Inf sNaN -> NaN Invalid_operation -ddnextt859 nexttoward NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddnextt861 nexttoward NaN1 -Inf -> NaN1 -ddnextt862 nexttoward +NaN2 -1000 -> NaN2 -ddnextt863 nexttoward NaN3 1000 -> NaN3 -ddnextt864 nexttoward NaN4 Inf -> NaN4 -ddnextt865 nexttoward NaN5 +NaN6 -> NaN5 -ddnextt866 nexttoward -Inf NaN7 -> NaN7 -ddnextt867 nexttoward -1000 NaN8 -> NaN8 -ddnextt868 nexttoward 1000 NaN9 -> NaN9 -ddnextt869 nexttoward Inf +NaN10 -> NaN10 -ddnextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation -ddnextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation -ddnextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation -ddnextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation -ddnextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation -ddnextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation -ddnextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation -ddnextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation -ddnextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation -ddnextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation -ddnextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddnextt882 nexttoward -NaN26 NaN28 -> -NaN26 -ddnextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddnextt884 nexttoward 1000 -NaN30 -> -NaN30 -ddnextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Null tests -ddnextt900 nexttoward 1 # -> NaN Invalid_operation -ddnextt901 nexttoward # 1 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddNextToward.decTest -- decDouble next toward rhs [754r nextafter] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check with a scattering of numerics +ddnextt001 nexttoward 10 10 -> 10 +ddnextt002 nexttoward -10 -10 -> -10 +ddnextt003 nexttoward 1 10 -> 1.000000000000001 +ddnextt004 nexttoward 1 -10 -> 0.9999999999999999 +ddnextt005 nexttoward -1 10 -> -0.9999999999999999 +ddnextt006 nexttoward -1 -10 -> -1.000000000000001 +ddnextt007 nexttoward 0 10 -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt008 nexttoward 0 -10 -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt009 nexttoward 9.999999999999999E+384 +Infinity -> Infinity Overflow Inexact Rounded +ddnextt010 nexttoward -9.999999999999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded +ddnextt011 nexttoward 9.999999999999999 10 -> 10.00000000000000 +ddnextt012 nexttoward 10 9.999999999999999 -> 9.999999999999999 +ddnextt013 nexttoward -9.999999999999999 -10 -> -10.00000000000000 +ddnextt014 nexttoward -10 -9.999999999999999 -> -9.999999999999999 +ddnextt015 nexttoward 9.999999999999998 10 -> 9.999999999999999 +ddnextt016 nexttoward 10 9.999999999999998 -> 9.999999999999999 +ddnextt017 nexttoward -9.999999999999998 -10 -> -9.999999999999999 +ddnextt018 nexttoward -10 -9.999999999999998 -> -9.999999999999999 + +------- lhs=rhs +-- finites +ddnextt101 nexttoward 7 7 -> 7 +ddnextt102 nexttoward -7 -7 -> -7 +ddnextt103 nexttoward 75 75 -> 75 +ddnextt104 nexttoward -75 -75 -> -75 +ddnextt105 nexttoward 7.50 7.5 -> 7.50 +ddnextt106 nexttoward -7.50 -7.50 -> -7.50 +ddnextt107 nexttoward 7.500 7.5000 -> 7.500 +ddnextt108 nexttoward -7.500 -7.5 -> -7.500 + +-- zeros +ddnextt111 nexttoward 0 0 -> 0 +ddnextt112 nexttoward -0 -0 -> -0 +ddnextt113 nexttoward 0E+4 0 -> 0E+4 +ddnextt114 nexttoward -0E+4 -0 -> -0E+4 +ddnextt115 nexttoward 0.00000000000 0.000000000000 -> 0E-11 +ddnextt116 nexttoward -0.00000000000 -0.00 -> -0E-11 +ddnextt117 nexttoward 0E-141 0 -> 0E-141 +ddnextt118 nexttoward -0E-141 -000 -> -0E-141 + +-- full coefficients, alternating bits +ddnextt121 nexttoward 268268268 268268268 -> 268268268 +ddnextt122 nexttoward -268268268 -268268268 -> -268268268 +ddnextt123 nexttoward 134134134 134134134 -> 134134134 +ddnextt124 nexttoward -134134134 -134134134 -> -134134134 + +-- Nmax, Nmin, Ntiny +ddnextt131 nexttoward 9.999999999999999E+384 9.999999999999999E+384 -> 9.999999999999999E+384 +ddnextt132 nexttoward 1E-383 1E-383 -> 1E-383 +ddnextt133 nexttoward 1.000000000000000E-383 1.000000000000000E-383 -> 1.000000000000000E-383 +ddnextt134 nexttoward 1E-398 1E-398 -> 1E-398 + +ddnextt135 nexttoward -1E-398 -1E-398 -> -1E-398 +ddnextt136 nexttoward -1.000000000000000E-383 -1.000000000000000E-383 -> -1.000000000000000E-383 +ddnextt137 nexttoward -1E-383 -1E-383 -> -1E-383 +ddnextt138 nexttoward -9.999999999999999E+384 -9.999999999999999E+384 -> -9.999999999999999E+384 + +------- lhs 0.9999999999999996 +ddnextt202 nexttoward 0.9999999999999996 Infinity -> 0.9999999999999997 +ddnextt203 nexttoward 0.9999999999999997 Infinity -> 0.9999999999999998 +ddnextt204 nexttoward 0.9999999999999998 Infinity -> 0.9999999999999999 +ddnextt205 nexttoward 0.9999999999999999 Infinity -> 1.000000000000000 +ddnextt206 nexttoward 1.000000000000000 Infinity -> 1.000000000000001 +ddnextt207 nexttoward 1.0 Infinity -> 1.000000000000001 +ddnextt208 nexttoward 1 Infinity -> 1.000000000000001 +ddnextt209 nexttoward 1.000000000000001 Infinity -> 1.000000000000002 +ddnextt210 nexttoward 1.000000000000002 Infinity -> 1.000000000000003 +ddnextt211 nexttoward 1.000000000000003 Infinity -> 1.000000000000004 +ddnextt212 nexttoward 1.000000000000004 Infinity -> 1.000000000000005 +ddnextt213 nexttoward 1.000000000000005 Infinity -> 1.000000000000006 +ddnextt214 nexttoward 1.000000000000006 Infinity -> 1.000000000000007 +ddnextt215 nexttoward 1.000000000000007 Infinity -> 1.000000000000008 +ddnextt216 nexttoward 1.000000000000008 Infinity -> 1.000000000000009 +ddnextt217 nexttoward 1.000000000000009 Infinity -> 1.000000000000010 +ddnextt218 nexttoward 1.000000000000010 Infinity -> 1.000000000000011 +ddnextt219 nexttoward 1.000000000000011 Infinity -> 1.000000000000012 + +ddnextt221 nexttoward -0.9999999999999995 Infinity -> -0.9999999999999994 +ddnextt222 nexttoward -0.9999999999999996 Infinity -> -0.9999999999999995 +ddnextt223 nexttoward -0.9999999999999997 Infinity -> -0.9999999999999996 +ddnextt224 nexttoward -0.9999999999999998 Infinity -> -0.9999999999999997 +ddnextt225 nexttoward -0.9999999999999999 Infinity -> -0.9999999999999998 +ddnextt226 nexttoward -1.000000000000000 Infinity -> -0.9999999999999999 +ddnextt227 nexttoward -1.0 Infinity -> -0.9999999999999999 +ddnextt228 nexttoward -1 Infinity -> -0.9999999999999999 +ddnextt229 nexttoward -1.000000000000001 Infinity -> -1.000000000000000 +ddnextt230 nexttoward -1.000000000000002 Infinity -> -1.000000000000001 +ddnextt231 nexttoward -1.000000000000003 Infinity -> -1.000000000000002 +ddnextt232 nexttoward -1.000000000000004 Infinity -> -1.000000000000003 +ddnextt233 nexttoward -1.000000000000005 Infinity -> -1.000000000000004 +ddnextt234 nexttoward -1.000000000000006 Infinity -> -1.000000000000005 +ddnextt235 nexttoward -1.000000000000007 Infinity -> -1.000000000000006 +ddnextt236 nexttoward -1.000000000000008 Infinity -> -1.000000000000007 +ddnextt237 nexttoward -1.000000000000009 Infinity -> -1.000000000000008 +ddnextt238 nexttoward -1.000000000000010 Infinity -> -1.000000000000009 +ddnextt239 nexttoward -1.000000000000011 Infinity -> -1.000000000000010 +ddnextt240 nexttoward -1.000000000000012 Infinity -> -1.000000000000011 + +-- Zeros +ddnextt300 nexttoward 0 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt301 nexttoward 0.00 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt302 nexttoward 0E-300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt303 nexttoward 0E+300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt304 nexttoward 0E+30000 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt305 nexttoward -0 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt306 nexttoward -0.00 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt307 nexttoward -0E-300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt308 nexttoward -0E+300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt309 nexttoward -0E+30000 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded + +-- specials +ddnextt350 nexttoward Inf Infinity -> Infinity +ddnextt351 nexttoward -Inf Infinity -> -9.999999999999999E+384 +ddnextt352 nexttoward NaN Infinity -> NaN +ddnextt353 nexttoward sNaN Infinity -> NaN Invalid_operation +ddnextt354 nexttoward NaN77 Infinity -> NaN77 +ddnextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation +ddnextt356 nexttoward -NaN Infinity -> -NaN +ddnextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation +ddnextt358 nexttoward -NaN77 Infinity -> -NaN77 +ddnextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +ddnextt370 nexttoward -9.999999999999999E+384 Infinity -> -9.999999999999998E+384 +ddnextt371 nexttoward -9.999999999999998E+384 Infinity -> -9.999999999999997E+384 +ddnextt372 nexttoward -1E-383 Infinity -> -9.99999999999999E-384 Underflow Subnormal Inexact Rounded +ddnextt373 nexttoward -1.000000000000000E-383 Infinity -> -9.99999999999999E-384 Underflow Subnormal Inexact Rounded +ddnextt374 nexttoward -9E-398 Infinity -> -8E-398 Underflow Subnormal Inexact Rounded +ddnextt375 nexttoward -9.9E-397 Infinity -> -9.8E-397 Underflow Subnormal Inexact Rounded +ddnextt376 nexttoward -9.99999999999E-387 Infinity -> -9.99999999998E-387 Underflow Subnormal Inexact Rounded +ddnextt377 nexttoward -9.99999999999999E-384 Infinity -> -9.99999999999998E-384 Underflow Subnormal Inexact Rounded +ddnextt378 nexttoward -9.99999999999998E-384 Infinity -> -9.99999999999997E-384 Underflow Subnormal Inexact Rounded +ddnextt379 nexttoward -9.99999999999997E-384 Infinity -> -9.99999999999996E-384 Underflow Subnormal Inexact Rounded +ddnextt380 nexttoward -0E-398 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt381 nexttoward -1E-398 Infinity -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddnextt382 nexttoward -2E-398 Infinity -> -1E-398 Underflow Subnormal Inexact Rounded + +ddnextt383 nexttoward 0E-398 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt384 nexttoward 1E-398 Infinity -> 2E-398 Underflow Subnormal Inexact Rounded +ddnextt385 nexttoward 2E-398 Infinity -> 3E-398 Underflow Subnormal Inexact Rounded +ddnextt386 nexttoward 10E-398 Infinity -> 1.1E-397 Underflow Subnormal Inexact Rounded +ddnextt387 nexttoward 100E-398 Infinity -> 1.01E-396 Underflow Subnormal Inexact Rounded +ddnextt388 nexttoward 100000E-398 Infinity -> 1.00001E-393 Underflow Subnormal Inexact Rounded +ddnextt389 nexttoward 1.00000000000E-383 Infinity -> 1.000000000000001E-383 +ddnextt390 nexttoward 1.000000000000000E-383 Infinity -> 1.000000000000001E-383 +ddnextt391 nexttoward 1E-383 Infinity -> 1.000000000000001E-383 +ddnextt392 nexttoward 9.999999999999997E+384 Infinity -> 9.999999999999998E+384 +ddnextt393 nexttoward 9.999999999999998E+384 Infinity -> 9.999999999999999E+384 +ddnextt394 nexttoward 9.999999999999999E+384 Infinity -> Infinity Overflow Inexact Rounded + +------- lhs>rhs +ddnextt401 nexttoward 0.9999999999999995 -Infinity -> 0.9999999999999994 +ddnextt402 nexttoward 0.9999999999999996 -Infinity -> 0.9999999999999995 +ddnextt403 nexttoward 0.9999999999999997 -Infinity -> 0.9999999999999996 +ddnextt404 nexttoward 0.9999999999999998 -Infinity -> 0.9999999999999997 +ddnextt405 nexttoward 0.9999999999999999 -Infinity -> 0.9999999999999998 +ddnextt406 nexttoward 1.000000000000000 -Infinity -> 0.9999999999999999 +ddnextt407 nexttoward 1.0 -Infinity -> 0.9999999999999999 +ddnextt408 nexttoward 1 -Infinity -> 0.9999999999999999 +ddnextt409 nexttoward 1.000000000000001 -Infinity -> 1.000000000000000 +ddnextt410 nexttoward 1.000000000000002 -Infinity -> 1.000000000000001 +ddnextt411 nexttoward 1.000000000000003 -Infinity -> 1.000000000000002 +ddnextt412 nexttoward 1.000000000000004 -Infinity -> 1.000000000000003 +ddnextt413 nexttoward 1.000000000000005 -Infinity -> 1.000000000000004 +ddnextt414 nexttoward 1.000000000000006 -Infinity -> 1.000000000000005 +ddnextt415 nexttoward 1.000000000000007 -Infinity -> 1.000000000000006 +ddnextt416 nexttoward 1.000000000000008 -Infinity -> 1.000000000000007 +ddnextt417 nexttoward 1.000000000000009 -Infinity -> 1.000000000000008 +ddnextt418 nexttoward 1.000000000000010 -Infinity -> 1.000000000000009 +ddnextt419 nexttoward 1.000000000000011 -Infinity -> 1.000000000000010 +ddnextt420 nexttoward 1.000000000000012 -Infinity -> 1.000000000000011 + +ddnextt421 nexttoward -0.9999999999999995 -Infinity -> -0.9999999999999996 +ddnextt422 nexttoward -0.9999999999999996 -Infinity -> -0.9999999999999997 +ddnextt423 nexttoward -0.9999999999999997 -Infinity -> -0.9999999999999998 +ddnextt424 nexttoward -0.9999999999999998 -Infinity -> -0.9999999999999999 +ddnextt425 nexttoward -0.9999999999999999 -Infinity -> -1.000000000000000 +ddnextt426 nexttoward -1.000000000000000 -Infinity -> -1.000000000000001 +ddnextt427 nexttoward -1.0 -Infinity -> -1.000000000000001 +ddnextt428 nexttoward -1 -Infinity -> -1.000000000000001 +ddnextt429 nexttoward -1.000000000000001 -Infinity -> -1.000000000000002 +ddnextt430 nexttoward -1.000000000000002 -Infinity -> -1.000000000000003 +ddnextt431 nexttoward -1.000000000000003 -Infinity -> -1.000000000000004 +ddnextt432 nexttoward -1.000000000000004 -Infinity -> -1.000000000000005 +ddnextt433 nexttoward -1.000000000000005 -Infinity -> -1.000000000000006 +ddnextt434 nexttoward -1.000000000000006 -Infinity -> -1.000000000000007 +ddnextt435 nexttoward -1.000000000000007 -Infinity -> -1.000000000000008 +ddnextt436 nexttoward -1.000000000000008 -Infinity -> -1.000000000000009 +ddnextt437 nexttoward -1.000000000000009 -Infinity -> -1.000000000000010 +ddnextt438 nexttoward -1.000000000000010 -Infinity -> -1.000000000000011 +ddnextt439 nexttoward -1.000000000000011 -Infinity -> -1.000000000000012 + +-- Zeros +ddnextt500 nexttoward -0 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt501 nexttoward 0 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt502 nexttoward 0.00 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt503 nexttoward -0.00 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt504 nexttoward 0E-300 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt505 nexttoward 0E+300 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt506 nexttoward 0E+30000 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt507 nexttoward -0E+30000 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded + +-- specials +ddnextt550 nexttoward Inf -Infinity -> 9.999999999999999E+384 +ddnextt551 nexttoward -Inf -Infinity -> -Infinity +ddnextt552 nexttoward NaN -Infinity -> NaN +ddnextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation +ddnextt554 nexttoward NaN77 -Infinity -> NaN77 +ddnextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation +ddnextt556 nexttoward -NaN -Infinity -> -NaN +ddnextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation +ddnextt558 nexttoward -NaN77 -Infinity -> -NaN77 +ddnextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +ddnextt670 nexttoward 9.999999999999999E+384 -Infinity -> 9.999999999999998E+384 +ddnextt671 nexttoward 9.999999999999998E+384 -Infinity -> 9.999999999999997E+384 +ddnextt672 nexttoward 1E-383 -Infinity -> 9.99999999999999E-384 Underflow Subnormal Inexact Rounded +ddnextt673 nexttoward 1.000000000000000E-383 -Infinity -> 9.99999999999999E-384 Underflow Subnormal Inexact Rounded +ddnextt674 nexttoward 9E-398 -Infinity -> 8E-398 Underflow Subnormal Inexact Rounded +ddnextt675 nexttoward 9.9E-397 -Infinity -> 9.8E-397 Underflow Subnormal Inexact Rounded +ddnextt676 nexttoward 9.99999999999E-387 -Infinity -> 9.99999999998E-387 Underflow Subnormal Inexact Rounded +ddnextt677 nexttoward 9.99999999999999E-384 -Infinity -> 9.99999999999998E-384 Underflow Subnormal Inexact Rounded +ddnextt678 nexttoward 9.99999999999998E-384 -Infinity -> 9.99999999999997E-384 Underflow Subnormal Inexact Rounded +ddnextt679 nexttoward 9.99999999999997E-384 -Infinity -> 9.99999999999996E-384 Underflow Subnormal Inexact Rounded +ddnextt680 nexttoward 0E-398 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt681 nexttoward 1E-398 -Infinity -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddnextt682 nexttoward 2E-398 -Infinity -> 1E-398 Underflow Subnormal Inexact Rounded + +ddnextt683 nexttoward -0E-398 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt684 nexttoward -1E-398 -Infinity -> -2E-398 Underflow Subnormal Inexact Rounded +ddnextt685 nexttoward -2E-398 -Infinity -> -3E-398 Underflow Subnormal Inexact Rounded +ddnextt686 nexttoward -10E-398 -Infinity -> -1.1E-397 Underflow Subnormal Inexact Rounded +ddnextt687 nexttoward -100E-398 -Infinity -> -1.01E-396 Underflow Subnormal Inexact Rounded +ddnextt688 nexttoward -100000E-398 -Infinity -> -1.00001E-393 Underflow Subnormal Inexact Rounded +ddnextt689 nexttoward -1.00000000000E-383 -Infinity -> -1.000000000000001E-383 +ddnextt690 nexttoward -1.000000000000000E-383 -Infinity -> -1.000000000000001E-383 +ddnextt691 nexttoward -1E-383 -Infinity -> -1.000000000000001E-383 +ddnextt692 nexttoward -9.999999999999998E+384 -Infinity -> -9.999999999999999E+384 +ddnextt693 nexttoward -9.999999999999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded + +------- Specials +ddnextt780 nexttoward -Inf -Inf -> -Infinity +ddnextt781 nexttoward -Inf -1000 -> -9.999999999999999E+384 +ddnextt782 nexttoward -Inf -1 -> -9.999999999999999E+384 +ddnextt783 nexttoward -Inf -0 -> -9.999999999999999E+384 +ddnextt784 nexttoward -Inf 0 -> -9.999999999999999E+384 +ddnextt785 nexttoward -Inf 1 -> -9.999999999999999E+384 +ddnextt786 nexttoward -Inf 1000 -> -9.999999999999999E+384 +ddnextt787 nexttoward -1000 -Inf -> -1000.000000000001 +ddnextt788 nexttoward -Inf -Inf -> -Infinity +ddnextt789 nexttoward -1 -Inf -> -1.000000000000001 +ddnextt790 nexttoward -0 -Inf -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt791 nexttoward 0 -Inf -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt792 nexttoward 1 -Inf -> 0.9999999999999999 +ddnextt793 nexttoward 1000 -Inf -> 999.9999999999999 +ddnextt794 nexttoward Inf -Inf -> 9.999999999999999E+384 + +ddnextt800 nexttoward Inf -Inf -> 9.999999999999999E+384 +ddnextt801 nexttoward Inf -1000 -> 9.999999999999999E+384 +ddnextt802 nexttoward Inf -1 -> 9.999999999999999E+384 +ddnextt803 nexttoward Inf -0 -> 9.999999999999999E+384 +ddnextt804 nexttoward Inf 0 -> 9.999999999999999E+384 +ddnextt805 nexttoward Inf 1 -> 9.999999999999999E+384 +ddnextt806 nexttoward Inf 1000 -> 9.999999999999999E+384 +ddnextt807 nexttoward Inf Inf -> Infinity +ddnextt808 nexttoward -1000 Inf -> -999.9999999999999 +ddnextt809 nexttoward -Inf Inf -> -9.999999999999999E+384 +ddnextt810 nexttoward -1 Inf -> -0.9999999999999999 +ddnextt811 nexttoward -0 Inf -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt812 nexttoward 0 Inf -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt813 nexttoward 1 Inf -> 1.000000000000001 +ddnextt814 nexttoward 1000 Inf -> 1000.000000000001 +ddnextt815 nexttoward Inf Inf -> Infinity + +ddnextt821 nexttoward NaN -Inf -> NaN +ddnextt822 nexttoward NaN -1000 -> NaN +ddnextt823 nexttoward NaN -1 -> NaN +ddnextt824 nexttoward NaN -0 -> NaN +ddnextt825 nexttoward NaN 0 -> NaN +ddnextt826 nexttoward NaN 1 -> NaN +ddnextt827 nexttoward NaN 1000 -> NaN +ddnextt828 nexttoward NaN Inf -> NaN +ddnextt829 nexttoward NaN NaN -> NaN +ddnextt830 nexttoward -Inf NaN -> NaN +ddnextt831 nexttoward -1000 NaN -> NaN +ddnextt832 nexttoward -1 NaN -> NaN +ddnextt833 nexttoward -0 NaN -> NaN +ddnextt834 nexttoward 0 NaN -> NaN +ddnextt835 nexttoward 1 NaN -> NaN +ddnextt836 nexttoward 1000 NaN -> NaN +ddnextt837 nexttoward Inf NaN -> NaN + +ddnextt841 nexttoward sNaN -Inf -> NaN Invalid_operation +ddnextt842 nexttoward sNaN -1000 -> NaN Invalid_operation +ddnextt843 nexttoward sNaN -1 -> NaN Invalid_operation +ddnextt844 nexttoward sNaN -0 -> NaN Invalid_operation +ddnextt845 nexttoward sNaN 0 -> NaN Invalid_operation +ddnextt846 nexttoward sNaN 1 -> NaN Invalid_operation +ddnextt847 nexttoward sNaN 1000 -> NaN Invalid_operation +ddnextt848 nexttoward sNaN NaN -> NaN Invalid_operation +ddnextt849 nexttoward sNaN sNaN -> NaN Invalid_operation +ddnextt850 nexttoward NaN sNaN -> NaN Invalid_operation +ddnextt851 nexttoward -Inf sNaN -> NaN Invalid_operation +ddnextt852 nexttoward -1000 sNaN -> NaN Invalid_operation +ddnextt853 nexttoward -1 sNaN -> NaN Invalid_operation +ddnextt854 nexttoward -0 sNaN -> NaN Invalid_operation +ddnextt855 nexttoward 0 sNaN -> NaN Invalid_operation +ddnextt856 nexttoward 1 sNaN -> NaN Invalid_operation +ddnextt857 nexttoward 1000 sNaN -> NaN Invalid_operation +ddnextt858 nexttoward Inf sNaN -> NaN Invalid_operation +ddnextt859 nexttoward NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddnextt861 nexttoward NaN1 -Inf -> NaN1 +ddnextt862 nexttoward +NaN2 -1000 -> NaN2 +ddnextt863 nexttoward NaN3 1000 -> NaN3 +ddnextt864 nexttoward NaN4 Inf -> NaN4 +ddnextt865 nexttoward NaN5 +NaN6 -> NaN5 +ddnextt866 nexttoward -Inf NaN7 -> NaN7 +ddnextt867 nexttoward -1000 NaN8 -> NaN8 +ddnextt868 nexttoward 1000 NaN9 -> NaN9 +ddnextt869 nexttoward Inf +NaN10 -> NaN10 +ddnextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation +ddnextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation +ddnextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation +ddnextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation +ddnextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation +ddnextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation +ddnextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation +ddnextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation +ddnextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation +ddnextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation +ddnextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddnextt882 nexttoward -NaN26 NaN28 -> -NaN26 +ddnextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddnextt884 nexttoward 1000 -NaN30 -> -NaN30 +ddnextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Null tests +ddnextt900 nexttoward 1 # -> NaN Invalid_operation +ddnextt901 nexttoward # 1 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddOr.decTest b/Lib/test/decimaltestdata/ddOr.decTest index d36580bf667..f3a702b0ef6 100644 --- a/Lib/test/decimaltestdata/ddOr.decTest +++ b/Lib/test/decimaltestdata/ddOr.decTest @@ -1,292 +1,292 @@ ------------------------------------------------------------------------- --- ddOr.decTest -- digitwise logical OR for decDoubles -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check (truth table) -ddor001 or 0 0 -> 0 -ddor002 or 0 1 -> 1 -ddor003 or 1 0 -> 1 -ddor004 or 1 1 -> 1 -ddor005 or 1100 1010 -> 1110 --- and at msd and msd-1 -ddor006 or 0000000000000000 0000000000000000 -> 0 -ddor007 or 0000000000000000 1000000000000000 -> 1000000000000000 -ddor008 or 1000000000000000 0000000000000000 -> 1000000000000000 -ddor009 or 1000000000000000 1000000000000000 -> 1000000000000000 -ddor010 or 0000000000000000 0000000000000000 -> 0 -ddor011 or 0000000000000000 0100000000000000 -> 100000000000000 -ddor012 or 0100000000000000 0000000000000000 -> 100000000000000 -ddor013 or 0100000000000000 0100000000000000 -> 100000000000000 - --- Various lengths --- 1234567890123456 1234567890123456 1234567890123456 -ddor020 or 1111111111111111 1111111111111111 -> 1111111111111111 -ddor021 or 111111111111111 111111111111111 -> 111111111111111 -ddor022 or 11111111111111 11111111111111 -> 11111111111111 -ddor023 or 1111111111111 1111111111111 -> 1111111111111 -ddor024 or 111111111111 111111111111 -> 111111111111 -ddor025 or 11111111111 11111111111 -> 11111111111 -ddor026 or 1111111111 1111111111 -> 1111111111 -ddor027 or 111111111 111111111 -> 111111111 -ddor028 or 11111111 11111111 -> 11111111 -ddor029 or 1111111 1111111 -> 1111111 -ddor030 or 111111 111111 -> 111111 -ddor031 or 11111 11111 -> 11111 -ddor032 or 1111 1111 -> 1111 -ddor033 or 111 111 -> 111 -ddor034 or 11 11 -> 11 -ddor035 or 1 1 -> 1 -ddor036 or 0 0 -> 0 - -ddor042 or 111111110000000 1111111110000000 -> 1111111110000000 -ddor043 or 11111110000000 1000000100000000 -> 1011111110000000 -ddor044 or 1111110000000 1000001000000000 -> 1001111110000000 -ddor045 or 111110000000 1000010000000000 -> 1000111110000000 -ddor046 or 11110000000 1000100000000000 -> 1000111110000000 -ddor047 or 1110000000 1001000000000000 -> 1001001110000000 -ddor048 or 110000000 1010000000000000 -> 1010000110000000 -ddor049 or 10000000 1100000000000000 -> 1100000010000000 - -ddor090 or 011111111 111101111 -> 111111111 -ddor091 or 101111111 111101111 -> 111111111 -ddor092 or 110111111 111101111 -> 111111111 -ddor093 or 111011111 111101111 -> 111111111 -ddor094 or 111101111 111101111 -> 111101111 -ddor095 or 111110111 111101111 -> 111111111 -ddor096 or 111111011 111101111 -> 111111111 -ddor097 or 111111101 111101111 -> 111111111 -ddor098 or 111111110 111101111 -> 111111111 - -ddor100 or 111101111 011111111 -> 111111111 -ddor101 or 111101111 101111111 -> 111111111 -ddor102 or 111101111 110111111 -> 111111111 -ddor103 or 111101111 111011111 -> 111111111 -ddor104 or 111101111 111101111 -> 111101111 -ddor105 or 111101111 111110111 -> 111111111 -ddor106 or 111101111 111111011 -> 111111111 -ddor107 or 111101111 111111101 -> 111111111 -ddor108 or 111101111 111111110 -> 111111111 - --- non-0/1 should not be accepted, nor should signs -ddor220 or 111111112 111111111 -> NaN Invalid_operation -ddor221 or 333333333 333333333 -> NaN Invalid_operation -ddor222 or 555555555 555555555 -> NaN Invalid_operation -ddor223 or 777777777 777777777 -> NaN Invalid_operation -ddor224 or 999999999 999999999 -> NaN Invalid_operation -ddor225 or 222222222 999999999 -> NaN Invalid_operation -ddor226 or 444444444 999999999 -> NaN Invalid_operation -ddor227 or 666666666 999999999 -> NaN Invalid_operation -ddor228 or 888888888 999999999 -> NaN Invalid_operation -ddor229 or 999999999 222222222 -> NaN Invalid_operation -ddor230 or 999999999 444444444 -> NaN Invalid_operation -ddor231 or 999999999 666666666 -> NaN Invalid_operation -ddor232 or 999999999 888888888 -> NaN Invalid_operation --- a few randoms -ddor240 or 567468689 -934981942 -> NaN Invalid_operation -ddor241 or 567367689 934981942 -> NaN Invalid_operation -ddor242 or -631917772 -706014634 -> NaN Invalid_operation -ddor243 or -756253257 138579234 -> NaN Invalid_operation -ddor244 or 835590149 567435400 -> NaN Invalid_operation --- test MSD -ddor250 or 2000000000000000 1000000000000000 -> NaN Invalid_operation -ddor251 or 7000000000000000 1000000000000000 -> NaN Invalid_operation -ddor252 or 8000000000000000 1000000000000000 -> NaN Invalid_operation -ddor253 or 9000000000000000 1000000000000000 -> NaN Invalid_operation -ddor254 or 2000000000000000 0000000000000000 -> NaN Invalid_operation -ddor255 or 7000000000000000 0000000000000000 -> NaN Invalid_operation -ddor256 or 8000000000000000 0000000000000000 -> NaN Invalid_operation -ddor257 or 9000000000000000 0000000000000000 -> NaN Invalid_operation -ddor258 or 1000000000000000 2000000000000000 -> NaN Invalid_operation -ddor259 or 1000000000000000 7000000000000000 -> NaN Invalid_operation -ddor260 or 1000000000000000 8000000000000000 -> NaN Invalid_operation -ddor261 or 1000000000000000 9000000000000000 -> NaN Invalid_operation -ddor262 or 0000000000000000 2000000000000000 -> NaN Invalid_operation -ddor263 or 0000000000000000 7000000000000000 -> NaN Invalid_operation -ddor264 or 0000000000000000 8000000000000000 -> NaN Invalid_operation -ddor265 or 0000000000000000 9000000000000000 -> NaN Invalid_operation --- test MSD-1 -ddor270 or 0200001000000000 1000100000000010 -> NaN Invalid_operation -ddor271 or 0700000100000000 1000010000000100 -> NaN Invalid_operation -ddor272 or 0800000010000000 1000001000001000 -> NaN Invalid_operation -ddor273 or 0900000001000000 1000000100010000 -> NaN Invalid_operation -ddor274 or 1000000000100000 0200000010100000 -> NaN Invalid_operation -ddor275 or 1000000000010000 0700000001000000 -> NaN Invalid_operation -ddor276 or 1000000000001000 0800000010100000 -> NaN Invalid_operation -ddor277 or 1000000000000100 0900000000010000 -> NaN Invalid_operation --- test LSD -ddor280 or 0010000000000002 1000000100000001 -> NaN Invalid_operation -ddor281 or 0001000000000007 1000001000000011 -> NaN Invalid_operation -ddor282 or 0000100000000008 1000010000000001 -> NaN Invalid_operation -ddor283 or 0000010000000009 1000100000000001 -> NaN Invalid_operation -ddor284 or 1000001000000000 0001000000000002 -> NaN Invalid_operation -ddor285 or 1000000100000000 0010000000000007 -> NaN Invalid_operation -ddor286 or 1000000010000000 0100000000000008 -> NaN Invalid_operation -ddor287 or 1000000001000000 1000000000000009 -> NaN Invalid_operation --- test Middie -ddor288 or 0010000020000000 1000001000000000 -> NaN Invalid_operation -ddor289 or 0001000070000001 1000000100000000 -> NaN Invalid_operation -ddor290 or 0000100080000010 1000000010000000 -> NaN Invalid_operation -ddor291 or 0000010090000100 1000000001000000 -> NaN Invalid_operation -ddor292 or 1000001000001000 0000000020100000 -> NaN Invalid_operation -ddor293 or 1000000100010000 0000000070010000 -> NaN Invalid_operation -ddor294 or 1000000010100000 0000000080001000 -> NaN Invalid_operation -ddor295 or 1000000001000000 0000000090000100 -> NaN Invalid_operation --- signs -ddor296 or -1000000001000000 -0000010000000100 -> NaN Invalid_operation -ddor297 or -1000000001000000 0000000010000100 -> NaN Invalid_operation -ddor298 or 1000000001000000 -0000001000000100 -> NaN Invalid_operation -ddor299 or 1000000001000000 0000000011000100 -> 1000000011000100 - --- Nmax, Nmin, Ntiny-like -ddor331 or 2 9.99999999E+199 -> NaN Invalid_operation -ddor332 or 3 1E-199 -> NaN Invalid_operation -ddor333 or 4 1.00000000E-199 -> NaN Invalid_operation -ddor334 or 5 1E-100 -> NaN Invalid_operation -ddor335 or 6 -1E-100 -> NaN Invalid_operation -ddor336 or 7 -1.00000000E-199 -> NaN Invalid_operation -ddor337 or 8 -1E-199 -> NaN Invalid_operation -ddor338 or 9 -9.99999999E+199 -> NaN Invalid_operation -ddor341 or 9.99999999E+299 -18 -> NaN Invalid_operation -ddor342 or 1E-299 01 -> NaN Invalid_operation -ddor343 or 1.00000000E-299 -18 -> NaN Invalid_operation -ddor344 or 1E-100 18 -> NaN Invalid_operation -ddor345 or -1E-100 -10 -> NaN Invalid_operation -ddor346 or -1.00000000E-299 18 -> NaN Invalid_operation -ddor347 or -1E-299 10 -> NaN Invalid_operation -ddor348 or -9.99999999E+299 -18 -> NaN Invalid_operation - --- A few other non-integers -ddor361 or 1.0 1 -> NaN Invalid_operation -ddor362 or 1E+1 1 -> NaN Invalid_operation -ddor363 or 0.0 1 -> NaN Invalid_operation -ddor364 or 0E+1 1 -> NaN Invalid_operation -ddor365 or 9.9 1 -> NaN Invalid_operation -ddor366 or 9E+1 1 -> NaN Invalid_operation -ddor371 or 0 1.0 -> NaN Invalid_operation -ddor372 or 0 1E+1 -> NaN Invalid_operation -ddor373 or 0 0.0 -> NaN Invalid_operation -ddor374 or 0 0E+1 -> NaN Invalid_operation -ddor375 or 0 9.9 -> NaN Invalid_operation -ddor376 or 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -ddor780 or -Inf -Inf -> NaN Invalid_operation -ddor781 or -Inf -1000 -> NaN Invalid_operation -ddor782 or -Inf -1 -> NaN Invalid_operation -ddor783 or -Inf -0 -> NaN Invalid_operation -ddor784 or -Inf 0 -> NaN Invalid_operation -ddor785 or -Inf 1 -> NaN Invalid_operation -ddor786 or -Inf 1000 -> NaN Invalid_operation -ddor787 or -1000 -Inf -> NaN Invalid_operation -ddor788 or -Inf -Inf -> NaN Invalid_operation -ddor789 or -1 -Inf -> NaN Invalid_operation -ddor790 or -0 -Inf -> NaN Invalid_operation -ddor791 or 0 -Inf -> NaN Invalid_operation -ddor792 or 1 -Inf -> NaN Invalid_operation -ddor793 or 1000 -Inf -> NaN Invalid_operation -ddor794 or Inf -Inf -> NaN Invalid_operation - -ddor800 or Inf -Inf -> NaN Invalid_operation -ddor801 or Inf -1000 -> NaN Invalid_operation -ddor802 or Inf -1 -> NaN Invalid_operation -ddor803 or Inf -0 -> NaN Invalid_operation -ddor804 or Inf 0 -> NaN Invalid_operation -ddor805 or Inf 1 -> NaN Invalid_operation -ddor806 or Inf 1000 -> NaN Invalid_operation -ddor807 or Inf Inf -> NaN Invalid_operation -ddor808 or -1000 Inf -> NaN Invalid_operation -ddor809 or -Inf Inf -> NaN Invalid_operation -ddor810 or -1 Inf -> NaN Invalid_operation -ddor811 or -0 Inf -> NaN Invalid_operation -ddor812 or 0 Inf -> NaN Invalid_operation -ddor813 or 1 Inf -> NaN Invalid_operation -ddor814 or 1000 Inf -> NaN Invalid_operation -ddor815 or Inf Inf -> NaN Invalid_operation - -ddor821 or NaN -Inf -> NaN Invalid_operation -ddor822 or NaN -1000 -> NaN Invalid_operation -ddor823 or NaN -1 -> NaN Invalid_operation -ddor824 or NaN -0 -> NaN Invalid_operation -ddor825 or NaN 0 -> NaN Invalid_operation -ddor826 or NaN 1 -> NaN Invalid_operation -ddor827 or NaN 1000 -> NaN Invalid_operation -ddor828 or NaN Inf -> NaN Invalid_operation -ddor829 or NaN NaN -> NaN Invalid_operation -ddor830 or -Inf NaN -> NaN Invalid_operation -ddor831 or -1000 NaN -> NaN Invalid_operation -ddor832 or -1 NaN -> NaN Invalid_operation -ddor833 or -0 NaN -> NaN Invalid_operation -ddor834 or 0 NaN -> NaN Invalid_operation -ddor835 or 1 NaN -> NaN Invalid_operation -ddor836 or 1000 NaN -> NaN Invalid_operation -ddor837 or Inf NaN -> NaN Invalid_operation - -ddor841 or sNaN -Inf -> NaN Invalid_operation -ddor842 or sNaN -1000 -> NaN Invalid_operation -ddor843 or sNaN -1 -> NaN Invalid_operation -ddor844 or sNaN -0 -> NaN Invalid_operation -ddor845 or sNaN 0 -> NaN Invalid_operation -ddor846 or sNaN 1 -> NaN Invalid_operation -ddor847 or sNaN 1000 -> NaN Invalid_operation -ddor848 or sNaN NaN -> NaN Invalid_operation -ddor849 or sNaN sNaN -> NaN Invalid_operation -ddor850 or NaN sNaN -> NaN Invalid_operation -ddor851 or -Inf sNaN -> NaN Invalid_operation -ddor852 or -1000 sNaN -> NaN Invalid_operation -ddor853 or -1 sNaN -> NaN Invalid_operation -ddor854 or -0 sNaN -> NaN Invalid_operation -ddor855 or 0 sNaN -> NaN Invalid_operation -ddor856 or 1 sNaN -> NaN Invalid_operation -ddor857 or 1000 sNaN -> NaN Invalid_operation -ddor858 or Inf sNaN -> NaN Invalid_operation -ddor859 or NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddor861 or NaN1 -Inf -> NaN Invalid_operation -ddor862 or +NaN2 -1000 -> NaN Invalid_operation -ddor863 or NaN3 1000 -> NaN Invalid_operation -ddor864 or NaN4 Inf -> NaN Invalid_operation -ddor865 or NaN5 +NaN6 -> NaN Invalid_operation -ddor866 or -Inf NaN7 -> NaN Invalid_operation -ddor867 or -1000 NaN8 -> NaN Invalid_operation -ddor868 or 1000 NaN9 -> NaN Invalid_operation -ddor869 or Inf +NaN10 -> NaN Invalid_operation -ddor871 or sNaN11 -Inf -> NaN Invalid_operation -ddor872 or sNaN12 -1000 -> NaN Invalid_operation -ddor873 or sNaN13 1000 -> NaN Invalid_operation -ddor874 or sNaN14 NaN17 -> NaN Invalid_operation -ddor875 or sNaN15 sNaN18 -> NaN Invalid_operation -ddor876 or NaN16 sNaN19 -> NaN Invalid_operation -ddor877 or -Inf +sNaN20 -> NaN Invalid_operation -ddor878 or -1000 sNaN21 -> NaN Invalid_operation -ddor879 or 1000 sNaN22 -> NaN Invalid_operation -ddor880 or Inf sNaN23 -> NaN Invalid_operation -ddor881 or +NaN25 +sNaN24 -> NaN Invalid_operation -ddor882 or -NaN26 NaN28 -> NaN Invalid_operation -ddor883 or -sNaN27 sNaN29 -> NaN Invalid_operation -ddor884 or 1000 -NaN30 -> NaN Invalid_operation -ddor885 or 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddOr.decTest -- digitwise logical OR for decDoubles -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check (truth table) +ddor001 or 0 0 -> 0 +ddor002 or 0 1 -> 1 +ddor003 or 1 0 -> 1 +ddor004 or 1 1 -> 1 +ddor005 or 1100 1010 -> 1110 +-- and at msd and msd-1 +ddor006 or 0000000000000000 0000000000000000 -> 0 +ddor007 or 0000000000000000 1000000000000000 -> 1000000000000000 +ddor008 or 1000000000000000 0000000000000000 -> 1000000000000000 +ddor009 or 1000000000000000 1000000000000000 -> 1000000000000000 +ddor010 or 0000000000000000 0000000000000000 -> 0 +ddor011 or 0000000000000000 0100000000000000 -> 100000000000000 +ddor012 or 0100000000000000 0000000000000000 -> 100000000000000 +ddor013 or 0100000000000000 0100000000000000 -> 100000000000000 + +-- Various lengths +-- 1234567890123456 1234567890123456 1234567890123456 +ddor020 or 1111111111111111 1111111111111111 -> 1111111111111111 +ddor021 or 111111111111111 111111111111111 -> 111111111111111 +ddor022 or 11111111111111 11111111111111 -> 11111111111111 +ddor023 or 1111111111111 1111111111111 -> 1111111111111 +ddor024 or 111111111111 111111111111 -> 111111111111 +ddor025 or 11111111111 11111111111 -> 11111111111 +ddor026 or 1111111111 1111111111 -> 1111111111 +ddor027 or 111111111 111111111 -> 111111111 +ddor028 or 11111111 11111111 -> 11111111 +ddor029 or 1111111 1111111 -> 1111111 +ddor030 or 111111 111111 -> 111111 +ddor031 or 11111 11111 -> 11111 +ddor032 or 1111 1111 -> 1111 +ddor033 or 111 111 -> 111 +ddor034 or 11 11 -> 11 +ddor035 or 1 1 -> 1 +ddor036 or 0 0 -> 0 + +ddor042 or 111111110000000 1111111110000000 -> 1111111110000000 +ddor043 or 11111110000000 1000000100000000 -> 1011111110000000 +ddor044 or 1111110000000 1000001000000000 -> 1001111110000000 +ddor045 or 111110000000 1000010000000000 -> 1000111110000000 +ddor046 or 11110000000 1000100000000000 -> 1000111110000000 +ddor047 or 1110000000 1001000000000000 -> 1001001110000000 +ddor048 or 110000000 1010000000000000 -> 1010000110000000 +ddor049 or 10000000 1100000000000000 -> 1100000010000000 + +ddor090 or 011111111 111101111 -> 111111111 +ddor091 or 101111111 111101111 -> 111111111 +ddor092 or 110111111 111101111 -> 111111111 +ddor093 or 111011111 111101111 -> 111111111 +ddor094 or 111101111 111101111 -> 111101111 +ddor095 or 111110111 111101111 -> 111111111 +ddor096 or 111111011 111101111 -> 111111111 +ddor097 or 111111101 111101111 -> 111111111 +ddor098 or 111111110 111101111 -> 111111111 + +ddor100 or 111101111 011111111 -> 111111111 +ddor101 or 111101111 101111111 -> 111111111 +ddor102 or 111101111 110111111 -> 111111111 +ddor103 or 111101111 111011111 -> 111111111 +ddor104 or 111101111 111101111 -> 111101111 +ddor105 or 111101111 111110111 -> 111111111 +ddor106 or 111101111 111111011 -> 111111111 +ddor107 or 111101111 111111101 -> 111111111 +ddor108 or 111101111 111111110 -> 111111111 + +-- non-0/1 should not be accepted, nor should signs +ddor220 or 111111112 111111111 -> NaN Invalid_operation +ddor221 or 333333333 333333333 -> NaN Invalid_operation +ddor222 or 555555555 555555555 -> NaN Invalid_operation +ddor223 or 777777777 777777777 -> NaN Invalid_operation +ddor224 or 999999999 999999999 -> NaN Invalid_operation +ddor225 or 222222222 999999999 -> NaN Invalid_operation +ddor226 or 444444444 999999999 -> NaN Invalid_operation +ddor227 or 666666666 999999999 -> NaN Invalid_operation +ddor228 or 888888888 999999999 -> NaN Invalid_operation +ddor229 or 999999999 222222222 -> NaN Invalid_operation +ddor230 or 999999999 444444444 -> NaN Invalid_operation +ddor231 or 999999999 666666666 -> NaN Invalid_operation +ddor232 or 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +ddor240 or 567468689 -934981942 -> NaN Invalid_operation +ddor241 or 567367689 934981942 -> NaN Invalid_operation +ddor242 or -631917772 -706014634 -> NaN Invalid_operation +ddor243 or -756253257 138579234 -> NaN Invalid_operation +ddor244 or 835590149 567435400 -> NaN Invalid_operation +-- test MSD +ddor250 or 2000000000000000 1000000000000000 -> NaN Invalid_operation +ddor251 or 7000000000000000 1000000000000000 -> NaN Invalid_operation +ddor252 or 8000000000000000 1000000000000000 -> NaN Invalid_operation +ddor253 or 9000000000000000 1000000000000000 -> NaN Invalid_operation +ddor254 or 2000000000000000 0000000000000000 -> NaN Invalid_operation +ddor255 or 7000000000000000 0000000000000000 -> NaN Invalid_operation +ddor256 or 8000000000000000 0000000000000000 -> NaN Invalid_operation +ddor257 or 9000000000000000 0000000000000000 -> NaN Invalid_operation +ddor258 or 1000000000000000 2000000000000000 -> NaN Invalid_operation +ddor259 or 1000000000000000 7000000000000000 -> NaN Invalid_operation +ddor260 or 1000000000000000 8000000000000000 -> NaN Invalid_operation +ddor261 or 1000000000000000 9000000000000000 -> NaN Invalid_operation +ddor262 or 0000000000000000 2000000000000000 -> NaN Invalid_operation +ddor263 or 0000000000000000 7000000000000000 -> NaN Invalid_operation +ddor264 or 0000000000000000 8000000000000000 -> NaN Invalid_operation +ddor265 or 0000000000000000 9000000000000000 -> NaN Invalid_operation +-- test MSD-1 +ddor270 or 0200001000000000 1000100000000010 -> NaN Invalid_operation +ddor271 or 0700000100000000 1000010000000100 -> NaN Invalid_operation +ddor272 or 0800000010000000 1000001000001000 -> NaN Invalid_operation +ddor273 or 0900000001000000 1000000100010000 -> NaN Invalid_operation +ddor274 or 1000000000100000 0200000010100000 -> NaN Invalid_operation +ddor275 or 1000000000010000 0700000001000000 -> NaN Invalid_operation +ddor276 or 1000000000001000 0800000010100000 -> NaN Invalid_operation +ddor277 or 1000000000000100 0900000000010000 -> NaN Invalid_operation +-- test LSD +ddor280 or 0010000000000002 1000000100000001 -> NaN Invalid_operation +ddor281 or 0001000000000007 1000001000000011 -> NaN Invalid_operation +ddor282 or 0000100000000008 1000010000000001 -> NaN Invalid_operation +ddor283 or 0000010000000009 1000100000000001 -> NaN Invalid_operation +ddor284 or 1000001000000000 0001000000000002 -> NaN Invalid_operation +ddor285 or 1000000100000000 0010000000000007 -> NaN Invalid_operation +ddor286 or 1000000010000000 0100000000000008 -> NaN Invalid_operation +ddor287 or 1000000001000000 1000000000000009 -> NaN Invalid_operation +-- test Middie +ddor288 or 0010000020000000 1000001000000000 -> NaN Invalid_operation +ddor289 or 0001000070000001 1000000100000000 -> NaN Invalid_operation +ddor290 or 0000100080000010 1000000010000000 -> NaN Invalid_operation +ddor291 or 0000010090000100 1000000001000000 -> NaN Invalid_operation +ddor292 or 1000001000001000 0000000020100000 -> NaN Invalid_operation +ddor293 or 1000000100010000 0000000070010000 -> NaN Invalid_operation +ddor294 or 1000000010100000 0000000080001000 -> NaN Invalid_operation +ddor295 or 1000000001000000 0000000090000100 -> NaN Invalid_operation +-- signs +ddor296 or -1000000001000000 -0000010000000100 -> NaN Invalid_operation +ddor297 or -1000000001000000 0000000010000100 -> NaN Invalid_operation +ddor298 or 1000000001000000 -0000001000000100 -> NaN Invalid_operation +ddor299 or 1000000001000000 0000000011000100 -> 1000000011000100 + +-- Nmax, Nmin, Ntiny-like +ddor331 or 2 9.99999999E+199 -> NaN Invalid_operation +ddor332 or 3 1E-199 -> NaN Invalid_operation +ddor333 or 4 1.00000000E-199 -> NaN Invalid_operation +ddor334 or 5 1E-100 -> NaN Invalid_operation +ddor335 or 6 -1E-100 -> NaN Invalid_operation +ddor336 or 7 -1.00000000E-199 -> NaN Invalid_operation +ddor337 or 8 -1E-199 -> NaN Invalid_operation +ddor338 or 9 -9.99999999E+199 -> NaN Invalid_operation +ddor341 or 9.99999999E+299 -18 -> NaN Invalid_operation +ddor342 or 1E-299 01 -> NaN Invalid_operation +ddor343 or 1.00000000E-299 -18 -> NaN Invalid_operation +ddor344 or 1E-100 18 -> NaN Invalid_operation +ddor345 or -1E-100 -10 -> NaN Invalid_operation +ddor346 or -1.00000000E-299 18 -> NaN Invalid_operation +ddor347 or -1E-299 10 -> NaN Invalid_operation +ddor348 or -9.99999999E+299 -18 -> NaN Invalid_operation + +-- A few other non-integers +ddor361 or 1.0 1 -> NaN Invalid_operation +ddor362 or 1E+1 1 -> NaN Invalid_operation +ddor363 or 0.0 1 -> NaN Invalid_operation +ddor364 or 0E+1 1 -> NaN Invalid_operation +ddor365 or 9.9 1 -> NaN Invalid_operation +ddor366 or 9E+1 1 -> NaN Invalid_operation +ddor371 or 0 1.0 -> NaN Invalid_operation +ddor372 or 0 1E+1 -> NaN Invalid_operation +ddor373 or 0 0.0 -> NaN Invalid_operation +ddor374 or 0 0E+1 -> NaN Invalid_operation +ddor375 or 0 9.9 -> NaN Invalid_operation +ddor376 or 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +ddor780 or -Inf -Inf -> NaN Invalid_operation +ddor781 or -Inf -1000 -> NaN Invalid_operation +ddor782 or -Inf -1 -> NaN Invalid_operation +ddor783 or -Inf -0 -> NaN Invalid_operation +ddor784 or -Inf 0 -> NaN Invalid_operation +ddor785 or -Inf 1 -> NaN Invalid_operation +ddor786 or -Inf 1000 -> NaN Invalid_operation +ddor787 or -1000 -Inf -> NaN Invalid_operation +ddor788 or -Inf -Inf -> NaN Invalid_operation +ddor789 or -1 -Inf -> NaN Invalid_operation +ddor790 or -0 -Inf -> NaN Invalid_operation +ddor791 or 0 -Inf -> NaN Invalid_operation +ddor792 or 1 -Inf -> NaN Invalid_operation +ddor793 or 1000 -Inf -> NaN Invalid_operation +ddor794 or Inf -Inf -> NaN Invalid_operation + +ddor800 or Inf -Inf -> NaN Invalid_operation +ddor801 or Inf -1000 -> NaN Invalid_operation +ddor802 or Inf -1 -> NaN Invalid_operation +ddor803 or Inf -0 -> NaN Invalid_operation +ddor804 or Inf 0 -> NaN Invalid_operation +ddor805 or Inf 1 -> NaN Invalid_operation +ddor806 or Inf 1000 -> NaN Invalid_operation +ddor807 or Inf Inf -> NaN Invalid_operation +ddor808 or -1000 Inf -> NaN Invalid_operation +ddor809 or -Inf Inf -> NaN Invalid_operation +ddor810 or -1 Inf -> NaN Invalid_operation +ddor811 or -0 Inf -> NaN Invalid_operation +ddor812 or 0 Inf -> NaN Invalid_operation +ddor813 or 1 Inf -> NaN Invalid_operation +ddor814 or 1000 Inf -> NaN Invalid_operation +ddor815 or Inf Inf -> NaN Invalid_operation + +ddor821 or NaN -Inf -> NaN Invalid_operation +ddor822 or NaN -1000 -> NaN Invalid_operation +ddor823 or NaN -1 -> NaN Invalid_operation +ddor824 or NaN -0 -> NaN Invalid_operation +ddor825 or NaN 0 -> NaN Invalid_operation +ddor826 or NaN 1 -> NaN Invalid_operation +ddor827 or NaN 1000 -> NaN Invalid_operation +ddor828 or NaN Inf -> NaN Invalid_operation +ddor829 or NaN NaN -> NaN Invalid_operation +ddor830 or -Inf NaN -> NaN Invalid_operation +ddor831 or -1000 NaN -> NaN Invalid_operation +ddor832 or -1 NaN -> NaN Invalid_operation +ddor833 or -0 NaN -> NaN Invalid_operation +ddor834 or 0 NaN -> NaN Invalid_operation +ddor835 or 1 NaN -> NaN Invalid_operation +ddor836 or 1000 NaN -> NaN Invalid_operation +ddor837 or Inf NaN -> NaN Invalid_operation + +ddor841 or sNaN -Inf -> NaN Invalid_operation +ddor842 or sNaN -1000 -> NaN Invalid_operation +ddor843 or sNaN -1 -> NaN Invalid_operation +ddor844 or sNaN -0 -> NaN Invalid_operation +ddor845 or sNaN 0 -> NaN Invalid_operation +ddor846 or sNaN 1 -> NaN Invalid_operation +ddor847 or sNaN 1000 -> NaN Invalid_operation +ddor848 or sNaN NaN -> NaN Invalid_operation +ddor849 or sNaN sNaN -> NaN Invalid_operation +ddor850 or NaN sNaN -> NaN Invalid_operation +ddor851 or -Inf sNaN -> NaN Invalid_operation +ddor852 or -1000 sNaN -> NaN Invalid_operation +ddor853 or -1 sNaN -> NaN Invalid_operation +ddor854 or -0 sNaN -> NaN Invalid_operation +ddor855 or 0 sNaN -> NaN Invalid_operation +ddor856 or 1 sNaN -> NaN Invalid_operation +ddor857 or 1000 sNaN -> NaN Invalid_operation +ddor858 or Inf sNaN -> NaN Invalid_operation +ddor859 or NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddor861 or NaN1 -Inf -> NaN Invalid_operation +ddor862 or +NaN2 -1000 -> NaN Invalid_operation +ddor863 or NaN3 1000 -> NaN Invalid_operation +ddor864 or NaN4 Inf -> NaN Invalid_operation +ddor865 or NaN5 +NaN6 -> NaN Invalid_operation +ddor866 or -Inf NaN7 -> NaN Invalid_operation +ddor867 or -1000 NaN8 -> NaN Invalid_operation +ddor868 or 1000 NaN9 -> NaN Invalid_operation +ddor869 or Inf +NaN10 -> NaN Invalid_operation +ddor871 or sNaN11 -Inf -> NaN Invalid_operation +ddor872 or sNaN12 -1000 -> NaN Invalid_operation +ddor873 or sNaN13 1000 -> NaN Invalid_operation +ddor874 or sNaN14 NaN17 -> NaN Invalid_operation +ddor875 or sNaN15 sNaN18 -> NaN Invalid_operation +ddor876 or NaN16 sNaN19 -> NaN Invalid_operation +ddor877 or -Inf +sNaN20 -> NaN Invalid_operation +ddor878 or -1000 sNaN21 -> NaN Invalid_operation +ddor879 or 1000 sNaN22 -> NaN Invalid_operation +ddor880 or Inf sNaN23 -> NaN Invalid_operation +ddor881 or +NaN25 +sNaN24 -> NaN Invalid_operation +ddor882 or -NaN26 NaN28 -> NaN Invalid_operation +ddor883 or -sNaN27 sNaN29 -> NaN Invalid_operation +ddor884 or 1000 -NaN30 -> NaN Invalid_operation +ddor885 or 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddPlus.decTest b/Lib/test/decimaltestdata/ddPlus.decTest index 5191239bf71..17aa08af9f7 100644 --- a/Lib/test/decimaltestdata/ddPlus.decTest +++ b/Lib/test/decimaltestdata/ddPlus.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddPlus.decTest -- decDouble 0+x -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddpls001 plus +7.50 -> 7.50 - --- Infinities -ddpls011 plus Infinity -> Infinity -ddpls012 plus -Infinity -> -Infinity - --- NaNs, 0 payload -ddpls021 plus NaN -> NaN -ddpls022 plus -NaN -> -NaN -ddpls023 plus sNaN -> NaN Invalid_operation -ddpls024 plus -sNaN -> -NaN Invalid_operation - --- NaNs, non-0 payload -ddpls031 plus NaN13 -> NaN13 -ddpls032 plus -NaN13 -> -NaN13 -ddpls033 plus sNaN13 -> NaN13 Invalid_operation -ddpls034 plus -sNaN13 -> -NaN13 Invalid_operation -ddpls035 plus NaN70 -> NaN70 -ddpls036 plus -NaN70 -> -NaN70 -ddpls037 plus sNaN101 -> NaN101 Invalid_operation -ddpls038 plus -sNaN101 -> -NaN101 Invalid_operation - --- finites -ddpls101 plus 7 -> 7 -ddpls102 plus -7 -> -7 -ddpls103 plus 75 -> 75 -ddpls104 plus -75 -> -75 -ddpls105 plus 7.50 -> 7.50 -ddpls106 plus -7.50 -> -7.50 -ddpls107 plus 7.500 -> 7.500 -ddpls108 plus -7.500 -> -7.500 - --- zeros -ddpls111 plus 0 -> 0 -ddpls112 plus -0 -> 0 -ddpls113 plus 0E+4 -> 0E+4 -ddpls114 plus -0E+4 -> 0E+4 -ddpls115 plus 0.0000 -> 0.0000 -ddpls116 plus -0.0000 -> 0.0000 -ddpls117 plus 0E-141 -> 0E-141 -ddpls118 plus -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddpls121 plus 2682682682682682 -> 2682682682682682 -ddpls122 plus -2682682682682682 -> -2682682682682682 -ddpls123 plus 1341341341341341 -> 1341341341341341 -ddpls124 plus -1341341341341341 -> -1341341341341341 - --- Nmax, Nmin, Ntiny -ddpls131 plus 9.999999999999999E+384 -> 9.999999999999999E+384 -ddpls132 plus 1E-383 -> 1E-383 -ddpls133 plus 1.000000000000000E-383 -> 1.000000000000000E-383 -ddpls134 plus 1E-398 -> 1E-398 Subnormal - -ddpls135 plus -1E-398 -> -1E-398 Subnormal -ddpls136 plus -1.000000000000000E-383 -> -1.000000000000000E-383 -ddpls137 plus -1E-383 -> -1E-383 -ddpls138 plus -9.999999999999999E+384 -> -9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddPlus.decTest -- decDouble 0+x -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddpls001 plus +7.50 -> 7.50 + +-- Infinities +ddpls011 plus Infinity -> Infinity +ddpls012 plus -Infinity -> -Infinity + +-- NaNs, 0 payload +ddpls021 plus NaN -> NaN +ddpls022 plus -NaN -> -NaN +ddpls023 plus sNaN -> NaN Invalid_operation +ddpls024 plus -sNaN -> -NaN Invalid_operation + +-- NaNs, non-0 payload +ddpls031 plus NaN13 -> NaN13 +ddpls032 plus -NaN13 -> -NaN13 +ddpls033 plus sNaN13 -> NaN13 Invalid_operation +ddpls034 plus -sNaN13 -> -NaN13 Invalid_operation +ddpls035 plus NaN70 -> NaN70 +ddpls036 plus -NaN70 -> -NaN70 +ddpls037 plus sNaN101 -> NaN101 Invalid_operation +ddpls038 plus -sNaN101 -> -NaN101 Invalid_operation + +-- finites +ddpls101 plus 7 -> 7 +ddpls102 plus -7 -> -7 +ddpls103 plus 75 -> 75 +ddpls104 plus -75 -> -75 +ddpls105 plus 7.50 -> 7.50 +ddpls106 plus -7.50 -> -7.50 +ddpls107 plus 7.500 -> 7.500 +ddpls108 plus -7.500 -> -7.500 + +-- zeros +ddpls111 plus 0 -> 0 +ddpls112 plus -0 -> 0 +ddpls113 plus 0E+4 -> 0E+4 +ddpls114 plus -0E+4 -> 0E+4 +ddpls115 plus 0.0000 -> 0.0000 +ddpls116 plus -0.0000 -> 0.0000 +ddpls117 plus 0E-141 -> 0E-141 +ddpls118 plus -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddpls121 plus 2682682682682682 -> 2682682682682682 +ddpls122 plus -2682682682682682 -> -2682682682682682 +ddpls123 plus 1341341341341341 -> 1341341341341341 +ddpls124 plus -1341341341341341 -> -1341341341341341 + +-- Nmax, Nmin, Ntiny +ddpls131 plus 9.999999999999999E+384 -> 9.999999999999999E+384 +ddpls132 plus 1E-383 -> 1E-383 +ddpls133 plus 1.000000000000000E-383 -> 1.000000000000000E-383 +ddpls134 plus 1E-398 -> 1E-398 Subnormal + +ddpls135 plus -1E-398 -> -1E-398 Subnormal +ddpls136 plus -1.000000000000000E-383 -> -1.000000000000000E-383 +ddpls137 plus -1E-383 -> -1E-383 +ddpls138 plus -9.999999999999999E+384 -> -9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddQuantize.decTest b/Lib/test/decimaltestdata/ddQuantize.decTest index e1c5674d9ac..4b2b0041144 100644 --- a/Lib/test/decimaltestdata/ddQuantize.decTest +++ b/Lib/test/decimaltestdata/ddQuantize.decTest @@ -1,833 +1,833 @@ ------------------------------------------------------------------------- --- ddQuantize.decTest -- decDouble quantize operation -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Most of the tests here assume a "regular pattern", where the --- sign and coefficient are +1. --- 2004.03.15 Underflow for quantize is suppressed --- 2005.06.08 More extensive tests for 'does not fit' -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddqua001 quantize 0 1e0 -> 0 -ddqua002 quantize 1 1e0 -> 1 -ddqua003 quantize 0.1 1e+2 -> 0E+2 Inexact Rounded -ddqua005 quantize 0.1 1e+1 -> 0E+1 Inexact Rounded -ddqua006 quantize 0.1 1e0 -> 0 Inexact Rounded -ddqua007 quantize 0.1 1e-1 -> 0.1 -ddqua008 quantize 0.1 1e-2 -> 0.10 -ddqua009 quantize 0.1 1e-3 -> 0.100 -ddqua010 quantize 0.9 1e+2 -> 0E+2 Inexact Rounded -ddqua011 quantize 0.9 1e+1 -> 0E+1 Inexact Rounded -ddqua012 quantize 0.9 1e+0 -> 1 Inexact Rounded -ddqua013 quantize 0.9 1e-1 -> 0.9 -ddqua014 quantize 0.9 1e-2 -> 0.90 -ddqua015 quantize 0.9 1e-3 -> 0.900 --- negatives -ddqua021 quantize -0 1e0 -> -0 -ddqua022 quantize -1 1e0 -> -1 -ddqua023 quantize -0.1 1e+2 -> -0E+2 Inexact Rounded -ddqua025 quantize -0.1 1e+1 -> -0E+1 Inexact Rounded -ddqua026 quantize -0.1 1e0 -> -0 Inexact Rounded -ddqua027 quantize -0.1 1e-1 -> -0.1 -ddqua028 quantize -0.1 1e-2 -> -0.10 -ddqua029 quantize -0.1 1e-3 -> -0.100 -ddqua030 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded -ddqua031 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded -ddqua032 quantize -0.9 1e+0 -> -1 Inexact Rounded -ddqua033 quantize -0.9 1e-1 -> -0.9 -ddqua034 quantize -0.9 1e-2 -> -0.90 -ddqua035 quantize -0.9 1e-3 -> -0.900 -ddqua036 quantize -0.5 1e+2 -> -0E+2 Inexact Rounded -ddqua037 quantize -0.5 1e+1 -> -0E+1 Inexact Rounded -ddqua038 quantize -0.5 1e+0 -> -0 Inexact Rounded -ddqua039 quantize -0.5 1e-1 -> -0.5 -ddqua040 quantize -0.5 1e-2 -> -0.50 -ddqua041 quantize -0.5 1e-3 -> -0.500 -ddqua042 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded -ddqua043 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded -ddqua044 quantize -0.9 1e+0 -> -1 Inexact Rounded -ddqua045 quantize -0.9 1e-1 -> -0.9 -ddqua046 quantize -0.9 1e-2 -> -0.90 -ddqua047 quantize -0.9 1e-3 -> -0.900 - --- examples from Specification -ddqua060 quantize 2.17 0.001 -> 2.170 -ddqua061 quantize 2.17 0.01 -> 2.17 -ddqua062 quantize 2.17 0.1 -> 2.2 Inexact Rounded -ddqua063 quantize 2.17 1e+0 -> 2 Inexact Rounded -ddqua064 quantize 2.17 1e+1 -> 0E+1 Inexact Rounded -ddqua065 quantize -Inf Inf -> -Infinity -ddqua066 quantize 2 Inf -> NaN Invalid_operation -ddqua067 quantize -0.1 1 -> -0 Inexact Rounded -ddqua068 quantize -0 1e+5 -> -0E+5 -ddqua069 quantize +123456789012345.6 1e-2 -> NaN Invalid_operation -ddqua070 quantize -987654335236450.6 1e-2 -> NaN Invalid_operation -ddqua071 quantize 217 1e-1 -> 217.0 -ddqua072 quantize 217 1e+0 -> 217 -ddqua073 quantize 217 1e+1 -> 2.2E+2 Inexact Rounded -ddqua074 quantize 217 1e+2 -> 2E+2 Inexact Rounded - --- general tests .. -ddqua089 quantize 12 1e+4 -> 0E+4 Inexact Rounded -ddqua090 quantize 12 1e+3 -> 0E+3 Inexact Rounded -ddqua091 quantize 12 1e+2 -> 0E+2 Inexact Rounded -ddqua092 quantize 12 1e+1 -> 1E+1 Inexact Rounded -ddqua093 quantize 1.2345 1e-2 -> 1.23 Inexact Rounded -ddqua094 quantize 1.2355 1e-2 -> 1.24 Inexact Rounded -ddqua095 quantize 1.2345 1e-6 -> 1.234500 -ddqua096 quantize 9.9999 1e-2 -> 10.00 Inexact Rounded -ddqua097 quantize 0.0001 1e-2 -> 0.00 Inexact Rounded -ddqua098 quantize 0.001 1e-2 -> 0.00 Inexact Rounded -ddqua099 quantize 0.009 1e-2 -> 0.01 Inexact Rounded -ddqua100 quantize 92 1e+2 -> 1E+2 Inexact Rounded - -ddqua101 quantize -1 1e0 -> -1 -ddqua102 quantize -1 1e-1 -> -1.0 -ddqua103 quantize -1 1e-2 -> -1.00 -ddqua104 quantize 0 1e0 -> 0 -ddqua105 quantize 0 1e-1 -> 0.0 -ddqua106 quantize 0 1e-2 -> 0.00 -ddqua107 quantize 0.00 1e0 -> 0 -ddqua108 quantize 0 1e+1 -> 0E+1 -ddqua109 quantize 0 1e+2 -> 0E+2 -ddqua110 quantize +1 1e0 -> 1 -ddqua111 quantize +1 1e-1 -> 1.0 -ddqua112 quantize +1 1e-2 -> 1.00 - -ddqua120 quantize 1.04 1e-3 -> 1.040 -ddqua121 quantize 1.04 1e-2 -> 1.04 -ddqua122 quantize 1.04 1e-1 -> 1.0 Inexact Rounded -ddqua123 quantize 1.04 1e0 -> 1 Inexact Rounded -ddqua124 quantize 1.05 1e-3 -> 1.050 -ddqua125 quantize 1.05 1e-2 -> 1.05 -ddqua126 quantize 1.05 1e-1 -> 1.0 Inexact Rounded -ddqua131 quantize 1.05 1e0 -> 1 Inexact Rounded -ddqua132 quantize 1.06 1e-3 -> 1.060 -ddqua133 quantize 1.06 1e-2 -> 1.06 -ddqua134 quantize 1.06 1e-1 -> 1.1 Inexact Rounded -ddqua135 quantize 1.06 1e0 -> 1 Inexact Rounded - -ddqua140 quantize -10 1e-2 -> -10.00 -ddqua141 quantize +1 1e-2 -> 1.00 -ddqua142 quantize +10 1e-2 -> 10.00 -ddqua143 quantize 1E+17 1e-2 -> NaN Invalid_operation -ddqua144 quantize 1E-17 1e-2 -> 0.00 Inexact Rounded -ddqua145 quantize 1E-3 1e-2 -> 0.00 Inexact Rounded -ddqua146 quantize 1E-2 1e-2 -> 0.01 -ddqua147 quantize 1E-1 1e-2 -> 0.10 -ddqua148 quantize 0E-17 1e-2 -> 0.00 - -ddqua150 quantize 1.0600 1e-5 -> 1.06000 -ddqua151 quantize 1.0600 1e-4 -> 1.0600 -ddqua152 quantize 1.0600 1e-3 -> 1.060 Rounded -ddqua153 quantize 1.0600 1e-2 -> 1.06 Rounded -ddqua154 quantize 1.0600 1e-1 -> 1.1 Inexact Rounded -ddqua155 quantize 1.0600 1e0 -> 1 Inexact Rounded - --- a couple where rounding was different in base tests -rounding: half_up -ddqua157 quantize -0.5 1e+0 -> -1 Inexact Rounded -ddqua158 quantize 1.05 1e-1 -> 1.1 Inexact Rounded -ddqua159 quantize 1.06 1e0 -> 1 Inexact Rounded -rounding: half_even - --- base tests with non-1 coefficients -ddqua161 quantize 0 -9e0 -> 0 -ddqua162 quantize 1 -7e0 -> 1 -ddqua163 quantize 0.1 -1e+2 -> 0E+2 Inexact Rounded -ddqua165 quantize 0.1 0e+1 -> 0E+1 Inexact Rounded -ddqua166 quantize 0.1 2e0 -> 0 Inexact Rounded -ddqua167 quantize 0.1 3e-1 -> 0.1 -ddqua168 quantize 0.1 44e-2 -> 0.10 -ddqua169 quantize 0.1 555e-3 -> 0.100 -ddqua170 quantize 0.9 6666e+2 -> 0E+2 Inexact Rounded -ddqua171 quantize 0.9 -777e+1 -> 0E+1 Inexact Rounded -ddqua172 quantize 0.9 -88e+0 -> 1 Inexact Rounded -ddqua173 quantize 0.9 -9e-1 -> 0.9 -ddqua174 quantize 0.9 0e-2 -> 0.90 -ddqua175 quantize 0.9 1.1e-3 -> 0.9000 --- negatives -ddqua181 quantize -0 1.1e0 -> -0.0 -ddqua182 quantize -1 -1e0 -> -1 -ddqua183 quantize -0.1 11e+2 -> -0E+2 Inexact Rounded -ddqua185 quantize -0.1 111e+1 -> -0E+1 Inexact Rounded -ddqua186 quantize -0.1 71e0 -> -0 Inexact Rounded -ddqua187 quantize -0.1 -91e-1 -> -0.1 -ddqua188 quantize -0.1 -.1e-2 -> -0.100 -ddqua189 quantize -0.1 -1e-3 -> -0.100 -ddqua190 quantize -0.9 0e+2 -> -0E+2 Inexact Rounded -ddqua191 quantize -0.9 -0e+1 -> -0E+1 Inexact Rounded -ddqua192 quantize -0.9 -10e+0 -> -1 Inexact Rounded -ddqua193 quantize -0.9 100e-1 -> -0.9 -ddqua194 quantize -0.9 999e-2 -> -0.90 - --- +ve exponents .. -ddqua201 quantize -1 1e+0 -> -1 -ddqua202 quantize -1 1e+1 -> -0E+1 Inexact Rounded -ddqua203 quantize -1 1e+2 -> -0E+2 Inexact Rounded -ddqua204 quantize 0 1e+0 -> 0 -ddqua205 quantize 0 1e+1 -> 0E+1 -ddqua206 quantize 0 1e+2 -> 0E+2 -ddqua207 quantize +1 1e+0 -> 1 -ddqua208 quantize +1 1e+1 -> 0E+1 Inexact Rounded -ddqua209 quantize +1 1e+2 -> 0E+2 Inexact Rounded - -ddqua220 quantize 1.04 1e+3 -> 0E+3 Inexact Rounded -ddqua221 quantize 1.04 1e+2 -> 0E+2 Inexact Rounded -ddqua222 quantize 1.04 1e+1 -> 0E+1 Inexact Rounded -ddqua223 quantize 1.04 1e+0 -> 1 Inexact Rounded -ddqua224 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded -ddqua225 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded -ddqua226 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded -ddqua227 quantize 1.05 1e+0 -> 1 Inexact Rounded -ddqua228 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded -ddqua229 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded -ddqua230 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded -ddqua231 quantize 1.05 1e+0 -> 1 Inexact Rounded -ddqua232 quantize 1.06 1e+3 -> 0E+3 Inexact Rounded -ddqua233 quantize 1.06 1e+2 -> 0E+2 Inexact Rounded -ddqua234 quantize 1.06 1e+1 -> 0E+1 Inexact Rounded -ddqua235 quantize 1.06 1e+0 -> 1 Inexact Rounded - -ddqua240 quantize -10 1e+1 -> -1E+1 Rounded -ddqua241 quantize +1 1e+1 -> 0E+1 Inexact Rounded -ddqua242 quantize +10 1e+1 -> 1E+1 Rounded -ddqua243 quantize 1E+1 1e+1 -> 1E+1 -- underneath this is E+1 -ddqua244 quantize 1E+2 1e+1 -> 1.0E+2 -- underneath this is E+1 -ddqua245 quantize 1E+3 1e+1 -> 1.00E+3 -- underneath this is E+1 -ddqua246 quantize 1E+4 1e+1 -> 1.000E+4 -- underneath this is E+1 -ddqua247 quantize 1E+5 1e+1 -> 1.0000E+5 -- underneath this is E+1 -ddqua248 quantize 1E+6 1e+1 -> 1.00000E+6 -- underneath this is E+1 -ddqua249 quantize 1E+7 1e+1 -> 1.000000E+7 -- underneath this is E+1 -ddqua250 quantize 1E+8 1e+1 -> 1.0000000E+8 -- underneath this is E+1 -ddqua251 quantize 1E+9 1e+1 -> 1.00000000E+9 -- underneath this is E+1 --- next one tries to add 9 zeros -ddqua252 quantize 1E+17 1e+1 -> NaN Invalid_operation -ddqua253 quantize 1E-17 1e+1 -> 0E+1 Inexact Rounded -ddqua254 quantize 1E-2 1e+1 -> 0E+1 Inexact Rounded -ddqua255 quantize 0E-17 1e+1 -> 0E+1 -ddqua256 quantize -0E-17 1e+1 -> -0E+1 -ddqua257 quantize -0E-1 1e+1 -> -0E+1 -ddqua258 quantize -0 1e+1 -> -0E+1 -ddqua259 quantize -0E+1 1e+1 -> -0E+1 - -ddqua260 quantize -10 1e+2 -> -0E+2 Inexact Rounded -ddqua261 quantize +1 1e+2 -> 0E+2 Inexact Rounded -ddqua262 quantize +10 1e+2 -> 0E+2 Inexact Rounded -ddqua263 quantize 1E+1 1e+2 -> 0E+2 Inexact Rounded -ddqua264 quantize 1E+2 1e+2 -> 1E+2 -ddqua265 quantize 1E+3 1e+2 -> 1.0E+3 -ddqua266 quantize 1E+4 1e+2 -> 1.00E+4 -ddqua267 quantize 1E+5 1e+2 -> 1.000E+5 -ddqua268 quantize 1E+6 1e+2 -> 1.0000E+6 -ddqua269 quantize 1E+7 1e+2 -> 1.00000E+7 -ddqua270 quantize 1E+8 1e+2 -> 1.000000E+8 -ddqua271 quantize 1E+9 1e+2 -> 1.0000000E+9 -ddqua272 quantize 1E+10 1e+2 -> 1.00000000E+10 -ddqua273 quantize 1E-10 1e+2 -> 0E+2 Inexact Rounded -ddqua274 quantize 1E-2 1e+2 -> 0E+2 Inexact Rounded -ddqua275 quantize 0E-10 1e+2 -> 0E+2 - -ddqua280 quantize -10 1e+3 -> -0E+3 Inexact Rounded -ddqua281 quantize +1 1e+3 -> 0E+3 Inexact Rounded -ddqua282 quantize +10 1e+3 -> 0E+3 Inexact Rounded -ddqua283 quantize 1E+1 1e+3 -> 0E+3 Inexact Rounded -ddqua284 quantize 1E+2 1e+3 -> 0E+3 Inexact Rounded -ddqua285 quantize 1E+3 1e+3 -> 1E+3 -ddqua286 quantize 1E+4 1e+3 -> 1.0E+4 -ddqua287 quantize 1E+5 1e+3 -> 1.00E+5 -ddqua288 quantize 1E+6 1e+3 -> 1.000E+6 -ddqua289 quantize 1E+7 1e+3 -> 1.0000E+7 -ddqua290 quantize 1E+8 1e+3 -> 1.00000E+8 -ddqua291 quantize 1E+9 1e+3 -> 1.000000E+9 -ddqua292 quantize 1E+10 1e+3 -> 1.0000000E+10 -ddqua293 quantize 1E-10 1e+3 -> 0E+3 Inexact Rounded -ddqua294 quantize 1E-2 1e+3 -> 0E+3 Inexact Rounded -ddqua295 quantize 0E-10 1e+3 -> 0E+3 - --- round up from below [sign wrong in JIT compiler once] -ddqua300 quantize 0.0078 1e-5 -> 0.00780 -ddqua301 quantize 0.0078 1e-4 -> 0.0078 -ddqua302 quantize 0.0078 1e-3 -> 0.008 Inexact Rounded -ddqua303 quantize 0.0078 1e-2 -> 0.01 Inexact Rounded -ddqua304 quantize 0.0078 1e-1 -> 0.0 Inexact Rounded -ddqua305 quantize 0.0078 1e0 -> 0 Inexact Rounded -ddqua306 quantize 0.0078 1e+1 -> 0E+1 Inexact Rounded -ddqua307 quantize 0.0078 1e+2 -> 0E+2 Inexact Rounded - -ddqua310 quantize -0.0078 1e-5 -> -0.00780 -ddqua311 quantize -0.0078 1e-4 -> -0.0078 -ddqua312 quantize -0.0078 1e-3 -> -0.008 Inexact Rounded -ddqua313 quantize -0.0078 1e-2 -> -0.01 Inexact Rounded -ddqua314 quantize -0.0078 1e-1 -> -0.0 Inexact Rounded -ddqua315 quantize -0.0078 1e0 -> -0 Inexact Rounded -ddqua316 quantize -0.0078 1e+1 -> -0E+1 Inexact Rounded -ddqua317 quantize -0.0078 1e+2 -> -0E+2 Inexact Rounded - -ddqua320 quantize 0.078 1e-5 -> 0.07800 -ddqua321 quantize 0.078 1e-4 -> 0.0780 -ddqua322 quantize 0.078 1e-3 -> 0.078 -ddqua323 quantize 0.078 1e-2 -> 0.08 Inexact Rounded -ddqua324 quantize 0.078 1e-1 -> 0.1 Inexact Rounded -ddqua325 quantize 0.078 1e0 -> 0 Inexact Rounded -ddqua326 quantize 0.078 1e+1 -> 0E+1 Inexact Rounded -ddqua327 quantize 0.078 1e+2 -> 0E+2 Inexact Rounded - -ddqua330 quantize -0.078 1e-5 -> -0.07800 -ddqua331 quantize -0.078 1e-4 -> -0.0780 -ddqua332 quantize -0.078 1e-3 -> -0.078 -ddqua333 quantize -0.078 1e-2 -> -0.08 Inexact Rounded -ddqua334 quantize -0.078 1e-1 -> -0.1 Inexact Rounded -ddqua335 quantize -0.078 1e0 -> -0 Inexact Rounded -ddqua336 quantize -0.078 1e+1 -> -0E+1 Inexact Rounded -ddqua337 quantize -0.078 1e+2 -> -0E+2 Inexact Rounded - -ddqua340 quantize 0.78 1e-5 -> 0.78000 -ddqua341 quantize 0.78 1e-4 -> 0.7800 -ddqua342 quantize 0.78 1e-3 -> 0.780 -ddqua343 quantize 0.78 1e-2 -> 0.78 -ddqua344 quantize 0.78 1e-1 -> 0.8 Inexact Rounded -ddqua345 quantize 0.78 1e0 -> 1 Inexact Rounded -ddqua346 quantize 0.78 1e+1 -> 0E+1 Inexact Rounded -ddqua347 quantize 0.78 1e+2 -> 0E+2 Inexact Rounded - -ddqua350 quantize -0.78 1e-5 -> -0.78000 -ddqua351 quantize -0.78 1e-4 -> -0.7800 -ddqua352 quantize -0.78 1e-3 -> -0.780 -ddqua353 quantize -0.78 1e-2 -> -0.78 -ddqua354 quantize -0.78 1e-1 -> -0.8 Inexact Rounded -ddqua355 quantize -0.78 1e0 -> -1 Inexact Rounded -ddqua356 quantize -0.78 1e+1 -> -0E+1 Inexact Rounded -ddqua357 quantize -0.78 1e+2 -> -0E+2 Inexact Rounded - -ddqua360 quantize 7.8 1e-5 -> 7.80000 -ddqua361 quantize 7.8 1e-4 -> 7.8000 -ddqua362 quantize 7.8 1e-3 -> 7.800 -ddqua363 quantize 7.8 1e-2 -> 7.80 -ddqua364 quantize 7.8 1e-1 -> 7.8 -ddqua365 quantize 7.8 1e0 -> 8 Inexact Rounded -ddqua366 quantize 7.8 1e+1 -> 1E+1 Inexact Rounded -ddqua367 quantize 7.8 1e+2 -> 0E+2 Inexact Rounded -ddqua368 quantize 7.8 1e+3 -> 0E+3 Inexact Rounded - -ddqua370 quantize -7.8 1e-5 -> -7.80000 -ddqua371 quantize -7.8 1e-4 -> -7.8000 -ddqua372 quantize -7.8 1e-3 -> -7.800 -ddqua373 quantize -7.8 1e-2 -> -7.80 -ddqua374 quantize -7.8 1e-1 -> -7.8 -ddqua375 quantize -7.8 1e0 -> -8 Inexact Rounded -ddqua376 quantize -7.8 1e+1 -> -1E+1 Inexact Rounded -ddqua377 quantize -7.8 1e+2 -> -0E+2 Inexact Rounded -ddqua378 quantize -7.8 1e+3 -> -0E+3 Inexact Rounded - --- some individuals -ddqua380 quantize 1234567352364.506 1e-2 -> 1234567352364.51 Inexact Rounded -ddqua381 quantize 12345673523645.06 1e-2 -> 12345673523645.06 -ddqua382 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation -ddqua383 quantize 1234567352364506 1e-2 -> NaN Invalid_operation -ddqua384 quantize -1234567352364.506 1e-2 -> -1234567352364.51 Inexact Rounded -ddqua385 quantize -12345673523645.06 1e-2 -> -12345673523645.06 -ddqua386 quantize -123456735236450.6 1e-2 -> NaN Invalid_operation -ddqua387 quantize -1234567352364506 1e-2 -> NaN Invalid_operation - -rounding: down -ddqua389 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation --- ? should that one instead have been: --- ddqua389 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation -rounding: half_up - --- and a few more from e-mail discussions -ddqua391 quantize 12345678912.34567 1e-3 -> 12345678912.346 Inexact Rounded -ddqua392 quantize 123456789123.4567 1e-3 -> 123456789123.457 Inexact Rounded -ddqua393 quantize 1234567891234.567 1e-3 -> 1234567891234.567 -ddqua394 quantize 12345678912345.67 1e-3 -> NaN Invalid_operation -ddqua395 quantize 123456789123456.7 1e-3 -> NaN Invalid_operation -ddqua396 quantize 1234567891234567. 1e-3 -> NaN Invalid_operation - --- some 9999 round-up cases -ddqua400 quantize 9.999 1e-5 -> 9.99900 -ddqua401 quantize 9.999 1e-4 -> 9.9990 -ddqua402 quantize 9.999 1e-3 -> 9.999 -ddqua403 quantize 9.999 1e-2 -> 10.00 Inexact Rounded -ddqua404 quantize 9.999 1e-1 -> 10.0 Inexact Rounded -ddqua405 quantize 9.999 1e0 -> 10 Inexact Rounded -ddqua406 quantize 9.999 1e1 -> 1E+1 Inexact Rounded -ddqua407 quantize 9.999 1e2 -> 0E+2 Inexact Rounded - -ddqua410 quantize 0.999 1e-5 -> 0.99900 -ddqua411 quantize 0.999 1e-4 -> 0.9990 -ddqua412 quantize 0.999 1e-3 -> 0.999 -ddqua413 quantize 0.999 1e-2 -> 1.00 Inexact Rounded -ddqua414 quantize 0.999 1e-1 -> 1.0 Inexact Rounded -ddqua415 quantize 0.999 1e0 -> 1 Inexact Rounded -ddqua416 quantize 0.999 1e1 -> 0E+1 Inexact Rounded - -ddqua420 quantize 0.0999 1e-5 -> 0.09990 -ddqua421 quantize 0.0999 1e-4 -> 0.0999 -ddqua422 quantize 0.0999 1e-3 -> 0.100 Inexact Rounded -ddqua423 quantize 0.0999 1e-2 -> 0.10 Inexact Rounded -ddqua424 quantize 0.0999 1e-1 -> 0.1 Inexact Rounded -ddqua425 quantize 0.0999 1e0 -> 0 Inexact Rounded -ddqua426 quantize 0.0999 1e1 -> 0E+1 Inexact Rounded - -ddqua430 quantize 0.00999 1e-5 -> 0.00999 -ddqua431 quantize 0.00999 1e-4 -> 0.0100 Inexact Rounded -ddqua432 quantize 0.00999 1e-3 -> 0.010 Inexact Rounded -ddqua433 quantize 0.00999 1e-2 -> 0.01 Inexact Rounded -ddqua434 quantize 0.00999 1e-1 -> 0.0 Inexact Rounded -ddqua435 quantize 0.00999 1e0 -> 0 Inexact Rounded -ddqua436 quantize 0.00999 1e1 -> 0E+1 Inexact Rounded - -ddqua440 quantize 0.000999 1e-5 -> 0.00100 Inexact Rounded -ddqua441 quantize 0.000999 1e-4 -> 0.0010 Inexact Rounded -ddqua442 quantize 0.000999 1e-3 -> 0.001 Inexact Rounded -ddqua443 quantize 0.000999 1e-2 -> 0.00 Inexact Rounded -ddqua444 quantize 0.000999 1e-1 -> 0.0 Inexact Rounded -ddqua445 quantize 0.000999 1e0 -> 0 Inexact Rounded -ddqua446 quantize 0.000999 1e1 -> 0E+1 Inexact Rounded - -ddqua1001 quantize 0.000 0.001 -> 0.000 -ddqua1002 quantize 0.001 0.001 -> 0.001 -ddqua1003 quantize 0.0012 0.001 -> 0.001 Inexact Rounded -ddqua1004 quantize 0.0018 0.001 -> 0.002 Inexact Rounded -ddqua1005 quantize 0.501 0.001 -> 0.501 -ddqua1006 quantize 0.5012 0.001 -> 0.501 Inexact Rounded -ddqua1007 quantize 0.5018 0.001 -> 0.502 Inexact Rounded -ddqua1008 quantize 0.999 0.001 -> 0.999 - -ddqua481 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded -ddqua482 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded -ddqua483 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded -ddqua484 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded -ddqua485 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded -ddqua486 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded --- a potential double-round -ddqua487 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded -ddqua488 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded - -ddqua491 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded -ddqua492 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded -ddqua493 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded -ddqua494 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded -ddqua495 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded -ddqua496 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded -ddqua497 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded -ddqua498 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded - --- Zeros -ddqua500 quantize 0 1e1 -> 0E+1 -ddqua501 quantize 0 1e0 -> 0 -ddqua502 quantize 0 1e-1 -> 0.0 -ddqua503 quantize 0.0 1e-1 -> 0.0 -ddqua504 quantize 0.0 1e0 -> 0 -ddqua505 quantize 0.0 1e+1 -> 0E+1 -ddqua506 quantize 0E+1 1e-1 -> 0.0 -ddqua507 quantize 0E+1 1e0 -> 0 -ddqua508 quantize 0E+1 1e+1 -> 0E+1 -ddqua509 quantize -0 1e1 -> -0E+1 -ddqua510 quantize -0 1e0 -> -0 -ddqua511 quantize -0 1e-1 -> -0.0 -ddqua512 quantize -0.0 1e-1 -> -0.0 -ddqua513 quantize -0.0 1e0 -> -0 -ddqua514 quantize -0.0 1e+1 -> -0E+1 -ddqua515 quantize -0E+1 1e-1 -> -0.0 -ddqua516 quantize -0E+1 1e0 -> -0 -ddqua517 quantize -0E+1 1e+1 -> -0E+1 - --- Suspicious RHS values -ddqua520 quantize 1.234 1e359 -> 0E+359 Inexact Rounded -ddqua521 quantize 123.456 1e359 -> 0E+359 Inexact Rounded -ddqua522 quantize 1.234 1e359 -> 0E+359 Inexact Rounded -ddqua523 quantize 123.456 1e359 -> 0E+359 Inexact Rounded --- next four are "won't fit" overflow -ddqua526 quantize 1.234 1e-299 -> NaN Invalid_operation -ddqua527 quantize 123.456 1e-299 -> NaN Invalid_operation -ddqua528 quantize 1.234 1e-299 -> NaN Invalid_operation -ddqua529 quantize 123.456 1e-299 -> NaN Invalid_operation - -ddqua532 quantize 1.234E+299 1e299 -> 1E+299 Inexact Rounded -ddqua533 quantize 1.234E+298 1e299 -> 0E+299 Inexact Rounded -ddqua534 quantize 1.234 1e299 -> 0E+299 Inexact Rounded -ddqua537 quantize 0 1e-299 -> 0E-299 --- next two are "won't fit" overflows -ddqua538 quantize 1.234 1e-299 -> NaN Invalid_operation -ddqua539 quantize 1.234 1e-300 -> NaN Invalid_operation --- [more below] - --- Specials -ddqua580 quantize Inf -Inf -> Infinity -ddqua581 quantize Inf 1e-299 -> NaN Invalid_operation -ddqua582 quantize Inf 1e-1 -> NaN Invalid_operation -ddqua583 quantize Inf 1e0 -> NaN Invalid_operation -ddqua584 quantize Inf 1e1 -> NaN Invalid_operation -ddqua585 quantize Inf 1e299 -> NaN Invalid_operation -ddqua586 quantize Inf Inf -> Infinity -ddqua587 quantize -1000 Inf -> NaN Invalid_operation -ddqua588 quantize -Inf Inf -> -Infinity -ddqua589 quantize -1 Inf -> NaN Invalid_operation -ddqua590 quantize 0 Inf -> NaN Invalid_operation -ddqua591 quantize 1 Inf -> NaN Invalid_operation -ddqua592 quantize 1000 Inf -> NaN Invalid_operation -ddqua593 quantize Inf Inf -> Infinity -ddqua594 quantize Inf 1e-0 -> NaN Invalid_operation -ddqua595 quantize -0 Inf -> NaN Invalid_operation - -ddqua600 quantize -Inf -Inf -> -Infinity -ddqua601 quantize -Inf 1e-299 -> NaN Invalid_operation -ddqua602 quantize -Inf 1e-1 -> NaN Invalid_operation -ddqua603 quantize -Inf 1e0 -> NaN Invalid_operation -ddqua604 quantize -Inf 1e1 -> NaN Invalid_operation -ddqua605 quantize -Inf 1e299 -> NaN Invalid_operation -ddqua606 quantize -Inf Inf -> -Infinity -ddqua607 quantize -1000 Inf -> NaN Invalid_operation -ddqua608 quantize -Inf -Inf -> -Infinity -ddqua609 quantize -1 -Inf -> NaN Invalid_operation -ddqua610 quantize 0 -Inf -> NaN Invalid_operation -ddqua611 quantize 1 -Inf -> NaN Invalid_operation -ddqua612 quantize 1000 -Inf -> NaN Invalid_operation -ddqua613 quantize Inf -Inf -> Infinity -ddqua614 quantize -Inf 1e-0 -> NaN Invalid_operation -ddqua615 quantize -0 -Inf -> NaN Invalid_operation - -ddqua621 quantize NaN -Inf -> NaN -ddqua622 quantize NaN 1e-299 -> NaN -ddqua623 quantize NaN 1e-1 -> NaN -ddqua624 quantize NaN 1e0 -> NaN -ddqua625 quantize NaN 1e1 -> NaN -ddqua626 quantize NaN 1e299 -> NaN -ddqua627 quantize NaN Inf -> NaN -ddqua628 quantize NaN NaN -> NaN -ddqua629 quantize -Inf NaN -> NaN -ddqua630 quantize -1000 NaN -> NaN -ddqua631 quantize -1 NaN -> NaN -ddqua632 quantize 0 NaN -> NaN -ddqua633 quantize 1 NaN -> NaN -ddqua634 quantize 1000 NaN -> NaN -ddqua635 quantize Inf NaN -> NaN -ddqua636 quantize NaN 1e-0 -> NaN -ddqua637 quantize -0 NaN -> NaN - -ddqua641 quantize sNaN -Inf -> NaN Invalid_operation -ddqua642 quantize sNaN 1e-299 -> NaN Invalid_operation -ddqua643 quantize sNaN 1e-1 -> NaN Invalid_operation -ddqua644 quantize sNaN 1e0 -> NaN Invalid_operation -ddqua645 quantize sNaN 1e1 -> NaN Invalid_operation -ddqua646 quantize sNaN 1e299 -> NaN Invalid_operation -ddqua647 quantize sNaN NaN -> NaN Invalid_operation -ddqua648 quantize sNaN sNaN -> NaN Invalid_operation -ddqua649 quantize NaN sNaN -> NaN Invalid_operation -ddqua650 quantize -Inf sNaN -> NaN Invalid_operation -ddqua651 quantize -1000 sNaN -> NaN Invalid_operation -ddqua652 quantize -1 sNaN -> NaN Invalid_operation -ddqua653 quantize 0 sNaN -> NaN Invalid_operation -ddqua654 quantize 1 sNaN -> NaN Invalid_operation -ddqua655 quantize 1000 sNaN -> NaN Invalid_operation -ddqua656 quantize Inf sNaN -> NaN Invalid_operation -ddqua657 quantize NaN sNaN -> NaN Invalid_operation -ddqua658 quantize sNaN 1e-0 -> NaN Invalid_operation -ddqua659 quantize -0 sNaN -> NaN Invalid_operation - --- propagating NaNs -ddqua661 quantize NaN9 -Inf -> NaN9 -ddqua662 quantize NaN8 919 -> NaN8 -ddqua663 quantize NaN71 Inf -> NaN71 -ddqua664 quantize NaN6 NaN5 -> NaN6 -ddqua665 quantize -Inf NaN4 -> NaN4 -ddqua666 quantize -919 NaN31 -> NaN31 -ddqua667 quantize Inf NaN2 -> NaN2 - -ddqua671 quantize sNaN99 -Inf -> NaN99 Invalid_operation -ddqua672 quantize sNaN98 -11 -> NaN98 Invalid_operation -ddqua673 quantize sNaN97 NaN -> NaN97 Invalid_operation -ddqua674 quantize sNaN16 sNaN94 -> NaN16 Invalid_operation -ddqua675 quantize NaN95 sNaN93 -> NaN93 Invalid_operation -ddqua676 quantize -Inf sNaN92 -> NaN92 Invalid_operation -ddqua677 quantize 088 sNaN91 -> NaN91 Invalid_operation -ddqua678 quantize Inf sNaN90 -> NaN90 Invalid_operation -ddqua679 quantize NaN sNaN88 -> NaN88 Invalid_operation - -ddqua681 quantize -NaN9 -Inf -> -NaN9 -ddqua682 quantize -NaN8 919 -> -NaN8 -ddqua683 quantize -NaN71 Inf -> -NaN71 -ddqua684 quantize -NaN6 -NaN5 -> -NaN6 -ddqua685 quantize -Inf -NaN4 -> -NaN4 -ddqua686 quantize -919 -NaN31 -> -NaN31 -ddqua687 quantize Inf -NaN2 -> -NaN2 - -ddqua691 quantize -sNaN99 -Inf -> -NaN99 Invalid_operation -ddqua692 quantize -sNaN98 -11 -> -NaN98 Invalid_operation -ddqua693 quantize -sNaN97 NaN -> -NaN97 Invalid_operation -ddqua694 quantize -sNaN16 sNaN94 -> -NaN16 Invalid_operation -ddqua695 quantize -NaN95 -sNaN93 -> -NaN93 Invalid_operation -ddqua696 quantize -Inf -sNaN92 -> -NaN92 Invalid_operation -ddqua697 quantize 088 -sNaN91 -> -NaN91 Invalid_operation -ddqua698 quantize Inf -sNaN90 -> -NaN90 Invalid_operation -ddqua699 quantize NaN -sNaN88 -> -NaN88 Invalid_operation - --- subnormals and underflow -ddqua710 quantize 1.00E-383 1e-383 -> 1E-383 Rounded -ddqua711 quantize 0.1E-383 2e-384 -> 1E-384 Subnormal -ddqua712 quantize 0.10E-383 3e-384 -> 1E-384 Subnormal Rounded -ddqua713 quantize 0.100E-383 4e-384 -> 1E-384 Subnormal Rounded -ddqua714 quantize 0.01E-383 5e-385 -> 1E-385 Subnormal --- next is rounded to Emin -ddqua715 quantize 0.999E-383 1e-383 -> 1E-383 Inexact Rounded -ddqua716 quantize 0.099E-383 10e-384 -> 1E-384 Inexact Rounded Subnormal - -ddqua717 quantize 0.009E-383 1e-385 -> 1E-385 Inexact Rounded Subnormal -ddqua718 quantize 0.001E-383 1e-385 -> 0E-385 Inexact Rounded -ddqua719 quantize 0.0009E-383 1e-385 -> 0E-385 Inexact Rounded -ddqua720 quantize 0.0001E-383 1e-385 -> 0E-385 Inexact Rounded - -ddqua730 quantize -1.00E-383 1e-383 -> -1E-383 Rounded -ddqua731 quantize -0.1E-383 1e-383 -> -0E-383 Rounded Inexact -ddqua732 quantize -0.10E-383 1e-383 -> -0E-383 Rounded Inexact -ddqua733 quantize -0.100E-383 1e-383 -> -0E-383 Rounded Inexact -ddqua734 quantize -0.01E-383 1e-383 -> -0E-383 Inexact Rounded --- next is rounded to Emin -ddqua735 quantize -0.999E-383 90e-383 -> -1E-383 Inexact Rounded -ddqua736 quantize -0.099E-383 -1e-383 -> -0E-383 Inexact Rounded -ddqua737 quantize -0.009E-383 -1e-383 -> -0E-383 Inexact Rounded -ddqua738 quantize -0.001E-383 -0e-383 -> -0E-383 Inexact Rounded -ddqua739 quantize -0.0001E-383 0e-383 -> -0E-383 Inexact Rounded - -ddqua740 quantize -1.00E-383 1e-384 -> -1.0E-383 Rounded -ddqua741 quantize -0.1E-383 1e-384 -> -1E-384 Subnormal -ddqua742 quantize -0.10E-383 1e-384 -> -1E-384 Subnormal Rounded -ddqua743 quantize -0.100E-383 1e-384 -> -1E-384 Subnormal Rounded -ddqua744 quantize -0.01E-383 1e-384 -> -0E-384 Inexact Rounded --- next is rounded to Emin -ddqua745 quantize -0.999E-383 1e-384 -> -1.0E-383 Inexact Rounded -ddqua746 quantize -0.099E-383 1e-384 -> -1E-384 Inexact Rounded Subnormal -ddqua747 quantize -0.009E-383 1e-384 -> -0E-384 Inexact Rounded -ddqua748 quantize -0.001E-383 1e-384 -> -0E-384 Inexact Rounded -ddqua749 quantize -0.0001E-383 1e-384 -> -0E-384 Inexact Rounded - -ddqua750 quantize -1.00E-383 1e-385 -> -1.00E-383 -ddqua751 quantize -0.1E-383 1e-385 -> -1.0E-384 Subnormal -ddqua752 quantize -0.10E-383 1e-385 -> -1.0E-384 Subnormal -ddqua753 quantize -0.100E-383 1e-385 -> -1.0E-384 Subnormal Rounded -ddqua754 quantize -0.01E-383 1e-385 -> -1E-385 Subnormal --- next is rounded to Emin -ddqua755 quantize -0.999E-383 1e-385 -> -1.00E-383 Inexact Rounded -ddqua756 quantize -0.099E-383 1e-385 -> -1.0E-384 Inexact Rounded Subnormal -ddqua757 quantize -0.009E-383 1e-385 -> -1E-385 Inexact Rounded Subnormal -ddqua758 quantize -0.001E-383 1e-385 -> -0E-385 Inexact Rounded -ddqua759 quantize -0.0001E-383 1e-385 -> -0E-385 Inexact Rounded - -ddqua760 quantize -1.00E-383 1e-386 -> -1.000E-383 -ddqua761 quantize -0.1E-383 1e-386 -> -1.00E-384 Subnormal -ddqua762 quantize -0.10E-383 1e-386 -> -1.00E-384 Subnormal -ddqua763 quantize -0.100E-383 1e-386 -> -1.00E-384 Subnormal -ddqua764 quantize -0.01E-383 1e-386 -> -1.0E-385 Subnormal -ddqua765 quantize -0.999E-383 1e-386 -> -9.99E-384 Subnormal -ddqua766 quantize -0.099E-383 1e-386 -> -9.9E-385 Subnormal -ddqua767 quantize -0.009E-383 1e-386 -> -9E-386 Subnormal -ddqua768 quantize -0.001E-383 1e-386 -> -1E-386 Subnormal -ddqua769 quantize -0.0001E-383 1e-386 -> -0E-386 Inexact Rounded - --- More from Fung Lee -ddqua1021 quantize 8.666666666666000E+384 1.000000000000000E+384 -> 8.666666666666000E+384 -ddqua1022 quantize -8.666666666666000E+384 1.000000000000000E+384 -> -8.666666666666000E+384 -ddqua1027 quantize 8.666666666666000E+323 1E+31 -> NaN Invalid_operation -ddqua1029 quantize 8.66666666E+3 1E+3 -> 9E+3 Inexact Rounded - - ---ddqua1030 quantize 8.666666666666000E+384 1E+384 -> 9.000000000000000E+384 Rounded Inexact ---ddqua1031 quantize 8.666666666666000E+384 1E+384 -> 8.666666666666000E+384 Rounded ---ddqua1032 quantize 8.666666666666000E+384 1E+383 -> 8.666666666666000E+384 Rounded ---ddqua1033 quantize 8.666666666666000E+384 1E+382 -> 8.666666666666000E+384 Rounded ---ddqua1034 quantize 8.666666666666000E+384 1E+381 -> 8.666666666666000E+384 Rounded ---ddqua1035 quantize 8.666666666666000E+384 1E+380 -> 8.666666666666000E+384 Rounded - --- Int and uInt32 edge values for testing conversions -ddqua1040 quantize -2147483646 0 -> -2147483646 -ddqua1041 quantize -2147483647 0 -> -2147483647 -ddqua1042 quantize -2147483648 0 -> -2147483648 -ddqua1043 quantize -2147483649 0 -> -2147483649 -ddqua1044 quantize 2147483646 0 -> 2147483646 -ddqua1045 quantize 2147483647 0 -> 2147483647 -ddqua1046 quantize 2147483648 0 -> 2147483648 -ddqua1047 quantize 2147483649 0 -> 2147483649 -ddqua1048 quantize 4294967294 0 -> 4294967294 -ddqua1049 quantize 4294967295 0 -> 4294967295 -ddqua1050 quantize 4294967296 0 -> 4294967296 -ddqua1051 quantize 4294967297 0 -> 4294967297 - --- Rounding swathe -rounding: half_even -ddqua1100 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1101 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1102 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1103 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -ddqua1104 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1105 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua1106 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1107 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1108 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1109 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: half_up -ddqua1200 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1201 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1202 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1203 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -ddqua1204 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1205 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -ddqua1206 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1207 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1208 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1209 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: half_down -ddqua1300 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1301 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1302 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1303 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -ddqua1304 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1305 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua1306 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1307 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1308 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1309 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: up -ddqua1400 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1401 quantize 1.2301 1.00 -> 1.24 Inexact Rounded -ddqua1402 quantize 1.2310 1.00 -> 1.24 Inexact Rounded -ddqua1403 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -ddqua1404 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1405 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -ddqua1406 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1407 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1408 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1409 quantize 1.2399 1.00 -> 1.24 Inexact Rounded -ddqua1411 quantize -1.2399 1.00 -> -1.24 Inexact Rounded - -rounding: down -ddqua1500 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1501 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1502 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1503 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -ddqua1504 quantize 1.2351 1.00 -> 1.23 Inexact Rounded -ddqua1505 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua1506 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -ddqua1507 quantize 1.2360 1.00 -> 1.23 Inexact Rounded -ddqua1508 quantize 1.2370 1.00 -> 1.23 Inexact Rounded -ddqua1509 quantize 1.2399 1.00 -> 1.23 Inexact Rounded -ddqua1511 quantize -1.2399 1.00 -> -1.23 Inexact Rounded - -rounding: ceiling -ddqua1600 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1601 quantize 1.2301 1.00 -> 1.24 Inexact Rounded -ddqua1602 quantize 1.2310 1.00 -> 1.24 Inexact Rounded -ddqua1603 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -ddqua1604 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1605 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -ddqua1606 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1607 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1608 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1609 quantize 1.2399 1.00 -> 1.24 Inexact Rounded -ddqua1611 quantize -1.2399 1.00 -> -1.23 Inexact Rounded - -rounding: floor -ddqua1700 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1701 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1702 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1703 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -ddqua1704 quantize 1.2351 1.00 -> 1.23 Inexact Rounded -ddqua1705 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua1706 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -ddqua1707 quantize 1.2360 1.00 -> 1.23 Inexact Rounded -ddqua1708 quantize 1.2370 1.00 -> 1.23 Inexact Rounded -ddqua1709 quantize 1.2399 1.00 -> 1.23 Inexact Rounded -ddqua1711 quantize -1.2399 1.00 -> -1.24 Inexact Rounded - -rounding: 05up -ddqua1800 quantize 1.2000 1.00 -> 1.20 Rounded -ddqua1801 quantize 1.2001 1.00 -> 1.21 Inexact Rounded -ddqua1802 quantize 1.2010 1.00 -> 1.21 Inexact Rounded -ddqua1803 quantize 1.2050 1.00 -> 1.21 Inexact Rounded -ddqua1804 quantize 1.2051 1.00 -> 1.21 Inexact Rounded -ddqua1807 quantize 1.2060 1.00 -> 1.21 Inexact Rounded -ddqua1808 quantize 1.2070 1.00 -> 1.21 Inexact Rounded -ddqua1809 quantize 1.2099 1.00 -> 1.21 Inexact Rounded -ddqua1811 quantize -1.2099 1.00 -> -1.21 Inexact Rounded - -ddqua1900 quantize 1.2100 1.00 -> 1.21 Rounded -ddqua1901 quantize 1.2101 1.00 -> 1.21 Inexact Rounded -ddqua1902 quantize 1.2110 1.00 -> 1.21 Inexact Rounded -ddqua1903 quantize 1.2150 1.00 -> 1.21 Inexact Rounded -ddqua1904 quantize 1.2151 1.00 -> 1.21 Inexact Rounded -ddqua1907 quantize 1.2160 1.00 -> 1.21 Inexact Rounded -ddqua1908 quantize 1.2170 1.00 -> 1.21 Inexact Rounded -ddqua1909 quantize 1.2199 1.00 -> 1.21 Inexact Rounded -ddqua1911 quantize -1.2199 1.00 -> -1.21 Inexact Rounded - -ddqua2000 quantize 1.2400 1.00 -> 1.24 Rounded -ddqua2001 quantize 1.2401 1.00 -> 1.24 Inexact Rounded -ddqua2002 quantize 1.2410 1.00 -> 1.24 Inexact Rounded -ddqua2003 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua2004 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -ddqua2007 quantize 1.2460 1.00 -> 1.24 Inexact Rounded -ddqua2008 quantize 1.2470 1.00 -> 1.24 Inexact Rounded -ddqua2009 quantize 1.2499 1.00 -> 1.24 Inexact Rounded -ddqua2011 quantize -1.2499 1.00 -> -1.24 Inexact Rounded - -ddqua2100 quantize 1.2500 1.00 -> 1.25 Rounded -ddqua2101 quantize 1.2501 1.00 -> 1.26 Inexact Rounded -ddqua2102 quantize 1.2510 1.00 -> 1.26 Inexact Rounded -ddqua2103 quantize 1.2550 1.00 -> 1.26 Inexact Rounded -ddqua2104 quantize 1.2551 1.00 -> 1.26 Inexact Rounded -ddqua2107 quantize 1.2560 1.00 -> 1.26 Inexact Rounded -ddqua2108 quantize 1.2570 1.00 -> 1.26 Inexact Rounded -ddqua2109 quantize 1.2599 1.00 -> 1.26 Inexact Rounded -ddqua2111 quantize -1.2599 1.00 -> -1.26 Inexact Rounded - -ddqua2200 quantize 1.2600 1.00 -> 1.26 Rounded -ddqua2201 quantize 1.2601 1.00 -> 1.26 Inexact Rounded -ddqua2202 quantize 1.2610 1.00 -> 1.26 Inexact Rounded -ddqua2203 quantize 1.2650 1.00 -> 1.26 Inexact Rounded -ddqua2204 quantize 1.2651 1.00 -> 1.26 Inexact Rounded -ddqua2207 quantize 1.2660 1.00 -> 1.26 Inexact Rounded -ddqua2208 quantize 1.2670 1.00 -> 1.26 Inexact Rounded -ddqua2209 quantize 1.2699 1.00 -> 1.26 Inexact Rounded -ddqua2211 quantize -1.2699 1.00 -> -1.26 Inexact Rounded - -ddqua2300 quantize 1.2900 1.00 -> 1.29 Rounded -ddqua2301 quantize 1.2901 1.00 -> 1.29 Inexact Rounded -ddqua2302 quantize 1.2910 1.00 -> 1.29 Inexact Rounded -ddqua2303 quantize 1.2950 1.00 -> 1.29 Inexact Rounded -ddqua2304 quantize 1.2951 1.00 -> 1.29 Inexact Rounded -ddqua2307 quantize 1.2960 1.00 -> 1.29 Inexact Rounded -ddqua2308 quantize 1.2970 1.00 -> 1.29 Inexact Rounded -ddqua2309 quantize 1.2999 1.00 -> 1.29 Inexact Rounded -ddqua2311 quantize -1.2999 1.00 -> -1.29 Inexact Rounded - --- Null tests -rounding: half_even -ddqua998 quantize 10 # -> NaN Invalid_operation -ddqua999 quantize # 1e10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddQuantize.decTest -- decDouble quantize operation -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Most of the tests here assume a "regular pattern", where the +-- sign and coefficient are +1. +-- 2004.03.15 Underflow for quantize is suppressed +-- 2005.06.08 More extensive tests for 'does not fit' +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddqua001 quantize 0 1e0 -> 0 +ddqua002 quantize 1 1e0 -> 1 +ddqua003 quantize 0.1 1e+2 -> 0E+2 Inexact Rounded +ddqua005 quantize 0.1 1e+1 -> 0E+1 Inexact Rounded +ddqua006 quantize 0.1 1e0 -> 0 Inexact Rounded +ddqua007 quantize 0.1 1e-1 -> 0.1 +ddqua008 quantize 0.1 1e-2 -> 0.10 +ddqua009 quantize 0.1 1e-3 -> 0.100 +ddqua010 quantize 0.9 1e+2 -> 0E+2 Inexact Rounded +ddqua011 quantize 0.9 1e+1 -> 0E+1 Inexact Rounded +ddqua012 quantize 0.9 1e+0 -> 1 Inexact Rounded +ddqua013 quantize 0.9 1e-1 -> 0.9 +ddqua014 quantize 0.9 1e-2 -> 0.90 +ddqua015 quantize 0.9 1e-3 -> 0.900 +-- negatives +ddqua021 quantize -0 1e0 -> -0 +ddqua022 quantize -1 1e0 -> -1 +ddqua023 quantize -0.1 1e+2 -> -0E+2 Inexact Rounded +ddqua025 quantize -0.1 1e+1 -> -0E+1 Inexact Rounded +ddqua026 quantize -0.1 1e0 -> -0 Inexact Rounded +ddqua027 quantize -0.1 1e-1 -> -0.1 +ddqua028 quantize -0.1 1e-2 -> -0.10 +ddqua029 quantize -0.1 1e-3 -> -0.100 +ddqua030 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded +ddqua031 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded +ddqua032 quantize -0.9 1e+0 -> -1 Inexact Rounded +ddqua033 quantize -0.9 1e-1 -> -0.9 +ddqua034 quantize -0.9 1e-2 -> -0.90 +ddqua035 quantize -0.9 1e-3 -> -0.900 +ddqua036 quantize -0.5 1e+2 -> -0E+2 Inexact Rounded +ddqua037 quantize -0.5 1e+1 -> -0E+1 Inexact Rounded +ddqua038 quantize -0.5 1e+0 -> -0 Inexact Rounded +ddqua039 quantize -0.5 1e-1 -> -0.5 +ddqua040 quantize -0.5 1e-2 -> -0.50 +ddqua041 quantize -0.5 1e-3 -> -0.500 +ddqua042 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded +ddqua043 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded +ddqua044 quantize -0.9 1e+0 -> -1 Inexact Rounded +ddqua045 quantize -0.9 1e-1 -> -0.9 +ddqua046 quantize -0.9 1e-2 -> -0.90 +ddqua047 quantize -0.9 1e-3 -> -0.900 + +-- examples from Specification +ddqua060 quantize 2.17 0.001 -> 2.170 +ddqua061 quantize 2.17 0.01 -> 2.17 +ddqua062 quantize 2.17 0.1 -> 2.2 Inexact Rounded +ddqua063 quantize 2.17 1e+0 -> 2 Inexact Rounded +ddqua064 quantize 2.17 1e+1 -> 0E+1 Inexact Rounded +ddqua065 quantize -Inf Inf -> -Infinity +ddqua066 quantize 2 Inf -> NaN Invalid_operation +ddqua067 quantize -0.1 1 -> -0 Inexact Rounded +ddqua068 quantize -0 1e+5 -> -0E+5 +ddqua069 quantize +123456789012345.6 1e-2 -> NaN Invalid_operation +ddqua070 quantize -987654335236450.6 1e-2 -> NaN Invalid_operation +ddqua071 quantize 217 1e-1 -> 217.0 +ddqua072 quantize 217 1e+0 -> 217 +ddqua073 quantize 217 1e+1 -> 2.2E+2 Inexact Rounded +ddqua074 quantize 217 1e+2 -> 2E+2 Inexact Rounded + +-- general tests .. +ddqua089 quantize 12 1e+4 -> 0E+4 Inexact Rounded +ddqua090 quantize 12 1e+3 -> 0E+3 Inexact Rounded +ddqua091 quantize 12 1e+2 -> 0E+2 Inexact Rounded +ddqua092 quantize 12 1e+1 -> 1E+1 Inexact Rounded +ddqua093 quantize 1.2345 1e-2 -> 1.23 Inexact Rounded +ddqua094 quantize 1.2355 1e-2 -> 1.24 Inexact Rounded +ddqua095 quantize 1.2345 1e-6 -> 1.234500 +ddqua096 quantize 9.9999 1e-2 -> 10.00 Inexact Rounded +ddqua097 quantize 0.0001 1e-2 -> 0.00 Inexact Rounded +ddqua098 quantize 0.001 1e-2 -> 0.00 Inexact Rounded +ddqua099 quantize 0.009 1e-2 -> 0.01 Inexact Rounded +ddqua100 quantize 92 1e+2 -> 1E+2 Inexact Rounded + +ddqua101 quantize -1 1e0 -> -1 +ddqua102 quantize -1 1e-1 -> -1.0 +ddqua103 quantize -1 1e-2 -> -1.00 +ddqua104 quantize 0 1e0 -> 0 +ddqua105 quantize 0 1e-1 -> 0.0 +ddqua106 quantize 0 1e-2 -> 0.00 +ddqua107 quantize 0.00 1e0 -> 0 +ddqua108 quantize 0 1e+1 -> 0E+1 +ddqua109 quantize 0 1e+2 -> 0E+2 +ddqua110 quantize +1 1e0 -> 1 +ddqua111 quantize +1 1e-1 -> 1.0 +ddqua112 quantize +1 1e-2 -> 1.00 + +ddqua120 quantize 1.04 1e-3 -> 1.040 +ddqua121 quantize 1.04 1e-2 -> 1.04 +ddqua122 quantize 1.04 1e-1 -> 1.0 Inexact Rounded +ddqua123 quantize 1.04 1e0 -> 1 Inexact Rounded +ddqua124 quantize 1.05 1e-3 -> 1.050 +ddqua125 quantize 1.05 1e-2 -> 1.05 +ddqua126 quantize 1.05 1e-1 -> 1.0 Inexact Rounded +ddqua131 quantize 1.05 1e0 -> 1 Inexact Rounded +ddqua132 quantize 1.06 1e-3 -> 1.060 +ddqua133 quantize 1.06 1e-2 -> 1.06 +ddqua134 quantize 1.06 1e-1 -> 1.1 Inexact Rounded +ddqua135 quantize 1.06 1e0 -> 1 Inexact Rounded + +ddqua140 quantize -10 1e-2 -> -10.00 +ddqua141 quantize +1 1e-2 -> 1.00 +ddqua142 quantize +10 1e-2 -> 10.00 +ddqua143 quantize 1E+17 1e-2 -> NaN Invalid_operation +ddqua144 quantize 1E-17 1e-2 -> 0.00 Inexact Rounded +ddqua145 quantize 1E-3 1e-2 -> 0.00 Inexact Rounded +ddqua146 quantize 1E-2 1e-2 -> 0.01 +ddqua147 quantize 1E-1 1e-2 -> 0.10 +ddqua148 quantize 0E-17 1e-2 -> 0.00 + +ddqua150 quantize 1.0600 1e-5 -> 1.06000 +ddqua151 quantize 1.0600 1e-4 -> 1.0600 +ddqua152 quantize 1.0600 1e-3 -> 1.060 Rounded +ddqua153 quantize 1.0600 1e-2 -> 1.06 Rounded +ddqua154 quantize 1.0600 1e-1 -> 1.1 Inexact Rounded +ddqua155 quantize 1.0600 1e0 -> 1 Inexact Rounded + +-- a couple where rounding was different in base tests +rounding: half_up +ddqua157 quantize -0.5 1e+0 -> -1 Inexact Rounded +ddqua158 quantize 1.05 1e-1 -> 1.1 Inexact Rounded +ddqua159 quantize 1.06 1e0 -> 1 Inexact Rounded +rounding: half_even + +-- base tests with non-1 coefficients +ddqua161 quantize 0 -9e0 -> 0 +ddqua162 quantize 1 -7e0 -> 1 +ddqua163 quantize 0.1 -1e+2 -> 0E+2 Inexact Rounded +ddqua165 quantize 0.1 0e+1 -> 0E+1 Inexact Rounded +ddqua166 quantize 0.1 2e0 -> 0 Inexact Rounded +ddqua167 quantize 0.1 3e-1 -> 0.1 +ddqua168 quantize 0.1 44e-2 -> 0.10 +ddqua169 quantize 0.1 555e-3 -> 0.100 +ddqua170 quantize 0.9 6666e+2 -> 0E+2 Inexact Rounded +ddqua171 quantize 0.9 -777e+1 -> 0E+1 Inexact Rounded +ddqua172 quantize 0.9 -88e+0 -> 1 Inexact Rounded +ddqua173 quantize 0.9 -9e-1 -> 0.9 +ddqua174 quantize 0.9 0e-2 -> 0.90 +ddqua175 quantize 0.9 1.1e-3 -> 0.9000 +-- negatives +ddqua181 quantize -0 1.1e0 -> -0.0 +ddqua182 quantize -1 -1e0 -> -1 +ddqua183 quantize -0.1 11e+2 -> -0E+2 Inexact Rounded +ddqua185 quantize -0.1 111e+1 -> -0E+1 Inexact Rounded +ddqua186 quantize -0.1 71e0 -> -0 Inexact Rounded +ddqua187 quantize -0.1 -91e-1 -> -0.1 +ddqua188 quantize -0.1 -.1e-2 -> -0.100 +ddqua189 quantize -0.1 -1e-3 -> -0.100 +ddqua190 quantize -0.9 0e+2 -> -0E+2 Inexact Rounded +ddqua191 quantize -0.9 -0e+1 -> -0E+1 Inexact Rounded +ddqua192 quantize -0.9 -10e+0 -> -1 Inexact Rounded +ddqua193 quantize -0.9 100e-1 -> -0.9 +ddqua194 quantize -0.9 999e-2 -> -0.90 + +-- +ve exponents .. +ddqua201 quantize -1 1e+0 -> -1 +ddqua202 quantize -1 1e+1 -> -0E+1 Inexact Rounded +ddqua203 quantize -1 1e+2 -> -0E+2 Inexact Rounded +ddqua204 quantize 0 1e+0 -> 0 +ddqua205 quantize 0 1e+1 -> 0E+1 +ddqua206 quantize 0 1e+2 -> 0E+2 +ddqua207 quantize +1 1e+0 -> 1 +ddqua208 quantize +1 1e+1 -> 0E+1 Inexact Rounded +ddqua209 quantize +1 1e+2 -> 0E+2 Inexact Rounded + +ddqua220 quantize 1.04 1e+3 -> 0E+3 Inexact Rounded +ddqua221 quantize 1.04 1e+2 -> 0E+2 Inexact Rounded +ddqua222 quantize 1.04 1e+1 -> 0E+1 Inexact Rounded +ddqua223 quantize 1.04 1e+0 -> 1 Inexact Rounded +ddqua224 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded +ddqua225 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded +ddqua226 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded +ddqua227 quantize 1.05 1e+0 -> 1 Inexact Rounded +ddqua228 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded +ddqua229 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded +ddqua230 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded +ddqua231 quantize 1.05 1e+0 -> 1 Inexact Rounded +ddqua232 quantize 1.06 1e+3 -> 0E+3 Inexact Rounded +ddqua233 quantize 1.06 1e+2 -> 0E+2 Inexact Rounded +ddqua234 quantize 1.06 1e+1 -> 0E+1 Inexact Rounded +ddqua235 quantize 1.06 1e+0 -> 1 Inexact Rounded + +ddqua240 quantize -10 1e+1 -> -1E+1 Rounded +ddqua241 quantize +1 1e+1 -> 0E+1 Inexact Rounded +ddqua242 quantize +10 1e+1 -> 1E+1 Rounded +ddqua243 quantize 1E+1 1e+1 -> 1E+1 -- underneath this is E+1 +ddqua244 quantize 1E+2 1e+1 -> 1.0E+2 -- underneath this is E+1 +ddqua245 quantize 1E+3 1e+1 -> 1.00E+3 -- underneath this is E+1 +ddqua246 quantize 1E+4 1e+1 -> 1.000E+4 -- underneath this is E+1 +ddqua247 quantize 1E+5 1e+1 -> 1.0000E+5 -- underneath this is E+1 +ddqua248 quantize 1E+6 1e+1 -> 1.00000E+6 -- underneath this is E+1 +ddqua249 quantize 1E+7 1e+1 -> 1.000000E+7 -- underneath this is E+1 +ddqua250 quantize 1E+8 1e+1 -> 1.0000000E+8 -- underneath this is E+1 +ddqua251 quantize 1E+9 1e+1 -> 1.00000000E+9 -- underneath this is E+1 +-- next one tries to add 9 zeros +ddqua252 quantize 1E+17 1e+1 -> NaN Invalid_operation +ddqua253 quantize 1E-17 1e+1 -> 0E+1 Inexact Rounded +ddqua254 quantize 1E-2 1e+1 -> 0E+1 Inexact Rounded +ddqua255 quantize 0E-17 1e+1 -> 0E+1 +ddqua256 quantize -0E-17 1e+1 -> -0E+1 +ddqua257 quantize -0E-1 1e+1 -> -0E+1 +ddqua258 quantize -0 1e+1 -> -0E+1 +ddqua259 quantize -0E+1 1e+1 -> -0E+1 + +ddqua260 quantize -10 1e+2 -> -0E+2 Inexact Rounded +ddqua261 quantize +1 1e+2 -> 0E+2 Inexact Rounded +ddqua262 quantize +10 1e+2 -> 0E+2 Inexact Rounded +ddqua263 quantize 1E+1 1e+2 -> 0E+2 Inexact Rounded +ddqua264 quantize 1E+2 1e+2 -> 1E+2 +ddqua265 quantize 1E+3 1e+2 -> 1.0E+3 +ddqua266 quantize 1E+4 1e+2 -> 1.00E+4 +ddqua267 quantize 1E+5 1e+2 -> 1.000E+5 +ddqua268 quantize 1E+6 1e+2 -> 1.0000E+6 +ddqua269 quantize 1E+7 1e+2 -> 1.00000E+7 +ddqua270 quantize 1E+8 1e+2 -> 1.000000E+8 +ddqua271 quantize 1E+9 1e+2 -> 1.0000000E+9 +ddqua272 quantize 1E+10 1e+2 -> 1.00000000E+10 +ddqua273 quantize 1E-10 1e+2 -> 0E+2 Inexact Rounded +ddqua274 quantize 1E-2 1e+2 -> 0E+2 Inexact Rounded +ddqua275 quantize 0E-10 1e+2 -> 0E+2 + +ddqua280 quantize -10 1e+3 -> -0E+3 Inexact Rounded +ddqua281 quantize +1 1e+3 -> 0E+3 Inexact Rounded +ddqua282 quantize +10 1e+3 -> 0E+3 Inexact Rounded +ddqua283 quantize 1E+1 1e+3 -> 0E+3 Inexact Rounded +ddqua284 quantize 1E+2 1e+3 -> 0E+3 Inexact Rounded +ddqua285 quantize 1E+3 1e+3 -> 1E+3 +ddqua286 quantize 1E+4 1e+3 -> 1.0E+4 +ddqua287 quantize 1E+5 1e+3 -> 1.00E+5 +ddqua288 quantize 1E+6 1e+3 -> 1.000E+6 +ddqua289 quantize 1E+7 1e+3 -> 1.0000E+7 +ddqua290 quantize 1E+8 1e+3 -> 1.00000E+8 +ddqua291 quantize 1E+9 1e+3 -> 1.000000E+9 +ddqua292 quantize 1E+10 1e+3 -> 1.0000000E+10 +ddqua293 quantize 1E-10 1e+3 -> 0E+3 Inexact Rounded +ddqua294 quantize 1E-2 1e+3 -> 0E+3 Inexact Rounded +ddqua295 quantize 0E-10 1e+3 -> 0E+3 + +-- round up from below [sign wrong in JIT compiler once] +ddqua300 quantize 0.0078 1e-5 -> 0.00780 +ddqua301 quantize 0.0078 1e-4 -> 0.0078 +ddqua302 quantize 0.0078 1e-3 -> 0.008 Inexact Rounded +ddqua303 quantize 0.0078 1e-2 -> 0.01 Inexact Rounded +ddqua304 quantize 0.0078 1e-1 -> 0.0 Inexact Rounded +ddqua305 quantize 0.0078 1e0 -> 0 Inexact Rounded +ddqua306 quantize 0.0078 1e+1 -> 0E+1 Inexact Rounded +ddqua307 quantize 0.0078 1e+2 -> 0E+2 Inexact Rounded + +ddqua310 quantize -0.0078 1e-5 -> -0.00780 +ddqua311 quantize -0.0078 1e-4 -> -0.0078 +ddqua312 quantize -0.0078 1e-3 -> -0.008 Inexact Rounded +ddqua313 quantize -0.0078 1e-2 -> -0.01 Inexact Rounded +ddqua314 quantize -0.0078 1e-1 -> -0.0 Inexact Rounded +ddqua315 quantize -0.0078 1e0 -> -0 Inexact Rounded +ddqua316 quantize -0.0078 1e+1 -> -0E+1 Inexact Rounded +ddqua317 quantize -0.0078 1e+2 -> -0E+2 Inexact Rounded + +ddqua320 quantize 0.078 1e-5 -> 0.07800 +ddqua321 quantize 0.078 1e-4 -> 0.0780 +ddqua322 quantize 0.078 1e-3 -> 0.078 +ddqua323 quantize 0.078 1e-2 -> 0.08 Inexact Rounded +ddqua324 quantize 0.078 1e-1 -> 0.1 Inexact Rounded +ddqua325 quantize 0.078 1e0 -> 0 Inexact Rounded +ddqua326 quantize 0.078 1e+1 -> 0E+1 Inexact Rounded +ddqua327 quantize 0.078 1e+2 -> 0E+2 Inexact Rounded + +ddqua330 quantize -0.078 1e-5 -> -0.07800 +ddqua331 quantize -0.078 1e-4 -> -0.0780 +ddqua332 quantize -0.078 1e-3 -> -0.078 +ddqua333 quantize -0.078 1e-2 -> -0.08 Inexact Rounded +ddqua334 quantize -0.078 1e-1 -> -0.1 Inexact Rounded +ddqua335 quantize -0.078 1e0 -> -0 Inexact Rounded +ddqua336 quantize -0.078 1e+1 -> -0E+1 Inexact Rounded +ddqua337 quantize -0.078 1e+2 -> -0E+2 Inexact Rounded + +ddqua340 quantize 0.78 1e-5 -> 0.78000 +ddqua341 quantize 0.78 1e-4 -> 0.7800 +ddqua342 quantize 0.78 1e-3 -> 0.780 +ddqua343 quantize 0.78 1e-2 -> 0.78 +ddqua344 quantize 0.78 1e-1 -> 0.8 Inexact Rounded +ddqua345 quantize 0.78 1e0 -> 1 Inexact Rounded +ddqua346 quantize 0.78 1e+1 -> 0E+1 Inexact Rounded +ddqua347 quantize 0.78 1e+2 -> 0E+2 Inexact Rounded + +ddqua350 quantize -0.78 1e-5 -> -0.78000 +ddqua351 quantize -0.78 1e-4 -> -0.7800 +ddqua352 quantize -0.78 1e-3 -> -0.780 +ddqua353 quantize -0.78 1e-2 -> -0.78 +ddqua354 quantize -0.78 1e-1 -> -0.8 Inexact Rounded +ddqua355 quantize -0.78 1e0 -> -1 Inexact Rounded +ddqua356 quantize -0.78 1e+1 -> -0E+1 Inexact Rounded +ddqua357 quantize -0.78 1e+2 -> -0E+2 Inexact Rounded + +ddqua360 quantize 7.8 1e-5 -> 7.80000 +ddqua361 quantize 7.8 1e-4 -> 7.8000 +ddqua362 quantize 7.8 1e-3 -> 7.800 +ddqua363 quantize 7.8 1e-2 -> 7.80 +ddqua364 quantize 7.8 1e-1 -> 7.8 +ddqua365 quantize 7.8 1e0 -> 8 Inexact Rounded +ddqua366 quantize 7.8 1e+1 -> 1E+1 Inexact Rounded +ddqua367 quantize 7.8 1e+2 -> 0E+2 Inexact Rounded +ddqua368 quantize 7.8 1e+3 -> 0E+3 Inexact Rounded + +ddqua370 quantize -7.8 1e-5 -> -7.80000 +ddqua371 quantize -7.8 1e-4 -> -7.8000 +ddqua372 quantize -7.8 1e-3 -> -7.800 +ddqua373 quantize -7.8 1e-2 -> -7.80 +ddqua374 quantize -7.8 1e-1 -> -7.8 +ddqua375 quantize -7.8 1e0 -> -8 Inexact Rounded +ddqua376 quantize -7.8 1e+1 -> -1E+1 Inexact Rounded +ddqua377 quantize -7.8 1e+2 -> -0E+2 Inexact Rounded +ddqua378 quantize -7.8 1e+3 -> -0E+3 Inexact Rounded + +-- some individuals +ddqua380 quantize 1234567352364.506 1e-2 -> 1234567352364.51 Inexact Rounded +ddqua381 quantize 12345673523645.06 1e-2 -> 12345673523645.06 +ddqua382 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation +ddqua383 quantize 1234567352364506 1e-2 -> NaN Invalid_operation +ddqua384 quantize -1234567352364.506 1e-2 -> -1234567352364.51 Inexact Rounded +ddqua385 quantize -12345673523645.06 1e-2 -> -12345673523645.06 +ddqua386 quantize -123456735236450.6 1e-2 -> NaN Invalid_operation +ddqua387 quantize -1234567352364506 1e-2 -> NaN Invalid_operation + +rounding: down +ddqua389 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation +-- ? should that one instead have been: +-- ddqua389 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation +rounding: half_up + +-- and a few more from e-mail discussions +ddqua391 quantize 12345678912.34567 1e-3 -> 12345678912.346 Inexact Rounded +ddqua392 quantize 123456789123.4567 1e-3 -> 123456789123.457 Inexact Rounded +ddqua393 quantize 1234567891234.567 1e-3 -> 1234567891234.567 +ddqua394 quantize 12345678912345.67 1e-3 -> NaN Invalid_operation +ddqua395 quantize 123456789123456.7 1e-3 -> NaN Invalid_operation +ddqua396 quantize 1234567891234567. 1e-3 -> NaN Invalid_operation + +-- some 9999 round-up cases +ddqua400 quantize 9.999 1e-5 -> 9.99900 +ddqua401 quantize 9.999 1e-4 -> 9.9990 +ddqua402 quantize 9.999 1e-3 -> 9.999 +ddqua403 quantize 9.999 1e-2 -> 10.00 Inexact Rounded +ddqua404 quantize 9.999 1e-1 -> 10.0 Inexact Rounded +ddqua405 quantize 9.999 1e0 -> 10 Inexact Rounded +ddqua406 quantize 9.999 1e1 -> 1E+1 Inexact Rounded +ddqua407 quantize 9.999 1e2 -> 0E+2 Inexact Rounded + +ddqua410 quantize 0.999 1e-5 -> 0.99900 +ddqua411 quantize 0.999 1e-4 -> 0.9990 +ddqua412 quantize 0.999 1e-3 -> 0.999 +ddqua413 quantize 0.999 1e-2 -> 1.00 Inexact Rounded +ddqua414 quantize 0.999 1e-1 -> 1.0 Inexact Rounded +ddqua415 quantize 0.999 1e0 -> 1 Inexact Rounded +ddqua416 quantize 0.999 1e1 -> 0E+1 Inexact Rounded + +ddqua420 quantize 0.0999 1e-5 -> 0.09990 +ddqua421 quantize 0.0999 1e-4 -> 0.0999 +ddqua422 quantize 0.0999 1e-3 -> 0.100 Inexact Rounded +ddqua423 quantize 0.0999 1e-2 -> 0.10 Inexact Rounded +ddqua424 quantize 0.0999 1e-1 -> 0.1 Inexact Rounded +ddqua425 quantize 0.0999 1e0 -> 0 Inexact Rounded +ddqua426 quantize 0.0999 1e1 -> 0E+1 Inexact Rounded + +ddqua430 quantize 0.00999 1e-5 -> 0.00999 +ddqua431 quantize 0.00999 1e-4 -> 0.0100 Inexact Rounded +ddqua432 quantize 0.00999 1e-3 -> 0.010 Inexact Rounded +ddqua433 quantize 0.00999 1e-2 -> 0.01 Inexact Rounded +ddqua434 quantize 0.00999 1e-1 -> 0.0 Inexact Rounded +ddqua435 quantize 0.00999 1e0 -> 0 Inexact Rounded +ddqua436 quantize 0.00999 1e1 -> 0E+1 Inexact Rounded + +ddqua440 quantize 0.000999 1e-5 -> 0.00100 Inexact Rounded +ddqua441 quantize 0.000999 1e-4 -> 0.0010 Inexact Rounded +ddqua442 quantize 0.000999 1e-3 -> 0.001 Inexact Rounded +ddqua443 quantize 0.000999 1e-2 -> 0.00 Inexact Rounded +ddqua444 quantize 0.000999 1e-1 -> 0.0 Inexact Rounded +ddqua445 quantize 0.000999 1e0 -> 0 Inexact Rounded +ddqua446 quantize 0.000999 1e1 -> 0E+1 Inexact Rounded + +ddqua1001 quantize 0.000 0.001 -> 0.000 +ddqua1002 quantize 0.001 0.001 -> 0.001 +ddqua1003 quantize 0.0012 0.001 -> 0.001 Inexact Rounded +ddqua1004 quantize 0.0018 0.001 -> 0.002 Inexact Rounded +ddqua1005 quantize 0.501 0.001 -> 0.501 +ddqua1006 quantize 0.5012 0.001 -> 0.501 Inexact Rounded +ddqua1007 quantize 0.5018 0.001 -> 0.502 Inexact Rounded +ddqua1008 quantize 0.999 0.001 -> 0.999 + +ddqua481 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded +ddqua482 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded +ddqua483 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded +ddqua484 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded +ddqua485 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded +ddqua486 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded +-- a potential double-round +ddqua487 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded +ddqua488 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded + +ddqua491 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded +ddqua492 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded +ddqua493 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded +ddqua494 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded +ddqua495 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded +ddqua496 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded +ddqua497 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded +ddqua498 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded + +-- Zeros +ddqua500 quantize 0 1e1 -> 0E+1 +ddqua501 quantize 0 1e0 -> 0 +ddqua502 quantize 0 1e-1 -> 0.0 +ddqua503 quantize 0.0 1e-1 -> 0.0 +ddqua504 quantize 0.0 1e0 -> 0 +ddqua505 quantize 0.0 1e+1 -> 0E+1 +ddqua506 quantize 0E+1 1e-1 -> 0.0 +ddqua507 quantize 0E+1 1e0 -> 0 +ddqua508 quantize 0E+1 1e+1 -> 0E+1 +ddqua509 quantize -0 1e1 -> -0E+1 +ddqua510 quantize -0 1e0 -> -0 +ddqua511 quantize -0 1e-1 -> -0.0 +ddqua512 quantize -0.0 1e-1 -> -0.0 +ddqua513 quantize -0.0 1e0 -> -0 +ddqua514 quantize -0.0 1e+1 -> -0E+1 +ddqua515 quantize -0E+1 1e-1 -> -0.0 +ddqua516 quantize -0E+1 1e0 -> -0 +ddqua517 quantize -0E+1 1e+1 -> -0E+1 + +-- Suspicious RHS values +ddqua520 quantize 1.234 1e359 -> 0E+359 Inexact Rounded +ddqua521 quantize 123.456 1e359 -> 0E+359 Inexact Rounded +ddqua522 quantize 1.234 1e359 -> 0E+359 Inexact Rounded +ddqua523 quantize 123.456 1e359 -> 0E+359 Inexact Rounded +-- next four are "won't fit" overflow +ddqua526 quantize 1.234 1e-299 -> NaN Invalid_operation +ddqua527 quantize 123.456 1e-299 -> NaN Invalid_operation +ddqua528 quantize 1.234 1e-299 -> NaN Invalid_operation +ddqua529 quantize 123.456 1e-299 -> NaN Invalid_operation + +ddqua532 quantize 1.234E+299 1e299 -> 1E+299 Inexact Rounded +ddqua533 quantize 1.234E+298 1e299 -> 0E+299 Inexact Rounded +ddqua534 quantize 1.234 1e299 -> 0E+299 Inexact Rounded +ddqua537 quantize 0 1e-299 -> 0E-299 +-- next two are "won't fit" overflows +ddqua538 quantize 1.234 1e-299 -> NaN Invalid_operation +ddqua539 quantize 1.234 1e-300 -> NaN Invalid_operation +-- [more below] + +-- Specials +ddqua580 quantize Inf -Inf -> Infinity +ddqua581 quantize Inf 1e-299 -> NaN Invalid_operation +ddqua582 quantize Inf 1e-1 -> NaN Invalid_operation +ddqua583 quantize Inf 1e0 -> NaN Invalid_operation +ddqua584 quantize Inf 1e1 -> NaN Invalid_operation +ddqua585 quantize Inf 1e299 -> NaN Invalid_operation +ddqua586 quantize Inf Inf -> Infinity +ddqua587 quantize -1000 Inf -> NaN Invalid_operation +ddqua588 quantize -Inf Inf -> -Infinity +ddqua589 quantize -1 Inf -> NaN Invalid_operation +ddqua590 quantize 0 Inf -> NaN Invalid_operation +ddqua591 quantize 1 Inf -> NaN Invalid_operation +ddqua592 quantize 1000 Inf -> NaN Invalid_operation +ddqua593 quantize Inf Inf -> Infinity +ddqua594 quantize Inf 1e-0 -> NaN Invalid_operation +ddqua595 quantize -0 Inf -> NaN Invalid_operation + +ddqua600 quantize -Inf -Inf -> -Infinity +ddqua601 quantize -Inf 1e-299 -> NaN Invalid_operation +ddqua602 quantize -Inf 1e-1 -> NaN Invalid_operation +ddqua603 quantize -Inf 1e0 -> NaN Invalid_operation +ddqua604 quantize -Inf 1e1 -> NaN Invalid_operation +ddqua605 quantize -Inf 1e299 -> NaN Invalid_operation +ddqua606 quantize -Inf Inf -> -Infinity +ddqua607 quantize -1000 Inf -> NaN Invalid_operation +ddqua608 quantize -Inf -Inf -> -Infinity +ddqua609 quantize -1 -Inf -> NaN Invalid_operation +ddqua610 quantize 0 -Inf -> NaN Invalid_operation +ddqua611 quantize 1 -Inf -> NaN Invalid_operation +ddqua612 quantize 1000 -Inf -> NaN Invalid_operation +ddqua613 quantize Inf -Inf -> Infinity +ddqua614 quantize -Inf 1e-0 -> NaN Invalid_operation +ddqua615 quantize -0 -Inf -> NaN Invalid_operation + +ddqua621 quantize NaN -Inf -> NaN +ddqua622 quantize NaN 1e-299 -> NaN +ddqua623 quantize NaN 1e-1 -> NaN +ddqua624 quantize NaN 1e0 -> NaN +ddqua625 quantize NaN 1e1 -> NaN +ddqua626 quantize NaN 1e299 -> NaN +ddqua627 quantize NaN Inf -> NaN +ddqua628 quantize NaN NaN -> NaN +ddqua629 quantize -Inf NaN -> NaN +ddqua630 quantize -1000 NaN -> NaN +ddqua631 quantize -1 NaN -> NaN +ddqua632 quantize 0 NaN -> NaN +ddqua633 quantize 1 NaN -> NaN +ddqua634 quantize 1000 NaN -> NaN +ddqua635 quantize Inf NaN -> NaN +ddqua636 quantize NaN 1e-0 -> NaN +ddqua637 quantize -0 NaN -> NaN + +ddqua641 quantize sNaN -Inf -> NaN Invalid_operation +ddqua642 quantize sNaN 1e-299 -> NaN Invalid_operation +ddqua643 quantize sNaN 1e-1 -> NaN Invalid_operation +ddqua644 quantize sNaN 1e0 -> NaN Invalid_operation +ddqua645 quantize sNaN 1e1 -> NaN Invalid_operation +ddqua646 quantize sNaN 1e299 -> NaN Invalid_operation +ddqua647 quantize sNaN NaN -> NaN Invalid_operation +ddqua648 quantize sNaN sNaN -> NaN Invalid_operation +ddqua649 quantize NaN sNaN -> NaN Invalid_operation +ddqua650 quantize -Inf sNaN -> NaN Invalid_operation +ddqua651 quantize -1000 sNaN -> NaN Invalid_operation +ddqua652 quantize -1 sNaN -> NaN Invalid_operation +ddqua653 quantize 0 sNaN -> NaN Invalid_operation +ddqua654 quantize 1 sNaN -> NaN Invalid_operation +ddqua655 quantize 1000 sNaN -> NaN Invalid_operation +ddqua656 quantize Inf sNaN -> NaN Invalid_operation +ddqua657 quantize NaN sNaN -> NaN Invalid_operation +ddqua658 quantize sNaN 1e-0 -> NaN Invalid_operation +ddqua659 quantize -0 sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddqua661 quantize NaN9 -Inf -> NaN9 +ddqua662 quantize NaN8 919 -> NaN8 +ddqua663 quantize NaN71 Inf -> NaN71 +ddqua664 quantize NaN6 NaN5 -> NaN6 +ddqua665 quantize -Inf NaN4 -> NaN4 +ddqua666 quantize -919 NaN31 -> NaN31 +ddqua667 quantize Inf NaN2 -> NaN2 + +ddqua671 quantize sNaN99 -Inf -> NaN99 Invalid_operation +ddqua672 quantize sNaN98 -11 -> NaN98 Invalid_operation +ddqua673 quantize sNaN97 NaN -> NaN97 Invalid_operation +ddqua674 quantize sNaN16 sNaN94 -> NaN16 Invalid_operation +ddqua675 quantize NaN95 sNaN93 -> NaN93 Invalid_operation +ddqua676 quantize -Inf sNaN92 -> NaN92 Invalid_operation +ddqua677 quantize 088 sNaN91 -> NaN91 Invalid_operation +ddqua678 quantize Inf sNaN90 -> NaN90 Invalid_operation +ddqua679 quantize NaN sNaN88 -> NaN88 Invalid_operation + +ddqua681 quantize -NaN9 -Inf -> -NaN9 +ddqua682 quantize -NaN8 919 -> -NaN8 +ddqua683 quantize -NaN71 Inf -> -NaN71 +ddqua684 quantize -NaN6 -NaN5 -> -NaN6 +ddqua685 quantize -Inf -NaN4 -> -NaN4 +ddqua686 quantize -919 -NaN31 -> -NaN31 +ddqua687 quantize Inf -NaN2 -> -NaN2 + +ddqua691 quantize -sNaN99 -Inf -> -NaN99 Invalid_operation +ddqua692 quantize -sNaN98 -11 -> -NaN98 Invalid_operation +ddqua693 quantize -sNaN97 NaN -> -NaN97 Invalid_operation +ddqua694 quantize -sNaN16 sNaN94 -> -NaN16 Invalid_operation +ddqua695 quantize -NaN95 -sNaN93 -> -NaN93 Invalid_operation +ddqua696 quantize -Inf -sNaN92 -> -NaN92 Invalid_operation +ddqua697 quantize 088 -sNaN91 -> -NaN91 Invalid_operation +ddqua698 quantize Inf -sNaN90 -> -NaN90 Invalid_operation +ddqua699 quantize NaN -sNaN88 -> -NaN88 Invalid_operation + +-- subnormals and underflow +ddqua710 quantize 1.00E-383 1e-383 -> 1E-383 Rounded +ddqua711 quantize 0.1E-383 2e-384 -> 1E-384 Subnormal +ddqua712 quantize 0.10E-383 3e-384 -> 1E-384 Subnormal Rounded +ddqua713 quantize 0.100E-383 4e-384 -> 1E-384 Subnormal Rounded +ddqua714 quantize 0.01E-383 5e-385 -> 1E-385 Subnormal +-- next is rounded to Emin +ddqua715 quantize 0.999E-383 1e-383 -> 1E-383 Inexact Rounded +ddqua716 quantize 0.099E-383 10e-384 -> 1E-384 Inexact Rounded Subnormal + +ddqua717 quantize 0.009E-383 1e-385 -> 1E-385 Inexact Rounded Subnormal +ddqua718 quantize 0.001E-383 1e-385 -> 0E-385 Inexact Rounded +ddqua719 quantize 0.0009E-383 1e-385 -> 0E-385 Inexact Rounded +ddqua720 quantize 0.0001E-383 1e-385 -> 0E-385 Inexact Rounded + +ddqua730 quantize -1.00E-383 1e-383 -> -1E-383 Rounded +ddqua731 quantize -0.1E-383 1e-383 -> -0E-383 Rounded Inexact +ddqua732 quantize -0.10E-383 1e-383 -> -0E-383 Rounded Inexact +ddqua733 quantize -0.100E-383 1e-383 -> -0E-383 Rounded Inexact +ddqua734 quantize -0.01E-383 1e-383 -> -0E-383 Inexact Rounded +-- next is rounded to Emin +ddqua735 quantize -0.999E-383 90e-383 -> -1E-383 Inexact Rounded +ddqua736 quantize -0.099E-383 -1e-383 -> -0E-383 Inexact Rounded +ddqua737 quantize -0.009E-383 -1e-383 -> -0E-383 Inexact Rounded +ddqua738 quantize -0.001E-383 -0e-383 -> -0E-383 Inexact Rounded +ddqua739 quantize -0.0001E-383 0e-383 -> -0E-383 Inexact Rounded + +ddqua740 quantize -1.00E-383 1e-384 -> -1.0E-383 Rounded +ddqua741 quantize -0.1E-383 1e-384 -> -1E-384 Subnormal +ddqua742 quantize -0.10E-383 1e-384 -> -1E-384 Subnormal Rounded +ddqua743 quantize -0.100E-383 1e-384 -> -1E-384 Subnormal Rounded +ddqua744 quantize -0.01E-383 1e-384 -> -0E-384 Inexact Rounded +-- next is rounded to Emin +ddqua745 quantize -0.999E-383 1e-384 -> -1.0E-383 Inexact Rounded +ddqua746 quantize -0.099E-383 1e-384 -> -1E-384 Inexact Rounded Subnormal +ddqua747 quantize -0.009E-383 1e-384 -> -0E-384 Inexact Rounded +ddqua748 quantize -0.001E-383 1e-384 -> -0E-384 Inexact Rounded +ddqua749 quantize -0.0001E-383 1e-384 -> -0E-384 Inexact Rounded + +ddqua750 quantize -1.00E-383 1e-385 -> -1.00E-383 +ddqua751 quantize -0.1E-383 1e-385 -> -1.0E-384 Subnormal +ddqua752 quantize -0.10E-383 1e-385 -> -1.0E-384 Subnormal +ddqua753 quantize -0.100E-383 1e-385 -> -1.0E-384 Subnormal Rounded +ddqua754 quantize -0.01E-383 1e-385 -> -1E-385 Subnormal +-- next is rounded to Emin +ddqua755 quantize -0.999E-383 1e-385 -> -1.00E-383 Inexact Rounded +ddqua756 quantize -0.099E-383 1e-385 -> -1.0E-384 Inexact Rounded Subnormal +ddqua757 quantize -0.009E-383 1e-385 -> -1E-385 Inexact Rounded Subnormal +ddqua758 quantize -0.001E-383 1e-385 -> -0E-385 Inexact Rounded +ddqua759 quantize -0.0001E-383 1e-385 -> -0E-385 Inexact Rounded + +ddqua760 quantize -1.00E-383 1e-386 -> -1.000E-383 +ddqua761 quantize -0.1E-383 1e-386 -> -1.00E-384 Subnormal +ddqua762 quantize -0.10E-383 1e-386 -> -1.00E-384 Subnormal +ddqua763 quantize -0.100E-383 1e-386 -> -1.00E-384 Subnormal +ddqua764 quantize -0.01E-383 1e-386 -> -1.0E-385 Subnormal +ddqua765 quantize -0.999E-383 1e-386 -> -9.99E-384 Subnormal +ddqua766 quantize -0.099E-383 1e-386 -> -9.9E-385 Subnormal +ddqua767 quantize -0.009E-383 1e-386 -> -9E-386 Subnormal +ddqua768 quantize -0.001E-383 1e-386 -> -1E-386 Subnormal +ddqua769 quantize -0.0001E-383 1e-386 -> -0E-386 Inexact Rounded + +-- More from Fung Lee +ddqua1021 quantize 8.666666666666000E+384 1.000000000000000E+384 -> 8.666666666666000E+384 +ddqua1022 quantize -8.666666666666000E+384 1.000000000000000E+384 -> -8.666666666666000E+384 +ddqua1027 quantize 8.666666666666000E+323 1E+31 -> NaN Invalid_operation +ddqua1029 quantize 8.66666666E+3 1E+3 -> 9E+3 Inexact Rounded + + +--ddqua1030 quantize 8.666666666666000E+384 1E+384 -> 9.000000000000000E+384 Rounded Inexact +--ddqua1031 quantize 8.666666666666000E+384 1E+384 -> 8.666666666666000E+384 Rounded +--ddqua1032 quantize 8.666666666666000E+384 1E+383 -> 8.666666666666000E+384 Rounded +--ddqua1033 quantize 8.666666666666000E+384 1E+382 -> 8.666666666666000E+384 Rounded +--ddqua1034 quantize 8.666666666666000E+384 1E+381 -> 8.666666666666000E+384 Rounded +--ddqua1035 quantize 8.666666666666000E+384 1E+380 -> 8.666666666666000E+384 Rounded + +-- Int and uInt32 edge values for testing conversions +ddqua1040 quantize -2147483646 0 -> -2147483646 +ddqua1041 quantize -2147483647 0 -> -2147483647 +ddqua1042 quantize -2147483648 0 -> -2147483648 +ddqua1043 quantize -2147483649 0 -> -2147483649 +ddqua1044 quantize 2147483646 0 -> 2147483646 +ddqua1045 quantize 2147483647 0 -> 2147483647 +ddqua1046 quantize 2147483648 0 -> 2147483648 +ddqua1047 quantize 2147483649 0 -> 2147483649 +ddqua1048 quantize 4294967294 0 -> 4294967294 +ddqua1049 quantize 4294967295 0 -> 4294967295 +ddqua1050 quantize 4294967296 0 -> 4294967296 +ddqua1051 quantize 4294967297 0 -> 4294967297 + +-- Rounding swathe +rounding: half_even +ddqua1100 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1101 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1102 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1103 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +ddqua1104 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1105 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua1106 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1107 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1108 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1109 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: half_up +ddqua1200 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1201 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1202 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1203 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +ddqua1204 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1205 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +ddqua1206 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1207 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1208 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1209 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: half_down +ddqua1300 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1301 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1302 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1303 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +ddqua1304 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1305 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua1306 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1307 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1308 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1309 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: up +ddqua1400 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1401 quantize 1.2301 1.00 -> 1.24 Inexact Rounded +ddqua1402 quantize 1.2310 1.00 -> 1.24 Inexact Rounded +ddqua1403 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +ddqua1404 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1405 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +ddqua1406 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1407 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1408 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1409 quantize 1.2399 1.00 -> 1.24 Inexact Rounded +ddqua1411 quantize -1.2399 1.00 -> -1.24 Inexact Rounded + +rounding: down +ddqua1500 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1501 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1502 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1503 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +ddqua1504 quantize 1.2351 1.00 -> 1.23 Inexact Rounded +ddqua1505 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua1506 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +ddqua1507 quantize 1.2360 1.00 -> 1.23 Inexact Rounded +ddqua1508 quantize 1.2370 1.00 -> 1.23 Inexact Rounded +ddqua1509 quantize 1.2399 1.00 -> 1.23 Inexact Rounded +ddqua1511 quantize -1.2399 1.00 -> -1.23 Inexact Rounded + +rounding: ceiling +ddqua1600 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1601 quantize 1.2301 1.00 -> 1.24 Inexact Rounded +ddqua1602 quantize 1.2310 1.00 -> 1.24 Inexact Rounded +ddqua1603 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +ddqua1604 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1605 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +ddqua1606 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1607 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1608 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1609 quantize 1.2399 1.00 -> 1.24 Inexact Rounded +ddqua1611 quantize -1.2399 1.00 -> -1.23 Inexact Rounded + +rounding: floor +ddqua1700 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1701 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1702 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1703 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +ddqua1704 quantize 1.2351 1.00 -> 1.23 Inexact Rounded +ddqua1705 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua1706 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +ddqua1707 quantize 1.2360 1.00 -> 1.23 Inexact Rounded +ddqua1708 quantize 1.2370 1.00 -> 1.23 Inexact Rounded +ddqua1709 quantize 1.2399 1.00 -> 1.23 Inexact Rounded +ddqua1711 quantize -1.2399 1.00 -> -1.24 Inexact Rounded + +rounding: 05up +ddqua1800 quantize 1.2000 1.00 -> 1.20 Rounded +ddqua1801 quantize 1.2001 1.00 -> 1.21 Inexact Rounded +ddqua1802 quantize 1.2010 1.00 -> 1.21 Inexact Rounded +ddqua1803 quantize 1.2050 1.00 -> 1.21 Inexact Rounded +ddqua1804 quantize 1.2051 1.00 -> 1.21 Inexact Rounded +ddqua1807 quantize 1.2060 1.00 -> 1.21 Inexact Rounded +ddqua1808 quantize 1.2070 1.00 -> 1.21 Inexact Rounded +ddqua1809 quantize 1.2099 1.00 -> 1.21 Inexact Rounded +ddqua1811 quantize -1.2099 1.00 -> -1.21 Inexact Rounded + +ddqua1900 quantize 1.2100 1.00 -> 1.21 Rounded +ddqua1901 quantize 1.2101 1.00 -> 1.21 Inexact Rounded +ddqua1902 quantize 1.2110 1.00 -> 1.21 Inexact Rounded +ddqua1903 quantize 1.2150 1.00 -> 1.21 Inexact Rounded +ddqua1904 quantize 1.2151 1.00 -> 1.21 Inexact Rounded +ddqua1907 quantize 1.2160 1.00 -> 1.21 Inexact Rounded +ddqua1908 quantize 1.2170 1.00 -> 1.21 Inexact Rounded +ddqua1909 quantize 1.2199 1.00 -> 1.21 Inexact Rounded +ddqua1911 quantize -1.2199 1.00 -> -1.21 Inexact Rounded + +ddqua2000 quantize 1.2400 1.00 -> 1.24 Rounded +ddqua2001 quantize 1.2401 1.00 -> 1.24 Inexact Rounded +ddqua2002 quantize 1.2410 1.00 -> 1.24 Inexact Rounded +ddqua2003 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua2004 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +ddqua2007 quantize 1.2460 1.00 -> 1.24 Inexact Rounded +ddqua2008 quantize 1.2470 1.00 -> 1.24 Inexact Rounded +ddqua2009 quantize 1.2499 1.00 -> 1.24 Inexact Rounded +ddqua2011 quantize -1.2499 1.00 -> -1.24 Inexact Rounded + +ddqua2100 quantize 1.2500 1.00 -> 1.25 Rounded +ddqua2101 quantize 1.2501 1.00 -> 1.26 Inexact Rounded +ddqua2102 quantize 1.2510 1.00 -> 1.26 Inexact Rounded +ddqua2103 quantize 1.2550 1.00 -> 1.26 Inexact Rounded +ddqua2104 quantize 1.2551 1.00 -> 1.26 Inexact Rounded +ddqua2107 quantize 1.2560 1.00 -> 1.26 Inexact Rounded +ddqua2108 quantize 1.2570 1.00 -> 1.26 Inexact Rounded +ddqua2109 quantize 1.2599 1.00 -> 1.26 Inexact Rounded +ddqua2111 quantize -1.2599 1.00 -> -1.26 Inexact Rounded + +ddqua2200 quantize 1.2600 1.00 -> 1.26 Rounded +ddqua2201 quantize 1.2601 1.00 -> 1.26 Inexact Rounded +ddqua2202 quantize 1.2610 1.00 -> 1.26 Inexact Rounded +ddqua2203 quantize 1.2650 1.00 -> 1.26 Inexact Rounded +ddqua2204 quantize 1.2651 1.00 -> 1.26 Inexact Rounded +ddqua2207 quantize 1.2660 1.00 -> 1.26 Inexact Rounded +ddqua2208 quantize 1.2670 1.00 -> 1.26 Inexact Rounded +ddqua2209 quantize 1.2699 1.00 -> 1.26 Inexact Rounded +ddqua2211 quantize -1.2699 1.00 -> -1.26 Inexact Rounded + +ddqua2300 quantize 1.2900 1.00 -> 1.29 Rounded +ddqua2301 quantize 1.2901 1.00 -> 1.29 Inexact Rounded +ddqua2302 quantize 1.2910 1.00 -> 1.29 Inexact Rounded +ddqua2303 quantize 1.2950 1.00 -> 1.29 Inexact Rounded +ddqua2304 quantize 1.2951 1.00 -> 1.29 Inexact Rounded +ddqua2307 quantize 1.2960 1.00 -> 1.29 Inexact Rounded +ddqua2308 quantize 1.2970 1.00 -> 1.29 Inexact Rounded +ddqua2309 quantize 1.2999 1.00 -> 1.29 Inexact Rounded +ddqua2311 quantize -1.2999 1.00 -> -1.29 Inexact Rounded + +-- Null tests +rounding: half_even +ddqua998 quantize 10 # -> NaN Invalid_operation +ddqua999 quantize # 1e10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddReduce.decTest b/Lib/test/decimaltestdata/ddReduce.decTest index bdfd0604926..9529e50a752 100644 --- a/Lib/test/decimaltestdata/ddReduce.decTest +++ b/Lib/test/decimaltestdata/ddReduce.decTest @@ -1,182 +1,182 @@ ------------------------------------------------------------------------- --- ddReduce.decTest -- remove trailing zeros from a decDouble -- --- Copyright (c) IBM Corporation, 2003, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddred001 reduce '1' -> '1' -ddred002 reduce '-1' -> '-1' -ddred003 reduce '1.00' -> '1' -ddred004 reduce '-1.00' -> '-1' -ddred005 reduce '0' -> '0' -ddred006 reduce '0.00' -> '0' -ddred007 reduce '00.0' -> '0' -ddred008 reduce '00.00' -> '0' -ddred009 reduce '00' -> '0' -ddred010 reduce '0E+1' -> '0' -ddred011 reduce '0E+5' -> '0' - -ddred012 reduce '-2' -> '-2' -ddred013 reduce '2' -> '2' -ddred014 reduce '-2.00' -> '-2' -ddred015 reduce '2.00' -> '2' -ddred016 reduce '-0' -> '-0' -ddred017 reduce '-0.00' -> '-0' -ddred018 reduce '-00.0' -> '-0' -ddred019 reduce '-00.00' -> '-0' -ddred020 reduce '-00' -> '-0' -ddred021 reduce '-0E+5' -> '-0' -ddred022 reduce '-0E+1' -> '-0' - -ddred030 reduce '+0.1' -> '0.1' -ddred031 reduce '-0.1' -> '-0.1' -ddred032 reduce '+0.01' -> '0.01' -ddred033 reduce '-0.01' -> '-0.01' -ddred034 reduce '+0.001' -> '0.001' -ddred035 reduce '-0.001' -> '-0.001' -ddred036 reduce '+0.000001' -> '0.000001' -ddred037 reduce '-0.000001' -> '-0.000001' -ddred038 reduce '+0.000000000001' -> '1E-12' -ddred039 reduce '-0.000000000001' -> '-1E-12' - -ddred041 reduce 1.1 -> 1.1 -ddred042 reduce 1.10 -> 1.1 -ddred043 reduce 1.100 -> 1.1 -ddred044 reduce 1.110 -> 1.11 -ddred045 reduce -1.1 -> -1.1 -ddred046 reduce -1.10 -> -1.1 -ddred047 reduce -1.100 -> -1.1 -ddred048 reduce -1.110 -> -1.11 -ddred049 reduce 9.9 -> 9.9 -ddred050 reduce 9.90 -> 9.9 -ddred051 reduce 9.900 -> 9.9 -ddred052 reduce 9.990 -> 9.99 -ddred053 reduce -9.9 -> -9.9 -ddred054 reduce -9.90 -> -9.9 -ddred055 reduce -9.900 -> -9.9 -ddred056 reduce -9.990 -> -9.99 - --- some trailing fractional zeros with zeros in units -ddred060 reduce 10.0 -> 1E+1 -ddred061 reduce 10.00 -> 1E+1 -ddred062 reduce 100.0 -> 1E+2 -ddred063 reduce 100.00 -> 1E+2 -ddred064 reduce 1.1000E+3 -> 1.1E+3 -ddred065 reduce 1.10000E+3 -> 1.1E+3 -ddred066 reduce -10.0 -> -1E+1 -ddred067 reduce -10.00 -> -1E+1 -ddred068 reduce -100.0 -> -1E+2 -ddred069 reduce -100.00 -> -1E+2 -ddred070 reduce -1.1000E+3 -> -1.1E+3 -ddred071 reduce -1.10000E+3 -> -1.1E+3 - --- some insignificant trailing zeros with positive exponent -ddred080 reduce 10E+1 -> 1E+2 -ddred081 reduce 100E+1 -> 1E+3 -ddred082 reduce 1.0E+2 -> 1E+2 -ddred083 reduce 1.0E+3 -> 1E+3 -ddred084 reduce 1.1E+3 -> 1.1E+3 -ddred085 reduce 1.00E+3 -> 1E+3 -ddred086 reduce 1.10E+3 -> 1.1E+3 -ddred087 reduce -10E+1 -> -1E+2 -ddred088 reduce -100E+1 -> -1E+3 -ddred089 reduce -1.0E+2 -> -1E+2 -ddred090 reduce -1.0E+3 -> -1E+3 -ddred091 reduce -1.1E+3 -> -1.1E+3 -ddred092 reduce -1.00E+3 -> -1E+3 -ddred093 reduce -1.10E+3 -> -1.1E+3 - --- some significant trailing zeros, were we to be trimming -ddred100 reduce 11 -> 11 -ddred101 reduce 10 -> 1E+1 -ddred102 reduce 10. -> 1E+1 -ddred103 reduce 1.1E+1 -> 11 -ddred104 reduce 1.0E+1 -> 1E+1 -ddred105 reduce 1.10E+2 -> 1.1E+2 -ddred106 reduce 1.00E+2 -> 1E+2 -ddred107 reduce 1.100E+3 -> 1.1E+3 -ddred108 reduce 1.000E+3 -> 1E+3 -ddred109 reduce 1.000000E+6 -> 1E+6 -ddred110 reduce -11 -> -11 -ddred111 reduce -10 -> -1E+1 -ddred112 reduce -10. -> -1E+1 -ddred113 reduce -1.1E+1 -> -11 -ddred114 reduce -1.0E+1 -> -1E+1 -ddred115 reduce -1.10E+2 -> -1.1E+2 -ddred116 reduce -1.00E+2 -> -1E+2 -ddred117 reduce -1.100E+3 -> -1.1E+3 -ddred118 reduce -1.000E+3 -> -1E+3 -ddred119 reduce -1.00000E+5 -> -1E+5 -ddred120 reduce -1.000000E+6 -> -1E+6 -ddred121 reduce -10.00000E+6 -> -1E+7 -ddred122 reduce -100.0000E+6 -> -1E+8 -ddred123 reduce -1000.000E+6 -> -1E+9 -ddred124 reduce -10000.00E+6 -> -1E+10 -ddred125 reduce -100000.0E+6 -> -1E+11 -ddred126 reduce -1000000.E+6 -> -1E+12 - --- examples from decArith -ddred140 reduce '2.1' -> '2.1' -ddred141 reduce '-2.0' -> '-2' -ddred142 reduce '1.200' -> '1.2' -ddred143 reduce '-120' -> '-1.2E+2' -ddred144 reduce '120.00' -> '1.2E+2' -ddred145 reduce '0.00' -> '0' - --- Nmax, Nmin, Ntiny --- note origami effect on some of these -ddred151 reduce 9.999999999999999E+384 -> 9.999999999999999E+384 -ddred152 reduce 9.999999000000000E+380 -> 9.99999900000E+380 -ddred153 reduce 9.999999999990000E+384 -> 9.999999999990000E+384 -ddred154 reduce 1E-383 -> 1E-383 -ddred155 reduce 1.000000000000000E-383 -> 1E-383 -ddred156 reduce 2.000E-395 -> 2E-395 Subnormal -ddred157 reduce 1E-398 -> 1E-398 Subnormal - -ddred161 reduce -1E-398 -> -1E-398 Subnormal -ddred162 reduce -2.000E-395 -> -2E-395 Subnormal -ddred163 reduce -1.000000000000000E-383 -> -1E-383 -ddred164 reduce -1E-383 -> -1E-383 -ddred165 reduce -9.999999000000000E+380 -> -9.99999900000E+380 -ddred166 reduce -9.999999999990000E+384 -> -9.999999999990000E+384 -ddred167 reduce -9.999999999999990E+384 -> -9.999999999999990E+384 -ddred168 reduce -9.999999999999999E+384 -> -9.999999999999999E+384 -ddred169 reduce -9.999999999999990E+384 -> -9.999999999999990E+384 - - --- specials (reduce does not affect payload) -ddred820 reduce 'Inf' -> 'Infinity' -ddred821 reduce '-Inf' -> '-Infinity' -ddred822 reduce NaN -> NaN -ddred823 reduce sNaN -> NaN Invalid_operation -ddred824 reduce NaN101 -> NaN101 -ddred825 reduce sNaN010 -> NaN10 Invalid_operation -ddred827 reduce -NaN -> -NaN -ddred828 reduce -sNaN -> -NaN Invalid_operation -ddred829 reduce -NaN101 -> -NaN101 -ddred830 reduce -sNaN010 -> -NaN10 Invalid_operation - --- Null test -ddred900 reduce # -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddReduce.decTest -- remove trailing zeros from a decDouble -- +-- Copyright (c) IBM Corporation, 2003, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddred001 reduce '1' -> '1' +ddred002 reduce '-1' -> '-1' +ddred003 reduce '1.00' -> '1' +ddred004 reduce '-1.00' -> '-1' +ddred005 reduce '0' -> '0' +ddred006 reduce '0.00' -> '0' +ddred007 reduce '00.0' -> '0' +ddred008 reduce '00.00' -> '0' +ddred009 reduce '00' -> '0' +ddred010 reduce '0E+1' -> '0' +ddred011 reduce '0E+5' -> '0' + +ddred012 reduce '-2' -> '-2' +ddred013 reduce '2' -> '2' +ddred014 reduce '-2.00' -> '-2' +ddred015 reduce '2.00' -> '2' +ddred016 reduce '-0' -> '-0' +ddred017 reduce '-0.00' -> '-0' +ddred018 reduce '-00.0' -> '-0' +ddred019 reduce '-00.00' -> '-0' +ddred020 reduce '-00' -> '-0' +ddred021 reduce '-0E+5' -> '-0' +ddred022 reduce '-0E+1' -> '-0' + +ddred030 reduce '+0.1' -> '0.1' +ddred031 reduce '-0.1' -> '-0.1' +ddred032 reduce '+0.01' -> '0.01' +ddred033 reduce '-0.01' -> '-0.01' +ddred034 reduce '+0.001' -> '0.001' +ddred035 reduce '-0.001' -> '-0.001' +ddred036 reduce '+0.000001' -> '0.000001' +ddred037 reduce '-0.000001' -> '-0.000001' +ddred038 reduce '+0.000000000001' -> '1E-12' +ddred039 reduce '-0.000000000001' -> '-1E-12' + +ddred041 reduce 1.1 -> 1.1 +ddred042 reduce 1.10 -> 1.1 +ddred043 reduce 1.100 -> 1.1 +ddred044 reduce 1.110 -> 1.11 +ddred045 reduce -1.1 -> -1.1 +ddred046 reduce -1.10 -> -1.1 +ddred047 reduce -1.100 -> -1.1 +ddred048 reduce -1.110 -> -1.11 +ddred049 reduce 9.9 -> 9.9 +ddred050 reduce 9.90 -> 9.9 +ddred051 reduce 9.900 -> 9.9 +ddred052 reduce 9.990 -> 9.99 +ddred053 reduce -9.9 -> -9.9 +ddred054 reduce -9.90 -> -9.9 +ddred055 reduce -9.900 -> -9.9 +ddred056 reduce -9.990 -> -9.99 + +-- some trailing fractional zeros with zeros in units +ddred060 reduce 10.0 -> 1E+1 +ddred061 reduce 10.00 -> 1E+1 +ddred062 reduce 100.0 -> 1E+2 +ddred063 reduce 100.00 -> 1E+2 +ddred064 reduce 1.1000E+3 -> 1.1E+3 +ddred065 reduce 1.10000E+3 -> 1.1E+3 +ddred066 reduce -10.0 -> -1E+1 +ddred067 reduce -10.00 -> -1E+1 +ddred068 reduce -100.0 -> -1E+2 +ddred069 reduce -100.00 -> -1E+2 +ddred070 reduce -1.1000E+3 -> -1.1E+3 +ddred071 reduce -1.10000E+3 -> -1.1E+3 + +-- some insignificant trailing zeros with positive exponent +ddred080 reduce 10E+1 -> 1E+2 +ddred081 reduce 100E+1 -> 1E+3 +ddred082 reduce 1.0E+2 -> 1E+2 +ddred083 reduce 1.0E+3 -> 1E+3 +ddred084 reduce 1.1E+3 -> 1.1E+3 +ddred085 reduce 1.00E+3 -> 1E+3 +ddred086 reduce 1.10E+3 -> 1.1E+3 +ddred087 reduce -10E+1 -> -1E+2 +ddred088 reduce -100E+1 -> -1E+3 +ddred089 reduce -1.0E+2 -> -1E+2 +ddred090 reduce -1.0E+3 -> -1E+3 +ddred091 reduce -1.1E+3 -> -1.1E+3 +ddred092 reduce -1.00E+3 -> -1E+3 +ddred093 reduce -1.10E+3 -> -1.1E+3 + +-- some significant trailing zeros, were we to be trimming +ddred100 reduce 11 -> 11 +ddred101 reduce 10 -> 1E+1 +ddred102 reduce 10. -> 1E+1 +ddred103 reduce 1.1E+1 -> 11 +ddred104 reduce 1.0E+1 -> 1E+1 +ddred105 reduce 1.10E+2 -> 1.1E+2 +ddred106 reduce 1.00E+2 -> 1E+2 +ddred107 reduce 1.100E+3 -> 1.1E+3 +ddred108 reduce 1.000E+3 -> 1E+3 +ddred109 reduce 1.000000E+6 -> 1E+6 +ddred110 reduce -11 -> -11 +ddred111 reduce -10 -> -1E+1 +ddred112 reduce -10. -> -1E+1 +ddred113 reduce -1.1E+1 -> -11 +ddred114 reduce -1.0E+1 -> -1E+1 +ddred115 reduce -1.10E+2 -> -1.1E+2 +ddred116 reduce -1.00E+2 -> -1E+2 +ddred117 reduce -1.100E+3 -> -1.1E+3 +ddred118 reduce -1.000E+3 -> -1E+3 +ddred119 reduce -1.00000E+5 -> -1E+5 +ddred120 reduce -1.000000E+6 -> -1E+6 +ddred121 reduce -10.00000E+6 -> -1E+7 +ddred122 reduce -100.0000E+6 -> -1E+8 +ddred123 reduce -1000.000E+6 -> -1E+9 +ddred124 reduce -10000.00E+6 -> -1E+10 +ddred125 reduce -100000.0E+6 -> -1E+11 +ddred126 reduce -1000000.E+6 -> -1E+12 + +-- examples from decArith +ddred140 reduce '2.1' -> '2.1' +ddred141 reduce '-2.0' -> '-2' +ddred142 reduce '1.200' -> '1.2' +ddred143 reduce '-120' -> '-1.2E+2' +ddred144 reduce '120.00' -> '1.2E+2' +ddred145 reduce '0.00' -> '0' + +-- Nmax, Nmin, Ntiny +-- note origami effect on some of these +ddred151 reduce 9.999999999999999E+384 -> 9.999999999999999E+384 +ddred152 reduce 9.999999000000000E+380 -> 9.99999900000E+380 +ddred153 reduce 9.999999999990000E+384 -> 9.999999999990000E+384 +ddred154 reduce 1E-383 -> 1E-383 +ddred155 reduce 1.000000000000000E-383 -> 1E-383 +ddred156 reduce 2.000E-395 -> 2E-395 Subnormal +ddred157 reduce 1E-398 -> 1E-398 Subnormal + +ddred161 reduce -1E-398 -> -1E-398 Subnormal +ddred162 reduce -2.000E-395 -> -2E-395 Subnormal +ddred163 reduce -1.000000000000000E-383 -> -1E-383 +ddred164 reduce -1E-383 -> -1E-383 +ddred165 reduce -9.999999000000000E+380 -> -9.99999900000E+380 +ddred166 reduce -9.999999999990000E+384 -> -9.999999999990000E+384 +ddred167 reduce -9.999999999999990E+384 -> -9.999999999999990E+384 +ddred168 reduce -9.999999999999999E+384 -> -9.999999999999999E+384 +ddred169 reduce -9.999999999999990E+384 -> -9.999999999999990E+384 + + +-- specials (reduce does not affect payload) +ddred820 reduce 'Inf' -> 'Infinity' +ddred821 reduce '-Inf' -> '-Infinity' +ddred822 reduce NaN -> NaN +ddred823 reduce sNaN -> NaN Invalid_operation +ddred824 reduce NaN101 -> NaN101 +ddred825 reduce sNaN010 -> NaN10 Invalid_operation +ddred827 reduce -NaN -> -NaN +ddred828 reduce -sNaN -> -NaN Invalid_operation +ddred829 reduce -NaN101 -> -NaN101 +ddred830 reduce -sNaN010 -> -NaN10 Invalid_operation + +-- Null test +ddred900 reduce # -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddRemainder.decTest b/Lib/test/decimaltestdata/ddRemainder.decTest index b1866d39a28..c16773761d0 100644 --- a/Lib/test/decimaltestdata/ddRemainder.decTest +++ b/Lib/test/decimaltestdata/ddRemainder.decTest @@ -1,600 +1,600 @@ ------------------------------------------------------------------------- --- ddRemainder.decTest -- decDouble remainder -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks (as base, above) -ddrem001 remainder 1 1 -> 0 -ddrem002 remainder 2 1 -> 0 -ddrem003 remainder 1 2 -> 1 -ddrem004 remainder 2 2 -> 0 -ddrem005 remainder 0 1 -> 0 -ddrem006 remainder 0 2 -> 0 -ddrem007 remainder 1 3 -> 1 -ddrem008 remainder 2 3 -> 2 -ddrem009 remainder 3 3 -> 0 - -ddrem010 remainder 2.4 1 -> 0.4 -ddrem011 remainder 2.4 -1 -> 0.4 -ddrem012 remainder -2.4 1 -> -0.4 -ddrem013 remainder -2.4 -1 -> -0.4 -ddrem014 remainder 2.40 1 -> 0.40 -ddrem015 remainder 2.400 1 -> 0.400 -ddrem016 remainder 2.4 2 -> 0.4 -ddrem017 remainder 2.400 2 -> 0.400 -ddrem018 remainder 2. 2 -> 0 -ddrem019 remainder 20 20 -> 0 - -ddrem020 remainder 187 187 -> 0 -ddrem021 remainder 5 2 -> 1 -ddrem022 remainder 5 2.0 -> 1.0 -ddrem023 remainder 5 2.000 -> 1.000 -ddrem024 remainder 5 0.200 -> 0.000 -ddrem025 remainder 5 0.200 -> 0.000 - -ddrem030 remainder 1 2 -> 1 -ddrem031 remainder 1 4 -> 1 -ddrem032 remainder 1 8 -> 1 - -ddrem033 remainder 1 16 -> 1 -ddrem034 remainder 1 32 -> 1 -ddrem035 remainder 1 64 -> 1 -ddrem040 remainder 1 -2 -> 1 -ddrem041 remainder 1 -4 -> 1 -ddrem042 remainder 1 -8 -> 1 -ddrem043 remainder 1 -16 -> 1 -ddrem044 remainder 1 -32 -> 1 -ddrem045 remainder 1 -64 -> 1 -ddrem050 remainder -1 2 -> -1 -ddrem051 remainder -1 4 -> -1 -ddrem052 remainder -1 8 -> -1 -ddrem053 remainder -1 16 -> -1 -ddrem054 remainder -1 32 -> -1 -ddrem055 remainder -1 64 -> -1 -ddrem060 remainder -1 -2 -> -1 -ddrem061 remainder -1 -4 -> -1 -ddrem062 remainder -1 -8 -> -1 -ddrem063 remainder -1 -16 -> -1 -ddrem064 remainder -1 -32 -> -1 -ddrem065 remainder -1 -64 -> -1 - -ddrem066 remainder 999999999 1 -> 0 -ddrem067 remainder 999999999.4 1 -> 0.4 -ddrem068 remainder 999999999.5 1 -> 0.5 -ddrem069 remainder 999999999.9 1 -> 0.9 -ddrem070 remainder 999999999.999 1 -> 0.999 -ddrem071 remainder 999999.999999 1 -> 0.999999 -ddrem072 remainder 9 1 -> 0 -ddrem073 remainder 9999999999999999 1 -> 0 -ddrem074 remainder 9999999999999999 2 -> 1 -ddrem075 remainder 9999999999999999 3 -> 0 -ddrem076 remainder 9999999999999999 4 -> 3 - -ddrem080 remainder 0. 1 -> 0 -ddrem081 remainder .0 1 -> 0.0 -ddrem082 remainder 0.00 1 -> 0.00 -ddrem083 remainder 0.00E+9 1 -> 0 -ddrem084 remainder 0.00E+3 1 -> 0 -ddrem085 remainder 0.00E+2 1 -> 0 -ddrem086 remainder 0.00E+1 1 -> 0.0 -ddrem087 remainder 0.00E+0 1 -> 0.00 -ddrem088 remainder 0.00E-0 1 -> 0.00 -ddrem089 remainder 0.00E-1 1 -> 0.000 -ddrem090 remainder 0.00E-2 1 -> 0.0000 -ddrem091 remainder 0.00E-3 1 -> 0.00000 -ddrem092 remainder 0.00E-4 1 -> 0.000000 -ddrem093 remainder 0.00E-5 1 -> 0E-7 -ddrem094 remainder 0.00E-6 1 -> 0E-8 -ddrem095 remainder 0.0000E-50 1 -> 0E-54 - --- Various flavours of remainder by 0 -ddrem101 remainder 0 0 -> NaN Division_undefined -ddrem102 remainder 0 -0 -> NaN Division_undefined -ddrem103 remainder -0 0 -> NaN Division_undefined -ddrem104 remainder -0 -0 -> NaN Division_undefined -ddrem105 remainder 0.0E5 0 -> NaN Division_undefined -ddrem106 remainder 0.000 0 -> NaN Division_undefined --- [Some think this next group should be Division_by_zero exception, but --- IEEE 854 is explicit that it is Invalid operation .. for --- remainder-near, anyway] -ddrem107 remainder 0.0001 0 -> NaN Invalid_operation -ddrem108 remainder 0.01 0 -> NaN Invalid_operation -ddrem109 remainder 0.1 0 -> NaN Invalid_operation -ddrem110 remainder 1 0 -> NaN Invalid_operation -ddrem111 remainder 1 0.0 -> NaN Invalid_operation -ddrem112 remainder 10 0.0 -> NaN Invalid_operation -ddrem113 remainder 1E+100 0.0 -> NaN Invalid_operation -ddrem114 remainder 1E+380 0 -> NaN Invalid_operation -ddrem115 remainder 0.0001 -0 -> NaN Invalid_operation -ddrem116 remainder 0.01 -0 -> NaN Invalid_operation -ddrem119 remainder 0.1 -0 -> NaN Invalid_operation -ddrem120 remainder 1 -0 -> NaN Invalid_operation -ddrem121 remainder 1 -0.0 -> NaN Invalid_operation -ddrem122 remainder 10 -0.0 -> NaN Invalid_operation -ddrem123 remainder 1E+100 -0.0 -> NaN Invalid_operation -ddrem124 remainder 1E+384 -0 -> NaN Invalid_operation --- and zeros on left -ddrem130 remainder 0 1 -> 0 -ddrem131 remainder 0 -1 -> 0 -ddrem132 remainder 0.0 1 -> 0.0 -ddrem133 remainder 0.0 -1 -> 0.0 -ddrem134 remainder -0 1 -> -0 -ddrem135 remainder -0 -1 -> -0 -ddrem136 remainder -0.0 1 -> -0.0 -ddrem137 remainder -0.0 -1 -> -0.0 - --- 0.5ers -ddrem143 remainder 0.5 2 -> 0.5 -ddrem144 remainder 0.5 2.1 -> 0.5 -ddrem145 remainder 0.5 2.01 -> 0.50 -ddrem146 remainder 0.5 2.001 -> 0.500 -ddrem147 remainder 0.50 2 -> 0.50 -ddrem148 remainder 0.50 2.01 -> 0.50 -ddrem149 remainder 0.50 2.001 -> 0.500 - --- steadies -ddrem150 remainder 1 1 -> 0 -ddrem151 remainder 1 2 -> 1 -ddrem152 remainder 1 3 -> 1 -ddrem153 remainder 1 4 -> 1 -ddrem154 remainder 1 5 -> 1 -ddrem155 remainder 1 6 -> 1 -ddrem156 remainder 1 7 -> 1 -ddrem157 remainder 1 8 -> 1 -ddrem158 remainder 1 9 -> 1 -ddrem159 remainder 1 10 -> 1 -ddrem160 remainder 1 1 -> 0 -ddrem161 remainder 2 1 -> 0 -ddrem162 remainder 3 1 -> 0 -ddrem163 remainder 4 1 -> 0 -ddrem164 remainder 5 1 -> 0 -ddrem165 remainder 6 1 -> 0 -ddrem166 remainder 7 1 -> 0 -ddrem167 remainder 8 1 -> 0 -ddrem168 remainder 9 1 -> 0 -ddrem169 remainder 10 1 -> 0 - --- some differences from remainderNear -ddrem171 remainder 0.4 1.020 -> 0.400 -ddrem172 remainder 0.50 1.020 -> 0.500 -ddrem173 remainder 0.51 1.020 -> 0.510 -ddrem174 remainder 0.52 1.020 -> 0.520 -ddrem175 remainder 0.6 1.020 -> 0.600 - --- More flavours of remainder by 0 -ddrem201 remainder 0 0 -> NaN Division_undefined -ddrem202 remainder 0.0E5 0 -> NaN Division_undefined -ddrem203 remainder 0.000 0 -> NaN Division_undefined -ddrem204 remainder 0.0001 0 -> NaN Invalid_operation -ddrem205 remainder 0.01 0 -> NaN Invalid_operation -ddrem206 remainder 0.1 0 -> NaN Invalid_operation -ddrem207 remainder 1 0 -> NaN Invalid_operation -ddrem208 remainder 1 0.0 -> NaN Invalid_operation -ddrem209 remainder 10 0.0 -> NaN Invalid_operation -ddrem210 remainder 1E+100 0.0 -> NaN Invalid_operation -ddrem211 remainder 1E+380 0 -> NaN Invalid_operation - --- some differences from remainderNear -ddrem231 remainder -0.4 1.020 -> -0.400 -ddrem232 remainder -0.50 1.020 -> -0.500 -ddrem233 remainder -0.51 1.020 -> -0.510 -ddrem234 remainder -0.52 1.020 -> -0.520 -ddrem235 remainder -0.6 1.020 -> -0.600 - --- high Xs -ddrem240 remainder 1E+2 1.00 -> 0.00 - --- ddrem3xx are from DiagBigDecimal -ddrem301 remainder 1 3 -> 1 -ddrem302 remainder 5 5 -> 0 -ddrem303 remainder 13 10 -> 3 -ddrem304 remainder 13 50 -> 13 -ddrem305 remainder 13 100 -> 13 -ddrem306 remainder 13 1000 -> 13 -ddrem307 remainder .13 1 -> 0.13 -ddrem308 remainder 0.133 1 -> 0.133 -ddrem309 remainder 0.1033 1 -> 0.1033 -ddrem310 remainder 1.033 1 -> 0.033 -ddrem311 remainder 10.33 1 -> 0.33 -ddrem312 remainder 10.33 10 -> 0.33 -ddrem313 remainder 103.3 1 -> 0.3 -ddrem314 remainder 133 10 -> 3 -ddrem315 remainder 1033 10 -> 3 -ddrem316 remainder 1033 50 -> 33 -ddrem317 remainder 101.0 3 -> 2.0 -ddrem318 remainder 102.0 3 -> 0.0 -ddrem319 remainder 103.0 3 -> 1.0 -ddrem320 remainder 2.40 1 -> 0.40 -ddrem321 remainder 2.400 1 -> 0.400 -ddrem322 remainder 2.4 1 -> 0.4 -ddrem323 remainder 2.4 2 -> 0.4 -ddrem324 remainder 2.400 2 -> 0.400 -ddrem325 remainder 1 0.3 -> 0.1 -ddrem326 remainder 1 0.30 -> 0.10 -ddrem327 remainder 1 0.300 -> 0.100 -ddrem328 remainder 1 0.3000 -> 0.1000 -ddrem329 remainder 1.0 0.3 -> 0.1 -ddrem330 remainder 1.00 0.3 -> 0.10 -ddrem331 remainder 1.000 0.3 -> 0.100 -ddrem332 remainder 1.0000 0.3 -> 0.1000 -ddrem333 remainder 0.5 2 -> 0.5 -ddrem334 remainder 0.5 2.1 -> 0.5 -ddrem335 remainder 0.5 2.01 -> 0.50 -ddrem336 remainder 0.5 2.001 -> 0.500 -ddrem337 remainder 0.50 2 -> 0.50 -ddrem338 remainder 0.50 2.01 -> 0.50 -ddrem339 remainder 0.50 2.001 -> 0.500 - -ddrem340 remainder 0.5 0.5000001 -> 0.5000000 -ddrem341 remainder 0.5 0.50000001 -> 0.50000000 -ddrem342 remainder 0.5 0.500000001 -> 0.500000000 -ddrem343 remainder 0.5 0.5000000001 -> 0.5000000000 -ddrem344 remainder 0.5 0.50000000001 -> 0.50000000000 -ddrem345 remainder 0.5 0.4999999 -> 1E-7 -ddrem346 remainder 0.5 0.49999999 -> 1E-8 -ddrem347 remainder 0.5 0.499999999 -> 1E-9 -ddrem348 remainder 0.5 0.4999999999 -> 1E-10 -ddrem349 remainder 0.5 0.49999999999 -> 1E-11 -ddrem350 remainder 0.5 0.499999999999 -> 1E-12 - -ddrem351 remainder 0.03 7 -> 0.03 -ddrem352 remainder 5 2 -> 1 -ddrem353 remainder 4.1 2 -> 0.1 -ddrem354 remainder 4.01 2 -> 0.01 -ddrem355 remainder 4.001 2 -> 0.001 -ddrem356 remainder 4.0001 2 -> 0.0001 -ddrem357 remainder 4.00001 2 -> 0.00001 -ddrem358 remainder 4.000001 2 -> 0.000001 -ddrem359 remainder 4.0000001 2 -> 1E-7 - -ddrem360 remainder 1.2 0.7345 -> 0.4655 -ddrem361 remainder 0.8 12 -> 0.8 -ddrem362 remainder 0.8 0.2 -> 0.0 -ddrem363 remainder 0.8 0.3 -> 0.2 -ddrem364 remainder 0.800 12 -> 0.800 -ddrem365 remainder 0.800 1.7 -> 0.800 -ddrem366 remainder 2.400 2 -> 0.400 - -ddrem371 remainder 2.400 2 -> 0.400 - -ddrem381 remainder 12345 1 -> 0 -ddrem382 remainder 12345 1.0001 -> 0.7657 -ddrem383 remainder 12345 1.001 -> 0.668 -ddrem384 remainder 12345 1.01 -> 0.78 -ddrem385 remainder 12345 1.1 -> 0.8 -ddrem386 remainder 12355 4 -> 3 -ddrem387 remainder 12345 4 -> 1 -ddrem388 remainder 12355 4.0001 -> 2.6912 -ddrem389 remainder 12345 4.0001 -> 0.6914 -ddrem390 remainder 12345 4.9 -> 1.9 -ddrem391 remainder 12345 4.99 -> 4.73 -ddrem392 remainder 12345 4.999 -> 2.469 -ddrem393 remainder 12345 4.9999 -> 0.2469 -ddrem394 remainder 12345 5 -> 0 -ddrem395 remainder 12345 5.0001 -> 4.7532 -ddrem396 remainder 12345 5.001 -> 2.532 -ddrem397 remainder 12345 5.01 -> 0.36 -ddrem398 remainder 12345 5.1 -> 3.0 - --- the nasty division-by-1 cases -ddrem401 remainder 0.5 1 -> 0.5 -ddrem402 remainder 0.55 1 -> 0.55 -ddrem403 remainder 0.555 1 -> 0.555 -ddrem404 remainder 0.5555 1 -> 0.5555 -ddrem405 remainder 0.55555 1 -> 0.55555 -ddrem406 remainder 0.555555 1 -> 0.555555 -ddrem407 remainder 0.5555555 1 -> 0.5555555 -ddrem408 remainder 0.55555555 1 -> 0.55555555 -ddrem409 remainder 0.555555555 1 -> 0.555555555 - --- folddowns -ddrem421 remainder 1E+384 1 -> NaN Division_impossible -ddrem422 remainder 1E+384 1E+383 -> 0E+369 Clamped -ddrem423 remainder 1E+384 2E+383 -> 0E+369 Clamped -ddrem424 remainder 1E+384 3E+383 -> 1.00000000000000E+383 Clamped -ddrem425 remainder 1E+384 4E+383 -> 2.00000000000000E+383 Clamped -ddrem426 remainder 1E+384 5E+383 -> 0E+369 Clamped -ddrem427 remainder 1E+384 6E+383 -> 4.00000000000000E+383 Clamped -ddrem428 remainder 1E+384 7E+383 -> 3.00000000000000E+383 Clamped -ddrem429 remainder 1E+384 8E+383 -> 2.00000000000000E+383 Clamped -ddrem430 remainder 1E+384 9E+383 -> 1.00000000000000E+383 Clamped --- tinies -ddrem431 remainder 1E-397 1E-398 -> 0E-398 -ddrem432 remainder 1E-397 2E-398 -> 0E-398 -ddrem433 remainder 1E-397 3E-398 -> 1E-398 Subnormal -ddrem434 remainder 1E-397 4E-398 -> 2E-398 Subnormal -ddrem435 remainder 1E-397 5E-398 -> 0E-398 -ddrem436 remainder 1E-397 6E-398 -> 4E-398 Subnormal -ddrem437 remainder 1E-397 7E-398 -> 3E-398 Subnormal -ddrem438 remainder 1E-397 8E-398 -> 2E-398 Subnormal -ddrem439 remainder 1E-397 9E-398 -> 1E-398 Subnormal -ddrem440 remainder 1E-397 10E-398 -> 0E-398 -ddrem441 remainder 1E-397 11E-398 -> 1.0E-397 Subnormal -ddrem442 remainder 100E-397 11E-398 -> 1.0E-397 Subnormal -ddrem443 remainder 100E-397 20E-398 -> 0E-398 -ddrem444 remainder 100E-397 21E-398 -> 1.3E-397 Subnormal -ddrem445 remainder 100E-397 30E-398 -> 1.0E-397 Subnormal - --- zero signs -ddrem650 remainder 1 1 -> 0 -ddrem651 remainder -1 1 -> -0 -ddrem652 remainder 1 -1 -> 0 -ddrem653 remainder -1 -1 -> -0 -ddrem654 remainder 0 1 -> 0 -ddrem655 remainder -0 1 -> -0 -ddrem656 remainder 0 -1 -> 0 -ddrem657 remainder -0 -1 -> -0 -ddrem658 remainder 0.00 1 -> 0.00 -ddrem659 remainder -0.00 1 -> -0.00 - --- Specials -ddrem680 remainder Inf -Inf -> NaN Invalid_operation -ddrem681 remainder Inf -1000 -> NaN Invalid_operation -ddrem682 remainder Inf -1 -> NaN Invalid_operation -ddrem683 remainder Inf 0 -> NaN Invalid_operation -ddrem684 remainder Inf -0 -> NaN Invalid_operation -ddrem685 remainder Inf 1 -> NaN Invalid_operation -ddrem686 remainder Inf 1000 -> NaN Invalid_operation -ddrem687 remainder Inf Inf -> NaN Invalid_operation -ddrem688 remainder -1000 Inf -> -1000 -ddrem689 remainder -Inf Inf -> NaN Invalid_operation -ddrem691 remainder -1 Inf -> -1 -ddrem692 remainder 0 Inf -> 0 -ddrem693 remainder -0 Inf -> -0 -ddrem694 remainder 1 Inf -> 1 -ddrem695 remainder 1000 Inf -> 1000 -ddrem696 remainder Inf Inf -> NaN Invalid_operation - -ddrem700 remainder -Inf -Inf -> NaN Invalid_operation -ddrem701 remainder -Inf -1000 -> NaN Invalid_operation -ddrem702 remainder -Inf -1 -> NaN Invalid_operation -ddrem703 remainder -Inf -0 -> NaN Invalid_operation -ddrem704 remainder -Inf 0 -> NaN Invalid_operation -ddrem705 remainder -Inf 1 -> NaN Invalid_operation -ddrem706 remainder -Inf 1000 -> NaN Invalid_operation -ddrem707 remainder -Inf Inf -> NaN Invalid_operation -ddrem708 remainder -Inf -Inf -> NaN Invalid_operation -ddrem709 remainder -1000 Inf -> -1000 -ddrem710 remainder -1 -Inf -> -1 -ddrem711 remainder -0 -Inf -> -0 -ddrem712 remainder 0 -Inf -> 0 -ddrem713 remainder 1 -Inf -> 1 -ddrem714 remainder 1000 -Inf -> 1000 -ddrem715 remainder Inf -Inf -> NaN Invalid_operation - -ddrem721 remainder NaN -Inf -> NaN -ddrem722 remainder NaN -1000 -> NaN -ddrem723 remainder NaN -1 -> NaN -ddrem724 remainder NaN -0 -> NaN -ddrem725 remainder -NaN 0 -> -NaN -ddrem726 remainder NaN 1 -> NaN -ddrem727 remainder NaN 1000 -> NaN -ddrem728 remainder NaN Inf -> NaN -ddrem729 remainder NaN -NaN -> NaN -ddrem730 remainder -Inf NaN -> NaN -ddrem731 remainder -1000 NaN -> NaN -ddrem732 remainder -1 NaN -> NaN -ddrem733 remainder -0 -NaN -> -NaN -ddrem734 remainder 0 NaN -> NaN -ddrem735 remainder 1 -NaN -> -NaN -ddrem736 remainder 1000 NaN -> NaN -ddrem737 remainder Inf NaN -> NaN - -ddrem741 remainder sNaN -Inf -> NaN Invalid_operation -ddrem742 remainder sNaN -1000 -> NaN Invalid_operation -ddrem743 remainder -sNaN -1 -> -NaN Invalid_operation -ddrem744 remainder sNaN -0 -> NaN Invalid_operation -ddrem745 remainder sNaN 0 -> NaN Invalid_operation -ddrem746 remainder sNaN 1 -> NaN Invalid_operation -ddrem747 remainder sNaN 1000 -> NaN Invalid_operation -ddrem749 remainder sNaN NaN -> NaN Invalid_operation -ddrem750 remainder sNaN sNaN -> NaN Invalid_operation -ddrem751 remainder NaN sNaN -> NaN Invalid_operation -ddrem752 remainder -Inf sNaN -> NaN Invalid_operation -ddrem753 remainder -1000 sNaN -> NaN Invalid_operation -ddrem754 remainder -1 sNaN -> NaN Invalid_operation -ddrem755 remainder -0 sNaN -> NaN Invalid_operation -ddrem756 remainder 0 sNaN -> NaN Invalid_operation -ddrem757 remainder 1 sNaN -> NaN Invalid_operation -ddrem758 remainder 1000 sNaN -> NaN Invalid_operation -ddrem759 remainder Inf -sNaN -> -NaN Invalid_operation - --- propagating NaNs -ddrem760 remainder NaN1 NaN7 -> NaN1 -ddrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation -ddrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation -ddrem763 remainder sNaN4 sNaN10 -> NaN4 Invalid_operation -ddrem764 remainder 15 NaN11 -> NaN11 -ddrem765 remainder NaN6 NaN12 -> NaN6 -ddrem766 remainder Inf NaN13 -> NaN13 -ddrem767 remainder NaN14 -Inf -> NaN14 -ddrem768 remainder 0 NaN15 -> NaN15 -ddrem769 remainder NaN16 -0 -> NaN16 - --- edge cases of impossible -ddrem770 remainder 1234567890123456 10 -> 6 -ddrem771 remainder 1234567890123456 1 -> 0 -ddrem772 remainder 1234567890123456 0.1 -> NaN Division_impossible -ddrem773 remainder 1234567890123456 0.01 -> NaN Division_impossible - --- long operand checks -ddrem801 remainder 12345678000 100 -> 0 -ddrem802 remainder 1 12345678000 -> 1 -ddrem803 remainder 1234567800 10 -> 0 -ddrem804 remainder 1 1234567800 -> 1 -ddrem805 remainder 1234567890 10 -> 0 -ddrem806 remainder 1 1234567890 -> 1 -ddrem807 remainder 1234567891 10 -> 1 -ddrem808 remainder 1 1234567891 -> 1 -ddrem809 remainder 12345678901 100 -> 1 -ddrem810 remainder 1 12345678901 -> 1 -ddrem811 remainder 1234567896 10 -> 6 -ddrem812 remainder 1 1234567896 -> 1 - -ddrem821 remainder 12345678000 100 -> 0 -ddrem822 remainder 1 12345678000 -> 1 -ddrem823 remainder 1234567800 10 -> 0 -ddrem824 remainder 1 1234567800 -> 1 -ddrem825 remainder 1234567890 10 -> 0 -ddrem826 remainder 1 1234567890 -> 1 -ddrem827 remainder 1234567891 10 -> 1 -ddrem828 remainder 1 1234567891 -> 1 -ddrem829 remainder 12345678901 100 -> 1 -ddrem830 remainder 1 12345678901 -> 1 -ddrem831 remainder 1234567896 10 -> 6 -ddrem832 remainder 1 1234567896 -> 1 - --- from divideint -ddrem840 remainder 100000000.0 1 -> 0.0 -ddrem841 remainder 100000000.4 1 -> 0.4 -ddrem842 remainder 100000000.5 1 -> 0.5 -ddrem843 remainder 100000000.9 1 -> 0.9 -ddrem844 remainder 100000000.999 1 -> 0.999 -ddrem850 remainder 100000003 5 -> 3 -ddrem851 remainder 10000003 5 -> 3 -ddrem852 remainder 1000003 5 -> 3 -ddrem853 remainder 100003 5 -> 3 -ddrem854 remainder 10003 5 -> 3 -ddrem855 remainder 1003 5 -> 3 -ddrem856 remainder 103 5 -> 3 -ddrem857 remainder 13 5 -> 3 -ddrem858 remainder 1 5 -> 1 - --- Vladimir's cases 1234567890123456 -ddrem860 remainder 123.0e1 1000000000000000 -> 1230 -ddrem861 remainder 1230 1000000000000000 -> 1230 -ddrem862 remainder 12.3e2 1000000000000000 -> 1230 -ddrem863 remainder 1.23e3 1000000000000000 -> 1230 -ddrem864 remainder 123e1 1000000000000000 -> 1230 -ddrem870 remainder 123e1 1000000000000000 -> 1230 -ddrem871 remainder 123e1 100000000000000 -> 1230 -ddrem872 remainder 123e1 10000000000000 -> 1230 -ddrem873 remainder 123e1 1000000000000 -> 1230 -ddrem874 remainder 123e1 100000000000 -> 1230 -ddrem875 remainder 123e1 10000000000 -> 1230 -ddrem876 remainder 123e1 1000000000 -> 1230 -ddrem877 remainder 123e1 100000000 -> 1230 -ddrem878 remainder 1230 100000000 -> 1230 -ddrem879 remainder 123e1 10000000 -> 1230 -ddrem880 remainder 123e1 1000000 -> 1230 -ddrem881 remainder 123e1 100000 -> 1230 -ddrem882 remainder 123e1 10000 -> 1230 -ddrem883 remainder 123e1 1000 -> 230 -ddrem884 remainder 123e1 100 -> 30 -ddrem885 remainder 123e1 10 -> 0 -ddrem886 remainder 123e1 1 -> 0 - -ddrem890 remainder 123e1 2000000000000000 -> 1230 -ddrem891 remainder 123e1 200000000000000 -> 1230 -ddrem892 remainder 123e1 20000000000000 -> 1230 -ddrem893 remainder 123e1 2000000000000 -> 1230 -ddrem894 remainder 123e1 200000000000 -> 1230 -ddrem895 remainder 123e1 20000000000 -> 1230 -ddrem896 remainder 123e1 2000000000 -> 1230 -ddrem897 remainder 123e1 200000000 -> 1230 -ddrem899 remainder 123e1 20000000 -> 1230 -ddrem900 remainder 123e1 2000000 -> 1230 -ddrem901 remainder 123e1 200000 -> 1230 -ddrem902 remainder 123e1 20000 -> 1230 -ddrem903 remainder 123e1 2000 -> 1230 -ddrem904 remainder 123e1 200 -> 30 -ddrem905 remainder 123e1 20 -> 10 -ddrem906 remainder 123e1 2 -> 0 - -ddrem910 remainder 123e1 5000000000000000 -> 1230 -ddrem911 remainder 123e1 500000000000000 -> 1230 -ddrem912 remainder 123e1 50000000000000 -> 1230 -ddrem913 remainder 123e1 5000000000000 -> 1230 -ddrem914 remainder 123e1 500000000000 -> 1230 -ddrem915 remainder 123e1 50000000000 -> 1230 -ddrem916 remainder 123e1 5000000000 -> 1230 -ddrem917 remainder 123e1 500000000 -> 1230 -ddrem919 remainder 123e1 50000000 -> 1230 -ddrem920 remainder 123e1 5000000 -> 1230 -ddrem921 remainder 123e1 500000 -> 1230 -ddrem922 remainder 123e1 50000 -> 1230 -ddrem923 remainder 123e1 5000 -> 1230 -ddrem924 remainder 123e1 500 -> 230 -ddrem925 remainder 123e1 50 -> 30 -ddrem926 remainder 123e1 5 -> 0 - -ddrem930 remainder 123e1 9000000000000000 -> 1230 -ddrem931 remainder 123e1 900000000000000 -> 1230 -ddrem932 remainder 123e1 90000000000000 -> 1230 -ddrem933 remainder 123e1 9000000000000 -> 1230 -ddrem934 remainder 123e1 900000000000 -> 1230 -ddrem935 remainder 123e1 90000000000 -> 1230 -ddrem936 remainder 123e1 9000000000 -> 1230 -ddrem937 remainder 123e1 900000000 -> 1230 -ddrem939 remainder 123e1 90000000 -> 1230 -ddrem940 remainder 123e1 9000000 -> 1230 -ddrem941 remainder 123e1 900000 -> 1230 -ddrem942 remainder 123e1 90000 -> 1230 -ddrem943 remainder 123e1 9000 -> 1230 -ddrem944 remainder 123e1 900 -> 330 -ddrem945 remainder 123e1 90 -> 60 -ddrem946 remainder 123e1 9 -> 6 - -ddrem950 remainder 123e1 1000000000000000 -> 1230 -ddrem961 remainder 123e1 2999999999999999 -> 1230 -ddrem962 remainder 123e1 3999999999999999 -> 1230 -ddrem963 remainder 123e1 4999999999999999 -> 1230 -ddrem964 remainder 123e1 5999999999999999 -> 1230 -ddrem965 remainder 123e1 6999999999999999 -> 1230 -ddrem966 remainder 123e1 7999999999999999 -> 1230 -ddrem967 remainder 123e1 8999999999999999 -> 1230 -ddrem968 remainder 123e1 9999999999999999 -> 1230 -ddrem969 remainder 123e1 9876543210987654 -> 1230 - -ddrem980 remainder 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally - --- overflow and underflow tests [from divide] -ddrem1051 remainder 1e+277 1e-311 -> NaN Division_impossible -ddrem1052 remainder 1e+277 -1e-311 -> NaN Division_impossible -ddrem1053 remainder -1e+277 1e-311 -> NaN Division_impossible -ddrem1054 remainder -1e+277 -1e-311 -> NaN Division_impossible -ddrem1055 remainder 1e-277 1e+311 -> 1E-277 -ddrem1056 remainder 1e-277 -1e+311 -> 1E-277 -ddrem1057 remainder -1e-277 1e+311 -> -1E-277 -ddrem1058 remainder -1e-277 -1e+311 -> -1E-277 - --- destructive subtract -ddrem1101 remainder 1234567890123456 1.000000000000001 -> 0.765432109876546 -ddrem1102 remainder 1234567890123456 1.00000000000001 -> 0.65432109876557 -ddrem1103 remainder 1234567890123456 1.0000000000001 -> 0.5432109876668 -ddrem1104 remainder 1234567890123455 4.000000000000001 -> 2.691358027469137 -ddrem1105 remainder 1234567890123456 4.000000000000001 -> 3.691358027469137 -ddrem1106 remainder 1234567890123456 4.9999999999999 -> 0.6913578024696 -ddrem1107 remainder 1234567890123456 4.99999999999999 -> 3.46913578024691 -ddrem1108 remainder 1234567890123456 4.999999999999999 -> 1.246913578024691 -ddrem1109 remainder 1234567890123456 5.000000000000001 -> 0.753086421975309 -ddrem1110 remainder 1234567890123456 5.00000000000001 -> 3.53086421975310 -ddrem1111 remainder 1234567890123456 5.0000000000001 -> 1.3086421975314 - --- Null tests -ddrem1000 remainder 10 # -> NaN Invalid_operation -ddrem1001 remainder # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddRemainder.decTest -- decDouble remainder -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks (as base, above) +ddrem001 remainder 1 1 -> 0 +ddrem002 remainder 2 1 -> 0 +ddrem003 remainder 1 2 -> 1 +ddrem004 remainder 2 2 -> 0 +ddrem005 remainder 0 1 -> 0 +ddrem006 remainder 0 2 -> 0 +ddrem007 remainder 1 3 -> 1 +ddrem008 remainder 2 3 -> 2 +ddrem009 remainder 3 3 -> 0 + +ddrem010 remainder 2.4 1 -> 0.4 +ddrem011 remainder 2.4 -1 -> 0.4 +ddrem012 remainder -2.4 1 -> -0.4 +ddrem013 remainder -2.4 -1 -> -0.4 +ddrem014 remainder 2.40 1 -> 0.40 +ddrem015 remainder 2.400 1 -> 0.400 +ddrem016 remainder 2.4 2 -> 0.4 +ddrem017 remainder 2.400 2 -> 0.400 +ddrem018 remainder 2. 2 -> 0 +ddrem019 remainder 20 20 -> 0 + +ddrem020 remainder 187 187 -> 0 +ddrem021 remainder 5 2 -> 1 +ddrem022 remainder 5 2.0 -> 1.0 +ddrem023 remainder 5 2.000 -> 1.000 +ddrem024 remainder 5 0.200 -> 0.000 +ddrem025 remainder 5 0.200 -> 0.000 + +ddrem030 remainder 1 2 -> 1 +ddrem031 remainder 1 4 -> 1 +ddrem032 remainder 1 8 -> 1 + +ddrem033 remainder 1 16 -> 1 +ddrem034 remainder 1 32 -> 1 +ddrem035 remainder 1 64 -> 1 +ddrem040 remainder 1 -2 -> 1 +ddrem041 remainder 1 -4 -> 1 +ddrem042 remainder 1 -8 -> 1 +ddrem043 remainder 1 -16 -> 1 +ddrem044 remainder 1 -32 -> 1 +ddrem045 remainder 1 -64 -> 1 +ddrem050 remainder -1 2 -> -1 +ddrem051 remainder -1 4 -> -1 +ddrem052 remainder -1 8 -> -1 +ddrem053 remainder -1 16 -> -1 +ddrem054 remainder -1 32 -> -1 +ddrem055 remainder -1 64 -> -1 +ddrem060 remainder -1 -2 -> -1 +ddrem061 remainder -1 -4 -> -1 +ddrem062 remainder -1 -8 -> -1 +ddrem063 remainder -1 -16 -> -1 +ddrem064 remainder -1 -32 -> -1 +ddrem065 remainder -1 -64 -> -1 + +ddrem066 remainder 999999999 1 -> 0 +ddrem067 remainder 999999999.4 1 -> 0.4 +ddrem068 remainder 999999999.5 1 -> 0.5 +ddrem069 remainder 999999999.9 1 -> 0.9 +ddrem070 remainder 999999999.999 1 -> 0.999 +ddrem071 remainder 999999.999999 1 -> 0.999999 +ddrem072 remainder 9 1 -> 0 +ddrem073 remainder 9999999999999999 1 -> 0 +ddrem074 remainder 9999999999999999 2 -> 1 +ddrem075 remainder 9999999999999999 3 -> 0 +ddrem076 remainder 9999999999999999 4 -> 3 + +ddrem080 remainder 0. 1 -> 0 +ddrem081 remainder .0 1 -> 0.0 +ddrem082 remainder 0.00 1 -> 0.00 +ddrem083 remainder 0.00E+9 1 -> 0 +ddrem084 remainder 0.00E+3 1 -> 0 +ddrem085 remainder 0.00E+2 1 -> 0 +ddrem086 remainder 0.00E+1 1 -> 0.0 +ddrem087 remainder 0.00E+0 1 -> 0.00 +ddrem088 remainder 0.00E-0 1 -> 0.00 +ddrem089 remainder 0.00E-1 1 -> 0.000 +ddrem090 remainder 0.00E-2 1 -> 0.0000 +ddrem091 remainder 0.00E-3 1 -> 0.00000 +ddrem092 remainder 0.00E-4 1 -> 0.000000 +ddrem093 remainder 0.00E-5 1 -> 0E-7 +ddrem094 remainder 0.00E-6 1 -> 0E-8 +ddrem095 remainder 0.0000E-50 1 -> 0E-54 + +-- Various flavours of remainder by 0 +ddrem101 remainder 0 0 -> NaN Division_undefined +ddrem102 remainder 0 -0 -> NaN Division_undefined +ddrem103 remainder -0 0 -> NaN Division_undefined +ddrem104 remainder -0 -0 -> NaN Division_undefined +ddrem105 remainder 0.0E5 0 -> NaN Division_undefined +ddrem106 remainder 0.000 0 -> NaN Division_undefined +-- [Some think this next group should be Division_by_zero exception, but +-- IEEE 854 is explicit that it is Invalid operation .. for +-- remainder-near, anyway] +ddrem107 remainder 0.0001 0 -> NaN Invalid_operation +ddrem108 remainder 0.01 0 -> NaN Invalid_operation +ddrem109 remainder 0.1 0 -> NaN Invalid_operation +ddrem110 remainder 1 0 -> NaN Invalid_operation +ddrem111 remainder 1 0.0 -> NaN Invalid_operation +ddrem112 remainder 10 0.0 -> NaN Invalid_operation +ddrem113 remainder 1E+100 0.0 -> NaN Invalid_operation +ddrem114 remainder 1E+380 0 -> NaN Invalid_operation +ddrem115 remainder 0.0001 -0 -> NaN Invalid_operation +ddrem116 remainder 0.01 -0 -> NaN Invalid_operation +ddrem119 remainder 0.1 -0 -> NaN Invalid_operation +ddrem120 remainder 1 -0 -> NaN Invalid_operation +ddrem121 remainder 1 -0.0 -> NaN Invalid_operation +ddrem122 remainder 10 -0.0 -> NaN Invalid_operation +ddrem123 remainder 1E+100 -0.0 -> NaN Invalid_operation +ddrem124 remainder 1E+384 -0 -> NaN Invalid_operation +-- and zeros on left +ddrem130 remainder 0 1 -> 0 +ddrem131 remainder 0 -1 -> 0 +ddrem132 remainder 0.0 1 -> 0.0 +ddrem133 remainder 0.0 -1 -> 0.0 +ddrem134 remainder -0 1 -> -0 +ddrem135 remainder -0 -1 -> -0 +ddrem136 remainder -0.0 1 -> -0.0 +ddrem137 remainder -0.0 -1 -> -0.0 + +-- 0.5ers +ddrem143 remainder 0.5 2 -> 0.5 +ddrem144 remainder 0.5 2.1 -> 0.5 +ddrem145 remainder 0.5 2.01 -> 0.50 +ddrem146 remainder 0.5 2.001 -> 0.500 +ddrem147 remainder 0.50 2 -> 0.50 +ddrem148 remainder 0.50 2.01 -> 0.50 +ddrem149 remainder 0.50 2.001 -> 0.500 + +-- steadies +ddrem150 remainder 1 1 -> 0 +ddrem151 remainder 1 2 -> 1 +ddrem152 remainder 1 3 -> 1 +ddrem153 remainder 1 4 -> 1 +ddrem154 remainder 1 5 -> 1 +ddrem155 remainder 1 6 -> 1 +ddrem156 remainder 1 7 -> 1 +ddrem157 remainder 1 8 -> 1 +ddrem158 remainder 1 9 -> 1 +ddrem159 remainder 1 10 -> 1 +ddrem160 remainder 1 1 -> 0 +ddrem161 remainder 2 1 -> 0 +ddrem162 remainder 3 1 -> 0 +ddrem163 remainder 4 1 -> 0 +ddrem164 remainder 5 1 -> 0 +ddrem165 remainder 6 1 -> 0 +ddrem166 remainder 7 1 -> 0 +ddrem167 remainder 8 1 -> 0 +ddrem168 remainder 9 1 -> 0 +ddrem169 remainder 10 1 -> 0 + +-- some differences from remainderNear +ddrem171 remainder 0.4 1.020 -> 0.400 +ddrem172 remainder 0.50 1.020 -> 0.500 +ddrem173 remainder 0.51 1.020 -> 0.510 +ddrem174 remainder 0.52 1.020 -> 0.520 +ddrem175 remainder 0.6 1.020 -> 0.600 + +-- More flavours of remainder by 0 +ddrem201 remainder 0 0 -> NaN Division_undefined +ddrem202 remainder 0.0E5 0 -> NaN Division_undefined +ddrem203 remainder 0.000 0 -> NaN Division_undefined +ddrem204 remainder 0.0001 0 -> NaN Invalid_operation +ddrem205 remainder 0.01 0 -> NaN Invalid_operation +ddrem206 remainder 0.1 0 -> NaN Invalid_operation +ddrem207 remainder 1 0 -> NaN Invalid_operation +ddrem208 remainder 1 0.0 -> NaN Invalid_operation +ddrem209 remainder 10 0.0 -> NaN Invalid_operation +ddrem210 remainder 1E+100 0.0 -> NaN Invalid_operation +ddrem211 remainder 1E+380 0 -> NaN Invalid_operation + +-- some differences from remainderNear +ddrem231 remainder -0.4 1.020 -> -0.400 +ddrem232 remainder -0.50 1.020 -> -0.500 +ddrem233 remainder -0.51 1.020 -> -0.510 +ddrem234 remainder -0.52 1.020 -> -0.520 +ddrem235 remainder -0.6 1.020 -> -0.600 + +-- high Xs +ddrem240 remainder 1E+2 1.00 -> 0.00 + +-- ddrem3xx are from DiagBigDecimal +ddrem301 remainder 1 3 -> 1 +ddrem302 remainder 5 5 -> 0 +ddrem303 remainder 13 10 -> 3 +ddrem304 remainder 13 50 -> 13 +ddrem305 remainder 13 100 -> 13 +ddrem306 remainder 13 1000 -> 13 +ddrem307 remainder .13 1 -> 0.13 +ddrem308 remainder 0.133 1 -> 0.133 +ddrem309 remainder 0.1033 1 -> 0.1033 +ddrem310 remainder 1.033 1 -> 0.033 +ddrem311 remainder 10.33 1 -> 0.33 +ddrem312 remainder 10.33 10 -> 0.33 +ddrem313 remainder 103.3 1 -> 0.3 +ddrem314 remainder 133 10 -> 3 +ddrem315 remainder 1033 10 -> 3 +ddrem316 remainder 1033 50 -> 33 +ddrem317 remainder 101.0 3 -> 2.0 +ddrem318 remainder 102.0 3 -> 0.0 +ddrem319 remainder 103.0 3 -> 1.0 +ddrem320 remainder 2.40 1 -> 0.40 +ddrem321 remainder 2.400 1 -> 0.400 +ddrem322 remainder 2.4 1 -> 0.4 +ddrem323 remainder 2.4 2 -> 0.4 +ddrem324 remainder 2.400 2 -> 0.400 +ddrem325 remainder 1 0.3 -> 0.1 +ddrem326 remainder 1 0.30 -> 0.10 +ddrem327 remainder 1 0.300 -> 0.100 +ddrem328 remainder 1 0.3000 -> 0.1000 +ddrem329 remainder 1.0 0.3 -> 0.1 +ddrem330 remainder 1.00 0.3 -> 0.10 +ddrem331 remainder 1.000 0.3 -> 0.100 +ddrem332 remainder 1.0000 0.3 -> 0.1000 +ddrem333 remainder 0.5 2 -> 0.5 +ddrem334 remainder 0.5 2.1 -> 0.5 +ddrem335 remainder 0.5 2.01 -> 0.50 +ddrem336 remainder 0.5 2.001 -> 0.500 +ddrem337 remainder 0.50 2 -> 0.50 +ddrem338 remainder 0.50 2.01 -> 0.50 +ddrem339 remainder 0.50 2.001 -> 0.500 + +ddrem340 remainder 0.5 0.5000001 -> 0.5000000 +ddrem341 remainder 0.5 0.50000001 -> 0.50000000 +ddrem342 remainder 0.5 0.500000001 -> 0.500000000 +ddrem343 remainder 0.5 0.5000000001 -> 0.5000000000 +ddrem344 remainder 0.5 0.50000000001 -> 0.50000000000 +ddrem345 remainder 0.5 0.4999999 -> 1E-7 +ddrem346 remainder 0.5 0.49999999 -> 1E-8 +ddrem347 remainder 0.5 0.499999999 -> 1E-9 +ddrem348 remainder 0.5 0.4999999999 -> 1E-10 +ddrem349 remainder 0.5 0.49999999999 -> 1E-11 +ddrem350 remainder 0.5 0.499999999999 -> 1E-12 + +ddrem351 remainder 0.03 7 -> 0.03 +ddrem352 remainder 5 2 -> 1 +ddrem353 remainder 4.1 2 -> 0.1 +ddrem354 remainder 4.01 2 -> 0.01 +ddrem355 remainder 4.001 2 -> 0.001 +ddrem356 remainder 4.0001 2 -> 0.0001 +ddrem357 remainder 4.00001 2 -> 0.00001 +ddrem358 remainder 4.000001 2 -> 0.000001 +ddrem359 remainder 4.0000001 2 -> 1E-7 + +ddrem360 remainder 1.2 0.7345 -> 0.4655 +ddrem361 remainder 0.8 12 -> 0.8 +ddrem362 remainder 0.8 0.2 -> 0.0 +ddrem363 remainder 0.8 0.3 -> 0.2 +ddrem364 remainder 0.800 12 -> 0.800 +ddrem365 remainder 0.800 1.7 -> 0.800 +ddrem366 remainder 2.400 2 -> 0.400 + +ddrem371 remainder 2.400 2 -> 0.400 + +ddrem381 remainder 12345 1 -> 0 +ddrem382 remainder 12345 1.0001 -> 0.7657 +ddrem383 remainder 12345 1.001 -> 0.668 +ddrem384 remainder 12345 1.01 -> 0.78 +ddrem385 remainder 12345 1.1 -> 0.8 +ddrem386 remainder 12355 4 -> 3 +ddrem387 remainder 12345 4 -> 1 +ddrem388 remainder 12355 4.0001 -> 2.6912 +ddrem389 remainder 12345 4.0001 -> 0.6914 +ddrem390 remainder 12345 4.9 -> 1.9 +ddrem391 remainder 12345 4.99 -> 4.73 +ddrem392 remainder 12345 4.999 -> 2.469 +ddrem393 remainder 12345 4.9999 -> 0.2469 +ddrem394 remainder 12345 5 -> 0 +ddrem395 remainder 12345 5.0001 -> 4.7532 +ddrem396 remainder 12345 5.001 -> 2.532 +ddrem397 remainder 12345 5.01 -> 0.36 +ddrem398 remainder 12345 5.1 -> 3.0 + +-- the nasty division-by-1 cases +ddrem401 remainder 0.5 1 -> 0.5 +ddrem402 remainder 0.55 1 -> 0.55 +ddrem403 remainder 0.555 1 -> 0.555 +ddrem404 remainder 0.5555 1 -> 0.5555 +ddrem405 remainder 0.55555 1 -> 0.55555 +ddrem406 remainder 0.555555 1 -> 0.555555 +ddrem407 remainder 0.5555555 1 -> 0.5555555 +ddrem408 remainder 0.55555555 1 -> 0.55555555 +ddrem409 remainder 0.555555555 1 -> 0.555555555 + +-- folddowns +ddrem421 remainder 1E+384 1 -> NaN Division_impossible +ddrem422 remainder 1E+384 1E+383 -> 0E+369 Clamped +ddrem423 remainder 1E+384 2E+383 -> 0E+369 Clamped +ddrem424 remainder 1E+384 3E+383 -> 1.00000000000000E+383 Clamped +ddrem425 remainder 1E+384 4E+383 -> 2.00000000000000E+383 Clamped +ddrem426 remainder 1E+384 5E+383 -> 0E+369 Clamped +ddrem427 remainder 1E+384 6E+383 -> 4.00000000000000E+383 Clamped +ddrem428 remainder 1E+384 7E+383 -> 3.00000000000000E+383 Clamped +ddrem429 remainder 1E+384 8E+383 -> 2.00000000000000E+383 Clamped +ddrem430 remainder 1E+384 9E+383 -> 1.00000000000000E+383 Clamped +-- tinies +ddrem431 remainder 1E-397 1E-398 -> 0E-398 +ddrem432 remainder 1E-397 2E-398 -> 0E-398 +ddrem433 remainder 1E-397 3E-398 -> 1E-398 Subnormal +ddrem434 remainder 1E-397 4E-398 -> 2E-398 Subnormal +ddrem435 remainder 1E-397 5E-398 -> 0E-398 +ddrem436 remainder 1E-397 6E-398 -> 4E-398 Subnormal +ddrem437 remainder 1E-397 7E-398 -> 3E-398 Subnormal +ddrem438 remainder 1E-397 8E-398 -> 2E-398 Subnormal +ddrem439 remainder 1E-397 9E-398 -> 1E-398 Subnormal +ddrem440 remainder 1E-397 10E-398 -> 0E-398 +ddrem441 remainder 1E-397 11E-398 -> 1.0E-397 Subnormal +ddrem442 remainder 100E-397 11E-398 -> 1.0E-397 Subnormal +ddrem443 remainder 100E-397 20E-398 -> 0E-398 +ddrem444 remainder 100E-397 21E-398 -> 1.3E-397 Subnormal +ddrem445 remainder 100E-397 30E-398 -> 1.0E-397 Subnormal + +-- zero signs +ddrem650 remainder 1 1 -> 0 +ddrem651 remainder -1 1 -> -0 +ddrem652 remainder 1 -1 -> 0 +ddrem653 remainder -1 -1 -> -0 +ddrem654 remainder 0 1 -> 0 +ddrem655 remainder -0 1 -> -0 +ddrem656 remainder 0 -1 -> 0 +ddrem657 remainder -0 -1 -> -0 +ddrem658 remainder 0.00 1 -> 0.00 +ddrem659 remainder -0.00 1 -> -0.00 + +-- Specials +ddrem680 remainder Inf -Inf -> NaN Invalid_operation +ddrem681 remainder Inf -1000 -> NaN Invalid_operation +ddrem682 remainder Inf -1 -> NaN Invalid_operation +ddrem683 remainder Inf 0 -> NaN Invalid_operation +ddrem684 remainder Inf -0 -> NaN Invalid_operation +ddrem685 remainder Inf 1 -> NaN Invalid_operation +ddrem686 remainder Inf 1000 -> NaN Invalid_operation +ddrem687 remainder Inf Inf -> NaN Invalid_operation +ddrem688 remainder -1000 Inf -> -1000 +ddrem689 remainder -Inf Inf -> NaN Invalid_operation +ddrem691 remainder -1 Inf -> -1 +ddrem692 remainder 0 Inf -> 0 +ddrem693 remainder -0 Inf -> -0 +ddrem694 remainder 1 Inf -> 1 +ddrem695 remainder 1000 Inf -> 1000 +ddrem696 remainder Inf Inf -> NaN Invalid_operation + +ddrem700 remainder -Inf -Inf -> NaN Invalid_operation +ddrem701 remainder -Inf -1000 -> NaN Invalid_operation +ddrem702 remainder -Inf -1 -> NaN Invalid_operation +ddrem703 remainder -Inf -0 -> NaN Invalid_operation +ddrem704 remainder -Inf 0 -> NaN Invalid_operation +ddrem705 remainder -Inf 1 -> NaN Invalid_operation +ddrem706 remainder -Inf 1000 -> NaN Invalid_operation +ddrem707 remainder -Inf Inf -> NaN Invalid_operation +ddrem708 remainder -Inf -Inf -> NaN Invalid_operation +ddrem709 remainder -1000 Inf -> -1000 +ddrem710 remainder -1 -Inf -> -1 +ddrem711 remainder -0 -Inf -> -0 +ddrem712 remainder 0 -Inf -> 0 +ddrem713 remainder 1 -Inf -> 1 +ddrem714 remainder 1000 -Inf -> 1000 +ddrem715 remainder Inf -Inf -> NaN Invalid_operation + +ddrem721 remainder NaN -Inf -> NaN +ddrem722 remainder NaN -1000 -> NaN +ddrem723 remainder NaN -1 -> NaN +ddrem724 remainder NaN -0 -> NaN +ddrem725 remainder -NaN 0 -> -NaN +ddrem726 remainder NaN 1 -> NaN +ddrem727 remainder NaN 1000 -> NaN +ddrem728 remainder NaN Inf -> NaN +ddrem729 remainder NaN -NaN -> NaN +ddrem730 remainder -Inf NaN -> NaN +ddrem731 remainder -1000 NaN -> NaN +ddrem732 remainder -1 NaN -> NaN +ddrem733 remainder -0 -NaN -> -NaN +ddrem734 remainder 0 NaN -> NaN +ddrem735 remainder 1 -NaN -> -NaN +ddrem736 remainder 1000 NaN -> NaN +ddrem737 remainder Inf NaN -> NaN + +ddrem741 remainder sNaN -Inf -> NaN Invalid_operation +ddrem742 remainder sNaN -1000 -> NaN Invalid_operation +ddrem743 remainder -sNaN -1 -> -NaN Invalid_operation +ddrem744 remainder sNaN -0 -> NaN Invalid_operation +ddrem745 remainder sNaN 0 -> NaN Invalid_operation +ddrem746 remainder sNaN 1 -> NaN Invalid_operation +ddrem747 remainder sNaN 1000 -> NaN Invalid_operation +ddrem749 remainder sNaN NaN -> NaN Invalid_operation +ddrem750 remainder sNaN sNaN -> NaN Invalid_operation +ddrem751 remainder NaN sNaN -> NaN Invalid_operation +ddrem752 remainder -Inf sNaN -> NaN Invalid_operation +ddrem753 remainder -1000 sNaN -> NaN Invalid_operation +ddrem754 remainder -1 sNaN -> NaN Invalid_operation +ddrem755 remainder -0 sNaN -> NaN Invalid_operation +ddrem756 remainder 0 sNaN -> NaN Invalid_operation +ddrem757 remainder 1 sNaN -> NaN Invalid_operation +ddrem758 remainder 1000 sNaN -> NaN Invalid_operation +ddrem759 remainder Inf -sNaN -> -NaN Invalid_operation + +-- propagating NaNs +ddrem760 remainder NaN1 NaN7 -> NaN1 +ddrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation +ddrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation +ddrem763 remainder sNaN4 sNaN10 -> NaN4 Invalid_operation +ddrem764 remainder 15 NaN11 -> NaN11 +ddrem765 remainder NaN6 NaN12 -> NaN6 +ddrem766 remainder Inf NaN13 -> NaN13 +ddrem767 remainder NaN14 -Inf -> NaN14 +ddrem768 remainder 0 NaN15 -> NaN15 +ddrem769 remainder NaN16 -0 -> NaN16 + +-- edge cases of impossible +ddrem770 remainder 1234567890123456 10 -> 6 +ddrem771 remainder 1234567890123456 1 -> 0 +ddrem772 remainder 1234567890123456 0.1 -> NaN Division_impossible +ddrem773 remainder 1234567890123456 0.01 -> NaN Division_impossible + +-- long operand checks +ddrem801 remainder 12345678000 100 -> 0 +ddrem802 remainder 1 12345678000 -> 1 +ddrem803 remainder 1234567800 10 -> 0 +ddrem804 remainder 1 1234567800 -> 1 +ddrem805 remainder 1234567890 10 -> 0 +ddrem806 remainder 1 1234567890 -> 1 +ddrem807 remainder 1234567891 10 -> 1 +ddrem808 remainder 1 1234567891 -> 1 +ddrem809 remainder 12345678901 100 -> 1 +ddrem810 remainder 1 12345678901 -> 1 +ddrem811 remainder 1234567896 10 -> 6 +ddrem812 remainder 1 1234567896 -> 1 + +ddrem821 remainder 12345678000 100 -> 0 +ddrem822 remainder 1 12345678000 -> 1 +ddrem823 remainder 1234567800 10 -> 0 +ddrem824 remainder 1 1234567800 -> 1 +ddrem825 remainder 1234567890 10 -> 0 +ddrem826 remainder 1 1234567890 -> 1 +ddrem827 remainder 1234567891 10 -> 1 +ddrem828 remainder 1 1234567891 -> 1 +ddrem829 remainder 12345678901 100 -> 1 +ddrem830 remainder 1 12345678901 -> 1 +ddrem831 remainder 1234567896 10 -> 6 +ddrem832 remainder 1 1234567896 -> 1 + +-- from divideint +ddrem840 remainder 100000000.0 1 -> 0.0 +ddrem841 remainder 100000000.4 1 -> 0.4 +ddrem842 remainder 100000000.5 1 -> 0.5 +ddrem843 remainder 100000000.9 1 -> 0.9 +ddrem844 remainder 100000000.999 1 -> 0.999 +ddrem850 remainder 100000003 5 -> 3 +ddrem851 remainder 10000003 5 -> 3 +ddrem852 remainder 1000003 5 -> 3 +ddrem853 remainder 100003 5 -> 3 +ddrem854 remainder 10003 5 -> 3 +ddrem855 remainder 1003 5 -> 3 +ddrem856 remainder 103 5 -> 3 +ddrem857 remainder 13 5 -> 3 +ddrem858 remainder 1 5 -> 1 + +-- Vladimir's cases 1234567890123456 +ddrem860 remainder 123.0e1 1000000000000000 -> 1230 +ddrem861 remainder 1230 1000000000000000 -> 1230 +ddrem862 remainder 12.3e2 1000000000000000 -> 1230 +ddrem863 remainder 1.23e3 1000000000000000 -> 1230 +ddrem864 remainder 123e1 1000000000000000 -> 1230 +ddrem870 remainder 123e1 1000000000000000 -> 1230 +ddrem871 remainder 123e1 100000000000000 -> 1230 +ddrem872 remainder 123e1 10000000000000 -> 1230 +ddrem873 remainder 123e1 1000000000000 -> 1230 +ddrem874 remainder 123e1 100000000000 -> 1230 +ddrem875 remainder 123e1 10000000000 -> 1230 +ddrem876 remainder 123e1 1000000000 -> 1230 +ddrem877 remainder 123e1 100000000 -> 1230 +ddrem878 remainder 1230 100000000 -> 1230 +ddrem879 remainder 123e1 10000000 -> 1230 +ddrem880 remainder 123e1 1000000 -> 1230 +ddrem881 remainder 123e1 100000 -> 1230 +ddrem882 remainder 123e1 10000 -> 1230 +ddrem883 remainder 123e1 1000 -> 230 +ddrem884 remainder 123e1 100 -> 30 +ddrem885 remainder 123e1 10 -> 0 +ddrem886 remainder 123e1 1 -> 0 + +ddrem890 remainder 123e1 2000000000000000 -> 1230 +ddrem891 remainder 123e1 200000000000000 -> 1230 +ddrem892 remainder 123e1 20000000000000 -> 1230 +ddrem893 remainder 123e1 2000000000000 -> 1230 +ddrem894 remainder 123e1 200000000000 -> 1230 +ddrem895 remainder 123e1 20000000000 -> 1230 +ddrem896 remainder 123e1 2000000000 -> 1230 +ddrem897 remainder 123e1 200000000 -> 1230 +ddrem899 remainder 123e1 20000000 -> 1230 +ddrem900 remainder 123e1 2000000 -> 1230 +ddrem901 remainder 123e1 200000 -> 1230 +ddrem902 remainder 123e1 20000 -> 1230 +ddrem903 remainder 123e1 2000 -> 1230 +ddrem904 remainder 123e1 200 -> 30 +ddrem905 remainder 123e1 20 -> 10 +ddrem906 remainder 123e1 2 -> 0 + +ddrem910 remainder 123e1 5000000000000000 -> 1230 +ddrem911 remainder 123e1 500000000000000 -> 1230 +ddrem912 remainder 123e1 50000000000000 -> 1230 +ddrem913 remainder 123e1 5000000000000 -> 1230 +ddrem914 remainder 123e1 500000000000 -> 1230 +ddrem915 remainder 123e1 50000000000 -> 1230 +ddrem916 remainder 123e1 5000000000 -> 1230 +ddrem917 remainder 123e1 500000000 -> 1230 +ddrem919 remainder 123e1 50000000 -> 1230 +ddrem920 remainder 123e1 5000000 -> 1230 +ddrem921 remainder 123e1 500000 -> 1230 +ddrem922 remainder 123e1 50000 -> 1230 +ddrem923 remainder 123e1 5000 -> 1230 +ddrem924 remainder 123e1 500 -> 230 +ddrem925 remainder 123e1 50 -> 30 +ddrem926 remainder 123e1 5 -> 0 + +ddrem930 remainder 123e1 9000000000000000 -> 1230 +ddrem931 remainder 123e1 900000000000000 -> 1230 +ddrem932 remainder 123e1 90000000000000 -> 1230 +ddrem933 remainder 123e1 9000000000000 -> 1230 +ddrem934 remainder 123e1 900000000000 -> 1230 +ddrem935 remainder 123e1 90000000000 -> 1230 +ddrem936 remainder 123e1 9000000000 -> 1230 +ddrem937 remainder 123e1 900000000 -> 1230 +ddrem939 remainder 123e1 90000000 -> 1230 +ddrem940 remainder 123e1 9000000 -> 1230 +ddrem941 remainder 123e1 900000 -> 1230 +ddrem942 remainder 123e1 90000 -> 1230 +ddrem943 remainder 123e1 9000 -> 1230 +ddrem944 remainder 123e1 900 -> 330 +ddrem945 remainder 123e1 90 -> 60 +ddrem946 remainder 123e1 9 -> 6 + +ddrem950 remainder 123e1 1000000000000000 -> 1230 +ddrem961 remainder 123e1 2999999999999999 -> 1230 +ddrem962 remainder 123e1 3999999999999999 -> 1230 +ddrem963 remainder 123e1 4999999999999999 -> 1230 +ddrem964 remainder 123e1 5999999999999999 -> 1230 +ddrem965 remainder 123e1 6999999999999999 -> 1230 +ddrem966 remainder 123e1 7999999999999999 -> 1230 +ddrem967 remainder 123e1 8999999999999999 -> 1230 +ddrem968 remainder 123e1 9999999999999999 -> 1230 +ddrem969 remainder 123e1 9876543210987654 -> 1230 + +ddrem980 remainder 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally + +-- overflow and underflow tests [from divide] +ddrem1051 remainder 1e+277 1e-311 -> NaN Division_impossible +ddrem1052 remainder 1e+277 -1e-311 -> NaN Division_impossible +ddrem1053 remainder -1e+277 1e-311 -> NaN Division_impossible +ddrem1054 remainder -1e+277 -1e-311 -> NaN Division_impossible +ddrem1055 remainder 1e-277 1e+311 -> 1E-277 +ddrem1056 remainder 1e-277 -1e+311 -> 1E-277 +ddrem1057 remainder -1e-277 1e+311 -> -1E-277 +ddrem1058 remainder -1e-277 -1e+311 -> -1E-277 + +-- destructive subtract +ddrem1101 remainder 1234567890123456 1.000000000000001 -> 0.765432109876546 +ddrem1102 remainder 1234567890123456 1.00000000000001 -> 0.65432109876557 +ddrem1103 remainder 1234567890123456 1.0000000000001 -> 0.5432109876668 +ddrem1104 remainder 1234567890123455 4.000000000000001 -> 2.691358027469137 +ddrem1105 remainder 1234567890123456 4.000000000000001 -> 3.691358027469137 +ddrem1106 remainder 1234567890123456 4.9999999999999 -> 0.6913578024696 +ddrem1107 remainder 1234567890123456 4.99999999999999 -> 3.46913578024691 +ddrem1108 remainder 1234567890123456 4.999999999999999 -> 1.246913578024691 +ddrem1109 remainder 1234567890123456 5.000000000000001 -> 0.753086421975309 +ddrem1110 remainder 1234567890123456 5.00000000000001 -> 3.53086421975310 +ddrem1111 remainder 1234567890123456 5.0000000000001 -> 1.3086421975314 + +-- Null tests +ddrem1000 remainder 10 # -> NaN Invalid_operation +ddrem1001 remainder # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddRemainderNear.decTest b/Lib/test/decimaltestdata/ddRemainderNear.decTest index bbe82ea3747..8368ac4801e 100644 --- a/Lib/test/decimaltestdata/ddRemainderNear.decTest +++ b/Lib/test/decimaltestdata/ddRemainderNear.decTest @@ -1,629 +1,629 @@ ------------------------------------------------------------------------- --- ddRemainderNear.decTest -- decDouble remainder-near -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks (as base, above) -ddrmn001 remaindernear 1 1 -> 0 -ddrmn002 remaindernear 2 1 -> 0 -ddrmn003 remaindernear 1 2 -> 1 -ddrmn004 remaindernear 2 2 -> 0 -ddrmn005 remaindernear 0 1 -> 0 -ddrmn006 remaindernear 0 2 -> 0 -ddrmn007 remaindernear 1 3 -> 1 -ddrmn008 remaindernear 2 3 -> -1 -ddrmn009 remaindernear 3 3 -> 0 - -ddrmn010 remaindernear 2.4 1 -> 0.4 -ddrmn011 remaindernear 2.4 -1 -> 0.4 -ddrmn012 remaindernear -2.4 1 -> -0.4 -ddrmn013 remaindernear -2.4 -1 -> -0.4 -ddrmn014 remaindernear 2.40 1 -> 0.40 -ddrmn015 remaindernear 2.400 1 -> 0.400 -ddrmn016 remaindernear 2.4 2 -> 0.4 -ddrmn017 remaindernear 2.400 2 -> 0.400 -ddrmn018 remaindernear 2. 2 -> 0 -ddrmn019 remaindernear 20 20 -> 0 - -ddrmn020 remaindernear 187 187 -> 0 -ddrmn021 remaindernear 5 2 -> 1 -ddrmn022 remaindernear 5 2.0 -> 1.0 -ddrmn023 remaindernear 5 2.000 -> 1.000 -ddrmn024 remaindernear 5 0.200 -> 0.000 -ddrmn025 remaindernear 5 0.200 -> 0.000 - -ddrmn030 remaindernear 1 2 -> 1 -ddrmn031 remaindernear 1 4 -> 1 -ddrmn032 remaindernear 1 8 -> 1 - -ddrmn033 remaindernear 1 16 -> 1 -ddrmn034 remaindernear 1 32 -> 1 -ddrmn035 remaindernear 1 64 -> 1 -ddrmn040 remaindernear 1 -2 -> 1 -ddrmn041 remaindernear 1 -4 -> 1 -ddrmn042 remaindernear 1 -8 -> 1 -ddrmn043 remaindernear 1 -16 -> 1 -ddrmn044 remaindernear 1 -32 -> 1 -ddrmn045 remaindernear 1 -64 -> 1 -ddrmn050 remaindernear -1 2 -> -1 -ddrmn051 remaindernear -1 4 -> -1 -ddrmn052 remaindernear -1 8 -> -1 -ddrmn053 remaindernear -1 16 -> -1 -ddrmn054 remaindernear -1 32 -> -1 -ddrmn055 remaindernear -1 64 -> -1 -ddrmn060 remaindernear -1 -2 -> -1 -ddrmn061 remaindernear -1 -4 -> -1 -ddrmn062 remaindernear -1 -8 -> -1 -ddrmn063 remaindernear -1 -16 -> -1 -ddrmn064 remaindernear -1 -32 -> -1 -ddrmn065 remaindernear -1 -64 -> -1 - -ddrmn066 remaindernear 9.9 1 -> -0.1 -ddrmn067 remaindernear 99.7 1 -> -0.3 -ddrmn068 remaindernear 999999999 1 -> 0 -ddrmn069 remaindernear 999999999.4 1 -> 0.4 -ddrmn070 remaindernear 999999999.5 1 -> -0.5 -ddrmn071 remaindernear 999999999.9 1 -> -0.1 -ddrmn072 remaindernear 999999999.999 1 -> -0.001 -ddrmn073 remaindernear 999999.999999 1 -> -0.000001 -ddrmn074 remaindernear 9 1 -> 0 -ddrmn075 remaindernear 9999999999999999 1 -> 0 -ddrmn076 remaindernear 9999999999999999 2 -> -1 -ddrmn077 remaindernear 9999999999999999 3 -> 0 -ddrmn078 remaindernear 9999999999999999 4 -> -1 - -ddrmn080 remaindernear 0. 1 -> 0 -ddrmn081 remaindernear .0 1 -> 0.0 -ddrmn082 remaindernear 0.00 1 -> 0.00 -ddrmn083 remaindernear 0.00E+9 1 -> 0 -ddrmn084 remaindernear 0.00E+3 1 -> 0 -ddrmn085 remaindernear 0.00E+2 1 -> 0 -ddrmn086 remaindernear 0.00E+1 1 -> 0.0 -ddrmn087 remaindernear 0.00E+0 1 -> 0.00 -ddrmn088 remaindernear 0.00E-0 1 -> 0.00 -ddrmn089 remaindernear 0.00E-1 1 -> 0.000 -ddrmn090 remaindernear 0.00E-2 1 -> 0.0000 -ddrmn091 remaindernear 0.00E-3 1 -> 0.00000 -ddrmn092 remaindernear 0.00E-4 1 -> 0.000000 -ddrmn093 remaindernear 0.00E-5 1 -> 0E-7 -ddrmn094 remaindernear 0.00E-6 1 -> 0E-8 -ddrmn095 remaindernear 0.0000E-50 1 -> 0E-54 - --- Various flavours of remaindernear by 0 -ddrmn101 remaindernear 0 0 -> NaN Division_undefined -ddrmn102 remaindernear 0 -0 -> NaN Division_undefined -ddrmn103 remaindernear -0 0 -> NaN Division_undefined -ddrmn104 remaindernear -0 -0 -> NaN Division_undefined -ddrmn105 remaindernear 0.0E5 0 -> NaN Division_undefined -ddrmn106 remaindernear 0.000 0 -> NaN Division_undefined --- [Some think this next group should be Division_by_zero exception, but --- IEEE 854 is explicit that it is Invalid operation .. for --- remainder-near, anyway] -ddrmn107 remaindernear 0.0001 0 -> NaN Invalid_operation -ddrmn108 remaindernear 0.01 0 -> NaN Invalid_operation -ddrmn109 remaindernear 0.1 0 -> NaN Invalid_operation -ddrmn110 remaindernear 1 0 -> NaN Invalid_operation -ddrmn111 remaindernear 1 0.0 -> NaN Invalid_operation -ddrmn112 remaindernear 10 0.0 -> NaN Invalid_operation -ddrmn113 remaindernear 1E+100 0.0 -> NaN Invalid_operation -ddrmn114 remaindernear 1E+380 0 -> NaN Invalid_operation -ddrmn115 remaindernear 0.0001 -0 -> NaN Invalid_operation -ddrmn116 remaindernear 0.01 -0 -> NaN Invalid_operation -ddrmn119 remaindernear 0.1 -0 -> NaN Invalid_operation -ddrmn120 remaindernear 1 -0 -> NaN Invalid_operation -ddrmn121 remaindernear 1 -0.0 -> NaN Invalid_operation -ddrmn122 remaindernear 10 -0.0 -> NaN Invalid_operation -ddrmn123 remaindernear 1E+100 -0.0 -> NaN Invalid_operation -ddrmn124 remaindernear 1E+384 -0 -> NaN Invalid_operation --- and zeros on left -ddrmn130 remaindernear 0 1 -> 0 -ddrmn131 remaindernear 0 -1 -> 0 -ddrmn132 remaindernear 0.0 1 -> 0.0 -ddrmn133 remaindernear 0.0 -1 -> 0.0 -ddrmn134 remaindernear -0 1 -> -0 -ddrmn135 remaindernear -0 -1 -> -0 -ddrmn136 remaindernear -0.0 1 -> -0.0 -ddrmn137 remaindernear -0.0 -1 -> -0.0 - --- 0.5ers -ddrmn143 remaindernear 0.5 2 -> 0.5 -ddrmn144 remaindernear 0.5 2.1 -> 0.5 -ddrmn145 remaindernear 0.5 2.01 -> 0.50 -ddrmn146 remaindernear 0.5 2.001 -> 0.500 -ddrmn147 remaindernear 0.50 2 -> 0.50 -ddrmn148 remaindernear 0.50 2.01 -> 0.50 -ddrmn149 remaindernear 0.50 2.001 -> 0.500 - --- steadies -ddrmn150 remaindernear 1 1 -> 0 -ddrmn151 remaindernear 1 2 -> 1 -ddrmn152 remaindernear 1 3 -> 1 -ddrmn153 remaindernear 1 4 -> 1 -ddrmn154 remaindernear 1 5 -> 1 -ddrmn155 remaindernear 1 6 -> 1 -ddrmn156 remaindernear 1 7 -> 1 -ddrmn157 remaindernear 1 8 -> 1 -ddrmn158 remaindernear 1 9 -> 1 -ddrmn159 remaindernear 1 10 -> 1 -ddrmn160 remaindernear 1 1 -> 0 -ddrmn161 remaindernear 2 1 -> 0 -ddrmn162 remaindernear 3 1 -> 0 -ddrmn163 remaindernear 4 1 -> 0 -ddrmn164 remaindernear 5 1 -> 0 -ddrmn165 remaindernear 6 1 -> 0 -ddrmn166 remaindernear 7 1 -> 0 -ddrmn167 remaindernear 8 1 -> 0 -ddrmn168 remaindernear 9 1 -> 0 -ddrmn169 remaindernear 10 1 -> 0 - --- some differences from remainder -ddrmn171 remaindernear 0.4 1.020 -> 0.400 -ddrmn172 remaindernear 0.50 1.020 -> 0.500 -ddrmn173 remaindernear 0.51 1.020 -> 0.510 -ddrmn174 remaindernear 0.52 1.020 -> -0.500 -ddrmn175 remaindernear 0.6 1.020 -> -0.420 - --- More flavours of remaindernear by 0 -ddrmn201 remaindernear 0 0 -> NaN Division_undefined -ddrmn202 remaindernear 0.0E5 0 -> NaN Division_undefined -ddrmn203 remaindernear 0.000 0 -> NaN Division_undefined -ddrmn204 remaindernear 0.0001 0 -> NaN Invalid_operation -ddrmn205 remaindernear 0.01 0 -> NaN Invalid_operation -ddrmn206 remaindernear 0.1 0 -> NaN Invalid_operation -ddrmn207 remaindernear 1 0 -> NaN Invalid_operation -ddrmn208 remaindernear 1 0.0 -> NaN Invalid_operation -ddrmn209 remaindernear 10 0.0 -> NaN Invalid_operation -ddrmn210 remaindernear 1E+100 0.0 -> NaN Invalid_operation -ddrmn211 remaindernear 1E+380 0 -> NaN Invalid_operation - --- tests from the extended specification -ddrmn221 remaindernear 2.1 3 -> -0.9 -ddrmn222 remaindernear 10 6 -> -2 -ddrmn223 remaindernear 10 3 -> 1 -ddrmn224 remaindernear -10 3 -> -1 -ddrmn225 remaindernear 10.2 1 -> 0.2 -ddrmn226 remaindernear 10 0.3 -> 0.1 -ddrmn227 remaindernear 3.6 1.3 -> -0.3 - --- some differences from remainder -ddrmn231 remaindernear -0.4 1.020 -> -0.400 -ddrmn232 remaindernear -0.50 1.020 -> -0.500 -ddrmn233 remaindernear -0.51 1.020 -> -0.510 -ddrmn234 remaindernear -0.52 1.020 -> 0.500 -ddrmn235 remaindernear -0.6 1.020 -> 0.420 - --- high Xs -ddrmn240 remaindernear 1E+2 1.00 -> 0.00 - --- ddrmn3xx are from DiagBigDecimal -ddrmn301 remaindernear 1 3 -> 1 -ddrmn302 remaindernear 5 5 -> 0 -ddrmn303 remaindernear 13 10 -> 3 -ddrmn304 remaindernear 13 50 -> 13 -ddrmn305 remaindernear 13 100 -> 13 -ddrmn306 remaindernear 13 1000 -> 13 -ddrmn307 remaindernear .13 1 -> 0.13 -ddrmn308 remaindernear 0.133 1 -> 0.133 -ddrmn309 remaindernear 0.1033 1 -> 0.1033 -ddrmn310 remaindernear 1.033 1 -> 0.033 -ddrmn311 remaindernear 10.33 1 -> 0.33 -ddrmn312 remaindernear 10.33 10 -> 0.33 -ddrmn313 remaindernear 103.3 1 -> 0.3 -ddrmn314 remaindernear 133 10 -> 3 -ddrmn315 remaindernear 1033 10 -> 3 -ddrmn316 remaindernear 1033 50 -> -17 -ddrmn317 remaindernear 101.0 3 -> -1.0 -ddrmn318 remaindernear 102.0 3 -> 0.0 -ddrmn319 remaindernear 103.0 3 -> 1.0 -ddrmn320 remaindernear 2.40 1 -> 0.40 -ddrmn321 remaindernear 2.400 1 -> 0.400 -ddrmn322 remaindernear 2.4 1 -> 0.4 -ddrmn323 remaindernear 2.4 2 -> 0.4 -ddrmn324 remaindernear 2.400 2 -> 0.400 -ddrmn325 remaindernear 1 0.3 -> 0.1 -ddrmn326 remaindernear 1 0.30 -> 0.10 -ddrmn327 remaindernear 1 0.300 -> 0.100 -ddrmn328 remaindernear 1 0.3000 -> 0.1000 -ddrmn329 remaindernear 1.0 0.3 -> 0.1 -ddrmn330 remaindernear 1.00 0.3 -> 0.10 -ddrmn331 remaindernear 1.000 0.3 -> 0.100 -ddrmn332 remaindernear 1.0000 0.3 -> 0.1000 -ddrmn333 remaindernear 0.5 2 -> 0.5 -ddrmn334 remaindernear 0.5 2.1 -> 0.5 -ddrmn335 remaindernear 0.5 2.01 -> 0.50 -ddrmn336 remaindernear 0.5 2.001 -> 0.500 -ddrmn337 remaindernear 0.50 2 -> 0.50 -ddrmn338 remaindernear 0.50 2.01 -> 0.50 -ddrmn339 remaindernear 0.50 2.001 -> 0.500 - -ddrmn340 remaindernear 0.5 0.5000001 -> -1E-7 -ddrmn341 remaindernear 0.5 0.50000001 -> -1E-8 -ddrmn342 remaindernear 0.5 0.500000001 -> -1E-9 -ddrmn343 remaindernear 0.5 0.5000000001 -> -1E-10 -ddrmn344 remaindernear 0.5 0.50000000001 -> -1E-11 -ddrmn345 remaindernear 0.5 0.4999999 -> 1E-7 -ddrmn346 remaindernear 0.5 0.49999999 -> 1E-8 -ddrmn347 remaindernear 0.5 0.499999999 -> 1E-9 -ddrmn348 remaindernear 0.5 0.4999999999 -> 1E-10 -ddrmn349 remaindernear 0.5 0.49999999999 -> 1E-11 -ddrmn350 remaindernear 0.5 0.499999999999 -> 1E-12 - -ddrmn351 remaindernear 0.03 7 -> 0.03 -ddrmn352 remaindernear 5 2 -> 1 -ddrmn353 remaindernear 4.1 2 -> 0.1 -ddrmn354 remaindernear 4.01 2 -> 0.01 -ddrmn355 remaindernear 4.001 2 -> 0.001 -ddrmn356 remaindernear 4.0001 2 -> 0.0001 -ddrmn357 remaindernear 4.00001 2 -> 0.00001 -ddrmn358 remaindernear 4.000001 2 -> 0.000001 -ddrmn359 remaindernear 4.0000001 2 -> 1E-7 - -ddrmn360 remaindernear 1.2 0.7345 -> -0.2690 -ddrmn361 remaindernear 0.8 12 -> 0.8 -ddrmn362 remaindernear 0.8 0.2 -> 0.0 -ddrmn363 remaindernear 0.8 0.3 -> -0.1 -ddrmn364 remaindernear 0.800 12 -> 0.800 -ddrmn365 remaindernear 0.800 1.7 -> 0.800 -ddrmn366 remaindernear 2.400 2 -> 0.400 - --- round to even -ddrmn371 remaindernear 121 2 -> 1 -ddrmn372 remaindernear 122 2 -> 0 -ddrmn373 remaindernear 123 2 -> -1 -ddrmn374 remaindernear 124 2 -> 0 -ddrmn375 remaindernear 125 2 -> 1 -ddrmn376 remaindernear 126 2 -> 0 -ddrmn377 remaindernear 127 2 -> -1 - -ddrmn381 remaindernear 12345 1 -> 0 -ddrmn382 remaindernear 12345 1.0001 -> -0.2344 -ddrmn383 remaindernear 12345 1.001 -> -0.333 -ddrmn384 remaindernear 12345 1.01 -> -0.23 -ddrmn385 remaindernear 12345 1.1 -> -0.3 -ddrmn386 remaindernear 12355 4 -> -1 -ddrmn387 remaindernear 12345 4 -> 1 -ddrmn388 remaindernear 12355 4.0001 -> -1.3089 -ddrmn389 remaindernear 12345 4.0001 -> 0.6914 -ddrmn390 remaindernear 12345 4.9 -> 1.9 -ddrmn391 remaindernear 12345 4.99 -> -0.26 -ddrmn392 remaindernear 12345 4.999 -> 2.469 -ddrmn393 remaindernear 12345 4.9999 -> 0.2469 -ddrmn394 remaindernear 12345 5 -> 0 -ddrmn395 remaindernear 12345 5.0001 -> -0.2469 -ddrmn396 remaindernear 12345 5.001 -> -2.469 -ddrmn397 remaindernear 12345 5.01 -> 0.36 -ddrmn398 remaindernear 12345 5.1 -> -2.1 - --- the nasty division-by-1 cases -ddrmn401 remaindernear 0.4 1 -> 0.4 -ddrmn402 remaindernear 0.45 1 -> 0.45 -ddrmn403 remaindernear 0.455 1 -> 0.455 -ddrmn404 remaindernear 0.4555 1 -> 0.4555 -ddrmn405 remaindernear 0.45555 1 -> 0.45555 -ddrmn406 remaindernear 0.455555 1 -> 0.455555 -ddrmn407 remaindernear 0.4555555 1 -> 0.4555555 -ddrmn408 remaindernear 0.45555555 1 -> 0.45555555 -ddrmn409 remaindernear 0.455555555 1 -> 0.455555555 --- with spill... [412 exercises sticktab loop] -ddrmn411 remaindernear 0.5 1 -> 0.5 -ddrmn412 remaindernear 0.55 1 -> -0.45 -ddrmn413 remaindernear 0.555 1 -> -0.445 -ddrmn414 remaindernear 0.5555 1 -> -0.4445 -ddrmn415 remaindernear 0.55555 1 -> -0.44445 -ddrmn416 remaindernear 0.555555 1 -> -0.444445 -ddrmn417 remaindernear 0.5555555 1 -> -0.4444445 -ddrmn418 remaindernear 0.55555555 1 -> -0.44444445 -ddrmn419 remaindernear 0.555555555 1 -> -0.444444445 - --- folddowns -ddrmn421 remaindernear 1E+384 1 -> NaN Division_impossible -ddrmn422 remaindernear 1E+384 1E+383 -> 0E+369 Clamped -ddrmn423 remaindernear 1E+384 2E+383 -> 0E+369 Clamped -ddrmn424 remaindernear 1E+384 3E+383 -> 1.00000000000000E+383 Clamped -ddrmn425 remaindernear 1E+384 4E+383 -> 2.00000000000000E+383 Clamped -ddrmn426 remaindernear 1E+384 5E+383 -> 0E+369 Clamped -ddrmn427 remaindernear 1E+384 6E+383 -> -2.00000000000000E+383 Clamped -ddrmn428 remaindernear 1E+384 7E+383 -> 3.00000000000000E+383 Clamped -ddrmn429 remaindernear 1E+384 8E+383 -> 2.00000000000000E+383 Clamped -ddrmn430 remaindernear 1E+384 9E+383 -> 1.00000000000000E+383 Clamped --- tinies -ddrmn431 remaindernear 1E-397 1E-398 -> 0E-398 -ddrmn432 remaindernear 1E-397 2E-398 -> 0E-398 -ddrmn433 remaindernear 1E-397 3E-398 -> 1E-398 Subnormal -ddrmn434 remaindernear 1E-397 4E-398 -> 2E-398 Subnormal -ddrmn435 remaindernear 1E-397 5E-398 -> 0E-398 -ddrmn436 remaindernear 1E-397 6E-398 -> -2E-398 Subnormal -ddrmn437 remaindernear 1E-397 7E-398 -> 3E-398 Subnormal -ddrmn438 remaindernear 1E-397 8E-398 -> 2E-398 Subnormal -ddrmn439 remaindernear 1E-397 9E-398 -> 1E-398 Subnormal -ddrmn440 remaindernear 1E-397 10E-398 -> 0E-398 -ddrmn441 remaindernear 1E-397 11E-398 -> -1E-398 Subnormal -ddrmn442 remaindernear 100E-397 11E-398 -> -1E-398 Subnormal -ddrmn443 remaindernear 100E-397 20E-398 -> 0E-398 -ddrmn444 remaindernear 100E-397 21E-398 -> -8E-398 Subnormal -ddrmn445 remaindernear 100E-397 30E-398 -> 1.0E-397 Subnormal - --- zero signs -ddrmn650 remaindernear 1 1 -> 0 -ddrmn651 remaindernear -1 1 -> -0 -ddrmn652 remaindernear 1 -1 -> 0 -ddrmn653 remaindernear -1 -1 -> -0 -ddrmn654 remaindernear 0 1 -> 0 -ddrmn655 remaindernear -0 1 -> -0 -ddrmn656 remaindernear 0 -1 -> 0 -ddrmn657 remaindernear -0 -1 -> -0 -ddrmn658 remaindernear 0.00 1 -> 0.00 -ddrmn659 remaindernear -0.00 1 -> -0.00 - --- Specials -ddrmn680 remaindernear Inf -Inf -> NaN Invalid_operation -ddrmn681 remaindernear Inf -1000 -> NaN Invalid_operation -ddrmn682 remaindernear Inf -1 -> NaN Invalid_operation -ddrmn683 remaindernear Inf 0 -> NaN Invalid_operation -ddrmn684 remaindernear Inf -0 -> NaN Invalid_operation -ddrmn685 remaindernear Inf 1 -> NaN Invalid_operation -ddrmn686 remaindernear Inf 1000 -> NaN Invalid_operation -ddrmn687 remaindernear Inf Inf -> NaN Invalid_operation -ddrmn688 remaindernear -1000 Inf -> -1000 -ddrmn689 remaindernear -Inf Inf -> NaN Invalid_operation -ddrmn691 remaindernear -1 Inf -> -1 -ddrmn692 remaindernear 0 Inf -> 0 -ddrmn693 remaindernear -0 Inf -> -0 -ddrmn694 remaindernear 1 Inf -> 1 -ddrmn695 remaindernear 1000 Inf -> 1000 -ddrmn696 remaindernear Inf Inf -> NaN Invalid_operation - -ddrmn700 remaindernear -Inf -Inf -> NaN Invalid_operation -ddrmn701 remaindernear -Inf -1000 -> NaN Invalid_operation -ddrmn702 remaindernear -Inf -1 -> NaN Invalid_operation -ddrmn703 remaindernear -Inf -0 -> NaN Invalid_operation -ddrmn704 remaindernear -Inf 0 -> NaN Invalid_operation -ddrmn705 remaindernear -Inf 1 -> NaN Invalid_operation -ddrmn706 remaindernear -Inf 1000 -> NaN Invalid_operation -ddrmn707 remaindernear -Inf Inf -> NaN Invalid_operation -ddrmn708 remaindernear -Inf -Inf -> NaN Invalid_operation -ddrmn709 remaindernear -1000 Inf -> -1000 -ddrmn710 remaindernear -1 -Inf -> -1 -ddrmn711 remaindernear -0 -Inf -> -0 -ddrmn712 remaindernear 0 -Inf -> 0 -ddrmn713 remaindernear 1 -Inf -> 1 -ddrmn714 remaindernear 1000 -Inf -> 1000 -ddrmn715 remaindernear Inf -Inf -> NaN Invalid_operation - -ddrmn721 remaindernear NaN -Inf -> NaN -ddrmn722 remaindernear NaN -1000 -> NaN -ddrmn723 remaindernear NaN -1 -> NaN -ddrmn724 remaindernear NaN -0 -> NaN -ddrmn725 remaindernear -NaN 0 -> -NaN -ddrmn726 remaindernear NaN 1 -> NaN -ddrmn727 remaindernear NaN 1000 -> NaN -ddrmn728 remaindernear NaN Inf -> NaN -ddrmn729 remaindernear NaN -NaN -> NaN -ddrmn730 remaindernear -Inf NaN -> NaN -ddrmn731 remaindernear -1000 NaN -> NaN -ddrmn732 remaindernear -1 NaN -> NaN -ddrmn733 remaindernear -0 -NaN -> -NaN -ddrmn734 remaindernear 0 NaN -> NaN -ddrmn735 remaindernear 1 -NaN -> -NaN -ddrmn736 remaindernear 1000 NaN -> NaN -ddrmn737 remaindernear Inf NaN -> NaN - -ddrmn741 remaindernear sNaN -Inf -> NaN Invalid_operation -ddrmn742 remaindernear sNaN -1000 -> NaN Invalid_operation -ddrmn743 remaindernear -sNaN -1 -> -NaN Invalid_operation -ddrmn744 remaindernear sNaN -0 -> NaN Invalid_operation -ddrmn745 remaindernear sNaN 0 -> NaN Invalid_operation -ddrmn746 remaindernear sNaN 1 -> NaN Invalid_operation -ddrmn747 remaindernear sNaN 1000 -> NaN Invalid_operation -ddrmn749 remaindernear sNaN NaN -> NaN Invalid_operation -ddrmn750 remaindernear sNaN sNaN -> NaN Invalid_operation -ddrmn751 remaindernear NaN sNaN -> NaN Invalid_operation -ddrmn752 remaindernear -Inf sNaN -> NaN Invalid_operation -ddrmn753 remaindernear -1000 sNaN -> NaN Invalid_operation -ddrmn754 remaindernear -1 sNaN -> NaN Invalid_operation -ddrmn755 remaindernear -0 sNaN -> NaN Invalid_operation -ddrmn756 remaindernear 0 sNaN -> NaN Invalid_operation -ddrmn757 remaindernear 1 sNaN -> NaN Invalid_operation -ddrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation -ddrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation - --- propagating NaNs -ddrmn760 remaindernear NaN1 NaN7 -> NaN1 -ddrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation -ddrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation -ddrmn763 remaindernear sNaN4 sNaN10 -> NaN4 Invalid_operation -ddrmn764 remaindernear 15 NaN11 -> NaN11 -ddrmn765 remaindernear NaN6 NaN12 -> NaN6 -ddrmn766 remaindernear Inf NaN13 -> NaN13 -ddrmn767 remaindernear NaN14 -Inf -> NaN14 -ddrmn768 remaindernear 0 NaN15 -> NaN15 -ddrmn769 remaindernear NaN16 -0 -> NaN16 - --- edge cases of impossible -ddrmn770 remaindernear 1234567890123456 10 -> -4 -ddrmn771 remaindernear 1234567890123456 1 -> 0 -ddrmn772 remaindernear 1234567890123456 0.1 -> NaN Division_impossible -ddrmn773 remaindernear 1234567890123456 0.01 -> NaN Division_impossible - --- long operand checks -ddrmn801 remaindernear 12345678000 100 -> 0 -ddrmn802 remaindernear 1 12345678000 -> 1 -ddrmn803 remaindernear 1234567800 10 -> 0 -ddrmn804 remaindernear 1 1234567800 -> 1 -ddrmn805 remaindernear 1234567890 10 -> 0 -ddrmn806 remaindernear 1 1234567890 -> 1 -ddrmn807 remaindernear 1234567891 10 -> 1 -ddrmn808 remaindernear 1 1234567891 -> 1 -ddrmn809 remaindernear 12345678901 100 -> 1 -ddrmn810 remaindernear 1 12345678901 -> 1 -ddrmn811 remaindernear 1234567896 10 -> -4 -ddrmn812 remaindernear 1 1234567896 -> 1 - -ddrmn821 remaindernear 12345678000 100 -> 0 -ddrmn822 remaindernear 1 12345678000 -> 1 -ddrmn823 remaindernear 1234567800 10 -> 0 -ddrmn824 remaindernear 1 1234567800 -> 1 -ddrmn825 remaindernear 1234567890 10 -> 0 -ddrmn826 remaindernear 1 1234567890 -> 1 -ddrmn827 remaindernear 1234567891 10 -> 1 -ddrmn828 remaindernear 1 1234567891 -> 1 -ddrmn829 remaindernear 12345678901 100 -> 1 -ddrmn830 remaindernear 1 12345678901 -> 1 -ddrmn831 remaindernear 1234567896 10 -> -4 -ddrmn832 remaindernear 1 1234567896 -> 1 - --- from divideint -ddrmn840 remaindernear 100000000.0 1 -> 0.0 -ddrmn841 remaindernear 100000000.4 1 -> 0.4 -ddrmn842 remaindernear 100000000.5 1 -> 0.5 -ddrmn843 remaindernear 100000000.9 1 -> -0.1 -ddrmn844 remaindernear 100000000.999 1 -> -0.001 -ddrmn850 remaindernear 100000003 5 -> -2 -ddrmn851 remaindernear 10000003 5 -> -2 -ddrmn852 remaindernear 1000003 5 -> -2 -ddrmn853 remaindernear 100003 5 -> -2 -ddrmn854 remaindernear 10003 5 -> -2 -ddrmn855 remaindernear 1003 5 -> -2 -ddrmn856 remaindernear 103 5 -> -2 -ddrmn857 remaindernear 13 5 -> -2 -ddrmn858 remaindernear 1 5 -> 1 - --- Vladimir's cases 1234567890123456 -ddrmn860 remaindernear 123.0e1 1000000000000000 -> 1230 -ddrmn861 remaindernear 1230 1000000000000000 -> 1230 -ddrmn862 remaindernear 12.3e2 1000000000000000 -> 1230 -ddrmn863 remaindernear 1.23e3 1000000000000000 -> 1230 -ddrmn864 remaindernear 123e1 1000000000000000 -> 1230 -ddrmn870 remaindernear 123e1 1000000000000000 -> 1230 -ddrmn871 remaindernear 123e1 100000000000000 -> 1230 -ddrmn872 remaindernear 123e1 10000000000000 -> 1230 -ddrmn873 remaindernear 123e1 1000000000000 -> 1230 -ddrmn874 remaindernear 123e1 100000000000 -> 1230 -ddrmn875 remaindernear 123e1 10000000000 -> 1230 -ddrmn876 remaindernear 123e1 1000000000 -> 1230 -ddrmn877 remaindernear 123e1 100000000 -> 1230 -ddrmn878 remaindernear 1230 100000000 -> 1230 -ddrmn879 remaindernear 123e1 10000000 -> 1230 -ddrmn880 remaindernear 123e1 1000000 -> 1230 -ddrmn881 remaindernear 123e1 100000 -> 1230 -ddrmn882 remaindernear 123e1 10000 -> 1230 -ddrmn883 remaindernear 123e1 1000 -> 230 -ddrmn884 remaindernear 123e1 100 -> 30 -ddrmn885 remaindernear 123e1 10 -> 0 -ddrmn886 remaindernear 123e1 1 -> 0 - -ddrmn890 remaindernear 123e1 2000000000000000 -> 1230 -ddrmn891 remaindernear 123e1 200000000000000 -> 1230 -ddrmn892 remaindernear 123e1 20000000000000 -> 1230 -ddrmn893 remaindernear 123e1 2000000000000 -> 1230 -ddrmn894 remaindernear 123e1 200000000000 -> 1230 -ddrmn895 remaindernear 123e1 20000000000 -> 1230 -ddrmn896 remaindernear 123e1 2000000000 -> 1230 -ddrmn897 remaindernear 123e1 200000000 -> 1230 -ddrmn899 remaindernear 123e1 20000000 -> 1230 -ddrmn900 remaindernear 123e1 2000000 -> 1230 -ddrmn901 remaindernear 123e1 200000 -> 1230 -ddrmn902 remaindernear 123e1 20000 -> 1230 -ddrmn903 remaindernear 123e1 2000 -> -770 -ddrmn904 remaindernear 123e1 200 -> 30 -ddrmn905 remaindernear 123e1 20 -> -10 -ddrmn906 remaindernear 123e1 2 -> 0 - -ddrmn910 remaindernear 123e1 5000000000000000 -> 1230 -ddrmn911 remaindernear 123e1 500000000000000 -> 1230 -ddrmn912 remaindernear 123e1 50000000000000 -> 1230 -ddrmn913 remaindernear 123e1 5000000000000 -> 1230 -ddrmn914 remaindernear 123e1 500000000000 -> 1230 -ddrmn915 remaindernear 123e1 50000000000 -> 1230 -ddrmn916 remaindernear 123e1 5000000000 -> 1230 -ddrmn917 remaindernear 123e1 500000000 -> 1230 -ddrmn919 remaindernear 123e1 50000000 -> 1230 -ddrmn920 remaindernear 123e1 5000000 -> 1230 -ddrmn921 remaindernear 123e1 500000 -> 1230 -ddrmn922 remaindernear 123e1 50000 -> 1230 -ddrmn923 remaindernear 123e1 5000 -> 1230 -ddrmn924 remaindernear 123e1 500 -> 230 -ddrmn925 remaindernear 123e1 50 -> -20 -ddrmn926 remaindernear 123e1 5 -> 0 - -ddrmn930 remaindernear 123e1 9000000000000000 -> 1230 -ddrmn931 remaindernear 123e1 900000000000000 -> 1230 -ddrmn932 remaindernear 123e1 90000000000000 -> 1230 -ddrmn933 remaindernear 123e1 9000000000000 -> 1230 -ddrmn934 remaindernear 123e1 900000000000 -> 1230 -ddrmn935 remaindernear 123e1 90000000000 -> 1230 -ddrmn936 remaindernear 123e1 9000000000 -> 1230 -ddrmn937 remaindernear 123e1 900000000 -> 1230 -ddrmn939 remaindernear 123e1 90000000 -> 1230 -ddrmn940 remaindernear 123e1 9000000 -> 1230 -ddrmn941 remaindernear 123e1 900000 -> 1230 -ddrmn942 remaindernear 123e1 90000 -> 1230 -ddrmn943 remaindernear 123e1 9000 -> 1230 -ddrmn944 remaindernear 123e1 900 -> 330 -ddrmn945 remaindernear 123e1 90 -> -30 -ddrmn946 remaindernear 123e1 9 -> -3 - -ddrmn950 remaindernear 123e1 1000000000000000 -> 1230 -ddrmn961 remaindernear 123e1 2999999999999999 -> 1230 -ddrmn962 remaindernear 123e1 3999999999999999 -> 1230 -ddrmn963 remaindernear 123e1 4999999999999999 -> 1230 -ddrmn964 remaindernear 123e1 5999999999999999 -> 1230 -ddrmn965 remaindernear 123e1 6999999999999999 -> 1230 -ddrmn966 remaindernear 123e1 7999999999999999 -> 1230 -ddrmn967 remaindernear 123e1 8999999999999999 -> 1230 -ddrmn968 remaindernear 123e1 9999999999999999 -> 1230 -ddrmn969 remaindernear 123e1 9876543210987654 -> 1230 - -ddrmn980 remaindernear 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally - - --- overflow and underflow tests [from divide] -ddrmn1051 remaindernear 1e+277 1e-311 -> NaN Division_impossible -ddrmn1052 remaindernear 1e+277 -1e-311 -> NaN Division_impossible -ddrmn1053 remaindernear -1e+277 1e-311 -> NaN Division_impossible -ddrmn1054 remaindernear -1e+277 -1e-311 -> NaN Division_impossible -ddrmn1055 remaindernear 1e-277 1e+311 -> 1E-277 -ddrmn1056 remaindernear 1e-277 -1e+311 -> 1E-277 -ddrmn1057 remaindernear -1e-277 1e+311 -> -1E-277 -ddrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277 - --- destructive subtract -ddrmn1100 remainderNear 1234567890123456 1.000000000000001 -> -0.234567890123455 -ddrmn1101 remainderNear 1234567890123456 1.00000000000001 -> -0.34567890123444 -ddrmn1102 remainderNear 1234567890123456 1.0000000000001 -> -0.4567890123333 -ddrmn1103 remainderNear 1234567890123455 4.000000000000001 -> -1.308641972530864 -ddrmn1104 remainderNear 1234567890123456 4.000000000000001 -> -0.308641972530864 -ddrmn1115 remainderNear 1234567890123456 4.9999999999999 -> 0.6913578024696 -ddrmn1116 remainderNear 1234567890123456 4.99999999999999 -> -1.53086421975308 -ddrmn1117 remainderNear 1234567890123456 4.999999999999999 -> 1.246913578024691 -ddrmn1118 remainderNear 1234567890123456 5.000000000000001 -> 0.753086421975309 -ddrmn1119 remainderNear 1234567890123456 5.00000000000001 -> -1.46913578024691 -ddrmn1110 remainderNear 1234567890123456 5.0000000000001 -> 1.3086421975314 - --- Null tests -ddrmn1000 remaindernear 10 # -> NaN Invalid_operation -ddrmn1001 remaindernear # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddRemainderNear.decTest -- decDouble remainder-near -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks (as base, above) +ddrmn001 remaindernear 1 1 -> 0 +ddrmn002 remaindernear 2 1 -> 0 +ddrmn003 remaindernear 1 2 -> 1 +ddrmn004 remaindernear 2 2 -> 0 +ddrmn005 remaindernear 0 1 -> 0 +ddrmn006 remaindernear 0 2 -> 0 +ddrmn007 remaindernear 1 3 -> 1 +ddrmn008 remaindernear 2 3 -> -1 +ddrmn009 remaindernear 3 3 -> 0 + +ddrmn010 remaindernear 2.4 1 -> 0.4 +ddrmn011 remaindernear 2.4 -1 -> 0.4 +ddrmn012 remaindernear -2.4 1 -> -0.4 +ddrmn013 remaindernear -2.4 -1 -> -0.4 +ddrmn014 remaindernear 2.40 1 -> 0.40 +ddrmn015 remaindernear 2.400 1 -> 0.400 +ddrmn016 remaindernear 2.4 2 -> 0.4 +ddrmn017 remaindernear 2.400 2 -> 0.400 +ddrmn018 remaindernear 2. 2 -> 0 +ddrmn019 remaindernear 20 20 -> 0 + +ddrmn020 remaindernear 187 187 -> 0 +ddrmn021 remaindernear 5 2 -> 1 +ddrmn022 remaindernear 5 2.0 -> 1.0 +ddrmn023 remaindernear 5 2.000 -> 1.000 +ddrmn024 remaindernear 5 0.200 -> 0.000 +ddrmn025 remaindernear 5 0.200 -> 0.000 + +ddrmn030 remaindernear 1 2 -> 1 +ddrmn031 remaindernear 1 4 -> 1 +ddrmn032 remaindernear 1 8 -> 1 + +ddrmn033 remaindernear 1 16 -> 1 +ddrmn034 remaindernear 1 32 -> 1 +ddrmn035 remaindernear 1 64 -> 1 +ddrmn040 remaindernear 1 -2 -> 1 +ddrmn041 remaindernear 1 -4 -> 1 +ddrmn042 remaindernear 1 -8 -> 1 +ddrmn043 remaindernear 1 -16 -> 1 +ddrmn044 remaindernear 1 -32 -> 1 +ddrmn045 remaindernear 1 -64 -> 1 +ddrmn050 remaindernear -1 2 -> -1 +ddrmn051 remaindernear -1 4 -> -1 +ddrmn052 remaindernear -1 8 -> -1 +ddrmn053 remaindernear -1 16 -> -1 +ddrmn054 remaindernear -1 32 -> -1 +ddrmn055 remaindernear -1 64 -> -1 +ddrmn060 remaindernear -1 -2 -> -1 +ddrmn061 remaindernear -1 -4 -> -1 +ddrmn062 remaindernear -1 -8 -> -1 +ddrmn063 remaindernear -1 -16 -> -1 +ddrmn064 remaindernear -1 -32 -> -1 +ddrmn065 remaindernear -1 -64 -> -1 + +ddrmn066 remaindernear 9.9 1 -> -0.1 +ddrmn067 remaindernear 99.7 1 -> -0.3 +ddrmn068 remaindernear 999999999 1 -> 0 +ddrmn069 remaindernear 999999999.4 1 -> 0.4 +ddrmn070 remaindernear 999999999.5 1 -> -0.5 +ddrmn071 remaindernear 999999999.9 1 -> -0.1 +ddrmn072 remaindernear 999999999.999 1 -> -0.001 +ddrmn073 remaindernear 999999.999999 1 -> -0.000001 +ddrmn074 remaindernear 9 1 -> 0 +ddrmn075 remaindernear 9999999999999999 1 -> 0 +ddrmn076 remaindernear 9999999999999999 2 -> -1 +ddrmn077 remaindernear 9999999999999999 3 -> 0 +ddrmn078 remaindernear 9999999999999999 4 -> -1 + +ddrmn080 remaindernear 0. 1 -> 0 +ddrmn081 remaindernear .0 1 -> 0.0 +ddrmn082 remaindernear 0.00 1 -> 0.00 +ddrmn083 remaindernear 0.00E+9 1 -> 0 +ddrmn084 remaindernear 0.00E+3 1 -> 0 +ddrmn085 remaindernear 0.00E+2 1 -> 0 +ddrmn086 remaindernear 0.00E+1 1 -> 0.0 +ddrmn087 remaindernear 0.00E+0 1 -> 0.00 +ddrmn088 remaindernear 0.00E-0 1 -> 0.00 +ddrmn089 remaindernear 0.00E-1 1 -> 0.000 +ddrmn090 remaindernear 0.00E-2 1 -> 0.0000 +ddrmn091 remaindernear 0.00E-3 1 -> 0.00000 +ddrmn092 remaindernear 0.00E-4 1 -> 0.000000 +ddrmn093 remaindernear 0.00E-5 1 -> 0E-7 +ddrmn094 remaindernear 0.00E-6 1 -> 0E-8 +ddrmn095 remaindernear 0.0000E-50 1 -> 0E-54 + +-- Various flavours of remaindernear by 0 +ddrmn101 remaindernear 0 0 -> NaN Division_undefined +ddrmn102 remaindernear 0 -0 -> NaN Division_undefined +ddrmn103 remaindernear -0 0 -> NaN Division_undefined +ddrmn104 remaindernear -0 -0 -> NaN Division_undefined +ddrmn105 remaindernear 0.0E5 0 -> NaN Division_undefined +ddrmn106 remaindernear 0.000 0 -> NaN Division_undefined +-- [Some think this next group should be Division_by_zero exception, but +-- IEEE 854 is explicit that it is Invalid operation .. for +-- remainder-near, anyway] +ddrmn107 remaindernear 0.0001 0 -> NaN Invalid_operation +ddrmn108 remaindernear 0.01 0 -> NaN Invalid_operation +ddrmn109 remaindernear 0.1 0 -> NaN Invalid_operation +ddrmn110 remaindernear 1 0 -> NaN Invalid_operation +ddrmn111 remaindernear 1 0.0 -> NaN Invalid_operation +ddrmn112 remaindernear 10 0.0 -> NaN Invalid_operation +ddrmn113 remaindernear 1E+100 0.0 -> NaN Invalid_operation +ddrmn114 remaindernear 1E+380 0 -> NaN Invalid_operation +ddrmn115 remaindernear 0.0001 -0 -> NaN Invalid_operation +ddrmn116 remaindernear 0.01 -0 -> NaN Invalid_operation +ddrmn119 remaindernear 0.1 -0 -> NaN Invalid_operation +ddrmn120 remaindernear 1 -0 -> NaN Invalid_operation +ddrmn121 remaindernear 1 -0.0 -> NaN Invalid_operation +ddrmn122 remaindernear 10 -0.0 -> NaN Invalid_operation +ddrmn123 remaindernear 1E+100 -0.0 -> NaN Invalid_operation +ddrmn124 remaindernear 1E+384 -0 -> NaN Invalid_operation +-- and zeros on left +ddrmn130 remaindernear 0 1 -> 0 +ddrmn131 remaindernear 0 -1 -> 0 +ddrmn132 remaindernear 0.0 1 -> 0.0 +ddrmn133 remaindernear 0.0 -1 -> 0.0 +ddrmn134 remaindernear -0 1 -> -0 +ddrmn135 remaindernear -0 -1 -> -0 +ddrmn136 remaindernear -0.0 1 -> -0.0 +ddrmn137 remaindernear -0.0 -1 -> -0.0 + +-- 0.5ers +ddrmn143 remaindernear 0.5 2 -> 0.5 +ddrmn144 remaindernear 0.5 2.1 -> 0.5 +ddrmn145 remaindernear 0.5 2.01 -> 0.50 +ddrmn146 remaindernear 0.5 2.001 -> 0.500 +ddrmn147 remaindernear 0.50 2 -> 0.50 +ddrmn148 remaindernear 0.50 2.01 -> 0.50 +ddrmn149 remaindernear 0.50 2.001 -> 0.500 + +-- steadies +ddrmn150 remaindernear 1 1 -> 0 +ddrmn151 remaindernear 1 2 -> 1 +ddrmn152 remaindernear 1 3 -> 1 +ddrmn153 remaindernear 1 4 -> 1 +ddrmn154 remaindernear 1 5 -> 1 +ddrmn155 remaindernear 1 6 -> 1 +ddrmn156 remaindernear 1 7 -> 1 +ddrmn157 remaindernear 1 8 -> 1 +ddrmn158 remaindernear 1 9 -> 1 +ddrmn159 remaindernear 1 10 -> 1 +ddrmn160 remaindernear 1 1 -> 0 +ddrmn161 remaindernear 2 1 -> 0 +ddrmn162 remaindernear 3 1 -> 0 +ddrmn163 remaindernear 4 1 -> 0 +ddrmn164 remaindernear 5 1 -> 0 +ddrmn165 remaindernear 6 1 -> 0 +ddrmn166 remaindernear 7 1 -> 0 +ddrmn167 remaindernear 8 1 -> 0 +ddrmn168 remaindernear 9 1 -> 0 +ddrmn169 remaindernear 10 1 -> 0 + +-- some differences from remainder +ddrmn171 remaindernear 0.4 1.020 -> 0.400 +ddrmn172 remaindernear 0.50 1.020 -> 0.500 +ddrmn173 remaindernear 0.51 1.020 -> 0.510 +ddrmn174 remaindernear 0.52 1.020 -> -0.500 +ddrmn175 remaindernear 0.6 1.020 -> -0.420 + +-- More flavours of remaindernear by 0 +ddrmn201 remaindernear 0 0 -> NaN Division_undefined +ddrmn202 remaindernear 0.0E5 0 -> NaN Division_undefined +ddrmn203 remaindernear 0.000 0 -> NaN Division_undefined +ddrmn204 remaindernear 0.0001 0 -> NaN Invalid_operation +ddrmn205 remaindernear 0.01 0 -> NaN Invalid_operation +ddrmn206 remaindernear 0.1 0 -> NaN Invalid_operation +ddrmn207 remaindernear 1 0 -> NaN Invalid_operation +ddrmn208 remaindernear 1 0.0 -> NaN Invalid_operation +ddrmn209 remaindernear 10 0.0 -> NaN Invalid_operation +ddrmn210 remaindernear 1E+100 0.0 -> NaN Invalid_operation +ddrmn211 remaindernear 1E+380 0 -> NaN Invalid_operation + +-- tests from the extended specification +ddrmn221 remaindernear 2.1 3 -> -0.9 +ddrmn222 remaindernear 10 6 -> -2 +ddrmn223 remaindernear 10 3 -> 1 +ddrmn224 remaindernear -10 3 -> -1 +ddrmn225 remaindernear 10.2 1 -> 0.2 +ddrmn226 remaindernear 10 0.3 -> 0.1 +ddrmn227 remaindernear 3.6 1.3 -> -0.3 + +-- some differences from remainder +ddrmn231 remaindernear -0.4 1.020 -> -0.400 +ddrmn232 remaindernear -0.50 1.020 -> -0.500 +ddrmn233 remaindernear -0.51 1.020 -> -0.510 +ddrmn234 remaindernear -0.52 1.020 -> 0.500 +ddrmn235 remaindernear -0.6 1.020 -> 0.420 + +-- high Xs +ddrmn240 remaindernear 1E+2 1.00 -> 0.00 + +-- ddrmn3xx are from DiagBigDecimal +ddrmn301 remaindernear 1 3 -> 1 +ddrmn302 remaindernear 5 5 -> 0 +ddrmn303 remaindernear 13 10 -> 3 +ddrmn304 remaindernear 13 50 -> 13 +ddrmn305 remaindernear 13 100 -> 13 +ddrmn306 remaindernear 13 1000 -> 13 +ddrmn307 remaindernear .13 1 -> 0.13 +ddrmn308 remaindernear 0.133 1 -> 0.133 +ddrmn309 remaindernear 0.1033 1 -> 0.1033 +ddrmn310 remaindernear 1.033 1 -> 0.033 +ddrmn311 remaindernear 10.33 1 -> 0.33 +ddrmn312 remaindernear 10.33 10 -> 0.33 +ddrmn313 remaindernear 103.3 1 -> 0.3 +ddrmn314 remaindernear 133 10 -> 3 +ddrmn315 remaindernear 1033 10 -> 3 +ddrmn316 remaindernear 1033 50 -> -17 +ddrmn317 remaindernear 101.0 3 -> -1.0 +ddrmn318 remaindernear 102.0 3 -> 0.0 +ddrmn319 remaindernear 103.0 3 -> 1.0 +ddrmn320 remaindernear 2.40 1 -> 0.40 +ddrmn321 remaindernear 2.400 1 -> 0.400 +ddrmn322 remaindernear 2.4 1 -> 0.4 +ddrmn323 remaindernear 2.4 2 -> 0.4 +ddrmn324 remaindernear 2.400 2 -> 0.400 +ddrmn325 remaindernear 1 0.3 -> 0.1 +ddrmn326 remaindernear 1 0.30 -> 0.10 +ddrmn327 remaindernear 1 0.300 -> 0.100 +ddrmn328 remaindernear 1 0.3000 -> 0.1000 +ddrmn329 remaindernear 1.0 0.3 -> 0.1 +ddrmn330 remaindernear 1.00 0.3 -> 0.10 +ddrmn331 remaindernear 1.000 0.3 -> 0.100 +ddrmn332 remaindernear 1.0000 0.3 -> 0.1000 +ddrmn333 remaindernear 0.5 2 -> 0.5 +ddrmn334 remaindernear 0.5 2.1 -> 0.5 +ddrmn335 remaindernear 0.5 2.01 -> 0.50 +ddrmn336 remaindernear 0.5 2.001 -> 0.500 +ddrmn337 remaindernear 0.50 2 -> 0.50 +ddrmn338 remaindernear 0.50 2.01 -> 0.50 +ddrmn339 remaindernear 0.50 2.001 -> 0.500 + +ddrmn340 remaindernear 0.5 0.5000001 -> -1E-7 +ddrmn341 remaindernear 0.5 0.50000001 -> -1E-8 +ddrmn342 remaindernear 0.5 0.500000001 -> -1E-9 +ddrmn343 remaindernear 0.5 0.5000000001 -> -1E-10 +ddrmn344 remaindernear 0.5 0.50000000001 -> -1E-11 +ddrmn345 remaindernear 0.5 0.4999999 -> 1E-7 +ddrmn346 remaindernear 0.5 0.49999999 -> 1E-8 +ddrmn347 remaindernear 0.5 0.499999999 -> 1E-9 +ddrmn348 remaindernear 0.5 0.4999999999 -> 1E-10 +ddrmn349 remaindernear 0.5 0.49999999999 -> 1E-11 +ddrmn350 remaindernear 0.5 0.499999999999 -> 1E-12 + +ddrmn351 remaindernear 0.03 7 -> 0.03 +ddrmn352 remaindernear 5 2 -> 1 +ddrmn353 remaindernear 4.1 2 -> 0.1 +ddrmn354 remaindernear 4.01 2 -> 0.01 +ddrmn355 remaindernear 4.001 2 -> 0.001 +ddrmn356 remaindernear 4.0001 2 -> 0.0001 +ddrmn357 remaindernear 4.00001 2 -> 0.00001 +ddrmn358 remaindernear 4.000001 2 -> 0.000001 +ddrmn359 remaindernear 4.0000001 2 -> 1E-7 + +ddrmn360 remaindernear 1.2 0.7345 -> -0.2690 +ddrmn361 remaindernear 0.8 12 -> 0.8 +ddrmn362 remaindernear 0.8 0.2 -> 0.0 +ddrmn363 remaindernear 0.8 0.3 -> -0.1 +ddrmn364 remaindernear 0.800 12 -> 0.800 +ddrmn365 remaindernear 0.800 1.7 -> 0.800 +ddrmn366 remaindernear 2.400 2 -> 0.400 + +-- round to even +ddrmn371 remaindernear 121 2 -> 1 +ddrmn372 remaindernear 122 2 -> 0 +ddrmn373 remaindernear 123 2 -> -1 +ddrmn374 remaindernear 124 2 -> 0 +ddrmn375 remaindernear 125 2 -> 1 +ddrmn376 remaindernear 126 2 -> 0 +ddrmn377 remaindernear 127 2 -> -1 + +ddrmn381 remaindernear 12345 1 -> 0 +ddrmn382 remaindernear 12345 1.0001 -> -0.2344 +ddrmn383 remaindernear 12345 1.001 -> -0.333 +ddrmn384 remaindernear 12345 1.01 -> -0.23 +ddrmn385 remaindernear 12345 1.1 -> -0.3 +ddrmn386 remaindernear 12355 4 -> -1 +ddrmn387 remaindernear 12345 4 -> 1 +ddrmn388 remaindernear 12355 4.0001 -> -1.3089 +ddrmn389 remaindernear 12345 4.0001 -> 0.6914 +ddrmn390 remaindernear 12345 4.9 -> 1.9 +ddrmn391 remaindernear 12345 4.99 -> -0.26 +ddrmn392 remaindernear 12345 4.999 -> 2.469 +ddrmn393 remaindernear 12345 4.9999 -> 0.2469 +ddrmn394 remaindernear 12345 5 -> 0 +ddrmn395 remaindernear 12345 5.0001 -> -0.2469 +ddrmn396 remaindernear 12345 5.001 -> -2.469 +ddrmn397 remaindernear 12345 5.01 -> 0.36 +ddrmn398 remaindernear 12345 5.1 -> -2.1 + +-- the nasty division-by-1 cases +ddrmn401 remaindernear 0.4 1 -> 0.4 +ddrmn402 remaindernear 0.45 1 -> 0.45 +ddrmn403 remaindernear 0.455 1 -> 0.455 +ddrmn404 remaindernear 0.4555 1 -> 0.4555 +ddrmn405 remaindernear 0.45555 1 -> 0.45555 +ddrmn406 remaindernear 0.455555 1 -> 0.455555 +ddrmn407 remaindernear 0.4555555 1 -> 0.4555555 +ddrmn408 remaindernear 0.45555555 1 -> 0.45555555 +ddrmn409 remaindernear 0.455555555 1 -> 0.455555555 +-- with spill... [412 exercises sticktab loop] +ddrmn411 remaindernear 0.5 1 -> 0.5 +ddrmn412 remaindernear 0.55 1 -> -0.45 +ddrmn413 remaindernear 0.555 1 -> -0.445 +ddrmn414 remaindernear 0.5555 1 -> -0.4445 +ddrmn415 remaindernear 0.55555 1 -> -0.44445 +ddrmn416 remaindernear 0.555555 1 -> -0.444445 +ddrmn417 remaindernear 0.5555555 1 -> -0.4444445 +ddrmn418 remaindernear 0.55555555 1 -> -0.44444445 +ddrmn419 remaindernear 0.555555555 1 -> -0.444444445 + +-- folddowns +ddrmn421 remaindernear 1E+384 1 -> NaN Division_impossible +ddrmn422 remaindernear 1E+384 1E+383 -> 0E+369 Clamped +ddrmn423 remaindernear 1E+384 2E+383 -> 0E+369 Clamped +ddrmn424 remaindernear 1E+384 3E+383 -> 1.00000000000000E+383 Clamped +ddrmn425 remaindernear 1E+384 4E+383 -> 2.00000000000000E+383 Clamped +ddrmn426 remaindernear 1E+384 5E+383 -> 0E+369 Clamped +ddrmn427 remaindernear 1E+384 6E+383 -> -2.00000000000000E+383 Clamped +ddrmn428 remaindernear 1E+384 7E+383 -> 3.00000000000000E+383 Clamped +ddrmn429 remaindernear 1E+384 8E+383 -> 2.00000000000000E+383 Clamped +ddrmn430 remaindernear 1E+384 9E+383 -> 1.00000000000000E+383 Clamped +-- tinies +ddrmn431 remaindernear 1E-397 1E-398 -> 0E-398 +ddrmn432 remaindernear 1E-397 2E-398 -> 0E-398 +ddrmn433 remaindernear 1E-397 3E-398 -> 1E-398 Subnormal +ddrmn434 remaindernear 1E-397 4E-398 -> 2E-398 Subnormal +ddrmn435 remaindernear 1E-397 5E-398 -> 0E-398 +ddrmn436 remaindernear 1E-397 6E-398 -> -2E-398 Subnormal +ddrmn437 remaindernear 1E-397 7E-398 -> 3E-398 Subnormal +ddrmn438 remaindernear 1E-397 8E-398 -> 2E-398 Subnormal +ddrmn439 remaindernear 1E-397 9E-398 -> 1E-398 Subnormal +ddrmn440 remaindernear 1E-397 10E-398 -> 0E-398 +ddrmn441 remaindernear 1E-397 11E-398 -> -1E-398 Subnormal +ddrmn442 remaindernear 100E-397 11E-398 -> -1E-398 Subnormal +ddrmn443 remaindernear 100E-397 20E-398 -> 0E-398 +ddrmn444 remaindernear 100E-397 21E-398 -> -8E-398 Subnormal +ddrmn445 remaindernear 100E-397 30E-398 -> 1.0E-397 Subnormal + +-- zero signs +ddrmn650 remaindernear 1 1 -> 0 +ddrmn651 remaindernear -1 1 -> -0 +ddrmn652 remaindernear 1 -1 -> 0 +ddrmn653 remaindernear -1 -1 -> -0 +ddrmn654 remaindernear 0 1 -> 0 +ddrmn655 remaindernear -0 1 -> -0 +ddrmn656 remaindernear 0 -1 -> 0 +ddrmn657 remaindernear -0 -1 -> -0 +ddrmn658 remaindernear 0.00 1 -> 0.00 +ddrmn659 remaindernear -0.00 1 -> -0.00 + +-- Specials +ddrmn680 remaindernear Inf -Inf -> NaN Invalid_operation +ddrmn681 remaindernear Inf -1000 -> NaN Invalid_operation +ddrmn682 remaindernear Inf -1 -> NaN Invalid_operation +ddrmn683 remaindernear Inf 0 -> NaN Invalid_operation +ddrmn684 remaindernear Inf -0 -> NaN Invalid_operation +ddrmn685 remaindernear Inf 1 -> NaN Invalid_operation +ddrmn686 remaindernear Inf 1000 -> NaN Invalid_operation +ddrmn687 remaindernear Inf Inf -> NaN Invalid_operation +ddrmn688 remaindernear -1000 Inf -> -1000 +ddrmn689 remaindernear -Inf Inf -> NaN Invalid_operation +ddrmn691 remaindernear -1 Inf -> -1 +ddrmn692 remaindernear 0 Inf -> 0 +ddrmn693 remaindernear -0 Inf -> -0 +ddrmn694 remaindernear 1 Inf -> 1 +ddrmn695 remaindernear 1000 Inf -> 1000 +ddrmn696 remaindernear Inf Inf -> NaN Invalid_operation + +ddrmn700 remaindernear -Inf -Inf -> NaN Invalid_operation +ddrmn701 remaindernear -Inf -1000 -> NaN Invalid_operation +ddrmn702 remaindernear -Inf -1 -> NaN Invalid_operation +ddrmn703 remaindernear -Inf -0 -> NaN Invalid_operation +ddrmn704 remaindernear -Inf 0 -> NaN Invalid_operation +ddrmn705 remaindernear -Inf 1 -> NaN Invalid_operation +ddrmn706 remaindernear -Inf 1000 -> NaN Invalid_operation +ddrmn707 remaindernear -Inf Inf -> NaN Invalid_operation +ddrmn708 remaindernear -Inf -Inf -> NaN Invalid_operation +ddrmn709 remaindernear -1000 Inf -> -1000 +ddrmn710 remaindernear -1 -Inf -> -1 +ddrmn711 remaindernear -0 -Inf -> -0 +ddrmn712 remaindernear 0 -Inf -> 0 +ddrmn713 remaindernear 1 -Inf -> 1 +ddrmn714 remaindernear 1000 -Inf -> 1000 +ddrmn715 remaindernear Inf -Inf -> NaN Invalid_operation + +ddrmn721 remaindernear NaN -Inf -> NaN +ddrmn722 remaindernear NaN -1000 -> NaN +ddrmn723 remaindernear NaN -1 -> NaN +ddrmn724 remaindernear NaN -0 -> NaN +ddrmn725 remaindernear -NaN 0 -> -NaN +ddrmn726 remaindernear NaN 1 -> NaN +ddrmn727 remaindernear NaN 1000 -> NaN +ddrmn728 remaindernear NaN Inf -> NaN +ddrmn729 remaindernear NaN -NaN -> NaN +ddrmn730 remaindernear -Inf NaN -> NaN +ddrmn731 remaindernear -1000 NaN -> NaN +ddrmn732 remaindernear -1 NaN -> NaN +ddrmn733 remaindernear -0 -NaN -> -NaN +ddrmn734 remaindernear 0 NaN -> NaN +ddrmn735 remaindernear 1 -NaN -> -NaN +ddrmn736 remaindernear 1000 NaN -> NaN +ddrmn737 remaindernear Inf NaN -> NaN + +ddrmn741 remaindernear sNaN -Inf -> NaN Invalid_operation +ddrmn742 remaindernear sNaN -1000 -> NaN Invalid_operation +ddrmn743 remaindernear -sNaN -1 -> -NaN Invalid_operation +ddrmn744 remaindernear sNaN -0 -> NaN Invalid_operation +ddrmn745 remaindernear sNaN 0 -> NaN Invalid_operation +ddrmn746 remaindernear sNaN 1 -> NaN Invalid_operation +ddrmn747 remaindernear sNaN 1000 -> NaN Invalid_operation +ddrmn749 remaindernear sNaN NaN -> NaN Invalid_operation +ddrmn750 remaindernear sNaN sNaN -> NaN Invalid_operation +ddrmn751 remaindernear NaN sNaN -> NaN Invalid_operation +ddrmn752 remaindernear -Inf sNaN -> NaN Invalid_operation +ddrmn753 remaindernear -1000 sNaN -> NaN Invalid_operation +ddrmn754 remaindernear -1 sNaN -> NaN Invalid_operation +ddrmn755 remaindernear -0 sNaN -> NaN Invalid_operation +ddrmn756 remaindernear 0 sNaN -> NaN Invalid_operation +ddrmn757 remaindernear 1 sNaN -> NaN Invalid_operation +ddrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation +ddrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation + +-- propagating NaNs +ddrmn760 remaindernear NaN1 NaN7 -> NaN1 +ddrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation +ddrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation +ddrmn763 remaindernear sNaN4 sNaN10 -> NaN4 Invalid_operation +ddrmn764 remaindernear 15 NaN11 -> NaN11 +ddrmn765 remaindernear NaN6 NaN12 -> NaN6 +ddrmn766 remaindernear Inf NaN13 -> NaN13 +ddrmn767 remaindernear NaN14 -Inf -> NaN14 +ddrmn768 remaindernear 0 NaN15 -> NaN15 +ddrmn769 remaindernear NaN16 -0 -> NaN16 + +-- edge cases of impossible +ddrmn770 remaindernear 1234567890123456 10 -> -4 +ddrmn771 remaindernear 1234567890123456 1 -> 0 +ddrmn772 remaindernear 1234567890123456 0.1 -> NaN Division_impossible +ddrmn773 remaindernear 1234567890123456 0.01 -> NaN Division_impossible + +-- long operand checks +ddrmn801 remaindernear 12345678000 100 -> 0 +ddrmn802 remaindernear 1 12345678000 -> 1 +ddrmn803 remaindernear 1234567800 10 -> 0 +ddrmn804 remaindernear 1 1234567800 -> 1 +ddrmn805 remaindernear 1234567890 10 -> 0 +ddrmn806 remaindernear 1 1234567890 -> 1 +ddrmn807 remaindernear 1234567891 10 -> 1 +ddrmn808 remaindernear 1 1234567891 -> 1 +ddrmn809 remaindernear 12345678901 100 -> 1 +ddrmn810 remaindernear 1 12345678901 -> 1 +ddrmn811 remaindernear 1234567896 10 -> -4 +ddrmn812 remaindernear 1 1234567896 -> 1 + +ddrmn821 remaindernear 12345678000 100 -> 0 +ddrmn822 remaindernear 1 12345678000 -> 1 +ddrmn823 remaindernear 1234567800 10 -> 0 +ddrmn824 remaindernear 1 1234567800 -> 1 +ddrmn825 remaindernear 1234567890 10 -> 0 +ddrmn826 remaindernear 1 1234567890 -> 1 +ddrmn827 remaindernear 1234567891 10 -> 1 +ddrmn828 remaindernear 1 1234567891 -> 1 +ddrmn829 remaindernear 12345678901 100 -> 1 +ddrmn830 remaindernear 1 12345678901 -> 1 +ddrmn831 remaindernear 1234567896 10 -> -4 +ddrmn832 remaindernear 1 1234567896 -> 1 + +-- from divideint +ddrmn840 remaindernear 100000000.0 1 -> 0.0 +ddrmn841 remaindernear 100000000.4 1 -> 0.4 +ddrmn842 remaindernear 100000000.5 1 -> 0.5 +ddrmn843 remaindernear 100000000.9 1 -> -0.1 +ddrmn844 remaindernear 100000000.999 1 -> -0.001 +ddrmn850 remaindernear 100000003 5 -> -2 +ddrmn851 remaindernear 10000003 5 -> -2 +ddrmn852 remaindernear 1000003 5 -> -2 +ddrmn853 remaindernear 100003 5 -> -2 +ddrmn854 remaindernear 10003 5 -> -2 +ddrmn855 remaindernear 1003 5 -> -2 +ddrmn856 remaindernear 103 5 -> -2 +ddrmn857 remaindernear 13 5 -> -2 +ddrmn858 remaindernear 1 5 -> 1 + +-- Vladimir's cases 1234567890123456 +ddrmn860 remaindernear 123.0e1 1000000000000000 -> 1230 +ddrmn861 remaindernear 1230 1000000000000000 -> 1230 +ddrmn862 remaindernear 12.3e2 1000000000000000 -> 1230 +ddrmn863 remaindernear 1.23e3 1000000000000000 -> 1230 +ddrmn864 remaindernear 123e1 1000000000000000 -> 1230 +ddrmn870 remaindernear 123e1 1000000000000000 -> 1230 +ddrmn871 remaindernear 123e1 100000000000000 -> 1230 +ddrmn872 remaindernear 123e1 10000000000000 -> 1230 +ddrmn873 remaindernear 123e1 1000000000000 -> 1230 +ddrmn874 remaindernear 123e1 100000000000 -> 1230 +ddrmn875 remaindernear 123e1 10000000000 -> 1230 +ddrmn876 remaindernear 123e1 1000000000 -> 1230 +ddrmn877 remaindernear 123e1 100000000 -> 1230 +ddrmn878 remaindernear 1230 100000000 -> 1230 +ddrmn879 remaindernear 123e1 10000000 -> 1230 +ddrmn880 remaindernear 123e1 1000000 -> 1230 +ddrmn881 remaindernear 123e1 100000 -> 1230 +ddrmn882 remaindernear 123e1 10000 -> 1230 +ddrmn883 remaindernear 123e1 1000 -> 230 +ddrmn884 remaindernear 123e1 100 -> 30 +ddrmn885 remaindernear 123e1 10 -> 0 +ddrmn886 remaindernear 123e1 1 -> 0 + +ddrmn890 remaindernear 123e1 2000000000000000 -> 1230 +ddrmn891 remaindernear 123e1 200000000000000 -> 1230 +ddrmn892 remaindernear 123e1 20000000000000 -> 1230 +ddrmn893 remaindernear 123e1 2000000000000 -> 1230 +ddrmn894 remaindernear 123e1 200000000000 -> 1230 +ddrmn895 remaindernear 123e1 20000000000 -> 1230 +ddrmn896 remaindernear 123e1 2000000000 -> 1230 +ddrmn897 remaindernear 123e1 200000000 -> 1230 +ddrmn899 remaindernear 123e1 20000000 -> 1230 +ddrmn900 remaindernear 123e1 2000000 -> 1230 +ddrmn901 remaindernear 123e1 200000 -> 1230 +ddrmn902 remaindernear 123e1 20000 -> 1230 +ddrmn903 remaindernear 123e1 2000 -> -770 +ddrmn904 remaindernear 123e1 200 -> 30 +ddrmn905 remaindernear 123e1 20 -> -10 +ddrmn906 remaindernear 123e1 2 -> 0 + +ddrmn910 remaindernear 123e1 5000000000000000 -> 1230 +ddrmn911 remaindernear 123e1 500000000000000 -> 1230 +ddrmn912 remaindernear 123e1 50000000000000 -> 1230 +ddrmn913 remaindernear 123e1 5000000000000 -> 1230 +ddrmn914 remaindernear 123e1 500000000000 -> 1230 +ddrmn915 remaindernear 123e1 50000000000 -> 1230 +ddrmn916 remaindernear 123e1 5000000000 -> 1230 +ddrmn917 remaindernear 123e1 500000000 -> 1230 +ddrmn919 remaindernear 123e1 50000000 -> 1230 +ddrmn920 remaindernear 123e1 5000000 -> 1230 +ddrmn921 remaindernear 123e1 500000 -> 1230 +ddrmn922 remaindernear 123e1 50000 -> 1230 +ddrmn923 remaindernear 123e1 5000 -> 1230 +ddrmn924 remaindernear 123e1 500 -> 230 +ddrmn925 remaindernear 123e1 50 -> -20 +ddrmn926 remaindernear 123e1 5 -> 0 + +ddrmn930 remaindernear 123e1 9000000000000000 -> 1230 +ddrmn931 remaindernear 123e1 900000000000000 -> 1230 +ddrmn932 remaindernear 123e1 90000000000000 -> 1230 +ddrmn933 remaindernear 123e1 9000000000000 -> 1230 +ddrmn934 remaindernear 123e1 900000000000 -> 1230 +ddrmn935 remaindernear 123e1 90000000000 -> 1230 +ddrmn936 remaindernear 123e1 9000000000 -> 1230 +ddrmn937 remaindernear 123e1 900000000 -> 1230 +ddrmn939 remaindernear 123e1 90000000 -> 1230 +ddrmn940 remaindernear 123e1 9000000 -> 1230 +ddrmn941 remaindernear 123e1 900000 -> 1230 +ddrmn942 remaindernear 123e1 90000 -> 1230 +ddrmn943 remaindernear 123e1 9000 -> 1230 +ddrmn944 remaindernear 123e1 900 -> 330 +ddrmn945 remaindernear 123e1 90 -> -30 +ddrmn946 remaindernear 123e1 9 -> -3 + +ddrmn950 remaindernear 123e1 1000000000000000 -> 1230 +ddrmn961 remaindernear 123e1 2999999999999999 -> 1230 +ddrmn962 remaindernear 123e1 3999999999999999 -> 1230 +ddrmn963 remaindernear 123e1 4999999999999999 -> 1230 +ddrmn964 remaindernear 123e1 5999999999999999 -> 1230 +ddrmn965 remaindernear 123e1 6999999999999999 -> 1230 +ddrmn966 remaindernear 123e1 7999999999999999 -> 1230 +ddrmn967 remaindernear 123e1 8999999999999999 -> 1230 +ddrmn968 remaindernear 123e1 9999999999999999 -> 1230 +ddrmn969 remaindernear 123e1 9876543210987654 -> 1230 + +ddrmn980 remaindernear 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally + + +-- overflow and underflow tests [from divide] +ddrmn1051 remaindernear 1e+277 1e-311 -> NaN Division_impossible +ddrmn1052 remaindernear 1e+277 -1e-311 -> NaN Division_impossible +ddrmn1053 remaindernear -1e+277 1e-311 -> NaN Division_impossible +ddrmn1054 remaindernear -1e+277 -1e-311 -> NaN Division_impossible +ddrmn1055 remaindernear 1e-277 1e+311 -> 1E-277 +ddrmn1056 remaindernear 1e-277 -1e+311 -> 1E-277 +ddrmn1057 remaindernear -1e-277 1e+311 -> -1E-277 +ddrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277 + +-- destructive subtract +ddrmn1100 remainderNear 1234567890123456 1.000000000000001 -> -0.234567890123455 +ddrmn1101 remainderNear 1234567890123456 1.00000000000001 -> -0.34567890123444 +ddrmn1102 remainderNear 1234567890123456 1.0000000000001 -> -0.4567890123333 +ddrmn1103 remainderNear 1234567890123455 4.000000000000001 -> -1.308641972530864 +ddrmn1104 remainderNear 1234567890123456 4.000000000000001 -> -0.308641972530864 +ddrmn1115 remainderNear 1234567890123456 4.9999999999999 -> 0.6913578024696 +ddrmn1116 remainderNear 1234567890123456 4.99999999999999 -> -1.53086421975308 +ddrmn1117 remainderNear 1234567890123456 4.999999999999999 -> 1.246913578024691 +ddrmn1118 remainderNear 1234567890123456 5.000000000000001 -> 0.753086421975309 +ddrmn1119 remainderNear 1234567890123456 5.00000000000001 -> -1.46913578024691 +ddrmn1110 remainderNear 1234567890123456 5.0000000000001 -> 1.3086421975314 + +-- Null tests +ddrmn1000 remaindernear 10 # -> NaN Invalid_operation +ddrmn1001 remaindernear # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddRotate.decTest b/Lib/test/decimaltestdata/ddRotate.decTest index 87eeb1c0f1b..8b0fe2620de 100644 --- a/Lib/test/decimaltestdata/ddRotate.decTest +++ b/Lib/test/decimaltestdata/ddRotate.decTest @@ -1,262 +1,262 @@ ------------------------------------------------------------------------- --- ddRotate.decTest -- rotate a decDouble coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddrot001 rotate 0 0 -> 0 -ddrot002 rotate 0 2 -> 0 -ddrot003 rotate 1 2 -> 100 -ddrot004 rotate 1 15 -> 1000000000000000 -ddrot005 rotate 1 16 -> 1 -ddrot006 rotate 1 -1 -> 1000000000000000 -ddrot007 rotate 0 -2 -> 0 -ddrot008 rotate 1234567890123456 -1 -> 6123456789012345 -ddrot009 rotate 1234567890123456 -15 -> 2345678901234561 -ddrot010 rotate 1234567890123456 -16 -> 1234567890123456 -ddrot011 rotate 9934567890123456 -15 -> 9345678901234569 -ddrot012 rotate 9934567890123456 -16 -> 9934567890123456 - --- rhs must be an integer -ddrot015 rotate 1 1.5 -> NaN Invalid_operation -ddrot016 rotate 1 1.0 -> NaN Invalid_operation -ddrot017 rotate 1 0.1 -> NaN Invalid_operation -ddrot018 rotate 1 0.0 -> NaN Invalid_operation -ddrot019 rotate 1 1E+1 -> NaN Invalid_operation -ddrot020 rotate 1 1E+99 -> NaN Invalid_operation -ddrot021 rotate 1 Inf -> NaN Invalid_operation -ddrot022 rotate 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -ddrot025 rotate 1 -1000 -> NaN Invalid_operation -ddrot026 rotate 1 -17 -> NaN Invalid_operation -ddrot027 rotate 1 17 -> NaN Invalid_operation -ddrot028 rotate 1 1000 -> NaN Invalid_operation - --- full pattern -ddrot030 rotate 1234567890123456 -16 -> 1234567890123456 -ddrot031 rotate 1234567890123456 -15 -> 2345678901234561 -ddrot032 rotate 1234567890123456 -14 -> 3456789012345612 -ddrot033 rotate 1234567890123456 -13 -> 4567890123456123 -ddrot034 rotate 1234567890123456 -12 -> 5678901234561234 -ddrot035 rotate 1234567890123456 -11 -> 6789012345612345 -ddrot036 rotate 1234567890123456 -10 -> 7890123456123456 -ddrot037 rotate 1234567890123456 -9 -> 8901234561234567 -ddrot038 rotate 1234567890123456 -8 -> 9012345612345678 -ddrot039 rotate 1234567890123456 -7 -> 123456123456789 -ddrot040 rotate 1234567890123456 -6 -> 1234561234567890 -ddrot041 rotate 1234567890123456 -5 -> 2345612345678901 -ddrot042 rotate 1234567890123456 -4 -> 3456123456789012 -ddrot043 rotate 1234567890123456 -3 -> 4561234567890123 -ddrot044 rotate 1234567890123456 -2 -> 5612345678901234 -ddrot045 rotate 1234567890123456 -1 -> 6123456789012345 -ddrot046 rotate 1234567890123456 -0 -> 1234567890123456 - -ddrot047 rotate 1234567890123456 +0 -> 1234567890123456 -ddrot048 rotate 1234567890123456 +1 -> 2345678901234561 -ddrot049 rotate 1234567890123456 +2 -> 3456789012345612 -ddrot050 rotate 1234567890123456 +3 -> 4567890123456123 -ddrot051 rotate 1234567890123456 +4 -> 5678901234561234 -ddrot052 rotate 1234567890123456 +5 -> 6789012345612345 -ddrot053 rotate 1234567890123456 +6 -> 7890123456123456 -ddrot054 rotate 1234567890123456 +7 -> 8901234561234567 -ddrot055 rotate 1234567890123456 +8 -> 9012345612345678 -ddrot056 rotate 1234567890123456 +9 -> 123456123456789 -ddrot057 rotate 1234567890123456 +10 -> 1234561234567890 -ddrot058 rotate 1234567890123456 +11 -> 2345612345678901 -ddrot059 rotate 1234567890123456 +12 -> 3456123456789012 -ddrot060 rotate 1234567890123456 +13 -> 4561234567890123 -ddrot061 rotate 1234567890123456 +14 -> 5612345678901234 -ddrot062 rotate 1234567890123456 +15 -> 6123456789012345 -ddrot063 rotate 1234567890123456 +16 -> 1234567890123456 - --- zeros -ddrot070 rotate 0E-10 +9 -> 0E-10 -ddrot071 rotate 0E-10 -9 -> 0E-10 -ddrot072 rotate 0.000 +9 -> 0.000 -ddrot073 rotate 0.000 -9 -> 0.000 -ddrot074 rotate 0E+10 +9 -> 0E+10 -ddrot075 rotate 0E+10 -9 -> 0E+10 -ddrot076 rotate -0E-10 +9 -> -0E-10 -ddrot077 rotate -0E-10 -9 -> -0E-10 -ddrot078 rotate -0.000 +9 -> -0.000 -ddrot079 rotate -0.000 -9 -> -0.000 -ddrot080 rotate -0E+10 +9 -> -0E+10 -ddrot081 rotate -0E+10 -9 -> -0E+10 - --- Nmax, Nmin, Ntiny -ddrot141 rotate 9.999999999999999E+384 -1 -> 9.999999999999999E+384 -ddrot142 rotate 9.999999999999999E+384 -15 -> 9.999999999999999E+384 -ddrot143 rotate 9.999999999999999E+384 1 -> 9.999999999999999E+384 -ddrot144 rotate 9.999999999999999E+384 15 -> 9.999999999999999E+384 -ddrot145 rotate 1E-383 -1 -> 1.000000000000000E-368 -ddrot146 rotate 1E-383 -15 -> 1.0E-382 -ddrot147 rotate 1E-383 1 -> 1.0E-382 -ddrot148 rotate 1E-383 15 -> 1.000000000000000E-368 -ddrot151 rotate 1.000000000000000E-383 -1 -> 1.00000000000000E-384 -ddrot152 rotate 1.000000000000000E-383 -15 -> 1E-398 -ddrot153 rotate 1.000000000000000E-383 1 -> 1E-398 -ddrot154 rotate 1.000000000000000E-383 15 -> 1.00000000000000E-384 -ddrot155 rotate 9.000000000000000E-383 -1 -> 9.00000000000000E-384 -ddrot156 rotate 9.000000000000000E-383 -15 -> 9E-398 -ddrot157 rotate 9.000000000000000E-383 1 -> 9E-398 -ddrot158 rotate 9.000000000000000E-383 15 -> 9.00000000000000E-384 -ddrot160 rotate 1E-398 -1 -> 1.000000000000000E-383 -ddrot161 rotate 1E-398 -15 -> 1.0E-397 -ddrot162 rotate 1E-398 1 -> 1.0E-397 -ddrot163 rotate 1E-398 15 -> 1.000000000000000E-383 --- negatives -ddrot171 rotate -9.999999999999999E+384 -1 -> -9.999999999999999E+384 -ddrot172 rotate -9.999999999999999E+384 -15 -> -9.999999999999999E+384 -ddrot173 rotate -9.999999999999999E+384 1 -> -9.999999999999999E+384 -ddrot174 rotate -9.999999999999999E+384 15 -> -9.999999999999999E+384 -ddrot175 rotate -1E-383 -1 -> -1.000000000000000E-368 -ddrot176 rotate -1E-383 -15 -> -1.0E-382 -ddrot177 rotate -1E-383 1 -> -1.0E-382 -ddrot178 rotate -1E-383 15 -> -1.000000000000000E-368 -ddrot181 rotate -1.000000000000000E-383 -1 -> -1.00000000000000E-384 -ddrot182 rotate -1.000000000000000E-383 -15 -> -1E-398 -ddrot183 rotate -1.000000000000000E-383 1 -> -1E-398 -ddrot184 rotate -1.000000000000000E-383 15 -> -1.00000000000000E-384 -ddrot185 rotate -9.000000000000000E-383 -1 -> -9.00000000000000E-384 -ddrot186 rotate -9.000000000000000E-383 -15 -> -9E-398 -ddrot187 rotate -9.000000000000000E-383 1 -> -9E-398 -ddrot188 rotate -9.000000000000000E-383 15 -> -9.00000000000000E-384 -ddrot190 rotate -1E-398 -1 -> -1.000000000000000E-383 -ddrot191 rotate -1E-398 -15 -> -1.0E-397 -ddrot192 rotate -1E-398 1 -> -1.0E-397 -ddrot193 rotate -1E-398 15 -> -1.000000000000000E-383 - --- more negatives (of sanities) -ddrot201 rotate -0 0 -> -0 -ddrot202 rotate -0 2 -> -0 -ddrot203 rotate -1 2 -> -100 -ddrot204 rotate -1 15 -> -1000000000000000 -ddrot205 rotate -1 16 -> -1 -ddrot206 rotate -1 -1 -> -1000000000000000 -ddrot207 rotate -0 -2 -> -0 -ddrot208 rotate -1234567890123456 -1 -> -6123456789012345 -ddrot209 rotate -1234567890123456 -15 -> -2345678901234561 -ddrot210 rotate -1234567890123456 -16 -> -1234567890123456 -ddrot211 rotate -9934567890123456 -15 -> -9345678901234569 -ddrot212 rotate -9934567890123456 -16 -> -9934567890123456 - - --- Specials; NaNs are handled as usual -ddrot781 rotate -Inf -8 -> -Infinity -ddrot782 rotate -Inf -1 -> -Infinity -ddrot783 rotate -Inf -0 -> -Infinity -ddrot784 rotate -Inf 0 -> -Infinity -ddrot785 rotate -Inf 1 -> -Infinity -ddrot786 rotate -Inf 8 -> -Infinity -ddrot787 rotate -1000 -Inf -> NaN Invalid_operation -ddrot788 rotate -Inf -Inf -> NaN Invalid_operation -ddrot789 rotate -1 -Inf -> NaN Invalid_operation -ddrot790 rotate -0 -Inf -> NaN Invalid_operation -ddrot791 rotate 0 -Inf -> NaN Invalid_operation -ddrot792 rotate 1 -Inf -> NaN Invalid_operation -ddrot793 rotate 1000 -Inf -> NaN Invalid_operation -ddrot794 rotate Inf -Inf -> NaN Invalid_operation - -ddrot800 rotate Inf -Inf -> NaN Invalid_operation -ddrot801 rotate Inf -8 -> Infinity -ddrot802 rotate Inf -1 -> Infinity -ddrot803 rotate Inf -0 -> Infinity -ddrot804 rotate Inf 0 -> Infinity -ddrot805 rotate Inf 1 -> Infinity -ddrot806 rotate Inf 8 -> Infinity -ddrot807 rotate Inf Inf -> NaN Invalid_operation -ddrot808 rotate -1000 Inf -> NaN Invalid_operation -ddrot809 rotate -Inf Inf -> NaN Invalid_operation -ddrot810 rotate -1 Inf -> NaN Invalid_operation -ddrot811 rotate -0 Inf -> NaN Invalid_operation -ddrot812 rotate 0 Inf -> NaN Invalid_operation -ddrot813 rotate 1 Inf -> NaN Invalid_operation -ddrot814 rotate 1000 Inf -> NaN Invalid_operation -ddrot815 rotate Inf Inf -> NaN Invalid_operation - -ddrot821 rotate NaN -Inf -> NaN -ddrot822 rotate NaN -1000 -> NaN -ddrot823 rotate NaN -1 -> NaN -ddrot824 rotate NaN -0 -> NaN -ddrot825 rotate NaN 0 -> NaN -ddrot826 rotate NaN 1 -> NaN -ddrot827 rotate NaN 1000 -> NaN -ddrot828 rotate NaN Inf -> NaN -ddrot829 rotate NaN NaN -> NaN -ddrot830 rotate -Inf NaN -> NaN -ddrot831 rotate -1000 NaN -> NaN -ddrot832 rotate -1 NaN -> NaN -ddrot833 rotate -0 NaN -> NaN -ddrot834 rotate 0 NaN -> NaN -ddrot835 rotate 1 NaN -> NaN -ddrot836 rotate 1000 NaN -> NaN -ddrot837 rotate Inf NaN -> NaN - -ddrot841 rotate sNaN -Inf -> NaN Invalid_operation -ddrot842 rotate sNaN -1000 -> NaN Invalid_operation -ddrot843 rotate sNaN -1 -> NaN Invalid_operation -ddrot844 rotate sNaN -0 -> NaN Invalid_operation -ddrot845 rotate sNaN 0 -> NaN Invalid_operation -ddrot846 rotate sNaN 1 -> NaN Invalid_operation -ddrot847 rotate sNaN 1000 -> NaN Invalid_operation -ddrot848 rotate sNaN NaN -> NaN Invalid_operation -ddrot849 rotate sNaN sNaN -> NaN Invalid_operation -ddrot850 rotate NaN sNaN -> NaN Invalid_operation -ddrot851 rotate -Inf sNaN -> NaN Invalid_operation -ddrot852 rotate -1000 sNaN -> NaN Invalid_operation -ddrot853 rotate -1 sNaN -> NaN Invalid_operation -ddrot854 rotate -0 sNaN -> NaN Invalid_operation -ddrot855 rotate 0 sNaN -> NaN Invalid_operation -ddrot856 rotate 1 sNaN -> NaN Invalid_operation -ddrot857 rotate 1000 sNaN -> NaN Invalid_operation -ddrot858 rotate Inf sNaN -> NaN Invalid_operation -ddrot859 rotate NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddrot861 rotate NaN1 -Inf -> NaN1 -ddrot862 rotate +NaN2 -1000 -> NaN2 -ddrot863 rotate NaN3 1000 -> NaN3 -ddrot864 rotate NaN4 Inf -> NaN4 -ddrot865 rotate NaN5 +NaN6 -> NaN5 -ddrot866 rotate -Inf NaN7 -> NaN7 -ddrot867 rotate -1000 NaN8 -> NaN8 -ddrot868 rotate 1000 NaN9 -> NaN9 -ddrot869 rotate Inf +NaN10 -> NaN10 -ddrot871 rotate sNaN11 -Inf -> NaN11 Invalid_operation -ddrot872 rotate sNaN12 -1000 -> NaN12 Invalid_operation -ddrot873 rotate sNaN13 1000 -> NaN13 Invalid_operation -ddrot874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation -ddrot875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation -ddrot876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation -ddrot877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation -ddrot878 rotate -1000 sNaN21 -> NaN21 Invalid_operation -ddrot879 rotate 1000 sNaN22 -> NaN22 Invalid_operation -ddrot880 rotate Inf sNaN23 -> NaN23 Invalid_operation -ddrot881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddrot882 rotate -NaN26 NaN28 -> -NaN26 -ddrot883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddrot884 rotate 1000 -NaN30 -> -NaN30 -ddrot885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- ddRotate.decTest -- rotate a decDouble coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddrot001 rotate 0 0 -> 0 +ddrot002 rotate 0 2 -> 0 +ddrot003 rotate 1 2 -> 100 +ddrot004 rotate 1 15 -> 1000000000000000 +ddrot005 rotate 1 16 -> 1 +ddrot006 rotate 1 -1 -> 1000000000000000 +ddrot007 rotate 0 -2 -> 0 +ddrot008 rotate 1234567890123456 -1 -> 6123456789012345 +ddrot009 rotate 1234567890123456 -15 -> 2345678901234561 +ddrot010 rotate 1234567890123456 -16 -> 1234567890123456 +ddrot011 rotate 9934567890123456 -15 -> 9345678901234569 +ddrot012 rotate 9934567890123456 -16 -> 9934567890123456 + +-- rhs must be an integer +ddrot015 rotate 1 1.5 -> NaN Invalid_operation +ddrot016 rotate 1 1.0 -> NaN Invalid_operation +ddrot017 rotate 1 0.1 -> NaN Invalid_operation +ddrot018 rotate 1 0.0 -> NaN Invalid_operation +ddrot019 rotate 1 1E+1 -> NaN Invalid_operation +ddrot020 rotate 1 1E+99 -> NaN Invalid_operation +ddrot021 rotate 1 Inf -> NaN Invalid_operation +ddrot022 rotate 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +ddrot025 rotate 1 -1000 -> NaN Invalid_operation +ddrot026 rotate 1 -17 -> NaN Invalid_operation +ddrot027 rotate 1 17 -> NaN Invalid_operation +ddrot028 rotate 1 1000 -> NaN Invalid_operation + +-- full pattern +ddrot030 rotate 1234567890123456 -16 -> 1234567890123456 +ddrot031 rotate 1234567890123456 -15 -> 2345678901234561 +ddrot032 rotate 1234567890123456 -14 -> 3456789012345612 +ddrot033 rotate 1234567890123456 -13 -> 4567890123456123 +ddrot034 rotate 1234567890123456 -12 -> 5678901234561234 +ddrot035 rotate 1234567890123456 -11 -> 6789012345612345 +ddrot036 rotate 1234567890123456 -10 -> 7890123456123456 +ddrot037 rotate 1234567890123456 -9 -> 8901234561234567 +ddrot038 rotate 1234567890123456 -8 -> 9012345612345678 +ddrot039 rotate 1234567890123456 -7 -> 123456123456789 +ddrot040 rotate 1234567890123456 -6 -> 1234561234567890 +ddrot041 rotate 1234567890123456 -5 -> 2345612345678901 +ddrot042 rotate 1234567890123456 -4 -> 3456123456789012 +ddrot043 rotate 1234567890123456 -3 -> 4561234567890123 +ddrot044 rotate 1234567890123456 -2 -> 5612345678901234 +ddrot045 rotate 1234567890123456 -1 -> 6123456789012345 +ddrot046 rotate 1234567890123456 -0 -> 1234567890123456 + +ddrot047 rotate 1234567890123456 +0 -> 1234567890123456 +ddrot048 rotate 1234567890123456 +1 -> 2345678901234561 +ddrot049 rotate 1234567890123456 +2 -> 3456789012345612 +ddrot050 rotate 1234567890123456 +3 -> 4567890123456123 +ddrot051 rotate 1234567890123456 +4 -> 5678901234561234 +ddrot052 rotate 1234567890123456 +5 -> 6789012345612345 +ddrot053 rotate 1234567890123456 +6 -> 7890123456123456 +ddrot054 rotate 1234567890123456 +7 -> 8901234561234567 +ddrot055 rotate 1234567890123456 +8 -> 9012345612345678 +ddrot056 rotate 1234567890123456 +9 -> 123456123456789 +ddrot057 rotate 1234567890123456 +10 -> 1234561234567890 +ddrot058 rotate 1234567890123456 +11 -> 2345612345678901 +ddrot059 rotate 1234567890123456 +12 -> 3456123456789012 +ddrot060 rotate 1234567890123456 +13 -> 4561234567890123 +ddrot061 rotate 1234567890123456 +14 -> 5612345678901234 +ddrot062 rotate 1234567890123456 +15 -> 6123456789012345 +ddrot063 rotate 1234567890123456 +16 -> 1234567890123456 + +-- zeros +ddrot070 rotate 0E-10 +9 -> 0E-10 +ddrot071 rotate 0E-10 -9 -> 0E-10 +ddrot072 rotate 0.000 +9 -> 0.000 +ddrot073 rotate 0.000 -9 -> 0.000 +ddrot074 rotate 0E+10 +9 -> 0E+10 +ddrot075 rotate 0E+10 -9 -> 0E+10 +ddrot076 rotate -0E-10 +9 -> -0E-10 +ddrot077 rotate -0E-10 -9 -> -0E-10 +ddrot078 rotate -0.000 +9 -> -0.000 +ddrot079 rotate -0.000 -9 -> -0.000 +ddrot080 rotate -0E+10 +9 -> -0E+10 +ddrot081 rotate -0E+10 -9 -> -0E+10 + +-- Nmax, Nmin, Ntiny +ddrot141 rotate 9.999999999999999E+384 -1 -> 9.999999999999999E+384 +ddrot142 rotate 9.999999999999999E+384 -15 -> 9.999999999999999E+384 +ddrot143 rotate 9.999999999999999E+384 1 -> 9.999999999999999E+384 +ddrot144 rotate 9.999999999999999E+384 15 -> 9.999999999999999E+384 +ddrot145 rotate 1E-383 -1 -> 1.000000000000000E-368 +ddrot146 rotate 1E-383 -15 -> 1.0E-382 +ddrot147 rotate 1E-383 1 -> 1.0E-382 +ddrot148 rotate 1E-383 15 -> 1.000000000000000E-368 +ddrot151 rotate 1.000000000000000E-383 -1 -> 1.00000000000000E-384 +ddrot152 rotate 1.000000000000000E-383 -15 -> 1E-398 +ddrot153 rotate 1.000000000000000E-383 1 -> 1E-398 +ddrot154 rotate 1.000000000000000E-383 15 -> 1.00000000000000E-384 +ddrot155 rotate 9.000000000000000E-383 -1 -> 9.00000000000000E-384 +ddrot156 rotate 9.000000000000000E-383 -15 -> 9E-398 +ddrot157 rotate 9.000000000000000E-383 1 -> 9E-398 +ddrot158 rotate 9.000000000000000E-383 15 -> 9.00000000000000E-384 +ddrot160 rotate 1E-398 -1 -> 1.000000000000000E-383 +ddrot161 rotate 1E-398 -15 -> 1.0E-397 +ddrot162 rotate 1E-398 1 -> 1.0E-397 +ddrot163 rotate 1E-398 15 -> 1.000000000000000E-383 +-- negatives +ddrot171 rotate -9.999999999999999E+384 -1 -> -9.999999999999999E+384 +ddrot172 rotate -9.999999999999999E+384 -15 -> -9.999999999999999E+384 +ddrot173 rotate -9.999999999999999E+384 1 -> -9.999999999999999E+384 +ddrot174 rotate -9.999999999999999E+384 15 -> -9.999999999999999E+384 +ddrot175 rotate -1E-383 -1 -> -1.000000000000000E-368 +ddrot176 rotate -1E-383 -15 -> -1.0E-382 +ddrot177 rotate -1E-383 1 -> -1.0E-382 +ddrot178 rotate -1E-383 15 -> -1.000000000000000E-368 +ddrot181 rotate -1.000000000000000E-383 -1 -> -1.00000000000000E-384 +ddrot182 rotate -1.000000000000000E-383 -15 -> -1E-398 +ddrot183 rotate -1.000000000000000E-383 1 -> -1E-398 +ddrot184 rotate -1.000000000000000E-383 15 -> -1.00000000000000E-384 +ddrot185 rotate -9.000000000000000E-383 -1 -> -9.00000000000000E-384 +ddrot186 rotate -9.000000000000000E-383 -15 -> -9E-398 +ddrot187 rotate -9.000000000000000E-383 1 -> -9E-398 +ddrot188 rotate -9.000000000000000E-383 15 -> -9.00000000000000E-384 +ddrot190 rotate -1E-398 -1 -> -1.000000000000000E-383 +ddrot191 rotate -1E-398 -15 -> -1.0E-397 +ddrot192 rotate -1E-398 1 -> -1.0E-397 +ddrot193 rotate -1E-398 15 -> -1.000000000000000E-383 + +-- more negatives (of sanities) +ddrot201 rotate -0 0 -> -0 +ddrot202 rotate -0 2 -> -0 +ddrot203 rotate -1 2 -> -100 +ddrot204 rotate -1 15 -> -1000000000000000 +ddrot205 rotate -1 16 -> -1 +ddrot206 rotate -1 -1 -> -1000000000000000 +ddrot207 rotate -0 -2 -> -0 +ddrot208 rotate -1234567890123456 -1 -> -6123456789012345 +ddrot209 rotate -1234567890123456 -15 -> -2345678901234561 +ddrot210 rotate -1234567890123456 -16 -> -1234567890123456 +ddrot211 rotate -9934567890123456 -15 -> -9345678901234569 +ddrot212 rotate -9934567890123456 -16 -> -9934567890123456 + + +-- Specials; NaNs are handled as usual +ddrot781 rotate -Inf -8 -> -Infinity +ddrot782 rotate -Inf -1 -> -Infinity +ddrot783 rotate -Inf -0 -> -Infinity +ddrot784 rotate -Inf 0 -> -Infinity +ddrot785 rotate -Inf 1 -> -Infinity +ddrot786 rotate -Inf 8 -> -Infinity +ddrot787 rotate -1000 -Inf -> NaN Invalid_operation +ddrot788 rotate -Inf -Inf -> NaN Invalid_operation +ddrot789 rotate -1 -Inf -> NaN Invalid_operation +ddrot790 rotate -0 -Inf -> NaN Invalid_operation +ddrot791 rotate 0 -Inf -> NaN Invalid_operation +ddrot792 rotate 1 -Inf -> NaN Invalid_operation +ddrot793 rotate 1000 -Inf -> NaN Invalid_operation +ddrot794 rotate Inf -Inf -> NaN Invalid_operation + +ddrot800 rotate Inf -Inf -> NaN Invalid_operation +ddrot801 rotate Inf -8 -> Infinity +ddrot802 rotate Inf -1 -> Infinity +ddrot803 rotate Inf -0 -> Infinity +ddrot804 rotate Inf 0 -> Infinity +ddrot805 rotate Inf 1 -> Infinity +ddrot806 rotate Inf 8 -> Infinity +ddrot807 rotate Inf Inf -> NaN Invalid_operation +ddrot808 rotate -1000 Inf -> NaN Invalid_operation +ddrot809 rotate -Inf Inf -> NaN Invalid_operation +ddrot810 rotate -1 Inf -> NaN Invalid_operation +ddrot811 rotate -0 Inf -> NaN Invalid_operation +ddrot812 rotate 0 Inf -> NaN Invalid_operation +ddrot813 rotate 1 Inf -> NaN Invalid_operation +ddrot814 rotate 1000 Inf -> NaN Invalid_operation +ddrot815 rotate Inf Inf -> NaN Invalid_operation + +ddrot821 rotate NaN -Inf -> NaN +ddrot822 rotate NaN -1000 -> NaN +ddrot823 rotate NaN -1 -> NaN +ddrot824 rotate NaN -0 -> NaN +ddrot825 rotate NaN 0 -> NaN +ddrot826 rotate NaN 1 -> NaN +ddrot827 rotate NaN 1000 -> NaN +ddrot828 rotate NaN Inf -> NaN +ddrot829 rotate NaN NaN -> NaN +ddrot830 rotate -Inf NaN -> NaN +ddrot831 rotate -1000 NaN -> NaN +ddrot832 rotate -1 NaN -> NaN +ddrot833 rotate -0 NaN -> NaN +ddrot834 rotate 0 NaN -> NaN +ddrot835 rotate 1 NaN -> NaN +ddrot836 rotate 1000 NaN -> NaN +ddrot837 rotate Inf NaN -> NaN + +ddrot841 rotate sNaN -Inf -> NaN Invalid_operation +ddrot842 rotate sNaN -1000 -> NaN Invalid_operation +ddrot843 rotate sNaN -1 -> NaN Invalid_operation +ddrot844 rotate sNaN -0 -> NaN Invalid_operation +ddrot845 rotate sNaN 0 -> NaN Invalid_operation +ddrot846 rotate sNaN 1 -> NaN Invalid_operation +ddrot847 rotate sNaN 1000 -> NaN Invalid_operation +ddrot848 rotate sNaN NaN -> NaN Invalid_operation +ddrot849 rotate sNaN sNaN -> NaN Invalid_operation +ddrot850 rotate NaN sNaN -> NaN Invalid_operation +ddrot851 rotate -Inf sNaN -> NaN Invalid_operation +ddrot852 rotate -1000 sNaN -> NaN Invalid_operation +ddrot853 rotate -1 sNaN -> NaN Invalid_operation +ddrot854 rotate -0 sNaN -> NaN Invalid_operation +ddrot855 rotate 0 sNaN -> NaN Invalid_operation +ddrot856 rotate 1 sNaN -> NaN Invalid_operation +ddrot857 rotate 1000 sNaN -> NaN Invalid_operation +ddrot858 rotate Inf sNaN -> NaN Invalid_operation +ddrot859 rotate NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddrot861 rotate NaN1 -Inf -> NaN1 +ddrot862 rotate +NaN2 -1000 -> NaN2 +ddrot863 rotate NaN3 1000 -> NaN3 +ddrot864 rotate NaN4 Inf -> NaN4 +ddrot865 rotate NaN5 +NaN6 -> NaN5 +ddrot866 rotate -Inf NaN7 -> NaN7 +ddrot867 rotate -1000 NaN8 -> NaN8 +ddrot868 rotate 1000 NaN9 -> NaN9 +ddrot869 rotate Inf +NaN10 -> NaN10 +ddrot871 rotate sNaN11 -Inf -> NaN11 Invalid_operation +ddrot872 rotate sNaN12 -1000 -> NaN12 Invalid_operation +ddrot873 rotate sNaN13 1000 -> NaN13 Invalid_operation +ddrot874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation +ddrot875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation +ddrot876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation +ddrot877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation +ddrot878 rotate -1000 sNaN21 -> NaN21 Invalid_operation +ddrot879 rotate 1000 sNaN22 -> NaN22 Invalid_operation +ddrot880 rotate Inf sNaN23 -> NaN23 Invalid_operation +ddrot881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddrot882 rotate -NaN26 NaN28 -> -NaN26 +ddrot883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddrot884 rotate 1000 -NaN30 -> -NaN30 +ddrot885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/ddSameQuantum.decTest b/Lib/test/decimaltestdata/ddSameQuantum.decTest index 54a763cccf3..465b36a8581 100644 --- a/Lib/test/decimaltestdata/ddSameQuantum.decTest +++ b/Lib/test/decimaltestdata/ddSameQuantum.decTest @@ -1,389 +1,389 @@ ------------------------------------------------------------------------- --- ddSameQuantum.decTest -- check decDouble quantums match -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddsamq001 samequantum 0 0 -> 1 -ddsamq002 samequantum 0 1 -> 1 -ddsamq003 samequantum 1 0 -> 1 -ddsamq004 samequantum 1 1 -> 1 - -ddsamq011 samequantum 10 1E+1 -> 0 -ddsamq012 samequantum 10E+1 10E+1 -> 1 -ddsamq013 samequantum 100 10E+1 -> 0 -ddsamq014 samequantum 100 1E+2 -> 0 -ddsamq015 samequantum 0.1 1E-2 -> 0 -ddsamq016 samequantum 0.1 1E-1 -> 1 -ddsamq017 samequantum 0.1 1E-0 -> 0 -ddsamq018 samequantum 999 999 -> 1 -ddsamq019 samequantum 999E-1 99.9 -> 1 -ddsamq020 samequantum 111E-1 22.2 -> 1 -ddsamq021 samequantum 111E-1 1234.2 -> 1 - --- zeros -ddsamq030 samequantum 0.0 1.1 -> 1 -ddsamq031 samequantum 0.0 1.11 -> 0 -ddsamq032 samequantum 0.0 0 -> 0 -ddsamq033 samequantum 0.0 0.0 -> 1 -ddsamq034 samequantum 0.0 0.00 -> 0 -ddsamq035 samequantum 0E+1 0E+0 -> 0 -ddsamq036 samequantum 0E+1 0E+1 -> 1 -ddsamq037 samequantum 0E+1 0E+2 -> 0 -ddsamq038 samequantum 0E-17 0E-16 -> 0 -ddsamq039 samequantum 0E-17 0E-17 -> 1 -ddsamq040 samequantum 0E-17 0E-18 -> 0 -ddsamq041 samequantum 0E-17 0.0E-15 -> 0 -ddsamq042 samequantum 0E-17 0.0E-16 -> 1 -ddsamq043 samequantum 0E-17 0.0E-17 -> 0 -ddsamq044 samequantum -0E-17 0.0E-16 -> 1 -ddsamq045 samequantum 0E-17 -0.0E-17 -> 0 -ddsamq046 samequantum 0E-17 -0.0E-16 -> 1 -ddsamq047 samequantum -0E-17 0.0E-17 -> 0 -ddsamq048 samequantum -0E-17 -0.0E-16 -> 1 -ddsamq049 samequantum -0E-17 -0.0E-17 -> 0 - --- Nmax, Nmin, Ntiny -ddsamq051 samequantum 9.999999999999999E+384 9.999999999999999E+384 -> 1 -ddsamq052 samequantum 1E-383 1E-383 -> 1 -ddsamq053 samequantum 1.000000000000000E-383 1.000000000000000E-383 -> 1 -ddsamq054 samequantum 1E-398 1E-398 -> 1 -ddsamq055 samequantum 9.999999999999999E+384 9.999999999999999E+384 -> 1 -ddsamq056 samequantum 1E-383 1E-383 -> 1 -ddsamq057 samequantum 1.000000000000000E-383 1.000000000000000E-383 -> 1 -ddsamq058 samequantum 1E-398 1E-398 -> 1 - -ddsamq061 samequantum -1E-398 -1E-398 -> 1 -ddsamq062 samequantum -1.000000000000000E-383 -1.000000000000000E-383 -> 1 -ddsamq063 samequantum -1E-383 -1E-383 -> 1 -ddsamq064 samequantum -9.999999999999999E+384 -9.999999999999999E+384 -> 1 -ddsamq065 samequantum -1E-398 -1E-398 -> 1 -ddsamq066 samequantum -1.000000000000000E-383 -1.000000000000000E-383 -> 1 -ddsamq067 samequantum -1E-383 -1E-383 -> 1 -ddsamq068 samequantum -9.999999999999999E+384 -9.999999999999999E+384 -> 1 - -ddsamq071 samequantum -4E-398 -1E-398 -> 1 -ddsamq072 samequantum -4.000000000000000E-383 -1.000040000000000E-383 -> 1 -ddsamq073 samequantum -4E-383 -1E-383 -> 1 -ddsamq074 samequantum -4.999999999999999E+384 -9.999999999949999E+384 -> 1 -ddsamq075 samequantum -4E-398 -1E-398 -> 1 -ddsamq076 samequantum -4.000000000000000E-383 -1.004000000000000E-383 -> 1 -ddsamq077 samequantum -4E-383 -1E-383 -> 1 -ddsamq078 samequantum -4.999999999999999E+384 -9.949999999999999E+384 -> 1 - -ddsamq081 samequantum -4E-397 -1E-398 -> 0 -ddsamq082 samequantum -4.000000000000000E-383 -1.000040000000000E-336 -> 0 -ddsamq083 samequantum -4E-346 -1E-383 -> 0 -ddsamq084 samequantum -4.999999999999999E+384 -9.999499999999999E+336 -> 0 -ddsamq085 samequantum -4E-397 -1E-398 -> 0 -ddsamq086 samequantum -4.000000000000000E-383 -1.004000000000000E-336 -> 0 -ddsamq087 samequantum -4E-346 -1E-383 -> 0 -ddsamq088 samequantum -4.999999999999999E+384 -9.949999999999999E+336 -> 0 - --- specials & combinations -ddsamq0110 samequantum -Inf -Inf -> 1 -ddsamq0111 samequantum -Inf Inf -> 1 -ddsamq0112 samequantum -Inf NaN -> 0 -ddsamq0113 samequantum -Inf -7E+3 -> 0 -ddsamq0114 samequantum -Inf -7 -> 0 -ddsamq0115 samequantum -Inf -7E-3 -> 0 -ddsamq0116 samequantum -Inf -0E-3 -> 0 -ddsamq0117 samequantum -Inf -0 -> 0 -ddsamq0118 samequantum -Inf -0E+3 -> 0 -ddsamq0119 samequantum -Inf 0E-3 -> 0 -ddsamq0120 samequantum -Inf 0 -> 0 -ddsamq0121 samequantum -Inf 0E+3 -> 0 -ddsamq0122 samequantum -Inf 7E-3 -> 0 -ddsamq0123 samequantum -Inf 7 -> 0 -ddsamq0124 samequantum -Inf 7E+3 -> 0 -ddsamq0125 samequantum -Inf sNaN -> 0 - -ddsamq0210 samequantum Inf -Inf -> 1 -ddsamq0211 samequantum Inf Inf -> 1 -ddsamq0212 samequantum Inf NaN -> 0 -ddsamq0213 samequantum Inf -7E+3 -> 0 -ddsamq0214 samequantum Inf -7 -> 0 -ddsamq0215 samequantum Inf -7E-3 -> 0 -ddsamq0216 samequantum Inf -0E-3 -> 0 -ddsamq0217 samequantum Inf -0 -> 0 -ddsamq0218 samequantum Inf -0E+3 -> 0 -ddsamq0219 samequantum Inf 0E-3 -> 0 -ddsamq0220 samequantum Inf 0 -> 0 -ddsamq0221 samequantum Inf 0E+3 -> 0 -ddsamq0222 samequantum Inf 7E-3 -> 0 -ddsamq0223 samequantum Inf 7 -> 0 -ddsamq0224 samequantum Inf 7E+3 -> 0 -ddsamq0225 samequantum Inf sNaN -> 0 - -ddsamq0310 samequantum NaN -Inf -> 0 -ddsamq0311 samequantum NaN Inf -> 0 -ddsamq0312 samequantum NaN NaN -> 1 -ddsamq0313 samequantum NaN -7E+3 -> 0 -ddsamq0314 samequantum NaN -7 -> 0 -ddsamq0315 samequantum NaN -7E-3 -> 0 -ddsamq0316 samequantum NaN -0E-3 -> 0 -ddsamq0317 samequantum NaN -0 -> 0 -ddsamq0318 samequantum NaN -0E+3 -> 0 -ddsamq0319 samequantum NaN 0E-3 -> 0 -ddsamq0320 samequantum NaN 0 -> 0 -ddsamq0321 samequantum NaN 0E+3 -> 0 -ddsamq0322 samequantum NaN 7E-3 -> 0 -ddsamq0323 samequantum NaN 7 -> 0 -ddsamq0324 samequantum NaN 7E+3 -> 0 -ddsamq0325 samequantum NaN sNaN -> 1 - -ddsamq0410 samequantum -7E+3 -Inf -> 0 -ddsamq0411 samequantum -7E+3 Inf -> 0 -ddsamq0412 samequantum -7E+3 NaN -> 0 -ddsamq0413 samequantum -7E+3 -7E+3 -> 1 -ddsamq0414 samequantum -7E+3 -7 -> 0 -ddsamq0415 samequantum -7E+3 -7E-3 -> 0 -ddsamq0416 samequantum -7E+3 -0E-3 -> 0 -ddsamq0417 samequantum -7E+3 -0 -> 0 -ddsamq0418 samequantum -7E+3 -0E+3 -> 1 -ddsamq0419 samequantum -7E+3 0E-3 -> 0 -ddsamq0420 samequantum -7E+3 0 -> 0 -ddsamq0421 samequantum -7E+3 0E+3 -> 1 -ddsamq0422 samequantum -7E+3 7E-3 -> 0 -ddsamq0423 samequantum -7E+3 7 -> 0 -ddsamq0424 samequantum -7E+3 7E+3 -> 1 -ddsamq0425 samequantum -7E+3 sNaN -> 0 - -ddsamq0510 samequantum -7 -Inf -> 0 -ddsamq0511 samequantum -7 Inf -> 0 -ddsamq0512 samequantum -7 NaN -> 0 -ddsamq0513 samequantum -7 -7E+3 -> 0 -ddsamq0514 samequantum -7 -7 -> 1 -ddsamq0515 samequantum -7 -7E-3 -> 0 -ddsamq0516 samequantum -7 -0E-3 -> 0 -ddsamq0517 samequantum -7 -0 -> 1 -ddsamq0518 samequantum -7 -0E+3 -> 0 -ddsamq0519 samequantum -7 0E-3 -> 0 -ddsamq0520 samequantum -7 0 -> 1 -ddsamq0521 samequantum -7 0E+3 -> 0 -ddsamq0522 samequantum -7 7E-3 -> 0 -ddsamq0523 samequantum -7 7 -> 1 -ddsamq0524 samequantum -7 7E+3 -> 0 -ddsamq0525 samequantum -7 sNaN -> 0 - -ddsamq0610 samequantum -7E-3 -Inf -> 0 -ddsamq0611 samequantum -7E-3 Inf -> 0 -ddsamq0612 samequantum -7E-3 NaN -> 0 -ddsamq0613 samequantum -7E-3 -7E+3 -> 0 -ddsamq0614 samequantum -7E-3 -7 -> 0 -ddsamq0615 samequantum -7E-3 -7E-3 -> 1 -ddsamq0616 samequantum -7E-3 -0E-3 -> 1 -ddsamq0617 samequantum -7E-3 -0 -> 0 -ddsamq0618 samequantum -7E-3 -0E+3 -> 0 -ddsamq0619 samequantum -7E-3 0E-3 -> 1 -ddsamq0620 samequantum -7E-3 0 -> 0 -ddsamq0621 samequantum -7E-3 0E+3 -> 0 -ddsamq0622 samequantum -7E-3 7E-3 -> 1 -ddsamq0623 samequantum -7E-3 7 -> 0 -ddsamq0624 samequantum -7E-3 7E+3 -> 0 -ddsamq0625 samequantum -7E-3 sNaN -> 0 - -ddsamq0710 samequantum -0E-3 -Inf -> 0 -ddsamq0711 samequantum -0E-3 Inf -> 0 -ddsamq0712 samequantum -0E-3 NaN -> 0 -ddsamq0713 samequantum -0E-3 -7E+3 -> 0 -ddsamq0714 samequantum -0E-3 -7 -> 0 -ddsamq0715 samequantum -0E-3 -7E-3 -> 1 -ddsamq0716 samequantum -0E-3 -0E-3 -> 1 -ddsamq0717 samequantum -0E-3 -0 -> 0 -ddsamq0718 samequantum -0E-3 -0E+3 -> 0 -ddsamq0719 samequantum -0E-3 0E-3 -> 1 -ddsamq0720 samequantum -0E-3 0 -> 0 -ddsamq0721 samequantum -0E-3 0E+3 -> 0 -ddsamq0722 samequantum -0E-3 7E-3 -> 1 -ddsamq0723 samequantum -0E-3 7 -> 0 -ddsamq0724 samequantum -0E-3 7E+3 -> 0 -ddsamq0725 samequantum -0E-3 sNaN -> 0 - -ddsamq0810 samequantum -0 -Inf -> 0 -ddsamq0811 samequantum -0 Inf -> 0 -ddsamq0812 samequantum -0 NaN -> 0 -ddsamq0813 samequantum -0 -7E+3 -> 0 -ddsamq0814 samequantum -0 -7 -> 1 -ddsamq0815 samequantum -0 -7E-3 -> 0 -ddsamq0816 samequantum -0 -0E-3 -> 0 -ddsamq0817 samequantum -0 -0 -> 1 -ddsamq0818 samequantum -0 -0E+3 -> 0 -ddsamq0819 samequantum -0 0E-3 -> 0 -ddsamq0820 samequantum -0 0 -> 1 -ddsamq0821 samequantum -0 0E+3 -> 0 -ddsamq0822 samequantum -0 7E-3 -> 0 -ddsamq0823 samequantum -0 7 -> 1 -ddsamq0824 samequantum -0 7E+3 -> 0 -ddsamq0825 samequantum -0 sNaN -> 0 - -ddsamq0910 samequantum -0E+3 -Inf -> 0 -ddsamq0911 samequantum -0E+3 Inf -> 0 -ddsamq0912 samequantum -0E+3 NaN -> 0 -ddsamq0913 samequantum -0E+3 -7E+3 -> 1 -ddsamq0914 samequantum -0E+3 -7 -> 0 -ddsamq0915 samequantum -0E+3 -7E-3 -> 0 -ddsamq0916 samequantum -0E+3 -0E-3 -> 0 -ddsamq0917 samequantum -0E+3 -0 -> 0 -ddsamq0918 samequantum -0E+3 -0E+3 -> 1 -ddsamq0919 samequantum -0E+3 0E-3 -> 0 -ddsamq0920 samequantum -0E+3 0 -> 0 -ddsamq0921 samequantum -0E+3 0E+3 -> 1 -ddsamq0922 samequantum -0E+3 7E-3 -> 0 -ddsamq0923 samequantum -0E+3 7 -> 0 -ddsamq0924 samequantum -0E+3 7E+3 -> 1 -ddsamq0925 samequantum -0E+3 sNaN -> 0 - -ddsamq1110 samequantum 0E-3 -Inf -> 0 -ddsamq1111 samequantum 0E-3 Inf -> 0 -ddsamq1112 samequantum 0E-3 NaN -> 0 -ddsamq1113 samequantum 0E-3 -7E+3 -> 0 -ddsamq1114 samequantum 0E-3 -7 -> 0 -ddsamq1115 samequantum 0E-3 -7E-3 -> 1 -ddsamq1116 samequantum 0E-3 -0E-3 -> 1 -ddsamq1117 samequantum 0E-3 -0 -> 0 -ddsamq1118 samequantum 0E-3 -0E+3 -> 0 -ddsamq1119 samequantum 0E-3 0E-3 -> 1 -ddsamq1120 samequantum 0E-3 0 -> 0 -ddsamq1121 samequantum 0E-3 0E+3 -> 0 -ddsamq1122 samequantum 0E-3 7E-3 -> 1 -ddsamq1123 samequantum 0E-3 7 -> 0 -ddsamq1124 samequantum 0E-3 7E+3 -> 0 -ddsamq1125 samequantum 0E-3 sNaN -> 0 - -ddsamq1210 samequantum 0 -Inf -> 0 -ddsamq1211 samequantum 0 Inf -> 0 -ddsamq1212 samequantum 0 NaN -> 0 -ddsamq1213 samequantum 0 -7E+3 -> 0 -ddsamq1214 samequantum 0 -7 -> 1 -ddsamq1215 samequantum 0 -7E-3 -> 0 -ddsamq1216 samequantum 0 -0E-3 -> 0 -ddsamq1217 samequantum 0 -0 -> 1 -ddsamq1218 samequantum 0 -0E+3 -> 0 -ddsamq1219 samequantum 0 0E-3 -> 0 -ddsamq1220 samequantum 0 0 -> 1 -ddsamq1221 samequantum 0 0E+3 -> 0 -ddsamq1222 samequantum 0 7E-3 -> 0 -ddsamq1223 samequantum 0 7 -> 1 -ddsamq1224 samequantum 0 7E+3 -> 0 -ddsamq1225 samequantum 0 sNaN -> 0 - -ddsamq1310 samequantum 0E+3 -Inf -> 0 -ddsamq1311 samequantum 0E+3 Inf -> 0 -ddsamq1312 samequantum 0E+3 NaN -> 0 -ddsamq1313 samequantum 0E+3 -7E+3 -> 1 -ddsamq1314 samequantum 0E+3 -7 -> 0 -ddsamq1315 samequantum 0E+3 -7E-3 -> 0 -ddsamq1316 samequantum 0E+3 -0E-3 -> 0 -ddsamq1317 samequantum 0E+3 -0 -> 0 -ddsamq1318 samequantum 0E+3 -0E+3 -> 1 -ddsamq1319 samequantum 0E+3 0E-3 -> 0 -ddsamq1320 samequantum 0E+3 0 -> 0 -ddsamq1321 samequantum 0E+3 0E+3 -> 1 -ddsamq1322 samequantum 0E+3 7E-3 -> 0 -ddsamq1323 samequantum 0E+3 7 -> 0 -ddsamq1324 samequantum 0E+3 7E+3 -> 1 -ddsamq1325 samequantum 0E+3 sNaN -> 0 - -ddsamq1410 samequantum 7E-3 -Inf -> 0 -ddsamq1411 samequantum 7E-3 Inf -> 0 -ddsamq1412 samequantum 7E-3 NaN -> 0 -ddsamq1413 samequantum 7E-3 -7E+3 -> 0 -ddsamq1414 samequantum 7E-3 -7 -> 0 -ddsamq1415 samequantum 7E-3 -7E-3 -> 1 -ddsamq1416 samequantum 7E-3 -0E-3 -> 1 -ddsamq1417 samequantum 7E-3 -0 -> 0 -ddsamq1418 samequantum 7E-3 -0E+3 -> 0 -ddsamq1419 samequantum 7E-3 0E-3 -> 1 -ddsamq1420 samequantum 7E-3 0 -> 0 -ddsamq1421 samequantum 7E-3 0E+3 -> 0 -ddsamq1422 samequantum 7E-3 7E-3 -> 1 -ddsamq1423 samequantum 7E-3 7 -> 0 -ddsamq1424 samequantum 7E-3 7E+3 -> 0 -ddsamq1425 samequantum 7E-3 sNaN -> 0 - -ddsamq1510 samequantum 7 -Inf -> 0 -ddsamq1511 samequantum 7 Inf -> 0 -ddsamq1512 samequantum 7 NaN -> 0 -ddsamq1513 samequantum 7 -7E+3 -> 0 -ddsamq1514 samequantum 7 -7 -> 1 -ddsamq1515 samequantum 7 -7E-3 -> 0 -ddsamq1516 samequantum 7 -0E-3 -> 0 -ddsamq1517 samequantum 7 -0 -> 1 -ddsamq1518 samequantum 7 -0E+3 -> 0 -ddsamq1519 samequantum 7 0E-3 -> 0 -ddsamq1520 samequantum 7 0 -> 1 -ddsamq1521 samequantum 7 0E+3 -> 0 -ddsamq1522 samequantum 7 7E-3 -> 0 -ddsamq1523 samequantum 7 7 -> 1 -ddsamq1524 samequantum 7 7E+3 -> 0 -ddsamq1525 samequantum 7 sNaN -> 0 - -ddsamq1610 samequantum 7E+3 -Inf -> 0 -ddsamq1611 samequantum 7E+3 Inf -> 0 -ddsamq1612 samequantum 7E+3 NaN -> 0 -ddsamq1613 samequantum 7E+3 -7E+3 -> 1 -ddsamq1614 samequantum 7E+3 -7 -> 0 -ddsamq1615 samequantum 7E+3 -7E-3 -> 0 -ddsamq1616 samequantum 7E+3 -0E-3 -> 0 -ddsamq1617 samequantum 7E+3 -0 -> 0 -ddsamq1618 samequantum 7E+3 -0E+3 -> 1 -ddsamq1619 samequantum 7E+3 0E-3 -> 0 -ddsamq1620 samequantum 7E+3 0 -> 0 -ddsamq1621 samequantum 7E+3 0E+3 -> 1 -ddsamq1622 samequantum 7E+3 7E-3 -> 0 -ddsamq1623 samequantum 7E+3 7 -> 0 -ddsamq1624 samequantum 7E+3 7E+3 -> 1 -ddsamq1625 samequantum 7E+3 sNaN -> 0 - -ddsamq1710 samequantum sNaN -Inf -> 0 -ddsamq1711 samequantum sNaN Inf -> 0 -ddsamq1712 samequantum sNaN NaN -> 1 -ddsamq1713 samequantum sNaN -7E+3 -> 0 -ddsamq1714 samequantum sNaN -7 -> 0 -ddsamq1715 samequantum sNaN -7E-3 -> 0 -ddsamq1716 samequantum sNaN -0E-3 -> 0 -ddsamq1717 samequantum sNaN -0 -> 0 -ddsamq1718 samequantum sNaN -0E+3 -> 0 -ddsamq1719 samequantum sNaN 0E-3 -> 0 -ddsamq1720 samequantum sNaN 0 -> 0 -ddsamq1721 samequantum sNaN 0E+3 -> 0 -ddsamq1722 samequantum sNaN 7E-3 -> 0 -ddsamq1723 samequantum sNaN 7 -> 0 -ddsamq1724 samequantum sNaN 7E+3 -> 0 -ddsamq1725 samequantum sNaN sNaN -> 1 --- noisy NaNs -ddsamq1730 samequantum sNaN3 sNaN3 -> 1 -ddsamq1731 samequantum sNaN3 sNaN4 -> 1 -ddsamq1732 samequantum NaN3 NaN3 -> 1 -ddsamq1733 samequantum NaN3 NaN4 -> 1 -ddsamq1734 samequantum sNaN3 3 -> 0 -ddsamq1735 samequantum NaN3 3 -> 0 -ddsamq1736 samequantum 4 sNaN4 -> 0 -ddsamq1737 samequantum 3 NaN3 -> 0 -ddsamq1738 samequantum Inf sNaN4 -> 0 -ddsamq1739 samequantum -Inf NaN3 -> 0 - +------------------------------------------------------------------------ +-- ddSameQuantum.decTest -- check decDouble quantums match -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddsamq001 samequantum 0 0 -> 1 +ddsamq002 samequantum 0 1 -> 1 +ddsamq003 samequantum 1 0 -> 1 +ddsamq004 samequantum 1 1 -> 1 + +ddsamq011 samequantum 10 1E+1 -> 0 +ddsamq012 samequantum 10E+1 10E+1 -> 1 +ddsamq013 samequantum 100 10E+1 -> 0 +ddsamq014 samequantum 100 1E+2 -> 0 +ddsamq015 samequantum 0.1 1E-2 -> 0 +ddsamq016 samequantum 0.1 1E-1 -> 1 +ddsamq017 samequantum 0.1 1E-0 -> 0 +ddsamq018 samequantum 999 999 -> 1 +ddsamq019 samequantum 999E-1 99.9 -> 1 +ddsamq020 samequantum 111E-1 22.2 -> 1 +ddsamq021 samequantum 111E-1 1234.2 -> 1 + +-- zeros +ddsamq030 samequantum 0.0 1.1 -> 1 +ddsamq031 samequantum 0.0 1.11 -> 0 +ddsamq032 samequantum 0.0 0 -> 0 +ddsamq033 samequantum 0.0 0.0 -> 1 +ddsamq034 samequantum 0.0 0.00 -> 0 +ddsamq035 samequantum 0E+1 0E+0 -> 0 +ddsamq036 samequantum 0E+1 0E+1 -> 1 +ddsamq037 samequantum 0E+1 0E+2 -> 0 +ddsamq038 samequantum 0E-17 0E-16 -> 0 +ddsamq039 samequantum 0E-17 0E-17 -> 1 +ddsamq040 samequantum 0E-17 0E-18 -> 0 +ddsamq041 samequantum 0E-17 0.0E-15 -> 0 +ddsamq042 samequantum 0E-17 0.0E-16 -> 1 +ddsamq043 samequantum 0E-17 0.0E-17 -> 0 +ddsamq044 samequantum -0E-17 0.0E-16 -> 1 +ddsamq045 samequantum 0E-17 -0.0E-17 -> 0 +ddsamq046 samequantum 0E-17 -0.0E-16 -> 1 +ddsamq047 samequantum -0E-17 0.0E-17 -> 0 +ddsamq048 samequantum -0E-17 -0.0E-16 -> 1 +ddsamq049 samequantum -0E-17 -0.0E-17 -> 0 + +-- Nmax, Nmin, Ntiny +ddsamq051 samequantum 9.999999999999999E+384 9.999999999999999E+384 -> 1 +ddsamq052 samequantum 1E-383 1E-383 -> 1 +ddsamq053 samequantum 1.000000000000000E-383 1.000000000000000E-383 -> 1 +ddsamq054 samequantum 1E-398 1E-398 -> 1 +ddsamq055 samequantum 9.999999999999999E+384 9.999999999999999E+384 -> 1 +ddsamq056 samequantum 1E-383 1E-383 -> 1 +ddsamq057 samequantum 1.000000000000000E-383 1.000000000000000E-383 -> 1 +ddsamq058 samequantum 1E-398 1E-398 -> 1 + +ddsamq061 samequantum -1E-398 -1E-398 -> 1 +ddsamq062 samequantum -1.000000000000000E-383 -1.000000000000000E-383 -> 1 +ddsamq063 samequantum -1E-383 -1E-383 -> 1 +ddsamq064 samequantum -9.999999999999999E+384 -9.999999999999999E+384 -> 1 +ddsamq065 samequantum -1E-398 -1E-398 -> 1 +ddsamq066 samequantum -1.000000000000000E-383 -1.000000000000000E-383 -> 1 +ddsamq067 samequantum -1E-383 -1E-383 -> 1 +ddsamq068 samequantum -9.999999999999999E+384 -9.999999999999999E+384 -> 1 + +ddsamq071 samequantum -4E-398 -1E-398 -> 1 +ddsamq072 samequantum -4.000000000000000E-383 -1.000040000000000E-383 -> 1 +ddsamq073 samequantum -4E-383 -1E-383 -> 1 +ddsamq074 samequantum -4.999999999999999E+384 -9.999999999949999E+384 -> 1 +ddsamq075 samequantum -4E-398 -1E-398 -> 1 +ddsamq076 samequantum -4.000000000000000E-383 -1.004000000000000E-383 -> 1 +ddsamq077 samequantum -4E-383 -1E-383 -> 1 +ddsamq078 samequantum -4.999999999999999E+384 -9.949999999999999E+384 -> 1 + +ddsamq081 samequantum -4E-397 -1E-398 -> 0 +ddsamq082 samequantum -4.000000000000000E-383 -1.000040000000000E-336 -> 0 +ddsamq083 samequantum -4E-346 -1E-383 -> 0 +ddsamq084 samequantum -4.999999999999999E+384 -9.999499999999999E+336 -> 0 +ddsamq085 samequantum -4E-397 -1E-398 -> 0 +ddsamq086 samequantum -4.000000000000000E-383 -1.004000000000000E-336 -> 0 +ddsamq087 samequantum -4E-346 -1E-383 -> 0 +ddsamq088 samequantum -4.999999999999999E+384 -9.949999999999999E+336 -> 0 + +-- specials & combinations +ddsamq0110 samequantum -Inf -Inf -> 1 +ddsamq0111 samequantum -Inf Inf -> 1 +ddsamq0112 samequantum -Inf NaN -> 0 +ddsamq0113 samequantum -Inf -7E+3 -> 0 +ddsamq0114 samequantum -Inf -7 -> 0 +ddsamq0115 samequantum -Inf -7E-3 -> 0 +ddsamq0116 samequantum -Inf -0E-3 -> 0 +ddsamq0117 samequantum -Inf -0 -> 0 +ddsamq0118 samequantum -Inf -0E+3 -> 0 +ddsamq0119 samequantum -Inf 0E-3 -> 0 +ddsamq0120 samequantum -Inf 0 -> 0 +ddsamq0121 samequantum -Inf 0E+3 -> 0 +ddsamq0122 samequantum -Inf 7E-3 -> 0 +ddsamq0123 samequantum -Inf 7 -> 0 +ddsamq0124 samequantum -Inf 7E+3 -> 0 +ddsamq0125 samequantum -Inf sNaN -> 0 + +ddsamq0210 samequantum Inf -Inf -> 1 +ddsamq0211 samequantum Inf Inf -> 1 +ddsamq0212 samequantum Inf NaN -> 0 +ddsamq0213 samequantum Inf -7E+3 -> 0 +ddsamq0214 samequantum Inf -7 -> 0 +ddsamq0215 samequantum Inf -7E-3 -> 0 +ddsamq0216 samequantum Inf -0E-3 -> 0 +ddsamq0217 samequantum Inf -0 -> 0 +ddsamq0218 samequantum Inf -0E+3 -> 0 +ddsamq0219 samequantum Inf 0E-3 -> 0 +ddsamq0220 samequantum Inf 0 -> 0 +ddsamq0221 samequantum Inf 0E+3 -> 0 +ddsamq0222 samequantum Inf 7E-3 -> 0 +ddsamq0223 samequantum Inf 7 -> 0 +ddsamq0224 samequantum Inf 7E+3 -> 0 +ddsamq0225 samequantum Inf sNaN -> 0 + +ddsamq0310 samequantum NaN -Inf -> 0 +ddsamq0311 samequantum NaN Inf -> 0 +ddsamq0312 samequantum NaN NaN -> 1 +ddsamq0313 samequantum NaN -7E+3 -> 0 +ddsamq0314 samequantum NaN -7 -> 0 +ddsamq0315 samequantum NaN -7E-3 -> 0 +ddsamq0316 samequantum NaN -0E-3 -> 0 +ddsamq0317 samequantum NaN -0 -> 0 +ddsamq0318 samequantum NaN -0E+3 -> 0 +ddsamq0319 samequantum NaN 0E-3 -> 0 +ddsamq0320 samequantum NaN 0 -> 0 +ddsamq0321 samequantum NaN 0E+3 -> 0 +ddsamq0322 samequantum NaN 7E-3 -> 0 +ddsamq0323 samequantum NaN 7 -> 0 +ddsamq0324 samequantum NaN 7E+3 -> 0 +ddsamq0325 samequantum NaN sNaN -> 1 + +ddsamq0410 samequantum -7E+3 -Inf -> 0 +ddsamq0411 samequantum -7E+3 Inf -> 0 +ddsamq0412 samequantum -7E+3 NaN -> 0 +ddsamq0413 samequantum -7E+3 -7E+3 -> 1 +ddsamq0414 samequantum -7E+3 -7 -> 0 +ddsamq0415 samequantum -7E+3 -7E-3 -> 0 +ddsamq0416 samequantum -7E+3 -0E-3 -> 0 +ddsamq0417 samequantum -7E+3 -0 -> 0 +ddsamq0418 samequantum -7E+3 -0E+3 -> 1 +ddsamq0419 samequantum -7E+3 0E-3 -> 0 +ddsamq0420 samequantum -7E+3 0 -> 0 +ddsamq0421 samequantum -7E+3 0E+3 -> 1 +ddsamq0422 samequantum -7E+3 7E-3 -> 0 +ddsamq0423 samequantum -7E+3 7 -> 0 +ddsamq0424 samequantum -7E+3 7E+3 -> 1 +ddsamq0425 samequantum -7E+3 sNaN -> 0 + +ddsamq0510 samequantum -7 -Inf -> 0 +ddsamq0511 samequantum -7 Inf -> 0 +ddsamq0512 samequantum -7 NaN -> 0 +ddsamq0513 samequantum -7 -7E+3 -> 0 +ddsamq0514 samequantum -7 -7 -> 1 +ddsamq0515 samequantum -7 -7E-3 -> 0 +ddsamq0516 samequantum -7 -0E-3 -> 0 +ddsamq0517 samequantum -7 -0 -> 1 +ddsamq0518 samequantum -7 -0E+3 -> 0 +ddsamq0519 samequantum -7 0E-3 -> 0 +ddsamq0520 samequantum -7 0 -> 1 +ddsamq0521 samequantum -7 0E+3 -> 0 +ddsamq0522 samequantum -7 7E-3 -> 0 +ddsamq0523 samequantum -7 7 -> 1 +ddsamq0524 samequantum -7 7E+3 -> 0 +ddsamq0525 samequantum -7 sNaN -> 0 + +ddsamq0610 samequantum -7E-3 -Inf -> 0 +ddsamq0611 samequantum -7E-3 Inf -> 0 +ddsamq0612 samequantum -7E-3 NaN -> 0 +ddsamq0613 samequantum -7E-3 -7E+3 -> 0 +ddsamq0614 samequantum -7E-3 -7 -> 0 +ddsamq0615 samequantum -7E-3 -7E-3 -> 1 +ddsamq0616 samequantum -7E-3 -0E-3 -> 1 +ddsamq0617 samequantum -7E-3 -0 -> 0 +ddsamq0618 samequantum -7E-3 -0E+3 -> 0 +ddsamq0619 samequantum -7E-3 0E-3 -> 1 +ddsamq0620 samequantum -7E-3 0 -> 0 +ddsamq0621 samequantum -7E-3 0E+3 -> 0 +ddsamq0622 samequantum -7E-3 7E-3 -> 1 +ddsamq0623 samequantum -7E-3 7 -> 0 +ddsamq0624 samequantum -7E-3 7E+3 -> 0 +ddsamq0625 samequantum -7E-3 sNaN -> 0 + +ddsamq0710 samequantum -0E-3 -Inf -> 0 +ddsamq0711 samequantum -0E-3 Inf -> 0 +ddsamq0712 samequantum -0E-3 NaN -> 0 +ddsamq0713 samequantum -0E-3 -7E+3 -> 0 +ddsamq0714 samequantum -0E-3 -7 -> 0 +ddsamq0715 samequantum -0E-3 -7E-3 -> 1 +ddsamq0716 samequantum -0E-3 -0E-3 -> 1 +ddsamq0717 samequantum -0E-3 -0 -> 0 +ddsamq0718 samequantum -0E-3 -0E+3 -> 0 +ddsamq0719 samequantum -0E-3 0E-3 -> 1 +ddsamq0720 samequantum -0E-3 0 -> 0 +ddsamq0721 samequantum -0E-3 0E+3 -> 0 +ddsamq0722 samequantum -0E-3 7E-3 -> 1 +ddsamq0723 samequantum -0E-3 7 -> 0 +ddsamq0724 samequantum -0E-3 7E+3 -> 0 +ddsamq0725 samequantum -0E-3 sNaN -> 0 + +ddsamq0810 samequantum -0 -Inf -> 0 +ddsamq0811 samequantum -0 Inf -> 0 +ddsamq0812 samequantum -0 NaN -> 0 +ddsamq0813 samequantum -0 -7E+3 -> 0 +ddsamq0814 samequantum -0 -7 -> 1 +ddsamq0815 samequantum -0 -7E-3 -> 0 +ddsamq0816 samequantum -0 -0E-3 -> 0 +ddsamq0817 samequantum -0 -0 -> 1 +ddsamq0818 samequantum -0 -0E+3 -> 0 +ddsamq0819 samequantum -0 0E-3 -> 0 +ddsamq0820 samequantum -0 0 -> 1 +ddsamq0821 samequantum -0 0E+3 -> 0 +ddsamq0822 samequantum -0 7E-3 -> 0 +ddsamq0823 samequantum -0 7 -> 1 +ddsamq0824 samequantum -0 7E+3 -> 0 +ddsamq0825 samequantum -0 sNaN -> 0 + +ddsamq0910 samequantum -0E+3 -Inf -> 0 +ddsamq0911 samequantum -0E+3 Inf -> 0 +ddsamq0912 samequantum -0E+3 NaN -> 0 +ddsamq0913 samequantum -0E+3 -7E+3 -> 1 +ddsamq0914 samequantum -0E+3 -7 -> 0 +ddsamq0915 samequantum -0E+3 -7E-3 -> 0 +ddsamq0916 samequantum -0E+3 -0E-3 -> 0 +ddsamq0917 samequantum -0E+3 -0 -> 0 +ddsamq0918 samequantum -0E+3 -0E+3 -> 1 +ddsamq0919 samequantum -0E+3 0E-3 -> 0 +ddsamq0920 samequantum -0E+3 0 -> 0 +ddsamq0921 samequantum -0E+3 0E+3 -> 1 +ddsamq0922 samequantum -0E+3 7E-3 -> 0 +ddsamq0923 samequantum -0E+3 7 -> 0 +ddsamq0924 samequantum -0E+3 7E+3 -> 1 +ddsamq0925 samequantum -0E+3 sNaN -> 0 + +ddsamq1110 samequantum 0E-3 -Inf -> 0 +ddsamq1111 samequantum 0E-3 Inf -> 0 +ddsamq1112 samequantum 0E-3 NaN -> 0 +ddsamq1113 samequantum 0E-3 -7E+3 -> 0 +ddsamq1114 samequantum 0E-3 -7 -> 0 +ddsamq1115 samequantum 0E-3 -7E-3 -> 1 +ddsamq1116 samequantum 0E-3 -0E-3 -> 1 +ddsamq1117 samequantum 0E-3 -0 -> 0 +ddsamq1118 samequantum 0E-3 -0E+3 -> 0 +ddsamq1119 samequantum 0E-3 0E-3 -> 1 +ddsamq1120 samequantum 0E-3 0 -> 0 +ddsamq1121 samequantum 0E-3 0E+3 -> 0 +ddsamq1122 samequantum 0E-3 7E-3 -> 1 +ddsamq1123 samequantum 0E-3 7 -> 0 +ddsamq1124 samequantum 0E-3 7E+3 -> 0 +ddsamq1125 samequantum 0E-3 sNaN -> 0 + +ddsamq1210 samequantum 0 -Inf -> 0 +ddsamq1211 samequantum 0 Inf -> 0 +ddsamq1212 samequantum 0 NaN -> 0 +ddsamq1213 samequantum 0 -7E+3 -> 0 +ddsamq1214 samequantum 0 -7 -> 1 +ddsamq1215 samequantum 0 -7E-3 -> 0 +ddsamq1216 samequantum 0 -0E-3 -> 0 +ddsamq1217 samequantum 0 -0 -> 1 +ddsamq1218 samequantum 0 -0E+3 -> 0 +ddsamq1219 samequantum 0 0E-3 -> 0 +ddsamq1220 samequantum 0 0 -> 1 +ddsamq1221 samequantum 0 0E+3 -> 0 +ddsamq1222 samequantum 0 7E-3 -> 0 +ddsamq1223 samequantum 0 7 -> 1 +ddsamq1224 samequantum 0 7E+3 -> 0 +ddsamq1225 samequantum 0 sNaN -> 0 + +ddsamq1310 samequantum 0E+3 -Inf -> 0 +ddsamq1311 samequantum 0E+3 Inf -> 0 +ddsamq1312 samequantum 0E+3 NaN -> 0 +ddsamq1313 samequantum 0E+3 -7E+3 -> 1 +ddsamq1314 samequantum 0E+3 -7 -> 0 +ddsamq1315 samequantum 0E+3 -7E-3 -> 0 +ddsamq1316 samequantum 0E+3 -0E-3 -> 0 +ddsamq1317 samequantum 0E+3 -0 -> 0 +ddsamq1318 samequantum 0E+3 -0E+3 -> 1 +ddsamq1319 samequantum 0E+3 0E-3 -> 0 +ddsamq1320 samequantum 0E+3 0 -> 0 +ddsamq1321 samequantum 0E+3 0E+3 -> 1 +ddsamq1322 samequantum 0E+3 7E-3 -> 0 +ddsamq1323 samequantum 0E+3 7 -> 0 +ddsamq1324 samequantum 0E+3 7E+3 -> 1 +ddsamq1325 samequantum 0E+3 sNaN -> 0 + +ddsamq1410 samequantum 7E-3 -Inf -> 0 +ddsamq1411 samequantum 7E-3 Inf -> 0 +ddsamq1412 samequantum 7E-3 NaN -> 0 +ddsamq1413 samequantum 7E-3 -7E+3 -> 0 +ddsamq1414 samequantum 7E-3 -7 -> 0 +ddsamq1415 samequantum 7E-3 -7E-3 -> 1 +ddsamq1416 samequantum 7E-3 -0E-3 -> 1 +ddsamq1417 samequantum 7E-3 -0 -> 0 +ddsamq1418 samequantum 7E-3 -0E+3 -> 0 +ddsamq1419 samequantum 7E-3 0E-3 -> 1 +ddsamq1420 samequantum 7E-3 0 -> 0 +ddsamq1421 samequantum 7E-3 0E+3 -> 0 +ddsamq1422 samequantum 7E-3 7E-3 -> 1 +ddsamq1423 samequantum 7E-3 7 -> 0 +ddsamq1424 samequantum 7E-3 7E+3 -> 0 +ddsamq1425 samequantum 7E-3 sNaN -> 0 + +ddsamq1510 samequantum 7 -Inf -> 0 +ddsamq1511 samequantum 7 Inf -> 0 +ddsamq1512 samequantum 7 NaN -> 0 +ddsamq1513 samequantum 7 -7E+3 -> 0 +ddsamq1514 samequantum 7 -7 -> 1 +ddsamq1515 samequantum 7 -7E-3 -> 0 +ddsamq1516 samequantum 7 -0E-3 -> 0 +ddsamq1517 samequantum 7 -0 -> 1 +ddsamq1518 samequantum 7 -0E+3 -> 0 +ddsamq1519 samequantum 7 0E-3 -> 0 +ddsamq1520 samequantum 7 0 -> 1 +ddsamq1521 samequantum 7 0E+3 -> 0 +ddsamq1522 samequantum 7 7E-3 -> 0 +ddsamq1523 samequantum 7 7 -> 1 +ddsamq1524 samequantum 7 7E+3 -> 0 +ddsamq1525 samequantum 7 sNaN -> 0 + +ddsamq1610 samequantum 7E+3 -Inf -> 0 +ddsamq1611 samequantum 7E+3 Inf -> 0 +ddsamq1612 samequantum 7E+3 NaN -> 0 +ddsamq1613 samequantum 7E+3 -7E+3 -> 1 +ddsamq1614 samequantum 7E+3 -7 -> 0 +ddsamq1615 samequantum 7E+3 -7E-3 -> 0 +ddsamq1616 samequantum 7E+3 -0E-3 -> 0 +ddsamq1617 samequantum 7E+3 -0 -> 0 +ddsamq1618 samequantum 7E+3 -0E+3 -> 1 +ddsamq1619 samequantum 7E+3 0E-3 -> 0 +ddsamq1620 samequantum 7E+3 0 -> 0 +ddsamq1621 samequantum 7E+3 0E+3 -> 1 +ddsamq1622 samequantum 7E+3 7E-3 -> 0 +ddsamq1623 samequantum 7E+3 7 -> 0 +ddsamq1624 samequantum 7E+3 7E+3 -> 1 +ddsamq1625 samequantum 7E+3 sNaN -> 0 + +ddsamq1710 samequantum sNaN -Inf -> 0 +ddsamq1711 samequantum sNaN Inf -> 0 +ddsamq1712 samequantum sNaN NaN -> 1 +ddsamq1713 samequantum sNaN -7E+3 -> 0 +ddsamq1714 samequantum sNaN -7 -> 0 +ddsamq1715 samequantum sNaN -7E-3 -> 0 +ddsamq1716 samequantum sNaN -0E-3 -> 0 +ddsamq1717 samequantum sNaN -0 -> 0 +ddsamq1718 samequantum sNaN -0E+3 -> 0 +ddsamq1719 samequantum sNaN 0E-3 -> 0 +ddsamq1720 samequantum sNaN 0 -> 0 +ddsamq1721 samequantum sNaN 0E+3 -> 0 +ddsamq1722 samequantum sNaN 7E-3 -> 0 +ddsamq1723 samequantum sNaN 7 -> 0 +ddsamq1724 samequantum sNaN 7E+3 -> 0 +ddsamq1725 samequantum sNaN sNaN -> 1 +-- noisy NaNs +ddsamq1730 samequantum sNaN3 sNaN3 -> 1 +ddsamq1731 samequantum sNaN3 sNaN4 -> 1 +ddsamq1732 samequantum NaN3 NaN3 -> 1 +ddsamq1733 samequantum NaN3 NaN4 -> 1 +ddsamq1734 samequantum sNaN3 3 -> 0 +ddsamq1735 samequantum NaN3 3 -> 0 +ddsamq1736 samequantum 4 sNaN4 -> 0 +ddsamq1737 samequantum 3 NaN3 -> 0 +ddsamq1738 samequantum Inf sNaN4 -> 0 +ddsamq1739 samequantum -Inf NaN3 -> 0 + diff --git a/Lib/test/decimaltestdata/ddScaleB.decTest b/Lib/test/decimaltestdata/ddScaleB.decTest index 6ba3e3976f8..edee11bccc9 100644 --- a/Lib/test/decimaltestdata/ddScaleB.decTest +++ b/Lib/test/decimaltestdata/ddScaleB.decTest @@ -1,243 +1,243 @@ ------------------------------------------------------------------------- --- ddScalebB.decTest -- scale a decDouble by powers of 10 -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Max |rhs| is 2*(384+16) = 800 - --- Sanity checks -ddscb001 scaleb 7.50 10 -> 7.50E+10 -ddscb002 scaleb 7.50 3 -> 7.50E+3 -ddscb003 scaleb 7.50 2 -> 750 -ddscb004 scaleb 7.50 1 -> 75.0 -ddscb005 scaleb 7.50 0 -> 7.50 -ddscb006 scaleb 7.50 -1 -> 0.750 -ddscb007 scaleb 7.50 -2 -> 0.0750 -ddscb008 scaleb 7.50 -10 -> 7.50E-10 -ddscb009 scaleb -7.50 3 -> -7.50E+3 -ddscb010 scaleb -7.50 2 -> -750 -ddscb011 scaleb -7.50 1 -> -75.0 -ddscb012 scaleb -7.50 0 -> -7.50 -ddscb013 scaleb -7.50 -1 -> -0.750 - --- Infinities -ddscb014 scaleb Infinity 1 -> Infinity -ddscb015 scaleb -Infinity 2 -> -Infinity -ddscb016 scaleb Infinity -1 -> Infinity -ddscb017 scaleb -Infinity -2 -> -Infinity - --- Next two are somewhat undefined in 754r; treat as non-integer -ddscb018 scaleb 10 Infinity -> NaN Invalid_operation -ddscb019 scaleb 10 -Infinity -> NaN Invalid_operation - --- NaNs are undefined in 754r; assume usual processing --- NaNs, 0 payload -ddscb021 scaleb NaN 1 -> NaN -ddscb022 scaleb -NaN -1 -> -NaN -ddscb023 scaleb sNaN 1 -> NaN Invalid_operation -ddscb024 scaleb -sNaN 1 -> -NaN Invalid_operation -ddscb025 scaleb 4 NaN -> NaN -ddscb026 scaleb -Inf -NaN -> -NaN -ddscb027 scaleb 4 sNaN -> NaN Invalid_operation -ddscb028 scaleb Inf -sNaN -> -NaN Invalid_operation - --- non-integer RHS -ddscb030 scaleb 1.23 1 -> 12.3 -ddscb031 scaleb 1.23 1.00 -> NaN Invalid_operation -ddscb032 scaleb 1.23 1.1 -> NaN Invalid_operation -ddscb033 scaleb 1.23 1.01 -> NaN Invalid_operation -ddscb034 scaleb 1.23 0.01 -> NaN Invalid_operation -ddscb035 scaleb 1.23 0.11 -> NaN Invalid_operation -ddscb036 scaleb 1.23 0.999999999 -> NaN Invalid_operation -ddscb037 scaleb 1.23 -1 -> 0.123 -ddscb038 scaleb 1.23 -1.00 -> NaN Invalid_operation -ddscb039 scaleb 1.23 -1.1 -> NaN Invalid_operation -ddscb040 scaleb 1.23 -1.01 -> NaN Invalid_operation -ddscb041 scaleb 1.23 -0.01 -> NaN Invalid_operation -ddscb042 scaleb 1.23 -0.11 -> NaN Invalid_operation -ddscb043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation -ddscb044 scaleb 1.23 0.1 -> NaN Invalid_operation -ddscb045 scaleb 1.23 1E+1 -> NaN Invalid_operation -ddscb046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation -ddscb047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation - --- out-of range RHS -ddscb120 scaleb 1.23 799 -> Infinity Overflow Inexact Rounded -ddscb121 scaleb 1.23 800 -> Infinity Overflow Inexact Rounded -ddscb122 scaleb 1.23 801 -> NaN Invalid_operation -ddscb123 scaleb 1.23 802 -> NaN Invalid_operation -ddscb124 scaleb 1.23 -799 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddscb125 scaleb 1.23 -800 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddscb126 scaleb 1.23 -801 -> NaN Invalid_operation -ddscb127 scaleb 1.23 -802 -> NaN Invalid_operation - --- NaNs, non-0 payload --- propagating NaNs -ddscb861 scaleb NaN01 -Inf -> NaN1 -ddscb862 scaleb -NaN02 -1000 -> -NaN2 -ddscb863 scaleb NaN03 1000 -> NaN3 -ddscb864 scaleb NaN04 Inf -> NaN4 -ddscb865 scaleb NaN05 NaN61 -> NaN5 -ddscb866 scaleb -Inf -NaN71 -> -NaN71 -ddscb867 scaleb -1000 NaN81 -> NaN81 -ddscb868 scaleb 1000 NaN91 -> NaN91 -ddscb869 scaleb Inf NaN101 -> NaN101 -ddscb871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation -ddscb872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation -ddscb873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation -ddscb874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation -ddscb875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation -ddscb876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation -ddscb877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation -ddscb878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation -ddscb879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation -ddscb880 scaleb Inf sNaN231 -> NaN231 Invalid_operation -ddscb881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation - --- finites -ddscb051 scaleb 7 -2 -> 0.07 -ddscb052 scaleb -7 -2 -> -0.07 -ddscb053 scaleb 75 -2 -> 0.75 -ddscb054 scaleb -75 -2 -> -0.75 -ddscb055 scaleb 7.50 -2 -> 0.0750 -ddscb056 scaleb -7.50 -2 -> -0.0750 -ddscb057 scaleb 7.500 -2 -> 0.07500 -ddscb058 scaleb -7.500 -2 -> -0.07500 -ddscb061 scaleb 7 -1 -> 0.7 -ddscb062 scaleb -7 -1 -> -0.7 -ddscb063 scaleb 75 -1 -> 7.5 -ddscb064 scaleb -75 -1 -> -7.5 -ddscb065 scaleb 7.50 -1 -> 0.750 -ddscb066 scaleb -7.50 -1 -> -0.750 -ddscb067 scaleb 7.500 -1 -> 0.7500 -ddscb068 scaleb -7.500 -1 -> -0.7500 -ddscb071 scaleb 7 0 -> 7 -ddscb072 scaleb -7 0 -> -7 -ddscb073 scaleb 75 0 -> 75 -ddscb074 scaleb -75 0 -> -75 -ddscb075 scaleb 7.50 0 -> 7.50 -ddscb076 scaleb -7.50 0 -> -7.50 -ddscb077 scaleb 7.500 0 -> 7.500 -ddscb078 scaleb -7.500 0 -> -7.500 -ddscb081 scaleb 7 1 -> 7E+1 -ddscb082 scaleb -7 1 -> -7E+1 -ddscb083 scaleb 75 1 -> 7.5E+2 -ddscb084 scaleb -75 1 -> -7.5E+2 -ddscb085 scaleb 7.50 1 -> 75.0 -ddscb086 scaleb -7.50 1 -> -75.0 -ddscb087 scaleb 7.500 1 -> 75.00 -ddscb088 scaleb -7.500 1 -> -75.00 -ddscb091 scaleb 7 2 -> 7E+2 -ddscb092 scaleb -7 2 -> -7E+2 -ddscb093 scaleb 75 2 -> 7.5E+3 -ddscb094 scaleb -75 2 -> -7.5E+3 -ddscb095 scaleb 7.50 2 -> 750 -ddscb096 scaleb -7.50 2 -> -750 -ddscb097 scaleb 7.500 2 -> 750.0 -ddscb098 scaleb -7.500 2 -> -750.0 - --- zeros -ddscb111 scaleb 0 1 -> 0E+1 -ddscb112 scaleb -0 2 -> -0E+2 -ddscb113 scaleb 0E+4 3 -> 0E+7 -ddscb114 scaleb -0E+4 4 -> -0E+8 -ddscb115 scaleb 0.0000 5 -> 0E+1 -ddscb116 scaleb -0.0000 6 -> -0E+2 -ddscb117 scaleb 0E-141 7 -> 0E-134 -ddscb118 scaleb -0E-141 8 -> -0E-133 - --- Nmax, Nmin, Ntiny -ddscb132 scaleb 9.999999999999999E+384 +384 -> Infinity Overflow Inexact Rounded -ddscb133 scaleb 9.999999999999999E+384 +10 -> Infinity Overflow Inexact Rounded -ddscb134 scaleb 9.999999999999999E+384 +1 -> Infinity Overflow Inexact Rounded -ddscb135 scaleb 9.999999999999999E+384 0 -> 9.999999999999999E+384 -ddscb136 scaleb 9.999999999999999E+384 -1 -> 9.999999999999999E+383 -ddscb137 scaleb 1E-383 +1 -> 1E-382 -ddscb138 scaleb 1E-383 -0 -> 1E-383 -ddscb139 scaleb 1E-383 -1 -> 1E-384 Subnormal -ddscb140 scaleb 1.000000000000000E-383 +1 -> 1.000000000000000E-382 -ddscb141 scaleb 1.000000000000000E-383 0 -> 1.000000000000000E-383 -ddscb142 scaleb 1.000000000000000E-383 -1 -> 1.00000000000000E-384 Subnormal Rounded -ddscb143 scaleb 1E-398 +1 -> 1E-397 Subnormal -ddscb144 scaleb 1E-398 -0 -> 1E-398 Subnormal -ddscb145 scaleb 1E-398 -1 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - -ddscb150 scaleb -1E-398 +1 -> -1E-397 Subnormal -ddscb151 scaleb -1E-398 -0 -> -1E-398 Subnormal -ddscb152 scaleb -1E-398 -1 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddscb153 scaleb -1.000000000000000E-383 +1 -> -1.000000000000000E-382 -ddscb154 scaleb -1.000000000000000E-383 +0 -> -1.000000000000000E-383 -ddscb155 scaleb -1.000000000000000E-383 -1 -> -1.00000000000000E-384 Subnormal Rounded -ddscb156 scaleb -1E-383 +1 -> -1E-382 -ddscb157 scaleb -1E-383 -0 -> -1E-383 -ddscb158 scaleb -1E-383 -1 -> -1E-384 Subnormal -ddscb159 scaleb -9.999999999999999E+384 +1 -> -Infinity Overflow Inexact Rounded -ddscb160 scaleb -9.999999999999999E+384 +0 -> -9.999999999999999E+384 -ddscb161 scaleb -9.999999999999999E+384 -1 -> -9.999999999999999E+383 -ddscb162 scaleb -9E+384 +1 -> -Infinity Overflow Inexact Rounded -ddscb163 scaleb -1E+384 +1 -> -Infinity Overflow Inexact Rounded - --- some Origami --- (these check that overflow is being done correctly) -ddscb171 scaleb 1000E+365 +1 -> 1.000E+369 -ddscb172 scaleb 1000E+366 +1 -> 1.000E+370 -ddscb173 scaleb 1000E+367 +1 -> 1.000E+371 -ddscb174 scaleb 1000E+368 +1 -> 1.000E+372 -ddscb175 scaleb 1000E+369 +1 -> 1.0000E+373 Clamped -ddscb176 scaleb 1000E+370 +1 -> 1.00000E+374 Clamped -ddscb177 scaleb 1000E+371 +1 -> 1.000000E+375 Clamped -ddscb178 scaleb 1000E+372 +1 -> 1.0000000E+376 Clamped -ddscb179 scaleb 1000E+373 +1 -> 1.00000000E+377 Clamped -ddscb180 scaleb 1000E+374 +1 -> 1.000000000E+378 Clamped -ddscb181 scaleb 1000E+375 +1 -> 1.0000000000E+379 Clamped -ddscb182 scaleb 1000E+376 +1 -> 1.00000000000E+380 Clamped -ddscb183 scaleb 1000E+377 +1 -> 1.000000000000E+381 Clamped -ddscb184 scaleb 1000E+378 +1 -> 1.0000000000000E+382 Clamped -ddscb185 scaleb 1000E+379 +1 -> 1.00000000000000E+383 Clamped -ddscb186 scaleb 1000E+380 +1 -> 1.000000000000000E+384 Clamped -ddscb187 scaleb 1000E+381 +1 -> Infinity Overflow Inexact Rounded - --- and a few more subnormal truncations --- (these check that underflow is being done correctly) -ddscb201 scaleb 1.000000000000000E-383 0 -> 1.000000000000000E-383 -ddscb202 scaleb 1.000000000000000E-383 -1 -> 1.00000000000000E-384 Subnormal Rounded -ddscb203 scaleb 1.000000000000000E-383 -2 -> 1.0000000000000E-385 Subnormal Rounded -ddscb204 scaleb 1.000000000000000E-383 -3 -> 1.000000000000E-386 Subnormal Rounded -ddscb205 scaleb 1.000000000000000E-383 -4 -> 1.00000000000E-387 Subnormal Rounded -ddscb206 scaleb 1.000000000000000E-383 -5 -> 1.0000000000E-388 Subnormal Rounded -ddscb207 scaleb 1.000000000000000E-383 -6 -> 1.000000000E-389 Subnormal Rounded -ddscb208 scaleb 1.000000000000000E-383 -7 -> 1.00000000E-390 Subnormal Rounded -ddscb209 scaleb 1.000000000000000E-383 -8 -> 1.0000000E-391 Subnormal Rounded -ddscb210 scaleb 1.000000000000000E-383 -9 -> 1.000000E-392 Subnormal Rounded -ddscb211 scaleb 1.000000000000000E-383 -10 -> 1.00000E-393 Subnormal Rounded -ddscb212 scaleb 1.000000000000000E-383 -11 -> 1.0000E-394 Subnormal Rounded -ddscb213 scaleb 1.000000000000000E-383 -12 -> 1.000E-395 Subnormal Rounded -ddscb214 scaleb 1.000000000000000E-383 -13 -> 1.00E-396 Subnormal Rounded -ddscb215 scaleb 1.000000000000000E-383 -14 -> 1.0E-397 Subnormal Rounded -ddscb216 scaleb 1.000000000000000E-383 -15 -> 1E-398 Subnormal Rounded -ddscb217 scaleb 1.000000000000000E-383 -16 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddscb218 scaleb 1.000000000000000E-383 -17 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - +------------------------------------------------------------------------ +-- ddScalebB.decTest -- scale a decDouble by powers of 10 -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Max |rhs| is 2*(384+16) = 800 + +-- Sanity checks +ddscb001 scaleb 7.50 10 -> 7.50E+10 +ddscb002 scaleb 7.50 3 -> 7.50E+3 +ddscb003 scaleb 7.50 2 -> 750 +ddscb004 scaleb 7.50 1 -> 75.0 +ddscb005 scaleb 7.50 0 -> 7.50 +ddscb006 scaleb 7.50 -1 -> 0.750 +ddscb007 scaleb 7.50 -2 -> 0.0750 +ddscb008 scaleb 7.50 -10 -> 7.50E-10 +ddscb009 scaleb -7.50 3 -> -7.50E+3 +ddscb010 scaleb -7.50 2 -> -750 +ddscb011 scaleb -7.50 1 -> -75.0 +ddscb012 scaleb -7.50 0 -> -7.50 +ddscb013 scaleb -7.50 -1 -> -0.750 + +-- Infinities +ddscb014 scaleb Infinity 1 -> Infinity +ddscb015 scaleb -Infinity 2 -> -Infinity +ddscb016 scaleb Infinity -1 -> Infinity +ddscb017 scaleb -Infinity -2 -> -Infinity + +-- Next two are somewhat undefined in 754r; treat as non-integer +ddscb018 scaleb 10 Infinity -> NaN Invalid_operation +ddscb019 scaleb 10 -Infinity -> NaN Invalid_operation + +-- NaNs are undefined in 754r; assume usual processing +-- NaNs, 0 payload +ddscb021 scaleb NaN 1 -> NaN +ddscb022 scaleb -NaN -1 -> -NaN +ddscb023 scaleb sNaN 1 -> NaN Invalid_operation +ddscb024 scaleb -sNaN 1 -> -NaN Invalid_operation +ddscb025 scaleb 4 NaN -> NaN +ddscb026 scaleb -Inf -NaN -> -NaN +ddscb027 scaleb 4 sNaN -> NaN Invalid_operation +ddscb028 scaleb Inf -sNaN -> -NaN Invalid_operation + +-- non-integer RHS +ddscb030 scaleb 1.23 1 -> 12.3 +ddscb031 scaleb 1.23 1.00 -> NaN Invalid_operation +ddscb032 scaleb 1.23 1.1 -> NaN Invalid_operation +ddscb033 scaleb 1.23 1.01 -> NaN Invalid_operation +ddscb034 scaleb 1.23 0.01 -> NaN Invalid_operation +ddscb035 scaleb 1.23 0.11 -> NaN Invalid_operation +ddscb036 scaleb 1.23 0.999999999 -> NaN Invalid_operation +ddscb037 scaleb 1.23 -1 -> 0.123 +ddscb038 scaleb 1.23 -1.00 -> NaN Invalid_operation +ddscb039 scaleb 1.23 -1.1 -> NaN Invalid_operation +ddscb040 scaleb 1.23 -1.01 -> NaN Invalid_operation +ddscb041 scaleb 1.23 -0.01 -> NaN Invalid_operation +ddscb042 scaleb 1.23 -0.11 -> NaN Invalid_operation +ddscb043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation +ddscb044 scaleb 1.23 0.1 -> NaN Invalid_operation +ddscb045 scaleb 1.23 1E+1 -> NaN Invalid_operation +ddscb046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation +ddscb047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation + +-- out-of range RHS +ddscb120 scaleb 1.23 799 -> Infinity Overflow Inexact Rounded +ddscb121 scaleb 1.23 800 -> Infinity Overflow Inexact Rounded +ddscb122 scaleb 1.23 801 -> NaN Invalid_operation +ddscb123 scaleb 1.23 802 -> NaN Invalid_operation +ddscb124 scaleb 1.23 -799 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddscb125 scaleb 1.23 -800 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddscb126 scaleb 1.23 -801 -> NaN Invalid_operation +ddscb127 scaleb 1.23 -802 -> NaN Invalid_operation + +-- NaNs, non-0 payload +-- propagating NaNs +ddscb861 scaleb NaN01 -Inf -> NaN1 +ddscb862 scaleb -NaN02 -1000 -> -NaN2 +ddscb863 scaleb NaN03 1000 -> NaN3 +ddscb864 scaleb NaN04 Inf -> NaN4 +ddscb865 scaleb NaN05 NaN61 -> NaN5 +ddscb866 scaleb -Inf -NaN71 -> -NaN71 +ddscb867 scaleb -1000 NaN81 -> NaN81 +ddscb868 scaleb 1000 NaN91 -> NaN91 +ddscb869 scaleb Inf NaN101 -> NaN101 +ddscb871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation +ddscb872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation +ddscb873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation +ddscb874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation +ddscb875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation +ddscb876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation +ddscb877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation +ddscb878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation +ddscb879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation +ddscb880 scaleb Inf sNaN231 -> NaN231 Invalid_operation +ddscb881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation + +-- finites +ddscb051 scaleb 7 -2 -> 0.07 +ddscb052 scaleb -7 -2 -> -0.07 +ddscb053 scaleb 75 -2 -> 0.75 +ddscb054 scaleb -75 -2 -> -0.75 +ddscb055 scaleb 7.50 -2 -> 0.0750 +ddscb056 scaleb -7.50 -2 -> -0.0750 +ddscb057 scaleb 7.500 -2 -> 0.07500 +ddscb058 scaleb -7.500 -2 -> -0.07500 +ddscb061 scaleb 7 -1 -> 0.7 +ddscb062 scaleb -7 -1 -> -0.7 +ddscb063 scaleb 75 -1 -> 7.5 +ddscb064 scaleb -75 -1 -> -7.5 +ddscb065 scaleb 7.50 -1 -> 0.750 +ddscb066 scaleb -7.50 -1 -> -0.750 +ddscb067 scaleb 7.500 -1 -> 0.7500 +ddscb068 scaleb -7.500 -1 -> -0.7500 +ddscb071 scaleb 7 0 -> 7 +ddscb072 scaleb -7 0 -> -7 +ddscb073 scaleb 75 0 -> 75 +ddscb074 scaleb -75 0 -> -75 +ddscb075 scaleb 7.50 0 -> 7.50 +ddscb076 scaleb -7.50 0 -> -7.50 +ddscb077 scaleb 7.500 0 -> 7.500 +ddscb078 scaleb -7.500 0 -> -7.500 +ddscb081 scaleb 7 1 -> 7E+1 +ddscb082 scaleb -7 1 -> -7E+1 +ddscb083 scaleb 75 1 -> 7.5E+2 +ddscb084 scaleb -75 1 -> -7.5E+2 +ddscb085 scaleb 7.50 1 -> 75.0 +ddscb086 scaleb -7.50 1 -> -75.0 +ddscb087 scaleb 7.500 1 -> 75.00 +ddscb088 scaleb -7.500 1 -> -75.00 +ddscb091 scaleb 7 2 -> 7E+2 +ddscb092 scaleb -7 2 -> -7E+2 +ddscb093 scaleb 75 2 -> 7.5E+3 +ddscb094 scaleb -75 2 -> -7.5E+3 +ddscb095 scaleb 7.50 2 -> 750 +ddscb096 scaleb -7.50 2 -> -750 +ddscb097 scaleb 7.500 2 -> 750.0 +ddscb098 scaleb -7.500 2 -> -750.0 + +-- zeros +ddscb111 scaleb 0 1 -> 0E+1 +ddscb112 scaleb -0 2 -> -0E+2 +ddscb113 scaleb 0E+4 3 -> 0E+7 +ddscb114 scaleb -0E+4 4 -> -0E+8 +ddscb115 scaleb 0.0000 5 -> 0E+1 +ddscb116 scaleb -0.0000 6 -> -0E+2 +ddscb117 scaleb 0E-141 7 -> 0E-134 +ddscb118 scaleb -0E-141 8 -> -0E-133 + +-- Nmax, Nmin, Ntiny +ddscb132 scaleb 9.999999999999999E+384 +384 -> Infinity Overflow Inexact Rounded +ddscb133 scaleb 9.999999999999999E+384 +10 -> Infinity Overflow Inexact Rounded +ddscb134 scaleb 9.999999999999999E+384 +1 -> Infinity Overflow Inexact Rounded +ddscb135 scaleb 9.999999999999999E+384 0 -> 9.999999999999999E+384 +ddscb136 scaleb 9.999999999999999E+384 -1 -> 9.999999999999999E+383 +ddscb137 scaleb 1E-383 +1 -> 1E-382 +ddscb138 scaleb 1E-383 -0 -> 1E-383 +ddscb139 scaleb 1E-383 -1 -> 1E-384 Subnormal +ddscb140 scaleb 1.000000000000000E-383 +1 -> 1.000000000000000E-382 +ddscb141 scaleb 1.000000000000000E-383 0 -> 1.000000000000000E-383 +ddscb142 scaleb 1.000000000000000E-383 -1 -> 1.00000000000000E-384 Subnormal Rounded +ddscb143 scaleb 1E-398 +1 -> 1E-397 Subnormal +ddscb144 scaleb 1E-398 -0 -> 1E-398 Subnormal +ddscb145 scaleb 1E-398 -1 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +ddscb150 scaleb -1E-398 +1 -> -1E-397 Subnormal +ddscb151 scaleb -1E-398 -0 -> -1E-398 Subnormal +ddscb152 scaleb -1E-398 -1 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddscb153 scaleb -1.000000000000000E-383 +1 -> -1.000000000000000E-382 +ddscb154 scaleb -1.000000000000000E-383 +0 -> -1.000000000000000E-383 +ddscb155 scaleb -1.000000000000000E-383 -1 -> -1.00000000000000E-384 Subnormal Rounded +ddscb156 scaleb -1E-383 +1 -> -1E-382 +ddscb157 scaleb -1E-383 -0 -> -1E-383 +ddscb158 scaleb -1E-383 -1 -> -1E-384 Subnormal +ddscb159 scaleb -9.999999999999999E+384 +1 -> -Infinity Overflow Inexact Rounded +ddscb160 scaleb -9.999999999999999E+384 +0 -> -9.999999999999999E+384 +ddscb161 scaleb -9.999999999999999E+384 -1 -> -9.999999999999999E+383 +ddscb162 scaleb -9E+384 +1 -> -Infinity Overflow Inexact Rounded +ddscb163 scaleb -1E+384 +1 -> -Infinity Overflow Inexact Rounded + +-- some Origami +-- (these check that overflow is being done correctly) +ddscb171 scaleb 1000E+365 +1 -> 1.000E+369 +ddscb172 scaleb 1000E+366 +1 -> 1.000E+370 +ddscb173 scaleb 1000E+367 +1 -> 1.000E+371 +ddscb174 scaleb 1000E+368 +1 -> 1.000E+372 +ddscb175 scaleb 1000E+369 +1 -> 1.0000E+373 Clamped +ddscb176 scaleb 1000E+370 +1 -> 1.00000E+374 Clamped +ddscb177 scaleb 1000E+371 +1 -> 1.000000E+375 Clamped +ddscb178 scaleb 1000E+372 +1 -> 1.0000000E+376 Clamped +ddscb179 scaleb 1000E+373 +1 -> 1.00000000E+377 Clamped +ddscb180 scaleb 1000E+374 +1 -> 1.000000000E+378 Clamped +ddscb181 scaleb 1000E+375 +1 -> 1.0000000000E+379 Clamped +ddscb182 scaleb 1000E+376 +1 -> 1.00000000000E+380 Clamped +ddscb183 scaleb 1000E+377 +1 -> 1.000000000000E+381 Clamped +ddscb184 scaleb 1000E+378 +1 -> 1.0000000000000E+382 Clamped +ddscb185 scaleb 1000E+379 +1 -> 1.00000000000000E+383 Clamped +ddscb186 scaleb 1000E+380 +1 -> 1.000000000000000E+384 Clamped +ddscb187 scaleb 1000E+381 +1 -> Infinity Overflow Inexact Rounded + +-- and a few more subnormal truncations +-- (these check that underflow is being done correctly) +ddscb201 scaleb 1.000000000000000E-383 0 -> 1.000000000000000E-383 +ddscb202 scaleb 1.000000000000000E-383 -1 -> 1.00000000000000E-384 Subnormal Rounded +ddscb203 scaleb 1.000000000000000E-383 -2 -> 1.0000000000000E-385 Subnormal Rounded +ddscb204 scaleb 1.000000000000000E-383 -3 -> 1.000000000000E-386 Subnormal Rounded +ddscb205 scaleb 1.000000000000000E-383 -4 -> 1.00000000000E-387 Subnormal Rounded +ddscb206 scaleb 1.000000000000000E-383 -5 -> 1.0000000000E-388 Subnormal Rounded +ddscb207 scaleb 1.000000000000000E-383 -6 -> 1.000000000E-389 Subnormal Rounded +ddscb208 scaleb 1.000000000000000E-383 -7 -> 1.00000000E-390 Subnormal Rounded +ddscb209 scaleb 1.000000000000000E-383 -8 -> 1.0000000E-391 Subnormal Rounded +ddscb210 scaleb 1.000000000000000E-383 -9 -> 1.000000E-392 Subnormal Rounded +ddscb211 scaleb 1.000000000000000E-383 -10 -> 1.00000E-393 Subnormal Rounded +ddscb212 scaleb 1.000000000000000E-383 -11 -> 1.0000E-394 Subnormal Rounded +ddscb213 scaleb 1.000000000000000E-383 -12 -> 1.000E-395 Subnormal Rounded +ddscb214 scaleb 1.000000000000000E-383 -13 -> 1.00E-396 Subnormal Rounded +ddscb215 scaleb 1.000000000000000E-383 -14 -> 1.0E-397 Subnormal Rounded +ddscb216 scaleb 1.000000000000000E-383 -15 -> 1E-398 Subnormal Rounded +ddscb217 scaleb 1.000000000000000E-383 -16 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddscb218 scaleb 1.000000000000000E-383 -17 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + diff --git a/Lib/test/decimaltestdata/ddShift.decTest b/Lib/test/decimaltestdata/ddShift.decTest index ec472403e6b..f62a236b2ed 100644 --- a/Lib/test/decimaltestdata/ddShift.decTest +++ b/Lib/test/decimaltestdata/ddShift.decTest @@ -1,262 +1,262 @@ ------------------------------------------------------------------------- --- ddShift.decTest -- shift decDouble coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddshi001 shift 0 0 -> 0 -ddshi002 shift 0 2 -> 0 -ddshi003 shift 1 2 -> 100 -ddshi004 shift 1 15 -> 1000000000000000 -ddshi005 shift 1 16 -> 0 -ddshi006 shift 1 -1 -> 0 -ddshi007 shift 0 -2 -> 0 -ddshi008 shift 1234567890123456 -1 -> 123456789012345 -ddshi009 shift 1234567890123456 -15 -> 1 -ddshi010 shift 1234567890123456 -16 -> 0 -ddshi011 shift 9934567890123456 -15 -> 9 -ddshi012 shift 9934567890123456 -16 -> 0 - --- rhs must be an integer -ddshi015 shift 1 1.5 -> NaN Invalid_operation -ddshi016 shift 1 1.0 -> NaN Invalid_operation -ddshi017 shift 1 0.1 -> NaN Invalid_operation -ddshi018 shift 1 0.0 -> NaN Invalid_operation -ddshi019 shift 1 1E+1 -> NaN Invalid_operation -ddshi020 shift 1 1E+99 -> NaN Invalid_operation -ddshi021 shift 1 Inf -> NaN Invalid_operation -ddshi022 shift 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -ddshi025 shift 1 -1000 -> NaN Invalid_operation -ddshi026 shift 1 -17 -> NaN Invalid_operation -ddshi027 shift 1 17 -> NaN Invalid_operation -ddshi028 shift 1 1000 -> NaN Invalid_operation - --- full shifting pattern -ddshi030 shift 1234567890123456 -16 -> 0 -ddshi031 shift 1234567890123456 -15 -> 1 -ddshi032 shift 1234567890123456 -14 -> 12 -ddshi033 shift 1234567890123456 -13 -> 123 -ddshi034 shift 1234567890123456 -12 -> 1234 -ddshi035 shift 1234567890123456 -11 -> 12345 -ddshi036 shift 1234567890123456 -10 -> 123456 -ddshi037 shift 1234567890123456 -9 -> 1234567 -ddshi038 shift 1234567890123456 -8 -> 12345678 -ddshi039 shift 1234567890123456 -7 -> 123456789 -ddshi040 shift 1234567890123456 -6 -> 1234567890 -ddshi041 shift 1234567890123456 -5 -> 12345678901 -ddshi042 shift 1234567890123456 -4 -> 123456789012 -ddshi043 shift 1234567890123456 -3 -> 1234567890123 -ddshi044 shift 1234567890123456 -2 -> 12345678901234 -ddshi045 shift 1234567890123456 -1 -> 123456789012345 -ddshi046 shift 1234567890123456 -0 -> 1234567890123456 - -ddshi047 shift 1234567890123456 +0 -> 1234567890123456 -ddshi048 shift 1234567890123456 +1 -> 2345678901234560 -ddshi049 shift 1234567890123456 +2 -> 3456789012345600 -ddshi050 shift 1234567890123456 +3 -> 4567890123456000 -ddshi051 shift 1234567890123456 +4 -> 5678901234560000 -ddshi052 shift 1234567890123456 +5 -> 6789012345600000 -ddshi053 shift 1234567890123456 +6 -> 7890123456000000 -ddshi054 shift 1234567890123456 +7 -> 8901234560000000 -ddshi055 shift 1234567890123456 +8 -> 9012345600000000 -ddshi056 shift 1234567890123456 +9 -> 123456000000000 -ddshi057 shift 1234567890123456 +10 -> 1234560000000000 -ddshi058 shift 1234567890123456 +11 -> 2345600000000000 -ddshi059 shift 1234567890123456 +12 -> 3456000000000000 -ddshi060 shift 1234567890123456 +13 -> 4560000000000000 -ddshi061 shift 1234567890123456 +14 -> 5600000000000000 -ddshi062 shift 1234567890123456 +15 -> 6000000000000000 -ddshi063 shift 1234567890123456 +16 -> 0 - --- zeros -ddshi070 shift 0E-10 +9 -> 0E-10 -ddshi071 shift 0E-10 -9 -> 0E-10 -ddshi072 shift 0.000 +9 -> 0.000 -ddshi073 shift 0.000 -9 -> 0.000 -ddshi074 shift 0E+10 +9 -> 0E+10 -ddshi075 shift 0E+10 -9 -> 0E+10 -ddshi076 shift -0E-10 +9 -> -0E-10 -ddshi077 shift -0E-10 -9 -> -0E-10 -ddshi078 shift -0.000 +9 -> -0.000 -ddshi079 shift -0.000 -9 -> -0.000 -ddshi080 shift -0E+10 +9 -> -0E+10 -ddshi081 shift -0E+10 -9 -> -0E+10 - --- Nmax, Nmin, Ntiny -ddshi141 shift 9.999999999999999E+384 -1 -> 9.99999999999999E+383 -ddshi142 shift 9.999999999999999E+384 -15 -> 9E+369 -ddshi143 shift 9.999999999999999E+384 1 -> 9.999999999999990E+384 -ddshi144 shift 9.999999999999999E+384 15 -> 9.000000000000000E+384 -ddshi145 shift 1E-383 -1 -> 0E-383 -ddshi146 shift 1E-383 -15 -> 0E-383 -ddshi147 shift 1E-383 1 -> 1.0E-382 -ddshi148 shift 1E-383 15 -> 1.000000000000000E-368 -ddshi151 shift 1.000000000000000E-383 -1 -> 1.00000000000000E-384 -ddshi152 shift 1.000000000000000E-383 -15 -> 1E-398 -ddshi153 shift 1.000000000000000E-383 1 -> 0E-398 -ddshi154 shift 1.000000000000000E-383 15 -> 0E-398 -ddshi155 shift 9.000000000000000E-383 -1 -> 9.00000000000000E-384 -ddshi156 shift 9.000000000000000E-383 -15 -> 9E-398 -ddshi157 shift 9.000000000000000E-383 1 -> 0E-398 -ddshi158 shift 9.000000000000000E-383 15 -> 0E-398 -ddshi160 shift 1E-398 -1 -> 0E-398 -ddshi161 shift 1E-398 -15 -> 0E-398 -ddshi162 shift 1E-398 1 -> 1.0E-397 -ddshi163 shift 1E-398 15 -> 1.000000000000000E-383 --- negatives -ddshi171 shift -9.999999999999999E+384 -1 -> -9.99999999999999E+383 -ddshi172 shift -9.999999999999999E+384 -15 -> -9E+369 -ddshi173 shift -9.999999999999999E+384 1 -> -9.999999999999990E+384 -ddshi174 shift -9.999999999999999E+384 15 -> -9.000000000000000E+384 -ddshi175 shift -1E-383 -1 -> -0E-383 -ddshi176 shift -1E-383 -15 -> -0E-383 -ddshi177 shift -1E-383 1 -> -1.0E-382 -ddshi178 shift -1E-383 15 -> -1.000000000000000E-368 -ddshi181 shift -1.000000000000000E-383 -1 -> -1.00000000000000E-384 -ddshi182 shift -1.000000000000000E-383 -15 -> -1E-398 -ddshi183 shift -1.000000000000000E-383 1 -> -0E-398 -ddshi184 shift -1.000000000000000E-383 15 -> -0E-398 -ddshi185 shift -9.000000000000000E-383 -1 -> -9.00000000000000E-384 -ddshi186 shift -9.000000000000000E-383 -15 -> -9E-398 -ddshi187 shift -9.000000000000000E-383 1 -> -0E-398 -ddshi188 shift -9.000000000000000E-383 15 -> -0E-398 -ddshi190 shift -1E-398 -1 -> -0E-398 -ddshi191 shift -1E-398 -15 -> -0E-398 -ddshi192 shift -1E-398 1 -> -1.0E-397 -ddshi193 shift -1E-398 15 -> -1.000000000000000E-383 - --- more negatives (of sanities) -ddshi201 shift -0 0 -> -0 -ddshi202 shift -0 2 -> -0 -ddshi203 shift -1 2 -> -100 -ddshi204 shift -1 15 -> -1000000000000000 -ddshi205 shift -1 16 -> -0 -ddshi206 shift -1 -1 -> -0 -ddshi207 shift -0 -2 -> -0 -ddshi208 shift -1234567890123456 -1 -> -123456789012345 -ddshi209 shift -1234567890123456 -15 -> -1 -ddshi210 shift -1234567890123456 -16 -> -0 -ddshi211 shift -9934567890123456 -15 -> -9 -ddshi212 shift -9934567890123456 -16 -> -0 - - --- Specials; NaNs are handled as usual -ddshi781 shift -Inf -8 -> -Infinity -ddshi782 shift -Inf -1 -> -Infinity -ddshi783 shift -Inf -0 -> -Infinity -ddshi784 shift -Inf 0 -> -Infinity -ddshi785 shift -Inf 1 -> -Infinity -ddshi786 shift -Inf 8 -> -Infinity -ddshi787 shift -1000 -Inf -> NaN Invalid_operation -ddshi788 shift -Inf -Inf -> NaN Invalid_operation -ddshi789 shift -1 -Inf -> NaN Invalid_operation -ddshi790 shift -0 -Inf -> NaN Invalid_operation -ddshi791 shift 0 -Inf -> NaN Invalid_operation -ddshi792 shift 1 -Inf -> NaN Invalid_operation -ddshi793 shift 1000 -Inf -> NaN Invalid_operation -ddshi794 shift Inf -Inf -> NaN Invalid_operation - -ddshi800 shift Inf -Inf -> NaN Invalid_operation -ddshi801 shift Inf -8 -> Infinity -ddshi802 shift Inf -1 -> Infinity -ddshi803 shift Inf -0 -> Infinity -ddshi804 shift Inf 0 -> Infinity -ddshi805 shift Inf 1 -> Infinity -ddshi806 shift Inf 8 -> Infinity -ddshi807 shift Inf Inf -> NaN Invalid_operation -ddshi808 shift -1000 Inf -> NaN Invalid_operation -ddshi809 shift -Inf Inf -> NaN Invalid_operation -ddshi810 shift -1 Inf -> NaN Invalid_operation -ddshi811 shift -0 Inf -> NaN Invalid_operation -ddshi812 shift 0 Inf -> NaN Invalid_operation -ddshi813 shift 1 Inf -> NaN Invalid_operation -ddshi814 shift 1000 Inf -> NaN Invalid_operation -ddshi815 shift Inf Inf -> NaN Invalid_operation - -ddshi821 shift NaN -Inf -> NaN -ddshi822 shift NaN -1000 -> NaN -ddshi823 shift NaN -1 -> NaN -ddshi824 shift NaN -0 -> NaN -ddshi825 shift NaN 0 -> NaN -ddshi826 shift NaN 1 -> NaN -ddshi827 shift NaN 1000 -> NaN -ddshi828 shift NaN Inf -> NaN -ddshi829 shift NaN NaN -> NaN -ddshi830 shift -Inf NaN -> NaN -ddshi831 shift -1000 NaN -> NaN -ddshi832 shift -1 NaN -> NaN -ddshi833 shift -0 NaN -> NaN -ddshi834 shift 0 NaN -> NaN -ddshi835 shift 1 NaN -> NaN -ddshi836 shift 1000 NaN -> NaN -ddshi837 shift Inf NaN -> NaN - -ddshi841 shift sNaN -Inf -> NaN Invalid_operation -ddshi842 shift sNaN -1000 -> NaN Invalid_operation -ddshi843 shift sNaN -1 -> NaN Invalid_operation -ddshi844 shift sNaN -0 -> NaN Invalid_operation -ddshi845 shift sNaN 0 -> NaN Invalid_operation -ddshi846 shift sNaN 1 -> NaN Invalid_operation -ddshi847 shift sNaN 1000 -> NaN Invalid_operation -ddshi848 shift sNaN NaN -> NaN Invalid_operation -ddshi849 shift sNaN sNaN -> NaN Invalid_operation -ddshi850 shift NaN sNaN -> NaN Invalid_operation -ddshi851 shift -Inf sNaN -> NaN Invalid_operation -ddshi852 shift -1000 sNaN -> NaN Invalid_operation -ddshi853 shift -1 sNaN -> NaN Invalid_operation -ddshi854 shift -0 sNaN -> NaN Invalid_operation -ddshi855 shift 0 sNaN -> NaN Invalid_operation -ddshi856 shift 1 sNaN -> NaN Invalid_operation -ddshi857 shift 1000 sNaN -> NaN Invalid_operation -ddshi858 shift Inf sNaN -> NaN Invalid_operation -ddshi859 shift NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddshi861 shift NaN1 -Inf -> NaN1 -ddshi862 shift +NaN2 -1000 -> NaN2 -ddshi863 shift NaN3 1000 -> NaN3 -ddshi864 shift NaN4 Inf -> NaN4 -ddshi865 shift NaN5 +NaN6 -> NaN5 -ddshi866 shift -Inf NaN7 -> NaN7 -ddshi867 shift -1000 NaN8 -> NaN8 -ddshi868 shift 1000 NaN9 -> NaN9 -ddshi869 shift Inf +NaN10 -> NaN10 -ddshi871 shift sNaN11 -Inf -> NaN11 Invalid_operation -ddshi872 shift sNaN12 -1000 -> NaN12 Invalid_operation -ddshi873 shift sNaN13 1000 -> NaN13 Invalid_operation -ddshi874 shift sNaN14 NaN17 -> NaN14 Invalid_operation -ddshi875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation -ddshi876 shift NaN16 sNaN19 -> NaN19 Invalid_operation -ddshi877 shift -Inf +sNaN20 -> NaN20 Invalid_operation -ddshi878 shift -1000 sNaN21 -> NaN21 Invalid_operation -ddshi879 shift 1000 sNaN22 -> NaN22 Invalid_operation -ddshi880 shift Inf sNaN23 -> NaN23 Invalid_operation -ddshi881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddshi882 shift -NaN26 NaN28 -> -NaN26 -ddshi883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddshi884 shift 1000 -NaN30 -> -NaN30 -ddshi885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- ddShift.decTest -- shift decDouble coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddshi001 shift 0 0 -> 0 +ddshi002 shift 0 2 -> 0 +ddshi003 shift 1 2 -> 100 +ddshi004 shift 1 15 -> 1000000000000000 +ddshi005 shift 1 16 -> 0 +ddshi006 shift 1 -1 -> 0 +ddshi007 shift 0 -2 -> 0 +ddshi008 shift 1234567890123456 -1 -> 123456789012345 +ddshi009 shift 1234567890123456 -15 -> 1 +ddshi010 shift 1234567890123456 -16 -> 0 +ddshi011 shift 9934567890123456 -15 -> 9 +ddshi012 shift 9934567890123456 -16 -> 0 + +-- rhs must be an integer +ddshi015 shift 1 1.5 -> NaN Invalid_operation +ddshi016 shift 1 1.0 -> NaN Invalid_operation +ddshi017 shift 1 0.1 -> NaN Invalid_operation +ddshi018 shift 1 0.0 -> NaN Invalid_operation +ddshi019 shift 1 1E+1 -> NaN Invalid_operation +ddshi020 shift 1 1E+99 -> NaN Invalid_operation +ddshi021 shift 1 Inf -> NaN Invalid_operation +ddshi022 shift 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +ddshi025 shift 1 -1000 -> NaN Invalid_operation +ddshi026 shift 1 -17 -> NaN Invalid_operation +ddshi027 shift 1 17 -> NaN Invalid_operation +ddshi028 shift 1 1000 -> NaN Invalid_operation + +-- full shifting pattern +ddshi030 shift 1234567890123456 -16 -> 0 +ddshi031 shift 1234567890123456 -15 -> 1 +ddshi032 shift 1234567890123456 -14 -> 12 +ddshi033 shift 1234567890123456 -13 -> 123 +ddshi034 shift 1234567890123456 -12 -> 1234 +ddshi035 shift 1234567890123456 -11 -> 12345 +ddshi036 shift 1234567890123456 -10 -> 123456 +ddshi037 shift 1234567890123456 -9 -> 1234567 +ddshi038 shift 1234567890123456 -8 -> 12345678 +ddshi039 shift 1234567890123456 -7 -> 123456789 +ddshi040 shift 1234567890123456 -6 -> 1234567890 +ddshi041 shift 1234567890123456 -5 -> 12345678901 +ddshi042 shift 1234567890123456 -4 -> 123456789012 +ddshi043 shift 1234567890123456 -3 -> 1234567890123 +ddshi044 shift 1234567890123456 -2 -> 12345678901234 +ddshi045 shift 1234567890123456 -1 -> 123456789012345 +ddshi046 shift 1234567890123456 -0 -> 1234567890123456 + +ddshi047 shift 1234567890123456 +0 -> 1234567890123456 +ddshi048 shift 1234567890123456 +1 -> 2345678901234560 +ddshi049 shift 1234567890123456 +2 -> 3456789012345600 +ddshi050 shift 1234567890123456 +3 -> 4567890123456000 +ddshi051 shift 1234567890123456 +4 -> 5678901234560000 +ddshi052 shift 1234567890123456 +5 -> 6789012345600000 +ddshi053 shift 1234567890123456 +6 -> 7890123456000000 +ddshi054 shift 1234567890123456 +7 -> 8901234560000000 +ddshi055 shift 1234567890123456 +8 -> 9012345600000000 +ddshi056 shift 1234567890123456 +9 -> 123456000000000 +ddshi057 shift 1234567890123456 +10 -> 1234560000000000 +ddshi058 shift 1234567890123456 +11 -> 2345600000000000 +ddshi059 shift 1234567890123456 +12 -> 3456000000000000 +ddshi060 shift 1234567890123456 +13 -> 4560000000000000 +ddshi061 shift 1234567890123456 +14 -> 5600000000000000 +ddshi062 shift 1234567890123456 +15 -> 6000000000000000 +ddshi063 shift 1234567890123456 +16 -> 0 + +-- zeros +ddshi070 shift 0E-10 +9 -> 0E-10 +ddshi071 shift 0E-10 -9 -> 0E-10 +ddshi072 shift 0.000 +9 -> 0.000 +ddshi073 shift 0.000 -9 -> 0.000 +ddshi074 shift 0E+10 +9 -> 0E+10 +ddshi075 shift 0E+10 -9 -> 0E+10 +ddshi076 shift -0E-10 +9 -> -0E-10 +ddshi077 shift -0E-10 -9 -> -0E-10 +ddshi078 shift -0.000 +9 -> -0.000 +ddshi079 shift -0.000 -9 -> -0.000 +ddshi080 shift -0E+10 +9 -> -0E+10 +ddshi081 shift -0E+10 -9 -> -0E+10 + +-- Nmax, Nmin, Ntiny +ddshi141 shift 9.999999999999999E+384 -1 -> 9.99999999999999E+383 +ddshi142 shift 9.999999999999999E+384 -15 -> 9E+369 +ddshi143 shift 9.999999999999999E+384 1 -> 9.999999999999990E+384 +ddshi144 shift 9.999999999999999E+384 15 -> 9.000000000000000E+384 +ddshi145 shift 1E-383 -1 -> 0E-383 +ddshi146 shift 1E-383 -15 -> 0E-383 +ddshi147 shift 1E-383 1 -> 1.0E-382 +ddshi148 shift 1E-383 15 -> 1.000000000000000E-368 +ddshi151 shift 1.000000000000000E-383 -1 -> 1.00000000000000E-384 +ddshi152 shift 1.000000000000000E-383 -15 -> 1E-398 +ddshi153 shift 1.000000000000000E-383 1 -> 0E-398 +ddshi154 shift 1.000000000000000E-383 15 -> 0E-398 +ddshi155 shift 9.000000000000000E-383 -1 -> 9.00000000000000E-384 +ddshi156 shift 9.000000000000000E-383 -15 -> 9E-398 +ddshi157 shift 9.000000000000000E-383 1 -> 0E-398 +ddshi158 shift 9.000000000000000E-383 15 -> 0E-398 +ddshi160 shift 1E-398 -1 -> 0E-398 +ddshi161 shift 1E-398 -15 -> 0E-398 +ddshi162 shift 1E-398 1 -> 1.0E-397 +ddshi163 shift 1E-398 15 -> 1.000000000000000E-383 +-- negatives +ddshi171 shift -9.999999999999999E+384 -1 -> -9.99999999999999E+383 +ddshi172 shift -9.999999999999999E+384 -15 -> -9E+369 +ddshi173 shift -9.999999999999999E+384 1 -> -9.999999999999990E+384 +ddshi174 shift -9.999999999999999E+384 15 -> -9.000000000000000E+384 +ddshi175 shift -1E-383 -1 -> -0E-383 +ddshi176 shift -1E-383 -15 -> -0E-383 +ddshi177 shift -1E-383 1 -> -1.0E-382 +ddshi178 shift -1E-383 15 -> -1.000000000000000E-368 +ddshi181 shift -1.000000000000000E-383 -1 -> -1.00000000000000E-384 +ddshi182 shift -1.000000000000000E-383 -15 -> -1E-398 +ddshi183 shift -1.000000000000000E-383 1 -> -0E-398 +ddshi184 shift -1.000000000000000E-383 15 -> -0E-398 +ddshi185 shift -9.000000000000000E-383 -1 -> -9.00000000000000E-384 +ddshi186 shift -9.000000000000000E-383 -15 -> -9E-398 +ddshi187 shift -9.000000000000000E-383 1 -> -0E-398 +ddshi188 shift -9.000000000000000E-383 15 -> -0E-398 +ddshi190 shift -1E-398 -1 -> -0E-398 +ddshi191 shift -1E-398 -15 -> -0E-398 +ddshi192 shift -1E-398 1 -> -1.0E-397 +ddshi193 shift -1E-398 15 -> -1.000000000000000E-383 + +-- more negatives (of sanities) +ddshi201 shift -0 0 -> -0 +ddshi202 shift -0 2 -> -0 +ddshi203 shift -1 2 -> -100 +ddshi204 shift -1 15 -> -1000000000000000 +ddshi205 shift -1 16 -> -0 +ddshi206 shift -1 -1 -> -0 +ddshi207 shift -0 -2 -> -0 +ddshi208 shift -1234567890123456 -1 -> -123456789012345 +ddshi209 shift -1234567890123456 -15 -> -1 +ddshi210 shift -1234567890123456 -16 -> -0 +ddshi211 shift -9934567890123456 -15 -> -9 +ddshi212 shift -9934567890123456 -16 -> -0 + + +-- Specials; NaNs are handled as usual +ddshi781 shift -Inf -8 -> -Infinity +ddshi782 shift -Inf -1 -> -Infinity +ddshi783 shift -Inf -0 -> -Infinity +ddshi784 shift -Inf 0 -> -Infinity +ddshi785 shift -Inf 1 -> -Infinity +ddshi786 shift -Inf 8 -> -Infinity +ddshi787 shift -1000 -Inf -> NaN Invalid_operation +ddshi788 shift -Inf -Inf -> NaN Invalid_operation +ddshi789 shift -1 -Inf -> NaN Invalid_operation +ddshi790 shift -0 -Inf -> NaN Invalid_operation +ddshi791 shift 0 -Inf -> NaN Invalid_operation +ddshi792 shift 1 -Inf -> NaN Invalid_operation +ddshi793 shift 1000 -Inf -> NaN Invalid_operation +ddshi794 shift Inf -Inf -> NaN Invalid_operation + +ddshi800 shift Inf -Inf -> NaN Invalid_operation +ddshi801 shift Inf -8 -> Infinity +ddshi802 shift Inf -1 -> Infinity +ddshi803 shift Inf -0 -> Infinity +ddshi804 shift Inf 0 -> Infinity +ddshi805 shift Inf 1 -> Infinity +ddshi806 shift Inf 8 -> Infinity +ddshi807 shift Inf Inf -> NaN Invalid_operation +ddshi808 shift -1000 Inf -> NaN Invalid_operation +ddshi809 shift -Inf Inf -> NaN Invalid_operation +ddshi810 shift -1 Inf -> NaN Invalid_operation +ddshi811 shift -0 Inf -> NaN Invalid_operation +ddshi812 shift 0 Inf -> NaN Invalid_operation +ddshi813 shift 1 Inf -> NaN Invalid_operation +ddshi814 shift 1000 Inf -> NaN Invalid_operation +ddshi815 shift Inf Inf -> NaN Invalid_operation + +ddshi821 shift NaN -Inf -> NaN +ddshi822 shift NaN -1000 -> NaN +ddshi823 shift NaN -1 -> NaN +ddshi824 shift NaN -0 -> NaN +ddshi825 shift NaN 0 -> NaN +ddshi826 shift NaN 1 -> NaN +ddshi827 shift NaN 1000 -> NaN +ddshi828 shift NaN Inf -> NaN +ddshi829 shift NaN NaN -> NaN +ddshi830 shift -Inf NaN -> NaN +ddshi831 shift -1000 NaN -> NaN +ddshi832 shift -1 NaN -> NaN +ddshi833 shift -0 NaN -> NaN +ddshi834 shift 0 NaN -> NaN +ddshi835 shift 1 NaN -> NaN +ddshi836 shift 1000 NaN -> NaN +ddshi837 shift Inf NaN -> NaN + +ddshi841 shift sNaN -Inf -> NaN Invalid_operation +ddshi842 shift sNaN -1000 -> NaN Invalid_operation +ddshi843 shift sNaN -1 -> NaN Invalid_operation +ddshi844 shift sNaN -0 -> NaN Invalid_operation +ddshi845 shift sNaN 0 -> NaN Invalid_operation +ddshi846 shift sNaN 1 -> NaN Invalid_operation +ddshi847 shift sNaN 1000 -> NaN Invalid_operation +ddshi848 shift sNaN NaN -> NaN Invalid_operation +ddshi849 shift sNaN sNaN -> NaN Invalid_operation +ddshi850 shift NaN sNaN -> NaN Invalid_operation +ddshi851 shift -Inf sNaN -> NaN Invalid_operation +ddshi852 shift -1000 sNaN -> NaN Invalid_operation +ddshi853 shift -1 sNaN -> NaN Invalid_operation +ddshi854 shift -0 sNaN -> NaN Invalid_operation +ddshi855 shift 0 sNaN -> NaN Invalid_operation +ddshi856 shift 1 sNaN -> NaN Invalid_operation +ddshi857 shift 1000 sNaN -> NaN Invalid_operation +ddshi858 shift Inf sNaN -> NaN Invalid_operation +ddshi859 shift NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddshi861 shift NaN1 -Inf -> NaN1 +ddshi862 shift +NaN2 -1000 -> NaN2 +ddshi863 shift NaN3 1000 -> NaN3 +ddshi864 shift NaN4 Inf -> NaN4 +ddshi865 shift NaN5 +NaN6 -> NaN5 +ddshi866 shift -Inf NaN7 -> NaN7 +ddshi867 shift -1000 NaN8 -> NaN8 +ddshi868 shift 1000 NaN9 -> NaN9 +ddshi869 shift Inf +NaN10 -> NaN10 +ddshi871 shift sNaN11 -Inf -> NaN11 Invalid_operation +ddshi872 shift sNaN12 -1000 -> NaN12 Invalid_operation +ddshi873 shift sNaN13 1000 -> NaN13 Invalid_operation +ddshi874 shift sNaN14 NaN17 -> NaN14 Invalid_operation +ddshi875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation +ddshi876 shift NaN16 sNaN19 -> NaN19 Invalid_operation +ddshi877 shift -Inf +sNaN20 -> NaN20 Invalid_operation +ddshi878 shift -1000 sNaN21 -> NaN21 Invalid_operation +ddshi879 shift 1000 sNaN22 -> NaN22 Invalid_operation +ddshi880 shift Inf sNaN23 -> NaN23 Invalid_operation +ddshi881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddshi882 shift -NaN26 NaN28 -> -NaN26 +ddshi883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddshi884 shift 1000 -NaN30 -> -NaN30 +ddshi885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/ddSubtract.decTest b/Lib/test/decimaltestdata/ddSubtract.decTest index 15d47779eb6..5ebc4878f01 100644 --- a/Lib/test/decimaltestdata/ddSubtract.decTest +++ b/Lib/test/decimaltestdata/ddSubtract.decTest @@ -1,629 +1,629 @@ ------------------------------------------------------------------------- --- ddSubtract.decTest -- decDouble subtraction -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decDoubles only; all arguments are --- representable in a decDouble -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- [first group are 'quick confidence check'] -ddsub001 subtract 0 0 -> '0' -ddsub002 subtract 1 1 -> '0' -ddsub003 subtract 1 2 -> '-1' -ddsub004 subtract 2 1 -> '1' -ddsub005 subtract 2 2 -> '0' -ddsub006 subtract 3 2 -> '1' -ddsub007 subtract 2 3 -> '-1' - -ddsub011 subtract -0 0 -> '-0' -ddsub012 subtract -1 1 -> '-2' -ddsub013 subtract -1 2 -> '-3' -ddsub014 subtract -2 1 -> '-3' -ddsub015 subtract -2 2 -> '-4' -ddsub016 subtract -3 2 -> '-5' -ddsub017 subtract -2 3 -> '-5' - -ddsub021 subtract 0 -0 -> '0' -ddsub022 subtract 1 -1 -> '2' -ddsub023 subtract 1 -2 -> '3' -ddsub024 subtract 2 -1 -> '3' -ddsub025 subtract 2 -2 -> '4' -ddsub026 subtract 3 -2 -> '5' -ddsub027 subtract 2 -3 -> '5' - -ddsub030 subtract 11 1 -> 10 -ddsub031 subtract 10 1 -> 9 -ddsub032 subtract 9 1 -> 8 -ddsub033 subtract 1 1 -> 0 -ddsub034 subtract 0 1 -> -1 -ddsub035 subtract -1 1 -> -2 -ddsub036 subtract -9 1 -> -10 -ddsub037 subtract -10 1 -> -11 -ddsub038 subtract -11 1 -> -12 - -ddsub040 subtract '5.75' '3.3' -> '2.45' -ddsub041 subtract '5' '-3' -> '8' -ddsub042 subtract '-5' '-3' -> '-2' -ddsub043 subtract '-7' '2.5' -> '-9.5' -ddsub044 subtract '0.7' '0.3' -> '0.4' -ddsub045 subtract '1.3' '0.3' -> '1.0' -ddsub046 subtract '1.25' '1.25' -> '0.00' - -ddsub050 subtract '1.23456789' '1.00000000' -> '0.23456789' -ddsub051 subtract '1.23456789' '1.00000089' -> '0.23456700' - -ddsub060 subtract '70' '10000e+16' -> '-1.000000000000000E+20' Inexact Rounded -ddsub061 subtract '700' '10000e+16' -> '-1.000000000000000E+20' Inexact Rounded -ddsub062 subtract '7000' '10000e+16' -> '-9.999999999999999E+19' Inexact Rounded -ddsub063 subtract '70000' '10000e+16' -> '-9.999999999999993E+19' Rounded -ddsub064 subtract '700000' '10000e+16' -> '-9.999999999999930E+19' Rounded - -- symmetry: -ddsub065 subtract '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded -ddsub066 subtract '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded -ddsub067 subtract '10000e+16' '7000' -> '9.999999999999999E+19' Inexact Rounded -ddsub068 subtract '10000e+16' '70000' -> '9.999999999999993E+19' Rounded -ddsub069 subtract '10000e+16' '700000' -> '9.999999999999930E+19' Rounded - - -- some of the next group are really constructor tests -ddsub090 subtract '00.0' '0.0' -> '0.0' -ddsub091 subtract '00.0' '0.00' -> '0.00' -ddsub092 subtract '0.00' '00.0' -> '0.00' -ddsub093 subtract '00.0' '0.00' -> '0.00' -ddsub094 subtract '0.00' '00.0' -> '0.00' -ddsub095 subtract '3' '.3' -> '2.7' -ddsub096 subtract '3.' '.3' -> '2.7' -ddsub097 subtract '3.0' '.3' -> '2.7' -ddsub098 subtract '3.00' '.3' -> '2.70' -ddsub099 subtract '3' '3' -> '0' -ddsub100 subtract '3' '+3' -> '0' -ddsub101 subtract '3' '-3' -> '6' -ddsub102 subtract '3' '0.3' -> '2.7' -ddsub103 subtract '3.' '0.3' -> '2.7' -ddsub104 subtract '3.0' '0.3' -> '2.7' -ddsub105 subtract '3.00' '0.3' -> '2.70' -ddsub106 subtract '3' '3.0' -> '0.0' -ddsub107 subtract '3' '+3.0' -> '0.0' -ddsub108 subtract '3' '-3.0' -> '6.0' - --- the above all from add; massaged and extended. Now some new ones... --- [particularly important for comparisons] --- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7 --- with input rounding. -ddsub120 subtract '10.23456784' '10.23456789' -> '-5E-8' -ddsub121 subtract '10.23456785' '10.23456789' -> '-4E-8' -ddsub122 subtract '10.23456786' '10.23456789' -> '-3E-8' -ddsub123 subtract '10.23456787' '10.23456789' -> '-2E-8' -ddsub124 subtract '10.23456788' '10.23456789' -> '-1E-8' -ddsub125 subtract '10.23456789' '10.23456789' -> '0E-8' -ddsub126 subtract '10.23456790' '10.23456789' -> '1E-8' -ddsub127 subtract '10.23456791' '10.23456789' -> '2E-8' -ddsub128 subtract '10.23456792' '10.23456789' -> '3E-8' -ddsub129 subtract '10.23456793' '10.23456789' -> '4E-8' -ddsub130 subtract '10.23456794' '10.23456789' -> '5E-8' -ddsub131 subtract '10.23456781' '10.23456786' -> '-5E-8' -ddsub132 subtract '10.23456782' '10.23456786' -> '-4E-8' -ddsub133 subtract '10.23456783' '10.23456786' -> '-3E-8' -ddsub134 subtract '10.23456784' '10.23456786' -> '-2E-8' -ddsub135 subtract '10.23456785' '10.23456786' -> '-1E-8' -ddsub136 subtract '10.23456786' '10.23456786' -> '0E-8' -ddsub137 subtract '10.23456787' '10.23456786' -> '1E-8' -ddsub138 subtract '10.23456788' '10.23456786' -> '2E-8' -ddsub139 subtract '10.23456789' '10.23456786' -> '3E-8' -ddsub140 subtract '10.23456790' '10.23456786' -> '4E-8' -ddsub141 subtract '10.23456791' '10.23456786' -> '5E-8' -ddsub142 subtract '1' '0.999999999' -> '1E-9' -ddsub143 subtract '0.999999999' '1' -> '-1E-9' -ddsub144 subtract '-10.23456780' '-10.23456786' -> '6E-8' -ddsub145 subtract '-10.23456790' '-10.23456786' -> '-4E-8' -ddsub146 subtract '-10.23456791' '-10.23456786' -> '-5E-8' - --- additional scaled arithmetic tests [0.97 problem] -ddsub160 subtract '0' '.1' -> '-0.1' -ddsub161 subtract '00' '.97983' -> '-0.97983' -ddsub162 subtract '0' '.9' -> '-0.9' -ddsub163 subtract '0' '0.102' -> '-0.102' -ddsub164 subtract '0' '.4' -> '-0.4' -ddsub165 subtract '0' '.307' -> '-0.307' -ddsub166 subtract '0' '.43822' -> '-0.43822' -ddsub167 subtract '0' '.911' -> '-0.911' -ddsub168 subtract '.0' '.02' -> '-0.02' -ddsub169 subtract '00' '.392' -> '-0.392' -ddsub170 subtract '0' '.26' -> '-0.26' -ddsub171 subtract '0' '0.51' -> '-0.51' -ddsub172 subtract '0' '.2234' -> '-0.2234' -ddsub173 subtract '0' '.2' -> '-0.2' -ddsub174 subtract '.0' '.0008' -> '-0.0008' --- 0. on left -ddsub180 subtract '0.0' '-.1' -> '0.1' -ddsub181 subtract '0.00' '-.97983' -> '0.97983' -ddsub182 subtract '0.0' '-.9' -> '0.9' -ddsub183 subtract '0.0' '-0.102' -> '0.102' -ddsub184 subtract '0.0' '-.4' -> '0.4' -ddsub185 subtract '0.0' '-.307' -> '0.307' -ddsub186 subtract '0.0' '-.43822' -> '0.43822' -ddsub187 subtract '0.0' '-.911' -> '0.911' -ddsub188 subtract '0.0' '-.02' -> '0.02' -ddsub189 subtract '0.00' '-.392' -> '0.392' -ddsub190 subtract '0.0' '-.26' -> '0.26' -ddsub191 subtract '0.0' '-0.51' -> '0.51' -ddsub192 subtract '0.0' '-.2234' -> '0.2234' -ddsub193 subtract '0.0' '-.2' -> '0.2' -ddsub194 subtract '0.0' '-.0008' -> '0.0008' --- negatives of same -ddsub200 subtract '0' '-.1' -> '0.1' -ddsub201 subtract '00' '-.97983' -> '0.97983' -ddsub202 subtract '0' '-.9' -> '0.9' -ddsub203 subtract '0' '-0.102' -> '0.102' -ddsub204 subtract '0' '-.4' -> '0.4' -ddsub205 subtract '0' '-.307' -> '0.307' -ddsub206 subtract '0' '-.43822' -> '0.43822' -ddsub207 subtract '0' '-.911' -> '0.911' -ddsub208 subtract '.0' '-.02' -> '0.02' -ddsub209 subtract '00' '-.392' -> '0.392' -ddsub210 subtract '0' '-.26' -> '0.26' -ddsub211 subtract '0' '-0.51' -> '0.51' -ddsub212 subtract '0' '-.2234' -> '0.2234' -ddsub213 subtract '0' '-.2' -> '0.2' -ddsub214 subtract '.0' '-.0008' -> '0.0008' - --- more fixed, LHS swaps [really the same as testcases under add] -ddsub220 subtract '-56267E-12' 0 -> '-5.6267E-8' -ddsub221 subtract '-56267E-11' 0 -> '-5.6267E-7' -ddsub222 subtract '-56267E-10' 0 -> '-0.0000056267' -ddsub223 subtract '-56267E-9' 0 -> '-0.000056267' -ddsub224 subtract '-56267E-8' 0 -> '-0.00056267' -ddsub225 subtract '-56267E-7' 0 -> '-0.0056267' -ddsub226 subtract '-56267E-6' 0 -> '-0.056267' -ddsub227 subtract '-56267E-5' 0 -> '-0.56267' -ddsub228 subtract '-56267E-2' 0 -> '-562.67' -ddsub229 subtract '-56267E-1' 0 -> '-5626.7' -ddsub230 subtract '-56267E-0' 0 -> '-56267' --- symmetry ... -ddsub240 subtract 0 '-56267E-12' -> '5.6267E-8' -ddsub241 subtract 0 '-56267E-11' -> '5.6267E-7' -ddsub242 subtract 0 '-56267E-10' -> '0.0000056267' -ddsub243 subtract 0 '-56267E-9' -> '0.000056267' -ddsub244 subtract 0 '-56267E-8' -> '0.00056267' -ddsub245 subtract 0 '-56267E-7' -> '0.0056267' -ddsub246 subtract 0 '-56267E-6' -> '0.056267' -ddsub247 subtract 0 '-56267E-5' -> '0.56267' -ddsub248 subtract 0 '-56267E-2' -> '562.67' -ddsub249 subtract 0 '-56267E-1' -> '5626.7' -ddsub250 subtract 0 '-56267E-0' -> '56267' - --- now some more from the 'new' add -ddsub301 subtract '1.23456789' '1.00000000' -> '0.23456789' -ddsub302 subtract '1.23456789' '1.00000011' -> '0.23456778' - --- some carrying effects -ddsub321 subtract '0.9998' '0.0000' -> '0.9998' -ddsub322 subtract '0.9998' '0.0001' -> '0.9997' -ddsub323 subtract '0.9998' '0.0002' -> '0.9996' -ddsub324 subtract '0.9998' '0.0003' -> '0.9995' -ddsub325 subtract '0.9998' '-0.0000' -> '0.9998' -ddsub326 subtract '0.9998' '-0.0001' -> '0.9999' -ddsub327 subtract '0.9998' '-0.0002' -> '1.0000' -ddsub328 subtract '0.9998' '-0.0003' -> '1.0001' - --- internal boundaries -ddsub346 subtract '10000e+9' '7' -> '9999999999993' -ddsub347 subtract '10000e+9' '70' -> '9999999999930' -ddsub348 subtract '10000e+9' '700' -> '9999999999300' -ddsub349 subtract '10000e+9' '7000' -> '9999999993000' -ddsub350 subtract '10000e+9' '70000' -> '9999999930000' -ddsub351 subtract '10000e+9' '700000' -> '9999999300000' -ddsub352 subtract '7' '10000e+9' -> '-9999999999993' -ddsub353 subtract '70' '10000e+9' -> '-9999999999930' -ddsub354 subtract '700' '10000e+9' -> '-9999999999300' -ddsub355 subtract '7000' '10000e+9' -> '-9999999993000' -ddsub356 subtract '70000' '10000e+9' -> '-9999999930000' -ddsub357 subtract '700000' '10000e+9' -> '-9999999300000' - --- zero preservation -ddsub361 subtract 1 '0.0001' -> '0.9999' -ddsub362 subtract 1 '0.00001' -> '0.99999' -ddsub363 subtract 1 '0.000001' -> '0.999999' -ddsub364 subtract 1 '0.0000000000000001' -> '0.9999999999999999' -ddsub365 subtract 1 '0.00000000000000001' -> '1.000000000000000' Inexact Rounded -ddsub366 subtract 1 '0.000000000000000001' -> '1.000000000000000' Inexact Rounded - --- some funny zeros [in case of bad signum] -ddsub370 subtract 1 0 -> 1 -ddsub371 subtract 1 0. -> 1 -ddsub372 subtract 1 .0 -> 1.0 -ddsub373 subtract 1 0.0 -> 1.0 -ddsub374 subtract 0 1 -> -1 -ddsub375 subtract 0. 1 -> -1 -ddsub376 subtract .0 1 -> -1.0 -ddsub377 subtract 0.0 1 -> -1.0 - --- leading 0 digit before round -ddsub910 subtract -103519362 -51897955.3 -> -51621406.7 -ddsub911 subtract 159579.444 89827.5229 -> 69751.9211 - -ddsub920 subtract 333.0000000123456 33.00000001234566 -> 299.9999999999999 Inexact Rounded -ddsub921 subtract 333.0000000123456 33.00000001234565 -> 300.0000000000000 Inexact Rounded -ddsub922 subtract 133.0000000123456 33.00000001234565 -> 99.99999999999995 -ddsub923 subtract 133.0000000123456 33.00000001234564 -> 99.99999999999996 -ddsub924 subtract 133.0000000123456 33.00000001234540 -> 100.0000000000002 Rounded -ddsub925 subtract 133.0000000123456 43.00000001234560 -> 90.00000000000000 -ddsub926 subtract 133.0000000123456 43.00000001234561 -> 89.99999999999999 -ddsub927 subtract 133.0000000123456 43.00000001234566 -> 89.99999999999994 -ddsub928 subtract 101.0000000123456 91.00000001234566 -> 9.99999999999994 -ddsub929 subtract 101.0000000123456 99.00000001234566 -> 1.99999999999994 - --- more LHS swaps [were fixed] -ddsub390 subtract '-56267E-10' 0 -> '-0.0000056267' -ddsub391 subtract '-56267E-6' 0 -> '-0.056267' -ddsub392 subtract '-56267E-5' 0 -> '-0.56267' -ddsub393 subtract '-56267E-4' 0 -> '-5.6267' -ddsub394 subtract '-56267E-3' 0 -> '-56.267' -ddsub395 subtract '-56267E-2' 0 -> '-562.67' -ddsub396 subtract '-56267E-1' 0 -> '-5626.7' -ddsub397 subtract '-56267E-0' 0 -> '-56267' -ddsub398 subtract '-5E-10' 0 -> '-5E-10' -ddsub399 subtract '-5E-7' 0 -> '-5E-7' -ddsub400 subtract '-5E-6' 0 -> '-0.000005' -ddsub401 subtract '-5E-5' 0 -> '-0.00005' -ddsub402 subtract '-5E-4' 0 -> '-0.0005' -ddsub403 subtract '-5E-1' 0 -> '-0.5' -ddsub404 subtract '-5E0' 0 -> '-5' -ddsub405 subtract '-5E1' 0 -> '-50' -ddsub406 subtract '-5E5' 0 -> '-500000' -ddsub407 subtract '-5E15' 0 -> '-5000000000000000' -ddsub408 subtract '-5E16' 0 -> '-5.000000000000000E+16' Rounded -ddsub409 subtract '-5E17' 0 -> '-5.000000000000000E+17' Rounded -ddsub410 subtract '-5E18' 0 -> '-5.000000000000000E+18' Rounded -ddsub411 subtract '-5E100' 0 -> '-5.000000000000000E+100' Rounded - --- more RHS swaps [were fixed] -ddsub420 subtract 0 '-56267E-10' -> '0.0000056267' -ddsub421 subtract 0 '-56267E-6' -> '0.056267' -ddsub422 subtract 0 '-56267E-5' -> '0.56267' -ddsub423 subtract 0 '-56267E-4' -> '5.6267' -ddsub424 subtract 0 '-56267E-3' -> '56.267' -ddsub425 subtract 0 '-56267E-2' -> '562.67' -ddsub426 subtract 0 '-56267E-1' -> '5626.7' -ddsub427 subtract 0 '-56267E-0' -> '56267' -ddsub428 subtract 0 '-5E-10' -> '5E-10' -ddsub429 subtract 0 '-5E-7' -> '5E-7' -ddsub430 subtract 0 '-5E-6' -> '0.000005' -ddsub431 subtract 0 '-5E-5' -> '0.00005' -ddsub432 subtract 0 '-5E-4' -> '0.0005' -ddsub433 subtract 0 '-5E-1' -> '0.5' -ddsub434 subtract 0 '-5E0' -> '5' -ddsub435 subtract 0 '-5E1' -> '50' -ddsub436 subtract 0 '-5E5' -> '500000' -ddsub437 subtract 0 '-5E15' -> '5000000000000000' -ddsub438 subtract 0 '-5E16' -> '5.000000000000000E+16' Rounded -ddsub439 subtract 0 '-5E17' -> '5.000000000000000E+17' Rounded -ddsub440 subtract 0 '-5E18' -> '5.000000000000000E+18' Rounded -ddsub441 subtract 0 '-5E100' -> '5.000000000000000E+100' Rounded - - --- try borderline precision, with carries, etc. -ddsub461 subtract '1E+16' '1' -> '9999999999999999' -ddsub462 subtract '1E+12' '-1.111' -> '1000000000001.111' -ddsub463 subtract '1.111' '-1E+12' -> '1000000000001.111' -ddsub464 subtract '-1' '-1E+16' -> '9999999999999999' -ddsub465 subtract '7E+15' '1' -> '6999999999999999' -ddsub466 subtract '7E+12' '-1.111' -> '7000000000001.111' -ddsub467 subtract '1.111' '-7E+12' -> '7000000000001.111' -ddsub468 subtract '-1' '-7E+15' -> '6999999999999999' - --- 1234567890123456 1234567890123456 1 23456789012345 -ddsub470 subtract '0.4444444444444444' '-0.5555555555555563' -> '1.000000000000001' Inexact Rounded -ddsub471 subtract '0.4444444444444444' '-0.5555555555555562' -> '1.000000000000001' Inexact Rounded -ddsub472 subtract '0.4444444444444444' '-0.5555555555555561' -> '1.000000000000000' Inexact Rounded -ddsub473 subtract '0.4444444444444444' '-0.5555555555555560' -> '1.000000000000000' Inexact Rounded -ddsub474 subtract '0.4444444444444444' '-0.5555555555555559' -> '1.000000000000000' Inexact Rounded -ddsub475 subtract '0.4444444444444444' '-0.5555555555555558' -> '1.000000000000000' Inexact Rounded -ddsub476 subtract '0.4444444444444444' '-0.5555555555555557' -> '1.000000000000000' Inexact Rounded -ddsub477 subtract '0.4444444444444444' '-0.5555555555555556' -> '1.000000000000000' Rounded -ddsub478 subtract '0.4444444444444444' '-0.5555555555555555' -> '0.9999999999999999' -ddsub479 subtract '0.4444444444444444' '-0.5555555555555554' -> '0.9999999999999998' -ddsub480 subtract '0.4444444444444444' '-0.5555555555555553' -> '0.9999999999999997' -ddsub481 subtract '0.4444444444444444' '-0.5555555555555552' -> '0.9999999999999996' -ddsub482 subtract '0.4444444444444444' '-0.5555555555555551' -> '0.9999999999999995' -ddsub483 subtract '0.4444444444444444' '-0.5555555555555550' -> '0.9999999999999994' - --- and some more, including residue effects and different roundings -rounding: half_up -ddsub500 subtract '1231234567456789' 0 -> '1231234567456789' -ddsub501 subtract '1231234567456789' 0.000000001 -> '1231234567456789' Inexact Rounded -ddsub502 subtract '1231234567456789' 0.000001 -> '1231234567456789' Inexact Rounded -ddsub503 subtract '1231234567456789' 0.1 -> '1231234567456789' Inexact Rounded -ddsub504 subtract '1231234567456789' 0.4 -> '1231234567456789' Inexact Rounded -ddsub505 subtract '1231234567456789' 0.49 -> '1231234567456789' Inexact Rounded -ddsub506 subtract '1231234567456789' 0.499999 -> '1231234567456789' Inexact Rounded -ddsub507 subtract '1231234567456789' 0.499999999 -> '1231234567456789' Inexact Rounded -ddsub508 subtract '1231234567456789' 0.5 -> '1231234567456789' Inexact Rounded -ddsub509 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded -ddsub510 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded -ddsub511 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded -ddsub512 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded -ddsub513 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded -ddsub514 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded -ddsub515 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded -ddsub516 subtract '1231234567456789' 1 -> '1231234567456788' -ddsub517 subtract '1231234567456789' 1.000000001 -> '1231234567456788' Inexact Rounded -ddsub518 subtract '1231234567456789' 1.00001 -> '1231234567456788' Inexact Rounded -ddsub519 subtract '1231234567456789' 1.1 -> '1231234567456788' Inexact Rounded - -rounding: half_even -ddsub520 subtract '1231234567456789' 0 -> '1231234567456789' -ddsub521 subtract '1231234567456789' 0.000000001 -> '1231234567456789' Inexact Rounded -ddsub522 subtract '1231234567456789' 0.000001 -> '1231234567456789' Inexact Rounded -ddsub523 subtract '1231234567456789' 0.1 -> '1231234567456789' Inexact Rounded -ddsub524 subtract '1231234567456789' 0.4 -> '1231234567456789' Inexact Rounded -ddsub525 subtract '1231234567456789' 0.49 -> '1231234567456789' Inexact Rounded -ddsub526 subtract '1231234567456789' 0.499999 -> '1231234567456789' Inexact Rounded -ddsub527 subtract '1231234567456789' 0.499999999 -> '1231234567456789' Inexact Rounded -ddsub528 subtract '1231234567456789' 0.5 -> '1231234567456788' Inexact Rounded -ddsub529 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded -ddsub530 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded -ddsub531 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded -ddsub532 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded -ddsub533 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded -ddsub534 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded -ddsub535 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded -ddsub536 subtract '1231234567456789' 1 -> '1231234567456788' -ddsub537 subtract '1231234567456789' 1.00000001 -> '1231234567456788' Inexact Rounded -ddsub538 subtract '1231234567456789' 1.00001 -> '1231234567456788' Inexact Rounded -ddsub539 subtract '1231234567456789' 1.1 -> '1231234567456788' Inexact Rounded --- critical few with even bottom digit... -ddsub540 subtract '1231234567456788' 0.499999999 -> '1231234567456788' Inexact Rounded -ddsub541 subtract '1231234567456788' 0.5 -> '1231234567456788' Inexact Rounded -ddsub542 subtract '1231234567456788' 0.500000001 -> '1231234567456787' Inexact Rounded - -rounding: down -ddsub550 subtract '1231234567456789' 0 -> '1231234567456789' -ddsub551 subtract '1231234567456789' 0.000000001 -> '1231234567456788' Inexact Rounded -ddsub552 subtract '1231234567456789' 0.000001 -> '1231234567456788' Inexact Rounded -ddsub553 subtract '1231234567456789' 0.1 -> '1231234567456788' Inexact Rounded -ddsub554 subtract '1231234567456789' 0.4 -> '1231234567456788' Inexact Rounded -ddsub555 subtract '1231234567456789' 0.49 -> '1231234567456788' Inexact Rounded -ddsub556 subtract '1231234567456789' 0.499999 -> '1231234567456788' Inexact Rounded -ddsub557 subtract '1231234567456789' 0.499999999 -> '1231234567456788' Inexact Rounded -ddsub558 subtract '1231234567456789' 0.5 -> '1231234567456788' Inexact Rounded -ddsub559 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded -ddsub560 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded -ddsub561 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded -ddsub562 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded -ddsub563 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded -ddsub564 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded -ddsub565 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded -ddsub566 subtract '1231234567456789' 1 -> '1231234567456788' -ddsub567 subtract '1231234567456789' 1.00000001 -> '1231234567456787' Inexact Rounded -ddsub568 subtract '1231234567456789' 1.00001 -> '1231234567456787' Inexact Rounded -ddsub569 subtract '1231234567456789' 1.1 -> '1231234567456787' Inexact Rounded - --- symmetry... -rounding: half_up -ddsub600 subtract 0 '1231234567456789' -> '-1231234567456789' -ddsub601 subtract 0.000000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub602 subtract 0.000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub603 subtract 0.1 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub604 subtract 0.4 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub605 subtract 0.49 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub606 subtract 0.499999 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub607 subtract 0.499999999 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub608 subtract 0.5 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub609 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub610 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub611 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub612 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub613 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub614 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub615 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub616 subtract 1 '1231234567456789' -> '-1231234567456788' -ddsub617 subtract 1.000000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub618 subtract 1.00001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub619 subtract 1.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded - -rounding: half_even -ddsub620 subtract 0 '1231234567456789' -> '-1231234567456789' -ddsub621 subtract 0.000000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub622 subtract 0.000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub623 subtract 0.1 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub624 subtract 0.4 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub625 subtract 0.49 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub626 subtract 0.499999 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub627 subtract 0.499999999 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub628 subtract 0.5 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub629 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub630 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub631 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub632 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub633 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub634 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub635 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub636 subtract 1 '1231234567456789' -> '-1231234567456788' -ddsub637 subtract 1.00000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub638 subtract 1.00001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub639 subtract 1.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded --- critical few with even bottom digit... -ddsub640 subtract 0.499999999 '1231234567456788' -> '-1231234567456788' Inexact Rounded -ddsub641 subtract 0.5 '1231234567456788' -> '-1231234567456788' Inexact Rounded -ddsub642 subtract 0.500000001 '1231234567456788' -> '-1231234567456787' Inexact Rounded - -rounding: down -ddsub650 subtract 0 '1231234567456789' -> '-1231234567456789' -ddsub651 subtract 0.000000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub652 subtract 0.000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub653 subtract 0.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub654 subtract 0.4 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub655 subtract 0.49 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub656 subtract 0.499999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub657 subtract 0.499999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub658 subtract 0.5 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub659 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub660 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub661 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub662 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub663 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub664 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub665 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub666 subtract 1 '1231234567456789' -> '-1231234567456788' -ddsub667 subtract 1.00000001 '1231234567456789' -> '-1231234567456787' Inexact Rounded -ddsub668 subtract 1.00001 '1231234567456789' -> '-1231234567456787' Inexact Rounded -ddsub669 subtract 1.1 '1231234567456789' -> '-1231234567456787' Inexact Rounded - - --- lots of leading zeros in intermediate result, and showing effects of --- input rounding would have affected the following -rounding: half_up -ddsub670 subtract '1234567456789' '1234567456788.1' -> 0.9 -ddsub671 subtract '1234567456789' '1234567456788.9' -> 0.1 -ddsub672 subtract '1234567456789' '1234567456789.1' -> -0.1 -ddsub673 subtract '1234567456789' '1234567456789.5' -> -0.5 -ddsub674 subtract '1234567456789' '1234567456789.9' -> -0.9 - -rounding: half_even -ddsub680 subtract '1234567456789' '1234567456788.1' -> 0.9 -ddsub681 subtract '1234567456789' '1234567456788.9' -> 0.1 -ddsub682 subtract '1234567456789' '1234567456789.1' -> -0.1 -ddsub683 subtract '1234567456789' '1234567456789.5' -> -0.5 -ddsub684 subtract '1234567456789' '1234567456789.9' -> -0.9 - -ddsub685 subtract '1234567456788' '1234567456787.1' -> 0.9 -ddsub686 subtract '1234567456788' '1234567456787.9' -> 0.1 -ddsub687 subtract '1234567456788' '1234567456788.1' -> -0.1 -ddsub688 subtract '1234567456788' '1234567456788.5' -> -0.5 -ddsub689 subtract '1234567456788' '1234567456788.9' -> -0.9 - -rounding: down -ddsub690 subtract '1234567456789' '1234567456788.1' -> 0.9 -ddsub691 subtract '1234567456789' '1234567456788.9' -> 0.1 -ddsub692 subtract '1234567456789' '1234567456789.1' -> -0.1 -ddsub693 subtract '1234567456789' '1234567456789.5' -> -0.5 -ddsub694 subtract '1234567456789' '1234567456789.9' -> -0.9 - --- Specials -ddsub780 subtract -Inf Inf -> -Infinity -ddsub781 subtract -Inf 1000 -> -Infinity -ddsub782 subtract -Inf 1 -> -Infinity -ddsub783 subtract -Inf -0 -> -Infinity -ddsub784 subtract -Inf -1 -> -Infinity -ddsub785 subtract -Inf -1000 -> -Infinity -ddsub787 subtract -1000 Inf -> -Infinity -ddsub788 subtract -Inf Inf -> -Infinity -ddsub789 subtract -1 Inf -> -Infinity -ddsub790 subtract 0 Inf -> -Infinity -ddsub791 subtract 1 Inf -> -Infinity -ddsub792 subtract 1000 Inf -> -Infinity - -ddsub800 subtract Inf Inf -> NaN Invalid_operation -ddsub801 subtract Inf 1000 -> Infinity -ddsub802 subtract Inf 1 -> Infinity -ddsub803 subtract Inf 0 -> Infinity -ddsub804 subtract Inf -0 -> Infinity -ddsub805 subtract Inf -1 -> Infinity -ddsub806 subtract Inf -1000 -> Infinity -ddsub807 subtract Inf -Inf -> Infinity -ddsub808 subtract -1000 -Inf -> Infinity -ddsub809 subtract -Inf -Inf -> NaN Invalid_operation -ddsub810 subtract -1 -Inf -> Infinity -ddsub811 subtract -0 -Inf -> Infinity -ddsub812 subtract 0 -Inf -> Infinity -ddsub813 subtract 1 -Inf -> Infinity -ddsub814 subtract 1000 -Inf -> Infinity -ddsub815 subtract Inf -Inf -> Infinity - -ddsub821 subtract NaN Inf -> NaN -ddsub822 subtract -NaN 1000 -> -NaN -ddsub823 subtract NaN 1 -> NaN -ddsub824 subtract NaN 0 -> NaN -ddsub825 subtract NaN -0 -> NaN -ddsub826 subtract NaN -1 -> NaN -ddsub827 subtract NaN -1000 -> NaN -ddsub828 subtract NaN -Inf -> NaN -ddsub829 subtract -NaN NaN -> -NaN -ddsub830 subtract -Inf NaN -> NaN -ddsub831 subtract -1000 NaN -> NaN -ddsub832 subtract -1 NaN -> NaN -ddsub833 subtract -0 NaN -> NaN -ddsub834 subtract 0 NaN -> NaN -ddsub835 subtract 1 NaN -> NaN -ddsub836 subtract 1000 -NaN -> -NaN -ddsub837 subtract Inf NaN -> NaN - -ddsub841 subtract sNaN Inf -> NaN Invalid_operation -ddsub842 subtract -sNaN 1000 -> -NaN Invalid_operation -ddsub843 subtract sNaN 1 -> NaN Invalid_operation -ddsub844 subtract sNaN 0 -> NaN Invalid_operation -ddsub845 subtract sNaN -0 -> NaN Invalid_operation -ddsub846 subtract sNaN -1 -> NaN Invalid_operation -ddsub847 subtract sNaN -1000 -> NaN Invalid_operation -ddsub848 subtract sNaN NaN -> NaN Invalid_operation -ddsub849 subtract sNaN sNaN -> NaN Invalid_operation -ddsub850 subtract NaN sNaN -> NaN Invalid_operation -ddsub851 subtract -Inf -sNaN -> -NaN Invalid_operation -ddsub852 subtract -1000 sNaN -> NaN Invalid_operation -ddsub853 subtract -1 sNaN -> NaN Invalid_operation -ddsub854 subtract -0 sNaN -> NaN Invalid_operation -ddsub855 subtract 0 sNaN -> NaN Invalid_operation -ddsub856 subtract 1 sNaN -> NaN Invalid_operation -ddsub857 subtract 1000 sNaN -> NaN Invalid_operation -ddsub858 subtract Inf sNaN -> NaN Invalid_operation -ddsub859 subtract NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddsub861 subtract NaN01 -Inf -> NaN1 -ddsub862 subtract -NaN02 -1000 -> -NaN2 -ddsub863 subtract NaN03 1000 -> NaN3 -ddsub864 subtract NaN04 Inf -> NaN4 -ddsub865 subtract NaN05 NaN61 -> NaN5 -ddsub866 subtract -Inf -NaN71 -> -NaN71 -ddsub867 subtract -1000 NaN81 -> NaN81 -ddsub868 subtract 1000 NaN91 -> NaN91 -ddsub869 subtract Inf NaN101 -> NaN101 -ddsub871 subtract sNaN011 -Inf -> NaN11 Invalid_operation -ddsub872 subtract sNaN012 -1000 -> NaN12 Invalid_operation -ddsub873 subtract -sNaN013 1000 -> -NaN13 Invalid_operation -ddsub874 subtract sNaN014 NaN171 -> NaN14 Invalid_operation -ddsub875 subtract sNaN015 sNaN181 -> NaN15 Invalid_operation -ddsub876 subtract NaN016 sNaN191 -> NaN191 Invalid_operation -ddsub877 subtract -Inf sNaN201 -> NaN201 Invalid_operation -ddsub878 subtract -1000 sNaN211 -> NaN211 Invalid_operation -ddsub879 subtract 1000 -sNaN221 -> -NaN221 Invalid_operation -ddsub880 subtract Inf sNaN231 -> NaN231 Invalid_operation -ddsub881 subtract NaN025 sNaN241 -> NaN241 Invalid_operation - --- edge case spills -ddsub901 subtract 2.E-3 1.002 -> -1.000 -ddsub902 subtract 2.0E-3 1.002 -> -1.0000 -ddsub903 subtract 2.00E-3 1.0020 -> -1.00000 -ddsub904 subtract 2.000E-3 1.00200 -> -1.000000 -ddsub905 subtract 2.0000E-3 1.002000 -> -1.0000000 -ddsub906 subtract 2.00000E-3 1.0020000 -> -1.00000000 -ddsub907 subtract 2.000000E-3 1.00200000 -> -1.000000000 -ddsub908 subtract 2.0000000E-3 1.002000000 -> -1.0000000000 - --- subnormals and overflows covered under Add - --- Null tests -ddsub9990 subtract 10 # -> NaN Invalid_operation -ddsub9991 subtract # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddSubtract.decTest -- decDouble subtraction -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decDoubles only; all arguments are +-- representable in a decDouble +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- [first group are 'quick confidence check'] +ddsub001 subtract 0 0 -> '0' +ddsub002 subtract 1 1 -> '0' +ddsub003 subtract 1 2 -> '-1' +ddsub004 subtract 2 1 -> '1' +ddsub005 subtract 2 2 -> '0' +ddsub006 subtract 3 2 -> '1' +ddsub007 subtract 2 3 -> '-1' + +ddsub011 subtract -0 0 -> '-0' +ddsub012 subtract -1 1 -> '-2' +ddsub013 subtract -1 2 -> '-3' +ddsub014 subtract -2 1 -> '-3' +ddsub015 subtract -2 2 -> '-4' +ddsub016 subtract -3 2 -> '-5' +ddsub017 subtract -2 3 -> '-5' + +ddsub021 subtract 0 -0 -> '0' +ddsub022 subtract 1 -1 -> '2' +ddsub023 subtract 1 -2 -> '3' +ddsub024 subtract 2 -1 -> '3' +ddsub025 subtract 2 -2 -> '4' +ddsub026 subtract 3 -2 -> '5' +ddsub027 subtract 2 -3 -> '5' + +ddsub030 subtract 11 1 -> 10 +ddsub031 subtract 10 1 -> 9 +ddsub032 subtract 9 1 -> 8 +ddsub033 subtract 1 1 -> 0 +ddsub034 subtract 0 1 -> -1 +ddsub035 subtract -1 1 -> -2 +ddsub036 subtract -9 1 -> -10 +ddsub037 subtract -10 1 -> -11 +ddsub038 subtract -11 1 -> -12 + +ddsub040 subtract '5.75' '3.3' -> '2.45' +ddsub041 subtract '5' '-3' -> '8' +ddsub042 subtract '-5' '-3' -> '-2' +ddsub043 subtract '-7' '2.5' -> '-9.5' +ddsub044 subtract '0.7' '0.3' -> '0.4' +ddsub045 subtract '1.3' '0.3' -> '1.0' +ddsub046 subtract '1.25' '1.25' -> '0.00' + +ddsub050 subtract '1.23456789' '1.00000000' -> '0.23456789' +ddsub051 subtract '1.23456789' '1.00000089' -> '0.23456700' + +ddsub060 subtract '70' '10000e+16' -> '-1.000000000000000E+20' Inexact Rounded +ddsub061 subtract '700' '10000e+16' -> '-1.000000000000000E+20' Inexact Rounded +ddsub062 subtract '7000' '10000e+16' -> '-9.999999999999999E+19' Inexact Rounded +ddsub063 subtract '70000' '10000e+16' -> '-9.999999999999993E+19' Rounded +ddsub064 subtract '700000' '10000e+16' -> '-9.999999999999930E+19' Rounded + -- symmetry: +ddsub065 subtract '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded +ddsub066 subtract '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded +ddsub067 subtract '10000e+16' '7000' -> '9.999999999999999E+19' Inexact Rounded +ddsub068 subtract '10000e+16' '70000' -> '9.999999999999993E+19' Rounded +ddsub069 subtract '10000e+16' '700000' -> '9.999999999999930E+19' Rounded + + -- some of the next group are really constructor tests +ddsub090 subtract '00.0' '0.0' -> '0.0' +ddsub091 subtract '00.0' '0.00' -> '0.00' +ddsub092 subtract '0.00' '00.0' -> '0.00' +ddsub093 subtract '00.0' '0.00' -> '0.00' +ddsub094 subtract '0.00' '00.0' -> '0.00' +ddsub095 subtract '3' '.3' -> '2.7' +ddsub096 subtract '3.' '.3' -> '2.7' +ddsub097 subtract '3.0' '.3' -> '2.7' +ddsub098 subtract '3.00' '.3' -> '2.70' +ddsub099 subtract '3' '3' -> '0' +ddsub100 subtract '3' '+3' -> '0' +ddsub101 subtract '3' '-3' -> '6' +ddsub102 subtract '3' '0.3' -> '2.7' +ddsub103 subtract '3.' '0.3' -> '2.7' +ddsub104 subtract '3.0' '0.3' -> '2.7' +ddsub105 subtract '3.00' '0.3' -> '2.70' +ddsub106 subtract '3' '3.0' -> '0.0' +ddsub107 subtract '3' '+3.0' -> '0.0' +ddsub108 subtract '3' '-3.0' -> '6.0' + +-- the above all from add; massaged and extended. Now some new ones... +-- [particularly important for comparisons] +-- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7 +-- with input rounding. +ddsub120 subtract '10.23456784' '10.23456789' -> '-5E-8' +ddsub121 subtract '10.23456785' '10.23456789' -> '-4E-8' +ddsub122 subtract '10.23456786' '10.23456789' -> '-3E-8' +ddsub123 subtract '10.23456787' '10.23456789' -> '-2E-8' +ddsub124 subtract '10.23456788' '10.23456789' -> '-1E-8' +ddsub125 subtract '10.23456789' '10.23456789' -> '0E-8' +ddsub126 subtract '10.23456790' '10.23456789' -> '1E-8' +ddsub127 subtract '10.23456791' '10.23456789' -> '2E-8' +ddsub128 subtract '10.23456792' '10.23456789' -> '3E-8' +ddsub129 subtract '10.23456793' '10.23456789' -> '4E-8' +ddsub130 subtract '10.23456794' '10.23456789' -> '5E-8' +ddsub131 subtract '10.23456781' '10.23456786' -> '-5E-8' +ddsub132 subtract '10.23456782' '10.23456786' -> '-4E-8' +ddsub133 subtract '10.23456783' '10.23456786' -> '-3E-8' +ddsub134 subtract '10.23456784' '10.23456786' -> '-2E-8' +ddsub135 subtract '10.23456785' '10.23456786' -> '-1E-8' +ddsub136 subtract '10.23456786' '10.23456786' -> '0E-8' +ddsub137 subtract '10.23456787' '10.23456786' -> '1E-8' +ddsub138 subtract '10.23456788' '10.23456786' -> '2E-8' +ddsub139 subtract '10.23456789' '10.23456786' -> '3E-8' +ddsub140 subtract '10.23456790' '10.23456786' -> '4E-8' +ddsub141 subtract '10.23456791' '10.23456786' -> '5E-8' +ddsub142 subtract '1' '0.999999999' -> '1E-9' +ddsub143 subtract '0.999999999' '1' -> '-1E-9' +ddsub144 subtract '-10.23456780' '-10.23456786' -> '6E-8' +ddsub145 subtract '-10.23456790' '-10.23456786' -> '-4E-8' +ddsub146 subtract '-10.23456791' '-10.23456786' -> '-5E-8' + +-- additional scaled arithmetic tests [0.97 problem] +ddsub160 subtract '0' '.1' -> '-0.1' +ddsub161 subtract '00' '.97983' -> '-0.97983' +ddsub162 subtract '0' '.9' -> '-0.9' +ddsub163 subtract '0' '0.102' -> '-0.102' +ddsub164 subtract '0' '.4' -> '-0.4' +ddsub165 subtract '0' '.307' -> '-0.307' +ddsub166 subtract '0' '.43822' -> '-0.43822' +ddsub167 subtract '0' '.911' -> '-0.911' +ddsub168 subtract '.0' '.02' -> '-0.02' +ddsub169 subtract '00' '.392' -> '-0.392' +ddsub170 subtract '0' '.26' -> '-0.26' +ddsub171 subtract '0' '0.51' -> '-0.51' +ddsub172 subtract '0' '.2234' -> '-0.2234' +ddsub173 subtract '0' '.2' -> '-0.2' +ddsub174 subtract '.0' '.0008' -> '-0.0008' +-- 0. on left +ddsub180 subtract '0.0' '-.1' -> '0.1' +ddsub181 subtract '0.00' '-.97983' -> '0.97983' +ddsub182 subtract '0.0' '-.9' -> '0.9' +ddsub183 subtract '0.0' '-0.102' -> '0.102' +ddsub184 subtract '0.0' '-.4' -> '0.4' +ddsub185 subtract '0.0' '-.307' -> '0.307' +ddsub186 subtract '0.0' '-.43822' -> '0.43822' +ddsub187 subtract '0.0' '-.911' -> '0.911' +ddsub188 subtract '0.0' '-.02' -> '0.02' +ddsub189 subtract '0.00' '-.392' -> '0.392' +ddsub190 subtract '0.0' '-.26' -> '0.26' +ddsub191 subtract '0.0' '-0.51' -> '0.51' +ddsub192 subtract '0.0' '-.2234' -> '0.2234' +ddsub193 subtract '0.0' '-.2' -> '0.2' +ddsub194 subtract '0.0' '-.0008' -> '0.0008' +-- negatives of same +ddsub200 subtract '0' '-.1' -> '0.1' +ddsub201 subtract '00' '-.97983' -> '0.97983' +ddsub202 subtract '0' '-.9' -> '0.9' +ddsub203 subtract '0' '-0.102' -> '0.102' +ddsub204 subtract '0' '-.4' -> '0.4' +ddsub205 subtract '0' '-.307' -> '0.307' +ddsub206 subtract '0' '-.43822' -> '0.43822' +ddsub207 subtract '0' '-.911' -> '0.911' +ddsub208 subtract '.0' '-.02' -> '0.02' +ddsub209 subtract '00' '-.392' -> '0.392' +ddsub210 subtract '0' '-.26' -> '0.26' +ddsub211 subtract '0' '-0.51' -> '0.51' +ddsub212 subtract '0' '-.2234' -> '0.2234' +ddsub213 subtract '0' '-.2' -> '0.2' +ddsub214 subtract '.0' '-.0008' -> '0.0008' + +-- more fixed, LHS swaps [really the same as testcases under add] +ddsub220 subtract '-56267E-12' 0 -> '-5.6267E-8' +ddsub221 subtract '-56267E-11' 0 -> '-5.6267E-7' +ddsub222 subtract '-56267E-10' 0 -> '-0.0000056267' +ddsub223 subtract '-56267E-9' 0 -> '-0.000056267' +ddsub224 subtract '-56267E-8' 0 -> '-0.00056267' +ddsub225 subtract '-56267E-7' 0 -> '-0.0056267' +ddsub226 subtract '-56267E-6' 0 -> '-0.056267' +ddsub227 subtract '-56267E-5' 0 -> '-0.56267' +ddsub228 subtract '-56267E-2' 0 -> '-562.67' +ddsub229 subtract '-56267E-1' 0 -> '-5626.7' +ddsub230 subtract '-56267E-0' 0 -> '-56267' +-- symmetry ... +ddsub240 subtract 0 '-56267E-12' -> '5.6267E-8' +ddsub241 subtract 0 '-56267E-11' -> '5.6267E-7' +ddsub242 subtract 0 '-56267E-10' -> '0.0000056267' +ddsub243 subtract 0 '-56267E-9' -> '0.000056267' +ddsub244 subtract 0 '-56267E-8' -> '0.00056267' +ddsub245 subtract 0 '-56267E-7' -> '0.0056267' +ddsub246 subtract 0 '-56267E-6' -> '0.056267' +ddsub247 subtract 0 '-56267E-5' -> '0.56267' +ddsub248 subtract 0 '-56267E-2' -> '562.67' +ddsub249 subtract 0 '-56267E-1' -> '5626.7' +ddsub250 subtract 0 '-56267E-0' -> '56267' + +-- now some more from the 'new' add +ddsub301 subtract '1.23456789' '1.00000000' -> '0.23456789' +ddsub302 subtract '1.23456789' '1.00000011' -> '0.23456778' + +-- some carrying effects +ddsub321 subtract '0.9998' '0.0000' -> '0.9998' +ddsub322 subtract '0.9998' '0.0001' -> '0.9997' +ddsub323 subtract '0.9998' '0.0002' -> '0.9996' +ddsub324 subtract '0.9998' '0.0003' -> '0.9995' +ddsub325 subtract '0.9998' '-0.0000' -> '0.9998' +ddsub326 subtract '0.9998' '-0.0001' -> '0.9999' +ddsub327 subtract '0.9998' '-0.0002' -> '1.0000' +ddsub328 subtract '0.9998' '-0.0003' -> '1.0001' + +-- internal boundaries +ddsub346 subtract '10000e+9' '7' -> '9999999999993' +ddsub347 subtract '10000e+9' '70' -> '9999999999930' +ddsub348 subtract '10000e+9' '700' -> '9999999999300' +ddsub349 subtract '10000e+9' '7000' -> '9999999993000' +ddsub350 subtract '10000e+9' '70000' -> '9999999930000' +ddsub351 subtract '10000e+9' '700000' -> '9999999300000' +ddsub352 subtract '7' '10000e+9' -> '-9999999999993' +ddsub353 subtract '70' '10000e+9' -> '-9999999999930' +ddsub354 subtract '700' '10000e+9' -> '-9999999999300' +ddsub355 subtract '7000' '10000e+9' -> '-9999999993000' +ddsub356 subtract '70000' '10000e+9' -> '-9999999930000' +ddsub357 subtract '700000' '10000e+9' -> '-9999999300000' + +-- zero preservation +ddsub361 subtract 1 '0.0001' -> '0.9999' +ddsub362 subtract 1 '0.00001' -> '0.99999' +ddsub363 subtract 1 '0.000001' -> '0.999999' +ddsub364 subtract 1 '0.0000000000000001' -> '0.9999999999999999' +ddsub365 subtract 1 '0.00000000000000001' -> '1.000000000000000' Inexact Rounded +ddsub366 subtract 1 '0.000000000000000001' -> '1.000000000000000' Inexact Rounded + +-- some funny zeros [in case of bad signum] +ddsub370 subtract 1 0 -> 1 +ddsub371 subtract 1 0. -> 1 +ddsub372 subtract 1 .0 -> 1.0 +ddsub373 subtract 1 0.0 -> 1.0 +ddsub374 subtract 0 1 -> -1 +ddsub375 subtract 0. 1 -> -1 +ddsub376 subtract .0 1 -> -1.0 +ddsub377 subtract 0.0 1 -> -1.0 + +-- leading 0 digit before round +ddsub910 subtract -103519362 -51897955.3 -> -51621406.7 +ddsub911 subtract 159579.444 89827.5229 -> 69751.9211 + +ddsub920 subtract 333.0000000123456 33.00000001234566 -> 299.9999999999999 Inexact Rounded +ddsub921 subtract 333.0000000123456 33.00000001234565 -> 300.0000000000000 Inexact Rounded +ddsub922 subtract 133.0000000123456 33.00000001234565 -> 99.99999999999995 +ddsub923 subtract 133.0000000123456 33.00000001234564 -> 99.99999999999996 +ddsub924 subtract 133.0000000123456 33.00000001234540 -> 100.0000000000002 Rounded +ddsub925 subtract 133.0000000123456 43.00000001234560 -> 90.00000000000000 +ddsub926 subtract 133.0000000123456 43.00000001234561 -> 89.99999999999999 +ddsub927 subtract 133.0000000123456 43.00000001234566 -> 89.99999999999994 +ddsub928 subtract 101.0000000123456 91.00000001234566 -> 9.99999999999994 +ddsub929 subtract 101.0000000123456 99.00000001234566 -> 1.99999999999994 + +-- more LHS swaps [were fixed] +ddsub390 subtract '-56267E-10' 0 -> '-0.0000056267' +ddsub391 subtract '-56267E-6' 0 -> '-0.056267' +ddsub392 subtract '-56267E-5' 0 -> '-0.56267' +ddsub393 subtract '-56267E-4' 0 -> '-5.6267' +ddsub394 subtract '-56267E-3' 0 -> '-56.267' +ddsub395 subtract '-56267E-2' 0 -> '-562.67' +ddsub396 subtract '-56267E-1' 0 -> '-5626.7' +ddsub397 subtract '-56267E-0' 0 -> '-56267' +ddsub398 subtract '-5E-10' 0 -> '-5E-10' +ddsub399 subtract '-5E-7' 0 -> '-5E-7' +ddsub400 subtract '-5E-6' 0 -> '-0.000005' +ddsub401 subtract '-5E-5' 0 -> '-0.00005' +ddsub402 subtract '-5E-4' 0 -> '-0.0005' +ddsub403 subtract '-5E-1' 0 -> '-0.5' +ddsub404 subtract '-5E0' 0 -> '-5' +ddsub405 subtract '-5E1' 0 -> '-50' +ddsub406 subtract '-5E5' 0 -> '-500000' +ddsub407 subtract '-5E15' 0 -> '-5000000000000000' +ddsub408 subtract '-5E16' 0 -> '-5.000000000000000E+16' Rounded +ddsub409 subtract '-5E17' 0 -> '-5.000000000000000E+17' Rounded +ddsub410 subtract '-5E18' 0 -> '-5.000000000000000E+18' Rounded +ddsub411 subtract '-5E100' 0 -> '-5.000000000000000E+100' Rounded + +-- more RHS swaps [were fixed] +ddsub420 subtract 0 '-56267E-10' -> '0.0000056267' +ddsub421 subtract 0 '-56267E-6' -> '0.056267' +ddsub422 subtract 0 '-56267E-5' -> '0.56267' +ddsub423 subtract 0 '-56267E-4' -> '5.6267' +ddsub424 subtract 0 '-56267E-3' -> '56.267' +ddsub425 subtract 0 '-56267E-2' -> '562.67' +ddsub426 subtract 0 '-56267E-1' -> '5626.7' +ddsub427 subtract 0 '-56267E-0' -> '56267' +ddsub428 subtract 0 '-5E-10' -> '5E-10' +ddsub429 subtract 0 '-5E-7' -> '5E-7' +ddsub430 subtract 0 '-5E-6' -> '0.000005' +ddsub431 subtract 0 '-5E-5' -> '0.00005' +ddsub432 subtract 0 '-5E-4' -> '0.0005' +ddsub433 subtract 0 '-5E-1' -> '0.5' +ddsub434 subtract 0 '-5E0' -> '5' +ddsub435 subtract 0 '-5E1' -> '50' +ddsub436 subtract 0 '-5E5' -> '500000' +ddsub437 subtract 0 '-5E15' -> '5000000000000000' +ddsub438 subtract 0 '-5E16' -> '5.000000000000000E+16' Rounded +ddsub439 subtract 0 '-5E17' -> '5.000000000000000E+17' Rounded +ddsub440 subtract 0 '-5E18' -> '5.000000000000000E+18' Rounded +ddsub441 subtract 0 '-5E100' -> '5.000000000000000E+100' Rounded + + +-- try borderline precision, with carries, etc. +ddsub461 subtract '1E+16' '1' -> '9999999999999999' +ddsub462 subtract '1E+12' '-1.111' -> '1000000000001.111' +ddsub463 subtract '1.111' '-1E+12' -> '1000000000001.111' +ddsub464 subtract '-1' '-1E+16' -> '9999999999999999' +ddsub465 subtract '7E+15' '1' -> '6999999999999999' +ddsub466 subtract '7E+12' '-1.111' -> '7000000000001.111' +ddsub467 subtract '1.111' '-7E+12' -> '7000000000001.111' +ddsub468 subtract '-1' '-7E+15' -> '6999999999999999' + +-- 1234567890123456 1234567890123456 1 23456789012345 +ddsub470 subtract '0.4444444444444444' '-0.5555555555555563' -> '1.000000000000001' Inexact Rounded +ddsub471 subtract '0.4444444444444444' '-0.5555555555555562' -> '1.000000000000001' Inexact Rounded +ddsub472 subtract '0.4444444444444444' '-0.5555555555555561' -> '1.000000000000000' Inexact Rounded +ddsub473 subtract '0.4444444444444444' '-0.5555555555555560' -> '1.000000000000000' Inexact Rounded +ddsub474 subtract '0.4444444444444444' '-0.5555555555555559' -> '1.000000000000000' Inexact Rounded +ddsub475 subtract '0.4444444444444444' '-0.5555555555555558' -> '1.000000000000000' Inexact Rounded +ddsub476 subtract '0.4444444444444444' '-0.5555555555555557' -> '1.000000000000000' Inexact Rounded +ddsub477 subtract '0.4444444444444444' '-0.5555555555555556' -> '1.000000000000000' Rounded +ddsub478 subtract '0.4444444444444444' '-0.5555555555555555' -> '0.9999999999999999' +ddsub479 subtract '0.4444444444444444' '-0.5555555555555554' -> '0.9999999999999998' +ddsub480 subtract '0.4444444444444444' '-0.5555555555555553' -> '0.9999999999999997' +ddsub481 subtract '0.4444444444444444' '-0.5555555555555552' -> '0.9999999999999996' +ddsub482 subtract '0.4444444444444444' '-0.5555555555555551' -> '0.9999999999999995' +ddsub483 subtract '0.4444444444444444' '-0.5555555555555550' -> '0.9999999999999994' + +-- and some more, including residue effects and different roundings +rounding: half_up +ddsub500 subtract '1231234567456789' 0 -> '1231234567456789' +ddsub501 subtract '1231234567456789' 0.000000001 -> '1231234567456789' Inexact Rounded +ddsub502 subtract '1231234567456789' 0.000001 -> '1231234567456789' Inexact Rounded +ddsub503 subtract '1231234567456789' 0.1 -> '1231234567456789' Inexact Rounded +ddsub504 subtract '1231234567456789' 0.4 -> '1231234567456789' Inexact Rounded +ddsub505 subtract '1231234567456789' 0.49 -> '1231234567456789' Inexact Rounded +ddsub506 subtract '1231234567456789' 0.499999 -> '1231234567456789' Inexact Rounded +ddsub507 subtract '1231234567456789' 0.499999999 -> '1231234567456789' Inexact Rounded +ddsub508 subtract '1231234567456789' 0.5 -> '1231234567456789' Inexact Rounded +ddsub509 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded +ddsub510 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded +ddsub511 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded +ddsub512 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded +ddsub513 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded +ddsub514 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded +ddsub515 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded +ddsub516 subtract '1231234567456789' 1 -> '1231234567456788' +ddsub517 subtract '1231234567456789' 1.000000001 -> '1231234567456788' Inexact Rounded +ddsub518 subtract '1231234567456789' 1.00001 -> '1231234567456788' Inexact Rounded +ddsub519 subtract '1231234567456789' 1.1 -> '1231234567456788' Inexact Rounded + +rounding: half_even +ddsub520 subtract '1231234567456789' 0 -> '1231234567456789' +ddsub521 subtract '1231234567456789' 0.000000001 -> '1231234567456789' Inexact Rounded +ddsub522 subtract '1231234567456789' 0.000001 -> '1231234567456789' Inexact Rounded +ddsub523 subtract '1231234567456789' 0.1 -> '1231234567456789' Inexact Rounded +ddsub524 subtract '1231234567456789' 0.4 -> '1231234567456789' Inexact Rounded +ddsub525 subtract '1231234567456789' 0.49 -> '1231234567456789' Inexact Rounded +ddsub526 subtract '1231234567456789' 0.499999 -> '1231234567456789' Inexact Rounded +ddsub527 subtract '1231234567456789' 0.499999999 -> '1231234567456789' Inexact Rounded +ddsub528 subtract '1231234567456789' 0.5 -> '1231234567456788' Inexact Rounded +ddsub529 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded +ddsub530 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded +ddsub531 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded +ddsub532 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded +ddsub533 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded +ddsub534 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded +ddsub535 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded +ddsub536 subtract '1231234567456789' 1 -> '1231234567456788' +ddsub537 subtract '1231234567456789' 1.00000001 -> '1231234567456788' Inexact Rounded +ddsub538 subtract '1231234567456789' 1.00001 -> '1231234567456788' Inexact Rounded +ddsub539 subtract '1231234567456789' 1.1 -> '1231234567456788' Inexact Rounded +-- critical few with even bottom digit... +ddsub540 subtract '1231234567456788' 0.499999999 -> '1231234567456788' Inexact Rounded +ddsub541 subtract '1231234567456788' 0.5 -> '1231234567456788' Inexact Rounded +ddsub542 subtract '1231234567456788' 0.500000001 -> '1231234567456787' Inexact Rounded + +rounding: down +ddsub550 subtract '1231234567456789' 0 -> '1231234567456789' +ddsub551 subtract '1231234567456789' 0.000000001 -> '1231234567456788' Inexact Rounded +ddsub552 subtract '1231234567456789' 0.000001 -> '1231234567456788' Inexact Rounded +ddsub553 subtract '1231234567456789' 0.1 -> '1231234567456788' Inexact Rounded +ddsub554 subtract '1231234567456789' 0.4 -> '1231234567456788' Inexact Rounded +ddsub555 subtract '1231234567456789' 0.49 -> '1231234567456788' Inexact Rounded +ddsub556 subtract '1231234567456789' 0.499999 -> '1231234567456788' Inexact Rounded +ddsub557 subtract '1231234567456789' 0.499999999 -> '1231234567456788' Inexact Rounded +ddsub558 subtract '1231234567456789' 0.5 -> '1231234567456788' Inexact Rounded +ddsub559 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded +ddsub560 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded +ddsub561 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded +ddsub562 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded +ddsub563 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded +ddsub564 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded +ddsub565 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded +ddsub566 subtract '1231234567456789' 1 -> '1231234567456788' +ddsub567 subtract '1231234567456789' 1.00000001 -> '1231234567456787' Inexact Rounded +ddsub568 subtract '1231234567456789' 1.00001 -> '1231234567456787' Inexact Rounded +ddsub569 subtract '1231234567456789' 1.1 -> '1231234567456787' Inexact Rounded + +-- symmetry... +rounding: half_up +ddsub600 subtract 0 '1231234567456789' -> '-1231234567456789' +ddsub601 subtract 0.000000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub602 subtract 0.000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub603 subtract 0.1 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub604 subtract 0.4 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub605 subtract 0.49 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub606 subtract 0.499999 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub607 subtract 0.499999999 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub608 subtract 0.5 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub609 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub610 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub611 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub612 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub613 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub614 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub615 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub616 subtract 1 '1231234567456789' -> '-1231234567456788' +ddsub617 subtract 1.000000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub618 subtract 1.00001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub619 subtract 1.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded + +rounding: half_even +ddsub620 subtract 0 '1231234567456789' -> '-1231234567456789' +ddsub621 subtract 0.000000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub622 subtract 0.000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub623 subtract 0.1 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub624 subtract 0.4 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub625 subtract 0.49 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub626 subtract 0.499999 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub627 subtract 0.499999999 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub628 subtract 0.5 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub629 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub630 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub631 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub632 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub633 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub634 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub635 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub636 subtract 1 '1231234567456789' -> '-1231234567456788' +ddsub637 subtract 1.00000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub638 subtract 1.00001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub639 subtract 1.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded +-- critical few with even bottom digit... +ddsub640 subtract 0.499999999 '1231234567456788' -> '-1231234567456788' Inexact Rounded +ddsub641 subtract 0.5 '1231234567456788' -> '-1231234567456788' Inexact Rounded +ddsub642 subtract 0.500000001 '1231234567456788' -> '-1231234567456787' Inexact Rounded + +rounding: down +ddsub650 subtract 0 '1231234567456789' -> '-1231234567456789' +ddsub651 subtract 0.000000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub652 subtract 0.000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub653 subtract 0.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub654 subtract 0.4 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub655 subtract 0.49 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub656 subtract 0.499999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub657 subtract 0.499999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub658 subtract 0.5 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub659 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub660 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub661 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub662 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub663 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub664 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub665 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub666 subtract 1 '1231234567456789' -> '-1231234567456788' +ddsub667 subtract 1.00000001 '1231234567456789' -> '-1231234567456787' Inexact Rounded +ddsub668 subtract 1.00001 '1231234567456789' -> '-1231234567456787' Inexact Rounded +ddsub669 subtract 1.1 '1231234567456789' -> '-1231234567456787' Inexact Rounded + + +-- lots of leading zeros in intermediate result, and showing effects of +-- input rounding would have affected the following +rounding: half_up +ddsub670 subtract '1234567456789' '1234567456788.1' -> 0.9 +ddsub671 subtract '1234567456789' '1234567456788.9' -> 0.1 +ddsub672 subtract '1234567456789' '1234567456789.1' -> -0.1 +ddsub673 subtract '1234567456789' '1234567456789.5' -> -0.5 +ddsub674 subtract '1234567456789' '1234567456789.9' -> -0.9 + +rounding: half_even +ddsub680 subtract '1234567456789' '1234567456788.1' -> 0.9 +ddsub681 subtract '1234567456789' '1234567456788.9' -> 0.1 +ddsub682 subtract '1234567456789' '1234567456789.1' -> -0.1 +ddsub683 subtract '1234567456789' '1234567456789.5' -> -0.5 +ddsub684 subtract '1234567456789' '1234567456789.9' -> -0.9 + +ddsub685 subtract '1234567456788' '1234567456787.1' -> 0.9 +ddsub686 subtract '1234567456788' '1234567456787.9' -> 0.1 +ddsub687 subtract '1234567456788' '1234567456788.1' -> -0.1 +ddsub688 subtract '1234567456788' '1234567456788.5' -> -0.5 +ddsub689 subtract '1234567456788' '1234567456788.9' -> -0.9 + +rounding: down +ddsub690 subtract '1234567456789' '1234567456788.1' -> 0.9 +ddsub691 subtract '1234567456789' '1234567456788.9' -> 0.1 +ddsub692 subtract '1234567456789' '1234567456789.1' -> -0.1 +ddsub693 subtract '1234567456789' '1234567456789.5' -> -0.5 +ddsub694 subtract '1234567456789' '1234567456789.9' -> -0.9 + +-- Specials +ddsub780 subtract -Inf Inf -> -Infinity +ddsub781 subtract -Inf 1000 -> -Infinity +ddsub782 subtract -Inf 1 -> -Infinity +ddsub783 subtract -Inf -0 -> -Infinity +ddsub784 subtract -Inf -1 -> -Infinity +ddsub785 subtract -Inf -1000 -> -Infinity +ddsub787 subtract -1000 Inf -> -Infinity +ddsub788 subtract -Inf Inf -> -Infinity +ddsub789 subtract -1 Inf -> -Infinity +ddsub790 subtract 0 Inf -> -Infinity +ddsub791 subtract 1 Inf -> -Infinity +ddsub792 subtract 1000 Inf -> -Infinity + +ddsub800 subtract Inf Inf -> NaN Invalid_operation +ddsub801 subtract Inf 1000 -> Infinity +ddsub802 subtract Inf 1 -> Infinity +ddsub803 subtract Inf 0 -> Infinity +ddsub804 subtract Inf -0 -> Infinity +ddsub805 subtract Inf -1 -> Infinity +ddsub806 subtract Inf -1000 -> Infinity +ddsub807 subtract Inf -Inf -> Infinity +ddsub808 subtract -1000 -Inf -> Infinity +ddsub809 subtract -Inf -Inf -> NaN Invalid_operation +ddsub810 subtract -1 -Inf -> Infinity +ddsub811 subtract -0 -Inf -> Infinity +ddsub812 subtract 0 -Inf -> Infinity +ddsub813 subtract 1 -Inf -> Infinity +ddsub814 subtract 1000 -Inf -> Infinity +ddsub815 subtract Inf -Inf -> Infinity + +ddsub821 subtract NaN Inf -> NaN +ddsub822 subtract -NaN 1000 -> -NaN +ddsub823 subtract NaN 1 -> NaN +ddsub824 subtract NaN 0 -> NaN +ddsub825 subtract NaN -0 -> NaN +ddsub826 subtract NaN -1 -> NaN +ddsub827 subtract NaN -1000 -> NaN +ddsub828 subtract NaN -Inf -> NaN +ddsub829 subtract -NaN NaN -> -NaN +ddsub830 subtract -Inf NaN -> NaN +ddsub831 subtract -1000 NaN -> NaN +ddsub832 subtract -1 NaN -> NaN +ddsub833 subtract -0 NaN -> NaN +ddsub834 subtract 0 NaN -> NaN +ddsub835 subtract 1 NaN -> NaN +ddsub836 subtract 1000 -NaN -> -NaN +ddsub837 subtract Inf NaN -> NaN + +ddsub841 subtract sNaN Inf -> NaN Invalid_operation +ddsub842 subtract -sNaN 1000 -> -NaN Invalid_operation +ddsub843 subtract sNaN 1 -> NaN Invalid_operation +ddsub844 subtract sNaN 0 -> NaN Invalid_operation +ddsub845 subtract sNaN -0 -> NaN Invalid_operation +ddsub846 subtract sNaN -1 -> NaN Invalid_operation +ddsub847 subtract sNaN -1000 -> NaN Invalid_operation +ddsub848 subtract sNaN NaN -> NaN Invalid_operation +ddsub849 subtract sNaN sNaN -> NaN Invalid_operation +ddsub850 subtract NaN sNaN -> NaN Invalid_operation +ddsub851 subtract -Inf -sNaN -> -NaN Invalid_operation +ddsub852 subtract -1000 sNaN -> NaN Invalid_operation +ddsub853 subtract -1 sNaN -> NaN Invalid_operation +ddsub854 subtract -0 sNaN -> NaN Invalid_operation +ddsub855 subtract 0 sNaN -> NaN Invalid_operation +ddsub856 subtract 1 sNaN -> NaN Invalid_operation +ddsub857 subtract 1000 sNaN -> NaN Invalid_operation +ddsub858 subtract Inf sNaN -> NaN Invalid_operation +ddsub859 subtract NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddsub861 subtract NaN01 -Inf -> NaN1 +ddsub862 subtract -NaN02 -1000 -> -NaN2 +ddsub863 subtract NaN03 1000 -> NaN3 +ddsub864 subtract NaN04 Inf -> NaN4 +ddsub865 subtract NaN05 NaN61 -> NaN5 +ddsub866 subtract -Inf -NaN71 -> -NaN71 +ddsub867 subtract -1000 NaN81 -> NaN81 +ddsub868 subtract 1000 NaN91 -> NaN91 +ddsub869 subtract Inf NaN101 -> NaN101 +ddsub871 subtract sNaN011 -Inf -> NaN11 Invalid_operation +ddsub872 subtract sNaN012 -1000 -> NaN12 Invalid_operation +ddsub873 subtract -sNaN013 1000 -> -NaN13 Invalid_operation +ddsub874 subtract sNaN014 NaN171 -> NaN14 Invalid_operation +ddsub875 subtract sNaN015 sNaN181 -> NaN15 Invalid_operation +ddsub876 subtract NaN016 sNaN191 -> NaN191 Invalid_operation +ddsub877 subtract -Inf sNaN201 -> NaN201 Invalid_operation +ddsub878 subtract -1000 sNaN211 -> NaN211 Invalid_operation +ddsub879 subtract 1000 -sNaN221 -> -NaN221 Invalid_operation +ddsub880 subtract Inf sNaN231 -> NaN231 Invalid_operation +ddsub881 subtract NaN025 sNaN241 -> NaN241 Invalid_operation + +-- edge case spills +ddsub901 subtract 2.E-3 1.002 -> -1.000 +ddsub902 subtract 2.0E-3 1.002 -> -1.0000 +ddsub903 subtract 2.00E-3 1.0020 -> -1.00000 +ddsub904 subtract 2.000E-3 1.00200 -> -1.000000 +ddsub905 subtract 2.0000E-3 1.002000 -> -1.0000000 +ddsub906 subtract 2.00000E-3 1.0020000 -> -1.00000000 +ddsub907 subtract 2.000000E-3 1.00200000 -> -1.000000000 +ddsub908 subtract 2.0000000E-3 1.002000000 -> -1.0000000000 + +-- subnormals and overflows covered under Add + +-- Null tests +ddsub9990 subtract 10 # -> NaN Invalid_operation +ddsub9991 subtract # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddToIntegral.decTest b/Lib/test/decimaltestdata/ddToIntegral.decTest index 900bd4ac3a8..bf6d61fa563 100644 --- a/Lib/test/decimaltestdata/ddToIntegral.decTest +++ b/Lib/test/decimaltestdata/ddToIntegral.decTest @@ -1,257 +1,257 @@ ------------------------------------------------------------------------- --- ddToIntegral.decTest -- round Double to integral value -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests tests the extended specification 'round-to-integral --- value-exact' operations (from IEEE 854, later modified in 754r). --- All non-zero results are defined as being those from either copy or --- quantize, so those are assumed to have been tested extensively --- elsewhere; the tests here are for integrity, rounding mode, etc. --- Also, it is assumed the test harness will use these tests for both --- ToIntegralExact (which does set Inexact) and the fixed-name --- functions (which do not set Inexact). - --- Note that decNumber implements an earlier definition of toIntegral --- which never sets Inexact; the decTest operator for that is called --- 'tointegral' instead of 'tointegralx'. - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddintx001 tointegralx 0 -> 0 -ddintx002 tointegralx 0.0 -> 0 -ddintx003 tointegralx 0.1 -> 0 Inexact Rounded -ddintx004 tointegralx 0.2 -> 0 Inexact Rounded -ddintx005 tointegralx 0.3 -> 0 Inexact Rounded -ddintx006 tointegralx 0.4 -> 0 Inexact Rounded -ddintx007 tointegralx 0.5 -> 0 Inexact Rounded -ddintx008 tointegralx 0.6 -> 1 Inexact Rounded -ddintx009 tointegralx 0.7 -> 1 Inexact Rounded -ddintx010 tointegralx 0.8 -> 1 Inexact Rounded -ddintx011 tointegralx 0.9 -> 1 Inexact Rounded -ddintx012 tointegralx 1 -> 1 -ddintx013 tointegralx 1.0 -> 1 Rounded -ddintx014 tointegralx 1.1 -> 1 Inexact Rounded -ddintx015 tointegralx 1.2 -> 1 Inexact Rounded -ddintx016 tointegralx 1.3 -> 1 Inexact Rounded -ddintx017 tointegralx 1.4 -> 1 Inexact Rounded -ddintx018 tointegralx 1.5 -> 2 Inexact Rounded -ddintx019 tointegralx 1.6 -> 2 Inexact Rounded -ddintx020 tointegralx 1.7 -> 2 Inexact Rounded -ddintx021 tointegralx 1.8 -> 2 Inexact Rounded -ddintx022 tointegralx 1.9 -> 2 Inexact Rounded --- negatives -ddintx031 tointegralx -0 -> -0 -ddintx032 tointegralx -0.0 -> -0 -ddintx033 tointegralx -0.1 -> -0 Inexact Rounded -ddintx034 tointegralx -0.2 -> -0 Inexact Rounded -ddintx035 tointegralx -0.3 -> -0 Inexact Rounded -ddintx036 tointegralx -0.4 -> -0 Inexact Rounded -ddintx037 tointegralx -0.5 -> -0 Inexact Rounded -ddintx038 tointegralx -0.6 -> -1 Inexact Rounded -ddintx039 tointegralx -0.7 -> -1 Inexact Rounded -ddintx040 tointegralx -0.8 -> -1 Inexact Rounded -ddintx041 tointegralx -0.9 -> -1 Inexact Rounded -ddintx042 tointegralx -1 -> -1 -ddintx043 tointegralx -1.0 -> -1 Rounded -ddintx044 tointegralx -1.1 -> -1 Inexact Rounded -ddintx045 tointegralx -1.2 -> -1 Inexact Rounded -ddintx046 tointegralx -1.3 -> -1 Inexact Rounded -ddintx047 tointegralx -1.4 -> -1 Inexact Rounded -ddintx048 tointegralx -1.5 -> -2 Inexact Rounded -ddintx049 tointegralx -1.6 -> -2 Inexact Rounded -ddintx050 tointegralx -1.7 -> -2 Inexact Rounded -ddintx051 tointegralx -1.8 -> -2 Inexact Rounded -ddintx052 tointegralx -1.9 -> -2 Inexact Rounded --- next two would be NaN using quantize(x, 0) -ddintx053 tointegralx 10E+60 -> 1.0E+61 -ddintx054 tointegralx -10E+60 -> -1.0E+61 - --- numbers around precision -ddintx060 tointegralx '56267E-17' -> '0' Inexact Rounded -ddintx061 tointegralx '56267E-5' -> '1' Inexact Rounded -ddintx062 tointegralx '56267E-2' -> '563' Inexact Rounded -ddintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded -ddintx065 tointegralx '56267E-0' -> '56267' -ddintx066 tointegralx '56267E+0' -> '56267' -ddintx067 tointegralx '56267E+1' -> '5.6267E+5' -ddintx068 tointegralx '56267E+9' -> '5.6267E+13' -ddintx069 tointegralx '56267E+10' -> '5.6267E+14' -ddintx070 tointegralx '56267E+11' -> '5.6267E+15' -ddintx071 tointegralx '56267E+12' -> '5.6267E+16' -ddintx072 tointegralx '56267E+13' -> '5.6267E+17' -ddintx073 tointegralx '1.23E+96' -> '1.23E+96' -ddintx074 tointegralx '1.23E+384' -> #47fd300000000000 Clamped - -ddintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded -ddintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded -ddintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded -ddintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded -ddintx085 tointegralx '-56267E-0' -> '-56267' -ddintx086 tointegralx '-56267E+0' -> '-56267' -ddintx087 tointegralx '-56267E+1' -> '-5.6267E+5' -ddintx088 tointegralx '-56267E+9' -> '-5.6267E+13' -ddintx089 tointegralx '-56267E+10' -> '-5.6267E+14' -ddintx090 tointegralx '-56267E+11' -> '-5.6267E+15' -ddintx091 tointegralx '-56267E+12' -> '-5.6267E+16' -ddintx092 tointegralx '-56267E+13' -> '-5.6267E+17' -ddintx093 tointegralx '-1.23E+96' -> '-1.23E+96' -ddintx094 tointegralx '-1.23E+384' -> #c7fd300000000000 Clamped - --- subnormal inputs -ddintx100 tointegralx 1E-299 -> 0 Inexact Rounded -ddintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded -ddintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded -ddintx103 tointegralx 0E-299 -> 0 - --- specials and zeros -ddintx120 tointegralx 'Inf' -> Infinity -ddintx121 tointegralx '-Inf' -> -Infinity -ddintx122 tointegralx NaN -> NaN -ddintx123 tointegralx sNaN -> NaN Invalid_operation -ddintx124 tointegralx 0 -> 0 -ddintx125 tointegralx -0 -> -0 -ddintx126 tointegralx 0.000 -> 0 -ddintx127 tointegralx 0.00 -> 0 -ddintx128 tointegralx 0.0 -> 0 -ddintx129 tointegralx 0 -> 0 -ddintx130 tointegralx 0E-3 -> 0 -ddintx131 tointegralx 0E-2 -> 0 -ddintx132 tointegralx 0E-1 -> 0 -ddintx133 tointegralx 0E-0 -> 0 -ddintx134 tointegralx 0E+1 -> 0E+1 -ddintx135 tointegralx 0E+2 -> 0E+2 -ddintx136 tointegralx 0E+3 -> 0E+3 -ddintx137 tointegralx 0E+4 -> 0E+4 -ddintx138 tointegralx 0E+5 -> 0E+5 -ddintx139 tointegralx -0.000 -> -0 -ddintx140 tointegralx -0.00 -> -0 -ddintx141 tointegralx -0.0 -> -0 -ddintx142 tointegralx -0 -> -0 -ddintx143 tointegralx -0E-3 -> -0 -ddintx144 tointegralx -0E-2 -> -0 -ddintx145 tointegralx -0E-1 -> -0 -ddintx146 tointegralx -0E-0 -> -0 -ddintx147 tointegralx -0E+1 -> -0E+1 -ddintx148 tointegralx -0E+2 -> -0E+2 -ddintx149 tointegralx -0E+3 -> -0E+3 -ddintx150 tointegralx -0E+4 -> -0E+4 -ddintx151 tointegralx -0E+5 -> -0E+5 --- propagating NaNs -ddintx152 tointegralx NaN808 -> NaN808 -ddintx153 tointegralx sNaN080 -> NaN80 Invalid_operation -ddintx154 tointegralx -NaN808 -> -NaN808 -ddintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation -ddintx156 tointegralx -NaN -> -NaN -ddintx157 tointegralx -sNaN -> -NaN Invalid_operation - --- examples -rounding: half_up -ddintx200 tointegralx 2.1 -> 2 Inexact Rounded -ddintx201 tointegralx 100 -> 100 -ddintx202 tointegralx 100.0 -> 100 Rounded -ddintx203 tointegralx 101.5 -> 102 Inexact Rounded -ddintx204 tointegralx -101.5 -> -102 Inexact Rounded -ddintx205 tointegralx 10E+5 -> 1.0E+6 -ddintx206 tointegralx 7.89E+77 -> 7.89E+77 -ddintx207 tointegralx -Inf -> -Infinity - - --- all rounding modes -rounding: half_even -ddintx210 tointegralx 55.5 -> 56 Inexact Rounded -ddintx211 tointegralx 56.5 -> 56 Inexact Rounded -ddintx212 tointegralx 57.5 -> 58 Inexact Rounded -ddintx213 tointegralx -55.5 -> -56 Inexact Rounded -ddintx214 tointegralx -56.5 -> -56 Inexact Rounded -ddintx215 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_up - -ddintx220 tointegralx 55.5 -> 56 Inexact Rounded -ddintx221 tointegralx 56.5 -> 57 Inexact Rounded -ddintx222 tointegralx 57.5 -> 58 Inexact Rounded -ddintx223 tointegralx -55.5 -> -56 Inexact Rounded -ddintx224 tointegralx -56.5 -> -57 Inexact Rounded -ddintx225 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_down - -ddintx230 tointegralx 55.5 -> 55 Inexact Rounded -ddintx231 tointegralx 56.5 -> 56 Inexact Rounded -ddintx232 tointegralx 57.5 -> 57 Inexact Rounded -ddintx233 tointegralx -55.5 -> -55 Inexact Rounded -ddintx234 tointegralx -56.5 -> -56 Inexact Rounded -ddintx235 tointegralx -57.5 -> -57 Inexact Rounded - -rounding: up - -ddintx240 tointegralx 55.3 -> 56 Inexact Rounded -ddintx241 tointegralx 56.3 -> 57 Inexact Rounded -ddintx242 tointegralx 57.3 -> 58 Inexact Rounded -ddintx243 tointegralx -55.3 -> -56 Inexact Rounded -ddintx244 tointegralx -56.3 -> -57 Inexact Rounded -ddintx245 tointegralx -57.3 -> -58 Inexact Rounded - -rounding: down - -ddintx250 tointegralx 55.7 -> 55 Inexact Rounded -ddintx251 tointegralx 56.7 -> 56 Inexact Rounded -ddintx252 tointegralx 57.7 -> 57 Inexact Rounded -ddintx253 tointegralx -55.7 -> -55 Inexact Rounded -ddintx254 tointegralx -56.7 -> -56 Inexact Rounded -ddintx255 tointegralx -57.7 -> -57 Inexact Rounded - -rounding: ceiling - -ddintx260 tointegralx 55.3 -> 56 Inexact Rounded -ddintx261 tointegralx 56.3 -> 57 Inexact Rounded -ddintx262 tointegralx 57.3 -> 58 Inexact Rounded -ddintx263 tointegralx -55.3 -> -55 Inexact Rounded -ddintx264 tointegralx -56.3 -> -56 Inexact Rounded -ddintx265 tointegralx -57.3 -> -57 Inexact Rounded - -rounding: floor - -ddintx270 tointegralx 55.7 -> 55 Inexact Rounded -ddintx271 tointegralx 56.7 -> 56 Inexact Rounded -ddintx272 tointegralx 57.7 -> 57 Inexact Rounded -ddintx273 tointegralx -55.7 -> -56 Inexact Rounded -ddintx274 tointegralx -56.7 -> -57 Inexact Rounded -ddintx275 tointegralx -57.7 -> -58 Inexact Rounded - --- Int and uInt32 edge values for testing conversions -ddintx300 tointegralx -2147483646 -> -2147483646 -ddintx301 tointegralx -2147483647 -> -2147483647 -ddintx302 tointegralx -2147483648 -> -2147483648 -ddintx303 tointegralx -2147483649 -> -2147483649 -ddintx304 tointegralx 2147483646 -> 2147483646 -ddintx305 tointegralx 2147483647 -> 2147483647 -ddintx306 tointegralx 2147483648 -> 2147483648 -ddintx307 tointegralx 2147483649 -> 2147483649 -ddintx308 tointegralx 4294967294 -> 4294967294 -ddintx309 tointegralx 4294967295 -> 4294967295 -ddintx310 tointegralx 4294967296 -> 4294967296 -ddintx311 tointegralx 4294967297 -> 4294967297 - +------------------------------------------------------------------------ +-- ddToIntegral.decTest -- round Double to integral value -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests tests the extended specification 'round-to-integral +-- value-exact' operations (from IEEE 854, later modified in 754r). +-- All non-zero results are defined as being those from either copy or +-- quantize, so those are assumed to have been tested extensively +-- elsewhere; the tests here are for integrity, rounding mode, etc. +-- Also, it is assumed the test harness will use these tests for both +-- ToIntegralExact (which does set Inexact) and the fixed-name +-- functions (which do not set Inexact). + +-- Note that decNumber implements an earlier definition of toIntegral +-- which never sets Inexact; the decTest operator for that is called +-- 'tointegral' instead of 'tointegralx'. + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddintx001 tointegralx 0 -> 0 +ddintx002 tointegralx 0.0 -> 0 +ddintx003 tointegralx 0.1 -> 0 Inexact Rounded +ddintx004 tointegralx 0.2 -> 0 Inexact Rounded +ddintx005 tointegralx 0.3 -> 0 Inexact Rounded +ddintx006 tointegralx 0.4 -> 0 Inexact Rounded +ddintx007 tointegralx 0.5 -> 0 Inexact Rounded +ddintx008 tointegralx 0.6 -> 1 Inexact Rounded +ddintx009 tointegralx 0.7 -> 1 Inexact Rounded +ddintx010 tointegralx 0.8 -> 1 Inexact Rounded +ddintx011 tointegralx 0.9 -> 1 Inexact Rounded +ddintx012 tointegralx 1 -> 1 +ddintx013 tointegralx 1.0 -> 1 Rounded +ddintx014 tointegralx 1.1 -> 1 Inexact Rounded +ddintx015 tointegralx 1.2 -> 1 Inexact Rounded +ddintx016 tointegralx 1.3 -> 1 Inexact Rounded +ddintx017 tointegralx 1.4 -> 1 Inexact Rounded +ddintx018 tointegralx 1.5 -> 2 Inexact Rounded +ddintx019 tointegralx 1.6 -> 2 Inexact Rounded +ddintx020 tointegralx 1.7 -> 2 Inexact Rounded +ddintx021 tointegralx 1.8 -> 2 Inexact Rounded +ddintx022 tointegralx 1.9 -> 2 Inexact Rounded +-- negatives +ddintx031 tointegralx -0 -> -0 +ddintx032 tointegralx -0.0 -> -0 +ddintx033 tointegralx -0.1 -> -0 Inexact Rounded +ddintx034 tointegralx -0.2 -> -0 Inexact Rounded +ddintx035 tointegralx -0.3 -> -0 Inexact Rounded +ddintx036 tointegralx -0.4 -> -0 Inexact Rounded +ddintx037 tointegralx -0.5 -> -0 Inexact Rounded +ddintx038 tointegralx -0.6 -> -1 Inexact Rounded +ddintx039 tointegralx -0.7 -> -1 Inexact Rounded +ddintx040 tointegralx -0.8 -> -1 Inexact Rounded +ddintx041 tointegralx -0.9 -> -1 Inexact Rounded +ddintx042 tointegralx -1 -> -1 +ddintx043 tointegralx -1.0 -> -1 Rounded +ddintx044 tointegralx -1.1 -> -1 Inexact Rounded +ddintx045 tointegralx -1.2 -> -1 Inexact Rounded +ddintx046 tointegralx -1.3 -> -1 Inexact Rounded +ddintx047 tointegralx -1.4 -> -1 Inexact Rounded +ddintx048 tointegralx -1.5 -> -2 Inexact Rounded +ddintx049 tointegralx -1.6 -> -2 Inexact Rounded +ddintx050 tointegralx -1.7 -> -2 Inexact Rounded +ddintx051 tointegralx -1.8 -> -2 Inexact Rounded +ddintx052 tointegralx -1.9 -> -2 Inexact Rounded +-- next two would be NaN using quantize(x, 0) +ddintx053 tointegralx 10E+60 -> 1.0E+61 +ddintx054 tointegralx -10E+60 -> -1.0E+61 + +-- numbers around precision +ddintx060 tointegralx '56267E-17' -> '0' Inexact Rounded +ddintx061 tointegralx '56267E-5' -> '1' Inexact Rounded +ddintx062 tointegralx '56267E-2' -> '563' Inexact Rounded +ddintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded +ddintx065 tointegralx '56267E-0' -> '56267' +ddintx066 tointegralx '56267E+0' -> '56267' +ddintx067 tointegralx '56267E+1' -> '5.6267E+5' +ddintx068 tointegralx '56267E+9' -> '5.6267E+13' +ddintx069 tointegralx '56267E+10' -> '5.6267E+14' +ddintx070 tointegralx '56267E+11' -> '5.6267E+15' +ddintx071 tointegralx '56267E+12' -> '5.6267E+16' +ddintx072 tointegralx '56267E+13' -> '5.6267E+17' +ddintx073 tointegralx '1.23E+96' -> '1.23E+96' +ddintx074 tointegralx '1.23E+384' -> #47fd300000000000 Clamped + +ddintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded +ddintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded +ddintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded +ddintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded +ddintx085 tointegralx '-56267E-0' -> '-56267' +ddintx086 tointegralx '-56267E+0' -> '-56267' +ddintx087 tointegralx '-56267E+1' -> '-5.6267E+5' +ddintx088 tointegralx '-56267E+9' -> '-5.6267E+13' +ddintx089 tointegralx '-56267E+10' -> '-5.6267E+14' +ddintx090 tointegralx '-56267E+11' -> '-5.6267E+15' +ddintx091 tointegralx '-56267E+12' -> '-5.6267E+16' +ddintx092 tointegralx '-56267E+13' -> '-5.6267E+17' +ddintx093 tointegralx '-1.23E+96' -> '-1.23E+96' +ddintx094 tointegralx '-1.23E+384' -> #c7fd300000000000 Clamped + +-- subnormal inputs +ddintx100 tointegralx 1E-299 -> 0 Inexact Rounded +ddintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded +ddintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded +ddintx103 tointegralx 0E-299 -> 0 + +-- specials and zeros +ddintx120 tointegralx 'Inf' -> Infinity +ddintx121 tointegralx '-Inf' -> -Infinity +ddintx122 tointegralx NaN -> NaN +ddintx123 tointegralx sNaN -> NaN Invalid_operation +ddintx124 tointegralx 0 -> 0 +ddintx125 tointegralx -0 -> -0 +ddintx126 tointegralx 0.000 -> 0 +ddintx127 tointegralx 0.00 -> 0 +ddintx128 tointegralx 0.0 -> 0 +ddintx129 tointegralx 0 -> 0 +ddintx130 tointegralx 0E-3 -> 0 +ddintx131 tointegralx 0E-2 -> 0 +ddintx132 tointegralx 0E-1 -> 0 +ddintx133 tointegralx 0E-0 -> 0 +ddintx134 tointegralx 0E+1 -> 0E+1 +ddintx135 tointegralx 0E+2 -> 0E+2 +ddintx136 tointegralx 0E+3 -> 0E+3 +ddintx137 tointegralx 0E+4 -> 0E+4 +ddintx138 tointegralx 0E+5 -> 0E+5 +ddintx139 tointegralx -0.000 -> -0 +ddintx140 tointegralx -0.00 -> -0 +ddintx141 tointegralx -0.0 -> -0 +ddintx142 tointegralx -0 -> -0 +ddintx143 tointegralx -0E-3 -> -0 +ddintx144 tointegralx -0E-2 -> -0 +ddintx145 tointegralx -0E-1 -> -0 +ddintx146 tointegralx -0E-0 -> -0 +ddintx147 tointegralx -0E+1 -> -0E+1 +ddintx148 tointegralx -0E+2 -> -0E+2 +ddintx149 tointegralx -0E+3 -> -0E+3 +ddintx150 tointegralx -0E+4 -> -0E+4 +ddintx151 tointegralx -0E+5 -> -0E+5 +-- propagating NaNs +ddintx152 tointegralx NaN808 -> NaN808 +ddintx153 tointegralx sNaN080 -> NaN80 Invalid_operation +ddintx154 tointegralx -NaN808 -> -NaN808 +ddintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation +ddintx156 tointegralx -NaN -> -NaN +ddintx157 tointegralx -sNaN -> -NaN Invalid_operation + +-- examples +rounding: half_up +ddintx200 tointegralx 2.1 -> 2 Inexact Rounded +ddintx201 tointegralx 100 -> 100 +ddintx202 tointegralx 100.0 -> 100 Rounded +ddintx203 tointegralx 101.5 -> 102 Inexact Rounded +ddintx204 tointegralx -101.5 -> -102 Inexact Rounded +ddintx205 tointegralx 10E+5 -> 1.0E+6 +ddintx206 tointegralx 7.89E+77 -> 7.89E+77 +ddintx207 tointegralx -Inf -> -Infinity + + +-- all rounding modes +rounding: half_even +ddintx210 tointegralx 55.5 -> 56 Inexact Rounded +ddintx211 tointegralx 56.5 -> 56 Inexact Rounded +ddintx212 tointegralx 57.5 -> 58 Inexact Rounded +ddintx213 tointegralx -55.5 -> -56 Inexact Rounded +ddintx214 tointegralx -56.5 -> -56 Inexact Rounded +ddintx215 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_up + +ddintx220 tointegralx 55.5 -> 56 Inexact Rounded +ddintx221 tointegralx 56.5 -> 57 Inexact Rounded +ddintx222 tointegralx 57.5 -> 58 Inexact Rounded +ddintx223 tointegralx -55.5 -> -56 Inexact Rounded +ddintx224 tointegralx -56.5 -> -57 Inexact Rounded +ddintx225 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_down + +ddintx230 tointegralx 55.5 -> 55 Inexact Rounded +ddintx231 tointegralx 56.5 -> 56 Inexact Rounded +ddintx232 tointegralx 57.5 -> 57 Inexact Rounded +ddintx233 tointegralx -55.5 -> -55 Inexact Rounded +ddintx234 tointegralx -56.5 -> -56 Inexact Rounded +ddintx235 tointegralx -57.5 -> -57 Inexact Rounded + +rounding: up + +ddintx240 tointegralx 55.3 -> 56 Inexact Rounded +ddintx241 tointegralx 56.3 -> 57 Inexact Rounded +ddintx242 tointegralx 57.3 -> 58 Inexact Rounded +ddintx243 tointegralx -55.3 -> -56 Inexact Rounded +ddintx244 tointegralx -56.3 -> -57 Inexact Rounded +ddintx245 tointegralx -57.3 -> -58 Inexact Rounded + +rounding: down + +ddintx250 tointegralx 55.7 -> 55 Inexact Rounded +ddintx251 tointegralx 56.7 -> 56 Inexact Rounded +ddintx252 tointegralx 57.7 -> 57 Inexact Rounded +ddintx253 tointegralx -55.7 -> -55 Inexact Rounded +ddintx254 tointegralx -56.7 -> -56 Inexact Rounded +ddintx255 tointegralx -57.7 -> -57 Inexact Rounded + +rounding: ceiling + +ddintx260 tointegralx 55.3 -> 56 Inexact Rounded +ddintx261 tointegralx 56.3 -> 57 Inexact Rounded +ddintx262 tointegralx 57.3 -> 58 Inexact Rounded +ddintx263 tointegralx -55.3 -> -55 Inexact Rounded +ddintx264 tointegralx -56.3 -> -56 Inexact Rounded +ddintx265 tointegralx -57.3 -> -57 Inexact Rounded + +rounding: floor + +ddintx270 tointegralx 55.7 -> 55 Inexact Rounded +ddintx271 tointegralx 56.7 -> 56 Inexact Rounded +ddintx272 tointegralx 57.7 -> 57 Inexact Rounded +ddintx273 tointegralx -55.7 -> -56 Inexact Rounded +ddintx274 tointegralx -56.7 -> -57 Inexact Rounded +ddintx275 tointegralx -57.7 -> -58 Inexact Rounded + +-- Int and uInt32 edge values for testing conversions +ddintx300 tointegralx -2147483646 -> -2147483646 +ddintx301 tointegralx -2147483647 -> -2147483647 +ddintx302 tointegralx -2147483648 -> -2147483648 +ddintx303 tointegralx -2147483649 -> -2147483649 +ddintx304 tointegralx 2147483646 -> 2147483646 +ddintx305 tointegralx 2147483647 -> 2147483647 +ddintx306 tointegralx 2147483648 -> 2147483648 +ddintx307 tointegralx 2147483649 -> 2147483649 +ddintx308 tointegralx 4294967294 -> 4294967294 +ddintx309 tointegralx 4294967295 -> 4294967295 +ddintx310 tointegralx 4294967296 -> 4294967296 +ddintx311 tointegralx 4294967297 -> 4294967297 + diff --git a/Lib/test/decimaltestdata/ddXor.decTest b/Lib/test/decimaltestdata/ddXor.decTest index 3c55548e5ec..131c7eb4b0b 100644 --- a/Lib/test/decimaltestdata/ddXor.decTest +++ b/Lib/test/decimaltestdata/ddXor.decTest @@ -1,337 +1,337 @@ ------------------------------------------------------------------------- --- ddXor.decTest -- digitwise logical XOR for decDoubles -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check (truth table) -ddxor001 xor 0 0 -> 0 -ddxor002 xor 0 1 -> 1 -ddxor003 xor 1 0 -> 1 -ddxor004 xor 1 1 -> 0 -ddxor005 xor 1100 1010 -> 110 --- and at msd and msd-1 -ddxor006 xor 0000000000000000 0000000000000000 -> 0 -ddxor007 xor 0000000000000000 1000000000000000 -> 1000000000000000 -ddxor008 xor 1000000000000000 0000000000000000 -> 1000000000000000 -ddxor009 xor 1000000000000000 1000000000000000 -> 0 -ddxor010 xor 0000000000000000 0000000000000000 -> 0 -ddxor011 xor 0000000000000000 0100000000000000 -> 100000000000000 -ddxor012 xor 0100000000000000 0000000000000000 -> 100000000000000 -ddxor013 xor 0100000000000000 0100000000000000 -> 0 - --- Various lengths --- 1234567890123456 1234567890123456 1234567890123456 -ddxor021 xor 1111111110000000 1111111110000000 -> 0 -ddxor022 xor 111111110000000 111111110000000 -> 0 -ddxor023 xor 11111110000000 11111110000000 -> 0 -ddxor024 xor 1111110000000 1111110000000 -> 0 -ddxor025 xor 111110000000 111110000000 -> 0 -ddxor026 xor 11110000000 11110000000 -> 0 -ddxor027 xor 1110000000 1110000000 -> 0 -ddxor028 xor 110000000 110000000 -> 0 -ddxor029 xor 10000000 10000000 -> 0 -ddxor030 xor 1000000 1000000 -> 0 -ddxor031 xor 100000 100000 -> 0 -ddxor032 xor 10000 10000 -> 0 -ddxor033 xor 1000 1000 -> 0 -ddxor034 xor 100 100 -> 0 -ddxor035 xor 10 10 -> 0 -ddxor036 xor 1 1 -> 0 - -ddxor040 xor 111111111 111111111111 -> 111000000000 -ddxor041 xor 11111111 111111111111 -> 111100000000 -ddxor042 xor 11111111 111111111 -> 100000000 -ddxor043 xor 1111111 100000010 -> 101111101 -ddxor044 xor 111111 100000100 -> 100111011 -ddxor045 xor 11111 100001000 -> 100010111 -ddxor046 xor 1111 100010000 -> 100011111 -ddxor047 xor 111 100100000 -> 100100111 -ddxor048 xor 11 101000000 -> 101000011 -ddxor049 xor 1 110000000 -> 110000001 - -ddxor050 xor 1111111111 1 -> 1111111110 -ddxor051 xor 111111111 1 -> 111111110 -ddxor052 xor 11111111 1 -> 11111110 -ddxor053 xor 1111111 1 -> 1111110 -ddxor054 xor 111111 1 -> 111110 -ddxor055 xor 11111 1 -> 11110 -ddxor056 xor 1111 1 -> 1110 -ddxor057 xor 111 1 -> 110 -ddxor058 xor 11 1 -> 10 -ddxor059 xor 1 1 -> 0 - -ddxor060 xor 1111111111 0 -> 1111111111 -ddxor061 xor 111111111 0 -> 111111111 -ddxor062 xor 11111111 0 -> 11111111 -ddxor063 xor 1111111 0 -> 1111111 -ddxor064 xor 111111 0 -> 111111 -ddxor065 xor 11111 0 -> 11111 -ddxor066 xor 1111 0 -> 1111 -ddxor067 xor 111 0 -> 111 -ddxor068 xor 11 0 -> 11 -ddxor069 xor 1 0 -> 1 - -ddxor070 xor 1 1111111111 -> 1111111110 -ddxor071 xor 1 111111111 -> 111111110 -ddxor072 xor 1 11111111 -> 11111110 -ddxor073 xor 1 1111111 -> 1111110 -ddxor074 xor 1 111111 -> 111110 -ddxor075 xor 1 11111 -> 11110 -ddxor076 xor 1 1111 -> 1110 -ddxor077 xor 1 111 -> 110 -ddxor078 xor 1 11 -> 10 -ddxor079 xor 1 1 -> 0 - -ddxor080 xor 0 1111111111 -> 1111111111 -ddxor081 xor 0 111111111 -> 111111111 -ddxor082 xor 0 11111111 -> 11111111 -ddxor083 xor 0 1111111 -> 1111111 -ddxor084 xor 0 111111 -> 111111 -ddxor085 xor 0 11111 -> 11111 -ddxor086 xor 0 1111 -> 1111 -ddxor087 xor 0 111 -> 111 -ddxor088 xor 0 11 -> 11 -ddxor089 xor 0 1 -> 1 - -ddxor090 xor 011111111 111101111 -> 100010000 -ddxor091 xor 101111111 111101111 -> 10010000 -ddxor092 xor 110111111 111101111 -> 1010000 -ddxor093 xor 111011111 111101111 -> 110000 -ddxor094 xor 111101111 111101111 -> 0 -ddxor095 xor 111110111 111101111 -> 11000 -ddxor096 xor 111111011 111101111 -> 10100 -ddxor097 xor 111111101 111101111 -> 10010 -ddxor098 xor 111111110 111101111 -> 10001 - -ddxor100 xor 111101111 011111111 -> 100010000 -ddxor101 xor 111101111 101111111 -> 10010000 -ddxor102 xor 111101111 110111111 -> 1010000 -ddxor103 xor 111101111 111011111 -> 110000 -ddxor104 xor 111101111 111101111 -> 0 -ddxor105 xor 111101111 111110111 -> 11000 -ddxor106 xor 111101111 111111011 -> 10100 -ddxor107 xor 111101111 111111101 -> 10010 -ddxor108 xor 111101111 111111110 -> 10001 - --- non-0/1 should not be accepted, nor should signs -ddxor220 xor 111111112 111111111 -> NaN Invalid_operation -ddxor221 xor 333333333 333333333 -> NaN Invalid_operation -ddxor222 xor 555555555 555555555 -> NaN Invalid_operation -ddxor223 xor 777777777 777777777 -> NaN Invalid_operation -ddxor224 xor 999999999 999999999 -> NaN Invalid_operation -ddxor225 xor 222222222 999999999 -> NaN Invalid_operation -ddxor226 xor 444444444 999999999 -> NaN Invalid_operation -ddxor227 xor 666666666 999999999 -> NaN Invalid_operation -ddxor228 xor 888888888 999999999 -> NaN Invalid_operation -ddxor229 xor 999999999 222222222 -> NaN Invalid_operation -ddxor230 xor 999999999 444444444 -> NaN Invalid_operation -ddxor231 xor 999999999 666666666 -> NaN Invalid_operation -ddxor232 xor 999999999 888888888 -> NaN Invalid_operation --- a few randoms -ddxor240 xor 567468689 -934981942 -> NaN Invalid_operation -ddxor241 xor 567367689 934981942 -> NaN Invalid_operation -ddxor242 xor -631917772 -706014634 -> NaN Invalid_operation -ddxor243 xor -756253257 138579234 -> NaN Invalid_operation -ddxor244 xor 835590149 567435400 -> NaN Invalid_operation --- test MSD -ddxor250 xor 2000000000000000 1000000000000000 -> NaN Invalid_operation -ddxor251 xor 7000000000000000 1000000000000000 -> NaN Invalid_operation -ddxor252 xor 8000000000000000 1000000000000000 -> NaN Invalid_operation -ddxor253 xor 9000000000000000 1000000000000000 -> NaN Invalid_operation -ddxor254 xor 2000000000000000 0000000000000000 -> NaN Invalid_operation -ddxor255 xor 7000000000000000 0000000000000000 -> NaN Invalid_operation -ddxor256 xor 8000000000000000 0000000000000000 -> NaN Invalid_operation -ddxor257 xor 9000000000000000 0000000000000000 -> NaN Invalid_operation -ddxor258 xor 1000000000000000 2000000000000000 -> NaN Invalid_operation -ddxor259 xor 1000000000000000 7000000000000000 -> NaN Invalid_operation -ddxor260 xor 1000000000000000 8000000000000000 -> NaN Invalid_operation -ddxor261 xor 1000000000000000 9000000000000000 -> NaN Invalid_operation -ddxor262 xor 0000000000000000 2000000000000000 -> NaN Invalid_operation -ddxor263 xor 0000000000000000 7000000000000000 -> NaN Invalid_operation -ddxor264 xor 0000000000000000 8000000000000000 -> NaN Invalid_operation -ddxor265 xor 0000000000000000 9000000000000000 -> NaN Invalid_operation --- test MSD-1 -ddxor270 xor 0200001000000000 1000100000000010 -> NaN Invalid_operation -ddxor271 xor 0700000100000000 1000010000000100 -> NaN Invalid_operation -ddxor272 xor 0800000010000000 1000001000001000 -> NaN Invalid_operation -ddxor273 xor 0900000001000000 1000000100010000 -> NaN Invalid_operation -ddxor274 xor 1000000000100000 0200000010100000 -> NaN Invalid_operation -ddxor275 xor 1000000000010000 0700000001000000 -> NaN Invalid_operation -ddxor276 xor 1000000000001000 0800000010100000 -> NaN Invalid_operation -ddxor277 xor 1000000000000100 0900000000010000 -> NaN Invalid_operation --- test LSD -ddxor280 xor 0010000000000002 1000000100000001 -> NaN Invalid_operation -ddxor281 xor 0001000000000007 1000001000000011 -> NaN Invalid_operation -ddxor282 xor 0000100000000008 1000010000000001 -> NaN Invalid_operation -ddxor283 xor 0000010000000009 1000100000000001 -> NaN Invalid_operation -ddxor284 xor 1000001000000000 0001000000000002 -> NaN Invalid_operation -ddxor285 xor 1000000100000000 0010000000000007 -> NaN Invalid_operation -ddxor286 xor 1000000010000000 0100000000000008 -> NaN Invalid_operation -ddxor287 xor 1000000001000000 1000000000000009 -> NaN Invalid_operation --- test Middie -ddxor288 xor 0010000020000000 1000001000000000 -> NaN Invalid_operation -ddxor289 xor 0001000070000001 1000000100000000 -> NaN Invalid_operation -ddxor290 xor 0000100080000010 1000000010000000 -> NaN Invalid_operation -ddxor291 xor 0000010090000100 1000000001000000 -> NaN Invalid_operation -ddxor292 xor 1000001000001000 0000000020100000 -> NaN Invalid_operation -ddxor293 xor 1000000100010000 0000000070010000 -> NaN Invalid_operation -ddxor294 xor 1000000010100000 0000000080001000 -> NaN Invalid_operation -ddxor295 xor 1000000001000000 0000000090000100 -> NaN Invalid_operation --- signs -ddxor296 xor -1000000001000000 -0000010000000100 -> NaN Invalid_operation -ddxor297 xor -1000000001000000 0000000010000100 -> NaN Invalid_operation -ddxor298 xor 1000000001000000 -0000001000000100 -> NaN Invalid_operation -ddxor299 xor 1000000001000000 0000000011000100 -> 1000000010000100 - --- Nmax, Nmin, Ntiny-like -ddxor331 xor 2 9.99999999E+299 -> NaN Invalid_operation -ddxor332 xor 3 1E-299 -> NaN Invalid_operation -ddxor333 xor 4 1.00000000E-299 -> NaN Invalid_operation -ddxor334 xor 5 1E-200 -> NaN Invalid_operation -ddxor335 xor 6 -1E-200 -> NaN Invalid_operation -ddxor336 xor 7 -1.00000000E-299 -> NaN Invalid_operation -ddxor337 xor 8 -1E-299 -> NaN Invalid_operation -ddxor338 xor 9 -9.99999999E+299 -> NaN Invalid_operation -ddxor341 xor 9.99999999E+299 -18 -> NaN Invalid_operation -ddxor342 xor 1E-299 01 -> NaN Invalid_operation -ddxor343 xor 1.00000000E-299 -18 -> NaN Invalid_operation -ddxor344 xor 1E-208 18 -> NaN Invalid_operation -ddxor345 xor -1E-207 -10 -> NaN Invalid_operation -ddxor346 xor -1.00000000E-299 18 -> NaN Invalid_operation -ddxor347 xor -1E-299 10 -> NaN Invalid_operation -ddxor348 xor -9.99999999E+299 -18 -> NaN Invalid_operation - --- A few other non-integers -ddxor361 xor 1.0 1 -> NaN Invalid_operation -ddxor362 xor 1E+1 1 -> NaN Invalid_operation -ddxor363 xor 0.0 1 -> NaN Invalid_operation -ddxor364 xor 0E+1 1 -> NaN Invalid_operation -ddxor365 xor 9.9 1 -> NaN Invalid_operation -ddxor366 xor 9E+1 1 -> NaN Invalid_operation -ddxor371 xor 0 1.0 -> NaN Invalid_operation -ddxor372 xor 0 1E+1 -> NaN Invalid_operation -ddxor373 xor 0 0.0 -> NaN Invalid_operation -ddxor374 xor 0 0E+1 -> NaN Invalid_operation -ddxor375 xor 0 9.9 -> NaN Invalid_operation -ddxor376 xor 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -ddxor780 xor -Inf -Inf -> NaN Invalid_operation -ddxor781 xor -Inf -1000 -> NaN Invalid_operation -ddxor782 xor -Inf -1 -> NaN Invalid_operation -ddxor783 xor -Inf -0 -> NaN Invalid_operation -ddxor784 xor -Inf 0 -> NaN Invalid_operation -ddxor785 xor -Inf 1 -> NaN Invalid_operation -ddxor786 xor -Inf 1000 -> NaN Invalid_operation -ddxor787 xor -1000 -Inf -> NaN Invalid_operation -ddxor788 xor -Inf -Inf -> NaN Invalid_operation -ddxor789 xor -1 -Inf -> NaN Invalid_operation -ddxor790 xor -0 -Inf -> NaN Invalid_operation -ddxor791 xor 0 -Inf -> NaN Invalid_operation -ddxor792 xor 1 -Inf -> NaN Invalid_operation -ddxor793 xor 1000 -Inf -> NaN Invalid_operation -ddxor794 xor Inf -Inf -> NaN Invalid_operation - -ddxor800 xor Inf -Inf -> NaN Invalid_operation -ddxor801 xor Inf -1000 -> NaN Invalid_operation -ddxor802 xor Inf -1 -> NaN Invalid_operation -ddxor803 xor Inf -0 -> NaN Invalid_operation -ddxor804 xor Inf 0 -> NaN Invalid_operation -ddxor805 xor Inf 1 -> NaN Invalid_operation -ddxor806 xor Inf 1000 -> NaN Invalid_operation -ddxor807 xor Inf Inf -> NaN Invalid_operation -ddxor808 xor -1000 Inf -> NaN Invalid_operation -ddxor809 xor -Inf Inf -> NaN Invalid_operation -ddxor810 xor -1 Inf -> NaN Invalid_operation -ddxor811 xor -0 Inf -> NaN Invalid_operation -ddxor812 xor 0 Inf -> NaN Invalid_operation -ddxor813 xor 1 Inf -> NaN Invalid_operation -ddxor814 xor 1000 Inf -> NaN Invalid_operation -ddxor815 xor Inf Inf -> NaN Invalid_operation - -ddxor821 xor NaN -Inf -> NaN Invalid_operation -ddxor822 xor NaN -1000 -> NaN Invalid_operation -ddxor823 xor NaN -1 -> NaN Invalid_operation -ddxor824 xor NaN -0 -> NaN Invalid_operation -ddxor825 xor NaN 0 -> NaN Invalid_operation -ddxor826 xor NaN 1 -> NaN Invalid_operation -ddxor827 xor NaN 1000 -> NaN Invalid_operation -ddxor828 xor NaN Inf -> NaN Invalid_operation -ddxor829 xor NaN NaN -> NaN Invalid_operation -ddxor830 xor -Inf NaN -> NaN Invalid_operation -ddxor831 xor -1000 NaN -> NaN Invalid_operation -ddxor832 xor -1 NaN -> NaN Invalid_operation -ddxor833 xor -0 NaN -> NaN Invalid_operation -ddxor834 xor 0 NaN -> NaN Invalid_operation -ddxor835 xor 1 NaN -> NaN Invalid_operation -ddxor836 xor 1000 NaN -> NaN Invalid_operation -ddxor837 xor Inf NaN -> NaN Invalid_operation - -ddxor841 xor sNaN -Inf -> NaN Invalid_operation -ddxor842 xor sNaN -1000 -> NaN Invalid_operation -ddxor843 xor sNaN -1 -> NaN Invalid_operation -ddxor844 xor sNaN -0 -> NaN Invalid_operation -ddxor845 xor sNaN 0 -> NaN Invalid_operation -ddxor846 xor sNaN 1 -> NaN Invalid_operation -ddxor847 xor sNaN 1000 -> NaN Invalid_operation -ddxor848 xor sNaN NaN -> NaN Invalid_operation -ddxor849 xor sNaN sNaN -> NaN Invalid_operation -ddxor850 xor NaN sNaN -> NaN Invalid_operation -ddxor851 xor -Inf sNaN -> NaN Invalid_operation -ddxor852 xor -1000 sNaN -> NaN Invalid_operation -ddxor853 xor -1 sNaN -> NaN Invalid_operation -ddxor854 xor -0 sNaN -> NaN Invalid_operation -ddxor855 xor 0 sNaN -> NaN Invalid_operation -ddxor856 xor 1 sNaN -> NaN Invalid_operation -ddxor857 xor 1000 sNaN -> NaN Invalid_operation -ddxor858 xor Inf sNaN -> NaN Invalid_operation -ddxor859 xor NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddxor861 xor NaN1 -Inf -> NaN Invalid_operation -ddxor862 xor +NaN2 -1000 -> NaN Invalid_operation -ddxor863 xor NaN3 1000 -> NaN Invalid_operation -ddxor864 xor NaN4 Inf -> NaN Invalid_operation -ddxor865 xor NaN5 +NaN6 -> NaN Invalid_operation -ddxor866 xor -Inf NaN7 -> NaN Invalid_operation -ddxor867 xor -1000 NaN8 -> NaN Invalid_operation -ddxor868 xor 1000 NaN9 -> NaN Invalid_operation -ddxor869 xor Inf +NaN10 -> NaN Invalid_operation -ddxor871 xor sNaN11 -Inf -> NaN Invalid_operation -ddxor872 xor sNaN12 -1000 -> NaN Invalid_operation -ddxor873 xor sNaN13 1000 -> NaN Invalid_operation -ddxor874 xor sNaN14 NaN17 -> NaN Invalid_operation -ddxor875 xor sNaN15 sNaN18 -> NaN Invalid_operation -ddxor876 xor NaN16 sNaN19 -> NaN Invalid_operation -ddxor877 xor -Inf +sNaN20 -> NaN Invalid_operation -ddxor878 xor -1000 sNaN21 -> NaN Invalid_operation -ddxor879 xor 1000 sNaN22 -> NaN Invalid_operation -ddxor880 xor Inf sNaN23 -> NaN Invalid_operation -ddxor881 xor +NaN25 +sNaN24 -> NaN Invalid_operation -ddxor882 xor -NaN26 NaN28 -> NaN Invalid_operation -ddxor883 xor -sNaN27 sNaN29 -> NaN Invalid_operation -ddxor884 xor 1000 -NaN30 -> NaN Invalid_operation -ddxor885 xor 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddXor.decTest -- digitwise logical XOR for decDoubles -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check (truth table) +ddxor001 xor 0 0 -> 0 +ddxor002 xor 0 1 -> 1 +ddxor003 xor 1 0 -> 1 +ddxor004 xor 1 1 -> 0 +ddxor005 xor 1100 1010 -> 110 +-- and at msd and msd-1 +ddxor006 xor 0000000000000000 0000000000000000 -> 0 +ddxor007 xor 0000000000000000 1000000000000000 -> 1000000000000000 +ddxor008 xor 1000000000000000 0000000000000000 -> 1000000000000000 +ddxor009 xor 1000000000000000 1000000000000000 -> 0 +ddxor010 xor 0000000000000000 0000000000000000 -> 0 +ddxor011 xor 0000000000000000 0100000000000000 -> 100000000000000 +ddxor012 xor 0100000000000000 0000000000000000 -> 100000000000000 +ddxor013 xor 0100000000000000 0100000000000000 -> 0 + +-- Various lengths +-- 1234567890123456 1234567890123456 1234567890123456 +ddxor021 xor 1111111110000000 1111111110000000 -> 0 +ddxor022 xor 111111110000000 111111110000000 -> 0 +ddxor023 xor 11111110000000 11111110000000 -> 0 +ddxor024 xor 1111110000000 1111110000000 -> 0 +ddxor025 xor 111110000000 111110000000 -> 0 +ddxor026 xor 11110000000 11110000000 -> 0 +ddxor027 xor 1110000000 1110000000 -> 0 +ddxor028 xor 110000000 110000000 -> 0 +ddxor029 xor 10000000 10000000 -> 0 +ddxor030 xor 1000000 1000000 -> 0 +ddxor031 xor 100000 100000 -> 0 +ddxor032 xor 10000 10000 -> 0 +ddxor033 xor 1000 1000 -> 0 +ddxor034 xor 100 100 -> 0 +ddxor035 xor 10 10 -> 0 +ddxor036 xor 1 1 -> 0 + +ddxor040 xor 111111111 111111111111 -> 111000000000 +ddxor041 xor 11111111 111111111111 -> 111100000000 +ddxor042 xor 11111111 111111111 -> 100000000 +ddxor043 xor 1111111 100000010 -> 101111101 +ddxor044 xor 111111 100000100 -> 100111011 +ddxor045 xor 11111 100001000 -> 100010111 +ddxor046 xor 1111 100010000 -> 100011111 +ddxor047 xor 111 100100000 -> 100100111 +ddxor048 xor 11 101000000 -> 101000011 +ddxor049 xor 1 110000000 -> 110000001 + +ddxor050 xor 1111111111 1 -> 1111111110 +ddxor051 xor 111111111 1 -> 111111110 +ddxor052 xor 11111111 1 -> 11111110 +ddxor053 xor 1111111 1 -> 1111110 +ddxor054 xor 111111 1 -> 111110 +ddxor055 xor 11111 1 -> 11110 +ddxor056 xor 1111 1 -> 1110 +ddxor057 xor 111 1 -> 110 +ddxor058 xor 11 1 -> 10 +ddxor059 xor 1 1 -> 0 + +ddxor060 xor 1111111111 0 -> 1111111111 +ddxor061 xor 111111111 0 -> 111111111 +ddxor062 xor 11111111 0 -> 11111111 +ddxor063 xor 1111111 0 -> 1111111 +ddxor064 xor 111111 0 -> 111111 +ddxor065 xor 11111 0 -> 11111 +ddxor066 xor 1111 0 -> 1111 +ddxor067 xor 111 0 -> 111 +ddxor068 xor 11 0 -> 11 +ddxor069 xor 1 0 -> 1 + +ddxor070 xor 1 1111111111 -> 1111111110 +ddxor071 xor 1 111111111 -> 111111110 +ddxor072 xor 1 11111111 -> 11111110 +ddxor073 xor 1 1111111 -> 1111110 +ddxor074 xor 1 111111 -> 111110 +ddxor075 xor 1 11111 -> 11110 +ddxor076 xor 1 1111 -> 1110 +ddxor077 xor 1 111 -> 110 +ddxor078 xor 1 11 -> 10 +ddxor079 xor 1 1 -> 0 + +ddxor080 xor 0 1111111111 -> 1111111111 +ddxor081 xor 0 111111111 -> 111111111 +ddxor082 xor 0 11111111 -> 11111111 +ddxor083 xor 0 1111111 -> 1111111 +ddxor084 xor 0 111111 -> 111111 +ddxor085 xor 0 11111 -> 11111 +ddxor086 xor 0 1111 -> 1111 +ddxor087 xor 0 111 -> 111 +ddxor088 xor 0 11 -> 11 +ddxor089 xor 0 1 -> 1 + +ddxor090 xor 011111111 111101111 -> 100010000 +ddxor091 xor 101111111 111101111 -> 10010000 +ddxor092 xor 110111111 111101111 -> 1010000 +ddxor093 xor 111011111 111101111 -> 110000 +ddxor094 xor 111101111 111101111 -> 0 +ddxor095 xor 111110111 111101111 -> 11000 +ddxor096 xor 111111011 111101111 -> 10100 +ddxor097 xor 111111101 111101111 -> 10010 +ddxor098 xor 111111110 111101111 -> 10001 + +ddxor100 xor 111101111 011111111 -> 100010000 +ddxor101 xor 111101111 101111111 -> 10010000 +ddxor102 xor 111101111 110111111 -> 1010000 +ddxor103 xor 111101111 111011111 -> 110000 +ddxor104 xor 111101111 111101111 -> 0 +ddxor105 xor 111101111 111110111 -> 11000 +ddxor106 xor 111101111 111111011 -> 10100 +ddxor107 xor 111101111 111111101 -> 10010 +ddxor108 xor 111101111 111111110 -> 10001 + +-- non-0/1 should not be accepted, nor should signs +ddxor220 xor 111111112 111111111 -> NaN Invalid_operation +ddxor221 xor 333333333 333333333 -> NaN Invalid_operation +ddxor222 xor 555555555 555555555 -> NaN Invalid_operation +ddxor223 xor 777777777 777777777 -> NaN Invalid_operation +ddxor224 xor 999999999 999999999 -> NaN Invalid_operation +ddxor225 xor 222222222 999999999 -> NaN Invalid_operation +ddxor226 xor 444444444 999999999 -> NaN Invalid_operation +ddxor227 xor 666666666 999999999 -> NaN Invalid_operation +ddxor228 xor 888888888 999999999 -> NaN Invalid_operation +ddxor229 xor 999999999 222222222 -> NaN Invalid_operation +ddxor230 xor 999999999 444444444 -> NaN Invalid_operation +ddxor231 xor 999999999 666666666 -> NaN Invalid_operation +ddxor232 xor 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +ddxor240 xor 567468689 -934981942 -> NaN Invalid_operation +ddxor241 xor 567367689 934981942 -> NaN Invalid_operation +ddxor242 xor -631917772 -706014634 -> NaN Invalid_operation +ddxor243 xor -756253257 138579234 -> NaN Invalid_operation +ddxor244 xor 835590149 567435400 -> NaN Invalid_operation +-- test MSD +ddxor250 xor 2000000000000000 1000000000000000 -> NaN Invalid_operation +ddxor251 xor 7000000000000000 1000000000000000 -> NaN Invalid_operation +ddxor252 xor 8000000000000000 1000000000000000 -> NaN Invalid_operation +ddxor253 xor 9000000000000000 1000000000000000 -> NaN Invalid_operation +ddxor254 xor 2000000000000000 0000000000000000 -> NaN Invalid_operation +ddxor255 xor 7000000000000000 0000000000000000 -> NaN Invalid_operation +ddxor256 xor 8000000000000000 0000000000000000 -> NaN Invalid_operation +ddxor257 xor 9000000000000000 0000000000000000 -> NaN Invalid_operation +ddxor258 xor 1000000000000000 2000000000000000 -> NaN Invalid_operation +ddxor259 xor 1000000000000000 7000000000000000 -> NaN Invalid_operation +ddxor260 xor 1000000000000000 8000000000000000 -> NaN Invalid_operation +ddxor261 xor 1000000000000000 9000000000000000 -> NaN Invalid_operation +ddxor262 xor 0000000000000000 2000000000000000 -> NaN Invalid_operation +ddxor263 xor 0000000000000000 7000000000000000 -> NaN Invalid_operation +ddxor264 xor 0000000000000000 8000000000000000 -> NaN Invalid_operation +ddxor265 xor 0000000000000000 9000000000000000 -> NaN Invalid_operation +-- test MSD-1 +ddxor270 xor 0200001000000000 1000100000000010 -> NaN Invalid_operation +ddxor271 xor 0700000100000000 1000010000000100 -> NaN Invalid_operation +ddxor272 xor 0800000010000000 1000001000001000 -> NaN Invalid_operation +ddxor273 xor 0900000001000000 1000000100010000 -> NaN Invalid_operation +ddxor274 xor 1000000000100000 0200000010100000 -> NaN Invalid_operation +ddxor275 xor 1000000000010000 0700000001000000 -> NaN Invalid_operation +ddxor276 xor 1000000000001000 0800000010100000 -> NaN Invalid_operation +ddxor277 xor 1000000000000100 0900000000010000 -> NaN Invalid_operation +-- test LSD +ddxor280 xor 0010000000000002 1000000100000001 -> NaN Invalid_operation +ddxor281 xor 0001000000000007 1000001000000011 -> NaN Invalid_operation +ddxor282 xor 0000100000000008 1000010000000001 -> NaN Invalid_operation +ddxor283 xor 0000010000000009 1000100000000001 -> NaN Invalid_operation +ddxor284 xor 1000001000000000 0001000000000002 -> NaN Invalid_operation +ddxor285 xor 1000000100000000 0010000000000007 -> NaN Invalid_operation +ddxor286 xor 1000000010000000 0100000000000008 -> NaN Invalid_operation +ddxor287 xor 1000000001000000 1000000000000009 -> NaN Invalid_operation +-- test Middie +ddxor288 xor 0010000020000000 1000001000000000 -> NaN Invalid_operation +ddxor289 xor 0001000070000001 1000000100000000 -> NaN Invalid_operation +ddxor290 xor 0000100080000010 1000000010000000 -> NaN Invalid_operation +ddxor291 xor 0000010090000100 1000000001000000 -> NaN Invalid_operation +ddxor292 xor 1000001000001000 0000000020100000 -> NaN Invalid_operation +ddxor293 xor 1000000100010000 0000000070010000 -> NaN Invalid_operation +ddxor294 xor 1000000010100000 0000000080001000 -> NaN Invalid_operation +ddxor295 xor 1000000001000000 0000000090000100 -> NaN Invalid_operation +-- signs +ddxor296 xor -1000000001000000 -0000010000000100 -> NaN Invalid_operation +ddxor297 xor -1000000001000000 0000000010000100 -> NaN Invalid_operation +ddxor298 xor 1000000001000000 -0000001000000100 -> NaN Invalid_operation +ddxor299 xor 1000000001000000 0000000011000100 -> 1000000010000100 + +-- Nmax, Nmin, Ntiny-like +ddxor331 xor 2 9.99999999E+299 -> NaN Invalid_operation +ddxor332 xor 3 1E-299 -> NaN Invalid_operation +ddxor333 xor 4 1.00000000E-299 -> NaN Invalid_operation +ddxor334 xor 5 1E-200 -> NaN Invalid_operation +ddxor335 xor 6 -1E-200 -> NaN Invalid_operation +ddxor336 xor 7 -1.00000000E-299 -> NaN Invalid_operation +ddxor337 xor 8 -1E-299 -> NaN Invalid_operation +ddxor338 xor 9 -9.99999999E+299 -> NaN Invalid_operation +ddxor341 xor 9.99999999E+299 -18 -> NaN Invalid_operation +ddxor342 xor 1E-299 01 -> NaN Invalid_operation +ddxor343 xor 1.00000000E-299 -18 -> NaN Invalid_operation +ddxor344 xor 1E-208 18 -> NaN Invalid_operation +ddxor345 xor -1E-207 -10 -> NaN Invalid_operation +ddxor346 xor -1.00000000E-299 18 -> NaN Invalid_operation +ddxor347 xor -1E-299 10 -> NaN Invalid_operation +ddxor348 xor -9.99999999E+299 -18 -> NaN Invalid_operation + +-- A few other non-integers +ddxor361 xor 1.0 1 -> NaN Invalid_operation +ddxor362 xor 1E+1 1 -> NaN Invalid_operation +ddxor363 xor 0.0 1 -> NaN Invalid_operation +ddxor364 xor 0E+1 1 -> NaN Invalid_operation +ddxor365 xor 9.9 1 -> NaN Invalid_operation +ddxor366 xor 9E+1 1 -> NaN Invalid_operation +ddxor371 xor 0 1.0 -> NaN Invalid_operation +ddxor372 xor 0 1E+1 -> NaN Invalid_operation +ddxor373 xor 0 0.0 -> NaN Invalid_operation +ddxor374 xor 0 0E+1 -> NaN Invalid_operation +ddxor375 xor 0 9.9 -> NaN Invalid_operation +ddxor376 xor 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +ddxor780 xor -Inf -Inf -> NaN Invalid_operation +ddxor781 xor -Inf -1000 -> NaN Invalid_operation +ddxor782 xor -Inf -1 -> NaN Invalid_operation +ddxor783 xor -Inf -0 -> NaN Invalid_operation +ddxor784 xor -Inf 0 -> NaN Invalid_operation +ddxor785 xor -Inf 1 -> NaN Invalid_operation +ddxor786 xor -Inf 1000 -> NaN Invalid_operation +ddxor787 xor -1000 -Inf -> NaN Invalid_operation +ddxor788 xor -Inf -Inf -> NaN Invalid_operation +ddxor789 xor -1 -Inf -> NaN Invalid_operation +ddxor790 xor -0 -Inf -> NaN Invalid_operation +ddxor791 xor 0 -Inf -> NaN Invalid_operation +ddxor792 xor 1 -Inf -> NaN Invalid_operation +ddxor793 xor 1000 -Inf -> NaN Invalid_operation +ddxor794 xor Inf -Inf -> NaN Invalid_operation + +ddxor800 xor Inf -Inf -> NaN Invalid_operation +ddxor801 xor Inf -1000 -> NaN Invalid_operation +ddxor802 xor Inf -1 -> NaN Invalid_operation +ddxor803 xor Inf -0 -> NaN Invalid_operation +ddxor804 xor Inf 0 -> NaN Invalid_operation +ddxor805 xor Inf 1 -> NaN Invalid_operation +ddxor806 xor Inf 1000 -> NaN Invalid_operation +ddxor807 xor Inf Inf -> NaN Invalid_operation +ddxor808 xor -1000 Inf -> NaN Invalid_operation +ddxor809 xor -Inf Inf -> NaN Invalid_operation +ddxor810 xor -1 Inf -> NaN Invalid_operation +ddxor811 xor -0 Inf -> NaN Invalid_operation +ddxor812 xor 0 Inf -> NaN Invalid_operation +ddxor813 xor 1 Inf -> NaN Invalid_operation +ddxor814 xor 1000 Inf -> NaN Invalid_operation +ddxor815 xor Inf Inf -> NaN Invalid_operation + +ddxor821 xor NaN -Inf -> NaN Invalid_operation +ddxor822 xor NaN -1000 -> NaN Invalid_operation +ddxor823 xor NaN -1 -> NaN Invalid_operation +ddxor824 xor NaN -0 -> NaN Invalid_operation +ddxor825 xor NaN 0 -> NaN Invalid_operation +ddxor826 xor NaN 1 -> NaN Invalid_operation +ddxor827 xor NaN 1000 -> NaN Invalid_operation +ddxor828 xor NaN Inf -> NaN Invalid_operation +ddxor829 xor NaN NaN -> NaN Invalid_operation +ddxor830 xor -Inf NaN -> NaN Invalid_operation +ddxor831 xor -1000 NaN -> NaN Invalid_operation +ddxor832 xor -1 NaN -> NaN Invalid_operation +ddxor833 xor -0 NaN -> NaN Invalid_operation +ddxor834 xor 0 NaN -> NaN Invalid_operation +ddxor835 xor 1 NaN -> NaN Invalid_operation +ddxor836 xor 1000 NaN -> NaN Invalid_operation +ddxor837 xor Inf NaN -> NaN Invalid_operation + +ddxor841 xor sNaN -Inf -> NaN Invalid_operation +ddxor842 xor sNaN -1000 -> NaN Invalid_operation +ddxor843 xor sNaN -1 -> NaN Invalid_operation +ddxor844 xor sNaN -0 -> NaN Invalid_operation +ddxor845 xor sNaN 0 -> NaN Invalid_operation +ddxor846 xor sNaN 1 -> NaN Invalid_operation +ddxor847 xor sNaN 1000 -> NaN Invalid_operation +ddxor848 xor sNaN NaN -> NaN Invalid_operation +ddxor849 xor sNaN sNaN -> NaN Invalid_operation +ddxor850 xor NaN sNaN -> NaN Invalid_operation +ddxor851 xor -Inf sNaN -> NaN Invalid_operation +ddxor852 xor -1000 sNaN -> NaN Invalid_operation +ddxor853 xor -1 sNaN -> NaN Invalid_operation +ddxor854 xor -0 sNaN -> NaN Invalid_operation +ddxor855 xor 0 sNaN -> NaN Invalid_operation +ddxor856 xor 1 sNaN -> NaN Invalid_operation +ddxor857 xor 1000 sNaN -> NaN Invalid_operation +ddxor858 xor Inf sNaN -> NaN Invalid_operation +ddxor859 xor NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddxor861 xor NaN1 -Inf -> NaN Invalid_operation +ddxor862 xor +NaN2 -1000 -> NaN Invalid_operation +ddxor863 xor NaN3 1000 -> NaN Invalid_operation +ddxor864 xor NaN4 Inf -> NaN Invalid_operation +ddxor865 xor NaN5 +NaN6 -> NaN Invalid_operation +ddxor866 xor -Inf NaN7 -> NaN Invalid_operation +ddxor867 xor -1000 NaN8 -> NaN Invalid_operation +ddxor868 xor 1000 NaN9 -> NaN Invalid_operation +ddxor869 xor Inf +NaN10 -> NaN Invalid_operation +ddxor871 xor sNaN11 -Inf -> NaN Invalid_operation +ddxor872 xor sNaN12 -1000 -> NaN Invalid_operation +ddxor873 xor sNaN13 1000 -> NaN Invalid_operation +ddxor874 xor sNaN14 NaN17 -> NaN Invalid_operation +ddxor875 xor sNaN15 sNaN18 -> NaN Invalid_operation +ddxor876 xor NaN16 sNaN19 -> NaN Invalid_operation +ddxor877 xor -Inf +sNaN20 -> NaN Invalid_operation +ddxor878 xor -1000 sNaN21 -> NaN Invalid_operation +ddxor879 xor 1000 sNaN22 -> NaN Invalid_operation +ddxor880 xor Inf sNaN23 -> NaN Invalid_operation +ddxor881 xor +NaN25 +sNaN24 -> NaN Invalid_operation +ddxor882 xor -NaN26 NaN28 -> NaN Invalid_operation +ddxor883 xor -sNaN27 sNaN29 -> NaN Invalid_operation +ddxor884 xor 1000 -NaN30 -> NaN Invalid_operation +ddxor885 xor 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqAbs.decTest b/Lib/test/decimaltestdata/dqAbs.decTest index f9119a9e79c..baaa063bbc8 100644 --- a/Lib/test/decimaltestdata/dqAbs.decTest +++ b/Lib/test/decimaltestdata/dqAbs.decTest @@ -1,126 +1,126 @@ ------------------------------------------------------------------------- --- dqAbs.decTest -- decQuad absolute value, heeding sNaN -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqabs001 abs '1' -> '1' -dqabs002 abs '-1' -> '1' -dqabs003 abs '1.00' -> '1.00' -dqabs004 abs '-1.00' -> '1.00' -dqabs005 abs '0' -> '0' -dqabs006 abs '0.00' -> '0.00' -dqabs007 abs '00.0' -> '0.0' -dqabs008 abs '00.00' -> '0.00' -dqabs009 abs '00' -> '0' - -dqabs010 abs '-2' -> '2' -dqabs011 abs '2' -> '2' -dqabs012 abs '-2.00' -> '2.00' -dqabs013 abs '2.00' -> '2.00' -dqabs014 abs '-0' -> '0' -dqabs015 abs '-0.00' -> '0.00' -dqabs016 abs '-00.0' -> '0.0' -dqabs017 abs '-00.00' -> '0.00' -dqabs018 abs '-00' -> '0' - -dqabs020 abs '-2000000' -> '2000000' -dqabs021 abs '2000000' -> '2000000' - -dqabs030 abs '+0.1' -> '0.1' -dqabs031 abs '-0.1' -> '0.1' -dqabs032 abs '+0.01' -> '0.01' -dqabs033 abs '-0.01' -> '0.01' -dqabs034 abs '+0.001' -> '0.001' -dqabs035 abs '-0.001' -> '0.001' -dqabs036 abs '+0.000001' -> '0.000001' -dqabs037 abs '-0.000001' -> '0.000001' -dqabs038 abs '+0.000000000001' -> '1E-12' -dqabs039 abs '-0.000000000001' -> '1E-12' - --- examples from decArith -dqabs040 abs '2.1' -> '2.1' -dqabs041 abs '-100' -> '100' -dqabs042 abs '101.5' -> '101.5' -dqabs043 abs '-101.5' -> '101.5' - --- more fixed, potential LHS swaps/overlays if done by subtract 0 -dqabs060 abs '-56267E-10' -> '0.0000056267' -dqabs061 abs '-56267E-5' -> '0.56267' -dqabs062 abs '-56267E-2' -> '562.67' -dqabs063 abs '-56267E-1' -> '5626.7' -dqabs065 abs '-56267E-0' -> '56267' - --- subnormals and underflow - --- long operand tests -dqabs321 abs 1234567890123456 -> 1234567890123456 -dqabs322 abs 12345678000 -> 12345678000 -dqabs323 abs 1234567800 -> 1234567800 -dqabs324 abs 1234567890 -> 1234567890 -dqabs325 abs 1234567891 -> 1234567891 -dqabs326 abs 12345678901 -> 12345678901 -dqabs327 abs 1234567896 -> 1234567896 - --- zeros -dqabs111 abs 0 -> 0 -dqabs112 abs -0 -> 0 -dqabs113 abs 0E+6 -> 0E+6 -dqabs114 abs -0E+6 -> 0E+6 -dqabs115 abs 0.0000 -> 0.0000 -dqabs116 abs -0.0000 -> 0.0000 -dqabs117 abs 0E-141 -> 0E-141 -dqabs118 abs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqabs121 abs 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqabs122 abs -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqabs123 abs 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 -dqabs124 abs -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqabs131 abs 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqabs132 abs 1E-6143 -> 1E-6143 -dqabs133 abs 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqabs134 abs 1E-6176 -> 1E-6176 Subnormal - -dqabs135 abs -1E-6176 -> 1E-6176 Subnormal -dqabs136 abs -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqabs137 abs -1E-6143 -> 1E-6143 -dqabs138 abs -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 - --- specials -dqabs520 abs 'Inf' -> 'Infinity' -dqabs521 abs '-Inf' -> 'Infinity' -dqabs522 abs NaN -> NaN -dqabs523 abs sNaN -> NaN Invalid_operation -dqabs524 abs NaN22 -> NaN22 -dqabs525 abs sNaN33 -> NaN33 Invalid_operation -dqabs526 abs -NaN22 -> -NaN22 -dqabs527 abs -sNaN33 -> -NaN33 Invalid_operation - --- Null tests -dqabs900 abs # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqAbs.decTest -- decQuad absolute value, heeding sNaN -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqabs001 abs '1' -> '1' +dqabs002 abs '-1' -> '1' +dqabs003 abs '1.00' -> '1.00' +dqabs004 abs '-1.00' -> '1.00' +dqabs005 abs '0' -> '0' +dqabs006 abs '0.00' -> '0.00' +dqabs007 abs '00.0' -> '0.0' +dqabs008 abs '00.00' -> '0.00' +dqabs009 abs '00' -> '0' + +dqabs010 abs '-2' -> '2' +dqabs011 abs '2' -> '2' +dqabs012 abs '-2.00' -> '2.00' +dqabs013 abs '2.00' -> '2.00' +dqabs014 abs '-0' -> '0' +dqabs015 abs '-0.00' -> '0.00' +dqabs016 abs '-00.0' -> '0.0' +dqabs017 abs '-00.00' -> '0.00' +dqabs018 abs '-00' -> '0' + +dqabs020 abs '-2000000' -> '2000000' +dqabs021 abs '2000000' -> '2000000' + +dqabs030 abs '+0.1' -> '0.1' +dqabs031 abs '-0.1' -> '0.1' +dqabs032 abs '+0.01' -> '0.01' +dqabs033 abs '-0.01' -> '0.01' +dqabs034 abs '+0.001' -> '0.001' +dqabs035 abs '-0.001' -> '0.001' +dqabs036 abs '+0.000001' -> '0.000001' +dqabs037 abs '-0.000001' -> '0.000001' +dqabs038 abs '+0.000000000001' -> '1E-12' +dqabs039 abs '-0.000000000001' -> '1E-12' + +-- examples from decArith +dqabs040 abs '2.1' -> '2.1' +dqabs041 abs '-100' -> '100' +dqabs042 abs '101.5' -> '101.5' +dqabs043 abs '-101.5' -> '101.5' + +-- more fixed, potential LHS swaps/overlays if done by subtract 0 +dqabs060 abs '-56267E-10' -> '0.0000056267' +dqabs061 abs '-56267E-5' -> '0.56267' +dqabs062 abs '-56267E-2' -> '562.67' +dqabs063 abs '-56267E-1' -> '5626.7' +dqabs065 abs '-56267E-0' -> '56267' + +-- subnormals and underflow + +-- long operand tests +dqabs321 abs 1234567890123456 -> 1234567890123456 +dqabs322 abs 12345678000 -> 12345678000 +dqabs323 abs 1234567800 -> 1234567800 +dqabs324 abs 1234567890 -> 1234567890 +dqabs325 abs 1234567891 -> 1234567891 +dqabs326 abs 12345678901 -> 12345678901 +dqabs327 abs 1234567896 -> 1234567896 + +-- zeros +dqabs111 abs 0 -> 0 +dqabs112 abs -0 -> 0 +dqabs113 abs 0E+6 -> 0E+6 +dqabs114 abs -0E+6 -> 0E+6 +dqabs115 abs 0.0000 -> 0.0000 +dqabs116 abs -0.0000 -> 0.0000 +dqabs117 abs 0E-141 -> 0E-141 +dqabs118 abs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqabs121 abs 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqabs122 abs -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqabs123 abs 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 +dqabs124 abs -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqabs131 abs 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqabs132 abs 1E-6143 -> 1E-6143 +dqabs133 abs 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqabs134 abs 1E-6176 -> 1E-6176 Subnormal + +dqabs135 abs -1E-6176 -> 1E-6176 Subnormal +dqabs136 abs -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqabs137 abs -1E-6143 -> 1E-6143 +dqabs138 abs -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 + +-- specials +dqabs520 abs 'Inf' -> 'Infinity' +dqabs521 abs '-Inf' -> 'Infinity' +dqabs522 abs NaN -> NaN +dqabs523 abs sNaN -> NaN Invalid_operation +dqabs524 abs NaN22 -> NaN22 +dqabs525 abs sNaN33 -> NaN33 Invalid_operation +dqabs526 abs -NaN22 -> -NaN22 +dqabs527 abs -sNaN33 -> -NaN33 Invalid_operation + +-- Null tests +dqabs900 abs # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqAdd.decTest b/Lib/test/decimaltestdata/dqAdd.decTest index b3ad892bc1d..b1df77abc67 100644 --- a/Lib/test/decimaltestdata/dqAdd.decTest +++ b/Lib/test/decimaltestdata/dqAdd.decTest @@ -1,1215 +1,1215 @@ ------------------------------------------------------------------------- --- dqAdd.decTest -- decQuad addition -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decQuads only; all arguments are --- representable in a decQuad -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- [first group are 'quick confidence check'] -dqadd001 add 1 1 -> 2 -dqadd002 add 2 3 -> 5 -dqadd003 add '5.75' '3.3' -> 9.05 -dqadd004 add '5' '-3' -> 2 -dqadd005 add '-5' '-3' -> -8 -dqadd006 add '-7' '2.5' -> -4.5 -dqadd007 add '0.7' '0.3' -> 1.0 -dqadd008 add '1.25' '1.25' -> 2.50 -dqadd009 add '1.23456789' '1.00000000' -> '2.23456789' -dqadd010 add '1.23456789' '1.00000011' -> '2.23456800' - --- 1234567890123456 1234567890123456 -dqadd011 add '0.4444444444444444444444444444444446' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Inexact Rounded -dqadd012 add '0.4444444444444444444444444444444445' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Rounded -dqadd013 add '0.4444444444444444444444444444444444' '0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' -dqadd014 add '4444444444444444444444444444444444' '0.49' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd015 add '4444444444444444444444444444444444' '0.499' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd016 add '4444444444444444444444444444444444' '0.4999' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd017 add '4444444444444444444444444444444444' '0.5000' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd018 add '4444444444444444444444444444444444' '0.5001' -> '4444444444444444444444444444444445' Inexact Rounded -dqadd019 add '4444444444444444444444444444444444' '0.501' -> '4444444444444444444444444444444445' Inexact Rounded -dqadd020 add '4444444444444444444444444444444444' '0.51' -> '4444444444444444444444444444444445' Inexact Rounded - -dqadd021 add 0 1 -> 1 -dqadd022 add 1 1 -> 2 -dqadd023 add 2 1 -> 3 -dqadd024 add 3 1 -> 4 -dqadd025 add 4 1 -> 5 -dqadd026 add 5 1 -> 6 -dqadd027 add 6 1 -> 7 -dqadd028 add 7 1 -> 8 -dqadd029 add 8 1 -> 9 -dqadd030 add 9 1 -> 10 - --- some carrying effects -dqadd031 add '0.9998' '0.0000' -> '0.9998' -dqadd032 add '0.9998' '0.0001' -> '0.9999' -dqadd033 add '0.9998' '0.0002' -> '1.0000' -dqadd034 add '0.9998' '0.0003' -> '1.0001' - -dqadd035 add '70' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd036 add '700' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd037 add '7000' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd038 add '70000' '10000e+34' -> '1.000000000000000000000000000000001E+38' Inexact Rounded -dqadd039 add '700000' '10000e+34' -> '1.000000000000000000000000000000007E+38' Rounded - --- symmetry: -dqadd040 add '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd041 add '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd042 add '10000e+34' '7000' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd044 add '10000e+34' '70000' -> '1.000000000000000000000000000000001E+38' Inexact Rounded -dqadd045 add '10000e+34' '700000' -> '1.000000000000000000000000000000007E+38' Rounded - --- same, without rounding -dqadd046 add '10000e+9' '7' -> '10000000000007' -dqadd047 add '10000e+9' '70' -> '10000000000070' -dqadd048 add '10000e+9' '700' -> '10000000000700' -dqadd049 add '10000e+9' '7000' -> '10000000007000' -dqadd050 add '10000e+9' '70000' -> '10000000070000' -dqadd051 add '10000e+9' '700000' -> '10000000700000' -dqadd052 add '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -dqadd053 add '12' '7.00' -> '19.00' -dqadd054 add '1.3' '-1.07' -> '0.23' -dqadd055 add '1.3' '-1.30' -> '0.00' -dqadd056 add '1.3' '-2.07' -> '-0.77' -dqadd057 add '1E+2' '1E+4' -> '1.01E+4' - --- leading zero preservation -dqadd061 add 1 '0.0001' -> '1.0001' -dqadd062 add 1 '0.00001' -> '1.00001' -dqadd063 add 1 '0.000001' -> '1.000001' -dqadd064 add 1 '0.0000001' -> '1.0000001' -dqadd065 add 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -dqadd070 add 1 0 -> 1 -dqadd071 add 1 0. -> 1 -dqadd072 add 1 .0 -> 1.0 -dqadd073 add 1 0.0 -> 1.0 -dqadd074 add 1 0.00 -> 1.00 -dqadd075 add 0 1 -> 1 -dqadd076 add 0. 1 -> 1 -dqadd077 add .0 1 -> 1.0 -dqadd078 add 0.0 1 -> 1.0 -dqadd079 add 0.00 1 -> 1.00 - --- some carries -dqadd080 add 999999998 1 -> 999999999 -dqadd081 add 999999999 1 -> 1000000000 -dqadd082 add 99999999 1 -> 100000000 -dqadd083 add 9999999 1 -> 10000000 -dqadd084 add 999999 1 -> 1000000 -dqadd085 add 99999 1 -> 100000 -dqadd086 add 9999 1 -> 10000 -dqadd087 add 999 1 -> 1000 -dqadd088 add 99 1 -> 100 -dqadd089 add 9 1 -> 10 - - --- more LHS swaps -dqadd090 add '-56267E-10' 0 -> '-0.0000056267' -dqadd091 add '-56267E-6' 0 -> '-0.056267' -dqadd092 add '-56267E-5' 0 -> '-0.56267' -dqadd093 add '-56267E-4' 0 -> '-5.6267' -dqadd094 add '-56267E-3' 0 -> '-56.267' -dqadd095 add '-56267E-2' 0 -> '-562.67' -dqadd096 add '-56267E-1' 0 -> '-5626.7' -dqadd097 add '-56267E-0' 0 -> '-56267' -dqadd098 add '-5E-10' 0 -> '-5E-10' -dqadd099 add '-5E-7' 0 -> '-5E-7' -dqadd100 add '-5E-6' 0 -> '-0.000005' -dqadd101 add '-5E-5' 0 -> '-0.00005' -dqadd102 add '-5E-4' 0 -> '-0.0005' -dqadd103 add '-5E-1' 0 -> '-0.5' -dqadd104 add '-5E0' 0 -> '-5' -dqadd105 add '-5E1' 0 -> '-50' -dqadd106 add '-5E5' 0 -> '-500000' -dqadd107 add '-5E33' 0 -> '-5000000000000000000000000000000000' -dqadd108 add '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded -dqadd109 add '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded -dqadd110 add '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded -dqadd111 add '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded - --- more RHS swaps -dqadd113 add 0 '-56267E-10' -> '-0.0000056267' -dqadd114 add 0 '-56267E-6' -> '-0.056267' -dqadd116 add 0 '-56267E-5' -> '-0.56267' -dqadd117 add 0 '-56267E-4' -> '-5.6267' -dqadd119 add 0 '-56267E-3' -> '-56.267' -dqadd120 add 0 '-56267E-2' -> '-562.67' -dqadd121 add 0 '-56267E-1' -> '-5626.7' -dqadd122 add 0 '-56267E-0' -> '-56267' -dqadd123 add 0 '-5E-10' -> '-5E-10' -dqadd124 add 0 '-5E-7' -> '-5E-7' -dqadd125 add 0 '-5E-6' -> '-0.000005' -dqadd126 add 0 '-5E-5' -> '-0.00005' -dqadd127 add 0 '-5E-4' -> '-0.0005' -dqadd128 add 0 '-5E-1' -> '-0.5' -dqadd129 add 0 '-5E0' -> '-5' -dqadd130 add 0 '-5E1' -> '-50' -dqadd131 add 0 '-5E5' -> '-500000' -dqadd132 add 0 '-5E33' -> '-5000000000000000000000000000000000' -dqadd133 add 0 '-5E34' -> '-5.000000000000000000000000000000000E+34' Rounded -dqadd134 add 0 '-5E35' -> '-5.000000000000000000000000000000000E+35' Rounded -dqadd135 add 0 '-5E36' -> '-5.000000000000000000000000000000000E+36' Rounded -dqadd136 add 0 '-5E100' -> '-5.000000000000000000000000000000000E+100' Rounded - --- related -dqadd137 add 1 '0E-39' -> '1.000000000000000000000000000000000' Rounded -dqadd138 add -1 '0E-39' -> '-1.000000000000000000000000000000000' Rounded -dqadd139 add '0E-39' 1 -> '1.000000000000000000000000000000000' Rounded -dqadd140 add '0E-39' -1 -> '-1.000000000000000000000000000000000' Rounded -dqadd141 add 1E+29 0.0000 -> '100000000000000000000000000000.0000' -dqadd142 add 1E+29 0.00000 -> '100000000000000000000000000000.0000' Rounded -dqadd143 add 0.000 1E+30 -> '1000000000000000000000000000000.000' -dqadd144 add 0.0000 1E+30 -> '1000000000000000000000000000000.000' Rounded - --- [some of the next group are really constructor tests] -dqadd146 add '00.0' 0 -> '0.0' -dqadd147 add '0.00' 0 -> '0.00' -dqadd148 add 0 '0.00' -> '0.00' -dqadd149 add 0 '00.0' -> '0.0' -dqadd150 add '00.0' '0.00' -> '0.00' -dqadd151 add '0.00' '00.0' -> '0.00' -dqadd152 add '3' '.3' -> '3.3' -dqadd153 add '3.' '.3' -> '3.3' -dqadd154 add '3.0' '.3' -> '3.3' -dqadd155 add '3.00' '.3' -> '3.30' -dqadd156 add '3' '3' -> '6' -dqadd157 add '3' '+3' -> '6' -dqadd158 add '3' '-3' -> '0' -dqadd159 add '0.3' '-0.3' -> '0.0' -dqadd160 add '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -dqadd161 add '1E+12' '-1' -> '999999999999' -dqadd162 add '1E+12' '1.11' -> '1000000000001.11' -dqadd163 add '1.11' '1E+12' -> '1000000000001.11' -dqadd164 add '-1' '1E+12' -> '999999999999' -dqadd165 add '7E+12' '-1' -> '6999999999999' -dqadd166 add '7E+12' '1.11' -> '7000000000001.11' -dqadd167 add '1.11' '7E+12' -> '7000000000001.11' -dqadd168 add '-1' '7E+12' -> '6999999999999' - -rounding: half_up -dqadd170 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555567' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd171 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555566' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd172 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555565' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd173 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555564' -> '5.000000000000000000000000000000000' Inexact Rounded -dqadd174 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555553' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd175 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555552' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd176 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555551' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd177 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555550' -> '4.999999999999999999999999999999999' Rounded -dqadd178 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555545' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd179 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555544' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd180 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555543' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd181 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555542' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd182 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555541' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd183 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555540' -> '4.999999999999999999999999999999998' Rounded - --- and some more, including residue effects and different roundings -rounding: half_up -dqadd200 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd201 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd202 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd203 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd204 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd205 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd206 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd207 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd208 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd209 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd210 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd211 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd212 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd213 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd214 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd215 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd216 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd217 add '1231234567890123456784560123456789' 1.000000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd218 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd219 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded - -rounding: half_even -dqadd220 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd221 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd222 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd223 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd224 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd225 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd226 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd227 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd228 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd229 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd230 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd231 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd232 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd233 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd234 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd235 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd236 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd237 add '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd238 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd239 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded --- critical few with even bottom digit... -dqadd240 add '1231234567890123456784560123456788' 0.499999999 -> '1231234567890123456784560123456788' Inexact Rounded -dqadd241 add '1231234567890123456784560123456788' 0.5 -> '1231234567890123456784560123456788' Inexact Rounded -dqadd242 add '1231234567890123456784560123456788' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded - -rounding: down -dqadd250 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd251 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd252 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd253 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd254 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd255 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd256 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd257 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd258 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd259 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd260 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd261 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd262 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd263 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd264 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd265 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd266 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd267 add '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd268 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd269 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_up -dqadd301 add -1 1 -> 0 -dqadd302 add 0 1 -> 1 -dqadd303 add 1 1 -> 2 -dqadd304 add 12 1 -> 13 -dqadd305 add 98 1 -> 99 -dqadd306 add 99 1 -> 100 -dqadd307 add 100 1 -> 101 -dqadd308 add 101 1 -> 102 -dqadd309 add -1 -1 -> -2 -dqadd310 add 0 -1 -> -1 -dqadd311 add 1 -1 -> 0 -dqadd312 add 12 -1 -> 11 -dqadd313 add 98 -1 -> 97 -dqadd314 add 99 -1 -> 98 -dqadd315 add 100 -1 -> 99 -dqadd316 add 101 -1 -> 100 - -dqadd321 add -0.01 0.01 -> 0.00 -dqadd322 add 0.00 0.01 -> 0.01 -dqadd323 add 0.01 0.01 -> 0.02 -dqadd324 add 0.12 0.01 -> 0.13 -dqadd325 add 0.98 0.01 -> 0.99 -dqadd326 add 0.99 0.01 -> 1.00 -dqadd327 add 1.00 0.01 -> 1.01 -dqadd328 add 1.01 0.01 -> 1.02 -dqadd329 add -0.01 -0.01 -> -0.02 -dqadd330 add 0.00 -0.01 -> -0.01 -dqadd331 add 0.01 -0.01 -> 0.00 -dqadd332 add 0.12 -0.01 -> 0.11 -dqadd333 add 0.98 -0.01 -> 0.97 -dqadd334 add 0.99 -0.01 -> 0.98 -dqadd335 add 1.00 -0.01 -> 0.99 -dqadd336 add 1.01 -0.01 -> 1.00 - --- some more cases where adding 0 affects the coefficient -dqadd340 add 1E+3 0 -> 1000 -dqadd341 add 1E+33 0 -> 1000000000000000000000000000000000 -dqadd342 add 1E+34 0 -> 1.000000000000000000000000000000000E+34 Rounded -dqadd343 add 1E+35 0 -> 1.000000000000000000000000000000000E+35 Rounded --- which simply follow from these cases ... -dqadd344 add 1E+3 1 -> 1001 -dqadd345 add 1E+33 1 -> 1000000000000000000000000000000001 -dqadd346 add 1E+34 1 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd347 add 1E+35 1 -> 1.000000000000000000000000000000000E+35 Inexact Rounded -dqadd348 add 1E+3 7 -> 1007 -dqadd349 add 1E+33 7 -> 1000000000000000000000000000000007 -dqadd350 add 1E+34 7 -> 1.000000000000000000000000000000001E+34 Inexact Rounded -dqadd351 add 1E+35 7 -> 1.000000000000000000000000000000000E+35 Inexact Rounded - --- tryzeros cases -rounding: half_up -dqadd360 add 0E+50 10000E+1 -> 1.0000E+5 -dqadd361 add 0E-50 10000E+1 -> 100000.0000000000000000000000000000 Rounded -dqadd362 add 10000E+1 0E-50 -> 100000.0000000000000000000000000000 Rounded -dqadd363 add 10000E+1 10000E-50 -> 100000.0000000000000000000000000000 Rounded Inexact -dqadd364 add 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0E+6111 --- 1 234567890123456789012345678901234 - --- a curiosity from JSR 13 testing -rounding: half_down -dqadd370 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd371 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact -rounding: half_up -dqadd372 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd373 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact -rounding: half_even -dqadd374 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd375 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact - --- ulp replacement tests -dqadd400 add 1 77e-32 -> 1.00000000000000000000000000000077 -dqadd401 add 1 77e-33 -> 1.000000000000000000000000000000077 -dqadd402 add 1 77e-34 -> 1.000000000000000000000000000000008 Inexact Rounded -dqadd403 add 1 77e-35 -> 1.000000000000000000000000000000001 Inexact Rounded -dqadd404 add 1 77e-36 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd405 add 1 77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd406 add 1 77e-299 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd410 add 10 77e-32 -> 10.00000000000000000000000000000077 -dqadd411 add 10 77e-33 -> 10.00000000000000000000000000000008 Inexact Rounded -dqadd412 add 10 77e-34 -> 10.00000000000000000000000000000001 Inexact Rounded -dqadd413 add 10 77e-35 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd414 add 10 77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd415 add 10 77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd416 add 10 77e-299 -> 10.00000000000000000000000000000000 Inexact Rounded - -dqadd420 add 77e-32 1 -> 1.00000000000000000000000000000077 -dqadd421 add 77e-33 1 -> 1.000000000000000000000000000000077 -dqadd422 add 77e-34 1 -> 1.000000000000000000000000000000008 Inexact Rounded -dqadd423 add 77e-35 1 -> 1.000000000000000000000000000000001 Inexact Rounded -dqadd424 add 77e-36 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd425 add 77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd426 add 77e-299 1 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd430 add 77e-32 10 -> 10.00000000000000000000000000000077 -dqadd431 add 77e-33 10 -> 10.00000000000000000000000000000008 Inexact Rounded -dqadd432 add 77e-34 10 -> 10.00000000000000000000000000000001 Inexact Rounded -dqadd433 add 77e-35 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd434 add 77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd435 add 77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd436 add 77e-299 10 -> 10.00000000000000000000000000000000 Inexact Rounded - --- fastpath boundaries --- 1234567890123456789012345678901234 -dqadd501 add '4444444444444444444444444444444444' '5555555555555555555555555555555555' -> '9999999999999999999999999999999999' -dqadd502 add '4444444444444444444444444444444444' '4555555555555555555555555555555555' -> '8999999999999999999999999999999999' -dqadd503 add '4444444444444444444444444444444444' '3555555555555555555055555555555555' -> '7999999999999999999499999999999999' -dqadd504 add '4444444444444444444444444444444444' '3955555555555555555555555555555555' -> '8399999999999999999999999999999999' -dqadd505 add '4444444444444444444444444444444444' '4955555555555555555555555555555555' -> '9399999999999999999999999999999999' -dqadd506 add '4444444444444444444444444444444444' '5955555555555555555555555555555555' -> 1.040000000000000000000000000000000E+34 Inexact Rounded -dqadd511 add '344444444444444444444444444444444' '555555555555555555555555555555555' -> '899999999999999999999999999999999' -dqadd512 add '34444444444444444444444444444444' '55555555555555555555555555555555' -> '89999999999999999999999999999999' -dqadd513 add '3444444444444444444444444444444' '5555555555555555555555555555555' -> '8999999999999999999999999999999' -dqadd514 add '344444444444444444444444444444' '555555555555555555555555555555' -> '899999999999999999999999999999' -dqadd515 add '34444444444444444444444444444' '55555555555555555555555555555' -> '89999999999999999999999999999' -dqadd516 add '3444444444444444444444444444' '5555555555555555555555555555' -> '8999999999999999999999999999' -dqadd517 add '344444444444444444444444444' '555555555555555555555555555' -> '899999999999999999999999999' -dqadd518 add '34444444444444444444444444' '55555555555555555555555555' -> '89999999999999999999999999' -dqadd519 add '3444444444444444444444444' '5555555555555555555555555' -> '8999999999999999999999999' -dqadd520 add '344444444444444444444444' '555555555555555555555555' -> '899999999999999999999999' -dqadd521 add '34444444444444444444444' '55555555555555555555555' -> '89999999999999999999999' -dqadd522 add '3444444444444444444444' '5555555555555555555555' -> '8999999999999999999999' -dqadd523 add '4444444444444444444444' '3333333333333333333333' -> '7777777777777777777777' -dqadd524 add '344444444444444444444' '555555555555555555555' -> '899999999999999999999' -dqadd525 add '34444444444444444444' '55555555555555555555' -> '89999999999999999999' -dqadd526 add '3444444444444444444' '5555555555555555555' -> '8999999999999999999' -dqadd527 add '344444444444444444' '555555555555555555' -> '899999999999999999' -dqadd528 add '34444444444444444' '55555555555555555' -> '89999999999999999' -dqadd529 add '3444444444444444' '5555555555555555' -> '8999999999999999' -dqadd530 add '344444444444444' '555555555555555' -> '899999999999999' -dqadd531 add '34444444444444' '55555555555555' -> '89999999999999' -dqadd532 add '3444444444444' '5555555555555' -> '8999999999999' -dqadd533 add '344444444444' '555555555555' -> '899999999999' -dqadd534 add '34444444444' '55555555555' -> '89999999999' -dqadd535 add '3444444444' '5555555555' -> '8999999999' -dqadd536 add '344444444' '555555555' -> '899999999' -dqadd537 add '34444444' '55555555' -> '89999999' -dqadd538 add '3444444' '5555555' -> '8999999' -dqadd539 add '344444' '555555' -> '899999' -dqadd540 add '34444' '55555' -> '89999' -dqadd541 add '3444' '5555' -> '8999' -dqadd542 add '344' '555' -> '899' -dqadd543 add '34' '55' -> '89' -dqadd544 add '3' '5' -> '8' - -dqadd545 add '3000004000000000000000000000000000' '3000000000000040000000000000000000' -> '6000004000000040000000000000000000' -dqadd546 add '3000000400000000000000000000000000' '4000000000000400000000000000000000' -> '7000000400000400000000000000000000' -dqadd547 add '3000000040000000000000000000000000' '5000000000004000000000000000000000' -> '8000000040004000000000000000000000' -dqadd548 add '4000000004000000000000000000000000' '3000000000040000000000000000000000' -> '7000000004040000000000000000000000' -dqadd549 add '4000000000400000000000000000000000' '4000000000400000000000000000000000' -> '8000000000800000000000000000000000' -dqadd550 add '4000000000040000000000000000000000' '5000000004000000000000000000000000' -> '9000000004040000000000000000000000' -dqadd551 add '5000000000004000000000000000000000' '3000000040000000000000000000000000' -> '8000000040004000000000000000000000' -dqadd552 add '5000000000000400000000000000000000' '4000000400000000000000000000000000' -> '9000000400000400000000000000000000' -dqadd553 add '5000000000000040000000000000000000' '5000004000000000000000000000000000' -> 1.000000400000004000000000000000000E+34 Rounded --- check propagation -dqadd554 add '8999999999999999999999999999999999' '0000000000000000000000000000000001' -> 9000000000000000000000000000000000 -dqadd555 add '0000000000000000000000000000000001' '8999999999999999999999999999999999' -> 9000000000000000000000000000000000 -dqadd556 add '4444444444444444444444444444444444' '4555555555555555555555555555555556' -> 9000000000000000000000000000000000 -dqadd557 add '4555555555555555555555555555555556' '4444444444444444444444444444444444' -> 9000000000000000000000000000000000 - --- negative ulps -dqadd6440 add 1 -77e-32 -> 0.99999999999999999999999999999923 -dqadd6441 add 1 -77e-33 -> 0.999999999999999999999999999999923 -dqadd6442 add 1 -77e-34 -> 0.9999999999999999999999999999999923 -dqadd6443 add 1 -77e-35 -> 0.9999999999999999999999999999999992 Inexact Rounded -dqadd6444 add 1 -77e-36 -> 0.9999999999999999999999999999999999 Inexact Rounded -dqadd6445 add 1 -77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd6446 add 1 -77e-99 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd6450 add 10 -77e-32 -> 9.99999999999999999999999999999923 -dqadd6451 add 10 -77e-33 -> 9.999999999999999999999999999999923 -dqadd6452 add 10 -77e-34 -> 9.999999999999999999999999999999992 Inexact Rounded -dqadd6453 add 10 -77e-35 -> 9.999999999999999999999999999999999 Inexact Rounded -dqadd6454 add 10 -77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd6455 add 10 -77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd6456 add 10 -77e-99 -> 10.00000000000000000000000000000000 Inexact Rounded - -dqadd6460 add -77e-32 1 -> 0.99999999999999999999999999999923 -dqadd6461 add -77e-33 1 -> 0.999999999999999999999999999999923 -dqadd6462 add -77e-34 1 -> 0.9999999999999999999999999999999923 -dqadd6463 add -77e-35 1 -> 0.9999999999999999999999999999999992 Inexact Rounded -dqadd6464 add -77e-36 1 -> 0.9999999999999999999999999999999999 Inexact Rounded -dqadd6465 add -77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd6466 add -77e-99 1 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd6470 add -77e-32 10 -> 9.99999999999999999999999999999923 -dqadd6471 add -77e-33 10 -> 9.999999999999999999999999999999923 -dqadd6472 add -77e-34 10 -> 9.999999999999999999999999999999992 Inexact Rounded -dqadd6473 add -77e-35 10 -> 9.999999999999999999999999999999999 Inexact Rounded -dqadd6474 add -77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd6475 add -77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd6476 add -77e-99 10 -> 10.00000000000000000000000000000000 Inexact Rounded - --- negative ulps -dqadd6480 add -1 77e-32 -> -0.99999999999999999999999999999923 -dqadd6481 add -1 77e-33 -> -0.999999999999999999999999999999923 -dqadd6482 add -1 77e-34 -> -0.9999999999999999999999999999999923 -dqadd6483 add -1 77e-35 -> -0.9999999999999999999999999999999992 Inexact Rounded -dqadd6484 add -1 77e-36 -> -0.9999999999999999999999999999999999 Inexact Rounded -dqadd6485 add -1 77e-37 -> -1.000000000000000000000000000000000 Inexact Rounded -dqadd6486 add -1 77e-99 -> -1.000000000000000000000000000000000 Inexact Rounded - -dqadd6490 add -10 77e-32 -> -9.99999999999999999999999999999923 -dqadd6491 add -10 77e-33 -> -9.999999999999999999999999999999923 -dqadd6492 add -10 77e-34 -> -9.999999999999999999999999999999992 Inexact Rounded -dqadd6493 add -10 77e-35 -> -9.999999999999999999999999999999999 Inexact Rounded -dqadd6494 add -10 77e-36 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd6495 add -10 77e-37 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd6496 add -10 77e-99 -> -10.00000000000000000000000000000000 Inexact Rounded - -dqadd6500 add 77e-32 -1 -> -0.99999999999999999999999999999923 -dqadd6501 add 77e-33 -1 -> -0.999999999999999999999999999999923 -dqadd6502 add 77e-34 -1 -> -0.9999999999999999999999999999999923 -dqadd6503 add 77e-35 -1 -> -0.9999999999999999999999999999999992 Inexact Rounded -dqadd6504 add 77e-36 -1 -> -0.9999999999999999999999999999999999 Inexact Rounded -dqadd6505 add 77e-37 -1 -> -1.000000000000000000000000000000000 Inexact Rounded -dqadd6506 add 77e-99 -1 -> -1.000000000000000000000000000000000 Inexact Rounded - -dqadd6510 add 77e-32 -10 -> -9.99999999999999999999999999999923 -dqadd6511 add 77e-33 -10 -> -9.999999999999999999999999999999923 -dqadd6512 add 77e-34 -10 -> -9.999999999999999999999999999999992 Inexact Rounded -dqadd6513 add 77e-35 -10 -> -9.999999999999999999999999999999999 Inexact Rounded -dqadd6514 add 77e-36 -10 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd6515 add 77e-37 -10 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd6516 add 77e-99 -10 -> -10.00000000000000000000000000000000 Inexact Rounded - --- and some more residue effects and different roundings -rounding: half_up -dqadd6540 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd6541 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6542 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6543 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6544 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6545 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6546 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6547 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6548 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6549 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6550 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6551 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6552 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6553 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6554 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6555 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6556 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd6557 add '9876543219876543216543210123456789' 1.000000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6558 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6559 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - -rounding: half_even -dqadd6560 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd6561 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6562 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6563 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6564 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6565 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6566 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6567 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6568 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6569 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6570 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6571 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6572 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6573 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6574 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6575 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6576 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd6577 add '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6578 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6579 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - --- critical few with even bottom digit... -dqadd7540 add '9876543219876543216543210123456788' 0.499999999 -> '9876543219876543216543210123456788' Inexact Rounded -dqadd7541 add '9876543219876543216543210123456788' 0.5 -> '9876543219876543216543210123456788' Inexact Rounded -dqadd7542 add '9876543219876543216543210123456788' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded - -rounding: down -dqadd7550 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd7551 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7552 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7553 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7554 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7555 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7556 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7557 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7558 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7559 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7560 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7561 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7562 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7563 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7564 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7565 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7566 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd7567 add '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd7568 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd7569 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - --- more zeros, etc. -rounding: half_even - -dqadd7701 add 5.00 1.00E-3 -> 5.00100 -dqadd7702 add 00.00 0.000 -> 0.000 -dqadd7703 add 00.00 0E-3 -> 0.000 -dqadd7704 add 0E-3 00.00 -> 0.000 - -dqadd7710 add 0E+3 00.00 -> 0.00 -dqadd7711 add 0E+3 00.0 -> 0.0 -dqadd7712 add 0E+3 00. -> 0 -dqadd7713 add 0E+3 00.E+1 -> 0E+1 -dqadd7714 add 0E+3 00.E+2 -> 0E+2 -dqadd7715 add 0E+3 00.E+3 -> 0E+3 -dqadd7716 add 0E+3 00.E+4 -> 0E+3 -dqadd7717 add 0E+3 00.E+5 -> 0E+3 -dqadd7718 add 0E+3 -00.0 -> 0.0 -dqadd7719 add 0E+3 -00. -> 0 -dqadd7731 add 0E+3 -00.E+1 -> 0E+1 - -dqadd7720 add 00.00 0E+3 -> 0.00 -dqadd7721 add 00.0 0E+3 -> 0.0 -dqadd7722 add 00. 0E+3 -> 0 -dqadd7723 add 00.E+1 0E+3 -> 0E+1 -dqadd7724 add 00.E+2 0E+3 -> 0E+2 -dqadd7725 add 00.E+3 0E+3 -> 0E+3 -dqadd7726 add 00.E+4 0E+3 -> 0E+3 -dqadd7727 add 00.E+5 0E+3 -> 0E+3 -dqadd7728 add -00.00 0E+3 -> 0.00 -dqadd7729 add -00.0 0E+3 -> 0.0 -dqadd7730 add -00. 0E+3 -> 0 - -dqadd7732 add 0 0 -> 0 -dqadd7733 add 0 -0 -> 0 -dqadd7734 add -0 0 -> 0 -dqadd7735 add -0 -0 -> -0 -- IEEE 754 special case - -dqadd7736 add 1 -1 -> 0 -dqadd7737 add -1 -1 -> -2 -dqadd7738 add 1 1 -> 2 -dqadd7739 add -1 1 -> 0 - -dqadd7741 add 0 -1 -> -1 -dqadd7742 add -0 -1 -> -1 -dqadd7743 add 0 1 -> 1 -dqadd7744 add -0 1 -> 1 -dqadd7745 add -1 0 -> -1 -dqadd7746 add -1 -0 -> -1 -dqadd7747 add 1 0 -> 1 -dqadd7748 add 1 -0 -> 1 - -dqadd7751 add 0.0 -1 -> -1.0 -dqadd7752 add -0.0 -1 -> -1.0 -dqadd7753 add 0.0 1 -> 1.0 -dqadd7754 add -0.0 1 -> 1.0 -dqadd7755 add -1.0 0 -> -1.0 -dqadd7756 add -1.0 -0 -> -1.0 -dqadd7757 add 1.0 0 -> 1.0 -dqadd7758 add 1.0 -0 -> 1.0 - -dqadd7761 add 0 -1.0 -> -1.0 -dqadd7762 add -0 -1.0 -> -1.0 -dqadd7763 add 0 1.0 -> 1.0 -dqadd7764 add -0 1.0 -> 1.0 -dqadd7765 add -1 0.0 -> -1.0 -dqadd7766 add -1 -0.0 -> -1.0 -dqadd7767 add 1 0.0 -> 1.0 -dqadd7768 add 1 -0.0 -> 1.0 - -dqadd7771 add 0.0 -1.0 -> -1.0 -dqadd7772 add -0.0 -1.0 -> -1.0 -dqadd7773 add 0.0 1.0 -> 1.0 -dqadd7774 add -0.0 1.0 -> 1.0 -dqadd7775 add -1.0 0.0 -> -1.0 -dqadd7776 add -1.0 -0.0 -> -1.0 -dqadd7777 add 1.0 0.0 -> 1.0 -dqadd7778 add 1.0 -0.0 -> 1.0 - --- Specials -dqadd7780 add -Inf -Inf -> -Infinity -dqadd7781 add -Inf -1000 -> -Infinity -dqadd7782 add -Inf -1 -> -Infinity -dqadd7783 add -Inf -0 -> -Infinity -dqadd7784 add -Inf 0 -> -Infinity -dqadd7785 add -Inf 1 -> -Infinity -dqadd7786 add -Inf 1000 -> -Infinity -dqadd7787 add -1000 -Inf -> -Infinity -dqadd7788 add -Inf -Inf -> -Infinity -dqadd7789 add -1 -Inf -> -Infinity -dqadd7790 add -0 -Inf -> -Infinity -dqadd7791 add 0 -Inf -> -Infinity -dqadd7792 add 1 -Inf -> -Infinity -dqadd7793 add 1000 -Inf -> -Infinity -dqadd7794 add Inf -Inf -> NaN Invalid_operation - -dqadd7800 add Inf -Inf -> NaN Invalid_operation -dqadd7801 add Inf -1000 -> Infinity -dqadd7802 add Inf -1 -> Infinity -dqadd7803 add Inf -0 -> Infinity -dqadd7804 add Inf 0 -> Infinity -dqadd7805 add Inf 1 -> Infinity -dqadd7806 add Inf 1000 -> Infinity -dqadd7807 add Inf Inf -> Infinity -dqadd7808 add -1000 Inf -> Infinity -dqadd7809 add -Inf Inf -> NaN Invalid_operation -dqadd7810 add -1 Inf -> Infinity -dqadd7811 add -0 Inf -> Infinity -dqadd7812 add 0 Inf -> Infinity -dqadd7813 add 1 Inf -> Infinity -dqadd7814 add 1000 Inf -> Infinity -dqadd7815 add Inf Inf -> Infinity - -dqadd7821 add NaN -Inf -> NaN -dqadd7822 add NaN -1000 -> NaN -dqadd7823 add NaN -1 -> NaN -dqadd7824 add NaN -0 -> NaN -dqadd7825 add NaN 0 -> NaN -dqadd7826 add NaN 1 -> NaN -dqadd7827 add NaN 1000 -> NaN -dqadd7828 add NaN Inf -> NaN -dqadd7829 add NaN NaN -> NaN -dqadd7830 add -Inf NaN -> NaN -dqadd7831 add -1000 NaN -> NaN -dqadd7832 add -1 NaN -> NaN -dqadd7833 add -0 NaN -> NaN -dqadd7834 add 0 NaN -> NaN -dqadd7835 add 1 NaN -> NaN -dqadd7836 add 1000 NaN -> NaN -dqadd7837 add Inf NaN -> NaN - -dqadd7841 add sNaN -Inf -> NaN Invalid_operation -dqadd7842 add sNaN -1000 -> NaN Invalid_operation -dqadd7843 add sNaN -1 -> NaN Invalid_operation -dqadd7844 add sNaN -0 -> NaN Invalid_operation -dqadd7845 add sNaN 0 -> NaN Invalid_operation -dqadd7846 add sNaN 1 -> NaN Invalid_operation -dqadd7847 add sNaN 1000 -> NaN Invalid_operation -dqadd7848 add sNaN NaN -> NaN Invalid_operation -dqadd7849 add sNaN sNaN -> NaN Invalid_operation -dqadd7850 add NaN sNaN -> NaN Invalid_operation -dqadd7851 add -Inf sNaN -> NaN Invalid_operation -dqadd7852 add -1000 sNaN -> NaN Invalid_operation -dqadd7853 add -1 sNaN -> NaN Invalid_operation -dqadd7854 add -0 sNaN -> NaN Invalid_operation -dqadd7855 add 0 sNaN -> NaN Invalid_operation -dqadd7856 add 1 sNaN -> NaN Invalid_operation -dqadd7857 add 1000 sNaN -> NaN Invalid_operation -dqadd7858 add Inf sNaN -> NaN Invalid_operation -dqadd7859 add NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqadd7861 add NaN1 -Inf -> NaN1 -dqadd7862 add +NaN2 -1000 -> NaN2 -dqadd7863 add NaN3 1000 -> NaN3 -dqadd7864 add NaN4 Inf -> NaN4 -dqadd7865 add NaN5 +NaN6 -> NaN5 -dqadd7866 add -Inf NaN7 -> NaN7 -dqadd7867 add -1000 NaN8 -> NaN8 -dqadd7868 add 1000 NaN9 -> NaN9 -dqadd7869 add Inf +NaN10 -> NaN10 -dqadd7871 add sNaN11 -Inf -> NaN11 Invalid_operation -dqadd7872 add sNaN12 -1000 -> NaN12 Invalid_operation -dqadd7873 add sNaN13 1000 -> NaN13 Invalid_operation -dqadd7874 add sNaN14 NaN17 -> NaN14 Invalid_operation -dqadd7875 add sNaN15 sNaN18 -> NaN15 Invalid_operation -dqadd7876 add NaN16 sNaN19 -> NaN19 Invalid_operation -dqadd7877 add -Inf +sNaN20 -> NaN20 Invalid_operation -dqadd7878 add -1000 sNaN21 -> NaN21 Invalid_operation -dqadd7879 add 1000 sNaN22 -> NaN22 Invalid_operation -dqadd7880 add Inf sNaN23 -> NaN23 Invalid_operation -dqadd7881 add +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqadd7882 add -NaN26 NaN28 -> -NaN26 -dqadd7883 add -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqadd7884 add 1000 -NaN30 -> -NaN30 -dqadd7885 add 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Here we explore near the boundary of rounding a subnormal to Nmin -dqadd7575 add 1E-6143 -1E-6176 -> 9.99999999999999999999999999999999E-6144 Subnormal -dqadd7576 add -1E-6143 +1E-6176 -> -9.99999999999999999999999999999999E-6144 Subnormal - --- check overflow edge case --- 1234567890123456 -dqadd7972 apply 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqadd7973 add 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7974 add 9999999999999999999999999999999999E+6111 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7975 add 9999999999999999999999999999999999E+6111 1E+6111 -> Infinity Overflow Inexact Rounded -dqadd7976 add 9999999999999999999999999999999999E+6111 9E+6110 -> Infinity Overflow Inexact Rounded -dqadd7977 add 9999999999999999999999999999999999E+6111 8E+6110 -> Infinity Overflow Inexact Rounded -dqadd7978 add 9999999999999999999999999999999999E+6111 7E+6110 -> Infinity Overflow Inexact Rounded -dqadd7979 add 9999999999999999999999999999999999E+6111 6E+6110 -> Infinity Overflow Inexact Rounded -dqadd7980 add 9999999999999999999999999999999999E+6111 5E+6110 -> Infinity Overflow Inexact Rounded -dqadd7981 add 9999999999999999999999999999999999E+6111 4E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7982 add 9999999999999999999999999999999999E+6111 3E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7983 add 9999999999999999999999999999999999E+6111 2E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7984 add 9999999999999999999999999999999999E+6111 1E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded - -dqadd7985 apply -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqadd7986 add -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7987 add -9999999999999999999999999999999999E+6111 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7988 add -9999999999999999999999999999999999E+6111 -1E+6111 -> -Infinity Overflow Inexact Rounded -dqadd7989 add -9999999999999999999999999999999999E+6111 -9E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7990 add -9999999999999999999999999999999999E+6111 -8E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7991 add -9999999999999999999999999999999999E+6111 -7E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7992 add -9999999999999999999999999999999999E+6111 -6E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7993 add -9999999999999999999999999999999999E+6111 -5E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7994 add -9999999999999999999999999999999999E+6111 -4E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7995 add -9999999999999999999999999999999999E+6111 -3E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7996 add -9999999999999999999999999999999999E+6111 -2E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7997 add -9999999999999999999999999999999999E+6111 -1E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -dqadd71100 add 1e+2 -1e-6143 -> 99.99999999999999999999999999999999 Rounded Inexact -dqadd71101 add 1e+1 -1e-6143 -> 9.999999999999999999999999999999999 Rounded Inexact -dqadd71103 add +1 -1e-6143 -> 0.9999999999999999999999999999999999 Rounded Inexact -dqadd71104 add 1e-1 -1e-6143 -> 0.09999999999999999999999999999999999 Rounded Inexact -dqadd71105 add 1e-2 -1e-6143 -> 0.009999999999999999999999999999999999 Rounded Inexact -dqadd71106 add 1e-3 -1e-6143 -> 0.0009999999999999999999999999999999999 Rounded Inexact -dqadd71107 add 1e-4 -1e-6143 -> 0.00009999999999999999999999999999999999 Rounded Inexact -dqadd71108 add 1e-5 -1e-6143 -> 0.000009999999999999999999999999999999999 Rounded Inexact -dqadd71109 add 1e-6 -1e-6143 -> 9.999999999999999999999999999999999E-7 Rounded Inexact - -rounding: ceiling -dqadd71110 add -1e+2 +1e-6143 -> -99.99999999999999999999999999999999 Rounded Inexact -dqadd71111 add -1e+1 +1e-6143 -> -9.999999999999999999999999999999999 Rounded Inexact -dqadd71113 add -1 +1e-6143 -> -0.9999999999999999999999999999999999 Rounded Inexact -dqadd71114 add -1e-1 +1e-6143 -> -0.09999999999999999999999999999999999 Rounded Inexact -dqadd71115 add -1e-2 +1e-6143 -> -0.009999999999999999999999999999999999 Rounded Inexact -dqadd71116 add -1e-3 +1e-6143 -> -0.0009999999999999999999999999999999999 Rounded Inexact -dqadd71117 add -1e-4 +1e-6143 -> -0.00009999999999999999999999999999999999 Rounded Inexact -dqadd71118 add -1e-5 +1e-6143 -> -0.000009999999999999999999999999999999999 Rounded Inexact -dqadd71119 add -1e-6 +1e-6143 -> -9.999999999999999999999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -dqadd71300 add 1E34 -0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71310 add 1E34 -0.51 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71311 add 1E34 -0.501 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71312 add 1E34 -0.5001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71313 add 1E34 -0.50001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71314 add 1E34 -0.500001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71315 add 1E34 -0.5000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71316 add 1E34 -0.50000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71317 add 1E34 -0.500000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71318 add 1E34 -0.5000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71319 add 1E34 -0.50000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71320 add 1E34 -0.500000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71321 add 1E34 -0.5000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71322 add 1E34 -0.50000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71323 add 1E34 -0.500000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71324 add 1E34 -0.5000000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71325 add 1E34 -0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71326 add 1E34 -0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71327 add 1E34 -0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71328 add 1E34 -0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71329 add 1E34 -0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71330 add 1E34 -0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71331 add 1E34 -0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71332 add 1E34 -0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71333 add 1E34 -0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71334 add 1E34 -0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71335 add 1E34 -0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71336 add 1E34 -0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71337 add 1E34 -0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71338 add 1E34 -0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71339 add 1E34 -0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded - -dqadd71340 add 1E34 -5000000.000010001 -> 9999999999999999999999999995000000 Inexact Rounded -dqadd71341 add 1E34 -5000000.000000001 -> 9999999999999999999999999995000000 Inexact Rounded - -dqadd71349 add 9999999999999999999999999999999999 0.4 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71350 add 9999999999999999999999999999999999 0.49 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71351 add 9999999999999999999999999999999999 0.499 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71352 add 9999999999999999999999999999999999 0.4999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71353 add 9999999999999999999999999999999999 0.49999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71354 add 9999999999999999999999999999999999 0.499999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71355 add 9999999999999999999999999999999999 0.4999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71356 add 9999999999999999999999999999999999 0.49999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71357 add 9999999999999999999999999999999999 0.499999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71358 add 9999999999999999999999999999999999 0.4999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71359 add 9999999999999999999999999999999999 0.49999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71360 add 9999999999999999999999999999999999 0.499999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71361 add 9999999999999999999999999999999999 0.4999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71362 add 9999999999999999999999999999999999 0.49999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71363 add 9999999999999999999999999999999999 0.499999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71364 add 9999999999999999999999999999999999 0.4999999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71365 add 9999999999999999999999999999999999 0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71367 add 9999999999999999999999999999999999 0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71368 add 9999999999999999999999999999999999 0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71369 add 9999999999999999999999999999999999 0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71370 add 9999999999999999999999999999999999 0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71371 add 9999999999999999999999999999999999 0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71372 add 9999999999999999999999999999999999 0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71373 add 9999999999999999999999999999999999 0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71374 add 9999999999999999999999999999999999 0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71375 add 9999999999999999999999999999999999 0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71376 add 9999999999999999999999999999999999 0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71377 add 9999999999999999999999999999999999 0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71378 add 9999999999999999999999999999999999 0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71379 add 9999999999999999999999999999999999 0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71380 add 9999999999999999999999999999999999 0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71381 add 9999999999999999999999999999999999 0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71382 add 9999999999999999999999999999999999 0.5000000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71383 add 9999999999999999999999999999999999 0.500000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71384 add 9999999999999999999999999999999999 0.50000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71385 add 9999999999999999999999999999999999 0.5000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71386 add 9999999999999999999999999999999999 0.500000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71387 add 9999999999999999999999999999999999 0.50000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71388 add 9999999999999999999999999999999999 0.5000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71389 add 9999999999999999999999999999999999 0.500000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71390 add 9999999999999999999999999999999999 0.50000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71391 add 9999999999999999999999999999999999 0.5000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71392 add 9999999999999999999999999999999999 0.500001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71393 add 9999999999999999999999999999999999 0.50001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71394 add 9999999999999999999999999999999999 0.5001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71395 add 9999999999999999999999999999999999 0.501 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71396 add 9999999999999999999999999999999999 0.51 -> 1.000000000000000000000000000000000E+34 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -dqadd71420 add 0 1.123456789987654321123456789012345 -> 1.123456789987654321123456789012345 -dqadd71421 add 0 1.123456789987654321123456789012345E-1 -> 0.1123456789987654321123456789012345 -dqadd71422 add 0 1.123456789987654321123456789012345E-2 -> 0.01123456789987654321123456789012345 -dqadd71423 add 0 1.123456789987654321123456789012345E-3 -> 0.001123456789987654321123456789012345 -dqadd71424 add 0 1.123456789987654321123456789012345E-4 -> 0.0001123456789987654321123456789012345 -dqadd71425 add 0 1.123456789987654321123456789012345E-5 -> 0.00001123456789987654321123456789012345 -dqadd71426 add 0 1.123456789987654321123456789012345E-6 -> 0.000001123456789987654321123456789012345 -dqadd71427 add 0 1.123456789987654321123456789012345E-7 -> 1.123456789987654321123456789012345E-7 -dqadd71428 add 0 1.123456789987654321123456789012345E-8 -> 1.123456789987654321123456789012345E-8 -dqadd71429 add 0 1.123456789987654321123456789012345E-9 -> 1.123456789987654321123456789012345E-9 -dqadd71430 add 0 1.123456789987654321123456789012345E-10 -> 1.123456789987654321123456789012345E-10 -dqadd71431 add 0 1.123456789987654321123456789012345E-11 -> 1.123456789987654321123456789012345E-11 -dqadd71432 add 0 1.123456789987654321123456789012345E-12 -> 1.123456789987654321123456789012345E-12 -dqadd71433 add 0 1.123456789987654321123456789012345E-13 -> 1.123456789987654321123456789012345E-13 -dqadd71434 add 0 1.123456789987654321123456789012345E-14 -> 1.123456789987654321123456789012345E-14 -dqadd71435 add 0 1.123456789987654321123456789012345E-15 -> 1.123456789987654321123456789012345E-15 -dqadd71436 add 0 1.123456789987654321123456789012345E-16 -> 1.123456789987654321123456789012345E-16 -dqadd71437 add 0 1.123456789987654321123456789012345E-17 -> 1.123456789987654321123456789012345E-17 -dqadd71438 add 0 1.123456789987654321123456789012345E-18 -> 1.123456789987654321123456789012345E-18 -dqadd71439 add 0 1.123456789987654321123456789012345E-19 -> 1.123456789987654321123456789012345E-19 -dqadd71440 add 0 1.123456789987654321123456789012345E-20 -> 1.123456789987654321123456789012345E-20 -dqadd71441 add 0 1.123456789987654321123456789012345E-21 -> 1.123456789987654321123456789012345E-21 -dqadd71442 add 0 1.123456789987654321123456789012345E-22 -> 1.123456789987654321123456789012345E-22 -dqadd71443 add 0 1.123456789987654321123456789012345E-23 -> 1.123456789987654321123456789012345E-23 -dqadd71444 add 0 1.123456789987654321123456789012345E-24 -> 1.123456789987654321123456789012345E-24 -dqadd71445 add 0 1.123456789987654321123456789012345E-25 -> 1.123456789987654321123456789012345E-25 -dqadd71446 add 0 1.123456789987654321123456789012345E-26 -> 1.123456789987654321123456789012345E-26 -dqadd71447 add 0 1.123456789987654321123456789012345E-27 -> 1.123456789987654321123456789012345E-27 -dqadd71448 add 0 1.123456789987654321123456789012345E-28 -> 1.123456789987654321123456789012345E-28 -dqadd71449 add 0 1.123456789987654321123456789012345E-29 -> 1.123456789987654321123456789012345E-29 -dqadd71450 add 0 1.123456789987654321123456789012345E-30 -> 1.123456789987654321123456789012345E-30 -dqadd71451 add 0 1.123456789987654321123456789012345E-31 -> 1.123456789987654321123456789012345E-31 -dqadd71452 add 0 1.123456789987654321123456789012345E-32 -> 1.123456789987654321123456789012345E-32 -dqadd71453 add 0 1.123456789987654321123456789012345E-33 -> 1.123456789987654321123456789012345E-33 -dqadd71454 add 0 1.123456789987654321123456789012345E-34 -> 1.123456789987654321123456789012345E-34 -dqadd71455 add 0 1.123456789987654321123456789012345E-35 -> 1.123456789987654321123456789012345E-35 -dqadd71456 add 0 1.123456789987654321123456789012345E-36 -> 1.123456789987654321123456789012345E-36 - --- same, reversed 0 -dqadd71460 add 1.123456789987654321123456789012345 0 -> 1.123456789987654321123456789012345 -dqadd71461 add 1.123456789987654321123456789012345E-1 0 -> 0.1123456789987654321123456789012345 -dqadd71462 add 1.123456789987654321123456789012345E-2 0 -> 0.01123456789987654321123456789012345 -dqadd71463 add 1.123456789987654321123456789012345E-3 0 -> 0.001123456789987654321123456789012345 -dqadd71464 add 1.123456789987654321123456789012345E-4 0 -> 0.0001123456789987654321123456789012345 -dqadd71465 add 1.123456789987654321123456789012345E-5 0 -> 0.00001123456789987654321123456789012345 -dqadd71466 add 1.123456789987654321123456789012345E-6 0 -> 0.000001123456789987654321123456789012345 -dqadd71467 add 1.123456789987654321123456789012345E-7 0 -> 1.123456789987654321123456789012345E-7 -dqadd71468 add 1.123456789987654321123456789012345E-8 0 -> 1.123456789987654321123456789012345E-8 -dqadd71469 add 1.123456789987654321123456789012345E-9 0 -> 1.123456789987654321123456789012345E-9 -dqadd71470 add 1.123456789987654321123456789012345E-10 0 -> 1.123456789987654321123456789012345E-10 -dqadd71471 add 1.123456789987654321123456789012345E-11 0 -> 1.123456789987654321123456789012345E-11 -dqadd71472 add 1.123456789987654321123456789012345E-12 0 -> 1.123456789987654321123456789012345E-12 -dqadd71473 add 1.123456789987654321123456789012345E-13 0 -> 1.123456789987654321123456789012345E-13 -dqadd71474 add 1.123456789987654321123456789012345E-14 0 -> 1.123456789987654321123456789012345E-14 -dqadd71475 add 1.123456789987654321123456789012345E-15 0 -> 1.123456789987654321123456789012345E-15 -dqadd71476 add 1.123456789987654321123456789012345E-16 0 -> 1.123456789987654321123456789012345E-16 -dqadd71477 add 1.123456789987654321123456789012345E-17 0 -> 1.123456789987654321123456789012345E-17 -dqadd71478 add 1.123456789987654321123456789012345E-18 0 -> 1.123456789987654321123456789012345E-18 -dqadd71479 add 1.123456789987654321123456789012345E-19 0 -> 1.123456789987654321123456789012345E-19 -dqadd71480 add 1.123456789987654321123456789012345E-20 0 -> 1.123456789987654321123456789012345E-20 -dqadd71481 add 1.123456789987654321123456789012345E-21 0 -> 1.123456789987654321123456789012345E-21 -dqadd71482 add 1.123456789987654321123456789012345E-22 0 -> 1.123456789987654321123456789012345E-22 -dqadd71483 add 1.123456789987654321123456789012345E-23 0 -> 1.123456789987654321123456789012345E-23 -dqadd71484 add 1.123456789987654321123456789012345E-24 0 -> 1.123456789987654321123456789012345E-24 -dqadd71485 add 1.123456789987654321123456789012345E-25 0 -> 1.123456789987654321123456789012345E-25 -dqadd71486 add 1.123456789987654321123456789012345E-26 0 -> 1.123456789987654321123456789012345E-26 -dqadd71487 add 1.123456789987654321123456789012345E-27 0 -> 1.123456789987654321123456789012345E-27 -dqadd71488 add 1.123456789987654321123456789012345E-28 0 -> 1.123456789987654321123456789012345E-28 -dqadd71489 add 1.123456789987654321123456789012345E-29 0 -> 1.123456789987654321123456789012345E-29 -dqadd71490 add 1.123456789987654321123456789012345E-30 0 -> 1.123456789987654321123456789012345E-30 -dqadd71491 add 1.123456789987654321123456789012345E-31 0 -> 1.123456789987654321123456789012345E-31 -dqadd71492 add 1.123456789987654321123456789012345E-32 0 -> 1.123456789987654321123456789012345E-32 -dqadd71493 add 1.123456789987654321123456789012345E-33 0 -> 1.123456789987654321123456789012345E-33 -dqadd71494 add 1.123456789987654321123456789012345E-34 0 -> 1.123456789987654321123456789012345E-34 -dqadd71495 add 1.123456789987654321123456789012345E-35 0 -> 1.123456789987654321123456789012345E-35 -dqadd71496 add 1.123456789987654321123456789012345E-36 0 -> 1.123456789987654321123456789012345E-36 - --- same, Es on the 0 -dqadd71500 add 1.123456789987654321123456789012345 0E-0 -> 1.123456789987654321123456789012345 -dqadd71501 add 1.123456789987654321123456789012345 0E-1 -> 1.123456789987654321123456789012345 -dqadd71502 add 1.123456789987654321123456789012345 0E-2 -> 1.123456789987654321123456789012345 -dqadd71503 add 1.123456789987654321123456789012345 0E-3 -> 1.123456789987654321123456789012345 -dqadd71504 add 1.123456789987654321123456789012345 0E-4 -> 1.123456789987654321123456789012345 -dqadd71505 add 1.123456789987654321123456789012345 0E-5 -> 1.123456789987654321123456789012345 -dqadd71506 add 1.123456789987654321123456789012345 0E-6 -> 1.123456789987654321123456789012345 -dqadd71507 add 1.123456789987654321123456789012345 0E-7 -> 1.123456789987654321123456789012345 -dqadd71508 add 1.123456789987654321123456789012345 0E-8 -> 1.123456789987654321123456789012345 -dqadd71509 add 1.123456789987654321123456789012345 0E-9 -> 1.123456789987654321123456789012345 -dqadd71510 add 1.123456789987654321123456789012345 0E-10 -> 1.123456789987654321123456789012345 -dqadd71511 add 1.123456789987654321123456789012345 0E-11 -> 1.123456789987654321123456789012345 -dqadd71512 add 1.123456789987654321123456789012345 0E-12 -> 1.123456789987654321123456789012345 -dqadd71513 add 1.123456789987654321123456789012345 0E-13 -> 1.123456789987654321123456789012345 -dqadd71514 add 1.123456789987654321123456789012345 0E-14 -> 1.123456789987654321123456789012345 -dqadd71515 add 1.123456789987654321123456789012345 0E-15 -> 1.123456789987654321123456789012345 -dqadd71516 add 1.123456789987654321123456789012345 0E-16 -> 1.123456789987654321123456789012345 -dqadd71517 add 1.123456789987654321123456789012345 0E-17 -> 1.123456789987654321123456789012345 -dqadd71518 add 1.123456789987654321123456789012345 0E-18 -> 1.123456789987654321123456789012345 -dqadd71519 add 1.123456789987654321123456789012345 0E-19 -> 1.123456789987654321123456789012345 -dqadd71520 add 1.123456789987654321123456789012345 0E-20 -> 1.123456789987654321123456789012345 -dqadd71521 add 1.123456789987654321123456789012345 0E-21 -> 1.123456789987654321123456789012345 -dqadd71522 add 1.123456789987654321123456789012345 0E-22 -> 1.123456789987654321123456789012345 -dqadd71523 add 1.123456789987654321123456789012345 0E-23 -> 1.123456789987654321123456789012345 -dqadd71524 add 1.123456789987654321123456789012345 0E-24 -> 1.123456789987654321123456789012345 -dqadd71525 add 1.123456789987654321123456789012345 0E-25 -> 1.123456789987654321123456789012345 -dqadd71526 add 1.123456789987654321123456789012345 0E-26 -> 1.123456789987654321123456789012345 -dqadd71527 add 1.123456789987654321123456789012345 0E-27 -> 1.123456789987654321123456789012345 -dqadd71528 add 1.123456789987654321123456789012345 0E-28 -> 1.123456789987654321123456789012345 -dqadd71529 add 1.123456789987654321123456789012345 0E-29 -> 1.123456789987654321123456789012345 -dqadd71530 add 1.123456789987654321123456789012345 0E-30 -> 1.123456789987654321123456789012345 -dqadd71531 add 1.123456789987654321123456789012345 0E-31 -> 1.123456789987654321123456789012345 -dqadd71532 add 1.123456789987654321123456789012345 0E-32 -> 1.123456789987654321123456789012345 -dqadd71533 add 1.123456789987654321123456789012345 0E-33 -> 1.123456789987654321123456789012345 --- next four flag Rounded because the 0 extends the result -dqadd71534 add 1.123456789987654321123456789012345 0E-34 -> 1.123456789987654321123456789012345 Rounded -dqadd71535 add 1.123456789987654321123456789012345 0E-35 -> 1.123456789987654321123456789012345 Rounded -dqadd71536 add 1.123456789987654321123456789012345 0E-36 -> 1.123456789987654321123456789012345 Rounded -dqadd71537 add 1.123456789987654321123456789012345 0E-37 -> 1.123456789987654321123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -dqadd71600 add 0 0E-19 -> 0E-19 -dqadd71601 add -0 0E-19 -> 0E-19 -dqadd71602 add 0 -0E-19 -> 0E-19 -dqadd71603 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71611 add -11 11 -> 0 -dqadd71612 add 11 -11 -> 0 - -rounding: half_down --- exact zeros from zeros -dqadd71620 add 0 0E-19 -> 0E-19 -dqadd71621 add -0 0E-19 -> 0E-19 -dqadd71622 add 0 -0E-19 -> 0E-19 -dqadd71623 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71631 add -11 11 -> 0 -dqadd71632 add 11 -11 -> 0 - -rounding: half_even --- exact zeros from zeros -dqadd71640 add 0 0E-19 -> 0E-19 -dqadd71641 add -0 0E-19 -> 0E-19 -dqadd71642 add 0 -0E-19 -> 0E-19 -dqadd71643 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71651 add -11 11 -> 0 -dqadd71652 add 11 -11 -> 0 - -rounding: up --- exact zeros from zeros -dqadd71660 add 0 0E-19 -> 0E-19 -dqadd71661 add -0 0E-19 -> 0E-19 -dqadd71662 add 0 -0E-19 -> 0E-19 -dqadd71663 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71671 add -11 11 -> 0 -dqadd71672 add 11 -11 -> 0 - -rounding: down --- exact zeros from zeros -dqadd71680 add 0 0E-19 -> 0E-19 -dqadd71681 add -0 0E-19 -> 0E-19 -dqadd71682 add 0 -0E-19 -> 0E-19 -dqadd71683 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71691 add -11 11 -> 0 -dqadd71692 add 11 -11 -> 0 - -rounding: ceiling --- exact zeros from zeros -dqadd71700 add 0 0E-19 -> 0E-19 -dqadd71701 add -0 0E-19 -> 0E-19 -dqadd71702 add 0 -0E-19 -> 0E-19 -dqadd71703 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71711 add -11 11 -> 0 -dqadd71712 add 11 -11 -> 0 - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -dqadd71720 add 0 0E-19 -> 0E-19 -dqadd71721 add -0 0E-19 -> -0E-19 -- * -dqadd71722 add 0 -0E-19 -> -0E-19 -- * -dqadd71723 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71731 add -11 11 -> -0 -- * -dqadd71732 add 11 -11 -> -0 -- * - --- Examples from SQL proposal (Krishna Kulkarni) -dqadd71741 add 130E-2 120E-2 -> 2.50 -dqadd71742 add 130E-2 12E-1 -> 2.50 -dqadd71743 add 130E-2 1E0 -> 2.30 -dqadd71744 add 1E2 1E4 -> 1.01E+4 -dqadd71745 add 130E-2 -120E-2 -> 0.10 -dqadd71746 add 130E-2 -12E-1 -> 0.10 -dqadd71747 add 130E-2 -1E0 -> 0.30 -dqadd71748 add 1E2 -1E4 -> -9.9E+3 - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -dqadd75001 add 1239876543211234567894567890123456 1 -> 1239876543211234567894567890123457 -dqadd75002 add 1239876543211234567894567890123456 0.6 -> 1239876543211234567894567890123457 Inexact Rounded -dqadd75003 add 1239876543211234567894567890123456 0.06 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75004 add 1239876543211234567894567890123456 6E-3 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75005 add 1239876543211234567894567890123456 6E-4 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75006 add 1239876543211234567894567890123456 6E-5 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75007 add 1239876543211234567894567890123456 6E-6 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75008 add 1239876543211234567894567890123456 6E-7 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75009 add 1239876543211234567894567890123456 6E-8 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75010 add 1239876543211234567894567890123456 6E-9 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75011 add 1239876543211234567894567890123456 6E-10 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75012 add 1239876543211234567894567890123456 6E-11 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75013 add 1239876543211234567894567890123456 6E-12 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75014 add 1239876543211234567894567890123456 6E-13 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75015 add 1239876543211234567894567890123456 6E-14 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75016 add 1239876543211234567894567890123456 6E-15 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75017 add 1239876543211234567894567890123456 6E-16 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75018 add 1239876543211234567894567890123456 6E-17 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75019 add 1239876543211234567894567890123456 6E-18 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75020 add 1239876543211234567894567890123456 6E-19 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75021 add 1239876543211234567894567890123456 6E-20 -> 1239876543211234567894567890123456 Inexact Rounded - --- widening second argument at gap -dqadd75030 add 12398765432112345678945678 1 -> 12398765432112345678945679 -dqadd75031 add 12398765432112345678945678 0.1 -> 12398765432112345678945678.1 -dqadd75032 add 12398765432112345678945678 0.12 -> 12398765432112345678945678.12 -dqadd75033 add 12398765432112345678945678 0.123 -> 12398765432112345678945678.123 -dqadd75034 add 12398765432112345678945678 0.1234 -> 12398765432112345678945678.1234 -dqadd75035 add 12398765432112345678945678 0.12345 -> 12398765432112345678945678.12345 -dqadd75036 add 12398765432112345678945678 0.123456 -> 12398765432112345678945678.123456 -dqadd75037 add 12398765432112345678945678 0.1234567 -> 12398765432112345678945678.1234567 -dqadd75038 add 12398765432112345678945678 0.12345678 -> 12398765432112345678945678.12345678 -dqadd75039 add 12398765432112345678945678 0.123456789 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75040 add 12398765432112345678945678 0.123456785 -> 12398765432112345678945678.12345678 Inexact Rounded -dqadd75041 add 12398765432112345678945678 0.1234567850 -> 12398765432112345678945678.12345678 Inexact Rounded -dqadd75042 add 12398765432112345678945678 0.1234567851 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75043 add 12398765432112345678945678 0.12345678501 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75044 add 12398765432112345678945678 0.123456785001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75045 add 12398765432112345678945678 0.1234567850001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75046 add 12398765432112345678945678 0.12345678500001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75047 add 12398765432112345678945678 0.123456785000001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75048 add 12398765432112345678945678 0.1234567850000001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75049 add 12398765432112345678945678 0.1234567850000000 -> 12398765432112345678945678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -dqadd75050 add 12398765432112345678945678 0.0234567750000000 -> 12398765432112345678945678.02345678 Inexact Rounded -dqadd75051 add 12398765432112345678945678 0.0034567750000000 -> 12398765432112345678945678.00345678 Inexact Rounded -dqadd75052 add 12398765432112345678945678 0.0004567750000000 -> 12398765432112345678945678.00045678 Inexact Rounded -dqadd75053 add 12398765432112345678945678 0.0000567750000000 -> 12398765432112345678945678.00005678 Inexact Rounded -dqadd75054 add 12398765432112345678945678 0.0000067750000000 -> 12398765432112345678945678.00000678 Inexact Rounded -dqadd75055 add 12398765432112345678945678 0.0000007750000000 -> 12398765432112345678945678.00000078 Inexact Rounded -dqadd75056 add 12398765432112345678945678 0.0000000750000000 -> 12398765432112345678945678.00000008 Inexact Rounded -dqadd75057 add 12398765432112345678945678 0.0000000050000000 -> 12398765432112345678945678.00000000 Inexact Rounded -dqadd75060 add 12398765432112345678945678 0.0234567750000001 -> 12398765432112345678945678.02345678 Inexact Rounded -dqadd75061 add 12398765432112345678945678 0.0034567750000001 -> 12398765432112345678945678.00345678 Inexact Rounded -dqadd75062 add 12398765432112345678945678 0.0004567750000001 -> 12398765432112345678945678.00045678 Inexact Rounded -dqadd75063 add 12398765432112345678945678 0.0000567750000001 -> 12398765432112345678945678.00005678 Inexact Rounded -dqadd75064 add 12398765432112345678945678 0.0000067750000001 -> 12398765432112345678945678.00000678 Inexact Rounded -dqadd75065 add 12398765432112345678945678 0.0000007750000001 -> 12398765432112345678945678.00000078 Inexact Rounded -dqadd75066 add 12398765432112345678945678 0.0000000750000001 -> 12398765432112345678945678.00000008 Inexact Rounded -dqadd75067 add 12398765432112345678945678 0.0000000050000001 -> 12398765432112345678945678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -dqadd75070 add 12398765432112345678945678 1E-8 -> 12398765432112345678945678.00000001 -dqadd75071 add 12398765432112345678945678 1E-9 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75072 add 12398765432112345678945678 1E-10 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75073 add 12398765432112345678945678 1E-11 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75074 add 12398765432112345678945678 1E-12 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75075 add 12398765432112345678945678 1E-13 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75076 add 12398765432112345678945678 1E-14 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75077 add 12398765432112345678945678 1E-15 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75078 add 12398765432112345678945678 1E-16 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75079 add 12398765432112345678945678 1E-17 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75080 add 12398765432112345678945678 1E-18 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75081 add 12398765432112345678945678 1E-19 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75082 add 12398765432112345678945678 1E-20 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75083 add 12398765432112345678945678 1E-25 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75084 add 12398765432112345678945678 1E-30 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75085 add 12398765432112345678945678 1E-31 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75086 add 12398765432112345678945678 1E-32 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75087 add 12398765432112345678945678 1E-33 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75088 add 12398765432112345678945678 1E-34 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75089 add 12398765432112345678945678 1E-35 -> 12398765432112345678945678.00000001 Inexact Rounded - --- Null tests -dqadd9990 add 10 # -> NaN Invalid_operation -dqadd9991 add # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqAdd.decTest -- decQuad addition -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decQuads only; all arguments are +-- representable in a decQuad +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- [first group are 'quick confidence check'] +dqadd001 add 1 1 -> 2 +dqadd002 add 2 3 -> 5 +dqadd003 add '5.75' '3.3' -> 9.05 +dqadd004 add '5' '-3' -> 2 +dqadd005 add '-5' '-3' -> -8 +dqadd006 add '-7' '2.5' -> -4.5 +dqadd007 add '0.7' '0.3' -> 1.0 +dqadd008 add '1.25' '1.25' -> 2.50 +dqadd009 add '1.23456789' '1.00000000' -> '2.23456789' +dqadd010 add '1.23456789' '1.00000011' -> '2.23456800' + +-- 1234567890123456 1234567890123456 +dqadd011 add '0.4444444444444444444444444444444446' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Inexact Rounded +dqadd012 add '0.4444444444444444444444444444444445' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Rounded +dqadd013 add '0.4444444444444444444444444444444444' '0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' +dqadd014 add '4444444444444444444444444444444444' '0.49' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd015 add '4444444444444444444444444444444444' '0.499' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd016 add '4444444444444444444444444444444444' '0.4999' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd017 add '4444444444444444444444444444444444' '0.5000' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd018 add '4444444444444444444444444444444444' '0.5001' -> '4444444444444444444444444444444445' Inexact Rounded +dqadd019 add '4444444444444444444444444444444444' '0.501' -> '4444444444444444444444444444444445' Inexact Rounded +dqadd020 add '4444444444444444444444444444444444' '0.51' -> '4444444444444444444444444444444445' Inexact Rounded + +dqadd021 add 0 1 -> 1 +dqadd022 add 1 1 -> 2 +dqadd023 add 2 1 -> 3 +dqadd024 add 3 1 -> 4 +dqadd025 add 4 1 -> 5 +dqadd026 add 5 1 -> 6 +dqadd027 add 6 1 -> 7 +dqadd028 add 7 1 -> 8 +dqadd029 add 8 1 -> 9 +dqadd030 add 9 1 -> 10 + +-- some carrying effects +dqadd031 add '0.9998' '0.0000' -> '0.9998' +dqadd032 add '0.9998' '0.0001' -> '0.9999' +dqadd033 add '0.9998' '0.0002' -> '1.0000' +dqadd034 add '0.9998' '0.0003' -> '1.0001' + +dqadd035 add '70' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd036 add '700' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd037 add '7000' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd038 add '70000' '10000e+34' -> '1.000000000000000000000000000000001E+38' Inexact Rounded +dqadd039 add '700000' '10000e+34' -> '1.000000000000000000000000000000007E+38' Rounded + +-- symmetry: +dqadd040 add '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd041 add '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd042 add '10000e+34' '7000' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd044 add '10000e+34' '70000' -> '1.000000000000000000000000000000001E+38' Inexact Rounded +dqadd045 add '10000e+34' '700000' -> '1.000000000000000000000000000000007E+38' Rounded + +-- same, without rounding +dqadd046 add '10000e+9' '7' -> '10000000000007' +dqadd047 add '10000e+9' '70' -> '10000000000070' +dqadd048 add '10000e+9' '700' -> '10000000000700' +dqadd049 add '10000e+9' '7000' -> '10000000007000' +dqadd050 add '10000e+9' '70000' -> '10000000070000' +dqadd051 add '10000e+9' '700000' -> '10000000700000' +dqadd052 add '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +dqadd053 add '12' '7.00' -> '19.00' +dqadd054 add '1.3' '-1.07' -> '0.23' +dqadd055 add '1.3' '-1.30' -> '0.00' +dqadd056 add '1.3' '-2.07' -> '-0.77' +dqadd057 add '1E+2' '1E+4' -> '1.01E+4' + +-- leading zero preservation +dqadd061 add 1 '0.0001' -> '1.0001' +dqadd062 add 1 '0.00001' -> '1.00001' +dqadd063 add 1 '0.000001' -> '1.000001' +dqadd064 add 1 '0.0000001' -> '1.0000001' +dqadd065 add 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +dqadd070 add 1 0 -> 1 +dqadd071 add 1 0. -> 1 +dqadd072 add 1 .0 -> 1.0 +dqadd073 add 1 0.0 -> 1.0 +dqadd074 add 1 0.00 -> 1.00 +dqadd075 add 0 1 -> 1 +dqadd076 add 0. 1 -> 1 +dqadd077 add .0 1 -> 1.0 +dqadd078 add 0.0 1 -> 1.0 +dqadd079 add 0.00 1 -> 1.00 + +-- some carries +dqadd080 add 999999998 1 -> 999999999 +dqadd081 add 999999999 1 -> 1000000000 +dqadd082 add 99999999 1 -> 100000000 +dqadd083 add 9999999 1 -> 10000000 +dqadd084 add 999999 1 -> 1000000 +dqadd085 add 99999 1 -> 100000 +dqadd086 add 9999 1 -> 10000 +dqadd087 add 999 1 -> 1000 +dqadd088 add 99 1 -> 100 +dqadd089 add 9 1 -> 10 + + +-- more LHS swaps +dqadd090 add '-56267E-10' 0 -> '-0.0000056267' +dqadd091 add '-56267E-6' 0 -> '-0.056267' +dqadd092 add '-56267E-5' 0 -> '-0.56267' +dqadd093 add '-56267E-4' 0 -> '-5.6267' +dqadd094 add '-56267E-3' 0 -> '-56.267' +dqadd095 add '-56267E-2' 0 -> '-562.67' +dqadd096 add '-56267E-1' 0 -> '-5626.7' +dqadd097 add '-56267E-0' 0 -> '-56267' +dqadd098 add '-5E-10' 0 -> '-5E-10' +dqadd099 add '-5E-7' 0 -> '-5E-7' +dqadd100 add '-5E-6' 0 -> '-0.000005' +dqadd101 add '-5E-5' 0 -> '-0.00005' +dqadd102 add '-5E-4' 0 -> '-0.0005' +dqadd103 add '-5E-1' 0 -> '-0.5' +dqadd104 add '-5E0' 0 -> '-5' +dqadd105 add '-5E1' 0 -> '-50' +dqadd106 add '-5E5' 0 -> '-500000' +dqadd107 add '-5E33' 0 -> '-5000000000000000000000000000000000' +dqadd108 add '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded +dqadd109 add '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded +dqadd110 add '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded +dqadd111 add '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded + +-- more RHS swaps +dqadd113 add 0 '-56267E-10' -> '-0.0000056267' +dqadd114 add 0 '-56267E-6' -> '-0.056267' +dqadd116 add 0 '-56267E-5' -> '-0.56267' +dqadd117 add 0 '-56267E-4' -> '-5.6267' +dqadd119 add 0 '-56267E-3' -> '-56.267' +dqadd120 add 0 '-56267E-2' -> '-562.67' +dqadd121 add 0 '-56267E-1' -> '-5626.7' +dqadd122 add 0 '-56267E-0' -> '-56267' +dqadd123 add 0 '-5E-10' -> '-5E-10' +dqadd124 add 0 '-5E-7' -> '-5E-7' +dqadd125 add 0 '-5E-6' -> '-0.000005' +dqadd126 add 0 '-5E-5' -> '-0.00005' +dqadd127 add 0 '-5E-4' -> '-0.0005' +dqadd128 add 0 '-5E-1' -> '-0.5' +dqadd129 add 0 '-5E0' -> '-5' +dqadd130 add 0 '-5E1' -> '-50' +dqadd131 add 0 '-5E5' -> '-500000' +dqadd132 add 0 '-5E33' -> '-5000000000000000000000000000000000' +dqadd133 add 0 '-5E34' -> '-5.000000000000000000000000000000000E+34' Rounded +dqadd134 add 0 '-5E35' -> '-5.000000000000000000000000000000000E+35' Rounded +dqadd135 add 0 '-5E36' -> '-5.000000000000000000000000000000000E+36' Rounded +dqadd136 add 0 '-5E100' -> '-5.000000000000000000000000000000000E+100' Rounded + +-- related +dqadd137 add 1 '0E-39' -> '1.000000000000000000000000000000000' Rounded +dqadd138 add -1 '0E-39' -> '-1.000000000000000000000000000000000' Rounded +dqadd139 add '0E-39' 1 -> '1.000000000000000000000000000000000' Rounded +dqadd140 add '0E-39' -1 -> '-1.000000000000000000000000000000000' Rounded +dqadd141 add 1E+29 0.0000 -> '100000000000000000000000000000.0000' +dqadd142 add 1E+29 0.00000 -> '100000000000000000000000000000.0000' Rounded +dqadd143 add 0.000 1E+30 -> '1000000000000000000000000000000.000' +dqadd144 add 0.0000 1E+30 -> '1000000000000000000000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +dqadd146 add '00.0' 0 -> '0.0' +dqadd147 add '0.00' 0 -> '0.00' +dqadd148 add 0 '0.00' -> '0.00' +dqadd149 add 0 '00.0' -> '0.0' +dqadd150 add '00.0' '0.00' -> '0.00' +dqadd151 add '0.00' '00.0' -> '0.00' +dqadd152 add '3' '.3' -> '3.3' +dqadd153 add '3.' '.3' -> '3.3' +dqadd154 add '3.0' '.3' -> '3.3' +dqadd155 add '3.00' '.3' -> '3.30' +dqadd156 add '3' '3' -> '6' +dqadd157 add '3' '+3' -> '6' +dqadd158 add '3' '-3' -> '0' +dqadd159 add '0.3' '-0.3' -> '0.0' +dqadd160 add '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +dqadd161 add '1E+12' '-1' -> '999999999999' +dqadd162 add '1E+12' '1.11' -> '1000000000001.11' +dqadd163 add '1.11' '1E+12' -> '1000000000001.11' +dqadd164 add '-1' '1E+12' -> '999999999999' +dqadd165 add '7E+12' '-1' -> '6999999999999' +dqadd166 add '7E+12' '1.11' -> '7000000000001.11' +dqadd167 add '1.11' '7E+12' -> '7000000000001.11' +dqadd168 add '-1' '7E+12' -> '6999999999999' + +rounding: half_up +dqadd170 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555567' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd171 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555566' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd172 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555565' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd173 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555564' -> '5.000000000000000000000000000000000' Inexact Rounded +dqadd174 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555553' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd175 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555552' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd176 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555551' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd177 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555550' -> '4.999999999999999999999999999999999' Rounded +dqadd178 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555545' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd179 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555544' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd180 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555543' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd181 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555542' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd182 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555541' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd183 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555540' -> '4.999999999999999999999999999999998' Rounded + +-- and some more, including residue effects and different roundings +rounding: half_up +dqadd200 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd201 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd202 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd203 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd204 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd205 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd206 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd207 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd208 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd209 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd210 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd211 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd212 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd213 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd214 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd215 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd216 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd217 add '1231234567890123456784560123456789' 1.000000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd218 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd219 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded + +rounding: half_even +dqadd220 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd221 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd222 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd223 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd224 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd225 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd226 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd227 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd228 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd229 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd230 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd231 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd232 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd233 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd234 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd235 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd236 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd237 add '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd238 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd239 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded +-- critical few with even bottom digit... +dqadd240 add '1231234567890123456784560123456788' 0.499999999 -> '1231234567890123456784560123456788' Inexact Rounded +dqadd241 add '1231234567890123456784560123456788' 0.5 -> '1231234567890123456784560123456788' Inexact Rounded +dqadd242 add '1231234567890123456784560123456788' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded + +rounding: down +dqadd250 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd251 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd252 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd253 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd254 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd255 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd256 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd257 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd258 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd259 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd260 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd261 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd262 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd263 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd264 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd265 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd266 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd267 add '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd268 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd269 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +dqadd301 add -1 1 -> 0 +dqadd302 add 0 1 -> 1 +dqadd303 add 1 1 -> 2 +dqadd304 add 12 1 -> 13 +dqadd305 add 98 1 -> 99 +dqadd306 add 99 1 -> 100 +dqadd307 add 100 1 -> 101 +dqadd308 add 101 1 -> 102 +dqadd309 add -1 -1 -> -2 +dqadd310 add 0 -1 -> -1 +dqadd311 add 1 -1 -> 0 +dqadd312 add 12 -1 -> 11 +dqadd313 add 98 -1 -> 97 +dqadd314 add 99 -1 -> 98 +dqadd315 add 100 -1 -> 99 +dqadd316 add 101 -1 -> 100 + +dqadd321 add -0.01 0.01 -> 0.00 +dqadd322 add 0.00 0.01 -> 0.01 +dqadd323 add 0.01 0.01 -> 0.02 +dqadd324 add 0.12 0.01 -> 0.13 +dqadd325 add 0.98 0.01 -> 0.99 +dqadd326 add 0.99 0.01 -> 1.00 +dqadd327 add 1.00 0.01 -> 1.01 +dqadd328 add 1.01 0.01 -> 1.02 +dqadd329 add -0.01 -0.01 -> -0.02 +dqadd330 add 0.00 -0.01 -> -0.01 +dqadd331 add 0.01 -0.01 -> 0.00 +dqadd332 add 0.12 -0.01 -> 0.11 +dqadd333 add 0.98 -0.01 -> 0.97 +dqadd334 add 0.99 -0.01 -> 0.98 +dqadd335 add 1.00 -0.01 -> 0.99 +dqadd336 add 1.01 -0.01 -> 1.00 + +-- some more cases where adding 0 affects the coefficient +dqadd340 add 1E+3 0 -> 1000 +dqadd341 add 1E+33 0 -> 1000000000000000000000000000000000 +dqadd342 add 1E+34 0 -> 1.000000000000000000000000000000000E+34 Rounded +dqadd343 add 1E+35 0 -> 1.000000000000000000000000000000000E+35 Rounded +-- which simply follow from these cases ... +dqadd344 add 1E+3 1 -> 1001 +dqadd345 add 1E+33 1 -> 1000000000000000000000000000000001 +dqadd346 add 1E+34 1 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd347 add 1E+35 1 -> 1.000000000000000000000000000000000E+35 Inexact Rounded +dqadd348 add 1E+3 7 -> 1007 +dqadd349 add 1E+33 7 -> 1000000000000000000000000000000007 +dqadd350 add 1E+34 7 -> 1.000000000000000000000000000000001E+34 Inexact Rounded +dqadd351 add 1E+35 7 -> 1.000000000000000000000000000000000E+35 Inexact Rounded + +-- tryzeros cases +rounding: half_up +dqadd360 add 0E+50 10000E+1 -> 1.0000E+5 +dqadd361 add 0E-50 10000E+1 -> 100000.0000000000000000000000000000 Rounded +dqadd362 add 10000E+1 0E-50 -> 100000.0000000000000000000000000000 Rounded +dqadd363 add 10000E+1 10000E-50 -> 100000.0000000000000000000000000000 Rounded Inexact +dqadd364 add 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0E+6111 +-- 1 234567890123456789012345678901234 + +-- a curiosity from JSR 13 testing +rounding: half_down +dqadd370 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd371 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact +rounding: half_up +dqadd372 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd373 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact +rounding: half_even +dqadd374 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd375 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact + +-- ulp replacement tests +dqadd400 add 1 77e-32 -> 1.00000000000000000000000000000077 +dqadd401 add 1 77e-33 -> 1.000000000000000000000000000000077 +dqadd402 add 1 77e-34 -> 1.000000000000000000000000000000008 Inexact Rounded +dqadd403 add 1 77e-35 -> 1.000000000000000000000000000000001 Inexact Rounded +dqadd404 add 1 77e-36 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd405 add 1 77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd406 add 1 77e-299 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd410 add 10 77e-32 -> 10.00000000000000000000000000000077 +dqadd411 add 10 77e-33 -> 10.00000000000000000000000000000008 Inexact Rounded +dqadd412 add 10 77e-34 -> 10.00000000000000000000000000000001 Inexact Rounded +dqadd413 add 10 77e-35 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd414 add 10 77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd415 add 10 77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd416 add 10 77e-299 -> 10.00000000000000000000000000000000 Inexact Rounded + +dqadd420 add 77e-32 1 -> 1.00000000000000000000000000000077 +dqadd421 add 77e-33 1 -> 1.000000000000000000000000000000077 +dqadd422 add 77e-34 1 -> 1.000000000000000000000000000000008 Inexact Rounded +dqadd423 add 77e-35 1 -> 1.000000000000000000000000000000001 Inexact Rounded +dqadd424 add 77e-36 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd425 add 77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd426 add 77e-299 1 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd430 add 77e-32 10 -> 10.00000000000000000000000000000077 +dqadd431 add 77e-33 10 -> 10.00000000000000000000000000000008 Inexact Rounded +dqadd432 add 77e-34 10 -> 10.00000000000000000000000000000001 Inexact Rounded +dqadd433 add 77e-35 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd434 add 77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd435 add 77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd436 add 77e-299 10 -> 10.00000000000000000000000000000000 Inexact Rounded + +-- fastpath boundaries +-- 1234567890123456789012345678901234 +dqadd501 add '4444444444444444444444444444444444' '5555555555555555555555555555555555' -> '9999999999999999999999999999999999' +dqadd502 add '4444444444444444444444444444444444' '4555555555555555555555555555555555' -> '8999999999999999999999999999999999' +dqadd503 add '4444444444444444444444444444444444' '3555555555555555555055555555555555' -> '7999999999999999999499999999999999' +dqadd504 add '4444444444444444444444444444444444' '3955555555555555555555555555555555' -> '8399999999999999999999999999999999' +dqadd505 add '4444444444444444444444444444444444' '4955555555555555555555555555555555' -> '9399999999999999999999999999999999' +dqadd506 add '4444444444444444444444444444444444' '5955555555555555555555555555555555' -> 1.040000000000000000000000000000000E+34 Inexact Rounded +dqadd511 add '344444444444444444444444444444444' '555555555555555555555555555555555' -> '899999999999999999999999999999999' +dqadd512 add '34444444444444444444444444444444' '55555555555555555555555555555555' -> '89999999999999999999999999999999' +dqadd513 add '3444444444444444444444444444444' '5555555555555555555555555555555' -> '8999999999999999999999999999999' +dqadd514 add '344444444444444444444444444444' '555555555555555555555555555555' -> '899999999999999999999999999999' +dqadd515 add '34444444444444444444444444444' '55555555555555555555555555555' -> '89999999999999999999999999999' +dqadd516 add '3444444444444444444444444444' '5555555555555555555555555555' -> '8999999999999999999999999999' +dqadd517 add '344444444444444444444444444' '555555555555555555555555555' -> '899999999999999999999999999' +dqadd518 add '34444444444444444444444444' '55555555555555555555555555' -> '89999999999999999999999999' +dqadd519 add '3444444444444444444444444' '5555555555555555555555555' -> '8999999999999999999999999' +dqadd520 add '344444444444444444444444' '555555555555555555555555' -> '899999999999999999999999' +dqadd521 add '34444444444444444444444' '55555555555555555555555' -> '89999999999999999999999' +dqadd522 add '3444444444444444444444' '5555555555555555555555' -> '8999999999999999999999' +dqadd523 add '4444444444444444444444' '3333333333333333333333' -> '7777777777777777777777' +dqadd524 add '344444444444444444444' '555555555555555555555' -> '899999999999999999999' +dqadd525 add '34444444444444444444' '55555555555555555555' -> '89999999999999999999' +dqadd526 add '3444444444444444444' '5555555555555555555' -> '8999999999999999999' +dqadd527 add '344444444444444444' '555555555555555555' -> '899999999999999999' +dqadd528 add '34444444444444444' '55555555555555555' -> '89999999999999999' +dqadd529 add '3444444444444444' '5555555555555555' -> '8999999999999999' +dqadd530 add '344444444444444' '555555555555555' -> '899999999999999' +dqadd531 add '34444444444444' '55555555555555' -> '89999999999999' +dqadd532 add '3444444444444' '5555555555555' -> '8999999999999' +dqadd533 add '344444444444' '555555555555' -> '899999999999' +dqadd534 add '34444444444' '55555555555' -> '89999999999' +dqadd535 add '3444444444' '5555555555' -> '8999999999' +dqadd536 add '344444444' '555555555' -> '899999999' +dqadd537 add '34444444' '55555555' -> '89999999' +dqadd538 add '3444444' '5555555' -> '8999999' +dqadd539 add '344444' '555555' -> '899999' +dqadd540 add '34444' '55555' -> '89999' +dqadd541 add '3444' '5555' -> '8999' +dqadd542 add '344' '555' -> '899' +dqadd543 add '34' '55' -> '89' +dqadd544 add '3' '5' -> '8' + +dqadd545 add '3000004000000000000000000000000000' '3000000000000040000000000000000000' -> '6000004000000040000000000000000000' +dqadd546 add '3000000400000000000000000000000000' '4000000000000400000000000000000000' -> '7000000400000400000000000000000000' +dqadd547 add '3000000040000000000000000000000000' '5000000000004000000000000000000000' -> '8000000040004000000000000000000000' +dqadd548 add '4000000004000000000000000000000000' '3000000000040000000000000000000000' -> '7000000004040000000000000000000000' +dqadd549 add '4000000000400000000000000000000000' '4000000000400000000000000000000000' -> '8000000000800000000000000000000000' +dqadd550 add '4000000000040000000000000000000000' '5000000004000000000000000000000000' -> '9000000004040000000000000000000000' +dqadd551 add '5000000000004000000000000000000000' '3000000040000000000000000000000000' -> '8000000040004000000000000000000000' +dqadd552 add '5000000000000400000000000000000000' '4000000400000000000000000000000000' -> '9000000400000400000000000000000000' +dqadd553 add '5000000000000040000000000000000000' '5000004000000000000000000000000000' -> 1.000000400000004000000000000000000E+34 Rounded +-- check propagation +dqadd554 add '8999999999999999999999999999999999' '0000000000000000000000000000000001' -> 9000000000000000000000000000000000 +dqadd555 add '0000000000000000000000000000000001' '8999999999999999999999999999999999' -> 9000000000000000000000000000000000 +dqadd556 add '4444444444444444444444444444444444' '4555555555555555555555555555555556' -> 9000000000000000000000000000000000 +dqadd557 add '4555555555555555555555555555555556' '4444444444444444444444444444444444' -> 9000000000000000000000000000000000 + +-- negative ulps +dqadd6440 add 1 -77e-32 -> 0.99999999999999999999999999999923 +dqadd6441 add 1 -77e-33 -> 0.999999999999999999999999999999923 +dqadd6442 add 1 -77e-34 -> 0.9999999999999999999999999999999923 +dqadd6443 add 1 -77e-35 -> 0.9999999999999999999999999999999992 Inexact Rounded +dqadd6444 add 1 -77e-36 -> 0.9999999999999999999999999999999999 Inexact Rounded +dqadd6445 add 1 -77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd6446 add 1 -77e-99 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd6450 add 10 -77e-32 -> 9.99999999999999999999999999999923 +dqadd6451 add 10 -77e-33 -> 9.999999999999999999999999999999923 +dqadd6452 add 10 -77e-34 -> 9.999999999999999999999999999999992 Inexact Rounded +dqadd6453 add 10 -77e-35 -> 9.999999999999999999999999999999999 Inexact Rounded +dqadd6454 add 10 -77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd6455 add 10 -77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd6456 add 10 -77e-99 -> 10.00000000000000000000000000000000 Inexact Rounded + +dqadd6460 add -77e-32 1 -> 0.99999999999999999999999999999923 +dqadd6461 add -77e-33 1 -> 0.999999999999999999999999999999923 +dqadd6462 add -77e-34 1 -> 0.9999999999999999999999999999999923 +dqadd6463 add -77e-35 1 -> 0.9999999999999999999999999999999992 Inexact Rounded +dqadd6464 add -77e-36 1 -> 0.9999999999999999999999999999999999 Inexact Rounded +dqadd6465 add -77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd6466 add -77e-99 1 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd6470 add -77e-32 10 -> 9.99999999999999999999999999999923 +dqadd6471 add -77e-33 10 -> 9.999999999999999999999999999999923 +dqadd6472 add -77e-34 10 -> 9.999999999999999999999999999999992 Inexact Rounded +dqadd6473 add -77e-35 10 -> 9.999999999999999999999999999999999 Inexact Rounded +dqadd6474 add -77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd6475 add -77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd6476 add -77e-99 10 -> 10.00000000000000000000000000000000 Inexact Rounded + +-- negative ulps +dqadd6480 add -1 77e-32 -> -0.99999999999999999999999999999923 +dqadd6481 add -1 77e-33 -> -0.999999999999999999999999999999923 +dqadd6482 add -1 77e-34 -> -0.9999999999999999999999999999999923 +dqadd6483 add -1 77e-35 -> -0.9999999999999999999999999999999992 Inexact Rounded +dqadd6484 add -1 77e-36 -> -0.9999999999999999999999999999999999 Inexact Rounded +dqadd6485 add -1 77e-37 -> -1.000000000000000000000000000000000 Inexact Rounded +dqadd6486 add -1 77e-99 -> -1.000000000000000000000000000000000 Inexact Rounded + +dqadd6490 add -10 77e-32 -> -9.99999999999999999999999999999923 +dqadd6491 add -10 77e-33 -> -9.999999999999999999999999999999923 +dqadd6492 add -10 77e-34 -> -9.999999999999999999999999999999992 Inexact Rounded +dqadd6493 add -10 77e-35 -> -9.999999999999999999999999999999999 Inexact Rounded +dqadd6494 add -10 77e-36 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd6495 add -10 77e-37 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd6496 add -10 77e-99 -> -10.00000000000000000000000000000000 Inexact Rounded + +dqadd6500 add 77e-32 -1 -> -0.99999999999999999999999999999923 +dqadd6501 add 77e-33 -1 -> -0.999999999999999999999999999999923 +dqadd6502 add 77e-34 -1 -> -0.9999999999999999999999999999999923 +dqadd6503 add 77e-35 -1 -> -0.9999999999999999999999999999999992 Inexact Rounded +dqadd6504 add 77e-36 -1 -> -0.9999999999999999999999999999999999 Inexact Rounded +dqadd6505 add 77e-37 -1 -> -1.000000000000000000000000000000000 Inexact Rounded +dqadd6506 add 77e-99 -1 -> -1.000000000000000000000000000000000 Inexact Rounded + +dqadd6510 add 77e-32 -10 -> -9.99999999999999999999999999999923 +dqadd6511 add 77e-33 -10 -> -9.999999999999999999999999999999923 +dqadd6512 add 77e-34 -10 -> -9.999999999999999999999999999999992 Inexact Rounded +dqadd6513 add 77e-35 -10 -> -9.999999999999999999999999999999999 Inexact Rounded +dqadd6514 add 77e-36 -10 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd6515 add 77e-37 -10 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd6516 add 77e-99 -10 -> -10.00000000000000000000000000000000 Inexact Rounded + +-- and some more residue effects and different roundings +rounding: half_up +dqadd6540 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd6541 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6542 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6543 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6544 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6545 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6546 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6547 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6548 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6549 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6550 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6551 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6552 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6553 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6554 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6555 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6556 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd6557 add '9876543219876543216543210123456789' 1.000000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6558 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6559 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +rounding: half_even +dqadd6560 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd6561 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6562 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6563 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6564 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6565 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6566 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6567 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6568 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6569 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6570 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6571 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6572 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6573 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6574 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6575 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6576 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd6577 add '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6578 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6579 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +-- critical few with even bottom digit... +dqadd7540 add '9876543219876543216543210123456788' 0.499999999 -> '9876543219876543216543210123456788' Inexact Rounded +dqadd7541 add '9876543219876543216543210123456788' 0.5 -> '9876543219876543216543210123456788' Inexact Rounded +dqadd7542 add '9876543219876543216543210123456788' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded + +rounding: down +dqadd7550 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd7551 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7552 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7553 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7554 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7555 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7556 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7557 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7558 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7559 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7560 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7561 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7562 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7563 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7564 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7565 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7566 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd7567 add '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd7568 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd7569 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +-- more zeros, etc. +rounding: half_even + +dqadd7701 add 5.00 1.00E-3 -> 5.00100 +dqadd7702 add 00.00 0.000 -> 0.000 +dqadd7703 add 00.00 0E-3 -> 0.000 +dqadd7704 add 0E-3 00.00 -> 0.000 + +dqadd7710 add 0E+3 00.00 -> 0.00 +dqadd7711 add 0E+3 00.0 -> 0.0 +dqadd7712 add 0E+3 00. -> 0 +dqadd7713 add 0E+3 00.E+1 -> 0E+1 +dqadd7714 add 0E+3 00.E+2 -> 0E+2 +dqadd7715 add 0E+3 00.E+3 -> 0E+3 +dqadd7716 add 0E+3 00.E+4 -> 0E+3 +dqadd7717 add 0E+3 00.E+5 -> 0E+3 +dqadd7718 add 0E+3 -00.0 -> 0.0 +dqadd7719 add 0E+3 -00. -> 0 +dqadd7731 add 0E+3 -00.E+1 -> 0E+1 + +dqadd7720 add 00.00 0E+3 -> 0.00 +dqadd7721 add 00.0 0E+3 -> 0.0 +dqadd7722 add 00. 0E+3 -> 0 +dqadd7723 add 00.E+1 0E+3 -> 0E+1 +dqadd7724 add 00.E+2 0E+3 -> 0E+2 +dqadd7725 add 00.E+3 0E+3 -> 0E+3 +dqadd7726 add 00.E+4 0E+3 -> 0E+3 +dqadd7727 add 00.E+5 0E+3 -> 0E+3 +dqadd7728 add -00.00 0E+3 -> 0.00 +dqadd7729 add -00.0 0E+3 -> 0.0 +dqadd7730 add -00. 0E+3 -> 0 + +dqadd7732 add 0 0 -> 0 +dqadd7733 add 0 -0 -> 0 +dqadd7734 add -0 0 -> 0 +dqadd7735 add -0 -0 -> -0 -- IEEE 754 special case + +dqadd7736 add 1 -1 -> 0 +dqadd7737 add -1 -1 -> -2 +dqadd7738 add 1 1 -> 2 +dqadd7739 add -1 1 -> 0 + +dqadd7741 add 0 -1 -> -1 +dqadd7742 add -0 -1 -> -1 +dqadd7743 add 0 1 -> 1 +dqadd7744 add -0 1 -> 1 +dqadd7745 add -1 0 -> -1 +dqadd7746 add -1 -0 -> -1 +dqadd7747 add 1 0 -> 1 +dqadd7748 add 1 -0 -> 1 + +dqadd7751 add 0.0 -1 -> -1.0 +dqadd7752 add -0.0 -1 -> -1.0 +dqadd7753 add 0.0 1 -> 1.0 +dqadd7754 add -0.0 1 -> 1.0 +dqadd7755 add -1.0 0 -> -1.0 +dqadd7756 add -1.0 -0 -> -1.0 +dqadd7757 add 1.0 0 -> 1.0 +dqadd7758 add 1.0 -0 -> 1.0 + +dqadd7761 add 0 -1.0 -> -1.0 +dqadd7762 add -0 -1.0 -> -1.0 +dqadd7763 add 0 1.0 -> 1.0 +dqadd7764 add -0 1.0 -> 1.0 +dqadd7765 add -1 0.0 -> -1.0 +dqadd7766 add -1 -0.0 -> -1.0 +dqadd7767 add 1 0.0 -> 1.0 +dqadd7768 add 1 -0.0 -> 1.0 + +dqadd7771 add 0.0 -1.0 -> -1.0 +dqadd7772 add -0.0 -1.0 -> -1.0 +dqadd7773 add 0.0 1.0 -> 1.0 +dqadd7774 add -0.0 1.0 -> 1.0 +dqadd7775 add -1.0 0.0 -> -1.0 +dqadd7776 add -1.0 -0.0 -> -1.0 +dqadd7777 add 1.0 0.0 -> 1.0 +dqadd7778 add 1.0 -0.0 -> 1.0 + +-- Specials +dqadd7780 add -Inf -Inf -> -Infinity +dqadd7781 add -Inf -1000 -> -Infinity +dqadd7782 add -Inf -1 -> -Infinity +dqadd7783 add -Inf -0 -> -Infinity +dqadd7784 add -Inf 0 -> -Infinity +dqadd7785 add -Inf 1 -> -Infinity +dqadd7786 add -Inf 1000 -> -Infinity +dqadd7787 add -1000 -Inf -> -Infinity +dqadd7788 add -Inf -Inf -> -Infinity +dqadd7789 add -1 -Inf -> -Infinity +dqadd7790 add -0 -Inf -> -Infinity +dqadd7791 add 0 -Inf -> -Infinity +dqadd7792 add 1 -Inf -> -Infinity +dqadd7793 add 1000 -Inf -> -Infinity +dqadd7794 add Inf -Inf -> NaN Invalid_operation + +dqadd7800 add Inf -Inf -> NaN Invalid_operation +dqadd7801 add Inf -1000 -> Infinity +dqadd7802 add Inf -1 -> Infinity +dqadd7803 add Inf -0 -> Infinity +dqadd7804 add Inf 0 -> Infinity +dqadd7805 add Inf 1 -> Infinity +dqadd7806 add Inf 1000 -> Infinity +dqadd7807 add Inf Inf -> Infinity +dqadd7808 add -1000 Inf -> Infinity +dqadd7809 add -Inf Inf -> NaN Invalid_operation +dqadd7810 add -1 Inf -> Infinity +dqadd7811 add -0 Inf -> Infinity +dqadd7812 add 0 Inf -> Infinity +dqadd7813 add 1 Inf -> Infinity +dqadd7814 add 1000 Inf -> Infinity +dqadd7815 add Inf Inf -> Infinity + +dqadd7821 add NaN -Inf -> NaN +dqadd7822 add NaN -1000 -> NaN +dqadd7823 add NaN -1 -> NaN +dqadd7824 add NaN -0 -> NaN +dqadd7825 add NaN 0 -> NaN +dqadd7826 add NaN 1 -> NaN +dqadd7827 add NaN 1000 -> NaN +dqadd7828 add NaN Inf -> NaN +dqadd7829 add NaN NaN -> NaN +dqadd7830 add -Inf NaN -> NaN +dqadd7831 add -1000 NaN -> NaN +dqadd7832 add -1 NaN -> NaN +dqadd7833 add -0 NaN -> NaN +dqadd7834 add 0 NaN -> NaN +dqadd7835 add 1 NaN -> NaN +dqadd7836 add 1000 NaN -> NaN +dqadd7837 add Inf NaN -> NaN + +dqadd7841 add sNaN -Inf -> NaN Invalid_operation +dqadd7842 add sNaN -1000 -> NaN Invalid_operation +dqadd7843 add sNaN -1 -> NaN Invalid_operation +dqadd7844 add sNaN -0 -> NaN Invalid_operation +dqadd7845 add sNaN 0 -> NaN Invalid_operation +dqadd7846 add sNaN 1 -> NaN Invalid_operation +dqadd7847 add sNaN 1000 -> NaN Invalid_operation +dqadd7848 add sNaN NaN -> NaN Invalid_operation +dqadd7849 add sNaN sNaN -> NaN Invalid_operation +dqadd7850 add NaN sNaN -> NaN Invalid_operation +dqadd7851 add -Inf sNaN -> NaN Invalid_operation +dqadd7852 add -1000 sNaN -> NaN Invalid_operation +dqadd7853 add -1 sNaN -> NaN Invalid_operation +dqadd7854 add -0 sNaN -> NaN Invalid_operation +dqadd7855 add 0 sNaN -> NaN Invalid_operation +dqadd7856 add 1 sNaN -> NaN Invalid_operation +dqadd7857 add 1000 sNaN -> NaN Invalid_operation +dqadd7858 add Inf sNaN -> NaN Invalid_operation +dqadd7859 add NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqadd7861 add NaN1 -Inf -> NaN1 +dqadd7862 add +NaN2 -1000 -> NaN2 +dqadd7863 add NaN3 1000 -> NaN3 +dqadd7864 add NaN4 Inf -> NaN4 +dqadd7865 add NaN5 +NaN6 -> NaN5 +dqadd7866 add -Inf NaN7 -> NaN7 +dqadd7867 add -1000 NaN8 -> NaN8 +dqadd7868 add 1000 NaN9 -> NaN9 +dqadd7869 add Inf +NaN10 -> NaN10 +dqadd7871 add sNaN11 -Inf -> NaN11 Invalid_operation +dqadd7872 add sNaN12 -1000 -> NaN12 Invalid_operation +dqadd7873 add sNaN13 1000 -> NaN13 Invalid_operation +dqadd7874 add sNaN14 NaN17 -> NaN14 Invalid_operation +dqadd7875 add sNaN15 sNaN18 -> NaN15 Invalid_operation +dqadd7876 add NaN16 sNaN19 -> NaN19 Invalid_operation +dqadd7877 add -Inf +sNaN20 -> NaN20 Invalid_operation +dqadd7878 add -1000 sNaN21 -> NaN21 Invalid_operation +dqadd7879 add 1000 sNaN22 -> NaN22 Invalid_operation +dqadd7880 add Inf sNaN23 -> NaN23 Invalid_operation +dqadd7881 add +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqadd7882 add -NaN26 NaN28 -> -NaN26 +dqadd7883 add -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqadd7884 add 1000 -NaN30 -> -NaN30 +dqadd7885 add 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Here we explore near the boundary of rounding a subnormal to Nmin +dqadd7575 add 1E-6143 -1E-6176 -> 9.99999999999999999999999999999999E-6144 Subnormal +dqadd7576 add -1E-6143 +1E-6176 -> -9.99999999999999999999999999999999E-6144 Subnormal + +-- check overflow edge case +-- 1234567890123456 +dqadd7972 apply 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqadd7973 add 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7974 add 9999999999999999999999999999999999E+6111 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7975 add 9999999999999999999999999999999999E+6111 1E+6111 -> Infinity Overflow Inexact Rounded +dqadd7976 add 9999999999999999999999999999999999E+6111 9E+6110 -> Infinity Overflow Inexact Rounded +dqadd7977 add 9999999999999999999999999999999999E+6111 8E+6110 -> Infinity Overflow Inexact Rounded +dqadd7978 add 9999999999999999999999999999999999E+6111 7E+6110 -> Infinity Overflow Inexact Rounded +dqadd7979 add 9999999999999999999999999999999999E+6111 6E+6110 -> Infinity Overflow Inexact Rounded +dqadd7980 add 9999999999999999999999999999999999E+6111 5E+6110 -> Infinity Overflow Inexact Rounded +dqadd7981 add 9999999999999999999999999999999999E+6111 4E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7982 add 9999999999999999999999999999999999E+6111 3E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7983 add 9999999999999999999999999999999999E+6111 2E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7984 add 9999999999999999999999999999999999E+6111 1E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded + +dqadd7985 apply -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqadd7986 add -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7987 add -9999999999999999999999999999999999E+6111 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7988 add -9999999999999999999999999999999999E+6111 -1E+6111 -> -Infinity Overflow Inexact Rounded +dqadd7989 add -9999999999999999999999999999999999E+6111 -9E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7990 add -9999999999999999999999999999999999E+6111 -8E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7991 add -9999999999999999999999999999999999E+6111 -7E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7992 add -9999999999999999999999999999999999E+6111 -6E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7993 add -9999999999999999999999999999999999E+6111 -5E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7994 add -9999999999999999999999999999999999E+6111 -4E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7995 add -9999999999999999999999999999999999E+6111 -3E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7996 add -9999999999999999999999999999999999E+6111 -2E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7997 add -9999999999999999999999999999999999E+6111 -1E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +dqadd71100 add 1e+2 -1e-6143 -> 99.99999999999999999999999999999999 Rounded Inexact +dqadd71101 add 1e+1 -1e-6143 -> 9.999999999999999999999999999999999 Rounded Inexact +dqadd71103 add +1 -1e-6143 -> 0.9999999999999999999999999999999999 Rounded Inexact +dqadd71104 add 1e-1 -1e-6143 -> 0.09999999999999999999999999999999999 Rounded Inexact +dqadd71105 add 1e-2 -1e-6143 -> 0.009999999999999999999999999999999999 Rounded Inexact +dqadd71106 add 1e-3 -1e-6143 -> 0.0009999999999999999999999999999999999 Rounded Inexact +dqadd71107 add 1e-4 -1e-6143 -> 0.00009999999999999999999999999999999999 Rounded Inexact +dqadd71108 add 1e-5 -1e-6143 -> 0.000009999999999999999999999999999999999 Rounded Inexact +dqadd71109 add 1e-6 -1e-6143 -> 9.999999999999999999999999999999999E-7 Rounded Inexact + +rounding: ceiling +dqadd71110 add -1e+2 +1e-6143 -> -99.99999999999999999999999999999999 Rounded Inexact +dqadd71111 add -1e+1 +1e-6143 -> -9.999999999999999999999999999999999 Rounded Inexact +dqadd71113 add -1 +1e-6143 -> -0.9999999999999999999999999999999999 Rounded Inexact +dqadd71114 add -1e-1 +1e-6143 -> -0.09999999999999999999999999999999999 Rounded Inexact +dqadd71115 add -1e-2 +1e-6143 -> -0.009999999999999999999999999999999999 Rounded Inexact +dqadd71116 add -1e-3 +1e-6143 -> -0.0009999999999999999999999999999999999 Rounded Inexact +dqadd71117 add -1e-4 +1e-6143 -> -0.00009999999999999999999999999999999999 Rounded Inexact +dqadd71118 add -1e-5 +1e-6143 -> -0.000009999999999999999999999999999999999 Rounded Inexact +dqadd71119 add -1e-6 +1e-6143 -> -9.999999999999999999999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +dqadd71300 add 1E34 -0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71310 add 1E34 -0.51 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71311 add 1E34 -0.501 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71312 add 1E34 -0.5001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71313 add 1E34 -0.50001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71314 add 1E34 -0.500001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71315 add 1E34 -0.5000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71316 add 1E34 -0.50000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71317 add 1E34 -0.500000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71318 add 1E34 -0.5000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71319 add 1E34 -0.50000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71320 add 1E34 -0.500000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71321 add 1E34 -0.5000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71322 add 1E34 -0.50000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71323 add 1E34 -0.500000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71324 add 1E34 -0.5000000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71325 add 1E34 -0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71326 add 1E34 -0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71327 add 1E34 -0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71328 add 1E34 -0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71329 add 1E34 -0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71330 add 1E34 -0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71331 add 1E34 -0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71332 add 1E34 -0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71333 add 1E34 -0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71334 add 1E34 -0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71335 add 1E34 -0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71336 add 1E34 -0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71337 add 1E34 -0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71338 add 1E34 -0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71339 add 1E34 -0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded + +dqadd71340 add 1E34 -5000000.000010001 -> 9999999999999999999999999995000000 Inexact Rounded +dqadd71341 add 1E34 -5000000.000000001 -> 9999999999999999999999999995000000 Inexact Rounded + +dqadd71349 add 9999999999999999999999999999999999 0.4 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71350 add 9999999999999999999999999999999999 0.49 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71351 add 9999999999999999999999999999999999 0.499 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71352 add 9999999999999999999999999999999999 0.4999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71353 add 9999999999999999999999999999999999 0.49999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71354 add 9999999999999999999999999999999999 0.499999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71355 add 9999999999999999999999999999999999 0.4999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71356 add 9999999999999999999999999999999999 0.49999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71357 add 9999999999999999999999999999999999 0.499999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71358 add 9999999999999999999999999999999999 0.4999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71359 add 9999999999999999999999999999999999 0.49999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71360 add 9999999999999999999999999999999999 0.499999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71361 add 9999999999999999999999999999999999 0.4999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71362 add 9999999999999999999999999999999999 0.49999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71363 add 9999999999999999999999999999999999 0.499999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71364 add 9999999999999999999999999999999999 0.4999999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71365 add 9999999999999999999999999999999999 0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71367 add 9999999999999999999999999999999999 0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71368 add 9999999999999999999999999999999999 0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71369 add 9999999999999999999999999999999999 0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71370 add 9999999999999999999999999999999999 0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71371 add 9999999999999999999999999999999999 0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71372 add 9999999999999999999999999999999999 0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71373 add 9999999999999999999999999999999999 0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71374 add 9999999999999999999999999999999999 0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71375 add 9999999999999999999999999999999999 0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71376 add 9999999999999999999999999999999999 0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71377 add 9999999999999999999999999999999999 0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71378 add 9999999999999999999999999999999999 0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71379 add 9999999999999999999999999999999999 0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71380 add 9999999999999999999999999999999999 0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71381 add 9999999999999999999999999999999999 0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71382 add 9999999999999999999999999999999999 0.5000000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71383 add 9999999999999999999999999999999999 0.500000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71384 add 9999999999999999999999999999999999 0.50000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71385 add 9999999999999999999999999999999999 0.5000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71386 add 9999999999999999999999999999999999 0.500000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71387 add 9999999999999999999999999999999999 0.50000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71388 add 9999999999999999999999999999999999 0.5000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71389 add 9999999999999999999999999999999999 0.500000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71390 add 9999999999999999999999999999999999 0.50000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71391 add 9999999999999999999999999999999999 0.5000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71392 add 9999999999999999999999999999999999 0.500001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71393 add 9999999999999999999999999999999999 0.50001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71394 add 9999999999999999999999999999999999 0.5001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71395 add 9999999999999999999999999999999999 0.501 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71396 add 9999999999999999999999999999999999 0.51 -> 1.000000000000000000000000000000000E+34 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +dqadd71420 add 0 1.123456789987654321123456789012345 -> 1.123456789987654321123456789012345 +dqadd71421 add 0 1.123456789987654321123456789012345E-1 -> 0.1123456789987654321123456789012345 +dqadd71422 add 0 1.123456789987654321123456789012345E-2 -> 0.01123456789987654321123456789012345 +dqadd71423 add 0 1.123456789987654321123456789012345E-3 -> 0.001123456789987654321123456789012345 +dqadd71424 add 0 1.123456789987654321123456789012345E-4 -> 0.0001123456789987654321123456789012345 +dqadd71425 add 0 1.123456789987654321123456789012345E-5 -> 0.00001123456789987654321123456789012345 +dqadd71426 add 0 1.123456789987654321123456789012345E-6 -> 0.000001123456789987654321123456789012345 +dqadd71427 add 0 1.123456789987654321123456789012345E-7 -> 1.123456789987654321123456789012345E-7 +dqadd71428 add 0 1.123456789987654321123456789012345E-8 -> 1.123456789987654321123456789012345E-8 +dqadd71429 add 0 1.123456789987654321123456789012345E-9 -> 1.123456789987654321123456789012345E-9 +dqadd71430 add 0 1.123456789987654321123456789012345E-10 -> 1.123456789987654321123456789012345E-10 +dqadd71431 add 0 1.123456789987654321123456789012345E-11 -> 1.123456789987654321123456789012345E-11 +dqadd71432 add 0 1.123456789987654321123456789012345E-12 -> 1.123456789987654321123456789012345E-12 +dqadd71433 add 0 1.123456789987654321123456789012345E-13 -> 1.123456789987654321123456789012345E-13 +dqadd71434 add 0 1.123456789987654321123456789012345E-14 -> 1.123456789987654321123456789012345E-14 +dqadd71435 add 0 1.123456789987654321123456789012345E-15 -> 1.123456789987654321123456789012345E-15 +dqadd71436 add 0 1.123456789987654321123456789012345E-16 -> 1.123456789987654321123456789012345E-16 +dqadd71437 add 0 1.123456789987654321123456789012345E-17 -> 1.123456789987654321123456789012345E-17 +dqadd71438 add 0 1.123456789987654321123456789012345E-18 -> 1.123456789987654321123456789012345E-18 +dqadd71439 add 0 1.123456789987654321123456789012345E-19 -> 1.123456789987654321123456789012345E-19 +dqadd71440 add 0 1.123456789987654321123456789012345E-20 -> 1.123456789987654321123456789012345E-20 +dqadd71441 add 0 1.123456789987654321123456789012345E-21 -> 1.123456789987654321123456789012345E-21 +dqadd71442 add 0 1.123456789987654321123456789012345E-22 -> 1.123456789987654321123456789012345E-22 +dqadd71443 add 0 1.123456789987654321123456789012345E-23 -> 1.123456789987654321123456789012345E-23 +dqadd71444 add 0 1.123456789987654321123456789012345E-24 -> 1.123456789987654321123456789012345E-24 +dqadd71445 add 0 1.123456789987654321123456789012345E-25 -> 1.123456789987654321123456789012345E-25 +dqadd71446 add 0 1.123456789987654321123456789012345E-26 -> 1.123456789987654321123456789012345E-26 +dqadd71447 add 0 1.123456789987654321123456789012345E-27 -> 1.123456789987654321123456789012345E-27 +dqadd71448 add 0 1.123456789987654321123456789012345E-28 -> 1.123456789987654321123456789012345E-28 +dqadd71449 add 0 1.123456789987654321123456789012345E-29 -> 1.123456789987654321123456789012345E-29 +dqadd71450 add 0 1.123456789987654321123456789012345E-30 -> 1.123456789987654321123456789012345E-30 +dqadd71451 add 0 1.123456789987654321123456789012345E-31 -> 1.123456789987654321123456789012345E-31 +dqadd71452 add 0 1.123456789987654321123456789012345E-32 -> 1.123456789987654321123456789012345E-32 +dqadd71453 add 0 1.123456789987654321123456789012345E-33 -> 1.123456789987654321123456789012345E-33 +dqadd71454 add 0 1.123456789987654321123456789012345E-34 -> 1.123456789987654321123456789012345E-34 +dqadd71455 add 0 1.123456789987654321123456789012345E-35 -> 1.123456789987654321123456789012345E-35 +dqadd71456 add 0 1.123456789987654321123456789012345E-36 -> 1.123456789987654321123456789012345E-36 + +-- same, reversed 0 +dqadd71460 add 1.123456789987654321123456789012345 0 -> 1.123456789987654321123456789012345 +dqadd71461 add 1.123456789987654321123456789012345E-1 0 -> 0.1123456789987654321123456789012345 +dqadd71462 add 1.123456789987654321123456789012345E-2 0 -> 0.01123456789987654321123456789012345 +dqadd71463 add 1.123456789987654321123456789012345E-3 0 -> 0.001123456789987654321123456789012345 +dqadd71464 add 1.123456789987654321123456789012345E-4 0 -> 0.0001123456789987654321123456789012345 +dqadd71465 add 1.123456789987654321123456789012345E-5 0 -> 0.00001123456789987654321123456789012345 +dqadd71466 add 1.123456789987654321123456789012345E-6 0 -> 0.000001123456789987654321123456789012345 +dqadd71467 add 1.123456789987654321123456789012345E-7 0 -> 1.123456789987654321123456789012345E-7 +dqadd71468 add 1.123456789987654321123456789012345E-8 0 -> 1.123456789987654321123456789012345E-8 +dqadd71469 add 1.123456789987654321123456789012345E-9 0 -> 1.123456789987654321123456789012345E-9 +dqadd71470 add 1.123456789987654321123456789012345E-10 0 -> 1.123456789987654321123456789012345E-10 +dqadd71471 add 1.123456789987654321123456789012345E-11 0 -> 1.123456789987654321123456789012345E-11 +dqadd71472 add 1.123456789987654321123456789012345E-12 0 -> 1.123456789987654321123456789012345E-12 +dqadd71473 add 1.123456789987654321123456789012345E-13 0 -> 1.123456789987654321123456789012345E-13 +dqadd71474 add 1.123456789987654321123456789012345E-14 0 -> 1.123456789987654321123456789012345E-14 +dqadd71475 add 1.123456789987654321123456789012345E-15 0 -> 1.123456789987654321123456789012345E-15 +dqadd71476 add 1.123456789987654321123456789012345E-16 0 -> 1.123456789987654321123456789012345E-16 +dqadd71477 add 1.123456789987654321123456789012345E-17 0 -> 1.123456789987654321123456789012345E-17 +dqadd71478 add 1.123456789987654321123456789012345E-18 0 -> 1.123456789987654321123456789012345E-18 +dqadd71479 add 1.123456789987654321123456789012345E-19 0 -> 1.123456789987654321123456789012345E-19 +dqadd71480 add 1.123456789987654321123456789012345E-20 0 -> 1.123456789987654321123456789012345E-20 +dqadd71481 add 1.123456789987654321123456789012345E-21 0 -> 1.123456789987654321123456789012345E-21 +dqadd71482 add 1.123456789987654321123456789012345E-22 0 -> 1.123456789987654321123456789012345E-22 +dqadd71483 add 1.123456789987654321123456789012345E-23 0 -> 1.123456789987654321123456789012345E-23 +dqadd71484 add 1.123456789987654321123456789012345E-24 0 -> 1.123456789987654321123456789012345E-24 +dqadd71485 add 1.123456789987654321123456789012345E-25 0 -> 1.123456789987654321123456789012345E-25 +dqadd71486 add 1.123456789987654321123456789012345E-26 0 -> 1.123456789987654321123456789012345E-26 +dqadd71487 add 1.123456789987654321123456789012345E-27 0 -> 1.123456789987654321123456789012345E-27 +dqadd71488 add 1.123456789987654321123456789012345E-28 0 -> 1.123456789987654321123456789012345E-28 +dqadd71489 add 1.123456789987654321123456789012345E-29 0 -> 1.123456789987654321123456789012345E-29 +dqadd71490 add 1.123456789987654321123456789012345E-30 0 -> 1.123456789987654321123456789012345E-30 +dqadd71491 add 1.123456789987654321123456789012345E-31 0 -> 1.123456789987654321123456789012345E-31 +dqadd71492 add 1.123456789987654321123456789012345E-32 0 -> 1.123456789987654321123456789012345E-32 +dqadd71493 add 1.123456789987654321123456789012345E-33 0 -> 1.123456789987654321123456789012345E-33 +dqadd71494 add 1.123456789987654321123456789012345E-34 0 -> 1.123456789987654321123456789012345E-34 +dqadd71495 add 1.123456789987654321123456789012345E-35 0 -> 1.123456789987654321123456789012345E-35 +dqadd71496 add 1.123456789987654321123456789012345E-36 0 -> 1.123456789987654321123456789012345E-36 + +-- same, Es on the 0 +dqadd71500 add 1.123456789987654321123456789012345 0E-0 -> 1.123456789987654321123456789012345 +dqadd71501 add 1.123456789987654321123456789012345 0E-1 -> 1.123456789987654321123456789012345 +dqadd71502 add 1.123456789987654321123456789012345 0E-2 -> 1.123456789987654321123456789012345 +dqadd71503 add 1.123456789987654321123456789012345 0E-3 -> 1.123456789987654321123456789012345 +dqadd71504 add 1.123456789987654321123456789012345 0E-4 -> 1.123456789987654321123456789012345 +dqadd71505 add 1.123456789987654321123456789012345 0E-5 -> 1.123456789987654321123456789012345 +dqadd71506 add 1.123456789987654321123456789012345 0E-6 -> 1.123456789987654321123456789012345 +dqadd71507 add 1.123456789987654321123456789012345 0E-7 -> 1.123456789987654321123456789012345 +dqadd71508 add 1.123456789987654321123456789012345 0E-8 -> 1.123456789987654321123456789012345 +dqadd71509 add 1.123456789987654321123456789012345 0E-9 -> 1.123456789987654321123456789012345 +dqadd71510 add 1.123456789987654321123456789012345 0E-10 -> 1.123456789987654321123456789012345 +dqadd71511 add 1.123456789987654321123456789012345 0E-11 -> 1.123456789987654321123456789012345 +dqadd71512 add 1.123456789987654321123456789012345 0E-12 -> 1.123456789987654321123456789012345 +dqadd71513 add 1.123456789987654321123456789012345 0E-13 -> 1.123456789987654321123456789012345 +dqadd71514 add 1.123456789987654321123456789012345 0E-14 -> 1.123456789987654321123456789012345 +dqadd71515 add 1.123456789987654321123456789012345 0E-15 -> 1.123456789987654321123456789012345 +dqadd71516 add 1.123456789987654321123456789012345 0E-16 -> 1.123456789987654321123456789012345 +dqadd71517 add 1.123456789987654321123456789012345 0E-17 -> 1.123456789987654321123456789012345 +dqadd71518 add 1.123456789987654321123456789012345 0E-18 -> 1.123456789987654321123456789012345 +dqadd71519 add 1.123456789987654321123456789012345 0E-19 -> 1.123456789987654321123456789012345 +dqadd71520 add 1.123456789987654321123456789012345 0E-20 -> 1.123456789987654321123456789012345 +dqadd71521 add 1.123456789987654321123456789012345 0E-21 -> 1.123456789987654321123456789012345 +dqadd71522 add 1.123456789987654321123456789012345 0E-22 -> 1.123456789987654321123456789012345 +dqadd71523 add 1.123456789987654321123456789012345 0E-23 -> 1.123456789987654321123456789012345 +dqadd71524 add 1.123456789987654321123456789012345 0E-24 -> 1.123456789987654321123456789012345 +dqadd71525 add 1.123456789987654321123456789012345 0E-25 -> 1.123456789987654321123456789012345 +dqadd71526 add 1.123456789987654321123456789012345 0E-26 -> 1.123456789987654321123456789012345 +dqadd71527 add 1.123456789987654321123456789012345 0E-27 -> 1.123456789987654321123456789012345 +dqadd71528 add 1.123456789987654321123456789012345 0E-28 -> 1.123456789987654321123456789012345 +dqadd71529 add 1.123456789987654321123456789012345 0E-29 -> 1.123456789987654321123456789012345 +dqadd71530 add 1.123456789987654321123456789012345 0E-30 -> 1.123456789987654321123456789012345 +dqadd71531 add 1.123456789987654321123456789012345 0E-31 -> 1.123456789987654321123456789012345 +dqadd71532 add 1.123456789987654321123456789012345 0E-32 -> 1.123456789987654321123456789012345 +dqadd71533 add 1.123456789987654321123456789012345 0E-33 -> 1.123456789987654321123456789012345 +-- next four flag Rounded because the 0 extends the result +dqadd71534 add 1.123456789987654321123456789012345 0E-34 -> 1.123456789987654321123456789012345 Rounded +dqadd71535 add 1.123456789987654321123456789012345 0E-35 -> 1.123456789987654321123456789012345 Rounded +dqadd71536 add 1.123456789987654321123456789012345 0E-36 -> 1.123456789987654321123456789012345 Rounded +dqadd71537 add 1.123456789987654321123456789012345 0E-37 -> 1.123456789987654321123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +dqadd71600 add 0 0E-19 -> 0E-19 +dqadd71601 add -0 0E-19 -> 0E-19 +dqadd71602 add 0 -0E-19 -> 0E-19 +dqadd71603 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71611 add -11 11 -> 0 +dqadd71612 add 11 -11 -> 0 + +rounding: half_down +-- exact zeros from zeros +dqadd71620 add 0 0E-19 -> 0E-19 +dqadd71621 add -0 0E-19 -> 0E-19 +dqadd71622 add 0 -0E-19 -> 0E-19 +dqadd71623 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71631 add -11 11 -> 0 +dqadd71632 add 11 -11 -> 0 + +rounding: half_even +-- exact zeros from zeros +dqadd71640 add 0 0E-19 -> 0E-19 +dqadd71641 add -0 0E-19 -> 0E-19 +dqadd71642 add 0 -0E-19 -> 0E-19 +dqadd71643 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71651 add -11 11 -> 0 +dqadd71652 add 11 -11 -> 0 + +rounding: up +-- exact zeros from zeros +dqadd71660 add 0 0E-19 -> 0E-19 +dqadd71661 add -0 0E-19 -> 0E-19 +dqadd71662 add 0 -0E-19 -> 0E-19 +dqadd71663 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71671 add -11 11 -> 0 +dqadd71672 add 11 -11 -> 0 + +rounding: down +-- exact zeros from zeros +dqadd71680 add 0 0E-19 -> 0E-19 +dqadd71681 add -0 0E-19 -> 0E-19 +dqadd71682 add 0 -0E-19 -> 0E-19 +dqadd71683 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71691 add -11 11 -> 0 +dqadd71692 add 11 -11 -> 0 + +rounding: ceiling +-- exact zeros from zeros +dqadd71700 add 0 0E-19 -> 0E-19 +dqadd71701 add -0 0E-19 -> 0E-19 +dqadd71702 add 0 -0E-19 -> 0E-19 +dqadd71703 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71711 add -11 11 -> 0 +dqadd71712 add 11 -11 -> 0 + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +dqadd71720 add 0 0E-19 -> 0E-19 +dqadd71721 add -0 0E-19 -> -0E-19 -- * +dqadd71722 add 0 -0E-19 -> -0E-19 -- * +dqadd71723 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71731 add -11 11 -> -0 -- * +dqadd71732 add 11 -11 -> -0 -- * + +-- Examples from SQL proposal (Krishna Kulkarni) +dqadd71741 add 130E-2 120E-2 -> 2.50 +dqadd71742 add 130E-2 12E-1 -> 2.50 +dqadd71743 add 130E-2 1E0 -> 2.30 +dqadd71744 add 1E2 1E4 -> 1.01E+4 +dqadd71745 add 130E-2 -120E-2 -> 0.10 +dqadd71746 add 130E-2 -12E-1 -> 0.10 +dqadd71747 add 130E-2 -1E0 -> 0.30 +dqadd71748 add 1E2 -1E4 -> -9.9E+3 + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +dqadd75001 add 1239876543211234567894567890123456 1 -> 1239876543211234567894567890123457 +dqadd75002 add 1239876543211234567894567890123456 0.6 -> 1239876543211234567894567890123457 Inexact Rounded +dqadd75003 add 1239876543211234567894567890123456 0.06 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75004 add 1239876543211234567894567890123456 6E-3 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75005 add 1239876543211234567894567890123456 6E-4 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75006 add 1239876543211234567894567890123456 6E-5 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75007 add 1239876543211234567894567890123456 6E-6 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75008 add 1239876543211234567894567890123456 6E-7 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75009 add 1239876543211234567894567890123456 6E-8 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75010 add 1239876543211234567894567890123456 6E-9 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75011 add 1239876543211234567894567890123456 6E-10 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75012 add 1239876543211234567894567890123456 6E-11 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75013 add 1239876543211234567894567890123456 6E-12 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75014 add 1239876543211234567894567890123456 6E-13 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75015 add 1239876543211234567894567890123456 6E-14 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75016 add 1239876543211234567894567890123456 6E-15 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75017 add 1239876543211234567894567890123456 6E-16 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75018 add 1239876543211234567894567890123456 6E-17 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75019 add 1239876543211234567894567890123456 6E-18 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75020 add 1239876543211234567894567890123456 6E-19 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75021 add 1239876543211234567894567890123456 6E-20 -> 1239876543211234567894567890123456 Inexact Rounded + +-- widening second argument at gap +dqadd75030 add 12398765432112345678945678 1 -> 12398765432112345678945679 +dqadd75031 add 12398765432112345678945678 0.1 -> 12398765432112345678945678.1 +dqadd75032 add 12398765432112345678945678 0.12 -> 12398765432112345678945678.12 +dqadd75033 add 12398765432112345678945678 0.123 -> 12398765432112345678945678.123 +dqadd75034 add 12398765432112345678945678 0.1234 -> 12398765432112345678945678.1234 +dqadd75035 add 12398765432112345678945678 0.12345 -> 12398765432112345678945678.12345 +dqadd75036 add 12398765432112345678945678 0.123456 -> 12398765432112345678945678.123456 +dqadd75037 add 12398765432112345678945678 0.1234567 -> 12398765432112345678945678.1234567 +dqadd75038 add 12398765432112345678945678 0.12345678 -> 12398765432112345678945678.12345678 +dqadd75039 add 12398765432112345678945678 0.123456789 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75040 add 12398765432112345678945678 0.123456785 -> 12398765432112345678945678.12345678 Inexact Rounded +dqadd75041 add 12398765432112345678945678 0.1234567850 -> 12398765432112345678945678.12345678 Inexact Rounded +dqadd75042 add 12398765432112345678945678 0.1234567851 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75043 add 12398765432112345678945678 0.12345678501 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75044 add 12398765432112345678945678 0.123456785001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75045 add 12398765432112345678945678 0.1234567850001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75046 add 12398765432112345678945678 0.12345678500001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75047 add 12398765432112345678945678 0.123456785000001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75048 add 12398765432112345678945678 0.1234567850000001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75049 add 12398765432112345678945678 0.1234567850000000 -> 12398765432112345678945678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +dqadd75050 add 12398765432112345678945678 0.0234567750000000 -> 12398765432112345678945678.02345678 Inexact Rounded +dqadd75051 add 12398765432112345678945678 0.0034567750000000 -> 12398765432112345678945678.00345678 Inexact Rounded +dqadd75052 add 12398765432112345678945678 0.0004567750000000 -> 12398765432112345678945678.00045678 Inexact Rounded +dqadd75053 add 12398765432112345678945678 0.0000567750000000 -> 12398765432112345678945678.00005678 Inexact Rounded +dqadd75054 add 12398765432112345678945678 0.0000067750000000 -> 12398765432112345678945678.00000678 Inexact Rounded +dqadd75055 add 12398765432112345678945678 0.0000007750000000 -> 12398765432112345678945678.00000078 Inexact Rounded +dqadd75056 add 12398765432112345678945678 0.0000000750000000 -> 12398765432112345678945678.00000008 Inexact Rounded +dqadd75057 add 12398765432112345678945678 0.0000000050000000 -> 12398765432112345678945678.00000000 Inexact Rounded +dqadd75060 add 12398765432112345678945678 0.0234567750000001 -> 12398765432112345678945678.02345678 Inexact Rounded +dqadd75061 add 12398765432112345678945678 0.0034567750000001 -> 12398765432112345678945678.00345678 Inexact Rounded +dqadd75062 add 12398765432112345678945678 0.0004567750000001 -> 12398765432112345678945678.00045678 Inexact Rounded +dqadd75063 add 12398765432112345678945678 0.0000567750000001 -> 12398765432112345678945678.00005678 Inexact Rounded +dqadd75064 add 12398765432112345678945678 0.0000067750000001 -> 12398765432112345678945678.00000678 Inexact Rounded +dqadd75065 add 12398765432112345678945678 0.0000007750000001 -> 12398765432112345678945678.00000078 Inexact Rounded +dqadd75066 add 12398765432112345678945678 0.0000000750000001 -> 12398765432112345678945678.00000008 Inexact Rounded +dqadd75067 add 12398765432112345678945678 0.0000000050000001 -> 12398765432112345678945678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +dqadd75070 add 12398765432112345678945678 1E-8 -> 12398765432112345678945678.00000001 +dqadd75071 add 12398765432112345678945678 1E-9 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75072 add 12398765432112345678945678 1E-10 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75073 add 12398765432112345678945678 1E-11 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75074 add 12398765432112345678945678 1E-12 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75075 add 12398765432112345678945678 1E-13 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75076 add 12398765432112345678945678 1E-14 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75077 add 12398765432112345678945678 1E-15 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75078 add 12398765432112345678945678 1E-16 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75079 add 12398765432112345678945678 1E-17 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75080 add 12398765432112345678945678 1E-18 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75081 add 12398765432112345678945678 1E-19 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75082 add 12398765432112345678945678 1E-20 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75083 add 12398765432112345678945678 1E-25 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75084 add 12398765432112345678945678 1E-30 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75085 add 12398765432112345678945678 1E-31 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75086 add 12398765432112345678945678 1E-32 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75087 add 12398765432112345678945678 1E-33 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75088 add 12398765432112345678945678 1E-34 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75089 add 12398765432112345678945678 1E-35 -> 12398765432112345678945678.00000001 Inexact Rounded + +-- Null tests +dqadd9990 add 10 # -> NaN Invalid_operation +dqadd9991 add # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqAnd.decTest b/Lib/test/decimaltestdata/dqAnd.decTest index 57c416b48ca..d609bc1c3bb 100644 --- a/Lib/test/decimaltestdata/dqAnd.decTest +++ b/Lib/test/decimaltestdata/dqAnd.decTest @@ -1,420 +1,420 @@ ------------------------------------------------------------------------- --- dqAnd.decTest -- digitwise logical AND for decQuads -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check (truth table) -dqand001 and 0 0 -> 0 -dqand002 and 0 1 -> 0 -dqand003 and 1 0 -> 0 -dqand004 and 1 1 -> 1 -dqand005 and 1100 1010 -> 1000 --- and at msd and msd-1 --- 1234567890123456789012345678901234 -dqand006 and 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqand007 and 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 0 -dqand008 and 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqand009 and 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqand010 and 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqand011 and 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 0 -dqand012 and 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqand013 and 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 - --- Various lengths --- 1234567890123456789012345678901234 - -dqand601 and 0111111111111111111111111111111111 1111111111111111111111111111111111 -> 111111111111111111111111111111111 -dqand602 and 1011111111111111111111111111111111 1111111111111111111111111111111111 -> 1011111111111111111111111111111111 -dqand603 and 1101111111111111111111111111111111 1111111111111111111111111111111111 -> 1101111111111111111111111111111111 -dqand604 and 1110111111111111111111111111111111 1111111111111111111111111111111111 -> 1110111111111111111111111111111111 -dqand605 and 1111011111111111111111111111111111 1111111111111111111111111111111111 -> 1111011111111111111111111111111111 -dqand606 and 1111101111111111111111111111111111 1111111111111111111111111111111111 -> 1111101111111111111111111111111111 -dqand607 and 1111110111111111111111111111111111 1111111111111111111111111111111111 -> 1111110111111111111111111111111111 -dqand608 and 1111111011111111111111111111111111 1111111111111111111111111111111111 -> 1111111011111111111111111111111111 -dqand609 and 1111111101111111111111111111111111 1111111111111111111111111111111111 -> 1111111101111111111111111111111111 -dqand610 and 1111111110111111111111111111111111 1111111111111111111111111111111111 -> 1111111110111111111111111111111111 -dqand611 and 1111111111011111111111111111111111 1111111111111111111111111111111111 -> 1111111111011111111111111111111111 -dqand612 and 1111111111101111111111111111111111 1111111111111111111111111111111111 -> 1111111111101111111111111111111111 -dqand613 and 1111111111110111111111111111111111 1111111111111111111111111111111111 -> 1111111111110111111111111111111111 -dqand614 and 1111111111111011111111111111111111 1111111111111111111111111111111111 -> 1111111111111011111111111111111111 -dqand615 and 1111111111111101111111111111111111 1111111111111111111111111111111111 -> 1111111111111101111111111111111111 -dqand616 and 1111111111111110111111111111111111 1111111111111111111111111111111111 -> 1111111111111110111111111111111111 -dqand617 and 1111111111111111011111111111111111 1111111111111111111111111111111111 -> 1111111111111111011111111111111111 -dqand618 and 1111111111111111101111111111111111 1111111111111111111111111111111111 -> 1111111111111111101111111111111111 -dqand619 and 1111111111111111110111111111111111 1111111111111111111111111111111111 -> 1111111111111111110111111111111111 -dqand620 and 1111111111111111111011111111111111 1111111111111111111111111111111111 -> 1111111111111111111011111111111111 -dqand621 and 1111111111111111111101111111111111 1111111111111111111111111111111111 -> 1111111111111111111101111111111111 -dqand622 and 1111111111111111111110111111111111 1111111111111111111111111111111111 -> 1111111111111111111110111111111111 -dqand623 and 1111111111111111111111011111111111 1111111111111111111111111111111111 -> 1111111111111111111111011111111111 -dqand624 and 1111111111111111111111101111111111 1111111111111111111111111111111111 -> 1111111111111111111111101111111111 -dqand625 and 1111111111111111111111110111111111 1111111111111111111111111111111111 -> 1111111111111111111111110111111111 -dqand626 and 1111111111111111111111111011111111 1111111111111111111111111111111111 -> 1111111111111111111111111011111111 -dqand627 and 1111111111111111111111111101111111 1111111111111111111111111111111111 -> 1111111111111111111111111101111111 -dqand628 and 1111111111111111111111111110111111 1111111111111111111111111111111111 -> 1111111111111111111111111110111111 -dqand629 and 1111111111111111111111111111011111 1111111111111111111111111111111111 -> 1111111111111111111111111111011111 -dqand630 and 1111111111111111111111111111101111 1111111111111111111111111111111111 -> 1111111111111111111111111111101111 -dqand631 and 1111111111111111111111111111110111 1111111111111111111111111111111111 -> 1111111111111111111111111111110111 -dqand632 and 1111111111111111111111111111111011 1111111111111111111111111111111111 -> 1111111111111111111111111111111011 -dqand633 and 1111111111111111111111111111111101 1111111111111111111111111111111111 -> 1111111111111111111111111111111101 -dqand634 and 1111111111111111111111111111111110 1111111111111111111111111111111111 -> 1111111111111111111111111111111110 - -dqand641 and 1111111111111111111111111111111111 0111111111111111111111111111111111 -> 111111111111111111111111111111111 -dqand642 and 1111111111111111111111111111111111 1011111111111111111111111111111111 -> 1011111111111111111111111111111111 -dqand643 and 1111111111111111111111111111111111 1101111111111111111111111111111111 -> 1101111111111111111111111111111111 -dqand644 and 1111111111111111111111111111111111 1110111111111111111111111111111111 -> 1110111111111111111111111111111111 -dqand645 and 1111111111111111111111111111111111 1111011111111111111111111111111111 -> 1111011111111111111111111111111111 -dqand646 and 1111111111111111111111111111111111 1111101111111111111111111111111111 -> 1111101111111111111111111111111111 -dqand647 and 1111111111111111111111111111111111 1111110111111111111111111111111111 -> 1111110111111111111111111111111111 -dqand648 and 1111111111111111111111111111111111 1111111011111111111111111111111111 -> 1111111011111111111111111111111111 -dqand649 and 1111111111111111111111111111111111 1111111101111111111111111111111111 -> 1111111101111111111111111111111111 -dqand650 and 1111111111111111111111111111111111 1111111110111111111111111111111111 -> 1111111110111111111111111111111111 -dqand651 and 1111111111111111111111111111111111 1111111111011111111111111111111111 -> 1111111111011111111111111111111111 -dqand652 and 1111111111111111111111111111111111 1111111111101111111111111111111111 -> 1111111111101111111111111111111111 -dqand653 and 1111111111111111111111111111111111 1111111111110111111111111111111111 -> 1111111111110111111111111111111111 -dqand654 and 1111111111111111111111111111111111 1111111111111011111111111111111111 -> 1111111111111011111111111111111111 -dqand655 and 1111111111111111111111111111111111 1111111111111101111111111111111111 -> 1111111111111101111111111111111111 -dqand656 and 1111111111111111111111111111111111 1111111111111110111111111111111111 -> 1111111111111110111111111111111111 -dqand657 and 1111111111111111111111111111111111 1111111111111111011111111111111111 -> 1111111111111111011111111111111111 -dqand658 and 1111111111111111111111111111111111 1111111111111111101111111111111111 -> 1111111111111111101111111111111111 -dqand659 and 1111111111111111111111111111111111 1111111111111111110111111111111111 -> 1111111111111111110111111111111111 -dqand660 and 1111111111111111111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111011111111111111 -dqand661 and 1111111111111111111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111101111111111111 -dqand662 and 1111111111111111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111110111111111111 -dqand663 and 1111111111111111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111011111111111 -dqand664 and 1111111111111111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111101111111111 -dqand665 and 1111111111111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111110111111111 -dqand666 and 1111111111111111111111111111111111 1111111111111111111111111011111111 -> 1111111111111111111111111011111111 -dqand667 and 1111111111111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111101111111 -dqand668 and 1111111111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111110111111 -dqand669 and 1111111111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111011111 -dqand670 and 1111111111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111101111 -dqand671 and 1111111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111110111 -dqand672 and 1111111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111011 -dqand673 and 1111111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111101 -dqand674 and 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 -dqand675 and 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 111111111111111111111111111111110 -dqand676 and 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 - -dqand021 and 1111111111111111 1111111111111111 -> 1111111111111111 -dqand024 and 1111111111111111 111111111111111 -> 111111111111111 -dqand025 and 1111111111111111 11111111111111 -> 11111111111111 -dqand026 and 1111111111111111 1111111111111 -> 1111111111111 -dqand027 and 1111111111111111 111111111111 -> 111111111111 -dqand028 and 1111111111111111 11111111111 -> 11111111111 -dqand029 and 1111111111111111 1111111111 -> 1111111111 -dqand030 and 1111111111111111 111111111 -> 111111111 -dqand031 and 1111111111111111 11111111 -> 11111111 -dqand032 and 1111111111111111 1111111 -> 1111111 -dqand033 and 1111111111111111 111111 -> 111111 -dqand034 and 1111111111111111 11111 -> 11111 -dqand035 and 1111111111111111 1111 -> 1111 -dqand036 and 1111111111111111 111 -> 111 -dqand037 and 1111111111111111 11 -> 11 -dqand038 and 1111111111111111 1 -> 1 -dqand039 and 1111111111111111 0 -> 0 - -dqand040 and 1111111111111111 1111111111111111 -> 1111111111111111 -dqand041 and 111111111111111 1111111111111111 -> 111111111111111 -dqand042 and 111111111111111 1111111111111111 -> 111111111111111 -dqand043 and 11111111111111 1111111111111111 -> 11111111111111 -dqand044 and 1111111111111 1111111111111111 -> 1111111111111 -dqand045 and 111111111111 1111111111111111 -> 111111111111 -dqand046 and 11111111111 1111111111111111 -> 11111111111 -dqand047 and 1111111111 1111111111111111 -> 1111111111 -dqand048 and 111111111 1111111111111111 -> 111111111 -dqand049 and 11111111 1111111111111111 -> 11111111 -dqand050 and 1111111 1111111111111111 -> 1111111 -dqand051 and 111111 1111111111111111 -> 111111 -dqand052 and 11111 1111111111111111 -> 11111 -dqand053 and 1111 1111111111111111 -> 1111 -dqand054 and 111 1111111111111111 -> 111 -dqand055 and 11 1111111111111111 -> 11 -dqand056 and 1 1111111111111111 -> 1 -dqand057 and 0 1111111111111111 -> 0 - -dqand150 and 1111111111 1 -> 1 -dqand151 and 111111111 1 -> 1 -dqand152 and 11111111 1 -> 1 -dqand153 and 1111111 1 -> 1 -dqand154 and 111111 1 -> 1 -dqand155 and 11111 1 -> 1 -dqand156 and 1111 1 -> 1 -dqand157 and 111 1 -> 1 -dqand158 and 11 1 -> 1 -dqand159 and 1 1 -> 1 - -dqand160 and 1111111111 0 -> 0 -dqand161 and 111111111 0 -> 0 -dqand162 and 11111111 0 -> 0 -dqand163 and 1111111 0 -> 0 -dqand164 and 111111 0 -> 0 -dqand165 and 11111 0 -> 0 -dqand166 and 1111 0 -> 0 -dqand167 and 111 0 -> 0 -dqand168 and 11 0 -> 0 -dqand169 and 1 0 -> 0 - -dqand170 and 1 1111111111 -> 1 -dqand171 and 1 111111111 -> 1 -dqand172 and 1 11111111 -> 1 -dqand173 and 1 1111111 -> 1 -dqand174 and 1 111111 -> 1 -dqand175 and 1 11111 -> 1 -dqand176 and 1 1111 -> 1 -dqand177 and 1 111 -> 1 -dqand178 and 1 11 -> 1 -dqand179 and 1 1 -> 1 - -dqand180 and 0 1111111111 -> 0 -dqand181 and 0 111111111 -> 0 -dqand182 and 0 11111111 -> 0 -dqand183 and 0 1111111 -> 0 -dqand184 and 0 111111 -> 0 -dqand185 and 0 11111 -> 0 -dqand186 and 0 1111 -> 0 -dqand187 and 0 111 -> 0 -dqand188 and 0 11 -> 0 -dqand189 and 0 1 -> 0 - -dqand090 and 011111111 111111111 -> 11111111 -dqand091 and 101111111 111111111 -> 101111111 -dqand092 and 110111111 111111111 -> 110111111 -dqand093 and 111011111 111111111 -> 111011111 -dqand094 and 111101111 111111111 -> 111101111 -dqand095 and 111110111 111111111 -> 111110111 -dqand096 and 111111011 111111111 -> 111111011 -dqand097 and 111111101 111111111 -> 111111101 -dqand098 and 111111110 111111111 -> 111111110 - -dqand100 and 111111111 011111111 -> 11111111 -dqand101 and 111111111 101111111 -> 101111111 -dqand102 and 111111111 110111111 -> 110111111 -dqand103 and 111111111 111011111 -> 111011111 -dqand104 and 111111111 111101111 -> 111101111 -dqand105 and 111111111 111110111 -> 111110111 -dqand106 and 111111111 111111011 -> 111111011 -dqand107 and 111111111 111111101 -> 111111101 -dqand108 and 111111111 111111110 -> 111111110 - --- non-0/1 should not be accepted, nor should signs -dqand220 and 111111112 111111111 -> NaN Invalid_operation -dqand221 and 333333333 333333333 -> NaN Invalid_operation -dqand222 and 555555555 555555555 -> NaN Invalid_operation -dqand223 and 777777777 777777777 -> NaN Invalid_operation -dqand224 and 999999999 999999999 -> NaN Invalid_operation -dqand225 and 222222222 999999999 -> NaN Invalid_operation -dqand226 and 444444444 999999999 -> NaN Invalid_operation -dqand227 and 666666666 999999999 -> NaN Invalid_operation -dqand228 and 888888888 999999999 -> NaN Invalid_operation -dqand229 and 999999999 222222222 -> NaN Invalid_operation -dqand230 and 999999999 444444444 -> NaN Invalid_operation -dqand231 and 999999999 666666666 -> NaN Invalid_operation -dqand232 and 999999999 888888888 -> NaN Invalid_operation --- a few randoms -dqand240 and 567468689 -934981942 -> NaN Invalid_operation -dqand241 and 567367689 934981942 -> NaN Invalid_operation -dqand242 and -631917772 -706014634 -> NaN Invalid_operation -dqand243 and -756253257 138579234 -> NaN Invalid_operation -dqand244 and 835590149 567435400 -> NaN Invalid_operation --- test MSD -dqand250 and 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqand251 and 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqand252 and 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqand253 and 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqand254 and 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqand255 and 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqand256 and 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqand257 and 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqand258 and 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqand259 and 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqand260 and 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqand261 and 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation -dqand262 and 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqand263 and 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqand264 and 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqand265 and 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation --- test MSD-1 -dqand270 and 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation -dqand271 and 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation -dqand272 and 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation -dqand273 and 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation -dqand274 and 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation -dqand275 and 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation -dqand276 and 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation -dqand277 and 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation --- test LSD -dqand280 and 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation -dqand281 and 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation -dqand282 and 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation -dqand283 and 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation -dqand284 and 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation -dqand285 and 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation -dqand286 and 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation -dqand287 and 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation --- test Middie -dqand288 and 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation -dqand289 and 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation -dqand290 and 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation -dqand291 and 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation -dqand292 and 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation -dqand293 and 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation -dqand294 and 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation -dqand295 and 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation --- signs -dqand296 and -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation -dqand297 and -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation -dqand298 and 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation -dqand299 and 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 110000110000110000001000000 - --- Nmax, Nmin, Ntiny-like -dqand331 and 2 9.99999999E+999 -> NaN Invalid_operation -dqand332 and 3 1E-999 -> NaN Invalid_operation -dqand333 and 4 1.00000000E-999 -> NaN Invalid_operation -dqand334 and 5 1E-900 -> NaN Invalid_operation -dqand335 and 6 -1E-900 -> NaN Invalid_operation -dqand336 and 7 -1.00000000E-999 -> NaN Invalid_operation -dqand337 and 8 -1E-999 -> NaN Invalid_operation -dqand338 and 9 -9.99999999E+999 -> NaN Invalid_operation -dqand341 and 9.99999999E+999 -18 -> NaN Invalid_operation -dqand342 and 1E-999 01 -> NaN Invalid_operation -dqand343 and 1.00000000E-999 -18 -> NaN Invalid_operation -dqand344 and 1E-900 18 -> NaN Invalid_operation -dqand345 and -1E-900 -10 -> NaN Invalid_operation -dqand346 and -1.00000000E-999 18 -> NaN Invalid_operation -dqand347 and -1E-999 10 -> NaN Invalid_operation -dqand348 and -9.99999999E+999 -18 -> NaN Invalid_operation - --- A few other non-integers -dqand361 and 1.0 1 -> NaN Invalid_operation -dqand362 and 1E+1 1 -> NaN Invalid_operation -dqand363 and 0.0 1 -> NaN Invalid_operation -dqand364 and 0E+1 1 -> NaN Invalid_operation -dqand365 and 9.9 1 -> NaN Invalid_operation -dqand366 and 9E+1 1 -> NaN Invalid_operation -dqand371 and 0 1.0 -> NaN Invalid_operation -dqand372 and 0 1E+1 -> NaN Invalid_operation -dqand373 and 0 0.0 -> NaN Invalid_operation -dqand374 and 0 0E+1 -> NaN Invalid_operation -dqand375 and 0 9.9 -> NaN Invalid_operation -dqand376 and 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -dqand780 and -Inf -Inf -> NaN Invalid_operation -dqand781 and -Inf -1000 -> NaN Invalid_operation -dqand782 and -Inf -1 -> NaN Invalid_operation -dqand783 and -Inf -0 -> NaN Invalid_operation -dqand784 and -Inf 0 -> NaN Invalid_operation -dqand785 and -Inf 1 -> NaN Invalid_operation -dqand786 and -Inf 1000 -> NaN Invalid_operation -dqand787 and -1000 -Inf -> NaN Invalid_operation -dqand788 and -Inf -Inf -> NaN Invalid_operation -dqand789 and -1 -Inf -> NaN Invalid_operation -dqand790 and -0 -Inf -> NaN Invalid_operation -dqand791 and 0 -Inf -> NaN Invalid_operation -dqand792 and 1 -Inf -> NaN Invalid_operation -dqand793 and 1000 -Inf -> NaN Invalid_operation -dqand794 and Inf -Inf -> NaN Invalid_operation - -dqand800 and Inf -Inf -> NaN Invalid_operation -dqand801 and Inf -1000 -> NaN Invalid_operation -dqand802 and Inf -1 -> NaN Invalid_operation -dqand803 and Inf -0 -> NaN Invalid_operation -dqand804 and Inf 0 -> NaN Invalid_operation -dqand805 and Inf 1 -> NaN Invalid_operation -dqand806 and Inf 1000 -> NaN Invalid_operation -dqand807 and Inf Inf -> NaN Invalid_operation -dqand808 and -1000 Inf -> NaN Invalid_operation -dqand809 and -Inf Inf -> NaN Invalid_operation -dqand810 and -1 Inf -> NaN Invalid_operation -dqand811 and -0 Inf -> NaN Invalid_operation -dqand812 and 0 Inf -> NaN Invalid_operation -dqand813 and 1 Inf -> NaN Invalid_operation -dqand814 and 1000 Inf -> NaN Invalid_operation -dqand815 and Inf Inf -> NaN Invalid_operation - -dqand821 and NaN -Inf -> NaN Invalid_operation -dqand822 and NaN -1000 -> NaN Invalid_operation -dqand823 and NaN -1 -> NaN Invalid_operation -dqand824 and NaN -0 -> NaN Invalid_operation -dqand825 and NaN 0 -> NaN Invalid_operation -dqand826 and NaN 1 -> NaN Invalid_operation -dqand827 and NaN 1000 -> NaN Invalid_operation -dqand828 and NaN Inf -> NaN Invalid_operation -dqand829 and NaN NaN -> NaN Invalid_operation -dqand830 and -Inf NaN -> NaN Invalid_operation -dqand831 and -1000 NaN -> NaN Invalid_operation -dqand832 and -1 NaN -> NaN Invalid_operation -dqand833 and -0 NaN -> NaN Invalid_operation -dqand834 and 0 NaN -> NaN Invalid_operation -dqand835 and 1 NaN -> NaN Invalid_operation -dqand836 and 1000 NaN -> NaN Invalid_operation -dqand837 and Inf NaN -> NaN Invalid_operation - -dqand841 and sNaN -Inf -> NaN Invalid_operation -dqand842 and sNaN -1000 -> NaN Invalid_operation -dqand843 and sNaN -1 -> NaN Invalid_operation -dqand844 and sNaN -0 -> NaN Invalid_operation -dqand845 and sNaN 0 -> NaN Invalid_operation -dqand846 and sNaN 1 -> NaN Invalid_operation -dqand847 and sNaN 1000 -> NaN Invalid_operation -dqand848 and sNaN NaN -> NaN Invalid_operation -dqand849 and sNaN sNaN -> NaN Invalid_operation -dqand850 and NaN sNaN -> NaN Invalid_operation -dqand851 and -Inf sNaN -> NaN Invalid_operation -dqand852 and -1000 sNaN -> NaN Invalid_operation -dqand853 and -1 sNaN -> NaN Invalid_operation -dqand854 and -0 sNaN -> NaN Invalid_operation -dqand855 and 0 sNaN -> NaN Invalid_operation -dqand856 and 1 sNaN -> NaN Invalid_operation -dqand857 and 1000 sNaN -> NaN Invalid_operation -dqand858 and Inf sNaN -> NaN Invalid_operation -dqand859 and NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqand861 and NaN1 -Inf -> NaN Invalid_operation -dqand862 and +NaN2 -1000 -> NaN Invalid_operation -dqand863 and NaN3 1000 -> NaN Invalid_operation -dqand864 and NaN4 Inf -> NaN Invalid_operation -dqand865 and NaN5 +NaN6 -> NaN Invalid_operation -dqand866 and -Inf NaN7 -> NaN Invalid_operation -dqand867 and -1000 NaN8 -> NaN Invalid_operation -dqand868 and 1000 NaN9 -> NaN Invalid_operation -dqand869 and Inf +NaN10 -> NaN Invalid_operation -dqand871 and sNaN11 -Inf -> NaN Invalid_operation -dqand872 and sNaN12 -1000 -> NaN Invalid_operation -dqand873 and sNaN13 1000 -> NaN Invalid_operation -dqand874 and sNaN14 NaN17 -> NaN Invalid_operation -dqand875 and sNaN15 sNaN18 -> NaN Invalid_operation -dqand876 and NaN16 sNaN19 -> NaN Invalid_operation -dqand877 and -Inf +sNaN20 -> NaN Invalid_operation -dqand878 and -1000 sNaN21 -> NaN Invalid_operation -dqand879 and 1000 sNaN22 -> NaN Invalid_operation -dqand880 and Inf sNaN23 -> NaN Invalid_operation -dqand881 and +NaN25 +sNaN24 -> NaN Invalid_operation -dqand882 and -NaN26 NaN28 -> NaN Invalid_operation -dqand883 and -sNaN27 sNaN29 -> NaN Invalid_operation -dqand884 and 1000 -NaN30 -> NaN Invalid_operation -dqand885 and 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqAnd.decTest -- digitwise logical AND for decQuads -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check (truth table) +dqand001 and 0 0 -> 0 +dqand002 and 0 1 -> 0 +dqand003 and 1 0 -> 0 +dqand004 and 1 1 -> 1 +dqand005 and 1100 1010 -> 1000 +-- and at msd and msd-1 +-- 1234567890123456789012345678901234 +dqand006 and 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqand007 and 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 0 +dqand008 and 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqand009 and 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqand010 and 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqand011 and 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 0 +dqand012 and 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqand013 and 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 + +-- Various lengths +-- 1234567890123456789012345678901234 + +dqand601 and 0111111111111111111111111111111111 1111111111111111111111111111111111 -> 111111111111111111111111111111111 +dqand602 and 1011111111111111111111111111111111 1111111111111111111111111111111111 -> 1011111111111111111111111111111111 +dqand603 and 1101111111111111111111111111111111 1111111111111111111111111111111111 -> 1101111111111111111111111111111111 +dqand604 and 1110111111111111111111111111111111 1111111111111111111111111111111111 -> 1110111111111111111111111111111111 +dqand605 and 1111011111111111111111111111111111 1111111111111111111111111111111111 -> 1111011111111111111111111111111111 +dqand606 and 1111101111111111111111111111111111 1111111111111111111111111111111111 -> 1111101111111111111111111111111111 +dqand607 and 1111110111111111111111111111111111 1111111111111111111111111111111111 -> 1111110111111111111111111111111111 +dqand608 and 1111111011111111111111111111111111 1111111111111111111111111111111111 -> 1111111011111111111111111111111111 +dqand609 and 1111111101111111111111111111111111 1111111111111111111111111111111111 -> 1111111101111111111111111111111111 +dqand610 and 1111111110111111111111111111111111 1111111111111111111111111111111111 -> 1111111110111111111111111111111111 +dqand611 and 1111111111011111111111111111111111 1111111111111111111111111111111111 -> 1111111111011111111111111111111111 +dqand612 and 1111111111101111111111111111111111 1111111111111111111111111111111111 -> 1111111111101111111111111111111111 +dqand613 and 1111111111110111111111111111111111 1111111111111111111111111111111111 -> 1111111111110111111111111111111111 +dqand614 and 1111111111111011111111111111111111 1111111111111111111111111111111111 -> 1111111111111011111111111111111111 +dqand615 and 1111111111111101111111111111111111 1111111111111111111111111111111111 -> 1111111111111101111111111111111111 +dqand616 and 1111111111111110111111111111111111 1111111111111111111111111111111111 -> 1111111111111110111111111111111111 +dqand617 and 1111111111111111011111111111111111 1111111111111111111111111111111111 -> 1111111111111111011111111111111111 +dqand618 and 1111111111111111101111111111111111 1111111111111111111111111111111111 -> 1111111111111111101111111111111111 +dqand619 and 1111111111111111110111111111111111 1111111111111111111111111111111111 -> 1111111111111111110111111111111111 +dqand620 and 1111111111111111111011111111111111 1111111111111111111111111111111111 -> 1111111111111111111011111111111111 +dqand621 and 1111111111111111111101111111111111 1111111111111111111111111111111111 -> 1111111111111111111101111111111111 +dqand622 and 1111111111111111111110111111111111 1111111111111111111111111111111111 -> 1111111111111111111110111111111111 +dqand623 and 1111111111111111111111011111111111 1111111111111111111111111111111111 -> 1111111111111111111111011111111111 +dqand624 and 1111111111111111111111101111111111 1111111111111111111111111111111111 -> 1111111111111111111111101111111111 +dqand625 and 1111111111111111111111110111111111 1111111111111111111111111111111111 -> 1111111111111111111111110111111111 +dqand626 and 1111111111111111111111111011111111 1111111111111111111111111111111111 -> 1111111111111111111111111011111111 +dqand627 and 1111111111111111111111111101111111 1111111111111111111111111111111111 -> 1111111111111111111111111101111111 +dqand628 and 1111111111111111111111111110111111 1111111111111111111111111111111111 -> 1111111111111111111111111110111111 +dqand629 and 1111111111111111111111111111011111 1111111111111111111111111111111111 -> 1111111111111111111111111111011111 +dqand630 and 1111111111111111111111111111101111 1111111111111111111111111111111111 -> 1111111111111111111111111111101111 +dqand631 and 1111111111111111111111111111110111 1111111111111111111111111111111111 -> 1111111111111111111111111111110111 +dqand632 and 1111111111111111111111111111111011 1111111111111111111111111111111111 -> 1111111111111111111111111111111011 +dqand633 and 1111111111111111111111111111111101 1111111111111111111111111111111111 -> 1111111111111111111111111111111101 +dqand634 and 1111111111111111111111111111111110 1111111111111111111111111111111111 -> 1111111111111111111111111111111110 + +dqand641 and 1111111111111111111111111111111111 0111111111111111111111111111111111 -> 111111111111111111111111111111111 +dqand642 and 1111111111111111111111111111111111 1011111111111111111111111111111111 -> 1011111111111111111111111111111111 +dqand643 and 1111111111111111111111111111111111 1101111111111111111111111111111111 -> 1101111111111111111111111111111111 +dqand644 and 1111111111111111111111111111111111 1110111111111111111111111111111111 -> 1110111111111111111111111111111111 +dqand645 and 1111111111111111111111111111111111 1111011111111111111111111111111111 -> 1111011111111111111111111111111111 +dqand646 and 1111111111111111111111111111111111 1111101111111111111111111111111111 -> 1111101111111111111111111111111111 +dqand647 and 1111111111111111111111111111111111 1111110111111111111111111111111111 -> 1111110111111111111111111111111111 +dqand648 and 1111111111111111111111111111111111 1111111011111111111111111111111111 -> 1111111011111111111111111111111111 +dqand649 and 1111111111111111111111111111111111 1111111101111111111111111111111111 -> 1111111101111111111111111111111111 +dqand650 and 1111111111111111111111111111111111 1111111110111111111111111111111111 -> 1111111110111111111111111111111111 +dqand651 and 1111111111111111111111111111111111 1111111111011111111111111111111111 -> 1111111111011111111111111111111111 +dqand652 and 1111111111111111111111111111111111 1111111111101111111111111111111111 -> 1111111111101111111111111111111111 +dqand653 and 1111111111111111111111111111111111 1111111111110111111111111111111111 -> 1111111111110111111111111111111111 +dqand654 and 1111111111111111111111111111111111 1111111111111011111111111111111111 -> 1111111111111011111111111111111111 +dqand655 and 1111111111111111111111111111111111 1111111111111101111111111111111111 -> 1111111111111101111111111111111111 +dqand656 and 1111111111111111111111111111111111 1111111111111110111111111111111111 -> 1111111111111110111111111111111111 +dqand657 and 1111111111111111111111111111111111 1111111111111111011111111111111111 -> 1111111111111111011111111111111111 +dqand658 and 1111111111111111111111111111111111 1111111111111111101111111111111111 -> 1111111111111111101111111111111111 +dqand659 and 1111111111111111111111111111111111 1111111111111111110111111111111111 -> 1111111111111111110111111111111111 +dqand660 and 1111111111111111111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111011111111111111 +dqand661 and 1111111111111111111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111101111111111111 +dqand662 and 1111111111111111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111110111111111111 +dqand663 and 1111111111111111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111011111111111 +dqand664 and 1111111111111111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111101111111111 +dqand665 and 1111111111111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111110111111111 +dqand666 and 1111111111111111111111111111111111 1111111111111111111111111011111111 -> 1111111111111111111111111011111111 +dqand667 and 1111111111111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111101111111 +dqand668 and 1111111111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111110111111 +dqand669 and 1111111111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111011111 +dqand670 and 1111111111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111101111 +dqand671 and 1111111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111110111 +dqand672 and 1111111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111011 +dqand673 and 1111111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111101 +dqand674 and 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 +dqand675 and 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 111111111111111111111111111111110 +dqand676 and 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 + +dqand021 and 1111111111111111 1111111111111111 -> 1111111111111111 +dqand024 and 1111111111111111 111111111111111 -> 111111111111111 +dqand025 and 1111111111111111 11111111111111 -> 11111111111111 +dqand026 and 1111111111111111 1111111111111 -> 1111111111111 +dqand027 and 1111111111111111 111111111111 -> 111111111111 +dqand028 and 1111111111111111 11111111111 -> 11111111111 +dqand029 and 1111111111111111 1111111111 -> 1111111111 +dqand030 and 1111111111111111 111111111 -> 111111111 +dqand031 and 1111111111111111 11111111 -> 11111111 +dqand032 and 1111111111111111 1111111 -> 1111111 +dqand033 and 1111111111111111 111111 -> 111111 +dqand034 and 1111111111111111 11111 -> 11111 +dqand035 and 1111111111111111 1111 -> 1111 +dqand036 and 1111111111111111 111 -> 111 +dqand037 and 1111111111111111 11 -> 11 +dqand038 and 1111111111111111 1 -> 1 +dqand039 and 1111111111111111 0 -> 0 + +dqand040 and 1111111111111111 1111111111111111 -> 1111111111111111 +dqand041 and 111111111111111 1111111111111111 -> 111111111111111 +dqand042 and 111111111111111 1111111111111111 -> 111111111111111 +dqand043 and 11111111111111 1111111111111111 -> 11111111111111 +dqand044 and 1111111111111 1111111111111111 -> 1111111111111 +dqand045 and 111111111111 1111111111111111 -> 111111111111 +dqand046 and 11111111111 1111111111111111 -> 11111111111 +dqand047 and 1111111111 1111111111111111 -> 1111111111 +dqand048 and 111111111 1111111111111111 -> 111111111 +dqand049 and 11111111 1111111111111111 -> 11111111 +dqand050 and 1111111 1111111111111111 -> 1111111 +dqand051 and 111111 1111111111111111 -> 111111 +dqand052 and 11111 1111111111111111 -> 11111 +dqand053 and 1111 1111111111111111 -> 1111 +dqand054 and 111 1111111111111111 -> 111 +dqand055 and 11 1111111111111111 -> 11 +dqand056 and 1 1111111111111111 -> 1 +dqand057 and 0 1111111111111111 -> 0 + +dqand150 and 1111111111 1 -> 1 +dqand151 and 111111111 1 -> 1 +dqand152 and 11111111 1 -> 1 +dqand153 and 1111111 1 -> 1 +dqand154 and 111111 1 -> 1 +dqand155 and 11111 1 -> 1 +dqand156 and 1111 1 -> 1 +dqand157 and 111 1 -> 1 +dqand158 and 11 1 -> 1 +dqand159 and 1 1 -> 1 + +dqand160 and 1111111111 0 -> 0 +dqand161 and 111111111 0 -> 0 +dqand162 and 11111111 0 -> 0 +dqand163 and 1111111 0 -> 0 +dqand164 and 111111 0 -> 0 +dqand165 and 11111 0 -> 0 +dqand166 and 1111 0 -> 0 +dqand167 and 111 0 -> 0 +dqand168 and 11 0 -> 0 +dqand169 and 1 0 -> 0 + +dqand170 and 1 1111111111 -> 1 +dqand171 and 1 111111111 -> 1 +dqand172 and 1 11111111 -> 1 +dqand173 and 1 1111111 -> 1 +dqand174 and 1 111111 -> 1 +dqand175 and 1 11111 -> 1 +dqand176 and 1 1111 -> 1 +dqand177 and 1 111 -> 1 +dqand178 and 1 11 -> 1 +dqand179 and 1 1 -> 1 + +dqand180 and 0 1111111111 -> 0 +dqand181 and 0 111111111 -> 0 +dqand182 and 0 11111111 -> 0 +dqand183 and 0 1111111 -> 0 +dqand184 and 0 111111 -> 0 +dqand185 and 0 11111 -> 0 +dqand186 and 0 1111 -> 0 +dqand187 and 0 111 -> 0 +dqand188 and 0 11 -> 0 +dqand189 and 0 1 -> 0 + +dqand090 and 011111111 111111111 -> 11111111 +dqand091 and 101111111 111111111 -> 101111111 +dqand092 and 110111111 111111111 -> 110111111 +dqand093 and 111011111 111111111 -> 111011111 +dqand094 and 111101111 111111111 -> 111101111 +dqand095 and 111110111 111111111 -> 111110111 +dqand096 and 111111011 111111111 -> 111111011 +dqand097 and 111111101 111111111 -> 111111101 +dqand098 and 111111110 111111111 -> 111111110 + +dqand100 and 111111111 011111111 -> 11111111 +dqand101 and 111111111 101111111 -> 101111111 +dqand102 and 111111111 110111111 -> 110111111 +dqand103 and 111111111 111011111 -> 111011111 +dqand104 and 111111111 111101111 -> 111101111 +dqand105 and 111111111 111110111 -> 111110111 +dqand106 and 111111111 111111011 -> 111111011 +dqand107 and 111111111 111111101 -> 111111101 +dqand108 and 111111111 111111110 -> 111111110 + +-- non-0/1 should not be accepted, nor should signs +dqand220 and 111111112 111111111 -> NaN Invalid_operation +dqand221 and 333333333 333333333 -> NaN Invalid_operation +dqand222 and 555555555 555555555 -> NaN Invalid_operation +dqand223 and 777777777 777777777 -> NaN Invalid_operation +dqand224 and 999999999 999999999 -> NaN Invalid_operation +dqand225 and 222222222 999999999 -> NaN Invalid_operation +dqand226 and 444444444 999999999 -> NaN Invalid_operation +dqand227 and 666666666 999999999 -> NaN Invalid_operation +dqand228 and 888888888 999999999 -> NaN Invalid_operation +dqand229 and 999999999 222222222 -> NaN Invalid_operation +dqand230 and 999999999 444444444 -> NaN Invalid_operation +dqand231 and 999999999 666666666 -> NaN Invalid_operation +dqand232 and 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +dqand240 and 567468689 -934981942 -> NaN Invalid_operation +dqand241 and 567367689 934981942 -> NaN Invalid_operation +dqand242 and -631917772 -706014634 -> NaN Invalid_operation +dqand243 and -756253257 138579234 -> NaN Invalid_operation +dqand244 and 835590149 567435400 -> NaN Invalid_operation +-- test MSD +dqand250 and 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqand251 and 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqand252 and 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqand253 and 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqand254 and 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqand255 and 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqand256 and 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqand257 and 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqand258 and 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqand259 and 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqand260 and 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqand261 and 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +dqand262 and 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqand263 and 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqand264 and 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqand265 and 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +-- test MSD-1 +dqand270 and 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation +dqand271 and 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation +dqand272 and 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation +dqand273 and 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation +dqand274 and 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation +dqand275 and 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation +dqand276 and 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation +dqand277 and 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation +-- test LSD +dqand280 and 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation +dqand281 and 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation +dqand282 and 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation +dqand283 and 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation +dqand284 and 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation +dqand285 and 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation +dqand286 and 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation +dqand287 and 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation +-- test Middie +dqand288 and 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation +dqand289 and 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation +dqand290 and 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation +dqand291 and 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation +dqand292 and 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation +dqand293 and 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation +dqand294 and 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation +dqand295 and 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation +-- signs +dqand296 and -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation +dqand297 and -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation +dqand298 and 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation +dqand299 and 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 110000110000110000001000000 + +-- Nmax, Nmin, Ntiny-like +dqand331 and 2 9.99999999E+999 -> NaN Invalid_operation +dqand332 and 3 1E-999 -> NaN Invalid_operation +dqand333 and 4 1.00000000E-999 -> NaN Invalid_operation +dqand334 and 5 1E-900 -> NaN Invalid_operation +dqand335 and 6 -1E-900 -> NaN Invalid_operation +dqand336 and 7 -1.00000000E-999 -> NaN Invalid_operation +dqand337 and 8 -1E-999 -> NaN Invalid_operation +dqand338 and 9 -9.99999999E+999 -> NaN Invalid_operation +dqand341 and 9.99999999E+999 -18 -> NaN Invalid_operation +dqand342 and 1E-999 01 -> NaN Invalid_operation +dqand343 and 1.00000000E-999 -18 -> NaN Invalid_operation +dqand344 and 1E-900 18 -> NaN Invalid_operation +dqand345 and -1E-900 -10 -> NaN Invalid_operation +dqand346 and -1.00000000E-999 18 -> NaN Invalid_operation +dqand347 and -1E-999 10 -> NaN Invalid_operation +dqand348 and -9.99999999E+999 -18 -> NaN Invalid_operation + +-- A few other non-integers +dqand361 and 1.0 1 -> NaN Invalid_operation +dqand362 and 1E+1 1 -> NaN Invalid_operation +dqand363 and 0.0 1 -> NaN Invalid_operation +dqand364 and 0E+1 1 -> NaN Invalid_operation +dqand365 and 9.9 1 -> NaN Invalid_operation +dqand366 and 9E+1 1 -> NaN Invalid_operation +dqand371 and 0 1.0 -> NaN Invalid_operation +dqand372 and 0 1E+1 -> NaN Invalid_operation +dqand373 and 0 0.0 -> NaN Invalid_operation +dqand374 and 0 0E+1 -> NaN Invalid_operation +dqand375 and 0 9.9 -> NaN Invalid_operation +dqand376 and 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +dqand780 and -Inf -Inf -> NaN Invalid_operation +dqand781 and -Inf -1000 -> NaN Invalid_operation +dqand782 and -Inf -1 -> NaN Invalid_operation +dqand783 and -Inf -0 -> NaN Invalid_operation +dqand784 and -Inf 0 -> NaN Invalid_operation +dqand785 and -Inf 1 -> NaN Invalid_operation +dqand786 and -Inf 1000 -> NaN Invalid_operation +dqand787 and -1000 -Inf -> NaN Invalid_operation +dqand788 and -Inf -Inf -> NaN Invalid_operation +dqand789 and -1 -Inf -> NaN Invalid_operation +dqand790 and -0 -Inf -> NaN Invalid_operation +dqand791 and 0 -Inf -> NaN Invalid_operation +dqand792 and 1 -Inf -> NaN Invalid_operation +dqand793 and 1000 -Inf -> NaN Invalid_operation +dqand794 and Inf -Inf -> NaN Invalid_operation + +dqand800 and Inf -Inf -> NaN Invalid_operation +dqand801 and Inf -1000 -> NaN Invalid_operation +dqand802 and Inf -1 -> NaN Invalid_operation +dqand803 and Inf -0 -> NaN Invalid_operation +dqand804 and Inf 0 -> NaN Invalid_operation +dqand805 and Inf 1 -> NaN Invalid_operation +dqand806 and Inf 1000 -> NaN Invalid_operation +dqand807 and Inf Inf -> NaN Invalid_operation +dqand808 and -1000 Inf -> NaN Invalid_operation +dqand809 and -Inf Inf -> NaN Invalid_operation +dqand810 and -1 Inf -> NaN Invalid_operation +dqand811 and -0 Inf -> NaN Invalid_operation +dqand812 and 0 Inf -> NaN Invalid_operation +dqand813 and 1 Inf -> NaN Invalid_operation +dqand814 and 1000 Inf -> NaN Invalid_operation +dqand815 and Inf Inf -> NaN Invalid_operation + +dqand821 and NaN -Inf -> NaN Invalid_operation +dqand822 and NaN -1000 -> NaN Invalid_operation +dqand823 and NaN -1 -> NaN Invalid_operation +dqand824 and NaN -0 -> NaN Invalid_operation +dqand825 and NaN 0 -> NaN Invalid_operation +dqand826 and NaN 1 -> NaN Invalid_operation +dqand827 and NaN 1000 -> NaN Invalid_operation +dqand828 and NaN Inf -> NaN Invalid_operation +dqand829 and NaN NaN -> NaN Invalid_operation +dqand830 and -Inf NaN -> NaN Invalid_operation +dqand831 and -1000 NaN -> NaN Invalid_operation +dqand832 and -1 NaN -> NaN Invalid_operation +dqand833 and -0 NaN -> NaN Invalid_operation +dqand834 and 0 NaN -> NaN Invalid_operation +dqand835 and 1 NaN -> NaN Invalid_operation +dqand836 and 1000 NaN -> NaN Invalid_operation +dqand837 and Inf NaN -> NaN Invalid_operation + +dqand841 and sNaN -Inf -> NaN Invalid_operation +dqand842 and sNaN -1000 -> NaN Invalid_operation +dqand843 and sNaN -1 -> NaN Invalid_operation +dqand844 and sNaN -0 -> NaN Invalid_operation +dqand845 and sNaN 0 -> NaN Invalid_operation +dqand846 and sNaN 1 -> NaN Invalid_operation +dqand847 and sNaN 1000 -> NaN Invalid_operation +dqand848 and sNaN NaN -> NaN Invalid_operation +dqand849 and sNaN sNaN -> NaN Invalid_operation +dqand850 and NaN sNaN -> NaN Invalid_operation +dqand851 and -Inf sNaN -> NaN Invalid_operation +dqand852 and -1000 sNaN -> NaN Invalid_operation +dqand853 and -1 sNaN -> NaN Invalid_operation +dqand854 and -0 sNaN -> NaN Invalid_operation +dqand855 and 0 sNaN -> NaN Invalid_operation +dqand856 and 1 sNaN -> NaN Invalid_operation +dqand857 and 1000 sNaN -> NaN Invalid_operation +dqand858 and Inf sNaN -> NaN Invalid_operation +dqand859 and NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqand861 and NaN1 -Inf -> NaN Invalid_operation +dqand862 and +NaN2 -1000 -> NaN Invalid_operation +dqand863 and NaN3 1000 -> NaN Invalid_operation +dqand864 and NaN4 Inf -> NaN Invalid_operation +dqand865 and NaN5 +NaN6 -> NaN Invalid_operation +dqand866 and -Inf NaN7 -> NaN Invalid_operation +dqand867 and -1000 NaN8 -> NaN Invalid_operation +dqand868 and 1000 NaN9 -> NaN Invalid_operation +dqand869 and Inf +NaN10 -> NaN Invalid_operation +dqand871 and sNaN11 -Inf -> NaN Invalid_operation +dqand872 and sNaN12 -1000 -> NaN Invalid_operation +dqand873 and sNaN13 1000 -> NaN Invalid_operation +dqand874 and sNaN14 NaN17 -> NaN Invalid_operation +dqand875 and sNaN15 sNaN18 -> NaN Invalid_operation +dqand876 and NaN16 sNaN19 -> NaN Invalid_operation +dqand877 and -Inf +sNaN20 -> NaN Invalid_operation +dqand878 and -1000 sNaN21 -> NaN Invalid_operation +dqand879 and 1000 sNaN22 -> NaN Invalid_operation +dqand880 and Inf sNaN23 -> NaN Invalid_operation +dqand881 and +NaN25 +sNaN24 -> NaN Invalid_operation +dqand882 and -NaN26 NaN28 -> NaN Invalid_operation +dqand883 and -sNaN27 sNaN29 -> NaN Invalid_operation +dqand884 and 1000 -NaN30 -> NaN Invalid_operation +dqand885 and 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqBase.decTest b/Lib/test/decimaltestdata/dqBase.decTest index 6bb463388e1..d09c6bf02cc 100644 --- a/Lib/test/decimaltestdata/dqBase.decTest +++ b/Lib/test/decimaltestdata/dqBase.decTest @@ -1,1081 +1,1081 @@ ------------------------------------------------------------------------- --- dqBase.decTest -- base decQuad <--> string conversions -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests base conversions from string to a decimal number --- and back to a string (in Scientific form) - --- Note that unlike other operations the operand is subject to rounding --- to conform to emax and precision settings (that is, numbers will --- conform to rules and exponent will be in permitted range). The --- 'left hand side', therefore, may have numbers that cannot be --- represented in a decQuad. Some testcases go to the limit of the --- next-wider format, and hence these testcases may also be used to --- test narrowing and widening operations. - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqbas001 toSci 0 -> 0 -dqbas002 toSci 1 -> 1 -dqbas003 toSci 1.0 -> 1.0 -dqbas004 toSci 1.00 -> 1.00 -dqbas005 toSci 10 -> 10 -dqbas006 toSci 1000 -> 1000 -dqbas007 toSci 10.0 -> 10.0 -dqbas008 toSci 10.1 -> 10.1 -dqbas009 toSci 10.4 -> 10.4 -dqbas010 toSci 10.5 -> 10.5 -dqbas011 toSci 10.6 -> 10.6 -dqbas012 toSci 10.9 -> 10.9 -dqbas013 toSci 11.0 -> 11.0 -dqbas014 toSci 1.234 -> 1.234 -dqbas015 toSci 0.123 -> 0.123 -dqbas016 toSci 0.012 -> 0.012 -dqbas017 toSci -0 -> -0 -dqbas018 toSci -0.0 -> -0.0 -dqbas019 toSci -00.00 -> -0.00 - -dqbas021 toSci -1 -> -1 -dqbas022 toSci -1.0 -> -1.0 -dqbas023 toSci -0.1 -> -0.1 -dqbas024 toSci -9.1 -> -9.1 -dqbas025 toSci -9.11 -> -9.11 -dqbas026 toSci -9.119 -> -9.119 -dqbas027 toSci -9.999 -> -9.999 - -dqbas030 toSci '123456789.123456' -> '123456789.123456' -dqbas031 toSci '123456789.000000' -> '123456789.000000' -dqbas032 toSci '123456789123456' -> '123456789123456' -dqbas033 toSci '0.0000123456789' -> '0.0000123456789' -dqbas034 toSci '0.00000123456789' -> '0.00000123456789' -dqbas035 toSci '0.000000123456789' -> '1.23456789E-7' -dqbas036 toSci '0.0000000123456789' -> '1.23456789E-8' - -dqbas037 toSci '0.123456789012344' -> '0.123456789012344' -dqbas038 toSci '0.123456789012345' -> '0.123456789012345' - --- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) -dqbsn001 toSci -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqbsn002 toSci -1E-6143 -> -1E-6143 -dqbsn003 toSci -1E-6176 -> -1E-6176 Subnormal -dqbsn004 toSci -0 -> -0 -dqbsn005 toSci +0 -> 0 -dqbsn006 toSci +1E-6176 -> 1E-6176 Subnormal -dqbsn007 toSci +1E-6143 -> 1E-6143 -dqbsn008 toSci +9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 - --- String [many more examples are implicitly tested elsewhere] --- strings without E cannot generate E in result -dqbas040 toSci "12" -> '12' -dqbas041 toSci "-76" -> '-76' -dqbas042 toSci "12.76" -> '12.76' -dqbas043 toSci "+12.76" -> '12.76' -dqbas044 toSci "012.76" -> '12.76' -dqbas045 toSci "+0.003" -> '0.003' -dqbas046 toSci "17." -> '17' -dqbas047 toSci ".5" -> '0.5' -dqbas048 toSci "044" -> '44' -dqbas049 toSci "0044" -> '44' -dqbas050 toSci "0.0005" -> '0.0005' -dqbas051 toSci "00.00005" -> '0.00005' -dqbas052 toSci "0.000005" -> '0.000005' -dqbas053 toSci "0.0000050" -> '0.0000050' -dqbas054 toSci "0.0000005" -> '5E-7' -dqbas055 toSci "0.00000005" -> '5E-8' -dqbas056 toSci "12345678.543210" -> '12345678.543210' -dqbas057 toSci "2345678.543210" -> '2345678.543210' -dqbas058 toSci "345678.543210" -> '345678.543210' -dqbas059 toSci "0345678.54321" -> '345678.54321' -dqbas060 toSci "345678.5432" -> '345678.5432' -dqbas061 toSci "+345678.5432" -> '345678.5432' -dqbas062 toSci "+0345678.5432" -> '345678.5432' -dqbas063 toSci "+00345678.5432" -> '345678.5432' -dqbas064 toSci "-345678.5432" -> '-345678.5432' -dqbas065 toSci "-0345678.5432" -> '-345678.5432' -dqbas066 toSci "-00345678.5432" -> '-345678.5432' --- examples -dqbas067 toSci "5E-6" -> '0.000005' -dqbas068 toSci "50E-7" -> '0.0000050' -dqbas069 toSci "5E-7" -> '5E-7' - --- [No exotics as no Unicode] - --- rounded with dots in all (including edge) places -dqbas071 toSci .1234567891234567890123456780123456123 -> 0.1234567891234567890123456780123456 Inexact Rounded -dqbas072 toSci 1.234567891234567890123456780123456123 -> 1.234567891234567890123456780123456 Inexact Rounded -dqbas073 toSci 12.34567891234567890123456780123456123 -> 12.34567891234567890123456780123456 Inexact Rounded -dqbas074 toSci 123.4567891234567890123456780123456123 -> 123.4567891234567890123456780123456 Inexact Rounded -dqbas075 toSci 1234.567891234567890123456780123456123 -> 1234.567891234567890123456780123456 Inexact Rounded -dqbas076 toSci 12345.67891234567890123456780123456123 -> 12345.67891234567890123456780123456 Inexact Rounded -dqbas077 toSci 123456.7891234567890123456780123456123 -> 123456.7891234567890123456780123456 Inexact Rounded -dqbas078 toSci 1234567.891234567890123456780123456123 -> 1234567.891234567890123456780123456 Inexact Rounded -dqbas079 toSci 12345678.91234567890123456780123456123 -> 12345678.91234567890123456780123456 Inexact Rounded -dqbas080 toSci 123456789.1234567890123456780123456123 -> 123456789.1234567890123456780123456 Inexact Rounded -dqbas081 toSci 1234567891.234567890123456780123456123 -> 1234567891.234567890123456780123456 Inexact Rounded -dqbas082 toSci 12345678912.34567890123456780123456123 -> 12345678912.34567890123456780123456 Inexact Rounded -dqbas083 toSci 123456789123.4567890123456780123456123 -> 123456789123.4567890123456780123456 Inexact Rounded -dqbas084 toSci 1234567891234.567890123456780123456123 -> 1234567891234.567890123456780123456 Inexact Rounded -dqbas085 toSci 12345678912345.67890123456780123456123 -> 12345678912345.67890123456780123456 Inexact Rounded -dqbas086 toSci 123456789123456.7890123456780123456123 -> 123456789123456.7890123456780123456 Inexact Rounded -dqbas087 toSci 1234567891234567.890123456780123456123 -> 1234567891234567.890123456780123456 Inexact Rounded -dqbas088 toSci 12345678912345678.90123456780123456123 -> 12345678912345678.90123456780123456 Inexact Rounded -dqbas089 toSci 123456789123456789.0123456780123456123 -> 123456789123456789.0123456780123456 Inexact Rounded -dqbas090 toSci 1234567891234567890.123456780123456123 -> 1234567891234567890.123456780123456 Inexact Rounded -dqbas091 toSci 12345678912345678901.23456780123456123 -> 12345678912345678901.23456780123456 Inexact Rounded -dqbas092 toSci 123456789123456789012.3456780123456123 -> 123456789123456789012.3456780123456 Inexact Rounded -dqbas093 toSci 1234567891234567890123.456780123456123 -> 1234567891234567890123.456780123456 Inexact Rounded -dqbas094 toSci 12345678912345678901234.56780123456123 -> 12345678912345678901234.56780123456 Inexact Rounded -dqbas095 toSci 123456789123456789012345.6780123456123 -> 123456789123456789012345.6780123456 Inexact Rounded -dqbas096 toSci 1234567891234567890123456.780123456123 -> 1234567891234567890123456.780123456 Inexact Rounded -dqbas097 toSci 12345678912345678901234567.80123456123 -> 12345678912345678901234567.80123456 Inexact Rounded -dqbas098 toSci 123456789123456789012345678.0123456123 -> 123456789123456789012345678.0123456 Inexact Rounded -dqbas099 toSci 1234567891234567890123456780.123456123 -> 1234567891234567890123456780.123456 Inexact Rounded -dqbas100 toSci 12345678912345678901234567801.23456123 -> 12345678912345678901234567801.23456 Inexact Rounded -dqbas101 toSci 123456789123456789012345678012.3456123 -> 123456789123456789012345678012.3456 Inexact Rounded -dqbas102 toSci 1234567891234567890123456780123.456123 -> 1234567891234567890123456780123.456 Inexact Rounded -dqbas103 toSci 12345678912345678901234567801234.56123 -> 12345678912345678901234567801234.56 Inexact Rounded -dqbas104 toSci 123456789123456789012345678012345.6123 -> 123456789123456789012345678012345.6 Inexact Rounded -dqbas105 toSci 1234567891234567890123456780123456.123 -> 1234567891234567890123456780123456 Inexact Rounded -dqbas106 toSci 12345678912345678901234567801234561.23 -> 1.234567891234567890123456780123456E+34 Inexact Rounded -dqbas107 toSci 123456789123456789012345678012345612.3 -> 1.234567891234567890123456780123456E+35 Inexact Rounded -dqbas108 toSci 1234567891234567890123456780123456123. -> 1.234567891234567890123456780123456E+36 Inexact Rounded --- 123456789012345678 - --- Numbers with E -dqbas130 toSci "0.000E-1" -> '0.0000' -dqbas131 toSci "0.000E-2" -> '0.00000' -dqbas132 toSci "0.000E-3" -> '0.000000' -dqbas133 toSci "0.000E-4" -> '0E-7' -dqbas134 toSci "0.00E-2" -> '0.0000' -dqbas135 toSci "0.00E-3" -> '0.00000' -dqbas136 toSci "0.00E-4" -> '0.000000' -dqbas137 toSci "0.00E-5" -> '0E-7' -dqbas138 toSci "+0E+9" -> '0E+9' -dqbas139 toSci "-0E+9" -> '-0E+9' -dqbas140 toSci "1E+9" -> '1E+9' -dqbas141 toSci "1e+09" -> '1E+9' -dqbas142 toSci "1E+90" -> '1E+90' -dqbas143 toSci "+1E+009" -> '1E+9' -dqbas144 toSci "0E+9" -> '0E+9' -dqbas145 toSci "1E+9" -> '1E+9' -dqbas146 toSci "1E+09" -> '1E+9' -dqbas147 toSci "1e+90" -> '1E+90' -dqbas148 toSci "1E+009" -> '1E+9' -dqbas149 toSci "000E+9" -> '0E+9' -dqbas150 toSci "1E9" -> '1E+9' -dqbas151 toSci "1e09" -> '1E+9' -dqbas152 toSci "1E90" -> '1E+90' -dqbas153 toSci "1E009" -> '1E+9' -dqbas154 toSci "0E9" -> '0E+9' -dqbas155 toSci "0.000e+0" -> '0.000' -dqbas156 toSci "0.000E-1" -> '0.0000' -dqbas157 toSci "4E+9" -> '4E+9' -dqbas158 toSci "44E+9" -> '4.4E+10' -dqbas159 toSci "0.73e-7" -> '7.3E-8' -dqbas160 toSci "00E+9" -> '0E+9' -dqbas161 toSci "00E-9" -> '0E-9' -dqbas162 toSci "10E+9" -> '1.0E+10' -dqbas163 toSci "10E+09" -> '1.0E+10' -dqbas164 toSci "10e+90" -> '1.0E+91' -dqbas165 toSci "10E+009" -> '1.0E+10' -dqbas166 toSci "100e+9" -> '1.00E+11' -dqbas167 toSci "100e+09" -> '1.00E+11' -dqbas168 toSci "100E+90" -> '1.00E+92' -dqbas169 toSci "100e+009" -> '1.00E+11' - -dqbas170 toSci "1.265" -> '1.265' -dqbas171 toSci "1.265E-20" -> '1.265E-20' -dqbas172 toSci "1.265E-8" -> '1.265E-8' -dqbas173 toSci "1.265E-4" -> '0.0001265' -dqbas174 toSci "1.265E-3" -> '0.001265' -dqbas175 toSci "1.265E-2" -> '0.01265' -dqbas176 toSci "1.265E-1" -> '0.1265' -dqbas177 toSci "1.265E-0" -> '1.265' -dqbas178 toSci "1.265E+1" -> '12.65' -dqbas179 toSci "1.265E+2" -> '126.5' -dqbas180 toSci "1.265E+3" -> '1265' -dqbas181 toSci "1.265E+4" -> '1.265E+4' -dqbas182 toSci "1.265E+8" -> '1.265E+8' -dqbas183 toSci "1.265E+20" -> '1.265E+20' - -dqbas190 toSci "12.65" -> '12.65' -dqbas191 toSci "12.65E-20" -> '1.265E-19' -dqbas192 toSci "12.65E-8" -> '1.265E-7' -dqbas193 toSci "12.65E-4" -> '0.001265' -dqbas194 toSci "12.65E-3" -> '0.01265' -dqbas195 toSci "12.65E-2" -> '0.1265' -dqbas196 toSci "12.65E-1" -> '1.265' -dqbas197 toSci "12.65E-0" -> '12.65' -dqbas198 toSci "12.65E+1" -> '126.5' -dqbas199 toSci "12.65E+2" -> '1265' -dqbas200 toSci "12.65E+3" -> '1.265E+4' -dqbas201 toSci "12.65E+4" -> '1.265E+5' -dqbas202 toSci "12.65E+8" -> '1.265E+9' -dqbas203 toSci "12.65E+20" -> '1.265E+21' - -dqbas210 toSci "126.5" -> '126.5' -dqbas211 toSci "126.5E-20" -> '1.265E-18' -dqbas212 toSci "126.5E-8" -> '0.000001265' -dqbas213 toSci "126.5E-4" -> '0.01265' -dqbas214 toSci "126.5E-3" -> '0.1265' -dqbas215 toSci "126.5E-2" -> '1.265' -dqbas216 toSci "126.5E-1" -> '12.65' -dqbas217 toSci "126.5E-0" -> '126.5' -dqbas218 toSci "126.5E+1" -> '1265' -dqbas219 toSci "126.5E+2" -> '1.265E+4' -dqbas220 toSci "126.5E+3" -> '1.265E+5' -dqbas221 toSci "126.5E+4" -> '1.265E+6' -dqbas222 toSci "126.5E+8" -> '1.265E+10' -dqbas223 toSci "126.5E+20" -> '1.265E+22' - -dqbas230 toSci "1265" -> '1265' -dqbas231 toSci "1265E-20" -> '1.265E-17' -dqbas232 toSci "1265E-8" -> '0.00001265' -dqbas233 toSci "1265E-4" -> '0.1265' -dqbas234 toSci "1265E-3" -> '1.265' -dqbas235 toSci "1265E-2" -> '12.65' -dqbas236 toSci "1265E-1" -> '126.5' -dqbas237 toSci "1265E-0" -> '1265' -dqbas238 toSci "1265E+1" -> '1.265E+4' -dqbas239 toSci "1265E+2" -> '1.265E+5' -dqbas240 toSci "1265E+3" -> '1.265E+6' -dqbas241 toSci "1265E+4" -> '1.265E+7' -dqbas242 toSci "1265E+8" -> '1.265E+11' -dqbas243 toSci "1265E+20" -> '1.265E+23' - -dqbas250 toSci "0.1265" -> '0.1265' -dqbas251 toSci "0.1265E-20" -> '1.265E-21' -dqbas252 toSci "0.1265E-8" -> '1.265E-9' -dqbas253 toSci "0.1265E-4" -> '0.00001265' -dqbas254 toSci "0.1265E-3" -> '0.0001265' -dqbas255 toSci "0.1265E-2" -> '0.001265' -dqbas256 toSci "0.1265E-1" -> '0.01265' -dqbas257 toSci "0.1265E-0" -> '0.1265' -dqbas258 toSci "0.1265E+1" -> '1.265' -dqbas259 toSci "0.1265E+2" -> '12.65' -dqbas260 toSci "0.1265E+3" -> '126.5' -dqbas261 toSci "0.1265E+4" -> '1265' -dqbas262 toSci "0.1265E+8" -> '1.265E+7' -dqbas263 toSci "0.1265E+20" -> '1.265E+19' - --- some more negative zeros [systematic tests below] -dqbas290 toSci "-0.000E-1" -> '-0.0000' -dqbas291 toSci "-0.000E-2" -> '-0.00000' -dqbas292 toSci "-0.000E-3" -> '-0.000000' -dqbas293 toSci "-0.000E-4" -> '-0E-7' -dqbas294 toSci "-0.00E-2" -> '-0.0000' -dqbas295 toSci "-0.00E-3" -> '-0.00000' -dqbas296 toSci "-0.0E-2" -> '-0.000' -dqbas297 toSci "-0.0E-3" -> '-0.0000' -dqbas298 toSci "-0E-2" -> '-0.00' -dqbas299 toSci "-0E-3" -> '-0.000' - --- Engineering notation tests -dqbas301 toSci 10e12 -> 1.0E+13 -dqbas302 toEng 10e12 -> 10E+12 -dqbas303 toSci 10e11 -> 1.0E+12 -dqbas304 toEng 10e11 -> 1.0E+12 -dqbas305 toSci 10e10 -> 1.0E+11 -dqbas306 toEng 10e10 -> 100E+9 -dqbas307 toSci 10e9 -> 1.0E+10 -dqbas308 toEng 10e9 -> 10E+9 -dqbas309 toSci 10e8 -> 1.0E+9 -dqbas310 toEng 10e8 -> 1.0E+9 -dqbas311 toSci 10e7 -> 1.0E+8 -dqbas312 toEng 10e7 -> 100E+6 -dqbas313 toSci 10e6 -> 1.0E+7 -dqbas314 toEng 10e6 -> 10E+6 -dqbas315 toSci 10e5 -> 1.0E+6 -dqbas316 toEng 10e5 -> 1.0E+6 -dqbas317 toSci 10e4 -> 1.0E+5 -dqbas318 toEng 10e4 -> 100E+3 -dqbas319 toSci 10e3 -> 1.0E+4 -dqbas320 toEng 10e3 -> 10E+3 -dqbas321 toSci 10e2 -> 1.0E+3 -dqbas322 toEng 10e2 -> 1.0E+3 -dqbas323 toSci 10e1 -> 1.0E+2 -dqbas324 toEng 10e1 -> 100 -dqbas325 toSci 10e0 -> 10 -dqbas326 toEng 10e0 -> 10 -dqbas327 toSci 10e-1 -> 1.0 -dqbas328 toEng 10e-1 -> 1.0 -dqbas329 toSci 10e-2 -> 0.10 -dqbas330 toEng 10e-2 -> 0.10 -dqbas331 toSci 10e-3 -> 0.010 -dqbas332 toEng 10e-3 -> 0.010 -dqbas333 toSci 10e-4 -> 0.0010 -dqbas334 toEng 10e-4 -> 0.0010 -dqbas335 toSci 10e-5 -> 0.00010 -dqbas336 toEng 10e-5 -> 0.00010 -dqbas337 toSci 10e-6 -> 0.000010 -dqbas338 toEng 10e-6 -> 0.000010 -dqbas339 toSci 10e-7 -> 0.0000010 -dqbas340 toEng 10e-7 -> 0.0000010 -dqbas341 toSci 10e-8 -> 1.0E-7 -dqbas342 toEng 10e-8 -> 100E-9 -dqbas343 toSci 10e-9 -> 1.0E-8 -dqbas344 toEng 10e-9 -> 10E-9 -dqbas345 toSci 10e-10 -> 1.0E-9 -dqbas346 toEng 10e-10 -> 1.0E-9 -dqbas347 toSci 10e-11 -> 1.0E-10 -dqbas348 toEng 10e-11 -> 100E-12 -dqbas349 toSci 10e-12 -> 1.0E-11 -dqbas350 toEng 10e-12 -> 10E-12 -dqbas351 toSci 10e-13 -> 1.0E-12 -dqbas352 toEng 10e-13 -> 1.0E-12 - -dqbas361 toSci 7E12 -> 7E+12 -dqbas362 toEng 7E12 -> 7E+12 -dqbas363 toSci 7E11 -> 7E+11 -dqbas364 toEng 7E11 -> 700E+9 -dqbas365 toSci 7E10 -> 7E+10 -dqbas366 toEng 7E10 -> 70E+9 -dqbas367 toSci 7E9 -> 7E+9 -dqbas368 toEng 7E9 -> 7E+9 -dqbas369 toSci 7E8 -> 7E+8 -dqbas370 toEng 7E8 -> 700E+6 -dqbas371 toSci 7E7 -> 7E+7 -dqbas372 toEng 7E7 -> 70E+6 -dqbas373 toSci 7E6 -> 7E+6 -dqbas374 toEng 7E6 -> 7E+6 -dqbas375 toSci 7E5 -> 7E+5 -dqbas376 toEng 7E5 -> 700E+3 -dqbas377 toSci 7E4 -> 7E+4 -dqbas378 toEng 7E4 -> 70E+3 -dqbas379 toSci 7E3 -> 7E+3 -dqbas380 toEng 7E3 -> 7E+3 -dqbas381 toSci 7E2 -> 7E+2 -dqbas382 toEng 7E2 -> 700 -dqbas383 toSci 7E1 -> 7E+1 -dqbas384 toEng 7E1 -> 70 -dqbas385 toSci 7E0 -> 7 -dqbas386 toEng 7E0 -> 7 -dqbas387 toSci 7E-1 -> 0.7 -dqbas388 toEng 7E-1 -> 0.7 -dqbas389 toSci 7E-2 -> 0.07 -dqbas390 toEng 7E-2 -> 0.07 -dqbas391 toSci 7E-3 -> 0.007 -dqbas392 toEng 7E-3 -> 0.007 -dqbas393 toSci 7E-4 -> 0.0007 -dqbas394 toEng 7E-4 -> 0.0007 -dqbas395 toSci 7E-5 -> 0.00007 -dqbas396 toEng 7E-5 -> 0.00007 -dqbas397 toSci 7E-6 -> 0.000007 -dqbas398 toEng 7E-6 -> 0.000007 -dqbas399 toSci 7E-7 -> 7E-7 -dqbas400 toEng 7E-7 -> 700E-9 -dqbas401 toSci 7E-8 -> 7E-8 -dqbas402 toEng 7E-8 -> 70E-9 -dqbas403 toSci 7E-9 -> 7E-9 -dqbas404 toEng 7E-9 -> 7E-9 -dqbas405 toSci 7E-10 -> 7E-10 -dqbas406 toEng 7E-10 -> 700E-12 -dqbas407 toSci 7E-11 -> 7E-11 -dqbas408 toEng 7E-11 -> 70E-12 -dqbas409 toSci 7E-12 -> 7E-12 -dqbas410 toEng 7E-12 -> 7E-12 -dqbas411 toSci 7E-13 -> 7E-13 -dqbas412 toEng 7E-13 -> 700E-15 - --- Exacts remain exact up to precision .. -dqbas420 toSci 100 -> 100 -dqbas422 toSci 1000 -> 1000 -dqbas424 toSci 999.9 -> 999.9 -dqbas426 toSci 1000.0 -> 1000.0 -dqbas428 toSci 1000.1 -> 1000.1 -dqbas430 toSci 10000 -> 10000 -dqbas432 toSci 1000000000000000000000000000000 -> 1000000000000000000000000000000 -dqbas434 toSci 10000000000000000000000000000000 -> 10000000000000000000000000000000 -dqbas436 toSci 100000000000000000000000000000000 -> 100000000000000000000000000000000 -dqbas438 toSci 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqbas440 toSci 10000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+34 Rounded -dqbas442 toSci 10000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+34 Rounded -dqbas444 toSci 10000000000000000000000000000000003 -> 1.000000000000000000000000000000000E+34 Rounded Inexact -dqbas446 toSci 10000000000000000000000000000000005 -> 1.000000000000000000000000000000000E+34 Rounded Inexact -dqbas448 toSci 100000000000000000000000000000000050 -> 1.000000000000000000000000000000000E+35 Rounded Inexact -dqbas450 toSci 10000000000000000000000000000000009 -> 1.000000000000000000000000000000001E+34 Rounded Inexact -dqbas452 toSci 100000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+35 Rounded -dqbas454 toSci 100000000000000000000000000000000003 -> 1.000000000000000000000000000000000E+35 Rounded Inexact -dqbas456 toSci 100000000000000000000000000000000005 -> 1.000000000000000000000000000000000E+35 Rounded Inexact -dqbas458 toSci 100000000000000000000000000000000009 -> 1.000000000000000000000000000000000E+35 Rounded Inexact -dqbas460 toSci 1000000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+36 Rounded -dqbas462 toSci 1000000000000000000000000000000000300 -> 1.000000000000000000000000000000000E+36 Rounded Inexact -dqbas464 toSci 1000000000000000000000000000000000500 -> 1.000000000000000000000000000000000E+36 Rounded Inexact -dqbas466 toSci 1000000000000000000000000000000000900 -> 1.000000000000000000000000000000001E+36 Rounded Inexact -dqbas468 toSci 10000000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+37 Rounded -dqbas470 toSci 10000000000000000000000000000000003000 -> 1.000000000000000000000000000000000E+37 Rounded Inexact -dqbas472 toSci 10000000000000000000000000000000005000 -> 1.000000000000000000000000000000000E+37 Rounded Inexact -dqbas474 toSci 10000000000000000000000000000000009000 -> 1.000000000000000000000000000000001E+37 Rounded Inexact - --- check rounding modes heeded -rounding: ceiling -dqbsr401 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr402 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr403 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr404 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact -rounding: up -dqbsr405 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr406 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr407 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr408 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact -rounding: floor -dqbsr410 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr411 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr412 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr413 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112345 Rounded Inexact -rounding: half_down -dqbsr415 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr416 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr417 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr418 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr419 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact -rounding: half_even -dqbsr421 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr422 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr423 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr424 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr425 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact -rounding: down -dqbsr426 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr427 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr428 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr429 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112345 Rounded Inexact -rounding: half_up -dqbsr431 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr432 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr433 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr434 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112347 Rounded Inexact -dqbsr435 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact --- negatives -rounding: ceiling -dqbsr501 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr502 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr503 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr504 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112345 Rounded Inexact -rounding: up -dqbsr505 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr506 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr507 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr508 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact -rounding: floor -dqbsr510 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr511 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr512 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr513 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact -rounding: half_down -dqbsr515 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr516 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr517 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr518 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr519 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact -rounding: half_even -dqbsr521 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr522 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr523 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr524 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr525 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact -rounding: down -dqbsr526 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr527 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr528 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr529 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112345 Rounded Inexact -rounding: half_up -dqbsr531 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr532 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr533 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr534 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112347 Rounded Inexact -dqbsr535 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact - -rounding: half_even - --- The 'baddies' tests from DiagBigDecimal, plus some new ones -dqbas500 toSci '1..2' -> NaN Conversion_syntax -dqbas501 toSci '.' -> NaN Conversion_syntax -dqbas502 toSci '..' -> NaN Conversion_syntax -dqbas503 toSci '++1' -> NaN Conversion_syntax -dqbas504 toSci '--1' -> NaN Conversion_syntax -dqbas505 toSci '-+1' -> NaN Conversion_syntax -dqbas506 toSci '+-1' -> NaN Conversion_syntax -dqbas507 toSci '12e' -> NaN Conversion_syntax -dqbas508 toSci '12e++' -> NaN Conversion_syntax -dqbas509 toSci '12f4' -> NaN Conversion_syntax -dqbas510 toSci ' +1' -> NaN Conversion_syntax -dqbas511 toSci '+ 1' -> NaN Conversion_syntax -dqbas512 toSci '12 ' -> NaN Conversion_syntax -dqbas513 toSci ' + 1' -> NaN Conversion_syntax -dqbas514 toSci ' - 1 ' -> NaN Conversion_syntax -dqbas515 toSci 'x' -> NaN Conversion_syntax -dqbas516 toSci '-1-' -> NaN Conversion_syntax -dqbas517 toSci '12-' -> NaN Conversion_syntax -dqbas518 toSci '3+' -> NaN Conversion_syntax -dqbas519 toSci '' -> NaN Conversion_syntax -dqbas520 toSci '1e-' -> NaN Conversion_syntax -dqbas521 toSci '7e99999a' -> NaN Conversion_syntax -dqbas522 toSci '7e123567890x' -> NaN Conversion_syntax -dqbas523 toSci '7e12356789012x' -> NaN Conversion_syntax -dqbas524 toSci '' -> NaN Conversion_syntax -dqbas525 toSci 'e100' -> NaN Conversion_syntax -dqbas526 toSci '\u0e5a' -> NaN Conversion_syntax -dqbas527 toSci '\u0b65' -> NaN Conversion_syntax -dqbas528 toSci '123,65' -> NaN Conversion_syntax -dqbas529 toSci '1.34.5' -> NaN Conversion_syntax -dqbas530 toSci '.123.5' -> NaN Conversion_syntax -dqbas531 toSci '01.35.' -> NaN Conversion_syntax -dqbas532 toSci '01.35-' -> NaN Conversion_syntax -dqbas533 toSci '0000..' -> NaN Conversion_syntax -dqbas534 toSci '.0000.' -> NaN Conversion_syntax -dqbas535 toSci '00..00' -> NaN Conversion_syntax -dqbas536 toSci '111e*123' -> NaN Conversion_syntax -dqbas537 toSci '111e123-' -> NaN Conversion_syntax -dqbas538 toSci '111e+12+' -> NaN Conversion_syntax -dqbas539 toSci '111e1-3-' -> NaN Conversion_syntax -dqbas540 toSci '111e1*23' -> NaN Conversion_syntax -dqbas541 toSci '111e1e+3' -> NaN Conversion_syntax -dqbas542 toSci '1e1.0' -> NaN Conversion_syntax -dqbas543 toSci '1e123e' -> NaN Conversion_syntax -dqbas544 toSci 'ten' -> NaN Conversion_syntax -dqbas545 toSci 'ONE' -> NaN Conversion_syntax -dqbas546 toSci '1e.1' -> NaN Conversion_syntax -dqbas547 toSci '1e1.' -> NaN Conversion_syntax -dqbas548 toSci '1ee' -> NaN Conversion_syntax -dqbas549 toSci 'e+1' -> NaN Conversion_syntax -dqbas550 toSci '1.23.4' -> NaN Conversion_syntax -dqbas551 toSci '1.2.1' -> NaN Conversion_syntax -dqbas552 toSci '1E+1.2' -> NaN Conversion_syntax -dqbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax -dqbas554 toSci '1E++1' -> NaN Conversion_syntax -dqbas555 toSci '1E--1' -> NaN Conversion_syntax -dqbas556 toSci '1E+-1' -> NaN Conversion_syntax -dqbas557 toSci '1E-+1' -> NaN Conversion_syntax -dqbas558 toSci '1E''1' -> NaN Conversion_syntax -dqbas559 toSci "1E""1" -> NaN Conversion_syntax -dqbas560 toSci "1E""""" -> NaN Conversion_syntax --- Near-specials -dqbas561 toSci "qNaN" -> NaN Conversion_syntax -dqbas562 toSci "NaNq" -> NaN Conversion_syntax -dqbas563 toSci "NaNs" -> NaN Conversion_syntax -dqbas564 toSci "Infi" -> NaN Conversion_syntax -dqbas565 toSci "Infin" -> NaN Conversion_syntax -dqbas566 toSci "Infini" -> NaN Conversion_syntax -dqbas567 toSci "Infinit" -> NaN Conversion_syntax -dqbas568 toSci "-Infinit" -> NaN Conversion_syntax -dqbas569 toSci "0Inf" -> NaN Conversion_syntax -dqbas570 toSci "9Inf" -> NaN Conversion_syntax -dqbas571 toSci "-0Inf" -> NaN Conversion_syntax -dqbas572 toSci "-9Inf" -> NaN Conversion_syntax -dqbas573 toSci "-sNa" -> NaN Conversion_syntax -dqbas574 toSci "xNaN" -> NaN Conversion_syntax -dqbas575 toSci "0sNaN" -> NaN Conversion_syntax - --- some baddies with dots and Es and dots and specials -dqbas576 toSci 'e+1' -> NaN Conversion_syntax -dqbas577 toSci '.e+1' -> NaN Conversion_syntax -dqbas578 toSci '+.e+1' -> NaN Conversion_syntax -dqbas579 toSci '-.e+' -> NaN Conversion_syntax -dqbas580 toSci '-.e' -> NaN Conversion_syntax -dqbas581 toSci 'E+1' -> NaN Conversion_syntax -dqbas582 toSci '.E+1' -> NaN Conversion_syntax -dqbas583 toSci '+.E+1' -> NaN Conversion_syntax -dqbas584 toSci '-.E+' -> NaN Conversion_syntax -dqbas585 toSci '-.E' -> NaN Conversion_syntax - -dqbas586 toSci '.NaN' -> NaN Conversion_syntax -dqbas587 toSci '-.NaN' -> NaN Conversion_syntax -dqbas588 toSci '+.sNaN' -> NaN Conversion_syntax -dqbas589 toSci '+.Inf' -> NaN Conversion_syntax -dqbas590 toSci '.Infinity' -> NaN Conversion_syntax - --- Zeros -dqbas601 toSci 0.000000000 -> 0E-9 -dqbas602 toSci 0.00000000 -> 0E-8 -dqbas603 toSci 0.0000000 -> 0E-7 -dqbas604 toSci 0.000000 -> 0.000000 -dqbas605 toSci 0.00000 -> 0.00000 -dqbas606 toSci 0.0000 -> 0.0000 -dqbas607 toSci 0.000 -> 0.000 -dqbas608 toSci 0.00 -> 0.00 -dqbas609 toSci 0.0 -> 0.0 -dqbas610 toSci .0 -> 0.0 -dqbas611 toSci 0. -> 0 -dqbas612 toSci -.0 -> -0.0 -dqbas613 toSci -0. -> -0 -dqbas614 toSci -0.0 -> -0.0 -dqbas615 toSci -0.00 -> -0.00 -dqbas616 toSci -0.000 -> -0.000 -dqbas617 toSci -0.0000 -> -0.0000 -dqbas618 toSci -0.00000 -> -0.00000 -dqbas619 toSci -0.000000 -> -0.000000 -dqbas620 toSci -0.0000000 -> -0E-7 -dqbas621 toSci -0.00000000 -> -0E-8 -dqbas622 toSci -0.000000000 -> -0E-9 - -dqbas630 toSci 0.00E+0 -> 0.00 -dqbas631 toSci 0.00E+1 -> 0.0 -dqbas632 toSci 0.00E+2 -> 0 -dqbas633 toSci 0.00E+3 -> 0E+1 -dqbas634 toSci 0.00E+4 -> 0E+2 -dqbas635 toSci 0.00E+5 -> 0E+3 -dqbas636 toSci 0.00E+6 -> 0E+4 -dqbas637 toSci 0.00E+7 -> 0E+5 -dqbas638 toSci 0.00E+8 -> 0E+6 -dqbas639 toSci 0.00E+9 -> 0E+7 - -dqbas640 toSci 0.0E+0 -> 0.0 -dqbas641 toSci 0.0E+1 -> 0 -dqbas642 toSci 0.0E+2 -> 0E+1 -dqbas643 toSci 0.0E+3 -> 0E+2 -dqbas644 toSci 0.0E+4 -> 0E+3 -dqbas645 toSci 0.0E+5 -> 0E+4 -dqbas646 toSci 0.0E+6 -> 0E+5 -dqbas647 toSci 0.0E+7 -> 0E+6 -dqbas648 toSci 0.0E+8 -> 0E+7 -dqbas649 toSci 0.0E+9 -> 0E+8 - -dqbas650 toSci 0E+0 -> 0 -dqbas651 toSci 0E+1 -> 0E+1 -dqbas652 toSci 0E+2 -> 0E+2 -dqbas653 toSci 0E+3 -> 0E+3 -dqbas654 toSci 0E+4 -> 0E+4 -dqbas655 toSci 0E+5 -> 0E+5 -dqbas656 toSci 0E+6 -> 0E+6 -dqbas657 toSci 0E+7 -> 0E+7 -dqbas658 toSci 0E+8 -> 0E+8 -dqbas659 toSci 0E+9 -> 0E+9 - -dqbas660 toSci 0.0E-0 -> 0.0 -dqbas661 toSci 0.0E-1 -> 0.00 -dqbas662 toSci 0.0E-2 -> 0.000 -dqbas663 toSci 0.0E-3 -> 0.0000 -dqbas664 toSci 0.0E-4 -> 0.00000 -dqbas665 toSci 0.0E-5 -> 0.000000 -dqbas666 toSci 0.0E-6 -> 0E-7 -dqbas667 toSci 0.0E-7 -> 0E-8 -dqbas668 toSci 0.0E-8 -> 0E-9 -dqbas669 toSci 0.0E-9 -> 0E-10 - -dqbas670 toSci 0.00E-0 -> 0.00 -dqbas671 toSci 0.00E-1 -> 0.000 -dqbas672 toSci 0.00E-2 -> 0.0000 -dqbas673 toSci 0.00E-3 -> 0.00000 -dqbas674 toSci 0.00E-4 -> 0.000000 -dqbas675 toSci 0.00E-5 -> 0E-7 -dqbas676 toSci 0.00E-6 -> 0E-8 -dqbas677 toSci 0.00E-7 -> 0E-9 -dqbas678 toSci 0.00E-8 -> 0E-10 -dqbas679 toSci 0.00E-9 -> 0E-11 - -dqbas680 toSci 000000. -> 0 -dqbas681 toSci 00000. -> 0 -dqbas682 toSci 0000. -> 0 -dqbas683 toSci 000. -> 0 -dqbas684 toSci 00. -> 0 -dqbas685 toSci 0. -> 0 -dqbas686 toSci +00000. -> 0 -dqbas687 toSci -00000. -> -0 -dqbas688 toSci +0. -> 0 -dqbas689 toSci -0. -> -0 - --- Specials -dqbas700 toSci "NaN" -> NaN -dqbas701 toSci "nan" -> NaN -dqbas702 toSci "nAn" -> NaN -dqbas703 toSci "NAN" -> NaN -dqbas704 toSci "+NaN" -> NaN -dqbas705 toSci "+nan" -> NaN -dqbas706 toSci "+nAn" -> NaN -dqbas707 toSci "+NAN" -> NaN -dqbas708 toSci "-NaN" -> -NaN -dqbas709 toSci "-nan" -> -NaN -dqbas710 toSci "-nAn" -> -NaN -dqbas711 toSci "-NAN" -> -NaN -dqbas712 toSci 'NaN0' -> NaN -dqbas713 toSci 'NaN1' -> NaN1 -dqbas714 toSci 'NaN12' -> NaN12 -dqbas715 toSci 'NaN123' -> NaN123 -dqbas716 toSci 'NaN1234' -> NaN1234 -dqbas717 toSci 'NaN01' -> NaN1 -dqbas718 toSci 'NaN012' -> NaN12 -dqbas719 toSci 'NaN0123' -> NaN123 -dqbas720 toSci 'NaN01234' -> NaN1234 -dqbas721 toSci 'NaN001' -> NaN1 -dqbas722 toSci 'NaN0012' -> NaN12 -dqbas723 toSci 'NaN00123' -> NaN123 -dqbas724 toSci 'NaN001234' -> NaN1234 -dqbas725 toSci 'NaN1234567890123456781234567890123456' -> NaN Conversion_syntax -dqbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax -dqbas727 toSci 'NaN12.45' -> NaN Conversion_syntax -dqbas728 toSci 'NaN-12' -> NaN Conversion_syntax -dqbas729 toSci 'NaN+12' -> NaN Conversion_syntax - -dqbas730 toSci "sNaN" -> sNaN -dqbas731 toSci "snan" -> sNaN -dqbas732 toSci "SnAn" -> sNaN -dqbas733 toSci "SNAN" -> sNaN -dqbas734 toSci "+sNaN" -> sNaN -dqbas735 toSci "+snan" -> sNaN -dqbas736 toSci "+SnAn" -> sNaN -dqbas737 toSci "+SNAN" -> sNaN -dqbas738 toSci "-sNaN" -> -sNaN -dqbas739 toSci "-snan" -> -sNaN -dqbas740 toSci "-SnAn" -> -sNaN -dqbas741 toSci "-SNAN" -> -sNaN -dqbas742 toSci 'sNaN0000' -> sNaN -dqbas743 toSci 'sNaN7' -> sNaN7 -dqbas744 toSci 'sNaN007234' -> sNaN7234 -dqbas745 toSci 'sNaN1234567890123456787234561234567890' -> NaN Conversion_syntax -dqbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax -dqbas747 toSci 'sNaN-72' -> NaN Conversion_syntax - -dqbas748 toSci "Inf" -> Infinity -dqbas749 toSci "inf" -> Infinity -dqbas750 toSci "iNf" -> Infinity -dqbas751 toSci "INF" -> Infinity -dqbas752 toSci "+Inf" -> Infinity -dqbas753 toSci "+inf" -> Infinity -dqbas754 toSci "+iNf" -> Infinity -dqbas755 toSci "+INF" -> Infinity -dqbas756 toSci "-Inf" -> -Infinity -dqbas757 toSci "-inf" -> -Infinity -dqbas758 toSci "-iNf" -> -Infinity -dqbas759 toSci "-INF" -> -Infinity - -dqbas760 toSci "Infinity" -> Infinity -dqbas761 toSci "infinity" -> Infinity -dqbas762 toSci "iNfInItY" -> Infinity -dqbas763 toSci "INFINITY" -> Infinity -dqbas764 toSci "+Infinity" -> Infinity -dqbas765 toSci "+infinity" -> Infinity -dqbas766 toSci "+iNfInItY" -> Infinity -dqbas767 toSci "+INFINITY" -> Infinity -dqbas768 toSci "-Infinity" -> -Infinity -dqbas769 toSci "-infinity" -> -Infinity -dqbas770 toSci "-iNfInItY" -> -Infinity -dqbas771 toSci "-INFINITY" -> -Infinity - --- Specials and zeros for toEng -dqbast772 toEng "NaN" -> NaN -dqbast773 toEng "-Infinity" -> -Infinity -dqbast774 toEng "-sNaN" -> -sNaN -dqbast775 toEng "-NaN" -> -NaN -dqbast776 toEng "+Infinity" -> Infinity -dqbast778 toEng "+sNaN" -> sNaN -dqbast779 toEng "+NaN" -> NaN -dqbast780 toEng "INFINITY" -> Infinity -dqbast781 toEng "SNAN" -> sNaN -dqbast782 toEng "NAN" -> NaN -dqbast783 toEng "infinity" -> Infinity -dqbast784 toEng "snan" -> sNaN -dqbast785 toEng "nan" -> NaN -dqbast786 toEng "InFINITY" -> Infinity -dqbast787 toEng "SnAN" -> sNaN -dqbast788 toEng "nAN" -> NaN -dqbast789 toEng "iNfinity" -> Infinity -dqbast790 toEng "sNan" -> sNaN -dqbast791 toEng "Nan" -> NaN -dqbast792 toEng "Infinity" -> Infinity -dqbast793 toEng "sNaN" -> sNaN - --- Zero toEng, etc. -dqbast800 toEng 0e+1 -> "0.00E+3" -- doc example - -dqbast801 toEng 0.000000000 -> 0E-9 -dqbast802 toEng 0.00000000 -> 0.00E-6 -dqbast803 toEng 0.0000000 -> 0.0E-6 -dqbast804 toEng 0.000000 -> 0.000000 -dqbast805 toEng 0.00000 -> 0.00000 -dqbast806 toEng 0.0000 -> 0.0000 -dqbast807 toEng 0.000 -> 0.000 -dqbast808 toEng 0.00 -> 0.00 -dqbast809 toEng 0.0 -> 0.0 -dqbast810 toEng .0 -> 0.0 -dqbast811 toEng 0. -> 0 -dqbast812 toEng -.0 -> -0.0 -dqbast813 toEng -0. -> -0 -dqbast814 toEng -0.0 -> -0.0 -dqbast815 toEng -0.00 -> -0.00 -dqbast816 toEng -0.000 -> -0.000 -dqbast817 toEng -0.0000 -> -0.0000 -dqbast818 toEng -0.00000 -> -0.00000 -dqbast819 toEng -0.000000 -> -0.000000 -dqbast820 toEng -0.0000000 -> -0.0E-6 -dqbast821 toEng -0.00000000 -> -0.00E-6 -dqbast822 toEng -0.000000000 -> -0E-9 - -dqbast830 toEng 0.00E+0 -> 0.00 -dqbast831 toEng 0.00E+1 -> 0.0 -dqbast832 toEng 0.00E+2 -> 0 -dqbast833 toEng 0.00E+3 -> 0.00E+3 -dqbast834 toEng 0.00E+4 -> 0.0E+3 -dqbast835 toEng 0.00E+5 -> 0E+3 -dqbast836 toEng 0.00E+6 -> 0.00E+6 -dqbast837 toEng 0.00E+7 -> 0.0E+6 -dqbast838 toEng 0.00E+8 -> 0E+6 -dqbast839 toEng 0.00E+9 -> 0.00E+9 - -dqbast840 toEng 0.0E+0 -> 0.0 -dqbast841 toEng 0.0E+1 -> 0 -dqbast842 toEng 0.0E+2 -> 0.00E+3 -dqbast843 toEng 0.0E+3 -> 0.0E+3 -dqbast844 toEng 0.0E+4 -> 0E+3 -dqbast845 toEng 0.0E+5 -> 0.00E+6 -dqbast846 toEng 0.0E+6 -> 0.0E+6 -dqbast847 toEng 0.0E+7 -> 0E+6 -dqbast848 toEng 0.0E+8 -> 0.00E+9 -dqbast849 toEng 0.0E+9 -> 0.0E+9 - -dqbast850 toEng 0E+0 -> 0 -dqbast851 toEng 0E+1 -> 0.00E+3 -dqbast852 toEng 0E+2 -> 0.0E+3 -dqbast853 toEng 0E+3 -> 0E+3 -dqbast854 toEng 0E+4 -> 0.00E+6 -dqbast855 toEng 0E+5 -> 0.0E+6 -dqbast856 toEng 0E+6 -> 0E+6 -dqbast857 toEng 0E+7 -> 0.00E+9 -dqbast858 toEng 0E+8 -> 0.0E+9 -dqbast859 toEng 0E+9 -> 0E+9 - -dqbast860 toEng 0.0E-0 -> 0.0 -dqbast861 toEng 0.0E-1 -> 0.00 -dqbast862 toEng 0.0E-2 -> 0.000 -dqbast863 toEng 0.0E-3 -> 0.0000 -dqbast864 toEng 0.0E-4 -> 0.00000 -dqbast865 toEng 0.0E-5 -> 0.000000 -dqbast866 toEng 0.0E-6 -> 0.0E-6 -dqbast867 toEng 0.0E-7 -> 0.00E-6 -dqbast868 toEng 0.0E-8 -> 0E-9 -dqbast869 toEng 0.0E-9 -> 0.0E-9 - -dqbast870 toEng 0.00E-0 -> 0.00 -dqbast871 toEng 0.00E-1 -> 0.000 -dqbast872 toEng 0.00E-2 -> 0.0000 -dqbast873 toEng 0.00E-3 -> 0.00000 -dqbast874 toEng 0.00E-4 -> 0.000000 -dqbast875 toEng 0.00E-5 -> 0.0E-6 -dqbast876 toEng 0.00E-6 -> 0.00E-6 -dqbast877 toEng 0.00E-7 -> 0E-9 -dqbast878 toEng 0.00E-8 -> 0.0E-9 -dqbast879 toEng 0.00E-9 -> 0.00E-9 - --- long input strings -dqbas801 tosci '01234567890123456' -> 1234567890123456 -dqbas802 tosci '001234567890123456' -> 1234567890123456 -dqbas803 tosci '0001234567890123456' -> 1234567890123456 -dqbas804 tosci '00001234567890123456' -> 1234567890123456 -dqbas805 tosci '000001234567890123456' -> 1234567890123456 -dqbas806 tosci '0000001234567890123456' -> 1234567890123456 -dqbas807 tosci '00000001234567890123456' -> 1234567890123456 -dqbas808 tosci '000000001234567890123456' -> 1234567890123456 -dqbas809 tosci '0000000001234567890123456' -> 1234567890123456 -dqbas810 tosci '00000000001234567890123456' -> 1234567890123456 - -dqbas811 tosci '0.1234567890123456' -> 0.1234567890123456 -dqbas812 tosci '0.01234567890123456' -> 0.01234567890123456 -dqbas813 tosci '0.001234567890123456' -> 0.001234567890123456 -dqbas814 tosci '0.0001234567890123456' -> 0.0001234567890123456 -dqbas815 tosci '0.00001234567890123456' -> 0.00001234567890123456 -dqbas816 tosci '0.000001234567890123456' -> 0.000001234567890123456 -dqbas817 tosci '0.0000001234567890123456' -> 1.234567890123456E-7 -dqbas818 tosci '0.00000001234567890123456' -> 1.234567890123456E-8 -dqbas819 tosci '0.000000001234567890123456' -> 1.234567890123456E-9 -dqbas820 tosci '0.0000000001234567890123456' -> 1.234567890123456E-10 - -dqbas821 tosci '12345678912345678901234567801234567890' -> 1.234567891234567890123456780123457E+37 Inexact Rounded -dqbas822 tosci '123456789123456789012345678012345678901' -> 1.234567891234567890123456780123457E+38 Inexact Rounded -dqbas823 tosci '1234567891234567890123456780123456789012' -> 1.234567891234567890123456780123457E+39 Inexact Rounded -dqbas824 tosci '12345678912345678901234567801234567890123' -> 1.234567891234567890123456780123457E+40 Inexact Rounded -dqbas825 tosci '123456789123456789012345678012345678901234' -> 1.234567891234567890123456780123457E+41 Inexact Rounded -dqbas826 tosci '1234567891234567890123456780123456789012345' -> 1.234567891234567890123456780123457E+42 Inexact Rounded -dqbas827 tosci '12345678912345678901234567801234567890123456' -> 1.234567891234567890123456780123457E+43 Inexact Rounded -dqbas828 tosci '123456789123456789012345678012345678901234567' -> 1.234567891234567890123456780123457E+44 Inexact Rounded -dqbas829 tosci '1234567891234567890123456780123456789012345678' -> 1.234567891234567890123456780123457E+45 Inexact Rounded - --- subnormals and overflows -dqbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded -dqbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded -dqbas908 toSci '0.9e-999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas909 toSci '0.09e-999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded -dqbas911 toSci '10e-1000000000' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded -dqbas913 toSci '99e-9999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded -dqbas915 toSci '1111e-9999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas916 toSci '1111e-99999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded --- negatives the same -dqbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded -dqbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded -dqbas920 toSci '-0.9e-999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas921 toSci '-0.09e-999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded -dqbas923 toSci '-10e-1000000000' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded -dqbas925 toSci '-99e-9999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded -dqbas927 toSci '-1111e-9999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas928 toSci '-1111e-99999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded - --- overflow results at different rounding modes -rounding: ceiling -dqbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas931 toSci '-7e10000' -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -rounding: up -dqbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: down -dqbas934 toSci '7e10000' -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqbas935 toSci '-7e10000' -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -rounding: floor -dqbas936 toSci '7e10000' -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_up -dqbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_even -dqbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_down -dqbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_even - --- Now check 854/754r some subnormals and underflow to 0 -dqbem400 toSci 1.0000E-383 -> 1.0000E-383 -dqbem401 toSci 0.1E-6172 -> 1E-6173 Subnormal -dqbem402 toSci 0.1000E-6172 -> 1.000E-6173 Subnormal -dqbem403 toSci 0.0100E-6172 -> 1.00E-6174 Subnormal -dqbem404 toSci 0.0010E-6172 -> 1.0E-6175 Subnormal -dqbem405 toSci 0.0001E-6172 -> 1E-6176 Subnormal -dqbem406 toSci 0.00010E-6172 -> 1E-6176 Subnormal Rounded -dqbem407 toSci 0.00013E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqbem408 toSci 0.00015E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem409 toSci 0.00017E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem410 toSci 0.00023E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem411 toSci 0.00025E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem412 toSci 0.00027E-6172 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqbem413 toSci 0.000149E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqbem414 toSci 0.000150E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem415 toSci 0.000151E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem416 toSci 0.000249E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem417 toSci 0.000250E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem418 toSci 0.000251E-6172 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqbem419 toSci 0.00009E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqbem420 toSci 0.00005E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem421 toSci 0.00003E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem422 toSci 0.000009E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem423 toSci 0.000005E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem424 toSci 0.000003E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqbem425 toSci 0.001049E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded -dqbem426 toSci 0.001050E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded -dqbem427 toSci 0.001051E-6172 -> 1.1E-6175 Underflow Subnormal Inexact Rounded -dqbem428 toSci 0.001149E-6172 -> 1.1E-6175 Underflow Subnormal Inexact Rounded -dqbem429 toSci 0.001150E-6172 -> 1.2E-6175 Underflow Subnormal Inexact Rounded -dqbem430 toSci 0.001151E-6172 -> 1.2E-6175 Underflow Subnormal Inexact Rounded - -dqbem432 toSci 0.010049E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded -dqbem433 toSci 0.010050E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded -dqbem434 toSci 0.010051E-6172 -> 1.01E-6174 Underflow Subnormal Inexact Rounded -dqbem435 toSci 0.010149E-6172 -> 1.01E-6174 Underflow Subnormal Inexact Rounded -dqbem436 toSci 0.010150E-6172 -> 1.02E-6174 Underflow Subnormal Inexact Rounded -dqbem437 toSci 0.010151E-6172 -> 1.02E-6174 Underflow Subnormal Inexact Rounded - -dqbem440 toSci 0.10103E-6172 -> 1.010E-6173 Underflow Subnormal Inexact Rounded -dqbem441 toSci 0.10105E-6172 -> 1.010E-6173 Underflow Subnormal Inexact Rounded -dqbem442 toSci 0.10107E-6172 -> 1.011E-6173 Underflow Subnormal Inexact Rounded -dqbem443 toSci 0.10113E-6172 -> 1.011E-6173 Underflow Subnormal Inexact Rounded -dqbem444 toSci 0.10115E-6172 -> 1.012E-6173 Underflow Subnormal Inexact Rounded -dqbem445 toSci 0.10117E-6172 -> 1.012E-6173 Underflow Subnormal Inexact Rounded - -dqbem450 toSci 1.10730E-6173 -> 1.107E-6173 Underflow Subnormal Inexact Rounded -dqbem451 toSci 1.10750E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded -dqbem452 toSci 1.10770E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded -dqbem453 toSci 1.10830E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded -dqbem454 toSci 1.10850E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded -dqbem455 toSci 1.10870E-6173 -> 1.109E-6173 Underflow Subnormal Inexact Rounded - --- make sure sign OK -dqbem456 toSci -0.10103E-6172 -> -1.010E-6173 Underflow Subnormal Inexact Rounded -dqbem457 toSci -0.10105E-6172 -> -1.010E-6173 Underflow Subnormal Inexact Rounded -dqbem458 toSci -0.10107E-6172 -> -1.011E-6173 Underflow Subnormal Inexact Rounded -dqbem459 toSci -0.10113E-6172 -> -1.011E-6173 Underflow Subnormal Inexact Rounded -dqbem460 toSci -0.10115E-6172 -> -1.012E-6173 Underflow Subnormal Inexact Rounded -dqbem461 toSci -0.10117E-6172 -> -1.012E-6173 Underflow Subnormal Inexact Rounded - --- '999s' cases -dqbem464 toSci 999999E-6173 -> 9.99999E-6168 Subnormal -dqbem465 toSci 99999.0E-6172 -> 9.99990E-6168 Subnormal -dqbem466 toSci 99999.E-6172 -> 9.9999E-6168 Subnormal -dqbem467 toSci 9999.9E-6172 -> 9.9999E-6169 Subnormal -dqbem468 toSci 999.99E-6172 -> 9.9999E-6170 Subnormal -dqbem469 toSci 99.999E-6172 -> 9.9999E-6171 Subnormal -dqbem470 toSci 9.9999E-6172 -> 9.9999E-6172 Subnormal -dqbem471 toSci 0.99999E-6172 -> 1.0000E-6172 Underflow Subnormal Inexact Rounded -dqbem472 toSci 0.099999E-6172 -> 1.000E-6173 Underflow Subnormal Inexact Rounded -dqbem473 toSci 0.0099999E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded -dqbem474 toSci 0.00099999E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded -dqbem475 toSci 0.000099999E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqbem476 toSci 0.0000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem477 toSci 0.00000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem478 toSci 0.000000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- Exponents with insignificant leading zeros -dqbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded -dqbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded -dqbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded -dqbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded -dqbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded -dqbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded -dqbas1007 toSci 1e-999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1008 toSci 1e-0999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1009 toSci 1e-00999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1010 toSci 1e-000999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1011 toSci 1e-000000000000999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1012 toSci 1e-000000000001000000007 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- check for double-rounded subnormals -dqbas1041 toSci 1.1111111111111111111111111111152444E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow -dqbas1042 toSci 1.1111111111111111111111111111152445E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow -dqbas1043 toSci 1.1111111111111111111111111111152446E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow - --- clamped zeros [see also clamp.decTest] -dqbas1075 toSci 0e+10000 -> 0E+6111 Clamped -dqbas1076 toSci 0e-10000 -> 0E-6176 Clamped -dqbas1077 toSci -0e+10000 -> -0E+6111 Clamped -dqbas1078 toSci -0e-10000 -> -0E-6176 Clamped - --- extreme values from next-wider -dqbas1101 toSci -9.9999999999999999999999999999999999999999999999999999999999999999999E+1572864 -> -Infinity Overflow Inexact Rounded -dqbas1102 toSci -1E-1572863 -> -0E-6176 Inexact Rounded Subnormal Underflow Clamped -dqbas1103 toSci -1E-1572932 -> -0E-6176 Inexact Rounded Subnormal Underflow Clamped -dqbas1104 toSci -0 -> -0 -dqbas1105 toSci +0 -> 0 -dqbas1106 toSci +1E-1572932 -> 0E-6176 Inexact Rounded Subnormal Underflow Clamped -dqbas1107 toSci +1E-1572863 -> 0E-6176 Inexact Rounded Subnormal Underflow Clamped -dqbas1108 toSci +9.9999999999999999999999999999999999999999999999999999999999999999999E+1572864 -> Infinity Overflow Inexact Rounded - +------------------------------------------------------------------------ +-- dqBase.decTest -- base decQuad <--> string conversions -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests base conversions from string to a decimal number +-- and back to a string (in Scientific form) + +-- Note that unlike other operations the operand is subject to rounding +-- to conform to emax and precision settings (that is, numbers will +-- conform to rules and exponent will be in permitted range). The +-- 'left hand side', therefore, may have numbers that cannot be +-- represented in a decQuad. Some testcases go to the limit of the +-- next-wider format, and hence these testcases may also be used to +-- test narrowing and widening operations. + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqbas001 toSci 0 -> 0 +dqbas002 toSci 1 -> 1 +dqbas003 toSci 1.0 -> 1.0 +dqbas004 toSci 1.00 -> 1.00 +dqbas005 toSci 10 -> 10 +dqbas006 toSci 1000 -> 1000 +dqbas007 toSci 10.0 -> 10.0 +dqbas008 toSci 10.1 -> 10.1 +dqbas009 toSci 10.4 -> 10.4 +dqbas010 toSci 10.5 -> 10.5 +dqbas011 toSci 10.6 -> 10.6 +dqbas012 toSci 10.9 -> 10.9 +dqbas013 toSci 11.0 -> 11.0 +dqbas014 toSci 1.234 -> 1.234 +dqbas015 toSci 0.123 -> 0.123 +dqbas016 toSci 0.012 -> 0.012 +dqbas017 toSci -0 -> -0 +dqbas018 toSci -0.0 -> -0.0 +dqbas019 toSci -00.00 -> -0.00 + +dqbas021 toSci -1 -> -1 +dqbas022 toSci -1.0 -> -1.0 +dqbas023 toSci -0.1 -> -0.1 +dqbas024 toSci -9.1 -> -9.1 +dqbas025 toSci -9.11 -> -9.11 +dqbas026 toSci -9.119 -> -9.119 +dqbas027 toSci -9.999 -> -9.999 + +dqbas030 toSci '123456789.123456' -> '123456789.123456' +dqbas031 toSci '123456789.000000' -> '123456789.000000' +dqbas032 toSci '123456789123456' -> '123456789123456' +dqbas033 toSci '0.0000123456789' -> '0.0000123456789' +dqbas034 toSci '0.00000123456789' -> '0.00000123456789' +dqbas035 toSci '0.000000123456789' -> '1.23456789E-7' +dqbas036 toSci '0.0000000123456789' -> '1.23456789E-8' + +dqbas037 toSci '0.123456789012344' -> '0.123456789012344' +dqbas038 toSci '0.123456789012345' -> '0.123456789012345' + +-- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) +dqbsn001 toSci -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqbsn002 toSci -1E-6143 -> -1E-6143 +dqbsn003 toSci -1E-6176 -> -1E-6176 Subnormal +dqbsn004 toSci -0 -> -0 +dqbsn005 toSci +0 -> 0 +dqbsn006 toSci +1E-6176 -> 1E-6176 Subnormal +dqbsn007 toSci +1E-6143 -> 1E-6143 +dqbsn008 toSci +9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 + +-- String [many more examples are implicitly tested elsewhere] +-- strings without E cannot generate E in result +dqbas040 toSci "12" -> '12' +dqbas041 toSci "-76" -> '-76' +dqbas042 toSci "12.76" -> '12.76' +dqbas043 toSci "+12.76" -> '12.76' +dqbas044 toSci "012.76" -> '12.76' +dqbas045 toSci "+0.003" -> '0.003' +dqbas046 toSci "17." -> '17' +dqbas047 toSci ".5" -> '0.5' +dqbas048 toSci "044" -> '44' +dqbas049 toSci "0044" -> '44' +dqbas050 toSci "0.0005" -> '0.0005' +dqbas051 toSci "00.00005" -> '0.00005' +dqbas052 toSci "0.000005" -> '0.000005' +dqbas053 toSci "0.0000050" -> '0.0000050' +dqbas054 toSci "0.0000005" -> '5E-7' +dqbas055 toSci "0.00000005" -> '5E-8' +dqbas056 toSci "12345678.543210" -> '12345678.543210' +dqbas057 toSci "2345678.543210" -> '2345678.543210' +dqbas058 toSci "345678.543210" -> '345678.543210' +dqbas059 toSci "0345678.54321" -> '345678.54321' +dqbas060 toSci "345678.5432" -> '345678.5432' +dqbas061 toSci "+345678.5432" -> '345678.5432' +dqbas062 toSci "+0345678.5432" -> '345678.5432' +dqbas063 toSci "+00345678.5432" -> '345678.5432' +dqbas064 toSci "-345678.5432" -> '-345678.5432' +dqbas065 toSci "-0345678.5432" -> '-345678.5432' +dqbas066 toSci "-00345678.5432" -> '-345678.5432' +-- examples +dqbas067 toSci "5E-6" -> '0.000005' +dqbas068 toSci "50E-7" -> '0.0000050' +dqbas069 toSci "5E-7" -> '5E-7' + +-- [No exotics as no Unicode] + +-- rounded with dots in all (including edge) places +dqbas071 toSci .1234567891234567890123456780123456123 -> 0.1234567891234567890123456780123456 Inexact Rounded +dqbas072 toSci 1.234567891234567890123456780123456123 -> 1.234567891234567890123456780123456 Inexact Rounded +dqbas073 toSci 12.34567891234567890123456780123456123 -> 12.34567891234567890123456780123456 Inexact Rounded +dqbas074 toSci 123.4567891234567890123456780123456123 -> 123.4567891234567890123456780123456 Inexact Rounded +dqbas075 toSci 1234.567891234567890123456780123456123 -> 1234.567891234567890123456780123456 Inexact Rounded +dqbas076 toSci 12345.67891234567890123456780123456123 -> 12345.67891234567890123456780123456 Inexact Rounded +dqbas077 toSci 123456.7891234567890123456780123456123 -> 123456.7891234567890123456780123456 Inexact Rounded +dqbas078 toSci 1234567.891234567890123456780123456123 -> 1234567.891234567890123456780123456 Inexact Rounded +dqbas079 toSci 12345678.91234567890123456780123456123 -> 12345678.91234567890123456780123456 Inexact Rounded +dqbas080 toSci 123456789.1234567890123456780123456123 -> 123456789.1234567890123456780123456 Inexact Rounded +dqbas081 toSci 1234567891.234567890123456780123456123 -> 1234567891.234567890123456780123456 Inexact Rounded +dqbas082 toSci 12345678912.34567890123456780123456123 -> 12345678912.34567890123456780123456 Inexact Rounded +dqbas083 toSci 123456789123.4567890123456780123456123 -> 123456789123.4567890123456780123456 Inexact Rounded +dqbas084 toSci 1234567891234.567890123456780123456123 -> 1234567891234.567890123456780123456 Inexact Rounded +dqbas085 toSci 12345678912345.67890123456780123456123 -> 12345678912345.67890123456780123456 Inexact Rounded +dqbas086 toSci 123456789123456.7890123456780123456123 -> 123456789123456.7890123456780123456 Inexact Rounded +dqbas087 toSci 1234567891234567.890123456780123456123 -> 1234567891234567.890123456780123456 Inexact Rounded +dqbas088 toSci 12345678912345678.90123456780123456123 -> 12345678912345678.90123456780123456 Inexact Rounded +dqbas089 toSci 123456789123456789.0123456780123456123 -> 123456789123456789.0123456780123456 Inexact Rounded +dqbas090 toSci 1234567891234567890.123456780123456123 -> 1234567891234567890.123456780123456 Inexact Rounded +dqbas091 toSci 12345678912345678901.23456780123456123 -> 12345678912345678901.23456780123456 Inexact Rounded +dqbas092 toSci 123456789123456789012.3456780123456123 -> 123456789123456789012.3456780123456 Inexact Rounded +dqbas093 toSci 1234567891234567890123.456780123456123 -> 1234567891234567890123.456780123456 Inexact Rounded +dqbas094 toSci 12345678912345678901234.56780123456123 -> 12345678912345678901234.56780123456 Inexact Rounded +dqbas095 toSci 123456789123456789012345.6780123456123 -> 123456789123456789012345.6780123456 Inexact Rounded +dqbas096 toSci 1234567891234567890123456.780123456123 -> 1234567891234567890123456.780123456 Inexact Rounded +dqbas097 toSci 12345678912345678901234567.80123456123 -> 12345678912345678901234567.80123456 Inexact Rounded +dqbas098 toSci 123456789123456789012345678.0123456123 -> 123456789123456789012345678.0123456 Inexact Rounded +dqbas099 toSci 1234567891234567890123456780.123456123 -> 1234567891234567890123456780.123456 Inexact Rounded +dqbas100 toSci 12345678912345678901234567801.23456123 -> 12345678912345678901234567801.23456 Inexact Rounded +dqbas101 toSci 123456789123456789012345678012.3456123 -> 123456789123456789012345678012.3456 Inexact Rounded +dqbas102 toSci 1234567891234567890123456780123.456123 -> 1234567891234567890123456780123.456 Inexact Rounded +dqbas103 toSci 12345678912345678901234567801234.56123 -> 12345678912345678901234567801234.56 Inexact Rounded +dqbas104 toSci 123456789123456789012345678012345.6123 -> 123456789123456789012345678012345.6 Inexact Rounded +dqbas105 toSci 1234567891234567890123456780123456.123 -> 1234567891234567890123456780123456 Inexact Rounded +dqbas106 toSci 12345678912345678901234567801234561.23 -> 1.234567891234567890123456780123456E+34 Inexact Rounded +dqbas107 toSci 123456789123456789012345678012345612.3 -> 1.234567891234567890123456780123456E+35 Inexact Rounded +dqbas108 toSci 1234567891234567890123456780123456123. -> 1.234567891234567890123456780123456E+36 Inexact Rounded +-- 123456789012345678 + +-- Numbers with E +dqbas130 toSci "0.000E-1" -> '0.0000' +dqbas131 toSci "0.000E-2" -> '0.00000' +dqbas132 toSci "0.000E-3" -> '0.000000' +dqbas133 toSci "0.000E-4" -> '0E-7' +dqbas134 toSci "0.00E-2" -> '0.0000' +dqbas135 toSci "0.00E-3" -> '0.00000' +dqbas136 toSci "0.00E-4" -> '0.000000' +dqbas137 toSci "0.00E-5" -> '0E-7' +dqbas138 toSci "+0E+9" -> '0E+9' +dqbas139 toSci "-0E+9" -> '-0E+9' +dqbas140 toSci "1E+9" -> '1E+9' +dqbas141 toSci "1e+09" -> '1E+9' +dqbas142 toSci "1E+90" -> '1E+90' +dqbas143 toSci "+1E+009" -> '1E+9' +dqbas144 toSci "0E+9" -> '0E+9' +dqbas145 toSci "1E+9" -> '1E+9' +dqbas146 toSci "1E+09" -> '1E+9' +dqbas147 toSci "1e+90" -> '1E+90' +dqbas148 toSci "1E+009" -> '1E+9' +dqbas149 toSci "000E+9" -> '0E+9' +dqbas150 toSci "1E9" -> '1E+9' +dqbas151 toSci "1e09" -> '1E+9' +dqbas152 toSci "1E90" -> '1E+90' +dqbas153 toSci "1E009" -> '1E+9' +dqbas154 toSci "0E9" -> '0E+9' +dqbas155 toSci "0.000e+0" -> '0.000' +dqbas156 toSci "0.000E-1" -> '0.0000' +dqbas157 toSci "4E+9" -> '4E+9' +dqbas158 toSci "44E+9" -> '4.4E+10' +dqbas159 toSci "0.73e-7" -> '7.3E-8' +dqbas160 toSci "00E+9" -> '0E+9' +dqbas161 toSci "00E-9" -> '0E-9' +dqbas162 toSci "10E+9" -> '1.0E+10' +dqbas163 toSci "10E+09" -> '1.0E+10' +dqbas164 toSci "10e+90" -> '1.0E+91' +dqbas165 toSci "10E+009" -> '1.0E+10' +dqbas166 toSci "100e+9" -> '1.00E+11' +dqbas167 toSci "100e+09" -> '1.00E+11' +dqbas168 toSci "100E+90" -> '1.00E+92' +dqbas169 toSci "100e+009" -> '1.00E+11' + +dqbas170 toSci "1.265" -> '1.265' +dqbas171 toSci "1.265E-20" -> '1.265E-20' +dqbas172 toSci "1.265E-8" -> '1.265E-8' +dqbas173 toSci "1.265E-4" -> '0.0001265' +dqbas174 toSci "1.265E-3" -> '0.001265' +dqbas175 toSci "1.265E-2" -> '0.01265' +dqbas176 toSci "1.265E-1" -> '0.1265' +dqbas177 toSci "1.265E-0" -> '1.265' +dqbas178 toSci "1.265E+1" -> '12.65' +dqbas179 toSci "1.265E+2" -> '126.5' +dqbas180 toSci "1.265E+3" -> '1265' +dqbas181 toSci "1.265E+4" -> '1.265E+4' +dqbas182 toSci "1.265E+8" -> '1.265E+8' +dqbas183 toSci "1.265E+20" -> '1.265E+20' + +dqbas190 toSci "12.65" -> '12.65' +dqbas191 toSci "12.65E-20" -> '1.265E-19' +dqbas192 toSci "12.65E-8" -> '1.265E-7' +dqbas193 toSci "12.65E-4" -> '0.001265' +dqbas194 toSci "12.65E-3" -> '0.01265' +dqbas195 toSci "12.65E-2" -> '0.1265' +dqbas196 toSci "12.65E-1" -> '1.265' +dqbas197 toSci "12.65E-0" -> '12.65' +dqbas198 toSci "12.65E+1" -> '126.5' +dqbas199 toSci "12.65E+2" -> '1265' +dqbas200 toSci "12.65E+3" -> '1.265E+4' +dqbas201 toSci "12.65E+4" -> '1.265E+5' +dqbas202 toSci "12.65E+8" -> '1.265E+9' +dqbas203 toSci "12.65E+20" -> '1.265E+21' + +dqbas210 toSci "126.5" -> '126.5' +dqbas211 toSci "126.5E-20" -> '1.265E-18' +dqbas212 toSci "126.5E-8" -> '0.000001265' +dqbas213 toSci "126.5E-4" -> '0.01265' +dqbas214 toSci "126.5E-3" -> '0.1265' +dqbas215 toSci "126.5E-2" -> '1.265' +dqbas216 toSci "126.5E-1" -> '12.65' +dqbas217 toSci "126.5E-0" -> '126.5' +dqbas218 toSci "126.5E+1" -> '1265' +dqbas219 toSci "126.5E+2" -> '1.265E+4' +dqbas220 toSci "126.5E+3" -> '1.265E+5' +dqbas221 toSci "126.5E+4" -> '1.265E+6' +dqbas222 toSci "126.5E+8" -> '1.265E+10' +dqbas223 toSci "126.5E+20" -> '1.265E+22' + +dqbas230 toSci "1265" -> '1265' +dqbas231 toSci "1265E-20" -> '1.265E-17' +dqbas232 toSci "1265E-8" -> '0.00001265' +dqbas233 toSci "1265E-4" -> '0.1265' +dqbas234 toSci "1265E-3" -> '1.265' +dqbas235 toSci "1265E-2" -> '12.65' +dqbas236 toSci "1265E-1" -> '126.5' +dqbas237 toSci "1265E-0" -> '1265' +dqbas238 toSci "1265E+1" -> '1.265E+4' +dqbas239 toSci "1265E+2" -> '1.265E+5' +dqbas240 toSci "1265E+3" -> '1.265E+6' +dqbas241 toSci "1265E+4" -> '1.265E+7' +dqbas242 toSci "1265E+8" -> '1.265E+11' +dqbas243 toSci "1265E+20" -> '1.265E+23' + +dqbas250 toSci "0.1265" -> '0.1265' +dqbas251 toSci "0.1265E-20" -> '1.265E-21' +dqbas252 toSci "0.1265E-8" -> '1.265E-9' +dqbas253 toSci "0.1265E-4" -> '0.00001265' +dqbas254 toSci "0.1265E-3" -> '0.0001265' +dqbas255 toSci "0.1265E-2" -> '0.001265' +dqbas256 toSci "0.1265E-1" -> '0.01265' +dqbas257 toSci "0.1265E-0" -> '0.1265' +dqbas258 toSci "0.1265E+1" -> '1.265' +dqbas259 toSci "0.1265E+2" -> '12.65' +dqbas260 toSci "0.1265E+3" -> '126.5' +dqbas261 toSci "0.1265E+4" -> '1265' +dqbas262 toSci "0.1265E+8" -> '1.265E+7' +dqbas263 toSci "0.1265E+20" -> '1.265E+19' + +-- some more negative zeros [systematic tests below] +dqbas290 toSci "-0.000E-1" -> '-0.0000' +dqbas291 toSci "-0.000E-2" -> '-0.00000' +dqbas292 toSci "-0.000E-3" -> '-0.000000' +dqbas293 toSci "-0.000E-4" -> '-0E-7' +dqbas294 toSci "-0.00E-2" -> '-0.0000' +dqbas295 toSci "-0.00E-3" -> '-0.00000' +dqbas296 toSci "-0.0E-2" -> '-0.000' +dqbas297 toSci "-0.0E-3" -> '-0.0000' +dqbas298 toSci "-0E-2" -> '-0.00' +dqbas299 toSci "-0E-3" -> '-0.000' + +-- Engineering notation tests +dqbas301 toSci 10e12 -> 1.0E+13 +dqbas302 toEng 10e12 -> 10E+12 +dqbas303 toSci 10e11 -> 1.0E+12 +dqbas304 toEng 10e11 -> 1.0E+12 +dqbas305 toSci 10e10 -> 1.0E+11 +dqbas306 toEng 10e10 -> 100E+9 +dqbas307 toSci 10e9 -> 1.0E+10 +dqbas308 toEng 10e9 -> 10E+9 +dqbas309 toSci 10e8 -> 1.0E+9 +dqbas310 toEng 10e8 -> 1.0E+9 +dqbas311 toSci 10e7 -> 1.0E+8 +dqbas312 toEng 10e7 -> 100E+6 +dqbas313 toSci 10e6 -> 1.0E+7 +dqbas314 toEng 10e6 -> 10E+6 +dqbas315 toSci 10e5 -> 1.0E+6 +dqbas316 toEng 10e5 -> 1.0E+6 +dqbas317 toSci 10e4 -> 1.0E+5 +dqbas318 toEng 10e4 -> 100E+3 +dqbas319 toSci 10e3 -> 1.0E+4 +dqbas320 toEng 10e3 -> 10E+3 +dqbas321 toSci 10e2 -> 1.0E+3 +dqbas322 toEng 10e2 -> 1.0E+3 +dqbas323 toSci 10e1 -> 1.0E+2 +dqbas324 toEng 10e1 -> 100 +dqbas325 toSci 10e0 -> 10 +dqbas326 toEng 10e0 -> 10 +dqbas327 toSci 10e-1 -> 1.0 +dqbas328 toEng 10e-1 -> 1.0 +dqbas329 toSci 10e-2 -> 0.10 +dqbas330 toEng 10e-2 -> 0.10 +dqbas331 toSci 10e-3 -> 0.010 +dqbas332 toEng 10e-3 -> 0.010 +dqbas333 toSci 10e-4 -> 0.0010 +dqbas334 toEng 10e-4 -> 0.0010 +dqbas335 toSci 10e-5 -> 0.00010 +dqbas336 toEng 10e-5 -> 0.00010 +dqbas337 toSci 10e-6 -> 0.000010 +dqbas338 toEng 10e-6 -> 0.000010 +dqbas339 toSci 10e-7 -> 0.0000010 +dqbas340 toEng 10e-7 -> 0.0000010 +dqbas341 toSci 10e-8 -> 1.0E-7 +dqbas342 toEng 10e-8 -> 100E-9 +dqbas343 toSci 10e-9 -> 1.0E-8 +dqbas344 toEng 10e-9 -> 10E-9 +dqbas345 toSci 10e-10 -> 1.0E-9 +dqbas346 toEng 10e-10 -> 1.0E-9 +dqbas347 toSci 10e-11 -> 1.0E-10 +dqbas348 toEng 10e-11 -> 100E-12 +dqbas349 toSci 10e-12 -> 1.0E-11 +dqbas350 toEng 10e-12 -> 10E-12 +dqbas351 toSci 10e-13 -> 1.0E-12 +dqbas352 toEng 10e-13 -> 1.0E-12 + +dqbas361 toSci 7E12 -> 7E+12 +dqbas362 toEng 7E12 -> 7E+12 +dqbas363 toSci 7E11 -> 7E+11 +dqbas364 toEng 7E11 -> 700E+9 +dqbas365 toSci 7E10 -> 7E+10 +dqbas366 toEng 7E10 -> 70E+9 +dqbas367 toSci 7E9 -> 7E+9 +dqbas368 toEng 7E9 -> 7E+9 +dqbas369 toSci 7E8 -> 7E+8 +dqbas370 toEng 7E8 -> 700E+6 +dqbas371 toSci 7E7 -> 7E+7 +dqbas372 toEng 7E7 -> 70E+6 +dqbas373 toSci 7E6 -> 7E+6 +dqbas374 toEng 7E6 -> 7E+6 +dqbas375 toSci 7E5 -> 7E+5 +dqbas376 toEng 7E5 -> 700E+3 +dqbas377 toSci 7E4 -> 7E+4 +dqbas378 toEng 7E4 -> 70E+3 +dqbas379 toSci 7E3 -> 7E+3 +dqbas380 toEng 7E3 -> 7E+3 +dqbas381 toSci 7E2 -> 7E+2 +dqbas382 toEng 7E2 -> 700 +dqbas383 toSci 7E1 -> 7E+1 +dqbas384 toEng 7E1 -> 70 +dqbas385 toSci 7E0 -> 7 +dqbas386 toEng 7E0 -> 7 +dqbas387 toSci 7E-1 -> 0.7 +dqbas388 toEng 7E-1 -> 0.7 +dqbas389 toSci 7E-2 -> 0.07 +dqbas390 toEng 7E-2 -> 0.07 +dqbas391 toSci 7E-3 -> 0.007 +dqbas392 toEng 7E-3 -> 0.007 +dqbas393 toSci 7E-4 -> 0.0007 +dqbas394 toEng 7E-4 -> 0.0007 +dqbas395 toSci 7E-5 -> 0.00007 +dqbas396 toEng 7E-5 -> 0.00007 +dqbas397 toSci 7E-6 -> 0.000007 +dqbas398 toEng 7E-6 -> 0.000007 +dqbas399 toSci 7E-7 -> 7E-7 +dqbas400 toEng 7E-7 -> 700E-9 +dqbas401 toSci 7E-8 -> 7E-8 +dqbas402 toEng 7E-8 -> 70E-9 +dqbas403 toSci 7E-9 -> 7E-9 +dqbas404 toEng 7E-9 -> 7E-9 +dqbas405 toSci 7E-10 -> 7E-10 +dqbas406 toEng 7E-10 -> 700E-12 +dqbas407 toSci 7E-11 -> 7E-11 +dqbas408 toEng 7E-11 -> 70E-12 +dqbas409 toSci 7E-12 -> 7E-12 +dqbas410 toEng 7E-12 -> 7E-12 +dqbas411 toSci 7E-13 -> 7E-13 +dqbas412 toEng 7E-13 -> 700E-15 + +-- Exacts remain exact up to precision .. +dqbas420 toSci 100 -> 100 +dqbas422 toSci 1000 -> 1000 +dqbas424 toSci 999.9 -> 999.9 +dqbas426 toSci 1000.0 -> 1000.0 +dqbas428 toSci 1000.1 -> 1000.1 +dqbas430 toSci 10000 -> 10000 +dqbas432 toSci 1000000000000000000000000000000 -> 1000000000000000000000000000000 +dqbas434 toSci 10000000000000000000000000000000 -> 10000000000000000000000000000000 +dqbas436 toSci 100000000000000000000000000000000 -> 100000000000000000000000000000000 +dqbas438 toSci 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqbas440 toSci 10000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+34 Rounded +dqbas442 toSci 10000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+34 Rounded +dqbas444 toSci 10000000000000000000000000000000003 -> 1.000000000000000000000000000000000E+34 Rounded Inexact +dqbas446 toSci 10000000000000000000000000000000005 -> 1.000000000000000000000000000000000E+34 Rounded Inexact +dqbas448 toSci 100000000000000000000000000000000050 -> 1.000000000000000000000000000000000E+35 Rounded Inexact +dqbas450 toSci 10000000000000000000000000000000009 -> 1.000000000000000000000000000000001E+34 Rounded Inexact +dqbas452 toSci 100000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+35 Rounded +dqbas454 toSci 100000000000000000000000000000000003 -> 1.000000000000000000000000000000000E+35 Rounded Inexact +dqbas456 toSci 100000000000000000000000000000000005 -> 1.000000000000000000000000000000000E+35 Rounded Inexact +dqbas458 toSci 100000000000000000000000000000000009 -> 1.000000000000000000000000000000000E+35 Rounded Inexact +dqbas460 toSci 1000000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+36 Rounded +dqbas462 toSci 1000000000000000000000000000000000300 -> 1.000000000000000000000000000000000E+36 Rounded Inexact +dqbas464 toSci 1000000000000000000000000000000000500 -> 1.000000000000000000000000000000000E+36 Rounded Inexact +dqbas466 toSci 1000000000000000000000000000000000900 -> 1.000000000000000000000000000000001E+36 Rounded Inexact +dqbas468 toSci 10000000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+37 Rounded +dqbas470 toSci 10000000000000000000000000000000003000 -> 1.000000000000000000000000000000000E+37 Rounded Inexact +dqbas472 toSci 10000000000000000000000000000000005000 -> 1.000000000000000000000000000000000E+37 Rounded Inexact +dqbas474 toSci 10000000000000000000000000000000009000 -> 1.000000000000000000000000000000001E+37 Rounded Inexact + +-- check rounding modes heeded +rounding: ceiling +dqbsr401 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr402 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr403 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr404 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +rounding: up +dqbsr405 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr406 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr407 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr408 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +rounding: floor +dqbsr410 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr411 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr412 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr413 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112345 Rounded Inexact +rounding: half_down +dqbsr415 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr416 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr417 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr418 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr419 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +rounding: half_even +dqbsr421 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr422 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr423 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr424 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr425 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +rounding: down +dqbsr426 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr427 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr428 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr429 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112345 Rounded Inexact +rounding: half_up +dqbsr431 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr432 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr433 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr434 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112347 Rounded Inexact +dqbsr435 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +-- negatives +rounding: ceiling +dqbsr501 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr502 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr503 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr504 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112345 Rounded Inexact +rounding: up +dqbsr505 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr506 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr507 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr508 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact +rounding: floor +dqbsr510 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr511 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr512 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr513 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact +rounding: half_down +dqbsr515 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr516 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr517 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr518 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr519 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact +rounding: half_even +dqbsr521 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr522 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr523 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr524 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr525 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact +rounding: down +dqbsr526 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr527 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr528 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr529 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112345 Rounded Inexact +rounding: half_up +dqbsr531 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr532 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr533 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr534 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112347 Rounded Inexact +dqbsr535 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact + +rounding: half_even + +-- The 'baddies' tests from DiagBigDecimal, plus some new ones +dqbas500 toSci '1..2' -> NaN Conversion_syntax +dqbas501 toSci '.' -> NaN Conversion_syntax +dqbas502 toSci '..' -> NaN Conversion_syntax +dqbas503 toSci '++1' -> NaN Conversion_syntax +dqbas504 toSci '--1' -> NaN Conversion_syntax +dqbas505 toSci '-+1' -> NaN Conversion_syntax +dqbas506 toSci '+-1' -> NaN Conversion_syntax +dqbas507 toSci '12e' -> NaN Conversion_syntax +dqbas508 toSci '12e++' -> NaN Conversion_syntax +dqbas509 toSci '12f4' -> NaN Conversion_syntax +dqbas510 toSci ' +1' -> NaN Conversion_syntax +dqbas511 toSci '+ 1' -> NaN Conversion_syntax +dqbas512 toSci '12 ' -> NaN Conversion_syntax +dqbas513 toSci ' + 1' -> NaN Conversion_syntax +dqbas514 toSci ' - 1 ' -> NaN Conversion_syntax +dqbas515 toSci 'x' -> NaN Conversion_syntax +dqbas516 toSci '-1-' -> NaN Conversion_syntax +dqbas517 toSci '12-' -> NaN Conversion_syntax +dqbas518 toSci '3+' -> NaN Conversion_syntax +dqbas519 toSci '' -> NaN Conversion_syntax +dqbas520 toSci '1e-' -> NaN Conversion_syntax +dqbas521 toSci '7e99999a' -> NaN Conversion_syntax +dqbas522 toSci '7e123567890x' -> NaN Conversion_syntax +dqbas523 toSci '7e12356789012x' -> NaN Conversion_syntax +dqbas524 toSci '' -> NaN Conversion_syntax +dqbas525 toSci 'e100' -> NaN Conversion_syntax +dqbas526 toSci '\u0e5a' -> NaN Conversion_syntax +dqbas527 toSci '\u0b65' -> NaN Conversion_syntax +dqbas528 toSci '123,65' -> NaN Conversion_syntax +dqbas529 toSci '1.34.5' -> NaN Conversion_syntax +dqbas530 toSci '.123.5' -> NaN Conversion_syntax +dqbas531 toSci '01.35.' -> NaN Conversion_syntax +dqbas532 toSci '01.35-' -> NaN Conversion_syntax +dqbas533 toSci '0000..' -> NaN Conversion_syntax +dqbas534 toSci '.0000.' -> NaN Conversion_syntax +dqbas535 toSci '00..00' -> NaN Conversion_syntax +dqbas536 toSci '111e*123' -> NaN Conversion_syntax +dqbas537 toSci '111e123-' -> NaN Conversion_syntax +dqbas538 toSci '111e+12+' -> NaN Conversion_syntax +dqbas539 toSci '111e1-3-' -> NaN Conversion_syntax +dqbas540 toSci '111e1*23' -> NaN Conversion_syntax +dqbas541 toSci '111e1e+3' -> NaN Conversion_syntax +dqbas542 toSci '1e1.0' -> NaN Conversion_syntax +dqbas543 toSci '1e123e' -> NaN Conversion_syntax +dqbas544 toSci 'ten' -> NaN Conversion_syntax +dqbas545 toSci 'ONE' -> NaN Conversion_syntax +dqbas546 toSci '1e.1' -> NaN Conversion_syntax +dqbas547 toSci '1e1.' -> NaN Conversion_syntax +dqbas548 toSci '1ee' -> NaN Conversion_syntax +dqbas549 toSci 'e+1' -> NaN Conversion_syntax +dqbas550 toSci '1.23.4' -> NaN Conversion_syntax +dqbas551 toSci '1.2.1' -> NaN Conversion_syntax +dqbas552 toSci '1E+1.2' -> NaN Conversion_syntax +dqbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax +dqbas554 toSci '1E++1' -> NaN Conversion_syntax +dqbas555 toSci '1E--1' -> NaN Conversion_syntax +dqbas556 toSci '1E+-1' -> NaN Conversion_syntax +dqbas557 toSci '1E-+1' -> NaN Conversion_syntax +dqbas558 toSci '1E''1' -> NaN Conversion_syntax +dqbas559 toSci "1E""1" -> NaN Conversion_syntax +dqbas560 toSci "1E""""" -> NaN Conversion_syntax +-- Near-specials +dqbas561 toSci "qNaN" -> NaN Conversion_syntax +dqbas562 toSci "NaNq" -> NaN Conversion_syntax +dqbas563 toSci "NaNs" -> NaN Conversion_syntax +dqbas564 toSci "Infi" -> NaN Conversion_syntax +dqbas565 toSci "Infin" -> NaN Conversion_syntax +dqbas566 toSci "Infini" -> NaN Conversion_syntax +dqbas567 toSci "Infinit" -> NaN Conversion_syntax +dqbas568 toSci "-Infinit" -> NaN Conversion_syntax +dqbas569 toSci "0Inf" -> NaN Conversion_syntax +dqbas570 toSci "9Inf" -> NaN Conversion_syntax +dqbas571 toSci "-0Inf" -> NaN Conversion_syntax +dqbas572 toSci "-9Inf" -> NaN Conversion_syntax +dqbas573 toSci "-sNa" -> NaN Conversion_syntax +dqbas574 toSci "xNaN" -> NaN Conversion_syntax +dqbas575 toSci "0sNaN" -> NaN Conversion_syntax + +-- some baddies with dots and Es and dots and specials +dqbas576 toSci 'e+1' -> NaN Conversion_syntax +dqbas577 toSci '.e+1' -> NaN Conversion_syntax +dqbas578 toSci '+.e+1' -> NaN Conversion_syntax +dqbas579 toSci '-.e+' -> NaN Conversion_syntax +dqbas580 toSci '-.e' -> NaN Conversion_syntax +dqbas581 toSci 'E+1' -> NaN Conversion_syntax +dqbas582 toSci '.E+1' -> NaN Conversion_syntax +dqbas583 toSci '+.E+1' -> NaN Conversion_syntax +dqbas584 toSci '-.E+' -> NaN Conversion_syntax +dqbas585 toSci '-.E' -> NaN Conversion_syntax + +dqbas586 toSci '.NaN' -> NaN Conversion_syntax +dqbas587 toSci '-.NaN' -> NaN Conversion_syntax +dqbas588 toSci '+.sNaN' -> NaN Conversion_syntax +dqbas589 toSci '+.Inf' -> NaN Conversion_syntax +dqbas590 toSci '.Infinity' -> NaN Conversion_syntax + +-- Zeros +dqbas601 toSci 0.000000000 -> 0E-9 +dqbas602 toSci 0.00000000 -> 0E-8 +dqbas603 toSci 0.0000000 -> 0E-7 +dqbas604 toSci 0.000000 -> 0.000000 +dqbas605 toSci 0.00000 -> 0.00000 +dqbas606 toSci 0.0000 -> 0.0000 +dqbas607 toSci 0.000 -> 0.000 +dqbas608 toSci 0.00 -> 0.00 +dqbas609 toSci 0.0 -> 0.0 +dqbas610 toSci .0 -> 0.0 +dqbas611 toSci 0. -> 0 +dqbas612 toSci -.0 -> -0.0 +dqbas613 toSci -0. -> -0 +dqbas614 toSci -0.0 -> -0.0 +dqbas615 toSci -0.00 -> -0.00 +dqbas616 toSci -0.000 -> -0.000 +dqbas617 toSci -0.0000 -> -0.0000 +dqbas618 toSci -0.00000 -> -0.00000 +dqbas619 toSci -0.000000 -> -0.000000 +dqbas620 toSci -0.0000000 -> -0E-7 +dqbas621 toSci -0.00000000 -> -0E-8 +dqbas622 toSci -0.000000000 -> -0E-9 + +dqbas630 toSci 0.00E+0 -> 0.00 +dqbas631 toSci 0.00E+1 -> 0.0 +dqbas632 toSci 0.00E+2 -> 0 +dqbas633 toSci 0.00E+3 -> 0E+1 +dqbas634 toSci 0.00E+4 -> 0E+2 +dqbas635 toSci 0.00E+5 -> 0E+3 +dqbas636 toSci 0.00E+6 -> 0E+4 +dqbas637 toSci 0.00E+7 -> 0E+5 +dqbas638 toSci 0.00E+8 -> 0E+6 +dqbas639 toSci 0.00E+9 -> 0E+7 + +dqbas640 toSci 0.0E+0 -> 0.0 +dqbas641 toSci 0.0E+1 -> 0 +dqbas642 toSci 0.0E+2 -> 0E+1 +dqbas643 toSci 0.0E+3 -> 0E+2 +dqbas644 toSci 0.0E+4 -> 0E+3 +dqbas645 toSci 0.0E+5 -> 0E+4 +dqbas646 toSci 0.0E+6 -> 0E+5 +dqbas647 toSci 0.0E+7 -> 0E+6 +dqbas648 toSci 0.0E+8 -> 0E+7 +dqbas649 toSci 0.0E+9 -> 0E+8 + +dqbas650 toSci 0E+0 -> 0 +dqbas651 toSci 0E+1 -> 0E+1 +dqbas652 toSci 0E+2 -> 0E+2 +dqbas653 toSci 0E+3 -> 0E+3 +dqbas654 toSci 0E+4 -> 0E+4 +dqbas655 toSci 0E+5 -> 0E+5 +dqbas656 toSci 0E+6 -> 0E+6 +dqbas657 toSci 0E+7 -> 0E+7 +dqbas658 toSci 0E+8 -> 0E+8 +dqbas659 toSci 0E+9 -> 0E+9 + +dqbas660 toSci 0.0E-0 -> 0.0 +dqbas661 toSci 0.0E-1 -> 0.00 +dqbas662 toSci 0.0E-2 -> 0.000 +dqbas663 toSci 0.0E-3 -> 0.0000 +dqbas664 toSci 0.0E-4 -> 0.00000 +dqbas665 toSci 0.0E-5 -> 0.000000 +dqbas666 toSci 0.0E-6 -> 0E-7 +dqbas667 toSci 0.0E-7 -> 0E-8 +dqbas668 toSci 0.0E-8 -> 0E-9 +dqbas669 toSci 0.0E-9 -> 0E-10 + +dqbas670 toSci 0.00E-0 -> 0.00 +dqbas671 toSci 0.00E-1 -> 0.000 +dqbas672 toSci 0.00E-2 -> 0.0000 +dqbas673 toSci 0.00E-3 -> 0.00000 +dqbas674 toSci 0.00E-4 -> 0.000000 +dqbas675 toSci 0.00E-5 -> 0E-7 +dqbas676 toSci 0.00E-6 -> 0E-8 +dqbas677 toSci 0.00E-7 -> 0E-9 +dqbas678 toSci 0.00E-8 -> 0E-10 +dqbas679 toSci 0.00E-9 -> 0E-11 + +dqbas680 toSci 000000. -> 0 +dqbas681 toSci 00000. -> 0 +dqbas682 toSci 0000. -> 0 +dqbas683 toSci 000. -> 0 +dqbas684 toSci 00. -> 0 +dqbas685 toSci 0. -> 0 +dqbas686 toSci +00000. -> 0 +dqbas687 toSci -00000. -> -0 +dqbas688 toSci +0. -> 0 +dqbas689 toSci -0. -> -0 + +-- Specials +dqbas700 toSci "NaN" -> NaN +dqbas701 toSci "nan" -> NaN +dqbas702 toSci "nAn" -> NaN +dqbas703 toSci "NAN" -> NaN +dqbas704 toSci "+NaN" -> NaN +dqbas705 toSci "+nan" -> NaN +dqbas706 toSci "+nAn" -> NaN +dqbas707 toSci "+NAN" -> NaN +dqbas708 toSci "-NaN" -> -NaN +dqbas709 toSci "-nan" -> -NaN +dqbas710 toSci "-nAn" -> -NaN +dqbas711 toSci "-NAN" -> -NaN +dqbas712 toSci 'NaN0' -> NaN +dqbas713 toSci 'NaN1' -> NaN1 +dqbas714 toSci 'NaN12' -> NaN12 +dqbas715 toSci 'NaN123' -> NaN123 +dqbas716 toSci 'NaN1234' -> NaN1234 +dqbas717 toSci 'NaN01' -> NaN1 +dqbas718 toSci 'NaN012' -> NaN12 +dqbas719 toSci 'NaN0123' -> NaN123 +dqbas720 toSci 'NaN01234' -> NaN1234 +dqbas721 toSci 'NaN001' -> NaN1 +dqbas722 toSci 'NaN0012' -> NaN12 +dqbas723 toSci 'NaN00123' -> NaN123 +dqbas724 toSci 'NaN001234' -> NaN1234 +dqbas725 toSci 'NaN1234567890123456781234567890123456' -> NaN Conversion_syntax +dqbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax +dqbas727 toSci 'NaN12.45' -> NaN Conversion_syntax +dqbas728 toSci 'NaN-12' -> NaN Conversion_syntax +dqbas729 toSci 'NaN+12' -> NaN Conversion_syntax + +dqbas730 toSci "sNaN" -> sNaN +dqbas731 toSci "snan" -> sNaN +dqbas732 toSci "SnAn" -> sNaN +dqbas733 toSci "SNAN" -> sNaN +dqbas734 toSci "+sNaN" -> sNaN +dqbas735 toSci "+snan" -> sNaN +dqbas736 toSci "+SnAn" -> sNaN +dqbas737 toSci "+SNAN" -> sNaN +dqbas738 toSci "-sNaN" -> -sNaN +dqbas739 toSci "-snan" -> -sNaN +dqbas740 toSci "-SnAn" -> -sNaN +dqbas741 toSci "-SNAN" -> -sNaN +dqbas742 toSci 'sNaN0000' -> sNaN +dqbas743 toSci 'sNaN7' -> sNaN7 +dqbas744 toSci 'sNaN007234' -> sNaN7234 +dqbas745 toSci 'sNaN1234567890123456787234561234567890' -> NaN Conversion_syntax +dqbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax +dqbas747 toSci 'sNaN-72' -> NaN Conversion_syntax + +dqbas748 toSci "Inf" -> Infinity +dqbas749 toSci "inf" -> Infinity +dqbas750 toSci "iNf" -> Infinity +dqbas751 toSci "INF" -> Infinity +dqbas752 toSci "+Inf" -> Infinity +dqbas753 toSci "+inf" -> Infinity +dqbas754 toSci "+iNf" -> Infinity +dqbas755 toSci "+INF" -> Infinity +dqbas756 toSci "-Inf" -> -Infinity +dqbas757 toSci "-inf" -> -Infinity +dqbas758 toSci "-iNf" -> -Infinity +dqbas759 toSci "-INF" -> -Infinity + +dqbas760 toSci "Infinity" -> Infinity +dqbas761 toSci "infinity" -> Infinity +dqbas762 toSci "iNfInItY" -> Infinity +dqbas763 toSci "INFINITY" -> Infinity +dqbas764 toSci "+Infinity" -> Infinity +dqbas765 toSci "+infinity" -> Infinity +dqbas766 toSci "+iNfInItY" -> Infinity +dqbas767 toSci "+INFINITY" -> Infinity +dqbas768 toSci "-Infinity" -> -Infinity +dqbas769 toSci "-infinity" -> -Infinity +dqbas770 toSci "-iNfInItY" -> -Infinity +dqbas771 toSci "-INFINITY" -> -Infinity + +-- Specials and zeros for toEng +dqbast772 toEng "NaN" -> NaN +dqbast773 toEng "-Infinity" -> -Infinity +dqbast774 toEng "-sNaN" -> -sNaN +dqbast775 toEng "-NaN" -> -NaN +dqbast776 toEng "+Infinity" -> Infinity +dqbast778 toEng "+sNaN" -> sNaN +dqbast779 toEng "+NaN" -> NaN +dqbast780 toEng "INFINITY" -> Infinity +dqbast781 toEng "SNAN" -> sNaN +dqbast782 toEng "NAN" -> NaN +dqbast783 toEng "infinity" -> Infinity +dqbast784 toEng "snan" -> sNaN +dqbast785 toEng "nan" -> NaN +dqbast786 toEng "InFINITY" -> Infinity +dqbast787 toEng "SnAN" -> sNaN +dqbast788 toEng "nAN" -> NaN +dqbast789 toEng "iNfinity" -> Infinity +dqbast790 toEng "sNan" -> sNaN +dqbast791 toEng "Nan" -> NaN +dqbast792 toEng "Infinity" -> Infinity +dqbast793 toEng "sNaN" -> sNaN + +-- Zero toEng, etc. +dqbast800 toEng 0e+1 -> "0.00E+3" -- doc example + +dqbast801 toEng 0.000000000 -> 0E-9 +dqbast802 toEng 0.00000000 -> 0.00E-6 +dqbast803 toEng 0.0000000 -> 0.0E-6 +dqbast804 toEng 0.000000 -> 0.000000 +dqbast805 toEng 0.00000 -> 0.00000 +dqbast806 toEng 0.0000 -> 0.0000 +dqbast807 toEng 0.000 -> 0.000 +dqbast808 toEng 0.00 -> 0.00 +dqbast809 toEng 0.0 -> 0.0 +dqbast810 toEng .0 -> 0.0 +dqbast811 toEng 0. -> 0 +dqbast812 toEng -.0 -> -0.0 +dqbast813 toEng -0. -> -0 +dqbast814 toEng -0.0 -> -0.0 +dqbast815 toEng -0.00 -> -0.00 +dqbast816 toEng -0.000 -> -0.000 +dqbast817 toEng -0.0000 -> -0.0000 +dqbast818 toEng -0.00000 -> -0.00000 +dqbast819 toEng -0.000000 -> -0.000000 +dqbast820 toEng -0.0000000 -> -0.0E-6 +dqbast821 toEng -0.00000000 -> -0.00E-6 +dqbast822 toEng -0.000000000 -> -0E-9 + +dqbast830 toEng 0.00E+0 -> 0.00 +dqbast831 toEng 0.00E+1 -> 0.0 +dqbast832 toEng 0.00E+2 -> 0 +dqbast833 toEng 0.00E+3 -> 0.00E+3 +dqbast834 toEng 0.00E+4 -> 0.0E+3 +dqbast835 toEng 0.00E+5 -> 0E+3 +dqbast836 toEng 0.00E+6 -> 0.00E+6 +dqbast837 toEng 0.00E+7 -> 0.0E+6 +dqbast838 toEng 0.00E+8 -> 0E+6 +dqbast839 toEng 0.00E+9 -> 0.00E+9 + +dqbast840 toEng 0.0E+0 -> 0.0 +dqbast841 toEng 0.0E+1 -> 0 +dqbast842 toEng 0.0E+2 -> 0.00E+3 +dqbast843 toEng 0.0E+3 -> 0.0E+3 +dqbast844 toEng 0.0E+4 -> 0E+3 +dqbast845 toEng 0.0E+5 -> 0.00E+6 +dqbast846 toEng 0.0E+6 -> 0.0E+6 +dqbast847 toEng 0.0E+7 -> 0E+6 +dqbast848 toEng 0.0E+8 -> 0.00E+9 +dqbast849 toEng 0.0E+9 -> 0.0E+9 + +dqbast850 toEng 0E+0 -> 0 +dqbast851 toEng 0E+1 -> 0.00E+3 +dqbast852 toEng 0E+2 -> 0.0E+3 +dqbast853 toEng 0E+3 -> 0E+3 +dqbast854 toEng 0E+4 -> 0.00E+6 +dqbast855 toEng 0E+5 -> 0.0E+6 +dqbast856 toEng 0E+6 -> 0E+6 +dqbast857 toEng 0E+7 -> 0.00E+9 +dqbast858 toEng 0E+8 -> 0.0E+9 +dqbast859 toEng 0E+9 -> 0E+9 + +dqbast860 toEng 0.0E-0 -> 0.0 +dqbast861 toEng 0.0E-1 -> 0.00 +dqbast862 toEng 0.0E-2 -> 0.000 +dqbast863 toEng 0.0E-3 -> 0.0000 +dqbast864 toEng 0.0E-4 -> 0.00000 +dqbast865 toEng 0.0E-5 -> 0.000000 +dqbast866 toEng 0.0E-6 -> 0.0E-6 +dqbast867 toEng 0.0E-7 -> 0.00E-6 +dqbast868 toEng 0.0E-8 -> 0E-9 +dqbast869 toEng 0.0E-9 -> 0.0E-9 + +dqbast870 toEng 0.00E-0 -> 0.00 +dqbast871 toEng 0.00E-1 -> 0.000 +dqbast872 toEng 0.00E-2 -> 0.0000 +dqbast873 toEng 0.00E-3 -> 0.00000 +dqbast874 toEng 0.00E-4 -> 0.000000 +dqbast875 toEng 0.00E-5 -> 0.0E-6 +dqbast876 toEng 0.00E-6 -> 0.00E-6 +dqbast877 toEng 0.00E-7 -> 0E-9 +dqbast878 toEng 0.00E-8 -> 0.0E-9 +dqbast879 toEng 0.00E-9 -> 0.00E-9 + +-- long input strings +dqbas801 tosci '01234567890123456' -> 1234567890123456 +dqbas802 tosci '001234567890123456' -> 1234567890123456 +dqbas803 tosci '0001234567890123456' -> 1234567890123456 +dqbas804 tosci '00001234567890123456' -> 1234567890123456 +dqbas805 tosci '000001234567890123456' -> 1234567890123456 +dqbas806 tosci '0000001234567890123456' -> 1234567890123456 +dqbas807 tosci '00000001234567890123456' -> 1234567890123456 +dqbas808 tosci '000000001234567890123456' -> 1234567890123456 +dqbas809 tosci '0000000001234567890123456' -> 1234567890123456 +dqbas810 tosci '00000000001234567890123456' -> 1234567890123456 + +dqbas811 tosci '0.1234567890123456' -> 0.1234567890123456 +dqbas812 tosci '0.01234567890123456' -> 0.01234567890123456 +dqbas813 tosci '0.001234567890123456' -> 0.001234567890123456 +dqbas814 tosci '0.0001234567890123456' -> 0.0001234567890123456 +dqbas815 tosci '0.00001234567890123456' -> 0.00001234567890123456 +dqbas816 tosci '0.000001234567890123456' -> 0.000001234567890123456 +dqbas817 tosci '0.0000001234567890123456' -> 1.234567890123456E-7 +dqbas818 tosci '0.00000001234567890123456' -> 1.234567890123456E-8 +dqbas819 tosci '0.000000001234567890123456' -> 1.234567890123456E-9 +dqbas820 tosci '0.0000000001234567890123456' -> 1.234567890123456E-10 + +dqbas821 tosci '12345678912345678901234567801234567890' -> 1.234567891234567890123456780123457E+37 Inexact Rounded +dqbas822 tosci '123456789123456789012345678012345678901' -> 1.234567891234567890123456780123457E+38 Inexact Rounded +dqbas823 tosci '1234567891234567890123456780123456789012' -> 1.234567891234567890123456780123457E+39 Inexact Rounded +dqbas824 tosci '12345678912345678901234567801234567890123' -> 1.234567891234567890123456780123457E+40 Inexact Rounded +dqbas825 tosci '123456789123456789012345678012345678901234' -> 1.234567891234567890123456780123457E+41 Inexact Rounded +dqbas826 tosci '1234567891234567890123456780123456789012345' -> 1.234567891234567890123456780123457E+42 Inexact Rounded +dqbas827 tosci '12345678912345678901234567801234567890123456' -> 1.234567891234567890123456780123457E+43 Inexact Rounded +dqbas828 tosci '123456789123456789012345678012345678901234567' -> 1.234567891234567890123456780123457E+44 Inexact Rounded +dqbas829 tosci '1234567891234567890123456780123456789012345678' -> 1.234567891234567890123456780123457E+45 Inexact Rounded + +-- subnormals and overflows +dqbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded +dqbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded +dqbas908 toSci '0.9e-999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas909 toSci '0.09e-999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded +dqbas911 toSci '10e-1000000000' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded +dqbas913 toSci '99e-9999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded +dqbas915 toSci '1111e-9999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas916 toSci '1111e-99999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded +-- negatives the same +dqbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded +dqbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded +dqbas920 toSci '-0.9e-999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas921 toSci '-0.09e-999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded +dqbas923 toSci '-10e-1000000000' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded +dqbas925 toSci '-99e-9999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded +dqbas927 toSci '-1111e-9999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas928 toSci '-1111e-99999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded + +-- overflow results at different rounding modes +rounding: ceiling +dqbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas931 toSci '-7e10000' -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +rounding: up +dqbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: down +dqbas934 toSci '7e10000' -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqbas935 toSci '-7e10000' -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +rounding: floor +dqbas936 toSci '7e10000' -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_up +dqbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_even +dqbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_down +dqbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_even + +-- Now check 854/754r some subnormals and underflow to 0 +dqbem400 toSci 1.0000E-383 -> 1.0000E-383 +dqbem401 toSci 0.1E-6172 -> 1E-6173 Subnormal +dqbem402 toSci 0.1000E-6172 -> 1.000E-6173 Subnormal +dqbem403 toSci 0.0100E-6172 -> 1.00E-6174 Subnormal +dqbem404 toSci 0.0010E-6172 -> 1.0E-6175 Subnormal +dqbem405 toSci 0.0001E-6172 -> 1E-6176 Subnormal +dqbem406 toSci 0.00010E-6172 -> 1E-6176 Subnormal Rounded +dqbem407 toSci 0.00013E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqbem408 toSci 0.00015E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem409 toSci 0.00017E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem410 toSci 0.00023E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem411 toSci 0.00025E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem412 toSci 0.00027E-6172 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqbem413 toSci 0.000149E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqbem414 toSci 0.000150E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem415 toSci 0.000151E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem416 toSci 0.000249E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem417 toSci 0.000250E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem418 toSci 0.000251E-6172 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqbem419 toSci 0.00009E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqbem420 toSci 0.00005E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem421 toSci 0.00003E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem422 toSci 0.000009E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem423 toSci 0.000005E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem424 toSci 0.000003E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqbem425 toSci 0.001049E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded +dqbem426 toSci 0.001050E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded +dqbem427 toSci 0.001051E-6172 -> 1.1E-6175 Underflow Subnormal Inexact Rounded +dqbem428 toSci 0.001149E-6172 -> 1.1E-6175 Underflow Subnormal Inexact Rounded +dqbem429 toSci 0.001150E-6172 -> 1.2E-6175 Underflow Subnormal Inexact Rounded +dqbem430 toSci 0.001151E-6172 -> 1.2E-6175 Underflow Subnormal Inexact Rounded + +dqbem432 toSci 0.010049E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded +dqbem433 toSci 0.010050E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded +dqbem434 toSci 0.010051E-6172 -> 1.01E-6174 Underflow Subnormal Inexact Rounded +dqbem435 toSci 0.010149E-6172 -> 1.01E-6174 Underflow Subnormal Inexact Rounded +dqbem436 toSci 0.010150E-6172 -> 1.02E-6174 Underflow Subnormal Inexact Rounded +dqbem437 toSci 0.010151E-6172 -> 1.02E-6174 Underflow Subnormal Inexact Rounded + +dqbem440 toSci 0.10103E-6172 -> 1.010E-6173 Underflow Subnormal Inexact Rounded +dqbem441 toSci 0.10105E-6172 -> 1.010E-6173 Underflow Subnormal Inexact Rounded +dqbem442 toSci 0.10107E-6172 -> 1.011E-6173 Underflow Subnormal Inexact Rounded +dqbem443 toSci 0.10113E-6172 -> 1.011E-6173 Underflow Subnormal Inexact Rounded +dqbem444 toSci 0.10115E-6172 -> 1.012E-6173 Underflow Subnormal Inexact Rounded +dqbem445 toSci 0.10117E-6172 -> 1.012E-6173 Underflow Subnormal Inexact Rounded + +dqbem450 toSci 1.10730E-6173 -> 1.107E-6173 Underflow Subnormal Inexact Rounded +dqbem451 toSci 1.10750E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded +dqbem452 toSci 1.10770E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded +dqbem453 toSci 1.10830E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded +dqbem454 toSci 1.10850E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded +dqbem455 toSci 1.10870E-6173 -> 1.109E-6173 Underflow Subnormal Inexact Rounded + +-- make sure sign OK +dqbem456 toSci -0.10103E-6172 -> -1.010E-6173 Underflow Subnormal Inexact Rounded +dqbem457 toSci -0.10105E-6172 -> -1.010E-6173 Underflow Subnormal Inexact Rounded +dqbem458 toSci -0.10107E-6172 -> -1.011E-6173 Underflow Subnormal Inexact Rounded +dqbem459 toSci -0.10113E-6172 -> -1.011E-6173 Underflow Subnormal Inexact Rounded +dqbem460 toSci -0.10115E-6172 -> -1.012E-6173 Underflow Subnormal Inexact Rounded +dqbem461 toSci -0.10117E-6172 -> -1.012E-6173 Underflow Subnormal Inexact Rounded + +-- '999s' cases +dqbem464 toSci 999999E-6173 -> 9.99999E-6168 Subnormal +dqbem465 toSci 99999.0E-6172 -> 9.99990E-6168 Subnormal +dqbem466 toSci 99999.E-6172 -> 9.9999E-6168 Subnormal +dqbem467 toSci 9999.9E-6172 -> 9.9999E-6169 Subnormal +dqbem468 toSci 999.99E-6172 -> 9.9999E-6170 Subnormal +dqbem469 toSci 99.999E-6172 -> 9.9999E-6171 Subnormal +dqbem470 toSci 9.9999E-6172 -> 9.9999E-6172 Subnormal +dqbem471 toSci 0.99999E-6172 -> 1.0000E-6172 Underflow Subnormal Inexact Rounded +dqbem472 toSci 0.099999E-6172 -> 1.000E-6173 Underflow Subnormal Inexact Rounded +dqbem473 toSci 0.0099999E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded +dqbem474 toSci 0.00099999E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded +dqbem475 toSci 0.000099999E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqbem476 toSci 0.0000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem477 toSci 0.00000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem478 toSci 0.000000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- Exponents with insignificant leading zeros +dqbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded +dqbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded +dqbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded +dqbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded +dqbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded +dqbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded +dqbas1007 toSci 1e-999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1008 toSci 1e-0999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1009 toSci 1e-00999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1010 toSci 1e-000999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1011 toSci 1e-000000000000999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1012 toSci 1e-000000000001000000007 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- check for double-rounded subnormals +dqbas1041 toSci 1.1111111111111111111111111111152444E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow +dqbas1042 toSci 1.1111111111111111111111111111152445E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow +dqbas1043 toSci 1.1111111111111111111111111111152446E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow + +-- clamped zeros [see also clamp.decTest] +dqbas1075 toSci 0e+10000 -> 0E+6111 Clamped +dqbas1076 toSci 0e-10000 -> 0E-6176 Clamped +dqbas1077 toSci -0e+10000 -> -0E+6111 Clamped +dqbas1078 toSci -0e-10000 -> -0E-6176 Clamped + +-- extreme values from next-wider +dqbas1101 toSci -9.9999999999999999999999999999999999999999999999999999999999999999999E+1572864 -> -Infinity Overflow Inexact Rounded +dqbas1102 toSci -1E-1572863 -> -0E-6176 Inexact Rounded Subnormal Underflow Clamped +dqbas1103 toSci -1E-1572932 -> -0E-6176 Inexact Rounded Subnormal Underflow Clamped +dqbas1104 toSci -0 -> -0 +dqbas1105 toSci +0 -> 0 +dqbas1106 toSci +1E-1572932 -> 0E-6176 Inexact Rounded Subnormal Underflow Clamped +dqbas1107 toSci +1E-1572863 -> 0E-6176 Inexact Rounded Subnormal Underflow Clamped +dqbas1108 toSci +9.9999999999999999999999999999999999999999999999999999999999999999999E+1572864 -> Infinity Overflow Inexact Rounded + diff --git a/Lib/test/decimaltestdata/dqCanonical.decTest b/Lib/test/decimaltestdata/dqCanonical.decTest index 3ddf6eab2da..006db8595ca 100644 --- a/Lib/test/decimaltestdata/dqCanonical.decTest +++ b/Lib/test/decimaltestdata/dqCanonical.decTest @@ -1,372 +1,372 @@ ------------------------------------------------------------------------- --- dqCanonical.decTest -- test decQuad canonical results -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests that copy operations leave uncanonical operands --- unchanged, and vice versa - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Uncanonical declets are: abc, where: --- a=1,2,3 --- b=6,7,e,f --- c=e,f - --- assert some standard (canonical) values; this tests that FromString --- produces canonical results (many more in decimalNN) -dqcan001 apply 9.999999999999999999999999999999999E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan002 apply 0 -> #22080000000000000000000000000000 -dqcan003 apply 1 -> #22080000000000000000000000000001 -dqcan004 apply -1 -> #a2080000000000000000000000000001 -dqcan005 apply Infinity -> #78000000000000000000000000000000 -dqcan006 apply -Infinity -> #f8000000000000000000000000000000 -dqcan007 apply -NaN -> #fc000000000000000000000000000000 -dqcan008 apply -sNaN -> #fe000000000000000000000000000000 -dqcan009 apply NaN999999999999999999999999999999999 -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan010 apply sNaN999999999999999999999999999999999 -> #7e000ff3fcff3fcff3fcff3fcff3fcff -decan011 apply 9999999999999999999999999999999999 -> #6e080ff3fcff3fcff3fcff3fcff3fcff -dqcan012 apply 7.50 -> #220780000000000000000000000003d0 -dqcan013 apply 9.99 -> #220780000000000000000000000000ff - --- Base tests for canonical encodings (individual operator --- propagation is tested later) - --- Finites: declets in coefficient -dqcan021 canonical #77ffcff3fcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan022 canonical #77fffff3fcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan023 canonical #77ffcffffcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan024 canonical #77ffcff3ffff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan025 canonical #77ffcff3fcffffcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan026 canonical #77ffcff3fcff3ffff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan027 canonical #77ffcff3fcff3fcffffcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan028 canonical #77ffcff3fcff3fcff3ffff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan029 canonical #77ffcff3fcff3fcff3fcffffcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan030 canonical #77ffcff3fcff3fcff3fcff3ffff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan031 canonical #77ffcff3fcff3fcff3fcff3fcffffcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan032 canonical #77ffcff3fcff3fcff3fcff3fcff3ffff -> #77ffcff3fcff3fcff3fcff3fcff3fcff - --- NaN: declets in payload -dqcan061 canonical #7c000ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan062 canonical #7c000ffffcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan063 canonical #7c000ff3ffff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan064 canonical #7c000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan065 canonical #7c000ff3fcff3ffff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan066 canonical #7c000ff3fcff3fcffffcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan067 canonical #7c000ff3fcff3fcff3ffff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan068 canonical #7c000ff3fcff3fcff3fcffffcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan069 canonical #7c000ff3fcff3fcff3fcff3ffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan070 canonical #7c000ff3fcff3fcff3fcff3fcffffcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan071 canonical #7c000ff3fcff3fcff3fcff3fcff3ffff -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -dqcan081 canonical #7d000ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan082 canonical #7c800ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan083 canonical #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan084 canonical #7c200ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan085 canonical #7c100ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan086 canonical #7c080ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan087 canonical #7c040ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan088 canonical #7c020ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan089 canonical #7c010ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan090 canonical #7c008ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan091 canonical #7c004ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff - --- sNaN: declets in payload -dqcan101 canonical #7e000ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan102 canonical #7e000ffffcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan103 canonical #7e000ff3ffff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan104 canonical #7e000ff3fcffffcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan105 canonical #7e000ff3fcff3ffff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan106 canonical #7e000ff3fcff3fcffffcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan107 canonical #7e000ff3fcff3fcff3ffff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan108 canonical #7e000ff3fcff3fcff3fcffffcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan109 canonical #7e000ff3fcff3fcff3fcff3ffff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan100 canonical #7e000ff3fcff3fcff3fcff3fcffffcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan111 canonical #7e000ff3fcff3fcff3fcff3fcff3ffff -> #7e000ff3fcff3fcff3fcff3fcff3fcff --- sNaN: exponent continuation bits [excluding sNaN selector] -dqcan121 canonical #7f000ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan122 canonical #7e800ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan123 canonical #7e400ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan124 canonical #7e200ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan125 canonical #7e100ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan126 canonical #7e080ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan127 canonical #7e040ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan128 canonical #7e020ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan129 canonical #7e010ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan130 canonical #7e008ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan131 canonical #7e004ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff - --- Inf: exponent continuation bits -dqcan137 canonical #78000000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan138 canonical #79000000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan139 canonical #7a000000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan140 canonical #78800000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan141 canonical #78400000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan142 canonical #78200000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan143 canonical #78100000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan144 canonical #78080000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan145 canonical #78040000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan146 canonical #78020000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan147 canonical #78010000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan148 canonical #78008000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan149 canonical #78004000000000000000000000000000 -> #78000000000000000000000000000000 - --- Inf: coefficient continuation bits (first, last, and a few others) -dqcan150 canonical #78000000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan151 canonical #78020000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan152 canonical #78000000000000000000000000000001 -> #78000000000000000000000000000000 -dqcan153 canonical #78010000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan154 canonical #78002000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan155 canonical #78000800000000000000000000000000 -> #78000000000000000000000000000000 -dqcan156 canonical #78000020000000000000000000000000 -> #78000000000000000000000000000000 -dqcan157 canonical #78000004000000000000000000000000 -> #78000000000000000000000000000000 -dqcan158 canonical #78000000400000000000000000000000 -> #78000000000000000000000000000000 -dqcan159 canonical #78000000080000000000000000000000 -> #78000000000000000000000000000000 -dqcan160 canonical #78000000004000000000000000000000 -> #78000000000000000000000000000000 -dqcan161 canonical #78000000000200000000000000000000 -> #78000000000000000000000000000000 -dqcan162 canonical #78000000000080000000000000000000 -> #78000000000000000000000000000000 -dqcan163 canonical #78000000000002000000000000000000 -> #78000000000000000000000000000000 -dqcan164 canonical #78000000000000400000000000000000 -> #78000000000000000000000000000000 -dqcan165 canonical #78000000000000080000000000000000 -> #78000000000000000000000000000000 -dqcan166 canonical #78000000000000001000000000000000 -> #78000000000000000000000000000000 -dqcan167 canonical #78000000000000000200000000000000 -> #78000000000000000000000000000000 -dqcan168 canonical #78000000000000000080000000000000 -> #78000000000000000000000000000000 -dqcan169 canonical #78000000000000000004000000000000 -> #78000000000000000000000000000000 -dqcan170 canonical #78000000000000000000400000000000 -> #78000000000000000000000000000000 -dqcan171 canonical #78000000000000000000010000000000 -> #78000000000000000000000000000000 -dqcan172 canonical #78000000000000000000002000000000 -> #78000000000000000000000000000000 -dqcan173 canonical #78000000000000000000000400000000 -> #78000000000000000000000000000000 -dqcan174 canonical #78000000000000000000000080000000 -> #78000000000000000000000000000000 -dqcan175 canonical #78000000000000000000000002000000 -> #78000000000000000000000000000000 -dqcan176 canonical #78000000000000000000000000400000 -> #78000000000000000000000000000000 -dqcan177 canonical #78000000000000000000000000020000 -> #78000000000000000000000000000000 -dqcan178 canonical #78000000000000000000000000001000 -> #78000000000000000000000000000000 -dqcan179 canonical #78000000000000000000000000000400 -> #78000000000000000000000000000000 -dqcan180 canonical #78000000000000000000000000000020 -> #78000000000000000000000000000000 -dqcan181 canonical #78000000000000000000000000000008 -> #78000000000000000000000000000000 - - --- Now the operators -- trying to check paths that might fail to --- canonicalize propagated operands - ------ Add: --- Finites: neutral 0 -dqcan202 add 0E+6144 #77ffcff3fcff3fcffffcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan203 add #77ffcff3fcff3fcff3fcff3ffff3fcff 0E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff --- tiny zero -dqcan204 add 0E-6176 #77ffcff3ffff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded -dqcan205 add #77ffcff3fcff3fcff3fcff3fcff3ffff 0E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded --- tiny non zero -dqcan206 add -1E-6176 #77ffcff3fcff3fcff3fcff3fcfffffff -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded -dqcan207 add #77ffcffffffffffffffffffffff3fcff -1E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded --- NaN: declets in payload -dqcan211 add 0 #7c000ff3fcff3fcff3fcfffffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan212 add #7c000ff3fcff3fcfffffff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -dqcan213 add 0 #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan214 add #7c020ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- sNaN: declets in payload -dqcan215 add 0 #7e000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan216 add #7e003ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -dqcan217 add 0 #7e500ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan218 add #7e0e0ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -dqcan220 add 0 #78010000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan221 add #78680000000000000000000000000000 0 -> #78000000000000000000000000000000 --- Inf: coefficient continuation bits -dqcan222 add 0 #78002000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan223 add #78000000000000000000000000000001 0 -> #78000000000000000000000000000000 -dqcan224 add 0 #78000002000000000000000000000000 -> #78000000000000000000000000000000 -dqcan225 add #780000000000f0000000000000000000 0 -> #78000000000000000000000000000000 -dqcan226 add 0 #78000000000000000005000000000000 -> #78000000000000000000000000000000 -dqcan227 add #780000000000000000000000000a0000 0 -> #78000000000000000000000000000000 - ------ Class: [does not return encoded] - ------ Compare: -dqcan231 compare -Inf 1 -> #a2080000000000000000000000000001 -dqcan232 compare -Inf -Inf -> #22080000000000000000000000000000 -dqcan233 compare 1 -Inf -> #22080000000000000000000000000001 -dqcan234 compare #7c010ff3fcff3fcff3fcff3ffffffcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan235 compare #7e004ff3fcff3fcff3ffffffcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation - ------ CompareSig: -dqcan241 comparesig -Inf 1 -> #a2080000000000000000000000000001 -dqcan242 comparesig -Inf -Inf -> #22080000000000000000000000000000 -dqcan243 comparesig 1 -Inf -> #22080000000000000000000000000001 -dqcan244 comparesig #7c400ff3ffff3fcff3fcff3fcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan245 comparesig #7e050ff3fcfffffff3fcff3fcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation - ------ Copy: [does not usually canonicalize] --- finites -dqcan250 copy #6e080ff3fcff3fcfffffff3fcfffffff -> #6e080ff3fcff3fcfffffff3fcfffffff -dqcan251 copy #ee080ff3fcff3ffff3fcff3ffff3fcff -> #ee080ff3fcff3ffff3fcff3ffff3fcff --- NaNs -dqcan252 copy #7c000ff3fcffffffffffffffcff3fcff -> #7c000ff3fcffffffffffffffcff3fcff -dqcan253 copy #7c080ff3fcff3fcff3fcff3fcff3fcff -> #7c080ff3fcff3fcff3fcff3fcff3fcff --- sNaN -dqcan254 copy #7e003ff3fcffffffffffffffcff3fcff -> #7e003ff3fcffffffffffffffcff3fcff -dqcan255 copy #7e100ff3fcff3fcff3fcff3fcff3fcff -> #7e100ff3fcff3fcff3fcff3fcff3fcff --- Inf -dqcan258 copy #78002000000000000000000000000000 -> #78002000000000000000000000000000 -dqcan259 copy #78000000000010000000000000100000 -> #78000000000010000000000000100000 - ------ CopyAbs: [does not usually canonicalize] --- finites -dqcan260 copyabs #6e080ff3fcff3fcfffffff3fcfffffff -> #6e080ff3fcff3fcfffffff3fcfffffff -dqcan261 copyabs #ee080ff3fcff3ffff3fcff3ffff3fcff -> #6e080ff3fcff3ffff3fcff3ffff3fcff --- NaNs -dqcan262 copyabs #fc000ff3fcffffffffffffffcff3fcff -> #7c000ff3fcffffffffffffffcff3fcff -dqcan263 copyabs #fc080ff3fcff3fcff3fcff3fcff3fcff -> #7c080ff3fcff3fcff3fcff3fcff3fcff --- sNaN -dqcan264 copyabs #fe003ff3fcffffffffffffffcff3fcff -> #7e003ff3fcffffffffffffffcff3fcff -dqcan265 copyabs #fe100ff3fcff3fcff3fcff3fcff3fcff -> #7e100ff3fcff3fcff3fcff3fcff3fcff --- Inf -dqcan268 copyabs #f8002000000000000000000000000000 -> #78002000000000000000000000000000 -dqcan269 copyabs #f8000000000000700700700000000000 -> #78000000000000700700700000000000 - ------ CopyNegate: [does not usually canonicalize] --- finites -dqcan270 copynegate #6e080ff3fcff3fcfffffff3fcfffffff -> #ee080ff3fcff3fcfffffff3fcfffffff -dqcan271 copynegate #ee080ff3fcff3ffff3fcff3ffff3fcff -> #6e080ff3fcff3ffff3fcff3ffff3fcff --- NaNs -dqcan272 copynegate #7c000ff3fcffffffffffff3fcff3fcff -> #fc000ff3fcffffffffffff3fcff3fcff -dqcan273 copynegate #7c080ff3fcff3fcff3fcff3fcff3fcff -> #fc080ff3fcff3fcff3fcff3fcff3fcff --- sNaN -dqcan274 copynegate #7e003ff3fcffffffffffffffcff3fcff -> #fe003ff3fcffffffffffffffcff3fcff -dqcan275 copynegate #7e100ff3fcff3fcff3fcff3fcff3fcff -> #fe100ff3fcff3fcff3fcff3fcff3fcff --- Inf -dqcan278 copynegate #78002000000000000000000000000000 -> #f8002000000000000000000000000000 -dqcan279 copynegate #78000000000010000000000000100000 -> #f8000000000010000000000000100000 - ------ CopySign: [does not usually canonicalize] --- finites -dqcan280 copysign #6e080ff3fcff3fcfffffff3fcfffffff -1 -> #ee080ff3fcff3fcfffffff3fcfffffff -dqcan281 copysign #ee080ff3fcff3ffff3fcff3ffff3fcff 1 -> #6e080ff3fcff3ffff3fcff3ffff3fcff --- NaNs -dqcan282 copysign #7c000ff3fcffffffffffffffcff3fcff -1 -> #fc000ff3fcffffffffffffffcff3fcff -dqcan283 copysign #7c080ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c080ff3fcff3fcff3fcff3fcff3fcff --- sNaN -dqcan284 copysign #7e003ff3fcffffffffffffffcff3fcff -1 -> #fe003ff3fcffffffffffffffcff3fcff -dqcan285 copysign #7e100ff3fcff3fcff3fcff3fcff3fcff 1 -> #7e100ff3fcff3fcff3fcff3fcff3fcff --- Inf -dqcan288 copysign #78002000000000000000000000000000 -1 -> #f8002000000000000000000000000000 -dqcan289 copysign #78000000000010000000000000100000 1 -> #78000000000010000000000000100000 - ------ Multiply: --- Finites: neutral 0 -dqcan302 multiply 1 #77ffff3fcff3fcff0000000000000000 -> #77ffff3fcff3fcff0000000000000000 -dqcan303 multiply #77fcffffcff3fcff0000000000000000 1 -> #77fccfffcff3fcff0000000000000000 --- negative -dqcan306 multiply -1 #77ffff3fcff3fcff0000000000000000 -> #f7ffff3fcff3fcff0000000000000000 -dqcan307 multiply #77fcffffcff3fcff0000000000000000 -1 -> #f7fccfffcff3fcff0000000000000000 --- NaN: declets in payload -dqcan311 multiply 1 #7c03ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 -dqcan312 multiply #7c03ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 --- NaN: exponent continuation bits [excluding sNaN selector] -dqcan313 multiply 1 #7c40ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 -dqcan314 multiply #7c40ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 --- sNaN: declets in payload -dqcan315 multiply 1 #7e00ffffcff3fcff0000000000000000 -> #7c000fffcff3fcff0000000000000000 Invalid_operation -dqcan316 multiply #7e00ffffcff3fcff0000000000000000 1 -> #7c000fffcff3fcff0000000000000000 Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -dqcan317 multiply 1 #7e80ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 Invalid_operation -dqcan318 multiply #7e80ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 Invalid_operation --- Inf: exponent continuation bits -dqcan320 multiply 1 #78800000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan321 multiply #78800000000000000000000000000000 1 -> #78000000000000000000000000000000 --- Inf: coefficient continuation bits -dqcan322 multiply 1 #78020000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan323 multiply #78020000000000000000000000000000 1 -> #78000000000000000000000000000000 -dqcan324 multiply 1 #78000000000000010000000000000000 -> #78000000000000000000000000000000 -dqcan325 multiply #78000000000000010000000000000000 1 -> #78000000000000000000000000000000 -dqcan326 multiply 1 #78000020000000000000000000000000 -> #78000000000000000000000000000000 -dqcan327 multiply #78000020000000000000000000000000 1 -> #78000000000000000000000000000000 - ------ Quantize: -dqcan401 quantize #ee080ff3fcff3fcff3fffffffff3fcff 0 -> #ee080ff3fcff3fcff3fcff3fcff3fcff -dqcan402 quantize #ee080ff3fffffffffffcff3fcff3fcff 0 -> #ee080ff3fcff3fcff3fcff3fcff3fcff -dqcan403 quantize #78800000000000000000000000000000 Inf -> #78000000000000000000000000000000 -dqcan404 quantize #78020000000000000000000000000000 -Inf -> #78000000000000000000000000000000 -dqcan410 quantize #7c080ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan411 quantize #fc000ff3fcfffffff3fcff3fcff3fcff 1 -> #fc000ff3fcff3fcff3fcff3fcff3fcff -dqcan412 quantize #7e100ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan413 quantize #fe000ff3fcff3fcff3ffffffcff3fcff 1 -> #fc000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation - ------ Subtract: --- Finites: neutral 0 -dqcan502 subtract 0E+6144 #77ffcff3fcff3fcffffcff3fcff3fcff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff -dqcan503 subtract #77ffcff3fcff3fcff3fcff3ffff3fcff 0E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff --- tiny zero -dqcan504 subtract 0E-6176 #77ffcff3ffff3fcff3fcff3fcff3fcff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff Rounded -dqcan505 subtract #77ffcff3fcff3fcff3fcff3fcff3ffff 0E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded --- tiny non zero -dqcan506 subtract -1E-6176 #77ffcff3fcff3fcff3fcff3fcfffffff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded -dqcan507 subtract #77ffcffffffffffffffffffffff3fcff -1E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded --- NaN: declets in payload -dqcan511 subtract 0 #7c000ff3fcff3fcff3fcfffffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan512 subtract #7c000ff3fcff3fcfffffff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -dqcan513 subtract 0 #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan514 subtract #7c020ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- sNaN: declets in payload -dqcan515 subtract 0 #7e000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan516 subtract #7e003ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -dqcan517 subtract 0 #7e500ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan518 subtract #7e0e0ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -dqcan520 subtract 0 #78010000000000000000000000000000 -> #f8000000000000000000000000000000 -dqcan521 subtract #78680000000000000000000000000000 0 -> #78000000000000000000000000000000 --- Inf: coefficient continuation bits -dqcan522 subtract 0 #78002000000000000000000000000000 -> #f8000000000000000000000000000000 -dqcan523 subtract #78000000000000000000000000000001 0 -> #78000000000000000000000000000000 -dqcan524 subtract 0 #78000002000000000000000000000000 -> #f8000000000000000000000000000000 -dqcan525 subtract #780000000000f0000000000000000000 0 -> #78000000000000000000000000000000 -dqcan526 subtract 0 #78000000000000000005000000000000 -> #f8000000000000000000000000000000 -dqcan527 subtract #780000000000000000000000000a0000 0 -> #78000000000000000000000000000000 - ------ ToIntegral: -dqcan601 tointegralx #6e080ff3fdff3fcff3fcff3fcff3fcff -> #6e080ff3fcff3fcff3fcff3fcff3fcff -dqcan602 tointegralx #ee080ff3fcff3ffff3fcff3fcff3fcff -> #ee080ff3fcff3fcff3fcff3fcff3fcff -dqcan603 tointegralx #78800000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan604 tointegralx #78020000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan614 tointegralx #7c100ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan615 tointegralx #fc000ff3fcff3fcff3fcffffcff3fcff -> #fc000ff3fcff3fcff3fcff3fcff3fcff -dqcan616 tointegralx #7e010ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan617 tointegralx #fe000ff3fcff3fcff3fdff3fcff3fcff -> #fc000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- uncanonical 3999, 39.99, 3.99, 0.399, and negatives -dqcan618 tointegralx #22080000000000000000000000000fff -> #22080000000000000000000000000cff -dqcan619 tointegralx #22078000000000000000000000000fff -> #22080000000000000000000000000040 Inexact Rounded -dqcan620 tointegralx #22074000000000000000000000000fff -> #22080000000000000000000000000004 Inexact Rounded -dqcan621 tointegralx #22070000000000000000000000000fff -> #22080000000000000000000000000000 Inexact Rounded -dqcan622 tointegralx #a2080000000000000000000000000fff -> #a2080000000000000000000000000cff -dqcan623 tointegralx #a2078000000000000000000000000fff -> #a2080000000000000000000000000040 Inexact Rounded -dqcan624 tointegralx #a2074000000000000000000000000fff -> #a2080000000000000000000000000004 Inexact Rounded -dqcan625 tointegralx #a2070000000000000000000000000fff -> #a2080000000000000000000000000000 Inexact Rounded - - - +------------------------------------------------------------------------ +-- dqCanonical.decTest -- test decQuad canonical results -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests that copy operations leave uncanonical operands +-- unchanged, and vice versa + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Uncanonical declets are: abc, where: +-- a=1,2,3 +-- b=6,7,e,f +-- c=e,f + +-- assert some standard (canonical) values; this tests that FromString +-- produces canonical results (many more in decimalNN) +dqcan001 apply 9.999999999999999999999999999999999E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan002 apply 0 -> #22080000000000000000000000000000 +dqcan003 apply 1 -> #22080000000000000000000000000001 +dqcan004 apply -1 -> #a2080000000000000000000000000001 +dqcan005 apply Infinity -> #78000000000000000000000000000000 +dqcan006 apply -Infinity -> #f8000000000000000000000000000000 +dqcan007 apply -NaN -> #fc000000000000000000000000000000 +dqcan008 apply -sNaN -> #fe000000000000000000000000000000 +dqcan009 apply NaN999999999999999999999999999999999 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan010 apply sNaN999999999999999999999999999999999 -> #7e000ff3fcff3fcff3fcff3fcff3fcff +decan011 apply 9999999999999999999999999999999999 -> #6e080ff3fcff3fcff3fcff3fcff3fcff +dqcan012 apply 7.50 -> #220780000000000000000000000003d0 +dqcan013 apply 9.99 -> #220780000000000000000000000000ff + +-- Base tests for canonical encodings (individual operator +-- propagation is tested later) + +-- Finites: declets in coefficient +dqcan021 canonical #77ffcff3fcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan022 canonical #77fffff3fcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan023 canonical #77ffcffffcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan024 canonical #77ffcff3ffff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan025 canonical #77ffcff3fcffffcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan026 canonical #77ffcff3fcff3ffff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan027 canonical #77ffcff3fcff3fcffffcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan028 canonical #77ffcff3fcff3fcff3ffff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan029 canonical #77ffcff3fcff3fcff3fcffffcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan030 canonical #77ffcff3fcff3fcff3fcff3ffff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan031 canonical #77ffcff3fcff3fcff3fcff3fcffffcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan032 canonical #77ffcff3fcff3fcff3fcff3fcff3ffff -> #77ffcff3fcff3fcff3fcff3fcff3fcff + +-- NaN: declets in payload +dqcan061 canonical #7c000ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan062 canonical #7c000ffffcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan063 canonical #7c000ff3ffff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan064 canonical #7c000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan065 canonical #7c000ff3fcff3ffff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan066 canonical #7c000ff3fcff3fcffffcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan067 canonical #7c000ff3fcff3fcff3ffff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan068 canonical #7c000ff3fcff3fcff3fcffffcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan069 canonical #7c000ff3fcff3fcff3fcff3ffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan070 canonical #7c000ff3fcff3fcff3fcff3fcffffcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan071 canonical #7c000ff3fcff3fcff3fcff3fcff3ffff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +dqcan081 canonical #7d000ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan082 canonical #7c800ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan083 canonical #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan084 canonical #7c200ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan085 canonical #7c100ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan086 canonical #7c080ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan087 canonical #7c040ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan088 canonical #7c020ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan089 canonical #7c010ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan090 canonical #7c008ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan091 canonical #7c004ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff + +-- sNaN: declets in payload +dqcan101 canonical #7e000ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan102 canonical #7e000ffffcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan103 canonical #7e000ff3ffff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan104 canonical #7e000ff3fcffffcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan105 canonical #7e000ff3fcff3ffff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan106 canonical #7e000ff3fcff3fcffffcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan107 canonical #7e000ff3fcff3fcff3ffff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan108 canonical #7e000ff3fcff3fcff3fcffffcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan109 canonical #7e000ff3fcff3fcff3fcff3ffff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan100 canonical #7e000ff3fcff3fcff3fcff3fcffffcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan111 canonical #7e000ff3fcff3fcff3fcff3fcff3ffff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +-- sNaN: exponent continuation bits [excluding sNaN selector] +dqcan121 canonical #7f000ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan122 canonical #7e800ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan123 canonical #7e400ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan124 canonical #7e200ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan125 canonical #7e100ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan126 canonical #7e080ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan127 canonical #7e040ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan128 canonical #7e020ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan129 canonical #7e010ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan130 canonical #7e008ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan131 canonical #7e004ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff + +-- Inf: exponent continuation bits +dqcan137 canonical #78000000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan138 canonical #79000000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan139 canonical #7a000000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan140 canonical #78800000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan141 canonical #78400000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan142 canonical #78200000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan143 canonical #78100000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan144 canonical #78080000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan145 canonical #78040000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan146 canonical #78020000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan147 canonical #78010000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan148 canonical #78008000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan149 canonical #78004000000000000000000000000000 -> #78000000000000000000000000000000 + +-- Inf: coefficient continuation bits (first, last, and a few others) +dqcan150 canonical #78000000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan151 canonical #78020000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan152 canonical #78000000000000000000000000000001 -> #78000000000000000000000000000000 +dqcan153 canonical #78010000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan154 canonical #78002000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan155 canonical #78000800000000000000000000000000 -> #78000000000000000000000000000000 +dqcan156 canonical #78000020000000000000000000000000 -> #78000000000000000000000000000000 +dqcan157 canonical #78000004000000000000000000000000 -> #78000000000000000000000000000000 +dqcan158 canonical #78000000400000000000000000000000 -> #78000000000000000000000000000000 +dqcan159 canonical #78000000080000000000000000000000 -> #78000000000000000000000000000000 +dqcan160 canonical #78000000004000000000000000000000 -> #78000000000000000000000000000000 +dqcan161 canonical #78000000000200000000000000000000 -> #78000000000000000000000000000000 +dqcan162 canonical #78000000000080000000000000000000 -> #78000000000000000000000000000000 +dqcan163 canonical #78000000000002000000000000000000 -> #78000000000000000000000000000000 +dqcan164 canonical #78000000000000400000000000000000 -> #78000000000000000000000000000000 +dqcan165 canonical #78000000000000080000000000000000 -> #78000000000000000000000000000000 +dqcan166 canonical #78000000000000001000000000000000 -> #78000000000000000000000000000000 +dqcan167 canonical #78000000000000000200000000000000 -> #78000000000000000000000000000000 +dqcan168 canonical #78000000000000000080000000000000 -> #78000000000000000000000000000000 +dqcan169 canonical #78000000000000000004000000000000 -> #78000000000000000000000000000000 +dqcan170 canonical #78000000000000000000400000000000 -> #78000000000000000000000000000000 +dqcan171 canonical #78000000000000000000010000000000 -> #78000000000000000000000000000000 +dqcan172 canonical #78000000000000000000002000000000 -> #78000000000000000000000000000000 +dqcan173 canonical #78000000000000000000000400000000 -> #78000000000000000000000000000000 +dqcan174 canonical #78000000000000000000000080000000 -> #78000000000000000000000000000000 +dqcan175 canonical #78000000000000000000000002000000 -> #78000000000000000000000000000000 +dqcan176 canonical #78000000000000000000000000400000 -> #78000000000000000000000000000000 +dqcan177 canonical #78000000000000000000000000020000 -> #78000000000000000000000000000000 +dqcan178 canonical #78000000000000000000000000001000 -> #78000000000000000000000000000000 +dqcan179 canonical #78000000000000000000000000000400 -> #78000000000000000000000000000000 +dqcan180 canonical #78000000000000000000000000000020 -> #78000000000000000000000000000000 +dqcan181 canonical #78000000000000000000000000000008 -> #78000000000000000000000000000000 + + +-- Now the operators -- trying to check paths that might fail to +-- canonicalize propagated operands + +----- Add: +-- Finites: neutral 0 +dqcan202 add 0E+6144 #77ffcff3fcff3fcffffcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan203 add #77ffcff3fcff3fcff3fcff3ffff3fcff 0E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff +-- tiny zero +dqcan204 add 0E-6176 #77ffcff3ffff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded +dqcan205 add #77ffcff3fcff3fcff3fcff3fcff3ffff 0E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded +-- tiny non zero +dqcan206 add -1E-6176 #77ffcff3fcff3fcff3fcff3fcfffffff -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded +dqcan207 add #77ffcffffffffffffffffffffff3fcff -1E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded +-- NaN: declets in payload +dqcan211 add 0 #7c000ff3fcff3fcff3fcfffffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan212 add #7c000ff3fcff3fcfffffff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +dqcan213 add 0 #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan214 add #7c020ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- sNaN: declets in payload +dqcan215 add 0 #7e000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan216 add #7e003ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +dqcan217 add 0 #7e500ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan218 add #7e0e0ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +dqcan220 add 0 #78010000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan221 add #78680000000000000000000000000000 0 -> #78000000000000000000000000000000 +-- Inf: coefficient continuation bits +dqcan222 add 0 #78002000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan223 add #78000000000000000000000000000001 0 -> #78000000000000000000000000000000 +dqcan224 add 0 #78000002000000000000000000000000 -> #78000000000000000000000000000000 +dqcan225 add #780000000000f0000000000000000000 0 -> #78000000000000000000000000000000 +dqcan226 add 0 #78000000000000000005000000000000 -> #78000000000000000000000000000000 +dqcan227 add #780000000000000000000000000a0000 0 -> #78000000000000000000000000000000 + +----- Class: [does not return encoded] + +----- Compare: +dqcan231 compare -Inf 1 -> #a2080000000000000000000000000001 +dqcan232 compare -Inf -Inf -> #22080000000000000000000000000000 +dqcan233 compare 1 -Inf -> #22080000000000000000000000000001 +dqcan234 compare #7c010ff3fcff3fcff3fcff3ffffffcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan235 compare #7e004ff3fcff3fcff3ffffffcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation + +----- CompareSig: +dqcan241 comparesig -Inf 1 -> #a2080000000000000000000000000001 +dqcan242 comparesig -Inf -Inf -> #22080000000000000000000000000000 +dqcan243 comparesig 1 -Inf -> #22080000000000000000000000000001 +dqcan244 comparesig #7c400ff3ffff3fcff3fcff3fcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan245 comparesig #7e050ff3fcfffffff3fcff3fcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation + +----- Copy: [does not usually canonicalize] +-- finites +dqcan250 copy #6e080ff3fcff3fcfffffff3fcfffffff -> #6e080ff3fcff3fcfffffff3fcfffffff +dqcan251 copy #ee080ff3fcff3ffff3fcff3ffff3fcff -> #ee080ff3fcff3ffff3fcff3ffff3fcff +-- NaNs +dqcan252 copy #7c000ff3fcffffffffffffffcff3fcff -> #7c000ff3fcffffffffffffffcff3fcff +dqcan253 copy #7c080ff3fcff3fcff3fcff3fcff3fcff -> #7c080ff3fcff3fcff3fcff3fcff3fcff +-- sNaN +dqcan254 copy #7e003ff3fcffffffffffffffcff3fcff -> #7e003ff3fcffffffffffffffcff3fcff +dqcan255 copy #7e100ff3fcff3fcff3fcff3fcff3fcff -> #7e100ff3fcff3fcff3fcff3fcff3fcff +-- Inf +dqcan258 copy #78002000000000000000000000000000 -> #78002000000000000000000000000000 +dqcan259 copy #78000000000010000000000000100000 -> #78000000000010000000000000100000 + +----- CopyAbs: [does not usually canonicalize] +-- finites +dqcan260 copyabs #6e080ff3fcff3fcfffffff3fcfffffff -> #6e080ff3fcff3fcfffffff3fcfffffff +dqcan261 copyabs #ee080ff3fcff3ffff3fcff3ffff3fcff -> #6e080ff3fcff3ffff3fcff3ffff3fcff +-- NaNs +dqcan262 copyabs #fc000ff3fcffffffffffffffcff3fcff -> #7c000ff3fcffffffffffffffcff3fcff +dqcan263 copyabs #fc080ff3fcff3fcff3fcff3fcff3fcff -> #7c080ff3fcff3fcff3fcff3fcff3fcff +-- sNaN +dqcan264 copyabs #fe003ff3fcffffffffffffffcff3fcff -> #7e003ff3fcffffffffffffffcff3fcff +dqcan265 copyabs #fe100ff3fcff3fcff3fcff3fcff3fcff -> #7e100ff3fcff3fcff3fcff3fcff3fcff +-- Inf +dqcan268 copyabs #f8002000000000000000000000000000 -> #78002000000000000000000000000000 +dqcan269 copyabs #f8000000000000700700700000000000 -> #78000000000000700700700000000000 + +----- CopyNegate: [does not usually canonicalize] +-- finites +dqcan270 copynegate #6e080ff3fcff3fcfffffff3fcfffffff -> #ee080ff3fcff3fcfffffff3fcfffffff +dqcan271 copynegate #ee080ff3fcff3ffff3fcff3ffff3fcff -> #6e080ff3fcff3ffff3fcff3ffff3fcff +-- NaNs +dqcan272 copynegate #7c000ff3fcffffffffffff3fcff3fcff -> #fc000ff3fcffffffffffff3fcff3fcff +dqcan273 copynegate #7c080ff3fcff3fcff3fcff3fcff3fcff -> #fc080ff3fcff3fcff3fcff3fcff3fcff +-- sNaN +dqcan274 copynegate #7e003ff3fcffffffffffffffcff3fcff -> #fe003ff3fcffffffffffffffcff3fcff +dqcan275 copynegate #7e100ff3fcff3fcff3fcff3fcff3fcff -> #fe100ff3fcff3fcff3fcff3fcff3fcff +-- Inf +dqcan278 copynegate #78002000000000000000000000000000 -> #f8002000000000000000000000000000 +dqcan279 copynegate #78000000000010000000000000100000 -> #f8000000000010000000000000100000 + +----- CopySign: [does not usually canonicalize] +-- finites +dqcan280 copysign #6e080ff3fcff3fcfffffff3fcfffffff -1 -> #ee080ff3fcff3fcfffffff3fcfffffff +dqcan281 copysign #ee080ff3fcff3ffff3fcff3ffff3fcff 1 -> #6e080ff3fcff3ffff3fcff3ffff3fcff +-- NaNs +dqcan282 copysign #7c000ff3fcffffffffffffffcff3fcff -1 -> #fc000ff3fcffffffffffffffcff3fcff +dqcan283 copysign #7c080ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c080ff3fcff3fcff3fcff3fcff3fcff +-- sNaN +dqcan284 copysign #7e003ff3fcffffffffffffffcff3fcff -1 -> #fe003ff3fcffffffffffffffcff3fcff +dqcan285 copysign #7e100ff3fcff3fcff3fcff3fcff3fcff 1 -> #7e100ff3fcff3fcff3fcff3fcff3fcff +-- Inf +dqcan288 copysign #78002000000000000000000000000000 -1 -> #f8002000000000000000000000000000 +dqcan289 copysign #78000000000010000000000000100000 1 -> #78000000000010000000000000100000 + +----- Multiply: +-- Finites: neutral 0 +dqcan302 multiply 1 #77ffff3fcff3fcff0000000000000000 -> #77ffff3fcff3fcff0000000000000000 +dqcan303 multiply #77fcffffcff3fcff0000000000000000 1 -> #77fccfffcff3fcff0000000000000000 +-- negative +dqcan306 multiply -1 #77ffff3fcff3fcff0000000000000000 -> #f7ffff3fcff3fcff0000000000000000 +dqcan307 multiply #77fcffffcff3fcff0000000000000000 -1 -> #f7fccfffcff3fcff0000000000000000 +-- NaN: declets in payload +dqcan311 multiply 1 #7c03ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 +dqcan312 multiply #7c03ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 +-- NaN: exponent continuation bits [excluding sNaN selector] +dqcan313 multiply 1 #7c40ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 +dqcan314 multiply #7c40ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 +-- sNaN: declets in payload +dqcan315 multiply 1 #7e00ffffcff3fcff0000000000000000 -> #7c000fffcff3fcff0000000000000000 Invalid_operation +dqcan316 multiply #7e00ffffcff3fcff0000000000000000 1 -> #7c000fffcff3fcff0000000000000000 Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +dqcan317 multiply 1 #7e80ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 Invalid_operation +dqcan318 multiply #7e80ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 Invalid_operation +-- Inf: exponent continuation bits +dqcan320 multiply 1 #78800000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan321 multiply #78800000000000000000000000000000 1 -> #78000000000000000000000000000000 +-- Inf: coefficient continuation bits +dqcan322 multiply 1 #78020000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan323 multiply #78020000000000000000000000000000 1 -> #78000000000000000000000000000000 +dqcan324 multiply 1 #78000000000000010000000000000000 -> #78000000000000000000000000000000 +dqcan325 multiply #78000000000000010000000000000000 1 -> #78000000000000000000000000000000 +dqcan326 multiply 1 #78000020000000000000000000000000 -> #78000000000000000000000000000000 +dqcan327 multiply #78000020000000000000000000000000 1 -> #78000000000000000000000000000000 + +----- Quantize: +dqcan401 quantize #ee080ff3fcff3fcff3fffffffff3fcff 0 -> #ee080ff3fcff3fcff3fcff3fcff3fcff +dqcan402 quantize #ee080ff3fffffffffffcff3fcff3fcff 0 -> #ee080ff3fcff3fcff3fcff3fcff3fcff +dqcan403 quantize #78800000000000000000000000000000 Inf -> #78000000000000000000000000000000 +dqcan404 quantize #78020000000000000000000000000000 -Inf -> #78000000000000000000000000000000 +dqcan410 quantize #7c080ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan411 quantize #fc000ff3fcfffffff3fcff3fcff3fcff 1 -> #fc000ff3fcff3fcff3fcff3fcff3fcff +dqcan412 quantize #7e100ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan413 quantize #fe000ff3fcff3fcff3ffffffcff3fcff 1 -> #fc000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation + +----- Subtract: +-- Finites: neutral 0 +dqcan502 subtract 0E+6144 #77ffcff3fcff3fcffffcff3fcff3fcff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff +dqcan503 subtract #77ffcff3fcff3fcff3fcff3ffff3fcff 0E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff +-- tiny zero +dqcan504 subtract 0E-6176 #77ffcff3ffff3fcff3fcff3fcff3fcff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff Rounded +dqcan505 subtract #77ffcff3fcff3fcff3fcff3fcff3ffff 0E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded +-- tiny non zero +dqcan506 subtract -1E-6176 #77ffcff3fcff3fcff3fcff3fcfffffff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded +dqcan507 subtract #77ffcffffffffffffffffffffff3fcff -1E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded +-- NaN: declets in payload +dqcan511 subtract 0 #7c000ff3fcff3fcff3fcfffffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan512 subtract #7c000ff3fcff3fcfffffff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +dqcan513 subtract 0 #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan514 subtract #7c020ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- sNaN: declets in payload +dqcan515 subtract 0 #7e000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan516 subtract #7e003ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +dqcan517 subtract 0 #7e500ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan518 subtract #7e0e0ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +dqcan520 subtract 0 #78010000000000000000000000000000 -> #f8000000000000000000000000000000 +dqcan521 subtract #78680000000000000000000000000000 0 -> #78000000000000000000000000000000 +-- Inf: coefficient continuation bits +dqcan522 subtract 0 #78002000000000000000000000000000 -> #f8000000000000000000000000000000 +dqcan523 subtract #78000000000000000000000000000001 0 -> #78000000000000000000000000000000 +dqcan524 subtract 0 #78000002000000000000000000000000 -> #f8000000000000000000000000000000 +dqcan525 subtract #780000000000f0000000000000000000 0 -> #78000000000000000000000000000000 +dqcan526 subtract 0 #78000000000000000005000000000000 -> #f8000000000000000000000000000000 +dqcan527 subtract #780000000000000000000000000a0000 0 -> #78000000000000000000000000000000 + +----- ToIntegral: +dqcan601 tointegralx #6e080ff3fdff3fcff3fcff3fcff3fcff -> #6e080ff3fcff3fcff3fcff3fcff3fcff +dqcan602 tointegralx #ee080ff3fcff3ffff3fcff3fcff3fcff -> #ee080ff3fcff3fcff3fcff3fcff3fcff +dqcan603 tointegralx #78800000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan604 tointegralx #78020000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan614 tointegralx #7c100ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan615 tointegralx #fc000ff3fcff3fcff3fcffffcff3fcff -> #fc000ff3fcff3fcff3fcff3fcff3fcff +dqcan616 tointegralx #7e010ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan617 tointegralx #fe000ff3fcff3fcff3fdff3fcff3fcff -> #fc000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- uncanonical 3999, 39.99, 3.99, 0.399, and negatives +dqcan618 tointegralx #22080000000000000000000000000fff -> #22080000000000000000000000000cff +dqcan619 tointegralx #22078000000000000000000000000fff -> #22080000000000000000000000000040 Inexact Rounded +dqcan620 tointegralx #22074000000000000000000000000fff -> #22080000000000000000000000000004 Inexact Rounded +dqcan621 tointegralx #22070000000000000000000000000fff -> #22080000000000000000000000000000 Inexact Rounded +dqcan622 tointegralx #a2080000000000000000000000000fff -> #a2080000000000000000000000000cff +dqcan623 tointegralx #a2078000000000000000000000000fff -> #a2080000000000000000000000000040 Inexact Rounded +dqcan624 tointegralx #a2074000000000000000000000000fff -> #a2080000000000000000000000000004 Inexact Rounded +dqcan625 tointegralx #a2070000000000000000000000000fff -> #a2080000000000000000000000000000 Inexact Rounded + + + diff --git a/Lib/test/decimaltestdata/dqClass.decTest b/Lib/test/decimaltestdata/dqClass.decTest index f341933878e..d7e19b3829a 100644 --- a/Lib/test/decimaltestdata/dqClass.decTest +++ b/Lib/test/decimaltestdata/dqClass.decTest @@ -1,77 +1,77 @@ ------------------------------------------------------------------------- --- dqClass.decTest -- decQuad Class operations -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- [New 2006.11.27] - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqcla001 class 0 -> +Zero -dqcla002 class 0.00 -> +Zero -dqcla003 class 0E+5 -> +Zero -dqcla004 class 1E-6176 -> +Subnormal -dqcla005 class 0.1E-6143 -> +Subnormal -dqcla006 class 0.99999999999999999999999999999999E-6143 -> +Subnormal -dqcla007 class 1.00000000000000000000000000000000E-6143 -> +Normal -dqcla008 class 1E-6143 -> +Normal -dqcla009 class 1E-100 -> +Normal -dqcla010 class 1E-10 -> +Normal -dqcla012 class 1E-1 -> +Normal -dqcla013 class 1 -> +Normal -dqcla014 class 2.50 -> +Normal -dqcla015 class 100.100 -> +Normal -dqcla016 class 1E+30 -> +Normal -dqcla017 class 1E+6144 -> +Normal -dqcla018 class 9.99999999999999999999999999999999E+6144 -> +Normal -dqcla019 class Inf -> +Infinity - -dqcla021 class -0 -> -Zero -dqcla022 class -0.00 -> -Zero -dqcla023 class -0E+5 -> -Zero -dqcla024 class -1E-6176 -> -Subnormal -dqcla025 class -0.1E-6143 -> -Subnormal -dqcla026 class -0.99999999999999999999999999999999E-6143 -> -Subnormal -dqcla027 class -1.00000000000000000000000000000000E-6143 -> -Normal -dqcla028 class -1E-6143 -> -Normal -dqcla029 class -1E-100 -> -Normal -dqcla030 class -1E-10 -> -Normal -dqcla032 class -1E-1 -> -Normal -dqcla033 class -1 -> -Normal -dqcla034 class -2.50 -> -Normal -dqcla035 class -100.100 -> -Normal -dqcla036 class -1E+30 -> -Normal -dqcla037 class -1E+6144 -> -Normal -dqcla0614 class -9.99999999999999999999999999999999E+6144 -> -Normal -dqcla039 class -Inf -> -Infinity - -dqcla041 class NaN -> NaN -dqcla042 class -NaN -> NaN -dqcla043 class +NaN12345 -> NaN -dqcla044 class sNaN -> sNaN -dqcla045 class -sNaN -> sNaN -dqcla046 class +sNaN12345 -> sNaN - - - +------------------------------------------------------------------------ +-- dqClass.decTest -- decQuad Class operations -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- [New 2006.11.27] + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqcla001 class 0 -> +Zero +dqcla002 class 0.00 -> +Zero +dqcla003 class 0E+5 -> +Zero +dqcla004 class 1E-6176 -> +Subnormal +dqcla005 class 0.1E-6143 -> +Subnormal +dqcla006 class 0.99999999999999999999999999999999E-6143 -> +Subnormal +dqcla007 class 1.00000000000000000000000000000000E-6143 -> +Normal +dqcla008 class 1E-6143 -> +Normal +dqcla009 class 1E-100 -> +Normal +dqcla010 class 1E-10 -> +Normal +dqcla012 class 1E-1 -> +Normal +dqcla013 class 1 -> +Normal +dqcla014 class 2.50 -> +Normal +dqcla015 class 100.100 -> +Normal +dqcla016 class 1E+30 -> +Normal +dqcla017 class 1E+6144 -> +Normal +dqcla018 class 9.99999999999999999999999999999999E+6144 -> +Normal +dqcla019 class Inf -> +Infinity + +dqcla021 class -0 -> -Zero +dqcla022 class -0.00 -> -Zero +dqcla023 class -0E+5 -> -Zero +dqcla024 class -1E-6176 -> -Subnormal +dqcla025 class -0.1E-6143 -> -Subnormal +dqcla026 class -0.99999999999999999999999999999999E-6143 -> -Subnormal +dqcla027 class -1.00000000000000000000000000000000E-6143 -> -Normal +dqcla028 class -1E-6143 -> -Normal +dqcla029 class -1E-100 -> -Normal +dqcla030 class -1E-10 -> -Normal +dqcla032 class -1E-1 -> -Normal +dqcla033 class -1 -> -Normal +dqcla034 class -2.50 -> -Normal +dqcla035 class -100.100 -> -Normal +dqcla036 class -1E+30 -> -Normal +dqcla037 class -1E+6144 -> -Normal +dqcla0614 class -9.99999999999999999999999999999999E+6144 -> -Normal +dqcla039 class -Inf -> -Infinity + +dqcla041 class NaN -> NaN +dqcla042 class -NaN -> NaN +dqcla043 class +NaN12345 -> NaN +dqcla044 class sNaN -> sNaN +dqcla045 class -sNaN -> sNaN +dqcla046 class +sNaN12345 -> sNaN + + + diff --git a/Lib/test/decimaltestdata/dqCompare.decTest b/Lib/test/decimaltestdata/dqCompare.decTest index a617ad110a4..b7b5ee6b8e5 100644 --- a/Lib/test/decimaltestdata/dqCompare.decTest +++ b/Lib/test/decimaltestdata/dqCompare.decTest @@ -1,753 +1,753 @@ ------------------------------------------------------------------------- --- dqCompare.decTest -- decQuad comparison that allows quiet NaNs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqcom001 compare -2 -2 -> 0 -dqcom002 compare -2 -1 -> -1 -dqcom003 compare -2 0 -> -1 -dqcom004 compare -2 1 -> -1 -dqcom005 compare -2 2 -> -1 -dqcom006 compare -1 -2 -> 1 -dqcom007 compare -1 -1 -> 0 -dqcom008 compare -1 0 -> -1 -dqcom009 compare -1 1 -> -1 -dqcom010 compare -1 2 -> -1 -dqcom011 compare 0 -2 -> 1 -dqcom012 compare 0 -1 -> 1 -dqcom013 compare 0 0 -> 0 -dqcom014 compare 0 1 -> -1 -dqcom015 compare 0 2 -> -1 -dqcom016 compare 1 -2 -> 1 -dqcom017 compare 1 -1 -> 1 -dqcom018 compare 1 0 -> 1 -dqcom019 compare 1 1 -> 0 -dqcom020 compare 1 2 -> -1 -dqcom021 compare 2 -2 -> 1 -dqcom022 compare 2 -1 -> 1 -dqcom023 compare 2 0 -> 1 -dqcom025 compare 2 1 -> 1 -dqcom026 compare 2 2 -> 0 - -dqcom031 compare -20 -20 -> 0 -dqcom032 compare -20 -10 -> -1 -dqcom033 compare -20 00 -> -1 -dqcom034 compare -20 10 -> -1 -dqcom035 compare -20 20 -> -1 -dqcom036 compare -10 -20 -> 1 -dqcom037 compare -10 -10 -> 0 -dqcom038 compare -10 00 -> -1 -dqcom039 compare -10 10 -> -1 -dqcom040 compare -10 20 -> -1 -dqcom041 compare 00 -20 -> 1 -dqcom042 compare 00 -10 -> 1 -dqcom043 compare 00 00 -> 0 -dqcom044 compare 00 10 -> -1 -dqcom045 compare 00 20 -> -1 -dqcom046 compare 10 -20 -> 1 -dqcom047 compare 10 -10 -> 1 -dqcom048 compare 10 00 -> 1 -dqcom049 compare 10 10 -> 0 -dqcom050 compare 10 20 -> -1 -dqcom051 compare 20 -20 -> 1 -dqcom052 compare 20 -10 -> 1 -dqcom053 compare 20 00 -> 1 -dqcom055 compare 20 10 -> 1 -dqcom056 compare 20 20 -> 0 - -dqcom061 compare -2.0 -2.0 -> 0 -dqcom062 compare -2.0 -1.0 -> -1 -dqcom063 compare -2.0 0.0 -> -1 -dqcom064 compare -2.0 1.0 -> -1 -dqcom065 compare -2.0 2.0 -> -1 -dqcom066 compare -1.0 -2.0 -> 1 -dqcom067 compare -1.0 -1.0 -> 0 -dqcom068 compare -1.0 0.0 -> -1 -dqcom069 compare -1.0 1.0 -> -1 -dqcom070 compare -1.0 2.0 -> -1 -dqcom071 compare 0.0 -2.0 -> 1 -dqcom072 compare 0.0 -1.0 -> 1 -dqcom073 compare 0.0 0.0 -> 0 -dqcom074 compare 0.0 1.0 -> -1 -dqcom075 compare 0.0 2.0 -> -1 -dqcom076 compare 1.0 -2.0 -> 1 -dqcom077 compare 1.0 -1.0 -> 1 -dqcom078 compare 1.0 0.0 -> 1 -dqcom079 compare 1.0 1.0 -> 0 -dqcom080 compare 1.0 2.0 -> -1 -dqcom081 compare 2.0 -2.0 -> 1 -dqcom082 compare 2.0 -1.0 -> 1 -dqcom083 compare 2.0 0.0 -> 1 -dqcom085 compare 2.0 1.0 -> 1 -dqcom086 compare 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -dqcom090 compare 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 0 -dqcom091 compare -9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> -1 -dqcom092 compare 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 1 -dqcom093 compare -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0 - --- some differing length/exponent cases -dqcom100 compare 7.0 7.0 -> 0 -dqcom101 compare 7.0 7 -> 0 -dqcom102 compare 7 7.0 -> 0 -dqcom103 compare 7E+0 7.0 -> 0 -dqcom104 compare 70E-1 7.0 -> 0 -dqcom105 compare 0.7E+1 7 -> 0 -dqcom106 compare 70E-1 7 -> 0 -dqcom107 compare 7.0 7E+0 -> 0 -dqcom108 compare 7.0 70E-1 -> 0 -dqcom109 compare 7 0.7E+1 -> 0 -dqcom110 compare 7 70E-1 -> 0 - -dqcom120 compare 8.0 7.0 -> 1 -dqcom121 compare 8.0 7 -> 1 -dqcom122 compare 8 7.0 -> 1 -dqcom123 compare 8E+0 7.0 -> 1 -dqcom124 compare 80E-1 7.0 -> 1 -dqcom125 compare 0.8E+1 7 -> 1 -dqcom126 compare 80E-1 7 -> 1 -dqcom127 compare 8.0 7E+0 -> 1 -dqcom128 compare 8.0 70E-1 -> 1 -dqcom129 compare 8 0.7E+1 -> 1 -dqcom130 compare 8 70E-1 -> 1 - -dqcom140 compare 8.0 9.0 -> -1 -dqcom141 compare 8.0 9 -> -1 -dqcom142 compare 8 9.0 -> -1 -dqcom143 compare 8E+0 9.0 -> -1 -dqcom144 compare 80E-1 9.0 -> -1 -dqcom145 compare 0.8E+1 9 -> -1 -dqcom146 compare 80E-1 9 -> -1 -dqcom147 compare 8.0 9E+0 -> -1 -dqcom148 compare 8.0 90E-1 -> -1 -dqcom149 compare 8 0.9E+1 -> -1 -dqcom150 compare 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -dqcom200 compare -7.0 7.0 -> -1 -dqcom201 compare -7.0 7 -> -1 -dqcom202 compare -7 7.0 -> -1 -dqcom203 compare -7E+0 7.0 -> -1 -dqcom204 compare -70E-1 7.0 -> -1 -dqcom205 compare -0.7E+1 7 -> -1 -dqcom206 compare -70E-1 7 -> -1 -dqcom207 compare -7.0 7E+0 -> -1 -dqcom208 compare -7.0 70E-1 -> -1 -dqcom209 compare -7 0.7E+1 -> -1 -dqcom210 compare -7 70E-1 -> -1 - -dqcom220 compare -8.0 7.0 -> -1 -dqcom221 compare -8.0 7 -> -1 -dqcom222 compare -8 7.0 -> -1 -dqcom223 compare -8E+0 7.0 -> -1 -dqcom224 compare -80E-1 7.0 -> -1 -dqcom225 compare -0.8E+1 7 -> -1 -dqcom226 compare -80E-1 7 -> -1 -dqcom227 compare -8.0 7E+0 -> -1 -dqcom228 compare -8.0 70E-1 -> -1 -dqcom229 compare -8 0.7E+1 -> -1 -dqcom230 compare -8 70E-1 -> -1 - -dqcom240 compare -8.0 9.0 -> -1 -dqcom241 compare -8.0 9 -> -1 -dqcom242 compare -8 9.0 -> -1 -dqcom243 compare -8E+0 9.0 -> -1 -dqcom244 compare -80E-1 9.0 -> -1 -dqcom245 compare -0.8E+1 9 -> -1 -dqcom246 compare -80E-1 9 -> -1 -dqcom247 compare -8.0 9E+0 -> -1 -dqcom248 compare -8.0 90E-1 -> -1 -dqcom249 compare -8 0.9E+1 -> -1 -dqcom250 compare -8 90E-1 -> -1 - --- and again, with sign changes +- .. -dqcom300 compare 7.0 -7.0 -> 1 -dqcom301 compare 7.0 -7 -> 1 -dqcom302 compare 7 -7.0 -> 1 -dqcom303 compare 7E+0 -7.0 -> 1 -dqcom304 compare 70E-1 -7.0 -> 1 -dqcom305 compare .7E+1 -7 -> 1 -dqcom306 compare 70E-1 -7 -> 1 -dqcom307 compare 7.0 -7E+0 -> 1 -dqcom308 compare 7.0 -70E-1 -> 1 -dqcom309 compare 7 -.7E+1 -> 1 -dqcom310 compare 7 -70E-1 -> 1 - -dqcom320 compare 8.0 -7.0 -> 1 -dqcom321 compare 8.0 -7 -> 1 -dqcom322 compare 8 -7.0 -> 1 -dqcom323 compare 8E+0 -7.0 -> 1 -dqcom324 compare 80E-1 -7.0 -> 1 -dqcom325 compare .8E+1 -7 -> 1 -dqcom326 compare 80E-1 -7 -> 1 -dqcom327 compare 8.0 -7E+0 -> 1 -dqcom328 compare 8.0 -70E-1 -> 1 -dqcom329 compare 8 -.7E+1 -> 1 -dqcom330 compare 8 -70E-1 -> 1 - -dqcom340 compare 8.0 -9.0 -> 1 -dqcom341 compare 8.0 -9 -> 1 -dqcom342 compare 8 -9.0 -> 1 -dqcom343 compare 8E+0 -9.0 -> 1 -dqcom344 compare 80E-1 -9.0 -> 1 -dqcom345 compare .8E+1 -9 -> 1 -dqcom346 compare 80E-1 -9 -> 1 -dqcom347 compare 8.0 -9E+0 -> 1 -dqcom348 compare 8.0 -90E-1 -> 1 -dqcom349 compare 8 -.9E+1 -> 1 -dqcom350 compare 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -dqcom400 compare -7.0 -7.0 -> 0 -dqcom401 compare -7.0 -7 -> 0 -dqcom402 compare -7 -7.0 -> 0 -dqcom403 compare -7E+0 -7.0 -> 0 -dqcom404 compare -70E-1 -7.0 -> 0 -dqcom405 compare -.7E+1 -7 -> 0 -dqcom406 compare -70E-1 -7 -> 0 -dqcom407 compare -7.0 -7E+0 -> 0 -dqcom408 compare -7.0 -70E-1 -> 0 -dqcom409 compare -7 -.7E+1 -> 0 -dqcom410 compare -7 -70E-1 -> 0 - -dqcom420 compare -8.0 -7.0 -> -1 -dqcom421 compare -8.0 -7 -> -1 -dqcom422 compare -8 -7.0 -> -1 -dqcom423 compare -8E+0 -7.0 -> -1 -dqcom424 compare -80E-1 -7.0 -> -1 -dqcom425 compare -.8E+1 -7 -> -1 -dqcom426 compare -80E-1 -7 -> -1 -dqcom427 compare -8.0 -7E+0 -> -1 -dqcom428 compare -8.0 -70E-1 -> -1 -dqcom429 compare -8 -.7E+1 -> -1 -dqcom430 compare -8 -70E-1 -> -1 - -dqcom440 compare -8.0 -9.0 -> 1 -dqcom441 compare -8.0 -9 -> 1 -dqcom442 compare -8 -9.0 -> 1 -dqcom443 compare -8E+0 -9.0 -> 1 -dqcom444 compare -80E-1 -9.0 -> 1 -dqcom445 compare -.8E+1 -9 -> 1 -dqcom446 compare -80E-1 -9 -> 1 -dqcom447 compare -8.0 -9E+0 -> 1 -dqcom448 compare -8.0 -90E-1 -> 1 -dqcom449 compare -8 -.9E+1 -> 1 -dqcom450 compare -8 -90E-1 -> 1 - --- misalignment traps for little-endian -dqcom451 compare 1.0 0.1 -> 1 -dqcom452 compare 0.1 1.0 -> -1 -dqcom453 compare 10.0 0.1 -> 1 -dqcom454 compare 0.1 10.0 -> -1 -dqcom455 compare 100 1.0 -> 1 -dqcom456 compare 1.0 100 -> -1 -dqcom457 compare 1000 10.0 -> 1 -dqcom458 compare 10.0 1000 -> -1 -dqcom459 compare 10000 100.0 -> 1 -dqcom460 compare 100.0 10000 -> -1 -dqcom461 compare 100000 1000.0 -> 1 -dqcom462 compare 1000.0 100000 -> -1 -dqcom463 compare 1000000 10000.0 -> 1 -dqcom464 compare 10000.0 1000000 -> -1 - --- testcases that subtract to lots of zeros at boundaries [pgr] -dqcom473 compare 123.9999999999999999994560000000000E-89 123.999999999999999999456E-89 -> 0 -dqcom474 compare 123.999999999999999999456000000000E+89 123.999999999999999999456E+89 -> 0 -dqcom475 compare 123.99999999999999999945600000000E-89 123.999999999999999999456E-89 -> 0 -dqcom476 compare 123.9999999999999999994560000000E+89 123.999999999999999999456E+89 -> 0 -dqcom477 compare 123.999999999999999999456000000E-89 123.999999999999999999456E-89 -> 0 -dqcom478 compare 123.99999999999999999945600000E+89 123.999999999999999999456E+89 -> 0 -dqcom479 compare 123.9999999999999999994560000E-89 123.999999999999999999456E-89 -> 0 -dqcom480 compare 123.999999999999999999456000E+89 123.999999999999999999456E+89 -> 0 -dqcom481 compare 123.99999999999999999945600E-89 123.999999999999999999456E-89 -> 0 -dqcom482 compare 123.9999999999999999994560E+89 123.999999999999999999456E+89 -> 0 -dqcom483 compare 123.999999999999999999456E-89 123.999999999999999999456E-89 -> 0 -dqcom487 compare 123.999999999999999999456E+89 123.9999999999999999994560000000000E+89 -> 0 -dqcom488 compare 123.999999999999999999456E-89 123.999999999999999999456000000000E-89 -> 0 -dqcom489 compare 123.999999999999999999456E+89 123.99999999999999999945600000000E+89 -> 0 -dqcom490 compare 123.999999999999999999456E-89 123.9999999999999999994560000000E-89 -> 0 -dqcom491 compare 123.999999999999999999456E+89 123.999999999999999999456000000E+89 -> 0 -dqcom492 compare 123.999999999999999999456E-89 123.99999999999999999945600000E-89 -> 0 -dqcom493 compare 123.999999999999999999456E+89 123.9999999999999999994560000E+89 -> 0 -dqcom494 compare 123.999999999999999999456E-89 123.999999999999999999456000E-89 -> 0 -dqcom495 compare 123.999999999999999999456E+89 123.99999999999999999945600E+89 -> 0 -dqcom496 compare 123.999999999999999999456E-89 123.9999999999999999994560E-89 -> 0 -dqcom497 compare 123.999999999999999999456E+89 123.999999999999999999456E+89 -> 0 - --- wide-ranging, around precision; signs equal -dqcom500 compare 1 1E-15 -> 1 -dqcom501 compare 1 1E-14 -> 1 -dqcom502 compare 1 1E-13 -> 1 -dqcom503 compare 1 1E-12 -> 1 -dqcom504 compare 1 1E-11 -> 1 -dqcom505 compare 1 1E-10 -> 1 -dqcom506 compare 1 1E-9 -> 1 -dqcom507 compare 1 1E-8 -> 1 -dqcom508 compare 1 1E-7 -> 1 -dqcom509 compare 1 1E-6 -> 1 -dqcom510 compare 1 1E-5 -> 1 -dqcom511 compare 1 1E-4 -> 1 -dqcom512 compare 1 1E-3 -> 1 -dqcom513 compare 1 1E-2 -> 1 -dqcom514 compare 1 1E-1 -> 1 -dqcom515 compare 1 1E-0 -> 0 -dqcom516 compare 1 1E+1 -> -1 -dqcom517 compare 1 1E+2 -> -1 -dqcom518 compare 1 1E+3 -> -1 -dqcom519 compare 1 1E+4 -> -1 -dqcom521 compare 1 1E+5 -> -1 -dqcom522 compare 1 1E+6 -> -1 -dqcom523 compare 1 1E+7 -> -1 -dqcom524 compare 1 1E+8 -> -1 -dqcom525 compare 1 1E+9 -> -1 -dqcom526 compare 1 1E+10 -> -1 -dqcom527 compare 1 1E+11 -> -1 -dqcom528 compare 1 1E+12 -> -1 -dqcom529 compare 1 1E+13 -> -1 -dqcom530 compare 1 1E+14 -> -1 -dqcom531 compare 1 1E+15 -> -1 --- LR swap -dqcom540 compare 1E-15 1 -> -1 -dqcom541 compare 1E-14 1 -> -1 -dqcom542 compare 1E-13 1 -> -1 -dqcom543 compare 1E-12 1 -> -1 -dqcom544 compare 1E-11 1 -> -1 -dqcom545 compare 1E-10 1 -> -1 -dqcom546 compare 1E-9 1 -> -1 -dqcom547 compare 1E-8 1 -> -1 -dqcom548 compare 1E-7 1 -> -1 -dqcom549 compare 1E-6 1 -> -1 -dqcom550 compare 1E-5 1 -> -1 -dqcom551 compare 1E-4 1 -> -1 -dqcom552 compare 1E-3 1 -> -1 -dqcom553 compare 1E-2 1 -> -1 -dqcom554 compare 1E-1 1 -> -1 -dqcom555 compare 1E-0 1 -> 0 -dqcom556 compare 1E+1 1 -> 1 -dqcom557 compare 1E+2 1 -> 1 -dqcom558 compare 1E+3 1 -> 1 -dqcom559 compare 1E+4 1 -> 1 -dqcom561 compare 1E+5 1 -> 1 -dqcom562 compare 1E+6 1 -> 1 -dqcom563 compare 1E+7 1 -> 1 -dqcom564 compare 1E+8 1 -> 1 -dqcom565 compare 1E+9 1 -> 1 -dqcom566 compare 1E+10 1 -> 1 -dqcom567 compare 1E+11 1 -> 1 -dqcom568 compare 1E+12 1 -> 1 -dqcom569 compare 1E+13 1 -> 1 -dqcom570 compare 1E+14 1 -> 1 -dqcom571 compare 1E+15 1 -> 1 --- similar with a useful coefficient, one side only -dqcom580 compare 0.000000987654321 1E-15 -> 1 -dqcom581 compare 0.000000987654321 1E-14 -> 1 -dqcom582 compare 0.000000987654321 1E-13 -> 1 -dqcom583 compare 0.000000987654321 1E-12 -> 1 -dqcom584 compare 0.000000987654321 1E-11 -> 1 -dqcom585 compare 0.000000987654321 1E-10 -> 1 -dqcom586 compare 0.000000987654321 1E-9 -> 1 -dqcom587 compare 0.000000987654321 1E-8 -> 1 -dqcom588 compare 0.000000987654321 1E-7 -> 1 -dqcom589 compare 0.000000987654321 1E-6 -> -1 -dqcom590 compare 0.000000987654321 1E-5 -> -1 -dqcom591 compare 0.000000987654321 1E-4 -> -1 -dqcom592 compare 0.000000987654321 1E-3 -> -1 -dqcom593 compare 0.000000987654321 1E-2 -> -1 -dqcom594 compare 0.000000987654321 1E-1 -> -1 -dqcom595 compare 0.000000987654321 1E-0 -> -1 -dqcom596 compare 0.000000987654321 1E+1 -> -1 -dqcom597 compare 0.000000987654321 1E+2 -> -1 -dqcom598 compare 0.000000987654321 1E+3 -> -1 -dqcom599 compare 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -dqcom600 compare 12 12.2345 -> -1 -dqcom601 compare 12.0 12.2345 -> -1 -dqcom602 compare 12.00 12.2345 -> -1 -dqcom603 compare 12.000 12.2345 -> -1 -dqcom604 compare 12.0000 12.2345 -> -1 -dqcom605 compare 12.00000 12.2345 -> -1 -dqcom606 compare 12.000000 12.2345 -> -1 -dqcom607 compare 12.0000000 12.2345 -> -1 -dqcom608 compare 12.00000000 12.2345 -> -1 -dqcom609 compare 12.000000000 12.2345 -> -1 -dqcom610 compare 12.1234 12 -> 1 -dqcom611 compare 12.1234 12.0 -> 1 -dqcom612 compare 12.1234 12.00 -> 1 -dqcom613 compare 12.1234 12.000 -> 1 -dqcom614 compare 12.1234 12.0000 -> 1 -dqcom615 compare 12.1234 12.00000 -> 1 -dqcom616 compare 12.1234 12.000000 -> 1 -dqcom617 compare 12.1234 12.0000000 -> 1 -dqcom618 compare 12.1234 12.00000000 -> 1 -dqcom619 compare 12.1234 12.000000000 -> 1 -dqcom620 compare -12 -12.2345 -> 1 -dqcom621 compare -12.0 -12.2345 -> 1 -dqcom622 compare -12.00 -12.2345 -> 1 -dqcom623 compare -12.000 -12.2345 -> 1 -dqcom624 compare -12.0000 -12.2345 -> 1 -dqcom625 compare -12.00000 -12.2345 -> 1 -dqcom626 compare -12.000000 -12.2345 -> 1 -dqcom627 compare -12.0000000 -12.2345 -> 1 -dqcom628 compare -12.00000000 -12.2345 -> 1 -dqcom629 compare -12.000000000 -12.2345 -> 1 -dqcom630 compare -12.1234 -12 -> -1 -dqcom631 compare -12.1234 -12.0 -> -1 -dqcom632 compare -12.1234 -12.00 -> -1 -dqcom633 compare -12.1234 -12.000 -> -1 -dqcom634 compare -12.1234 -12.0000 -> -1 -dqcom635 compare -12.1234 -12.00000 -> -1 -dqcom636 compare -12.1234 -12.000000 -> -1 -dqcom637 compare -12.1234 -12.0000000 -> -1 -dqcom638 compare -12.1234 -12.00000000 -> -1 -dqcom639 compare -12.1234 -12.000000000 -> -1 - --- extended zeros -dqcom640 compare 0 0 -> 0 -dqcom641 compare 0 -0 -> 0 -dqcom642 compare 0 -0.0 -> 0 -dqcom643 compare 0 0.0 -> 0 -dqcom644 compare -0 0 -> 0 -dqcom645 compare -0 -0 -> 0 -dqcom646 compare -0 -0.0 -> 0 -dqcom647 compare -0 0.0 -> 0 -dqcom648 compare 0.0 0 -> 0 -dqcom649 compare 0.0 -0 -> 0 -dqcom650 compare 0.0 -0.0 -> 0 -dqcom651 compare 0.0 0.0 -> 0 -dqcom652 compare -0.0 0 -> 0 -dqcom653 compare -0.0 -0 -> 0 -dqcom654 compare -0.0 -0.0 -> 0 -dqcom655 compare -0.0 0.0 -> 0 - -dqcom656 compare -0E1 0.0 -> 0 -dqcom657 compare -0E2 0.0 -> 0 -dqcom658 compare 0E1 0.0 -> 0 -dqcom659 compare 0E2 0.0 -> 0 -dqcom660 compare -0E1 0 -> 0 -dqcom661 compare -0E2 0 -> 0 -dqcom662 compare 0E1 0 -> 0 -dqcom663 compare 0E2 0 -> 0 -dqcom664 compare -0E1 -0E1 -> 0 -dqcom665 compare -0E2 -0E1 -> 0 -dqcom666 compare 0E1 -0E1 -> 0 -dqcom667 compare 0E2 -0E1 -> 0 -dqcom668 compare -0E1 -0E2 -> 0 -dqcom669 compare -0E2 -0E2 -> 0 -dqcom670 compare 0E1 -0E2 -> 0 -dqcom671 compare 0E2 -0E2 -> 0 -dqcom672 compare -0E1 0E1 -> 0 -dqcom673 compare -0E2 0E1 -> 0 -dqcom674 compare 0E1 0E1 -> 0 -dqcom675 compare 0E2 0E1 -> 0 -dqcom676 compare -0E1 0E2 -> 0 -dqcom677 compare -0E2 0E2 -> 0 -dqcom678 compare 0E1 0E2 -> 0 -dqcom679 compare 0E2 0E2 -> 0 - --- trailing zeros; unit-y -dqcom680 compare 12 12 -> 0 -dqcom681 compare 12 12.0 -> 0 -dqcom682 compare 12 12.00 -> 0 -dqcom683 compare 12 12.000 -> 0 -dqcom684 compare 12 12.0000 -> 0 -dqcom685 compare 12 12.00000 -> 0 -dqcom686 compare 12 12.000000 -> 0 -dqcom687 compare 12 12.0000000 -> 0 -dqcom688 compare 12 12.00000000 -> 0 -dqcom689 compare 12 12.000000000 -> 0 -dqcom690 compare 12 12 -> 0 -dqcom691 compare 12.0 12 -> 0 -dqcom692 compare 12.00 12 -> 0 -dqcom693 compare 12.000 12 -> 0 -dqcom694 compare 12.0000 12 -> 0 -dqcom695 compare 12.00000 12 -> 0 -dqcom696 compare 12.000000 12 -> 0 -dqcom697 compare 12.0000000 12 -> 0 -dqcom698 compare 12.00000000 12 -> 0 -dqcom699 compare 12.000000000 12 -> 0 - --- first, second, & last digit -dqcom700 compare 1234567899999999999999999990123456 1234567899999999999999999990123455 -> 1 -dqcom701 compare 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 -dqcom702 compare 1234567899999999999999999990123456 1234567899999999999999999990123457 -> -1 -dqcom703 compare 1234567899999999999999999990123456 0234567899999999999999999990123456 -> 1 -dqcom704 compare 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 -dqcom705 compare 1234567899999999999999999990123456 2234567899999999999999999990123456 -> -1 -dqcom706 compare 1134567899999999999999999990123456 1034567899999999999999999990123456 -> 1 -dqcom707 compare 1134567899999999999999999990123456 1134567899999999999999999990123456 -> 0 -dqcom708 compare 1134567899999999999999999990123456 1234567899999999999999999990123456 -> -1 - --- miscellaneous -dqcom721 compare 12345678000 1 -> 1 -dqcom722 compare 1 12345678000 -> -1 -dqcom723 compare 1234567800 1 -> 1 -dqcom724 compare 1 1234567800 -> -1 -dqcom725 compare 1234567890 1 -> 1 -dqcom726 compare 1 1234567890 -> -1 -dqcom727 compare 1234567891 1 -> 1 -dqcom728 compare 1 1234567891 -> -1 -dqcom729 compare 12345678901 1 -> 1 -dqcom730 compare 1 12345678901 -> -1 -dqcom731 compare 1234567896 1 -> 1 -dqcom732 compare 1 1234567896 -> -1 - --- residue cases at lower precision -dqcom740 compare 1 0.9999999 -> 1 -dqcom741 compare 1 0.999999 -> 1 -dqcom742 compare 1 0.99999 -> 1 -dqcom743 compare 1 1.0000 -> 0 -dqcom744 compare 1 1.00001 -> -1 -dqcom745 compare 1 1.000001 -> -1 -dqcom746 compare 1 1.0000001 -> -1 -dqcom750 compare 0.9999999 1 -> -1 -dqcom751 compare 0.999999 1 -> -1 -dqcom752 compare 0.99999 1 -> -1 -dqcom753 compare 1.0000 1 -> 0 -dqcom754 compare 1.00001 1 -> 1 -dqcom755 compare 1.000001 1 -> 1 -dqcom756 compare 1.0000001 1 -> 1 - --- Specials -dqcom780 compare Inf -Inf -> 1 -dqcom781 compare Inf -1000 -> 1 -dqcom782 compare Inf -1 -> 1 -dqcom783 compare Inf -0 -> 1 -dqcom784 compare Inf 0 -> 1 -dqcom785 compare Inf 1 -> 1 -dqcom786 compare Inf 1000 -> 1 -dqcom787 compare Inf Inf -> 0 -dqcom788 compare -1000 Inf -> -1 -dqcom789 compare -Inf Inf -> -1 -dqcom790 compare -1 Inf -> -1 -dqcom791 compare -0 Inf -> -1 -dqcom792 compare 0 Inf -> -1 -dqcom793 compare 1 Inf -> -1 -dqcom794 compare 1000 Inf -> -1 -dqcom795 compare Inf Inf -> 0 - -dqcom800 compare -Inf -Inf -> 0 -dqcom801 compare -Inf -1000 -> -1 -dqcom802 compare -Inf -1 -> -1 -dqcom803 compare -Inf -0 -> -1 -dqcom804 compare -Inf 0 -> -1 -dqcom805 compare -Inf 1 -> -1 -dqcom806 compare -Inf 1000 -> -1 -dqcom807 compare -Inf Inf -> -1 -dqcom808 compare -Inf -Inf -> 0 -dqcom809 compare -1000 -Inf -> 1 -dqcom810 compare -1 -Inf -> 1 -dqcom811 compare -0 -Inf -> 1 -dqcom812 compare 0 -Inf -> 1 -dqcom813 compare 1 -Inf -> 1 -dqcom814 compare 1000 -Inf -> 1 -dqcom815 compare Inf -Inf -> 1 - -dqcom821 compare NaN -Inf -> NaN -dqcom822 compare NaN -1000 -> NaN -dqcom823 compare NaN -1 -> NaN -dqcom824 compare NaN -0 -> NaN -dqcom825 compare NaN 0 -> NaN -dqcom826 compare NaN 1 -> NaN -dqcom827 compare NaN 1000 -> NaN -dqcom828 compare NaN Inf -> NaN -dqcom829 compare NaN NaN -> NaN -dqcom830 compare -Inf NaN -> NaN -dqcom831 compare -1000 NaN -> NaN -dqcom832 compare -1 NaN -> NaN -dqcom833 compare -0 NaN -> NaN -dqcom834 compare 0 NaN -> NaN -dqcom835 compare 1 NaN -> NaN -dqcom836 compare 1000 NaN -> NaN -dqcom837 compare Inf NaN -> NaN -dqcom838 compare -NaN -NaN -> -NaN -dqcom839 compare +NaN -NaN -> NaN -dqcom840 compare -NaN +NaN -> -NaN - -dqcom841 compare sNaN -Inf -> NaN Invalid_operation -dqcom842 compare sNaN -1000 -> NaN Invalid_operation -dqcom843 compare sNaN -1 -> NaN Invalid_operation -dqcom844 compare sNaN -0 -> NaN Invalid_operation -dqcom845 compare sNaN 0 -> NaN Invalid_operation -dqcom846 compare sNaN 1 -> NaN Invalid_operation -dqcom847 compare sNaN 1000 -> NaN Invalid_operation -dqcom848 compare sNaN NaN -> NaN Invalid_operation -dqcom849 compare sNaN sNaN -> NaN Invalid_operation -dqcom850 compare NaN sNaN -> NaN Invalid_operation -dqcom851 compare -Inf sNaN -> NaN Invalid_operation -dqcom852 compare -1000 sNaN -> NaN Invalid_operation -dqcom853 compare -1 sNaN -> NaN Invalid_operation -dqcom854 compare -0 sNaN -> NaN Invalid_operation -dqcom855 compare 0 sNaN -> NaN Invalid_operation -dqcom856 compare 1 sNaN -> NaN Invalid_operation -dqcom857 compare 1000 sNaN -> NaN Invalid_operation -dqcom858 compare Inf sNaN -> NaN Invalid_operation -dqcom859 compare NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqcom860 compare NaN9 -Inf -> NaN9 -dqcom861 compare NaN8 999 -> NaN8 -dqcom862 compare NaN77 Inf -> NaN77 -dqcom863 compare -NaN67 NaN5 -> -NaN67 -dqcom864 compare -Inf -NaN4 -> -NaN4 -dqcom865 compare -999 -NaN33 -> -NaN33 -dqcom866 compare Inf NaN2 -> NaN2 -dqcom867 compare -NaN41 -NaN42 -> -NaN41 -dqcom868 compare +NaN41 -NaN42 -> NaN41 -dqcom869 compare -NaN41 +NaN42 -> -NaN41 -dqcom870 compare +NaN41 +NaN42 -> NaN41 - -dqcom871 compare -sNaN99 -Inf -> -NaN99 Invalid_operation -dqcom872 compare sNaN98 -11 -> NaN98 Invalid_operation -dqcom873 compare sNaN97 NaN -> NaN97 Invalid_operation -dqcom874 compare sNaN16 sNaN94 -> NaN16 Invalid_operation -dqcom875 compare NaN85 sNaN83 -> NaN83 Invalid_operation -dqcom876 compare -Inf sNaN92 -> NaN92 Invalid_operation -dqcom877 compare 088 sNaN81 -> NaN81 Invalid_operation -dqcom878 compare Inf sNaN90 -> NaN90 Invalid_operation -dqcom879 compare NaN -sNaN89 -> -NaN89 Invalid_operation - --- wide range -dqcom880 compare +1.23456789012345E-0 9E+6144 -> -1 -dqcom881 compare 9E+6144 +1.23456789012345E-0 -> 1 -dqcom882 compare +0.100 9E-6143 -> 1 -dqcom883 compare 9E-6143 +0.100 -> -1 -dqcom885 compare -1.23456789012345E-0 9E+6144 -> -1 -dqcom886 compare 9E+6144 -1.23456789012345E-0 -> 1 -dqcom887 compare -0.100 9E-6143 -> -1 -dqcom888 compare 9E-6143 -0.100 -> 1 - --- signs -dqcom901 compare 1e+77 1e+11 -> 1 -dqcom902 compare 1e+77 -1e+11 -> 1 -dqcom903 compare -1e+77 1e+11 -> -1 -dqcom904 compare -1e+77 -1e+11 -> -1 -dqcom905 compare 1e-77 1e-11 -> -1 -dqcom906 compare 1e-77 -1e-11 -> 1 -dqcom907 compare -1e-77 1e-11 -> -1 -dqcom908 compare -1e-77 -1e-11 -> 1 - --- full alignment range, both ways -dqcomp1001 compare 1 1.000000000000000000000000000000000 -> 0 -dqcomp1002 compare 1 1.00000000000000000000000000000000 -> 0 -dqcomp1003 compare 1 1.0000000000000000000000000000000 -> 0 -dqcomp1004 compare 1 1.000000000000000000000000000000 -> 0 -dqcomp1005 compare 1 1.00000000000000000000000000000 -> 0 -dqcomp1006 compare 1 1.0000000000000000000000000000 -> 0 -dqcomp1007 compare 1 1.000000000000000000000000000 -> 0 -dqcomp1008 compare 1 1.00000000000000000000000000 -> 0 -dqcomp1009 compare 1 1.0000000000000000000000000 -> 0 -dqcomp1010 compare 1 1.000000000000000000000000 -> 0 -dqcomp1011 compare 1 1.00000000000000000000000 -> 0 -dqcomp1012 compare 1 1.0000000000000000000000 -> 0 -dqcomp1013 compare 1 1.000000000000000000000 -> 0 -dqcomp1014 compare 1 1.00000000000000000000 -> 0 -dqcomp1015 compare 1 1.0000000000000000000 -> 0 -dqcomp1016 compare 1 1.000000000000000000 -> 0 -dqcomp1017 compare 1 1.00000000000000000 -> 0 -dqcomp1018 compare 1 1.0000000000000000 -> 0 -dqcomp1019 compare 1 1.000000000000000 -> 0 -dqcomp1020 compare 1 1.00000000000000 -> 0 -dqcomp1021 compare 1 1.0000000000000 -> 0 -dqcomp1022 compare 1 1.000000000000 -> 0 -dqcomp1023 compare 1 1.00000000000 -> 0 -dqcomp1024 compare 1 1.0000000000 -> 0 -dqcomp1025 compare 1 1.000000000 -> 0 -dqcomp1026 compare 1 1.00000000 -> 0 -dqcomp1027 compare 1 1.0000000 -> 0 -dqcomp1028 compare 1 1.000000 -> 0 -dqcomp1029 compare 1 1.00000 -> 0 -dqcomp1030 compare 1 1.0000 -> 0 -dqcomp1031 compare 1 1.000 -> 0 -dqcomp1032 compare 1 1.00 -> 0 -dqcomp1033 compare 1 1.0 -> 0 - -dqcomp1041 compare 1.000000000000000000000000000000000 1 -> 0 -dqcomp1042 compare 1.00000000000000000000000000000000 1 -> 0 -dqcomp1043 compare 1.0000000000000000000000000000000 1 -> 0 -dqcomp1044 compare 1.000000000000000000000000000000 1 -> 0 -dqcomp1045 compare 1.00000000000000000000000000000 1 -> 0 -dqcomp1046 compare 1.0000000000000000000000000000 1 -> 0 -dqcomp1047 compare 1.000000000000000000000000000 1 -> 0 -dqcomp1048 compare 1.00000000000000000000000000 1 -> 0 -dqcomp1049 compare 1.0000000000000000000000000 1 -> 0 -dqcomp1050 compare 1.000000000000000000000000 1 -> 0 -dqcomp1051 compare 1.00000000000000000000000 1 -> 0 -dqcomp1052 compare 1.0000000000000000000000 1 -> 0 -dqcomp1053 compare 1.000000000000000000000 1 -> 0 -dqcomp1054 compare 1.00000000000000000000 1 -> 0 -dqcomp1055 compare 1.0000000000000000000 1 -> 0 -dqcomp1056 compare 1.000000000000000000 1 -> 0 -dqcomp1057 compare 1.00000000000000000 1 -> 0 -dqcomp1058 compare 1.0000000000000000 1 -> 0 -dqcomp1059 compare 1.000000000000000 1 -> 0 -dqcomp1060 compare 1.00000000000000 1 -> 0 -dqcomp1061 compare 1.0000000000000 1 -> 0 -dqcomp1062 compare 1.000000000000 1 -> 0 -dqcomp1063 compare 1.00000000000 1 -> 0 -dqcomp1064 compare 1.0000000000 1 -> 0 -dqcomp1065 compare 1.000000000 1 -> 0 -dqcomp1066 compare 1.00000000 1 -> 0 -dqcomp1067 compare 1.0000000 1 -> 0 -dqcomp1068 compare 1.000000 1 -> 0 -dqcomp1069 compare 1.00000 1 -> 0 -dqcomp1070 compare 1.0000 1 -> 0 -dqcomp1071 compare 1.000 1 -> 0 -dqcomp1072 compare 1.00 1 -> 0 -dqcomp1073 compare 1.0 1 -> 0 - --- check MSD always detected non-zero -dqcomp1080 compare 0 0.000000000000000000000000000000000 -> 0 -dqcomp1081 compare 0 1.000000000000000000000000000000000 -> -1 -dqcomp1082 compare 0 2.000000000000000000000000000000000 -> -1 -dqcomp1083 compare 0 3.000000000000000000000000000000000 -> -1 -dqcomp1084 compare 0 4.000000000000000000000000000000000 -> -1 -dqcomp1085 compare 0 5.000000000000000000000000000000000 -> -1 -dqcomp1086 compare 0 6.000000000000000000000000000000000 -> -1 -dqcomp1087 compare 0 7.000000000000000000000000000000000 -> -1 -dqcomp1088 compare 0 8.000000000000000000000000000000000 -> -1 -dqcomp1089 compare 0 9.000000000000000000000000000000000 -> -1 -dqcomp1090 compare 0.000000000000000000000000000000000 0 -> 0 -dqcomp1091 compare 1.000000000000000000000000000000000 0 -> 1 -dqcomp1092 compare 2.000000000000000000000000000000000 0 -> 1 -dqcomp1093 compare 3.000000000000000000000000000000000 0 -> 1 -dqcomp1094 compare 4.000000000000000000000000000000000 0 -> 1 -dqcomp1095 compare 5.000000000000000000000000000000000 0 -> 1 -dqcomp1096 compare 6.000000000000000000000000000000000 0 -> 1 -dqcomp1097 compare 7.000000000000000000000000000000000 0 -> 1 -dqcomp1098 compare 8.000000000000000000000000000000000 0 -> 1 -dqcomp1099 compare 9.000000000000000000000000000000000 0 -> 1 - --- Null tests -dqcom990 compare 10 # -> NaN Invalid_operation -dqcom991 compare # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqCompare.decTest -- decQuad comparison that allows quiet NaNs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqcom001 compare -2 -2 -> 0 +dqcom002 compare -2 -1 -> -1 +dqcom003 compare -2 0 -> -1 +dqcom004 compare -2 1 -> -1 +dqcom005 compare -2 2 -> -1 +dqcom006 compare -1 -2 -> 1 +dqcom007 compare -1 -1 -> 0 +dqcom008 compare -1 0 -> -1 +dqcom009 compare -1 1 -> -1 +dqcom010 compare -1 2 -> -1 +dqcom011 compare 0 -2 -> 1 +dqcom012 compare 0 -1 -> 1 +dqcom013 compare 0 0 -> 0 +dqcom014 compare 0 1 -> -1 +dqcom015 compare 0 2 -> -1 +dqcom016 compare 1 -2 -> 1 +dqcom017 compare 1 -1 -> 1 +dqcom018 compare 1 0 -> 1 +dqcom019 compare 1 1 -> 0 +dqcom020 compare 1 2 -> -1 +dqcom021 compare 2 -2 -> 1 +dqcom022 compare 2 -1 -> 1 +dqcom023 compare 2 0 -> 1 +dqcom025 compare 2 1 -> 1 +dqcom026 compare 2 2 -> 0 + +dqcom031 compare -20 -20 -> 0 +dqcom032 compare -20 -10 -> -1 +dqcom033 compare -20 00 -> -1 +dqcom034 compare -20 10 -> -1 +dqcom035 compare -20 20 -> -1 +dqcom036 compare -10 -20 -> 1 +dqcom037 compare -10 -10 -> 0 +dqcom038 compare -10 00 -> -1 +dqcom039 compare -10 10 -> -1 +dqcom040 compare -10 20 -> -1 +dqcom041 compare 00 -20 -> 1 +dqcom042 compare 00 -10 -> 1 +dqcom043 compare 00 00 -> 0 +dqcom044 compare 00 10 -> -1 +dqcom045 compare 00 20 -> -1 +dqcom046 compare 10 -20 -> 1 +dqcom047 compare 10 -10 -> 1 +dqcom048 compare 10 00 -> 1 +dqcom049 compare 10 10 -> 0 +dqcom050 compare 10 20 -> -1 +dqcom051 compare 20 -20 -> 1 +dqcom052 compare 20 -10 -> 1 +dqcom053 compare 20 00 -> 1 +dqcom055 compare 20 10 -> 1 +dqcom056 compare 20 20 -> 0 + +dqcom061 compare -2.0 -2.0 -> 0 +dqcom062 compare -2.0 -1.0 -> -1 +dqcom063 compare -2.0 0.0 -> -1 +dqcom064 compare -2.0 1.0 -> -1 +dqcom065 compare -2.0 2.0 -> -1 +dqcom066 compare -1.0 -2.0 -> 1 +dqcom067 compare -1.0 -1.0 -> 0 +dqcom068 compare -1.0 0.0 -> -1 +dqcom069 compare -1.0 1.0 -> -1 +dqcom070 compare -1.0 2.0 -> -1 +dqcom071 compare 0.0 -2.0 -> 1 +dqcom072 compare 0.0 -1.0 -> 1 +dqcom073 compare 0.0 0.0 -> 0 +dqcom074 compare 0.0 1.0 -> -1 +dqcom075 compare 0.0 2.0 -> -1 +dqcom076 compare 1.0 -2.0 -> 1 +dqcom077 compare 1.0 -1.0 -> 1 +dqcom078 compare 1.0 0.0 -> 1 +dqcom079 compare 1.0 1.0 -> 0 +dqcom080 compare 1.0 2.0 -> -1 +dqcom081 compare 2.0 -2.0 -> 1 +dqcom082 compare 2.0 -1.0 -> 1 +dqcom083 compare 2.0 0.0 -> 1 +dqcom085 compare 2.0 1.0 -> 1 +dqcom086 compare 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +dqcom090 compare 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 0 +dqcom091 compare -9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> -1 +dqcom092 compare 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 1 +dqcom093 compare -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0 + +-- some differing length/exponent cases +dqcom100 compare 7.0 7.0 -> 0 +dqcom101 compare 7.0 7 -> 0 +dqcom102 compare 7 7.0 -> 0 +dqcom103 compare 7E+0 7.0 -> 0 +dqcom104 compare 70E-1 7.0 -> 0 +dqcom105 compare 0.7E+1 7 -> 0 +dqcom106 compare 70E-1 7 -> 0 +dqcom107 compare 7.0 7E+0 -> 0 +dqcom108 compare 7.0 70E-1 -> 0 +dqcom109 compare 7 0.7E+1 -> 0 +dqcom110 compare 7 70E-1 -> 0 + +dqcom120 compare 8.0 7.0 -> 1 +dqcom121 compare 8.0 7 -> 1 +dqcom122 compare 8 7.0 -> 1 +dqcom123 compare 8E+0 7.0 -> 1 +dqcom124 compare 80E-1 7.0 -> 1 +dqcom125 compare 0.8E+1 7 -> 1 +dqcom126 compare 80E-1 7 -> 1 +dqcom127 compare 8.0 7E+0 -> 1 +dqcom128 compare 8.0 70E-1 -> 1 +dqcom129 compare 8 0.7E+1 -> 1 +dqcom130 compare 8 70E-1 -> 1 + +dqcom140 compare 8.0 9.0 -> -1 +dqcom141 compare 8.0 9 -> -1 +dqcom142 compare 8 9.0 -> -1 +dqcom143 compare 8E+0 9.0 -> -1 +dqcom144 compare 80E-1 9.0 -> -1 +dqcom145 compare 0.8E+1 9 -> -1 +dqcom146 compare 80E-1 9 -> -1 +dqcom147 compare 8.0 9E+0 -> -1 +dqcom148 compare 8.0 90E-1 -> -1 +dqcom149 compare 8 0.9E+1 -> -1 +dqcom150 compare 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +dqcom200 compare -7.0 7.0 -> -1 +dqcom201 compare -7.0 7 -> -1 +dqcom202 compare -7 7.0 -> -1 +dqcom203 compare -7E+0 7.0 -> -1 +dqcom204 compare -70E-1 7.0 -> -1 +dqcom205 compare -0.7E+1 7 -> -1 +dqcom206 compare -70E-1 7 -> -1 +dqcom207 compare -7.0 7E+0 -> -1 +dqcom208 compare -7.0 70E-1 -> -1 +dqcom209 compare -7 0.7E+1 -> -1 +dqcom210 compare -7 70E-1 -> -1 + +dqcom220 compare -8.0 7.0 -> -1 +dqcom221 compare -8.0 7 -> -1 +dqcom222 compare -8 7.0 -> -1 +dqcom223 compare -8E+0 7.0 -> -1 +dqcom224 compare -80E-1 7.0 -> -1 +dqcom225 compare -0.8E+1 7 -> -1 +dqcom226 compare -80E-1 7 -> -1 +dqcom227 compare -8.0 7E+0 -> -1 +dqcom228 compare -8.0 70E-1 -> -1 +dqcom229 compare -8 0.7E+1 -> -1 +dqcom230 compare -8 70E-1 -> -1 + +dqcom240 compare -8.0 9.0 -> -1 +dqcom241 compare -8.0 9 -> -1 +dqcom242 compare -8 9.0 -> -1 +dqcom243 compare -8E+0 9.0 -> -1 +dqcom244 compare -80E-1 9.0 -> -1 +dqcom245 compare -0.8E+1 9 -> -1 +dqcom246 compare -80E-1 9 -> -1 +dqcom247 compare -8.0 9E+0 -> -1 +dqcom248 compare -8.0 90E-1 -> -1 +dqcom249 compare -8 0.9E+1 -> -1 +dqcom250 compare -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +dqcom300 compare 7.0 -7.0 -> 1 +dqcom301 compare 7.0 -7 -> 1 +dqcom302 compare 7 -7.0 -> 1 +dqcom303 compare 7E+0 -7.0 -> 1 +dqcom304 compare 70E-1 -7.0 -> 1 +dqcom305 compare .7E+1 -7 -> 1 +dqcom306 compare 70E-1 -7 -> 1 +dqcom307 compare 7.0 -7E+0 -> 1 +dqcom308 compare 7.0 -70E-1 -> 1 +dqcom309 compare 7 -.7E+1 -> 1 +dqcom310 compare 7 -70E-1 -> 1 + +dqcom320 compare 8.0 -7.0 -> 1 +dqcom321 compare 8.0 -7 -> 1 +dqcom322 compare 8 -7.0 -> 1 +dqcom323 compare 8E+0 -7.0 -> 1 +dqcom324 compare 80E-1 -7.0 -> 1 +dqcom325 compare .8E+1 -7 -> 1 +dqcom326 compare 80E-1 -7 -> 1 +dqcom327 compare 8.0 -7E+0 -> 1 +dqcom328 compare 8.0 -70E-1 -> 1 +dqcom329 compare 8 -.7E+1 -> 1 +dqcom330 compare 8 -70E-1 -> 1 + +dqcom340 compare 8.0 -9.0 -> 1 +dqcom341 compare 8.0 -9 -> 1 +dqcom342 compare 8 -9.0 -> 1 +dqcom343 compare 8E+0 -9.0 -> 1 +dqcom344 compare 80E-1 -9.0 -> 1 +dqcom345 compare .8E+1 -9 -> 1 +dqcom346 compare 80E-1 -9 -> 1 +dqcom347 compare 8.0 -9E+0 -> 1 +dqcom348 compare 8.0 -90E-1 -> 1 +dqcom349 compare 8 -.9E+1 -> 1 +dqcom350 compare 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +dqcom400 compare -7.0 -7.0 -> 0 +dqcom401 compare -7.0 -7 -> 0 +dqcom402 compare -7 -7.0 -> 0 +dqcom403 compare -7E+0 -7.0 -> 0 +dqcom404 compare -70E-1 -7.0 -> 0 +dqcom405 compare -.7E+1 -7 -> 0 +dqcom406 compare -70E-1 -7 -> 0 +dqcom407 compare -7.0 -7E+0 -> 0 +dqcom408 compare -7.0 -70E-1 -> 0 +dqcom409 compare -7 -.7E+1 -> 0 +dqcom410 compare -7 -70E-1 -> 0 + +dqcom420 compare -8.0 -7.0 -> -1 +dqcom421 compare -8.0 -7 -> -1 +dqcom422 compare -8 -7.0 -> -1 +dqcom423 compare -8E+0 -7.0 -> -1 +dqcom424 compare -80E-1 -7.0 -> -1 +dqcom425 compare -.8E+1 -7 -> -1 +dqcom426 compare -80E-1 -7 -> -1 +dqcom427 compare -8.0 -7E+0 -> -1 +dqcom428 compare -8.0 -70E-1 -> -1 +dqcom429 compare -8 -.7E+1 -> -1 +dqcom430 compare -8 -70E-1 -> -1 + +dqcom440 compare -8.0 -9.0 -> 1 +dqcom441 compare -8.0 -9 -> 1 +dqcom442 compare -8 -9.0 -> 1 +dqcom443 compare -8E+0 -9.0 -> 1 +dqcom444 compare -80E-1 -9.0 -> 1 +dqcom445 compare -.8E+1 -9 -> 1 +dqcom446 compare -80E-1 -9 -> 1 +dqcom447 compare -8.0 -9E+0 -> 1 +dqcom448 compare -8.0 -90E-1 -> 1 +dqcom449 compare -8 -.9E+1 -> 1 +dqcom450 compare -8 -90E-1 -> 1 + +-- misalignment traps for little-endian +dqcom451 compare 1.0 0.1 -> 1 +dqcom452 compare 0.1 1.0 -> -1 +dqcom453 compare 10.0 0.1 -> 1 +dqcom454 compare 0.1 10.0 -> -1 +dqcom455 compare 100 1.0 -> 1 +dqcom456 compare 1.0 100 -> -1 +dqcom457 compare 1000 10.0 -> 1 +dqcom458 compare 10.0 1000 -> -1 +dqcom459 compare 10000 100.0 -> 1 +dqcom460 compare 100.0 10000 -> -1 +dqcom461 compare 100000 1000.0 -> 1 +dqcom462 compare 1000.0 100000 -> -1 +dqcom463 compare 1000000 10000.0 -> 1 +dqcom464 compare 10000.0 1000000 -> -1 + +-- testcases that subtract to lots of zeros at boundaries [pgr] +dqcom473 compare 123.9999999999999999994560000000000E-89 123.999999999999999999456E-89 -> 0 +dqcom474 compare 123.999999999999999999456000000000E+89 123.999999999999999999456E+89 -> 0 +dqcom475 compare 123.99999999999999999945600000000E-89 123.999999999999999999456E-89 -> 0 +dqcom476 compare 123.9999999999999999994560000000E+89 123.999999999999999999456E+89 -> 0 +dqcom477 compare 123.999999999999999999456000000E-89 123.999999999999999999456E-89 -> 0 +dqcom478 compare 123.99999999999999999945600000E+89 123.999999999999999999456E+89 -> 0 +dqcom479 compare 123.9999999999999999994560000E-89 123.999999999999999999456E-89 -> 0 +dqcom480 compare 123.999999999999999999456000E+89 123.999999999999999999456E+89 -> 0 +dqcom481 compare 123.99999999999999999945600E-89 123.999999999999999999456E-89 -> 0 +dqcom482 compare 123.9999999999999999994560E+89 123.999999999999999999456E+89 -> 0 +dqcom483 compare 123.999999999999999999456E-89 123.999999999999999999456E-89 -> 0 +dqcom487 compare 123.999999999999999999456E+89 123.9999999999999999994560000000000E+89 -> 0 +dqcom488 compare 123.999999999999999999456E-89 123.999999999999999999456000000000E-89 -> 0 +dqcom489 compare 123.999999999999999999456E+89 123.99999999999999999945600000000E+89 -> 0 +dqcom490 compare 123.999999999999999999456E-89 123.9999999999999999994560000000E-89 -> 0 +dqcom491 compare 123.999999999999999999456E+89 123.999999999999999999456000000E+89 -> 0 +dqcom492 compare 123.999999999999999999456E-89 123.99999999999999999945600000E-89 -> 0 +dqcom493 compare 123.999999999999999999456E+89 123.9999999999999999994560000E+89 -> 0 +dqcom494 compare 123.999999999999999999456E-89 123.999999999999999999456000E-89 -> 0 +dqcom495 compare 123.999999999999999999456E+89 123.99999999999999999945600E+89 -> 0 +dqcom496 compare 123.999999999999999999456E-89 123.9999999999999999994560E-89 -> 0 +dqcom497 compare 123.999999999999999999456E+89 123.999999999999999999456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +dqcom500 compare 1 1E-15 -> 1 +dqcom501 compare 1 1E-14 -> 1 +dqcom502 compare 1 1E-13 -> 1 +dqcom503 compare 1 1E-12 -> 1 +dqcom504 compare 1 1E-11 -> 1 +dqcom505 compare 1 1E-10 -> 1 +dqcom506 compare 1 1E-9 -> 1 +dqcom507 compare 1 1E-8 -> 1 +dqcom508 compare 1 1E-7 -> 1 +dqcom509 compare 1 1E-6 -> 1 +dqcom510 compare 1 1E-5 -> 1 +dqcom511 compare 1 1E-4 -> 1 +dqcom512 compare 1 1E-3 -> 1 +dqcom513 compare 1 1E-2 -> 1 +dqcom514 compare 1 1E-1 -> 1 +dqcom515 compare 1 1E-0 -> 0 +dqcom516 compare 1 1E+1 -> -1 +dqcom517 compare 1 1E+2 -> -1 +dqcom518 compare 1 1E+3 -> -1 +dqcom519 compare 1 1E+4 -> -1 +dqcom521 compare 1 1E+5 -> -1 +dqcom522 compare 1 1E+6 -> -1 +dqcom523 compare 1 1E+7 -> -1 +dqcom524 compare 1 1E+8 -> -1 +dqcom525 compare 1 1E+9 -> -1 +dqcom526 compare 1 1E+10 -> -1 +dqcom527 compare 1 1E+11 -> -1 +dqcom528 compare 1 1E+12 -> -1 +dqcom529 compare 1 1E+13 -> -1 +dqcom530 compare 1 1E+14 -> -1 +dqcom531 compare 1 1E+15 -> -1 +-- LR swap +dqcom540 compare 1E-15 1 -> -1 +dqcom541 compare 1E-14 1 -> -1 +dqcom542 compare 1E-13 1 -> -1 +dqcom543 compare 1E-12 1 -> -1 +dqcom544 compare 1E-11 1 -> -1 +dqcom545 compare 1E-10 1 -> -1 +dqcom546 compare 1E-9 1 -> -1 +dqcom547 compare 1E-8 1 -> -1 +dqcom548 compare 1E-7 1 -> -1 +dqcom549 compare 1E-6 1 -> -1 +dqcom550 compare 1E-5 1 -> -1 +dqcom551 compare 1E-4 1 -> -1 +dqcom552 compare 1E-3 1 -> -1 +dqcom553 compare 1E-2 1 -> -1 +dqcom554 compare 1E-1 1 -> -1 +dqcom555 compare 1E-0 1 -> 0 +dqcom556 compare 1E+1 1 -> 1 +dqcom557 compare 1E+2 1 -> 1 +dqcom558 compare 1E+3 1 -> 1 +dqcom559 compare 1E+4 1 -> 1 +dqcom561 compare 1E+5 1 -> 1 +dqcom562 compare 1E+6 1 -> 1 +dqcom563 compare 1E+7 1 -> 1 +dqcom564 compare 1E+8 1 -> 1 +dqcom565 compare 1E+9 1 -> 1 +dqcom566 compare 1E+10 1 -> 1 +dqcom567 compare 1E+11 1 -> 1 +dqcom568 compare 1E+12 1 -> 1 +dqcom569 compare 1E+13 1 -> 1 +dqcom570 compare 1E+14 1 -> 1 +dqcom571 compare 1E+15 1 -> 1 +-- similar with a useful coefficient, one side only +dqcom580 compare 0.000000987654321 1E-15 -> 1 +dqcom581 compare 0.000000987654321 1E-14 -> 1 +dqcom582 compare 0.000000987654321 1E-13 -> 1 +dqcom583 compare 0.000000987654321 1E-12 -> 1 +dqcom584 compare 0.000000987654321 1E-11 -> 1 +dqcom585 compare 0.000000987654321 1E-10 -> 1 +dqcom586 compare 0.000000987654321 1E-9 -> 1 +dqcom587 compare 0.000000987654321 1E-8 -> 1 +dqcom588 compare 0.000000987654321 1E-7 -> 1 +dqcom589 compare 0.000000987654321 1E-6 -> -1 +dqcom590 compare 0.000000987654321 1E-5 -> -1 +dqcom591 compare 0.000000987654321 1E-4 -> -1 +dqcom592 compare 0.000000987654321 1E-3 -> -1 +dqcom593 compare 0.000000987654321 1E-2 -> -1 +dqcom594 compare 0.000000987654321 1E-1 -> -1 +dqcom595 compare 0.000000987654321 1E-0 -> -1 +dqcom596 compare 0.000000987654321 1E+1 -> -1 +dqcom597 compare 0.000000987654321 1E+2 -> -1 +dqcom598 compare 0.000000987654321 1E+3 -> -1 +dqcom599 compare 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +dqcom600 compare 12 12.2345 -> -1 +dqcom601 compare 12.0 12.2345 -> -1 +dqcom602 compare 12.00 12.2345 -> -1 +dqcom603 compare 12.000 12.2345 -> -1 +dqcom604 compare 12.0000 12.2345 -> -1 +dqcom605 compare 12.00000 12.2345 -> -1 +dqcom606 compare 12.000000 12.2345 -> -1 +dqcom607 compare 12.0000000 12.2345 -> -1 +dqcom608 compare 12.00000000 12.2345 -> -1 +dqcom609 compare 12.000000000 12.2345 -> -1 +dqcom610 compare 12.1234 12 -> 1 +dqcom611 compare 12.1234 12.0 -> 1 +dqcom612 compare 12.1234 12.00 -> 1 +dqcom613 compare 12.1234 12.000 -> 1 +dqcom614 compare 12.1234 12.0000 -> 1 +dqcom615 compare 12.1234 12.00000 -> 1 +dqcom616 compare 12.1234 12.000000 -> 1 +dqcom617 compare 12.1234 12.0000000 -> 1 +dqcom618 compare 12.1234 12.00000000 -> 1 +dqcom619 compare 12.1234 12.000000000 -> 1 +dqcom620 compare -12 -12.2345 -> 1 +dqcom621 compare -12.0 -12.2345 -> 1 +dqcom622 compare -12.00 -12.2345 -> 1 +dqcom623 compare -12.000 -12.2345 -> 1 +dqcom624 compare -12.0000 -12.2345 -> 1 +dqcom625 compare -12.00000 -12.2345 -> 1 +dqcom626 compare -12.000000 -12.2345 -> 1 +dqcom627 compare -12.0000000 -12.2345 -> 1 +dqcom628 compare -12.00000000 -12.2345 -> 1 +dqcom629 compare -12.000000000 -12.2345 -> 1 +dqcom630 compare -12.1234 -12 -> -1 +dqcom631 compare -12.1234 -12.0 -> -1 +dqcom632 compare -12.1234 -12.00 -> -1 +dqcom633 compare -12.1234 -12.000 -> -1 +dqcom634 compare -12.1234 -12.0000 -> -1 +dqcom635 compare -12.1234 -12.00000 -> -1 +dqcom636 compare -12.1234 -12.000000 -> -1 +dqcom637 compare -12.1234 -12.0000000 -> -1 +dqcom638 compare -12.1234 -12.00000000 -> -1 +dqcom639 compare -12.1234 -12.000000000 -> -1 + +-- extended zeros +dqcom640 compare 0 0 -> 0 +dqcom641 compare 0 -0 -> 0 +dqcom642 compare 0 -0.0 -> 0 +dqcom643 compare 0 0.0 -> 0 +dqcom644 compare -0 0 -> 0 +dqcom645 compare -0 -0 -> 0 +dqcom646 compare -0 -0.0 -> 0 +dqcom647 compare -0 0.0 -> 0 +dqcom648 compare 0.0 0 -> 0 +dqcom649 compare 0.0 -0 -> 0 +dqcom650 compare 0.0 -0.0 -> 0 +dqcom651 compare 0.0 0.0 -> 0 +dqcom652 compare -0.0 0 -> 0 +dqcom653 compare -0.0 -0 -> 0 +dqcom654 compare -0.0 -0.0 -> 0 +dqcom655 compare -0.0 0.0 -> 0 + +dqcom656 compare -0E1 0.0 -> 0 +dqcom657 compare -0E2 0.0 -> 0 +dqcom658 compare 0E1 0.0 -> 0 +dqcom659 compare 0E2 0.0 -> 0 +dqcom660 compare -0E1 0 -> 0 +dqcom661 compare -0E2 0 -> 0 +dqcom662 compare 0E1 0 -> 0 +dqcom663 compare 0E2 0 -> 0 +dqcom664 compare -0E1 -0E1 -> 0 +dqcom665 compare -0E2 -0E1 -> 0 +dqcom666 compare 0E1 -0E1 -> 0 +dqcom667 compare 0E2 -0E1 -> 0 +dqcom668 compare -0E1 -0E2 -> 0 +dqcom669 compare -0E2 -0E2 -> 0 +dqcom670 compare 0E1 -0E2 -> 0 +dqcom671 compare 0E2 -0E2 -> 0 +dqcom672 compare -0E1 0E1 -> 0 +dqcom673 compare -0E2 0E1 -> 0 +dqcom674 compare 0E1 0E1 -> 0 +dqcom675 compare 0E2 0E1 -> 0 +dqcom676 compare -0E1 0E2 -> 0 +dqcom677 compare -0E2 0E2 -> 0 +dqcom678 compare 0E1 0E2 -> 0 +dqcom679 compare 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +dqcom680 compare 12 12 -> 0 +dqcom681 compare 12 12.0 -> 0 +dqcom682 compare 12 12.00 -> 0 +dqcom683 compare 12 12.000 -> 0 +dqcom684 compare 12 12.0000 -> 0 +dqcom685 compare 12 12.00000 -> 0 +dqcom686 compare 12 12.000000 -> 0 +dqcom687 compare 12 12.0000000 -> 0 +dqcom688 compare 12 12.00000000 -> 0 +dqcom689 compare 12 12.000000000 -> 0 +dqcom690 compare 12 12 -> 0 +dqcom691 compare 12.0 12 -> 0 +dqcom692 compare 12.00 12 -> 0 +dqcom693 compare 12.000 12 -> 0 +dqcom694 compare 12.0000 12 -> 0 +dqcom695 compare 12.00000 12 -> 0 +dqcom696 compare 12.000000 12 -> 0 +dqcom697 compare 12.0000000 12 -> 0 +dqcom698 compare 12.00000000 12 -> 0 +dqcom699 compare 12.000000000 12 -> 0 + +-- first, second, & last digit +dqcom700 compare 1234567899999999999999999990123456 1234567899999999999999999990123455 -> 1 +dqcom701 compare 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 +dqcom702 compare 1234567899999999999999999990123456 1234567899999999999999999990123457 -> -1 +dqcom703 compare 1234567899999999999999999990123456 0234567899999999999999999990123456 -> 1 +dqcom704 compare 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 +dqcom705 compare 1234567899999999999999999990123456 2234567899999999999999999990123456 -> -1 +dqcom706 compare 1134567899999999999999999990123456 1034567899999999999999999990123456 -> 1 +dqcom707 compare 1134567899999999999999999990123456 1134567899999999999999999990123456 -> 0 +dqcom708 compare 1134567899999999999999999990123456 1234567899999999999999999990123456 -> -1 + +-- miscellaneous +dqcom721 compare 12345678000 1 -> 1 +dqcom722 compare 1 12345678000 -> -1 +dqcom723 compare 1234567800 1 -> 1 +dqcom724 compare 1 1234567800 -> -1 +dqcom725 compare 1234567890 1 -> 1 +dqcom726 compare 1 1234567890 -> -1 +dqcom727 compare 1234567891 1 -> 1 +dqcom728 compare 1 1234567891 -> -1 +dqcom729 compare 12345678901 1 -> 1 +dqcom730 compare 1 12345678901 -> -1 +dqcom731 compare 1234567896 1 -> 1 +dqcom732 compare 1 1234567896 -> -1 + +-- residue cases at lower precision +dqcom740 compare 1 0.9999999 -> 1 +dqcom741 compare 1 0.999999 -> 1 +dqcom742 compare 1 0.99999 -> 1 +dqcom743 compare 1 1.0000 -> 0 +dqcom744 compare 1 1.00001 -> -1 +dqcom745 compare 1 1.000001 -> -1 +dqcom746 compare 1 1.0000001 -> -1 +dqcom750 compare 0.9999999 1 -> -1 +dqcom751 compare 0.999999 1 -> -1 +dqcom752 compare 0.99999 1 -> -1 +dqcom753 compare 1.0000 1 -> 0 +dqcom754 compare 1.00001 1 -> 1 +dqcom755 compare 1.000001 1 -> 1 +dqcom756 compare 1.0000001 1 -> 1 + +-- Specials +dqcom780 compare Inf -Inf -> 1 +dqcom781 compare Inf -1000 -> 1 +dqcom782 compare Inf -1 -> 1 +dqcom783 compare Inf -0 -> 1 +dqcom784 compare Inf 0 -> 1 +dqcom785 compare Inf 1 -> 1 +dqcom786 compare Inf 1000 -> 1 +dqcom787 compare Inf Inf -> 0 +dqcom788 compare -1000 Inf -> -1 +dqcom789 compare -Inf Inf -> -1 +dqcom790 compare -1 Inf -> -1 +dqcom791 compare -0 Inf -> -1 +dqcom792 compare 0 Inf -> -1 +dqcom793 compare 1 Inf -> -1 +dqcom794 compare 1000 Inf -> -1 +dqcom795 compare Inf Inf -> 0 + +dqcom800 compare -Inf -Inf -> 0 +dqcom801 compare -Inf -1000 -> -1 +dqcom802 compare -Inf -1 -> -1 +dqcom803 compare -Inf -0 -> -1 +dqcom804 compare -Inf 0 -> -1 +dqcom805 compare -Inf 1 -> -1 +dqcom806 compare -Inf 1000 -> -1 +dqcom807 compare -Inf Inf -> -1 +dqcom808 compare -Inf -Inf -> 0 +dqcom809 compare -1000 -Inf -> 1 +dqcom810 compare -1 -Inf -> 1 +dqcom811 compare -0 -Inf -> 1 +dqcom812 compare 0 -Inf -> 1 +dqcom813 compare 1 -Inf -> 1 +dqcom814 compare 1000 -Inf -> 1 +dqcom815 compare Inf -Inf -> 1 + +dqcom821 compare NaN -Inf -> NaN +dqcom822 compare NaN -1000 -> NaN +dqcom823 compare NaN -1 -> NaN +dqcom824 compare NaN -0 -> NaN +dqcom825 compare NaN 0 -> NaN +dqcom826 compare NaN 1 -> NaN +dqcom827 compare NaN 1000 -> NaN +dqcom828 compare NaN Inf -> NaN +dqcom829 compare NaN NaN -> NaN +dqcom830 compare -Inf NaN -> NaN +dqcom831 compare -1000 NaN -> NaN +dqcom832 compare -1 NaN -> NaN +dqcom833 compare -0 NaN -> NaN +dqcom834 compare 0 NaN -> NaN +dqcom835 compare 1 NaN -> NaN +dqcom836 compare 1000 NaN -> NaN +dqcom837 compare Inf NaN -> NaN +dqcom838 compare -NaN -NaN -> -NaN +dqcom839 compare +NaN -NaN -> NaN +dqcom840 compare -NaN +NaN -> -NaN + +dqcom841 compare sNaN -Inf -> NaN Invalid_operation +dqcom842 compare sNaN -1000 -> NaN Invalid_operation +dqcom843 compare sNaN -1 -> NaN Invalid_operation +dqcom844 compare sNaN -0 -> NaN Invalid_operation +dqcom845 compare sNaN 0 -> NaN Invalid_operation +dqcom846 compare sNaN 1 -> NaN Invalid_operation +dqcom847 compare sNaN 1000 -> NaN Invalid_operation +dqcom848 compare sNaN NaN -> NaN Invalid_operation +dqcom849 compare sNaN sNaN -> NaN Invalid_operation +dqcom850 compare NaN sNaN -> NaN Invalid_operation +dqcom851 compare -Inf sNaN -> NaN Invalid_operation +dqcom852 compare -1000 sNaN -> NaN Invalid_operation +dqcom853 compare -1 sNaN -> NaN Invalid_operation +dqcom854 compare -0 sNaN -> NaN Invalid_operation +dqcom855 compare 0 sNaN -> NaN Invalid_operation +dqcom856 compare 1 sNaN -> NaN Invalid_operation +dqcom857 compare 1000 sNaN -> NaN Invalid_operation +dqcom858 compare Inf sNaN -> NaN Invalid_operation +dqcom859 compare NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqcom860 compare NaN9 -Inf -> NaN9 +dqcom861 compare NaN8 999 -> NaN8 +dqcom862 compare NaN77 Inf -> NaN77 +dqcom863 compare -NaN67 NaN5 -> -NaN67 +dqcom864 compare -Inf -NaN4 -> -NaN4 +dqcom865 compare -999 -NaN33 -> -NaN33 +dqcom866 compare Inf NaN2 -> NaN2 +dqcom867 compare -NaN41 -NaN42 -> -NaN41 +dqcom868 compare +NaN41 -NaN42 -> NaN41 +dqcom869 compare -NaN41 +NaN42 -> -NaN41 +dqcom870 compare +NaN41 +NaN42 -> NaN41 + +dqcom871 compare -sNaN99 -Inf -> -NaN99 Invalid_operation +dqcom872 compare sNaN98 -11 -> NaN98 Invalid_operation +dqcom873 compare sNaN97 NaN -> NaN97 Invalid_operation +dqcom874 compare sNaN16 sNaN94 -> NaN16 Invalid_operation +dqcom875 compare NaN85 sNaN83 -> NaN83 Invalid_operation +dqcom876 compare -Inf sNaN92 -> NaN92 Invalid_operation +dqcom877 compare 088 sNaN81 -> NaN81 Invalid_operation +dqcom878 compare Inf sNaN90 -> NaN90 Invalid_operation +dqcom879 compare NaN -sNaN89 -> -NaN89 Invalid_operation + +-- wide range +dqcom880 compare +1.23456789012345E-0 9E+6144 -> -1 +dqcom881 compare 9E+6144 +1.23456789012345E-0 -> 1 +dqcom882 compare +0.100 9E-6143 -> 1 +dqcom883 compare 9E-6143 +0.100 -> -1 +dqcom885 compare -1.23456789012345E-0 9E+6144 -> -1 +dqcom886 compare 9E+6144 -1.23456789012345E-0 -> 1 +dqcom887 compare -0.100 9E-6143 -> -1 +dqcom888 compare 9E-6143 -0.100 -> 1 + +-- signs +dqcom901 compare 1e+77 1e+11 -> 1 +dqcom902 compare 1e+77 -1e+11 -> 1 +dqcom903 compare -1e+77 1e+11 -> -1 +dqcom904 compare -1e+77 -1e+11 -> -1 +dqcom905 compare 1e-77 1e-11 -> -1 +dqcom906 compare 1e-77 -1e-11 -> 1 +dqcom907 compare -1e-77 1e-11 -> -1 +dqcom908 compare -1e-77 -1e-11 -> 1 + +-- full alignment range, both ways +dqcomp1001 compare 1 1.000000000000000000000000000000000 -> 0 +dqcomp1002 compare 1 1.00000000000000000000000000000000 -> 0 +dqcomp1003 compare 1 1.0000000000000000000000000000000 -> 0 +dqcomp1004 compare 1 1.000000000000000000000000000000 -> 0 +dqcomp1005 compare 1 1.00000000000000000000000000000 -> 0 +dqcomp1006 compare 1 1.0000000000000000000000000000 -> 0 +dqcomp1007 compare 1 1.000000000000000000000000000 -> 0 +dqcomp1008 compare 1 1.00000000000000000000000000 -> 0 +dqcomp1009 compare 1 1.0000000000000000000000000 -> 0 +dqcomp1010 compare 1 1.000000000000000000000000 -> 0 +dqcomp1011 compare 1 1.00000000000000000000000 -> 0 +dqcomp1012 compare 1 1.0000000000000000000000 -> 0 +dqcomp1013 compare 1 1.000000000000000000000 -> 0 +dqcomp1014 compare 1 1.00000000000000000000 -> 0 +dqcomp1015 compare 1 1.0000000000000000000 -> 0 +dqcomp1016 compare 1 1.000000000000000000 -> 0 +dqcomp1017 compare 1 1.00000000000000000 -> 0 +dqcomp1018 compare 1 1.0000000000000000 -> 0 +dqcomp1019 compare 1 1.000000000000000 -> 0 +dqcomp1020 compare 1 1.00000000000000 -> 0 +dqcomp1021 compare 1 1.0000000000000 -> 0 +dqcomp1022 compare 1 1.000000000000 -> 0 +dqcomp1023 compare 1 1.00000000000 -> 0 +dqcomp1024 compare 1 1.0000000000 -> 0 +dqcomp1025 compare 1 1.000000000 -> 0 +dqcomp1026 compare 1 1.00000000 -> 0 +dqcomp1027 compare 1 1.0000000 -> 0 +dqcomp1028 compare 1 1.000000 -> 0 +dqcomp1029 compare 1 1.00000 -> 0 +dqcomp1030 compare 1 1.0000 -> 0 +dqcomp1031 compare 1 1.000 -> 0 +dqcomp1032 compare 1 1.00 -> 0 +dqcomp1033 compare 1 1.0 -> 0 + +dqcomp1041 compare 1.000000000000000000000000000000000 1 -> 0 +dqcomp1042 compare 1.00000000000000000000000000000000 1 -> 0 +dqcomp1043 compare 1.0000000000000000000000000000000 1 -> 0 +dqcomp1044 compare 1.000000000000000000000000000000 1 -> 0 +dqcomp1045 compare 1.00000000000000000000000000000 1 -> 0 +dqcomp1046 compare 1.0000000000000000000000000000 1 -> 0 +dqcomp1047 compare 1.000000000000000000000000000 1 -> 0 +dqcomp1048 compare 1.00000000000000000000000000 1 -> 0 +dqcomp1049 compare 1.0000000000000000000000000 1 -> 0 +dqcomp1050 compare 1.000000000000000000000000 1 -> 0 +dqcomp1051 compare 1.00000000000000000000000 1 -> 0 +dqcomp1052 compare 1.0000000000000000000000 1 -> 0 +dqcomp1053 compare 1.000000000000000000000 1 -> 0 +dqcomp1054 compare 1.00000000000000000000 1 -> 0 +dqcomp1055 compare 1.0000000000000000000 1 -> 0 +dqcomp1056 compare 1.000000000000000000 1 -> 0 +dqcomp1057 compare 1.00000000000000000 1 -> 0 +dqcomp1058 compare 1.0000000000000000 1 -> 0 +dqcomp1059 compare 1.000000000000000 1 -> 0 +dqcomp1060 compare 1.00000000000000 1 -> 0 +dqcomp1061 compare 1.0000000000000 1 -> 0 +dqcomp1062 compare 1.000000000000 1 -> 0 +dqcomp1063 compare 1.00000000000 1 -> 0 +dqcomp1064 compare 1.0000000000 1 -> 0 +dqcomp1065 compare 1.000000000 1 -> 0 +dqcomp1066 compare 1.00000000 1 -> 0 +dqcomp1067 compare 1.0000000 1 -> 0 +dqcomp1068 compare 1.000000 1 -> 0 +dqcomp1069 compare 1.00000 1 -> 0 +dqcomp1070 compare 1.0000 1 -> 0 +dqcomp1071 compare 1.000 1 -> 0 +dqcomp1072 compare 1.00 1 -> 0 +dqcomp1073 compare 1.0 1 -> 0 + +-- check MSD always detected non-zero +dqcomp1080 compare 0 0.000000000000000000000000000000000 -> 0 +dqcomp1081 compare 0 1.000000000000000000000000000000000 -> -1 +dqcomp1082 compare 0 2.000000000000000000000000000000000 -> -1 +dqcomp1083 compare 0 3.000000000000000000000000000000000 -> -1 +dqcomp1084 compare 0 4.000000000000000000000000000000000 -> -1 +dqcomp1085 compare 0 5.000000000000000000000000000000000 -> -1 +dqcomp1086 compare 0 6.000000000000000000000000000000000 -> -1 +dqcomp1087 compare 0 7.000000000000000000000000000000000 -> -1 +dqcomp1088 compare 0 8.000000000000000000000000000000000 -> -1 +dqcomp1089 compare 0 9.000000000000000000000000000000000 -> -1 +dqcomp1090 compare 0.000000000000000000000000000000000 0 -> 0 +dqcomp1091 compare 1.000000000000000000000000000000000 0 -> 1 +dqcomp1092 compare 2.000000000000000000000000000000000 0 -> 1 +dqcomp1093 compare 3.000000000000000000000000000000000 0 -> 1 +dqcomp1094 compare 4.000000000000000000000000000000000 0 -> 1 +dqcomp1095 compare 5.000000000000000000000000000000000 0 -> 1 +dqcomp1096 compare 6.000000000000000000000000000000000 0 -> 1 +dqcomp1097 compare 7.000000000000000000000000000000000 0 -> 1 +dqcomp1098 compare 8.000000000000000000000000000000000 0 -> 1 +dqcomp1099 compare 9.000000000000000000000000000000000 0 -> 1 + +-- Null tests +dqcom990 compare 10 # -> NaN Invalid_operation +dqcom991 compare # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqCompareSig.decTest b/Lib/test/decimaltestdata/dqCompareSig.decTest index c068d471c1b..795f0916dde 100644 --- a/Lib/test/decimaltestdata/dqCompareSig.decTest +++ b/Lib/test/decimaltestdata/dqCompareSig.decTest @@ -1,647 +1,647 @@ ------------------------------------------------------------------------- --- dqCompareSig.decTest -- decQuad comparison; all NaNs signal -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqcms001 comparesig -2 -2 -> 0 -dqcms002 comparesig -2 -1 -> -1 -dqcms003 comparesig -2 0 -> -1 -dqcms004 comparesig -2 1 -> -1 -dqcms005 comparesig -2 2 -> -1 -dqcms006 comparesig -1 -2 -> 1 -dqcms007 comparesig -1 -1 -> 0 -dqcms008 comparesig -1 0 -> -1 -dqcms009 comparesig -1 1 -> -1 -dqcms010 comparesig -1 2 -> -1 -dqcms011 comparesig 0 -2 -> 1 -dqcms012 comparesig 0 -1 -> 1 -dqcms013 comparesig 0 0 -> 0 -dqcms014 comparesig 0 1 -> -1 -dqcms015 comparesig 0 2 -> -1 -dqcms016 comparesig 1 -2 -> 1 -dqcms017 comparesig 1 -1 -> 1 -dqcms018 comparesig 1 0 -> 1 -dqcms019 comparesig 1 1 -> 0 -dqcms020 comparesig 1 2 -> -1 -dqcms021 comparesig 2 -2 -> 1 -dqcms022 comparesig 2 -1 -> 1 -dqcms023 comparesig 2 0 -> 1 -dqcms025 comparesig 2 1 -> 1 -dqcms026 comparesig 2 2 -> 0 - -dqcms031 comparesig -20 -20 -> 0 -dqcms032 comparesig -20 -10 -> -1 -dqcms033 comparesig -20 00 -> -1 -dqcms034 comparesig -20 10 -> -1 -dqcms035 comparesig -20 20 -> -1 -dqcms036 comparesig -10 -20 -> 1 -dqcms037 comparesig -10 -10 -> 0 -dqcms038 comparesig -10 00 -> -1 -dqcms039 comparesig -10 10 -> -1 -dqcms040 comparesig -10 20 -> -1 -dqcms041 comparesig 00 -20 -> 1 -dqcms042 comparesig 00 -10 -> 1 -dqcms043 comparesig 00 00 -> 0 -dqcms044 comparesig 00 10 -> -1 -dqcms045 comparesig 00 20 -> -1 -dqcms046 comparesig 10 -20 -> 1 -dqcms047 comparesig 10 -10 -> 1 -dqcms048 comparesig 10 00 -> 1 -dqcms049 comparesig 10 10 -> 0 -dqcms050 comparesig 10 20 -> -1 -dqcms051 comparesig 20 -20 -> 1 -dqcms052 comparesig 20 -10 -> 1 -dqcms053 comparesig 20 00 -> 1 -dqcms055 comparesig 20 10 -> 1 -dqcms056 comparesig 20 20 -> 0 - -dqcms061 comparesig -2.0 -2.0 -> 0 -dqcms062 comparesig -2.0 -1.0 -> -1 -dqcms063 comparesig -2.0 0.0 -> -1 -dqcms064 comparesig -2.0 1.0 -> -1 -dqcms065 comparesig -2.0 2.0 -> -1 -dqcms066 comparesig -1.0 -2.0 -> 1 -dqcms067 comparesig -1.0 -1.0 -> 0 -dqcms068 comparesig -1.0 0.0 -> -1 -dqcms069 comparesig -1.0 1.0 -> -1 -dqcms070 comparesig -1.0 2.0 -> -1 -dqcms071 comparesig 0.0 -2.0 -> 1 -dqcms072 comparesig 0.0 -1.0 -> 1 -dqcms073 comparesig 0.0 0.0 -> 0 -dqcms074 comparesig 0.0 1.0 -> -1 -dqcms075 comparesig 0.0 2.0 -> -1 -dqcms076 comparesig 1.0 -2.0 -> 1 -dqcms077 comparesig 1.0 -1.0 -> 1 -dqcms078 comparesig 1.0 0.0 -> 1 -dqcms079 comparesig 1.0 1.0 -> 0 -dqcms080 comparesig 1.0 2.0 -> -1 -dqcms081 comparesig 2.0 -2.0 -> 1 -dqcms082 comparesig 2.0 -1.0 -> 1 -dqcms083 comparesig 2.0 0.0 -> 1 -dqcms085 comparesig 2.0 1.0 -> 1 -dqcms086 comparesig 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -dqcms090 comparesig 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 0 -dqcms091 comparesig -9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> -1 -dqcms092 comparesig 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 1 -dqcms093 comparesig -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0 - --- some differing length/exponent cases -dqcms100 comparesig 7.0 7.0 -> 0 -dqcms101 comparesig 7.0 7 -> 0 -dqcms102 comparesig 7 7.0 -> 0 -dqcms103 comparesig 7E+0 7.0 -> 0 -dqcms104 comparesig 70E-1 7.0 -> 0 -dqcms105 comparesig 0.7E+1 7 -> 0 -dqcms106 comparesig 70E-1 7 -> 0 -dqcms107 comparesig 7.0 7E+0 -> 0 -dqcms108 comparesig 7.0 70E-1 -> 0 -dqcms109 comparesig 7 0.7E+1 -> 0 -dqcms110 comparesig 7 70E-1 -> 0 - -dqcms120 comparesig 8.0 7.0 -> 1 -dqcms121 comparesig 8.0 7 -> 1 -dqcms122 comparesig 8 7.0 -> 1 -dqcms123 comparesig 8E+0 7.0 -> 1 -dqcms124 comparesig 80E-1 7.0 -> 1 -dqcms125 comparesig 0.8E+1 7 -> 1 -dqcms126 comparesig 80E-1 7 -> 1 -dqcms127 comparesig 8.0 7E+0 -> 1 -dqcms128 comparesig 8.0 70E-1 -> 1 -dqcms129 comparesig 8 0.7E+1 -> 1 -dqcms130 comparesig 8 70E-1 -> 1 - -dqcms140 comparesig 8.0 9.0 -> -1 -dqcms141 comparesig 8.0 9 -> -1 -dqcms142 comparesig 8 9.0 -> -1 -dqcms143 comparesig 8E+0 9.0 -> -1 -dqcms144 comparesig 80E-1 9.0 -> -1 -dqcms145 comparesig 0.8E+1 9 -> -1 -dqcms146 comparesig 80E-1 9 -> -1 -dqcms147 comparesig 8.0 9E+0 -> -1 -dqcms148 comparesig 8.0 90E-1 -> -1 -dqcms149 comparesig 8 0.9E+1 -> -1 -dqcms150 comparesig 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -dqcms200 comparesig -7.0 7.0 -> -1 -dqcms201 comparesig -7.0 7 -> -1 -dqcms202 comparesig -7 7.0 -> -1 -dqcms203 comparesig -7E+0 7.0 -> -1 -dqcms204 comparesig -70E-1 7.0 -> -1 -dqcms205 comparesig -0.7E+1 7 -> -1 -dqcms206 comparesig -70E-1 7 -> -1 -dqcms207 comparesig -7.0 7E+0 -> -1 -dqcms208 comparesig -7.0 70E-1 -> -1 -dqcms209 comparesig -7 0.7E+1 -> -1 -dqcms210 comparesig -7 70E-1 -> -1 - -dqcms220 comparesig -8.0 7.0 -> -1 -dqcms221 comparesig -8.0 7 -> -1 -dqcms222 comparesig -8 7.0 -> -1 -dqcms223 comparesig -8E+0 7.0 -> -1 -dqcms224 comparesig -80E-1 7.0 -> -1 -dqcms225 comparesig -0.8E+1 7 -> -1 -dqcms226 comparesig -80E-1 7 -> -1 -dqcms227 comparesig -8.0 7E+0 -> -1 -dqcms228 comparesig -8.0 70E-1 -> -1 -dqcms229 comparesig -8 0.7E+1 -> -1 -dqcms230 comparesig -8 70E-1 -> -1 - -dqcms240 comparesig -8.0 9.0 -> -1 -dqcms241 comparesig -8.0 9 -> -1 -dqcms242 comparesig -8 9.0 -> -1 -dqcms243 comparesig -8E+0 9.0 -> -1 -dqcms244 comparesig -80E-1 9.0 -> -1 -dqcms245 comparesig -0.8E+1 9 -> -1 -dqcms246 comparesig -80E-1 9 -> -1 -dqcms247 comparesig -8.0 9E+0 -> -1 -dqcms248 comparesig -8.0 90E-1 -> -1 -dqcms249 comparesig -8 0.9E+1 -> -1 -dqcms250 comparesig -8 90E-1 -> -1 - --- and again, with sign changes +- .. -dqcms300 comparesig 7.0 -7.0 -> 1 -dqcms301 comparesig 7.0 -7 -> 1 -dqcms302 comparesig 7 -7.0 -> 1 -dqcms303 comparesig 7E+0 -7.0 -> 1 -dqcms304 comparesig 70E-1 -7.0 -> 1 -dqcms305 comparesig .7E+1 -7 -> 1 -dqcms306 comparesig 70E-1 -7 -> 1 -dqcms307 comparesig 7.0 -7E+0 -> 1 -dqcms308 comparesig 7.0 -70E-1 -> 1 -dqcms309 comparesig 7 -.7E+1 -> 1 -dqcms310 comparesig 7 -70E-1 -> 1 - -dqcms320 comparesig 8.0 -7.0 -> 1 -dqcms321 comparesig 8.0 -7 -> 1 -dqcms322 comparesig 8 -7.0 -> 1 -dqcms323 comparesig 8E+0 -7.0 -> 1 -dqcms324 comparesig 80E-1 -7.0 -> 1 -dqcms325 comparesig .8E+1 -7 -> 1 -dqcms326 comparesig 80E-1 -7 -> 1 -dqcms327 comparesig 8.0 -7E+0 -> 1 -dqcms328 comparesig 8.0 -70E-1 -> 1 -dqcms329 comparesig 8 -.7E+1 -> 1 -dqcms330 comparesig 8 -70E-1 -> 1 - -dqcms340 comparesig 8.0 -9.0 -> 1 -dqcms341 comparesig 8.0 -9 -> 1 -dqcms342 comparesig 8 -9.0 -> 1 -dqcms343 comparesig 8E+0 -9.0 -> 1 -dqcms344 comparesig 80E-1 -9.0 -> 1 -dqcms345 comparesig .8E+1 -9 -> 1 -dqcms346 comparesig 80E-1 -9 -> 1 -dqcms347 comparesig 8.0 -9E+0 -> 1 -dqcms348 comparesig 8.0 -90E-1 -> 1 -dqcms349 comparesig 8 -.9E+1 -> 1 -dqcms350 comparesig 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -dqcms400 comparesig -7.0 -7.0 -> 0 -dqcms401 comparesig -7.0 -7 -> 0 -dqcms402 comparesig -7 -7.0 -> 0 -dqcms403 comparesig -7E+0 -7.0 -> 0 -dqcms404 comparesig -70E-1 -7.0 -> 0 -dqcms405 comparesig -.7E+1 -7 -> 0 -dqcms406 comparesig -70E-1 -7 -> 0 -dqcms407 comparesig -7.0 -7E+0 -> 0 -dqcms408 comparesig -7.0 -70E-1 -> 0 -dqcms409 comparesig -7 -.7E+1 -> 0 -dqcms410 comparesig -7 -70E-1 -> 0 - -dqcms420 comparesig -8.0 -7.0 -> -1 -dqcms421 comparesig -8.0 -7 -> -1 -dqcms422 comparesig -8 -7.0 -> -1 -dqcms423 comparesig -8E+0 -7.0 -> -1 -dqcms424 comparesig -80E-1 -7.0 -> -1 -dqcms425 comparesig -.8E+1 -7 -> -1 -dqcms426 comparesig -80E-1 -7 -> -1 -dqcms427 comparesig -8.0 -7E+0 -> -1 -dqcms428 comparesig -8.0 -70E-1 -> -1 -dqcms429 comparesig -8 -.7E+1 -> -1 -dqcms430 comparesig -8 -70E-1 -> -1 - -dqcms440 comparesig -8.0 -9.0 -> 1 -dqcms441 comparesig -8.0 -9 -> 1 -dqcms442 comparesig -8 -9.0 -> 1 -dqcms443 comparesig -8E+0 -9.0 -> 1 -dqcms444 comparesig -80E-1 -9.0 -> 1 -dqcms445 comparesig -.8E+1 -9 -> 1 -dqcms446 comparesig -80E-1 -9 -> 1 -dqcms447 comparesig -8.0 -9E+0 -> 1 -dqcms448 comparesig -8.0 -90E-1 -> 1 -dqcms449 comparesig -8 -.9E+1 -> 1 -dqcms450 comparesig -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -dqcms473 comparesig 123.9999999999999999994560000000000E-89 123.999999999999999999456E-89 -> 0 -dqcms474 comparesig 123.999999999999999999456000000000E+89 123.999999999999999999456E+89 -> 0 -dqcms475 comparesig 123.99999999999999999945600000000E-89 123.999999999999999999456E-89 -> 0 -dqcms476 comparesig 123.9999999999999999994560000000E+89 123.999999999999999999456E+89 -> 0 -dqcms477 comparesig 123.999999999999999999456000000E-89 123.999999999999999999456E-89 -> 0 -dqcms478 comparesig 123.99999999999999999945600000E+89 123.999999999999999999456E+89 -> 0 -dqcms479 comparesig 123.9999999999999999994560000E-89 123.999999999999999999456E-89 -> 0 -dqcms480 comparesig 123.999999999999999999456000E+89 123.999999999999999999456E+89 -> 0 -dqcms481 comparesig 123.99999999999999999945600E-89 123.999999999999999999456E-89 -> 0 -dqcms482 comparesig 123.9999999999999999994560E+89 123.999999999999999999456E+89 -> 0 -dqcms483 comparesig 123.999999999999999999456E-89 123.999999999999999999456E-89 -> 0 -dqcms487 comparesig 123.999999999999999999456E+89 123.9999999999999999994560000000000E+89 -> 0 -dqcms488 comparesig 123.999999999999999999456E-89 123.999999999999999999456000000000E-89 -> 0 -dqcms489 comparesig 123.999999999999999999456E+89 123.99999999999999999945600000000E+89 -> 0 -dqcms490 comparesig 123.999999999999999999456E-89 123.9999999999999999994560000000E-89 -> 0 -dqcms491 comparesig 123.999999999999999999456E+89 123.999999999999999999456000000E+89 -> 0 -dqcms492 comparesig 123.999999999999999999456E-89 123.99999999999999999945600000E-89 -> 0 -dqcms493 comparesig 123.999999999999999999456E+89 123.9999999999999999994560000E+89 -> 0 -dqcms494 comparesig 123.999999999999999999456E-89 123.999999999999999999456000E-89 -> 0 -dqcms495 comparesig 123.999999999999999999456E+89 123.99999999999999999945600E+89 -> 0 -dqcms496 comparesig 123.999999999999999999456E-89 123.9999999999999999994560E-89 -> 0 -dqcms497 comparesig 123.999999999999999999456E+89 123.999999999999999999456E+89 -> 0 - --- wide-ranging, around precision; signs equal -dqcms500 comparesig 1 1E-15 -> 1 -dqcms501 comparesig 1 1E-14 -> 1 -dqcms502 comparesig 1 1E-13 -> 1 -dqcms503 comparesig 1 1E-12 -> 1 -dqcms504 comparesig 1 1E-11 -> 1 -dqcms505 comparesig 1 1E-10 -> 1 -dqcms506 comparesig 1 1E-9 -> 1 -dqcms507 comparesig 1 1E-8 -> 1 -dqcms508 comparesig 1 1E-7 -> 1 -dqcms509 comparesig 1 1E-6 -> 1 -dqcms510 comparesig 1 1E-5 -> 1 -dqcms511 comparesig 1 1E-4 -> 1 -dqcms512 comparesig 1 1E-3 -> 1 -dqcms513 comparesig 1 1E-2 -> 1 -dqcms514 comparesig 1 1E-1 -> 1 -dqcms515 comparesig 1 1E-0 -> 0 -dqcms516 comparesig 1 1E+1 -> -1 -dqcms517 comparesig 1 1E+2 -> -1 -dqcms518 comparesig 1 1E+3 -> -1 -dqcms519 comparesig 1 1E+4 -> -1 -dqcms521 comparesig 1 1E+5 -> -1 -dqcms522 comparesig 1 1E+6 -> -1 -dqcms523 comparesig 1 1E+7 -> -1 -dqcms524 comparesig 1 1E+8 -> -1 -dqcms525 comparesig 1 1E+9 -> -1 -dqcms526 comparesig 1 1E+10 -> -1 -dqcms527 comparesig 1 1E+11 -> -1 -dqcms528 comparesig 1 1E+12 -> -1 -dqcms529 comparesig 1 1E+13 -> -1 -dqcms530 comparesig 1 1E+14 -> -1 -dqcms531 comparesig 1 1E+15 -> -1 --- LR swap -dqcms540 comparesig 1E-15 1 -> -1 -dqcms541 comparesig 1E-14 1 -> -1 -dqcms542 comparesig 1E-13 1 -> -1 -dqcms543 comparesig 1E-12 1 -> -1 -dqcms544 comparesig 1E-11 1 -> -1 -dqcms545 comparesig 1E-10 1 -> -1 -dqcms546 comparesig 1E-9 1 -> -1 -dqcms547 comparesig 1E-8 1 -> -1 -dqcms548 comparesig 1E-7 1 -> -1 -dqcms549 comparesig 1E-6 1 -> -1 -dqcms550 comparesig 1E-5 1 -> -1 -dqcms551 comparesig 1E-4 1 -> -1 -dqcms552 comparesig 1E-3 1 -> -1 -dqcms553 comparesig 1E-2 1 -> -1 -dqcms554 comparesig 1E-1 1 -> -1 -dqcms555 comparesig 1E-0 1 -> 0 -dqcms556 comparesig 1E+1 1 -> 1 -dqcms557 comparesig 1E+2 1 -> 1 -dqcms558 comparesig 1E+3 1 -> 1 -dqcms559 comparesig 1E+4 1 -> 1 -dqcms561 comparesig 1E+5 1 -> 1 -dqcms562 comparesig 1E+6 1 -> 1 -dqcms563 comparesig 1E+7 1 -> 1 -dqcms564 comparesig 1E+8 1 -> 1 -dqcms565 comparesig 1E+9 1 -> 1 -dqcms566 comparesig 1E+10 1 -> 1 -dqcms567 comparesig 1E+11 1 -> 1 -dqcms568 comparesig 1E+12 1 -> 1 -dqcms569 comparesig 1E+13 1 -> 1 -dqcms570 comparesig 1E+14 1 -> 1 -dqcms571 comparesig 1E+15 1 -> 1 --- similar with a useful coefficient, one side only -dqcms580 comparesig 0.000000987654321 1E-15 -> 1 -dqcms581 comparesig 0.000000987654321 1E-14 -> 1 -dqcms582 comparesig 0.000000987654321 1E-13 -> 1 -dqcms583 comparesig 0.000000987654321 1E-12 -> 1 -dqcms584 comparesig 0.000000987654321 1E-11 -> 1 -dqcms585 comparesig 0.000000987654321 1E-10 -> 1 -dqcms586 comparesig 0.000000987654321 1E-9 -> 1 -dqcms587 comparesig 0.000000987654321 1E-8 -> 1 -dqcms588 comparesig 0.000000987654321 1E-7 -> 1 -dqcms589 comparesig 0.000000987654321 1E-6 -> -1 -dqcms590 comparesig 0.000000987654321 1E-5 -> -1 -dqcms591 comparesig 0.000000987654321 1E-4 -> -1 -dqcms592 comparesig 0.000000987654321 1E-3 -> -1 -dqcms593 comparesig 0.000000987654321 1E-2 -> -1 -dqcms594 comparesig 0.000000987654321 1E-1 -> -1 -dqcms595 comparesig 0.000000987654321 1E-0 -> -1 -dqcms596 comparesig 0.000000987654321 1E+1 -> -1 -dqcms597 comparesig 0.000000987654321 1E+2 -> -1 -dqcms598 comparesig 0.000000987654321 1E+3 -> -1 -dqcms599 comparesig 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -dqcms600 comparesig 12 12.2345 -> -1 -dqcms601 comparesig 12.0 12.2345 -> -1 -dqcms602 comparesig 12.00 12.2345 -> -1 -dqcms603 comparesig 12.000 12.2345 -> -1 -dqcms604 comparesig 12.0000 12.2345 -> -1 -dqcms605 comparesig 12.00000 12.2345 -> -1 -dqcms606 comparesig 12.000000 12.2345 -> -1 -dqcms607 comparesig 12.0000000 12.2345 -> -1 -dqcms608 comparesig 12.00000000 12.2345 -> -1 -dqcms609 comparesig 12.000000000 12.2345 -> -1 -dqcms610 comparesig 12.1234 12 -> 1 -dqcms611 comparesig 12.1234 12.0 -> 1 -dqcms612 comparesig 12.1234 12.00 -> 1 -dqcms613 comparesig 12.1234 12.000 -> 1 -dqcms614 comparesig 12.1234 12.0000 -> 1 -dqcms615 comparesig 12.1234 12.00000 -> 1 -dqcms616 comparesig 12.1234 12.000000 -> 1 -dqcms617 comparesig 12.1234 12.0000000 -> 1 -dqcms618 comparesig 12.1234 12.00000000 -> 1 -dqcms619 comparesig 12.1234 12.000000000 -> 1 -dqcms620 comparesig -12 -12.2345 -> 1 -dqcms621 comparesig -12.0 -12.2345 -> 1 -dqcms622 comparesig -12.00 -12.2345 -> 1 -dqcms623 comparesig -12.000 -12.2345 -> 1 -dqcms624 comparesig -12.0000 -12.2345 -> 1 -dqcms625 comparesig -12.00000 -12.2345 -> 1 -dqcms626 comparesig -12.000000 -12.2345 -> 1 -dqcms627 comparesig -12.0000000 -12.2345 -> 1 -dqcms628 comparesig -12.00000000 -12.2345 -> 1 -dqcms629 comparesig -12.000000000 -12.2345 -> 1 -dqcms630 comparesig -12.1234 -12 -> -1 -dqcms631 comparesig -12.1234 -12.0 -> -1 -dqcms632 comparesig -12.1234 -12.00 -> -1 -dqcms633 comparesig -12.1234 -12.000 -> -1 -dqcms634 comparesig -12.1234 -12.0000 -> -1 -dqcms635 comparesig -12.1234 -12.00000 -> -1 -dqcms636 comparesig -12.1234 -12.000000 -> -1 -dqcms637 comparesig -12.1234 -12.0000000 -> -1 -dqcms638 comparesig -12.1234 -12.00000000 -> -1 -dqcms639 comparesig -12.1234 -12.000000000 -> -1 - --- extended zeros -dqcms640 comparesig 0 0 -> 0 -dqcms641 comparesig 0 -0 -> 0 -dqcms642 comparesig 0 -0.0 -> 0 -dqcms643 comparesig 0 0.0 -> 0 -dqcms644 comparesig -0 0 -> 0 -dqcms645 comparesig -0 -0 -> 0 -dqcms646 comparesig -0 -0.0 -> 0 -dqcms647 comparesig -0 0.0 -> 0 -dqcms648 comparesig 0.0 0 -> 0 -dqcms649 comparesig 0.0 -0 -> 0 -dqcms650 comparesig 0.0 -0.0 -> 0 -dqcms651 comparesig 0.0 0.0 -> 0 -dqcms652 comparesig -0.0 0 -> 0 -dqcms653 comparesig -0.0 -0 -> 0 -dqcms654 comparesig -0.0 -0.0 -> 0 -dqcms655 comparesig -0.0 0.0 -> 0 - -dqcms656 comparesig -0E1 0.0 -> 0 -dqcms657 comparesig -0E2 0.0 -> 0 -dqcms658 comparesig 0E1 0.0 -> 0 -dqcms659 comparesig 0E2 0.0 -> 0 -dqcms660 comparesig -0E1 0 -> 0 -dqcms661 comparesig -0E2 0 -> 0 -dqcms662 comparesig 0E1 0 -> 0 -dqcms663 comparesig 0E2 0 -> 0 -dqcms664 comparesig -0E1 -0E1 -> 0 -dqcms665 comparesig -0E2 -0E1 -> 0 -dqcms666 comparesig 0E1 -0E1 -> 0 -dqcms667 comparesig 0E2 -0E1 -> 0 -dqcms668 comparesig -0E1 -0E2 -> 0 -dqcms669 comparesig -0E2 -0E2 -> 0 -dqcms670 comparesig 0E1 -0E2 -> 0 -dqcms671 comparesig 0E2 -0E2 -> 0 -dqcms672 comparesig -0E1 0E1 -> 0 -dqcms673 comparesig -0E2 0E1 -> 0 -dqcms674 comparesig 0E1 0E1 -> 0 -dqcms675 comparesig 0E2 0E1 -> 0 -dqcms676 comparesig -0E1 0E2 -> 0 -dqcms677 comparesig -0E2 0E2 -> 0 -dqcms678 comparesig 0E1 0E2 -> 0 -dqcms679 comparesig 0E2 0E2 -> 0 - --- trailing zeros; unit-y -dqcms680 comparesig 12 12 -> 0 -dqcms681 comparesig 12 12.0 -> 0 -dqcms682 comparesig 12 12.00 -> 0 -dqcms683 comparesig 12 12.000 -> 0 -dqcms684 comparesig 12 12.0000 -> 0 -dqcms685 comparesig 12 12.00000 -> 0 -dqcms686 comparesig 12 12.000000 -> 0 -dqcms687 comparesig 12 12.0000000 -> 0 -dqcms688 comparesig 12 12.00000000 -> 0 -dqcms689 comparesig 12 12.000000000 -> 0 -dqcms690 comparesig 12 12 -> 0 -dqcms691 comparesig 12.0 12 -> 0 -dqcms692 comparesig 12.00 12 -> 0 -dqcms693 comparesig 12.000 12 -> 0 -dqcms694 comparesig 12.0000 12 -> 0 -dqcms695 comparesig 12.00000 12 -> 0 -dqcms696 comparesig 12.000000 12 -> 0 -dqcms697 comparesig 12.0000000 12 -> 0 -dqcms698 comparesig 12.00000000 12 -> 0 -dqcms699 comparesig 12.000000000 12 -> 0 - --- first, second, & last digit -dqcms700 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123455 -> 1 -dqcms701 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 -dqcms702 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123457 -> -1 -dqcms703 comparesig 1234567899999999999999999990123456 0234567899999999999999999990123456 -> 1 -dqcms704 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 -dqcms705 comparesig 1234567899999999999999999990123456 2234567899999999999999999990123456 -> -1 -dqcms706 comparesig 1134567899999999999999999990123456 1034567899999999999999999990123456 -> 1 -dqcms707 comparesig 1134567899999999999999999990123456 1134567899999999999999999990123456 -> 0 -dqcms708 comparesig 1134567899999999999999999990123456 1234567899999999999999999990123456 -> -1 - --- miscellaneous -dqcms721 comparesig 12345678000 1 -> 1 -dqcms722 comparesig 1 12345678000 -> -1 -dqcms723 comparesig 1234567800 1 -> 1 -dqcms724 comparesig 1 1234567800 -> -1 -dqcms725 comparesig 1234567890 1 -> 1 -dqcms726 comparesig 1 1234567890 -> -1 -dqcms727 comparesig 1234567891 1 -> 1 -dqcms728 comparesig 1 1234567891 -> -1 -dqcms729 comparesig 12345678901 1 -> 1 -dqcms730 comparesig 1 12345678901 -> -1 -dqcms731 comparesig 1234567896 1 -> 1 -dqcms732 comparesig 1 1234567896 -> -1 - --- residue cases at lower precision -dqcms740 comparesig 1 0.9999999 -> 1 -dqcms741 comparesig 1 0.999999 -> 1 -dqcms742 comparesig 1 0.99999 -> 1 -dqcms743 comparesig 1 1.0000 -> 0 -dqcms744 comparesig 1 1.00001 -> -1 -dqcms745 comparesig 1 1.000001 -> -1 -dqcms746 comparesig 1 1.0000001 -> -1 -dqcms750 comparesig 0.9999999 1 -> -1 -dqcms751 comparesig 0.999999 1 -> -1 -dqcms752 comparesig 0.99999 1 -> -1 -dqcms753 comparesig 1.0000 1 -> 0 -dqcms754 comparesig 1.00001 1 -> 1 -dqcms755 comparesig 1.000001 1 -> 1 -dqcms756 comparesig 1.0000001 1 -> 1 - --- Specials -dqcms780 comparesig Inf -Inf -> 1 -dqcms781 comparesig Inf -1000 -> 1 -dqcms782 comparesig Inf -1 -> 1 -dqcms783 comparesig Inf -0 -> 1 -dqcms784 comparesig Inf 0 -> 1 -dqcms785 comparesig Inf 1 -> 1 -dqcms786 comparesig Inf 1000 -> 1 -dqcms787 comparesig Inf Inf -> 0 -dqcms788 comparesig -1000 Inf -> -1 -dqcms789 comparesig -Inf Inf -> -1 -dqcms790 comparesig -1 Inf -> -1 -dqcms791 comparesig -0 Inf -> -1 -dqcms792 comparesig 0 Inf -> -1 -dqcms793 comparesig 1 Inf -> -1 -dqcms794 comparesig 1000 Inf -> -1 -dqcms795 comparesig Inf Inf -> 0 - -dqcms800 comparesig -Inf -Inf -> 0 -dqcms801 comparesig -Inf -1000 -> -1 -dqcms802 comparesig -Inf -1 -> -1 -dqcms803 comparesig -Inf -0 -> -1 -dqcms804 comparesig -Inf 0 -> -1 -dqcms805 comparesig -Inf 1 -> -1 -dqcms806 comparesig -Inf 1000 -> -1 -dqcms807 comparesig -Inf Inf -> -1 -dqcms808 comparesig -Inf -Inf -> 0 -dqcms809 comparesig -1000 -Inf -> 1 -dqcms810 comparesig -1 -Inf -> 1 -dqcms811 comparesig -0 -Inf -> 1 -dqcms812 comparesig 0 -Inf -> 1 -dqcms813 comparesig 1 -Inf -> 1 -dqcms814 comparesig 1000 -Inf -> 1 -dqcms815 comparesig Inf -Inf -> 1 - -dqcms821 comparesig NaN -Inf -> NaN Invalid_operation -dqcms822 comparesig NaN -1000 -> NaN Invalid_operation -dqcms823 comparesig NaN -1 -> NaN Invalid_operation -dqcms824 comparesig NaN -0 -> NaN Invalid_operation -dqcms825 comparesig NaN 0 -> NaN Invalid_operation -dqcms826 comparesig NaN 1 -> NaN Invalid_operation -dqcms827 comparesig NaN 1000 -> NaN Invalid_operation -dqcms828 comparesig NaN Inf -> NaN Invalid_operation -dqcms829 comparesig NaN NaN -> NaN Invalid_operation -dqcms830 comparesig -Inf NaN -> NaN Invalid_operation -dqcms831 comparesig -1000 NaN -> NaN Invalid_operation -dqcms832 comparesig -1 NaN -> NaN Invalid_operation -dqcms833 comparesig -0 NaN -> NaN Invalid_operation -dqcms834 comparesig 0 NaN -> NaN Invalid_operation -dqcms835 comparesig 1 NaN -> NaN Invalid_operation -dqcms836 comparesig 1000 NaN -> NaN Invalid_operation -dqcms837 comparesig Inf NaN -> NaN Invalid_operation -dqcms838 comparesig -NaN -NaN -> -NaN Invalid_operation -dqcms839 comparesig +NaN -NaN -> NaN Invalid_operation -dqcms840 comparesig -NaN +NaN -> -NaN Invalid_operation - -dqcms841 comparesig sNaN -Inf -> NaN Invalid_operation -dqcms842 comparesig sNaN -1000 -> NaN Invalid_operation -dqcms843 comparesig sNaN -1 -> NaN Invalid_operation -dqcms844 comparesig sNaN -0 -> NaN Invalid_operation -dqcms845 comparesig sNaN 0 -> NaN Invalid_operation -dqcms846 comparesig sNaN 1 -> NaN Invalid_operation -dqcms847 comparesig sNaN 1000 -> NaN Invalid_operation -dqcms848 comparesig sNaN NaN -> NaN Invalid_operation -dqcms849 comparesig sNaN sNaN -> NaN Invalid_operation -dqcms850 comparesig NaN sNaN -> NaN Invalid_operation -dqcms851 comparesig -Inf sNaN -> NaN Invalid_operation -dqcms852 comparesig -1000 sNaN -> NaN Invalid_operation -dqcms853 comparesig -1 sNaN -> NaN Invalid_operation -dqcms854 comparesig -0 sNaN -> NaN Invalid_operation -dqcms855 comparesig 0 sNaN -> NaN Invalid_operation -dqcms856 comparesig 1 sNaN -> NaN Invalid_operation -dqcms857 comparesig 1000 sNaN -> NaN Invalid_operation -dqcms858 comparesig Inf sNaN -> NaN Invalid_operation -dqcms859 comparesig NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqcms860 comparesig NaN9 -Inf -> NaN9 Invalid_operation -dqcms861 comparesig NaN8 999 -> NaN8 Invalid_operation -dqcms862 comparesig NaN77 Inf -> NaN77 Invalid_operation -dqcms863 comparesig -NaN67 NaN5 -> -NaN67 Invalid_operation -dqcms864 comparesig -Inf -NaN4 -> -NaN4 Invalid_operation -dqcms865 comparesig -999 -NaN33 -> -NaN33 Invalid_operation -dqcms866 comparesig Inf NaN2 -> NaN2 Invalid_operation -dqcms867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation -dqcms868 comparesig +NaN41 -NaN42 -> NaN41 Invalid_operation -dqcms869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation -dqcms870 comparesig +NaN41 +NaN42 -> NaN41 Invalid_operation - -dqcms871 comparesig -sNaN99 -Inf -> -NaN99 Invalid_operation -dqcms872 comparesig sNaN98 -11 -> NaN98 Invalid_operation -dqcms873 comparesig sNaN97 NaN -> NaN97 Invalid_operation -dqcms874 comparesig sNaN16 sNaN94 -> NaN16 Invalid_operation -dqcms875 comparesig NaN85 sNaN83 -> NaN83 Invalid_operation -dqcms876 comparesig -Inf sNaN92 -> NaN92 Invalid_operation -dqcms877 comparesig 088 sNaN81 -> NaN81 Invalid_operation -dqcms878 comparesig Inf sNaN90 -> NaN90 Invalid_operation -dqcms879 comparesig NaN -sNaN89 -> -NaN89 Invalid_operation - --- wide range -dqcms880 comparesig +1.23456789012345E-0 9E+6144 -> -1 -dqcms881 comparesig 9E+6144 +1.23456789012345E-0 -> 1 -dqcms882 comparesig +0.100 9E-6143 -> 1 -dqcms883 comparesig 9E-6143 +0.100 -> -1 -dqcms885 comparesig -1.23456789012345E-0 9E+6144 -> -1 -dqcms886 comparesig 9E+6144 -1.23456789012345E-0 -> 1 -dqcms887 comparesig -0.100 9E-6143 -> -1 -dqcms888 comparesig 9E-6143 -0.100 -> 1 - --- signs -dqcms901 comparesig 1e+77 1e+11 -> 1 -dqcms902 comparesig 1e+77 -1e+11 -> 1 -dqcms903 comparesig -1e+77 1e+11 -> -1 -dqcms904 comparesig -1e+77 -1e+11 -> -1 -dqcms905 comparesig 1e-77 1e-11 -> -1 -dqcms906 comparesig 1e-77 -1e-11 -> 1 -dqcms907 comparesig -1e-77 1e-11 -> -1 -dqcms908 comparesig -1e-77 -1e-11 -> 1 - --- Null tests -dqcms990 comparesig 10 # -> NaN Invalid_operation -dqcms991 comparesig # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqCompareSig.decTest -- decQuad comparison; all NaNs signal -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqcms001 comparesig -2 -2 -> 0 +dqcms002 comparesig -2 -1 -> -1 +dqcms003 comparesig -2 0 -> -1 +dqcms004 comparesig -2 1 -> -1 +dqcms005 comparesig -2 2 -> -1 +dqcms006 comparesig -1 -2 -> 1 +dqcms007 comparesig -1 -1 -> 0 +dqcms008 comparesig -1 0 -> -1 +dqcms009 comparesig -1 1 -> -1 +dqcms010 comparesig -1 2 -> -1 +dqcms011 comparesig 0 -2 -> 1 +dqcms012 comparesig 0 -1 -> 1 +dqcms013 comparesig 0 0 -> 0 +dqcms014 comparesig 0 1 -> -1 +dqcms015 comparesig 0 2 -> -1 +dqcms016 comparesig 1 -2 -> 1 +dqcms017 comparesig 1 -1 -> 1 +dqcms018 comparesig 1 0 -> 1 +dqcms019 comparesig 1 1 -> 0 +dqcms020 comparesig 1 2 -> -1 +dqcms021 comparesig 2 -2 -> 1 +dqcms022 comparesig 2 -1 -> 1 +dqcms023 comparesig 2 0 -> 1 +dqcms025 comparesig 2 1 -> 1 +dqcms026 comparesig 2 2 -> 0 + +dqcms031 comparesig -20 -20 -> 0 +dqcms032 comparesig -20 -10 -> -1 +dqcms033 comparesig -20 00 -> -1 +dqcms034 comparesig -20 10 -> -1 +dqcms035 comparesig -20 20 -> -1 +dqcms036 comparesig -10 -20 -> 1 +dqcms037 comparesig -10 -10 -> 0 +dqcms038 comparesig -10 00 -> -1 +dqcms039 comparesig -10 10 -> -1 +dqcms040 comparesig -10 20 -> -1 +dqcms041 comparesig 00 -20 -> 1 +dqcms042 comparesig 00 -10 -> 1 +dqcms043 comparesig 00 00 -> 0 +dqcms044 comparesig 00 10 -> -1 +dqcms045 comparesig 00 20 -> -1 +dqcms046 comparesig 10 -20 -> 1 +dqcms047 comparesig 10 -10 -> 1 +dqcms048 comparesig 10 00 -> 1 +dqcms049 comparesig 10 10 -> 0 +dqcms050 comparesig 10 20 -> -1 +dqcms051 comparesig 20 -20 -> 1 +dqcms052 comparesig 20 -10 -> 1 +dqcms053 comparesig 20 00 -> 1 +dqcms055 comparesig 20 10 -> 1 +dqcms056 comparesig 20 20 -> 0 + +dqcms061 comparesig -2.0 -2.0 -> 0 +dqcms062 comparesig -2.0 -1.0 -> -1 +dqcms063 comparesig -2.0 0.0 -> -1 +dqcms064 comparesig -2.0 1.0 -> -1 +dqcms065 comparesig -2.0 2.0 -> -1 +dqcms066 comparesig -1.0 -2.0 -> 1 +dqcms067 comparesig -1.0 -1.0 -> 0 +dqcms068 comparesig -1.0 0.0 -> -1 +dqcms069 comparesig -1.0 1.0 -> -1 +dqcms070 comparesig -1.0 2.0 -> -1 +dqcms071 comparesig 0.0 -2.0 -> 1 +dqcms072 comparesig 0.0 -1.0 -> 1 +dqcms073 comparesig 0.0 0.0 -> 0 +dqcms074 comparesig 0.0 1.0 -> -1 +dqcms075 comparesig 0.0 2.0 -> -1 +dqcms076 comparesig 1.0 -2.0 -> 1 +dqcms077 comparesig 1.0 -1.0 -> 1 +dqcms078 comparesig 1.0 0.0 -> 1 +dqcms079 comparesig 1.0 1.0 -> 0 +dqcms080 comparesig 1.0 2.0 -> -1 +dqcms081 comparesig 2.0 -2.0 -> 1 +dqcms082 comparesig 2.0 -1.0 -> 1 +dqcms083 comparesig 2.0 0.0 -> 1 +dqcms085 comparesig 2.0 1.0 -> 1 +dqcms086 comparesig 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +dqcms090 comparesig 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 0 +dqcms091 comparesig -9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> -1 +dqcms092 comparesig 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 1 +dqcms093 comparesig -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0 + +-- some differing length/exponent cases +dqcms100 comparesig 7.0 7.0 -> 0 +dqcms101 comparesig 7.0 7 -> 0 +dqcms102 comparesig 7 7.0 -> 0 +dqcms103 comparesig 7E+0 7.0 -> 0 +dqcms104 comparesig 70E-1 7.0 -> 0 +dqcms105 comparesig 0.7E+1 7 -> 0 +dqcms106 comparesig 70E-1 7 -> 0 +dqcms107 comparesig 7.0 7E+0 -> 0 +dqcms108 comparesig 7.0 70E-1 -> 0 +dqcms109 comparesig 7 0.7E+1 -> 0 +dqcms110 comparesig 7 70E-1 -> 0 + +dqcms120 comparesig 8.0 7.0 -> 1 +dqcms121 comparesig 8.0 7 -> 1 +dqcms122 comparesig 8 7.0 -> 1 +dqcms123 comparesig 8E+0 7.0 -> 1 +dqcms124 comparesig 80E-1 7.0 -> 1 +dqcms125 comparesig 0.8E+1 7 -> 1 +dqcms126 comparesig 80E-1 7 -> 1 +dqcms127 comparesig 8.0 7E+0 -> 1 +dqcms128 comparesig 8.0 70E-1 -> 1 +dqcms129 comparesig 8 0.7E+1 -> 1 +dqcms130 comparesig 8 70E-1 -> 1 + +dqcms140 comparesig 8.0 9.0 -> -1 +dqcms141 comparesig 8.0 9 -> -1 +dqcms142 comparesig 8 9.0 -> -1 +dqcms143 comparesig 8E+0 9.0 -> -1 +dqcms144 comparesig 80E-1 9.0 -> -1 +dqcms145 comparesig 0.8E+1 9 -> -1 +dqcms146 comparesig 80E-1 9 -> -1 +dqcms147 comparesig 8.0 9E+0 -> -1 +dqcms148 comparesig 8.0 90E-1 -> -1 +dqcms149 comparesig 8 0.9E+1 -> -1 +dqcms150 comparesig 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +dqcms200 comparesig -7.0 7.0 -> -1 +dqcms201 comparesig -7.0 7 -> -1 +dqcms202 comparesig -7 7.0 -> -1 +dqcms203 comparesig -7E+0 7.0 -> -1 +dqcms204 comparesig -70E-1 7.0 -> -1 +dqcms205 comparesig -0.7E+1 7 -> -1 +dqcms206 comparesig -70E-1 7 -> -1 +dqcms207 comparesig -7.0 7E+0 -> -1 +dqcms208 comparesig -7.0 70E-1 -> -1 +dqcms209 comparesig -7 0.7E+1 -> -1 +dqcms210 comparesig -7 70E-1 -> -1 + +dqcms220 comparesig -8.0 7.0 -> -1 +dqcms221 comparesig -8.0 7 -> -1 +dqcms222 comparesig -8 7.0 -> -1 +dqcms223 comparesig -8E+0 7.0 -> -1 +dqcms224 comparesig -80E-1 7.0 -> -1 +dqcms225 comparesig -0.8E+1 7 -> -1 +dqcms226 comparesig -80E-1 7 -> -1 +dqcms227 comparesig -8.0 7E+0 -> -1 +dqcms228 comparesig -8.0 70E-1 -> -1 +dqcms229 comparesig -8 0.7E+1 -> -1 +dqcms230 comparesig -8 70E-1 -> -1 + +dqcms240 comparesig -8.0 9.0 -> -1 +dqcms241 comparesig -8.0 9 -> -1 +dqcms242 comparesig -8 9.0 -> -1 +dqcms243 comparesig -8E+0 9.0 -> -1 +dqcms244 comparesig -80E-1 9.0 -> -1 +dqcms245 comparesig -0.8E+1 9 -> -1 +dqcms246 comparesig -80E-1 9 -> -1 +dqcms247 comparesig -8.0 9E+0 -> -1 +dqcms248 comparesig -8.0 90E-1 -> -1 +dqcms249 comparesig -8 0.9E+1 -> -1 +dqcms250 comparesig -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +dqcms300 comparesig 7.0 -7.0 -> 1 +dqcms301 comparesig 7.0 -7 -> 1 +dqcms302 comparesig 7 -7.0 -> 1 +dqcms303 comparesig 7E+0 -7.0 -> 1 +dqcms304 comparesig 70E-1 -7.0 -> 1 +dqcms305 comparesig .7E+1 -7 -> 1 +dqcms306 comparesig 70E-1 -7 -> 1 +dqcms307 comparesig 7.0 -7E+0 -> 1 +dqcms308 comparesig 7.0 -70E-1 -> 1 +dqcms309 comparesig 7 -.7E+1 -> 1 +dqcms310 comparesig 7 -70E-1 -> 1 + +dqcms320 comparesig 8.0 -7.0 -> 1 +dqcms321 comparesig 8.0 -7 -> 1 +dqcms322 comparesig 8 -7.0 -> 1 +dqcms323 comparesig 8E+0 -7.0 -> 1 +dqcms324 comparesig 80E-1 -7.0 -> 1 +dqcms325 comparesig .8E+1 -7 -> 1 +dqcms326 comparesig 80E-1 -7 -> 1 +dqcms327 comparesig 8.0 -7E+0 -> 1 +dqcms328 comparesig 8.0 -70E-1 -> 1 +dqcms329 comparesig 8 -.7E+1 -> 1 +dqcms330 comparesig 8 -70E-1 -> 1 + +dqcms340 comparesig 8.0 -9.0 -> 1 +dqcms341 comparesig 8.0 -9 -> 1 +dqcms342 comparesig 8 -9.0 -> 1 +dqcms343 comparesig 8E+0 -9.0 -> 1 +dqcms344 comparesig 80E-1 -9.0 -> 1 +dqcms345 comparesig .8E+1 -9 -> 1 +dqcms346 comparesig 80E-1 -9 -> 1 +dqcms347 comparesig 8.0 -9E+0 -> 1 +dqcms348 comparesig 8.0 -90E-1 -> 1 +dqcms349 comparesig 8 -.9E+1 -> 1 +dqcms350 comparesig 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +dqcms400 comparesig -7.0 -7.0 -> 0 +dqcms401 comparesig -7.0 -7 -> 0 +dqcms402 comparesig -7 -7.0 -> 0 +dqcms403 comparesig -7E+0 -7.0 -> 0 +dqcms404 comparesig -70E-1 -7.0 -> 0 +dqcms405 comparesig -.7E+1 -7 -> 0 +dqcms406 comparesig -70E-1 -7 -> 0 +dqcms407 comparesig -7.0 -7E+0 -> 0 +dqcms408 comparesig -7.0 -70E-1 -> 0 +dqcms409 comparesig -7 -.7E+1 -> 0 +dqcms410 comparesig -7 -70E-1 -> 0 + +dqcms420 comparesig -8.0 -7.0 -> -1 +dqcms421 comparesig -8.0 -7 -> -1 +dqcms422 comparesig -8 -7.0 -> -1 +dqcms423 comparesig -8E+0 -7.0 -> -1 +dqcms424 comparesig -80E-1 -7.0 -> -1 +dqcms425 comparesig -.8E+1 -7 -> -1 +dqcms426 comparesig -80E-1 -7 -> -1 +dqcms427 comparesig -8.0 -7E+0 -> -1 +dqcms428 comparesig -8.0 -70E-1 -> -1 +dqcms429 comparesig -8 -.7E+1 -> -1 +dqcms430 comparesig -8 -70E-1 -> -1 + +dqcms440 comparesig -8.0 -9.0 -> 1 +dqcms441 comparesig -8.0 -9 -> 1 +dqcms442 comparesig -8 -9.0 -> 1 +dqcms443 comparesig -8E+0 -9.0 -> 1 +dqcms444 comparesig -80E-1 -9.0 -> 1 +dqcms445 comparesig -.8E+1 -9 -> 1 +dqcms446 comparesig -80E-1 -9 -> 1 +dqcms447 comparesig -8.0 -9E+0 -> 1 +dqcms448 comparesig -8.0 -90E-1 -> 1 +dqcms449 comparesig -8 -.9E+1 -> 1 +dqcms450 comparesig -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +dqcms473 comparesig 123.9999999999999999994560000000000E-89 123.999999999999999999456E-89 -> 0 +dqcms474 comparesig 123.999999999999999999456000000000E+89 123.999999999999999999456E+89 -> 0 +dqcms475 comparesig 123.99999999999999999945600000000E-89 123.999999999999999999456E-89 -> 0 +dqcms476 comparesig 123.9999999999999999994560000000E+89 123.999999999999999999456E+89 -> 0 +dqcms477 comparesig 123.999999999999999999456000000E-89 123.999999999999999999456E-89 -> 0 +dqcms478 comparesig 123.99999999999999999945600000E+89 123.999999999999999999456E+89 -> 0 +dqcms479 comparesig 123.9999999999999999994560000E-89 123.999999999999999999456E-89 -> 0 +dqcms480 comparesig 123.999999999999999999456000E+89 123.999999999999999999456E+89 -> 0 +dqcms481 comparesig 123.99999999999999999945600E-89 123.999999999999999999456E-89 -> 0 +dqcms482 comparesig 123.9999999999999999994560E+89 123.999999999999999999456E+89 -> 0 +dqcms483 comparesig 123.999999999999999999456E-89 123.999999999999999999456E-89 -> 0 +dqcms487 comparesig 123.999999999999999999456E+89 123.9999999999999999994560000000000E+89 -> 0 +dqcms488 comparesig 123.999999999999999999456E-89 123.999999999999999999456000000000E-89 -> 0 +dqcms489 comparesig 123.999999999999999999456E+89 123.99999999999999999945600000000E+89 -> 0 +dqcms490 comparesig 123.999999999999999999456E-89 123.9999999999999999994560000000E-89 -> 0 +dqcms491 comparesig 123.999999999999999999456E+89 123.999999999999999999456000000E+89 -> 0 +dqcms492 comparesig 123.999999999999999999456E-89 123.99999999999999999945600000E-89 -> 0 +dqcms493 comparesig 123.999999999999999999456E+89 123.9999999999999999994560000E+89 -> 0 +dqcms494 comparesig 123.999999999999999999456E-89 123.999999999999999999456000E-89 -> 0 +dqcms495 comparesig 123.999999999999999999456E+89 123.99999999999999999945600E+89 -> 0 +dqcms496 comparesig 123.999999999999999999456E-89 123.9999999999999999994560E-89 -> 0 +dqcms497 comparesig 123.999999999999999999456E+89 123.999999999999999999456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +dqcms500 comparesig 1 1E-15 -> 1 +dqcms501 comparesig 1 1E-14 -> 1 +dqcms502 comparesig 1 1E-13 -> 1 +dqcms503 comparesig 1 1E-12 -> 1 +dqcms504 comparesig 1 1E-11 -> 1 +dqcms505 comparesig 1 1E-10 -> 1 +dqcms506 comparesig 1 1E-9 -> 1 +dqcms507 comparesig 1 1E-8 -> 1 +dqcms508 comparesig 1 1E-7 -> 1 +dqcms509 comparesig 1 1E-6 -> 1 +dqcms510 comparesig 1 1E-5 -> 1 +dqcms511 comparesig 1 1E-4 -> 1 +dqcms512 comparesig 1 1E-3 -> 1 +dqcms513 comparesig 1 1E-2 -> 1 +dqcms514 comparesig 1 1E-1 -> 1 +dqcms515 comparesig 1 1E-0 -> 0 +dqcms516 comparesig 1 1E+1 -> -1 +dqcms517 comparesig 1 1E+2 -> -1 +dqcms518 comparesig 1 1E+3 -> -1 +dqcms519 comparesig 1 1E+4 -> -1 +dqcms521 comparesig 1 1E+5 -> -1 +dqcms522 comparesig 1 1E+6 -> -1 +dqcms523 comparesig 1 1E+7 -> -1 +dqcms524 comparesig 1 1E+8 -> -1 +dqcms525 comparesig 1 1E+9 -> -1 +dqcms526 comparesig 1 1E+10 -> -1 +dqcms527 comparesig 1 1E+11 -> -1 +dqcms528 comparesig 1 1E+12 -> -1 +dqcms529 comparesig 1 1E+13 -> -1 +dqcms530 comparesig 1 1E+14 -> -1 +dqcms531 comparesig 1 1E+15 -> -1 +-- LR swap +dqcms540 comparesig 1E-15 1 -> -1 +dqcms541 comparesig 1E-14 1 -> -1 +dqcms542 comparesig 1E-13 1 -> -1 +dqcms543 comparesig 1E-12 1 -> -1 +dqcms544 comparesig 1E-11 1 -> -1 +dqcms545 comparesig 1E-10 1 -> -1 +dqcms546 comparesig 1E-9 1 -> -1 +dqcms547 comparesig 1E-8 1 -> -1 +dqcms548 comparesig 1E-7 1 -> -1 +dqcms549 comparesig 1E-6 1 -> -1 +dqcms550 comparesig 1E-5 1 -> -1 +dqcms551 comparesig 1E-4 1 -> -1 +dqcms552 comparesig 1E-3 1 -> -1 +dqcms553 comparesig 1E-2 1 -> -1 +dqcms554 comparesig 1E-1 1 -> -1 +dqcms555 comparesig 1E-0 1 -> 0 +dqcms556 comparesig 1E+1 1 -> 1 +dqcms557 comparesig 1E+2 1 -> 1 +dqcms558 comparesig 1E+3 1 -> 1 +dqcms559 comparesig 1E+4 1 -> 1 +dqcms561 comparesig 1E+5 1 -> 1 +dqcms562 comparesig 1E+6 1 -> 1 +dqcms563 comparesig 1E+7 1 -> 1 +dqcms564 comparesig 1E+8 1 -> 1 +dqcms565 comparesig 1E+9 1 -> 1 +dqcms566 comparesig 1E+10 1 -> 1 +dqcms567 comparesig 1E+11 1 -> 1 +dqcms568 comparesig 1E+12 1 -> 1 +dqcms569 comparesig 1E+13 1 -> 1 +dqcms570 comparesig 1E+14 1 -> 1 +dqcms571 comparesig 1E+15 1 -> 1 +-- similar with a useful coefficient, one side only +dqcms580 comparesig 0.000000987654321 1E-15 -> 1 +dqcms581 comparesig 0.000000987654321 1E-14 -> 1 +dqcms582 comparesig 0.000000987654321 1E-13 -> 1 +dqcms583 comparesig 0.000000987654321 1E-12 -> 1 +dqcms584 comparesig 0.000000987654321 1E-11 -> 1 +dqcms585 comparesig 0.000000987654321 1E-10 -> 1 +dqcms586 comparesig 0.000000987654321 1E-9 -> 1 +dqcms587 comparesig 0.000000987654321 1E-8 -> 1 +dqcms588 comparesig 0.000000987654321 1E-7 -> 1 +dqcms589 comparesig 0.000000987654321 1E-6 -> -1 +dqcms590 comparesig 0.000000987654321 1E-5 -> -1 +dqcms591 comparesig 0.000000987654321 1E-4 -> -1 +dqcms592 comparesig 0.000000987654321 1E-3 -> -1 +dqcms593 comparesig 0.000000987654321 1E-2 -> -1 +dqcms594 comparesig 0.000000987654321 1E-1 -> -1 +dqcms595 comparesig 0.000000987654321 1E-0 -> -1 +dqcms596 comparesig 0.000000987654321 1E+1 -> -1 +dqcms597 comparesig 0.000000987654321 1E+2 -> -1 +dqcms598 comparesig 0.000000987654321 1E+3 -> -1 +dqcms599 comparesig 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +dqcms600 comparesig 12 12.2345 -> -1 +dqcms601 comparesig 12.0 12.2345 -> -1 +dqcms602 comparesig 12.00 12.2345 -> -1 +dqcms603 comparesig 12.000 12.2345 -> -1 +dqcms604 comparesig 12.0000 12.2345 -> -1 +dqcms605 comparesig 12.00000 12.2345 -> -1 +dqcms606 comparesig 12.000000 12.2345 -> -1 +dqcms607 comparesig 12.0000000 12.2345 -> -1 +dqcms608 comparesig 12.00000000 12.2345 -> -1 +dqcms609 comparesig 12.000000000 12.2345 -> -1 +dqcms610 comparesig 12.1234 12 -> 1 +dqcms611 comparesig 12.1234 12.0 -> 1 +dqcms612 comparesig 12.1234 12.00 -> 1 +dqcms613 comparesig 12.1234 12.000 -> 1 +dqcms614 comparesig 12.1234 12.0000 -> 1 +dqcms615 comparesig 12.1234 12.00000 -> 1 +dqcms616 comparesig 12.1234 12.000000 -> 1 +dqcms617 comparesig 12.1234 12.0000000 -> 1 +dqcms618 comparesig 12.1234 12.00000000 -> 1 +dqcms619 comparesig 12.1234 12.000000000 -> 1 +dqcms620 comparesig -12 -12.2345 -> 1 +dqcms621 comparesig -12.0 -12.2345 -> 1 +dqcms622 comparesig -12.00 -12.2345 -> 1 +dqcms623 comparesig -12.000 -12.2345 -> 1 +dqcms624 comparesig -12.0000 -12.2345 -> 1 +dqcms625 comparesig -12.00000 -12.2345 -> 1 +dqcms626 comparesig -12.000000 -12.2345 -> 1 +dqcms627 comparesig -12.0000000 -12.2345 -> 1 +dqcms628 comparesig -12.00000000 -12.2345 -> 1 +dqcms629 comparesig -12.000000000 -12.2345 -> 1 +dqcms630 comparesig -12.1234 -12 -> -1 +dqcms631 comparesig -12.1234 -12.0 -> -1 +dqcms632 comparesig -12.1234 -12.00 -> -1 +dqcms633 comparesig -12.1234 -12.000 -> -1 +dqcms634 comparesig -12.1234 -12.0000 -> -1 +dqcms635 comparesig -12.1234 -12.00000 -> -1 +dqcms636 comparesig -12.1234 -12.000000 -> -1 +dqcms637 comparesig -12.1234 -12.0000000 -> -1 +dqcms638 comparesig -12.1234 -12.00000000 -> -1 +dqcms639 comparesig -12.1234 -12.000000000 -> -1 + +-- extended zeros +dqcms640 comparesig 0 0 -> 0 +dqcms641 comparesig 0 -0 -> 0 +dqcms642 comparesig 0 -0.0 -> 0 +dqcms643 comparesig 0 0.0 -> 0 +dqcms644 comparesig -0 0 -> 0 +dqcms645 comparesig -0 -0 -> 0 +dqcms646 comparesig -0 -0.0 -> 0 +dqcms647 comparesig -0 0.0 -> 0 +dqcms648 comparesig 0.0 0 -> 0 +dqcms649 comparesig 0.0 -0 -> 0 +dqcms650 comparesig 0.0 -0.0 -> 0 +dqcms651 comparesig 0.0 0.0 -> 0 +dqcms652 comparesig -0.0 0 -> 0 +dqcms653 comparesig -0.0 -0 -> 0 +dqcms654 comparesig -0.0 -0.0 -> 0 +dqcms655 comparesig -0.0 0.0 -> 0 + +dqcms656 comparesig -0E1 0.0 -> 0 +dqcms657 comparesig -0E2 0.0 -> 0 +dqcms658 comparesig 0E1 0.0 -> 0 +dqcms659 comparesig 0E2 0.0 -> 0 +dqcms660 comparesig -0E1 0 -> 0 +dqcms661 comparesig -0E2 0 -> 0 +dqcms662 comparesig 0E1 0 -> 0 +dqcms663 comparesig 0E2 0 -> 0 +dqcms664 comparesig -0E1 -0E1 -> 0 +dqcms665 comparesig -0E2 -0E1 -> 0 +dqcms666 comparesig 0E1 -0E1 -> 0 +dqcms667 comparesig 0E2 -0E1 -> 0 +dqcms668 comparesig -0E1 -0E2 -> 0 +dqcms669 comparesig -0E2 -0E2 -> 0 +dqcms670 comparesig 0E1 -0E2 -> 0 +dqcms671 comparesig 0E2 -0E2 -> 0 +dqcms672 comparesig -0E1 0E1 -> 0 +dqcms673 comparesig -0E2 0E1 -> 0 +dqcms674 comparesig 0E1 0E1 -> 0 +dqcms675 comparesig 0E2 0E1 -> 0 +dqcms676 comparesig -0E1 0E2 -> 0 +dqcms677 comparesig -0E2 0E2 -> 0 +dqcms678 comparesig 0E1 0E2 -> 0 +dqcms679 comparesig 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +dqcms680 comparesig 12 12 -> 0 +dqcms681 comparesig 12 12.0 -> 0 +dqcms682 comparesig 12 12.00 -> 0 +dqcms683 comparesig 12 12.000 -> 0 +dqcms684 comparesig 12 12.0000 -> 0 +dqcms685 comparesig 12 12.00000 -> 0 +dqcms686 comparesig 12 12.000000 -> 0 +dqcms687 comparesig 12 12.0000000 -> 0 +dqcms688 comparesig 12 12.00000000 -> 0 +dqcms689 comparesig 12 12.000000000 -> 0 +dqcms690 comparesig 12 12 -> 0 +dqcms691 comparesig 12.0 12 -> 0 +dqcms692 comparesig 12.00 12 -> 0 +dqcms693 comparesig 12.000 12 -> 0 +dqcms694 comparesig 12.0000 12 -> 0 +dqcms695 comparesig 12.00000 12 -> 0 +dqcms696 comparesig 12.000000 12 -> 0 +dqcms697 comparesig 12.0000000 12 -> 0 +dqcms698 comparesig 12.00000000 12 -> 0 +dqcms699 comparesig 12.000000000 12 -> 0 + +-- first, second, & last digit +dqcms700 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123455 -> 1 +dqcms701 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 +dqcms702 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123457 -> -1 +dqcms703 comparesig 1234567899999999999999999990123456 0234567899999999999999999990123456 -> 1 +dqcms704 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 +dqcms705 comparesig 1234567899999999999999999990123456 2234567899999999999999999990123456 -> -1 +dqcms706 comparesig 1134567899999999999999999990123456 1034567899999999999999999990123456 -> 1 +dqcms707 comparesig 1134567899999999999999999990123456 1134567899999999999999999990123456 -> 0 +dqcms708 comparesig 1134567899999999999999999990123456 1234567899999999999999999990123456 -> -1 + +-- miscellaneous +dqcms721 comparesig 12345678000 1 -> 1 +dqcms722 comparesig 1 12345678000 -> -1 +dqcms723 comparesig 1234567800 1 -> 1 +dqcms724 comparesig 1 1234567800 -> -1 +dqcms725 comparesig 1234567890 1 -> 1 +dqcms726 comparesig 1 1234567890 -> -1 +dqcms727 comparesig 1234567891 1 -> 1 +dqcms728 comparesig 1 1234567891 -> -1 +dqcms729 comparesig 12345678901 1 -> 1 +dqcms730 comparesig 1 12345678901 -> -1 +dqcms731 comparesig 1234567896 1 -> 1 +dqcms732 comparesig 1 1234567896 -> -1 + +-- residue cases at lower precision +dqcms740 comparesig 1 0.9999999 -> 1 +dqcms741 comparesig 1 0.999999 -> 1 +dqcms742 comparesig 1 0.99999 -> 1 +dqcms743 comparesig 1 1.0000 -> 0 +dqcms744 comparesig 1 1.00001 -> -1 +dqcms745 comparesig 1 1.000001 -> -1 +dqcms746 comparesig 1 1.0000001 -> -1 +dqcms750 comparesig 0.9999999 1 -> -1 +dqcms751 comparesig 0.999999 1 -> -1 +dqcms752 comparesig 0.99999 1 -> -1 +dqcms753 comparesig 1.0000 1 -> 0 +dqcms754 comparesig 1.00001 1 -> 1 +dqcms755 comparesig 1.000001 1 -> 1 +dqcms756 comparesig 1.0000001 1 -> 1 + +-- Specials +dqcms780 comparesig Inf -Inf -> 1 +dqcms781 comparesig Inf -1000 -> 1 +dqcms782 comparesig Inf -1 -> 1 +dqcms783 comparesig Inf -0 -> 1 +dqcms784 comparesig Inf 0 -> 1 +dqcms785 comparesig Inf 1 -> 1 +dqcms786 comparesig Inf 1000 -> 1 +dqcms787 comparesig Inf Inf -> 0 +dqcms788 comparesig -1000 Inf -> -1 +dqcms789 comparesig -Inf Inf -> -1 +dqcms790 comparesig -1 Inf -> -1 +dqcms791 comparesig -0 Inf -> -1 +dqcms792 comparesig 0 Inf -> -1 +dqcms793 comparesig 1 Inf -> -1 +dqcms794 comparesig 1000 Inf -> -1 +dqcms795 comparesig Inf Inf -> 0 + +dqcms800 comparesig -Inf -Inf -> 0 +dqcms801 comparesig -Inf -1000 -> -1 +dqcms802 comparesig -Inf -1 -> -1 +dqcms803 comparesig -Inf -0 -> -1 +dqcms804 comparesig -Inf 0 -> -1 +dqcms805 comparesig -Inf 1 -> -1 +dqcms806 comparesig -Inf 1000 -> -1 +dqcms807 comparesig -Inf Inf -> -1 +dqcms808 comparesig -Inf -Inf -> 0 +dqcms809 comparesig -1000 -Inf -> 1 +dqcms810 comparesig -1 -Inf -> 1 +dqcms811 comparesig -0 -Inf -> 1 +dqcms812 comparesig 0 -Inf -> 1 +dqcms813 comparesig 1 -Inf -> 1 +dqcms814 comparesig 1000 -Inf -> 1 +dqcms815 comparesig Inf -Inf -> 1 + +dqcms821 comparesig NaN -Inf -> NaN Invalid_operation +dqcms822 comparesig NaN -1000 -> NaN Invalid_operation +dqcms823 comparesig NaN -1 -> NaN Invalid_operation +dqcms824 comparesig NaN -0 -> NaN Invalid_operation +dqcms825 comparesig NaN 0 -> NaN Invalid_operation +dqcms826 comparesig NaN 1 -> NaN Invalid_operation +dqcms827 comparesig NaN 1000 -> NaN Invalid_operation +dqcms828 comparesig NaN Inf -> NaN Invalid_operation +dqcms829 comparesig NaN NaN -> NaN Invalid_operation +dqcms830 comparesig -Inf NaN -> NaN Invalid_operation +dqcms831 comparesig -1000 NaN -> NaN Invalid_operation +dqcms832 comparesig -1 NaN -> NaN Invalid_operation +dqcms833 comparesig -0 NaN -> NaN Invalid_operation +dqcms834 comparesig 0 NaN -> NaN Invalid_operation +dqcms835 comparesig 1 NaN -> NaN Invalid_operation +dqcms836 comparesig 1000 NaN -> NaN Invalid_operation +dqcms837 comparesig Inf NaN -> NaN Invalid_operation +dqcms838 comparesig -NaN -NaN -> -NaN Invalid_operation +dqcms839 comparesig +NaN -NaN -> NaN Invalid_operation +dqcms840 comparesig -NaN +NaN -> -NaN Invalid_operation + +dqcms841 comparesig sNaN -Inf -> NaN Invalid_operation +dqcms842 comparesig sNaN -1000 -> NaN Invalid_operation +dqcms843 comparesig sNaN -1 -> NaN Invalid_operation +dqcms844 comparesig sNaN -0 -> NaN Invalid_operation +dqcms845 comparesig sNaN 0 -> NaN Invalid_operation +dqcms846 comparesig sNaN 1 -> NaN Invalid_operation +dqcms847 comparesig sNaN 1000 -> NaN Invalid_operation +dqcms848 comparesig sNaN NaN -> NaN Invalid_operation +dqcms849 comparesig sNaN sNaN -> NaN Invalid_operation +dqcms850 comparesig NaN sNaN -> NaN Invalid_operation +dqcms851 comparesig -Inf sNaN -> NaN Invalid_operation +dqcms852 comparesig -1000 sNaN -> NaN Invalid_operation +dqcms853 comparesig -1 sNaN -> NaN Invalid_operation +dqcms854 comparesig -0 sNaN -> NaN Invalid_operation +dqcms855 comparesig 0 sNaN -> NaN Invalid_operation +dqcms856 comparesig 1 sNaN -> NaN Invalid_operation +dqcms857 comparesig 1000 sNaN -> NaN Invalid_operation +dqcms858 comparesig Inf sNaN -> NaN Invalid_operation +dqcms859 comparesig NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqcms860 comparesig NaN9 -Inf -> NaN9 Invalid_operation +dqcms861 comparesig NaN8 999 -> NaN8 Invalid_operation +dqcms862 comparesig NaN77 Inf -> NaN77 Invalid_operation +dqcms863 comparesig -NaN67 NaN5 -> -NaN67 Invalid_operation +dqcms864 comparesig -Inf -NaN4 -> -NaN4 Invalid_operation +dqcms865 comparesig -999 -NaN33 -> -NaN33 Invalid_operation +dqcms866 comparesig Inf NaN2 -> NaN2 Invalid_operation +dqcms867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation +dqcms868 comparesig +NaN41 -NaN42 -> NaN41 Invalid_operation +dqcms869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation +dqcms870 comparesig +NaN41 +NaN42 -> NaN41 Invalid_operation + +dqcms871 comparesig -sNaN99 -Inf -> -NaN99 Invalid_operation +dqcms872 comparesig sNaN98 -11 -> NaN98 Invalid_operation +dqcms873 comparesig sNaN97 NaN -> NaN97 Invalid_operation +dqcms874 comparesig sNaN16 sNaN94 -> NaN16 Invalid_operation +dqcms875 comparesig NaN85 sNaN83 -> NaN83 Invalid_operation +dqcms876 comparesig -Inf sNaN92 -> NaN92 Invalid_operation +dqcms877 comparesig 088 sNaN81 -> NaN81 Invalid_operation +dqcms878 comparesig Inf sNaN90 -> NaN90 Invalid_operation +dqcms879 comparesig NaN -sNaN89 -> -NaN89 Invalid_operation + +-- wide range +dqcms880 comparesig +1.23456789012345E-0 9E+6144 -> -1 +dqcms881 comparesig 9E+6144 +1.23456789012345E-0 -> 1 +dqcms882 comparesig +0.100 9E-6143 -> 1 +dqcms883 comparesig 9E-6143 +0.100 -> -1 +dqcms885 comparesig -1.23456789012345E-0 9E+6144 -> -1 +dqcms886 comparesig 9E+6144 -1.23456789012345E-0 -> 1 +dqcms887 comparesig -0.100 9E-6143 -> -1 +dqcms888 comparesig 9E-6143 -0.100 -> 1 + +-- signs +dqcms901 comparesig 1e+77 1e+11 -> 1 +dqcms902 comparesig 1e+77 -1e+11 -> 1 +dqcms903 comparesig -1e+77 1e+11 -> -1 +dqcms904 comparesig -1e+77 -1e+11 -> -1 +dqcms905 comparesig 1e-77 1e-11 -> -1 +dqcms906 comparesig 1e-77 -1e-11 -> 1 +dqcms907 comparesig -1e-77 1e-11 -> -1 +dqcms908 comparesig -1e-77 -1e-11 -> 1 + +-- Null tests +dqcms990 comparesig 10 # -> NaN Invalid_operation +dqcms991 comparesig # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqCompareTotal.decTest b/Lib/test/decimaltestdata/dqCompareTotal.decTest index bae3761909a..13701ccb577 100644 --- a/Lib/test/decimaltestdata/dqCompareTotal.decTest +++ b/Lib/test/decimaltestdata/dqCompareTotal.decTest @@ -1,706 +1,706 @@ ------------------------------------------------------------------------- --- dqCompareTotal.decTest -- decQuad comparison using total ordering -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqcot001 comparetotal -2 -2 -> 0 -dqcot002 comparetotal -2 -1 -> -1 -dqcot003 comparetotal -2 0 -> -1 -dqcot004 comparetotal -2 1 -> -1 -dqcot005 comparetotal -2 2 -> -1 -dqcot006 comparetotal -1 -2 -> 1 -dqcot007 comparetotal -1 -1 -> 0 -dqcot008 comparetotal -1 0 -> -1 -dqcot009 comparetotal -1 1 -> -1 -dqcot010 comparetotal -1 2 -> -1 -dqcot011 comparetotal 0 -2 -> 1 -dqcot012 comparetotal 0 -1 -> 1 -dqcot013 comparetotal 0 0 -> 0 -dqcot014 comparetotal 0 1 -> -1 -dqcot015 comparetotal 0 2 -> -1 -dqcot016 comparetotal 1 -2 -> 1 -dqcot017 comparetotal 1 -1 -> 1 -dqcot018 comparetotal 1 0 -> 1 -dqcot019 comparetotal 1 1 -> 0 -dqcot020 comparetotal 1 2 -> -1 -dqcot021 comparetotal 2 -2 -> 1 -dqcot022 comparetotal 2 -1 -> 1 -dqcot023 comparetotal 2 0 -> 1 -dqcot025 comparetotal 2 1 -> 1 -dqcot026 comparetotal 2 2 -> 0 - -dqcot031 comparetotal -20 -20 -> 0 -dqcot032 comparetotal -20 -10 -> -1 -dqcot033 comparetotal -20 00 -> -1 -dqcot034 comparetotal -20 10 -> -1 -dqcot035 comparetotal -20 20 -> -1 -dqcot036 comparetotal -10 -20 -> 1 -dqcot037 comparetotal -10 -10 -> 0 -dqcot038 comparetotal -10 00 -> -1 -dqcot039 comparetotal -10 10 -> -1 -dqcot040 comparetotal -10 20 -> -1 -dqcot041 comparetotal 00 -20 -> 1 -dqcot042 comparetotal 00 -10 -> 1 -dqcot043 comparetotal 00 00 -> 0 -dqcot044 comparetotal 00 10 -> -1 -dqcot045 comparetotal 00 20 -> -1 -dqcot046 comparetotal 10 -20 -> 1 -dqcot047 comparetotal 10 -10 -> 1 -dqcot048 comparetotal 10 00 -> 1 -dqcot049 comparetotal 10 10 -> 0 -dqcot050 comparetotal 10 20 -> -1 -dqcot051 comparetotal 20 -20 -> 1 -dqcot052 comparetotal 20 -10 -> 1 -dqcot053 comparetotal 20 00 -> 1 -dqcot055 comparetotal 20 10 -> 1 -dqcot056 comparetotal 20 20 -> 0 - -dqcot061 comparetotal -2.0 -2.0 -> 0 -dqcot062 comparetotal -2.0 -1.0 -> -1 -dqcot063 comparetotal -2.0 0.0 -> -1 -dqcot064 comparetotal -2.0 1.0 -> -1 -dqcot065 comparetotal -2.0 2.0 -> -1 -dqcot066 comparetotal -1.0 -2.0 -> 1 -dqcot067 comparetotal -1.0 -1.0 -> 0 -dqcot068 comparetotal -1.0 0.0 -> -1 -dqcot069 comparetotal -1.0 1.0 -> -1 -dqcot070 comparetotal -1.0 2.0 -> -1 -dqcot071 comparetotal 0.0 -2.0 -> 1 -dqcot072 comparetotal 0.0 -1.0 -> 1 -dqcot073 comparetotal 0.0 0.0 -> 0 -dqcot074 comparetotal 0.0 1.0 -> -1 -dqcot075 comparetotal 0.0 2.0 -> -1 -dqcot076 comparetotal 1.0 -2.0 -> 1 -dqcot077 comparetotal 1.0 -1.0 -> 1 -dqcot078 comparetotal 1.0 0.0 -> 1 -dqcot079 comparetotal 1.0 1.0 -> 0 -dqcot080 comparetotal 1.0 2.0 -> -1 -dqcot081 comparetotal 2.0 -2.0 -> 1 -dqcot082 comparetotal 2.0 -1.0 -> 1 -dqcot083 comparetotal 2.0 0.0 -> 1 -dqcot085 comparetotal 2.0 1.0 -> 1 -dqcot086 comparetotal 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -dqcot090 comparetotal 9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 -dqcot091 comparetotal -9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> -1 -dqcot092 comparetotal 9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 1 -dqcot093 comparetotal -9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -dqcot100 comparetotal 7.0 7.0 -> 0 -dqcot101 comparetotal 7.0 7 -> -1 -dqcot102 comparetotal 7 7.0 -> 1 -dqcot103 comparetotal 7E+0 7.0 -> 1 -dqcot104 comparetotal 70E-1 7.0 -> 0 -dqcot105 comparetotal 0.7E+1 7 -> 0 -dqcot106 comparetotal 70E-1 7 -> -1 -dqcot107 comparetotal 7.0 7E+0 -> -1 -dqcot108 comparetotal 7.0 70E-1 -> 0 -dqcot109 comparetotal 7 0.7E+1 -> 0 -dqcot110 comparetotal 7 70E-1 -> 1 - -dqcot120 comparetotal 8.0 7.0 -> 1 -dqcot121 comparetotal 8.0 7 -> 1 -dqcot122 comparetotal 8 7.0 -> 1 -dqcot123 comparetotal 8E+0 7.0 -> 1 -dqcot124 comparetotal 80E-1 7.0 -> 1 -dqcot125 comparetotal 0.8E+1 7 -> 1 -dqcot126 comparetotal 80E-1 7 -> 1 -dqcot127 comparetotal 8.0 7E+0 -> 1 -dqcot128 comparetotal 8.0 70E-1 -> 1 -dqcot129 comparetotal 8 0.7E+1 -> 1 -dqcot130 comparetotal 8 70E-1 -> 1 - -dqcot140 comparetotal 8.0 9.0 -> -1 -dqcot141 comparetotal 8.0 9 -> -1 -dqcot142 comparetotal 8 9.0 -> -1 -dqcot143 comparetotal 8E+0 9.0 -> -1 -dqcot144 comparetotal 80E-1 9.0 -> -1 -dqcot145 comparetotal 0.8E+1 9 -> -1 -dqcot146 comparetotal 80E-1 9 -> -1 -dqcot147 comparetotal 8.0 9E+0 -> -1 -dqcot148 comparetotal 8.0 90E-1 -> -1 -dqcot149 comparetotal 8 0.9E+1 -> -1 -dqcot150 comparetotal 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -dqcot200 comparetotal -7.0 7.0 -> -1 -dqcot201 comparetotal -7.0 7 -> -1 -dqcot202 comparetotal -7 7.0 -> -1 -dqcot203 comparetotal -7E+0 7.0 -> -1 -dqcot204 comparetotal -70E-1 7.0 -> -1 -dqcot205 comparetotal -0.7E+1 7 -> -1 -dqcot206 comparetotal -70E-1 7 -> -1 -dqcot207 comparetotal -7.0 7E+0 -> -1 -dqcot208 comparetotal -7.0 70E-1 -> -1 -dqcot209 comparetotal -7 0.7E+1 -> -1 -dqcot210 comparetotal -7 70E-1 -> -1 - -dqcot220 comparetotal -8.0 7.0 -> -1 -dqcot221 comparetotal -8.0 7 -> -1 -dqcot222 comparetotal -8 7.0 -> -1 -dqcot223 comparetotal -8E+0 7.0 -> -1 -dqcot224 comparetotal -80E-1 7.0 -> -1 -dqcot225 comparetotal -0.8E+1 7 -> -1 -dqcot226 comparetotal -80E-1 7 -> -1 -dqcot227 comparetotal -8.0 7E+0 -> -1 -dqcot228 comparetotal -8.0 70E-1 -> -1 -dqcot229 comparetotal -8 0.7E+1 -> -1 -dqcot230 comparetotal -8 70E-1 -> -1 - -dqcot240 comparetotal -8.0 9.0 -> -1 -dqcot241 comparetotal -8.0 9 -> -1 -dqcot242 comparetotal -8 9.0 -> -1 -dqcot243 comparetotal -8E+0 9.0 -> -1 -dqcot244 comparetotal -80E-1 9.0 -> -1 -dqcot245 comparetotal -0.8E+1 9 -> -1 -dqcot246 comparetotal -80E-1 9 -> -1 -dqcot247 comparetotal -8.0 9E+0 -> -1 -dqcot248 comparetotal -8.0 90E-1 -> -1 -dqcot249 comparetotal -8 0.9E+1 -> -1 -dqcot250 comparetotal -8 90E-1 -> -1 - --- and again, with sign changes +- .. -dqcot300 comparetotal 7.0 -7.0 -> 1 -dqcot301 comparetotal 7.0 -7 -> 1 -dqcot302 comparetotal 7 -7.0 -> 1 -dqcot303 comparetotal 7E+0 -7.0 -> 1 -dqcot304 comparetotal 70E-1 -7.0 -> 1 -dqcot305 comparetotal .7E+1 -7 -> 1 -dqcot306 comparetotal 70E-1 -7 -> 1 -dqcot307 comparetotal 7.0 -7E+0 -> 1 -dqcot308 comparetotal 7.0 -70E-1 -> 1 -dqcot309 comparetotal 7 -.7E+1 -> 1 -dqcot310 comparetotal 7 -70E-1 -> 1 - -dqcot320 comparetotal 8.0 -7.0 -> 1 -dqcot321 comparetotal 8.0 -7 -> 1 -dqcot322 comparetotal 8 -7.0 -> 1 -dqcot323 comparetotal 8E+0 -7.0 -> 1 -dqcot324 comparetotal 80E-1 -7.0 -> 1 -dqcot325 comparetotal .8E+1 -7 -> 1 -dqcot326 comparetotal 80E-1 -7 -> 1 -dqcot327 comparetotal 8.0 -7E+0 -> 1 -dqcot328 comparetotal 8.0 -70E-1 -> 1 -dqcot329 comparetotal 8 -.7E+1 -> 1 -dqcot330 comparetotal 8 -70E-1 -> 1 - -dqcot340 comparetotal 8.0 -9.0 -> 1 -dqcot341 comparetotal 8.0 -9 -> 1 -dqcot342 comparetotal 8 -9.0 -> 1 -dqcot343 comparetotal 8E+0 -9.0 -> 1 -dqcot344 comparetotal 80E-1 -9.0 -> 1 -dqcot345 comparetotal .8E+1 -9 -> 1 -dqcot346 comparetotal 80E-1 -9 -> 1 -dqcot347 comparetotal 8.0 -9E+0 -> 1 -dqcot348 comparetotal 8.0 -90E-1 -> 1 -dqcot349 comparetotal 8 -.9E+1 -> 1 -dqcot350 comparetotal 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -dqcot400 comparetotal -7.0 -7.0 -> 0 -dqcot401 comparetotal -7.0 -7 -> 1 -dqcot402 comparetotal -7 -7.0 -> -1 -dqcot403 comparetotal -7E+0 -7.0 -> -1 -dqcot404 comparetotal -70E-1 -7.0 -> 0 -dqcot405 comparetotal -.7E+1 -7 -> 0 -dqcot406 comparetotal -70E-1 -7 -> 1 -dqcot407 comparetotal -7.0 -7E+0 -> 1 -dqcot408 comparetotal -7.0 -70E-1 -> 0 -dqcot409 comparetotal -7 -.7E+1 -> 0 -dqcot410 comparetotal -7 -70E-1 -> -1 - -dqcot420 comparetotal -8.0 -7.0 -> -1 -dqcot421 comparetotal -8.0 -7 -> -1 -dqcot422 comparetotal -8 -7.0 -> -1 -dqcot423 comparetotal -8E+0 -7.0 -> -1 -dqcot424 comparetotal -80E-1 -7.0 -> -1 -dqcot425 comparetotal -.8E+1 -7 -> -1 -dqcot426 comparetotal -80E-1 -7 -> -1 -dqcot427 comparetotal -8.0 -7E+0 -> -1 -dqcot428 comparetotal -8.0 -70E-1 -> -1 -dqcot429 comparetotal -8 -.7E+1 -> -1 -dqcot430 comparetotal -8 -70E-1 -> -1 - -dqcot440 comparetotal -8.0 -9.0 -> 1 -dqcot441 comparetotal -8.0 -9 -> 1 -dqcot442 comparetotal -8 -9.0 -> 1 -dqcot443 comparetotal -8E+0 -9.0 -> 1 -dqcot444 comparetotal -80E-1 -9.0 -> 1 -dqcot445 comparetotal -.8E+1 -9 -> 1 -dqcot446 comparetotal -80E-1 -9 -> 1 -dqcot447 comparetotal -8.0 -9E+0 -> 1 -dqcot448 comparetotal -8.0 -90E-1 -> 1 -dqcot449 comparetotal -8 -.9E+1 -> 1 -dqcot450 comparetotal -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -dqcot473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 -dqcot474 comparetotal 123.456000000000E+89 123.456E+89 -> -1 -dqcot475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 -dqcot476 comparetotal 123.4560000000E+89 123.456E+89 -> -1 -dqcot477 comparetotal 123.456000000E-89 123.456E-89 -> -1 -dqcot478 comparetotal 123.45600000E+89 123.456E+89 -> -1 -dqcot479 comparetotal 123.4560000E-89 123.456E-89 -> -1 -dqcot480 comparetotal 123.456000E+89 123.456E+89 -> -1 -dqcot481 comparetotal 123.45600E-89 123.456E-89 -> -1 -dqcot482 comparetotal 123.4560E+89 123.456E+89 -> -1 -dqcot483 comparetotal 123.456E-89 123.456E-89 -> 0 -dqcot487 comparetotal 123.456E+89 123.4560000000000E+89 -> 1 -dqcot488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 -dqcot489 comparetotal 123.456E+89 123.45600000000E+89 -> 1 -dqcot490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 -dqcot491 comparetotal 123.456E+89 123.456000000E+89 -> 1 -dqcot492 comparetotal 123.456E-89 123.45600000E-89 -> 1 -dqcot493 comparetotal 123.456E+89 123.4560000E+89 -> 1 -dqcot494 comparetotal 123.456E-89 123.456000E-89 -> 1 -dqcot495 comparetotal 123.456E+89 123.45600E+89 -> 1 -dqcot496 comparetotal 123.456E-89 123.4560E-89 -> 1 -dqcot497 comparetotal 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -dqcot498 comparetotal 1 1E-17 -> 1 -dqcot499 comparetotal 1 1E-16 -> 1 -dqcot500 comparetotal 1 1E-15 -> 1 -dqcot501 comparetotal 1 1E-14 -> 1 -dqcot502 comparetotal 1 1E-13 -> 1 -dqcot503 comparetotal 1 1E-12 -> 1 -dqcot504 comparetotal 1 1E-11 -> 1 -dqcot505 comparetotal 1 1E-10 -> 1 -dqcot506 comparetotal 1 1E-9 -> 1 -dqcot507 comparetotal 1 1E-8 -> 1 -dqcot508 comparetotal 1 1E-7 -> 1 -dqcot509 comparetotal 1 1E-6 -> 1 -dqcot510 comparetotal 1 1E-5 -> 1 -dqcot511 comparetotal 1 1E-4 -> 1 -dqcot512 comparetotal 1 1E-3 -> 1 -dqcot513 comparetotal 1 1E-2 -> 1 -dqcot514 comparetotal 1 1E-1 -> 1 -dqcot515 comparetotal 1 1E-0 -> 0 -dqcot516 comparetotal 1 1E+1 -> -1 -dqcot517 comparetotal 1 1E+2 -> -1 -dqcot518 comparetotal 1 1E+3 -> -1 -dqcot519 comparetotal 1 1E+4 -> -1 -dqcot521 comparetotal 1 1E+5 -> -1 -dqcot522 comparetotal 1 1E+6 -> -1 -dqcot523 comparetotal 1 1E+7 -> -1 -dqcot524 comparetotal 1 1E+8 -> -1 -dqcot525 comparetotal 1 1E+9 -> -1 -dqcot526 comparetotal 1 1E+10 -> -1 -dqcot527 comparetotal 1 1E+11 -> -1 -dqcot528 comparetotal 1 1E+12 -> -1 -dqcot529 comparetotal 1 1E+13 -> -1 -dqcot530 comparetotal 1 1E+14 -> -1 -dqcot531 comparetotal 1 1E+15 -> -1 -dqcot532 comparetotal 1 1E+16 -> -1 -dqcot533 comparetotal 1 1E+17 -> -1 --- LR swap -dqcot538 comparetotal 1E-17 1 -> -1 -dqcot539 comparetotal 1E-16 1 -> -1 -dqcot540 comparetotal 1E-15 1 -> -1 -dqcot541 comparetotal 1E-14 1 -> -1 -dqcot542 comparetotal 1E-13 1 -> -1 -dqcot543 comparetotal 1E-12 1 -> -1 -dqcot544 comparetotal 1E-11 1 -> -1 -dqcot545 comparetotal 1E-10 1 -> -1 -dqcot546 comparetotal 1E-9 1 -> -1 -dqcot547 comparetotal 1E-8 1 -> -1 -dqcot548 comparetotal 1E-7 1 -> -1 -dqcot549 comparetotal 1E-6 1 -> -1 -dqcot550 comparetotal 1E-5 1 -> -1 -dqcot551 comparetotal 1E-4 1 -> -1 -dqcot552 comparetotal 1E-3 1 -> -1 -dqcot553 comparetotal 1E-2 1 -> -1 -dqcot554 comparetotal 1E-1 1 -> -1 -dqcot555 comparetotal 1E-0 1 -> 0 -dqcot556 comparetotal 1E+1 1 -> 1 -dqcot557 comparetotal 1E+2 1 -> 1 -dqcot558 comparetotal 1E+3 1 -> 1 -dqcot559 comparetotal 1E+4 1 -> 1 -dqcot561 comparetotal 1E+5 1 -> 1 -dqcot562 comparetotal 1E+6 1 -> 1 -dqcot563 comparetotal 1E+7 1 -> 1 -dqcot564 comparetotal 1E+8 1 -> 1 -dqcot565 comparetotal 1E+9 1 -> 1 -dqcot566 comparetotal 1E+10 1 -> 1 -dqcot567 comparetotal 1E+11 1 -> 1 -dqcot568 comparetotal 1E+12 1 -> 1 -dqcot569 comparetotal 1E+13 1 -> 1 -dqcot570 comparetotal 1E+14 1 -> 1 -dqcot571 comparetotal 1E+15 1 -> 1 -dqcot572 comparetotal 1E+16 1 -> 1 -dqcot573 comparetotal 1E+17 1 -> 1 --- similar with a useful coefficient, one side only -dqcot578 comparetotal 0.000000987654321 1E-17 -> 1 -dqcot579 comparetotal 0.000000987654321 1E-16 -> 1 -dqcot580 comparetotal 0.000000987654321 1E-15 -> 1 -dqcot581 comparetotal 0.000000987654321 1E-14 -> 1 -dqcot582 comparetotal 0.000000987654321 1E-13 -> 1 -dqcot583 comparetotal 0.000000987654321 1E-12 -> 1 -dqcot584 comparetotal 0.000000987654321 1E-11 -> 1 -dqcot585 comparetotal 0.000000987654321 1E-10 -> 1 -dqcot586 comparetotal 0.000000987654321 1E-9 -> 1 -dqcot587 comparetotal 0.000000987654321 1E-8 -> 1 -dqcot588 comparetotal 0.000000987654321 1E-7 -> 1 -dqcot589 comparetotal 0.000000987654321 1E-6 -> -1 -dqcot590 comparetotal 0.000000987654321 1E-5 -> -1 -dqcot591 comparetotal 0.000000987654321 1E-4 -> -1 -dqcot592 comparetotal 0.000000987654321 1E-3 -> -1 -dqcot593 comparetotal 0.000000987654321 1E-2 -> -1 -dqcot594 comparetotal 0.000000987654321 1E-1 -> -1 -dqcot595 comparetotal 0.000000987654321 1E-0 -> -1 -dqcot596 comparetotal 0.000000987654321 1E+1 -> -1 -dqcot597 comparetotal 0.000000987654321 1E+2 -> -1 -dqcot598 comparetotal 0.000000987654321 1E+3 -> -1 -dqcot599 comparetotal 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -dqcot600 comparetotal 12 12.2345 -> -1 -dqcot601 comparetotal 12.0 12.2345 -> -1 -dqcot602 comparetotal 12.00 12.2345 -> -1 -dqcot603 comparetotal 12.000 12.2345 -> -1 -dqcot604 comparetotal 12.0000 12.2345 -> -1 -dqcot605 comparetotal 12.00000 12.2345 -> -1 -dqcot606 comparetotal 12.000000 12.2345 -> -1 -dqcot607 comparetotal 12.0000000 12.2345 -> -1 -dqcot608 comparetotal 12.00000000 12.2345 -> -1 -dqcot609 comparetotal 12.000000000 12.2345 -> -1 -dqcot610 comparetotal 12.1234 12 -> 1 -dqcot611 comparetotal 12.1234 12.0 -> 1 -dqcot612 comparetotal 12.1234 12.00 -> 1 -dqcot613 comparetotal 12.1234 12.000 -> 1 -dqcot614 comparetotal 12.1234 12.0000 -> 1 -dqcot615 comparetotal 12.1234 12.00000 -> 1 -dqcot616 comparetotal 12.1234 12.000000 -> 1 -dqcot617 comparetotal 12.1234 12.0000000 -> 1 -dqcot618 comparetotal 12.1234 12.00000000 -> 1 -dqcot619 comparetotal 12.1234 12.000000000 -> 1 -dqcot620 comparetotal -12 -12.2345 -> 1 -dqcot621 comparetotal -12.0 -12.2345 -> 1 -dqcot622 comparetotal -12.00 -12.2345 -> 1 -dqcot623 comparetotal -12.000 -12.2345 -> 1 -dqcot624 comparetotal -12.0000 -12.2345 -> 1 -dqcot625 comparetotal -12.00000 -12.2345 -> 1 -dqcot626 comparetotal -12.000000 -12.2345 -> 1 -dqcot627 comparetotal -12.0000000 -12.2345 -> 1 -dqcot628 comparetotal -12.00000000 -12.2345 -> 1 -dqcot629 comparetotal -12.000000000 -12.2345 -> 1 -dqcot630 comparetotal -12.1234 -12 -> -1 -dqcot631 comparetotal -12.1234 -12.0 -> -1 -dqcot632 comparetotal -12.1234 -12.00 -> -1 -dqcot633 comparetotal -12.1234 -12.000 -> -1 -dqcot634 comparetotal -12.1234 -12.0000 -> -1 -dqcot635 comparetotal -12.1234 -12.00000 -> -1 -dqcot636 comparetotal -12.1234 -12.000000 -> -1 -dqcot637 comparetotal -12.1234 -12.0000000 -> -1 -dqcot638 comparetotal -12.1234 -12.00000000 -> -1 -dqcot639 comparetotal -12.1234 -12.000000000 -> -1 - --- extended zeros -dqcot640 comparetotal 0 0 -> 0 -dqcot641 comparetotal 0 -0 -> 1 -dqcot642 comparetotal 0 -0.0 -> 1 -dqcot643 comparetotal 0 0.0 -> 1 -dqcot644 comparetotal -0 0 -> -1 -dqcot645 comparetotal -0 -0 -> 0 -dqcot646 comparetotal -0 -0.0 -> -1 -dqcot647 comparetotal -0 0.0 -> -1 -dqcot648 comparetotal 0.0 0 -> -1 -dqcot649 comparetotal 0.0 -0 -> 1 -dqcot650 comparetotal 0.0 -0.0 -> 1 -dqcot651 comparetotal 0.0 0.0 -> 0 -dqcot652 comparetotal -0.0 0 -> -1 -dqcot653 comparetotal -0.0 -0 -> 1 -dqcot654 comparetotal -0.0 -0.0 -> 0 -dqcot655 comparetotal -0.0 0.0 -> -1 - -dqcot656 comparetotal -0E1 0.0 -> -1 -dqcot657 comparetotal -0E2 0.0 -> -1 -dqcot658 comparetotal 0E1 0.0 -> 1 -dqcot659 comparetotal 0E2 0.0 -> 1 -dqcot660 comparetotal -0E1 0 -> -1 -dqcot661 comparetotal -0E2 0 -> -1 -dqcot662 comparetotal 0E1 0 -> 1 -dqcot663 comparetotal 0E2 0 -> 1 -dqcot664 comparetotal -0E1 -0E1 -> 0 -dqcot665 comparetotal -0E2 -0E1 -> -1 -dqcot666 comparetotal 0E1 -0E1 -> 1 -dqcot667 comparetotal 0E2 -0E1 -> 1 -dqcot668 comparetotal -0E1 -0E2 -> 1 -dqcot669 comparetotal -0E2 -0E2 -> 0 -dqcot670 comparetotal 0E1 -0E2 -> 1 -dqcot671 comparetotal 0E2 -0E2 -> 1 -dqcot672 comparetotal -0E1 0E1 -> -1 -dqcot673 comparetotal -0E2 0E1 -> -1 -dqcot674 comparetotal 0E1 0E1 -> 0 -dqcot675 comparetotal 0E2 0E1 -> 1 -dqcot676 comparetotal -0E1 0E2 -> -1 -dqcot677 comparetotal -0E2 0E2 -> -1 -dqcot678 comparetotal 0E1 0E2 -> -1 -dqcot679 comparetotal 0E2 0E2 -> 0 - --- trailing zeros; unit-y -dqcot680 comparetotal 12 12 -> 0 -dqcot681 comparetotal 12 12.0 -> 1 -dqcot682 comparetotal 12 12.00 -> 1 -dqcot683 comparetotal 12 12.000 -> 1 -dqcot684 comparetotal 12 12.0000 -> 1 -dqcot685 comparetotal 12 12.00000 -> 1 -dqcot686 comparetotal 12 12.000000 -> 1 -dqcot687 comparetotal 12 12.0000000 -> 1 -dqcot688 comparetotal 12 12.00000000 -> 1 -dqcot689 comparetotal 12 12.000000000 -> 1 -dqcot690 comparetotal 12 12 -> 0 -dqcot691 comparetotal 12.0 12 -> -1 -dqcot692 comparetotal 12.00 12 -> -1 -dqcot693 comparetotal 12.000 12 -> -1 -dqcot694 comparetotal 12.0000 12 -> -1 -dqcot695 comparetotal 12.00000 12 -> -1 -dqcot696 comparetotal 12.000000 12 -> -1 -dqcot697 comparetotal 12.0000000 12 -> -1 -dqcot698 comparetotal 12.00000000 12 -> -1 -dqcot699 comparetotal 12.000000000 12 -> -1 - --- old long operand checks -dqcot701 comparetotal 12345678000 1 -> 1 -dqcot702 comparetotal 1 12345678000 -> -1 -dqcot703 comparetotal 1234567800 1 -> 1 -dqcot704 comparetotal 1 1234567800 -> -1 -dqcot705 comparetotal 1234567890 1 -> 1 -dqcot706 comparetotal 1 1234567890 -> -1 -dqcot707 comparetotal 1234567891 1 -> 1 -dqcot708 comparetotal 1 1234567891 -> -1 -dqcot709 comparetotal 12345678901 1 -> 1 -dqcot710 comparetotal 1 12345678901 -> -1 -dqcot711 comparetotal 1234567896 1 -> 1 -dqcot712 comparetotal 1 1234567896 -> -1 -dqcot713 comparetotal -1234567891 1 -> -1 -dqcot714 comparetotal 1 -1234567891 -> 1 -dqcot715 comparetotal -12345678901 1 -> -1 -dqcot716 comparetotal 1 -12345678901 -> 1 -dqcot717 comparetotal -1234567896 1 -> -1 -dqcot718 comparetotal 1 -1234567896 -> 1 - --- old residue cases -dqcot740 comparetotal 1 0.9999999 -> 1 -dqcot741 comparetotal 1 0.999999 -> 1 -dqcot742 comparetotal 1 0.99999 -> 1 -dqcot743 comparetotal 1 1.0000 -> 1 -dqcot744 comparetotal 1 1.00001 -> -1 -dqcot745 comparetotal 1 1.000001 -> -1 -dqcot746 comparetotal 1 1.0000001 -> -1 -dqcot750 comparetotal 0.9999999 1 -> -1 -dqcot751 comparetotal 0.999999 1 -> -1 -dqcot752 comparetotal 0.99999 1 -> -1 -dqcot753 comparetotal 1.0000 1 -> -1 -dqcot754 comparetotal 1.00001 1 -> 1 -dqcot755 comparetotal 1.000001 1 -> 1 -dqcot756 comparetotal 1.0000001 1 -> 1 - --- Specials -dqcot780 comparetotal Inf -Inf -> 1 -dqcot781 comparetotal Inf -1000 -> 1 -dqcot782 comparetotal Inf -1 -> 1 -dqcot783 comparetotal Inf -0 -> 1 -dqcot784 comparetotal Inf 0 -> 1 -dqcot785 comparetotal Inf 1 -> 1 -dqcot786 comparetotal Inf 1000 -> 1 -dqcot787 comparetotal Inf Inf -> 0 -dqcot788 comparetotal -1000 Inf -> -1 -dqcot789 comparetotal -Inf Inf -> -1 -dqcot790 comparetotal -1 Inf -> -1 -dqcot791 comparetotal -0 Inf -> -1 -dqcot792 comparetotal 0 Inf -> -1 -dqcot793 comparetotal 1 Inf -> -1 -dqcot794 comparetotal 1000 Inf -> -1 -dqcot795 comparetotal Inf Inf -> 0 - -dqcot800 comparetotal -Inf -Inf -> 0 -dqcot801 comparetotal -Inf -1000 -> -1 -dqcot802 comparetotal -Inf -1 -> -1 -dqcot803 comparetotal -Inf -0 -> -1 -dqcot804 comparetotal -Inf 0 -> -1 -dqcot805 comparetotal -Inf 1 -> -1 -dqcot806 comparetotal -Inf 1000 -> -1 -dqcot807 comparetotal -Inf Inf -> -1 -dqcot808 comparetotal -Inf -Inf -> 0 -dqcot809 comparetotal -1000 -Inf -> 1 -dqcot810 comparetotal -1 -Inf -> 1 -dqcot811 comparetotal -0 -Inf -> 1 -dqcot812 comparetotal 0 -Inf -> 1 -dqcot813 comparetotal 1 -Inf -> 1 -dqcot814 comparetotal 1000 -Inf -> 1 -dqcot815 comparetotal Inf -Inf -> 1 - -dqcot821 comparetotal NaN -Inf -> 1 -dqcot822 comparetotal NaN -1000 -> 1 -dqcot823 comparetotal NaN -1 -> 1 -dqcot824 comparetotal NaN -0 -> 1 -dqcot825 comparetotal NaN 0 -> 1 -dqcot826 comparetotal NaN 1 -> 1 -dqcot827 comparetotal NaN 1000 -> 1 -dqcot828 comparetotal NaN Inf -> 1 -dqcot829 comparetotal NaN NaN -> 0 -dqcot830 comparetotal -Inf NaN -> -1 -dqcot831 comparetotal -1000 NaN -> -1 -dqcot832 comparetotal -1 NaN -> -1 -dqcot833 comparetotal -0 NaN -> -1 -dqcot834 comparetotal 0 NaN -> -1 -dqcot835 comparetotal 1 NaN -> -1 -dqcot836 comparetotal 1000 NaN -> -1 -dqcot837 comparetotal Inf NaN -> -1 -dqcot838 comparetotal -NaN -NaN -> 0 -dqcot839 comparetotal +NaN -NaN -> 1 -dqcot840 comparetotal -NaN +NaN -> -1 - -dqcot841 comparetotal sNaN -sNaN -> 1 -dqcot842 comparetotal sNaN -NaN -> 1 -dqcot843 comparetotal sNaN -Inf -> 1 -dqcot844 comparetotal sNaN -1000 -> 1 -dqcot845 comparetotal sNaN -1 -> 1 -dqcot846 comparetotal sNaN -0 -> 1 -dqcot847 comparetotal sNaN 0 -> 1 -dqcot848 comparetotal sNaN 1 -> 1 -dqcot849 comparetotal sNaN 1000 -> 1 -dqcot850 comparetotal sNaN NaN -> -1 -dqcot851 comparetotal sNaN sNaN -> 0 - -dqcot852 comparetotal -sNaN sNaN -> -1 -dqcot853 comparetotal -NaN sNaN -> -1 -dqcot854 comparetotal -Inf sNaN -> -1 -dqcot855 comparetotal -1000 sNaN -> -1 -dqcot856 comparetotal -1 sNaN -> -1 -dqcot857 comparetotal -0 sNaN -> -1 -dqcot858 comparetotal 0 sNaN -> -1 -dqcot859 comparetotal 1 sNaN -> -1 -dqcot860 comparetotal 1000 sNaN -> -1 -dqcot861 comparetotal Inf sNaN -> -1 -dqcot862 comparetotal NaN sNaN -> 1 -dqcot863 comparetotal sNaN sNaN -> 0 - -dqcot871 comparetotal -sNaN -sNaN -> 0 -dqcot872 comparetotal -sNaN -NaN -> 1 -dqcot873 comparetotal -sNaN -Inf -> -1 -dqcot874 comparetotal -sNaN -1000 -> -1 -dqcot875 comparetotal -sNaN -1 -> -1 -dqcot876 comparetotal -sNaN -0 -> -1 -dqcot877 comparetotal -sNaN 0 -> -1 -dqcot878 comparetotal -sNaN 1 -> -1 -dqcot879 comparetotal -sNaN 1000 -> -1 -dqcot880 comparetotal -sNaN NaN -> -1 -dqcot881 comparetotal -sNaN sNaN -> -1 - -dqcot882 comparetotal -sNaN -sNaN -> 0 -dqcot883 comparetotal -NaN -sNaN -> -1 -dqcot884 comparetotal -Inf -sNaN -> 1 -dqcot885 comparetotal -1000 -sNaN -> 1 -dqcot886 comparetotal -1 -sNaN -> 1 -dqcot887 comparetotal -0 -sNaN -> 1 -dqcot888 comparetotal 0 -sNaN -> 1 -dqcot889 comparetotal 1 -sNaN -> 1 -dqcot890 comparetotal 1000 -sNaN -> 1 -dqcot891 comparetotal Inf -sNaN -> 1 -dqcot892 comparetotal NaN -sNaN -> 1 -dqcot893 comparetotal sNaN -sNaN -> 1 - --- NaNs with payload -dqcot960 comparetotal NaN9 -Inf -> 1 -dqcot961 comparetotal NaN8 999 -> 1 -dqcot962 comparetotal NaN77 Inf -> 1 -dqcot963 comparetotal -NaN67 NaN5 -> -1 -dqcot964 comparetotal -Inf -NaN4 -> 1 -dqcot965 comparetotal -999 -NaN33 -> 1 -dqcot966 comparetotal Inf NaN2 -> -1 - -dqcot970 comparetotal -NaN41 -NaN42 -> 1 -dqcot971 comparetotal +NaN41 -NaN42 -> 1 -dqcot972 comparetotal -NaN41 +NaN42 -> -1 -dqcot973 comparetotal +NaN41 +NaN42 -> -1 -dqcot974 comparetotal -NaN42 -NaN01 -> -1 -dqcot975 comparetotal +NaN42 -NaN01 -> 1 -dqcot976 comparetotal -NaN42 +NaN01 -> -1 -dqcot977 comparetotal +NaN42 +NaN01 -> 1 - -dqcot980 comparetotal -sNaN771 -sNaN772 -> 1 -dqcot981 comparetotal +sNaN771 -sNaN772 -> 1 -dqcot982 comparetotal -sNaN771 +sNaN772 -> -1 -dqcot983 comparetotal +sNaN771 +sNaN772 -> -1 -dqcot984 comparetotal -sNaN772 -sNaN771 -> -1 -dqcot985 comparetotal +sNaN772 -sNaN771 -> 1 -dqcot986 comparetotal -sNaN772 +sNaN771 -> -1 -dqcot987 comparetotal +sNaN772 +sNaN771 -> 1 - -dqcot991 comparetotal -sNaN99 -Inf -> -1 -dqcot992 comparetotal sNaN98 -11 -> 1 -dqcot993 comparetotal sNaN97 NaN -> -1 -dqcot994 comparetotal sNaN16 sNaN94 -> -1 -dqcot995 comparetotal NaN85 sNaN83 -> 1 -dqcot996 comparetotal -Inf sNaN92 -> -1 -dqcot997 comparetotal 088 sNaN81 -> -1 -dqcot998 comparetotal Inf sNaN90 -> -1 -dqcot999 comparetotal NaN -sNaN89 -> 1 - --- spread zeros -dqcot1110 comparetotal 0E-6143 0 -> -1 -dqcot1111 comparetotal 0E-6143 -0 -> 1 -dqcot1112 comparetotal -0E-6143 0 -> -1 -dqcot1113 comparetotal -0E-6143 -0 -> 1 -dqcot1114 comparetotal 0E-6143 0E+6144 -> -1 -dqcot1115 comparetotal 0E-6143 -0E+6144 -> 1 -dqcot1116 comparetotal -0E-6143 0E+6144 -> -1 -dqcot1117 comparetotal -0E-6143 -0E+6144 -> 1 -dqcot1118 comparetotal 0 0E+6144 -> -1 -dqcot1119 comparetotal 0 -0E+6144 -> 1 -dqcot1120 comparetotal -0 0E+6144 -> -1 -dqcot1121 comparetotal -0 -0E+6144 -> 1 - -dqcot1130 comparetotal 0E+6144 0 -> 1 -dqcot1131 comparetotal 0E+6144 -0 -> 1 -dqcot1132 comparetotal -0E+6144 0 -> -1 -dqcot1133 comparetotal -0E+6144 -0 -> -1 -dqcot1134 comparetotal 0E+6144 0E-6143 -> 1 -dqcot1135 comparetotal 0E+6144 -0E-6143 -> 1 -dqcot1136 comparetotal -0E+6144 0E-6143 -> -1 -dqcot1137 comparetotal -0E+6144 -0E-6143 -> -1 -dqcot1138 comparetotal 0 0E-6143 -> 1 -dqcot1139 comparetotal 0 -0E-6143 -> 1 -dqcot1140 comparetotal -0 0E-6143 -> -1 -dqcot1141 comparetotal -0 -0E-6143 -> -1 - --- Null tests -dqcot9990 comparetotal 10 # -> NaN Invalid_operation -dqcot9991 comparetotal # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqCompareTotal.decTest -- decQuad comparison using total ordering -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqcot001 comparetotal -2 -2 -> 0 +dqcot002 comparetotal -2 -1 -> -1 +dqcot003 comparetotal -2 0 -> -1 +dqcot004 comparetotal -2 1 -> -1 +dqcot005 comparetotal -2 2 -> -1 +dqcot006 comparetotal -1 -2 -> 1 +dqcot007 comparetotal -1 -1 -> 0 +dqcot008 comparetotal -1 0 -> -1 +dqcot009 comparetotal -1 1 -> -1 +dqcot010 comparetotal -1 2 -> -1 +dqcot011 comparetotal 0 -2 -> 1 +dqcot012 comparetotal 0 -1 -> 1 +dqcot013 comparetotal 0 0 -> 0 +dqcot014 comparetotal 0 1 -> -1 +dqcot015 comparetotal 0 2 -> -1 +dqcot016 comparetotal 1 -2 -> 1 +dqcot017 comparetotal 1 -1 -> 1 +dqcot018 comparetotal 1 0 -> 1 +dqcot019 comparetotal 1 1 -> 0 +dqcot020 comparetotal 1 2 -> -1 +dqcot021 comparetotal 2 -2 -> 1 +dqcot022 comparetotal 2 -1 -> 1 +dqcot023 comparetotal 2 0 -> 1 +dqcot025 comparetotal 2 1 -> 1 +dqcot026 comparetotal 2 2 -> 0 + +dqcot031 comparetotal -20 -20 -> 0 +dqcot032 comparetotal -20 -10 -> -1 +dqcot033 comparetotal -20 00 -> -1 +dqcot034 comparetotal -20 10 -> -1 +dqcot035 comparetotal -20 20 -> -1 +dqcot036 comparetotal -10 -20 -> 1 +dqcot037 comparetotal -10 -10 -> 0 +dqcot038 comparetotal -10 00 -> -1 +dqcot039 comparetotal -10 10 -> -1 +dqcot040 comparetotal -10 20 -> -1 +dqcot041 comparetotal 00 -20 -> 1 +dqcot042 comparetotal 00 -10 -> 1 +dqcot043 comparetotal 00 00 -> 0 +dqcot044 comparetotal 00 10 -> -1 +dqcot045 comparetotal 00 20 -> -1 +dqcot046 comparetotal 10 -20 -> 1 +dqcot047 comparetotal 10 -10 -> 1 +dqcot048 comparetotal 10 00 -> 1 +dqcot049 comparetotal 10 10 -> 0 +dqcot050 comparetotal 10 20 -> -1 +dqcot051 comparetotal 20 -20 -> 1 +dqcot052 comparetotal 20 -10 -> 1 +dqcot053 comparetotal 20 00 -> 1 +dqcot055 comparetotal 20 10 -> 1 +dqcot056 comparetotal 20 20 -> 0 + +dqcot061 comparetotal -2.0 -2.0 -> 0 +dqcot062 comparetotal -2.0 -1.0 -> -1 +dqcot063 comparetotal -2.0 0.0 -> -1 +dqcot064 comparetotal -2.0 1.0 -> -1 +dqcot065 comparetotal -2.0 2.0 -> -1 +dqcot066 comparetotal -1.0 -2.0 -> 1 +dqcot067 comparetotal -1.0 -1.0 -> 0 +dqcot068 comparetotal -1.0 0.0 -> -1 +dqcot069 comparetotal -1.0 1.0 -> -1 +dqcot070 comparetotal -1.0 2.0 -> -1 +dqcot071 comparetotal 0.0 -2.0 -> 1 +dqcot072 comparetotal 0.0 -1.0 -> 1 +dqcot073 comparetotal 0.0 0.0 -> 0 +dqcot074 comparetotal 0.0 1.0 -> -1 +dqcot075 comparetotal 0.0 2.0 -> -1 +dqcot076 comparetotal 1.0 -2.0 -> 1 +dqcot077 comparetotal 1.0 -1.0 -> 1 +dqcot078 comparetotal 1.0 0.0 -> 1 +dqcot079 comparetotal 1.0 1.0 -> 0 +dqcot080 comparetotal 1.0 2.0 -> -1 +dqcot081 comparetotal 2.0 -2.0 -> 1 +dqcot082 comparetotal 2.0 -1.0 -> 1 +dqcot083 comparetotal 2.0 0.0 -> 1 +dqcot085 comparetotal 2.0 1.0 -> 1 +dqcot086 comparetotal 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +dqcot090 comparetotal 9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 +dqcot091 comparetotal -9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> -1 +dqcot092 comparetotal 9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 1 +dqcot093 comparetotal -9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +dqcot100 comparetotal 7.0 7.0 -> 0 +dqcot101 comparetotal 7.0 7 -> -1 +dqcot102 comparetotal 7 7.0 -> 1 +dqcot103 comparetotal 7E+0 7.0 -> 1 +dqcot104 comparetotal 70E-1 7.0 -> 0 +dqcot105 comparetotal 0.7E+1 7 -> 0 +dqcot106 comparetotal 70E-1 7 -> -1 +dqcot107 comparetotal 7.0 7E+0 -> -1 +dqcot108 comparetotal 7.0 70E-1 -> 0 +dqcot109 comparetotal 7 0.7E+1 -> 0 +dqcot110 comparetotal 7 70E-1 -> 1 + +dqcot120 comparetotal 8.0 7.0 -> 1 +dqcot121 comparetotal 8.0 7 -> 1 +dqcot122 comparetotal 8 7.0 -> 1 +dqcot123 comparetotal 8E+0 7.0 -> 1 +dqcot124 comparetotal 80E-1 7.0 -> 1 +dqcot125 comparetotal 0.8E+1 7 -> 1 +dqcot126 comparetotal 80E-1 7 -> 1 +dqcot127 comparetotal 8.0 7E+0 -> 1 +dqcot128 comparetotal 8.0 70E-1 -> 1 +dqcot129 comparetotal 8 0.7E+1 -> 1 +dqcot130 comparetotal 8 70E-1 -> 1 + +dqcot140 comparetotal 8.0 9.0 -> -1 +dqcot141 comparetotal 8.0 9 -> -1 +dqcot142 comparetotal 8 9.0 -> -1 +dqcot143 comparetotal 8E+0 9.0 -> -1 +dqcot144 comparetotal 80E-1 9.0 -> -1 +dqcot145 comparetotal 0.8E+1 9 -> -1 +dqcot146 comparetotal 80E-1 9 -> -1 +dqcot147 comparetotal 8.0 9E+0 -> -1 +dqcot148 comparetotal 8.0 90E-1 -> -1 +dqcot149 comparetotal 8 0.9E+1 -> -1 +dqcot150 comparetotal 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +dqcot200 comparetotal -7.0 7.0 -> -1 +dqcot201 comparetotal -7.0 7 -> -1 +dqcot202 comparetotal -7 7.0 -> -1 +dqcot203 comparetotal -7E+0 7.0 -> -1 +dqcot204 comparetotal -70E-1 7.0 -> -1 +dqcot205 comparetotal -0.7E+1 7 -> -1 +dqcot206 comparetotal -70E-1 7 -> -1 +dqcot207 comparetotal -7.0 7E+0 -> -1 +dqcot208 comparetotal -7.0 70E-1 -> -1 +dqcot209 comparetotal -7 0.7E+1 -> -1 +dqcot210 comparetotal -7 70E-1 -> -1 + +dqcot220 comparetotal -8.0 7.0 -> -1 +dqcot221 comparetotal -8.0 7 -> -1 +dqcot222 comparetotal -8 7.0 -> -1 +dqcot223 comparetotal -8E+0 7.0 -> -1 +dqcot224 comparetotal -80E-1 7.0 -> -1 +dqcot225 comparetotal -0.8E+1 7 -> -1 +dqcot226 comparetotal -80E-1 7 -> -1 +dqcot227 comparetotal -8.0 7E+0 -> -1 +dqcot228 comparetotal -8.0 70E-1 -> -1 +dqcot229 comparetotal -8 0.7E+1 -> -1 +dqcot230 comparetotal -8 70E-1 -> -1 + +dqcot240 comparetotal -8.0 9.0 -> -1 +dqcot241 comparetotal -8.0 9 -> -1 +dqcot242 comparetotal -8 9.0 -> -1 +dqcot243 comparetotal -8E+0 9.0 -> -1 +dqcot244 comparetotal -80E-1 9.0 -> -1 +dqcot245 comparetotal -0.8E+1 9 -> -1 +dqcot246 comparetotal -80E-1 9 -> -1 +dqcot247 comparetotal -8.0 9E+0 -> -1 +dqcot248 comparetotal -8.0 90E-1 -> -1 +dqcot249 comparetotal -8 0.9E+1 -> -1 +dqcot250 comparetotal -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +dqcot300 comparetotal 7.0 -7.0 -> 1 +dqcot301 comparetotal 7.0 -7 -> 1 +dqcot302 comparetotal 7 -7.0 -> 1 +dqcot303 comparetotal 7E+0 -7.0 -> 1 +dqcot304 comparetotal 70E-1 -7.0 -> 1 +dqcot305 comparetotal .7E+1 -7 -> 1 +dqcot306 comparetotal 70E-1 -7 -> 1 +dqcot307 comparetotal 7.0 -7E+0 -> 1 +dqcot308 comparetotal 7.0 -70E-1 -> 1 +dqcot309 comparetotal 7 -.7E+1 -> 1 +dqcot310 comparetotal 7 -70E-1 -> 1 + +dqcot320 comparetotal 8.0 -7.0 -> 1 +dqcot321 comparetotal 8.0 -7 -> 1 +dqcot322 comparetotal 8 -7.0 -> 1 +dqcot323 comparetotal 8E+0 -7.0 -> 1 +dqcot324 comparetotal 80E-1 -7.0 -> 1 +dqcot325 comparetotal .8E+1 -7 -> 1 +dqcot326 comparetotal 80E-1 -7 -> 1 +dqcot327 comparetotal 8.0 -7E+0 -> 1 +dqcot328 comparetotal 8.0 -70E-1 -> 1 +dqcot329 comparetotal 8 -.7E+1 -> 1 +dqcot330 comparetotal 8 -70E-1 -> 1 + +dqcot340 comparetotal 8.0 -9.0 -> 1 +dqcot341 comparetotal 8.0 -9 -> 1 +dqcot342 comparetotal 8 -9.0 -> 1 +dqcot343 comparetotal 8E+0 -9.0 -> 1 +dqcot344 comparetotal 80E-1 -9.0 -> 1 +dqcot345 comparetotal .8E+1 -9 -> 1 +dqcot346 comparetotal 80E-1 -9 -> 1 +dqcot347 comparetotal 8.0 -9E+0 -> 1 +dqcot348 comparetotal 8.0 -90E-1 -> 1 +dqcot349 comparetotal 8 -.9E+1 -> 1 +dqcot350 comparetotal 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +dqcot400 comparetotal -7.0 -7.0 -> 0 +dqcot401 comparetotal -7.0 -7 -> 1 +dqcot402 comparetotal -7 -7.0 -> -1 +dqcot403 comparetotal -7E+0 -7.0 -> -1 +dqcot404 comparetotal -70E-1 -7.0 -> 0 +dqcot405 comparetotal -.7E+1 -7 -> 0 +dqcot406 comparetotal -70E-1 -7 -> 1 +dqcot407 comparetotal -7.0 -7E+0 -> 1 +dqcot408 comparetotal -7.0 -70E-1 -> 0 +dqcot409 comparetotal -7 -.7E+1 -> 0 +dqcot410 comparetotal -7 -70E-1 -> -1 + +dqcot420 comparetotal -8.0 -7.0 -> -1 +dqcot421 comparetotal -8.0 -7 -> -1 +dqcot422 comparetotal -8 -7.0 -> -1 +dqcot423 comparetotal -8E+0 -7.0 -> -1 +dqcot424 comparetotal -80E-1 -7.0 -> -1 +dqcot425 comparetotal -.8E+1 -7 -> -1 +dqcot426 comparetotal -80E-1 -7 -> -1 +dqcot427 comparetotal -8.0 -7E+0 -> -1 +dqcot428 comparetotal -8.0 -70E-1 -> -1 +dqcot429 comparetotal -8 -.7E+1 -> -1 +dqcot430 comparetotal -8 -70E-1 -> -1 + +dqcot440 comparetotal -8.0 -9.0 -> 1 +dqcot441 comparetotal -8.0 -9 -> 1 +dqcot442 comparetotal -8 -9.0 -> 1 +dqcot443 comparetotal -8E+0 -9.0 -> 1 +dqcot444 comparetotal -80E-1 -9.0 -> 1 +dqcot445 comparetotal -.8E+1 -9 -> 1 +dqcot446 comparetotal -80E-1 -9 -> 1 +dqcot447 comparetotal -8.0 -9E+0 -> 1 +dqcot448 comparetotal -8.0 -90E-1 -> 1 +dqcot449 comparetotal -8 -.9E+1 -> 1 +dqcot450 comparetotal -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +dqcot473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 +dqcot474 comparetotal 123.456000000000E+89 123.456E+89 -> -1 +dqcot475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 +dqcot476 comparetotal 123.4560000000E+89 123.456E+89 -> -1 +dqcot477 comparetotal 123.456000000E-89 123.456E-89 -> -1 +dqcot478 comparetotal 123.45600000E+89 123.456E+89 -> -1 +dqcot479 comparetotal 123.4560000E-89 123.456E-89 -> -1 +dqcot480 comparetotal 123.456000E+89 123.456E+89 -> -1 +dqcot481 comparetotal 123.45600E-89 123.456E-89 -> -1 +dqcot482 comparetotal 123.4560E+89 123.456E+89 -> -1 +dqcot483 comparetotal 123.456E-89 123.456E-89 -> 0 +dqcot487 comparetotal 123.456E+89 123.4560000000000E+89 -> 1 +dqcot488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 +dqcot489 comparetotal 123.456E+89 123.45600000000E+89 -> 1 +dqcot490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 +dqcot491 comparetotal 123.456E+89 123.456000000E+89 -> 1 +dqcot492 comparetotal 123.456E-89 123.45600000E-89 -> 1 +dqcot493 comparetotal 123.456E+89 123.4560000E+89 -> 1 +dqcot494 comparetotal 123.456E-89 123.456000E-89 -> 1 +dqcot495 comparetotal 123.456E+89 123.45600E+89 -> 1 +dqcot496 comparetotal 123.456E-89 123.4560E-89 -> 1 +dqcot497 comparetotal 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +dqcot498 comparetotal 1 1E-17 -> 1 +dqcot499 comparetotal 1 1E-16 -> 1 +dqcot500 comparetotal 1 1E-15 -> 1 +dqcot501 comparetotal 1 1E-14 -> 1 +dqcot502 comparetotal 1 1E-13 -> 1 +dqcot503 comparetotal 1 1E-12 -> 1 +dqcot504 comparetotal 1 1E-11 -> 1 +dqcot505 comparetotal 1 1E-10 -> 1 +dqcot506 comparetotal 1 1E-9 -> 1 +dqcot507 comparetotal 1 1E-8 -> 1 +dqcot508 comparetotal 1 1E-7 -> 1 +dqcot509 comparetotal 1 1E-6 -> 1 +dqcot510 comparetotal 1 1E-5 -> 1 +dqcot511 comparetotal 1 1E-4 -> 1 +dqcot512 comparetotal 1 1E-3 -> 1 +dqcot513 comparetotal 1 1E-2 -> 1 +dqcot514 comparetotal 1 1E-1 -> 1 +dqcot515 comparetotal 1 1E-0 -> 0 +dqcot516 comparetotal 1 1E+1 -> -1 +dqcot517 comparetotal 1 1E+2 -> -1 +dqcot518 comparetotal 1 1E+3 -> -1 +dqcot519 comparetotal 1 1E+4 -> -1 +dqcot521 comparetotal 1 1E+5 -> -1 +dqcot522 comparetotal 1 1E+6 -> -1 +dqcot523 comparetotal 1 1E+7 -> -1 +dqcot524 comparetotal 1 1E+8 -> -1 +dqcot525 comparetotal 1 1E+9 -> -1 +dqcot526 comparetotal 1 1E+10 -> -1 +dqcot527 comparetotal 1 1E+11 -> -1 +dqcot528 comparetotal 1 1E+12 -> -1 +dqcot529 comparetotal 1 1E+13 -> -1 +dqcot530 comparetotal 1 1E+14 -> -1 +dqcot531 comparetotal 1 1E+15 -> -1 +dqcot532 comparetotal 1 1E+16 -> -1 +dqcot533 comparetotal 1 1E+17 -> -1 +-- LR swap +dqcot538 comparetotal 1E-17 1 -> -1 +dqcot539 comparetotal 1E-16 1 -> -1 +dqcot540 comparetotal 1E-15 1 -> -1 +dqcot541 comparetotal 1E-14 1 -> -1 +dqcot542 comparetotal 1E-13 1 -> -1 +dqcot543 comparetotal 1E-12 1 -> -1 +dqcot544 comparetotal 1E-11 1 -> -1 +dqcot545 comparetotal 1E-10 1 -> -1 +dqcot546 comparetotal 1E-9 1 -> -1 +dqcot547 comparetotal 1E-8 1 -> -1 +dqcot548 comparetotal 1E-7 1 -> -1 +dqcot549 comparetotal 1E-6 1 -> -1 +dqcot550 comparetotal 1E-5 1 -> -1 +dqcot551 comparetotal 1E-4 1 -> -1 +dqcot552 comparetotal 1E-3 1 -> -1 +dqcot553 comparetotal 1E-2 1 -> -1 +dqcot554 comparetotal 1E-1 1 -> -1 +dqcot555 comparetotal 1E-0 1 -> 0 +dqcot556 comparetotal 1E+1 1 -> 1 +dqcot557 comparetotal 1E+2 1 -> 1 +dqcot558 comparetotal 1E+3 1 -> 1 +dqcot559 comparetotal 1E+4 1 -> 1 +dqcot561 comparetotal 1E+5 1 -> 1 +dqcot562 comparetotal 1E+6 1 -> 1 +dqcot563 comparetotal 1E+7 1 -> 1 +dqcot564 comparetotal 1E+8 1 -> 1 +dqcot565 comparetotal 1E+9 1 -> 1 +dqcot566 comparetotal 1E+10 1 -> 1 +dqcot567 comparetotal 1E+11 1 -> 1 +dqcot568 comparetotal 1E+12 1 -> 1 +dqcot569 comparetotal 1E+13 1 -> 1 +dqcot570 comparetotal 1E+14 1 -> 1 +dqcot571 comparetotal 1E+15 1 -> 1 +dqcot572 comparetotal 1E+16 1 -> 1 +dqcot573 comparetotal 1E+17 1 -> 1 +-- similar with a useful coefficient, one side only +dqcot578 comparetotal 0.000000987654321 1E-17 -> 1 +dqcot579 comparetotal 0.000000987654321 1E-16 -> 1 +dqcot580 comparetotal 0.000000987654321 1E-15 -> 1 +dqcot581 comparetotal 0.000000987654321 1E-14 -> 1 +dqcot582 comparetotal 0.000000987654321 1E-13 -> 1 +dqcot583 comparetotal 0.000000987654321 1E-12 -> 1 +dqcot584 comparetotal 0.000000987654321 1E-11 -> 1 +dqcot585 comparetotal 0.000000987654321 1E-10 -> 1 +dqcot586 comparetotal 0.000000987654321 1E-9 -> 1 +dqcot587 comparetotal 0.000000987654321 1E-8 -> 1 +dqcot588 comparetotal 0.000000987654321 1E-7 -> 1 +dqcot589 comparetotal 0.000000987654321 1E-6 -> -1 +dqcot590 comparetotal 0.000000987654321 1E-5 -> -1 +dqcot591 comparetotal 0.000000987654321 1E-4 -> -1 +dqcot592 comparetotal 0.000000987654321 1E-3 -> -1 +dqcot593 comparetotal 0.000000987654321 1E-2 -> -1 +dqcot594 comparetotal 0.000000987654321 1E-1 -> -1 +dqcot595 comparetotal 0.000000987654321 1E-0 -> -1 +dqcot596 comparetotal 0.000000987654321 1E+1 -> -1 +dqcot597 comparetotal 0.000000987654321 1E+2 -> -1 +dqcot598 comparetotal 0.000000987654321 1E+3 -> -1 +dqcot599 comparetotal 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +dqcot600 comparetotal 12 12.2345 -> -1 +dqcot601 comparetotal 12.0 12.2345 -> -1 +dqcot602 comparetotal 12.00 12.2345 -> -1 +dqcot603 comparetotal 12.000 12.2345 -> -1 +dqcot604 comparetotal 12.0000 12.2345 -> -1 +dqcot605 comparetotal 12.00000 12.2345 -> -1 +dqcot606 comparetotal 12.000000 12.2345 -> -1 +dqcot607 comparetotal 12.0000000 12.2345 -> -1 +dqcot608 comparetotal 12.00000000 12.2345 -> -1 +dqcot609 comparetotal 12.000000000 12.2345 -> -1 +dqcot610 comparetotal 12.1234 12 -> 1 +dqcot611 comparetotal 12.1234 12.0 -> 1 +dqcot612 comparetotal 12.1234 12.00 -> 1 +dqcot613 comparetotal 12.1234 12.000 -> 1 +dqcot614 comparetotal 12.1234 12.0000 -> 1 +dqcot615 comparetotal 12.1234 12.00000 -> 1 +dqcot616 comparetotal 12.1234 12.000000 -> 1 +dqcot617 comparetotal 12.1234 12.0000000 -> 1 +dqcot618 comparetotal 12.1234 12.00000000 -> 1 +dqcot619 comparetotal 12.1234 12.000000000 -> 1 +dqcot620 comparetotal -12 -12.2345 -> 1 +dqcot621 comparetotal -12.0 -12.2345 -> 1 +dqcot622 comparetotal -12.00 -12.2345 -> 1 +dqcot623 comparetotal -12.000 -12.2345 -> 1 +dqcot624 comparetotal -12.0000 -12.2345 -> 1 +dqcot625 comparetotal -12.00000 -12.2345 -> 1 +dqcot626 comparetotal -12.000000 -12.2345 -> 1 +dqcot627 comparetotal -12.0000000 -12.2345 -> 1 +dqcot628 comparetotal -12.00000000 -12.2345 -> 1 +dqcot629 comparetotal -12.000000000 -12.2345 -> 1 +dqcot630 comparetotal -12.1234 -12 -> -1 +dqcot631 comparetotal -12.1234 -12.0 -> -1 +dqcot632 comparetotal -12.1234 -12.00 -> -1 +dqcot633 comparetotal -12.1234 -12.000 -> -1 +dqcot634 comparetotal -12.1234 -12.0000 -> -1 +dqcot635 comparetotal -12.1234 -12.00000 -> -1 +dqcot636 comparetotal -12.1234 -12.000000 -> -1 +dqcot637 comparetotal -12.1234 -12.0000000 -> -1 +dqcot638 comparetotal -12.1234 -12.00000000 -> -1 +dqcot639 comparetotal -12.1234 -12.000000000 -> -1 + +-- extended zeros +dqcot640 comparetotal 0 0 -> 0 +dqcot641 comparetotal 0 -0 -> 1 +dqcot642 comparetotal 0 -0.0 -> 1 +dqcot643 comparetotal 0 0.0 -> 1 +dqcot644 comparetotal -0 0 -> -1 +dqcot645 comparetotal -0 -0 -> 0 +dqcot646 comparetotal -0 -0.0 -> -1 +dqcot647 comparetotal -0 0.0 -> -1 +dqcot648 comparetotal 0.0 0 -> -1 +dqcot649 comparetotal 0.0 -0 -> 1 +dqcot650 comparetotal 0.0 -0.0 -> 1 +dqcot651 comparetotal 0.0 0.0 -> 0 +dqcot652 comparetotal -0.0 0 -> -1 +dqcot653 comparetotal -0.0 -0 -> 1 +dqcot654 comparetotal -0.0 -0.0 -> 0 +dqcot655 comparetotal -0.0 0.0 -> -1 + +dqcot656 comparetotal -0E1 0.0 -> -1 +dqcot657 comparetotal -0E2 0.0 -> -1 +dqcot658 comparetotal 0E1 0.0 -> 1 +dqcot659 comparetotal 0E2 0.0 -> 1 +dqcot660 comparetotal -0E1 0 -> -1 +dqcot661 comparetotal -0E2 0 -> -1 +dqcot662 comparetotal 0E1 0 -> 1 +dqcot663 comparetotal 0E2 0 -> 1 +dqcot664 comparetotal -0E1 -0E1 -> 0 +dqcot665 comparetotal -0E2 -0E1 -> -1 +dqcot666 comparetotal 0E1 -0E1 -> 1 +dqcot667 comparetotal 0E2 -0E1 -> 1 +dqcot668 comparetotal -0E1 -0E2 -> 1 +dqcot669 comparetotal -0E2 -0E2 -> 0 +dqcot670 comparetotal 0E1 -0E2 -> 1 +dqcot671 comparetotal 0E2 -0E2 -> 1 +dqcot672 comparetotal -0E1 0E1 -> -1 +dqcot673 comparetotal -0E2 0E1 -> -1 +dqcot674 comparetotal 0E1 0E1 -> 0 +dqcot675 comparetotal 0E2 0E1 -> 1 +dqcot676 comparetotal -0E1 0E2 -> -1 +dqcot677 comparetotal -0E2 0E2 -> -1 +dqcot678 comparetotal 0E1 0E2 -> -1 +dqcot679 comparetotal 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +dqcot680 comparetotal 12 12 -> 0 +dqcot681 comparetotal 12 12.0 -> 1 +dqcot682 comparetotal 12 12.00 -> 1 +dqcot683 comparetotal 12 12.000 -> 1 +dqcot684 comparetotal 12 12.0000 -> 1 +dqcot685 comparetotal 12 12.00000 -> 1 +dqcot686 comparetotal 12 12.000000 -> 1 +dqcot687 comparetotal 12 12.0000000 -> 1 +dqcot688 comparetotal 12 12.00000000 -> 1 +dqcot689 comparetotal 12 12.000000000 -> 1 +dqcot690 comparetotal 12 12 -> 0 +dqcot691 comparetotal 12.0 12 -> -1 +dqcot692 comparetotal 12.00 12 -> -1 +dqcot693 comparetotal 12.000 12 -> -1 +dqcot694 comparetotal 12.0000 12 -> -1 +dqcot695 comparetotal 12.00000 12 -> -1 +dqcot696 comparetotal 12.000000 12 -> -1 +dqcot697 comparetotal 12.0000000 12 -> -1 +dqcot698 comparetotal 12.00000000 12 -> -1 +dqcot699 comparetotal 12.000000000 12 -> -1 + +-- old long operand checks +dqcot701 comparetotal 12345678000 1 -> 1 +dqcot702 comparetotal 1 12345678000 -> -1 +dqcot703 comparetotal 1234567800 1 -> 1 +dqcot704 comparetotal 1 1234567800 -> -1 +dqcot705 comparetotal 1234567890 1 -> 1 +dqcot706 comparetotal 1 1234567890 -> -1 +dqcot707 comparetotal 1234567891 1 -> 1 +dqcot708 comparetotal 1 1234567891 -> -1 +dqcot709 comparetotal 12345678901 1 -> 1 +dqcot710 comparetotal 1 12345678901 -> -1 +dqcot711 comparetotal 1234567896 1 -> 1 +dqcot712 comparetotal 1 1234567896 -> -1 +dqcot713 comparetotal -1234567891 1 -> -1 +dqcot714 comparetotal 1 -1234567891 -> 1 +dqcot715 comparetotal -12345678901 1 -> -1 +dqcot716 comparetotal 1 -12345678901 -> 1 +dqcot717 comparetotal -1234567896 1 -> -1 +dqcot718 comparetotal 1 -1234567896 -> 1 + +-- old residue cases +dqcot740 comparetotal 1 0.9999999 -> 1 +dqcot741 comparetotal 1 0.999999 -> 1 +dqcot742 comparetotal 1 0.99999 -> 1 +dqcot743 comparetotal 1 1.0000 -> 1 +dqcot744 comparetotal 1 1.00001 -> -1 +dqcot745 comparetotal 1 1.000001 -> -1 +dqcot746 comparetotal 1 1.0000001 -> -1 +dqcot750 comparetotal 0.9999999 1 -> -1 +dqcot751 comparetotal 0.999999 1 -> -1 +dqcot752 comparetotal 0.99999 1 -> -1 +dqcot753 comparetotal 1.0000 1 -> -1 +dqcot754 comparetotal 1.00001 1 -> 1 +dqcot755 comparetotal 1.000001 1 -> 1 +dqcot756 comparetotal 1.0000001 1 -> 1 + +-- Specials +dqcot780 comparetotal Inf -Inf -> 1 +dqcot781 comparetotal Inf -1000 -> 1 +dqcot782 comparetotal Inf -1 -> 1 +dqcot783 comparetotal Inf -0 -> 1 +dqcot784 comparetotal Inf 0 -> 1 +dqcot785 comparetotal Inf 1 -> 1 +dqcot786 comparetotal Inf 1000 -> 1 +dqcot787 comparetotal Inf Inf -> 0 +dqcot788 comparetotal -1000 Inf -> -1 +dqcot789 comparetotal -Inf Inf -> -1 +dqcot790 comparetotal -1 Inf -> -1 +dqcot791 comparetotal -0 Inf -> -1 +dqcot792 comparetotal 0 Inf -> -1 +dqcot793 comparetotal 1 Inf -> -1 +dqcot794 comparetotal 1000 Inf -> -1 +dqcot795 comparetotal Inf Inf -> 0 + +dqcot800 comparetotal -Inf -Inf -> 0 +dqcot801 comparetotal -Inf -1000 -> -1 +dqcot802 comparetotal -Inf -1 -> -1 +dqcot803 comparetotal -Inf -0 -> -1 +dqcot804 comparetotal -Inf 0 -> -1 +dqcot805 comparetotal -Inf 1 -> -1 +dqcot806 comparetotal -Inf 1000 -> -1 +dqcot807 comparetotal -Inf Inf -> -1 +dqcot808 comparetotal -Inf -Inf -> 0 +dqcot809 comparetotal -1000 -Inf -> 1 +dqcot810 comparetotal -1 -Inf -> 1 +dqcot811 comparetotal -0 -Inf -> 1 +dqcot812 comparetotal 0 -Inf -> 1 +dqcot813 comparetotal 1 -Inf -> 1 +dqcot814 comparetotal 1000 -Inf -> 1 +dqcot815 comparetotal Inf -Inf -> 1 + +dqcot821 comparetotal NaN -Inf -> 1 +dqcot822 comparetotal NaN -1000 -> 1 +dqcot823 comparetotal NaN -1 -> 1 +dqcot824 comparetotal NaN -0 -> 1 +dqcot825 comparetotal NaN 0 -> 1 +dqcot826 comparetotal NaN 1 -> 1 +dqcot827 comparetotal NaN 1000 -> 1 +dqcot828 comparetotal NaN Inf -> 1 +dqcot829 comparetotal NaN NaN -> 0 +dqcot830 comparetotal -Inf NaN -> -1 +dqcot831 comparetotal -1000 NaN -> -1 +dqcot832 comparetotal -1 NaN -> -1 +dqcot833 comparetotal -0 NaN -> -1 +dqcot834 comparetotal 0 NaN -> -1 +dqcot835 comparetotal 1 NaN -> -1 +dqcot836 comparetotal 1000 NaN -> -1 +dqcot837 comparetotal Inf NaN -> -1 +dqcot838 comparetotal -NaN -NaN -> 0 +dqcot839 comparetotal +NaN -NaN -> 1 +dqcot840 comparetotal -NaN +NaN -> -1 + +dqcot841 comparetotal sNaN -sNaN -> 1 +dqcot842 comparetotal sNaN -NaN -> 1 +dqcot843 comparetotal sNaN -Inf -> 1 +dqcot844 comparetotal sNaN -1000 -> 1 +dqcot845 comparetotal sNaN -1 -> 1 +dqcot846 comparetotal sNaN -0 -> 1 +dqcot847 comparetotal sNaN 0 -> 1 +dqcot848 comparetotal sNaN 1 -> 1 +dqcot849 comparetotal sNaN 1000 -> 1 +dqcot850 comparetotal sNaN NaN -> -1 +dqcot851 comparetotal sNaN sNaN -> 0 + +dqcot852 comparetotal -sNaN sNaN -> -1 +dqcot853 comparetotal -NaN sNaN -> -1 +dqcot854 comparetotal -Inf sNaN -> -1 +dqcot855 comparetotal -1000 sNaN -> -1 +dqcot856 comparetotal -1 sNaN -> -1 +dqcot857 comparetotal -0 sNaN -> -1 +dqcot858 comparetotal 0 sNaN -> -1 +dqcot859 comparetotal 1 sNaN -> -1 +dqcot860 comparetotal 1000 sNaN -> -1 +dqcot861 comparetotal Inf sNaN -> -1 +dqcot862 comparetotal NaN sNaN -> 1 +dqcot863 comparetotal sNaN sNaN -> 0 + +dqcot871 comparetotal -sNaN -sNaN -> 0 +dqcot872 comparetotal -sNaN -NaN -> 1 +dqcot873 comparetotal -sNaN -Inf -> -1 +dqcot874 comparetotal -sNaN -1000 -> -1 +dqcot875 comparetotal -sNaN -1 -> -1 +dqcot876 comparetotal -sNaN -0 -> -1 +dqcot877 comparetotal -sNaN 0 -> -1 +dqcot878 comparetotal -sNaN 1 -> -1 +dqcot879 comparetotal -sNaN 1000 -> -1 +dqcot880 comparetotal -sNaN NaN -> -1 +dqcot881 comparetotal -sNaN sNaN -> -1 + +dqcot882 comparetotal -sNaN -sNaN -> 0 +dqcot883 comparetotal -NaN -sNaN -> -1 +dqcot884 comparetotal -Inf -sNaN -> 1 +dqcot885 comparetotal -1000 -sNaN -> 1 +dqcot886 comparetotal -1 -sNaN -> 1 +dqcot887 comparetotal -0 -sNaN -> 1 +dqcot888 comparetotal 0 -sNaN -> 1 +dqcot889 comparetotal 1 -sNaN -> 1 +dqcot890 comparetotal 1000 -sNaN -> 1 +dqcot891 comparetotal Inf -sNaN -> 1 +dqcot892 comparetotal NaN -sNaN -> 1 +dqcot893 comparetotal sNaN -sNaN -> 1 + +-- NaNs with payload +dqcot960 comparetotal NaN9 -Inf -> 1 +dqcot961 comparetotal NaN8 999 -> 1 +dqcot962 comparetotal NaN77 Inf -> 1 +dqcot963 comparetotal -NaN67 NaN5 -> -1 +dqcot964 comparetotal -Inf -NaN4 -> 1 +dqcot965 comparetotal -999 -NaN33 -> 1 +dqcot966 comparetotal Inf NaN2 -> -1 + +dqcot970 comparetotal -NaN41 -NaN42 -> 1 +dqcot971 comparetotal +NaN41 -NaN42 -> 1 +dqcot972 comparetotal -NaN41 +NaN42 -> -1 +dqcot973 comparetotal +NaN41 +NaN42 -> -1 +dqcot974 comparetotal -NaN42 -NaN01 -> -1 +dqcot975 comparetotal +NaN42 -NaN01 -> 1 +dqcot976 comparetotal -NaN42 +NaN01 -> -1 +dqcot977 comparetotal +NaN42 +NaN01 -> 1 + +dqcot980 comparetotal -sNaN771 -sNaN772 -> 1 +dqcot981 comparetotal +sNaN771 -sNaN772 -> 1 +dqcot982 comparetotal -sNaN771 +sNaN772 -> -1 +dqcot983 comparetotal +sNaN771 +sNaN772 -> -1 +dqcot984 comparetotal -sNaN772 -sNaN771 -> -1 +dqcot985 comparetotal +sNaN772 -sNaN771 -> 1 +dqcot986 comparetotal -sNaN772 +sNaN771 -> -1 +dqcot987 comparetotal +sNaN772 +sNaN771 -> 1 + +dqcot991 comparetotal -sNaN99 -Inf -> -1 +dqcot992 comparetotal sNaN98 -11 -> 1 +dqcot993 comparetotal sNaN97 NaN -> -1 +dqcot994 comparetotal sNaN16 sNaN94 -> -1 +dqcot995 comparetotal NaN85 sNaN83 -> 1 +dqcot996 comparetotal -Inf sNaN92 -> -1 +dqcot997 comparetotal 088 sNaN81 -> -1 +dqcot998 comparetotal Inf sNaN90 -> -1 +dqcot999 comparetotal NaN -sNaN89 -> 1 + +-- spread zeros +dqcot1110 comparetotal 0E-6143 0 -> -1 +dqcot1111 comparetotal 0E-6143 -0 -> 1 +dqcot1112 comparetotal -0E-6143 0 -> -1 +dqcot1113 comparetotal -0E-6143 -0 -> 1 +dqcot1114 comparetotal 0E-6143 0E+6144 -> -1 +dqcot1115 comparetotal 0E-6143 -0E+6144 -> 1 +dqcot1116 comparetotal -0E-6143 0E+6144 -> -1 +dqcot1117 comparetotal -0E-6143 -0E+6144 -> 1 +dqcot1118 comparetotal 0 0E+6144 -> -1 +dqcot1119 comparetotal 0 -0E+6144 -> 1 +dqcot1120 comparetotal -0 0E+6144 -> -1 +dqcot1121 comparetotal -0 -0E+6144 -> 1 + +dqcot1130 comparetotal 0E+6144 0 -> 1 +dqcot1131 comparetotal 0E+6144 -0 -> 1 +dqcot1132 comparetotal -0E+6144 0 -> -1 +dqcot1133 comparetotal -0E+6144 -0 -> -1 +dqcot1134 comparetotal 0E+6144 0E-6143 -> 1 +dqcot1135 comparetotal 0E+6144 -0E-6143 -> 1 +dqcot1136 comparetotal -0E+6144 0E-6143 -> -1 +dqcot1137 comparetotal -0E+6144 -0E-6143 -> -1 +dqcot1138 comparetotal 0 0E-6143 -> 1 +dqcot1139 comparetotal 0 -0E-6143 -> 1 +dqcot1140 comparetotal -0 0E-6143 -> -1 +dqcot1141 comparetotal -0 -0E-6143 -> -1 + +-- Null tests +dqcot9990 comparetotal 10 # -> NaN Invalid_operation +dqcot9991 comparetotal # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqCompareTotalMag.decTest b/Lib/test/decimaltestdata/dqCompareTotalMag.decTest index 48b3e086b1b..0b81bfbc242 100644 --- a/Lib/test/decimaltestdata/dqCompareTotalMag.decTest +++ b/Lib/test/decimaltestdata/dqCompareTotalMag.decTest @@ -1,706 +1,706 @@ ------------------------------------------------------------------------- --- dqCompareTotalMag.decTest -- decQuad comparison; abs. total order -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqctm001 comparetotmag -2 -2 -> 0 -dqctm002 comparetotmag -2 -1 -> 1 -dqctm003 comparetotmag -2 0 -> 1 -dqctm004 comparetotmag -2 1 -> 1 -dqctm005 comparetotmag -2 2 -> 0 -dqctm006 comparetotmag -1 -2 -> -1 -dqctm007 comparetotmag -1 -1 -> 0 -dqctm008 comparetotmag -1 0 -> 1 -dqctm009 comparetotmag -1 1 -> 0 -dqctm010 comparetotmag -1 2 -> -1 -dqctm011 comparetotmag 0 -2 -> -1 -dqctm012 comparetotmag 0 -1 -> -1 -dqctm013 comparetotmag 0 0 -> 0 -dqctm014 comparetotmag 0 1 -> -1 -dqctm015 comparetotmag 0 2 -> -1 -dqctm016 comparetotmag 1 -2 -> -1 -dqctm017 comparetotmag 1 -1 -> 0 -dqctm018 comparetotmag 1 0 -> 1 -dqctm019 comparetotmag 1 1 -> 0 -dqctm020 comparetotmag 1 2 -> -1 -dqctm021 comparetotmag 2 -2 -> 0 -dqctm022 comparetotmag 2 -1 -> 1 -dqctm023 comparetotmag 2 0 -> 1 -dqctm025 comparetotmag 2 1 -> 1 -dqctm026 comparetotmag 2 2 -> 0 - -dqctm031 comparetotmag -20 -20 -> 0 -dqctm032 comparetotmag -20 -10 -> 1 -dqctm033 comparetotmag -20 00 -> 1 -dqctm034 comparetotmag -20 10 -> 1 -dqctm035 comparetotmag -20 20 -> 0 -dqctm036 comparetotmag -10 -20 -> -1 -dqctm037 comparetotmag -10 -10 -> 0 -dqctm038 comparetotmag -10 00 -> 1 -dqctm039 comparetotmag -10 10 -> 0 -dqctm040 comparetotmag -10 20 -> -1 -dqctm041 comparetotmag 00 -20 -> -1 -dqctm042 comparetotmag 00 -10 -> -1 -dqctm043 comparetotmag 00 00 -> 0 -dqctm044 comparetotmag 00 10 -> -1 -dqctm045 comparetotmag 00 20 -> -1 -dqctm046 comparetotmag 10 -20 -> -1 -dqctm047 comparetotmag 10 -10 -> 0 -dqctm048 comparetotmag 10 00 -> 1 -dqctm049 comparetotmag 10 10 -> 0 -dqctm050 comparetotmag 10 20 -> -1 -dqctm051 comparetotmag 20 -20 -> 0 -dqctm052 comparetotmag 20 -10 -> 1 -dqctm053 comparetotmag 20 00 -> 1 -dqctm055 comparetotmag 20 10 -> 1 -dqctm056 comparetotmag 20 20 -> 0 - -dqctm061 comparetotmag -2.0 -2.0 -> 0 -dqctm062 comparetotmag -2.0 -1.0 -> 1 -dqctm063 comparetotmag -2.0 0.0 -> 1 -dqctm064 comparetotmag -2.0 1.0 -> 1 -dqctm065 comparetotmag -2.0 2.0 -> 0 -dqctm066 comparetotmag -1.0 -2.0 -> -1 -dqctm067 comparetotmag -1.0 -1.0 -> 0 -dqctm068 comparetotmag -1.0 0.0 -> 1 -dqctm069 comparetotmag -1.0 1.0 -> 0 -dqctm070 comparetotmag -1.0 2.0 -> -1 -dqctm071 comparetotmag 0.0 -2.0 -> -1 -dqctm072 comparetotmag 0.0 -1.0 -> -1 -dqctm073 comparetotmag 0.0 0.0 -> 0 -dqctm074 comparetotmag 0.0 1.0 -> -1 -dqctm075 comparetotmag 0.0 2.0 -> -1 -dqctm076 comparetotmag 1.0 -2.0 -> -1 -dqctm077 comparetotmag 1.0 -1.0 -> 0 -dqctm078 comparetotmag 1.0 0.0 -> 1 -dqctm079 comparetotmag 1.0 1.0 -> 0 -dqctm080 comparetotmag 1.0 2.0 -> -1 -dqctm081 comparetotmag 2.0 -2.0 -> 0 -dqctm082 comparetotmag 2.0 -1.0 -> 1 -dqctm083 comparetotmag 2.0 0.0 -> 1 -dqctm085 comparetotmag 2.0 1.0 -> 1 -dqctm086 comparetotmag 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -dqctm090 comparetotmag 9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 -dqctm091 comparetotmag -9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 -dqctm092 comparetotmag 9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 -dqctm093 comparetotmag -9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -dqctm100 comparetotmag 7.0 7.0 -> 0 -dqctm101 comparetotmag 7.0 7 -> -1 -dqctm102 comparetotmag 7 7.0 -> 1 -dqctm103 comparetotmag 7E+0 7.0 -> 1 -dqctm104 comparetotmag 70E-1 7.0 -> 0 -dqctm105 comparetotmag 0.7E+1 7 -> 0 -dqctm106 comparetotmag 70E-1 7 -> -1 -dqctm107 comparetotmag 7.0 7E+0 -> -1 -dqctm108 comparetotmag 7.0 70E-1 -> 0 -dqctm109 comparetotmag 7 0.7E+1 -> 0 -dqctm110 comparetotmag 7 70E-1 -> 1 - -dqctm120 comparetotmag 8.0 7.0 -> 1 -dqctm121 comparetotmag 8.0 7 -> 1 -dqctm122 comparetotmag 8 7.0 -> 1 -dqctm123 comparetotmag 8E+0 7.0 -> 1 -dqctm124 comparetotmag 80E-1 7.0 -> 1 -dqctm125 comparetotmag 0.8E+1 7 -> 1 -dqctm126 comparetotmag 80E-1 7 -> 1 -dqctm127 comparetotmag 8.0 7E+0 -> 1 -dqctm128 comparetotmag 8.0 70E-1 -> 1 -dqctm129 comparetotmag 8 0.7E+1 -> 1 -dqctm130 comparetotmag 8 70E-1 -> 1 - -dqctm140 comparetotmag 8.0 9.0 -> -1 -dqctm141 comparetotmag 8.0 9 -> -1 -dqctm142 comparetotmag 8 9.0 -> -1 -dqctm143 comparetotmag 8E+0 9.0 -> -1 -dqctm144 comparetotmag 80E-1 9.0 -> -1 -dqctm145 comparetotmag 0.8E+1 9 -> -1 -dqctm146 comparetotmag 80E-1 9 -> -1 -dqctm147 comparetotmag 8.0 9E+0 -> -1 -dqctm148 comparetotmag 8.0 90E-1 -> -1 -dqctm149 comparetotmag 8 0.9E+1 -> -1 -dqctm150 comparetotmag 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -dqctm200 comparetotmag -7.0 7.0 -> 0 -dqctm201 comparetotmag -7.0 7 -> -1 -dqctm202 comparetotmag -7 7.0 -> 1 -dqctm203 comparetotmag -7E+0 7.0 -> 1 -dqctm204 comparetotmag -70E-1 7.0 -> 0 -dqctm205 comparetotmag -0.7E+1 7 -> 0 -dqctm206 comparetotmag -70E-1 7 -> -1 -dqctm207 comparetotmag -7.0 7E+0 -> -1 -dqctm208 comparetotmag -7.0 70E-1 -> 0 -dqctm209 comparetotmag -7 0.7E+1 -> 0 -dqctm210 comparetotmag -7 70E-1 -> 1 - -dqctm220 comparetotmag -8.0 7.0 -> 1 -dqctm221 comparetotmag -8.0 7 -> 1 -dqctm222 comparetotmag -8 7.0 -> 1 -dqctm223 comparetotmag -8E+0 7.0 -> 1 -dqctm224 comparetotmag -80E-1 7.0 -> 1 -dqctm225 comparetotmag -0.8E+1 7 -> 1 -dqctm226 comparetotmag -80E-1 7 -> 1 -dqctm227 comparetotmag -8.0 7E+0 -> 1 -dqctm228 comparetotmag -8.0 70E-1 -> 1 -dqctm229 comparetotmag -8 0.7E+1 -> 1 -dqctm230 comparetotmag -8 70E-1 -> 1 - -dqctm240 comparetotmag -8.0 9.0 -> -1 -dqctm241 comparetotmag -8.0 9 -> -1 -dqctm242 comparetotmag -8 9.0 -> -1 -dqctm243 comparetotmag -8E+0 9.0 -> -1 -dqctm244 comparetotmag -80E-1 9.0 -> -1 -dqctm245 comparetotmag -0.8E+1 9 -> -1 -dqctm246 comparetotmag -80E-1 9 -> -1 -dqctm247 comparetotmag -8.0 9E+0 -> -1 -dqctm248 comparetotmag -8.0 90E-1 -> -1 -dqctm249 comparetotmag -8 0.9E+1 -> -1 -dqctm250 comparetotmag -8 90E-1 -> -1 - --- and again, with sign changes +- .. -dqctm300 comparetotmag 7.0 -7.0 -> 0 -dqctm301 comparetotmag 7.0 -7 -> -1 -dqctm302 comparetotmag 7 -7.0 -> 1 -dqctm303 comparetotmag 7E+0 -7.0 -> 1 -dqctm304 comparetotmag 70E-1 -7.0 -> 0 -dqctm305 comparetotmag .7E+1 -7 -> 0 -dqctm306 comparetotmag 70E-1 -7 -> -1 -dqctm307 comparetotmag 7.0 -7E+0 -> -1 -dqctm308 comparetotmag 7.0 -70E-1 -> 0 -dqctm309 comparetotmag 7 -.7E+1 -> 0 -dqctm310 comparetotmag 7 -70E-1 -> 1 - -dqctm320 comparetotmag 8.0 -7.0 -> 1 -dqctm321 comparetotmag 8.0 -7 -> 1 -dqctm322 comparetotmag 8 -7.0 -> 1 -dqctm323 comparetotmag 8E+0 -7.0 -> 1 -dqctm324 comparetotmag 80E-1 -7.0 -> 1 -dqctm325 comparetotmag .8E+1 -7 -> 1 -dqctm326 comparetotmag 80E-1 -7 -> 1 -dqctm327 comparetotmag 8.0 -7E+0 -> 1 -dqctm328 comparetotmag 8.0 -70E-1 -> 1 -dqctm329 comparetotmag 8 -.7E+1 -> 1 -dqctm330 comparetotmag 8 -70E-1 -> 1 - -dqctm340 comparetotmag 8.0 -9.0 -> -1 -dqctm341 comparetotmag 8.0 -9 -> -1 -dqctm342 comparetotmag 8 -9.0 -> -1 -dqctm343 comparetotmag 8E+0 -9.0 -> -1 -dqctm344 comparetotmag 80E-1 -9.0 -> -1 -dqctm345 comparetotmag .8E+1 -9 -> -1 -dqctm346 comparetotmag 80E-1 -9 -> -1 -dqctm347 comparetotmag 8.0 -9E+0 -> -1 -dqctm348 comparetotmag 8.0 -90E-1 -> -1 -dqctm349 comparetotmag 8 -.9E+1 -> -1 -dqctm350 comparetotmag 8 -90E-1 -> -1 - --- and again, with sign changes -- .. -dqctm400 comparetotmag -7.0 -7.0 -> 0 -dqctm401 comparetotmag -7.0 -7 -> -1 -dqctm402 comparetotmag -7 -7.0 -> 1 -dqctm403 comparetotmag -7E+0 -7.0 -> 1 -dqctm404 comparetotmag -70E-1 -7.0 -> 0 -dqctm405 comparetotmag -.7E+1 -7 -> 0 -dqctm406 comparetotmag -70E-1 -7 -> -1 -dqctm407 comparetotmag -7.0 -7E+0 -> -1 -dqctm408 comparetotmag -7.0 -70E-1 -> 0 -dqctm409 comparetotmag -7 -.7E+1 -> 0 -dqctm410 comparetotmag -7 -70E-1 -> 1 - -dqctm420 comparetotmag -8.0 -7.0 -> 1 -dqctm421 comparetotmag -8.0 -7 -> 1 -dqctm422 comparetotmag -8 -7.0 -> 1 -dqctm423 comparetotmag -8E+0 -7.0 -> 1 -dqctm424 comparetotmag -80E-1 -7.0 -> 1 -dqctm425 comparetotmag -.8E+1 -7 -> 1 -dqctm426 comparetotmag -80E-1 -7 -> 1 -dqctm427 comparetotmag -8.0 -7E+0 -> 1 -dqctm428 comparetotmag -8.0 -70E-1 -> 1 -dqctm429 comparetotmag -8 -.7E+1 -> 1 -dqctm430 comparetotmag -8 -70E-1 -> 1 - -dqctm440 comparetotmag -8.0 -9.0 -> -1 -dqctm441 comparetotmag -8.0 -9 -> -1 -dqctm442 comparetotmag -8 -9.0 -> -1 -dqctm443 comparetotmag -8E+0 -9.0 -> -1 -dqctm444 comparetotmag -80E-1 -9.0 -> -1 -dqctm445 comparetotmag -.8E+1 -9 -> -1 -dqctm446 comparetotmag -80E-1 -9 -> -1 -dqctm447 comparetotmag -8.0 -9E+0 -> -1 -dqctm448 comparetotmag -8.0 -90E-1 -> -1 -dqctm449 comparetotmag -8 -.9E+1 -> -1 -dqctm450 comparetotmag -8 -90E-1 -> -1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -dqctm473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 -dqctm474 comparetotmag 123.456000000000E+89 123.456E+89 -> -1 -dqctm475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 -dqctm476 comparetotmag 123.4560000000E+89 123.456E+89 -> -1 -dqctm477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 -dqctm478 comparetotmag 123.45600000E+89 123.456E+89 -> -1 -dqctm479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 -dqctm480 comparetotmag 123.456000E+89 123.456E+89 -> -1 -dqctm481 comparetotmag 123.45600E-89 123.456E-89 -> -1 -dqctm482 comparetotmag 123.4560E+89 123.456E+89 -> -1 -dqctm483 comparetotmag 123.456E-89 123.456E-89 -> 0 -dqctm487 comparetotmag 123.456E+89 123.4560000000000E+89 -> 1 -dqctm488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 -dqctm489 comparetotmag 123.456E+89 123.45600000000E+89 -> 1 -dqctm490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 -dqctm491 comparetotmag 123.456E+89 123.456000000E+89 -> 1 -dqctm492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 -dqctm493 comparetotmag 123.456E+89 123.4560000E+89 -> 1 -dqctm494 comparetotmag 123.456E-89 123.456000E-89 -> 1 -dqctm495 comparetotmag 123.456E+89 123.45600E+89 -> 1 -dqctm496 comparetotmag 123.456E-89 123.4560E-89 -> 1 -dqctm497 comparetotmag 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -dqctm498 comparetotmag 1 1E-17 -> 1 -dqctm499 comparetotmag 1 1E-16 -> 1 -dqctm500 comparetotmag 1 1E-15 -> 1 -dqctm501 comparetotmag 1 1E-14 -> 1 -dqctm502 comparetotmag 1 1E-13 -> 1 -dqctm503 comparetotmag 1 1E-12 -> 1 -dqctm504 comparetotmag 1 1E-11 -> 1 -dqctm505 comparetotmag 1 1E-10 -> 1 -dqctm506 comparetotmag 1 1E-9 -> 1 -dqctm507 comparetotmag 1 1E-8 -> 1 -dqctm508 comparetotmag 1 1E-7 -> 1 -dqctm509 comparetotmag 1 1E-6 -> 1 -dqctm510 comparetotmag 1 1E-5 -> 1 -dqctm511 comparetotmag 1 1E-4 -> 1 -dqctm512 comparetotmag 1 1E-3 -> 1 -dqctm513 comparetotmag 1 1E-2 -> 1 -dqctm514 comparetotmag 1 1E-1 -> 1 -dqctm515 comparetotmag 1 1E-0 -> 0 -dqctm516 comparetotmag 1 1E+1 -> -1 -dqctm517 comparetotmag 1 1E+2 -> -1 -dqctm518 comparetotmag 1 1E+3 -> -1 -dqctm519 comparetotmag 1 1E+4 -> -1 -dqctm521 comparetotmag 1 1E+5 -> -1 -dqctm522 comparetotmag 1 1E+6 -> -1 -dqctm523 comparetotmag 1 1E+7 -> -1 -dqctm524 comparetotmag 1 1E+8 -> -1 -dqctm525 comparetotmag 1 1E+9 -> -1 -dqctm526 comparetotmag 1 1E+10 -> -1 -dqctm527 comparetotmag 1 1E+11 -> -1 -dqctm528 comparetotmag 1 1E+12 -> -1 -dqctm529 comparetotmag 1 1E+13 -> -1 -dqctm530 comparetotmag 1 1E+14 -> -1 -dqctm531 comparetotmag 1 1E+15 -> -1 -dqctm532 comparetotmag 1 1E+16 -> -1 -dqctm533 comparetotmag 1 1E+17 -> -1 --- LR swap -dqctm538 comparetotmag 1E-17 1 -> -1 -dqctm539 comparetotmag 1E-16 1 -> -1 -dqctm540 comparetotmag 1E-15 1 -> -1 -dqctm541 comparetotmag 1E-14 1 -> -1 -dqctm542 comparetotmag 1E-13 1 -> -1 -dqctm543 comparetotmag 1E-12 1 -> -1 -dqctm544 comparetotmag 1E-11 1 -> -1 -dqctm545 comparetotmag 1E-10 1 -> -1 -dqctm546 comparetotmag 1E-9 1 -> -1 -dqctm547 comparetotmag 1E-8 1 -> -1 -dqctm548 comparetotmag 1E-7 1 -> -1 -dqctm549 comparetotmag 1E-6 1 -> -1 -dqctm550 comparetotmag 1E-5 1 -> -1 -dqctm551 comparetotmag 1E-4 1 -> -1 -dqctm552 comparetotmag 1E-3 1 -> -1 -dqctm553 comparetotmag 1E-2 1 -> -1 -dqctm554 comparetotmag 1E-1 1 -> -1 -dqctm555 comparetotmag 1E-0 1 -> 0 -dqctm556 comparetotmag 1E+1 1 -> 1 -dqctm557 comparetotmag 1E+2 1 -> 1 -dqctm558 comparetotmag 1E+3 1 -> 1 -dqctm559 comparetotmag 1E+4 1 -> 1 -dqctm561 comparetotmag 1E+5 1 -> 1 -dqctm562 comparetotmag 1E+6 1 -> 1 -dqctm563 comparetotmag 1E+7 1 -> 1 -dqctm564 comparetotmag 1E+8 1 -> 1 -dqctm565 comparetotmag 1E+9 1 -> 1 -dqctm566 comparetotmag 1E+10 1 -> 1 -dqctm567 comparetotmag 1E+11 1 -> 1 -dqctm568 comparetotmag 1E+12 1 -> 1 -dqctm569 comparetotmag 1E+13 1 -> 1 -dqctm570 comparetotmag 1E+14 1 -> 1 -dqctm571 comparetotmag 1E+15 1 -> 1 -dqctm572 comparetotmag 1E+16 1 -> 1 -dqctm573 comparetotmag 1E+17 1 -> 1 --- similar with a useful coefficient, one side only -dqctm578 comparetotmag 0.000000987654321 1E-17 -> 1 -dqctm579 comparetotmag 0.000000987654321 1E-16 -> 1 -dqctm580 comparetotmag 0.000000987654321 1E-15 -> 1 -dqctm581 comparetotmag 0.000000987654321 1E-14 -> 1 -dqctm582 comparetotmag 0.000000987654321 1E-13 -> 1 -dqctm583 comparetotmag 0.000000987654321 1E-12 -> 1 -dqctm584 comparetotmag 0.000000987654321 1E-11 -> 1 -dqctm585 comparetotmag 0.000000987654321 1E-10 -> 1 -dqctm586 comparetotmag 0.000000987654321 1E-9 -> 1 -dqctm587 comparetotmag 0.000000987654321 1E-8 -> 1 -dqctm588 comparetotmag 0.000000987654321 1E-7 -> 1 -dqctm589 comparetotmag 0.000000987654321 1E-6 -> -1 -dqctm590 comparetotmag 0.000000987654321 1E-5 -> -1 -dqctm591 comparetotmag 0.000000987654321 1E-4 -> -1 -dqctm592 comparetotmag 0.000000987654321 1E-3 -> -1 -dqctm593 comparetotmag 0.000000987654321 1E-2 -> -1 -dqctm594 comparetotmag 0.000000987654321 1E-1 -> -1 -dqctm595 comparetotmag 0.000000987654321 1E-0 -> -1 -dqctm596 comparetotmag 0.000000987654321 1E+1 -> -1 -dqctm597 comparetotmag 0.000000987654321 1E+2 -> -1 -dqctm598 comparetotmag 0.000000987654321 1E+3 -> -1 -dqctm599 comparetotmag 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -dqctm600 comparetotmag 12 12.2345 -> -1 -dqctm601 comparetotmag 12.0 12.2345 -> -1 -dqctm602 comparetotmag 12.00 12.2345 -> -1 -dqctm603 comparetotmag 12.000 12.2345 -> -1 -dqctm604 comparetotmag 12.0000 12.2345 -> -1 -dqctm605 comparetotmag 12.00000 12.2345 -> -1 -dqctm606 comparetotmag 12.000000 12.2345 -> -1 -dqctm607 comparetotmag 12.0000000 12.2345 -> -1 -dqctm608 comparetotmag 12.00000000 12.2345 -> -1 -dqctm609 comparetotmag 12.000000000 12.2345 -> -1 -dqctm610 comparetotmag 12.1234 12 -> 1 -dqctm611 comparetotmag 12.1234 12.0 -> 1 -dqctm612 comparetotmag 12.1234 12.00 -> 1 -dqctm613 comparetotmag 12.1234 12.000 -> 1 -dqctm614 comparetotmag 12.1234 12.0000 -> 1 -dqctm615 comparetotmag 12.1234 12.00000 -> 1 -dqctm616 comparetotmag 12.1234 12.000000 -> 1 -dqctm617 comparetotmag 12.1234 12.0000000 -> 1 -dqctm618 comparetotmag 12.1234 12.00000000 -> 1 -dqctm619 comparetotmag 12.1234 12.000000000 -> 1 -dqctm620 comparetotmag -12 -12.2345 -> -1 -dqctm621 comparetotmag -12.0 -12.2345 -> -1 -dqctm622 comparetotmag -12.00 -12.2345 -> -1 -dqctm623 comparetotmag -12.000 -12.2345 -> -1 -dqctm624 comparetotmag -12.0000 -12.2345 -> -1 -dqctm625 comparetotmag -12.00000 -12.2345 -> -1 -dqctm626 comparetotmag -12.000000 -12.2345 -> -1 -dqctm627 comparetotmag -12.0000000 -12.2345 -> -1 -dqctm628 comparetotmag -12.00000000 -12.2345 -> -1 -dqctm629 comparetotmag -12.000000000 -12.2345 -> -1 -dqctm630 comparetotmag -12.1234 -12 -> 1 -dqctm631 comparetotmag -12.1234 -12.0 -> 1 -dqctm632 comparetotmag -12.1234 -12.00 -> 1 -dqctm633 comparetotmag -12.1234 -12.000 -> 1 -dqctm634 comparetotmag -12.1234 -12.0000 -> 1 -dqctm635 comparetotmag -12.1234 -12.00000 -> 1 -dqctm636 comparetotmag -12.1234 -12.000000 -> 1 -dqctm637 comparetotmag -12.1234 -12.0000000 -> 1 -dqctm638 comparetotmag -12.1234 -12.00000000 -> 1 -dqctm639 comparetotmag -12.1234 -12.000000000 -> 1 - --- extended zeros -dqctm640 comparetotmag 0 0 -> 0 -dqctm641 comparetotmag 0 -0 -> 0 -dqctm642 comparetotmag 0 -0.0 -> 1 -dqctm643 comparetotmag 0 0.0 -> 1 -dqctm644 comparetotmag -0 0 -> 0 -dqctm645 comparetotmag -0 -0 -> 0 -dqctm646 comparetotmag -0 -0.0 -> 1 -dqctm647 comparetotmag -0 0.0 -> 1 -dqctm648 comparetotmag 0.0 0 -> -1 -dqctm649 comparetotmag 0.0 -0 -> -1 -dqctm650 comparetotmag 0.0 -0.0 -> 0 -dqctm651 comparetotmag 0.0 0.0 -> 0 -dqctm652 comparetotmag -0.0 0 -> -1 -dqctm653 comparetotmag -0.0 -0 -> -1 -dqctm654 comparetotmag -0.0 -0.0 -> 0 -dqctm655 comparetotmag -0.0 0.0 -> 0 - -dqctm656 comparetotmag -0E1 0.0 -> 1 -dqctm657 comparetotmag -0E2 0.0 -> 1 -dqctm658 comparetotmag 0E1 0.0 -> 1 -dqctm659 comparetotmag 0E2 0.0 -> 1 -dqctm660 comparetotmag -0E1 0 -> 1 -dqctm661 comparetotmag -0E2 0 -> 1 -dqctm662 comparetotmag 0E1 0 -> 1 -dqctm663 comparetotmag 0E2 0 -> 1 -dqctm664 comparetotmag -0E1 -0E1 -> 0 -dqctm665 comparetotmag -0E2 -0E1 -> 1 -dqctm666 comparetotmag 0E1 -0E1 -> 0 -dqctm667 comparetotmag 0E2 -0E1 -> 1 -dqctm668 comparetotmag -0E1 -0E2 -> -1 -dqctm669 comparetotmag -0E2 -0E2 -> 0 -dqctm670 comparetotmag 0E1 -0E2 -> -1 -dqctm671 comparetotmag 0E2 -0E2 -> 0 -dqctm672 comparetotmag -0E1 0E1 -> 0 -dqctm673 comparetotmag -0E2 0E1 -> 1 -dqctm674 comparetotmag 0E1 0E1 -> 0 -dqctm675 comparetotmag 0E2 0E1 -> 1 -dqctm676 comparetotmag -0E1 0E2 -> -1 -dqctm677 comparetotmag -0E2 0E2 -> 0 -dqctm678 comparetotmag 0E1 0E2 -> -1 -dqctm679 comparetotmag 0E2 0E2 -> 0 - --- trailing zeros; unit-y -dqctm680 comparetotmag 12 12 -> 0 -dqctm681 comparetotmag 12 12.0 -> 1 -dqctm682 comparetotmag 12 12.00 -> 1 -dqctm683 comparetotmag 12 12.000 -> 1 -dqctm684 comparetotmag 12 12.0000 -> 1 -dqctm685 comparetotmag 12 12.00000 -> 1 -dqctm686 comparetotmag 12 12.000000 -> 1 -dqctm687 comparetotmag 12 12.0000000 -> 1 -dqctm688 comparetotmag 12 12.00000000 -> 1 -dqctm689 comparetotmag 12 12.000000000 -> 1 -dqctm690 comparetotmag 12 12 -> 0 -dqctm691 comparetotmag 12.0 12 -> -1 -dqctm692 comparetotmag 12.00 12 -> -1 -dqctm693 comparetotmag 12.000 12 -> -1 -dqctm694 comparetotmag 12.0000 12 -> -1 -dqctm695 comparetotmag 12.00000 12 -> -1 -dqctm696 comparetotmag 12.000000 12 -> -1 -dqctm697 comparetotmag 12.0000000 12 -> -1 -dqctm698 comparetotmag 12.00000000 12 -> -1 -dqctm699 comparetotmag 12.000000000 12 -> -1 - --- old long operand checks -dqctm701 comparetotmag 12345678000 1 -> 1 -dqctm702 comparetotmag 1 12345678000 -> -1 -dqctm703 comparetotmag 1234567800 1 -> 1 -dqctm704 comparetotmag 1 1234567800 -> -1 -dqctm705 comparetotmag 1234567890 1 -> 1 -dqctm706 comparetotmag 1 1234567890 -> -1 -dqctm707 comparetotmag 1234567891 1 -> 1 -dqctm708 comparetotmag 1 1234567891 -> -1 -dqctm709 comparetotmag 12345678901 1 -> 1 -dqctm710 comparetotmag 1 12345678901 -> -1 -dqctm711 comparetotmag 1234567896 1 -> 1 -dqctm712 comparetotmag 1 1234567896 -> -1 -dqctm713 comparetotmag -1234567891 1 -> 1 -dqctm714 comparetotmag 1 -1234567891 -> -1 -dqctm715 comparetotmag -12345678901 1 -> 1 -dqctm716 comparetotmag 1 -12345678901 -> -1 -dqctm717 comparetotmag -1234567896 1 -> 1 -dqctm718 comparetotmag 1 -1234567896 -> -1 - --- old residue cases -dqctm740 comparetotmag 1 0.9999999 -> 1 -dqctm741 comparetotmag 1 0.999999 -> 1 -dqctm742 comparetotmag 1 0.99999 -> 1 -dqctm743 comparetotmag 1 1.0000 -> 1 -dqctm744 comparetotmag 1 1.00001 -> -1 -dqctm745 comparetotmag 1 1.000001 -> -1 -dqctm746 comparetotmag 1 1.0000001 -> -1 -dqctm750 comparetotmag 0.9999999 1 -> -1 -dqctm751 comparetotmag 0.999999 1 -> -1 -dqctm752 comparetotmag 0.99999 1 -> -1 -dqctm753 comparetotmag 1.0000 1 -> -1 -dqctm754 comparetotmag 1.00001 1 -> 1 -dqctm755 comparetotmag 1.000001 1 -> 1 -dqctm756 comparetotmag 1.0000001 1 -> 1 - --- Specials -dqctm780 comparetotmag Inf -Inf -> 0 -dqctm781 comparetotmag Inf -1000 -> 1 -dqctm782 comparetotmag Inf -1 -> 1 -dqctm783 comparetotmag Inf -0 -> 1 -dqctm784 comparetotmag Inf 0 -> 1 -dqctm785 comparetotmag Inf 1 -> 1 -dqctm786 comparetotmag Inf 1000 -> 1 -dqctm787 comparetotmag Inf Inf -> 0 -dqctm788 comparetotmag -1000 Inf -> -1 -dqctm789 comparetotmag -Inf Inf -> 0 -dqctm790 comparetotmag -1 Inf -> -1 -dqctm791 comparetotmag -0 Inf -> -1 -dqctm792 comparetotmag 0 Inf -> -1 -dqctm793 comparetotmag 1 Inf -> -1 -dqctm794 comparetotmag 1000 Inf -> -1 -dqctm795 comparetotmag Inf Inf -> 0 - -dqctm800 comparetotmag -Inf -Inf -> 0 -dqctm801 comparetotmag -Inf -1000 -> 1 -dqctm802 comparetotmag -Inf -1 -> 1 -dqctm803 comparetotmag -Inf -0 -> 1 -dqctm804 comparetotmag -Inf 0 -> 1 -dqctm805 comparetotmag -Inf 1 -> 1 -dqctm806 comparetotmag -Inf 1000 -> 1 -dqctm807 comparetotmag -Inf Inf -> 0 -dqctm808 comparetotmag -Inf -Inf -> 0 -dqctm809 comparetotmag -1000 -Inf -> -1 -dqctm810 comparetotmag -1 -Inf -> -1 -dqctm811 comparetotmag -0 -Inf -> -1 -dqctm812 comparetotmag 0 -Inf -> -1 -dqctm813 comparetotmag 1 -Inf -> -1 -dqctm814 comparetotmag 1000 -Inf -> -1 -dqctm815 comparetotmag Inf -Inf -> 0 - -dqctm821 comparetotmag NaN -Inf -> 1 -dqctm822 comparetotmag NaN -1000 -> 1 -dqctm823 comparetotmag NaN -1 -> 1 -dqctm824 comparetotmag NaN -0 -> 1 -dqctm825 comparetotmag NaN 0 -> 1 -dqctm826 comparetotmag NaN 1 -> 1 -dqctm827 comparetotmag NaN 1000 -> 1 -dqctm828 comparetotmag NaN Inf -> 1 -dqctm829 comparetotmag NaN NaN -> 0 -dqctm830 comparetotmag -Inf NaN -> -1 -dqctm831 comparetotmag -1000 NaN -> -1 -dqctm832 comparetotmag -1 NaN -> -1 -dqctm833 comparetotmag -0 NaN -> -1 -dqctm834 comparetotmag 0 NaN -> -1 -dqctm835 comparetotmag 1 NaN -> -1 -dqctm836 comparetotmag 1000 NaN -> -1 -dqctm837 comparetotmag Inf NaN -> -1 -dqctm838 comparetotmag -NaN -NaN -> 0 -dqctm839 comparetotmag +NaN -NaN -> 0 -dqctm840 comparetotmag -NaN +NaN -> 0 - -dqctm841 comparetotmag sNaN -sNaN -> 0 -dqctm842 comparetotmag sNaN -NaN -> -1 -dqctm843 comparetotmag sNaN -Inf -> 1 -dqctm844 comparetotmag sNaN -1000 -> 1 -dqctm845 comparetotmag sNaN -1 -> 1 -dqctm846 comparetotmag sNaN -0 -> 1 -dqctm847 comparetotmag sNaN 0 -> 1 -dqctm848 comparetotmag sNaN 1 -> 1 -dqctm849 comparetotmag sNaN 1000 -> 1 -dqctm850 comparetotmag sNaN NaN -> -1 -dqctm851 comparetotmag sNaN sNaN -> 0 - -dqctm852 comparetotmag -sNaN sNaN -> 0 -dqctm853 comparetotmag -NaN sNaN -> 1 -dqctm854 comparetotmag -Inf sNaN -> -1 -dqctm855 comparetotmag -1000 sNaN -> -1 -dqctm856 comparetotmag -1 sNaN -> -1 -dqctm857 comparetotmag -0 sNaN -> -1 -dqctm858 comparetotmag 0 sNaN -> -1 -dqctm859 comparetotmag 1 sNaN -> -1 -dqctm860 comparetotmag 1000 sNaN -> -1 -dqctm861 comparetotmag Inf sNaN -> -1 -dqctm862 comparetotmag NaN sNaN -> 1 -dqctm863 comparetotmag sNaN sNaN -> 0 - -dqctm871 comparetotmag -sNaN -sNaN -> 0 -dqctm872 comparetotmag -sNaN -NaN -> -1 -dqctm873 comparetotmag -sNaN -Inf -> 1 -dqctm874 comparetotmag -sNaN -1000 -> 1 -dqctm875 comparetotmag -sNaN -1 -> 1 -dqctm876 comparetotmag -sNaN -0 -> 1 -dqctm877 comparetotmag -sNaN 0 -> 1 -dqctm878 comparetotmag -sNaN 1 -> 1 -dqctm879 comparetotmag -sNaN 1000 -> 1 -dqctm880 comparetotmag -sNaN NaN -> -1 -dqctm881 comparetotmag -sNaN sNaN -> 0 - -dqctm882 comparetotmag -sNaN -sNaN -> 0 -dqctm883 comparetotmag -NaN -sNaN -> 1 -dqctm884 comparetotmag -Inf -sNaN -> -1 -dqctm885 comparetotmag -1000 -sNaN -> -1 -dqctm886 comparetotmag -1 -sNaN -> -1 -dqctm887 comparetotmag -0 -sNaN -> -1 -dqctm888 comparetotmag 0 -sNaN -> -1 -dqctm889 comparetotmag 1 -sNaN -> -1 -dqctm890 comparetotmag 1000 -sNaN -> -1 -dqctm891 comparetotmag Inf -sNaN -> -1 -dqctm892 comparetotmag NaN -sNaN -> 1 -dqctm893 comparetotmag sNaN -sNaN -> 0 - --- NaNs with payload -dqctm960 comparetotmag NaN9 -Inf -> 1 -dqctm961 comparetotmag NaN8 999 -> 1 -dqctm962 comparetotmag NaN77 Inf -> 1 -dqctm963 comparetotmag -NaN67 NaN5 -> 1 -dqctm964 comparetotmag -Inf -NaN4 -> -1 -dqctm965 comparetotmag -999 -NaN33 -> -1 -dqctm966 comparetotmag Inf NaN2 -> -1 - -dqctm970 comparetotmag -NaN41 -NaN42 -> -1 -dqctm971 comparetotmag +NaN41 -NaN42 -> -1 -dqctm972 comparetotmag -NaN41 +NaN42 -> -1 -dqctm973 comparetotmag +NaN41 +NaN42 -> -1 -dqctm974 comparetotmag -NaN42 -NaN01 -> 1 -dqctm975 comparetotmag +NaN42 -NaN01 -> 1 -dqctm976 comparetotmag -NaN42 +NaN01 -> 1 -dqctm977 comparetotmag +NaN42 +NaN01 -> 1 - -dqctm980 comparetotmag -sNaN771 -sNaN772 -> -1 -dqctm981 comparetotmag +sNaN771 -sNaN772 -> -1 -dqctm982 comparetotmag -sNaN771 +sNaN772 -> -1 -dqctm983 comparetotmag +sNaN771 +sNaN772 -> -1 -dqctm984 comparetotmag -sNaN772 -sNaN771 -> 1 -dqctm985 comparetotmag +sNaN772 -sNaN771 -> 1 -dqctm986 comparetotmag -sNaN772 +sNaN771 -> 1 -dqctm987 comparetotmag +sNaN772 +sNaN771 -> 1 - -dqctm991 comparetotmag -sNaN99 -Inf -> 1 -dqctm992 comparetotmag sNaN98 -11 -> 1 -dqctm993 comparetotmag sNaN97 NaN -> -1 -dqctm994 comparetotmag sNaN16 sNaN94 -> -1 -dqctm995 comparetotmag NaN85 sNaN83 -> 1 -dqctm996 comparetotmag -Inf sNaN92 -> -1 -dqctm997 comparetotmag 088 sNaN81 -> -1 -dqctm998 comparetotmag Inf sNaN90 -> -1 -dqctm999 comparetotmag NaN -sNaN89 -> 1 - --- spread zeros -dqctm1110 comparetotmag 0E-6143 0 -> -1 -dqctm1111 comparetotmag 0E-6143 -0 -> -1 -dqctm1112 comparetotmag -0E-6143 0 -> -1 -dqctm1113 comparetotmag -0E-6143 -0 -> -1 -dqctm1114 comparetotmag 0E-6143 0E+6144 -> -1 -dqctm1115 comparetotmag 0E-6143 -0E+6144 -> -1 -dqctm1116 comparetotmag -0E-6143 0E+6144 -> -1 -dqctm1117 comparetotmag -0E-6143 -0E+6144 -> -1 -dqctm1118 comparetotmag 0 0E+6144 -> -1 -dqctm1119 comparetotmag 0 -0E+6144 -> -1 -dqctm1120 comparetotmag -0 0E+6144 -> -1 -dqctm1121 comparetotmag -0 -0E+6144 -> -1 - -dqctm1130 comparetotmag 0E+6144 0 -> 1 -dqctm1131 comparetotmag 0E+6144 -0 -> 1 -dqctm1132 comparetotmag -0E+6144 0 -> 1 -dqctm1133 comparetotmag -0E+6144 -0 -> 1 -dqctm1134 comparetotmag 0E+6144 0E-6143 -> 1 -dqctm1135 comparetotmag 0E+6144 -0E-6143 -> 1 -dqctm1136 comparetotmag -0E+6144 0E-6143 -> 1 -dqctm1137 comparetotmag -0E+6144 -0E-6143 -> 1 -dqctm1138 comparetotmag 0 0E-6143 -> 1 -dqctm1139 comparetotmag 0 -0E-6143 -> 1 -dqctm1140 comparetotmag -0 0E-6143 -> 1 -dqctm1141 comparetotmag -0 -0E-6143 -> 1 - --- Null tests -dqctm9990 comparetotmag 10 # -> NaN Invalid_operation -dqctm9991 comparetotmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqCompareTotalMag.decTest -- decQuad comparison; abs. total order -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqctm001 comparetotmag -2 -2 -> 0 +dqctm002 comparetotmag -2 -1 -> 1 +dqctm003 comparetotmag -2 0 -> 1 +dqctm004 comparetotmag -2 1 -> 1 +dqctm005 comparetotmag -2 2 -> 0 +dqctm006 comparetotmag -1 -2 -> -1 +dqctm007 comparetotmag -1 -1 -> 0 +dqctm008 comparetotmag -1 0 -> 1 +dqctm009 comparetotmag -1 1 -> 0 +dqctm010 comparetotmag -1 2 -> -1 +dqctm011 comparetotmag 0 -2 -> -1 +dqctm012 comparetotmag 0 -1 -> -1 +dqctm013 comparetotmag 0 0 -> 0 +dqctm014 comparetotmag 0 1 -> -1 +dqctm015 comparetotmag 0 2 -> -1 +dqctm016 comparetotmag 1 -2 -> -1 +dqctm017 comparetotmag 1 -1 -> 0 +dqctm018 comparetotmag 1 0 -> 1 +dqctm019 comparetotmag 1 1 -> 0 +dqctm020 comparetotmag 1 2 -> -1 +dqctm021 comparetotmag 2 -2 -> 0 +dqctm022 comparetotmag 2 -1 -> 1 +dqctm023 comparetotmag 2 0 -> 1 +dqctm025 comparetotmag 2 1 -> 1 +dqctm026 comparetotmag 2 2 -> 0 + +dqctm031 comparetotmag -20 -20 -> 0 +dqctm032 comparetotmag -20 -10 -> 1 +dqctm033 comparetotmag -20 00 -> 1 +dqctm034 comparetotmag -20 10 -> 1 +dqctm035 comparetotmag -20 20 -> 0 +dqctm036 comparetotmag -10 -20 -> -1 +dqctm037 comparetotmag -10 -10 -> 0 +dqctm038 comparetotmag -10 00 -> 1 +dqctm039 comparetotmag -10 10 -> 0 +dqctm040 comparetotmag -10 20 -> -1 +dqctm041 comparetotmag 00 -20 -> -1 +dqctm042 comparetotmag 00 -10 -> -1 +dqctm043 comparetotmag 00 00 -> 0 +dqctm044 comparetotmag 00 10 -> -1 +dqctm045 comparetotmag 00 20 -> -1 +dqctm046 comparetotmag 10 -20 -> -1 +dqctm047 comparetotmag 10 -10 -> 0 +dqctm048 comparetotmag 10 00 -> 1 +dqctm049 comparetotmag 10 10 -> 0 +dqctm050 comparetotmag 10 20 -> -1 +dqctm051 comparetotmag 20 -20 -> 0 +dqctm052 comparetotmag 20 -10 -> 1 +dqctm053 comparetotmag 20 00 -> 1 +dqctm055 comparetotmag 20 10 -> 1 +dqctm056 comparetotmag 20 20 -> 0 + +dqctm061 comparetotmag -2.0 -2.0 -> 0 +dqctm062 comparetotmag -2.0 -1.0 -> 1 +dqctm063 comparetotmag -2.0 0.0 -> 1 +dqctm064 comparetotmag -2.0 1.0 -> 1 +dqctm065 comparetotmag -2.0 2.0 -> 0 +dqctm066 comparetotmag -1.0 -2.0 -> -1 +dqctm067 comparetotmag -1.0 -1.0 -> 0 +dqctm068 comparetotmag -1.0 0.0 -> 1 +dqctm069 comparetotmag -1.0 1.0 -> 0 +dqctm070 comparetotmag -1.0 2.0 -> -1 +dqctm071 comparetotmag 0.0 -2.0 -> -1 +dqctm072 comparetotmag 0.0 -1.0 -> -1 +dqctm073 comparetotmag 0.0 0.0 -> 0 +dqctm074 comparetotmag 0.0 1.0 -> -1 +dqctm075 comparetotmag 0.0 2.0 -> -1 +dqctm076 comparetotmag 1.0 -2.0 -> -1 +dqctm077 comparetotmag 1.0 -1.0 -> 0 +dqctm078 comparetotmag 1.0 0.0 -> 1 +dqctm079 comparetotmag 1.0 1.0 -> 0 +dqctm080 comparetotmag 1.0 2.0 -> -1 +dqctm081 comparetotmag 2.0 -2.0 -> 0 +dqctm082 comparetotmag 2.0 -1.0 -> 1 +dqctm083 comparetotmag 2.0 0.0 -> 1 +dqctm085 comparetotmag 2.0 1.0 -> 1 +dqctm086 comparetotmag 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +dqctm090 comparetotmag 9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 +dqctm091 comparetotmag -9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 +dqctm092 comparetotmag 9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 +dqctm093 comparetotmag -9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +dqctm100 comparetotmag 7.0 7.0 -> 0 +dqctm101 comparetotmag 7.0 7 -> -1 +dqctm102 comparetotmag 7 7.0 -> 1 +dqctm103 comparetotmag 7E+0 7.0 -> 1 +dqctm104 comparetotmag 70E-1 7.0 -> 0 +dqctm105 comparetotmag 0.7E+1 7 -> 0 +dqctm106 comparetotmag 70E-1 7 -> -1 +dqctm107 comparetotmag 7.0 7E+0 -> -1 +dqctm108 comparetotmag 7.0 70E-1 -> 0 +dqctm109 comparetotmag 7 0.7E+1 -> 0 +dqctm110 comparetotmag 7 70E-1 -> 1 + +dqctm120 comparetotmag 8.0 7.0 -> 1 +dqctm121 comparetotmag 8.0 7 -> 1 +dqctm122 comparetotmag 8 7.0 -> 1 +dqctm123 comparetotmag 8E+0 7.0 -> 1 +dqctm124 comparetotmag 80E-1 7.0 -> 1 +dqctm125 comparetotmag 0.8E+1 7 -> 1 +dqctm126 comparetotmag 80E-1 7 -> 1 +dqctm127 comparetotmag 8.0 7E+0 -> 1 +dqctm128 comparetotmag 8.0 70E-1 -> 1 +dqctm129 comparetotmag 8 0.7E+1 -> 1 +dqctm130 comparetotmag 8 70E-1 -> 1 + +dqctm140 comparetotmag 8.0 9.0 -> -1 +dqctm141 comparetotmag 8.0 9 -> -1 +dqctm142 comparetotmag 8 9.0 -> -1 +dqctm143 comparetotmag 8E+0 9.0 -> -1 +dqctm144 comparetotmag 80E-1 9.0 -> -1 +dqctm145 comparetotmag 0.8E+1 9 -> -1 +dqctm146 comparetotmag 80E-1 9 -> -1 +dqctm147 comparetotmag 8.0 9E+0 -> -1 +dqctm148 comparetotmag 8.0 90E-1 -> -1 +dqctm149 comparetotmag 8 0.9E+1 -> -1 +dqctm150 comparetotmag 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +dqctm200 comparetotmag -7.0 7.0 -> 0 +dqctm201 comparetotmag -7.0 7 -> -1 +dqctm202 comparetotmag -7 7.0 -> 1 +dqctm203 comparetotmag -7E+0 7.0 -> 1 +dqctm204 comparetotmag -70E-1 7.0 -> 0 +dqctm205 comparetotmag -0.7E+1 7 -> 0 +dqctm206 comparetotmag -70E-1 7 -> -1 +dqctm207 comparetotmag -7.0 7E+0 -> -1 +dqctm208 comparetotmag -7.0 70E-1 -> 0 +dqctm209 comparetotmag -7 0.7E+1 -> 0 +dqctm210 comparetotmag -7 70E-1 -> 1 + +dqctm220 comparetotmag -8.0 7.0 -> 1 +dqctm221 comparetotmag -8.0 7 -> 1 +dqctm222 comparetotmag -8 7.0 -> 1 +dqctm223 comparetotmag -8E+0 7.0 -> 1 +dqctm224 comparetotmag -80E-1 7.0 -> 1 +dqctm225 comparetotmag -0.8E+1 7 -> 1 +dqctm226 comparetotmag -80E-1 7 -> 1 +dqctm227 comparetotmag -8.0 7E+0 -> 1 +dqctm228 comparetotmag -8.0 70E-1 -> 1 +dqctm229 comparetotmag -8 0.7E+1 -> 1 +dqctm230 comparetotmag -8 70E-1 -> 1 + +dqctm240 comparetotmag -8.0 9.0 -> -1 +dqctm241 comparetotmag -8.0 9 -> -1 +dqctm242 comparetotmag -8 9.0 -> -1 +dqctm243 comparetotmag -8E+0 9.0 -> -1 +dqctm244 comparetotmag -80E-1 9.0 -> -1 +dqctm245 comparetotmag -0.8E+1 9 -> -1 +dqctm246 comparetotmag -80E-1 9 -> -1 +dqctm247 comparetotmag -8.0 9E+0 -> -1 +dqctm248 comparetotmag -8.0 90E-1 -> -1 +dqctm249 comparetotmag -8 0.9E+1 -> -1 +dqctm250 comparetotmag -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +dqctm300 comparetotmag 7.0 -7.0 -> 0 +dqctm301 comparetotmag 7.0 -7 -> -1 +dqctm302 comparetotmag 7 -7.0 -> 1 +dqctm303 comparetotmag 7E+0 -7.0 -> 1 +dqctm304 comparetotmag 70E-1 -7.0 -> 0 +dqctm305 comparetotmag .7E+1 -7 -> 0 +dqctm306 comparetotmag 70E-1 -7 -> -1 +dqctm307 comparetotmag 7.0 -7E+0 -> -1 +dqctm308 comparetotmag 7.0 -70E-1 -> 0 +dqctm309 comparetotmag 7 -.7E+1 -> 0 +dqctm310 comparetotmag 7 -70E-1 -> 1 + +dqctm320 comparetotmag 8.0 -7.0 -> 1 +dqctm321 comparetotmag 8.0 -7 -> 1 +dqctm322 comparetotmag 8 -7.0 -> 1 +dqctm323 comparetotmag 8E+0 -7.0 -> 1 +dqctm324 comparetotmag 80E-1 -7.0 -> 1 +dqctm325 comparetotmag .8E+1 -7 -> 1 +dqctm326 comparetotmag 80E-1 -7 -> 1 +dqctm327 comparetotmag 8.0 -7E+0 -> 1 +dqctm328 comparetotmag 8.0 -70E-1 -> 1 +dqctm329 comparetotmag 8 -.7E+1 -> 1 +dqctm330 comparetotmag 8 -70E-1 -> 1 + +dqctm340 comparetotmag 8.0 -9.0 -> -1 +dqctm341 comparetotmag 8.0 -9 -> -1 +dqctm342 comparetotmag 8 -9.0 -> -1 +dqctm343 comparetotmag 8E+0 -9.0 -> -1 +dqctm344 comparetotmag 80E-1 -9.0 -> -1 +dqctm345 comparetotmag .8E+1 -9 -> -1 +dqctm346 comparetotmag 80E-1 -9 -> -1 +dqctm347 comparetotmag 8.0 -9E+0 -> -1 +dqctm348 comparetotmag 8.0 -90E-1 -> -1 +dqctm349 comparetotmag 8 -.9E+1 -> -1 +dqctm350 comparetotmag 8 -90E-1 -> -1 + +-- and again, with sign changes -- .. +dqctm400 comparetotmag -7.0 -7.0 -> 0 +dqctm401 comparetotmag -7.0 -7 -> -1 +dqctm402 comparetotmag -7 -7.0 -> 1 +dqctm403 comparetotmag -7E+0 -7.0 -> 1 +dqctm404 comparetotmag -70E-1 -7.0 -> 0 +dqctm405 comparetotmag -.7E+1 -7 -> 0 +dqctm406 comparetotmag -70E-1 -7 -> -1 +dqctm407 comparetotmag -7.0 -7E+0 -> -1 +dqctm408 comparetotmag -7.0 -70E-1 -> 0 +dqctm409 comparetotmag -7 -.7E+1 -> 0 +dqctm410 comparetotmag -7 -70E-1 -> 1 + +dqctm420 comparetotmag -8.0 -7.0 -> 1 +dqctm421 comparetotmag -8.0 -7 -> 1 +dqctm422 comparetotmag -8 -7.0 -> 1 +dqctm423 comparetotmag -8E+0 -7.0 -> 1 +dqctm424 comparetotmag -80E-1 -7.0 -> 1 +dqctm425 comparetotmag -.8E+1 -7 -> 1 +dqctm426 comparetotmag -80E-1 -7 -> 1 +dqctm427 comparetotmag -8.0 -7E+0 -> 1 +dqctm428 comparetotmag -8.0 -70E-1 -> 1 +dqctm429 comparetotmag -8 -.7E+1 -> 1 +dqctm430 comparetotmag -8 -70E-1 -> 1 + +dqctm440 comparetotmag -8.0 -9.0 -> -1 +dqctm441 comparetotmag -8.0 -9 -> -1 +dqctm442 comparetotmag -8 -9.0 -> -1 +dqctm443 comparetotmag -8E+0 -9.0 -> -1 +dqctm444 comparetotmag -80E-1 -9.0 -> -1 +dqctm445 comparetotmag -.8E+1 -9 -> -1 +dqctm446 comparetotmag -80E-1 -9 -> -1 +dqctm447 comparetotmag -8.0 -9E+0 -> -1 +dqctm448 comparetotmag -8.0 -90E-1 -> -1 +dqctm449 comparetotmag -8 -.9E+1 -> -1 +dqctm450 comparetotmag -8 -90E-1 -> -1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +dqctm473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 +dqctm474 comparetotmag 123.456000000000E+89 123.456E+89 -> -1 +dqctm475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 +dqctm476 comparetotmag 123.4560000000E+89 123.456E+89 -> -1 +dqctm477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 +dqctm478 comparetotmag 123.45600000E+89 123.456E+89 -> -1 +dqctm479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 +dqctm480 comparetotmag 123.456000E+89 123.456E+89 -> -1 +dqctm481 comparetotmag 123.45600E-89 123.456E-89 -> -1 +dqctm482 comparetotmag 123.4560E+89 123.456E+89 -> -1 +dqctm483 comparetotmag 123.456E-89 123.456E-89 -> 0 +dqctm487 comparetotmag 123.456E+89 123.4560000000000E+89 -> 1 +dqctm488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 +dqctm489 comparetotmag 123.456E+89 123.45600000000E+89 -> 1 +dqctm490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 +dqctm491 comparetotmag 123.456E+89 123.456000000E+89 -> 1 +dqctm492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 +dqctm493 comparetotmag 123.456E+89 123.4560000E+89 -> 1 +dqctm494 comparetotmag 123.456E-89 123.456000E-89 -> 1 +dqctm495 comparetotmag 123.456E+89 123.45600E+89 -> 1 +dqctm496 comparetotmag 123.456E-89 123.4560E-89 -> 1 +dqctm497 comparetotmag 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +dqctm498 comparetotmag 1 1E-17 -> 1 +dqctm499 comparetotmag 1 1E-16 -> 1 +dqctm500 comparetotmag 1 1E-15 -> 1 +dqctm501 comparetotmag 1 1E-14 -> 1 +dqctm502 comparetotmag 1 1E-13 -> 1 +dqctm503 comparetotmag 1 1E-12 -> 1 +dqctm504 comparetotmag 1 1E-11 -> 1 +dqctm505 comparetotmag 1 1E-10 -> 1 +dqctm506 comparetotmag 1 1E-9 -> 1 +dqctm507 comparetotmag 1 1E-8 -> 1 +dqctm508 comparetotmag 1 1E-7 -> 1 +dqctm509 comparetotmag 1 1E-6 -> 1 +dqctm510 comparetotmag 1 1E-5 -> 1 +dqctm511 comparetotmag 1 1E-4 -> 1 +dqctm512 comparetotmag 1 1E-3 -> 1 +dqctm513 comparetotmag 1 1E-2 -> 1 +dqctm514 comparetotmag 1 1E-1 -> 1 +dqctm515 comparetotmag 1 1E-0 -> 0 +dqctm516 comparetotmag 1 1E+1 -> -1 +dqctm517 comparetotmag 1 1E+2 -> -1 +dqctm518 comparetotmag 1 1E+3 -> -1 +dqctm519 comparetotmag 1 1E+4 -> -1 +dqctm521 comparetotmag 1 1E+5 -> -1 +dqctm522 comparetotmag 1 1E+6 -> -1 +dqctm523 comparetotmag 1 1E+7 -> -1 +dqctm524 comparetotmag 1 1E+8 -> -1 +dqctm525 comparetotmag 1 1E+9 -> -1 +dqctm526 comparetotmag 1 1E+10 -> -1 +dqctm527 comparetotmag 1 1E+11 -> -1 +dqctm528 comparetotmag 1 1E+12 -> -1 +dqctm529 comparetotmag 1 1E+13 -> -1 +dqctm530 comparetotmag 1 1E+14 -> -1 +dqctm531 comparetotmag 1 1E+15 -> -1 +dqctm532 comparetotmag 1 1E+16 -> -1 +dqctm533 comparetotmag 1 1E+17 -> -1 +-- LR swap +dqctm538 comparetotmag 1E-17 1 -> -1 +dqctm539 comparetotmag 1E-16 1 -> -1 +dqctm540 comparetotmag 1E-15 1 -> -1 +dqctm541 comparetotmag 1E-14 1 -> -1 +dqctm542 comparetotmag 1E-13 1 -> -1 +dqctm543 comparetotmag 1E-12 1 -> -1 +dqctm544 comparetotmag 1E-11 1 -> -1 +dqctm545 comparetotmag 1E-10 1 -> -1 +dqctm546 comparetotmag 1E-9 1 -> -1 +dqctm547 comparetotmag 1E-8 1 -> -1 +dqctm548 comparetotmag 1E-7 1 -> -1 +dqctm549 comparetotmag 1E-6 1 -> -1 +dqctm550 comparetotmag 1E-5 1 -> -1 +dqctm551 comparetotmag 1E-4 1 -> -1 +dqctm552 comparetotmag 1E-3 1 -> -1 +dqctm553 comparetotmag 1E-2 1 -> -1 +dqctm554 comparetotmag 1E-1 1 -> -1 +dqctm555 comparetotmag 1E-0 1 -> 0 +dqctm556 comparetotmag 1E+1 1 -> 1 +dqctm557 comparetotmag 1E+2 1 -> 1 +dqctm558 comparetotmag 1E+3 1 -> 1 +dqctm559 comparetotmag 1E+4 1 -> 1 +dqctm561 comparetotmag 1E+5 1 -> 1 +dqctm562 comparetotmag 1E+6 1 -> 1 +dqctm563 comparetotmag 1E+7 1 -> 1 +dqctm564 comparetotmag 1E+8 1 -> 1 +dqctm565 comparetotmag 1E+9 1 -> 1 +dqctm566 comparetotmag 1E+10 1 -> 1 +dqctm567 comparetotmag 1E+11 1 -> 1 +dqctm568 comparetotmag 1E+12 1 -> 1 +dqctm569 comparetotmag 1E+13 1 -> 1 +dqctm570 comparetotmag 1E+14 1 -> 1 +dqctm571 comparetotmag 1E+15 1 -> 1 +dqctm572 comparetotmag 1E+16 1 -> 1 +dqctm573 comparetotmag 1E+17 1 -> 1 +-- similar with a useful coefficient, one side only +dqctm578 comparetotmag 0.000000987654321 1E-17 -> 1 +dqctm579 comparetotmag 0.000000987654321 1E-16 -> 1 +dqctm580 comparetotmag 0.000000987654321 1E-15 -> 1 +dqctm581 comparetotmag 0.000000987654321 1E-14 -> 1 +dqctm582 comparetotmag 0.000000987654321 1E-13 -> 1 +dqctm583 comparetotmag 0.000000987654321 1E-12 -> 1 +dqctm584 comparetotmag 0.000000987654321 1E-11 -> 1 +dqctm585 comparetotmag 0.000000987654321 1E-10 -> 1 +dqctm586 comparetotmag 0.000000987654321 1E-9 -> 1 +dqctm587 comparetotmag 0.000000987654321 1E-8 -> 1 +dqctm588 comparetotmag 0.000000987654321 1E-7 -> 1 +dqctm589 comparetotmag 0.000000987654321 1E-6 -> -1 +dqctm590 comparetotmag 0.000000987654321 1E-5 -> -1 +dqctm591 comparetotmag 0.000000987654321 1E-4 -> -1 +dqctm592 comparetotmag 0.000000987654321 1E-3 -> -1 +dqctm593 comparetotmag 0.000000987654321 1E-2 -> -1 +dqctm594 comparetotmag 0.000000987654321 1E-1 -> -1 +dqctm595 comparetotmag 0.000000987654321 1E-0 -> -1 +dqctm596 comparetotmag 0.000000987654321 1E+1 -> -1 +dqctm597 comparetotmag 0.000000987654321 1E+2 -> -1 +dqctm598 comparetotmag 0.000000987654321 1E+3 -> -1 +dqctm599 comparetotmag 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +dqctm600 comparetotmag 12 12.2345 -> -1 +dqctm601 comparetotmag 12.0 12.2345 -> -1 +dqctm602 comparetotmag 12.00 12.2345 -> -1 +dqctm603 comparetotmag 12.000 12.2345 -> -1 +dqctm604 comparetotmag 12.0000 12.2345 -> -1 +dqctm605 comparetotmag 12.00000 12.2345 -> -1 +dqctm606 comparetotmag 12.000000 12.2345 -> -1 +dqctm607 comparetotmag 12.0000000 12.2345 -> -1 +dqctm608 comparetotmag 12.00000000 12.2345 -> -1 +dqctm609 comparetotmag 12.000000000 12.2345 -> -1 +dqctm610 comparetotmag 12.1234 12 -> 1 +dqctm611 comparetotmag 12.1234 12.0 -> 1 +dqctm612 comparetotmag 12.1234 12.00 -> 1 +dqctm613 comparetotmag 12.1234 12.000 -> 1 +dqctm614 comparetotmag 12.1234 12.0000 -> 1 +dqctm615 comparetotmag 12.1234 12.00000 -> 1 +dqctm616 comparetotmag 12.1234 12.000000 -> 1 +dqctm617 comparetotmag 12.1234 12.0000000 -> 1 +dqctm618 comparetotmag 12.1234 12.00000000 -> 1 +dqctm619 comparetotmag 12.1234 12.000000000 -> 1 +dqctm620 comparetotmag -12 -12.2345 -> -1 +dqctm621 comparetotmag -12.0 -12.2345 -> -1 +dqctm622 comparetotmag -12.00 -12.2345 -> -1 +dqctm623 comparetotmag -12.000 -12.2345 -> -1 +dqctm624 comparetotmag -12.0000 -12.2345 -> -1 +dqctm625 comparetotmag -12.00000 -12.2345 -> -1 +dqctm626 comparetotmag -12.000000 -12.2345 -> -1 +dqctm627 comparetotmag -12.0000000 -12.2345 -> -1 +dqctm628 comparetotmag -12.00000000 -12.2345 -> -1 +dqctm629 comparetotmag -12.000000000 -12.2345 -> -1 +dqctm630 comparetotmag -12.1234 -12 -> 1 +dqctm631 comparetotmag -12.1234 -12.0 -> 1 +dqctm632 comparetotmag -12.1234 -12.00 -> 1 +dqctm633 comparetotmag -12.1234 -12.000 -> 1 +dqctm634 comparetotmag -12.1234 -12.0000 -> 1 +dqctm635 comparetotmag -12.1234 -12.00000 -> 1 +dqctm636 comparetotmag -12.1234 -12.000000 -> 1 +dqctm637 comparetotmag -12.1234 -12.0000000 -> 1 +dqctm638 comparetotmag -12.1234 -12.00000000 -> 1 +dqctm639 comparetotmag -12.1234 -12.000000000 -> 1 + +-- extended zeros +dqctm640 comparetotmag 0 0 -> 0 +dqctm641 comparetotmag 0 -0 -> 0 +dqctm642 comparetotmag 0 -0.0 -> 1 +dqctm643 comparetotmag 0 0.0 -> 1 +dqctm644 comparetotmag -0 0 -> 0 +dqctm645 comparetotmag -0 -0 -> 0 +dqctm646 comparetotmag -0 -0.0 -> 1 +dqctm647 comparetotmag -0 0.0 -> 1 +dqctm648 comparetotmag 0.0 0 -> -1 +dqctm649 comparetotmag 0.0 -0 -> -1 +dqctm650 comparetotmag 0.0 -0.0 -> 0 +dqctm651 comparetotmag 0.0 0.0 -> 0 +dqctm652 comparetotmag -0.0 0 -> -1 +dqctm653 comparetotmag -0.0 -0 -> -1 +dqctm654 comparetotmag -0.0 -0.0 -> 0 +dqctm655 comparetotmag -0.0 0.0 -> 0 + +dqctm656 comparetotmag -0E1 0.0 -> 1 +dqctm657 comparetotmag -0E2 0.0 -> 1 +dqctm658 comparetotmag 0E1 0.0 -> 1 +dqctm659 comparetotmag 0E2 0.0 -> 1 +dqctm660 comparetotmag -0E1 0 -> 1 +dqctm661 comparetotmag -0E2 0 -> 1 +dqctm662 comparetotmag 0E1 0 -> 1 +dqctm663 comparetotmag 0E2 0 -> 1 +dqctm664 comparetotmag -0E1 -0E1 -> 0 +dqctm665 comparetotmag -0E2 -0E1 -> 1 +dqctm666 comparetotmag 0E1 -0E1 -> 0 +dqctm667 comparetotmag 0E2 -0E1 -> 1 +dqctm668 comparetotmag -0E1 -0E2 -> -1 +dqctm669 comparetotmag -0E2 -0E2 -> 0 +dqctm670 comparetotmag 0E1 -0E2 -> -1 +dqctm671 comparetotmag 0E2 -0E2 -> 0 +dqctm672 comparetotmag -0E1 0E1 -> 0 +dqctm673 comparetotmag -0E2 0E1 -> 1 +dqctm674 comparetotmag 0E1 0E1 -> 0 +dqctm675 comparetotmag 0E2 0E1 -> 1 +dqctm676 comparetotmag -0E1 0E2 -> -1 +dqctm677 comparetotmag -0E2 0E2 -> 0 +dqctm678 comparetotmag 0E1 0E2 -> -1 +dqctm679 comparetotmag 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +dqctm680 comparetotmag 12 12 -> 0 +dqctm681 comparetotmag 12 12.0 -> 1 +dqctm682 comparetotmag 12 12.00 -> 1 +dqctm683 comparetotmag 12 12.000 -> 1 +dqctm684 comparetotmag 12 12.0000 -> 1 +dqctm685 comparetotmag 12 12.00000 -> 1 +dqctm686 comparetotmag 12 12.000000 -> 1 +dqctm687 comparetotmag 12 12.0000000 -> 1 +dqctm688 comparetotmag 12 12.00000000 -> 1 +dqctm689 comparetotmag 12 12.000000000 -> 1 +dqctm690 comparetotmag 12 12 -> 0 +dqctm691 comparetotmag 12.0 12 -> -1 +dqctm692 comparetotmag 12.00 12 -> -1 +dqctm693 comparetotmag 12.000 12 -> -1 +dqctm694 comparetotmag 12.0000 12 -> -1 +dqctm695 comparetotmag 12.00000 12 -> -1 +dqctm696 comparetotmag 12.000000 12 -> -1 +dqctm697 comparetotmag 12.0000000 12 -> -1 +dqctm698 comparetotmag 12.00000000 12 -> -1 +dqctm699 comparetotmag 12.000000000 12 -> -1 + +-- old long operand checks +dqctm701 comparetotmag 12345678000 1 -> 1 +dqctm702 comparetotmag 1 12345678000 -> -1 +dqctm703 comparetotmag 1234567800 1 -> 1 +dqctm704 comparetotmag 1 1234567800 -> -1 +dqctm705 comparetotmag 1234567890 1 -> 1 +dqctm706 comparetotmag 1 1234567890 -> -1 +dqctm707 comparetotmag 1234567891 1 -> 1 +dqctm708 comparetotmag 1 1234567891 -> -1 +dqctm709 comparetotmag 12345678901 1 -> 1 +dqctm710 comparetotmag 1 12345678901 -> -1 +dqctm711 comparetotmag 1234567896 1 -> 1 +dqctm712 comparetotmag 1 1234567896 -> -1 +dqctm713 comparetotmag -1234567891 1 -> 1 +dqctm714 comparetotmag 1 -1234567891 -> -1 +dqctm715 comparetotmag -12345678901 1 -> 1 +dqctm716 comparetotmag 1 -12345678901 -> -1 +dqctm717 comparetotmag -1234567896 1 -> 1 +dqctm718 comparetotmag 1 -1234567896 -> -1 + +-- old residue cases +dqctm740 comparetotmag 1 0.9999999 -> 1 +dqctm741 comparetotmag 1 0.999999 -> 1 +dqctm742 comparetotmag 1 0.99999 -> 1 +dqctm743 comparetotmag 1 1.0000 -> 1 +dqctm744 comparetotmag 1 1.00001 -> -1 +dqctm745 comparetotmag 1 1.000001 -> -1 +dqctm746 comparetotmag 1 1.0000001 -> -1 +dqctm750 comparetotmag 0.9999999 1 -> -1 +dqctm751 comparetotmag 0.999999 1 -> -1 +dqctm752 comparetotmag 0.99999 1 -> -1 +dqctm753 comparetotmag 1.0000 1 -> -1 +dqctm754 comparetotmag 1.00001 1 -> 1 +dqctm755 comparetotmag 1.000001 1 -> 1 +dqctm756 comparetotmag 1.0000001 1 -> 1 + +-- Specials +dqctm780 comparetotmag Inf -Inf -> 0 +dqctm781 comparetotmag Inf -1000 -> 1 +dqctm782 comparetotmag Inf -1 -> 1 +dqctm783 comparetotmag Inf -0 -> 1 +dqctm784 comparetotmag Inf 0 -> 1 +dqctm785 comparetotmag Inf 1 -> 1 +dqctm786 comparetotmag Inf 1000 -> 1 +dqctm787 comparetotmag Inf Inf -> 0 +dqctm788 comparetotmag -1000 Inf -> -1 +dqctm789 comparetotmag -Inf Inf -> 0 +dqctm790 comparetotmag -1 Inf -> -1 +dqctm791 comparetotmag -0 Inf -> -1 +dqctm792 comparetotmag 0 Inf -> -1 +dqctm793 comparetotmag 1 Inf -> -1 +dqctm794 comparetotmag 1000 Inf -> -1 +dqctm795 comparetotmag Inf Inf -> 0 + +dqctm800 comparetotmag -Inf -Inf -> 0 +dqctm801 comparetotmag -Inf -1000 -> 1 +dqctm802 comparetotmag -Inf -1 -> 1 +dqctm803 comparetotmag -Inf -0 -> 1 +dqctm804 comparetotmag -Inf 0 -> 1 +dqctm805 comparetotmag -Inf 1 -> 1 +dqctm806 comparetotmag -Inf 1000 -> 1 +dqctm807 comparetotmag -Inf Inf -> 0 +dqctm808 comparetotmag -Inf -Inf -> 0 +dqctm809 comparetotmag -1000 -Inf -> -1 +dqctm810 comparetotmag -1 -Inf -> -1 +dqctm811 comparetotmag -0 -Inf -> -1 +dqctm812 comparetotmag 0 -Inf -> -1 +dqctm813 comparetotmag 1 -Inf -> -1 +dqctm814 comparetotmag 1000 -Inf -> -1 +dqctm815 comparetotmag Inf -Inf -> 0 + +dqctm821 comparetotmag NaN -Inf -> 1 +dqctm822 comparetotmag NaN -1000 -> 1 +dqctm823 comparetotmag NaN -1 -> 1 +dqctm824 comparetotmag NaN -0 -> 1 +dqctm825 comparetotmag NaN 0 -> 1 +dqctm826 comparetotmag NaN 1 -> 1 +dqctm827 comparetotmag NaN 1000 -> 1 +dqctm828 comparetotmag NaN Inf -> 1 +dqctm829 comparetotmag NaN NaN -> 0 +dqctm830 comparetotmag -Inf NaN -> -1 +dqctm831 comparetotmag -1000 NaN -> -1 +dqctm832 comparetotmag -1 NaN -> -1 +dqctm833 comparetotmag -0 NaN -> -1 +dqctm834 comparetotmag 0 NaN -> -1 +dqctm835 comparetotmag 1 NaN -> -1 +dqctm836 comparetotmag 1000 NaN -> -1 +dqctm837 comparetotmag Inf NaN -> -1 +dqctm838 comparetotmag -NaN -NaN -> 0 +dqctm839 comparetotmag +NaN -NaN -> 0 +dqctm840 comparetotmag -NaN +NaN -> 0 + +dqctm841 comparetotmag sNaN -sNaN -> 0 +dqctm842 comparetotmag sNaN -NaN -> -1 +dqctm843 comparetotmag sNaN -Inf -> 1 +dqctm844 comparetotmag sNaN -1000 -> 1 +dqctm845 comparetotmag sNaN -1 -> 1 +dqctm846 comparetotmag sNaN -0 -> 1 +dqctm847 comparetotmag sNaN 0 -> 1 +dqctm848 comparetotmag sNaN 1 -> 1 +dqctm849 comparetotmag sNaN 1000 -> 1 +dqctm850 comparetotmag sNaN NaN -> -1 +dqctm851 comparetotmag sNaN sNaN -> 0 + +dqctm852 comparetotmag -sNaN sNaN -> 0 +dqctm853 comparetotmag -NaN sNaN -> 1 +dqctm854 comparetotmag -Inf sNaN -> -1 +dqctm855 comparetotmag -1000 sNaN -> -1 +dqctm856 comparetotmag -1 sNaN -> -1 +dqctm857 comparetotmag -0 sNaN -> -1 +dqctm858 comparetotmag 0 sNaN -> -1 +dqctm859 comparetotmag 1 sNaN -> -1 +dqctm860 comparetotmag 1000 sNaN -> -1 +dqctm861 comparetotmag Inf sNaN -> -1 +dqctm862 comparetotmag NaN sNaN -> 1 +dqctm863 comparetotmag sNaN sNaN -> 0 + +dqctm871 comparetotmag -sNaN -sNaN -> 0 +dqctm872 comparetotmag -sNaN -NaN -> -1 +dqctm873 comparetotmag -sNaN -Inf -> 1 +dqctm874 comparetotmag -sNaN -1000 -> 1 +dqctm875 comparetotmag -sNaN -1 -> 1 +dqctm876 comparetotmag -sNaN -0 -> 1 +dqctm877 comparetotmag -sNaN 0 -> 1 +dqctm878 comparetotmag -sNaN 1 -> 1 +dqctm879 comparetotmag -sNaN 1000 -> 1 +dqctm880 comparetotmag -sNaN NaN -> -1 +dqctm881 comparetotmag -sNaN sNaN -> 0 + +dqctm882 comparetotmag -sNaN -sNaN -> 0 +dqctm883 comparetotmag -NaN -sNaN -> 1 +dqctm884 comparetotmag -Inf -sNaN -> -1 +dqctm885 comparetotmag -1000 -sNaN -> -1 +dqctm886 comparetotmag -1 -sNaN -> -1 +dqctm887 comparetotmag -0 -sNaN -> -1 +dqctm888 comparetotmag 0 -sNaN -> -1 +dqctm889 comparetotmag 1 -sNaN -> -1 +dqctm890 comparetotmag 1000 -sNaN -> -1 +dqctm891 comparetotmag Inf -sNaN -> -1 +dqctm892 comparetotmag NaN -sNaN -> 1 +dqctm893 comparetotmag sNaN -sNaN -> 0 + +-- NaNs with payload +dqctm960 comparetotmag NaN9 -Inf -> 1 +dqctm961 comparetotmag NaN8 999 -> 1 +dqctm962 comparetotmag NaN77 Inf -> 1 +dqctm963 comparetotmag -NaN67 NaN5 -> 1 +dqctm964 comparetotmag -Inf -NaN4 -> -1 +dqctm965 comparetotmag -999 -NaN33 -> -1 +dqctm966 comparetotmag Inf NaN2 -> -1 + +dqctm970 comparetotmag -NaN41 -NaN42 -> -1 +dqctm971 comparetotmag +NaN41 -NaN42 -> -1 +dqctm972 comparetotmag -NaN41 +NaN42 -> -1 +dqctm973 comparetotmag +NaN41 +NaN42 -> -1 +dqctm974 comparetotmag -NaN42 -NaN01 -> 1 +dqctm975 comparetotmag +NaN42 -NaN01 -> 1 +dqctm976 comparetotmag -NaN42 +NaN01 -> 1 +dqctm977 comparetotmag +NaN42 +NaN01 -> 1 + +dqctm980 comparetotmag -sNaN771 -sNaN772 -> -1 +dqctm981 comparetotmag +sNaN771 -sNaN772 -> -1 +dqctm982 comparetotmag -sNaN771 +sNaN772 -> -1 +dqctm983 comparetotmag +sNaN771 +sNaN772 -> -1 +dqctm984 comparetotmag -sNaN772 -sNaN771 -> 1 +dqctm985 comparetotmag +sNaN772 -sNaN771 -> 1 +dqctm986 comparetotmag -sNaN772 +sNaN771 -> 1 +dqctm987 comparetotmag +sNaN772 +sNaN771 -> 1 + +dqctm991 comparetotmag -sNaN99 -Inf -> 1 +dqctm992 comparetotmag sNaN98 -11 -> 1 +dqctm993 comparetotmag sNaN97 NaN -> -1 +dqctm994 comparetotmag sNaN16 sNaN94 -> -1 +dqctm995 comparetotmag NaN85 sNaN83 -> 1 +dqctm996 comparetotmag -Inf sNaN92 -> -1 +dqctm997 comparetotmag 088 sNaN81 -> -1 +dqctm998 comparetotmag Inf sNaN90 -> -1 +dqctm999 comparetotmag NaN -sNaN89 -> 1 + +-- spread zeros +dqctm1110 comparetotmag 0E-6143 0 -> -1 +dqctm1111 comparetotmag 0E-6143 -0 -> -1 +dqctm1112 comparetotmag -0E-6143 0 -> -1 +dqctm1113 comparetotmag -0E-6143 -0 -> -1 +dqctm1114 comparetotmag 0E-6143 0E+6144 -> -1 +dqctm1115 comparetotmag 0E-6143 -0E+6144 -> -1 +dqctm1116 comparetotmag -0E-6143 0E+6144 -> -1 +dqctm1117 comparetotmag -0E-6143 -0E+6144 -> -1 +dqctm1118 comparetotmag 0 0E+6144 -> -1 +dqctm1119 comparetotmag 0 -0E+6144 -> -1 +dqctm1120 comparetotmag -0 0E+6144 -> -1 +dqctm1121 comparetotmag -0 -0E+6144 -> -1 + +dqctm1130 comparetotmag 0E+6144 0 -> 1 +dqctm1131 comparetotmag 0E+6144 -0 -> 1 +dqctm1132 comparetotmag -0E+6144 0 -> 1 +dqctm1133 comparetotmag -0E+6144 -0 -> 1 +dqctm1134 comparetotmag 0E+6144 0E-6143 -> 1 +dqctm1135 comparetotmag 0E+6144 -0E-6143 -> 1 +dqctm1136 comparetotmag -0E+6144 0E-6143 -> 1 +dqctm1137 comparetotmag -0E+6144 -0E-6143 -> 1 +dqctm1138 comparetotmag 0 0E-6143 -> 1 +dqctm1139 comparetotmag 0 -0E-6143 -> 1 +dqctm1140 comparetotmag -0 0E-6143 -> 1 +dqctm1141 comparetotmag -0 -0E-6143 -> 1 + +-- Null tests +dqctm9990 comparetotmag 10 # -> NaN Invalid_operation +dqctm9991 comparetotmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqCopy.decTest b/Lib/test/decimaltestdata/dqCopy.decTest index 7254d68bb7e..0c6243158f2 100644 --- a/Lib/test/decimaltestdata/dqCopy.decTest +++ b/Lib/test/decimaltestdata/dqCopy.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqCopy.decTest -- quiet decQuad copy -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqcpy001 copy +7.50 -> 7.50 - --- Infinities -dqcpy011 copy Infinity -> Infinity -dqcpy012 copy -Infinity -> -Infinity - --- NaNs, 0 payload -dqcpy021 copy NaN -> NaN -dqcpy022 copy -NaN -> -NaN -dqcpy023 copy sNaN -> sNaN -dqcpy024 copy -sNaN -> -sNaN - --- NaNs, non-0 payload -dqcpy031 copy NaN10 -> NaN10 -dqcpy032 copy -NaN10 -> -NaN10 -dqcpy033 copy sNaN10 -> sNaN10 -dqcpy034 copy -sNaN10 -> -sNaN10 -dqcpy035 copy NaN7 -> NaN7 -dqcpy036 copy -NaN7 -> -NaN7 -dqcpy037 copy sNaN101 -> sNaN101 -dqcpy038 copy -sNaN101 -> -sNaN101 - --- finites -dqcpy101 copy 7 -> 7 -dqcpy102 copy -7 -> -7 -dqcpy103 copy 75 -> 75 -dqcpy104 copy -75 -> -75 -dqcpy105 copy 7.50 -> 7.50 -dqcpy106 copy -7.50 -> -7.50 -dqcpy107 copy 7.500 -> 7.500 -dqcpy108 copy -7.500 -> -7.500 - --- zeros -dqcpy111 copy 0 -> 0 -dqcpy112 copy -0 -> -0 -dqcpy113 copy 0E+4 -> 0E+4 -dqcpy114 copy -0E+4 -> -0E+4 -dqcpy115 copy 0.0000 -> 0.0000 -dqcpy116 copy -0.0000 -> -0.0000 -dqcpy117 copy 0E-141 -> 0E-141 -dqcpy118 copy -0E-141 -> -0E-141 - --- full coefficients, alternating bits -dqcpy121 copy 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqcpy122 copy -2682682682682682682682682682682682 -> -2682682682682682682682682682682682 -dqcpy123 copy 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 -dqcpy124 copy -1341341341341341341341341341341341 -> -1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcpy131 copy 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqcpy132 copy 1E-6143 -> 1E-6143 -dqcpy133 copy 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqcpy134 copy 1E-6176 -> 1E-6176 - -dqcpy135 copy -1E-6176 -> -1E-6176 -dqcpy136 copy -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqcpy137 copy -1E-6143 -> -1E-6143 -dqcpy138 copy -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqCopy.decTest -- quiet decQuad copy -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqcpy001 copy +7.50 -> 7.50 + +-- Infinities +dqcpy011 copy Infinity -> Infinity +dqcpy012 copy -Infinity -> -Infinity + +-- NaNs, 0 payload +dqcpy021 copy NaN -> NaN +dqcpy022 copy -NaN -> -NaN +dqcpy023 copy sNaN -> sNaN +dqcpy024 copy -sNaN -> -sNaN + +-- NaNs, non-0 payload +dqcpy031 copy NaN10 -> NaN10 +dqcpy032 copy -NaN10 -> -NaN10 +dqcpy033 copy sNaN10 -> sNaN10 +dqcpy034 copy -sNaN10 -> -sNaN10 +dqcpy035 copy NaN7 -> NaN7 +dqcpy036 copy -NaN7 -> -NaN7 +dqcpy037 copy sNaN101 -> sNaN101 +dqcpy038 copy -sNaN101 -> -sNaN101 + +-- finites +dqcpy101 copy 7 -> 7 +dqcpy102 copy -7 -> -7 +dqcpy103 copy 75 -> 75 +dqcpy104 copy -75 -> -75 +dqcpy105 copy 7.50 -> 7.50 +dqcpy106 copy -7.50 -> -7.50 +dqcpy107 copy 7.500 -> 7.500 +dqcpy108 copy -7.500 -> -7.500 + +-- zeros +dqcpy111 copy 0 -> 0 +dqcpy112 copy -0 -> -0 +dqcpy113 copy 0E+4 -> 0E+4 +dqcpy114 copy -0E+4 -> -0E+4 +dqcpy115 copy 0.0000 -> 0.0000 +dqcpy116 copy -0.0000 -> -0.0000 +dqcpy117 copy 0E-141 -> 0E-141 +dqcpy118 copy -0E-141 -> -0E-141 + +-- full coefficients, alternating bits +dqcpy121 copy 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqcpy122 copy -2682682682682682682682682682682682 -> -2682682682682682682682682682682682 +dqcpy123 copy 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 +dqcpy124 copy -1341341341341341341341341341341341 -> -1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcpy131 copy 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqcpy132 copy 1E-6143 -> 1E-6143 +dqcpy133 copy 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqcpy134 copy 1E-6176 -> 1E-6176 + +dqcpy135 copy -1E-6176 -> -1E-6176 +dqcpy136 copy -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqcpy137 copy -1E-6143 -> -1E-6143 +dqcpy138 copy -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqCopyAbs.decTest b/Lib/test/decimaltestdata/dqCopyAbs.decTest index bdec0206dee..16bcb4eaedb 100644 --- a/Lib/test/decimaltestdata/dqCopyAbs.decTest +++ b/Lib/test/decimaltestdata/dqCopyAbs.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqCopyAbs.decTest -- quiet decQuad copy and set sign to zero -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqcpa001 copyabs +7.50 -> 7.50 - --- Infinities -dqcpa011 copyabs Infinity -> Infinity -dqcpa012 copyabs -Infinity -> Infinity - --- NaNs, 0 payload -dqcpa021 copyabs NaN -> NaN -dqcpa022 copyabs -NaN -> NaN -dqcpa023 copyabs sNaN -> sNaN -dqcpa024 copyabs -sNaN -> sNaN - --- NaNs, non-0 payload -dqcpa031 copyabs NaN10 -> NaN10 -dqcpa032 copyabs -NaN15 -> NaN15 -dqcpa033 copyabs sNaN15 -> sNaN15 -dqcpa034 copyabs -sNaN10 -> sNaN10 -dqcpa035 copyabs NaN7 -> NaN7 -dqcpa036 copyabs -NaN7 -> NaN7 -dqcpa037 copyabs sNaN101 -> sNaN101 -dqcpa038 copyabs -sNaN101 -> sNaN101 - --- finites -dqcpa101 copyabs 7 -> 7 -dqcpa102 copyabs -7 -> 7 -dqcpa103 copyabs 75 -> 75 -dqcpa104 copyabs -75 -> 75 -dqcpa105 copyabs 7.10 -> 7.10 -dqcpa106 copyabs -7.10 -> 7.10 -dqcpa107 copyabs 7.500 -> 7.500 -dqcpa108 copyabs -7.500 -> 7.500 - --- zeros -dqcpa111 copyabs 0 -> 0 -dqcpa112 copyabs -0 -> 0 -dqcpa113 copyabs 0E+6 -> 0E+6 -dqcpa114 copyabs -0E+6 -> 0E+6 -dqcpa115 copyabs 0.0000 -> 0.0000 -dqcpa116 copyabs -0.0000 -> 0.0000 -dqcpa117 copyabs 0E-141 -> 0E-141 -dqcpa118 copyabs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqcpa121 copyabs 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqcpa122 copyabs -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqcpa123 copyabs 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 -dqcpa124 copyabs -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcpa131 copyabs 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqcpa132 copyabs 1E-6143 -> 1E-6143 -dqcpa133 copyabs 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqcpa134 copyabs 1E-6176 -> 1E-6176 - -dqcpa135 copyabs -1E-6176 -> 1E-6176 -dqcpa136 copyabs -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqcpa137 copyabs -1E-6143 -> 1E-6143 -dqcpa138 copyabs -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqCopyAbs.decTest -- quiet decQuad copy and set sign to zero -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqcpa001 copyabs +7.50 -> 7.50 + +-- Infinities +dqcpa011 copyabs Infinity -> Infinity +dqcpa012 copyabs -Infinity -> Infinity + +-- NaNs, 0 payload +dqcpa021 copyabs NaN -> NaN +dqcpa022 copyabs -NaN -> NaN +dqcpa023 copyabs sNaN -> sNaN +dqcpa024 copyabs -sNaN -> sNaN + +-- NaNs, non-0 payload +dqcpa031 copyabs NaN10 -> NaN10 +dqcpa032 copyabs -NaN15 -> NaN15 +dqcpa033 copyabs sNaN15 -> sNaN15 +dqcpa034 copyabs -sNaN10 -> sNaN10 +dqcpa035 copyabs NaN7 -> NaN7 +dqcpa036 copyabs -NaN7 -> NaN7 +dqcpa037 copyabs sNaN101 -> sNaN101 +dqcpa038 copyabs -sNaN101 -> sNaN101 + +-- finites +dqcpa101 copyabs 7 -> 7 +dqcpa102 copyabs -7 -> 7 +dqcpa103 copyabs 75 -> 75 +dqcpa104 copyabs -75 -> 75 +dqcpa105 copyabs 7.10 -> 7.10 +dqcpa106 copyabs -7.10 -> 7.10 +dqcpa107 copyabs 7.500 -> 7.500 +dqcpa108 copyabs -7.500 -> 7.500 + +-- zeros +dqcpa111 copyabs 0 -> 0 +dqcpa112 copyabs -0 -> 0 +dqcpa113 copyabs 0E+6 -> 0E+6 +dqcpa114 copyabs -0E+6 -> 0E+6 +dqcpa115 copyabs 0.0000 -> 0.0000 +dqcpa116 copyabs -0.0000 -> 0.0000 +dqcpa117 copyabs 0E-141 -> 0E-141 +dqcpa118 copyabs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqcpa121 copyabs 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqcpa122 copyabs -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqcpa123 copyabs 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 +dqcpa124 copyabs -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcpa131 copyabs 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqcpa132 copyabs 1E-6143 -> 1E-6143 +dqcpa133 copyabs 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqcpa134 copyabs 1E-6176 -> 1E-6176 + +dqcpa135 copyabs -1E-6176 -> 1E-6176 +dqcpa136 copyabs -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqcpa137 copyabs -1E-6143 -> 1E-6143 +dqcpa138 copyabs -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqCopyNegate.decTest b/Lib/test/decimaltestdata/dqCopyNegate.decTest index ea008557724..6253f5a3558 100644 --- a/Lib/test/decimaltestdata/dqCopyNegate.decTest +++ b/Lib/test/decimaltestdata/dqCopyNegate.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqCopyNegate.decTest -- quiet decQuad copy and negate -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqcpn001 copynegate +7.50 -> -7.50 - --- Infinities -dqcpn011 copynegate Infinity -> -Infinity -dqcpn012 copynegate -Infinity -> Infinity - --- NaNs, 0 payload -dqcpn021 copynegate NaN -> -NaN -dqcpn022 copynegate -NaN -> NaN -dqcpn023 copynegate sNaN -> -sNaN -dqcpn024 copynegate -sNaN -> sNaN - --- NaNs, non-0 payload -dqcpn031 copynegate NaN13 -> -NaN13 -dqcpn032 copynegate -NaN13 -> NaN13 -dqcpn033 copynegate sNaN13 -> -sNaN13 -dqcpn034 copynegate -sNaN13 -> sNaN13 -dqcpn035 copynegate NaN70 -> -NaN70 -dqcpn036 copynegate -NaN70 -> NaN70 -dqcpn037 copynegate sNaN101 -> -sNaN101 -dqcpn038 copynegate -sNaN101 -> sNaN101 - --- finites -dqcpn101 copynegate 7 -> -7 -dqcpn102 copynegate -7 -> 7 -dqcpn103 copynegate 75 -> -75 -dqcpn104 copynegate -75 -> 75 -dqcpn105 copynegate 7.50 -> -7.50 -dqcpn106 copynegate -7.50 -> 7.50 -dqcpn107 copynegate 7.500 -> -7.500 -dqcpn108 copynegate -7.500 -> 7.500 - --- zeros -dqcpn111 copynegate 0 -> -0 -dqcpn112 copynegate -0 -> 0 -dqcpn113 copynegate 0E+4 -> -0E+4 -dqcpn114 copynegate -0E+4 -> 0E+4 -dqcpn115 copynegate 0.0000 -> -0.0000 -dqcpn116 copynegate -0.0000 -> 0.0000 -dqcpn117 copynegate 0E-141 -> -0E-141 -dqcpn118 copynegate -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqcpn121 copynegate 2682682682682682682682682682682682 -> -2682682682682682682682682682682682 -dqcpn122 copynegate -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqcpn123 copynegate 1341341341341341341341341341341341 -> -1341341341341341341341341341341341 -dqcpn124 copynegate -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcpn131 copynegate 9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqcpn132 copynegate 1E-6143 -> -1E-6143 -dqcpn133 copynegate 1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqcpn134 copynegate 1E-6176 -> -1E-6176 - -dqcpn135 copynegate -1E-6176 -> 1E-6176 -dqcpn136 copynegate -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqcpn137 copynegate -1E-6143 -> 1E-6143 -dqcpn138 copynegate -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqCopyNegate.decTest -- quiet decQuad copy and negate -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqcpn001 copynegate +7.50 -> -7.50 + +-- Infinities +dqcpn011 copynegate Infinity -> -Infinity +dqcpn012 copynegate -Infinity -> Infinity + +-- NaNs, 0 payload +dqcpn021 copynegate NaN -> -NaN +dqcpn022 copynegate -NaN -> NaN +dqcpn023 copynegate sNaN -> -sNaN +dqcpn024 copynegate -sNaN -> sNaN + +-- NaNs, non-0 payload +dqcpn031 copynegate NaN13 -> -NaN13 +dqcpn032 copynegate -NaN13 -> NaN13 +dqcpn033 copynegate sNaN13 -> -sNaN13 +dqcpn034 copynegate -sNaN13 -> sNaN13 +dqcpn035 copynegate NaN70 -> -NaN70 +dqcpn036 copynegate -NaN70 -> NaN70 +dqcpn037 copynegate sNaN101 -> -sNaN101 +dqcpn038 copynegate -sNaN101 -> sNaN101 + +-- finites +dqcpn101 copynegate 7 -> -7 +dqcpn102 copynegate -7 -> 7 +dqcpn103 copynegate 75 -> -75 +dqcpn104 copynegate -75 -> 75 +dqcpn105 copynegate 7.50 -> -7.50 +dqcpn106 copynegate -7.50 -> 7.50 +dqcpn107 copynegate 7.500 -> -7.500 +dqcpn108 copynegate -7.500 -> 7.500 + +-- zeros +dqcpn111 copynegate 0 -> -0 +dqcpn112 copynegate -0 -> 0 +dqcpn113 copynegate 0E+4 -> -0E+4 +dqcpn114 copynegate -0E+4 -> 0E+4 +dqcpn115 copynegate 0.0000 -> -0.0000 +dqcpn116 copynegate -0.0000 -> 0.0000 +dqcpn117 copynegate 0E-141 -> -0E-141 +dqcpn118 copynegate -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqcpn121 copynegate 2682682682682682682682682682682682 -> -2682682682682682682682682682682682 +dqcpn122 copynegate -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqcpn123 copynegate 1341341341341341341341341341341341 -> -1341341341341341341341341341341341 +dqcpn124 copynegate -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcpn131 copynegate 9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqcpn132 copynegate 1E-6143 -> -1E-6143 +dqcpn133 copynegate 1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqcpn134 copynegate 1E-6176 -> -1E-6176 + +dqcpn135 copynegate -1E-6176 -> 1E-6176 +dqcpn136 copynegate -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqcpn137 copynegate -1E-6143 -> 1E-6143 +dqcpn138 copynegate -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqCopySign.decTest b/Lib/test/decimaltestdata/dqCopySign.decTest index ce794b7c35c..97b5e6e955e 100644 --- a/Lib/test/decimaltestdata/dqCopySign.decTest +++ b/Lib/test/decimaltestdata/dqCopySign.decTest @@ -1,175 +1,175 @@ ------------------------------------------------------------------------- --- dqCopySign.decTest -- quiet decQuad copy with sign from rhs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqcps001 copysign +7.50 11 -> 7.50 - --- Infinities -dqcps011 copysign Infinity 11 -> Infinity -dqcps012 copysign -Infinity 11 -> Infinity - --- NaNs, 0 payload -dqcps021 copysign NaN 11 -> NaN -dqcps022 copysign -NaN 11 -> NaN -dqcps023 copysign sNaN 11 -> sNaN -dqcps024 copysign -sNaN 11 -> sNaN - --- NaNs, non-0 payload -dqcps031 copysign NaN10 11 -> NaN10 -dqcps032 copysign -NaN10 11 -> NaN10 -dqcps033 copysign sNaN10 11 -> sNaN10 -dqcps034 copysign -sNaN10 11 -> sNaN10 -dqcps035 copysign NaN7 11 -> NaN7 -dqcps036 copysign -NaN7 11 -> NaN7 -dqcps037 copysign sNaN101 11 -> sNaN101 -dqcps038 copysign -sNaN101 11 -> sNaN101 - --- finites -dqcps101 copysign 7 11 -> 7 -dqcps102 copysign -7 11 -> 7 -dqcps103 copysign 75 11 -> 75 -dqcps104 copysign -75 11 -> 75 -dqcps105 copysign 7.50 11 -> 7.50 -dqcps106 copysign -7.50 11 -> 7.50 -dqcps107 copysign 7.500 11 -> 7.500 -dqcps108 copysign -7.500 11 -> 7.500 - --- zeros -dqcps111 copysign 0 11 -> 0 -dqcps112 copysign -0 11 -> 0 -dqcps113 copysign 0E+4 11 -> 0E+4 -dqcps114 copysign -0E+4 11 -> 0E+4 -dqcps115 copysign 0.0000 11 -> 0.0000 -dqcps116 copysign -0.0000 11 -> 0.0000 -dqcps117 copysign 0E-141 11 -> 0E-141 -dqcps118 copysign -0E-141 11 -> 0E-141 - --- full coefficients, alternating bits -dqcps121 copysign 2682682682682682682682682682682682 8 -> 2682682682682682682682682682682682 -dqcps122 copysign -2682682682682682682682682682682682 8 -> 2682682682682682682682682682682682 -dqcps123 copysign 1341341341341341341341341341341341 8 -> 1341341341341341341341341341341341 -dqcps124 copysign -1341341341341341341341341341341341 8 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcps131 copysign 9.999999999999999999999999999999999E+6144 8 -> 9.999999999999999999999999999999999E+6144 -dqcps132 copysign 1E-6143 8 -> 1E-6143 -dqcps133 copysign 1.000000000000000000000000000000000E-6143 8 -> 1.000000000000000000000000000000000E-6143 -dqcps134 copysign 1E-6176 8 -> 1E-6176 - -dqcps135 copysign -1E-6176 8 -> 1E-6176 -dqcps136 copysign -1.000000000000000000000000000000000E-6143 8 -> 1.000000000000000000000000000000000E-6143 -dqcps137 copysign -1E-6143 8 -> 1E-6143 -dqcps138 copysign -9.999999999999999999999999999999999E+6144 8 -> 9.999999999999999999999999999999999E+6144 - --- repeat with negative RHS - --- Infinities -dqcps211 copysign Infinity -34 -> -Infinity -dqcps212 copysign -Infinity -34 -> -Infinity - --- NaNs, 0 payload -dqcps221 copysign NaN -34 -> -NaN -dqcps222 copysign -NaN -34 -> -NaN -dqcps223 copysign sNaN -34 -> -sNaN -dqcps224 copysign -sNaN -34 -> -sNaN - --- NaNs, non-0 payload -dqcps231 copysign NaN10 -34 -> -NaN10 -dqcps232 copysign -NaN10 -34 -> -NaN10 -dqcps233 copysign sNaN10 -34 -> -sNaN10 -dqcps234 copysign -sNaN10 -34 -> -sNaN10 -dqcps235 copysign NaN7 -34 -> -NaN7 -dqcps236 copysign -NaN7 -34 -> -NaN7 -dqcps237 copysign sNaN101 -34 -> -sNaN101 -dqcps238 copysign -sNaN101 -34 -> -sNaN101 - --- finites -dqcps301 copysign 7 -34 -> -7 -dqcps302 copysign -7 -34 -> -7 -dqcps303 copysign 75 -34 -> -75 -dqcps304 copysign -75 -34 -> -75 -dqcps305 copysign 7.50 -34 -> -7.50 -dqcps306 copysign -7.50 -34 -> -7.50 -dqcps307 copysign 7.500 -34 -> -7.500 -dqcps308 copysign -7.500 -34 -> -7.500 - --- zeros -dqcps311 copysign 0 -34 -> -0 -dqcps312 copysign -0 -34 -> -0 -dqcps313 copysign 0E+4 -34 -> -0E+4 -dqcps314 copysign -0E+4 -34 -> -0E+4 -dqcps315 copysign 0.0000 -34 -> -0.0000 -dqcps316 copysign -0.0000 -34 -> -0.0000 -dqcps317 copysign 0E-141 -34 -> -0E-141 -dqcps318 copysign -0E-141 -34 -> -0E-141 - --- full coefficients, alternating bits -dqcps321 copysign 2682682682682682682682682682682682 -9 -> -2682682682682682682682682682682682 -dqcps322 copysign -2682682682682682682682682682682682 -9 -> -2682682682682682682682682682682682 -dqcps323 copysign 1341341341341341341341341341341341 -9 -> -1341341341341341341341341341341341 -dqcps324 copysign -1341341341341341341341341341341341 -9 -> -1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcps331 copysign 9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 -dqcps332 copysign 1E-6143 -1 -> -1E-6143 -dqcps333 copysign 1.000000000000000000000000000000000E-6143 -1 -> -1.000000000000000000000000000000000E-6143 -dqcps334 copysign 1E-6176 -1 -> -1E-6176 - -dqcps335 copysign -1E-6176 -3 -> -1E-6176 -dqcps336 copysign -1.000000000000000000000000000000000E-6143 -3 -> -1.000000000000000000000000000000000E-6143 -dqcps337 copysign -1E-6143 -3 -> -1E-6143 -dqcps338 copysign -9.999999999999999999999999999999999E+6144 -3 -> -9.999999999999999999999999999999999E+6144 - --- Other kinds of RHS -dqcps401 copysign 701 -34 -> -701 -dqcps402 copysign -720 -34 -> -720 -dqcps403 copysign 701 -0 -> -701 -dqcps404 copysign -720 -0 -> -720 -dqcps405 copysign 701 +0 -> 701 -dqcps406 copysign -720 +0 -> 720 -dqcps407 copysign 701 +34 -> 701 -dqcps408 copysign -720 +34 -> 720 - -dqcps413 copysign 701 -Inf -> -701 -dqcps414 copysign -720 -Inf -> -720 -dqcps415 copysign 701 +Inf -> 701 -dqcps416 copysign -720 +Inf -> 720 - -dqcps420 copysign 701 -NaN -> -701 -dqcps421 copysign -720 -NaN -> -720 -dqcps422 copysign 701 +NaN -> 701 -dqcps423 copysign -720 +NaN -> 720 -dqcps425 copysign -720 +NaN8 -> 720 - -dqcps426 copysign 701 -sNaN -> -701 -dqcps427 copysign -720 -sNaN -> -720 -dqcps428 copysign 701 +sNaN -> 701 -dqcps429 copysign -720 +sNaN -> 720 -dqcps430 copysign -720 +sNaN3 -> 720 - +------------------------------------------------------------------------ +-- dqCopySign.decTest -- quiet decQuad copy with sign from rhs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqcps001 copysign +7.50 11 -> 7.50 + +-- Infinities +dqcps011 copysign Infinity 11 -> Infinity +dqcps012 copysign -Infinity 11 -> Infinity + +-- NaNs, 0 payload +dqcps021 copysign NaN 11 -> NaN +dqcps022 copysign -NaN 11 -> NaN +dqcps023 copysign sNaN 11 -> sNaN +dqcps024 copysign -sNaN 11 -> sNaN + +-- NaNs, non-0 payload +dqcps031 copysign NaN10 11 -> NaN10 +dqcps032 copysign -NaN10 11 -> NaN10 +dqcps033 copysign sNaN10 11 -> sNaN10 +dqcps034 copysign -sNaN10 11 -> sNaN10 +dqcps035 copysign NaN7 11 -> NaN7 +dqcps036 copysign -NaN7 11 -> NaN7 +dqcps037 copysign sNaN101 11 -> sNaN101 +dqcps038 copysign -sNaN101 11 -> sNaN101 + +-- finites +dqcps101 copysign 7 11 -> 7 +dqcps102 copysign -7 11 -> 7 +dqcps103 copysign 75 11 -> 75 +dqcps104 copysign -75 11 -> 75 +dqcps105 copysign 7.50 11 -> 7.50 +dqcps106 copysign -7.50 11 -> 7.50 +dqcps107 copysign 7.500 11 -> 7.500 +dqcps108 copysign -7.500 11 -> 7.500 + +-- zeros +dqcps111 copysign 0 11 -> 0 +dqcps112 copysign -0 11 -> 0 +dqcps113 copysign 0E+4 11 -> 0E+4 +dqcps114 copysign -0E+4 11 -> 0E+4 +dqcps115 copysign 0.0000 11 -> 0.0000 +dqcps116 copysign -0.0000 11 -> 0.0000 +dqcps117 copysign 0E-141 11 -> 0E-141 +dqcps118 copysign -0E-141 11 -> 0E-141 + +-- full coefficients, alternating bits +dqcps121 copysign 2682682682682682682682682682682682 8 -> 2682682682682682682682682682682682 +dqcps122 copysign -2682682682682682682682682682682682 8 -> 2682682682682682682682682682682682 +dqcps123 copysign 1341341341341341341341341341341341 8 -> 1341341341341341341341341341341341 +dqcps124 copysign -1341341341341341341341341341341341 8 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcps131 copysign 9.999999999999999999999999999999999E+6144 8 -> 9.999999999999999999999999999999999E+6144 +dqcps132 copysign 1E-6143 8 -> 1E-6143 +dqcps133 copysign 1.000000000000000000000000000000000E-6143 8 -> 1.000000000000000000000000000000000E-6143 +dqcps134 copysign 1E-6176 8 -> 1E-6176 + +dqcps135 copysign -1E-6176 8 -> 1E-6176 +dqcps136 copysign -1.000000000000000000000000000000000E-6143 8 -> 1.000000000000000000000000000000000E-6143 +dqcps137 copysign -1E-6143 8 -> 1E-6143 +dqcps138 copysign -9.999999999999999999999999999999999E+6144 8 -> 9.999999999999999999999999999999999E+6144 + +-- repeat with negative RHS + +-- Infinities +dqcps211 copysign Infinity -34 -> -Infinity +dqcps212 copysign -Infinity -34 -> -Infinity + +-- NaNs, 0 payload +dqcps221 copysign NaN -34 -> -NaN +dqcps222 copysign -NaN -34 -> -NaN +dqcps223 copysign sNaN -34 -> -sNaN +dqcps224 copysign -sNaN -34 -> -sNaN + +-- NaNs, non-0 payload +dqcps231 copysign NaN10 -34 -> -NaN10 +dqcps232 copysign -NaN10 -34 -> -NaN10 +dqcps233 copysign sNaN10 -34 -> -sNaN10 +dqcps234 copysign -sNaN10 -34 -> -sNaN10 +dqcps235 copysign NaN7 -34 -> -NaN7 +dqcps236 copysign -NaN7 -34 -> -NaN7 +dqcps237 copysign sNaN101 -34 -> -sNaN101 +dqcps238 copysign -sNaN101 -34 -> -sNaN101 + +-- finites +dqcps301 copysign 7 -34 -> -7 +dqcps302 copysign -7 -34 -> -7 +dqcps303 copysign 75 -34 -> -75 +dqcps304 copysign -75 -34 -> -75 +dqcps305 copysign 7.50 -34 -> -7.50 +dqcps306 copysign -7.50 -34 -> -7.50 +dqcps307 copysign 7.500 -34 -> -7.500 +dqcps308 copysign -7.500 -34 -> -7.500 + +-- zeros +dqcps311 copysign 0 -34 -> -0 +dqcps312 copysign -0 -34 -> -0 +dqcps313 copysign 0E+4 -34 -> -0E+4 +dqcps314 copysign -0E+4 -34 -> -0E+4 +dqcps315 copysign 0.0000 -34 -> -0.0000 +dqcps316 copysign -0.0000 -34 -> -0.0000 +dqcps317 copysign 0E-141 -34 -> -0E-141 +dqcps318 copysign -0E-141 -34 -> -0E-141 + +-- full coefficients, alternating bits +dqcps321 copysign 2682682682682682682682682682682682 -9 -> -2682682682682682682682682682682682 +dqcps322 copysign -2682682682682682682682682682682682 -9 -> -2682682682682682682682682682682682 +dqcps323 copysign 1341341341341341341341341341341341 -9 -> -1341341341341341341341341341341341 +dqcps324 copysign -1341341341341341341341341341341341 -9 -> -1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcps331 copysign 9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 +dqcps332 copysign 1E-6143 -1 -> -1E-6143 +dqcps333 copysign 1.000000000000000000000000000000000E-6143 -1 -> -1.000000000000000000000000000000000E-6143 +dqcps334 copysign 1E-6176 -1 -> -1E-6176 + +dqcps335 copysign -1E-6176 -3 -> -1E-6176 +dqcps336 copysign -1.000000000000000000000000000000000E-6143 -3 -> -1.000000000000000000000000000000000E-6143 +dqcps337 copysign -1E-6143 -3 -> -1E-6143 +dqcps338 copysign -9.999999999999999999999999999999999E+6144 -3 -> -9.999999999999999999999999999999999E+6144 + +-- Other kinds of RHS +dqcps401 copysign 701 -34 -> -701 +dqcps402 copysign -720 -34 -> -720 +dqcps403 copysign 701 -0 -> -701 +dqcps404 copysign -720 -0 -> -720 +dqcps405 copysign 701 +0 -> 701 +dqcps406 copysign -720 +0 -> 720 +dqcps407 copysign 701 +34 -> 701 +dqcps408 copysign -720 +34 -> 720 + +dqcps413 copysign 701 -Inf -> -701 +dqcps414 copysign -720 -Inf -> -720 +dqcps415 copysign 701 +Inf -> 701 +dqcps416 copysign -720 +Inf -> 720 + +dqcps420 copysign 701 -NaN -> -701 +dqcps421 copysign -720 -NaN -> -720 +dqcps422 copysign 701 +NaN -> 701 +dqcps423 copysign -720 +NaN -> 720 +dqcps425 copysign -720 +NaN8 -> 720 + +dqcps426 copysign 701 -sNaN -> -701 +dqcps427 copysign -720 -sNaN -> -720 +dqcps428 copysign 701 +sNaN -> 701 +dqcps429 copysign -720 +sNaN -> 720 +dqcps430 copysign -720 +sNaN3 -> 720 + diff --git a/Lib/test/decimaltestdata/dqDivide.decTest b/Lib/test/decimaltestdata/dqDivide.decTest index 1d623ff4123..1e9b29b82ed 100644 --- a/Lib/test/decimaltestdata/dqDivide.decTest +++ b/Lib/test/decimaltestdata/dqDivide.decTest @@ -1,808 +1,808 @@ ------------------------------------------------------------------------- --- dqDivide.decTest -- decQuad division -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqdiv001 divide 1 1 -> 1 -dqdiv002 divide 2 1 -> 2 -dqdiv003 divide 1 2 -> 0.5 -dqdiv004 divide 2 2 -> 1 -dqdiv005 divide 0 1 -> 0 -dqdiv006 divide 0 2 -> 0 -dqdiv007 divide 1 3 -> 0.3333333333333333333333333333333333 Inexact Rounded -dqdiv008 divide 2 3 -> 0.6666666666666666666666666666666667 Inexact Rounded -dqdiv009 divide 3 3 -> 1 - -dqdiv010 divide 2.4 1 -> 2.4 -dqdiv011 divide 2.4 -1 -> -2.4 -dqdiv012 divide -2.4 1 -> -2.4 -dqdiv013 divide -2.4 -1 -> 2.4 -dqdiv014 divide 2.40 1 -> 2.40 -dqdiv015 divide 2.400 1 -> 2.400 -dqdiv016 divide 2.4 2 -> 1.2 -dqdiv017 divide 2.400 2 -> 1.200 -dqdiv018 divide 2. 2 -> 1 -dqdiv019 divide 20 20 -> 1 - -dqdiv020 divide 187 187 -> 1 -dqdiv021 divide 5 2 -> 2.5 -dqdiv022 divide 50 20 -> 2.5 -dqdiv023 divide 500 200 -> 2.5 -dqdiv024 divide 50.0 20.0 -> 2.5 -dqdiv025 divide 5.00 2.00 -> 2.5 -dqdiv026 divide 5 2.0 -> 2.5 -dqdiv027 divide 5 2.000 -> 2.5 -dqdiv028 divide 5 0.20 -> 25 -dqdiv029 divide 5 0.200 -> 25 -dqdiv030 divide 10 1 -> 10 -dqdiv031 divide 100 1 -> 100 -dqdiv032 divide 1000 1 -> 1000 -dqdiv033 divide 1000 100 -> 10 - -dqdiv035 divide 1 2 -> 0.5 -dqdiv036 divide 1 4 -> 0.25 -dqdiv037 divide 1 8 -> 0.125 -dqdiv038 divide 1 16 -> 0.0625 -dqdiv039 divide 1 32 -> 0.03125 -dqdiv040 divide 1 64 -> 0.015625 -dqdiv041 divide 1 -2 -> -0.5 -dqdiv042 divide 1 -4 -> -0.25 -dqdiv043 divide 1 -8 -> -0.125 -dqdiv044 divide 1 -16 -> -0.0625 -dqdiv045 divide 1 -32 -> -0.03125 -dqdiv046 divide 1 -64 -> -0.015625 -dqdiv047 divide -1 2 -> -0.5 -dqdiv048 divide -1 4 -> -0.25 -dqdiv049 divide -1 8 -> -0.125 -dqdiv050 divide -1 16 -> -0.0625 -dqdiv051 divide -1 32 -> -0.03125 -dqdiv052 divide -1 64 -> -0.015625 -dqdiv053 divide -1 -2 -> 0.5 -dqdiv054 divide -1 -4 -> 0.25 -dqdiv055 divide -1 -8 -> 0.125 -dqdiv056 divide -1 -16 -> 0.0625 -dqdiv057 divide -1 -32 -> 0.03125 -dqdiv058 divide -1 -64 -> 0.015625 - --- bcdTime -dqdiv060 divide 1 7 -> 0.1428571428571428571428571428571429 Inexact Rounded -dqdiv061 divide 1.2345678 1.9876543 -> 0.6211179680490717123193907511985359 Inexact Rounded - --- 1234567890123456 -dqdiv067 divide 9999999999999999999999999999999999 1 -> 9999999999999999999999999999999999 -dqdiv068 divide 999999999999999999999999999999999 1 -> 999999999999999999999999999999999 -dqdiv069 divide 99999999999999999999999999999999 1 -> 99999999999999999999999999999999 -dqdiv070 divide 99999999999999999 1 -> 99999999999999999 -dqdiv071 divide 9999999999999999 1 -> 9999999999999999 -dqdiv072 divide 999999999999999 1 -> 999999999999999 -dqdiv073 divide 99999999999999 1 -> 99999999999999 -dqdiv074 divide 9999999999999 1 -> 9999999999999 -dqdiv075 divide 999999999999 1 -> 999999999999 -dqdiv076 divide 99999999999 1 -> 99999999999 -dqdiv077 divide 9999999999 1 -> 9999999999 -dqdiv078 divide 999999999 1 -> 999999999 -dqdiv079 divide 99999999 1 -> 99999999 -dqdiv080 divide 9999999 1 -> 9999999 -dqdiv081 divide 999999 1 -> 999999 -dqdiv082 divide 99999 1 -> 99999 -dqdiv083 divide 9999 1 -> 9999 -dqdiv084 divide 999 1 -> 999 -dqdiv085 divide 99 1 -> 99 -dqdiv086 divide 9 1 -> 9 - -dqdiv090 divide 0. 1 -> 0 -dqdiv091 divide .0 1 -> 0.0 -dqdiv092 divide 0.00 1 -> 0.00 -dqdiv093 divide 0.00E+9 1 -> 0E+7 -dqdiv094 divide 0.0000E-50 1 -> 0E-54 - -dqdiv095 divide 1 1E-8 -> 1E+8 -dqdiv096 divide 1 1E-9 -> 1E+9 -dqdiv097 divide 1 1E-10 -> 1E+10 -dqdiv098 divide 1 1E-11 -> 1E+11 -dqdiv099 divide 1 1E-12 -> 1E+12 - -dqdiv100 divide 1 1 -> 1 -dqdiv101 divide 1 2 -> 0.5 -dqdiv102 divide 1 3 -> 0.3333333333333333333333333333333333 Inexact Rounded -dqdiv103 divide 1 4 -> 0.25 -dqdiv104 divide 1 5 -> 0.2 -dqdiv105 divide 1 6 -> 0.1666666666666666666666666666666667 Inexact Rounded -dqdiv106 divide 1 7 -> 0.1428571428571428571428571428571429 Inexact Rounded -dqdiv107 divide 1 8 -> 0.125 -dqdiv108 divide 1 9 -> 0.1111111111111111111111111111111111 Inexact Rounded -dqdiv109 divide 1 10 -> 0.1 -dqdiv110 divide 1 1 -> 1 -dqdiv111 divide 2 1 -> 2 -dqdiv112 divide 3 1 -> 3 -dqdiv113 divide 4 1 -> 4 -dqdiv114 divide 5 1 -> 5 -dqdiv115 divide 6 1 -> 6 -dqdiv116 divide 7 1 -> 7 -dqdiv117 divide 8 1 -> 8 -dqdiv118 divide 9 1 -> 9 -dqdiv119 divide 10 1 -> 10 - -dqdiv120 divide 3E+1 0.001 -> 3E+4 -dqdiv121 divide 2.200 2 -> 1.100 - -dqdiv130 divide 12345 4.999 -> 2469.493898779755951190238047609522 Inexact Rounded -dqdiv131 divide 12345 4.99 -> 2473.947895791583166332665330661323 Inexact Rounded -dqdiv132 divide 12345 4.9 -> 2519.387755102040816326530612244898 Inexact Rounded -dqdiv133 divide 12345 5 -> 2469 -dqdiv134 divide 12345 5.1 -> 2420.588235294117647058823529411765 Inexact Rounded -dqdiv135 divide 12345 5.01 -> 2464.071856287425149700598802395210 Inexact Rounded -dqdiv136 divide 12345 5.001 -> 2468.506298740251949610077984403119 Inexact Rounded - --- test possibly imprecise results -dqdiv220 divide 391 597 -> 0.6549413735343383584589614740368509 Inexact Rounded -dqdiv221 divide 391 -597 -> -0.6549413735343383584589614740368509 Inexact Rounded -dqdiv222 divide -391 597 -> -0.6549413735343383584589614740368509 Inexact Rounded -dqdiv223 divide -391 -597 -> 0.6549413735343383584589614740368509 Inexact Rounded - --- test some cases that are close to exponent overflow -dqdiv270 divide 1 1e6144 -> 1E-6144 Subnormal -dqdiv271 divide 1 0.9e6144 -> 1.11111111111111111111111111111111E-6144 Rounded Inexact Subnormal Underflow -dqdiv272 divide 1 0.99e6144 -> 1.01010101010101010101010101010101E-6144 Rounded Inexact Subnormal Underflow -dqdiv273 divide 1 0.9999999999999999e6144 -> 1.00000000000000010000000000000001E-6144 Rounded Inexact Subnormal Underflow -dqdiv274 divide 9e6144 1 -> 9.000000000000000000000000000000000E+6144 Clamped -dqdiv275 divide 9.9e6144 1 -> 9.900000000000000000000000000000000E+6144 Clamped -dqdiv276 divide 9.99e6144 1 -> 9.990000000000000000000000000000000E+6144 Clamped -dqdiv277 divide 9.999999999999999e6144 1 -> 9.999999999999999000000000000000000E+6144 Clamped - -dqdiv278 divide 1 0.9999999999999999999999999999999999e6144 -> 1.00000000000000000000000000000000E-6144 Rounded Inexact Subnormal Underflow -dqdiv279 divide 9.999999999999999999999999999999999e6144 1 -> 9.999999999999999999999999999999999E+6144 - --- Divide into 0 tests -dqdiv301 divide 0 7 -> 0 -dqdiv302 divide 0 7E-5 -> 0E+5 -dqdiv303 divide 0 7E-1 -> 0E+1 -dqdiv304 divide 0 7E+1 -> 0.0 -dqdiv305 divide 0 7E+5 -> 0.00000 -dqdiv306 divide 0 7E+6 -> 0.000000 -dqdiv307 divide 0 7E+7 -> 0E-7 -dqdiv308 divide 0 70E-5 -> 0E+5 -dqdiv309 divide 0 70E-1 -> 0E+1 -dqdiv310 divide 0 70E+0 -> 0 -dqdiv311 divide 0 70E+1 -> 0.0 -dqdiv312 divide 0 70E+5 -> 0.00000 -dqdiv313 divide 0 70E+6 -> 0.000000 -dqdiv314 divide 0 70E+7 -> 0E-7 -dqdiv315 divide 0 700E-5 -> 0E+5 -dqdiv316 divide 0 700E-1 -> 0E+1 -dqdiv317 divide 0 700E+0 -> 0 -dqdiv318 divide 0 700E+1 -> 0.0 -dqdiv319 divide 0 700E+5 -> 0.00000 -dqdiv320 divide 0 700E+6 -> 0.000000 -dqdiv321 divide 0 700E+7 -> 0E-7 -dqdiv322 divide 0 700E+77 -> 0E-77 - -dqdiv331 divide 0E-3 7E-5 -> 0E+2 -dqdiv332 divide 0E-3 7E-1 -> 0.00 -dqdiv333 divide 0E-3 7E+1 -> 0.0000 -dqdiv334 divide 0E-3 7E+5 -> 0E-8 -dqdiv335 divide 0E-1 7E-5 -> 0E+4 -dqdiv336 divide 0E-1 7E-1 -> 0 -dqdiv337 divide 0E-1 7E+1 -> 0.00 -dqdiv338 divide 0E-1 7E+5 -> 0.000000 -dqdiv339 divide 0E+1 7E-5 -> 0E+6 -dqdiv340 divide 0E+1 7E-1 -> 0E+2 -dqdiv341 divide 0E+1 7E+1 -> 0 -dqdiv342 divide 0E+1 7E+5 -> 0.0000 -dqdiv343 divide 0E+3 7E-5 -> 0E+8 -dqdiv344 divide 0E+3 7E-1 -> 0E+4 -dqdiv345 divide 0E+3 7E+1 -> 0E+2 -dqdiv346 divide 0E+3 7E+5 -> 0.00 - --- These were 'input rounding' -dqdiv441 divide 12345678000 1 -> 12345678000 -dqdiv442 divide 1 12345678000 -> 8.100000664200054464404466081166219E-11 Inexact Rounded -dqdiv443 divide 1234567800 1 -> 1234567800 -dqdiv444 divide 1 1234567800 -> 8.100000664200054464404466081166219E-10 Inexact Rounded -dqdiv445 divide 1234567890 1 -> 1234567890 -dqdiv446 divide 1 1234567890 -> 8.100000073710000670761006103925156E-10 Inexact Rounded -dqdiv447 divide 1234567891 1 -> 1234567891 -dqdiv448 divide 1 1234567891 -> 8.100000067149000556665214614754629E-10 Inexact Rounded -dqdiv449 divide 12345678901 1 -> 12345678901 -dqdiv450 divide 1 12345678901 -> 8.100000073053900658873130042376760E-11 Inexact Rounded -dqdiv451 divide 1234567896 1 -> 1234567896 -dqdiv452 divide 1 1234567896 -> 8.100000034344000145618560617422697E-10 Inexact Rounded - --- high-lows -dqdiv453 divide 1e+1 1 -> 1E+1 -dqdiv454 divide 1e+1 1.0 -> 1E+1 -dqdiv455 divide 1e+1 1.00 -> 1E+1 -dqdiv456 divide 1e+2 2 -> 5E+1 -dqdiv457 divide 1e+2 2.0 -> 5E+1 -dqdiv458 divide 1e+2 2.00 -> 5E+1 - --- some from IEEE discussions -dqdiv460 divide 3e0 2e0 -> 1.5 -dqdiv461 divide 30e-1 2e0 -> 1.5 -dqdiv462 divide 300e-2 2e0 -> 1.50 -dqdiv464 divide 3000e-3 2e0 -> 1.500 -dqdiv465 divide 3e0 20e-1 -> 1.5 -dqdiv466 divide 30e-1 20e-1 -> 1.5 -dqdiv467 divide 300e-2 20e-1 -> 1.5 -dqdiv468 divide 3000e-3 20e-1 -> 1.50 -dqdiv469 divide 3e0 200e-2 -> 1.5 -dqdiv470 divide 30e-1 200e-2 -> 1.5 -dqdiv471 divide 300e-2 200e-2 -> 1.5 -dqdiv472 divide 3000e-3 200e-2 -> 1.5 -dqdiv473 divide 3e0 2000e-3 -> 1.5 -dqdiv474 divide 30e-1 2000e-3 -> 1.5 -dqdiv475 divide 300e-2 2000e-3 -> 1.5 -dqdiv476 divide 3000e-3 2000e-3 -> 1.5 - --- some reciprocals -dqdiv480 divide 1 1.0E+33 -> 1E-33 -dqdiv481 divide 1 10E+33 -> 1E-34 -dqdiv482 divide 1 1.0E-33 -> 1E+33 -dqdiv483 divide 1 10E-33 -> 1E+32 - --- RMS discussion table -dqdiv484 divide 0e5 1e3 -> 0E+2 -dqdiv485 divide 0e5 2e3 -> 0E+2 -dqdiv486 divide 0e5 10e2 -> 0E+3 -dqdiv487 divide 0e5 20e2 -> 0E+3 -dqdiv488 divide 0e5 100e1 -> 0E+4 -dqdiv489 divide 0e5 200e1 -> 0E+4 - -dqdiv491 divide 1e5 1e3 -> 1E+2 -dqdiv492 divide 1e5 2e3 -> 5E+1 -dqdiv493 divide 1e5 10e2 -> 1E+2 -dqdiv494 divide 1e5 20e2 -> 5E+1 -dqdiv495 divide 1e5 100e1 -> 1E+2 -dqdiv496 divide 1e5 200e1 -> 5E+1 - --- tryzeros cases -rounding: half_up -dqdiv497 divide 0E+6108 1000E-33 -> 0E+6111 Clamped -dqdiv498 divide 0E-6170 1000E+33 -> 0E-6176 Clamped - -rounding: half_up - --- focus on trailing zeros issues -dqdiv500 divide 1 9.9 -> 0.1010101010101010101010101010101010 Inexact Rounded -dqdiv501 divide 1 9.09 -> 0.1100110011001100110011001100110011 Inexact Rounded -dqdiv502 divide 1 9.009 -> 0.1110001110001110001110001110001110 Inexact Rounded - -dqdiv511 divide 1 2 -> 0.5 -dqdiv512 divide 1.0 2 -> 0.5 -dqdiv513 divide 1.00 2 -> 0.50 -dqdiv514 divide 1.000 2 -> 0.500 -dqdiv515 divide 1.0000 2 -> 0.5000 -dqdiv516 divide 1.00000 2 -> 0.50000 -dqdiv517 divide 1.000000 2 -> 0.500000 -dqdiv518 divide 1.0000000 2 -> 0.5000000 -dqdiv519 divide 1.00 2.00 -> 0.5 - -dqdiv521 divide 2 1 -> 2 -dqdiv522 divide 2 1.0 -> 2 -dqdiv523 divide 2 1.00 -> 2 -dqdiv524 divide 2 1.000 -> 2 -dqdiv525 divide 2 1.0000 -> 2 -dqdiv526 divide 2 1.00000 -> 2 -dqdiv527 divide 2 1.000000 -> 2 -dqdiv528 divide 2 1.0000000 -> 2 -dqdiv529 divide 2.00 1.00 -> 2 - -dqdiv530 divide 2.40 2 -> 1.20 -dqdiv531 divide 2.40 4 -> 0.60 -dqdiv532 divide 2.40 10 -> 0.24 -dqdiv533 divide 2.40 2.0 -> 1.2 -dqdiv534 divide 2.40 4.0 -> 0.6 -dqdiv535 divide 2.40 10.0 -> 0.24 -dqdiv536 divide 2.40 2.00 -> 1.2 -dqdiv537 divide 2.40 4.00 -> 0.6 -dqdiv538 divide 2.40 10.00 -> 0.24 -dqdiv539 divide 0.9 0.1 -> 9 -dqdiv540 divide 0.9 0.01 -> 9E+1 -dqdiv541 divide 0.9 0.001 -> 9E+2 -dqdiv542 divide 5 2 -> 2.5 -dqdiv543 divide 5 2.0 -> 2.5 -dqdiv544 divide 5 2.00 -> 2.5 -dqdiv545 divide 5 20 -> 0.25 -dqdiv546 divide 5 20.0 -> 0.25 -dqdiv547 divide 2.400 2 -> 1.200 -dqdiv548 divide 2.400 2.0 -> 1.20 -dqdiv549 divide 2.400 2.400 -> 1 - -dqdiv550 divide 240 1 -> 240 -dqdiv551 divide 240 10 -> 24 -dqdiv552 divide 240 100 -> 2.4 -dqdiv553 divide 240 1000 -> 0.24 -dqdiv554 divide 2400 1 -> 2400 -dqdiv555 divide 2400 10 -> 240 -dqdiv556 divide 2400 100 -> 24 -dqdiv557 divide 2400 1000 -> 2.4 - --- +ve exponent -dqdiv600 divide 2.4E+9 2 -> 1.2E+9 -dqdiv601 divide 2.40E+9 2 -> 1.20E+9 -dqdiv602 divide 2.400E+9 2 -> 1.200E+9 -dqdiv603 divide 2.4000E+9 2 -> 1.2000E+9 -dqdiv604 divide 24E+8 2 -> 1.2E+9 -dqdiv605 divide 240E+7 2 -> 1.20E+9 -dqdiv606 divide 2400E+6 2 -> 1.200E+9 -dqdiv607 divide 24000E+5 2 -> 1.2000E+9 - --- more zeros, etc. -dqdiv731 divide 5.00 1E-3 -> 5.00E+3 -dqdiv732 divide 00.00 0.000 -> NaN Division_undefined -dqdiv733 divide 00.00 0E-3 -> NaN Division_undefined -dqdiv734 divide 0 -0 -> NaN Division_undefined -dqdiv735 divide -0 0 -> NaN Division_undefined -dqdiv736 divide -0 -0 -> NaN Division_undefined - -dqdiv741 divide 0 -1 -> -0 -dqdiv742 divide -0 -1 -> 0 -dqdiv743 divide 0 1 -> 0 -dqdiv744 divide -0 1 -> -0 -dqdiv745 divide -1 0 -> -Infinity Division_by_zero -dqdiv746 divide -1 -0 -> Infinity Division_by_zero -dqdiv747 divide 1 0 -> Infinity Division_by_zero -dqdiv748 divide 1 -0 -> -Infinity Division_by_zero - -dqdiv751 divide 0.0 -1 -> -0.0 -dqdiv752 divide -0.0 -1 -> 0.0 -dqdiv753 divide 0.0 1 -> 0.0 -dqdiv754 divide -0.0 1 -> -0.0 -dqdiv755 divide -1.0 0 -> -Infinity Division_by_zero -dqdiv756 divide -1.0 -0 -> Infinity Division_by_zero -dqdiv757 divide 1.0 0 -> Infinity Division_by_zero -dqdiv758 divide 1.0 -0 -> -Infinity Division_by_zero - -dqdiv761 divide 0 -1.0 -> -0E+1 -dqdiv762 divide -0 -1.0 -> 0E+1 -dqdiv763 divide 0 1.0 -> 0E+1 -dqdiv764 divide -0 1.0 -> -0E+1 -dqdiv765 divide -1 0.0 -> -Infinity Division_by_zero -dqdiv766 divide -1 -0.0 -> Infinity Division_by_zero -dqdiv767 divide 1 0.0 -> Infinity Division_by_zero -dqdiv768 divide 1 -0.0 -> -Infinity Division_by_zero - -dqdiv771 divide 0.0 -1.0 -> -0 -dqdiv772 divide -0.0 -1.0 -> 0 -dqdiv773 divide 0.0 1.0 -> 0 -dqdiv774 divide -0.0 1.0 -> -0 -dqdiv775 divide -1.0 0.0 -> -Infinity Division_by_zero -dqdiv776 divide -1.0 -0.0 -> Infinity Division_by_zero -dqdiv777 divide 1.0 0.0 -> Infinity Division_by_zero -dqdiv778 divide 1.0 -0.0 -> -Infinity Division_by_zero - --- Specials -dqdiv780 divide Inf -Inf -> NaN Invalid_operation -dqdiv781 divide Inf -1000 -> -Infinity -dqdiv782 divide Inf -1 -> -Infinity -dqdiv783 divide Inf -0 -> -Infinity -dqdiv784 divide Inf 0 -> Infinity -dqdiv785 divide Inf 1 -> Infinity -dqdiv786 divide Inf 1000 -> Infinity -dqdiv787 divide Inf Inf -> NaN Invalid_operation -dqdiv788 divide -1000 Inf -> -0E-6176 Clamped -dqdiv789 divide -Inf Inf -> NaN Invalid_operation -dqdiv790 divide -1 Inf -> -0E-6176 Clamped -dqdiv791 divide -0 Inf -> -0E-6176 Clamped -dqdiv792 divide 0 Inf -> 0E-6176 Clamped -dqdiv793 divide 1 Inf -> 0E-6176 Clamped -dqdiv794 divide 1000 Inf -> 0E-6176 Clamped -dqdiv795 divide Inf Inf -> NaN Invalid_operation - -dqdiv800 divide -Inf -Inf -> NaN Invalid_operation -dqdiv801 divide -Inf -1000 -> Infinity -dqdiv802 divide -Inf -1 -> Infinity -dqdiv803 divide -Inf -0 -> Infinity -dqdiv804 divide -Inf 0 -> -Infinity -dqdiv805 divide -Inf 1 -> -Infinity -dqdiv806 divide -Inf 1000 -> -Infinity -dqdiv807 divide -Inf Inf -> NaN Invalid_operation -dqdiv808 divide -1000 Inf -> -0E-6176 Clamped -dqdiv809 divide -Inf -Inf -> NaN Invalid_operation -dqdiv810 divide -1 -Inf -> 0E-6176 Clamped -dqdiv811 divide -0 -Inf -> 0E-6176 Clamped -dqdiv812 divide 0 -Inf -> -0E-6176 Clamped -dqdiv813 divide 1 -Inf -> -0E-6176 Clamped -dqdiv814 divide 1000 -Inf -> -0E-6176 Clamped -dqdiv815 divide Inf -Inf -> NaN Invalid_operation - -dqdiv821 divide NaN -Inf -> NaN -dqdiv822 divide NaN -1000 -> NaN -dqdiv823 divide NaN -1 -> NaN -dqdiv824 divide NaN -0 -> NaN -dqdiv825 divide NaN 0 -> NaN -dqdiv826 divide NaN 1 -> NaN -dqdiv827 divide NaN 1000 -> NaN -dqdiv828 divide NaN Inf -> NaN -dqdiv829 divide NaN NaN -> NaN -dqdiv830 divide -Inf NaN -> NaN -dqdiv831 divide -1000 NaN -> NaN -dqdiv832 divide -1 NaN -> NaN -dqdiv833 divide -0 NaN -> NaN -dqdiv834 divide 0 NaN -> NaN -dqdiv835 divide 1 NaN -> NaN -dqdiv836 divide 1000 NaN -> NaN -dqdiv837 divide Inf NaN -> NaN - -dqdiv841 divide sNaN -Inf -> NaN Invalid_operation -dqdiv842 divide sNaN -1000 -> NaN Invalid_operation -dqdiv843 divide sNaN -1 -> NaN Invalid_operation -dqdiv844 divide sNaN -0 -> NaN Invalid_operation -dqdiv845 divide sNaN 0 -> NaN Invalid_operation -dqdiv846 divide sNaN 1 -> NaN Invalid_operation -dqdiv847 divide sNaN 1000 -> NaN Invalid_operation -dqdiv848 divide sNaN NaN -> NaN Invalid_operation -dqdiv849 divide sNaN sNaN -> NaN Invalid_operation -dqdiv850 divide NaN sNaN -> NaN Invalid_operation -dqdiv851 divide -Inf sNaN -> NaN Invalid_operation -dqdiv852 divide -1000 sNaN -> NaN Invalid_operation -dqdiv853 divide -1 sNaN -> NaN Invalid_operation -dqdiv854 divide -0 sNaN -> NaN Invalid_operation -dqdiv855 divide 0 sNaN -> NaN Invalid_operation -dqdiv856 divide 1 sNaN -> NaN Invalid_operation -dqdiv857 divide 1000 sNaN -> NaN Invalid_operation -dqdiv858 divide Inf sNaN -> NaN Invalid_operation -dqdiv859 divide NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqdiv861 divide NaN9 -Inf -> NaN9 -dqdiv862 divide NaN8 1000 -> NaN8 -dqdiv863 divide NaN7 Inf -> NaN7 -dqdiv864 divide NaN6 NaN5 -> NaN6 -dqdiv865 divide -Inf NaN4 -> NaN4 -dqdiv866 divide -1000 NaN3 -> NaN3 -dqdiv867 divide Inf NaN2 -> NaN2 - -dqdiv871 divide sNaN99 -Inf -> NaN99 Invalid_operation -dqdiv872 divide sNaN98 -1 -> NaN98 Invalid_operation -dqdiv873 divide sNaN97 NaN -> NaN97 Invalid_operation -dqdiv874 divide sNaN96 sNaN94 -> NaN96 Invalid_operation -dqdiv875 divide NaN95 sNaN93 -> NaN93 Invalid_operation -dqdiv876 divide -Inf sNaN92 -> NaN92 Invalid_operation -dqdiv877 divide 0 sNaN91 -> NaN91 Invalid_operation -dqdiv878 divide Inf sNaN90 -> NaN90 Invalid_operation -dqdiv879 divide NaN sNaN89 -> NaN89 Invalid_operation - -dqdiv881 divide -NaN9 -Inf -> -NaN9 -dqdiv882 divide -NaN8 1000 -> -NaN8 -dqdiv883 divide -NaN7 Inf -> -NaN7 -dqdiv884 divide -NaN6 -NaN5 -> -NaN6 -dqdiv885 divide -Inf -NaN4 -> -NaN4 -dqdiv886 divide -1000 -NaN3 -> -NaN3 -dqdiv887 divide Inf -NaN2 -> -NaN2 - -dqdiv891 divide -sNaN99 -Inf -> -NaN99 Invalid_operation -dqdiv892 divide -sNaN98 -1 -> -NaN98 Invalid_operation -dqdiv893 divide -sNaN97 NaN -> -NaN97 Invalid_operation -dqdiv894 divide -sNaN96 -sNaN94 -> -NaN96 Invalid_operation -dqdiv895 divide -NaN95 -sNaN93 -> -NaN93 Invalid_operation -dqdiv896 divide -Inf -sNaN92 -> -NaN92 Invalid_operation -dqdiv897 divide 0 -sNaN91 -> -NaN91 Invalid_operation -dqdiv898 divide Inf -sNaN90 -> -NaN90 Invalid_operation -dqdiv899 divide -NaN -sNaN89 -> -NaN89 Invalid_operation - --- Various flavours of divide by 0 -dqdiv901 divide 0 0 -> NaN Division_undefined -dqdiv902 divide 0.0E5 0 -> NaN Division_undefined -dqdiv903 divide 0.000 0 -> NaN Division_undefined -dqdiv904 divide 0.0001 0 -> Infinity Division_by_zero -dqdiv905 divide 0.01 0 -> Infinity Division_by_zero -dqdiv906 divide 0.1 0 -> Infinity Division_by_zero -dqdiv907 divide 1 0 -> Infinity Division_by_zero -dqdiv908 divide 1 0.0 -> Infinity Division_by_zero -dqdiv909 divide 10 0.0 -> Infinity Division_by_zero -dqdiv910 divide 1E+100 0.0 -> Infinity Division_by_zero -dqdiv911 divide 1E+100 0 -> Infinity Division_by_zero - -dqdiv921 divide -0.0001 0 -> -Infinity Division_by_zero -dqdiv922 divide -0.01 0 -> -Infinity Division_by_zero -dqdiv923 divide -0.1 0 -> -Infinity Division_by_zero -dqdiv924 divide -1 0 -> -Infinity Division_by_zero -dqdiv925 divide -1 0.0 -> -Infinity Division_by_zero -dqdiv926 divide -10 0.0 -> -Infinity Division_by_zero -dqdiv927 divide -1E+100 0.0 -> -Infinity Division_by_zero -dqdiv928 divide -1E+100 0 -> -Infinity Division_by_zero - -dqdiv931 divide 0.0001 -0 -> -Infinity Division_by_zero -dqdiv932 divide 0.01 -0 -> -Infinity Division_by_zero -dqdiv933 divide 0.1 -0 -> -Infinity Division_by_zero -dqdiv934 divide 1 -0 -> -Infinity Division_by_zero -dqdiv935 divide 1 -0.0 -> -Infinity Division_by_zero -dqdiv936 divide 10 -0.0 -> -Infinity Division_by_zero -dqdiv937 divide 1E+100 -0.0 -> -Infinity Division_by_zero -dqdiv938 divide 1E+100 -0 -> -Infinity Division_by_zero - -dqdiv941 divide -0.0001 -0 -> Infinity Division_by_zero -dqdiv942 divide -0.01 -0 -> Infinity Division_by_zero -dqdiv943 divide -0.1 -0 -> Infinity Division_by_zero -dqdiv944 divide -1 -0 -> Infinity Division_by_zero -dqdiv945 divide -1 -0.0 -> Infinity Division_by_zero -dqdiv946 divide -10 -0.0 -> Infinity Division_by_zero -dqdiv947 divide -1E+100 -0.0 -> Infinity Division_by_zero -dqdiv948 divide -1E+100 -0 -> Infinity Division_by_zero - --- Examples from SQL proposal (Krishna Kulkarni) -dqdiv1021 divide 1E0 1E0 -> 1 -dqdiv1022 divide 1E0 2E0 -> 0.5 -dqdiv1023 divide 1E0 3E0 -> 0.3333333333333333333333333333333333 Inexact Rounded -dqdiv1024 divide 100E-2 1000E-3 -> 1 -dqdiv1025 divide 24E-1 2E0 -> 1.2 -dqdiv1026 divide 2400E-3 2E0 -> 1.200 -dqdiv1027 divide 5E0 2E0 -> 2.5 -dqdiv1028 divide 5E0 20E-1 -> 2.5 -dqdiv1029 divide 5E0 2000E-3 -> 2.5 -dqdiv1030 divide 5E0 2E-1 -> 25 -dqdiv1031 divide 5E0 20E-2 -> 25 -dqdiv1032 divide 480E-2 3E0 -> 1.60 -dqdiv1033 divide 47E-1 2E0 -> 2.35 - --- ECMAScript bad examples -rounding: half_down -dqdiv1040 divide 5 9 -> 0.5555555555555555555555555555555556 Inexact Rounded -rounding: half_even -dqdiv1041 divide 6 11 -> 0.5454545454545454545454545454545455 Inexact Rounded - --- Gyuris example -dqdiv1050 divide 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 0.9999999999999999999999999999991254 Inexact Rounded - --- overflow and underflow tests .. note subnormal results --- signs -dqdiv1751 divide 1e+4277 1e-3311 -> Infinity Overflow Inexact Rounded -dqdiv1752 divide 1e+4277 -1e-3311 -> -Infinity Overflow Inexact Rounded -dqdiv1753 divide -1e+4277 1e-3311 -> -Infinity Overflow Inexact Rounded -dqdiv1754 divide -1e+4277 -1e-3311 -> Infinity Overflow Inexact Rounded -dqdiv1755 divide 1e-4277 1e+3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1756 divide 1e-4277 -1e+3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1757 divide -1e-4277 1e+3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1758 divide -1e-4277 -1e+3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dqdiv1760 divide 1e-6069 1e+101 -> 1E-6170 Subnormal -dqdiv1761 divide 1e-6069 1e+102 -> 1E-6171 Subnormal -dqdiv1762 divide 1e-6069 1e+103 -> 1E-6172 Subnormal -dqdiv1763 divide 1e-6069 1e+104 -> 1E-6173 Subnormal -dqdiv1764 divide 1e-6069 1e+105 -> 1E-6174 Subnormal -dqdiv1765 divide 1e-6069 1e+106 -> 1E-6175 Subnormal -dqdiv1766 divide 1e-6069 1e+107 -> 1E-6176 Subnormal -dqdiv1767 divide 1e-6069 1e+108 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1768 divide 1e-6069 1e+109 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1769 divide 1e-6069 1e+110 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -dqdiv1770 divide 1e+40 1e-6101 -> 1.000000000000000000000000000000E+6141 Clamped -dqdiv1771 divide 1e+40 1e-6102 -> 1.0000000000000000000000000000000E+6142 Clamped -dqdiv1772 divide 1e+40 1e-6103 -> 1.00000000000000000000000000000000E+6143 Clamped -dqdiv1773 divide 1e+40 1e-6104 -> 1.000000000000000000000000000000000E+6144 Clamped -dqdiv1774 divide 1e+40 1e-6105 -> Infinity Overflow Inexact Rounded -dqdiv1775 divide 1e+40 1e-6106 -> Infinity Overflow Inexact Rounded -dqdiv1776 divide 1e+40 1e-6107 -> Infinity Overflow Inexact Rounded -dqdiv1777 divide 1e+40 1e-6108 -> Infinity Overflow Inexact Rounded -dqdiv1778 divide 1e+40 1e-6109 -> Infinity Overflow Inexact Rounded -dqdiv1779 divide 1e+40 1e-6110 -> Infinity Overflow Inexact Rounded - -dqdiv1801 divide 1.0000E-6172 1 -> 1.0000E-6172 Subnormal -dqdiv1802 divide 1.000E-6172 1e+1 -> 1.000E-6173 Subnormal -dqdiv1803 divide 1.00E-6172 1e+2 -> 1.00E-6174 Subnormal -dqdiv1804 divide 1.0E-6172 1e+3 -> 1.0E-6175 Subnormal -dqdiv1805 divide 1.0E-6172 1e+4 -> 1E-6176 Subnormal Rounded -dqdiv1806 divide 1.3E-6172 1e+4 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1807 divide 1.5E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1808 divide 1.7E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1809 divide 2.3E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1810 divide 2.5E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1811 divide 2.7E-6172 1e+4 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqdiv1812 divide 1.49E-6172 1e+4 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1813 divide 1.50E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1814 divide 1.51E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1815 divide 2.49E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1816 divide 2.50E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1817 divide 2.51E-6172 1e+4 -> 3E-6176 Underflow Subnormal Inexact Rounded - -dqdiv1818 divide 1E-6172 1e+4 -> 1E-6176 Subnormal -dqdiv1819 divide 3E-6172 1e+5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1820 divide 5E-6172 1e+5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1821 divide 7E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1822 divide 9E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1823 divide 9.9E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded - -dqdiv1824 divide 1E-6172 -1e+4 -> -1E-6176 Subnormal -dqdiv1825 divide 3E-6172 -1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1826 divide -5E-6172 1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1827 divide 7E-6172 -1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1828 divide -9E-6172 1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1829 divide 9.9E-6172 -1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1830 divide 3.0E-6172 -1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqdiv1831 divide 1.0E-5977 1e+200 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1832 divide 1.0E-5977 1e+199 -> 1E-6176 Subnormal Rounded -dqdiv1833 divide 1.0E-5977 1e+198 -> 1.0E-6175 Subnormal -dqdiv1834 divide 2.0E-5977 2e+198 -> 1.0E-6175 Subnormal -dqdiv1835 divide 4.0E-5977 4e+198 -> 1.0E-6175 Subnormal -dqdiv1836 divide 10.0E-5977 10e+198 -> 1.0E-6175 Subnormal -dqdiv1837 divide 30.0E-5977 30e+198 -> 1.0E-6175 Subnormal -dqdiv1838 divide 40.0E-5982 40e+166 -> 1.0E-6148 Subnormal -dqdiv1839 divide 40.0E-5982 40e+165 -> 1.0E-6147 Subnormal -dqdiv1840 divide 40.0E-5982 40e+164 -> 1.0E-6146 Subnormal - --- randoms -rounding: half_even -dqdiv2010 divide -5231195652931651968034356117118850 -7243718664422548573203260970.34995 -> 722169.9095831284624736051460550680 Inexact Rounded -dqdiv2011 divide -89584669773927.82711237350022515352 -42077943728529635884.21142627532985 -> 0.000002129017291146471565928125887527266 Inexact Rounded -dqdiv2012 divide -2.828201693360723203806974891946180E-232 812596541221823960386384403089240.9 -> -3.480450075640521320040055759125120E-265 Inexact Rounded -dqdiv2013 divide -6442775372761069267502937539408720 24904085056.69185465145182606089196 -> -258703556388226463687701.4884719589 Inexact Rounded -dqdiv2014 divide 5.535520011272625629610079879714705 -44343664650.57203052003068113531208 -> -1.248322630728089308975940533493562E-10 Inexact Rounded -dqdiv2015 divide 65919273712517865964325.99419625010 -314733354141381737378622515.7789054 -> -0.0002094448295521490616379784758911632 Inexact Rounded -dqdiv2016 divide -7.779172568193197107115275140431129E+759 -140453015639.3988987652895178782143 -> 5.538629792161641534962774244238115E+748 Inexact Rounded -dqdiv2017 divide 644314832597569.0181226067518178797 -115024585257425.1635759521565201075 -> -5.601540150356479257367687450922795 Inexact Rounded -dqdiv2018 divide 6.898640941579611450676592553286870E-47 -11272429881407851485163914999.25943 -> -6.119923578285338689371137648319280E-75 Inexact Rounded -dqdiv2019 divide -3591344544888727133.30819750163254 5329395.423792795661446561090331037 -> -673874662941.1968525589460533725290 Inexact Rounded -dqdiv2020 divide -7.682356781384631313156462724425838E+747 -6.60375855512219057281922141809940E+703 -> 1.163330960279556016678379128875149E+44 Inexact Rounded -dqdiv2021 divide -4511495596596941820863224.274679699 3365395017.263329795449661616090724 -> -1340554548115304.904166888018346299 Inexact Rounded -dqdiv2022 divide 5.211164127840931517263639608151299 164.5566381356276567012533847006453 -> 0.03166790587655228864478260157156510 Inexact Rounded -dqdiv2023 divide -49891.2243893458830384077684620383 -47179.9312961860747554053371171530 -> 1.057467084386767291602189656430268 Inexact Rounded -dqdiv2024 divide 15065477.47214268488077415462413353 4366211.120892953261309529740552596 -> 3.450469309661227984244545513441359 Inexact Rounded -dqdiv2025 divide 1.575670269440761846109602429612644E+370 653199649324740300.006185482643439 -> 2.412233795700359170904588548041481E+352 Inexact Rounded -dqdiv2026 divide -2112422311733448924573432192.620145 -80067206.03590693153848215848613406 -> 26383115089417660175.20102646756574 Inexact Rounded -dqdiv2027 divide -67096536051279809.32218611548721839 -869685412881941081664251990181.1049 -> 7.715035236584805921278566365231168E-14 Inexact Rounded -dqdiv2028 divide -58612908548962047.21866913425488972 -978449597531.3873665583475633831644 -> 59903.86085991703091236507859837023 Inexact Rounded -dqdiv2029 divide -133032412010942.1476864138213319796 -7.882059293498670705446528648201359E-428 -> 1.687787506504433064549515681693715E+441 Inexact Rounded -dqdiv2030 divide 1.83746698338966029492299716360513E+977 -9.897926608979649951672839879128603E+154 -> -1.856416051542212552042390218062458E+822 Inexact Rounded -dqdiv2031 divide -113742475841399236307128962.1507063 8298602.203049834732657567965262989 -> -13706221006665137826.16557393919929 Inexact Rounded -dqdiv2032 divide 196.4787574650754152995941808331862 929.6553388472318094427422117172394 -> 0.2113458066176526651006917922814018 Inexact Rounded -dqdiv2033 divide 71931221465.43867996282803628130350 3838685934206426257090718.402248853 -> 1.873850132527423413607199513324021E-14 Inexact Rounded -dqdiv2034 divide 488.4282502289651653783596246312885 -80.68940956806634280078706577953188 -> -6.053189047280693318844801899473272 Inexact Rounded -dqdiv2035 divide 9.001764344963921754981762913247394E-162 -8.585540973667205753734967645386919E-729 -> -1.048479574271827326396012573232934E+567 Inexact Rounded -dqdiv2036 divide -7.404133959409894743706402857145471E-828 -51.38159929460289711134684843086265 -> 1.441008855516029461032061785219773E-829 Inexact Rounded -dqdiv2037 divide 2.967520235574419794048994436040717E-613 -6252513855.91394894949879262731889 -> -4.746123405656409127572998751885338E-623 Inexact Rounded -dqdiv2038 divide -18826852654824040505.83920366765051 -6336924877942437992590557460147340 -> 2.970976146546494669807886278519194E-15 Inexact Rounded -dqdiv2039 divide -8.101406784809197604949584001735949E+561 4.823300306948942821076681658771635E+361 -> -1.679639721610839204738445747238987E+200 Inexact Rounded -dqdiv2040 divide -6.11981977773094052331062585191723E+295 1.507610253755339328302779005586534E+238 -> -4.059285058911577244044418416044763E+57 Inexact Rounded -dqdiv2041 divide 6.472638850046815880599220534274055E-596 -4.475233712083047516933911786159972 -> -1.446324207062261745520496475778879E-596 Inexact Rounded -dqdiv2042 divide -84438593330.71277839631144509397112 -586684596204401664208947.4054879633 -> 1.439250218550041228759983937772504E-13 Inexact Rounded -dqdiv2043 divide 9.354533233294022616695815656704369E-24 405.500390626135304252144163591746 -> 2.306911028827774549740571229736198E-26 Inexact Rounded -dqdiv2044 divide 985606423350210.7374876650149957881 -36811563697.41925681866694859828794 -> -26774.36990864119445335813354717711 Inexact Rounded -dqdiv2045 divide -8.187280774177715706278002247766311E-123 -38784124393.91212870828430001300068 -> 2.110987653356139147357240727794365E-133 Inexact Rounded -dqdiv2046 divide -4.612203126350070903459245798371657E+912 7.971562182727956290901984736800519E+64 -> -5.785820922708683237098826662769748E+847 Inexact Rounded -dqdiv2047 divide 4.661015909421485298247928967977089E+888 -6.360911253323922338737311563845581E+388 -> -7.327591478321365980156654539638836E+499 Inexact Rounded -dqdiv2048 divide 9156078172903.257500003260710833030 7.189796653262147139071634237964074E-90 -> 1.273482215766000994365201545096026E+102 Inexact Rounded -dqdiv2049 divide -1.710722303327476586373477781276586E-311 -3167561628260156837329323.729380695 -> 5.400754599578613984875752958645655E-336 Inexact Rounded -dqdiv2050 divide -4.647935210881806238321616345413021E-878 209388.5431867744648177308460639582 -> -2.219765771394593733140494297388140E-883 Inexact Rounded -dqdiv2051 divide 5958.694728395760992719084781582700 4.541510156564315632536353171846096E-746 -> 1.312051393253638664947852693005480E+749 Inexact Rounded -dqdiv2052 divide -7.935732544649702175256699886872093E-489 -7.433329073664793138998765647467971E+360 -> 1.067587949626076917672271619664656E-849 Inexact Rounded -dqdiv2053 divide -2746650864601157.863589959939901350 7.016684945507647528907184694359598E+548 -> -3.914456593009309529351254950429932E-534 Inexact Rounded -dqdiv2054 divide 3605149408631197365447953.994569178 -75614025825649082.78264864428237833 -> -47678315.88472693507060063188020532 Inexact Rounded -dqdiv2055 divide 788194320921798404906375214.196349 -6.222718148433247384932573401976337E-418 -> -1.266639918634671803982222244977287E+444 Inexact Rounded -dqdiv2056 divide 5620722730534752.758208943447603211 6.843552841168538319123000917657759E-139 -> 8.213164800485434666629970443739554E+153 Inexact Rounded -dqdiv2057 divide 7304534676713703938102.403949019402 -576169.3685010935108153023803590835 -> -12677756014201995.31969237144394772 Inexact Rounded -dqdiv2058 divide 8067918762.134621639254916786945547 -8.774771480055536009105596163864758E+954 -> -9.194448858836332156766764605125245E-946 Inexact Rounded -dqdiv2059 divide 8.702093454123046507578256899537563E-324 -5.875399733016018404580201176576293E-401 -> -1.481106622452052581470443526957335E+77 Inexact Rounded -dqdiv2060 divide -41426.01662518451861386352415092356 90.00146621684478300510769802013464 -> -460.2815750287318692732067709176200 Inexact Rounded - --- random divide tests with result near 1 -dqdiv4001 divide 2003100352770753969878925664524900 2003100352770753969878925664497824 -> 1.000000000000000000000000000013517 Inexact Rounded -dqdiv4002 divide 4817785793916490652579552318371645 4817785793916490652579552318362097 -> 1.000000000000000000000000000001982 Inexact Rounded -dqdiv4003 divide 8299187410920067325648068439560282 8299187410920067325648068439591159 -> 0.9999999999999999999999999999962795 Inexact Rounded -dqdiv4004 divide 5641088455897407044544461785365899 5641088455897407044544461785389965 -> 0.9999999999999999999999999999957338 Inexact Rounded -dqdiv4005 divide 5752274694706545359326361313490424 5752274694706545359326361313502723 -> 0.9999999999999999999999999999978619 Inexact Rounded -dqdiv4006 divide 6762079477373670594829319346099665 6762079477373670594829319346132579 -> 0.9999999999999999999999999999951326 Inexact Rounded -dqdiv4007 divide 7286425153691890341633023222602916 7286425153691890341633023222606556 -> 0.9999999999999999999999999999995004 Inexact Rounded -dqdiv4008 divide 9481233991901305727648306421946655 9481233991901305727648306421919124 -> 1.000000000000000000000000000002904 Inexact Rounded -dqdiv4009 divide 4282053941893951742029444065614311 4282053941893951742029444065583077 -> 1.000000000000000000000000000007294 Inexact Rounded -dqdiv4010 divide 626888225441250639741781850338695 626888225441250639741781850327299 -> 1.000000000000000000000000000018179 Inexact Rounded -dqdiv4011 divide 3860973649222028009456598604468547 3860973649222028009456598604476849 -> 0.9999999999999999999999999999978498 Inexact Rounded -dqdiv4012 divide 4753157080127468127908060607821839 4753157080127468127908060607788379 -> 1.000000000000000000000000000007040 Inexact Rounded -dqdiv4013 divide 552448546203754062805706277880419 552448546203754062805706277881903 -> 0.9999999999999999999999999999973138 Inexact Rounded -dqdiv4014 divide 8405954527952158455323713728917395 8405954527952158455323713728933866 -> 0.9999999999999999999999999999980406 Inexact Rounded -dqdiv4015 divide 7554096502235321142555802238016116 7554096502235321142555802238026546 -> 0.9999999999999999999999999999986193 Inexact Rounded -dqdiv4016 divide 4053257674127518606871054934746782 4053257674127518606871054934767355 -> 0.9999999999999999999999999999949243 Inexact Rounded -dqdiv4017 divide 7112419420755090454716888844011582 7112419420755090454716888844038105 -> 0.9999999999999999999999999999962709 Inexact Rounded -dqdiv4018 divide 3132302137520072728164549730911846 3132302137520072728164549730908416 -> 1.000000000000000000000000000001095 Inexact Rounded -dqdiv4019 divide 4788374045841416355706715048161013 4788374045841416355706715048190077 -> 0.9999999999999999999999999999939303 Inexact Rounded -dqdiv4020 divide 9466021636047630218238075099510597 9466021636047630218238075099484053 -> 1.000000000000000000000000000002804 Inexact Rounded -dqdiv4021 divide 912742745646765625597399692138650 912742745646765625597399692139042 -> 0.9999999999999999999999999999995705 Inexact Rounded -dqdiv4022 divide 9508402742933643208806264897188504 9508402742933643208806264897195973 -> 0.9999999999999999999999999999992145 Inexact Rounded -dqdiv4023 divide 1186956795727233704962361914360895 1186956795727233704962361914329577 -> 1.000000000000000000000000000026385 Inexact Rounded -dqdiv4024 divide 5972210268839014812696916170967938 5972210268839014812696916170954974 -> 1.000000000000000000000000000002171 Inexact Rounded -dqdiv4025 divide 2303801625521619930894460139793140 2303801625521619930894460139799643 -> 0.9999999999999999999999999999971773 Inexact Rounded -dqdiv4026 divide 6022231560002898264777393473966595 6022231560002898264777393473947198 -> 1.000000000000000000000000000003221 Inexact Rounded -dqdiv4027 divide 8426148335801396199969346032210893 8426148335801396199969346032203179 -> 1.000000000000000000000000000000915 Inexact Rounded -dqdiv4028 divide 8812278947028784637382847098411749 8812278947028784637382847098385317 -> 1.000000000000000000000000000002999 Inexact Rounded -dqdiv4029 divide 8145282002348367383264197170116146 8145282002348367383264197170083988 -> 1.000000000000000000000000000003948 Inexact Rounded -dqdiv4030 divide 6821577571876840153123510107387026 6821577571876840153123510107418008 -> 0.9999999999999999999999999999954582 Inexact Rounded -dqdiv4031 divide 9018555319518966970480565482023720 9018555319518966970480565482013346 -> 1.000000000000000000000000000001150 Inexact Rounded -dqdiv4032 divide 4602155712998228449640717252788864 4602155712998228449640717252818502 -> 0.9999999999999999999999999999935600 Inexact Rounded -dqdiv4033 divide 6675607481522785614506828292264472 6675607481522785614506828292277100 -> 0.9999999999999999999999999999981083 Inexact Rounded -dqdiv4034 divide 4015881516871833897766945836264472 4015881516871833897766945836262645 -> 1.000000000000000000000000000000455 Inexact Rounded -dqdiv4035 divide 1415580205933411837595459716910365 1415580205933411837595459716880139 -> 1.000000000000000000000000000021352 Inexact Rounded -dqdiv4036 divide 9432968297069542816752035276361552 9432968297069542816752035276353054 -> 1.000000000000000000000000000000901 Inexact Rounded -dqdiv4037 divide 4799319591303848500532766682140658 4799319591303848500532766682172655 -> 0.9999999999999999999999999999933330 Inexact Rounded -dqdiv4038 divide 316854270732839529790584284987472 316854270732839529790584285004832 -> 0.9999999999999999999999999999452114 Inexact Rounded -dqdiv4039 divide 3598981300592490427826027975697415 3598981300592490427826027975686712 -> 1.000000000000000000000000000002974 Inexact Rounded -dqdiv4040 divide 1664315435694461371155800682196520 1664315435694461371155800682195617 -> 1.000000000000000000000000000000543 Inexact Rounded -dqdiv4041 divide 1680872316531128890102855316510581 1680872316531128890102855316495545 -> 1.000000000000000000000000000008945 Inexact Rounded -dqdiv4042 divide 9881274879566405475755499281644730 9881274879566405475755499281615743 -> 1.000000000000000000000000000002934 Inexact Rounded -dqdiv4043 divide 4737225957717466960447204232279216 4737225957717466960447204232277452 -> 1.000000000000000000000000000000372 Inexact Rounded -dqdiv4044 divide 2482097379414867061213319346418288 2482097379414867061213319346387936 -> 1.000000000000000000000000000012228 Inexact Rounded -dqdiv4045 divide 7406977595233762723576434122161868 7406977595233762723576434122189042 -> 0.9999999999999999999999999999963313 Inexact Rounded -dqdiv4046 divide 228782057757566047086593281773577 228782057757566047086593281769727 -> 1.000000000000000000000000000016828 Inexact Rounded -dqdiv4047 divide 2956594270240579648823270540367653 2956594270240579648823270540368556 -> 0.9999999999999999999999999999996946 Inexact Rounded -dqdiv4048 divide 6326964098897620620534136767634340 6326964098897620620534136767619339 -> 1.000000000000000000000000000002371 Inexact Rounded -dqdiv4049 divide 414586440456590215247002678327800 414586440456590215247002678316922 -> 1.000000000000000000000000000026238 Inexact Rounded -dqdiv4050 divide 7364552208570039386220505636779125 7364552208570039386220505636803548 -> 0.9999999999999999999999999999966837 Inexact Rounded -dqdiv4051 divide 5626266749902369710022824950590056 5626266749902369710022824950591008 -> 0.9999999999999999999999999999998308 Inexact Rounded -dqdiv4052 divide 4863278293916197454987481343460484 4863278293916197454987481343442522 -> 1.000000000000000000000000000003693 Inexact Rounded -dqdiv4053 divide 1170713582030637359713249796835483 1170713582030637359713249796823345 -> 1.000000000000000000000000000010368 Inexact Rounded -dqdiv4054 divide 9838062494725965667776326556052931 9838062494725965667776326556061002 -> 0.9999999999999999999999999999991796 Inexact Rounded -dqdiv4055 divide 4071388731298861093005687091498922 4071388731298861093005687091498278 -> 1.000000000000000000000000000000158 Inexact Rounded -dqdiv4056 divide 8753155722324706795855038590272526 8753155722324706795855038590276656 -> 0.9999999999999999999999999999995282 Inexact Rounded -dqdiv4057 divide 4399941911533273418844742658240485 4399941911533273418844742658219891 -> 1.000000000000000000000000000004681 Inexact Rounded -dqdiv4058 divide 4127884159949503677776430620050269 4127884159949503677776430620026091 -> 1.000000000000000000000000000005857 Inexact Rounded -dqdiv4059 divide 5536160822360800067042528317438808 5536160822360800067042528317450687 -> 0.9999999999999999999999999999978543 Inexact Rounded -dqdiv4060 divide 3973234998468664936671088237710246 3973234998468664936671088237741886 -> 0.9999999999999999999999999999920367 Inexact Rounded -dqdiv4061 divide 9824855935638263593410444142327358 9824855935638263593410444142328576 -> 0.9999999999999999999999999999998760 Inexact Rounded -dqdiv4062 divide 5917078517340218131867327300814867 5917078517340218131867327300788701 -> 1.000000000000000000000000000004422 Inexact Rounded -dqdiv4063 divide 4354236601830544882286139612521362 4354236601830544882286139612543223 -> 0.9999999999999999999999999999949794 Inexact Rounded -dqdiv4064 divide 8058474772375259017342110013891294 8058474772375259017342110013906792 -> 0.9999999999999999999999999999980768 Inexact Rounded -dqdiv4065 divide 5519604020981748170517093746166328 5519604020981748170517093746181763 -> 0.9999999999999999999999999999972036 Inexact Rounded -dqdiv4066 divide 1502130966879805458831323782443139 1502130966879805458831323782412213 -> 1.000000000000000000000000000020588 Inexact Rounded -dqdiv4067 divide 562795633719481212915159787980270 562795633719481212915159788007066 -> 0.9999999999999999999999999999523877 Inexact Rounded -dqdiv4068 divide 6584743324494664273941281557268878 6584743324494664273941281557258945 -> 1.000000000000000000000000000001508 Inexact Rounded -dqdiv4069 divide 3632000327285743997976431109416500 3632000327285743997976431109408107 -> 1.000000000000000000000000000002311 Inexact Rounded -dqdiv4070 divide 1145827237315430089388953838561450 1145827237315430089388953838527332 -> 1.000000000000000000000000000029776 Inexact Rounded -dqdiv4071 divide 8874431010357691869725372317350380 8874431010357691869725372317316472 -> 1.000000000000000000000000000003821 Inexact Rounded -dqdiv4072 divide 992948718902804648119753141202196 992948718902804648119753141235222 -> 0.9999999999999999999999999999667395 Inexact Rounded -dqdiv4073 divide 2522735183374218505142417265439989 2522735183374218505142417265453779 -> 0.9999999999999999999999999999945337 Inexact Rounded -dqdiv4074 divide 2668419161912936508006872303501052 2668419161912936508006872303471036 -> 1.000000000000000000000000000011249 Inexact Rounded -dqdiv4075 divide 3036169085665186712590941111775092 3036169085665186712590941111808846 -> 0.9999999999999999999999999999888827 Inexact Rounded -dqdiv4076 divide 9441634604917231638508898934006147 9441634604917231638508898934000288 -> 1.000000000000000000000000000000621 Inexact Rounded -dqdiv4077 divide 2677301353164377091111458811839190 2677301353164377091111458811867722 -> 0.9999999999999999999999999999893430 Inexact Rounded -dqdiv4078 divide 6844979203112066166583765857171426 6844979203112066166583765857189682 -> 0.9999999999999999999999999999973329 Inexact Rounded -dqdiv4079 divide 2220337435141796724323783960231661 2220337435141796724323783960208778 -> 1.000000000000000000000000000010306 Inexact Rounded -dqdiv4080 divide 6447424700019783931569996989561380 6447424700019783931569996989572454 -> 0.9999999999999999999999999999982824 Inexact Rounded -dqdiv4081 divide 7512856762696607119847092195587180 7512856762696607119847092195557346 -> 1.000000000000000000000000000003971 Inexact Rounded -dqdiv4082 divide 7395261981193960399087819077237482 7395261981193960399087819077242487 -> 0.9999999999999999999999999999993232 Inexact Rounded -dqdiv4083 divide 2253442467682584035792724884376735 2253442467682584035792724884407178 -> 0.9999999999999999999999999999864904 Inexact Rounded -dqdiv4084 divide 8153138680300213135577336466190997 8153138680300213135577336466220607 -> 0.9999999999999999999999999999963683 Inexact Rounded -dqdiv4085 divide 4668731252254148074041022681801390 4668731252254148074041022681778101 -> 1.000000000000000000000000000004988 Inexact Rounded -dqdiv4086 divide 6078404557993669696040425501815056 6078404557993669696040425501797612 -> 1.000000000000000000000000000002870 Inexact Rounded -dqdiv4087 divide 2306352359874261623223356878316278 2306352359874261623223356878335612 -> 0.9999999999999999999999999999916171 Inexact Rounded -dqdiv4088 divide 3264842186668480362900909564091908 3264842186668480362900909564058658 -> 1.000000000000000000000000000010184 Inexact Rounded -dqdiv4089 divide 6971985047279636878957959608612204 6971985047279636878957959608615088 -> 0.9999999999999999999999999999995863 Inexact Rounded -dqdiv4090 divide 5262810889952721235466445973816257 5262810889952721235466445973783077 -> 1.000000000000000000000000000006305 Inexact Rounded -dqdiv4091 divide 7947944731035267178548357070080288 7947944731035267178548357070061339 -> 1.000000000000000000000000000002384 Inexact Rounded -dqdiv4092 divide 5071808908395375108383035800443229 5071808908395375108383035800412429 -> 1.000000000000000000000000000006073 Inexact Rounded -dqdiv4093 divide 2043146542084503655511507209262969 2043146542084503655511507209249263 -> 1.000000000000000000000000000006708 Inexact Rounded -dqdiv4094 divide 4097632735384534181661959731264802 4097632735384534181661959731234499 -> 1.000000000000000000000000000007395 Inexact Rounded -dqdiv4095 divide 3061477642831387489729464587044430 3061477642831387489729464587059452 -> 0.9999999999999999999999999999950932 Inexact Rounded -dqdiv4096 divide 3429854941039776159498802936252638 3429854941039776159498802936246415 -> 1.000000000000000000000000000001814 Inexact Rounded -dqdiv4097 divide 4874324979578599700024133278284545 4874324979578599700024133278262131 -> 1.000000000000000000000000000004598 Inexact Rounded -dqdiv4098 divide 5701652369691833541455978515820882 5701652369691833541455978515834854 -> 0.9999999999999999999999999999975495 Inexact Rounded -dqdiv4099 divide 2928205728402945266953255632343113 2928205728402945266953255632373794 -> 0.9999999999999999999999999999895223 Inexact Rounded - --- Null tests -dqdiv9998 divide 10 # -> NaN Invalid_operation -dqdiv9999 divide # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqDivide.decTest -- decQuad division -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqdiv001 divide 1 1 -> 1 +dqdiv002 divide 2 1 -> 2 +dqdiv003 divide 1 2 -> 0.5 +dqdiv004 divide 2 2 -> 1 +dqdiv005 divide 0 1 -> 0 +dqdiv006 divide 0 2 -> 0 +dqdiv007 divide 1 3 -> 0.3333333333333333333333333333333333 Inexact Rounded +dqdiv008 divide 2 3 -> 0.6666666666666666666666666666666667 Inexact Rounded +dqdiv009 divide 3 3 -> 1 + +dqdiv010 divide 2.4 1 -> 2.4 +dqdiv011 divide 2.4 -1 -> -2.4 +dqdiv012 divide -2.4 1 -> -2.4 +dqdiv013 divide -2.4 -1 -> 2.4 +dqdiv014 divide 2.40 1 -> 2.40 +dqdiv015 divide 2.400 1 -> 2.400 +dqdiv016 divide 2.4 2 -> 1.2 +dqdiv017 divide 2.400 2 -> 1.200 +dqdiv018 divide 2. 2 -> 1 +dqdiv019 divide 20 20 -> 1 + +dqdiv020 divide 187 187 -> 1 +dqdiv021 divide 5 2 -> 2.5 +dqdiv022 divide 50 20 -> 2.5 +dqdiv023 divide 500 200 -> 2.5 +dqdiv024 divide 50.0 20.0 -> 2.5 +dqdiv025 divide 5.00 2.00 -> 2.5 +dqdiv026 divide 5 2.0 -> 2.5 +dqdiv027 divide 5 2.000 -> 2.5 +dqdiv028 divide 5 0.20 -> 25 +dqdiv029 divide 5 0.200 -> 25 +dqdiv030 divide 10 1 -> 10 +dqdiv031 divide 100 1 -> 100 +dqdiv032 divide 1000 1 -> 1000 +dqdiv033 divide 1000 100 -> 10 + +dqdiv035 divide 1 2 -> 0.5 +dqdiv036 divide 1 4 -> 0.25 +dqdiv037 divide 1 8 -> 0.125 +dqdiv038 divide 1 16 -> 0.0625 +dqdiv039 divide 1 32 -> 0.03125 +dqdiv040 divide 1 64 -> 0.015625 +dqdiv041 divide 1 -2 -> -0.5 +dqdiv042 divide 1 -4 -> -0.25 +dqdiv043 divide 1 -8 -> -0.125 +dqdiv044 divide 1 -16 -> -0.0625 +dqdiv045 divide 1 -32 -> -0.03125 +dqdiv046 divide 1 -64 -> -0.015625 +dqdiv047 divide -1 2 -> -0.5 +dqdiv048 divide -1 4 -> -0.25 +dqdiv049 divide -1 8 -> -0.125 +dqdiv050 divide -1 16 -> -0.0625 +dqdiv051 divide -1 32 -> -0.03125 +dqdiv052 divide -1 64 -> -0.015625 +dqdiv053 divide -1 -2 -> 0.5 +dqdiv054 divide -1 -4 -> 0.25 +dqdiv055 divide -1 -8 -> 0.125 +dqdiv056 divide -1 -16 -> 0.0625 +dqdiv057 divide -1 -32 -> 0.03125 +dqdiv058 divide -1 -64 -> 0.015625 + +-- bcdTime +dqdiv060 divide 1 7 -> 0.1428571428571428571428571428571429 Inexact Rounded +dqdiv061 divide 1.2345678 1.9876543 -> 0.6211179680490717123193907511985359 Inexact Rounded + +-- 1234567890123456 +dqdiv067 divide 9999999999999999999999999999999999 1 -> 9999999999999999999999999999999999 +dqdiv068 divide 999999999999999999999999999999999 1 -> 999999999999999999999999999999999 +dqdiv069 divide 99999999999999999999999999999999 1 -> 99999999999999999999999999999999 +dqdiv070 divide 99999999999999999 1 -> 99999999999999999 +dqdiv071 divide 9999999999999999 1 -> 9999999999999999 +dqdiv072 divide 999999999999999 1 -> 999999999999999 +dqdiv073 divide 99999999999999 1 -> 99999999999999 +dqdiv074 divide 9999999999999 1 -> 9999999999999 +dqdiv075 divide 999999999999 1 -> 999999999999 +dqdiv076 divide 99999999999 1 -> 99999999999 +dqdiv077 divide 9999999999 1 -> 9999999999 +dqdiv078 divide 999999999 1 -> 999999999 +dqdiv079 divide 99999999 1 -> 99999999 +dqdiv080 divide 9999999 1 -> 9999999 +dqdiv081 divide 999999 1 -> 999999 +dqdiv082 divide 99999 1 -> 99999 +dqdiv083 divide 9999 1 -> 9999 +dqdiv084 divide 999 1 -> 999 +dqdiv085 divide 99 1 -> 99 +dqdiv086 divide 9 1 -> 9 + +dqdiv090 divide 0. 1 -> 0 +dqdiv091 divide .0 1 -> 0.0 +dqdiv092 divide 0.00 1 -> 0.00 +dqdiv093 divide 0.00E+9 1 -> 0E+7 +dqdiv094 divide 0.0000E-50 1 -> 0E-54 + +dqdiv095 divide 1 1E-8 -> 1E+8 +dqdiv096 divide 1 1E-9 -> 1E+9 +dqdiv097 divide 1 1E-10 -> 1E+10 +dqdiv098 divide 1 1E-11 -> 1E+11 +dqdiv099 divide 1 1E-12 -> 1E+12 + +dqdiv100 divide 1 1 -> 1 +dqdiv101 divide 1 2 -> 0.5 +dqdiv102 divide 1 3 -> 0.3333333333333333333333333333333333 Inexact Rounded +dqdiv103 divide 1 4 -> 0.25 +dqdiv104 divide 1 5 -> 0.2 +dqdiv105 divide 1 6 -> 0.1666666666666666666666666666666667 Inexact Rounded +dqdiv106 divide 1 7 -> 0.1428571428571428571428571428571429 Inexact Rounded +dqdiv107 divide 1 8 -> 0.125 +dqdiv108 divide 1 9 -> 0.1111111111111111111111111111111111 Inexact Rounded +dqdiv109 divide 1 10 -> 0.1 +dqdiv110 divide 1 1 -> 1 +dqdiv111 divide 2 1 -> 2 +dqdiv112 divide 3 1 -> 3 +dqdiv113 divide 4 1 -> 4 +dqdiv114 divide 5 1 -> 5 +dqdiv115 divide 6 1 -> 6 +dqdiv116 divide 7 1 -> 7 +dqdiv117 divide 8 1 -> 8 +dqdiv118 divide 9 1 -> 9 +dqdiv119 divide 10 1 -> 10 + +dqdiv120 divide 3E+1 0.001 -> 3E+4 +dqdiv121 divide 2.200 2 -> 1.100 + +dqdiv130 divide 12345 4.999 -> 2469.493898779755951190238047609522 Inexact Rounded +dqdiv131 divide 12345 4.99 -> 2473.947895791583166332665330661323 Inexact Rounded +dqdiv132 divide 12345 4.9 -> 2519.387755102040816326530612244898 Inexact Rounded +dqdiv133 divide 12345 5 -> 2469 +dqdiv134 divide 12345 5.1 -> 2420.588235294117647058823529411765 Inexact Rounded +dqdiv135 divide 12345 5.01 -> 2464.071856287425149700598802395210 Inexact Rounded +dqdiv136 divide 12345 5.001 -> 2468.506298740251949610077984403119 Inexact Rounded + +-- test possibly imprecise results +dqdiv220 divide 391 597 -> 0.6549413735343383584589614740368509 Inexact Rounded +dqdiv221 divide 391 -597 -> -0.6549413735343383584589614740368509 Inexact Rounded +dqdiv222 divide -391 597 -> -0.6549413735343383584589614740368509 Inexact Rounded +dqdiv223 divide -391 -597 -> 0.6549413735343383584589614740368509 Inexact Rounded + +-- test some cases that are close to exponent overflow +dqdiv270 divide 1 1e6144 -> 1E-6144 Subnormal +dqdiv271 divide 1 0.9e6144 -> 1.11111111111111111111111111111111E-6144 Rounded Inexact Subnormal Underflow +dqdiv272 divide 1 0.99e6144 -> 1.01010101010101010101010101010101E-6144 Rounded Inexact Subnormal Underflow +dqdiv273 divide 1 0.9999999999999999e6144 -> 1.00000000000000010000000000000001E-6144 Rounded Inexact Subnormal Underflow +dqdiv274 divide 9e6144 1 -> 9.000000000000000000000000000000000E+6144 Clamped +dqdiv275 divide 9.9e6144 1 -> 9.900000000000000000000000000000000E+6144 Clamped +dqdiv276 divide 9.99e6144 1 -> 9.990000000000000000000000000000000E+6144 Clamped +dqdiv277 divide 9.999999999999999e6144 1 -> 9.999999999999999000000000000000000E+6144 Clamped + +dqdiv278 divide 1 0.9999999999999999999999999999999999e6144 -> 1.00000000000000000000000000000000E-6144 Rounded Inexact Subnormal Underflow +dqdiv279 divide 9.999999999999999999999999999999999e6144 1 -> 9.999999999999999999999999999999999E+6144 + +-- Divide into 0 tests +dqdiv301 divide 0 7 -> 0 +dqdiv302 divide 0 7E-5 -> 0E+5 +dqdiv303 divide 0 7E-1 -> 0E+1 +dqdiv304 divide 0 7E+1 -> 0.0 +dqdiv305 divide 0 7E+5 -> 0.00000 +dqdiv306 divide 0 7E+6 -> 0.000000 +dqdiv307 divide 0 7E+7 -> 0E-7 +dqdiv308 divide 0 70E-5 -> 0E+5 +dqdiv309 divide 0 70E-1 -> 0E+1 +dqdiv310 divide 0 70E+0 -> 0 +dqdiv311 divide 0 70E+1 -> 0.0 +dqdiv312 divide 0 70E+5 -> 0.00000 +dqdiv313 divide 0 70E+6 -> 0.000000 +dqdiv314 divide 0 70E+7 -> 0E-7 +dqdiv315 divide 0 700E-5 -> 0E+5 +dqdiv316 divide 0 700E-1 -> 0E+1 +dqdiv317 divide 0 700E+0 -> 0 +dqdiv318 divide 0 700E+1 -> 0.0 +dqdiv319 divide 0 700E+5 -> 0.00000 +dqdiv320 divide 0 700E+6 -> 0.000000 +dqdiv321 divide 0 700E+7 -> 0E-7 +dqdiv322 divide 0 700E+77 -> 0E-77 + +dqdiv331 divide 0E-3 7E-5 -> 0E+2 +dqdiv332 divide 0E-3 7E-1 -> 0.00 +dqdiv333 divide 0E-3 7E+1 -> 0.0000 +dqdiv334 divide 0E-3 7E+5 -> 0E-8 +dqdiv335 divide 0E-1 7E-5 -> 0E+4 +dqdiv336 divide 0E-1 7E-1 -> 0 +dqdiv337 divide 0E-1 7E+1 -> 0.00 +dqdiv338 divide 0E-1 7E+5 -> 0.000000 +dqdiv339 divide 0E+1 7E-5 -> 0E+6 +dqdiv340 divide 0E+1 7E-1 -> 0E+2 +dqdiv341 divide 0E+1 7E+1 -> 0 +dqdiv342 divide 0E+1 7E+5 -> 0.0000 +dqdiv343 divide 0E+3 7E-5 -> 0E+8 +dqdiv344 divide 0E+3 7E-1 -> 0E+4 +dqdiv345 divide 0E+3 7E+1 -> 0E+2 +dqdiv346 divide 0E+3 7E+5 -> 0.00 + +-- These were 'input rounding' +dqdiv441 divide 12345678000 1 -> 12345678000 +dqdiv442 divide 1 12345678000 -> 8.100000664200054464404466081166219E-11 Inexact Rounded +dqdiv443 divide 1234567800 1 -> 1234567800 +dqdiv444 divide 1 1234567800 -> 8.100000664200054464404466081166219E-10 Inexact Rounded +dqdiv445 divide 1234567890 1 -> 1234567890 +dqdiv446 divide 1 1234567890 -> 8.100000073710000670761006103925156E-10 Inexact Rounded +dqdiv447 divide 1234567891 1 -> 1234567891 +dqdiv448 divide 1 1234567891 -> 8.100000067149000556665214614754629E-10 Inexact Rounded +dqdiv449 divide 12345678901 1 -> 12345678901 +dqdiv450 divide 1 12345678901 -> 8.100000073053900658873130042376760E-11 Inexact Rounded +dqdiv451 divide 1234567896 1 -> 1234567896 +dqdiv452 divide 1 1234567896 -> 8.100000034344000145618560617422697E-10 Inexact Rounded + +-- high-lows +dqdiv453 divide 1e+1 1 -> 1E+1 +dqdiv454 divide 1e+1 1.0 -> 1E+1 +dqdiv455 divide 1e+1 1.00 -> 1E+1 +dqdiv456 divide 1e+2 2 -> 5E+1 +dqdiv457 divide 1e+2 2.0 -> 5E+1 +dqdiv458 divide 1e+2 2.00 -> 5E+1 + +-- some from IEEE discussions +dqdiv460 divide 3e0 2e0 -> 1.5 +dqdiv461 divide 30e-1 2e0 -> 1.5 +dqdiv462 divide 300e-2 2e0 -> 1.50 +dqdiv464 divide 3000e-3 2e0 -> 1.500 +dqdiv465 divide 3e0 20e-1 -> 1.5 +dqdiv466 divide 30e-1 20e-1 -> 1.5 +dqdiv467 divide 300e-2 20e-1 -> 1.5 +dqdiv468 divide 3000e-3 20e-1 -> 1.50 +dqdiv469 divide 3e0 200e-2 -> 1.5 +dqdiv470 divide 30e-1 200e-2 -> 1.5 +dqdiv471 divide 300e-2 200e-2 -> 1.5 +dqdiv472 divide 3000e-3 200e-2 -> 1.5 +dqdiv473 divide 3e0 2000e-3 -> 1.5 +dqdiv474 divide 30e-1 2000e-3 -> 1.5 +dqdiv475 divide 300e-2 2000e-3 -> 1.5 +dqdiv476 divide 3000e-3 2000e-3 -> 1.5 + +-- some reciprocals +dqdiv480 divide 1 1.0E+33 -> 1E-33 +dqdiv481 divide 1 10E+33 -> 1E-34 +dqdiv482 divide 1 1.0E-33 -> 1E+33 +dqdiv483 divide 1 10E-33 -> 1E+32 + +-- RMS discussion table +dqdiv484 divide 0e5 1e3 -> 0E+2 +dqdiv485 divide 0e5 2e3 -> 0E+2 +dqdiv486 divide 0e5 10e2 -> 0E+3 +dqdiv487 divide 0e5 20e2 -> 0E+3 +dqdiv488 divide 0e5 100e1 -> 0E+4 +dqdiv489 divide 0e5 200e1 -> 0E+4 + +dqdiv491 divide 1e5 1e3 -> 1E+2 +dqdiv492 divide 1e5 2e3 -> 5E+1 +dqdiv493 divide 1e5 10e2 -> 1E+2 +dqdiv494 divide 1e5 20e2 -> 5E+1 +dqdiv495 divide 1e5 100e1 -> 1E+2 +dqdiv496 divide 1e5 200e1 -> 5E+1 + +-- tryzeros cases +rounding: half_up +dqdiv497 divide 0E+6108 1000E-33 -> 0E+6111 Clamped +dqdiv498 divide 0E-6170 1000E+33 -> 0E-6176 Clamped + +rounding: half_up + +-- focus on trailing zeros issues +dqdiv500 divide 1 9.9 -> 0.1010101010101010101010101010101010 Inexact Rounded +dqdiv501 divide 1 9.09 -> 0.1100110011001100110011001100110011 Inexact Rounded +dqdiv502 divide 1 9.009 -> 0.1110001110001110001110001110001110 Inexact Rounded + +dqdiv511 divide 1 2 -> 0.5 +dqdiv512 divide 1.0 2 -> 0.5 +dqdiv513 divide 1.00 2 -> 0.50 +dqdiv514 divide 1.000 2 -> 0.500 +dqdiv515 divide 1.0000 2 -> 0.5000 +dqdiv516 divide 1.00000 2 -> 0.50000 +dqdiv517 divide 1.000000 2 -> 0.500000 +dqdiv518 divide 1.0000000 2 -> 0.5000000 +dqdiv519 divide 1.00 2.00 -> 0.5 + +dqdiv521 divide 2 1 -> 2 +dqdiv522 divide 2 1.0 -> 2 +dqdiv523 divide 2 1.00 -> 2 +dqdiv524 divide 2 1.000 -> 2 +dqdiv525 divide 2 1.0000 -> 2 +dqdiv526 divide 2 1.00000 -> 2 +dqdiv527 divide 2 1.000000 -> 2 +dqdiv528 divide 2 1.0000000 -> 2 +dqdiv529 divide 2.00 1.00 -> 2 + +dqdiv530 divide 2.40 2 -> 1.20 +dqdiv531 divide 2.40 4 -> 0.60 +dqdiv532 divide 2.40 10 -> 0.24 +dqdiv533 divide 2.40 2.0 -> 1.2 +dqdiv534 divide 2.40 4.0 -> 0.6 +dqdiv535 divide 2.40 10.0 -> 0.24 +dqdiv536 divide 2.40 2.00 -> 1.2 +dqdiv537 divide 2.40 4.00 -> 0.6 +dqdiv538 divide 2.40 10.00 -> 0.24 +dqdiv539 divide 0.9 0.1 -> 9 +dqdiv540 divide 0.9 0.01 -> 9E+1 +dqdiv541 divide 0.9 0.001 -> 9E+2 +dqdiv542 divide 5 2 -> 2.5 +dqdiv543 divide 5 2.0 -> 2.5 +dqdiv544 divide 5 2.00 -> 2.5 +dqdiv545 divide 5 20 -> 0.25 +dqdiv546 divide 5 20.0 -> 0.25 +dqdiv547 divide 2.400 2 -> 1.200 +dqdiv548 divide 2.400 2.0 -> 1.20 +dqdiv549 divide 2.400 2.400 -> 1 + +dqdiv550 divide 240 1 -> 240 +dqdiv551 divide 240 10 -> 24 +dqdiv552 divide 240 100 -> 2.4 +dqdiv553 divide 240 1000 -> 0.24 +dqdiv554 divide 2400 1 -> 2400 +dqdiv555 divide 2400 10 -> 240 +dqdiv556 divide 2400 100 -> 24 +dqdiv557 divide 2400 1000 -> 2.4 + +-- +ve exponent +dqdiv600 divide 2.4E+9 2 -> 1.2E+9 +dqdiv601 divide 2.40E+9 2 -> 1.20E+9 +dqdiv602 divide 2.400E+9 2 -> 1.200E+9 +dqdiv603 divide 2.4000E+9 2 -> 1.2000E+9 +dqdiv604 divide 24E+8 2 -> 1.2E+9 +dqdiv605 divide 240E+7 2 -> 1.20E+9 +dqdiv606 divide 2400E+6 2 -> 1.200E+9 +dqdiv607 divide 24000E+5 2 -> 1.2000E+9 + +-- more zeros, etc. +dqdiv731 divide 5.00 1E-3 -> 5.00E+3 +dqdiv732 divide 00.00 0.000 -> NaN Division_undefined +dqdiv733 divide 00.00 0E-3 -> NaN Division_undefined +dqdiv734 divide 0 -0 -> NaN Division_undefined +dqdiv735 divide -0 0 -> NaN Division_undefined +dqdiv736 divide -0 -0 -> NaN Division_undefined + +dqdiv741 divide 0 -1 -> -0 +dqdiv742 divide -0 -1 -> 0 +dqdiv743 divide 0 1 -> 0 +dqdiv744 divide -0 1 -> -0 +dqdiv745 divide -1 0 -> -Infinity Division_by_zero +dqdiv746 divide -1 -0 -> Infinity Division_by_zero +dqdiv747 divide 1 0 -> Infinity Division_by_zero +dqdiv748 divide 1 -0 -> -Infinity Division_by_zero + +dqdiv751 divide 0.0 -1 -> -0.0 +dqdiv752 divide -0.0 -1 -> 0.0 +dqdiv753 divide 0.0 1 -> 0.0 +dqdiv754 divide -0.0 1 -> -0.0 +dqdiv755 divide -1.0 0 -> -Infinity Division_by_zero +dqdiv756 divide -1.0 -0 -> Infinity Division_by_zero +dqdiv757 divide 1.0 0 -> Infinity Division_by_zero +dqdiv758 divide 1.0 -0 -> -Infinity Division_by_zero + +dqdiv761 divide 0 -1.0 -> -0E+1 +dqdiv762 divide -0 -1.0 -> 0E+1 +dqdiv763 divide 0 1.0 -> 0E+1 +dqdiv764 divide -0 1.0 -> -0E+1 +dqdiv765 divide -1 0.0 -> -Infinity Division_by_zero +dqdiv766 divide -1 -0.0 -> Infinity Division_by_zero +dqdiv767 divide 1 0.0 -> Infinity Division_by_zero +dqdiv768 divide 1 -0.0 -> -Infinity Division_by_zero + +dqdiv771 divide 0.0 -1.0 -> -0 +dqdiv772 divide -0.0 -1.0 -> 0 +dqdiv773 divide 0.0 1.0 -> 0 +dqdiv774 divide -0.0 1.0 -> -0 +dqdiv775 divide -1.0 0.0 -> -Infinity Division_by_zero +dqdiv776 divide -1.0 -0.0 -> Infinity Division_by_zero +dqdiv777 divide 1.0 0.0 -> Infinity Division_by_zero +dqdiv778 divide 1.0 -0.0 -> -Infinity Division_by_zero + +-- Specials +dqdiv780 divide Inf -Inf -> NaN Invalid_operation +dqdiv781 divide Inf -1000 -> -Infinity +dqdiv782 divide Inf -1 -> -Infinity +dqdiv783 divide Inf -0 -> -Infinity +dqdiv784 divide Inf 0 -> Infinity +dqdiv785 divide Inf 1 -> Infinity +dqdiv786 divide Inf 1000 -> Infinity +dqdiv787 divide Inf Inf -> NaN Invalid_operation +dqdiv788 divide -1000 Inf -> -0E-6176 Clamped +dqdiv789 divide -Inf Inf -> NaN Invalid_operation +dqdiv790 divide -1 Inf -> -0E-6176 Clamped +dqdiv791 divide -0 Inf -> -0E-6176 Clamped +dqdiv792 divide 0 Inf -> 0E-6176 Clamped +dqdiv793 divide 1 Inf -> 0E-6176 Clamped +dqdiv794 divide 1000 Inf -> 0E-6176 Clamped +dqdiv795 divide Inf Inf -> NaN Invalid_operation + +dqdiv800 divide -Inf -Inf -> NaN Invalid_operation +dqdiv801 divide -Inf -1000 -> Infinity +dqdiv802 divide -Inf -1 -> Infinity +dqdiv803 divide -Inf -0 -> Infinity +dqdiv804 divide -Inf 0 -> -Infinity +dqdiv805 divide -Inf 1 -> -Infinity +dqdiv806 divide -Inf 1000 -> -Infinity +dqdiv807 divide -Inf Inf -> NaN Invalid_operation +dqdiv808 divide -1000 Inf -> -0E-6176 Clamped +dqdiv809 divide -Inf -Inf -> NaN Invalid_operation +dqdiv810 divide -1 -Inf -> 0E-6176 Clamped +dqdiv811 divide -0 -Inf -> 0E-6176 Clamped +dqdiv812 divide 0 -Inf -> -0E-6176 Clamped +dqdiv813 divide 1 -Inf -> -0E-6176 Clamped +dqdiv814 divide 1000 -Inf -> -0E-6176 Clamped +dqdiv815 divide Inf -Inf -> NaN Invalid_operation + +dqdiv821 divide NaN -Inf -> NaN +dqdiv822 divide NaN -1000 -> NaN +dqdiv823 divide NaN -1 -> NaN +dqdiv824 divide NaN -0 -> NaN +dqdiv825 divide NaN 0 -> NaN +dqdiv826 divide NaN 1 -> NaN +dqdiv827 divide NaN 1000 -> NaN +dqdiv828 divide NaN Inf -> NaN +dqdiv829 divide NaN NaN -> NaN +dqdiv830 divide -Inf NaN -> NaN +dqdiv831 divide -1000 NaN -> NaN +dqdiv832 divide -1 NaN -> NaN +dqdiv833 divide -0 NaN -> NaN +dqdiv834 divide 0 NaN -> NaN +dqdiv835 divide 1 NaN -> NaN +dqdiv836 divide 1000 NaN -> NaN +dqdiv837 divide Inf NaN -> NaN + +dqdiv841 divide sNaN -Inf -> NaN Invalid_operation +dqdiv842 divide sNaN -1000 -> NaN Invalid_operation +dqdiv843 divide sNaN -1 -> NaN Invalid_operation +dqdiv844 divide sNaN -0 -> NaN Invalid_operation +dqdiv845 divide sNaN 0 -> NaN Invalid_operation +dqdiv846 divide sNaN 1 -> NaN Invalid_operation +dqdiv847 divide sNaN 1000 -> NaN Invalid_operation +dqdiv848 divide sNaN NaN -> NaN Invalid_operation +dqdiv849 divide sNaN sNaN -> NaN Invalid_operation +dqdiv850 divide NaN sNaN -> NaN Invalid_operation +dqdiv851 divide -Inf sNaN -> NaN Invalid_operation +dqdiv852 divide -1000 sNaN -> NaN Invalid_operation +dqdiv853 divide -1 sNaN -> NaN Invalid_operation +dqdiv854 divide -0 sNaN -> NaN Invalid_operation +dqdiv855 divide 0 sNaN -> NaN Invalid_operation +dqdiv856 divide 1 sNaN -> NaN Invalid_operation +dqdiv857 divide 1000 sNaN -> NaN Invalid_operation +dqdiv858 divide Inf sNaN -> NaN Invalid_operation +dqdiv859 divide NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqdiv861 divide NaN9 -Inf -> NaN9 +dqdiv862 divide NaN8 1000 -> NaN8 +dqdiv863 divide NaN7 Inf -> NaN7 +dqdiv864 divide NaN6 NaN5 -> NaN6 +dqdiv865 divide -Inf NaN4 -> NaN4 +dqdiv866 divide -1000 NaN3 -> NaN3 +dqdiv867 divide Inf NaN2 -> NaN2 + +dqdiv871 divide sNaN99 -Inf -> NaN99 Invalid_operation +dqdiv872 divide sNaN98 -1 -> NaN98 Invalid_operation +dqdiv873 divide sNaN97 NaN -> NaN97 Invalid_operation +dqdiv874 divide sNaN96 sNaN94 -> NaN96 Invalid_operation +dqdiv875 divide NaN95 sNaN93 -> NaN93 Invalid_operation +dqdiv876 divide -Inf sNaN92 -> NaN92 Invalid_operation +dqdiv877 divide 0 sNaN91 -> NaN91 Invalid_operation +dqdiv878 divide Inf sNaN90 -> NaN90 Invalid_operation +dqdiv879 divide NaN sNaN89 -> NaN89 Invalid_operation + +dqdiv881 divide -NaN9 -Inf -> -NaN9 +dqdiv882 divide -NaN8 1000 -> -NaN8 +dqdiv883 divide -NaN7 Inf -> -NaN7 +dqdiv884 divide -NaN6 -NaN5 -> -NaN6 +dqdiv885 divide -Inf -NaN4 -> -NaN4 +dqdiv886 divide -1000 -NaN3 -> -NaN3 +dqdiv887 divide Inf -NaN2 -> -NaN2 + +dqdiv891 divide -sNaN99 -Inf -> -NaN99 Invalid_operation +dqdiv892 divide -sNaN98 -1 -> -NaN98 Invalid_operation +dqdiv893 divide -sNaN97 NaN -> -NaN97 Invalid_operation +dqdiv894 divide -sNaN96 -sNaN94 -> -NaN96 Invalid_operation +dqdiv895 divide -NaN95 -sNaN93 -> -NaN93 Invalid_operation +dqdiv896 divide -Inf -sNaN92 -> -NaN92 Invalid_operation +dqdiv897 divide 0 -sNaN91 -> -NaN91 Invalid_operation +dqdiv898 divide Inf -sNaN90 -> -NaN90 Invalid_operation +dqdiv899 divide -NaN -sNaN89 -> -NaN89 Invalid_operation + +-- Various flavours of divide by 0 +dqdiv901 divide 0 0 -> NaN Division_undefined +dqdiv902 divide 0.0E5 0 -> NaN Division_undefined +dqdiv903 divide 0.000 0 -> NaN Division_undefined +dqdiv904 divide 0.0001 0 -> Infinity Division_by_zero +dqdiv905 divide 0.01 0 -> Infinity Division_by_zero +dqdiv906 divide 0.1 0 -> Infinity Division_by_zero +dqdiv907 divide 1 0 -> Infinity Division_by_zero +dqdiv908 divide 1 0.0 -> Infinity Division_by_zero +dqdiv909 divide 10 0.0 -> Infinity Division_by_zero +dqdiv910 divide 1E+100 0.0 -> Infinity Division_by_zero +dqdiv911 divide 1E+100 0 -> Infinity Division_by_zero + +dqdiv921 divide -0.0001 0 -> -Infinity Division_by_zero +dqdiv922 divide -0.01 0 -> -Infinity Division_by_zero +dqdiv923 divide -0.1 0 -> -Infinity Division_by_zero +dqdiv924 divide -1 0 -> -Infinity Division_by_zero +dqdiv925 divide -1 0.0 -> -Infinity Division_by_zero +dqdiv926 divide -10 0.0 -> -Infinity Division_by_zero +dqdiv927 divide -1E+100 0.0 -> -Infinity Division_by_zero +dqdiv928 divide -1E+100 0 -> -Infinity Division_by_zero + +dqdiv931 divide 0.0001 -0 -> -Infinity Division_by_zero +dqdiv932 divide 0.01 -0 -> -Infinity Division_by_zero +dqdiv933 divide 0.1 -0 -> -Infinity Division_by_zero +dqdiv934 divide 1 -0 -> -Infinity Division_by_zero +dqdiv935 divide 1 -0.0 -> -Infinity Division_by_zero +dqdiv936 divide 10 -0.0 -> -Infinity Division_by_zero +dqdiv937 divide 1E+100 -0.0 -> -Infinity Division_by_zero +dqdiv938 divide 1E+100 -0 -> -Infinity Division_by_zero + +dqdiv941 divide -0.0001 -0 -> Infinity Division_by_zero +dqdiv942 divide -0.01 -0 -> Infinity Division_by_zero +dqdiv943 divide -0.1 -0 -> Infinity Division_by_zero +dqdiv944 divide -1 -0 -> Infinity Division_by_zero +dqdiv945 divide -1 -0.0 -> Infinity Division_by_zero +dqdiv946 divide -10 -0.0 -> Infinity Division_by_zero +dqdiv947 divide -1E+100 -0.0 -> Infinity Division_by_zero +dqdiv948 divide -1E+100 -0 -> Infinity Division_by_zero + +-- Examples from SQL proposal (Krishna Kulkarni) +dqdiv1021 divide 1E0 1E0 -> 1 +dqdiv1022 divide 1E0 2E0 -> 0.5 +dqdiv1023 divide 1E0 3E0 -> 0.3333333333333333333333333333333333 Inexact Rounded +dqdiv1024 divide 100E-2 1000E-3 -> 1 +dqdiv1025 divide 24E-1 2E0 -> 1.2 +dqdiv1026 divide 2400E-3 2E0 -> 1.200 +dqdiv1027 divide 5E0 2E0 -> 2.5 +dqdiv1028 divide 5E0 20E-1 -> 2.5 +dqdiv1029 divide 5E0 2000E-3 -> 2.5 +dqdiv1030 divide 5E0 2E-1 -> 25 +dqdiv1031 divide 5E0 20E-2 -> 25 +dqdiv1032 divide 480E-2 3E0 -> 1.60 +dqdiv1033 divide 47E-1 2E0 -> 2.35 + +-- ECMAScript bad examples +rounding: half_down +dqdiv1040 divide 5 9 -> 0.5555555555555555555555555555555556 Inexact Rounded +rounding: half_even +dqdiv1041 divide 6 11 -> 0.5454545454545454545454545454545455 Inexact Rounded + +-- Gyuris example +dqdiv1050 divide 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 0.9999999999999999999999999999991254 Inexact Rounded + +-- overflow and underflow tests .. note subnormal results +-- signs +dqdiv1751 divide 1e+4277 1e-3311 -> Infinity Overflow Inexact Rounded +dqdiv1752 divide 1e+4277 -1e-3311 -> -Infinity Overflow Inexact Rounded +dqdiv1753 divide -1e+4277 1e-3311 -> -Infinity Overflow Inexact Rounded +dqdiv1754 divide -1e+4277 -1e-3311 -> Infinity Overflow Inexact Rounded +dqdiv1755 divide 1e-4277 1e+3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1756 divide 1e-4277 -1e+3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1757 divide -1e-4277 1e+3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1758 divide -1e-4277 -1e+3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dqdiv1760 divide 1e-6069 1e+101 -> 1E-6170 Subnormal +dqdiv1761 divide 1e-6069 1e+102 -> 1E-6171 Subnormal +dqdiv1762 divide 1e-6069 1e+103 -> 1E-6172 Subnormal +dqdiv1763 divide 1e-6069 1e+104 -> 1E-6173 Subnormal +dqdiv1764 divide 1e-6069 1e+105 -> 1E-6174 Subnormal +dqdiv1765 divide 1e-6069 1e+106 -> 1E-6175 Subnormal +dqdiv1766 divide 1e-6069 1e+107 -> 1E-6176 Subnormal +dqdiv1767 divide 1e-6069 1e+108 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1768 divide 1e-6069 1e+109 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1769 divide 1e-6069 1e+110 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +dqdiv1770 divide 1e+40 1e-6101 -> 1.000000000000000000000000000000E+6141 Clamped +dqdiv1771 divide 1e+40 1e-6102 -> 1.0000000000000000000000000000000E+6142 Clamped +dqdiv1772 divide 1e+40 1e-6103 -> 1.00000000000000000000000000000000E+6143 Clamped +dqdiv1773 divide 1e+40 1e-6104 -> 1.000000000000000000000000000000000E+6144 Clamped +dqdiv1774 divide 1e+40 1e-6105 -> Infinity Overflow Inexact Rounded +dqdiv1775 divide 1e+40 1e-6106 -> Infinity Overflow Inexact Rounded +dqdiv1776 divide 1e+40 1e-6107 -> Infinity Overflow Inexact Rounded +dqdiv1777 divide 1e+40 1e-6108 -> Infinity Overflow Inexact Rounded +dqdiv1778 divide 1e+40 1e-6109 -> Infinity Overflow Inexact Rounded +dqdiv1779 divide 1e+40 1e-6110 -> Infinity Overflow Inexact Rounded + +dqdiv1801 divide 1.0000E-6172 1 -> 1.0000E-6172 Subnormal +dqdiv1802 divide 1.000E-6172 1e+1 -> 1.000E-6173 Subnormal +dqdiv1803 divide 1.00E-6172 1e+2 -> 1.00E-6174 Subnormal +dqdiv1804 divide 1.0E-6172 1e+3 -> 1.0E-6175 Subnormal +dqdiv1805 divide 1.0E-6172 1e+4 -> 1E-6176 Subnormal Rounded +dqdiv1806 divide 1.3E-6172 1e+4 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1807 divide 1.5E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1808 divide 1.7E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1809 divide 2.3E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1810 divide 2.5E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1811 divide 2.7E-6172 1e+4 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqdiv1812 divide 1.49E-6172 1e+4 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1813 divide 1.50E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1814 divide 1.51E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1815 divide 2.49E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1816 divide 2.50E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1817 divide 2.51E-6172 1e+4 -> 3E-6176 Underflow Subnormal Inexact Rounded + +dqdiv1818 divide 1E-6172 1e+4 -> 1E-6176 Subnormal +dqdiv1819 divide 3E-6172 1e+5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1820 divide 5E-6172 1e+5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1821 divide 7E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1822 divide 9E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1823 divide 9.9E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded + +dqdiv1824 divide 1E-6172 -1e+4 -> -1E-6176 Subnormal +dqdiv1825 divide 3E-6172 -1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1826 divide -5E-6172 1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1827 divide 7E-6172 -1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1828 divide -9E-6172 1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1829 divide 9.9E-6172 -1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1830 divide 3.0E-6172 -1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqdiv1831 divide 1.0E-5977 1e+200 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1832 divide 1.0E-5977 1e+199 -> 1E-6176 Subnormal Rounded +dqdiv1833 divide 1.0E-5977 1e+198 -> 1.0E-6175 Subnormal +dqdiv1834 divide 2.0E-5977 2e+198 -> 1.0E-6175 Subnormal +dqdiv1835 divide 4.0E-5977 4e+198 -> 1.0E-6175 Subnormal +dqdiv1836 divide 10.0E-5977 10e+198 -> 1.0E-6175 Subnormal +dqdiv1837 divide 30.0E-5977 30e+198 -> 1.0E-6175 Subnormal +dqdiv1838 divide 40.0E-5982 40e+166 -> 1.0E-6148 Subnormal +dqdiv1839 divide 40.0E-5982 40e+165 -> 1.0E-6147 Subnormal +dqdiv1840 divide 40.0E-5982 40e+164 -> 1.0E-6146 Subnormal + +-- randoms +rounding: half_even +dqdiv2010 divide -5231195652931651968034356117118850 -7243718664422548573203260970.34995 -> 722169.9095831284624736051460550680 Inexact Rounded +dqdiv2011 divide -89584669773927.82711237350022515352 -42077943728529635884.21142627532985 -> 0.000002129017291146471565928125887527266 Inexact Rounded +dqdiv2012 divide -2.828201693360723203806974891946180E-232 812596541221823960386384403089240.9 -> -3.480450075640521320040055759125120E-265 Inexact Rounded +dqdiv2013 divide -6442775372761069267502937539408720 24904085056.69185465145182606089196 -> -258703556388226463687701.4884719589 Inexact Rounded +dqdiv2014 divide 5.535520011272625629610079879714705 -44343664650.57203052003068113531208 -> -1.248322630728089308975940533493562E-10 Inexact Rounded +dqdiv2015 divide 65919273712517865964325.99419625010 -314733354141381737378622515.7789054 -> -0.0002094448295521490616379784758911632 Inexact Rounded +dqdiv2016 divide -7.779172568193197107115275140431129E+759 -140453015639.3988987652895178782143 -> 5.538629792161641534962774244238115E+748 Inexact Rounded +dqdiv2017 divide 644314832597569.0181226067518178797 -115024585257425.1635759521565201075 -> -5.601540150356479257367687450922795 Inexact Rounded +dqdiv2018 divide 6.898640941579611450676592553286870E-47 -11272429881407851485163914999.25943 -> -6.119923578285338689371137648319280E-75 Inexact Rounded +dqdiv2019 divide -3591344544888727133.30819750163254 5329395.423792795661446561090331037 -> -673874662941.1968525589460533725290 Inexact Rounded +dqdiv2020 divide -7.682356781384631313156462724425838E+747 -6.60375855512219057281922141809940E+703 -> 1.163330960279556016678379128875149E+44 Inexact Rounded +dqdiv2021 divide -4511495596596941820863224.274679699 3365395017.263329795449661616090724 -> -1340554548115304.904166888018346299 Inexact Rounded +dqdiv2022 divide 5.211164127840931517263639608151299 164.5566381356276567012533847006453 -> 0.03166790587655228864478260157156510 Inexact Rounded +dqdiv2023 divide -49891.2243893458830384077684620383 -47179.9312961860747554053371171530 -> 1.057467084386767291602189656430268 Inexact Rounded +dqdiv2024 divide 15065477.47214268488077415462413353 4366211.120892953261309529740552596 -> 3.450469309661227984244545513441359 Inexact Rounded +dqdiv2025 divide 1.575670269440761846109602429612644E+370 653199649324740300.006185482643439 -> 2.412233795700359170904588548041481E+352 Inexact Rounded +dqdiv2026 divide -2112422311733448924573432192.620145 -80067206.03590693153848215848613406 -> 26383115089417660175.20102646756574 Inexact Rounded +dqdiv2027 divide -67096536051279809.32218611548721839 -869685412881941081664251990181.1049 -> 7.715035236584805921278566365231168E-14 Inexact Rounded +dqdiv2028 divide -58612908548962047.21866913425488972 -978449597531.3873665583475633831644 -> 59903.86085991703091236507859837023 Inexact Rounded +dqdiv2029 divide -133032412010942.1476864138213319796 -7.882059293498670705446528648201359E-428 -> 1.687787506504433064549515681693715E+441 Inexact Rounded +dqdiv2030 divide 1.83746698338966029492299716360513E+977 -9.897926608979649951672839879128603E+154 -> -1.856416051542212552042390218062458E+822 Inexact Rounded +dqdiv2031 divide -113742475841399236307128962.1507063 8298602.203049834732657567965262989 -> -13706221006665137826.16557393919929 Inexact Rounded +dqdiv2032 divide 196.4787574650754152995941808331862 929.6553388472318094427422117172394 -> 0.2113458066176526651006917922814018 Inexact Rounded +dqdiv2033 divide 71931221465.43867996282803628130350 3838685934206426257090718.402248853 -> 1.873850132527423413607199513324021E-14 Inexact Rounded +dqdiv2034 divide 488.4282502289651653783596246312885 -80.68940956806634280078706577953188 -> -6.053189047280693318844801899473272 Inexact Rounded +dqdiv2035 divide 9.001764344963921754981762913247394E-162 -8.585540973667205753734967645386919E-729 -> -1.048479574271827326396012573232934E+567 Inexact Rounded +dqdiv2036 divide -7.404133959409894743706402857145471E-828 -51.38159929460289711134684843086265 -> 1.441008855516029461032061785219773E-829 Inexact Rounded +dqdiv2037 divide 2.967520235574419794048994436040717E-613 -6252513855.91394894949879262731889 -> -4.746123405656409127572998751885338E-623 Inexact Rounded +dqdiv2038 divide -18826852654824040505.83920366765051 -6336924877942437992590557460147340 -> 2.970976146546494669807886278519194E-15 Inexact Rounded +dqdiv2039 divide -8.101406784809197604949584001735949E+561 4.823300306948942821076681658771635E+361 -> -1.679639721610839204738445747238987E+200 Inexact Rounded +dqdiv2040 divide -6.11981977773094052331062585191723E+295 1.507610253755339328302779005586534E+238 -> -4.059285058911577244044418416044763E+57 Inexact Rounded +dqdiv2041 divide 6.472638850046815880599220534274055E-596 -4.475233712083047516933911786159972 -> -1.446324207062261745520496475778879E-596 Inexact Rounded +dqdiv2042 divide -84438593330.71277839631144509397112 -586684596204401664208947.4054879633 -> 1.439250218550041228759983937772504E-13 Inexact Rounded +dqdiv2043 divide 9.354533233294022616695815656704369E-24 405.500390626135304252144163591746 -> 2.306911028827774549740571229736198E-26 Inexact Rounded +dqdiv2044 divide 985606423350210.7374876650149957881 -36811563697.41925681866694859828794 -> -26774.36990864119445335813354717711 Inexact Rounded +dqdiv2045 divide -8.187280774177715706278002247766311E-123 -38784124393.91212870828430001300068 -> 2.110987653356139147357240727794365E-133 Inexact Rounded +dqdiv2046 divide -4.612203126350070903459245798371657E+912 7.971562182727956290901984736800519E+64 -> -5.785820922708683237098826662769748E+847 Inexact Rounded +dqdiv2047 divide 4.661015909421485298247928967977089E+888 -6.360911253323922338737311563845581E+388 -> -7.327591478321365980156654539638836E+499 Inexact Rounded +dqdiv2048 divide 9156078172903.257500003260710833030 7.189796653262147139071634237964074E-90 -> 1.273482215766000994365201545096026E+102 Inexact Rounded +dqdiv2049 divide -1.710722303327476586373477781276586E-311 -3167561628260156837329323.729380695 -> 5.400754599578613984875752958645655E-336 Inexact Rounded +dqdiv2050 divide -4.647935210881806238321616345413021E-878 209388.5431867744648177308460639582 -> -2.219765771394593733140494297388140E-883 Inexact Rounded +dqdiv2051 divide 5958.694728395760992719084781582700 4.541510156564315632536353171846096E-746 -> 1.312051393253638664947852693005480E+749 Inexact Rounded +dqdiv2052 divide -7.935732544649702175256699886872093E-489 -7.433329073664793138998765647467971E+360 -> 1.067587949626076917672271619664656E-849 Inexact Rounded +dqdiv2053 divide -2746650864601157.863589959939901350 7.016684945507647528907184694359598E+548 -> -3.914456593009309529351254950429932E-534 Inexact Rounded +dqdiv2054 divide 3605149408631197365447953.994569178 -75614025825649082.78264864428237833 -> -47678315.88472693507060063188020532 Inexact Rounded +dqdiv2055 divide 788194320921798404906375214.196349 -6.222718148433247384932573401976337E-418 -> -1.266639918634671803982222244977287E+444 Inexact Rounded +dqdiv2056 divide 5620722730534752.758208943447603211 6.843552841168538319123000917657759E-139 -> 8.213164800485434666629970443739554E+153 Inexact Rounded +dqdiv2057 divide 7304534676713703938102.403949019402 -576169.3685010935108153023803590835 -> -12677756014201995.31969237144394772 Inexact Rounded +dqdiv2058 divide 8067918762.134621639254916786945547 -8.774771480055536009105596163864758E+954 -> -9.194448858836332156766764605125245E-946 Inexact Rounded +dqdiv2059 divide 8.702093454123046507578256899537563E-324 -5.875399733016018404580201176576293E-401 -> -1.481106622452052581470443526957335E+77 Inexact Rounded +dqdiv2060 divide -41426.01662518451861386352415092356 90.00146621684478300510769802013464 -> -460.2815750287318692732067709176200 Inexact Rounded + +-- random divide tests with result near 1 +dqdiv4001 divide 2003100352770753969878925664524900 2003100352770753969878925664497824 -> 1.000000000000000000000000000013517 Inexact Rounded +dqdiv4002 divide 4817785793916490652579552318371645 4817785793916490652579552318362097 -> 1.000000000000000000000000000001982 Inexact Rounded +dqdiv4003 divide 8299187410920067325648068439560282 8299187410920067325648068439591159 -> 0.9999999999999999999999999999962795 Inexact Rounded +dqdiv4004 divide 5641088455897407044544461785365899 5641088455897407044544461785389965 -> 0.9999999999999999999999999999957338 Inexact Rounded +dqdiv4005 divide 5752274694706545359326361313490424 5752274694706545359326361313502723 -> 0.9999999999999999999999999999978619 Inexact Rounded +dqdiv4006 divide 6762079477373670594829319346099665 6762079477373670594829319346132579 -> 0.9999999999999999999999999999951326 Inexact Rounded +dqdiv4007 divide 7286425153691890341633023222602916 7286425153691890341633023222606556 -> 0.9999999999999999999999999999995004 Inexact Rounded +dqdiv4008 divide 9481233991901305727648306421946655 9481233991901305727648306421919124 -> 1.000000000000000000000000000002904 Inexact Rounded +dqdiv4009 divide 4282053941893951742029444065614311 4282053941893951742029444065583077 -> 1.000000000000000000000000000007294 Inexact Rounded +dqdiv4010 divide 626888225441250639741781850338695 626888225441250639741781850327299 -> 1.000000000000000000000000000018179 Inexact Rounded +dqdiv4011 divide 3860973649222028009456598604468547 3860973649222028009456598604476849 -> 0.9999999999999999999999999999978498 Inexact Rounded +dqdiv4012 divide 4753157080127468127908060607821839 4753157080127468127908060607788379 -> 1.000000000000000000000000000007040 Inexact Rounded +dqdiv4013 divide 552448546203754062805706277880419 552448546203754062805706277881903 -> 0.9999999999999999999999999999973138 Inexact Rounded +dqdiv4014 divide 8405954527952158455323713728917395 8405954527952158455323713728933866 -> 0.9999999999999999999999999999980406 Inexact Rounded +dqdiv4015 divide 7554096502235321142555802238016116 7554096502235321142555802238026546 -> 0.9999999999999999999999999999986193 Inexact Rounded +dqdiv4016 divide 4053257674127518606871054934746782 4053257674127518606871054934767355 -> 0.9999999999999999999999999999949243 Inexact Rounded +dqdiv4017 divide 7112419420755090454716888844011582 7112419420755090454716888844038105 -> 0.9999999999999999999999999999962709 Inexact Rounded +dqdiv4018 divide 3132302137520072728164549730911846 3132302137520072728164549730908416 -> 1.000000000000000000000000000001095 Inexact Rounded +dqdiv4019 divide 4788374045841416355706715048161013 4788374045841416355706715048190077 -> 0.9999999999999999999999999999939303 Inexact Rounded +dqdiv4020 divide 9466021636047630218238075099510597 9466021636047630218238075099484053 -> 1.000000000000000000000000000002804 Inexact Rounded +dqdiv4021 divide 912742745646765625597399692138650 912742745646765625597399692139042 -> 0.9999999999999999999999999999995705 Inexact Rounded +dqdiv4022 divide 9508402742933643208806264897188504 9508402742933643208806264897195973 -> 0.9999999999999999999999999999992145 Inexact Rounded +dqdiv4023 divide 1186956795727233704962361914360895 1186956795727233704962361914329577 -> 1.000000000000000000000000000026385 Inexact Rounded +dqdiv4024 divide 5972210268839014812696916170967938 5972210268839014812696916170954974 -> 1.000000000000000000000000000002171 Inexact Rounded +dqdiv4025 divide 2303801625521619930894460139793140 2303801625521619930894460139799643 -> 0.9999999999999999999999999999971773 Inexact Rounded +dqdiv4026 divide 6022231560002898264777393473966595 6022231560002898264777393473947198 -> 1.000000000000000000000000000003221 Inexact Rounded +dqdiv4027 divide 8426148335801396199969346032210893 8426148335801396199969346032203179 -> 1.000000000000000000000000000000915 Inexact Rounded +dqdiv4028 divide 8812278947028784637382847098411749 8812278947028784637382847098385317 -> 1.000000000000000000000000000002999 Inexact Rounded +dqdiv4029 divide 8145282002348367383264197170116146 8145282002348367383264197170083988 -> 1.000000000000000000000000000003948 Inexact Rounded +dqdiv4030 divide 6821577571876840153123510107387026 6821577571876840153123510107418008 -> 0.9999999999999999999999999999954582 Inexact Rounded +dqdiv4031 divide 9018555319518966970480565482023720 9018555319518966970480565482013346 -> 1.000000000000000000000000000001150 Inexact Rounded +dqdiv4032 divide 4602155712998228449640717252788864 4602155712998228449640717252818502 -> 0.9999999999999999999999999999935600 Inexact Rounded +dqdiv4033 divide 6675607481522785614506828292264472 6675607481522785614506828292277100 -> 0.9999999999999999999999999999981083 Inexact Rounded +dqdiv4034 divide 4015881516871833897766945836264472 4015881516871833897766945836262645 -> 1.000000000000000000000000000000455 Inexact Rounded +dqdiv4035 divide 1415580205933411837595459716910365 1415580205933411837595459716880139 -> 1.000000000000000000000000000021352 Inexact Rounded +dqdiv4036 divide 9432968297069542816752035276361552 9432968297069542816752035276353054 -> 1.000000000000000000000000000000901 Inexact Rounded +dqdiv4037 divide 4799319591303848500532766682140658 4799319591303848500532766682172655 -> 0.9999999999999999999999999999933330 Inexact Rounded +dqdiv4038 divide 316854270732839529790584284987472 316854270732839529790584285004832 -> 0.9999999999999999999999999999452114 Inexact Rounded +dqdiv4039 divide 3598981300592490427826027975697415 3598981300592490427826027975686712 -> 1.000000000000000000000000000002974 Inexact Rounded +dqdiv4040 divide 1664315435694461371155800682196520 1664315435694461371155800682195617 -> 1.000000000000000000000000000000543 Inexact Rounded +dqdiv4041 divide 1680872316531128890102855316510581 1680872316531128890102855316495545 -> 1.000000000000000000000000000008945 Inexact Rounded +dqdiv4042 divide 9881274879566405475755499281644730 9881274879566405475755499281615743 -> 1.000000000000000000000000000002934 Inexact Rounded +dqdiv4043 divide 4737225957717466960447204232279216 4737225957717466960447204232277452 -> 1.000000000000000000000000000000372 Inexact Rounded +dqdiv4044 divide 2482097379414867061213319346418288 2482097379414867061213319346387936 -> 1.000000000000000000000000000012228 Inexact Rounded +dqdiv4045 divide 7406977595233762723576434122161868 7406977595233762723576434122189042 -> 0.9999999999999999999999999999963313 Inexact Rounded +dqdiv4046 divide 228782057757566047086593281773577 228782057757566047086593281769727 -> 1.000000000000000000000000000016828 Inexact Rounded +dqdiv4047 divide 2956594270240579648823270540367653 2956594270240579648823270540368556 -> 0.9999999999999999999999999999996946 Inexact Rounded +dqdiv4048 divide 6326964098897620620534136767634340 6326964098897620620534136767619339 -> 1.000000000000000000000000000002371 Inexact Rounded +dqdiv4049 divide 414586440456590215247002678327800 414586440456590215247002678316922 -> 1.000000000000000000000000000026238 Inexact Rounded +dqdiv4050 divide 7364552208570039386220505636779125 7364552208570039386220505636803548 -> 0.9999999999999999999999999999966837 Inexact Rounded +dqdiv4051 divide 5626266749902369710022824950590056 5626266749902369710022824950591008 -> 0.9999999999999999999999999999998308 Inexact Rounded +dqdiv4052 divide 4863278293916197454987481343460484 4863278293916197454987481343442522 -> 1.000000000000000000000000000003693 Inexact Rounded +dqdiv4053 divide 1170713582030637359713249796835483 1170713582030637359713249796823345 -> 1.000000000000000000000000000010368 Inexact Rounded +dqdiv4054 divide 9838062494725965667776326556052931 9838062494725965667776326556061002 -> 0.9999999999999999999999999999991796 Inexact Rounded +dqdiv4055 divide 4071388731298861093005687091498922 4071388731298861093005687091498278 -> 1.000000000000000000000000000000158 Inexact Rounded +dqdiv4056 divide 8753155722324706795855038590272526 8753155722324706795855038590276656 -> 0.9999999999999999999999999999995282 Inexact Rounded +dqdiv4057 divide 4399941911533273418844742658240485 4399941911533273418844742658219891 -> 1.000000000000000000000000000004681 Inexact Rounded +dqdiv4058 divide 4127884159949503677776430620050269 4127884159949503677776430620026091 -> 1.000000000000000000000000000005857 Inexact Rounded +dqdiv4059 divide 5536160822360800067042528317438808 5536160822360800067042528317450687 -> 0.9999999999999999999999999999978543 Inexact Rounded +dqdiv4060 divide 3973234998468664936671088237710246 3973234998468664936671088237741886 -> 0.9999999999999999999999999999920367 Inexact Rounded +dqdiv4061 divide 9824855935638263593410444142327358 9824855935638263593410444142328576 -> 0.9999999999999999999999999999998760 Inexact Rounded +dqdiv4062 divide 5917078517340218131867327300814867 5917078517340218131867327300788701 -> 1.000000000000000000000000000004422 Inexact Rounded +dqdiv4063 divide 4354236601830544882286139612521362 4354236601830544882286139612543223 -> 0.9999999999999999999999999999949794 Inexact Rounded +dqdiv4064 divide 8058474772375259017342110013891294 8058474772375259017342110013906792 -> 0.9999999999999999999999999999980768 Inexact Rounded +dqdiv4065 divide 5519604020981748170517093746166328 5519604020981748170517093746181763 -> 0.9999999999999999999999999999972036 Inexact Rounded +dqdiv4066 divide 1502130966879805458831323782443139 1502130966879805458831323782412213 -> 1.000000000000000000000000000020588 Inexact Rounded +dqdiv4067 divide 562795633719481212915159787980270 562795633719481212915159788007066 -> 0.9999999999999999999999999999523877 Inexact Rounded +dqdiv4068 divide 6584743324494664273941281557268878 6584743324494664273941281557258945 -> 1.000000000000000000000000000001508 Inexact Rounded +dqdiv4069 divide 3632000327285743997976431109416500 3632000327285743997976431109408107 -> 1.000000000000000000000000000002311 Inexact Rounded +dqdiv4070 divide 1145827237315430089388953838561450 1145827237315430089388953838527332 -> 1.000000000000000000000000000029776 Inexact Rounded +dqdiv4071 divide 8874431010357691869725372317350380 8874431010357691869725372317316472 -> 1.000000000000000000000000000003821 Inexact Rounded +dqdiv4072 divide 992948718902804648119753141202196 992948718902804648119753141235222 -> 0.9999999999999999999999999999667395 Inexact Rounded +dqdiv4073 divide 2522735183374218505142417265439989 2522735183374218505142417265453779 -> 0.9999999999999999999999999999945337 Inexact Rounded +dqdiv4074 divide 2668419161912936508006872303501052 2668419161912936508006872303471036 -> 1.000000000000000000000000000011249 Inexact Rounded +dqdiv4075 divide 3036169085665186712590941111775092 3036169085665186712590941111808846 -> 0.9999999999999999999999999999888827 Inexact Rounded +dqdiv4076 divide 9441634604917231638508898934006147 9441634604917231638508898934000288 -> 1.000000000000000000000000000000621 Inexact Rounded +dqdiv4077 divide 2677301353164377091111458811839190 2677301353164377091111458811867722 -> 0.9999999999999999999999999999893430 Inexact Rounded +dqdiv4078 divide 6844979203112066166583765857171426 6844979203112066166583765857189682 -> 0.9999999999999999999999999999973329 Inexact Rounded +dqdiv4079 divide 2220337435141796724323783960231661 2220337435141796724323783960208778 -> 1.000000000000000000000000000010306 Inexact Rounded +dqdiv4080 divide 6447424700019783931569996989561380 6447424700019783931569996989572454 -> 0.9999999999999999999999999999982824 Inexact Rounded +dqdiv4081 divide 7512856762696607119847092195587180 7512856762696607119847092195557346 -> 1.000000000000000000000000000003971 Inexact Rounded +dqdiv4082 divide 7395261981193960399087819077237482 7395261981193960399087819077242487 -> 0.9999999999999999999999999999993232 Inexact Rounded +dqdiv4083 divide 2253442467682584035792724884376735 2253442467682584035792724884407178 -> 0.9999999999999999999999999999864904 Inexact Rounded +dqdiv4084 divide 8153138680300213135577336466190997 8153138680300213135577336466220607 -> 0.9999999999999999999999999999963683 Inexact Rounded +dqdiv4085 divide 4668731252254148074041022681801390 4668731252254148074041022681778101 -> 1.000000000000000000000000000004988 Inexact Rounded +dqdiv4086 divide 6078404557993669696040425501815056 6078404557993669696040425501797612 -> 1.000000000000000000000000000002870 Inexact Rounded +dqdiv4087 divide 2306352359874261623223356878316278 2306352359874261623223356878335612 -> 0.9999999999999999999999999999916171 Inexact Rounded +dqdiv4088 divide 3264842186668480362900909564091908 3264842186668480362900909564058658 -> 1.000000000000000000000000000010184 Inexact Rounded +dqdiv4089 divide 6971985047279636878957959608612204 6971985047279636878957959608615088 -> 0.9999999999999999999999999999995863 Inexact Rounded +dqdiv4090 divide 5262810889952721235466445973816257 5262810889952721235466445973783077 -> 1.000000000000000000000000000006305 Inexact Rounded +dqdiv4091 divide 7947944731035267178548357070080288 7947944731035267178548357070061339 -> 1.000000000000000000000000000002384 Inexact Rounded +dqdiv4092 divide 5071808908395375108383035800443229 5071808908395375108383035800412429 -> 1.000000000000000000000000000006073 Inexact Rounded +dqdiv4093 divide 2043146542084503655511507209262969 2043146542084503655511507209249263 -> 1.000000000000000000000000000006708 Inexact Rounded +dqdiv4094 divide 4097632735384534181661959731264802 4097632735384534181661959731234499 -> 1.000000000000000000000000000007395 Inexact Rounded +dqdiv4095 divide 3061477642831387489729464587044430 3061477642831387489729464587059452 -> 0.9999999999999999999999999999950932 Inexact Rounded +dqdiv4096 divide 3429854941039776159498802936252638 3429854941039776159498802936246415 -> 1.000000000000000000000000000001814 Inexact Rounded +dqdiv4097 divide 4874324979578599700024133278284545 4874324979578599700024133278262131 -> 1.000000000000000000000000000004598 Inexact Rounded +dqdiv4098 divide 5701652369691833541455978515820882 5701652369691833541455978515834854 -> 0.9999999999999999999999999999975495 Inexact Rounded +dqdiv4099 divide 2928205728402945266953255632343113 2928205728402945266953255632373794 -> 0.9999999999999999999999999999895223 Inexact Rounded + +-- Null tests +dqdiv9998 divide 10 # -> NaN Invalid_operation +dqdiv9999 divide # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqDivideInt.decTest b/Lib/test/decimaltestdata/dqDivideInt.decTest index ed74fe61386..077ac0e3b01 100644 --- a/Lib/test/decimaltestdata/dqDivideInt.decTest +++ b/Lib/test/decimaltestdata/dqDivideInt.decTest @@ -1,453 +1,453 @@ ------------------------------------------------------------------------- --- dqDivideInt.decTest -- decQuad integer division -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - - -dqdvi001 divideint 1 1 -> 1 -dqdvi002 divideint 2 1 -> 2 -dqdvi003 divideint 1 2 -> 0 -dqdvi004 divideint 2 2 -> 1 -dqdvi005 divideint 0 1 -> 0 -dqdvi006 divideint 0 2 -> 0 -dqdvi007 divideint 1 3 -> 0 -dqdvi008 divideint 2 3 -> 0 -dqdvi009 divideint 3 3 -> 1 - -dqdvi010 divideint 2.4 1 -> 2 -dqdvi011 divideint 2.4 -1 -> -2 -dqdvi012 divideint -2.4 1 -> -2 -dqdvi013 divideint -2.4 -1 -> 2 -dqdvi014 divideint 2.40 1 -> 2 -dqdvi015 divideint 2.400 1 -> 2 -dqdvi016 divideint 2.4 2 -> 1 -dqdvi017 divideint 2.400 2 -> 1 -dqdvi018 divideint 2. 2 -> 1 -dqdvi019 divideint 20 20 -> 1 - -dqdvi020 divideint 187 187 -> 1 -dqdvi021 divideint 5 2 -> 2 -dqdvi022 divideint 5 2.0 -> 2 -dqdvi023 divideint 5 2.000 -> 2 -dqdvi024 divideint 5 0.200 -> 25 -dqdvi025 divideint 5 0.200 -> 25 - -dqdvi030 divideint 1 2 -> 0 -dqdvi031 divideint 1 4 -> 0 -dqdvi032 divideint 1 8 -> 0 -dqdvi033 divideint 1 16 -> 0 -dqdvi034 divideint 1 32 -> 0 -dqdvi035 divideint 1 64 -> 0 -dqdvi040 divideint 1 -2 -> -0 -dqdvi041 divideint 1 -4 -> -0 -dqdvi042 divideint 1 -8 -> -0 -dqdvi043 divideint 1 -16 -> -0 -dqdvi044 divideint 1 -32 -> -0 -dqdvi045 divideint 1 -64 -> -0 -dqdvi050 divideint -1 2 -> -0 -dqdvi051 divideint -1 4 -> -0 -dqdvi052 divideint -1 8 -> -0 -dqdvi053 divideint -1 16 -> -0 -dqdvi054 divideint -1 32 -> -0 -dqdvi055 divideint -1 64 -> -0 -dqdvi060 divideint -1 -2 -> 0 -dqdvi061 divideint -1 -4 -> 0 -dqdvi062 divideint -1 -8 -> 0 -dqdvi063 divideint -1 -16 -> 0 -dqdvi064 divideint -1 -32 -> 0 -dqdvi065 divideint -1 -64 -> 0 - --- similar with powers of ten -dqdvi160 divideint 1 1 -> 1 -dqdvi161 divideint 1 10 -> 0 -dqdvi162 divideint 1 100 -> 0 -dqdvi163 divideint 1 1000 -> 0 -dqdvi164 divideint 1 10000 -> 0 -dqdvi165 divideint 1 100000 -> 0 -dqdvi166 divideint 1 1000000 -> 0 -dqdvi167 divideint 1 10000000 -> 0 -dqdvi168 divideint 1 100000000 -> 0 -dqdvi170 divideint 1 -1 -> -1 -dqdvi171 divideint 1 -10 -> -0 -dqdvi172 divideint 1 -100 -> -0 -dqdvi173 divideint 1 -1000 -> -0 -dqdvi174 divideint 1 -10000 -> -0 -dqdvi175 divideint 1 -100000 -> -0 -dqdvi176 divideint 1 -1000000 -> -0 -dqdvi177 divideint 1 -10000000 -> -0 -dqdvi178 divideint 1 -100000000 -> -0 -dqdvi180 divideint -1 1 -> -1 -dqdvi181 divideint -1 10 -> -0 -dqdvi182 divideint -1 100 -> -0 -dqdvi183 divideint -1 1000 -> -0 -dqdvi184 divideint -1 10000 -> -0 -dqdvi185 divideint -1 100000 -> -0 -dqdvi186 divideint -1 1000000 -> -0 -dqdvi187 divideint -1 10000000 -> -0 -dqdvi188 divideint -1 100000000 -> -0 -dqdvi190 divideint -1 -1 -> 1 -dqdvi191 divideint -1 -10 -> 0 -dqdvi192 divideint -1 -100 -> 0 -dqdvi193 divideint -1 -1000 -> 0 -dqdvi194 divideint -1 -10000 -> 0 -dqdvi195 divideint -1 -100000 -> 0 -dqdvi196 divideint -1 -1000000 -> 0 -dqdvi197 divideint -1 -10000000 -> 0 -dqdvi198 divideint -1 -100000000 -> 0 - --- some long operand (at p=9) cases -dqdvi070 divideint 999999999 1 -> 999999999 -dqdvi071 divideint 999999999.4 1 -> 999999999 -dqdvi072 divideint 999999999.5 1 -> 999999999 -dqdvi073 divideint 999999999.9 1 -> 999999999 -dqdvi074 divideint 999999999.999 1 -> 999999999 - -dqdvi090 divideint 0. 1 -> 0 -dqdvi091 divideint .0 1 -> 0 -dqdvi092 divideint 0.00 1 -> 0 -dqdvi093 divideint 0.00E+9 1 -> 0 -dqdvi094 divideint 0.0000E-50 1 -> 0 - -dqdvi100 divideint 1 1 -> 1 -dqdvi101 divideint 1 2 -> 0 -dqdvi102 divideint 1 3 -> 0 -dqdvi103 divideint 1 4 -> 0 -dqdvi104 divideint 1 5 -> 0 -dqdvi105 divideint 1 6 -> 0 -dqdvi106 divideint 1 7 -> 0 -dqdvi107 divideint 1 8 -> 0 -dqdvi108 divideint 1 9 -> 0 -dqdvi109 divideint 1 10 -> 0 -dqdvi110 divideint 1 1 -> 1 -dqdvi111 divideint 2 1 -> 2 -dqdvi112 divideint 3 1 -> 3 -dqdvi113 divideint 4 1 -> 4 -dqdvi114 divideint 5 1 -> 5 -dqdvi115 divideint 6 1 -> 6 -dqdvi116 divideint 7 1 -> 7 -dqdvi117 divideint 8 1 -> 8 -dqdvi118 divideint 9 1 -> 9 -dqdvi119 divideint 10 1 -> 10 - --- from DiagBigDecimal -dqdvi131 divideint 101.3 1 -> 101 -dqdvi132 divideint 101.0 1 -> 101 -dqdvi133 divideint 101.3 3 -> 33 -dqdvi134 divideint 101.0 3 -> 33 -dqdvi135 divideint 2.4 1 -> 2 -dqdvi136 divideint 2.400 1 -> 2 -dqdvi137 divideint 18 18 -> 1 -dqdvi138 divideint 1120 1000 -> 1 -dqdvi139 divideint 2.4 2 -> 1 -dqdvi140 divideint 2.400 2 -> 1 -dqdvi141 divideint 0.5 2.000 -> 0 -dqdvi142 divideint 8.005 7 -> 1 -dqdvi143 divideint 5 2 -> 2 -dqdvi144 divideint 0 2 -> 0 -dqdvi145 divideint 0.00 2 -> 0 - --- Others -dqdvi150 divideint 12345 4.999 -> 2469 -dqdvi151 divideint 12345 4.99 -> 2473 -dqdvi152 divideint 12345 4.9 -> 2519 -dqdvi153 divideint 12345 5 -> 2469 -dqdvi154 divideint 12345 5.1 -> 2420 -dqdvi155 divideint 12345 5.01 -> 2464 -dqdvi156 divideint 12345 5.001 -> 2468 -dqdvi157 divideint 101 7.6 -> 13 - --- Various flavours of divideint by 0 -dqdvi201 divideint 0 0 -> NaN Division_undefined -dqdvi202 divideint 0.0E5 0 -> NaN Division_undefined -dqdvi203 divideint 0.000 0 -> NaN Division_undefined -dqdvi204 divideint 0.0001 0 -> Infinity Division_by_zero -dqdvi205 divideint 0.01 0 -> Infinity Division_by_zero -dqdvi206 divideint 0.1 0 -> Infinity Division_by_zero -dqdvi207 divideint 1 0 -> Infinity Division_by_zero -dqdvi208 divideint 1 0.0 -> Infinity Division_by_zero -dqdvi209 divideint 10 0.0 -> Infinity Division_by_zero -dqdvi210 divideint 1E+100 0.0 -> Infinity Division_by_zero -dqdvi211 divideint 1E+380 0 -> Infinity Division_by_zero -dqdvi214 divideint -0.0001 0 -> -Infinity Division_by_zero -dqdvi215 divideint -0.01 0 -> -Infinity Division_by_zero -dqdvi216 divideint -0.1 0 -> -Infinity Division_by_zero -dqdvi217 divideint -1 0 -> -Infinity Division_by_zero -dqdvi218 divideint -1 0.0 -> -Infinity Division_by_zero -dqdvi219 divideint -10 0.0 -> -Infinity Division_by_zero -dqdvi220 divideint -1E+100 0.0 -> -Infinity Division_by_zero -dqdvi221 divideint -1E+380 0 -> -Infinity Division_by_zero - --- test some cases that are close to exponent overflow -dqdvi270 divideint 1 1e384 -> 0 -dqdvi271 divideint 1 0.9e384 -> 0 -dqdvi272 divideint 1 0.99e384 -> 0 -dqdvi273 divideint 1 0.9999999999999999e384 -> 0 -dqdvi274 divideint 9e384 1 -> NaN Division_impossible -dqdvi275 divideint 9.9e384 1 -> NaN Division_impossible -dqdvi276 divideint 9.99e384 1 -> NaN Division_impossible -dqdvi277 divideint 9.999999999999999e384 1 -> NaN Division_impossible - -dqdvi280 divideint 0.1 9e-383 -> NaN Division_impossible -dqdvi281 divideint 0.1 99e-383 -> NaN Division_impossible -dqdvi282 divideint 0.1 999e-383 -> NaN Division_impossible -dqdvi283 divideint 0.1 9e-382 -> NaN Division_impossible -dqdvi284 divideint 0.1 99e-382 -> NaN Division_impossible - --- GD edge cases: lhs smaller than rhs but more digits -dqdvi301 divideint 0.9 2 -> 0 -dqdvi302 divideint 0.9 2.0 -> 0 -dqdvi303 divideint 0.9 2.1 -> 0 -dqdvi304 divideint 0.9 2.00 -> 0 -dqdvi305 divideint 0.9 2.01 -> 0 -dqdvi306 divideint 0.12 1 -> 0 -dqdvi307 divideint 0.12 1.0 -> 0 -dqdvi308 divideint 0.12 1.00 -> 0 -dqdvi309 divideint 0.12 1.0 -> 0 -dqdvi310 divideint 0.12 1.00 -> 0 -dqdvi311 divideint 0.12 2 -> 0 -dqdvi312 divideint 0.12 2.0 -> 0 -dqdvi313 divideint 0.12 2.1 -> 0 -dqdvi314 divideint 0.12 2.00 -> 0 -dqdvi315 divideint 0.12 2.01 -> 0 - --- edge cases of impossible -dqdvi330 divideint 1234567987654321987654321890123456 10 -> 123456798765432198765432189012345 -dqdvi331 divideint 1234567987654321987654321890123456 1 -> 1234567987654321987654321890123456 -dqdvi332 divideint 1234567987654321987654321890123456 0.1 -> NaN Division_impossible -dqdvi333 divideint 1234567987654321987654321890123456 0.01 -> NaN Division_impossible - --- overflow and underflow tests [from divide] -dqdvi1051 divideint 1e+277 1e-311 -> NaN Division_impossible -dqdvi1052 divideint 1e+277 -1e-311 -> NaN Division_impossible -dqdvi1053 divideint -1e+277 1e-311 -> NaN Division_impossible -dqdvi1054 divideint -1e+277 -1e-311 -> NaN Division_impossible -dqdvi1055 divideint 1e-277 1e+311 -> 0 -dqdvi1056 divideint 1e-277 -1e+311 -> -0 -dqdvi1057 divideint -1e-277 1e+311 -> -0 -dqdvi1058 divideint -1e-277 -1e+311 -> 0 - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dqdvi1060 divideint 1e-291 1e+101 -> 0 -dqdvi1061 divideint 1e-291 1e+102 -> 0 -dqdvi1062 divideint 1e-291 1e+103 -> 0 -dqdvi1063 divideint 1e-291 1e+104 -> 0 -dqdvi1064 divideint 1e-291 1e+105 -> 0 -dqdvi1065 divideint 1e-291 1e+106 -> 0 -dqdvi1066 divideint 1e-291 1e+107 -> 0 -dqdvi1067 divideint 1e-291 1e+108 -> 0 -dqdvi1068 divideint 1e-291 1e+109 -> 0 -dqdvi1069 divideint 1e-291 1e+110 -> 0 - -dqdvi1101 divideint 1.0000E-394 1 -> 0 -dqdvi1102 divideint 1.000E-394 1e+1 -> 0 -dqdvi1103 divideint 1.00E-394 1e+2 -> 0 - -dqdvi1118 divideint 1E-394 1e+4 -> 0 -dqdvi1119 divideint 3E-394 -1e+5 -> -0 -dqdvi1120 divideint 5E-394 1e+5 -> 0 - -dqdvi1124 divideint 1E-394 -1e+4 -> -0 -dqdvi1130 divideint 3.0E-394 -1e+5 -> -0 - -dqdvi1131 divideint 1.0E-199 1e+200 -> 0 -dqdvi1132 divideint 1.0E-199 1e+199 -> 0 -dqdvi1133 divideint 1.0E-199 1e+198 -> 0 -dqdvi1134 divideint 2.0E-199 2e+198 -> 0 -dqdvi1135 divideint 4.0E-199 4e+198 -> 0 - --- long operand checks -dqdvi401 divideint 12345678000 100 -> 123456780 -dqdvi402 divideint 1 12345678000 -> 0 -dqdvi403 divideint 1234567800 10 -> 123456780 -dqdvi404 divideint 1 1234567800 -> 0 -dqdvi405 divideint 1234567890 10 -> 123456789 -dqdvi406 divideint 1 1234567890 -> 0 -dqdvi407 divideint 1234567891 10 -> 123456789 -dqdvi408 divideint 1 1234567891 -> 0 -dqdvi409 divideint 12345678901 100 -> 123456789 -dqdvi410 divideint 1 12345678901 -> 0 -dqdvi411 divideint 1234567896 10 -> 123456789 -dqdvi412 divideint 1 1234567896 -> 0 -dqdvi413 divideint 12345678948 100 -> 123456789 -dqdvi414 divideint 12345678949 100 -> 123456789 -dqdvi415 divideint 12345678950 100 -> 123456789 -dqdvi416 divideint 12345678951 100 -> 123456789 -dqdvi417 divideint 12345678999 100 -> 123456789 -dqdvi441 divideint 12345678000 1 -> 12345678000 -dqdvi442 divideint 1 12345678000 -> 0 -dqdvi443 divideint 1234567800 1 -> 1234567800 -dqdvi444 divideint 1 1234567800 -> 0 -dqdvi445 divideint 1234567890 1 -> 1234567890 -dqdvi446 divideint 1 1234567890 -> 0 -dqdvi447 divideint 1234567891 1 -> 1234567891 -dqdvi448 divideint 1 1234567891 -> 0 -dqdvi449 divideint 12345678901 1 -> 12345678901 -dqdvi450 divideint 1 12345678901 -> 0 -dqdvi451 divideint 1234567896 1 -> 1234567896 -dqdvi452 divideint 1 1234567896 -> 0 - --- more zeros, etc. -dqdvi531 divideint 5.00 1E-3 -> 5000 -dqdvi532 divideint 00.00 0.000 -> NaN Division_undefined -dqdvi533 divideint 00.00 0E-3 -> NaN Division_undefined -dqdvi534 divideint 0 -0 -> NaN Division_undefined -dqdvi535 divideint -0 0 -> NaN Division_undefined -dqdvi536 divideint -0 -0 -> NaN Division_undefined - -dqdvi541 divideint 0 -1 -> -0 -dqdvi542 divideint -0 -1 -> 0 -dqdvi543 divideint 0 1 -> 0 -dqdvi544 divideint -0 1 -> -0 -dqdvi545 divideint -1 0 -> -Infinity Division_by_zero -dqdvi546 divideint -1 -0 -> Infinity Division_by_zero -dqdvi547 divideint 1 0 -> Infinity Division_by_zero -dqdvi548 divideint 1 -0 -> -Infinity Division_by_zero - -dqdvi551 divideint 0.0 -1 -> -0 -dqdvi552 divideint -0.0 -1 -> 0 -dqdvi553 divideint 0.0 1 -> 0 -dqdvi554 divideint -0.0 1 -> -0 -dqdvi555 divideint -1.0 0 -> -Infinity Division_by_zero -dqdvi556 divideint -1.0 -0 -> Infinity Division_by_zero -dqdvi557 divideint 1.0 0 -> Infinity Division_by_zero -dqdvi558 divideint 1.0 -0 -> -Infinity Division_by_zero - -dqdvi561 divideint 0 -1.0 -> -0 -dqdvi562 divideint -0 -1.0 -> 0 -dqdvi563 divideint 0 1.0 -> 0 -dqdvi564 divideint -0 1.0 -> -0 -dqdvi565 divideint -1 0.0 -> -Infinity Division_by_zero -dqdvi566 divideint -1 -0.0 -> Infinity Division_by_zero -dqdvi567 divideint 1 0.0 -> Infinity Division_by_zero -dqdvi568 divideint 1 -0.0 -> -Infinity Division_by_zero - -dqdvi571 divideint 0.0 -1.0 -> -0 -dqdvi572 divideint -0.0 -1.0 -> 0 -dqdvi573 divideint 0.0 1.0 -> 0 -dqdvi574 divideint -0.0 1.0 -> -0 -dqdvi575 divideint -1.0 0.0 -> -Infinity Division_by_zero -dqdvi576 divideint -1.0 -0.0 -> Infinity Division_by_zero -dqdvi577 divideint 1.0 0.0 -> Infinity Division_by_zero -dqdvi578 divideint 1.0 -0.0 -> -Infinity Division_by_zero - --- Specials -dqdvi580 divideint Inf -Inf -> NaN Invalid_operation -dqdvi581 divideint Inf -1000 -> -Infinity -dqdvi582 divideint Inf -1 -> -Infinity -dqdvi583 divideint Inf -0 -> -Infinity -dqdvi584 divideint Inf 0 -> Infinity -dqdvi585 divideint Inf 1 -> Infinity -dqdvi586 divideint Inf 1000 -> Infinity -dqdvi587 divideint Inf Inf -> NaN Invalid_operation -dqdvi588 divideint -1000 Inf -> -0 -dqdvi589 divideint -Inf Inf -> NaN Invalid_operation -dqdvi590 divideint -1 Inf -> -0 -dqdvi591 divideint -0 Inf -> -0 -dqdvi592 divideint 0 Inf -> 0 -dqdvi593 divideint 1 Inf -> 0 -dqdvi594 divideint 1000 Inf -> 0 -dqdvi595 divideint Inf Inf -> NaN Invalid_operation - -dqdvi600 divideint -Inf -Inf -> NaN Invalid_operation -dqdvi601 divideint -Inf -1000 -> Infinity -dqdvi602 divideint -Inf -1 -> Infinity -dqdvi603 divideint -Inf -0 -> Infinity -dqdvi604 divideint -Inf 0 -> -Infinity -dqdvi605 divideint -Inf 1 -> -Infinity -dqdvi606 divideint -Inf 1000 -> -Infinity -dqdvi607 divideint -Inf Inf -> NaN Invalid_operation -dqdvi608 divideint -1000 Inf -> -0 -dqdvi609 divideint -Inf -Inf -> NaN Invalid_operation -dqdvi610 divideint -1 -Inf -> 0 -dqdvi611 divideint -0 -Inf -> 0 -dqdvi612 divideint 0 -Inf -> -0 -dqdvi613 divideint 1 -Inf -> -0 -dqdvi614 divideint 1000 -Inf -> -0 -dqdvi615 divideint Inf -Inf -> NaN Invalid_operation - -dqdvi621 divideint NaN -Inf -> NaN -dqdvi622 divideint NaN -1000 -> NaN -dqdvi623 divideint NaN -1 -> NaN -dqdvi624 divideint NaN -0 -> NaN -dqdvi625 divideint NaN 0 -> NaN -dqdvi626 divideint NaN 1 -> NaN -dqdvi627 divideint NaN 1000 -> NaN -dqdvi628 divideint NaN Inf -> NaN -dqdvi629 divideint NaN NaN -> NaN -dqdvi630 divideint -Inf NaN -> NaN -dqdvi631 divideint -1000 NaN -> NaN -dqdvi632 divideint -1 NaN -> NaN -dqdvi633 divideint -0 NaN -> NaN -dqdvi634 divideint 0 NaN -> NaN -dqdvi635 divideint 1 NaN -> NaN -dqdvi636 divideint 1000 NaN -> NaN -dqdvi637 divideint Inf NaN -> NaN - -dqdvi641 divideint sNaN -Inf -> NaN Invalid_operation -dqdvi642 divideint sNaN -1000 -> NaN Invalid_operation -dqdvi643 divideint sNaN -1 -> NaN Invalid_operation -dqdvi644 divideint sNaN -0 -> NaN Invalid_operation -dqdvi645 divideint sNaN 0 -> NaN Invalid_operation -dqdvi646 divideint sNaN 1 -> NaN Invalid_operation -dqdvi647 divideint sNaN 1000 -> NaN Invalid_operation -dqdvi648 divideint sNaN NaN -> NaN Invalid_operation -dqdvi649 divideint sNaN sNaN -> NaN Invalid_operation -dqdvi650 divideint NaN sNaN -> NaN Invalid_operation -dqdvi651 divideint -Inf sNaN -> NaN Invalid_operation -dqdvi652 divideint -1000 sNaN -> NaN Invalid_operation -dqdvi653 divideint -1 sNaN -> NaN Invalid_operation -dqdvi654 divideint -0 sNaN -> NaN Invalid_operation -dqdvi655 divideint 0 sNaN -> NaN Invalid_operation -dqdvi656 divideint 1 sNaN -> NaN Invalid_operation -dqdvi657 divideint 1000 sNaN -> NaN Invalid_operation -dqdvi658 divideint Inf sNaN -> NaN Invalid_operation -dqdvi659 divideint NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqdvi661 divideint NaN9 -Inf -> NaN9 -dqdvi662 divideint NaN8 1000 -> NaN8 -dqdvi663 divideint NaN7 Inf -> NaN7 -dqdvi664 divideint -NaN6 NaN5 -> -NaN6 -dqdvi665 divideint -Inf NaN4 -> NaN4 -dqdvi666 divideint -1000 NaN3 -> NaN3 -dqdvi667 divideint Inf -NaN2 -> -NaN2 - -dqdvi671 divideint -sNaN99 -Inf -> -NaN99 Invalid_operation -dqdvi672 divideint sNaN98 -1 -> NaN98 Invalid_operation -dqdvi673 divideint sNaN97 NaN -> NaN97 Invalid_operation -dqdvi674 divideint sNaN96 sNaN94 -> NaN96 Invalid_operation -dqdvi675 divideint NaN95 sNaN93 -> NaN93 Invalid_operation -dqdvi676 divideint -Inf sNaN92 -> NaN92 Invalid_operation -dqdvi677 divideint 0 sNaN91 -> NaN91 Invalid_operation -dqdvi678 divideint Inf -sNaN90 -> -NaN90 Invalid_operation -dqdvi679 divideint NaN sNaN89 -> NaN89 Invalid_operation - --- Gyuris example -dqdvi700 divideint 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 0 - --- Null tests -dqdvi900 divideint 10 # -> NaN Invalid_operation -dqdvi901 divideint # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqDivideInt.decTest -- decQuad integer division -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + + +dqdvi001 divideint 1 1 -> 1 +dqdvi002 divideint 2 1 -> 2 +dqdvi003 divideint 1 2 -> 0 +dqdvi004 divideint 2 2 -> 1 +dqdvi005 divideint 0 1 -> 0 +dqdvi006 divideint 0 2 -> 0 +dqdvi007 divideint 1 3 -> 0 +dqdvi008 divideint 2 3 -> 0 +dqdvi009 divideint 3 3 -> 1 + +dqdvi010 divideint 2.4 1 -> 2 +dqdvi011 divideint 2.4 -1 -> -2 +dqdvi012 divideint -2.4 1 -> -2 +dqdvi013 divideint -2.4 -1 -> 2 +dqdvi014 divideint 2.40 1 -> 2 +dqdvi015 divideint 2.400 1 -> 2 +dqdvi016 divideint 2.4 2 -> 1 +dqdvi017 divideint 2.400 2 -> 1 +dqdvi018 divideint 2. 2 -> 1 +dqdvi019 divideint 20 20 -> 1 + +dqdvi020 divideint 187 187 -> 1 +dqdvi021 divideint 5 2 -> 2 +dqdvi022 divideint 5 2.0 -> 2 +dqdvi023 divideint 5 2.000 -> 2 +dqdvi024 divideint 5 0.200 -> 25 +dqdvi025 divideint 5 0.200 -> 25 + +dqdvi030 divideint 1 2 -> 0 +dqdvi031 divideint 1 4 -> 0 +dqdvi032 divideint 1 8 -> 0 +dqdvi033 divideint 1 16 -> 0 +dqdvi034 divideint 1 32 -> 0 +dqdvi035 divideint 1 64 -> 0 +dqdvi040 divideint 1 -2 -> -0 +dqdvi041 divideint 1 -4 -> -0 +dqdvi042 divideint 1 -8 -> -0 +dqdvi043 divideint 1 -16 -> -0 +dqdvi044 divideint 1 -32 -> -0 +dqdvi045 divideint 1 -64 -> -0 +dqdvi050 divideint -1 2 -> -0 +dqdvi051 divideint -1 4 -> -0 +dqdvi052 divideint -1 8 -> -0 +dqdvi053 divideint -1 16 -> -0 +dqdvi054 divideint -1 32 -> -0 +dqdvi055 divideint -1 64 -> -0 +dqdvi060 divideint -1 -2 -> 0 +dqdvi061 divideint -1 -4 -> 0 +dqdvi062 divideint -1 -8 -> 0 +dqdvi063 divideint -1 -16 -> 0 +dqdvi064 divideint -1 -32 -> 0 +dqdvi065 divideint -1 -64 -> 0 + +-- similar with powers of ten +dqdvi160 divideint 1 1 -> 1 +dqdvi161 divideint 1 10 -> 0 +dqdvi162 divideint 1 100 -> 0 +dqdvi163 divideint 1 1000 -> 0 +dqdvi164 divideint 1 10000 -> 0 +dqdvi165 divideint 1 100000 -> 0 +dqdvi166 divideint 1 1000000 -> 0 +dqdvi167 divideint 1 10000000 -> 0 +dqdvi168 divideint 1 100000000 -> 0 +dqdvi170 divideint 1 -1 -> -1 +dqdvi171 divideint 1 -10 -> -0 +dqdvi172 divideint 1 -100 -> -0 +dqdvi173 divideint 1 -1000 -> -0 +dqdvi174 divideint 1 -10000 -> -0 +dqdvi175 divideint 1 -100000 -> -0 +dqdvi176 divideint 1 -1000000 -> -0 +dqdvi177 divideint 1 -10000000 -> -0 +dqdvi178 divideint 1 -100000000 -> -0 +dqdvi180 divideint -1 1 -> -1 +dqdvi181 divideint -1 10 -> -0 +dqdvi182 divideint -1 100 -> -0 +dqdvi183 divideint -1 1000 -> -0 +dqdvi184 divideint -1 10000 -> -0 +dqdvi185 divideint -1 100000 -> -0 +dqdvi186 divideint -1 1000000 -> -0 +dqdvi187 divideint -1 10000000 -> -0 +dqdvi188 divideint -1 100000000 -> -0 +dqdvi190 divideint -1 -1 -> 1 +dqdvi191 divideint -1 -10 -> 0 +dqdvi192 divideint -1 -100 -> 0 +dqdvi193 divideint -1 -1000 -> 0 +dqdvi194 divideint -1 -10000 -> 0 +dqdvi195 divideint -1 -100000 -> 0 +dqdvi196 divideint -1 -1000000 -> 0 +dqdvi197 divideint -1 -10000000 -> 0 +dqdvi198 divideint -1 -100000000 -> 0 + +-- some long operand (at p=9) cases +dqdvi070 divideint 999999999 1 -> 999999999 +dqdvi071 divideint 999999999.4 1 -> 999999999 +dqdvi072 divideint 999999999.5 1 -> 999999999 +dqdvi073 divideint 999999999.9 1 -> 999999999 +dqdvi074 divideint 999999999.999 1 -> 999999999 + +dqdvi090 divideint 0. 1 -> 0 +dqdvi091 divideint .0 1 -> 0 +dqdvi092 divideint 0.00 1 -> 0 +dqdvi093 divideint 0.00E+9 1 -> 0 +dqdvi094 divideint 0.0000E-50 1 -> 0 + +dqdvi100 divideint 1 1 -> 1 +dqdvi101 divideint 1 2 -> 0 +dqdvi102 divideint 1 3 -> 0 +dqdvi103 divideint 1 4 -> 0 +dqdvi104 divideint 1 5 -> 0 +dqdvi105 divideint 1 6 -> 0 +dqdvi106 divideint 1 7 -> 0 +dqdvi107 divideint 1 8 -> 0 +dqdvi108 divideint 1 9 -> 0 +dqdvi109 divideint 1 10 -> 0 +dqdvi110 divideint 1 1 -> 1 +dqdvi111 divideint 2 1 -> 2 +dqdvi112 divideint 3 1 -> 3 +dqdvi113 divideint 4 1 -> 4 +dqdvi114 divideint 5 1 -> 5 +dqdvi115 divideint 6 1 -> 6 +dqdvi116 divideint 7 1 -> 7 +dqdvi117 divideint 8 1 -> 8 +dqdvi118 divideint 9 1 -> 9 +dqdvi119 divideint 10 1 -> 10 + +-- from DiagBigDecimal +dqdvi131 divideint 101.3 1 -> 101 +dqdvi132 divideint 101.0 1 -> 101 +dqdvi133 divideint 101.3 3 -> 33 +dqdvi134 divideint 101.0 3 -> 33 +dqdvi135 divideint 2.4 1 -> 2 +dqdvi136 divideint 2.400 1 -> 2 +dqdvi137 divideint 18 18 -> 1 +dqdvi138 divideint 1120 1000 -> 1 +dqdvi139 divideint 2.4 2 -> 1 +dqdvi140 divideint 2.400 2 -> 1 +dqdvi141 divideint 0.5 2.000 -> 0 +dqdvi142 divideint 8.005 7 -> 1 +dqdvi143 divideint 5 2 -> 2 +dqdvi144 divideint 0 2 -> 0 +dqdvi145 divideint 0.00 2 -> 0 + +-- Others +dqdvi150 divideint 12345 4.999 -> 2469 +dqdvi151 divideint 12345 4.99 -> 2473 +dqdvi152 divideint 12345 4.9 -> 2519 +dqdvi153 divideint 12345 5 -> 2469 +dqdvi154 divideint 12345 5.1 -> 2420 +dqdvi155 divideint 12345 5.01 -> 2464 +dqdvi156 divideint 12345 5.001 -> 2468 +dqdvi157 divideint 101 7.6 -> 13 + +-- Various flavours of divideint by 0 +dqdvi201 divideint 0 0 -> NaN Division_undefined +dqdvi202 divideint 0.0E5 0 -> NaN Division_undefined +dqdvi203 divideint 0.000 0 -> NaN Division_undefined +dqdvi204 divideint 0.0001 0 -> Infinity Division_by_zero +dqdvi205 divideint 0.01 0 -> Infinity Division_by_zero +dqdvi206 divideint 0.1 0 -> Infinity Division_by_zero +dqdvi207 divideint 1 0 -> Infinity Division_by_zero +dqdvi208 divideint 1 0.0 -> Infinity Division_by_zero +dqdvi209 divideint 10 0.0 -> Infinity Division_by_zero +dqdvi210 divideint 1E+100 0.0 -> Infinity Division_by_zero +dqdvi211 divideint 1E+380 0 -> Infinity Division_by_zero +dqdvi214 divideint -0.0001 0 -> -Infinity Division_by_zero +dqdvi215 divideint -0.01 0 -> -Infinity Division_by_zero +dqdvi216 divideint -0.1 0 -> -Infinity Division_by_zero +dqdvi217 divideint -1 0 -> -Infinity Division_by_zero +dqdvi218 divideint -1 0.0 -> -Infinity Division_by_zero +dqdvi219 divideint -10 0.0 -> -Infinity Division_by_zero +dqdvi220 divideint -1E+100 0.0 -> -Infinity Division_by_zero +dqdvi221 divideint -1E+380 0 -> -Infinity Division_by_zero + +-- test some cases that are close to exponent overflow +dqdvi270 divideint 1 1e384 -> 0 +dqdvi271 divideint 1 0.9e384 -> 0 +dqdvi272 divideint 1 0.99e384 -> 0 +dqdvi273 divideint 1 0.9999999999999999e384 -> 0 +dqdvi274 divideint 9e384 1 -> NaN Division_impossible +dqdvi275 divideint 9.9e384 1 -> NaN Division_impossible +dqdvi276 divideint 9.99e384 1 -> NaN Division_impossible +dqdvi277 divideint 9.999999999999999e384 1 -> NaN Division_impossible + +dqdvi280 divideint 0.1 9e-383 -> NaN Division_impossible +dqdvi281 divideint 0.1 99e-383 -> NaN Division_impossible +dqdvi282 divideint 0.1 999e-383 -> NaN Division_impossible +dqdvi283 divideint 0.1 9e-382 -> NaN Division_impossible +dqdvi284 divideint 0.1 99e-382 -> NaN Division_impossible + +-- GD edge cases: lhs smaller than rhs but more digits +dqdvi301 divideint 0.9 2 -> 0 +dqdvi302 divideint 0.9 2.0 -> 0 +dqdvi303 divideint 0.9 2.1 -> 0 +dqdvi304 divideint 0.9 2.00 -> 0 +dqdvi305 divideint 0.9 2.01 -> 0 +dqdvi306 divideint 0.12 1 -> 0 +dqdvi307 divideint 0.12 1.0 -> 0 +dqdvi308 divideint 0.12 1.00 -> 0 +dqdvi309 divideint 0.12 1.0 -> 0 +dqdvi310 divideint 0.12 1.00 -> 0 +dqdvi311 divideint 0.12 2 -> 0 +dqdvi312 divideint 0.12 2.0 -> 0 +dqdvi313 divideint 0.12 2.1 -> 0 +dqdvi314 divideint 0.12 2.00 -> 0 +dqdvi315 divideint 0.12 2.01 -> 0 + +-- edge cases of impossible +dqdvi330 divideint 1234567987654321987654321890123456 10 -> 123456798765432198765432189012345 +dqdvi331 divideint 1234567987654321987654321890123456 1 -> 1234567987654321987654321890123456 +dqdvi332 divideint 1234567987654321987654321890123456 0.1 -> NaN Division_impossible +dqdvi333 divideint 1234567987654321987654321890123456 0.01 -> NaN Division_impossible + +-- overflow and underflow tests [from divide] +dqdvi1051 divideint 1e+277 1e-311 -> NaN Division_impossible +dqdvi1052 divideint 1e+277 -1e-311 -> NaN Division_impossible +dqdvi1053 divideint -1e+277 1e-311 -> NaN Division_impossible +dqdvi1054 divideint -1e+277 -1e-311 -> NaN Division_impossible +dqdvi1055 divideint 1e-277 1e+311 -> 0 +dqdvi1056 divideint 1e-277 -1e+311 -> -0 +dqdvi1057 divideint -1e-277 1e+311 -> -0 +dqdvi1058 divideint -1e-277 -1e+311 -> 0 + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dqdvi1060 divideint 1e-291 1e+101 -> 0 +dqdvi1061 divideint 1e-291 1e+102 -> 0 +dqdvi1062 divideint 1e-291 1e+103 -> 0 +dqdvi1063 divideint 1e-291 1e+104 -> 0 +dqdvi1064 divideint 1e-291 1e+105 -> 0 +dqdvi1065 divideint 1e-291 1e+106 -> 0 +dqdvi1066 divideint 1e-291 1e+107 -> 0 +dqdvi1067 divideint 1e-291 1e+108 -> 0 +dqdvi1068 divideint 1e-291 1e+109 -> 0 +dqdvi1069 divideint 1e-291 1e+110 -> 0 + +dqdvi1101 divideint 1.0000E-394 1 -> 0 +dqdvi1102 divideint 1.000E-394 1e+1 -> 0 +dqdvi1103 divideint 1.00E-394 1e+2 -> 0 + +dqdvi1118 divideint 1E-394 1e+4 -> 0 +dqdvi1119 divideint 3E-394 -1e+5 -> -0 +dqdvi1120 divideint 5E-394 1e+5 -> 0 + +dqdvi1124 divideint 1E-394 -1e+4 -> -0 +dqdvi1130 divideint 3.0E-394 -1e+5 -> -0 + +dqdvi1131 divideint 1.0E-199 1e+200 -> 0 +dqdvi1132 divideint 1.0E-199 1e+199 -> 0 +dqdvi1133 divideint 1.0E-199 1e+198 -> 0 +dqdvi1134 divideint 2.0E-199 2e+198 -> 0 +dqdvi1135 divideint 4.0E-199 4e+198 -> 0 + +-- long operand checks +dqdvi401 divideint 12345678000 100 -> 123456780 +dqdvi402 divideint 1 12345678000 -> 0 +dqdvi403 divideint 1234567800 10 -> 123456780 +dqdvi404 divideint 1 1234567800 -> 0 +dqdvi405 divideint 1234567890 10 -> 123456789 +dqdvi406 divideint 1 1234567890 -> 0 +dqdvi407 divideint 1234567891 10 -> 123456789 +dqdvi408 divideint 1 1234567891 -> 0 +dqdvi409 divideint 12345678901 100 -> 123456789 +dqdvi410 divideint 1 12345678901 -> 0 +dqdvi411 divideint 1234567896 10 -> 123456789 +dqdvi412 divideint 1 1234567896 -> 0 +dqdvi413 divideint 12345678948 100 -> 123456789 +dqdvi414 divideint 12345678949 100 -> 123456789 +dqdvi415 divideint 12345678950 100 -> 123456789 +dqdvi416 divideint 12345678951 100 -> 123456789 +dqdvi417 divideint 12345678999 100 -> 123456789 +dqdvi441 divideint 12345678000 1 -> 12345678000 +dqdvi442 divideint 1 12345678000 -> 0 +dqdvi443 divideint 1234567800 1 -> 1234567800 +dqdvi444 divideint 1 1234567800 -> 0 +dqdvi445 divideint 1234567890 1 -> 1234567890 +dqdvi446 divideint 1 1234567890 -> 0 +dqdvi447 divideint 1234567891 1 -> 1234567891 +dqdvi448 divideint 1 1234567891 -> 0 +dqdvi449 divideint 12345678901 1 -> 12345678901 +dqdvi450 divideint 1 12345678901 -> 0 +dqdvi451 divideint 1234567896 1 -> 1234567896 +dqdvi452 divideint 1 1234567896 -> 0 + +-- more zeros, etc. +dqdvi531 divideint 5.00 1E-3 -> 5000 +dqdvi532 divideint 00.00 0.000 -> NaN Division_undefined +dqdvi533 divideint 00.00 0E-3 -> NaN Division_undefined +dqdvi534 divideint 0 -0 -> NaN Division_undefined +dqdvi535 divideint -0 0 -> NaN Division_undefined +dqdvi536 divideint -0 -0 -> NaN Division_undefined + +dqdvi541 divideint 0 -1 -> -0 +dqdvi542 divideint -0 -1 -> 0 +dqdvi543 divideint 0 1 -> 0 +dqdvi544 divideint -0 1 -> -0 +dqdvi545 divideint -1 0 -> -Infinity Division_by_zero +dqdvi546 divideint -1 -0 -> Infinity Division_by_zero +dqdvi547 divideint 1 0 -> Infinity Division_by_zero +dqdvi548 divideint 1 -0 -> -Infinity Division_by_zero + +dqdvi551 divideint 0.0 -1 -> -0 +dqdvi552 divideint -0.0 -1 -> 0 +dqdvi553 divideint 0.0 1 -> 0 +dqdvi554 divideint -0.0 1 -> -0 +dqdvi555 divideint -1.0 0 -> -Infinity Division_by_zero +dqdvi556 divideint -1.0 -0 -> Infinity Division_by_zero +dqdvi557 divideint 1.0 0 -> Infinity Division_by_zero +dqdvi558 divideint 1.0 -0 -> -Infinity Division_by_zero + +dqdvi561 divideint 0 -1.0 -> -0 +dqdvi562 divideint -0 -1.0 -> 0 +dqdvi563 divideint 0 1.0 -> 0 +dqdvi564 divideint -0 1.0 -> -0 +dqdvi565 divideint -1 0.0 -> -Infinity Division_by_zero +dqdvi566 divideint -1 -0.0 -> Infinity Division_by_zero +dqdvi567 divideint 1 0.0 -> Infinity Division_by_zero +dqdvi568 divideint 1 -0.0 -> -Infinity Division_by_zero + +dqdvi571 divideint 0.0 -1.0 -> -0 +dqdvi572 divideint -0.0 -1.0 -> 0 +dqdvi573 divideint 0.0 1.0 -> 0 +dqdvi574 divideint -0.0 1.0 -> -0 +dqdvi575 divideint -1.0 0.0 -> -Infinity Division_by_zero +dqdvi576 divideint -1.0 -0.0 -> Infinity Division_by_zero +dqdvi577 divideint 1.0 0.0 -> Infinity Division_by_zero +dqdvi578 divideint 1.0 -0.0 -> -Infinity Division_by_zero + +-- Specials +dqdvi580 divideint Inf -Inf -> NaN Invalid_operation +dqdvi581 divideint Inf -1000 -> -Infinity +dqdvi582 divideint Inf -1 -> -Infinity +dqdvi583 divideint Inf -0 -> -Infinity +dqdvi584 divideint Inf 0 -> Infinity +dqdvi585 divideint Inf 1 -> Infinity +dqdvi586 divideint Inf 1000 -> Infinity +dqdvi587 divideint Inf Inf -> NaN Invalid_operation +dqdvi588 divideint -1000 Inf -> -0 +dqdvi589 divideint -Inf Inf -> NaN Invalid_operation +dqdvi590 divideint -1 Inf -> -0 +dqdvi591 divideint -0 Inf -> -0 +dqdvi592 divideint 0 Inf -> 0 +dqdvi593 divideint 1 Inf -> 0 +dqdvi594 divideint 1000 Inf -> 0 +dqdvi595 divideint Inf Inf -> NaN Invalid_operation + +dqdvi600 divideint -Inf -Inf -> NaN Invalid_operation +dqdvi601 divideint -Inf -1000 -> Infinity +dqdvi602 divideint -Inf -1 -> Infinity +dqdvi603 divideint -Inf -0 -> Infinity +dqdvi604 divideint -Inf 0 -> -Infinity +dqdvi605 divideint -Inf 1 -> -Infinity +dqdvi606 divideint -Inf 1000 -> -Infinity +dqdvi607 divideint -Inf Inf -> NaN Invalid_operation +dqdvi608 divideint -1000 Inf -> -0 +dqdvi609 divideint -Inf -Inf -> NaN Invalid_operation +dqdvi610 divideint -1 -Inf -> 0 +dqdvi611 divideint -0 -Inf -> 0 +dqdvi612 divideint 0 -Inf -> -0 +dqdvi613 divideint 1 -Inf -> -0 +dqdvi614 divideint 1000 -Inf -> -0 +dqdvi615 divideint Inf -Inf -> NaN Invalid_operation + +dqdvi621 divideint NaN -Inf -> NaN +dqdvi622 divideint NaN -1000 -> NaN +dqdvi623 divideint NaN -1 -> NaN +dqdvi624 divideint NaN -0 -> NaN +dqdvi625 divideint NaN 0 -> NaN +dqdvi626 divideint NaN 1 -> NaN +dqdvi627 divideint NaN 1000 -> NaN +dqdvi628 divideint NaN Inf -> NaN +dqdvi629 divideint NaN NaN -> NaN +dqdvi630 divideint -Inf NaN -> NaN +dqdvi631 divideint -1000 NaN -> NaN +dqdvi632 divideint -1 NaN -> NaN +dqdvi633 divideint -0 NaN -> NaN +dqdvi634 divideint 0 NaN -> NaN +dqdvi635 divideint 1 NaN -> NaN +dqdvi636 divideint 1000 NaN -> NaN +dqdvi637 divideint Inf NaN -> NaN + +dqdvi641 divideint sNaN -Inf -> NaN Invalid_operation +dqdvi642 divideint sNaN -1000 -> NaN Invalid_operation +dqdvi643 divideint sNaN -1 -> NaN Invalid_operation +dqdvi644 divideint sNaN -0 -> NaN Invalid_operation +dqdvi645 divideint sNaN 0 -> NaN Invalid_operation +dqdvi646 divideint sNaN 1 -> NaN Invalid_operation +dqdvi647 divideint sNaN 1000 -> NaN Invalid_operation +dqdvi648 divideint sNaN NaN -> NaN Invalid_operation +dqdvi649 divideint sNaN sNaN -> NaN Invalid_operation +dqdvi650 divideint NaN sNaN -> NaN Invalid_operation +dqdvi651 divideint -Inf sNaN -> NaN Invalid_operation +dqdvi652 divideint -1000 sNaN -> NaN Invalid_operation +dqdvi653 divideint -1 sNaN -> NaN Invalid_operation +dqdvi654 divideint -0 sNaN -> NaN Invalid_operation +dqdvi655 divideint 0 sNaN -> NaN Invalid_operation +dqdvi656 divideint 1 sNaN -> NaN Invalid_operation +dqdvi657 divideint 1000 sNaN -> NaN Invalid_operation +dqdvi658 divideint Inf sNaN -> NaN Invalid_operation +dqdvi659 divideint NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqdvi661 divideint NaN9 -Inf -> NaN9 +dqdvi662 divideint NaN8 1000 -> NaN8 +dqdvi663 divideint NaN7 Inf -> NaN7 +dqdvi664 divideint -NaN6 NaN5 -> -NaN6 +dqdvi665 divideint -Inf NaN4 -> NaN4 +dqdvi666 divideint -1000 NaN3 -> NaN3 +dqdvi667 divideint Inf -NaN2 -> -NaN2 + +dqdvi671 divideint -sNaN99 -Inf -> -NaN99 Invalid_operation +dqdvi672 divideint sNaN98 -1 -> NaN98 Invalid_operation +dqdvi673 divideint sNaN97 NaN -> NaN97 Invalid_operation +dqdvi674 divideint sNaN96 sNaN94 -> NaN96 Invalid_operation +dqdvi675 divideint NaN95 sNaN93 -> NaN93 Invalid_operation +dqdvi676 divideint -Inf sNaN92 -> NaN92 Invalid_operation +dqdvi677 divideint 0 sNaN91 -> NaN91 Invalid_operation +dqdvi678 divideint Inf -sNaN90 -> -NaN90 Invalid_operation +dqdvi679 divideint NaN sNaN89 -> NaN89 Invalid_operation + +-- Gyuris example +dqdvi700 divideint 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 0 + +-- Null tests +dqdvi900 divideint 10 # -> NaN Invalid_operation +dqdvi901 divideint # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqEncode.decTest b/Lib/test/decimaltestdata/dqEncode.decTest index 8c5d7b9b303..49edf5b2805 100644 --- a/Lib/test/decimaltestdata/dqEncode.decTest +++ b/Lib/test/decimaltestdata/dqEncode.decTest @@ -1,477 +1,477 @@ ------------------------------------------------------------------------- --- dqEncode.decTest -- decimal sixteen-byte format testcases -- --- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- --- [Previously called decimal128.decTest] -version: 2.59 - --- This set of tests is for the sixteen-byte concrete representation. --- Its characteristics are: --- --- 1 bit sign --- 5 bits combination field --- 12 bits exponent continuation --- 110 bits coefficient continuation --- --- Total exponent length 14 bits --- Total coefficient length 114 bits (34 digits) --- --- Elimit = 12287 (maximum encoded exponent) --- Emax = 6144 (largest exponent value) --- Emin = -6143 (smallest exponent value) --- bias = 6176 (subtracted from encoded exponent) = -Etiny - --- The testcases here have only exactly representable data on the --- 'left-hand-side'; rounding from strings is tested in 'base' --- testcase groups. - -extended: 1 -clamp: 1 -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 - --- General testcases --- (mostly derived from the Strawman 4 document and examples) -decq001 apply #A20780000000000000000000000003D0 -> -7.50 -decq002 apply -7.50 -> #A20780000000000000000000000003D0 --- derivative canonical plain strings -decq003 apply #A20840000000000000000000000003D0 -> -7.50E+3 -decq004 apply -7.50E+3 -> #A20840000000000000000000000003D0 -decq005 apply #A20800000000000000000000000003D0 -> -750 -decq006 apply -750 -> #A20800000000000000000000000003D0 -decq007 apply #A207c0000000000000000000000003D0 -> -75.0 -decq008 apply -75.0 -> #A207c0000000000000000000000003D0 -decq009 apply #A20740000000000000000000000003D0 -> -0.750 -decq010 apply -0.750 -> #A20740000000000000000000000003D0 -decq011 apply #A20700000000000000000000000003D0 -> -0.0750 -decq012 apply -0.0750 -> #A20700000000000000000000000003D0 -decq013 apply #A20680000000000000000000000003D0 -> -0.000750 -decq014 apply -0.000750 -> #A20680000000000000000000000003D0 -decq015 apply #A20600000000000000000000000003D0 -> -0.00000750 -decq016 apply -0.00000750 -> #A20600000000000000000000000003D0 -decq017 apply #A205c0000000000000000000000003D0 -> -7.50E-7 -decq018 apply -7.50E-7 -> #A205c0000000000000000000000003D0 - --- Normality -decq020 apply 1234567890123456789012345678901234 -> #2608134b9c1e28e56f3c127177823534 -decq021 apply -1234567890123456789012345678901234 -> #a608134b9c1e28e56f3c127177823534 -decq022 apply 1111111111111111111111111111111111 -> #26080912449124491244912449124491 - --- Nmax and similar -decq031 apply 9.999999999999999999999999999999999E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff -decq032 apply #77ffcff3fcff3fcff3fcff3fcff3fcff -> 9.999999999999999999999999999999999E+6144 -decq033 apply 1.234567890123456789012345678901234E+6144 -> #47ffd34b9c1e28e56f3c127177823534 -decq034 apply #47ffd34b9c1e28e56f3c127177823534 -> 1.234567890123456789012345678901234E+6144 --- fold-downs (more below) -decq035 apply 1.23E+6144 -> #47ffd300000000000000000000000000 Clamped -decq036 apply #47ffd300000000000000000000000000 -> 1.230000000000000000000000000000000E+6144 -decq037 apply 1E+6144 -> #47ffc000000000000000000000000000 Clamped -decq038 apply #47ffc000000000000000000000000000 -> 1.000000000000000000000000000000000E+6144 - -decq051 apply 12345 -> #220800000000000000000000000049c5 -decq052 apply #220800000000000000000000000049c5 -> 12345 -decq053 apply 1234 -> #22080000000000000000000000000534 -decq054 apply #22080000000000000000000000000534 -> 1234 -decq055 apply 123 -> #220800000000000000000000000000a3 -decq056 apply #220800000000000000000000000000a3 -> 123 -decq057 apply 12 -> #22080000000000000000000000000012 -decq058 apply #22080000000000000000000000000012 -> 12 -decq059 apply 1 -> #22080000000000000000000000000001 -decq060 apply #22080000000000000000000000000001 -> 1 -decq061 apply 1.23 -> #220780000000000000000000000000a3 -decq062 apply #220780000000000000000000000000a3 -> 1.23 -decq063 apply 123.45 -> #220780000000000000000000000049c5 -decq064 apply #220780000000000000000000000049c5 -> 123.45 - --- Nmin and below -decq071 apply 1E-6143 -> #00084000000000000000000000000001 -decq072 apply #00084000000000000000000000000001 -> 1E-6143 -decq073 apply 1.000000000000000000000000000000000E-6143 -> #04000000000000000000000000000000 -decq074 apply #04000000000000000000000000000000 -> 1.000000000000000000000000000000000E-6143 -decq075 apply 1.000000000000000000000000000000001E-6143 -> #04000000000000000000000000000001 -decq076 apply #04000000000000000000000000000001 -> 1.000000000000000000000000000000001E-6143 - -decq077 apply 0.100000000000000000000000000000000E-6143 -> #00000800000000000000000000000000 Subnormal -decq078 apply #00000800000000000000000000000000 -> 1.00000000000000000000000000000000E-6144 Subnormal -decq079 apply 0.000000000000000000000000000000010E-6143 -> #00000000000000000000000000000010 Subnormal -decq080 apply #00000000000000000000000000000010 -> 1.0E-6175 Subnormal -decq081 apply 0.00000000000000000000000000000001E-6143 -> #00004000000000000000000000000001 Subnormal -decq082 apply #00004000000000000000000000000001 -> 1E-6175 Subnormal -decq083 apply 0.000000000000000000000000000000001E-6143 -> #00000000000000000000000000000001 Subnormal -decq084 apply #00000000000000000000000000000001 -> 1E-6176 Subnormal - --- underflows cannot be tested for simple copies, check edge cases -decq090 apply 1e-6176 -> #00000000000000000000000000000001 Subnormal -decq100 apply 999999999999999999999999999999999e-6176 -> #00000ff3fcff3fcff3fcff3fcff3fcff Subnormal - --- same again, negatives --- Nmax and similar -decq122 apply -9.999999999999999999999999999999999E+6144 -> #f7ffcff3fcff3fcff3fcff3fcff3fcff -decq123 apply #f7ffcff3fcff3fcff3fcff3fcff3fcff -> -9.999999999999999999999999999999999E+6144 -decq124 apply -1.234567890123456789012345678901234E+6144 -> #c7ffd34b9c1e28e56f3c127177823534 -decq125 apply #c7ffd34b9c1e28e56f3c127177823534 -> -1.234567890123456789012345678901234E+6144 --- fold-downs (more below) -decq130 apply -1.23E+6144 -> #c7ffd300000000000000000000000000 Clamped -decq131 apply #c7ffd300000000000000000000000000 -> -1.230000000000000000000000000000000E+6144 -decq132 apply -1E+6144 -> #c7ffc000000000000000000000000000 Clamped -decq133 apply #c7ffc000000000000000000000000000 -> -1.000000000000000000000000000000000E+6144 - -decq151 apply -12345 -> #a20800000000000000000000000049c5 -decq152 apply #a20800000000000000000000000049c5 -> -12345 -decq153 apply -1234 -> #a2080000000000000000000000000534 -decq154 apply #a2080000000000000000000000000534 -> -1234 -decq155 apply -123 -> #a20800000000000000000000000000a3 -decq156 apply #a20800000000000000000000000000a3 -> -123 -decq157 apply -12 -> #a2080000000000000000000000000012 -decq158 apply #a2080000000000000000000000000012 -> -12 -decq159 apply -1 -> #a2080000000000000000000000000001 -decq160 apply #a2080000000000000000000000000001 -> -1 -decq161 apply -1.23 -> #a20780000000000000000000000000a3 -decq162 apply #a20780000000000000000000000000a3 -> -1.23 -decq163 apply -123.45 -> #a20780000000000000000000000049c5 -decq164 apply #a20780000000000000000000000049c5 -> -123.45 - --- Nmin and below -decq171 apply -1E-6143 -> #80084000000000000000000000000001 -decq172 apply #80084000000000000000000000000001 -> -1E-6143 -decq173 apply -1.000000000000000000000000000000000E-6143 -> #84000000000000000000000000000000 -decq174 apply #84000000000000000000000000000000 -> -1.000000000000000000000000000000000E-6143 -decq175 apply -1.000000000000000000000000000000001E-6143 -> #84000000000000000000000000000001 -decq176 apply #84000000000000000000000000000001 -> -1.000000000000000000000000000000001E-6143 - -decq177 apply -0.100000000000000000000000000000000E-6143 -> #80000800000000000000000000000000 Subnormal -decq178 apply #80000800000000000000000000000000 -> -1.00000000000000000000000000000000E-6144 Subnormal -decq179 apply -0.000000000000000000000000000000010E-6143 -> #80000000000000000000000000000010 Subnormal -decq180 apply #80000000000000000000000000000010 -> -1.0E-6175 Subnormal -decq181 apply -0.00000000000000000000000000000001E-6143 -> #80004000000000000000000000000001 Subnormal -decq182 apply #80004000000000000000000000000001 -> -1E-6175 Subnormal -decq183 apply -0.000000000000000000000000000000001E-6143 -> #80000000000000000000000000000001 Subnormal -decq184 apply #80000000000000000000000000000001 -> -1E-6176 Subnormal - --- underflow edge cases -decq190 apply -1e-6176 -> #80000000000000000000000000000001 Subnormal -decq200 apply -999999999999999999999999999999999e-6176 -> #80000ff3fcff3fcff3fcff3fcff3fcff Subnormal - --- zeros -decq400 apply 0E-8000 -> #00000000000000000000000000000000 Clamped -decq401 apply 0E-6177 -> #00000000000000000000000000000000 Clamped -decq402 apply 0E-6176 -> #00000000000000000000000000000000 -decq403 apply #00000000000000000000000000000000 -> 0E-6176 -decq404 apply 0.000000000000000000000000000000000E-6143 -> #00000000000000000000000000000000 -decq405 apply #00000000000000000000000000000000 -> 0E-6176 -decq406 apply 0E-2 -> #22078000000000000000000000000000 -decq407 apply #22078000000000000000000000000000 -> 0.00 -decq408 apply 0 -> #22080000000000000000000000000000 -decq409 apply #22080000000000000000000000000000 -> 0 -decq410 apply 0E+3 -> #2208c000000000000000000000000000 -decq411 apply #2208c000000000000000000000000000 -> 0E+3 -decq412 apply 0E+6111 -> #43ffc000000000000000000000000000 -decq413 apply #43ffc000000000000000000000000000 -> 0E+6111 --- clamped zeros... -decq414 apply 0E+6112 -> #43ffc000000000000000000000000000 Clamped -decq415 apply #43ffc000000000000000000000000000 -> 0E+6111 -decq416 apply 0E+6144 -> #43ffc000000000000000000000000000 Clamped -decq417 apply #43ffc000000000000000000000000000 -> 0E+6111 -decq418 apply 0E+8000 -> #43ffc000000000000000000000000000 Clamped -decq419 apply #43ffc000000000000000000000000000 -> 0E+6111 - --- negative zeros -decq420 apply -0E-8000 -> #80000000000000000000000000000000 Clamped -decq421 apply -0E-6177 -> #80000000000000000000000000000000 Clamped -decq422 apply -0E-6176 -> #80000000000000000000000000000000 -decq423 apply #80000000000000000000000000000000 -> -0E-6176 -decq424 apply -0.000000000000000000000000000000000E-6143 -> #80000000000000000000000000000000 -decq425 apply #80000000000000000000000000000000 -> -0E-6176 -decq426 apply -0E-2 -> #a2078000000000000000000000000000 -decq427 apply #a2078000000000000000000000000000 -> -0.00 -decq428 apply -0 -> #a2080000000000000000000000000000 -decq429 apply #a2080000000000000000000000000000 -> -0 -decq430 apply -0E+3 -> #a208c000000000000000000000000000 -decq431 apply #a208c000000000000000000000000000 -> -0E+3 -decq432 apply -0E+6111 -> #c3ffc000000000000000000000000000 -decq433 apply #c3ffc000000000000000000000000000 -> -0E+6111 --- clamped zeros... -decq434 apply -0E+6112 -> #c3ffc000000000000000000000000000 Clamped -decq435 apply #c3ffc000000000000000000000000000 -> -0E+6111 -decq436 apply -0E+6144 -> #c3ffc000000000000000000000000000 Clamped -decq437 apply #c3ffc000000000000000000000000000 -> -0E+6111 -decq438 apply -0E+8000 -> #c3ffc000000000000000000000000000 Clamped -decq439 apply #c3ffc000000000000000000000000000 -> -0E+6111 - --- exponent lengths -decq440 apply #22080000000000000000000000000007 -> 7 -decq441 apply 7 -> #22080000000000000000000000000007 -decq442 apply #220a4000000000000000000000000007 -> 7E+9 -decq443 apply 7E+9 -> #220a4000000000000000000000000007 -decq444 apply #2220c000000000000000000000000007 -> 7E+99 -decq445 apply 7E+99 -> #2220c000000000000000000000000007 -decq446 apply #2301c000000000000000000000000007 -> 7E+999 -decq447 apply 7E+999 -> #2301c000000000000000000000000007 -decq448 apply #43e3c000000000000000000000000007 -> 7E+5999 -decq449 apply 7E+5999 -> #43e3c000000000000000000000000007 - --- Specials -decq500 apply Infinity -> #78000000000000000000000000000000 -decq501 apply #78787878787878787878787878787878 -> #78000000000000000000000000000000 -decq502 apply #78000000000000000000000000000000 -> Infinity -decq503 apply #79797979797979797979797979797979 -> #78000000000000000000000000000000 -decq504 apply #79000000000000000000000000000000 -> Infinity -decq505 apply #7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a -> #78000000000000000000000000000000 -decq506 apply #7a000000000000000000000000000000 -> Infinity -decq507 apply #7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b -> #78000000000000000000000000000000 -decq508 apply #7b000000000000000000000000000000 -> Infinity - -decq509 apply NaN -> #7c000000000000000000000000000000 -decq510 apply #7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c -> #7c003c7c7c7c7c7c7c7c7c7c7c7c7c7c -decq511 apply #7c000000000000000000000000000000 -> NaN -decq512 apply #7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d -> #7c003d7d7d7d7d7d7d7d7d7d7d7d7d7d -decq513 apply #7d000000000000000000000000000000 -> NaN -decq514 apply #7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e -> #7e003e7e7c7e7e7e7e7c7e7e7e7e7c7e -decq515 apply #7e000000000000000000000000000000 -> sNaN -decq516 apply #7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f -> #7e003f7f7c7f7f7f7f7c7f7f7f7f7c7f -decq517 apply #7f000000000000000000000000000000 -> sNaN -decq518 apply #7fffffffffffffffffffffffffffffff -> sNaN999999999999999999999999999999999 -decq519 apply #7fffffffffffffffffffffffffffffff -> #7e000ff3fcff3fcff3fcff3fcff3fcff - -decq520 apply -Infinity -> #f8000000000000000000000000000000 -decq521 apply #f8787878787878787878787878787878 -> #f8000000000000000000000000000000 -decq522 apply #f8000000000000000000000000000000 -> -Infinity -decq523 apply #f9797979797979797979797979797979 -> #f8000000000000000000000000000000 -decq524 apply #f9000000000000000000000000000000 -> -Infinity -decq525 apply #fa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a -> #f8000000000000000000000000000000 -decq526 apply #fa000000000000000000000000000000 -> -Infinity -decq527 apply #fb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b -> #f8000000000000000000000000000000 -decq528 apply #fb000000000000000000000000000000 -> -Infinity - -decq529 apply -NaN -> #fc000000000000000000000000000000 -decq530 apply #fc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c -> #fc003c7c7c7c7c7c7c7c7c7c7c7c7c7c -decq531 apply #fc000000000000000000000000000000 -> -NaN -decq532 apply #fd7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d -> #fc003d7d7d7d7d7d7d7d7d7d7d7d7d7d -decq533 apply #fd000000000000000000000000000000 -> -NaN -decq534 apply #fe7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e -> #fe003e7e7c7e7e7e7e7c7e7e7e7e7c7e -decq535 apply #fe000000000000000000000000000000 -> -sNaN -decq536 apply #ff7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f -> #fe003f7f7c7f7f7f7f7c7f7f7f7f7c7f -decq537 apply #ff000000000000000000000000000000 -> -sNaN -decq538 apply #ffffffffffffffffffffffffffffffff -> -sNaN999999999999999999999999999999999 -decq539 apply #ffffffffffffffffffffffffffffffff -> #fe000ff3fcff3fcff3fcff3fcff3fcff - -decq540 apply NaN -> #7c000000000000000000000000000000 -decq541 apply NaN0 -> #7c000000000000000000000000000000 -decq542 apply NaN1 -> #7c000000000000000000000000000001 -decq543 apply NaN12 -> #7c000000000000000000000000000012 -decq544 apply NaN79 -> #7c000000000000000000000000000079 -decq545 apply NaN12345 -> #7c0000000000000000000000000049c5 -decq546 apply NaN123456 -> #7c000000000000000000000000028e56 -decq547 apply NaN799799 -> #7c0000000000000000000000000f7fdf -decq548 apply NaN799799799799799799799799799799799 -> #7c003dff7fdff7fdff7fdff7fdff7fdf -decq549 apply NaN999999999999999999999999999999999 -> #7c000ff3fcff3fcff3fcff3fcff3fcff -decq550 apply 9999999999999999999999999999999999 -> #6e080ff3fcff3fcff3fcff3fcff3fcff - --- fold-down full sequence -decq601 apply 1E+6144 -> #47ffc000000000000000000000000000 Clamped -decq602 apply #47ffc000000000000000000000000000 -> 1.000000000000000000000000000000000E+6144 -decq603 apply 1E+6143 -> #43ffc800000000000000000000000000 Clamped -decq604 apply #43ffc800000000000000000000000000 -> 1.00000000000000000000000000000000E+6143 -decq605 apply 1E+6142 -> #43ffc100000000000000000000000000 Clamped -decq606 apply #43ffc100000000000000000000000000 -> 1.0000000000000000000000000000000E+6142 -decq607 apply 1E+6141 -> #43ffc010000000000000000000000000 Clamped -decq608 apply #43ffc010000000000000000000000000 -> 1.000000000000000000000000000000E+6141 -decq609 apply 1E+6140 -> #43ffc002000000000000000000000000 Clamped -decq610 apply #43ffc002000000000000000000000000 -> 1.00000000000000000000000000000E+6140 -decq611 apply 1E+6139 -> #43ffc000400000000000000000000000 Clamped -decq612 apply #43ffc000400000000000000000000000 -> 1.0000000000000000000000000000E+6139 -decq613 apply 1E+6138 -> #43ffc000040000000000000000000000 Clamped -decq614 apply #43ffc000040000000000000000000000 -> 1.000000000000000000000000000E+6138 -decq615 apply 1E+6137 -> #43ffc000008000000000000000000000 Clamped -decq616 apply #43ffc000008000000000000000000000 -> 1.00000000000000000000000000E+6137 -decq617 apply 1E+6136 -> #43ffc000001000000000000000000000 Clamped -decq618 apply #43ffc000001000000000000000000000 -> 1.0000000000000000000000000E+6136 -decq619 apply 1E+6135 -> #43ffc000000100000000000000000000 Clamped -decq620 apply #43ffc000000100000000000000000000 -> 1.000000000000000000000000E+6135 -decq621 apply 1E+6134 -> #43ffc000000020000000000000000000 Clamped -decq622 apply #43ffc000000020000000000000000000 -> 1.00000000000000000000000E+6134 -decq623 apply 1E+6133 -> #43ffc000000004000000000000000000 Clamped -decq624 apply #43ffc000000004000000000000000000 -> 1.0000000000000000000000E+6133 -decq625 apply 1E+6132 -> #43ffc000000000400000000000000000 Clamped -decq626 apply #43ffc000000000400000000000000000 -> 1.000000000000000000000E+6132 -decq627 apply 1E+6131 -> #43ffc000000000080000000000000000 Clamped -decq628 apply #43ffc000000000080000000000000000 -> 1.00000000000000000000E+6131 -decq629 apply 1E+6130 -> #43ffc000000000010000000000000000 Clamped -decq630 apply #43ffc000000000010000000000000000 -> 1.0000000000000000000E+6130 -decq631 apply 1E+6129 -> #43ffc000000000001000000000000000 Clamped -decq632 apply #43ffc000000000001000000000000000 -> 1.000000000000000000E+6129 -decq633 apply 1E+6128 -> #43ffc000000000000200000000000000 Clamped -decq634 apply #43ffc000000000000200000000000000 -> 1.00000000000000000E+6128 -decq635 apply 1E+6127 -> #43ffc000000000000040000000000000 Clamped -decq636 apply #43ffc000000000000040000000000000 -> 1.0000000000000000E+6127 -decq637 apply 1E+6126 -> #43ffc000000000000004000000000000 Clamped -decq638 apply #43ffc000000000000004000000000000 -> 1.000000000000000E+6126 -decq639 apply 1E+6125 -> #43ffc000000000000000800000000000 Clamped -decq640 apply #43ffc000000000000000800000000000 -> 1.00000000000000E+6125 -decq641 apply 1E+6124 -> #43ffc000000000000000100000000000 Clamped -decq642 apply #43ffc000000000000000100000000000 -> 1.0000000000000E+6124 -decq643 apply 1E+6123 -> #43ffc000000000000000010000000000 Clamped -decq644 apply #43ffc000000000000000010000000000 -> 1.000000000000E+6123 -decq645 apply 1E+6122 -> #43ffc000000000000000002000000000 Clamped -decq646 apply #43ffc000000000000000002000000000 -> 1.00000000000E+6122 -decq647 apply 1E+6121 -> #43ffc000000000000000000400000000 Clamped -decq648 apply #43ffc000000000000000000400000000 -> 1.0000000000E+6121 -decq649 apply 1E+6120 -> #43ffc000000000000000000040000000 Clamped -decq650 apply #43ffc000000000000000000040000000 -> 1.000000000E+6120 -decq651 apply 1E+6119 -> #43ffc000000000000000000008000000 Clamped -decq652 apply #43ffc000000000000000000008000000 -> 1.00000000E+6119 -decq653 apply 1E+6118 -> #43ffc000000000000000000001000000 Clamped -decq654 apply #43ffc000000000000000000001000000 -> 1.0000000E+6118 -decq655 apply 1E+6117 -> #43ffc000000000000000000000100000 Clamped -decq656 apply #43ffc000000000000000000000100000 -> 1.000000E+6117 -decq657 apply 1E+6116 -> #43ffc000000000000000000000020000 Clamped -decq658 apply #43ffc000000000000000000000020000 -> 1.00000E+6116 -decq659 apply 1E+6115 -> #43ffc000000000000000000000004000 Clamped -decq660 apply #43ffc000000000000000000000004000 -> 1.0000E+6115 -decq661 apply 1E+6114 -> #43ffc000000000000000000000000400 Clamped -decq662 apply #43ffc000000000000000000000000400 -> 1.000E+6114 -decq663 apply 1E+6113 -> #43ffc000000000000000000000000080 Clamped -decq664 apply #43ffc000000000000000000000000080 -> 1.00E+6113 -decq665 apply 1E+6112 -> #43ffc000000000000000000000000010 Clamped -decq666 apply #43ffc000000000000000000000000010 -> 1.0E+6112 -decq667 apply 1E+6111 -> #43ffc000000000000000000000000001 -decq668 apply #43ffc000000000000000000000000001 -> 1E+6111 -decq669 apply 1E+6110 -> #43ff8000000000000000000000000001 -decq670 apply #43ff8000000000000000000000000001 -> 1E+6110 - --- Selected DPD codes -decq700 apply #22080000000000000000000000000000 -> 0 -decq701 apply #22080000000000000000000000000009 -> 9 -decq702 apply #22080000000000000000000000000010 -> 10 -decq703 apply #22080000000000000000000000000019 -> 19 -decq704 apply #22080000000000000000000000000020 -> 20 -decq705 apply #22080000000000000000000000000029 -> 29 -decq706 apply #22080000000000000000000000000030 -> 30 -decq707 apply #22080000000000000000000000000039 -> 39 -decq708 apply #22080000000000000000000000000040 -> 40 -decq709 apply #22080000000000000000000000000049 -> 49 -decq710 apply #22080000000000000000000000000050 -> 50 -decq711 apply #22080000000000000000000000000059 -> 59 -decq712 apply #22080000000000000000000000000060 -> 60 -decq713 apply #22080000000000000000000000000069 -> 69 -decq714 apply #22080000000000000000000000000070 -> 70 -decq715 apply #22080000000000000000000000000071 -> 71 -decq716 apply #22080000000000000000000000000072 -> 72 -decq717 apply #22080000000000000000000000000073 -> 73 -decq718 apply #22080000000000000000000000000074 -> 74 -decq719 apply #22080000000000000000000000000075 -> 75 -decq720 apply #22080000000000000000000000000076 -> 76 -decq721 apply #22080000000000000000000000000077 -> 77 -decq722 apply #22080000000000000000000000000078 -> 78 -decq723 apply #22080000000000000000000000000079 -> 79 - -decq730 apply #2208000000000000000000000000029e -> 994 -decq731 apply #2208000000000000000000000000029f -> 995 -decq732 apply #220800000000000000000000000002a0 -> 520 -decq733 apply #220800000000000000000000000002a1 -> 521 - --- DPD: one of each of the huffman groups -decq740 apply #220800000000000000000000000003f7 -> 777 -decq741 apply #220800000000000000000000000003f8 -> 778 -decq742 apply #220800000000000000000000000003eb -> 787 -decq743 apply #2208000000000000000000000000037d -> 877 -decq744 apply #2208000000000000000000000000039f -> 997 -decq745 apply #220800000000000000000000000003bf -> 979 -decq746 apply #220800000000000000000000000003df -> 799 -decq747 apply #2208000000000000000000000000006e -> 888 - - --- DPD all-highs cases (includes the 24 redundant codes) -decq750 apply #2208000000000000000000000000006e -> 888 -decq751 apply #2208000000000000000000000000016e -> 888 -decq752 apply #2208000000000000000000000000026e -> 888 -decq753 apply #2208000000000000000000000000036e -> 888 -decq754 apply #2208000000000000000000000000006f -> 889 -decq755 apply #2208000000000000000000000000016f -> 889 -decq756 apply #2208000000000000000000000000026f -> 889 -decq757 apply #2208000000000000000000000000036f -> 889 - -decq760 apply #2208000000000000000000000000007e -> 898 -decq761 apply #2208000000000000000000000000017e -> 898 -decq762 apply #2208000000000000000000000000027e -> 898 -decq763 apply #2208000000000000000000000000037e -> 898 -decq764 apply #2208000000000000000000000000007f -> 899 -decq765 apply #2208000000000000000000000000017f -> 899 -decq766 apply #2208000000000000000000000000027f -> 899 -decq767 apply #2208000000000000000000000000037f -> 899 - -decq770 apply #220800000000000000000000000000ee -> 988 -decq771 apply #220800000000000000000000000001ee -> 988 -decq772 apply #220800000000000000000000000002ee -> 988 -decq773 apply #220800000000000000000000000003ee -> 988 -decq774 apply #220800000000000000000000000000ef -> 989 -decq775 apply #220800000000000000000000000001ef -> 989 -decq776 apply #220800000000000000000000000002ef -> 989 -decq777 apply #220800000000000000000000000003ef -> 989 - -decq780 apply #220800000000000000000000000000fe -> 998 -decq781 apply #220800000000000000000000000001fe -> 998 -decq782 apply #220800000000000000000000000002fe -> 998 -decq783 apply #220800000000000000000000000003fe -> 998 -decq784 apply #220800000000000000000000000000ff -> 999 -decq785 apply #220800000000000000000000000001ff -> 999 -decq786 apply #220800000000000000000000000002ff -> 999 -decq787 apply #220800000000000000000000000003ff -> 999 - --- Miscellaneous (testers' queries, etc.) - -decq790 apply #2208000000000000000000000000c000 -> 30000 -decq791 apply #22080000000000000000000000007800 -> 890000 -decq792 apply 30000 -> #2208000000000000000000000000c000 -decq793 apply 890000 -> #22080000000000000000000000007800 - --- values around [u]int32 edges (zeros done earlier) -decq800 apply -2147483646 -> #a208000000000000000000008c78af46 -decq801 apply -2147483647 -> #a208000000000000000000008c78af47 -decq802 apply -2147483648 -> #a208000000000000000000008c78af48 -decq803 apply -2147483649 -> #a208000000000000000000008c78af49 -decq804 apply 2147483646 -> #2208000000000000000000008c78af46 -decq805 apply 2147483647 -> #2208000000000000000000008c78af47 -decq806 apply 2147483648 -> #2208000000000000000000008c78af48 -decq807 apply 2147483649 -> #2208000000000000000000008c78af49 -decq808 apply 4294967294 -> #22080000000000000000000115afb55a -decq809 apply 4294967295 -> #22080000000000000000000115afb55b -decq810 apply 4294967296 -> #22080000000000000000000115afb57a -decq811 apply 4294967297 -> #22080000000000000000000115afb57b - -decq820 apply #a208000000000000000000008c78af46 -> -2147483646 -decq821 apply #a208000000000000000000008c78af47 -> -2147483647 -decq822 apply #a208000000000000000000008c78af48 -> -2147483648 -decq823 apply #a208000000000000000000008c78af49 -> -2147483649 -decq824 apply #2208000000000000000000008c78af46 -> 2147483646 -decq825 apply #2208000000000000000000008c78af47 -> 2147483647 -decq826 apply #2208000000000000000000008c78af48 -> 2147483648 -decq827 apply #2208000000000000000000008c78af49 -> 2147483649 -decq828 apply #22080000000000000000000115afb55a -> 4294967294 -decq829 apply #22080000000000000000000115afb55b -> 4294967295 -decq830 apply #22080000000000000000000115afb57a -> 4294967296 -decq831 apply #22080000000000000000000115afb57b -> 4294967297 - --- VG testcase -decq840 apply #2080000000000000F294000000172636 -> 8.81125000000001349436E-1548 -decq841 apply #20800000000000008000000000000000 -> 8.000000000000000000E-1550 -decq842 apply #1EF98490000000010F6E4E0000000000 -> 7.049000000000010795488000000000000E-3097 -decq843 multiply #20800000000000008000000000000000 #2080000000000000F294000000172636 -> #1EF98490000000010F6E4E0000000000 Rounded - +------------------------------------------------------------------------ +-- dqEncode.decTest -- decimal sixteen-byte format testcases -- +-- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +-- [Previously called decimal128.decTest] +version: 2.59 + +-- This set of tests is for the sixteen-byte concrete representation. +-- Its characteristics are: +-- +-- 1 bit sign +-- 5 bits combination field +-- 12 bits exponent continuation +-- 110 bits coefficient continuation +-- +-- Total exponent length 14 bits +-- Total coefficient length 114 bits (34 digits) +-- +-- Elimit = 12287 (maximum encoded exponent) +-- Emax = 6144 (largest exponent value) +-- Emin = -6143 (smallest exponent value) +-- bias = 6176 (subtracted from encoded exponent) = -Etiny + +-- The testcases here have only exactly representable data on the +-- 'left-hand-side'; rounding from strings is tested in 'base' +-- testcase groups. + +extended: 1 +clamp: 1 +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 + +-- General testcases +-- (mostly derived from the Strawman 4 document and examples) +decq001 apply #A20780000000000000000000000003D0 -> -7.50 +decq002 apply -7.50 -> #A20780000000000000000000000003D0 +-- derivative canonical plain strings +decq003 apply #A20840000000000000000000000003D0 -> -7.50E+3 +decq004 apply -7.50E+3 -> #A20840000000000000000000000003D0 +decq005 apply #A20800000000000000000000000003D0 -> -750 +decq006 apply -750 -> #A20800000000000000000000000003D0 +decq007 apply #A207c0000000000000000000000003D0 -> -75.0 +decq008 apply -75.0 -> #A207c0000000000000000000000003D0 +decq009 apply #A20740000000000000000000000003D0 -> -0.750 +decq010 apply -0.750 -> #A20740000000000000000000000003D0 +decq011 apply #A20700000000000000000000000003D0 -> -0.0750 +decq012 apply -0.0750 -> #A20700000000000000000000000003D0 +decq013 apply #A20680000000000000000000000003D0 -> -0.000750 +decq014 apply -0.000750 -> #A20680000000000000000000000003D0 +decq015 apply #A20600000000000000000000000003D0 -> -0.00000750 +decq016 apply -0.00000750 -> #A20600000000000000000000000003D0 +decq017 apply #A205c0000000000000000000000003D0 -> -7.50E-7 +decq018 apply -7.50E-7 -> #A205c0000000000000000000000003D0 + +-- Normality +decq020 apply 1234567890123456789012345678901234 -> #2608134b9c1e28e56f3c127177823534 +decq021 apply -1234567890123456789012345678901234 -> #a608134b9c1e28e56f3c127177823534 +decq022 apply 1111111111111111111111111111111111 -> #26080912449124491244912449124491 + +-- Nmax and similar +decq031 apply 9.999999999999999999999999999999999E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff +decq032 apply #77ffcff3fcff3fcff3fcff3fcff3fcff -> 9.999999999999999999999999999999999E+6144 +decq033 apply 1.234567890123456789012345678901234E+6144 -> #47ffd34b9c1e28e56f3c127177823534 +decq034 apply #47ffd34b9c1e28e56f3c127177823534 -> 1.234567890123456789012345678901234E+6144 +-- fold-downs (more below) +decq035 apply 1.23E+6144 -> #47ffd300000000000000000000000000 Clamped +decq036 apply #47ffd300000000000000000000000000 -> 1.230000000000000000000000000000000E+6144 +decq037 apply 1E+6144 -> #47ffc000000000000000000000000000 Clamped +decq038 apply #47ffc000000000000000000000000000 -> 1.000000000000000000000000000000000E+6144 + +decq051 apply 12345 -> #220800000000000000000000000049c5 +decq052 apply #220800000000000000000000000049c5 -> 12345 +decq053 apply 1234 -> #22080000000000000000000000000534 +decq054 apply #22080000000000000000000000000534 -> 1234 +decq055 apply 123 -> #220800000000000000000000000000a3 +decq056 apply #220800000000000000000000000000a3 -> 123 +decq057 apply 12 -> #22080000000000000000000000000012 +decq058 apply #22080000000000000000000000000012 -> 12 +decq059 apply 1 -> #22080000000000000000000000000001 +decq060 apply #22080000000000000000000000000001 -> 1 +decq061 apply 1.23 -> #220780000000000000000000000000a3 +decq062 apply #220780000000000000000000000000a3 -> 1.23 +decq063 apply 123.45 -> #220780000000000000000000000049c5 +decq064 apply #220780000000000000000000000049c5 -> 123.45 + +-- Nmin and below +decq071 apply 1E-6143 -> #00084000000000000000000000000001 +decq072 apply #00084000000000000000000000000001 -> 1E-6143 +decq073 apply 1.000000000000000000000000000000000E-6143 -> #04000000000000000000000000000000 +decq074 apply #04000000000000000000000000000000 -> 1.000000000000000000000000000000000E-6143 +decq075 apply 1.000000000000000000000000000000001E-6143 -> #04000000000000000000000000000001 +decq076 apply #04000000000000000000000000000001 -> 1.000000000000000000000000000000001E-6143 + +decq077 apply 0.100000000000000000000000000000000E-6143 -> #00000800000000000000000000000000 Subnormal +decq078 apply #00000800000000000000000000000000 -> 1.00000000000000000000000000000000E-6144 Subnormal +decq079 apply 0.000000000000000000000000000000010E-6143 -> #00000000000000000000000000000010 Subnormal +decq080 apply #00000000000000000000000000000010 -> 1.0E-6175 Subnormal +decq081 apply 0.00000000000000000000000000000001E-6143 -> #00004000000000000000000000000001 Subnormal +decq082 apply #00004000000000000000000000000001 -> 1E-6175 Subnormal +decq083 apply 0.000000000000000000000000000000001E-6143 -> #00000000000000000000000000000001 Subnormal +decq084 apply #00000000000000000000000000000001 -> 1E-6176 Subnormal + +-- underflows cannot be tested for simple copies, check edge cases +decq090 apply 1e-6176 -> #00000000000000000000000000000001 Subnormal +decq100 apply 999999999999999999999999999999999e-6176 -> #00000ff3fcff3fcff3fcff3fcff3fcff Subnormal + +-- same again, negatives +-- Nmax and similar +decq122 apply -9.999999999999999999999999999999999E+6144 -> #f7ffcff3fcff3fcff3fcff3fcff3fcff +decq123 apply #f7ffcff3fcff3fcff3fcff3fcff3fcff -> -9.999999999999999999999999999999999E+6144 +decq124 apply -1.234567890123456789012345678901234E+6144 -> #c7ffd34b9c1e28e56f3c127177823534 +decq125 apply #c7ffd34b9c1e28e56f3c127177823534 -> -1.234567890123456789012345678901234E+6144 +-- fold-downs (more below) +decq130 apply -1.23E+6144 -> #c7ffd300000000000000000000000000 Clamped +decq131 apply #c7ffd300000000000000000000000000 -> -1.230000000000000000000000000000000E+6144 +decq132 apply -1E+6144 -> #c7ffc000000000000000000000000000 Clamped +decq133 apply #c7ffc000000000000000000000000000 -> -1.000000000000000000000000000000000E+6144 + +decq151 apply -12345 -> #a20800000000000000000000000049c5 +decq152 apply #a20800000000000000000000000049c5 -> -12345 +decq153 apply -1234 -> #a2080000000000000000000000000534 +decq154 apply #a2080000000000000000000000000534 -> -1234 +decq155 apply -123 -> #a20800000000000000000000000000a3 +decq156 apply #a20800000000000000000000000000a3 -> -123 +decq157 apply -12 -> #a2080000000000000000000000000012 +decq158 apply #a2080000000000000000000000000012 -> -12 +decq159 apply -1 -> #a2080000000000000000000000000001 +decq160 apply #a2080000000000000000000000000001 -> -1 +decq161 apply -1.23 -> #a20780000000000000000000000000a3 +decq162 apply #a20780000000000000000000000000a3 -> -1.23 +decq163 apply -123.45 -> #a20780000000000000000000000049c5 +decq164 apply #a20780000000000000000000000049c5 -> -123.45 + +-- Nmin and below +decq171 apply -1E-6143 -> #80084000000000000000000000000001 +decq172 apply #80084000000000000000000000000001 -> -1E-6143 +decq173 apply -1.000000000000000000000000000000000E-6143 -> #84000000000000000000000000000000 +decq174 apply #84000000000000000000000000000000 -> -1.000000000000000000000000000000000E-6143 +decq175 apply -1.000000000000000000000000000000001E-6143 -> #84000000000000000000000000000001 +decq176 apply #84000000000000000000000000000001 -> -1.000000000000000000000000000000001E-6143 + +decq177 apply -0.100000000000000000000000000000000E-6143 -> #80000800000000000000000000000000 Subnormal +decq178 apply #80000800000000000000000000000000 -> -1.00000000000000000000000000000000E-6144 Subnormal +decq179 apply -0.000000000000000000000000000000010E-6143 -> #80000000000000000000000000000010 Subnormal +decq180 apply #80000000000000000000000000000010 -> -1.0E-6175 Subnormal +decq181 apply -0.00000000000000000000000000000001E-6143 -> #80004000000000000000000000000001 Subnormal +decq182 apply #80004000000000000000000000000001 -> -1E-6175 Subnormal +decq183 apply -0.000000000000000000000000000000001E-6143 -> #80000000000000000000000000000001 Subnormal +decq184 apply #80000000000000000000000000000001 -> -1E-6176 Subnormal + +-- underflow edge cases +decq190 apply -1e-6176 -> #80000000000000000000000000000001 Subnormal +decq200 apply -999999999999999999999999999999999e-6176 -> #80000ff3fcff3fcff3fcff3fcff3fcff Subnormal + +-- zeros +decq400 apply 0E-8000 -> #00000000000000000000000000000000 Clamped +decq401 apply 0E-6177 -> #00000000000000000000000000000000 Clamped +decq402 apply 0E-6176 -> #00000000000000000000000000000000 +decq403 apply #00000000000000000000000000000000 -> 0E-6176 +decq404 apply 0.000000000000000000000000000000000E-6143 -> #00000000000000000000000000000000 +decq405 apply #00000000000000000000000000000000 -> 0E-6176 +decq406 apply 0E-2 -> #22078000000000000000000000000000 +decq407 apply #22078000000000000000000000000000 -> 0.00 +decq408 apply 0 -> #22080000000000000000000000000000 +decq409 apply #22080000000000000000000000000000 -> 0 +decq410 apply 0E+3 -> #2208c000000000000000000000000000 +decq411 apply #2208c000000000000000000000000000 -> 0E+3 +decq412 apply 0E+6111 -> #43ffc000000000000000000000000000 +decq413 apply #43ffc000000000000000000000000000 -> 0E+6111 +-- clamped zeros... +decq414 apply 0E+6112 -> #43ffc000000000000000000000000000 Clamped +decq415 apply #43ffc000000000000000000000000000 -> 0E+6111 +decq416 apply 0E+6144 -> #43ffc000000000000000000000000000 Clamped +decq417 apply #43ffc000000000000000000000000000 -> 0E+6111 +decq418 apply 0E+8000 -> #43ffc000000000000000000000000000 Clamped +decq419 apply #43ffc000000000000000000000000000 -> 0E+6111 + +-- negative zeros +decq420 apply -0E-8000 -> #80000000000000000000000000000000 Clamped +decq421 apply -0E-6177 -> #80000000000000000000000000000000 Clamped +decq422 apply -0E-6176 -> #80000000000000000000000000000000 +decq423 apply #80000000000000000000000000000000 -> -0E-6176 +decq424 apply -0.000000000000000000000000000000000E-6143 -> #80000000000000000000000000000000 +decq425 apply #80000000000000000000000000000000 -> -0E-6176 +decq426 apply -0E-2 -> #a2078000000000000000000000000000 +decq427 apply #a2078000000000000000000000000000 -> -0.00 +decq428 apply -0 -> #a2080000000000000000000000000000 +decq429 apply #a2080000000000000000000000000000 -> -0 +decq430 apply -0E+3 -> #a208c000000000000000000000000000 +decq431 apply #a208c000000000000000000000000000 -> -0E+3 +decq432 apply -0E+6111 -> #c3ffc000000000000000000000000000 +decq433 apply #c3ffc000000000000000000000000000 -> -0E+6111 +-- clamped zeros... +decq434 apply -0E+6112 -> #c3ffc000000000000000000000000000 Clamped +decq435 apply #c3ffc000000000000000000000000000 -> -0E+6111 +decq436 apply -0E+6144 -> #c3ffc000000000000000000000000000 Clamped +decq437 apply #c3ffc000000000000000000000000000 -> -0E+6111 +decq438 apply -0E+8000 -> #c3ffc000000000000000000000000000 Clamped +decq439 apply #c3ffc000000000000000000000000000 -> -0E+6111 + +-- exponent lengths +decq440 apply #22080000000000000000000000000007 -> 7 +decq441 apply 7 -> #22080000000000000000000000000007 +decq442 apply #220a4000000000000000000000000007 -> 7E+9 +decq443 apply 7E+9 -> #220a4000000000000000000000000007 +decq444 apply #2220c000000000000000000000000007 -> 7E+99 +decq445 apply 7E+99 -> #2220c000000000000000000000000007 +decq446 apply #2301c000000000000000000000000007 -> 7E+999 +decq447 apply 7E+999 -> #2301c000000000000000000000000007 +decq448 apply #43e3c000000000000000000000000007 -> 7E+5999 +decq449 apply 7E+5999 -> #43e3c000000000000000000000000007 + +-- Specials +decq500 apply Infinity -> #78000000000000000000000000000000 +decq501 apply #78787878787878787878787878787878 -> #78000000000000000000000000000000 +decq502 apply #78000000000000000000000000000000 -> Infinity +decq503 apply #79797979797979797979797979797979 -> #78000000000000000000000000000000 +decq504 apply #79000000000000000000000000000000 -> Infinity +decq505 apply #7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a -> #78000000000000000000000000000000 +decq506 apply #7a000000000000000000000000000000 -> Infinity +decq507 apply #7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b -> #78000000000000000000000000000000 +decq508 apply #7b000000000000000000000000000000 -> Infinity + +decq509 apply NaN -> #7c000000000000000000000000000000 +decq510 apply #7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c -> #7c003c7c7c7c7c7c7c7c7c7c7c7c7c7c +decq511 apply #7c000000000000000000000000000000 -> NaN +decq512 apply #7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d -> #7c003d7d7d7d7d7d7d7d7d7d7d7d7d7d +decq513 apply #7d000000000000000000000000000000 -> NaN +decq514 apply #7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e -> #7e003e7e7c7e7e7e7e7c7e7e7e7e7c7e +decq515 apply #7e000000000000000000000000000000 -> sNaN +decq516 apply #7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f -> #7e003f7f7c7f7f7f7f7c7f7f7f7f7c7f +decq517 apply #7f000000000000000000000000000000 -> sNaN +decq518 apply #7fffffffffffffffffffffffffffffff -> sNaN999999999999999999999999999999999 +decq519 apply #7fffffffffffffffffffffffffffffff -> #7e000ff3fcff3fcff3fcff3fcff3fcff + +decq520 apply -Infinity -> #f8000000000000000000000000000000 +decq521 apply #f8787878787878787878787878787878 -> #f8000000000000000000000000000000 +decq522 apply #f8000000000000000000000000000000 -> -Infinity +decq523 apply #f9797979797979797979797979797979 -> #f8000000000000000000000000000000 +decq524 apply #f9000000000000000000000000000000 -> -Infinity +decq525 apply #fa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a -> #f8000000000000000000000000000000 +decq526 apply #fa000000000000000000000000000000 -> -Infinity +decq527 apply #fb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b -> #f8000000000000000000000000000000 +decq528 apply #fb000000000000000000000000000000 -> -Infinity + +decq529 apply -NaN -> #fc000000000000000000000000000000 +decq530 apply #fc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c -> #fc003c7c7c7c7c7c7c7c7c7c7c7c7c7c +decq531 apply #fc000000000000000000000000000000 -> -NaN +decq532 apply #fd7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d -> #fc003d7d7d7d7d7d7d7d7d7d7d7d7d7d +decq533 apply #fd000000000000000000000000000000 -> -NaN +decq534 apply #fe7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e -> #fe003e7e7c7e7e7e7e7c7e7e7e7e7c7e +decq535 apply #fe000000000000000000000000000000 -> -sNaN +decq536 apply #ff7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f -> #fe003f7f7c7f7f7f7f7c7f7f7f7f7c7f +decq537 apply #ff000000000000000000000000000000 -> -sNaN +decq538 apply #ffffffffffffffffffffffffffffffff -> -sNaN999999999999999999999999999999999 +decq539 apply #ffffffffffffffffffffffffffffffff -> #fe000ff3fcff3fcff3fcff3fcff3fcff + +decq540 apply NaN -> #7c000000000000000000000000000000 +decq541 apply NaN0 -> #7c000000000000000000000000000000 +decq542 apply NaN1 -> #7c000000000000000000000000000001 +decq543 apply NaN12 -> #7c000000000000000000000000000012 +decq544 apply NaN79 -> #7c000000000000000000000000000079 +decq545 apply NaN12345 -> #7c0000000000000000000000000049c5 +decq546 apply NaN123456 -> #7c000000000000000000000000028e56 +decq547 apply NaN799799 -> #7c0000000000000000000000000f7fdf +decq548 apply NaN799799799799799799799799799799799 -> #7c003dff7fdff7fdff7fdff7fdff7fdf +decq549 apply NaN999999999999999999999999999999999 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +decq550 apply 9999999999999999999999999999999999 -> #6e080ff3fcff3fcff3fcff3fcff3fcff + +-- fold-down full sequence +decq601 apply 1E+6144 -> #47ffc000000000000000000000000000 Clamped +decq602 apply #47ffc000000000000000000000000000 -> 1.000000000000000000000000000000000E+6144 +decq603 apply 1E+6143 -> #43ffc800000000000000000000000000 Clamped +decq604 apply #43ffc800000000000000000000000000 -> 1.00000000000000000000000000000000E+6143 +decq605 apply 1E+6142 -> #43ffc100000000000000000000000000 Clamped +decq606 apply #43ffc100000000000000000000000000 -> 1.0000000000000000000000000000000E+6142 +decq607 apply 1E+6141 -> #43ffc010000000000000000000000000 Clamped +decq608 apply #43ffc010000000000000000000000000 -> 1.000000000000000000000000000000E+6141 +decq609 apply 1E+6140 -> #43ffc002000000000000000000000000 Clamped +decq610 apply #43ffc002000000000000000000000000 -> 1.00000000000000000000000000000E+6140 +decq611 apply 1E+6139 -> #43ffc000400000000000000000000000 Clamped +decq612 apply #43ffc000400000000000000000000000 -> 1.0000000000000000000000000000E+6139 +decq613 apply 1E+6138 -> #43ffc000040000000000000000000000 Clamped +decq614 apply #43ffc000040000000000000000000000 -> 1.000000000000000000000000000E+6138 +decq615 apply 1E+6137 -> #43ffc000008000000000000000000000 Clamped +decq616 apply #43ffc000008000000000000000000000 -> 1.00000000000000000000000000E+6137 +decq617 apply 1E+6136 -> #43ffc000001000000000000000000000 Clamped +decq618 apply #43ffc000001000000000000000000000 -> 1.0000000000000000000000000E+6136 +decq619 apply 1E+6135 -> #43ffc000000100000000000000000000 Clamped +decq620 apply #43ffc000000100000000000000000000 -> 1.000000000000000000000000E+6135 +decq621 apply 1E+6134 -> #43ffc000000020000000000000000000 Clamped +decq622 apply #43ffc000000020000000000000000000 -> 1.00000000000000000000000E+6134 +decq623 apply 1E+6133 -> #43ffc000000004000000000000000000 Clamped +decq624 apply #43ffc000000004000000000000000000 -> 1.0000000000000000000000E+6133 +decq625 apply 1E+6132 -> #43ffc000000000400000000000000000 Clamped +decq626 apply #43ffc000000000400000000000000000 -> 1.000000000000000000000E+6132 +decq627 apply 1E+6131 -> #43ffc000000000080000000000000000 Clamped +decq628 apply #43ffc000000000080000000000000000 -> 1.00000000000000000000E+6131 +decq629 apply 1E+6130 -> #43ffc000000000010000000000000000 Clamped +decq630 apply #43ffc000000000010000000000000000 -> 1.0000000000000000000E+6130 +decq631 apply 1E+6129 -> #43ffc000000000001000000000000000 Clamped +decq632 apply #43ffc000000000001000000000000000 -> 1.000000000000000000E+6129 +decq633 apply 1E+6128 -> #43ffc000000000000200000000000000 Clamped +decq634 apply #43ffc000000000000200000000000000 -> 1.00000000000000000E+6128 +decq635 apply 1E+6127 -> #43ffc000000000000040000000000000 Clamped +decq636 apply #43ffc000000000000040000000000000 -> 1.0000000000000000E+6127 +decq637 apply 1E+6126 -> #43ffc000000000000004000000000000 Clamped +decq638 apply #43ffc000000000000004000000000000 -> 1.000000000000000E+6126 +decq639 apply 1E+6125 -> #43ffc000000000000000800000000000 Clamped +decq640 apply #43ffc000000000000000800000000000 -> 1.00000000000000E+6125 +decq641 apply 1E+6124 -> #43ffc000000000000000100000000000 Clamped +decq642 apply #43ffc000000000000000100000000000 -> 1.0000000000000E+6124 +decq643 apply 1E+6123 -> #43ffc000000000000000010000000000 Clamped +decq644 apply #43ffc000000000000000010000000000 -> 1.000000000000E+6123 +decq645 apply 1E+6122 -> #43ffc000000000000000002000000000 Clamped +decq646 apply #43ffc000000000000000002000000000 -> 1.00000000000E+6122 +decq647 apply 1E+6121 -> #43ffc000000000000000000400000000 Clamped +decq648 apply #43ffc000000000000000000400000000 -> 1.0000000000E+6121 +decq649 apply 1E+6120 -> #43ffc000000000000000000040000000 Clamped +decq650 apply #43ffc000000000000000000040000000 -> 1.000000000E+6120 +decq651 apply 1E+6119 -> #43ffc000000000000000000008000000 Clamped +decq652 apply #43ffc000000000000000000008000000 -> 1.00000000E+6119 +decq653 apply 1E+6118 -> #43ffc000000000000000000001000000 Clamped +decq654 apply #43ffc000000000000000000001000000 -> 1.0000000E+6118 +decq655 apply 1E+6117 -> #43ffc000000000000000000000100000 Clamped +decq656 apply #43ffc000000000000000000000100000 -> 1.000000E+6117 +decq657 apply 1E+6116 -> #43ffc000000000000000000000020000 Clamped +decq658 apply #43ffc000000000000000000000020000 -> 1.00000E+6116 +decq659 apply 1E+6115 -> #43ffc000000000000000000000004000 Clamped +decq660 apply #43ffc000000000000000000000004000 -> 1.0000E+6115 +decq661 apply 1E+6114 -> #43ffc000000000000000000000000400 Clamped +decq662 apply #43ffc000000000000000000000000400 -> 1.000E+6114 +decq663 apply 1E+6113 -> #43ffc000000000000000000000000080 Clamped +decq664 apply #43ffc000000000000000000000000080 -> 1.00E+6113 +decq665 apply 1E+6112 -> #43ffc000000000000000000000000010 Clamped +decq666 apply #43ffc000000000000000000000000010 -> 1.0E+6112 +decq667 apply 1E+6111 -> #43ffc000000000000000000000000001 +decq668 apply #43ffc000000000000000000000000001 -> 1E+6111 +decq669 apply 1E+6110 -> #43ff8000000000000000000000000001 +decq670 apply #43ff8000000000000000000000000001 -> 1E+6110 + +-- Selected DPD codes +decq700 apply #22080000000000000000000000000000 -> 0 +decq701 apply #22080000000000000000000000000009 -> 9 +decq702 apply #22080000000000000000000000000010 -> 10 +decq703 apply #22080000000000000000000000000019 -> 19 +decq704 apply #22080000000000000000000000000020 -> 20 +decq705 apply #22080000000000000000000000000029 -> 29 +decq706 apply #22080000000000000000000000000030 -> 30 +decq707 apply #22080000000000000000000000000039 -> 39 +decq708 apply #22080000000000000000000000000040 -> 40 +decq709 apply #22080000000000000000000000000049 -> 49 +decq710 apply #22080000000000000000000000000050 -> 50 +decq711 apply #22080000000000000000000000000059 -> 59 +decq712 apply #22080000000000000000000000000060 -> 60 +decq713 apply #22080000000000000000000000000069 -> 69 +decq714 apply #22080000000000000000000000000070 -> 70 +decq715 apply #22080000000000000000000000000071 -> 71 +decq716 apply #22080000000000000000000000000072 -> 72 +decq717 apply #22080000000000000000000000000073 -> 73 +decq718 apply #22080000000000000000000000000074 -> 74 +decq719 apply #22080000000000000000000000000075 -> 75 +decq720 apply #22080000000000000000000000000076 -> 76 +decq721 apply #22080000000000000000000000000077 -> 77 +decq722 apply #22080000000000000000000000000078 -> 78 +decq723 apply #22080000000000000000000000000079 -> 79 + +decq730 apply #2208000000000000000000000000029e -> 994 +decq731 apply #2208000000000000000000000000029f -> 995 +decq732 apply #220800000000000000000000000002a0 -> 520 +decq733 apply #220800000000000000000000000002a1 -> 521 + +-- DPD: one of each of the huffman groups +decq740 apply #220800000000000000000000000003f7 -> 777 +decq741 apply #220800000000000000000000000003f8 -> 778 +decq742 apply #220800000000000000000000000003eb -> 787 +decq743 apply #2208000000000000000000000000037d -> 877 +decq744 apply #2208000000000000000000000000039f -> 997 +decq745 apply #220800000000000000000000000003bf -> 979 +decq746 apply #220800000000000000000000000003df -> 799 +decq747 apply #2208000000000000000000000000006e -> 888 + + +-- DPD all-highs cases (includes the 24 redundant codes) +decq750 apply #2208000000000000000000000000006e -> 888 +decq751 apply #2208000000000000000000000000016e -> 888 +decq752 apply #2208000000000000000000000000026e -> 888 +decq753 apply #2208000000000000000000000000036e -> 888 +decq754 apply #2208000000000000000000000000006f -> 889 +decq755 apply #2208000000000000000000000000016f -> 889 +decq756 apply #2208000000000000000000000000026f -> 889 +decq757 apply #2208000000000000000000000000036f -> 889 + +decq760 apply #2208000000000000000000000000007e -> 898 +decq761 apply #2208000000000000000000000000017e -> 898 +decq762 apply #2208000000000000000000000000027e -> 898 +decq763 apply #2208000000000000000000000000037e -> 898 +decq764 apply #2208000000000000000000000000007f -> 899 +decq765 apply #2208000000000000000000000000017f -> 899 +decq766 apply #2208000000000000000000000000027f -> 899 +decq767 apply #2208000000000000000000000000037f -> 899 + +decq770 apply #220800000000000000000000000000ee -> 988 +decq771 apply #220800000000000000000000000001ee -> 988 +decq772 apply #220800000000000000000000000002ee -> 988 +decq773 apply #220800000000000000000000000003ee -> 988 +decq774 apply #220800000000000000000000000000ef -> 989 +decq775 apply #220800000000000000000000000001ef -> 989 +decq776 apply #220800000000000000000000000002ef -> 989 +decq777 apply #220800000000000000000000000003ef -> 989 + +decq780 apply #220800000000000000000000000000fe -> 998 +decq781 apply #220800000000000000000000000001fe -> 998 +decq782 apply #220800000000000000000000000002fe -> 998 +decq783 apply #220800000000000000000000000003fe -> 998 +decq784 apply #220800000000000000000000000000ff -> 999 +decq785 apply #220800000000000000000000000001ff -> 999 +decq786 apply #220800000000000000000000000002ff -> 999 +decq787 apply #220800000000000000000000000003ff -> 999 + +-- Miscellaneous (testers' queries, etc.) + +decq790 apply #2208000000000000000000000000c000 -> 30000 +decq791 apply #22080000000000000000000000007800 -> 890000 +decq792 apply 30000 -> #2208000000000000000000000000c000 +decq793 apply 890000 -> #22080000000000000000000000007800 + +-- values around [u]int32 edges (zeros done earlier) +decq800 apply -2147483646 -> #a208000000000000000000008c78af46 +decq801 apply -2147483647 -> #a208000000000000000000008c78af47 +decq802 apply -2147483648 -> #a208000000000000000000008c78af48 +decq803 apply -2147483649 -> #a208000000000000000000008c78af49 +decq804 apply 2147483646 -> #2208000000000000000000008c78af46 +decq805 apply 2147483647 -> #2208000000000000000000008c78af47 +decq806 apply 2147483648 -> #2208000000000000000000008c78af48 +decq807 apply 2147483649 -> #2208000000000000000000008c78af49 +decq808 apply 4294967294 -> #22080000000000000000000115afb55a +decq809 apply 4294967295 -> #22080000000000000000000115afb55b +decq810 apply 4294967296 -> #22080000000000000000000115afb57a +decq811 apply 4294967297 -> #22080000000000000000000115afb57b + +decq820 apply #a208000000000000000000008c78af46 -> -2147483646 +decq821 apply #a208000000000000000000008c78af47 -> -2147483647 +decq822 apply #a208000000000000000000008c78af48 -> -2147483648 +decq823 apply #a208000000000000000000008c78af49 -> -2147483649 +decq824 apply #2208000000000000000000008c78af46 -> 2147483646 +decq825 apply #2208000000000000000000008c78af47 -> 2147483647 +decq826 apply #2208000000000000000000008c78af48 -> 2147483648 +decq827 apply #2208000000000000000000008c78af49 -> 2147483649 +decq828 apply #22080000000000000000000115afb55a -> 4294967294 +decq829 apply #22080000000000000000000115afb55b -> 4294967295 +decq830 apply #22080000000000000000000115afb57a -> 4294967296 +decq831 apply #22080000000000000000000115afb57b -> 4294967297 + +-- VG testcase +decq840 apply #2080000000000000F294000000172636 -> 8.81125000000001349436E-1548 +decq841 apply #20800000000000008000000000000000 -> 8.000000000000000000E-1550 +decq842 apply #1EF98490000000010F6E4E0000000000 -> 7.049000000000010795488000000000000E-3097 +decq843 multiply #20800000000000008000000000000000 #2080000000000000F294000000172636 -> #1EF98490000000010F6E4E0000000000 Rounded + diff --git a/Lib/test/decimaltestdata/dqFMA.decTest b/Lib/test/decimaltestdata/dqFMA.decTest index caa24025a75..8190f444c37 100644 --- a/Lib/test/decimaltestdata/dqFMA.decTest +++ b/Lib/test/decimaltestdata/dqFMA.decTest @@ -1,1786 +1,1786 @@ ------------------------------------------------------------------------- --- dqFMA.decTest -- decQuad Fused Multiply Add -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- These tests comprise three parts: --- 1. Sanity checks and other three-operand tests (especially those --- where the fused operation makes a difference) --- 2. Multiply tests (third operand is neutral zero [0E+emax]) --- 3. Addition tests (first operand is 1) --- The multiply and addition tests are extensive because FMA may have --- its own dedicated multiplication or addition routine(s), and they --- also inherently check the left-to-right properties. - --- Sanity checks -dqfma0001 fma 1 1 1 -> 2 -dqfma0002 fma 1 1 2 -> 3 -dqfma0003 fma 2 2 3 -> 7 -dqfma0004 fma 9 9 9 -> 90 -dqfma0005 fma -1 1 1 -> 0 -dqfma0006 fma -1 1 2 -> 1 -dqfma0007 fma -2 2 3 -> -1 -dqfma0008 fma -9 9 9 -> -72 -dqfma0011 fma 1 -1 1 -> 0 -dqfma0012 fma 1 -1 2 -> 1 -dqfma0013 fma 2 -2 3 -> -1 -dqfma0014 fma 9 -9 9 -> -72 -dqfma0015 fma 1 1 -1 -> 0 -dqfma0016 fma 1 1 -2 -> -1 -dqfma0017 fma 2 2 -3 -> 1 -dqfma0018 fma 9 9 -9 -> 72 - --- non-integer exacts -dqfma0100 fma 25.2 63.6 -438 -> 1164.72 -dqfma0101 fma 0.301 0.380 334 -> 334.114380 -dqfma0102 fma 49.2 -4.8 23.3 -> -212.86 -dqfma0103 fma 4.22 0.079 -94.6 -> -94.26662 -dqfma0104 fma 903 0.797 0.887 -> 720.578 -dqfma0105 fma 6.13 -161 65.9 -> -921.03 -dqfma0106 fma 28.2 727 5.45 -> 20506.85 -dqfma0107 fma 4 605 688 -> 3108 -dqfma0108 fma 93.3 0.19 0.226 -> 17.953 -dqfma0109 fma 0.169 -341 5.61 -> -52.019 -dqfma0110 fma -72.2 30 -51.2 -> -2217.2 -dqfma0111 fma -0.409 13 20.4 -> 15.083 -dqfma0112 fma 317 77.0 19.0 -> 24428.0 -dqfma0113 fma 47 6.58 1.62 -> 310.88 -dqfma0114 fma 1.36 0.984 0.493 -> 1.83124 -dqfma0115 fma 72.7 274 1.56 -> 19921.36 -dqfma0116 fma 335 847 83 -> 283828 -dqfma0117 fma 666 0.247 25.4 -> 189.902 -dqfma0118 fma -3.87 3.06 78.0 -> 66.1578 -dqfma0119 fma 0.742 192 35.6 -> 178.064 -dqfma0120 fma -91.6 5.29 0.153 -> -484.411 - --- cases where result is different from separate multiply + add; each --- is preceded by the result of unfused multiply and add --- [this is about 20% of all similar cases in general] --- -> 4.500119002100000209469729375698778E+38 -dqfma0202 fma 68537985861355864457.5694 6565875762972086605.85969 35892634447236753.172812 -> 4.500119002100000209469729375698779E+38 Inexact Rounded --- -> 5.996248469584594346858881620185514E+41 -dqfma0208 fma 89261822344727628571.9 6717595845654131383336.89 5061036497288796076266.11 -> 5.996248469584594346858881620185513E+41 Inexact Rounded --- -> 1.899242968678256924021594770874070E+34 -dqfma0210 fma 320506237232448685.495971 59257597764017967.984448 3205615239077711589912.85 -> 1.899242968678256924021594770874071E+34 Inexact Rounded --- -> 7.078596978842809537929699954860309E+37 -dqfma0215 fma 220247843259112263.17995 321392340287987979002.80 47533279819997167655440 -> 7.078596978842809537929699954860308E+37 Inexact Rounded --- -> 1.224955667581427559754106862350743E+37 -dqfma0226 fma 23880729790368880412.1449 512947333827064719.55407 217117438419590824502.963 -> 1.224955667581427559754106862350744E+37 Inexact Rounded --- -> -2.530094043253148806272276368579144E+42 -dqfma0229 fma 2539892357016099706.4126 -996142232667504817717435 53682082598315949425.937 -> -2.530094043253148806272276368579143E+42 Inexact Rounded --- -> 1.713387085759711954319391412788454E+37 -dqfma0233 fma 4546339491341624464.0804 3768717864169205581 83578980278690395184.620 -> 1.713387085759711954319391412788453E+37 Inexact Rounded --- -> 4.062275663405823716411579117771547E+35 -dqfma0235 fma 409242119433816131.42253 992633815166741501.477249 70179636544416756129546 -> 4.062275663405823716411579117771548E+35 Inexact Rounded --- -> 6.002604327732568490562249875306823E+47 -dqfma0258 fma 817941336593541742159684 733867339769310729266598 78563844650942419311830.8 -> 6.002604327732568490562249875306822E+47 Inexact Rounded --- -> -2.027022514381452197510103395283874E+39 -dqfma0264 fma 387617310169161270.737532 -5229442703414956061216.62 57665666816652967150473.5 -> -2.027022514381452197510103395283873E+39 Inexact Rounded --- -> -7.856525039803554001144089842730361E+37 -dqfma0267 fma -847655845720565274701.210 92685316564117739.83984 22780950041376424429.5686 -> -7.856525039803554001144089842730360E+37 Inexact Rounded --- -> 1.695515562011520746125607502237559E+38 -dqfma0268 fma 21590290365127685.3675 7853139227576541379426.8 -3275859437236180.761544 -> 1.695515562011520746125607502237558E+38 Inexact Rounded --- -> -8.448422935783289219748115038014710E+38 -dqfma0269 fma -974320636272862697.971586 867109103641860247440.756 -9775170775902454762.98 -> -8.448422935783289219748115038014709E+38 Inexact Rounded - --- Cases where multiply would overflow or underflow if separate -dqfma0300 fma 9e+6144 10 0 -> Infinity Overflow Inexact Rounded -dqfma0301 fma 1e+6144 10 0 -> Infinity Overflow Inexact Rounded -dqfma0302 fma 1e+6144 10 -1e+6144 -> 9.000000000000000000000000000000000E+6144 Clamped -dqfma0303 fma 1e+6144 10 -9e+6144 -> 1.000000000000000000000000000000000E+6144 Clamped --- subnormal etc. -dqfma0305 fma 1e-6176 0.1 0 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma0306 fma 1e-6176 0.1 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqfma0307 fma 1e-6176 0.1 1e-6176 -> 1E-6176 Underflow Subnormal Inexact Rounded - --- Infinite combinations -dqfma0800 fma Inf Inf Inf -> Infinity -dqfma0801 fma Inf Inf -Inf -> NaN Invalid_operation -dqfma0802 fma Inf -Inf Inf -> NaN Invalid_operation -dqfma0803 fma Inf -Inf -Inf -> -Infinity -dqfma0804 fma -Inf Inf Inf -> NaN Invalid_operation -dqfma0805 fma -Inf Inf -Inf -> -Infinity -dqfma0806 fma -Inf -Inf Inf -> Infinity -dqfma0807 fma -Inf -Inf -Inf -> NaN Invalid_operation - --- Triple NaN propagation -dqfma0900 fma NaN2 NaN3 NaN5 -> NaN2 -dqfma0901 fma 0 NaN3 NaN5 -> NaN3 -dqfma0902 fma 0 0 NaN5 -> NaN5 --- first sNaN wins (consider qNaN from earlier sNaN being --- overridden by an sNaN in third operand) -dqfma0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -dqfma0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation -dqfma0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation -dqfma0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -dqfma0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation -dqfma0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation - --- MULTIPLICATION TESTS ------------------------------------------------ -rounding: half_even - --- sanity checks -dqfma2000 fma 2 2 0e+6144 -> 4 -dqfma2001 fma 2 3 0e+6144 -> 6 -dqfma2002 fma 5 1 0e+6144 -> 5 -dqfma2003 fma 5 2 0e+6144 -> 10 -dqfma2004 fma 1.20 2 0e+6144 -> 2.40 -dqfma2005 fma 1.20 0 0e+6144 -> 0.00 -dqfma2006 fma 1.20 -2 0e+6144 -> -2.40 -dqfma2007 fma -1.20 2 0e+6144 -> -2.40 -dqfma2008 fma -1.20 0 0e+6144 -> 0.00 -dqfma2009 fma -1.20 -2 0e+6144 -> 2.40 -dqfma2010 fma 5.09 7.1 0e+6144 -> 36.139 -dqfma2011 fma 2.5 4 0e+6144 -> 10.0 -dqfma2012 fma 2.50 4 0e+6144 -> 10.00 -dqfma2013 fma 1.23456789 1.0000000000000000000000000000 0e+6144 -> 1.234567890000000000000000000000000 Rounded -dqfma2015 fma 2.50 4 0e+6144 -> 10.00 -dqfma2016 fma 9.99999999999999999 9.99999999999999999 0e+6144 -> 99.99999999999999980000000000000000 Inexact Rounded -dqfma2017 fma 9.99999999999999999 -9.99999999999999999 0e+6144 -> -99.99999999999999980000000000000000 Inexact Rounded -dqfma2018 fma -9.99999999999999999 9.99999999999999999 0e+6144 -> -99.99999999999999980000000000000000 Inexact Rounded -dqfma2019 fma -9.99999999999999999 -9.99999999999999999 0e+6144 -> 99.99999999999999980000000000000000 Inexact Rounded - --- zeros, etc. -dqfma2021 fma 0 0 0e+6144 -> 0 -dqfma2022 fma 0 -0 0e+6144 -> 0 -dqfma2023 fma -0 0 0e+6144 -> 0 -dqfma2024 fma -0 -0 0e+6144 -> 0 -dqfma2025 fma -0.0 -0.0 0e+6144 -> 0.00 -dqfma2026 fma -0.0 -0.0 0e+6144 -> 0.00 -dqfma2027 fma -0.0 -0.0 0e+6144 -> 0.00 -dqfma2028 fma -0.0 -0.0 0e+6144 -> 0.00 -dqfma2030 fma 5.00 1E-3 0e+6144 -> 0.00500 -dqfma2031 fma 00.00 0.000 0e+6144 -> 0.00000 -dqfma2032 fma 00.00 0E-3 0e+6144 -> 0.00000 -- rhs is 0 -dqfma2033 fma 0E-3 00.00 0e+6144 -> 0.00000 -- lhs is 0 -dqfma2034 fma -5.00 1E-3 0e+6144 -> -0.00500 -dqfma2035 fma -00.00 0.000 0e+6144 -> 0.00000 -dqfma2036 fma -00.00 0E-3 0e+6144 -> 0.00000 -- rhs is 0 -dqfma2037 fma -0E-3 00.00 0e+6144 -> 0.00000 -- lhs is 0 -dqfma2038 fma 5.00 -1E-3 0e+6144 -> -0.00500 -dqfma2039 fma 00.00 -0.000 0e+6144 -> 0.00000 -dqfma2040 fma 00.00 -0E-3 0e+6144 -> 0.00000 -- rhs is 0 -dqfma2041 fma 0E-3 -00.00 0e+6144 -> 0.00000 -- lhs is 0 -dqfma2042 fma -5.00 -1E-3 0e+6144 -> 0.00500 -dqfma2043 fma -00.00 -0.000 0e+6144 -> 0.00000 -dqfma2044 fma -00.00 -0E-3 0e+6144 -> 0.00000 -- rhs is 0 -dqfma2045 fma -0E-3 -00.00 0e+6144 -> 0.00000 -- lhs is 0 - --- examples from decarith -dqfma2050 fma 1.20 3 0e+6144 -> 3.60 -dqfma2051 fma 7 3 0e+6144 -> 21 -dqfma2052 fma 0.9 0.8 0e+6144 -> 0.72 -dqfma2053 fma 0.9 -0 0e+6144 -> 0.0 -dqfma2054 fma 654321 654321 0e+6144 -> 428135971041 - -dqfma2060 fma 123.45 1e7 0e+6144 -> 1.2345E+9 -dqfma2061 fma 123.45 1e8 0e+6144 -> 1.2345E+10 -dqfma2062 fma 123.45 1e+9 0e+6144 -> 1.2345E+11 -dqfma2063 fma 123.45 1e10 0e+6144 -> 1.2345E+12 -dqfma2064 fma 123.45 1e11 0e+6144 -> 1.2345E+13 -dqfma2065 fma 123.45 1e12 0e+6144 -> 1.2345E+14 -dqfma2066 fma 123.45 1e13 0e+6144 -> 1.2345E+15 - - --- test some intermediate lengths --- 1234567890123456 -dqfma2080 fma 0.1 1230123456456789 0e+6144 -> 123012345645678.9 -dqfma2084 fma 0.1 1230123456456789 0e+6144 -> 123012345645678.9 -dqfma2090 fma 1230123456456789 0.1 0e+6144 -> 123012345645678.9 -dqfma2094 fma 1230123456456789 0.1 0e+6144 -> 123012345645678.9 - --- test some more edge cases and carries -dqfma2101 fma 9 9 0e+6144 -> 81 -dqfma2102 fma 9 90 0e+6144 -> 810 -dqfma2103 fma 9 900 0e+6144 -> 8100 -dqfma2104 fma 9 9000 0e+6144 -> 81000 -dqfma2105 fma 9 90000 0e+6144 -> 810000 -dqfma2106 fma 9 900000 0e+6144 -> 8100000 -dqfma2107 fma 9 9000000 0e+6144 -> 81000000 -dqfma2108 fma 9 90000000 0e+6144 -> 810000000 -dqfma2109 fma 9 900000000 0e+6144 -> 8100000000 -dqfma2110 fma 9 9000000000 0e+6144 -> 81000000000 -dqfma2111 fma 9 90000000000 0e+6144 -> 810000000000 -dqfma2112 fma 9 900000000000 0e+6144 -> 8100000000000 -dqfma2113 fma 9 9000000000000 0e+6144 -> 81000000000000 -dqfma2114 fma 9 90000000000000 0e+6144 -> 810000000000000 -dqfma2115 fma 9 900000000000000 0e+6144 -> 8100000000000000 ---dqfma2116 fma 9 9000000000000000 0e+6144 -> 81000000000000000 ---dqfma2117 fma 9 90000000000000000 0e+6144 -> 810000000000000000 ---dqfma2118 fma 9 900000000000000000 0e+6144 -> 8100000000000000000 ---dqfma2119 fma 9 9000000000000000000 0e+6144 -> 81000000000000000000 ---dqfma2120 fma 9 90000000000000000000 0e+6144 -> 810000000000000000000 ---dqfma2121 fma 9 900000000000000000000 0e+6144 -> 8100000000000000000000 ---dqfma2122 fma 9 9000000000000000000000 0e+6144 -> 81000000000000000000000 ---dqfma2123 fma 9 90000000000000000000000 0e+6144 -> 810000000000000000000000 --- test some more edge cases without carries -dqfma2131 fma 3 3 0e+6144 -> 9 -dqfma2132 fma 3 30 0e+6144 -> 90 -dqfma2133 fma 3 300 0e+6144 -> 900 -dqfma2134 fma 3 3000 0e+6144 -> 9000 -dqfma2135 fma 3 30000 0e+6144 -> 90000 -dqfma2136 fma 3 300000 0e+6144 -> 900000 -dqfma2137 fma 3 3000000 0e+6144 -> 9000000 -dqfma2138 fma 3 30000000 0e+6144 -> 90000000 -dqfma2139 fma 3 300000000 0e+6144 -> 900000000 -dqfma2140 fma 3 3000000000 0e+6144 -> 9000000000 -dqfma2141 fma 3 30000000000 0e+6144 -> 90000000000 -dqfma2142 fma 3 300000000000 0e+6144 -> 900000000000 -dqfma2143 fma 3 3000000000000 0e+6144 -> 9000000000000 -dqfma2144 fma 3 30000000000000 0e+6144 -> 90000000000000 -dqfma2145 fma 3 300000000000000 0e+6144 -> 900000000000000 -dqfma2146 fma 3 3000000000000000 0e+6144 -> 9000000000000000 -dqfma2147 fma 3 30000000000000000 0e+6144 -> 90000000000000000 -dqfma2148 fma 3 300000000000000000 0e+6144 -> 900000000000000000 -dqfma2149 fma 3 3000000000000000000 0e+6144 -> 9000000000000000000 -dqfma2150 fma 3 30000000000000000000 0e+6144 -> 90000000000000000000 -dqfma2151 fma 3 300000000000000000000 0e+6144 -> 900000000000000000000 -dqfma2152 fma 3 3000000000000000000000 0e+6144 -> 9000000000000000000000 -dqfma2153 fma 3 30000000000000000000000 0e+6144 -> 90000000000000000000000 - -dqfma2263 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0e+6144 -> 145433.2908011933696719165119928296 Inexact Rounded - --- test some edge cases with exact rounding -dqfma2301 fma 900000000000000000 9 0e+6144 -> 8100000000000000000 -dqfma2302 fma 900000000000000000 90 0e+6144 -> 81000000000000000000 -dqfma2303 fma 900000000000000000 900 0e+6144 -> 810000000000000000000 -dqfma2304 fma 900000000000000000 9000 0e+6144 -> 8100000000000000000000 -dqfma2305 fma 900000000000000000 90000 0e+6144 -> 81000000000000000000000 -dqfma2306 fma 900000000000000000 900000 0e+6144 -> 810000000000000000000000 -dqfma2307 fma 900000000000000000 9000000 0e+6144 -> 8100000000000000000000000 -dqfma2308 fma 900000000000000000 90000000 0e+6144 -> 81000000000000000000000000 -dqfma2309 fma 900000000000000000 900000000 0e+6144 -> 810000000000000000000000000 -dqfma2310 fma 900000000000000000 9000000000 0e+6144 -> 8100000000000000000000000000 -dqfma2311 fma 900000000000000000 90000000000 0e+6144 -> 81000000000000000000000000000 -dqfma2312 fma 900000000000000000 900000000000 0e+6144 -> 810000000000000000000000000000 -dqfma2313 fma 900000000000000000 9000000000000 0e+6144 -> 8100000000000000000000000000000 -dqfma2314 fma 900000000000000000 90000000000000 0e+6144 -> 81000000000000000000000000000000 -dqfma2315 fma 900000000000000000 900000000000000 0e+6144 -> 810000000000000000000000000000000 -dqfma2316 fma 900000000000000000 9000000000000000 0e+6144 -> 8100000000000000000000000000000000 -dqfma2317 fma 9000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+34 Rounded -dqfma2318 fma 90000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+35 Rounded -dqfma2319 fma 900000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+36 Rounded -dqfma2320 fma 9000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+37 Rounded -dqfma2321 fma 90000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+38 Rounded -dqfma2322 fma 900000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+39 Rounded -dqfma2323 fma 9000000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+40 Rounded - --- tryzeros cases -dqfma2504 fma 0E-4260 1000E-4260 0e+6144 -> 0E-6176 Clamped -dqfma2505 fma 100E+4260 0E+4260 0e+6144 -> 0E+6111 Clamped - --- mixed with zeros -dqfma2541 fma 0 -1 0e+6144 -> 0 -dqfma2542 fma -0 -1 0e+6144 -> 0 -dqfma2543 fma 0 1 0e+6144 -> 0 -dqfma2544 fma -0 1 0e+6144 -> 0 -dqfma2545 fma -1 0 0e+6144 -> 0 -dqfma2546 fma -1 -0 0e+6144 -> 0 -dqfma2547 fma 1 0 0e+6144 -> 0 -dqfma2548 fma 1 -0 0e+6144 -> 0 - -dqfma2551 fma 0.0 -1 0e+6144 -> 0.0 -dqfma2552 fma -0.0 -1 0e+6144 -> 0.0 -dqfma2553 fma 0.0 1 0e+6144 -> 0.0 -dqfma2554 fma -0.0 1 0e+6144 -> 0.0 -dqfma2555 fma -1.0 0 0e+6144 -> 0.0 -dqfma2556 fma -1.0 -0 0e+6144 -> 0.0 -dqfma2557 fma 1.0 0 0e+6144 -> 0.0 -dqfma2558 fma 1.0 -0 0e+6144 -> 0.0 - -dqfma2561 fma 0 -1.0 0e+6144 -> 0.0 -dqfma2562 fma -0 -1.0 0e+6144 -> 0.0 -dqfma2563 fma 0 1.0 0e+6144 -> 0.0 -dqfma2564 fma -0 1.0 0e+6144 -> 0.0 -dqfma2565 fma -1 0.0 0e+6144 -> 0.0 -dqfma2566 fma -1 -0.0 0e+6144 -> 0.0 -dqfma2567 fma 1 0.0 0e+6144 -> 0.0 -dqfma2568 fma 1 -0.0 0e+6144 -> 0.0 - -dqfma2571 fma 0.0 -1.0 0e+6144 -> 0.00 -dqfma2572 fma -0.0 -1.0 0e+6144 -> 0.00 -dqfma2573 fma 0.0 1.0 0e+6144 -> 0.00 -dqfma2574 fma -0.0 1.0 0e+6144 -> 0.00 -dqfma2575 fma -1.0 0.0 0e+6144 -> 0.00 -dqfma2576 fma -1.0 -0.0 0e+6144 -> 0.00 -dqfma2577 fma 1.0 0.0 0e+6144 -> 0.00 -dqfma2578 fma 1.0 -0.0 0e+6144 -> 0.00 -dqfma2579 fma 1.0 0.0 0e+6144 -> 0.00 -dqfma2530 fma -1.0 -0.0 0e+6144 -> 0.00 -dqfma2531 fma -1.0 0.0 0e+6144 -> 0.00 -dqfma2532 fma 1.0 -0.0 -0e+6144 -> -0.00 -dqfma2533 fma 1.0 0.0 -0e+6144 -> 0.00 -dqfma2534 fma -1.0 -0.0 -0e+6144 -> 0.00 -dqfma2535 fma -1.0 0.0 -0e+6144 -> -0.00 - - --- Specials -dqfma2580 fma Inf -Inf 0e+6144 -> -Infinity -dqfma2581 fma Inf -1000 0e+6144 -> -Infinity -dqfma2582 fma Inf -1 0e+6144 -> -Infinity -dqfma2583 fma Inf -0 0e+6144 -> NaN Invalid_operation -dqfma2584 fma Inf 0 0e+6144 -> NaN Invalid_operation -dqfma2585 fma Inf 1 0e+6144 -> Infinity -dqfma2586 fma Inf 1000 0e+6144 -> Infinity -dqfma2587 fma Inf Inf 0e+6144 -> Infinity -dqfma2588 fma -1000 Inf 0e+6144 -> -Infinity -dqfma2589 fma -Inf Inf 0e+6144 -> -Infinity -dqfma2590 fma -1 Inf 0e+6144 -> -Infinity -dqfma2591 fma -0 Inf 0e+6144 -> NaN Invalid_operation -dqfma2592 fma 0 Inf 0e+6144 -> NaN Invalid_operation -dqfma2593 fma 1 Inf 0e+6144 -> Infinity -dqfma2594 fma 1000 Inf 0e+6144 -> Infinity -dqfma2595 fma Inf Inf 0e+6144 -> Infinity - -dqfma2600 fma -Inf -Inf 0e+6144 -> Infinity -dqfma2601 fma -Inf -1000 0e+6144 -> Infinity -dqfma2602 fma -Inf -1 0e+6144 -> Infinity -dqfma2603 fma -Inf -0 0e+6144 -> NaN Invalid_operation -dqfma2604 fma -Inf 0 0e+6144 -> NaN Invalid_operation -dqfma2605 fma -Inf 1 0e+6144 -> -Infinity -dqfma2606 fma -Inf 1000 0e+6144 -> -Infinity -dqfma2607 fma -Inf Inf 0e+6144 -> -Infinity -dqfma2608 fma -1000 Inf 0e+6144 -> -Infinity -dqfma2609 fma -Inf -Inf 0e+6144 -> Infinity -dqfma2610 fma -1 -Inf 0e+6144 -> Infinity -dqfma2611 fma -0 -Inf 0e+6144 -> NaN Invalid_operation -dqfma2612 fma 0 -Inf 0e+6144 -> NaN Invalid_operation -dqfma2613 fma 1 -Inf 0e+6144 -> -Infinity -dqfma2614 fma 1000 -Inf 0e+6144 -> -Infinity -dqfma2615 fma Inf -Inf 0e+6144 -> -Infinity - -dqfma2621 fma NaN -Inf 0e+6144 -> NaN -dqfma2622 fma NaN -1000 0e+6144 -> NaN -dqfma2623 fma NaN -1 0e+6144 -> NaN -dqfma2624 fma NaN -0 0e+6144 -> NaN -dqfma2625 fma NaN 0 0e+6144 -> NaN -dqfma2626 fma NaN 1 0e+6144 -> NaN -dqfma2627 fma NaN 1000 0e+6144 -> NaN -dqfma2628 fma NaN Inf 0e+6144 -> NaN -dqfma2629 fma NaN NaN 0e+6144 -> NaN -dqfma2630 fma -Inf NaN 0e+6144 -> NaN -dqfma2631 fma -1000 NaN 0e+6144 -> NaN -dqfma2632 fma -1 NaN 0e+6144 -> NaN -dqfma2633 fma -0 NaN 0e+6144 -> NaN -dqfma2634 fma 0 NaN 0e+6144 -> NaN -dqfma2635 fma 1 NaN 0e+6144 -> NaN -dqfma2636 fma 1000 NaN 0e+6144 -> NaN -dqfma2637 fma Inf NaN 0e+6144 -> NaN - -dqfma2641 fma sNaN -Inf 0e+6144 -> NaN Invalid_operation -dqfma2642 fma sNaN -1000 0e+6144 -> NaN Invalid_operation -dqfma2643 fma sNaN -1 0e+6144 -> NaN Invalid_operation -dqfma2644 fma sNaN -0 0e+6144 -> NaN Invalid_operation -dqfma2645 fma sNaN 0 0e+6144 -> NaN Invalid_operation -dqfma2646 fma sNaN 1 0e+6144 -> NaN Invalid_operation -dqfma2647 fma sNaN 1000 0e+6144 -> NaN Invalid_operation -dqfma2648 fma sNaN NaN 0e+6144 -> NaN Invalid_operation -dqfma2649 fma sNaN sNaN 0e+6144 -> NaN Invalid_operation -dqfma2650 fma NaN sNaN 0e+6144 -> NaN Invalid_operation -dqfma2651 fma -Inf sNaN 0e+6144 -> NaN Invalid_operation -dqfma2652 fma -1000 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2653 fma -1 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2654 fma -0 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2655 fma 0 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2656 fma 1 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2657 fma 1000 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2658 fma Inf sNaN 0e+6144 -> NaN Invalid_operation -dqfma2659 fma NaN sNaN 0e+6144 -> NaN Invalid_operation - --- propagating NaNs -dqfma2661 fma NaN9 -Inf 0e+6144 -> NaN9 -dqfma2662 fma NaN8 999 0e+6144 -> NaN8 -dqfma2663 fma NaN71 Inf 0e+6144 -> NaN71 -dqfma2664 fma NaN6 NaN5 0e+6144 -> NaN6 -dqfma2665 fma -Inf NaN4 0e+6144 -> NaN4 -dqfma2666 fma -999 NaN33 0e+6144 -> NaN33 -dqfma2667 fma Inf NaN2 0e+6144 -> NaN2 - -dqfma2671 fma sNaN99 -Inf 0e+6144 -> NaN99 Invalid_operation -dqfma2672 fma sNaN98 -11 0e+6144 -> NaN98 Invalid_operation -dqfma2673 fma sNaN97 NaN 0e+6144 -> NaN97 Invalid_operation -dqfma2674 fma sNaN16 sNaN94 0e+6144 -> NaN16 Invalid_operation -dqfma2675 fma NaN95 sNaN93 0e+6144 -> NaN93 Invalid_operation -dqfma2676 fma -Inf sNaN92 0e+6144 -> NaN92 Invalid_operation -dqfma2677 fma 088 sNaN91 0e+6144 -> NaN91 Invalid_operation -dqfma2678 fma Inf sNaN90 0e+6144 -> NaN90 Invalid_operation -dqfma2679 fma NaN sNaN89 0e+6144 -> NaN89 Invalid_operation - -dqfma2681 fma -NaN9 -Inf 0e+6144 -> -NaN9 -dqfma2682 fma -NaN8 999 0e+6144 -> -NaN8 -dqfma2683 fma -NaN71 Inf 0e+6144 -> -NaN71 -dqfma2684 fma -NaN6 -NaN5 0e+6144 -> -NaN6 -dqfma2685 fma -Inf -NaN4 0e+6144 -> -NaN4 -dqfma2686 fma -999 -NaN33 0e+6144 -> -NaN33 -dqfma2687 fma Inf -NaN2 0e+6144 -> -NaN2 - -dqfma2691 fma -sNaN99 -Inf 0e+6144 -> -NaN99 Invalid_operation -dqfma2692 fma -sNaN98 -11 0e+6144 -> -NaN98 Invalid_operation -dqfma2693 fma -sNaN97 NaN 0e+6144 -> -NaN97 Invalid_operation -dqfma2694 fma -sNaN16 -sNaN94 0e+6144 -> -NaN16 Invalid_operation -dqfma2695 fma -NaN95 -sNaN93 0e+6144 -> -NaN93 Invalid_operation -dqfma2696 fma -Inf -sNaN92 0e+6144 -> -NaN92 Invalid_operation -dqfma2697 fma 088 -sNaN91 0e+6144 -> -NaN91 Invalid_operation -dqfma2698 fma Inf -sNaN90 0e+6144 -> -NaN90 Invalid_operation -dqfma2699 fma -NaN -sNaN89 0e+6144 -> -NaN89 Invalid_operation - -dqfma2701 fma -NaN -Inf 0e+6144 -> -NaN -dqfma2702 fma -NaN 999 0e+6144 -> -NaN -dqfma2703 fma -NaN Inf 0e+6144 -> -NaN -dqfma2704 fma -NaN -NaN 0e+6144 -> -NaN -dqfma2705 fma -Inf -NaN0 0e+6144 -> -NaN -dqfma2706 fma -999 -NaN 0e+6144 -> -NaN -dqfma2707 fma Inf -NaN 0e+6144 -> -NaN - -dqfma2711 fma -sNaN -Inf 0e+6144 -> -NaN Invalid_operation -dqfma2712 fma -sNaN -11 0e+6144 -> -NaN Invalid_operation -dqfma2713 fma -sNaN00 NaN 0e+6144 -> -NaN Invalid_operation -dqfma2714 fma -sNaN -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2715 fma -NaN -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2716 fma -Inf -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2717 fma 088 -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2718 fma Inf -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2719 fma -NaN -sNaN 0e+6144 -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results --- signs -dqfma2751 fma 1e+4277 1e+3311 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2752 fma 1e+4277 -1e+3311 0e+6144 -> -Infinity Overflow Inexact Rounded -dqfma2753 fma -1e+4277 1e+3311 0e+6144 -> -Infinity Overflow Inexact Rounded -dqfma2754 fma -1e+4277 -1e+3311 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2755 fma 1e-4277 1e-3311 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2756 fma 1e-4277 -1e-3311 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2757 fma -1e-4277 1e-3311 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2758 fma -1e-4277 -1e-3311 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dqfma2760 fma 1e-6069 1e-101 0e+6144 -> 1E-6170 Subnormal -dqfma2761 fma 1e-6069 1e-102 0e+6144 -> 1E-6171 Subnormal -dqfma2762 fma 1e-6069 1e-103 0e+6144 -> 1E-6172 Subnormal -dqfma2763 fma 1e-6069 1e-104 0e+6144 -> 1E-6173 Subnormal -dqfma2764 fma 1e-6069 1e-105 0e+6144 -> 1E-6174 Subnormal -dqfma2765 fma 1e-6069 1e-106 0e+6144 -> 1E-6175 Subnormal -dqfma2766 fma 1e-6069 1e-107 0e+6144 -> 1E-6176 Subnormal -dqfma2767 fma 1e-6069 1e-108 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2768 fma 1e-6069 1e-109 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2769 fma 1e-6069 1e-110 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -dqfma2770 fma 1e+40 1e+6101 0e+6144 -> 1.000000000000000000000000000000E+6141 Clamped -dqfma2771 fma 1e+40 1e+6102 0e+6144 -> 1.0000000000000000000000000000000E+6142 Clamped -dqfma2772 fma 1e+40 1e+6103 0e+6144 -> 1.00000000000000000000000000000000E+6143 Clamped -dqfma2773 fma 1e+40 1e+6104 0e+6144 -> 1.000000000000000000000000000000000E+6144 Clamped -dqfma2774 fma 1e+40 1e+6105 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2775 fma 1e+40 1e+6106 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2776 fma 1e+40 1e+6107 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2777 fma 1e+40 1e+6108 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2778 fma 1e+40 1e+6109 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2779 fma 1e+40 1e+6110 0e+6144 -> Infinity Overflow Inexact Rounded - -dqfma2801 fma 1.0000E-6172 1 0e+6144 -> 1.0000E-6172 Subnormal -dqfma2802 fma 1.000E-6172 1e-1 0e+6144 -> 1.000E-6173 Subnormal -dqfma2803 fma 1.00E-6172 1e-2 0e+6144 -> 1.00E-6174 Subnormal -dqfma2804 fma 1.0E-6172 1e-3 0e+6144 -> 1.0E-6175 Subnormal -dqfma2805 fma 1.0E-6172 1e-4 0e+6144 -> 1E-6176 Subnormal Rounded -dqfma2806 fma 1.3E-6172 1e-4 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqfma2807 fma 1.5E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2808 fma 1.7E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2809 fma 2.3E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2810 fma 2.5E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2811 fma 2.7E-6172 1e-4 0e+6144 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqfma2812 fma 1.49E-6172 1e-4 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqfma2813 fma 1.50E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2814 fma 1.51E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2815 fma 2.49E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2816 fma 2.50E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2817 fma 2.51E-6172 1e-4 0e+6144 -> 3E-6176 Underflow Subnormal Inexact Rounded - -dqfma2818 fma 1E-6172 1e-4 0e+6144 -> 1E-6176 Subnormal -dqfma2819 fma 3E-6172 1e-5 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2820 fma 5E-6172 1e-5 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2821 fma 7E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqfma2822 fma 9E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqfma2823 fma 9.9E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded - -dqfma2824 fma 1E-6172 -1e-4 0e+6144 -> -1E-6176 Subnormal -dqfma2825 fma 3E-6172 -1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2826 fma -5E-6172 1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2827 fma 7E-6172 -1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqfma2828 fma -9E-6172 1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqfma2829 fma 9.9E-6172 -1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqfma2830 fma 3.0E-6172 -1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqfma2831 fma 1.0E-5977 1e-200 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2832 fma 1.0E-5977 1e-199 0e+6144 -> 1E-6176 Subnormal Rounded -dqfma2833 fma 1.0E-5977 1e-198 0e+6144 -> 1.0E-6175 Subnormal -dqfma2834 fma 2.0E-5977 2e-198 0e+6144 -> 4.0E-6175 Subnormal -dqfma2835 fma 4.0E-5977 4e-198 0e+6144 -> 1.60E-6174 Subnormal -dqfma2836 fma 10.0E-5977 10e-198 0e+6144 -> 1.000E-6173 Subnormal -dqfma2837 fma 30.0E-5977 30e-198 0e+6144 -> 9.000E-6173 Subnormal -dqfma2838 fma 40.0E-5982 40e-166 0e+6144 -> 1.6000E-6145 Subnormal -dqfma2839 fma 40.0E-5982 40e-165 0e+6144 -> 1.6000E-6144 Subnormal -dqfma2840 fma 40.0E-5982 40e-164 0e+6144 -> 1.6000E-6143 - --- Long operand overflow may be a different path -dqfma2870 fma 100 9.999E+6143 0e+6144 -> Infinity Inexact Overflow Rounded -dqfma2871 fma 100 -9.999E+6143 0e+6144 -> -Infinity Inexact Overflow Rounded -dqfma2872 fma 9.999E+6143 100 0e+6144 -> Infinity Inexact Overflow Rounded -dqfma2873 fma -9.999E+6143 100 0e+6144 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -dqfma2881 fma 1.2347E-6133 1.2347E-40 0e+6144 -> 1.524E-6173 Inexact Rounded Subnormal Underflow -dqfma2882 fma 1.234E-6133 1.234E-40 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqfma2883 fma 1.23E-6133 1.23E-40 0e+6144 -> 1.513E-6173 Inexact Rounded Subnormal Underflow -dqfma2884 fma 1.2E-6133 1.2E-40 0e+6144 -> 1.44E-6173 Subnormal -dqfma2885 fma 1.2E-6133 1.2E-41 0e+6144 -> 1.44E-6174 Subnormal -dqfma2886 fma 1.2E-6133 1.2E-42 0e+6144 -> 1.4E-6175 Subnormal Inexact Rounded Underflow -dqfma2887 fma 1.2E-6133 1.3E-42 0e+6144 -> 1.6E-6175 Subnormal Inexact Rounded Underflow -dqfma2888 fma 1.3E-6133 1.3E-42 0e+6144 -> 1.7E-6175 Subnormal Inexact Rounded Underflow -dqfma2889 fma 1.3E-6133 1.3E-43 0e+6144 -> 2E-6176 Subnormal Inexact Rounded Underflow -dqfma2890 fma 1.3E-6134 1.3E-43 0e+6144 -> 0E-6176 Clamped Subnormal Inexact Rounded Underflow - -dqfma2891 fma 1.2345E-39 1.234E-6133 0e+6144 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow -dqfma2892 fma 1.23456E-39 1.234E-6133 0e+6144 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow -dqfma2893 fma 1.2345E-40 1.234E-6133 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqfma2894 fma 1.23456E-40 1.234E-6133 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqfma2895 fma 1.2345E-41 1.234E-6133 0e+6144 -> 1.52E-6174 Inexact Rounded Subnormal Underflow -dqfma2896 fma 1.23456E-41 1.234E-6133 0e+6144 -> 1.52E-6174 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow --- prove operands are exact -dqfma2906 fma 9.999999999999999999999999999999999E-6143 1 0e+6144 -> 9.999999999999999999999999999999999E-6143 -dqfma2907 fma 1 0.09999999999999999999999999999999999 0e+6144 -> 0.09999999999999999999999999999999999 --- the next rounds to Nmin -dqfma2908 fma 9.999999999999999999999999999999999E-6143 0.09999999999999999999999999999999999 0e+6144 -> 1.000000000000000000000000000000000E-6143 Underflow Inexact Subnormal Rounded - --- hugest -dqfma2909 fma 9999999999999999999999999999999999 9999999999999999999999999999999999 0e+6144 -> 9.999999999999999999999999999999998E+67 Inexact Rounded - --- Examples from SQL proposal (Krishna Kulkarni) -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 -dqfma21001 fma 130E-2 120E-2 0e+6144 -> 1.5600 -dqfma21002 fma 130E-2 12E-1 0e+6144 -> 1.560 -dqfma21003 fma 130E-2 1E0 0e+6144 -> 1.30 -dqfma21004 fma 1E2 1E4 0e+6144 -> 1E+6 - --- Null tests -dqfma2990 fma 10 # 0e+6144 -> NaN Invalid_operation -dqfma2991 fma # 10 0e+6144 -> NaN Invalid_operation - - --- ADDITION TESTS ------------------------------------------------------ -rounding: half_even - --- [first group are 'quick confidence check'] -dqadd3001 fma 1 1 1 -> 2 -dqadd3002 fma 1 2 3 -> 5 -dqadd3003 fma 1 '5.75' '3.3' -> 9.05 -dqadd3004 fma 1 '5' '-3' -> 2 -dqadd3005 fma 1 '-5' '-3' -> -8 -dqadd3006 fma 1 '-7' '2.5' -> -4.5 -dqadd3007 fma 1 '0.7' '0.3' -> 1.0 -dqadd3008 fma 1 '1.25' '1.25' -> 2.50 -dqadd3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' -dqadd3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' - --- 1234567890123456 1234567890123456 -dqadd3011 fma 1 '0.4444444444444444444444444444444446' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Inexact Rounded -dqadd3012 fma 1 '0.4444444444444444444444444444444445' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Rounded -dqadd3013 fma 1 '0.4444444444444444444444444444444444' '0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' -dqadd3014 fma 1 '4444444444444444444444444444444444' '0.49' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd3015 fma 1 '4444444444444444444444444444444444' '0.499' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd3016 fma 1 '4444444444444444444444444444444444' '0.4999' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd3017 fma 1 '4444444444444444444444444444444444' '0.5000' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd3018 fma 1 '4444444444444444444444444444444444' '0.5001' -> '4444444444444444444444444444444445' Inexact Rounded -dqadd3019 fma 1 '4444444444444444444444444444444444' '0.501' -> '4444444444444444444444444444444445' Inexact Rounded -dqadd3020 fma 1 '4444444444444444444444444444444444' '0.51' -> '4444444444444444444444444444444445' Inexact Rounded - -dqadd3021 fma 1 0 1 -> 1 -dqadd3022 fma 1 1 1 -> 2 -dqadd3023 fma 1 2 1 -> 3 -dqadd3024 fma 1 3 1 -> 4 -dqadd3025 fma 1 4 1 -> 5 -dqadd3026 fma 1 5 1 -> 6 -dqadd3027 fma 1 6 1 -> 7 -dqadd3028 fma 1 7 1 -> 8 -dqadd3029 fma 1 8 1 -> 9 -dqadd3030 fma 1 9 1 -> 10 - --- some carrying effects -dqadd3031 fma 1 '0.9998' '0.0000' -> '0.9998' -dqadd3032 fma 1 '0.9998' '0.0001' -> '0.9999' -dqadd3033 fma 1 '0.9998' '0.0002' -> '1.0000' -dqadd3034 fma 1 '0.9998' '0.0003' -> '1.0001' - -dqadd3035 fma 1 '70' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3036 fma 1 '700' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3037 fma 1 '7000' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3038 fma 1 '70000' '10000e+34' -> '1.000000000000000000000000000000001E+38' Inexact Rounded -dqadd3039 fma 1 '700000' '10000e+34' -> '1.000000000000000000000000000000007E+38' Rounded - --- symmetry: -dqadd3040 fma 1 '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3041 fma 1 '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3042 fma 1 '10000e+34' '7000' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3044 fma 1 '10000e+34' '70000' -> '1.000000000000000000000000000000001E+38' Inexact Rounded -dqadd3045 fma 1 '10000e+34' '700000' -> '1.000000000000000000000000000000007E+38' Rounded - --- same, without rounding -dqadd3046 fma 1 '10000e+9' '7' -> '10000000000007' -dqadd3047 fma 1 '10000e+9' '70' -> '10000000000070' -dqadd3048 fma 1 '10000e+9' '700' -> '10000000000700' -dqadd3049 fma 1 '10000e+9' '7000' -> '10000000007000' -dqadd3050 fma 1 '10000e+9' '70000' -> '10000000070000' -dqadd3051 fma 1 '10000e+9' '700000' -> '10000000700000' -dqadd3052 fma 1 '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -dqadd3053 fma 1 '12' '7.00' -> '19.00' -dqadd3054 fma 1 '1.3' '-1.07' -> '0.23' -dqadd3055 fma 1 '1.3' '-1.30' -> '0.00' -dqadd3056 fma 1 '1.3' '-2.07' -> '-0.77' -dqadd3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' - --- leading zero preservation -dqadd3061 fma 1 1 '0.0001' -> '1.0001' -dqadd3062 fma 1 1 '0.00001' -> '1.00001' -dqadd3063 fma 1 1 '0.000001' -> '1.000001' -dqadd3064 fma 1 1 '0.0000001' -> '1.0000001' -dqadd3065 fma 1 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -dqadd3070 fma 1 1 0 -> 1 -dqadd3071 fma 1 1 0. -> 1 -dqadd3072 fma 1 1 .0 -> 1.0 -dqadd3073 fma 1 1 0.0 -> 1.0 -dqadd3074 fma 1 1 0.00 -> 1.00 -dqadd3075 fma 1 0 1 -> 1 -dqadd3076 fma 1 0. 1 -> 1 -dqadd3077 fma 1 .0 1 -> 1.0 -dqadd3078 fma 1 0.0 1 -> 1.0 -dqadd3079 fma 1 0.00 1 -> 1.00 - --- some carries -dqadd3080 fma 1 999999998 1 -> 999999999 -dqadd3081 fma 1 999999999 1 -> 1000000000 -dqadd3082 fma 1 99999999 1 -> 100000000 -dqadd3083 fma 1 9999999 1 -> 10000000 -dqadd3084 fma 1 999999 1 -> 1000000 -dqadd3085 fma 1 99999 1 -> 100000 -dqadd3086 fma 1 9999 1 -> 10000 -dqadd3087 fma 1 999 1 -> 1000 -dqadd3088 fma 1 99 1 -> 100 -dqadd3089 fma 1 9 1 -> 10 - - --- more LHS swaps -dqadd3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' -dqadd3091 fma 1 '-56267E-6' 0 -> '-0.056267' -dqadd3092 fma 1 '-56267E-5' 0 -> '-0.56267' -dqadd3093 fma 1 '-56267E-4' 0 -> '-5.6267' -dqadd3094 fma 1 '-56267E-3' 0 -> '-56.267' -dqadd3095 fma 1 '-56267E-2' 0 -> '-562.67' -dqadd3096 fma 1 '-56267E-1' 0 -> '-5626.7' -dqadd3097 fma 1 '-56267E-0' 0 -> '-56267' -dqadd3098 fma 1 '-5E-10' 0 -> '-5E-10' -dqadd3099 fma 1 '-5E-7' 0 -> '-5E-7' -dqadd3100 fma 1 '-5E-6' 0 -> '-0.000005' -dqadd3101 fma 1 '-5E-5' 0 -> '-0.00005' -dqadd3102 fma 1 '-5E-4' 0 -> '-0.0005' -dqadd3103 fma 1 '-5E-1' 0 -> '-0.5' -dqadd3104 fma 1 '-5E0' 0 -> '-5' -dqadd3105 fma 1 '-5E1' 0 -> '-50' -dqadd3106 fma 1 '-5E5' 0 -> '-500000' -dqadd3107 fma 1 '-5E33' 0 -> '-5000000000000000000000000000000000' -dqadd3108 fma 1 '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded -dqadd3109 fma 1 '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded -dqadd3110 fma 1 '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded -dqadd3111 fma 1 '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded - --- more RHS swaps -dqadd3113 fma 1 0 '-56267E-10' -> '-0.0000056267' -dqadd3114 fma 1 0 '-56267E-6' -> '-0.056267' -dqadd3116 fma 1 0 '-56267E-5' -> '-0.56267' -dqadd3117 fma 1 0 '-56267E-4' -> '-5.6267' -dqadd3119 fma 1 0 '-56267E-3' -> '-56.267' -dqadd3120 fma 1 0 '-56267E-2' -> '-562.67' -dqadd3121 fma 1 0 '-56267E-1' -> '-5626.7' -dqadd3122 fma 1 0 '-56267E-0' -> '-56267' -dqadd3123 fma 1 0 '-5E-10' -> '-5E-10' -dqadd3124 fma 1 0 '-5E-7' -> '-5E-7' -dqadd3125 fma 1 0 '-5E-6' -> '-0.000005' -dqadd3126 fma 1 0 '-5E-5' -> '-0.00005' -dqadd3127 fma 1 0 '-5E-4' -> '-0.0005' -dqadd3128 fma 1 0 '-5E-1' -> '-0.5' -dqadd3129 fma 1 0 '-5E0' -> '-5' -dqadd3130 fma 1 0 '-5E1' -> '-50' -dqadd3131 fma 1 0 '-5E5' -> '-500000' -dqadd3132 fma 1 0 '-5E33' -> '-5000000000000000000000000000000000' -dqadd3133 fma 1 0 '-5E34' -> '-5.000000000000000000000000000000000E+34' Rounded -dqadd3134 fma 1 0 '-5E35' -> '-5.000000000000000000000000000000000E+35' Rounded -dqadd3135 fma 1 0 '-5E36' -> '-5.000000000000000000000000000000000E+36' Rounded -dqadd3136 fma 1 0 '-5E100' -> '-5.000000000000000000000000000000000E+100' Rounded - --- related -dqadd3137 fma 1 1 '0E-39' -> '1.000000000000000000000000000000000' Rounded -dqadd3138 fma 1 -1 '0E-39' -> '-1.000000000000000000000000000000000' Rounded -dqadd3139 fma 1 '0E-39' 1 -> '1.000000000000000000000000000000000' Rounded -dqadd3140 fma 1 '0E-39' -1 -> '-1.000000000000000000000000000000000' Rounded -dqadd3141 fma 1 1E+29 0.0000 -> '100000000000000000000000000000.0000' -dqadd3142 fma 1 1E+29 0.00000 -> '100000000000000000000000000000.0000' Rounded -dqadd3143 fma 1 0.000 1E+30 -> '1000000000000000000000000000000.000' -dqadd3144 fma 1 0.0000 1E+30 -> '1000000000000000000000000000000.000' Rounded - --- [some of the next group are really constructor tests] -dqadd3146 fma 1 '00.0' 0 -> '0.0' -dqadd3147 fma 1 '0.00' 0 -> '0.00' -dqadd3148 fma 1 0 '0.00' -> '0.00' -dqadd3149 fma 1 0 '00.0' -> '0.0' -dqadd3150 fma 1 '00.0' '0.00' -> '0.00' -dqadd3151 fma 1 '0.00' '00.0' -> '0.00' -dqadd3152 fma 1 '3' '.3' -> '3.3' -dqadd3153 fma 1 '3.' '.3' -> '3.3' -dqadd3154 fma 1 '3.0' '.3' -> '3.3' -dqadd3155 fma 1 '3.00' '.3' -> '3.30' -dqadd3156 fma 1 '3' '3' -> '6' -dqadd3157 fma 1 '3' '+3' -> '6' -dqadd3158 fma 1 '3' '-3' -> '0' -dqadd3159 fma 1 '0.3' '-0.3' -> '0.0' -dqadd3160 fma 1 '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -dqadd3161 fma 1 '1E+12' '-1' -> '999999999999' -dqadd3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' -dqadd3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' -dqadd3164 fma 1 '-1' '1E+12' -> '999999999999' -dqadd3165 fma 1 '7E+12' '-1' -> '6999999999999' -dqadd3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' -dqadd3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' -dqadd3168 fma 1 '-1' '7E+12' -> '6999999999999' - -rounding: half_up -dqadd3170 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555567' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd3171 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555566' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd3172 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555565' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd3173 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555564' -> '5.000000000000000000000000000000000' Inexact Rounded -dqadd3174 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555553' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd3175 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555552' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd3176 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555551' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd3177 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555550' -> '4.999999999999999999999999999999999' Rounded -dqadd3178 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555545' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd3179 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555544' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd3180 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555543' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd3181 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555542' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd3182 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555541' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd3183 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555540' -> '4.999999999999999999999999999999998' Rounded - --- and some more, including residue effects and different roundings -rounding: half_up -dqadd3200 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd3201 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3202 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3203 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3204 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3205 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3206 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3207 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3208 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3209 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3210 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3211 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3212 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3213 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3214 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3215 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3216 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd3217 fma 1 '1231234567890123456784560123456789' 1.000000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3218 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3219 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded - -rounding: half_even -dqadd3220 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd3221 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3222 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3223 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3224 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3225 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3226 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3227 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3228 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3229 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3230 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3231 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3232 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3233 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3234 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3235 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3236 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd3237 fma 1 '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3238 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3239 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded --- critical few with even bottom digit... -dqadd3240 fma 1 '1231234567890123456784560123456788' 0.499999999 -> '1231234567890123456784560123456788' Inexact Rounded -dqadd3241 fma 1 '1231234567890123456784560123456788' 0.5 -> '1231234567890123456784560123456788' Inexact Rounded -dqadd3242 fma 1 '1231234567890123456784560123456788' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded - -rounding: down -dqadd3250 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd3251 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3252 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3253 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3254 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3255 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3256 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3257 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3258 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3259 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3260 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3261 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3262 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3263 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3264 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3265 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3266 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd3267 fma 1 '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3268 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3269 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_up -dqadd3301 fma 1 -1 1 -> 0 -dqadd3302 fma 1 0 1 -> 1 -dqadd3303 fma 1 1 1 -> 2 -dqadd3304 fma 1 12 1 -> 13 -dqadd3305 fma 1 98 1 -> 99 -dqadd3306 fma 1 99 1 -> 100 -dqadd3307 fma 1 100 1 -> 101 -dqadd3308 fma 1 101 1 -> 102 -dqadd3309 fma 1 -1 -1 -> -2 -dqadd3310 fma 1 0 -1 -> -1 -dqadd3311 fma 1 1 -1 -> 0 -dqadd3312 fma 1 12 -1 -> 11 -dqadd3313 fma 1 98 -1 -> 97 -dqadd3314 fma 1 99 -1 -> 98 -dqadd3315 fma 1 100 -1 -> 99 -dqadd3316 fma 1 101 -1 -> 100 - -dqadd3321 fma 1 -0.01 0.01 -> 0.00 -dqadd3322 fma 1 0.00 0.01 -> 0.01 -dqadd3323 fma 1 0.01 0.01 -> 0.02 -dqadd3324 fma 1 0.12 0.01 -> 0.13 -dqadd3325 fma 1 0.98 0.01 -> 0.99 -dqadd3326 fma 1 0.99 0.01 -> 1.00 -dqadd3327 fma 1 1.00 0.01 -> 1.01 -dqadd3328 fma 1 1.01 0.01 -> 1.02 -dqadd3329 fma 1 -0.01 -0.01 -> -0.02 -dqadd3330 fma 1 0.00 -0.01 -> -0.01 -dqadd3331 fma 1 0.01 -0.01 -> 0.00 -dqadd3332 fma 1 0.12 -0.01 -> 0.11 -dqadd3333 fma 1 0.98 -0.01 -> 0.97 -dqadd3334 fma 1 0.99 -0.01 -> 0.98 -dqadd3335 fma 1 1.00 -0.01 -> 0.99 -dqadd3336 fma 1 1.01 -0.01 -> 1.00 - --- some more cases where adding 0 affects the coefficient -dqadd3340 fma 1 1E+3 0 -> 1000 -dqadd3341 fma 1 1E+33 0 -> 1000000000000000000000000000000000 -dqadd3342 fma 1 1E+34 0 -> 1.000000000000000000000000000000000E+34 Rounded -dqadd3343 fma 1 1E+35 0 -> 1.000000000000000000000000000000000E+35 Rounded --- which simply follow from these cases ... -dqadd3344 fma 1 1E+3 1 -> 1001 -dqadd3345 fma 1 1E+33 1 -> 1000000000000000000000000000000001 -dqadd3346 fma 1 1E+34 1 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd3347 fma 1 1E+35 1 -> 1.000000000000000000000000000000000E+35 Inexact Rounded -dqadd3348 fma 1 1E+3 7 -> 1007 -dqadd3349 fma 1 1E+33 7 -> 1000000000000000000000000000000007 -dqadd3350 fma 1 1E+34 7 -> 1.000000000000000000000000000000001E+34 Inexact Rounded -dqadd3351 fma 1 1E+35 7 -> 1.000000000000000000000000000000000E+35 Inexact Rounded - --- tryzeros cases -rounding: half_up -dqadd3360 fma 1 0E+50 10000E+1 -> 1.0000E+5 -dqadd3361 fma 1 0E-50 10000E+1 -> 100000.0000000000000000000000000000 Rounded -dqadd3362 fma 1 10000E+1 0E-50 -> 100000.0000000000000000000000000000 Rounded -dqadd3363 fma 1 10000E+1 10000E-50 -> 100000.0000000000000000000000000000 Rounded Inexact -dqadd3364 fma 1 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0E+6111 --- 1 234567890123456789012345678901234 - --- a curiosity from JSR 13 testing -rounding: half_down -dqadd3370 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd3371 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact -rounding: half_up -dqadd3372 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd3373 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact -rounding: half_even -dqadd3374 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd3375 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact - --- ulp replacement tests -dqadd3400 fma 1 1 77e-32 -> 1.00000000000000000000000000000077 -dqadd3401 fma 1 1 77e-33 -> 1.000000000000000000000000000000077 -dqadd3402 fma 1 1 77e-34 -> 1.000000000000000000000000000000008 Inexact Rounded -dqadd3403 fma 1 1 77e-35 -> 1.000000000000000000000000000000001 Inexact Rounded -dqadd3404 fma 1 1 77e-36 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd3405 fma 1 1 77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd3406 fma 1 1 77e-299 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd3410 fma 1 10 77e-32 -> 10.00000000000000000000000000000077 -dqadd3411 fma 1 10 77e-33 -> 10.00000000000000000000000000000008 Inexact Rounded -dqadd3412 fma 1 10 77e-34 -> 10.00000000000000000000000000000001 Inexact Rounded -dqadd3413 fma 1 10 77e-35 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3414 fma 1 10 77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3415 fma 1 10 77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3416 fma 1 10 77e-299 -> 10.00000000000000000000000000000000 Inexact Rounded - -dqadd3420 fma 1 77e-32 1 -> 1.00000000000000000000000000000077 -dqadd3421 fma 1 77e-33 1 -> 1.000000000000000000000000000000077 -dqadd3422 fma 1 77e-34 1 -> 1.000000000000000000000000000000008 Inexact Rounded -dqadd3423 fma 1 77e-35 1 -> 1.000000000000000000000000000000001 Inexact Rounded -dqadd3424 fma 1 77e-36 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd3425 fma 1 77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd3426 fma 1 77e-299 1 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd3430 fma 1 77e-32 10 -> 10.00000000000000000000000000000077 -dqadd3431 fma 1 77e-33 10 -> 10.00000000000000000000000000000008 Inexact Rounded -dqadd3432 fma 1 77e-34 10 -> 10.00000000000000000000000000000001 Inexact Rounded -dqadd3433 fma 1 77e-35 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3434 fma 1 77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3435 fma 1 77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3436 fma 1 77e-299 10 -> 10.00000000000000000000000000000000 Inexact Rounded - --- negative ulps -dqadd36440 fma 1 1 -77e-32 -> 0.99999999999999999999999999999923 -dqadd36441 fma 1 1 -77e-33 -> 0.999999999999999999999999999999923 -dqadd36442 fma 1 1 -77e-34 -> 0.9999999999999999999999999999999923 -dqadd36443 fma 1 1 -77e-35 -> 0.9999999999999999999999999999999992 Inexact Rounded -dqadd36444 fma 1 1 -77e-36 -> 0.9999999999999999999999999999999999 Inexact Rounded -dqadd36445 fma 1 1 -77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd36446 fma 1 1 -77e-99 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd36450 fma 1 10 -77e-32 -> 9.99999999999999999999999999999923 -dqadd36451 fma 1 10 -77e-33 -> 9.999999999999999999999999999999923 -dqadd36452 fma 1 10 -77e-34 -> 9.999999999999999999999999999999992 Inexact Rounded -dqadd36453 fma 1 10 -77e-35 -> 9.999999999999999999999999999999999 Inexact Rounded -dqadd36454 fma 1 10 -77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd36455 fma 1 10 -77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd36456 fma 1 10 -77e-99 -> 10.00000000000000000000000000000000 Inexact Rounded - -dqadd36460 fma 1 -77e-32 1 -> 0.99999999999999999999999999999923 -dqadd36461 fma 1 -77e-33 1 -> 0.999999999999999999999999999999923 -dqadd36462 fma 1 -77e-34 1 -> 0.9999999999999999999999999999999923 -dqadd36463 fma 1 -77e-35 1 -> 0.9999999999999999999999999999999992 Inexact Rounded -dqadd36464 fma 1 -77e-36 1 -> 0.9999999999999999999999999999999999 Inexact Rounded -dqadd36465 fma 1 -77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd36466 fma 1 -77e-99 1 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd36470 fma 1 -77e-32 10 -> 9.99999999999999999999999999999923 -dqadd36471 fma 1 -77e-33 10 -> 9.999999999999999999999999999999923 -dqadd36472 fma 1 -77e-34 10 -> 9.999999999999999999999999999999992 Inexact Rounded -dqadd36473 fma 1 -77e-35 10 -> 9.999999999999999999999999999999999 Inexact Rounded -dqadd36474 fma 1 -77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd36475 fma 1 -77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd36476 fma 1 -77e-99 10 -> 10.00000000000000000000000000000000 Inexact Rounded - --- negative ulps -dqadd36480 fma 1 -1 77e-32 -> -0.99999999999999999999999999999923 -dqadd36481 fma 1 -1 77e-33 -> -0.999999999999999999999999999999923 -dqadd36482 fma 1 -1 77e-34 -> -0.9999999999999999999999999999999923 -dqadd36483 fma 1 -1 77e-35 -> -0.9999999999999999999999999999999992 Inexact Rounded -dqadd36484 fma 1 -1 77e-36 -> -0.9999999999999999999999999999999999 Inexact Rounded -dqadd36485 fma 1 -1 77e-37 -> -1.000000000000000000000000000000000 Inexact Rounded -dqadd36486 fma 1 -1 77e-99 -> -1.000000000000000000000000000000000 Inexact Rounded - -dqadd36490 fma 1 -10 77e-32 -> -9.99999999999999999999999999999923 -dqadd36491 fma 1 -10 77e-33 -> -9.999999999999999999999999999999923 -dqadd36492 fma 1 -10 77e-34 -> -9.999999999999999999999999999999992 Inexact Rounded -dqadd36493 fma 1 -10 77e-35 -> -9.999999999999999999999999999999999 Inexact Rounded -dqadd36494 fma 1 -10 77e-36 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd36495 fma 1 -10 77e-37 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd36496 fma 1 -10 77e-99 -> -10.00000000000000000000000000000000 Inexact Rounded - -dqadd36500 fma 1 77e-32 -1 -> -0.99999999999999999999999999999923 -dqadd36501 fma 1 77e-33 -1 -> -0.999999999999999999999999999999923 -dqadd36502 fma 1 77e-34 -1 -> -0.9999999999999999999999999999999923 -dqadd36503 fma 1 77e-35 -1 -> -0.9999999999999999999999999999999992 Inexact Rounded -dqadd36504 fma 1 77e-36 -1 -> -0.9999999999999999999999999999999999 Inexact Rounded -dqadd36505 fma 1 77e-37 -1 -> -1.000000000000000000000000000000000 Inexact Rounded -dqadd36506 fma 1 77e-99 -1 -> -1.000000000000000000000000000000000 Inexact Rounded - -dqadd36510 fma 1 77e-32 -10 -> -9.99999999999999999999999999999923 -dqadd36511 fma 1 77e-33 -10 -> -9.999999999999999999999999999999923 -dqadd36512 fma 1 77e-34 -10 -> -9.999999999999999999999999999999992 Inexact Rounded -dqadd36513 fma 1 77e-35 -10 -> -9.999999999999999999999999999999999 Inexact Rounded -dqadd36514 fma 1 77e-36 -10 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd36515 fma 1 77e-37 -10 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd36516 fma 1 77e-99 -10 -> -10.00000000000000000000000000000000 Inexact Rounded - --- and some more residue effects and different roundings -rounding: half_up -dqadd36540 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd36541 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36542 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36543 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36544 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36545 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36546 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36547 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36548 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36549 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36550 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36551 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36552 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36553 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36554 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36555 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36556 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd36557 fma 1 '9876543219876543216543210123456789' 1.000000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36558 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36559 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - -rounding: half_even -dqadd36560 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd36561 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36562 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36563 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36564 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36565 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36566 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36567 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36568 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36569 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36570 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36571 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36572 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36573 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36574 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36575 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36576 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd36577 fma 1 '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36578 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36579 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - --- critical few with even bottom digit... -dqadd37540 fma 1 '9876543219876543216543210123456788' 0.499999999 -> '9876543219876543216543210123456788' Inexact Rounded -dqadd37541 fma 1 '9876543219876543216543210123456788' 0.5 -> '9876543219876543216543210123456788' Inexact Rounded -dqadd37542 fma 1 '9876543219876543216543210123456788' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded - -rounding: down -dqadd37550 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd37551 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37552 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37553 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37554 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37555 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37556 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37557 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37558 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37559 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37560 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37561 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37562 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37563 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37564 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37565 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37566 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd37567 fma 1 '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd37568 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd37569 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - --- more zeros, etc. -rounding: half_even - -dqadd37701 fma 1 5.00 1.00E-3 -> 5.00100 -dqadd37702 fma 1 00.00 0.000 -> 0.000 -dqadd37703 fma 1 00.00 0E-3 -> 0.000 -dqadd37704 fma 1 0E-3 00.00 -> 0.000 - -dqadd37710 fma 1 0E+3 00.00 -> 0.00 -dqadd37711 fma 1 0E+3 00.0 -> 0.0 -dqadd37712 fma 1 0E+3 00. -> 0 -dqadd37713 fma 1 0E+3 00.E+1 -> 0E+1 -dqadd37714 fma 1 0E+3 00.E+2 -> 0E+2 -dqadd37715 fma 1 0E+3 00.E+3 -> 0E+3 -dqadd37716 fma 1 0E+3 00.E+4 -> 0E+3 -dqadd37717 fma 1 0E+3 00.E+5 -> 0E+3 -dqadd37718 fma 1 0E+3 -00.0 -> 0.0 -dqadd37719 fma 1 0E+3 -00. -> 0 -dqadd37731 fma 1 0E+3 -00.E+1 -> 0E+1 - -dqadd37720 fma 1 00.00 0E+3 -> 0.00 -dqadd37721 fma 1 00.0 0E+3 -> 0.0 -dqadd37722 fma 1 00. 0E+3 -> 0 -dqadd37723 fma 1 00.E+1 0E+3 -> 0E+1 -dqadd37724 fma 1 00.E+2 0E+3 -> 0E+2 -dqadd37725 fma 1 00.E+3 0E+3 -> 0E+3 -dqadd37726 fma 1 00.E+4 0E+3 -> 0E+3 -dqadd37727 fma 1 00.E+5 0E+3 -> 0E+3 -dqadd37728 fma 1 -00.00 0E+3 -> 0.00 -dqadd37729 fma 1 -00.0 0E+3 -> 0.0 -dqadd37730 fma 1 -00. 0E+3 -> 0 - -dqadd37732 fma 1 0 0 -> 0 -dqadd37733 fma 1 0 -0 -> 0 -dqadd37734 fma 1 -0 0 -> 0 -dqadd37735 fma 1 -0 -0 -> -0 -- IEEE 854 special case - -dqadd37736 fma 1 1 -1 -> 0 -dqadd37737 fma 1 -1 -1 -> -2 -dqadd37738 fma 1 1 1 -> 2 -dqadd37739 fma 1 -1 1 -> 0 - -dqadd37741 fma 1 0 -1 -> -1 -dqadd37742 fma 1 -0 -1 -> -1 -dqadd37743 fma 1 0 1 -> 1 -dqadd37744 fma 1 -0 1 -> 1 -dqadd37745 fma 1 -1 0 -> -1 -dqadd37746 fma 1 -1 -0 -> -1 -dqadd37747 fma 1 1 0 -> 1 -dqadd37748 fma 1 1 -0 -> 1 - -dqadd37751 fma 1 0.0 -1 -> -1.0 -dqadd37752 fma 1 -0.0 -1 -> -1.0 -dqadd37753 fma 1 0.0 1 -> 1.0 -dqadd37754 fma 1 -0.0 1 -> 1.0 -dqadd37755 fma 1 -1.0 0 -> -1.0 -dqadd37756 fma 1 -1.0 -0 -> -1.0 -dqadd37757 fma 1 1.0 0 -> 1.0 -dqadd37758 fma 1 1.0 -0 -> 1.0 - -dqadd37761 fma 1 0 -1.0 -> -1.0 -dqadd37762 fma 1 -0 -1.0 -> -1.0 -dqadd37763 fma 1 0 1.0 -> 1.0 -dqadd37764 fma 1 -0 1.0 -> 1.0 -dqadd37765 fma 1 -1 0.0 -> -1.0 -dqadd37766 fma 1 -1 -0.0 -> -1.0 -dqadd37767 fma 1 1 0.0 -> 1.0 -dqadd37768 fma 1 1 -0.0 -> 1.0 - -dqadd37771 fma 1 0.0 -1.0 -> -1.0 -dqadd37772 fma 1 -0.0 -1.0 -> -1.0 -dqadd37773 fma 1 0.0 1.0 -> 1.0 -dqadd37774 fma 1 -0.0 1.0 -> 1.0 -dqadd37775 fma 1 -1.0 0.0 -> -1.0 -dqadd37776 fma 1 -1.0 -0.0 -> -1.0 -dqadd37777 fma 1 1.0 0.0 -> 1.0 -dqadd37778 fma 1 1.0 -0.0 -> 1.0 - --- Specials -dqadd37780 fma 1 -Inf -Inf -> -Infinity -dqadd37781 fma 1 -Inf -1000 -> -Infinity -dqadd37782 fma 1 -Inf -1 -> -Infinity -dqadd37783 fma 1 -Inf -0 -> -Infinity -dqadd37784 fma 1 -Inf 0 -> -Infinity -dqadd37785 fma 1 -Inf 1 -> -Infinity -dqadd37786 fma 1 -Inf 1000 -> -Infinity -dqadd37787 fma 1 -1000 -Inf -> -Infinity -dqadd37788 fma 1 -Inf -Inf -> -Infinity -dqadd37789 fma 1 -1 -Inf -> -Infinity -dqadd37790 fma 1 -0 -Inf -> -Infinity -dqadd37791 fma 1 0 -Inf -> -Infinity -dqadd37792 fma 1 1 -Inf -> -Infinity -dqadd37793 fma 1 1000 -Inf -> -Infinity -dqadd37794 fma 1 Inf -Inf -> NaN Invalid_operation - -dqadd37800 fma 1 Inf -Inf -> NaN Invalid_operation -dqadd37801 fma 1 Inf -1000 -> Infinity -dqadd37802 fma 1 Inf -1 -> Infinity -dqadd37803 fma 1 Inf -0 -> Infinity -dqadd37804 fma 1 Inf 0 -> Infinity -dqadd37805 fma 1 Inf 1 -> Infinity -dqadd37806 fma 1 Inf 1000 -> Infinity -dqadd37807 fma 1 Inf Inf -> Infinity -dqadd37808 fma 1 -1000 Inf -> Infinity -dqadd37809 fma 1 -Inf Inf -> NaN Invalid_operation -dqadd37810 fma 1 -1 Inf -> Infinity -dqadd37811 fma 1 -0 Inf -> Infinity -dqadd37812 fma 1 0 Inf -> Infinity -dqadd37813 fma 1 1 Inf -> Infinity -dqadd37814 fma 1 1000 Inf -> Infinity -dqadd37815 fma 1 Inf Inf -> Infinity - -dqadd37821 fma 1 NaN -Inf -> NaN -dqadd37822 fma 1 NaN -1000 -> NaN -dqadd37823 fma 1 NaN -1 -> NaN -dqadd37824 fma 1 NaN -0 -> NaN -dqadd37825 fma 1 NaN 0 -> NaN -dqadd37826 fma 1 NaN 1 -> NaN -dqadd37827 fma 1 NaN 1000 -> NaN -dqadd37828 fma 1 NaN Inf -> NaN -dqadd37829 fma 1 NaN NaN -> NaN -dqadd37830 fma 1 -Inf NaN -> NaN -dqadd37831 fma 1 -1000 NaN -> NaN -dqadd37832 fma 1 -1 NaN -> NaN -dqadd37833 fma 1 -0 NaN -> NaN -dqadd37834 fma 1 0 NaN -> NaN -dqadd37835 fma 1 1 NaN -> NaN -dqadd37836 fma 1 1000 NaN -> NaN -dqadd37837 fma 1 Inf NaN -> NaN - -dqadd37841 fma 1 sNaN -Inf -> NaN Invalid_operation -dqadd37842 fma 1 sNaN -1000 -> NaN Invalid_operation -dqadd37843 fma 1 sNaN -1 -> NaN Invalid_operation -dqadd37844 fma 1 sNaN -0 -> NaN Invalid_operation -dqadd37845 fma 1 sNaN 0 -> NaN Invalid_operation -dqadd37846 fma 1 sNaN 1 -> NaN Invalid_operation -dqadd37847 fma 1 sNaN 1000 -> NaN Invalid_operation -dqadd37848 fma 1 sNaN NaN -> NaN Invalid_operation -dqadd37849 fma 1 sNaN sNaN -> NaN Invalid_operation -dqadd37850 fma 1 NaN sNaN -> NaN Invalid_operation -dqadd37851 fma 1 -Inf sNaN -> NaN Invalid_operation -dqadd37852 fma 1 -1000 sNaN -> NaN Invalid_operation -dqadd37853 fma 1 -1 sNaN -> NaN Invalid_operation -dqadd37854 fma 1 -0 sNaN -> NaN Invalid_operation -dqadd37855 fma 1 0 sNaN -> NaN Invalid_operation -dqadd37856 fma 1 1 sNaN -> NaN Invalid_operation -dqadd37857 fma 1 1000 sNaN -> NaN Invalid_operation -dqadd37858 fma 1 Inf sNaN -> NaN Invalid_operation -dqadd37859 fma 1 NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqadd37861 fma 1 NaN1 -Inf -> NaN1 -dqadd37862 fma 1 +NaN2 -1000 -> NaN2 -dqadd37863 fma 1 NaN3 1000 -> NaN3 -dqadd37864 fma 1 NaN4 Inf -> NaN4 -dqadd37865 fma 1 NaN5 +NaN6 -> NaN5 -dqadd37866 fma 1 -Inf NaN7 -> NaN7 -dqadd37867 fma 1 -1000 NaN8 -> NaN8 -dqadd37868 fma 1 1000 NaN9 -> NaN9 -dqadd37869 fma 1 Inf +NaN10 -> NaN10 -dqadd37871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation -dqadd37872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation -dqadd37873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation -dqadd37874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation -dqadd37875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation -dqadd37876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation -dqadd37877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation -dqadd37878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation -dqadd37879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation -dqadd37880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation -dqadd37881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqadd37882 fma 1 -NaN26 NaN28 -> -NaN26 -dqadd37883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqadd37884 fma 1 1000 -NaN30 -> -NaN30 -dqadd37885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Here we explore near the boundary of rounding a subnormal to Nmin -dqadd37575 fma 1 1E-6143 -1E-6176 -> 9.99999999999999999999999999999999E-6144 Subnormal -dqadd37576 fma 1 -1E-6143 +1E-6176 -> -9.99999999999999999999999999999999E-6144 Subnormal - --- check overflow edge case --- 1234567890123456 -dqadd37972 apply 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqadd37973 fma 1 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37974 fma 1 9999999999999999999999999999999999E+6111 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37975 fma 1 9999999999999999999999999999999999E+6111 1E+6111 -> Infinity Overflow Inexact Rounded -dqadd37976 fma 1 9999999999999999999999999999999999E+6111 9E+6110 -> Infinity Overflow Inexact Rounded -dqadd37977 fma 1 9999999999999999999999999999999999E+6111 8E+6110 -> Infinity Overflow Inexact Rounded -dqadd37978 fma 1 9999999999999999999999999999999999E+6111 7E+6110 -> Infinity Overflow Inexact Rounded -dqadd37979 fma 1 9999999999999999999999999999999999E+6111 6E+6110 -> Infinity Overflow Inexact Rounded -dqadd37980 fma 1 9999999999999999999999999999999999E+6111 5E+6110 -> Infinity Overflow Inexact Rounded -dqadd37981 fma 1 9999999999999999999999999999999999E+6111 4E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37982 fma 1 9999999999999999999999999999999999E+6111 3E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37983 fma 1 9999999999999999999999999999999999E+6111 2E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37984 fma 1 9999999999999999999999999999999999E+6111 1E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded - -dqadd37985 apply -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqadd37986 fma 1 -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37987 fma 1 -9999999999999999999999999999999999E+6111 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37988 fma 1 -9999999999999999999999999999999999E+6111 -1E+6111 -> -Infinity Overflow Inexact Rounded -dqadd37989 fma 1 -9999999999999999999999999999999999E+6111 -9E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37990 fma 1 -9999999999999999999999999999999999E+6111 -8E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37991 fma 1 -9999999999999999999999999999999999E+6111 -7E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37992 fma 1 -9999999999999999999999999999999999E+6111 -6E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37993 fma 1 -9999999999999999999999999999999999E+6111 -5E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37994 fma 1 -9999999999999999999999999999999999E+6111 -4E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37995 fma 1 -9999999999999999999999999999999999E+6111 -3E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37996 fma 1 -9999999999999999999999999999999999E+6111 -2E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37997 fma 1 -9999999999999999999999999999999999E+6111 -1E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -dqadd371100 fma 1 1e+2 -1e-6143 -> 99.99999999999999999999999999999999 Rounded Inexact -dqadd371101 fma 1 1e+1 -1e-6143 -> 9.999999999999999999999999999999999 Rounded Inexact -dqadd371103 fma 1 +1 -1e-6143 -> 0.9999999999999999999999999999999999 Rounded Inexact -dqadd371104 fma 1 1e-1 -1e-6143 -> 0.09999999999999999999999999999999999 Rounded Inexact -dqadd371105 fma 1 1e-2 -1e-6143 -> 0.009999999999999999999999999999999999 Rounded Inexact -dqadd371106 fma 1 1e-3 -1e-6143 -> 0.0009999999999999999999999999999999999 Rounded Inexact -dqadd371107 fma 1 1e-4 -1e-6143 -> 0.00009999999999999999999999999999999999 Rounded Inexact -dqadd371108 fma 1 1e-5 -1e-6143 -> 0.000009999999999999999999999999999999999 Rounded Inexact -dqadd371109 fma 1 1e-6 -1e-6143 -> 9.999999999999999999999999999999999E-7 Rounded Inexact - -rounding: ceiling -dqadd371110 fma 1 -1e+2 +1e-6143 -> -99.99999999999999999999999999999999 Rounded Inexact -dqadd371111 fma 1 -1e+1 +1e-6143 -> -9.999999999999999999999999999999999 Rounded Inexact -dqadd371113 fma 1 -1 +1e-6143 -> -0.9999999999999999999999999999999999 Rounded Inexact -dqadd371114 fma 1 -1e-1 +1e-6143 -> -0.09999999999999999999999999999999999 Rounded Inexact -dqadd371115 fma 1 -1e-2 +1e-6143 -> -0.009999999999999999999999999999999999 Rounded Inexact -dqadd371116 fma 1 -1e-3 +1e-6143 -> -0.0009999999999999999999999999999999999 Rounded Inexact -dqadd371117 fma 1 -1e-4 +1e-6143 -> -0.00009999999999999999999999999999999999 Rounded Inexact -dqadd371118 fma 1 -1e-5 +1e-6143 -> -0.000009999999999999999999999999999999999 Rounded Inexact -dqadd371119 fma 1 -1e-6 +1e-6143 -> -9.999999999999999999999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -dqadd371300 fma 1 1E34 -0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371310 fma 1 1E34 -0.51 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371311 fma 1 1E34 -0.501 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371312 fma 1 1E34 -0.5001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371313 fma 1 1E34 -0.50001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371314 fma 1 1E34 -0.500001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371315 fma 1 1E34 -0.5000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371316 fma 1 1E34 -0.50000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371317 fma 1 1E34 -0.500000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371318 fma 1 1E34 -0.5000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371319 fma 1 1E34 -0.50000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371320 fma 1 1E34 -0.500000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371321 fma 1 1E34 -0.5000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371322 fma 1 1E34 -0.50000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371323 fma 1 1E34 -0.500000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371324 fma 1 1E34 -0.5000000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371325 fma 1 1E34 -0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371326 fma 1 1E34 -0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371327 fma 1 1E34 -0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371328 fma 1 1E34 -0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371329 fma 1 1E34 -0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371330 fma 1 1E34 -0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371331 fma 1 1E34 -0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371332 fma 1 1E34 -0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371333 fma 1 1E34 -0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371334 fma 1 1E34 -0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371335 fma 1 1E34 -0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371336 fma 1 1E34 -0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371337 fma 1 1E34 -0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371338 fma 1 1E34 -0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371339 fma 1 1E34 -0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded - -dqadd371340 fma 1 1E34 -5000000.000010001 -> 9999999999999999999999999995000000 Inexact Rounded -dqadd371341 fma 1 1E34 -5000000.000000001 -> 9999999999999999999999999995000000 Inexact Rounded - -dqadd371349 fma 1 9999999999999999999999999999999999 0.4 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371350 fma 1 9999999999999999999999999999999999 0.49 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371351 fma 1 9999999999999999999999999999999999 0.499 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371352 fma 1 9999999999999999999999999999999999 0.4999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371353 fma 1 9999999999999999999999999999999999 0.49999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371354 fma 1 9999999999999999999999999999999999 0.499999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371355 fma 1 9999999999999999999999999999999999 0.4999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371356 fma 1 9999999999999999999999999999999999 0.49999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371357 fma 1 9999999999999999999999999999999999 0.499999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371358 fma 1 9999999999999999999999999999999999 0.4999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371359 fma 1 9999999999999999999999999999999999 0.49999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371360 fma 1 9999999999999999999999999999999999 0.499999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371361 fma 1 9999999999999999999999999999999999 0.4999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371362 fma 1 9999999999999999999999999999999999 0.49999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371363 fma 1 9999999999999999999999999999999999 0.499999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371364 fma 1 9999999999999999999999999999999999 0.4999999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371365 fma 1 9999999999999999999999999999999999 0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371367 fma 1 9999999999999999999999999999999999 0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371368 fma 1 9999999999999999999999999999999999 0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371369 fma 1 9999999999999999999999999999999999 0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371370 fma 1 9999999999999999999999999999999999 0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371371 fma 1 9999999999999999999999999999999999 0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371372 fma 1 9999999999999999999999999999999999 0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371373 fma 1 9999999999999999999999999999999999 0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371374 fma 1 9999999999999999999999999999999999 0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371375 fma 1 9999999999999999999999999999999999 0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371376 fma 1 9999999999999999999999999999999999 0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371377 fma 1 9999999999999999999999999999999999 0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371378 fma 1 9999999999999999999999999999999999 0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371379 fma 1 9999999999999999999999999999999999 0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371380 fma 1 9999999999999999999999999999999999 0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371381 fma 1 9999999999999999999999999999999999 0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371382 fma 1 9999999999999999999999999999999999 0.5000000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371383 fma 1 9999999999999999999999999999999999 0.500000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371384 fma 1 9999999999999999999999999999999999 0.50000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371385 fma 1 9999999999999999999999999999999999 0.5000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371386 fma 1 9999999999999999999999999999999999 0.500000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371387 fma 1 9999999999999999999999999999999999 0.50000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371388 fma 1 9999999999999999999999999999999999 0.5000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371389 fma 1 9999999999999999999999999999999999 0.500000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371390 fma 1 9999999999999999999999999999999999 0.50000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371391 fma 1 9999999999999999999999999999999999 0.5000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371392 fma 1 9999999999999999999999999999999999 0.500001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371393 fma 1 9999999999999999999999999999999999 0.50001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371394 fma 1 9999999999999999999999999999999999 0.5001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371395 fma 1 9999999999999999999999999999999999 0.501 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371396 fma 1 9999999999999999999999999999999999 0.51 -> 1.000000000000000000000000000000000E+34 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -dqadd371420 fma 1 0 1.123456789987654321123456789012345 -> 1.123456789987654321123456789012345 -dqadd371421 fma 1 0 1.123456789987654321123456789012345E-1 -> 0.1123456789987654321123456789012345 -dqadd371422 fma 1 0 1.123456789987654321123456789012345E-2 -> 0.01123456789987654321123456789012345 -dqadd371423 fma 1 0 1.123456789987654321123456789012345E-3 -> 0.001123456789987654321123456789012345 -dqadd371424 fma 1 0 1.123456789987654321123456789012345E-4 -> 0.0001123456789987654321123456789012345 -dqadd371425 fma 1 0 1.123456789987654321123456789012345E-5 -> 0.00001123456789987654321123456789012345 -dqadd371426 fma 1 0 1.123456789987654321123456789012345E-6 -> 0.000001123456789987654321123456789012345 -dqadd371427 fma 1 0 1.123456789987654321123456789012345E-7 -> 1.123456789987654321123456789012345E-7 -dqadd371428 fma 1 0 1.123456789987654321123456789012345E-8 -> 1.123456789987654321123456789012345E-8 -dqadd371429 fma 1 0 1.123456789987654321123456789012345E-9 -> 1.123456789987654321123456789012345E-9 -dqadd371430 fma 1 0 1.123456789987654321123456789012345E-10 -> 1.123456789987654321123456789012345E-10 -dqadd371431 fma 1 0 1.123456789987654321123456789012345E-11 -> 1.123456789987654321123456789012345E-11 -dqadd371432 fma 1 0 1.123456789987654321123456789012345E-12 -> 1.123456789987654321123456789012345E-12 -dqadd371433 fma 1 0 1.123456789987654321123456789012345E-13 -> 1.123456789987654321123456789012345E-13 -dqadd371434 fma 1 0 1.123456789987654321123456789012345E-14 -> 1.123456789987654321123456789012345E-14 -dqadd371435 fma 1 0 1.123456789987654321123456789012345E-15 -> 1.123456789987654321123456789012345E-15 -dqadd371436 fma 1 0 1.123456789987654321123456789012345E-16 -> 1.123456789987654321123456789012345E-16 -dqadd371437 fma 1 0 1.123456789987654321123456789012345E-17 -> 1.123456789987654321123456789012345E-17 -dqadd371438 fma 1 0 1.123456789987654321123456789012345E-18 -> 1.123456789987654321123456789012345E-18 -dqadd371439 fma 1 0 1.123456789987654321123456789012345E-19 -> 1.123456789987654321123456789012345E-19 -dqadd371440 fma 1 0 1.123456789987654321123456789012345E-20 -> 1.123456789987654321123456789012345E-20 -dqadd371441 fma 1 0 1.123456789987654321123456789012345E-21 -> 1.123456789987654321123456789012345E-21 -dqadd371442 fma 1 0 1.123456789987654321123456789012345E-22 -> 1.123456789987654321123456789012345E-22 -dqadd371443 fma 1 0 1.123456789987654321123456789012345E-23 -> 1.123456789987654321123456789012345E-23 -dqadd371444 fma 1 0 1.123456789987654321123456789012345E-24 -> 1.123456789987654321123456789012345E-24 -dqadd371445 fma 1 0 1.123456789987654321123456789012345E-25 -> 1.123456789987654321123456789012345E-25 -dqadd371446 fma 1 0 1.123456789987654321123456789012345E-26 -> 1.123456789987654321123456789012345E-26 -dqadd371447 fma 1 0 1.123456789987654321123456789012345E-27 -> 1.123456789987654321123456789012345E-27 -dqadd371448 fma 1 0 1.123456789987654321123456789012345E-28 -> 1.123456789987654321123456789012345E-28 -dqadd371449 fma 1 0 1.123456789987654321123456789012345E-29 -> 1.123456789987654321123456789012345E-29 -dqadd371450 fma 1 0 1.123456789987654321123456789012345E-30 -> 1.123456789987654321123456789012345E-30 -dqadd371451 fma 1 0 1.123456789987654321123456789012345E-31 -> 1.123456789987654321123456789012345E-31 -dqadd371452 fma 1 0 1.123456789987654321123456789012345E-32 -> 1.123456789987654321123456789012345E-32 -dqadd371453 fma 1 0 1.123456789987654321123456789012345E-33 -> 1.123456789987654321123456789012345E-33 -dqadd371454 fma 1 0 1.123456789987654321123456789012345E-34 -> 1.123456789987654321123456789012345E-34 -dqadd371455 fma 1 0 1.123456789987654321123456789012345E-35 -> 1.123456789987654321123456789012345E-35 -dqadd371456 fma 1 0 1.123456789987654321123456789012345E-36 -> 1.123456789987654321123456789012345E-36 - --- same, reversed 0 -dqadd371460 fma 1 1.123456789987654321123456789012345 0 -> 1.123456789987654321123456789012345 -dqadd371461 fma 1 1.123456789987654321123456789012345E-1 0 -> 0.1123456789987654321123456789012345 -dqadd371462 fma 1 1.123456789987654321123456789012345E-2 0 -> 0.01123456789987654321123456789012345 -dqadd371463 fma 1 1.123456789987654321123456789012345E-3 0 -> 0.001123456789987654321123456789012345 -dqadd371464 fma 1 1.123456789987654321123456789012345E-4 0 -> 0.0001123456789987654321123456789012345 -dqadd371465 fma 1 1.123456789987654321123456789012345E-5 0 -> 0.00001123456789987654321123456789012345 -dqadd371466 fma 1 1.123456789987654321123456789012345E-6 0 -> 0.000001123456789987654321123456789012345 -dqadd371467 fma 1 1.123456789987654321123456789012345E-7 0 -> 1.123456789987654321123456789012345E-7 -dqadd371468 fma 1 1.123456789987654321123456789012345E-8 0 -> 1.123456789987654321123456789012345E-8 -dqadd371469 fma 1 1.123456789987654321123456789012345E-9 0 -> 1.123456789987654321123456789012345E-9 -dqadd371470 fma 1 1.123456789987654321123456789012345E-10 0 -> 1.123456789987654321123456789012345E-10 -dqadd371471 fma 1 1.123456789987654321123456789012345E-11 0 -> 1.123456789987654321123456789012345E-11 -dqadd371472 fma 1 1.123456789987654321123456789012345E-12 0 -> 1.123456789987654321123456789012345E-12 -dqadd371473 fma 1 1.123456789987654321123456789012345E-13 0 -> 1.123456789987654321123456789012345E-13 -dqadd371474 fma 1 1.123456789987654321123456789012345E-14 0 -> 1.123456789987654321123456789012345E-14 -dqadd371475 fma 1 1.123456789987654321123456789012345E-15 0 -> 1.123456789987654321123456789012345E-15 -dqadd371476 fma 1 1.123456789987654321123456789012345E-16 0 -> 1.123456789987654321123456789012345E-16 -dqadd371477 fma 1 1.123456789987654321123456789012345E-17 0 -> 1.123456789987654321123456789012345E-17 -dqadd371478 fma 1 1.123456789987654321123456789012345E-18 0 -> 1.123456789987654321123456789012345E-18 -dqadd371479 fma 1 1.123456789987654321123456789012345E-19 0 -> 1.123456789987654321123456789012345E-19 -dqadd371480 fma 1 1.123456789987654321123456789012345E-20 0 -> 1.123456789987654321123456789012345E-20 -dqadd371481 fma 1 1.123456789987654321123456789012345E-21 0 -> 1.123456789987654321123456789012345E-21 -dqadd371482 fma 1 1.123456789987654321123456789012345E-22 0 -> 1.123456789987654321123456789012345E-22 -dqadd371483 fma 1 1.123456789987654321123456789012345E-23 0 -> 1.123456789987654321123456789012345E-23 -dqadd371484 fma 1 1.123456789987654321123456789012345E-24 0 -> 1.123456789987654321123456789012345E-24 -dqadd371485 fma 1 1.123456789987654321123456789012345E-25 0 -> 1.123456789987654321123456789012345E-25 -dqadd371486 fma 1 1.123456789987654321123456789012345E-26 0 -> 1.123456789987654321123456789012345E-26 -dqadd371487 fma 1 1.123456789987654321123456789012345E-27 0 -> 1.123456789987654321123456789012345E-27 -dqadd371488 fma 1 1.123456789987654321123456789012345E-28 0 -> 1.123456789987654321123456789012345E-28 -dqadd371489 fma 1 1.123456789987654321123456789012345E-29 0 -> 1.123456789987654321123456789012345E-29 -dqadd371490 fma 1 1.123456789987654321123456789012345E-30 0 -> 1.123456789987654321123456789012345E-30 -dqadd371491 fma 1 1.123456789987654321123456789012345E-31 0 -> 1.123456789987654321123456789012345E-31 -dqadd371492 fma 1 1.123456789987654321123456789012345E-32 0 -> 1.123456789987654321123456789012345E-32 -dqadd371493 fma 1 1.123456789987654321123456789012345E-33 0 -> 1.123456789987654321123456789012345E-33 -dqadd371494 fma 1 1.123456789987654321123456789012345E-34 0 -> 1.123456789987654321123456789012345E-34 -dqadd371495 fma 1 1.123456789987654321123456789012345E-35 0 -> 1.123456789987654321123456789012345E-35 -dqadd371496 fma 1 1.123456789987654321123456789012345E-36 0 -> 1.123456789987654321123456789012345E-36 - --- same, Es on the 0 -dqadd371500 fma 1 1.123456789987654321123456789012345 0E-0 -> 1.123456789987654321123456789012345 -dqadd371501 fma 1 1.123456789987654321123456789012345 0E-1 -> 1.123456789987654321123456789012345 -dqadd371502 fma 1 1.123456789987654321123456789012345 0E-2 -> 1.123456789987654321123456789012345 -dqadd371503 fma 1 1.123456789987654321123456789012345 0E-3 -> 1.123456789987654321123456789012345 -dqadd371504 fma 1 1.123456789987654321123456789012345 0E-4 -> 1.123456789987654321123456789012345 -dqadd371505 fma 1 1.123456789987654321123456789012345 0E-5 -> 1.123456789987654321123456789012345 -dqadd371506 fma 1 1.123456789987654321123456789012345 0E-6 -> 1.123456789987654321123456789012345 -dqadd371507 fma 1 1.123456789987654321123456789012345 0E-7 -> 1.123456789987654321123456789012345 -dqadd371508 fma 1 1.123456789987654321123456789012345 0E-8 -> 1.123456789987654321123456789012345 -dqadd371509 fma 1 1.123456789987654321123456789012345 0E-9 -> 1.123456789987654321123456789012345 -dqadd371510 fma 1 1.123456789987654321123456789012345 0E-10 -> 1.123456789987654321123456789012345 -dqadd371511 fma 1 1.123456789987654321123456789012345 0E-11 -> 1.123456789987654321123456789012345 -dqadd371512 fma 1 1.123456789987654321123456789012345 0E-12 -> 1.123456789987654321123456789012345 -dqadd371513 fma 1 1.123456789987654321123456789012345 0E-13 -> 1.123456789987654321123456789012345 -dqadd371514 fma 1 1.123456789987654321123456789012345 0E-14 -> 1.123456789987654321123456789012345 -dqadd371515 fma 1 1.123456789987654321123456789012345 0E-15 -> 1.123456789987654321123456789012345 -dqadd371516 fma 1 1.123456789987654321123456789012345 0E-16 -> 1.123456789987654321123456789012345 -dqadd371517 fma 1 1.123456789987654321123456789012345 0E-17 -> 1.123456789987654321123456789012345 -dqadd371518 fma 1 1.123456789987654321123456789012345 0E-18 -> 1.123456789987654321123456789012345 -dqadd371519 fma 1 1.123456789987654321123456789012345 0E-19 -> 1.123456789987654321123456789012345 -dqadd371520 fma 1 1.123456789987654321123456789012345 0E-20 -> 1.123456789987654321123456789012345 -dqadd371521 fma 1 1.123456789987654321123456789012345 0E-21 -> 1.123456789987654321123456789012345 -dqadd371522 fma 1 1.123456789987654321123456789012345 0E-22 -> 1.123456789987654321123456789012345 -dqadd371523 fma 1 1.123456789987654321123456789012345 0E-23 -> 1.123456789987654321123456789012345 -dqadd371524 fma 1 1.123456789987654321123456789012345 0E-24 -> 1.123456789987654321123456789012345 -dqadd371525 fma 1 1.123456789987654321123456789012345 0E-25 -> 1.123456789987654321123456789012345 -dqadd371526 fma 1 1.123456789987654321123456789012345 0E-26 -> 1.123456789987654321123456789012345 -dqadd371527 fma 1 1.123456789987654321123456789012345 0E-27 -> 1.123456789987654321123456789012345 -dqadd371528 fma 1 1.123456789987654321123456789012345 0E-28 -> 1.123456789987654321123456789012345 -dqadd371529 fma 1 1.123456789987654321123456789012345 0E-29 -> 1.123456789987654321123456789012345 -dqadd371530 fma 1 1.123456789987654321123456789012345 0E-30 -> 1.123456789987654321123456789012345 -dqadd371531 fma 1 1.123456789987654321123456789012345 0E-31 -> 1.123456789987654321123456789012345 -dqadd371532 fma 1 1.123456789987654321123456789012345 0E-32 -> 1.123456789987654321123456789012345 -dqadd371533 fma 1 1.123456789987654321123456789012345 0E-33 -> 1.123456789987654321123456789012345 --- next four flag Rounded because the 0 extends the result -dqadd371534 fma 1 1.123456789987654321123456789012345 0E-34 -> 1.123456789987654321123456789012345 Rounded -dqadd371535 fma 1 1.123456789987654321123456789012345 0E-35 -> 1.123456789987654321123456789012345 Rounded -dqadd371536 fma 1 1.123456789987654321123456789012345 0E-36 -> 1.123456789987654321123456789012345 Rounded -dqadd371537 fma 1 1.123456789987654321123456789012345 0E-37 -> 1.123456789987654321123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -dqadd371600 fma 1 0 0E-19 -> 0E-19 -dqadd371601 fma 1 -0 0E-19 -> 0E-19 -dqadd371602 fma 1 0 -0E-19 -> 0E-19 -dqadd371603 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371611 fma 1 -11 11 -> 0 -dqadd371612 fma 1 11 -11 -> 0 --- overflow -dqadd371613 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371614 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: half_down --- exact zeros from zeros -dqadd371620 fma 1 0 0E-19 -> 0E-19 -dqadd371621 fma 1 -0 0E-19 -> 0E-19 -dqadd371622 fma 1 0 -0E-19 -> 0E-19 -dqadd371623 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371631 fma 1 -11 11 -> 0 -dqadd371632 fma 1 11 -11 -> 0 --- overflow -dqadd371633 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371634 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: half_even --- exact zeros from zeros -dqadd371640 fma 1 0 0E-19 -> 0E-19 -dqadd371641 fma 1 -0 0E-19 -> 0E-19 -dqadd371642 fma 1 0 -0E-19 -> 0E-19 -dqadd371643 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371651 fma 1 -11 11 -> 0 -dqadd371652 fma 1 11 -11 -> 0 --- overflow -dqadd371653 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371654 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: up --- exact zeros from zeros -dqadd371660 fma 1 0 0E-19 -> 0E-19 -dqadd371661 fma 1 -0 0E-19 -> 0E-19 -dqadd371662 fma 1 0 -0E-19 -> 0E-19 -dqadd371663 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371671 fma 1 -11 11 -> 0 -dqadd371672 fma 1 11 -11 -> 0 --- overflow -dqadd371673 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371674 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: down --- exact zeros from zeros -dqadd371680 fma 1 0 0E-19 -> 0E-19 -dqadd371681 fma 1 -0 0E-19 -> 0E-19 -dqadd371682 fma 1 0 -0E-19 -> 0E-19 -dqadd371683 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371691 fma 1 -11 11 -> 0 -dqadd371692 fma 1 11 -11 -> 0 --- overflow -dqadd371693 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqadd371694 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded - -rounding: ceiling --- exact zeros from zeros -dqadd371700 fma 1 0 0E-19 -> 0E-19 -dqadd371701 fma 1 -0 0E-19 -> 0E-19 -dqadd371702 fma 1 0 -0E-19 -> 0E-19 -dqadd371703 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371711 fma 1 -11 11 -> 0 -dqadd371712 fma 1 11 -11 -> 0 --- overflow -dqadd371713 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371714 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -dqadd371720 fma 1 0 0E-19 -> 0E-19 -dqadd371721 fma 1 -0 0E-19 -> -0E-19 -- * -dqadd371722 fma 1 0 -0E-19 -> -0E-19 -- * -dqadd371723 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371731 fma 1 -11 11 -> -0 -- * -dqadd371732 fma 1 11 -11 -> -0 -- * --- overflow -dqadd371733 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqadd371734 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: 05up --- exact zeros from zeros -dqadd371740 fma 1 0 0E-19 -> 0E-19 -dqadd371741 fma 1 -0 0E-19 -> 0E-19 -dqadd371742 fma 1 0 -0E-19 -> 0E-19 -dqadd371743 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371751 fma 1 -11 11 -> 0 -dqadd371752 fma 1 11 -11 -> 0 --- overflow -dqadd371753 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqadd371754 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded - --- Examples from SQL proposal (Krishna Kulkarni) -dqadd371761 fma 1 130E-2 120E-2 -> 2.50 -dqadd371762 fma 1 130E-2 12E-1 -> 2.50 -dqadd371763 fma 1 130E-2 1E0 -> 2.30 -dqadd371764 fma 1 1E2 1E4 -> 1.01E+4 -dqadd371765 fma 1 130E-2 -120E-2 -> 0.10 -dqadd371766 fma 1 130E-2 -12E-1 -> 0.10 -dqadd371767 fma 1 130E-2 -1E0 -> 0.30 -dqadd371768 fma 1 1E2 -1E4 -> -9.9E+3 - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -dqadd375001 fma 1 1239876543211234567894567890123456 1 -> 1239876543211234567894567890123457 -dqadd375002 fma 1 1239876543211234567894567890123456 0.6 -> 1239876543211234567894567890123457 Inexact Rounded -dqadd375003 fma 1 1239876543211234567894567890123456 0.06 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375004 fma 1 1239876543211234567894567890123456 6E-3 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375005 fma 1 1239876543211234567894567890123456 6E-4 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375006 fma 1 1239876543211234567894567890123456 6E-5 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375007 fma 1 1239876543211234567894567890123456 6E-6 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375008 fma 1 1239876543211234567894567890123456 6E-7 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375009 fma 1 1239876543211234567894567890123456 6E-8 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375010 fma 1 1239876543211234567894567890123456 6E-9 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375011 fma 1 1239876543211234567894567890123456 6E-10 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375012 fma 1 1239876543211234567894567890123456 6E-11 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375013 fma 1 1239876543211234567894567890123456 6E-12 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375014 fma 1 1239876543211234567894567890123456 6E-13 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375015 fma 1 1239876543211234567894567890123456 6E-14 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375016 fma 1 1239876543211234567894567890123456 6E-15 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375017 fma 1 1239876543211234567894567890123456 6E-16 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375018 fma 1 1239876543211234567894567890123456 6E-17 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375019 fma 1 1239876543211234567894567890123456 6E-18 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375020 fma 1 1239876543211234567894567890123456 6E-19 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375021 fma 1 1239876543211234567894567890123456 6E-20 -> 1239876543211234567894567890123456 Inexact Rounded - --- widening second argument at gap -dqadd375030 fma 1 12398765432112345678945678 1 -> 12398765432112345678945679 -dqadd375031 fma 1 12398765432112345678945678 0.1 -> 12398765432112345678945678.1 -dqadd375032 fma 1 12398765432112345678945678 0.12 -> 12398765432112345678945678.12 -dqadd375033 fma 1 12398765432112345678945678 0.123 -> 12398765432112345678945678.123 -dqadd375034 fma 1 12398765432112345678945678 0.1234 -> 12398765432112345678945678.1234 -dqadd375035 fma 1 12398765432112345678945678 0.12345 -> 12398765432112345678945678.12345 -dqadd375036 fma 1 12398765432112345678945678 0.123456 -> 12398765432112345678945678.123456 -dqadd375037 fma 1 12398765432112345678945678 0.1234567 -> 12398765432112345678945678.1234567 -dqadd375038 fma 1 12398765432112345678945678 0.12345678 -> 12398765432112345678945678.12345678 -dqadd375039 fma 1 12398765432112345678945678 0.123456789 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375040 fma 1 12398765432112345678945678 0.123456785 -> 12398765432112345678945678.12345678 Inexact Rounded -dqadd375041 fma 1 12398765432112345678945678 0.1234567850 -> 12398765432112345678945678.12345678 Inexact Rounded -dqadd375042 fma 1 12398765432112345678945678 0.1234567851 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375043 fma 1 12398765432112345678945678 0.12345678501 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375044 fma 1 12398765432112345678945678 0.123456785001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375045 fma 1 12398765432112345678945678 0.1234567850001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375046 fma 1 12398765432112345678945678 0.12345678500001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375047 fma 1 12398765432112345678945678 0.123456785000001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375048 fma 1 12398765432112345678945678 0.1234567850000001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375049 fma 1 12398765432112345678945678 0.1234567850000000 -> 12398765432112345678945678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -dqadd375050 fma 1 12398765432112345678945678 0.0234567750000000 -> 12398765432112345678945678.02345678 Inexact Rounded -dqadd375051 fma 1 12398765432112345678945678 0.0034567750000000 -> 12398765432112345678945678.00345678 Inexact Rounded -dqadd375052 fma 1 12398765432112345678945678 0.0004567750000000 -> 12398765432112345678945678.00045678 Inexact Rounded -dqadd375053 fma 1 12398765432112345678945678 0.0000567750000000 -> 12398765432112345678945678.00005678 Inexact Rounded -dqadd375054 fma 1 12398765432112345678945678 0.0000067750000000 -> 12398765432112345678945678.00000678 Inexact Rounded -dqadd375055 fma 1 12398765432112345678945678 0.0000007750000000 -> 12398765432112345678945678.00000078 Inexact Rounded -dqadd375056 fma 1 12398765432112345678945678 0.0000000750000000 -> 12398765432112345678945678.00000008 Inexact Rounded -dqadd375057 fma 1 12398765432112345678945678 0.0000000050000000 -> 12398765432112345678945678.00000000 Inexact Rounded -dqadd375060 fma 1 12398765432112345678945678 0.0234567750000001 -> 12398765432112345678945678.02345678 Inexact Rounded -dqadd375061 fma 1 12398765432112345678945678 0.0034567750000001 -> 12398765432112345678945678.00345678 Inexact Rounded -dqadd375062 fma 1 12398765432112345678945678 0.0004567750000001 -> 12398765432112345678945678.00045678 Inexact Rounded -dqadd375063 fma 1 12398765432112345678945678 0.0000567750000001 -> 12398765432112345678945678.00005678 Inexact Rounded -dqadd375064 fma 1 12398765432112345678945678 0.0000067750000001 -> 12398765432112345678945678.00000678 Inexact Rounded -dqadd375065 fma 1 12398765432112345678945678 0.0000007750000001 -> 12398765432112345678945678.00000078 Inexact Rounded -dqadd375066 fma 1 12398765432112345678945678 0.0000000750000001 -> 12398765432112345678945678.00000008 Inexact Rounded -dqadd375067 fma 1 12398765432112345678945678 0.0000000050000001 -> 12398765432112345678945678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -dqadd375070 fma 1 12398765432112345678945678 1E-8 -> 12398765432112345678945678.00000001 -dqadd375071 fma 1 12398765432112345678945678 1E-9 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375072 fma 1 12398765432112345678945678 1E-10 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375073 fma 1 12398765432112345678945678 1E-11 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375074 fma 1 12398765432112345678945678 1E-12 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375075 fma 1 12398765432112345678945678 1E-13 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375076 fma 1 12398765432112345678945678 1E-14 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375077 fma 1 12398765432112345678945678 1E-15 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375078 fma 1 12398765432112345678945678 1E-16 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375079 fma 1 12398765432112345678945678 1E-17 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375080 fma 1 12398765432112345678945678 1E-18 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375081 fma 1 12398765432112345678945678 1E-19 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375082 fma 1 12398765432112345678945678 1E-20 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375083 fma 1 12398765432112345678945678 1E-25 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375084 fma 1 12398765432112345678945678 1E-30 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375085 fma 1 12398765432112345678945678 1E-31 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375086 fma 1 12398765432112345678945678 1E-32 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375087 fma 1 12398765432112345678945678 1E-33 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375088 fma 1 12398765432112345678945678 1E-34 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375089 fma 1 12398765432112345678945678 1E-35 -> 12398765432112345678945678.00000001 Inexact Rounded - --- Destructive subtract (from remainder tests) - --- +++ some of these will be off-by-one remainder vs remainderNear - -dqfma4000 fma -1234567890123456789012345678901233 1.000000000000000000000000000000001 1234567890123456789012345678901234 -> -0.234567890123456789012345678901233 -dqfma4001 fma -1234567890123456789012345678901222 1.00000000000000000000000000000001 1234567890123456789012345678901234 -> -0.34567890123456789012345678901222 -dqfma4002 fma -1234567890123456789012345678901111 1.0000000000000000000000000000001 1234567890123456789012345678901234 -> -0.4567890123456789012345678901111 -dqfma4003 fma -308641972530864197253086419725314 4.000000000000000000000000000000001 1234567890123456789012345678901255 -> -1.308641972530864197253086419725314 -dqfma4004 fma -308641972530864197253086419725308 4.000000000000000000000000000000001 1234567890123456789012345678901234 -> 1.691358027469135802746913580274692 -dqfma4005 fma -246913578024691357802469135780252 4.9999999999999999999999999999999 1234567890123456789012345678901234 -> -1.3086421975308642197530864219748 -dqfma4006 fma -246913578024691357802469135780247 4.99999999999999999999999999999999 1234567890123456789012345678901234 -> 1.46913578024691357802469135780247 -dqfma4007 fma -246913578024691357802469135780247 4.999999999999999999999999999999999 1234567890123456789012345678901234 -> -0.753086421975308642197530864219753 -dqfma4008 fma -246913578024691357802469135780247 5.000000000000000000000000000000001 1234567890123456789012345678901234 -> -1.246913578024691357802469135780247 -dqfma4009 fma -246913578024691357802469135780246 5.00000000000000000000000000000001 1234567890123456789012345678901234 -> 1.53086421975308642197530864219754 -dqfma4010 fma -246913578024691357802469135780242 5.0000000000000000000000000000001 1234567890123456789012345678901234 -> -0.6913578024691357802469135780242 -dqfma4011 fma -1234567890123456789012345678901232 1.000000000000000000000000000000001 1234567890123456789012345678901234 -> 0.765432109876543210987654321098768 -dqfma4012 fma -1234567890123456789012345678901221 1.00000000000000000000000000000001 1234567890123456789012345678901234 -> 0.65432109876543210987654321098779 -dqfma4013 fma -1234567890123456789012345678901110 1.0000000000000000000000000000001 1234567890123456789012345678901234 -> 0.5432109876543210987654321098890 -dqfma4014 fma -308641972530864197253086419725313 4.000000000000000000000000000000001 1234567890123456789012345678901255 -> 2.691358027469135802746913580274687 -dqfma4015 fma -308641972530864197253086419725308 4.000000000000000000000000000000001 1234567890123456789012345678901234 -> 1.691358027469135802746913580274692 -dqfma4016 fma -246913578024691357802469135780251 4.9999999999999999999999999999999 1234567890123456789012345678901234 -> 3.6913578024691357802469135780251 -dqfma4017 fma -246913578024691357802469135780247 4.99999999999999999999999999999999 1234567890123456789012345678901234 -> 1.46913578024691357802469135780247 -dqfma4018 fma -246913578024691357802469135780246 4.999999999999999999999999999999999 1234567890123456789012345678901234 -> 4.246913578024691357802469135780246 -dqfma4019 fma -246913578024691357802469135780241 5.0000000000000000000000000000001 1234567890123456789012345678901234 -> 4.3086421975308642197530864219759 - --- Null tests -dqadd39990 fma 1 10 # -> NaN Invalid_operation -dqadd39991 fma 1 # 10 -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- dqFMA.decTest -- decQuad Fused Multiply Add -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- These tests comprise three parts: +-- 1. Sanity checks and other three-operand tests (especially those +-- where the fused operation makes a difference) +-- 2. Multiply tests (third operand is neutral zero [0E+emax]) +-- 3. Addition tests (first operand is 1) +-- The multiply and addition tests are extensive because FMA may have +-- its own dedicated multiplication or addition routine(s), and they +-- also inherently check the left-to-right properties. + +-- Sanity checks +dqfma0001 fma 1 1 1 -> 2 +dqfma0002 fma 1 1 2 -> 3 +dqfma0003 fma 2 2 3 -> 7 +dqfma0004 fma 9 9 9 -> 90 +dqfma0005 fma -1 1 1 -> 0 +dqfma0006 fma -1 1 2 -> 1 +dqfma0007 fma -2 2 3 -> -1 +dqfma0008 fma -9 9 9 -> -72 +dqfma0011 fma 1 -1 1 -> 0 +dqfma0012 fma 1 -1 2 -> 1 +dqfma0013 fma 2 -2 3 -> -1 +dqfma0014 fma 9 -9 9 -> -72 +dqfma0015 fma 1 1 -1 -> 0 +dqfma0016 fma 1 1 -2 -> -1 +dqfma0017 fma 2 2 -3 -> 1 +dqfma0018 fma 9 9 -9 -> 72 + +-- non-integer exacts +dqfma0100 fma 25.2 63.6 -438 -> 1164.72 +dqfma0101 fma 0.301 0.380 334 -> 334.114380 +dqfma0102 fma 49.2 -4.8 23.3 -> -212.86 +dqfma0103 fma 4.22 0.079 -94.6 -> -94.26662 +dqfma0104 fma 903 0.797 0.887 -> 720.578 +dqfma0105 fma 6.13 -161 65.9 -> -921.03 +dqfma0106 fma 28.2 727 5.45 -> 20506.85 +dqfma0107 fma 4 605 688 -> 3108 +dqfma0108 fma 93.3 0.19 0.226 -> 17.953 +dqfma0109 fma 0.169 -341 5.61 -> -52.019 +dqfma0110 fma -72.2 30 -51.2 -> -2217.2 +dqfma0111 fma -0.409 13 20.4 -> 15.083 +dqfma0112 fma 317 77.0 19.0 -> 24428.0 +dqfma0113 fma 47 6.58 1.62 -> 310.88 +dqfma0114 fma 1.36 0.984 0.493 -> 1.83124 +dqfma0115 fma 72.7 274 1.56 -> 19921.36 +dqfma0116 fma 335 847 83 -> 283828 +dqfma0117 fma 666 0.247 25.4 -> 189.902 +dqfma0118 fma -3.87 3.06 78.0 -> 66.1578 +dqfma0119 fma 0.742 192 35.6 -> 178.064 +dqfma0120 fma -91.6 5.29 0.153 -> -484.411 + +-- cases where result is different from separate multiply + add; each +-- is preceded by the result of unfused multiply and add +-- [this is about 20% of all similar cases in general] +-- -> 4.500119002100000209469729375698778E+38 +dqfma0202 fma 68537985861355864457.5694 6565875762972086605.85969 35892634447236753.172812 -> 4.500119002100000209469729375698779E+38 Inexact Rounded +-- -> 5.996248469584594346858881620185514E+41 +dqfma0208 fma 89261822344727628571.9 6717595845654131383336.89 5061036497288796076266.11 -> 5.996248469584594346858881620185513E+41 Inexact Rounded +-- -> 1.899242968678256924021594770874070E+34 +dqfma0210 fma 320506237232448685.495971 59257597764017967.984448 3205615239077711589912.85 -> 1.899242968678256924021594770874071E+34 Inexact Rounded +-- -> 7.078596978842809537929699954860309E+37 +dqfma0215 fma 220247843259112263.17995 321392340287987979002.80 47533279819997167655440 -> 7.078596978842809537929699954860308E+37 Inexact Rounded +-- -> 1.224955667581427559754106862350743E+37 +dqfma0226 fma 23880729790368880412.1449 512947333827064719.55407 217117438419590824502.963 -> 1.224955667581427559754106862350744E+37 Inexact Rounded +-- -> -2.530094043253148806272276368579144E+42 +dqfma0229 fma 2539892357016099706.4126 -996142232667504817717435 53682082598315949425.937 -> -2.530094043253148806272276368579143E+42 Inexact Rounded +-- -> 1.713387085759711954319391412788454E+37 +dqfma0233 fma 4546339491341624464.0804 3768717864169205581 83578980278690395184.620 -> 1.713387085759711954319391412788453E+37 Inexact Rounded +-- -> 4.062275663405823716411579117771547E+35 +dqfma0235 fma 409242119433816131.42253 992633815166741501.477249 70179636544416756129546 -> 4.062275663405823716411579117771548E+35 Inexact Rounded +-- -> 6.002604327732568490562249875306823E+47 +dqfma0258 fma 817941336593541742159684 733867339769310729266598 78563844650942419311830.8 -> 6.002604327732568490562249875306822E+47 Inexact Rounded +-- -> -2.027022514381452197510103395283874E+39 +dqfma0264 fma 387617310169161270.737532 -5229442703414956061216.62 57665666816652967150473.5 -> -2.027022514381452197510103395283873E+39 Inexact Rounded +-- -> -7.856525039803554001144089842730361E+37 +dqfma0267 fma -847655845720565274701.210 92685316564117739.83984 22780950041376424429.5686 -> -7.856525039803554001144089842730360E+37 Inexact Rounded +-- -> 1.695515562011520746125607502237559E+38 +dqfma0268 fma 21590290365127685.3675 7853139227576541379426.8 -3275859437236180.761544 -> 1.695515562011520746125607502237558E+38 Inexact Rounded +-- -> -8.448422935783289219748115038014710E+38 +dqfma0269 fma -974320636272862697.971586 867109103641860247440.756 -9775170775902454762.98 -> -8.448422935783289219748115038014709E+38 Inexact Rounded + +-- Cases where multiply would overflow or underflow if separate +dqfma0300 fma 9e+6144 10 0 -> Infinity Overflow Inexact Rounded +dqfma0301 fma 1e+6144 10 0 -> Infinity Overflow Inexact Rounded +dqfma0302 fma 1e+6144 10 -1e+6144 -> 9.000000000000000000000000000000000E+6144 Clamped +dqfma0303 fma 1e+6144 10 -9e+6144 -> 1.000000000000000000000000000000000E+6144 Clamped +-- subnormal etc. +dqfma0305 fma 1e-6176 0.1 0 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma0306 fma 1e-6176 0.1 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqfma0307 fma 1e-6176 0.1 1e-6176 -> 1E-6176 Underflow Subnormal Inexact Rounded + +-- Infinite combinations +dqfma0800 fma Inf Inf Inf -> Infinity +dqfma0801 fma Inf Inf -Inf -> NaN Invalid_operation +dqfma0802 fma Inf -Inf Inf -> NaN Invalid_operation +dqfma0803 fma Inf -Inf -Inf -> -Infinity +dqfma0804 fma -Inf Inf Inf -> NaN Invalid_operation +dqfma0805 fma -Inf Inf -Inf -> -Infinity +dqfma0806 fma -Inf -Inf Inf -> Infinity +dqfma0807 fma -Inf -Inf -Inf -> NaN Invalid_operation + +-- Triple NaN propagation +dqfma0900 fma NaN2 NaN3 NaN5 -> NaN2 +dqfma0901 fma 0 NaN3 NaN5 -> NaN3 +dqfma0902 fma 0 0 NaN5 -> NaN5 +-- first sNaN wins (consider qNaN from earlier sNaN being +-- overridden by an sNaN in third operand) +dqfma0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +dqfma0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation +dqfma0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation +dqfma0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +dqfma0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation +dqfma0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation + +-- MULTIPLICATION TESTS ------------------------------------------------ +rounding: half_even + +-- sanity checks +dqfma2000 fma 2 2 0e+6144 -> 4 +dqfma2001 fma 2 3 0e+6144 -> 6 +dqfma2002 fma 5 1 0e+6144 -> 5 +dqfma2003 fma 5 2 0e+6144 -> 10 +dqfma2004 fma 1.20 2 0e+6144 -> 2.40 +dqfma2005 fma 1.20 0 0e+6144 -> 0.00 +dqfma2006 fma 1.20 -2 0e+6144 -> -2.40 +dqfma2007 fma -1.20 2 0e+6144 -> -2.40 +dqfma2008 fma -1.20 0 0e+6144 -> 0.00 +dqfma2009 fma -1.20 -2 0e+6144 -> 2.40 +dqfma2010 fma 5.09 7.1 0e+6144 -> 36.139 +dqfma2011 fma 2.5 4 0e+6144 -> 10.0 +dqfma2012 fma 2.50 4 0e+6144 -> 10.00 +dqfma2013 fma 1.23456789 1.0000000000000000000000000000 0e+6144 -> 1.234567890000000000000000000000000 Rounded +dqfma2015 fma 2.50 4 0e+6144 -> 10.00 +dqfma2016 fma 9.99999999999999999 9.99999999999999999 0e+6144 -> 99.99999999999999980000000000000000 Inexact Rounded +dqfma2017 fma 9.99999999999999999 -9.99999999999999999 0e+6144 -> -99.99999999999999980000000000000000 Inexact Rounded +dqfma2018 fma -9.99999999999999999 9.99999999999999999 0e+6144 -> -99.99999999999999980000000000000000 Inexact Rounded +dqfma2019 fma -9.99999999999999999 -9.99999999999999999 0e+6144 -> 99.99999999999999980000000000000000 Inexact Rounded + +-- zeros, etc. +dqfma2021 fma 0 0 0e+6144 -> 0 +dqfma2022 fma 0 -0 0e+6144 -> 0 +dqfma2023 fma -0 0 0e+6144 -> 0 +dqfma2024 fma -0 -0 0e+6144 -> 0 +dqfma2025 fma -0.0 -0.0 0e+6144 -> 0.00 +dqfma2026 fma -0.0 -0.0 0e+6144 -> 0.00 +dqfma2027 fma -0.0 -0.0 0e+6144 -> 0.00 +dqfma2028 fma -0.0 -0.0 0e+6144 -> 0.00 +dqfma2030 fma 5.00 1E-3 0e+6144 -> 0.00500 +dqfma2031 fma 00.00 0.000 0e+6144 -> 0.00000 +dqfma2032 fma 00.00 0E-3 0e+6144 -> 0.00000 -- rhs is 0 +dqfma2033 fma 0E-3 00.00 0e+6144 -> 0.00000 -- lhs is 0 +dqfma2034 fma -5.00 1E-3 0e+6144 -> -0.00500 +dqfma2035 fma -00.00 0.000 0e+6144 -> 0.00000 +dqfma2036 fma -00.00 0E-3 0e+6144 -> 0.00000 -- rhs is 0 +dqfma2037 fma -0E-3 00.00 0e+6144 -> 0.00000 -- lhs is 0 +dqfma2038 fma 5.00 -1E-3 0e+6144 -> -0.00500 +dqfma2039 fma 00.00 -0.000 0e+6144 -> 0.00000 +dqfma2040 fma 00.00 -0E-3 0e+6144 -> 0.00000 -- rhs is 0 +dqfma2041 fma 0E-3 -00.00 0e+6144 -> 0.00000 -- lhs is 0 +dqfma2042 fma -5.00 -1E-3 0e+6144 -> 0.00500 +dqfma2043 fma -00.00 -0.000 0e+6144 -> 0.00000 +dqfma2044 fma -00.00 -0E-3 0e+6144 -> 0.00000 -- rhs is 0 +dqfma2045 fma -0E-3 -00.00 0e+6144 -> 0.00000 -- lhs is 0 + +-- examples from decarith +dqfma2050 fma 1.20 3 0e+6144 -> 3.60 +dqfma2051 fma 7 3 0e+6144 -> 21 +dqfma2052 fma 0.9 0.8 0e+6144 -> 0.72 +dqfma2053 fma 0.9 -0 0e+6144 -> 0.0 +dqfma2054 fma 654321 654321 0e+6144 -> 428135971041 + +dqfma2060 fma 123.45 1e7 0e+6144 -> 1.2345E+9 +dqfma2061 fma 123.45 1e8 0e+6144 -> 1.2345E+10 +dqfma2062 fma 123.45 1e+9 0e+6144 -> 1.2345E+11 +dqfma2063 fma 123.45 1e10 0e+6144 -> 1.2345E+12 +dqfma2064 fma 123.45 1e11 0e+6144 -> 1.2345E+13 +dqfma2065 fma 123.45 1e12 0e+6144 -> 1.2345E+14 +dqfma2066 fma 123.45 1e13 0e+6144 -> 1.2345E+15 + + +-- test some intermediate lengths +-- 1234567890123456 +dqfma2080 fma 0.1 1230123456456789 0e+6144 -> 123012345645678.9 +dqfma2084 fma 0.1 1230123456456789 0e+6144 -> 123012345645678.9 +dqfma2090 fma 1230123456456789 0.1 0e+6144 -> 123012345645678.9 +dqfma2094 fma 1230123456456789 0.1 0e+6144 -> 123012345645678.9 + +-- test some more edge cases and carries +dqfma2101 fma 9 9 0e+6144 -> 81 +dqfma2102 fma 9 90 0e+6144 -> 810 +dqfma2103 fma 9 900 0e+6144 -> 8100 +dqfma2104 fma 9 9000 0e+6144 -> 81000 +dqfma2105 fma 9 90000 0e+6144 -> 810000 +dqfma2106 fma 9 900000 0e+6144 -> 8100000 +dqfma2107 fma 9 9000000 0e+6144 -> 81000000 +dqfma2108 fma 9 90000000 0e+6144 -> 810000000 +dqfma2109 fma 9 900000000 0e+6144 -> 8100000000 +dqfma2110 fma 9 9000000000 0e+6144 -> 81000000000 +dqfma2111 fma 9 90000000000 0e+6144 -> 810000000000 +dqfma2112 fma 9 900000000000 0e+6144 -> 8100000000000 +dqfma2113 fma 9 9000000000000 0e+6144 -> 81000000000000 +dqfma2114 fma 9 90000000000000 0e+6144 -> 810000000000000 +dqfma2115 fma 9 900000000000000 0e+6144 -> 8100000000000000 +--dqfma2116 fma 9 9000000000000000 0e+6144 -> 81000000000000000 +--dqfma2117 fma 9 90000000000000000 0e+6144 -> 810000000000000000 +--dqfma2118 fma 9 900000000000000000 0e+6144 -> 8100000000000000000 +--dqfma2119 fma 9 9000000000000000000 0e+6144 -> 81000000000000000000 +--dqfma2120 fma 9 90000000000000000000 0e+6144 -> 810000000000000000000 +--dqfma2121 fma 9 900000000000000000000 0e+6144 -> 8100000000000000000000 +--dqfma2122 fma 9 9000000000000000000000 0e+6144 -> 81000000000000000000000 +--dqfma2123 fma 9 90000000000000000000000 0e+6144 -> 810000000000000000000000 +-- test some more edge cases without carries +dqfma2131 fma 3 3 0e+6144 -> 9 +dqfma2132 fma 3 30 0e+6144 -> 90 +dqfma2133 fma 3 300 0e+6144 -> 900 +dqfma2134 fma 3 3000 0e+6144 -> 9000 +dqfma2135 fma 3 30000 0e+6144 -> 90000 +dqfma2136 fma 3 300000 0e+6144 -> 900000 +dqfma2137 fma 3 3000000 0e+6144 -> 9000000 +dqfma2138 fma 3 30000000 0e+6144 -> 90000000 +dqfma2139 fma 3 300000000 0e+6144 -> 900000000 +dqfma2140 fma 3 3000000000 0e+6144 -> 9000000000 +dqfma2141 fma 3 30000000000 0e+6144 -> 90000000000 +dqfma2142 fma 3 300000000000 0e+6144 -> 900000000000 +dqfma2143 fma 3 3000000000000 0e+6144 -> 9000000000000 +dqfma2144 fma 3 30000000000000 0e+6144 -> 90000000000000 +dqfma2145 fma 3 300000000000000 0e+6144 -> 900000000000000 +dqfma2146 fma 3 3000000000000000 0e+6144 -> 9000000000000000 +dqfma2147 fma 3 30000000000000000 0e+6144 -> 90000000000000000 +dqfma2148 fma 3 300000000000000000 0e+6144 -> 900000000000000000 +dqfma2149 fma 3 3000000000000000000 0e+6144 -> 9000000000000000000 +dqfma2150 fma 3 30000000000000000000 0e+6144 -> 90000000000000000000 +dqfma2151 fma 3 300000000000000000000 0e+6144 -> 900000000000000000000 +dqfma2152 fma 3 3000000000000000000000 0e+6144 -> 9000000000000000000000 +dqfma2153 fma 3 30000000000000000000000 0e+6144 -> 90000000000000000000000 + +dqfma2263 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0e+6144 -> 145433.2908011933696719165119928296 Inexact Rounded + +-- test some edge cases with exact rounding +dqfma2301 fma 900000000000000000 9 0e+6144 -> 8100000000000000000 +dqfma2302 fma 900000000000000000 90 0e+6144 -> 81000000000000000000 +dqfma2303 fma 900000000000000000 900 0e+6144 -> 810000000000000000000 +dqfma2304 fma 900000000000000000 9000 0e+6144 -> 8100000000000000000000 +dqfma2305 fma 900000000000000000 90000 0e+6144 -> 81000000000000000000000 +dqfma2306 fma 900000000000000000 900000 0e+6144 -> 810000000000000000000000 +dqfma2307 fma 900000000000000000 9000000 0e+6144 -> 8100000000000000000000000 +dqfma2308 fma 900000000000000000 90000000 0e+6144 -> 81000000000000000000000000 +dqfma2309 fma 900000000000000000 900000000 0e+6144 -> 810000000000000000000000000 +dqfma2310 fma 900000000000000000 9000000000 0e+6144 -> 8100000000000000000000000000 +dqfma2311 fma 900000000000000000 90000000000 0e+6144 -> 81000000000000000000000000000 +dqfma2312 fma 900000000000000000 900000000000 0e+6144 -> 810000000000000000000000000000 +dqfma2313 fma 900000000000000000 9000000000000 0e+6144 -> 8100000000000000000000000000000 +dqfma2314 fma 900000000000000000 90000000000000 0e+6144 -> 81000000000000000000000000000000 +dqfma2315 fma 900000000000000000 900000000000000 0e+6144 -> 810000000000000000000000000000000 +dqfma2316 fma 900000000000000000 9000000000000000 0e+6144 -> 8100000000000000000000000000000000 +dqfma2317 fma 9000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+34 Rounded +dqfma2318 fma 90000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+35 Rounded +dqfma2319 fma 900000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+36 Rounded +dqfma2320 fma 9000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+37 Rounded +dqfma2321 fma 90000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+38 Rounded +dqfma2322 fma 900000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+39 Rounded +dqfma2323 fma 9000000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+40 Rounded + +-- tryzeros cases +dqfma2504 fma 0E-4260 1000E-4260 0e+6144 -> 0E-6176 Clamped +dqfma2505 fma 100E+4260 0E+4260 0e+6144 -> 0E+6111 Clamped + +-- mixed with zeros +dqfma2541 fma 0 -1 0e+6144 -> 0 +dqfma2542 fma -0 -1 0e+6144 -> 0 +dqfma2543 fma 0 1 0e+6144 -> 0 +dqfma2544 fma -0 1 0e+6144 -> 0 +dqfma2545 fma -1 0 0e+6144 -> 0 +dqfma2546 fma -1 -0 0e+6144 -> 0 +dqfma2547 fma 1 0 0e+6144 -> 0 +dqfma2548 fma 1 -0 0e+6144 -> 0 + +dqfma2551 fma 0.0 -1 0e+6144 -> 0.0 +dqfma2552 fma -0.0 -1 0e+6144 -> 0.0 +dqfma2553 fma 0.0 1 0e+6144 -> 0.0 +dqfma2554 fma -0.0 1 0e+6144 -> 0.0 +dqfma2555 fma -1.0 0 0e+6144 -> 0.0 +dqfma2556 fma -1.0 -0 0e+6144 -> 0.0 +dqfma2557 fma 1.0 0 0e+6144 -> 0.0 +dqfma2558 fma 1.0 -0 0e+6144 -> 0.0 + +dqfma2561 fma 0 -1.0 0e+6144 -> 0.0 +dqfma2562 fma -0 -1.0 0e+6144 -> 0.0 +dqfma2563 fma 0 1.0 0e+6144 -> 0.0 +dqfma2564 fma -0 1.0 0e+6144 -> 0.0 +dqfma2565 fma -1 0.0 0e+6144 -> 0.0 +dqfma2566 fma -1 -0.0 0e+6144 -> 0.0 +dqfma2567 fma 1 0.0 0e+6144 -> 0.0 +dqfma2568 fma 1 -0.0 0e+6144 -> 0.0 + +dqfma2571 fma 0.0 -1.0 0e+6144 -> 0.00 +dqfma2572 fma -0.0 -1.0 0e+6144 -> 0.00 +dqfma2573 fma 0.0 1.0 0e+6144 -> 0.00 +dqfma2574 fma -0.0 1.0 0e+6144 -> 0.00 +dqfma2575 fma -1.0 0.0 0e+6144 -> 0.00 +dqfma2576 fma -1.0 -0.0 0e+6144 -> 0.00 +dqfma2577 fma 1.0 0.0 0e+6144 -> 0.00 +dqfma2578 fma 1.0 -0.0 0e+6144 -> 0.00 +dqfma2579 fma 1.0 0.0 0e+6144 -> 0.00 +dqfma2530 fma -1.0 -0.0 0e+6144 -> 0.00 +dqfma2531 fma -1.0 0.0 0e+6144 -> 0.00 +dqfma2532 fma 1.0 -0.0 -0e+6144 -> -0.00 +dqfma2533 fma 1.0 0.0 -0e+6144 -> 0.00 +dqfma2534 fma -1.0 -0.0 -0e+6144 -> 0.00 +dqfma2535 fma -1.0 0.0 -0e+6144 -> -0.00 + + +-- Specials +dqfma2580 fma Inf -Inf 0e+6144 -> -Infinity +dqfma2581 fma Inf -1000 0e+6144 -> -Infinity +dqfma2582 fma Inf -1 0e+6144 -> -Infinity +dqfma2583 fma Inf -0 0e+6144 -> NaN Invalid_operation +dqfma2584 fma Inf 0 0e+6144 -> NaN Invalid_operation +dqfma2585 fma Inf 1 0e+6144 -> Infinity +dqfma2586 fma Inf 1000 0e+6144 -> Infinity +dqfma2587 fma Inf Inf 0e+6144 -> Infinity +dqfma2588 fma -1000 Inf 0e+6144 -> -Infinity +dqfma2589 fma -Inf Inf 0e+6144 -> -Infinity +dqfma2590 fma -1 Inf 0e+6144 -> -Infinity +dqfma2591 fma -0 Inf 0e+6144 -> NaN Invalid_operation +dqfma2592 fma 0 Inf 0e+6144 -> NaN Invalid_operation +dqfma2593 fma 1 Inf 0e+6144 -> Infinity +dqfma2594 fma 1000 Inf 0e+6144 -> Infinity +dqfma2595 fma Inf Inf 0e+6144 -> Infinity + +dqfma2600 fma -Inf -Inf 0e+6144 -> Infinity +dqfma2601 fma -Inf -1000 0e+6144 -> Infinity +dqfma2602 fma -Inf -1 0e+6144 -> Infinity +dqfma2603 fma -Inf -0 0e+6144 -> NaN Invalid_operation +dqfma2604 fma -Inf 0 0e+6144 -> NaN Invalid_operation +dqfma2605 fma -Inf 1 0e+6144 -> -Infinity +dqfma2606 fma -Inf 1000 0e+6144 -> -Infinity +dqfma2607 fma -Inf Inf 0e+6144 -> -Infinity +dqfma2608 fma -1000 Inf 0e+6144 -> -Infinity +dqfma2609 fma -Inf -Inf 0e+6144 -> Infinity +dqfma2610 fma -1 -Inf 0e+6144 -> Infinity +dqfma2611 fma -0 -Inf 0e+6144 -> NaN Invalid_operation +dqfma2612 fma 0 -Inf 0e+6144 -> NaN Invalid_operation +dqfma2613 fma 1 -Inf 0e+6144 -> -Infinity +dqfma2614 fma 1000 -Inf 0e+6144 -> -Infinity +dqfma2615 fma Inf -Inf 0e+6144 -> -Infinity + +dqfma2621 fma NaN -Inf 0e+6144 -> NaN +dqfma2622 fma NaN -1000 0e+6144 -> NaN +dqfma2623 fma NaN -1 0e+6144 -> NaN +dqfma2624 fma NaN -0 0e+6144 -> NaN +dqfma2625 fma NaN 0 0e+6144 -> NaN +dqfma2626 fma NaN 1 0e+6144 -> NaN +dqfma2627 fma NaN 1000 0e+6144 -> NaN +dqfma2628 fma NaN Inf 0e+6144 -> NaN +dqfma2629 fma NaN NaN 0e+6144 -> NaN +dqfma2630 fma -Inf NaN 0e+6144 -> NaN +dqfma2631 fma -1000 NaN 0e+6144 -> NaN +dqfma2632 fma -1 NaN 0e+6144 -> NaN +dqfma2633 fma -0 NaN 0e+6144 -> NaN +dqfma2634 fma 0 NaN 0e+6144 -> NaN +dqfma2635 fma 1 NaN 0e+6144 -> NaN +dqfma2636 fma 1000 NaN 0e+6144 -> NaN +dqfma2637 fma Inf NaN 0e+6144 -> NaN + +dqfma2641 fma sNaN -Inf 0e+6144 -> NaN Invalid_operation +dqfma2642 fma sNaN -1000 0e+6144 -> NaN Invalid_operation +dqfma2643 fma sNaN -1 0e+6144 -> NaN Invalid_operation +dqfma2644 fma sNaN -0 0e+6144 -> NaN Invalid_operation +dqfma2645 fma sNaN 0 0e+6144 -> NaN Invalid_operation +dqfma2646 fma sNaN 1 0e+6144 -> NaN Invalid_operation +dqfma2647 fma sNaN 1000 0e+6144 -> NaN Invalid_operation +dqfma2648 fma sNaN NaN 0e+6144 -> NaN Invalid_operation +dqfma2649 fma sNaN sNaN 0e+6144 -> NaN Invalid_operation +dqfma2650 fma NaN sNaN 0e+6144 -> NaN Invalid_operation +dqfma2651 fma -Inf sNaN 0e+6144 -> NaN Invalid_operation +dqfma2652 fma -1000 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2653 fma -1 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2654 fma -0 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2655 fma 0 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2656 fma 1 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2657 fma 1000 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2658 fma Inf sNaN 0e+6144 -> NaN Invalid_operation +dqfma2659 fma NaN sNaN 0e+6144 -> NaN Invalid_operation + +-- propagating NaNs +dqfma2661 fma NaN9 -Inf 0e+6144 -> NaN9 +dqfma2662 fma NaN8 999 0e+6144 -> NaN8 +dqfma2663 fma NaN71 Inf 0e+6144 -> NaN71 +dqfma2664 fma NaN6 NaN5 0e+6144 -> NaN6 +dqfma2665 fma -Inf NaN4 0e+6144 -> NaN4 +dqfma2666 fma -999 NaN33 0e+6144 -> NaN33 +dqfma2667 fma Inf NaN2 0e+6144 -> NaN2 + +dqfma2671 fma sNaN99 -Inf 0e+6144 -> NaN99 Invalid_operation +dqfma2672 fma sNaN98 -11 0e+6144 -> NaN98 Invalid_operation +dqfma2673 fma sNaN97 NaN 0e+6144 -> NaN97 Invalid_operation +dqfma2674 fma sNaN16 sNaN94 0e+6144 -> NaN16 Invalid_operation +dqfma2675 fma NaN95 sNaN93 0e+6144 -> NaN93 Invalid_operation +dqfma2676 fma -Inf sNaN92 0e+6144 -> NaN92 Invalid_operation +dqfma2677 fma 088 sNaN91 0e+6144 -> NaN91 Invalid_operation +dqfma2678 fma Inf sNaN90 0e+6144 -> NaN90 Invalid_operation +dqfma2679 fma NaN sNaN89 0e+6144 -> NaN89 Invalid_operation + +dqfma2681 fma -NaN9 -Inf 0e+6144 -> -NaN9 +dqfma2682 fma -NaN8 999 0e+6144 -> -NaN8 +dqfma2683 fma -NaN71 Inf 0e+6144 -> -NaN71 +dqfma2684 fma -NaN6 -NaN5 0e+6144 -> -NaN6 +dqfma2685 fma -Inf -NaN4 0e+6144 -> -NaN4 +dqfma2686 fma -999 -NaN33 0e+6144 -> -NaN33 +dqfma2687 fma Inf -NaN2 0e+6144 -> -NaN2 + +dqfma2691 fma -sNaN99 -Inf 0e+6144 -> -NaN99 Invalid_operation +dqfma2692 fma -sNaN98 -11 0e+6144 -> -NaN98 Invalid_operation +dqfma2693 fma -sNaN97 NaN 0e+6144 -> -NaN97 Invalid_operation +dqfma2694 fma -sNaN16 -sNaN94 0e+6144 -> -NaN16 Invalid_operation +dqfma2695 fma -NaN95 -sNaN93 0e+6144 -> -NaN93 Invalid_operation +dqfma2696 fma -Inf -sNaN92 0e+6144 -> -NaN92 Invalid_operation +dqfma2697 fma 088 -sNaN91 0e+6144 -> -NaN91 Invalid_operation +dqfma2698 fma Inf -sNaN90 0e+6144 -> -NaN90 Invalid_operation +dqfma2699 fma -NaN -sNaN89 0e+6144 -> -NaN89 Invalid_operation + +dqfma2701 fma -NaN -Inf 0e+6144 -> -NaN +dqfma2702 fma -NaN 999 0e+6144 -> -NaN +dqfma2703 fma -NaN Inf 0e+6144 -> -NaN +dqfma2704 fma -NaN -NaN 0e+6144 -> -NaN +dqfma2705 fma -Inf -NaN0 0e+6144 -> -NaN +dqfma2706 fma -999 -NaN 0e+6144 -> -NaN +dqfma2707 fma Inf -NaN 0e+6144 -> -NaN + +dqfma2711 fma -sNaN -Inf 0e+6144 -> -NaN Invalid_operation +dqfma2712 fma -sNaN -11 0e+6144 -> -NaN Invalid_operation +dqfma2713 fma -sNaN00 NaN 0e+6144 -> -NaN Invalid_operation +dqfma2714 fma -sNaN -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2715 fma -NaN -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2716 fma -Inf -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2717 fma 088 -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2718 fma Inf -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2719 fma -NaN -sNaN 0e+6144 -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +-- signs +dqfma2751 fma 1e+4277 1e+3311 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2752 fma 1e+4277 -1e+3311 0e+6144 -> -Infinity Overflow Inexact Rounded +dqfma2753 fma -1e+4277 1e+3311 0e+6144 -> -Infinity Overflow Inexact Rounded +dqfma2754 fma -1e+4277 -1e+3311 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2755 fma 1e-4277 1e-3311 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2756 fma 1e-4277 -1e-3311 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2757 fma -1e-4277 1e-3311 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2758 fma -1e-4277 -1e-3311 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dqfma2760 fma 1e-6069 1e-101 0e+6144 -> 1E-6170 Subnormal +dqfma2761 fma 1e-6069 1e-102 0e+6144 -> 1E-6171 Subnormal +dqfma2762 fma 1e-6069 1e-103 0e+6144 -> 1E-6172 Subnormal +dqfma2763 fma 1e-6069 1e-104 0e+6144 -> 1E-6173 Subnormal +dqfma2764 fma 1e-6069 1e-105 0e+6144 -> 1E-6174 Subnormal +dqfma2765 fma 1e-6069 1e-106 0e+6144 -> 1E-6175 Subnormal +dqfma2766 fma 1e-6069 1e-107 0e+6144 -> 1E-6176 Subnormal +dqfma2767 fma 1e-6069 1e-108 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2768 fma 1e-6069 1e-109 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2769 fma 1e-6069 1e-110 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +dqfma2770 fma 1e+40 1e+6101 0e+6144 -> 1.000000000000000000000000000000E+6141 Clamped +dqfma2771 fma 1e+40 1e+6102 0e+6144 -> 1.0000000000000000000000000000000E+6142 Clamped +dqfma2772 fma 1e+40 1e+6103 0e+6144 -> 1.00000000000000000000000000000000E+6143 Clamped +dqfma2773 fma 1e+40 1e+6104 0e+6144 -> 1.000000000000000000000000000000000E+6144 Clamped +dqfma2774 fma 1e+40 1e+6105 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2775 fma 1e+40 1e+6106 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2776 fma 1e+40 1e+6107 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2777 fma 1e+40 1e+6108 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2778 fma 1e+40 1e+6109 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2779 fma 1e+40 1e+6110 0e+6144 -> Infinity Overflow Inexact Rounded + +dqfma2801 fma 1.0000E-6172 1 0e+6144 -> 1.0000E-6172 Subnormal +dqfma2802 fma 1.000E-6172 1e-1 0e+6144 -> 1.000E-6173 Subnormal +dqfma2803 fma 1.00E-6172 1e-2 0e+6144 -> 1.00E-6174 Subnormal +dqfma2804 fma 1.0E-6172 1e-3 0e+6144 -> 1.0E-6175 Subnormal +dqfma2805 fma 1.0E-6172 1e-4 0e+6144 -> 1E-6176 Subnormal Rounded +dqfma2806 fma 1.3E-6172 1e-4 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqfma2807 fma 1.5E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2808 fma 1.7E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2809 fma 2.3E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2810 fma 2.5E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2811 fma 2.7E-6172 1e-4 0e+6144 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqfma2812 fma 1.49E-6172 1e-4 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqfma2813 fma 1.50E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2814 fma 1.51E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2815 fma 2.49E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2816 fma 2.50E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2817 fma 2.51E-6172 1e-4 0e+6144 -> 3E-6176 Underflow Subnormal Inexact Rounded + +dqfma2818 fma 1E-6172 1e-4 0e+6144 -> 1E-6176 Subnormal +dqfma2819 fma 3E-6172 1e-5 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2820 fma 5E-6172 1e-5 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2821 fma 7E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqfma2822 fma 9E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqfma2823 fma 9.9E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded + +dqfma2824 fma 1E-6172 -1e-4 0e+6144 -> -1E-6176 Subnormal +dqfma2825 fma 3E-6172 -1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2826 fma -5E-6172 1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2827 fma 7E-6172 -1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqfma2828 fma -9E-6172 1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqfma2829 fma 9.9E-6172 -1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqfma2830 fma 3.0E-6172 -1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqfma2831 fma 1.0E-5977 1e-200 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2832 fma 1.0E-5977 1e-199 0e+6144 -> 1E-6176 Subnormal Rounded +dqfma2833 fma 1.0E-5977 1e-198 0e+6144 -> 1.0E-6175 Subnormal +dqfma2834 fma 2.0E-5977 2e-198 0e+6144 -> 4.0E-6175 Subnormal +dqfma2835 fma 4.0E-5977 4e-198 0e+6144 -> 1.60E-6174 Subnormal +dqfma2836 fma 10.0E-5977 10e-198 0e+6144 -> 1.000E-6173 Subnormal +dqfma2837 fma 30.0E-5977 30e-198 0e+6144 -> 9.000E-6173 Subnormal +dqfma2838 fma 40.0E-5982 40e-166 0e+6144 -> 1.6000E-6145 Subnormal +dqfma2839 fma 40.0E-5982 40e-165 0e+6144 -> 1.6000E-6144 Subnormal +dqfma2840 fma 40.0E-5982 40e-164 0e+6144 -> 1.6000E-6143 + +-- Long operand overflow may be a different path +dqfma2870 fma 100 9.999E+6143 0e+6144 -> Infinity Inexact Overflow Rounded +dqfma2871 fma 100 -9.999E+6143 0e+6144 -> -Infinity Inexact Overflow Rounded +dqfma2872 fma 9.999E+6143 100 0e+6144 -> Infinity Inexact Overflow Rounded +dqfma2873 fma -9.999E+6143 100 0e+6144 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +dqfma2881 fma 1.2347E-6133 1.2347E-40 0e+6144 -> 1.524E-6173 Inexact Rounded Subnormal Underflow +dqfma2882 fma 1.234E-6133 1.234E-40 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqfma2883 fma 1.23E-6133 1.23E-40 0e+6144 -> 1.513E-6173 Inexact Rounded Subnormal Underflow +dqfma2884 fma 1.2E-6133 1.2E-40 0e+6144 -> 1.44E-6173 Subnormal +dqfma2885 fma 1.2E-6133 1.2E-41 0e+6144 -> 1.44E-6174 Subnormal +dqfma2886 fma 1.2E-6133 1.2E-42 0e+6144 -> 1.4E-6175 Subnormal Inexact Rounded Underflow +dqfma2887 fma 1.2E-6133 1.3E-42 0e+6144 -> 1.6E-6175 Subnormal Inexact Rounded Underflow +dqfma2888 fma 1.3E-6133 1.3E-42 0e+6144 -> 1.7E-6175 Subnormal Inexact Rounded Underflow +dqfma2889 fma 1.3E-6133 1.3E-43 0e+6144 -> 2E-6176 Subnormal Inexact Rounded Underflow +dqfma2890 fma 1.3E-6134 1.3E-43 0e+6144 -> 0E-6176 Clamped Subnormal Inexact Rounded Underflow + +dqfma2891 fma 1.2345E-39 1.234E-6133 0e+6144 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow +dqfma2892 fma 1.23456E-39 1.234E-6133 0e+6144 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow +dqfma2893 fma 1.2345E-40 1.234E-6133 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqfma2894 fma 1.23456E-40 1.234E-6133 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqfma2895 fma 1.2345E-41 1.234E-6133 0e+6144 -> 1.52E-6174 Inexact Rounded Subnormal Underflow +dqfma2896 fma 1.23456E-41 1.234E-6133 0e+6144 -> 1.52E-6174 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +-- prove operands are exact +dqfma2906 fma 9.999999999999999999999999999999999E-6143 1 0e+6144 -> 9.999999999999999999999999999999999E-6143 +dqfma2907 fma 1 0.09999999999999999999999999999999999 0e+6144 -> 0.09999999999999999999999999999999999 +-- the next rounds to Nmin +dqfma2908 fma 9.999999999999999999999999999999999E-6143 0.09999999999999999999999999999999999 0e+6144 -> 1.000000000000000000000000000000000E-6143 Underflow Inexact Subnormal Rounded + +-- hugest +dqfma2909 fma 9999999999999999999999999999999999 9999999999999999999999999999999999 0e+6144 -> 9.999999999999999999999999999999998E+67 Inexact Rounded + +-- Examples from SQL proposal (Krishna Kulkarni) +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 +dqfma21001 fma 130E-2 120E-2 0e+6144 -> 1.5600 +dqfma21002 fma 130E-2 12E-1 0e+6144 -> 1.560 +dqfma21003 fma 130E-2 1E0 0e+6144 -> 1.30 +dqfma21004 fma 1E2 1E4 0e+6144 -> 1E+6 + +-- Null tests +dqfma2990 fma 10 # 0e+6144 -> NaN Invalid_operation +dqfma2991 fma # 10 0e+6144 -> NaN Invalid_operation + + +-- ADDITION TESTS ------------------------------------------------------ +rounding: half_even + +-- [first group are 'quick confidence check'] +dqadd3001 fma 1 1 1 -> 2 +dqadd3002 fma 1 2 3 -> 5 +dqadd3003 fma 1 '5.75' '3.3' -> 9.05 +dqadd3004 fma 1 '5' '-3' -> 2 +dqadd3005 fma 1 '-5' '-3' -> -8 +dqadd3006 fma 1 '-7' '2.5' -> -4.5 +dqadd3007 fma 1 '0.7' '0.3' -> 1.0 +dqadd3008 fma 1 '1.25' '1.25' -> 2.50 +dqadd3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' +dqadd3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' + +-- 1234567890123456 1234567890123456 +dqadd3011 fma 1 '0.4444444444444444444444444444444446' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Inexact Rounded +dqadd3012 fma 1 '0.4444444444444444444444444444444445' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Rounded +dqadd3013 fma 1 '0.4444444444444444444444444444444444' '0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' +dqadd3014 fma 1 '4444444444444444444444444444444444' '0.49' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd3015 fma 1 '4444444444444444444444444444444444' '0.499' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd3016 fma 1 '4444444444444444444444444444444444' '0.4999' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd3017 fma 1 '4444444444444444444444444444444444' '0.5000' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd3018 fma 1 '4444444444444444444444444444444444' '0.5001' -> '4444444444444444444444444444444445' Inexact Rounded +dqadd3019 fma 1 '4444444444444444444444444444444444' '0.501' -> '4444444444444444444444444444444445' Inexact Rounded +dqadd3020 fma 1 '4444444444444444444444444444444444' '0.51' -> '4444444444444444444444444444444445' Inexact Rounded + +dqadd3021 fma 1 0 1 -> 1 +dqadd3022 fma 1 1 1 -> 2 +dqadd3023 fma 1 2 1 -> 3 +dqadd3024 fma 1 3 1 -> 4 +dqadd3025 fma 1 4 1 -> 5 +dqadd3026 fma 1 5 1 -> 6 +dqadd3027 fma 1 6 1 -> 7 +dqadd3028 fma 1 7 1 -> 8 +dqadd3029 fma 1 8 1 -> 9 +dqadd3030 fma 1 9 1 -> 10 + +-- some carrying effects +dqadd3031 fma 1 '0.9998' '0.0000' -> '0.9998' +dqadd3032 fma 1 '0.9998' '0.0001' -> '0.9999' +dqadd3033 fma 1 '0.9998' '0.0002' -> '1.0000' +dqadd3034 fma 1 '0.9998' '0.0003' -> '1.0001' + +dqadd3035 fma 1 '70' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3036 fma 1 '700' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3037 fma 1 '7000' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3038 fma 1 '70000' '10000e+34' -> '1.000000000000000000000000000000001E+38' Inexact Rounded +dqadd3039 fma 1 '700000' '10000e+34' -> '1.000000000000000000000000000000007E+38' Rounded + +-- symmetry: +dqadd3040 fma 1 '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3041 fma 1 '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3042 fma 1 '10000e+34' '7000' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3044 fma 1 '10000e+34' '70000' -> '1.000000000000000000000000000000001E+38' Inexact Rounded +dqadd3045 fma 1 '10000e+34' '700000' -> '1.000000000000000000000000000000007E+38' Rounded + +-- same, without rounding +dqadd3046 fma 1 '10000e+9' '7' -> '10000000000007' +dqadd3047 fma 1 '10000e+9' '70' -> '10000000000070' +dqadd3048 fma 1 '10000e+9' '700' -> '10000000000700' +dqadd3049 fma 1 '10000e+9' '7000' -> '10000000007000' +dqadd3050 fma 1 '10000e+9' '70000' -> '10000000070000' +dqadd3051 fma 1 '10000e+9' '700000' -> '10000000700000' +dqadd3052 fma 1 '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +dqadd3053 fma 1 '12' '7.00' -> '19.00' +dqadd3054 fma 1 '1.3' '-1.07' -> '0.23' +dqadd3055 fma 1 '1.3' '-1.30' -> '0.00' +dqadd3056 fma 1 '1.3' '-2.07' -> '-0.77' +dqadd3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' + +-- leading zero preservation +dqadd3061 fma 1 1 '0.0001' -> '1.0001' +dqadd3062 fma 1 1 '0.00001' -> '1.00001' +dqadd3063 fma 1 1 '0.000001' -> '1.000001' +dqadd3064 fma 1 1 '0.0000001' -> '1.0000001' +dqadd3065 fma 1 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +dqadd3070 fma 1 1 0 -> 1 +dqadd3071 fma 1 1 0. -> 1 +dqadd3072 fma 1 1 .0 -> 1.0 +dqadd3073 fma 1 1 0.0 -> 1.0 +dqadd3074 fma 1 1 0.00 -> 1.00 +dqadd3075 fma 1 0 1 -> 1 +dqadd3076 fma 1 0. 1 -> 1 +dqadd3077 fma 1 .0 1 -> 1.0 +dqadd3078 fma 1 0.0 1 -> 1.0 +dqadd3079 fma 1 0.00 1 -> 1.00 + +-- some carries +dqadd3080 fma 1 999999998 1 -> 999999999 +dqadd3081 fma 1 999999999 1 -> 1000000000 +dqadd3082 fma 1 99999999 1 -> 100000000 +dqadd3083 fma 1 9999999 1 -> 10000000 +dqadd3084 fma 1 999999 1 -> 1000000 +dqadd3085 fma 1 99999 1 -> 100000 +dqadd3086 fma 1 9999 1 -> 10000 +dqadd3087 fma 1 999 1 -> 1000 +dqadd3088 fma 1 99 1 -> 100 +dqadd3089 fma 1 9 1 -> 10 + + +-- more LHS swaps +dqadd3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' +dqadd3091 fma 1 '-56267E-6' 0 -> '-0.056267' +dqadd3092 fma 1 '-56267E-5' 0 -> '-0.56267' +dqadd3093 fma 1 '-56267E-4' 0 -> '-5.6267' +dqadd3094 fma 1 '-56267E-3' 0 -> '-56.267' +dqadd3095 fma 1 '-56267E-2' 0 -> '-562.67' +dqadd3096 fma 1 '-56267E-1' 0 -> '-5626.7' +dqadd3097 fma 1 '-56267E-0' 0 -> '-56267' +dqadd3098 fma 1 '-5E-10' 0 -> '-5E-10' +dqadd3099 fma 1 '-5E-7' 0 -> '-5E-7' +dqadd3100 fma 1 '-5E-6' 0 -> '-0.000005' +dqadd3101 fma 1 '-5E-5' 0 -> '-0.00005' +dqadd3102 fma 1 '-5E-4' 0 -> '-0.0005' +dqadd3103 fma 1 '-5E-1' 0 -> '-0.5' +dqadd3104 fma 1 '-5E0' 0 -> '-5' +dqadd3105 fma 1 '-5E1' 0 -> '-50' +dqadd3106 fma 1 '-5E5' 0 -> '-500000' +dqadd3107 fma 1 '-5E33' 0 -> '-5000000000000000000000000000000000' +dqadd3108 fma 1 '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded +dqadd3109 fma 1 '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded +dqadd3110 fma 1 '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded +dqadd3111 fma 1 '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded + +-- more RHS swaps +dqadd3113 fma 1 0 '-56267E-10' -> '-0.0000056267' +dqadd3114 fma 1 0 '-56267E-6' -> '-0.056267' +dqadd3116 fma 1 0 '-56267E-5' -> '-0.56267' +dqadd3117 fma 1 0 '-56267E-4' -> '-5.6267' +dqadd3119 fma 1 0 '-56267E-3' -> '-56.267' +dqadd3120 fma 1 0 '-56267E-2' -> '-562.67' +dqadd3121 fma 1 0 '-56267E-1' -> '-5626.7' +dqadd3122 fma 1 0 '-56267E-0' -> '-56267' +dqadd3123 fma 1 0 '-5E-10' -> '-5E-10' +dqadd3124 fma 1 0 '-5E-7' -> '-5E-7' +dqadd3125 fma 1 0 '-5E-6' -> '-0.000005' +dqadd3126 fma 1 0 '-5E-5' -> '-0.00005' +dqadd3127 fma 1 0 '-5E-4' -> '-0.0005' +dqadd3128 fma 1 0 '-5E-1' -> '-0.5' +dqadd3129 fma 1 0 '-5E0' -> '-5' +dqadd3130 fma 1 0 '-5E1' -> '-50' +dqadd3131 fma 1 0 '-5E5' -> '-500000' +dqadd3132 fma 1 0 '-5E33' -> '-5000000000000000000000000000000000' +dqadd3133 fma 1 0 '-5E34' -> '-5.000000000000000000000000000000000E+34' Rounded +dqadd3134 fma 1 0 '-5E35' -> '-5.000000000000000000000000000000000E+35' Rounded +dqadd3135 fma 1 0 '-5E36' -> '-5.000000000000000000000000000000000E+36' Rounded +dqadd3136 fma 1 0 '-5E100' -> '-5.000000000000000000000000000000000E+100' Rounded + +-- related +dqadd3137 fma 1 1 '0E-39' -> '1.000000000000000000000000000000000' Rounded +dqadd3138 fma 1 -1 '0E-39' -> '-1.000000000000000000000000000000000' Rounded +dqadd3139 fma 1 '0E-39' 1 -> '1.000000000000000000000000000000000' Rounded +dqadd3140 fma 1 '0E-39' -1 -> '-1.000000000000000000000000000000000' Rounded +dqadd3141 fma 1 1E+29 0.0000 -> '100000000000000000000000000000.0000' +dqadd3142 fma 1 1E+29 0.00000 -> '100000000000000000000000000000.0000' Rounded +dqadd3143 fma 1 0.000 1E+30 -> '1000000000000000000000000000000.000' +dqadd3144 fma 1 0.0000 1E+30 -> '1000000000000000000000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +dqadd3146 fma 1 '00.0' 0 -> '0.0' +dqadd3147 fma 1 '0.00' 0 -> '0.00' +dqadd3148 fma 1 0 '0.00' -> '0.00' +dqadd3149 fma 1 0 '00.0' -> '0.0' +dqadd3150 fma 1 '00.0' '0.00' -> '0.00' +dqadd3151 fma 1 '0.00' '00.0' -> '0.00' +dqadd3152 fma 1 '3' '.3' -> '3.3' +dqadd3153 fma 1 '3.' '.3' -> '3.3' +dqadd3154 fma 1 '3.0' '.3' -> '3.3' +dqadd3155 fma 1 '3.00' '.3' -> '3.30' +dqadd3156 fma 1 '3' '3' -> '6' +dqadd3157 fma 1 '3' '+3' -> '6' +dqadd3158 fma 1 '3' '-3' -> '0' +dqadd3159 fma 1 '0.3' '-0.3' -> '0.0' +dqadd3160 fma 1 '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +dqadd3161 fma 1 '1E+12' '-1' -> '999999999999' +dqadd3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' +dqadd3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' +dqadd3164 fma 1 '-1' '1E+12' -> '999999999999' +dqadd3165 fma 1 '7E+12' '-1' -> '6999999999999' +dqadd3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' +dqadd3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' +dqadd3168 fma 1 '-1' '7E+12' -> '6999999999999' + +rounding: half_up +dqadd3170 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555567' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd3171 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555566' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd3172 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555565' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd3173 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555564' -> '5.000000000000000000000000000000000' Inexact Rounded +dqadd3174 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555553' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd3175 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555552' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd3176 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555551' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd3177 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555550' -> '4.999999999999999999999999999999999' Rounded +dqadd3178 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555545' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd3179 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555544' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd3180 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555543' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd3181 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555542' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd3182 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555541' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd3183 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555540' -> '4.999999999999999999999999999999998' Rounded + +-- and some more, including residue effects and different roundings +rounding: half_up +dqadd3200 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd3201 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3202 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3203 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3204 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3205 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3206 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3207 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3208 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3209 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3210 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3211 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3212 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3213 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3214 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3215 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3216 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd3217 fma 1 '1231234567890123456784560123456789' 1.000000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3218 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3219 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded + +rounding: half_even +dqadd3220 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd3221 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3222 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3223 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3224 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3225 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3226 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3227 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3228 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3229 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3230 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3231 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3232 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3233 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3234 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3235 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3236 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd3237 fma 1 '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3238 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3239 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded +-- critical few with even bottom digit... +dqadd3240 fma 1 '1231234567890123456784560123456788' 0.499999999 -> '1231234567890123456784560123456788' Inexact Rounded +dqadd3241 fma 1 '1231234567890123456784560123456788' 0.5 -> '1231234567890123456784560123456788' Inexact Rounded +dqadd3242 fma 1 '1231234567890123456784560123456788' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded + +rounding: down +dqadd3250 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd3251 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3252 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3253 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3254 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3255 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3256 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3257 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3258 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3259 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3260 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3261 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3262 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3263 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3264 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3265 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3266 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd3267 fma 1 '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3268 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3269 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +dqadd3301 fma 1 -1 1 -> 0 +dqadd3302 fma 1 0 1 -> 1 +dqadd3303 fma 1 1 1 -> 2 +dqadd3304 fma 1 12 1 -> 13 +dqadd3305 fma 1 98 1 -> 99 +dqadd3306 fma 1 99 1 -> 100 +dqadd3307 fma 1 100 1 -> 101 +dqadd3308 fma 1 101 1 -> 102 +dqadd3309 fma 1 -1 -1 -> -2 +dqadd3310 fma 1 0 -1 -> -1 +dqadd3311 fma 1 1 -1 -> 0 +dqadd3312 fma 1 12 -1 -> 11 +dqadd3313 fma 1 98 -1 -> 97 +dqadd3314 fma 1 99 -1 -> 98 +dqadd3315 fma 1 100 -1 -> 99 +dqadd3316 fma 1 101 -1 -> 100 + +dqadd3321 fma 1 -0.01 0.01 -> 0.00 +dqadd3322 fma 1 0.00 0.01 -> 0.01 +dqadd3323 fma 1 0.01 0.01 -> 0.02 +dqadd3324 fma 1 0.12 0.01 -> 0.13 +dqadd3325 fma 1 0.98 0.01 -> 0.99 +dqadd3326 fma 1 0.99 0.01 -> 1.00 +dqadd3327 fma 1 1.00 0.01 -> 1.01 +dqadd3328 fma 1 1.01 0.01 -> 1.02 +dqadd3329 fma 1 -0.01 -0.01 -> -0.02 +dqadd3330 fma 1 0.00 -0.01 -> -0.01 +dqadd3331 fma 1 0.01 -0.01 -> 0.00 +dqadd3332 fma 1 0.12 -0.01 -> 0.11 +dqadd3333 fma 1 0.98 -0.01 -> 0.97 +dqadd3334 fma 1 0.99 -0.01 -> 0.98 +dqadd3335 fma 1 1.00 -0.01 -> 0.99 +dqadd3336 fma 1 1.01 -0.01 -> 1.00 + +-- some more cases where adding 0 affects the coefficient +dqadd3340 fma 1 1E+3 0 -> 1000 +dqadd3341 fma 1 1E+33 0 -> 1000000000000000000000000000000000 +dqadd3342 fma 1 1E+34 0 -> 1.000000000000000000000000000000000E+34 Rounded +dqadd3343 fma 1 1E+35 0 -> 1.000000000000000000000000000000000E+35 Rounded +-- which simply follow from these cases ... +dqadd3344 fma 1 1E+3 1 -> 1001 +dqadd3345 fma 1 1E+33 1 -> 1000000000000000000000000000000001 +dqadd3346 fma 1 1E+34 1 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd3347 fma 1 1E+35 1 -> 1.000000000000000000000000000000000E+35 Inexact Rounded +dqadd3348 fma 1 1E+3 7 -> 1007 +dqadd3349 fma 1 1E+33 7 -> 1000000000000000000000000000000007 +dqadd3350 fma 1 1E+34 7 -> 1.000000000000000000000000000000001E+34 Inexact Rounded +dqadd3351 fma 1 1E+35 7 -> 1.000000000000000000000000000000000E+35 Inexact Rounded + +-- tryzeros cases +rounding: half_up +dqadd3360 fma 1 0E+50 10000E+1 -> 1.0000E+5 +dqadd3361 fma 1 0E-50 10000E+1 -> 100000.0000000000000000000000000000 Rounded +dqadd3362 fma 1 10000E+1 0E-50 -> 100000.0000000000000000000000000000 Rounded +dqadd3363 fma 1 10000E+1 10000E-50 -> 100000.0000000000000000000000000000 Rounded Inexact +dqadd3364 fma 1 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0E+6111 +-- 1 234567890123456789012345678901234 + +-- a curiosity from JSR 13 testing +rounding: half_down +dqadd3370 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd3371 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact +rounding: half_up +dqadd3372 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd3373 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact +rounding: half_even +dqadd3374 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd3375 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact + +-- ulp replacement tests +dqadd3400 fma 1 1 77e-32 -> 1.00000000000000000000000000000077 +dqadd3401 fma 1 1 77e-33 -> 1.000000000000000000000000000000077 +dqadd3402 fma 1 1 77e-34 -> 1.000000000000000000000000000000008 Inexact Rounded +dqadd3403 fma 1 1 77e-35 -> 1.000000000000000000000000000000001 Inexact Rounded +dqadd3404 fma 1 1 77e-36 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd3405 fma 1 1 77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd3406 fma 1 1 77e-299 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd3410 fma 1 10 77e-32 -> 10.00000000000000000000000000000077 +dqadd3411 fma 1 10 77e-33 -> 10.00000000000000000000000000000008 Inexact Rounded +dqadd3412 fma 1 10 77e-34 -> 10.00000000000000000000000000000001 Inexact Rounded +dqadd3413 fma 1 10 77e-35 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3414 fma 1 10 77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3415 fma 1 10 77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3416 fma 1 10 77e-299 -> 10.00000000000000000000000000000000 Inexact Rounded + +dqadd3420 fma 1 77e-32 1 -> 1.00000000000000000000000000000077 +dqadd3421 fma 1 77e-33 1 -> 1.000000000000000000000000000000077 +dqadd3422 fma 1 77e-34 1 -> 1.000000000000000000000000000000008 Inexact Rounded +dqadd3423 fma 1 77e-35 1 -> 1.000000000000000000000000000000001 Inexact Rounded +dqadd3424 fma 1 77e-36 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd3425 fma 1 77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd3426 fma 1 77e-299 1 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd3430 fma 1 77e-32 10 -> 10.00000000000000000000000000000077 +dqadd3431 fma 1 77e-33 10 -> 10.00000000000000000000000000000008 Inexact Rounded +dqadd3432 fma 1 77e-34 10 -> 10.00000000000000000000000000000001 Inexact Rounded +dqadd3433 fma 1 77e-35 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3434 fma 1 77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3435 fma 1 77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3436 fma 1 77e-299 10 -> 10.00000000000000000000000000000000 Inexact Rounded + +-- negative ulps +dqadd36440 fma 1 1 -77e-32 -> 0.99999999999999999999999999999923 +dqadd36441 fma 1 1 -77e-33 -> 0.999999999999999999999999999999923 +dqadd36442 fma 1 1 -77e-34 -> 0.9999999999999999999999999999999923 +dqadd36443 fma 1 1 -77e-35 -> 0.9999999999999999999999999999999992 Inexact Rounded +dqadd36444 fma 1 1 -77e-36 -> 0.9999999999999999999999999999999999 Inexact Rounded +dqadd36445 fma 1 1 -77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd36446 fma 1 1 -77e-99 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd36450 fma 1 10 -77e-32 -> 9.99999999999999999999999999999923 +dqadd36451 fma 1 10 -77e-33 -> 9.999999999999999999999999999999923 +dqadd36452 fma 1 10 -77e-34 -> 9.999999999999999999999999999999992 Inexact Rounded +dqadd36453 fma 1 10 -77e-35 -> 9.999999999999999999999999999999999 Inexact Rounded +dqadd36454 fma 1 10 -77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd36455 fma 1 10 -77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd36456 fma 1 10 -77e-99 -> 10.00000000000000000000000000000000 Inexact Rounded + +dqadd36460 fma 1 -77e-32 1 -> 0.99999999999999999999999999999923 +dqadd36461 fma 1 -77e-33 1 -> 0.999999999999999999999999999999923 +dqadd36462 fma 1 -77e-34 1 -> 0.9999999999999999999999999999999923 +dqadd36463 fma 1 -77e-35 1 -> 0.9999999999999999999999999999999992 Inexact Rounded +dqadd36464 fma 1 -77e-36 1 -> 0.9999999999999999999999999999999999 Inexact Rounded +dqadd36465 fma 1 -77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd36466 fma 1 -77e-99 1 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd36470 fma 1 -77e-32 10 -> 9.99999999999999999999999999999923 +dqadd36471 fma 1 -77e-33 10 -> 9.999999999999999999999999999999923 +dqadd36472 fma 1 -77e-34 10 -> 9.999999999999999999999999999999992 Inexact Rounded +dqadd36473 fma 1 -77e-35 10 -> 9.999999999999999999999999999999999 Inexact Rounded +dqadd36474 fma 1 -77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd36475 fma 1 -77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd36476 fma 1 -77e-99 10 -> 10.00000000000000000000000000000000 Inexact Rounded + +-- negative ulps +dqadd36480 fma 1 -1 77e-32 -> -0.99999999999999999999999999999923 +dqadd36481 fma 1 -1 77e-33 -> -0.999999999999999999999999999999923 +dqadd36482 fma 1 -1 77e-34 -> -0.9999999999999999999999999999999923 +dqadd36483 fma 1 -1 77e-35 -> -0.9999999999999999999999999999999992 Inexact Rounded +dqadd36484 fma 1 -1 77e-36 -> -0.9999999999999999999999999999999999 Inexact Rounded +dqadd36485 fma 1 -1 77e-37 -> -1.000000000000000000000000000000000 Inexact Rounded +dqadd36486 fma 1 -1 77e-99 -> -1.000000000000000000000000000000000 Inexact Rounded + +dqadd36490 fma 1 -10 77e-32 -> -9.99999999999999999999999999999923 +dqadd36491 fma 1 -10 77e-33 -> -9.999999999999999999999999999999923 +dqadd36492 fma 1 -10 77e-34 -> -9.999999999999999999999999999999992 Inexact Rounded +dqadd36493 fma 1 -10 77e-35 -> -9.999999999999999999999999999999999 Inexact Rounded +dqadd36494 fma 1 -10 77e-36 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd36495 fma 1 -10 77e-37 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd36496 fma 1 -10 77e-99 -> -10.00000000000000000000000000000000 Inexact Rounded + +dqadd36500 fma 1 77e-32 -1 -> -0.99999999999999999999999999999923 +dqadd36501 fma 1 77e-33 -1 -> -0.999999999999999999999999999999923 +dqadd36502 fma 1 77e-34 -1 -> -0.9999999999999999999999999999999923 +dqadd36503 fma 1 77e-35 -1 -> -0.9999999999999999999999999999999992 Inexact Rounded +dqadd36504 fma 1 77e-36 -1 -> -0.9999999999999999999999999999999999 Inexact Rounded +dqadd36505 fma 1 77e-37 -1 -> -1.000000000000000000000000000000000 Inexact Rounded +dqadd36506 fma 1 77e-99 -1 -> -1.000000000000000000000000000000000 Inexact Rounded + +dqadd36510 fma 1 77e-32 -10 -> -9.99999999999999999999999999999923 +dqadd36511 fma 1 77e-33 -10 -> -9.999999999999999999999999999999923 +dqadd36512 fma 1 77e-34 -10 -> -9.999999999999999999999999999999992 Inexact Rounded +dqadd36513 fma 1 77e-35 -10 -> -9.999999999999999999999999999999999 Inexact Rounded +dqadd36514 fma 1 77e-36 -10 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd36515 fma 1 77e-37 -10 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd36516 fma 1 77e-99 -10 -> -10.00000000000000000000000000000000 Inexact Rounded + +-- and some more residue effects and different roundings +rounding: half_up +dqadd36540 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd36541 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36542 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36543 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36544 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36545 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36546 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36547 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36548 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36549 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36550 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36551 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36552 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36553 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36554 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36555 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36556 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd36557 fma 1 '9876543219876543216543210123456789' 1.000000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36558 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36559 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +rounding: half_even +dqadd36560 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd36561 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36562 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36563 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36564 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36565 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36566 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36567 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36568 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36569 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36570 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36571 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36572 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36573 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36574 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36575 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36576 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd36577 fma 1 '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36578 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36579 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +-- critical few with even bottom digit... +dqadd37540 fma 1 '9876543219876543216543210123456788' 0.499999999 -> '9876543219876543216543210123456788' Inexact Rounded +dqadd37541 fma 1 '9876543219876543216543210123456788' 0.5 -> '9876543219876543216543210123456788' Inexact Rounded +dqadd37542 fma 1 '9876543219876543216543210123456788' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded + +rounding: down +dqadd37550 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd37551 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37552 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37553 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37554 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37555 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37556 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37557 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37558 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37559 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37560 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37561 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37562 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37563 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37564 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37565 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37566 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd37567 fma 1 '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd37568 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd37569 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +-- more zeros, etc. +rounding: half_even + +dqadd37701 fma 1 5.00 1.00E-3 -> 5.00100 +dqadd37702 fma 1 00.00 0.000 -> 0.000 +dqadd37703 fma 1 00.00 0E-3 -> 0.000 +dqadd37704 fma 1 0E-3 00.00 -> 0.000 + +dqadd37710 fma 1 0E+3 00.00 -> 0.00 +dqadd37711 fma 1 0E+3 00.0 -> 0.0 +dqadd37712 fma 1 0E+3 00. -> 0 +dqadd37713 fma 1 0E+3 00.E+1 -> 0E+1 +dqadd37714 fma 1 0E+3 00.E+2 -> 0E+2 +dqadd37715 fma 1 0E+3 00.E+3 -> 0E+3 +dqadd37716 fma 1 0E+3 00.E+4 -> 0E+3 +dqadd37717 fma 1 0E+3 00.E+5 -> 0E+3 +dqadd37718 fma 1 0E+3 -00.0 -> 0.0 +dqadd37719 fma 1 0E+3 -00. -> 0 +dqadd37731 fma 1 0E+3 -00.E+1 -> 0E+1 + +dqadd37720 fma 1 00.00 0E+3 -> 0.00 +dqadd37721 fma 1 00.0 0E+3 -> 0.0 +dqadd37722 fma 1 00. 0E+3 -> 0 +dqadd37723 fma 1 00.E+1 0E+3 -> 0E+1 +dqadd37724 fma 1 00.E+2 0E+3 -> 0E+2 +dqadd37725 fma 1 00.E+3 0E+3 -> 0E+3 +dqadd37726 fma 1 00.E+4 0E+3 -> 0E+3 +dqadd37727 fma 1 00.E+5 0E+3 -> 0E+3 +dqadd37728 fma 1 -00.00 0E+3 -> 0.00 +dqadd37729 fma 1 -00.0 0E+3 -> 0.0 +dqadd37730 fma 1 -00. 0E+3 -> 0 + +dqadd37732 fma 1 0 0 -> 0 +dqadd37733 fma 1 0 -0 -> 0 +dqadd37734 fma 1 -0 0 -> 0 +dqadd37735 fma 1 -0 -0 -> -0 -- IEEE 854 special case + +dqadd37736 fma 1 1 -1 -> 0 +dqadd37737 fma 1 -1 -1 -> -2 +dqadd37738 fma 1 1 1 -> 2 +dqadd37739 fma 1 -1 1 -> 0 + +dqadd37741 fma 1 0 -1 -> -1 +dqadd37742 fma 1 -0 -1 -> -1 +dqadd37743 fma 1 0 1 -> 1 +dqadd37744 fma 1 -0 1 -> 1 +dqadd37745 fma 1 -1 0 -> -1 +dqadd37746 fma 1 -1 -0 -> -1 +dqadd37747 fma 1 1 0 -> 1 +dqadd37748 fma 1 1 -0 -> 1 + +dqadd37751 fma 1 0.0 -1 -> -1.0 +dqadd37752 fma 1 -0.0 -1 -> -1.0 +dqadd37753 fma 1 0.0 1 -> 1.0 +dqadd37754 fma 1 -0.0 1 -> 1.0 +dqadd37755 fma 1 -1.0 0 -> -1.0 +dqadd37756 fma 1 -1.0 -0 -> -1.0 +dqadd37757 fma 1 1.0 0 -> 1.0 +dqadd37758 fma 1 1.0 -0 -> 1.0 + +dqadd37761 fma 1 0 -1.0 -> -1.0 +dqadd37762 fma 1 -0 -1.0 -> -1.0 +dqadd37763 fma 1 0 1.0 -> 1.0 +dqadd37764 fma 1 -0 1.0 -> 1.0 +dqadd37765 fma 1 -1 0.0 -> -1.0 +dqadd37766 fma 1 -1 -0.0 -> -1.0 +dqadd37767 fma 1 1 0.0 -> 1.0 +dqadd37768 fma 1 1 -0.0 -> 1.0 + +dqadd37771 fma 1 0.0 -1.0 -> -1.0 +dqadd37772 fma 1 -0.0 -1.0 -> -1.0 +dqadd37773 fma 1 0.0 1.0 -> 1.0 +dqadd37774 fma 1 -0.0 1.0 -> 1.0 +dqadd37775 fma 1 -1.0 0.0 -> -1.0 +dqadd37776 fma 1 -1.0 -0.0 -> -1.0 +dqadd37777 fma 1 1.0 0.0 -> 1.0 +dqadd37778 fma 1 1.0 -0.0 -> 1.0 + +-- Specials +dqadd37780 fma 1 -Inf -Inf -> -Infinity +dqadd37781 fma 1 -Inf -1000 -> -Infinity +dqadd37782 fma 1 -Inf -1 -> -Infinity +dqadd37783 fma 1 -Inf -0 -> -Infinity +dqadd37784 fma 1 -Inf 0 -> -Infinity +dqadd37785 fma 1 -Inf 1 -> -Infinity +dqadd37786 fma 1 -Inf 1000 -> -Infinity +dqadd37787 fma 1 -1000 -Inf -> -Infinity +dqadd37788 fma 1 -Inf -Inf -> -Infinity +dqadd37789 fma 1 -1 -Inf -> -Infinity +dqadd37790 fma 1 -0 -Inf -> -Infinity +dqadd37791 fma 1 0 -Inf -> -Infinity +dqadd37792 fma 1 1 -Inf -> -Infinity +dqadd37793 fma 1 1000 -Inf -> -Infinity +dqadd37794 fma 1 Inf -Inf -> NaN Invalid_operation + +dqadd37800 fma 1 Inf -Inf -> NaN Invalid_operation +dqadd37801 fma 1 Inf -1000 -> Infinity +dqadd37802 fma 1 Inf -1 -> Infinity +dqadd37803 fma 1 Inf -0 -> Infinity +dqadd37804 fma 1 Inf 0 -> Infinity +dqadd37805 fma 1 Inf 1 -> Infinity +dqadd37806 fma 1 Inf 1000 -> Infinity +dqadd37807 fma 1 Inf Inf -> Infinity +dqadd37808 fma 1 -1000 Inf -> Infinity +dqadd37809 fma 1 -Inf Inf -> NaN Invalid_operation +dqadd37810 fma 1 -1 Inf -> Infinity +dqadd37811 fma 1 -0 Inf -> Infinity +dqadd37812 fma 1 0 Inf -> Infinity +dqadd37813 fma 1 1 Inf -> Infinity +dqadd37814 fma 1 1000 Inf -> Infinity +dqadd37815 fma 1 Inf Inf -> Infinity + +dqadd37821 fma 1 NaN -Inf -> NaN +dqadd37822 fma 1 NaN -1000 -> NaN +dqadd37823 fma 1 NaN -1 -> NaN +dqadd37824 fma 1 NaN -0 -> NaN +dqadd37825 fma 1 NaN 0 -> NaN +dqadd37826 fma 1 NaN 1 -> NaN +dqadd37827 fma 1 NaN 1000 -> NaN +dqadd37828 fma 1 NaN Inf -> NaN +dqadd37829 fma 1 NaN NaN -> NaN +dqadd37830 fma 1 -Inf NaN -> NaN +dqadd37831 fma 1 -1000 NaN -> NaN +dqadd37832 fma 1 -1 NaN -> NaN +dqadd37833 fma 1 -0 NaN -> NaN +dqadd37834 fma 1 0 NaN -> NaN +dqadd37835 fma 1 1 NaN -> NaN +dqadd37836 fma 1 1000 NaN -> NaN +dqadd37837 fma 1 Inf NaN -> NaN + +dqadd37841 fma 1 sNaN -Inf -> NaN Invalid_operation +dqadd37842 fma 1 sNaN -1000 -> NaN Invalid_operation +dqadd37843 fma 1 sNaN -1 -> NaN Invalid_operation +dqadd37844 fma 1 sNaN -0 -> NaN Invalid_operation +dqadd37845 fma 1 sNaN 0 -> NaN Invalid_operation +dqadd37846 fma 1 sNaN 1 -> NaN Invalid_operation +dqadd37847 fma 1 sNaN 1000 -> NaN Invalid_operation +dqadd37848 fma 1 sNaN NaN -> NaN Invalid_operation +dqadd37849 fma 1 sNaN sNaN -> NaN Invalid_operation +dqadd37850 fma 1 NaN sNaN -> NaN Invalid_operation +dqadd37851 fma 1 -Inf sNaN -> NaN Invalid_operation +dqadd37852 fma 1 -1000 sNaN -> NaN Invalid_operation +dqadd37853 fma 1 -1 sNaN -> NaN Invalid_operation +dqadd37854 fma 1 -0 sNaN -> NaN Invalid_operation +dqadd37855 fma 1 0 sNaN -> NaN Invalid_operation +dqadd37856 fma 1 1 sNaN -> NaN Invalid_operation +dqadd37857 fma 1 1000 sNaN -> NaN Invalid_operation +dqadd37858 fma 1 Inf sNaN -> NaN Invalid_operation +dqadd37859 fma 1 NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqadd37861 fma 1 NaN1 -Inf -> NaN1 +dqadd37862 fma 1 +NaN2 -1000 -> NaN2 +dqadd37863 fma 1 NaN3 1000 -> NaN3 +dqadd37864 fma 1 NaN4 Inf -> NaN4 +dqadd37865 fma 1 NaN5 +NaN6 -> NaN5 +dqadd37866 fma 1 -Inf NaN7 -> NaN7 +dqadd37867 fma 1 -1000 NaN8 -> NaN8 +dqadd37868 fma 1 1000 NaN9 -> NaN9 +dqadd37869 fma 1 Inf +NaN10 -> NaN10 +dqadd37871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation +dqadd37872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation +dqadd37873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation +dqadd37874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation +dqadd37875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation +dqadd37876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation +dqadd37877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation +dqadd37878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation +dqadd37879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation +dqadd37880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation +dqadd37881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqadd37882 fma 1 -NaN26 NaN28 -> -NaN26 +dqadd37883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqadd37884 fma 1 1000 -NaN30 -> -NaN30 +dqadd37885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Here we explore near the boundary of rounding a subnormal to Nmin +dqadd37575 fma 1 1E-6143 -1E-6176 -> 9.99999999999999999999999999999999E-6144 Subnormal +dqadd37576 fma 1 -1E-6143 +1E-6176 -> -9.99999999999999999999999999999999E-6144 Subnormal + +-- check overflow edge case +-- 1234567890123456 +dqadd37972 apply 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqadd37973 fma 1 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37974 fma 1 9999999999999999999999999999999999E+6111 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37975 fma 1 9999999999999999999999999999999999E+6111 1E+6111 -> Infinity Overflow Inexact Rounded +dqadd37976 fma 1 9999999999999999999999999999999999E+6111 9E+6110 -> Infinity Overflow Inexact Rounded +dqadd37977 fma 1 9999999999999999999999999999999999E+6111 8E+6110 -> Infinity Overflow Inexact Rounded +dqadd37978 fma 1 9999999999999999999999999999999999E+6111 7E+6110 -> Infinity Overflow Inexact Rounded +dqadd37979 fma 1 9999999999999999999999999999999999E+6111 6E+6110 -> Infinity Overflow Inexact Rounded +dqadd37980 fma 1 9999999999999999999999999999999999E+6111 5E+6110 -> Infinity Overflow Inexact Rounded +dqadd37981 fma 1 9999999999999999999999999999999999E+6111 4E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37982 fma 1 9999999999999999999999999999999999E+6111 3E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37983 fma 1 9999999999999999999999999999999999E+6111 2E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37984 fma 1 9999999999999999999999999999999999E+6111 1E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded + +dqadd37985 apply -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqadd37986 fma 1 -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37987 fma 1 -9999999999999999999999999999999999E+6111 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37988 fma 1 -9999999999999999999999999999999999E+6111 -1E+6111 -> -Infinity Overflow Inexact Rounded +dqadd37989 fma 1 -9999999999999999999999999999999999E+6111 -9E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37990 fma 1 -9999999999999999999999999999999999E+6111 -8E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37991 fma 1 -9999999999999999999999999999999999E+6111 -7E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37992 fma 1 -9999999999999999999999999999999999E+6111 -6E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37993 fma 1 -9999999999999999999999999999999999E+6111 -5E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37994 fma 1 -9999999999999999999999999999999999E+6111 -4E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37995 fma 1 -9999999999999999999999999999999999E+6111 -3E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37996 fma 1 -9999999999999999999999999999999999E+6111 -2E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37997 fma 1 -9999999999999999999999999999999999E+6111 -1E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +dqadd371100 fma 1 1e+2 -1e-6143 -> 99.99999999999999999999999999999999 Rounded Inexact +dqadd371101 fma 1 1e+1 -1e-6143 -> 9.999999999999999999999999999999999 Rounded Inexact +dqadd371103 fma 1 +1 -1e-6143 -> 0.9999999999999999999999999999999999 Rounded Inexact +dqadd371104 fma 1 1e-1 -1e-6143 -> 0.09999999999999999999999999999999999 Rounded Inexact +dqadd371105 fma 1 1e-2 -1e-6143 -> 0.009999999999999999999999999999999999 Rounded Inexact +dqadd371106 fma 1 1e-3 -1e-6143 -> 0.0009999999999999999999999999999999999 Rounded Inexact +dqadd371107 fma 1 1e-4 -1e-6143 -> 0.00009999999999999999999999999999999999 Rounded Inexact +dqadd371108 fma 1 1e-5 -1e-6143 -> 0.000009999999999999999999999999999999999 Rounded Inexact +dqadd371109 fma 1 1e-6 -1e-6143 -> 9.999999999999999999999999999999999E-7 Rounded Inexact + +rounding: ceiling +dqadd371110 fma 1 -1e+2 +1e-6143 -> -99.99999999999999999999999999999999 Rounded Inexact +dqadd371111 fma 1 -1e+1 +1e-6143 -> -9.999999999999999999999999999999999 Rounded Inexact +dqadd371113 fma 1 -1 +1e-6143 -> -0.9999999999999999999999999999999999 Rounded Inexact +dqadd371114 fma 1 -1e-1 +1e-6143 -> -0.09999999999999999999999999999999999 Rounded Inexact +dqadd371115 fma 1 -1e-2 +1e-6143 -> -0.009999999999999999999999999999999999 Rounded Inexact +dqadd371116 fma 1 -1e-3 +1e-6143 -> -0.0009999999999999999999999999999999999 Rounded Inexact +dqadd371117 fma 1 -1e-4 +1e-6143 -> -0.00009999999999999999999999999999999999 Rounded Inexact +dqadd371118 fma 1 -1e-5 +1e-6143 -> -0.000009999999999999999999999999999999999 Rounded Inexact +dqadd371119 fma 1 -1e-6 +1e-6143 -> -9.999999999999999999999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +dqadd371300 fma 1 1E34 -0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371310 fma 1 1E34 -0.51 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371311 fma 1 1E34 -0.501 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371312 fma 1 1E34 -0.5001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371313 fma 1 1E34 -0.50001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371314 fma 1 1E34 -0.500001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371315 fma 1 1E34 -0.5000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371316 fma 1 1E34 -0.50000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371317 fma 1 1E34 -0.500000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371318 fma 1 1E34 -0.5000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371319 fma 1 1E34 -0.50000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371320 fma 1 1E34 -0.500000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371321 fma 1 1E34 -0.5000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371322 fma 1 1E34 -0.50000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371323 fma 1 1E34 -0.500000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371324 fma 1 1E34 -0.5000000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371325 fma 1 1E34 -0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371326 fma 1 1E34 -0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371327 fma 1 1E34 -0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371328 fma 1 1E34 -0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371329 fma 1 1E34 -0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371330 fma 1 1E34 -0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371331 fma 1 1E34 -0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371332 fma 1 1E34 -0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371333 fma 1 1E34 -0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371334 fma 1 1E34 -0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371335 fma 1 1E34 -0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371336 fma 1 1E34 -0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371337 fma 1 1E34 -0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371338 fma 1 1E34 -0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371339 fma 1 1E34 -0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded + +dqadd371340 fma 1 1E34 -5000000.000010001 -> 9999999999999999999999999995000000 Inexact Rounded +dqadd371341 fma 1 1E34 -5000000.000000001 -> 9999999999999999999999999995000000 Inexact Rounded + +dqadd371349 fma 1 9999999999999999999999999999999999 0.4 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371350 fma 1 9999999999999999999999999999999999 0.49 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371351 fma 1 9999999999999999999999999999999999 0.499 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371352 fma 1 9999999999999999999999999999999999 0.4999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371353 fma 1 9999999999999999999999999999999999 0.49999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371354 fma 1 9999999999999999999999999999999999 0.499999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371355 fma 1 9999999999999999999999999999999999 0.4999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371356 fma 1 9999999999999999999999999999999999 0.49999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371357 fma 1 9999999999999999999999999999999999 0.499999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371358 fma 1 9999999999999999999999999999999999 0.4999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371359 fma 1 9999999999999999999999999999999999 0.49999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371360 fma 1 9999999999999999999999999999999999 0.499999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371361 fma 1 9999999999999999999999999999999999 0.4999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371362 fma 1 9999999999999999999999999999999999 0.49999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371363 fma 1 9999999999999999999999999999999999 0.499999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371364 fma 1 9999999999999999999999999999999999 0.4999999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371365 fma 1 9999999999999999999999999999999999 0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371367 fma 1 9999999999999999999999999999999999 0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371368 fma 1 9999999999999999999999999999999999 0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371369 fma 1 9999999999999999999999999999999999 0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371370 fma 1 9999999999999999999999999999999999 0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371371 fma 1 9999999999999999999999999999999999 0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371372 fma 1 9999999999999999999999999999999999 0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371373 fma 1 9999999999999999999999999999999999 0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371374 fma 1 9999999999999999999999999999999999 0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371375 fma 1 9999999999999999999999999999999999 0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371376 fma 1 9999999999999999999999999999999999 0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371377 fma 1 9999999999999999999999999999999999 0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371378 fma 1 9999999999999999999999999999999999 0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371379 fma 1 9999999999999999999999999999999999 0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371380 fma 1 9999999999999999999999999999999999 0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371381 fma 1 9999999999999999999999999999999999 0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371382 fma 1 9999999999999999999999999999999999 0.5000000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371383 fma 1 9999999999999999999999999999999999 0.500000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371384 fma 1 9999999999999999999999999999999999 0.50000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371385 fma 1 9999999999999999999999999999999999 0.5000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371386 fma 1 9999999999999999999999999999999999 0.500000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371387 fma 1 9999999999999999999999999999999999 0.50000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371388 fma 1 9999999999999999999999999999999999 0.5000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371389 fma 1 9999999999999999999999999999999999 0.500000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371390 fma 1 9999999999999999999999999999999999 0.50000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371391 fma 1 9999999999999999999999999999999999 0.5000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371392 fma 1 9999999999999999999999999999999999 0.500001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371393 fma 1 9999999999999999999999999999999999 0.50001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371394 fma 1 9999999999999999999999999999999999 0.5001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371395 fma 1 9999999999999999999999999999999999 0.501 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371396 fma 1 9999999999999999999999999999999999 0.51 -> 1.000000000000000000000000000000000E+34 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +dqadd371420 fma 1 0 1.123456789987654321123456789012345 -> 1.123456789987654321123456789012345 +dqadd371421 fma 1 0 1.123456789987654321123456789012345E-1 -> 0.1123456789987654321123456789012345 +dqadd371422 fma 1 0 1.123456789987654321123456789012345E-2 -> 0.01123456789987654321123456789012345 +dqadd371423 fma 1 0 1.123456789987654321123456789012345E-3 -> 0.001123456789987654321123456789012345 +dqadd371424 fma 1 0 1.123456789987654321123456789012345E-4 -> 0.0001123456789987654321123456789012345 +dqadd371425 fma 1 0 1.123456789987654321123456789012345E-5 -> 0.00001123456789987654321123456789012345 +dqadd371426 fma 1 0 1.123456789987654321123456789012345E-6 -> 0.000001123456789987654321123456789012345 +dqadd371427 fma 1 0 1.123456789987654321123456789012345E-7 -> 1.123456789987654321123456789012345E-7 +dqadd371428 fma 1 0 1.123456789987654321123456789012345E-8 -> 1.123456789987654321123456789012345E-8 +dqadd371429 fma 1 0 1.123456789987654321123456789012345E-9 -> 1.123456789987654321123456789012345E-9 +dqadd371430 fma 1 0 1.123456789987654321123456789012345E-10 -> 1.123456789987654321123456789012345E-10 +dqadd371431 fma 1 0 1.123456789987654321123456789012345E-11 -> 1.123456789987654321123456789012345E-11 +dqadd371432 fma 1 0 1.123456789987654321123456789012345E-12 -> 1.123456789987654321123456789012345E-12 +dqadd371433 fma 1 0 1.123456789987654321123456789012345E-13 -> 1.123456789987654321123456789012345E-13 +dqadd371434 fma 1 0 1.123456789987654321123456789012345E-14 -> 1.123456789987654321123456789012345E-14 +dqadd371435 fma 1 0 1.123456789987654321123456789012345E-15 -> 1.123456789987654321123456789012345E-15 +dqadd371436 fma 1 0 1.123456789987654321123456789012345E-16 -> 1.123456789987654321123456789012345E-16 +dqadd371437 fma 1 0 1.123456789987654321123456789012345E-17 -> 1.123456789987654321123456789012345E-17 +dqadd371438 fma 1 0 1.123456789987654321123456789012345E-18 -> 1.123456789987654321123456789012345E-18 +dqadd371439 fma 1 0 1.123456789987654321123456789012345E-19 -> 1.123456789987654321123456789012345E-19 +dqadd371440 fma 1 0 1.123456789987654321123456789012345E-20 -> 1.123456789987654321123456789012345E-20 +dqadd371441 fma 1 0 1.123456789987654321123456789012345E-21 -> 1.123456789987654321123456789012345E-21 +dqadd371442 fma 1 0 1.123456789987654321123456789012345E-22 -> 1.123456789987654321123456789012345E-22 +dqadd371443 fma 1 0 1.123456789987654321123456789012345E-23 -> 1.123456789987654321123456789012345E-23 +dqadd371444 fma 1 0 1.123456789987654321123456789012345E-24 -> 1.123456789987654321123456789012345E-24 +dqadd371445 fma 1 0 1.123456789987654321123456789012345E-25 -> 1.123456789987654321123456789012345E-25 +dqadd371446 fma 1 0 1.123456789987654321123456789012345E-26 -> 1.123456789987654321123456789012345E-26 +dqadd371447 fma 1 0 1.123456789987654321123456789012345E-27 -> 1.123456789987654321123456789012345E-27 +dqadd371448 fma 1 0 1.123456789987654321123456789012345E-28 -> 1.123456789987654321123456789012345E-28 +dqadd371449 fma 1 0 1.123456789987654321123456789012345E-29 -> 1.123456789987654321123456789012345E-29 +dqadd371450 fma 1 0 1.123456789987654321123456789012345E-30 -> 1.123456789987654321123456789012345E-30 +dqadd371451 fma 1 0 1.123456789987654321123456789012345E-31 -> 1.123456789987654321123456789012345E-31 +dqadd371452 fma 1 0 1.123456789987654321123456789012345E-32 -> 1.123456789987654321123456789012345E-32 +dqadd371453 fma 1 0 1.123456789987654321123456789012345E-33 -> 1.123456789987654321123456789012345E-33 +dqadd371454 fma 1 0 1.123456789987654321123456789012345E-34 -> 1.123456789987654321123456789012345E-34 +dqadd371455 fma 1 0 1.123456789987654321123456789012345E-35 -> 1.123456789987654321123456789012345E-35 +dqadd371456 fma 1 0 1.123456789987654321123456789012345E-36 -> 1.123456789987654321123456789012345E-36 + +-- same, reversed 0 +dqadd371460 fma 1 1.123456789987654321123456789012345 0 -> 1.123456789987654321123456789012345 +dqadd371461 fma 1 1.123456789987654321123456789012345E-1 0 -> 0.1123456789987654321123456789012345 +dqadd371462 fma 1 1.123456789987654321123456789012345E-2 0 -> 0.01123456789987654321123456789012345 +dqadd371463 fma 1 1.123456789987654321123456789012345E-3 0 -> 0.001123456789987654321123456789012345 +dqadd371464 fma 1 1.123456789987654321123456789012345E-4 0 -> 0.0001123456789987654321123456789012345 +dqadd371465 fma 1 1.123456789987654321123456789012345E-5 0 -> 0.00001123456789987654321123456789012345 +dqadd371466 fma 1 1.123456789987654321123456789012345E-6 0 -> 0.000001123456789987654321123456789012345 +dqadd371467 fma 1 1.123456789987654321123456789012345E-7 0 -> 1.123456789987654321123456789012345E-7 +dqadd371468 fma 1 1.123456789987654321123456789012345E-8 0 -> 1.123456789987654321123456789012345E-8 +dqadd371469 fma 1 1.123456789987654321123456789012345E-9 0 -> 1.123456789987654321123456789012345E-9 +dqadd371470 fma 1 1.123456789987654321123456789012345E-10 0 -> 1.123456789987654321123456789012345E-10 +dqadd371471 fma 1 1.123456789987654321123456789012345E-11 0 -> 1.123456789987654321123456789012345E-11 +dqadd371472 fma 1 1.123456789987654321123456789012345E-12 0 -> 1.123456789987654321123456789012345E-12 +dqadd371473 fma 1 1.123456789987654321123456789012345E-13 0 -> 1.123456789987654321123456789012345E-13 +dqadd371474 fma 1 1.123456789987654321123456789012345E-14 0 -> 1.123456789987654321123456789012345E-14 +dqadd371475 fma 1 1.123456789987654321123456789012345E-15 0 -> 1.123456789987654321123456789012345E-15 +dqadd371476 fma 1 1.123456789987654321123456789012345E-16 0 -> 1.123456789987654321123456789012345E-16 +dqadd371477 fma 1 1.123456789987654321123456789012345E-17 0 -> 1.123456789987654321123456789012345E-17 +dqadd371478 fma 1 1.123456789987654321123456789012345E-18 0 -> 1.123456789987654321123456789012345E-18 +dqadd371479 fma 1 1.123456789987654321123456789012345E-19 0 -> 1.123456789987654321123456789012345E-19 +dqadd371480 fma 1 1.123456789987654321123456789012345E-20 0 -> 1.123456789987654321123456789012345E-20 +dqadd371481 fma 1 1.123456789987654321123456789012345E-21 0 -> 1.123456789987654321123456789012345E-21 +dqadd371482 fma 1 1.123456789987654321123456789012345E-22 0 -> 1.123456789987654321123456789012345E-22 +dqadd371483 fma 1 1.123456789987654321123456789012345E-23 0 -> 1.123456789987654321123456789012345E-23 +dqadd371484 fma 1 1.123456789987654321123456789012345E-24 0 -> 1.123456789987654321123456789012345E-24 +dqadd371485 fma 1 1.123456789987654321123456789012345E-25 0 -> 1.123456789987654321123456789012345E-25 +dqadd371486 fma 1 1.123456789987654321123456789012345E-26 0 -> 1.123456789987654321123456789012345E-26 +dqadd371487 fma 1 1.123456789987654321123456789012345E-27 0 -> 1.123456789987654321123456789012345E-27 +dqadd371488 fma 1 1.123456789987654321123456789012345E-28 0 -> 1.123456789987654321123456789012345E-28 +dqadd371489 fma 1 1.123456789987654321123456789012345E-29 0 -> 1.123456789987654321123456789012345E-29 +dqadd371490 fma 1 1.123456789987654321123456789012345E-30 0 -> 1.123456789987654321123456789012345E-30 +dqadd371491 fma 1 1.123456789987654321123456789012345E-31 0 -> 1.123456789987654321123456789012345E-31 +dqadd371492 fma 1 1.123456789987654321123456789012345E-32 0 -> 1.123456789987654321123456789012345E-32 +dqadd371493 fma 1 1.123456789987654321123456789012345E-33 0 -> 1.123456789987654321123456789012345E-33 +dqadd371494 fma 1 1.123456789987654321123456789012345E-34 0 -> 1.123456789987654321123456789012345E-34 +dqadd371495 fma 1 1.123456789987654321123456789012345E-35 0 -> 1.123456789987654321123456789012345E-35 +dqadd371496 fma 1 1.123456789987654321123456789012345E-36 0 -> 1.123456789987654321123456789012345E-36 + +-- same, Es on the 0 +dqadd371500 fma 1 1.123456789987654321123456789012345 0E-0 -> 1.123456789987654321123456789012345 +dqadd371501 fma 1 1.123456789987654321123456789012345 0E-1 -> 1.123456789987654321123456789012345 +dqadd371502 fma 1 1.123456789987654321123456789012345 0E-2 -> 1.123456789987654321123456789012345 +dqadd371503 fma 1 1.123456789987654321123456789012345 0E-3 -> 1.123456789987654321123456789012345 +dqadd371504 fma 1 1.123456789987654321123456789012345 0E-4 -> 1.123456789987654321123456789012345 +dqadd371505 fma 1 1.123456789987654321123456789012345 0E-5 -> 1.123456789987654321123456789012345 +dqadd371506 fma 1 1.123456789987654321123456789012345 0E-6 -> 1.123456789987654321123456789012345 +dqadd371507 fma 1 1.123456789987654321123456789012345 0E-7 -> 1.123456789987654321123456789012345 +dqadd371508 fma 1 1.123456789987654321123456789012345 0E-8 -> 1.123456789987654321123456789012345 +dqadd371509 fma 1 1.123456789987654321123456789012345 0E-9 -> 1.123456789987654321123456789012345 +dqadd371510 fma 1 1.123456789987654321123456789012345 0E-10 -> 1.123456789987654321123456789012345 +dqadd371511 fma 1 1.123456789987654321123456789012345 0E-11 -> 1.123456789987654321123456789012345 +dqadd371512 fma 1 1.123456789987654321123456789012345 0E-12 -> 1.123456789987654321123456789012345 +dqadd371513 fma 1 1.123456789987654321123456789012345 0E-13 -> 1.123456789987654321123456789012345 +dqadd371514 fma 1 1.123456789987654321123456789012345 0E-14 -> 1.123456789987654321123456789012345 +dqadd371515 fma 1 1.123456789987654321123456789012345 0E-15 -> 1.123456789987654321123456789012345 +dqadd371516 fma 1 1.123456789987654321123456789012345 0E-16 -> 1.123456789987654321123456789012345 +dqadd371517 fma 1 1.123456789987654321123456789012345 0E-17 -> 1.123456789987654321123456789012345 +dqadd371518 fma 1 1.123456789987654321123456789012345 0E-18 -> 1.123456789987654321123456789012345 +dqadd371519 fma 1 1.123456789987654321123456789012345 0E-19 -> 1.123456789987654321123456789012345 +dqadd371520 fma 1 1.123456789987654321123456789012345 0E-20 -> 1.123456789987654321123456789012345 +dqadd371521 fma 1 1.123456789987654321123456789012345 0E-21 -> 1.123456789987654321123456789012345 +dqadd371522 fma 1 1.123456789987654321123456789012345 0E-22 -> 1.123456789987654321123456789012345 +dqadd371523 fma 1 1.123456789987654321123456789012345 0E-23 -> 1.123456789987654321123456789012345 +dqadd371524 fma 1 1.123456789987654321123456789012345 0E-24 -> 1.123456789987654321123456789012345 +dqadd371525 fma 1 1.123456789987654321123456789012345 0E-25 -> 1.123456789987654321123456789012345 +dqadd371526 fma 1 1.123456789987654321123456789012345 0E-26 -> 1.123456789987654321123456789012345 +dqadd371527 fma 1 1.123456789987654321123456789012345 0E-27 -> 1.123456789987654321123456789012345 +dqadd371528 fma 1 1.123456789987654321123456789012345 0E-28 -> 1.123456789987654321123456789012345 +dqadd371529 fma 1 1.123456789987654321123456789012345 0E-29 -> 1.123456789987654321123456789012345 +dqadd371530 fma 1 1.123456789987654321123456789012345 0E-30 -> 1.123456789987654321123456789012345 +dqadd371531 fma 1 1.123456789987654321123456789012345 0E-31 -> 1.123456789987654321123456789012345 +dqadd371532 fma 1 1.123456789987654321123456789012345 0E-32 -> 1.123456789987654321123456789012345 +dqadd371533 fma 1 1.123456789987654321123456789012345 0E-33 -> 1.123456789987654321123456789012345 +-- next four flag Rounded because the 0 extends the result +dqadd371534 fma 1 1.123456789987654321123456789012345 0E-34 -> 1.123456789987654321123456789012345 Rounded +dqadd371535 fma 1 1.123456789987654321123456789012345 0E-35 -> 1.123456789987654321123456789012345 Rounded +dqadd371536 fma 1 1.123456789987654321123456789012345 0E-36 -> 1.123456789987654321123456789012345 Rounded +dqadd371537 fma 1 1.123456789987654321123456789012345 0E-37 -> 1.123456789987654321123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +dqadd371600 fma 1 0 0E-19 -> 0E-19 +dqadd371601 fma 1 -0 0E-19 -> 0E-19 +dqadd371602 fma 1 0 -0E-19 -> 0E-19 +dqadd371603 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371611 fma 1 -11 11 -> 0 +dqadd371612 fma 1 11 -11 -> 0 +-- overflow +dqadd371613 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371614 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: half_down +-- exact zeros from zeros +dqadd371620 fma 1 0 0E-19 -> 0E-19 +dqadd371621 fma 1 -0 0E-19 -> 0E-19 +dqadd371622 fma 1 0 -0E-19 -> 0E-19 +dqadd371623 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371631 fma 1 -11 11 -> 0 +dqadd371632 fma 1 11 -11 -> 0 +-- overflow +dqadd371633 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371634 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: half_even +-- exact zeros from zeros +dqadd371640 fma 1 0 0E-19 -> 0E-19 +dqadd371641 fma 1 -0 0E-19 -> 0E-19 +dqadd371642 fma 1 0 -0E-19 -> 0E-19 +dqadd371643 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371651 fma 1 -11 11 -> 0 +dqadd371652 fma 1 11 -11 -> 0 +-- overflow +dqadd371653 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371654 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: up +-- exact zeros from zeros +dqadd371660 fma 1 0 0E-19 -> 0E-19 +dqadd371661 fma 1 -0 0E-19 -> 0E-19 +dqadd371662 fma 1 0 -0E-19 -> 0E-19 +dqadd371663 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371671 fma 1 -11 11 -> 0 +dqadd371672 fma 1 11 -11 -> 0 +-- overflow +dqadd371673 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371674 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: down +-- exact zeros from zeros +dqadd371680 fma 1 0 0E-19 -> 0E-19 +dqadd371681 fma 1 -0 0E-19 -> 0E-19 +dqadd371682 fma 1 0 -0E-19 -> 0E-19 +dqadd371683 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371691 fma 1 -11 11 -> 0 +dqadd371692 fma 1 11 -11 -> 0 +-- overflow +dqadd371693 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqadd371694 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded + +rounding: ceiling +-- exact zeros from zeros +dqadd371700 fma 1 0 0E-19 -> 0E-19 +dqadd371701 fma 1 -0 0E-19 -> 0E-19 +dqadd371702 fma 1 0 -0E-19 -> 0E-19 +dqadd371703 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371711 fma 1 -11 11 -> 0 +dqadd371712 fma 1 11 -11 -> 0 +-- overflow +dqadd371713 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371714 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +dqadd371720 fma 1 0 0E-19 -> 0E-19 +dqadd371721 fma 1 -0 0E-19 -> -0E-19 -- * +dqadd371722 fma 1 0 -0E-19 -> -0E-19 -- * +dqadd371723 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371731 fma 1 -11 11 -> -0 -- * +dqadd371732 fma 1 11 -11 -> -0 -- * +-- overflow +dqadd371733 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqadd371734 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: 05up +-- exact zeros from zeros +dqadd371740 fma 1 0 0E-19 -> 0E-19 +dqadd371741 fma 1 -0 0E-19 -> 0E-19 +dqadd371742 fma 1 0 -0E-19 -> 0E-19 +dqadd371743 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371751 fma 1 -11 11 -> 0 +dqadd371752 fma 1 11 -11 -> 0 +-- overflow +dqadd371753 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqadd371754 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded + +-- Examples from SQL proposal (Krishna Kulkarni) +dqadd371761 fma 1 130E-2 120E-2 -> 2.50 +dqadd371762 fma 1 130E-2 12E-1 -> 2.50 +dqadd371763 fma 1 130E-2 1E0 -> 2.30 +dqadd371764 fma 1 1E2 1E4 -> 1.01E+4 +dqadd371765 fma 1 130E-2 -120E-2 -> 0.10 +dqadd371766 fma 1 130E-2 -12E-1 -> 0.10 +dqadd371767 fma 1 130E-2 -1E0 -> 0.30 +dqadd371768 fma 1 1E2 -1E4 -> -9.9E+3 + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +dqadd375001 fma 1 1239876543211234567894567890123456 1 -> 1239876543211234567894567890123457 +dqadd375002 fma 1 1239876543211234567894567890123456 0.6 -> 1239876543211234567894567890123457 Inexact Rounded +dqadd375003 fma 1 1239876543211234567894567890123456 0.06 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375004 fma 1 1239876543211234567894567890123456 6E-3 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375005 fma 1 1239876543211234567894567890123456 6E-4 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375006 fma 1 1239876543211234567894567890123456 6E-5 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375007 fma 1 1239876543211234567894567890123456 6E-6 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375008 fma 1 1239876543211234567894567890123456 6E-7 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375009 fma 1 1239876543211234567894567890123456 6E-8 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375010 fma 1 1239876543211234567894567890123456 6E-9 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375011 fma 1 1239876543211234567894567890123456 6E-10 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375012 fma 1 1239876543211234567894567890123456 6E-11 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375013 fma 1 1239876543211234567894567890123456 6E-12 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375014 fma 1 1239876543211234567894567890123456 6E-13 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375015 fma 1 1239876543211234567894567890123456 6E-14 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375016 fma 1 1239876543211234567894567890123456 6E-15 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375017 fma 1 1239876543211234567894567890123456 6E-16 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375018 fma 1 1239876543211234567894567890123456 6E-17 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375019 fma 1 1239876543211234567894567890123456 6E-18 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375020 fma 1 1239876543211234567894567890123456 6E-19 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375021 fma 1 1239876543211234567894567890123456 6E-20 -> 1239876543211234567894567890123456 Inexact Rounded + +-- widening second argument at gap +dqadd375030 fma 1 12398765432112345678945678 1 -> 12398765432112345678945679 +dqadd375031 fma 1 12398765432112345678945678 0.1 -> 12398765432112345678945678.1 +dqadd375032 fma 1 12398765432112345678945678 0.12 -> 12398765432112345678945678.12 +dqadd375033 fma 1 12398765432112345678945678 0.123 -> 12398765432112345678945678.123 +dqadd375034 fma 1 12398765432112345678945678 0.1234 -> 12398765432112345678945678.1234 +dqadd375035 fma 1 12398765432112345678945678 0.12345 -> 12398765432112345678945678.12345 +dqadd375036 fma 1 12398765432112345678945678 0.123456 -> 12398765432112345678945678.123456 +dqadd375037 fma 1 12398765432112345678945678 0.1234567 -> 12398765432112345678945678.1234567 +dqadd375038 fma 1 12398765432112345678945678 0.12345678 -> 12398765432112345678945678.12345678 +dqadd375039 fma 1 12398765432112345678945678 0.123456789 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375040 fma 1 12398765432112345678945678 0.123456785 -> 12398765432112345678945678.12345678 Inexact Rounded +dqadd375041 fma 1 12398765432112345678945678 0.1234567850 -> 12398765432112345678945678.12345678 Inexact Rounded +dqadd375042 fma 1 12398765432112345678945678 0.1234567851 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375043 fma 1 12398765432112345678945678 0.12345678501 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375044 fma 1 12398765432112345678945678 0.123456785001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375045 fma 1 12398765432112345678945678 0.1234567850001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375046 fma 1 12398765432112345678945678 0.12345678500001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375047 fma 1 12398765432112345678945678 0.123456785000001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375048 fma 1 12398765432112345678945678 0.1234567850000001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375049 fma 1 12398765432112345678945678 0.1234567850000000 -> 12398765432112345678945678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +dqadd375050 fma 1 12398765432112345678945678 0.0234567750000000 -> 12398765432112345678945678.02345678 Inexact Rounded +dqadd375051 fma 1 12398765432112345678945678 0.0034567750000000 -> 12398765432112345678945678.00345678 Inexact Rounded +dqadd375052 fma 1 12398765432112345678945678 0.0004567750000000 -> 12398765432112345678945678.00045678 Inexact Rounded +dqadd375053 fma 1 12398765432112345678945678 0.0000567750000000 -> 12398765432112345678945678.00005678 Inexact Rounded +dqadd375054 fma 1 12398765432112345678945678 0.0000067750000000 -> 12398765432112345678945678.00000678 Inexact Rounded +dqadd375055 fma 1 12398765432112345678945678 0.0000007750000000 -> 12398765432112345678945678.00000078 Inexact Rounded +dqadd375056 fma 1 12398765432112345678945678 0.0000000750000000 -> 12398765432112345678945678.00000008 Inexact Rounded +dqadd375057 fma 1 12398765432112345678945678 0.0000000050000000 -> 12398765432112345678945678.00000000 Inexact Rounded +dqadd375060 fma 1 12398765432112345678945678 0.0234567750000001 -> 12398765432112345678945678.02345678 Inexact Rounded +dqadd375061 fma 1 12398765432112345678945678 0.0034567750000001 -> 12398765432112345678945678.00345678 Inexact Rounded +dqadd375062 fma 1 12398765432112345678945678 0.0004567750000001 -> 12398765432112345678945678.00045678 Inexact Rounded +dqadd375063 fma 1 12398765432112345678945678 0.0000567750000001 -> 12398765432112345678945678.00005678 Inexact Rounded +dqadd375064 fma 1 12398765432112345678945678 0.0000067750000001 -> 12398765432112345678945678.00000678 Inexact Rounded +dqadd375065 fma 1 12398765432112345678945678 0.0000007750000001 -> 12398765432112345678945678.00000078 Inexact Rounded +dqadd375066 fma 1 12398765432112345678945678 0.0000000750000001 -> 12398765432112345678945678.00000008 Inexact Rounded +dqadd375067 fma 1 12398765432112345678945678 0.0000000050000001 -> 12398765432112345678945678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +dqadd375070 fma 1 12398765432112345678945678 1E-8 -> 12398765432112345678945678.00000001 +dqadd375071 fma 1 12398765432112345678945678 1E-9 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375072 fma 1 12398765432112345678945678 1E-10 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375073 fma 1 12398765432112345678945678 1E-11 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375074 fma 1 12398765432112345678945678 1E-12 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375075 fma 1 12398765432112345678945678 1E-13 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375076 fma 1 12398765432112345678945678 1E-14 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375077 fma 1 12398765432112345678945678 1E-15 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375078 fma 1 12398765432112345678945678 1E-16 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375079 fma 1 12398765432112345678945678 1E-17 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375080 fma 1 12398765432112345678945678 1E-18 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375081 fma 1 12398765432112345678945678 1E-19 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375082 fma 1 12398765432112345678945678 1E-20 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375083 fma 1 12398765432112345678945678 1E-25 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375084 fma 1 12398765432112345678945678 1E-30 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375085 fma 1 12398765432112345678945678 1E-31 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375086 fma 1 12398765432112345678945678 1E-32 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375087 fma 1 12398765432112345678945678 1E-33 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375088 fma 1 12398765432112345678945678 1E-34 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375089 fma 1 12398765432112345678945678 1E-35 -> 12398765432112345678945678.00000001 Inexact Rounded + +-- Destructive subtract (from remainder tests) + +-- +++ some of these will be off-by-one remainder vs remainderNear + +dqfma4000 fma -1234567890123456789012345678901233 1.000000000000000000000000000000001 1234567890123456789012345678901234 -> -0.234567890123456789012345678901233 +dqfma4001 fma -1234567890123456789012345678901222 1.00000000000000000000000000000001 1234567890123456789012345678901234 -> -0.34567890123456789012345678901222 +dqfma4002 fma -1234567890123456789012345678901111 1.0000000000000000000000000000001 1234567890123456789012345678901234 -> -0.4567890123456789012345678901111 +dqfma4003 fma -308641972530864197253086419725314 4.000000000000000000000000000000001 1234567890123456789012345678901255 -> -1.308641972530864197253086419725314 +dqfma4004 fma -308641972530864197253086419725308 4.000000000000000000000000000000001 1234567890123456789012345678901234 -> 1.691358027469135802746913580274692 +dqfma4005 fma -246913578024691357802469135780252 4.9999999999999999999999999999999 1234567890123456789012345678901234 -> -1.3086421975308642197530864219748 +dqfma4006 fma -246913578024691357802469135780247 4.99999999999999999999999999999999 1234567890123456789012345678901234 -> 1.46913578024691357802469135780247 +dqfma4007 fma -246913578024691357802469135780247 4.999999999999999999999999999999999 1234567890123456789012345678901234 -> -0.753086421975308642197530864219753 +dqfma4008 fma -246913578024691357802469135780247 5.000000000000000000000000000000001 1234567890123456789012345678901234 -> -1.246913578024691357802469135780247 +dqfma4009 fma -246913578024691357802469135780246 5.00000000000000000000000000000001 1234567890123456789012345678901234 -> 1.53086421975308642197530864219754 +dqfma4010 fma -246913578024691357802469135780242 5.0000000000000000000000000000001 1234567890123456789012345678901234 -> -0.6913578024691357802469135780242 +dqfma4011 fma -1234567890123456789012345678901232 1.000000000000000000000000000000001 1234567890123456789012345678901234 -> 0.765432109876543210987654321098768 +dqfma4012 fma -1234567890123456789012345678901221 1.00000000000000000000000000000001 1234567890123456789012345678901234 -> 0.65432109876543210987654321098779 +dqfma4013 fma -1234567890123456789012345678901110 1.0000000000000000000000000000001 1234567890123456789012345678901234 -> 0.5432109876543210987654321098890 +dqfma4014 fma -308641972530864197253086419725313 4.000000000000000000000000000000001 1234567890123456789012345678901255 -> 2.691358027469135802746913580274687 +dqfma4015 fma -308641972530864197253086419725308 4.000000000000000000000000000000001 1234567890123456789012345678901234 -> 1.691358027469135802746913580274692 +dqfma4016 fma -246913578024691357802469135780251 4.9999999999999999999999999999999 1234567890123456789012345678901234 -> 3.6913578024691357802469135780251 +dqfma4017 fma -246913578024691357802469135780247 4.99999999999999999999999999999999 1234567890123456789012345678901234 -> 1.46913578024691357802469135780247 +dqfma4018 fma -246913578024691357802469135780246 4.999999999999999999999999999999999 1234567890123456789012345678901234 -> 4.246913578024691357802469135780246 +dqfma4019 fma -246913578024691357802469135780241 5.0000000000000000000000000000001 1234567890123456789012345678901234 -> 4.3086421975308642197530864219759 + +-- Null tests +dqadd39990 fma 1 10 # -> NaN Invalid_operation +dqadd39991 fma 1 # 10 -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/dqInvert.decTest b/Lib/test/decimaltestdata/dqInvert.decTest index 3a1e29e21da..522cfc80f02 100644 --- a/Lib/test/decimaltestdata/dqInvert.decTest +++ b/Lib/test/decimaltestdata/dqInvert.decTest @@ -1,245 +1,245 @@ ------------------------------------------------------------------------- --- dqInvert.decTest -- digitwise logical INVERT for decQuads -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check (truth table) -dqinv001 invert 0 -> 1111111111111111111111111111111111 -dqinv002 invert 1 -> 1111111111111111111111111111111110 -dqinv003 invert 10 -> 1111111111111111111111111111111101 -dqinv004 invert 111111111 -> 1111111111111111111111111000000000 -dqinv005 invert 000000000 -> 1111111111111111111111111111111111 --- and at msd and msd-1 -dqinv007 invert 0000000000000000000000000000000000 -> 1111111111111111111111111111111111 -dqinv008 invert 1000000000000000000000000000000000 -> 111111111111111111111111111111111 -dqinv009 invert 0000000000000000000000000000000000 -> 1111111111111111111111111111111111 -dqinv010 invert 0100000000000000000000000000000000 -> 1011111111111111111111111111111111 -dqinv011 invert 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 -dqinv012 invert 1111111111111111111111111111111111 -> 0 -dqinv013 invert 0011111111111111111111111111111111 -> 1100000000000000000000000000000000 -dqinv014 invert 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 - --- Various lengths -dqinv600 invert 0111111111111111111011111111111111 -> 1000000000000000000100000000000000 -dqinv601 invert 0011111111111111110101111111111111 -> 1100000000000000001010000000000000 -dqinv602 invert 0101111111111111101110111111111111 -> 1010000000000000010001000000000000 -dqinv603 invert 0110111111111111011111011111111111 -> 1001000000000000100000100000000000 -dqinv604 invert 0111011111111110111111101111111111 -> 1000100000000001000000010000000000 -dqinv605 invert 0111101111111101111111110111111111 -> 1000010000000010000000001000000000 -dqinv606 invert 0111110111111011111111111011111111 -> 1000001000000100000000000100000000 -dqinv607 invert 0111111011110111111111111101111111 -> 1000000100001000000000000010000000 -dqinv608 invert 0111111101101111111111111110111111 -> 1000000010010000000000000001000000 -dqinv609 invert 0111111110011111111111111111011111 -> 1000000001100000000000000000100000 -dqinv610 invert 0111111110011111111111111111101111 -> 1000000001100000000000000000010000 -dqinv611 invert 0111111101101111111111111111110111 -> 1000000010010000000000000000001000 -dqinv612 invert 0111111011110111111111111111111011 -> 1000000100001000000000000000000100 -dqinv613 invert 0111110111111011111111111111111101 -> 1000001000000100000000000000000010 -dqinv614 invert 0111101111111101111111111111111110 -> 1000010000000010000000000000000001 -dqinv615 invert 0111011111111110111111111111111111 -> 1000100000000001000000000000000000 -dqinv616 invert 0110111111111111011111111111111110 -> 1001000000000000100000000000000001 -dqinv617 invert 0101111111111111101111111111111101 -> 1010000000000000010000000000000010 -dqinv618 invert 0011111111111111110111111111111011 -> 1100000000000000001000000000000100 -dqinv619 invert 0101111111111111111011111111110111 -> 1010000000000000000100000000001000 -dqinv620 invert 0110111111111111111101111111101111 -> 1001000000000000000010000000010000 -dqinv621 invert 0111011111111111111110111111011111 -> 1000100000000000000001000000100000 -dqinv622 invert 0111101111111111111111011110111111 -> 1000010000000000000000100001000000 -dqinv623 invert 0111110111111111111111101101111111 -> 1000001000000000000000010010000000 -dqinv624 invert 0111111011111111111111110011111111 -> 1000000100000000000000001100000000 -dqinv625 invert 0111111101111111111111110011111111 -> 1000000010000000000000001100000000 -dqinv626 invert 0111111110111111111111101101111111 -> 1000000001000000000000010010000000 -dqinv627 invert 0111111111011111111111011110111111 -> 1000000000100000000000100001000000 -dqinv628 invert 0111111111101111111110111111011111 -> 1000000000010000000001000000100000 -dqinv629 invert 0111111111110111111101111111101111 -> 1000000000001000000010000000010000 -dqinv630 invert 0111111111111011111011111111110111 -> 1000000000000100000100000000001000 -dqinv631 invert 0111111111111101110111111111111011 -> 1000000000000010001000000000000100 -dqinv632 invert 0111111111111110101111111111111101 -> 1000000000000001010000000000000010 -dqinv633 invert 0111111111111111011111111111111110 -> 1000000000000000100000000000000001 - -dqinv021 invert 111111111 -> 1111111111111111111111111000000000 -dqinv022 invert 111111111111 -> 1111111111111111111111000000000000 -dqinv023 invert 11111111 -> 1111111111111111111111111100000000 -dqinv025 invert 1111111 -> 1111111111111111111111111110000000 -dqinv026 invert 111111 -> 1111111111111111111111111111000000 -dqinv027 invert 11111 -> 1111111111111111111111111111100000 -dqinv028 invert 1111 -> 1111111111111111111111111111110000 -dqinv029 invert 111 -> 1111111111111111111111111111111000 -dqinv031 invert 11 -> 1111111111111111111111111111111100 -dqinv032 invert 1 -> 1111111111111111111111111111111110 -dqinv033 invert 111111111111 -> 1111111111111111111111000000000000 -dqinv034 invert 11111111111 -> 1111111111111111111111100000000000 -dqinv035 invert 1111111111 -> 1111111111111111111111110000000000 -dqinv036 invert 111111111 -> 1111111111111111111111111000000000 - -dqinv040 invert 011111111 -> 1111111111111111111111111100000000 -dqinv041 invert 101111111 -> 1111111111111111111111111010000000 -dqinv042 invert 110111111 -> 1111111111111111111111111001000000 -dqinv043 invert 111011111 -> 1111111111111111111111111000100000 -dqinv044 invert 111101111 -> 1111111111111111111111111000010000 -dqinv045 invert 111110111 -> 1111111111111111111111111000001000 -dqinv046 invert 111111011 -> 1111111111111111111111111000000100 -dqinv047 invert 111111101 -> 1111111111111111111111111000000010 -dqinv048 invert 111111110 -> 1111111111111111111111111000000001 -dqinv049 invert 011111011 -> 1111111111111111111111111100000100 -dqinv050 invert 101111101 -> 1111111111111111111111111010000010 -dqinv051 invert 110111110 -> 1111111111111111111111111001000001 -dqinv052 invert 111011101 -> 1111111111111111111111111000100010 -dqinv053 invert 111101011 -> 1111111111111111111111111000010100 -dqinv054 invert 111110111 -> 1111111111111111111111111000001000 -dqinv055 invert 111101011 -> 1111111111111111111111111000010100 -dqinv056 invert 111011101 -> 1111111111111111111111111000100010 -dqinv057 invert 110111110 -> 1111111111111111111111111001000001 -dqinv058 invert 101111101 -> 1111111111111111111111111010000010 -dqinv059 invert 011111011 -> 1111111111111111111111111100000100 - -dqinv080 invert 1000000011111111 -> 1111111111111111110111111100000000 -dqinv081 invert 0100000101111111 -> 1111111111111111111011111010000000 -dqinv082 invert 0010000110111111 -> 1111111111111111111101111001000000 -dqinv083 invert 0001000111011111 -> 1111111111111111111110111000100000 -dqinv084 invert 0000100111101111 -> 1111111111111111111111011000010000 -dqinv085 invert 0000010111110111 -> 1111111111111111111111101000001000 -dqinv086 invert 0000001111111011 -> 1111111111111111111111110000000100 -dqinv087 invert 0000010111111101 -> 1111111111111111111111101000000010 -dqinv088 invert 0000100111111110 -> 1111111111111111111111011000000001 -dqinv089 invert 0001000011111011 -> 1111111111111111111110111100000100 -dqinv090 invert 0010000101111101 -> 1111111111111111111101111010000010 -dqinv091 invert 0100000110111110 -> 1111111111111111111011111001000001 -dqinv092 invert 1000000111011101 -> 1111111111111111110111111000100010 -dqinv093 invert 0100000111101011 -> 1111111111111111111011111000010100 -dqinv094 invert 0010000111110111 -> 1111111111111111111101111000001000 -dqinv095 invert 0001000111101011 -> 1111111111111111111110111000010100 -dqinv096 invert 0000100111011101 -> 1111111111111111111111011000100010 -dqinv097 invert 0000010110111110 -> 1111111111111111111111101001000001 -dqinv098 invert 0000001101111101 -> 1111111111111111111111110010000010 -dqinv099 invert 0000010011111011 -> 1111111111111111111111101100000100 - --- and more thorough MSD/LSD tests [8 and 9 mght be encoded differently...] -dqinv151 invert 1111111111111111111111111111111110 -> 1 -dqinv152 invert 1111111111111111110000000000000000 -> 1111111111111111 -dqinv153 invert 1000000000000000001111111111111111 -> 111111111111111110000000000000000 -dqinv154 invert 1111111111111111111000000000000000 -> 111111111111111 -dqinv155 invert 0100000000000000000111111111111111 -> 1011111111111111111000000000000000 -dqinv156 invert 1011111111111111110100000000000000 -> 100000000000000001011111111111111 -dqinv157 invert 1101111111111111110111111111111111 -> 10000000000000001000000000000000 -dqinv158 invert 1110111111111111110011111111111111 -> 1000000000000001100000000000000 - --- non-0/1 should not be accepted, nor should signs -dqinv220 invert 111111112 -> NaN Invalid_operation -dqinv221 invert 333333333 -> NaN Invalid_operation -dqinv222 invert 555555555 -> NaN Invalid_operation -dqinv223 invert 777777777 -> NaN Invalid_operation -dqinv224 invert 999999999 -> NaN Invalid_operation -dqinv225 invert 222222222 -> NaN Invalid_operation -dqinv226 invert 444444444 -> NaN Invalid_operation -dqinv227 invert 666666666 -> NaN Invalid_operation -dqinv228 invert 888888888 -> NaN Invalid_operation -dqinv229 invert 999999999 -> NaN Invalid_operation -dqinv230 invert 999999999 -> NaN Invalid_operation -dqinv231 invert 999999999 -> NaN Invalid_operation -dqinv232 invert 999999999 -> NaN Invalid_operation --- a few randoms -dqinv240 invert 567468689 -> NaN Invalid_operation -dqinv241 invert 567367689 -> NaN Invalid_operation -dqinv242 invert -631917772 -> NaN Invalid_operation -dqinv243 invert -756253257 -> NaN Invalid_operation -dqinv244 invert 835590149 -> NaN Invalid_operation --- test MSD -dqinv250 invert 2000000111000111000111000000000000 -> NaN Invalid_operation -dqinv251 invert 3000000111000111000111000000000000 -> NaN Invalid_operation -dqinv252 invert 4000000111000111000111000000000000 -> NaN Invalid_operation -dqinv253 invert 5000000111000111000111000000000000 -> NaN Invalid_operation -dqinv254 invert 6000000111000111000111000000000000 -> NaN Invalid_operation -dqinv255 invert 7000000111000111000111000000000000 -> NaN Invalid_operation -dqinv256 invert 8000000111000111000111000000000000 -> NaN Invalid_operation -dqinv257 invert 9000000111000111000111000000000000 -> NaN Invalid_operation --- test MSD-1 -dqinv270 invert 0200000111000111000111001000000000 -> NaN Invalid_operation -dqinv271 invert 0300000111000111000111000100000000 -> NaN Invalid_operation -dqinv272 invert 0400000111000111000111000010000000 -> NaN Invalid_operation -dqinv273 invert 0500000111000111000111000001000000 -> NaN Invalid_operation -dqinv274 invert 1600000111000111000111000000100000 -> NaN Invalid_operation -dqinv275 invert 1700000111000111000111000000010000 -> NaN Invalid_operation -dqinv276 invert 1800000111000111000111000000001000 -> NaN Invalid_operation -dqinv277 invert 1900000111000111000111000000000100 -> NaN Invalid_operation --- test LSD -dqinv280 invert 0010000111000111000111000000000002 -> NaN Invalid_operation -dqinv281 invert 0001000111000111000111000000000003 -> NaN Invalid_operation -dqinv282 invert 0000000111000111000111100000000004 -> NaN Invalid_operation -dqinv283 invert 0000000111000111000111010000000005 -> NaN Invalid_operation -dqinv284 invert 1000000111000111000111001000000006 -> NaN Invalid_operation -dqinv285 invert 1000000111000111000111000100000007 -> NaN Invalid_operation -dqinv286 invert 1000000111000111000111000010000008 -> NaN Invalid_operation -dqinv287 invert 1000000111000111000111000001000009 -> NaN Invalid_operation --- test Middie -dqinv288 invert 0010000111000111000111000020000000 -> NaN Invalid_operation -dqinv289 invert 0001000111000111000111000030000001 -> NaN Invalid_operation -dqinv290 invert 0000000111000111000111100040000010 -> NaN Invalid_operation -dqinv291 invert 0000000111000111000111010050000100 -> NaN Invalid_operation -dqinv292 invert 1000000111000111000111001060001000 -> NaN Invalid_operation -dqinv293 invert 1000000111000111000111000170010000 -> NaN Invalid_operation -dqinv294 invert 1000000111000111000111000080100000 -> NaN Invalid_operation -dqinv295 invert 1000000111000111000111000091000000 -> NaN Invalid_operation --- signs -dqinv296 invert -1000000111000111000111000001000000 -> NaN Invalid_operation -dqinv299 invert 1000000111000111000111000001000000 -> 111111000111000111000111110111111 - --- Nmax, Nmin, Ntiny-like -dqinv341 invert 9.99999999E+2998 -> NaN Invalid_operation -dqinv342 invert 1E-2998 -> NaN Invalid_operation -dqinv343 invert 1.00000000E-2998 -> NaN Invalid_operation -dqinv344 invert 1E-2078 -> NaN Invalid_operation -dqinv345 invert -1E-2078 -> NaN Invalid_operation -dqinv346 invert -1.00000000E-2998 -> NaN Invalid_operation -dqinv347 invert -1E-2998 -> NaN Invalid_operation -dqinv348 invert -9.99999999E+2998 -> NaN Invalid_operation - --- A few other non-integers -dqinv361 invert 1.0 -> NaN Invalid_operation -dqinv362 invert 1E+1 -> NaN Invalid_operation -dqinv363 invert 0.0 -> NaN Invalid_operation -dqinv364 invert 0E+1 -> NaN Invalid_operation -dqinv365 invert 9.9 -> NaN Invalid_operation -dqinv366 invert 9E+1 -> NaN Invalid_operation - --- All Specials are in error -dqinv788 invert -Inf -> NaN Invalid_operation -dqinv794 invert Inf -> NaN Invalid_operation -dqinv821 invert NaN -> NaN Invalid_operation -dqinv841 invert sNaN -> NaN Invalid_operation --- propagating NaNs -dqinv861 invert NaN1 -> NaN Invalid_operation -dqinv862 invert +NaN2 -> NaN Invalid_operation -dqinv863 invert NaN3 -> NaN Invalid_operation -dqinv864 invert NaN4 -> NaN Invalid_operation -dqinv865 invert NaN5 -> NaN Invalid_operation -dqinv871 invert sNaN11 -> NaN Invalid_operation -dqinv872 invert sNaN12 -> NaN Invalid_operation -dqinv873 invert sNaN13 -> NaN Invalid_operation -dqinv874 invert sNaN14 -> NaN Invalid_operation -dqinv875 invert sNaN15 -> NaN Invalid_operation -dqinv876 invert NaN16 -> NaN Invalid_operation -dqinv881 invert +NaN25 -> NaN Invalid_operation -dqinv882 invert -NaN26 -> NaN Invalid_operation -dqinv883 invert -sNaN27 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqInvert.decTest -- digitwise logical INVERT for decQuads -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check (truth table) +dqinv001 invert 0 -> 1111111111111111111111111111111111 +dqinv002 invert 1 -> 1111111111111111111111111111111110 +dqinv003 invert 10 -> 1111111111111111111111111111111101 +dqinv004 invert 111111111 -> 1111111111111111111111111000000000 +dqinv005 invert 000000000 -> 1111111111111111111111111111111111 +-- and at msd and msd-1 +dqinv007 invert 0000000000000000000000000000000000 -> 1111111111111111111111111111111111 +dqinv008 invert 1000000000000000000000000000000000 -> 111111111111111111111111111111111 +dqinv009 invert 0000000000000000000000000000000000 -> 1111111111111111111111111111111111 +dqinv010 invert 0100000000000000000000000000000000 -> 1011111111111111111111111111111111 +dqinv011 invert 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 +dqinv012 invert 1111111111111111111111111111111111 -> 0 +dqinv013 invert 0011111111111111111111111111111111 -> 1100000000000000000000000000000000 +dqinv014 invert 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 + +-- Various lengths +dqinv600 invert 0111111111111111111011111111111111 -> 1000000000000000000100000000000000 +dqinv601 invert 0011111111111111110101111111111111 -> 1100000000000000001010000000000000 +dqinv602 invert 0101111111111111101110111111111111 -> 1010000000000000010001000000000000 +dqinv603 invert 0110111111111111011111011111111111 -> 1001000000000000100000100000000000 +dqinv604 invert 0111011111111110111111101111111111 -> 1000100000000001000000010000000000 +dqinv605 invert 0111101111111101111111110111111111 -> 1000010000000010000000001000000000 +dqinv606 invert 0111110111111011111111111011111111 -> 1000001000000100000000000100000000 +dqinv607 invert 0111111011110111111111111101111111 -> 1000000100001000000000000010000000 +dqinv608 invert 0111111101101111111111111110111111 -> 1000000010010000000000000001000000 +dqinv609 invert 0111111110011111111111111111011111 -> 1000000001100000000000000000100000 +dqinv610 invert 0111111110011111111111111111101111 -> 1000000001100000000000000000010000 +dqinv611 invert 0111111101101111111111111111110111 -> 1000000010010000000000000000001000 +dqinv612 invert 0111111011110111111111111111111011 -> 1000000100001000000000000000000100 +dqinv613 invert 0111110111111011111111111111111101 -> 1000001000000100000000000000000010 +dqinv614 invert 0111101111111101111111111111111110 -> 1000010000000010000000000000000001 +dqinv615 invert 0111011111111110111111111111111111 -> 1000100000000001000000000000000000 +dqinv616 invert 0110111111111111011111111111111110 -> 1001000000000000100000000000000001 +dqinv617 invert 0101111111111111101111111111111101 -> 1010000000000000010000000000000010 +dqinv618 invert 0011111111111111110111111111111011 -> 1100000000000000001000000000000100 +dqinv619 invert 0101111111111111111011111111110111 -> 1010000000000000000100000000001000 +dqinv620 invert 0110111111111111111101111111101111 -> 1001000000000000000010000000010000 +dqinv621 invert 0111011111111111111110111111011111 -> 1000100000000000000001000000100000 +dqinv622 invert 0111101111111111111111011110111111 -> 1000010000000000000000100001000000 +dqinv623 invert 0111110111111111111111101101111111 -> 1000001000000000000000010010000000 +dqinv624 invert 0111111011111111111111110011111111 -> 1000000100000000000000001100000000 +dqinv625 invert 0111111101111111111111110011111111 -> 1000000010000000000000001100000000 +dqinv626 invert 0111111110111111111111101101111111 -> 1000000001000000000000010010000000 +dqinv627 invert 0111111111011111111111011110111111 -> 1000000000100000000000100001000000 +dqinv628 invert 0111111111101111111110111111011111 -> 1000000000010000000001000000100000 +dqinv629 invert 0111111111110111111101111111101111 -> 1000000000001000000010000000010000 +dqinv630 invert 0111111111111011111011111111110111 -> 1000000000000100000100000000001000 +dqinv631 invert 0111111111111101110111111111111011 -> 1000000000000010001000000000000100 +dqinv632 invert 0111111111111110101111111111111101 -> 1000000000000001010000000000000010 +dqinv633 invert 0111111111111111011111111111111110 -> 1000000000000000100000000000000001 + +dqinv021 invert 111111111 -> 1111111111111111111111111000000000 +dqinv022 invert 111111111111 -> 1111111111111111111111000000000000 +dqinv023 invert 11111111 -> 1111111111111111111111111100000000 +dqinv025 invert 1111111 -> 1111111111111111111111111110000000 +dqinv026 invert 111111 -> 1111111111111111111111111111000000 +dqinv027 invert 11111 -> 1111111111111111111111111111100000 +dqinv028 invert 1111 -> 1111111111111111111111111111110000 +dqinv029 invert 111 -> 1111111111111111111111111111111000 +dqinv031 invert 11 -> 1111111111111111111111111111111100 +dqinv032 invert 1 -> 1111111111111111111111111111111110 +dqinv033 invert 111111111111 -> 1111111111111111111111000000000000 +dqinv034 invert 11111111111 -> 1111111111111111111111100000000000 +dqinv035 invert 1111111111 -> 1111111111111111111111110000000000 +dqinv036 invert 111111111 -> 1111111111111111111111111000000000 + +dqinv040 invert 011111111 -> 1111111111111111111111111100000000 +dqinv041 invert 101111111 -> 1111111111111111111111111010000000 +dqinv042 invert 110111111 -> 1111111111111111111111111001000000 +dqinv043 invert 111011111 -> 1111111111111111111111111000100000 +dqinv044 invert 111101111 -> 1111111111111111111111111000010000 +dqinv045 invert 111110111 -> 1111111111111111111111111000001000 +dqinv046 invert 111111011 -> 1111111111111111111111111000000100 +dqinv047 invert 111111101 -> 1111111111111111111111111000000010 +dqinv048 invert 111111110 -> 1111111111111111111111111000000001 +dqinv049 invert 011111011 -> 1111111111111111111111111100000100 +dqinv050 invert 101111101 -> 1111111111111111111111111010000010 +dqinv051 invert 110111110 -> 1111111111111111111111111001000001 +dqinv052 invert 111011101 -> 1111111111111111111111111000100010 +dqinv053 invert 111101011 -> 1111111111111111111111111000010100 +dqinv054 invert 111110111 -> 1111111111111111111111111000001000 +dqinv055 invert 111101011 -> 1111111111111111111111111000010100 +dqinv056 invert 111011101 -> 1111111111111111111111111000100010 +dqinv057 invert 110111110 -> 1111111111111111111111111001000001 +dqinv058 invert 101111101 -> 1111111111111111111111111010000010 +dqinv059 invert 011111011 -> 1111111111111111111111111100000100 + +dqinv080 invert 1000000011111111 -> 1111111111111111110111111100000000 +dqinv081 invert 0100000101111111 -> 1111111111111111111011111010000000 +dqinv082 invert 0010000110111111 -> 1111111111111111111101111001000000 +dqinv083 invert 0001000111011111 -> 1111111111111111111110111000100000 +dqinv084 invert 0000100111101111 -> 1111111111111111111111011000010000 +dqinv085 invert 0000010111110111 -> 1111111111111111111111101000001000 +dqinv086 invert 0000001111111011 -> 1111111111111111111111110000000100 +dqinv087 invert 0000010111111101 -> 1111111111111111111111101000000010 +dqinv088 invert 0000100111111110 -> 1111111111111111111111011000000001 +dqinv089 invert 0001000011111011 -> 1111111111111111111110111100000100 +dqinv090 invert 0010000101111101 -> 1111111111111111111101111010000010 +dqinv091 invert 0100000110111110 -> 1111111111111111111011111001000001 +dqinv092 invert 1000000111011101 -> 1111111111111111110111111000100010 +dqinv093 invert 0100000111101011 -> 1111111111111111111011111000010100 +dqinv094 invert 0010000111110111 -> 1111111111111111111101111000001000 +dqinv095 invert 0001000111101011 -> 1111111111111111111110111000010100 +dqinv096 invert 0000100111011101 -> 1111111111111111111111011000100010 +dqinv097 invert 0000010110111110 -> 1111111111111111111111101001000001 +dqinv098 invert 0000001101111101 -> 1111111111111111111111110010000010 +dqinv099 invert 0000010011111011 -> 1111111111111111111111101100000100 + +-- and more thorough MSD/LSD tests [8 and 9 mght be encoded differently...] +dqinv151 invert 1111111111111111111111111111111110 -> 1 +dqinv152 invert 1111111111111111110000000000000000 -> 1111111111111111 +dqinv153 invert 1000000000000000001111111111111111 -> 111111111111111110000000000000000 +dqinv154 invert 1111111111111111111000000000000000 -> 111111111111111 +dqinv155 invert 0100000000000000000111111111111111 -> 1011111111111111111000000000000000 +dqinv156 invert 1011111111111111110100000000000000 -> 100000000000000001011111111111111 +dqinv157 invert 1101111111111111110111111111111111 -> 10000000000000001000000000000000 +dqinv158 invert 1110111111111111110011111111111111 -> 1000000000000001100000000000000 + +-- non-0/1 should not be accepted, nor should signs +dqinv220 invert 111111112 -> NaN Invalid_operation +dqinv221 invert 333333333 -> NaN Invalid_operation +dqinv222 invert 555555555 -> NaN Invalid_operation +dqinv223 invert 777777777 -> NaN Invalid_operation +dqinv224 invert 999999999 -> NaN Invalid_operation +dqinv225 invert 222222222 -> NaN Invalid_operation +dqinv226 invert 444444444 -> NaN Invalid_operation +dqinv227 invert 666666666 -> NaN Invalid_operation +dqinv228 invert 888888888 -> NaN Invalid_operation +dqinv229 invert 999999999 -> NaN Invalid_operation +dqinv230 invert 999999999 -> NaN Invalid_operation +dqinv231 invert 999999999 -> NaN Invalid_operation +dqinv232 invert 999999999 -> NaN Invalid_operation +-- a few randoms +dqinv240 invert 567468689 -> NaN Invalid_operation +dqinv241 invert 567367689 -> NaN Invalid_operation +dqinv242 invert -631917772 -> NaN Invalid_operation +dqinv243 invert -756253257 -> NaN Invalid_operation +dqinv244 invert 835590149 -> NaN Invalid_operation +-- test MSD +dqinv250 invert 2000000111000111000111000000000000 -> NaN Invalid_operation +dqinv251 invert 3000000111000111000111000000000000 -> NaN Invalid_operation +dqinv252 invert 4000000111000111000111000000000000 -> NaN Invalid_operation +dqinv253 invert 5000000111000111000111000000000000 -> NaN Invalid_operation +dqinv254 invert 6000000111000111000111000000000000 -> NaN Invalid_operation +dqinv255 invert 7000000111000111000111000000000000 -> NaN Invalid_operation +dqinv256 invert 8000000111000111000111000000000000 -> NaN Invalid_operation +dqinv257 invert 9000000111000111000111000000000000 -> NaN Invalid_operation +-- test MSD-1 +dqinv270 invert 0200000111000111000111001000000000 -> NaN Invalid_operation +dqinv271 invert 0300000111000111000111000100000000 -> NaN Invalid_operation +dqinv272 invert 0400000111000111000111000010000000 -> NaN Invalid_operation +dqinv273 invert 0500000111000111000111000001000000 -> NaN Invalid_operation +dqinv274 invert 1600000111000111000111000000100000 -> NaN Invalid_operation +dqinv275 invert 1700000111000111000111000000010000 -> NaN Invalid_operation +dqinv276 invert 1800000111000111000111000000001000 -> NaN Invalid_operation +dqinv277 invert 1900000111000111000111000000000100 -> NaN Invalid_operation +-- test LSD +dqinv280 invert 0010000111000111000111000000000002 -> NaN Invalid_operation +dqinv281 invert 0001000111000111000111000000000003 -> NaN Invalid_operation +dqinv282 invert 0000000111000111000111100000000004 -> NaN Invalid_operation +dqinv283 invert 0000000111000111000111010000000005 -> NaN Invalid_operation +dqinv284 invert 1000000111000111000111001000000006 -> NaN Invalid_operation +dqinv285 invert 1000000111000111000111000100000007 -> NaN Invalid_operation +dqinv286 invert 1000000111000111000111000010000008 -> NaN Invalid_operation +dqinv287 invert 1000000111000111000111000001000009 -> NaN Invalid_operation +-- test Middie +dqinv288 invert 0010000111000111000111000020000000 -> NaN Invalid_operation +dqinv289 invert 0001000111000111000111000030000001 -> NaN Invalid_operation +dqinv290 invert 0000000111000111000111100040000010 -> NaN Invalid_operation +dqinv291 invert 0000000111000111000111010050000100 -> NaN Invalid_operation +dqinv292 invert 1000000111000111000111001060001000 -> NaN Invalid_operation +dqinv293 invert 1000000111000111000111000170010000 -> NaN Invalid_operation +dqinv294 invert 1000000111000111000111000080100000 -> NaN Invalid_operation +dqinv295 invert 1000000111000111000111000091000000 -> NaN Invalid_operation +-- signs +dqinv296 invert -1000000111000111000111000001000000 -> NaN Invalid_operation +dqinv299 invert 1000000111000111000111000001000000 -> 111111000111000111000111110111111 + +-- Nmax, Nmin, Ntiny-like +dqinv341 invert 9.99999999E+2998 -> NaN Invalid_operation +dqinv342 invert 1E-2998 -> NaN Invalid_operation +dqinv343 invert 1.00000000E-2998 -> NaN Invalid_operation +dqinv344 invert 1E-2078 -> NaN Invalid_operation +dqinv345 invert -1E-2078 -> NaN Invalid_operation +dqinv346 invert -1.00000000E-2998 -> NaN Invalid_operation +dqinv347 invert -1E-2998 -> NaN Invalid_operation +dqinv348 invert -9.99999999E+2998 -> NaN Invalid_operation + +-- A few other non-integers +dqinv361 invert 1.0 -> NaN Invalid_operation +dqinv362 invert 1E+1 -> NaN Invalid_operation +dqinv363 invert 0.0 -> NaN Invalid_operation +dqinv364 invert 0E+1 -> NaN Invalid_operation +dqinv365 invert 9.9 -> NaN Invalid_operation +dqinv366 invert 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +dqinv788 invert -Inf -> NaN Invalid_operation +dqinv794 invert Inf -> NaN Invalid_operation +dqinv821 invert NaN -> NaN Invalid_operation +dqinv841 invert sNaN -> NaN Invalid_operation +-- propagating NaNs +dqinv861 invert NaN1 -> NaN Invalid_operation +dqinv862 invert +NaN2 -> NaN Invalid_operation +dqinv863 invert NaN3 -> NaN Invalid_operation +dqinv864 invert NaN4 -> NaN Invalid_operation +dqinv865 invert NaN5 -> NaN Invalid_operation +dqinv871 invert sNaN11 -> NaN Invalid_operation +dqinv872 invert sNaN12 -> NaN Invalid_operation +dqinv873 invert sNaN13 -> NaN Invalid_operation +dqinv874 invert sNaN14 -> NaN Invalid_operation +dqinv875 invert sNaN15 -> NaN Invalid_operation +dqinv876 invert NaN16 -> NaN Invalid_operation +dqinv881 invert +NaN25 -> NaN Invalid_operation +dqinv882 invert -NaN26 -> NaN Invalid_operation +dqinv883 invert -sNaN27 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqLogB.decTest b/Lib/test/decimaltestdata/dqLogB.decTest index a18313dc012..449f3dcb8de 100644 --- a/Lib/test/decimaltestdata/dqLogB.decTest +++ b/Lib/test/decimaltestdata/dqLogB.decTest @@ -1,160 +1,160 @@ ------------------------------------------------------------------------- --- dqLogB.decTest -- integral 754r adjusted exponent, for decQuads -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- basics -dqlogb000 logb 0 -> -Infinity Division_by_zero -dqlogb001 logb 1E-6176 -> -6176 -dqlogb002 logb 1E-6143 -> -6143 -dqlogb003 logb 0.001 -> -3 -dqlogb004 logb 0.03 -> -2 -dqlogb005 logb 1 -> 0 -dqlogb006 logb 2 -> 0 -dqlogb007 logb 2.5 -> 0 -dqlogb008 logb 2.50 -> 0 -dqlogb009 logb 2.500 -> 0 -dqlogb010 logb 10 -> 1 -dqlogb011 logb 70 -> 1 -dqlogb012 logb 100 -> 2 -dqlogb013 logb 250 -> 2 -dqlogb014 logb 9E+6144 -> 6144 -dqlogb015 logb +Infinity -> Infinity - --- negatives appear to be treated as positives -dqlogb021 logb -0 -> -Infinity Division_by_zero -dqlogb022 logb -1E-6176 -> -6176 -dqlogb023 logb -9E-6143 -> -6143 -dqlogb024 logb -0.001 -> -3 -dqlogb025 logb -1 -> 0 -dqlogb026 logb -2 -> 0 -dqlogb027 logb -10 -> 1 -dqlogb028 logb -70 -> 1 -dqlogb029 logb -100 -> 2 -dqlogb030 logb -9E+6144 -> 6144 -dqlogb031 logb -Infinity -> Infinity - --- zeros -dqlogb111 logb 0 -> -Infinity Division_by_zero -dqlogb112 logb -0 -> -Infinity Division_by_zero -dqlogb113 logb 0E+4 -> -Infinity Division_by_zero -dqlogb114 logb -0E+4 -> -Infinity Division_by_zero -dqlogb115 logb 0.0000 -> -Infinity Division_by_zero -dqlogb116 logb -0.0000 -> -Infinity Division_by_zero -dqlogb117 logb 0E-141 -> -Infinity Division_by_zero -dqlogb118 logb -0E-141 -> -Infinity Division_by_zero - --- full coefficients, alternating bits -dqlogb121 logb 268268268 -> 8 -dqlogb122 logb -268268268 -> 8 -dqlogb123 logb 134134134 -> 8 -dqlogb124 logb -134134134 -> 8 - --- Nmax, Nmin, Ntiny -dqlogb131 logb 9.999999999999999999999999999999999E+6144 -> 6144 -dqlogb132 logb 1E-6143 -> -6143 -dqlogb133 logb 1.000000000000000000000000000000000E-6143 -> -6143 -dqlogb134 logb 1E-6176 -> -6176 - -dqlogb135 logb -1E-6176 -> -6176 -dqlogb136 logb -1.000000000000000000000000000000000E-6143 -> -6143 -dqlogb137 logb -1E-6143 -> -6143 -dqlogb1614 logb -9.999999999999999999999999999999999E+6144 -> 6144 - --- ones -dqlogb0061 logb 1 -> 0 -dqlogb0062 logb 1.0 -> 0 -dqlogb0063 logb 1.000000000000000 -> 0 - --- notable cases -- exact powers of 10 -dqlogb1100 logb 1 -> 0 -dqlogb1101 logb 10 -> 1 -dqlogb1102 logb 100 -> 2 -dqlogb1103 logb 1000 -> 3 -dqlogb1104 logb 10000 -> 4 -dqlogb1105 logb 100000 -> 5 -dqlogb1106 logb 1000000 -> 6 -dqlogb1107 logb 10000000 -> 7 -dqlogb1108 logb 100000000 -> 8 -dqlogb1109 logb 1000000000 -> 9 -dqlogb1110 logb 10000000000 -> 10 -dqlogb1111 logb 100000000000 -> 11 -dqlogb1112 logb 1000000000000 -> 12 -dqlogb1113 logb 0.00000000001 -> -11 -dqlogb1114 logb 0.0000000001 -> -10 -dqlogb1115 logb 0.000000001 -> -9 -dqlogb1116 logb 0.00000001 -> -8 -dqlogb1117 logb 0.0000001 -> -7 -dqlogb1118 logb 0.000001 -> -6 -dqlogb1119 logb 0.00001 -> -5 -dqlogb1120 logb 0.0001 -> -4 -dqlogb1121 logb 0.001 -> -3 -dqlogb1122 logb 0.01 -> -2 -dqlogb1123 logb 0.1 -> -1 -dqlogb1124 logb 1E-99 -> -99 -dqlogb1125 logb 1E-100 -> -100 -dqlogb1127 logb 1E-299 -> -299 -dqlogb1126 logb 1E-6143 -> -6143 - --- suggestions from Ilan Nehama -dqlogb1400 logb 10E-3 -> -2 -dqlogb1401 logb 10E-2 -> -1 -dqlogb1402 logb 100E-2 -> 0 -dqlogb1403 logb 1000E-2 -> 1 -dqlogb1404 logb 10000E-2 -> 2 -dqlogb1405 logb 10E-1 -> 0 -dqlogb1406 logb 100E-1 -> 1 -dqlogb1407 logb 1000E-1 -> 2 -dqlogb1408 logb 10000E-1 -> 3 -dqlogb1409 logb 10E0 -> 1 -dqlogb1410 logb 100E0 -> 2 -dqlogb1411 logb 1000E0 -> 3 -dqlogb1412 logb 10000E0 -> 4 -dqlogb1413 logb 10E1 -> 2 -dqlogb1414 logb 100E1 -> 3 -dqlogb1415 logb 1000E1 -> 4 -dqlogb1416 logb 10000E1 -> 5 -dqlogb1417 logb 10E2 -> 3 -dqlogb1418 logb 100E2 -> 4 -dqlogb1419 logb 1000E2 -> 5 -dqlogb1420 logb 10000E2 -> 6 - --- special values -dqlogb820 logb Infinity -> Infinity -dqlogb821 logb 0 -> -Infinity Division_by_zero -dqlogb822 logb NaN -> NaN -dqlogb823 logb sNaN -> NaN Invalid_operation --- propagating NaNs -dqlogb824 logb sNaN123 -> NaN123 Invalid_operation -dqlogb825 logb -sNaN321 -> -NaN321 Invalid_operation -dqlogb826 logb NaN456 -> NaN456 -dqlogb827 logb -NaN654 -> -NaN654 -dqlogb828 logb NaN1 -> NaN1 - --- Null test -dqlogb900 logb # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- dqLogB.decTest -- integral 754r adjusted exponent, for decQuads -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- basics +dqlogb000 logb 0 -> -Infinity Division_by_zero +dqlogb001 logb 1E-6176 -> -6176 +dqlogb002 logb 1E-6143 -> -6143 +dqlogb003 logb 0.001 -> -3 +dqlogb004 logb 0.03 -> -2 +dqlogb005 logb 1 -> 0 +dqlogb006 logb 2 -> 0 +dqlogb007 logb 2.5 -> 0 +dqlogb008 logb 2.50 -> 0 +dqlogb009 logb 2.500 -> 0 +dqlogb010 logb 10 -> 1 +dqlogb011 logb 70 -> 1 +dqlogb012 logb 100 -> 2 +dqlogb013 logb 250 -> 2 +dqlogb014 logb 9E+6144 -> 6144 +dqlogb015 logb +Infinity -> Infinity + +-- negatives appear to be treated as positives +dqlogb021 logb -0 -> -Infinity Division_by_zero +dqlogb022 logb -1E-6176 -> -6176 +dqlogb023 logb -9E-6143 -> -6143 +dqlogb024 logb -0.001 -> -3 +dqlogb025 logb -1 -> 0 +dqlogb026 logb -2 -> 0 +dqlogb027 logb -10 -> 1 +dqlogb028 logb -70 -> 1 +dqlogb029 logb -100 -> 2 +dqlogb030 logb -9E+6144 -> 6144 +dqlogb031 logb -Infinity -> Infinity + +-- zeros +dqlogb111 logb 0 -> -Infinity Division_by_zero +dqlogb112 logb -0 -> -Infinity Division_by_zero +dqlogb113 logb 0E+4 -> -Infinity Division_by_zero +dqlogb114 logb -0E+4 -> -Infinity Division_by_zero +dqlogb115 logb 0.0000 -> -Infinity Division_by_zero +dqlogb116 logb -0.0000 -> -Infinity Division_by_zero +dqlogb117 logb 0E-141 -> -Infinity Division_by_zero +dqlogb118 logb -0E-141 -> -Infinity Division_by_zero + +-- full coefficients, alternating bits +dqlogb121 logb 268268268 -> 8 +dqlogb122 logb -268268268 -> 8 +dqlogb123 logb 134134134 -> 8 +dqlogb124 logb -134134134 -> 8 + +-- Nmax, Nmin, Ntiny +dqlogb131 logb 9.999999999999999999999999999999999E+6144 -> 6144 +dqlogb132 logb 1E-6143 -> -6143 +dqlogb133 logb 1.000000000000000000000000000000000E-6143 -> -6143 +dqlogb134 logb 1E-6176 -> -6176 + +dqlogb135 logb -1E-6176 -> -6176 +dqlogb136 logb -1.000000000000000000000000000000000E-6143 -> -6143 +dqlogb137 logb -1E-6143 -> -6143 +dqlogb1614 logb -9.999999999999999999999999999999999E+6144 -> 6144 + +-- ones +dqlogb0061 logb 1 -> 0 +dqlogb0062 logb 1.0 -> 0 +dqlogb0063 logb 1.000000000000000 -> 0 + +-- notable cases -- exact powers of 10 +dqlogb1100 logb 1 -> 0 +dqlogb1101 logb 10 -> 1 +dqlogb1102 logb 100 -> 2 +dqlogb1103 logb 1000 -> 3 +dqlogb1104 logb 10000 -> 4 +dqlogb1105 logb 100000 -> 5 +dqlogb1106 logb 1000000 -> 6 +dqlogb1107 logb 10000000 -> 7 +dqlogb1108 logb 100000000 -> 8 +dqlogb1109 logb 1000000000 -> 9 +dqlogb1110 logb 10000000000 -> 10 +dqlogb1111 logb 100000000000 -> 11 +dqlogb1112 logb 1000000000000 -> 12 +dqlogb1113 logb 0.00000000001 -> -11 +dqlogb1114 logb 0.0000000001 -> -10 +dqlogb1115 logb 0.000000001 -> -9 +dqlogb1116 logb 0.00000001 -> -8 +dqlogb1117 logb 0.0000001 -> -7 +dqlogb1118 logb 0.000001 -> -6 +dqlogb1119 logb 0.00001 -> -5 +dqlogb1120 logb 0.0001 -> -4 +dqlogb1121 logb 0.001 -> -3 +dqlogb1122 logb 0.01 -> -2 +dqlogb1123 logb 0.1 -> -1 +dqlogb1124 logb 1E-99 -> -99 +dqlogb1125 logb 1E-100 -> -100 +dqlogb1127 logb 1E-299 -> -299 +dqlogb1126 logb 1E-6143 -> -6143 + +-- suggestions from Ilan Nehama +dqlogb1400 logb 10E-3 -> -2 +dqlogb1401 logb 10E-2 -> -1 +dqlogb1402 logb 100E-2 -> 0 +dqlogb1403 logb 1000E-2 -> 1 +dqlogb1404 logb 10000E-2 -> 2 +dqlogb1405 logb 10E-1 -> 0 +dqlogb1406 logb 100E-1 -> 1 +dqlogb1407 logb 1000E-1 -> 2 +dqlogb1408 logb 10000E-1 -> 3 +dqlogb1409 logb 10E0 -> 1 +dqlogb1410 logb 100E0 -> 2 +dqlogb1411 logb 1000E0 -> 3 +dqlogb1412 logb 10000E0 -> 4 +dqlogb1413 logb 10E1 -> 2 +dqlogb1414 logb 100E1 -> 3 +dqlogb1415 logb 1000E1 -> 4 +dqlogb1416 logb 10000E1 -> 5 +dqlogb1417 logb 10E2 -> 3 +dqlogb1418 logb 100E2 -> 4 +dqlogb1419 logb 1000E2 -> 5 +dqlogb1420 logb 10000E2 -> 6 + +-- special values +dqlogb820 logb Infinity -> Infinity +dqlogb821 logb 0 -> -Infinity Division_by_zero +dqlogb822 logb NaN -> NaN +dqlogb823 logb sNaN -> NaN Invalid_operation +-- propagating NaNs +dqlogb824 logb sNaN123 -> NaN123 Invalid_operation +dqlogb825 logb -sNaN321 -> -NaN321 Invalid_operation +dqlogb826 logb NaN456 -> NaN456 +dqlogb827 logb -NaN654 -> -NaN654 +dqlogb828 logb NaN1 -> NaN1 + +-- Null test +dqlogb900 logb # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/dqMax.decTest b/Lib/test/decimaltestdata/dqMax.decTest index dc6a1ab8f8e..162d4bda3d9 100644 --- a/Lib/test/decimaltestdata/dqMax.decTest +++ b/Lib/test/decimaltestdata/dqMax.decTest @@ -1,322 +1,322 @@ ------------------------------------------------------------------------- --- dqMax.decTest -- decQuad maxnum -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmax001 max -2 -2 -> -2 -dqmax002 max -2 -1 -> -1 -dqmax003 max -2 0 -> 0 -dqmax004 max -2 1 -> 1 -dqmax005 max -2 2 -> 2 -dqmax006 max -1 -2 -> -1 -dqmax007 max -1 -1 -> -1 -dqmax008 max -1 0 -> 0 -dqmax009 max -1 1 -> 1 -dqmax010 max -1 2 -> 2 -dqmax011 max 0 -2 -> 0 -dqmax012 max 0 -1 -> 0 -dqmax013 max 0 0 -> 0 -dqmax014 max 0 1 -> 1 -dqmax015 max 0 2 -> 2 -dqmax016 max 1 -2 -> 1 -dqmax017 max 1 -1 -> 1 -dqmax018 max 1 0 -> 1 -dqmax019 max 1 1 -> 1 -dqmax020 max 1 2 -> 2 -dqmax021 max 2 -2 -> 2 -dqmax022 max 2 -1 -> 2 -dqmax023 max 2 0 -> 2 -dqmax025 max 2 1 -> 2 -dqmax026 max 2 2 -> 2 - --- extended zeros -dqmax030 max 0 0 -> 0 -dqmax031 max 0 -0 -> 0 -dqmax032 max 0 -0.0 -> 0 -dqmax033 max 0 0.0 -> 0 -dqmax034 max -0 0 -> 0 -- note: -0 = 0, but 0 chosen -dqmax035 max -0 -0 -> -0 -dqmax036 max -0 -0.0 -> -0.0 -dqmax037 max -0 0.0 -> 0.0 -dqmax038 max 0.0 0 -> 0 -dqmax039 max 0.0 -0 -> 0.0 -dqmax040 max 0.0 -0.0 -> 0.0 -dqmax041 max 0.0 0.0 -> 0.0 -dqmax042 max -0.0 0 -> 0 -dqmax043 max -0.0 -0 -> -0.0 -dqmax044 max -0.0 -0.0 -> -0.0 -dqmax045 max -0.0 0.0 -> 0.0 - -dqmax050 max -0E1 0E1 -> 0E+1 -dqmax051 max -0E2 0E2 -> 0E+2 -dqmax052 max -0E2 0E1 -> 0E+1 -dqmax053 max -0E1 0E2 -> 0E+2 -dqmax054 max 0E1 -0E1 -> 0E+1 -dqmax055 max 0E2 -0E2 -> 0E+2 -dqmax056 max 0E2 -0E1 -> 0E+2 -dqmax057 max 0E1 -0E2 -> 0E+1 - -dqmax058 max 0E1 0E1 -> 0E+1 -dqmax059 max 0E2 0E2 -> 0E+2 -dqmax060 max 0E2 0E1 -> 0E+2 -dqmax061 max 0E1 0E2 -> 0E+2 -dqmax062 max -0E1 -0E1 -> -0E+1 -dqmax063 max -0E2 -0E2 -> -0E+2 -dqmax064 max -0E2 -0E1 -> -0E+1 -dqmax065 max -0E1 -0E2 -> -0E+1 - --- Specials -dqmax090 max Inf -Inf -> Infinity -dqmax091 max Inf -1000 -> Infinity -dqmax092 max Inf -1 -> Infinity -dqmax093 max Inf -0 -> Infinity -dqmax094 max Inf 0 -> Infinity -dqmax095 max Inf 1 -> Infinity -dqmax096 max Inf 1000 -> Infinity -dqmax097 max Inf Inf -> Infinity -dqmax098 max -1000 Inf -> Infinity -dqmax099 max -Inf Inf -> Infinity -dqmax100 max -1 Inf -> Infinity -dqmax101 max -0 Inf -> Infinity -dqmax102 max 0 Inf -> Infinity -dqmax103 max 1 Inf -> Infinity -dqmax104 max 1000 Inf -> Infinity -dqmax105 max Inf Inf -> Infinity - -dqmax120 max -Inf -Inf -> -Infinity -dqmax121 max -Inf -1000 -> -1000 -dqmax122 max -Inf -1 -> -1 -dqmax123 max -Inf -0 -> -0 -dqmax124 max -Inf 0 -> 0 -dqmax125 max -Inf 1 -> 1 -dqmax126 max -Inf 1000 -> 1000 -dqmax127 max -Inf Inf -> Infinity -dqmax128 max -Inf -Inf -> -Infinity -dqmax129 max -1000 -Inf -> -1000 -dqmax130 max -1 -Inf -> -1 -dqmax131 max -0 -Inf -> -0 -dqmax132 max 0 -Inf -> 0 -dqmax133 max 1 -Inf -> 1 -dqmax134 max 1000 -Inf -> 1000 -dqmax135 max Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -dqmax141 max NaN -Inf -> -Infinity -dqmax142 max NaN -1000 -> -1000 -dqmax143 max NaN -1 -> -1 -dqmax144 max NaN -0 -> -0 -dqmax145 max NaN 0 -> 0 -dqmax146 max NaN 1 -> 1 -dqmax147 max NaN 1000 -> 1000 -dqmax148 max NaN Inf -> Infinity -dqmax149 max NaN NaN -> NaN -dqmax150 max -Inf NaN -> -Infinity -dqmax151 max -1000 NaN -> -1000 -dqmax152 max -1 NaN -> -1 -dqmax153 max -0 NaN -> -0 -dqmax154 max 0 NaN -> 0 -dqmax155 max 1 NaN -> 1 -dqmax156 max 1000 NaN -> 1000 -dqmax157 max Inf NaN -> Infinity - -dqmax161 max sNaN -Inf -> NaN Invalid_operation -dqmax162 max sNaN -1000 -> NaN Invalid_operation -dqmax163 max sNaN -1 -> NaN Invalid_operation -dqmax164 max sNaN -0 -> NaN Invalid_operation -dqmax165 max sNaN 0 -> NaN Invalid_operation -dqmax166 max sNaN 1 -> NaN Invalid_operation -dqmax167 max sNaN 1000 -> NaN Invalid_operation -dqmax168 max sNaN NaN -> NaN Invalid_operation -dqmax169 max sNaN sNaN -> NaN Invalid_operation -dqmax170 max NaN sNaN -> NaN Invalid_operation -dqmax171 max -Inf sNaN -> NaN Invalid_operation -dqmax172 max -1000 sNaN -> NaN Invalid_operation -dqmax173 max -1 sNaN -> NaN Invalid_operation -dqmax174 max -0 sNaN -> NaN Invalid_operation -dqmax175 max 0 sNaN -> NaN Invalid_operation -dqmax176 max 1 sNaN -> NaN Invalid_operation -dqmax177 max 1000 sNaN -> NaN Invalid_operation -dqmax178 max Inf sNaN -> NaN Invalid_operation -dqmax179 max NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmax181 max NaN9 -Inf -> -Infinity -dqmax182 max NaN8 9 -> 9 -dqmax183 max -NaN7 Inf -> Infinity - -dqmax184 max -NaN1 NaN11 -> -NaN1 -dqmax185 max NaN2 NaN12 -> NaN2 -dqmax186 max -NaN13 -NaN7 -> -NaN13 -dqmax187 max NaN14 -NaN5 -> NaN14 - -dqmax188 max -Inf NaN4 -> -Infinity -dqmax189 max -9 -NaN3 -> -9 -dqmax190 max Inf NaN2 -> Infinity - -dqmax191 max sNaN99 -Inf -> NaN99 Invalid_operation -dqmax192 max sNaN98 -1 -> NaN98 Invalid_operation -dqmax193 max -sNaN97 NaN -> -NaN97 Invalid_operation -dqmax194 max sNaN96 sNaN94 -> NaN96 Invalid_operation -dqmax195 max NaN95 sNaN93 -> NaN93 Invalid_operation -dqmax196 max -Inf sNaN92 -> NaN92 Invalid_operation -dqmax197 max 0 sNaN91 -> NaN91 Invalid_operation -dqmax198 max Inf -sNaN90 -> -NaN90 Invalid_operation -dqmax199 max NaN sNaN89 -> NaN89 Invalid_operation - --- old rounding checks -dqmax221 max 12345678000 1 -> 12345678000 -dqmax222 max 1 12345678000 -> 12345678000 -dqmax223 max 1234567800 1 -> 1234567800 -dqmax224 max 1 1234567800 -> 1234567800 -dqmax225 max 1234567890 1 -> 1234567890 -dqmax226 max 1 1234567890 -> 1234567890 -dqmax227 max 1234567891 1 -> 1234567891 -dqmax228 max 1 1234567891 -> 1234567891 -dqmax229 max 12345678901 1 -> 12345678901 -dqmax230 max 1 12345678901 -> 12345678901 -dqmax231 max 1234567896 1 -> 1234567896 -dqmax232 max 1 1234567896 -> 1234567896 -dqmax233 max -1234567891 1 -> 1 -dqmax234 max 1 -1234567891 -> 1 -dqmax235 max -12345678901 1 -> 1 -dqmax236 max 1 -12345678901 -> 1 -dqmax237 max -1234567896 1 -> 1 -dqmax238 max 1 -1234567896 -> 1 - --- from examples -dqmax280 max '3' '2' -> '3' -dqmax281 max '-10' '3' -> '3' -dqmax282 max '1.0' '1' -> '1' -dqmax283 max '1' '1.0' -> '1' -dqmax284 max '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -dqmax401 max Inf 1.1 -> Infinity -dqmax402 max 1.1 1 -> 1.1 -dqmax403 max 1 1.0 -> 1 -dqmax404 max 1.0 0.1 -> 1.0 -dqmax405 max 0.1 0.10 -> 0.1 -dqmax406 max 0.10 0.100 -> 0.10 -dqmax407 max 0.10 0 -> 0.10 -dqmax408 max 0 0.0 -> 0 -dqmax409 max 0.0 -0 -> 0.0 -dqmax410 max 0.0 -0.0 -> 0.0 -dqmax411 max 0.00 -0.0 -> 0.00 -dqmax412 max 0.0 -0.00 -> 0.0 -dqmax413 max 0 -0.0 -> 0 -dqmax414 max 0 -0 -> 0 -dqmax415 max -0.0 -0 -> -0.0 -dqmax416 max -0 -0.100 -> -0 -dqmax417 max -0.100 -0.10 -> -0.100 -dqmax418 max -0.10 -0.1 -> -0.10 -dqmax419 max -0.1 -1.0 -> -0.1 -dqmax420 max -1.0 -1 -> -1.0 -dqmax421 max -1 -1.1 -> -1 -dqmax423 max -1.1 -Inf -> -1.1 --- same with operands reversed -dqmax431 max 1.1 Inf -> Infinity -dqmax432 max 1 1.1 -> 1.1 -dqmax433 max 1.0 1 -> 1 -dqmax434 max 0.1 1.0 -> 1.0 -dqmax435 max 0.10 0.1 -> 0.1 -dqmax436 max 0.100 0.10 -> 0.10 -dqmax437 max 0 0.10 -> 0.10 -dqmax438 max 0.0 0 -> 0 -dqmax439 max -0 0.0 -> 0.0 -dqmax440 max -0.0 0.0 -> 0.0 -dqmax441 max -0.0 0.00 -> 0.00 -dqmax442 max -0.00 0.0 -> 0.0 -dqmax443 max -0.0 0 -> 0 -dqmax444 max -0 0 -> 0 -dqmax445 max -0 -0.0 -> -0.0 -dqmax446 max -0.100 -0 -> -0 -dqmax447 max -0.10 -0.100 -> -0.100 -dqmax448 max -0.1 -0.10 -> -0.10 -dqmax449 max -1.0 -0.1 -> -0.1 -dqmax450 max -1 -1.0 -> -1.0 -dqmax451 max -1.1 -1 -> -1 -dqmax453 max -Inf -1.1 -> -1.1 --- largies -dqmax460 max 1000 1E+3 -> 1E+3 -dqmax461 max 1E+3 1000 -> 1E+3 -dqmax462 max 1000 -1E+3 -> 1000 -dqmax463 max 1E+3 -1000 -> 1E+3 -dqmax464 max -1000 1E+3 -> 1E+3 -dqmax465 max -1E+3 1000 -> 1000 -dqmax466 max -1000 -1E+3 -> -1000 -dqmax467 max -1E+3 -1000 -> -1000 - --- misalignment traps for little-endian -dqmax471 max 1.0 0.1 -> 1.0 -dqmax472 max 0.1 1.0 -> 1.0 -dqmax473 max 10.0 0.1 -> 10.0 -dqmax474 max 0.1 10.0 -> 10.0 -dqmax475 max 100 1.0 -> 100 -dqmax476 max 1.0 100 -> 100 -dqmax477 max 1000 10.0 -> 1000 -dqmax478 max 10.0 1000 -> 1000 -dqmax479 max 10000 100.0 -> 10000 -dqmax480 max 100.0 10000 -> 10000 -dqmax481 max 100000 1000.0 -> 100000 -dqmax482 max 1000.0 100000 -> 100000 -dqmax483 max 1000000 10000.0 -> 1000000 -dqmax484 max 10000.0 1000000 -> 1000000 - --- subnormals -dqmax510 max 1.00E-6143 0 -> 1.00E-6143 -dqmax511 max 0.1E-6143 0 -> 1E-6144 Subnormal -dqmax512 max 0.10E-6143 0 -> 1.0E-6144 Subnormal -dqmax513 max 0.100E-6143 0 -> 1.00E-6144 Subnormal -dqmax514 max 0.01E-6143 0 -> 1E-6145 Subnormal -dqmax515 max 0.999E-6143 0 -> 9.99E-6144 Subnormal -dqmax516 max 0.099E-6143 0 -> 9.9E-6145 Subnormal -dqmax517 max 0.009E-6143 0 -> 9E-6146 Subnormal -dqmax518 max 0.001E-6143 0 -> 1E-6146 Subnormal -dqmax519 max 0.0009E-6143 0 -> 9E-6147 Subnormal -dqmax520 max 0.0001E-6143 0 -> 1E-6147 Subnormal - -dqmax530 max -1.00E-6143 0 -> 0 -dqmax531 max -0.1E-6143 0 -> 0 -dqmax532 max -0.10E-6143 0 -> 0 -dqmax533 max -0.100E-6143 0 -> 0 -dqmax534 max -0.01E-6143 0 -> 0 -dqmax535 max -0.999E-6143 0 -> 0 -dqmax536 max -0.099E-6143 0 -> 0 -dqmax537 max -0.009E-6143 0 -> 0 -dqmax538 max -0.001E-6143 0 -> 0 -dqmax539 max -0.0009E-6143 0 -> 0 -dqmax540 max -0.0001E-6143 0 -> 0 - --- Null tests -dqmax900 max 10 # -> NaN Invalid_operation -dqmax901 max # 10 -> NaN Invalid_operation - - - +------------------------------------------------------------------------ +-- dqMax.decTest -- decQuad maxnum -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmax001 max -2 -2 -> -2 +dqmax002 max -2 -1 -> -1 +dqmax003 max -2 0 -> 0 +dqmax004 max -2 1 -> 1 +dqmax005 max -2 2 -> 2 +dqmax006 max -1 -2 -> -1 +dqmax007 max -1 -1 -> -1 +dqmax008 max -1 0 -> 0 +dqmax009 max -1 1 -> 1 +dqmax010 max -1 2 -> 2 +dqmax011 max 0 -2 -> 0 +dqmax012 max 0 -1 -> 0 +dqmax013 max 0 0 -> 0 +dqmax014 max 0 1 -> 1 +dqmax015 max 0 2 -> 2 +dqmax016 max 1 -2 -> 1 +dqmax017 max 1 -1 -> 1 +dqmax018 max 1 0 -> 1 +dqmax019 max 1 1 -> 1 +dqmax020 max 1 2 -> 2 +dqmax021 max 2 -2 -> 2 +dqmax022 max 2 -1 -> 2 +dqmax023 max 2 0 -> 2 +dqmax025 max 2 1 -> 2 +dqmax026 max 2 2 -> 2 + +-- extended zeros +dqmax030 max 0 0 -> 0 +dqmax031 max 0 -0 -> 0 +dqmax032 max 0 -0.0 -> 0 +dqmax033 max 0 0.0 -> 0 +dqmax034 max -0 0 -> 0 -- note: -0 = 0, but 0 chosen +dqmax035 max -0 -0 -> -0 +dqmax036 max -0 -0.0 -> -0.0 +dqmax037 max -0 0.0 -> 0.0 +dqmax038 max 0.0 0 -> 0 +dqmax039 max 0.0 -0 -> 0.0 +dqmax040 max 0.0 -0.0 -> 0.0 +dqmax041 max 0.0 0.0 -> 0.0 +dqmax042 max -0.0 0 -> 0 +dqmax043 max -0.0 -0 -> -0.0 +dqmax044 max -0.0 -0.0 -> -0.0 +dqmax045 max -0.0 0.0 -> 0.0 + +dqmax050 max -0E1 0E1 -> 0E+1 +dqmax051 max -0E2 0E2 -> 0E+2 +dqmax052 max -0E2 0E1 -> 0E+1 +dqmax053 max -0E1 0E2 -> 0E+2 +dqmax054 max 0E1 -0E1 -> 0E+1 +dqmax055 max 0E2 -0E2 -> 0E+2 +dqmax056 max 0E2 -0E1 -> 0E+2 +dqmax057 max 0E1 -0E2 -> 0E+1 + +dqmax058 max 0E1 0E1 -> 0E+1 +dqmax059 max 0E2 0E2 -> 0E+2 +dqmax060 max 0E2 0E1 -> 0E+2 +dqmax061 max 0E1 0E2 -> 0E+2 +dqmax062 max -0E1 -0E1 -> -0E+1 +dqmax063 max -0E2 -0E2 -> -0E+2 +dqmax064 max -0E2 -0E1 -> -0E+1 +dqmax065 max -0E1 -0E2 -> -0E+1 + +-- Specials +dqmax090 max Inf -Inf -> Infinity +dqmax091 max Inf -1000 -> Infinity +dqmax092 max Inf -1 -> Infinity +dqmax093 max Inf -0 -> Infinity +dqmax094 max Inf 0 -> Infinity +dqmax095 max Inf 1 -> Infinity +dqmax096 max Inf 1000 -> Infinity +dqmax097 max Inf Inf -> Infinity +dqmax098 max -1000 Inf -> Infinity +dqmax099 max -Inf Inf -> Infinity +dqmax100 max -1 Inf -> Infinity +dqmax101 max -0 Inf -> Infinity +dqmax102 max 0 Inf -> Infinity +dqmax103 max 1 Inf -> Infinity +dqmax104 max 1000 Inf -> Infinity +dqmax105 max Inf Inf -> Infinity + +dqmax120 max -Inf -Inf -> -Infinity +dqmax121 max -Inf -1000 -> -1000 +dqmax122 max -Inf -1 -> -1 +dqmax123 max -Inf -0 -> -0 +dqmax124 max -Inf 0 -> 0 +dqmax125 max -Inf 1 -> 1 +dqmax126 max -Inf 1000 -> 1000 +dqmax127 max -Inf Inf -> Infinity +dqmax128 max -Inf -Inf -> -Infinity +dqmax129 max -1000 -Inf -> -1000 +dqmax130 max -1 -Inf -> -1 +dqmax131 max -0 -Inf -> -0 +dqmax132 max 0 -Inf -> 0 +dqmax133 max 1 -Inf -> 1 +dqmax134 max 1000 -Inf -> 1000 +dqmax135 max Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +dqmax141 max NaN -Inf -> -Infinity +dqmax142 max NaN -1000 -> -1000 +dqmax143 max NaN -1 -> -1 +dqmax144 max NaN -0 -> -0 +dqmax145 max NaN 0 -> 0 +dqmax146 max NaN 1 -> 1 +dqmax147 max NaN 1000 -> 1000 +dqmax148 max NaN Inf -> Infinity +dqmax149 max NaN NaN -> NaN +dqmax150 max -Inf NaN -> -Infinity +dqmax151 max -1000 NaN -> -1000 +dqmax152 max -1 NaN -> -1 +dqmax153 max -0 NaN -> -0 +dqmax154 max 0 NaN -> 0 +dqmax155 max 1 NaN -> 1 +dqmax156 max 1000 NaN -> 1000 +dqmax157 max Inf NaN -> Infinity + +dqmax161 max sNaN -Inf -> NaN Invalid_operation +dqmax162 max sNaN -1000 -> NaN Invalid_operation +dqmax163 max sNaN -1 -> NaN Invalid_operation +dqmax164 max sNaN -0 -> NaN Invalid_operation +dqmax165 max sNaN 0 -> NaN Invalid_operation +dqmax166 max sNaN 1 -> NaN Invalid_operation +dqmax167 max sNaN 1000 -> NaN Invalid_operation +dqmax168 max sNaN NaN -> NaN Invalid_operation +dqmax169 max sNaN sNaN -> NaN Invalid_operation +dqmax170 max NaN sNaN -> NaN Invalid_operation +dqmax171 max -Inf sNaN -> NaN Invalid_operation +dqmax172 max -1000 sNaN -> NaN Invalid_operation +dqmax173 max -1 sNaN -> NaN Invalid_operation +dqmax174 max -0 sNaN -> NaN Invalid_operation +dqmax175 max 0 sNaN -> NaN Invalid_operation +dqmax176 max 1 sNaN -> NaN Invalid_operation +dqmax177 max 1000 sNaN -> NaN Invalid_operation +dqmax178 max Inf sNaN -> NaN Invalid_operation +dqmax179 max NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmax181 max NaN9 -Inf -> -Infinity +dqmax182 max NaN8 9 -> 9 +dqmax183 max -NaN7 Inf -> Infinity + +dqmax184 max -NaN1 NaN11 -> -NaN1 +dqmax185 max NaN2 NaN12 -> NaN2 +dqmax186 max -NaN13 -NaN7 -> -NaN13 +dqmax187 max NaN14 -NaN5 -> NaN14 + +dqmax188 max -Inf NaN4 -> -Infinity +dqmax189 max -9 -NaN3 -> -9 +dqmax190 max Inf NaN2 -> Infinity + +dqmax191 max sNaN99 -Inf -> NaN99 Invalid_operation +dqmax192 max sNaN98 -1 -> NaN98 Invalid_operation +dqmax193 max -sNaN97 NaN -> -NaN97 Invalid_operation +dqmax194 max sNaN96 sNaN94 -> NaN96 Invalid_operation +dqmax195 max NaN95 sNaN93 -> NaN93 Invalid_operation +dqmax196 max -Inf sNaN92 -> NaN92 Invalid_operation +dqmax197 max 0 sNaN91 -> NaN91 Invalid_operation +dqmax198 max Inf -sNaN90 -> -NaN90 Invalid_operation +dqmax199 max NaN sNaN89 -> NaN89 Invalid_operation + +-- old rounding checks +dqmax221 max 12345678000 1 -> 12345678000 +dqmax222 max 1 12345678000 -> 12345678000 +dqmax223 max 1234567800 1 -> 1234567800 +dqmax224 max 1 1234567800 -> 1234567800 +dqmax225 max 1234567890 1 -> 1234567890 +dqmax226 max 1 1234567890 -> 1234567890 +dqmax227 max 1234567891 1 -> 1234567891 +dqmax228 max 1 1234567891 -> 1234567891 +dqmax229 max 12345678901 1 -> 12345678901 +dqmax230 max 1 12345678901 -> 12345678901 +dqmax231 max 1234567896 1 -> 1234567896 +dqmax232 max 1 1234567896 -> 1234567896 +dqmax233 max -1234567891 1 -> 1 +dqmax234 max 1 -1234567891 -> 1 +dqmax235 max -12345678901 1 -> 1 +dqmax236 max 1 -12345678901 -> 1 +dqmax237 max -1234567896 1 -> 1 +dqmax238 max 1 -1234567896 -> 1 + +-- from examples +dqmax280 max '3' '2' -> '3' +dqmax281 max '-10' '3' -> '3' +dqmax282 max '1.0' '1' -> '1' +dqmax283 max '1' '1.0' -> '1' +dqmax284 max '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +dqmax401 max Inf 1.1 -> Infinity +dqmax402 max 1.1 1 -> 1.1 +dqmax403 max 1 1.0 -> 1 +dqmax404 max 1.0 0.1 -> 1.0 +dqmax405 max 0.1 0.10 -> 0.1 +dqmax406 max 0.10 0.100 -> 0.10 +dqmax407 max 0.10 0 -> 0.10 +dqmax408 max 0 0.0 -> 0 +dqmax409 max 0.0 -0 -> 0.0 +dqmax410 max 0.0 -0.0 -> 0.0 +dqmax411 max 0.00 -0.0 -> 0.00 +dqmax412 max 0.0 -0.00 -> 0.0 +dqmax413 max 0 -0.0 -> 0 +dqmax414 max 0 -0 -> 0 +dqmax415 max -0.0 -0 -> -0.0 +dqmax416 max -0 -0.100 -> -0 +dqmax417 max -0.100 -0.10 -> -0.100 +dqmax418 max -0.10 -0.1 -> -0.10 +dqmax419 max -0.1 -1.0 -> -0.1 +dqmax420 max -1.0 -1 -> -1.0 +dqmax421 max -1 -1.1 -> -1 +dqmax423 max -1.1 -Inf -> -1.1 +-- same with operands reversed +dqmax431 max 1.1 Inf -> Infinity +dqmax432 max 1 1.1 -> 1.1 +dqmax433 max 1.0 1 -> 1 +dqmax434 max 0.1 1.0 -> 1.0 +dqmax435 max 0.10 0.1 -> 0.1 +dqmax436 max 0.100 0.10 -> 0.10 +dqmax437 max 0 0.10 -> 0.10 +dqmax438 max 0.0 0 -> 0 +dqmax439 max -0 0.0 -> 0.0 +dqmax440 max -0.0 0.0 -> 0.0 +dqmax441 max -0.0 0.00 -> 0.00 +dqmax442 max -0.00 0.0 -> 0.0 +dqmax443 max -0.0 0 -> 0 +dqmax444 max -0 0 -> 0 +dqmax445 max -0 -0.0 -> -0.0 +dqmax446 max -0.100 -0 -> -0 +dqmax447 max -0.10 -0.100 -> -0.100 +dqmax448 max -0.1 -0.10 -> -0.10 +dqmax449 max -1.0 -0.1 -> -0.1 +dqmax450 max -1 -1.0 -> -1.0 +dqmax451 max -1.1 -1 -> -1 +dqmax453 max -Inf -1.1 -> -1.1 +-- largies +dqmax460 max 1000 1E+3 -> 1E+3 +dqmax461 max 1E+3 1000 -> 1E+3 +dqmax462 max 1000 -1E+3 -> 1000 +dqmax463 max 1E+3 -1000 -> 1E+3 +dqmax464 max -1000 1E+3 -> 1E+3 +dqmax465 max -1E+3 1000 -> 1000 +dqmax466 max -1000 -1E+3 -> -1000 +dqmax467 max -1E+3 -1000 -> -1000 + +-- misalignment traps for little-endian +dqmax471 max 1.0 0.1 -> 1.0 +dqmax472 max 0.1 1.0 -> 1.0 +dqmax473 max 10.0 0.1 -> 10.0 +dqmax474 max 0.1 10.0 -> 10.0 +dqmax475 max 100 1.0 -> 100 +dqmax476 max 1.0 100 -> 100 +dqmax477 max 1000 10.0 -> 1000 +dqmax478 max 10.0 1000 -> 1000 +dqmax479 max 10000 100.0 -> 10000 +dqmax480 max 100.0 10000 -> 10000 +dqmax481 max 100000 1000.0 -> 100000 +dqmax482 max 1000.0 100000 -> 100000 +dqmax483 max 1000000 10000.0 -> 1000000 +dqmax484 max 10000.0 1000000 -> 1000000 + +-- subnormals +dqmax510 max 1.00E-6143 0 -> 1.00E-6143 +dqmax511 max 0.1E-6143 0 -> 1E-6144 Subnormal +dqmax512 max 0.10E-6143 0 -> 1.0E-6144 Subnormal +dqmax513 max 0.100E-6143 0 -> 1.00E-6144 Subnormal +dqmax514 max 0.01E-6143 0 -> 1E-6145 Subnormal +dqmax515 max 0.999E-6143 0 -> 9.99E-6144 Subnormal +dqmax516 max 0.099E-6143 0 -> 9.9E-6145 Subnormal +dqmax517 max 0.009E-6143 0 -> 9E-6146 Subnormal +dqmax518 max 0.001E-6143 0 -> 1E-6146 Subnormal +dqmax519 max 0.0009E-6143 0 -> 9E-6147 Subnormal +dqmax520 max 0.0001E-6143 0 -> 1E-6147 Subnormal + +dqmax530 max -1.00E-6143 0 -> 0 +dqmax531 max -0.1E-6143 0 -> 0 +dqmax532 max -0.10E-6143 0 -> 0 +dqmax533 max -0.100E-6143 0 -> 0 +dqmax534 max -0.01E-6143 0 -> 0 +dqmax535 max -0.999E-6143 0 -> 0 +dqmax536 max -0.099E-6143 0 -> 0 +dqmax537 max -0.009E-6143 0 -> 0 +dqmax538 max -0.001E-6143 0 -> 0 +dqmax539 max -0.0009E-6143 0 -> 0 +dqmax540 max -0.0001E-6143 0 -> 0 + +-- Null tests +dqmax900 max 10 # -> NaN Invalid_operation +dqmax901 max # 10 -> NaN Invalid_operation + + + diff --git a/Lib/test/decimaltestdata/dqMaxMag.decTest b/Lib/test/decimaltestdata/dqMaxMag.decTest index 6f5be246097..6621e80d92b 100644 --- a/Lib/test/decimaltestdata/dqMaxMag.decTest +++ b/Lib/test/decimaltestdata/dqMaxMag.decTest @@ -1,304 +1,304 @@ ------------------------------------------------------------------------- --- dqMaxMag.decTest -- decQuad maxnummag -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmxg001 maxmag -2 -2 -> -2 -dqmxg002 maxmag -2 -1 -> -2 -dqmxg003 maxmag -2 0 -> -2 -dqmxg004 maxmag -2 1 -> -2 -dqmxg005 maxmag -2 2 -> 2 -dqmxg006 maxmag -1 -2 -> -2 -dqmxg007 maxmag -1 -1 -> -1 -dqmxg008 maxmag -1 0 -> -1 -dqmxg009 maxmag -1 1 -> 1 -dqmxg010 maxmag -1 2 -> 2 -dqmxg011 maxmag 0 -2 -> -2 -dqmxg012 maxmag 0 -1 -> -1 -dqmxg013 maxmag 0 0 -> 0 -dqmxg014 maxmag 0 1 -> 1 -dqmxg015 maxmag 0 2 -> 2 -dqmxg016 maxmag 1 -2 -> -2 -dqmxg017 maxmag 1 -1 -> 1 -dqmxg018 maxmag 1 0 -> 1 -dqmxg019 maxmag 1 1 -> 1 -dqmxg020 maxmag 1 2 -> 2 -dqmxg021 maxmag 2 -2 -> 2 -dqmxg022 maxmag 2 -1 -> 2 -dqmxg023 maxmag 2 0 -> 2 -dqmxg025 maxmag 2 1 -> 2 -dqmxg026 maxmag 2 2 -> 2 - --- extended zeros -dqmxg030 maxmag 0 0 -> 0 -dqmxg031 maxmag 0 -0 -> 0 -dqmxg032 maxmag 0 -0.0 -> 0 -dqmxg033 maxmag 0 0.0 -> 0 -dqmxg034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen -dqmxg035 maxmag -0 -0 -> -0 -dqmxg036 maxmag -0 -0.0 -> -0.0 -dqmxg037 maxmag -0 0.0 -> 0.0 -dqmxg038 maxmag 0.0 0 -> 0 -dqmxg039 maxmag 0.0 -0 -> 0.0 -dqmxg040 maxmag 0.0 -0.0 -> 0.0 -dqmxg041 maxmag 0.0 0.0 -> 0.0 -dqmxg042 maxmag -0.0 0 -> 0 -dqmxg043 maxmag -0.0 -0 -> -0.0 -dqmxg044 maxmag -0.0 -0.0 -> -0.0 -dqmxg045 maxmag -0.0 0.0 -> 0.0 - -dqmxg050 maxmag -0E1 0E1 -> 0E+1 -dqmxg051 maxmag -0E2 0E2 -> 0E+2 -dqmxg052 maxmag -0E2 0E1 -> 0E+1 -dqmxg053 maxmag -0E1 0E2 -> 0E+2 -dqmxg054 maxmag 0E1 -0E1 -> 0E+1 -dqmxg055 maxmag 0E2 -0E2 -> 0E+2 -dqmxg056 maxmag 0E2 -0E1 -> 0E+2 -dqmxg057 maxmag 0E1 -0E2 -> 0E+1 - -dqmxg058 maxmag 0E1 0E1 -> 0E+1 -dqmxg059 maxmag 0E2 0E2 -> 0E+2 -dqmxg060 maxmag 0E2 0E1 -> 0E+2 -dqmxg061 maxmag 0E1 0E2 -> 0E+2 -dqmxg062 maxmag -0E1 -0E1 -> -0E+1 -dqmxg063 maxmag -0E2 -0E2 -> -0E+2 -dqmxg064 maxmag -0E2 -0E1 -> -0E+1 -dqmxg065 maxmag -0E1 -0E2 -> -0E+1 - --- Specials -dqmxg090 maxmag Inf -Inf -> Infinity -dqmxg091 maxmag Inf -1000 -> Infinity -dqmxg092 maxmag Inf -1 -> Infinity -dqmxg093 maxmag Inf -0 -> Infinity -dqmxg094 maxmag Inf 0 -> Infinity -dqmxg095 maxmag Inf 1 -> Infinity -dqmxg096 maxmag Inf 1000 -> Infinity -dqmxg097 maxmag Inf Inf -> Infinity -dqmxg098 maxmag -1000 Inf -> Infinity -dqmxg099 maxmag -Inf Inf -> Infinity -dqmxg100 maxmag -1 Inf -> Infinity -dqmxg101 maxmag -0 Inf -> Infinity -dqmxg102 maxmag 0 Inf -> Infinity -dqmxg103 maxmag 1 Inf -> Infinity -dqmxg104 maxmag 1000 Inf -> Infinity -dqmxg105 maxmag Inf Inf -> Infinity - -dqmxg120 maxmag -Inf -Inf -> -Infinity -dqmxg121 maxmag -Inf -1000 -> -Infinity -dqmxg122 maxmag -Inf -1 -> -Infinity -dqmxg123 maxmag -Inf -0 -> -Infinity -dqmxg124 maxmag -Inf 0 -> -Infinity -dqmxg125 maxmag -Inf 1 -> -Infinity -dqmxg126 maxmag -Inf 1000 -> -Infinity -dqmxg127 maxmag -Inf Inf -> Infinity -dqmxg128 maxmag -Inf -Inf -> -Infinity -dqmxg129 maxmag -1000 -Inf -> -Infinity -dqmxg130 maxmag -1 -Inf -> -Infinity -dqmxg131 maxmag -0 -Inf -> -Infinity -dqmxg132 maxmag 0 -Inf -> -Infinity -dqmxg133 maxmag 1 -Inf -> -Infinity -dqmxg134 maxmag 1000 -Inf -> -Infinity -dqmxg135 maxmag Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -dqmxg141 maxmag NaN -Inf -> -Infinity -dqmxg142 maxmag NaN -1000 -> -1000 -dqmxg143 maxmag NaN -1 -> -1 -dqmxg144 maxmag NaN -0 -> -0 -dqmxg145 maxmag NaN 0 -> 0 -dqmxg146 maxmag NaN 1 -> 1 -dqmxg147 maxmag NaN 1000 -> 1000 -dqmxg148 maxmag NaN Inf -> Infinity -dqmxg149 maxmag NaN NaN -> NaN -dqmxg150 maxmag -Inf NaN -> -Infinity -dqmxg151 maxmag -1000 NaN -> -1000 -dqmxg152 maxmag -1 NaN -> -1 -dqmxg153 maxmag -0 NaN -> -0 -dqmxg154 maxmag 0 NaN -> 0 -dqmxg155 maxmag 1 NaN -> 1 -dqmxg156 maxmag 1000 NaN -> 1000 -dqmxg157 maxmag Inf NaN -> Infinity - -dqmxg161 maxmag sNaN -Inf -> NaN Invalid_operation -dqmxg162 maxmag sNaN -1000 -> NaN Invalid_operation -dqmxg163 maxmag sNaN -1 -> NaN Invalid_operation -dqmxg164 maxmag sNaN -0 -> NaN Invalid_operation -dqmxg165 maxmag sNaN 0 -> NaN Invalid_operation -dqmxg166 maxmag sNaN 1 -> NaN Invalid_operation -dqmxg167 maxmag sNaN 1000 -> NaN Invalid_operation -dqmxg168 maxmag sNaN NaN -> NaN Invalid_operation -dqmxg169 maxmag sNaN sNaN -> NaN Invalid_operation -dqmxg170 maxmag NaN sNaN -> NaN Invalid_operation -dqmxg171 maxmag -Inf sNaN -> NaN Invalid_operation -dqmxg172 maxmag -1000 sNaN -> NaN Invalid_operation -dqmxg173 maxmag -1 sNaN -> NaN Invalid_operation -dqmxg174 maxmag -0 sNaN -> NaN Invalid_operation -dqmxg175 maxmag 0 sNaN -> NaN Invalid_operation -dqmxg176 maxmag 1 sNaN -> NaN Invalid_operation -dqmxg177 maxmag 1000 sNaN -> NaN Invalid_operation -dqmxg178 maxmag Inf sNaN -> NaN Invalid_operation -dqmxg179 maxmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmxg181 maxmag NaN9 -Inf -> -Infinity -dqmxg182 maxmag NaN8 9 -> 9 -dqmxg183 maxmag -NaN7 Inf -> Infinity - -dqmxg184 maxmag -NaN1 NaN11 -> -NaN1 -dqmxg185 maxmag NaN2 NaN12 -> NaN2 -dqmxg186 maxmag -NaN13 -NaN7 -> -NaN13 -dqmxg187 maxmag NaN14 -NaN5 -> NaN14 - -dqmxg188 maxmag -Inf NaN4 -> -Infinity -dqmxg189 maxmag -9 -NaN3 -> -9 -dqmxg190 maxmag Inf NaN2 -> Infinity - -dqmxg191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation -dqmxg192 maxmag sNaN98 -1 -> NaN98 Invalid_operation -dqmxg193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation -dqmxg194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation -dqmxg195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation -dqmxg196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation -dqmxg197 maxmag 0 sNaN91 -> NaN91 Invalid_operation -dqmxg198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation -dqmxg199 maxmag NaN sNaN89 -> NaN89 Invalid_operation - --- old rounding checks -dqmxg221 maxmag 12345678000 1 -> 12345678000 -dqmxg222 maxmag 1 12345678000 -> 12345678000 -dqmxg223 maxmag 1234567800 1 -> 1234567800 -dqmxg224 maxmag 1 1234567800 -> 1234567800 -dqmxg225 maxmag 1234567890 1 -> 1234567890 -dqmxg226 maxmag 1 1234567890 -> 1234567890 -dqmxg227 maxmag 1234567891 1 -> 1234567891 -dqmxg228 maxmag 1 1234567891 -> 1234567891 -dqmxg229 maxmag 12345678901 1 -> 12345678901 -dqmxg230 maxmag 1 12345678901 -> 12345678901 -dqmxg231 maxmag 1234567896 1 -> 1234567896 -dqmxg232 maxmag 1 1234567896 -> 1234567896 -dqmxg233 maxmag -1234567891 1 -> -1234567891 -dqmxg234 maxmag 1 -1234567891 -> -1234567891 -dqmxg235 maxmag -12345678901 1 -> -12345678901 -dqmxg236 maxmag 1 -12345678901 -> -12345678901 -dqmxg237 maxmag -1234567896 1 -> -1234567896 -dqmxg238 maxmag 1 -1234567896 -> -1234567896 - --- from examples -dqmxg280 maxmag '3' '2' -> '3' -dqmxg281 maxmag '-10' '3' -> '-10' -dqmxg282 maxmag '1.0' '1' -> '1' -dqmxg283 maxmag '1' '1.0' -> '1' -dqmxg284 maxmag '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -dqmxg401 maxmag Inf 1.1 -> Infinity -dqmxg402 maxmag 1.1 1 -> 1.1 -dqmxg403 maxmag 1 1.0 -> 1 -dqmxg404 maxmag 1.0 0.1 -> 1.0 -dqmxg405 maxmag 0.1 0.10 -> 0.1 -dqmxg406 maxmag 0.10 0.100 -> 0.10 -dqmxg407 maxmag 0.10 0 -> 0.10 -dqmxg408 maxmag 0 0.0 -> 0 -dqmxg409 maxmag 0.0 -0 -> 0.0 -dqmxg410 maxmag 0.0 -0.0 -> 0.0 -dqmxg411 maxmag 0.00 -0.0 -> 0.00 -dqmxg412 maxmag 0.0 -0.00 -> 0.0 -dqmxg413 maxmag 0 -0.0 -> 0 -dqmxg414 maxmag 0 -0 -> 0 -dqmxg415 maxmag -0.0 -0 -> -0.0 -dqmxg416 maxmag -0 -0.100 -> -0.100 -dqmxg417 maxmag -0.100 -0.10 -> -0.100 -dqmxg418 maxmag -0.10 -0.1 -> -0.10 -dqmxg419 maxmag -0.1 -1.0 -> -1.0 -dqmxg420 maxmag -1.0 -1 -> -1.0 -dqmxg421 maxmag -1 -1.1 -> -1.1 -dqmxg423 maxmag -1.1 -Inf -> -Infinity --- same with operands reversed -dqmxg431 maxmag 1.1 Inf -> Infinity -dqmxg432 maxmag 1 1.1 -> 1.1 -dqmxg433 maxmag 1.0 1 -> 1 -dqmxg434 maxmag 0.1 1.0 -> 1.0 -dqmxg435 maxmag 0.10 0.1 -> 0.1 -dqmxg436 maxmag 0.100 0.10 -> 0.10 -dqmxg437 maxmag 0 0.10 -> 0.10 -dqmxg438 maxmag 0.0 0 -> 0 -dqmxg439 maxmag -0 0.0 -> 0.0 -dqmxg440 maxmag -0.0 0.0 -> 0.0 -dqmxg441 maxmag -0.0 0.00 -> 0.00 -dqmxg442 maxmag -0.00 0.0 -> 0.0 -dqmxg443 maxmag -0.0 0 -> 0 -dqmxg444 maxmag -0 0 -> 0 -dqmxg445 maxmag -0 -0.0 -> -0.0 -dqmxg446 maxmag -0.100 -0 -> -0.100 -dqmxg447 maxmag -0.10 -0.100 -> -0.100 -dqmxg448 maxmag -0.1 -0.10 -> -0.10 -dqmxg449 maxmag -1.0 -0.1 -> -1.0 -dqmxg450 maxmag -1 -1.0 -> -1.0 -dqmxg451 maxmag -1.1 -1 -> -1.1 -dqmxg453 maxmag -Inf -1.1 -> -Infinity --- largies -dqmxg460 maxmag 1000 1E+3 -> 1E+3 -dqmxg461 maxmag 1E+3 1000 -> 1E+3 -dqmxg462 maxmag 1000 -1E+3 -> 1000 -dqmxg463 maxmag 1E+3 -1000 -> 1E+3 -dqmxg464 maxmag -1000 1E+3 -> 1E+3 -dqmxg465 maxmag -1E+3 1000 -> 1000 -dqmxg466 maxmag -1000 -1E+3 -> -1000 -dqmxg467 maxmag -1E+3 -1000 -> -1000 - --- subnormals -dqmxg510 maxmag 1.00E-6143 0 -> 1.00E-6143 -dqmxg511 maxmag 0.1E-6143 0 -> 1E-6144 Subnormal -dqmxg512 maxmag 0.10E-6143 0 -> 1.0E-6144 Subnormal -dqmxg513 maxmag 0.100E-6143 0 -> 1.00E-6144 Subnormal -dqmxg514 maxmag 0.01E-6143 0 -> 1E-6145 Subnormal -dqmxg515 maxmag 0.999E-6143 0 -> 9.99E-6144 Subnormal -dqmxg516 maxmag 0.099E-6143 0 -> 9.9E-6145 Subnormal -dqmxg517 maxmag 0.009E-6143 0 -> 9E-6146 Subnormal -dqmxg518 maxmag 0.001E-6143 0 -> 1E-6146 Subnormal -dqmxg519 maxmag 0.0009E-6143 0 -> 9E-6147 Subnormal -dqmxg520 maxmag 0.0001E-6143 0 -> 1E-6147 Subnormal - -dqmxg530 maxmag -1.00E-6143 0 -> -1.00E-6143 -dqmxg531 maxmag -0.1E-6143 0 -> -1E-6144 Subnormal -dqmxg532 maxmag -0.10E-6143 0 -> -1.0E-6144 Subnormal -dqmxg533 maxmag -0.100E-6143 0 -> -1.00E-6144 Subnormal -dqmxg534 maxmag -0.01E-6143 0 -> -1E-6145 Subnormal -dqmxg535 maxmag -0.999E-6143 0 -> -9.99E-6144 Subnormal -dqmxg536 maxmag -0.099E-6143 0 -> -9.9E-6145 Subnormal -dqmxg537 maxmag -0.009E-6143 0 -> -9E-6146 Subnormal -dqmxg538 maxmag -0.001E-6143 0 -> -1E-6146 Subnormal -dqmxg539 maxmag -0.0009E-6143 0 -> -9E-6147 Subnormal -dqmxg540 maxmag -0.0001E-6143 0 -> -1E-6147 Subnormal - --- Null tests -dqmxg900 maxmag 10 # -> NaN Invalid_operation -dqmxg901 maxmag # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqMaxMag.decTest -- decQuad maxnummag -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmxg001 maxmag -2 -2 -> -2 +dqmxg002 maxmag -2 -1 -> -2 +dqmxg003 maxmag -2 0 -> -2 +dqmxg004 maxmag -2 1 -> -2 +dqmxg005 maxmag -2 2 -> 2 +dqmxg006 maxmag -1 -2 -> -2 +dqmxg007 maxmag -1 -1 -> -1 +dqmxg008 maxmag -1 0 -> -1 +dqmxg009 maxmag -1 1 -> 1 +dqmxg010 maxmag -1 2 -> 2 +dqmxg011 maxmag 0 -2 -> -2 +dqmxg012 maxmag 0 -1 -> -1 +dqmxg013 maxmag 0 0 -> 0 +dqmxg014 maxmag 0 1 -> 1 +dqmxg015 maxmag 0 2 -> 2 +dqmxg016 maxmag 1 -2 -> -2 +dqmxg017 maxmag 1 -1 -> 1 +dqmxg018 maxmag 1 0 -> 1 +dqmxg019 maxmag 1 1 -> 1 +dqmxg020 maxmag 1 2 -> 2 +dqmxg021 maxmag 2 -2 -> 2 +dqmxg022 maxmag 2 -1 -> 2 +dqmxg023 maxmag 2 0 -> 2 +dqmxg025 maxmag 2 1 -> 2 +dqmxg026 maxmag 2 2 -> 2 + +-- extended zeros +dqmxg030 maxmag 0 0 -> 0 +dqmxg031 maxmag 0 -0 -> 0 +dqmxg032 maxmag 0 -0.0 -> 0 +dqmxg033 maxmag 0 0.0 -> 0 +dqmxg034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen +dqmxg035 maxmag -0 -0 -> -0 +dqmxg036 maxmag -0 -0.0 -> -0.0 +dqmxg037 maxmag -0 0.0 -> 0.0 +dqmxg038 maxmag 0.0 0 -> 0 +dqmxg039 maxmag 0.0 -0 -> 0.0 +dqmxg040 maxmag 0.0 -0.0 -> 0.0 +dqmxg041 maxmag 0.0 0.0 -> 0.0 +dqmxg042 maxmag -0.0 0 -> 0 +dqmxg043 maxmag -0.0 -0 -> -0.0 +dqmxg044 maxmag -0.0 -0.0 -> -0.0 +dqmxg045 maxmag -0.0 0.0 -> 0.0 + +dqmxg050 maxmag -0E1 0E1 -> 0E+1 +dqmxg051 maxmag -0E2 0E2 -> 0E+2 +dqmxg052 maxmag -0E2 0E1 -> 0E+1 +dqmxg053 maxmag -0E1 0E2 -> 0E+2 +dqmxg054 maxmag 0E1 -0E1 -> 0E+1 +dqmxg055 maxmag 0E2 -0E2 -> 0E+2 +dqmxg056 maxmag 0E2 -0E1 -> 0E+2 +dqmxg057 maxmag 0E1 -0E2 -> 0E+1 + +dqmxg058 maxmag 0E1 0E1 -> 0E+1 +dqmxg059 maxmag 0E2 0E2 -> 0E+2 +dqmxg060 maxmag 0E2 0E1 -> 0E+2 +dqmxg061 maxmag 0E1 0E2 -> 0E+2 +dqmxg062 maxmag -0E1 -0E1 -> -0E+1 +dqmxg063 maxmag -0E2 -0E2 -> -0E+2 +dqmxg064 maxmag -0E2 -0E1 -> -0E+1 +dqmxg065 maxmag -0E1 -0E2 -> -0E+1 + +-- Specials +dqmxg090 maxmag Inf -Inf -> Infinity +dqmxg091 maxmag Inf -1000 -> Infinity +dqmxg092 maxmag Inf -1 -> Infinity +dqmxg093 maxmag Inf -0 -> Infinity +dqmxg094 maxmag Inf 0 -> Infinity +dqmxg095 maxmag Inf 1 -> Infinity +dqmxg096 maxmag Inf 1000 -> Infinity +dqmxg097 maxmag Inf Inf -> Infinity +dqmxg098 maxmag -1000 Inf -> Infinity +dqmxg099 maxmag -Inf Inf -> Infinity +dqmxg100 maxmag -1 Inf -> Infinity +dqmxg101 maxmag -0 Inf -> Infinity +dqmxg102 maxmag 0 Inf -> Infinity +dqmxg103 maxmag 1 Inf -> Infinity +dqmxg104 maxmag 1000 Inf -> Infinity +dqmxg105 maxmag Inf Inf -> Infinity + +dqmxg120 maxmag -Inf -Inf -> -Infinity +dqmxg121 maxmag -Inf -1000 -> -Infinity +dqmxg122 maxmag -Inf -1 -> -Infinity +dqmxg123 maxmag -Inf -0 -> -Infinity +dqmxg124 maxmag -Inf 0 -> -Infinity +dqmxg125 maxmag -Inf 1 -> -Infinity +dqmxg126 maxmag -Inf 1000 -> -Infinity +dqmxg127 maxmag -Inf Inf -> Infinity +dqmxg128 maxmag -Inf -Inf -> -Infinity +dqmxg129 maxmag -1000 -Inf -> -Infinity +dqmxg130 maxmag -1 -Inf -> -Infinity +dqmxg131 maxmag -0 -Inf -> -Infinity +dqmxg132 maxmag 0 -Inf -> -Infinity +dqmxg133 maxmag 1 -Inf -> -Infinity +dqmxg134 maxmag 1000 -Inf -> -Infinity +dqmxg135 maxmag Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +dqmxg141 maxmag NaN -Inf -> -Infinity +dqmxg142 maxmag NaN -1000 -> -1000 +dqmxg143 maxmag NaN -1 -> -1 +dqmxg144 maxmag NaN -0 -> -0 +dqmxg145 maxmag NaN 0 -> 0 +dqmxg146 maxmag NaN 1 -> 1 +dqmxg147 maxmag NaN 1000 -> 1000 +dqmxg148 maxmag NaN Inf -> Infinity +dqmxg149 maxmag NaN NaN -> NaN +dqmxg150 maxmag -Inf NaN -> -Infinity +dqmxg151 maxmag -1000 NaN -> -1000 +dqmxg152 maxmag -1 NaN -> -1 +dqmxg153 maxmag -0 NaN -> -0 +dqmxg154 maxmag 0 NaN -> 0 +dqmxg155 maxmag 1 NaN -> 1 +dqmxg156 maxmag 1000 NaN -> 1000 +dqmxg157 maxmag Inf NaN -> Infinity + +dqmxg161 maxmag sNaN -Inf -> NaN Invalid_operation +dqmxg162 maxmag sNaN -1000 -> NaN Invalid_operation +dqmxg163 maxmag sNaN -1 -> NaN Invalid_operation +dqmxg164 maxmag sNaN -0 -> NaN Invalid_operation +dqmxg165 maxmag sNaN 0 -> NaN Invalid_operation +dqmxg166 maxmag sNaN 1 -> NaN Invalid_operation +dqmxg167 maxmag sNaN 1000 -> NaN Invalid_operation +dqmxg168 maxmag sNaN NaN -> NaN Invalid_operation +dqmxg169 maxmag sNaN sNaN -> NaN Invalid_operation +dqmxg170 maxmag NaN sNaN -> NaN Invalid_operation +dqmxg171 maxmag -Inf sNaN -> NaN Invalid_operation +dqmxg172 maxmag -1000 sNaN -> NaN Invalid_operation +dqmxg173 maxmag -1 sNaN -> NaN Invalid_operation +dqmxg174 maxmag -0 sNaN -> NaN Invalid_operation +dqmxg175 maxmag 0 sNaN -> NaN Invalid_operation +dqmxg176 maxmag 1 sNaN -> NaN Invalid_operation +dqmxg177 maxmag 1000 sNaN -> NaN Invalid_operation +dqmxg178 maxmag Inf sNaN -> NaN Invalid_operation +dqmxg179 maxmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmxg181 maxmag NaN9 -Inf -> -Infinity +dqmxg182 maxmag NaN8 9 -> 9 +dqmxg183 maxmag -NaN7 Inf -> Infinity + +dqmxg184 maxmag -NaN1 NaN11 -> -NaN1 +dqmxg185 maxmag NaN2 NaN12 -> NaN2 +dqmxg186 maxmag -NaN13 -NaN7 -> -NaN13 +dqmxg187 maxmag NaN14 -NaN5 -> NaN14 + +dqmxg188 maxmag -Inf NaN4 -> -Infinity +dqmxg189 maxmag -9 -NaN3 -> -9 +dqmxg190 maxmag Inf NaN2 -> Infinity + +dqmxg191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation +dqmxg192 maxmag sNaN98 -1 -> NaN98 Invalid_operation +dqmxg193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation +dqmxg194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation +dqmxg195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation +dqmxg196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation +dqmxg197 maxmag 0 sNaN91 -> NaN91 Invalid_operation +dqmxg198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation +dqmxg199 maxmag NaN sNaN89 -> NaN89 Invalid_operation + +-- old rounding checks +dqmxg221 maxmag 12345678000 1 -> 12345678000 +dqmxg222 maxmag 1 12345678000 -> 12345678000 +dqmxg223 maxmag 1234567800 1 -> 1234567800 +dqmxg224 maxmag 1 1234567800 -> 1234567800 +dqmxg225 maxmag 1234567890 1 -> 1234567890 +dqmxg226 maxmag 1 1234567890 -> 1234567890 +dqmxg227 maxmag 1234567891 1 -> 1234567891 +dqmxg228 maxmag 1 1234567891 -> 1234567891 +dqmxg229 maxmag 12345678901 1 -> 12345678901 +dqmxg230 maxmag 1 12345678901 -> 12345678901 +dqmxg231 maxmag 1234567896 1 -> 1234567896 +dqmxg232 maxmag 1 1234567896 -> 1234567896 +dqmxg233 maxmag -1234567891 1 -> -1234567891 +dqmxg234 maxmag 1 -1234567891 -> -1234567891 +dqmxg235 maxmag -12345678901 1 -> -12345678901 +dqmxg236 maxmag 1 -12345678901 -> -12345678901 +dqmxg237 maxmag -1234567896 1 -> -1234567896 +dqmxg238 maxmag 1 -1234567896 -> -1234567896 + +-- from examples +dqmxg280 maxmag '3' '2' -> '3' +dqmxg281 maxmag '-10' '3' -> '-10' +dqmxg282 maxmag '1.0' '1' -> '1' +dqmxg283 maxmag '1' '1.0' -> '1' +dqmxg284 maxmag '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +dqmxg401 maxmag Inf 1.1 -> Infinity +dqmxg402 maxmag 1.1 1 -> 1.1 +dqmxg403 maxmag 1 1.0 -> 1 +dqmxg404 maxmag 1.0 0.1 -> 1.0 +dqmxg405 maxmag 0.1 0.10 -> 0.1 +dqmxg406 maxmag 0.10 0.100 -> 0.10 +dqmxg407 maxmag 0.10 0 -> 0.10 +dqmxg408 maxmag 0 0.0 -> 0 +dqmxg409 maxmag 0.0 -0 -> 0.0 +dqmxg410 maxmag 0.0 -0.0 -> 0.0 +dqmxg411 maxmag 0.00 -0.0 -> 0.00 +dqmxg412 maxmag 0.0 -0.00 -> 0.0 +dqmxg413 maxmag 0 -0.0 -> 0 +dqmxg414 maxmag 0 -0 -> 0 +dqmxg415 maxmag -0.0 -0 -> -0.0 +dqmxg416 maxmag -0 -0.100 -> -0.100 +dqmxg417 maxmag -0.100 -0.10 -> -0.100 +dqmxg418 maxmag -0.10 -0.1 -> -0.10 +dqmxg419 maxmag -0.1 -1.0 -> -1.0 +dqmxg420 maxmag -1.0 -1 -> -1.0 +dqmxg421 maxmag -1 -1.1 -> -1.1 +dqmxg423 maxmag -1.1 -Inf -> -Infinity +-- same with operands reversed +dqmxg431 maxmag 1.1 Inf -> Infinity +dqmxg432 maxmag 1 1.1 -> 1.1 +dqmxg433 maxmag 1.0 1 -> 1 +dqmxg434 maxmag 0.1 1.0 -> 1.0 +dqmxg435 maxmag 0.10 0.1 -> 0.1 +dqmxg436 maxmag 0.100 0.10 -> 0.10 +dqmxg437 maxmag 0 0.10 -> 0.10 +dqmxg438 maxmag 0.0 0 -> 0 +dqmxg439 maxmag -0 0.0 -> 0.0 +dqmxg440 maxmag -0.0 0.0 -> 0.0 +dqmxg441 maxmag -0.0 0.00 -> 0.00 +dqmxg442 maxmag -0.00 0.0 -> 0.0 +dqmxg443 maxmag -0.0 0 -> 0 +dqmxg444 maxmag -0 0 -> 0 +dqmxg445 maxmag -0 -0.0 -> -0.0 +dqmxg446 maxmag -0.100 -0 -> -0.100 +dqmxg447 maxmag -0.10 -0.100 -> -0.100 +dqmxg448 maxmag -0.1 -0.10 -> -0.10 +dqmxg449 maxmag -1.0 -0.1 -> -1.0 +dqmxg450 maxmag -1 -1.0 -> -1.0 +dqmxg451 maxmag -1.1 -1 -> -1.1 +dqmxg453 maxmag -Inf -1.1 -> -Infinity +-- largies +dqmxg460 maxmag 1000 1E+3 -> 1E+3 +dqmxg461 maxmag 1E+3 1000 -> 1E+3 +dqmxg462 maxmag 1000 -1E+3 -> 1000 +dqmxg463 maxmag 1E+3 -1000 -> 1E+3 +dqmxg464 maxmag -1000 1E+3 -> 1E+3 +dqmxg465 maxmag -1E+3 1000 -> 1000 +dqmxg466 maxmag -1000 -1E+3 -> -1000 +dqmxg467 maxmag -1E+3 -1000 -> -1000 + +-- subnormals +dqmxg510 maxmag 1.00E-6143 0 -> 1.00E-6143 +dqmxg511 maxmag 0.1E-6143 0 -> 1E-6144 Subnormal +dqmxg512 maxmag 0.10E-6143 0 -> 1.0E-6144 Subnormal +dqmxg513 maxmag 0.100E-6143 0 -> 1.00E-6144 Subnormal +dqmxg514 maxmag 0.01E-6143 0 -> 1E-6145 Subnormal +dqmxg515 maxmag 0.999E-6143 0 -> 9.99E-6144 Subnormal +dqmxg516 maxmag 0.099E-6143 0 -> 9.9E-6145 Subnormal +dqmxg517 maxmag 0.009E-6143 0 -> 9E-6146 Subnormal +dqmxg518 maxmag 0.001E-6143 0 -> 1E-6146 Subnormal +dqmxg519 maxmag 0.0009E-6143 0 -> 9E-6147 Subnormal +dqmxg520 maxmag 0.0001E-6143 0 -> 1E-6147 Subnormal + +dqmxg530 maxmag -1.00E-6143 0 -> -1.00E-6143 +dqmxg531 maxmag -0.1E-6143 0 -> -1E-6144 Subnormal +dqmxg532 maxmag -0.10E-6143 0 -> -1.0E-6144 Subnormal +dqmxg533 maxmag -0.100E-6143 0 -> -1.00E-6144 Subnormal +dqmxg534 maxmag -0.01E-6143 0 -> -1E-6145 Subnormal +dqmxg535 maxmag -0.999E-6143 0 -> -9.99E-6144 Subnormal +dqmxg536 maxmag -0.099E-6143 0 -> -9.9E-6145 Subnormal +dqmxg537 maxmag -0.009E-6143 0 -> -9E-6146 Subnormal +dqmxg538 maxmag -0.001E-6143 0 -> -1E-6146 Subnormal +dqmxg539 maxmag -0.0009E-6143 0 -> -9E-6147 Subnormal +dqmxg540 maxmag -0.0001E-6143 0 -> -1E-6147 Subnormal + +-- Null tests +dqmxg900 maxmag 10 # -> NaN Invalid_operation +dqmxg901 maxmag # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqMin.decTest b/Lib/test/decimaltestdata/dqMin.decTest index 53020398c59..c87f4c54edc 100644 --- a/Lib/test/decimaltestdata/dqMin.decTest +++ b/Lib/test/decimaltestdata/dqMin.decTest @@ -1,309 +1,309 @@ ------------------------------------------------------------------------- --- dqMin.decTest -- decQuad minnum -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmin001 min -2 -2 -> -2 -dqmin002 min -2 -1 -> -2 -dqmin003 min -2 0 -> -2 -dqmin004 min -2 1 -> -2 -dqmin005 min -2 2 -> -2 -dqmin006 min -1 -2 -> -2 -dqmin007 min -1 -1 -> -1 -dqmin008 min -1 0 -> -1 -dqmin009 min -1 1 -> -1 -dqmin010 min -1 2 -> -1 -dqmin011 min 0 -2 -> -2 -dqmin012 min 0 -1 -> -1 -dqmin013 min 0 0 -> 0 -dqmin014 min 0 1 -> 0 -dqmin015 min 0 2 -> 0 -dqmin016 min 1 -2 -> -2 -dqmin017 min 1 -1 -> -1 -dqmin018 min 1 0 -> 0 -dqmin019 min 1 1 -> 1 -dqmin020 min 1 2 -> 1 -dqmin021 min 2 -2 -> -2 -dqmin022 min 2 -1 -> -1 -dqmin023 min 2 0 -> 0 -dqmin025 min 2 1 -> 1 -dqmin026 min 2 2 -> 2 - --- extended zeros -dqmin030 min 0 0 -> 0 -dqmin031 min 0 -0 -> -0 -dqmin032 min 0 -0.0 -> -0.0 -dqmin033 min 0 0.0 -> 0.0 -dqmin034 min -0 0 -> -0 -dqmin035 min -0 -0 -> -0 -dqmin036 min -0 -0.0 -> -0 -dqmin037 min -0 0.0 -> -0 -dqmin038 min 0.0 0 -> 0.0 -dqmin039 min 0.0 -0 -> -0 -dqmin040 min 0.0 -0.0 -> -0.0 -dqmin041 min 0.0 0.0 -> 0.0 -dqmin042 min -0.0 0 -> -0.0 -dqmin043 min -0.0 -0 -> -0 -dqmin044 min -0.0 -0.0 -> -0.0 -dqmin045 min -0.0 0.0 -> -0.0 - -dqmin046 min 0E1 -0E1 -> -0E+1 -dqmin047 min -0E1 0E2 -> -0E+1 -dqmin048 min 0E2 0E1 -> 0E+1 -dqmin049 min 0E1 0E2 -> 0E+1 -dqmin050 min -0E3 -0E2 -> -0E+3 -dqmin051 min -0E2 -0E3 -> -0E+3 - --- Specials -dqmin090 min Inf -Inf -> -Infinity -dqmin091 min Inf -1000 -> -1000 -dqmin092 min Inf -1 -> -1 -dqmin093 min Inf -0 -> -0 -dqmin094 min Inf 0 -> 0 -dqmin095 min Inf 1 -> 1 -dqmin096 min Inf 1000 -> 1000 -dqmin097 min Inf Inf -> Infinity -dqmin098 min -1000 Inf -> -1000 -dqmin099 min -Inf Inf -> -Infinity -dqmin100 min -1 Inf -> -1 -dqmin101 min -0 Inf -> -0 -dqmin102 min 0 Inf -> 0 -dqmin103 min 1 Inf -> 1 -dqmin104 min 1000 Inf -> 1000 -dqmin105 min Inf Inf -> Infinity - -dqmin120 min -Inf -Inf -> -Infinity -dqmin121 min -Inf -1000 -> -Infinity -dqmin122 min -Inf -1 -> -Infinity -dqmin123 min -Inf -0 -> -Infinity -dqmin124 min -Inf 0 -> -Infinity -dqmin125 min -Inf 1 -> -Infinity -dqmin126 min -Inf 1000 -> -Infinity -dqmin127 min -Inf Inf -> -Infinity -dqmin128 min -Inf -Inf -> -Infinity -dqmin129 min -1000 -Inf -> -Infinity -dqmin130 min -1 -Inf -> -Infinity -dqmin131 min -0 -Inf -> -Infinity -dqmin132 min 0 -Inf -> -Infinity -dqmin133 min 1 -Inf -> -Infinity -dqmin134 min 1000 -Inf -> -Infinity -dqmin135 min Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -dqmin141 min NaN -Inf -> -Infinity -dqmin142 min NaN -1000 -> -1000 -dqmin143 min NaN -1 -> -1 -dqmin144 min NaN -0 -> -0 -dqmin145 min NaN 0 -> 0 -dqmin146 min NaN 1 -> 1 -dqmin147 min NaN 1000 -> 1000 -dqmin148 min NaN Inf -> Infinity -dqmin149 min NaN NaN -> NaN -dqmin150 min -Inf NaN -> -Infinity -dqmin151 min -1000 NaN -> -1000 -dqmin152 min -1 -NaN -> -1 -dqmin153 min -0 NaN -> -0 -dqmin154 min 0 -NaN -> 0 -dqmin155 min 1 NaN -> 1 -dqmin156 min 1000 NaN -> 1000 -dqmin157 min Inf NaN -> Infinity - -dqmin161 min sNaN -Inf -> NaN Invalid_operation -dqmin162 min sNaN -1000 -> NaN Invalid_operation -dqmin163 min sNaN -1 -> NaN Invalid_operation -dqmin164 min sNaN -0 -> NaN Invalid_operation -dqmin165 min -sNaN 0 -> -NaN Invalid_operation -dqmin166 min -sNaN 1 -> -NaN Invalid_operation -dqmin167 min sNaN 1000 -> NaN Invalid_operation -dqmin168 min sNaN NaN -> NaN Invalid_operation -dqmin169 min sNaN sNaN -> NaN Invalid_operation -dqmin170 min NaN sNaN -> NaN Invalid_operation -dqmin171 min -Inf sNaN -> NaN Invalid_operation -dqmin172 min -1000 sNaN -> NaN Invalid_operation -dqmin173 min -1 sNaN -> NaN Invalid_operation -dqmin174 min -0 sNaN -> NaN Invalid_operation -dqmin175 min 0 sNaN -> NaN Invalid_operation -dqmin176 min 1 sNaN -> NaN Invalid_operation -dqmin177 min 1000 sNaN -> NaN Invalid_operation -dqmin178 min Inf sNaN -> NaN Invalid_operation -dqmin179 min NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmin181 min NaN9 -Inf -> -Infinity -dqmin182 min -NaN8 9990 -> 9990 -dqmin183 min NaN71 Inf -> Infinity - -dqmin184 min NaN1 NaN54 -> NaN1 -dqmin185 min NaN22 -NaN53 -> NaN22 -dqmin186 min -NaN3 NaN6 -> -NaN3 -dqmin187 min -NaN44 NaN7 -> -NaN44 - -dqmin188 min -Inf NaN41 -> -Infinity -dqmin189 min -9999 -NaN33 -> -9999 -dqmin190 min Inf NaN2 -> Infinity - -dqmin191 min sNaN99 -Inf -> NaN99 Invalid_operation -dqmin192 min sNaN98 -11 -> NaN98 Invalid_operation -dqmin193 min -sNaN97 NaN8 -> -NaN97 Invalid_operation -dqmin194 min sNaN69 sNaN94 -> NaN69 Invalid_operation -dqmin195 min NaN95 sNaN93 -> NaN93 Invalid_operation -dqmin196 min -Inf sNaN92 -> NaN92 Invalid_operation -dqmin197 min 088 sNaN91 -> NaN91 Invalid_operation -dqmin198 min Inf -sNaN90 -> -NaN90 Invalid_operation -dqmin199 min NaN sNaN86 -> NaN86 Invalid_operation - --- old rounding checks -dqmin221 min -12345678000 1 -> -12345678000 -dqmin222 min 1 -12345678000 -> -12345678000 -dqmin223 min -1234567800 1 -> -1234567800 -dqmin224 min 1 -1234567800 -> -1234567800 -dqmin225 min -1234567890 1 -> -1234567890 -dqmin226 min 1 -1234567890 -> -1234567890 -dqmin227 min -1234567891 1 -> -1234567891 -dqmin228 min 1 -1234567891 -> -1234567891 -dqmin229 min -12345678901 1 -> -12345678901 -dqmin230 min 1 -12345678901 -> -12345678901 -dqmin231 min -1234567896 1 -> -1234567896 -dqmin232 min 1 -1234567896 -> -1234567896 -dqmin233 min 1234567891 1 -> 1 -dqmin234 min 1 1234567891 -> 1 -dqmin235 min 12345678901 1 -> 1 -dqmin236 min 1 12345678901 -> 1 -dqmin237 min 1234567896 1 -> 1 -dqmin238 min 1 1234567896 -> 1 - --- from examples -dqmin280 min '3' '2' -> '2' -dqmin281 min '-10' '3' -> '-10' -dqmin282 min '1.0' '1' -> '1.0' -dqmin283 min '1' '1.0' -> '1.0' -dqmin284 min '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -dqmin401 min Inf 1.1 -> 1.1 -dqmin402 min 1.1 1 -> 1 -dqmin403 min 1 1.0 -> 1.0 -dqmin404 min 1.0 0.1 -> 0.1 -dqmin405 min 0.1 0.10 -> 0.10 -dqmin406 min 0.10 0.100 -> 0.100 -dqmin407 min 0.10 0 -> 0 -dqmin408 min 0 0.0 -> 0.0 -dqmin409 min 0.0 -0 -> -0 -dqmin410 min 0.0 -0.0 -> -0.0 -dqmin411 min 0.00 -0.0 -> -0.0 -dqmin412 min 0.0 -0.00 -> -0.00 -dqmin413 min 0 -0.0 -> -0.0 -dqmin414 min 0 -0 -> -0 -dqmin415 min -0.0 -0 -> -0 -dqmin416 min -0 -0.100 -> -0.100 -dqmin417 min -0.100 -0.10 -> -0.10 -dqmin418 min -0.10 -0.1 -> -0.1 -dqmin419 min -0.1 -1.0 -> -1.0 -dqmin420 min -1.0 -1 -> -1 -dqmin421 min -1 -1.1 -> -1.1 -dqmin423 min -1.1 -Inf -> -Infinity --- same with operands reversed -dqmin431 min 1.1 Inf -> 1.1 -dqmin432 min 1 1.1 -> 1 -dqmin433 min 1.0 1 -> 1.0 -dqmin434 min 0.1 1.0 -> 0.1 -dqmin435 min 0.10 0.1 -> 0.10 -dqmin436 min 0.100 0.10 -> 0.100 -dqmin437 min 0 0.10 -> 0 -dqmin438 min 0.0 0 -> 0.0 -dqmin439 min -0 0.0 -> -0 -dqmin440 min -0.0 0.0 -> -0.0 -dqmin441 min -0.0 0.00 -> -0.0 -dqmin442 min -0.00 0.0 -> -0.00 -dqmin443 min -0.0 0 -> -0.0 -dqmin444 min -0 0 -> -0 -dqmin445 min -0 -0.0 -> -0 -dqmin446 min -0.100 -0 -> -0.100 -dqmin447 min -0.10 -0.100 -> -0.10 -dqmin448 min -0.1 -0.10 -> -0.1 -dqmin449 min -1.0 -0.1 -> -1.0 -dqmin450 min -1 -1.0 -> -1 -dqmin451 min -1.1 -1 -> -1.1 -dqmin453 min -Inf -1.1 -> -Infinity --- largies -dqmin460 min 1000 1E+3 -> 1000 -dqmin461 min 1E+3 1000 -> 1000 -dqmin462 min 1000 -1E+3 -> -1E+3 -dqmin463 min 1E+3 -384 -> -384 -dqmin464 min -384 1E+3 -> -384 -dqmin465 min -1E+3 1000 -> -1E+3 -dqmin466 min -384 -1E+3 -> -1E+3 -dqmin467 min -1E+3 -384 -> -1E+3 - --- misalignment traps for little-endian -dqmin471 min 1.0 0.1 -> 0.1 -dqmin472 min 0.1 1.0 -> 0.1 -dqmin473 min 10.0 0.1 -> 0.1 -dqmin474 min 0.1 10.0 -> 0.1 -dqmin475 min 100 1.0 -> 1.0 -dqmin476 min 1.0 100 -> 1.0 -dqmin477 min 1000 10.0 -> 10.0 -dqmin478 min 10.0 1000 -> 10.0 -dqmin479 min 10000 100.0 -> 100.0 -dqmin480 min 100.0 10000 -> 100.0 -dqmin481 min 100000 1000.0 -> 1000.0 -dqmin482 min 1000.0 100000 -> 1000.0 -dqmin483 min 1000000 10000.0 -> 10000.0 -dqmin484 min 10000.0 1000000 -> 10000.0 - --- subnormals -dqmin510 min 1.00E-6143 0 -> 0 -dqmin511 min 0.1E-6143 0 -> 0 -dqmin512 min 0.10E-6143 0 -> 0 -dqmin513 min 0.100E-6143 0 -> 0 -dqmin514 min 0.01E-6143 0 -> 0 -dqmin515 min 0.999E-6143 0 -> 0 -dqmin516 min 0.099E-6143 0 -> 0 -dqmin517 min 0.009E-6143 0 -> 0 -dqmin518 min 0.001E-6143 0 -> 0 -dqmin519 min 0.0009E-6143 0 -> 0 -dqmin520 min 0.0001E-6143 0 -> 0 - -dqmin530 min -1.00E-6143 0 -> -1.00E-6143 -dqmin531 min -0.1E-6143 0 -> -1E-6144 Subnormal -dqmin532 min -0.10E-6143 0 -> -1.0E-6144 Subnormal -dqmin533 min -0.100E-6143 0 -> -1.00E-6144 Subnormal -dqmin534 min -0.01E-6143 0 -> -1E-6145 Subnormal -dqmin535 min -0.999E-6143 0 -> -9.99E-6144 Subnormal -dqmin536 min -0.099E-6143 0 -> -9.9E-6145 Subnormal -dqmin537 min -0.009E-6143 0 -> -9E-6146 Subnormal -dqmin538 min -0.001E-6143 0 -> -1E-6146 Subnormal -dqmin539 min -0.0009E-6143 0 -> -9E-6147 Subnormal -dqmin540 min -0.0001E-6143 0 -> -1E-6147 Subnormal - - --- Null tests -dqmin900 min 10 # -> NaN Invalid_operation -dqmin901 min # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqMin.decTest -- decQuad minnum -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmin001 min -2 -2 -> -2 +dqmin002 min -2 -1 -> -2 +dqmin003 min -2 0 -> -2 +dqmin004 min -2 1 -> -2 +dqmin005 min -2 2 -> -2 +dqmin006 min -1 -2 -> -2 +dqmin007 min -1 -1 -> -1 +dqmin008 min -1 0 -> -1 +dqmin009 min -1 1 -> -1 +dqmin010 min -1 2 -> -1 +dqmin011 min 0 -2 -> -2 +dqmin012 min 0 -1 -> -1 +dqmin013 min 0 0 -> 0 +dqmin014 min 0 1 -> 0 +dqmin015 min 0 2 -> 0 +dqmin016 min 1 -2 -> -2 +dqmin017 min 1 -1 -> -1 +dqmin018 min 1 0 -> 0 +dqmin019 min 1 1 -> 1 +dqmin020 min 1 2 -> 1 +dqmin021 min 2 -2 -> -2 +dqmin022 min 2 -1 -> -1 +dqmin023 min 2 0 -> 0 +dqmin025 min 2 1 -> 1 +dqmin026 min 2 2 -> 2 + +-- extended zeros +dqmin030 min 0 0 -> 0 +dqmin031 min 0 -0 -> -0 +dqmin032 min 0 -0.0 -> -0.0 +dqmin033 min 0 0.0 -> 0.0 +dqmin034 min -0 0 -> -0 +dqmin035 min -0 -0 -> -0 +dqmin036 min -0 -0.0 -> -0 +dqmin037 min -0 0.0 -> -0 +dqmin038 min 0.0 0 -> 0.0 +dqmin039 min 0.0 -0 -> -0 +dqmin040 min 0.0 -0.0 -> -0.0 +dqmin041 min 0.0 0.0 -> 0.0 +dqmin042 min -0.0 0 -> -0.0 +dqmin043 min -0.0 -0 -> -0 +dqmin044 min -0.0 -0.0 -> -0.0 +dqmin045 min -0.0 0.0 -> -0.0 + +dqmin046 min 0E1 -0E1 -> -0E+1 +dqmin047 min -0E1 0E2 -> -0E+1 +dqmin048 min 0E2 0E1 -> 0E+1 +dqmin049 min 0E1 0E2 -> 0E+1 +dqmin050 min -0E3 -0E2 -> -0E+3 +dqmin051 min -0E2 -0E3 -> -0E+3 + +-- Specials +dqmin090 min Inf -Inf -> -Infinity +dqmin091 min Inf -1000 -> -1000 +dqmin092 min Inf -1 -> -1 +dqmin093 min Inf -0 -> -0 +dqmin094 min Inf 0 -> 0 +dqmin095 min Inf 1 -> 1 +dqmin096 min Inf 1000 -> 1000 +dqmin097 min Inf Inf -> Infinity +dqmin098 min -1000 Inf -> -1000 +dqmin099 min -Inf Inf -> -Infinity +dqmin100 min -1 Inf -> -1 +dqmin101 min -0 Inf -> -0 +dqmin102 min 0 Inf -> 0 +dqmin103 min 1 Inf -> 1 +dqmin104 min 1000 Inf -> 1000 +dqmin105 min Inf Inf -> Infinity + +dqmin120 min -Inf -Inf -> -Infinity +dqmin121 min -Inf -1000 -> -Infinity +dqmin122 min -Inf -1 -> -Infinity +dqmin123 min -Inf -0 -> -Infinity +dqmin124 min -Inf 0 -> -Infinity +dqmin125 min -Inf 1 -> -Infinity +dqmin126 min -Inf 1000 -> -Infinity +dqmin127 min -Inf Inf -> -Infinity +dqmin128 min -Inf -Inf -> -Infinity +dqmin129 min -1000 -Inf -> -Infinity +dqmin130 min -1 -Inf -> -Infinity +dqmin131 min -0 -Inf -> -Infinity +dqmin132 min 0 -Inf -> -Infinity +dqmin133 min 1 -Inf -> -Infinity +dqmin134 min 1000 -Inf -> -Infinity +dqmin135 min Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +dqmin141 min NaN -Inf -> -Infinity +dqmin142 min NaN -1000 -> -1000 +dqmin143 min NaN -1 -> -1 +dqmin144 min NaN -0 -> -0 +dqmin145 min NaN 0 -> 0 +dqmin146 min NaN 1 -> 1 +dqmin147 min NaN 1000 -> 1000 +dqmin148 min NaN Inf -> Infinity +dqmin149 min NaN NaN -> NaN +dqmin150 min -Inf NaN -> -Infinity +dqmin151 min -1000 NaN -> -1000 +dqmin152 min -1 -NaN -> -1 +dqmin153 min -0 NaN -> -0 +dqmin154 min 0 -NaN -> 0 +dqmin155 min 1 NaN -> 1 +dqmin156 min 1000 NaN -> 1000 +dqmin157 min Inf NaN -> Infinity + +dqmin161 min sNaN -Inf -> NaN Invalid_operation +dqmin162 min sNaN -1000 -> NaN Invalid_operation +dqmin163 min sNaN -1 -> NaN Invalid_operation +dqmin164 min sNaN -0 -> NaN Invalid_operation +dqmin165 min -sNaN 0 -> -NaN Invalid_operation +dqmin166 min -sNaN 1 -> -NaN Invalid_operation +dqmin167 min sNaN 1000 -> NaN Invalid_operation +dqmin168 min sNaN NaN -> NaN Invalid_operation +dqmin169 min sNaN sNaN -> NaN Invalid_operation +dqmin170 min NaN sNaN -> NaN Invalid_operation +dqmin171 min -Inf sNaN -> NaN Invalid_operation +dqmin172 min -1000 sNaN -> NaN Invalid_operation +dqmin173 min -1 sNaN -> NaN Invalid_operation +dqmin174 min -0 sNaN -> NaN Invalid_operation +dqmin175 min 0 sNaN -> NaN Invalid_operation +dqmin176 min 1 sNaN -> NaN Invalid_operation +dqmin177 min 1000 sNaN -> NaN Invalid_operation +dqmin178 min Inf sNaN -> NaN Invalid_operation +dqmin179 min NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmin181 min NaN9 -Inf -> -Infinity +dqmin182 min -NaN8 9990 -> 9990 +dqmin183 min NaN71 Inf -> Infinity + +dqmin184 min NaN1 NaN54 -> NaN1 +dqmin185 min NaN22 -NaN53 -> NaN22 +dqmin186 min -NaN3 NaN6 -> -NaN3 +dqmin187 min -NaN44 NaN7 -> -NaN44 + +dqmin188 min -Inf NaN41 -> -Infinity +dqmin189 min -9999 -NaN33 -> -9999 +dqmin190 min Inf NaN2 -> Infinity + +dqmin191 min sNaN99 -Inf -> NaN99 Invalid_operation +dqmin192 min sNaN98 -11 -> NaN98 Invalid_operation +dqmin193 min -sNaN97 NaN8 -> -NaN97 Invalid_operation +dqmin194 min sNaN69 sNaN94 -> NaN69 Invalid_operation +dqmin195 min NaN95 sNaN93 -> NaN93 Invalid_operation +dqmin196 min -Inf sNaN92 -> NaN92 Invalid_operation +dqmin197 min 088 sNaN91 -> NaN91 Invalid_operation +dqmin198 min Inf -sNaN90 -> -NaN90 Invalid_operation +dqmin199 min NaN sNaN86 -> NaN86 Invalid_operation + +-- old rounding checks +dqmin221 min -12345678000 1 -> -12345678000 +dqmin222 min 1 -12345678000 -> -12345678000 +dqmin223 min -1234567800 1 -> -1234567800 +dqmin224 min 1 -1234567800 -> -1234567800 +dqmin225 min -1234567890 1 -> -1234567890 +dqmin226 min 1 -1234567890 -> -1234567890 +dqmin227 min -1234567891 1 -> -1234567891 +dqmin228 min 1 -1234567891 -> -1234567891 +dqmin229 min -12345678901 1 -> -12345678901 +dqmin230 min 1 -12345678901 -> -12345678901 +dqmin231 min -1234567896 1 -> -1234567896 +dqmin232 min 1 -1234567896 -> -1234567896 +dqmin233 min 1234567891 1 -> 1 +dqmin234 min 1 1234567891 -> 1 +dqmin235 min 12345678901 1 -> 1 +dqmin236 min 1 12345678901 -> 1 +dqmin237 min 1234567896 1 -> 1 +dqmin238 min 1 1234567896 -> 1 + +-- from examples +dqmin280 min '3' '2' -> '2' +dqmin281 min '-10' '3' -> '-10' +dqmin282 min '1.0' '1' -> '1.0' +dqmin283 min '1' '1.0' -> '1.0' +dqmin284 min '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +dqmin401 min Inf 1.1 -> 1.1 +dqmin402 min 1.1 1 -> 1 +dqmin403 min 1 1.0 -> 1.0 +dqmin404 min 1.0 0.1 -> 0.1 +dqmin405 min 0.1 0.10 -> 0.10 +dqmin406 min 0.10 0.100 -> 0.100 +dqmin407 min 0.10 0 -> 0 +dqmin408 min 0 0.0 -> 0.0 +dqmin409 min 0.0 -0 -> -0 +dqmin410 min 0.0 -0.0 -> -0.0 +dqmin411 min 0.00 -0.0 -> -0.0 +dqmin412 min 0.0 -0.00 -> -0.00 +dqmin413 min 0 -0.0 -> -0.0 +dqmin414 min 0 -0 -> -0 +dqmin415 min -0.0 -0 -> -0 +dqmin416 min -0 -0.100 -> -0.100 +dqmin417 min -0.100 -0.10 -> -0.10 +dqmin418 min -0.10 -0.1 -> -0.1 +dqmin419 min -0.1 -1.0 -> -1.0 +dqmin420 min -1.0 -1 -> -1 +dqmin421 min -1 -1.1 -> -1.1 +dqmin423 min -1.1 -Inf -> -Infinity +-- same with operands reversed +dqmin431 min 1.1 Inf -> 1.1 +dqmin432 min 1 1.1 -> 1 +dqmin433 min 1.0 1 -> 1.0 +dqmin434 min 0.1 1.0 -> 0.1 +dqmin435 min 0.10 0.1 -> 0.10 +dqmin436 min 0.100 0.10 -> 0.100 +dqmin437 min 0 0.10 -> 0 +dqmin438 min 0.0 0 -> 0.0 +dqmin439 min -0 0.0 -> -0 +dqmin440 min -0.0 0.0 -> -0.0 +dqmin441 min -0.0 0.00 -> -0.0 +dqmin442 min -0.00 0.0 -> -0.00 +dqmin443 min -0.0 0 -> -0.0 +dqmin444 min -0 0 -> -0 +dqmin445 min -0 -0.0 -> -0 +dqmin446 min -0.100 -0 -> -0.100 +dqmin447 min -0.10 -0.100 -> -0.10 +dqmin448 min -0.1 -0.10 -> -0.1 +dqmin449 min -1.0 -0.1 -> -1.0 +dqmin450 min -1 -1.0 -> -1 +dqmin451 min -1.1 -1 -> -1.1 +dqmin453 min -Inf -1.1 -> -Infinity +-- largies +dqmin460 min 1000 1E+3 -> 1000 +dqmin461 min 1E+3 1000 -> 1000 +dqmin462 min 1000 -1E+3 -> -1E+3 +dqmin463 min 1E+3 -384 -> -384 +dqmin464 min -384 1E+3 -> -384 +dqmin465 min -1E+3 1000 -> -1E+3 +dqmin466 min -384 -1E+3 -> -1E+3 +dqmin467 min -1E+3 -384 -> -1E+3 + +-- misalignment traps for little-endian +dqmin471 min 1.0 0.1 -> 0.1 +dqmin472 min 0.1 1.0 -> 0.1 +dqmin473 min 10.0 0.1 -> 0.1 +dqmin474 min 0.1 10.0 -> 0.1 +dqmin475 min 100 1.0 -> 1.0 +dqmin476 min 1.0 100 -> 1.0 +dqmin477 min 1000 10.0 -> 10.0 +dqmin478 min 10.0 1000 -> 10.0 +dqmin479 min 10000 100.0 -> 100.0 +dqmin480 min 100.0 10000 -> 100.0 +dqmin481 min 100000 1000.0 -> 1000.0 +dqmin482 min 1000.0 100000 -> 1000.0 +dqmin483 min 1000000 10000.0 -> 10000.0 +dqmin484 min 10000.0 1000000 -> 10000.0 + +-- subnormals +dqmin510 min 1.00E-6143 0 -> 0 +dqmin511 min 0.1E-6143 0 -> 0 +dqmin512 min 0.10E-6143 0 -> 0 +dqmin513 min 0.100E-6143 0 -> 0 +dqmin514 min 0.01E-6143 0 -> 0 +dqmin515 min 0.999E-6143 0 -> 0 +dqmin516 min 0.099E-6143 0 -> 0 +dqmin517 min 0.009E-6143 0 -> 0 +dqmin518 min 0.001E-6143 0 -> 0 +dqmin519 min 0.0009E-6143 0 -> 0 +dqmin520 min 0.0001E-6143 0 -> 0 + +dqmin530 min -1.00E-6143 0 -> -1.00E-6143 +dqmin531 min -0.1E-6143 0 -> -1E-6144 Subnormal +dqmin532 min -0.10E-6143 0 -> -1.0E-6144 Subnormal +dqmin533 min -0.100E-6143 0 -> -1.00E-6144 Subnormal +dqmin534 min -0.01E-6143 0 -> -1E-6145 Subnormal +dqmin535 min -0.999E-6143 0 -> -9.99E-6144 Subnormal +dqmin536 min -0.099E-6143 0 -> -9.9E-6145 Subnormal +dqmin537 min -0.009E-6143 0 -> -9E-6146 Subnormal +dqmin538 min -0.001E-6143 0 -> -1E-6146 Subnormal +dqmin539 min -0.0009E-6143 0 -> -9E-6147 Subnormal +dqmin540 min -0.0001E-6143 0 -> -1E-6147 Subnormal + + +-- Null tests +dqmin900 min 10 # -> NaN Invalid_operation +dqmin901 min # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqMinMag.decTest b/Lib/test/decimaltestdata/dqMinMag.decTest index 71b886fb588..edc2e476ace 100644 --- a/Lib/test/decimaltestdata/dqMinMag.decTest +++ b/Lib/test/decimaltestdata/dqMinMag.decTest @@ -1,293 +1,293 @@ ------------------------------------------------------------------------- --- dqMinMag.decTest -- decQuad minnummag -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmng001 minmag -2 -2 -> -2 -dqmng002 minmag -2 -1 -> -1 -dqmng003 minmag -2 0 -> 0 -dqmng004 minmag -2 1 -> 1 -dqmng005 minmag -2 2 -> -2 -dqmng006 minmag -1 -2 -> -1 -dqmng007 minmag -1 -1 -> -1 -dqmng008 minmag -1 0 -> 0 -dqmng009 minmag -1 1 -> -1 -dqmng010 minmag -1 2 -> -1 -dqmng011 minmag 0 -2 -> 0 -dqmng012 minmag 0 -1 -> 0 -dqmng013 minmag 0 0 -> 0 -dqmng014 minmag 0 1 -> 0 -dqmng015 minmag 0 2 -> 0 -dqmng016 minmag 1 -2 -> 1 -dqmng017 minmag 1 -1 -> -1 -dqmng018 minmag 1 0 -> 0 -dqmng019 minmag 1 1 -> 1 -dqmng020 minmag 1 2 -> 1 -dqmng021 minmag 2 -2 -> -2 -dqmng022 minmag 2 -1 -> -1 -dqmng023 minmag 2 0 -> 0 -dqmng025 minmag 2 1 -> 1 -dqmng026 minmag 2 2 -> 2 - --- extended zeros -dqmng030 minmag 0 0 -> 0 -dqmng031 minmag 0 -0 -> -0 -dqmng032 minmag 0 -0.0 -> -0.0 -dqmng033 minmag 0 0.0 -> 0.0 -dqmng034 minmag -0 0 -> -0 -dqmng035 minmag -0 -0 -> -0 -dqmng036 minmag -0 -0.0 -> -0 -dqmng037 minmag -0 0.0 -> -0 -dqmng038 minmag 0.0 0 -> 0.0 -dqmng039 minmag 0.0 -0 -> -0 -dqmng040 minmag 0.0 -0.0 -> -0.0 -dqmng041 minmag 0.0 0.0 -> 0.0 -dqmng042 minmag -0.0 0 -> -0.0 -dqmng043 minmag -0.0 -0 -> -0 -dqmng044 minmag -0.0 -0.0 -> -0.0 -dqmng045 minmag -0.0 0.0 -> -0.0 - -dqmng046 minmag 0E1 -0E1 -> -0E+1 -dqmng047 minmag -0E1 0E2 -> -0E+1 -dqmng048 minmag 0E2 0E1 -> 0E+1 -dqmng049 minmag 0E1 0E2 -> 0E+1 -dqmng050 minmag -0E3 -0E2 -> -0E+3 -dqmng051 minmag -0E2 -0E3 -> -0E+3 - --- Specials -dqmng090 minmag Inf -Inf -> -Infinity -dqmng091 minmag Inf -1000 -> -1000 -dqmng092 minmag Inf -1 -> -1 -dqmng093 minmag Inf -0 -> -0 -dqmng094 minmag Inf 0 -> 0 -dqmng095 minmag Inf 1 -> 1 -dqmng096 minmag Inf 1000 -> 1000 -dqmng097 minmag Inf Inf -> Infinity -dqmng098 minmag -1000 Inf -> -1000 -dqmng099 minmag -Inf Inf -> -Infinity -dqmng100 minmag -1 Inf -> -1 -dqmng101 minmag -0 Inf -> -0 -dqmng102 minmag 0 Inf -> 0 -dqmng103 minmag 1 Inf -> 1 -dqmng104 minmag 1000 Inf -> 1000 -dqmng105 minmag Inf Inf -> Infinity - -dqmng120 minmag -Inf -Inf -> -Infinity -dqmng121 minmag -Inf -1000 -> -1000 -dqmng122 minmag -Inf -1 -> -1 -dqmng123 minmag -Inf -0 -> -0 -dqmng124 minmag -Inf 0 -> 0 -dqmng125 minmag -Inf 1 -> 1 -dqmng126 minmag -Inf 1000 -> 1000 -dqmng127 minmag -Inf Inf -> -Infinity -dqmng128 minmag -Inf -Inf -> -Infinity -dqmng129 minmag -1000 -Inf -> -1000 -dqmng130 minmag -1 -Inf -> -1 -dqmng131 minmag -0 -Inf -> -0 -dqmng132 minmag 0 -Inf -> 0 -dqmng133 minmag 1 -Inf -> 1 -dqmng134 minmag 1000 -Inf -> 1000 -dqmng135 minmag Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -dqmng141 minmag NaN -Inf -> -Infinity -dqmng142 minmag NaN -1000 -> -1000 -dqmng143 minmag NaN -1 -> -1 -dqmng144 minmag NaN -0 -> -0 -dqmng145 minmag NaN 0 -> 0 -dqmng146 minmag NaN 1 -> 1 -dqmng147 minmag NaN 1000 -> 1000 -dqmng148 minmag NaN Inf -> Infinity -dqmng149 minmag NaN NaN -> NaN -dqmng150 minmag -Inf NaN -> -Infinity -dqmng151 minmag -1000 NaN -> -1000 -dqmng152 minmag -1 -NaN -> -1 -dqmng153 minmag -0 NaN -> -0 -dqmng154 minmag 0 -NaN -> 0 -dqmng155 minmag 1 NaN -> 1 -dqmng156 minmag 1000 NaN -> 1000 -dqmng157 minmag Inf NaN -> Infinity - -dqmng161 minmag sNaN -Inf -> NaN Invalid_operation -dqmng162 minmag sNaN -1000 -> NaN Invalid_operation -dqmng163 minmag sNaN -1 -> NaN Invalid_operation -dqmng164 minmag sNaN -0 -> NaN Invalid_operation -dqmng165 minmag -sNaN 0 -> -NaN Invalid_operation -dqmng166 minmag -sNaN 1 -> -NaN Invalid_operation -dqmng167 minmag sNaN 1000 -> NaN Invalid_operation -dqmng168 minmag sNaN NaN -> NaN Invalid_operation -dqmng169 minmag sNaN sNaN -> NaN Invalid_operation -dqmng170 minmag NaN sNaN -> NaN Invalid_operation -dqmng171 minmag -Inf sNaN -> NaN Invalid_operation -dqmng172 minmag -1000 sNaN -> NaN Invalid_operation -dqmng173 minmag -1 sNaN -> NaN Invalid_operation -dqmng174 minmag -0 sNaN -> NaN Invalid_operation -dqmng175 minmag 0 sNaN -> NaN Invalid_operation -dqmng176 minmag 1 sNaN -> NaN Invalid_operation -dqmng177 minmag 1000 sNaN -> NaN Invalid_operation -dqmng178 minmag Inf sNaN -> NaN Invalid_operation -dqmng179 minmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmng181 minmag NaN9 -Inf -> -Infinity -dqmng182 minmag -NaN8 9990 -> 9990 -dqmng183 minmag NaN71 Inf -> Infinity - -dqmng184 minmag NaN1 NaN54 -> NaN1 -dqmng185 minmag NaN22 -NaN53 -> NaN22 -dqmng186 minmag -NaN3 NaN6 -> -NaN3 -dqmng187 minmag -NaN44 NaN7 -> -NaN44 - -dqmng188 minmag -Inf NaN41 -> -Infinity -dqmng189 minmag -9999 -NaN33 -> -9999 -dqmng190 minmag Inf NaN2 -> Infinity - -dqmng191 minmag sNaN99 -Inf -> NaN99 Invalid_operation -dqmng192 minmag sNaN98 -11 -> NaN98 Invalid_operation -dqmng193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation -dqmng194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation -dqmng195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation -dqmng196 minmag -Inf sNaN92 -> NaN92 Invalid_operation -dqmng197 minmag 088 sNaN91 -> NaN91 Invalid_operation -dqmng198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation -dqmng199 minmag NaN sNaN86 -> NaN86 Invalid_operation - --- old rounding checks -dqmng221 minmag -12345678000 1 -> 1 -dqmng222 minmag 1 -12345678000 -> 1 -dqmng223 minmag -1234567800 1 -> 1 -dqmng224 minmag 1 -1234567800 -> 1 -dqmng225 minmag -1234567890 1 -> 1 -dqmng226 minmag 1 -1234567890 -> 1 -dqmng227 minmag -1234567891 1 -> 1 -dqmng228 minmag 1 -1234567891 -> 1 -dqmng229 minmag -12345678901 1 -> 1 -dqmng230 minmag 1 -12345678901 -> 1 -dqmng231 minmag -1234567896 1 -> 1 -dqmng232 minmag 1 -1234567896 -> 1 -dqmng233 minmag 1234567891 1 -> 1 -dqmng234 minmag 1 1234567891 -> 1 -dqmng235 minmag 12345678901 1 -> 1 -dqmng236 minmag 1 12345678901 -> 1 -dqmng237 minmag 1234567896 1 -> 1 -dqmng238 minmag 1 1234567896 -> 1 - --- from examples -dqmng280 minmag '3' '2' -> '2' -dqmng281 minmag '-10' '3' -> '3' -dqmng282 minmag '1.0' '1' -> '1.0' -dqmng283 minmag '1' '1.0' -> '1.0' -dqmng284 minmag '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -dqmng401 minmag Inf 1.1 -> 1.1 -dqmng402 minmag 1.1 1 -> 1 -dqmng403 minmag 1 1.0 -> 1.0 -dqmng404 minmag 1.0 0.1 -> 0.1 -dqmng405 minmag 0.1 0.10 -> 0.10 -dqmng406 minmag 0.10 0.100 -> 0.100 -dqmng407 minmag 0.10 0 -> 0 -dqmng408 minmag 0 0.0 -> 0.0 -dqmng409 minmag 0.0 -0 -> -0 -dqmng410 minmag 0.0 -0.0 -> -0.0 -dqmng411 minmag 0.00 -0.0 -> -0.0 -dqmng412 minmag 0.0 -0.00 -> -0.00 -dqmng413 minmag 0 -0.0 -> -0.0 -dqmng414 minmag 0 -0 -> -0 -dqmng415 minmag -0.0 -0 -> -0 -dqmng416 minmag -0 -0.100 -> -0 -dqmng417 minmag -0.100 -0.10 -> -0.10 -dqmng418 minmag -0.10 -0.1 -> -0.1 -dqmng419 minmag -0.1 -1.0 -> -0.1 -dqmng420 minmag -1.0 -1 -> -1 -dqmng421 minmag -1 -1.1 -> -1 -dqmng423 minmag -1.1 -Inf -> -1.1 --- same with operands reversed -dqmng431 minmag 1.1 Inf -> 1.1 -dqmng432 minmag 1 1.1 -> 1 -dqmng433 minmag 1.0 1 -> 1.0 -dqmng434 minmag 0.1 1.0 -> 0.1 -dqmng435 minmag 0.10 0.1 -> 0.10 -dqmng436 minmag 0.100 0.10 -> 0.100 -dqmng437 minmag 0 0.10 -> 0 -dqmng438 minmag 0.0 0 -> 0.0 -dqmng439 minmag -0 0.0 -> -0 -dqmng440 minmag -0.0 0.0 -> -0.0 -dqmng441 minmag -0.0 0.00 -> -0.0 -dqmng442 minmag -0.00 0.0 -> -0.00 -dqmng443 minmag -0.0 0 -> -0.0 -dqmng444 minmag -0 0 -> -0 -dqmng445 minmag -0 -0.0 -> -0 -dqmng446 minmag -0.100 -0 -> -0 -dqmng447 minmag -0.10 -0.100 -> -0.10 -dqmng448 minmag -0.1 -0.10 -> -0.1 -dqmng449 minmag -1.0 -0.1 -> -0.1 -dqmng450 minmag -1 -1.0 -> -1 -dqmng451 minmag -1.1 -1 -> -1 -dqmng453 minmag -Inf -1.1 -> -1.1 --- largies -dqmng460 minmag 1000 1E+3 -> 1000 -dqmng461 minmag 1E+3 1000 -> 1000 -dqmng462 minmag 1000 -1E+3 -> -1E+3 -dqmng463 minmag 1E+3 -384 -> -384 -dqmng464 minmag -384 1E+3 -> -384 -dqmng465 minmag -1E+3 1000 -> -1E+3 -dqmng466 minmag -384 -1E+3 -> -384 -dqmng467 minmag -1E+3 -384 -> -384 - --- subnormals -dqmng510 minmag 1.00E-6143 0 -> 0 -dqmng511 minmag 0.1E-6143 0 -> 0 -dqmng512 minmag 0.10E-6143 0 -> 0 -dqmng513 minmag 0.100E-6143 0 -> 0 -dqmng514 minmag 0.01E-6143 0 -> 0 -dqmng515 minmag 0.999E-6143 0 -> 0 -dqmng516 minmag 0.099E-6143 0 -> 0 -dqmng517 minmag 0.009E-6143 0 -> 0 -dqmng518 minmag 0.001E-6143 0 -> 0 -dqmng519 minmag 0.0009E-6143 0 -> 0 -dqmng520 minmag 0.0001E-6143 0 -> 0 - -dqmng530 minmag -1.00E-6143 0 -> 0 -dqmng531 minmag -0.1E-6143 0 -> 0 -dqmng532 minmag -0.10E-6143 0 -> 0 -dqmng533 minmag -0.100E-6143 0 -> 0 -dqmng534 minmag -0.01E-6143 0 -> 0 -dqmng535 minmag -0.999E-6143 0 -> 0 -dqmng536 minmag -0.099E-6143 0 -> 0 -dqmng537 minmag -0.009E-6143 0 -> 0 -dqmng538 minmag -0.001E-6143 0 -> 0 -dqmng539 minmag -0.0009E-6143 0 -> 0 -dqmng540 minmag -0.0001E-6143 0 -> 0 - - --- Null tests -dqmng900 minmag 10 # -> NaN Invalid_operation -dqmng901 minmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqMinMag.decTest -- decQuad minnummag -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmng001 minmag -2 -2 -> -2 +dqmng002 minmag -2 -1 -> -1 +dqmng003 minmag -2 0 -> 0 +dqmng004 minmag -2 1 -> 1 +dqmng005 minmag -2 2 -> -2 +dqmng006 minmag -1 -2 -> -1 +dqmng007 minmag -1 -1 -> -1 +dqmng008 minmag -1 0 -> 0 +dqmng009 minmag -1 1 -> -1 +dqmng010 minmag -1 2 -> -1 +dqmng011 minmag 0 -2 -> 0 +dqmng012 minmag 0 -1 -> 0 +dqmng013 minmag 0 0 -> 0 +dqmng014 minmag 0 1 -> 0 +dqmng015 minmag 0 2 -> 0 +dqmng016 minmag 1 -2 -> 1 +dqmng017 minmag 1 -1 -> -1 +dqmng018 minmag 1 0 -> 0 +dqmng019 minmag 1 1 -> 1 +dqmng020 minmag 1 2 -> 1 +dqmng021 minmag 2 -2 -> -2 +dqmng022 minmag 2 -1 -> -1 +dqmng023 minmag 2 0 -> 0 +dqmng025 minmag 2 1 -> 1 +dqmng026 minmag 2 2 -> 2 + +-- extended zeros +dqmng030 minmag 0 0 -> 0 +dqmng031 minmag 0 -0 -> -0 +dqmng032 minmag 0 -0.0 -> -0.0 +dqmng033 minmag 0 0.0 -> 0.0 +dqmng034 minmag -0 0 -> -0 +dqmng035 minmag -0 -0 -> -0 +dqmng036 minmag -0 -0.0 -> -0 +dqmng037 minmag -0 0.0 -> -0 +dqmng038 minmag 0.0 0 -> 0.0 +dqmng039 minmag 0.0 -0 -> -0 +dqmng040 minmag 0.0 -0.0 -> -0.0 +dqmng041 minmag 0.0 0.0 -> 0.0 +dqmng042 minmag -0.0 0 -> -0.0 +dqmng043 minmag -0.0 -0 -> -0 +dqmng044 minmag -0.0 -0.0 -> -0.0 +dqmng045 minmag -0.0 0.0 -> -0.0 + +dqmng046 minmag 0E1 -0E1 -> -0E+1 +dqmng047 minmag -0E1 0E2 -> -0E+1 +dqmng048 minmag 0E2 0E1 -> 0E+1 +dqmng049 minmag 0E1 0E2 -> 0E+1 +dqmng050 minmag -0E3 -0E2 -> -0E+3 +dqmng051 minmag -0E2 -0E3 -> -0E+3 + +-- Specials +dqmng090 minmag Inf -Inf -> -Infinity +dqmng091 minmag Inf -1000 -> -1000 +dqmng092 minmag Inf -1 -> -1 +dqmng093 minmag Inf -0 -> -0 +dqmng094 minmag Inf 0 -> 0 +dqmng095 minmag Inf 1 -> 1 +dqmng096 minmag Inf 1000 -> 1000 +dqmng097 minmag Inf Inf -> Infinity +dqmng098 minmag -1000 Inf -> -1000 +dqmng099 minmag -Inf Inf -> -Infinity +dqmng100 minmag -1 Inf -> -1 +dqmng101 minmag -0 Inf -> -0 +dqmng102 minmag 0 Inf -> 0 +dqmng103 minmag 1 Inf -> 1 +dqmng104 minmag 1000 Inf -> 1000 +dqmng105 minmag Inf Inf -> Infinity + +dqmng120 minmag -Inf -Inf -> -Infinity +dqmng121 minmag -Inf -1000 -> -1000 +dqmng122 minmag -Inf -1 -> -1 +dqmng123 minmag -Inf -0 -> -0 +dqmng124 minmag -Inf 0 -> 0 +dqmng125 minmag -Inf 1 -> 1 +dqmng126 minmag -Inf 1000 -> 1000 +dqmng127 minmag -Inf Inf -> -Infinity +dqmng128 minmag -Inf -Inf -> -Infinity +dqmng129 minmag -1000 -Inf -> -1000 +dqmng130 minmag -1 -Inf -> -1 +dqmng131 minmag -0 -Inf -> -0 +dqmng132 minmag 0 -Inf -> 0 +dqmng133 minmag 1 -Inf -> 1 +dqmng134 minmag 1000 -Inf -> 1000 +dqmng135 minmag Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +dqmng141 minmag NaN -Inf -> -Infinity +dqmng142 minmag NaN -1000 -> -1000 +dqmng143 minmag NaN -1 -> -1 +dqmng144 minmag NaN -0 -> -0 +dqmng145 minmag NaN 0 -> 0 +dqmng146 minmag NaN 1 -> 1 +dqmng147 minmag NaN 1000 -> 1000 +dqmng148 minmag NaN Inf -> Infinity +dqmng149 minmag NaN NaN -> NaN +dqmng150 minmag -Inf NaN -> -Infinity +dqmng151 minmag -1000 NaN -> -1000 +dqmng152 minmag -1 -NaN -> -1 +dqmng153 minmag -0 NaN -> -0 +dqmng154 minmag 0 -NaN -> 0 +dqmng155 minmag 1 NaN -> 1 +dqmng156 minmag 1000 NaN -> 1000 +dqmng157 minmag Inf NaN -> Infinity + +dqmng161 minmag sNaN -Inf -> NaN Invalid_operation +dqmng162 minmag sNaN -1000 -> NaN Invalid_operation +dqmng163 minmag sNaN -1 -> NaN Invalid_operation +dqmng164 minmag sNaN -0 -> NaN Invalid_operation +dqmng165 minmag -sNaN 0 -> -NaN Invalid_operation +dqmng166 minmag -sNaN 1 -> -NaN Invalid_operation +dqmng167 minmag sNaN 1000 -> NaN Invalid_operation +dqmng168 minmag sNaN NaN -> NaN Invalid_operation +dqmng169 minmag sNaN sNaN -> NaN Invalid_operation +dqmng170 minmag NaN sNaN -> NaN Invalid_operation +dqmng171 minmag -Inf sNaN -> NaN Invalid_operation +dqmng172 minmag -1000 sNaN -> NaN Invalid_operation +dqmng173 minmag -1 sNaN -> NaN Invalid_operation +dqmng174 minmag -0 sNaN -> NaN Invalid_operation +dqmng175 minmag 0 sNaN -> NaN Invalid_operation +dqmng176 minmag 1 sNaN -> NaN Invalid_operation +dqmng177 minmag 1000 sNaN -> NaN Invalid_operation +dqmng178 minmag Inf sNaN -> NaN Invalid_operation +dqmng179 minmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmng181 minmag NaN9 -Inf -> -Infinity +dqmng182 minmag -NaN8 9990 -> 9990 +dqmng183 minmag NaN71 Inf -> Infinity + +dqmng184 minmag NaN1 NaN54 -> NaN1 +dqmng185 minmag NaN22 -NaN53 -> NaN22 +dqmng186 minmag -NaN3 NaN6 -> -NaN3 +dqmng187 minmag -NaN44 NaN7 -> -NaN44 + +dqmng188 minmag -Inf NaN41 -> -Infinity +dqmng189 minmag -9999 -NaN33 -> -9999 +dqmng190 minmag Inf NaN2 -> Infinity + +dqmng191 minmag sNaN99 -Inf -> NaN99 Invalid_operation +dqmng192 minmag sNaN98 -11 -> NaN98 Invalid_operation +dqmng193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation +dqmng194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation +dqmng195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation +dqmng196 minmag -Inf sNaN92 -> NaN92 Invalid_operation +dqmng197 minmag 088 sNaN91 -> NaN91 Invalid_operation +dqmng198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation +dqmng199 minmag NaN sNaN86 -> NaN86 Invalid_operation + +-- old rounding checks +dqmng221 minmag -12345678000 1 -> 1 +dqmng222 minmag 1 -12345678000 -> 1 +dqmng223 minmag -1234567800 1 -> 1 +dqmng224 minmag 1 -1234567800 -> 1 +dqmng225 minmag -1234567890 1 -> 1 +dqmng226 minmag 1 -1234567890 -> 1 +dqmng227 minmag -1234567891 1 -> 1 +dqmng228 minmag 1 -1234567891 -> 1 +dqmng229 minmag -12345678901 1 -> 1 +dqmng230 minmag 1 -12345678901 -> 1 +dqmng231 minmag -1234567896 1 -> 1 +dqmng232 minmag 1 -1234567896 -> 1 +dqmng233 minmag 1234567891 1 -> 1 +dqmng234 minmag 1 1234567891 -> 1 +dqmng235 minmag 12345678901 1 -> 1 +dqmng236 minmag 1 12345678901 -> 1 +dqmng237 minmag 1234567896 1 -> 1 +dqmng238 minmag 1 1234567896 -> 1 + +-- from examples +dqmng280 minmag '3' '2' -> '2' +dqmng281 minmag '-10' '3' -> '3' +dqmng282 minmag '1.0' '1' -> '1.0' +dqmng283 minmag '1' '1.0' -> '1.0' +dqmng284 minmag '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +dqmng401 minmag Inf 1.1 -> 1.1 +dqmng402 minmag 1.1 1 -> 1 +dqmng403 minmag 1 1.0 -> 1.0 +dqmng404 minmag 1.0 0.1 -> 0.1 +dqmng405 minmag 0.1 0.10 -> 0.10 +dqmng406 minmag 0.10 0.100 -> 0.100 +dqmng407 minmag 0.10 0 -> 0 +dqmng408 minmag 0 0.0 -> 0.0 +dqmng409 minmag 0.0 -0 -> -0 +dqmng410 minmag 0.0 -0.0 -> -0.0 +dqmng411 minmag 0.00 -0.0 -> -0.0 +dqmng412 minmag 0.0 -0.00 -> -0.00 +dqmng413 minmag 0 -0.0 -> -0.0 +dqmng414 minmag 0 -0 -> -0 +dqmng415 minmag -0.0 -0 -> -0 +dqmng416 minmag -0 -0.100 -> -0 +dqmng417 minmag -0.100 -0.10 -> -0.10 +dqmng418 minmag -0.10 -0.1 -> -0.1 +dqmng419 minmag -0.1 -1.0 -> -0.1 +dqmng420 minmag -1.0 -1 -> -1 +dqmng421 minmag -1 -1.1 -> -1 +dqmng423 minmag -1.1 -Inf -> -1.1 +-- same with operands reversed +dqmng431 minmag 1.1 Inf -> 1.1 +dqmng432 minmag 1 1.1 -> 1 +dqmng433 minmag 1.0 1 -> 1.0 +dqmng434 minmag 0.1 1.0 -> 0.1 +dqmng435 minmag 0.10 0.1 -> 0.10 +dqmng436 minmag 0.100 0.10 -> 0.100 +dqmng437 minmag 0 0.10 -> 0 +dqmng438 minmag 0.0 0 -> 0.0 +dqmng439 minmag -0 0.0 -> -0 +dqmng440 minmag -0.0 0.0 -> -0.0 +dqmng441 minmag -0.0 0.00 -> -0.0 +dqmng442 minmag -0.00 0.0 -> -0.00 +dqmng443 minmag -0.0 0 -> -0.0 +dqmng444 minmag -0 0 -> -0 +dqmng445 minmag -0 -0.0 -> -0 +dqmng446 minmag -0.100 -0 -> -0 +dqmng447 minmag -0.10 -0.100 -> -0.10 +dqmng448 minmag -0.1 -0.10 -> -0.1 +dqmng449 minmag -1.0 -0.1 -> -0.1 +dqmng450 minmag -1 -1.0 -> -1 +dqmng451 minmag -1.1 -1 -> -1 +dqmng453 minmag -Inf -1.1 -> -1.1 +-- largies +dqmng460 minmag 1000 1E+3 -> 1000 +dqmng461 minmag 1E+3 1000 -> 1000 +dqmng462 minmag 1000 -1E+3 -> -1E+3 +dqmng463 minmag 1E+3 -384 -> -384 +dqmng464 minmag -384 1E+3 -> -384 +dqmng465 minmag -1E+3 1000 -> -1E+3 +dqmng466 minmag -384 -1E+3 -> -384 +dqmng467 minmag -1E+3 -384 -> -384 + +-- subnormals +dqmng510 minmag 1.00E-6143 0 -> 0 +dqmng511 minmag 0.1E-6143 0 -> 0 +dqmng512 minmag 0.10E-6143 0 -> 0 +dqmng513 minmag 0.100E-6143 0 -> 0 +dqmng514 minmag 0.01E-6143 0 -> 0 +dqmng515 minmag 0.999E-6143 0 -> 0 +dqmng516 minmag 0.099E-6143 0 -> 0 +dqmng517 minmag 0.009E-6143 0 -> 0 +dqmng518 minmag 0.001E-6143 0 -> 0 +dqmng519 minmag 0.0009E-6143 0 -> 0 +dqmng520 minmag 0.0001E-6143 0 -> 0 + +dqmng530 minmag -1.00E-6143 0 -> 0 +dqmng531 minmag -0.1E-6143 0 -> 0 +dqmng532 minmag -0.10E-6143 0 -> 0 +dqmng533 minmag -0.100E-6143 0 -> 0 +dqmng534 minmag -0.01E-6143 0 -> 0 +dqmng535 minmag -0.999E-6143 0 -> 0 +dqmng536 minmag -0.099E-6143 0 -> 0 +dqmng537 minmag -0.009E-6143 0 -> 0 +dqmng538 minmag -0.001E-6143 0 -> 0 +dqmng539 minmag -0.0009E-6143 0 -> 0 +dqmng540 minmag -0.0001E-6143 0 -> 0 + + +-- Null tests +dqmng900 minmag 10 # -> NaN Invalid_operation +dqmng901 minmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqMinus.decTest b/Lib/test/decimaltestdata/dqMinus.decTest index 7a007791bfe..02e462e0bee 100644 --- a/Lib/test/decimaltestdata/dqMinus.decTest +++ b/Lib/test/decimaltestdata/dqMinus.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqMinus.decTest -- decQuad 0-x -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqmns001 minus +7.50 -> -7.50 - --- Infinities -dqmns011 minus Infinity -> -Infinity -dqmns012 minus -Infinity -> Infinity - --- NaNs, 0 payload -dqmns021 minus NaN -> NaN -dqmns022 minus -NaN -> -NaN -dqmns023 minus sNaN -> NaN Invalid_operation -dqmns024 minus -sNaN -> -NaN Invalid_operation - --- NaNs, non-0 payload -dqmns031 minus NaN13 -> NaN13 -dqmns032 minus -NaN13 -> -NaN13 -dqmns033 minus sNaN13 -> NaN13 Invalid_operation -dqmns034 minus -sNaN13 -> -NaN13 Invalid_operation -dqmns035 minus NaN70 -> NaN70 -dqmns036 minus -NaN70 -> -NaN70 -dqmns037 minus sNaN101 -> NaN101 Invalid_operation -dqmns038 minus -sNaN101 -> -NaN101 Invalid_operation - --- finites -dqmns101 minus 7 -> -7 -dqmns102 minus -7 -> 7 -dqmns103 minus 75 -> -75 -dqmns104 minus -75 -> 75 -dqmns105 minus 7.50 -> -7.50 -dqmns106 minus -7.50 -> 7.50 -dqmns107 minus 7.500 -> -7.500 -dqmns108 minus -7.500 -> 7.500 - --- zeros -dqmns111 minus 0 -> 0 -dqmns112 minus -0 -> 0 -dqmns113 minus 0E+4 -> 0E+4 -dqmns114 minus -0E+4 -> 0E+4 -dqmns115 minus 0.0000 -> 0.0000 -dqmns116 minus -0.0000 -> 0.0000 -dqmns117 minus 0E-141 -> 0E-141 -dqmns118 minus -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqmns121 minus 2682682682682682682682682682682682 -> -2682682682682682682682682682682682 -dqmns122 minus -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqmns123 minus 1341341341341341341341341341341341 -> -1341341341341341341341341341341341 -dqmns124 minus -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqmns131 minus 9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqmns132 minus 1E-6143 -> -1E-6143 -dqmns133 minus 1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqmns134 minus 1E-6176 -> -1E-6176 Subnormal - -dqmns135 minus -1E-6176 -> 1E-6176 Subnormal -dqmns136 minus -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqmns137 minus -1E-6143 -> 1E-6143 -dqmns138 minus -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqMinus.decTest -- decQuad 0-x -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqmns001 minus +7.50 -> -7.50 + +-- Infinities +dqmns011 minus Infinity -> -Infinity +dqmns012 minus -Infinity -> Infinity + +-- NaNs, 0 payload +dqmns021 minus NaN -> NaN +dqmns022 minus -NaN -> -NaN +dqmns023 minus sNaN -> NaN Invalid_operation +dqmns024 minus -sNaN -> -NaN Invalid_operation + +-- NaNs, non-0 payload +dqmns031 minus NaN13 -> NaN13 +dqmns032 minus -NaN13 -> -NaN13 +dqmns033 minus sNaN13 -> NaN13 Invalid_operation +dqmns034 minus -sNaN13 -> -NaN13 Invalid_operation +dqmns035 minus NaN70 -> NaN70 +dqmns036 minus -NaN70 -> -NaN70 +dqmns037 minus sNaN101 -> NaN101 Invalid_operation +dqmns038 minus -sNaN101 -> -NaN101 Invalid_operation + +-- finites +dqmns101 minus 7 -> -7 +dqmns102 minus -7 -> 7 +dqmns103 minus 75 -> -75 +dqmns104 minus -75 -> 75 +dqmns105 minus 7.50 -> -7.50 +dqmns106 minus -7.50 -> 7.50 +dqmns107 minus 7.500 -> -7.500 +dqmns108 minus -7.500 -> 7.500 + +-- zeros +dqmns111 minus 0 -> 0 +dqmns112 minus -0 -> 0 +dqmns113 minus 0E+4 -> 0E+4 +dqmns114 minus -0E+4 -> 0E+4 +dqmns115 minus 0.0000 -> 0.0000 +dqmns116 minus -0.0000 -> 0.0000 +dqmns117 minus 0E-141 -> 0E-141 +dqmns118 minus -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqmns121 minus 2682682682682682682682682682682682 -> -2682682682682682682682682682682682 +dqmns122 minus -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqmns123 minus 1341341341341341341341341341341341 -> -1341341341341341341341341341341341 +dqmns124 minus -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqmns131 minus 9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqmns132 minus 1E-6143 -> -1E-6143 +dqmns133 minus 1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqmns134 minus 1E-6176 -> -1E-6176 Subnormal + +dqmns135 minus -1E-6176 -> 1E-6176 Subnormal +dqmns136 minus -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqmns137 minus -1E-6143 -> 1E-6143 +dqmns138 minus -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqMultiply.decTest b/Lib/test/decimaltestdata/dqMultiply.decTest index f9df480bb2a..72cc71f24b3 100644 --- a/Lib/test/decimaltestdata/dqMultiply.decTest +++ b/Lib/test/decimaltestdata/dqMultiply.decTest @@ -1,589 +1,589 @@ ------------------------------------------------------------------------- --- dqMultiply.decTest -- decQuad multiplication -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decQuads only; all arguments are --- representable in a decQuad -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmul000 multiply 2 2 -> 4 -dqmul001 multiply 2 3 -> 6 -dqmul002 multiply 5 1 -> 5 -dqmul003 multiply 5 2 -> 10 -dqmul004 multiply 1.20 2 -> 2.40 -dqmul005 multiply 1.20 0 -> 0.00 -dqmul006 multiply 1.20 -2 -> -2.40 -dqmul007 multiply -1.20 2 -> -2.40 -dqmul008 multiply -1.20 0 -> -0.00 -dqmul009 multiply -1.20 -2 -> 2.40 -dqmul010 multiply 5.09 7.1 -> 36.139 -dqmul011 multiply 2.5 4 -> 10.0 -dqmul012 multiply 2.50 4 -> 10.00 -dqmul013 multiply 1.23456789 1.0000000000000000000000000000 -> 1.234567890000000000000000000000000 Rounded -dqmul015 multiply 2.50 4 -> 10.00 -dqmul016 multiply 9.99999999999999999 9.99999999999999999 -> 99.99999999999999980000000000000000 Inexact Rounded -dqmul017 multiply 9.99999999999999999 -9.99999999999999999 -> -99.99999999999999980000000000000000 Inexact Rounded -dqmul018 multiply -9.99999999999999999 9.99999999999999999 -> -99.99999999999999980000000000000000 Inexact Rounded -dqmul019 multiply -9.99999999999999999 -9.99999999999999999 -> 99.99999999999999980000000000000000 Inexact Rounded - --- zeros, etc. -dqmul021 multiply 0 0 -> 0 -dqmul022 multiply 0 -0 -> -0 -dqmul023 multiply -0 0 -> -0 -dqmul024 multiply -0 -0 -> 0 -dqmul025 multiply -0.0 -0.0 -> 0.00 -dqmul026 multiply -0.0 -0.0 -> 0.00 -dqmul027 multiply -0.0 -0.0 -> 0.00 -dqmul028 multiply -0.0 -0.0 -> 0.00 -dqmul030 multiply 5.00 1E-3 -> 0.00500 -dqmul031 multiply 00.00 0.000 -> 0.00000 -dqmul032 multiply 00.00 0E-3 -> 0.00000 -- rhs is 0 -dqmul033 multiply 0E-3 00.00 -> 0.00000 -- lhs is 0 -dqmul034 multiply -5.00 1E-3 -> -0.00500 -dqmul035 multiply -00.00 0.000 -> -0.00000 -dqmul036 multiply -00.00 0E-3 -> -0.00000 -- rhs is 0 -dqmul037 multiply -0E-3 00.00 -> -0.00000 -- lhs is 0 -dqmul038 multiply 5.00 -1E-3 -> -0.00500 -dqmul039 multiply 00.00 -0.000 -> -0.00000 -dqmul040 multiply 00.00 -0E-3 -> -0.00000 -- rhs is 0 -dqmul041 multiply 0E-3 -00.00 -> -0.00000 -- lhs is 0 -dqmul042 multiply -5.00 -1E-3 -> 0.00500 -dqmul043 multiply -00.00 -0.000 -> 0.00000 -dqmul044 multiply -00.00 -0E-3 -> 0.00000 -- rhs is 0 -dqmul045 multiply -0E-3 -00.00 -> 0.00000 -- lhs is 0 - --- examples from decarith -dqmul050 multiply 1.20 3 -> 3.60 -dqmul051 multiply 7 3 -> 21 -dqmul052 multiply 0.9 0.8 -> 0.72 -dqmul053 multiply 0.9 -0 -> -0.0 -dqmul054 multiply 654321 654321 -> 428135971041 - -dqmul060 multiply 123.45 1e7 -> 1.2345E+9 -dqmul061 multiply 123.45 1e8 -> 1.2345E+10 -dqmul062 multiply 123.45 1e+9 -> 1.2345E+11 -dqmul063 multiply 123.45 1e10 -> 1.2345E+12 -dqmul064 multiply 123.45 1e11 -> 1.2345E+13 -dqmul065 multiply 123.45 1e12 -> 1.2345E+14 -dqmul066 multiply 123.45 1e13 -> 1.2345E+15 - - --- test some intermediate lengths --- 1234567890123456 -dqmul080 multiply 0.1 1230123456456789 -> 123012345645678.9 -dqmul084 multiply 0.1 1230123456456789 -> 123012345645678.9 -dqmul090 multiply 1230123456456789 0.1 -> 123012345645678.9 -dqmul094 multiply 1230123456456789 0.1 -> 123012345645678.9 - --- test some more edge cases and carries -dqmul101 multiply 9 9 -> 81 -dqmul102 multiply 9 90 -> 810 -dqmul103 multiply 9 900 -> 8100 -dqmul104 multiply 9 9000 -> 81000 -dqmul105 multiply 9 90000 -> 810000 -dqmul106 multiply 9 900000 -> 8100000 -dqmul107 multiply 9 9000000 -> 81000000 -dqmul108 multiply 9 90000000 -> 810000000 -dqmul109 multiply 9 900000000 -> 8100000000 -dqmul110 multiply 9 9000000000 -> 81000000000 -dqmul111 multiply 9 90000000000 -> 810000000000 -dqmul112 multiply 9 900000000000 -> 8100000000000 -dqmul113 multiply 9 9000000000000 -> 81000000000000 -dqmul114 multiply 9 90000000000000 -> 810000000000000 -dqmul115 multiply 9 900000000000000 -> 8100000000000000 ---dqmul116 multiply 9 9000000000000000 -> 81000000000000000 ---dqmul117 multiply 9 90000000000000000 -> 810000000000000000 ---dqmul118 multiply 9 900000000000000000 -> 8100000000000000000 ---dqmul119 multiply 9 9000000000000000000 -> 81000000000000000000 ---dqmul120 multiply 9 90000000000000000000 -> 810000000000000000000 ---dqmul121 multiply 9 900000000000000000000 -> 8100000000000000000000 ---dqmul122 multiply 9 9000000000000000000000 -> 81000000000000000000000 ---dqmul123 multiply 9 90000000000000000000000 -> 810000000000000000000000 --- test some more edge cases without carries -dqmul131 multiply 3 3 -> 9 -dqmul132 multiply 3 30 -> 90 -dqmul133 multiply 3 300 -> 900 -dqmul134 multiply 3 3000 -> 9000 -dqmul135 multiply 3 30000 -> 90000 -dqmul136 multiply 3 300000 -> 900000 -dqmul137 multiply 3 3000000 -> 9000000 -dqmul138 multiply 3 30000000 -> 90000000 -dqmul139 multiply 3 300000000 -> 900000000 -dqmul140 multiply 3 3000000000 -> 9000000000 -dqmul141 multiply 3 30000000000 -> 90000000000 -dqmul142 multiply 3 300000000000 -> 900000000000 -dqmul143 multiply 3 3000000000000 -> 9000000000000 -dqmul144 multiply 3 30000000000000 -> 90000000000000 -dqmul145 multiply 3 300000000000000 -> 900000000000000 -dqmul146 multiply 3 3000000000000000 -> 9000000000000000 -dqmul147 multiply 3 30000000000000000 -> 90000000000000000 -dqmul148 multiply 3 300000000000000000 -> 900000000000000000 -dqmul149 multiply 3 3000000000000000000 -> 9000000000000000000 -dqmul150 multiply 3 30000000000000000000 -> 90000000000000000000 -dqmul151 multiply 3 300000000000000000000 -> 900000000000000000000 -dqmul152 multiply 3 3000000000000000000000 -> 9000000000000000000000 -dqmul153 multiply 3 30000000000000000000000 -> 90000000000000000000000 - -dqmul263 multiply 30269.587755640502150977251770554 4.8046009735990873395936309640543 -> 145433.2908011933696719165119928296 Inexact Rounded - --- test some edge cases with exact rounding -dqmul301 multiply 900000000000000000 9 -> 8100000000000000000 -dqmul302 multiply 900000000000000000 90 -> 81000000000000000000 -dqmul303 multiply 900000000000000000 900 -> 810000000000000000000 -dqmul304 multiply 900000000000000000 9000 -> 8100000000000000000000 -dqmul305 multiply 900000000000000000 90000 -> 81000000000000000000000 -dqmul306 multiply 900000000000000000 900000 -> 810000000000000000000000 -dqmul307 multiply 900000000000000000 9000000 -> 8100000000000000000000000 -dqmul308 multiply 900000000000000000 90000000 -> 81000000000000000000000000 -dqmul309 multiply 900000000000000000 900000000 -> 810000000000000000000000000 -dqmul310 multiply 900000000000000000 9000000000 -> 8100000000000000000000000000 -dqmul311 multiply 900000000000000000 90000000000 -> 81000000000000000000000000000 -dqmul312 multiply 900000000000000000 900000000000 -> 810000000000000000000000000000 -dqmul313 multiply 900000000000000000 9000000000000 -> 8100000000000000000000000000000 -dqmul314 multiply 900000000000000000 90000000000000 -> 81000000000000000000000000000000 -dqmul315 multiply 900000000000000000 900000000000000 -> 810000000000000000000000000000000 -dqmul316 multiply 900000000000000000 9000000000000000 -> 8100000000000000000000000000000000 -dqmul317 multiply 9000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+34 Rounded -dqmul318 multiply 90000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+35 Rounded -dqmul319 multiply 900000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+36 Rounded -dqmul320 multiply 9000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+37 Rounded -dqmul321 multiply 90000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+38 Rounded -dqmul322 multiply 900000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+39 Rounded -dqmul323 multiply 9000000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+40 Rounded - --- tryzeros cases -dqmul504 multiply 0E-4260 1000E-4260 -> 0E-6176 Clamped -dqmul505 multiply 100E+4260 0E+4260 -> 0E+6111 Clamped - --- mixed with zeros -dqmul541 multiply 0 -1 -> -0 -dqmul542 multiply -0 -1 -> 0 -dqmul543 multiply 0 1 -> 0 -dqmul544 multiply -0 1 -> -0 -dqmul545 multiply -1 0 -> -0 -dqmul546 multiply -1 -0 -> 0 -dqmul547 multiply 1 0 -> 0 -dqmul548 multiply 1 -0 -> -0 - -dqmul551 multiply 0.0 -1 -> -0.0 -dqmul552 multiply -0.0 -1 -> 0.0 -dqmul553 multiply 0.0 1 -> 0.0 -dqmul554 multiply -0.0 1 -> -0.0 -dqmul555 multiply -1.0 0 -> -0.0 -dqmul556 multiply -1.0 -0 -> 0.0 -dqmul557 multiply 1.0 0 -> 0.0 -dqmul558 multiply 1.0 -0 -> -0.0 - -dqmul561 multiply 0 -1.0 -> -0.0 -dqmul562 multiply -0 -1.0 -> 0.0 -dqmul563 multiply 0 1.0 -> 0.0 -dqmul564 multiply -0 1.0 -> -0.0 -dqmul565 multiply -1 0.0 -> -0.0 -dqmul566 multiply -1 -0.0 -> 0.0 -dqmul567 multiply 1 0.0 -> 0.0 -dqmul568 multiply 1 -0.0 -> -0.0 - -dqmul571 multiply 0.0 -1.0 -> -0.00 -dqmul572 multiply -0.0 -1.0 -> 0.00 -dqmul573 multiply 0.0 1.0 -> 0.00 -dqmul574 multiply -0.0 1.0 -> -0.00 -dqmul575 multiply -1.0 0.0 -> -0.00 -dqmul576 multiply -1.0 -0.0 -> 0.00 -dqmul577 multiply 1.0 0.0 -> 0.00 -dqmul578 multiply 1.0 -0.0 -> -0.00 - - --- Specials -dqmul580 multiply Inf -Inf -> -Infinity -dqmul581 multiply Inf -1000 -> -Infinity -dqmul582 multiply Inf -1 -> -Infinity -dqmul583 multiply Inf -0 -> NaN Invalid_operation -dqmul584 multiply Inf 0 -> NaN Invalid_operation -dqmul585 multiply Inf 1 -> Infinity -dqmul586 multiply Inf 1000 -> Infinity -dqmul587 multiply Inf Inf -> Infinity -dqmul588 multiply -1000 Inf -> -Infinity -dqmul589 multiply -Inf Inf -> -Infinity -dqmul590 multiply -1 Inf -> -Infinity -dqmul591 multiply -0 Inf -> NaN Invalid_operation -dqmul592 multiply 0 Inf -> NaN Invalid_operation -dqmul593 multiply 1 Inf -> Infinity -dqmul594 multiply 1000 Inf -> Infinity -dqmul595 multiply Inf Inf -> Infinity - -dqmul600 multiply -Inf -Inf -> Infinity -dqmul601 multiply -Inf -1000 -> Infinity -dqmul602 multiply -Inf -1 -> Infinity -dqmul603 multiply -Inf -0 -> NaN Invalid_operation -dqmul604 multiply -Inf 0 -> NaN Invalid_operation -dqmul605 multiply -Inf 1 -> -Infinity -dqmul606 multiply -Inf 1000 -> -Infinity -dqmul607 multiply -Inf Inf -> -Infinity -dqmul608 multiply -1000 Inf -> -Infinity -dqmul609 multiply -Inf -Inf -> Infinity -dqmul610 multiply -1 -Inf -> Infinity -dqmul611 multiply -0 -Inf -> NaN Invalid_operation -dqmul612 multiply 0 -Inf -> NaN Invalid_operation -dqmul613 multiply 1 -Inf -> -Infinity -dqmul614 multiply 1000 -Inf -> -Infinity -dqmul615 multiply Inf -Inf -> -Infinity - -dqmul621 multiply NaN -Inf -> NaN -dqmul622 multiply NaN -1000 -> NaN -dqmul623 multiply NaN -1 -> NaN -dqmul624 multiply NaN -0 -> NaN -dqmul625 multiply NaN 0 -> NaN -dqmul626 multiply NaN 1 -> NaN -dqmul627 multiply NaN 1000 -> NaN -dqmul628 multiply NaN Inf -> NaN -dqmul629 multiply NaN NaN -> NaN -dqmul630 multiply -Inf NaN -> NaN -dqmul631 multiply -1000 NaN -> NaN -dqmul632 multiply -1 NaN -> NaN -dqmul633 multiply -0 NaN -> NaN -dqmul634 multiply 0 NaN -> NaN -dqmul635 multiply 1 NaN -> NaN -dqmul636 multiply 1000 NaN -> NaN -dqmul637 multiply Inf NaN -> NaN - -dqmul641 multiply sNaN -Inf -> NaN Invalid_operation -dqmul642 multiply sNaN -1000 -> NaN Invalid_operation -dqmul643 multiply sNaN -1 -> NaN Invalid_operation -dqmul644 multiply sNaN -0 -> NaN Invalid_operation -dqmul645 multiply sNaN 0 -> NaN Invalid_operation -dqmul646 multiply sNaN 1 -> NaN Invalid_operation -dqmul647 multiply sNaN 1000 -> NaN Invalid_operation -dqmul648 multiply sNaN NaN -> NaN Invalid_operation -dqmul649 multiply sNaN sNaN -> NaN Invalid_operation -dqmul650 multiply NaN sNaN -> NaN Invalid_operation -dqmul651 multiply -Inf sNaN -> NaN Invalid_operation -dqmul652 multiply -1000 sNaN -> NaN Invalid_operation -dqmul653 multiply -1 sNaN -> NaN Invalid_operation -dqmul654 multiply -0 sNaN -> NaN Invalid_operation -dqmul655 multiply 0 sNaN -> NaN Invalid_operation -dqmul656 multiply 1 sNaN -> NaN Invalid_operation -dqmul657 multiply 1000 sNaN -> NaN Invalid_operation -dqmul658 multiply Inf sNaN -> NaN Invalid_operation -dqmul659 multiply NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmul661 multiply NaN9 -Inf -> NaN9 -dqmul662 multiply NaN8 999 -> NaN8 -dqmul663 multiply NaN71 Inf -> NaN71 -dqmul664 multiply NaN6 NaN5 -> NaN6 -dqmul665 multiply -Inf NaN4 -> NaN4 -dqmul666 multiply -999 NaN33 -> NaN33 -dqmul667 multiply Inf NaN2 -> NaN2 - -dqmul671 multiply sNaN99 -Inf -> NaN99 Invalid_operation -dqmul672 multiply sNaN98 -11 -> NaN98 Invalid_operation -dqmul673 multiply sNaN97 NaN -> NaN97 Invalid_operation -dqmul674 multiply sNaN16 sNaN94 -> NaN16 Invalid_operation -dqmul675 multiply NaN95 sNaN93 -> NaN93 Invalid_operation -dqmul676 multiply -Inf sNaN92 -> NaN92 Invalid_operation -dqmul677 multiply 088 sNaN91 -> NaN91 Invalid_operation -dqmul678 multiply Inf sNaN90 -> NaN90 Invalid_operation -dqmul679 multiply NaN sNaN89 -> NaN89 Invalid_operation - -dqmul681 multiply -NaN9 -Inf -> -NaN9 -dqmul682 multiply -NaN8 999 -> -NaN8 -dqmul683 multiply -NaN71 Inf -> -NaN71 -dqmul684 multiply -NaN6 -NaN5 -> -NaN6 -dqmul685 multiply -Inf -NaN4 -> -NaN4 -dqmul686 multiply -999 -NaN33 -> -NaN33 -dqmul687 multiply Inf -NaN2 -> -NaN2 - -dqmul691 multiply -sNaN99 -Inf -> -NaN99 Invalid_operation -dqmul692 multiply -sNaN98 -11 -> -NaN98 Invalid_operation -dqmul693 multiply -sNaN97 NaN -> -NaN97 Invalid_operation -dqmul694 multiply -sNaN16 -sNaN94 -> -NaN16 Invalid_operation -dqmul695 multiply -NaN95 -sNaN93 -> -NaN93 Invalid_operation -dqmul696 multiply -Inf -sNaN92 -> -NaN92 Invalid_operation -dqmul697 multiply 088 -sNaN91 -> -NaN91 Invalid_operation -dqmul698 multiply Inf -sNaN90 -> -NaN90 Invalid_operation -dqmul699 multiply -NaN -sNaN89 -> -NaN89 Invalid_operation - -dqmul701 multiply -NaN -Inf -> -NaN -dqmul702 multiply -NaN 999 -> -NaN -dqmul703 multiply -NaN Inf -> -NaN -dqmul704 multiply -NaN -NaN -> -NaN -dqmul705 multiply -Inf -NaN0 -> -NaN -dqmul706 multiply -999 -NaN -> -NaN -dqmul707 multiply Inf -NaN -> -NaN - -dqmul711 multiply -sNaN -Inf -> -NaN Invalid_operation -dqmul712 multiply -sNaN -11 -> -NaN Invalid_operation -dqmul713 multiply -sNaN00 NaN -> -NaN Invalid_operation -dqmul714 multiply -sNaN -sNaN -> -NaN Invalid_operation -dqmul715 multiply -NaN -sNaN -> -NaN Invalid_operation -dqmul716 multiply -Inf -sNaN -> -NaN Invalid_operation -dqmul717 multiply 088 -sNaN -> -NaN Invalid_operation -dqmul718 multiply Inf -sNaN -> -NaN Invalid_operation -dqmul719 multiply -NaN -sNaN -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results --- signs -dqmul751 multiply 1e+4277 1e+3311 -> Infinity Overflow Inexact Rounded -dqmul752 multiply 1e+4277 -1e+3311 -> -Infinity Overflow Inexact Rounded -dqmul753 multiply -1e+4277 1e+3311 -> -Infinity Overflow Inexact Rounded -dqmul754 multiply -1e+4277 -1e+3311 -> Infinity Overflow Inexact Rounded -dqmul755 multiply 1e-4277 1e-3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul756 multiply 1e-4277 -1e-3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul757 multiply -1e-4277 1e-3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul758 multiply -1e-4277 -1e-3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dqmul760 multiply 1e-6069 1e-101 -> 1E-6170 Subnormal -dqmul761 multiply 1e-6069 1e-102 -> 1E-6171 Subnormal -dqmul762 multiply 1e-6069 1e-103 -> 1E-6172 Subnormal -dqmul763 multiply 1e-6069 1e-104 -> 1E-6173 Subnormal -dqmul764 multiply 1e-6069 1e-105 -> 1E-6174 Subnormal -dqmul765 multiply 1e-6069 1e-106 -> 1E-6175 Subnormal -dqmul766 multiply 1e-6069 1e-107 -> 1E-6176 Subnormal -dqmul767 multiply 1e-6069 1e-108 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul768 multiply 1e-6069 1e-109 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul769 multiply 1e-6069 1e-110 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -dqmul770 multiply 1e+40 1e+6101 -> 1.000000000000000000000000000000E+6141 Clamped -dqmul771 multiply 1e+40 1e+6102 -> 1.0000000000000000000000000000000E+6142 Clamped -dqmul772 multiply 1e+40 1e+6103 -> 1.00000000000000000000000000000000E+6143 Clamped -dqmul773 multiply 1e+40 1e+6104 -> 1.000000000000000000000000000000000E+6144 Clamped -dqmul774 multiply 1e+40 1e+6105 -> Infinity Overflow Inexact Rounded -dqmul775 multiply 1e+40 1e+6106 -> Infinity Overflow Inexact Rounded -dqmul776 multiply 1e+40 1e+6107 -> Infinity Overflow Inexact Rounded -dqmul777 multiply 1e+40 1e+6108 -> Infinity Overflow Inexact Rounded -dqmul778 multiply 1e+40 1e+6109 -> Infinity Overflow Inexact Rounded -dqmul779 multiply 1e+40 1e+6110 -> Infinity Overflow Inexact Rounded - -dqmul801 multiply 1.0000E-6172 1 -> 1.0000E-6172 Subnormal -dqmul802 multiply 1.000E-6172 1e-1 -> 1.000E-6173 Subnormal -dqmul803 multiply 1.00E-6172 1e-2 -> 1.00E-6174 Subnormal -dqmul804 multiply 1.0E-6172 1e-3 -> 1.0E-6175 Subnormal -dqmul805 multiply 1.0E-6172 1e-4 -> 1E-6176 Subnormal Rounded -dqmul806 multiply 1.3E-6172 1e-4 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqmul807 multiply 1.5E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul808 multiply 1.7E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul809 multiply 2.3E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul810 multiply 2.5E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul811 multiply 2.7E-6172 1e-4 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqmul812 multiply 1.49E-6172 1e-4 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqmul813 multiply 1.50E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul814 multiply 1.51E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul815 multiply 2.49E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul816 multiply 2.50E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul817 multiply 2.51E-6172 1e-4 -> 3E-6176 Underflow Subnormal Inexact Rounded - -dqmul818 multiply 1E-6172 1e-4 -> 1E-6176 Subnormal -dqmul819 multiply 3E-6172 1e-5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul820 multiply 5E-6172 1e-5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul821 multiply 7E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqmul822 multiply 9E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqmul823 multiply 9.9E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded - -dqmul824 multiply 1E-6172 -1e-4 -> -1E-6176 Subnormal -dqmul825 multiply 3E-6172 -1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul826 multiply -5E-6172 1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul827 multiply 7E-6172 -1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqmul828 multiply -9E-6172 1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqmul829 multiply 9.9E-6172 -1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqmul830 multiply 3.0E-6172 -1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqmul831 multiply 1.0E-5977 1e-200 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul832 multiply 1.0E-5977 1e-199 -> 1E-6176 Subnormal Rounded -dqmul833 multiply 1.0E-5977 1e-198 -> 1.0E-6175 Subnormal -dqmul834 multiply 2.0E-5977 2e-198 -> 4.0E-6175 Subnormal -dqmul835 multiply 4.0E-5977 4e-198 -> 1.60E-6174 Subnormal -dqmul836 multiply 10.0E-5977 10e-198 -> 1.000E-6173 Subnormal -dqmul837 multiply 30.0E-5977 30e-198 -> 9.000E-6173 Subnormal -dqmul838 multiply 40.0E-5982 40e-166 -> 1.6000E-6145 Subnormal -dqmul839 multiply 40.0E-5982 40e-165 -> 1.6000E-6144 Subnormal -dqmul840 multiply 40.0E-5982 40e-164 -> 1.6000E-6143 - --- Long operand overflow may be a different path -dqmul870 multiply 100 9.999E+6143 -> Infinity Inexact Overflow Rounded -dqmul871 multiply 100 -9.999E+6143 -> -Infinity Inexact Overflow Rounded -dqmul872 multiply 9.999E+6143 100 -> Infinity Inexact Overflow Rounded -dqmul873 multiply -9.999E+6143 100 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -dqmul881 multiply 1.2347E-6133 1.2347E-40 -> 1.524E-6173 Inexact Rounded Subnormal Underflow -dqmul882 multiply 1.234E-6133 1.234E-40 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqmul883 multiply 1.23E-6133 1.23E-40 -> 1.513E-6173 Inexact Rounded Subnormal Underflow -dqmul884 multiply 1.2E-6133 1.2E-40 -> 1.44E-6173 Subnormal -dqmul885 multiply 1.2E-6133 1.2E-41 -> 1.44E-6174 Subnormal -dqmul886 multiply 1.2E-6133 1.2E-42 -> 1.4E-6175 Subnormal Inexact Rounded Underflow -dqmul887 multiply 1.2E-6133 1.3E-42 -> 1.6E-6175 Subnormal Inexact Rounded Underflow -dqmul888 multiply 1.3E-6133 1.3E-42 -> 1.7E-6175 Subnormal Inexact Rounded Underflow -dqmul889 multiply 1.3E-6133 1.3E-43 -> 2E-6176 Subnormal Inexact Rounded Underflow -dqmul890 multiply 1.3E-6134 1.3E-43 -> 0E-6176 Clamped Subnormal Inexact Rounded Underflow - -dqmul891 multiply 1.2345E-39 1.234E-6133 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow -dqmul892 multiply 1.23456E-39 1.234E-6133 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow -dqmul893 multiply 1.2345E-40 1.234E-6133 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqmul894 multiply 1.23456E-40 1.234E-6133 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqmul895 multiply 1.2345E-41 1.234E-6133 -> 1.52E-6174 Inexact Rounded Subnormal Underflow -dqmul896 multiply 1.23456E-41 1.234E-6133 -> 1.52E-6174 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow --- prove operands are exact -dqmul906 multiply 9.999999999999999999999999999999999E-6143 1 -> 9.999999999999999999999999999999999E-6143 -dqmul907 multiply 1 0.09999999999999999999999999999999999 -> 0.09999999999999999999999999999999999 --- the next rounds to Nmin -dqmul908 multiply 9.999999999999999999999999999999999E-6143 0.09999999999999999999999999999999999 -> 1.000000000000000000000000000000000E-6143 Underflow Inexact Subnormal Rounded - --- hugest -dqmul909 multiply 9999999999999999999999999999999999 9999999999999999999999999999999999 -> 9.999999999999999999999999999999998E+67 Inexact Rounded --- VG case -dqmul910 multiply 8.81125000000001349436E-1548 8.000000000000000000E-1550 -> 7.049000000000010795488000000000000E-3097 Rounded - --- Examples from SQL proposal (Krishna Kulkarni) -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 -dqmul911 multiply 130E-2 120E-2 -> 1.5600 -dqmul912 multiply 130E-2 12E-1 -> 1.560 -dqmul913 multiply 130E-2 1E0 -> 1.30 -dqmul914 multiply 1E2 1E4 -> 1E+6 - --- power-of-ten edge cases -dqmul1001 multiply 1 10 -> 10 -dqmul1002 multiply 1 100 -> 100 -dqmul1003 multiply 1 1000 -> 1000 -dqmul1004 multiply 1 10000 -> 10000 -dqmul1005 multiply 1 100000 -> 100000 -dqmul1006 multiply 1 1000000 -> 1000000 -dqmul1007 multiply 1 10000000 -> 10000000 -dqmul1008 multiply 1 100000000 -> 100000000 -dqmul1009 multiply 1 1000000000 -> 1000000000 -dqmul1010 multiply 1 10000000000 -> 10000000000 -dqmul1011 multiply 1 100000000000 -> 100000000000 -dqmul1012 multiply 1 1000000000000 -> 1000000000000 -dqmul1013 multiply 1 10000000000000 -> 10000000000000 -dqmul1014 multiply 1 100000000000000 -> 100000000000000 -dqmul1015 multiply 1 1000000000000000 -> 1000000000000000 - -dqmul1016 multiply 1 1000000000000000000 -> 1000000000000000000 -dqmul1017 multiply 1 100000000000000000000000000 -> 100000000000000000000000000 -dqmul1018 multiply 1 1000000000000000000000000000 -> 1000000000000000000000000000 -dqmul1019 multiply 1 10000000000000000000000000000 -> 10000000000000000000000000000 -dqmul1020 multiply 1 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1021 multiply 10 1 -> 10 -dqmul1022 multiply 10 10 -> 100 -dqmul1023 multiply 10 100 -> 1000 -dqmul1024 multiply 10 1000 -> 10000 -dqmul1025 multiply 10 10000 -> 100000 -dqmul1026 multiply 10 100000 -> 1000000 -dqmul1027 multiply 10 1000000 -> 10000000 -dqmul1028 multiply 10 10000000 -> 100000000 -dqmul1029 multiply 10 100000000 -> 1000000000 -dqmul1030 multiply 10 1000000000 -> 10000000000 -dqmul1031 multiply 10 10000000000 -> 100000000000 -dqmul1032 multiply 10 100000000000 -> 1000000000000 -dqmul1033 multiply 10 1000000000000 -> 10000000000000 -dqmul1034 multiply 10 10000000000000 -> 100000000000000 -dqmul1035 multiply 10 100000000000000 -> 1000000000000000 - -dqmul1036 multiply 10 100000000000000000 -> 1000000000000000000 -dqmul1037 multiply 10 10000000000000000000000000 -> 100000000000000000000000000 -dqmul1038 multiply 10 100000000000000000000000000 -> 1000000000000000000000000000 -dqmul1039 multiply 10 1000000000000000000000000000 -> 10000000000000000000000000000 -dqmul1040 multiply 10 100000000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1041 multiply 100 0.1 -> 10.0 -dqmul1042 multiply 100 1 -> 100 -dqmul1043 multiply 100 10 -> 1000 -dqmul1044 multiply 100 100 -> 10000 -dqmul1045 multiply 100 1000 -> 100000 -dqmul1046 multiply 100 10000 -> 1000000 -dqmul1047 multiply 100 100000 -> 10000000 -dqmul1048 multiply 100 1000000 -> 100000000 -dqmul1049 multiply 100 10000000 -> 1000000000 -dqmul1050 multiply 100 100000000 -> 10000000000 -dqmul1051 multiply 100 1000000000 -> 100000000000 -dqmul1052 multiply 100 10000000000 -> 1000000000000 -dqmul1053 multiply 100 100000000000 -> 10000000000000 -dqmul1054 multiply 100 1000000000000 -> 100000000000000 -dqmul1055 multiply 100 10000000000000 -> 1000000000000000 - -dqmul1056 multiply 100 10000000000000000 -> 1000000000000000000 -dqmul1057 multiply 100 1000000000000000000000000 -> 100000000000000000000000000 -dqmul1058 multiply 100 10000000000000000000000000 -> 1000000000000000000000000000 -dqmul1059 multiply 100 100000000000000000000000000 -> 10000000000000000000000000000 -dqmul1060 multiply 100 10000000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1061 multiply 1000 0.01 -> 10.00 -dqmul1062 multiply 1000 0.1 -> 100.0 -dqmul1063 multiply 1000 1 -> 1000 -dqmul1064 multiply 1000 10 -> 10000 -dqmul1065 multiply 1000 100 -> 100000 -dqmul1066 multiply 1000 1000 -> 1000000 -dqmul1067 multiply 1000 10000 -> 10000000 -dqmul1068 multiply 1000 100000 -> 100000000 -dqmul1069 multiply 1000 1000000 -> 1000000000 -dqmul1070 multiply 1000 10000000 -> 10000000000 -dqmul1071 multiply 1000 100000000 -> 100000000000 -dqmul1072 multiply 1000 1000000000 -> 1000000000000 -dqmul1073 multiply 1000 10000000000 -> 10000000000000 -dqmul1074 multiply 1000 100000000000 -> 100000000000000 -dqmul1075 multiply 1000 1000000000000 -> 1000000000000000 - -dqmul1076 multiply 1000 1000000000000000 -> 1000000000000000000 -dqmul1077 multiply 1000 100000000000000000000000 -> 100000000000000000000000000 -dqmul1078 multiply 1000 1000000000000000000000000 -> 1000000000000000000000000000 -dqmul1079 multiply 1000 10000000000000000000000000 -> 10000000000000000000000000000 -dqmul1080 multiply 1000 1000000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1081 multiply 10000 0.001 -> 10.000 -dqmul1082 multiply 10000 0.01 -> 100.00 -dqmul1083 multiply 10000 0.1 -> 1000.0 -dqmul1084 multiply 10000 1 -> 10000 -dqmul1085 multiply 10000 10 -> 100000 -dqmul1086 multiply 10000 100 -> 1000000 -dqmul1087 multiply 10000 1000 -> 10000000 -dqmul1088 multiply 10000 10000 -> 100000000 -dqmul1089 multiply 10000 100000 -> 1000000000 -dqmul1090 multiply 10000 1000000 -> 10000000000 -dqmul1091 multiply 10000 10000000 -> 100000000000 -dqmul1092 multiply 10000 100000000 -> 1000000000000 -dqmul1093 multiply 10000 1000000000 -> 10000000000000 -dqmul1094 multiply 10000 10000000000 -> 100000000000000 -dqmul1095 multiply 10000 100000000000 -> 1000000000000000 - -dqmul1096 multiply 10000 100000000000000 -> 1000000000000000000 -dqmul1097 multiply 10000 10000000000000000000000 -> 100000000000000000000000000 -dqmul1098 multiply 10000 100000000000000000000000 -> 1000000000000000000000000000 -dqmul1099 multiply 10000 1000000000000000000000000 -> 10000000000000000000000000000 -dqmul1100 multiply 10000 100000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1107 multiply 10000 99999999999 -> 999999999990000 -dqmul1108 multiply 10000 99999999999 -> 999999999990000 - --- Null tests -dqmul9990 multiply 10 # -> NaN Invalid_operation -dqmul9991 multiply # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqMultiply.decTest -- decQuad multiplication -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decQuads only; all arguments are +-- representable in a decQuad +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmul000 multiply 2 2 -> 4 +dqmul001 multiply 2 3 -> 6 +dqmul002 multiply 5 1 -> 5 +dqmul003 multiply 5 2 -> 10 +dqmul004 multiply 1.20 2 -> 2.40 +dqmul005 multiply 1.20 0 -> 0.00 +dqmul006 multiply 1.20 -2 -> -2.40 +dqmul007 multiply -1.20 2 -> -2.40 +dqmul008 multiply -1.20 0 -> -0.00 +dqmul009 multiply -1.20 -2 -> 2.40 +dqmul010 multiply 5.09 7.1 -> 36.139 +dqmul011 multiply 2.5 4 -> 10.0 +dqmul012 multiply 2.50 4 -> 10.00 +dqmul013 multiply 1.23456789 1.0000000000000000000000000000 -> 1.234567890000000000000000000000000 Rounded +dqmul015 multiply 2.50 4 -> 10.00 +dqmul016 multiply 9.99999999999999999 9.99999999999999999 -> 99.99999999999999980000000000000000 Inexact Rounded +dqmul017 multiply 9.99999999999999999 -9.99999999999999999 -> -99.99999999999999980000000000000000 Inexact Rounded +dqmul018 multiply -9.99999999999999999 9.99999999999999999 -> -99.99999999999999980000000000000000 Inexact Rounded +dqmul019 multiply -9.99999999999999999 -9.99999999999999999 -> 99.99999999999999980000000000000000 Inexact Rounded + +-- zeros, etc. +dqmul021 multiply 0 0 -> 0 +dqmul022 multiply 0 -0 -> -0 +dqmul023 multiply -0 0 -> -0 +dqmul024 multiply -0 -0 -> 0 +dqmul025 multiply -0.0 -0.0 -> 0.00 +dqmul026 multiply -0.0 -0.0 -> 0.00 +dqmul027 multiply -0.0 -0.0 -> 0.00 +dqmul028 multiply -0.0 -0.0 -> 0.00 +dqmul030 multiply 5.00 1E-3 -> 0.00500 +dqmul031 multiply 00.00 0.000 -> 0.00000 +dqmul032 multiply 00.00 0E-3 -> 0.00000 -- rhs is 0 +dqmul033 multiply 0E-3 00.00 -> 0.00000 -- lhs is 0 +dqmul034 multiply -5.00 1E-3 -> -0.00500 +dqmul035 multiply -00.00 0.000 -> -0.00000 +dqmul036 multiply -00.00 0E-3 -> -0.00000 -- rhs is 0 +dqmul037 multiply -0E-3 00.00 -> -0.00000 -- lhs is 0 +dqmul038 multiply 5.00 -1E-3 -> -0.00500 +dqmul039 multiply 00.00 -0.000 -> -0.00000 +dqmul040 multiply 00.00 -0E-3 -> -0.00000 -- rhs is 0 +dqmul041 multiply 0E-3 -00.00 -> -0.00000 -- lhs is 0 +dqmul042 multiply -5.00 -1E-3 -> 0.00500 +dqmul043 multiply -00.00 -0.000 -> 0.00000 +dqmul044 multiply -00.00 -0E-3 -> 0.00000 -- rhs is 0 +dqmul045 multiply -0E-3 -00.00 -> 0.00000 -- lhs is 0 + +-- examples from decarith +dqmul050 multiply 1.20 3 -> 3.60 +dqmul051 multiply 7 3 -> 21 +dqmul052 multiply 0.9 0.8 -> 0.72 +dqmul053 multiply 0.9 -0 -> -0.0 +dqmul054 multiply 654321 654321 -> 428135971041 + +dqmul060 multiply 123.45 1e7 -> 1.2345E+9 +dqmul061 multiply 123.45 1e8 -> 1.2345E+10 +dqmul062 multiply 123.45 1e+9 -> 1.2345E+11 +dqmul063 multiply 123.45 1e10 -> 1.2345E+12 +dqmul064 multiply 123.45 1e11 -> 1.2345E+13 +dqmul065 multiply 123.45 1e12 -> 1.2345E+14 +dqmul066 multiply 123.45 1e13 -> 1.2345E+15 + + +-- test some intermediate lengths +-- 1234567890123456 +dqmul080 multiply 0.1 1230123456456789 -> 123012345645678.9 +dqmul084 multiply 0.1 1230123456456789 -> 123012345645678.9 +dqmul090 multiply 1230123456456789 0.1 -> 123012345645678.9 +dqmul094 multiply 1230123456456789 0.1 -> 123012345645678.9 + +-- test some more edge cases and carries +dqmul101 multiply 9 9 -> 81 +dqmul102 multiply 9 90 -> 810 +dqmul103 multiply 9 900 -> 8100 +dqmul104 multiply 9 9000 -> 81000 +dqmul105 multiply 9 90000 -> 810000 +dqmul106 multiply 9 900000 -> 8100000 +dqmul107 multiply 9 9000000 -> 81000000 +dqmul108 multiply 9 90000000 -> 810000000 +dqmul109 multiply 9 900000000 -> 8100000000 +dqmul110 multiply 9 9000000000 -> 81000000000 +dqmul111 multiply 9 90000000000 -> 810000000000 +dqmul112 multiply 9 900000000000 -> 8100000000000 +dqmul113 multiply 9 9000000000000 -> 81000000000000 +dqmul114 multiply 9 90000000000000 -> 810000000000000 +dqmul115 multiply 9 900000000000000 -> 8100000000000000 +--dqmul116 multiply 9 9000000000000000 -> 81000000000000000 +--dqmul117 multiply 9 90000000000000000 -> 810000000000000000 +--dqmul118 multiply 9 900000000000000000 -> 8100000000000000000 +--dqmul119 multiply 9 9000000000000000000 -> 81000000000000000000 +--dqmul120 multiply 9 90000000000000000000 -> 810000000000000000000 +--dqmul121 multiply 9 900000000000000000000 -> 8100000000000000000000 +--dqmul122 multiply 9 9000000000000000000000 -> 81000000000000000000000 +--dqmul123 multiply 9 90000000000000000000000 -> 810000000000000000000000 +-- test some more edge cases without carries +dqmul131 multiply 3 3 -> 9 +dqmul132 multiply 3 30 -> 90 +dqmul133 multiply 3 300 -> 900 +dqmul134 multiply 3 3000 -> 9000 +dqmul135 multiply 3 30000 -> 90000 +dqmul136 multiply 3 300000 -> 900000 +dqmul137 multiply 3 3000000 -> 9000000 +dqmul138 multiply 3 30000000 -> 90000000 +dqmul139 multiply 3 300000000 -> 900000000 +dqmul140 multiply 3 3000000000 -> 9000000000 +dqmul141 multiply 3 30000000000 -> 90000000000 +dqmul142 multiply 3 300000000000 -> 900000000000 +dqmul143 multiply 3 3000000000000 -> 9000000000000 +dqmul144 multiply 3 30000000000000 -> 90000000000000 +dqmul145 multiply 3 300000000000000 -> 900000000000000 +dqmul146 multiply 3 3000000000000000 -> 9000000000000000 +dqmul147 multiply 3 30000000000000000 -> 90000000000000000 +dqmul148 multiply 3 300000000000000000 -> 900000000000000000 +dqmul149 multiply 3 3000000000000000000 -> 9000000000000000000 +dqmul150 multiply 3 30000000000000000000 -> 90000000000000000000 +dqmul151 multiply 3 300000000000000000000 -> 900000000000000000000 +dqmul152 multiply 3 3000000000000000000000 -> 9000000000000000000000 +dqmul153 multiply 3 30000000000000000000000 -> 90000000000000000000000 + +dqmul263 multiply 30269.587755640502150977251770554 4.8046009735990873395936309640543 -> 145433.2908011933696719165119928296 Inexact Rounded + +-- test some edge cases with exact rounding +dqmul301 multiply 900000000000000000 9 -> 8100000000000000000 +dqmul302 multiply 900000000000000000 90 -> 81000000000000000000 +dqmul303 multiply 900000000000000000 900 -> 810000000000000000000 +dqmul304 multiply 900000000000000000 9000 -> 8100000000000000000000 +dqmul305 multiply 900000000000000000 90000 -> 81000000000000000000000 +dqmul306 multiply 900000000000000000 900000 -> 810000000000000000000000 +dqmul307 multiply 900000000000000000 9000000 -> 8100000000000000000000000 +dqmul308 multiply 900000000000000000 90000000 -> 81000000000000000000000000 +dqmul309 multiply 900000000000000000 900000000 -> 810000000000000000000000000 +dqmul310 multiply 900000000000000000 9000000000 -> 8100000000000000000000000000 +dqmul311 multiply 900000000000000000 90000000000 -> 81000000000000000000000000000 +dqmul312 multiply 900000000000000000 900000000000 -> 810000000000000000000000000000 +dqmul313 multiply 900000000000000000 9000000000000 -> 8100000000000000000000000000000 +dqmul314 multiply 900000000000000000 90000000000000 -> 81000000000000000000000000000000 +dqmul315 multiply 900000000000000000 900000000000000 -> 810000000000000000000000000000000 +dqmul316 multiply 900000000000000000 9000000000000000 -> 8100000000000000000000000000000000 +dqmul317 multiply 9000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+34 Rounded +dqmul318 multiply 90000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+35 Rounded +dqmul319 multiply 900000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+36 Rounded +dqmul320 multiply 9000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+37 Rounded +dqmul321 multiply 90000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+38 Rounded +dqmul322 multiply 900000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+39 Rounded +dqmul323 multiply 9000000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+40 Rounded + +-- tryzeros cases +dqmul504 multiply 0E-4260 1000E-4260 -> 0E-6176 Clamped +dqmul505 multiply 100E+4260 0E+4260 -> 0E+6111 Clamped + +-- mixed with zeros +dqmul541 multiply 0 -1 -> -0 +dqmul542 multiply -0 -1 -> 0 +dqmul543 multiply 0 1 -> 0 +dqmul544 multiply -0 1 -> -0 +dqmul545 multiply -1 0 -> -0 +dqmul546 multiply -1 -0 -> 0 +dqmul547 multiply 1 0 -> 0 +dqmul548 multiply 1 -0 -> -0 + +dqmul551 multiply 0.0 -1 -> -0.0 +dqmul552 multiply -0.0 -1 -> 0.0 +dqmul553 multiply 0.0 1 -> 0.0 +dqmul554 multiply -0.0 1 -> -0.0 +dqmul555 multiply -1.0 0 -> -0.0 +dqmul556 multiply -1.0 -0 -> 0.0 +dqmul557 multiply 1.0 0 -> 0.0 +dqmul558 multiply 1.0 -0 -> -0.0 + +dqmul561 multiply 0 -1.0 -> -0.0 +dqmul562 multiply -0 -1.0 -> 0.0 +dqmul563 multiply 0 1.0 -> 0.0 +dqmul564 multiply -0 1.0 -> -0.0 +dqmul565 multiply -1 0.0 -> -0.0 +dqmul566 multiply -1 -0.0 -> 0.0 +dqmul567 multiply 1 0.0 -> 0.0 +dqmul568 multiply 1 -0.0 -> -0.0 + +dqmul571 multiply 0.0 -1.0 -> -0.00 +dqmul572 multiply -0.0 -1.0 -> 0.00 +dqmul573 multiply 0.0 1.0 -> 0.00 +dqmul574 multiply -0.0 1.0 -> -0.00 +dqmul575 multiply -1.0 0.0 -> -0.00 +dqmul576 multiply -1.0 -0.0 -> 0.00 +dqmul577 multiply 1.0 0.0 -> 0.00 +dqmul578 multiply 1.0 -0.0 -> -0.00 + + +-- Specials +dqmul580 multiply Inf -Inf -> -Infinity +dqmul581 multiply Inf -1000 -> -Infinity +dqmul582 multiply Inf -1 -> -Infinity +dqmul583 multiply Inf -0 -> NaN Invalid_operation +dqmul584 multiply Inf 0 -> NaN Invalid_operation +dqmul585 multiply Inf 1 -> Infinity +dqmul586 multiply Inf 1000 -> Infinity +dqmul587 multiply Inf Inf -> Infinity +dqmul588 multiply -1000 Inf -> -Infinity +dqmul589 multiply -Inf Inf -> -Infinity +dqmul590 multiply -1 Inf -> -Infinity +dqmul591 multiply -0 Inf -> NaN Invalid_operation +dqmul592 multiply 0 Inf -> NaN Invalid_operation +dqmul593 multiply 1 Inf -> Infinity +dqmul594 multiply 1000 Inf -> Infinity +dqmul595 multiply Inf Inf -> Infinity + +dqmul600 multiply -Inf -Inf -> Infinity +dqmul601 multiply -Inf -1000 -> Infinity +dqmul602 multiply -Inf -1 -> Infinity +dqmul603 multiply -Inf -0 -> NaN Invalid_operation +dqmul604 multiply -Inf 0 -> NaN Invalid_operation +dqmul605 multiply -Inf 1 -> -Infinity +dqmul606 multiply -Inf 1000 -> -Infinity +dqmul607 multiply -Inf Inf -> -Infinity +dqmul608 multiply -1000 Inf -> -Infinity +dqmul609 multiply -Inf -Inf -> Infinity +dqmul610 multiply -1 -Inf -> Infinity +dqmul611 multiply -0 -Inf -> NaN Invalid_operation +dqmul612 multiply 0 -Inf -> NaN Invalid_operation +dqmul613 multiply 1 -Inf -> -Infinity +dqmul614 multiply 1000 -Inf -> -Infinity +dqmul615 multiply Inf -Inf -> -Infinity + +dqmul621 multiply NaN -Inf -> NaN +dqmul622 multiply NaN -1000 -> NaN +dqmul623 multiply NaN -1 -> NaN +dqmul624 multiply NaN -0 -> NaN +dqmul625 multiply NaN 0 -> NaN +dqmul626 multiply NaN 1 -> NaN +dqmul627 multiply NaN 1000 -> NaN +dqmul628 multiply NaN Inf -> NaN +dqmul629 multiply NaN NaN -> NaN +dqmul630 multiply -Inf NaN -> NaN +dqmul631 multiply -1000 NaN -> NaN +dqmul632 multiply -1 NaN -> NaN +dqmul633 multiply -0 NaN -> NaN +dqmul634 multiply 0 NaN -> NaN +dqmul635 multiply 1 NaN -> NaN +dqmul636 multiply 1000 NaN -> NaN +dqmul637 multiply Inf NaN -> NaN + +dqmul641 multiply sNaN -Inf -> NaN Invalid_operation +dqmul642 multiply sNaN -1000 -> NaN Invalid_operation +dqmul643 multiply sNaN -1 -> NaN Invalid_operation +dqmul644 multiply sNaN -0 -> NaN Invalid_operation +dqmul645 multiply sNaN 0 -> NaN Invalid_operation +dqmul646 multiply sNaN 1 -> NaN Invalid_operation +dqmul647 multiply sNaN 1000 -> NaN Invalid_operation +dqmul648 multiply sNaN NaN -> NaN Invalid_operation +dqmul649 multiply sNaN sNaN -> NaN Invalid_operation +dqmul650 multiply NaN sNaN -> NaN Invalid_operation +dqmul651 multiply -Inf sNaN -> NaN Invalid_operation +dqmul652 multiply -1000 sNaN -> NaN Invalid_operation +dqmul653 multiply -1 sNaN -> NaN Invalid_operation +dqmul654 multiply -0 sNaN -> NaN Invalid_operation +dqmul655 multiply 0 sNaN -> NaN Invalid_operation +dqmul656 multiply 1 sNaN -> NaN Invalid_operation +dqmul657 multiply 1000 sNaN -> NaN Invalid_operation +dqmul658 multiply Inf sNaN -> NaN Invalid_operation +dqmul659 multiply NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmul661 multiply NaN9 -Inf -> NaN9 +dqmul662 multiply NaN8 999 -> NaN8 +dqmul663 multiply NaN71 Inf -> NaN71 +dqmul664 multiply NaN6 NaN5 -> NaN6 +dqmul665 multiply -Inf NaN4 -> NaN4 +dqmul666 multiply -999 NaN33 -> NaN33 +dqmul667 multiply Inf NaN2 -> NaN2 + +dqmul671 multiply sNaN99 -Inf -> NaN99 Invalid_operation +dqmul672 multiply sNaN98 -11 -> NaN98 Invalid_operation +dqmul673 multiply sNaN97 NaN -> NaN97 Invalid_operation +dqmul674 multiply sNaN16 sNaN94 -> NaN16 Invalid_operation +dqmul675 multiply NaN95 sNaN93 -> NaN93 Invalid_operation +dqmul676 multiply -Inf sNaN92 -> NaN92 Invalid_operation +dqmul677 multiply 088 sNaN91 -> NaN91 Invalid_operation +dqmul678 multiply Inf sNaN90 -> NaN90 Invalid_operation +dqmul679 multiply NaN sNaN89 -> NaN89 Invalid_operation + +dqmul681 multiply -NaN9 -Inf -> -NaN9 +dqmul682 multiply -NaN8 999 -> -NaN8 +dqmul683 multiply -NaN71 Inf -> -NaN71 +dqmul684 multiply -NaN6 -NaN5 -> -NaN6 +dqmul685 multiply -Inf -NaN4 -> -NaN4 +dqmul686 multiply -999 -NaN33 -> -NaN33 +dqmul687 multiply Inf -NaN2 -> -NaN2 + +dqmul691 multiply -sNaN99 -Inf -> -NaN99 Invalid_operation +dqmul692 multiply -sNaN98 -11 -> -NaN98 Invalid_operation +dqmul693 multiply -sNaN97 NaN -> -NaN97 Invalid_operation +dqmul694 multiply -sNaN16 -sNaN94 -> -NaN16 Invalid_operation +dqmul695 multiply -NaN95 -sNaN93 -> -NaN93 Invalid_operation +dqmul696 multiply -Inf -sNaN92 -> -NaN92 Invalid_operation +dqmul697 multiply 088 -sNaN91 -> -NaN91 Invalid_operation +dqmul698 multiply Inf -sNaN90 -> -NaN90 Invalid_operation +dqmul699 multiply -NaN -sNaN89 -> -NaN89 Invalid_operation + +dqmul701 multiply -NaN -Inf -> -NaN +dqmul702 multiply -NaN 999 -> -NaN +dqmul703 multiply -NaN Inf -> -NaN +dqmul704 multiply -NaN -NaN -> -NaN +dqmul705 multiply -Inf -NaN0 -> -NaN +dqmul706 multiply -999 -NaN -> -NaN +dqmul707 multiply Inf -NaN -> -NaN + +dqmul711 multiply -sNaN -Inf -> -NaN Invalid_operation +dqmul712 multiply -sNaN -11 -> -NaN Invalid_operation +dqmul713 multiply -sNaN00 NaN -> -NaN Invalid_operation +dqmul714 multiply -sNaN -sNaN -> -NaN Invalid_operation +dqmul715 multiply -NaN -sNaN -> -NaN Invalid_operation +dqmul716 multiply -Inf -sNaN -> -NaN Invalid_operation +dqmul717 multiply 088 -sNaN -> -NaN Invalid_operation +dqmul718 multiply Inf -sNaN -> -NaN Invalid_operation +dqmul719 multiply -NaN -sNaN -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +-- signs +dqmul751 multiply 1e+4277 1e+3311 -> Infinity Overflow Inexact Rounded +dqmul752 multiply 1e+4277 -1e+3311 -> -Infinity Overflow Inexact Rounded +dqmul753 multiply -1e+4277 1e+3311 -> -Infinity Overflow Inexact Rounded +dqmul754 multiply -1e+4277 -1e+3311 -> Infinity Overflow Inexact Rounded +dqmul755 multiply 1e-4277 1e-3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul756 multiply 1e-4277 -1e-3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul757 multiply -1e-4277 1e-3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul758 multiply -1e-4277 -1e-3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dqmul760 multiply 1e-6069 1e-101 -> 1E-6170 Subnormal +dqmul761 multiply 1e-6069 1e-102 -> 1E-6171 Subnormal +dqmul762 multiply 1e-6069 1e-103 -> 1E-6172 Subnormal +dqmul763 multiply 1e-6069 1e-104 -> 1E-6173 Subnormal +dqmul764 multiply 1e-6069 1e-105 -> 1E-6174 Subnormal +dqmul765 multiply 1e-6069 1e-106 -> 1E-6175 Subnormal +dqmul766 multiply 1e-6069 1e-107 -> 1E-6176 Subnormal +dqmul767 multiply 1e-6069 1e-108 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul768 multiply 1e-6069 1e-109 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul769 multiply 1e-6069 1e-110 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +dqmul770 multiply 1e+40 1e+6101 -> 1.000000000000000000000000000000E+6141 Clamped +dqmul771 multiply 1e+40 1e+6102 -> 1.0000000000000000000000000000000E+6142 Clamped +dqmul772 multiply 1e+40 1e+6103 -> 1.00000000000000000000000000000000E+6143 Clamped +dqmul773 multiply 1e+40 1e+6104 -> 1.000000000000000000000000000000000E+6144 Clamped +dqmul774 multiply 1e+40 1e+6105 -> Infinity Overflow Inexact Rounded +dqmul775 multiply 1e+40 1e+6106 -> Infinity Overflow Inexact Rounded +dqmul776 multiply 1e+40 1e+6107 -> Infinity Overflow Inexact Rounded +dqmul777 multiply 1e+40 1e+6108 -> Infinity Overflow Inexact Rounded +dqmul778 multiply 1e+40 1e+6109 -> Infinity Overflow Inexact Rounded +dqmul779 multiply 1e+40 1e+6110 -> Infinity Overflow Inexact Rounded + +dqmul801 multiply 1.0000E-6172 1 -> 1.0000E-6172 Subnormal +dqmul802 multiply 1.000E-6172 1e-1 -> 1.000E-6173 Subnormal +dqmul803 multiply 1.00E-6172 1e-2 -> 1.00E-6174 Subnormal +dqmul804 multiply 1.0E-6172 1e-3 -> 1.0E-6175 Subnormal +dqmul805 multiply 1.0E-6172 1e-4 -> 1E-6176 Subnormal Rounded +dqmul806 multiply 1.3E-6172 1e-4 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqmul807 multiply 1.5E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul808 multiply 1.7E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul809 multiply 2.3E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul810 multiply 2.5E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul811 multiply 2.7E-6172 1e-4 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqmul812 multiply 1.49E-6172 1e-4 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqmul813 multiply 1.50E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul814 multiply 1.51E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul815 multiply 2.49E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul816 multiply 2.50E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul817 multiply 2.51E-6172 1e-4 -> 3E-6176 Underflow Subnormal Inexact Rounded + +dqmul818 multiply 1E-6172 1e-4 -> 1E-6176 Subnormal +dqmul819 multiply 3E-6172 1e-5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul820 multiply 5E-6172 1e-5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul821 multiply 7E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqmul822 multiply 9E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqmul823 multiply 9.9E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded + +dqmul824 multiply 1E-6172 -1e-4 -> -1E-6176 Subnormal +dqmul825 multiply 3E-6172 -1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul826 multiply -5E-6172 1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul827 multiply 7E-6172 -1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqmul828 multiply -9E-6172 1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqmul829 multiply 9.9E-6172 -1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqmul830 multiply 3.0E-6172 -1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqmul831 multiply 1.0E-5977 1e-200 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul832 multiply 1.0E-5977 1e-199 -> 1E-6176 Subnormal Rounded +dqmul833 multiply 1.0E-5977 1e-198 -> 1.0E-6175 Subnormal +dqmul834 multiply 2.0E-5977 2e-198 -> 4.0E-6175 Subnormal +dqmul835 multiply 4.0E-5977 4e-198 -> 1.60E-6174 Subnormal +dqmul836 multiply 10.0E-5977 10e-198 -> 1.000E-6173 Subnormal +dqmul837 multiply 30.0E-5977 30e-198 -> 9.000E-6173 Subnormal +dqmul838 multiply 40.0E-5982 40e-166 -> 1.6000E-6145 Subnormal +dqmul839 multiply 40.0E-5982 40e-165 -> 1.6000E-6144 Subnormal +dqmul840 multiply 40.0E-5982 40e-164 -> 1.6000E-6143 + +-- Long operand overflow may be a different path +dqmul870 multiply 100 9.999E+6143 -> Infinity Inexact Overflow Rounded +dqmul871 multiply 100 -9.999E+6143 -> -Infinity Inexact Overflow Rounded +dqmul872 multiply 9.999E+6143 100 -> Infinity Inexact Overflow Rounded +dqmul873 multiply -9.999E+6143 100 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +dqmul881 multiply 1.2347E-6133 1.2347E-40 -> 1.524E-6173 Inexact Rounded Subnormal Underflow +dqmul882 multiply 1.234E-6133 1.234E-40 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqmul883 multiply 1.23E-6133 1.23E-40 -> 1.513E-6173 Inexact Rounded Subnormal Underflow +dqmul884 multiply 1.2E-6133 1.2E-40 -> 1.44E-6173 Subnormal +dqmul885 multiply 1.2E-6133 1.2E-41 -> 1.44E-6174 Subnormal +dqmul886 multiply 1.2E-6133 1.2E-42 -> 1.4E-6175 Subnormal Inexact Rounded Underflow +dqmul887 multiply 1.2E-6133 1.3E-42 -> 1.6E-6175 Subnormal Inexact Rounded Underflow +dqmul888 multiply 1.3E-6133 1.3E-42 -> 1.7E-6175 Subnormal Inexact Rounded Underflow +dqmul889 multiply 1.3E-6133 1.3E-43 -> 2E-6176 Subnormal Inexact Rounded Underflow +dqmul890 multiply 1.3E-6134 1.3E-43 -> 0E-6176 Clamped Subnormal Inexact Rounded Underflow + +dqmul891 multiply 1.2345E-39 1.234E-6133 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow +dqmul892 multiply 1.23456E-39 1.234E-6133 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow +dqmul893 multiply 1.2345E-40 1.234E-6133 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqmul894 multiply 1.23456E-40 1.234E-6133 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqmul895 multiply 1.2345E-41 1.234E-6133 -> 1.52E-6174 Inexact Rounded Subnormal Underflow +dqmul896 multiply 1.23456E-41 1.234E-6133 -> 1.52E-6174 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +-- prove operands are exact +dqmul906 multiply 9.999999999999999999999999999999999E-6143 1 -> 9.999999999999999999999999999999999E-6143 +dqmul907 multiply 1 0.09999999999999999999999999999999999 -> 0.09999999999999999999999999999999999 +-- the next rounds to Nmin +dqmul908 multiply 9.999999999999999999999999999999999E-6143 0.09999999999999999999999999999999999 -> 1.000000000000000000000000000000000E-6143 Underflow Inexact Subnormal Rounded + +-- hugest +dqmul909 multiply 9999999999999999999999999999999999 9999999999999999999999999999999999 -> 9.999999999999999999999999999999998E+67 Inexact Rounded +-- VG case +dqmul910 multiply 8.81125000000001349436E-1548 8.000000000000000000E-1550 -> 7.049000000000010795488000000000000E-3097 Rounded + +-- Examples from SQL proposal (Krishna Kulkarni) +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 +dqmul911 multiply 130E-2 120E-2 -> 1.5600 +dqmul912 multiply 130E-2 12E-1 -> 1.560 +dqmul913 multiply 130E-2 1E0 -> 1.30 +dqmul914 multiply 1E2 1E4 -> 1E+6 + +-- power-of-ten edge cases +dqmul1001 multiply 1 10 -> 10 +dqmul1002 multiply 1 100 -> 100 +dqmul1003 multiply 1 1000 -> 1000 +dqmul1004 multiply 1 10000 -> 10000 +dqmul1005 multiply 1 100000 -> 100000 +dqmul1006 multiply 1 1000000 -> 1000000 +dqmul1007 multiply 1 10000000 -> 10000000 +dqmul1008 multiply 1 100000000 -> 100000000 +dqmul1009 multiply 1 1000000000 -> 1000000000 +dqmul1010 multiply 1 10000000000 -> 10000000000 +dqmul1011 multiply 1 100000000000 -> 100000000000 +dqmul1012 multiply 1 1000000000000 -> 1000000000000 +dqmul1013 multiply 1 10000000000000 -> 10000000000000 +dqmul1014 multiply 1 100000000000000 -> 100000000000000 +dqmul1015 multiply 1 1000000000000000 -> 1000000000000000 + +dqmul1016 multiply 1 1000000000000000000 -> 1000000000000000000 +dqmul1017 multiply 1 100000000000000000000000000 -> 100000000000000000000000000 +dqmul1018 multiply 1 1000000000000000000000000000 -> 1000000000000000000000000000 +dqmul1019 multiply 1 10000000000000000000000000000 -> 10000000000000000000000000000 +dqmul1020 multiply 1 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1021 multiply 10 1 -> 10 +dqmul1022 multiply 10 10 -> 100 +dqmul1023 multiply 10 100 -> 1000 +dqmul1024 multiply 10 1000 -> 10000 +dqmul1025 multiply 10 10000 -> 100000 +dqmul1026 multiply 10 100000 -> 1000000 +dqmul1027 multiply 10 1000000 -> 10000000 +dqmul1028 multiply 10 10000000 -> 100000000 +dqmul1029 multiply 10 100000000 -> 1000000000 +dqmul1030 multiply 10 1000000000 -> 10000000000 +dqmul1031 multiply 10 10000000000 -> 100000000000 +dqmul1032 multiply 10 100000000000 -> 1000000000000 +dqmul1033 multiply 10 1000000000000 -> 10000000000000 +dqmul1034 multiply 10 10000000000000 -> 100000000000000 +dqmul1035 multiply 10 100000000000000 -> 1000000000000000 + +dqmul1036 multiply 10 100000000000000000 -> 1000000000000000000 +dqmul1037 multiply 10 10000000000000000000000000 -> 100000000000000000000000000 +dqmul1038 multiply 10 100000000000000000000000000 -> 1000000000000000000000000000 +dqmul1039 multiply 10 1000000000000000000000000000 -> 10000000000000000000000000000 +dqmul1040 multiply 10 100000000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1041 multiply 100 0.1 -> 10.0 +dqmul1042 multiply 100 1 -> 100 +dqmul1043 multiply 100 10 -> 1000 +dqmul1044 multiply 100 100 -> 10000 +dqmul1045 multiply 100 1000 -> 100000 +dqmul1046 multiply 100 10000 -> 1000000 +dqmul1047 multiply 100 100000 -> 10000000 +dqmul1048 multiply 100 1000000 -> 100000000 +dqmul1049 multiply 100 10000000 -> 1000000000 +dqmul1050 multiply 100 100000000 -> 10000000000 +dqmul1051 multiply 100 1000000000 -> 100000000000 +dqmul1052 multiply 100 10000000000 -> 1000000000000 +dqmul1053 multiply 100 100000000000 -> 10000000000000 +dqmul1054 multiply 100 1000000000000 -> 100000000000000 +dqmul1055 multiply 100 10000000000000 -> 1000000000000000 + +dqmul1056 multiply 100 10000000000000000 -> 1000000000000000000 +dqmul1057 multiply 100 1000000000000000000000000 -> 100000000000000000000000000 +dqmul1058 multiply 100 10000000000000000000000000 -> 1000000000000000000000000000 +dqmul1059 multiply 100 100000000000000000000000000 -> 10000000000000000000000000000 +dqmul1060 multiply 100 10000000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1061 multiply 1000 0.01 -> 10.00 +dqmul1062 multiply 1000 0.1 -> 100.0 +dqmul1063 multiply 1000 1 -> 1000 +dqmul1064 multiply 1000 10 -> 10000 +dqmul1065 multiply 1000 100 -> 100000 +dqmul1066 multiply 1000 1000 -> 1000000 +dqmul1067 multiply 1000 10000 -> 10000000 +dqmul1068 multiply 1000 100000 -> 100000000 +dqmul1069 multiply 1000 1000000 -> 1000000000 +dqmul1070 multiply 1000 10000000 -> 10000000000 +dqmul1071 multiply 1000 100000000 -> 100000000000 +dqmul1072 multiply 1000 1000000000 -> 1000000000000 +dqmul1073 multiply 1000 10000000000 -> 10000000000000 +dqmul1074 multiply 1000 100000000000 -> 100000000000000 +dqmul1075 multiply 1000 1000000000000 -> 1000000000000000 + +dqmul1076 multiply 1000 1000000000000000 -> 1000000000000000000 +dqmul1077 multiply 1000 100000000000000000000000 -> 100000000000000000000000000 +dqmul1078 multiply 1000 1000000000000000000000000 -> 1000000000000000000000000000 +dqmul1079 multiply 1000 10000000000000000000000000 -> 10000000000000000000000000000 +dqmul1080 multiply 1000 1000000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1081 multiply 10000 0.001 -> 10.000 +dqmul1082 multiply 10000 0.01 -> 100.00 +dqmul1083 multiply 10000 0.1 -> 1000.0 +dqmul1084 multiply 10000 1 -> 10000 +dqmul1085 multiply 10000 10 -> 100000 +dqmul1086 multiply 10000 100 -> 1000000 +dqmul1087 multiply 10000 1000 -> 10000000 +dqmul1088 multiply 10000 10000 -> 100000000 +dqmul1089 multiply 10000 100000 -> 1000000000 +dqmul1090 multiply 10000 1000000 -> 10000000000 +dqmul1091 multiply 10000 10000000 -> 100000000000 +dqmul1092 multiply 10000 100000000 -> 1000000000000 +dqmul1093 multiply 10000 1000000000 -> 10000000000000 +dqmul1094 multiply 10000 10000000000 -> 100000000000000 +dqmul1095 multiply 10000 100000000000 -> 1000000000000000 + +dqmul1096 multiply 10000 100000000000000 -> 1000000000000000000 +dqmul1097 multiply 10000 10000000000000000000000 -> 100000000000000000000000000 +dqmul1098 multiply 10000 100000000000000000000000 -> 1000000000000000000000000000 +dqmul1099 multiply 10000 1000000000000000000000000 -> 10000000000000000000000000000 +dqmul1100 multiply 10000 100000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1107 multiply 10000 99999999999 -> 999999999990000 +dqmul1108 multiply 10000 99999999999 -> 999999999990000 + +-- Null tests +dqmul9990 multiply 10 # -> NaN Invalid_operation +dqmul9991 multiply # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqNextMinus.decTest b/Lib/test/decimaltestdata/dqNextMinus.decTest index 34f39581c3d..8177b58c6d4 100644 --- a/Lib/test/decimaltestdata/dqNextMinus.decTest +++ b/Lib/test/decimaltestdata/dqNextMinus.decTest @@ -1,126 +1,126 @@ ------------------------------------------------------------------------- --- dqNextMinus.decTest -- decQuad next that is less [754r nextdown] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqnextm001 nextminus 0.9999999999999999999999999999999995 -> 0.9999999999999999999999999999999994 -dqnextm002 nextminus 0.9999999999999999999999999999999996 -> 0.9999999999999999999999999999999995 -dqnextm003 nextminus 0.9999999999999999999999999999999997 -> 0.9999999999999999999999999999999996 -dqnextm004 nextminus 0.9999999999999999999999999999999998 -> 0.9999999999999999999999999999999997 -dqnextm005 nextminus 0.9999999999999999999999999999999999 -> 0.9999999999999999999999999999999998 -dqnextm006 nextminus 1.000000000000000000000000000000000 -> 0.9999999999999999999999999999999999 -dqnextm007 nextminus 1.0 -> 0.9999999999999999999999999999999999 -dqnextm008 nextminus 1 -> 0.9999999999999999999999999999999999 -dqnextm009 nextminus 1.000000000000000000000000000000001 -> 1.000000000000000000000000000000000 -dqnextm010 nextminus 1.000000000000000000000000000000002 -> 1.000000000000000000000000000000001 -dqnextm011 nextminus 1.000000000000000000000000000000003 -> 1.000000000000000000000000000000002 -dqnextm012 nextminus 1.000000000000000000000000000000004 -> 1.000000000000000000000000000000003 -dqnextm013 nextminus 1.000000000000000000000000000000005 -> 1.000000000000000000000000000000004 -dqnextm014 nextminus 1.000000000000000000000000000000006 -> 1.000000000000000000000000000000005 -dqnextm015 nextminus 1.000000000000000000000000000000007 -> 1.000000000000000000000000000000006 -dqnextm016 nextminus 1.000000000000000000000000000000008 -> 1.000000000000000000000000000000007 -dqnextm017 nextminus 1.000000000000000000000000000000009 -> 1.000000000000000000000000000000008 -dqnextm018 nextminus 1.000000000000000000000000000000010 -> 1.000000000000000000000000000000009 -dqnextm019 nextminus 1.000000000000000000000000000000011 -> 1.000000000000000000000000000000010 -dqnextm020 nextminus 1.000000000000000000000000000000012 -> 1.000000000000000000000000000000011 - -dqnextm021 nextminus -0.9999999999999999999999999999999995 -> -0.9999999999999999999999999999999996 -dqnextm022 nextminus -0.9999999999999999999999999999999996 -> -0.9999999999999999999999999999999997 -dqnextm023 nextminus -0.9999999999999999999999999999999997 -> -0.9999999999999999999999999999999998 -dqnextm024 nextminus -0.9999999999999999999999999999999998 -> -0.9999999999999999999999999999999999 -dqnextm025 nextminus -0.9999999999999999999999999999999999 -> -1.000000000000000000000000000000000 -dqnextm026 nextminus -1.000000000000000000000000000000000 -> -1.000000000000000000000000000000001 -dqnextm027 nextminus -1.0 -> -1.000000000000000000000000000000001 -dqnextm028 nextminus -1 -> -1.000000000000000000000000000000001 -dqnextm029 nextminus -1.000000000000000000000000000000001 -> -1.000000000000000000000000000000002 -dqnextm030 nextminus -1.000000000000000000000000000000002 -> -1.000000000000000000000000000000003 -dqnextm031 nextminus -1.000000000000000000000000000000003 -> -1.000000000000000000000000000000004 -dqnextm032 nextminus -1.000000000000000000000000000000004 -> -1.000000000000000000000000000000005 -dqnextm033 nextminus -1.000000000000000000000000000000005 -> -1.000000000000000000000000000000006 -dqnextm034 nextminus -1.000000000000000000000000000000006 -> -1.000000000000000000000000000000007 -dqnextm035 nextminus -1.000000000000000000000000000000007 -> -1.000000000000000000000000000000008 -dqnextm036 nextminus -1.000000000000000000000000000000008 -> -1.000000000000000000000000000000009 -dqnextm037 nextminus -1.000000000000000000000000000000009 -> -1.000000000000000000000000000000010 -dqnextm038 nextminus -1.000000000000000000000000000000010 -> -1.000000000000000000000000000000011 -dqnextm039 nextminus -1.000000000000000000000000000000011 -> -1.000000000000000000000000000000012 - --- ultra-tiny inputs -dqnextm062 nextminus 1E-6176 -> 0E-6176 -dqnextm065 nextminus -1E-6176 -> -2E-6176 - --- Zeros -dqnextm100 nextminus -0 -> -1E-6176 -dqnextm101 nextminus 0 -> -1E-6176 -dqnextm102 nextminus 0.00 -> -1E-6176 -dqnextm103 nextminus -0.00 -> -1E-6176 -dqnextm104 nextminus 0E-300 -> -1E-6176 -dqnextm105 nextminus 0E+300 -> -1E-6176 -dqnextm106 nextminus 0E+30000 -> -1E-6176 -dqnextm107 nextminus -0E+30000 -> -1E-6176 - --- specials -dqnextm150 nextminus Inf -> 9.999999999999999999999999999999999E+6144 -dqnextm151 nextminus -Inf -> -Infinity -dqnextm152 nextminus NaN -> NaN -dqnextm153 nextminus sNaN -> NaN Invalid_operation -dqnextm154 nextminus NaN77 -> NaN77 -dqnextm155 nextminus sNaN88 -> NaN88 Invalid_operation -dqnextm156 nextminus -NaN -> -NaN -dqnextm157 nextminus -sNaN -> -NaN Invalid_operation -dqnextm158 nextminus -NaN77 -> -NaN77 -dqnextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -dqnextm170 nextminus 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999998E+6144 -dqnextm171 nextminus 9.999999999999999999999999999999998E+6144 -> 9.999999999999999999999999999999997E+6144 -dqnextm172 nextminus 1E-6143 -> 9.99999999999999999999999999999999E-6144 -dqnextm173 nextminus 1.000000000000000000000000000000000E-6143 -> 9.99999999999999999999999999999999E-6144 -dqnextm174 nextminus 9E-6176 -> 8E-6176 -dqnextm175 nextminus 9.9E-6175 -> 9.8E-6175 -dqnextm176 nextminus 9.99999999999999999999999999999E-6147 -> 9.99999999999999999999999999998E-6147 -dqnextm177 nextminus 9.99999999999999999999999999999999E-6144 -> 9.99999999999999999999999999999998E-6144 -dqnextm178 nextminus 9.99999999999999999999999999999998E-6144 -> 9.99999999999999999999999999999997E-6144 -dqnextm179 nextminus 9.99999999999999999999999999999997E-6144 -> 9.99999999999999999999999999999996E-6144 -dqnextm180 nextminus 0E-6176 -> -1E-6176 -dqnextm181 nextminus 1E-6176 -> 0E-6176 -dqnextm182 nextminus 2E-6176 -> 1E-6176 - -dqnextm183 nextminus -0E-6176 -> -1E-6176 -dqnextm184 nextminus -1E-6176 -> -2E-6176 -dqnextm185 nextminus -2E-6176 -> -3E-6176 -dqnextm186 nextminus -10E-6176 -> -1.1E-6175 -dqnextm187 nextminus -100E-6176 -> -1.01E-6174 -dqnextm188 nextminus -100000E-6176 -> -1.00001E-6171 -dqnextm189 nextminus -1.00000000000000000000000000000E-6143 -> -1.000000000000000000000000000000001E-6143 -dqnextm190 nextminus -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000001E-6143 -dqnextm191 nextminus -1E-6143 -> -1.000000000000000000000000000000001E-6143 -dqnextm192 nextminus -9.999999999999999999999999999999998E+6144 -> -9.999999999999999999999999999999999E+6144 -dqnextm193 nextminus -9.999999999999999999999999999999999E+6144 -> -Infinity - --- Null tests -dqnextm900 nextminus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqNextMinus.decTest -- decQuad next that is less [754r nextdown] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqnextm001 nextminus 0.9999999999999999999999999999999995 -> 0.9999999999999999999999999999999994 +dqnextm002 nextminus 0.9999999999999999999999999999999996 -> 0.9999999999999999999999999999999995 +dqnextm003 nextminus 0.9999999999999999999999999999999997 -> 0.9999999999999999999999999999999996 +dqnextm004 nextminus 0.9999999999999999999999999999999998 -> 0.9999999999999999999999999999999997 +dqnextm005 nextminus 0.9999999999999999999999999999999999 -> 0.9999999999999999999999999999999998 +dqnextm006 nextminus 1.000000000000000000000000000000000 -> 0.9999999999999999999999999999999999 +dqnextm007 nextminus 1.0 -> 0.9999999999999999999999999999999999 +dqnextm008 nextminus 1 -> 0.9999999999999999999999999999999999 +dqnextm009 nextminus 1.000000000000000000000000000000001 -> 1.000000000000000000000000000000000 +dqnextm010 nextminus 1.000000000000000000000000000000002 -> 1.000000000000000000000000000000001 +dqnextm011 nextminus 1.000000000000000000000000000000003 -> 1.000000000000000000000000000000002 +dqnextm012 nextminus 1.000000000000000000000000000000004 -> 1.000000000000000000000000000000003 +dqnextm013 nextminus 1.000000000000000000000000000000005 -> 1.000000000000000000000000000000004 +dqnextm014 nextminus 1.000000000000000000000000000000006 -> 1.000000000000000000000000000000005 +dqnextm015 nextminus 1.000000000000000000000000000000007 -> 1.000000000000000000000000000000006 +dqnextm016 nextminus 1.000000000000000000000000000000008 -> 1.000000000000000000000000000000007 +dqnextm017 nextminus 1.000000000000000000000000000000009 -> 1.000000000000000000000000000000008 +dqnextm018 nextminus 1.000000000000000000000000000000010 -> 1.000000000000000000000000000000009 +dqnextm019 nextminus 1.000000000000000000000000000000011 -> 1.000000000000000000000000000000010 +dqnextm020 nextminus 1.000000000000000000000000000000012 -> 1.000000000000000000000000000000011 + +dqnextm021 nextminus -0.9999999999999999999999999999999995 -> -0.9999999999999999999999999999999996 +dqnextm022 nextminus -0.9999999999999999999999999999999996 -> -0.9999999999999999999999999999999997 +dqnextm023 nextminus -0.9999999999999999999999999999999997 -> -0.9999999999999999999999999999999998 +dqnextm024 nextminus -0.9999999999999999999999999999999998 -> -0.9999999999999999999999999999999999 +dqnextm025 nextminus -0.9999999999999999999999999999999999 -> -1.000000000000000000000000000000000 +dqnextm026 nextminus -1.000000000000000000000000000000000 -> -1.000000000000000000000000000000001 +dqnextm027 nextminus -1.0 -> -1.000000000000000000000000000000001 +dqnextm028 nextminus -1 -> -1.000000000000000000000000000000001 +dqnextm029 nextminus -1.000000000000000000000000000000001 -> -1.000000000000000000000000000000002 +dqnextm030 nextminus -1.000000000000000000000000000000002 -> -1.000000000000000000000000000000003 +dqnextm031 nextminus -1.000000000000000000000000000000003 -> -1.000000000000000000000000000000004 +dqnextm032 nextminus -1.000000000000000000000000000000004 -> -1.000000000000000000000000000000005 +dqnextm033 nextminus -1.000000000000000000000000000000005 -> -1.000000000000000000000000000000006 +dqnextm034 nextminus -1.000000000000000000000000000000006 -> -1.000000000000000000000000000000007 +dqnextm035 nextminus -1.000000000000000000000000000000007 -> -1.000000000000000000000000000000008 +dqnextm036 nextminus -1.000000000000000000000000000000008 -> -1.000000000000000000000000000000009 +dqnextm037 nextminus -1.000000000000000000000000000000009 -> -1.000000000000000000000000000000010 +dqnextm038 nextminus -1.000000000000000000000000000000010 -> -1.000000000000000000000000000000011 +dqnextm039 nextminus -1.000000000000000000000000000000011 -> -1.000000000000000000000000000000012 + +-- ultra-tiny inputs +dqnextm062 nextminus 1E-6176 -> 0E-6176 +dqnextm065 nextminus -1E-6176 -> -2E-6176 + +-- Zeros +dqnextm100 nextminus -0 -> -1E-6176 +dqnextm101 nextminus 0 -> -1E-6176 +dqnextm102 nextminus 0.00 -> -1E-6176 +dqnextm103 nextminus -0.00 -> -1E-6176 +dqnextm104 nextminus 0E-300 -> -1E-6176 +dqnextm105 nextminus 0E+300 -> -1E-6176 +dqnextm106 nextminus 0E+30000 -> -1E-6176 +dqnextm107 nextminus -0E+30000 -> -1E-6176 + +-- specials +dqnextm150 nextminus Inf -> 9.999999999999999999999999999999999E+6144 +dqnextm151 nextminus -Inf -> -Infinity +dqnextm152 nextminus NaN -> NaN +dqnextm153 nextminus sNaN -> NaN Invalid_operation +dqnextm154 nextminus NaN77 -> NaN77 +dqnextm155 nextminus sNaN88 -> NaN88 Invalid_operation +dqnextm156 nextminus -NaN -> -NaN +dqnextm157 nextminus -sNaN -> -NaN Invalid_operation +dqnextm158 nextminus -NaN77 -> -NaN77 +dqnextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +dqnextm170 nextminus 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999998E+6144 +dqnextm171 nextminus 9.999999999999999999999999999999998E+6144 -> 9.999999999999999999999999999999997E+6144 +dqnextm172 nextminus 1E-6143 -> 9.99999999999999999999999999999999E-6144 +dqnextm173 nextminus 1.000000000000000000000000000000000E-6143 -> 9.99999999999999999999999999999999E-6144 +dqnextm174 nextminus 9E-6176 -> 8E-6176 +dqnextm175 nextminus 9.9E-6175 -> 9.8E-6175 +dqnextm176 nextminus 9.99999999999999999999999999999E-6147 -> 9.99999999999999999999999999998E-6147 +dqnextm177 nextminus 9.99999999999999999999999999999999E-6144 -> 9.99999999999999999999999999999998E-6144 +dqnextm178 nextminus 9.99999999999999999999999999999998E-6144 -> 9.99999999999999999999999999999997E-6144 +dqnextm179 nextminus 9.99999999999999999999999999999997E-6144 -> 9.99999999999999999999999999999996E-6144 +dqnextm180 nextminus 0E-6176 -> -1E-6176 +dqnextm181 nextminus 1E-6176 -> 0E-6176 +dqnextm182 nextminus 2E-6176 -> 1E-6176 + +dqnextm183 nextminus -0E-6176 -> -1E-6176 +dqnextm184 nextminus -1E-6176 -> -2E-6176 +dqnextm185 nextminus -2E-6176 -> -3E-6176 +dqnextm186 nextminus -10E-6176 -> -1.1E-6175 +dqnextm187 nextminus -100E-6176 -> -1.01E-6174 +dqnextm188 nextminus -100000E-6176 -> -1.00001E-6171 +dqnextm189 nextminus -1.00000000000000000000000000000E-6143 -> -1.000000000000000000000000000000001E-6143 +dqnextm190 nextminus -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000001E-6143 +dqnextm191 nextminus -1E-6143 -> -1.000000000000000000000000000000001E-6143 +dqnextm192 nextminus -9.999999999999999999999999999999998E+6144 -> -9.999999999999999999999999999999999E+6144 +dqnextm193 nextminus -9.999999999999999999999999999999999E+6144 -> -Infinity + +-- Null tests +dqnextm900 nextminus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqNextPlus.decTest b/Lib/test/decimaltestdata/dqNextPlus.decTest index ac3f04e69b7..8c8e9cd2e79 100644 --- a/Lib/test/decimaltestdata/dqNextPlus.decTest +++ b/Lib/test/decimaltestdata/dqNextPlus.decTest @@ -1,124 +1,124 @@ ------------------------------------------------------------------------- --- dqNextPlus.decTest -- decQuad next that is greater [754r nextup] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqnextp001 nextplus 0.9999999999999999999999999999999995 -> 0.9999999999999999999999999999999996 -dqnextp002 nextplus 0.9999999999999999999999999999999996 -> 0.9999999999999999999999999999999997 -dqnextp003 nextplus 0.9999999999999999999999999999999997 -> 0.9999999999999999999999999999999998 -dqnextp004 nextplus 0.9999999999999999999999999999999998 -> 0.9999999999999999999999999999999999 -dqnextp005 nextplus 0.9999999999999999999999999999999999 -> 1.000000000000000000000000000000000 -dqnextp006 nextplus 1.000000000000000000000000000000000 -> 1.000000000000000000000000000000001 -dqnextp007 nextplus 1.0 -> 1.000000000000000000000000000000001 -dqnextp008 nextplus 1 -> 1.000000000000000000000000000000001 -dqnextp009 nextplus 1.000000000000000000000000000000001 -> 1.000000000000000000000000000000002 -dqnextp010 nextplus 1.000000000000000000000000000000002 -> 1.000000000000000000000000000000003 -dqnextp011 nextplus 1.000000000000000000000000000000003 -> 1.000000000000000000000000000000004 -dqnextp012 nextplus 1.000000000000000000000000000000004 -> 1.000000000000000000000000000000005 -dqnextp013 nextplus 1.000000000000000000000000000000005 -> 1.000000000000000000000000000000006 -dqnextp014 nextplus 1.000000000000000000000000000000006 -> 1.000000000000000000000000000000007 -dqnextp015 nextplus 1.000000000000000000000000000000007 -> 1.000000000000000000000000000000008 -dqnextp016 nextplus 1.000000000000000000000000000000008 -> 1.000000000000000000000000000000009 -dqnextp017 nextplus 1.000000000000000000000000000000009 -> 1.000000000000000000000000000000010 -dqnextp018 nextplus 1.000000000000000000000000000000010 -> 1.000000000000000000000000000000011 -dqnextp019 nextplus 1.000000000000000000000000000000011 -> 1.000000000000000000000000000000012 - -dqnextp021 nextplus -0.9999999999999999999999999999999995 -> -0.9999999999999999999999999999999994 -dqnextp022 nextplus -0.9999999999999999999999999999999996 -> -0.9999999999999999999999999999999995 -dqnextp023 nextplus -0.9999999999999999999999999999999997 -> -0.9999999999999999999999999999999996 -dqnextp024 nextplus -0.9999999999999999999999999999999998 -> -0.9999999999999999999999999999999997 -dqnextp025 nextplus -0.9999999999999999999999999999999999 -> -0.9999999999999999999999999999999998 -dqnextp026 nextplus -1.000000000000000000000000000000000 -> -0.9999999999999999999999999999999999 -dqnextp027 nextplus -1.0 -> -0.9999999999999999999999999999999999 -dqnextp028 nextplus -1 -> -0.9999999999999999999999999999999999 -dqnextp029 nextplus -1.000000000000000000000000000000001 -> -1.000000000000000000000000000000000 -dqnextp030 nextplus -1.000000000000000000000000000000002 -> -1.000000000000000000000000000000001 -dqnextp031 nextplus -1.000000000000000000000000000000003 -> -1.000000000000000000000000000000002 -dqnextp032 nextplus -1.000000000000000000000000000000004 -> -1.000000000000000000000000000000003 -dqnextp033 nextplus -1.000000000000000000000000000000005 -> -1.000000000000000000000000000000004 -dqnextp034 nextplus -1.000000000000000000000000000000006 -> -1.000000000000000000000000000000005 -dqnextp035 nextplus -1.000000000000000000000000000000007 -> -1.000000000000000000000000000000006 -dqnextp036 nextplus -1.000000000000000000000000000000008 -> -1.000000000000000000000000000000007 -dqnextp037 nextplus -1.000000000000000000000000000000009 -> -1.000000000000000000000000000000008 -dqnextp038 nextplus -1.000000000000000000000000000000010 -> -1.000000000000000000000000000000009 -dqnextp039 nextplus -1.000000000000000000000000000000011 -> -1.000000000000000000000000000000010 -dqnextp040 nextplus -1.000000000000000000000000000000012 -> -1.000000000000000000000000000000011 - --- Zeros -dqnextp100 nextplus 0 -> 1E-6176 -dqnextp101 nextplus 0.00 -> 1E-6176 -dqnextp102 nextplus 0E-300 -> 1E-6176 -dqnextp103 nextplus 0E+300 -> 1E-6176 -dqnextp104 nextplus 0E+30000 -> 1E-6176 -dqnextp105 nextplus -0 -> 1E-6176 -dqnextp106 nextplus -0.00 -> 1E-6176 -dqnextp107 nextplus -0E-300 -> 1E-6176 -dqnextp108 nextplus -0E+300 -> 1E-6176 -dqnextp109 nextplus -0E+30000 -> 1E-6176 - --- specials -dqnextp150 nextplus Inf -> Infinity -dqnextp151 nextplus -Inf -> -9.999999999999999999999999999999999E+6144 -dqnextp152 nextplus NaN -> NaN -dqnextp153 nextplus sNaN -> NaN Invalid_operation -dqnextp154 nextplus NaN77 -> NaN77 -dqnextp155 nextplus sNaN88 -> NaN88 Invalid_operation -dqnextp156 nextplus -NaN -> -NaN -dqnextp157 nextplus -sNaN -> -NaN Invalid_operation -dqnextp158 nextplus -NaN77 -> -NaN77 -dqnextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -dqnextp170 nextplus -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999998E+6144 -dqnextp171 nextplus -9.999999999999999999999999999999998E+6144 -> -9.999999999999999999999999999999997E+6144 -dqnextp172 nextplus -1E-6143 -> -9.99999999999999999999999999999999E-6144 -dqnextp173 nextplus -1.000000000000000E-6143 -> -9.99999999999999999999999999999999E-6144 -dqnextp174 nextplus -9E-6176 -> -8E-6176 -dqnextp175 nextplus -9.9E-6175 -> -9.8E-6175 -dqnextp176 nextplus -9.99999999999999999999999999999E-6147 -> -9.99999999999999999999999999998E-6147 -dqnextp177 nextplus -9.99999999999999999999999999999999E-6144 -> -9.99999999999999999999999999999998E-6144 -dqnextp178 nextplus -9.99999999999999999999999999999998E-6144 -> -9.99999999999999999999999999999997E-6144 -dqnextp179 nextplus -9.99999999999999999999999999999997E-6144 -> -9.99999999999999999999999999999996E-6144 -dqnextp180 nextplus -0E-6176 -> 1E-6176 -dqnextp181 nextplus -1E-6176 -> -0E-6176 -dqnextp182 nextplus -2E-6176 -> -1E-6176 - -dqnextp183 nextplus 0E-6176 -> 1E-6176 -dqnextp184 nextplus 1E-6176 -> 2E-6176 -dqnextp185 nextplus 2E-6176 -> 3E-6176 -dqnextp186 nextplus 10E-6176 -> 1.1E-6175 -dqnextp187 nextplus 100E-6176 -> 1.01E-6174 -dqnextp188 nextplus 100000E-6176 -> 1.00001E-6171 -dqnextp189 nextplus 1.00000000000000000000000000000E-6143 -> 1.000000000000000000000000000000001E-6143 -dqnextp190 nextplus 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000001E-6143 -dqnextp191 nextplus 1E-6143 -> 1.000000000000000000000000000000001E-6143 -dqnextp192 nextplus 9.999999999999999999999999999999998E+6144 -> 9.999999999999999999999999999999999E+6144 -dqnextp193 nextplus 9.999999999999999999999999999999999E+6144 -> Infinity - --- Null tests -dqnextp900 nextplus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqNextPlus.decTest -- decQuad next that is greater [754r nextup] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqnextp001 nextplus 0.9999999999999999999999999999999995 -> 0.9999999999999999999999999999999996 +dqnextp002 nextplus 0.9999999999999999999999999999999996 -> 0.9999999999999999999999999999999997 +dqnextp003 nextplus 0.9999999999999999999999999999999997 -> 0.9999999999999999999999999999999998 +dqnextp004 nextplus 0.9999999999999999999999999999999998 -> 0.9999999999999999999999999999999999 +dqnextp005 nextplus 0.9999999999999999999999999999999999 -> 1.000000000000000000000000000000000 +dqnextp006 nextplus 1.000000000000000000000000000000000 -> 1.000000000000000000000000000000001 +dqnextp007 nextplus 1.0 -> 1.000000000000000000000000000000001 +dqnextp008 nextplus 1 -> 1.000000000000000000000000000000001 +dqnextp009 nextplus 1.000000000000000000000000000000001 -> 1.000000000000000000000000000000002 +dqnextp010 nextplus 1.000000000000000000000000000000002 -> 1.000000000000000000000000000000003 +dqnextp011 nextplus 1.000000000000000000000000000000003 -> 1.000000000000000000000000000000004 +dqnextp012 nextplus 1.000000000000000000000000000000004 -> 1.000000000000000000000000000000005 +dqnextp013 nextplus 1.000000000000000000000000000000005 -> 1.000000000000000000000000000000006 +dqnextp014 nextplus 1.000000000000000000000000000000006 -> 1.000000000000000000000000000000007 +dqnextp015 nextplus 1.000000000000000000000000000000007 -> 1.000000000000000000000000000000008 +dqnextp016 nextplus 1.000000000000000000000000000000008 -> 1.000000000000000000000000000000009 +dqnextp017 nextplus 1.000000000000000000000000000000009 -> 1.000000000000000000000000000000010 +dqnextp018 nextplus 1.000000000000000000000000000000010 -> 1.000000000000000000000000000000011 +dqnextp019 nextplus 1.000000000000000000000000000000011 -> 1.000000000000000000000000000000012 + +dqnextp021 nextplus -0.9999999999999999999999999999999995 -> -0.9999999999999999999999999999999994 +dqnextp022 nextplus -0.9999999999999999999999999999999996 -> -0.9999999999999999999999999999999995 +dqnextp023 nextplus -0.9999999999999999999999999999999997 -> -0.9999999999999999999999999999999996 +dqnextp024 nextplus -0.9999999999999999999999999999999998 -> -0.9999999999999999999999999999999997 +dqnextp025 nextplus -0.9999999999999999999999999999999999 -> -0.9999999999999999999999999999999998 +dqnextp026 nextplus -1.000000000000000000000000000000000 -> -0.9999999999999999999999999999999999 +dqnextp027 nextplus -1.0 -> -0.9999999999999999999999999999999999 +dqnextp028 nextplus -1 -> -0.9999999999999999999999999999999999 +dqnextp029 nextplus -1.000000000000000000000000000000001 -> -1.000000000000000000000000000000000 +dqnextp030 nextplus -1.000000000000000000000000000000002 -> -1.000000000000000000000000000000001 +dqnextp031 nextplus -1.000000000000000000000000000000003 -> -1.000000000000000000000000000000002 +dqnextp032 nextplus -1.000000000000000000000000000000004 -> -1.000000000000000000000000000000003 +dqnextp033 nextplus -1.000000000000000000000000000000005 -> -1.000000000000000000000000000000004 +dqnextp034 nextplus -1.000000000000000000000000000000006 -> -1.000000000000000000000000000000005 +dqnextp035 nextplus -1.000000000000000000000000000000007 -> -1.000000000000000000000000000000006 +dqnextp036 nextplus -1.000000000000000000000000000000008 -> -1.000000000000000000000000000000007 +dqnextp037 nextplus -1.000000000000000000000000000000009 -> -1.000000000000000000000000000000008 +dqnextp038 nextplus -1.000000000000000000000000000000010 -> -1.000000000000000000000000000000009 +dqnextp039 nextplus -1.000000000000000000000000000000011 -> -1.000000000000000000000000000000010 +dqnextp040 nextplus -1.000000000000000000000000000000012 -> -1.000000000000000000000000000000011 + +-- Zeros +dqnextp100 nextplus 0 -> 1E-6176 +dqnextp101 nextplus 0.00 -> 1E-6176 +dqnextp102 nextplus 0E-300 -> 1E-6176 +dqnextp103 nextplus 0E+300 -> 1E-6176 +dqnextp104 nextplus 0E+30000 -> 1E-6176 +dqnextp105 nextplus -0 -> 1E-6176 +dqnextp106 nextplus -0.00 -> 1E-6176 +dqnextp107 nextplus -0E-300 -> 1E-6176 +dqnextp108 nextplus -0E+300 -> 1E-6176 +dqnextp109 nextplus -0E+30000 -> 1E-6176 + +-- specials +dqnextp150 nextplus Inf -> Infinity +dqnextp151 nextplus -Inf -> -9.999999999999999999999999999999999E+6144 +dqnextp152 nextplus NaN -> NaN +dqnextp153 nextplus sNaN -> NaN Invalid_operation +dqnextp154 nextplus NaN77 -> NaN77 +dqnextp155 nextplus sNaN88 -> NaN88 Invalid_operation +dqnextp156 nextplus -NaN -> -NaN +dqnextp157 nextplus -sNaN -> -NaN Invalid_operation +dqnextp158 nextplus -NaN77 -> -NaN77 +dqnextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +dqnextp170 nextplus -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999998E+6144 +dqnextp171 nextplus -9.999999999999999999999999999999998E+6144 -> -9.999999999999999999999999999999997E+6144 +dqnextp172 nextplus -1E-6143 -> -9.99999999999999999999999999999999E-6144 +dqnextp173 nextplus -1.000000000000000E-6143 -> -9.99999999999999999999999999999999E-6144 +dqnextp174 nextplus -9E-6176 -> -8E-6176 +dqnextp175 nextplus -9.9E-6175 -> -9.8E-6175 +dqnextp176 nextplus -9.99999999999999999999999999999E-6147 -> -9.99999999999999999999999999998E-6147 +dqnextp177 nextplus -9.99999999999999999999999999999999E-6144 -> -9.99999999999999999999999999999998E-6144 +dqnextp178 nextplus -9.99999999999999999999999999999998E-6144 -> -9.99999999999999999999999999999997E-6144 +dqnextp179 nextplus -9.99999999999999999999999999999997E-6144 -> -9.99999999999999999999999999999996E-6144 +dqnextp180 nextplus -0E-6176 -> 1E-6176 +dqnextp181 nextplus -1E-6176 -> -0E-6176 +dqnextp182 nextplus -2E-6176 -> -1E-6176 + +dqnextp183 nextplus 0E-6176 -> 1E-6176 +dqnextp184 nextplus 1E-6176 -> 2E-6176 +dqnextp185 nextplus 2E-6176 -> 3E-6176 +dqnextp186 nextplus 10E-6176 -> 1.1E-6175 +dqnextp187 nextplus 100E-6176 -> 1.01E-6174 +dqnextp188 nextplus 100000E-6176 -> 1.00001E-6171 +dqnextp189 nextplus 1.00000000000000000000000000000E-6143 -> 1.000000000000000000000000000000001E-6143 +dqnextp190 nextplus 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000001E-6143 +dqnextp191 nextplus 1E-6143 -> 1.000000000000000000000000000000001E-6143 +dqnextp192 nextplus 9.999999999999999999999999999999998E+6144 -> 9.999999999999999999999999999999999E+6144 +dqnextp193 nextplus 9.999999999999999999999999999999999E+6144 -> Infinity + +-- Null tests +dqnextp900 nextplus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqNextToward.decTest b/Lib/test/decimaltestdata/dqNextToward.decTest index e6d1e0befb2..107e7f5c50f 100644 --- a/Lib/test/decimaltestdata/dqNextToward.decTest +++ b/Lib/test/decimaltestdata/dqNextToward.decTest @@ -1,375 +1,375 @@ ------------------------------------------------------------------------- --- dqNextToward.decTest -- decQuad next toward rhs [754r nextafter] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - - --- Sanity check with a scattering of numerics -dqnextt001 nexttoward 10 10 -> 10 -dqnextt002 nexttoward -10 -10 -> -10 -dqnextt003 nexttoward 1 10 -> 1.000000000000000000000000000000001 -dqnextt004 nexttoward 1 -10 -> 0.9999999999999999999999999999999999 -dqnextt005 nexttoward -1 10 -> -0.9999999999999999999999999999999999 -dqnextt006 nexttoward -1 -10 -> -1.000000000000000000000000000000001 -dqnextt007 nexttoward 0 10 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt008 nexttoward 0 -10 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt009 nexttoward 9.999999999999999999999999999999999E+6144 +Infinity -> Infinity Overflow Inexact Rounded -dqnextt010 nexttoward -9.999999999999999999999999999999999E+6144 -Infinity -> -Infinity Overflow Inexact Rounded -dqnextt011 nexttoward 9.999999999999999999999999999999999 10 -> 10.00000000000000000000000000000000 -dqnextt012 nexttoward 10 9.999999999999999999999999999999999 -> 9.999999999999999999999999999999999 -dqnextt013 nexttoward -9.999999999999999999999999999999999 -10 -> -10.00000000000000000000000000000000 -dqnextt014 nexttoward -10 -9.999999999999999999999999999999999 -> -9.999999999999999999999999999999999 -dqnextt015 nexttoward 9.999999999999999999999999999999998 10 -> 9.999999999999999999999999999999999 -dqnextt016 nexttoward 10 9.999999999999999999999999999999998 -> 9.999999999999999999999999999999999 -dqnextt017 nexttoward -9.999999999999999999999999999999998 -10 -> -9.999999999999999999999999999999999 -dqnextt018 nexttoward -10 -9.999999999999999999999999999999998 -> -9.999999999999999999999999999999999 - -------- lhs=rhs --- finites -dqnextt101 nexttoward 7 7 -> 7 -dqnextt102 nexttoward -7 -7 -> -7 -dqnextt103 nexttoward 75 75 -> 75 -dqnextt104 nexttoward -75 -75 -> -75 -dqnextt105 nexttoward 7.50 7.5 -> 7.50 -dqnextt106 nexttoward -7.50 -7.50 -> -7.50 -dqnextt107 nexttoward 7.500 7.5000 -> 7.500 -dqnextt108 nexttoward -7.500 -7.5 -> -7.500 - --- zeros -dqnextt111 nexttoward 0 0 -> 0 -dqnextt112 nexttoward -0 -0 -> -0 -dqnextt113 nexttoward 0E+4 0 -> 0E+4 -dqnextt114 nexttoward -0E+4 -0 -> -0E+4 -dqnextt115 nexttoward 0.00000000000 0.000000000000 -> 0E-11 -dqnextt116 nexttoward -0.00000000000 -0.00 -> -0E-11 -dqnextt117 nexttoward 0E-141 0 -> 0E-141 -dqnextt118 nexttoward -0E-141 -000 -> -0E-141 - --- full coefficients, alternating bits -dqnextt121 nexttoward 268268268 268268268 -> 268268268 -dqnextt122 nexttoward -268268268 -268268268 -> -268268268 -dqnextt123 nexttoward 134134134 134134134 -> 134134134 -dqnextt124 nexttoward -134134134 -134134134 -> -134134134 - --- Nmax, Nmin, Ntiny -dqnextt131 nexttoward 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqnextt132 nexttoward 1E-6143 1E-6143 -> 1E-6143 -dqnextt133 nexttoward 1.000000000000000000000000000000000E-6143 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqnextt134 nexttoward 1E-6176 1E-6176 -> 1E-6176 - -dqnextt135 nexttoward -1E-6176 -1E-6176 -> -1E-6176 -dqnextt136 nexttoward -1.000000000000000000000000000000000E-6143 -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqnextt137 nexttoward -1E-6143 -1E-6143 -> -1E-6143 -dqnextt138 nexttoward -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 - -------- lhs 0.9999999999999999999999999999999996 -dqnextt202 nexttoward 0.9999999999999999999999999999999996 Infinity -> 0.9999999999999999999999999999999997 -dqnextt203 nexttoward 0.9999999999999999999999999999999997 Infinity -> 0.9999999999999999999999999999999998 -dqnextt204 nexttoward 0.9999999999999999999999999999999998 Infinity -> 0.9999999999999999999999999999999999 -dqnextt205 nexttoward 0.9999999999999999999999999999999999 Infinity -> 1.000000000000000000000000000000000 -dqnextt206 nexttoward 1.000000000000000000000000000000000 Infinity -> 1.000000000000000000000000000000001 -dqnextt207 nexttoward 1.0 Infinity -> 1.000000000000000000000000000000001 -dqnextt208 nexttoward 1 Infinity -> 1.000000000000000000000000000000001 -dqnextt209 nexttoward 1.000000000000000000000000000000001 Infinity -> 1.000000000000000000000000000000002 -dqnextt210 nexttoward 1.000000000000000000000000000000002 Infinity -> 1.000000000000000000000000000000003 -dqnextt211 nexttoward 1.000000000000000000000000000000003 Infinity -> 1.000000000000000000000000000000004 -dqnextt212 nexttoward 1.000000000000000000000000000000004 Infinity -> 1.000000000000000000000000000000005 -dqnextt213 nexttoward 1.000000000000000000000000000000005 Infinity -> 1.000000000000000000000000000000006 -dqnextt214 nexttoward 1.000000000000000000000000000000006 Infinity -> 1.000000000000000000000000000000007 -dqnextt215 nexttoward 1.000000000000000000000000000000007 Infinity -> 1.000000000000000000000000000000008 -dqnextt216 nexttoward 1.000000000000000000000000000000008 Infinity -> 1.000000000000000000000000000000009 -dqnextt217 nexttoward 1.000000000000000000000000000000009 Infinity -> 1.000000000000000000000000000000010 -dqnextt218 nexttoward 1.000000000000000000000000000000010 Infinity -> 1.000000000000000000000000000000011 -dqnextt219 nexttoward 1.000000000000000000000000000000011 Infinity -> 1.000000000000000000000000000000012 - -dqnextt221 nexttoward -0.9999999999999999999999999999999995 Infinity -> -0.9999999999999999999999999999999994 -dqnextt222 nexttoward -0.9999999999999999999999999999999996 Infinity -> -0.9999999999999999999999999999999995 -dqnextt223 nexttoward -0.9999999999999999999999999999999997 Infinity -> -0.9999999999999999999999999999999996 -dqnextt224 nexttoward -0.9999999999999999999999999999999998 Infinity -> -0.9999999999999999999999999999999997 -dqnextt225 nexttoward -0.9999999999999999999999999999999999 Infinity -> -0.9999999999999999999999999999999998 -dqnextt226 nexttoward -1.000000000000000000000000000000000 Infinity -> -0.9999999999999999999999999999999999 -dqnextt227 nexttoward -1.0 Infinity -> -0.9999999999999999999999999999999999 -dqnextt228 nexttoward -1 Infinity -> -0.9999999999999999999999999999999999 -dqnextt229 nexttoward -1.000000000000000000000000000000001 Infinity -> -1.000000000000000000000000000000000 -dqnextt230 nexttoward -1.000000000000000000000000000000002 Infinity -> -1.000000000000000000000000000000001 -dqnextt231 nexttoward -1.000000000000000000000000000000003 Infinity -> -1.000000000000000000000000000000002 -dqnextt232 nexttoward -1.000000000000000000000000000000004 Infinity -> -1.000000000000000000000000000000003 -dqnextt233 nexttoward -1.000000000000000000000000000000005 Infinity -> -1.000000000000000000000000000000004 -dqnextt234 nexttoward -1.000000000000000000000000000000006 Infinity -> -1.000000000000000000000000000000005 -dqnextt235 nexttoward -1.000000000000000000000000000000007 Infinity -> -1.000000000000000000000000000000006 -dqnextt236 nexttoward -1.000000000000000000000000000000008 Infinity -> -1.000000000000000000000000000000007 -dqnextt237 nexttoward -1.000000000000000000000000000000009 Infinity -> -1.000000000000000000000000000000008 -dqnextt238 nexttoward -1.000000000000000000000000000000010 Infinity -> -1.000000000000000000000000000000009 -dqnextt239 nexttoward -1.000000000000000000000000000000011 Infinity -> -1.000000000000000000000000000000010 -dqnextt240 nexttoward -1.000000000000000000000000000000012 Infinity -> -1.000000000000000000000000000000011 - --- Zeros -dqnextt300 nexttoward 0 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt301 nexttoward 0.00 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt302 nexttoward 0E-300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt303 nexttoward 0E+300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt304 nexttoward 0E+30000 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt305 nexttoward -0 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt306 nexttoward -0.00 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt307 nexttoward -0E-300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt308 nexttoward -0E+300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt309 nexttoward -0E+30000 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded - --- specials -dqnextt350 nexttoward Inf Infinity -> Infinity -dqnextt351 nexttoward -Inf Infinity -> -9.999999999999999999999999999999999E+6144 -dqnextt352 nexttoward NaN Infinity -> NaN -dqnextt353 nexttoward sNaN Infinity -> NaN Invalid_operation -dqnextt354 nexttoward NaN77 Infinity -> NaN77 -dqnextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation -dqnextt356 nexttoward -NaN Infinity -> -NaN -dqnextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation -dqnextt358 nexttoward -NaN77 Infinity -> -NaN77 -dqnextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -dqnextt370 nexttoward -9.999999999999999999999999999999999E+6144 Infinity -> -9.999999999999999999999999999999998E+6144 -dqnextt371 nexttoward -9.999999999999999999999999999999998E+6144 Infinity -> -9.999999999999999999999999999999997E+6144 -dqnextt372 nexttoward -1E-6143 Infinity -> -9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded -dqnextt373 nexttoward -1.000000000000000E-6143 Infinity -> -9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded -dqnextt374 nexttoward -9E-6176 Infinity -> -8E-6176 Underflow Subnormal Inexact Rounded -dqnextt375 nexttoward -9.9E-6175 Infinity -> -9.8E-6175 Underflow Subnormal Inexact Rounded -dqnextt376 nexttoward -9.99999999999999999999999999999E-6147 Infinity -> -9.99999999999999999999999999998E-6147 Underflow Subnormal Inexact Rounded -dqnextt377 nexttoward -9.99999999999999999999999999999999E-6144 Infinity -> -9.99999999999999999999999999999998E-6144 Underflow Subnormal Inexact Rounded -dqnextt378 nexttoward -9.99999999999999999999999999999998E-6144 Infinity -> -9.99999999999999999999999999999997E-6144 Underflow Subnormal Inexact Rounded -dqnextt379 nexttoward -9.99999999999999999999999999999997E-6144 Infinity -> -9.99999999999999999999999999999996E-6144 Underflow Subnormal Inexact Rounded -dqnextt380 nexttoward -0E-6176 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt381 nexttoward -1E-6176 Infinity -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqnextt382 nexttoward -2E-6176 Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded - -dqnextt383 nexttoward 0E-6176 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt384 nexttoward 1E-6176 Infinity -> 2E-6176 Underflow Subnormal Inexact Rounded -dqnextt385 nexttoward 2E-6176 Infinity -> 3E-6176 Underflow Subnormal Inexact Rounded -dqnextt386 nexttoward 10E-6176 Infinity -> 1.1E-6175 Underflow Subnormal Inexact Rounded -dqnextt387 nexttoward 100E-6176 Infinity -> 1.01E-6174 Underflow Subnormal Inexact Rounded -dqnextt388 nexttoward 100000E-6176 Infinity -> 1.00001E-6171 Underflow Subnormal Inexact Rounded -dqnextt389 nexttoward 1.00000000000000000000000000000E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 -dqnextt390 nexttoward 1.000000000000000000000000000000000E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 -dqnextt391 nexttoward 1E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 -dqnextt392 nexttoward 9.999999999999999999999999999999997E+6144 Infinity -> 9.999999999999999999999999999999998E+6144 -dqnextt393 nexttoward 9.999999999999999999999999999999998E+6144 Infinity -> 9.999999999999999999999999999999999E+6144 -dqnextt394 nexttoward 9.999999999999999999999999999999999E+6144 Infinity -> Infinity Overflow Inexact Rounded - -------- lhs>rhs -dqnextt401 nexttoward 0.9999999999999999999999999999999995 -Infinity -> 0.9999999999999999999999999999999994 -dqnextt402 nexttoward 0.9999999999999999999999999999999996 -Infinity -> 0.9999999999999999999999999999999995 -dqnextt403 nexttoward 0.9999999999999999999999999999999997 -Infinity -> 0.9999999999999999999999999999999996 -dqnextt404 nexttoward 0.9999999999999999999999999999999998 -Infinity -> 0.9999999999999999999999999999999997 -dqnextt405 nexttoward 0.9999999999999999999999999999999999 -Infinity -> 0.9999999999999999999999999999999998 -dqnextt406 nexttoward 1.000000000000000000000000000000000 -Infinity -> 0.9999999999999999999999999999999999 -dqnextt407 nexttoward 1.0 -Infinity -> 0.9999999999999999999999999999999999 -dqnextt408 nexttoward 1 -Infinity -> 0.9999999999999999999999999999999999 -dqnextt409 nexttoward 1.000000000000000000000000000000001 -Infinity -> 1.000000000000000000000000000000000 -dqnextt410 nexttoward 1.000000000000000000000000000000002 -Infinity -> 1.000000000000000000000000000000001 -dqnextt411 nexttoward 1.000000000000000000000000000000003 -Infinity -> 1.000000000000000000000000000000002 -dqnextt412 nexttoward 1.000000000000000000000000000000004 -Infinity -> 1.000000000000000000000000000000003 -dqnextt413 nexttoward 1.000000000000000000000000000000005 -Infinity -> 1.000000000000000000000000000000004 -dqnextt414 nexttoward 1.000000000000000000000000000000006 -Infinity -> 1.000000000000000000000000000000005 -dqnextt415 nexttoward 1.000000000000000000000000000000007 -Infinity -> 1.000000000000000000000000000000006 -dqnextt416 nexttoward 1.000000000000000000000000000000008 -Infinity -> 1.000000000000000000000000000000007 -dqnextt417 nexttoward 1.000000000000000000000000000000009 -Infinity -> 1.000000000000000000000000000000008 -dqnextt418 nexttoward 1.000000000000000000000000000000010 -Infinity -> 1.000000000000000000000000000000009 -dqnextt419 nexttoward 1.000000000000000000000000000000011 -Infinity -> 1.000000000000000000000000000000010 -dqnextt420 nexttoward 1.000000000000000000000000000000012 -Infinity -> 1.000000000000000000000000000000011 - -dqnextt421 nexttoward -0.9999999999999999999999999999999995 -Infinity -> -0.9999999999999999999999999999999996 -dqnextt422 nexttoward -0.9999999999999999999999999999999996 -Infinity -> -0.9999999999999999999999999999999997 -dqnextt423 nexttoward -0.9999999999999999999999999999999997 -Infinity -> -0.9999999999999999999999999999999998 -dqnextt424 nexttoward -0.9999999999999999999999999999999998 -Infinity -> -0.9999999999999999999999999999999999 -dqnextt425 nexttoward -0.9999999999999999999999999999999999 -Infinity -> -1.000000000000000000000000000000000 -dqnextt426 nexttoward -1.000000000000000000000000000000000 -Infinity -> -1.000000000000000000000000000000001 -dqnextt427 nexttoward -1.0 -Infinity -> -1.000000000000000000000000000000001 -dqnextt428 nexttoward -1 -Infinity -> -1.000000000000000000000000000000001 -dqnextt429 nexttoward -1.000000000000000000000000000000001 -Infinity -> -1.000000000000000000000000000000002 -dqnextt430 nexttoward -1.000000000000000000000000000000002 -Infinity -> -1.000000000000000000000000000000003 -dqnextt431 nexttoward -1.000000000000000000000000000000003 -Infinity -> -1.000000000000000000000000000000004 -dqnextt432 nexttoward -1.000000000000000000000000000000004 -Infinity -> -1.000000000000000000000000000000005 -dqnextt433 nexttoward -1.000000000000000000000000000000005 -Infinity -> -1.000000000000000000000000000000006 -dqnextt434 nexttoward -1.000000000000000000000000000000006 -Infinity -> -1.000000000000000000000000000000007 -dqnextt435 nexttoward -1.000000000000000000000000000000007 -Infinity -> -1.000000000000000000000000000000008 -dqnextt436 nexttoward -1.000000000000000000000000000000008 -Infinity -> -1.000000000000000000000000000000009 -dqnextt437 nexttoward -1.000000000000000000000000000000009 -Infinity -> -1.000000000000000000000000000000010 -dqnextt438 nexttoward -1.000000000000000000000000000000010 -Infinity -> -1.000000000000000000000000000000011 -dqnextt439 nexttoward -1.000000000000000000000000000000011 -Infinity -> -1.000000000000000000000000000000012 - --- Zeros -dqnextt500 nexttoward -0 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt501 nexttoward 0 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt502 nexttoward 0.00 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt503 nexttoward -0.00 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt504 nexttoward 0E-300 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt505 nexttoward 0E+300 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt506 nexttoward 0E+30000 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt507 nexttoward -0E+30000 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded - --- specials -dqnextt550 nexttoward Inf -Infinity -> 9.999999999999999999999999999999999E+6144 -dqnextt551 nexttoward -Inf -Infinity -> -Infinity -dqnextt552 nexttoward NaN -Infinity -> NaN -dqnextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation -dqnextt554 nexttoward NaN77 -Infinity -> NaN77 -dqnextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation -dqnextt556 nexttoward -NaN -Infinity -> -NaN -dqnextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation -dqnextt558 nexttoward -NaN77 -Infinity -> -NaN77 -dqnextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -dqnextt670 nexttoward 9.999999999999999999999999999999999E+6144 -Infinity -> 9.999999999999999999999999999999998E+6144 -dqnextt671 nexttoward 9.999999999999999999999999999999998E+6144 -Infinity -> 9.999999999999999999999999999999997E+6144 -dqnextt672 nexttoward 1E-6143 -Infinity -> 9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded -dqnextt673 nexttoward 1.000000000000000000000000000000000E-6143 -Infinity -> 9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded -dqnextt674 nexttoward 9E-6176 -Infinity -> 8E-6176 Underflow Subnormal Inexact Rounded -dqnextt675 nexttoward 9.9E-6175 -Infinity -> 9.8E-6175 Underflow Subnormal Inexact Rounded -dqnextt676 nexttoward 9.99999999999999999999999999999E-6147 -Infinity -> 9.99999999999999999999999999998E-6147 Underflow Subnormal Inexact Rounded -dqnextt677 nexttoward 9.99999999999999999999999999999999E-6144 -Infinity -> 9.99999999999999999999999999999998E-6144 Underflow Subnormal Inexact Rounded -dqnextt678 nexttoward 9.99999999999999999999999999999998E-6144 -Infinity -> 9.99999999999999999999999999999997E-6144 Underflow Subnormal Inexact Rounded -dqnextt679 nexttoward 9.99999999999999999999999999999997E-6144 -Infinity -> 9.99999999999999999999999999999996E-6144 Underflow Subnormal Inexact Rounded -dqnextt680 nexttoward 0E-6176 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt681 nexttoward 1E-6176 -Infinity -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqnextt682 nexttoward 2E-6176 -Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded - -dqnextt683 nexttoward -0E-6176 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt684 nexttoward -1E-6176 -Infinity -> -2E-6176 Underflow Subnormal Inexact Rounded -dqnextt685 nexttoward -2E-6176 -Infinity -> -3E-6176 Underflow Subnormal Inexact Rounded -dqnextt686 nexttoward -10E-6176 -Infinity -> -1.1E-6175 Underflow Subnormal Inexact Rounded -dqnextt687 nexttoward -100E-6176 -Infinity -> -1.01E-6174 Underflow Subnormal Inexact Rounded -dqnextt688 nexttoward -100000E-6176 -Infinity -> -1.00001E-6171 Underflow Subnormal Inexact Rounded -dqnextt689 nexttoward -1.00000000000000000000000000000E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 -dqnextt690 nexttoward -1.000000000000000000000000000000000E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 -dqnextt691 nexttoward -1E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 -dqnextt692 nexttoward -9.999999999999999999999999999999998E+6144 -Infinity -> -9.999999999999999999999999999999999E+6144 -dqnextt693 nexttoward -9.999999999999999999999999999999999E+6144 -Infinity -> -Infinity Overflow Inexact Rounded - -------- Specials -dqnextt780 nexttoward -Inf -Inf -> -Infinity -dqnextt781 nexttoward -Inf -1000 -> -9.999999999999999999999999999999999E+6144 -dqnextt782 nexttoward -Inf -1 -> -9.999999999999999999999999999999999E+6144 -dqnextt783 nexttoward -Inf -0 -> -9.999999999999999999999999999999999E+6144 -dqnextt784 nexttoward -Inf 0 -> -9.999999999999999999999999999999999E+6144 -dqnextt785 nexttoward -Inf 1 -> -9.999999999999999999999999999999999E+6144 -dqnextt786 nexttoward -Inf 1000 -> -9.999999999999999999999999999999999E+6144 -dqnextt787 nexttoward -1000 -Inf -> -1000.000000000000000000000000000001 -dqnextt788 nexttoward -Inf -Inf -> -Infinity -dqnextt789 nexttoward -1 -Inf -> -1.000000000000000000000000000000001 -dqnextt790 nexttoward -0 -Inf -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt791 nexttoward 0 -Inf -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt792 nexttoward 1 -Inf -> 0.9999999999999999999999999999999999 -dqnextt793 nexttoward 1000 -Inf -> 999.9999999999999999999999999999999 -dqnextt794 nexttoward Inf -Inf -> 9.999999999999999999999999999999999E+6144 - -dqnextt800 nexttoward Inf -Inf -> 9.999999999999999999999999999999999E+6144 -dqnextt801 nexttoward Inf -1000 -> 9.999999999999999999999999999999999E+6144 -dqnextt802 nexttoward Inf -1 -> 9.999999999999999999999999999999999E+6144 -dqnextt803 nexttoward Inf -0 -> 9.999999999999999999999999999999999E+6144 -dqnextt804 nexttoward Inf 0 -> 9.999999999999999999999999999999999E+6144 -dqnextt805 nexttoward Inf 1 -> 9.999999999999999999999999999999999E+6144 -dqnextt806 nexttoward Inf 1000 -> 9.999999999999999999999999999999999E+6144 -dqnextt807 nexttoward Inf Inf -> Infinity -dqnextt808 nexttoward -1000 Inf -> -999.9999999999999999999999999999999 -dqnextt809 nexttoward -Inf Inf -> -9.999999999999999999999999999999999E+6144 -dqnextt810 nexttoward -1 Inf -> -0.9999999999999999999999999999999999 -dqnextt811 nexttoward -0 Inf -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt812 nexttoward 0 Inf -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt813 nexttoward 1 Inf -> 1.000000000000000000000000000000001 -dqnextt814 nexttoward 1000 Inf -> 1000.000000000000000000000000000001 -dqnextt815 nexttoward Inf Inf -> Infinity - -dqnextt821 nexttoward NaN -Inf -> NaN -dqnextt822 nexttoward NaN -1000 -> NaN -dqnextt823 nexttoward NaN -1 -> NaN -dqnextt824 nexttoward NaN -0 -> NaN -dqnextt825 nexttoward NaN 0 -> NaN -dqnextt826 nexttoward NaN 1 -> NaN -dqnextt827 nexttoward NaN 1000 -> NaN -dqnextt828 nexttoward NaN Inf -> NaN -dqnextt829 nexttoward NaN NaN -> NaN -dqnextt830 nexttoward -Inf NaN -> NaN -dqnextt831 nexttoward -1000 NaN -> NaN -dqnextt832 nexttoward -1 NaN -> NaN -dqnextt833 nexttoward -0 NaN -> NaN -dqnextt834 nexttoward 0 NaN -> NaN -dqnextt835 nexttoward 1 NaN -> NaN -dqnextt836 nexttoward 1000 NaN -> NaN -dqnextt837 nexttoward Inf NaN -> NaN - -dqnextt841 nexttoward sNaN -Inf -> NaN Invalid_operation -dqnextt842 nexttoward sNaN -1000 -> NaN Invalid_operation -dqnextt843 nexttoward sNaN -1 -> NaN Invalid_operation -dqnextt844 nexttoward sNaN -0 -> NaN Invalid_operation -dqnextt845 nexttoward sNaN 0 -> NaN Invalid_operation -dqnextt846 nexttoward sNaN 1 -> NaN Invalid_operation -dqnextt847 nexttoward sNaN 1000 -> NaN Invalid_operation -dqnextt848 nexttoward sNaN NaN -> NaN Invalid_operation -dqnextt849 nexttoward sNaN sNaN -> NaN Invalid_operation -dqnextt850 nexttoward NaN sNaN -> NaN Invalid_operation -dqnextt851 nexttoward -Inf sNaN -> NaN Invalid_operation -dqnextt852 nexttoward -1000 sNaN -> NaN Invalid_operation -dqnextt853 nexttoward -1 sNaN -> NaN Invalid_operation -dqnextt854 nexttoward -0 sNaN -> NaN Invalid_operation -dqnextt855 nexttoward 0 sNaN -> NaN Invalid_operation -dqnextt856 nexttoward 1 sNaN -> NaN Invalid_operation -dqnextt857 nexttoward 1000 sNaN -> NaN Invalid_operation -dqnextt858 nexttoward Inf sNaN -> NaN Invalid_operation -dqnextt859 nexttoward NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqnextt861 nexttoward NaN1 -Inf -> NaN1 -dqnextt862 nexttoward +NaN2 -1000 -> NaN2 -dqnextt863 nexttoward NaN3 1000 -> NaN3 -dqnextt864 nexttoward NaN4 Inf -> NaN4 -dqnextt865 nexttoward NaN5 +NaN6 -> NaN5 -dqnextt866 nexttoward -Inf NaN7 -> NaN7 -dqnextt867 nexttoward -1000 NaN8 -> NaN8 -dqnextt868 nexttoward 1000 NaN9 -> NaN9 -dqnextt869 nexttoward Inf +NaN10 -> NaN10 -dqnextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation -dqnextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation -dqnextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation -dqnextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation -dqnextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation -dqnextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation -dqnextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation -dqnextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation -dqnextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation -dqnextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation -dqnextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqnextt882 nexttoward -NaN26 NaN28 -> -NaN26 -dqnextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqnextt884 nexttoward 1000 -NaN30 -> -NaN30 -dqnextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Null tests -dqnextt900 nexttoward 1 # -> NaN Invalid_operation -dqnextt901 nexttoward # 1 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqNextToward.decTest -- decQuad next toward rhs [754r nextafter] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + + +-- Sanity check with a scattering of numerics +dqnextt001 nexttoward 10 10 -> 10 +dqnextt002 nexttoward -10 -10 -> -10 +dqnextt003 nexttoward 1 10 -> 1.000000000000000000000000000000001 +dqnextt004 nexttoward 1 -10 -> 0.9999999999999999999999999999999999 +dqnextt005 nexttoward -1 10 -> -0.9999999999999999999999999999999999 +dqnextt006 nexttoward -1 -10 -> -1.000000000000000000000000000000001 +dqnextt007 nexttoward 0 10 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt008 nexttoward 0 -10 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt009 nexttoward 9.999999999999999999999999999999999E+6144 +Infinity -> Infinity Overflow Inexact Rounded +dqnextt010 nexttoward -9.999999999999999999999999999999999E+6144 -Infinity -> -Infinity Overflow Inexact Rounded +dqnextt011 nexttoward 9.999999999999999999999999999999999 10 -> 10.00000000000000000000000000000000 +dqnextt012 nexttoward 10 9.999999999999999999999999999999999 -> 9.999999999999999999999999999999999 +dqnextt013 nexttoward -9.999999999999999999999999999999999 -10 -> -10.00000000000000000000000000000000 +dqnextt014 nexttoward -10 -9.999999999999999999999999999999999 -> -9.999999999999999999999999999999999 +dqnextt015 nexttoward 9.999999999999999999999999999999998 10 -> 9.999999999999999999999999999999999 +dqnextt016 nexttoward 10 9.999999999999999999999999999999998 -> 9.999999999999999999999999999999999 +dqnextt017 nexttoward -9.999999999999999999999999999999998 -10 -> -9.999999999999999999999999999999999 +dqnextt018 nexttoward -10 -9.999999999999999999999999999999998 -> -9.999999999999999999999999999999999 + +------- lhs=rhs +-- finites +dqnextt101 nexttoward 7 7 -> 7 +dqnextt102 nexttoward -7 -7 -> -7 +dqnextt103 nexttoward 75 75 -> 75 +dqnextt104 nexttoward -75 -75 -> -75 +dqnextt105 nexttoward 7.50 7.5 -> 7.50 +dqnextt106 nexttoward -7.50 -7.50 -> -7.50 +dqnextt107 nexttoward 7.500 7.5000 -> 7.500 +dqnextt108 nexttoward -7.500 -7.5 -> -7.500 + +-- zeros +dqnextt111 nexttoward 0 0 -> 0 +dqnextt112 nexttoward -0 -0 -> -0 +dqnextt113 nexttoward 0E+4 0 -> 0E+4 +dqnextt114 nexttoward -0E+4 -0 -> -0E+4 +dqnextt115 nexttoward 0.00000000000 0.000000000000 -> 0E-11 +dqnextt116 nexttoward -0.00000000000 -0.00 -> -0E-11 +dqnextt117 nexttoward 0E-141 0 -> 0E-141 +dqnextt118 nexttoward -0E-141 -000 -> -0E-141 + +-- full coefficients, alternating bits +dqnextt121 nexttoward 268268268 268268268 -> 268268268 +dqnextt122 nexttoward -268268268 -268268268 -> -268268268 +dqnextt123 nexttoward 134134134 134134134 -> 134134134 +dqnextt124 nexttoward -134134134 -134134134 -> -134134134 + +-- Nmax, Nmin, Ntiny +dqnextt131 nexttoward 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqnextt132 nexttoward 1E-6143 1E-6143 -> 1E-6143 +dqnextt133 nexttoward 1.000000000000000000000000000000000E-6143 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqnextt134 nexttoward 1E-6176 1E-6176 -> 1E-6176 + +dqnextt135 nexttoward -1E-6176 -1E-6176 -> -1E-6176 +dqnextt136 nexttoward -1.000000000000000000000000000000000E-6143 -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqnextt137 nexttoward -1E-6143 -1E-6143 -> -1E-6143 +dqnextt138 nexttoward -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 + +------- lhs 0.9999999999999999999999999999999996 +dqnextt202 nexttoward 0.9999999999999999999999999999999996 Infinity -> 0.9999999999999999999999999999999997 +dqnextt203 nexttoward 0.9999999999999999999999999999999997 Infinity -> 0.9999999999999999999999999999999998 +dqnextt204 nexttoward 0.9999999999999999999999999999999998 Infinity -> 0.9999999999999999999999999999999999 +dqnextt205 nexttoward 0.9999999999999999999999999999999999 Infinity -> 1.000000000000000000000000000000000 +dqnextt206 nexttoward 1.000000000000000000000000000000000 Infinity -> 1.000000000000000000000000000000001 +dqnextt207 nexttoward 1.0 Infinity -> 1.000000000000000000000000000000001 +dqnextt208 nexttoward 1 Infinity -> 1.000000000000000000000000000000001 +dqnextt209 nexttoward 1.000000000000000000000000000000001 Infinity -> 1.000000000000000000000000000000002 +dqnextt210 nexttoward 1.000000000000000000000000000000002 Infinity -> 1.000000000000000000000000000000003 +dqnextt211 nexttoward 1.000000000000000000000000000000003 Infinity -> 1.000000000000000000000000000000004 +dqnextt212 nexttoward 1.000000000000000000000000000000004 Infinity -> 1.000000000000000000000000000000005 +dqnextt213 nexttoward 1.000000000000000000000000000000005 Infinity -> 1.000000000000000000000000000000006 +dqnextt214 nexttoward 1.000000000000000000000000000000006 Infinity -> 1.000000000000000000000000000000007 +dqnextt215 nexttoward 1.000000000000000000000000000000007 Infinity -> 1.000000000000000000000000000000008 +dqnextt216 nexttoward 1.000000000000000000000000000000008 Infinity -> 1.000000000000000000000000000000009 +dqnextt217 nexttoward 1.000000000000000000000000000000009 Infinity -> 1.000000000000000000000000000000010 +dqnextt218 nexttoward 1.000000000000000000000000000000010 Infinity -> 1.000000000000000000000000000000011 +dqnextt219 nexttoward 1.000000000000000000000000000000011 Infinity -> 1.000000000000000000000000000000012 + +dqnextt221 nexttoward -0.9999999999999999999999999999999995 Infinity -> -0.9999999999999999999999999999999994 +dqnextt222 nexttoward -0.9999999999999999999999999999999996 Infinity -> -0.9999999999999999999999999999999995 +dqnextt223 nexttoward -0.9999999999999999999999999999999997 Infinity -> -0.9999999999999999999999999999999996 +dqnextt224 nexttoward -0.9999999999999999999999999999999998 Infinity -> -0.9999999999999999999999999999999997 +dqnextt225 nexttoward -0.9999999999999999999999999999999999 Infinity -> -0.9999999999999999999999999999999998 +dqnextt226 nexttoward -1.000000000000000000000000000000000 Infinity -> -0.9999999999999999999999999999999999 +dqnextt227 nexttoward -1.0 Infinity -> -0.9999999999999999999999999999999999 +dqnextt228 nexttoward -1 Infinity -> -0.9999999999999999999999999999999999 +dqnextt229 nexttoward -1.000000000000000000000000000000001 Infinity -> -1.000000000000000000000000000000000 +dqnextt230 nexttoward -1.000000000000000000000000000000002 Infinity -> -1.000000000000000000000000000000001 +dqnextt231 nexttoward -1.000000000000000000000000000000003 Infinity -> -1.000000000000000000000000000000002 +dqnextt232 nexttoward -1.000000000000000000000000000000004 Infinity -> -1.000000000000000000000000000000003 +dqnextt233 nexttoward -1.000000000000000000000000000000005 Infinity -> -1.000000000000000000000000000000004 +dqnextt234 nexttoward -1.000000000000000000000000000000006 Infinity -> -1.000000000000000000000000000000005 +dqnextt235 nexttoward -1.000000000000000000000000000000007 Infinity -> -1.000000000000000000000000000000006 +dqnextt236 nexttoward -1.000000000000000000000000000000008 Infinity -> -1.000000000000000000000000000000007 +dqnextt237 nexttoward -1.000000000000000000000000000000009 Infinity -> -1.000000000000000000000000000000008 +dqnextt238 nexttoward -1.000000000000000000000000000000010 Infinity -> -1.000000000000000000000000000000009 +dqnextt239 nexttoward -1.000000000000000000000000000000011 Infinity -> -1.000000000000000000000000000000010 +dqnextt240 nexttoward -1.000000000000000000000000000000012 Infinity -> -1.000000000000000000000000000000011 + +-- Zeros +dqnextt300 nexttoward 0 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt301 nexttoward 0.00 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt302 nexttoward 0E-300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt303 nexttoward 0E+300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt304 nexttoward 0E+30000 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt305 nexttoward -0 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt306 nexttoward -0.00 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt307 nexttoward -0E-300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt308 nexttoward -0E+300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt309 nexttoward -0E+30000 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded + +-- specials +dqnextt350 nexttoward Inf Infinity -> Infinity +dqnextt351 nexttoward -Inf Infinity -> -9.999999999999999999999999999999999E+6144 +dqnextt352 nexttoward NaN Infinity -> NaN +dqnextt353 nexttoward sNaN Infinity -> NaN Invalid_operation +dqnextt354 nexttoward NaN77 Infinity -> NaN77 +dqnextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation +dqnextt356 nexttoward -NaN Infinity -> -NaN +dqnextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation +dqnextt358 nexttoward -NaN77 Infinity -> -NaN77 +dqnextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +dqnextt370 nexttoward -9.999999999999999999999999999999999E+6144 Infinity -> -9.999999999999999999999999999999998E+6144 +dqnextt371 nexttoward -9.999999999999999999999999999999998E+6144 Infinity -> -9.999999999999999999999999999999997E+6144 +dqnextt372 nexttoward -1E-6143 Infinity -> -9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded +dqnextt373 nexttoward -1.000000000000000E-6143 Infinity -> -9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded +dqnextt374 nexttoward -9E-6176 Infinity -> -8E-6176 Underflow Subnormal Inexact Rounded +dqnextt375 nexttoward -9.9E-6175 Infinity -> -9.8E-6175 Underflow Subnormal Inexact Rounded +dqnextt376 nexttoward -9.99999999999999999999999999999E-6147 Infinity -> -9.99999999999999999999999999998E-6147 Underflow Subnormal Inexact Rounded +dqnextt377 nexttoward -9.99999999999999999999999999999999E-6144 Infinity -> -9.99999999999999999999999999999998E-6144 Underflow Subnormal Inexact Rounded +dqnextt378 nexttoward -9.99999999999999999999999999999998E-6144 Infinity -> -9.99999999999999999999999999999997E-6144 Underflow Subnormal Inexact Rounded +dqnextt379 nexttoward -9.99999999999999999999999999999997E-6144 Infinity -> -9.99999999999999999999999999999996E-6144 Underflow Subnormal Inexact Rounded +dqnextt380 nexttoward -0E-6176 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt381 nexttoward -1E-6176 Infinity -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqnextt382 nexttoward -2E-6176 Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded + +dqnextt383 nexttoward 0E-6176 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt384 nexttoward 1E-6176 Infinity -> 2E-6176 Underflow Subnormal Inexact Rounded +dqnextt385 nexttoward 2E-6176 Infinity -> 3E-6176 Underflow Subnormal Inexact Rounded +dqnextt386 nexttoward 10E-6176 Infinity -> 1.1E-6175 Underflow Subnormal Inexact Rounded +dqnextt387 nexttoward 100E-6176 Infinity -> 1.01E-6174 Underflow Subnormal Inexact Rounded +dqnextt388 nexttoward 100000E-6176 Infinity -> 1.00001E-6171 Underflow Subnormal Inexact Rounded +dqnextt389 nexttoward 1.00000000000000000000000000000E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 +dqnextt390 nexttoward 1.000000000000000000000000000000000E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 +dqnextt391 nexttoward 1E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 +dqnextt392 nexttoward 9.999999999999999999999999999999997E+6144 Infinity -> 9.999999999999999999999999999999998E+6144 +dqnextt393 nexttoward 9.999999999999999999999999999999998E+6144 Infinity -> 9.999999999999999999999999999999999E+6144 +dqnextt394 nexttoward 9.999999999999999999999999999999999E+6144 Infinity -> Infinity Overflow Inexact Rounded + +------- lhs>rhs +dqnextt401 nexttoward 0.9999999999999999999999999999999995 -Infinity -> 0.9999999999999999999999999999999994 +dqnextt402 nexttoward 0.9999999999999999999999999999999996 -Infinity -> 0.9999999999999999999999999999999995 +dqnextt403 nexttoward 0.9999999999999999999999999999999997 -Infinity -> 0.9999999999999999999999999999999996 +dqnextt404 nexttoward 0.9999999999999999999999999999999998 -Infinity -> 0.9999999999999999999999999999999997 +dqnextt405 nexttoward 0.9999999999999999999999999999999999 -Infinity -> 0.9999999999999999999999999999999998 +dqnextt406 nexttoward 1.000000000000000000000000000000000 -Infinity -> 0.9999999999999999999999999999999999 +dqnextt407 nexttoward 1.0 -Infinity -> 0.9999999999999999999999999999999999 +dqnextt408 nexttoward 1 -Infinity -> 0.9999999999999999999999999999999999 +dqnextt409 nexttoward 1.000000000000000000000000000000001 -Infinity -> 1.000000000000000000000000000000000 +dqnextt410 nexttoward 1.000000000000000000000000000000002 -Infinity -> 1.000000000000000000000000000000001 +dqnextt411 nexttoward 1.000000000000000000000000000000003 -Infinity -> 1.000000000000000000000000000000002 +dqnextt412 nexttoward 1.000000000000000000000000000000004 -Infinity -> 1.000000000000000000000000000000003 +dqnextt413 nexttoward 1.000000000000000000000000000000005 -Infinity -> 1.000000000000000000000000000000004 +dqnextt414 nexttoward 1.000000000000000000000000000000006 -Infinity -> 1.000000000000000000000000000000005 +dqnextt415 nexttoward 1.000000000000000000000000000000007 -Infinity -> 1.000000000000000000000000000000006 +dqnextt416 nexttoward 1.000000000000000000000000000000008 -Infinity -> 1.000000000000000000000000000000007 +dqnextt417 nexttoward 1.000000000000000000000000000000009 -Infinity -> 1.000000000000000000000000000000008 +dqnextt418 nexttoward 1.000000000000000000000000000000010 -Infinity -> 1.000000000000000000000000000000009 +dqnextt419 nexttoward 1.000000000000000000000000000000011 -Infinity -> 1.000000000000000000000000000000010 +dqnextt420 nexttoward 1.000000000000000000000000000000012 -Infinity -> 1.000000000000000000000000000000011 + +dqnextt421 nexttoward -0.9999999999999999999999999999999995 -Infinity -> -0.9999999999999999999999999999999996 +dqnextt422 nexttoward -0.9999999999999999999999999999999996 -Infinity -> -0.9999999999999999999999999999999997 +dqnextt423 nexttoward -0.9999999999999999999999999999999997 -Infinity -> -0.9999999999999999999999999999999998 +dqnextt424 nexttoward -0.9999999999999999999999999999999998 -Infinity -> -0.9999999999999999999999999999999999 +dqnextt425 nexttoward -0.9999999999999999999999999999999999 -Infinity -> -1.000000000000000000000000000000000 +dqnextt426 nexttoward -1.000000000000000000000000000000000 -Infinity -> -1.000000000000000000000000000000001 +dqnextt427 nexttoward -1.0 -Infinity -> -1.000000000000000000000000000000001 +dqnextt428 nexttoward -1 -Infinity -> -1.000000000000000000000000000000001 +dqnextt429 nexttoward -1.000000000000000000000000000000001 -Infinity -> -1.000000000000000000000000000000002 +dqnextt430 nexttoward -1.000000000000000000000000000000002 -Infinity -> -1.000000000000000000000000000000003 +dqnextt431 nexttoward -1.000000000000000000000000000000003 -Infinity -> -1.000000000000000000000000000000004 +dqnextt432 nexttoward -1.000000000000000000000000000000004 -Infinity -> -1.000000000000000000000000000000005 +dqnextt433 nexttoward -1.000000000000000000000000000000005 -Infinity -> -1.000000000000000000000000000000006 +dqnextt434 nexttoward -1.000000000000000000000000000000006 -Infinity -> -1.000000000000000000000000000000007 +dqnextt435 nexttoward -1.000000000000000000000000000000007 -Infinity -> -1.000000000000000000000000000000008 +dqnextt436 nexttoward -1.000000000000000000000000000000008 -Infinity -> -1.000000000000000000000000000000009 +dqnextt437 nexttoward -1.000000000000000000000000000000009 -Infinity -> -1.000000000000000000000000000000010 +dqnextt438 nexttoward -1.000000000000000000000000000000010 -Infinity -> -1.000000000000000000000000000000011 +dqnextt439 nexttoward -1.000000000000000000000000000000011 -Infinity -> -1.000000000000000000000000000000012 + +-- Zeros +dqnextt500 nexttoward -0 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt501 nexttoward 0 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt502 nexttoward 0.00 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt503 nexttoward -0.00 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt504 nexttoward 0E-300 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt505 nexttoward 0E+300 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt506 nexttoward 0E+30000 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt507 nexttoward -0E+30000 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded + +-- specials +dqnextt550 nexttoward Inf -Infinity -> 9.999999999999999999999999999999999E+6144 +dqnextt551 nexttoward -Inf -Infinity -> -Infinity +dqnextt552 nexttoward NaN -Infinity -> NaN +dqnextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation +dqnextt554 nexttoward NaN77 -Infinity -> NaN77 +dqnextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation +dqnextt556 nexttoward -NaN -Infinity -> -NaN +dqnextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation +dqnextt558 nexttoward -NaN77 -Infinity -> -NaN77 +dqnextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +dqnextt670 nexttoward 9.999999999999999999999999999999999E+6144 -Infinity -> 9.999999999999999999999999999999998E+6144 +dqnextt671 nexttoward 9.999999999999999999999999999999998E+6144 -Infinity -> 9.999999999999999999999999999999997E+6144 +dqnextt672 nexttoward 1E-6143 -Infinity -> 9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded +dqnextt673 nexttoward 1.000000000000000000000000000000000E-6143 -Infinity -> 9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded +dqnextt674 nexttoward 9E-6176 -Infinity -> 8E-6176 Underflow Subnormal Inexact Rounded +dqnextt675 nexttoward 9.9E-6175 -Infinity -> 9.8E-6175 Underflow Subnormal Inexact Rounded +dqnextt676 nexttoward 9.99999999999999999999999999999E-6147 -Infinity -> 9.99999999999999999999999999998E-6147 Underflow Subnormal Inexact Rounded +dqnextt677 nexttoward 9.99999999999999999999999999999999E-6144 -Infinity -> 9.99999999999999999999999999999998E-6144 Underflow Subnormal Inexact Rounded +dqnextt678 nexttoward 9.99999999999999999999999999999998E-6144 -Infinity -> 9.99999999999999999999999999999997E-6144 Underflow Subnormal Inexact Rounded +dqnextt679 nexttoward 9.99999999999999999999999999999997E-6144 -Infinity -> 9.99999999999999999999999999999996E-6144 Underflow Subnormal Inexact Rounded +dqnextt680 nexttoward 0E-6176 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt681 nexttoward 1E-6176 -Infinity -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqnextt682 nexttoward 2E-6176 -Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded + +dqnextt683 nexttoward -0E-6176 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt684 nexttoward -1E-6176 -Infinity -> -2E-6176 Underflow Subnormal Inexact Rounded +dqnextt685 nexttoward -2E-6176 -Infinity -> -3E-6176 Underflow Subnormal Inexact Rounded +dqnextt686 nexttoward -10E-6176 -Infinity -> -1.1E-6175 Underflow Subnormal Inexact Rounded +dqnextt687 nexttoward -100E-6176 -Infinity -> -1.01E-6174 Underflow Subnormal Inexact Rounded +dqnextt688 nexttoward -100000E-6176 -Infinity -> -1.00001E-6171 Underflow Subnormal Inexact Rounded +dqnextt689 nexttoward -1.00000000000000000000000000000E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 +dqnextt690 nexttoward -1.000000000000000000000000000000000E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 +dqnextt691 nexttoward -1E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 +dqnextt692 nexttoward -9.999999999999999999999999999999998E+6144 -Infinity -> -9.999999999999999999999999999999999E+6144 +dqnextt693 nexttoward -9.999999999999999999999999999999999E+6144 -Infinity -> -Infinity Overflow Inexact Rounded + +------- Specials +dqnextt780 nexttoward -Inf -Inf -> -Infinity +dqnextt781 nexttoward -Inf -1000 -> -9.999999999999999999999999999999999E+6144 +dqnextt782 nexttoward -Inf -1 -> -9.999999999999999999999999999999999E+6144 +dqnextt783 nexttoward -Inf -0 -> -9.999999999999999999999999999999999E+6144 +dqnextt784 nexttoward -Inf 0 -> -9.999999999999999999999999999999999E+6144 +dqnextt785 nexttoward -Inf 1 -> -9.999999999999999999999999999999999E+6144 +dqnextt786 nexttoward -Inf 1000 -> -9.999999999999999999999999999999999E+6144 +dqnextt787 nexttoward -1000 -Inf -> -1000.000000000000000000000000000001 +dqnextt788 nexttoward -Inf -Inf -> -Infinity +dqnextt789 nexttoward -1 -Inf -> -1.000000000000000000000000000000001 +dqnextt790 nexttoward -0 -Inf -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt791 nexttoward 0 -Inf -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt792 nexttoward 1 -Inf -> 0.9999999999999999999999999999999999 +dqnextt793 nexttoward 1000 -Inf -> 999.9999999999999999999999999999999 +dqnextt794 nexttoward Inf -Inf -> 9.999999999999999999999999999999999E+6144 + +dqnextt800 nexttoward Inf -Inf -> 9.999999999999999999999999999999999E+6144 +dqnextt801 nexttoward Inf -1000 -> 9.999999999999999999999999999999999E+6144 +dqnextt802 nexttoward Inf -1 -> 9.999999999999999999999999999999999E+6144 +dqnextt803 nexttoward Inf -0 -> 9.999999999999999999999999999999999E+6144 +dqnextt804 nexttoward Inf 0 -> 9.999999999999999999999999999999999E+6144 +dqnextt805 nexttoward Inf 1 -> 9.999999999999999999999999999999999E+6144 +dqnextt806 nexttoward Inf 1000 -> 9.999999999999999999999999999999999E+6144 +dqnextt807 nexttoward Inf Inf -> Infinity +dqnextt808 nexttoward -1000 Inf -> -999.9999999999999999999999999999999 +dqnextt809 nexttoward -Inf Inf -> -9.999999999999999999999999999999999E+6144 +dqnextt810 nexttoward -1 Inf -> -0.9999999999999999999999999999999999 +dqnextt811 nexttoward -0 Inf -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt812 nexttoward 0 Inf -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt813 nexttoward 1 Inf -> 1.000000000000000000000000000000001 +dqnextt814 nexttoward 1000 Inf -> 1000.000000000000000000000000000001 +dqnextt815 nexttoward Inf Inf -> Infinity + +dqnextt821 nexttoward NaN -Inf -> NaN +dqnextt822 nexttoward NaN -1000 -> NaN +dqnextt823 nexttoward NaN -1 -> NaN +dqnextt824 nexttoward NaN -0 -> NaN +dqnextt825 nexttoward NaN 0 -> NaN +dqnextt826 nexttoward NaN 1 -> NaN +dqnextt827 nexttoward NaN 1000 -> NaN +dqnextt828 nexttoward NaN Inf -> NaN +dqnextt829 nexttoward NaN NaN -> NaN +dqnextt830 nexttoward -Inf NaN -> NaN +dqnextt831 nexttoward -1000 NaN -> NaN +dqnextt832 nexttoward -1 NaN -> NaN +dqnextt833 nexttoward -0 NaN -> NaN +dqnextt834 nexttoward 0 NaN -> NaN +dqnextt835 nexttoward 1 NaN -> NaN +dqnextt836 nexttoward 1000 NaN -> NaN +dqnextt837 nexttoward Inf NaN -> NaN + +dqnextt841 nexttoward sNaN -Inf -> NaN Invalid_operation +dqnextt842 nexttoward sNaN -1000 -> NaN Invalid_operation +dqnextt843 nexttoward sNaN -1 -> NaN Invalid_operation +dqnextt844 nexttoward sNaN -0 -> NaN Invalid_operation +dqnextt845 nexttoward sNaN 0 -> NaN Invalid_operation +dqnextt846 nexttoward sNaN 1 -> NaN Invalid_operation +dqnextt847 nexttoward sNaN 1000 -> NaN Invalid_operation +dqnextt848 nexttoward sNaN NaN -> NaN Invalid_operation +dqnextt849 nexttoward sNaN sNaN -> NaN Invalid_operation +dqnextt850 nexttoward NaN sNaN -> NaN Invalid_operation +dqnextt851 nexttoward -Inf sNaN -> NaN Invalid_operation +dqnextt852 nexttoward -1000 sNaN -> NaN Invalid_operation +dqnextt853 nexttoward -1 sNaN -> NaN Invalid_operation +dqnextt854 nexttoward -0 sNaN -> NaN Invalid_operation +dqnextt855 nexttoward 0 sNaN -> NaN Invalid_operation +dqnextt856 nexttoward 1 sNaN -> NaN Invalid_operation +dqnextt857 nexttoward 1000 sNaN -> NaN Invalid_operation +dqnextt858 nexttoward Inf sNaN -> NaN Invalid_operation +dqnextt859 nexttoward NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqnextt861 nexttoward NaN1 -Inf -> NaN1 +dqnextt862 nexttoward +NaN2 -1000 -> NaN2 +dqnextt863 nexttoward NaN3 1000 -> NaN3 +dqnextt864 nexttoward NaN4 Inf -> NaN4 +dqnextt865 nexttoward NaN5 +NaN6 -> NaN5 +dqnextt866 nexttoward -Inf NaN7 -> NaN7 +dqnextt867 nexttoward -1000 NaN8 -> NaN8 +dqnextt868 nexttoward 1000 NaN9 -> NaN9 +dqnextt869 nexttoward Inf +NaN10 -> NaN10 +dqnextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation +dqnextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation +dqnextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation +dqnextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation +dqnextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation +dqnextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation +dqnextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation +dqnextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation +dqnextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation +dqnextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation +dqnextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqnextt882 nexttoward -NaN26 NaN28 -> -NaN26 +dqnextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqnextt884 nexttoward 1000 -NaN30 -> -NaN30 +dqnextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Null tests +dqnextt900 nexttoward 1 # -> NaN Invalid_operation +dqnextt901 nexttoward # 1 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqOr.decTest b/Lib/test/decimaltestdata/dqOr.decTest index daa3c860942..1fd34b2b35a 100644 --- a/Lib/test/decimaltestdata/dqOr.decTest +++ b/Lib/test/decimaltestdata/dqOr.decTest @@ -1,401 +1,401 @@ ------------------------------------------------------------------------- --- dqOr.decTest -- digitwise logical OR for decQuads -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check (truth table) -dqor001 or 0 0 -> 0 -dqor002 or 0 1 -> 1 -dqor003 or 1 0 -> 1 -dqor004 or 1 1 -> 1 -dqor005 or 1100 1010 -> 1110 --- and at msd and msd-1 -dqor006 or 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqor007 or 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqor008 or 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqor009 or 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqor010 or 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqor011 or 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 -dqor012 or 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 100000000000000000000000000000000 -dqor013 or 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 - --- Various lengths -dqor601 or 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111111 -dqor602 or 1011111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111111 -dqor603 or 1101111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111111 -dqor604 or 1110111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111111111 -dqor605 or 1111011111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111111111 -dqor606 or 1111101111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111111111 -dqor607 or 1111110111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111111111111 -dqor608 or 1111111011111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111111111111 -dqor609 or 1111111101111111111111111111111111 1111111111111111111111111011111111 -> 1111111111111111111111111111111111 -dqor610 or 1111111110111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111111111111111 -dqor611 or 1111111111011111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111111111111111 -dqor612 or 1111111111101111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111111111111111 -dqor613 or 1111111111110111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111111111111111111 -dqor614 or 1111111111111011111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111111111111111111 -dqor615 or 1111111111111101111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111111111111111111 -dqor616 or 1111111111111110111111111111111111 1111111111111111110111111111111111 -> 1111111111111111111111111111111111 -dqor617 or 1111111111111111011111111111111111 1111111111111111101111111111111111 -> 1111111111111111111111111111111111 -dqor618 or 1111111111111111101111111111111111 1111111111111111011111111111111111 -> 1111111111111111111111111111111111 -dqor619 or 1111111111111111110111111111111111 1111111111111110111111111111111111 -> 1111111111111111111111111111111111 -dqor620 or 1111111111111111111011111111111111 1111111111111101111111111111111111 -> 1111111111111111111111111111111111 -dqor621 or 1111111111111111111101111111111111 1111111111111011111111111111111111 -> 1111111111111111111111111111111111 -dqor622 or 1111111111111111111110111111111111 1111111111110111111111111111111111 -> 1111111111111111111111111111111111 -dqor623 or 1111111111111111111111011111111111 1111111111101111111111111111111111 -> 1111111111111111111111111111111111 -dqor624 or 1111111111111111111111101111111111 1111111111011111111111111111111111 -> 1111111111111111111111111111111111 -dqor625 or 1111111111111111111111110111111111 1111111110111111111111111111111111 -> 1111111111111111111111111111111111 -dqor626 or 1111111111111111111111111011111111 1111111101111111111111111111111111 -> 1111111111111111111111111111111111 -dqor627 or 1111111111111111111111111101111111 1111111011111111111111111111111111 -> 1111111111111111111111111111111111 -dqor628 or 1111111111111111111111111110111111 1111110111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor629 or 1111111111111111111111111111011111 1111101111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor630 or 1111111111111111111111111111101111 1111011111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor631 or 1111111111111111111111111111110111 1110111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor632 or 1111111111111111111111111111111011 1101111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor633 or 1111111111111111111111111111111101 1011111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor634 or 1111111111111111111111111111111110 0111111111111111111111111111111111 -> 1111111111111111111111111111111111 - -dqor641 or 1111111111111111111111111111111110 0111111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor642 or 1111111111111111111111111111111101 1011111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor643 or 1111111111111111111111111111111011 1101111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor644 or 1111111111111111111111111111110111 1110111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor645 or 1111111111111111111111111111101111 1111011111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor646 or 1111111111111111111111111111011111 1111101111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor647 or 1111111111111111111111111110111111 1111110111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor648 or 1111111111111111111111111101111111 1111111011111111111111111111111111 -> 1111111111111111111111111111111111 -dqor649 or 1111111111111111111111111011111111 1111111101111111111111111111111111 -> 1111111111111111111111111111111111 -dqor650 or 1111111111111111111111110111111111 1111111110111111111111111111111111 -> 1111111111111111111111111111111111 -dqor651 or 1111111111111111111111101111111111 1111111111011111111111111111111111 -> 1111111111111111111111111111111111 -dqor652 or 1111111111111111111111011111111111 1111111111101111111111111111111111 -> 1111111111111111111111111111111111 -dqor653 or 1111111111111111111110111111111111 1111111111110111111111111111111111 -> 1111111111111111111111111111111111 -dqor654 or 1111111111111111111101111111111111 1111111111111011111111111111111111 -> 1111111111111111111111111111111111 -dqor655 or 1111111111111111111011111111111111 1111111111111101111111111111111111 -> 1111111111111111111111111111111111 -dqor656 or 1111111111111111110111111111111111 1111111111111110111111111111111111 -> 1111111111111111111111111111111111 -dqor657 or 1010101010101010101010101010101010 1010101010101010001010101010101010 -> 1010101010101010101010101010101010 -dqor658 or 1111111111111111011111111111111111 1111111111111111101111111111111111 -> 1111111111111111111111111111111111 -dqor659 or 1111111111111110111111111111111111 1111111111111111110111111111111111 -> 1111111111111111111111111111111111 -dqor660 or 1111111111111101111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111111111111111111 -dqor661 or 1111111111111011111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111111111111111111 -dqor662 or 1111111111110111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111111111111111111 -dqor663 or 1111111111101111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111111111111111 -dqor664 or 1111111111011111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111111111111111 -dqor665 or 1111111110111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111111111111111 -dqor666 or 0101010101010101010101010101010101 0101010101010101010101010001010101 -> 101010101010101010101010101010101 -dqor667 or 1111111011111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111111111111 -dqor668 or 1111110111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111111111111 -dqor669 or 1111101111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111111111 -dqor670 or 1111011111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111111111 -dqor671 or 1110111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111111111 -dqor672 or 1101111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111111 -dqor673 or 1011111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111111 -dqor674 or 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111111 -dqor675 or 0111111111111111111111111111111110 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 -dqor676 or 1111111111111111111111111111111110 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 - -dqor681 or 0111111111111111111111111111111111 0111111111011111111111111111111110 -> 111111111111111111111111111111111 -dqor682 or 1011111111111111111111111111111111 1011111110101111111111111111111101 -> 1011111111111111111111111111111111 -dqor683 or 1101111111111111111111111111111111 1101111101110111111111111111111011 -> 1101111111111111111111111111111111 -dqor684 or 1110111111111111111111111111111111 1110111011111011111111111111110111 -> 1110111111111111111111111111111111 -dqor685 or 1111011111111111111111111111111111 1111010111111101111111111111101111 -> 1111011111111111111111111111111111 -dqor686 or 1111101111111111111111111111111111 1111101111111110111111111111011111 -> 1111101111111111111111111111111111 -dqor687 or 1111110111111111111111111111111111 1111010111111111011111111110111111 -> 1111110111111111111111111111111111 -dqor688 or 1111111011111111111111111111111111 1110111011111111101111111101111111 -> 1111111011111111111111111111111111 -dqor689 or 1111111101111111111111111111111111 1101111101111111110111111011111111 -> 1111111101111111111111111111111111 -dqor690 or 1111111110111111111111111111111111 1011111110111111111011110111111110 -> 1111111110111111111111111111111111 -dqor691 or 1111111111011111111111111111111111 0111111111011111111101101111111101 -> 1111111111011111111111111111111111 -dqor692 or 1111111111101111111111111111111111 1111111111101111111110011111111011 -> 1111111111101111111111111111111111 -dqor693 or 1111111111110111111111111111111111 1111111111110111111110011111110111 -> 1111111111110111111111111111111111 -dqor694 or 1111111111111011111111111111111111 1111111111111011111101101111101111 -> 1111111111111011111111111111111111 -dqor695 or 1111111111111101111111111111111111 1111111111111101111011110111011111 -> 1111111111111101111111111111111111 -dqor696 or 1111111111111110111111111111111111 1111111111111110110111111010111111 -> 1111111111111110111111111111111111 -dqor697 or 1111111111111111011111111111111111 1111111111111111001111111101111111 -> 1111111111111111011111111111111111 -dqor698 or 1111111111111111101111111111111111 1111111111111111001111111010111111 -> 1111111111111111101111111111111111 -dqor699 or 1111111111111111110111111111111111 1111111111111110110111110111011111 -> 1111111111111111110111111111111111 -dqor700 or 1111111111111111111011111111111111 1111111111111101111011101111101111 -> 1111111111111111111011111111111111 -dqor701 or 1111111111111111111101111111111111 1111111111111011111101011111110111 -> 1111111111111111111101111111111111 -dqor702 or 1111111111111111111110111111111111 1111111111110111111110111111111011 -> 1111111111111111111110111111111111 -dqor703 or 1111111111111111111111011111111111 1111111111101111111101011111111101 -> 1111111111111111111111011111111111 -dqor704 or 1111111111111111111111101111111111 1111111111011111111011101111111110 -> 1111111111111111111111101111111111 -dqor705 or 1111111111111111111111110111111111 0111111110111111110111110111111111 -> 1111111111111111111111110111111111 -dqor706 or 1111111111111111111111111011111111 1011111101111111101111111011111111 -> 1111111111111111111111111011111111 -dqor707 or 1111111111111111111111111101111111 1101111011111111011111111101111111 -> 1111111111111111111111111101111111 -dqor708 or 1111111111111111111111111110111111 1110110111111110111111111110111111 -> 1111111111111111111111111110111111 -dqor709 or 1111111111111111111111111111011111 1111001111111101111111111111011111 -> 1111111111111111111111111111011111 -dqor710 or 1111111111111111111111111111101111 1111001111111011111111111111101111 -> 1111111111111111111111111111101111 -dqor711 or 1111111111111111111111111111110111 1110110111110111111111111111110111 -> 1111111111111111111111111111110111 -dqor712 or 1111111111111111111111111111111011 1101111011101111111111111111111011 -> 1111111111111111111111111111111011 -dqor713 or 1111111111111111111111111111111101 1011111101011111111111111111111101 -> 1111111111111111111111111111111101 -dqor714 or 1111111111111111111111111111111110 0111111110111111111111111111111110 -> 1111111111111111111111111111111110 - - - --- 1234567890123456 1234567890123456 1234567890123456 -dqor020 or 1111111111111111 1111111111111111 -> 1111111111111111 -dqor021 or 111111111111111 111111111111111 -> 111111111111111 -dqor022 or 11111111111111 11111111111111 -> 11111111111111 -dqor023 or 1111111111111 1111111111111 -> 1111111111111 -dqor024 or 111111111111 111111111111 -> 111111111111 -dqor025 or 11111111111 11111111111 -> 11111111111 -dqor026 or 1111111111 1111111111 -> 1111111111 -dqor027 or 111111111 111111111 -> 111111111 -dqor028 or 11111111 11111111 -> 11111111 -dqor029 or 1111111 1111111 -> 1111111 -dqor030 or 111111 111111 -> 111111 -dqor031 or 11111 11111 -> 11111 -dqor032 or 1111 1111 -> 1111 -dqor033 or 111 111 -> 111 -dqor034 or 11 11 -> 11 -dqor035 or 1 1 -> 1 -dqor036 or 0 0 -> 0 - -dqor042 or 111111110000000 1111111110000000 -> 1111111110000000 -dqor043 or 11111110000000 1000000100000000 -> 1011111110000000 -dqor044 or 1111110000000 1000001000000000 -> 1001111110000000 -dqor045 or 111110000000 1000010000000000 -> 1000111110000000 -dqor046 or 11110000000 1000100000000000 -> 1000111110000000 -dqor047 or 1110000000 1001000000000000 -> 1001001110000000 -dqor048 or 110000000 1010000000000000 -> 1010000110000000 -dqor049 or 10000000 1100000000000000 -> 1100000010000000 - -dqor090 or 011111111 111101111 -> 111111111 -dqor091 or 101111111 111101111 -> 111111111 -dqor092 or 110111111 111101111 -> 111111111 -dqor093 or 111011111 111101111 -> 111111111 -dqor094 or 111101111 111101111 -> 111101111 -dqor095 or 111110111 111101111 -> 111111111 -dqor096 or 111111011 111101111 -> 111111111 -dqor097 or 111111101 111101111 -> 111111111 -dqor098 or 111111110 111101111 -> 111111111 - -dqor100 or 111101111 011111111 -> 111111111 -dqor101 or 111101111 101111111 -> 111111111 -dqor102 or 111101111 110111111 -> 111111111 -dqor103 or 111101111 111011111 -> 111111111 -dqor104 or 111101111 111101111 -> 111101111 -dqor105 or 111101111 111110111 -> 111111111 -dqor106 or 111101111 111111011 -> 111111111 -dqor107 or 111101111 111111101 -> 111111111 -dqor108 or 111101111 111111110 -> 111111111 - --- non-0/1 should not be accepted, nor should signs -dqor220 or 111111112 111111111 -> NaN Invalid_operation -dqor221 or 333333333 333333333 -> NaN Invalid_operation -dqor222 or 555555555 555555555 -> NaN Invalid_operation -dqor223 or 777777777 777777777 -> NaN Invalid_operation -dqor224 or 999999999 999999999 -> NaN Invalid_operation -dqor225 or 222222222 999999999 -> NaN Invalid_operation -dqor226 or 444444444 999999999 -> NaN Invalid_operation -dqor227 or 666666666 999999999 -> NaN Invalid_operation -dqor228 or 888888888 999999999 -> NaN Invalid_operation -dqor229 or 999999999 222222222 -> NaN Invalid_operation -dqor230 or 999999999 444444444 -> NaN Invalid_operation -dqor231 or 999999999 666666666 -> NaN Invalid_operation -dqor232 or 999999999 888888888 -> NaN Invalid_operation --- a few randoms -dqor240 or 567468689 -934981942 -> NaN Invalid_operation -dqor241 or 567367689 934981942 -> NaN Invalid_operation -dqor242 or -631917772 -706014634 -> NaN Invalid_operation -dqor243 or -756253257 138579234 -> NaN Invalid_operation -dqor244 or 835590149 567435400 -> NaN Invalid_operation --- test MSD -dqor250 or 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqor251 or 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqor252 or 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqor253 or 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqor254 or 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqor255 or 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqor256 or 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqor257 or 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqor258 or 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqor259 or 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqor260 or 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqor261 or 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation -dqor262 or 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqor263 or 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqor264 or 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqor265 or 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation --- test MSD-1 -dqor270 or 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation -dqor271 or 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation -dqor272 or 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation -dqor273 or 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation -dqor274 or 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation -dqor275 or 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation -dqor276 or 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation -dqor277 or 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation --- test LSD -dqor280 or 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation -dqor281 or 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation -dqor282 or 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation -dqor283 or 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation -dqor284 or 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation -dqor285 or 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation -dqor286 or 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation -dqor287 or 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation --- test Middie -dqor288 or 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation -dqor289 or 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation -dqor290 or 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation -dqor291 or 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation -dqor292 or 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation -dqor293 or 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation -dqor294 or 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation -dqor295 or 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation --- signs -dqor296 or -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation -dqor297 or -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation -dqor298 or 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation -dqor299 or 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 1000001111001111001111000011000100 - --- Nmax, Nmin, Ntiny-like -dqor331 or 2 9.99999999E+1999 -> NaN Invalid_operation -dqor332 or 3 1E-1999 -> NaN Invalid_operation -dqor333 or 4 1.00000000E-1999 -> NaN Invalid_operation -dqor334 or 5 1E-1009 -> NaN Invalid_operation -dqor335 or 6 -1E-1009 -> NaN Invalid_operation -dqor336 or 7 -1.00000000E-1999 -> NaN Invalid_operation -dqor337 or 8 -1E-1999 -> NaN Invalid_operation -dqor338 or 9 -9.99999999E+1999 -> NaN Invalid_operation -dqor341 or 9.99999999E+2999 -18 -> NaN Invalid_operation -dqor342 or 1E-2999 01 -> NaN Invalid_operation -dqor343 or 1.00000000E-2999 -18 -> NaN Invalid_operation -dqor344 or 1E-1009 18 -> NaN Invalid_operation -dqor345 or -1E-1009 -10 -> NaN Invalid_operation -dqor346 or -1.00000000E-2999 18 -> NaN Invalid_operation -dqor347 or -1E-2999 10 -> NaN Invalid_operation -dqor348 or -9.99999999E+2999 -18 -> NaN Invalid_operation - --- A few other non-integers -dqor361 or 1.0 1 -> NaN Invalid_operation -dqor362 or 1E+1 1 -> NaN Invalid_operation -dqor363 or 0.0 1 -> NaN Invalid_operation -dqor364 or 0E+1 1 -> NaN Invalid_operation -dqor365 or 9.9 1 -> NaN Invalid_operation -dqor366 or 9E+1 1 -> NaN Invalid_operation -dqor371 or 0 1.0 -> NaN Invalid_operation -dqor372 or 0 1E+1 -> NaN Invalid_operation -dqor373 or 0 0.0 -> NaN Invalid_operation -dqor374 or 0 0E+1 -> NaN Invalid_operation -dqor375 or 0 9.9 -> NaN Invalid_operation -dqor376 or 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -dqor780 or -Inf -Inf -> NaN Invalid_operation -dqor781 or -Inf -1000 -> NaN Invalid_operation -dqor782 or -Inf -1 -> NaN Invalid_operation -dqor783 or -Inf -0 -> NaN Invalid_operation -dqor784 or -Inf 0 -> NaN Invalid_operation -dqor785 or -Inf 1 -> NaN Invalid_operation -dqor786 or -Inf 1000 -> NaN Invalid_operation -dqor787 or -1000 -Inf -> NaN Invalid_operation -dqor788 or -Inf -Inf -> NaN Invalid_operation -dqor789 or -1 -Inf -> NaN Invalid_operation -dqor790 or -0 -Inf -> NaN Invalid_operation -dqor791 or 0 -Inf -> NaN Invalid_operation -dqor792 or 1 -Inf -> NaN Invalid_operation -dqor793 or 1000 -Inf -> NaN Invalid_operation -dqor794 or Inf -Inf -> NaN Invalid_operation - -dqor800 or Inf -Inf -> NaN Invalid_operation -dqor801 or Inf -1000 -> NaN Invalid_operation -dqor802 or Inf -1 -> NaN Invalid_operation -dqor803 or Inf -0 -> NaN Invalid_operation -dqor804 or Inf 0 -> NaN Invalid_operation -dqor805 or Inf 1 -> NaN Invalid_operation -dqor806 or Inf 1000 -> NaN Invalid_operation -dqor807 or Inf Inf -> NaN Invalid_operation -dqor808 or -1000 Inf -> NaN Invalid_operation -dqor809 or -Inf Inf -> NaN Invalid_operation -dqor810 or -1 Inf -> NaN Invalid_operation -dqor811 or -0 Inf -> NaN Invalid_operation -dqor812 or 0 Inf -> NaN Invalid_operation -dqor813 or 1 Inf -> NaN Invalid_operation -dqor814 or 1000 Inf -> NaN Invalid_operation -dqor815 or Inf Inf -> NaN Invalid_operation - -dqor821 or NaN -Inf -> NaN Invalid_operation -dqor822 or NaN -1000 -> NaN Invalid_operation -dqor823 or NaN -1 -> NaN Invalid_operation -dqor824 or NaN -0 -> NaN Invalid_operation -dqor825 or NaN 0 -> NaN Invalid_operation -dqor826 or NaN 1 -> NaN Invalid_operation -dqor827 or NaN 1000 -> NaN Invalid_operation -dqor828 or NaN Inf -> NaN Invalid_operation -dqor829 or NaN NaN -> NaN Invalid_operation -dqor830 or -Inf NaN -> NaN Invalid_operation -dqor831 or -1000 NaN -> NaN Invalid_operation -dqor832 or -1 NaN -> NaN Invalid_operation -dqor833 or -0 NaN -> NaN Invalid_operation -dqor834 or 0 NaN -> NaN Invalid_operation -dqor835 or 1 NaN -> NaN Invalid_operation -dqor836 or 1000 NaN -> NaN Invalid_operation -dqor837 or Inf NaN -> NaN Invalid_operation - -dqor841 or sNaN -Inf -> NaN Invalid_operation -dqor842 or sNaN -1000 -> NaN Invalid_operation -dqor843 or sNaN -1 -> NaN Invalid_operation -dqor844 or sNaN -0 -> NaN Invalid_operation -dqor845 or sNaN 0 -> NaN Invalid_operation -dqor846 or sNaN 1 -> NaN Invalid_operation -dqor847 or sNaN 1000 -> NaN Invalid_operation -dqor848 or sNaN NaN -> NaN Invalid_operation -dqor849 or sNaN sNaN -> NaN Invalid_operation -dqor850 or NaN sNaN -> NaN Invalid_operation -dqor851 or -Inf sNaN -> NaN Invalid_operation -dqor852 or -1000 sNaN -> NaN Invalid_operation -dqor853 or -1 sNaN -> NaN Invalid_operation -dqor854 or -0 sNaN -> NaN Invalid_operation -dqor855 or 0 sNaN -> NaN Invalid_operation -dqor856 or 1 sNaN -> NaN Invalid_operation -dqor857 or 1000 sNaN -> NaN Invalid_operation -dqor858 or Inf sNaN -> NaN Invalid_operation -dqor859 or NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqor861 or NaN1 -Inf -> NaN Invalid_operation -dqor862 or +NaN2 -1000 -> NaN Invalid_operation -dqor863 or NaN3 1000 -> NaN Invalid_operation -dqor864 or NaN4 Inf -> NaN Invalid_operation -dqor865 or NaN5 +NaN6 -> NaN Invalid_operation -dqor866 or -Inf NaN7 -> NaN Invalid_operation -dqor867 or -1000 NaN8 -> NaN Invalid_operation -dqor868 or 1000 NaN9 -> NaN Invalid_operation -dqor869 or Inf +NaN10 -> NaN Invalid_operation -dqor871 or sNaN11 -Inf -> NaN Invalid_operation -dqor872 or sNaN12 -1000 -> NaN Invalid_operation -dqor873 or sNaN13 1000 -> NaN Invalid_operation -dqor874 or sNaN14 NaN17 -> NaN Invalid_operation -dqor875 or sNaN15 sNaN18 -> NaN Invalid_operation -dqor876 or NaN16 sNaN19 -> NaN Invalid_operation -dqor877 or -Inf +sNaN20 -> NaN Invalid_operation -dqor878 or -1000 sNaN21 -> NaN Invalid_operation -dqor879 or 1000 sNaN22 -> NaN Invalid_operation -dqor880 or Inf sNaN23 -> NaN Invalid_operation -dqor881 or +NaN25 +sNaN24 -> NaN Invalid_operation -dqor882 or -NaN26 NaN28 -> NaN Invalid_operation -dqor883 or -sNaN27 sNaN29 -> NaN Invalid_operation -dqor884 or 1000 -NaN30 -> NaN Invalid_operation -dqor885 or 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqOr.decTest -- digitwise logical OR for decQuads -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check (truth table) +dqor001 or 0 0 -> 0 +dqor002 or 0 1 -> 1 +dqor003 or 1 0 -> 1 +dqor004 or 1 1 -> 1 +dqor005 or 1100 1010 -> 1110 +-- and at msd and msd-1 +dqor006 or 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqor007 or 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqor008 or 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqor009 or 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqor010 or 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqor011 or 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 +dqor012 or 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 100000000000000000000000000000000 +dqor013 or 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 + +-- Various lengths +dqor601 or 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111111 +dqor602 or 1011111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111111 +dqor603 or 1101111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111111 +dqor604 or 1110111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111111111 +dqor605 or 1111011111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111111111 +dqor606 or 1111101111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111111111 +dqor607 or 1111110111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111111111111 +dqor608 or 1111111011111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111111111111 +dqor609 or 1111111101111111111111111111111111 1111111111111111111111111011111111 -> 1111111111111111111111111111111111 +dqor610 or 1111111110111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111111111111111 +dqor611 or 1111111111011111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111111111111111 +dqor612 or 1111111111101111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111111111111111 +dqor613 or 1111111111110111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111111111111111111 +dqor614 or 1111111111111011111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111111111111111111 +dqor615 or 1111111111111101111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111111111111111111 +dqor616 or 1111111111111110111111111111111111 1111111111111111110111111111111111 -> 1111111111111111111111111111111111 +dqor617 or 1111111111111111011111111111111111 1111111111111111101111111111111111 -> 1111111111111111111111111111111111 +dqor618 or 1111111111111111101111111111111111 1111111111111111011111111111111111 -> 1111111111111111111111111111111111 +dqor619 or 1111111111111111110111111111111111 1111111111111110111111111111111111 -> 1111111111111111111111111111111111 +dqor620 or 1111111111111111111011111111111111 1111111111111101111111111111111111 -> 1111111111111111111111111111111111 +dqor621 or 1111111111111111111101111111111111 1111111111111011111111111111111111 -> 1111111111111111111111111111111111 +dqor622 or 1111111111111111111110111111111111 1111111111110111111111111111111111 -> 1111111111111111111111111111111111 +dqor623 or 1111111111111111111111011111111111 1111111111101111111111111111111111 -> 1111111111111111111111111111111111 +dqor624 or 1111111111111111111111101111111111 1111111111011111111111111111111111 -> 1111111111111111111111111111111111 +dqor625 or 1111111111111111111111110111111111 1111111110111111111111111111111111 -> 1111111111111111111111111111111111 +dqor626 or 1111111111111111111111111011111111 1111111101111111111111111111111111 -> 1111111111111111111111111111111111 +dqor627 or 1111111111111111111111111101111111 1111111011111111111111111111111111 -> 1111111111111111111111111111111111 +dqor628 or 1111111111111111111111111110111111 1111110111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor629 or 1111111111111111111111111111011111 1111101111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor630 or 1111111111111111111111111111101111 1111011111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor631 or 1111111111111111111111111111110111 1110111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor632 or 1111111111111111111111111111111011 1101111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor633 or 1111111111111111111111111111111101 1011111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor634 or 1111111111111111111111111111111110 0111111111111111111111111111111111 -> 1111111111111111111111111111111111 + +dqor641 or 1111111111111111111111111111111110 0111111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor642 or 1111111111111111111111111111111101 1011111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor643 or 1111111111111111111111111111111011 1101111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor644 or 1111111111111111111111111111110111 1110111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor645 or 1111111111111111111111111111101111 1111011111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor646 or 1111111111111111111111111111011111 1111101111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor647 or 1111111111111111111111111110111111 1111110111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor648 or 1111111111111111111111111101111111 1111111011111111111111111111111111 -> 1111111111111111111111111111111111 +dqor649 or 1111111111111111111111111011111111 1111111101111111111111111111111111 -> 1111111111111111111111111111111111 +dqor650 or 1111111111111111111111110111111111 1111111110111111111111111111111111 -> 1111111111111111111111111111111111 +dqor651 or 1111111111111111111111101111111111 1111111111011111111111111111111111 -> 1111111111111111111111111111111111 +dqor652 or 1111111111111111111111011111111111 1111111111101111111111111111111111 -> 1111111111111111111111111111111111 +dqor653 or 1111111111111111111110111111111111 1111111111110111111111111111111111 -> 1111111111111111111111111111111111 +dqor654 or 1111111111111111111101111111111111 1111111111111011111111111111111111 -> 1111111111111111111111111111111111 +dqor655 or 1111111111111111111011111111111111 1111111111111101111111111111111111 -> 1111111111111111111111111111111111 +dqor656 or 1111111111111111110111111111111111 1111111111111110111111111111111111 -> 1111111111111111111111111111111111 +dqor657 or 1010101010101010101010101010101010 1010101010101010001010101010101010 -> 1010101010101010101010101010101010 +dqor658 or 1111111111111111011111111111111111 1111111111111111101111111111111111 -> 1111111111111111111111111111111111 +dqor659 or 1111111111111110111111111111111111 1111111111111111110111111111111111 -> 1111111111111111111111111111111111 +dqor660 or 1111111111111101111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111111111111111111 +dqor661 or 1111111111111011111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111111111111111111 +dqor662 or 1111111111110111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111111111111111111 +dqor663 or 1111111111101111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111111111111111 +dqor664 or 1111111111011111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111111111111111 +dqor665 or 1111111110111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111111111111111 +dqor666 or 0101010101010101010101010101010101 0101010101010101010101010001010101 -> 101010101010101010101010101010101 +dqor667 or 1111111011111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111111111111 +dqor668 or 1111110111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111111111111 +dqor669 or 1111101111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111111111 +dqor670 or 1111011111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111111111 +dqor671 or 1110111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111111111 +dqor672 or 1101111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111111 +dqor673 or 1011111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111111 +dqor674 or 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111111 +dqor675 or 0111111111111111111111111111111110 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 +dqor676 or 1111111111111111111111111111111110 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 + +dqor681 or 0111111111111111111111111111111111 0111111111011111111111111111111110 -> 111111111111111111111111111111111 +dqor682 or 1011111111111111111111111111111111 1011111110101111111111111111111101 -> 1011111111111111111111111111111111 +dqor683 or 1101111111111111111111111111111111 1101111101110111111111111111111011 -> 1101111111111111111111111111111111 +dqor684 or 1110111111111111111111111111111111 1110111011111011111111111111110111 -> 1110111111111111111111111111111111 +dqor685 or 1111011111111111111111111111111111 1111010111111101111111111111101111 -> 1111011111111111111111111111111111 +dqor686 or 1111101111111111111111111111111111 1111101111111110111111111111011111 -> 1111101111111111111111111111111111 +dqor687 or 1111110111111111111111111111111111 1111010111111111011111111110111111 -> 1111110111111111111111111111111111 +dqor688 or 1111111011111111111111111111111111 1110111011111111101111111101111111 -> 1111111011111111111111111111111111 +dqor689 or 1111111101111111111111111111111111 1101111101111111110111111011111111 -> 1111111101111111111111111111111111 +dqor690 or 1111111110111111111111111111111111 1011111110111111111011110111111110 -> 1111111110111111111111111111111111 +dqor691 or 1111111111011111111111111111111111 0111111111011111111101101111111101 -> 1111111111011111111111111111111111 +dqor692 or 1111111111101111111111111111111111 1111111111101111111110011111111011 -> 1111111111101111111111111111111111 +dqor693 or 1111111111110111111111111111111111 1111111111110111111110011111110111 -> 1111111111110111111111111111111111 +dqor694 or 1111111111111011111111111111111111 1111111111111011111101101111101111 -> 1111111111111011111111111111111111 +dqor695 or 1111111111111101111111111111111111 1111111111111101111011110111011111 -> 1111111111111101111111111111111111 +dqor696 or 1111111111111110111111111111111111 1111111111111110110111111010111111 -> 1111111111111110111111111111111111 +dqor697 or 1111111111111111011111111111111111 1111111111111111001111111101111111 -> 1111111111111111011111111111111111 +dqor698 or 1111111111111111101111111111111111 1111111111111111001111111010111111 -> 1111111111111111101111111111111111 +dqor699 or 1111111111111111110111111111111111 1111111111111110110111110111011111 -> 1111111111111111110111111111111111 +dqor700 or 1111111111111111111011111111111111 1111111111111101111011101111101111 -> 1111111111111111111011111111111111 +dqor701 or 1111111111111111111101111111111111 1111111111111011111101011111110111 -> 1111111111111111111101111111111111 +dqor702 or 1111111111111111111110111111111111 1111111111110111111110111111111011 -> 1111111111111111111110111111111111 +dqor703 or 1111111111111111111111011111111111 1111111111101111111101011111111101 -> 1111111111111111111111011111111111 +dqor704 or 1111111111111111111111101111111111 1111111111011111111011101111111110 -> 1111111111111111111111101111111111 +dqor705 or 1111111111111111111111110111111111 0111111110111111110111110111111111 -> 1111111111111111111111110111111111 +dqor706 or 1111111111111111111111111011111111 1011111101111111101111111011111111 -> 1111111111111111111111111011111111 +dqor707 or 1111111111111111111111111101111111 1101111011111111011111111101111111 -> 1111111111111111111111111101111111 +dqor708 or 1111111111111111111111111110111111 1110110111111110111111111110111111 -> 1111111111111111111111111110111111 +dqor709 or 1111111111111111111111111111011111 1111001111111101111111111111011111 -> 1111111111111111111111111111011111 +dqor710 or 1111111111111111111111111111101111 1111001111111011111111111111101111 -> 1111111111111111111111111111101111 +dqor711 or 1111111111111111111111111111110111 1110110111110111111111111111110111 -> 1111111111111111111111111111110111 +dqor712 or 1111111111111111111111111111111011 1101111011101111111111111111111011 -> 1111111111111111111111111111111011 +dqor713 or 1111111111111111111111111111111101 1011111101011111111111111111111101 -> 1111111111111111111111111111111101 +dqor714 or 1111111111111111111111111111111110 0111111110111111111111111111111110 -> 1111111111111111111111111111111110 + + + +-- 1234567890123456 1234567890123456 1234567890123456 +dqor020 or 1111111111111111 1111111111111111 -> 1111111111111111 +dqor021 or 111111111111111 111111111111111 -> 111111111111111 +dqor022 or 11111111111111 11111111111111 -> 11111111111111 +dqor023 or 1111111111111 1111111111111 -> 1111111111111 +dqor024 or 111111111111 111111111111 -> 111111111111 +dqor025 or 11111111111 11111111111 -> 11111111111 +dqor026 or 1111111111 1111111111 -> 1111111111 +dqor027 or 111111111 111111111 -> 111111111 +dqor028 or 11111111 11111111 -> 11111111 +dqor029 or 1111111 1111111 -> 1111111 +dqor030 or 111111 111111 -> 111111 +dqor031 or 11111 11111 -> 11111 +dqor032 or 1111 1111 -> 1111 +dqor033 or 111 111 -> 111 +dqor034 or 11 11 -> 11 +dqor035 or 1 1 -> 1 +dqor036 or 0 0 -> 0 + +dqor042 or 111111110000000 1111111110000000 -> 1111111110000000 +dqor043 or 11111110000000 1000000100000000 -> 1011111110000000 +dqor044 or 1111110000000 1000001000000000 -> 1001111110000000 +dqor045 or 111110000000 1000010000000000 -> 1000111110000000 +dqor046 or 11110000000 1000100000000000 -> 1000111110000000 +dqor047 or 1110000000 1001000000000000 -> 1001001110000000 +dqor048 or 110000000 1010000000000000 -> 1010000110000000 +dqor049 or 10000000 1100000000000000 -> 1100000010000000 + +dqor090 or 011111111 111101111 -> 111111111 +dqor091 or 101111111 111101111 -> 111111111 +dqor092 or 110111111 111101111 -> 111111111 +dqor093 or 111011111 111101111 -> 111111111 +dqor094 or 111101111 111101111 -> 111101111 +dqor095 or 111110111 111101111 -> 111111111 +dqor096 or 111111011 111101111 -> 111111111 +dqor097 or 111111101 111101111 -> 111111111 +dqor098 or 111111110 111101111 -> 111111111 + +dqor100 or 111101111 011111111 -> 111111111 +dqor101 or 111101111 101111111 -> 111111111 +dqor102 or 111101111 110111111 -> 111111111 +dqor103 or 111101111 111011111 -> 111111111 +dqor104 or 111101111 111101111 -> 111101111 +dqor105 or 111101111 111110111 -> 111111111 +dqor106 or 111101111 111111011 -> 111111111 +dqor107 or 111101111 111111101 -> 111111111 +dqor108 or 111101111 111111110 -> 111111111 + +-- non-0/1 should not be accepted, nor should signs +dqor220 or 111111112 111111111 -> NaN Invalid_operation +dqor221 or 333333333 333333333 -> NaN Invalid_operation +dqor222 or 555555555 555555555 -> NaN Invalid_operation +dqor223 or 777777777 777777777 -> NaN Invalid_operation +dqor224 or 999999999 999999999 -> NaN Invalid_operation +dqor225 or 222222222 999999999 -> NaN Invalid_operation +dqor226 or 444444444 999999999 -> NaN Invalid_operation +dqor227 or 666666666 999999999 -> NaN Invalid_operation +dqor228 or 888888888 999999999 -> NaN Invalid_operation +dqor229 or 999999999 222222222 -> NaN Invalid_operation +dqor230 or 999999999 444444444 -> NaN Invalid_operation +dqor231 or 999999999 666666666 -> NaN Invalid_operation +dqor232 or 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +dqor240 or 567468689 -934981942 -> NaN Invalid_operation +dqor241 or 567367689 934981942 -> NaN Invalid_operation +dqor242 or -631917772 -706014634 -> NaN Invalid_operation +dqor243 or -756253257 138579234 -> NaN Invalid_operation +dqor244 or 835590149 567435400 -> NaN Invalid_operation +-- test MSD +dqor250 or 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqor251 or 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqor252 or 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqor253 or 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqor254 or 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqor255 or 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqor256 or 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqor257 or 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqor258 or 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqor259 or 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqor260 or 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqor261 or 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +dqor262 or 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqor263 or 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqor264 or 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqor265 or 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +-- test MSD-1 +dqor270 or 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation +dqor271 or 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation +dqor272 or 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation +dqor273 or 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation +dqor274 or 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation +dqor275 or 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation +dqor276 or 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation +dqor277 or 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation +-- test LSD +dqor280 or 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation +dqor281 or 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation +dqor282 or 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation +dqor283 or 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation +dqor284 or 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation +dqor285 or 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation +dqor286 or 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation +dqor287 or 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation +-- test Middie +dqor288 or 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation +dqor289 or 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation +dqor290 or 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation +dqor291 or 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation +dqor292 or 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation +dqor293 or 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation +dqor294 or 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation +dqor295 or 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation +-- signs +dqor296 or -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation +dqor297 or -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation +dqor298 or 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation +dqor299 or 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 1000001111001111001111000011000100 + +-- Nmax, Nmin, Ntiny-like +dqor331 or 2 9.99999999E+1999 -> NaN Invalid_operation +dqor332 or 3 1E-1999 -> NaN Invalid_operation +dqor333 or 4 1.00000000E-1999 -> NaN Invalid_operation +dqor334 or 5 1E-1009 -> NaN Invalid_operation +dqor335 or 6 -1E-1009 -> NaN Invalid_operation +dqor336 or 7 -1.00000000E-1999 -> NaN Invalid_operation +dqor337 or 8 -1E-1999 -> NaN Invalid_operation +dqor338 or 9 -9.99999999E+1999 -> NaN Invalid_operation +dqor341 or 9.99999999E+2999 -18 -> NaN Invalid_operation +dqor342 or 1E-2999 01 -> NaN Invalid_operation +dqor343 or 1.00000000E-2999 -18 -> NaN Invalid_operation +dqor344 or 1E-1009 18 -> NaN Invalid_operation +dqor345 or -1E-1009 -10 -> NaN Invalid_operation +dqor346 or -1.00000000E-2999 18 -> NaN Invalid_operation +dqor347 or -1E-2999 10 -> NaN Invalid_operation +dqor348 or -9.99999999E+2999 -18 -> NaN Invalid_operation + +-- A few other non-integers +dqor361 or 1.0 1 -> NaN Invalid_operation +dqor362 or 1E+1 1 -> NaN Invalid_operation +dqor363 or 0.0 1 -> NaN Invalid_operation +dqor364 or 0E+1 1 -> NaN Invalid_operation +dqor365 or 9.9 1 -> NaN Invalid_operation +dqor366 or 9E+1 1 -> NaN Invalid_operation +dqor371 or 0 1.0 -> NaN Invalid_operation +dqor372 or 0 1E+1 -> NaN Invalid_operation +dqor373 or 0 0.0 -> NaN Invalid_operation +dqor374 or 0 0E+1 -> NaN Invalid_operation +dqor375 or 0 9.9 -> NaN Invalid_operation +dqor376 or 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +dqor780 or -Inf -Inf -> NaN Invalid_operation +dqor781 or -Inf -1000 -> NaN Invalid_operation +dqor782 or -Inf -1 -> NaN Invalid_operation +dqor783 or -Inf -0 -> NaN Invalid_operation +dqor784 or -Inf 0 -> NaN Invalid_operation +dqor785 or -Inf 1 -> NaN Invalid_operation +dqor786 or -Inf 1000 -> NaN Invalid_operation +dqor787 or -1000 -Inf -> NaN Invalid_operation +dqor788 or -Inf -Inf -> NaN Invalid_operation +dqor789 or -1 -Inf -> NaN Invalid_operation +dqor790 or -0 -Inf -> NaN Invalid_operation +dqor791 or 0 -Inf -> NaN Invalid_operation +dqor792 or 1 -Inf -> NaN Invalid_operation +dqor793 or 1000 -Inf -> NaN Invalid_operation +dqor794 or Inf -Inf -> NaN Invalid_operation + +dqor800 or Inf -Inf -> NaN Invalid_operation +dqor801 or Inf -1000 -> NaN Invalid_operation +dqor802 or Inf -1 -> NaN Invalid_operation +dqor803 or Inf -0 -> NaN Invalid_operation +dqor804 or Inf 0 -> NaN Invalid_operation +dqor805 or Inf 1 -> NaN Invalid_operation +dqor806 or Inf 1000 -> NaN Invalid_operation +dqor807 or Inf Inf -> NaN Invalid_operation +dqor808 or -1000 Inf -> NaN Invalid_operation +dqor809 or -Inf Inf -> NaN Invalid_operation +dqor810 or -1 Inf -> NaN Invalid_operation +dqor811 or -0 Inf -> NaN Invalid_operation +dqor812 or 0 Inf -> NaN Invalid_operation +dqor813 or 1 Inf -> NaN Invalid_operation +dqor814 or 1000 Inf -> NaN Invalid_operation +dqor815 or Inf Inf -> NaN Invalid_operation + +dqor821 or NaN -Inf -> NaN Invalid_operation +dqor822 or NaN -1000 -> NaN Invalid_operation +dqor823 or NaN -1 -> NaN Invalid_operation +dqor824 or NaN -0 -> NaN Invalid_operation +dqor825 or NaN 0 -> NaN Invalid_operation +dqor826 or NaN 1 -> NaN Invalid_operation +dqor827 or NaN 1000 -> NaN Invalid_operation +dqor828 or NaN Inf -> NaN Invalid_operation +dqor829 or NaN NaN -> NaN Invalid_operation +dqor830 or -Inf NaN -> NaN Invalid_operation +dqor831 or -1000 NaN -> NaN Invalid_operation +dqor832 or -1 NaN -> NaN Invalid_operation +dqor833 or -0 NaN -> NaN Invalid_operation +dqor834 or 0 NaN -> NaN Invalid_operation +dqor835 or 1 NaN -> NaN Invalid_operation +dqor836 or 1000 NaN -> NaN Invalid_operation +dqor837 or Inf NaN -> NaN Invalid_operation + +dqor841 or sNaN -Inf -> NaN Invalid_operation +dqor842 or sNaN -1000 -> NaN Invalid_operation +dqor843 or sNaN -1 -> NaN Invalid_operation +dqor844 or sNaN -0 -> NaN Invalid_operation +dqor845 or sNaN 0 -> NaN Invalid_operation +dqor846 or sNaN 1 -> NaN Invalid_operation +dqor847 or sNaN 1000 -> NaN Invalid_operation +dqor848 or sNaN NaN -> NaN Invalid_operation +dqor849 or sNaN sNaN -> NaN Invalid_operation +dqor850 or NaN sNaN -> NaN Invalid_operation +dqor851 or -Inf sNaN -> NaN Invalid_operation +dqor852 or -1000 sNaN -> NaN Invalid_operation +dqor853 or -1 sNaN -> NaN Invalid_operation +dqor854 or -0 sNaN -> NaN Invalid_operation +dqor855 or 0 sNaN -> NaN Invalid_operation +dqor856 or 1 sNaN -> NaN Invalid_operation +dqor857 or 1000 sNaN -> NaN Invalid_operation +dqor858 or Inf sNaN -> NaN Invalid_operation +dqor859 or NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqor861 or NaN1 -Inf -> NaN Invalid_operation +dqor862 or +NaN2 -1000 -> NaN Invalid_operation +dqor863 or NaN3 1000 -> NaN Invalid_operation +dqor864 or NaN4 Inf -> NaN Invalid_operation +dqor865 or NaN5 +NaN6 -> NaN Invalid_operation +dqor866 or -Inf NaN7 -> NaN Invalid_operation +dqor867 or -1000 NaN8 -> NaN Invalid_operation +dqor868 or 1000 NaN9 -> NaN Invalid_operation +dqor869 or Inf +NaN10 -> NaN Invalid_operation +dqor871 or sNaN11 -Inf -> NaN Invalid_operation +dqor872 or sNaN12 -1000 -> NaN Invalid_operation +dqor873 or sNaN13 1000 -> NaN Invalid_operation +dqor874 or sNaN14 NaN17 -> NaN Invalid_operation +dqor875 or sNaN15 sNaN18 -> NaN Invalid_operation +dqor876 or NaN16 sNaN19 -> NaN Invalid_operation +dqor877 or -Inf +sNaN20 -> NaN Invalid_operation +dqor878 or -1000 sNaN21 -> NaN Invalid_operation +dqor879 or 1000 sNaN22 -> NaN Invalid_operation +dqor880 or Inf sNaN23 -> NaN Invalid_operation +dqor881 or +NaN25 +sNaN24 -> NaN Invalid_operation +dqor882 or -NaN26 NaN28 -> NaN Invalid_operation +dqor883 or -sNaN27 sNaN29 -> NaN Invalid_operation +dqor884 or 1000 -NaN30 -> NaN Invalid_operation +dqor885 or 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqPlus.decTest b/Lib/test/decimaltestdata/dqPlus.decTest index df1a15ca7fd..8aecaab796b 100644 --- a/Lib/test/decimaltestdata/dqPlus.decTest +++ b/Lib/test/decimaltestdata/dqPlus.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqPlus.decTest -- decQuad 0+x -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqpls001 plus +7.50 -> 7.50 - --- Infinities -dqpls011 plus Infinity -> Infinity -dqpls012 plus -Infinity -> -Infinity - --- NaNs, 0 payload -ddqls021 plus NaN -> NaN -ddqls022 plus -NaN -> -NaN -ddqls023 plus sNaN -> NaN Invalid_operation -ddqls024 plus -sNaN -> -NaN Invalid_operation - --- NaNs, non-0 payload -ddqls031 plus NaN13 -> NaN13 -ddqls032 plus -NaN13 -> -NaN13 -ddqls033 plus sNaN13 -> NaN13 Invalid_operation -ddqls034 plus -sNaN13 -> -NaN13 Invalid_operation -ddqls035 plus NaN70 -> NaN70 -ddqls036 plus -NaN70 -> -NaN70 -ddqls037 plus sNaN101 -> NaN101 Invalid_operation -ddqls038 plus -sNaN101 -> -NaN101 Invalid_operation - --- finites -dqpls101 plus 7 -> 7 -dqpls102 plus -7 -> -7 -dqpls103 plus 75 -> 75 -dqpls104 plus -75 -> -75 -dqpls105 plus 7.50 -> 7.50 -dqpls106 plus -7.50 -> -7.50 -dqpls107 plus 7.500 -> 7.500 -dqpls108 plus -7.500 -> -7.500 - --- zeros -dqpls111 plus 0 -> 0 -dqpls112 plus -0 -> 0 -dqpls113 plus 0E+4 -> 0E+4 -dqpls114 plus -0E+4 -> 0E+4 -dqpls115 plus 0.0000 -> 0.0000 -dqpls116 plus -0.0000 -> 0.0000 -dqpls117 plus 0E-141 -> 0E-141 -dqpls118 plus -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqpls121 plus 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqpls122 plus -2682682682682682682682682682682682 -> -2682682682682682682682682682682682 -dqpls123 plus 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 -dqpls124 plus -1341341341341341341341341341341341 -> -1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqpls131 plus 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqpls132 plus 1E-6143 -> 1E-6143 -dqpls133 plus 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqpls134 plus 1E-6176 -> 1E-6176 Subnormal - -dqpls135 plus -1E-6176 -> -1E-6176 Subnormal -dqpls136 plus -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqpls137 plus -1E-6143 -> -1E-6143 -dqpls138 plus -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqPlus.decTest -- decQuad 0+x -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqpls001 plus +7.50 -> 7.50 + +-- Infinities +dqpls011 plus Infinity -> Infinity +dqpls012 plus -Infinity -> -Infinity + +-- NaNs, 0 payload +ddqls021 plus NaN -> NaN +ddqls022 plus -NaN -> -NaN +ddqls023 plus sNaN -> NaN Invalid_operation +ddqls024 plus -sNaN -> -NaN Invalid_operation + +-- NaNs, non-0 payload +ddqls031 plus NaN13 -> NaN13 +ddqls032 plus -NaN13 -> -NaN13 +ddqls033 plus sNaN13 -> NaN13 Invalid_operation +ddqls034 plus -sNaN13 -> -NaN13 Invalid_operation +ddqls035 plus NaN70 -> NaN70 +ddqls036 plus -NaN70 -> -NaN70 +ddqls037 plus sNaN101 -> NaN101 Invalid_operation +ddqls038 plus -sNaN101 -> -NaN101 Invalid_operation + +-- finites +dqpls101 plus 7 -> 7 +dqpls102 plus -7 -> -7 +dqpls103 plus 75 -> 75 +dqpls104 plus -75 -> -75 +dqpls105 plus 7.50 -> 7.50 +dqpls106 plus -7.50 -> -7.50 +dqpls107 plus 7.500 -> 7.500 +dqpls108 plus -7.500 -> -7.500 + +-- zeros +dqpls111 plus 0 -> 0 +dqpls112 plus -0 -> 0 +dqpls113 plus 0E+4 -> 0E+4 +dqpls114 plus -0E+4 -> 0E+4 +dqpls115 plus 0.0000 -> 0.0000 +dqpls116 plus -0.0000 -> 0.0000 +dqpls117 plus 0E-141 -> 0E-141 +dqpls118 plus -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqpls121 plus 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqpls122 plus -2682682682682682682682682682682682 -> -2682682682682682682682682682682682 +dqpls123 plus 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 +dqpls124 plus -1341341341341341341341341341341341 -> -1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqpls131 plus 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqpls132 plus 1E-6143 -> 1E-6143 +dqpls133 plus 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqpls134 plus 1E-6176 -> 1E-6176 Subnormal + +dqpls135 plus -1E-6176 -> -1E-6176 Subnormal +dqpls136 plus -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqpls137 plus -1E-6143 -> -1E-6143 +dqpls138 plus -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqQuantize.decTest b/Lib/test/decimaltestdata/dqQuantize.decTest index 4ed39b45c47..51471c2626b 100644 --- a/Lib/test/decimaltestdata/dqQuantize.decTest +++ b/Lib/test/decimaltestdata/dqQuantize.decTest @@ -1,836 +1,836 @@ ------------------------------------------------------------------------- --- dqQuantize.decTest -- decQuad quantize operation -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Most of the tests here assume a "regular pattern", where the --- sign and coefficient are +1. --- 2004.03.15 Underflow for quantize is suppressed --- 2005.06.08 More extensive tests for 'does not fit' --- [Forked from quantize.decTest 2006.11.25] - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqqua001 quantize 0 1e0 -> 0 -dqqua002 quantize 1 1e0 -> 1 -dqqua003 quantize 0.1 1e+2 -> 0E+2 Inexact Rounded -dqqua005 quantize 0.1 1e+1 -> 0E+1 Inexact Rounded -dqqua006 quantize 0.1 1e0 -> 0 Inexact Rounded -dqqua007 quantize 0.1 1e-1 -> 0.1 -dqqua008 quantize 0.1 1e-2 -> 0.10 -dqqua009 quantize 0.1 1e-3 -> 0.100 -dqqua010 quantize 0.9 1e+2 -> 0E+2 Inexact Rounded -dqqua011 quantize 0.9 1e+1 -> 0E+1 Inexact Rounded -dqqua012 quantize 0.9 1e+0 -> 1 Inexact Rounded -dqqua013 quantize 0.9 1e-1 -> 0.9 -dqqua014 quantize 0.9 1e-2 -> 0.90 -dqqua015 quantize 0.9 1e-3 -> 0.900 --- negatives -dqqua021 quantize -0 1e0 -> -0 -dqqua022 quantize -1 1e0 -> -1 -dqqua023 quantize -0.1 1e+2 -> -0E+2 Inexact Rounded -dqqua025 quantize -0.1 1e+1 -> -0E+1 Inexact Rounded -dqqua026 quantize -0.1 1e0 -> -0 Inexact Rounded -dqqua027 quantize -0.1 1e-1 -> -0.1 -dqqua028 quantize -0.1 1e-2 -> -0.10 -dqqua029 quantize -0.1 1e-3 -> -0.100 -dqqua030 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded -dqqua031 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded -dqqua032 quantize -0.9 1e+0 -> -1 Inexact Rounded -dqqua033 quantize -0.9 1e-1 -> -0.9 -dqqua034 quantize -0.9 1e-2 -> -0.90 -dqqua035 quantize -0.9 1e-3 -> -0.900 -dqqua036 quantize -0.5 1e+2 -> -0E+2 Inexact Rounded -dqqua037 quantize -0.5 1e+1 -> -0E+1 Inexact Rounded -dqqua038 quantize -0.5 1e+0 -> -0 Inexact Rounded -dqqua039 quantize -0.5 1e-1 -> -0.5 -dqqua040 quantize -0.5 1e-2 -> -0.50 -dqqua041 quantize -0.5 1e-3 -> -0.500 -dqqua042 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded -dqqua043 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded -dqqua044 quantize -0.9 1e+0 -> -1 Inexact Rounded -dqqua045 quantize -0.9 1e-1 -> -0.9 -dqqua046 quantize -0.9 1e-2 -> -0.90 -dqqua047 quantize -0.9 1e-3 -> -0.900 - --- examples from Specification -dqqua060 quantize 2.17 0.001 -> 2.170 -dqqua061 quantize 2.17 0.01 -> 2.17 -dqqua062 quantize 2.17 0.1 -> 2.2 Inexact Rounded -dqqua063 quantize 2.17 1e+0 -> 2 Inexact Rounded -dqqua064 quantize 2.17 1e+1 -> 0E+1 Inexact Rounded -dqqua065 quantize -Inf Inf -> -Infinity -dqqua066 quantize 2 Inf -> NaN Invalid_operation -dqqua067 quantize -0.1 1 -> -0 Inexact Rounded -dqqua068 quantize -0 1e+5 -> -0E+5 -dqqua069 quantize +123451234567899876543216789012345.6 1e-2 -> NaN Invalid_operation -dqqua070 quantize -987651234567899876543214335236450.6 1e-2 -> NaN Invalid_operation -dqqua071 quantize 217 1e-1 -> 217.0 -dqqua072 quantize 217 1e+0 -> 217 -dqqua073 quantize 217 1e+1 -> 2.2E+2 Inexact Rounded -dqqua074 quantize 217 1e+2 -> 2E+2 Inexact Rounded - --- general tests .. -dqqua089 quantize 12 1e+4 -> 0E+4 Inexact Rounded -dqqua090 quantize 12 1e+3 -> 0E+3 Inexact Rounded -dqqua091 quantize 12 1e+2 -> 0E+2 Inexact Rounded -dqqua092 quantize 12 1e+1 -> 1E+1 Inexact Rounded -dqqua093 quantize 1.2345 1e-2 -> 1.23 Inexact Rounded -dqqua094 quantize 1.2355 1e-2 -> 1.24 Inexact Rounded -dqqua095 quantize 1.2345 1e-6 -> 1.234500 -dqqua096 quantize 9.9999 1e-2 -> 10.00 Inexact Rounded -dqqua097 quantize 0.0001 1e-2 -> 0.00 Inexact Rounded -dqqua098 quantize 0.001 1e-2 -> 0.00 Inexact Rounded -dqqua099 quantize 0.009 1e-2 -> 0.01 Inexact Rounded -dqqua100 quantize 92 1e+2 -> 1E+2 Inexact Rounded - -dqqua101 quantize -1 1e0 -> -1 -dqqua102 quantize -1 1e-1 -> -1.0 -dqqua103 quantize -1 1e-2 -> -1.00 -dqqua104 quantize 0 1e0 -> 0 -dqqua105 quantize 0 1e-1 -> 0.0 -dqqua106 quantize 0 1e-2 -> 0.00 -dqqua107 quantize 0.00 1e0 -> 0 -dqqua108 quantize 0 1e+1 -> 0E+1 -dqqua109 quantize 0 1e+2 -> 0E+2 -dqqua110 quantize +1 1e0 -> 1 -dqqua111 quantize +1 1e-1 -> 1.0 -dqqua112 quantize +1 1e-2 -> 1.00 - -dqqua120 quantize 1.04 1e-3 -> 1.040 -dqqua121 quantize 1.04 1e-2 -> 1.04 -dqqua122 quantize 1.04 1e-1 -> 1.0 Inexact Rounded -dqqua123 quantize 1.04 1e0 -> 1 Inexact Rounded -dqqua124 quantize 1.05 1e-3 -> 1.050 -dqqua125 quantize 1.05 1e-2 -> 1.05 -dqqua126 quantize 1.05 1e-1 -> 1.0 Inexact Rounded -dqqua131 quantize 1.05 1e0 -> 1 Inexact Rounded -dqqua132 quantize 1.06 1e-3 -> 1.060 -dqqua133 quantize 1.06 1e-2 -> 1.06 -dqqua134 quantize 1.06 1e-1 -> 1.1 Inexact Rounded -dqqua135 quantize 1.06 1e0 -> 1 Inexact Rounded - -dqqua140 quantize -10 1e-2 -> -10.00 -dqqua141 quantize +1 1e-2 -> 1.00 -dqqua142 quantize +10 1e-2 -> 10.00 -dqqua143 quantize 1E+37 1e-2 -> NaN Invalid_operation -dqqua144 quantize 1E-37 1e-2 -> 0.00 Inexact Rounded -dqqua145 quantize 1E-3 1e-2 -> 0.00 Inexact Rounded -dqqua146 quantize 1E-2 1e-2 -> 0.01 -dqqua147 quantize 1E-1 1e-2 -> 0.10 -dqqua148 quantize 0E-37 1e-2 -> 0.00 - -dqqua150 quantize 1.0600 1e-5 -> 1.06000 -dqqua151 quantize 1.0600 1e-4 -> 1.0600 -dqqua152 quantize 1.0600 1e-3 -> 1.060 Rounded -dqqua153 quantize 1.0600 1e-2 -> 1.06 Rounded -dqqua154 quantize 1.0600 1e-1 -> 1.1 Inexact Rounded -dqqua155 quantize 1.0600 1e0 -> 1 Inexact Rounded - --- a couple where rounding was different in base tests -rounding: half_up -dqqua157 quantize -0.5 1e+0 -> -1 Inexact Rounded -dqqua158 quantize 1.05 1e-1 -> 1.1 Inexact Rounded -dqqua159 quantize 1.06 1e0 -> 1 Inexact Rounded -rounding: half_even - --- base tests with non-1 coefficients -dqqua161 quantize 0 -9e0 -> 0 -dqqua162 quantize 1 -7e0 -> 1 -dqqua163 quantize 0.1 -1e+2 -> 0E+2 Inexact Rounded -dqqua165 quantize 0.1 0e+1 -> 0E+1 Inexact Rounded -dqqua166 quantize 0.1 2e0 -> 0 Inexact Rounded -dqqua167 quantize 0.1 3e-1 -> 0.1 -dqqua168 quantize 0.1 44e-2 -> 0.10 -dqqua169 quantize 0.1 555e-3 -> 0.100 -dqqua170 quantize 0.9 6666e+2 -> 0E+2 Inexact Rounded -dqqua171 quantize 0.9 -777e+1 -> 0E+1 Inexact Rounded -dqqua172 quantize 0.9 -88e+0 -> 1 Inexact Rounded -dqqua173 quantize 0.9 -9e-1 -> 0.9 -dqqua174 quantize 0.9 0e-2 -> 0.90 -dqqua175 quantize 0.9 1.1e-3 -> 0.9000 --- negatives -dqqua181 quantize -0 1.1e0 -> -0.0 -dqqua182 quantize -1 -1e0 -> -1 -dqqua183 quantize -0.1 11e+2 -> -0E+2 Inexact Rounded -dqqua185 quantize -0.1 111e+1 -> -0E+1 Inexact Rounded -dqqua186 quantize -0.1 71e0 -> -0 Inexact Rounded -dqqua187 quantize -0.1 -91e-1 -> -0.1 -dqqua188 quantize -0.1 -.1e-2 -> -0.100 -dqqua189 quantize -0.1 -1e-3 -> -0.100 -dqqua190 quantize -0.9 0e+2 -> -0E+2 Inexact Rounded -dqqua191 quantize -0.9 -0e+1 -> -0E+1 Inexact Rounded -dqqua192 quantize -0.9 -10e+0 -> -1 Inexact Rounded -dqqua193 quantize -0.9 100e-1 -> -0.9 -dqqua194 quantize -0.9 999e-2 -> -0.90 - --- +ve exponents .. -dqqua201 quantize -1 1e+0 -> -1 -dqqua202 quantize -1 1e+1 -> -0E+1 Inexact Rounded -dqqua203 quantize -1 1e+2 -> -0E+2 Inexact Rounded -dqqua204 quantize 0 1e+0 -> 0 -dqqua205 quantize 0 1e+1 -> 0E+1 -dqqua206 quantize 0 1e+2 -> 0E+2 -dqqua207 quantize +1 1e+0 -> 1 -dqqua208 quantize +1 1e+1 -> 0E+1 Inexact Rounded -dqqua209 quantize +1 1e+2 -> 0E+2 Inexact Rounded - -dqqua220 quantize 1.04 1e+3 -> 0E+3 Inexact Rounded -dqqua221 quantize 1.04 1e+2 -> 0E+2 Inexact Rounded -dqqua222 quantize 1.04 1e+1 -> 0E+1 Inexact Rounded -dqqua223 quantize 1.04 1e+0 -> 1 Inexact Rounded -dqqua224 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded -dqqua225 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded -dqqua226 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded -dqqua227 quantize 1.05 1e+0 -> 1 Inexact Rounded -dqqua228 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded -dqqua229 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded -dqqua230 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded -dqqua231 quantize 1.05 1e+0 -> 1 Inexact Rounded -dqqua232 quantize 1.06 1e+3 -> 0E+3 Inexact Rounded -dqqua233 quantize 1.06 1e+2 -> 0E+2 Inexact Rounded -dqqua234 quantize 1.06 1e+1 -> 0E+1 Inexact Rounded -dqqua235 quantize 1.06 1e+0 -> 1 Inexact Rounded - -dqqua240 quantize -10 1e+1 -> -1E+1 Rounded -dqqua241 quantize +1 1e+1 -> 0E+1 Inexact Rounded -dqqua242 quantize +10 1e+1 -> 1E+1 Rounded -dqqua243 quantize 1E+1 1e+1 -> 1E+1 -- underneath this is E+1 -dqqua244 quantize 1E+2 1e+1 -> 1.0E+2 -- underneath this is E+1 -dqqua245 quantize 1E+3 1e+1 -> 1.00E+3 -- underneath this is E+1 -dqqua246 quantize 1E+4 1e+1 -> 1.000E+4 -- underneath this is E+1 -dqqua247 quantize 1E+5 1e+1 -> 1.0000E+5 -- underneath this is E+1 -dqqua248 quantize 1E+6 1e+1 -> 1.00000E+6 -- underneath this is E+1 -dqqua249 quantize 1E+7 1e+1 -> 1.000000E+7 -- underneath this is E+1 -dqqua250 quantize 1E+8 1e+1 -> 1.0000000E+8 -- underneath this is E+1 -dqqua251 quantize 1E+9 1e+1 -> 1.00000000E+9 -- underneath this is E+1 --- next one tries to add 9 zeros -dqqua252 quantize 1E+37 1e+1 -> NaN Invalid_operation -dqqua253 quantize 1E-37 1e+1 -> 0E+1 Inexact Rounded -dqqua254 quantize 1E-2 1e+1 -> 0E+1 Inexact Rounded -dqqua255 quantize 0E-37 1e+1 -> 0E+1 -dqqua256 quantize -0E-37 1e+1 -> -0E+1 -dqqua257 quantize -0E-1 1e+1 -> -0E+1 -dqqua258 quantize -0 1e+1 -> -0E+1 -dqqua259 quantize -0E+1 1e+1 -> -0E+1 - -dqqua260 quantize -10 1e+2 -> -0E+2 Inexact Rounded -dqqua261 quantize +1 1e+2 -> 0E+2 Inexact Rounded -dqqua262 quantize +10 1e+2 -> 0E+2 Inexact Rounded -dqqua263 quantize 1E+1 1e+2 -> 0E+2 Inexact Rounded -dqqua264 quantize 1E+2 1e+2 -> 1E+2 -dqqua265 quantize 1E+3 1e+2 -> 1.0E+3 -dqqua266 quantize 1E+4 1e+2 -> 1.00E+4 -dqqua267 quantize 1E+5 1e+2 -> 1.000E+5 -dqqua268 quantize 1E+6 1e+2 -> 1.0000E+6 -dqqua269 quantize 1E+7 1e+2 -> 1.00000E+7 -dqqua270 quantize 1E+8 1e+2 -> 1.000000E+8 -dqqua271 quantize 1E+9 1e+2 -> 1.0000000E+9 -dqqua272 quantize 1E+10 1e+2 -> 1.00000000E+10 -dqqua273 quantize 1E-10 1e+2 -> 0E+2 Inexact Rounded -dqqua274 quantize 1E-2 1e+2 -> 0E+2 Inexact Rounded -dqqua275 quantize 0E-10 1e+2 -> 0E+2 - -dqqua280 quantize -10 1e+3 -> -0E+3 Inexact Rounded -dqqua281 quantize +1 1e+3 -> 0E+3 Inexact Rounded -dqqua282 quantize +10 1e+3 -> 0E+3 Inexact Rounded -dqqua283 quantize 1E+1 1e+3 -> 0E+3 Inexact Rounded -dqqua284 quantize 1E+2 1e+3 -> 0E+3 Inexact Rounded -dqqua285 quantize 1E+3 1e+3 -> 1E+3 -dqqua286 quantize 1E+4 1e+3 -> 1.0E+4 -dqqua287 quantize 1E+5 1e+3 -> 1.00E+5 -dqqua288 quantize 1E+6 1e+3 -> 1.000E+6 -dqqua289 quantize 1E+7 1e+3 -> 1.0000E+7 -dqqua290 quantize 1E+8 1e+3 -> 1.00000E+8 -dqqua291 quantize 1E+9 1e+3 -> 1.000000E+9 -dqqua292 quantize 1E+10 1e+3 -> 1.0000000E+10 -dqqua293 quantize 1E-10 1e+3 -> 0E+3 Inexact Rounded -dqqua294 quantize 1E-2 1e+3 -> 0E+3 Inexact Rounded -dqqua295 quantize 0E-10 1e+3 -> 0E+3 - --- round up from below [sign wrong in JIT compiler once] -dqqua300 quantize 0.0078 1e-5 -> 0.00780 -dqqua301 quantize 0.0078 1e-4 -> 0.0078 -dqqua302 quantize 0.0078 1e-3 -> 0.008 Inexact Rounded -dqqua303 quantize 0.0078 1e-2 -> 0.01 Inexact Rounded -dqqua304 quantize 0.0078 1e-1 -> 0.0 Inexact Rounded -dqqua305 quantize 0.0078 1e0 -> 0 Inexact Rounded -dqqua306 quantize 0.0078 1e+1 -> 0E+1 Inexact Rounded -dqqua307 quantize 0.0078 1e+2 -> 0E+2 Inexact Rounded - -dqqua310 quantize -0.0078 1e-5 -> -0.00780 -dqqua311 quantize -0.0078 1e-4 -> -0.0078 -dqqua312 quantize -0.0078 1e-3 -> -0.008 Inexact Rounded -dqqua313 quantize -0.0078 1e-2 -> -0.01 Inexact Rounded -dqqua314 quantize -0.0078 1e-1 -> -0.0 Inexact Rounded -dqqua315 quantize -0.0078 1e0 -> -0 Inexact Rounded -dqqua316 quantize -0.0078 1e+1 -> -0E+1 Inexact Rounded -dqqua317 quantize -0.0078 1e+2 -> -0E+2 Inexact Rounded - -dqqua320 quantize 0.078 1e-5 -> 0.07800 -dqqua321 quantize 0.078 1e-4 -> 0.0780 -dqqua322 quantize 0.078 1e-3 -> 0.078 -dqqua323 quantize 0.078 1e-2 -> 0.08 Inexact Rounded -dqqua324 quantize 0.078 1e-1 -> 0.1 Inexact Rounded -dqqua325 quantize 0.078 1e0 -> 0 Inexact Rounded -dqqua326 quantize 0.078 1e+1 -> 0E+1 Inexact Rounded -dqqua327 quantize 0.078 1e+2 -> 0E+2 Inexact Rounded - -dqqua330 quantize -0.078 1e-5 -> -0.07800 -dqqua331 quantize -0.078 1e-4 -> -0.0780 -dqqua332 quantize -0.078 1e-3 -> -0.078 -dqqua333 quantize -0.078 1e-2 -> -0.08 Inexact Rounded -dqqua334 quantize -0.078 1e-1 -> -0.1 Inexact Rounded -dqqua335 quantize -0.078 1e0 -> -0 Inexact Rounded -dqqua336 quantize -0.078 1e+1 -> -0E+1 Inexact Rounded -dqqua337 quantize -0.078 1e+2 -> -0E+2 Inexact Rounded - -dqqua340 quantize 0.78 1e-5 -> 0.78000 -dqqua341 quantize 0.78 1e-4 -> 0.7800 -dqqua342 quantize 0.78 1e-3 -> 0.780 -dqqua343 quantize 0.78 1e-2 -> 0.78 -dqqua344 quantize 0.78 1e-1 -> 0.8 Inexact Rounded -dqqua345 quantize 0.78 1e0 -> 1 Inexact Rounded -dqqua346 quantize 0.78 1e+1 -> 0E+1 Inexact Rounded -dqqua347 quantize 0.78 1e+2 -> 0E+2 Inexact Rounded - -dqqua350 quantize -0.78 1e-5 -> -0.78000 -dqqua351 quantize -0.78 1e-4 -> -0.7800 -dqqua352 quantize -0.78 1e-3 -> -0.780 -dqqua353 quantize -0.78 1e-2 -> -0.78 -dqqua354 quantize -0.78 1e-1 -> -0.8 Inexact Rounded -dqqua355 quantize -0.78 1e0 -> -1 Inexact Rounded -dqqua356 quantize -0.78 1e+1 -> -0E+1 Inexact Rounded -dqqua357 quantize -0.78 1e+2 -> -0E+2 Inexact Rounded - -dqqua360 quantize 7.8 1e-5 -> 7.80000 -dqqua361 quantize 7.8 1e-4 -> 7.8000 -dqqua362 quantize 7.8 1e-3 -> 7.800 -dqqua363 quantize 7.8 1e-2 -> 7.80 -dqqua364 quantize 7.8 1e-1 -> 7.8 -dqqua365 quantize 7.8 1e0 -> 8 Inexact Rounded -dqqua366 quantize 7.8 1e+1 -> 1E+1 Inexact Rounded -dqqua367 quantize 7.8 1e+2 -> 0E+2 Inexact Rounded -dqqua368 quantize 7.8 1e+3 -> 0E+3 Inexact Rounded - -dqqua370 quantize -7.8 1e-5 -> -7.80000 -dqqua371 quantize -7.8 1e-4 -> -7.8000 -dqqua372 quantize -7.8 1e-3 -> -7.800 -dqqua373 quantize -7.8 1e-2 -> -7.80 -dqqua374 quantize -7.8 1e-1 -> -7.8 -dqqua375 quantize -7.8 1e0 -> -8 Inexact Rounded -dqqua376 quantize -7.8 1e+1 -> -1E+1 Inexact Rounded -dqqua377 quantize -7.8 1e+2 -> -0E+2 Inexact Rounded -dqqua378 quantize -7.8 1e+3 -> -0E+3 Inexact Rounded - --- some individuals -dqqua380 quantize 1122334455667788991234567352364.506 1e-2 -> 1122334455667788991234567352364.51 Inexact Rounded -dqqua381 quantize 11223344556677889912345673523645.06 1e-2 -> 11223344556677889912345673523645.06 -dqqua382 quantize 112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation -dqqua383 quantize 1122334455667788991234567352364506 1e-2 -> NaN Invalid_operation -dqqua384 quantize -1122334455667788991234567352364.506 1e-2 -> -1122334455667788991234567352364.51 Inexact Rounded -dqqua385 quantize -11223344556677889912345673523645.06 1e-2 -> -11223344556677889912345673523645.06 -dqqua386 quantize -112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation -dqqua387 quantize -1122334455667788991234567352364506 1e-2 -> NaN Invalid_operation - -rounding: down -dqqua389 quantize 112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation -rounding: half_up - --- and a few more from e-mail discussions -dqqua391 quantize 11223344556677889912345678912.34567 1e-3 -> 11223344556677889912345678912.346 Inexact Rounded -dqqua392 quantize 112233445566778899123456789123.4567 1e-3 -> 112233445566778899123456789123.457 Inexact Rounded -dqqua393 quantize 1122334455667788991234567891234567. 1e-3 -> NaN Invalid_operation - --- some 9999 round-up cases -dqqua400 quantize 9.999 1e-5 -> 9.99900 -dqqua401 quantize 9.999 1e-4 -> 9.9990 -dqqua402 quantize 9.999 1e-3 -> 9.999 -dqqua403 quantize 9.999 1e-2 -> 10.00 Inexact Rounded -dqqua404 quantize 9.999 1e-1 -> 10.0 Inexact Rounded -dqqua405 quantize 9.999 1e0 -> 10 Inexact Rounded -dqqua406 quantize 9.999 1e1 -> 1E+1 Inexact Rounded -dqqua407 quantize 9.999 1e2 -> 0E+2 Inexact Rounded - -dqqua410 quantize 0.999 1e-5 -> 0.99900 -dqqua411 quantize 0.999 1e-4 -> 0.9990 -dqqua412 quantize 0.999 1e-3 -> 0.999 -dqqua413 quantize 0.999 1e-2 -> 1.00 Inexact Rounded -dqqua414 quantize 0.999 1e-1 -> 1.0 Inexact Rounded -dqqua415 quantize 0.999 1e0 -> 1 Inexact Rounded -dqqua416 quantize 0.999 1e1 -> 0E+1 Inexact Rounded - -dqqua420 quantize 0.0999 1e-5 -> 0.09990 -dqqua421 quantize 0.0999 1e-4 -> 0.0999 -dqqua422 quantize 0.0999 1e-3 -> 0.100 Inexact Rounded -dqqua423 quantize 0.0999 1e-2 -> 0.10 Inexact Rounded -dqqua424 quantize 0.0999 1e-1 -> 0.1 Inexact Rounded -dqqua425 quantize 0.0999 1e0 -> 0 Inexact Rounded -dqqua426 quantize 0.0999 1e1 -> 0E+1 Inexact Rounded - -dqqua430 quantize 0.00999 1e-5 -> 0.00999 -dqqua431 quantize 0.00999 1e-4 -> 0.0100 Inexact Rounded -dqqua432 quantize 0.00999 1e-3 -> 0.010 Inexact Rounded -dqqua433 quantize 0.00999 1e-2 -> 0.01 Inexact Rounded -dqqua434 quantize 0.00999 1e-1 -> 0.0 Inexact Rounded -dqqua435 quantize 0.00999 1e0 -> 0 Inexact Rounded -dqqua436 quantize 0.00999 1e1 -> 0E+1 Inexact Rounded - -dqqua440 quantize 0.000999 1e-5 -> 0.00100 Inexact Rounded -dqqua441 quantize 0.000999 1e-4 -> 0.0010 Inexact Rounded -dqqua442 quantize 0.000999 1e-3 -> 0.001 Inexact Rounded -dqqua443 quantize 0.000999 1e-2 -> 0.00 Inexact Rounded -dqqua444 quantize 0.000999 1e-1 -> 0.0 Inexact Rounded -dqqua445 quantize 0.000999 1e0 -> 0 Inexact Rounded -dqqua446 quantize 0.000999 1e1 -> 0E+1 Inexact Rounded - -dqqua1001 quantize 0.000 0.001 -> 0.000 -dqqua1002 quantize 0.001 0.001 -> 0.001 -dqqua1003 quantize 0.0012 0.001 -> 0.001 Inexact Rounded -dqqua1004 quantize 0.0018 0.001 -> 0.002 Inexact Rounded -dqqua1005 quantize 0.501 0.001 -> 0.501 -dqqua1006 quantize 0.5012 0.001 -> 0.501 Inexact Rounded -dqqua1007 quantize 0.5018 0.001 -> 0.502 Inexact Rounded -dqqua1008 quantize 0.999 0.001 -> 0.999 - -dqqua481 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded -dqqua482 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded -dqqua483 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded -dqqua484 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded -dqqua485 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded -dqqua486 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded --- a potential double-round -dqqua487 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded -dqqua488 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded - -dqqua491 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded -dqqua492 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded -dqqua493 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded -dqqua494 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded -dqqua495 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded -dqqua496 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded -dqqua497 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded -dqqua498 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded - --- Zeros -dqqua500 quantize 0 1e1 -> 0E+1 -dqqua501 quantize 0 1e0 -> 0 -dqqua502 quantize 0 1e-1 -> 0.0 -dqqua503 quantize 0.0 1e-1 -> 0.0 -dqqua504 quantize 0.0 1e0 -> 0 -dqqua505 quantize 0.0 1e+1 -> 0E+1 -dqqua506 quantize 0E+1 1e-1 -> 0.0 -dqqua507 quantize 0E+1 1e0 -> 0 -dqqua508 quantize 0E+1 1e+1 -> 0E+1 -dqqua509 quantize -0 1e1 -> -0E+1 -dqqua510 quantize -0 1e0 -> -0 -dqqua511 quantize -0 1e-1 -> -0.0 -dqqua512 quantize -0.0 1e-1 -> -0.0 -dqqua513 quantize -0.0 1e0 -> -0 -dqqua514 quantize -0.0 1e+1 -> -0E+1 -dqqua515 quantize -0E+1 1e-1 -> -0.0 -dqqua516 quantize -0E+1 1e0 -> -0 -dqqua517 quantize -0E+1 1e+1 -> -0E+1 --- #519 here once a problem -dqqua518 quantize 0 0E-3 -> 0.000 -dqqua519 quantize 0 0E-33 -> 0E-33 -dqqua520 quantize 0.00000000000000000000000000000000 0E-33 -> 0E-33 -dqqua521 quantize 0.000000000000000000000000000000000 0E-33 -> 0E-33 - --- Some non-zeros with lots of padding on the right -dqqua523 quantize 1 0E-33 -> 1.000000000000000000000000000000000 -dqqua524 quantize 12 0E-32 -> 12.00000000000000000000000000000000 -dqqua525 quantize 123 0E-31 -> 123.0000000000000000000000000000000 -dqqua526 quantize 123 0E-32 -> NaN Invalid_operation -dqqua527 quantize 123.4 0E-31 -> 123.4000000000000000000000000000000 -dqqua528 quantize 123.4 0E-32 -> NaN Invalid_operation - --- Suspicious RHS values -dqqua530 quantize 1.234 1e359 -> 0E+359 Inexact Rounded -dqqua531 quantize 123.456 1e359 -> 0E+359 Inexact Rounded -dqqua532 quantize 1.234 1e359 -> 0E+359 Inexact Rounded -dqqua533 quantize 123.456 1e359 -> 0E+359 Inexact Rounded --- next four are "won't fit" overflows -dqqua536 quantize 1.234 1e-299 -> NaN Invalid_operation -dqqua537 quantize 123.456 1e-299 -> NaN Invalid_operation -dqqua538 quantize 1.234 1e-299 -> NaN Invalid_operation -dqqua539 quantize 123.456 1e-299 -> NaN Invalid_operation - -dqqua542 quantize 1.234E+299 1e299 -> 1E+299 Inexact Rounded -dqqua543 quantize 1.234E+298 1e299 -> 0E+299 Inexact Rounded -dqqua544 quantize 1.234 1e299 -> 0E+299 Inexact Rounded -dqqua547 quantize 0 1e-299 -> 0E-299 --- next two are "won't fit" overflows -dqqua548 quantize 1.234 1e-299 -> NaN Invalid_operation -dqqua549 quantize 1.234 1e-300 -> NaN Invalid_operation --- [more below] - --- Specials -dqqua580 quantize Inf -Inf -> Infinity -dqqua581 quantize Inf 1e-299 -> NaN Invalid_operation -dqqua582 quantize Inf 1e-1 -> NaN Invalid_operation -dqqua583 quantize Inf 1e0 -> NaN Invalid_operation -dqqua584 quantize Inf 1e1 -> NaN Invalid_operation -dqqua585 quantize Inf 1e299 -> NaN Invalid_operation -dqqua586 quantize Inf Inf -> Infinity -dqqua587 quantize -1000 Inf -> NaN Invalid_operation -dqqua588 quantize -Inf Inf -> -Infinity -dqqua589 quantize -1 Inf -> NaN Invalid_operation -dqqua590 quantize 0 Inf -> NaN Invalid_operation -dqqua591 quantize 1 Inf -> NaN Invalid_operation -dqqua592 quantize 1000 Inf -> NaN Invalid_operation -dqqua593 quantize Inf Inf -> Infinity -dqqua594 quantize Inf 1e-0 -> NaN Invalid_operation -dqqua595 quantize -0 Inf -> NaN Invalid_operation - -dqqua600 quantize -Inf -Inf -> -Infinity -dqqua601 quantize -Inf 1e-299 -> NaN Invalid_operation -dqqua602 quantize -Inf 1e-1 -> NaN Invalid_operation -dqqua603 quantize -Inf 1e0 -> NaN Invalid_operation -dqqua604 quantize -Inf 1e1 -> NaN Invalid_operation -dqqua605 quantize -Inf 1e299 -> NaN Invalid_operation -dqqua606 quantize -Inf Inf -> -Infinity -dqqua607 quantize -1000 Inf -> NaN Invalid_operation -dqqua608 quantize -Inf -Inf -> -Infinity -dqqua609 quantize -1 -Inf -> NaN Invalid_operation -dqqua610 quantize 0 -Inf -> NaN Invalid_operation -dqqua611 quantize 1 -Inf -> NaN Invalid_operation -dqqua612 quantize 1000 -Inf -> NaN Invalid_operation -dqqua613 quantize Inf -Inf -> Infinity -dqqua614 quantize -Inf 1e-0 -> NaN Invalid_operation -dqqua615 quantize -0 -Inf -> NaN Invalid_operation - -dqqua621 quantize NaN -Inf -> NaN -dqqua622 quantize NaN 1e-299 -> NaN -dqqua623 quantize NaN 1e-1 -> NaN -dqqua624 quantize NaN 1e0 -> NaN -dqqua625 quantize NaN 1e1 -> NaN -dqqua626 quantize NaN 1e299 -> NaN -dqqua627 quantize NaN Inf -> NaN -dqqua628 quantize NaN NaN -> NaN -dqqua629 quantize -Inf NaN -> NaN -dqqua630 quantize -1000 NaN -> NaN -dqqua631 quantize -1 NaN -> NaN -dqqua632 quantize 0 NaN -> NaN -dqqua633 quantize 1 NaN -> NaN -dqqua634 quantize 1000 NaN -> NaN -dqqua635 quantize Inf NaN -> NaN -dqqua636 quantize NaN 1e-0 -> NaN -dqqua637 quantize -0 NaN -> NaN - -dqqua641 quantize sNaN -Inf -> NaN Invalid_operation -dqqua642 quantize sNaN 1e-299 -> NaN Invalid_operation -dqqua643 quantize sNaN 1e-1 -> NaN Invalid_operation -dqqua644 quantize sNaN 1e0 -> NaN Invalid_operation -dqqua645 quantize sNaN 1e1 -> NaN Invalid_operation -dqqua646 quantize sNaN 1e299 -> NaN Invalid_operation -dqqua647 quantize sNaN NaN -> NaN Invalid_operation -dqqua648 quantize sNaN sNaN -> NaN Invalid_operation -dqqua649 quantize NaN sNaN -> NaN Invalid_operation -dqqua650 quantize -Inf sNaN -> NaN Invalid_operation -dqqua651 quantize -1000 sNaN -> NaN Invalid_operation -dqqua652 quantize -1 sNaN -> NaN Invalid_operation -dqqua653 quantize 0 sNaN -> NaN Invalid_operation -dqqua654 quantize 1 sNaN -> NaN Invalid_operation -dqqua655 quantize 1000 sNaN -> NaN Invalid_operation -dqqua656 quantize Inf sNaN -> NaN Invalid_operation -dqqua657 quantize NaN sNaN -> NaN Invalid_operation -dqqua658 quantize sNaN 1e-0 -> NaN Invalid_operation -dqqua659 quantize -0 sNaN -> NaN Invalid_operation - --- propagating NaNs -dqqua661 quantize NaN9 -Inf -> NaN9 -dqqua662 quantize NaN8 919 -> NaN8 -dqqua663 quantize NaN71 Inf -> NaN71 -dqqua664 quantize NaN6 NaN5 -> NaN6 -dqqua665 quantize -Inf NaN4 -> NaN4 -dqqua666 quantize -919 NaN31 -> NaN31 -dqqua667 quantize Inf NaN2 -> NaN2 - -dqqua671 quantize sNaN99 -Inf -> NaN99 Invalid_operation -dqqua672 quantize sNaN98 -11 -> NaN98 Invalid_operation -dqqua673 quantize sNaN97 NaN -> NaN97 Invalid_operation -dqqua674 quantize sNaN16 sNaN94 -> NaN16 Invalid_operation -dqqua675 quantize NaN95 sNaN93 -> NaN93 Invalid_operation -dqqua676 quantize -Inf sNaN92 -> NaN92 Invalid_operation -dqqua677 quantize 088 sNaN91 -> NaN91 Invalid_operation -dqqua678 quantize Inf sNaN90 -> NaN90 Invalid_operation -dqqua679 quantize NaN sNaN88 -> NaN88 Invalid_operation - -dqqua681 quantize -NaN9 -Inf -> -NaN9 -dqqua682 quantize -NaN8 919 -> -NaN8 -dqqua683 quantize -NaN71 Inf -> -NaN71 -dqqua684 quantize -NaN6 -NaN5 -> -NaN6 -dqqua685 quantize -Inf -NaN4 -> -NaN4 -dqqua686 quantize -919 -NaN31 -> -NaN31 -dqqua687 quantize Inf -NaN2 -> -NaN2 - -dqqua691 quantize -sNaN99 -Inf -> -NaN99 Invalid_operation -dqqua692 quantize -sNaN98 -11 -> -NaN98 Invalid_operation -dqqua693 quantize -sNaN97 NaN -> -NaN97 Invalid_operation -dqqua694 quantize -sNaN16 sNaN94 -> -NaN16 Invalid_operation -dqqua695 quantize -NaN95 -sNaN93 -> -NaN93 Invalid_operation -dqqua696 quantize -Inf -sNaN92 -> -NaN92 Invalid_operation -dqqua697 quantize 088 -sNaN91 -> -NaN91 Invalid_operation -dqqua698 quantize Inf -sNaN90 -> -NaN90 Invalid_operation -dqqua699 quantize NaN -sNaN88 -> -NaN88 Invalid_operation - --- subnormals and underflow -dqqua710 quantize 1.00E-6143 1e-6143 -> 1E-6143 Rounded -dqqua711 quantize 0.1E-6143 2e-6144 -> 1E-6144 Subnormal -dqqua712 quantize 0.10E-6143 3e-6144 -> 1E-6144 Subnormal Rounded -dqqua713 quantize 0.100E-6143 4e-6144 -> 1E-6144 Subnormal Rounded -dqqua714 quantize 0.01E-6143 5e-6145 -> 1E-6145 Subnormal --- next is rounded to Emin -dqqua715 quantize 0.999E-6143 1e-6143 -> 1E-6143 Inexact Rounded -dqqua716 quantize 0.099E-6143 10e-6144 -> 1E-6144 Inexact Rounded Subnormal - -dqqua717 quantize 0.009E-6143 1e-6145 -> 1E-6145 Inexact Rounded Subnormal -dqqua718 quantize 0.001E-6143 1e-6145 -> 0E-6145 Inexact Rounded -dqqua719 quantize 0.0009E-6143 1e-6145 -> 0E-6145 Inexact Rounded -dqqua720 quantize 0.0001E-6143 1e-6145 -> 0E-6145 Inexact Rounded - -dqqua730 quantize -1.00E-6143 1e-6143 -> -1E-6143 Rounded -dqqua731 quantize -0.1E-6143 1e-6143 -> -0E-6143 Rounded Inexact -dqqua732 quantize -0.10E-6143 1e-6143 -> -0E-6143 Rounded Inexact -dqqua733 quantize -0.100E-6143 1e-6143 -> -0E-6143 Rounded Inexact -dqqua734 quantize -0.01E-6143 1e-6143 -> -0E-6143 Inexact Rounded --- next is rounded to Emin -dqqua735 quantize -0.999E-6143 90e-6143 -> -1E-6143 Inexact Rounded -dqqua736 quantize -0.099E-6143 -1e-6143 -> -0E-6143 Inexact Rounded -dqqua737 quantize -0.009E-6143 -1e-6143 -> -0E-6143 Inexact Rounded -dqqua738 quantize -0.001E-6143 -0e-6143 -> -0E-6143 Inexact Rounded -dqqua739 quantize -0.0001E-6143 0e-6143 -> -0E-6143 Inexact Rounded - -dqqua740 quantize -1.00E-6143 1e-6144 -> -1.0E-6143 Rounded -dqqua741 quantize -0.1E-6143 1e-6144 -> -1E-6144 Subnormal -dqqua742 quantize -0.10E-6143 1e-6144 -> -1E-6144 Subnormal Rounded -dqqua743 quantize -0.100E-6143 1e-6144 -> -1E-6144 Subnormal Rounded -dqqua744 quantize -0.01E-6143 1e-6144 -> -0E-6144 Inexact Rounded --- next is rounded to Emin -dqqua745 quantize -0.999E-6143 1e-6144 -> -1.0E-6143 Inexact Rounded -dqqua746 quantize -0.099E-6143 1e-6144 -> -1E-6144 Inexact Rounded Subnormal -dqqua747 quantize -0.009E-6143 1e-6144 -> -0E-6144 Inexact Rounded -dqqua748 quantize -0.001E-6143 1e-6144 -> -0E-6144 Inexact Rounded -dqqua749 quantize -0.0001E-6143 1e-6144 -> -0E-6144 Inexact Rounded - -dqqua750 quantize -1.00E-6143 1e-6145 -> -1.00E-6143 -dqqua751 quantize -0.1E-6143 1e-6145 -> -1.0E-6144 Subnormal -dqqua752 quantize -0.10E-6143 1e-6145 -> -1.0E-6144 Subnormal -dqqua753 quantize -0.100E-6143 1e-6145 -> -1.0E-6144 Subnormal Rounded -dqqua754 quantize -0.01E-6143 1e-6145 -> -1E-6145 Subnormal --- next is rounded to Emin -dqqua755 quantize -0.999E-6143 1e-6145 -> -1.00E-6143 Inexact Rounded -dqqua756 quantize -0.099E-6143 1e-6145 -> -1.0E-6144 Inexact Rounded Subnormal -dqqua757 quantize -0.009E-6143 1e-6145 -> -1E-6145 Inexact Rounded Subnormal -dqqua758 quantize -0.001E-6143 1e-6145 -> -0E-6145 Inexact Rounded -dqqua759 quantize -0.0001E-6143 1e-6145 -> -0E-6145 Inexact Rounded - -dqqua760 quantize -1.00E-6143 1e-6146 -> -1.000E-6143 -dqqua761 quantize -0.1E-6143 1e-6146 -> -1.00E-6144 Subnormal -dqqua762 quantize -0.10E-6143 1e-6146 -> -1.00E-6144 Subnormal -dqqua763 quantize -0.100E-6143 1e-6146 -> -1.00E-6144 Subnormal -dqqua764 quantize -0.01E-6143 1e-6146 -> -1.0E-6145 Subnormal -dqqua765 quantize -0.999E-6143 1e-6146 -> -9.99E-6144 Subnormal -dqqua766 quantize -0.099E-6143 1e-6146 -> -9.9E-6145 Subnormal -dqqua767 quantize -0.009E-6143 1e-6146 -> -9E-6146 Subnormal -dqqua768 quantize -0.001E-6143 1e-6146 -> -1E-6146 Subnormal -dqqua769 quantize -0.0001E-6143 1e-6146 -> -0E-6146 Inexact Rounded - --- More from Fung Lee --- the next four would appear to be in error, but they are misleading (the --- operands will be clamped to a lower exponent) and so are omitted --- dqqua1021 quantize 8.666666666666000E+6144 1.000000000000000E+6144 -> 8.666666666666000000000000000000000E+6144 Clamped --- dqqua1022 quantize -8.666666666666000E+6144 1.000000000000000E+6144 -> -8.666666666666000000000000000000000E+6144 Clamped --- dqqua1027 quantize 8.666666666666000E+323 1E+31 -> NaN Invalid_operation --- dqqua1030 quantize 8.66666666E+3 1E+3 -> 9E+3 Inexact Rounded - --- Int and uInt32 edge values for testing conversions -dqqua1040 quantize -2147483646 0 -> -2147483646 -dqqua1041 quantize -2147483647 0 -> -2147483647 -dqqua1042 quantize -2147483648 0 -> -2147483648 -dqqua1043 quantize -2147483649 0 -> -2147483649 -dqqua1044 quantize 2147483646 0 -> 2147483646 -dqqua1045 quantize 2147483647 0 -> 2147483647 -dqqua1046 quantize 2147483648 0 -> 2147483648 -dqqua1047 quantize 2147483649 0 -> 2147483649 -dqqua1048 quantize 4294967294 0 -> 4294967294 -dqqua1049 quantize 4294967295 0 -> 4294967295 -dqqua1050 quantize 4294967296 0 -> 4294967296 -dqqua1051 quantize 4294967297 0 -> 4294967297 - --- Rounding swathe -rounding: half_even -dqqua1100 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1101 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1102 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1103 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -dqqua1104 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1105 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua1106 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1107 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1108 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1109 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: half_up -dqqua1200 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1201 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1202 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1203 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -dqqua1204 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1205 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -dqqua1206 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1207 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1208 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1209 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: half_down -dqqua1300 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1301 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1302 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1303 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -dqqua1304 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1305 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua1306 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1307 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1308 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1309 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: up -dqqua1400 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1401 quantize 1.2301 1.00 -> 1.24 Inexact Rounded -dqqua1402 quantize 1.2310 1.00 -> 1.24 Inexact Rounded -dqqua1403 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -dqqua1404 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1405 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -dqqua1406 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1407 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1408 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1409 quantize 1.2399 1.00 -> 1.24 Inexact Rounded -dqqua1411 quantize -1.2399 1.00 -> -1.24 Inexact Rounded - -rounding: down -dqqua1500 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1501 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1502 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1503 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -dqqua1504 quantize 1.2351 1.00 -> 1.23 Inexact Rounded -dqqua1505 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua1506 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -dqqua1507 quantize 1.2360 1.00 -> 1.23 Inexact Rounded -dqqua1508 quantize 1.2370 1.00 -> 1.23 Inexact Rounded -dqqua1509 quantize 1.2399 1.00 -> 1.23 Inexact Rounded -dqqua1511 quantize -1.2399 1.00 -> -1.23 Inexact Rounded - -rounding: ceiling -dqqua1600 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1601 quantize 1.2301 1.00 -> 1.24 Inexact Rounded -dqqua1602 quantize 1.2310 1.00 -> 1.24 Inexact Rounded -dqqua1603 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -dqqua1604 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1605 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -dqqua1606 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1607 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1608 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1609 quantize 1.2399 1.00 -> 1.24 Inexact Rounded -dqqua1611 quantize -1.2399 1.00 -> -1.23 Inexact Rounded - -rounding: floor -dqqua1700 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1701 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1702 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1703 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -dqqua1704 quantize 1.2351 1.00 -> 1.23 Inexact Rounded -dqqua1705 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua1706 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -dqqua1707 quantize 1.2360 1.00 -> 1.23 Inexact Rounded -dqqua1708 quantize 1.2370 1.00 -> 1.23 Inexact Rounded -dqqua1709 quantize 1.2399 1.00 -> 1.23 Inexact Rounded -dqqua1711 quantize -1.2399 1.00 -> -1.24 Inexact Rounded - -rounding: 05up -dqqua1800 quantize 1.2000 1.00 -> 1.20 Rounded -dqqua1801 quantize 1.2001 1.00 -> 1.21 Inexact Rounded -dqqua1802 quantize 1.2010 1.00 -> 1.21 Inexact Rounded -dqqua1803 quantize 1.2050 1.00 -> 1.21 Inexact Rounded -dqqua1804 quantize 1.2051 1.00 -> 1.21 Inexact Rounded -dqqua1807 quantize 1.2060 1.00 -> 1.21 Inexact Rounded -dqqua1808 quantize 1.2070 1.00 -> 1.21 Inexact Rounded -dqqua1809 quantize 1.2099 1.00 -> 1.21 Inexact Rounded -dqqua1811 quantize -1.2099 1.00 -> -1.21 Inexact Rounded - -dqqua1900 quantize 1.2100 1.00 -> 1.21 Rounded -dqqua1901 quantize 1.2101 1.00 -> 1.21 Inexact Rounded -dqqua1902 quantize 1.2110 1.00 -> 1.21 Inexact Rounded -dqqua1903 quantize 1.2150 1.00 -> 1.21 Inexact Rounded -dqqua1904 quantize 1.2151 1.00 -> 1.21 Inexact Rounded -dqqua1907 quantize 1.2160 1.00 -> 1.21 Inexact Rounded -dqqua1908 quantize 1.2170 1.00 -> 1.21 Inexact Rounded -dqqua1909 quantize 1.2199 1.00 -> 1.21 Inexact Rounded -dqqua1911 quantize -1.2199 1.00 -> -1.21 Inexact Rounded - -dqqua2000 quantize 1.2400 1.00 -> 1.24 Rounded -dqqua2001 quantize 1.2401 1.00 -> 1.24 Inexact Rounded -dqqua2002 quantize 1.2410 1.00 -> 1.24 Inexact Rounded -dqqua2003 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua2004 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -dqqua2007 quantize 1.2460 1.00 -> 1.24 Inexact Rounded -dqqua2008 quantize 1.2470 1.00 -> 1.24 Inexact Rounded -dqqua2009 quantize 1.2499 1.00 -> 1.24 Inexact Rounded -dqqua2011 quantize -1.2499 1.00 -> -1.24 Inexact Rounded - -dqqua2100 quantize 1.2500 1.00 -> 1.25 Rounded -dqqua2101 quantize 1.2501 1.00 -> 1.26 Inexact Rounded -dqqua2102 quantize 1.2510 1.00 -> 1.26 Inexact Rounded -dqqua2103 quantize 1.2550 1.00 -> 1.26 Inexact Rounded -dqqua2104 quantize 1.2551 1.00 -> 1.26 Inexact Rounded -dqqua2107 quantize 1.2560 1.00 -> 1.26 Inexact Rounded -dqqua2108 quantize 1.2570 1.00 -> 1.26 Inexact Rounded -dqqua2109 quantize 1.2599 1.00 -> 1.26 Inexact Rounded -dqqua2111 quantize -1.2599 1.00 -> -1.26 Inexact Rounded - -dqqua2200 quantize 1.2600 1.00 -> 1.26 Rounded -dqqua2201 quantize 1.2601 1.00 -> 1.26 Inexact Rounded -dqqua2202 quantize 1.2610 1.00 -> 1.26 Inexact Rounded -dqqua2203 quantize 1.2650 1.00 -> 1.26 Inexact Rounded -dqqua2204 quantize 1.2651 1.00 -> 1.26 Inexact Rounded -dqqua2207 quantize 1.2660 1.00 -> 1.26 Inexact Rounded -dqqua2208 quantize 1.2670 1.00 -> 1.26 Inexact Rounded -dqqua2209 quantize 1.2699 1.00 -> 1.26 Inexact Rounded -dqqua2211 quantize -1.2699 1.00 -> -1.26 Inexact Rounded - -dqqua2300 quantize 1.2900 1.00 -> 1.29 Rounded -dqqua2301 quantize 1.2901 1.00 -> 1.29 Inexact Rounded -dqqua2302 quantize 1.2910 1.00 -> 1.29 Inexact Rounded -dqqua2303 quantize 1.2950 1.00 -> 1.29 Inexact Rounded -dqqua2304 quantize 1.2951 1.00 -> 1.29 Inexact Rounded -dqqua2307 quantize 1.2960 1.00 -> 1.29 Inexact Rounded -dqqua2308 quantize 1.2970 1.00 -> 1.29 Inexact Rounded -dqqua2309 quantize 1.2999 1.00 -> 1.29 Inexact Rounded -dqqua2311 quantize -1.2999 1.00 -> -1.29 Inexact Rounded - --- Null tests -dqqua998 quantize 10 # -> NaN Invalid_operation -dqqua999 quantize # 1e10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqQuantize.decTest -- decQuad quantize operation -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Most of the tests here assume a "regular pattern", where the +-- sign and coefficient are +1. +-- 2004.03.15 Underflow for quantize is suppressed +-- 2005.06.08 More extensive tests for 'does not fit' +-- [Forked from quantize.decTest 2006.11.25] + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqqua001 quantize 0 1e0 -> 0 +dqqua002 quantize 1 1e0 -> 1 +dqqua003 quantize 0.1 1e+2 -> 0E+2 Inexact Rounded +dqqua005 quantize 0.1 1e+1 -> 0E+1 Inexact Rounded +dqqua006 quantize 0.1 1e0 -> 0 Inexact Rounded +dqqua007 quantize 0.1 1e-1 -> 0.1 +dqqua008 quantize 0.1 1e-2 -> 0.10 +dqqua009 quantize 0.1 1e-3 -> 0.100 +dqqua010 quantize 0.9 1e+2 -> 0E+2 Inexact Rounded +dqqua011 quantize 0.9 1e+1 -> 0E+1 Inexact Rounded +dqqua012 quantize 0.9 1e+0 -> 1 Inexact Rounded +dqqua013 quantize 0.9 1e-1 -> 0.9 +dqqua014 quantize 0.9 1e-2 -> 0.90 +dqqua015 quantize 0.9 1e-3 -> 0.900 +-- negatives +dqqua021 quantize -0 1e0 -> -0 +dqqua022 quantize -1 1e0 -> -1 +dqqua023 quantize -0.1 1e+2 -> -0E+2 Inexact Rounded +dqqua025 quantize -0.1 1e+1 -> -0E+1 Inexact Rounded +dqqua026 quantize -0.1 1e0 -> -0 Inexact Rounded +dqqua027 quantize -0.1 1e-1 -> -0.1 +dqqua028 quantize -0.1 1e-2 -> -0.10 +dqqua029 quantize -0.1 1e-3 -> -0.100 +dqqua030 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded +dqqua031 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded +dqqua032 quantize -0.9 1e+0 -> -1 Inexact Rounded +dqqua033 quantize -0.9 1e-1 -> -0.9 +dqqua034 quantize -0.9 1e-2 -> -0.90 +dqqua035 quantize -0.9 1e-3 -> -0.900 +dqqua036 quantize -0.5 1e+2 -> -0E+2 Inexact Rounded +dqqua037 quantize -0.5 1e+1 -> -0E+1 Inexact Rounded +dqqua038 quantize -0.5 1e+0 -> -0 Inexact Rounded +dqqua039 quantize -0.5 1e-1 -> -0.5 +dqqua040 quantize -0.5 1e-2 -> -0.50 +dqqua041 quantize -0.5 1e-3 -> -0.500 +dqqua042 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded +dqqua043 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded +dqqua044 quantize -0.9 1e+0 -> -1 Inexact Rounded +dqqua045 quantize -0.9 1e-1 -> -0.9 +dqqua046 quantize -0.9 1e-2 -> -0.90 +dqqua047 quantize -0.9 1e-3 -> -0.900 + +-- examples from Specification +dqqua060 quantize 2.17 0.001 -> 2.170 +dqqua061 quantize 2.17 0.01 -> 2.17 +dqqua062 quantize 2.17 0.1 -> 2.2 Inexact Rounded +dqqua063 quantize 2.17 1e+0 -> 2 Inexact Rounded +dqqua064 quantize 2.17 1e+1 -> 0E+1 Inexact Rounded +dqqua065 quantize -Inf Inf -> -Infinity +dqqua066 quantize 2 Inf -> NaN Invalid_operation +dqqua067 quantize -0.1 1 -> -0 Inexact Rounded +dqqua068 quantize -0 1e+5 -> -0E+5 +dqqua069 quantize +123451234567899876543216789012345.6 1e-2 -> NaN Invalid_operation +dqqua070 quantize -987651234567899876543214335236450.6 1e-2 -> NaN Invalid_operation +dqqua071 quantize 217 1e-1 -> 217.0 +dqqua072 quantize 217 1e+0 -> 217 +dqqua073 quantize 217 1e+1 -> 2.2E+2 Inexact Rounded +dqqua074 quantize 217 1e+2 -> 2E+2 Inexact Rounded + +-- general tests .. +dqqua089 quantize 12 1e+4 -> 0E+4 Inexact Rounded +dqqua090 quantize 12 1e+3 -> 0E+3 Inexact Rounded +dqqua091 quantize 12 1e+2 -> 0E+2 Inexact Rounded +dqqua092 quantize 12 1e+1 -> 1E+1 Inexact Rounded +dqqua093 quantize 1.2345 1e-2 -> 1.23 Inexact Rounded +dqqua094 quantize 1.2355 1e-2 -> 1.24 Inexact Rounded +dqqua095 quantize 1.2345 1e-6 -> 1.234500 +dqqua096 quantize 9.9999 1e-2 -> 10.00 Inexact Rounded +dqqua097 quantize 0.0001 1e-2 -> 0.00 Inexact Rounded +dqqua098 quantize 0.001 1e-2 -> 0.00 Inexact Rounded +dqqua099 quantize 0.009 1e-2 -> 0.01 Inexact Rounded +dqqua100 quantize 92 1e+2 -> 1E+2 Inexact Rounded + +dqqua101 quantize -1 1e0 -> -1 +dqqua102 quantize -1 1e-1 -> -1.0 +dqqua103 quantize -1 1e-2 -> -1.00 +dqqua104 quantize 0 1e0 -> 0 +dqqua105 quantize 0 1e-1 -> 0.0 +dqqua106 quantize 0 1e-2 -> 0.00 +dqqua107 quantize 0.00 1e0 -> 0 +dqqua108 quantize 0 1e+1 -> 0E+1 +dqqua109 quantize 0 1e+2 -> 0E+2 +dqqua110 quantize +1 1e0 -> 1 +dqqua111 quantize +1 1e-1 -> 1.0 +dqqua112 quantize +1 1e-2 -> 1.00 + +dqqua120 quantize 1.04 1e-3 -> 1.040 +dqqua121 quantize 1.04 1e-2 -> 1.04 +dqqua122 quantize 1.04 1e-1 -> 1.0 Inexact Rounded +dqqua123 quantize 1.04 1e0 -> 1 Inexact Rounded +dqqua124 quantize 1.05 1e-3 -> 1.050 +dqqua125 quantize 1.05 1e-2 -> 1.05 +dqqua126 quantize 1.05 1e-1 -> 1.0 Inexact Rounded +dqqua131 quantize 1.05 1e0 -> 1 Inexact Rounded +dqqua132 quantize 1.06 1e-3 -> 1.060 +dqqua133 quantize 1.06 1e-2 -> 1.06 +dqqua134 quantize 1.06 1e-1 -> 1.1 Inexact Rounded +dqqua135 quantize 1.06 1e0 -> 1 Inexact Rounded + +dqqua140 quantize -10 1e-2 -> -10.00 +dqqua141 quantize +1 1e-2 -> 1.00 +dqqua142 quantize +10 1e-2 -> 10.00 +dqqua143 quantize 1E+37 1e-2 -> NaN Invalid_operation +dqqua144 quantize 1E-37 1e-2 -> 0.00 Inexact Rounded +dqqua145 quantize 1E-3 1e-2 -> 0.00 Inexact Rounded +dqqua146 quantize 1E-2 1e-2 -> 0.01 +dqqua147 quantize 1E-1 1e-2 -> 0.10 +dqqua148 quantize 0E-37 1e-2 -> 0.00 + +dqqua150 quantize 1.0600 1e-5 -> 1.06000 +dqqua151 quantize 1.0600 1e-4 -> 1.0600 +dqqua152 quantize 1.0600 1e-3 -> 1.060 Rounded +dqqua153 quantize 1.0600 1e-2 -> 1.06 Rounded +dqqua154 quantize 1.0600 1e-1 -> 1.1 Inexact Rounded +dqqua155 quantize 1.0600 1e0 -> 1 Inexact Rounded + +-- a couple where rounding was different in base tests +rounding: half_up +dqqua157 quantize -0.5 1e+0 -> -1 Inexact Rounded +dqqua158 quantize 1.05 1e-1 -> 1.1 Inexact Rounded +dqqua159 quantize 1.06 1e0 -> 1 Inexact Rounded +rounding: half_even + +-- base tests with non-1 coefficients +dqqua161 quantize 0 -9e0 -> 0 +dqqua162 quantize 1 -7e0 -> 1 +dqqua163 quantize 0.1 -1e+2 -> 0E+2 Inexact Rounded +dqqua165 quantize 0.1 0e+1 -> 0E+1 Inexact Rounded +dqqua166 quantize 0.1 2e0 -> 0 Inexact Rounded +dqqua167 quantize 0.1 3e-1 -> 0.1 +dqqua168 quantize 0.1 44e-2 -> 0.10 +dqqua169 quantize 0.1 555e-3 -> 0.100 +dqqua170 quantize 0.9 6666e+2 -> 0E+2 Inexact Rounded +dqqua171 quantize 0.9 -777e+1 -> 0E+1 Inexact Rounded +dqqua172 quantize 0.9 -88e+0 -> 1 Inexact Rounded +dqqua173 quantize 0.9 -9e-1 -> 0.9 +dqqua174 quantize 0.9 0e-2 -> 0.90 +dqqua175 quantize 0.9 1.1e-3 -> 0.9000 +-- negatives +dqqua181 quantize -0 1.1e0 -> -0.0 +dqqua182 quantize -1 -1e0 -> -1 +dqqua183 quantize -0.1 11e+2 -> -0E+2 Inexact Rounded +dqqua185 quantize -0.1 111e+1 -> -0E+1 Inexact Rounded +dqqua186 quantize -0.1 71e0 -> -0 Inexact Rounded +dqqua187 quantize -0.1 -91e-1 -> -0.1 +dqqua188 quantize -0.1 -.1e-2 -> -0.100 +dqqua189 quantize -0.1 -1e-3 -> -0.100 +dqqua190 quantize -0.9 0e+2 -> -0E+2 Inexact Rounded +dqqua191 quantize -0.9 -0e+1 -> -0E+1 Inexact Rounded +dqqua192 quantize -0.9 -10e+0 -> -1 Inexact Rounded +dqqua193 quantize -0.9 100e-1 -> -0.9 +dqqua194 quantize -0.9 999e-2 -> -0.90 + +-- +ve exponents .. +dqqua201 quantize -1 1e+0 -> -1 +dqqua202 quantize -1 1e+1 -> -0E+1 Inexact Rounded +dqqua203 quantize -1 1e+2 -> -0E+2 Inexact Rounded +dqqua204 quantize 0 1e+0 -> 0 +dqqua205 quantize 0 1e+1 -> 0E+1 +dqqua206 quantize 0 1e+2 -> 0E+2 +dqqua207 quantize +1 1e+0 -> 1 +dqqua208 quantize +1 1e+1 -> 0E+1 Inexact Rounded +dqqua209 quantize +1 1e+2 -> 0E+2 Inexact Rounded + +dqqua220 quantize 1.04 1e+3 -> 0E+3 Inexact Rounded +dqqua221 quantize 1.04 1e+2 -> 0E+2 Inexact Rounded +dqqua222 quantize 1.04 1e+1 -> 0E+1 Inexact Rounded +dqqua223 quantize 1.04 1e+0 -> 1 Inexact Rounded +dqqua224 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded +dqqua225 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded +dqqua226 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded +dqqua227 quantize 1.05 1e+0 -> 1 Inexact Rounded +dqqua228 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded +dqqua229 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded +dqqua230 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded +dqqua231 quantize 1.05 1e+0 -> 1 Inexact Rounded +dqqua232 quantize 1.06 1e+3 -> 0E+3 Inexact Rounded +dqqua233 quantize 1.06 1e+2 -> 0E+2 Inexact Rounded +dqqua234 quantize 1.06 1e+1 -> 0E+1 Inexact Rounded +dqqua235 quantize 1.06 1e+0 -> 1 Inexact Rounded + +dqqua240 quantize -10 1e+1 -> -1E+1 Rounded +dqqua241 quantize +1 1e+1 -> 0E+1 Inexact Rounded +dqqua242 quantize +10 1e+1 -> 1E+1 Rounded +dqqua243 quantize 1E+1 1e+1 -> 1E+1 -- underneath this is E+1 +dqqua244 quantize 1E+2 1e+1 -> 1.0E+2 -- underneath this is E+1 +dqqua245 quantize 1E+3 1e+1 -> 1.00E+3 -- underneath this is E+1 +dqqua246 quantize 1E+4 1e+1 -> 1.000E+4 -- underneath this is E+1 +dqqua247 quantize 1E+5 1e+1 -> 1.0000E+5 -- underneath this is E+1 +dqqua248 quantize 1E+6 1e+1 -> 1.00000E+6 -- underneath this is E+1 +dqqua249 quantize 1E+7 1e+1 -> 1.000000E+7 -- underneath this is E+1 +dqqua250 quantize 1E+8 1e+1 -> 1.0000000E+8 -- underneath this is E+1 +dqqua251 quantize 1E+9 1e+1 -> 1.00000000E+9 -- underneath this is E+1 +-- next one tries to add 9 zeros +dqqua252 quantize 1E+37 1e+1 -> NaN Invalid_operation +dqqua253 quantize 1E-37 1e+1 -> 0E+1 Inexact Rounded +dqqua254 quantize 1E-2 1e+1 -> 0E+1 Inexact Rounded +dqqua255 quantize 0E-37 1e+1 -> 0E+1 +dqqua256 quantize -0E-37 1e+1 -> -0E+1 +dqqua257 quantize -0E-1 1e+1 -> -0E+1 +dqqua258 quantize -0 1e+1 -> -0E+1 +dqqua259 quantize -0E+1 1e+1 -> -0E+1 + +dqqua260 quantize -10 1e+2 -> -0E+2 Inexact Rounded +dqqua261 quantize +1 1e+2 -> 0E+2 Inexact Rounded +dqqua262 quantize +10 1e+2 -> 0E+2 Inexact Rounded +dqqua263 quantize 1E+1 1e+2 -> 0E+2 Inexact Rounded +dqqua264 quantize 1E+2 1e+2 -> 1E+2 +dqqua265 quantize 1E+3 1e+2 -> 1.0E+3 +dqqua266 quantize 1E+4 1e+2 -> 1.00E+4 +dqqua267 quantize 1E+5 1e+2 -> 1.000E+5 +dqqua268 quantize 1E+6 1e+2 -> 1.0000E+6 +dqqua269 quantize 1E+7 1e+2 -> 1.00000E+7 +dqqua270 quantize 1E+8 1e+2 -> 1.000000E+8 +dqqua271 quantize 1E+9 1e+2 -> 1.0000000E+9 +dqqua272 quantize 1E+10 1e+2 -> 1.00000000E+10 +dqqua273 quantize 1E-10 1e+2 -> 0E+2 Inexact Rounded +dqqua274 quantize 1E-2 1e+2 -> 0E+2 Inexact Rounded +dqqua275 quantize 0E-10 1e+2 -> 0E+2 + +dqqua280 quantize -10 1e+3 -> -0E+3 Inexact Rounded +dqqua281 quantize +1 1e+3 -> 0E+3 Inexact Rounded +dqqua282 quantize +10 1e+3 -> 0E+3 Inexact Rounded +dqqua283 quantize 1E+1 1e+3 -> 0E+3 Inexact Rounded +dqqua284 quantize 1E+2 1e+3 -> 0E+3 Inexact Rounded +dqqua285 quantize 1E+3 1e+3 -> 1E+3 +dqqua286 quantize 1E+4 1e+3 -> 1.0E+4 +dqqua287 quantize 1E+5 1e+3 -> 1.00E+5 +dqqua288 quantize 1E+6 1e+3 -> 1.000E+6 +dqqua289 quantize 1E+7 1e+3 -> 1.0000E+7 +dqqua290 quantize 1E+8 1e+3 -> 1.00000E+8 +dqqua291 quantize 1E+9 1e+3 -> 1.000000E+9 +dqqua292 quantize 1E+10 1e+3 -> 1.0000000E+10 +dqqua293 quantize 1E-10 1e+3 -> 0E+3 Inexact Rounded +dqqua294 quantize 1E-2 1e+3 -> 0E+3 Inexact Rounded +dqqua295 quantize 0E-10 1e+3 -> 0E+3 + +-- round up from below [sign wrong in JIT compiler once] +dqqua300 quantize 0.0078 1e-5 -> 0.00780 +dqqua301 quantize 0.0078 1e-4 -> 0.0078 +dqqua302 quantize 0.0078 1e-3 -> 0.008 Inexact Rounded +dqqua303 quantize 0.0078 1e-2 -> 0.01 Inexact Rounded +dqqua304 quantize 0.0078 1e-1 -> 0.0 Inexact Rounded +dqqua305 quantize 0.0078 1e0 -> 0 Inexact Rounded +dqqua306 quantize 0.0078 1e+1 -> 0E+1 Inexact Rounded +dqqua307 quantize 0.0078 1e+2 -> 0E+2 Inexact Rounded + +dqqua310 quantize -0.0078 1e-5 -> -0.00780 +dqqua311 quantize -0.0078 1e-4 -> -0.0078 +dqqua312 quantize -0.0078 1e-3 -> -0.008 Inexact Rounded +dqqua313 quantize -0.0078 1e-2 -> -0.01 Inexact Rounded +dqqua314 quantize -0.0078 1e-1 -> -0.0 Inexact Rounded +dqqua315 quantize -0.0078 1e0 -> -0 Inexact Rounded +dqqua316 quantize -0.0078 1e+1 -> -0E+1 Inexact Rounded +dqqua317 quantize -0.0078 1e+2 -> -0E+2 Inexact Rounded + +dqqua320 quantize 0.078 1e-5 -> 0.07800 +dqqua321 quantize 0.078 1e-4 -> 0.0780 +dqqua322 quantize 0.078 1e-3 -> 0.078 +dqqua323 quantize 0.078 1e-2 -> 0.08 Inexact Rounded +dqqua324 quantize 0.078 1e-1 -> 0.1 Inexact Rounded +dqqua325 quantize 0.078 1e0 -> 0 Inexact Rounded +dqqua326 quantize 0.078 1e+1 -> 0E+1 Inexact Rounded +dqqua327 quantize 0.078 1e+2 -> 0E+2 Inexact Rounded + +dqqua330 quantize -0.078 1e-5 -> -0.07800 +dqqua331 quantize -0.078 1e-4 -> -0.0780 +dqqua332 quantize -0.078 1e-3 -> -0.078 +dqqua333 quantize -0.078 1e-2 -> -0.08 Inexact Rounded +dqqua334 quantize -0.078 1e-1 -> -0.1 Inexact Rounded +dqqua335 quantize -0.078 1e0 -> -0 Inexact Rounded +dqqua336 quantize -0.078 1e+1 -> -0E+1 Inexact Rounded +dqqua337 quantize -0.078 1e+2 -> -0E+2 Inexact Rounded + +dqqua340 quantize 0.78 1e-5 -> 0.78000 +dqqua341 quantize 0.78 1e-4 -> 0.7800 +dqqua342 quantize 0.78 1e-3 -> 0.780 +dqqua343 quantize 0.78 1e-2 -> 0.78 +dqqua344 quantize 0.78 1e-1 -> 0.8 Inexact Rounded +dqqua345 quantize 0.78 1e0 -> 1 Inexact Rounded +dqqua346 quantize 0.78 1e+1 -> 0E+1 Inexact Rounded +dqqua347 quantize 0.78 1e+2 -> 0E+2 Inexact Rounded + +dqqua350 quantize -0.78 1e-5 -> -0.78000 +dqqua351 quantize -0.78 1e-4 -> -0.7800 +dqqua352 quantize -0.78 1e-3 -> -0.780 +dqqua353 quantize -0.78 1e-2 -> -0.78 +dqqua354 quantize -0.78 1e-1 -> -0.8 Inexact Rounded +dqqua355 quantize -0.78 1e0 -> -1 Inexact Rounded +dqqua356 quantize -0.78 1e+1 -> -0E+1 Inexact Rounded +dqqua357 quantize -0.78 1e+2 -> -0E+2 Inexact Rounded + +dqqua360 quantize 7.8 1e-5 -> 7.80000 +dqqua361 quantize 7.8 1e-4 -> 7.8000 +dqqua362 quantize 7.8 1e-3 -> 7.800 +dqqua363 quantize 7.8 1e-2 -> 7.80 +dqqua364 quantize 7.8 1e-1 -> 7.8 +dqqua365 quantize 7.8 1e0 -> 8 Inexact Rounded +dqqua366 quantize 7.8 1e+1 -> 1E+1 Inexact Rounded +dqqua367 quantize 7.8 1e+2 -> 0E+2 Inexact Rounded +dqqua368 quantize 7.8 1e+3 -> 0E+3 Inexact Rounded + +dqqua370 quantize -7.8 1e-5 -> -7.80000 +dqqua371 quantize -7.8 1e-4 -> -7.8000 +dqqua372 quantize -7.8 1e-3 -> -7.800 +dqqua373 quantize -7.8 1e-2 -> -7.80 +dqqua374 quantize -7.8 1e-1 -> -7.8 +dqqua375 quantize -7.8 1e0 -> -8 Inexact Rounded +dqqua376 quantize -7.8 1e+1 -> -1E+1 Inexact Rounded +dqqua377 quantize -7.8 1e+2 -> -0E+2 Inexact Rounded +dqqua378 quantize -7.8 1e+3 -> -0E+3 Inexact Rounded + +-- some individuals +dqqua380 quantize 1122334455667788991234567352364.506 1e-2 -> 1122334455667788991234567352364.51 Inexact Rounded +dqqua381 quantize 11223344556677889912345673523645.06 1e-2 -> 11223344556677889912345673523645.06 +dqqua382 quantize 112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation +dqqua383 quantize 1122334455667788991234567352364506 1e-2 -> NaN Invalid_operation +dqqua384 quantize -1122334455667788991234567352364.506 1e-2 -> -1122334455667788991234567352364.51 Inexact Rounded +dqqua385 quantize -11223344556677889912345673523645.06 1e-2 -> -11223344556677889912345673523645.06 +dqqua386 quantize -112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation +dqqua387 quantize -1122334455667788991234567352364506 1e-2 -> NaN Invalid_operation + +rounding: down +dqqua389 quantize 112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation +rounding: half_up + +-- and a few more from e-mail discussions +dqqua391 quantize 11223344556677889912345678912.34567 1e-3 -> 11223344556677889912345678912.346 Inexact Rounded +dqqua392 quantize 112233445566778899123456789123.4567 1e-3 -> 112233445566778899123456789123.457 Inexact Rounded +dqqua393 quantize 1122334455667788991234567891234567. 1e-3 -> NaN Invalid_operation + +-- some 9999 round-up cases +dqqua400 quantize 9.999 1e-5 -> 9.99900 +dqqua401 quantize 9.999 1e-4 -> 9.9990 +dqqua402 quantize 9.999 1e-3 -> 9.999 +dqqua403 quantize 9.999 1e-2 -> 10.00 Inexact Rounded +dqqua404 quantize 9.999 1e-1 -> 10.0 Inexact Rounded +dqqua405 quantize 9.999 1e0 -> 10 Inexact Rounded +dqqua406 quantize 9.999 1e1 -> 1E+1 Inexact Rounded +dqqua407 quantize 9.999 1e2 -> 0E+2 Inexact Rounded + +dqqua410 quantize 0.999 1e-5 -> 0.99900 +dqqua411 quantize 0.999 1e-4 -> 0.9990 +dqqua412 quantize 0.999 1e-3 -> 0.999 +dqqua413 quantize 0.999 1e-2 -> 1.00 Inexact Rounded +dqqua414 quantize 0.999 1e-1 -> 1.0 Inexact Rounded +dqqua415 quantize 0.999 1e0 -> 1 Inexact Rounded +dqqua416 quantize 0.999 1e1 -> 0E+1 Inexact Rounded + +dqqua420 quantize 0.0999 1e-5 -> 0.09990 +dqqua421 quantize 0.0999 1e-4 -> 0.0999 +dqqua422 quantize 0.0999 1e-3 -> 0.100 Inexact Rounded +dqqua423 quantize 0.0999 1e-2 -> 0.10 Inexact Rounded +dqqua424 quantize 0.0999 1e-1 -> 0.1 Inexact Rounded +dqqua425 quantize 0.0999 1e0 -> 0 Inexact Rounded +dqqua426 quantize 0.0999 1e1 -> 0E+1 Inexact Rounded + +dqqua430 quantize 0.00999 1e-5 -> 0.00999 +dqqua431 quantize 0.00999 1e-4 -> 0.0100 Inexact Rounded +dqqua432 quantize 0.00999 1e-3 -> 0.010 Inexact Rounded +dqqua433 quantize 0.00999 1e-2 -> 0.01 Inexact Rounded +dqqua434 quantize 0.00999 1e-1 -> 0.0 Inexact Rounded +dqqua435 quantize 0.00999 1e0 -> 0 Inexact Rounded +dqqua436 quantize 0.00999 1e1 -> 0E+1 Inexact Rounded + +dqqua440 quantize 0.000999 1e-5 -> 0.00100 Inexact Rounded +dqqua441 quantize 0.000999 1e-4 -> 0.0010 Inexact Rounded +dqqua442 quantize 0.000999 1e-3 -> 0.001 Inexact Rounded +dqqua443 quantize 0.000999 1e-2 -> 0.00 Inexact Rounded +dqqua444 quantize 0.000999 1e-1 -> 0.0 Inexact Rounded +dqqua445 quantize 0.000999 1e0 -> 0 Inexact Rounded +dqqua446 quantize 0.000999 1e1 -> 0E+1 Inexact Rounded + +dqqua1001 quantize 0.000 0.001 -> 0.000 +dqqua1002 quantize 0.001 0.001 -> 0.001 +dqqua1003 quantize 0.0012 0.001 -> 0.001 Inexact Rounded +dqqua1004 quantize 0.0018 0.001 -> 0.002 Inexact Rounded +dqqua1005 quantize 0.501 0.001 -> 0.501 +dqqua1006 quantize 0.5012 0.001 -> 0.501 Inexact Rounded +dqqua1007 quantize 0.5018 0.001 -> 0.502 Inexact Rounded +dqqua1008 quantize 0.999 0.001 -> 0.999 + +dqqua481 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded +dqqua482 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded +dqqua483 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded +dqqua484 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded +dqqua485 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded +dqqua486 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded +-- a potential double-round +dqqua487 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded +dqqua488 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded + +dqqua491 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded +dqqua492 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded +dqqua493 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded +dqqua494 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded +dqqua495 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded +dqqua496 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded +dqqua497 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded +dqqua498 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded + +-- Zeros +dqqua500 quantize 0 1e1 -> 0E+1 +dqqua501 quantize 0 1e0 -> 0 +dqqua502 quantize 0 1e-1 -> 0.0 +dqqua503 quantize 0.0 1e-1 -> 0.0 +dqqua504 quantize 0.0 1e0 -> 0 +dqqua505 quantize 0.0 1e+1 -> 0E+1 +dqqua506 quantize 0E+1 1e-1 -> 0.0 +dqqua507 quantize 0E+1 1e0 -> 0 +dqqua508 quantize 0E+1 1e+1 -> 0E+1 +dqqua509 quantize -0 1e1 -> -0E+1 +dqqua510 quantize -0 1e0 -> -0 +dqqua511 quantize -0 1e-1 -> -0.0 +dqqua512 quantize -0.0 1e-1 -> -0.0 +dqqua513 quantize -0.0 1e0 -> -0 +dqqua514 quantize -0.0 1e+1 -> -0E+1 +dqqua515 quantize -0E+1 1e-1 -> -0.0 +dqqua516 quantize -0E+1 1e0 -> -0 +dqqua517 quantize -0E+1 1e+1 -> -0E+1 +-- #519 here once a problem +dqqua518 quantize 0 0E-3 -> 0.000 +dqqua519 quantize 0 0E-33 -> 0E-33 +dqqua520 quantize 0.00000000000000000000000000000000 0E-33 -> 0E-33 +dqqua521 quantize 0.000000000000000000000000000000000 0E-33 -> 0E-33 + +-- Some non-zeros with lots of padding on the right +dqqua523 quantize 1 0E-33 -> 1.000000000000000000000000000000000 +dqqua524 quantize 12 0E-32 -> 12.00000000000000000000000000000000 +dqqua525 quantize 123 0E-31 -> 123.0000000000000000000000000000000 +dqqua526 quantize 123 0E-32 -> NaN Invalid_operation +dqqua527 quantize 123.4 0E-31 -> 123.4000000000000000000000000000000 +dqqua528 quantize 123.4 0E-32 -> NaN Invalid_operation + +-- Suspicious RHS values +dqqua530 quantize 1.234 1e359 -> 0E+359 Inexact Rounded +dqqua531 quantize 123.456 1e359 -> 0E+359 Inexact Rounded +dqqua532 quantize 1.234 1e359 -> 0E+359 Inexact Rounded +dqqua533 quantize 123.456 1e359 -> 0E+359 Inexact Rounded +-- next four are "won't fit" overflows +dqqua536 quantize 1.234 1e-299 -> NaN Invalid_operation +dqqua537 quantize 123.456 1e-299 -> NaN Invalid_operation +dqqua538 quantize 1.234 1e-299 -> NaN Invalid_operation +dqqua539 quantize 123.456 1e-299 -> NaN Invalid_operation + +dqqua542 quantize 1.234E+299 1e299 -> 1E+299 Inexact Rounded +dqqua543 quantize 1.234E+298 1e299 -> 0E+299 Inexact Rounded +dqqua544 quantize 1.234 1e299 -> 0E+299 Inexact Rounded +dqqua547 quantize 0 1e-299 -> 0E-299 +-- next two are "won't fit" overflows +dqqua548 quantize 1.234 1e-299 -> NaN Invalid_operation +dqqua549 quantize 1.234 1e-300 -> NaN Invalid_operation +-- [more below] + +-- Specials +dqqua580 quantize Inf -Inf -> Infinity +dqqua581 quantize Inf 1e-299 -> NaN Invalid_operation +dqqua582 quantize Inf 1e-1 -> NaN Invalid_operation +dqqua583 quantize Inf 1e0 -> NaN Invalid_operation +dqqua584 quantize Inf 1e1 -> NaN Invalid_operation +dqqua585 quantize Inf 1e299 -> NaN Invalid_operation +dqqua586 quantize Inf Inf -> Infinity +dqqua587 quantize -1000 Inf -> NaN Invalid_operation +dqqua588 quantize -Inf Inf -> -Infinity +dqqua589 quantize -1 Inf -> NaN Invalid_operation +dqqua590 quantize 0 Inf -> NaN Invalid_operation +dqqua591 quantize 1 Inf -> NaN Invalid_operation +dqqua592 quantize 1000 Inf -> NaN Invalid_operation +dqqua593 quantize Inf Inf -> Infinity +dqqua594 quantize Inf 1e-0 -> NaN Invalid_operation +dqqua595 quantize -0 Inf -> NaN Invalid_operation + +dqqua600 quantize -Inf -Inf -> -Infinity +dqqua601 quantize -Inf 1e-299 -> NaN Invalid_operation +dqqua602 quantize -Inf 1e-1 -> NaN Invalid_operation +dqqua603 quantize -Inf 1e0 -> NaN Invalid_operation +dqqua604 quantize -Inf 1e1 -> NaN Invalid_operation +dqqua605 quantize -Inf 1e299 -> NaN Invalid_operation +dqqua606 quantize -Inf Inf -> -Infinity +dqqua607 quantize -1000 Inf -> NaN Invalid_operation +dqqua608 quantize -Inf -Inf -> -Infinity +dqqua609 quantize -1 -Inf -> NaN Invalid_operation +dqqua610 quantize 0 -Inf -> NaN Invalid_operation +dqqua611 quantize 1 -Inf -> NaN Invalid_operation +dqqua612 quantize 1000 -Inf -> NaN Invalid_operation +dqqua613 quantize Inf -Inf -> Infinity +dqqua614 quantize -Inf 1e-0 -> NaN Invalid_operation +dqqua615 quantize -0 -Inf -> NaN Invalid_operation + +dqqua621 quantize NaN -Inf -> NaN +dqqua622 quantize NaN 1e-299 -> NaN +dqqua623 quantize NaN 1e-1 -> NaN +dqqua624 quantize NaN 1e0 -> NaN +dqqua625 quantize NaN 1e1 -> NaN +dqqua626 quantize NaN 1e299 -> NaN +dqqua627 quantize NaN Inf -> NaN +dqqua628 quantize NaN NaN -> NaN +dqqua629 quantize -Inf NaN -> NaN +dqqua630 quantize -1000 NaN -> NaN +dqqua631 quantize -1 NaN -> NaN +dqqua632 quantize 0 NaN -> NaN +dqqua633 quantize 1 NaN -> NaN +dqqua634 quantize 1000 NaN -> NaN +dqqua635 quantize Inf NaN -> NaN +dqqua636 quantize NaN 1e-0 -> NaN +dqqua637 quantize -0 NaN -> NaN + +dqqua641 quantize sNaN -Inf -> NaN Invalid_operation +dqqua642 quantize sNaN 1e-299 -> NaN Invalid_operation +dqqua643 quantize sNaN 1e-1 -> NaN Invalid_operation +dqqua644 quantize sNaN 1e0 -> NaN Invalid_operation +dqqua645 quantize sNaN 1e1 -> NaN Invalid_operation +dqqua646 quantize sNaN 1e299 -> NaN Invalid_operation +dqqua647 quantize sNaN NaN -> NaN Invalid_operation +dqqua648 quantize sNaN sNaN -> NaN Invalid_operation +dqqua649 quantize NaN sNaN -> NaN Invalid_operation +dqqua650 quantize -Inf sNaN -> NaN Invalid_operation +dqqua651 quantize -1000 sNaN -> NaN Invalid_operation +dqqua652 quantize -1 sNaN -> NaN Invalid_operation +dqqua653 quantize 0 sNaN -> NaN Invalid_operation +dqqua654 quantize 1 sNaN -> NaN Invalid_operation +dqqua655 quantize 1000 sNaN -> NaN Invalid_operation +dqqua656 quantize Inf sNaN -> NaN Invalid_operation +dqqua657 quantize NaN sNaN -> NaN Invalid_operation +dqqua658 quantize sNaN 1e-0 -> NaN Invalid_operation +dqqua659 quantize -0 sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqqua661 quantize NaN9 -Inf -> NaN9 +dqqua662 quantize NaN8 919 -> NaN8 +dqqua663 quantize NaN71 Inf -> NaN71 +dqqua664 quantize NaN6 NaN5 -> NaN6 +dqqua665 quantize -Inf NaN4 -> NaN4 +dqqua666 quantize -919 NaN31 -> NaN31 +dqqua667 quantize Inf NaN2 -> NaN2 + +dqqua671 quantize sNaN99 -Inf -> NaN99 Invalid_operation +dqqua672 quantize sNaN98 -11 -> NaN98 Invalid_operation +dqqua673 quantize sNaN97 NaN -> NaN97 Invalid_operation +dqqua674 quantize sNaN16 sNaN94 -> NaN16 Invalid_operation +dqqua675 quantize NaN95 sNaN93 -> NaN93 Invalid_operation +dqqua676 quantize -Inf sNaN92 -> NaN92 Invalid_operation +dqqua677 quantize 088 sNaN91 -> NaN91 Invalid_operation +dqqua678 quantize Inf sNaN90 -> NaN90 Invalid_operation +dqqua679 quantize NaN sNaN88 -> NaN88 Invalid_operation + +dqqua681 quantize -NaN9 -Inf -> -NaN9 +dqqua682 quantize -NaN8 919 -> -NaN8 +dqqua683 quantize -NaN71 Inf -> -NaN71 +dqqua684 quantize -NaN6 -NaN5 -> -NaN6 +dqqua685 quantize -Inf -NaN4 -> -NaN4 +dqqua686 quantize -919 -NaN31 -> -NaN31 +dqqua687 quantize Inf -NaN2 -> -NaN2 + +dqqua691 quantize -sNaN99 -Inf -> -NaN99 Invalid_operation +dqqua692 quantize -sNaN98 -11 -> -NaN98 Invalid_operation +dqqua693 quantize -sNaN97 NaN -> -NaN97 Invalid_operation +dqqua694 quantize -sNaN16 sNaN94 -> -NaN16 Invalid_operation +dqqua695 quantize -NaN95 -sNaN93 -> -NaN93 Invalid_operation +dqqua696 quantize -Inf -sNaN92 -> -NaN92 Invalid_operation +dqqua697 quantize 088 -sNaN91 -> -NaN91 Invalid_operation +dqqua698 quantize Inf -sNaN90 -> -NaN90 Invalid_operation +dqqua699 quantize NaN -sNaN88 -> -NaN88 Invalid_operation + +-- subnormals and underflow +dqqua710 quantize 1.00E-6143 1e-6143 -> 1E-6143 Rounded +dqqua711 quantize 0.1E-6143 2e-6144 -> 1E-6144 Subnormal +dqqua712 quantize 0.10E-6143 3e-6144 -> 1E-6144 Subnormal Rounded +dqqua713 quantize 0.100E-6143 4e-6144 -> 1E-6144 Subnormal Rounded +dqqua714 quantize 0.01E-6143 5e-6145 -> 1E-6145 Subnormal +-- next is rounded to Emin +dqqua715 quantize 0.999E-6143 1e-6143 -> 1E-6143 Inexact Rounded +dqqua716 quantize 0.099E-6143 10e-6144 -> 1E-6144 Inexact Rounded Subnormal + +dqqua717 quantize 0.009E-6143 1e-6145 -> 1E-6145 Inexact Rounded Subnormal +dqqua718 quantize 0.001E-6143 1e-6145 -> 0E-6145 Inexact Rounded +dqqua719 quantize 0.0009E-6143 1e-6145 -> 0E-6145 Inexact Rounded +dqqua720 quantize 0.0001E-6143 1e-6145 -> 0E-6145 Inexact Rounded + +dqqua730 quantize -1.00E-6143 1e-6143 -> -1E-6143 Rounded +dqqua731 quantize -0.1E-6143 1e-6143 -> -0E-6143 Rounded Inexact +dqqua732 quantize -0.10E-6143 1e-6143 -> -0E-6143 Rounded Inexact +dqqua733 quantize -0.100E-6143 1e-6143 -> -0E-6143 Rounded Inexact +dqqua734 quantize -0.01E-6143 1e-6143 -> -0E-6143 Inexact Rounded +-- next is rounded to Emin +dqqua735 quantize -0.999E-6143 90e-6143 -> -1E-6143 Inexact Rounded +dqqua736 quantize -0.099E-6143 -1e-6143 -> -0E-6143 Inexact Rounded +dqqua737 quantize -0.009E-6143 -1e-6143 -> -0E-6143 Inexact Rounded +dqqua738 quantize -0.001E-6143 -0e-6143 -> -0E-6143 Inexact Rounded +dqqua739 quantize -0.0001E-6143 0e-6143 -> -0E-6143 Inexact Rounded + +dqqua740 quantize -1.00E-6143 1e-6144 -> -1.0E-6143 Rounded +dqqua741 quantize -0.1E-6143 1e-6144 -> -1E-6144 Subnormal +dqqua742 quantize -0.10E-6143 1e-6144 -> -1E-6144 Subnormal Rounded +dqqua743 quantize -0.100E-6143 1e-6144 -> -1E-6144 Subnormal Rounded +dqqua744 quantize -0.01E-6143 1e-6144 -> -0E-6144 Inexact Rounded +-- next is rounded to Emin +dqqua745 quantize -0.999E-6143 1e-6144 -> -1.0E-6143 Inexact Rounded +dqqua746 quantize -0.099E-6143 1e-6144 -> -1E-6144 Inexact Rounded Subnormal +dqqua747 quantize -0.009E-6143 1e-6144 -> -0E-6144 Inexact Rounded +dqqua748 quantize -0.001E-6143 1e-6144 -> -0E-6144 Inexact Rounded +dqqua749 quantize -0.0001E-6143 1e-6144 -> -0E-6144 Inexact Rounded + +dqqua750 quantize -1.00E-6143 1e-6145 -> -1.00E-6143 +dqqua751 quantize -0.1E-6143 1e-6145 -> -1.0E-6144 Subnormal +dqqua752 quantize -0.10E-6143 1e-6145 -> -1.0E-6144 Subnormal +dqqua753 quantize -0.100E-6143 1e-6145 -> -1.0E-6144 Subnormal Rounded +dqqua754 quantize -0.01E-6143 1e-6145 -> -1E-6145 Subnormal +-- next is rounded to Emin +dqqua755 quantize -0.999E-6143 1e-6145 -> -1.00E-6143 Inexact Rounded +dqqua756 quantize -0.099E-6143 1e-6145 -> -1.0E-6144 Inexact Rounded Subnormal +dqqua757 quantize -0.009E-6143 1e-6145 -> -1E-6145 Inexact Rounded Subnormal +dqqua758 quantize -0.001E-6143 1e-6145 -> -0E-6145 Inexact Rounded +dqqua759 quantize -0.0001E-6143 1e-6145 -> -0E-6145 Inexact Rounded + +dqqua760 quantize -1.00E-6143 1e-6146 -> -1.000E-6143 +dqqua761 quantize -0.1E-6143 1e-6146 -> -1.00E-6144 Subnormal +dqqua762 quantize -0.10E-6143 1e-6146 -> -1.00E-6144 Subnormal +dqqua763 quantize -0.100E-6143 1e-6146 -> -1.00E-6144 Subnormal +dqqua764 quantize -0.01E-6143 1e-6146 -> -1.0E-6145 Subnormal +dqqua765 quantize -0.999E-6143 1e-6146 -> -9.99E-6144 Subnormal +dqqua766 quantize -0.099E-6143 1e-6146 -> -9.9E-6145 Subnormal +dqqua767 quantize -0.009E-6143 1e-6146 -> -9E-6146 Subnormal +dqqua768 quantize -0.001E-6143 1e-6146 -> -1E-6146 Subnormal +dqqua769 quantize -0.0001E-6143 1e-6146 -> -0E-6146 Inexact Rounded + +-- More from Fung Lee +-- the next four would appear to be in error, but they are misleading (the +-- operands will be clamped to a lower exponent) and so are omitted +-- dqqua1021 quantize 8.666666666666000E+6144 1.000000000000000E+6144 -> 8.666666666666000000000000000000000E+6144 Clamped +-- dqqua1022 quantize -8.666666666666000E+6144 1.000000000000000E+6144 -> -8.666666666666000000000000000000000E+6144 Clamped +-- dqqua1027 quantize 8.666666666666000E+323 1E+31 -> NaN Invalid_operation +-- dqqua1030 quantize 8.66666666E+3 1E+3 -> 9E+3 Inexact Rounded + +-- Int and uInt32 edge values for testing conversions +dqqua1040 quantize -2147483646 0 -> -2147483646 +dqqua1041 quantize -2147483647 0 -> -2147483647 +dqqua1042 quantize -2147483648 0 -> -2147483648 +dqqua1043 quantize -2147483649 0 -> -2147483649 +dqqua1044 quantize 2147483646 0 -> 2147483646 +dqqua1045 quantize 2147483647 0 -> 2147483647 +dqqua1046 quantize 2147483648 0 -> 2147483648 +dqqua1047 quantize 2147483649 0 -> 2147483649 +dqqua1048 quantize 4294967294 0 -> 4294967294 +dqqua1049 quantize 4294967295 0 -> 4294967295 +dqqua1050 quantize 4294967296 0 -> 4294967296 +dqqua1051 quantize 4294967297 0 -> 4294967297 + +-- Rounding swathe +rounding: half_even +dqqua1100 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1101 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1102 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1103 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +dqqua1104 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1105 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua1106 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1107 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1108 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1109 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: half_up +dqqua1200 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1201 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1202 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1203 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +dqqua1204 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1205 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +dqqua1206 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1207 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1208 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1209 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: half_down +dqqua1300 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1301 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1302 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1303 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +dqqua1304 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1305 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua1306 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1307 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1308 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1309 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: up +dqqua1400 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1401 quantize 1.2301 1.00 -> 1.24 Inexact Rounded +dqqua1402 quantize 1.2310 1.00 -> 1.24 Inexact Rounded +dqqua1403 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +dqqua1404 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1405 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +dqqua1406 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1407 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1408 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1409 quantize 1.2399 1.00 -> 1.24 Inexact Rounded +dqqua1411 quantize -1.2399 1.00 -> -1.24 Inexact Rounded + +rounding: down +dqqua1500 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1501 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1502 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1503 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +dqqua1504 quantize 1.2351 1.00 -> 1.23 Inexact Rounded +dqqua1505 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua1506 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +dqqua1507 quantize 1.2360 1.00 -> 1.23 Inexact Rounded +dqqua1508 quantize 1.2370 1.00 -> 1.23 Inexact Rounded +dqqua1509 quantize 1.2399 1.00 -> 1.23 Inexact Rounded +dqqua1511 quantize -1.2399 1.00 -> -1.23 Inexact Rounded + +rounding: ceiling +dqqua1600 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1601 quantize 1.2301 1.00 -> 1.24 Inexact Rounded +dqqua1602 quantize 1.2310 1.00 -> 1.24 Inexact Rounded +dqqua1603 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +dqqua1604 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1605 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +dqqua1606 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1607 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1608 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1609 quantize 1.2399 1.00 -> 1.24 Inexact Rounded +dqqua1611 quantize -1.2399 1.00 -> -1.23 Inexact Rounded + +rounding: floor +dqqua1700 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1701 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1702 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1703 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +dqqua1704 quantize 1.2351 1.00 -> 1.23 Inexact Rounded +dqqua1705 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua1706 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +dqqua1707 quantize 1.2360 1.00 -> 1.23 Inexact Rounded +dqqua1708 quantize 1.2370 1.00 -> 1.23 Inexact Rounded +dqqua1709 quantize 1.2399 1.00 -> 1.23 Inexact Rounded +dqqua1711 quantize -1.2399 1.00 -> -1.24 Inexact Rounded + +rounding: 05up +dqqua1800 quantize 1.2000 1.00 -> 1.20 Rounded +dqqua1801 quantize 1.2001 1.00 -> 1.21 Inexact Rounded +dqqua1802 quantize 1.2010 1.00 -> 1.21 Inexact Rounded +dqqua1803 quantize 1.2050 1.00 -> 1.21 Inexact Rounded +dqqua1804 quantize 1.2051 1.00 -> 1.21 Inexact Rounded +dqqua1807 quantize 1.2060 1.00 -> 1.21 Inexact Rounded +dqqua1808 quantize 1.2070 1.00 -> 1.21 Inexact Rounded +dqqua1809 quantize 1.2099 1.00 -> 1.21 Inexact Rounded +dqqua1811 quantize -1.2099 1.00 -> -1.21 Inexact Rounded + +dqqua1900 quantize 1.2100 1.00 -> 1.21 Rounded +dqqua1901 quantize 1.2101 1.00 -> 1.21 Inexact Rounded +dqqua1902 quantize 1.2110 1.00 -> 1.21 Inexact Rounded +dqqua1903 quantize 1.2150 1.00 -> 1.21 Inexact Rounded +dqqua1904 quantize 1.2151 1.00 -> 1.21 Inexact Rounded +dqqua1907 quantize 1.2160 1.00 -> 1.21 Inexact Rounded +dqqua1908 quantize 1.2170 1.00 -> 1.21 Inexact Rounded +dqqua1909 quantize 1.2199 1.00 -> 1.21 Inexact Rounded +dqqua1911 quantize -1.2199 1.00 -> -1.21 Inexact Rounded + +dqqua2000 quantize 1.2400 1.00 -> 1.24 Rounded +dqqua2001 quantize 1.2401 1.00 -> 1.24 Inexact Rounded +dqqua2002 quantize 1.2410 1.00 -> 1.24 Inexact Rounded +dqqua2003 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua2004 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +dqqua2007 quantize 1.2460 1.00 -> 1.24 Inexact Rounded +dqqua2008 quantize 1.2470 1.00 -> 1.24 Inexact Rounded +dqqua2009 quantize 1.2499 1.00 -> 1.24 Inexact Rounded +dqqua2011 quantize -1.2499 1.00 -> -1.24 Inexact Rounded + +dqqua2100 quantize 1.2500 1.00 -> 1.25 Rounded +dqqua2101 quantize 1.2501 1.00 -> 1.26 Inexact Rounded +dqqua2102 quantize 1.2510 1.00 -> 1.26 Inexact Rounded +dqqua2103 quantize 1.2550 1.00 -> 1.26 Inexact Rounded +dqqua2104 quantize 1.2551 1.00 -> 1.26 Inexact Rounded +dqqua2107 quantize 1.2560 1.00 -> 1.26 Inexact Rounded +dqqua2108 quantize 1.2570 1.00 -> 1.26 Inexact Rounded +dqqua2109 quantize 1.2599 1.00 -> 1.26 Inexact Rounded +dqqua2111 quantize -1.2599 1.00 -> -1.26 Inexact Rounded + +dqqua2200 quantize 1.2600 1.00 -> 1.26 Rounded +dqqua2201 quantize 1.2601 1.00 -> 1.26 Inexact Rounded +dqqua2202 quantize 1.2610 1.00 -> 1.26 Inexact Rounded +dqqua2203 quantize 1.2650 1.00 -> 1.26 Inexact Rounded +dqqua2204 quantize 1.2651 1.00 -> 1.26 Inexact Rounded +dqqua2207 quantize 1.2660 1.00 -> 1.26 Inexact Rounded +dqqua2208 quantize 1.2670 1.00 -> 1.26 Inexact Rounded +dqqua2209 quantize 1.2699 1.00 -> 1.26 Inexact Rounded +dqqua2211 quantize -1.2699 1.00 -> -1.26 Inexact Rounded + +dqqua2300 quantize 1.2900 1.00 -> 1.29 Rounded +dqqua2301 quantize 1.2901 1.00 -> 1.29 Inexact Rounded +dqqua2302 quantize 1.2910 1.00 -> 1.29 Inexact Rounded +dqqua2303 quantize 1.2950 1.00 -> 1.29 Inexact Rounded +dqqua2304 quantize 1.2951 1.00 -> 1.29 Inexact Rounded +dqqua2307 quantize 1.2960 1.00 -> 1.29 Inexact Rounded +dqqua2308 quantize 1.2970 1.00 -> 1.29 Inexact Rounded +dqqua2309 quantize 1.2999 1.00 -> 1.29 Inexact Rounded +dqqua2311 quantize -1.2999 1.00 -> -1.29 Inexact Rounded + +-- Null tests +dqqua998 quantize 10 # -> NaN Invalid_operation +dqqua999 quantize # 1e10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqReduce.decTest b/Lib/test/decimaltestdata/dqReduce.decTest index 236574f4c7a..5635e6b70f3 100644 --- a/Lib/test/decimaltestdata/dqReduce.decTest +++ b/Lib/test/decimaltestdata/dqReduce.decTest @@ -1,183 +1,183 @@ ------------------------------------------------------------------------- --- dqReduce.decTest -- remove trailing zeros from a decQuad -- --- Copyright (c) IBM Corporation, 2003, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- - -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqred001 reduce '1' -> '1' -dqred002 reduce '-1' -> '-1' -dqred003 reduce '1.00' -> '1' -dqred004 reduce '-1.00' -> '-1' -dqred005 reduce '0' -> '0' -dqred006 reduce '0.00' -> '0' -dqred007 reduce '00.0' -> '0' -dqred008 reduce '00.00' -> '0' -dqred009 reduce '00' -> '0' -dqred010 reduce '0E+1' -> '0' -dqred011 reduce '0E+5' -> '0' - -dqred012 reduce '-2' -> '-2' -dqred013 reduce '2' -> '2' -dqred014 reduce '-2.00' -> '-2' -dqred015 reduce '2.00' -> '2' -dqred016 reduce '-0' -> '-0' -dqred017 reduce '-0.00' -> '-0' -dqred018 reduce '-00.0' -> '-0' -dqred019 reduce '-00.00' -> '-0' -dqred020 reduce '-00' -> '-0' -dqred021 reduce '-0E+5' -> '-0' -dqred022 reduce '-0E+1' -> '-0' - -dqred030 reduce '+0.1' -> '0.1' -dqred031 reduce '-0.1' -> '-0.1' -dqred032 reduce '+0.01' -> '0.01' -dqred033 reduce '-0.01' -> '-0.01' -dqred034 reduce '+0.001' -> '0.001' -dqred035 reduce '-0.001' -> '-0.001' -dqred036 reduce '+0.000001' -> '0.000001' -dqred037 reduce '-0.000001' -> '-0.000001' -dqred038 reduce '+0.000000000001' -> '1E-12' -dqred039 reduce '-0.000000000001' -> '-1E-12' - -dqred041 reduce 1.1 -> 1.1 -dqred042 reduce 1.10 -> 1.1 -dqred043 reduce 1.100 -> 1.1 -dqred044 reduce 1.110 -> 1.11 -dqred045 reduce -1.1 -> -1.1 -dqred046 reduce -1.10 -> -1.1 -dqred047 reduce -1.100 -> -1.1 -dqred048 reduce -1.110 -> -1.11 -dqred049 reduce 9.9 -> 9.9 -dqred050 reduce 9.90 -> 9.9 -dqred051 reduce 9.900 -> 9.9 -dqred052 reduce 9.990 -> 9.99 -dqred053 reduce -9.9 -> -9.9 -dqred054 reduce -9.90 -> -9.9 -dqred055 reduce -9.900 -> -9.9 -dqred056 reduce -9.990 -> -9.99 - --- some trailing fractional zeros with zeros in units -dqred060 reduce 10.0 -> 1E+1 -dqred061 reduce 10.00 -> 1E+1 -dqred062 reduce 100.0 -> 1E+2 -dqred063 reduce 100.00 -> 1E+2 -dqred064 reduce 1.1000E+3 -> 1.1E+3 -dqred065 reduce 1.10000E+3 -> 1.1E+3 -dqred066 reduce -10.0 -> -1E+1 -dqred067 reduce -10.00 -> -1E+1 -dqred068 reduce -100.0 -> -1E+2 -dqred069 reduce -100.00 -> -1E+2 -dqred070 reduce -1.1000E+3 -> -1.1E+3 -dqred071 reduce -1.10000E+3 -> -1.1E+3 - --- some insignificant trailing zeros with positive exponent -dqred080 reduce 10E+1 -> 1E+2 -dqred081 reduce 100E+1 -> 1E+3 -dqred082 reduce 1.0E+2 -> 1E+2 -dqred083 reduce 1.0E+3 -> 1E+3 -dqred084 reduce 1.1E+3 -> 1.1E+3 -dqred085 reduce 1.00E+3 -> 1E+3 -dqred086 reduce 1.10E+3 -> 1.1E+3 -dqred087 reduce -10E+1 -> -1E+2 -dqred088 reduce -100E+1 -> -1E+3 -dqred089 reduce -1.0E+2 -> -1E+2 -dqred090 reduce -1.0E+3 -> -1E+3 -dqred091 reduce -1.1E+3 -> -1.1E+3 -dqred092 reduce -1.00E+3 -> -1E+3 -dqred093 reduce -1.10E+3 -> -1.1E+3 - --- some significant trailing zeros, were we to be trimming -dqred100 reduce 11 -> 11 -dqred101 reduce 10 -> 1E+1 -dqred102 reduce 10. -> 1E+1 -dqred103 reduce 1.1E+1 -> 11 -dqred104 reduce 1.0E+1 -> 1E+1 -dqred105 reduce 1.10E+2 -> 1.1E+2 -dqred106 reduce 1.00E+2 -> 1E+2 -dqred107 reduce 1.100E+3 -> 1.1E+3 -dqred108 reduce 1.000E+3 -> 1E+3 -dqred109 reduce 1.000000E+6 -> 1E+6 -dqred110 reduce -11 -> -11 -dqred111 reduce -10 -> -1E+1 -dqred112 reduce -10. -> -1E+1 -dqred113 reduce -1.1E+1 -> -11 -dqred114 reduce -1.0E+1 -> -1E+1 -dqred115 reduce -1.10E+2 -> -1.1E+2 -dqred116 reduce -1.00E+2 -> -1E+2 -dqred117 reduce -1.100E+3 -> -1.1E+3 -dqred118 reduce -1.000E+3 -> -1E+3 -dqred119 reduce -1.00000E+5 -> -1E+5 -dqred120 reduce -1.000000E+6 -> -1E+6 -dqred121 reduce -10.00000E+6 -> -1E+7 -dqred122 reduce -100.0000E+6 -> -1E+8 -dqred123 reduce -1000.000E+6 -> -1E+9 -dqred124 reduce -10000.00E+6 -> -1E+10 -dqred125 reduce -100000.0E+6 -> -1E+11 -dqred126 reduce -1000000.E+6 -> -1E+12 - --- examples from decArith -dqred140 reduce '2.1' -> '2.1' -dqred141 reduce '-2.0' -> '-2' -dqred142 reduce '1.200' -> '1.2' -dqred143 reduce '-120' -> '-1.2E+2' -dqred144 reduce '120.00' -> '1.2E+2' -dqred145 reduce '0.00' -> '0' - --- Nmax, Nmin, Ntiny --- note origami effect on some of these -dqred151 reduce 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqred152 reduce 9.999999999999999999999999000000000E+6140 -> 9.99999999999999999999999900000E+6140 -dqred153 reduce 9.999999999999999999999999999990000E+6144 -> 9.999999999999999999999999999990000E+6144 -dqred154 reduce 1E-6143 -> 1E-6143 -dqred155 reduce 1.000000000000000000000000000000000E-6143 -> 1E-6143 -dqred156 reduce 2.000E-6173 -> 2E-6173 Subnormal -dqred157 reduce 1E-6176 -> 1E-6176 Subnormal - -dqred161 reduce -1E-6176 -> -1E-6176 Subnormal -dqred162 reduce -2.000E-6173 -> -2E-6173 Subnormal -dqred163 reduce -1.000000000000000000000000000000000E-6143 -> -1E-6143 -dqred164 reduce -1E-6143 -> -1E-6143 -dqred165 reduce -9.999999999999999999999999000000000E+6140 -> -9.99999999999999999999999900000E+6140 -dqred166 reduce -9.999999999999999999999999999990000E+6144 -> -9.999999999999999999999999999990000E+6144 -dqred167 reduce -9.999999999999999999999999999999990E+6144 -> -9.999999999999999999999999999999990E+6144 -dqred168 reduce -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqred169 reduce -9.999999999999999999999999999999990E+6144 -> -9.999999999999999999999999999999990E+6144 - - --- specials (reduce does not affect payload) -dqred820 reduce 'Inf' -> 'Infinity' -dqred821 reduce '-Inf' -> '-Infinity' -dqred822 reduce NaN -> NaN -dqred823 reduce sNaN -> NaN Invalid_operation -dqred824 reduce NaN101 -> NaN101 -dqred825 reduce sNaN010 -> NaN10 Invalid_operation -dqred827 reduce -NaN -> -NaN -dqred828 reduce -sNaN -> -NaN Invalid_operation -dqred829 reduce -NaN101 -> -NaN101 -dqred830 reduce -sNaN010 -> -NaN10 Invalid_operation - --- Null test -dqred900 reduce # -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqReduce.decTest -- remove trailing zeros from a decQuad -- +-- Copyright (c) IBM Corporation, 2003, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ + +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqred001 reduce '1' -> '1' +dqred002 reduce '-1' -> '-1' +dqred003 reduce '1.00' -> '1' +dqred004 reduce '-1.00' -> '-1' +dqred005 reduce '0' -> '0' +dqred006 reduce '0.00' -> '0' +dqred007 reduce '00.0' -> '0' +dqred008 reduce '00.00' -> '0' +dqred009 reduce '00' -> '0' +dqred010 reduce '0E+1' -> '0' +dqred011 reduce '0E+5' -> '0' + +dqred012 reduce '-2' -> '-2' +dqred013 reduce '2' -> '2' +dqred014 reduce '-2.00' -> '-2' +dqred015 reduce '2.00' -> '2' +dqred016 reduce '-0' -> '-0' +dqred017 reduce '-0.00' -> '-0' +dqred018 reduce '-00.0' -> '-0' +dqred019 reduce '-00.00' -> '-0' +dqred020 reduce '-00' -> '-0' +dqred021 reduce '-0E+5' -> '-0' +dqred022 reduce '-0E+1' -> '-0' + +dqred030 reduce '+0.1' -> '0.1' +dqred031 reduce '-0.1' -> '-0.1' +dqred032 reduce '+0.01' -> '0.01' +dqred033 reduce '-0.01' -> '-0.01' +dqred034 reduce '+0.001' -> '0.001' +dqred035 reduce '-0.001' -> '-0.001' +dqred036 reduce '+0.000001' -> '0.000001' +dqred037 reduce '-0.000001' -> '-0.000001' +dqred038 reduce '+0.000000000001' -> '1E-12' +dqred039 reduce '-0.000000000001' -> '-1E-12' + +dqred041 reduce 1.1 -> 1.1 +dqred042 reduce 1.10 -> 1.1 +dqred043 reduce 1.100 -> 1.1 +dqred044 reduce 1.110 -> 1.11 +dqred045 reduce -1.1 -> -1.1 +dqred046 reduce -1.10 -> -1.1 +dqred047 reduce -1.100 -> -1.1 +dqred048 reduce -1.110 -> -1.11 +dqred049 reduce 9.9 -> 9.9 +dqred050 reduce 9.90 -> 9.9 +dqred051 reduce 9.900 -> 9.9 +dqred052 reduce 9.990 -> 9.99 +dqred053 reduce -9.9 -> -9.9 +dqred054 reduce -9.90 -> -9.9 +dqred055 reduce -9.900 -> -9.9 +dqred056 reduce -9.990 -> -9.99 + +-- some trailing fractional zeros with zeros in units +dqred060 reduce 10.0 -> 1E+1 +dqred061 reduce 10.00 -> 1E+1 +dqred062 reduce 100.0 -> 1E+2 +dqred063 reduce 100.00 -> 1E+2 +dqred064 reduce 1.1000E+3 -> 1.1E+3 +dqred065 reduce 1.10000E+3 -> 1.1E+3 +dqred066 reduce -10.0 -> -1E+1 +dqred067 reduce -10.00 -> -1E+1 +dqred068 reduce -100.0 -> -1E+2 +dqred069 reduce -100.00 -> -1E+2 +dqred070 reduce -1.1000E+3 -> -1.1E+3 +dqred071 reduce -1.10000E+3 -> -1.1E+3 + +-- some insignificant trailing zeros with positive exponent +dqred080 reduce 10E+1 -> 1E+2 +dqred081 reduce 100E+1 -> 1E+3 +dqred082 reduce 1.0E+2 -> 1E+2 +dqred083 reduce 1.0E+3 -> 1E+3 +dqred084 reduce 1.1E+3 -> 1.1E+3 +dqred085 reduce 1.00E+3 -> 1E+3 +dqred086 reduce 1.10E+3 -> 1.1E+3 +dqred087 reduce -10E+1 -> -1E+2 +dqred088 reduce -100E+1 -> -1E+3 +dqred089 reduce -1.0E+2 -> -1E+2 +dqred090 reduce -1.0E+3 -> -1E+3 +dqred091 reduce -1.1E+3 -> -1.1E+3 +dqred092 reduce -1.00E+3 -> -1E+3 +dqred093 reduce -1.10E+3 -> -1.1E+3 + +-- some significant trailing zeros, were we to be trimming +dqred100 reduce 11 -> 11 +dqred101 reduce 10 -> 1E+1 +dqred102 reduce 10. -> 1E+1 +dqred103 reduce 1.1E+1 -> 11 +dqred104 reduce 1.0E+1 -> 1E+1 +dqred105 reduce 1.10E+2 -> 1.1E+2 +dqred106 reduce 1.00E+2 -> 1E+2 +dqred107 reduce 1.100E+3 -> 1.1E+3 +dqred108 reduce 1.000E+3 -> 1E+3 +dqred109 reduce 1.000000E+6 -> 1E+6 +dqred110 reduce -11 -> -11 +dqred111 reduce -10 -> -1E+1 +dqred112 reduce -10. -> -1E+1 +dqred113 reduce -1.1E+1 -> -11 +dqred114 reduce -1.0E+1 -> -1E+1 +dqred115 reduce -1.10E+2 -> -1.1E+2 +dqred116 reduce -1.00E+2 -> -1E+2 +dqred117 reduce -1.100E+3 -> -1.1E+3 +dqred118 reduce -1.000E+3 -> -1E+3 +dqred119 reduce -1.00000E+5 -> -1E+5 +dqred120 reduce -1.000000E+6 -> -1E+6 +dqred121 reduce -10.00000E+6 -> -1E+7 +dqred122 reduce -100.0000E+6 -> -1E+8 +dqred123 reduce -1000.000E+6 -> -1E+9 +dqred124 reduce -10000.00E+6 -> -1E+10 +dqred125 reduce -100000.0E+6 -> -1E+11 +dqred126 reduce -1000000.E+6 -> -1E+12 + +-- examples from decArith +dqred140 reduce '2.1' -> '2.1' +dqred141 reduce '-2.0' -> '-2' +dqred142 reduce '1.200' -> '1.2' +dqred143 reduce '-120' -> '-1.2E+2' +dqred144 reduce '120.00' -> '1.2E+2' +dqred145 reduce '0.00' -> '0' + +-- Nmax, Nmin, Ntiny +-- note origami effect on some of these +dqred151 reduce 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqred152 reduce 9.999999999999999999999999000000000E+6140 -> 9.99999999999999999999999900000E+6140 +dqred153 reduce 9.999999999999999999999999999990000E+6144 -> 9.999999999999999999999999999990000E+6144 +dqred154 reduce 1E-6143 -> 1E-6143 +dqred155 reduce 1.000000000000000000000000000000000E-6143 -> 1E-6143 +dqred156 reduce 2.000E-6173 -> 2E-6173 Subnormal +dqred157 reduce 1E-6176 -> 1E-6176 Subnormal + +dqred161 reduce -1E-6176 -> -1E-6176 Subnormal +dqred162 reduce -2.000E-6173 -> -2E-6173 Subnormal +dqred163 reduce -1.000000000000000000000000000000000E-6143 -> -1E-6143 +dqred164 reduce -1E-6143 -> -1E-6143 +dqred165 reduce -9.999999999999999999999999000000000E+6140 -> -9.99999999999999999999999900000E+6140 +dqred166 reduce -9.999999999999999999999999999990000E+6144 -> -9.999999999999999999999999999990000E+6144 +dqred167 reduce -9.999999999999999999999999999999990E+6144 -> -9.999999999999999999999999999999990E+6144 +dqred168 reduce -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqred169 reduce -9.999999999999999999999999999999990E+6144 -> -9.999999999999999999999999999999990E+6144 + + +-- specials (reduce does not affect payload) +dqred820 reduce 'Inf' -> 'Infinity' +dqred821 reduce '-Inf' -> '-Infinity' +dqred822 reduce NaN -> NaN +dqred823 reduce sNaN -> NaN Invalid_operation +dqred824 reduce NaN101 -> NaN101 +dqred825 reduce sNaN010 -> NaN10 Invalid_operation +dqred827 reduce -NaN -> -NaN +dqred828 reduce -sNaN -> -NaN Invalid_operation +dqred829 reduce -NaN101 -> -NaN101 +dqred830 reduce -sNaN010 -> -NaN10 Invalid_operation + +-- Null test +dqred900 reduce # -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqRemainder.decTest b/Lib/test/decimaltestdata/dqRemainder.decTest index e0aaca3747e..ae594947077 100644 --- a/Lib/test/decimaltestdata/dqRemainder.decTest +++ b/Lib/test/decimaltestdata/dqRemainder.decTest @@ -1,597 +1,597 @@ ------------------------------------------------------------------------- --- dqRemainder.decTest -- decQuad remainder -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks (as base, above) -dqrem001 remainder 1 1 -> 0 -dqrem002 remainder 2 1 -> 0 -dqrem003 remainder 1 2 -> 1 -dqrem004 remainder 2 2 -> 0 -dqrem005 remainder 0 1 -> 0 -dqrem006 remainder 0 2 -> 0 -dqrem007 remainder 1 3 -> 1 -dqrem008 remainder 2 3 -> 2 -dqrem009 remainder 3 3 -> 0 - -dqrem010 remainder 2.4 1 -> 0.4 -dqrem011 remainder 2.4 -1 -> 0.4 -dqrem012 remainder -2.4 1 -> -0.4 -dqrem013 remainder -2.4 -1 -> -0.4 -dqrem014 remainder 2.40 1 -> 0.40 -dqrem015 remainder 2.400 1 -> 0.400 -dqrem016 remainder 2.4 2 -> 0.4 -dqrem017 remainder 2.400 2 -> 0.400 -dqrem018 remainder 2. 2 -> 0 -dqrem019 remainder 20 20 -> 0 - -dqrem020 remainder 187 187 -> 0 -dqrem021 remainder 5 2 -> 1 -dqrem022 remainder 5 2.0 -> 1.0 -dqrem023 remainder 5 2.000 -> 1.000 -dqrem024 remainder 5 0.200 -> 0.000 -dqrem025 remainder 5 0.200 -> 0.000 - -dqrem030 remainder 1 2 -> 1 -dqrem031 remainder 1 4 -> 1 -dqrem032 remainder 1 8 -> 1 - -dqrem033 remainder 1 16 -> 1 -dqrem034 remainder 1 32 -> 1 -dqrem035 remainder 1 64 -> 1 -dqrem040 remainder 1 -2 -> 1 -dqrem041 remainder 1 -4 -> 1 -dqrem042 remainder 1 -8 -> 1 -dqrem043 remainder 1 -16 -> 1 -dqrem044 remainder 1 -32 -> 1 -dqrem045 remainder 1 -64 -> 1 -dqrem050 remainder -1 2 -> -1 -dqrem051 remainder -1 4 -> -1 -dqrem052 remainder -1 8 -> -1 -dqrem053 remainder -1 16 -> -1 -dqrem054 remainder -1 32 -> -1 -dqrem055 remainder -1 64 -> -1 -dqrem060 remainder -1 -2 -> -1 -dqrem061 remainder -1 -4 -> -1 -dqrem062 remainder -1 -8 -> -1 -dqrem063 remainder -1 -16 -> -1 -dqrem064 remainder -1 -32 -> -1 -dqrem065 remainder -1 -64 -> -1 - -dqrem066 remainder 999999999 1 -> 0 -dqrem067 remainder 999999999.4 1 -> 0.4 -dqrem068 remainder 999999999.5 1 -> 0.5 -dqrem069 remainder 999999999.9 1 -> 0.9 -dqrem070 remainder 999999999.999 1 -> 0.999 -dqrem071 remainder 999999.999999 1 -> 0.999999 -dqrem072 remainder 9 1 -> 0 - -dqrem080 remainder 0. 1 -> 0 -dqrem081 remainder .0 1 -> 0.0 -dqrem082 remainder 0.00 1 -> 0.00 -dqrem083 remainder 0.00E+9 1 -> 0 -dqrem084 remainder 0.00E+3 1 -> 0 -dqrem085 remainder 0.00E+2 1 -> 0 -dqrem086 remainder 0.00E+1 1 -> 0.0 -dqrem087 remainder 0.00E+0 1 -> 0.00 -dqrem088 remainder 0.00E-0 1 -> 0.00 -dqrem089 remainder 0.00E-1 1 -> 0.000 -dqrem090 remainder 0.00E-2 1 -> 0.0000 -dqrem091 remainder 0.00E-3 1 -> 0.00000 -dqrem092 remainder 0.00E-4 1 -> 0.000000 -dqrem093 remainder 0.00E-5 1 -> 0E-7 -dqrem094 remainder 0.00E-6 1 -> 0E-8 -dqrem095 remainder 0.0000E-50 1 -> 0E-54 - --- Various flavours of remainder by 0 -dqrem101 remainder 0 0 -> NaN Division_undefined -dqrem102 remainder 0 -0 -> NaN Division_undefined -dqrem103 remainder -0 0 -> NaN Division_undefined -dqrem104 remainder -0 -0 -> NaN Division_undefined -dqrem105 remainder 0.0E5 0 -> NaN Division_undefined -dqrem106 remainder 0.000 0 -> NaN Division_undefined --- [Some think this next group should be Division_by_zero exception, but --- IEEE 854 is explicit that it is Invalid operation .. for --- remainder-near, anyway] -dqrem107 remainder 0.0001 0 -> NaN Invalid_operation -dqrem108 remainder 0.01 0 -> NaN Invalid_operation -dqrem109 remainder 0.1 0 -> NaN Invalid_operation -dqrem110 remainder 1 0 -> NaN Invalid_operation -dqrem111 remainder 1 0.0 -> NaN Invalid_operation -dqrem112 remainder 10 0.0 -> NaN Invalid_operation -dqrem113 remainder 1E+100 0.0 -> NaN Invalid_operation -dqrem114 remainder 1E+380 0 -> NaN Invalid_operation -dqrem115 remainder 0.0001 -0 -> NaN Invalid_operation -dqrem116 remainder 0.01 -0 -> NaN Invalid_operation -dqrem119 remainder 0.1 -0 -> NaN Invalid_operation -dqrem120 remainder 1 -0 -> NaN Invalid_operation -dqrem121 remainder 1 -0.0 -> NaN Invalid_operation -dqrem122 remainder 10 -0.0 -> NaN Invalid_operation -dqrem123 remainder 1E+100 -0.0 -> NaN Invalid_operation -dqrem124 remainder 1E+384 -0 -> NaN Invalid_operation --- and zeros on left -dqrem130 remainder 0 1 -> 0 -dqrem131 remainder 0 -1 -> 0 -dqrem132 remainder 0.0 1 -> 0.0 -dqrem133 remainder 0.0 -1 -> 0.0 -dqrem134 remainder -0 1 -> -0 -dqrem135 remainder -0 -1 -> -0 -dqrem136 remainder -0.0 1 -> -0.0 -dqrem137 remainder -0.0 -1 -> -0.0 - --- 0.5ers -dqrem143 remainder 0.5 2 -> 0.5 -dqrem144 remainder 0.5 2.1 -> 0.5 -dqrem145 remainder 0.5 2.01 -> 0.50 -dqrem146 remainder 0.5 2.001 -> 0.500 -dqrem147 remainder 0.50 2 -> 0.50 -dqrem148 remainder 0.50 2.01 -> 0.50 -dqrem149 remainder 0.50 2.001 -> 0.500 - --- steadies -dqrem150 remainder 1 1 -> 0 -dqrem151 remainder 1 2 -> 1 -dqrem152 remainder 1 3 -> 1 -dqrem153 remainder 1 4 -> 1 -dqrem154 remainder 1 5 -> 1 -dqrem155 remainder 1 6 -> 1 -dqrem156 remainder 1 7 -> 1 -dqrem157 remainder 1 8 -> 1 -dqrem158 remainder 1 9 -> 1 -dqrem159 remainder 1 10 -> 1 -dqrem160 remainder 1 1 -> 0 -dqrem161 remainder 2 1 -> 0 -dqrem162 remainder 3 1 -> 0 -dqrem163 remainder 4 1 -> 0 -dqrem164 remainder 5 1 -> 0 -dqrem165 remainder 6 1 -> 0 -dqrem166 remainder 7 1 -> 0 -dqrem167 remainder 8 1 -> 0 -dqrem168 remainder 9 1 -> 0 -dqrem169 remainder 10 1 -> 0 - --- some differences from remainderNear -dqrem171 remainder 0.4 1.020 -> 0.400 -dqrem172 remainder 0.50 1.020 -> 0.500 -dqrem173 remainder 0.51 1.020 -> 0.510 -dqrem174 remainder 0.52 1.020 -> 0.520 -dqrem175 remainder 0.6 1.020 -> 0.600 - --- More flavours of remainder by 0 -dqrem201 remainder 0 0 -> NaN Division_undefined -dqrem202 remainder 0.0E5 0 -> NaN Division_undefined -dqrem203 remainder 0.000 0 -> NaN Division_undefined -dqrem204 remainder 0.0001 0 -> NaN Invalid_operation -dqrem205 remainder 0.01 0 -> NaN Invalid_operation -dqrem206 remainder 0.1 0 -> NaN Invalid_operation -dqrem207 remainder 1 0 -> NaN Invalid_operation -dqrem208 remainder 1 0.0 -> NaN Invalid_operation -dqrem209 remainder 10 0.0 -> NaN Invalid_operation -dqrem210 remainder 1E+100 0.0 -> NaN Invalid_operation -dqrem211 remainder 1E+380 0 -> NaN Invalid_operation - --- some differences from remainderNear -dqrem231 remainder -0.4 1.020 -> -0.400 -dqrem232 remainder -0.50 1.020 -> -0.500 -dqrem233 remainder -0.51 1.020 -> -0.510 -dqrem234 remainder -0.52 1.020 -> -0.520 -dqrem235 remainder -0.6 1.020 -> -0.600 - --- high Xs -dqrem240 remainder 1E+2 1.00 -> 0.00 - --- dqrem3xx are from DiagBigDecimal -dqrem301 remainder 1 3 -> 1 -dqrem302 remainder 5 5 -> 0 -dqrem303 remainder 13 10 -> 3 -dqrem304 remainder 13 50 -> 13 -dqrem305 remainder 13 100 -> 13 -dqrem306 remainder 13 1000 -> 13 -dqrem307 remainder .13 1 -> 0.13 -dqrem308 remainder 0.133 1 -> 0.133 -dqrem309 remainder 0.1033 1 -> 0.1033 -dqrem310 remainder 1.033 1 -> 0.033 -dqrem311 remainder 10.33 1 -> 0.33 -dqrem312 remainder 10.33 10 -> 0.33 -dqrem313 remainder 103.3 1 -> 0.3 -dqrem314 remainder 133 10 -> 3 -dqrem315 remainder 1033 10 -> 3 -dqrem316 remainder 1033 50 -> 33 -dqrem317 remainder 101.0 3 -> 2.0 -dqrem318 remainder 102.0 3 -> 0.0 -dqrem319 remainder 103.0 3 -> 1.0 -dqrem320 remainder 2.40 1 -> 0.40 -dqrem321 remainder 2.400 1 -> 0.400 -dqrem322 remainder 2.4 1 -> 0.4 -dqrem323 remainder 2.4 2 -> 0.4 -dqrem324 remainder 2.400 2 -> 0.400 -dqrem325 remainder 1 0.3 -> 0.1 -dqrem326 remainder 1 0.30 -> 0.10 -dqrem327 remainder 1 0.300 -> 0.100 -dqrem328 remainder 1 0.3000 -> 0.1000 -dqrem329 remainder 1.0 0.3 -> 0.1 -dqrem330 remainder 1.00 0.3 -> 0.10 -dqrem331 remainder 1.000 0.3 -> 0.100 -dqrem332 remainder 1.0000 0.3 -> 0.1000 -dqrem333 remainder 0.5 2 -> 0.5 -dqrem334 remainder 0.5 2.1 -> 0.5 -dqrem335 remainder 0.5 2.01 -> 0.50 -dqrem336 remainder 0.5 2.001 -> 0.500 -dqrem337 remainder 0.50 2 -> 0.50 -dqrem338 remainder 0.50 2.01 -> 0.50 -dqrem339 remainder 0.50 2.001 -> 0.500 - -dqrem340 remainder 0.5 0.5000001 -> 0.5000000 -dqrem341 remainder 0.5 0.50000001 -> 0.50000000 -dqrem342 remainder 0.5 0.500000001 -> 0.500000000 -dqrem343 remainder 0.5 0.5000000001 -> 0.5000000000 -dqrem344 remainder 0.5 0.50000000001 -> 0.50000000000 -dqrem345 remainder 0.5 0.4999999 -> 1E-7 -dqrem346 remainder 0.5 0.49999999 -> 1E-8 -dqrem347 remainder 0.5 0.499999999 -> 1E-9 -dqrem348 remainder 0.5 0.4999999999 -> 1E-10 -dqrem349 remainder 0.5 0.49999999999 -> 1E-11 -dqrem350 remainder 0.5 0.499999999999 -> 1E-12 - -dqrem351 remainder 0.03 7 -> 0.03 -dqrem352 remainder 5 2 -> 1 -dqrem353 remainder 4.1 2 -> 0.1 -dqrem354 remainder 4.01 2 -> 0.01 -dqrem355 remainder 4.001 2 -> 0.001 -dqrem356 remainder 4.0001 2 -> 0.0001 -dqrem357 remainder 4.00001 2 -> 0.00001 -dqrem358 remainder 4.000001 2 -> 0.000001 -dqrem359 remainder 4.0000001 2 -> 1E-7 - -dqrem360 remainder 1.2 0.7345 -> 0.4655 -dqrem361 remainder 0.8 12 -> 0.8 -dqrem362 remainder 0.8 0.2 -> 0.0 -dqrem363 remainder 0.8 0.3 -> 0.2 -dqrem364 remainder 0.800 12 -> 0.800 -dqrem365 remainder 0.800 1.7 -> 0.800 -dqrem366 remainder 2.400 2 -> 0.400 - -dqrem371 remainder 2.400 2 -> 0.400 - -dqrem381 remainder 12345 1 -> 0 -dqrem382 remainder 12345 1.0001 -> 0.7657 -dqrem383 remainder 12345 1.001 -> 0.668 -dqrem384 remainder 12345 1.01 -> 0.78 -dqrem385 remainder 12345 1.1 -> 0.8 -dqrem386 remainder 12355 4 -> 3 -dqrem387 remainder 12345 4 -> 1 -dqrem388 remainder 12355 4.0001 -> 2.6912 -dqrem389 remainder 12345 4.0001 -> 0.6914 -dqrem390 remainder 12345 4.9 -> 1.9 -dqrem391 remainder 12345 4.99 -> 4.73 -dqrem392 remainder 12345 4.999 -> 2.469 -dqrem393 remainder 12345 4.9999 -> 0.2469 -dqrem394 remainder 12345 5 -> 0 -dqrem395 remainder 12345 5.0001 -> 4.7532 -dqrem396 remainder 12345 5.001 -> 2.532 -dqrem397 remainder 12345 5.01 -> 0.36 -dqrem398 remainder 12345 5.1 -> 3.0 - --- the nasty division-by-1 cases -dqrem401 remainder 0.5 1 -> 0.5 -dqrem402 remainder 0.55 1 -> 0.55 -dqrem403 remainder 0.555 1 -> 0.555 -dqrem404 remainder 0.5555 1 -> 0.5555 -dqrem405 remainder 0.55555 1 -> 0.55555 -dqrem406 remainder 0.555555 1 -> 0.555555 -dqrem407 remainder 0.5555555 1 -> 0.5555555 -dqrem408 remainder 0.55555555 1 -> 0.55555555 -dqrem409 remainder 0.555555555 1 -> 0.555555555 - --- folddowns -dqrem421 remainder 1E+6144 1 -> NaN Division_impossible -dqrem422 remainder 1E+6144 1E+6143 -> 0E+6111 Clamped -dqrem423 remainder 1E+6144 2E+6143 -> 0E+6111 Clamped -dqrem424 remainder 1E+6144 3E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped -dqrem425 remainder 1E+6144 4E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped -dqrem426 remainder 1E+6144 5E+6143 -> 0E+6111 Clamped -dqrem427 remainder 1E+6144 6E+6143 -> 4.00000000000000000000000000000000E+6143 Clamped -dqrem428 remainder 1E+6144 7E+6143 -> 3.00000000000000000000000000000000E+6143 Clamped -dqrem429 remainder 1E+6144 8E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped -dqrem430 remainder 1E+6144 9E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped --- tinies -dqrem431 remainder 1E-6175 1E-6176 -> 0E-6176 -dqrem432 remainder 1E-6175 2E-6176 -> 0E-6176 -dqrem433 remainder 1E-6175 3E-6176 -> 1E-6176 Subnormal -dqrem434 remainder 1E-6175 4E-6176 -> 2E-6176 Subnormal -dqrem435 remainder 1E-6175 5E-6176 -> 0E-6176 -dqrem436 remainder 1E-6175 6E-6176 -> 4E-6176 Subnormal -dqrem437 remainder 1E-6175 7E-6176 -> 3E-6176 Subnormal -dqrem438 remainder 1E-6175 8E-6176 -> 2E-6176 Subnormal -dqrem439 remainder 1E-6175 9E-6176 -> 1E-6176 Subnormal -dqrem440 remainder 1E-6175 10E-6176 -> 0E-6176 -dqrem441 remainder 1E-6175 11E-6176 -> 1.0E-6175 Subnormal -dqrem442 remainder 100E-6175 11E-6176 -> 1.0E-6175 Subnormal -dqrem443 remainder 100E-6175 20E-6176 -> 0E-6176 -dqrem444 remainder 100E-6175 21E-6176 -> 1.3E-6175 Subnormal -dqrem445 remainder 100E-6175 30E-6176 -> 1.0E-6175 Subnormal - --- zero signs -dqrem650 remainder 1 1 -> 0 -dqrem651 remainder -1 1 -> -0 -dqrem652 remainder 1 -1 -> 0 -dqrem653 remainder -1 -1 -> -0 -dqrem654 remainder 0 1 -> 0 -dqrem655 remainder -0 1 -> -0 -dqrem656 remainder 0 -1 -> 0 -dqrem657 remainder -0 -1 -> -0 -dqrem658 remainder 0.00 1 -> 0.00 -dqrem659 remainder -0.00 1 -> -0.00 - --- Specials -dqrem680 remainder Inf -Inf -> NaN Invalid_operation -dqrem681 remainder Inf -1000 -> NaN Invalid_operation -dqrem682 remainder Inf -1 -> NaN Invalid_operation -dqrem683 remainder Inf 0 -> NaN Invalid_operation -dqrem684 remainder Inf -0 -> NaN Invalid_operation -dqrem685 remainder Inf 1 -> NaN Invalid_operation -dqrem686 remainder Inf 1000 -> NaN Invalid_operation -dqrem687 remainder Inf Inf -> NaN Invalid_operation -dqrem688 remainder -1000 Inf -> -1000 -dqrem689 remainder -Inf Inf -> NaN Invalid_operation -dqrem691 remainder -1 Inf -> -1 -dqrem692 remainder 0 Inf -> 0 -dqrem693 remainder -0 Inf -> -0 -dqrem694 remainder 1 Inf -> 1 -dqrem695 remainder 1000 Inf -> 1000 -dqrem696 remainder Inf Inf -> NaN Invalid_operation - -dqrem700 remainder -Inf -Inf -> NaN Invalid_operation -dqrem701 remainder -Inf -1000 -> NaN Invalid_operation -dqrem702 remainder -Inf -1 -> NaN Invalid_operation -dqrem703 remainder -Inf -0 -> NaN Invalid_operation -dqrem704 remainder -Inf 0 -> NaN Invalid_operation -dqrem705 remainder -Inf 1 -> NaN Invalid_operation -dqrem706 remainder -Inf 1000 -> NaN Invalid_operation -dqrem707 remainder -Inf Inf -> NaN Invalid_operation -dqrem708 remainder -Inf -Inf -> NaN Invalid_operation -dqrem709 remainder -1000 Inf -> -1000 -dqrem710 remainder -1 -Inf -> -1 -dqrem711 remainder -0 -Inf -> -0 -dqrem712 remainder 0 -Inf -> 0 -dqrem713 remainder 1 -Inf -> 1 -dqrem714 remainder 1000 -Inf -> 1000 -dqrem715 remainder Inf -Inf -> NaN Invalid_operation - -dqrem721 remainder NaN -Inf -> NaN -dqrem722 remainder NaN -1000 -> NaN -dqrem723 remainder NaN -1 -> NaN -dqrem724 remainder NaN -0 -> NaN -dqrem725 remainder -NaN 0 -> -NaN -dqrem726 remainder NaN 1 -> NaN -dqrem727 remainder NaN 1000 -> NaN -dqrem728 remainder NaN Inf -> NaN -dqrem729 remainder NaN -NaN -> NaN -dqrem730 remainder -Inf NaN -> NaN -dqrem731 remainder -1000 NaN -> NaN -dqrem732 remainder -1 NaN -> NaN -dqrem733 remainder -0 -NaN -> -NaN -dqrem734 remainder 0 NaN -> NaN -dqrem735 remainder 1 -NaN -> -NaN -dqrem736 remainder 1000 NaN -> NaN -dqrem737 remainder Inf NaN -> NaN - -dqrem741 remainder sNaN -Inf -> NaN Invalid_operation -dqrem742 remainder sNaN -1000 -> NaN Invalid_operation -dqrem743 remainder -sNaN -1 -> -NaN Invalid_operation -dqrem744 remainder sNaN -0 -> NaN Invalid_operation -dqrem745 remainder sNaN 0 -> NaN Invalid_operation -dqrem746 remainder sNaN 1 -> NaN Invalid_operation -dqrem747 remainder sNaN 1000 -> NaN Invalid_operation -dqrem749 remainder sNaN NaN -> NaN Invalid_operation -dqrem750 remainder sNaN sNaN -> NaN Invalid_operation -dqrem751 remainder NaN sNaN -> NaN Invalid_operation -dqrem752 remainder -Inf sNaN -> NaN Invalid_operation -dqrem753 remainder -1000 sNaN -> NaN Invalid_operation -dqrem754 remainder -1 sNaN -> NaN Invalid_operation -dqrem755 remainder -0 sNaN -> NaN Invalid_operation -dqrem756 remainder 0 sNaN -> NaN Invalid_operation -dqrem757 remainder 1 sNaN -> NaN Invalid_operation -dqrem758 remainder 1000 sNaN -> NaN Invalid_operation -dqrem759 remainder Inf -sNaN -> -NaN Invalid_operation - --- propagating NaNs -dqrem760 remainder NaN1 NaN7 -> NaN1 -dqrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation -dqrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation -dqrem763 remainder sNaN4 sNaN10 -> NaN4 Invalid_operation -dqrem764 remainder 15 NaN11 -> NaN11 -dqrem765 remainder NaN6 NaN12 -> NaN6 -dqrem766 remainder Inf NaN13 -> NaN13 -dqrem767 remainder NaN14 -Inf -> NaN14 -dqrem768 remainder 0 NaN15 -> NaN15 -dqrem769 remainder NaN16 -0 -> NaN16 - --- edge cases of impossible -dqrem770 remainder 1234568888888887777777777890123456 10 -> 6 -dqrem771 remainder 1234568888888887777777777890123456 1 -> 0 -dqrem772 remainder 1234568888888887777777777890123456 0.1 -> NaN Division_impossible -dqrem773 remainder 1234568888888887777777777890123456 0.01 -> NaN Division_impossible - --- long operand checks -dqrem801 remainder 12345678000 100 -> 0 -dqrem802 remainder 1 12345678000 -> 1 -dqrem803 remainder 1234567800 10 -> 0 -dqrem804 remainder 1 1234567800 -> 1 -dqrem805 remainder 1234567890 10 -> 0 -dqrem806 remainder 1 1234567890 -> 1 -dqrem807 remainder 1234567891 10 -> 1 -dqrem808 remainder 1 1234567891 -> 1 -dqrem809 remainder 12345678901 100 -> 1 -dqrem810 remainder 1 12345678901 -> 1 -dqrem811 remainder 1234567896 10 -> 6 -dqrem812 remainder 1 1234567896 -> 1 - -dqrem821 remainder 12345678000 100 -> 0 -dqrem822 remainder 1 12345678000 -> 1 -dqrem823 remainder 1234567800 10 -> 0 -dqrem824 remainder 1 1234567800 -> 1 -dqrem825 remainder 1234567890 10 -> 0 -dqrem826 remainder 1 1234567890 -> 1 -dqrem827 remainder 1234567891 10 -> 1 -dqrem828 remainder 1 1234567891 -> 1 -dqrem829 remainder 12345678901 100 -> 1 -dqrem830 remainder 1 12345678901 -> 1 -dqrem831 remainder 1234567896 10 -> 6 -dqrem832 remainder 1 1234567896 -> 1 - --- from divideint -dqrem840 remainder 100000000.0 1 -> 0.0 -dqrem841 remainder 100000000.4 1 -> 0.4 -dqrem842 remainder 100000000.5 1 -> 0.5 -dqrem843 remainder 100000000.9 1 -> 0.9 -dqrem844 remainder 100000000.999 1 -> 0.999 -dqrem850 remainder 100000003 5 -> 3 -dqrem851 remainder 10000003 5 -> 3 -dqrem852 remainder 1000003 5 -> 3 -dqrem853 remainder 100003 5 -> 3 -dqrem854 remainder 10003 5 -> 3 -dqrem855 remainder 1003 5 -> 3 -dqrem856 remainder 103 5 -> 3 -dqrem857 remainder 13 5 -> 3 -dqrem858 remainder 1 5 -> 1 - --- Vladimir's cases 1234567890123456 -dqrem860 remainder 123.0e1 1000000000000000 -> 1230 -dqrem861 remainder 1230 1000000000000000 -> 1230 -dqrem862 remainder 12.3e2 1000000000000000 -> 1230 -dqrem863 remainder 1.23e3 1000000000000000 -> 1230 -dqrem864 remainder 123e1 1000000000000000 -> 1230 -dqrem870 remainder 123e1 1000000000000000 -> 1230 -dqrem871 remainder 123e1 100000000000000 -> 1230 -dqrem872 remainder 123e1 10000000000000 -> 1230 -dqrem873 remainder 123e1 1000000000000 -> 1230 -dqrem874 remainder 123e1 100000000000 -> 1230 -dqrem875 remainder 123e1 10000000000 -> 1230 -dqrem876 remainder 123e1 1000000000 -> 1230 -dqrem877 remainder 123e1 100000000 -> 1230 -dqrem878 remainder 1230 100000000 -> 1230 -dqrem879 remainder 123e1 10000000 -> 1230 -dqrem880 remainder 123e1 1000000 -> 1230 -dqrem881 remainder 123e1 100000 -> 1230 -dqrem882 remainder 123e1 10000 -> 1230 -dqrem883 remainder 123e1 1000 -> 230 -dqrem884 remainder 123e1 100 -> 30 -dqrem885 remainder 123e1 10 -> 0 -dqrem886 remainder 123e1 1 -> 0 - -dqrem890 remainder 123e1 2000000000000000 -> 1230 -dqrem891 remainder 123e1 200000000000000 -> 1230 -dqrem892 remainder 123e1 20000000000000 -> 1230 -dqrem893 remainder 123e1 2000000000000 -> 1230 -dqrem894 remainder 123e1 200000000000 -> 1230 -dqrem895 remainder 123e1 20000000000 -> 1230 -dqrem896 remainder 123e1 2000000000 -> 1230 -dqrem897 remainder 123e1 200000000 -> 1230 -dqrem899 remainder 123e1 20000000 -> 1230 -dqrem900 remainder 123e1 2000000 -> 1230 -dqrem901 remainder 123e1 200000 -> 1230 -dqrem902 remainder 123e1 20000 -> 1230 -dqrem903 remainder 123e1 2000 -> 1230 -dqrem904 remainder 123e1 200 -> 30 -dqrem905 remainder 123e1 20 -> 10 -dqrem906 remainder 123e1 2 -> 0 - -dqrem910 remainder 123e1 5000000000000000 -> 1230 -dqrem911 remainder 123e1 500000000000000 -> 1230 -dqrem912 remainder 123e1 50000000000000 -> 1230 -dqrem913 remainder 123e1 5000000000000 -> 1230 -dqrem914 remainder 123e1 500000000000 -> 1230 -dqrem915 remainder 123e1 50000000000 -> 1230 -dqrem916 remainder 123e1 5000000000 -> 1230 -dqrem917 remainder 123e1 500000000 -> 1230 -dqrem919 remainder 123e1 50000000 -> 1230 -dqrem920 remainder 123e1 5000000 -> 1230 -dqrem921 remainder 123e1 500000 -> 1230 -dqrem922 remainder 123e1 50000 -> 1230 -dqrem923 remainder 123e1 5000 -> 1230 -dqrem924 remainder 123e1 500 -> 230 -dqrem925 remainder 123e1 50 -> 30 -dqrem926 remainder 123e1 5 -> 0 - -dqrem930 remainder 123e1 9000000000000000 -> 1230 -dqrem931 remainder 123e1 900000000000000 -> 1230 -dqrem932 remainder 123e1 90000000000000 -> 1230 -dqrem933 remainder 123e1 9000000000000 -> 1230 -dqrem934 remainder 123e1 900000000000 -> 1230 -dqrem935 remainder 123e1 90000000000 -> 1230 -dqrem936 remainder 123e1 9000000000 -> 1230 -dqrem937 remainder 123e1 900000000 -> 1230 -dqrem939 remainder 123e1 90000000 -> 1230 -dqrem940 remainder 123e1 9000000 -> 1230 -dqrem941 remainder 123e1 900000 -> 1230 -dqrem942 remainder 123e1 90000 -> 1230 -dqrem943 remainder 123e1 9000 -> 1230 -dqrem944 remainder 123e1 900 -> 330 -dqrem945 remainder 123e1 90 -> 60 -dqrem946 remainder 123e1 9 -> 6 - -dqrem950 remainder 123e1 1000000000000000 -> 1230 -dqrem961 remainder 123e1 2999999999999999 -> 1230 -dqrem962 remainder 123e1 3999999999999999 -> 1230 -dqrem963 remainder 123e1 4999999999999999 -> 1230 -dqrem964 remainder 123e1 5999999999999999 -> 1230 -dqrem965 remainder 123e1 6999999999999999 -> 1230 -dqrem966 remainder 123e1 7999999999999999 -> 1230 -dqrem967 remainder 123e1 8999999999999999 -> 1230 -dqrem968 remainder 123e1 9999999999999999 -> 1230 -dqrem969 remainder 123e1 9876543210987654 -> 1230 - -dqrem980 remainder 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally - --- overflow and underflow tests [from divide] -dqrem1051 remainder 1e+277 1e-311 -> NaN Division_impossible -dqrem1052 remainder 1e+277 -1e-311 -> NaN Division_impossible -dqrem1053 remainder -1e+277 1e-311 -> NaN Division_impossible -dqrem1054 remainder -1e+277 -1e-311 -> NaN Division_impossible -dqrem1055 remainder 1e-277 1e+311 -> 1E-277 -dqrem1056 remainder 1e-277 -1e+311 -> 1E-277 -dqrem1057 remainder -1e-277 1e+311 -> -1E-277 -dqrem1058 remainder -1e-277 -1e+311 -> -1E-277 - --- Gyuris example -dqrem1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143 - --- destructive subtract -dqrem1120 remainder 1234567890123456789012345678901234 1.000000000000000000000000000000001 -> 0.765432109876543210987654321098768 -dqrem1121 remainder 1234567890123456789012345678901234 1.00000000000000000000000000000001 -> 0.65432109876543210987654321098779 -dqrem1122 remainder 1234567890123456789012345678901234 1.0000000000000000000000000000001 -> 0.5432109876543210987654321098890 -dqrem1123 remainder 1234567890123456789012345678901255 4.000000000000000000000000000000001 -> 2.691358027469135802746913580274687 -dqrem1124 remainder 1234567890123456789012345678901234 4.000000000000000000000000000000001 -> 1.691358027469135802746913580274692 -dqrem1125 remainder 1234567890123456789012345678901234 4.9999999999999999999999999999999 -> 3.6913578024691357802469135780251 -dqrem1126 remainder 1234567890123456789012345678901234 4.99999999999999999999999999999999 -> 1.46913578024691357802469135780247 -dqrem1127 remainder 1234567890123456789012345678901234 4.999999999999999999999999999999999 -> 4.246913578024691357802469135780246 -dqrem1128 remainder 1234567890123456789012345678901234 5.0000000000000000000000000000001 -> 4.3086421975308642197530864219759 - --- Null tests -dqrem1000 remainder 10 # -> NaN Invalid_operation -dqrem1001 remainder # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqRemainder.decTest -- decQuad remainder -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks (as base, above) +dqrem001 remainder 1 1 -> 0 +dqrem002 remainder 2 1 -> 0 +dqrem003 remainder 1 2 -> 1 +dqrem004 remainder 2 2 -> 0 +dqrem005 remainder 0 1 -> 0 +dqrem006 remainder 0 2 -> 0 +dqrem007 remainder 1 3 -> 1 +dqrem008 remainder 2 3 -> 2 +dqrem009 remainder 3 3 -> 0 + +dqrem010 remainder 2.4 1 -> 0.4 +dqrem011 remainder 2.4 -1 -> 0.4 +dqrem012 remainder -2.4 1 -> -0.4 +dqrem013 remainder -2.4 -1 -> -0.4 +dqrem014 remainder 2.40 1 -> 0.40 +dqrem015 remainder 2.400 1 -> 0.400 +dqrem016 remainder 2.4 2 -> 0.4 +dqrem017 remainder 2.400 2 -> 0.400 +dqrem018 remainder 2. 2 -> 0 +dqrem019 remainder 20 20 -> 0 + +dqrem020 remainder 187 187 -> 0 +dqrem021 remainder 5 2 -> 1 +dqrem022 remainder 5 2.0 -> 1.0 +dqrem023 remainder 5 2.000 -> 1.000 +dqrem024 remainder 5 0.200 -> 0.000 +dqrem025 remainder 5 0.200 -> 0.000 + +dqrem030 remainder 1 2 -> 1 +dqrem031 remainder 1 4 -> 1 +dqrem032 remainder 1 8 -> 1 + +dqrem033 remainder 1 16 -> 1 +dqrem034 remainder 1 32 -> 1 +dqrem035 remainder 1 64 -> 1 +dqrem040 remainder 1 -2 -> 1 +dqrem041 remainder 1 -4 -> 1 +dqrem042 remainder 1 -8 -> 1 +dqrem043 remainder 1 -16 -> 1 +dqrem044 remainder 1 -32 -> 1 +dqrem045 remainder 1 -64 -> 1 +dqrem050 remainder -1 2 -> -1 +dqrem051 remainder -1 4 -> -1 +dqrem052 remainder -1 8 -> -1 +dqrem053 remainder -1 16 -> -1 +dqrem054 remainder -1 32 -> -1 +dqrem055 remainder -1 64 -> -1 +dqrem060 remainder -1 -2 -> -1 +dqrem061 remainder -1 -4 -> -1 +dqrem062 remainder -1 -8 -> -1 +dqrem063 remainder -1 -16 -> -1 +dqrem064 remainder -1 -32 -> -1 +dqrem065 remainder -1 -64 -> -1 + +dqrem066 remainder 999999999 1 -> 0 +dqrem067 remainder 999999999.4 1 -> 0.4 +dqrem068 remainder 999999999.5 1 -> 0.5 +dqrem069 remainder 999999999.9 1 -> 0.9 +dqrem070 remainder 999999999.999 1 -> 0.999 +dqrem071 remainder 999999.999999 1 -> 0.999999 +dqrem072 remainder 9 1 -> 0 + +dqrem080 remainder 0. 1 -> 0 +dqrem081 remainder .0 1 -> 0.0 +dqrem082 remainder 0.00 1 -> 0.00 +dqrem083 remainder 0.00E+9 1 -> 0 +dqrem084 remainder 0.00E+3 1 -> 0 +dqrem085 remainder 0.00E+2 1 -> 0 +dqrem086 remainder 0.00E+1 1 -> 0.0 +dqrem087 remainder 0.00E+0 1 -> 0.00 +dqrem088 remainder 0.00E-0 1 -> 0.00 +dqrem089 remainder 0.00E-1 1 -> 0.000 +dqrem090 remainder 0.00E-2 1 -> 0.0000 +dqrem091 remainder 0.00E-3 1 -> 0.00000 +dqrem092 remainder 0.00E-4 1 -> 0.000000 +dqrem093 remainder 0.00E-5 1 -> 0E-7 +dqrem094 remainder 0.00E-6 1 -> 0E-8 +dqrem095 remainder 0.0000E-50 1 -> 0E-54 + +-- Various flavours of remainder by 0 +dqrem101 remainder 0 0 -> NaN Division_undefined +dqrem102 remainder 0 -0 -> NaN Division_undefined +dqrem103 remainder -0 0 -> NaN Division_undefined +dqrem104 remainder -0 -0 -> NaN Division_undefined +dqrem105 remainder 0.0E5 0 -> NaN Division_undefined +dqrem106 remainder 0.000 0 -> NaN Division_undefined +-- [Some think this next group should be Division_by_zero exception, but +-- IEEE 854 is explicit that it is Invalid operation .. for +-- remainder-near, anyway] +dqrem107 remainder 0.0001 0 -> NaN Invalid_operation +dqrem108 remainder 0.01 0 -> NaN Invalid_operation +dqrem109 remainder 0.1 0 -> NaN Invalid_operation +dqrem110 remainder 1 0 -> NaN Invalid_operation +dqrem111 remainder 1 0.0 -> NaN Invalid_operation +dqrem112 remainder 10 0.0 -> NaN Invalid_operation +dqrem113 remainder 1E+100 0.0 -> NaN Invalid_operation +dqrem114 remainder 1E+380 0 -> NaN Invalid_operation +dqrem115 remainder 0.0001 -0 -> NaN Invalid_operation +dqrem116 remainder 0.01 -0 -> NaN Invalid_operation +dqrem119 remainder 0.1 -0 -> NaN Invalid_operation +dqrem120 remainder 1 -0 -> NaN Invalid_operation +dqrem121 remainder 1 -0.0 -> NaN Invalid_operation +dqrem122 remainder 10 -0.0 -> NaN Invalid_operation +dqrem123 remainder 1E+100 -0.0 -> NaN Invalid_operation +dqrem124 remainder 1E+384 -0 -> NaN Invalid_operation +-- and zeros on left +dqrem130 remainder 0 1 -> 0 +dqrem131 remainder 0 -1 -> 0 +dqrem132 remainder 0.0 1 -> 0.0 +dqrem133 remainder 0.0 -1 -> 0.0 +dqrem134 remainder -0 1 -> -0 +dqrem135 remainder -0 -1 -> -0 +dqrem136 remainder -0.0 1 -> -0.0 +dqrem137 remainder -0.0 -1 -> -0.0 + +-- 0.5ers +dqrem143 remainder 0.5 2 -> 0.5 +dqrem144 remainder 0.5 2.1 -> 0.5 +dqrem145 remainder 0.5 2.01 -> 0.50 +dqrem146 remainder 0.5 2.001 -> 0.500 +dqrem147 remainder 0.50 2 -> 0.50 +dqrem148 remainder 0.50 2.01 -> 0.50 +dqrem149 remainder 0.50 2.001 -> 0.500 + +-- steadies +dqrem150 remainder 1 1 -> 0 +dqrem151 remainder 1 2 -> 1 +dqrem152 remainder 1 3 -> 1 +dqrem153 remainder 1 4 -> 1 +dqrem154 remainder 1 5 -> 1 +dqrem155 remainder 1 6 -> 1 +dqrem156 remainder 1 7 -> 1 +dqrem157 remainder 1 8 -> 1 +dqrem158 remainder 1 9 -> 1 +dqrem159 remainder 1 10 -> 1 +dqrem160 remainder 1 1 -> 0 +dqrem161 remainder 2 1 -> 0 +dqrem162 remainder 3 1 -> 0 +dqrem163 remainder 4 1 -> 0 +dqrem164 remainder 5 1 -> 0 +dqrem165 remainder 6 1 -> 0 +dqrem166 remainder 7 1 -> 0 +dqrem167 remainder 8 1 -> 0 +dqrem168 remainder 9 1 -> 0 +dqrem169 remainder 10 1 -> 0 + +-- some differences from remainderNear +dqrem171 remainder 0.4 1.020 -> 0.400 +dqrem172 remainder 0.50 1.020 -> 0.500 +dqrem173 remainder 0.51 1.020 -> 0.510 +dqrem174 remainder 0.52 1.020 -> 0.520 +dqrem175 remainder 0.6 1.020 -> 0.600 + +-- More flavours of remainder by 0 +dqrem201 remainder 0 0 -> NaN Division_undefined +dqrem202 remainder 0.0E5 0 -> NaN Division_undefined +dqrem203 remainder 0.000 0 -> NaN Division_undefined +dqrem204 remainder 0.0001 0 -> NaN Invalid_operation +dqrem205 remainder 0.01 0 -> NaN Invalid_operation +dqrem206 remainder 0.1 0 -> NaN Invalid_operation +dqrem207 remainder 1 0 -> NaN Invalid_operation +dqrem208 remainder 1 0.0 -> NaN Invalid_operation +dqrem209 remainder 10 0.0 -> NaN Invalid_operation +dqrem210 remainder 1E+100 0.0 -> NaN Invalid_operation +dqrem211 remainder 1E+380 0 -> NaN Invalid_operation + +-- some differences from remainderNear +dqrem231 remainder -0.4 1.020 -> -0.400 +dqrem232 remainder -0.50 1.020 -> -0.500 +dqrem233 remainder -0.51 1.020 -> -0.510 +dqrem234 remainder -0.52 1.020 -> -0.520 +dqrem235 remainder -0.6 1.020 -> -0.600 + +-- high Xs +dqrem240 remainder 1E+2 1.00 -> 0.00 + +-- dqrem3xx are from DiagBigDecimal +dqrem301 remainder 1 3 -> 1 +dqrem302 remainder 5 5 -> 0 +dqrem303 remainder 13 10 -> 3 +dqrem304 remainder 13 50 -> 13 +dqrem305 remainder 13 100 -> 13 +dqrem306 remainder 13 1000 -> 13 +dqrem307 remainder .13 1 -> 0.13 +dqrem308 remainder 0.133 1 -> 0.133 +dqrem309 remainder 0.1033 1 -> 0.1033 +dqrem310 remainder 1.033 1 -> 0.033 +dqrem311 remainder 10.33 1 -> 0.33 +dqrem312 remainder 10.33 10 -> 0.33 +dqrem313 remainder 103.3 1 -> 0.3 +dqrem314 remainder 133 10 -> 3 +dqrem315 remainder 1033 10 -> 3 +dqrem316 remainder 1033 50 -> 33 +dqrem317 remainder 101.0 3 -> 2.0 +dqrem318 remainder 102.0 3 -> 0.0 +dqrem319 remainder 103.0 3 -> 1.0 +dqrem320 remainder 2.40 1 -> 0.40 +dqrem321 remainder 2.400 1 -> 0.400 +dqrem322 remainder 2.4 1 -> 0.4 +dqrem323 remainder 2.4 2 -> 0.4 +dqrem324 remainder 2.400 2 -> 0.400 +dqrem325 remainder 1 0.3 -> 0.1 +dqrem326 remainder 1 0.30 -> 0.10 +dqrem327 remainder 1 0.300 -> 0.100 +dqrem328 remainder 1 0.3000 -> 0.1000 +dqrem329 remainder 1.0 0.3 -> 0.1 +dqrem330 remainder 1.00 0.3 -> 0.10 +dqrem331 remainder 1.000 0.3 -> 0.100 +dqrem332 remainder 1.0000 0.3 -> 0.1000 +dqrem333 remainder 0.5 2 -> 0.5 +dqrem334 remainder 0.5 2.1 -> 0.5 +dqrem335 remainder 0.5 2.01 -> 0.50 +dqrem336 remainder 0.5 2.001 -> 0.500 +dqrem337 remainder 0.50 2 -> 0.50 +dqrem338 remainder 0.50 2.01 -> 0.50 +dqrem339 remainder 0.50 2.001 -> 0.500 + +dqrem340 remainder 0.5 0.5000001 -> 0.5000000 +dqrem341 remainder 0.5 0.50000001 -> 0.50000000 +dqrem342 remainder 0.5 0.500000001 -> 0.500000000 +dqrem343 remainder 0.5 0.5000000001 -> 0.5000000000 +dqrem344 remainder 0.5 0.50000000001 -> 0.50000000000 +dqrem345 remainder 0.5 0.4999999 -> 1E-7 +dqrem346 remainder 0.5 0.49999999 -> 1E-8 +dqrem347 remainder 0.5 0.499999999 -> 1E-9 +dqrem348 remainder 0.5 0.4999999999 -> 1E-10 +dqrem349 remainder 0.5 0.49999999999 -> 1E-11 +dqrem350 remainder 0.5 0.499999999999 -> 1E-12 + +dqrem351 remainder 0.03 7 -> 0.03 +dqrem352 remainder 5 2 -> 1 +dqrem353 remainder 4.1 2 -> 0.1 +dqrem354 remainder 4.01 2 -> 0.01 +dqrem355 remainder 4.001 2 -> 0.001 +dqrem356 remainder 4.0001 2 -> 0.0001 +dqrem357 remainder 4.00001 2 -> 0.00001 +dqrem358 remainder 4.000001 2 -> 0.000001 +dqrem359 remainder 4.0000001 2 -> 1E-7 + +dqrem360 remainder 1.2 0.7345 -> 0.4655 +dqrem361 remainder 0.8 12 -> 0.8 +dqrem362 remainder 0.8 0.2 -> 0.0 +dqrem363 remainder 0.8 0.3 -> 0.2 +dqrem364 remainder 0.800 12 -> 0.800 +dqrem365 remainder 0.800 1.7 -> 0.800 +dqrem366 remainder 2.400 2 -> 0.400 + +dqrem371 remainder 2.400 2 -> 0.400 + +dqrem381 remainder 12345 1 -> 0 +dqrem382 remainder 12345 1.0001 -> 0.7657 +dqrem383 remainder 12345 1.001 -> 0.668 +dqrem384 remainder 12345 1.01 -> 0.78 +dqrem385 remainder 12345 1.1 -> 0.8 +dqrem386 remainder 12355 4 -> 3 +dqrem387 remainder 12345 4 -> 1 +dqrem388 remainder 12355 4.0001 -> 2.6912 +dqrem389 remainder 12345 4.0001 -> 0.6914 +dqrem390 remainder 12345 4.9 -> 1.9 +dqrem391 remainder 12345 4.99 -> 4.73 +dqrem392 remainder 12345 4.999 -> 2.469 +dqrem393 remainder 12345 4.9999 -> 0.2469 +dqrem394 remainder 12345 5 -> 0 +dqrem395 remainder 12345 5.0001 -> 4.7532 +dqrem396 remainder 12345 5.001 -> 2.532 +dqrem397 remainder 12345 5.01 -> 0.36 +dqrem398 remainder 12345 5.1 -> 3.0 + +-- the nasty division-by-1 cases +dqrem401 remainder 0.5 1 -> 0.5 +dqrem402 remainder 0.55 1 -> 0.55 +dqrem403 remainder 0.555 1 -> 0.555 +dqrem404 remainder 0.5555 1 -> 0.5555 +dqrem405 remainder 0.55555 1 -> 0.55555 +dqrem406 remainder 0.555555 1 -> 0.555555 +dqrem407 remainder 0.5555555 1 -> 0.5555555 +dqrem408 remainder 0.55555555 1 -> 0.55555555 +dqrem409 remainder 0.555555555 1 -> 0.555555555 + +-- folddowns +dqrem421 remainder 1E+6144 1 -> NaN Division_impossible +dqrem422 remainder 1E+6144 1E+6143 -> 0E+6111 Clamped +dqrem423 remainder 1E+6144 2E+6143 -> 0E+6111 Clamped +dqrem424 remainder 1E+6144 3E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped +dqrem425 remainder 1E+6144 4E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped +dqrem426 remainder 1E+6144 5E+6143 -> 0E+6111 Clamped +dqrem427 remainder 1E+6144 6E+6143 -> 4.00000000000000000000000000000000E+6143 Clamped +dqrem428 remainder 1E+6144 7E+6143 -> 3.00000000000000000000000000000000E+6143 Clamped +dqrem429 remainder 1E+6144 8E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped +dqrem430 remainder 1E+6144 9E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped +-- tinies +dqrem431 remainder 1E-6175 1E-6176 -> 0E-6176 +dqrem432 remainder 1E-6175 2E-6176 -> 0E-6176 +dqrem433 remainder 1E-6175 3E-6176 -> 1E-6176 Subnormal +dqrem434 remainder 1E-6175 4E-6176 -> 2E-6176 Subnormal +dqrem435 remainder 1E-6175 5E-6176 -> 0E-6176 +dqrem436 remainder 1E-6175 6E-6176 -> 4E-6176 Subnormal +dqrem437 remainder 1E-6175 7E-6176 -> 3E-6176 Subnormal +dqrem438 remainder 1E-6175 8E-6176 -> 2E-6176 Subnormal +dqrem439 remainder 1E-6175 9E-6176 -> 1E-6176 Subnormal +dqrem440 remainder 1E-6175 10E-6176 -> 0E-6176 +dqrem441 remainder 1E-6175 11E-6176 -> 1.0E-6175 Subnormal +dqrem442 remainder 100E-6175 11E-6176 -> 1.0E-6175 Subnormal +dqrem443 remainder 100E-6175 20E-6176 -> 0E-6176 +dqrem444 remainder 100E-6175 21E-6176 -> 1.3E-6175 Subnormal +dqrem445 remainder 100E-6175 30E-6176 -> 1.0E-6175 Subnormal + +-- zero signs +dqrem650 remainder 1 1 -> 0 +dqrem651 remainder -1 1 -> -0 +dqrem652 remainder 1 -1 -> 0 +dqrem653 remainder -1 -1 -> -0 +dqrem654 remainder 0 1 -> 0 +dqrem655 remainder -0 1 -> -0 +dqrem656 remainder 0 -1 -> 0 +dqrem657 remainder -0 -1 -> -0 +dqrem658 remainder 0.00 1 -> 0.00 +dqrem659 remainder -0.00 1 -> -0.00 + +-- Specials +dqrem680 remainder Inf -Inf -> NaN Invalid_operation +dqrem681 remainder Inf -1000 -> NaN Invalid_operation +dqrem682 remainder Inf -1 -> NaN Invalid_operation +dqrem683 remainder Inf 0 -> NaN Invalid_operation +dqrem684 remainder Inf -0 -> NaN Invalid_operation +dqrem685 remainder Inf 1 -> NaN Invalid_operation +dqrem686 remainder Inf 1000 -> NaN Invalid_operation +dqrem687 remainder Inf Inf -> NaN Invalid_operation +dqrem688 remainder -1000 Inf -> -1000 +dqrem689 remainder -Inf Inf -> NaN Invalid_operation +dqrem691 remainder -1 Inf -> -1 +dqrem692 remainder 0 Inf -> 0 +dqrem693 remainder -0 Inf -> -0 +dqrem694 remainder 1 Inf -> 1 +dqrem695 remainder 1000 Inf -> 1000 +dqrem696 remainder Inf Inf -> NaN Invalid_operation + +dqrem700 remainder -Inf -Inf -> NaN Invalid_operation +dqrem701 remainder -Inf -1000 -> NaN Invalid_operation +dqrem702 remainder -Inf -1 -> NaN Invalid_operation +dqrem703 remainder -Inf -0 -> NaN Invalid_operation +dqrem704 remainder -Inf 0 -> NaN Invalid_operation +dqrem705 remainder -Inf 1 -> NaN Invalid_operation +dqrem706 remainder -Inf 1000 -> NaN Invalid_operation +dqrem707 remainder -Inf Inf -> NaN Invalid_operation +dqrem708 remainder -Inf -Inf -> NaN Invalid_operation +dqrem709 remainder -1000 Inf -> -1000 +dqrem710 remainder -1 -Inf -> -1 +dqrem711 remainder -0 -Inf -> -0 +dqrem712 remainder 0 -Inf -> 0 +dqrem713 remainder 1 -Inf -> 1 +dqrem714 remainder 1000 -Inf -> 1000 +dqrem715 remainder Inf -Inf -> NaN Invalid_operation + +dqrem721 remainder NaN -Inf -> NaN +dqrem722 remainder NaN -1000 -> NaN +dqrem723 remainder NaN -1 -> NaN +dqrem724 remainder NaN -0 -> NaN +dqrem725 remainder -NaN 0 -> -NaN +dqrem726 remainder NaN 1 -> NaN +dqrem727 remainder NaN 1000 -> NaN +dqrem728 remainder NaN Inf -> NaN +dqrem729 remainder NaN -NaN -> NaN +dqrem730 remainder -Inf NaN -> NaN +dqrem731 remainder -1000 NaN -> NaN +dqrem732 remainder -1 NaN -> NaN +dqrem733 remainder -0 -NaN -> -NaN +dqrem734 remainder 0 NaN -> NaN +dqrem735 remainder 1 -NaN -> -NaN +dqrem736 remainder 1000 NaN -> NaN +dqrem737 remainder Inf NaN -> NaN + +dqrem741 remainder sNaN -Inf -> NaN Invalid_operation +dqrem742 remainder sNaN -1000 -> NaN Invalid_operation +dqrem743 remainder -sNaN -1 -> -NaN Invalid_operation +dqrem744 remainder sNaN -0 -> NaN Invalid_operation +dqrem745 remainder sNaN 0 -> NaN Invalid_operation +dqrem746 remainder sNaN 1 -> NaN Invalid_operation +dqrem747 remainder sNaN 1000 -> NaN Invalid_operation +dqrem749 remainder sNaN NaN -> NaN Invalid_operation +dqrem750 remainder sNaN sNaN -> NaN Invalid_operation +dqrem751 remainder NaN sNaN -> NaN Invalid_operation +dqrem752 remainder -Inf sNaN -> NaN Invalid_operation +dqrem753 remainder -1000 sNaN -> NaN Invalid_operation +dqrem754 remainder -1 sNaN -> NaN Invalid_operation +dqrem755 remainder -0 sNaN -> NaN Invalid_operation +dqrem756 remainder 0 sNaN -> NaN Invalid_operation +dqrem757 remainder 1 sNaN -> NaN Invalid_operation +dqrem758 remainder 1000 sNaN -> NaN Invalid_operation +dqrem759 remainder Inf -sNaN -> -NaN Invalid_operation + +-- propagating NaNs +dqrem760 remainder NaN1 NaN7 -> NaN1 +dqrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation +dqrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation +dqrem763 remainder sNaN4 sNaN10 -> NaN4 Invalid_operation +dqrem764 remainder 15 NaN11 -> NaN11 +dqrem765 remainder NaN6 NaN12 -> NaN6 +dqrem766 remainder Inf NaN13 -> NaN13 +dqrem767 remainder NaN14 -Inf -> NaN14 +dqrem768 remainder 0 NaN15 -> NaN15 +dqrem769 remainder NaN16 -0 -> NaN16 + +-- edge cases of impossible +dqrem770 remainder 1234568888888887777777777890123456 10 -> 6 +dqrem771 remainder 1234568888888887777777777890123456 1 -> 0 +dqrem772 remainder 1234568888888887777777777890123456 0.1 -> NaN Division_impossible +dqrem773 remainder 1234568888888887777777777890123456 0.01 -> NaN Division_impossible + +-- long operand checks +dqrem801 remainder 12345678000 100 -> 0 +dqrem802 remainder 1 12345678000 -> 1 +dqrem803 remainder 1234567800 10 -> 0 +dqrem804 remainder 1 1234567800 -> 1 +dqrem805 remainder 1234567890 10 -> 0 +dqrem806 remainder 1 1234567890 -> 1 +dqrem807 remainder 1234567891 10 -> 1 +dqrem808 remainder 1 1234567891 -> 1 +dqrem809 remainder 12345678901 100 -> 1 +dqrem810 remainder 1 12345678901 -> 1 +dqrem811 remainder 1234567896 10 -> 6 +dqrem812 remainder 1 1234567896 -> 1 + +dqrem821 remainder 12345678000 100 -> 0 +dqrem822 remainder 1 12345678000 -> 1 +dqrem823 remainder 1234567800 10 -> 0 +dqrem824 remainder 1 1234567800 -> 1 +dqrem825 remainder 1234567890 10 -> 0 +dqrem826 remainder 1 1234567890 -> 1 +dqrem827 remainder 1234567891 10 -> 1 +dqrem828 remainder 1 1234567891 -> 1 +dqrem829 remainder 12345678901 100 -> 1 +dqrem830 remainder 1 12345678901 -> 1 +dqrem831 remainder 1234567896 10 -> 6 +dqrem832 remainder 1 1234567896 -> 1 + +-- from divideint +dqrem840 remainder 100000000.0 1 -> 0.0 +dqrem841 remainder 100000000.4 1 -> 0.4 +dqrem842 remainder 100000000.5 1 -> 0.5 +dqrem843 remainder 100000000.9 1 -> 0.9 +dqrem844 remainder 100000000.999 1 -> 0.999 +dqrem850 remainder 100000003 5 -> 3 +dqrem851 remainder 10000003 5 -> 3 +dqrem852 remainder 1000003 5 -> 3 +dqrem853 remainder 100003 5 -> 3 +dqrem854 remainder 10003 5 -> 3 +dqrem855 remainder 1003 5 -> 3 +dqrem856 remainder 103 5 -> 3 +dqrem857 remainder 13 5 -> 3 +dqrem858 remainder 1 5 -> 1 + +-- Vladimir's cases 1234567890123456 +dqrem860 remainder 123.0e1 1000000000000000 -> 1230 +dqrem861 remainder 1230 1000000000000000 -> 1230 +dqrem862 remainder 12.3e2 1000000000000000 -> 1230 +dqrem863 remainder 1.23e3 1000000000000000 -> 1230 +dqrem864 remainder 123e1 1000000000000000 -> 1230 +dqrem870 remainder 123e1 1000000000000000 -> 1230 +dqrem871 remainder 123e1 100000000000000 -> 1230 +dqrem872 remainder 123e1 10000000000000 -> 1230 +dqrem873 remainder 123e1 1000000000000 -> 1230 +dqrem874 remainder 123e1 100000000000 -> 1230 +dqrem875 remainder 123e1 10000000000 -> 1230 +dqrem876 remainder 123e1 1000000000 -> 1230 +dqrem877 remainder 123e1 100000000 -> 1230 +dqrem878 remainder 1230 100000000 -> 1230 +dqrem879 remainder 123e1 10000000 -> 1230 +dqrem880 remainder 123e1 1000000 -> 1230 +dqrem881 remainder 123e1 100000 -> 1230 +dqrem882 remainder 123e1 10000 -> 1230 +dqrem883 remainder 123e1 1000 -> 230 +dqrem884 remainder 123e1 100 -> 30 +dqrem885 remainder 123e1 10 -> 0 +dqrem886 remainder 123e1 1 -> 0 + +dqrem890 remainder 123e1 2000000000000000 -> 1230 +dqrem891 remainder 123e1 200000000000000 -> 1230 +dqrem892 remainder 123e1 20000000000000 -> 1230 +dqrem893 remainder 123e1 2000000000000 -> 1230 +dqrem894 remainder 123e1 200000000000 -> 1230 +dqrem895 remainder 123e1 20000000000 -> 1230 +dqrem896 remainder 123e1 2000000000 -> 1230 +dqrem897 remainder 123e1 200000000 -> 1230 +dqrem899 remainder 123e1 20000000 -> 1230 +dqrem900 remainder 123e1 2000000 -> 1230 +dqrem901 remainder 123e1 200000 -> 1230 +dqrem902 remainder 123e1 20000 -> 1230 +dqrem903 remainder 123e1 2000 -> 1230 +dqrem904 remainder 123e1 200 -> 30 +dqrem905 remainder 123e1 20 -> 10 +dqrem906 remainder 123e1 2 -> 0 + +dqrem910 remainder 123e1 5000000000000000 -> 1230 +dqrem911 remainder 123e1 500000000000000 -> 1230 +dqrem912 remainder 123e1 50000000000000 -> 1230 +dqrem913 remainder 123e1 5000000000000 -> 1230 +dqrem914 remainder 123e1 500000000000 -> 1230 +dqrem915 remainder 123e1 50000000000 -> 1230 +dqrem916 remainder 123e1 5000000000 -> 1230 +dqrem917 remainder 123e1 500000000 -> 1230 +dqrem919 remainder 123e1 50000000 -> 1230 +dqrem920 remainder 123e1 5000000 -> 1230 +dqrem921 remainder 123e1 500000 -> 1230 +dqrem922 remainder 123e1 50000 -> 1230 +dqrem923 remainder 123e1 5000 -> 1230 +dqrem924 remainder 123e1 500 -> 230 +dqrem925 remainder 123e1 50 -> 30 +dqrem926 remainder 123e1 5 -> 0 + +dqrem930 remainder 123e1 9000000000000000 -> 1230 +dqrem931 remainder 123e1 900000000000000 -> 1230 +dqrem932 remainder 123e1 90000000000000 -> 1230 +dqrem933 remainder 123e1 9000000000000 -> 1230 +dqrem934 remainder 123e1 900000000000 -> 1230 +dqrem935 remainder 123e1 90000000000 -> 1230 +dqrem936 remainder 123e1 9000000000 -> 1230 +dqrem937 remainder 123e1 900000000 -> 1230 +dqrem939 remainder 123e1 90000000 -> 1230 +dqrem940 remainder 123e1 9000000 -> 1230 +dqrem941 remainder 123e1 900000 -> 1230 +dqrem942 remainder 123e1 90000 -> 1230 +dqrem943 remainder 123e1 9000 -> 1230 +dqrem944 remainder 123e1 900 -> 330 +dqrem945 remainder 123e1 90 -> 60 +dqrem946 remainder 123e1 9 -> 6 + +dqrem950 remainder 123e1 1000000000000000 -> 1230 +dqrem961 remainder 123e1 2999999999999999 -> 1230 +dqrem962 remainder 123e1 3999999999999999 -> 1230 +dqrem963 remainder 123e1 4999999999999999 -> 1230 +dqrem964 remainder 123e1 5999999999999999 -> 1230 +dqrem965 remainder 123e1 6999999999999999 -> 1230 +dqrem966 remainder 123e1 7999999999999999 -> 1230 +dqrem967 remainder 123e1 8999999999999999 -> 1230 +dqrem968 remainder 123e1 9999999999999999 -> 1230 +dqrem969 remainder 123e1 9876543210987654 -> 1230 + +dqrem980 remainder 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally + +-- overflow and underflow tests [from divide] +dqrem1051 remainder 1e+277 1e-311 -> NaN Division_impossible +dqrem1052 remainder 1e+277 -1e-311 -> NaN Division_impossible +dqrem1053 remainder -1e+277 1e-311 -> NaN Division_impossible +dqrem1054 remainder -1e+277 -1e-311 -> NaN Division_impossible +dqrem1055 remainder 1e-277 1e+311 -> 1E-277 +dqrem1056 remainder 1e-277 -1e+311 -> 1E-277 +dqrem1057 remainder -1e-277 1e+311 -> -1E-277 +dqrem1058 remainder -1e-277 -1e+311 -> -1E-277 + +-- Gyuris example +dqrem1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143 + +-- destructive subtract +dqrem1120 remainder 1234567890123456789012345678901234 1.000000000000000000000000000000001 -> 0.765432109876543210987654321098768 +dqrem1121 remainder 1234567890123456789012345678901234 1.00000000000000000000000000000001 -> 0.65432109876543210987654321098779 +dqrem1122 remainder 1234567890123456789012345678901234 1.0000000000000000000000000000001 -> 0.5432109876543210987654321098890 +dqrem1123 remainder 1234567890123456789012345678901255 4.000000000000000000000000000000001 -> 2.691358027469135802746913580274687 +dqrem1124 remainder 1234567890123456789012345678901234 4.000000000000000000000000000000001 -> 1.691358027469135802746913580274692 +dqrem1125 remainder 1234567890123456789012345678901234 4.9999999999999999999999999999999 -> 3.6913578024691357802469135780251 +dqrem1126 remainder 1234567890123456789012345678901234 4.99999999999999999999999999999999 -> 1.46913578024691357802469135780247 +dqrem1127 remainder 1234567890123456789012345678901234 4.999999999999999999999999999999999 -> 4.246913578024691357802469135780246 +dqrem1128 remainder 1234567890123456789012345678901234 5.0000000000000000000000000000001 -> 4.3086421975308642197530864219759 + +-- Null tests +dqrem1000 remainder 10 # -> NaN Invalid_operation +dqrem1001 remainder # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqRemainderNear.decTest b/Lib/test/decimaltestdata/dqRemainderNear.decTest index 2c5c3f5074e..36ef1cc1e35 100644 --- a/Lib/test/decimaltestdata/dqRemainderNear.decTest +++ b/Lib/test/decimaltestdata/dqRemainderNear.decTest @@ -1,631 +1,631 @@ ------------------------------------------------------------------------- --- dqRemainderNear.decTest -- decQuad remainder-near -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks (as base, above) -dqrmn001 remaindernear 1 1 -> 0 -dqrmn002 remaindernear 2 1 -> 0 -dqrmn003 remaindernear 1 2 -> 1 -dqrmn004 remaindernear 2 2 -> 0 -dqrmn005 remaindernear 0 1 -> 0 -dqrmn006 remaindernear 0 2 -> 0 -dqrmn007 remaindernear 1 3 -> 1 -dqrmn008 remaindernear 2 3 -> -1 -dqrmn009 remaindernear 3 3 -> 0 - -dqrmn010 remaindernear 2.4 1 -> 0.4 -dqrmn011 remaindernear 2.4 -1 -> 0.4 -dqrmn012 remaindernear -2.4 1 -> -0.4 -dqrmn013 remaindernear -2.4 -1 -> -0.4 -dqrmn014 remaindernear 2.40 1 -> 0.40 -dqrmn015 remaindernear 2.400 1 -> 0.400 -dqrmn016 remaindernear 2.4 2 -> 0.4 -dqrmn017 remaindernear 2.400 2 -> 0.400 -dqrmn018 remaindernear 2. 2 -> 0 -dqrmn019 remaindernear 20 20 -> 0 - -dqrmn020 remaindernear 187 187 -> 0 -dqrmn021 remaindernear 5 2 -> 1 -dqrmn022 remaindernear 5 2.0 -> 1.0 -dqrmn023 remaindernear 5 2.000 -> 1.000 -dqrmn024 remaindernear 5 0.200 -> 0.000 -dqrmn025 remaindernear 5 0.200 -> 0.000 - -dqrmn030 remaindernear 1 2 -> 1 -dqrmn031 remaindernear 1 4 -> 1 -dqrmn032 remaindernear 1 8 -> 1 - -dqrmn033 remaindernear 1 16 -> 1 -dqrmn034 remaindernear 1 32 -> 1 -dqrmn035 remaindernear 1 64 -> 1 -dqrmn040 remaindernear 1 -2 -> 1 -dqrmn041 remaindernear 1 -4 -> 1 -dqrmn042 remaindernear 1 -8 -> 1 -dqrmn043 remaindernear 1 -16 -> 1 -dqrmn044 remaindernear 1 -32 -> 1 -dqrmn045 remaindernear 1 -64 -> 1 -dqrmn050 remaindernear -1 2 -> -1 -dqrmn051 remaindernear -1 4 -> -1 -dqrmn052 remaindernear -1 8 -> -1 -dqrmn053 remaindernear -1 16 -> -1 -dqrmn054 remaindernear -1 32 -> -1 -dqrmn055 remaindernear -1 64 -> -1 -dqrmn060 remaindernear -1 -2 -> -1 -dqrmn061 remaindernear -1 -4 -> -1 -dqrmn062 remaindernear -1 -8 -> -1 -dqrmn063 remaindernear -1 -16 -> -1 -dqrmn064 remaindernear -1 -32 -> -1 -dqrmn065 remaindernear -1 -64 -> -1 - -dqrmn066 remaindernear 9.9 1 -> -0.1 -dqrmn067 remaindernear 99.7 1 -> -0.3 -dqrmn068 remaindernear 999999999 1 -> 0 -dqrmn069 remaindernear 999999999.4 1 -> 0.4 -dqrmn070 remaindernear 999999999.5 1 -> -0.5 -dqrmn071 remaindernear 999999999.9 1 -> -0.1 -dqrmn072 remaindernear 999999999.999 1 -> -0.001 -dqrmn073 remaindernear 999999.999999 1 -> -0.000001 -dqrmn074 remaindernear 9 1 -> 0 -dqrmn075 remaindernear 9999999999999999 1 -> 0 -dqrmn076 remaindernear 9999999999999999 2 -> -1 -dqrmn077 remaindernear 9999999999999999 3 -> 0 -dqrmn078 remaindernear 9999999999999999 4 -> -1 - -dqrmn080 remaindernear 0. 1 -> 0 -dqrmn081 remaindernear .0 1 -> 0.0 -dqrmn082 remaindernear 0.00 1 -> 0.00 -dqrmn083 remaindernear 0.00E+9 1 -> 0 -dqrmn084 remaindernear 0.00E+3 1 -> 0 -dqrmn085 remaindernear 0.00E+2 1 -> 0 -dqrmn086 remaindernear 0.00E+1 1 -> 0.0 -dqrmn087 remaindernear 0.00E+0 1 -> 0.00 -dqrmn088 remaindernear 0.00E-0 1 -> 0.00 -dqrmn089 remaindernear 0.00E-1 1 -> 0.000 -dqrmn090 remaindernear 0.00E-2 1 -> 0.0000 -dqrmn091 remaindernear 0.00E-3 1 -> 0.00000 -dqrmn092 remaindernear 0.00E-4 1 -> 0.000000 -dqrmn093 remaindernear 0.00E-5 1 -> 0E-7 -dqrmn094 remaindernear 0.00E-6 1 -> 0E-8 -dqrmn095 remaindernear 0.0000E-50 1 -> 0E-54 - --- Various flavours of remaindernear by 0 -dqrmn101 remaindernear 0 0 -> NaN Division_undefined -dqrmn102 remaindernear 0 -0 -> NaN Division_undefined -dqrmn103 remaindernear -0 0 -> NaN Division_undefined -dqrmn104 remaindernear -0 -0 -> NaN Division_undefined -dqrmn105 remaindernear 0.0E5 0 -> NaN Division_undefined -dqrmn106 remaindernear 0.000 0 -> NaN Division_undefined --- [Some think this next group should be Division_by_zero exception, but --- IEEE 854 is explicit that it is Invalid operation .. for --- remainder-near, anyway] -dqrmn107 remaindernear 0.0001 0 -> NaN Invalid_operation -dqrmn108 remaindernear 0.01 0 -> NaN Invalid_operation -dqrmn109 remaindernear 0.1 0 -> NaN Invalid_operation -dqrmn110 remaindernear 1 0 -> NaN Invalid_operation -dqrmn111 remaindernear 1 0.0 -> NaN Invalid_operation -dqrmn112 remaindernear 10 0.0 -> NaN Invalid_operation -dqrmn113 remaindernear 1E+100 0.0 -> NaN Invalid_operation -dqrmn114 remaindernear 1E+380 0 -> NaN Invalid_operation -dqrmn115 remaindernear 0.0001 -0 -> NaN Invalid_operation -dqrmn116 remaindernear 0.01 -0 -> NaN Invalid_operation -dqrmn119 remaindernear 0.1 -0 -> NaN Invalid_operation -dqrmn120 remaindernear 1 -0 -> NaN Invalid_operation -dqrmn121 remaindernear 1 -0.0 -> NaN Invalid_operation -dqrmn122 remaindernear 10 -0.0 -> NaN Invalid_operation -dqrmn123 remaindernear 1E+100 -0.0 -> NaN Invalid_operation -dqrmn124 remaindernear 1E+384 -0 -> NaN Invalid_operation --- and zeros on left -dqrmn130 remaindernear 0 1 -> 0 -dqrmn131 remaindernear 0 -1 -> 0 -dqrmn132 remaindernear 0.0 1 -> 0.0 -dqrmn133 remaindernear 0.0 -1 -> 0.0 -dqrmn134 remaindernear -0 1 -> -0 -dqrmn135 remaindernear -0 -1 -> -0 -dqrmn136 remaindernear -0.0 1 -> -0.0 -dqrmn137 remaindernear -0.0 -1 -> -0.0 - --- 0.5ers -dqrmn143 remaindernear 0.5 2 -> 0.5 -dqrmn144 remaindernear 0.5 2.1 -> 0.5 -dqrmn145 remaindernear 0.5 2.01 -> 0.50 -dqrmn146 remaindernear 0.5 2.001 -> 0.500 -dqrmn147 remaindernear 0.50 2 -> 0.50 -dqrmn148 remaindernear 0.50 2.01 -> 0.50 -dqrmn149 remaindernear 0.50 2.001 -> 0.500 - --- steadies -dqrmn150 remaindernear 1 1 -> 0 -dqrmn151 remaindernear 1 2 -> 1 -dqrmn152 remaindernear 1 3 -> 1 -dqrmn153 remaindernear 1 4 -> 1 -dqrmn154 remaindernear 1 5 -> 1 -dqrmn155 remaindernear 1 6 -> 1 -dqrmn156 remaindernear 1 7 -> 1 -dqrmn157 remaindernear 1 8 -> 1 -dqrmn158 remaindernear 1 9 -> 1 -dqrmn159 remaindernear 1 10 -> 1 -dqrmn160 remaindernear 1 1 -> 0 -dqrmn161 remaindernear 2 1 -> 0 -dqrmn162 remaindernear 3 1 -> 0 -dqrmn163 remaindernear 4 1 -> 0 -dqrmn164 remaindernear 5 1 -> 0 -dqrmn165 remaindernear 6 1 -> 0 -dqrmn166 remaindernear 7 1 -> 0 -dqrmn167 remaindernear 8 1 -> 0 -dqrmn168 remaindernear 9 1 -> 0 -dqrmn169 remaindernear 10 1 -> 0 - --- some differences from remainder -dqrmn171 remaindernear 0.4 1.020 -> 0.400 -dqrmn172 remaindernear 0.50 1.020 -> 0.500 -dqrmn173 remaindernear 0.51 1.020 -> 0.510 -dqrmn174 remaindernear 0.52 1.020 -> -0.500 -dqrmn175 remaindernear 0.6 1.020 -> -0.420 - --- More flavours of remaindernear by 0 -dqrmn201 remaindernear 0 0 -> NaN Division_undefined -dqrmn202 remaindernear 0.0E5 0 -> NaN Division_undefined -dqrmn203 remaindernear 0.000 0 -> NaN Division_undefined -dqrmn204 remaindernear 0.0001 0 -> NaN Invalid_operation -dqrmn205 remaindernear 0.01 0 -> NaN Invalid_operation -dqrmn206 remaindernear 0.1 0 -> NaN Invalid_operation -dqrmn207 remaindernear 1 0 -> NaN Invalid_operation -dqrmn208 remaindernear 1 0.0 -> NaN Invalid_operation -dqrmn209 remaindernear 10 0.0 -> NaN Invalid_operation -dqrmn210 remaindernear 1E+100 0.0 -> NaN Invalid_operation -dqrmn211 remaindernear 1E+380 0 -> NaN Invalid_operation - --- tests from the extended specification -dqrmn221 remaindernear 2.1 3 -> -0.9 -dqrmn222 remaindernear 10 6 -> -2 -dqrmn223 remaindernear 10 3 -> 1 -dqrmn224 remaindernear -10 3 -> -1 -dqrmn225 remaindernear 10.2 1 -> 0.2 -dqrmn226 remaindernear 10 0.3 -> 0.1 -dqrmn227 remaindernear 3.6 1.3 -> -0.3 - --- some differences from remainder -dqrmn231 remaindernear -0.4 1.020 -> -0.400 -dqrmn232 remaindernear -0.50 1.020 -> -0.500 -dqrmn233 remaindernear -0.51 1.020 -> -0.510 -dqrmn234 remaindernear -0.52 1.020 -> 0.500 -dqrmn235 remaindernear -0.6 1.020 -> 0.420 - --- high Xs -dqrmn240 remaindernear 1E+2 1.00 -> 0.00 - --- dqrmn3xx are from DiagBigDecimal -dqrmn301 remaindernear 1 3 -> 1 -dqrmn302 remaindernear 5 5 -> 0 -dqrmn303 remaindernear 13 10 -> 3 -dqrmn304 remaindernear 13 50 -> 13 -dqrmn305 remaindernear 13 100 -> 13 -dqrmn306 remaindernear 13 1000 -> 13 -dqrmn307 remaindernear .13 1 -> 0.13 -dqrmn308 remaindernear 0.133 1 -> 0.133 -dqrmn309 remaindernear 0.1033 1 -> 0.1033 -dqrmn310 remaindernear 1.033 1 -> 0.033 -dqrmn311 remaindernear 10.33 1 -> 0.33 -dqrmn312 remaindernear 10.33 10 -> 0.33 -dqrmn313 remaindernear 103.3 1 -> 0.3 -dqrmn314 remaindernear 133 10 -> 3 -dqrmn315 remaindernear 1033 10 -> 3 -dqrmn316 remaindernear 1033 50 -> -17 -dqrmn317 remaindernear 101.0 3 -> -1.0 -dqrmn318 remaindernear 102.0 3 -> 0.0 -dqrmn319 remaindernear 103.0 3 -> 1.0 -dqrmn320 remaindernear 2.40 1 -> 0.40 -dqrmn321 remaindernear 2.400 1 -> 0.400 -dqrmn322 remaindernear 2.4 1 -> 0.4 -dqrmn323 remaindernear 2.4 2 -> 0.4 -dqrmn324 remaindernear 2.400 2 -> 0.400 -dqrmn325 remaindernear 1 0.3 -> 0.1 -dqrmn326 remaindernear 1 0.30 -> 0.10 -dqrmn327 remaindernear 1 0.300 -> 0.100 -dqrmn328 remaindernear 1 0.3000 -> 0.1000 -dqrmn329 remaindernear 1.0 0.3 -> 0.1 -dqrmn330 remaindernear 1.00 0.3 -> 0.10 -dqrmn331 remaindernear 1.000 0.3 -> 0.100 -dqrmn332 remaindernear 1.0000 0.3 -> 0.1000 -dqrmn333 remaindernear 0.5 2 -> 0.5 -dqrmn334 remaindernear 0.5 2.1 -> 0.5 -dqrmn335 remaindernear 0.5 2.01 -> 0.50 -dqrmn336 remaindernear 0.5 2.001 -> 0.500 -dqrmn337 remaindernear 0.50 2 -> 0.50 -dqrmn338 remaindernear 0.50 2.01 -> 0.50 -dqrmn339 remaindernear 0.50 2.001 -> 0.500 - -dqrmn340 remaindernear 0.5 0.5000001 -> -1E-7 -dqrmn341 remaindernear 0.5 0.50000001 -> -1E-8 -dqrmn342 remaindernear 0.5 0.500000001 -> -1E-9 -dqrmn343 remaindernear 0.5 0.5000000001 -> -1E-10 -dqrmn344 remaindernear 0.5 0.50000000001 -> -1E-11 -dqrmn345 remaindernear 0.5 0.4999999 -> 1E-7 -dqrmn346 remaindernear 0.5 0.49999999 -> 1E-8 -dqrmn347 remaindernear 0.5 0.499999999 -> 1E-9 -dqrmn348 remaindernear 0.5 0.4999999999 -> 1E-10 -dqrmn349 remaindernear 0.5 0.49999999999 -> 1E-11 -dqrmn350 remaindernear 0.5 0.499999999999 -> 1E-12 - -dqrmn351 remaindernear 0.03 7 -> 0.03 -dqrmn352 remaindernear 5 2 -> 1 -dqrmn353 remaindernear 4.1 2 -> 0.1 -dqrmn354 remaindernear 4.01 2 -> 0.01 -dqrmn355 remaindernear 4.001 2 -> 0.001 -dqrmn356 remaindernear 4.0001 2 -> 0.0001 -dqrmn357 remaindernear 4.00001 2 -> 0.00001 -dqrmn358 remaindernear 4.000001 2 -> 0.000001 -dqrmn359 remaindernear 4.0000001 2 -> 1E-7 - -dqrmn360 remaindernear 1.2 0.7345 -> -0.2690 -dqrmn361 remaindernear 0.8 12 -> 0.8 -dqrmn362 remaindernear 0.8 0.2 -> 0.0 -dqrmn363 remaindernear 0.8 0.3 -> -0.1 -dqrmn364 remaindernear 0.800 12 -> 0.800 -dqrmn365 remaindernear 0.800 1.7 -> 0.800 -dqrmn366 remaindernear 2.400 2 -> 0.400 - --- round to even -dqrmn371 remaindernear 121 2 -> 1 -dqrmn372 remaindernear 122 2 -> 0 -dqrmn373 remaindernear 123 2 -> -1 -dqrmn374 remaindernear 124 2 -> 0 -dqrmn375 remaindernear 125 2 -> 1 -dqrmn376 remaindernear 126 2 -> 0 -dqrmn377 remaindernear 127 2 -> -1 - -dqrmn381 remaindernear 12345 1 -> 0 -dqrmn382 remaindernear 12345 1.0001 -> -0.2344 -dqrmn383 remaindernear 12345 1.001 -> -0.333 -dqrmn384 remaindernear 12345 1.01 -> -0.23 -dqrmn385 remaindernear 12345 1.1 -> -0.3 -dqrmn386 remaindernear 12355 4 -> -1 -dqrmn387 remaindernear 12345 4 -> 1 -dqrmn388 remaindernear 12355 4.0001 -> -1.3089 -dqrmn389 remaindernear 12345 4.0001 -> 0.6914 -dqrmn390 remaindernear 12345 4.9 -> 1.9 -dqrmn391 remaindernear 12345 4.99 -> -0.26 -dqrmn392 remaindernear 12345 4.999 -> 2.469 -dqrmn393 remaindernear 12345 4.9999 -> 0.2469 -dqrmn394 remaindernear 12345 5 -> 0 -dqrmn395 remaindernear 12345 5.0001 -> -0.2469 -dqrmn396 remaindernear 12345 5.001 -> -2.469 -dqrmn397 remaindernear 12345 5.01 -> 0.36 -dqrmn398 remaindernear 12345 5.1 -> -2.1 - --- the nasty division-by-1 cases -dqrmn401 remaindernear 0.4 1 -> 0.4 -dqrmn402 remaindernear 0.45 1 -> 0.45 -dqrmn403 remaindernear 0.455 1 -> 0.455 -dqrmn404 remaindernear 0.4555 1 -> 0.4555 -dqrmn405 remaindernear 0.45555 1 -> 0.45555 -dqrmn406 remaindernear 0.455555 1 -> 0.455555 -dqrmn407 remaindernear 0.4555555 1 -> 0.4555555 -dqrmn408 remaindernear 0.45555555 1 -> 0.45555555 -dqrmn409 remaindernear 0.455555555 1 -> 0.455555555 --- with spill... [412 exercises sticktab loop] -dqrmn411 remaindernear 0.5 1 -> 0.5 -dqrmn412 remaindernear 0.55 1 -> -0.45 -dqrmn413 remaindernear 0.555 1 -> -0.445 -dqrmn414 remaindernear 0.5555 1 -> -0.4445 -dqrmn415 remaindernear 0.55555 1 -> -0.44445 -dqrmn416 remaindernear 0.555555 1 -> -0.444445 -dqrmn417 remaindernear 0.5555555 1 -> -0.4444445 -dqrmn418 remaindernear 0.55555555 1 -> -0.44444445 -dqrmn419 remaindernear 0.555555555 1 -> -0.444444445 - --- folddowns -dqrmn421 remaindernear 1E+6144 1 -> NaN Division_impossible -dqrmn422 remaindernear 1E+6144 1E+6143 -> 0E+6111 Clamped -dqrmn423 remaindernear 1E+6144 2E+6143 -> 0E+6111 Clamped -dqrmn424 remaindernear 1E+6144 3E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped -dqrmn425 remaindernear 1E+6144 4E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped -dqrmn426 remaindernear 1E+6144 5E+6143 -> 0E+6111 Clamped -dqrmn427 remaindernear 1E+6144 6E+6143 -> -2.00000000000000000000000000000000E+6143 Clamped -dqrmn428 remaindernear 1E+6144 7E+6143 -> 3.00000000000000000000000000000000E+6143 Clamped -dqrmn429 remaindernear 1E+6144 8E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped -dqrmn430 remaindernear 1E+6144 9E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped --- tinies -dqrmn431 remaindernear 1E-6175 1E-6176 -> 0E-6176 -dqrmn432 remaindernear 1E-6175 2E-6176 -> 0E-6176 -dqrmn433 remaindernear 1E-6175 3E-6176 -> 1E-6176 Subnormal -dqrmn434 remaindernear 1E-6175 4E-6176 -> 2E-6176 Subnormal -dqrmn435 remaindernear 1E-6175 5E-6176 -> 0E-6176 -dqrmn436 remaindernear 1E-6175 6E-6176 -> -2E-6176 Subnormal -dqrmn437 remaindernear 1E-6175 7E-6176 -> 3E-6176 Subnormal -dqrmn438 remaindernear 1E-6175 8E-6176 -> 2E-6176 Subnormal -dqrmn439 remaindernear 1E-6175 9E-6176 -> 1E-6176 Subnormal -dqrmn440 remaindernear 1E-6175 10E-6176 -> 0E-6176 -dqrmn441 remaindernear 1E-6175 11E-6176 -> -1E-6176 Subnormal -dqrmn442 remaindernear 100E-6175 11E-6176 -> -1E-6176 Subnormal -dqrmn443 remaindernear 100E-6175 20E-6176 -> 0E-6176 -dqrmn444 remaindernear 100E-6175 21E-6176 -> -8E-6176 Subnormal -dqrmn445 remaindernear 100E-6175 30E-6176 -> 1.0E-6175 Subnormal - --- zero signs -dqrmn650 remaindernear 1 1 -> 0 -dqrmn651 remaindernear -1 1 -> -0 -dqrmn652 remaindernear 1 -1 -> 0 -dqrmn653 remaindernear -1 -1 -> -0 -dqrmn654 remaindernear 0 1 -> 0 -dqrmn655 remaindernear -0 1 -> -0 -dqrmn656 remaindernear 0 -1 -> 0 -dqrmn657 remaindernear -0 -1 -> -0 -dqrmn658 remaindernear 0.00 1 -> 0.00 -dqrmn659 remaindernear -0.00 1 -> -0.00 - --- Specials -dqrmn680 remaindernear Inf -Inf -> NaN Invalid_operation -dqrmn681 remaindernear Inf -1000 -> NaN Invalid_operation -dqrmn682 remaindernear Inf -1 -> NaN Invalid_operation -dqrmn683 remaindernear Inf 0 -> NaN Invalid_operation -dqrmn684 remaindernear Inf -0 -> NaN Invalid_operation -dqrmn685 remaindernear Inf 1 -> NaN Invalid_operation -dqrmn686 remaindernear Inf 1000 -> NaN Invalid_operation -dqrmn687 remaindernear Inf Inf -> NaN Invalid_operation -dqrmn688 remaindernear -1000 Inf -> -1000 -dqrmn689 remaindernear -Inf Inf -> NaN Invalid_operation -dqrmn691 remaindernear -1 Inf -> -1 -dqrmn692 remaindernear 0 Inf -> 0 -dqrmn693 remaindernear -0 Inf -> -0 -dqrmn694 remaindernear 1 Inf -> 1 -dqrmn695 remaindernear 1000 Inf -> 1000 -dqrmn696 remaindernear Inf Inf -> NaN Invalid_operation - -dqrmn700 remaindernear -Inf -Inf -> NaN Invalid_operation -dqrmn701 remaindernear -Inf -1000 -> NaN Invalid_operation -dqrmn702 remaindernear -Inf -1 -> NaN Invalid_operation -dqrmn703 remaindernear -Inf -0 -> NaN Invalid_operation -dqrmn704 remaindernear -Inf 0 -> NaN Invalid_operation -dqrmn705 remaindernear -Inf 1 -> NaN Invalid_operation -dqrmn706 remaindernear -Inf 1000 -> NaN Invalid_operation -dqrmn707 remaindernear -Inf Inf -> NaN Invalid_operation -dqrmn708 remaindernear -Inf -Inf -> NaN Invalid_operation -dqrmn709 remaindernear -1000 Inf -> -1000 -dqrmn710 remaindernear -1 -Inf -> -1 -dqrmn711 remaindernear -0 -Inf -> -0 -dqrmn712 remaindernear 0 -Inf -> 0 -dqrmn713 remaindernear 1 -Inf -> 1 -dqrmn714 remaindernear 1000 -Inf -> 1000 -dqrmn715 remaindernear Inf -Inf -> NaN Invalid_operation - -dqrmn721 remaindernear NaN -Inf -> NaN -dqrmn722 remaindernear NaN -1000 -> NaN -dqrmn723 remaindernear NaN -1 -> NaN -dqrmn724 remaindernear NaN -0 -> NaN -dqrmn725 remaindernear -NaN 0 -> -NaN -dqrmn726 remaindernear NaN 1 -> NaN -dqrmn727 remaindernear NaN 1000 -> NaN -dqrmn728 remaindernear NaN Inf -> NaN -dqrmn729 remaindernear NaN -NaN -> NaN -dqrmn730 remaindernear -Inf NaN -> NaN -dqrmn731 remaindernear -1000 NaN -> NaN -dqrmn732 remaindernear -1 NaN -> NaN -dqrmn733 remaindernear -0 -NaN -> -NaN -dqrmn734 remaindernear 0 NaN -> NaN -dqrmn735 remaindernear 1 -NaN -> -NaN -dqrmn736 remaindernear 1000 NaN -> NaN -dqrmn737 remaindernear Inf NaN -> NaN - -dqrmn741 remaindernear sNaN -Inf -> NaN Invalid_operation -dqrmn742 remaindernear sNaN -1000 -> NaN Invalid_operation -dqrmn743 remaindernear -sNaN -1 -> -NaN Invalid_operation -dqrmn744 remaindernear sNaN -0 -> NaN Invalid_operation -dqrmn745 remaindernear sNaN 0 -> NaN Invalid_operation -dqrmn746 remaindernear sNaN 1 -> NaN Invalid_operation -dqrmn747 remaindernear sNaN 1000 -> NaN Invalid_operation -dqrmn749 remaindernear sNaN NaN -> NaN Invalid_operation -dqrmn750 remaindernear sNaN sNaN -> NaN Invalid_operation -dqrmn751 remaindernear NaN sNaN -> NaN Invalid_operation -dqrmn752 remaindernear -Inf sNaN -> NaN Invalid_operation -dqrmn753 remaindernear -1000 sNaN -> NaN Invalid_operation -dqrmn754 remaindernear -1 sNaN -> NaN Invalid_operation -dqrmn755 remaindernear -0 sNaN -> NaN Invalid_operation -dqrmn756 remaindernear 0 sNaN -> NaN Invalid_operation -dqrmn757 remaindernear 1 sNaN -> NaN Invalid_operation -dqrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation -dqrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation - --- propagating NaNs -dqrmn760 remaindernear NaN1 NaN7 -> NaN1 -dqrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation -dqrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation -dqrmn763 remaindernear sNaN4 sNaN10 -> NaN4 Invalid_operation -dqrmn764 remaindernear 15 NaN11 -> NaN11 -dqrmn765 remaindernear NaN6 NaN12 -> NaN6 -dqrmn766 remaindernear Inf NaN13 -> NaN13 -dqrmn767 remaindernear NaN14 -Inf -> NaN14 -dqrmn768 remaindernear 0 NaN15 -> NaN15 -dqrmn769 remaindernear NaN16 -0 -> NaN16 - --- edge cases of impossible -dqrmn770 remaindernear 1234500000000000000000067890123456 10 -> -4 -dqrmn771 remaindernear 1234500000000000000000067890123456 1 -> 0 -dqrmn772 remaindernear 1234500000000000000000067890123456 0.1 -> NaN Division_impossible -dqrmn773 remaindernear 1234500000000000000000067890123456 0.01 -> NaN Division_impossible - --- long operand checks -dqrmn801 remaindernear 12345678000 100 -> 0 -dqrmn802 remaindernear 1 12345678000 -> 1 -dqrmn803 remaindernear 1234567800 10 -> 0 -dqrmn804 remaindernear 1 1234567800 -> 1 -dqrmn805 remaindernear 1234567890 10 -> 0 -dqrmn806 remaindernear 1 1234567890 -> 1 -dqrmn807 remaindernear 1234567891 10 -> 1 -dqrmn808 remaindernear 1 1234567891 -> 1 -dqrmn809 remaindernear 12345678901 100 -> 1 -dqrmn810 remaindernear 1 12345678901 -> 1 -dqrmn811 remaindernear 1234567896 10 -> -4 -dqrmn812 remaindernear 1 1234567896 -> 1 - -dqrmn821 remaindernear 12345678000 100 -> 0 -dqrmn822 remaindernear 1 12345678000 -> 1 -dqrmn823 remaindernear 1234567800 10 -> 0 -dqrmn824 remaindernear 1 1234567800 -> 1 -dqrmn825 remaindernear 1234567890 10 -> 0 -dqrmn826 remaindernear 1 1234567890 -> 1 -dqrmn827 remaindernear 1234567891 10 -> 1 -dqrmn828 remaindernear 1 1234567891 -> 1 -dqrmn829 remaindernear 12345678901 100 -> 1 -dqrmn830 remaindernear 1 12345678901 -> 1 -dqrmn831 remaindernear 1234567896 10 -> -4 -dqrmn832 remaindernear 1 1234567896 -> 1 - --- from divideint -dqrmn840 remaindernear 100000000.0 1 -> 0.0 -dqrmn841 remaindernear 100000000.4 1 -> 0.4 -dqrmn842 remaindernear 100000000.5 1 -> 0.5 -dqrmn843 remaindernear 100000000.9 1 -> -0.1 -dqrmn844 remaindernear 100000000.999 1 -> -0.001 -dqrmn850 remaindernear 100000003 5 -> -2 -dqrmn851 remaindernear 10000003 5 -> -2 -dqrmn852 remaindernear 1000003 5 -> -2 -dqrmn853 remaindernear 100003 5 -> -2 -dqrmn854 remaindernear 10003 5 -> -2 -dqrmn855 remaindernear 1003 5 -> -2 -dqrmn856 remaindernear 103 5 -> -2 -dqrmn857 remaindernear 13 5 -> -2 -dqrmn858 remaindernear 1 5 -> 1 - --- Vladimir's cases 1234567890123456 -dqrmn860 remaindernear 123.0e1 1000000000000000 -> 1230 -dqrmn861 remaindernear 1230 1000000000000000 -> 1230 -dqrmn862 remaindernear 12.3e2 1000000000000000 -> 1230 -dqrmn863 remaindernear 1.23e3 1000000000000000 -> 1230 -dqrmn864 remaindernear 123e1 1000000000000000 -> 1230 -dqrmn870 remaindernear 123e1 1000000000000000 -> 1230 -dqrmn871 remaindernear 123e1 100000000000000 -> 1230 -dqrmn872 remaindernear 123e1 10000000000000 -> 1230 -dqrmn873 remaindernear 123e1 1000000000000 -> 1230 -dqrmn874 remaindernear 123e1 100000000000 -> 1230 -dqrmn875 remaindernear 123e1 10000000000 -> 1230 -dqrmn876 remaindernear 123e1 1000000000 -> 1230 -dqrmn877 remaindernear 123e1 100000000 -> 1230 -dqrmn878 remaindernear 1230 100000000 -> 1230 -dqrmn879 remaindernear 123e1 10000000 -> 1230 -dqrmn880 remaindernear 123e1 1000000 -> 1230 -dqrmn881 remaindernear 123e1 100000 -> 1230 -dqrmn882 remaindernear 123e1 10000 -> 1230 -dqrmn883 remaindernear 123e1 1000 -> 230 -dqrmn884 remaindernear 123e1 100 -> 30 -dqrmn885 remaindernear 123e1 10 -> 0 -dqrmn886 remaindernear 123e1 1 -> 0 - -dqrmn890 remaindernear 123e1 2000000000000000 -> 1230 -dqrmn891 remaindernear 123e1 200000000000000 -> 1230 -dqrmn892 remaindernear 123e1 20000000000000 -> 1230 -dqrmn893 remaindernear 123e1 2000000000000 -> 1230 -dqrmn894 remaindernear 123e1 200000000000 -> 1230 -dqrmn895 remaindernear 123e1 20000000000 -> 1230 -dqrmn896 remaindernear 123e1 2000000000 -> 1230 -dqrmn897 remaindernear 123e1 200000000 -> 1230 -dqrmn899 remaindernear 123e1 20000000 -> 1230 -dqrmn900 remaindernear 123e1 2000000 -> 1230 -dqrmn901 remaindernear 123e1 200000 -> 1230 -dqrmn902 remaindernear 123e1 20000 -> 1230 -dqrmn903 remaindernear 123e1 2000 -> -770 -dqrmn904 remaindernear 123e1 200 -> 30 -dqrmn905 remaindernear 123e1 20 -> -10 -dqrmn906 remaindernear 123e1 2 -> 0 - -dqrmn910 remaindernear 123e1 5000000000000000 -> 1230 -dqrmn911 remaindernear 123e1 500000000000000 -> 1230 -dqrmn912 remaindernear 123e1 50000000000000 -> 1230 -dqrmn913 remaindernear 123e1 5000000000000 -> 1230 -dqrmn914 remaindernear 123e1 500000000000 -> 1230 -dqrmn915 remaindernear 123e1 50000000000 -> 1230 -dqrmn916 remaindernear 123e1 5000000000 -> 1230 -dqrmn917 remaindernear 123e1 500000000 -> 1230 -dqrmn919 remaindernear 123e1 50000000 -> 1230 -dqrmn920 remaindernear 123e1 5000000 -> 1230 -dqrmn921 remaindernear 123e1 500000 -> 1230 -dqrmn922 remaindernear 123e1 50000 -> 1230 -dqrmn923 remaindernear 123e1 5000 -> 1230 -dqrmn924 remaindernear 123e1 500 -> 230 -dqrmn925 remaindernear 123e1 50 -> -20 -dqrmn926 remaindernear 123e1 5 -> 0 - -dqrmn930 remaindernear 123e1 9000000000000000 -> 1230 -dqrmn931 remaindernear 123e1 900000000000000 -> 1230 -dqrmn932 remaindernear 123e1 90000000000000 -> 1230 -dqrmn933 remaindernear 123e1 9000000000000 -> 1230 -dqrmn934 remaindernear 123e1 900000000000 -> 1230 -dqrmn935 remaindernear 123e1 90000000000 -> 1230 -dqrmn936 remaindernear 123e1 9000000000 -> 1230 -dqrmn937 remaindernear 123e1 900000000 -> 1230 -dqrmn939 remaindernear 123e1 90000000 -> 1230 -dqrmn940 remaindernear 123e1 9000000 -> 1230 -dqrmn941 remaindernear 123e1 900000 -> 1230 -dqrmn942 remaindernear 123e1 90000 -> 1230 -dqrmn943 remaindernear 123e1 9000 -> 1230 -dqrmn944 remaindernear 123e1 900 -> 330 -dqrmn945 remaindernear 123e1 90 -> -30 -dqrmn946 remaindernear 123e1 9 -> -3 - -dqrmn950 remaindernear 123e1 1000000000000000 -> 1230 -dqrmn961 remaindernear 123e1 2999999999999999 -> 1230 -dqrmn962 remaindernear 123e1 3999999999999999 -> 1230 -dqrmn963 remaindernear 123e1 4999999999999999 -> 1230 -dqrmn964 remaindernear 123e1 5999999999999999 -> 1230 -dqrmn965 remaindernear 123e1 6999999999999999 -> 1230 -dqrmn966 remaindernear 123e1 7999999999999999 -> 1230 -dqrmn967 remaindernear 123e1 8999999999999999 -> 1230 -dqrmn968 remaindernear 123e1 9999999999999999 -> 1230 -dqrmn969 remaindernear 123e1 9876543210987654 -> 1230 - -dqrmn980 remaindernear 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally - --- overflow and underflow tests [from divide] -dqrmn1051 remaindernear 1e+277 1e-311 -> NaN Division_impossible -dqrmn1052 remaindernear 1e+277 -1e-311 -> NaN Division_impossible -dqrmn1053 remaindernear -1e+277 1e-311 -> NaN Division_impossible -dqrmn1054 remaindernear -1e+277 -1e-311 -> NaN Division_impossible -dqrmn1055 remaindernear 1e-277 1e+311 -> 1E-277 -dqrmn1056 remaindernear 1e-277 -1e+311 -> 1E-277 -dqrmn1057 remaindernear -1e-277 1e+311 -> -1E-277 -dqrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277 - --- Gyuris example -dqrmn1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143 - --- destructive subtract -dqrmn1101 remaindernear 1234567890123456789012345678901234 1.000000000000000000000000000000001 -> -0.234567890123456789012345678901233 -dqrmn1102 remaindernear 1234567890123456789012345678901234 1.00000000000000000000000000000001 -> -0.34567890123456789012345678901222 -dqrmn1103 remaindernear 1234567890123456789012345678901234 1.0000000000000000000000000000001 -> -0.4567890123456789012345678901111 -dqrmn1104 remaindernear 1234567890123456789012345678901255 4.000000000000000000000000000000001 -> -1.308641972530864197253086419725314 -dqrmn1105 remaindernear 1234567890123456789012345678901234 4.000000000000000000000000000000001 -> 1.691358027469135802746913580274692 -dqrmn1106 remaindernear 1234567890123456789012345678901234 4.9999999999999999999999999999999 -> -1.3086421975308642197530864219748 -dqrmn1107 remaindernear 1234567890123456789012345678901234 4.99999999999999999999999999999999 -> 1.46913578024691357802469135780247 -dqrmn1108 remaindernear 1234567890123456789012345678901234 4.999999999999999999999999999999999 -> -0.753086421975308642197530864219753 -dqrmn1109 remaindernear 1234567890123456789012345678901234 5.000000000000000000000000000000001 -> -1.246913578024691357802469135780247 -dqrmn1110 remaindernear 1234567890123456789012345678901234 5.00000000000000000000000000000001 -> 1.53086421975308642197530864219754 -dqrmn1111 remaindernear 1234567890123456789012345678901234 5.0000000000000000000000000000001 -> -0.6913578024691357802469135780242 - --- Null tests -dqrmn1000 remaindernear 10 # -> NaN Invalid_operation -dqrmn1001 remaindernear # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqRemainderNear.decTest -- decQuad remainder-near -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks (as base, above) +dqrmn001 remaindernear 1 1 -> 0 +dqrmn002 remaindernear 2 1 -> 0 +dqrmn003 remaindernear 1 2 -> 1 +dqrmn004 remaindernear 2 2 -> 0 +dqrmn005 remaindernear 0 1 -> 0 +dqrmn006 remaindernear 0 2 -> 0 +dqrmn007 remaindernear 1 3 -> 1 +dqrmn008 remaindernear 2 3 -> -1 +dqrmn009 remaindernear 3 3 -> 0 + +dqrmn010 remaindernear 2.4 1 -> 0.4 +dqrmn011 remaindernear 2.4 -1 -> 0.4 +dqrmn012 remaindernear -2.4 1 -> -0.4 +dqrmn013 remaindernear -2.4 -1 -> -0.4 +dqrmn014 remaindernear 2.40 1 -> 0.40 +dqrmn015 remaindernear 2.400 1 -> 0.400 +dqrmn016 remaindernear 2.4 2 -> 0.4 +dqrmn017 remaindernear 2.400 2 -> 0.400 +dqrmn018 remaindernear 2. 2 -> 0 +dqrmn019 remaindernear 20 20 -> 0 + +dqrmn020 remaindernear 187 187 -> 0 +dqrmn021 remaindernear 5 2 -> 1 +dqrmn022 remaindernear 5 2.0 -> 1.0 +dqrmn023 remaindernear 5 2.000 -> 1.000 +dqrmn024 remaindernear 5 0.200 -> 0.000 +dqrmn025 remaindernear 5 0.200 -> 0.000 + +dqrmn030 remaindernear 1 2 -> 1 +dqrmn031 remaindernear 1 4 -> 1 +dqrmn032 remaindernear 1 8 -> 1 + +dqrmn033 remaindernear 1 16 -> 1 +dqrmn034 remaindernear 1 32 -> 1 +dqrmn035 remaindernear 1 64 -> 1 +dqrmn040 remaindernear 1 -2 -> 1 +dqrmn041 remaindernear 1 -4 -> 1 +dqrmn042 remaindernear 1 -8 -> 1 +dqrmn043 remaindernear 1 -16 -> 1 +dqrmn044 remaindernear 1 -32 -> 1 +dqrmn045 remaindernear 1 -64 -> 1 +dqrmn050 remaindernear -1 2 -> -1 +dqrmn051 remaindernear -1 4 -> -1 +dqrmn052 remaindernear -1 8 -> -1 +dqrmn053 remaindernear -1 16 -> -1 +dqrmn054 remaindernear -1 32 -> -1 +dqrmn055 remaindernear -1 64 -> -1 +dqrmn060 remaindernear -1 -2 -> -1 +dqrmn061 remaindernear -1 -4 -> -1 +dqrmn062 remaindernear -1 -8 -> -1 +dqrmn063 remaindernear -1 -16 -> -1 +dqrmn064 remaindernear -1 -32 -> -1 +dqrmn065 remaindernear -1 -64 -> -1 + +dqrmn066 remaindernear 9.9 1 -> -0.1 +dqrmn067 remaindernear 99.7 1 -> -0.3 +dqrmn068 remaindernear 999999999 1 -> 0 +dqrmn069 remaindernear 999999999.4 1 -> 0.4 +dqrmn070 remaindernear 999999999.5 1 -> -0.5 +dqrmn071 remaindernear 999999999.9 1 -> -0.1 +dqrmn072 remaindernear 999999999.999 1 -> -0.001 +dqrmn073 remaindernear 999999.999999 1 -> -0.000001 +dqrmn074 remaindernear 9 1 -> 0 +dqrmn075 remaindernear 9999999999999999 1 -> 0 +dqrmn076 remaindernear 9999999999999999 2 -> -1 +dqrmn077 remaindernear 9999999999999999 3 -> 0 +dqrmn078 remaindernear 9999999999999999 4 -> -1 + +dqrmn080 remaindernear 0. 1 -> 0 +dqrmn081 remaindernear .0 1 -> 0.0 +dqrmn082 remaindernear 0.00 1 -> 0.00 +dqrmn083 remaindernear 0.00E+9 1 -> 0 +dqrmn084 remaindernear 0.00E+3 1 -> 0 +dqrmn085 remaindernear 0.00E+2 1 -> 0 +dqrmn086 remaindernear 0.00E+1 1 -> 0.0 +dqrmn087 remaindernear 0.00E+0 1 -> 0.00 +dqrmn088 remaindernear 0.00E-0 1 -> 0.00 +dqrmn089 remaindernear 0.00E-1 1 -> 0.000 +dqrmn090 remaindernear 0.00E-2 1 -> 0.0000 +dqrmn091 remaindernear 0.00E-3 1 -> 0.00000 +dqrmn092 remaindernear 0.00E-4 1 -> 0.000000 +dqrmn093 remaindernear 0.00E-5 1 -> 0E-7 +dqrmn094 remaindernear 0.00E-6 1 -> 0E-8 +dqrmn095 remaindernear 0.0000E-50 1 -> 0E-54 + +-- Various flavours of remaindernear by 0 +dqrmn101 remaindernear 0 0 -> NaN Division_undefined +dqrmn102 remaindernear 0 -0 -> NaN Division_undefined +dqrmn103 remaindernear -0 0 -> NaN Division_undefined +dqrmn104 remaindernear -0 -0 -> NaN Division_undefined +dqrmn105 remaindernear 0.0E5 0 -> NaN Division_undefined +dqrmn106 remaindernear 0.000 0 -> NaN Division_undefined +-- [Some think this next group should be Division_by_zero exception, but +-- IEEE 854 is explicit that it is Invalid operation .. for +-- remainder-near, anyway] +dqrmn107 remaindernear 0.0001 0 -> NaN Invalid_operation +dqrmn108 remaindernear 0.01 0 -> NaN Invalid_operation +dqrmn109 remaindernear 0.1 0 -> NaN Invalid_operation +dqrmn110 remaindernear 1 0 -> NaN Invalid_operation +dqrmn111 remaindernear 1 0.0 -> NaN Invalid_operation +dqrmn112 remaindernear 10 0.0 -> NaN Invalid_operation +dqrmn113 remaindernear 1E+100 0.0 -> NaN Invalid_operation +dqrmn114 remaindernear 1E+380 0 -> NaN Invalid_operation +dqrmn115 remaindernear 0.0001 -0 -> NaN Invalid_operation +dqrmn116 remaindernear 0.01 -0 -> NaN Invalid_operation +dqrmn119 remaindernear 0.1 -0 -> NaN Invalid_operation +dqrmn120 remaindernear 1 -0 -> NaN Invalid_operation +dqrmn121 remaindernear 1 -0.0 -> NaN Invalid_operation +dqrmn122 remaindernear 10 -0.0 -> NaN Invalid_operation +dqrmn123 remaindernear 1E+100 -0.0 -> NaN Invalid_operation +dqrmn124 remaindernear 1E+384 -0 -> NaN Invalid_operation +-- and zeros on left +dqrmn130 remaindernear 0 1 -> 0 +dqrmn131 remaindernear 0 -1 -> 0 +dqrmn132 remaindernear 0.0 1 -> 0.0 +dqrmn133 remaindernear 0.0 -1 -> 0.0 +dqrmn134 remaindernear -0 1 -> -0 +dqrmn135 remaindernear -0 -1 -> -0 +dqrmn136 remaindernear -0.0 1 -> -0.0 +dqrmn137 remaindernear -0.0 -1 -> -0.0 + +-- 0.5ers +dqrmn143 remaindernear 0.5 2 -> 0.5 +dqrmn144 remaindernear 0.5 2.1 -> 0.5 +dqrmn145 remaindernear 0.5 2.01 -> 0.50 +dqrmn146 remaindernear 0.5 2.001 -> 0.500 +dqrmn147 remaindernear 0.50 2 -> 0.50 +dqrmn148 remaindernear 0.50 2.01 -> 0.50 +dqrmn149 remaindernear 0.50 2.001 -> 0.500 + +-- steadies +dqrmn150 remaindernear 1 1 -> 0 +dqrmn151 remaindernear 1 2 -> 1 +dqrmn152 remaindernear 1 3 -> 1 +dqrmn153 remaindernear 1 4 -> 1 +dqrmn154 remaindernear 1 5 -> 1 +dqrmn155 remaindernear 1 6 -> 1 +dqrmn156 remaindernear 1 7 -> 1 +dqrmn157 remaindernear 1 8 -> 1 +dqrmn158 remaindernear 1 9 -> 1 +dqrmn159 remaindernear 1 10 -> 1 +dqrmn160 remaindernear 1 1 -> 0 +dqrmn161 remaindernear 2 1 -> 0 +dqrmn162 remaindernear 3 1 -> 0 +dqrmn163 remaindernear 4 1 -> 0 +dqrmn164 remaindernear 5 1 -> 0 +dqrmn165 remaindernear 6 1 -> 0 +dqrmn166 remaindernear 7 1 -> 0 +dqrmn167 remaindernear 8 1 -> 0 +dqrmn168 remaindernear 9 1 -> 0 +dqrmn169 remaindernear 10 1 -> 0 + +-- some differences from remainder +dqrmn171 remaindernear 0.4 1.020 -> 0.400 +dqrmn172 remaindernear 0.50 1.020 -> 0.500 +dqrmn173 remaindernear 0.51 1.020 -> 0.510 +dqrmn174 remaindernear 0.52 1.020 -> -0.500 +dqrmn175 remaindernear 0.6 1.020 -> -0.420 + +-- More flavours of remaindernear by 0 +dqrmn201 remaindernear 0 0 -> NaN Division_undefined +dqrmn202 remaindernear 0.0E5 0 -> NaN Division_undefined +dqrmn203 remaindernear 0.000 0 -> NaN Division_undefined +dqrmn204 remaindernear 0.0001 0 -> NaN Invalid_operation +dqrmn205 remaindernear 0.01 0 -> NaN Invalid_operation +dqrmn206 remaindernear 0.1 0 -> NaN Invalid_operation +dqrmn207 remaindernear 1 0 -> NaN Invalid_operation +dqrmn208 remaindernear 1 0.0 -> NaN Invalid_operation +dqrmn209 remaindernear 10 0.0 -> NaN Invalid_operation +dqrmn210 remaindernear 1E+100 0.0 -> NaN Invalid_operation +dqrmn211 remaindernear 1E+380 0 -> NaN Invalid_operation + +-- tests from the extended specification +dqrmn221 remaindernear 2.1 3 -> -0.9 +dqrmn222 remaindernear 10 6 -> -2 +dqrmn223 remaindernear 10 3 -> 1 +dqrmn224 remaindernear -10 3 -> -1 +dqrmn225 remaindernear 10.2 1 -> 0.2 +dqrmn226 remaindernear 10 0.3 -> 0.1 +dqrmn227 remaindernear 3.6 1.3 -> -0.3 + +-- some differences from remainder +dqrmn231 remaindernear -0.4 1.020 -> -0.400 +dqrmn232 remaindernear -0.50 1.020 -> -0.500 +dqrmn233 remaindernear -0.51 1.020 -> -0.510 +dqrmn234 remaindernear -0.52 1.020 -> 0.500 +dqrmn235 remaindernear -0.6 1.020 -> 0.420 + +-- high Xs +dqrmn240 remaindernear 1E+2 1.00 -> 0.00 + +-- dqrmn3xx are from DiagBigDecimal +dqrmn301 remaindernear 1 3 -> 1 +dqrmn302 remaindernear 5 5 -> 0 +dqrmn303 remaindernear 13 10 -> 3 +dqrmn304 remaindernear 13 50 -> 13 +dqrmn305 remaindernear 13 100 -> 13 +dqrmn306 remaindernear 13 1000 -> 13 +dqrmn307 remaindernear .13 1 -> 0.13 +dqrmn308 remaindernear 0.133 1 -> 0.133 +dqrmn309 remaindernear 0.1033 1 -> 0.1033 +dqrmn310 remaindernear 1.033 1 -> 0.033 +dqrmn311 remaindernear 10.33 1 -> 0.33 +dqrmn312 remaindernear 10.33 10 -> 0.33 +dqrmn313 remaindernear 103.3 1 -> 0.3 +dqrmn314 remaindernear 133 10 -> 3 +dqrmn315 remaindernear 1033 10 -> 3 +dqrmn316 remaindernear 1033 50 -> -17 +dqrmn317 remaindernear 101.0 3 -> -1.0 +dqrmn318 remaindernear 102.0 3 -> 0.0 +dqrmn319 remaindernear 103.0 3 -> 1.0 +dqrmn320 remaindernear 2.40 1 -> 0.40 +dqrmn321 remaindernear 2.400 1 -> 0.400 +dqrmn322 remaindernear 2.4 1 -> 0.4 +dqrmn323 remaindernear 2.4 2 -> 0.4 +dqrmn324 remaindernear 2.400 2 -> 0.400 +dqrmn325 remaindernear 1 0.3 -> 0.1 +dqrmn326 remaindernear 1 0.30 -> 0.10 +dqrmn327 remaindernear 1 0.300 -> 0.100 +dqrmn328 remaindernear 1 0.3000 -> 0.1000 +dqrmn329 remaindernear 1.0 0.3 -> 0.1 +dqrmn330 remaindernear 1.00 0.3 -> 0.10 +dqrmn331 remaindernear 1.000 0.3 -> 0.100 +dqrmn332 remaindernear 1.0000 0.3 -> 0.1000 +dqrmn333 remaindernear 0.5 2 -> 0.5 +dqrmn334 remaindernear 0.5 2.1 -> 0.5 +dqrmn335 remaindernear 0.5 2.01 -> 0.50 +dqrmn336 remaindernear 0.5 2.001 -> 0.500 +dqrmn337 remaindernear 0.50 2 -> 0.50 +dqrmn338 remaindernear 0.50 2.01 -> 0.50 +dqrmn339 remaindernear 0.50 2.001 -> 0.500 + +dqrmn340 remaindernear 0.5 0.5000001 -> -1E-7 +dqrmn341 remaindernear 0.5 0.50000001 -> -1E-8 +dqrmn342 remaindernear 0.5 0.500000001 -> -1E-9 +dqrmn343 remaindernear 0.5 0.5000000001 -> -1E-10 +dqrmn344 remaindernear 0.5 0.50000000001 -> -1E-11 +dqrmn345 remaindernear 0.5 0.4999999 -> 1E-7 +dqrmn346 remaindernear 0.5 0.49999999 -> 1E-8 +dqrmn347 remaindernear 0.5 0.499999999 -> 1E-9 +dqrmn348 remaindernear 0.5 0.4999999999 -> 1E-10 +dqrmn349 remaindernear 0.5 0.49999999999 -> 1E-11 +dqrmn350 remaindernear 0.5 0.499999999999 -> 1E-12 + +dqrmn351 remaindernear 0.03 7 -> 0.03 +dqrmn352 remaindernear 5 2 -> 1 +dqrmn353 remaindernear 4.1 2 -> 0.1 +dqrmn354 remaindernear 4.01 2 -> 0.01 +dqrmn355 remaindernear 4.001 2 -> 0.001 +dqrmn356 remaindernear 4.0001 2 -> 0.0001 +dqrmn357 remaindernear 4.00001 2 -> 0.00001 +dqrmn358 remaindernear 4.000001 2 -> 0.000001 +dqrmn359 remaindernear 4.0000001 2 -> 1E-7 + +dqrmn360 remaindernear 1.2 0.7345 -> -0.2690 +dqrmn361 remaindernear 0.8 12 -> 0.8 +dqrmn362 remaindernear 0.8 0.2 -> 0.0 +dqrmn363 remaindernear 0.8 0.3 -> -0.1 +dqrmn364 remaindernear 0.800 12 -> 0.800 +dqrmn365 remaindernear 0.800 1.7 -> 0.800 +dqrmn366 remaindernear 2.400 2 -> 0.400 + +-- round to even +dqrmn371 remaindernear 121 2 -> 1 +dqrmn372 remaindernear 122 2 -> 0 +dqrmn373 remaindernear 123 2 -> -1 +dqrmn374 remaindernear 124 2 -> 0 +dqrmn375 remaindernear 125 2 -> 1 +dqrmn376 remaindernear 126 2 -> 0 +dqrmn377 remaindernear 127 2 -> -1 + +dqrmn381 remaindernear 12345 1 -> 0 +dqrmn382 remaindernear 12345 1.0001 -> -0.2344 +dqrmn383 remaindernear 12345 1.001 -> -0.333 +dqrmn384 remaindernear 12345 1.01 -> -0.23 +dqrmn385 remaindernear 12345 1.1 -> -0.3 +dqrmn386 remaindernear 12355 4 -> -1 +dqrmn387 remaindernear 12345 4 -> 1 +dqrmn388 remaindernear 12355 4.0001 -> -1.3089 +dqrmn389 remaindernear 12345 4.0001 -> 0.6914 +dqrmn390 remaindernear 12345 4.9 -> 1.9 +dqrmn391 remaindernear 12345 4.99 -> -0.26 +dqrmn392 remaindernear 12345 4.999 -> 2.469 +dqrmn393 remaindernear 12345 4.9999 -> 0.2469 +dqrmn394 remaindernear 12345 5 -> 0 +dqrmn395 remaindernear 12345 5.0001 -> -0.2469 +dqrmn396 remaindernear 12345 5.001 -> -2.469 +dqrmn397 remaindernear 12345 5.01 -> 0.36 +dqrmn398 remaindernear 12345 5.1 -> -2.1 + +-- the nasty division-by-1 cases +dqrmn401 remaindernear 0.4 1 -> 0.4 +dqrmn402 remaindernear 0.45 1 -> 0.45 +dqrmn403 remaindernear 0.455 1 -> 0.455 +dqrmn404 remaindernear 0.4555 1 -> 0.4555 +dqrmn405 remaindernear 0.45555 1 -> 0.45555 +dqrmn406 remaindernear 0.455555 1 -> 0.455555 +dqrmn407 remaindernear 0.4555555 1 -> 0.4555555 +dqrmn408 remaindernear 0.45555555 1 -> 0.45555555 +dqrmn409 remaindernear 0.455555555 1 -> 0.455555555 +-- with spill... [412 exercises sticktab loop] +dqrmn411 remaindernear 0.5 1 -> 0.5 +dqrmn412 remaindernear 0.55 1 -> -0.45 +dqrmn413 remaindernear 0.555 1 -> -0.445 +dqrmn414 remaindernear 0.5555 1 -> -0.4445 +dqrmn415 remaindernear 0.55555 1 -> -0.44445 +dqrmn416 remaindernear 0.555555 1 -> -0.444445 +dqrmn417 remaindernear 0.5555555 1 -> -0.4444445 +dqrmn418 remaindernear 0.55555555 1 -> -0.44444445 +dqrmn419 remaindernear 0.555555555 1 -> -0.444444445 + +-- folddowns +dqrmn421 remaindernear 1E+6144 1 -> NaN Division_impossible +dqrmn422 remaindernear 1E+6144 1E+6143 -> 0E+6111 Clamped +dqrmn423 remaindernear 1E+6144 2E+6143 -> 0E+6111 Clamped +dqrmn424 remaindernear 1E+6144 3E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped +dqrmn425 remaindernear 1E+6144 4E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped +dqrmn426 remaindernear 1E+6144 5E+6143 -> 0E+6111 Clamped +dqrmn427 remaindernear 1E+6144 6E+6143 -> -2.00000000000000000000000000000000E+6143 Clamped +dqrmn428 remaindernear 1E+6144 7E+6143 -> 3.00000000000000000000000000000000E+6143 Clamped +dqrmn429 remaindernear 1E+6144 8E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped +dqrmn430 remaindernear 1E+6144 9E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped +-- tinies +dqrmn431 remaindernear 1E-6175 1E-6176 -> 0E-6176 +dqrmn432 remaindernear 1E-6175 2E-6176 -> 0E-6176 +dqrmn433 remaindernear 1E-6175 3E-6176 -> 1E-6176 Subnormal +dqrmn434 remaindernear 1E-6175 4E-6176 -> 2E-6176 Subnormal +dqrmn435 remaindernear 1E-6175 5E-6176 -> 0E-6176 +dqrmn436 remaindernear 1E-6175 6E-6176 -> -2E-6176 Subnormal +dqrmn437 remaindernear 1E-6175 7E-6176 -> 3E-6176 Subnormal +dqrmn438 remaindernear 1E-6175 8E-6176 -> 2E-6176 Subnormal +dqrmn439 remaindernear 1E-6175 9E-6176 -> 1E-6176 Subnormal +dqrmn440 remaindernear 1E-6175 10E-6176 -> 0E-6176 +dqrmn441 remaindernear 1E-6175 11E-6176 -> -1E-6176 Subnormal +dqrmn442 remaindernear 100E-6175 11E-6176 -> -1E-6176 Subnormal +dqrmn443 remaindernear 100E-6175 20E-6176 -> 0E-6176 +dqrmn444 remaindernear 100E-6175 21E-6176 -> -8E-6176 Subnormal +dqrmn445 remaindernear 100E-6175 30E-6176 -> 1.0E-6175 Subnormal + +-- zero signs +dqrmn650 remaindernear 1 1 -> 0 +dqrmn651 remaindernear -1 1 -> -0 +dqrmn652 remaindernear 1 -1 -> 0 +dqrmn653 remaindernear -1 -1 -> -0 +dqrmn654 remaindernear 0 1 -> 0 +dqrmn655 remaindernear -0 1 -> -0 +dqrmn656 remaindernear 0 -1 -> 0 +dqrmn657 remaindernear -0 -1 -> -0 +dqrmn658 remaindernear 0.00 1 -> 0.00 +dqrmn659 remaindernear -0.00 1 -> -0.00 + +-- Specials +dqrmn680 remaindernear Inf -Inf -> NaN Invalid_operation +dqrmn681 remaindernear Inf -1000 -> NaN Invalid_operation +dqrmn682 remaindernear Inf -1 -> NaN Invalid_operation +dqrmn683 remaindernear Inf 0 -> NaN Invalid_operation +dqrmn684 remaindernear Inf -0 -> NaN Invalid_operation +dqrmn685 remaindernear Inf 1 -> NaN Invalid_operation +dqrmn686 remaindernear Inf 1000 -> NaN Invalid_operation +dqrmn687 remaindernear Inf Inf -> NaN Invalid_operation +dqrmn688 remaindernear -1000 Inf -> -1000 +dqrmn689 remaindernear -Inf Inf -> NaN Invalid_operation +dqrmn691 remaindernear -1 Inf -> -1 +dqrmn692 remaindernear 0 Inf -> 0 +dqrmn693 remaindernear -0 Inf -> -0 +dqrmn694 remaindernear 1 Inf -> 1 +dqrmn695 remaindernear 1000 Inf -> 1000 +dqrmn696 remaindernear Inf Inf -> NaN Invalid_operation + +dqrmn700 remaindernear -Inf -Inf -> NaN Invalid_operation +dqrmn701 remaindernear -Inf -1000 -> NaN Invalid_operation +dqrmn702 remaindernear -Inf -1 -> NaN Invalid_operation +dqrmn703 remaindernear -Inf -0 -> NaN Invalid_operation +dqrmn704 remaindernear -Inf 0 -> NaN Invalid_operation +dqrmn705 remaindernear -Inf 1 -> NaN Invalid_operation +dqrmn706 remaindernear -Inf 1000 -> NaN Invalid_operation +dqrmn707 remaindernear -Inf Inf -> NaN Invalid_operation +dqrmn708 remaindernear -Inf -Inf -> NaN Invalid_operation +dqrmn709 remaindernear -1000 Inf -> -1000 +dqrmn710 remaindernear -1 -Inf -> -1 +dqrmn711 remaindernear -0 -Inf -> -0 +dqrmn712 remaindernear 0 -Inf -> 0 +dqrmn713 remaindernear 1 -Inf -> 1 +dqrmn714 remaindernear 1000 -Inf -> 1000 +dqrmn715 remaindernear Inf -Inf -> NaN Invalid_operation + +dqrmn721 remaindernear NaN -Inf -> NaN +dqrmn722 remaindernear NaN -1000 -> NaN +dqrmn723 remaindernear NaN -1 -> NaN +dqrmn724 remaindernear NaN -0 -> NaN +dqrmn725 remaindernear -NaN 0 -> -NaN +dqrmn726 remaindernear NaN 1 -> NaN +dqrmn727 remaindernear NaN 1000 -> NaN +dqrmn728 remaindernear NaN Inf -> NaN +dqrmn729 remaindernear NaN -NaN -> NaN +dqrmn730 remaindernear -Inf NaN -> NaN +dqrmn731 remaindernear -1000 NaN -> NaN +dqrmn732 remaindernear -1 NaN -> NaN +dqrmn733 remaindernear -0 -NaN -> -NaN +dqrmn734 remaindernear 0 NaN -> NaN +dqrmn735 remaindernear 1 -NaN -> -NaN +dqrmn736 remaindernear 1000 NaN -> NaN +dqrmn737 remaindernear Inf NaN -> NaN + +dqrmn741 remaindernear sNaN -Inf -> NaN Invalid_operation +dqrmn742 remaindernear sNaN -1000 -> NaN Invalid_operation +dqrmn743 remaindernear -sNaN -1 -> -NaN Invalid_operation +dqrmn744 remaindernear sNaN -0 -> NaN Invalid_operation +dqrmn745 remaindernear sNaN 0 -> NaN Invalid_operation +dqrmn746 remaindernear sNaN 1 -> NaN Invalid_operation +dqrmn747 remaindernear sNaN 1000 -> NaN Invalid_operation +dqrmn749 remaindernear sNaN NaN -> NaN Invalid_operation +dqrmn750 remaindernear sNaN sNaN -> NaN Invalid_operation +dqrmn751 remaindernear NaN sNaN -> NaN Invalid_operation +dqrmn752 remaindernear -Inf sNaN -> NaN Invalid_operation +dqrmn753 remaindernear -1000 sNaN -> NaN Invalid_operation +dqrmn754 remaindernear -1 sNaN -> NaN Invalid_operation +dqrmn755 remaindernear -0 sNaN -> NaN Invalid_operation +dqrmn756 remaindernear 0 sNaN -> NaN Invalid_operation +dqrmn757 remaindernear 1 sNaN -> NaN Invalid_operation +dqrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation +dqrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation + +-- propagating NaNs +dqrmn760 remaindernear NaN1 NaN7 -> NaN1 +dqrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation +dqrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation +dqrmn763 remaindernear sNaN4 sNaN10 -> NaN4 Invalid_operation +dqrmn764 remaindernear 15 NaN11 -> NaN11 +dqrmn765 remaindernear NaN6 NaN12 -> NaN6 +dqrmn766 remaindernear Inf NaN13 -> NaN13 +dqrmn767 remaindernear NaN14 -Inf -> NaN14 +dqrmn768 remaindernear 0 NaN15 -> NaN15 +dqrmn769 remaindernear NaN16 -0 -> NaN16 + +-- edge cases of impossible +dqrmn770 remaindernear 1234500000000000000000067890123456 10 -> -4 +dqrmn771 remaindernear 1234500000000000000000067890123456 1 -> 0 +dqrmn772 remaindernear 1234500000000000000000067890123456 0.1 -> NaN Division_impossible +dqrmn773 remaindernear 1234500000000000000000067890123456 0.01 -> NaN Division_impossible + +-- long operand checks +dqrmn801 remaindernear 12345678000 100 -> 0 +dqrmn802 remaindernear 1 12345678000 -> 1 +dqrmn803 remaindernear 1234567800 10 -> 0 +dqrmn804 remaindernear 1 1234567800 -> 1 +dqrmn805 remaindernear 1234567890 10 -> 0 +dqrmn806 remaindernear 1 1234567890 -> 1 +dqrmn807 remaindernear 1234567891 10 -> 1 +dqrmn808 remaindernear 1 1234567891 -> 1 +dqrmn809 remaindernear 12345678901 100 -> 1 +dqrmn810 remaindernear 1 12345678901 -> 1 +dqrmn811 remaindernear 1234567896 10 -> -4 +dqrmn812 remaindernear 1 1234567896 -> 1 + +dqrmn821 remaindernear 12345678000 100 -> 0 +dqrmn822 remaindernear 1 12345678000 -> 1 +dqrmn823 remaindernear 1234567800 10 -> 0 +dqrmn824 remaindernear 1 1234567800 -> 1 +dqrmn825 remaindernear 1234567890 10 -> 0 +dqrmn826 remaindernear 1 1234567890 -> 1 +dqrmn827 remaindernear 1234567891 10 -> 1 +dqrmn828 remaindernear 1 1234567891 -> 1 +dqrmn829 remaindernear 12345678901 100 -> 1 +dqrmn830 remaindernear 1 12345678901 -> 1 +dqrmn831 remaindernear 1234567896 10 -> -4 +dqrmn832 remaindernear 1 1234567896 -> 1 + +-- from divideint +dqrmn840 remaindernear 100000000.0 1 -> 0.0 +dqrmn841 remaindernear 100000000.4 1 -> 0.4 +dqrmn842 remaindernear 100000000.5 1 -> 0.5 +dqrmn843 remaindernear 100000000.9 1 -> -0.1 +dqrmn844 remaindernear 100000000.999 1 -> -0.001 +dqrmn850 remaindernear 100000003 5 -> -2 +dqrmn851 remaindernear 10000003 5 -> -2 +dqrmn852 remaindernear 1000003 5 -> -2 +dqrmn853 remaindernear 100003 5 -> -2 +dqrmn854 remaindernear 10003 5 -> -2 +dqrmn855 remaindernear 1003 5 -> -2 +dqrmn856 remaindernear 103 5 -> -2 +dqrmn857 remaindernear 13 5 -> -2 +dqrmn858 remaindernear 1 5 -> 1 + +-- Vladimir's cases 1234567890123456 +dqrmn860 remaindernear 123.0e1 1000000000000000 -> 1230 +dqrmn861 remaindernear 1230 1000000000000000 -> 1230 +dqrmn862 remaindernear 12.3e2 1000000000000000 -> 1230 +dqrmn863 remaindernear 1.23e3 1000000000000000 -> 1230 +dqrmn864 remaindernear 123e1 1000000000000000 -> 1230 +dqrmn870 remaindernear 123e1 1000000000000000 -> 1230 +dqrmn871 remaindernear 123e1 100000000000000 -> 1230 +dqrmn872 remaindernear 123e1 10000000000000 -> 1230 +dqrmn873 remaindernear 123e1 1000000000000 -> 1230 +dqrmn874 remaindernear 123e1 100000000000 -> 1230 +dqrmn875 remaindernear 123e1 10000000000 -> 1230 +dqrmn876 remaindernear 123e1 1000000000 -> 1230 +dqrmn877 remaindernear 123e1 100000000 -> 1230 +dqrmn878 remaindernear 1230 100000000 -> 1230 +dqrmn879 remaindernear 123e1 10000000 -> 1230 +dqrmn880 remaindernear 123e1 1000000 -> 1230 +dqrmn881 remaindernear 123e1 100000 -> 1230 +dqrmn882 remaindernear 123e1 10000 -> 1230 +dqrmn883 remaindernear 123e1 1000 -> 230 +dqrmn884 remaindernear 123e1 100 -> 30 +dqrmn885 remaindernear 123e1 10 -> 0 +dqrmn886 remaindernear 123e1 1 -> 0 + +dqrmn890 remaindernear 123e1 2000000000000000 -> 1230 +dqrmn891 remaindernear 123e1 200000000000000 -> 1230 +dqrmn892 remaindernear 123e1 20000000000000 -> 1230 +dqrmn893 remaindernear 123e1 2000000000000 -> 1230 +dqrmn894 remaindernear 123e1 200000000000 -> 1230 +dqrmn895 remaindernear 123e1 20000000000 -> 1230 +dqrmn896 remaindernear 123e1 2000000000 -> 1230 +dqrmn897 remaindernear 123e1 200000000 -> 1230 +dqrmn899 remaindernear 123e1 20000000 -> 1230 +dqrmn900 remaindernear 123e1 2000000 -> 1230 +dqrmn901 remaindernear 123e1 200000 -> 1230 +dqrmn902 remaindernear 123e1 20000 -> 1230 +dqrmn903 remaindernear 123e1 2000 -> -770 +dqrmn904 remaindernear 123e1 200 -> 30 +dqrmn905 remaindernear 123e1 20 -> -10 +dqrmn906 remaindernear 123e1 2 -> 0 + +dqrmn910 remaindernear 123e1 5000000000000000 -> 1230 +dqrmn911 remaindernear 123e1 500000000000000 -> 1230 +dqrmn912 remaindernear 123e1 50000000000000 -> 1230 +dqrmn913 remaindernear 123e1 5000000000000 -> 1230 +dqrmn914 remaindernear 123e1 500000000000 -> 1230 +dqrmn915 remaindernear 123e1 50000000000 -> 1230 +dqrmn916 remaindernear 123e1 5000000000 -> 1230 +dqrmn917 remaindernear 123e1 500000000 -> 1230 +dqrmn919 remaindernear 123e1 50000000 -> 1230 +dqrmn920 remaindernear 123e1 5000000 -> 1230 +dqrmn921 remaindernear 123e1 500000 -> 1230 +dqrmn922 remaindernear 123e1 50000 -> 1230 +dqrmn923 remaindernear 123e1 5000 -> 1230 +dqrmn924 remaindernear 123e1 500 -> 230 +dqrmn925 remaindernear 123e1 50 -> -20 +dqrmn926 remaindernear 123e1 5 -> 0 + +dqrmn930 remaindernear 123e1 9000000000000000 -> 1230 +dqrmn931 remaindernear 123e1 900000000000000 -> 1230 +dqrmn932 remaindernear 123e1 90000000000000 -> 1230 +dqrmn933 remaindernear 123e1 9000000000000 -> 1230 +dqrmn934 remaindernear 123e1 900000000000 -> 1230 +dqrmn935 remaindernear 123e1 90000000000 -> 1230 +dqrmn936 remaindernear 123e1 9000000000 -> 1230 +dqrmn937 remaindernear 123e1 900000000 -> 1230 +dqrmn939 remaindernear 123e1 90000000 -> 1230 +dqrmn940 remaindernear 123e1 9000000 -> 1230 +dqrmn941 remaindernear 123e1 900000 -> 1230 +dqrmn942 remaindernear 123e1 90000 -> 1230 +dqrmn943 remaindernear 123e1 9000 -> 1230 +dqrmn944 remaindernear 123e1 900 -> 330 +dqrmn945 remaindernear 123e1 90 -> -30 +dqrmn946 remaindernear 123e1 9 -> -3 + +dqrmn950 remaindernear 123e1 1000000000000000 -> 1230 +dqrmn961 remaindernear 123e1 2999999999999999 -> 1230 +dqrmn962 remaindernear 123e1 3999999999999999 -> 1230 +dqrmn963 remaindernear 123e1 4999999999999999 -> 1230 +dqrmn964 remaindernear 123e1 5999999999999999 -> 1230 +dqrmn965 remaindernear 123e1 6999999999999999 -> 1230 +dqrmn966 remaindernear 123e1 7999999999999999 -> 1230 +dqrmn967 remaindernear 123e1 8999999999999999 -> 1230 +dqrmn968 remaindernear 123e1 9999999999999999 -> 1230 +dqrmn969 remaindernear 123e1 9876543210987654 -> 1230 + +dqrmn980 remaindernear 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally + +-- overflow and underflow tests [from divide] +dqrmn1051 remaindernear 1e+277 1e-311 -> NaN Division_impossible +dqrmn1052 remaindernear 1e+277 -1e-311 -> NaN Division_impossible +dqrmn1053 remaindernear -1e+277 1e-311 -> NaN Division_impossible +dqrmn1054 remaindernear -1e+277 -1e-311 -> NaN Division_impossible +dqrmn1055 remaindernear 1e-277 1e+311 -> 1E-277 +dqrmn1056 remaindernear 1e-277 -1e+311 -> 1E-277 +dqrmn1057 remaindernear -1e-277 1e+311 -> -1E-277 +dqrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277 + +-- Gyuris example +dqrmn1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143 + +-- destructive subtract +dqrmn1101 remaindernear 1234567890123456789012345678901234 1.000000000000000000000000000000001 -> -0.234567890123456789012345678901233 +dqrmn1102 remaindernear 1234567890123456789012345678901234 1.00000000000000000000000000000001 -> -0.34567890123456789012345678901222 +dqrmn1103 remaindernear 1234567890123456789012345678901234 1.0000000000000000000000000000001 -> -0.4567890123456789012345678901111 +dqrmn1104 remaindernear 1234567890123456789012345678901255 4.000000000000000000000000000000001 -> -1.308641972530864197253086419725314 +dqrmn1105 remaindernear 1234567890123456789012345678901234 4.000000000000000000000000000000001 -> 1.691358027469135802746913580274692 +dqrmn1106 remaindernear 1234567890123456789012345678901234 4.9999999999999999999999999999999 -> -1.3086421975308642197530864219748 +dqrmn1107 remaindernear 1234567890123456789012345678901234 4.99999999999999999999999999999999 -> 1.46913578024691357802469135780247 +dqrmn1108 remaindernear 1234567890123456789012345678901234 4.999999999999999999999999999999999 -> -0.753086421975308642197530864219753 +dqrmn1109 remaindernear 1234567890123456789012345678901234 5.000000000000000000000000000000001 -> -1.246913578024691357802469135780247 +dqrmn1110 remaindernear 1234567890123456789012345678901234 5.00000000000000000000000000000001 -> 1.53086421975308642197530864219754 +dqrmn1111 remaindernear 1234567890123456789012345678901234 5.0000000000000000000000000000001 -> -0.6913578024691357802469135780242 + +-- Null tests +dqrmn1000 remaindernear 10 # -> NaN Invalid_operation +dqrmn1001 remaindernear # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqRotate.decTest b/Lib/test/decimaltestdata/dqRotate.decTest index 858b823e088..edcf9eed23f 100644 --- a/Lib/test/decimaltestdata/dqRotate.decTest +++ b/Lib/test/decimaltestdata/dqRotate.decTest @@ -1,298 +1,298 @@ ------------------------------------------------------------------------- --- dqRotate.decTest -- rotate decQuad coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqrot001 rotate 0 0 -> 0 -dqrot002 rotate 0 2 -> 0 -dqrot003 rotate 1 2 -> 100 -dqrot004 rotate 1 33 -> 1000000000000000000000000000000000 -dqrot005 rotate 1 34 -> 1 -dqrot006 rotate 1 -1 -> 1000000000000000000000000000000000 -dqrot007 rotate 0 -2 -> 0 -dqrot008 rotate 1234567890123456789012345678901234 -1 -> 4123456789012345678901234567890123 -dqrot009 rotate 1234567890123456789012345678901234 -33 -> 2345678901234567890123456789012341 -dqrot010 rotate 1234567890123456789012345678901234 -34 -> 1234567890123456789012345678901234 -dqrot011 rotate 9934567890123456789012345678901234 -33 -> 9345678901234567890123456789012349 -dqrot012 rotate 9934567890123456789012345678901234 -34 -> 9934567890123456789012345678901234 - --- rhs must be an integer -dqrot015 rotate 1 1.5 -> NaN Invalid_operation -dqrot016 rotate 1 1.0 -> NaN Invalid_operation -dqrot017 rotate 1 0.1 -> NaN Invalid_operation -dqrot018 rotate 1 0.0 -> NaN Invalid_operation -dqrot019 rotate 1 1E+1 -> NaN Invalid_operation -dqrot020 rotate 1 1E+99 -> NaN Invalid_operation -dqrot021 rotate 1 Inf -> NaN Invalid_operation -dqrot022 rotate 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -dqrot025 rotate 1 -1000 -> NaN Invalid_operation -dqrot026 rotate 1 -35 -> NaN Invalid_operation -dqrot027 rotate 1 35 -> NaN Invalid_operation -dqrot028 rotate 1 1000 -> NaN Invalid_operation - --- full pattern -dqrot030 rotate 1234567890123456789012345678901234 -34 -> 1234567890123456789012345678901234 -dqrot031 rotate 1234567890123456789012345678901234 -33 -> 2345678901234567890123456789012341 -dqrot032 rotate 1234567890123456789012345678901234 -32 -> 3456789012345678901234567890123412 -dqrot033 rotate 1234567890123456789012345678901234 -31 -> 4567890123456789012345678901234123 -dqrot034 rotate 1234567890123456789012345678901234 -30 -> 5678901234567890123456789012341234 -dqrot035 rotate 1234567890123456789012345678901234 -29 -> 6789012345678901234567890123412345 -dqrot036 rotate 1234567890123456789012345678901234 -28 -> 7890123456789012345678901234123456 -dqrot037 rotate 1234567890123456789012345678901234 -27 -> 8901234567890123456789012341234567 -dqrot038 rotate 1234567890123456789012345678901234 -26 -> 9012345678901234567890123412345678 -dqrot039 rotate 1234567890123456789012345678901234 -25 -> 123456789012345678901234123456789 -dqrot040 rotate 1234567890123456789012345678901234 -24 -> 1234567890123456789012341234567890 -dqrot041 rotate 1234567890123456789012345678901234 -23 -> 2345678901234567890123412345678901 -dqrot042 rotate 1234567890123456789012345678901234 -22 -> 3456789012345678901234123456789012 -dqrot043 rotate 1234567890123456789012345678901234 -21 -> 4567890123456789012341234567890123 -dqrot044 rotate 1234567890123456789012345678901234 -20 -> 5678901234567890123412345678901234 -dqrot045 rotate 1234567890123456789012345678901234 -19 -> 6789012345678901234123456789012345 -dqrot047 rotate 1234567890123456789012345678901234 -18 -> 7890123456789012341234567890123456 -dqrot048 rotate 1234567890123456789012345678901234 -17 -> 8901234567890123412345678901234567 -dqrot049 rotate 1234567890123456789012345678901234 -16 -> 9012345678901234123456789012345678 -dqrot050 rotate 1234567890123456789012345678901234 -15 -> 123456789012341234567890123456789 -dqrot051 rotate 1234567890123456789012345678901234 -14 -> 1234567890123412345678901234567890 -dqrot052 rotate 1234567890123456789012345678901234 -13 -> 2345678901234123456789012345678901 -dqrot053 rotate 1234567890123456789012345678901234 -12 -> 3456789012341234567890123456789012 -dqrot054 rotate 1234567890123456789012345678901234 -11 -> 4567890123412345678901234567890123 -dqrot055 rotate 1234567890123456789012345678901234 -10 -> 5678901234123456789012345678901234 -dqrot056 rotate 1234567890123456789012345678901234 -9 -> 6789012341234567890123456789012345 -dqrot057 rotate 1234567890123456789012345678901234 -8 -> 7890123412345678901234567890123456 -dqrot058 rotate 1234567890123456789012345678901234 -7 -> 8901234123456789012345678901234567 -dqrot059 rotate 1234567890123456789012345678901234 -6 -> 9012341234567890123456789012345678 -dqrot060 rotate 1234567890123456789012345678901234 -5 -> 123412345678901234567890123456789 -dqrot061 rotate 1234567890123456789012345678901234 -4 -> 1234123456789012345678901234567890 -dqrot062 rotate 1234567890123456789012345678901234 -3 -> 2341234567890123456789012345678901 -dqrot063 rotate 1234567890123456789012345678901234 -2 -> 3412345678901234567890123456789012 -dqrot064 rotate 1234567890123456789012345678901234 -1 -> 4123456789012345678901234567890123 -dqrot065 rotate 1234567890123456789012345678901234 -0 -> 1234567890123456789012345678901234 - -dqrot066 rotate 1234567890123456789012345678901234 +0 -> 1234567890123456789012345678901234 -dqrot067 rotate 1234567890123456789012345678901234 +1 -> 2345678901234567890123456789012341 -dqrot068 rotate 1234567890123456789012345678901234 +2 -> 3456789012345678901234567890123412 -dqrot069 rotate 1234567890123456789012345678901234 +3 -> 4567890123456789012345678901234123 -dqrot070 rotate 1234567890123456789012345678901234 +4 -> 5678901234567890123456789012341234 -dqrot071 rotate 1234567890123456789012345678901234 +5 -> 6789012345678901234567890123412345 -dqrot072 rotate 1234567890123456789012345678901234 +6 -> 7890123456789012345678901234123456 -dqrot073 rotate 1234567890123456789012345678901234 +7 -> 8901234567890123456789012341234567 -dqrot074 rotate 1234567890123456789012345678901234 +8 -> 9012345678901234567890123412345678 -dqrot075 rotate 1234567890123456789012345678901234 +9 -> 123456789012345678901234123456789 -dqrot076 rotate 1234567890123456789012345678901234 +10 -> 1234567890123456789012341234567890 -dqrot077 rotate 1234567890123456789012345678901234 +11 -> 2345678901234567890123412345678901 -dqrot078 rotate 1234567890123456789012345678901234 +12 -> 3456789012345678901234123456789012 -dqrot079 rotate 1234567890123456789012345678901234 +13 -> 4567890123456789012341234567890123 -dqrot080 rotate 1234567890123456789012345678901234 +14 -> 5678901234567890123412345678901234 -dqrot081 rotate 1234567890123456789012345678901234 +15 -> 6789012345678901234123456789012345 -dqrot082 rotate 1234567890123456789012345678901234 +16 -> 7890123456789012341234567890123456 -dqrot083 rotate 1234567890123456789012345678901234 +17 -> 8901234567890123412345678901234567 -dqrot084 rotate 1234567890123456789012345678901234 +18 -> 9012345678901234123456789012345678 -dqrot085 rotate 1234567890123456789012345678901234 +19 -> 123456789012341234567890123456789 -dqrot086 rotate 1234567890123456789012345678901234 +20 -> 1234567890123412345678901234567890 -dqrot087 rotate 1234567890123456789012345678901234 +21 -> 2345678901234123456789012345678901 -dqrot088 rotate 1234567890123456789012345678901234 +22 -> 3456789012341234567890123456789012 -dqrot089 rotate 1234567890123456789012345678901234 +23 -> 4567890123412345678901234567890123 -dqrot090 rotate 1234567890123456789012345678901234 +24 -> 5678901234123456789012345678901234 -dqrot091 rotate 1234567890123456789012345678901234 +25 -> 6789012341234567890123456789012345 -dqrot092 rotate 1234567890123456789012345678901234 +26 -> 7890123412345678901234567890123456 -dqrot093 rotate 1234567890123456789012345678901234 +27 -> 8901234123456789012345678901234567 -dqrot094 rotate 1234567890123456789012345678901234 +28 -> 9012341234567890123456789012345678 -dqrot095 rotate 1234567890123456789012345678901234 +29 -> 123412345678901234567890123456789 -dqrot096 rotate 1234567890123456789012345678901234 +30 -> 1234123456789012345678901234567890 -dqrot097 rotate 1234567890123456789012345678901234 +31 -> 2341234567890123456789012345678901 -dqrot098 rotate 1234567890123456789012345678901234 +32 -> 3412345678901234567890123456789012 -dqrot099 rotate 1234567890123456789012345678901234 +33 -> 4123456789012345678901234567890123 -dqrot100 rotate 1234567890123456789012345678901234 +34 -> 1234567890123456789012345678901234 - --- zeros -dqrot270 rotate 0E-10 +29 -> 0E-10 -dqrot271 rotate 0E-10 -29 -> 0E-10 -dqrot272 rotate 0.000 +29 -> 0.000 -dqrot273 rotate 0.000 -29 -> 0.000 -dqrot274 rotate 0E+10 +29 -> 0E+10 -dqrot275 rotate 0E+10 -29 -> 0E+10 -dqrot276 rotate -0E-10 +29 -> -0E-10 -dqrot277 rotate -0E-10 -29 -> -0E-10 -dqrot278 rotate -0.000 +29 -> -0.000 -dqrot279 rotate -0.000 -29 -> -0.000 -dqrot280 rotate -0E+10 +29 -> -0E+10 -dqrot281 rotate -0E+10 -29 -> -0E+10 - --- Nmax, Nmin, Ntiny -dqrot141 rotate 9.999999999999999999999999999999999E+6144 -1 -> 9.999999999999999999999999999999999E+6144 -dqrot142 rotate 9.999999999999999999999999999999999E+6144 -33 -> 9.999999999999999999999999999999999E+6144 -dqrot143 rotate 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 -dqrot144 rotate 9.999999999999999999999999999999999E+6144 33 -> 9.999999999999999999999999999999999E+6144 -dqrot145 rotate 1E-6143 -1 -> 1.000000000000000000000000000000000E-6110 -dqrot146 rotate 1E-6143 -33 -> 1.0E-6142 -dqrot147 rotate 1E-6143 1 -> 1.0E-6142 -dqrot148 rotate 1E-6143 33 -> 1.000000000000000000000000000000000E-6110 -dqrot151 rotate 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 -dqrot152 rotate 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 -dqrot153 rotate 1.000000000000000000000000000000000E-6143 1 -> 1E-6176 -dqrot154 rotate 1.000000000000000000000000000000000E-6143 33 -> 1.00000000000000000000000000000000E-6144 -dqrot155 rotate 9.000000000000000000000000000000000E-6143 -1 -> 9.00000000000000000000000000000000E-6144 -dqrot156 rotate 9.000000000000000000000000000000000E-6143 -33 -> 9E-6176 -dqrot157 rotate 9.000000000000000000000000000000000E-6143 1 -> 9E-6176 -dqrot158 rotate 9.000000000000000000000000000000000E-6143 33 -> 9.00000000000000000000000000000000E-6144 -dqrot160 rotate 1E-6176 -1 -> 1.000000000000000000000000000000000E-6143 -dqrot161 rotate 1E-6176 -33 -> 1.0E-6175 -dqrot162 rotate 1E-6176 1 -> 1.0E-6175 -dqrot163 rotate 1E-6176 33 -> 1.000000000000000000000000000000000E-6143 --- negatives -dqrot171 rotate -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 -dqrot172 rotate -9.999999999999999999999999999999999E+6144 -33 -> -9.999999999999999999999999999999999E+6144 -dqrot173 rotate -9.999999999999999999999999999999999E+6144 1 -> -9.999999999999999999999999999999999E+6144 -dqrot174 rotate -9.999999999999999999999999999999999E+6144 33 -> -9.999999999999999999999999999999999E+6144 -dqrot175 rotate -1E-6143 -1 -> -1.000000000000000000000000000000000E-6110 -dqrot176 rotate -1E-6143 -33 -> -1.0E-6142 -dqrot177 rotate -1E-6143 1 -> -1.0E-6142 -dqrot178 rotate -1E-6143 33 -> -1.000000000000000000000000000000000E-6110 -dqrot181 rotate -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 -dqrot182 rotate -1.000000000000000000000000000000000E-6143 -33 -> -1E-6176 -dqrot183 rotate -1.000000000000000000000000000000000E-6143 1 -> -1E-6176 -dqrot184 rotate -1.000000000000000000000000000000000E-6143 33 -> -1.00000000000000000000000000000000E-6144 -dqrot185 rotate -9.000000000000000000000000000000000E-6143 -1 -> -9.00000000000000000000000000000000E-6144 -dqrot186 rotate -9.000000000000000000000000000000000E-6143 -33 -> -9E-6176 -dqrot187 rotate -9.000000000000000000000000000000000E-6143 1 -> -9E-6176 -dqrot188 rotate -9.000000000000000000000000000000000E-6143 33 -> -9.00000000000000000000000000000000E-6144 -dqrot190 rotate -1E-6176 -1 -> -1.000000000000000000000000000000000E-6143 -dqrot191 rotate -1E-6176 -33 -> -1.0E-6175 -dqrot192 rotate -1E-6176 1 -> -1.0E-6175 -dqrot193 rotate -1E-6176 33 -> -1.000000000000000000000000000000000E-6143 - --- more negatives (of sanities) -dqrot201 rotate -0 0 -> -0 -dqrot202 rotate -0 2 -> -0 -dqrot203 rotate -1 2 -> -100 -dqrot204 rotate -1 33 -> -1000000000000000000000000000000000 -dqrot205 rotate -1 34 -> -1 -dqrot206 rotate -1 -1 -> -1000000000000000000000000000000000 -dqrot207 rotate -0 -2 -> -0 -dqrot208 rotate -1234567890123456789012345678901234 -1 -> -4123456789012345678901234567890123 -dqrot209 rotate -1234567890123456789012345678901234 -33 -> -2345678901234567890123456789012341 -dqrot210 rotate -1234567890123456789012345678901234 -34 -> -1234567890123456789012345678901234 -dqrot211 rotate -9934567890123456789012345678901234 -33 -> -9345678901234567890123456789012349 -dqrot212 rotate -9934567890123456789012345678901234 -34 -> -9934567890123456789012345678901234 - - --- Specials; NaNs are handled as usual -dqrot781 rotate -Inf -8 -> -Infinity -dqrot782 rotate -Inf -1 -> -Infinity -dqrot783 rotate -Inf -0 -> -Infinity -dqrot784 rotate -Inf 0 -> -Infinity -dqrot785 rotate -Inf 1 -> -Infinity -dqrot786 rotate -Inf 8 -> -Infinity -dqrot787 rotate -1000 -Inf -> NaN Invalid_operation -dqrot788 rotate -Inf -Inf -> NaN Invalid_operation -dqrot789 rotate -1 -Inf -> NaN Invalid_operation -dqrot790 rotate -0 -Inf -> NaN Invalid_operation -dqrot791 rotate 0 -Inf -> NaN Invalid_operation -dqrot792 rotate 1 -Inf -> NaN Invalid_operation -dqrot793 rotate 1000 -Inf -> NaN Invalid_operation -dqrot794 rotate Inf -Inf -> NaN Invalid_operation - -dqrot800 rotate Inf -Inf -> NaN Invalid_operation -dqrot801 rotate Inf -8 -> Infinity -dqrot802 rotate Inf -1 -> Infinity -dqrot803 rotate Inf -0 -> Infinity -dqrot804 rotate Inf 0 -> Infinity -dqrot805 rotate Inf 1 -> Infinity -dqrot806 rotate Inf 8 -> Infinity -dqrot807 rotate Inf Inf -> NaN Invalid_operation -dqrot808 rotate -1000 Inf -> NaN Invalid_operation -dqrot809 rotate -Inf Inf -> NaN Invalid_operation -dqrot810 rotate -1 Inf -> NaN Invalid_operation -dqrot811 rotate -0 Inf -> NaN Invalid_operation -dqrot812 rotate 0 Inf -> NaN Invalid_operation -dqrot813 rotate 1 Inf -> NaN Invalid_operation -dqrot814 rotate 1000 Inf -> NaN Invalid_operation -dqrot815 rotate Inf Inf -> NaN Invalid_operation - -dqrot821 rotate NaN -Inf -> NaN -dqrot822 rotate NaN -1000 -> NaN -dqrot823 rotate NaN -1 -> NaN -dqrot824 rotate NaN -0 -> NaN -dqrot825 rotate NaN 0 -> NaN -dqrot826 rotate NaN 1 -> NaN -dqrot827 rotate NaN 1000 -> NaN -dqrot828 rotate NaN Inf -> NaN -dqrot829 rotate NaN NaN -> NaN -dqrot830 rotate -Inf NaN -> NaN -dqrot831 rotate -1000 NaN -> NaN -dqrot832 rotate -1 NaN -> NaN -dqrot833 rotate -0 NaN -> NaN -dqrot834 rotate 0 NaN -> NaN -dqrot835 rotate 1 NaN -> NaN -dqrot836 rotate 1000 NaN -> NaN -dqrot837 rotate Inf NaN -> NaN - -dqrot841 rotate sNaN -Inf -> NaN Invalid_operation -dqrot842 rotate sNaN -1000 -> NaN Invalid_operation -dqrot843 rotate sNaN -1 -> NaN Invalid_operation -dqrot844 rotate sNaN -0 -> NaN Invalid_operation -dqrot845 rotate sNaN 0 -> NaN Invalid_operation -dqrot846 rotate sNaN 1 -> NaN Invalid_operation -dqrot847 rotate sNaN 1000 -> NaN Invalid_operation -dqrot848 rotate sNaN NaN -> NaN Invalid_operation -dqrot849 rotate sNaN sNaN -> NaN Invalid_operation -dqrot850 rotate NaN sNaN -> NaN Invalid_operation -dqrot851 rotate -Inf sNaN -> NaN Invalid_operation -dqrot852 rotate -1000 sNaN -> NaN Invalid_operation -dqrot853 rotate -1 sNaN -> NaN Invalid_operation -dqrot854 rotate -0 sNaN -> NaN Invalid_operation -dqrot855 rotate 0 sNaN -> NaN Invalid_operation -dqrot856 rotate 1 sNaN -> NaN Invalid_operation -dqrot857 rotate 1000 sNaN -> NaN Invalid_operation -dqrot858 rotate Inf sNaN -> NaN Invalid_operation -dqrot859 rotate NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqrot861 rotate NaN1 -Inf -> NaN1 -dqrot862 rotate +NaN2 -1000 -> NaN2 -dqrot863 rotate NaN3 1000 -> NaN3 -dqrot864 rotate NaN4 Inf -> NaN4 -dqrot865 rotate NaN5 +NaN6 -> NaN5 -dqrot866 rotate -Inf NaN7 -> NaN7 -dqrot867 rotate -1000 NaN8 -> NaN8 -dqrot868 rotate 1000 NaN9 -> NaN9 -dqrot869 rotate Inf +NaN10 -> NaN10 -dqrot871 rotate sNaN11 -Inf -> NaN11 Invalid_operation -dqrot872 rotate sNaN12 -1000 -> NaN12 Invalid_operation -dqrot873 rotate sNaN13 1000 -> NaN13 Invalid_operation -dqrot874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation -dqrot875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation -dqrot876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation -dqrot877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation -dqrot878 rotate -1000 sNaN21 -> NaN21 Invalid_operation -dqrot879 rotate 1000 sNaN22 -> NaN22 Invalid_operation -dqrot880 rotate Inf sNaN23 -> NaN23 Invalid_operation -dqrot881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqrot882 rotate -NaN26 NaN28 -> -NaN26 -dqrot883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqrot884 rotate 1000 -NaN30 -> -NaN30 -dqrot885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- dqRotate.decTest -- rotate decQuad coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqrot001 rotate 0 0 -> 0 +dqrot002 rotate 0 2 -> 0 +dqrot003 rotate 1 2 -> 100 +dqrot004 rotate 1 33 -> 1000000000000000000000000000000000 +dqrot005 rotate 1 34 -> 1 +dqrot006 rotate 1 -1 -> 1000000000000000000000000000000000 +dqrot007 rotate 0 -2 -> 0 +dqrot008 rotate 1234567890123456789012345678901234 -1 -> 4123456789012345678901234567890123 +dqrot009 rotate 1234567890123456789012345678901234 -33 -> 2345678901234567890123456789012341 +dqrot010 rotate 1234567890123456789012345678901234 -34 -> 1234567890123456789012345678901234 +dqrot011 rotate 9934567890123456789012345678901234 -33 -> 9345678901234567890123456789012349 +dqrot012 rotate 9934567890123456789012345678901234 -34 -> 9934567890123456789012345678901234 + +-- rhs must be an integer +dqrot015 rotate 1 1.5 -> NaN Invalid_operation +dqrot016 rotate 1 1.0 -> NaN Invalid_operation +dqrot017 rotate 1 0.1 -> NaN Invalid_operation +dqrot018 rotate 1 0.0 -> NaN Invalid_operation +dqrot019 rotate 1 1E+1 -> NaN Invalid_operation +dqrot020 rotate 1 1E+99 -> NaN Invalid_operation +dqrot021 rotate 1 Inf -> NaN Invalid_operation +dqrot022 rotate 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +dqrot025 rotate 1 -1000 -> NaN Invalid_operation +dqrot026 rotate 1 -35 -> NaN Invalid_operation +dqrot027 rotate 1 35 -> NaN Invalid_operation +dqrot028 rotate 1 1000 -> NaN Invalid_operation + +-- full pattern +dqrot030 rotate 1234567890123456789012345678901234 -34 -> 1234567890123456789012345678901234 +dqrot031 rotate 1234567890123456789012345678901234 -33 -> 2345678901234567890123456789012341 +dqrot032 rotate 1234567890123456789012345678901234 -32 -> 3456789012345678901234567890123412 +dqrot033 rotate 1234567890123456789012345678901234 -31 -> 4567890123456789012345678901234123 +dqrot034 rotate 1234567890123456789012345678901234 -30 -> 5678901234567890123456789012341234 +dqrot035 rotate 1234567890123456789012345678901234 -29 -> 6789012345678901234567890123412345 +dqrot036 rotate 1234567890123456789012345678901234 -28 -> 7890123456789012345678901234123456 +dqrot037 rotate 1234567890123456789012345678901234 -27 -> 8901234567890123456789012341234567 +dqrot038 rotate 1234567890123456789012345678901234 -26 -> 9012345678901234567890123412345678 +dqrot039 rotate 1234567890123456789012345678901234 -25 -> 123456789012345678901234123456789 +dqrot040 rotate 1234567890123456789012345678901234 -24 -> 1234567890123456789012341234567890 +dqrot041 rotate 1234567890123456789012345678901234 -23 -> 2345678901234567890123412345678901 +dqrot042 rotate 1234567890123456789012345678901234 -22 -> 3456789012345678901234123456789012 +dqrot043 rotate 1234567890123456789012345678901234 -21 -> 4567890123456789012341234567890123 +dqrot044 rotate 1234567890123456789012345678901234 -20 -> 5678901234567890123412345678901234 +dqrot045 rotate 1234567890123456789012345678901234 -19 -> 6789012345678901234123456789012345 +dqrot047 rotate 1234567890123456789012345678901234 -18 -> 7890123456789012341234567890123456 +dqrot048 rotate 1234567890123456789012345678901234 -17 -> 8901234567890123412345678901234567 +dqrot049 rotate 1234567890123456789012345678901234 -16 -> 9012345678901234123456789012345678 +dqrot050 rotate 1234567890123456789012345678901234 -15 -> 123456789012341234567890123456789 +dqrot051 rotate 1234567890123456789012345678901234 -14 -> 1234567890123412345678901234567890 +dqrot052 rotate 1234567890123456789012345678901234 -13 -> 2345678901234123456789012345678901 +dqrot053 rotate 1234567890123456789012345678901234 -12 -> 3456789012341234567890123456789012 +dqrot054 rotate 1234567890123456789012345678901234 -11 -> 4567890123412345678901234567890123 +dqrot055 rotate 1234567890123456789012345678901234 -10 -> 5678901234123456789012345678901234 +dqrot056 rotate 1234567890123456789012345678901234 -9 -> 6789012341234567890123456789012345 +dqrot057 rotate 1234567890123456789012345678901234 -8 -> 7890123412345678901234567890123456 +dqrot058 rotate 1234567890123456789012345678901234 -7 -> 8901234123456789012345678901234567 +dqrot059 rotate 1234567890123456789012345678901234 -6 -> 9012341234567890123456789012345678 +dqrot060 rotate 1234567890123456789012345678901234 -5 -> 123412345678901234567890123456789 +dqrot061 rotate 1234567890123456789012345678901234 -4 -> 1234123456789012345678901234567890 +dqrot062 rotate 1234567890123456789012345678901234 -3 -> 2341234567890123456789012345678901 +dqrot063 rotate 1234567890123456789012345678901234 -2 -> 3412345678901234567890123456789012 +dqrot064 rotate 1234567890123456789012345678901234 -1 -> 4123456789012345678901234567890123 +dqrot065 rotate 1234567890123456789012345678901234 -0 -> 1234567890123456789012345678901234 + +dqrot066 rotate 1234567890123456789012345678901234 +0 -> 1234567890123456789012345678901234 +dqrot067 rotate 1234567890123456789012345678901234 +1 -> 2345678901234567890123456789012341 +dqrot068 rotate 1234567890123456789012345678901234 +2 -> 3456789012345678901234567890123412 +dqrot069 rotate 1234567890123456789012345678901234 +3 -> 4567890123456789012345678901234123 +dqrot070 rotate 1234567890123456789012345678901234 +4 -> 5678901234567890123456789012341234 +dqrot071 rotate 1234567890123456789012345678901234 +5 -> 6789012345678901234567890123412345 +dqrot072 rotate 1234567890123456789012345678901234 +6 -> 7890123456789012345678901234123456 +dqrot073 rotate 1234567890123456789012345678901234 +7 -> 8901234567890123456789012341234567 +dqrot074 rotate 1234567890123456789012345678901234 +8 -> 9012345678901234567890123412345678 +dqrot075 rotate 1234567890123456789012345678901234 +9 -> 123456789012345678901234123456789 +dqrot076 rotate 1234567890123456789012345678901234 +10 -> 1234567890123456789012341234567890 +dqrot077 rotate 1234567890123456789012345678901234 +11 -> 2345678901234567890123412345678901 +dqrot078 rotate 1234567890123456789012345678901234 +12 -> 3456789012345678901234123456789012 +dqrot079 rotate 1234567890123456789012345678901234 +13 -> 4567890123456789012341234567890123 +dqrot080 rotate 1234567890123456789012345678901234 +14 -> 5678901234567890123412345678901234 +dqrot081 rotate 1234567890123456789012345678901234 +15 -> 6789012345678901234123456789012345 +dqrot082 rotate 1234567890123456789012345678901234 +16 -> 7890123456789012341234567890123456 +dqrot083 rotate 1234567890123456789012345678901234 +17 -> 8901234567890123412345678901234567 +dqrot084 rotate 1234567890123456789012345678901234 +18 -> 9012345678901234123456789012345678 +dqrot085 rotate 1234567890123456789012345678901234 +19 -> 123456789012341234567890123456789 +dqrot086 rotate 1234567890123456789012345678901234 +20 -> 1234567890123412345678901234567890 +dqrot087 rotate 1234567890123456789012345678901234 +21 -> 2345678901234123456789012345678901 +dqrot088 rotate 1234567890123456789012345678901234 +22 -> 3456789012341234567890123456789012 +dqrot089 rotate 1234567890123456789012345678901234 +23 -> 4567890123412345678901234567890123 +dqrot090 rotate 1234567890123456789012345678901234 +24 -> 5678901234123456789012345678901234 +dqrot091 rotate 1234567890123456789012345678901234 +25 -> 6789012341234567890123456789012345 +dqrot092 rotate 1234567890123456789012345678901234 +26 -> 7890123412345678901234567890123456 +dqrot093 rotate 1234567890123456789012345678901234 +27 -> 8901234123456789012345678901234567 +dqrot094 rotate 1234567890123456789012345678901234 +28 -> 9012341234567890123456789012345678 +dqrot095 rotate 1234567890123456789012345678901234 +29 -> 123412345678901234567890123456789 +dqrot096 rotate 1234567890123456789012345678901234 +30 -> 1234123456789012345678901234567890 +dqrot097 rotate 1234567890123456789012345678901234 +31 -> 2341234567890123456789012345678901 +dqrot098 rotate 1234567890123456789012345678901234 +32 -> 3412345678901234567890123456789012 +dqrot099 rotate 1234567890123456789012345678901234 +33 -> 4123456789012345678901234567890123 +dqrot100 rotate 1234567890123456789012345678901234 +34 -> 1234567890123456789012345678901234 + +-- zeros +dqrot270 rotate 0E-10 +29 -> 0E-10 +dqrot271 rotate 0E-10 -29 -> 0E-10 +dqrot272 rotate 0.000 +29 -> 0.000 +dqrot273 rotate 0.000 -29 -> 0.000 +dqrot274 rotate 0E+10 +29 -> 0E+10 +dqrot275 rotate 0E+10 -29 -> 0E+10 +dqrot276 rotate -0E-10 +29 -> -0E-10 +dqrot277 rotate -0E-10 -29 -> -0E-10 +dqrot278 rotate -0.000 +29 -> -0.000 +dqrot279 rotate -0.000 -29 -> -0.000 +dqrot280 rotate -0E+10 +29 -> -0E+10 +dqrot281 rotate -0E+10 -29 -> -0E+10 + +-- Nmax, Nmin, Ntiny +dqrot141 rotate 9.999999999999999999999999999999999E+6144 -1 -> 9.999999999999999999999999999999999E+6144 +dqrot142 rotate 9.999999999999999999999999999999999E+6144 -33 -> 9.999999999999999999999999999999999E+6144 +dqrot143 rotate 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 +dqrot144 rotate 9.999999999999999999999999999999999E+6144 33 -> 9.999999999999999999999999999999999E+6144 +dqrot145 rotate 1E-6143 -1 -> 1.000000000000000000000000000000000E-6110 +dqrot146 rotate 1E-6143 -33 -> 1.0E-6142 +dqrot147 rotate 1E-6143 1 -> 1.0E-6142 +dqrot148 rotate 1E-6143 33 -> 1.000000000000000000000000000000000E-6110 +dqrot151 rotate 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 +dqrot152 rotate 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 +dqrot153 rotate 1.000000000000000000000000000000000E-6143 1 -> 1E-6176 +dqrot154 rotate 1.000000000000000000000000000000000E-6143 33 -> 1.00000000000000000000000000000000E-6144 +dqrot155 rotate 9.000000000000000000000000000000000E-6143 -1 -> 9.00000000000000000000000000000000E-6144 +dqrot156 rotate 9.000000000000000000000000000000000E-6143 -33 -> 9E-6176 +dqrot157 rotate 9.000000000000000000000000000000000E-6143 1 -> 9E-6176 +dqrot158 rotate 9.000000000000000000000000000000000E-6143 33 -> 9.00000000000000000000000000000000E-6144 +dqrot160 rotate 1E-6176 -1 -> 1.000000000000000000000000000000000E-6143 +dqrot161 rotate 1E-6176 -33 -> 1.0E-6175 +dqrot162 rotate 1E-6176 1 -> 1.0E-6175 +dqrot163 rotate 1E-6176 33 -> 1.000000000000000000000000000000000E-6143 +-- negatives +dqrot171 rotate -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 +dqrot172 rotate -9.999999999999999999999999999999999E+6144 -33 -> -9.999999999999999999999999999999999E+6144 +dqrot173 rotate -9.999999999999999999999999999999999E+6144 1 -> -9.999999999999999999999999999999999E+6144 +dqrot174 rotate -9.999999999999999999999999999999999E+6144 33 -> -9.999999999999999999999999999999999E+6144 +dqrot175 rotate -1E-6143 -1 -> -1.000000000000000000000000000000000E-6110 +dqrot176 rotate -1E-6143 -33 -> -1.0E-6142 +dqrot177 rotate -1E-6143 1 -> -1.0E-6142 +dqrot178 rotate -1E-6143 33 -> -1.000000000000000000000000000000000E-6110 +dqrot181 rotate -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 +dqrot182 rotate -1.000000000000000000000000000000000E-6143 -33 -> -1E-6176 +dqrot183 rotate -1.000000000000000000000000000000000E-6143 1 -> -1E-6176 +dqrot184 rotate -1.000000000000000000000000000000000E-6143 33 -> -1.00000000000000000000000000000000E-6144 +dqrot185 rotate -9.000000000000000000000000000000000E-6143 -1 -> -9.00000000000000000000000000000000E-6144 +dqrot186 rotate -9.000000000000000000000000000000000E-6143 -33 -> -9E-6176 +dqrot187 rotate -9.000000000000000000000000000000000E-6143 1 -> -9E-6176 +dqrot188 rotate -9.000000000000000000000000000000000E-6143 33 -> -9.00000000000000000000000000000000E-6144 +dqrot190 rotate -1E-6176 -1 -> -1.000000000000000000000000000000000E-6143 +dqrot191 rotate -1E-6176 -33 -> -1.0E-6175 +dqrot192 rotate -1E-6176 1 -> -1.0E-6175 +dqrot193 rotate -1E-6176 33 -> -1.000000000000000000000000000000000E-6143 + +-- more negatives (of sanities) +dqrot201 rotate -0 0 -> -0 +dqrot202 rotate -0 2 -> -0 +dqrot203 rotate -1 2 -> -100 +dqrot204 rotate -1 33 -> -1000000000000000000000000000000000 +dqrot205 rotate -1 34 -> -1 +dqrot206 rotate -1 -1 -> -1000000000000000000000000000000000 +dqrot207 rotate -0 -2 -> -0 +dqrot208 rotate -1234567890123456789012345678901234 -1 -> -4123456789012345678901234567890123 +dqrot209 rotate -1234567890123456789012345678901234 -33 -> -2345678901234567890123456789012341 +dqrot210 rotate -1234567890123456789012345678901234 -34 -> -1234567890123456789012345678901234 +dqrot211 rotate -9934567890123456789012345678901234 -33 -> -9345678901234567890123456789012349 +dqrot212 rotate -9934567890123456789012345678901234 -34 -> -9934567890123456789012345678901234 + + +-- Specials; NaNs are handled as usual +dqrot781 rotate -Inf -8 -> -Infinity +dqrot782 rotate -Inf -1 -> -Infinity +dqrot783 rotate -Inf -0 -> -Infinity +dqrot784 rotate -Inf 0 -> -Infinity +dqrot785 rotate -Inf 1 -> -Infinity +dqrot786 rotate -Inf 8 -> -Infinity +dqrot787 rotate -1000 -Inf -> NaN Invalid_operation +dqrot788 rotate -Inf -Inf -> NaN Invalid_operation +dqrot789 rotate -1 -Inf -> NaN Invalid_operation +dqrot790 rotate -0 -Inf -> NaN Invalid_operation +dqrot791 rotate 0 -Inf -> NaN Invalid_operation +dqrot792 rotate 1 -Inf -> NaN Invalid_operation +dqrot793 rotate 1000 -Inf -> NaN Invalid_operation +dqrot794 rotate Inf -Inf -> NaN Invalid_operation + +dqrot800 rotate Inf -Inf -> NaN Invalid_operation +dqrot801 rotate Inf -8 -> Infinity +dqrot802 rotate Inf -1 -> Infinity +dqrot803 rotate Inf -0 -> Infinity +dqrot804 rotate Inf 0 -> Infinity +dqrot805 rotate Inf 1 -> Infinity +dqrot806 rotate Inf 8 -> Infinity +dqrot807 rotate Inf Inf -> NaN Invalid_operation +dqrot808 rotate -1000 Inf -> NaN Invalid_operation +dqrot809 rotate -Inf Inf -> NaN Invalid_operation +dqrot810 rotate -1 Inf -> NaN Invalid_operation +dqrot811 rotate -0 Inf -> NaN Invalid_operation +dqrot812 rotate 0 Inf -> NaN Invalid_operation +dqrot813 rotate 1 Inf -> NaN Invalid_operation +dqrot814 rotate 1000 Inf -> NaN Invalid_operation +dqrot815 rotate Inf Inf -> NaN Invalid_operation + +dqrot821 rotate NaN -Inf -> NaN +dqrot822 rotate NaN -1000 -> NaN +dqrot823 rotate NaN -1 -> NaN +dqrot824 rotate NaN -0 -> NaN +dqrot825 rotate NaN 0 -> NaN +dqrot826 rotate NaN 1 -> NaN +dqrot827 rotate NaN 1000 -> NaN +dqrot828 rotate NaN Inf -> NaN +dqrot829 rotate NaN NaN -> NaN +dqrot830 rotate -Inf NaN -> NaN +dqrot831 rotate -1000 NaN -> NaN +dqrot832 rotate -1 NaN -> NaN +dqrot833 rotate -0 NaN -> NaN +dqrot834 rotate 0 NaN -> NaN +dqrot835 rotate 1 NaN -> NaN +dqrot836 rotate 1000 NaN -> NaN +dqrot837 rotate Inf NaN -> NaN + +dqrot841 rotate sNaN -Inf -> NaN Invalid_operation +dqrot842 rotate sNaN -1000 -> NaN Invalid_operation +dqrot843 rotate sNaN -1 -> NaN Invalid_operation +dqrot844 rotate sNaN -0 -> NaN Invalid_operation +dqrot845 rotate sNaN 0 -> NaN Invalid_operation +dqrot846 rotate sNaN 1 -> NaN Invalid_operation +dqrot847 rotate sNaN 1000 -> NaN Invalid_operation +dqrot848 rotate sNaN NaN -> NaN Invalid_operation +dqrot849 rotate sNaN sNaN -> NaN Invalid_operation +dqrot850 rotate NaN sNaN -> NaN Invalid_operation +dqrot851 rotate -Inf sNaN -> NaN Invalid_operation +dqrot852 rotate -1000 sNaN -> NaN Invalid_operation +dqrot853 rotate -1 sNaN -> NaN Invalid_operation +dqrot854 rotate -0 sNaN -> NaN Invalid_operation +dqrot855 rotate 0 sNaN -> NaN Invalid_operation +dqrot856 rotate 1 sNaN -> NaN Invalid_operation +dqrot857 rotate 1000 sNaN -> NaN Invalid_operation +dqrot858 rotate Inf sNaN -> NaN Invalid_operation +dqrot859 rotate NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqrot861 rotate NaN1 -Inf -> NaN1 +dqrot862 rotate +NaN2 -1000 -> NaN2 +dqrot863 rotate NaN3 1000 -> NaN3 +dqrot864 rotate NaN4 Inf -> NaN4 +dqrot865 rotate NaN5 +NaN6 -> NaN5 +dqrot866 rotate -Inf NaN7 -> NaN7 +dqrot867 rotate -1000 NaN8 -> NaN8 +dqrot868 rotate 1000 NaN9 -> NaN9 +dqrot869 rotate Inf +NaN10 -> NaN10 +dqrot871 rotate sNaN11 -Inf -> NaN11 Invalid_operation +dqrot872 rotate sNaN12 -1000 -> NaN12 Invalid_operation +dqrot873 rotate sNaN13 1000 -> NaN13 Invalid_operation +dqrot874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation +dqrot875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation +dqrot876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation +dqrot877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation +dqrot878 rotate -1000 sNaN21 -> NaN21 Invalid_operation +dqrot879 rotate 1000 sNaN22 -> NaN22 Invalid_operation +dqrot880 rotate Inf sNaN23 -> NaN23 Invalid_operation +dqrot881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqrot882 rotate -NaN26 NaN28 -> -NaN26 +dqrot883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqrot884 rotate 1000 -NaN30 -> -NaN30 +dqrot885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/dqSameQuantum.decTest b/Lib/test/decimaltestdata/dqSameQuantum.decTest index 2f356bbae91..257cda802d5 100644 --- a/Lib/test/decimaltestdata/dqSameQuantum.decTest +++ b/Lib/test/decimaltestdata/dqSameQuantum.decTest @@ -1,389 +1,389 @@ ------------------------------------------------------------------------- --- dqSameQuantum.decTest -- check decQuad quantums match -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqsamq001 samequantum 0 0 -> 1 -dqsamq002 samequantum 0 1 -> 1 -dqsamq003 samequantum 1 0 -> 1 -dqsamq004 samequantum 1 1 -> 1 - -dqsamq011 samequantum 10 1E+1 -> 0 -dqsamq012 samequantum 10E+1 10E+1 -> 1 -dqsamq013 samequantum 100 10E+1 -> 0 -dqsamq014 samequantum 100 1E+2 -> 0 -dqsamq015 samequantum 0.1 1E-2 -> 0 -dqsamq016 samequantum 0.1 1E-1 -> 1 -dqsamq017 samequantum 0.1 1E-0 -> 0 -dqsamq018 samequantum 999 999 -> 1 -dqsamq019 samequantum 999E-1 99.9 -> 1 -dqsamq020 samequantum 111E-1 22.2 -> 1 -dqsamq021 samequantum 111E-1 1234.2 -> 1 - --- zeros -dqsamq030 samequantum 0.0 1.1 -> 1 -dqsamq031 samequantum 0.0 1.11 -> 0 -dqsamq032 samequantum 0.0 0 -> 0 -dqsamq033 samequantum 0.0 0.0 -> 1 -dqsamq034 samequantum 0.0 0.00 -> 0 -dqsamq035 samequantum 0E+1 0E+0 -> 0 -dqsamq036 samequantum 0E+1 0E+1 -> 1 -dqsamq037 samequantum 0E+1 0E+2 -> 0 -dqsamq038 samequantum 0E-17 0E-16 -> 0 -dqsamq039 samequantum 0E-17 0E-17 -> 1 -dqsamq040 samequantum 0E-17 0E-18 -> 0 -dqsamq041 samequantum 0E-17 0.0E-15 -> 0 -dqsamq042 samequantum 0E-17 0.0E-16 -> 1 -dqsamq043 samequantum 0E-17 0.0E-17 -> 0 -dqsamq044 samequantum -0E-17 0.0E-16 -> 1 -dqsamq045 samequantum 0E-17 -0.0E-17 -> 0 -dqsamq046 samequantum 0E-17 -0.0E-16 -> 1 -dqsamq047 samequantum -0E-17 0.0E-17 -> 0 -dqsamq048 samequantum -0E-17 -0.0E-16 -> 1 -dqsamq049 samequantum -0E-17 -0.0E-17 -> 0 - --- Nmax, Nmin, Ntiny -dqsamq051 samequantum 9.99999999999999999999999999999999E+6144 9.99999999999999999999999999999999E+6144 -> 1 -dqsamq052 samequantum 1E-6143 1E-6143 -> 1 -dqsamq053 samequantum 1.00000000000000000000000000000000E-6143 1.00000000000000000000000000000000E-6143 -> 1 -dqsamq054 samequantum 1E-6176 1E-6176 -> 1 -dqsamq055 samequantum 9.99999999999999999999999999999999E+6144 9.99999999999999999999999999999999E+6144 -> 1 -dqsamq056 samequantum 1E-6143 1E-6143 -> 1 -dqsamq057 samequantum 1.00000000000000000000000000000000E-6143 1.00000000000000000000000000000000E-6143 -> 1 -dqsamq058 samequantum 1E-6176 1E-6176 -> 1 - -dqsamq061 samequantum -1E-6176 -1E-6176 -> 1 -dqsamq062 samequantum -1.00000000000000000000000000000000E-6143 -1.00000000000000000000000000000000E-6143 -> 1 -dqsamq063 samequantum -1E-6143 -1E-6143 -> 1 -dqsamq064 samequantum -9.99999999999999999999999999999999E+6144 -9.99999999999999999999999999999999E+6144 -> 1 -dqsamq065 samequantum -1E-6176 -1E-6176 -> 1 -dqsamq066 samequantum -1.00000000000000000000000000000000E-6143 -1.00000000000000000000000000000000E-6143 -> 1 -dqsamq067 samequantum -1E-6143 -1E-6143 -> 1 -dqsamq068 samequantum -9.99999999999999999999999999999999E+6144 -9.99999999999999999999999999999999E+6144 -> 1 - -dqsamq071 samequantum -4E-6176 -1E-6176 -> 1 -dqsamq072 samequantum -4.00000000000000000000000000000000E-6143 -1.00000000000000000000000000004000E-6143 -> 1 -dqsamq073 samequantum -4E-6143 -1E-6143 -> 1 -dqsamq074 samequantum -4.99999999999999999999999999999999E+6144 -9.99949999999999999999999999999999E+6144 -> 1 -dqsamq075 samequantum -4E-6176 -1E-6176 -> 1 -dqsamq076 samequantum -4.00000000000000000000000000000000E-6143 -1.00400000000000000000000000000000E-6143 -> 1 -dqsamq077 samequantum -4E-6143 -1E-6143 -> 1 -dqsamq078 samequantum -4.99999999999999999999999999999999E+6144 -9.94999999999999999999999999999999E+6144 -> 1 - -dqsamq081 samequantum -4E-1006 -1E-6176 -> 0 -dqsamq082 samequantum -4.00000000000000000000000000000000E-6143 -1.00004000000000000000000000000000E-6136 -> 0 -dqsamq083 samequantum -4E-6140 -1E-6143 -> 0 -dqsamq084 samequantum -4.99999999999999999999999999999999E+6144 -9.99949999999999999999999999999999E+6136 -> 0 -dqsamq085 samequantum -4E-1006 -1E-6176 -> 0 -dqsamq086 samequantum -4.00000000000000000000000000000000E-6143 -1.00400000000000000000000000000000E-6136 -> 0 -dqsamq087 samequantum -4E-6133 -1E-6143 -> 0 -dqsamq088 samequantum -4.99999999999999999999999999999999E+6144 -9.94999999999999999999999999999999E+6136 -> 0 - --- specials & combinations -dqsamq0110 samequantum -Inf -Inf -> 1 -dqsamq0111 samequantum -Inf Inf -> 1 -dqsamq0112 samequantum -Inf NaN -> 0 -dqsamq0113 samequantum -Inf -7E+3 -> 0 -dqsamq0114 samequantum -Inf -7 -> 0 -dqsamq0115 samequantum -Inf -7E-3 -> 0 -dqsamq0116 samequantum -Inf -0E-3 -> 0 -dqsamq0117 samequantum -Inf -0 -> 0 -dqsamq0118 samequantum -Inf -0E+3 -> 0 -dqsamq0119 samequantum -Inf 0E-3 -> 0 -dqsamq0120 samequantum -Inf 0 -> 0 -dqsamq0121 samequantum -Inf 0E+3 -> 0 -dqsamq0122 samequantum -Inf 7E-3 -> 0 -dqsamq0123 samequantum -Inf 7 -> 0 -dqsamq0124 samequantum -Inf 7E+3 -> 0 -dqsamq0125 samequantum -Inf sNaN -> 0 - -dqsamq0210 samequantum Inf -Inf -> 1 -dqsamq0211 samequantum Inf Inf -> 1 -dqsamq0212 samequantum Inf NaN -> 0 -dqsamq0213 samequantum Inf -7E+3 -> 0 -dqsamq0214 samequantum Inf -7 -> 0 -dqsamq0215 samequantum Inf -7E-3 -> 0 -dqsamq0216 samequantum Inf -0E-3 -> 0 -dqsamq0217 samequantum Inf -0 -> 0 -dqsamq0218 samequantum Inf -0E+3 -> 0 -dqsamq0219 samequantum Inf 0E-3 -> 0 -dqsamq0220 samequantum Inf 0 -> 0 -dqsamq0221 samequantum Inf 0E+3 -> 0 -dqsamq0222 samequantum Inf 7E-3 -> 0 -dqsamq0223 samequantum Inf 7 -> 0 -dqsamq0224 samequantum Inf 7E+3 -> 0 -dqsamq0225 samequantum Inf sNaN -> 0 - -dqsamq0310 samequantum NaN -Inf -> 0 -dqsamq0311 samequantum NaN Inf -> 0 -dqsamq0312 samequantum NaN NaN -> 1 -dqsamq0313 samequantum NaN -7E+3 -> 0 -dqsamq0314 samequantum NaN -7 -> 0 -dqsamq0315 samequantum NaN -7E-3 -> 0 -dqsamq0316 samequantum NaN -0E-3 -> 0 -dqsamq0317 samequantum NaN -0 -> 0 -dqsamq0318 samequantum NaN -0E+3 -> 0 -dqsamq0319 samequantum NaN 0E-3 -> 0 -dqsamq0320 samequantum NaN 0 -> 0 -dqsamq0321 samequantum NaN 0E+3 -> 0 -dqsamq0322 samequantum NaN 7E-3 -> 0 -dqsamq0323 samequantum NaN 7 -> 0 -dqsamq0324 samequantum NaN 7E+3 -> 0 -dqsamq0325 samequantum NaN sNaN -> 1 - -dqsamq0410 samequantum -7E+3 -Inf -> 0 -dqsamq0411 samequantum -7E+3 Inf -> 0 -dqsamq0412 samequantum -7E+3 NaN -> 0 -dqsamq0413 samequantum -7E+3 -7E+3 -> 1 -dqsamq0414 samequantum -7E+3 -7 -> 0 -dqsamq0415 samequantum -7E+3 -7E-3 -> 0 -dqsamq0416 samequantum -7E+3 -0E-3 -> 0 -dqsamq0417 samequantum -7E+3 -0 -> 0 -dqsamq0418 samequantum -7E+3 -0E+3 -> 1 -dqsamq0419 samequantum -7E+3 0E-3 -> 0 -dqsamq0420 samequantum -7E+3 0 -> 0 -dqsamq0421 samequantum -7E+3 0E+3 -> 1 -dqsamq0422 samequantum -7E+3 7E-3 -> 0 -dqsamq0423 samequantum -7E+3 7 -> 0 -dqsamq0424 samequantum -7E+3 7E+3 -> 1 -dqsamq0425 samequantum -7E+3 sNaN -> 0 - -dqsamq0510 samequantum -7 -Inf -> 0 -dqsamq0511 samequantum -7 Inf -> 0 -dqsamq0512 samequantum -7 NaN -> 0 -dqsamq0513 samequantum -7 -7E+3 -> 0 -dqsamq0514 samequantum -7 -7 -> 1 -dqsamq0515 samequantum -7 -7E-3 -> 0 -dqsamq0516 samequantum -7 -0E-3 -> 0 -dqsamq0517 samequantum -7 -0 -> 1 -dqsamq0518 samequantum -7 -0E+3 -> 0 -dqsamq0519 samequantum -7 0E-3 -> 0 -dqsamq0520 samequantum -7 0 -> 1 -dqsamq0521 samequantum -7 0E+3 -> 0 -dqsamq0522 samequantum -7 7E-3 -> 0 -dqsamq0523 samequantum -7 7 -> 1 -dqsamq0524 samequantum -7 7E+3 -> 0 -dqsamq0525 samequantum -7 sNaN -> 0 - -dqsamq0610 samequantum -7E-3 -Inf -> 0 -dqsamq0611 samequantum -7E-3 Inf -> 0 -dqsamq0612 samequantum -7E-3 NaN -> 0 -dqsamq0613 samequantum -7E-3 -7E+3 -> 0 -dqsamq0614 samequantum -7E-3 -7 -> 0 -dqsamq0615 samequantum -7E-3 -7E-3 -> 1 -dqsamq0616 samequantum -7E-3 -0E-3 -> 1 -dqsamq0617 samequantum -7E-3 -0 -> 0 -dqsamq0618 samequantum -7E-3 -0E+3 -> 0 -dqsamq0619 samequantum -7E-3 0E-3 -> 1 -dqsamq0620 samequantum -7E-3 0 -> 0 -dqsamq0621 samequantum -7E-3 0E+3 -> 0 -dqsamq0622 samequantum -7E-3 7E-3 -> 1 -dqsamq0623 samequantum -7E-3 7 -> 0 -dqsamq0624 samequantum -7E-3 7E+3 -> 0 -dqsamq0625 samequantum -7E-3 sNaN -> 0 - -dqsamq0710 samequantum -0E-3 -Inf -> 0 -dqsamq0711 samequantum -0E-3 Inf -> 0 -dqsamq0712 samequantum -0E-3 NaN -> 0 -dqsamq0713 samequantum -0E-3 -7E+3 -> 0 -dqsamq0714 samequantum -0E-3 -7 -> 0 -dqsamq0715 samequantum -0E-3 -7E-3 -> 1 -dqsamq0716 samequantum -0E-3 -0E-3 -> 1 -dqsamq0717 samequantum -0E-3 -0 -> 0 -dqsamq0718 samequantum -0E-3 -0E+3 -> 0 -dqsamq0719 samequantum -0E-3 0E-3 -> 1 -dqsamq0720 samequantum -0E-3 0 -> 0 -dqsamq0721 samequantum -0E-3 0E+3 -> 0 -dqsamq0722 samequantum -0E-3 7E-3 -> 1 -dqsamq0723 samequantum -0E-3 7 -> 0 -dqsamq0724 samequantum -0E-3 7E+3 -> 0 -dqsamq0725 samequantum -0E-3 sNaN -> 0 - -dqsamq0810 samequantum -0 -Inf -> 0 -dqsamq0811 samequantum -0 Inf -> 0 -dqsamq0812 samequantum -0 NaN -> 0 -dqsamq0813 samequantum -0 -7E+3 -> 0 -dqsamq0814 samequantum -0 -7 -> 1 -dqsamq0815 samequantum -0 -7E-3 -> 0 -dqsamq0816 samequantum -0 -0E-3 -> 0 -dqsamq0817 samequantum -0 -0 -> 1 -dqsamq0818 samequantum -0 -0E+3 -> 0 -dqsamq0819 samequantum -0 0E-3 -> 0 -dqsamq0820 samequantum -0 0 -> 1 -dqsamq0821 samequantum -0 0E+3 -> 0 -dqsamq0822 samequantum -0 7E-3 -> 0 -dqsamq0823 samequantum -0 7 -> 1 -dqsamq0824 samequantum -0 7E+3 -> 0 -dqsamq0825 samequantum -0 sNaN -> 0 - -dqsamq0910 samequantum -0E+3 -Inf -> 0 -dqsamq0911 samequantum -0E+3 Inf -> 0 -dqsamq0912 samequantum -0E+3 NaN -> 0 -dqsamq0913 samequantum -0E+3 -7E+3 -> 1 -dqsamq0914 samequantum -0E+3 -7 -> 0 -dqsamq0915 samequantum -0E+3 -7E-3 -> 0 -dqsamq0916 samequantum -0E+3 -0E-3 -> 0 -dqsamq0917 samequantum -0E+3 -0 -> 0 -dqsamq0918 samequantum -0E+3 -0E+3 -> 1 -dqsamq0919 samequantum -0E+3 0E-3 -> 0 -dqsamq0920 samequantum -0E+3 0 -> 0 -dqsamq0921 samequantum -0E+3 0E+3 -> 1 -dqsamq0922 samequantum -0E+3 7E-3 -> 0 -dqsamq0923 samequantum -0E+3 7 -> 0 -dqsamq0924 samequantum -0E+3 7E+3 -> 1 -dqsamq0925 samequantum -0E+3 sNaN -> 0 - -dqsamq1110 samequantum 0E-3 -Inf -> 0 -dqsamq1111 samequantum 0E-3 Inf -> 0 -dqsamq1112 samequantum 0E-3 NaN -> 0 -dqsamq1113 samequantum 0E-3 -7E+3 -> 0 -dqsamq1114 samequantum 0E-3 -7 -> 0 -dqsamq1115 samequantum 0E-3 -7E-3 -> 1 -dqsamq1116 samequantum 0E-3 -0E-3 -> 1 -dqsamq1117 samequantum 0E-3 -0 -> 0 -dqsamq1118 samequantum 0E-3 -0E+3 -> 0 -dqsamq1119 samequantum 0E-3 0E-3 -> 1 -dqsamq1120 samequantum 0E-3 0 -> 0 -dqsamq1121 samequantum 0E-3 0E+3 -> 0 -dqsamq1122 samequantum 0E-3 7E-3 -> 1 -dqsamq1123 samequantum 0E-3 7 -> 0 -dqsamq1124 samequantum 0E-3 7E+3 -> 0 -dqsamq1125 samequantum 0E-3 sNaN -> 0 - -dqsamq1210 samequantum 0 -Inf -> 0 -dqsamq1211 samequantum 0 Inf -> 0 -dqsamq1212 samequantum 0 NaN -> 0 -dqsamq1213 samequantum 0 -7E+3 -> 0 -dqsamq1214 samequantum 0 -7 -> 1 -dqsamq1215 samequantum 0 -7E-3 -> 0 -dqsamq1216 samequantum 0 -0E-3 -> 0 -dqsamq1217 samequantum 0 -0 -> 1 -dqsamq1218 samequantum 0 -0E+3 -> 0 -dqsamq1219 samequantum 0 0E-3 -> 0 -dqsamq1220 samequantum 0 0 -> 1 -dqsamq1221 samequantum 0 0E+3 -> 0 -dqsamq1222 samequantum 0 7E-3 -> 0 -dqsamq1223 samequantum 0 7 -> 1 -dqsamq1224 samequantum 0 7E+3 -> 0 -dqsamq1225 samequantum 0 sNaN -> 0 - -dqsamq1310 samequantum 0E+3 -Inf -> 0 -dqsamq1311 samequantum 0E+3 Inf -> 0 -dqsamq1312 samequantum 0E+3 NaN -> 0 -dqsamq1313 samequantum 0E+3 -7E+3 -> 1 -dqsamq1314 samequantum 0E+3 -7 -> 0 -dqsamq1315 samequantum 0E+3 -7E-3 -> 0 -dqsamq1316 samequantum 0E+3 -0E-3 -> 0 -dqsamq1317 samequantum 0E+3 -0 -> 0 -dqsamq1318 samequantum 0E+3 -0E+3 -> 1 -dqsamq1319 samequantum 0E+3 0E-3 -> 0 -dqsamq1320 samequantum 0E+3 0 -> 0 -dqsamq1321 samequantum 0E+3 0E+3 -> 1 -dqsamq1322 samequantum 0E+3 7E-3 -> 0 -dqsamq1323 samequantum 0E+3 7 -> 0 -dqsamq1324 samequantum 0E+3 7E+3 -> 1 -dqsamq1325 samequantum 0E+3 sNaN -> 0 - -dqsamq1410 samequantum 7E-3 -Inf -> 0 -dqsamq1411 samequantum 7E-3 Inf -> 0 -dqsamq1412 samequantum 7E-3 NaN -> 0 -dqsamq1413 samequantum 7E-3 -7E+3 -> 0 -dqsamq1414 samequantum 7E-3 -7 -> 0 -dqsamq1415 samequantum 7E-3 -7E-3 -> 1 -dqsamq1416 samequantum 7E-3 -0E-3 -> 1 -dqsamq1417 samequantum 7E-3 -0 -> 0 -dqsamq1418 samequantum 7E-3 -0E+3 -> 0 -dqsamq1419 samequantum 7E-3 0E-3 -> 1 -dqsamq1420 samequantum 7E-3 0 -> 0 -dqsamq1421 samequantum 7E-3 0E+3 -> 0 -dqsamq1422 samequantum 7E-3 7E-3 -> 1 -dqsamq1423 samequantum 7E-3 7 -> 0 -dqsamq1424 samequantum 7E-3 7E+3 -> 0 -dqsamq1425 samequantum 7E-3 sNaN -> 0 - -dqsamq1510 samequantum 7 -Inf -> 0 -dqsamq1511 samequantum 7 Inf -> 0 -dqsamq1512 samequantum 7 NaN -> 0 -dqsamq1513 samequantum 7 -7E+3 -> 0 -dqsamq1514 samequantum 7 -7 -> 1 -dqsamq1515 samequantum 7 -7E-3 -> 0 -dqsamq1516 samequantum 7 -0E-3 -> 0 -dqsamq1517 samequantum 7 -0 -> 1 -dqsamq1518 samequantum 7 -0E+3 -> 0 -dqsamq1519 samequantum 7 0E-3 -> 0 -dqsamq1520 samequantum 7 0 -> 1 -dqsamq1521 samequantum 7 0E+3 -> 0 -dqsamq1522 samequantum 7 7E-3 -> 0 -dqsamq1523 samequantum 7 7 -> 1 -dqsamq1524 samequantum 7 7E+3 -> 0 -dqsamq1525 samequantum 7 sNaN -> 0 - -dqsamq1610 samequantum 7E+3 -Inf -> 0 -dqsamq1611 samequantum 7E+3 Inf -> 0 -dqsamq1612 samequantum 7E+3 NaN -> 0 -dqsamq1613 samequantum 7E+3 -7E+3 -> 1 -dqsamq1614 samequantum 7E+3 -7 -> 0 -dqsamq1615 samequantum 7E+3 -7E-3 -> 0 -dqsamq1616 samequantum 7E+3 -0E-3 -> 0 -dqsamq1617 samequantum 7E+3 -0 -> 0 -dqsamq1618 samequantum 7E+3 -0E+3 -> 1 -dqsamq1619 samequantum 7E+3 0E-3 -> 0 -dqsamq1620 samequantum 7E+3 0 -> 0 -dqsamq1621 samequantum 7E+3 0E+3 -> 1 -dqsamq1622 samequantum 7E+3 7E-3 -> 0 -dqsamq1623 samequantum 7E+3 7 -> 0 -dqsamq1624 samequantum 7E+3 7E+3 -> 1 -dqsamq1625 samequantum 7E+3 sNaN -> 0 - -dqsamq1710 samequantum sNaN -Inf -> 0 -dqsamq1711 samequantum sNaN Inf -> 0 -dqsamq1712 samequantum sNaN NaN -> 1 -dqsamq1713 samequantum sNaN -7E+3 -> 0 -dqsamq1714 samequantum sNaN -7 -> 0 -dqsamq1715 samequantum sNaN -7E-3 -> 0 -dqsamq1716 samequantum sNaN -0E-3 -> 0 -dqsamq1717 samequantum sNaN -0 -> 0 -dqsamq1718 samequantum sNaN -0E+3 -> 0 -dqsamq1719 samequantum sNaN 0E-3 -> 0 -dqsamq1720 samequantum sNaN 0 -> 0 -dqsamq1721 samequantum sNaN 0E+3 -> 0 -dqsamq1722 samequantum sNaN 7E-3 -> 0 -dqsamq1723 samequantum sNaN 7 -> 0 -dqsamq1724 samequantum sNaN 7E+3 -> 0 -dqsamq1725 samequantum sNaN sNaN -> 1 --- noisy NaNs -dqsamq1730 samequantum sNaN3 sNaN3 -> 1 -dqsamq1731 samequantum sNaN3 sNaN4 -> 1 -dqsamq1732 samequantum NaN3 NaN3 -> 1 -dqsamq1733 samequantum NaN3 NaN4 -> 1 -dqsamq1734 samequantum sNaN3 3 -> 0 -dqsamq1735 samequantum NaN3 3 -> 0 -dqsamq1736 samequantum 4 sNaN4 -> 0 -dqsamq1737 samequantum 3 NaN3 -> 0 -dqsamq1738 samequantum Inf sNaN4 -> 0 -dqsamq1739 samequantum -Inf NaN3 -> 0 - +------------------------------------------------------------------------ +-- dqSameQuantum.decTest -- check decQuad quantums match -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqsamq001 samequantum 0 0 -> 1 +dqsamq002 samequantum 0 1 -> 1 +dqsamq003 samequantum 1 0 -> 1 +dqsamq004 samequantum 1 1 -> 1 + +dqsamq011 samequantum 10 1E+1 -> 0 +dqsamq012 samequantum 10E+1 10E+1 -> 1 +dqsamq013 samequantum 100 10E+1 -> 0 +dqsamq014 samequantum 100 1E+2 -> 0 +dqsamq015 samequantum 0.1 1E-2 -> 0 +dqsamq016 samequantum 0.1 1E-1 -> 1 +dqsamq017 samequantum 0.1 1E-0 -> 0 +dqsamq018 samequantum 999 999 -> 1 +dqsamq019 samequantum 999E-1 99.9 -> 1 +dqsamq020 samequantum 111E-1 22.2 -> 1 +dqsamq021 samequantum 111E-1 1234.2 -> 1 + +-- zeros +dqsamq030 samequantum 0.0 1.1 -> 1 +dqsamq031 samequantum 0.0 1.11 -> 0 +dqsamq032 samequantum 0.0 0 -> 0 +dqsamq033 samequantum 0.0 0.0 -> 1 +dqsamq034 samequantum 0.0 0.00 -> 0 +dqsamq035 samequantum 0E+1 0E+0 -> 0 +dqsamq036 samequantum 0E+1 0E+1 -> 1 +dqsamq037 samequantum 0E+1 0E+2 -> 0 +dqsamq038 samequantum 0E-17 0E-16 -> 0 +dqsamq039 samequantum 0E-17 0E-17 -> 1 +dqsamq040 samequantum 0E-17 0E-18 -> 0 +dqsamq041 samequantum 0E-17 0.0E-15 -> 0 +dqsamq042 samequantum 0E-17 0.0E-16 -> 1 +dqsamq043 samequantum 0E-17 0.0E-17 -> 0 +dqsamq044 samequantum -0E-17 0.0E-16 -> 1 +dqsamq045 samequantum 0E-17 -0.0E-17 -> 0 +dqsamq046 samequantum 0E-17 -0.0E-16 -> 1 +dqsamq047 samequantum -0E-17 0.0E-17 -> 0 +dqsamq048 samequantum -0E-17 -0.0E-16 -> 1 +dqsamq049 samequantum -0E-17 -0.0E-17 -> 0 + +-- Nmax, Nmin, Ntiny +dqsamq051 samequantum 9.99999999999999999999999999999999E+6144 9.99999999999999999999999999999999E+6144 -> 1 +dqsamq052 samequantum 1E-6143 1E-6143 -> 1 +dqsamq053 samequantum 1.00000000000000000000000000000000E-6143 1.00000000000000000000000000000000E-6143 -> 1 +dqsamq054 samequantum 1E-6176 1E-6176 -> 1 +dqsamq055 samequantum 9.99999999999999999999999999999999E+6144 9.99999999999999999999999999999999E+6144 -> 1 +dqsamq056 samequantum 1E-6143 1E-6143 -> 1 +dqsamq057 samequantum 1.00000000000000000000000000000000E-6143 1.00000000000000000000000000000000E-6143 -> 1 +dqsamq058 samequantum 1E-6176 1E-6176 -> 1 + +dqsamq061 samequantum -1E-6176 -1E-6176 -> 1 +dqsamq062 samequantum -1.00000000000000000000000000000000E-6143 -1.00000000000000000000000000000000E-6143 -> 1 +dqsamq063 samequantum -1E-6143 -1E-6143 -> 1 +dqsamq064 samequantum -9.99999999999999999999999999999999E+6144 -9.99999999999999999999999999999999E+6144 -> 1 +dqsamq065 samequantum -1E-6176 -1E-6176 -> 1 +dqsamq066 samequantum -1.00000000000000000000000000000000E-6143 -1.00000000000000000000000000000000E-6143 -> 1 +dqsamq067 samequantum -1E-6143 -1E-6143 -> 1 +dqsamq068 samequantum -9.99999999999999999999999999999999E+6144 -9.99999999999999999999999999999999E+6144 -> 1 + +dqsamq071 samequantum -4E-6176 -1E-6176 -> 1 +dqsamq072 samequantum -4.00000000000000000000000000000000E-6143 -1.00000000000000000000000000004000E-6143 -> 1 +dqsamq073 samequantum -4E-6143 -1E-6143 -> 1 +dqsamq074 samequantum -4.99999999999999999999999999999999E+6144 -9.99949999999999999999999999999999E+6144 -> 1 +dqsamq075 samequantum -4E-6176 -1E-6176 -> 1 +dqsamq076 samequantum -4.00000000000000000000000000000000E-6143 -1.00400000000000000000000000000000E-6143 -> 1 +dqsamq077 samequantum -4E-6143 -1E-6143 -> 1 +dqsamq078 samequantum -4.99999999999999999999999999999999E+6144 -9.94999999999999999999999999999999E+6144 -> 1 + +dqsamq081 samequantum -4E-1006 -1E-6176 -> 0 +dqsamq082 samequantum -4.00000000000000000000000000000000E-6143 -1.00004000000000000000000000000000E-6136 -> 0 +dqsamq083 samequantum -4E-6140 -1E-6143 -> 0 +dqsamq084 samequantum -4.99999999999999999999999999999999E+6144 -9.99949999999999999999999999999999E+6136 -> 0 +dqsamq085 samequantum -4E-1006 -1E-6176 -> 0 +dqsamq086 samequantum -4.00000000000000000000000000000000E-6143 -1.00400000000000000000000000000000E-6136 -> 0 +dqsamq087 samequantum -4E-6133 -1E-6143 -> 0 +dqsamq088 samequantum -4.99999999999999999999999999999999E+6144 -9.94999999999999999999999999999999E+6136 -> 0 + +-- specials & combinations +dqsamq0110 samequantum -Inf -Inf -> 1 +dqsamq0111 samequantum -Inf Inf -> 1 +dqsamq0112 samequantum -Inf NaN -> 0 +dqsamq0113 samequantum -Inf -7E+3 -> 0 +dqsamq0114 samequantum -Inf -7 -> 0 +dqsamq0115 samequantum -Inf -7E-3 -> 0 +dqsamq0116 samequantum -Inf -0E-3 -> 0 +dqsamq0117 samequantum -Inf -0 -> 0 +dqsamq0118 samequantum -Inf -0E+3 -> 0 +dqsamq0119 samequantum -Inf 0E-3 -> 0 +dqsamq0120 samequantum -Inf 0 -> 0 +dqsamq0121 samequantum -Inf 0E+3 -> 0 +dqsamq0122 samequantum -Inf 7E-3 -> 0 +dqsamq0123 samequantum -Inf 7 -> 0 +dqsamq0124 samequantum -Inf 7E+3 -> 0 +dqsamq0125 samequantum -Inf sNaN -> 0 + +dqsamq0210 samequantum Inf -Inf -> 1 +dqsamq0211 samequantum Inf Inf -> 1 +dqsamq0212 samequantum Inf NaN -> 0 +dqsamq0213 samequantum Inf -7E+3 -> 0 +dqsamq0214 samequantum Inf -7 -> 0 +dqsamq0215 samequantum Inf -7E-3 -> 0 +dqsamq0216 samequantum Inf -0E-3 -> 0 +dqsamq0217 samequantum Inf -0 -> 0 +dqsamq0218 samequantum Inf -0E+3 -> 0 +dqsamq0219 samequantum Inf 0E-3 -> 0 +dqsamq0220 samequantum Inf 0 -> 0 +dqsamq0221 samequantum Inf 0E+3 -> 0 +dqsamq0222 samequantum Inf 7E-3 -> 0 +dqsamq0223 samequantum Inf 7 -> 0 +dqsamq0224 samequantum Inf 7E+3 -> 0 +dqsamq0225 samequantum Inf sNaN -> 0 + +dqsamq0310 samequantum NaN -Inf -> 0 +dqsamq0311 samequantum NaN Inf -> 0 +dqsamq0312 samequantum NaN NaN -> 1 +dqsamq0313 samequantum NaN -7E+3 -> 0 +dqsamq0314 samequantum NaN -7 -> 0 +dqsamq0315 samequantum NaN -7E-3 -> 0 +dqsamq0316 samequantum NaN -0E-3 -> 0 +dqsamq0317 samequantum NaN -0 -> 0 +dqsamq0318 samequantum NaN -0E+3 -> 0 +dqsamq0319 samequantum NaN 0E-3 -> 0 +dqsamq0320 samequantum NaN 0 -> 0 +dqsamq0321 samequantum NaN 0E+3 -> 0 +dqsamq0322 samequantum NaN 7E-3 -> 0 +dqsamq0323 samequantum NaN 7 -> 0 +dqsamq0324 samequantum NaN 7E+3 -> 0 +dqsamq0325 samequantum NaN sNaN -> 1 + +dqsamq0410 samequantum -7E+3 -Inf -> 0 +dqsamq0411 samequantum -7E+3 Inf -> 0 +dqsamq0412 samequantum -7E+3 NaN -> 0 +dqsamq0413 samequantum -7E+3 -7E+3 -> 1 +dqsamq0414 samequantum -7E+3 -7 -> 0 +dqsamq0415 samequantum -7E+3 -7E-3 -> 0 +dqsamq0416 samequantum -7E+3 -0E-3 -> 0 +dqsamq0417 samequantum -7E+3 -0 -> 0 +dqsamq0418 samequantum -7E+3 -0E+3 -> 1 +dqsamq0419 samequantum -7E+3 0E-3 -> 0 +dqsamq0420 samequantum -7E+3 0 -> 0 +dqsamq0421 samequantum -7E+3 0E+3 -> 1 +dqsamq0422 samequantum -7E+3 7E-3 -> 0 +dqsamq0423 samequantum -7E+3 7 -> 0 +dqsamq0424 samequantum -7E+3 7E+3 -> 1 +dqsamq0425 samequantum -7E+3 sNaN -> 0 + +dqsamq0510 samequantum -7 -Inf -> 0 +dqsamq0511 samequantum -7 Inf -> 0 +dqsamq0512 samequantum -7 NaN -> 0 +dqsamq0513 samequantum -7 -7E+3 -> 0 +dqsamq0514 samequantum -7 -7 -> 1 +dqsamq0515 samequantum -7 -7E-3 -> 0 +dqsamq0516 samequantum -7 -0E-3 -> 0 +dqsamq0517 samequantum -7 -0 -> 1 +dqsamq0518 samequantum -7 -0E+3 -> 0 +dqsamq0519 samequantum -7 0E-3 -> 0 +dqsamq0520 samequantum -7 0 -> 1 +dqsamq0521 samequantum -7 0E+3 -> 0 +dqsamq0522 samequantum -7 7E-3 -> 0 +dqsamq0523 samequantum -7 7 -> 1 +dqsamq0524 samequantum -7 7E+3 -> 0 +dqsamq0525 samequantum -7 sNaN -> 0 + +dqsamq0610 samequantum -7E-3 -Inf -> 0 +dqsamq0611 samequantum -7E-3 Inf -> 0 +dqsamq0612 samequantum -7E-3 NaN -> 0 +dqsamq0613 samequantum -7E-3 -7E+3 -> 0 +dqsamq0614 samequantum -7E-3 -7 -> 0 +dqsamq0615 samequantum -7E-3 -7E-3 -> 1 +dqsamq0616 samequantum -7E-3 -0E-3 -> 1 +dqsamq0617 samequantum -7E-3 -0 -> 0 +dqsamq0618 samequantum -7E-3 -0E+3 -> 0 +dqsamq0619 samequantum -7E-3 0E-3 -> 1 +dqsamq0620 samequantum -7E-3 0 -> 0 +dqsamq0621 samequantum -7E-3 0E+3 -> 0 +dqsamq0622 samequantum -7E-3 7E-3 -> 1 +dqsamq0623 samequantum -7E-3 7 -> 0 +dqsamq0624 samequantum -7E-3 7E+3 -> 0 +dqsamq0625 samequantum -7E-3 sNaN -> 0 + +dqsamq0710 samequantum -0E-3 -Inf -> 0 +dqsamq0711 samequantum -0E-3 Inf -> 0 +dqsamq0712 samequantum -0E-3 NaN -> 0 +dqsamq0713 samequantum -0E-3 -7E+3 -> 0 +dqsamq0714 samequantum -0E-3 -7 -> 0 +dqsamq0715 samequantum -0E-3 -7E-3 -> 1 +dqsamq0716 samequantum -0E-3 -0E-3 -> 1 +dqsamq0717 samequantum -0E-3 -0 -> 0 +dqsamq0718 samequantum -0E-3 -0E+3 -> 0 +dqsamq0719 samequantum -0E-3 0E-3 -> 1 +dqsamq0720 samequantum -0E-3 0 -> 0 +dqsamq0721 samequantum -0E-3 0E+3 -> 0 +dqsamq0722 samequantum -0E-3 7E-3 -> 1 +dqsamq0723 samequantum -0E-3 7 -> 0 +dqsamq0724 samequantum -0E-3 7E+3 -> 0 +dqsamq0725 samequantum -0E-3 sNaN -> 0 + +dqsamq0810 samequantum -0 -Inf -> 0 +dqsamq0811 samequantum -0 Inf -> 0 +dqsamq0812 samequantum -0 NaN -> 0 +dqsamq0813 samequantum -0 -7E+3 -> 0 +dqsamq0814 samequantum -0 -7 -> 1 +dqsamq0815 samequantum -0 -7E-3 -> 0 +dqsamq0816 samequantum -0 -0E-3 -> 0 +dqsamq0817 samequantum -0 -0 -> 1 +dqsamq0818 samequantum -0 -0E+3 -> 0 +dqsamq0819 samequantum -0 0E-3 -> 0 +dqsamq0820 samequantum -0 0 -> 1 +dqsamq0821 samequantum -0 0E+3 -> 0 +dqsamq0822 samequantum -0 7E-3 -> 0 +dqsamq0823 samequantum -0 7 -> 1 +dqsamq0824 samequantum -0 7E+3 -> 0 +dqsamq0825 samequantum -0 sNaN -> 0 + +dqsamq0910 samequantum -0E+3 -Inf -> 0 +dqsamq0911 samequantum -0E+3 Inf -> 0 +dqsamq0912 samequantum -0E+3 NaN -> 0 +dqsamq0913 samequantum -0E+3 -7E+3 -> 1 +dqsamq0914 samequantum -0E+3 -7 -> 0 +dqsamq0915 samequantum -0E+3 -7E-3 -> 0 +dqsamq0916 samequantum -0E+3 -0E-3 -> 0 +dqsamq0917 samequantum -0E+3 -0 -> 0 +dqsamq0918 samequantum -0E+3 -0E+3 -> 1 +dqsamq0919 samequantum -0E+3 0E-3 -> 0 +dqsamq0920 samequantum -0E+3 0 -> 0 +dqsamq0921 samequantum -0E+3 0E+3 -> 1 +dqsamq0922 samequantum -0E+3 7E-3 -> 0 +dqsamq0923 samequantum -0E+3 7 -> 0 +dqsamq0924 samequantum -0E+3 7E+3 -> 1 +dqsamq0925 samequantum -0E+3 sNaN -> 0 + +dqsamq1110 samequantum 0E-3 -Inf -> 0 +dqsamq1111 samequantum 0E-3 Inf -> 0 +dqsamq1112 samequantum 0E-3 NaN -> 0 +dqsamq1113 samequantum 0E-3 -7E+3 -> 0 +dqsamq1114 samequantum 0E-3 -7 -> 0 +dqsamq1115 samequantum 0E-3 -7E-3 -> 1 +dqsamq1116 samequantum 0E-3 -0E-3 -> 1 +dqsamq1117 samequantum 0E-3 -0 -> 0 +dqsamq1118 samequantum 0E-3 -0E+3 -> 0 +dqsamq1119 samequantum 0E-3 0E-3 -> 1 +dqsamq1120 samequantum 0E-3 0 -> 0 +dqsamq1121 samequantum 0E-3 0E+3 -> 0 +dqsamq1122 samequantum 0E-3 7E-3 -> 1 +dqsamq1123 samequantum 0E-3 7 -> 0 +dqsamq1124 samequantum 0E-3 7E+3 -> 0 +dqsamq1125 samequantum 0E-3 sNaN -> 0 + +dqsamq1210 samequantum 0 -Inf -> 0 +dqsamq1211 samequantum 0 Inf -> 0 +dqsamq1212 samequantum 0 NaN -> 0 +dqsamq1213 samequantum 0 -7E+3 -> 0 +dqsamq1214 samequantum 0 -7 -> 1 +dqsamq1215 samequantum 0 -7E-3 -> 0 +dqsamq1216 samequantum 0 -0E-3 -> 0 +dqsamq1217 samequantum 0 -0 -> 1 +dqsamq1218 samequantum 0 -0E+3 -> 0 +dqsamq1219 samequantum 0 0E-3 -> 0 +dqsamq1220 samequantum 0 0 -> 1 +dqsamq1221 samequantum 0 0E+3 -> 0 +dqsamq1222 samequantum 0 7E-3 -> 0 +dqsamq1223 samequantum 0 7 -> 1 +dqsamq1224 samequantum 0 7E+3 -> 0 +dqsamq1225 samequantum 0 sNaN -> 0 + +dqsamq1310 samequantum 0E+3 -Inf -> 0 +dqsamq1311 samequantum 0E+3 Inf -> 0 +dqsamq1312 samequantum 0E+3 NaN -> 0 +dqsamq1313 samequantum 0E+3 -7E+3 -> 1 +dqsamq1314 samequantum 0E+3 -7 -> 0 +dqsamq1315 samequantum 0E+3 -7E-3 -> 0 +dqsamq1316 samequantum 0E+3 -0E-3 -> 0 +dqsamq1317 samequantum 0E+3 -0 -> 0 +dqsamq1318 samequantum 0E+3 -0E+3 -> 1 +dqsamq1319 samequantum 0E+3 0E-3 -> 0 +dqsamq1320 samequantum 0E+3 0 -> 0 +dqsamq1321 samequantum 0E+3 0E+3 -> 1 +dqsamq1322 samequantum 0E+3 7E-3 -> 0 +dqsamq1323 samequantum 0E+3 7 -> 0 +dqsamq1324 samequantum 0E+3 7E+3 -> 1 +dqsamq1325 samequantum 0E+3 sNaN -> 0 + +dqsamq1410 samequantum 7E-3 -Inf -> 0 +dqsamq1411 samequantum 7E-3 Inf -> 0 +dqsamq1412 samequantum 7E-3 NaN -> 0 +dqsamq1413 samequantum 7E-3 -7E+3 -> 0 +dqsamq1414 samequantum 7E-3 -7 -> 0 +dqsamq1415 samequantum 7E-3 -7E-3 -> 1 +dqsamq1416 samequantum 7E-3 -0E-3 -> 1 +dqsamq1417 samequantum 7E-3 -0 -> 0 +dqsamq1418 samequantum 7E-3 -0E+3 -> 0 +dqsamq1419 samequantum 7E-3 0E-3 -> 1 +dqsamq1420 samequantum 7E-3 0 -> 0 +dqsamq1421 samequantum 7E-3 0E+3 -> 0 +dqsamq1422 samequantum 7E-3 7E-3 -> 1 +dqsamq1423 samequantum 7E-3 7 -> 0 +dqsamq1424 samequantum 7E-3 7E+3 -> 0 +dqsamq1425 samequantum 7E-3 sNaN -> 0 + +dqsamq1510 samequantum 7 -Inf -> 0 +dqsamq1511 samequantum 7 Inf -> 0 +dqsamq1512 samequantum 7 NaN -> 0 +dqsamq1513 samequantum 7 -7E+3 -> 0 +dqsamq1514 samequantum 7 -7 -> 1 +dqsamq1515 samequantum 7 -7E-3 -> 0 +dqsamq1516 samequantum 7 -0E-3 -> 0 +dqsamq1517 samequantum 7 -0 -> 1 +dqsamq1518 samequantum 7 -0E+3 -> 0 +dqsamq1519 samequantum 7 0E-3 -> 0 +dqsamq1520 samequantum 7 0 -> 1 +dqsamq1521 samequantum 7 0E+3 -> 0 +dqsamq1522 samequantum 7 7E-3 -> 0 +dqsamq1523 samequantum 7 7 -> 1 +dqsamq1524 samequantum 7 7E+3 -> 0 +dqsamq1525 samequantum 7 sNaN -> 0 + +dqsamq1610 samequantum 7E+3 -Inf -> 0 +dqsamq1611 samequantum 7E+3 Inf -> 0 +dqsamq1612 samequantum 7E+3 NaN -> 0 +dqsamq1613 samequantum 7E+3 -7E+3 -> 1 +dqsamq1614 samequantum 7E+3 -7 -> 0 +dqsamq1615 samequantum 7E+3 -7E-3 -> 0 +dqsamq1616 samequantum 7E+3 -0E-3 -> 0 +dqsamq1617 samequantum 7E+3 -0 -> 0 +dqsamq1618 samequantum 7E+3 -0E+3 -> 1 +dqsamq1619 samequantum 7E+3 0E-3 -> 0 +dqsamq1620 samequantum 7E+3 0 -> 0 +dqsamq1621 samequantum 7E+3 0E+3 -> 1 +dqsamq1622 samequantum 7E+3 7E-3 -> 0 +dqsamq1623 samequantum 7E+3 7 -> 0 +dqsamq1624 samequantum 7E+3 7E+3 -> 1 +dqsamq1625 samequantum 7E+3 sNaN -> 0 + +dqsamq1710 samequantum sNaN -Inf -> 0 +dqsamq1711 samequantum sNaN Inf -> 0 +dqsamq1712 samequantum sNaN NaN -> 1 +dqsamq1713 samequantum sNaN -7E+3 -> 0 +dqsamq1714 samequantum sNaN -7 -> 0 +dqsamq1715 samequantum sNaN -7E-3 -> 0 +dqsamq1716 samequantum sNaN -0E-3 -> 0 +dqsamq1717 samequantum sNaN -0 -> 0 +dqsamq1718 samequantum sNaN -0E+3 -> 0 +dqsamq1719 samequantum sNaN 0E-3 -> 0 +dqsamq1720 samequantum sNaN 0 -> 0 +dqsamq1721 samequantum sNaN 0E+3 -> 0 +dqsamq1722 samequantum sNaN 7E-3 -> 0 +dqsamq1723 samequantum sNaN 7 -> 0 +dqsamq1724 samequantum sNaN 7E+3 -> 0 +dqsamq1725 samequantum sNaN sNaN -> 1 +-- noisy NaNs +dqsamq1730 samequantum sNaN3 sNaN3 -> 1 +dqsamq1731 samequantum sNaN3 sNaN4 -> 1 +dqsamq1732 samequantum NaN3 NaN3 -> 1 +dqsamq1733 samequantum NaN3 NaN4 -> 1 +dqsamq1734 samequantum sNaN3 3 -> 0 +dqsamq1735 samequantum NaN3 3 -> 0 +dqsamq1736 samequantum 4 sNaN4 -> 0 +dqsamq1737 samequantum 3 NaN3 -> 0 +dqsamq1738 samequantum Inf sNaN4 -> 0 +dqsamq1739 samequantum -Inf NaN3 -> 0 + diff --git a/Lib/test/decimaltestdata/dqScaleB.decTest b/Lib/test/decimaltestdata/dqScaleB.decTest index 01e1191963c..045dc58d82b 100644 --- a/Lib/test/decimaltestdata/dqScaleB.decTest +++ b/Lib/test/decimaltestdata/dqScaleB.decTest @@ -1,260 +1,260 @@ ------------------------------------------------------------------------- --- dqScalebB.decTest -- scale a decQuad by powers of 10 -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Max |rhs| is 2*(6144+34) = 12356 - --- Sanity checks -dqscb001 scaleb 7.50 10 -> 7.50E+10 -dqscb002 scaleb 7.50 3 -> 7.50E+3 -dqscb003 scaleb 7.50 2 -> 750 -dqscb004 scaleb 7.50 1 -> 75.0 -dqscb005 scaleb 7.50 0 -> 7.50 -dqscb006 scaleb 7.50 -1 -> 0.750 -dqscb007 scaleb 7.50 -2 -> 0.0750 -dqscb008 scaleb 7.50 -10 -> 7.50E-10 -dqscb009 scaleb -7.50 3 -> -7.50E+3 -dqscb010 scaleb -7.50 2 -> -750 -dqscb011 scaleb -7.50 1 -> -75.0 -dqscb012 scaleb -7.50 0 -> -7.50 -dqscb013 scaleb -7.50 -1 -> -0.750 - --- Infinities -dqscb014 scaleb Infinity 1 -> Infinity -dqscb015 scaleb -Infinity 2 -> -Infinity -dqscb016 scaleb Infinity -1 -> Infinity -dqscb017 scaleb -Infinity -2 -> -Infinity - --- Next two are somewhat undefined in 754r; treat as non-integer -dqscb018 scaleb 10 Infinity -> NaN Invalid_operation -dqscb019 scaleb 10 -Infinity -> NaN Invalid_operation - --- NaNs are undefined in 754r; assume usual processing --- NaNs, 0 payload -dqscb021 scaleb NaN 1 -> NaN -dqscb022 scaleb -NaN -1 -> -NaN -dqscb023 scaleb sNaN 1 -> NaN Invalid_operation -dqscb024 scaleb -sNaN 1 -> -NaN Invalid_operation -dqscb025 scaleb 4 NaN -> NaN -dqscb026 scaleb -Inf -NaN -> -NaN -dqscb027 scaleb 4 sNaN -> NaN Invalid_operation -dqscb028 scaleb Inf -sNaN -> -NaN Invalid_operation - --- non-integer RHS -dqscb030 scaleb 1.23 1 -> 12.3 -dqscb031 scaleb 1.23 1.00 -> NaN Invalid_operation -dqscb032 scaleb 1.23 1.1 -> NaN Invalid_operation -dqscb033 scaleb 1.23 1.01 -> NaN Invalid_operation -dqscb034 scaleb 1.23 0.01 -> NaN Invalid_operation -dqscb035 scaleb 1.23 0.11 -> NaN Invalid_operation -dqscb036 scaleb 1.23 0.999999999 -> NaN Invalid_operation -dqscb037 scaleb 1.23 -1 -> 0.123 -dqscb0614 scaleb 1.23 -1.00 -> NaN Invalid_operation -dqscb039 scaleb 1.23 -1.1 -> NaN Invalid_operation -dqscb040 scaleb 1.23 -1.01 -> NaN Invalid_operation -dqscb041 scaleb 1.23 -0.01 -> NaN Invalid_operation -dqscb042 scaleb 1.23 -0.11 -> NaN Invalid_operation -dqscb043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation -dqscb044 scaleb 1.23 0.1 -> NaN Invalid_operation -dqscb045 scaleb 1.23 1E+1 -> NaN Invalid_operation -dqscb046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation -dqscb047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation - --- out-of range RHS -dqscb120 scaleb 1.23 12355 -> Infinity Overflow Inexact Rounded -dqscb121 scaleb 1.23 12356 -> Infinity Overflow Inexact Rounded -dqscb122 scaleb 1.23 12357 -> NaN Invalid_operation -dqscb123 scaleb 1.23 12358 -> NaN Invalid_operation -dqscb124 scaleb 1.23 -12355 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqscb125 scaleb 1.23 -12356 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqscb126 scaleb 1.23 -12357 -> NaN Invalid_operation -dqscb127 scaleb 1.23 -12358 -> NaN Invalid_operation - --- NaNs, non-0 payload --- propagating NaNs -dqscb861 scaleb NaN01 -Inf -> NaN1 -dqscb862 scaleb -NaN02 -1000 -> -NaN2 -dqscb863 scaleb NaN03 1000 -> NaN3 -dqscb864 scaleb NaN04 Inf -> NaN4 -dqscb865 scaleb NaN05 NaN61 -> NaN5 -dqscb866 scaleb -Inf -NaN71 -> -NaN71 -dqscb867 scaleb -1000 NaN81 -> NaN81 -dqscb868 scaleb 1000 NaN91 -> NaN91 -dqscb869 scaleb Inf NaN101 -> NaN101 -dqscb871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation -dqscb872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation -dqscb873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation -dqscb874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation -dqscb875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation -dqscb876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation -dqscb877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation -dqscb878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation -dqscb879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation -dqscb880 scaleb Inf sNaN231 -> NaN231 Invalid_operation -dqscb881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation - --- finites -dqscb051 scaleb 7 -2 -> 0.07 -dqscb052 scaleb -7 -2 -> -0.07 -dqscb053 scaleb 75 -2 -> 0.75 -dqscb054 scaleb -75 -2 -> -0.75 -dqscb055 scaleb 7.50 -2 -> 0.0750 -dqscb056 scaleb -7.50 -2 -> -0.0750 -dqscb057 scaleb 7.500 -2 -> 0.07500 -dqscb058 scaleb -7.500 -2 -> -0.07500 -dqscb061 scaleb 7 -1 -> 0.7 -dqscb062 scaleb -7 -1 -> -0.7 -dqscb063 scaleb 75 -1 -> 7.5 -dqscb064 scaleb -75 -1 -> -7.5 -dqscb065 scaleb 7.50 -1 -> 0.750 -dqscb066 scaleb -7.50 -1 -> -0.750 -dqscb067 scaleb 7.500 -1 -> 0.7500 -dqscb068 scaleb -7.500 -1 -> -0.7500 -dqscb071 scaleb 7 0 -> 7 -dqscb072 scaleb -7 0 -> -7 -dqscb073 scaleb 75 0 -> 75 -dqscb074 scaleb -75 0 -> -75 -dqscb075 scaleb 7.50 0 -> 7.50 -dqscb076 scaleb -7.50 0 -> -7.50 -dqscb077 scaleb 7.500 0 -> 7.500 -dqscb078 scaleb -7.500 0 -> -7.500 -dqscb081 scaleb 7 1 -> 7E+1 -dqscb082 scaleb -7 1 -> -7E+1 -dqscb083 scaleb 75 1 -> 7.5E+2 -dqscb084 scaleb -75 1 -> -7.5E+2 -dqscb085 scaleb 7.50 1 -> 75.0 -dqscb086 scaleb -7.50 1 -> -75.0 -dqscb087 scaleb 7.500 1 -> 75.00 -dqscb088 scaleb -7.500 1 -> -75.00 -dqscb091 scaleb 7 2 -> 7E+2 -dqscb092 scaleb -7 2 -> -7E+2 -dqscb093 scaleb 75 2 -> 7.5E+3 -dqscb094 scaleb -75 2 -> -7.5E+3 -dqscb095 scaleb 7.50 2 -> 750 -dqscb096 scaleb -7.50 2 -> -750 -dqscb097 scaleb 7.500 2 -> 750.0 -dqscb098 scaleb -7.500 2 -> -750.0 - --- zeros -dqscb111 scaleb 0 1 -> 0E+1 -dqscb112 scaleb -0 2 -> -0E+2 -dqscb113 scaleb 0E+4 3 -> 0E+7 -dqscb114 scaleb -0E+4 4 -> -0E+8 -dqscb115 scaleb 0.0000 5 -> 0E+1 -dqscb116 scaleb -0.0000 6 -> -0E+2 -dqscb117 scaleb 0E-141 7 -> 0E-134 -dqscb118 scaleb -0E-141 8 -> -0E-133 - --- Nmax, Nmin, Ntiny -dqscb132 scaleb 9.999999999999999999999999999999999E+6144 +6144 -> Infinity Overflow Inexact Rounded -dqscb133 scaleb 9.999999999999999999999999999999999E+6144 +10 -> Infinity Overflow Inexact Rounded -dqscb134 scaleb 9.999999999999999999999999999999999E+6144 +1 -> Infinity Overflow Inexact Rounded -dqscb135 scaleb 9.999999999999999999999999999999999E+6144 0 -> 9.999999999999999999999999999999999E+6144 -dqscb136 scaleb 9.999999999999999999999999999999999E+6144 -1 -> 9.999999999999999999999999999999999E+6143 -dqscb137 scaleb 1E-6143 +1 -> 1E-6142 -dqscb1614 scaleb 1E-6143 -0 -> 1E-6143 -dqscb139 scaleb 1E-6143 -1 -> 1E-6144 Subnormal -dqscb140 scaleb 1.000000000000000000000000000000000E-6143 +1 -> 1.000000000000000000000000000000000E-6142 -dqscb141 scaleb 1.000000000000000000000000000000000E-6143 0 -> 1.000000000000000000000000000000000E-6143 -dqscb142 scaleb 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 Subnormal Rounded -dqscb143 scaleb 1E-6176 +1 -> 1E-6175 Subnormal -dqscb144 scaleb 1E-6176 -0 -> 1E-6176 Subnormal -dqscb145 scaleb 1E-6176 -1 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqscb150 scaleb -1E-6176 +1 -> -1E-6175 Subnormal -dqscb151 scaleb -1E-6176 -0 -> -1E-6176 Subnormal -dqscb152 scaleb -1E-6176 -1 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqscb153 scaleb -1.000000000000000000000000000000000E-6143 +1 -> -1.000000000000000000000000000000000E-6142 -dqscb154 scaleb -1.000000000000000000000000000000000E-6143 +0 -> -1.000000000000000000000000000000000E-6143 -dqscb155 scaleb -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 Subnormal Rounded -dqscb156 scaleb -1E-6143 +1 -> -1E-6142 -dqscb157 scaleb -1E-6143 -0 -> -1E-6143 -dqscb158 scaleb -1E-6143 -1 -> -1E-6144 Subnormal -dqscb159 scaleb -9.999999999999999999999999999999999E+6144 +1 -> -Infinity Overflow Inexact Rounded -dqscb160 scaleb -9.999999999999999999999999999999999E+6144 +0 -> -9.999999999999999999999999999999999E+6144 -dqscb161 scaleb -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6143 -dqscb162 scaleb -9E+6144 +1 -> -Infinity Overflow Inexact Rounded -dqscb163 scaleb -1E+6144 +1 -> -Infinity Overflow Inexact Rounded - --- some Origami --- (these check that overflow is being done correctly) -dqscb171 scaleb 1000E+6109 +1 -> 1.000E+6113 -dqscb172 scaleb 1000E+6110 +1 -> 1.000E+6114 -dqscb173 scaleb 1000E+6111 +1 -> 1.0000E+6115 Clamped -dqscb174 scaleb 1000E+6112 +1 -> 1.00000E+6116 Clamped -dqscb175 scaleb 1000E+6113 +1 -> 1.000000E+6117 Clamped -dqscb176 scaleb 1000E+6114 +1 -> 1.0000000E+6118 Clamped -dqscb177 scaleb 1000E+6131 +1 -> 1.000000000000000000000000E+6135 Clamped -dqscb178 scaleb 1000E+6132 +1 -> 1.0000000000000000000000000E+6136 Clamped -dqscb179 scaleb 1000E+6133 +1 -> 1.00000000000000000000000000E+6137 Clamped -dqscb180 scaleb 1000E+6134 +1 -> 1.000000000000000000000000000E+6138 Clamped -dqscb181 scaleb 1000E+6135 +1 -> 1.0000000000000000000000000000E+6139 Clamped -dqscb182 scaleb 1000E+6136 +1 -> 1.00000000000000000000000000000E+6140 Clamped -dqscb183 scaleb 1000E+6137 +1 -> 1.000000000000000000000000000000E+6141 Clamped -dqscb184 scaleb 1000E+6138 +1 -> 1.0000000000000000000000000000000E+6142 Clamped -dqscb185 scaleb 1000E+6139 +1 -> 1.00000000000000000000000000000000E+6143 Clamped -dqscb186 scaleb 1000E+6140 +1 -> 1.000000000000000000000000000000000E+6144 Clamped -dqscb187 scaleb 1000E+6141 +1 -> Infinity Overflow Inexact Rounded - --- and a few more subnormal truncations --- (these check that underflow is being done correctly) -dqscb221 scaleb 1.000000000000000000000000000000000E-6143 0 -> 1.000000000000000000000000000000000E-6143 -dqscb222 scaleb 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 Subnormal Rounded -dqscb223 scaleb 1.000000000000000000000000000000000E-6143 -2 -> 1.0000000000000000000000000000000E-6145 Subnormal Rounded -dqscb224 scaleb 1.000000000000000000000000000000000E-6143 -3 -> 1.000000000000000000000000000000E-6146 Subnormal Rounded -dqscb225 scaleb 1.000000000000000000000000000000000E-6143 -4 -> 1.00000000000000000000000000000E-6147 Subnormal Rounded -dqscb226 scaleb 1.000000000000000000000000000000000E-6143 -5 -> 1.0000000000000000000000000000E-6148 Subnormal Rounded -dqscb227 scaleb 1.000000000000000000000000000000000E-6143 -6 -> 1.000000000000000000000000000E-6149 Subnormal Rounded -dqscb228 scaleb 1.000000000000000000000000000000000E-6143 -7 -> 1.00000000000000000000000000E-6150 Subnormal Rounded -dqscb229 scaleb 1.000000000000000000000000000000000E-6143 -8 -> 1.0000000000000000000000000E-6151 Subnormal Rounded -dqscb230 scaleb 1.000000000000000000000000000000000E-6143 -9 -> 1.000000000000000000000000E-6152 Subnormal Rounded -dqscb231 scaleb 1.000000000000000000000000000000000E-6143 -10 -> 1.00000000000000000000000E-6153 Subnormal Rounded -dqscb232 scaleb 1.000000000000000000000000000000000E-6143 -11 -> 1.0000000000000000000000E-6154 Subnormal Rounded -dqscb233 scaleb 1.000000000000000000000000000000000E-6143 -12 -> 1.000000000000000000000E-6155 Subnormal Rounded -dqscb234 scaleb 1.000000000000000000000000000000000E-6143 -13 -> 1.00000000000000000000E-6156 Subnormal Rounded -dqscb235 scaleb 1.000000000000000000000000000000000E-6143 -14 -> 1.0000000000000000000E-6157 Subnormal Rounded -dqscb236 scaleb 1.000000000000000000000000000000000E-6143 -15 -> 1.000000000000000000E-6158 Subnormal Rounded -dqscb237 scaleb 1.000000000000000000000000000000000E-6143 -16 -> 1.00000000000000000E-6159 Subnormal Rounded -dqscb238 scaleb 1.000000000000000000000000000000000E-6143 -17 -> 1.0000000000000000E-6160 Subnormal Rounded -dqscb239 scaleb 1.000000000000000000000000000000000E-6143 -18 -> 1.000000000000000E-6161 Subnormal Rounded -dqscb202 scaleb 1.000000000000000000000000000000000E-6143 -19 -> 1.00000000000000E-6162 Subnormal Rounded -dqscb203 scaleb 1.000000000000000000000000000000000E-6143 -20 -> 1.0000000000000E-6163 Subnormal Rounded -dqscb204 scaleb 1.000000000000000000000000000000000E-6143 -21 -> 1.000000000000E-6164 Subnormal Rounded -dqscb205 scaleb 1.000000000000000000000000000000000E-6143 -22 -> 1.00000000000E-6165 Subnormal Rounded -dqscb206 scaleb 1.000000000000000000000000000000000E-6143 -23 -> 1.0000000000E-6166 Subnormal Rounded -dqscb207 scaleb 1.000000000000000000000000000000000E-6143 -24 -> 1.000000000E-6167 Subnormal Rounded -dqscb208 scaleb 1.000000000000000000000000000000000E-6143 -25 -> 1.00000000E-6168 Subnormal Rounded -dqscb209 scaleb 1.000000000000000000000000000000000E-6143 -26 -> 1.0000000E-6169 Subnormal Rounded -dqscb210 scaleb 1.000000000000000000000000000000000E-6143 -27 -> 1.000000E-6170 Subnormal Rounded -dqscb211 scaleb 1.000000000000000000000000000000000E-6143 -28 -> 1.00000E-6171 Subnormal Rounded -dqscb212 scaleb 1.000000000000000000000000000000000E-6143 -29 -> 1.0000E-6172 Subnormal Rounded -dqscb213 scaleb 1.000000000000000000000000000000000E-6143 -30 -> 1.000E-6173 Subnormal Rounded -dqscb214 scaleb 1.000000000000000000000000000000000E-6143 -31 -> 1.00E-6174 Subnormal Rounded -dqscb215 scaleb 1.000000000000000000000000000000000E-6143 -32 -> 1.0E-6175 Subnormal Rounded -dqscb216 scaleb 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 Subnormal Rounded -dqscb217 scaleb 1.000000000000000000000000000000000E-6143 -34 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqscb218 scaleb 1.000000000000000000000000000000000E-6143 -35 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +------------------------------------------------------------------------ +-- dqScalebB.decTest -- scale a decQuad by powers of 10 -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Max |rhs| is 2*(6144+34) = 12356 + +-- Sanity checks +dqscb001 scaleb 7.50 10 -> 7.50E+10 +dqscb002 scaleb 7.50 3 -> 7.50E+3 +dqscb003 scaleb 7.50 2 -> 750 +dqscb004 scaleb 7.50 1 -> 75.0 +dqscb005 scaleb 7.50 0 -> 7.50 +dqscb006 scaleb 7.50 -1 -> 0.750 +dqscb007 scaleb 7.50 -2 -> 0.0750 +dqscb008 scaleb 7.50 -10 -> 7.50E-10 +dqscb009 scaleb -7.50 3 -> -7.50E+3 +dqscb010 scaleb -7.50 2 -> -750 +dqscb011 scaleb -7.50 1 -> -75.0 +dqscb012 scaleb -7.50 0 -> -7.50 +dqscb013 scaleb -7.50 -1 -> -0.750 + +-- Infinities +dqscb014 scaleb Infinity 1 -> Infinity +dqscb015 scaleb -Infinity 2 -> -Infinity +dqscb016 scaleb Infinity -1 -> Infinity +dqscb017 scaleb -Infinity -2 -> -Infinity + +-- Next two are somewhat undefined in 754r; treat as non-integer +dqscb018 scaleb 10 Infinity -> NaN Invalid_operation +dqscb019 scaleb 10 -Infinity -> NaN Invalid_operation + +-- NaNs are undefined in 754r; assume usual processing +-- NaNs, 0 payload +dqscb021 scaleb NaN 1 -> NaN +dqscb022 scaleb -NaN -1 -> -NaN +dqscb023 scaleb sNaN 1 -> NaN Invalid_operation +dqscb024 scaleb -sNaN 1 -> -NaN Invalid_operation +dqscb025 scaleb 4 NaN -> NaN +dqscb026 scaleb -Inf -NaN -> -NaN +dqscb027 scaleb 4 sNaN -> NaN Invalid_operation +dqscb028 scaleb Inf -sNaN -> -NaN Invalid_operation + +-- non-integer RHS +dqscb030 scaleb 1.23 1 -> 12.3 +dqscb031 scaleb 1.23 1.00 -> NaN Invalid_operation +dqscb032 scaleb 1.23 1.1 -> NaN Invalid_operation +dqscb033 scaleb 1.23 1.01 -> NaN Invalid_operation +dqscb034 scaleb 1.23 0.01 -> NaN Invalid_operation +dqscb035 scaleb 1.23 0.11 -> NaN Invalid_operation +dqscb036 scaleb 1.23 0.999999999 -> NaN Invalid_operation +dqscb037 scaleb 1.23 -1 -> 0.123 +dqscb0614 scaleb 1.23 -1.00 -> NaN Invalid_operation +dqscb039 scaleb 1.23 -1.1 -> NaN Invalid_operation +dqscb040 scaleb 1.23 -1.01 -> NaN Invalid_operation +dqscb041 scaleb 1.23 -0.01 -> NaN Invalid_operation +dqscb042 scaleb 1.23 -0.11 -> NaN Invalid_operation +dqscb043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation +dqscb044 scaleb 1.23 0.1 -> NaN Invalid_operation +dqscb045 scaleb 1.23 1E+1 -> NaN Invalid_operation +dqscb046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation +dqscb047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation + +-- out-of range RHS +dqscb120 scaleb 1.23 12355 -> Infinity Overflow Inexact Rounded +dqscb121 scaleb 1.23 12356 -> Infinity Overflow Inexact Rounded +dqscb122 scaleb 1.23 12357 -> NaN Invalid_operation +dqscb123 scaleb 1.23 12358 -> NaN Invalid_operation +dqscb124 scaleb 1.23 -12355 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqscb125 scaleb 1.23 -12356 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqscb126 scaleb 1.23 -12357 -> NaN Invalid_operation +dqscb127 scaleb 1.23 -12358 -> NaN Invalid_operation + +-- NaNs, non-0 payload +-- propagating NaNs +dqscb861 scaleb NaN01 -Inf -> NaN1 +dqscb862 scaleb -NaN02 -1000 -> -NaN2 +dqscb863 scaleb NaN03 1000 -> NaN3 +dqscb864 scaleb NaN04 Inf -> NaN4 +dqscb865 scaleb NaN05 NaN61 -> NaN5 +dqscb866 scaleb -Inf -NaN71 -> -NaN71 +dqscb867 scaleb -1000 NaN81 -> NaN81 +dqscb868 scaleb 1000 NaN91 -> NaN91 +dqscb869 scaleb Inf NaN101 -> NaN101 +dqscb871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation +dqscb872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation +dqscb873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation +dqscb874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation +dqscb875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation +dqscb876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation +dqscb877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation +dqscb878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation +dqscb879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation +dqscb880 scaleb Inf sNaN231 -> NaN231 Invalid_operation +dqscb881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation + +-- finites +dqscb051 scaleb 7 -2 -> 0.07 +dqscb052 scaleb -7 -2 -> -0.07 +dqscb053 scaleb 75 -2 -> 0.75 +dqscb054 scaleb -75 -2 -> -0.75 +dqscb055 scaleb 7.50 -2 -> 0.0750 +dqscb056 scaleb -7.50 -2 -> -0.0750 +dqscb057 scaleb 7.500 -2 -> 0.07500 +dqscb058 scaleb -7.500 -2 -> -0.07500 +dqscb061 scaleb 7 -1 -> 0.7 +dqscb062 scaleb -7 -1 -> -0.7 +dqscb063 scaleb 75 -1 -> 7.5 +dqscb064 scaleb -75 -1 -> -7.5 +dqscb065 scaleb 7.50 -1 -> 0.750 +dqscb066 scaleb -7.50 -1 -> -0.750 +dqscb067 scaleb 7.500 -1 -> 0.7500 +dqscb068 scaleb -7.500 -1 -> -0.7500 +dqscb071 scaleb 7 0 -> 7 +dqscb072 scaleb -7 0 -> -7 +dqscb073 scaleb 75 0 -> 75 +dqscb074 scaleb -75 0 -> -75 +dqscb075 scaleb 7.50 0 -> 7.50 +dqscb076 scaleb -7.50 0 -> -7.50 +dqscb077 scaleb 7.500 0 -> 7.500 +dqscb078 scaleb -7.500 0 -> -7.500 +dqscb081 scaleb 7 1 -> 7E+1 +dqscb082 scaleb -7 1 -> -7E+1 +dqscb083 scaleb 75 1 -> 7.5E+2 +dqscb084 scaleb -75 1 -> -7.5E+2 +dqscb085 scaleb 7.50 1 -> 75.0 +dqscb086 scaleb -7.50 1 -> -75.0 +dqscb087 scaleb 7.500 1 -> 75.00 +dqscb088 scaleb -7.500 1 -> -75.00 +dqscb091 scaleb 7 2 -> 7E+2 +dqscb092 scaleb -7 2 -> -7E+2 +dqscb093 scaleb 75 2 -> 7.5E+3 +dqscb094 scaleb -75 2 -> -7.5E+3 +dqscb095 scaleb 7.50 2 -> 750 +dqscb096 scaleb -7.50 2 -> -750 +dqscb097 scaleb 7.500 2 -> 750.0 +dqscb098 scaleb -7.500 2 -> -750.0 + +-- zeros +dqscb111 scaleb 0 1 -> 0E+1 +dqscb112 scaleb -0 2 -> -0E+2 +dqscb113 scaleb 0E+4 3 -> 0E+7 +dqscb114 scaleb -0E+4 4 -> -0E+8 +dqscb115 scaleb 0.0000 5 -> 0E+1 +dqscb116 scaleb -0.0000 6 -> -0E+2 +dqscb117 scaleb 0E-141 7 -> 0E-134 +dqscb118 scaleb -0E-141 8 -> -0E-133 + +-- Nmax, Nmin, Ntiny +dqscb132 scaleb 9.999999999999999999999999999999999E+6144 +6144 -> Infinity Overflow Inexact Rounded +dqscb133 scaleb 9.999999999999999999999999999999999E+6144 +10 -> Infinity Overflow Inexact Rounded +dqscb134 scaleb 9.999999999999999999999999999999999E+6144 +1 -> Infinity Overflow Inexact Rounded +dqscb135 scaleb 9.999999999999999999999999999999999E+6144 0 -> 9.999999999999999999999999999999999E+6144 +dqscb136 scaleb 9.999999999999999999999999999999999E+6144 -1 -> 9.999999999999999999999999999999999E+6143 +dqscb137 scaleb 1E-6143 +1 -> 1E-6142 +dqscb1614 scaleb 1E-6143 -0 -> 1E-6143 +dqscb139 scaleb 1E-6143 -1 -> 1E-6144 Subnormal +dqscb140 scaleb 1.000000000000000000000000000000000E-6143 +1 -> 1.000000000000000000000000000000000E-6142 +dqscb141 scaleb 1.000000000000000000000000000000000E-6143 0 -> 1.000000000000000000000000000000000E-6143 +dqscb142 scaleb 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 Subnormal Rounded +dqscb143 scaleb 1E-6176 +1 -> 1E-6175 Subnormal +dqscb144 scaleb 1E-6176 -0 -> 1E-6176 Subnormal +dqscb145 scaleb 1E-6176 -1 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqscb150 scaleb -1E-6176 +1 -> -1E-6175 Subnormal +dqscb151 scaleb -1E-6176 -0 -> -1E-6176 Subnormal +dqscb152 scaleb -1E-6176 -1 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqscb153 scaleb -1.000000000000000000000000000000000E-6143 +1 -> -1.000000000000000000000000000000000E-6142 +dqscb154 scaleb -1.000000000000000000000000000000000E-6143 +0 -> -1.000000000000000000000000000000000E-6143 +dqscb155 scaleb -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 Subnormal Rounded +dqscb156 scaleb -1E-6143 +1 -> -1E-6142 +dqscb157 scaleb -1E-6143 -0 -> -1E-6143 +dqscb158 scaleb -1E-6143 -1 -> -1E-6144 Subnormal +dqscb159 scaleb -9.999999999999999999999999999999999E+6144 +1 -> -Infinity Overflow Inexact Rounded +dqscb160 scaleb -9.999999999999999999999999999999999E+6144 +0 -> -9.999999999999999999999999999999999E+6144 +dqscb161 scaleb -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6143 +dqscb162 scaleb -9E+6144 +1 -> -Infinity Overflow Inexact Rounded +dqscb163 scaleb -1E+6144 +1 -> -Infinity Overflow Inexact Rounded + +-- some Origami +-- (these check that overflow is being done correctly) +dqscb171 scaleb 1000E+6109 +1 -> 1.000E+6113 +dqscb172 scaleb 1000E+6110 +1 -> 1.000E+6114 +dqscb173 scaleb 1000E+6111 +1 -> 1.0000E+6115 Clamped +dqscb174 scaleb 1000E+6112 +1 -> 1.00000E+6116 Clamped +dqscb175 scaleb 1000E+6113 +1 -> 1.000000E+6117 Clamped +dqscb176 scaleb 1000E+6114 +1 -> 1.0000000E+6118 Clamped +dqscb177 scaleb 1000E+6131 +1 -> 1.000000000000000000000000E+6135 Clamped +dqscb178 scaleb 1000E+6132 +1 -> 1.0000000000000000000000000E+6136 Clamped +dqscb179 scaleb 1000E+6133 +1 -> 1.00000000000000000000000000E+6137 Clamped +dqscb180 scaleb 1000E+6134 +1 -> 1.000000000000000000000000000E+6138 Clamped +dqscb181 scaleb 1000E+6135 +1 -> 1.0000000000000000000000000000E+6139 Clamped +dqscb182 scaleb 1000E+6136 +1 -> 1.00000000000000000000000000000E+6140 Clamped +dqscb183 scaleb 1000E+6137 +1 -> 1.000000000000000000000000000000E+6141 Clamped +dqscb184 scaleb 1000E+6138 +1 -> 1.0000000000000000000000000000000E+6142 Clamped +dqscb185 scaleb 1000E+6139 +1 -> 1.00000000000000000000000000000000E+6143 Clamped +dqscb186 scaleb 1000E+6140 +1 -> 1.000000000000000000000000000000000E+6144 Clamped +dqscb187 scaleb 1000E+6141 +1 -> Infinity Overflow Inexact Rounded + +-- and a few more subnormal truncations +-- (these check that underflow is being done correctly) +dqscb221 scaleb 1.000000000000000000000000000000000E-6143 0 -> 1.000000000000000000000000000000000E-6143 +dqscb222 scaleb 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 Subnormal Rounded +dqscb223 scaleb 1.000000000000000000000000000000000E-6143 -2 -> 1.0000000000000000000000000000000E-6145 Subnormal Rounded +dqscb224 scaleb 1.000000000000000000000000000000000E-6143 -3 -> 1.000000000000000000000000000000E-6146 Subnormal Rounded +dqscb225 scaleb 1.000000000000000000000000000000000E-6143 -4 -> 1.00000000000000000000000000000E-6147 Subnormal Rounded +dqscb226 scaleb 1.000000000000000000000000000000000E-6143 -5 -> 1.0000000000000000000000000000E-6148 Subnormal Rounded +dqscb227 scaleb 1.000000000000000000000000000000000E-6143 -6 -> 1.000000000000000000000000000E-6149 Subnormal Rounded +dqscb228 scaleb 1.000000000000000000000000000000000E-6143 -7 -> 1.00000000000000000000000000E-6150 Subnormal Rounded +dqscb229 scaleb 1.000000000000000000000000000000000E-6143 -8 -> 1.0000000000000000000000000E-6151 Subnormal Rounded +dqscb230 scaleb 1.000000000000000000000000000000000E-6143 -9 -> 1.000000000000000000000000E-6152 Subnormal Rounded +dqscb231 scaleb 1.000000000000000000000000000000000E-6143 -10 -> 1.00000000000000000000000E-6153 Subnormal Rounded +dqscb232 scaleb 1.000000000000000000000000000000000E-6143 -11 -> 1.0000000000000000000000E-6154 Subnormal Rounded +dqscb233 scaleb 1.000000000000000000000000000000000E-6143 -12 -> 1.000000000000000000000E-6155 Subnormal Rounded +dqscb234 scaleb 1.000000000000000000000000000000000E-6143 -13 -> 1.00000000000000000000E-6156 Subnormal Rounded +dqscb235 scaleb 1.000000000000000000000000000000000E-6143 -14 -> 1.0000000000000000000E-6157 Subnormal Rounded +dqscb236 scaleb 1.000000000000000000000000000000000E-6143 -15 -> 1.000000000000000000E-6158 Subnormal Rounded +dqscb237 scaleb 1.000000000000000000000000000000000E-6143 -16 -> 1.00000000000000000E-6159 Subnormal Rounded +dqscb238 scaleb 1.000000000000000000000000000000000E-6143 -17 -> 1.0000000000000000E-6160 Subnormal Rounded +dqscb239 scaleb 1.000000000000000000000000000000000E-6143 -18 -> 1.000000000000000E-6161 Subnormal Rounded +dqscb202 scaleb 1.000000000000000000000000000000000E-6143 -19 -> 1.00000000000000E-6162 Subnormal Rounded +dqscb203 scaleb 1.000000000000000000000000000000000E-6143 -20 -> 1.0000000000000E-6163 Subnormal Rounded +dqscb204 scaleb 1.000000000000000000000000000000000E-6143 -21 -> 1.000000000000E-6164 Subnormal Rounded +dqscb205 scaleb 1.000000000000000000000000000000000E-6143 -22 -> 1.00000000000E-6165 Subnormal Rounded +dqscb206 scaleb 1.000000000000000000000000000000000E-6143 -23 -> 1.0000000000E-6166 Subnormal Rounded +dqscb207 scaleb 1.000000000000000000000000000000000E-6143 -24 -> 1.000000000E-6167 Subnormal Rounded +dqscb208 scaleb 1.000000000000000000000000000000000E-6143 -25 -> 1.00000000E-6168 Subnormal Rounded +dqscb209 scaleb 1.000000000000000000000000000000000E-6143 -26 -> 1.0000000E-6169 Subnormal Rounded +dqscb210 scaleb 1.000000000000000000000000000000000E-6143 -27 -> 1.000000E-6170 Subnormal Rounded +dqscb211 scaleb 1.000000000000000000000000000000000E-6143 -28 -> 1.00000E-6171 Subnormal Rounded +dqscb212 scaleb 1.000000000000000000000000000000000E-6143 -29 -> 1.0000E-6172 Subnormal Rounded +dqscb213 scaleb 1.000000000000000000000000000000000E-6143 -30 -> 1.000E-6173 Subnormal Rounded +dqscb214 scaleb 1.000000000000000000000000000000000E-6143 -31 -> 1.00E-6174 Subnormal Rounded +dqscb215 scaleb 1.000000000000000000000000000000000E-6143 -32 -> 1.0E-6175 Subnormal Rounded +dqscb216 scaleb 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 Subnormal Rounded +dqscb217 scaleb 1.000000000000000000000000000000000E-6143 -34 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqscb218 scaleb 1.000000000000000000000000000000000E-6143 -35 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped diff --git a/Lib/test/decimaltestdata/dqShift.decTest b/Lib/test/decimaltestdata/dqShift.decTest index 4ee836eb48c..6d692134551 100644 --- a/Lib/test/decimaltestdata/dqShift.decTest +++ b/Lib/test/decimaltestdata/dqShift.decTest @@ -1,298 +1,298 @@ ------------------------------------------------------------------------- --- dqShift.decTest -- shift decQuad coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqshi001 shift 0 0 -> 0 -dqshi002 shift 0 2 -> 0 -dqshi003 shift 1 2 -> 100 -dqshi004 shift 1 33 -> 1000000000000000000000000000000000 -dqshi005 shift 1 34 -> 0 -dqshi006 shift 1 -1 -> 0 -dqshi007 shift 0 -2 -> 0 -dqshi008 shift 1234567890123456789012345678901234 -1 -> 123456789012345678901234567890123 -dqshi009 shift 1234567890123456789012345678901234 -33 -> 1 -dqshi010 shift 1234567890123456789012345678901234 -34 -> 0 -dqshi011 shift 9934567890123456789012345678901234 -33 -> 9 -dqshi012 shift 9934567890123456789012345678901234 -34 -> 0 - --- rhs must be an integer -dqshi015 shift 1 1.5 -> NaN Invalid_operation -dqshi016 shift 1 1.0 -> NaN Invalid_operation -dqshi017 shift 1 0.1 -> NaN Invalid_operation -dqshi018 shift 1 0.0 -> NaN Invalid_operation -dqshi019 shift 1 1E+1 -> NaN Invalid_operation -dqshi020 shift 1 1E+99 -> NaN Invalid_operation -dqshi021 shift 1 Inf -> NaN Invalid_operation -dqshi022 shift 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -dqshi025 shift 1 -1000 -> NaN Invalid_operation -dqshi026 shift 1 -35 -> NaN Invalid_operation -dqshi027 shift 1 35 -> NaN Invalid_operation -dqshi028 shift 1 1000 -> NaN Invalid_operation - --- full shifting pattern -dqshi030 shift 1234567890123456789012345678901234 -34 -> 0 -dqshi031 shift 1234567890123456789012345678901234 -33 -> 1 -dqshi032 shift 1234567890123456789012345678901234 -32 -> 12 -dqshi033 shift 1234567890123456789012345678901234 -31 -> 123 -dqshi034 shift 1234567890123456789012345678901234 -30 -> 1234 -dqshi035 shift 1234567890123456789012345678901234 -29 -> 12345 -dqshi036 shift 1234567890123456789012345678901234 -28 -> 123456 -dqshi037 shift 1234567890123456789012345678901234 -27 -> 1234567 -dqshi038 shift 1234567890123456789012345678901234 -26 -> 12345678 -dqshi039 shift 1234567890123456789012345678901234 -25 -> 123456789 -dqshi040 shift 1234567890123456789012345678901234 -24 -> 1234567890 -dqshi041 shift 1234567890123456789012345678901234 -23 -> 12345678901 -dqshi042 shift 1234567890123456789012345678901234 -22 -> 123456789012 -dqshi043 shift 1234567890123456789012345678901234 -21 -> 1234567890123 -dqshi044 shift 1234567890123456789012345678901234 -20 -> 12345678901234 -dqshi045 shift 1234567890123456789012345678901234 -19 -> 123456789012345 -dqshi047 shift 1234567890123456789012345678901234 -18 -> 1234567890123456 -dqshi048 shift 1234567890123456789012345678901234 -17 -> 12345678901234567 -dqshi049 shift 1234567890123456789012345678901234 -16 -> 123456789012345678 -dqshi050 shift 1234567890123456789012345678901234 -15 -> 1234567890123456789 -dqshi051 shift 1234567890123456789012345678901234 -14 -> 12345678901234567890 -dqshi052 shift 1234567890123456789012345678901234 -13 -> 123456789012345678901 -dqshi053 shift 1234567890123456789012345678901234 -12 -> 1234567890123456789012 -dqshi054 shift 1234567890123456789012345678901234 -11 -> 12345678901234567890123 -dqshi055 shift 1234567890123456789012345678901234 -10 -> 123456789012345678901234 -dqshi056 shift 1234567890123456789012345678901234 -9 -> 1234567890123456789012345 -dqshi057 shift 1234567890123456789012345678901234 -8 -> 12345678901234567890123456 -dqshi058 shift 1234567890123456789012345678901234 -7 -> 123456789012345678901234567 -dqshi059 shift 1234567890123456789012345678901234 -6 -> 1234567890123456789012345678 -dqshi060 shift 1234567890123456789012345678901234 -5 -> 12345678901234567890123456789 -dqshi061 shift 1234567890123456789012345678901234 -4 -> 123456789012345678901234567890 -dqshi062 shift 1234567890123456789012345678901234 -3 -> 1234567890123456789012345678901 -dqshi063 shift 1234567890123456789012345678901234 -2 -> 12345678901234567890123456789012 -dqshi064 shift 1234567890123456789012345678901234 -1 -> 123456789012345678901234567890123 -dqshi065 shift 1234567890123456789012345678901234 -0 -> 1234567890123456789012345678901234 - -dqshi066 shift 1234567890123456789012345678901234 +0 -> 1234567890123456789012345678901234 -dqshi067 shift 1234567890123456789012345678901234 +1 -> 2345678901234567890123456789012340 -dqshi068 shift 1234567890123456789012345678901234 +2 -> 3456789012345678901234567890123400 -dqshi069 shift 1234567890123456789012345678901234 +3 -> 4567890123456789012345678901234000 -dqshi070 shift 1234567890123456789012345678901234 +4 -> 5678901234567890123456789012340000 -dqshi071 shift 1234567890123456789012345678901234 +5 -> 6789012345678901234567890123400000 -dqshi072 shift 1234567890123456789012345678901234 +6 -> 7890123456789012345678901234000000 -dqshi073 shift 1234567890123456789012345678901234 +7 -> 8901234567890123456789012340000000 -dqshi074 shift 1234567890123456789012345678901234 +8 -> 9012345678901234567890123400000000 -dqshi075 shift 1234567890123456789012345678901234 +9 -> 123456789012345678901234000000000 -dqshi076 shift 1234567890123456789012345678901234 +10 -> 1234567890123456789012340000000000 -dqshi077 shift 1234567890123456789012345678901234 +11 -> 2345678901234567890123400000000000 -dqshi078 shift 1234567890123456789012345678901234 +12 -> 3456789012345678901234000000000000 -dqshi079 shift 1234567890123456789012345678901234 +13 -> 4567890123456789012340000000000000 -dqshi080 shift 1234567890123456789012345678901234 +14 -> 5678901234567890123400000000000000 -dqshi081 shift 1234567890123456789012345678901234 +15 -> 6789012345678901234000000000000000 -dqshi082 shift 1234567890123456789012345678901234 +16 -> 7890123456789012340000000000000000 -dqshi083 shift 1234567890123456789012345678901234 +17 -> 8901234567890123400000000000000000 -dqshi084 shift 1234567890123456789012345678901234 +18 -> 9012345678901234000000000000000000 -dqshi085 shift 1234567890123456789012345678901234 +19 -> 123456789012340000000000000000000 -dqshi086 shift 1234567890123456789012345678901234 +20 -> 1234567890123400000000000000000000 -dqshi087 shift 1234567890123456789012345678901234 +21 -> 2345678901234000000000000000000000 -dqshi088 shift 1234567890123456789012345678901234 +22 -> 3456789012340000000000000000000000 -dqshi089 shift 1234567890123456789012345678901234 +23 -> 4567890123400000000000000000000000 -dqshi090 shift 1234567890123456789012345678901234 +24 -> 5678901234000000000000000000000000 -dqshi091 shift 1234567890123456789012345678901234 +25 -> 6789012340000000000000000000000000 -dqshi092 shift 1234567890123456789012345678901234 +26 -> 7890123400000000000000000000000000 -dqshi093 shift 1234567890123456789012345678901234 +27 -> 8901234000000000000000000000000000 -dqshi094 shift 1234567890123456789012345678901234 +28 -> 9012340000000000000000000000000000 -dqshi095 shift 1234567890123456789012345678901234 +29 -> 123400000000000000000000000000000 -dqshi096 shift 1234567890123456789012345678901234 +30 -> 1234000000000000000000000000000000 -dqshi097 shift 1234567890123456789012345678901234 +31 -> 2340000000000000000000000000000000 -dqshi098 shift 1234567890123456789012345678901234 +32 -> 3400000000000000000000000000000000 -dqshi099 shift 1234567890123456789012345678901234 +33 -> 4000000000000000000000000000000000 -dqshi100 shift 1234567890123456789012345678901234 +34 -> 0 - --- zeros -dqshi270 shift 0E-10 +29 -> 0E-10 -dqshi271 shift 0E-10 -29 -> 0E-10 -dqshi272 shift 0.000 +29 -> 0.000 -dqshi273 shift 0.000 -29 -> 0.000 -dqshi274 shift 0E+10 +29 -> 0E+10 -dqshi275 shift 0E+10 -29 -> 0E+10 -dqshi276 shift -0E-10 +29 -> -0E-10 -dqshi277 shift -0E-10 -29 -> -0E-10 -dqshi278 shift -0.000 +29 -> -0.000 -dqshi279 shift -0.000 -29 -> -0.000 -dqshi280 shift -0E+10 +29 -> -0E+10 -dqshi281 shift -0E+10 -29 -> -0E+10 - --- Nmax, Nmin, Ntiny -dqshi141 shift 9.999999999999999999999999999999999E+6144 -1 -> 9.99999999999999999999999999999999E+6143 -dqshi142 shift 9.999999999999999999999999999999999E+6144 -33 -> 9E+6111 -dqshi143 shift 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999990E+6144 -dqshi144 shift 9.999999999999999999999999999999999E+6144 33 -> 9.000000000000000000000000000000000E+6144 -dqshi145 shift 1E-6143 -1 -> 0E-6143 -dqshi146 shift 1E-6143 -33 -> 0E-6143 -dqshi147 shift 1E-6143 1 -> 1.0E-6142 -dqshi148 shift 1E-6143 33 -> 1.000000000000000000000000000000000E-6110 -dqshi151 shift 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 -dqshi152 shift 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 -dqshi153 shift 1.000000000000000000000000000000000E-6143 1 -> 0E-6176 -dqshi154 shift 1.000000000000000000000000000000000E-6143 33 -> 0E-6176 -dqshi155 shift 9.000000000000000000000000000000000E-6143 -1 -> 9.00000000000000000000000000000000E-6144 -dqshi156 shift 9.000000000000000000000000000000000E-6143 -33 -> 9E-6176 -dqshi157 shift 9.000000000000000000000000000000000E-6143 1 -> 0E-6176 -dqshi158 shift 9.000000000000000000000000000000000E-6143 33 -> 0E-6176 -dqshi160 shift 1E-6176 -1 -> 0E-6176 -dqshi161 shift 1E-6176 -33 -> 0E-6176 -dqshi162 shift 1E-6176 1 -> 1.0E-6175 -dqshi163 shift 1E-6176 33 -> 1.000000000000000000000000000000000E-6143 --- negatives -dqshi171 shift -9.999999999999999999999999999999999E+6144 -1 -> -9.99999999999999999999999999999999E+6143 -dqshi172 shift -9.999999999999999999999999999999999E+6144 -33 -> -9E+6111 -dqshi173 shift -9.999999999999999999999999999999999E+6144 1 -> -9.999999999999999999999999999999990E+6144 -dqshi174 shift -9.999999999999999999999999999999999E+6144 33 -> -9.000000000000000000000000000000000E+6144 -dqshi175 shift -1E-6143 -1 -> -0E-6143 -dqshi176 shift -1E-6143 -33 -> -0E-6143 -dqshi177 shift -1E-6143 1 -> -1.0E-6142 -dqshi178 shift -1E-6143 33 -> -1.000000000000000000000000000000000E-6110 -dqshi181 shift -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 -dqshi182 shift -1.000000000000000000000000000000000E-6143 -33 -> -1E-6176 -dqshi183 shift -1.000000000000000000000000000000000E-6143 1 -> -0E-6176 -dqshi184 shift -1.000000000000000000000000000000000E-6143 33 -> -0E-6176 -dqshi185 shift -9.000000000000000000000000000000000E-6143 -1 -> -9.00000000000000000000000000000000E-6144 -dqshi186 shift -9.000000000000000000000000000000000E-6143 -33 -> -9E-6176 -dqshi187 shift -9.000000000000000000000000000000000E-6143 1 -> -0E-6176 -dqshi188 shift -9.000000000000000000000000000000000E-6143 33 -> -0E-6176 -dqshi190 shift -1E-6176 -1 -> -0E-6176 -dqshi191 shift -1E-6176 -33 -> -0E-6176 -dqshi192 shift -1E-6176 1 -> -1.0E-6175 -dqshi193 shift -1E-6176 33 -> -1.000000000000000000000000000000000E-6143 - --- more negatives (of sanities) -dqshi201 shift -0 0 -> -0 -dqshi202 shift -0 2 -> -0 -dqshi203 shift -1 2 -> -100 -dqshi204 shift -1 33 -> -1000000000000000000000000000000000 -dqshi205 shift -1 34 -> -0 -dqshi206 shift -1 -1 -> -0 -dqshi207 shift -0 -2 -> -0 -dqshi208 shift -1234567890123456789012345678901234 -1 -> -123456789012345678901234567890123 -dqshi209 shift -1234567890123456789012345678901234 -33 -> -1 -dqshi210 shift -1234567890123456789012345678901234 -34 -> -0 -dqshi211 shift -9934567890123456789012345678901234 -33 -> -9 -dqshi212 shift -9934567890123456789012345678901234 -34 -> -0 - - --- Specials; NaNs are handled as usual -dqshi781 shift -Inf -8 -> -Infinity -dqshi782 shift -Inf -1 -> -Infinity -dqshi783 shift -Inf -0 -> -Infinity -dqshi784 shift -Inf 0 -> -Infinity -dqshi785 shift -Inf 1 -> -Infinity -dqshi786 shift -Inf 8 -> -Infinity -dqshi787 shift -1000 -Inf -> NaN Invalid_operation -dqshi788 shift -Inf -Inf -> NaN Invalid_operation -dqshi789 shift -1 -Inf -> NaN Invalid_operation -dqshi790 shift -0 -Inf -> NaN Invalid_operation -dqshi791 shift 0 -Inf -> NaN Invalid_operation -dqshi792 shift 1 -Inf -> NaN Invalid_operation -dqshi793 shift 1000 -Inf -> NaN Invalid_operation -dqshi794 shift Inf -Inf -> NaN Invalid_operation - -dqshi800 shift Inf -Inf -> NaN Invalid_operation -dqshi801 shift Inf -8 -> Infinity -dqshi802 shift Inf -1 -> Infinity -dqshi803 shift Inf -0 -> Infinity -dqshi804 shift Inf 0 -> Infinity -dqshi805 shift Inf 1 -> Infinity -dqshi806 shift Inf 8 -> Infinity -dqshi807 shift Inf Inf -> NaN Invalid_operation -dqshi808 shift -1000 Inf -> NaN Invalid_operation -dqshi809 shift -Inf Inf -> NaN Invalid_operation -dqshi810 shift -1 Inf -> NaN Invalid_operation -dqshi811 shift -0 Inf -> NaN Invalid_operation -dqshi812 shift 0 Inf -> NaN Invalid_operation -dqshi813 shift 1 Inf -> NaN Invalid_operation -dqshi814 shift 1000 Inf -> NaN Invalid_operation -dqshi815 shift Inf Inf -> NaN Invalid_operation - -dqshi821 shift NaN -Inf -> NaN -dqshi822 shift NaN -1000 -> NaN -dqshi823 shift NaN -1 -> NaN -dqshi824 shift NaN -0 -> NaN -dqshi825 shift NaN 0 -> NaN -dqshi826 shift NaN 1 -> NaN -dqshi827 shift NaN 1000 -> NaN -dqshi828 shift NaN Inf -> NaN -dqshi829 shift NaN NaN -> NaN -dqshi830 shift -Inf NaN -> NaN -dqshi831 shift -1000 NaN -> NaN -dqshi832 shift -1 NaN -> NaN -dqshi833 shift -0 NaN -> NaN -dqshi834 shift 0 NaN -> NaN -dqshi835 shift 1 NaN -> NaN -dqshi836 shift 1000 NaN -> NaN -dqshi837 shift Inf NaN -> NaN - -dqshi841 shift sNaN -Inf -> NaN Invalid_operation -dqshi842 shift sNaN -1000 -> NaN Invalid_operation -dqshi843 shift sNaN -1 -> NaN Invalid_operation -dqshi844 shift sNaN -0 -> NaN Invalid_operation -dqshi845 shift sNaN 0 -> NaN Invalid_operation -dqshi846 shift sNaN 1 -> NaN Invalid_operation -dqshi847 shift sNaN 1000 -> NaN Invalid_operation -dqshi848 shift sNaN NaN -> NaN Invalid_operation -dqshi849 shift sNaN sNaN -> NaN Invalid_operation -dqshi850 shift NaN sNaN -> NaN Invalid_operation -dqshi851 shift -Inf sNaN -> NaN Invalid_operation -dqshi852 shift -1000 sNaN -> NaN Invalid_operation -dqshi853 shift -1 sNaN -> NaN Invalid_operation -dqshi854 shift -0 sNaN -> NaN Invalid_operation -dqshi855 shift 0 sNaN -> NaN Invalid_operation -dqshi856 shift 1 sNaN -> NaN Invalid_operation -dqshi857 shift 1000 sNaN -> NaN Invalid_operation -dqshi858 shift Inf sNaN -> NaN Invalid_operation -dqshi859 shift NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqshi861 shift NaN1 -Inf -> NaN1 -dqshi862 shift +NaN2 -1000 -> NaN2 -dqshi863 shift NaN3 1000 -> NaN3 -dqshi864 shift NaN4 Inf -> NaN4 -dqshi865 shift NaN5 +NaN6 -> NaN5 -dqshi866 shift -Inf NaN7 -> NaN7 -dqshi867 shift -1000 NaN8 -> NaN8 -dqshi868 shift 1000 NaN9 -> NaN9 -dqshi869 shift Inf +NaN10 -> NaN10 -dqshi871 shift sNaN11 -Inf -> NaN11 Invalid_operation -dqshi872 shift sNaN12 -1000 -> NaN12 Invalid_operation -dqshi873 shift sNaN13 1000 -> NaN13 Invalid_operation -dqshi874 shift sNaN14 NaN17 -> NaN14 Invalid_operation -dqshi875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation -dqshi876 shift NaN16 sNaN19 -> NaN19 Invalid_operation -dqshi877 shift -Inf +sNaN20 -> NaN20 Invalid_operation -dqshi878 shift -1000 sNaN21 -> NaN21 Invalid_operation -dqshi879 shift 1000 sNaN22 -> NaN22 Invalid_operation -dqshi880 shift Inf sNaN23 -> NaN23 Invalid_operation -dqshi881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqshi882 shift -NaN26 NaN28 -> -NaN26 -dqshi883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqshi884 shift 1000 -NaN30 -> -NaN30 -dqshi885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- dqShift.decTest -- shift decQuad coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqshi001 shift 0 0 -> 0 +dqshi002 shift 0 2 -> 0 +dqshi003 shift 1 2 -> 100 +dqshi004 shift 1 33 -> 1000000000000000000000000000000000 +dqshi005 shift 1 34 -> 0 +dqshi006 shift 1 -1 -> 0 +dqshi007 shift 0 -2 -> 0 +dqshi008 shift 1234567890123456789012345678901234 -1 -> 123456789012345678901234567890123 +dqshi009 shift 1234567890123456789012345678901234 -33 -> 1 +dqshi010 shift 1234567890123456789012345678901234 -34 -> 0 +dqshi011 shift 9934567890123456789012345678901234 -33 -> 9 +dqshi012 shift 9934567890123456789012345678901234 -34 -> 0 + +-- rhs must be an integer +dqshi015 shift 1 1.5 -> NaN Invalid_operation +dqshi016 shift 1 1.0 -> NaN Invalid_operation +dqshi017 shift 1 0.1 -> NaN Invalid_operation +dqshi018 shift 1 0.0 -> NaN Invalid_operation +dqshi019 shift 1 1E+1 -> NaN Invalid_operation +dqshi020 shift 1 1E+99 -> NaN Invalid_operation +dqshi021 shift 1 Inf -> NaN Invalid_operation +dqshi022 shift 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +dqshi025 shift 1 -1000 -> NaN Invalid_operation +dqshi026 shift 1 -35 -> NaN Invalid_operation +dqshi027 shift 1 35 -> NaN Invalid_operation +dqshi028 shift 1 1000 -> NaN Invalid_operation + +-- full shifting pattern +dqshi030 shift 1234567890123456789012345678901234 -34 -> 0 +dqshi031 shift 1234567890123456789012345678901234 -33 -> 1 +dqshi032 shift 1234567890123456789012345678901234 -32 -> 12 +dqshi033 shift 1234567890123456789012345678901234 -31 -> 123 +dqshi034 shift 1234567890123456789012345678901234 -30 -> 1234 +dqshi035 shift 1234567890123456789012345678901234 -29 -> 12345 +dqshi036 shift 1234567890123456789012345678901234 -28 -> 123456 +dqshi037 shift 1234567890123456789012345678901234 -27 -> 1234567 +dqshi038 shift 1234567890123456789012345678901234 -26 -> 12345678 +dqshi039 shift 1234567890123456789012345678901234 -25 -> 123456789 +dqshi040 shift 1234567890123456789012345678901234 -24 -> 1234567890 +dqshi041 shift 1234567890123456789012345678901234 -23 -> 12345678901 +dqshi042 shift 1234567890123456789012345678901234 -22 -> 123456789012 +dqshi043 shift 1234567890123456789012345678901234 -21 -> 1234567890123 +dqshi044 shift 1234567890123456789012345678901234 -20 -> 12345678901234 +dqshi045 shift 1234567890123456789012345678901234 -19 -> 123456789012345 +dqshi047 shift 1234567890123456789012345678901234 -18 -> 1234567890123456 +dqshi048 shift 1234567890123456789012345678901234 -17 -> 12345678901234567 +dqshi049 shift 1234567890123456789012345678901234 -16 -> 123456789012345678 +dqshi050 shift 1234567890123456789012345678901234 -15 -> 1234567890123456789 +dqshi051 shift 1234567890123456789012345678901234 -14 -> 12345678901234567890 +dqshi052 shift 1234567890123456789012345678901234 -13 -> 123456789012345678901 +dqshi053 shift 1234567890123456789012345678901234 -12 -> 1234567890123456789012 +dqshi054 shift 1234567890123456789012345678901234 -11 -> 12345678901234567890123 +dqshi055 shift 1234567890123456789012345678901234 -10 -> 123456789012345678901234 +dqshi056 shift 1234567890123456789012345678901234 -9 -> 1234567890123456789012345 +dqshi057 shift 1234567890123456789012345678901234 -8 -> 12345678901234567890123456 +dqshi058 shift 1234567890123456789012345678901234 -7 -> 123456789012345678901234567 +dqshi059 shift 1234567890123456789012345678901234 -6 -> 1234567890123456789012345678 +dqshi060 shift 1234567890123456789012345678901234 -5 -> 12345678901234567890123456789 +dqshi061 shift 1234567890123456789012345678901234 -4 -> 123456789012345678901234567890 +dqshi062 shift 1234567890123456789012345678901234 -3 -> 1234567890123456789012345678901 +dqshi063 shift 1234567890123456789012345678901234 -2 -> 12345678901234567890123456789012 +dqshi064 shift 1234567890123456789012345678901234 -1 -> 123456789012345678901234567890123 +dqshi065 shift 1234567890123456789012345678901234 -0 -> 1234567890123456789012345678901234 + +dqshi066 shift 1234567890123456789012345678901234 +0 -> 1234567890123456789012345678901234 +dqshi067 shift 1234567890123456789012345678901234 +1 -> 2345678901234567890123456789012340 +dqshi068 shift 1234567890123456789012345678901234 +2 -> 3456789012345678901234567890123400 +dqshi069 shift 1234567890123456789012345678901234 +3 -> 4567890123456789012345678901234000 +dqshi070 shift 1234567890123456789012345678901234 +4 -> 5678901234567890123456789012340000 +dqshi071 shift 1234567890123456789012345678901234 +5 -> 6789012345678901234567890123400000 +dqshi072 shift 1234567890123456789012345678901234 +6 -> 7890123456789012345678901234000000 +dqshi073 shift 1234567890123456789012345678901234 +7 -> 8901234567890123456789012340000000 +dqshi074 shift 1234567890123456789012345678901234 +8 -> 9012345678901234567890123400000000 +dqshi075 shift 1234567890123456789012345678901234 +9 -> 123456789012345678901234000000000 +dqshi076 shift 1234567890123456789012345678901234 +10 -> 1234567890123456789012340000000000 +dqshi077 shift 1234567890123456789012345678901234 +11 -> 2345678901234567890123400000000000 +dqshi078 shift 1234567890123456789012345678901234 +12 -> 3456789012345678901234000000000000 +dqshi079 shift 1234567890123456789012345678901234 +13 -> 4567890123456789012340000000000000 +dqshi080 shift 1234567890123456789012345678901234 +14 -> 5678901234567890123400000000000000 +dqshi081 shift 1234567890123456789012345678901234 +15 -> 6789012345678901234000000000000000 +dqshi082 shift 1234567890123456789012345678901234 +16 -> 7890123456789012340000000000000000 +dqshi083 shift 1234567890123456789012345678901234 +17 -> 8901234567890123400000000000000000 +dqshi084 shift 1234567890123456789012345678901234 +18 -> 9012345678901234000000000000000000 +dqshi085 shift 1234567890123456789012345678901234 +19 -> 123456789012340000000000000000000 +dqshi086 shift 1234567890123456789012345678901234 +20 -> 1234567890123400000000000000000000 +dqshi087 shift 1234567890123456789012345678901234 +21 -> 2345678901234000000000000000000000 +dqshi088 shift 1234567890123456789012345678901234 +22 -> 3456789012340000000000000000000000 +dqshi089 shift 1234567890123456789012345678901234 +23 -> 4567890123400000000000000000000000 +dqshi090 shift 1234567890123456789012345678901234 +24 -> 5678901234000000000000000000000000 +dqshi091 shift 1234567890123456789012345678901234 +25 -> 6789012340000000000000000000000000 +dqshi092 shift 1234567890123456789012345678901234 +26 -> 7890123400000000000000000000000000 +dqshi093 shift 1234567890123456789012345678901234 +27 -> 8901234000000000000000000000000000 +dqshi094 shift 1234567890123456789012345678901234 +28 -> 9012340000000000000000000000000000 +dqshi095 shift 1234567890123456789012345678901234 +29 -> 123400000000000000000000000000000 +dqshi096 shift 1234567890123456789012345678901234 +30 -> 1234000000000000000000000000000000 +dqshi097 shift 1234567890123456789012345678901234 +31 -> 2340000000000000000000000000000000 +dqshi098 shift 1234567890123456789012345678901234 +32 -> 3400000000000000000000000000000000 +dqshi099 shift 1234567890123456789012345678901234 +33 -> 4000000000000000000000000000000000 +dqshi100 shift 1234567890123456789012345678901234 +34 -> 0 + +-- zeros +dqshi270 shift 0E-10 +29 -> 0E-10 +dqshi271 shift 0E-10 -29 -> 0E-10 +dqshi272 shift 0.000 +29 -> 0.000 +dqshi273 shift 0.000 -29 -> 0.000 +dqshi274 shift 0E+10 +29 -> 0E+10 +dqshi275 shift 0E+10 -29 -> 0E+10 +dqshi276 shift -0E-10 +29 -> -0E-10 +dqshi277 shift -0E-10 -29 -> -0E-10 +dqshi278 shift -0.000 +29 -> -0.000 +dqshi279 shift -0.000 -29 -> -0.000 +dqshi280 shift -0E+10 +29 -> -0E+10 +dqshi281 shift -0E+10 -29 -> -0E+10 + +-- Nmax, Nmin, Ntiny +dqshi141 shift 9.999999999999999999999999999999999E+6144 -1 -> 9.99999999999999999999999999999999E+6143 +dqshi142 shift 9.999999999999999999999999999999999E+6144 -33 -> 9E+6111 +dqshi143 shift 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999990E+6144 +dqshi144 shift 9.999999999999999999999999999999999E+6144 33 -> 9.000000000000000000000000000000000E+6144 +dqshi145 shift 1E-6143 -1 -> 0E-6143 +dqshi146 shift 1E-6143 -33 -> 0E-6143 +dqshi147 shift 1E-6143 1 -> 1.0E-6142 +dqshi148 shift 1E-6143 33 -> 1.000000000000000000000000000000000E-6110 +dqshi151 shift 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 +dqshi152 shift 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 +dqshi153 shift 1.000000000000000000000000000000000E-6143 1 -> 0E-6176 +dqshi154 shift 1.000000000000000000000000000000000E-6143 33 -> 0E-6176 +dqshi155 shift 9.000000000000000000000000000000000E-6143 -1 -> 9.00000000000000000000000000000000E-6144 +dqshi156 shift 9.000000000000000000000000000000000E-6143 -33 -> 9E-6176 +dqshi157 shift 9.000000000000000000000000000000000E-6143 1 -> 0E-6176 +dqshi158 shift 9.000000000000000000000000000000000E-6143 33 -> 0E-6176 +dqshi160 shift 1E-6176 -1 -> 0E-6176 +dqshi161 shift 1E-6176 -33 -> 0E-6176 +dqshi162 shift 1E-6176 1 -> 1.0E-6175 +dqshi163 shift 1E-6176 33 -> 1.000000000000000000000000000000000E-6143 +-- negatives +dqshi171 shift -9.999999999999999999999999999999999E+6144 -1 -> -9.99999999999999999999999999999999E+6143 +dqshi172 shift -9.999999999999999999999999999999999E+6144 -33 -> -9E+6111 +dqshi173 shift -9.999999999999999999999999999999999E+6144 1 -> -9.999999999999999999999999999999990E+6144 +dqshi174 shift -9.999999999999999999999999999999999E+6144 33 -> -9.000000000000000000000000000000000E+6144 +dqshi175 shift -1E-6143 -1 -> -0E-6143 +dqshi176 shift -1E-6143 -33 -> -0E-6143 +dqshi177 shift -1E-6143 1 -> -1.0E-6142 +dqshi178 shift -1E-6143 33 -> -1.000000000000000000000000000000000E-6110 +dqshi181 shift -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 +dqshi182 shift -1.000000000000000000000000000000000E-6143 -33 -> -1E-6176 +dqshi183 shift -1.000000000000000000000000000000000E-6143 1 -> -0E-6176 +dqshi184 shift -1.000000000000000000000000000000000E-6143 33 -> -0E-6176 +dqshi185 shift -9.000000000000000000000000000000000E-6143 -1 -> -9.00000000000000000000000000000000E-6144 +dqshi186 shift -9.000000000000000000000000000000000E-6143 -33 -> -9E-6176 +dqshi187 shift -9.000000000000000000000000000000000E-6143 1 -> -0E-6176 +dqshi188 shift -9.000000000000000000000000000000000E-6143 33 -> -0E-6176 +dqshi190 shift -1E-6176 -1 -> -0E-6176 +dqshi191 shift -1E-6176 -33 -> -0E-6176 +dqshi192 shift -1E-6176 1 -> -1.0E-6175 +dqshi193 shift -1E-6176 33 -> -1.000000000000000000000000000000000E-6143 + +-- more negatives (of sanities) +dqshi201 shift -0 0 -> -0 +dqshi202 shift -0 2 -> -0 +dqshi203 shift -1 2 -> -100 +dqshi204 shift -1 33 -> -1000000000000000000000000000000000 +dqshi205 shift -1 34 -> -0 +dqshi206 shift -1 -1 -> -0 +dqshi207 shift -0 -2 -> -0 +dqshi208 shift -1234567890123456789012345678901234 -1 -> -123456789012345678901234567890123 +dqshi209 shift -1234567890123456789012345678901234 -33 -> -1 +dqshi210 shift -1234567890123456789012345678901234 -34 -> -0 +dqshi211 shift -9934567890123456789012345678901234 -33 -> -9 +dqshi212 shift -9934567890123456789012345678901234 -34 -> -0 + + +-- Specials; NaNs are handled as usual +dqshi781 shift -Inf -8 -> -Infinity +dqshi782 shift -Inf -1 -> -Infinity +dqshi783 shift -Inf -0 -> -Infinity +dqshi784 shift -Inf 0 -> -Infinity +dqshi785 shift -Inf 1 -> -Infinity +dqshi786 shift -Inf 8 -> -Infinity +dqshi787 shift -1000 -Inf -> NaN Invalid_operation +dqshi788 shift -Inf -Inf -> NaN Invalid_operation +dqshi789 shift -1 -Inf -> NaN Invalid_operation +dqshi790 shift -0 -Inf -> NaN Invalid_operation +dqshi791 shift 0 -Inf -> NaN Invalid_operation +dqshi792 shift 1 -Inf -> NaN Invalid_operation +dqshi793 shift 1000 -Inf -> NaN Invalid_operation +dqshi794 shift Inf -Inf -> NaN Invalid_operation + +dqshi800 shift Inf -Inf -> NaN Invalid_operation +dqshi801 shift Inf -8 -> Infinity +dqshi802 shift Inf -1 -> Infinity +dqshi803 shift Inf -0 -> Infinity +dqshi804 shift Inf 0 -> Infinity +dqshi805 shift Inf 1 -> Infinity +dqshi806 shift Inf 8 -> Infinity +dqshi807 shift Inf Inf -> NaN Invalid_operation +dqshi808 shift -1000 Inf -> NaN Invalid_operation +dqshi809 shift -Inf Inf -> NaN Invalid_operation +dqshi810 shift -1 Inf -> NaN Invalid_operation +dqshi811 shift -0 Inf -> NaN Invalid_operation +dqshi812 shift 0 Inf -> NaN Invalid_operation +dqshi813 shift 1 Inf -> NaN Invalid_operation +dqshi814 shift 1000 Inf -> NaN Invalid_operation +dqshi815 shift Inf Inf -> NaN Invalid_operation + +dqshi821 shift NaN -Inf -> NaN +dqshi822 shift NaN -1000 -> NaN +dqshi823 shift NaN -1 -> NaN +dqshi824 shift NaN -0 -> NaN +dqshi825 shift NaN 0 -> NaN +dqshi826 shift NaN 1 -> NaN +dqshi827 shift NaN 1000 -> NaN +dqshi828 shift NaN Inf -> NaN +dqshi829 shift NaN NaN -> NaN +dqshi830 shift -Inf NaN -> NaN +dqshi831 shift -1000 NaN -> NaN +dqshi832 shift -1 NaN -> NaN +dqshi833 shift -0 NaN -> NaN +dqshi834 shift 0 NaN -> NaN +dqshi835 shift 1 NaN -> NaN +dqshi836 shift 1000 NaN -> NaN +dqshi837 shift Inf NaN -> NaN + +dqshi841 shift sNaN -Inf -> NaN Invalid_operation +dqshi842 shift sNaN -1000 -> NaN Invalid_operation +dqshi843 shift sNaN -1 -> NaN Invalid_operation +dqshi844 shift sNaN -0 -> NaN Invalid_operation +dqshi845 shift sNaN 0 -> NaN Invalid_operation +dqshi846 shift sNaN 1 -> NaN Invalid_operation +dqshi847 shift sNaN 1000 -> NaN Invalid_operation +dqshi848 shift sNaN NaN -> NaN Invalid_operation +dqshi849 shift sNaN sNaN -> NaN Invalid_operation +dqshi850 shift NaN sNaN -> NaN Invalid_operation +dqshi851 shift -Inf sNaN -> NaN Invalid_operation +dqshi852 shift -1000 sNaN -> NaN Invalid_operation +dqshi853 shift -1 sNaN -> NaN Invalid_operation +dqshi854 shift -0 sNaN -> NaN Invalid_operation +dqshi855 shift 0 sNaN -> NaN Invalid_operation +dqshi856 shift 1 sNaN -> NaN Invalid_operation +dqshi857 shift 1000 sNaN -> NaN Invalid_operation +dqshi858 shift Inf sNaN -> NaN Invalid_operation +dqshi859 shift NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqshi861 shift NaN1 -Inf -> NaN1 +dqshi862 shift +NaN2 -1000 -> NaN2 +dqshi863 shift NaN3 1000 -> NaN3 +dqshi864 shift NaN4 Inf -> NaN4 +dqshi865 shift NaN5 +NaN6 -> NaN5 +dqshi866 shift -Inf NaN7 -> NaN7 +dqshi867 shift -1000 NaN8 -> NaN8 +dqshi868 shift 1000 NaN9 -> NaN9 +dqshi869 shift Inf +NaN10 -> NaN10 +dqshi871 shift sNaN11 -Inf -> NaN11 Invalid_operation +dqshi872 shift sNaN12 -1000 -> NaN12 Invalid_operation +dqshi873 shift sNaN13 1000 -> NaN13 Invalid_operation +dqshi874 shift sNaN14 NaN17 -> NaN14 Invalid_operation +dqshi875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation +dqshi876 shift NaN16 sNaN19 -> NaN19 Invalid_operation +dqshi877 shift -Inf +sNaN20 -> NaN20 Invalid_operation +dqshi878 shift -1000 sNaN21 -> NaN21 Invalid_operation +dqshi879 shift 1000 sNaN22 -> NaN22 Invalid_operation +dqshi880 shift Inf sNaN23 -> NaN23 Invalid_operation +dqshi881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqshi882 shift -NaN26 NaN28 -> -NaN26 +dqshi883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqshi884 shift 1000 -NaN30 -> -NaN30 +dqshi885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/dqSubtract.decTest b/Lib/test/decimaltestdata/dqSubtract.decTest index f3b92270f9e..34572f69d5c 100644 --- a/Lib/test/decimaltestdata/dqSubtract.decTest +++ b/Lib/test/decimaltestdata/dqSubtract.decTest @@ -1,635 +1,635 @@ ------------------------------------------------------------------------- --- dqSubtract.decTest -- decQuad subtraction -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decQuads only; all arguments are --- representable in a decQuad -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- [first group are 'quick confidence check'] -dqsub001 subtract 0 0 -> '0' -dqsub002 subtract 1 1 -> '0' -dqsub003 subtract 1 2 -> '-1' -dqsub004 subtract 2 1 -> '1' -dqsub005 subtract 2 2 -> '0' -dqsub006 subtract 3 2 -> '1' -dqsub007 subtract 2 3 -> '-1' - -dqsub011 subtract -0 0 -> '-0' -dqsub012 subtract -1 1 -> '-2' -dqsub013 subtract -1 2 -> '-3' -dqsub014 subtract -2 1 -> '-3' -dqsub015 subtract -2 2 -> '-4' -dqsub016 subtract -3 2 -> '-5' -dqsub017 subtract -2 3 -> '-5' - -dqsub021 subtract 0 -0 -> '0' -dqsub022 subtract 1 -1 -> '2' -dqsub023 subtract 1 -2 -> '3' -dqsub024 subtract 2 -1 -> '3' -dqsub025 subtract 2 -2 -> '4' -dqsub026 subtract 3 -2 -> '5' -dqsub027 subtract 2 -3 -> '5' - -dqsub030 subtract 11 1 -> 10 -dqsub031 subtract 10 1 -> 9 -dqsub032 subtract 9 1 -> 8 -dqsub033 subtract 1 1 -> 0 -dqsub034 subtract 0 1 -> -1 -dqsub035 subtract -1 1 -> -2 -dqsub036 subtract -9 1 -> -10 -dqsub037 subtract -10 1 -> -11 -dqsub038 subtract -11 1 -> -12 - -dqsub040 subtract '5.75' '3.3' -> '2.45' -dqsub041 subtract '5' '-3' -> '8' -dqsub042 subtract '-5' '-3' -> '-2' -dqsub043 subtract '-7' '2.5' -> '-9.5' -dqsub044 subtract '0.7' '0.3' -> '0.4' -dqsub045 subtract '1.3' '0.3' -> '1.0' -dqsub046 subtract '1.25' '1.25' -> '0.00' - -dqsub050 subtract '1.23456789' '1.00000000' -> '0.23456789' -dqsub051 subtract '1.23456789' '1.00000089' -> '0.23456700' - -dqsub060 subtract '70' '10000e+34' -> '-1.000000000000000000000000000000000E+38' Inexact Rounded -dqsub061 subtract '700' '10000e+34' -> '-1.000000000000000000000000000000000E+38' Inexact Rounded -dqsub062 subtract '7000' '10000e+34' -> '-9.999999999999999999999999999999999E+37' Inexact Rounded -dqsub063 subtract '70000' '10000e+34' -> '-9.999999999999999999999999999999993E+37' Rounded -dqsub064 subtract '700000' '10000e+34' -> '-9.999999999999999999999999999999930E+37' Rounded - -- symmetry: -dqsub065 subtract '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqsub066 subtract '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqsub067 subtract '10000e+34' '7000' -> '9.999999999999999999999999999999999E+37' Inexact Rounded -dqsub068 subtract '10000e+34' '70000' -> '9.999999999999999999999999999999993E+37' Rounded -dqsub069 subtract '10000e+34' '700000' -> '9.999999999999999999999999999999930E+37' Rounded - - -- some of the next group are really constructor tests -dqsub090 subtract '00.0' '0.0' -> '0.0' -dqsub091 subtract '00.0' '0.00' -> '0.00' -dqsub092 subtract '0.00' '00.0' -> '0.00' -dqsub093 subtract '00.0' '0.00' -> '0.00' -dqsub094 subtract '0.00' '00.0' -> '0.00' -dqsub095 subtract '3' '.3' -> '2.7' -dqsub096 subtract '3.' '.3' -> '2.7' -dqsub097 subtract '3.0' '.3' -> '2.7' -dqsub098 subtract '3.00' '.3' -> '2.70' -dqsub099 subtract '3' '3' -> '0' -dqsub100 subtract '3' '+3' -> '0' -dqsub101 subtract '3' '-3' -> '6' -dqsub102 subtract '3' '0.3' -> '2.7' -dqsub103 subtract '3.' '0.3' -> '2.7' -dqsub104 subtract '3.0' '0.3' -> '2.7' -dqsub105 subtract '3.00' '0.3' -> '2.70' -dqsub106 subtract '3' '3.0' -> '0.0' -dqsub107 subtract '3' '+3.0' -> '0.0' -dqsub108 subtract '3' '-3.0' -> '6.0' - --- the above all from add; massaged and extended. Now some new ones... --- [particularly important for comparisons] --- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7 --- with input rounding. -dqsub120 subtract '10.23456784' '10.23456789' -> '-5E-8' -dqsub121 subtract '10.23456785' '10.23456789' -> '-4E-8' -dqsub122 subtract '10.23456786' '10.23456789' -> '-3E-8' -dqsub123 subtract '10.23456787' '10.23456789' -> '-2E-8' -dqsub124 subtract '10.23456788' '10.23456789' -> '-1E-8' -dqsub125 subtract '10.23456789' '10.23456789' -> '0E-8' -dqsub126 subtract '10.23456790' '10.23456789' -> '1E-8' -dqsub127 subtract '10.23456791' '10.23456789' -> '2E-8' -dqsub128 subtract '10.23456792' '10.23456789' -> '3E-8' -dqsub129 subtract '10.23456793' '10.23456789' -> '4E-8' -dqsub130 subtract '10.23456794' '10.23456789' -> '5E-8' -dqsub131 subtract '10.23456781' '10.23456786' -> '-5E-8' -dqsub132 subtract '10.23456782' '10.23456786' -> '-4E-8' -dqsub133 subtract '10.23456783' '10.23456786' -> '-3E-8' -dqsub134 subtract '10.23456784' '10.23456786' -> '-2E-8' -dqsub135 subtract '10.23456785' '10.23456786' -> '-1E-8' -dqsub136 subtract '10.23456786' '10.23456786' -> '0E-8' -dqsub137 subtract '10.23456787' '10.23456786' -> '1E-8' -dqsub138 subtract '10.23456788' '10.23456786' -> '2E-8' -dqsub139 subtract '10.23456789' '10.23456786' -> '3E-8' -dqsub140 subtract '10.23456790' '10.23456786' -> '4E-8' -dqsub141 subtract '10.23456791' '10.23456786' -> '5E-8' -dqsub142 subtract '1' '0.999999999' -> '1E-9' -dqsub143 subtract '0.999999999' '1' -> '-1E-9' -dqsub144 subtract '-10.23456780' '-10.23456786' -> '6E-8' -dqsub145 subtract '-10.23456790' '-10.23456786' -> '-4E-8' -dqsub146 subtract '-10.23456791' '-10.23456786' -> '-5E-8' - --- additional scaled arithmetic tests [0.97 problem] -dqsub160 subtract '0' '.1' -> '-0.1' -dqsub161 subtract '00' '.97983' -> '-0.97983' -dqsub162 subtract '0' '.9' -> '-0.9' -dqsub163 subtract '0' '0.102' -> '-0.102' -dqsub164 subtract '0' '.4' -> '-0.4' -dqsub165 subtract '0' '.307' -> '-0.307' -dqsub166 subtract '0' '.43822' -> '-0.43822' -dqsub167 subtract '0' '.911' -> '-0.911' -dqsub168 subtract '.0' '.02' -> '-0.02' -dqsub169 subtract '00' '.392' -> '-0.392' -dqsub170 subtract '0' '.26' -> '-0.26' -dqsub171 subtract '0' '0.51' -> '-0.51' -dqsub172 subtract '0' '.2234' -> '-0.2234' -dqsub173 subtract '0' '.2' -> '-0.2' -dqsub174 subtract '.0' '.0008' -> '-0.0008' --- 0. on left -dqsub180 subtract '0.0' '-.1' -> '0.1' -dqsub181 subtract '0.00' '-.97983' -> '0.97983' -dqsub182 subtract '0.0' '-.9' -> '0.9' -dqsub183 subtract '0.0' '-0.102' -> '0.102' -dqsub184 subtract '0.0' '-.4' -> '0.4' -dqsub185 subtract '0.0' '-.307' -> '0.307' -dqsub186 subtract '0.0' '-.43822' -> '0.43822' -dqsub187 subtract '0.0' '-.911' -> '0.911' -dqsub188 subtract '0.0' '-.02' -> '0.02' -dqsub189 subtract '0.00' '-.392' -> '0.392' -dqsub190 subtract '0.0' '-.26' -> '0.26' -dqsub191 subtract '0.0' '-0.51' -> '0.51' -dqsub192 subtract '0.0' '-.2234' -> '0.2234' -dqsub193 subtract '0.0' '-.2' -> '0.2' -dqsub194 subtract '0.0' '-.0008' -> '0.0008' --- negatives of same -dqsub200 subtract '0' '-.1' -> '0.1' -dqsub201 subtract '00' '-.97983' -> '0.97983' -dqsub202 subtract '0' '-.9' -> '0.9' -dqsub203 subtract '0' '-0.102' -> '0.102' -dqsub204 subtract '0' '-.4' -> '0.4' -dqsub205 subtract '0' '-.307' -> '0.307' -dqsub206 subtract '0' '-.43822' -> '0.43822' -dqsub207 subtract '0' '-.911' -> '0.911' -dqsub208 subtract '.0' '-.02' -> '0.02' -dqsub209 subtract '00' '-.392' -> '0.392' -dqsub210 subtract '0' '-.26' -> '0.26' -dqsub211 subtract '0' '-0.51' -> '0.51' -dqsub212 subtract '0' '-.2234' -> '0.2234' -dqsub213 subtract '0' '-.2' -> '0.2' -dqsub214 subtract '.0' '-.0008' -> '0.0008' - --- more fixed, LHS swaps [really the same as testcases under add] -dqsub220 subtract '-56267E-12' 0 -> '-5.6267E-8' -dqsub221 subtract '-56267E-11' 0 -> '-5.6267E-7' -dqsub222 subtract '-56267E-10' 0 -> '-0.0000056267' -dqsub223 subtract '-56267E-9' 0 -> '-0.000056267' -dqsub224 subtract '-56267E-8' 0 -> '-0.00056267' -dqsub225 subtract '-56267E-7' 0 -> '-0.0056267' -dqsub226 subtract '-56267E-6' 0 -> '-0.056267' -dqsub227 subtract '-56267E-5' 0 -> '-0.56267' -dqsub228 subtract '-56267E-2' 0 -> '-562.67' -dqsub229 subtract '-56267E-1' 0 -> '-5626.7' -dqsub230 subtract '-56267E-0' 0 -> '-56267' --- symmetry ... -dqsub240 subtract 0 '-56267E-12' -> '5.6267E-8' -dqsub241 subtract 0 '-56267E-11' -> '5.6267E-7' -dqsub242 subtract 0 '-56267E-10' -> '0.0000056267' -dqsub243 subtract 0 '-56267E-9' -> '0.000056267' -dqsub244 subtract 0 '-56267E-8' -> '0.00056267' -dqsub245 subtract 0 '-56267E-7' -> '0.0056267' -dqsub246 subtract 0 '-56267E-6' -> '0.056267' -dqsub247 subtract 0 '-56267E-5' -> '0.56267' -dqsub248 subtract 0 '-56267E-2' -> '562.67' -dqsub249 subtract 0 '-56267E-1' -> '5626.7' -dqsub250 subtract 0 '-56267E-0' -> '56267' - --- now some more from the 'new' add -dqsub301 subtract '1.23456789' '1.00000000' -> '0.23456789' -dqsub302 subtract '1.23456789' '1.00000011' -> '0.23456778' - --- some carrying effects -dqsub321 subtract '0.9998' '0.0000' -> '0.9998' -dqsub322 subtract '0.9998' '0.0001' -> '0.9997' -dqsub323 subtract '0.9998' '0.0002' -> '0.9996' -dqsub324 subtract '0.9998' '0.0003' -> '0.9995' -dqsub325 subtract '0.9998' '-0.0000' -> '0.9998' -dqsub326 subtract '0.9998' '-0.0001' -> '0.9999' -dqsub327 subtract '0.9998' '-0.0002' -> '1.0000' -dqsub328 subtract '0.9998' '-0.0003' -> '1.0001' - --- internal boundaries -dqsub346 subtract '10000e+9' '7' -> '9999999999993' -dqsub347 subtract '10000e+9' '70' -> '9999999999930' -dqsub348 subtract '10000e+9' '700' -> '9999999999300' -dqsub349 subtract '10000e+9' '7000' -> '9999999993000' -dqsub350 subtract '10000e+9' '70000' -> '9999999930000' -dqsub351 subtract '10000e+9' '700000' -> '9999999300000' -dqsub352 subtract '7' '10000e+9' -> '-9999999999993' -dqsub353 subtract '70' '10000e+9' -> '-9999999999930' -dqsub354 subtract '700' '10000e+9' -> '-9999999999300' -dqsub355 subtract '7000' '10000e+9' -> '-9999999993000' -dqsub356 subtract '70000' '10000e+9' -> '-9999999930000' -dqsub357 subtract '700000' '10000e+9' -> '-9999999300000' - --- zero preservation -dqsub361 subtract 1 '0.0001' -> '0.9999' -dqsub362 subtract 1 '0.00001' -> '0.99999' -dqsub363 subtract 1 '0.000001' -> '0.999999' -dqsub364 subtract 1 '0.0000000000000000000000000000000001' -> '0.9999999999999999999999999999999999' -dqsub365 subtract 1 '0.00000000000000000000000000000000001' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub366 subtract 1 '0.000000000000000000000000000000000001' -> '1.000000000000000000000000000000000' Inexact Rounded - --- some funny zeros [in case of bad signum] -dqsub370 subtract 1 0 -> 1 -dqsub371 subtract 1 0. -> 1 -dqsub372 subtract 1 .0 -> 1.0 -dqsub373 subtract 1 0.0 -> 1.0 -dqsub374 subtract 0 1 -> -1 -dqsub375 subtract 0. 1 -> -1 -dqsub376 subtract .0 1 -> -1.0 -dqsub377 subtract 0.0 1 -> -1.0 - --- leading 0 digit before round -dqsub910 subtract -103519362 -51897955.3 -> -51621406.7 -dqsub911 subtract 159579.444 89827.5229 -> 69751.9211 - -dqsub920 subtract 333.0000000000000000000000000123456 33.00000000000000000000000001234566 -> 299.9999999999999999999999999999999 Inexact Rounded -dqsub921 subtract 333.0000000000000000000000000123456 33.00000000000000000000000001234565 -> 300.0000000000000000000000000000000 Inexact Rounded -dqsub922 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234565 -> 99.99999999999999999999999999999995 -dqsub923 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234564 -> 99.99999999999999999999999999999996 -dqsub924 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234540 -> 100.0000000000000000000000000000002 Rounded -dqsub925 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234560 -> 90.00000000000000000000000000000000 -dqsub926 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234561 -> 89.99999999999999999999999999999999 -dqsub927 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234566 -> 89.99999999999999999999999999999994 -dqsub928 subtract 101.0000000000000000000000000123456 91.00000000000000000000000001234566 -> 9.99999999999999999999999999999994 -dqsub929 subtract 101.0000000000000000000000000123456 99.00000000000000000000000001234566 -> 1.99999999999999999999999999999994 - --- more LHS swaps [were fixed] -dqsub390 subtract '-56267E-10' 0 -> '-0.0000056267' -dqsub391 subtract '-56267E-6' 0 -> '-0.056267' -dqsub392 subtract '-56267E-5' 0 -> '-0.56267' -dqsub393 subtract '-56267E-4' 0 -> '-5.6267' -dqsub394 subtract '-56267E-3' 0 -> '-56.267' -dqsub395 subtract '-56267E-2' 0 -> '-562.67' -dqsub396 subtract '-56267E-1' 0 -> '-5626.7' -dqsub397 subtract '-56267E-0' 0 -> '-56267' -dqsub398 subtract '-5E-10' 0 -> '-5E-10' -dqsub399 subtract '-5E-7' 0 -> '-5E-7' -dqsub400 subtract '-5E-6' 0 -> '-0.000005' -dqsub401 subtract '-5E-5' 0 -> '-0.00005' -dqsub402 subtract '-5E-4' 0 -> '-0.0005' -dqsub403 subtract '-5E-1' 0 -> '-0.5' -dqsub404 subtract '-5E0' 0 -> '-5' -dqsub405 subtract '-5E1' 0 -> '-50' -dqsub406 subtract '-5E5' 0 -> '-500000' -dqsub407 subtract '-5E33' 0 -> '-5000000000000000000000000000000000' -dqsub408 subtract '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded -dqsub409 subtract '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded -dqsub410 subtract '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded -dqsub411 subtract '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded - --- more RHS swaps [were fixed] -dqsub420 subtract 0 '-56267E-10' -> '0.0000056267' -dqsub421 subtract 0 '-56267E-6' -> '0.056267' -dqsub422 subtract 0 '-56267E-5' -> '0.56267' -dqsub423 subtract 0 '-56267E-4' -> '5.6267' -dqsub424 subtract 0 '-56267E-3' -> '56.267' -dqsub425 subtract 0 '-56267E-2' -> '562.67' -dqsub426 subtract 0 '-56267E-1' -> '5626.7' -dqsub427 subtract 0 '-56267E-0' -> '56267' -dqsub428 subtract 0 '-5E-10' -> '5E-10' -dqsub429 subtract 0 '-5E-7' -> '5E-7' -dqsub430 subtract 0 '-5E-6' -> '0.000005' -dqsub431 subtract 0 '-5E-5' -> '0.00005' -dqsub432 subtract 0 '-5E-4' -> '0.0005' -dqsub433 subtract 0 '-5E-1' -> '0.5' -dqsub434 subtract 0 '-5E0' -> '5' -dqsub435 subtract 0 '-5E1' -> '50' -dqsub436 subtract 0 '-5E5' -> '500000' -dqsub437 subtract 0 '-5E33' -> '5000000000000000000000000000000000' -dqsub438 subtract 0 '-5E34' -> '5.000000000000000000000000000000000E+34' Rounded -dqsub439 subtract 0 '-5E35' -> '5.000000000000000000000000000000000E+35' Rounded -dqsub440 subtract 0 '-5E36' -> '5.000000000000000000000000000000000E+36' Rounded -dqsub441 subtract 0 '-5E100' -> '5.000000000000000000000000000000000E+100' Rounded - - --- try borderline precision, with carries, etc. -dqsub461 subtract '1E+16' '1' -> '9999999999999999' -dqsub462 subtract '1E+12' '-1.111' -> '1000000000001.111' -dqsub463 subtract '1.111' '-1E+12' -> '1000000000001.111' -dqsub464 subtract '-1' '-1E+16' -> '9999999999999999' -dqsub465 subtract '7E+15' '1' -> '6999999999999999' -dqsub466 subtract '7E+12' '-1.111' -> '7000000000001.111' -dqsub467 subtract '1.111' '-7E+12' -> '7000000000001.111' -dqsub468 subtract '-1' '-7E+15' -> '6999999999999999' - --- 1234567890123456 1234567890123456 1 23456789012345 -dqsub470 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555563' -> '1.000000000000000000000000000000001' Inexact Rounded -dqsub471 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555562' -> '1.000000000000000000000000000000001' Inexact Rounded -dqsub472 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555561' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub473 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555560' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub474 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555559' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub475 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555558' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub476 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555557' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub477 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555556' -> '1.000000000000000000000000000000000' Rounded -dqsub478 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' -dqsub479 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555554' -> '0.9999999999999999999999999999999998' -dqsub480 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555553' -> '0.9999999999999999999999999999999997' -dqsub481 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555552' -> '0.9999999999999999999999999999999996' -dqsub482 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555551' -> '0.9999999999999999999999999999999995' -dqsub483 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555550' -> '0.9999999999999999999999999999999994' - --- and some more, including residue effects and different roundings -rounding: half_up -dqsub500 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' -dqsub501 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub502 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub503 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub504 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub505 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub506 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub507 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub508 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub509 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub510 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub511 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub512 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub513 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub514 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub515 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub516 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' -dqsub517 subtract '1231234555555555555555555567456789' 1.000000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub518 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub519 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456788' Inexact Rounded - -rounding: half_even -dqsub520 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' -dqsub521 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub522 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub523 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub524 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub525 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub526 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub527 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub528 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub529 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub530 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub531 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub532 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub533 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub534 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub535 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub536 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' -dqsub537 subtract '1231234555555555555555555567456789' 1.00000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub538 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub539 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456788' Inexact Rounded --- critical few with even bottom digit... -dqsub540 subtract '1231234555555555555555555567456788' 0.499999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub541 subtract '1231234555555555555555555567456788' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub542 subtract '1231234555555555555555555567456788' 0.500000001 -> '1231234555555555555555555567456787' Inexact Rounded - -rounding: down -dqsub550 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' -dqsub551 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub552 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub553 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub554 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub555 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub556 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub557 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub558 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub559 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub560 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub561 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub562 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub563 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub564 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub565 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub566 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' -dqsub567 subtract '1231234555555555555555555567456789' 1.00000001 -> '1231234555555555555555555567456787' Inexact Rounded -dqsub568 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456787' Inexact Rounded -dqsub569 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456787' Inexact Rounded - --- symmetry... -rounding: half_up -dqsub600 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' -dqsub601 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub602 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub603 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub604 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub605 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub606 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub607 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub608 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub609 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub610 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub611 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub612 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub613 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub614 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub615 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub616 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' -dqsub617 subtract 1.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub618 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub619 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded - -rounding: half_even -dqsub620 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' -dqsub621 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub622 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub623 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub624 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub625 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub626 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub627 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub628 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub629 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub630 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub631 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub632 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub633 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub634 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub635 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub636 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' -dqsub637 subtract 1.00000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub638 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub639 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded --- critical few with even bottom digit... -dqsub640 subtract 0.499999999 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub641 subtract 0.5 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub642 subtract 0.500000001 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456787' Inexact Rounded - -rounding: down -dqsub650 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' -dqsub651 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub652 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub653 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub654 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub655 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub656 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub657 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub658 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub659 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub660 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub661 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub662 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub663 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub664 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub665 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub666 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' -dqsub667 subtract 1.00000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded -dqsub668 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded -dqsub669 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded - - --- lots of leading zeros in intermediate result, and showing effects of --- input rounding would have affected the following -rounding: half_up -dqsub670 subtract '1234567456789' '1234567456788.1' -> 0.9 -dqsub671 subtract '1234567456789' '1234567456788.9' -> 0.1 -dqsub672 subtract '1234567456789' '1234567456789.1' -> -0.1 -dqsub673 subtract '1234567456789' '1234567456789.5' -> -0.5 -dqsub674 subtract '1234567456789' '1234567456789.9' -> -0.9 - -rounding: half_even -dqsub680 subtract '1234567456789' '1234567456788.1' -> 0.9 -dqsub681 subtract '1234567456789' '1234567456788.9' -> 0.1 -dqsub682 subtract '1234567456789' '1234567456789.1' -> -0.1 -dqsub683 subtract '1234567456789' '1234567456789.5' -> -0.5 -dqsub684 subtract '1234567456789' '1234567456789.9' -> -0.9 - -dqsub685 subtract '1234567456788' '1234567456787.1' -> 0.9 -dqsub686 subtract '1234567456788' '1234567456787.9' -> 0.1 -dqsub687 subtract '1234567456788' '1234567456788.1' -> -0.1 -dqsub688 subtract '1234567456788' '1234567456788.5' -> -0.5 -dqsub689 subtract '1234567456788' '1234567456788.9' -> -0.9 - -rounding: down -dqsub690 subtract '1234567456789' '1234567456788.1' -> 0.9 -dqsub691 subtract '1234567456789' '1234567456788.9' -> 0.1 -dqsub692 subtract '1234567456789' '1234567456789.1' -> -0.1 -dqsub693 subtract '1234567456789' '1234567456789.5' -> -0.5 -dqsub694 subtract '1234567456789' '1234567456789.9' -> -0.9 - --- Specials -dqsub780 subtract -Inf Inf -> -Infinity -dqsub781 subtract -Inf 1000 -> -Infinity -dqsub782 subtract -Inf 1 -> -Infinity -dqsub783 subtract -Inf -0 -> -Infinity -dqsub784 subtract -Inf -1 -> -Infinity -dqsub785 subtract -Inf -1000 -> -Infinity -dqsub787 subtract -1000 Inf -> -Infinity -dqsub788 subtract -Inf Inf -> -Infinity -dqsub789 subtract -1 Inf -> -Infinity -dqsub790 subtract 0 Inf -> -Infinity -dqsub791 subtract 1 Inf -> -Infinity -dqsub792 subtract 1000 Inf -> -Infinity - -dqsub800 subtract Inf Inf -> NaN Invalid_operation -dqsub801 subtract Inf 1000 -> Infinity -dqsub802 subtract Inf 1 -> Infinity -dqsub803 subtract Inf 0 -> Infinity -dqsub804 subtract Inf -0 -> Infinity -dqsub805 subtract Inf -1 -> Infinity -dqsub806 subtract Inf -1000 -> Infinity -dqsub807 subtract Inf -Inf -> Infinity -dqsub808 subtract -1000 -Inf -> Infinity -dqsub809 subtract -Inf -Inf -> NaN Invalid_operation -dqsub810 subtract -1 -Inf -> Infinity -dqsub811 subtract -0 -Inf -> Infinity -dqsub812 subtract 0 -Inf -> Infinity -dqsub813 subtract 1 -Inf -> Infinity -dqsub814 subtract 1000 -Inf -> Infinity -dqsub815 subtract Inf -Inf -> Infinity - -dqsub821 subtract NaN Inf -> NaN -dqsub822 subtract -NaN 1000 -> -NaN -dqsub823 subtract NaN 1 -> NaN -dqsub824 subtract NaN 0 -> NaN -dqsub825 subtract NaN -0 -> NaN -dqsub826 subtract NaN -1 -> NaN -dqsub827 subtract NaN -1000 -> NaN -dqsub828 subtract NaN -Inf -> NaN -dqsub829 subtract -NaN NaN -> -NaN -dqsub830 subtract -Inf NaN -> NaN -dqsub831 subtract -1000 NaN -> NaN -dqsub832 subtract -1 NaN -> NaN -dqsub833 subtract -0 NaN -> NaN -dqsub834 subtract 0 NaN -> NaN -dqsub835 subtract 1 NaN -> NaN -dqsub836 subtract 1000 -NaN -> -NaN -dqsub837 subtract Inf NaN -> NaN - -dqsub841 subtract sNaN Inf -> NaN Invalid_operation -dqsub842 subtract -sNaN 1000 -> -NaN Invalid_operation -dqsub843 subtract sNaN 1 -> NaN Invalid_operation -dqsub844 subtract sNaN 0 -> NaN Invalid_operation -dqsub845 subtract sNaN -0 -> NaN Invalid_operation -dqsub846 subtract sNaN -1 -> NaN Invalid_operation -dqsub847 subtract sNaN -1000 -> NaN Invalid_operation -dqsub848 subtract sNaN NaN -> NaN Invalid_operation -dqsub849 subtract sNaN sNaN -> NaN Invalid_operation -dqsub850 subtract NaN sNaN -> NaN Invalid_operation -dqsub851 subtract -Inf -sNaN -> -NaN Invalid_operation -dqsub852 subtract -1000 sNaN -> NaN Invalid_operation -dqsub853 subtract -1 sNaN -> NaN Invalid_operation -dqsub854 subtract -0 sNaN -> NaN Invalid_operation -dqsub855 subtract 0 sNaN -> NaN Invalid_operation -dqsub856 subtract 1 sNaN -> NaN Invalid_operation -dqsub857 subtract 1000 sNaN -> NaN Invalid_operation -dqsub858 subtract Inf sNaN -> NaN Invalid_operation -dqsub859 subtract NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqsub861 subtract NaN01 -Inf -> NaN1 -dqsub862 subtract -NaN02 -1000 -> -NaN2 -dqsub863 subtract NaN03 1000 -> NaN3 -dqsub864 subtract NaN04 Inf -> NaN4 -dqsub865 subtract NaN05 NaN61 -> NaN5 -dqsub866 subtract -Inf -NaN71 -> -NaN71 -dqsub867 subtract -1000 NaN81 -> NaN81 -dqsub868 subtract 1000 NaN91 -> NaN91 -dqsub869 subtract Inf NaN101 -> NaN101 -dqsub871 subtract sNaN011 -Inf -> NaN11 Invalid_operation -dqsub872 subtract sNaN012 -1000 -> NaN12 Invalid_operation -dqsub873 subtract -sNaN013 1000 -> -NaN13 Invalid_operation -dqsub874 subtract sNaN014 NaN171 -> NaN14 Invalid_operation -dqsub875 subtract sNaN015 sNaN181 -> NaN15 Invalid_operation -dqsub876 subtract NaN016 sNaN191 -> NaN191 Invalid_operation -dqsub877 subtract -Inf sNaN201 -> NaN201 Invalid_operation -dqsub878 subtract -1000 sNaN211 -> NaN211 Invalid_operation -dqsub879 subtract 1000 -sNaN221 -> -NaN221 Invalid_operation -dqsub880 subtract Inf sNaN231 -> NaN231 Invalid_operation -dqsub881 subtract NaN025 sNaN241 -> NaN241 Invalid_operation - --- edge case spills -dqsub901 subtract 2.E-3 1.002 -> -1.000 -dqsub902 subtract 2.0E-3 1.002 -> -1.0000 -dqsub903 subtract 2.00E-3 1.0020 -> -1.00000 -dqsub904 subtract 2.000E-3 1.00200 -> -1.000000 -dqsub905 subtract 2.0000E-3 1.002000 -> -1.0000000 -dqsub906 subtract 2.00000E-3 1.0020000 -> -1.00000000 -dqsub907 subtract 2.000000E-3 1.00200000 -> -1.000000000 -dqsub908 subtract 2.0000000E-3 1.002000000 -> -1.0000000000 - --- subnormals and overflows covered under Add - --- Examples from SQL proposal (Krishna Kulkarni) -dqsub1125 subtract 130E-2 120E-2 -> 0.10 -dqsub1126 subtract 130E-2 12E-1 -> 0.10 -dqsub1127 subtract 130E-2 1E0 -> 0.30 -dqsub1128 subtract 1E2 1E4 -> -9.9E+3 - --- Null tests -dqsub9990 subtract 10 # -> NaN Invalid_operation -dqsub9991 subtract # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqSubtract.decTest -- decQuad subtraction -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decQuads only; all arguments are +-- representable in a decQuad +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- [first group are 'quick confidence check'] +dqsub001 subtract 0 0 -> '0' +dqsub002 subtract 1 1 -> '0' +dqsub003 subtract 1 2 -> '-1' +dqsub004 subtract 2 1 -> '1' +dqsub005 subtract 2 2 -> '0' +dqsub006 subtract 3 2 -> '1' +dqsub007 subtract 2 3 -> '-1' + +dqsub011 subtract -0 0 -> '-0' +dqsub012 subtract -1 1 -> '-2' +dqsub013 subtract -1 2 -> '-3' +dqsub014 subtract -2 1 -> '-3' +dqsub015 subtract -2 2 -> '-4' +dqsub016 subtract -3 2 -> '-5' +dqsub017 subtract -2 3 -> '-5' + +dqsub021 subtract 0 -0 -> '0' +dqsub022 subtract 1 -1 -> '2' +dqsub023 subtract 1 -2 -> '3' +dqsub024 subtract 2 -1 -> '3' +dqsub025 subtract 2 -2 -> '4' +dqsub026 subtract 3 -2 -> '5' +dqsub027 subtract 2 -3 -> '5' + +dqsub030 subtract 11 1 -> 10 +dqsub031 subtract 10 1 -> 9 +dqsub032 subtract 9 1 -> 8 +dqsub033 subtract 1 1 -> 0 +dqsub034 subtract 0 1 -> -1 +dqsub035 subtract -1 1 -> -2 +dqsub036 subtract -9 1 -> -10 +dqsub037 subtract -10 1 -> -11 +dqsub038 subtract -11 1 -> -12 + +dqsub040 subtract '5.75' '3.3' -> '2.45' +dqsub041 subtract '5' '-3' -> '8' +dqsub042 subtract '-5' '-3' -> '-2' +dqsub043 subtract '-7' '2.5' -> '-9.5' +dqsub044 subtract '0.7' '0.3' -> '0.4' +dqsub045 subtract '1.3' '0.3' -> '1.0' +dqsub046 subtract '1.25' '1.25' -> '0.00' + +dqsub050 subtract '1.23456789' '1.00000000' -> '0.23456789' +dqsub051 subtract '1.23456789' '1.00000089' -> '0.23456700' + +dqsub060 subtract '70' '10000e+34' -> '-1.000000000000000000000000000000000E+38' Inexact Rounded +dqsub061 subtract '700' '10000e+34' -> '-1.000000000000000000000000000000000E+38' Inexact Rounded +dqsub062 subtract '7000' '10000e+34' -> '-9.999999999999999999999999999999999E+37' Inexact Rounded +dqsub063 subtract '70000' '10000e+34' -> '-9.999999999999999999999999999999993E+37' Rounded +dqsub064 subtract '700000' '10000e+34' -> '-9.999999999999999999999999999999930E+37' Rounded + -- symmetry: +dqsub065 subtract '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqsub066 subtract '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqsub067 subtract '10000e+34' '7000' -> '9.999999999999999999999999999999999E+37' Inexact Rounded +dqsub068 subtract '10000e+34' '70000' -> '9.999999999999999999999999999999993E+37' Rounded +dqsub069 subtract '10000e+34' '700000' -> '9.999999999999999999999999999999930E+37' Rounded + + -- some of the next group are really constructor tests +dqsub090 subtract '00.0' '0.0' -> '0.0' +dqsub091 subtract '00.0' '0.00' -> '0.00' +dqsub092 subtract '0.00' '00.0' -> '0.00' +dqsub093 subtract '00.0' '0.00' -> '0.00' +dqsub094 subtract '0.00' '00.0' -> '0.00' +dqsub095 subtract '3' '.3' -> '2.7' +dqsub096 subtract '3.' '.3' -> '2.7' +dqsub097 subtract '3.0' '.3' -> '2.7' +dqsub098 subtract '3.00' '.3' -> '2.70' +dqsub099 subtract '3' '3' -> '0' +dqsub100 subtract '3' '+3' -> '0' +dqsub101 subtract '3' '-3' -> '6' +dqsub102 subtract '3' '0.3' -> '2.7' +dqsub103 subtract '3.' '0.3' -> '2.7' +dqsub104 subtract '3.0' '0.3' -> '2.7' +dqsub105 subtract '3.00' '0.3' -> '2.70' +dqsub106 subtract '3' '3.0' -> '0.0' +dqsub107 subtract '3' '+3.0' -> '0.0' +dqsub108 subtract '3' '-3.0' -> '6.0' + +-- the above all from add; massaged and extended. Now some new ones... +-- [particularly important for comparisons] +-- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7 +-- with input rounding. +dqsub120 subtract '10.23456784' '10.23456789' -> '-5E-8' +dqsub121 subtract '10.23456785' '10.23456789' -> '-4E-8' +dqsub122 subtract '10.23456786' '10.23456789' -> '-3E-8' +dqsub123 subtract '10.23456787' '10.23456789' -> '-2E-8' +dqsub124 subtract '10.23456788' '10.23456789' -> '-1E-8' +dqsub125 subtract '10.23456789' '10.23456789' -> '0E-8' +dqsub126 subtract '10.23456790' '10.23456789' -> '1E-8' +dqsub127 subtract '10.23456791' '10.23456789' -> '2E-8' +dqsub128 subtract '10.23456792' '10.23456789' -> '3E-8' +dqsub129 subtract '10.23456793' '10.23456789' -> '4E-8' +dqsub130 subtract '10.23456794' '10.23456789' -> '5E-8' +dqsub131 subtract '10.23456781' '10.23456786' -> '-5E-8' +dqsub132 subtract '10.23456782' '10.23456786' -> '-4E-8' +dqsub133 subtract '10.23456783' '10.23456786' -> '-3E-8' +dqsub134 subtract '10.23456784' '10.23456786' -> '-2E-8' +dqsub135 subtract '10.23456785' '10.23456786' -> '-1E-8' +dqsub136 subtract '10.23456786' '10.23456786' -> '0E-8' +dqsub137 subtract '10.23456787' '10.23456786' -> '1E-8' +dqsub138 subtract '10.23456788' '10.23456786' -> '2E-8' +dqsub139 subtract '10.23456789' '10.23456786' -> '3E-8' +dqsub140 subtract '10.23456790' '10.23456786' -> '4E-8' +dqsub141 subtract '10.23456791' '10.23456786' -> '5E-8' +dqsub142 subtract '1' '0.999999999' -> '1E-9' +dqsub143 subtract '0.999999999' '1' -> '-1E-9' +dqsub144 subtract '-10.23456780' '-10.23456786' -> '6E-8' +dqsub145 subtract '-10.23456790' '-10.23456786' -> '-4E-8' +dqsub146 subtract '-10.23456791' '-10.23456786' -> '-5E-8' + +-- additional scaled arithmetic tests [0.97 problem] +dqsub160 subtract '0' '.1' -> '-0.1' +dqsub161 subtract '00' '.97983' -> '-0.97983' +dqsub162 subtract '0' '.9' -> '-0.9' +dqsub163 subtract '0' '0.102' -> '-0.102' +dqsub164 subtract '0' '.4' -> '-0.4' +dqsub165 subtract '0' '.307' -> '-0.307' +dqsub166 subtract '0' '.43822' -> '-0.43822' +dqsub167 subtract '0' '.911' -> '-0.911' +dqsub168 subtract '.0' '.02' -> '-0.02' +dqsub169 subtract '00' '.392' -> '-0.392' +dqsub170 subtract '0' '.26' -> '-0.26' +dqsub171 subtract '0' '0.51' -> '-0.51' +dqsub172 subtract '0' '.2234' -> '-0.2234' +dqsub173 subtract '0' '.2' -> '-0.2' +dqsub174 subtract '.0' '.0008' -> '-0.0008' +-- 0. on left +dqsub180 subtract '0.0' '-.1' -> '0.1' +dqsub181 subtract '0.00' '-.97983' -> '0.97983' +dqsub182 subtract '0.0' '-.9' -> '0.9' +dqsub183 subtract '0.0' '-0.102' -> '0.102' +dqsub184 subtract '0.0' '-.4' -> '0.4' +dqsub185 subtract '0.0' '-.307' -> '0.307' +dqsub186 subtract '0.0' '-.43822' -> '0.43822' +dqsub187 subtract '0.0' '-.911' -> '0.911' +dqsub188 subtract '0.0' '-.02' -> '0.02' +dqsub189 subtract '0.00' '-.392' -> '0.392' +dqsub190 subtract '0.0' '-.26' -> '0.26' +dqsub191 subtract '0.0' '-0.51' -> '0.51' +dqsub192 subtract '0.0' '-.2234' -> '0.2234' +dqsub193 subtract '0.0' '-.2' -> '0.2' +dqsub194 subtract '0.0' '-.0008' -> '0.0008' +-- negatives of same +dqsub200 subtract '0' '-.1' -> '0.1' +dqsub201 subtract '00' '-.97983' -> '0.97983' +dqsub202 subtract '0' '-.9' -> '0.9' +dqsub203 subtract '0' '-0.102' -> '0.102' +dqsub204 subtract '0' '-.4' -> '0.4' +dqsub205 subtract '0' '-.307' -> '0.307' +dqsub206 subtract '0' '-.43822' -> '0.43822' +dqsub207 subtract '0' '-.911' -> '0.911' +dqsub208 subtract '.0' '-.02' -> '0.02' +dqsub209 subtract '00' '-.392' -> '0.392' +dqsub210 subtract '0' '-.26' -> '0.26' +dqsub211 subtract '0' '-0.51' -> '0.51' +dqsub212 subtract '0' '-.2234' -> '0.2234' +dqsub213 subtract '0' '-.2' -> '0.2' +dqsub214 subtract '.0' '-.0008' -> '0.0008' + +-- more fixed, LHS swaps [really the same as testcases under add] +dqsub220 subtract '-56267E-12' 0 -> '-5.6267E-8' +dqsub221 subtract '-56267E-11' 0 -> '-5.6267E-7' +dqsub222 subtract '-56267E-10' 0 -> '-0.0000056267' +dqsub223 subtract '-56267E-9' 0 -> '-0.000056267' +dqsub224 subtract '-56267E-8' 0 -> '-0.00056267' +dqsub225 subtract '-56267E-7' 0 -> '-0.0056267' +dqsub226 subtract '-56267E-6' 0 -> '-0.056267' +dqsub227 subtract '-56267E-5' 0 -> '-0.56267' +dqsub228 subtract '-56267E-2' 0 -> '-562.67' +dqsub229 subtract '-56267E-1' 0 -> '-5626.7' +dqsub230 subtract '-56267E-0' 0 -> '-56267' +-- symmetry ... +dqsub240 subtract 0 '-56267E-12' -> '5.6267E-8' +dqsub241 subtract 0 '-56267E-11' -> '5.6267E-7' +dqsub242 subtract 0 '-56267E-10' -> '0.0000056267' +dqsub243 subtract 0 '-56267E-9' -> '0.000056267' +dqsub244 subtract 0 '-56267E-8' -> '0.00056267' +dqsub245 subtract 0 '-56267E-7' -> '0.0056267' +dqsub246 subtract 0 '-56267E-6' -> '0.056267' +dqsub247 subtract 0 '-56267E-5' -> '0.56267' +dqsub248 subtract 0 '-56267E-2' -> '562.67' +dqsub249 subtract 0 '-56267E-1' -> '5626.7' +dqsub250 subtract 0 '-56267E-0' -> '56267' + +-- now some more from the 'new' add +dqsub301 subtract '1.23456789' '1.00000000' -> '0.23456789' +dqsub302 subtract '1.23456789' '1.00000011' -> '0.23456778' + +-- some carrying effects +dqsub321 subtract '0.9998' '0.0000' -> '0.9998' +dqsub322 subtract '0.9998' '0.0001' -> '0.9997' +dqsub323 subtract '0.9998' '0.0002' -> '0.9996' +dqsub324 subtract '0.9998' '0.0003' -> '0.9995' +dqsub325 subtract '0.9998' '-0.0000' -> '0.9998' +dqsub326 subtract '0.9998' '-0.0001' -> '0.9999' +dqsub327 subtract '0.9998' '-0.0002' -> '1.0000' +dqsub328 subtract '0.9998' '-0.0003' -> '1.0001' + +-- internal boundaries +dqsub346 subtract '10000e+9' '7' -> '9999999999993' +dqsub347 subtract '10000e+9' '70' -> '9999999999930' +dqsub348 subtract '10000e+9' '700' -> '9999999999300' +dqsub349 subtract '10000e+9' '7000' -> '9999999993000' +dqsub350 subtract '10000e+9' '70000' -> '9999999930000' +dqsub351 subtract '10000e+9' '700000' -> '9999999300000' +dqsub352 subtract '7' '10000e+9' -> '-9999999999993' +dqsub353 subtract '70' '10000e+9' -> '-9999999999930' +dqsub354 subtract '700' '10000e+9' -> '-9999999999300' +dqsub355 subtract '7000' '10000e+9' -> '-9999999993000' +dqsub356 subtract '70000' '10000e+9' -> '-9999999930000' +dqsub357 subtract '700000' '10000e+9' -> '-9999999300000' + +-- zero preservation +dqsub361 subtract 1 '0.0001' -> '0.9999' +dqsub362 subtract 1 '0.00001' -> '0.99999' +dqsub363 subtract 1 '0.000001' -> '0.999999' +dqsub364 subtract 1 '0.0000000000000000000000000000000001' -> '0.9999999999999999999999999999999999' +dqsub365 subtract 1 '0.00000000000000000000000000000000001' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub366 subtract 1 '0.000000000000000000000000000000000001' -> '1.000000000000000000000000000000000' Inexact Rounded + +-- some funny zeros [in case of bad signum] +dqsub370 subtract 1 0 -> 1 +dqsub371 subtract 1 0. -> 1 +dqsub372 subtract 1 .0 -> 1.0 +dqsub373 subtract 1 0.0 -> 1.0 +dqsub374 subtract 0 1 -> -1 +dqsub375 subtract 0. 1 -> -1 +dqsub376 subtract .0 1 -> -1.0 +dqsub377 subtract 0.0 1 -> -1.0 + +-- leading 0 digit before round +dqsub910 subtract -103519362 -51897955.3 -> -51621406.7 +dqsub911 subtract 159579.444 89827.5229 -> 69751.9211 + +dqsub920 subtract 333.0000000000000000000000000123456 33.00000000000000000000000001234566 -> 299.9999999999999999999999999999999 Inexact Rounded +dqsub921 subtract 333.0000000000000000000000000123456 33.00000000000000000000000001234565 -> 300.0000000000000000000000000000000 Inexact Rounded +dqsub922 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234565 -> 99.99999999999999999999999999999995 +dqsub923 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234564 -> 99.99999999999999999999999999999996 +dqsub924 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234540 -> 100.0000000000000000000000000000002 Rounded +dqsub925 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234560 -> 90.00000000000000000000000000000000 +dqsub926 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234561 -> 89.99999999999999999999999999999999 +dqsub927 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234566 -> 89.99999999999999999999999999999994 +dqsub928 subtract 101.0000000000000000000000000123456 91.00000000000000000000000001234566 -> 9.99999999999999999999999999999994 +dqsub929 subtract 101.0000000000000000000000000123456 99.00000000000000000000000001234566 -> 1.99999999999999999999999999999994 + +-- more LHS swaps [were fixed] +dqsub390 subtract '-56267E-10' 0 -> '-0.0000056267' +dqsub391 subtract '-56267E-6' 0 -> '-0.056267' +dqsub392 subtract '-56267E-5' 0 -> '-0.56267' +dqsub393 subtract '-56267E-4' 0 -> '-5.6267' +dqsub394 subtract '-56267E-3' 0 -> '-56.267' +dqsub395 subtract '-56267E-2' 0 -> '-562.67' +dqsub396 subtract '-56267E-1' 0 -> '-5626.7' +dqsub397 subtract '-56267E-0' 0 -> '-56267' +dqsub398 subtract '-5E-10' 0 -> '-5E-10' +dqsub399 subtract '-5E-7' 0 -> '-5E-7' +dqsub400 subtract '-5E-6' 0 -> '-0.000005' +dqsub401 subtract '-5E-5' 0 -> '-0.00005' +dqsub402 subtract '-5E-4' 0 -> '-0.0005' +dqsub403 subtract '-5E-1' 0 -> '-0.5' +dqsub404 subtract '-5E0' 0 -> '-5' +dqsub405 subtract '-5E1' 0 -> '-50' +dqsub406 subtract '-5E5' 0 -> '-500000' +dqsub407 subtract '-5E33' 0 -> '-5000000000000000000000000000000000' +dqsub408 subtract '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded +dqsub409 subtract '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded +dqsub410 subtract '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded +dqsub411 subtract '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded + +-- more RHS swaps [were fixed] +dqsub420 subtract 0 '-56267E-10' -> '0.0000056267' +dqsub421 subtract 0 '-56267E-6' -> '0.056267' +dqsub422 subtract 0 '-56267E-5' -> '0.56267' +dqsub423 subtract 0 '-56267E-4' -> '5.6267' +dqsub424 subtract 0 '-56267E-3' -> '56.267' +dqsub425 subtract 0 '-56267E-2' -> '562.67' +dqsub426 subtract 0 '-56267E-1' -> '5626.7' +dqsub427 subtract 0 '-56267E-0' -> '56267' +dqsub428 subtract 0 '-5E-10' -> '5E-10' +dqsub429 subtract 0 '-5E-7' -> '5E-7' +dqsub430 subtract 0 '-5E-6' -> '0.000005' +dqsub431 subtract 0 '-5E-5' -> '0.00005' +dqsub432 subtract 0 '-5E-4' -> '0.0005' +dqsub433 subtract 0 '-5E-1' -> '0.5' +dqsub434 subtract 0 '-5E0' -> '5' +dqsub435 subtract 0 '-5E1' -> '50' +dqsub436 subtract 0 '-5E5' -> '500000' +dqsub437 subtract 0 '-5E33' -> '5000000000000000000000000000000000' +dqsub438 subtract 0 '-5E34' -> '5.000000000000000000000000000000000E+34' Rounded +dqsub439 subtract 0 '-5E35' -> '5.000000000000000000000000000000000E+35' Rounded +dqsub440 subtract 0 '-5E36' -> '5.000000000000000000000000000000000E+36' Rounded +dqsub441 subtract 0 '-5E100' -> '5.000000000000000000000000000000000E+100' Rounded + + +-- try borderline precision, with carries, etc. +dqsub461 subtract '1E+16' '1' -> '9999999999999999' +dqsub462 subtract '1E+12' '-1.111' -> '1000000000001.111' +dqsub463 subtract '1.111' '-1E+12' -> '1000000000001.111' +dqsub464 subtract '-1' '-1E+16' -> '9999999999999999' +dqsub465 subtract '7E+15' '1' -> '6999999999999999' +dqsub466 subtract '7E+12' '-1.111' -> '7000000000001.111' +dqsub467 subtract '1.111' '-7E+12' -> '7000000000001.111' +dqsub468 subtract '-1' '-7E+15' -> '6999999999999999' + +-- 1234567890123456 1234567890123456 1 23456789012345 +dqsub470 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555563' -> '1.000000000000000000000000000000001' Inexact Rounded +dqsub471 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555562' -> '1.000000000000000000000000000000001' Inexact Rounded +dqsub472 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555561' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub473 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555560' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub474 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555559' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub475 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555558' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub476 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555557' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub477 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555556' -> '1.000000000000000000000000000000000' Rounded +dqsub478 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' +dqsub479 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555554' -> '0.9999999999999999999999999999999998' +dqsub480 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555553' -> '0.9999999999999999999999999999999997' +dqsub481 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555552' -> '0.9999999999999999999999999999999996' +dqsub482 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555551' -> '0.9999999999999999999999999999999995' +dqsub483 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555550' -> '0.9999999999999999999999999999999994' + +-- and some more, including residue effects and different roundings +rounding: half_up +dqsub500 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' +dqsub501 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub502 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub503 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub504 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub505 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub506 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub507 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub508 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub509 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub510 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub511 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub512 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub513 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub514 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub515 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub516 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' +dqsub517 subtract '1231234555555555555555555567456789' 1.000000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub518 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub519 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456788' Inexact Rounded + +rounding: half_even +dqsub520 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' +dqsub521 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub522 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub523 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub524 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub525 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub526 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub527 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub528 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub529 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub530 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub531 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub532 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub533 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub534 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub535 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub536 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' +dqsub537 subtract '1231234555555555555555555567456789' 1.00000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub538 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub539 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456788' Inexact Rounded +-- critical few with even bottom digit... +dqsub540 subtract '1231234555555555555555555567456788' 0.499999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub541 subtract '1231234555555555555555555567456788' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub542 subtract '1231234555555555555555555567456788' 0.500000001 -> '1231234555555555555555555567456787' Inexact Rounded + +rounding: down +dqsub550 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' +dqsub551 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub552 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub553 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub554 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub555 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub556 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub557 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub558 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub559 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub560 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub561 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub562 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub563 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub564 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub565 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub566 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' +dqsub567 subtract '1231234555555555555555555567456789' 1.00000001 -> '1231234555555555555555555567456787' Inexact Rounded +dqsub568 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456787' Inexact Rounded +dqsub569 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456787' Inexact Rounded + +-- symmetry... +rounding: half_up +dqsub600 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' +dqsub601 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub602 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub603 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub604 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub605 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub606 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub607 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub608 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub609 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub610 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub611 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub612 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub613 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub614 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub615 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub616 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' +dqsub617 subtract 1.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub618 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub619 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded + +rounding: half_even +dqsub620 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' +dqsub621 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub622 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub623 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub624 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub625 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub626 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub627 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub628 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub629 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub630 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub631 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub632 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub633 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub634 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub635 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub636 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' +dqsub637 subtract 1.00000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub638 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub639 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +-- critical few with even bottom digit... +dqsub640 subtract 0.499999999 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub641 subtract 0.5 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub642 subtract 0.500000001 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456787' Inexact Rounded + +rounding: down +dqsub650 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' +dqsub651 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub652 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub653 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub654 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub655 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub656 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub657 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub658 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub659 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub660 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub661 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub662 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub663 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub664 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub665 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub666 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' +dqsub667 subtract 1.00000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded +dqsub668 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded +dqsub669 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded + + +-- lots of leading zeros in intermediate result, and showing effects of +-- input rounding would have affected the following +rounding: half_up +dqsub670 subtract '1234567456789' '1234567456788.1' -> 0.9 +dqsub671 subtract '1234567456789' '1234567456788.9' -> 0.1 +dqsub672 subtract '1234567456789' '1234567456789.1' -> -0.1 +dqsub673 subtract '1234567456789' '1234567456789.5' -> -0.5 +dqsub674 subtract '1234567456789' '1234567456789.9' -> -0.9 + +rounding: half_even +dqsub680 subtract '1234567456789' '1234567456788.1' -> 0.9 +dqsub681 subtract '1234567456789' '1234567456788.9' -> 0.1 +dqsub682 subtract '1234567456789' '1234567456789.1' -> -0.1 +dqsub683 subtract '1234567456789' '1234567456789.5' -> -0.5 +dqsub684 subtract '1234567456789' '1234567456789.9' -> -0.9 + +dqsub685 subtract '1234567456788' '1234567456787.1' -> 0.9 +dqsub686 subtract '1234567456788' '1234567456787.9' -> 0.1 +dqsub687 subtract '1234567456788' '1234567456788.1' -> -0.1 +dqsub688 subtract '1234567456788' '1234567456788.5' -> -0.5 +dqsub689 subtract '1234567456788' '1234567456788.9' -> -0.9 + +rounding: down +dqsub690 subtract '1234567456789' '1234567456788.1' -> 0.9 +dqsub691 subtract '1234567456789' '1234567456788.9' -> 0.1 +dqsub692 subtract '1234567456789' '1234567456789.1' -> -0.1 +dqsub693 subtract '1234567456789' '1234567456789.5' -> -0.5 +dqsub694 subtract '1234567456789' '1234567456789.9' -> -0.9 + +-- Specials +dqsub780 subtract -Inf Inf -> -Infinity +dqsub781 subtract -Inf 1000 -> -Infinity +dqsub782 subtract -Inf 1 -> -Infinity +dqsub783 subtract -Inf -0 -> -Infinity +dqsub784 subtract -Inf -1 -> -Infinity +dqsub785 subtract -Inf -1000 -> -Infinity +dqsub787 subtract -1000 Inf -> -Infinity +dqsub788 subtract -Inf Inf -> -Infinity +dqsub789 subtract -1 Inf -> -Infinity +dqsub790 subtract 0 Inf -> -Infinity +dqsub791 subtract 1 Inf -> -Infinity +dqsub792 subtract 1000 Inf -> -Infinity + +dqsub800 subtract Inf Inf -> NaN Invalid_operation +dqsub801 subtract Inf 1000 -> Infinity +dqsub802 subtract Inf 1 -> Infinity +dqsub803 subtract Inf 0 -> Infinity +dqsub804 subtract Inf -0 -> Infinity +dqsub805 subtract Inf -1 -> Infinity +dqsub806 subtract Inf -1000 -> Infinity +dqsub807 subtract Inf -Inf -> Infinity +dqsub808 subtract -1000 -Inf -> Infinity +dqsub809 subtract -Inf -Inf -> NaN Invalid_operation +dqsub810 subtract -1 -Inf -> Infinity +dqsub811 subtract -0 -Inf -> Infinity +dqsub812 subtract 0 -Inf -> Infinity +dqsub813 subtract 1 -Inf -> Infinity +dqsub814 subtract 1000 -Inf -> Infinity +dqsub815 subtract Inf -Inf -> Infinity + +dqsub821 subtract NaN Inf -> NaN +dqsub822 subtract -NaN 1000 -> -NaN +dqsub823 subtract NaN 1 -> NaN +dqsub824 subtract NaN 0 -> NaN +dqsub825 subtract NaN -0 -> NaN +dqsub826 subtract NaN -1 -> NaN +dqsub827 subtract NaN -1000 -> NaN +dqsub828 subtract NaN -Inf -> NaN +dqsub829 subtract -NaN NaN -> -NaN +dqsub830 subtract -Inf NaN -> NaN +dqsub831 subtract -1000 NaN -> NaN +dqsub832 subtract -1 NaN -> NaN +dqsub833 subtract -0 NaN -> NaN +dqsub834 subtract 0 NaN -> NaN +dqsub835 subtract 1 NaN -> NaN +dqsub836 subtract 1000 -NaN -> -NaN +dqsub837 subtract Inf NaN -> NaN + +dqsub841 subtract sNaN Inf -> NaN Invalid_operation +dqsub842 subtract -sNaN 1000 -> -NaN Invalid_operation +dqsub843 subtract sNaN 1 -> NaN Invalid_operation +dqsub844 subtract sNaN 0 -> NaN Invalid_operation +dqsub845 subtract sNaN -0 -> NaN Invalid_operation +dqsub846 subtract sNaN -1 -> NaN Invalid_operation +dqsub847 subtract sNaN -1000 -> NaN Invalid_operation +dqsub848 subtract sNaN NaN -> NaN Invalid_operation +dqsub849 subtract sNaN sNaN -> NaN Invalid_operation +dqsub850 subtract NaN sNaN -> NaN Invalid_operation +dqsub851 subtract -Inf -sNaN -> -NaN Invalid_operation +dqsub852 subtract -1000 sNaN -> NaN Invalid_operation +dqsub853 subtract -1 sNaN -> NaN Invalid_operation +dqsub854 subtract -0 sNaN -> NaN Invalid_operation +dqsub855 subtract 0 sNaN -> NaN Invalid_operation +dqsub856 subtract 1 sNaN -> NaN Invalid_operation +dqsub857 subtract 1000 sNaN -> NaN Invalid_operation +dqsub858 subtract Inf sNaN -> NaN Invalid_operation +dqsub859 subtract NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqsub861 subtract NaN01 -Inf -> NaN1 +dqsub862 subtract -NaN02 -1000 -> -NaN2 +dqsub863 subtract NaN03 1000 -> NaN3 +dqsub864 subtract NaN04 Inf -> NaN4 +dqsub865 subtract NaN05 NaN61 -> NaN5 +dqsub866 subtract -Inf -NaN71 -> -NaN71 +dqsub867 subtract -1000 NaN81 -> NaN81 +dqsub868 subtract 1000 NaN91 -> NaN91 +dqsub869 subtract Inf NaN101 -> NaN101 +dqsub871 subtract sNaN011 -Inf -> NaN11 Invalid_operation +dqsub872 subtract sNaN012 -1000 -> NaN12 Invalid_operation +dqsub873 subtract -sNaN013 1000 -> -NaN13 Invalid_operation +dqsub874 subtract sNaN014 NaN171 -> NaN14 Invalid_operation +dqsub875 subtract sNaN015 sNaN181 -> NaN15 Invalid_operation +dqsub876 subtract NaN016 sNaN191 -> NaN191 Invalid_operation +dqsub877 subtract -Inf sNaN201 -> NaN201 Invalid_operation +dqsub878 subtract -1000 sNaN211 -> NaN211 Invalid_operation +dqsub879 subtract 1000 -sNaN221 -> -NaN221 Invalid_operation +dqsub880 subtract Inf sNaN231 -> NaN231 Invalid_operation +dqsub881 subtract NaN025 sNaN241 -> NaN241 Invalid_operation + +-- edge case spills +dqsub901 subtract 2.E-3 1.002 -> -1.000 +dqsub902 subtract 2.0E-3 1.002 -> -1.0000 +dqsub903 subtract 2.00E-3 1.0020 -> -1.00000 +dqsub904 subtract 2.000E-3 1.00200 -> -1.000000 +dqsub905 subtract 2.0000E-3 1.002000 -> -1.0000000 +dqsub906 subtract 2.00000E-3 1.0020000 -> -1.00000000 +dqsub907 subtract 2.000000E-3 1.00200000 -> -1.000000000 +dqsub908 subtract 2.0000000E-3 1.002000000 -> -1.0000000000 + +-- subnormals and overflows covered under Add + +-- Examples from SQL proposal (Krishna Kulkarni) +dqsub1125 subtract 130E-2 120E-2 -> 0.10 +dqsub1126 subtract 130E-2 12E-1 -> 0.10 +dqsub1127 subtract 130E-2 1E0 -> 0.30 +dqsub1128 subtract 1E2 1E4 -> -9.9E+3 + +-- Null tests +dqsub9990 subtract 10 # -> NaN Invalid_operation +dqsub9991 subtract # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqToIntegral.decTest b/Lib/test/decimaltestdata/dqToIntegral.decTest index eb12387eab7..3055de572d1 100644 --- a/Lib/test/decimaltestdata/dqToIntegral.decTest +++ b/Lib/test/decimaltestdata/dqToIntegral.decTest @@ -1,257 +1,257 @@ ------------------------------------------------------------------------- --- dqToIntegral.decTest -- round Quad to integral value -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests tests the extended specification 'round-to-integral --- value-exact' operations (from IEEE 854, later modified in 754r). --- All non-zero results are defined as being those from either copy or --- quantize, so those are assumed to have been tested extensively --- elsewhere; the tests here are for integrity, rounding mode, etc. --- Also, it is assumed the test harness will use these tests for both --- ToIntegralExact (which does set Inexact) and the fixed-name --- functions (which do not set Inexact). - --- Note that decNumber implements an earlier definition of toIntegral --- which never sets Inexact; the decTest operator for that is called --- 'tointegral' instead of 'tointegralx'. - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqintx001 tointegralx 0 -> 0 -dqintx002 tointegralx 0.0 -> 0 -dqintx003 tointegralx 0.1 -> 0 Inexact Rounded -dqintx004 tointegralx 0.2 -> 0 Inexact Rounded -dqintx005 tointegralx 0.3 -> 0 Inexact Rounded -dqintx006 tointegralx 0.4 -> 0 Inexact Rounded -dqintx007 tointegralx 0.5 -> 0 Inexact Rounded -dqintx008 tointegralx 0.6 -> 1 Inexact Rounded -dqintx009 tointegralx 0.7 -> 1 Inexact Rounded -dqintx010 tointegralx 0.8 -> 1 Inexact Rounded -dqintx011 tointegralx 0.9 -> 1 Inexact Rounded -dqintx012 tointegralx 1 -> 1 -dqintx013 tointegralx 1.0 -> 1 Rounded -dqintx014 tointegralx 1.1 -> 1 Inexact Rounded -dqintx015 tointegralx 1.2 -> 1 Inexact Rounded -dqintx016 tointegralx 1.3 -> 1 Inexact Rounded -dqintx017 tointegralx 1.4 -> 1 Inexact Rounded -dqintx018 tointegralx 1.5 -> 2 Inexact Rounded -dqintx019 tointegralx 1.6 -> 2 Inexact Rounded -dqintx020 tointegralx 1.7 -> 2 Inexact Rounded -dqintx021 tointegralx 1.8 -> 2 Inexact Rounded -dqintx022 tointegralx 1.9 -> 2 Inexact Rounded --- negatives -dqintx031 tointegralx -0 -> -0 -dqintx032 tointegralx -0.0 -> -0 -dqintx033 tointegralx -0.1 -> -0 Inexact Rounded -dqintx034 tointegralx -0.2 -> -0 Inexact Rounded -dqintx035 tointegralx -0.3 -> -0 Inexact Rounded -dqintx036 tointegralx -0.4 -> -0 Inexact Rounded -dqintx037 tointegralx -0.5 -> -0 Inexact Rounded -dqintx038 tointegralx -0.6 -> -1 Inexact Rounded -dqintx039 tointegralx -0.7 -> -1 Inexact Rounded -dqintx040 tointegralx -0.8 -> -1 Inexact Rounded -dqintx041 tointegralx -0.9 -> -1 Inexact Rounded -dqintx042 tointegralx -1 -> -1 -dqintx043 tointegralx -1.0 -> -1 Rounded -dqintx044 tointegralx -1.1 -> -1 Inexact Rounded -dqintx045 tointegralx -1.2 -> -1 Inexact Rounded -dqintx046 tointegralx -1.3 -> -1 Inexact Rounded -dqintx047 tointegralx -1.4 -> -1 Inexact Rounded -dqintx048 tointegralx -1.5 -> -2 Inexact Rounded -dqintx049 tointegralx -1.6 -> -2 Inexact Rounded -dqintx050 tointegralx -1.7 -> -2 Inexact Rounded -dqintx051 tointegralx -1.8 -> -2 Inexact Rounded -dqintx052 tointegralx -1.9 -> -2 Inexact Rounded --- next two would be NaN using quantize(x, 0) -dqintx053 tointegralx 10E+60 -> 1.0E+61 -dqintx054 tointegralx -10E+60 -> -1.0E+61 - --- numbers around precision -dqintx060 tointegralx '56267E-17' -> '0' Inexact Rounded -dqintx061 tointegralx '56267E-5' -> '1' Inexact Rounded -dqintx062 tointegralx '56267E-2' -> '563' Inexact Rounded -dqintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded -dqintx065 tointegralx '56267E-0' -> '56267' -dqintx066 tointegralx '56267E+0' -> '56267' -dqintx067 tointegralx '56267E+1' -> '5.6267E+5' -dqintx068 tointegralx '56267E+9' -> '5.6267E+13' -dqintx069 tointegralx '56267E+10' -> '5.6267E+14' -dqintx070 tointegralx '56267E+11' -> '5.6267E+15' -dqintx071 tointegralx '56267E+12' -> '5.6267E+16' -dqintx072 tointegralx '56267E+13' -> '5.6267E+17' -dqintx073 tointegralx '1.23E+96' -> '1.23E+96' -dqintx074 tointegralx '1.23E+6144' -> #47ffd300000000000000000000000000 Clamped - -dqintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded -dqintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded -dqintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded -dqintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded -dqintx085 tointegralx '-56267E-0' -> '-56267' -dqintx086 tointegralx '-56267E+0' -> '-56267' -dqintx087 tointegralx '-56267E+1' -> '-5.6267E+5' -dqintx088 tointegralx '-56267E+9' -> '-5.6267E+13' -dqintx089 tointegralx '-56267E+10' -> '-5.6267E+14' -dqintx090 tointegralx '-56267E+11' -> '-5.6267E+15' -dqintx091 tointegralx '-56267E+12' -> '-5.6267E+16' -dqintx092 tointegralx '-56267E+13' -> '-5.6267E+17' -dqintx093 tointegralx '-1.23E+96' -> '-1.23E+96' -dqintx094 tointegralx '-1.23E+6144' -> #c7ffd300000000000000000000000000 Clamped - --- subnormal inputs -dqintx100 tointegralx 1E-299 -> 0 Inexact Rounded -dqintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded -dqintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded -dqintx103 tointegralx 0E-299 -> 0 - --- specials and zeros -dqintx120 tointegralx 'Inf' -> Infinity -dqintx121 tointegralx '-Inf' -> -Infinity -dqintx122 tointegralx NaN -> NaN -dqintx123 tointegralx sNaN -> NaN Invalid_operation -dqintx124 tointegralx 0 -> 0 -dqintx125 tointegralx -0 -> -0 -dqintx126 tointegralx 0.000 -> 0 -dqintx127 tointegralx 0.00 -> 0 -dqintx128 tointegralx 0.0 -> 0 -dqintx129 tointegralx 0 -> 0 -dqintx130 tointegralx 0E-3 -> 0 -dqintx131 tointegralx 0E-2 -> 0 -dqintx132 tointegralx 0E-1 -> 0 -dqintx133 tointegralx 0E-0 -> 0 -dqintx134 tointegralx 0E+1 -> 0E+1 -dqintx135 tointegralx 0E+2 -> 0E+2 -dqintx136 tointegralx 0E+3 -> 0E+3 -dqintx137 tointegralx 0E+4 -> 0E+4 -dqintx138 tointegralx 0E+5 -> 0E+5 -dqintx139 tointegralx -0.000 -> -0 -dqintx140 tointegralx -0.00 -> -0 -dqintx141 tointegralx -0.0 -> -0 -dqintx142 tointegralx -0 -> -0 -dqintx143 tointegralx -0E-3 -> -0 -dqintx144 tointegralx -0E-2 -> -0 -dqintx145 tointegralx -0E-1 -> -0 -dqintx146 tointegralx -0E-0 -> -0 -dqintx147 tointegralx -0E+1 -> -0E+1 -dqintx148 tointegralx -0E+2 -> -0E+2 -dqintx149 tointegralx -0E+3 -> -0E+3 -dqintx150 tointegralx -0E+4 -> -0E+4 -dqintx151 tointegralx -0E+5 -> -0E+5 --- propagating NaNs -dqintx152 tointegralx NaN808 -> NaN808 -dqintx153 tointegralx sNaN080 -> NaN80 Invalid_operation -dqintx154 tointegralx -NaN808 -> -NaN808 -dqintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation -dqintx156 tointegralx -NaN -> -NaN -dqintx157 tointegralx -sNaN -> -NaN Invalid_operation - --- examples -rounding: half_up -dqintx200 tointegralx 2.1 -> 2 Inexact Rounded -dqintx201 tointegralx 100 -> 100 -dqintx202 tointegralx 100.0 -> 100 Rounded -dqintx203 tointegralx 101.5 -> 102 Inexact Rounded -dqintx204 tointegralx -101.5 -> -102 Inexact Rounded -dqintx205 tointegralx 10E+5 -> 1.0E+6 -dqintx206 tointegralx 7.89E+77 -> 7.89E+77 -dqintx207 tointegralx -Inf -> -Infinity - - --- all rounding modes -rounding: half_even -dqintx210 tointegralx 55.5 -> 56 Inexact Rounded -dqintx211 tointegralx 56.5 -> 56 Inexact Rounded -dqintx212 tointegralx 57.5 -> 58 Inexact Rounded -dqintx213 tointegralx -55.5 -> -56 Inexact Rounded -dqintx214 tointegralx -56.5 -> -56 Inexact Rounded -dqintx215 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_up - -dqintx220 tointegralx 55.5 -> 56 Inexact Rounded -dqintx221 tointegralx 56.5 -> 57 Inexact Rounded -dqintx222 tointegralx 57.5 -> 58 Inexact Rounded -dqintx223 tointegralx -55.5 -> -56 Inexact Rounded -dqintx224 tointegralx -56.5 -> -57 Inexact Rounded -dqintx225 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_down - -dqintx230 tointegralx 55.5 -> 55 Inexact Rounded -dqintx231 tointegralx 56.5 -> 56 Inexact Rounded -dqintx232 tointegralx 57.5 -> 57 Inexact Rounded -dqintx233 tointegralx -55.5 -> -55 Inexact Rounded -dqintx234 tointegralx -56.5 -> -56 Inexact Rounded -dqintx235 tointegralx -57.5 -> -57 Inexact Rounded - -rounding: up - -dqintx240 tointegralx 55.3 -> 56 Inexact Rounded -dqintx241 tointegralx 56.3 -> 57 Inexact Rounded -dqintx242 tointegralx 57.3 -> 58 Inexact Rounded -dqintx243 tointegralx -55.3 -> -56 Inexact Rounded -dqintx244 tointegralx -56.3 -> -57 Inexact Rounded -dqintx245 tointegralx -57.3 -> -58 Inexact Rounded - -rounding: down - -dqintx250 tointegralx 55.7 -> 55 Inexact Rounded -dqintx251 tointegralx 56.7 -> 56 Inexact Rounded -dqintx252 tointegralx 57.7 -> 57 Inexact Rounded -dqintx253 tointegralx -55.7 -> -55 Inexact Rounded -dqintx254 tointegralx -56.7 -> -56 Inexact Rounded -dqintx255 tointegralx -57.7 -> -57 Inexact Rounded - -rounding: ceiling - -dqintx260 tointegralx 55.3 -> 56 Inexact Rounded -dqintx261 tointegralx 56.3 -> 57 Inexact Rounded -dqintx262 tointegralx 57.3 -> 58 Inexact Rounded -dqintx263 tointegralx -55.3 -> -55 Inexact Rounded -dqintx264 tointegralx -56.3 -> -56 Inexact Rounded -dqintx265 tointegralx -57.3 -> -57 Inexact Rounded - -rounding: floor - -dqintx270 tointegralx 55.7 -> 55 Inexact Rounded -dqintx271 tointegralx 56.7 -> 56 Inexact Rounded -dqintx272 tointegralx 57.7 -> 57 Inexact Rounded -dqintx273 tointegralx -55.7 -> -56 Inexact Rounded -dqintx274 tointegralx -56.7 -> -57 Inexact Rounded -dqintx275 tointegralx -57.7 -> -58 Inexact Rounded - --- Int and uInt32 edge values for testing conversions -dqintx300 tointegralx -2147483646 -> -2147483646 -dqintx301 tointegralx -2147483647 -> -2147483647 -dqintx302 tointegralx -2147483648 -> -2147483648 -dqintx303 tointegralx -2147483649 -> -2147483649 -dqintx304 tointegralx 2147483646 -> 2147483646 -dqintx305 tointegralx 2147483647 -> 2147483647 -dqintx306 tointegralx 2147483648 -> 2147483648 -dqintx307 tointegralx 2147483649 -> 2147483649 -dqintx308 tointegralx 4294967294 -> 4294967294 -dqintx309 tointegralx 4294967295 -> 4294967295 -dqintx310 tointegralx 4294967296 -> 4294967296 -dqintx311 tointegralx 4294967297 -> 4294967297 - +------------------------------------------------------------------------ +-- dqToIntegral.decTest -- round Quad to integral value -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests tests the extended specification 'round-to-integral +-- value-exact' operations (from IEEE 854, later modified in 754r). +-- All non-zero results are defined as being those from either copy or +-- quantize, so those are assumed to have been tested extensively +-- elsewhere; the tests here are for integrity, rounding mode, etc. +-- Also, it is assumed the test harness will use these tests for both +-- ToIntegralExact (which does set Inexact) and the fixed-name +-- functions (which do not set Inexact). + +-- Note that decNumber implements an earlier definition of toIntegral +-- which never sets Inexact; the decTest operator for that is called +-- 'tointegral' instead of 'tointegralx'. + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqintx001 tointegralx 0 -> 0 +dqintx002 tointegralx 0.0 -> 0 +dqintx003 tointegralx 0.1 -> 0 Inexact Rounded +dqintx004 tointegralx 0.2 -> 0 Inexact Rounded +dqintx005 tointegralx 0.3 -> 0 Inexact Rounded +dqintx006 tointegralx 0.4 -> 0 Inexact Rounded +dqintx007 tointegralx 0.5 -> 0 Inexact Rounded +dqintx008 tointegralx 0.6 -> 1 Inexact Rounded +dqintx009 tointegralx 0.7 -> 1 Inexact Rounded +dqintx010 tointegralx 0.8 -> 1 Inexact Rounded +dqintx011 tointegralx 0.9 -> 1 Inexact Rounded +dqintx012 tointegralx 1 -> 1 +dqintx013 tointegralx 1.0 -> 1 Rounded +dqintx014 tointegralx 1.1 -> 1 Inexact Rounded +dqintx015 tointegralx 1.2 -> 1 Inexact Rounded +dqintx016 tointegralx 1.3 -> 1 Inexact Rounded +dqintx017 tointegralx 1.4 -> 1 Inexact Rounded +dqintx018 tointegralx 1.5 -> 2 Inexact Rounded +dqintx019 tointegralx 1.6 -> 2 Inexact Rounded +dqintx020 tointegralx 1.7 -> 2 Inexact Rounded +dqintx021 tointegralx 1.8 -> 2 Inexact Rounded +dqintx022 tointegralx 1.9 -> 2 Inexact Rounded +-- negatives +dqintx031 tointegralx -0 -> -0 +dqintx032 tointegralx -0.0 -> -0 +dqintx033 tointegralx -0.1 -> -0 Inexact Rounded +dqintx034 tointegralx -0.2 -> -0 Inexact Rounded +dqintx035 tointegralx -0.3 -> -0 Inexact Rounded +dqintx036 tointegralx -0.4 -> -0 Inexact Rounded +dqintx037 tointegralx -0.5 -> -0 Inexact Rounded +dqintx038 tointegralx -0.6 -> -1 Inexact Rounded +dqintx039 tointegralx -0.7 -> -1 Inexact Rounded +dqintx040 tointegralx -0.8 -> -1 Inexact Rounded +dqintx041 tointegralx -0.9 -> -1 Inexact Rounded +dqintx042 tointegralx -1 -> -1 +dqintx043 tointegralx -1.0 -> -1 Rounded +dqintx044 tointegralx -1.1 -> -1 Inexact Rounded +dqintx045 tointegralx -1.2 -> -1 Inexact Rounded +dqintx046 tointegralx -1.3 -> -1 Inexact Rounded +dqintx047 tointegralx -1.4 -> -1 Inexact Rounded +dqintx048 tointegralx -1.5 -> -2 Inexact Rounded +dqintx049 tointegralx -1.6 -> -2 Inexact Rounded +dqintx050 tointegralx -1.7 -> -2 Inexact Rounded +dqintx051 tointegralx -1.8 -> -2 Inexact Rounded +dqintx052 tointegralx -1.9 -> -2 Inexact Rounded +-- next two would be NaN using quantize(x, 0) +dqintx053 tointegralx 10E+60 -> 1.0E+61 +dqintx054 tointegralx -10E+60 -> -1.0E+61 + +-- numbers around precision +dqintx060 tointegralx '56267E-17' -> '0' Inexact Rounded +dqintx061 tointegralx '56267E-5' -> '1' Inexact Rounded +dqintx062 tointegralx '56267E-2' -> '563' Inexact Rounded +dqintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded +dqintx065 tointegralx '56267E-0' -> '56267' +dqintx066 tointegralx '56267E+0' -> '56267' +dqintx067 tointegralx '56267E+1' -> '5.6267E+5' +dqintx068 tointegralx '56267E+9' -> '5.6267E+13' +dqintx069 tointegralx '56267E+10' -> '5.6267E+14' +dqintx070 tointegralx '56267E+11' -> '5.6267E+15' +dqintx071 tointegralx '56267E+12' -> '5.6267E+16' +dqintx072 tointegralx '56267E+13' -> '5.6267E+17' +dqintx073 tointegralx '1.23E+96' -> '1.23E+96' +dqintx074 tointegralx '1.23E+6144' -> #47ffd300000000000000000000000000 Clamped + +dqintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded +dqintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded +dqintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded +dqintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded +dqintx085 tointegralx '-56267E-0' -> '-56267' +dqintx086 tointegralx '-56267E+0' -> '-56267' +dqintx087 tointegralx '-56267E+1' -> '-5.6267E+5' +dqintx088 tointegralx '-56267E+9' -> '-5.6267E+13' +dqintx089 tointegralx '-56267E+10' -> '-5.6267E+14' +dqintx090 tointegralx '-56267E+11' -> '-5.6267E+15' +dqintx091 tointegralx '-56267E+12' -> '-5.6267E+16' +dqintx092 tointegralx '-56267E+13' -> '-5.6267E+17' +dqintx093 tointegralx '-1.23E+96' -> '-1.23E+96' +dqintx094 tointegralx '-1.23E+6144' -> #c7ffd300000000000000000000000000 Clamped + +-- subnormal inputs +dqintx100 tointegralx 1E-299 -> 0 Inexact Rounded +dqintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded +dqintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded +dqintx103 tointegralx 0E-299 -> 0 + +-- specials and zeros +dqintx120 tointegralx 'Inf' -> Infinity +dqintx121 tointegralx '-Inf' -> -Infinity +dqintx122 tointegralx NaN -> NaN +dqintx123 tointegralx sNaN -> NaN Invalid_operation +dqintx124 tointegralx 0 -> 0 +dqintx125 tointegralx -0 -> -0 +dqintx126 tointegralx 0.000 -> 0 +dqintx127 tointegralx 0.00 -> 0 +dqintx128 tointegralx 0.0 -> 0 +dqintx129 tointegralx 0 -> 0 +dqintx130 tointegralx 0E-3 -> 0 +dqintx131 tointegralx 0E-2 -> 0 +dqintx132 tointegralx 0E-1 -> 0 +dqintx133 tointegralx 0E-0 -> 0 +dqintx134 tointegralx 0E+1 -> 0E+1 +dqintx135 tointegralx 0E+2 -> 0E+2 +dqintx136 tointegralx 0E+3 -> 0E+3 +dqintx137 tointegralx 0E+4 -> 0E+4 +dqintx138 tointegralx 0E+5 -> 0E+5 +dqintx139 tointegralx -0.000 -> -0 +dqintx140 tointegralx -0.00 -> -0 +dqintx141 tointegralx -0.0 -> -0 +dqintx142 tointegralx -0 -> -0 +dqintx143 tointegralx -0E-3 -> -0 +dqintx144 tointegralx -0E-2 -> -0 +dqintx145 tointegralx -0E-1 -> -0 +dqintx146 tointegralx -0E-0 -> -0 +dqintx147 tointegralx -0E+1 -> -0E+1 +dqintx148 tointegralx -0E+2 -> -0E+2 +dqintx149 tointegralx -0E+3 -> -0E+3 +dqintx150 tointegralx -0E+4 -> -0E+4 +dqintx151 tointegralx -0E+5 -> -0E+5 +-- propagating NaNs +dqintx152 tointegralx NaN808 -> NaN808 +dqintx153 tointegralx sNaN080 -> NaN80 Invalid_operation +dqintx154 tointegralx -NaN808 -> -NaN808 +dqintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation +dqintx156 tointegralx -NaN -> -NaN +dqintx157 tointegralx -sNaN -> -NaN Invalid_operation + +-- examples +rounding: half_up +dqintx200 tointegralx 2.1 -> 2 Inexact Rounded +dqintx201 tointegralx 100 -> 100 +dqintx202 tointegralx 100.0 -> 100 Rounded +dqintx203 tointegralx 101.5 -> 102 Inexact Rounded +dqintx204 tointegralx -101.5 -> -102 Inexact Rounded +dqintx205 tointegralx 10E+5 -> 1.0E+6 +dqintx206 tointegralx 7.89E+77 -> 7.89E+77 +dqintx207 tointegralx -Inf -> -Infinity + + +-- all rounding modes +rounding: half_even +dqintx210 tointegralx 55.5 -> 56 Inexact Rounded +dqintx211 tointegralx 56.5 -> 56 Inexact Rounded +dqintx212 tointegralx 57.5 -> 58 Inexact Rounded +dqintx213 tointegralx -55.5 -> -56 Inexact Rounded +dqintx214 tointegralx -56.5 -> -56 Inexact Rounded +dqintx215 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_up + +dqintx220 tointegralx 55.5 -> 56 Inexact Rounded +dqintx221 tointegralx 56.5 -> 57 Inexact Rounded +dqintx222 tointegralx 57.5 -> 58 Inexact Rounded +dqintx223 tointegralx -55.5 -> -56 Inexact Rounded +dqintx224 tointegralx -56.5 -> -57 Inexact Rounded +dqintx225 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_down + +dqintx230 tointegralx 55.5 -> 55 Inexact Rounded +dqintx231 tointegralx 56.5 -> 56 Inexact Rounded +dqintx232 tointegralx 57.5 -> 57 Inexact Rounded +dqintx233 tointegralx -55.5 -> -55 Inexact Rounded +dqintx234 tointegralx -56.5 -> -56 Inexact Rounded +dqintx235 tointegralx -57.5 -> -57 Inexact Rounded + +rounding: up + +dqintx240 tointegralx 55.3 -> 56 Inexact Rounded +dqintx241 tointegralx 56.3 -> 57 Inexact Rounded +dqintx242 tointegralx 57.3 -> 58 Inexact Rounded +dqintx243 tointegralx -55.3 -> -56 Inexact Rounded +dqintx244 tointegralx -56.3 -> -57 Inexact Rounded +dqintx245 tointegralx -57.3 -> -58 Inexact Rounded + +rounding: down + +dqintx250 tointegralx 55.7 -> 55 Inexact Rounded +dqintx251 tointegralx 56.7 -> 56 Inexact Rounded +dqintx252 tointegralx 57.7 -> 57 Inexact Rounded +dqintx253 tointegralx -55.7 -> -55 Inexact Rounded +dqintx254 tointegralx -56.7 -> -56 Inexact Rounded +dqintx255 tointegralx -57.7 -> -57 Inexact Rounded + +rounding: ceiling + +dqintx260 tointegralx 55.3 -> 56 Inexact Rounded +dqintx261 tointegralx 56.3 -> 57 Inexact Rounded +dqintx262 tointegralx 57.3 -> 58 Inexact Rounded +dqintx263 tointegralx -55.3 -> -55 Inexact Rounded +dqintx264 tointegralx -56.3 -> -56 Inexact Rounded +dqintx265 tointegralx -57.3 -> -57 Inexact Rounded + +rounding: floor + +dqintx270 tointegralx 55.7 -> 55 Inexact Rounded +dqintx271 tointegralx 56.7 -> 56 Inexact Rounded +dqintx272 tointegralx 57.7 -> 57 Inexact Rounded +dqintx273 tointegralx -55.7 -> -56 Inexact Rounded +dqintx274 tointegralx -56.7 -> -57 Inexact Rounded +dqintx275 tointegralx -57.7 -> -58 Inexact Rounded + +-- Int and uInt32 edge values for testing conversions +dqintx300 tointegralx -2147483646 -> -2147483646 +dqintx301 tointegralx -2147483647 -> -2147483647 +dqintx302 tointegralx -2147483648 -> -2147483648 +dqintx303 tointegralx -2147483649 -> -2147483649 +dqintx304 tointegralx 2147483646 -> 2147483646 +dqintx305 tointegralx 2147483647 -> 2147483647 +dqintx306 tointegralx 2147483648 -> 2147483648 +dqintx307 tointegralx 2147483649 -> 2147483649 +dqintx308 tointegralx 4294967294 -> 4294967294 +dqintx309 tointegralx 4294967295 -> 4294967295 +dqintx310 tointegralx 4294967296 -> 4294967296 +dqintx311 tointegralx 4294967297 -> 4294967297 + diff --git a/Lib/test/decimaltestdata/dqXor.decTest b/Lib/test/decimaltestdata/dqXor.decTest index fbb32e441bc..2216e9ebf8e 100644 --- a/Lib/test/decimaltestdata/dqXor.decTest +++ b/Lib/test/decimaltestdata/dqXor.decTest @@ -1,410 +1,410 @@ ------------------------------------------------------------------------- --- dqXor.decTest -- digitwise logical XOR for decQuads -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check (truth table) -dqxor001 xor 0 0 -> 0 -dqxor002 xor 0 1 -> 1 -dqxor003 xor 1 0 -> 1 -dqxor004 xor 1 1 -> 0 -dqxor005 xor 1100 1010 -> 110 --- and at msd and msd-1 -dqxor006 xor 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqxor007 xor 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqxor008 xor 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqxor009 xor 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 0 -dqxor010 xor 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqxor011 xor 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 -dqxor012 xor 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 100000000000000000000000000000000 -dqxor013 xor 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 0 - --- Various lengths --- 1234567890123456789012345678901234 -dqxor601 xor 0111111111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000000000 -dqxor602 xor 1011111111111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000000000 -dqxor603 xor 1101111111111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000000000 -dqxor604 xor 1110111111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000000 -dqxor605 xor 1111011111111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000000 -dqxor606 xor 1111101111111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000000 -dqxor607 xor 1111110111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000 -dqxor608 xor 1111111011111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000 -dqxor609 xor 1111111101111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000 -dqxor610 xor 1111111110111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000 -dqxor611 xor 1111111111011111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000 -dqxor612 xor 1111111111101111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000 -dqxor613 xor 1111111111110111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000 -dqxor614 xor 1111111111111011111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000 -dqxor615 xor 1111111111111101111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000 -dqxor616 xor 1111111111111110111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000 -dqxor617 xor 1111111111111111011111111111111111 1111111111111111111111111111111111 -> 100000000000000000 -dqxor618 xor 1111111111111111101111111111111111 1111111111111111111111111111111111 -> 10000000000000000 -dqxor619 xor 1111111111111111110111111111111111 1111111111111111111111111111111111 -> 1000000000000000 -dqxor620 xor 1111111111111111111011111111111111 1111111111111111111111111111111111 -> 100000000000000 -dqxor621 xor 1111111111111111111101111111111111 1111111111111111111111111111111111 -> 10000000000000 -dqxor622 xor 1111111111111111111110111111111111 1111111111111111111111111111111111 -> 1000000000000 -dqxor623 xor 1111111111111111111111011111111111 1111111111111111111111111111111111 -> 100000000000 -dqxor624 xor 1111111111111111111111101111111111 1111111111111111111111111111111111 -> 10000000000 -dqxor625 xor 1111111111111111111111110111111111 1111111111111111111111111111111111 -> 1000000000 -dqxor626 xor 1111111111111111111111111011111111 1111111111111111111111111111111111 -> 100000000 -dqxor627 xor 1111111111111111111111111101111111 1111111111111111111111111111111111 -> 10000000 -dqxor628 xor 1111111111111111111111111110111111 1111111111111111111111111111111111 -> 1000000 -dqxor629 xor 1111111111111111111111111111011111 1111111111111111111111111111111111 -> 100000 -dqxor630 xor 1111111111111111111111111111101111 1111111111111111111111111111111111 -> 10000 -dqxor631 xor 1111111111111111111111111111110111 1111111111111111111111111111111111 -> 1000 -dqxor632 xor 1111111111111111111111111111111011 1111111111111111111111111111111111 -> 100 -dqxor633 xor 1111111111111111111111111111111101 1111111111111111111111111111111111 -> 10 -dqxor634 xor 1111111111111111111111111111111110 1111111111111111111111111111111111 -> 1 - -dqxor641 xor 1111111111111111111111111111111111 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 -dqxor642 xor 1111111111111111111111111111111111 1011111111111111111111111111111111 -> 100000000000000000000000000000000 -dqxor643 xor 1111111111111111111111111111111111 1101111111111111111111111111111111 -> 10000000000000000000000000000000 -dqxor644 xor 1111111111111111111111111111111111 1110111111111111111111111111111111 -> 1000000000000000000000000000000 -dqxor645 xor 1111111111111111111111111111111111 1111011111111111111111111111111111 -> 100000000000000000000000000000 -dqxor646 xor 1111111111111111111111111111111111 1111101111111111111111111111111111 -> 10000000000000000000000000000 -dqxor647 xor 1111111111111111111111111111111111 1111110111111111111111111111111111 -> 1000000000000000000000000000 -dqxor648 xor 1111111111111111111111111111111111 1111111011111111111111111111111111 -> 100000000000000000000000000 -dqxor649 xor 1111111111111111111111111111111111 1111111101111111111111111111111111 -> 10000000000000000000000000 -dqxor650 xor 1111111111111111111111111111111111 1111111110111111111111111111111111 -> 1000000000000000000000000 -dqxor651 xor 1111111111111111111111111111111111 1111111111011111111111111111111111 -> 100000000000000000000000 -dqxor652 xor 1111111111111111111111111111111111 1111111111101111111111111111111111 -> 10000000000000000000000 -dqxor653 xor 1111111111111111111111111111111111 1111111111110111111111111111111111 -> 1000000000000000000000 -dqxor654 xor 1111111111111111111111111111111111 1111111111111011111111111111111111 -> 100000000000000000000 -dqxor655 xor 1111111111111111111111111111111111 1111111111111101111111111111111111 -> 10000000000000000000 -dqxor656 xor 1111111111111111111111111111111111 1111111111111110111111111111111111 -> 1000000000000000000 -dqxor657 xor 1111111111111111111111111111111111 1111111111111111011111111111111111 -> 100000000000000000 -dqxor658 xor 1111111111111111111111111111111111 1111111111111111101111111111111111 -> 10000000000000000 -dqxor659 xor 1111111111111111111111111111111111 1111111111111111110111111111111111 -> 1000000000000000 -dqxor660 xor 1111111111111111111111111111111111 1111111111111111111011111111111111 -> 100000000000000 -dqxor661 xor 1111111111111111111111111111111111 1111111111111111111101111111111111 -> 10000000000000 -dqxor662 xor 1111111111111111111111111111111111 1111111111111111111110111111111111 -> 1000000000000 -dqxor663 xor 1111111111111111111111111111111111 1111111111111111111111011111111111 -> 100000000000 -dqxor664 xor 1111111111111111111111111111111111 1111111111111111111111101111111111 -> 10000000000 -dqxor665 xor 1111111111111111111111111111111111 1111111111111111111111110111111111 -> 1000000000 -dqxor666 xor 1111111111111111111111111111111111 1111111111111111111111111011111111 -> 100000000 -dqxor667 xor 1111111111111111111111111111111111 1111111111111111111111111101111111 -> 10000000 -dqxor668 xor 1111111111111111111111111111111111 1111111111111111111111111110111111 -> 1000000 -dqxor669 xor 1111111111111111111111111111111111 1111111111111111111111111111011111 -> 100000 -dqxor670 xor 1111111111111111111111111111111111 1111111111111111111111111111101111 -> 10000 -dqxor671 xor 1111111111111111111111111111111111 1111111111111111111111111111110111 -> 1000 -dqxor672 xor 1111111111111111111111111111111111 1111111111111111111111111111111011 -> 100 -dqxor673 xor 1111111111111111111111111111111111 1111111111111111111111111111111101 -> 10 -dqxor674 xor 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1 -dqxor675 xor 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1000000000000000000000000000000001 -dqxor676 xor 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1 - - -dqxor021 xor 1111111110000000 1111111110000000 -> 0 -dqxor022 xor 111111110000000 111111110000000 -> 0 -dqxor023 xor 11111110000000 11111110000000 -> 0 -dqxor024 xor 1111110000000 1111110000000 -> 0 -dqxor025 xor 111110000000 111110000000 -> 0 -dqxor026 xor 11110000000 11110000000 -> 0 -dqxor027 xor 1110000000 1110000000 -> 0 -dqxor028 xor 110000000 110000000 -> 0 -dqxor029 xor 10000000 10000000 -> 0 -dqxor030 xor 1000000 1000000 -> 0 -dqxor031 xor 100000 100000 -> 0 -dqxor032 xor 10000 10000 -> 0 -dqxor033 xor 1000 1000 -> 0 -dqxor034 xor 100 100 -> 0 -dqxor035 xor 10 10 -> 0 -dqxor036 xor 1 1 -> 0 - -dqxor040 xor 111111111 111111111111 -> 111000000000 -dqxor041 xor 11111111 111111111111 -> 111100000000 -dqxor042 xor 11111111 111111111 -> 100000000 -dqxor043 xor 1111111 100000010 -> 101111101 -dqxor044 xor 111111 100000100 -> 100111011 -dqxor045 xor 11111 100001000 -> 100010111 -dqxor046 xor 1111 100010000 -> 100011111 -dqxor047 xor 111 100100000 -> 100100111 -dqxor048 xor 11 101000000 -> 101000011 -dqxor049 xor 1 110000000 -> 110000001 - -dqxor050 xor 1111111111 1 -> 1111111110 -dqxor051 xor 111111111 1 -> 111111110 -dqxor052 xor 11111111 1 -> 11111110 -dqxor053 xor 1111111 1 -> 1111110 -dqxor054 xor 111111 1 -> 111110 -dqxor055 xor 11111 1 -> 11110 -dqxor056 xor 1111 1 -> 1110 -dqxor057 xor 111 1 -> 110 -dqxor058 xor 11 1 -> 10 -dqxor059 xor 1 1 -> 0 - -dqxor060 xor 1111111111 0 -> 1111111111 -dqxor061 xor 111111111 0 -> 111111111 -dqxor062 xor 11111111 0 -> 11111111 -dqxor063 xor 1111111 0 -> 1111111 -dqxor064 xor 111111 0 -> 111111 -dqxor065 xor 11111 0 -> 11111 -dqxor066 xor 1111 0 -> 1111 -dqxor067 xor 111 0 -> 111 -dqxor068 xor 11 0 -> 11 -dqxor069 xor 1 0 -> 1 - -dqxor070 xor 1 1111111111 -> 1111111110 -dqxor071 xor 1 111111111 -> 111111110 -dqxor072 xor 1 11111111 -> 11111110 -dqxor073 xor 1 1111111 -> 1111110 -dqxor074 xor 1 111111 -> 111110 -dqxor075 xor 1 11111 -> 11110 -dqxor076 xor 1 1111 -> 1110 -dqxor077 xor 1 111 -> 110 -dqxor078 xor 1 11 -> 10 -dqxor079 xor 1 1 -> 0 - -dqxor080 xor 0 1111111111 -> 1111111111 -dqxor081 xor 0 111111111 -> 111111111 -dqxor082 xor 0 11111111 -> 11111111 -dqxor083 xor 0 1111111 -> 1111111 -dqxor084 xor 0 111111 -> 111111 -dqxor085 xor 0 11111 -> 11111 -dqxor086 xor 0 1111 -> 1111 -dqxor087 xor 0 111 -> 111 -dqxor088 xor 0 11 -> 11 -dqxor089 xor 0 1 -> 1 - -dqxor090 xor 011111111 111101111 -> 100010000 -dqxor091 xor 101111111 111101111 -> 10010000 -dqxor092 xor 110111111 111101111 -> 1010000 -dqxor093 xor 111011111 111101111 -> 110000 -dqxor094 xor 111101111 111101111 -> 0 -dqxor095 xor 111110111 111101111 -> 11000 -dqxor096 xor 111111011 111101111 -> 10100 -dqxor097 xor 111111101 111101111 -> 10010 -dqxor098 xor 111111110 111101111 -> 10001 - -dqxor100 xor 111101111 011111111 -> 100010000 -dqxor101 xor 111101111 101111111 -> 10010000 -dqxor102 xor 111101111 110111111 -> 1010000 -dqxor103 xor 111101111 111011111 -> 110000 -dqxor104 xor 111101111 111101111 -> 0 -dqxor105 xor 111101111 111110111 -> 11000 -dqxor106 xor 111101111 111111011 -> 10100 -dqxor107 xor 111101111 111111101 -> 10010 -dqxor108 xor 111101111 111111110 -> 10001 - --- non-0/1 should not be accepted, nor should signs -dqxor220 xor 111111112 111111111 -> NaN Invalid_operation -dqxor221 xor 333333333 333333333 -> NaN Invalid_operation -dqxor222 xor 555555555 555555555 -> NaN Invalid_operation -dqxor223 xor 777777777 777777777 -> NaN Invalid_operation -dqxor224 xor 999999999 999999999 -> NaN Invalid_operation -dqxor225 xor 222222222 999999999 -> NaN Invalid_operation -dqxor226 xor 444444444 999999999 -> NaN Invalid_operation -dqxor227 xor 666666666 999999999 -> NaN Invalid_operation -dqxor228 xor 888888888 999999999 -> NaN Invalid_operation -dqxor229 xor 999999999 222222222 -> NaN Invalid_operation -dqxor230 xor 999999999 444444444 -> NaN Invalid_operation -dqxor231 xor 999999999 666666666 -> NaN Invalid_operation -dqxor232 xor 999999999 888888888 -> NaN Invalid_operation --- a few randoms -dqxor240 xor 567468689 -934981942 -> NaN Invalid_operation -dqxor241 xor 567367689 934981942 -> NaN Invalid_operation -dqxor242 xor -631917772 -706014634 -> NaN Invalid_operation -dqxor243 xor -756253257 138579234 -> NaN Invalid_operation -dqxor244 xor 835590149 567435400 -> NaN Invalid_operation --- test MSD -dqxor250 xor 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqxor251 xor 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqxor252 xor 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqxor253 xor 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqxor254 xor 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqxor255 xor 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqxor256 xor 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqxor257 xor 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqxor258 xor 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqxor259 xor 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqxor260 xor 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqxor261 xor 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation -dqxor262 xor 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqxor263 xor 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqxor264 xor 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqxor265 xor 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation --- test MSD-1 -dqxor270 xor 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation -dqxor271 xor 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation -dqxor272 xor 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation -dqxor273 xor 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation -dqxor274 xor 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation -dqxor275 xor 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation -dqxor276 xor 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation -dqxor277 xor 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation --- test LSD -dqxor280 xor 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation -dqxor281 xor 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation -dqxor282 xor 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation -dqxor283 xor 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation -dqxor284 xor 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation -dqxor285 xor 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation -dqxor286 xor 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation -dqxor287 xor 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation --- test Middie -dqxor288 xor 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation -dqxor289 xor 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation -dqxor290 xor 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation -dqxor291 xor 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation -dqxor292 xor 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation -dqxor293 xor 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation -dqxor294 xor 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation -dqxor295 xor 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation --- signs -dqxor296 xor -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation -dqxor297 xor -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation -dqxor298 xor 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation -dqxor299 xor 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 1000001001001001001001000010000100 - --- Nmax, Nmin, Ntiny-like -dqxor331 xor 2 9.99999999E+999 -> NaN Invalid_operation -dqxor332 xor 3 1E-999 -> NaN Invalid_operation -dqxor333 xor 4 1.00000000E-2821 -> NaN Invalid_operation -dqxor334 xor 5 1E-900 -> NaN Invalid_operation -dqxor335 xor 6 -1E-900 -> NaN Invalid_operation -dqxor336 xor 7 -1.00000000E-999 -> NaN Invalid_operation -dqxor337 xor 8 -1E-999 -> NaN Invalid_operation -dqxor338 xor 9 -9.99999999E+999 -> NaN Invalid_operation -dqxor341 xor 9.99999999E+999 -18 -> NaN Invalid_operation -dqxor342 xor 1E-999 01 -> NaN Invalid_operation -dqxor343 xor 1.00000000E-999 -18 -> NaN Invalid_operation -dqxor344 xor 1E-908 18 -> NaN Invalid_operation -dqxor345 xor -1E-907 -10 -> NaN Invalid_operation -dqxor346 xor -1.00000000E-999 18 -> NaN Invalid_operation -dqxor347 xor -1E-999 10 -> NaN Invalid_operation -dqxor348 xor -9.99999999E+2991 -18 -> NaN Invalid_operation - --- A few other non-integers -dqxor361 xor 1.0 1 -> NaN Invalid_operation -dqxor362 xor 1E+1 1 -> NaN Invalid_operation -dqxor363 xor 0.0 1 -> NaN Invalid_operation -dqxor364 xor 0E+1 1 -> NaN Invalid_operation -dqxor365 xor 9.9 1 -> NaN Invalid_operation -dqxor366 xor 9E+1 1 -> NaN Invalid_operation -dqxor371 xor 0 1.0 -> NaN Invalid_operation -dqxor372 xor 0 1E+1 -> NaN Invalid_operation -dqxor373 xor 0 0.0 -> NaN Invalid_operation -dqxor374 xor 0 0E+1 -> NaN Invalid_operation -dqxor375 xor 0 9.9 -> NaN Invalid_operation -dqxor376 xor 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -dqxor780 xor -Inf -Inf -> NaN Invalid_operation -dqxor781 xor -Inf -1000 -> NaN Invalid_operation -dqxor782 xor -Inf -1 -> NaN Invalid_operation -dqxor783 xor -Inf -0 -> NaN Invalid_operation -dqxor784 xor -Inf 0 -> NaN Invalid_operation -dqxor785 xor -Inf 1 -> NaN Invalid_operation -dqxor786 xor -Inf 1000 -> NaN Invalid_operation -dqxor787 xor -1000 -Inf -> NaN Invalid_operation -dqxor788 xor -Inf -Inf -> NaN Invalid_operation -dqxor789 xor -1 -Inf -> NaN Invalid_operation -dqxor790 xor -0 -Inf -> NaN Invalid_operation -dqxor791 xor 0 -Inf -> NaN Invalid_operation -dqxor792 xor 1 -Inf -> NaN Invalid_operation -dqxor793 xor 1000 -Inf -> NaN Invalid_operation -dqxor794 xor Inf -Inf -> NaN Invalid_operation - -dqxor800 xor Inf -Inf -> NaN Invalid_operation -dqxor801 xor Inf -1000 -> NaN Invalid_operation -dqxor802 xor Inf -1 -> NaN Invalid_operation -dqxor803 xor Inf -0 -> NaN Invalid_operation -dqxor804 xor Inf 0 -> NaN Invalid_operation -dqxor805 xor Inf 1 -> NaN Invalid_operation -dqxor806 xor Inf 1000 -> NaN Invalid_operation -dqxor807 xor Inf Inf -> NaN Invalid_operation -dqxor808 xor -1000 Inf -> NaN Invalid_operation -dqxor809 xor -Inf Inf -> NaN Invalid_operation -dqxor810 xor -1 Inf -> NaN Invalid_operation -dqxor811 xor -0 Inf -> NaN Invalid_operation -dqxor812 xor 0 Inf -> NaN Invalid_operation -dqxor813 xor 1 Inf -> NaN Invalid_operation -dqxor814 xor 1000 Inf -> NaN Invalid_operation -dqxor815 xor Inf Inf -> NaN Invalid_operation - -dqxor821 xor NaN -Inf -> NaN Invalid_operation -dqxor822 xor NaN -1000 -> NaN Invalid_operation -dqxor823 xor NaN -1 -> NaN Invalid_operation -dqxor824 xor NaN -0 -> NaN Invalid_operation -dqxor825 xor NaN 0 -> NaN Invalid_operation -dqxor826 xor NaN 1 -> NaN Invalid_operation -dqxor827 xor NaN 1000 -> NaN Invalid_operation -dqxor828 xor NaN Inf -> NaN Invalid_operation -dqxor829 xor NaN NaN -> NaN Invalid_operation -dqxor830 xor -Inf NaN -> NaN Invalid_operation -dqxor831 xor -1000 NaN -> NaN Invalid_operation -dqxor832 xor -1 NaN -> NaN Invalid_operation -dqxor833 xor -0 NaN -> NaN Invalid_operation -dqxor834 xor 0 NaN -> NaN Invalid_operation -dqxor835 xor 1 NaN -> NaN Invalid_operation -dqxor836 xor 1000 NaN -> NaN Invalid_operation -dqxor837 xor Inf NaN -> NaN Invalid_operation - -dqxor841 xor sNaN -Inf -> NaN Invalid_operation -dqxor842 xor sNaN -1000 -> NaN Invalid_operation -dqxor843 xor sNaN -1 -> NaN Invalid_operation -dqxor844 xor sNaN -0 -> NaN Invalid_operation -dqxor845 xor sNaN 0 -> NaN Invalid_operation -dqxor846 xor sNaN 1 -> NaN Invalid_operation -dqxor847 xor sNaN 1000 -> NaN Invalid_operation -dqxor848 xor sNaN NaN -> NaN Invalid_operation -dqxor849 xor sNaN sNaN -> NaN Invalid_operation -dqxor850 xor NaN sNaN -> NaN Invalid_operation -dqxor851 xor -Inf sNaN -> NaN Invalid_operation -dqxor852 xor -1000 sNaN -> NaN Invalid_operation -dqxor853 xor -1 sNaN -> NaN Invalid_operation -dqxor854 xor -0 sNaN -> NaN Invalid_operation -dqxor855 xor 0 sNaN -> NaN Invalid_operation -dqxor856 xor 1 sNaN -> NaN Invalid_operation -dqxor857 xor 1000 sNaN -> NaN Invalid_operation -dqxor858 xor Inf sNaN -> NaN Invalid_operation -dqxor859 xor NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqxor861 xor NaN1 -Inf -> NaN Invalid_operation -dqxor862 xor +NaN2 -1000 -> NaN Invalid_operation -dqxor863 xor NaN3 1000 -> NaN Invalid_operation -dqxor864 xor NaN4 Inf -> NaN Invalid_operation -dqxor865 xor NaN5 +NaN6 -> NaN Invalid_operation -dqxor866 xor -Inf NaN7 -> NaN Invalid_operation -dqxor867 xor -1000 NaN8 -> NaN Invalid_operation -dqxor868 xor 1000 NaN9 -> NaN Invalid_operation -dqxor869 xor Inf +NaN10 -> NaN Invalid_operation -dqxor871 xor sNaN11 -Inf -> NaN Invalid_operation -dqxor872 xor sNaN12 -1000 -> NaN Invalid_operation -dqxor873 xor sNaN13 1000 -> NaN Invalid_operation -dqxor874 xor sNaN14 NaN17 -> NaN Invalid_operation -dqxor875 xor sNaN15 sNaN18 -> NaN Invalid_operation -dqxor876 xor NaN16 sNaN19 -> NaN Invalid_operation -dqxor877 xor -Inf +sNaN20 -> NaN Invalid_operation -dqxor878 xor -1000 sNaN21 -> NaN Invalid_operation -dqxor879 xor 1000 sNaN22 -> NaN Invalid_operation -dqxor880 xor Inf sNaN23 -> NaN Invalid_operation -dqxor881 xor +NaN25 +sNaN24 -> NaN Invalid_operation -dqxor882 xor -NaN26 NaN28 -> NaN Invalid_operation -dqxor883 xor -sNaN27 sNaN29 -> NaN Invalid_operation -dqxor884 xor 1000 -NaN30 -> NaN Invalid_operation -dqxor885 xor 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqXor.decTest -- digitwise logical XOR for decQuads -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check (truth table) +dqxor001 xor 0 0 -> 0 +dqxor002 xor 0 1 -> 1 +dqxor003 xor 1 0 -> 1 +dqxor004 xor 1 1 -> 0 +dqxor005 xor 1100 1010 -> 110 +-- and at msd and msd-1 +dqxor006 xor 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqxor007 xor 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqxor008 xor 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqxor009 xor 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 0 +dqxor010 xor 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqxor011 xor 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 +dqxor012 xor 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 100000000000000000000000000000000 +dqxor013 xor 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 0 + +-- Various lengths +-- 1234567890123456789012345678901234 +dqxor601 xor 0111111111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000000000 +dqxor602 xor 1011111111111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000000000 +dqxor603 xor 1101111111111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000000000 +dqxor604 xor 1110111111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000000 +dqxor605 xor 1111011111111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000000 +dqxor606 xor 1111101111111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000000 +dqxor607 xor 1111110111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000 +dqxor608 xor 1111111011111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000 +dqxor609 xor 1111111101111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000 +dqxor610 xor 1111111110111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000 +dqxor611 xor 1111111111011111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000 +dqxor612 xor 1111111111101111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000 +dqxor613 xor 1111111111110111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000 +dqxor614 xor 1111111111111011111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000 +dqxor615 xor 1111111111111101111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000 +dqxor616 xor 1111111111111110111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000 +dqxor617 xor 1111111111111111011111111111111111 1111111111111111111111111111111111 -> 100000000000000000 +dqxor618 xor 1111111111111111101111111111111111 1111111111111111111111111111111111 -> 10000000000000000 +dqxor619 xor 1111111111111111110111111111111111 1111111111111111111111111111111111 -> 1000000000000000 +dqxor620 xor 1111111111111111111011111111111111 1111111111111111111111111111111111 -> 100000000000000 +dqxor621 xor 1111111111111111111101111111111111 1111111111111111111111111111111111 -> 10000000000000 +dqxor622 xor 1111111111111111111110111111111111 1111111111111111111111111111111111 -> 1000000000000 +dqxor623 xor 1111111111111111111111011111111111 1111111111111111111111111111111111 -> 100000000000 +dqxor624 xor 1111111111111111111111101111111111 1111111111111111111111111111111111 -> 10000000000 +dqxor625 xor 1111111111111111111111110111111111 1111111111111111111111111111111111 -> 1000000000 +dqxor626 xor 1111111111111111111111111011111111 1111111111111111111111111111111111 -> 100000000 +dqxor627 xor 1111111111111111111111111101111111 1111111111111111111111111111111111 -> 10000000 +dqxor628 xor 1111111111111111111111111110111111 1111111111111111111111111111111111 -> 1000000 +dqxor629 xor 1111111111111111111111111111011111 1111111111111111111111111111111111 -> 100000 +dqxor630 xor 1111111111111111111111111111101111 1111111111111111111111111111111111 -> 10000 +dqxor631 xor 1111111111111111111111111111110111 1111111111111111111111111111111111 -> 1000 +dqxor632 xor 1111111111111111111111111111111011 1111111111111111111111111111111111 -> 100 +dqxor633 xor 1111111111111111111111111111111101 1111111111111111111111111111111111 -> 10 +dqxor634 xor 1111111111111111111111111111111110 1111111111111111111111111111111111 -> 1 + +dqxor641 xor 1111111111111111111111111111111111 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 +dqxor642 xor 1111111111111111111111111111111111 1011111111111111111111111111111111 -> 100000000000000000000000000000000 +dqxor643 xor 1111111111111111111111111111111111 1101111111111111111111111111111111 -> 10000000000000000000000000000000 +dqxor644 xor 1111111111111111111111111111111111 1110111111111111111111111111111111 -> 1000000000000000000000000000000 +dqxor645 xor 1111111111111111111111111111111111 1111011111111111111111111111111111 -> 100000000000000000000000000000 +dqxor646 xor 1111111111111111111111111111111111 1111101111111111111111111111111111 -> 10000000000000000000000000000 +dqxor647 xor 1111111111111111111111111111111111 1111110111111111111111111111111111 -> 1000000000000000000000000000 +dqxor648 xor 1111111111111111111111111111111111 1111111011111111111111111111111111 -> 100000000000000000000000000 +dqxor649 xor 1111111111111111111111111111111111 1111111101111111111111111111111111 -> 10000000000000000000000000 +dqxor650 xor 1111111111111111111111111111111111 1111111110111111111111111111111111 -> 1000000000000000000000000 +dqxor651 xor 1111111111111111111111111111111111 1111111111011111111111111111111111 -> 100000000000000000000000 +dqxor652 xor 1111111111111111111111111111111111 1111111111101111111111111111111111 -> 10000000000000000000000 +dqxor653 xor 1111111111111111111111111111111111 1111111111110111111111111111111111 -> 1000000000000000000000 +dqxor654 xor 1111111111111111111111111111111111 1111111111111011111111111111111111 -> 100000000000000000000 +dqxor655 xor 1111111111111111111111111111111111 1111111111111101111111111111111111 -> 10000000000000000000 +dqxor656 xor 1111111111111111111111111111111111 1111111111111110111111111111111111 -> 1000000000000000000 +dqxor657 xor 1111111111111111111111111111111111 1111111111111111011111111111111111 -> 100000000000000000 +dqxor658 xor 1111111111111111111111111111111111 1111111111111111101111111111111111 -> 10000000000000000 +dqxor659 xor 1111111111111111111111111111111111 1111111111111111110111111111111111 -> 1000000000000000 +dqxor660 xor 1111111111111111111111111111111111 1111111111111111111011111111111111 -> 100000000000000 +dqxor661 xor 1111111111111111111111111111111111 1111111111111111111101111111111111 -> 10000000000000 +dqxor662 xor 1111111111111111111111111111111111 1111111111111111111110111111111111 -> 1000000000000 +dqxor663 xor 1111111111111111111111111111111111 1111111111111111111111011111111111 -> 100000000000 +dqxor664 xor 1111111111111111111111111111111111 1111111111111111111111101111111111 -> 10000000000 +dqxor665 xor 1111111111111111111111111111111111 1111111111111111111111110111111111 -> 1000000000 +dqxor666 xor 1111111111111111111111111111111111 1111111111111111111111111011111111 -> 100000000 +dqxor667 xor 1111111111111111111111111111111111 1111111111111111111111111101111111 -> 10000000 +dqxor668 xor 1111111111111111111111111111111111 1111111111111111111111111110111111 -> 1000000 +dqxor669 xor 1111111111111111111111111111111111 1111111111111111111111111111011111 -> 100000 +dqxor670 xor 1111111111111111111111111111111111 1111111111111111111111111111101111 -> 10000 +dqxor671 xor 1111111111111111111111111111111111 1111111111111111111111111111110111 -> 1000 +dqxor672 xor 1111111111111111111111111111111111 1111111111111111111111111111111011 -> 100 +dqxor673 xor 1111111111111111111111111111111111 1111111111111111111111111111111101 -> 10 +dqxor674 xor 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1 +dqxor675 xor 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1000000000000000000000000000000001 +dqxor676 xor 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1 + + +dqxor021 xor 1111111110000000 1111111110000000 -> 0 +dqxor022 xor 111111110000000 111111110000000 -> 0 +dqxor023 xor 11111110000000 11111110000000 -> 0 +dqxor024 xor 1111110000000 1111110000000 -> 0 +dqxor025 xor 111110000000 111110000000 -> 0 +dqxor026 xor 11110000000 11110000000 -> 0 +dqxor027 xor 1110000000 1110000000 -> 0 +dqxor028 xor 110000000 110000000 -> 0 +dqxor029 xor 10000000 10000000 -> 0 +dqxor030 xor 1000000 1000000 -> 0 +dqxor031 xor 100000 100000 -> 0 +dqxor032 xor 10000 10000 -> 0 +dqxor033 xor 1000 1000 -> 0 +dqxor034 xor 100 100 -> 0 +dqxor035 xor 10 10 -> 0 +dqxor036 xor 1 1 -> 0 + +dqxor040 xor 111111111 111111111111 -> 111000000000 +dqxor041 xor 11111111 111111111111 -> 111100000000 +dqxor042 xor 11111111 111111111 -> 100000000 +dqxor043 xor 1111111 100000010 -> 101111101 +dqxor044 xor 111111 100000100 -> 100111011 +dqxor045 xor 11111 100001000 -> 100010111 +dqxor046 xor 1111 100010000 -> 100011111 +dqxor047 xor 111 100100000 -> 100100111 +dqxor048 xor 11 101000000 -> 101000011 +dqxor049 xor 1 110000000 -> 110000001 + +dqxor050 xor 1111111111 1 -> 1111111110 +dqxor051 xor 111111111 1 -> 111111110 +dqxor052 xor 11111111 1 -> 11111110 +dqxor053 xor 1111111 1 -> 1111110 +dqxor054 xor 111111 1 -> 111110 +dqxor055 xor 11111 1 -> 11110 +dqxor056 xor 1111 1 -> 1110 +dqxor057 xor 111 1 -> 110 +dqxor058 xor 11 1 -> 10 +dqxor059 xor 1 1 -> 0 + +dqxor060 xor 1111111111 0 -> 1111111111 +dqxor061 xor 111111111 0 -> 111111111 +dqxor062 xor 11111111 0 -> 11111111 +dqxor063 xor 1111111 0 -> 1111111 +dqxor064 xor 111111 0 -> 111111 +dqxor065 xor 11111 0 -> 11111 +dqxor066 xor 1111 0 -> 1111 +dqxor067 xor 111 0 -> 111 +dqxor068 xor 11 0 -> 11 +dqxor069 xor 1 0 -> 1 + +dqxor070 xor 1 1111111111 -> 1111111110 +dqxor071 xor 1 111111111 -> 111111110 +dqxor072 xor 1 11111111 -> 11111110 +dqxor073 xor 1 1111111 -> 1111110 +dqxor074 xor 1 111111 -> 111110 +dqxor075 xor 1 11111 -> 11110 +dqxor076 xor 1 1111 -> 1110 +dqxor077 xor 1 111 -> 110 +dqxor078 xor 1 11 -> 10 +dqxor079 xor 1 1 -> 0 + +dqxor080 xor 0 1111111111 -> 1111111111 +dqxor081 xor 0 111111111 -> 111111111 +dqxor082 xor 0 11111111 -> 11111111 +dqxor083 xor 0 1111111 -> 1111111 +dqxor084 xor 0 111111 -> 111111 +dqxor085 xor 0 11111 -> 11111 +dqxor086 xor 0 1111 -> 1111 +dqxor087 xor 0 111 -> 111 +dqxor088 xor 0 11 -> 11 +dqxor089 xor 0 1 -> 1 + +dqxor090 xor 011111111 111101111 -> 100010000 +dqxor091 xor 101111111 111101111 -> 10010000 +dqxor092 xor 110111111 111101111 -> 1010000 +dqxor093 xor 111011111 111101111 -> 110000 +dqxor094 xor 111101111 111101111 -> 0 +dqxor095 xor 111110111 111101111 -> 11000 +dqxor096 xor 111111011 111101111 -> 10100 +dqxor097 xor 111111101 111101111 -> 10010 +dqxor098 xor 111111110 111101111 -> 10001 + +dqxor100 xor 111101111 011111111 -> 100010000 +dqxor101 xor 111101111 101111111 -> 10010000 +dqxor102 xor 111101111 110111111 -> 1010000 +dqxor103 xor 111101111 111011111 -> 110000 +dqxor104 xor 111101111 111101111 -> 0 +dqxor105 xor 111101111 111110111 -> 11000 +dqxor106 xor 111101111 111111011 -> 10100 +dqxor107 xor 111101111 111111101 -> 10010 +dqxor108 xor 111101111 111111110 -> 10001 + +-- non-0/1 should not be accepted, nor should signs +dqxor220 xor 111111112 111111111 -> NaN Invalid_operation +dqxor221 xor 333333333 333333333 -> NaN Invalid_operation +dqxor222 xor 555555555 555555555 -> NaN Invalid_operation +dqxor223 xor 777777777 777777777 -> NaN Invalid_operation +dqxor224 xor 999999999 999999999 -> NaN Invalid_operation +dqxor225 xor 222222222 999999999 -> NaN Invalid_operation +dqxor226 xor 444444444 999999999 -> NaN Invalid_operation +dqxor227 xor 666666666 999999999 -> NaN Invalid_operation +dqxor228 xor 888888888 999999999 -> NaN Invalid_operation +dqxor229 xor 999999999 222222222 -> NaN Invalid_operation +dqxor230 xor 999999999 444444444 -> NaN Invalid_operation +dqxor231 xor 999999999 666666666 -> NaN Invalid_operation +dqxor232 xor 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +dqxor240 xor 567468689 -934981942 -> NaN Invalid_operation +dqxor241 xor 567367689 934981942 -> NaN Invalid_operation +dqxor242 xor -631917772 -706014634 -> NaN Invalid_operation +dqxor243 xor -756253257 138579234 -> NaN Invalid_operation +dqxor244 xor 835590149 567435400 -> NaN Invalid_operation +-- test MSD +dqxor250 xor 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqxor251 xor 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqxor252 xor 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqxor253 xor 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqxor254 xor 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqxor255 xor 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqxor256 xor 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqxor257 xor 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqxor258 xor 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqxor259 xor 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqxor260 xor 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqxor261 xor 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +dqxor262 xor 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqxor263 xor 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqxor264 xor 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqxor265 xor 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +-- test MSD-1 +dqxor270 xor 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation +dqxor271 xor 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation +dqxor272 xor 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation +dqxor273 xor 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation +dqxor274 xor 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation +dqxor275 xor 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation +dqxor276 xor 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation +dqxor277 xor 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation +-- test LSD +dqxor280 xor 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation +dqxor281 xor 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation +dqxor282 xor 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation +dqxor283 xor 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation +dqxor284 xor 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation +dqxor285 xor 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation +dqxor286 xor 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation +dqxor287 xor 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation +-- test Middie +dqxor288 xor 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation +dqxor289 xor 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation +dqxor290 xor 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation +dqxor291 xor 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation +dqxor292 xor 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation +dqxor293 xor 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation +dqxor294 xor 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation +dqxor295 xor 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation +-- signs +dqxor296 xor -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation +dqxor297 xor -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation +dqxor298 xor 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation +dqxor299 xor 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 1000001001001001001001000010000100 + +-- Nmax, Nmin, Ntiny-like +dqxor331 xor 2 9.99999999E+999 -> NaN Invalid_operation +dqxor332 xor 3 1E-999 -> NaN Invalid_operation +dqxor333 xor 4 1.00000000E-2821 -> NaN Invalid_operation +dqxor334 xor 5 1E-900 -> NaN Invalid_operation +dqxor335 xor 6 -1E-900 -> NaN Invalid_operation +dqxor336 xor 7 -1.00000000E-999 -> NaN Invalid_operation +dqxor337 xor 8 -1E-999 -> NaN Invalid_operation +dqxor338 xor 9 -9.99999999E+999 -> NaN Invalid_operation +dqxor341 xor 9.99999999E+999 -18 -> NaN Invalid_operation +dqxor342 xor 1E-999 01 -> NaN Invalid_operation +dqxor343 xor 1.00000000E-999 -18 -> NaN Invalid_operation +dqxor344 xor 1E-908 18 -> NaN Invalid_operation +dqxor345 xor -1E-907 -10 -> NaN Invalid_operation +dqxor346 xor -1.00000000E-999 18 -> NaN Invalid_operation +dqxor347 xor -1E-999 10 -> NaN Invalid_operation +dqxor348 xor -9.99999999E+2991 -18 -> NaN Invalid_operation + +-- A few other non-integers +dqxor361 xor 1.0 1 -> NaN Invalid_operation +dqxor362 xor 1E+1 1 -> NaN Invalid_operation +dqxor363 xor 0.0 1 -> NaN Invalid_operation +dqxor364 xor 0E+1 1 -> NaN Invalid_operation +dqxor365 xor 9.9 1 -> NaN Invalid_operation +dqxor366 xor 9E+1 1 -> NaN Invalid_operation +dqxor371 xor 0 1.0 -> NaN Invalid_operation +dqxor372 xor 0 1E+1 -> NaN Invalid_operation +dqxor373 xor 0 0.0 -> NaN Invalid_operation +dqxor374 xor 0 0E+1 -> NaN Invalid_operation +dqxor375 xor 0 9.9 -> NaN Invalid_operation +dqxor376 xor 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +dqxor780 xor -Inf -Inf -> NaN Invalid_operation +dqxor781 xor -Inf -1000 -> NaN Invalid_operation +dqxor782 xor -Inf -1 -> NaN Invalid_operation +dqxor783 xor -Inf -0 -> NaN Invalid_operation +dqxor784 xor -Inf 0 -> NaN Invalid_operation +dqxor785 xor -Inf 1 -> NaN Invalid_operation +dqxor786 xor -Inf 1000 -> NaN Invalid_operation +dqxor787 xor -1000 -Inf -> NaN Invalid_operation +dqxor788 xor -Inf -Inf -> NaN Invalid_operation +dqxor789 xor -1 -Inf -> NaN Invalid_operation +dqxor790 xor -0 -Inf -> NaN Invalid_operation +dqxor791 xor 0 -Inf -> NaN Invalid_operation +dqxor792 xor 1 -Inf -> NaN Invalid_operation +dqxor793 xor 1000 -Inf -> NaN Invalid_operation +dqxor794 xor Inf -Inf -> NaN Invalid_operation + +dqxor800 xor Inf -Inf -> NaN Invalid_operation +dqxor801 xor Inf -1000 -> NaN Invalid_operation +dqxor802 xor Inf -1 -> NaN Invalid_operation +dqxor803 xor Inf -0 -> NaN Invalid_operation +dqxor804 xor Inf 0 -> NaN Invalid_operation +dqxor805 xor Inf 1 -> NaN Invalid_operation +dqxor806 xor Inf 1000 -> NaN Invalid_operation +dqxor807 xor Inf Inf -> NaN Invalid_operation +dqxor808 xor -1000 Inf -> NaN Invalid_operation +dqxor809 xor -Inf Inf -> NaN Invalid_operation +dqxor810 xor -1 Inf -> NaN Invalid_operation +dqxor811 xor -0 Inf -> NaN Invalid_operation +dqxor812 xor 0 Inf -> NaN Invalid_operation +dqxor813 xor 1 Inf -> NaN Invalid_operation +dqxor814 xor 1000 Inf -> NaN Invalid_operation +dqxor815 xor Inf Inf -> NaN Invalid_operation + +dqxor821 xor NaN -Inf -> NaN Invalid_operation +dqxor822 xor NaN -1000 -> NaN Invalid_operation +dqxor823 xor NaN -1 -> NaN Invalid_operation +dqxor824 xor NaN -0 -> NaN Invalid_operation +dqxor825 xor NaN 0 -> NaN Invalid_operation +dqxor826 xor NaN 1 -> NaN Invalid_operation +dqxor827 xor NaN 1000 -> NaN Invalid_operation +dqxor828 xor NaN Inf -> NaN Invalid_operation +dqxor829 xor NaN NaN -> NaN Invalid_operation +dqxor830 xor -Inf NaN -> NaN Invalid_operation +dqxor831 xor -1000 NaN -> NaN Invalid_operation +dqxor832 xor -1 NaN -> NaN Invalid_operation +dqxor833 xor -0 NaN -> NaN Invalid_operation +dqxor834 xor 0 NaN -> NaN Invalid_operation +dqxor835 xor 1 NaN -> NaN Invalid_operation +dqxor836 xor 1000 NaN -> NaN Invalid_operation +dqxor837 xor Inf NaN -> NaN Invalid_operation + +dqxor841 xor sNaN -Inf -> NaN Invalid_operation +dqxor842 xor sNaN -1000 -> NaN Invalid_operation +dqxor843 xor sNaN -1 -> NaN Invalid_operation +dqxor844 xor sNaN -0 -> NaN Invalid_operation +dqxor845 xor sNaN 0 -> NaN Invalid_operation +dqxor846 xor sNaN 1 -> NaN Invalid_operation +dqxor847 xor sNaN 1000 -> NaN Invalid_operation +dqxor848 xor sNaN NaN -> NaN Invalid_operation +dqxor849 xor sNaN sNaN -> NaN Invalid_operation +dqxor850 xor NaN sNaN -> NaN Invalid_operation +dqxor851 xor -Inf sNaN -> NaN Invalid_operation +dqxor852 xor -1000 sNaN -> NaN Invalid_operation +dqxor853 xor -1 sNaN -> NaN Invalid_operation +dqxor854 xor -0 sNaN -> NaN Invalid_operation +dqxor855 xor 0 sNaN -> NaN Invalid_operation +dqxor856 xor 1 sNaN -> NaN Invalid_operation +dqxor857 xor 1000 sNaN -> NaN Invalid_operation +dqxor858 xor Inf sNaN -> NaN Invalid_operation +dqxor859 xor NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqxor861 xor NaN1 -Inf -> NaN Invalid_operation +dqxor862 xor +NaN2 -1000 -> NaN Invalid_operation +dqxor863 xor NaN3 1000 -> NaN Invalid_operation +dqxor864 xor NaN4 Inf -> NaN Invalid_operation +dqxor865 xor NaN5 +NaN6 -> NaN Invalid_operation +dqxor866 xor -Inf NaN7 -> NaN Invalid_operation +dqxor867 xor -1000 NaN8 -> NaN Invalid_operation +dqxor868 xor 1000 NaN9 -> NaN Invalid_operation +dqxor869 xor Inf +NaN10 -> NaN Invalid_operation +dqxor871 xor sNaN11 -Inf -> NaN Invalid_operation +dqxor872 xor sNaN12 -1000 -> NaN Invalid_operation +dqxor873 xor sNaN13 1000 -> NaN Invalid_operation +dqxor874 xor sNaN14 NaN17 -> NaN Invalid_operation +dqxor875 xor sNaN15 sNaN18 -> NaN Invalid_operation +dqxor876 xor NaN16 sNaN19 -> NaN Invalid_operation +dqxor877 xor -Inf +sNaN20 -> NaN Invalid_operation +dqxor878 xor -1000 sNaN21 -> NaN Invalid_operation +dqxor879 xor 1000 sNaN22 -> NaN Invalid_operation +dqxor880 xor Inf sNaN23 -> NaN Invalid_operation +dqxor881 xor +NaN25 +sNaN24 -> NaN Invalid_operation +dqxor882 xor -NaN26 NaN28 -> NaN Invalid_operation +dqxor883 xor -sNaN27 sNaN29 -> NaN Invalid_operation +dqxor884 xor 1000 -NaN30 -> NaN Invalid_operation +dqxor885 xor 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dsBase.decTest b/Lib/test/decimaltestdata/dsBase.decTest index 8ac45fc5521..5e5e5a5d91c 100644 --- a/Lib/test/decimaltestdata/dsBase.decTest +++ b/Lib/test/decimaltestdata/dsBase.decTest @@ -1,1062 +1,1062 @@ ------------------------------------------------------------------------- --- dsBase.decTest -- base decSingle <--> string conversions -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests base conversions from string to a decimal number --- and back to a string (in Scientific form) - --- Note that unlike other operations the operand is subject to rounding --- to conform to emax and precision settings (that is, numbers will --- conform to rules and exponent will be in permitted range). The --- 'left hand side', therefore, may have numbers that cannot be --- represented in a decSingle. Some testcases go to the limit of the --- next-wider format, and hence these testcases may also be used to --- test narrowing and widening operations. - -extended: 1 -clamp: 1 -precision: 7 -maxExponent: 96 -minExponent: -95 -rounding: half_even - -dsbas001 toSci 0 -> 0 -dsbas002 toSci 1 -> 1 -dsbas003 toSci 1.0 -> 1.0 -dsbas004 toSci 1.00 -> 1.00 -dsbas005 toSci 10 -> 10 -dsbas006 toSci 1000 -> 1000 -dsbas007 toSci 10.0 -> 10.0 -dsbas008 toSci 10.1 -> 10.1 -dsbas009 toSci 10.4 -> 10.4 -dsbas010 toSci 10.5 -> 10.5 -dsbas011 toSci 10.6 -> 10.6 -dsbas012 toSci 10.9 -> 10.9 -dsbas013 toSci 11.0 -> 11.0 -dsbas014 toSci 1.234 -> 1.234 -dsbas015 toSci 0.123 -> 0.123 -dsbas016 toSci 0.012 -> 0.012 -dsbas017 toSci -0 -> -0 -dsbas018 toSci -0.0 -> -0.0 -dsbas019 toSci -00.00 -> -0.00 - -dsbas021 toSci -1 -> -1 -dsbas022 toSci -1.0 -> -1.0 -dsbas023 toSci -0.1 -> -0.1 -dsbas024 toSci -9.1 -> -9.1 -dsbas025 toSci -9.11 -> -9.11 -dsbas026 toSci -9.119 -> -9.119 -dsbas027 toSci -9.999 -> -9.999 - -dsbas030 toSci '1234.567' -> '1234.567' -dsbas031 toSci '1234.000' -> '1234.000' -dsbas032 toSci '1234912' -> '1234912' -dsbas033 toSci '0.00001234567' -> '0.00001234567' -dsbas034 toSci '0.000001234567' -> '0.000001234567' -dsbas035 toSci '0.0000001234567' -> '1.234567E-7' -dsbas036 toSci '0.00000001234567' -> '1.234567E-8' - -dsbas037 toSci '0.1234564' -> '0.1234564' -dsbas038 toSci '0.1234565' -> '0.1234565' - --- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) -dsbsn001 toSci -9.999999E+96 -> -9.999999E+96 -dsbsn002 toSci -1E-95 -> -1E-95 -dsbsn003 toSci -1E-101 -> -1E-101 Subnormal -dsbsn004 toSci -0 -> -0 -dsbsn005 toSci +0 -> 0 -dsbsn006 toSci +1E-101 -> 1E-101 Subnormal -dsbsn007 toSci +1E-95 -> 1E-95 -dsbsn008 toSci +9.999999E+96 -> 9.999999E+96 - --- String [many more examples are implicitly tested elsewhere] --- strings without E cannot generate E in result -dsbas040 toSci "12" -> '12' -dsbas041 toSci "-76" -> '-76' -dsbas042 toSci "12.76" -> '12.76' -dsbas043 toSci "+12.76" -> '12.76' -dsbas044 toSci "012.76" -> '12.76' -dsbas045 toSci "+0.003" -> '0.003' -dsbas046 toSci "17." -> '17' -dsbas047 toSci ".5" -> '0.5' -dsbas048 toSci "044" -> '44' -dsbas049 toSci "0044" -> '44' -dsbas050 toSci "0.0005" -> '0.0005' -dsbas051 toSci "00.00005" -> '0.00005' -dsbas052 toSci "0.000005" -> '0.000005' -dsbas053 toSci "0.0000050" -> '0.0000050' -dsbas054 toSci "0.0000005" -> '5E-7' -dsbas055 toSci "0.00000005" -> '5E-8' -dsbas056 toSci "12678.54" -> '12678.54' -dsbas057 toSci "2678.543" -> '2678.543' -dsbas058 toSci "345678.5" -> '345678.5' -dsbas059 toSci "0678.5432" -> '678.5432' -dsbas060 toSci "678.5432" -> '678.5432' -dsbas061 toSci "+678.5432" -> '678.5432' -dsbas062 toSci "+0678.5432" -> '678.5432' -dsbas063 toSci "+00678.5432" -> '678.5432' -dsbas064 toSci "-678.5432" -> '-678.5432' -dsbas065 toSci "-0678.5432" -> '-678.5432' -dsbas066 toSci "-00678.5432" -> '-678.5432' --- examples -dsbas067 toSci "5E-6" -> '0.000005' -dsbas068 toSci "50E-7" -> '0.0000050' -dsbas069 toSci "5E-7" -> '5E-7' - --- [No exotics as no Unicode] - --- rounded with dots in all (including edge) places -dsbas071 toSci .1234567890123456 -> 0.1234568 Inexact Rounded -dsbas072 toSci 1.234567890123456 -> 1.234568 Inexact Rounded -dsbas073 toSci 12.34567890123456 -> 12.34568 Inexact Rounded -dsbas074 toSci 123.4567890123456 -> 123.4568 Inexact Rounded -dsbas075 toSci 1234.567890123456 -> 1234.568 Inexact Rounded -dsbas076 toSci 12345.67890123456 -> 12345.68 Inexact Rounded -dsbas077 toSci 123456.7890123456 -> 123456.8 Inexact Rounded -dsbas078 toSci 1234567.890123456 -> 1234568 Inexact Rounded -dsbas079 toSci 12345678.90123456 -> 1.234568E+7 Inexact Rounded -dsbas080 toSci 123456789.0123456 -> 1.234568E+8 Inexact Rounded -dsbas081 toSci 1234567890.123456 -> 1.234568E+9 Inexact Rounded -dsbas082 toSci 12345678901.23456 -> 1.234568E+10 Inexact Rounded -dsbas083 toSci 123456789012.3456 -> 1.234568E+11 Inexact Rounded -dsbas084 toSci 1234567890123.456 -> 1.234568E+12 Inexact Rounded -dsbas085 toSci 12345678901234.56 -> 1.234568E+13 Inexact Rounded -dsbas086 toSci 123456789012345.6 -> 1.234568E+14 Inexact Rounded -dsbas087 toSci 1234567890123456. -> 1.234568E+15 Inexact Rounded -dsbas088 toSci 1234567890123456 -> 1.234568E+15 Inexact Rounded - --- Numbers with E -dsbas130 toSci "0.000E-1" -> '0.0000' -dsbas131 toSci "0.000E-2" -> '0.00000' -dsbas132 toSci "0.000E-3" -> '0.000000' -dsbas133 toSci "0.000E-4" -> '0E-7' -dsbas134 toSci "0.00E-2" -> '0.0000' -dsbas135 toSci "0.00E-3" -> '0.00000' -dsbas136 toSci "0.00E-4" -> '0.000000' -dsbas137 toSci "0.00E-5" -> '0E-7' -dsbas138 toSci "+0E+9" -> '0E+9' -dsbas139 toSci "-0E+9" -> '-0E+9' -dsbas140 toSci "1E+9" -> '1E+9' -dsbas141 toSci "1e+09" -> '1E+9' -dsbas142 toSci "1E+90" -> '1E+90' -dsbas143 toSci "+1E+009" -> '1E+9' -dsbas144 toSci "0E+9" -> '0E+9' -dsbas145 toSci "1E+9" -> '1E+9' -dsbas146 toSci "1E+09" -> '1E+9' -dsbas147 toSci "1e+90" -> '1E+90' -dsbas148 toSci "1E+009" -> '1E+9' -dsbas149 toSci "000E+9" -> '0E+9' -dsbas150 toSci "1E9" -> '1E+9' -dsbas151 toSci "1e09" -> '1E+9' -dsbas152 toSci "1E90" -> '1E+90' -dsbas153 toSci "1E009" -> '1E+9' -dsbas154 toSci "0E9" -> '0E+9' -dsbas155 toSci "0.000e+0" -> '0.000' -dsbas156 toSci "0.000E-1" -> '0.0000' -dsbas157 toSci "4E+9" -> '4E+9' -dsbas158 toSci "44E+9" -> '4.4E+10' -dsbas159 toSci "0.73e-7" -> '7.3E-8' -dsbas160 toSci "00E+9" -> '0E+9' -dsbas161 toSci "00E-9" -> '0E-9' -dsbas162 toSci "10E+9" -> '1.0E+10' -dsbas163 toSci "10E+09" -> '1.0E+10' -dsbas164 toSci "10e+90" -> '1.0E+91' -dsbas165 toSci "10E+009" -> '1.0E+10' -dsbas166 toSci "100e+9" -> '1.00E+11' -dsbas167 toSci "100e+09" -> '1.00E+11' -dsbas168 toSci "100E+90" -> '1.00E+92' -dsbas169 toSci "100e+009" -> '1.00E+11' - -dsbas170 toSci "1.265" -> '1.265' -dsbas171 toSci "1.265E-20" -> '1.265E-20' -dsbas172 toSci "1.265E-8" -> '1.265E-8' -dsbas173 toSci "1.265E-4" -> '0.0001265' -dsbas174 toSci "1.265E-3" -> '0.001265' -dsbas175 toSci "1.265E-2" -> '0.01265' -dsbas176 toSci "1.265E-1" -> '0.1265' -dsbas177 toSci "1.265E-0" -> '1.265' -dsbas178 toSci "1.265E+1" -> '12.65' -dsbas179 toSci "1.265E+2" -> '126.5' -dsbas180 toSci "1.265E+3" -> '1265' -dsbas181 toSci "1.265E+4" -> '1.265E+4' -dsbas182 toSci "1.265E+8" -> '1.265E+8' -dsbas183 toSci "1.265E+20" -> '1.265E+20' - -dsbas190 toSci "12.65" -> '12.65' -dsbas191 toSci "12.65E-20" -> '1.265E-19' -dsbas192 toSci "12.65E-8" -> '1.265E-7' -dsbas193 toSci "12.65E-4" -> '0.001265' -dsbas194 toSci "12.65E-3" -> '0.01265' -dsbas195 toSci "12.65E-2" -> '0.1265' -dsbas196 toSci "12.65E-1" -> '1.265' -dsbas197 toSci "12.65E-0" -> '12.65' -dsbas198 toSci "12.65E+1" -> '126.5' -dsbas199 toSci "12.65E+2" -> '1265' -dsbas200 toSci "12.65E+3" -> '1.265E+4' -dsbas201 toSci "12.65E+4" -> '1.265E+5' -dsbas202 toSci "12.65E+8" -> '1.265E+9' -dsbas203 toSci "12.65E+20" -> '1.265E+21' - -dsbas210 toSci "126.5" -> '126.5' -dsbas211 toSci "126.5E-20" -> '1.265E-18' -dsbas212 toSci "126.5E-8" -> '0.000001265' -dsbas213 toSci "126.5E-4" -> '0.01265' -dsbas214 toSci "126.5E-3" -> '0.1265' -dsbas215 toSci "126.5E-2" -> '1.265' -dsbas216 toSci "126.5E-1" -> '12.65' -dsbas217 toSci "126.5E-0" -> '126.5' -dsbas218 toSci "126.5E+1" -> '1265' -dsbas219 toSci "126.5E+2" -> '1.265E+4' -dsbas220 toSci "126.5E+3" -> '1.265E+5' -dsbas221 toSci "126.5E+4" -> '1.265E+6' -dsbas222 toSci "126.5E+8" -> '1.265E+10' -dsbas223 toSci "126.5E+20" -> '1.265E+22' - -dsbas230 toSci "1265" -> '1265' -dsbas231 toSci "1265E-20" -> '1.265E-17' -dsbas232 toSci "1265E-8" -> '0.00001265' -dsbas233 toSci "1265E-4" -> '0.1265' -dsbas234 toSci "1265E-3" -> '1.265' -dsbas235 toSci "1265E-2" -> '12.65' -dsbas236 toSci "1265E-1" -> '126.5' -dsbas237 toSci "1265E-0" -> '1265' -dsbas238 toSci "1265E+1" -> '1.265E+4' -dsbas239 toSci "1265E+2" -> '1.265E+5' -dsbas240 toSci "1265E+3" -> '1.265E+6' -dsbas241 toSci "1265E+4" -> '1.265E+7' -dsbas242 toSci "1265E+8" -> '1.265E+11' -dsbas243 toSci "1265E+20" -> '1.265E+23' - -dsbas250 toSci "0.1265" -> '0.1265' -dsbas251 toSci "0.1265E-20" -> '1.265E-21' -dsbas252 toSci "0.1265E-8" -> '1.265E-9' -dsbas253 toSci "0.1265E-4" -> '0.00001265' -dsbas254 toSci "0.1265E-3" -> '0.0001265' -dsbas255 toSci "0.1265E-2" -> '0.001265' -dsbas256 toSci "0.1265E-1" -> '0.01265' -dsbas257 toSci "0.1265E-0" -> '0.1265' -dsbas258 toSci "0.1265E+1" -> '1.265' -dsbas259 toSci "0.1265E+2" -> '12.65' -dsbas260 toSci "0.1265E+3" -> '126.5' -dsbas261 toSci "0.1265E+4" -> '1265' -dsbas262 toSci "0.1265E+8" -> '1.265E+7' -dsbas263 toSci "0.1265E+20" -> '1.265E+19' - --- some more negative zeros [systematic tests below] -dsbas290 toSci "-0.000E-1" -> '-0.0000' -dsbas291 toSci "-0.000E-2" -> '-0.00000' -dsbas292 toSci "-0.000E-3" -> '-0.000000' -dsbas293 toSci "-0.000E-4" -> '-0E-7' -dsbas294 toSci "-0.00E-2" -> '-0.0000' -dsbas295 toSci "-0.00E-3" -> '-0.00000' -dsbas296 toSci "-0.0E-2" -> '-0.000' -dsbas297 toSci "-0.0E-3" -> '-0.0000' -dsbas298 toSci "-0E-2" -> '-0.00' -dsbas299 toSci "-0E-3" -> '-0.000' - --- Engineering notation tests -dsbas301 toSci 10e12 -> 1.0E+13 -dsbas302 toEng 10e12 -> 10E+12 -dsbas303 toSci 10e11 -> 1.0E+12 -dsbas304 toEng 10e11 -> 1.0E+12 -dsbas305 toSci 10e10 -> 1.0E+11 -dsbas306 toEng 10e10 -> 100E+9 -dsbas307 toSci 10e9 -> 1.0E+10 -dsbas308 toEng 10e9 -> 10E+9 -dsbas309 toSci 10e8 -> 1.0E+9 -dsbas310 toEng 10e8 -> 1.0E+9 -dsbas311 toSci 10e7 -> 1.0E+8 -dsbas312 toEng 10e7 -> 100E+6 -dsbas313 toSci 10e6 -> 1.0E+7 -dsbas314 toEng 10e6 -> 10E+6 -dsbas315 toSci 10e5 -> 1.0E+6 -dsbas316 toEng 10e5 -> 1.0E+6 -dsbas317 toSci 10e4 -> 1.0E+5 -dsbas318 toEng 10e4 -> 100E+3 -dsbas319 toSci 10e3 -> 1.0E+4 -dsbas320 toEng 10e3 -> 10E+3 -dsbas321 toSci 10e2 -> 1.0E+3 -dsbas322 toEng 10e2 -> 1.0E+3 -dsbas323 toSci 10e1 -> 1.0E+2 -dsbas324 toEng 10e1 -> 100 -dsbas325 toSci 10e0 -> 10 -dsbas326 toEng 10e0 -> 10 -dsbas327 toSci 10e-1 -> 1.0 -dsbas328 toEng 10e-1 -> 1.0 -dsbas329 toSci 10e-2 -> 0.10 -dsbas330 toEng 10e-2 -> 0.10 -dsbas331 toSci 10e-3 -> 0.010 -dsbas332 toEng 10e-3 -> 0.010 -dsbas333 toSci 10e-4 -> 0.0010 -dsbas334 toEng 10e-4 -> 0.0010 -dsbas335 toSci 10e-5 -> 0.00010 -dsbas336 toEng 10e-5 -> 0.00010 -dsbas337 toSci 10e-6 -> 0.000010 -dsbas338 toEng 10e-6 -> 0.000010 -dsbas339 toSci 10e-7 -> 0.0000010 -dsbas340 toEng 10e-7 -> 0.0000010 -dsbas341 toSci 10e-8 -> 1.0E-7 -dsbas342 toEng 10e-8 -> 100E-9 -dsbas343 toSci 10e-9 -> 1.0E-8 -dsbas344 toEng 10e-9 -> 10E-9 -dsbas345 toSci 10e-10 -> 1.0E-9 -dsbas346 toEng 10e-10 -> 1.0E-9 -dsbas347 toSci 10e-11 -> 1.0E-10 -dsbas348 toEng 10e-11 -> 100E-12 -dsbas349 toSci 10e-12 -> 1.0E-11 -dsbas350 toEng 10e-12 -> 10E-12 -dsbas351 toSci 10e-13 -> 1.0E-12 -dsbas352 toEng 10e-13 -> 1.0E-12 - -dsbas361 toSci 7E12 -> 7E+12 -dsbas362 toEng 7E12 -> 7E+12 -dsbas363 toSci 7E11 -> 7E+11 -dsbas364 toEng 7E11 -> 700E+9 -dsbas365 toSci 7E10 -> 7E+10 -dsbas366 toEng 7E10 -> 70E+9 -dsbas367 toSci 7E9 -> 7E+9 -dsbas368 toEng 7E9 -> 7E+9 -dsbas369 toSci 7E8 -> 7E+8 -dsbas370 toEng 7E8 -> 700E+6 -dsbas371 toSci 7E7 -> 7E+7 -dsbas372 toEng 7E7 -> 70E+6 -dsbas373 toSci 7E6 -> 7E+6 -dsbas374 toEng 7E6 -> 7E+6 -dsbas375 toSci 7E5 -> 7E+5 -dsbas376 toEng 7E5 -> 700E+3 -dsbas377 toSci 7E4 -> 7E+4 -dsbas378 toEng 7E4 -> 70E+3 -dsbas379 toSci 7E3 -> 7E+3 -dsbas380 toEng 7E3 -> 7E+3 -dsbas381 toSci 7E2 -> 7E+2 -dsbas382 toEng 7E2 -> 700 -dsbas383 toSci 7E1 -> 7E+1 -dsbas384 toEng 7E1 -> 70 -dsbas385 toSci 7E0 -> 7 -dsbas386 toEng 7E0 -> 7 -dsbas387 toSci 7E-1 -> 0.7 -dsbas388 toEng 7E-1 -> 0.7 -dsbas389 toSci 7E-2 -> 0.07 -dsbas390 toEng 7E-2 -> 0.07 -dsbas391 toSci 7E-3 -> 0.007 -dsbas392 toEng 7E-3 -> 0.007 -dsbas393 toSci 7E-4 -> 0.0007 -dsbas394 toEng 7E-4 -> 0.0007 -dsbas395 toSci 7E-5 -> 0.00007 -dsbas396 toEng 7E-5 -> 0.00007 -dsbas397 toSci 7E-6 -> 0.000007 -dsbas398 toEng 7E-6 -> 0.000007 -dsbas399 toSci 7E-7 -> 7E-7 -dsbas400 toEng 7E-7 -> 700E-9 -dsbas401 toSci 7E-8 -> 7E-8 -dsbas402 toEng 7E-8 -> 70E-9 -dsbas403 toSci 7E-9 -> 7E-9 -dsbas404 toEng 7E-9 -> 7E-9 -dsbas405 toSci 7E-10 -> 7E-10 -dsbas406 toEng 7E-10 -> 700E-12 -dsbas407 toSci 7E-11 -> 7E-11 -dsbas408 toEng 7E-11 -> 70E-12 -dsbas409 toSci 7E-12 -> 7E-12 -dsbas410 toEng 7E-12 -> 7E-12 -dsbas411 toSci 7E-13 -> 7E-13 -dsbas412 toEng 7E-13 -> 700E-15 - --- Exacts remain exact up to precision .. -dsbas420 toSci 100 -> 100 -dsbas422 toSci 1000 -> 1000 -dsbas424 toSci 999.9 -> 999.9 -dsbas426 toSci 1000.0 -> 1000.0 -dsbas428 toSci 1000.1 -> 1000.1 -dsbas430 toSci 10000 -> 10000 -dsbas432 toSci 1000 -> 1000 -dsbas434 toSci 10000 -> 10000 -dsbas436 toSci 100000 -> 100000 -dsbas438 toSci 1000000 -> 1000000 -dsbas440 toSci 10000000 -> 1.000000E+7 Rounded -dsbas442 toSci 10000000 -> 1.000000E+7 Rounded -dsbas444 toSci 10000003 -> 1.000000E+7 Rounded Inexact -dsbas446 toSci 10000005 -> 1.000000E+7 Rounded Inexact -dsbas448 toSci 100000050 -> 1.000000E+8 Rounded Inexact -dsbas450 toSci 10000009 -> 1.000001E+7 Rounded Inexact -dsbas452 toSci 100000000 -> 1.000000E+8 Rounded -dsbas454 toSci 100000003 -> 1.000000E+8 Rounded Inexact -dsbas456 toSci 100000005 -> 1.000000E+8 Rounded Inexact -dsbas458 toSci 100000009 -> 1.000000E+8 Rounded Inexact -dsbas460 toSci 1000000000 -> 1.000000E+9 Rounded -dsbas462 toSci 1000000300 -> 1.000000E+9 Rounded Inexact -dsbas464 toSci 1000000500 -> 1.000000E+9 Rounded Inexact -dsbas466 toSci 1000000900 -> 1.000001E+9 Rounded Inexact -dsbas468 toSci 10000000000 -> 1.000000E+10 Rounded -dsbas470 toSci 10000003000 -> 1.000000E+10 Rounded Inexact -dsbas472 toSci 10000005000 -> 1.000000E+10 Rounded Inexact -dsbas474 toSci 10000009000 -> 1.000001E+10 Rounded Inexact - --- check rounding modes heeded -rounding: ceiling -dsbsr401 toSci 1.1123450 -> 1.112345 Rounded -dsbsr402 toSci 1.11234549 -> 1.112346 Rounded Inexact -dsbsr403 toSci 1.11234550 -> 1.112346 Rounded Inexact -dsbsr404 toSci 1.11234551 -> 1.112346 Rounded Inexact -rounding: up -dsbsr405 toSci 1.1123450 -> 1.112345 Rounded -dsbsr406 toSci 1.11234549 -> 1.112346 Rounded Inexact -dsbsr407 toSci 1.11234550 -> 1.112346 Rounded Inexact -dsbsr408 toSci 1.11234551 -> 1.112346 Rounded Inexact -rounding: floor -dsbsr410 toSci 1.1123450 -> 1.112345 Rounded -dsbsr411 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr412 toSci 1.11234550 -> 1.112345 Rounded Inexact -dsbsr413 toSci 1.11234551 -> 1.112345 Rounded Inexact -rounding: half_down -dsbsr415 toSci 1.1123450 -> 1.112345 Rounded -dsbsr416 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr417 toSci 1.11234550 -> 1.112345 Rounded Inexact -dsbsr418 toSci 1.11234650 -> 1.112346 Rounded Inexact -dsbsr419 toSci 1.11234551 -> 1.112346 Rounded Inexact -rounding: half_even -dsbsr421 toSci 1.1123450 -> 1.112345 Rounded -dsbsr422 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr423 toSci 1.11234550 -> 1.112346 Rounded Inexact -dsbsr424 toSci 1.11234650 -> 1.112346 Rounded Inexact -dsbsr425 toSci 1.11234551 -> 1.112346 Rounded Inexact -rounding: down -dsbsr426 toSci 1.1123450 -> 1.112345 Rounded -dsbsr427 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr428 toSci 1.11234550 -> 1.112345 Rounded Inexact -dsbsr429 toSci 1.11234551 -> 1.112345 Rounded Inexact -rounding: half_up -dsbsr431 toSci 1.1123450 -> 1.112345 Rounded -dsbsr432 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr433 toSci 1.11234550 -> 1.112346 Rounded Inexact -dsbsr434 toSci 1.11234650 -> 1.112347 Rounded Inexact -dsbsr435 toSci 1.11234551 -> 1.112346 Rounded Inexact --- negatives -rounding: ceiling -dsbsr501 toSci -1.1123450 -> -1.112345 Rounded -dsbsr502 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr503 toSci -1.11234550 -> -1.112345 Rounded Inexact -dsbsr504 toSci -1.11234551 -> -1.112345 Rounded Inexact -rounding: up -dsbsr505 toSci -1.1123450 -> -1.112345 Rounded -dsbsr506 toSci -1.11234549 -> -1.112346 Rounded Inexact -dsbsr507 toSci -1.11234550 -> -1.112346 Rounded Inexact -dsbsr508 toSci -1.11234551 -> -1.112346 Rounded Inexact -rounding: floor -dsbsr510 toSci -1.1123450 -> -1.112345 Rounded -dsbsr511 toSci -1.11234549 -> -1.112346 Rounded Inexact -dsbsr512 toSci -1.11234550 -> -1.112346 Rounded Inexact -dsbsr513 toSci -1.11234551 -> -1.112346 Rounded Inexact -rounding: half_down -dsbsr515 toSci -1.1123450 -> -1.112345 Rounded -dsbsr516 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr517 toSci -1.11234550 -> -1.112345 Rounded Inexact -dsbsr518 toSci -1.11234650 -> -1.112346 Rounded Inexact -dsbsr519 toSci -1.11234551 -> -1.112346 Rounded Inexact -rounding: half_even -dsbsr521 toSci -1.1123450 -> -1.112345 Rounded -dsbsr522 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr523 toSci -1.11234550 -> -1.112346 Rounded Inexact -dsbsr524 toSci -1.11234650 -> -1.112346 Rounded Inexact -dsbsr525 toSci -1.11234551 -> -1.112346 Rounded Inexact -rounding: down -dsbsr526 toSci -1.1123450 -> -1.112345 Rounded -dsbsr527 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr528 toSci -1.11234550 -> -1.112345 Rounded Inexact -dsbsr529 toSci -1.11234551 -> -1.112345 Rounded Inexact -rounding: half_up -dsbsr531 toSci -1.1123450 -> -1.112345 Rounded -dsbsr532 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr533 toSci -1.11234550 -> -1.112346 Rounded Inexact -dsbsr534 toSci -1.11234650 -> -1.112347 Rounded Inexact -dsbsr535 toSci -1.11234551 -> -1.112346 Rounded Inexact - -rounding: half_even - --- The 'baddies' tests from DiagBigDecimal, plus some new ones -dsbas500 toSci '1..2' -> NaN Conversion_syntax -dsbas501 toSci '.' -> NaN Conversion_syntax -dsbas502 toSci '..' -> NaN Conversion_syntax -dsbas503 toSci '++1' -> NaN Conversion_syntax -dsbas504 toSci '--1' -> NaN Conversion_syntax -dsbas505 toSci '-+1' -> NaN Conversion_syntax -dsbas506 toSci '+-1' -> NaN Conversion_syntax -dsbas507 toSci '12e' -> NaN Conversion_syntax -dsbas508 toSci '12e++' -> NaN Conversion_syntax -dsbas509 toSci '12f4' -> NaN Conversion_syntax -dsbas510 toSci ' +1' -> NaN Conversion_syntax -dsbas511 toSci '+ 1' -> NaN Conversion_syntax -dsbas512 toSci '12 ' -> NaN Conversion_syntax -dsbas513 toSci ' + 1' -> NaN Conversion_syntax -dsbas514 toSci ' - 1 ' -> NaN Conversion_syntax -dsbas515 toSci 'x' -> NaN Conversion_syntax -dsbas516 toSci '-1-' -> NaN Conversion_syntax -dsbas517 toSci '12-' -> NaN Conversion_syntax -dsbas518 toSci '3+' -> NaN Conversion_syntax -dsbas519 toSci '' -> NaN Conversion_syntax -dsbas520 toSci '1e-' -> NaN Conversion_syntax -dsbas521 toSci '7e99999a' -> NaN Conversion_syntax -dsbas522 toSci '7e123567890x' -> NaN Conversion_syntax -dsbas523 toSci '7e12356789012x' -> NaN Conversion_syntax -dsbas524 toSci '' -> NaN Conversion_syntax -dsbas525 toSci 'e100' -> NaN Conversion_syntax -dsbas526 toSci '\u0e5a' -> NaN Conversion_syntax -dsbas527 toSci '\u0b65' -> NaN Conversion_syntax -dsbas528 toSci '123,65' -> NaN Conversion_syntax -dsbas529 toSci '1.34.5' -> NaN Conversion_syntax -dsbas530 toSci '.123.5' -> NaN Conversion_syntax -dsbas531 toSci '01.35.' -> NaN Conversion_syntax -dsbas532 toSci '01.35-' -> NaN Conversion_syntax -dsbas533 toSci '0000..' -> NaN Conversion_syntax -dsbas534 toSci '.0000.' -> NaN Conversion_syntax -dsbas535 toSci '00..00' -> NaN Conversion_syntax -dsbas536 toSci '111e*123' -> NaN Conversion_syntax -dsbas537 toSci '111e123-' -> NaN Conversion_syntax -dsbas538 toSci '111e+12+' -> NaN Conversion_syntax -dsbas539 toSci '111e1-3-' -> NaN Conversion_syntax -dsbas540 toSci '111e1*23' -> NaN Conversion_syntax -dsbas541 toSci '111e1e+3' -> NaN Conversion_syntax -dsbas542 toSci '1e1.0' -> NaN Conversion_syntax -dsbas543 toSci '1e123e' -> NaN Conversion_syntax -dsbas544 toSci 'ten' -> NaN Conversion_syntax -dsbas545 toSci 'ONE' -> NaN Conversion_syntax -dsbas546 toSci '1e.1' -> NaN Conversion_syntax -dsbas547 toSci '1e1.' -> NaN Conversion_syntax -dsbas548 toSci '1ee' -> NaN Conversion_syntax -dsbas549 toSci 'e+1' -> NaN Conversion_syntax -dsbas550 toSci '1.23.4' -> NaN Conversion_syntax -dsbas551 toSci '1.2.1' -> NaN Conversion_syntax -dsbas552 toSci '1E+1.2' -> NaN Conversion_syntax -dsbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax -dsbas554 toSci '1E++1' -> NaN Conversion_syntax -dsbas555 toSci '1E--1' -> NaN Conversion_syntax -dsbas556 toSci '1E+-1' -> NaN Conversion_syntax -dsbas557 toSci '1E-+1' -> NaN Conversion_syntax -dsbas558 toSci '1E''1' -> NaN Conversion_syntax -dsbas559 toSci "1E""1" -> NaN Conversion_syntax -dsbas560 toSci "1E""""" -> NaN Conversion_syntax --- Near-specials -dsbas561 toSci "qNaN" -> NaN Conversion_syntax -dsbas562 toSci "NaNq" -> NaN Conversion_syntax -dsbas563 toSci "NaNs" -> NaN Conversion_syntax -dsbas564 toSci "Infi" -> NaN Conversion_syntax -dsbas565 toSci "Infin" -> NaN Conversion_syntax -dsbas566 toSci "Infini" -> NaN Conversion_syntax -dsbas567 toSci "Infinit" -> NaN Conversion_syntax -dsbas568 toSci "-Infinit" -> NaN Conversion_syntax -dsbas569 toSci "0Inf" -> NaN Conversion_syntax -dsbas570 toSci "9Inf" -> NaN Conversion_syntax -dsbas571 toSci "-0Inf" -> NaN Conversion_syntax -dsbas572 toSci "-9Inf" -> NaN Conversion_syntax -dsbas573 toSci "-sNa" -> NaN Conversion_syntax -dsbas574 toSci "xNaN" -> NaN Conversion_syntax -dsbas575 toSci "0sNaN" -> NaN Conversion_syntax - --- some baddies with dots and Es and dots and specials -dsbas576 toSci 'e+1' -> NaN Conversion_syntax -dsbas577 toSci '.e+1' -> NaN Conversion_syntax -dsbas578 toSci '+.e+1' -> NaN Conversion_syntax -dsbas579 toSci '-.e+' -> NaN Conversion_syntax -dsbas580 toSci '-.e' -> NaN Conversion_syntax -dsbas581 toSci 'E+1' -> NaN Conversion_syntax -dsbas582 toSci '.E+1' -> NaN Conversion_syntax -dsbas583 toSci '+.E+1' -> NaN Conversion_syntax -dsbas584 toSci '-.E+' -> NaN Conversion_syntax -dsbas585 toSci '-.E' -> NaN Conversion_syntax - -dsbas586 toSci '.NaN' -> NaN Conversion_syntax -dsbas587 toSci '-.NaN' -> NaN Conversion_syntax -dsbas588 toSci '+.sNaN' -> NaN Conversion_syntax -dsbas589 toSci '+.Inf' -> NaN Conversion_syntax -dsbas590 toSci '.Infinity' -> NaN Conversion_syntax - --- Zeros -dsbas601 toSci 0.000000000 -> 0E-9 -dsbas602 toSci 0.00000000 -> 0E-8 -dsbas603 toSci 0.0000000 -> 0E-7 -dsbas604 toSci 0.000000 -> 0.000000 -dsbas605 toSci 0.00000 -> 0.00000 -dsbas606 toSci 0.0000 -> 0.0000 -dsbas607 toSci 0.000 -> 0.000 -dsbas608 toSci 0.00 -> 0.00 -dsbas609 toSci 0.0 -> 0.0 -dsbas610 toSci .0 -> 0.0 -dsbas611 toSci 0. -> 0 -dsbas612 toSci -.0 -> -0.0 -dsbas613 toSci -0. -> -0 -dsbas614 toSci -0.0 -> -0.0 -dsbas615 toSci -0.00 -> -0.00 -dsbas616 toSci -0.000 -> -0.000 -dsbas617 toSci -0.0000 -> -0.0000 -dsbas618 toSci -0.00000 -> -0.00000 -dsbas619 toSci -0.000000 -> -0.000000 -dsbas620 toSci -0.0000000 -> -0E-7 -dsbas621 toSci -0.00000000 -> -0E-8 -dsbas622 toSci -0.000000000 -> -0E-9 - -dsbas630 toSci 0.00E+0 -> 0.00 -dsbas631 toSci 0.00E+1 -> 0.0 -dsbas632 toSci 0.00E+2 -> 0 -dsbas633 toSci 0.00E+3 -> 0E+1 -dsbas634 toSci 0.00E+4 -> 0E+2 -dsbas635 toSci 0.00E+5 -> 0E+3 -dsbas636 toSci 0.00E+6 -> 0E+4 -dsbas637 toSci 0.00E+7 -> 0E+5 -dsbas638 toSci 0.00E+8 -> 0E+6 -dsbas639 toSci 0.00E+9 -> 0E+7 - -dsbas640 toSci 0.0E+0 -> 0.0 -dsbas641 toSci 0.0E+1 -> 0 -dsbas642 toSci 0.0E+2 -> 0E+1 -dsbas643 toSci 0.0E+3 -> 0E+2 -dsbas644 toSci 0.0E+4 -> 0E+3 -dsbas645 toSci 0.0E+5 -> 0E+4 -dsbas646 toSci 0.0E+6 -> 0E+5 -dsbas647 toSci 0.0E+7 -> 0E+6 -dsbas648 toSci 0.0E+8 -> 0E+7 -dsbas649 toSci 0.0E+9 -> 0E+8 - -dsbas650 toSci 0E+0 -> 0 -dsbas651 toSci 0E+1 -> 0E+1 -dsbas652 toSci 0E+2 -> 0E+2 -dsbas653 toSci 0E+3 -> 0E+3 -dsbas654 toSci 0E+4 -> 0E+4 -dsbas655 toSci 0E+5 -> 0E+5 -dsbas656 toSci 0E+6 -> 0E+6 -dsbas657 toSci 0E+7 -> 0E+7 -dsbas658 toSci 0E+8 -> 0E+8 -dsbas659 toSci 0E+9 -> 0E+9 - -dsbas660 toSci 0.0E-0 -> 0.0 -dsbas661 toSci 0.0E-1 -> 0.00 -dsbas662 toSci 0.0E-2 -> 0.000 -dsbas663 toSci 0.0E-3 -> 0.0000 -dsbas664 toSci 0.0E-4 -> 0.00000 -dsbas665 toSci 0.0E-5 -> 0.000000 -dsbas666 toSci 0.0E-6 -> 0E-7 -dsbas667 toSci 0.0E-7 -> 0E-8 -dsbas668 toSci 0.0E-8 -> 0E-9 -dsbas669 toSci 0.0E-9 -> 0E-10 - -dsbas670 toSci 0.00E-0 -> 0.00 -dsbas671 toSci 0.00E-1 -> 0.000 -dsbas672 toSci 0.00E-2 -> 0.0000 -dsbas673 toSci 0.00E-3 -> 0.00000 -dsbas674 toSci 0.00E-4 -> 0.000000 -dsbas675 toSci 0.00E-5 -> 0E-7 -dsbas676 toSci 0.00E-6 -> 0E-8 -dsbas677 toSci 0.00E-7 -> 0E-9 -dsbas678 toSci 0.00E-8 -> 0E-10 -dsbas679 toSci 0.00E-9 -> 0E-11 - -dsbas680 toSci 000000. -> 0 -dsbas681 toSci 00000. -> 0 -dsbas682 toSci 0000. -> 0 -dsbas683 toSci 000. -> 0 -dsbas684 toSci 00. -> 0 -dsbas685 toSci 0. -> 0 -dsbas686 toSci +00000. -> 0 -dsbas687 toSci -00000. -> -0 -dsbas688 toSci +0. -> 0 -dsbas689 toSci -0. -> -0 - --- Specials -dsbas700 toSci "NaN" -> NaN -dsbas701 toSci "nan" -> NaN -dsbas702 toSci "nAn" -> NaN -dsbas703 toSci "NAN" -> NaN -dsbas704 toSci "+NaN" -> NaN -dsbas705 toSci "+nan" -> NaN -dsbas706 toSci "+nAn" -> NaN -dsbas707 toSci "+NAN" -> NaN -dsbas708 toSci "-NaN" -> -NaN -dsbas709 toSci "-nan" -> -NaN -dsbas710 toSci "-nAn" -> -NaN -dsbas711 toSci "-NAN" -> -NaN -dsbas712 toSci 'NaN0' -> NaN -dsbas713 toSci 'NaN1' -> NaN1 -dsbas714 toSci 'NaN12' -> NaN12 -dsbas715 toSci 'NaN123' -> NaN123 -dsbas716 toSci 'NaN1234' -> NaN1234 -dsbas717 toSci 'NaN01' -> NaN1 -dsbas718 toSci 'NaN012' -> NaN12 -dsbas719 toSci 'NaN0123' -> NaN123 -dsbas720 toSci 'NaN01234' -> NaN1234 -dsbas721 toSci 'NaN001' -> NaN1 -dsbas722 toSci 'NaN0012' -> NaN12 -dsbas723 toSci 'NaN00123' -> NaN123 -dsbas724 toSci 'NaN001234' -> NaN1234 -dsbas725 toSci 'NaN1234567890123456' -> NaN Conversion_syntax -dsbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax -dsbas727 toSci 'NaN12.45' -> NaN Conversion_syntax -dsbas728 toSci 'NaN-12' -> NaN Conversion_syntax -dsbas729 toSci 'NaN+12' -> NaN Conversion_syntax - -dsbas730 toSci "sNaN" -> sNaN -dsbas731 toSci "snan" -> sNaN -dsbas732 toSci "SnAn" -> sNaN -dsbas733 toSci "SNAN" -> sNaN -dsbas734 toSci "+sNaN" -> sNaN -dsbas735 toSci "+snan" -> sNaN -dsbas736 toSci "+SnAn" -> sNaN -dsbas737 toSci "+SNAN" -> sNaN -dsbas738 toSci "-sNaN" -> -sNaN -dsbas739 toSci "-snan" -> -sNaN -dsbas740 toSci "-SnAn" -> -sNaN -dsbas741 toSci "-SNAN" -> -sNaN -dsbas742 toSci 'sNaN0000' -> sNaN -dsbas743 toSci 'sNaN7' -> sNaN7 -dsbas744 toSci 'sNaN007234' -> sNaN7234 -dsbas745 toSci 'sNaN7234561234567890' -> NaN Conversion_syntax -dsbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax -dsbas747 toSci 'sNaN-72' -> NaN Conversion_syntax - -dsbas748 toSci "Inf" -> Infinity -dsbas749 toSci "inf" -> Infinity -dsbas750 toSci "iNf" -> Infinity -dsbas751 toSci "INF" -> Infinity -dsbas752 toSci "+Inf" -> Infinity -dsbas753 toSci "+inf" -> Infinity -dsbas754 toSci "+iNf" -> Infinity -dsbas755 toSci "+INF" -> Infinity -dsbas756 toSci "-Inf" -> -Infinity -dsbas757 toSci "-inf" -> -Infinity -dsbas758 toSci "-iNf" -> -Infinity -dsbas759 toSci "-INF" -> -Infinity - -dsbas760 toSci "Infinity" -> Infinity -dsbas761 toSci "infinity" -> Infinity -dsbas762 toSci "iNfInItY" -> Infinity -dsbas763 toSci "INFINITY" -> Infinity -dsbas764 toSci "+Infinity" -> Infinity -dsbas765 toSci "+infinity" -> Infinity -dsbas766 toSci "+iNfInItY" -> Infinity -dsbas767 toSci "+INFINITY" -> Infinity -dsbas768 toSci "-Infinity" -> -Infinity -dsbas769 toSci "-infinity" -> -Infinity -dsbas770 toSci "-iNfInItY" -> -Infinity -dsbas771 toSci "-INFINITY" -> -Infinity - --- Specials and zeros for toEng -dsbast772 toEng "NaN" -> NaN -dsbast773 toEng "-Infinity" -> -Infinity -dsbast774 toEng "-sNaN" -> -sNaN -dsbast775 toEng "-NaN" -> -NaN -dsbast776 toEng "+Infinity" -> Infinity -dsbast778 toEng "+sNaN" -> sNaN -dsbast779 toEng "+NaN" -> NaN -dsbast780 toEng "INFINITY" -> Infinity -dsbast781 toEng "SNAN" -> sNaN -dsbast782 toEng "NAN" -> NaN -dsbast783 toEng "infinity" -> Infinity -dsbast784 toEng "snan" -> sNaN -dsbast785 toEng "nan" -> NaN -dsbast786 toEng "InFINITY" -> Infinity -dsbast787 toEng "SnAN" -> sNaN -dsbast788 toEng "nAN" -> NaN -dsbast789 toEng "iNfinity" -> Infinity -dsbast790 toEng "sNan" -> sNaN -dsbast791 toEng "Nan" -> NaN -dsbast792 toEng "Infinity" -> Infinity -dsbast793 toEng "sNaN" -> sNaN - --- Zero toEng, etc. -dsbast800 toEng 0e+1 -> "0.00E+3" -- doc example - -dsbast801 toEng 0.000000000 -> 0E-9 -dsbast802 toEng 0.00000000 -> 0.00E-6 -dsbast803 toEng 0.0000000 -> 0.0E-6 -dsbast804 toEng 0.000000 -> 0.000000 -dsbast805 toEng 0.00000 -> 0.00000 -dsbast806 toEng 0.0000 -> 0.0000 -dsbast807 toEng 0.000 -> 0.000 -dsbast808 toEng 0.00 -> 0.00 -dsbast809 toEng 0.0 -> 0.0 -dsbast810 toEng .0 -> 0.0 -dsbast811 toEng 0. -> 0 -dsbast812 toEng -.0 -> -0.0 -dsbast813 toEng -0. -> -0 -dsbast814 toEng -0.0 -> -0.0 -dsbast815 toEng -0.00 -> -0.00 -dsbast816 toEng -0.000 -> -0.000 -dsbast817 toEng -0.0000 -> -0.0000 -dsbast818 toEng -0.00000 -> -0.00000 -dsbast819 toEng -0.000000 -> -0.000000 -dsbast820 toEng -0.0000000 -> -0.0E-6 -dsbast821 toEng -0.00000000 -> -0.00E-6 -dsbast822 toEng -0.000000000 -> -0E-9 - -dsbast830 toEng 0.00E+0 -> 0.00 -dsbast831 toEng 0.00E+1 -> 0.0 -dsbast832 toEng 0.00E+2 -> 0 -dsbast833 toEng 0.00E+3 -> 0.00E+3 -dsbast834 toEng 0.00E+4 -> 0.0E+3 -dsbast835 toEng 0.00E+5 -> 0E+3 -dsbast836 toEng 0.00E+6 -> 0.00E+6 -dsbast837 toEng 0.00E+7 -> 0.0E+6 -dsbast838 toEng 0.00E+8 -> 0E+6 -dsbast839 toEng 0.00E+9 -> 0.00E+9 - -dsbast840 toEng 0.0E+0 -> 0.0 -dsbast841 toEng 0.0E+1 -> 0 -dsbast842 toEng 0.0E+2 -> 0.00E+3 -dsbast843 toEng 0.0E+3 -> 0.0E+3 -dsbast844 toEng 0.0E+4 -> 0E+3 -dsbast845 toEng 0.0E+5 -> 0.00E+6 -dsbast846 toEng 0.0E+6 -> 0.0E+6 -dsbast847 toEng 0.0E+7 -> 0E+6 -dsbast848 toEng 0.0E+8 -> 0.00E+9 -dsbast849 toEng 0.0E+9 -> 0.0E+9 - -dsbast850 toEng 0E+0 -> 0 -dsbast851 toEng 0E+1 -> 0.00E+3 -dsbast852 toEng 0E+2 -> 0.0E+3 -dsbast853 toEng 0E+3 -> 0E+3 -dsbast854 toEng 0E+4 -> 0.00E+6 -dsbast855 toEng 0E+5 -> 0.0E+6 -dsbast856 toEng 0E+6 -> 0E+6 -dsbast857 toEng 0E+7 -> 0.00E+9 -dsbast858 toEng 0E+8 -> 0.0E+9 -dsbast859 toEng 0E+9 -> 0E+9 - -dsbast860 toEng 0.0E-0 -> 0.0 -dsbast861 toEng 0.0E-1 -> 0.00 -dsbast862 toEng 0.0E-2 -> 0.000 -dsbast863 toEng 0.0E-3 -> 0.0000 -dsbast864 toEng 0.0E-4 -> 0.00000 -dsbast865 toEng 0.0E-5 -> 0.000000 -dsbast866 toEng 0.0E-6 -> 0.0E-6 -dsbast867 toEng 0.0E-7 -> 0.00E-6 -dsbast868 toEng 0.0E-8 -> 0E-9 -dsbast869 toEng 0.0E-9 -> 0.0E-9 - -dsbast870 toEng 0.00E-0 -> 0.00 -dsbast871 toEng 0.00E-1 -> 0.000 -dsbast872 toEng 0.00E-2 -> 0.0000 -dsbast873 toEng 0.00E-3 -> 0.00000 -dsbast874 toEng 0.00E-4 -> 0.000000 -dsbast875 toEng 0.00E-5 -> 0.0E-6 -dsbast876 toEng 0.00E-6 -> 0.00E-6 -dsbast877 toEng 0.00E-7 -> 0E-9 -dsbast878 toEng 0.00E-8 -> 0.0E-9 -dsbast879 toEng 0.00E-9 -> 0.00E-9 - --- long input strings -dsbas801 tosci '01234567' -> 1234567 -dsbas802 tosci '001234567' -> 1234567 -dsbas803 tosci '0001234567' -> 1234567 -dsbas804 tosci '00001234567' -> 1234567 -dsbas805 tosci '000001234567' -> 1234567 -dsbas806 tosci '0000001234567' -> 1234567 -dsbas807 tosci '00000001234567' -> 1234567 -dsbas808 tosci '000000001234567' -> 1234567 -dsbas809 tosci '0000000001234567' -> 1234567 -dsbas810 tosci '00000000001234567' -> 1234567 - -dsbas811 tosci '0.1234567' -> 0.1234567 -dsbas812 tosci '0.01234567' -> 0.01234567 -dsbas813 tosci '0.001234567' -> 0.001234567 -dsbas814 tosci '0.0001234567' -> 0.0001234567 -dsbas815 tosci '0.00001234567' -> 0.00001234567 -dsbas816 tosci '0.000001234567' -> 0.000001234567 -dsbas817 tosci '0.0000001234567' -> 1.234567E-7 -dsbas818 tosci '0.00000001234567' -> 1.234567E-8 -dsbas819 tosci '0.000000001234567' -> 1.234567E-9 -dsbas820 tosci '0.0000000001234567' -> 1.234567E-10 - -dsbas821 tosci '123456790' -> 1.234568E+8 Inexact Rounded -dsbas822 tosci '1234567901' -> 1.234568E+9 Inexact Rounded -dsbas823 tosci '12345679012' -> 1.234568E+10 Inexact Rounded -dsbas824 tosci '123456790123' -> 1.234568E+11 Inexact Rounded -dsbas825 tosci '1234567901234' -> 1.234568E+12 Inexact Rounded -dsbas826 tosci '12345679012345' -> 1.234568E+13 Inexact Rounded -dsbas827 tosci '123456790123456' -> 1.234568E+14 Inexact Rounded -dsbas828 tosci '1234567901234567' -> 1.234568E+15 Inexact Rounded -dsbas829 tosci '1234567890123456' -> 1.234568E+15 Inexact Rounded - --- subnormals and overflows -dsbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded -dsbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded -dsbas908 toSci '0.9e-999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas909 toSci '0.09e-999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded -dsbas911 toSci '10e-1000000000' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded -dsbas913 toSci '99e-9999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded -dsbas915 toSci '1111e-9999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas916 toSci '1111e-99999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded --- negatives the same -dsbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded -dsbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded -dsbas920 toSci '-0.9e-999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas921 toSci '-0.09e-999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded -dsbas923 toSci '-10e-1000000000' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded -dsbas925 toSci '-99e-9999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded -dsbas927 toSci '-1111e-9999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas928 toSci '-1111e-99999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded - --- overflow results at different rounding modes -rounding: ceiling -dsbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas931 toSci '-7e10000' -> -9.999999E+96 Overflow Inexact Rounded -rounding: up -dsbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: down -dsbas934 toSci '7e10000' -> 9.999999E+96 Overflow Inexact Rounded -dsbas935 toSci '-7e10000' -> -9.999999E+96 Overflow Inexact Rounded -rounding: floor -dsbas936 toSci '7e10000' -> 9.999999E+96 Overflow Inexact Rounded -dsbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_up -dsbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_even -dsbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_down -dsbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_even - --- Now check 854/754r some subnormals and underflow to 0 -dsbem400 toSci 1.0000E-86 -> 1.0000E-86 -dsbem401 toSci 0.1E-97 -> 1E-98 Subnormal -dsbem402 toSci 0.1000E-97 -> 1.000E-98 Subnormal -dsbem403 toSci 0.0100E-97 -> 1.00E-99 Subnormal -dsbem404 toSci 0.0010E-97 -> 1.0E-100 Subnormal -dsbem405 toSci 0.0001E-97 -> 1E-101 Subnormal -dsbem406 toSci 0.00010E-97 -> 1E-101 Subnormal Rounded -dsbem407 toSci 0.00013E-97 -> 1E-101 Underflow Subnormal Inexact Rounded -dsbem408 toSci 0.00015E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem409 toSci 0.00017E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem410 toSci 0.00023E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem411 toSci 0.00025E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem412 toSci 0.00027E-97 -> 3E-101 Underflow Subnormal Inexact Rounded -dsbem413 toSci 0.000149E-97 -> 1E-101 Underflow Subnormal Inexact Rounded -dsbem414 toSci 0.000150E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem415 toSci 0.000151E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem416 toSci 0.000249E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem417 toSci 0.000250E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem418 toSci 0.000251E-97 -> 3E-101 Underflow Subnormal Inexact Rounded -dsbem419 toSci 0.00009E-97 -> 1E-101 Underflow Subnormal Inexact Rounded -dsbem420 toSci 0.00005E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem421 toSci 0.00003E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem422 toSci 0.000009E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem423 toSci 0.000005E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem424 toSci 0.000003E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped - -dsbem425 toSci 0.001049E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded -dsbem426 toSci 0.001050E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded -dsbem427 toSci 0.001051E-97 -> 1.1E-100 Underflow Subnormal Inexact Rounded -dsbem428 toSci 0.001149E-97 -> 1.1E-100 Underflow Subnormal Inexact Rounded -dsbem429 toSci 0.001150E-97 -> 1.2E-100 Underflow Subnormal Inexact Rounded -dsbem430 toSci 0.001151E-97 -> 1.2E-100 Underflow Subnormal Inexact Rounded - -dsbem432 toSci 0.010049E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded -dsbem433 toSci 0.010050E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded -dsbem434 toSci 0.010051E-97 -> 1.01E-99 Underflow Subnormal Inexact Rounded -dsbem435 toSci 0.010149E-97 -> 1.01E-99 Underflow Subnormal Inexact Rounded -dsbem436 toSci 0.010150E-97 -> 1.02E-99 Underflow Subnormal Inexact Rounded -dsbem437 toSci 0.010151E-97 -> 1.02E-99 Underflow Subnormal Inexact Rounded - -dsbem440 toSci 0.10103E-97 -> 1.010E-98 Underflow Subnormal Inexact Rounded -dsbem441 toSci 0.10105E-97 -> 1.010E-98 Underflow Subnormal Inexact Rounded -dsbem442 toSci 0.10107E-97 -> 1.011E-98 Underflow Subnormal Inexact Rounded -dsbem443 toSci 0.10113E-97 -> 1.011E-98 Underflow Subnormal Inexact Rounded -dsbem444 toSci 0.10115E-97 -> 1.012E-98 Underflow Subnormal Inexact Rounded -dsbem445 toSci 0.10117E-97 -> 1.012E-98 Underflow Subnormal Inexact Rounded - -dsbem450 toSci 1.10730E-98 -> 1.107E-98 Underflow Subnormal Inexact Rounded -dsbem451 toSci 1.10750E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded -dsbem452 toSci 1.10770E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded -dsbem453 toSci 1.10830E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded -dsbem454 toSci 1.10850E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded -dsbem455 toSci 1.10870E-98 -> 1.109E-98 Underflow Subnormal Inexact Rounded - --- make sure sign OK -dsbem456 toSci -0.10103E-97 -> -1.010E-98 Underflow Subnormal Inexact Rounded -dsbem457 toSci -0.10105E-97 -> -1.010E-98 Underflow Subnormal Inexact Rounded -dsbem458 toSci -0.10107E-97 -> -1.011E-98 Underflow Subnormal Inexact Rounded -dsbem459 toSci -0.10113E-97 -> -1.011E-98 Underflow Subnormal Inexact Rounded -dsbem460 toSci -0.10115E-97 -> -1.012E-98 Underflow Subnormal Inexact Rounded -dsbem461 toSci -0.10117E-97 -> -1.012E-98 Underflow Subnormal Inexact Rounded - --- '999s' cases -dsbem464 toSci 999999E-98 -> 9.99999E-93 -dsbem465 toSci 99999.0E-97 -> 9.99990E-93 -dsbem466 toSci 99999.E-97 -> 9.9999E-93 -dsbem467 toSci 9999.9E-97 -> 9.9999E-94 -dsbem468 toSci 999.99E-97 -> 9.9999E-95 -dsbem469 toSci 99.999E-97 -> 9.9999E-96 Subnormal -dsbem470 toSci 9.9999E-97 -> 9.9999E-97 Subnormal -dsbem471 toSci 0.99999E-97 -> 1.0000E-97 Underflow Subnormal Inexact Rounded -dsbem472 toSci 0.099999E-97 -> 1.000E-98 Underflow Subnormal Inexact Rounded -dsbem473 toSci 0.0099999E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded -dsbem474 toSci 0.00099999E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded -dsbem475 toSci 0.000099999E-97 -> 1E-101 Underflow Subnormal Inexact Rounded -dsbem476 toSci 0.0000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem477 toSci 0.00000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem478 toSci 0.000000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped - --- Exponents with insignificant leading zeros -dsbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded -dsbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded -dsbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded -dsbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded -dsbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded -dsbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded -dsbas1007 toSci 1e-999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1008 toSci 1e-0999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1009 toSci 1e-00999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1010 toSci 1e-000999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1011 toSci 1e-000000000000999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1012 toSci 1e-000000000001000000007 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped - --- check for double-rounded subnormals -dsbas1041 toSci 1.1152444E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow -dsbas1042 toSci 1.1152445E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow -dsbas1043 toSci 1.1152446E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow - --- clamped zeros [see also clamp.decTest] -dsbas1075 toSci 0e+10000 -> 0E+90 Clamped -dsbas1076 toSci 0e-10000 -> 0E-101 Clamped -dsbas1077 toSci -0e+10000 -> -0E+90 Clamped -dsbas1078 toSci -0e-10000 -> -0E-101 Clamped - --- extreme values from next-wider -dsbas1101 toSci -9.999999999999999E+384 -> -Infinity Overflow Inexact Rounded -dsbas1102 toSci -1E-383 -> -0E-101 Inexact Rounded Subnormal Underflow Clamped -dsbas1103 toSci -1E-398 -> -0E-101 Inexact Rounded Subnormal Underflow Clamped -dsbas1104 toSci -0 -> -0 -dsbas1105 toSci +0 -> 0 -dsbas1106 toSci +1E-398 -> 0E-101 Inexact Rounded Subnormal Underflow Clamped -dsbas1107 toSci +1E-383 -> 0E-101 Inexact Rounded Subnormal Underflow Clamped -dsbas1108 toSci +9.999999999999999E+384 -> Infinity Overflow Inexact Rounded - --- narrowing case -dsbas1110 toSci 2.000000000000000E-99 -> 2.00E-99 Rounded Subnormal +------------------------------------------------------------------------ +-- dsBase.decTest -- base decSingle <--> string conversions -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests base conversions from string to a decimal number +-- and back to a string (in Scientific form) + +-- Note that unlike other operations the operand is subject to rounding +-- to conform to emax and precision settings (that is, numbers will +-- conform to rules and exponent will be in permitted range). The +-- 'left hand side', therefore, may have numbers that cannot be +-- represented in a decSingle. Some testcases go to the limit of the +-- next-wider format, and hence these testcases may also be used to +-- test narrowing and widening operations. + +extended: 1 +clamp: 1 +precision: 7 +maxExponent: 96 +minExponent: -95 +rounding: half_even + +dsbas001 toSci 0 -> 0 +dsbas002 toSci 1 -> 1 +dsbas003 toSci 1.0 -> 1.0 +dsbas004 toSci 1.00 -> 1.00 +dsbas005 toSci 10 -> 10 +dsbas006 toSci 1000 -> 1000 +dsbas007 toSci 10.0 -> 10.0 +dsbas008 toSci 10.1 -> 10.1 +dsbas009 toSci 10.4 -> 10.4 +dsbas010 toSci 10.5 -> 10.5 +dsbas011 toSci 10.6 -> 10.6 +dsbas012 toSci 10.9 -> 10.9 +dsbas013 toSci 11.0 -> 11.0 +dsbas014 toSci 1.234 -> 1.234 +dsbas015 toSci 0.123 -> 0.123 +dsbas016 toSci 0.012 -> 0.012 +dsbas017 toSci -0 -> -0 +dsbas018 toSci -0.0 -> -0.0 +dsbas019 toSci -00.00 -> -0.00 + +dsbas021 toSci -1 -> -1 +dsbas022 toSci -1.0 -> -1.0 +dsbas023 toSci -0.1 -> -0.1 +dsbas024 toSci -9.1 -> -9.1 +dsbas025 toSci -9.11 -> -9.11 +dsbas026 toSci -9.119 -> -9.119 +dsbas027 toSci -9.999 -> -9.999 + +dsbas030 toSci '1234.567' -> '1234.567' +dsbas031 toSci '1234.000' -> '1234.000' +dsbas032 toSci '1234912' -> '1234912' +dsbas033 toSci '0.00001234567' -> '0.00001234567' +dsbas034 toSci '0.000001234567' -> '0.000001234567' +dsbas035 toSci '0.0000001234567' -> '1.234567E-7' +dsbas036 toSci '0.00000001234567' -> '1.234567E-8' + +dsbas037 toSci '0.1234564' -> '0.1234564' +dsbas038 toSci '0.1234565' -> '0.1234565' + +-- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) +dsbsn001 toSci -9.999999E+96 -> -9.999999E+96 +dsbsn002 toSci -1E-95 -> -1E-95 +dsbsn003 toSci -1E-101 -> -1E-101 Subnormal +dsbsn004 toSci -0 -> -0 +dsbsn005 toSci +0 -> 0 +dsbsn006 toSci +1E-101 -> 1E-101 Subnormal +dsbsn007 toSci +1E-95 -> 1E-95 +dsbsn008 toSci +9.999999E+96 -> 9.999999E+96 + +-- String [many more examples are implicitly tested elsewhere] +-- strings without E cannot generate E in result +dsbas040 toSci "12" -> '12' +dsbas041 toSci "-76" -> '-76' +dsbas042 toSci "12.76" -> '12.76' +dsbas043 toSci "+12.76" -> '12.76' +dsbas044 toSci "012.76" -> '12.76' +dsbas045 toSci "+0.003" -> '0.003' +dsbas046 toSci "17." -> '17' +dsbas047 toSci ".5" -> '0.5' +dsbas048 toSci "044" -> '44' +dsbas049 toSci "0044" -> '44' +dsbas050 toSci "0.0005" -> '0.0005' +dsbas051 toSci "00.00005" -> '0.00005' +dsbas052 toSci "0.000005" -> '0.000005' +dsbas053 toSci "0.0000050" -> '0.0000050' +dsbas054 toSci "0.0000005" -> '5E-7' +dsbas055 toSci "0.00000005" -> '5E-8' +dsbas056 toSci "12678.54" -> '12678.54' +dsbas057 toSci "2678.543" -> '2678.543' +dsbas058 toSci "345678.5" -> '345678.5' +dsbas059 toSci "0678.5432" -> '678.5432' +dsbas060 toSci "678.5432" -> '678.5432' +dsbas061 toSci "+678.5432" -> '678.5432' +dsbas062 toSci "+0678.5432" -> '678.5432' +dsbas063 toSci "+00678.5432" -> '678.5432' +dsbas064 toSci "-678.5432" -> '-678.5432' +dsbas065 toSci "-0678.5432" -> '-678.5432' +dsbas066 toSci "-00678.5432" -> '-678.5432' +-- examples +dsbas067 toSci "5E-6" -> '0.000005' +dsbas068 toSci "50E-7" -> '0.0000050' +dsbas069 toSci "5E-7" -> '5E-7' + +-- [No exotics as no Unicode] + +-- rounded with dots in all (including edge) places +dsbas071 toSci .1234567890123456 -> 0.1234568 Inexact Rounded +dsbas072 toSci 1.234567890123456 -> 1.234568 Inexact Rounded +dsbas073 toSci 12.34567890123456 -> 12.34568 Inexact Rounded +dsbas074 toSci 123.4567890123456 -> 123.4568 Inexact Rounded +dsbas075 toSci 1234.567890123456 -> 1234.568 Inexact Rounded +dsbas076 toSci 12345.67890123456 -> 12345.68 Inexact Rounded +dsbas077 toSci 123456.7890123456 -> 123456.8 Inexact Rounded +dsbas078 toSci 1234567.890123456 -> 1234568 Inexact Rounded +dsbas079 toSci 12345678.90123456 -> 1.234568E+7 Inexact Rounded +dsbas080 toSci 123456789.0123456 -> 1.234568E+8 Inexact Rounded +dsbas081 toSci 1234567890.123456 -> 1.234568E+9 Inexact Rounded +dsbas082 toSci 12345678901.23456 -> 1.234568E+10 Inexact Rounded +dsbas083 toSci 123456789012.3456 -> 1.234568E+11 Inexact Rounded +dsbas084 toSci 1234567890123.456 -> 1.234568E+12 Inexact Rounded +dsbas085 toSci 12345678901234.56 -> 1.234568E+13 Inexact Rounded +dsbas086 toSci 123456789012345.6 -> 1.234568E+14 Inexact Rounded +dsbas087 toSci 1234567890123456. -> 1.234568E+15 Inexact Rounded +dsbas088 toSci 1234567890123456 -> 1.234568E+15 Inexact Rounded + +-- Numbers with E +dsbas130 toSci "0.000E-1" -> '0.0000' +dsbas131 toSci "0.000E-2" -> '0.00000' +dsbas132 toSci "0.000E-3" -> '0.000000' +dsbas133 toSci "0.000E-4" -> '0E-7' +dsbas134 toSci "0.00E-2" -> '0.0000' +dsbas135 toSci "0.00E-3" -> '0.00000' +dsbas136 toSci "0.00E-4" -> '0.000000' +dsbas137 toSci "0.00E-5" -> '0E-7' +dsbas138 toSci "+0E+9" -> '0E+9' +dsbas139 toSci "-0E+9" -> '-0E+9' +dsbas140 toSci "1E+9" -> '1E+9' +dsbas141 toSci "1e+09" -> '1E+9' +dsbas142 toSci "1E+90" -> '1E+90' +dsbas143 toSci "+1E+009" -> '1E+9' +dsbas144 toSci "0E+9" -> '0E+9' +dsbas145 toSci "1E+9" -> '1E+9' +dsbas146 toSci "1E+09" -> '1E+9' +dsbas147 toSci "1e+90" -> '1E+90' +dsbas148 toSci "1E+009" -> '1E+9' +dsbas149 toSci "000E+9" -> '0E+9' +dsbas150 toSci "1E9" -> '1E+9' +dsbas151 toSci "1e09" -> '1E+9' +dsbas152 toSci "1E90" -> '1E+90' +dsbas153 toSci "1E009" -> '1E+9' +dsbas154 toSci "0E9" -> '0E+9' +dsbas155 toSci "0.000e+0" -> '0.000' +dsbas156 toSci "0.000E-1" -> '0.0000' +dsbas157 toSci "4E+9" -> '4E+9' +dsbas158 toSci "44E+9" -> '4.4E+10' +dsbas159 toSci "0.73e-7" -> '7.3E-8' +dsbas160 toSci "00E+9" -> '0E+9' +dsbas161 toSci "00E-9" -> '0E-9' +dsbas162 toSci "10E+9" -> '1.0E+10' +dsbas163 toSci "10E+09" -> '1.0E+10' +dsbas164 toSci "10e+90" -> '1.0E+91' +dsbas165 toSci "10E+009" -> '1.0E+10' +dsbas166 toSci "100e+9" -> '1.00E+11' +dsbas167 toSci "100e+09" -> '1.00E+11' +dsbas168 toSci "100E+90" -> '1.00E+92' +dsbas169 toSci "100e+009" -> '1.00E+11' + +dsbas170 toSci "1.265" -> '1.265' +dsbas171 toSci "1.265E-20" -> '1.265E-20' +dsbas172 toSci "1.265E-8" -> '1.265E-8' +dsbas173 toSci "1.265E-4" -> '0.0001265' +dsbas174 toSci "1.265E-3" -> '0.001265' +dsbas175 toSci "1.265E-2" -> '0.01265' +dsbas176 toSci "1.265E-1" -> '0.1265' +dsbas177 toSci "1.265E-0" -> '1.265' +dsbas178 toSci "1.265E+1" -> '12.65' +dsbas179 toSci "1.265E+2" -> '126.5' +dsbas180 toSci "1.265E+3" -> '1265' +dsbas181 toSci "1.265E+4" -> '1.265E+4' +dsbas182 toSci "1.265E+8" -> '1.265E+8' +dsbas183 toSci "1.265E+20" -> '1.265E+20' + +dsbas190 toSci "12.65" -> '12.65' +dsbas191 toSci "12.65E-20" -> '1.265E-19' +dsbas192 toSci "12.65E-8" -> '1.265E-7' +dsbas193 toSci "12.65E-4" -> '0.001265' +dsbas194 toSci "12.65E-3" -> '0.01265' +dsbas195 toSci "12.65E-2" -> '0.1265' +dsbas196 toSci "12.65E-1" -> '1.265' +dsbas197 toSci "12.65E-0" -> '12.65' +dsbas198 toSci "12.65E+1" -> '126.5' +dsbas199 toSci "12.65E+2" -> '1265' +dsbas200 toSci "12.65E+3" -> '1.265E+4' +dsbas201 toSci "12.65E+4" -> '1.265E+5' +dsbas202 toSci "12.65E+8" -> '1.265E+9' +dsbas203 toSci "12.65E+20" -> '1.265E+21' + +dsbas210 toSci "126.5" -> '126.5' +dsbas211 toSci "126.5E-20" -> '1.265E-18' +dsbas212 toSci "126.5E-8" -> '0.000001265' +dsbas213 toSci "126.5E-4" -> '0.01265' +dsbas214 toSci "126.5E-3" -> '0.1265' +dsbas215 toSci "126.5E-2" -> '1.265' +dsbas216 toSci "126.5E-1" -> '12.65' +dsbas217 toSci "126.5E-0" -> '126.5' +dsbas218 toSci "126.5E+1" -> '1265' +dsbas219 toSci "126.5E+2" -> '1.265E+4' +dsbas220 toSci "126.5E+3" -> '1.265E+5' +dsbas221 toSci "126.5E+4" -> '1.265E+6' +dsbas222 toSci "126.5E+8" -> '1.265E+10' +dsbas223 toSci "126.5E+20" -> '1.265E+22' + +dsbas230 toSci "1265" -> '1265' +dsbas231 toSci "1265E-20" -> '1.265E-17' +dsbas232 toSci "1265E-8" -> '0.00001265' +dsbas233 toSci "1265E-4" -> '0.1265' +dsbas234 toSci "1265E-3" -> '1.265' +dsbas235 toSci "1265E-2" -> '12.65' +dsbas236 toSci "1265E-1" -> '126.5' +dsbas237 toSci "1265E-0" -> '1265' +dsbas238 toSci "1265E+1" -> '1.265E+4' +dsbas239 toSci "1265E+2" -> '1.265E+5' +dsbas240 toSci "1265E+3" -> '1.265E+6' +dsbas241 toSci "1265E+4" -> '1.265E+7' +dsbas242 toSci "1265E+8" -> '1.265E+11' +dsbas243 toSci "1265E+20" -> '1.265E+23' + +dsbas250 toSci "0.1265" -> '0.1265' +dsbas251 toSci "0.1265E-20" -> '1.265E-21' +dsbas252 toSci "0.1265E-8" -> '1.265E-9' +dsbas253 toSci "0.1265E-4" -> '0.00001265' +dsbas254 toSci "0.1265E-3" -> '0.0001265' +dsbas255 toSci "0.1265E-2" -> '0.001265' +dsbas256 toSci "0.1265E-1" -> '0.01265' +dsbas257 toSci "0.1265E-0" -> '0.1265' +dsbas258 toSci "0.1265E+1" -> '1.265' +dsbas259 toSci "0.1265E+2" -> '12.65' +dsbas260 toSci "0.1265E+3" -> '126.5' +dsbas261 toSci "0.1265E+4" -> '1265' +dsbas262 toSci "0.1265E+8" -> '1.265E+7' +dsbas263 toSci "0.1265E+20" -> '1.265E+19' + +-- some more negative zeros [systematic tests below] +dsbas290 toSci "-0.000E-1" -> '-0.0000' +dsbas291 toSci "-0.000E-2" -> '-0.00000' +dsbas292 toSci "-0.000E-3" -> '-0.000000' +dsbas293 toSci "-0.000E-4" -> '-0E-7' +dsbas294 toSci "-0.00E-2" -> '-0.0000' +dsbas295 toSci "-0.00E-3" -> '-0.00000' +dsbas296 toSci "-0.0E-2" -> '-0.000' +dsbas297 toSci "-0.0E-3" -> '-0.0000' +dsbas298 toSci "-0E-2" -> '-0.00' +dsbas299 toSci "-0E-3" -> '-0.000' + +-- Engineering notation tests +dsbas301 toSci 10e12 -> 1.0E+13 +dsbas302 toEng 10e12 -> 10E+12 +dsbas303 toSci 10e11 -> 1.0E+12 +dsbas304 toEng 10e11 -> 1.0E+12 +dsbas305 toSci 10e10 -> 1.0E+11 +dsbas306 toEng 10e10 -> 100E+9 +dsbas307 toSci 10e9 -> 1.0E+10 +dsbas308 toEng 10e9 -> 10E+9 +dsbas309 toSci 10e8 -> 1.0E+9 +dsbas310 toEng 10e8 -> 1.0E+9 +dsbas311 toSci 10e7 -> 1.0E+8 +dsbas312 toEng 10e7 -> 100E+6 +dsbas313 toSci 10e6 -> 1.0E+7 +dsbas314 toEng 10e6 -> 10E+6 +dsbas315 toSci 10e5 -> 1.0E+6 +dsbas316 toEng 10e5 -> 1.0E+6 +dsbas317 toSci 10e4 -> 1.0E+5 +dsbas318 toEng 10e4 -> 100E+3 +dsbas319 toSci 10e3 -> 1.0E+4 +dsbas320 toEng 10e3 -> 10E+3 +dsbas321 toSci 10e2 -> 1.0E+3 +dsbas322 toEng 10e2 -> 1.0E+3 +dsbas323 toSci 10e1 -> 1.0E+2 +dsbas324 toEng 10e1 -> 100 +dsbas325 toSci 10e0 -> 10 +dsbas326 toEng 10e0 -> 10 +dsbas327 toSci 10e-1 -> 1.0 +dsbas328 toEng 10e-1 -> 1.0 +dsbas329 toSci 10e-2 -> 0.10 +dsbas330 toEng 10e-2 -> 0.10 +dsbas331 toSci 10e-3 -> 0.010 +dsbas332 toEng 10e-3 -> 0.010 +dsbas333 toSci 10e-4 -> 0.0010 +dsbas334 toEng 10e-4 -> 0.0010 +dsbas335 toSci 10e-5 -> 0.00010 +dsbas336 toEng 10e-5 -> 0.00010 +dsbas337 toSci 10e-6 -> 0.000010 +dsbas338 toEng 10e-6 -> 0.000010 +dsbas339 toSci 10e-7 -> 0.0000010 +dsbas340 toEng 10e-7 -> 0.0000010 +dsbas341 toSci 10e-8 -> 1.0E-7 +dsbas342 toEng 10e-8 -> 100E-9 +dsbas343 toSci 10e-9 -> 1.0E-8 +dsbas344 toEng 10e-9 -> 10E-9 +dsbas345 toSci 10e-10 -> 1.0E-9 +dsbas346 toEng 10e-10 -> 1.0E-9 +dsbas347 toSci 10e-11 -> 1.0E-10 +dsbas348 toEng 10e-11 -> 100E-12 +dsbas349 toSci 10e-12 -> 1.0E-11 +dsbas350 toEng 10e-12 -> 10E-12 +dsbas351 toSci 10e-13 -> 1.0E-12 +dsbas352 toEng 10e-13 -> 1.0E-12 + +dsbas361 toSci 7E12 -> 7E+12 +dsbas362 toEng 7E12 -> 7E+12 +dsbas363 toSci 7E11 -> 7E+11 +dsbas364 toEng 7E11 -> 700E+9 +dsbas365 toSci 7E10 -> 7E+10 +dsbas366 toEng 7E10 -> 70E+9 +dsbas367 toSci 7E9 -> 7E+9 +dsbas368 toEng 7E9 -> 7E+9 +dsbas369 toSci 7E8 -> 7E+8 +dsbas370 toEng 7E8 -> 700E+6 +dsbas371 toSci 7E7 -> 7E+7 +dsbas372 toEng 7E7 -> 70E+6 +dsbas373 toSci 7E6 -> 7E+6 +dsbas374 toEng 7E6 -> 7E+6 +dsbas375 toSci 7E5 -> 7E+5 +dsbas376 toEng 7E5 -> 700E+3 +dsbas377 toSci 7E4 -> 7E+4 +dsbas378 toEng 7E4 -> 70E+3 +dsbas379 toSci 7E3 -> 7E+3 +dsbas380 toEng 7E3 -> 7E+3 +dsbas381 toSci 7E2 -> 7E+2 +dsbas382 toEng 7E2 -> 700 +dsbas383 toSci 7E1 -> 7E+1 +dsbas384 toEng 7E1 -> 70 +dsbas385 toSci 7E0 -> 7 +dsbas386 toEng 7E0 -> 7 +dsbas387 toSci 7E-1 -> 0.7 +dsbas388 toEng 7E-1 -> 0.7 +dsbas389 toSci 7E-2 -> 0.07 +dsbas390 toEng 7E-2 -> 0.07 +dsbas391 toSci 7E-3 -> 0.007 +dsbas392 toEng 7E-3 -> 0.007 +dsbas393 toSci 7E-4 -> 0.0007 +dsbas394 toEng 7E-4 -> 0.0007 +dsbas395 toSci 7E-5 -> 0.00007 +dsbas396 toEng 7E-5 -> 0.00007 +dsbas397 toSci 7E-6 -> 0.000007 +dsbas398 toEng 7E-6 -> 0.000007 +dsbas399 toSci 7E-7 -> 7E-7 +dsbas400 toEng 7E-7 -> 700E-9 +dsbas401 toSci 7E-8 -> 7E-8 +dsbas402 toEng 7E-8 -> 70E-9 +dsbas403 toSci 7E-9 -> 7E-9 +dsbas404 toEng 7E-9 -> 7E-9 +dsbas405 toSci 7E-10 -> 7E-10 +dsbas406 toEng 7E-10 -> 700E-12 +dsbas407 toSci 7E-11 -> 7E-11 +dsbas408 toEng 7E-11 -> 70E-12 +dsbas409 toSci 7E-12 -> 7E-12 +dsbas410 toEng 7E-12 -> 7E-12 +dsbas411 toSci 7E-13 -> 7E-13 +dsbas412 toEng 7E-13 -> 700E-15 + +-- Exacts remain exact up to precision .. +dsbas420 toSci 100 -> 100 +dsbas422 toSci 1000 -> 1000 +dsbas424 toSci 999.9 -> 999.9 +dsbas426 toSci 1000.0 -> 1000.0 +dsbas428 toSci 1000.1 -> 1000.1 +dsbas430 toSci 10000 -> 10000 +dsbas432 toSci 1000 -> 1000 +dsbas434 toSci 10000 -> 10000 +dsbas436 toSci 100000 -> 100000 +dsbas438 toSci 1000000 -> 1000000 +dsbas440 toSci 10000000 -> 1.000000E+7 Rounded +dsbas442 toSci 10000000 -> 1.000000E+7 Rounded +dsbas444 toSci 10000003 -> 1.000000E+7 Rounded Inexact +dsbas446 toSci 10000005 -> 1.000000E+7 Rounded Inexact +dsbas448 toSci 100000050 -> 1.000000E+8 Rounded Inexact +dsbas450 toSci 10000009 -> 1.000001E+7 Rounded Inexact +dsbas452 toSci 100000000 -> 1.000000E+8 Rounded +dsbas454 toSci 100000003 -> 1.000000E+8 Rounded Inexact +dsbas456 toSci 100000005 -> 1.000000E+8 Rounded Inexact +dsbas458 toSci 100000009 -> 1.000000E+8 Rounded Inexact +dsbas460 toSci 1000000000 -> 1.000000E+9 Rounded +dsbas462 toSci 1000000300 -> 1.000000E+9 Rounded Inexact +dsbas464 toSci 1000000500 -> 1.000000E+9 Rounded Inexact +dsbas466 toSci 1000000900 -> 1.000001E+9 Rounded Inexact +dsbas468 toSci 10000000000 -> 1.000000E+10 Rounded +dsbas470 toSci 10000003000 -> 1.000000E+10 Rounded Inexact +dsbas472 toSci 10000005000 -> 1.000000E+10 Rounded Inexact +dsbas474 toSci 10000009000 -> 1.000001E+10 Rounded Inexact + +-- check rounding modes heeded +rounding: ceiling +dsbsr401 toSci 1.1123450 -> 1.112345 Rounded +dsbsr402 toSci 1.11234549 -> 1.112346 Rounded Inexact +dsbsr403 toSci 1.11234550 -> 1.112346 Rounded Inexact +dsbsr404 toSci 1.11234551 -> 1.112346 Rounded Inexact +rounding: up +dsbsr405 toSci 1.1123450 -> 1.112345 Rounded +dsbsr406 toSci 1.11234549 -> 1.112346 Rounded Inexact +dsbsr407 toSci 1.11234550 -> 1.112346 Rounded Inexact +dsbsr408 toSci 1.11234551 -> 1.112346 Rounded Inexact +rounding: floor +dsbsr410 toSci 1.1123450 -> 1.112345 Rounded +dsbsr411 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr412 toSci 1.11234550 -> 1.112345 Rounded Inexact +dsbsr413 toSci 1.11234551 -> 1.112345 Rounded Inexact +rounding: half_down +dsbsr415 toSci 1.1123450 -> 1.112345 Rounded +dsbsr416 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr417 toSci 1.11234550 -> 1.112345 Rounded Inexact +dsbsr418 toSci 1.11234650 -> 1.112346 Rounded Inexact +dsbsr419 toSci 1.11234551 -> 1.112346 Rounded Inexact +rounding: half_even +dsbsr421 toSci 1.1123450 -> 1.112345 Rounded +dsbsr422 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr423 toSci 1.11234550 -> 1.112346 Rounded Inexact +dsbsr424 toSci 1.11234650 -> 1.112346 Rounded Inexact +dsbsr425 toSci 1.11234551 -> 1.112346 Rounded Inexact +rounding: down +dsbsr426 toSci 1.1123450 -> 1.112345 Rounded +dsbsr427 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr428 toSci 1.11234550 -> 1.112345 Rounded Inexact +dsbsr429 toSci 1.11234551 -> 1.112345 Rounded Inexact +rounding: half_up +dsbsr431 toSci 1.1123450 -> 1.112345 Rounded +dsbsr432 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr433 toSci 1.11234550 -> 1.112346 Rounded Inexact +dsbsr434 toSci 1.11234650 -> 1.112347 Rounded Inexact +dsbsr435 toSci 1.11234551 -> 1.112346 Rounded Inexact +-- negatives +rounding: ceiling +dsbsr501 toSci -1.1123450 -> -1.112345 Rounded +dsbsr502 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr503 toSci -1.11234550 -> -1.112345 Rounded Inexact +dsbsr504 toSci -1.11234551 -> -1.112345 Rounded Inexact +rounding: up +dsbsr505 toSci -1.1123450 -> -1.112345 Rounded +dsbsr506 toSci -1.11234549 -> -1.112346 Rounded Inexact +dsbsr507 toSci -1.11234550 -> -1.112346 Rounded Inexact +dsbsr508 toSci -1.11234551 -> -1.112346 Rounded Inexact +rounding: floor +dsbsr510 toSci -1.1123450 -> -1.112345 Rounded +dsbsr511 toSci -1.11234549 -> -1.112346 Rounded Inexact +dsbsr512 toSci -1.11234550 -> -1.112346 Rounded Inexact +dsbsr513 toSci -1.11234551 -> -1.112346 Rounded Inexact +rounding: half_down +dsbsr515 toSci -1.1123450 -> -1.112345 Rounded +dsbsr516 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr517 toSci -1.11234550 -> -1.112345 Rounded Inexact +dsbsr518 toSci -1.11234650 -> -1.112346 Rounded Inexact +dsbsr519 toSci -1.11234551 -> -1.112346 Rounded Inexact +rounding: half_even +dsbsr521 toSci -1.1123450 -> -1.112345 Rounded +dsbsr522 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr523 toSci -1.11234550 -> -1.112346 Rounded Inexact +dsbsr524 toSci -1.11234650 -> -1.112346 Rounded Inexact +dsbsr525 toSci -1.11234551 -> -1.112346 Rounded Inexact +rounding: down +dsbsr526 toSci -1.1123450 -> -1.112345 Rounded +dsbsr527 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr528 toSci -1.11234550 -> -1.112345 Rounded Inexact +dsbsr529 toSci -1.11234551 -> -1.112345 Rounded Inexact +rounding: half_up +dsbsr531 toSci -1.1123450 -> -1.112345 Rounded +dsbsr532 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr533 toSci -1.11234550 -> -1.112346 Rounded Inexact +dsbsr534 toSci -1.11234650 -> -1.112347 Rounded Inexact +dsbsr535 toSci -1.11234551 -> -1.112346 Rounded Inexact + +rounding: half_even + +-- The 'baddies' tests from DiagBigDecimal, plus some new ones +dsbas500 toSci '1..2' -> NaN Conversion_syntax +dsbas501 toSci '.' -> NaN Conversion_syntax +dsbas502 toSci '..' -> NaN Conversion_syntax +dsbas503 toSci '++1' -> NaN Conversion_syntax +dsbas504 toSci '--1' -> NaN Conversion_syntax +dsbas505 toSci '-+1' -> NaN Conversion_syntax +dsbas506 toSci '+-1' -> NaN Conversion_syntax +dsbas507 toSci '12e' -> NaN Conversion_syntax +dsbas508 toSci '12e++' -> NaN Conversion_syntax +dsbas509 toSci '12f4' -> NaN Conversion_syntax +dsbas510 toSci ' +1' -> NaN Conversion_syntax +dsbas511 toSci '+ 1' -> NaN Conversion_syntax +dsbas512 toSci '12 ' -> NaN Conversion_syntax +dsbas513 toSci ' + 1' -> NaN Conversion_syntax +dsbas514 toSci ' - 1 ' -> NaN Conversion_syntax +dsbas515 toSci 'x' -> NaN Conversion_syntax +dsbas516 toSci '-1-' -> NaN Conversion_syntax +dsbas517 toSci '12-' -> NaN Conversion_syntax +dsbas518 toSci '3+' -> NaN Conversion_syntax +dsbas519 toSci '' -> NaN Conversion_syntax +dsbas520 toSci '1e-' -> NaN Conversion_syntax +dsbas521 toSci '7e99999a' -> NaN Conversion_syntax +dsbas522 toSci '7e123567890x' -> NaN Conversion_syntax +dsbas523 toSci '7e12356789012x' -> NaN Conversion_syntax +dsbas524 toSci '' -> NaN Conversion_syntax +dsbas525 toSci 'e100' -> NaN Conversion_syntax +dsbas526 toSci '\u0e5a' -> NaN Conversion_syntax +dsbas527 toSci '\u0b65' -> NaN Conversion_syntax +dsbas528 toSci '123,65' -> NaN Conversion_syntax +dsbas529 toSci '1.34.5' -> NaN Conversion_syntax +dsbas530 toSci '.123.5' -> NaN Conversion_syntax +dsbas531 toSci '01.35.' -> NaN Conversion_syntax +dsbas532 toSci '01.35-' -> NaN Conversion_syntax +dsbas533 toSci '0000..' -> NaN Conversion_syntax +dsbas534 toSci '.0000.' -> NaN Conversion_syntax +dsbas535 toSci '00..00' -> NaN Conversion_syntax +dsbas536 toSci '111e*123' -> NaN Conversion_syntax +dsbas537 toSci '111e123-' -> NaN Conversion_syntax +dsbas538 toSci '111e+12+' -> NaN Conversion_syntax +dsbas539 toSci '111e1-3-' -> NaN Conversion_syntax +dsbas540 toSci '111e1*23' -> NaN Conversion_syntax +dsbas541 toSci '111e1e+3' -> NaN Conversion_syntax +dsbas542 toSci '1e1.0' -> NaN Conversion_syntax +dsbas543 toSci '1e123e' -> NaN Conversion_syntax +dsbas544 toSci 'ten' -> NaN Conversion_syntax +dsbas545 toSci 'ONE' -> NaN Conversion_syntax +dsbas546 toSci '1e.1' -> NaN Conversion_syntax +dsbas547 toSci '1e1.' -> NaN Conversion_syntax +dsbas548 toSci '1ee' -> NaN Conversion_syntax +dsbas549 toSci 'e+1' -> NaN Conversion_syntax +dsbas550 toSci '1.23.4' -> NaN Conversion_syntax +dsbas551 toSci '1.2.1' -> NaN Conversion_syntax +dsbas552 toSci '1E+1.2' -> NaN Conversion_syntax +dsbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax +dsbas554 toSci '1E++1' -> NaN Conversion_syntax +dsbas555 toSci '1E--1' -> NaN Conversion_syntax +dsbas556 toSci '1E+-1' -> NaN Conversion_syntax +dsbas557 toSci '1E-+1' -> NaN Conversion_syntax +dsbas558 toSci '1E''1' -> NaN Conversion_syntax +dsbas559 toSci "1E""1" -> NaN Conversion_syntax +dsbas560 toSci "1E""""" -> NaN Conversion_syntax +-- Near-specials +dsbas561 toSci "qNaN" -> NaN Conversion_syntax +dsbas562 toSci "NaNq" -> NaN Conversion_syntax +dsbas563 toSci "NaNs" -> NaN Conversion_syntax +dsbas564 toSci "Infi" -> NaN Conversion_syntax +dsbas565 toSci "Infin" -> NaN Conversion_syntax +dsbas566 toSci "Infini" -> NaN Conversion_syntax +dsbas567 toSci "Infinit" -> NaN Conversion_syntax +dsbas568 toSci "-Infinit" -> NaN Conversion_syntax +dsbas569 toSci "0Inf" -> NaN Conversion_syntax +dsbas570 toSci "9Inf" -> NaN Conversion_syntax +dsbas571 toSci "-0Inf" -> NaN Conversion_syntax +dsbas572 toSci "-9Inf" -> NaN Conversion_syntax +dsbas573 toSci "-sNa" -> NaN Conversion_syntax +dsbas574 toSci "xNaN" -> NaN Conversion_syntax +dsbas575 toSci "0sNaN" -> NaN Conversion_syntax + +-- some baddies with dots and Es and dots and specials +dsbas576 toSci 'e+1' -> NaN Conversion_syntax +dsbas577 toSci '.e+1' -> NaN Conversion_syntax +dsbas578 toSci '+.e+1' -> NaN Conversion_syntax +dsbas579 toSci '-.e+' -> NaN Conversion_syntax +dsbas580 toSci '-.e' -> NaN Conversion_syntax +dsbas581 toSci 'E+1' -> NaN Conversion_syntax +dsbas582 toSci '.E+1' -> NaN Conversion_syntax +dsbas583 toSci '+.E+1' -> NaN Conversion_syntax +dsbas584 toSci '-.E+' -> NaN Conversion_syntax +dsbas585 toSci '-.E' -> NaN Conversion_syntax + +dsbas586 toSci '.NaN' -> NaN Conversion_syntax +dsbas587 toSci '-.NaN' -> NaN Conversion_syntax +dsbas588 toSci '+.sNaN' -> NaN Conversion_syntax +dsbas589 toSci '+.Inf' -> NaN Conversion_syntax +dsbas590 toSci '.Infinity' -> NaN Conversion_syntax + +-- Zeros +dsbas601 toSci 0.000000000 -> 0E-9 +dsbas602 toSci 0.00000000 -> 0E-8 +dsbas603 toSci 0.0000000 -> 0E-7 +dsbas604 toSci 0.000000 -> 0.000000 +dsbas605 toSci 0.00000 -> 0.00000 +dsbas606 toSci 0.0000 -> 0.0000 +dsbas607 toSci 0.000 -> 0.000 +dsbas608 toSci 0.00 -> 0.00 +dsbas609 toSci 0.0 -> 0.0 +dsbas610 toSci .0 -> 0.0 +dsbas611 toSci 0. -> 0 +dsbas612 toSci -.0 -> -0.0 +dsbas613 toSci -0. -> -0 +dsbas614 toSci -0.0 -> -0.0 +dsbas615 toSci -0.00 -> -0.00 +dsbas616 toSci -0.000 -> -0.000 +dsbas617 toSci -0.0000 -> -0.0000 +dsbas618 toSci -0.00000 -> -0.00000 +dsbas619 toSci -0.000000 -> -0.000000 +dsbas620 toSci -0.0000000 -> -0E-7 +dsbas621 toSci -0.00000000 -> -0E-8 +dsbas622 toSci -0.000000000 -> -0E-9 + +dsbas630 toSci 0.00E+0 -> 0.00 +dsbas631 toSci 0.00E+1 -> 0.0 +dsbas632 toSci 0.00E+2 -> 0 +dsbas633 toSci 0.00E+3 -> 0E+1 +dsbas634 toSci 0.00E+4 -> 0E+2 +dsbas635 toSci 0.00E+5 -> 0E+3 +dsbas636 toSci 0.00E+6 -> 0E+4 +dsbas637 toSci 0.00E+7 -> 0E+5 +dsbas638 toSci 0.00E+8 -> 0E+6 +dsbas639 toSci 0.00E+9 -> 0E+7 + +dsbas640 toSci 0.0E+0 -> 0.0 +dsbas641 toSci 0.0E+1 -> 0 +dsbas642 toSci 0.0E+2 -> 0E+1 +dsbas643 toSci 0.0E+3 -> 0E+2 +dsbas644 toSci 0.0E+4 -> 0E+3 +dsbas645 toSci 0.0E+5 -> 0E+4 +dsbas646 toSci 0.0E+6 -> 0E+5 +dsbas647 toSci 0.0E+7 -> 0E+6 +dsbas648 toSci 0.0E+8 -> 0E+7 +dsbas649 toSci 0.0E+9 -> 0E+8 + +dsbas650 toSci 0E+0 -> 0 +dsbas651 toSci 0E+1 -> 0E+1 +dsbas652 toSci 0E+2 -> 0E+2 +dsbas653 toSci 0E+3 -> 0E+3 +dsbas654 toSci 0E+4 -> 0E+4 +dsbas655 toSci 0E+5 -> 0E+5 +dsbas656 toSci 0E+6 -> 0E+6 +dsbas657 toSci 0E+7 -> 0E+7 +dsbas658 toSci 0E+8 -> 0E+8 +dsbas659 toSci 0E+9 -> 0E+9 + +dsbas660 toSci 0.0E-0 -> 0.0 +dsbas661 toSci 0.0E-1 -> 0.00 +dsbas662 toSci 0.0E-2 -> 0.000 +dsbas663 toSci 0.0E-3 -> 0.0000 +dsbas664 toSci 0.0E-4 -> 0.00000 +dsbas665 toSci 0.0E-5 -> 0.000000 +dsbas666 toSci 0.0E-6 -> 0E-7 +dsbas667 toSci 0.0E-7 -> 0E-8 +dsbas668 toSci 0.0E-8 -> 0E-9 +dsbas669 toSci 0.0E-9 -> 0E-10 + +dsbas670 toSci 0.00E-0 -> 0.00 +dsbas671 toSci 0.00E-1 -> 0.000 +dsbas672 toSci 0.00E-2 -> 0.0000 +dsbas673 toSci 0.00E-3 -> 0.00000 +dsbas674 toSci 0.00E-4 -> 0.000000 +dsbas675 toSci 0.00E-5 -> 0E-7 +dsbas676 toSci 0.00E-6 -> 0E-8 +dsbas677 toSci 0.00E-7 -> 0E-9 +dsbas678 toSci 0.00E-8 -> 0E-10 +dsbas679 toSci 0.00E-9 -> 0E-11 + +dsbas680 toSci 000000. -> 0 +dsbas681 toSci 00000. -> 0 +dsbas682 toSci 0000. -> 0 +dsbas683 toSci 000. -> 0 +dsbas684 toSci 00. -> 0 +dsbas685 toSci 0. -> 0 +dsbas686 toSci +00000. -> 0 +dsbas687 toSci -00000. -> -0 +dsbas688 toSci +0. -> 0 +dsbas689 toSci -0. -> -0 + +-- Specials +dsbas700 toSci "NaN" -> NaN +dsbas701 toSci "nan" -> NaN +dsbas702 toSci "nAn" -> NaN +dsbas703 toSci "NAN" -> NaN +dsbas704 toSci "+NaN" -> NaN +dsbas705 toSci "+nan" -> NaN +dsbas706 toSci "+nAn" -> NaN +dsbas707 toSci "+NAN" -> NaN +dsbas708 toSci "-NaN" -> -NaN +dsbas709 toSci "-nan" -> -NaN +dsbas710 toSci "-nAn" -> -NaN +dsbas711 toSci "-NAN" -> -NaN +dsbas712 toSci 'NaN0' -> NaN +dsbas713 toSci 'NaN1' -> NaN1 +dsbas714 toSci 'NaN12' -> NaN12 +dsbas715 toSci 'NaN123' -> NaN123 +dsbas716 toSci 'NaN1234' -> NaN1234 +dsbas717 toSci 'NaN01' -> NaN1 +dsbas718 toSci 'NaN012' -> NaN12 +dsbas719 toSci 'NaN0123' -> NaN123 +dsbas720 toSci 'NaN01234' -> NaN1234 +dsbas721 toSci 'NaN001' -> NaN1 +dsbas722 toSci 'NaN0012' -> NaN12 +dsbas723 toSci 'NaN00123' -> NaN123 +dsbas724 toSci 'NaN001234' -> NaN1234 +dsbas725 toSci 'NaN1234567890123456' -> NaN Conversion_syntax +dsbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax +dsbas727 toSci 'NaN12.45' -> NaN Conversion_syntax +dsbas728 toSci 'NaN-12' -> NaN Conversion_syntax +dsbas729 toSci 'NaN+12' -> NaN Conversion_syntax + +dsbas730 toSci "sNaN" -> sNaN +dsbas731 toSci "snan" -> sNaN +dsbas732 toSci "SnAn" -> sNaN +dsbas733 toSci "SNAN" -> sNaN +dsbas734 toSci "+sNaN" -> sNaN +dsbas735 toSci "+snan" -> sNaN +dsbas736 toSci "+SnAn" -> sNaN +dsbas737 toSci "+SNAN" -> sNaN +dsbas738 toSci "-sNaN" -> -sNaN +dsbas739 toSci "-snan" -> -sNaN +dsbas740 toSci "-SnAn" -> -sNaN +dsbas741 toSci "-SNAN" -> -sNaN +dsbas742 toSci 'sNaN0000' -> sNaN +dsbas743 toSci 'sNaN7' -> sNaN7 +dsbas744 toSci 'sNaN007234' -> sNaN7234 +dsbas745 toSci 'sNaN7234561234567890' -> NaN Conversion_syntax +dsbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax +dsbas747 toSci 'sNaN-72' -> NaN Conversion_syntax + +dsbas748 toSci "Inf" -> Infinity +dsbas749 toSci "inf" -> Infinity +dsbas750 toSci "iNf" -> Infinity +dsbas751 toSci "INF" -> Infinity +dsbas752 toSci "+Inf" -> Infinity +dsbas753 toSci "+inf" -> Infinity +dsbas754 toSci "+iNf" -> Infinity +dsbas755 toSci "+INF" -> Infinity +dsbas756 toSci "-Inf" -> -Infinity +dsbas757 toSci "-inf" -> -Infinity +dsbas758 toSci "-iNf" -> -Infinity +dsbas759 toSci "-INF" -> -Infinity + +dsbas760 toSci "Infinity" -> Infinity +dsbas761 toSci "infinity" -> Infinity +dsbas762 toSci "iNfInItY" -> Infinity +dsbas763 toSci "INFINITY" -> Infinity +dsbas764 toSci "+Infinity" -> Infinity +dsbas765 toSci "+infinity" -> Infinity +dsbas766 toSci "+iNfInItY" -> Infinity +dsbas767 toSci "+INFINITY" -> Infinity +dsbas768 toSci "-Infinity" -> -Infinity +dsbas769 toSci "-infinity" -> -Infinity +dsbas770 toSci "-iNfInItY" -> -Infinity +dsbas771 toSci "-INFINITY" -> -Infinity + +-- Specials and zeros for toEng +dsbast772 toEng "NaN" -> NaN +dsbast773 toEng "-Infinity" -> -Infinity +dsbast774 toEng "-sNaN" -> -sNaN +dsbast775 toEng "-NaN" -> -NaN +dsbast776 toEng "+Infinity" -> Infinity +dsbast778 toEng "+sNaN" -> sNaN +dsbast779 toEng "+NaN" -> NaN +dsbast780 toEng "INFINITY" -> Infinity +dsbast781 toEng "SNAN" -> sNaN +dsbast782 toEng "NAN" -> NaN +dsbast783 toEng "infinity" -> Infinity +dsbast784 toEng "snan" -> sNaN +dsbast785 toEng "nan" -> NaN +dsbast786 toEng "InFINITY" -> Infinity +dsbast787 toEng "SnAN" -> sNaN +dsbast788 toEng "nAN" -> NaN +dsbast789 toEng "iNfinity" -> Infinity +dsbast790 toEng "sNan" -> sNaN +dsbast791 toEng "Nan" -> NaN +dsbast792 toEng "Infinity" -> Infinity +dsbast793 toEng "sNaN" -> sNaN + +-- Zero toEng, etc. +dsbast800 toEng 0e+1 -> "0.00E+3" -- doc example + +dsbast801 toEng 0.000000000 -> 0E-9 +dsbast802 toEng 0.00000000 -> 0.00E-6 +dsbast803 toEng 0.0000000 -> 0.0E-6 +dsbast804 toEng 0.000000 -> 0.000000 +dsbast805 toEng 0.00000 -> 0.00000 +dsbast806 toEng 0.0000 -> 0.0000 +dsbast807 toEng 0.000 -> 0.000 +dsbast808 toEng 0.00 -> 0.00 +dsbast809 toEng 0.0 -> 0.0 +dsbast810 toEng .0 -> 0.0 +dsbast811 toEng 0. -> 0 +dsbast812 toEng -.0 -> -0.0 +dsbast813 toEng -0. -> -0 +dsbast814 toEng -0.0 -> -0.0 +dsbast815 toEng -0.00 -> -0.00 +dsbast816 toEng -0.000 -> -0.000 +dsbast817 toEng -0.0000 -> -0.0000 +dsbast818 toEng -0.00000 -> -0.00000 +dsbast819 toEng -0.000000 -> -0.000000 +dsbast820 toEng -0.0000000 -> -0.0E-6 +dsbast821 toEng -0.00000000 -> -0.00E-6 +dsbast822 toEng -0.000000000 -> -0E-9 + +dsbast830 toEng 0.00E+0 -> 0.00 +dsbast831 toEng 0.00E+1 -> 0.0 +dsbast832 toEng 0.00E+2 -> 0 +dsbast833 toEng 0.00E+3 -> 0.00E+3 +dsbast834 toEng 0.00E+4 -> 0.0E+3 +dsbast835 toEng 0.00E+5 -> 0E+3 +dsbast836 toEng 0.00E+6 -> 0.00E+6 +dsbast837 toEng 0.00E+7 -> 0.0E+6 +dsbast838 toEng 0.00E+8 -> 0E+6 +dsbast839 toEng 0.00E+9 -> 0.00E+9 + +dsbast840 toEng 0.0E+0 -> 0.0 +dsbast841 toEng 0.0E+1 -> 0 +dsbast842 toEng 0.0E+2 -> 0.00E+3 +dsbast843 toEng 0.0E+3 -> 0.0E+3 +dsbast844 toEng 0.0E+4 -> 0E+3 +dsbast845 toEng 0.0E+5 -> 0.00E+6 +dsbast846 toEng 0.0E+6 -> 0.0E+6 +dsbast847 toEng 0.0E+7 -> 0E+6 +dsbast848 toEng 0.0E+8 -> 0.00E+9 +dsbast849 toEng 0.0E+9 -> 0.0E+9 + +dsbast850 toEng 0E+0 -> 0 +dsbast851 toEng 0E+1 -> 0.00E+3 +dsbast852 toEng 0E+2 -> 0.0E+3 +dsbast853 toEng 0E+3 -> 0E+3 +dsbast854 toEng 0E+4 -> 0.00E+6 +dsbast855 toEng 0E+5 -> 0.0E+6 +dsbast856 toEng 0E+6 -> 0E+6 +dsbast857 toEng 0E+7 -> 0.00E+9 +dsbast858 toEng 0E+8 -> 0.0E+9 +dsbast859 toEng 0E+9 -> 0E+9 + +dsbast860 toEng 0.0E-0 -> 0.0 +dsbast861 toEng 0.0E-1 -> 0.00 +dsbast862 toEng 0.0E-2 -> 0.000 +dsbast863 toEng 0.0E-3 -> 0.0000 +dsbast864 toEng 0.0E-4 -> 0.00000 +dsbast865 toEng 0.0E-5 -> 0.000000 +dsbast866 toEng 0.0E-6 -> 0.0E-6 +dsbast867 toEng 0.0E-7 -> 0.00E-6 +dsbast868 toEng 0.0E-8 -> 0E-9 +dsbast869 toEng 0.0E-9 -> 0.0E-9 + +dsbast870 toEng 0.00E-0 -> 0.00 +dsbast871 toEng 0.00E-1 -> 0.000 +dsbast872 toEng 0.00E-2 -> 0.0000 +dsbast873 toEng 0.00E-3 -> 0.00000 +dsbast874 toEng 0.00E-4 -> 0.000000 +dsbast875 toEng 0.00E-5 -> 0.0E-6 +dsbast876 toEng 0.00E-6 -> 0.00E-6 +dsbast877 toEng 0.00E-7 -> 0E-9 +dsbast878 toEng 0.00E-8 -> 0.0E-9 +dsbast879 toEng 0.00E-9 -> 0.00E-9 + +-- long input strings +dsbas801 tosci '01234567' -> 1234567 +dsbas802 tosci '001234567' -> 1234567 +dsbas803 tosci '0001234567' -> 1234567 +dsbas804 tosci '00001234567' -> 1234567 +dsbas805 tosci '000001234567' -> 1234567 +dsbas806 tosci '0000001234567' -> 1234567 +dsbas807 tosci '00000001234567' -> 1234567 +dsbas808 tosci '000000001234567' -> 1234567 +dsbas809 tosci '0000000001234567' -> 1234567 +dsbas810 tosci '00000000001234567' -> 1234567 + +dsbas811 tosci '0.1234567' -> 0.1234567 +dsbas812 tosci '0.01234567' -> 0.01234567 +dsbas813 tosci '0.001234567' -> 0.001234567 +dsbas814 tosci '0.0001234567' -> 0.0001234567 +dsbas815 tosci '0.00001234567' -> 0.00001234567 +dsbas816 tosci '0.000001234567' -> 0.000001234567 +dsbas817 tosci '0.0000001234567' -> 1.234567E-7 +dsbas818 tosci '0.00000001234567' -> 1.234567E-8 +dsbas819 tosci '0.000000001234567' -> 1.234567E-9 +dsbas820 tosci '0.0000000001234567' -> 1.234567E-10 + +dsbas821 tosci '123456790' -> 1.234568E+8 Inexact Rounded +dsbas822 tosci '1234567901' -> 1.234568E+9 Inexact Rounded +dsbas823 tosci '12345679012' -> 1.234568E+10 Inexact Rounded +dsbas824 tosci '123456790123' -> 1.234568E+11 Inexact Rounded +dsbas825 tosci '1234567901234' -> 1.234568E+12 Inexact Rounded +dsbas826 tosci '12345679012345' -> 1.234568E+13 Inexact Rounded +dsbas827 tosci '123456790123456' -> 1.234568E+14 Inexact Rounded +dsbas828 tosci '1234567901234567' -> 1.234568E+15 Inexact Rounded +dsbas829 tosci '1234567890123456' -> 1.234568E+15 Inexact Rounded + +-- subnormals and overflows +dsbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded +dsbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded +dsbas908 toSci '0.9e-999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas909 toSci '0.09e-999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded +dsbas911 toSci '10e-1000000000' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded +dsbas913 toSci '99e-9999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded +dsbas915 toSci '1111e-9999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas916 toSci '1111e-99999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded +-- negatives the same +dsbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded +dsbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded +dsbas920 toSci '-0.9e-999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas921 toSci '-0.09e-999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded +dsbas923 toSci '-10e-1000000000' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded +dsbas925 toSci '-99e-9999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded +dsbas927 toSci '-1111e-9999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas928 toSci '-1111e-99999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded + +-- overflow results at different rounding modes +rounding: ceiling +dsbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas931 toSci '-7e10000' -> -9.999999E+96 Overflow Inexact Rounded +rounding: up +dsbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: down +dsbas934 toSci '7e10000' -> 9.999999E+96 Overflow Inexact Rounded +dsbas935 toSci '-7e10000' -> -9.999999E+96 Overflow Inexact Rounded +rounding: floor +dsbas936 toSci '7e10000' -> 9.999999E+96 Overflow Inexact Rounded +dsbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_up +dsbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_even +dsbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_down +dsbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_even + +-- Now check 854/754r some subnormals and underflow to 0 +dsbem400 toSci 1.0000E-86 -> 1.0000E-86 +dsbem401 toSci 0.1E-97 -> 1E-98 Subnormal +dsbem402 toSci 0.1000E-97 -> 1.000E-98 Subnormal +dsbem403 toSci 0.0100E-97 -> 1.00E-99 Subnormal +dsbem404 toSci 0.0010E-97 -> 1.0E-100 Subnormal +dsbem405 toSci 0.0001E-97 -> 1E-101 Subnormal +dsbem406 toSci 0.00010E-97 -> 1E-101 Subnormal Rounded +dsbem407 toSci 0.00013E-97 -> 1E-101 Underflow Subnormal Inexact Rounded +dsbem408 toSci 0.00015E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem409 toSci 0.00017E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem410 toSci 0.00023E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem411 toSci 0.00025E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem412 toSci 0.00027E-97 -> 3E-101 Underflow Subnormal Inexact Rounded +dsbem413 toSci 0.000149E-97 -> 1E-101 Underflow Subnormal Inexact Rounded +dsbem414 toSci 0.000150E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem415 toSci 0.000151E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem416 toSci 0.000249E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem417 toSci 0.000250E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem418 toSci 0.000251E-97 -> 3E-101 Underflow Subnormal Inexact Rounded +dsbem419 toSci 0.00009E-97 -> 1E-101 Underflow Subnormal Inexact Rounded +dsbem420 toSci 0.00005E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem421 toSci 0.00003E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem422 toSci 0.000009E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem423 toSci 0.000005E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem424 toSci 0.000003E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped + +dsbem425 toSci 0.001049E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded +dsbem426 toSci 0.001050E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded +dsbem427 toSci 0.001051E-97 -> 1.1E-100 Underflow Subnormal Inexact Rounded +dsbem428 toSci 0.001149E-97 -> 1.1E-100 Underflow Subnormal Inexact Rounded +dsbem429 toSci 0.001150E-97 -> 1.2E-100 Underflow Subnormal Inexact Rounded +dsbem430 toSci 0.001151E-97 -> 1.2E-100 Underflow Subnormal Inexact Rounded + +dsbem432 toSci 0.010049E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded +dsbem433 toSci 0.010050E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded +dsbem434 toSci 0.010051E-97 -> 1.01E-99 Underflow Subnormal Inexact Rounded +dsbem435 toSci 0.010149E-97 -> 1.01E-99 Underflow Subnormal Inexact Rounded +dsbem436 toSci 0.010150E-97 -> 1.02E-99 Underflow Subnormal Inexact Rounded +dsbem437 toSci 0.010151E-97 -> 1.02E-99 Underflow Subnormal Inexact Rounded + +dsbem440 toSci 0.10103E-97 -> 1.010E-98 Underflow Subnormal Inexact Rounded +dsbem441 toSci 0.10105E-97 -> 1.010E-98 Underflow Subnormal Inexact Rounded +dsbem442 toSci 0.10107E-97 -> 1.011E-98 Underflow Subnormal Inexact Rounded +dsbem443 toSci 0.10113E-97 -> 1.011E-98 Underflow Subnormal Inexact Rounded +dsbem444 toSci 0.10115E-97 -> 1.012E-98 Underflow Subnormal Inexact Rounded +dsbem445 toSci 0.10117E-97 -> 1.012E-98 Underflow Subnormal Inexact Rounded + +dsbem450 toSci 1.10730E-98 -> 1.107E-98 Underflow Subnormal Inexact Rounded +dsbem451 toSci 1.10750E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded +dsbem452 toSci 1.10770E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded +dsbem453 toSci 1.10830E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded +dsbem454 toSci 1.10850E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded +dsbem455 toSci 1.10870E-98 -> 1.109E-98 Underflow Subnormal Inexact Rounded + +-- make sure sign OK +dsbem456 toSci -0.10103E-97 -> -1.010E-98 Underflow Subnormal Inexact Rounded +dsbem457 toSci -0.10105E-97 -> -1.010E-98 Underflow Subnormal Inexact Rounded +dsbem458 toSci -0.10107E-97 -> -1.011E-98 Underflow Subnormal Inexact Rounded +dsbem459 toSci -0.10113E-97 -> -1.011E-98 Underflow Subnormal Inexact Rounded +dsbem460 toSci -0.10115E-97 -> -1.012E-98 Underflow Subnormal Inexact Rounded +dsbem461 toSci -0.10117E-97 -> -1.012E-98 Underflow Subnormal Inexact Rounded + +-- '999s' cases +dsbem464 toSci 999999E-98 -> 9.99999E-93 +dsbem465 toSci 99999.0E-97 -> 9.99990E-93 +dsbem466 toSci 99999.E-97 -> 9.9999E-93 +dsbem467 toSci 9999.9E-97 -> 9.9999E-94 +dsbem468 toSci 999.99E-97 -> 9.9999E-95 +dsbem469 toSci 99.999E-97 -> 9.9999E-96 Subnormal +dsbem470 toSci 9.9999E-97 -> 9.9999E-97 Subnormal +dsbem471 toSci 0.99999E-97 -> 1.0000E-97 Underflow Subnormal Inexact Rounded +dsbem472 toSci 0.099999E-97 -> 1.000E-98 Underflow Subnormal Inexact Rounded +dsbem473 toSci 0.0099999E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded +dsbem474 toSci 0.00099999E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded +dsbem475 toSci 0.000099999E-97 -> 1E-101 Underflow Subnormal Inexact Rounded +dsbem476 toSci 0.0000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem477 toSci 0.00000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem478 toSci 0.000000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped + +-- Exponents with insignificant leading zeros +dsbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded +dsbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded +dsbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded +dsbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded +dsbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded +dsbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded +dsbas1007 toSci 1e-999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1008 toSci 1e-0999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1009 toSci 1e-00999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1010 toSci 1e-000999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1011 toSci 1e-000000000000999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1012 toSci 1e-000000000001000000007 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped + +-- check for double-rounded subnormals +dsbas1041 toSci 1.1152444E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow +dsbas1042 toSci 1.1152445E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow +dsbas1043 toSci 1.1152446E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow + +-- clamped zeros [see also clamp.decTest] +dsbas1075 toSci 0e+10000 -> 0E+90 Clamped +dsbas1076 toSci 0e-10000 -> 0E-101 Clamped +dsbas1077 toSci -0e+10000 -> -0E+90 Clamped +dsbas1078 toSci -0e-10000 -> -0E-101 Clamped + +-- extreme values from next-wider +dsbas1101 toSci -9.999999999999999E+384 -> -Infinity Overflow Inexact Rounded +dsbas1102 toSci -1E-383 -> -0E-101 Inexact Rounded Subnormal Underflow Clamped +dsbas1103 toSci -1E-398 -> -0E-101 Inexact Rounded Subnormal Underflow Clamped +dsbas1104 toSci -0 -> -0 +dsbas1105 toSci +0 -> 0 +dsbas1106 toSci +1E-398 -> 0E-101 Inexact Rounded Subnormal Underflow Clamped +dsbas1107 toSci +1E-383 -> 0E-101 Inexact Rounded Subnormal Underflow Clamped +dsbas1108 toSci +9.999999999999999E+384 -> Infinity Overflow Inexact Rounded + +-- narrowing case +dsbas1110 toSci 2.000000000000000E-99 -> 2.00E-99 Rounded Subnormal diff --git a/Lib/test/decimaltestdata/dsEncode.decTest b/Lib/test/decimaltestdata/dsEncode.decTest index 72647487595..818578b1794 100644 --- a/Lib/test/decimaltestdata/dsEncode.decTest +++ b/Lib/test/decimaltestdata/dsEncode.decTest @@ -1,372 +1,372 @@ ------------------------------------------------------------------------- --- dsEncode.decTest -- decimal four-byte format testcases -- --- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- --- [Previously called decimal32.decTest] -version: 2.59 - --- This set of tests is for the four-byte concrete representation. --- Its characteristics are: --- --- 1 bit sign --- 5 bits combination field --- 6 bits exponent continuation --- 20 bits coefficient continuation --- --- Total exponent length 8 bits --- Total coefficient length 24 bits (7 digits) --- --- Elimit = 191 (maximum encoded exponent) --- Emax = 96 (largest exponent value) --- Emin = -95 (smallest exponent value) --- bias = 101 (subtracted from encoded exponent) = -Etiny - --- The testcases here have only exactly representable data on the --- 'left-hand-side'; rounding from strings is tested in 'base' --- testcase groups. - -extended: 1 -clamp: 1 -precision: 7 -rounding: half_up -maxExponent: 96 -minExponent: -95 - --- General testcases --- (mostly derived from the Strawman 4 document and examples) -decs001 apply #A23003D0 -> -7.50 -decs002 apply -7.50 -> #A23003D0 --- derivative canonical plain strings -decs003 apply #A26003D0 -> -7.50E+3 -decs004 apply -7.50E+3 -> #A26003D0 -decs005 apply #A25003D0 -> -750 -decs006 apply -750 -> #A25003D0 -decs007 apply #A24003D0 -> -75.0 -decs008 apply -75.0 -> #A24003D0 -decs009 apply #A22003D0 -> -0.750 -decs010 apply -0.750 -> #A22003D0 -decs011 apply #A21003D0 -> -0.0750 -decs012 apply -0.0750 -> #A21003D0 -decs013 apply #A1f003D0 -> -0.000750 -decs014 apply -0.000750 -> #A1f003D0 -decs015 apply #A1d003D0 -> -0.00000750 -decs016 apply -0.00000750 -> #A1d003D0 -decs017 apply #A1c003D0 -> -7.50E-7 -decs018 apply -7.50E-7 -> #A1c003D0 - --- Normality -decs020 apply 1234567 -> #2654d2e7 -decs021 apply -1234567 -> #a654d2e7 -decs022 apply 1111111 -> #26524491 - --- Nmax and similar -decs031 apply 9.999999E+96 -> #77f3fcff -decs032 apply #77f3fcff -> 9.999999E+96 -decs033 apply 1.234567E+96 -> #47f4d2e7 -decs034 apply #47f4d2e7 -> 1.234567E+96 --- fold-downs (more below) -decs035 apply 1.23E+96 -> #47f4c000 Clamped -decs036 apply #47f4c000 -> 1.230000E+96 -decs037 apply 1E+96 -> #47f00000 Clamped -decs038 apply #47f00000 -> 1.000000E+96 - -decs051 apply 12345 -> #225049c5 -decs052 apply #225049c5 -> 12345 -decs053 apply 1234 -> #22500534 -decs054 apply #22500534 -> 1234 -decs055 apply 123 -> #225000a3 -decs056 apply #225000a3 -> 123 -decs057 apply 12 -> #22500012 -decs058 apply #22500012 -> 12 -decs059 apply 1 -> #22500001 -decs060 apply #22500001 -> 1 -decs061 apply 1.23 -> #223000a3 -decs062 apply #223000a3 -> 1.23 -decs063 apply 123.45 -> #223049c5 -decs064 apply #223049c5 -> 123.45 - --- Nmin and below -decs071 apply 1E-95 -> #00600001 -decs072 apply #00600001 -> 1E-95 -decs073 apply 1.000000E-95 -> #04000000 -decs074 apply #04000000 -> 1.000000E-95 -decs075 apply 1.000001E-95 -> #04000001 -decs076 apply #04000001 -> 1.000001E-95 - -decs077 apply 0.100000E-95 -> #00020000 Subnormal -decs07x apply 1.00000E-96 -> 1.00000E-96 Subnormal -decs078 apply #00020000 -> 1.00000E-96 Subnormal -decs079 apply 0.000010E-95 -> #00000010 Subnormal -decs080 apply #00000010 -> 1.0E-100 Subnormal -decs081 apply 0.000001E-95 -> #00000001 Subnormal -decs082 apply #00000001 -> 1E-101 Subnormal -decs083 apply 1e-101 -> #00000001 Subnormal -decs084 apply #00000001 -> 1E-101 Subnormal -decs08x apply 1e-101 -> 1E-101 Subnormal - --- underflows cannot be tested; just check edge case -decs090 apply 1e-101 -> #00000001 Subnormal - --- same again, negatives -- - --- Nmax and similar -decs122 apply -9.999999E+96 -> #f7f3fcff -decs123 apply #f7f3fcff -> -9.999999E+96 -decs124 apply -1.234567E+96 -> #c7f4d2e7 -decs125 apply #c7f4d2e7 -> -1.234567E+96 --- fold-downs (more below) -decs130 apply -1.23E+96 -> #c7f4c000 Clamped -decs131 apply #c7f4c000 -> -1.230000E+96 -decs132 apply -1E+96 -> #c7f00000 Clamped -decs133 apply #c7f00000 -> -1.000000E+96 - -decs151 apply -12345 -> #a25049c5 -decs152 apply #a25049c5 -> -12345 -decs153 apply -1234 -> #a2500534 -decs154 apply #a2500534 -> -1234 -decs155 apply -123 -> #a25000a3 -decs156 apply #a25000a3 -> -123 -decs157 apply -12 -> #a2500012 -decs158 apply #a2500012 -> -12 -decs159 apply -1 -> #a2500001 -decs160 apply #a2500001 -> -1 -decs161 apply -1.23 -> #a23000a3 -decs162 apply #a23000a3 -> -1.23 -decs163 apply -123.45 -> #a23049c5 -decs164 apply #a23049c5 -> -123.45 - --- Nmin and below -decs171 apply -1E-95 -> #80600001 -decs172 apply #80600001 -> -1E-95 -decs173 apply -1.000000E-95 -> #84000000 -decs174 apply #84000000 -> -1.000000E-95 -decs175 apply -1.000001E-95 -> #84000001 -decs176 apply #84000001 -> -1.000001E-95 - -decs177 apply -0.100000E-95 -> #80020000 Subnormal -decs178 apply #80020000 -> -1.00000E-96 Subnormal -decs179 apply -0.000010E-95 -> #80000010 Subnormal -decs180 apply #80000010 -> -1.0E-100 Subnormal -decs181 apply -0.000001E-95 -> #80000001 Subnormal -decs182 apply #80000001 -> -1E-101 Subnormal -decs183 apply -1e-101 -> #80000001 Subnormal -decs184 apply #80000001 -> -1E-101 Subnormal - --- underflow edge case -decs190 apply -1e-101 -> #80000001 Subnormal - --- zeros -decs400 apply 0E-400 -> #00000000 Clamped -decs401 apply 0E-101 -> #00000000 -decs402 apply #00000000 -> 0E-101 -decs403 apply 0.000000E-95 -> #00000000 -decs404 apply #00000000 -> 0E-101 -decs405 apply 0E-2 -> #22300000 -decs406 apply #22300000 -> 0.00 -decs407 apply 0 -> #22500000 -decs408 apply #22500000 -> 0 -decs409 apply 0E+3 -> #22800000 -decs410 apply #22800000 -> 0E+3 -decs411 apply 0E+90 -> #43f00000 -decs412 apply #43f00000 -> 0E+90 --- clamped zeros... -decs413 apply 0E+91 -> #43f00000 Clamped -decs414 apply #43f00000 -> 0E+90 -decs415 apply 0E+96 -> #43f00000 Clamped -decs416 apply #43f00000 -> 0E+90 -decs417 apply 0E+400 -> #43f00000 Clamped -decs418 apply #43f00000 -> 0E+90 - --- negative zeros -decs420 apply -0E-400 -> #80000000 Clamped -decs421 apply -0E-101 -> #80000000 -decs422 apply #80000000 -> -0E-101 -decs423 apply -0.000000E-95 -> #80000000 -decs424 apply #80000000 -> -0E-101 -decs425 apply -0E-2 -> #a2300000 -decs426 apply #a2300000 -> -0.00 -decs427 apply -0 -> #a2500000 -decs428 apply #a2500000 -> -0 -decs429 apply -0E+3 -> #a2800000 -decs430 apply #a2800000 -> -0E+3 -decs431 apply -0E+90 -> #c3f00000 -decs432 apply #c3f00000 -> -0E+90 --- clamped zeros... -decs433 apply -0E+91 -> #c3f00000 Clamped -decs434 apply #c3f00000 -> -0E+90 -decs435 apply -0E+96 -> #c3f00000 Clamped -decs436 apply #c3f00000 -> -0E+90 -decs437 apply -0E+400 -> #c3f00000 Clamped -decs438 apply #c3f00000 -> -0E+90 - --- Specials -decs500 apply Infinity -> #78000000 -decs501 apply #78787878 -> #78000000 -decs502 apply #78000000 -> Infinity -decs503 apply #79797979 -> #78000000 -decs504 apply #79000000 -> Infinity -decs505 apply #7a7a7a7a -> #78000000 -decs506 apply #7a000000 -> Infinity -decs507 apply #7b7b7b7b -> #78000000 -decs508 apply #7b000000 -> Infinity -decs509 apply #7c7c7c7c -> #7c0c7c7c - -decs510 apply NaN -> #7c000000 -decs511 apply #7c000000 -> NaN -decs512 apply #7d7d7d7d -> #7c0d7d7d -decs513 apply #7d000000 -> NaN -decs514 apply #7e7e7e7e -> #7e0e7c7e -decs515 apply #7e000000 -> sNaN -decs516 apply #7f7f7f7f -> #7e0f7c7f -decs517 apply #7f000000 -> sNaN -decs518 apply #7fffffff -> sNaN999999 -decs519 apply #7fffffff -> #7e03fcff - -decs520 apply -Infinity -> #f8000000 -decs521 apply #f8787878 -> #f8000000 -decs522 apply #f8000000 -> -Infinity -decs523 apply #f9797979 -> #f8000000 -decs524 apply #f9000000 -> -Infinity -decs525 apply #fa7a7a7a -> #f8000000 -decs526 apply #fa000000 -> -Infinity -decs527 apply #fb7b7b7b -> #f8000000 -decs528 apply #fb000000 -> -Infinity - -decs529 apply -NaN -> #fc000000 -decs530 apply #fc7c7c7c -> #fc0c7c7c -decs531 apply #fc000000 -> -NaN -decs532 apply #fd7d7d7d -> #fc0d7d7d -decs533 apply #fd000000 -> -NaN -decs534 apply #fe7e7e7e -> #fe0e7c7e -decs535 apply #fe000000 -> -sNaN -decs536 apply #ff7f7f7f -> #fe0f7c7f -decs537 apply #ff000000 -> -sNaN -decs538 apply #ffffffff -> -sNaN999999 -decs539 apply #ffffffff -> #fe03fcff - --- diagnostic NaNs -decs540 apply NaN -> #7c000000 -decs541 apply NaN0 -> #7c000000 -decs542 apply NaN1 -> #7c000001 -decs543 apply NaN12 -> #7c000012 -decs544 apply NaN79 -> #7c000079 -decs545 apply NaN12345 -> #7c0049c5 -decs546 apply NaN123456 -> #7c028e56 -decs547 apply NaN799799 -> #7c0f7fdf -decs548 apply NaN999999 -> #7c03fcff - - --- fold-down full sequence -decs601 apply 1E+96 -> #47f00000 Clamped -decs602 apply #47f00000 -> 1.000000E+96 -decs603 apply 1E+95 -> #43f20000 Clamped -decs604 apply #43f20000 -> 1.00000E+95 -decs605 apply 1E+94 -> #43f04000 Clamped -decs606 apply #43f04000 -> 1.0000E+94 -decs607 apply 1E+93 -> #43f00400 Clamped -decs608 apply #43f00400 -> 1.000E+93 -decs609 apply 1E+92 -> #43f00080 Clamped -decs610 apply #43f00080 -> 1.00E+92 -decs611 apply 1E+91 -> #43f00010 Clamped -decs612 apply #43f00010 -> 1.0E+91 -decs613 apply 1E+90 -> #43f00001 -decs614 apply #43f00001 -> 1E+90 - - --- Selected DPD codes -decs700 apply #22500000 -> 0 -decs701 apply #22500009 -> 9 -decs702 apply #22500010 -> 10 -decs703 apply #22500019 -> 19 -decs704 apply #22500020 -> 20 -decs705 apply #22500029 -> 29 -decs706 apply #22500030 -> 30 -decs707 apply #22500039 -> 39 -decs708 apply #22500040 -> 40 -decs709 apply #22500049 -> 49 -decs710 apply #22500050 -> 50 -decs711 apply #22500059 -> 59 -decs712 apply #22500060 -> 60 -decs713 apply #22500069 -> 69 -decs714 apply #22500070 -> 70 -decs715 apply #22500071 -> 71 -decs716 apply #22500072 -> 72 -decs717 apply #22500073 -> 73 -decs718 apply #22500074 -> 74 -decs719 apply #22500075 -> 75 -decs720 apply #22500076 -> 76 -decs721 apply #22500077 -> 77 -decs722 apply #22500078 -> 78 -decs723 apply #22500079 -> 79 - -decs730 apply #2250029e -> 994 -decs731 apply #2250029f -> 995 -decs732 apply #225002a0 -> 520 -decs733 apply #225002a1 -> 521 - --- DPD: one of each of the huffman groups -decs740 apply #225003f7 -> 777 -decs741 apply #225003f8 -> 778 -decs742 apply #225003eb -> 787 -decs743 apply #2250037d -> 877 -decs744 apply #2250039f -> 997 -decs745 apply #225003bf -> 979 -decs746 apply #225003df -> 799 -decs747 apply #2250006e -> 888 - - --- DPD all-highs cases (includes the 24 redundant codes) -decs750 apply #2250006e -> 888 -decs751 apply #2250016e -> 888 -decs752 apply #2250026e -> 888 -decs753 apply #2250036e -> 888 -decs754 apply #2250006f -> 889 -decs755 apply #2250016f -> 889 -decs756 apply #2250026f -> 889 -decs757 apply #2250036f -> 889 - -decs760 apply #2250007e -> 898 -decs761 apply #2250017e -> 898 -decs762 apply #2250027e -> 898 -decs763 apply #2250037e -> 898 -decs764 apply #2250007f -> 899 -decs765 apply #2250017f -> 899 -decs766 apply #2250027f -> 899 -decs767 apply #2250037f -> 899 - -decs770 apply #225000ee -> 988 -decs771 apply #225001ee -> 988 -decs772 apply #225002ee -> 988 -decs773 apply #225003ee -> 988 -decs774 apply #225000ef -> 989 -decs775 apply #225001ef -> 989 -decs776 apply #225002ef -> 989 -decs777 apply #225003ef -> 989 - -decs780 apply #225000fe -> 998 -decs781 apply #225001fe -> 998 -decs782 apply #225002fe -> 998 -decs783 apply #225003fe -> 998 -decs784 apply #225000ff -> 999 -decs785 apply #225001ff -> 999 -decs786 apply #225002ff -> 999 -decs787 apply #225003ff -> 999 - --- narrowing case -decs790 apply 2.00E-99 -> #00000100 Subnormal -decs791 apply #00000100 -> 2.00E-99 Subnormal +------------------------------------------------------------------------ +-- dsEncode.decTest -- decimal four-byte format testcases -- +-- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +-- [Previously called decimal32.decTest] +version: 2.59 + +-- This set of tests is for the four-byte concrete representation. +-- Its characteristics are: +-- +-- 1 bit sign +-- 5 bits combination field +-- 6 bits exponent continuation +-- 20 bits coefficient continuation +-- +-- Total exponent length 8 bits +-- Total coefficient length 24 bits (7 digits) +-- +-- Elimit = 191 (maximum encoded exponent) +-- Emax = 96 (largest exponent value) +-- Emin = -95 (smallest exponent value) +-- bias = 101 (subtracted from encoded exponent) = -Etiny + +-- The testcases here have only exactly representable data on the +-- 'left-hand-side'; rounding from strings is tested in 'base' +-- testcase groups. + +extended: 1 +clamp: 1 +precision: 7 +rounding: half_up +maxExponent: 96 +minExponent: -95 + +-- General testcases +-- (mostly derived from the Strawman 4 document and examples) +decs001 apply #A23003D0 -> -7.50 +decs002 apply -7.50 -> #A23003D0 +-- derivative canonical plain strings +decs003 apply #A26003D0 -> -7.50E+3 +decs004 apply -7.50E+3 -> #A26003D0 +decs005 apply #A25003D0 -> -750 +decs006 apply -750 -> #A25003D0 +decs007 apply #A24003D0 -> -75.0 +decs008 apply -75.0 -> #A24003D0 +decs009 apply #A22003D0 -> -0.750 +decs010 apply -0.750 -> #A22003D0 +decs011 apply #A21003D0 -> -0.0750 +decs012 apply -0.0750 -> #A21003D0 +decs013 apply #A1f003D0 -> -0.000750 +decs014 apply -0.000750 -> #A1f003D0 +decs015 apply #A1d003D0 -> -0.00000750 +decs016 apply -0.00000750 -> #A1d003D0 +decs017 apply #A1c003D0 -> -7.50E-7 +decs018 apply -7.50E-7 -> #A1c003D0 + +-- Normality +decs020 apply 1234567 -> #2654d2e7 +decs021 apply -1234567 -> #a654d2e7 +decs022 apply 1111111 -> #26524491 + +-- Nmax and similar +decs031 apply 9.999999E+96 -> #77f3fcff +decs032 apply #77f3fcff -> 9.999999E+96 +decs033 apply 1.234567E+96 -> #47f4d2e7 +decs034 apply #47f4d2e7 -> 1.234567E+96 +-- fold-downs (more below) +decs035 apply 1.23E+96 -> #47f4c000 Clamped +decs036 apply #47f4c000 -> 1.230000E+96 +decs037 apply 1E+96 -> #47f00000 Clamped +decs038 apply #47f00000 -> 1.000000E+96 + +decs051 apply 12345 -> #225049c5 +decs052 apply #225049c5 -> 12345 +decs053 apply 1234 -> #22500534 +decs054 apply #22500534 -> 1234 +decs055 apply 123 -> #225000a3 +decs056 apply #225000a3 -> 123 +decs057 apply 12 -> #22500012 +decs058 apply #22500012 -> 12 +decs059 apply 1 -> #22500001 +decs060 apply #22500001 -> 1 +decs061 apply 1.23 -> #223000a3 +decs062 apply #223000a3 -> 1.23 +decs063 apply 123.45 -> #223049c5 +decs064 apply #223049c5 -> 123.45 + +-- Nmin and below +decs071 apply 1E-95 -> #00600001 +decs072 apply #00600001 -> 1E-95 +decs073 apply 1.000000E-95 -> #04000000 +decs074 apply #04000000 -> 1.000000E-95 +decs075 apply 1.000001E-95 -> #04000001 +decs076 apply #04000001 -> 1.000001E-95 + +decs077 apply 0.100000E-95 -> #00020000 Subnormal +decs07x apply 1.00000E-96 -> 1.00000E-96 Subnormal +decs078 apply #00020000 -> 1.00000E-96 Subnormal +decs079 apply 0.000010E-95 -> #00000010 Subnormal +decs080 apply #00000010 -> 1.0E-100 Subnormal +decs081 apply 0.000001E-95 -> #00000001 Subnormal +decs082 apply #00000001 -> 1E-101 Subnormal +decs083 apply 1e-101 -> #00000001 Subnormal +decs084 apply #00000001 -> 1E-101 Subnormal +decs08x apply 1e-101 -> 1E-101 Subnormal + +-- underflows cannot be tested; just check edge case +decs090 apply 1e-101 -> #00000001 Subnormal + +-- same again, negatives -- + +-- Nmax and similar +decs122 apply -9.999999E+96 -> #f7f3fcff +decs123 apply #f7f3fcff -> -9.999999E+96 +decs124 apply -1.234567E+96 -> #c7f4d2e7 +decs125 apply #c7f4d2e7 -> -1.234567E+96 +-- fold-downs (more below) +decs130 apply -1.23E+96 -> #c7f4c000 Clamped +decs131 apply #c7f4c000 -> -1.230000E+96 +decs132 apply -1E+96 -> #c7f00000 Clamped +decs133 apply #c7f00000 -> -1.000000E+96 + +decs151 apply -12345 -> #a25049c5 +decs152 apply #a25049c5 -> -12345 +decs153 apply -1234 -> #a2500534 +decs154 apply #a2500534 -> -1234 +decs155 apply -123 -> #a25000a3 +decs156 apply #a25000a3 -> -123 +decs157 apply -12 -> #a2500012 +decs158 apply #a2500012 -> -12 +decs159 apply -1 -> #a2500001 +decs160 apply #a2500001 -> -1 +decs161 apply -1.23 -> #a23000a3 +decs162 apply #a23000a3 -> -1.23 +decs163 apply -123.45 -> #a23049c5 +decs164 apply #a23049c5 -> -123.45 + +-- Nmin and below +decs171 apply -1E-95 -> #80600001 +decs172 apply #80600001 -> -1E-95 +decs173 apply -1.000000E-95 -> #84000000 +decs174 apply #84000000 -> -1.000000E-95 +decs175 apply -1.000001E-95 -> #84000001 +decs176 apply #84000001 -> -1.000001E-95 + +decs177 apply -0.100000E-95 -> #80020000 Subnormal +decs178 apply #80020000 -> -1.00000E-96 Subnormal +decs179 apply -0.000010E-95 -> #80000010 Subnormal +decs180 apply #80000010 -> -1.0E-100 Subnormal +decs181 apply -0.000001E-95 -> #80000001 Subnormal +decs182 apply #80000001 -> -1E-101 Subnormal +decs183 apply -1e-101 -> #80000001 Subnormal +decs184 apply #80000001 -> -1E-101 Subnormal + +-- underflow edge case +decs190 apply -1e-101 -> #80000001 Subnormal + +-- zeros +decs400 apply 0E-400 -> #00000000 Clamped +decs401 apply 0E-101 -> #00000000 +decs402 apply #00000000 -> 0E-101 +decs403 apply 0.000000E-95 -> #00000000 +decs404 apply #00000000 -> 0E-101 +decs405 apply 0E-2 -> #22300000 +decs406 apply #22300000 -> 0.00 +decs407 apply 0 -> #22500000 +decs408 apply #22500000 -> 0 +decs409 apply 0E+3 -> #22800000 +decs410 apply #22800000 -> 0E+3 +decs411 apply 0E+90 -> #43f00000 +decs412 apply #43f00000 -> 0E+90 +-- clamped zeros... +decs413 apply 0E+91 -> #43f00000 Clamped +decs414 apply #43f00000 -> 0E+90 +decs415 apply 0E+96 -> #43f00000 Clamped +decs416 apply #43f00000 -> 0E+90 +decs417 apply 0E+400 -> #43f00000 Clamped +decs418 apply #43f00000 -> 0E+90 + +-- negative zeros +decs420 apply -0E-400 -> #80000000 Clamped +decs421 apply -0E-101 -> #80000000 +decs422 apply #80000000 -> -0E-101 +decs423 apply -0.000000E-95 -> #80000000 +decs424 apply #80000000 -> -0E-101 +decs425 apply -0E-2 -> #a2300000 +decs426 apply #a2300000 -> -0.00 +decs427 apply -0 -> #a2500000 +decs428 apply #a2500000 -> -0 +decs429 apply -0E+3 -> #a2800000 +decs430 apply #a2800000 -> -0E+3 +decs431 apply -0E+90 -> #c3f00000 +decs432 apply #c3f00000 -> -0E+90 +-- clamped zeros... +decs433 apply -0E+91 -> #c3f00000 Clamped +decs434 apply #c3f00000 -> -0E+90 +decs435 apply -0E+96 -> #c3f00000 Clamped +decs436 apply #c3f00000 -> -0E+90 +decs437 apply -0E+400 -> #c3f00000 Clamped +decs438 apply #c3f00000 -> -0E+90 + +-- Specials +decs500 apply Infinity -> #78000000 +decs501 apply #78787878 -> #78000000 +decs502 apply #78000000 -> Infinity +decs503 apply #79797979 -> #78000000 +decs504 apply #79000000 -> Infinity +decs505 apply #7a7a7a7a -> #78000000 +decs506 apply #7a000000 -> Infinity +decs507 apply #7b7b7b7b -> #78000000 +decs508 apply #7b000000 -> Infinity +decs509 apply #7c7c7c7c -> #7c0c7c7c + +decs510 apply NaN -> #7c000000 +decs511 apply #7c000000 -> NaN +decs512 apply #7d7d7d7d -> #7c0d7d7d +decs513 apply #7d000000 -> NaN +decs514 apply #7e7e7e7e -> #7e0e7c7e +decs515 apply #7e000000 -> sNaN +decs516 apply #7f7f7f7f -> #7e0f7c7f +decs517 apply #7f000000 -> sNaN +decs518 apply #7fffffff -> sNaN999999 +decs519 apply #7fffffff -> #7e03fcff + +decs520 apply -Infinity -> #f8000000 +decs521 apply #f8787878 -> #f8000000 +decs522 apply #f8000000 -> -Infinity +decs523 apply #f9797979 -> #f8000000 +decs524 apply #f9000000 -> -Infinity +decs525 apply #fa7a7a7a -> #f8000000 +decs526 apply #fa000000 -> -Infinity +decs527 apply #fb7b7b7b -> #f8000000 +decs528 apply #fb000000 -> -Infinity + +decs529 apply -NaN -> #fc000000 +decs530 apply #fc7c7c7c -> #fc0c7c7c +decs531 apply #fc000000 -> -NaN +decs532 apply #fd7d7d7d -> #fc0d7d7d +decs533 apply #fd000000 -> -NaN +decs534 apply #fe7e7e7e -> #fe0e7c7e +decs535 apply #fe000000 -> -sNaN +decs536 apply #ff7f7f7f -> #fe0f7c7f +decs537 apply #ff000000 -> -sNaN +decs538 apply #ffffffff -> -sNaN999999 +decs539 apply #ffffffff -> #fe03fcff + +-- diagnostic NaNs +decs540 apply NaN -> #7c000000 +decs541 apply NaN0 -> #7c000000 +decs542 apply NaN1 -> #7c000001 +decs543 apply NaN12 -> #7c000012 +decs544 apply NaN79 -> #7c000079 +decs545 apply NaN12345 -> #7c0049c5 +decs546 apply NaN123456 -> #7c028e56 +decs547 apply NaN799799 -> #7c0f7fdf +decs548 apply NaN999999 -> #7c03fcff + + +-- fold-down full sequence +decs601 apply 1E+96 -> #47f00000 Clamped +decs602 apply #47f00000 -> 1.000000E+96 +decs603 apply 1E+95 -> #43f20000 Clamped +decs604 apply #43f20000 -> 1.00000E+95 +decs605 apply 1E+94 -> #43f04000 Clamped +decs606 apply #43f04000 -> 1.0000E+94 +decs607 apply 1E+93 -> #43f00400 Clamped +decs608 apply #43f00400 -> 1.000E+93 +decs609 apply 1E+92 -> #43f00080 Clamped +decs610 apply #43f00080 -> 1.00E+92 +decs611 apply 1E+91 -> #43f00010 Clamped +decs612 apply #43f00010 -> 1.0E+91 +decs613 apply 1E+90 -> #43f00001 +decs614 apply #43f00001 -> 1E+90 + + +-- Selected DPD codes +decs700 apply #22500000 -> 0 +decs701 apply #22500009 -> 9 +decs702 apply #22500010 -> 10 +decs703 apply #22500019 -> 19 +decs704 apply #22500020 -> 20 +decs705 apply #22500029 -> 29 +decs706 apply #22500030 -> 30 +decs707 apply #22500039 -> 39 +decs708 apply #22500040 -> 40 +decs709 apply #22500049 -> 49 +decs710 apply #22500050 -> 50 +decs711 apply #22500059 -> 59 +decs712 apply #22500060 -> 60 +decs713 apply #22500069 -> 69 +decs714 apply #22500070 -> 70 +decs715 apply #22500071 -> 71 +decs716 apply #22500072 -> 72 +decs717 apply #22500073 -> 73 +decs718 apply #22500074 -> 74 +decs719 apply #22500075 -> 75 +decs720 apply #22500076 -> 76 +decs721 apply #22500077 -> 77 +decs722 apply #22500078 -> 78 +decs723 apply #22500079 -> 79 + +decs730 apply #2250029e -> 994 +decs731 apply #2250029f -> 995 +decs732 apply #225002a0 -> 520 +decs733 apply #225002a1 -> 521 + +-- DPD: one of each of the huffman groups +decs740 apply #225003f7 -> 777 +decs741 apply #225003f8 -> 778 +decs742 apply #225003eb -> 787 +decs743 apply #2250037d -> 877 +decs744 apply #2250039f -> 997 +decs745 apply #225003bf -> 979 +decs746 apply #225003df -> 799 +decs747 apply #2250006e -> 888 + + +-- DPD all-highs cases (includes the 24 redundant codes) +decs750 apply #2250006e -> 888 +decs751 apply #2250016e -> 888 +decs752 apply #2250026e -> 888 +decs753 apply #2250036e -> 888 +decs754 apply #2250006f -> 889 +decs755 apply #2250016f -> 889 +decs756 apply #2250026f -> 889 +decs757 apply #2250036f -> 889 + +decs760 apply #2250007e -> 898 +decs761 apply #2250017e -> 898 +decs762 apply #2250027e -> 898 +decs763 apply #2250037e -> 898 +decs764 apply #2250007f -> 899 +decs765 apply #2250017f -> 899 +decs766 apply #2250027f -> 899 +decs767 apply #2250037f -> 899 + +decs770 apply #225000ee -> 988 +decs771 apply #225001ee -> 988 +decs772 apply #225002ee -> 988 +decs773 apply #225003ee -> 988 +decs774 apply #225000ef -> 989 +decs775 apply #225001ef -> 989 +decs776 apply #225002ef -> 989 +decs777 apply #225003ef -> 989 + +decs780 apply #225000fe -> 998 +decs781 apply #225001fe -> 998 +decs782 apply #225002fe -> 998 +decs783 apply #225003fe -> 998 +decs784 apply #225000ff -> 999 +decs785 apply #225001ff -> 999 +decs786 apply #225002ff -> 999 +decs787 apply #225003ff -> 999 + +-- narrowing case +decs790 apply 2.00E-99 -> #00000100 Subnormal +decs791 apply #00000100 -> 2.00E-99 Subnormal diff --git a/Lib/test/decimaltestdata/exp.decTest b/Lib/test/decimaltestdata/exp.decTest index e01d7a8f92d..c2cc741cb3d 100644 --- a/Lib/test/decimaltestdata/exp.decTest +++ b/Lib/test/decimaltestdata/exp.decTest @@ -1,674 +1,674 @@ ------------------------------------------------------------------------- --- exp.decTest -- decimal natural exponentiation -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Tests of the exponential function. Currently all testcases here --- show results which are correctly rounded (within <= 0.5 ulp). - -extended: 1 -precision: 9 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- basics (examples in specification, etc.) -expx001 exp -Infinity -> 0 -expx002 exp -10 -> 0.0000453999298 Inexact Rounded -expx003 exp -1 -> 0.367879441 Inexact Rounded -expx004 exp 0 -> 1 -expx005 exp -0 -> 1 -expx006 exp 1 -> 2.71828183 Inexact Rounded -expx007 exp 0.693147181 -> 2.00000000 Inexact Rounded -expx008 exp 10 -> 22026.4658 Inexact Rounded -expx009 exp +Infinity -> Infinity - --- tiny edge cases -precision: 7 -expx011 exp 0.1 -> 1.105171 Inexact Rounded -expx012 exp 0.01 -> 1.010050 Inexact Rounded -expx013 exp 0.001 -> 1.001001 Inexact Rounded -expx014 exp 0.0001 -> 1.000100 Inexact Rounded -expx015 exp 0.00001 -> 1.000010 Inexact Rounded -expx016 exp 0.000001 -> 1.000001 Inexact Rounded -expx017 exp 0.0000001 -> 1.000000 Inexact Rounded -expx018 exp 0.0000003 -> 1.000000 Inexact Rounded -expx019 exp 0.0000004 -> 1.000000 Inexact Rounded -expx020 exp 0.0000005 -> 1.000001 Inexact Rounded -expx021 exp 0.0000008 -> 1.000001 Inexact Rounded -expx022 exp 0.0000009 -> 1.000001 Inexact Rounded -expx023 exp 0.0000010 -> 1.000001 Inexact Rounded -expx024 exp 0.0000011 -> 1.000001 Inexact Rounded -expx025 exp 0.00000009 -> 1.000000 Inexact Rounded -expx026 exp 0.00000005 -> 1.000000 Inexact Rounded -expx027 exp 0.00000004 -> 1.000000 Inexact Rounded -expx028 exp 0.00000001 -> 1.000000 Inexact Rounded - --- and some more zeros -expx030 exp 0.00000000 -> 1 -expx031 exp 0E+100 -> 1 -expx032 exp 0E-100 -> 1 -expx033 exp -0.00000000 -> 1 -expx034 exp -0E+100 -> 1 -expx035 exp -0E-100 -> 1 - --- basic e=0, e=1, e=2, e=4, e>=8 cases -precision: 7 -expx041 exp 1 -> 2.718282 Inexact Rounded -expx042 exp -1 -> 0.3678794 Inexact Rounded -expx043 exp 10 -> 22026.47 Inexact Rounded -expx044 exp -10 -> 0.00004539993 Inexact Rounded -expx045 exp 100 -> 2.688117E+43 Inexact Rounded -expx046 exp -100 -> 3.720076E-44 Inexact Rounded -expx047 exp 1000 -> Infinity Overflow Inexact Rounded -expx048 exp -1000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx049 exp 100000000 -> Infinity Overflow Inexact Rounded -expx050 exp -100000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal - --- miscellanea --- similar to 'VF bug' test, at 17, but with last digit corrected for decimal -precision: 16 -expx055 exp -5.42410311287441459172E+2 -> 2.717658486884572E-236 Inexact Rounded --- result from NetRexx/Java prototype -> 2.7176584868845721117677929628617246054459644711108E-236 --- result from Rexx (series) version -> 2.717658486884572111767792962861724605446E-236 -precision: 17 -expx056 exp -5.42410311287441459172E+2 -> 2.7176584868845721E-236 Inexact Rounded -precision: 18 -expx057 exp -5.42410311287441459172E+2 -> 2.71765848688457211E-236 Inexact Rounded -precision: 19 -expx058 exp -5.42410311287441459172E+2 -> 2.717658486884572112E-236 Inexact Rounded -precision: 20 -expx059 exp -5.42410311287441459172E+2 -> 2.7176584868845721118E-236 Inexact Rounded - --- rounding in areas of ..500.., ..499.., ..100.., ..999.. sequences -precision: 50 -expx101 exp -9E-8 -> 0.99999991000000404999987850000273374995079250073811 Inexact Rounded -precision: 31 -expx102 exp -9E-8 -> 0.9999999100000040499998785000027 Inexact Rounded -precision: 30 -expx103 exp -9E-8 -> 0.999999910000004049999878500003 Inexact Rounded -precision: 29 -expx104 exp -9E-8 -> 0.99999991000000404999987850000 Inexact Rounded -precision: 28 -expx105 exp -9E-8 -> 0.9999999100000040499998785000 Inexact Rounded -precision: 27 -expx106 exp -9E-8 -> 0.999999910000004049999878500 Inexact Rounded -precision: 26 -expx107 exp -9E-8 -> 0.99999991000000404999987850 Inexact Rounded -precision: 25 -expx108 exp -9E-8 -> 0.9999999100000040499998785 Inexact Rounded -precision: 24 -expx109 exp -9E-8 -> 0.999999910000004049999879 Inexact Rounded -precision: 23 -expx110 exp -9E-8 -> 0.99999991000000404999988 Inexact Rounded -precision: 22 -expx111 exp -9E-8 -> 0.9999999100000040499999 Inexact Rounded -precision: 21 -expx112 exp -9E-8 -> 0.999999910000004050000 Inexact Rounded -precision: 20 -expx113 exp -9E-8 -> 0.99999991000000405000 Inexact Rounded -precision: 19 -expx114 exp -9E-8 -> 0.9999999100000040500 Inexact Rounded -precision: 18 -expx115 exp -9E-8 -> 0.999999910000004050 Inexact Rounded -precision: 17 -expx116 exp -9E-8 -> 0.99999991000000405 Inexact Rounded -precision: 16 -expx117 exp -9E-8 -> 0.9999999100000040 Inexact Rounded -precision: 15 -expx118 exp -9E-8 -> 0.999999910000004 Inexact Rounded -precision: 14 -expx119 exp -9E-8 -> 0.99999991000000 Inexact Rounded -precision: 13 -expx120 exp -9E-8 -> 0.9999999100000 Inexact Rounded -precision: 12 -expx121 exp -9E-8 -> 0.999999910000 Inexact Rounded -precision: 11 -expx122 exp -9E-8 -> 0.99999991000 Inexact Rounded -precision: 10 -expx123 exp -9E-8 -> 0.9999999100 Inexact Rounded -precision: 9 -expx124 exp -9E-8 -> 0.999999910 Inexact Rounded -precision: 8 -expx125 exp -9E-8 -> 0.99999991 Inexact Rounded -precision: 7 -expx126 exp -9E-8 -> 0.9999999 Inexact Rounded -precision: 6 -expx127 exp -9E-8 -> 1.00000 Inexact Rounded -precision: 5 -expx128 exp -9E-8 -> 1.0000 Inexact Rounded -precision: 4 -expx129 exp -9E-8 -> 1.000 Inexact Rounded -precision: 3 -expx130 exp -9E-8 -> 1.00 Inexact Rounded -precision: 2 -expx131 exp -9E-8 -> 1.0 Inexact Rounded -precision: 1 -expx132 exp -9E-8 -> 1 Inexact Rounded - - --- sanity checks, with iteration counts [normalized so 0<=|x|<1] -precision: 50 - -expx210 exp 0 -> 1 --- iterations: 2 -expx211 exp -1E-40 -> 0.99999999999999999999999999999999999999990000000000 Inexact Rounded --- iterations: 8 -expx212 exp -9E-7 -> 0.99999910000040499987850002733749507925073811240510 Inexact Rounded --- iterations: 6 -expx213 exp -9E-8 -> 0.99999991000000404999987850000273374995079250073811 Inexact Rounded --- iterations: 15 -expx214 exp -0.003 -> 0.99700449550337297601206623409756091074177480489845 Inexact Rounded --- iterations: 14 -expx215 exp -0.001 -> 0.99900049983337499166805535716765597470235590236008 Inexact Rounded --- iterations: 26 -expx216 exp -0.1 -> 0.90483741803595957316424905944643662119470536098040 Inexact Rounded --- iterations: 39 -expx217 exp -0.7 -> 0.49658530379140951470480009339752896170766716571182 Inexact Rounded --- iterations: 41 -expx218 exp -0.9 -> 0.40656965974059911188345423964562598783370337617038 Inexact Rounded --- iterations: 43 -expx219 exp -0.99 -> 0.37157669102204569053152411990820138691802885490501 Inexact Rounded --- iterations: 26 -expx220 exp -1 -> 0.36787944117144232159552377016146086744581113103177 Inexact Rounded --- iterations: 26 -expx221 exp -1.01 -> 0.36421897957152331975704629563734548959589139192482 Inexact Rounded --- iterations: 27 -expx222 exp -1.1 -> 0.33287108369807955328884690643131552161247952156921 Inexact Rounded --- iterations: 28 -expx223 exp -1.5 -> 0.22313016014842982893328047076401252134217162936108 Inexact Rounded --- iterations: 30 -expx224 exp -2 -> 0.13533528323661269189399949497248440340763154590958 Inexact Rounded --- iterations: 36 -expx225 exp -5 -> 0.0067379469990854670966360484231484242488495850273551 Inexact Rounded --- iterations: 26 -expx226 exp -10 -> 0.000045399929762484851535591515560550610237918088866565 Inexact Rounded --- iterations: 28 -expx227 exp -14 -> 8.3152871910356788406398514256526229460765836498457E-7 Inexact Rounded --- iterations: 29 -expx228 exp -15 -> 3.0590232050182578837147949770228963937082078081856E-7 Inexact Rounded --- iterations: 30 -expx233 exp 0 -> 1 --- iterations: 2 -expx234 exp 1E-40 -> 1.0000000000000000000000000000000000000001000000000 Inexact Rounded --- iterations: 7 -expx235 exp 9E-7 -> 1.0000009000004050001215000273375049207507381125949 Inexact Rounded --- iterations: 6 -expx236 exp 9E-8 -> 1.0000000900000040500001215000027337500492075007381 Inexact Rounded --- iterations: 15 -expx237 exp 0.003 -> 1.0030045045033770260129340913489002053318727195619 Inexact Rounded --- iterations: 13 -expx238 exp 0.001 -> 1.0010005001667083416680557539930583115630762005807 Inexact Rounded --- iterations: 25 -expx239 exp 0.1 -> 1.1051709180756476248117078264902466682245471947375 Inexact Rounded --- iterations: 38 -expx240 exp 0.7 -> 2.0137527074704765216245493885830652700175423941459 Inexact Rounded --- iterations: 41 -expx241 exp 0.9 -> 2.4596031111569496638001265636024706954217723064401 Inexact Rounded --- iterations: 42 -expx242 exp 0.99 -> 2.6912344723492622890998794040710139721802931841030 Inexact Rounded --- iterations: 26 -expx243 exp 1 -> 2.7182818284590452353602874713526624977572470937000 Inexact Rounded --- iterations: 26 -expx244 exp 1.01 -> 2.7456010150169164939897763166603876240737508195960 Inexact Rounded --- iterations: 26 -expx245 exp 1.1 -> 3.0041660239464331120584079535886723932826810260163 Inexact Rounded --- iterations: 28 -expx246 exp 1.5 -> 4.4816890703380648226020554601192758190057498683697 Inexact Rounded --- iterations: 29 -expx247 exp 2 -> 7.3890560989306502272304274605750078131803155705518 Inexact Rounded --- iterations: 36 -expx248 exp 5 -> 148.41315910257660342111558004055227962348766759388 Inexact Rounded --- iterations: 26 -expx249 exp 10 -> 22026.465794806716516957900645284244366353512618557 Inexact Rounded --- iterations: 28 -expx250 exp 14 -> 1202604.2841647767777492367707678594494124865433761 Inexact Rounded --- iterations: 28 -expx251 exp 15 -> 3269017.3724721106393018550460917213155057385438200 Inexact Rounded --- iterations: 29 - --- a biggie [result verified 3 ways] -precision: 250 -expx260 exp 1 -> 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668 Inexact Rounded - --- extreme range boundaries -precision: 16 -maxExponent: 999999 -minExponent: -999999 --- Ntiny boundary -expx290 exp -2302618.022332529 -> 0E-1000014 Underflow Subnormal Inexact Rounded Clamped -expx291 exp -2302618.022332528 -> 1E-1000014 Underflow Subnormal Inexact Rounded --- Nmax/10 and Nmax boundary -expx292 exp 2302582.790408952 -> 9.999999993100277E+999998 Inexact Rounded -expx293 exp 2302582.790408953 -> 1.000000000310028E+999999 Inexact Rounded -expx294 exp 2302585.092993946 -> 9.999999003159870E+999999 Inexact Rounded -expx295 exp 2302585.092994036 -> 9.999999903159821E+999999 Inexact Rounded -expx296 exp 2302585.092994045 -> 9.999999993159820E+999999 Inexact Rounded -expx297 exp 2302585.092994046 -> Infinity Overflow Inexact Rounded - --- 0<-x<<1 effects -precision: 30 -expx320 exp -4.9999999999999E-8 -> 0.999999950000001250000979166617 Inexact Rounded -expx321 exp -5.0000000000000E-8 -> 0.999999950000001249999979166667 Inexact Rounded -expx322 exp -5.0000000000001E-8 -> 0.999999950000001249998979166717 Inexact Rounded -precision: 20 -expx323 exp -4.9999999999999E-8 -> 0.99999995000000125000 Inexact Rounded -expx324 exp -5.0000000000000E-8 -> 0.99999995000000125000 Inexact Rounded -expx325 exp -5.0000000000001E-8 -> 0.99999995000000125000 Inexact Rounded -precision: 14 -expx326 exp -4.9999999999999E-8 -> 0.99999995000000 Inexact Rounded -expx327 exp -5.0000000000000E-8 -> 0.99999995000000 Inexact Rounded -expx328 exp -5.0000000000001E-8 -> 0.99999995000000 Inexact Rounded --- overprecise and 0<-x<<1 -precision: 8 -expx330 exp -4.9999999999999E-8 -> 0.99999995 Inexact Rounded -expx331 exp -5.0000000000000E-8 -> 0.99999995 Inexact Rounded -expx332 exp -5.0000000000001E-8 -> 0.99999995 Inexact Rounded -precision: 7 -expx333 exp -4.9999999999999E-8 -> 1.000000 Inexact Rounded -expx334 exp -5.0000000000000E-8 -> 1.000000 Inexact Rounded -expx335 exp -5.0000000000001E-8 -> 1.000000 Inexact Rounded -precision: 3 -expx336 exp -4.9999999999999E-8 -> 1.00 Inexact Rounded -expx337 exp -5.0000000000000E-8 -> 1.00 Inexact Rounded -expx338 exp -5.0000000000001E-8 -> 1.00 Inexact Rounded - --- 0 1.00000005000000124999902083328 Inexact Rounded -expx341 exp 5.0000000000000E-8 -> 1.00000005000000125000002083333 Inexact Rounded -expx342 exp 5.0000000000001E-8 -> 1.00000005000000125000102083338 Inexact Rounded -precision: 20 -expx343 exp 4.9999999999999E-8 -> 1.0000000500000012500 Inexact Rounded -expx344 exp 5.0000000000000E-8 -> 1.0000000500000012500 Inexact Rounded -expx345 exp 5.0000000000001E-8 -> 1.0000000500000012500 Inexact Rounded -precision: 14 -expx346 exp 4.9999999999999E-8 -> 1.0000000500000 Inexact Rounded -expx347 exp 5.0000000000000E-8 -> 1.0000000500000 Inexact Rounded -expx348 exp 5.0000000000001E-8 -> 1.0000000500000 Inexact Rounded --- overprecise and 0 1.0000001 Inexact Rounded -expx351 exp 5.0000000000000E-8 -> 1.0000001 Inexact Rounded -expx352 exp 5.0000000000001E-8 -> 1.0000001 Inexact Rounded -precision: 7 -expx353 exp 4.9999999999999E-8 -> 1.000000 Inexact Rounded -expx354 exp 5.0000000000000E-8 -> 1.000000 Inexact Rounded -expx355 exp 5.0000000000001E-8 -> 1.000000 Inexact Rounded -precision: 3 -expx356 exp 4.9999999999999E-8 -> 1.00 Inexact Rounded -expx357 exp 5.0000000000000E-8 -> 1.00 Inexact Rounded -expx358 exp 5.0000000000001E-8 -> 1.00 Inexact Rounded - --- cases near 1 -- 1 2345678901234567890 -precision: 20 -expx401 exp 0.99999999999996 -> 2.7182818284589365041 Inexact Rounded -expx402 exp 0.99999999999997 -> 2.7182818284589636869 Inexact Rounded -expx403 exp 0.99999999999998 -> 2.7182818284589908697 Inexact Rounded -expx404 exp 0.99999999999999 -> 2.7182818284590180525 Inexact Rounded -expx405 exp 1.0000000000000 -> 2.7182818284590452354 Inexact Rounded -expx406 exp 1.0000000000001 -> 2.7182818284593170635 Inexact Rounded -expx407 exp 1.0000000000002 -> 2.7182818284595888917 Inexact Rounded -precision: 14 -expx411 exp 0.99999999999996 -> 2.7182818284589 Inexact Rounded -expx412 exp 0.99999999999997 -> 2.7182818284590 Inexact Rounded -expx413 exp 0.99999999999998 -> 2.7182818284590 Inexact Rounded -expx414 exp 0.99999999999999 -> 2.7182818284590 Inexact Rounded -expx415 exp 1.0000000000000 -> 2.7182818284590 Inexact Rounded -expx416 exp 1.0000000000001 -> 2.7182818284593 Inexact Rounded -expx417 exp 1.0000000000002 -> 2.7182818284596 Inexact Rounded --- overprecise... -precision: 7 -expx421 exp 0.99999999999996 -> 2.718282 Inexact Rounded -expx422 exp 0.99999999999997 -> 2.718282 Inexact Rounded -expx423 exp 0.99999999999998 -> 2.718282 Inexact Rounded -expx424 exp 0.99999999999999 -> 2.718282 Inexact Rounded -expx425 exp 1.0000000000001 -> 2.718282 Inexact Rounded -expx426 exp 1.0000000000002 -> 2.718282 Inexact Rounded -expx427 exp 1.0000000000003 -> 2.718282 Inexact Rounded -precision: 2 -expx431 exp 0.99999999999996 -> 2.7 Inexact Rounded -expx432 exp 0.99999999999997 -> 2.7 Inexact Rounded -expx433 exp 0.99999999999998 -> 2.7 Inexact Rounded -expx434 exp 0.99999999999999 -> 2.7 Inexact Rounded -expx435 exp 1.0000000000001 -> 2.7 Inexact Rounded -expx436 exp 1.0000000000002 -> 2.7 Inexact Rounded -expx437 exp 1.0000000000003 -> 2.7 Inexact Rounded - --- basics at low precisions -precision: 3 -expx501 exp -Infinity -> 0 -expx502 exp -10 -> 0.0000454 Inexact Rounded -expx503 exp -1 -> 0.368 Inexact Rounded -expx504 exp 0 -> 1 -expx505 exp -0 -> 1 -expx506 exp 1 -> 2.72 Inexact Rounded -expx507 exp 0.693147181 -> 2.00 Inexact Rounded -expx508 exp 10 -> 2.20E+4 Inexact Rounded -expx509 exp +Infinity -> Infinity -precision: 2 -expx511 exp -Infinity -> 0 -expx512 exp -10 -> 0.000045 Inexact Rounded -expx513 exp -1 -> 0.37 Inexact Rounded -expx514 exp 0 -> 1 -expx515 exp -0 -> 1 -expx516 exp 1 -> 2.7 Inexact Rounded -expx517 exp 0.693147181 -> 2.0 Inexact Rounded -expx518 exp 10 -> 2.2E+4 Inexact Rounded -expx519 exp +Infinity -> Infinity -precision: 1 -expx521 exp -Infinity -> 0 -expx522 exp -10 -> 0.00005 Inexact Rounded -expx523 exp -1 -> 0.4 Inexact Rounded -expx524 exp 0 -> 1 -expx525 exp -0 -> 1 -expx526 exp 1 -> 3 Inexact Rounded -expx527 exp 0.693147181 -> 2 Inexact Rounded -expx528 exp 10 -> 2E+4 Inexact Rounded -expx529 exp +Infinity -> Infinity - --- overflows, including some overprecise borderlines -precision: 7 -maxExponent: 384 -minExponent: -383 -expx701 exp 1000000000 -> Infinity Overflow Inexact Rounded -expx702 exp 100000000 -> Infinity Overflow Inexact Rounded -expx703 exp 10000000 -> Infinity Overflow Inexact Rounded -expx704 exp 1000000 -> Infinity Overflow Inexact Rounded -expx705 exp 100000 -> Infinity Overflow Inexact Rounded -expx706 exp 10000 -> Infinity Overflow Inexact Rounded -expx707 exp 1000 -> Infinity Overflow Inexact Rounded -expx708 exp 886.4952608 -> Infinity Overflow Inexact Rounded -expx709 exp 886.4952607 -> 9.999999E+384 Inexact Rounded -expx710 exp 886.49527 -> Infinity Overflow Inexact Rounded -expx711 exp 886.49526 -> 9.999992E+384 Inexact Rounded -precision: 16 -expx721 exp 886.4952608027075883 -> Infinity Overflow Inexact Rounded -expx722 exp 886.4952608027075882 -> 9.999999999999999E+384 Inexact Rounded -expx723 exp 886.49526080270759 -> Infinity Overflow Inexact Rounded -expx724 exp 886.49526080270758 -> 9.999999999999917E+384 Inexact Rounded -expx725 exp 886.4952608027076 -> Infinity Overflow Inexact Rounded -expx726 exp 886.4952608027075 -> 9.999999999999117E+384 Inexact Rounded --- and by special request ... -precision: 15 -expx731 exp 886.495260802708 -> Infinity Overflow Inexact Rounded -expx732 exp 886.495260802707 -> 9.99999999999412E+384 Inexact Rounded -expx733 exp 886.495260802706 -> 9.99999999998412E+384 Inexact Rounded -maxExponent: 999 -minExponent: -999 -expx735 exp 2302.58509299405 -> Infinity Overflow Inexact Rounded -expx736 exp 2302.58509299404 -> 9.99999999994316E+999 Inexact Rounded -expx737 exp 2302.58509299403 -> 9.99999999984316E+999 Inexact Rounded - --- subnormals and underflows, including underflow-to-zero edge point -precision: 7 -maxExponent: 384 -minExponent: -383 -expx751 exp -1000000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx752 exp -100000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx753 exp -10000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx754 exp -1000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx755 exp -100000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx756 exp -10000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx757 exp -1000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx758 exp -881.89009 -> 1.000001E-383 Inexact Rounded -expx759 exp -881.8901 -> 9.99991E-384 Inexact Rounded Underflow Subnormal -expx760 exp -885 -> 4.4605E-385 Inexact Rounded Underflow Subnormal -expx761 exp -888 -> 2.221E-386 Inexact Rounded Underflow Subnormal -expx762 exp -890 -> 3.01E-387 Inexact Rounded Underflow Subnormal -expx763 exp -892.9 -> 1.7E-388 Inexact Rounded Underflow Subnormal -expx764 exp -893 -> 1.5E-388 Inexact Rounded Underflow Subnormal -expx765 exp -893.5 -> 9E-389 Inexact Rounded Underflow Subnormal -expx766 exp -895.7056 -> 1E-389 Inexact Rounded Underflow Subnormal -expx769 exp -895.8 -> 1E-389 Inexact Rounded Underflow Subnormal -expx770 exp -895.73 -> 1E-389 Inexact Rounded Underflow Subnormal -expx771 exp -896.3987 -> 1E-389 Inexact Rounded Underflow Subnormal -expx772 exp -896.3988 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped -expx773 exp -898.0081 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped -expx774 exp -898.0082 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped - --- special values -maxexponent: 999 -minexponent: -999 -expx820 exp Inf -> Infinity -expx821 exp -Inf -> 0 -expx822 exp NaN -> NaN -expx823 exp sNaN -> NaN Invalid_operation --- propagating NaNs -expx824 exp sNaN123 -> NaN123 Invalid_operation -expx825 exp -sNaN321 -> -NaN321 Invalid_operation -expx826 exp NaN456 -> NaN456 -expx827 exp -NaN654 -> -NaN654 -expx828 exp NaN1 -> NaN1 - --- Invalid operations due to restrictions --- [next two probably skipped by most test harnesses] -precision: 100000000 -expx901 exp -Infinity -> NaN Invalid_context -precision: 99999999 -expx902 exp -Infinity -> NaN Invalid_context - -precision: 9 -maxExponent: 1000000 -minExponent: -999999 -expx903 exp -Infinity -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999999 -expx904 exp -Infinity -> 0 -maxExponent: 999999 -minExponent: -1000000 -expx905 exp -Infinity -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999998 -expx906 exp -Infinity -> 0 - --- -maxExponent: 384 -minExponent: -383 -precision: 16 -rounding: half_even - --- Null test -expx900 exp # -> NaN Invalid_operation - - --- Randoms P=50, within 0-999 -Precision: 50 -maxExponent: 384 -minExponent: -383 -expx1501 exp 656.35397950590285612266095596539934213943872885728 -> 1.1243757610640319783611178528839652672062820040314E+285 Inexact Rounded -expx1502 exp 0.93620571093652800225038550600780322831236082781471 -> 2.5502865130986176689199711857825771311178046842009 Inexact Rounded -expx1503 exp 0.00000000000000008340785856601514714183373874105791 -> 1.0000000000000000834078585660151506202691740252512 Inexact Rounded -expx1504 exp 0.00009174057262887789625745574686545163168788456203 -> 1.0000917447809239005146722341251524081006051473273 Inexact Rounded -expx1505 exp 33.909116897973797735657751591014926629051117541243 -> 532773181025002.03543618901306726495870476617232229 Inexact Rounded -expx1506 exp 0.00000740470413004406592124575295278456936809587311 -> 1.0000074047315449333590066395670306135567889210814 Inexact Rounded -expx1507 exp 0.00000000000124854922222108802453746922483071445492 -> 1.0000000000012485492222218674621176239911424968263 Inexact Rounded -expx1508 exp 4.1793280674155659794286951159430651258356014391382 -> 65.321946520147199404199787811336860087975118278185 Inexact Rounded -expx1509 exp 485.43595745460655893746179890255529919221550201686 -> 6.6398403920459617255950476953129377459845366585463E+210 Inexact Rounded -expx1510 exp 0.00000000003547259806590856032527875157830328156597 -> 1.0000000000354725980665377129320589406715000685515 Inexact Rounded -expx1511 exp 0.00000000000000759621497339104047930616478635042678 -> 1.0000000000000075962149733910693305471257715463887 Inexact Rounded -expx1512 exp 9.7959168821760339304571595474480640286072720233796 -> 17960.261146042955179164303653412650751681436352437 Inexact Rounded -expx1513 exp 0.00000000566642006258290526783901451194943164535581 -> 1.0000000056664200786370634609832438815665249347650 Inexact Rounded -expx1514 exp 741.29888791134298194088827572374718940925820027354 -> 8.7501694006317332808128946666402622432064923198731E+321 Inexact Rounded -expx1515 exp 032.75573003552517668808529099897153710887014947935 -> 168125196578678.17725841108617955904425345631092339 Inexact Rounded -expx1516 exp 42.333700726429333308594265553422902463737399437644 -> 2428245675864172475.4681119493045657797309369672012 Inexact Rounded -expx1517 exp 0.00000000000000559682616876491888197609158802835798 -> 1.0000000000000055968261687649345442076732739577049 Inexact Rounded -expx1518 exp 0.00000000000080703688668280193584758300973549486312 -> 1.0000000000008070368866831275901158164321867914342 Inexact Rounded -expx1519 exp 640.72396012796509482382712891709072570653606838251 -> 1.8318094990683394229304133068983914236995326891045E+278 Inexact Rounded -expx1520 exp 0.00000000000000509458922167631071416948112219512224 -> 1.0000000000000050945892216763236915891499324358556 Inexact Rounded -expx1521 exp 6.7670394314315206378625221583973414660727960241395 -> 868.73613012822031367806248697092884415119568271315 Inexact Rounded -expx1522 exp 04.823217407412963506638267226891024138054783122548 -> 124.36457929588837129731821077586705505565904205366 Inexact Rounded -expx1523 exp 193.51307878701196403991208482520115359690106143615 -> 1.1006830872854715677390914655452261550768957576034E+84 Inexact Rounded -expx1524 exp 5.7307749038303650539200345901210497015617393970463 -> 308.20800743106843083522721523715645950574866495196 Inexact Rounded -expx1525 exp 0.00000000000095217825199797965200541169123743500267 -> 1.0000000000009521782519984329737172007991390381273 Inexact Rounded -expx1526 exp 0.00027131440949183370966393682617930153495028919140 -> 1.0002713512185751022906058160480606598754913607364 Inexact Rounded -expx1527 exp 0.00000000064503059114680682343002315662069272707123 -> 1.0000000006450305913548390552323517403613135496633 Inexact Rounded -expx1528 exp 0.00000000000000095616643506527288866235238548440593 -> 1.0000000000000009561664350652733457894781582009094 Inexact Rounded -expx1529 exp 0.00000000000000086449942811678650244459550252743433 -> 1.0000000000000008644994281167868761242261096529986 Inexact Rounded -expx1530 exp 0.06223488355635359965683053157729204988381887621850 -> 1.0642122813392406657789688931838919323826250630831 Inexact Rounded -expx1531 exp 0.00000400710807804429435502657131912308680674057053 -> 1.0000040071161065125925620890019319832127863559260 Inexact Rounded -expx1532 exp 85.522796894744576211573232055494551429297878413017 -> 13870073686404228452757799770251085177.853337368935 Inexact Rounded -expx1533 exp 9.1496720811363678696938036379756663548353399954363 -> 9411.3537122832743386783597629161763057370034495157 Inexact Rounded -expx1534 exp 8.2215705240788294472944382056330516738577785177942 -> 3720.3406813383076953899654701615084425598377758189 Inexact Rounded -expx1535 exp 0.00000000015772064569640613142823203726821076239561 -> 1.0000000001577206457088440324683315788358926129830 Inexact Rounded -expx1536 exp 0.58179346473959531432624153576883440625538017532480 -> 1.7892445018275360163797022372655837188423194863605 Inexact Rounded -expx1537 exp 33.555726197149525061455517784870570470833498096559 -> 374168069896324.62578073148993526626307095854407952 Inexact Rounded -expx1538 exp 9.7898079803906215094140010009583375537259810398659 -> 17850.878119912208888217100998019986634620368538426 Inexact Rounded -expx1539 exp 89.157697327174521542502447953032536541038636966347 -> 525649152320166503771224149330448089550.67293829227 Inexact Rounded -expx1540 exp 25.022947600123328912029051897171319573322888514885 -> 73676343442.952517824345431437683153304645851960524 Inexact Rounded - --- exp(1) at 34 -Precision: 34 -expx1200 exp 1 -> 2.718281828459045235360287471352662 Inexact Rounded - --- Randoms P=34, within 0-999 -Precision: 34 -maxExponent: 6144 -minExponent: -6143 -expx1201 exp 309.5948855821510212996700645087188 -> 2.853319692901387521201738015050724E+134 Inexact Rounded -expx1202 exp 9.936543068706211420422803962680164 -> 20672.15839203171877476511093276022 Inexact Rounded -expx1203 exp 6.307870323881505684429839491707908 -> 548.8747777054637296137277391754665 Inexact Rounded -expx1204 exp 0.0003543281389438420535201308282503 -> 1.000354390920573746164733350843155 Inexact Rounded -expx1205 exp 0.0000037087453363918375598394920229 -> 1.000003708752213796324841920189323 Inexact Rounded -expx1206 exp 0.0020432312687512438040222444116585 -> 1.002045320088164826013561630975308 Inexact Rounded -expx1207 exp 6.856313340032177672550343216129586 -> 949.8587981604144147983589660524396 Inexact Rounded -expx1208 exp 0.0000000000402094928333815643326418 -> 1.000000000040209492834189965989612 Inexact Rounded -expx1209 exp 0.0049610784722412117632647003545839 -> 1.004973404997901987039589029277833 Inexact Rounded -expx1210 exp 0.0000891471883724066909746786702686 -> 1.000089151162101085412780088266699 Inexact Rounded -expx1211 exp 08.59979170376061890684723211112566 -> 5430.528314920905714615339273738097 Inexact Rounded -expx1212 exp 9.473117039341003854872778112752590 -> 13005.36234331224953460055897913917 Inexact Rounded -expx1213 exp 0.0999060724692207648429969999310118 -> 1.105067116975190602296052700726802 Inexact Rounded -expx1214 exp 0.0000000927804533555877884082269247 -> 1.000000092780457659694183954740772 Inexact Rounded -expx1215 exp 0.0376578583872889916298772818265677 -> 1.038375900489771946477857818447556 Inexact Rounded -expx1216 exp 261.6896411697539524911536116712307 -> 4.470613562127465095241600174941460E+113 Inexact Rounded -expx1217 exp 0.0709997423269162980875824213889626 -> 1.073580949235407949417814485533172 Inexact Rounded -expx1218 exp 0.0000000444605583295169895235658731 -> 1.000000044460559317887627657593900 Inexact Rounded -expx1219 exp 0.0000021224072854777512281369815185 -> 1.000002122409537785687390631070906 Inexact Rounded -expx1220 exp 547.5174462574156885473558485475052 -> 6.078629247383807942612114579728672E+237 Inexact Rounded -expx1221 exp 0.0000009067598041615192002339844670 -> 1.000000906760215268314680115374387 Inexact Rounded -expx1222 exp 0.0316476500308065365803455533244603 -> 1.032153761880187977658387961769034 Inexact Rounded -expx1223 exp 84.46160530377645101833996706384473 -> 4.799644995897968383503269871697856E+36 Inexact Rounded -expx1224 exp 0.0000000000520599740290848018904145 -> 1.000000000052059974030439922338393 Inexact Rounded -expx1225 exp 0.0000006748530640093620665651726708 -> 1.000000674853291722742292331812997 Inexact Rounded -expx1226 exp 0.0000000116853119761042020507916169 -> 1.000000011685312044377460306165203 Inexact Rounded -expx1227 exp 0.0022593818094258636727616886693280 -> 1.002261936135876893707094845543461 Inexact Rounded -expx1228 exp 0.0029398857673478912249856509667517 -> 1.002944211469495086813087651287012 Inexact Rounded -expx1229 exp 0.7511480029928802775376270557636963 -> 2.119431734510320169806976569366789 Inexact Rounded -expx1230 exp 174.9431952176750671150886423048447 -> 9.481222305374955011464619468044051E+75 Inexact Rounded -expx1231 exp 0.0000810612451694136129199895164424 -> 1.000081064530720924186615149646920 Inexact Rounded -expx1232 exp 51.06888989702669288180946272499035 -> 15098613888619165073959.89896018749 Inexact Rounded -expx1233 exp 0.0000000005992887599437093651494510 -> 1.000000000599288760123282874082758 Inexact Rounded -expx1234 exp 714.8549046761054856311108828903972 -> 2.867744544891081117381595080480784E+310 Inexact Rounded -expx1235 exp 0.0000000004468247802990643645607110 -> 1.000000000446824780398890556720233 Inexact Rounded -expx1236 exp 831.5818151589890366323551672043709 -> 1.417077409182624969435938062261655E+361 Inexact Rounded -expx1237 exp 0.0000000006868323825179605747108044 -> 1.000000000686832382753829935602454 Inexact Rounded -expx1238 exp 0.0000001306740266408976840228440255 -> 1.000000130674035178748675187648098 Inexact Rounded -expx1239 exp 0.3182210609022267704811502412335163 -> 1.374680115667798185758927247894859 Inexact Rounded -expx1240 exp 0.0147741234179104437440264644295501 -> 1.014883800239950682628277534839222 Inexact Rounded - --- Randoms P=16, within 0-99 -Precision: 16 -maxExponent: 384 -minExponent: -383 -expx1101 exp 8.473011527013724 -> 4783.900643969246 Inexact Rounded -expx1102 exp 0.0000055753022764 -> 1.000005575317818 Inexact Rounded -expx1103 exp 0.0000323474114482 -> 1.000032347934631 Inexact Rounded -expx1104 exp 64.54374138544166 -> 1.073966476173531E+28 Inexact Rounded -expx1105 exp 90.47203246416569 -> 1.956610887250643E+39 Inexact Rounded -expx1106 exp 9.299931532342757 -> 10937.27033325227 Inexact Rounded -expx1107 exp 8.759678437852203 -> 6372.062234495381 Inexact Rounded -expx1108 exp 0.0000931755127172 -> 1.000093179853690 Inexact Rounded -expx1109 exp 0.0000028101158373 -> 1.000002810119786 Inexact Rounded -expx1110 exp 0.0000008008130919 -> 1.000000800813413 Inexact Rounded -expx1111 exp 8.339771722299049 -> 4187.133803081878 Inexact Rounded -expx1112 exp 0.0026140497995474 -> 1.002617469406750 Inexact Rounded -expx1113 exp 0.7478033356261771 -> 2.112354781975418 Inexact Rounded -expx1114 exp 51.77663761827966 -> 3.064135801120365E+22 Inexact Rounded -expx1115 exp 0.1524989783061012 -> 1.164741272084955 Inexact Rounded -expx1116 exp 0.0066298798669219 -> 1.006651906170791 Inexact Rounded -expx1117 exp 9.955141865534960 -> 21060.23334287038 Inexact Rounded -expx1118 exp 92.34503059198483 -> 1.273318993481226E+40 Inexact Rounded -expx1119 exp 0.0000709388677346 -> 1.000070941383956 Inexact Rounded -expx1120 exp 79.12883036433204 -> 2.318538899389243E+34 Inexact Rounded -expx1121 exp 0.0000090881548873 -> 1.000009088196185 Inexact Rounded -expx1122 exp 0.0424828809603411 -> 1.043398194245720 Inexact Rounded -expx1123 exp 0.8009035891427416 -> 2.227552811933310 Inexact Rounded -expx1124 exp 8.825786167283102 -> 6807.540455289995 Inexact Rounded -expx1125 exp 1.535457249746275 -> 4.643448260146849 Inexact Rounded -expx1126 exp 69.02254254355800 -> 9.464754500670653E+29 Inexact Rounded -expx1127 exp 0.0007050554368713 -> 1.000705304046880 Inexact Rounded -expx1128 exp 0.0000081206549504 -> 1.000008120687923 Inexact Rounded -expx1129 exp 0.621774854641137 -> 1.862230298554903 Inexact Rounded -expx1130 exp 3.847629031404354 -> 46.88177613568203 Inexact Rounded -expx1131 exp 24.81250184697732 -> 59694268456.19966 Inexact Rounded -expx1132 exp 5.107546500516044 -> 165.2643809755670 Inexact Rounded -expx1133 exp 79.17810943951986 -> 2.435656372541360E+34 Inexact Rounded -expx1134 exp 0.0051394695667015 -> 1.005152699295301 Inexact Rounded -expx1135 exp 57.44504488501725 -> 8.872908566929688E+24 Inexact Rounded -expx1136 exp 0.0000508388968036 -> 1.000050840189122 Inexact Rounded -expx1137 exp 69.71309932148997 -> 1.888053740693541E+30 Inexact Rounded -expx1138 exp 0.0064183412981502 -> 1.006438982988835 Inexact Rounded -expx1139 exp 9.346991220814677 -> 11464.27802035082 Inexact Rounded -expx1140 exp 33.09087139999152 -> 235062229168763.5 Inexact Rounded - --- Randoms P=7, within 0-9 -Precision: 7 -maxExponent: 96 -minExponent: -95 -expx1001 exp 2.395441 -> 10.97304 Inexact Rounded -expx1002 exp 0.6406779 -> 1.897767 Inexact Rounded -expx1003 exp 0.5618218 -> 1.753865 Inexact Rounded -expx1004 exp 3.055120 -> 21.22373 Inexact Rounded -expx1005 exp 1.536792 -> 4.649650 Inexact Rounded -expx1006 exp 0.0801591 -> 1.083459 Inexact Rounded -expx1007 exp 0.0966875 -> 1.101516 Inexact Rounded -expx1008 exp 0.0646761 -> 1.066813 Inexact Rounded -expx1009 exp 0.0095670 -> 1.009613 Inexact Rounded -expx1010 exp 2.956859 -> 19.23745 Inexact Rounded -expx1011 exp 7.504679 -> 1816.522 Inexact Rounded -expx1012 exp 0.0045259 -> 1.004536 Inexact Rounded -expx1013 exp 3.810071 -> 45.15364 Inexact Rounded -expx1014 exp 1.502390 -> 4.492413 Inexact Rounded -expx1015 exp 0.0321523 -> 1.032675 Inexact Rounded -expx1016 exp 0.0057214 -> 1.005738 Inexact Rounded -expx1017 exp 9.811445 -> 18241.33 Inexact Rounded -expx1018 exp 3.245249 -> 25.66810 Inexact Rounded -expx1019 exp 0.3189742 -> 1.375716 Inexact Rounded -expx1020 exp 0.8621610 -> 2.368273 Inexact Rounded -expx1021 exp 0.0122511 -> 1.012326 Inexact Rounded -expx1022 exp 2.202088 -> 9.043877 Inexact Rounded -expx1023 exp 8.778203 -> 6491.202 Inexact Rounded -expx1024 exp 0.1896279 -> 1.208800 Inexact Rounded -expx1025 exp 0.4510947 -> 1.570030 Inexact Rounded -expx1026 exp 0.276413 -> 1.318392 Inexact Rounded -expx1027 exp 4.490067 -> 89.12742 Inexact Rounded -expx1028 exp 0.0439786 -> 1.044960 Inexact Rounded -expx1029 exp 0.8168245 -> 2.263301 Inexact Rounded -expx1030 exp 0.0391658 -> 1.039943 Inexact Rounded -expx1031 exp 9.261816 -> 10528.24 Inexact Rounded -expx1032 exp 9.611186 -> 14930.87 Inexact Rounded -expx1033 exp 9.118125 -> 9119.087 Inexact Rounded -expx1034 exp 9.469083 -> 12953.00 Inexact Rounded -expx1035 exp 0.0499983 -> 1.051269 Inexact Rounded -expx1036 exp 0.0050746 -> 1.005087 Inexact Rounded -expx1037 exp 0.0014696 -> 1.001471 Inexact Rounded -expx1038 exp 9.138494 -> 9306.739 Inexact Rounded -expx1039 exp 0.0065436 -> 1.006565 Inexact Rounded -expx1040 exp 0.7284803 -> 2.071930 Inexact Rounded - +------------------------------------------------------------------------ +-- exp.decTest -- decimal natural exponentiation -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Tests of the exponential function. Currently all testcases here +-- show results which are correctly rounded (within <= 0.5 ulp). + +extended: 1 +precision: 9 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- basics (examples in specification, etc.) +expx001 exp -Infinity -> 0 +expx002 exp -10 -> 0.0000453999298 Inexact Rounded +expx003 exp -1 -> 0.367879441 Inexact Rounded +expx004 exp 0 -> 1 +expx005 exp -0 -> 1 +expx006 exp 1 -> 2.71828183 Inexact Rounded +expx007 exp 0.693147181 -> 2.00000000 Inexact Rounded +expx008 exp 10 -> 22026.4658 Inexact Rounded +expx009 exp +Infinity -> Infinity + +-- tiny edge cases +precision: 7 +expx011 exp 0.1 -> 1.105171 Inexact Rounded +expx012 exp 0.01 -> 1.010050 Inexact Rounded +expx013 exp 0.001 -> 1.001001 Inexact Rounded +expx014 exp 0.0001 -> 1.000100 Inexact Rounded +expx015 exp 0.00001 -> 1.000010 Inexact Rounded +expx016 exp 0.000001 -> 1.000001 Inexact Rounded +expx017 exp 0.0000001 -> 1.000000 Inexact Rounded +expx018 exp 0.0000003 -> 1.000000 Inexact Rounded +expx019 exp 0.0000004 -> 1.000000 Inexact Rounded +expx020 exp 0.0000005 -> 1.000001 Inexact Rounded +expx021 exp 0.0000008 -> 1.000001 Inexact Rounded +expx022 exp 0.0000009 -> 1.000001 Inexact Rounded +expx023 exp 0.0000010 -> 1.000001 Inexact Rounded +expx024 exp 0.0000011 -> 1.000001 Inexact Rounded +expx025 exp 0.00000009 -> 1.000000 Inexact Rounded +expx026 exp 0.00000005 -> 1.000000 Inexact Rounded +expx027 exp 0.00000004 -> 1.000000 Inexact Rounded +expx028 exp 0.00000001 -> 1.000000 Inexact Rounded + +-- and some more zeros +expx030 exp 0.00000000 -> 1 +expx031 exp 0E+100 -> 1 +expx032 exp 0E-100 -> 1 +expx033 exp -0.00000000 -> 1 +expx034 exp -0E+100 -> 1 +expx035 exp -0E-100 -> 1 + +-- basic e=0, e=1, e=2, e=4, e>=8 cases +precision: 7 +expx041 exp 1 -> 2.718282 Inexact Rounded +expx042 exp -1 -> 0.3678794 Inexact Rounded +expx043 exp 10 -> 22026.47 Inexact Rounded +expx044 exp -10 -> 0.00004539993 Inexact Rounded +expx045 exp 100 -> 2.688117E+43 Inexact Rounded +expx046 exp -100 -> 3.720076E-44 Inexact Rounded +expx047 exp 1000 -> Infinity Overflow Inexact Rounded +expx048 exp -1000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx049 exp 100000000 -> Infinity Overflow Inexact Rounded +expx050 exp -100000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal + +-- miscellanea +-- similar to 'VF bug' test, at 17, but with last digit corrected for decimal +precision: 16 +expx055 exp -5.42410311287441459172E+2 -> 2.717658486884572E-236 Inexact Rounded +-- result from NetRexx/Java prototype -> 2.7176584868845721117677929628617246054459644711108E-236 +-- result from Rexx (series) version -> 2.717658486884572111767792962861724605446E-236 +precision: 17 +expx056 exp -5.42410311287441459172E+2 -> 2.7176584868845721E-236 Inexact Rounded +precision: 18 +expx057 exp -5.42410311287441459172E+2 -> 2.71765848688457211E-236 Inexact Rounded +precision: 19 +expx058 exp -5.42410311287441459172E+2 -> 2.717658486884572112E-236 Inexact Rounded +precision: 20 +expx059 exp -5.42410311287441459172E+2 -> 2.7176584868845721118E-236 Inexact Rounded + +-- rounding in areas of ..500.., ..499.., ..100.., ..999.. sequences +precision: 50 +expx101 exp -9E-8 -> 0.99999991000000404999987850000273374995079250073811 Inexact Rounded +precision: 31 +expx102 exp -9E-8 -> 0.9999999100000040499998785000027 Inexact Rounded +precision: 30 +expx103 exp -9E-8 -> 0.999999910000004049999878500003 Inexact Rounded +precision: 29 +expx104 exp -9E-8 -> 0.99999991000000404999987850000 Inexact Rounded +precision: 28 +expx105 exp -9E-8 -> 0.9999999100000040499998785000 Inexact Rounded +precision: 27 +expx106 exp -9E-8 -> 0.999999910000004049999878500 Inexact Rounded +precision: 26 +expx107 exp -9E-8 -> 0.99999991000000404999987850 Inexact Rounded +precision: 25 +expx108 exp -9E-8 -> 0.9999999100000040499998785 Inexact Rounded +precision: 24 +expx109 exp -9E-8 -> 0.999999910000004049999879 Inexact Rounded +precision: 23 +expx110 exp -9E-8 -> 0.99999991000000404999988 Inexact Rounded +precision: 22 +expx111 exp -9E-8 -> 0.9999999100000040499999 Inexact Rounded +precision: 21 +expx112 exp -9E-8 -> 0.999999910000004050000 Inexact Rounded +precision: 20 +expx113 exp -9E-8 -> 0.99999991000000405000 Inexact Rounded +precision: 19 +expx114 exp -9E-8 -> 0.9999999100000040500 Inexact Rounded +precision: 18 +expx115 exp -9E-8 -> 0.999999910000004050 Inexact Rounded +precision: 17 +expx116 exp -9E-8 -> 0.99999991000000405 Inexact Rounded +precision: 16 +expx117 exp -9E-8 -> 0.9999999100000040 Inexact Rounded +precision: 15 +expx118 exp -9E-8 -> 0.999999910000004 Inexact Rounded +precision: 14 +expx119 exp -9E-8 -> 0.99999991000000 Inexact Rounded +precision: 13 +expx120 exp -9E-8 -> 0.9999999100000 Inexact Rounded +precision: 12 +expx121 exp -9E-8 -> 0.999999910000 Inexact Rounded +precision: 11 +expx122 exp -9E-8 -> 0.99999991000 Inexact Rounded +precision: 10 +expx123 exp -9E-8 -> 0.9999999100 Inexact Rounded +precision: 9 +expx124 exp -9E-8 -> 0.999999910 Inexact Rounded +precision: 8 +expx125 exp -9E-8 -> 0.99999991 Inexact Rounded +precision: 7 +expx126 exp -9E-8 -> 0.9999999 Inexact Rounded +precision: 6 +expx127 exp -9E-8 -> 1.00000 Inexact Rounded +precision: 5 +expx128 exp -9E-8 -> 1.0000 Inexact Rounded +precision: 4 +expx129 exp -9E-8 -> 1.000 Inexact Rounded +precision: 3 +expx130 exp -9E-8 -> 1.00 Inexact Rounded +precision: 2 +expx131 exp -9E-8 -> 1.0 Inexact Rounded +precision: 1 +expx132 exp -9E-8 -> 1 Inexact Rounded + + +-- sanity checks, with iteration counts [normalized so 0<=|x|<1] +precision: 50 + +expx210 exp 0 -> 1 +-- iterations: 2 +expx211 exp -1E-40 -> 0.99999999999999999999999999999999999999990000000000 Inexact Rounded +-- iterations: 8 +expx212 exp -9E-7 -> 0.99999910000040499987850002733749507925073811240510 Inexact Rounded +-- iterations: 6 +expx213 exp -9E-8 -> 0.99999991000000404999987850000273374995079250073811 Inexact Rounded +-- iterations: 15 +expx214 exp -0.003 -> 0.99700449550337297601206623409756091074177480489845 Inexact Rounded +-- iterations: 14 +expx215 exp -0.001 -> 0.99900049983337499166805535716765597470235590236008 Inexact Rounded +-- iterations: 26 +expx216 exp -0.1 -> 0.90483741803595957316424905944643662119470536098040 Inexact Rounded +-- iterations: 39 +expx217 exp -0.7 -> 0.49658530379140951470480009339752896170766716571182 Inexact Rounded +-- iterations: 41 +expx218 exp -0.9 -> 0.40656965974059911188345423964562598783370337617038 Inexact Rounded +-- iterations: 43 +expx219 exp -0.99 -> 0.37157669102204569053152411990820138691802885490501 Inexact Rounded +-- iterations: 26 +expx220 exp -1 -> 0.36787944117144232159552377016146086744581113103177 Inexact Rounded +-- iterations: 26 +expx221 exp -1.01 -> 0.36421897957152331975704629563734548959589139192482 Inexact Rounded +-- iterations: 27 +expx222 exp -1.1 -> 0.33287108369807955328884690643131552161247952156921 Inexact Rounded +-- iterations: 28 +expx223 exp -1.5 -> 0.22313016014842982893328047076401252134217162936108 Inexact Rounded +-- iterations: 30 +expx224 exp -2 -> 0.13533528323661269189399949497248440340763154590958 Inexact Rounded +-- iterations: 36 +expx225 exp -5 -> 0.0067379469990854670966360484231484242488495850273551 Inexact Rounded +-- iterations: 26 +expx226 exp -10 -> 0.000045399929762484851535591515560550610237918088866565 Inexact Rounded +-- iterations: 28 +expx227 exp -14 -> 8.3152871910356788406398514256526229460765836498457E-7 Inexact Rounded +-- iterations: 29 +expx228 exp -15 -> 3.0590232050182578837147949770228963937082078081856E-7 Inexact Rounded +-- iterations: 30 +expx233 exp 0 -> 1 +-- iterations: 2 +expx234 exp 1E-40 -> 1.0000000000000000000000000000000000000001000000000 Inexact Rounded +-- iterations: 7 +expx235 exp 9E-7 -> 1.0000009000004050001215000273375049207507381125949 Inexact Rounded +-- iterations: 6 +expx236 exp 9E-8 -> 1.0000000900000040500001215000027337500492075007381 Inexact Rounded +-- iterations: 15 +expx237 exp 0.003 -> 1.0030045045033770260129340913489002053318727195619 Inexact Rounded +-- iterations: 13 +expx238 exp 0.001 -> 1.0010005001667083416680557539930583115630762005807 Inexact Rounded +-- iterations: 25 +expx239 exp 0.1 -> 1.1051709180756476248117078264902466682245471947375 Inexact Rounded +-- iterations: 38 +expx240 exp 0.7 -> 2.0137527074704765216245493885830652700175423941459 Inexact Rounded +-- iterations: 41 +expx241 exp 0.9 -> 2.4596031111569496638001265636024706954217723064401 Inexact Rounded +-- iterations: 42 +expx242 exp 0.99 -> 2.6912344723492622890998794040710139721802931841030 Inexact Rounded +-- iterations: 26 +expx243 exp 1 -> 2.7182818284590452353602874713526624977572470937000 Inexact Rounded +-- iterations: 26 +expx244 exp 1.01 -> 2.7456010150169164939897763166603876240737508195960 Inexact Rounded +-- iterations: 26 +expx245 exp 1.1 -> 3.0041660239464331120584079535886723932826810260163 Inexact Rounded +-- iterations: 28 +expx246 exp 1.5 -> 4.4816890703380648226020554601192758190057498683697 Inexact Rounded +-- iterations: 29 +expx247 exp 2 -> 7.3890560989306502272304274605750078131803155705518 Inexact Rounded +-- iterations: 36 +expx248 exp 5 -> 148.41315910257660342111558004055227962348766759388 Inexact Rounded +-- iterations: 26 +expx249 exp 10 -> 22026.465794806716516957900645284244366353512618557 Inexact Rounded +-- iterations: 28 +expx250 exp 14 -> 1202604.2841647767777492367707678594494124865433761 Inexact Rounded +-- iterations: 28 +expx251 exp 15 -> 3269017.3724721106393018550460917213155057385438200 Inexact Rounded +-- iterations: 29 + +-- a biggie [result verified 3 ways] +precision: 250 +expx260 exp 1 -> 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668 Inexact Rounded + +-- extreme range boundaries +precision: 16 +maxExponent: 999999 +minExponent: -999999 +-- Ntiny boundary +expx290 exp -2302618.022332529 -> 0E-1000014 Underflow Subnormal Inexact Rounded Clamped +expx291 exp -2302618.022332528 -> 1E-1000014 Underflow Subnormal Inexact Rounded +-- Nmax/10 and Nmax boundary +expx292 exp 2302582.790408952 -> 9.999999993100277E+999998 Inexact Rounded +expx293 exp 2302582.790408953 -> 1.000000000310028E+999999 Inexact Rounded +expx294 exp 2302585.092993946 -> 9.999999003159870E+999999 Inexact Rounded +expx295 exp 2302585.092994036 -> 9.999999903159821E+999999 Inexact Rounded +expx296 exp 2302585.092994045 -> 9.999999993159820E+999999 Inexact Rounded +expx297 exp 2302585.092994046 -> Infinity Overflow Inexact Rounded + +-- 0<-x<<1 effects +precision: 30 +expx320 exp -4.9999999999999E-8 -> 0.999999950000001250000979166617 Inexact Rounded +expx321 exp -5.0000000000000E-8 -> 0.999999950000001249999979166667 Inexact Rounded +expx322 exp -5.0000000000001E-8 -> 0.999999950000001249998979166717 Inexact Rounded +precision: 20 +expx323 exp -4.9999999999999E-8 -> 0.99999995000000125000 Inexact Rounded +expx324 exp -5.0000000000000E-8 -> 0.99999995000000125000 Inexact Rounded +expx325 exp -5.0000000000001E-8 -> 0.99999995000000125000 Inexact Rounded +precision: 14 +expx326 exp -4.9999999999999E-8 -> 0.99999995000000 Inexact Rounded +expx327 exp -5.0000000000000E-8 -> 0.99999995000000 Inexact Rounded +expx328 exp -5.0000000000001E-8 -> 0.99999995000000 Inexact Rounded +-- overprecise and 0<-x<<1 +precision: 8 +expx330 exp -4.9999999999999E-8 -> 0.99999995 Inexact Rounded +expx331 exp -5.0000000000000E-8 -> 0.99999995 Inexact Rounded +expx332 exp -5.0000000000001E-8 -> 0.99999995 Inexact Rounded +precision: 7 +expx333 exp -4.9999999999999E-8 -> 1.000000 Inexact Rounded +expx334 exp -5.0000000000000E-8 -> 1.000000 Inexact Rounded +expx335 exp -5.0000000000001E-8 -> 1.000000 Inexact Rounded +precision: 3 +expx336 exp -4.9999999999999E-8 -> 1.00 Inexact Rounded +expx337 exp -5.0000000000000E-8 -> 1.00 Inexact Rounded +expx338 exp -5.0000000000001E-8 -> 1.00 Inexact Rounded + +-- 0 1.00000005000000124999902083328 Inexact Rounded +expx341 exp 5.0000000000000E-8 -> 1.00000005000000125000002083333 Inexact Rounded +expx342 exp 5.0000000000001E-8 -> 1.00000005000000125000102083338 Inexact Rounded +precision: 20 +expx343 exp 4.9999999999999E-8 -> 1.0000000500000012500 Inexact Rounded +expx344 exp 5.0000000000000E-8 -> 1.0000000500000012500 Inexact Rounded +expx345 exp 5.0000000000001E-8 -> 1.0000000500000012500 Inexact Rounded +precision: 14 +expx346 exp 4.9999999999999E-8 -> 1.0000000500000 Inexact Rounded +expx347 exp 5.0000000000000E-8 -> 1.0000000500000 Inexact Rounded +expx348 exp 5.0000000000001E-8 -> 1.0000000500000 Inexact Rounded +-- overprecise and 0 1.0000001 Inexact Rounded +expx351 exp 5.0000000000000E-8 -> 1.0000001 Inexact Rounded +expx352 exp 5.0000000000001E-8 -> 1.0000001 Inexact Rounded +precision: 7 +expx353 exp 4.9999999999999E-8 -> 1.000000 Inexact Rounded +expx354 exp 5.0000000000000E-8 -> 1.000000 Inexact Rounded +expx355 exp 5.0000000000001E-8 -> 1.000000 Inexact Rounded +precision: 3 +expx356 exp 4.9999999999999E-8 -> 1.00 Inexact Rounded +expx357 exp 5.0000000000000E-8 -> 1.00 Inexact Rounded +expx358 exp 5.0000000000001E-8 -> 1.00 Inexact Rounded + +-- cases near 1 -- 1 2345678901234567890 +precision: 20 +expx401 exp 0.99999999999996 -> 2.7182818284589365041 Inexact Rounded +expx402 exp 0.99999999999997 -> 2.7182818284589636869 Inexact Rounded +expx403 exp 0.99999999999998 -> 2.7182818284589908697 Inexact Rounded +expx404 exp 0.99999999999999 -> 2.7182818284590180525 Inexact Rounded +expx405 exp 1.0000000000000 -> 2.7182818284590452354 Inexact Rounded +expx406 exp 1.0000000000001 -> 2.7182818284593170635 Inexact Rounded +expx407 exp 1.0000000000002 -> 2.7182818284595888917 Inexact Rounded +precision: 14 +expx411 exp 0.99999999999996 -> 2.7182818284589 Inexact Rounded +expx412 exp 0.99999999999997 -> 2.7182818284590 Inexact Rounded +expx413 exp 0.99999999999998 -> 2.7182818284590 Inexact Rounded +expx414 exp 0.99999999999999 -> 2.7182818284590 Inexact Rounded +expx415 exp 1.0000000000000 -> 2.7182818284590 Inexact Rounded +expx416 exp 1.0000000000001 -> 2.7182818284593 Inexact Rounded +expx417 exp 1.0000000000002 -> 2.7182818284596 Inexact Rounded +-- overprecise... +precision: 7 +expx421 exp 0.99999999999996 -> 2.718282 Inexact Rounded +expx422 exp 0.99999999999997 -> 2.718282 Inexact Rounded +expx423 exp 0.99999999999998 -> 2.718282 Inexact Rounded +expx424 exp 0.99999999999999 -> 2.718282 Inexact Rounded +expx425 exp 1.0000000000001 -> 2.718282 Inexact Rounded +expx426 exp 1.0000000000002 -> 2.718282 Inexact Rounded +expx427 exp 1.0000000000003 -> 2.718282 Inexact Rounded +precision: 2 +expx431 exp 0.99999999999996 -> 2.7 Inexact Rounded +expx432 exp 0.99999999999997 -> 2.7 Inexact Rounded +expx433 exp 0.99999999999998 -> 2.7 Inexact Rounded +expx434 exp 0.99999999999999 -> 2.7 Inexact Rounded +expx435 exp 1.0000000000001 -> 2.7 Inexact Rounded +expx436 exp 1.0000000000002 -> 2.7 Inexact Rounded +expx437 exp 1.0000000000003 -> 2.7 Inexact Rounded + +-- basics at low precisions +precision: 3 +expx501 exp -Infinity -> 0 +expx502 exp -10 -> 0.0000454 Inexact Rounded +expx503 exp -1 -> 0.368 Inexact Rounded +expx504 exp 0 -> 1 +expx505 exp -0 -> 1 +expx506 exp 1 -> 2.72 Inexact Rounded +expx507 exp 0.693147181 -> 2.00 Inexact Rounded +expx508 exp 10 -> 2.20E+4 Inexact Rounded +expx509 exp +Infinity -> Infinity +precision: 2 +expx511 exp -Infinity -> 0 +expx512 exp -10 -> 0.000045 Inexact Rounded +expx513 exp -1 -> 0.37 Inexact Rounded +expx514 exp 0 -> 1 +expx515 exp -0 -> 1 +expx516 exp 1 -> 2.7 Inexact Rounded +expx517 exp 0.693147181 -> 2.0 Inexact Rounded +expx518 exp 10 -> 2.2E+4 Inexact Rounded +expx519 exp +Infinity -> Infinity +precision: 1 +expx521 exp -Infinity -> 0 +expx522 exp -10 -> 0.00005 Inexact Rounded +expx523 exp -1 -> 0.4 Inexact Rounded +expx524 exp 0 -> 1 +expx525 exp -0 -> 1 +expx526 exp 1 -> 3 Inexact Rounded +expx527 exp 0.693147181 -> 2 Inexact Rounded +expx528 exp 10 -> 2E+4 Inexact Rounded +expx529 exp +Infinity -> Infinity + +-- overflows, including some overprecise borderlines +precision: 7 +maxExponent: 384 +minExponent: -383 +expx701 exp 1000000000 -> Infinity Overflow Inexact Rounded +expx702 exp 100000000 -> Infinity Overflow Inexact Rounded +expx703 exp 10000000 -> Infinity Overflow Inexact Rounded +expx704 exp 1000000 -> Infinity Overflow Inexact Rounded +expx705 exp 100000 -> Infinity Overflow Inexact Rounded +expx706 exp 10000 -> Infinity Overflow Inexact Rounded +expx707 exp 1000 -> Infinity Overflow Inexact Rounded +expx708 exp 886.4952608 -> Infinity Overflow Inexact Rounded +expx709 exp 886.4952607 -> 9.999999E+384 Inexact Rounded +expx710 exp 886.49527 -> Infinity Overflow Inexact Rounded +expx711 exp 886.49526 -> 9.999992E+384 Inexact Rounded +precision: 16 +expx721 exp 886.4952608027075883 -> Infinity Overflow Inexact Rounded +expx722 exp 886.4952608027075882 -> 9.999999999999999E+384 Inexact Rounded +expx723 exp 886.49526080270759 -> Infinity Overflow Inexact Rounded +expx724 exp 886.49526080270758 -> 9.999999999999917E+384 Inexact Rounded +expx725 exp 886.4952608027076 -> Infinity Overflow Inexact Rounded +expx726 exp 886.4952608027075 -> 9.999999999999117E+384 Inexact Rounded +-- and by special request ... +precision: 15 +expx731 exp 886.495260802708 -> Infinity Overflow Inexact Rounded +expx732 exp 886.495260802707 -> 9.99999999999412E+384 Inexact Rounded +expx733 exp 886.495260802706 -> 9.99999999998412E+384 Inexact Rounded +maxExponent: 999 +minExponent: -999 +expx735 exp 2302.58509299405 -> Infinity Overflow Inexact Rounded +expx736 exp 2302.58509299404 -> 9.99999999994316E+999 Inexact Rounded +expx737 exp 2302.58509299403 -> 9.99999999984316E+999 Inexact Rounded + +-- subnormals and underflows, including underflow-to-zero edge point +precision: 7 +maxExponent: 384 +minExponent: -383 +expx751 exp -1000000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx752 exp -100000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx753 exp -10000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx754 exp -1000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx755 exp -100000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx756 exp -10000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx757 exp -1000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx758 exp -881.89009 -> 1.000001E-383 Inexact Rounded +expx759 exp -881.8901 -> 9.99991E-384 Inexact Rounded Underflow Subnormal +expx760 exp -885 -> 4.4605E-385 Inexact Rounded Underflow Subnormal +expx761 exp -888 -> 2.221E-386 Inexact Rounded Underflow Subnormal +expx762 exp -890 -> 3.01E-387 Inexact Rounded Underflow Subnormal +expx763 exp -892.9 -> 1.7E-388 Inexact Rounded Underflow Subnormal +expx764 exp -893 -> 1.5E-388 Inexact Rounded Underflow Subnormal +expx765 exp -893.5 -> 9E-389 Inexact Rounded Underflow Subnormal +expx766 exp -895.7056 -> 1E-389 Inexact Rounded Underflow Subnormal +expx769 exp -895.8 -> 1E-389 Inexact Rounded Underflow Subnormal +expx770 exp -895.73 -> 1E-389 Inexact Rounded Underflow Subnormal +expx771 exp -896.3987 -> 1E-389 Inexact Rounded Underflow Subnormal +expx772 exp -896.3988 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped +expx773 exp -898.0081 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped +expx774 exp -898.0082 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped + +-- special values +maxexponent: 999 +minexponent: -999 +expx820 exp Inf -> Infinity +expx821 exp -Inf -> 0 +expx822 exp NaN -> NaN +expx823 exp sNaN -> NaN Invalid_operation +-- propagating NaNs +expx824 exp sNaN123 -> NaN123 Invalid_operation +expx825 exp -sNaN321 -> -NaN321 Invalid_operation +expx826 exp NaN456 -> NaN456 +expx827 exp -NaN654 -> -NaN654 +expx828 exp NaN1 -> NaN1 + +-- Invalid operations due to restrictions +-- [next two probably skipped by most test harnesses] +precision: 100000000 +expx901 exp -Infinity -> NaN Invalid_context +precision: 99999999 +expx902 exp -Infinity -> NaN Invalid_context + +precision: 9 +maxExponent: 1000000 +minExponent: -999999 +expx903 exp -Infinity -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999999 +expx904 exp -Infinity -> 0 +maxExponent: 999999 +minExponent: -1000000 +expx905 exp -Infinity -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999998 +expx906 exp -Infinity -> 0 + +-- +maxExponent: 384 +minExponent: -383 +precision: 16 +rounding: half_even + +-- Null test +expx900 exp # -> NaN Invalid_operation + + +-- Randoms P=50, within 0-999 +Precision: 50 +maxExponent: 384 +minExponent: -383 +expx1501 exp 656.35397950590285612266095596539934213943872885728 -> 1.1243757610640319783611178528839652672062820040314E+285 Inexact Rounded +expx1502 exp 0.93620571093652800225038550600780322831236082781471 -> 2.5502865130986176689199711857825771311178046842009 Inexact Rounded +expx1503 exp 0.00000000000000008340785856601514714183373874105791 -> 1.0000000000000000834078585660151506202691740252512 Inexact Rounded +expx1504 exp 0.00009174057262887789625745574686545163168788456203 -> 1.0000917447809239005146722341251524081006051473273 Inexact Rounded +expx1505 exp 33.909116897973797735657751591014926629051117541243 -> 532773181025002.03543618901306726495870476617232229 Inexact Rounded +expx1506 exp 0.00000740470413004406592124575295278456936809587311 -> 1.0000074047315449333590066395670306135567889210814 Inexact Rounded +expx1507 exp 0.00000000000124854922222108802453746922483071445492 -> 1.0000000000012485492222218674621176239911424968263 Inexact Rounded +expx1508 exp 4.1793280674155659794286951159430651258356014391382 -> 65.321946520147199404199787811336860087975118278185 Inexact Rounded +expx1509 exp 485.43595745460655893746179890255529919221550201686 -> 6.6398403920459617255950476953129377459845366585463E+210 Inexact Rounded +expx1510 exp 0.00000000003547259806590856032527875157830328156597 -> 1.0000000000354725980665377129320589406715000685515 Inexact Rounded +expx1511 exp 0.00000000000000759621497339104047930616478635042678 -> 1.0000000000000075962149733910693305471257715463887 Inexact Rounded +expx1512 exp 9.7959168821760339304571595474480640286072720233796 -> 17960.261146042955179164303653412650751681436352437 Inexact Rounded +expx1513 exp 0.00000000566642006258290526783901451194943164535581 -> 1.0000000056664200786370634609832438815665249347650 Inexact Rounded +expx1514 exp 741.29888791134298194088827572374718940925820027354 -> 8.7501694006317332808128946666402622432064923198731E+321 Inexact Rounded +expx1515 exp 032.75573003552517668808529099897153710887014947935 -> 168125196578678.17725841108617955904425345631092339 Inexact Rounded +expx1516 exp 42.333700726429333308594265553422902463737399437644 -> 2428245675864172475.4681119493045657797309369672012 Inexact Rounded +expx1517 exp 0.00000000000000559682616876491888197609158802835798 -> 1.0000000000000055968261687649345442076732739577049 Inexact Rounded +expx1518 exp 0.00000000000080703688668280193584758300973549486312 -> 1.0000000000008070368866831275901158164321867914342 Inexact Rounded +expx1519 exp 640.72396012796509482382712891709072570653606838251 -> 1.8318094990683394229304133068983914236995326891045E+278 Inexact Rounded +expx1520 exp 0.00000000000000509458922167631071416948112219512224 -> 1.0000000000000050945892216763236915891499324358556 Inexact Rounded +expx1521 exp 6.7670394314315206378625221583973414660727960241395 -> 868.73613012822031367806248697092884415119568271315 Inexact Rounded +expx1522 exp 04.823217407412963506638267226891024138054783122548 -> 124.36457929588837129731821077586705505565904205366 Inexact Rounded +expx1523 exp 193.51307878701196403991208482520115359690106143615 -> 1.1006830872854715677390914655452261550768957576034E+84 Inexact Rounded +expx1524 exp 5.7307749038303650539200345901210497015617393970463 -> 308.20800743106843083522721523715645950574866495196 Inexact Rounded +expx1525 exp 0.00000000000095217825199797965200541169123743500267 -> 1.0000000000009521782519984329737172007991390381273 Inexact Rounded +expx1526 exp 0.00027131440949183370966393682617930153495028919140 -> 1.0002713512185751022906058160480606598754913607364 Inexact Rounded +expx1527 exp 0.00000000064503059114680682343002315662069272707123 -> 1.0000000006450305913548390552323517403613135496633 Inexact Rounded +expx1528 exp 0.00000000000000095616643506527288866235238548440593 -> 1.0000000000000009561664350652733457894781582009094 Inexact Rounded +expx1529 exp 0.00000000000000086449942811678650244459550252743433 -> 1.0000000000000008644994281167868761242261096529986 Inexact Rounded +expx1530 exp 0.06223488355635359965683053157729204988381887621850 -> 1.0642122813392406657789688931838919323826250630831 Inexact Rounded +expx1531 exp 0.00000400710807804429435502657131912308680674057053 -> 1.0000040071161065125925620890019319832127863559260 Inexact Rounded +expx1532 exp 85.522796894744576211573232055494551429297878413017 -> 13870073686404228452757799770251085177.853337368935 Inexact Rounded +expx1533 exp 9.1496720811363678696938036379756663548353399954363 -> 9411.3537122832743386783597629161763057370034495157 Inexact Rounded +expx1534 exp 8.2215705240788294472944382056330516738577785177942 -> 3720.3406813383076953899654701615084425598377758189 Inexact Rounded +expx1535 exp 0.00000000015772064569640613142823203726821076239561 -> 1.0000000001577206457088440324683315788358926129830 Inexact Rounded +expx1536 exp 0.58179346473959531432624153576883440625538017532480 -> 1.7892445018275360163797022372655837188423194863605 Inexact Rounded +expx1537 exp 33.555726197149525061455517784870570470833498096559 -> 374168069896324.62578073148993526626307095854407952 Inexact Rounded +expx1538 exp 9.7898079803906215094140010009583375537259810398659 -> 17850.878119912208888217100998019986634620368538426 Inexact Rounded +expx1539 exp 89.157697327174521542502447953032536541038636966347 -> 525649152320166503771224149330448089550.67293829227 Inexact Rounded +expx1540 exp 25.022947600123328912029051897171319573322888514885 -> 73676343442.952517824345431437683153304645851960524 Inexact Rounded + +-- exp(1) at 34 +Precision: 34 +expx1200 exp 1 -> 2.718281828459045235360287471352662 Inexact Rounded + +-- Randoms P=34, within 0-999 +Precision: 34 +maxExponent: 6144 +minExponent: -6143 +expx1201 exp 309.5948855821510212996700645087188 -> 2.853319692901387521201738015050724E+134 Inexact Rounded +expx1202 exp 9.936543068706211420422803962680164 -> 20672.15839203171877476511093276022 Inexact Rounded +expx1203 exp 6.307870323881505684429839491707908 -> 548.8747777054637296137277391754665 Inexact Rounded +expx1204 exp 0.0003543281389438420535201308282503 -> 1.000354390920573746164733350843155 Inexact Rounded +expx1205 exp 0.0000037087453363918375598394920229 -> 1.000003708752213796324841920189323 Inexact Rounded +expx1206 exp 0.0020432312687512438040222444116585 -> 1.002045320088164826013561630975308 Inexact Rounded +expx1207 exp 6.856313340032177672550343216129586 -> 949.8587981604144147983589660524396 Inexact Rounded +expx1208 exp 0.0000000000402094928333815643326418 -> 1.000000000040209492834189965989612 Inexact Rounded +expx1209 exp 0.0049610784722412117632647003545839 -> 1.004973404997901987039589029277833 Inexact Rounded +expx1210 exp 0.0000891471883724066909746786702686 -> 1.000089151162101085412780088266699 Inexact Rounded +expx1211 exp 08.59979170376061890684723211112566 -> 5430.528314920905714615339273738097 Inexact Rounded +expx1212 exp 9.473117039341003854872778112752590 -> 13005.36234331224953460055897913917 Inexact Rounded +expx1213 exp 0.0999060724692207648429969999310118 -> 1.105067116975190602296052700726802 Inexact Rounded +expx1214 exp 0.0000000927804533555877884082269247 -> 1.000000092780457659694183954740772 Inexact Rounded +expx1215 exp 0.0376578583872889916298772818265677 -> 1.038375900489771946477857818447556 Inexact Rounded +expx1216 exp 261.6896411697539524911536116712307 -> 4.470613562127465095241600174941460E+113 Inexact Rounded +expx1217 exp 0.0709997423269162980875824213889626 -> 1.073580949235407949417814485533172 Inexact Rounded +expx1218 exp 0.0000000444605583295169895235658731 -> 1.000000044460559317887627657593900 Inexact Rounded +expx1219 exp 0.0000021224072854777512281369815185 -> 1.000002122409537785687390631070906 Inexact Rounded +expx1220 exp 547.5174462574156885473558485475052 -> 6.078629247383807942612114579728672E+237 Inexact Rounded +expx1221 exp 0.0000009067598041615192002339844670 -> 1.000000906760215268314680115374387 Inexact Rounded +expx1222 exp 0.0316476500308065365803455533244603 -> 1.032153761880187977658387961769034 Inexact Rounded +expx1223 exp 84.46160530377645101833996706384473 -> 4.799644995897968383503269871697856E+36 Inexact Rounded +expx1224 exp 0.0000000000520599740290848018904145 -> 1.000000000052059974030439922338393 Inexact Rounded +expx1225 exp 0.0000006748530640093620665651726708 -> 1.000000674853291722742292331812997 Inexact Rounded +expx1226 exp 0.0000000116853119761042020507916169 -> 1.000000011685312044377460306165203 Inexact Rounded +expx1227 exp 0.0022593818094258636727616886693280 -> 1.002261936135876893707094845543461 Inexact Rounded +expx1228 exp 0.0029398857673478912249856509667517 -> 1.002944211469495086813087651287012 Inexact Rounded +expx1229 exp 0.7511480029928802775376270557636963 -> 2.119431734510320169806976569366789 Inexact Rounded +expx1230 exp 174.9431952176750671150886423048447 -> 9.481222305374955011464619468044051E+75 Inexact Rounded +expx1231 exp 0.0000810612451694136129199895164424 -> 1.000081064530720924186615149646920 Inexact Rounded +expx1232 exp 51.06888989702669288180946272499035 -> 15098613888619165073959.89896018749 Inexact Rounded +expx1233 exp 0.0000000005992887599437093651494510 -> 1.000000000599288760123282874082758 Inexact Rounded +expx1234 exp 714.8549046761054856311108828903972 -> 2.867744544891081117381595080480784E+310 Inexact Rounded +expx1235 exp 0.0000000004468247802990643645607110 -> 1.000000000446824780398890556720233 Inexact Rounded +expx1236 exp 831.5818151589890366323551672043709 -> 1.417077409182624969435938062261655E+361 Inexact Rounded +expx1237 exp 0.0000000006868323825179605747108044 -> 1.000000000686832382753829935602454 Inexact Rounded +expx1238 exp 0.0000001306740266408976840228440255 -> 1.000000130674035178748675187648098 Inexact Rounded +expx1239 exp 0.3182210609022267704811502412335163 -> 1.374680115667798185758927247894859 Inexact Rounded +expx1240 exp 0.0147741234179104437440264644295501 -> 1.014883800239950682628277534839222 Inexact Rounded + +-- Randoms P=16, within 0-99 +Precision: 16 +maxExponent: 384 +minExponent: -383 +expx1101 exp 8.473011527013724 -> 4783.900643969246 Inexact Rounded +expx1102 exp 0.0000055753022764 -> 1.000005575317818 Inexact Rounded +expx1103 exp 0.0000323474114482 -> 1.000032347934631 Inexact Rounded +expx1104 exp 64.54374138544166 -> 1.073966476173531E+28 Inexact Rounded +expx1105 exp 90.47203246416569 -> 1.956610887250643E+39 Inexact Rounded +expx1106 exp 9.299931532342757 -> 10937.27033325227 Inexact Rounded +expx1107 exp 8.759678437852203 -> 6372.062234495381 Inexact Rounded +expx1108 exp 0.0000931755127172 -> 1.000093179853690 Inexact Rounded +expx1109 exp 0.0000028101158373 -> 1.000002810119786 Inexact Rounded +expx1110 exp 0.0000008008130919 -> 1.000000800813413 Inexact Rounded +expx1111 exp 8.339771722299049 -> 4187.133803081878 Inexact Rounded +expx1112 exp 0.0026140497995474 -> 1.002617469406750 Inexact Rounded +expx1113 exp 0.7478033356261771 -> 2.112354781975418 Inexact Rounded +expx1114 exp 51.77663761827966 -> 3.064135801120365E+22 Inexact Rounded +expx1115 exp 0.1524989783061012 -> 1.164741272084955 Inexact Rounded +expx1116 exp 0.0066298798669219 -> 1.006651906170791 Inexact Rounded +expx1117 exp 9.955141865534960 -> 21060.23334287038 Inexact Rounded +expx1118 exp 92.34503059198483 -> 1.273318993481226E+40 Inexact Rounded +expx1119 exp 0.0000709388677346 -> 1.000070941383956 Inexact Rounded +expx1120 exp 79.12883036433204 -> 2.318538899389243E+34 Inexact Rounded +expx1121 exp 0.0000090881548873 -> 1.000009088196185 Inexact Rounded +expx1122 exp 0.0424828809603411 -> 1.043398194245720 Inexact Rounded +expx1123 exp 0.8009035891427416 -> 2.227552811933310 Inexact Rounded +expx1124 exp 8.825786167283102 -> 6807.540455289995 Inexact Rounded +expx1125 exp 1.535457249746275 -> 4.643448260146849 Inexact Rounded +expx1126 exp 69.02254254355800 -> 9.464754500670653E+29 Inexact Rounded +expx1127 exp 0.0007050554368713 -> 1.000705304046880 Inexact Rounded +expx1128 exp 0.0000081206549504 -> 1.000008120687923 Inexact Rounded +expx1129 exp 0.621774854641137 -> 1.862230298554903 Inexact Rounded +expx1130 exp 3.847629031404354 -> 46.88177613568203 Inexact Rounded +expx1131 exp 24.81250184697732 -> 59694268456.19966 Inexact Rounded +expx1132 exp 5.107546500516044 -> 165.2643809755670 Inexact Rounded +expx1133 exp 79.17810943951986 -> 2.435656372541360E+34 Inexact Rounded +expx1134 exp 0.0051394695667015 -> 1.005152699295301 Inexact Rounded +expx1135 exp 57.44504488501725 -> 8.872908566929688E+24 Inexact Rounded +expx1136 exp 0.0000508388968036 -> 1.000050840189122 Inexact Rounded +expx1137 exp 69.71309932148997 -> 1.888053740693541E+30 Inexact Rounded +expx1138 exp 0.0064183412981502 -> 1.006438982988835 Inexact Rounded +expx1139 exp 9.346991220814677 -> 11464.27802035082 Inexact Rounded +expx1140 exp 33.09087139999152 -> 235062229168763.5 Inexact Rounded + +-- Randoms P=7, within 0-9 +Precision: 7 +maxExponent: 96 +minExponent: -95 +expx1001 exp 2.395441 -> 10.97304 Inexact Rounded +expx1002 exp 0.6406779 -> 1.897767 Inexact Rounded +expx1003 exp 0.5618218 -> 1.753865 Inexact Rounded +expx1004 exp 3.055120 -> 21.22373 Inexact Rounded +expx1005 exp 1.536792 -> 4.649650 Inexact Rounded +expx1006 exp 0.0801591 -> 1.083459 Inexact Rounded +expx1007 exp 0.0966875 -> 1.101516 Inexact Rounded +expx1008 exp 0.0646761 -> 1.066813 Inexact Rounded +expx1009 exp 0.0095670 -> 1.009613 Inexact Rounded +expx1010 exp 2.956859 -> 19.23745 Inexact Rounded +expx1011 exp 7.504679 -> 1816.522 Inexact Rounded +expx1012 exp 0.0045259 -> 1.004536 Inexact Rounded +expx1013 exp 3.810071 -> 45.15364 Inexact Rounded +expx1014 exp 1.502390 -> 4.492413 Inexact Rounded +expx1015 exp 0.0321523 -> 1.032675 Inexact Rounded +expx1016 exp 0.0057214 -> 1.005738 Inexact Rounded +expx1017 exp 9.811445 -> 18241.33 Inexact Rounded +expx1018 exp 3.245249 -> 25.66810 Inexact Rounded +expx1019 exp 0.3189742 -> 1.375716 Inexact Rounded +expx1020 exp 0.8621610 -> 2.368273 Inexact Rounded +expx1021 exp 0.0122511 -> 1.012326 Inexact Rounded +expx1022 exp 2.202088 -> 9.043877 Inexact Rounded +expx1023 exp 8.778203 -> 6491.202 Inexact Rounded +expx1024 exp 0.1896279 -> 1.208800 Inexact Rounded +expx1025 exp 0.4510947 -> 1.570030 Inexact Rounded +expx1026 exp 0.276413 -> 1.318392 Inexact Rounded +expx1027 exp 4.490067 -> 89.12742 Inexact Rounded +expx1028 exp 0.0439786 -> 1.044960 Inexact Rounded +expx1029 exp 0.8168245 -> 2.263301 Inexact Rounded +expx1030 exp 0.0391658 -> 1.039943 Inexact Rounded +expx1031 exp 9.261816 -> 10528.24 Inexact Rounded +expx1032 exp 9.611186 -> 14930.87 Inexact Rounded +expx1033 exp 9.118125 -> 9119.087 Inexact Rounded +expx1034 exp 9.469083 -> 12953.00 Inexact Rounded +expx1035 exp 0.0499983 -> 1.051269 Inexact Rounded +expx1036 exp 0.0050746 -> 1.005087 Inexact Rounded +expx1037 exp 0.0014696 -> 1.001471 Inexact Rounded +expx1038 exp 9.138494 -> 9306.739 Inexact Rounded +expx1039 exp 0.0065436 -> 1.006565 Inexact Rounded +expx1040 exp 0.7284803 -> 2.071930 Inexact Rounded + diff --git a/Lib/test/decimaltestdata/fma.decTest b/Lib/test/decimaltestdata/fma.decTest index 46672af3928..e7b116c39ae 100644 --- a/Lib/test/decimaltestdata/fma.decTest +++ b/Lib/test/decimaltestdata/fma.decTest @@ -1,3426 +1,3426 @@ ------------------------------------------------------------------------- --- fma.decTest -- decimal fused multiply add -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- These tests comprise three parts: --- 1. Sanity checks and other three-operand tests (especially those --- where the fused operation makes a difference) --- 2. Multiply tests (third operand is neutral zero [0E+emax]) --- 3. Addition tests (first operand is 1) --- The multiply and addition tests are extensive because FMA may have --- its own dedicated multiplication or addition routine(s), and they --- also inherently check the left-to-right properties. - --- Sanity checks -fmax0001 fma 1 1 1 -> 2 -fmax0002 fma 1 1 2 -> 3 -fmax0003 fma 2 2 3 -> 7 -fmax0004 fma 9 9 9 -> 90 -fmax0005 fma -1 1 1 -> 0 -fmax0006 fma -1 1 2 -> 1 -fmax0007 fma -2 2 3 -> -1 -fmax0008 fma -9 9 9 -> -72 -fmax0011 fma 1 -1 1 -> 0 -fmax0012 fma 1 -1 2 -> 1 -fmax0013 fma 2 -2 3 -> -1 -fmax0014 fma 9 -9 9 -> -72 -fmax0015 fma 1 1 -1 -> 0 -fmax0016 fma 1 1 -2 -> -1 -fmax0017 fma 2 2 -3 -> 1 -fmax0018 fma 9 9 -9 -> 72 -fmax0019 fma 3 5 7 -> 22 -fmax0029 fma 3 -5 7 -> -8 - --- non-integer exacts -fma0100 fma 25.2 63.6 -438 -> 1164.72 -fma0101 fma 0.301 0.380 334 -> 334.114380 -fma0102 fma 49.2 -4.8 23.3 -> -212.86 -fma0103 fma 4.22 0.079 -94.6 -> -94.26662 -fma0104 fma 903 0.797 0.887 -> 720.578 -fma0105 fma 6.13 -161 65.9 -> -921.03 -fma0106 fma 28.2 727 5.45 -> 20506.85 -fma0107 fma 4 605 688 -> 3108 -fma0108 fma 93.3 0.19 0.226 -> 17.953 -fma0109 fma 0.169 -341 5.61 -> -52.019 -fma0110 fma -72.2 30 -51.2 -> -2217.2 -fma0111 fma -0.409 13 20.4 -> 15.083 -fma0112 fma 317 77.0 19.0 -> 24428.0 -fma0113 fma 47 6.58 1.62 -> 310.88 -fma0114 fma 1.36 0.984 0.493 -> 1.83124 -fma0115 fma 72.7 274 1.56 -> 19921.36 -fma0116 fma 335 847 83 -> 283828 -fma0117 fma 666 0.247 25.4 -> 189.902 -fma0118 fma -3.87 3.06 78.0 -> 66.1578 -fma0119 fma 0.742 192 35.6 -> 178.064 -fma0120 fma -91.6 5.29 0.153 -> -484.411 - --- cases where result is different from separate multiply + add; each --- is preceded by the result of unfused multiply and add --- [this is about 20% of all similar cases in general] --- 888565290 1557.96930 -86087.7578 -> 1.38435735E+12 -fma0201 fma 888565290 1557.96930 -86087.7578 -> 1.38435736E+12 Inexact Rounded --- -85519342.9 735155419 42010431 -> -6.28700084E+16 -fma0205 fma -85519342.9 735155419 42010431 -> -6.28700083E+16 Inexact Rounded --- -98025.5 -294603.472 10414348.2 -> 2.88890669E+10 -fma0208 fma -98025.5 -294603.472 10414348.2 -> 2.88890670E+10 Inexact Rounded --- 5967627.39 83526540.6 498494.810 -> 4.98455271E+14 -fma0211 fma 5967627.39 83526540.6 498494.810 -> 4.98455272E+14 Inexact Rounded --- 3456.9433 874.39518 197866.615 -> 3220601.18 -fma0216 fma 3456.9433 874.39518 197866.615 -> 3220601.17 Inexact Rounded --- 62769.8287 2096.98927 48.420317 -> 131627705 -fma0218 fma 62769.8287 2096.98927 48.420317 -> 131627706 Inexact Rounded --- -68.81500 59961113.9 -8988862 -> -4.13521291E+9 -fma0219 fma -68.81500 59961113.9 -8988862 -> -4.13521292E+9 Inexact Rounded --- 2126341.02 63491.5152 302427455 -> 1.35307040E+11 -fma0226 fma 2126341.02 63491.5152 302427455 -> 1.35307041E+11 Inexact Rounded - - --- Infinite combinations -fmax0800 fma Inf Inf Inf -> Infinity -fmax0801 fma Inf Inf -Inf -> NaN Invalid_operation -fmax0802 fma Inf -Inf Inf -> NaN Invalid_operation -fmax0803 fma Inf -Inf -Inf -> -Infinity -fmax0804 fma -Inf Inf Inf -> NaN Invalid_operation -fmax0805 fma -Inf Inf -Inf -> -Infinity -fmax0806 fma -Inf -Inf Inf -> Infinity -fmax0807 fma -Inf -Inf -Inf -> NaN Invalid_operation -fmax0808 fma -Inf 0 1 -> NaN Invalid_operation -fmax0809 fma -Inf 0 NaN -> NaN Invalid_operation - --- Triple NaN propagation -fmax0900 fma NaN2 NaN3 NaN5 -> NaN2 -fmax0901 fma 0 NaN3 NaN5 -> NaN3 -fmax0902 fma 0 0 NaN5 -> NaN5 --- first sNaN wins (consider qNaN from earlier sNaN being --- overridden by an sNaN in third operand) -fmax0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -fmax0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation -fmax0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation -fmax0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -fmax0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation -fmax0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation - --- MULTIPLICATION TESTS ------------------------------------------------ --- sanity checks (as base, above) -fmax2000 fma 2 2 0E+999999 -> 4 -fmax2001 fma 2 3 0E+999999 -> 6 -fmax2002 fma 5 1 0E+999999 -> 5 -fmax2003 fma 5 2 0E+999999 -> 10 -fmax2004 fma 1.20 2 0E+999999 -> 2.40 -fmax2005 fma 1.20 0 0E+999999 -> 0.00 -fmax2006 fma 1.20 -2 0E+999999 -> -2.40 -fmax2007 fma -1.20 2 0E+999999 -> -2.40 -fmax2008 fma -1.20 0 0E+999999 -> 0.00 -fmax2009 fma -1.20 -2 0E+999999 -> 2.40 -fmax2010 fma 5.09 7.1 0E+999999 -> 36.139 -fmax2011 fma 2.5 4 0E+999999 -> 10.0 -fmax2012 fma 2.50 4 0E+999999 -> 10.00 -fmax2013 fma 1.23456789 1.00000000 0E+999999 -> 1.23456789 Rounded -fmax2014 fma 9.999999999 9.999999999 0E+999999 -> 100.000000 Inexact Rounded -fmax2015 fma 2.50 4 0E+999999 -> 10.00 -precision: 6 -fmax2016 fma 2.50 4 0E+999999 -> 10.00 -fmax2017 fma 9.999999 9.999999 0E+999999 -> 100.000 Inexact Rounded -fmax2018 fma 9.999999 -9.999999 0E+999999 -> -100.000 Inexact Rounded -fmax2019 fma -9.999999 9.999999 0E+999999 -> -100.000 Inexact Rounded -fmax2020 fma -9.999999 -9.999999 0E+999999 -> 100.000 Inexact Rounded - --- 1999.12.21: next one is an edge case if intermediate longs are used -precision: 15 -fmax2059 fma 999999999999 9765625 0E+999999 -> 9.76562499999023E+18 Inexact Rounded -precision: 30 -fmax2160 fma 999999999999 9765625 0E+999999 -> 9765624999990234375 -precision: 9 ------ - --- zeros, etc. -fmax2021 fma 0 0 0E+999999 -> 0 -fmax2022 fma 0 -0 0E+999999 -> 0 -fmax2023 fma -0 0 0E+999999 -> 0 -fmax2024 fma -0 -0 0E+999999 -> 0 -fmax2025 fma -0.0 -0.0 0E+999999 -> 0.00 -fmax2026 fma -0.0 -0.0 0E+999999 -> 0.00 -fmax2027 fma -0.0 -0.0 0E+999999 -> 0.00 -fmax2028 fma -0.0 -0.0 0E+999999 -> 0.00 -fmax2030 fma 5.00 1E-3 0E+999999 -> 0.00500 -fmax2031 fma 00.00 0.000 0E+999999 -> 0.00000 -fmax2032 fma 00.00 0E-3 0E+999999 -> 0.00000 -- rhs is 0 -fmax2033 fma 0E-3 00.00 0E+999999 -> 0.00000 -- lhs is 0 -fmax2034 fma -5.00 1E-3 0E+999999 -> -0.00500 -fmax2035 fma -00.00 0.000 0E+999999 -> 0.00000 -fmax2036 fma -00.00 0E-3 0E+999999 -> 0.00000 -- rhs is 0 -fmax2037 fma -0E-3 00.00 0E+999999 -> 0.00000 -- lhs is 0 -fmax2038 fma 5.00 -1E-3 0E+999999 -> -0.00500 -fmax2039 fma 00.00 -0.000 0E+999999 -> 0.00000 -fmax2040 fma 00.00 -0E-3 0E+999999 -> 0.00000 -- rhs is 0 -fmax2041 fma 0E-3 -00.00 0E+999999 -> 0.00000 -- lhs is 0 -fmax2042 fma -5.00 -1E-3 0E+999999 -> 0.00500 -fmax2043 fma -00.00 -0.000 0E+999999 -> 0.00000 -fmax2044 fma -00.00 -0E-3 0E+999999 -> 0.00000 -- rhs is 0 -fmax2045 fma -0E-3 -00.00 0E+999999 -> 0.00000 -- lhs is 0 - --- examples from decarith multiply -fmax2050 fma 1.20 3 0E+999999 -> 3.60 -fmax2051 fma 7 3 0E+999999 -> 21 -fmax2052 fma 0.9 0.8 0E+999999 -> 0.72 -fmax2053 fma 0.9 -0 0E+999999 -> 0.0 -fmax2054 fma 654321 654321 0E+999999 -> 4.28135971E+11 Inexact Rounded - -fmax2060 fma 123.45 1e7 0E+999999 -> 1.2345E+9 -fmax2061 fma 123.45 1e8 0E+999999 -> 1.2345E+10 -fmax2062 fma 123.45 1e+9 0E+999999 -> 1.2345E+11 -fmax2063 fma 123.45 1e10 0E+999999 -> 1.2345E+12 -fmax2064 fma 123.45 1e11 0E+999999 -> 1.2345E+13 -fmax2065 fma 123.45 1e12 0E+999999 -> 1.2345E+14 -fmax2066 fma 123.45 1e13 0E+999999 -> 1.2345E+15 - - --- test some intermediate lengths -precision: 9 -fmax2080 fma 0.1 123456789 0E+999999 -> 12345678.9 -fmax2081 fma 0.1 1234567891 0E+999999 -> 123456789 Inexact Rounded -fmax2082 fma 0.1 12345678912 0E+999999 -> 1.23456789E+9 Inexact Rounded -fmax2083 fma 0.1 12345678912345 0E+999999 -> 1.23456789E+12 Inexact Rounded -fmax2084 fma 0.1 123456789 0E+999999 -> 12345678.9 -precision: 8 -fmax2085 fma 0.1 12345678912 0E+999999 -> 1.2345679E+9 Inexact Rounded -fmax2086 fma 0.1 12345678912345 0E+999999 -> 1.2345679E+12 Inexact Rounded -precision: 7 -fmax2087 fma 0.1 12345678912 0E+999999 -> 1.234568E+9 Inexact Rounded -fmax2088 fma 0.1 12345678912345 0E+999999 -> 1.234568E+12 Inexact Rounded - -precision: 9 -fmax2090 fma 123456789 0.1 0E+999999 -> 12345678.9 -fmax2091 fma 1234567891 0.1 0E+999999 -> 123456789 Inexact Rounded -fmax2092 fma 12345678912 0.1 0E+999999 -> 1.23456789E+9 Inexact Rounded -fmax2093 fma 12345678912345 0.1 0E+999999 -> 1.23456789E+12 Inexact Rounded -fmax2094 fma 123456789 0.1 0E+999999 -> 12345678.9 -precision: 8 -fmax2095 fma 12345678912 0.1 0E+999999 -> 1.2345679E+9 Inexact Rounded -fmax2096 fma 12345678912345 0.1 0E+999999 -> 1.2345679E+12 Inexact Rounded -precision: 7 -fmax2097 fma 12345678912 0.1 0E+999999 -> 1.234568E+9 Inexact Rounded -fmax2098 fma 12345678912345 0.1 0E+999999 -> 1.234568E+12 Inexact Rounded - --- test some more edge cases and carries -maxexponent: 9999 -minexponent: -9999 -precision: 33 -fmax2101 fma 9 9 0E+999999 -> 81 -fmax2102 fma 9 90 0E+999999 -> 810 -fmax2103 fma 9 900 0E+999999 -> 8100 -fmax2104 fma 9 9000 0E+999999 -> 81000 -fmax2105 fma 9 90000 0E+999999 -> 810000 -fmax2106 fma 9 900000 0E+999999 -> 8100000 -fmax2107 fma 9 9000000 0E+999999 -> 81000000 -fmax2108 fma 9 90000000 0E+999999 -> 810000000 -fmax2109 fma 9 900000000 0E+999999 -> 8100000000 -fmax2110 fma 9 9000000000 0E+999999 -> 81000000000 -fmax2111 fma 9 90000000000 0E+999999 -> 810000000000 -fmax2112 fma 9 900000000000 0E+999999 -> 8100000000000 -fmax2113 fma 9 9000000000000 0E+999999 -> 81000000000000 -fmax2114 fma 9 90000000000000 0E+999999 -> 810000000000000 -fmax2115 fma 9 900000000000000 0E+999999 -> 8100000000000000 -fmax2116 fma 9 9000000000000000 0E+999999 -> 81000000000000000 -fmax2117 fma 9 90000000000000000 0E+999999 -> 810000000000000000 -fmax2118 fma 9 900000000000000000 0E+999999 -> 8100000000000000000 -fmax2119 fma 9 9000000000000000000 0E+999999 -> 81000000000000000000 -fmax2120 fma 9 90000000000000000000 0E+999999 -> 810000000000000000000 -fmax2121 fma 9 900000000000000000000 0E+999999 -> 8100000000000000000000 -fmax2122 fma 9 9000000000000000000000 0E+999999 -> 81000000000000000000000 -fmax2123 fma 9 90000000000000000000000 0E+999999 -> 810000000000000000000000 --- test some more edge cases without carries -fmax2131 fma 3 3 0E+999999 -> 9 -fmax2132 fma 3 30 0E+999999 -> 90 -fmax2133 fma 3 300 0E+999999 -> 900 -fmax2134 fma 3 3000 0E+999999 -> 9000 -fmax2135 fma 3 30000 0E+999999 -> 90000 -fmax2136 fma 3 300000 0E+999999 -> 900000 -fmax2137 fma 3 3000000 0E+999999 -> 9000000 -fmax2138 fma 3 30000000 0E+999999 -> 90000000 -fmax2139 fma 3 300000000 0E+999999 -> 900000000 -fmax2140 fma 3 3000000000 0E+999999 -> 9000000000 -fmax2141 fma 3 30000000000 0E+999999 -> 90000000000 -fmax2142 fma 3 300000000000 0E+999999 -> 900000000000 -fmax2143 fma 3 3000000000000 0E+999999 -> 9000000000000 -fmax2144 fma 3 30000000000000 0E+999999 -> 90000000000000 -fmax2145 fma 3 300000000000000 0E+999999 -> 900000000000000 -fmax2146 fma 3 3000000000000000 0E+999999 -> 9000000000000000 -fmax2147 fma 3 30000000000000000 0E+999999 -> 90000000000000000 -fmax2148 fma 3 300000000000000000 0E+999999 -> 900000000000000000 -fmax2149 fma 3 3000000000000000000 0E+999999 -> 9000000000000000000 -fmax2150 fma 3 30000000000000000000 0E+999999 -> 90000000000000000000 -fmax2151 fma 3 300000000000000000000 0E+999999 -> 900000000000000000000 -fmax2152 fma 3 3000000000000000000000 0E+999999 -> 9000000000000000000000 -fmax2153 fma 3 30000000000000000000000 0E+999999 -> 90000000000000000000000 - -maxexponent: 999999 -minexponent: -999999 -precision: 9 --- test some cases that are close to exponent overflow/underflow -fmax2170 fma 1 9e999999 0E+999999 -> 9E+999999 -fmax2171 fma 1 9.9e999999 0E+999999 -> 9.9E+999999 -fmax2172 fma 1 9.99e999999 0E+999999 -> 9.99E+999999 -fmax2173 fma 9e999999 1 0E+999999 -> 9E+999999 -fmax2174 fma 9.9e999999 1 0E+999999 -> 9.9E+999999 -fmax2176 fma 9.99e999999 1 0E+999999 -> 9.99E+999999 -fmax2177 fma 1 9.99999e999999 0E+999999 -> 9.99999E+999999 -fmax2178 fma 9.99999e999999 1 0E+999999 -> 9.99999E+999999 - -fmax2180 fma 0.1 9e-999998 0E+999999 -> 9E-999999 -fmax2181 fma 0.1 99e-999998 0E+999999 -> 9.9E-999998 -fmax2182 fma 0.1 999e-999998 0E+999999 -> 9.99E-999997 - -fmax2183 fma 0.1 9e-999998 0E+999999 -> 9E-999999 -fmax2184 fma 0.1 99e-999998 0E+999999 -> 9.9E-999998 -fmax2185 fma 0.1 999e-999998 0E+999999 -> 9.99E-999997 -fmax2186 fma 0.1 999e-999997 0E+999999 -> 9.99E-999996 -fmax2187 fma 0.1 9999e-999997 0E+999999 -> 9.999E-999995 -fmax2188 fma 0.1 99999e-999997 0E+999999 -> 9.9999E-999994 - -fmax2190 fma 1 9e-999998 0E+999999 -> 9E-999998 -fmax2191 fma 1 99e-999998 0E+999999 -> 9.9E-999997 -fmax2192 fma 1 999e-999998 0E+999999 -> 9.99E-999996 -fmax2193 fma 9e-999998 1 0E+999999 -> 9E-999998 -fmax2194 fma 99e-999998 1 0E+999999 -> 9.9E-999997 -fmax2195 fma 999e-999998 1 0E+999999 -> 9.99E-999996 - --- long operand triangle -precision: 33 -fmax2246 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916511992830 Inexact Rounded -precision: 32 -fmax2247 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651199283 Inexact Rounded -precision: 31 -fmax2248 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165119928 Inexact Rounded -precision: 30 -fmax2249 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916511993 Inexact Rounded -precision: 29 -fmax2250 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651199 Inexact Rounded -precision: 28 -fmax2251 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165120 Inexact Rounded -precision: 27 -fmax2252 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916512 Inexact Rounded -precision: 26 -fmax2253 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651 Inexact Rounded -precision: 25 -fmax2254 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165 Inexact Rounded -precision: 24 -fmax2255 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671917 Inexact Rounded -precision: 23 -fmax2256 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967192 Inexact Rounded -precision: 22 -fmax2257 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719 Inexact Rounded -precision: 21 -fmax2258 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369672 Inexact Rounded -precision: 20 -fmax2259 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967 Inexact Rounded -precision: 19 -fmax2260 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933697 Inexact Rounded -precision: 18 -fmax2261 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193370 Inexact Rounded -precision: 17 -fmax2262 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119337 Inexact Rounded -precision: 16 -fmax2263 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011934 Inexact Rounded -precision: 15 -fmax2264 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193 Inexact Rounded -precision: 14 -fmax2265 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119 Inexact Rounded -precision: 13 -fmax2266 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908012 Inexact Rounded -precision: 12 -fmax2267 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801 Inexact Rounded -precision: 11 -fmax2268 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080 Inexact Rounded -precision: 10 -fmax2269 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908 Inexact Rounded -precision: 9 -fmax2270 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.291 Inexact Rounded -precision: 8 -fmax2271 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29 Inexact Rounded -precision: 7 -fmax2272 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.3 Inexact Rounded -precision: 6 -fmax2273 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433 Inexact Rounded -precision: 5 -fmax2274 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.4543E+5 Inexact Rounded -precision: 4 -fmax2275 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.454E+5 Inexact Rounded -precision: 3 -fmax2276 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.45E+5 Inexact Rounded -precision: 2 -fmax2277 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.5E+5 Inexact Rounded -precision: 1 -fmax2278 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1E+5 Inexact Rounded - --- test some edge cases with exact rounding -maxexponent: 9999 -minexponent: -9999 -precision: 9 -fmax2301 fma 9 9 0E+999999 -> 81 -fmax2302 fma 9 90 0E+999999 -> 810 -fmax2303 fma 9 900 0E+999999 -> 8100 -fmax2304 fma 9 9000 0E+999999 -> 81000 -fmax2305 fma 9 90000 0E+999999 -> 810000 -fmax2306 fma 9 900000 0E+999999 -> 8100000 -fmax2307 fma 9 9000000 0E+999999 -> 81000000 -fmax2308 fma 9 90000000 0E+999999 -> 810000000 -fmax2309 fma 9 900000000 0E+999999 -> 8.10000000E+9 Rounded -fmax2310 fma 9 9000000000 0E+999999 -> 8.10000000E+10 Rounded -fmax2311 fma 9 90000000000 0E+999999 -> 8.10000000E+11 Rounded -fmax2312 fma 9 900000000000 0E+999999 -> 8.10000000E+12 Rounded -fmax2313 fma 9 9000000000000 0E+999999 -> 8.10000000E+13 Rounded -fmax2314 fma 9 90000000000000 0E+999999 -> 8.10000000E+14 Rounded -fmax2315 fma 9 900000000000000 0E+999999 -> 8.10000000E+15 Rounded -fmax2316 fma 9 9000000000000000 0E+999999 -> 8.10000000E+16 Rounded -fmax2317 fma 9 90000000000000000 0E+999999 -> 8.10000000E+17 Rounded -fmax2318 fma 9 900000000000000000 0E+999999 -> 8.10000000E+18 Rounded -fmax2319 fma 9 9000000000000000000 0E+999999 -> 8.10000000E+19 Rounded -fmax2320 fma 9 90000000000000000000 0E+999999 -> 8.10000000E+20 Rounded -fmax2321 fma 9 900000000000000000000 0E+999999 -> 8.10000000E+21 Rounded -fmax2322 fma 9 9000000000000000000000 0E+999999 -> 8.10000000E+22 Rounded -fmax2323 fma 9 90000000000000000000000 0E+999999 -> 8.10000000E+23 Rounded - --- fastpath breakers -precision: 29 -fmax2330 fma 1.491824697641270317824852952837224 1.105170918075647624811707826490246514675628614562883537345747603 0E+999999 -> 1.6487212707001281468486507878 Inexact Rounded -precision: 55 -fmax2331 fma 0.8958341352965282506768545828765117803873717284891040428 0.8958341352965282506768545828765117803873717284891040428 0E+999999 -> 0.8025187979624784829842553829934069955890983696752228299 Inexact Rounded - - --- tryzeros cases -precision: 7 -rounding: half_up -maxExponent: 92 -minexponent: -92 -fmax2504 fma 0E-60 1000E-60 0E+999999 -> 0E-98 Clamped -fmax2505 fma 100E+60 0E+60 0E+999999 -> 0E+92 Clamped - --- mixed with zeros -maxexponent: 999999 -minexponent: -999999 -precision: 9 -fmax2541 fma 0 -1 0E+999999 -> 0 -fmax2542 fma -0 -1 0E+999999 -> 0 -fmax2543 fma 0 1 0E+999999 -> 0 -fmax2544 fma -0 1 0E+999999 -> 0 -fmax2545 fma -1 0 0E+999999 -> 0 -fmax2546 fma -1 -0 0E+999999 -> 0 -fmax2547 fma 1 0 0E+999999 -> 0 -fmax2548 fma 1 -0 0E+999999 -> 0 - -fmax2551 fma 0.0 -1 0E+999999 -> 0.0 -fmax2552 fma -0.0 -1 0E+999999 -> 0.0 -fmax2553 fma 0.0 1 0E+999999 -> 0.0 -fmax2554 fma -0.0 1 0E+999999 -> 0.0 -fmax2555 fma -1.0 0 0E+999999 -> 0.0 -fmax2556 fma -1.0 -0 0E+999999 -> 0.0 -fmax2557 fma 1.0 0 0E+999999 -> 0.0 -fmax2558 fma 1.0 -0 0E+999999 -> 0.0 - -fmax2561 fma 0 -1.0 0E+999999 -> 0.0 -fmax2562 fma -0 -1.0 0E+999999 -> 0.0 -fmax2563 fma 0 1.0 0E+999999 -> 0.0 -fmax2564 fma -0 1.0 0E+999999 -> 0.0 -fmax2565 fma -1 0.0 0E+999999 -> 0.0 -fmax2566 fma -1 -0.0 0E+999999 -> 0.0 -fmax2567 fma 1 0.0 0E+999999 -> 0.0 -fmax2568 fma 1 -0.0 0E+999999 -> 0.0 - -fmax2571 fma 0.0 -1.0 0E+999999 -> 0.00 -fmax2572 fma -0.0 -1.0 0E+999999 -> 0.00 -fmax2573 fma 0.0 1.0 0E+999999 -> 0.00 -fmax2574 fma -0.0 1.0 0E+999999 -> 0.00 -fmax2575 fma -1.0 0.0 0E+999999 -> 0.00 -fmax2576 fma -1.0 -0.0 0E+999999 -> 0.00 -fmax2577 fma 1.0 0.0 0E+999999 -> 0.00 -fmax2578 fma 1.0 -0.0 0E+999999 -> 0.00 - - --- Specials -fmax2580 fma Inf -Inf 0E+999999 -> -Infinity -fmax2581 fma Inf -1000 0E+999999 -> -Infinity -fmax2582 fma Inf -1 0E+999999 -> -Infinity -fmax2583 fma Inf -0 0E+999999 -> NaN Invalid_operation -fmax2584 fma Inf 0 0E+999999 -> NaN Invalid_operation -fmax2585 fma Inf 1 0E+999999 -> Infinity -fmax2586 fma Inf 1000 0E+999999 -> Infinity -fmax2587 fma Inf Inf 0E+999999 -> Infinity -fmax2588 fma -1000 Inf 0E+999999 -> -Infinity -fmax2589 fma -Inf Inf 0E+999999 -> -Infinity -fmax2590 fma -1 Inf 0E+999999 -> -Infinity -fmax2591 fma -0 Inf 0E+999999 -> NaN Invalid_operation -fmax2592 fma 0 Inf 0E+999999 -> NaN Invalid_operation -fmax2593 fma 1 Inf 0E+999999 -> Infinity -fmax2594 fma 1000 Inf 0E+999999 -> Infinity -fmax2595 fma Inf Inf 0E+999999 -> Infinity - -fmax2600 fma -Inf -Inf 0E+999999 -> Infinity -fmax2601 fma -Inf -1000 0E+999999 -> Infinity -fmax2602 fma -Inf -1 0E+999999 -> Infinity -fmax2603 fma -Inf -0 0E+999999 -> NaN Invalid_operation -fmax2604 fma -Inf 0 0E+999999 -> NaN Invalid_operation -fmax2605 fma -Inf 1 0E+999999 -> -Infinity -fmax2606 fma -Inf 1000 0E+999999 -> -Infinity -fmax2607 fma -Inf Inf 0E+999999 -> -Infinity -fmax2608 fma -1000 Inf 0E+999999 -> -Infinity -fmax2609 fma -Inf -Inf 0E+999999 -> Infinity -fmax2610 fma -1 -Inf 0E+999999 -> Infinity -fmax2611 fma -0 -Inf 0E+999999 -> NaN Invalid_operation -fmax2612 fma 0 -Inf 0E+999999 -> NaN Invalid_operation -fmax2613 fma 1 -Inf 0E+999999 -> -Infinity -fmax2614 fma 1000 -Inf 0E+999999 -> -Infinity -fmax2615 fma Inf -Inf 0E+999999 -> -Infinity - -fmax2621 fma NaN -Inf 0E+999999 -> NaN -fmax2622 fma NaN -1000 0E+999999 -> NaN -fmax2623 fma NaN -1 0E+999999 -> NaN -fmax2624 fma NaN -0 0E+999999 -> NaN -fmax2625 fma NaN 0 0E+999999 -> NaN -fmax2626 fma NaN 1 0E+999999 -> NaN -fmax2627 fma NaN 1000 0E+999999 -> NaN -fmax2628 fma NaN Inf 0E+999999 -> NaN -fmax2629 fma NaN NaN 0E+999999 -> NaN -fmax2630 fma -Inf NaN 0E+999999 -> NaN -fmax2631 fma -1000 NaN 0E+999999 -> NaN -fmax2632 fma -1 NaN 0E+999999 -> NaN -fmax2633 fma -0 NaN 0E+999999 -> NaN -fmax2634 fma 0 NaN 0E+999999 -> NaN -fmax2635 fma 1 NaN 0E+999999 -> NaN -fmax2636 fma 1000 NaN 0E+999999 -> NaN -fmax2637 fma Inf NaN 0E+999999 -> NaN - -fmax2641 fma sNaN -Inf 0E+999999 -> NaN Invalid_operation -fmax2642 fma sNaN -1000 0E+999999 -> NaN Invalid_operation -fmax2643 fma sNaN -1 0E+999999 -> NaN Invalid_operation -fmax2644 fma sNaN -0 0E+999999 -> NaN Invalid_operation -fmax2645 fma sNaN 0 0E+999999 -> NaN Invalid_operation -fmax2646 fma sNaN 1 0E+999999 -> NaN Invalid_operation -fmax2647 fma sNaN 1000 0E+999999 -> NaN Invalid_operation -fmax2648 fma sNaN NaN 0E+999999 -> NaN Invalid_operation -fmax2649 fma sNaN sNaN 0E+999999 -> NaN Invalid_operation -fmax2650 fma NaN sNaN 0E+999999 -> NaN Invalid_operation -fmax2651 fma -Inf sNaN 0E+999999 -> NaN Invalid_operation -fmax2652 fma -1000 sNaN 0E+999999 -> NaN Invalid_operation -fmax2653 fma -1 sNaN 0E+999999 -> NaN Invalid_operation -fmax2654 fma -0 sNaN 0E+999999 -> NaN Invalid_operation -fmax2655 fma 0 sNaN 0E+999999 -> NaN Invalid_operation -fmax2656 fma 1 sNaN 0E+999999 -> NaN Invalid_operation -fmax2657 fma 1000 sNaN 0E+999999 -> NaN Invalid_operation -fmax2658 fma Inf sNaN 0E+999999 -> NaN Invalid_operation -fmax2659 fma NaN sNaN 0E+999999 -> NaN Invalid_operation - --- propagating NaNs -fmax2661 fma NaN9 -Inf 0E+999999 -> NaN9 -fmax2662 fma NaN8 999 0E+999999 -> NaN8 -fmax2663 fma NaN71 Inf 0E+999999 -> NaN71 -fmax2664 fma NaN6 NaN5 0E+999999 -> NaN6 -fmax2665 fma -Inf NaN4 0E+999999 -> NaN4 -fmax2666 fma -999 NaN33 0E+999999 -> NaN33 -fmax2667 fma Inf NaN2 0E+999999 -> NaN2 - -fmax2671 fma sNaN99 -Inf 0E+999999 -> NaN99 Invalid_operation -fmax2672 fma sNaN98 -11 0E+999999 -> NaN98 Invalid_operation -fmax2673 fma sNaN97 NaN 0E+999999 -> NaN97 Invalid_operation -fmax2674 fma sNaN16 sNaN94 0E+999999 -> NaN16 Invalid_operation -fmax2675 fma NaN95 sNaN93 0E+999999 -> NaN93 Invalid_operation -fmax2676 fma -Inf sNaN92 0E+999999 -> NaN92 Invalid_operation -fmax2677 fma 088 sNaN91 0E+999999 -> NaN91 Invalid_operation -fmax2678 fma Inf sNaN90 0E+999999 -> NaN90 Invalid_operation -fmax2679 fma NaN sNaN89 0E+999999 -> NaN89 Invalid_operation - -fmax2681 fma -NaN9 -Inf 0E+999999 -> -NaN9 -fmax2682 fma -NaN8 999 0E+999999 -> -NaN8 -fmax2683 fma -NaN71 Inf 0E+999999 -> -NaN71 -fmax2684 fma -NaN6 -NaN5 0E+999999 -> -NaN6 -fmax2685 fma -Inf -NaN4 0E+999999 -> -NaN4 -fmax2686 fma -999 -NaN33 0E+999999 -> -NaN33 -fmax2687 fma Inf -NaN2 0E+999999 -> -NaN2 - -fmax2691 fma -sNaN99 -Inf 0E+999999 -> -NaN99 Invalid_operation -fmax2692 fma -sNaN98 -11 0E+999999 -> -NaN98 Invalid_operation -fmax2693 fma -sNaN97 NaN 0E+999999 -> -NaN97 Invalid_operation -fmax2694 fma -sNaN16 -sNaN94 0E+999999 -> -NaN16 Invalid_operation -fmax2695 fma -NaN95 -sNaN93 0E+999999 -> -NaN93 Invalid_operation -fmax2696 fma -Inf -sNaN92 0E+999999 -> -NaN92 Invalid_operation -fmax2697 fma 088 -sNaN91 0E+999999 -> -NaN91 Invalid_operation -fmax2698 fma Inf -sNaN90 0E+999999 -> -NaN90 Invalid_operation -fmax2699 fma -NaN -sNaN89 0E+999999 -> -NaN89 Invalid_operation - -fmax2701 fma -NaN -Inf 0E+999999 -> -NaN -fmax2702 fma -NaN 999 0E+999999 -> -NaN -fmax2703 fma -NaN Inf 0E+999999 -> -NaN -fmax2704 fma -NaN -NaN 0E+999999 -> -NaN -fmax2705 fma -Inf -NaN0 0E+999999 -> -NaN -fmax2706 fma -999 -NaN 0E+999999 -> -NaN -fmax2707 fma Inf -NaN 0E+999999 -> -NaN - -fmax2711 fma -sNaN -Inf 0E+999999 -> -NaN Invalid_operation -fmax2712 fma -sNaN -11 0E+999999 -> -NaN Invalid_operation -fmax2713 fma -sNaN00 NaN 0E+999999 -> -NaN Invalid_operation -fmax2714 fma -sNaN -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2715 fma -NaN -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2716 fma -Inf -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2717 fma 088 -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2718 fma Inf -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2719 fma -NaN -sNaN 0E+999999 -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results -maxexponent: 999999 -minexponent: -999999 -fmax2730 fma +1.23456789012345E-0 9E+999999 0E+999999 -> Infinity Inexact Overflow Rounded -fmax2731 fma 9E+999999 +1.23456789012345E-0 0E+999999 -> Infinity Inexact Overflow Rounded -fmax2732 fma +0.100 9E-999999 0E+999999 -> 9.00E-1000000 Subnormal -fmax2733 fma 9E-999999 +0.100 0E+999999 -> 9.00E-1000000 Subnormal -fmax2735 fma -1.23456789012345E-0 9E+999999 0E+999999 -> -Infinity Inexact Overflow Rounded -fmax2736 fma 9E+999999 -1.23456789012345E-0 0E+999999 -> -Infinity Inexact Overflow Rounded -fmax2737 fma -0.100 9E-999999 0E+999999 -> -9.00E-1000000 Subnormal -fmax2738 fma 9E-999999 -0.100 0E+999999 -> -9.00E-1000000 Subnormal - --- signs -fmax2751 fma 1e+777777 1e+411111 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2752 fma 1e+777777 -1e+411111 0E+999999 -> -Infinity Overflow Inexact Rounded -fmax2753 fma -1e+777777 1e+411111 0E+999999 -> -Infinity Overflow Inexact Rounded -fmax2754 fma -1e+777777 -1e+411111 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2755 fma 1e-777777 1e-411111 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2756 fma 1e-777777 -1e-411111 0E+999999 -> -0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2757 fma -1e-777777 1e-411111 0E+999999 -> -0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2758 fma -1e-777777 -1e-411111 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -precision: 9 -fmax2760 fma 1e-600000 1e-400001 0E+999999 -> 1E-1000001 Subnormal -fmax2761 fma 1e-600000 1e-400002 0E+999999 -> 1E-1000002 Subnormal -fmax2762 fma 1e-600000 1e-400003 0E+999999 -> 1E-1000003 Subnormal -fmax2763 fma 1e-600000 1e-400004 0E+999999 -> 1E-1000004 Subnormal -fmax2764 fma 1e-600000 1e-400005 0E+999999 -> 1E-1000005 Subnormal -fmax2765 fma 1e-600000 1e-400006 0E+999999 -> 1E-1000006 Subnormal -fmax2766 fma 1e-600000 1e-400007 0E+999999 -> 1E-1000007 Subnormal -fmax2767 fma 1e-600000 1e-400008 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2768 fma 1e-600000 1e-400009 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2769 fma 1e-600000 1e-400010 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -fmax2770 fma 1e+600000 1e+400001 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2771 fma 1e+600000 1e+400002 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2772 fma 1e+600000 1e+400003 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2773 fma 1e+600000 1e+400004 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2774 fma 1e+600000 1e+400005 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2775 fma 1e+600000 1e+400006 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2776 fma 1e+600000 1e+400007 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2777 fma 1e+600000 1e+400008 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2778 fma 1e+600000 1e+400009 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2779 fma 1e+600000 1e+400010 0E+999999 -> Infinity Overflow Inexact Rounded - --- 'subnormal' test edge condition at higher precisions -precision: 99 -fmax2780 fma 1e-600000 1e-400007 0E+999999 -> 1E-1000007 Subnormal -fmax2781 fma 1e-600000 1e-400008 0E+999999 -> 1E-1000008 Subnormal -fmax2782 fma 1e-600000 1e-400097 0E+999999 -> 1E-1000097 Subnormal -fmax2783 fma 1e-600000 1e-400098 0E+999999 -> 0E-1000097 Underflow Subnormal Inexact Rounded Clamped -precision: 999 -fmax2784 fma 1e-600000 1e-400997 0E+999999 -> 1E-1000997 Subnormal -fmax2785 fma 1e-600000 1e-400998 0E+999999 -> 0E-1000997 Underflow Subnormal Inexact Rounded Clamped - --- test subnormals rounding -precision: 5 -maxExponent: 999 -minexponent: -999 -rounding: half_even - -fmax2801 fma 1.0000E-999 1 0E+999999 -> 1.0000E-999 -fmax2802 fma 1.000E-999 1e-1 0E+999999 -> 1.000E-1000 Subnormal -fmax2803 fma 1.00E-999 1e-2 0E+999999 -> 1.00E-1001 Subnormal -fmax2804 fma 1.0E-999 1e-3 0E+999999 -> 1.0E-1002 Subnormal -fmax2805 fma 1.0E-999 1e-4 0E+999999 -> 1E-1003 Subnormal Rounded -fmax2806 fma 1.3E-999 1e-4 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded -fmax2807 fma 1.5E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2808 fma 1.7E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2809 fma 2.3E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2810 fma 2.5E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2811 fma 2.7E-999 1e-4 0E+999999 -> 3E-1003 Underflow Subnormal Inexact Rounded -fmax2812 fma 1.49E-999 1e-4 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded -fmax2813 fma 1.50E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2814 fma 1.51E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2815 fma 2.49E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2816 fma 2.50E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2817 fma 2.51E-999 1e-4 0E+999999 -> 3E-1003 Underflow Subnormal Inexact Rounded - -fmax2818 fma 1E-999 1e-4 0E+999999 -> 1E-1003 Subnormal -fmax2819 fma 3E-999 1e-5 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2820 fma 5E-999 1e-5 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2821 fma 7E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded -fmax2822 fma 9E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded -fmax2823 fma 9.9E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded - -fmax2824 fma 1E-999 -1e-4 0E+999999 -> -1E-1003 Subnormal -fmax2825 fma 3E-999 -1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2826 fma -5E-999 1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2827 fma 7E-999 -1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded -fmax2828 fma -9E-999 1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded -fmax2829 fma 9.9E-999 -1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded -fmax2830 fma 3.0E-999 -1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped - -fmax2831 fma 1.0E-501 1e-501 0E+999999 -> 1.0E-1002 Subnormal -fmax2832 fma 2.0E-501 2e-501 0E+999999 -> 4.0E-1002 Subnormal -fmax2833 fma 4.0E-501 4e-501 0E+999999 -> 1.60E-1001 Subnormal -fmax2834 fma 10.0E-501 10e-501 0E+999999 -> 1.000E-1000 Subnormal -fmax2835 fma 30.0E-501 30e-501 0E+999999 -> 9.000E-1000 Subnormal -fmax2836 fma 40.0E-501 40e-501 0E+999999 -> 1.6000E-999 - --- squares -fmax2840 fma 1E-502 1e-502 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2841 fma 1E-501 1e-501 0E+999999 -> 1E-1002 Subnormal -fmax2842 fma 2E-501 2e-501 0E+999999 -> 4E-1002 Subnormal -fmax2843 fma 4E-501 4e-501 0E+999999 -> 1.6E-1001 Subnormal -fmax2844 fma 10E-501 10e-501 0E+999999 -> 1.00E-1000 Subnormal -fmax2845 fma 30E-501 30e-501 0E+999999 -> 9.00E-1000 Subnormal -fmax2846 fma 40E-501 40e-501 0E+999999 -> 1.600E-999 - --- cubes -fmax2850 fma 1E-670 1e-335 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2851 fma 1E-668 1e-334 0E+999999 -> 1E-1002 Subnormal -fmax2852 fma 4E-668 2e-334 0E+999999 -> 8E-1002 Subnormal -fmax2853 fma 9E-668 3e-334 0E+999999 -> 2.7E-1001 Subnormal -fmax2854 fma 16E-668 4e-334 0E+999999 -> 6.4E-1001 Subnormal -fmax2855 fma 25E-668 5e-334 0E+999999 -> 1.25E-1000 Subnormal -fmax2856 fma 10E-668 100e-334 0E+999999 -> 1.000E-999 - --- test derived from result of 0.099 ** 999 at 15 digits with unlimited exponent -precision: 19 -fmax2860 fma 6636851557994578716E-520 6636851557994578716E-520 0E+999999 -> 4.40477986028551E-1003 Underflow Subnormal Inexact Rounded - --- Long operand overflow may be a different path -precision: 3 -maxExponent: 999999 -minexponent: -999999 -fmax2870 fma 1 9.999E+999999 0E+999999 -> Infinity Inexact Overflow Rounded -fmax2871 fma 1 -9.999E+999999 0E+999999 -> -Infinity Inexact Overflow Rounded -fmax2872 fma 9.999E+999999 1 0E+999999 -> Infinity Inexact Overflow Rounded -fmax2873 fma -9.999E+999999 1 0E+999999 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -precision: 5 -maxexponent: 79 -minexponent: -79 -fmax2881 fma 1.2347E-40 1.2347E-40 0E+999999 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax2882 fma 1.234E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow -fmax2883 fma 1.23E-40 1.23E-40 0E+999999 -> 1.513E-80 Inexact Rounded Subnormal Underflow -fmax2884 fma 1.2E-40 1.2E-40 0E+999999 -> 1.44E-80 Subnormal -fmax2885 fma 1.2E-40 1.2E-41 0E+999999 -> 1.44E-81 Subnormal -fmax2886 fma 1.2E-40 1.2E-42 0E+999999 -> 1.4E-82 Subnormal Inexact Rounded Underflow -fmax2887 fma 1.2E-40 1.3E-42 0E+999999 -> 1.6E-82 Subnormal Inexact Rounded Underflow -fmax2888 fma 1.3E-40 1.3E-42 0E+999999 -> 1.7E-82 Subnormal Inexact Rounded Underflow -fmax2889 fma 1.3E-40 1.3E-43 0E+999999 -> 2E-83 Subnormal Inexact Rounded Underflow -fmax2890 fma 1.3E-41 1.3E-43 0E+999999 -> 0E-83 Clamped Subnormal Inexact Rounded Underflow - -fmax2891 fma 1.2345E-39 1.234E-40 0E+999999 -> 1.5234E-79 Inexact Rounded -fmax2892 fma 1.23456E-39 1.234E-40 0E+999999 -> 1.5234E-79 Inexact Rounded -fmax2893 fma 1.2345E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow -fmax2894 fma 1.23456E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow -fmax2895 fma 1.2345E-41 1.234E-40 0E+999999 -> 1.52E-81 Inexact Rounded Subnormal Underflow -fmax2896 fma 1.23456E-41 1.234E-40 0E+999999 -> 1.52E-81 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - -fmax2900 fma 0.3000000000E-191 0.3000000000E-191 0E+999999 -> 9.00000000000000E-384 Subnormal Rounded -fmax2901 fma 0.3000000001E-191 0.3000000001E-191 0E+999999 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded -fmax2902 fma 9.999999999999999E-383 0.0999999999999 0E+999999 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded -fmax2903 fma 9.999999999999999E-383 0.09999999999999 0E+999999 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded -fmax2904 fma 9.999999999999999E-383 0.099999999999999 0E+999999 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded -fmax2905 fma 9.999999999999999E-383 0.0999999999999999 0E+999999 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded --- prove operands are exact -fmax2906 fma 9.999999999999999E-383 1 0E+999999 -> 9.999999999999999E-383 -fmax2907 fma 1 0.09999999999999999 0E+999999 -> 0.09999999999999999 --- the next rounds to Nmin -fmax2908 fma 9.999999999999999E-383 0.09999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax2909 fma 9.999999999999999E-383 0.099999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax2910 fma 9.999999999999999E-383 0.0999999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax2911 fma 9.999999999999999E-383 0.09999999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded - --- Examples from SQL proposal (Krishna Kulkarni) -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 -fmax2921 fma 130E-2 120E-2 0E+999999 -> 1.5600 -fmax2922 fma 130E-2 12E-1 0E+999999 -> 1.560 -fmax2923 fma 130E-2 1E0 0E+999999 -> 1.30 - --- Null tests -fmax2990 fma # 10 0E+999999 -> NaN Invalid_operation -fmax2991 fma 10 # 0E+999999 -> NaN Invalid_operation - --- ADDITION TESTS ------------------------------------------------------ -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- [first group are 'quick confidence check'] -fmax3001 fma 1 1 1 -> 2 -fmax3002 fma 1 2 3 -> 5 -fmax3003 fma 1 '5.75' '3.3' -> 9.05 -fmax3004 fma 1 '5' '-3' -> 2 -fmax3005 fma 1 '-5' '-3' -> -8 -fmax3006 fma 1 '-7' '2.5' -> -4.5 -fmax3007 fma 1 '0.7' '0.3' -> 1.0 -fmax3008 fma 1 '1.25' '1.25' -> 2.50 -fmax3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' -fmax3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' - -fmax3011 fma 1 '0.4444444444' '0.5555555555' -> '1.00000000' Inexact Rounded -fmax3012 fma 1 '0.4444444440' '0.5555555555' -> '1.00000000' Inexact Rounded -fmax3013 fma 1 '0.4444444444' '0.5555555550' -> '0.999999999' Inexact Rounded -fmax3014 fma 1 '0.44444444449' '0' -> '0.444444444' Inexact Rounded -fmax3015 fma 1 '0.444444444499' '0' -> '0.444444444' Inexact Rounded -fmax3016 fma 1 '0.4444444444999' '0' -> '0.444444444' Inexact Rounded -fmax3017 fma 1 '0.4444444445000' '0' -> '0.444444445' Inexact Rounded -fmax3018 fma 1 '0.4444444445001' '0' -> '0.444444445' Inexact Rounded -fmax3019 fma 1 '0.444444444501' '0' -> '0.444444445' Inexact Rounded -fmax3020 fma 1 '0.44444444451' '0' -> '0.444444445' Inexact Rounded - -fmax3021 fma 1 0 1 -> 1 -fmax3022 fma 1 1 1 -> 2 -fmax3023 fma 1 2 1 -> 3 -fmax3024 fma 1 3 1 -> 4 -fmax3025 fma 1 4 1 -> 5 -fmax3026 fma 1 5 1 -> 6 -fmax3027 fma 1 6 1 -> 7 -fmax3028 fma 1 7 1 -> 8 -fmax3029 fma 1 8 1 -> 9 -fmax3030 fma 1 9 1 -> 10 - --- some carrying effects -fmax3031 fma 1 '0.9998' '0.0000' -> '0.9998' -fmax3032 fma 1 '0.9998' '0.0001' -> '0.9999' -fmax3033 fma 1 '0.9998' '0.0002' -> '1.0000' -fmax3034 fma 1 '0.9998' '0.0003' -> '1.0001' - -fmax3035 fma 1 '70' '10000e+9' -> '1.00000000E+13' Inexact Rounded -fmax3036 fma 1 '700' '10000e+9' -> '1.00000000E+13' Inexact Rounded -fmax3037 fma 1 '7000' '10000e+9' -> '1.00000000E+13' Inexact Rounded -fmax3038 fma 1 '70000' '10000e+9' -> '1.00000001E+13' Inexact Rounded -fmax3039 fma 1 '700000' '10000e+9' -> '1.00000007E+13' Rounded - --- symmetry: -fmax3040 fma 1 '10000e+9' '70' -> '1.00000000E+13' Inexact Rounded -fmax3041 fma 1 '10000e+9' '700' -> '1.00000000E+13' Inexact Rounded -fmax3042 fma 1 '10000e+9' '7000' -> '1.00000000E+13' Inexact Rounded -fmax3044 fma 1 '10000e+9' '70000' -> '1.00000001E+13' Inexact Rounded -fmax3045 fma 1 '10000e+9' '700000' -> '1.00000007E+13' Rounded - --- same, higher precision -precision: 15 -fmax3046 fma 1 '10000e+9' '7' -> '10000000000007' -fmax3047 fma 1 '10000e+9' '70' -> '10000000000070' -fmax3048 fma 1 '10000e+9' '700' -> '10000000000700' -fmax3049 fma 1 '10000e+9' '7000' -> '10000000007000' -fmax3050 fma 1 '10000e+9' '70000' -> '10000000070000' -fmax3051 fma 1 '10000e+9' '700000' -> '10000000700000' -fmax3052 fma 1 '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -fmax3053 fma 1 '12' '7.00' -> '19.00' -fmax3054 fma 1 '1.3' '-1.07' -> '0.23' -fmax3055 fma 1 '1.3' '-1.30' -> '0.00' -fmax3056 fma 1 '1.3' '-2.07' -> '-0.77' -fmax3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' - --- zero preservation -precision: 6 -fmax3060 fma 1 '10000e+9' '70000' -> '1.00000E+13' Inexact Rounded -fmax3061 fma 1 1 '0.0001' -> '1.0001' -fmax3062 fma 1 1 '0.00001' -> '1.00001' -fmax3063 fma 1 1 '0.000001' -> '1.00000' Inexact Rounded -fmax3064 fma 1 1 '0.0000001' -> '1.00000' Inexact Rounded -fmax3065 fma 1 1 '0.00000001' -> '1.00000' Inexact Rounded - --- some funny zeros [in case of bad signum] -fmax3070 fma 1 1 0 -> 1 -fmax3071 fma 1 1 0. -> 1 -fmax3072 fma 1 1 .0 -> 1.0 -fmax3073 fma 1 1 0.0 -> 1.0 -fmax3074 fma 1 1 0.00 -> 1.00 -fmax3075 fma 1 0 1 -> 1 -fmax3076 fma 1 0. 1 -> 1 -fmax3077 fma 1 .0 1 -> 1.0 -fmax3078 fma 1 0.0 1 -> 1.0 -fmax3079 fma 1 0.00 1 -> 1.00 - -precision: 9 - --- some carries -fmax3080 fma 1 999999998 1 -> 999999999 -fmax3081 fma 1 999999999 1 -> 1.00000000E+9 Rounded -fmax3082 fma 1 99999999 1 -> 100000000 -fmax3083 fma 1 9999999 1 -> 10000000 -fmax3084 fma 1 999999 1 -> 1000000 -fmax3085 fma 1 99999 1 -> 100000 -fmax3086 fma 1 9999 1 -> 10000 -fmax3087 fma 1 999 1 -> 1000 -fmax3088 fma 1 99 1 -> 100 -fmax3089 fma 1 9 1 -> 10 - - --- more LHS swaps -fmax3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' -fmax3091 fma 1 '-56267E-6' 0 -> '-0.056267' -fmax3092 fma 1 '-56267E-5' 0 -> '-0.56267' -fmax3093 fma 1 '-56267E-4' 0 -> '-5.6267' -fmax3094 fma 1 '-56267E-3' 0 -> '-56.267' -fmax3095 fma 1 '-56267E-2' 0 -> '-562.67' -fmax3096 fma 1 '-56267E-1' 0 -> '-5626.7' -fmax3097 fma 1 '-56267E-0' 0 -> '-56267' -fmax3098 fma 1 '-5E-10' 0 -> '-5E-10' -fmax3099 fma 1 '-5E-7' 0 -> '-5E-7' -fmax3100 fma 1 '-5E-6' 0 -> '-0.000005' -fmax3101 fma 1 '-5E-5' 0 -> '-0.00005' -fmax3102 fma 1 '-5E-4' 0 -> '-0.0005' -fmax3103 fma 1 '-5E-1' 0 -> '-0.5' -fmax3104 fma 1 '-5E0' 0 -> '-5' -fmax3105 fma 1 '-5E1' 0 -> '-50' -fmax3106 fma 1 '-5E5' 0 -> '-500000' -fmax3107 fma 1 '-5E8' 0 -> '-500000000' -fmax3108 fma 1 '-5E9' 0 -> '-5.00000000E+9' Rounded -fmax3109 fma 1 '-5E10' 0 -> '-5.00000000E+10' Rounded -fmax3110 fma 1 '-5E11' 0 -> '-5.00000000E+11' Rounded -fmax3111 fma 1 '-5E100' 0 -> '-5.00000000E+100' Rounded - --- more RHS swaps -fmax3113 fma 1 0 '-56267E-10' -> '-0.0000056267' -fmax3114 fma 1 0 '-56267E-6' -> '-0.056267' -fmax3116 fma 1 0 '-56267E-5' -> '-0.56267' -fmax3117 fma 1 0 '-56267E-4' -> '-5.6267' -fmax3119 fma 1 0 '-56267E-3' -> '-56.267' -fmax3120 fma 1 0 '-56267E-2' -> '-562.67' -fmax3121 fma 1 0 '-56267E-1' -> '-5626.7' -fmax3122 fma 1 0 '-56267E-0' -> '-56267' -fmax3123 fma 1 0 '-5E-10' -> '-5E-10' -fmax3124 fma 1 0 '-5E-7' -> '-5E-7' -fmax3125 fma 1 0 '-5E-6' -> '-0.000005' -fmax3126 fma 1 0 '-5E-5' -> '-0.00005' -fmax3127 fma 1 0 '-5E-4' -> '-0.0005' -fmax3128 fma 1 0 '-5E-1' -> '-0.5' -fmax3129 fma 1 0 '-5E0' -> '-5' -fmax3130 fma 1 0 '-5E1' -> '-50' -fmax3131 fma 1 0 '-5E5' -> '-500000' -fmax3132 fma 1 0 '-5E8' -> '-500000000' -fmax3133 fma 1 0 '-5E9' -> '-5.00000000E+9' Rounded -fmax3134 fma 1 0 '-5E10' -> '-5.00000000E+10' Rounded -fmax3135 fma 1 0 '-5E11' -> '-5.00000000E+11' Rounded -fmax3136 fma 1 0 '-5E100' -> '-5.00000000E+100' Rounded - --- related -fmax3137 fma 1 1 '0E-12' -> '1.00000000' Rounded -fmax3138 fma 1 -1 '0E-12' -> '-1.00000000' Rounded -fmax3139 fma 1 '0E-12' 1 -> '1.00000000' Rounded -fmax3140 fma 1 '0E-12' -1 -> '-1.00000000' Rounded -fmax3141 fma 1 1E+4 0.0000 -> '10000.0000' -fmax3142 fma 1 1E+4 0.00000 -> '10000.0000' Rounded -fmax3143 fma 1 0.000 1E+5 -> '100000.000' -fmax3144 fma 1 0.0000 1E+5 -> '100000.000' Rounded - --- [some of the next group are really constructor tests] -fmax3146 fma 1 '00.0' 0 -> '0.0' -fmax3147 fma 1 '0.00' 0 -> '0.00' -fmax3148 fma 1 0 '0.00' -> '0.00' -fmax3149 fma 1 0 '00.0' -> '0.0' -fmax3150 fma 1 '00.0' '0.00' -> '0.00' -fmax3151 fma 1 '0.00' '00.0' -> '0.00' -fmax3152 fma 1 '3' '.3' -> '3.3' -fmax3153 fma 1 '3.' '.3' -> '3.3' -fmax3154 fma 1 '3.0' '.3' -> '3.3' -fmax3155 fma 1 '3.00' '.3' -> '3.30' -fmax3156 fma 1 '3' '3' -> '6' -fmax3157 fma 1 '3' '+3' -> '6' -fmax3158 fma 1 '3' '-3' -> '0' -fmax3159 fma 1 '0.3' '-0.3' -> '0.0' -fmax3160 fma 1 '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -precision: 15 -fmax3161 fma 1 '1E+12' '-1' -> '999999999999' -fmax3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' -fmax3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' -fmax3164 fma 1 '-1' '1E+12' -> '999999999999' -fmax3165 fma 1 '7E+12' '-1' -> '6999999999999' -fmax3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' -fmax3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' -fmax3168 fma 1 '-1' '7E+12' -> '6999999999999' - --- 123456789012345 123456789012345 1 23456789012345 -fmax3170 fma 1 '0.444444444444444' '0.555555555555563' -> '1.00000000000001' Inexact Rounded -fmax3171 fma 1 '0.444444444444444' '0.555555555555562' -> '1.00000000000001' Inexact Rounded -fmax3172 fma 1 '0.444444444444444' '0.555555555555561' -> '1.00000000000001' Inexact Rounded -fmax3173 fma 1 '0.444444444444444' '0.555555555555560' -> '1.00000000000000' Inexact Rounded -fmax3174 fma 1 '0.444444444444444' '0.555555555555559' -> '1.00000000000000' Inexact Rounded -fmax3175 fma 1 '0.444444444444444' '0.555555555555558' -> '1.00000000000000' Inexact Rounded -fmax3176 fma 1 '0.444444444444444' '0.555555555555557' -> '1.00000000000000' Inexact Rounded -fmax3177 fma 1 '0.444444444444444' '0.555555555555556' -> '1.00000000000000' Rounded -fmax3178 fma 1 '0.444444444444444' '0.555555555555555' -> '0.999999999999999' -fmax3179 fma 1 '0.444444444444444' '0.555555555555554' -> '0.999999999999998' -fmax3180 fma 1 '0.444444444444444' '0.555555555555553' -> '0.999999999999997' -fmax3181 fma 1 '0.444444444444444' '0.555555555555552' -> '0.999999999999996' -fmax3182 fma 1 '0.444444444444444' '0.555555555555551' -> '0.999999999999995' -fmax3183 fma 1 '0.444444444444444' '0.555555555555550' -> '0.999999999999994' - --- and some more, including residue effects and different roundings -precision: 9 -rounding: half_up -fmax3200 fma 1 '123456789' 0 -> '123456789' -fmax3201 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded -fmax3202 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded -fmax3203 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded -fmax3204 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded -fmax3205 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded -fmax3206 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded -fmax3207 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded -fmax3208 fma 1 '123456789' 0.5 -> '123456790' Inexact Rounded -fmax3209 fma 1 '123456789' 0.500000001 -> '123456790' Inexact Rounded -fmax3210 fma 1 '123456789' 0.500001 -> '123456790' Inexact Rounded -fmax3211 fma 1 '123456789' 0.51 -> '123456790' Inexact Rounded -fmax3212 fma 1 '123456789' 0.6 -> '123456790' Inexact Rounded -fmax3213 fma 1 '123456789' 0.9 -> '123456790' Inexact Rounded -fmax3214 fma 1 '123456789' 0.99999 -> '123456790' Inexact Rounded -fmax3215 fma 1 '123456789' 0.999999999 -> '123456790' Inexact Rounded -fmax3216 fma 1 '123456789' 1 -> '123456790' -fmax3217 fma 1 '123456789' 1.000000001 -> '123456790' Inexact Rounded -fmax3218 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded -fmax3219 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded - -rounding: half_even -fmax3220 fma 1 '123456789' 0 -> '123456789' -fmax3221 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded -fmax3222 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded -fmax3223 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded -fmax3224 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded -fmax3225 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded -fmax3226 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded -fmax3227 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded -fmax3228 fma 1 '123456789' 0.5 -> '123456790' Inexact Rounded -fmax3229 fma 1 '123456789' 0.500000001 -> '123456790' Inexact Rounded -fmax3230 fma 1 '123456789' 0.500001 -> '123456790' Inexact Rounded -fmax3231 fma 1 '123456789' 0.51 -> '123456790' Inexact Rounded -fmax3232 fma 1 '123456789' 0.6 -> '123456790' Inexact Rounded -fmax3233 fma 1 '123456789' 0.9 -> '123456790' Inexact Rounded -fmax3234 fma 1 '123456789' 0.99999 -> '123456790' Inexact Rounded -fmax3235 fma 1 '123456789' 0.999999999 -> '123456790' Inexact Rounded -fmax3236 fma 1 '123456789' 1 -> '123456790' -fmax3237 fma 1 '123456789' 1.00000001 -> '123456790' Inexact Rounded -fmax3238 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded -fmax3239 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded --- critical few with even bottom digit... -fmax3240 fma 1 '123456788' 0.499999999 -> '123456788' Inexact Rounded -fmax3241 fma 1 '123456788' 0.5 -> '123456788' Inexact Rounded -fmax3242 fma 1 '123456788' 0.500000001 -> '123456789' Inexact Rounded - -rounding: down -fmax3250 fma 1 '123456789' 0 -> '123456789' -fmax3251 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded -fmax3252 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded -fmax3253 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded -fmax3254 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded -fmax3255 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded -fmax3256 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded -fmax3257 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded -fmax3258 fma 1 '123456789' 0.5 -> '123456789' Inexact Rounded -fmax3259 fma 1 '123456789' 0.500000001 -> '123456789' Inexact Rounded -fmax3260 fma 1 '123456789' 0.500001 -> '123456789' Inexact Rounded -fmax3261 fma 1 '123456789' 0.51 -> '123456789' Inexact Rounded -fmax3262 fma 1 '123456789' 0.6 -> '123456789' Inexact Rounded -fmax3263 fma 1 '123456789' 0.9 -> '123456789' Inexact Rounded -fmax3264 fma 1 '123456789' 0.99999 -> '123456789' Inexact Rounded -fmax3265 fma 1 '123456789' 0.999999999 -> '123456789' Inexact Rounded -fmax3266 fma 1 '123456789' 1 -> '123456790' -fmax3267 fma 1 '123456789' 1.00000001 -> '123456790' Inexact Rounded -fmax3268 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded -fmax3269 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded - --- input preparation tests (operands should not be rounded) -precision: 3 -rounding: half_up - -fmax3270 fma 1 '12345678900000' 9999999999999 -> '2.23E+13' Inexact Rounded -fmax3271 fma 1 '9999999999999' 12345678900000 -> '2.23E+13' Inexact Rounded - -fmax3272 fma 1 '12E+3' '3444' -> '1.54E+4' Inexact Rounded -fmax3273 fma 1 '12E+3' '3446' -> '1.54E+4' Inexact Rounded -fmax3274 fma 1 '12E+3' '3449.9' -> '1.54E+4' Inexact Rounded -fmax3275 fma 1 '12E+3' '3450.0' -> '1.55E+4' Inexact Rounded -fmax3276 fma 1 '12E+3' '3450.1' -> '1.55E+4' Inexact Rounded -fmax3277 fma 1 '12E+3' '3454' -> '1.55E+4' Inexact Rounded -fmax3278 fma 1 '12E+3' '3456' -> '1.55E+4' Inexact Rounded - -fmax3281 fma 1 '3444' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3282 fma 1 '3446' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3283 fma 1 '3449.9' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3284 fma 1 '3450.0' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3285 fma 1 '3450.1' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3286 fma 1 '3454' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3287 fma 1 '3456' '12E+3' -> '1.55E+4' Inexact Rounded - -rounding: half_down -fmax3291 fma 1 '3444' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3292 fma 1 '3446' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3293 fma 1 '3449.9' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3294 fma 1 '3450.0' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3295 fma 1 '3450.1' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3296 fma 1 '3454' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3297 fma 1 '3456' '12E+3' -> '1.55E+4' Inexact Rounded - --- 1 in last place tests -rounding: half_up -fmax3301 fma 1 -1 1 -> 0 -fmax3302 fma 1 0 1 -> 1 -fmax3303 fma 1 1 1 -> 2 -fmax3304 fma 1 12 1 -> 13 -fmax3305 fma 1 98 1 -> 99 -fmax3306 fma 1 99 1 -> 100 -fmax3307 fma 1 100 1 -> 101 -fmax3308 fma 1 101 1 -> 102 -fmax3309 fma 1 -1 -1 -> -2 -fmax3310 fma 1 0 -1 -> -1 -fmax3311 fma 1 1 -1 -> 0 -fmax3312 fma 1 12 -1 -> 11 -fmax3313 fma 1 98 -1 -> 97 -fmax3314 fma 1 99 -1 -> 98 -fmax3315 fma 1 100 -1 -> 99 -fmax3316 fma 1 101 -1 -> 100 - -fmax3321 fma 1 -0.01 0.01 -> 0.00 -fmax3322 fma 1 0.00 0.01 -> 0.01 -fmax3323 fma 1 0.01 0.01 -> 0.02 -fmax3324 fma 1 0.12 0.01 -> 0.13 -fmax3325 fma 1 0.98 0.01 -> 0.99 -fmax3326 fma 1 0.99 0.01 -> 1.00 -fmax3327 fma 1 1.00 0.01 -> 1.01 -fmax3328 fma 1 1.01 0.01 -> 1.02 -fmax3329 fma 1 -0.01 -0.01 -> -0.02 -fmax3330 fma 1 0.00 -0.01 -> -0.01 -fmax3331 fma 1 0.01 -0.01 -> 0.00 -fmax3332 fma 1 0.12 -0.01 -> 0.11 -fmax3333 fma 1 0.98 -0.01 -> 0.97 -fmax3334 fma 1 0.99 -0.01 -> 0.98 -fmax3335 fma 1 1.00 -0.01 -> 0.99 -fmax3336 fma 1 1.01 -0.01 -> 1.00 - --- some more cases where fma 1 ing 0 affects the coefficient -precision: 9 -fmax3340 fma 1 1E+3 0 -> 1000 -fmax3341 fma 1 1E+8 0 -> 100000000 -fmax3342 fma 1 1E+9 0 -> 1.00000000E+9 Rounded -fmax3343 fma 1 1E+10 0 -> 1.00000000E+10 Rounded --- which simply follow from these cases ... -fmax3344 fma 1 1E+3 1 -> 1001 -fmax3345 fma 1 1E+8 1 -> 100000001 -fmax3346 fma 1 1E+9 1 -> 1.00000000E+9 Inexact Rounded -fmax3347 fma 1 1E+10 1 -> 1.00000000E+10 Inexact Rounded -fmax3348 fma 1 1E+3 7 -> 1007 -fmax3349 fma 1 1E+8 7 -> 100000007 -fmax3350 fma 1 1E+9 7 -> 1.00000001E+9 Inexact Rounded -fmax3351 fma 1 1E+10 7 -> 1.00000000E+10 Inexact Rounded - --- tryzeros cases -precision: 7 -rounding: half_up -maxExponent: 92 -minexponent: -92 -fmax3361 fma 1 0E+50 10000E+1 -> 1.0000E+5 -fmax3362 fma 1 10000E+1 0E-50 -> 100000.0 Rounded -fmax3363 fma 1 10000E+1 10000E-50 -> 100000.0 Rounded Inexact -fmax3364 fma 1 9.999999E+92 -9.999999E+92 -> 0E+86 - --- a curiosity from JSR 13 testing -rounding: half_down -precision: 10 -fmax3370 fma 1 99999999 81512 -> 100081511 -precision: 6 -fmax3371 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact -rounding: half_up -precision: 10 -fmax3372 fma 1 99999999 81512 -> 100081511 -precision: 6 -fmax3373 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact -rounding: half_even -precision: 10 -fmax3374 fma 1 99999999 81512 -> 100081511 -precision: 6 -fmax3375 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact - --- ulp replacement tests -precision: 9 -maxexponent: 999999 -minexponent: -999999 -fmax3400 fma 1 1 77e-7 -> 1.0000077 -fmax3401 fma 1 1 77e-8 -> 1.00000077 -fmax3402 fma 1 1 77e-9 -> 1.00000008 Inexact Rounded -fmax3403 fma 1 1 77e-10 -> 1.00000001 Inexact Rounded -fmax3404 fma 1 1 77e-11 -> 1.00000000 Inexact Rounded -fmax3405 fma 1 1 77e-12 -> 1.00000000 Inexact Rounded -fmax3406 fma 1 1 77e-999 -> 1.00000000 Inexact Rounded -fmax3407 fma 1 1 77e-999999 -> 1.00000000 Inexact Rounded - -fmax3410 fma 1 10 77e-7 -> 10.0000077 -fmax3411 fma 1 10 77e-8 -> 10.0000008 Inexact Rounded -fmax3412 fma 1 10 77e-9 -> 10.0000001 Inexact Rounded -fmax3413 fma 1 10 77e-10 -> 10.0000000 Inexact Rounded -fmax3414 fma 1 10 77e-11 -> 10.0000000 Inexact Rounded -fmax3415 fma 1 10 77e-12 -> 10.0000000 Inexact Rounded -fmax3416 fma 1 10 77e-999 -> 10.0000000 Inexact Rounded -fmax3417 fma 1 10 77e-999999 -> 10.0000000 Inexact Rounded - -fmax3420 fma 1 77e-7 1 -> 1.0000077 -fmax3421 fma 1 77e-8 1 -> 1.00000077 -fmax3422 fma 1 77e-9 1 -> 1.00000008 Inexact Rounded -fmax3423 fma 1 77e-10 1 -> 1.00000001 Inexact Rounded -fmax3424 fma 1 77e-11 1 -> 1.00000000 Inexact Rounded -fmax3425 fma 1 77e-12 1 -> 1.00000000 Inexact Rounded -fmax3426 fma 1 77e-999 1 -> 1.00000000 Inexact Rounded -fmax3427 fma 1 77e-999999 1 -> 1.00000000 Inexact Rounded - -fmax3430 fma 1 77e-7 10 -> 10.0000077 -fmax3431 fma 1 77e-8 10 -> 10.0000008 Inexact Rounded -fmax3432 fma 1 77e-9 10 -> 10.0000001 Inexact Rounded -fmax3433 fma 1 77e-10 10 -> 10.0000000 Inexact Rounded -fmax3434 fma 1 77e-11 10 -> 10.0000000 Inexact Rounded -fmax3435 fma 1 77e-12 10 -> 10.0000000 Inexact Rounded -fmax3436 fma 1 77e-999 10 -> 10.0000000 Inexact Rounded -fmax3437 fma 1 77e-999999 10 -> 10.0000000 Inexact Rounded - --- negative ulps -fmax3440 fma 1 1 -77e-7 -> 0.9999923 -fmax3441 fma 1 1 -77e-8 -> 0.99999923 -fmax3442 fma 1 1 -77e-9 -> 0.999999923 -fmax3443 fma 1 1 -77e-10 -> 0.999999992 Inexact Rounded -fmax3444 fma 1 1 -77e-11 -> 0.999999999 Inexact Rounded -fmax3445 fma 1 1 -77e-12 -> 1.00000000 Inexact Rounded -fmax3446 fma 1 1 -77e-999 -> 1.00000000 Inexact Rounded -fmax3447 fma 1 1 -77e-999999 -> 1.00000000 Inexact Rounded - -fmax3450 fma 1 10 -77e-7 -> 9.9999923 -fmax3451 fma 1 10 -77e-8 -> 9.99999923 -fmax3452 fma 1 10 -77e-9 -> 9.99999992 Inexact Rounded -fmax3453 fma 1 10 -77e-10 -> 9.99999999 Inexact Rounded -fmax3454 fma 1 10 -77e-11 -> 10.0000000 Inexact Rounded -fmax3455 fma 1 10 -77e-12 -> 10.0000000 Inexact Rounded -fmax3456 fma 1 10 -77e-999 -> 10.0000000 Inexact Rounded -fmax3457 fma 1 10 -77e-999999 -> 10.0000000 Inexact Rounded - -fmax3460 fma 1 -77e-7 1 -> 0.9999923 -fmax3461 fma 1 -77e-8 1 -> 0.99999923 -fmax3462 fma 1 -77e-9 1 -> 0.999999923 -fmax3463 fma 1 -77e-10 1 -> 0.999999992 Inexact Rounded -fmax3464 fma 1 -77e-11 1 -> 0.999999999 Inexact Rounded -fmax3465 fma 1 -77e-12 1 -> 1.00000000 Inexact Rounded -fmax3466 fma 1 -77e-999 1 -> 1.00000000 Inexact Rounded -fmax3467 fma 1 -77e-999999 1 -> 1.00000000 Inexact Rounded - -fmax3470 fma 1 -77e-7 10 -> 9.9999923 -fmax3471 fma 1 -77e-8 10 -> 9.99999923 -fmax3472 fma 1 -77e-9 10 -> 9.99999992 Inexact Rounded -fmax3473 fma 1 -77e-10 10 -> 9.99999999 Inexact Rounded -fmax3474 fma 1 -77e-11 10 -> 10.0000000 Inexact Rounded -fmax3475 fma 1 -77e-12 10 -> 10.0000000 Inexact Rounded -fmax3476 fma 1 -77e-999 10 -> 10.0000000 Inexact Rounded -fmax3477 fma 1 -77e-999999 10 -> 10.0000000 Inexact Rounded - --- negative ulps -fmax3480 fma 1 -1 77e-7 -> -0.9999923 -fmax3481 fma 1 -1 77e-8 -> -0.99999923 -fmax3482 fma 1 -1 77e-9 -> -0.999999923 -fmax3483 fma 1 -1 77e-10 -> -0.999999992 Inexact Rounded -fmax3484 fma 1 -1 77e-11 -> -0.999999999 Inexact Rounded -fmax3485 fma 1 -1 77e-12 -> -1.00000000 Inexact Rounded -fmax3486 fma 1 -1 77e-999 -> -1.00000000 Inexact Rounded -fmax3487 fma 1 -1 77e-999999 -> -1.00000000 Inexact Rounded - -fmax3490 fma 1 -10 77e-7 -> -9.9999923 -fmax3491 fma 1 -10 77e-8 -> -9.99999923 -fmax3492 fma 1 -10 77e-9 -> -9.99999992 Inexact Rounded -fmax3493 fma 1 -10 77e-10 -> -9.99999999 Inexact Rounded -fmax3494 fma 1 -10 77e-11 -> -10.0000000 Inexact Rounded -fmax3495 fma 1 -10 77e-12 -> -10.0000000 Inexact Rounded -fmax3496 fma 1 -10 77e-999 -> -10.0000000 Inexact Rounded -fmax3497 fma 1 -10 77e-999999 -> -10.0000000 Inexact Rounded - -fmax3500 fma 1 77e-7 -1 -> -0.9999923 -fmax3501 fma 1 77e-8 -1 -> -0.99999923 -fmax3502 fma 1 77e-9 -1 -> -0.999999923 -fmax3503 fma 1 77e-10 -1 -> -0.999999992 Inexact Rounded -fmax3504 fma 1 77e-11 -1 -> -0.999999999 Inexact Rounded -fmax3505 fma 1 77e-12 -1 -> -1.00000000 Inexact Rounded -fmax3506 fma 1 77e-999 -1 -> -1.00000000 Inexact Rounded -fmax3507 fma 1 77e-999999 -1 -> -1.00000000 Inexact Rounded - -fmax3510 fma 1 77e-7 -10 -> -9.9999923 -fmax3511 fma 1 77e-8 -10 -> -9.99999923 -fmax3512 fma 1 77e-9 -10 -> -9.99999992 Inexact Rounded -fmax3513 fma 1 77e-10 -10 -> -9.99999999 Inexact Rounded -fmax3514 fma 1 77e-11 -10 -> -10.0000000 Inexact Rounded -fmax3515 fma 1 77e-12 -10 -> -10.0000000 Inexact Rounded -fmax3516 fma 1 77e-999 -10 -> -10.0000000 Inexact Rounded -fmax3517 fma 1 77e-999999 -10 -> -10.0000000 Inexact Rounded - - --- long operands -maxexponent: 999 -minexponent: -999 -precision: 9 -fmax3521 fma 1 12345678000 0 -> 1.23456780E+10 Rounded -fmax3522 fma 1 0 12345678000 -> 1.23456780E+10 Rounded -fmax3523 fma 1 1234567800 0 -> 1.23456780E+9 Rounded -fmax3524 fma 1 0 1234567800 -> 1.23456780E+9 Rounded -fmax3525 fma 1 1234567890 0 -> 1.23456789E+9 Rounded -fmax3526 fma 1 0 1234567890 -> 1.23456789E+9 Rounded -fmax3527 fma 1 1234567891 0 -> 1.23456789E+9 Inexact Rounded -fmax3528 fma 1 0 1234567891 -> 1.23456789E+9 Inexact Rounded -fmax3529 fma 1 12345678901 0 -> 1.23456789E+10 Inexact Rounded -fmax3530 fma 1 0 12345678901 -> 1.23456789E+10 Inexact Rounded -fmax3531 fma 1 1234567896 0 -> 1.23456790E+9 Inexact Rounded -fmax3532 fma 1 0 1234567896 -> 1.23456790E+9 Inexact Rounded - -precision: 15 --- still checking -fmax3541 fma 1 12345678000 0 -> 12345678000 -fmax3542 fma 1 0 12345678000 -> 12345678000 -fmax3543 fma 1 1234567800 0 -> 1234567800 -fmax3544 fma 1 0 1234567800 -> 1234567800 -fmax3545 fma 1 1234567890 0 -> 1234567890 -fmax3546 fma 1 0 1234567890 -> 1234567890 -fmax3547 fma 1 1234567891 0 -> 1234567891 -fmax3548 fma 1 0 1234567891 -> 1234567891 -fmax3549 fma 1 12345678901 0 -> 12345678901 -fmax3550 fma 1 0 12345678901 -> 12345678901 -fmax3551 fma 1 1234567896 0 -> 1234567896 -fmax3552 fma 1 0 1234567896 -> 1234567896 - --- verify a query -precision: 16 -maxExponent: +394 -minExponent: -393 -rounding: down -fmax3561 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded -fmax3562 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded --- and using decimal64 bounds... -precision: 16 -maxExponent: +384 -minExponent: -383 -rounding: down -fmax3563 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded -fmax3564 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded - - --- some more residue effects with extreme rounding -precision: 9 -rounding: half_up -fmax3601 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded -rounding: half_even -fmax3602 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded -rounding: half_down -fmax3603 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded -rounding: floor -fmax3604 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded -rounding: ceiling -fmax3605 fma 1 123456789 0.000001 -> 123456790 Inexact Rounded -rounding: up -fmax3606 fma 1 123456789 0.000001 -> 123456790 Inexact Rounded -rounding: down -fmax3607 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded - -rounding: half_up -fmax3611 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: half_even -fmax3612 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: half_down -fmax3613 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: floor -fmax3614 fma 1 123456789 -0.000001 -> 123456788 Inexact Rounded -rounding: ceiling -fmax3615 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: up -fmax3616 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: down -fmax3617 fma 1 123456789 -0.000001 -> 123456788 Inexact Rounded - -rounding: half_up -fmax3621 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded -rounding: half_even -fmax3622 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded -rounding: half_down -fmax3623 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded -rounding: floor -fmax3624 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded -rounding: ceiling -fmax3625 fma 1 123456789 0.499999 -> 123456790 Inexact Rounded -rounding: up -fmax3626 fma 1 123456789 0.499999 -> 123456790 Inexact Rounded -rounding: down -fmax3627 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded - -rounding: half_up -fmax3631 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: half_even -fmax3632 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: half_down -fmax3633 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: floor -fmax3634 fma 1 123456789 -0.499999 -> 123456788 Inexact Rounded -rounding: ceiling -fmax3635 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: up -fmax3636 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: down -fmax3637 fma 1 123456789 -0.499999 -> 123456788 Inexact Rounded - -rounding: half_up -fmax3641 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: half_even -fmax3642 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: half_down -fmax3643 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: floor -fmax3644 fma 1 123456789 0.500001 -> 123456789 Inexact Rounded -rounding: ceiling -fmax3645 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: up -fmax3646 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: down -fmax3647 fma 1 123456789 0.500001 -> 123456789 Inexact Rounded - -rounding: half_up -fmax3651 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded -rounding: half_even -fmax3652 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded -rounding: half_down -fmax3653 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded -rounding: floor -fmax3654 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded -rounding: ceiling -fmax3655 fma 1 123456789 -0.500001 -> 123456789 Inexact Rounded -rounding: up -fmax3656 fma 1 123456789 -0.500001 -> 123456789 Inexact Rounded -rounding: down -fmax3657 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded - --- long operand triangle -rounding: half_up -precision: 37 -fmax3660 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337114834538 -precision: 36 -fmax3661 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711483454 Inexact Rounded -precision: 35 -fmax3662 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371148345 Inexact Rounded -precision: 34 -fmax3663 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337114835 Inexact Rounded -precision: 33 -fmax3664 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711483 Inexact Rounded -precision: 32 -fmax3665 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371148 Inexact Rounded -precision: 31 -fmax3666 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337115 Inexact Rounded -precision: 30 -fmax3667 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711 Inexact Rounded -precision: 29 -fmax3668 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371 Inexact Rounded -precision: 28 -fmax3669 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337 Inexact Rounded -precision: 27 -fmax3670 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892234 Inexact Rounded -precision: 26 -fmax3671 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223 Inexact Rounded -precision: 25 -fmax3672 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922 Inexact Rounded -precision: 24 -fmax3673 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892 Inexact Rounded -precision: 23 -fmax3674 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389 Inexact Rounded -precision: 22 -fmax3675 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023639 Inexact Rounded -precision: 21 -fmax3676 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102364 Inexact Rounded -precision: 20 -fmax3677 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236 Inexact Rounded -precision: 19 -fmax3678 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211024 Inexact Rounded -precision: 18 -fmax3679 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102 Inexact Rounded -precision: 17 -fmax3680 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110 Inexact Rounded -precision: 16 -fmax3681 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211 Inexact Rounded -precision: 15 -fmax3682 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221 Inexact Rounded -precision: 14 -fmax3683 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422 Inexact Rounded -precision: 13 -fmax3684 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42 Inexact Rounded -precision: 12 -fmax3685 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4 Inexact Rounded -precision: 11 -fmax3686 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166 Inexact Rounded -precision: 10 -fmax3687 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847117417E+10 Inexact Rounded -precision: 9 -fmax3688 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.84711742E+10 Inexact Rounded -precision: 8 -fmax3689 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8471174E+10 Inexact Rounded -precision: 7 -fmax3690 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847117E+10 Inexact Rounded -precision: 6 -fmax3691 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.84712E+10 Inexact Rounded -precision: 5 -fmax3692 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8471E+10 Inexact Rounded -precision: 4 -fmax3693 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847E+10 Inexact Rounded -precision: 3 -fmax3694 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.85E+10 Inexact Rounded -precision: 2 -fmax3695 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8E+10 Inexact Rounded -precision: 1 -fmax3696 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 1E+11 Inexact Rounded - --- more zeros, etc. -rounding: half_up -precision: 9 - -fmax3701 fma 1 5.00 1.00E-3 -> 5.00100 -fmax3702 fma 1 00.00 0.000 -> 0.000 -fmax3703 fma 1 00.00 0E-3 -> 0.000 -fmax3704 fma 1 0E-3 00.00 -> 0.000 - -fmax3710 fma 1 0E+3 00.00 -> 0.00 -fmax3711 fma 1 0E+3 00.0 -> 0.0 -fmax3712 fma 1 0E+3 00. -> 0 -fmax3713 fma 1 0E+3 00.E+1 -> 0E+1 -fmax3714 fma 1 0E+3 00.E+2 -> 0E+2 -fmax3715 fma 1 0E+3 00.E+3 -> 0E+3 -fmax3716 fma 1 0E+3 00.E+4 -> 0E+3 -fmax3717 fma 1 0E+3 00.E+5 -> 0E+3 -fmax3718 fma 1 0E+3 -00.0 -> 0.0 -fmax3719 fma 1 0E+3 -00. -> 0 -fmax3731 fma 1 0E+3 -00.E+1 -> 0E+1 - -fmax3720 fma 1 00.00 0E+3 -> 0.00 -fmax3721 fma 1 00.0 0E+3 -> 0.0 -fmax3722 fma 1 00. 0E+3 -> 0 -fmax3723 fma 1 00.E+1 0E+3 -> 0E+1 -fmax3724 fma 1 00.E+2 0E+3 -> 0E+2 -fmax3725 fma 1 00.E+3 0E+3 -> 0E+3 -fmax3726 fma 1 00.E+4 0E+3 -> 0E+3 -fmax3727 fma 1 00.E+5 0E+3 -> 0E+3 -fmax3728 fma 1 -00.00 0E+3 -> 0.00 -fmax3729 fma 1 -00.0 0E+3 -> 0.0 -fmax3730 fma 1 -00. 0E+3 -> 0 - -fmax3732 fma 1 0 0 -> 0 -fmax3733 fma 1 0 -0 -> 0 -fmax3734 fma 1 -0 0 -> 0 -fmax3735 fma 1 -0 -0 -> -0 -- IEEE 854 special case - -fmax3736 fma 1 1 -1 -> 0 -fmax3737 fma 1 -1 -1 -> -2 -fmax3738 fma 1 1 1 -> 2 -fmax3739 fma 1 -1 1 -> 0 - -fmax3741 fma 1 0 -1 -> -1 -fmax3742 fma 1 -0 -1 -> -1 -fmax3743 fma 1 0 1 -> 1 -fmax3744 fma 1 -0 1 -> 1 -fmax3745 fma 1 -1 0 -> -1 -fmax3746 fma 1 -1 -0 -> -1 -fmax3747 fma 1 1 0 -> 1 -fmax3748 fma 1 1 -0 -> 1 - -fmax3751 fma 1 0.0 -1 -> -1.0 -fmax3752 fma 1 -0.0 -1 -> -1.0 -fmax3753 fma 1 0.0 1 -> 1.0 -fmax3754 fma 1 -0.0 1 -> 1.0 -fmax3755 fma 1 -1.0 0 -> -1.0 -fmax3756 fma 1 -1.0 -0 -> -1.0 -fmax3757 fma 1 1.0 0 -> 1.0 -fmax3758 fma 1 1.0 -0 -> 1.0 - -fmax3761 fma 1 0 -1.0 -> -1.0 -fmax3762 fma 1 -0 -1.0 -> -1.0 -fmax3763 fma 1 0 1.0 -> 1.0 -fmax3764 fma 1 -0 1.0 -> 1.0 -fmax3765 fma 1 -1 0.0 -> -1.0 -fmax3766 fma 1 -1 -0.0 -> -1.0 -fmax3767 fma 1 1 0.0 -> 1.0 -fmax3768 fma 1 1 -0.0 -> 1.0 - -fmax3771 fma 1 0.0 -1.0 -> -1.0 -fmax3772 fma 1 -0.0 -1.0 -> -1.0 -fmax3773 fma 1 0.0 1.0 -> 1.0 -fmax3774 fma 1 -0.0 1.0 -> 1.0 -fmax3775 fma 1 -1.0 0.0 -> -1.0 -fmax3776 fma 1 -1.0 -0.0 -> -1.0 -fmax3777 fma 1 1.0 0.0 -> 1.0 -fmax3778 fma 1 1.0 -0.0 -> 1.0 - --- Specials -fmax3780 fma 1 -Inf -Inf -> -Infinity -fmax3781 fma 1 -Inf -1000 -> -Infinity -fmax3782 fma 1 -Inf -1 -> -Infinity -fmax3783 fma 1 -Inf -0 -> -Infinity -fmax3784 fma 1 -Inf 0 -> -Infinity -fmax3785 fma 1 -Inf 1 -> -Infinity -fmax3786 fma 1 -Inf 1000 -> -Infinity -fmax3787 fma 1 -1000 -Inf -> -Infinity -fmax3788 fma 1 -Inf -Inf -> -Infinity -fmax3789 fma 1 -1 -Inf -> -Infinity -fmax3790 fma 1 -0 -Inf -> -Infinity -fmax3791 fma 1 0 -Inf -> -Infinity -fmax3792 fma 1 1 -Inf -> -Infinity -fmax3793 fma 1 1000 -Inf -> -Infinity -fmax3794 fma 1 Inf -Inf -> NaN Invalid_operation - -fmax3800 fma 1 Inf -Inf -> NaN Invalid_operation -fmax3801 fma 1 Inf -1000 -> Infinity -fmax3802 fma 1 Inf -1 -> Infinity -fmax3803 fma 1 Inf -0 -> Infinity -fmax3804 fma 1 Inf 0 -> Infinity -fmax3805 fma 1 Inf 1 -> Infinity -fmax3806 fma 1 Inf 1000 -> Infinity -fmax3807 fma 1 Inf Inf -> Infinity -fmax3808 fma 1 -1000 Inf -> Infinity -fmax3809 fma 1 -Inf Inf -> NaN Invalid_operation -fmax3810 fma 1 -1 Inf -> Infinity -fmax3811 fma 1 -0 Inf -> Infinity -fmax3812 fma 1 0 Inf -> Infinity -fmax3813 fma 1 1 Inf -> Infinity -fmax3814 fma 1 1000 Inf -> Infinity -fmax3815 fma 1 Inf Inf -> Infinity - -fmax3821 fma 1 NaN -Inf -> NaN -fmax3822 fma 1 NaN -1000 -> NaN -fmax3823 fma 1 NaN -1 -> NaN -fmax3824 fma 1 NaN -0 -> NaN -fmax3825 fma 1 NaN 0 -> NaN -fmax3826 fma 1 NaN 1 -> NaN -fmax3827 fma 1 NaN 1000 -> NaN -fmax3828 fma 1 NaN Inf -> NaN -fmax3829 fma 1 NaN NaN -> NaN -fmax3830 fma 1 -Inf NaN -> NaN -fmax3831 fma 1 -1000 NaN -> NaN -fmax3832 fma 1 -1 NaN -> NaN -fmax3833 fma 1 -0 NaN -> NaN -fmax3834 fma 1 0 NaN -> NaN -fmax3835 fma 1 1 NaN -> NaN -fmax3836 fma 1 1000 NaN -> NaN -fmax3837 fma 1 Inf NaN -> NaN - -fmax3841 fma 1 sNaN -Inf -> NaN Invalid_operation -fmax3842 fma 1 sNaN -1000 -> NaN Invalid_operation -fmax3843 fma 1 sNaN -1 -> NaN Invalid_operation -fmax3844 fma 1 sNaN -0 -> NaN Invalid_operation -fmax3845 fma 1 sNaN 0 -> NaN Invalid_operation -fmax3846 fma 1 sNaN 1 -> NaN Invalid_operation -fmax3847 fma 1 sNaN 1000 -> NaN Invalid_operation -fmax3848 fma 1 sNaN NaN -> NaN Invalid_operation -fmax3849 fma 1 sNaN sNaN -> NaN Invalid_operation -fmax3850 fma 1 NaN sNaN -> NaN Invalid_operation -fmax3851 fma 1 -Inf sNaN -> NaN Invalid_operation -fmax3852 fma 1 -1000 sNaN -> NaN Invalid_operation -fmax3853 fma 1 -1 sNaN -> NaN Invalid_operation -fmax3854 fma 1 -0 sNaN -> NaN Invalid_operation -fmax3855 fma 1 0 sNaN -> NaN Invalid_operation -fmax3856 fma 1 1 sNaN -> NaN Invalid_operation -fmax3857 fma 1 1000 sNaN -> NaN Invalid_operation -fmax3858 fma 1 Inf sNaN -> NaN Invalid_operation -fmax3859 fma 1 NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -fmax3861 fma 1 NaN1 -Inf -> NaN1 -fmax3862 fma 1 +NaN2 -1000 -> NaN2 -fmax3863 fma 1 NaN3 1000 -> NaN3 -fmax3864 fma 1 NaN4 Inf -> NaN4 -fmax3865 fma 1 NaN5 +NaN6 -> NaN5 -fmax3866 fma 1 -Inf NaN7 -> NaN7 -fmax3867 fma 1 -1000 NaN8 -> NaN8 -fmax3868 fma 1 1000 NaN9 -> NaN9 -fmax3869 fma 1 Inf +NaN10 -> NaN10 -fmax3871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation -fmax3872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation -fmax3873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation -fmax3874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation -fmax3875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation -fmax3876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation -fmax3877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation -fmax3878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation -fmax3879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation -fmax3880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation -fmax3881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation -fmax3882 fma 1 -NaN26 NaN28 -> -NaN26 -fmax3883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation -fmax3884 fma 1 1000 -NaN30 -> -NaN30 -fmax3885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation - --- overflow, underflow and subnormal tests -maxexponent: 999999 -minexponent: -999999 -precision: 9 -fmax3890 fma 1 1E+999999 9E+999999 -> Infinity Overflow Inexact Rounded -fmax3891 fma 1 9E+999999 1E+999999 -> Infinity Overflow Inexact Rounded -fmax3892 fma 1 -1.1E-999999 1E-999999 -> -1E-1000000 Subnormal -fmax3893 fma 1 1E-999999 -1.1e-999999 -> -1E-1000000 Subnormal -fmax3894 fma 1 -1.0001E-999999 1E-999999 -> -1E-1000003 Subnormal -fmax3895 fma 1 1E-999999 -1.0001e-999999 -> -1E-1000003 Subnormal -fmax3896 fma 1 -1E+999999 -9E+999999 -> -Infinity Overflow Inexact Rounded -fmax3897 fma 1 -9E+999999 -1E+999999 -> -Infinity Overflow Inexact Rounded -fmax3898 fma 1 +1.1E-999999 -1E-999999 -> 1E-1000000 Subnormal -fmax3899 fma 1 -1E-999999 +1.1e-999999 -> 1E-1000000 Subnormal -fmax3900 fma 1 +1.0001E-999999 -1E-999999 -> 1E-1000003 Subnormal -fmax3901 fma 1 -1E-999999 +1.0001e-999999 -> 1E-1000003 Subnormal -fmax3902 fma 1 -1E+999999 +9E+999999 -> 8E+999999 -fmax3903 fma 1 -9E+999999 +1E+999999 -> -8E+999999 - -precision: 3 -fmax3904 fma 1 0 -9.999E+999999 -> -Infinity Inexact Overflow Rounded -fmax3905 fma 1 -9.999E+999999 0 -> -Infinity Inexact Overflow Rounded -fmax3906 fma 1 0 9.999E+999999 -> Infinity Inexact Overflow Rounded -fmax3907 fma 1 9.999E+999999 0 -> Infinity Inexact Overflow Rounded - -precision: 3 -maxexponent: 999 -minexponent: -999 -fmax3910 fma 1 1.00E-999 0 -> 1.00E-999 -fmax3911 fma 1 0.1E-999 0 -> 1E-1000 Subnormal -fmax3912 fma 1 0.10E-999 0 -> 1.0E-1000 Subnormal -fmax3913 fma 1 0.100E-999 0 -> 1.0E-1000 Subnormal Rounded -fmax3914 fma 1 0.01E-999 0 -> 1E-1001 Subnormal --- next is rounded to Nmin -fmax3915 fma 1 0.999E-999 0 -> 1.00E-999 Inexact Rounded Subnormal Underflow -fmax3916 fma 1 0.099E-999 0 -> 1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3917 fma 1 0.009E-999 0 -> 1E-1001 Inexact Rounded Subnormal Underflow -fmax3918 fma 1 0.001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3919 fma 1 0.0009E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3920 fma 1 0.0001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped - -fmax3930 fma 1 -1.00E-999 0 -> -1.00E-999 -fmax3931 fma 1 -0.1E-999 0 -> -1E-1000 Subnormal -fmax3932 fma 1 -0.10E-999 0 -> -1.0E-1000 Subnormal -fmax3933 fma 1 -0.100E-999 0 -> -1.0E-1000 Subnormal Rounded -fmax3934 fma 1 -0.01E-999 0 -> -1E-1001 Subnormal --- next is rounded to Nmin -fmax3935 fma 1 -0.999E-999 0 -> -1.00E-999 Inexact Rounded Subnormal Underflow -fmax3936 fma 1 -0.099E-999 0 -> -1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3937 fma 1 -0.009E-999 0 -> -1E-1001 Inexact Rounded Subnormal Underflow -fmax3938 fma 1 -0.001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3939 fma 1 -0.0009E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3940 fma 1 -0.0001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped - --- some non-zero subnormal fma 1 s -fmax3950 fma 1 1.00E-999 0.1E-999 -> 1.10E-999 -fmax3951 fma 1 0.1E-999 0.1E-999 -> 2E-1000 Subnormal -fmax3952 fma 1 0.10E-999 0.1E-999 -> 2.0E-1000 Subnormal -fmax3953 fma 1 0.100E-999 0.1E-999 -> 2.0E-1000 Subnormal Rounded -fmax3954 fma 1 0.01E-999 0.1E-999 -> 1.1E-1000 Subnormal -fmax3955 fma 1 0.999E-999 0.1E-999 -> 1.10E-999 Inexact Rounded -fmax3956 fma 1 0.099E-999 0.1E-999 -> 2.0E-1000 Inexact Rounded Subnormal Underflow -fmax3957 fma 1 0.009E-999 0.1E-999 -> 1.1E-1000 Inexact Rounded Subnormal Underflow -fmax3958 fma 1 0.001E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3959 fma 1 0.0009E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3960 fma 1 0.0001E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow --- negatives... -fmax3961 fma 1 1.00E-999 -0.1E-999 -> 9.0E-1000 Subnormal -fmax3962 fma 1 0.1E-999 -0.1E-999 -> 0E-1000 -fmax3963 fma 1 0.10E-999 -0.1E-999 -> 0E-1001 -fmax3964 fma 1 0.100E-999 -0.1E-999 -> 0E-1001 Clamped -fmax3965 fma 1 0.01E-999 -0.1E-999 -> -9E-1001 Subnormal -fmax3966 fma 1 0.999E-999 -0.1E-999 -> 9.0E-1000 Inexact Rounded Subnormal Underflow -fmax3967 fma 1 0.099E-999 -0.1E-999 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3968 fma 1 0.009E-999 -0.1E-999 -> -9E-1001 Inexact Rounded Subnormal Underflow -fmax3969 fma 1 0.001E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3970 fma 1 0.0009E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3971 fma 1 0.0001E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow - --- some 'real' numbers -maxExponent: 384 -minExponent: -383 -precision: 8 -fmax3566 fma 1 99999061735E-394 0E-394 -> 9.999906E-384 Inexact Rounded Underflow Subnormal -precision: 7 -fmax3567 fma 1 99999061735E-394 0E-394 -> 9.99991E-384 Inexact Rounded Underflow Subnormal -precision: 6 -fmax3568 fma 1 99999061735E-394 0E-394 -> 9.9999E-384 Inexact Rounded Underflow Subnormal - --- now the case where we can get underflow but the result is normal --- [note this can't happen if the operands are also bounded, as we --- cannot represent 1E-399, for example] -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - -fmax3571 fma 1 1E-383 0 -> 1E-383 -fmax3572 fma 1 1E-384 0 -> 1E-384 Subnormal -fmax3573 fma 1 1E-383 1E-384 -> 1.1E-383 -fmax3574 subtract 1E-383 1E-384 -> 9E-384 Subnormal - --- Here we explore the boundary of rounding a subnormal to Nmin -fmax3575 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal -fmax3576 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal -fmax3577 subtract 1E-383 1E-399 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax3578 subtract 1E-383 1E-400 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax3579 subtract 1E-383 1E-401 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax3580 subtract 1E-383 1E-402 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded - --- check for double-rounded subnormals -precision: 5 -maxexponent: 79 -minexponent: -79 --- Add: lhs and rhs 0 -fmax31001 fma 1 1.52444E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31002 fma 1 1.52445E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31003 fma 1 1.52446E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31004 fma 1 0 1.52444E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31005 fma 1 0 1.52445E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31006 fma 1 0 1.52446E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow - --- Add: lhs >> rhs and vice versa -fmax31011 fma 1 1.52444E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31012 fma 1 1.52445E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31013 fma 1 1.52446E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31014 fma 1 1E-100 1.52444E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31015 fma 1 1E-100 1.52445E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31016 fma 1 1E-100 1.52446E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow - --- Add: lhs + rhs fma 1 ition carried out -fmax31021 fma 1 1.52443E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31022 fma 1 1.52444E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31023 fma 1 1.52445E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31024 fma 1 1.00001E-80 1.52443E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31025 fma 1 1.00001E-80 1.52444E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31026 fma 1 1.00001E-80 1.52445E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow - --- And for round down full and subnormal results -precision: 16 -maxExponent: +384 -minExponent: -383 -rounding: down - -fmax31100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact -fmax31101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact -fmax31103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact -fmax31104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact -fmax31105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact -fmax31106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact -fmax31107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact -fmax31108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact -fmax31109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact - -rounding: ceiling -fmax31110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact -fmax31111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact -fmax31113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact -fmax31114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact -fmax31115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact -fmax31116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact -fmax31117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact -fmax31118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact -fmax31119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact - -rounding: down -precision: 7 -maxExponent: +96 -minExponent: -95 -fmax31130 fma 1 1 -1e-200 -> 0.9999999 Rounded Inexact --- subnormal boundary -fmax31131 fma 1 1.000000E-94 -1e-200 -> 9.999999E-95 Rounded Inexact -fmax31132 fma 1 1.000001E-95 -1e-200 -> 1.000000E-95 Rounded Inexact -fmax31133 fma 1 1.000000E-95 -1e-200 -> 9.99999E-96 Rounded Inexact Subnormal Underflow -fmax31134 fma 1 0.999999E-95 -1e-200 -> 9.99998E-96 Rounded Inexact Subnormal Underflow -fmax31135 fma 1 0.001000E-95 -1e-200 -> 9.99E-99 Rounded Inexact Subnormal Underflow -fmax31136 fma 1 0.000999E-95 -1e-200 -> 9.98E-99 Rounded Inexact Subnormal Underflow -fmax31137 fma 1 1.000000E-95 -1e-101 -> 9.99999E-96 Subnormal -fmax31138 fma 1 10000E-101 -1e-200 -> 9.999E-98 Subnormal Inexact Rounded Underflow -fmax31139 fma 1 1000E-101 -1e-200 -> 9.99E-99 Subnormal Inexact Rounded Underflow -fmax31140 fma 1 100E-101 -1e-200 -> 9.9E-100 Subnormal Inexact Rounded Underflow -fmax31141 fma 1 10E-101 -1e-200 -> 9E-101 Subnormal Inexact Rounded Underflow -fmax31142 fma 1 1E-101 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31143 fma 1 0E-101 -1e-200 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31144 fma 1 1E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped - -fmax31151 fma 1 10000E-102 -1e-200 -> 9.99E-99 Subnormal Inexact Rounded Underflow -fmax31152 fma 1 1000E-102 -1e-200 -> 9.9E-100 Subnormal Inexact Rounded Underflow -fmax31153 fma 1 100E-102 -1e-200 -> 9E-101 Subnormal Inexact Rounded Underflow -fmax31154 fma 1 10E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31155 fma 1 1E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31156 fma 1 0E-102 -1e-200 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31157 fma 1 1E-103 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped - -fmax31160 fma 1 100E-105 -1e-101 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31161 fma 1 100E-105 -1e-201 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped - --- tests based on Gunnar Degnbol's edge case -precision: 15 -rounding: half_up -maxExponent: 384 -minexponent: -383 - -fmax31200 fma 1 1E15 -0.5 -> 1.00000000000000E+15 Inexact Rounded -fmax31201 fma 1 1E15 -0.50 -> 1.00000000000000E+15 Inexact Rounded -fmax31210 fma 1 1E15 -0.51 -> 999999999999999 Inexact Rounded -fmax31211 fma 1 1E15 -0.501 -> 999999999999999 Inexact Rounded -fmax31212 fma 1 1E15 -0.5001 -> 999999999999999 Inexact Rounded -fmax31213 fma 1 1E15 -0.50001 -> 999999999999999 Inexact Rounded -fmax31214 fma 1 1E15 -0.500001 -> 999999999999999 Inexact Rounded -fmax31215 fma 1 1E15 -0.5000001 -> 999999999999999 Inexact Rounded -fmax31216 fma 1 1E15 -0.50000001 -> 999999999999999 Inexact Rounded -fmax31217 fma 1 1E15 -0.500000001 -> 999999999999999 Inexact Rounded -fmax31218 fma 1 1E15 -0.5000000001 -> 999999999999999 Inexact Rounded -fmax31219 fma 1 1E15 -0.50000000001 -> 999999999999999 Inexact Rounded -fmax31220 fma 1 1E15 -0.500000000001 -> 999999999999999 Inexact Rounded -fmax31221 fma 1 1E15 -0.5000000000001 -> 999999999999999 Inexact Rounded -fmax31222 fma 1 1E15 -0.50000000000001 -> 999999999999999 Inexact Rounded -fmax31223 fma 1 1E15 -0.500000000000001 -> 999999999999999 Inexact Rounded -fmax31224 fma 1 1E15 -0.5000000000000001 -> 999999999999999 Inexact Rounded -fmax31225 fma 1 1E15 -0.5000000000000000 -> 1.00000000000000E+15 Inexact Rounded -fmax31230 fma 1 1E15 -5000000.000000001 -> 999999995000000 Inexact Rounded - -precision: 16 - -fmax31300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded -fmax31310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded -fmax31311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded -fmax31312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded -fmax31313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded -fmax31314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded -fmax31315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded -fmax31316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded -fmax31317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded -fmax31318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded -fmax31319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded -fmax31320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded -fmax31321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded -fmax31322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded -fmax31323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded -fmax31324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded -fmax31325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded -fmax31336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded -fmax31337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded -fmax31338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded -fmax31339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded - -fmax31340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded -fmax31341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded - -fmax31349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded -fmax31350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded -fmax31351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded -fmax31352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded -fmax31353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded -fmax31354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded -fmax31355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded -fmax31356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded -fmax31357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded -fmax31358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded -fmax31359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded -fmax31360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded -fmax31361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded -fmax31362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded -fmax31363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded -fmax31364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded -fmax31365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded -fmax31377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded -fmax31378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded -fmax31379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded -fmax31380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded -fmax31381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded -fmax31382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded -fmax31393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded -fmax31394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded -fmax31395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded -fmax31396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -precision: 15 -rounding: half_up -maxExponent: 384 -minexponent: -383 - -fmax31400 fma 1 0 1.23456789012345 -> 1.23456789012345 -fmax31401 fma 1 0 1.23456789012345E-1 -> 0.123456789012345 -fmax31402 fma 1 0 1.23456789012345E-2 -> 0.0123456789012345 -fmax31403 fma 1 0 1.23456789012345E-3 -> 0.00123456789012345 -fmax31404 fma 1 0 1.23456789012345E-4 -> 0.000123456789012345 -fmax31405 fma 1 0 1.23456789012345E-5 -> 0.0000123456789012345 -fmax31406 fma 1 0 1.23456789012345E-6 -> 0.00000123456789012345 -fmax31407 fma 1 0 1.23456789012345E-7 -> 1.23456789012345E-7 -fmax31408 fma 1 0 1.23456789012345E-8 -> 1.23456789012345E-8 -fmax31409 fma 1 0 1.23456789012345E-9 -> 1.23456789012345E-9 -fmax31410 fma 1 0 1.23456789012345E-10 -> 1.23456789012345E-10 -fmax31411 fma 1 0 1.23456789012345E-11 -> 1.23456789012345E-11 -fmax31412 fma 1 0 1.23456789012345E-12 -> 1.23456789012345E-12 -fmax31413 fma 1 0 1.23456789012345E-13 -> 1.23456789012345E-13 -fmax31414 fma 1 0 1.23456789012345E-14 -> 1.23456789012345E-14 -fmax31415 fma 1 0 1.23456789012345E-15 -> 1.23456789012345E-15 -fmax31416 fma 1 0 1.23456789012345E-16 -> 1.23456789012345E-16 -fmax31417 fma 1 0 1.23456789012345E-17 -> 1.23456789012345E-17 -fmax31418 fma 1 0 1.23456789012345E-18 -> 1.23456789012345E-18 -fmax31419 fma 1 0 1.23456789012345E-19 -> 1.23456789012345E-19 - --- same, precision 16.. -precision: 16 -fmax31420 fma 1 0 1.123456789012345 -> 1.123456789012345 -fmax31421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 -fmax31422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 -fmax31423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 -fmax31424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 -fmax31425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 -fmax31426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 -fmax31427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 -fmax31428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 -fmax31429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 -fmax31430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 -fmax31431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 -fmax31432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 -fmax31433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 -fmax31434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 -fmax31435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 -fmax31436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 -fmax31437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 -fmax31438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 -fmax31439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 - --- same, reversed 0 -fmax31440 fma 1 1.123456789012345 0 -> 1.123456789012345 -fmax31441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 -fmax31442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 -fmax31443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 -fmax31444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 -fmax31445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 -fmax31446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 -fmax31447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 -fmax31448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 -fmax31449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 -fmax31450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 -fmax31451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 -fmax31452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 -fmax31453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 -fmax31454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 -fmax31455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 -fmax31456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 -fmax31457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 -fmax31458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 -fmax31459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 - --- same, Es on the 0 -fmax31460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 -fmax31461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 -fmax31462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 -fmax31463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 -fmax31464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 -fmax31465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 -fmax31466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 -fmax31467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 -fmax31468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 -fmax31469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 -fmax31470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 -fmax31471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 -fmax31472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 -fmax31473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 -fmax31474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 -fmax31475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 --- next four flag Rounded because the 0 extends the result -fmax31476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded -fmax31477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded -fmax31478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded -fmax31479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -precision: 16 -maxExponent: 384 -minexponent: -383 - -rounding: half_up --- exact zeros from zeros -fmax31500 fma 1 0 0E-19 -> 0E-19 -fmax31501 fma 1 -0 0E-19 -> 0E-19 -fmax31502 fma 1 0 -0E-19 -> 0E-19 -fmax31503 fma 1 -0 -0E-19 -> -0E-19 -fmax31504 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31505 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31506 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31507 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31511 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31512 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31513 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31514 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31515 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31516 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31517 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31518 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: half_down --- exact zeros from zeros -fmax31520 fma 1 0 0E-19 -> 0E-19 -fmax31521 fma 1 -0 0E-19 -> 0E-19 -fmax31522 fma 1 0 -0E-19 -> 0E-19 -fmax31523 fma 1 -0 -0E-19 -> -0E-19 -fmax31524 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31525 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31526 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31527 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31531 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31532 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31533 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31534 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31535 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31536 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31537 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31538 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: half_even --- exact zeros from zeros -fmax31540 fma 1 0 0E-19 -> 0E-19 -fmax31541 fma 1 -0 0E-19 -> 0E-19 -fmax31542 fma 1 0 -0E-19 -> 0E-19 -fmax31543 fma 1 -0 -0E-19 -> -0E-19 -fmax31544 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31545 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31546 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31547 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31551 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31552 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31553 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31554 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31555 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31556 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31557 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31558 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: up --- exact zeros from zeros -fmax31560 fma 1 0 0E-19 -> 0E-19 -fmax31561 fma 1 -0 0E-19 -> 0E-19 -fmax31562 fma 1 0 -0E-19 -> 0E-19 -fmax31563 fma 1 -0 -0E-19 -> -0E-19 -fmax31564 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31565 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31566 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31567 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31571 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31572 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31573 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow -fmax31574 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow --- some exact zeros from non-zeros -fmax31575 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31576 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31577 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31578 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow - -rounding: down --- exact zeros from zeros -fmax31580 fma 1 0 0E-19 -> 0E-19 -fmax31581 fma 1 -0 0E-19 -> 0E-19 -fmax31582 fma 1 0 -0E-19 -> 0E-19 -fmax31583 fma 1 -0 -0E-19 -> -0E-19 -fmax31584 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31585 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31586 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31587 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31591 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31592 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31593 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31594 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31595 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31596 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31597 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31598 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: ceiling --- exact zeros from zeros -fmax31600 fma 1 0 0E-19 -> 0E-19 -fmax31601 fma 1 -0 0E-19 -> 0E-19 -fmax31602 fma 1 0 -0E-19 -> 0E-19 -fmax31603 fma 1 -0 -0E-19 -> -0E-19 -fmax31604 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31605 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31606 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31607 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31611 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31612 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31613 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31614 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31615 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31616 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31617 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31618 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -fmax31620 fma 1 0 0E-19 -> 0E-19 -fmax31621 fma 1 -0 0E-19 -> -0E-19 -- * -fmax31622 fma 1 0 -0E-19 -> -0E-19 -- * -fmax31623 fma 1 -0 -0E-19 -> -0E-19 -fmax31624 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31625 fma 1 -0E-400 0E-19 -> -0E-398 Clamped -- * -fmax31626 fma 1 0E-400 -0E-19 -> -0E-398 Clamped -- * -fmax31627 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31631 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31632 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31633 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow -fmax31634 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow --- some exact zeros from non-zeros -fmax31635 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31636 fma 1 -1E-401 1E-401 -> -0E-398 Clamped -- * -fmax31637 fma 1 1E-401 -1E-401 -> -0E-398 Clamped -- * -fmax31638 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow - --- BigDecimal problem testcases 2006.01.23 -precision: 16 -maxExponent: 384 -minexponent: -383 - -rounding: down -precision: 7 -fmax31651 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 6 -fmax31652 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 5 -fmax31653 fma 1 10001E+2 -2E+1 -> 1.0000E+6 Inexact Rounded -precision: 4 -fmax31654 fma 1 10001E+2 -2E+1 -> 1.000E+6 Inexact Rounded -precision: 3 -fmax31655 fma 1 10001E+2 -2E+1 -> 1.00E+6 Inexact Rounded -precision: 2 -fmax31656 fma 1 10001E+2 -2E+1 -> 1.0E+6 Inexact Rounded -precision: 1 -fmax31657 fma 1 10001E+2 -2E+1 -> 1E+6 Inexact Rounded - -rounding: half_even -precision: 7 -fmax31661 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 6 -fmax31662 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 5 -fmax31663 fma 1 10001E+2 -2E+1 -> 1.0001E+6 Inexact Rounded -precision: 4 -fmax31664 fma 1 10001E+2 -2E+1 -> 1.000E+6 Inexact Rounded -precision: 3 -fmax31665 fma 1 10001E+2 -2E+1 -> 1.00E+6 Inexact Rounded -precision: 2 -fmax31666 fma 1 10001E+2 -2E+1 -> 1.0E+6 Inexact Rounded -precision: 1 -fmax31667 fma 1 10001E+2 -2E+1 -> 1E+6 Inexact Rounded - -rounding: up -precision: 7 -fmax31671 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 6 -fmax31672 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 5 -fmax31673 fma 1 10001E+2 -2E+1 -> 1.0001E+6 Inexact Rounded -precision: 4 -fmax31674 fma 1 10001E+2 -2E+1 -> 1.001E+6 Inexact Rounded -precision: 3 -fmax31675 fma 1 10001E+2 -2E+1 -> 1.01E+6 Inexact Rounded -precision: 2 -fmax31676 fma 1 10001E+2 -2E+1 -> 1.1E+6 Inexact Rounded -precision: 1 -fmax31677 fma 1 10001E+2 -2E+1 -> 2E+6 Inexact Rounded - -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 --- Examples from SQL proposal (Krishna Kulkarni) -fmax31701 fma 1 130E-2 120E-2 -> 2.50 -fmax31702 fma 1 130E-2 12E-1 -> 2.50 -fmax31703 fma 1 130E-2 1E0 -> 2.30 -fmax31704 fma 1 1E2 1E4 -> 1.01E+4 -fmax31705 subtract 130E-2 120E-2 -> 0.10 -fmax31706 subtract 130E-2 12E-1 -> 0.10 -fmax31707 subtract 130E-2 1E0 -> 0.30 -fmax31708 subtract 1E2 1E4 -> -9.9E+3 - ------------------------------------------------------------------------- --- Same as above, using decimal64 default parameters -- ------------------------------------------------------------------------- -precision: 16 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- [first group are 'quick confidence check'] -fmax36001 fma 1 1 1 -> 2 -fmax36002 fma 1 2 3 -> 5 -fmax36003 fma 1 '5.75' '3.3' -> 9.05 -fmax36004 fma 1 '5' '-3' -> 2 -fmax36005 fma 1 '-5' '-3' -> -8 -fmax36006 fma 1 '-7' '2.5' -> -4.5 -fmax36007 fma 1 '0.7' '0.3' -> 1.0 -fmax36008 fma 1 '1.25' '1.25' -> 2.50 -fmax36009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' -fmax36010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' - -fmax36011 fma 1 '0.44444444444444444' '0.55555555555555555' -> '1.000000000000000' Inexact Rounded -fmax36012 fma 1 '0.44444444444444440' '0.55555555555555555' -> '1.000000000000000' Inexact Rounded -fmax36013 fma 1 '0.44444444444444444' '0.55555555555555550' -> '0.9999999999999999' Inexact Rounded -fmax36014 fma 1 '0.444444444444444449' '0' -> '0.4444444444444444' Inexact Rounded -fmax36015 fma 1 '0.4444444444444444499' '0' -> '0.4444444444444444' Inexact Rounded -fmax36016 fma 1 '0.44444444444444444999' '0' -> '0.4444444444444444' Inexact Rounded -fmax36017 fma 1 '0.44444444444444445000' '0' -> '0.4444444444444444' Inexact Rounded -fmax36018 fma 1 '0.44444444444444445001' '0' -> '0.4444444444444445' Inexact Rounded -fmax36019 fma 1 '0.4444444444444444501' '0' -> '0.4444444444444445' Inexact Rounded -fmax36020 fma 1 '0.444444444444444451' '0' -> '0.4444444444444445' Inexact Rounded - -fmax36021 fma 1 0 1 -> 1 -fmax36022 fma 1 1 1 -> 2 -fmax36023 fma 1 2 1 -> 3 -fmax36024 fma 1 3 1 -> 4 -fmax36025 fma 1 4 1 -> 5 -fmax36026 fma 1 5 1 -> 6 -fmax36027 fma 1 6 1 -> 7 -fmax36028 fma 1 7 1 -> 8 -fmax36029 fma 1 8 1 -> 9 -fmax36030 fma 1 9 1 -> 10 - --- some carrying effects -fmax36031 fma 1 '0.9998' '0.0000' -> '0.9998' -fmax36032 fma 1 '0.9998' '0.0001' -> '0.9999' -fmax36033 fma 1 '0.9998' '0.0002' -> '1.0000' -fmax36034 fma 1 '0.9998' '0.0003' -> '1.0001' - -fmax36035 fma 1 '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -fmax36036 fma 1 '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -fmax36037 fma 1 '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -fmax36038 fma 1 '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded -fmax36039 fma 1 '700000' '10000e+16' -> '1.000000000000007E+20' Rounded - --- symmetry: -fmax36040 fma 1 '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded -fmax36041 fma 1 '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded -fmax36042 fma 1 '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded -fmax36044 fma 1 '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded -fmax36045 fma 1 '10000e+16' '700000' -> '1.000000000000007E+20' Rounded - -fmax36046 fma 1 '10000e+9' '7' -> '10000000000007' -fmax36047 fma 1 '10000e+9' '70' -> '10000000000070' -fmax36048 fma 1 '10000e+9' '700' -> '10000000000700' -fmax36049 fma 1 '10000e+9' '7000' -> '10000000007000' -fmax36050 fma 1 '10000e+9' '70000' -> '10000000070000' -fmax36051 fma 1 '10000e+9' '700000' -> '10000000700000' - --- examples from decarith -fmax36053 fma 1 '12' '7.00' -> '19.00' -fmax36054 fma 1 '1.3' '-1.07' -> '0.23' -fmax36055 fma 1 '1.3' '-1.30' -> '0.00' -fmax36056 fma 1 '1.3' '-2.07' -> '-0.77' -fmax36057 fma 1 '1E+2' '1E+4' -> '1.01E+4' - --- from above -fmax36061 fma 1 1 '0.1' -> '1.1' -fmax36062 fma 1 1 '0.01' -> '1.01' -fmax36063 fma 1 1 '0.001' -> '1.001' -fmax36064 fma 1 1 '0.0001' -> '1.0001' -fmax36065 fma 1 1 '0.00001' -> '1.00001' -fmax36066 fma 1 1 '0.000001' -> '1.000001' -fmax36067 fma 1 1 '0.0000001' -> '1.0000001' -fmax36068 fma 1 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -fmax36070 fma 1 1 0 -> 1 -fmax36071 fma 1 1 0. -> 1 -fmax36072 fma 1 1 .0 -> 1.0 -fmax36073 fma 1 1 0.0 -> 1.0 -fmax36074 fma 1 1 0.00 -> 1.00 -fmax36075 fma 1 0 1 -> 1 -fmax36076 fma 1 0. 1 -> 1 -fmax36077 fma 1 .0 1 -> 1.0 -fmax36078 fma 1 0.0 1 -> 1.0 -fmax36079 fma 1 0.00 1 -> 1.00 - --- some carries -fmax36080 fma 1 9999999999999998 1 -> 9999999999999999 -fmax36081 fma 1 9999999999999999 1 -> 1.000000000000000E+16 Rounded -fmax36082 fma 1 999999999999999 1 -> 1000000000000000 -fmax36083 fma 1 9999999999999 1 -> 10000000000000 -fmax36084 fma 1 99999999999 1 -> 100000000000 -fmax36085 fma 1 999999999 1 -> 1000000000 -fmax36086 fma 1 9999999 1 -> 10000000 -fmax36087 fma 1 99999 1 -> 100000 -fmax36088 fma 1 999 1 -> 1000 -fmax36089 fma 1 9 1 -> 10 - - --- more LHS swaps -fmax36090 fma 1 '-56267E-10' 0 -> '-0.0000056267' -fmax36091 fma 1 '-56267E-6' 0 -> '-0.056267' -fmax36092 fma 1 '-56267E-5' 0 -> '-0.56267' -fmax36093 fma 1 '-56267E-4' 0 -> '-5.6267' -fmax36094 fma 1 '-56267E-3' 0 -> '-56.267' -fmax36095 fma 1 '-56267E-2' 0 -> '-562.67' -fmax36096 fma 1 '-56267E-1' 0 -> '-5626.7' -fmax36097 fma 1 '-56267E-0' 0 -> '-56267' -fmax36098 fma 1 '-5E-10' 0 -> '-5E-10' -fmax36099 fma 1 '-5E-7' 0 -> '-5E-7' -fmax36100 fma 1 '-5E-6' 0 -> '-0.000005' -fmax36101 fma 1 '-5E-5' 0 -> '-0.00005' -fmax36102 fma 1 '-5E-4' 0 -> '-0.0005' -fmax36103 fma 1 '-5E-1' 0 -> '-0.5' -fmax36104 fma 1 '-5E0' 0 -> '-5' -fmax36105 fma 1 '-5E1' 0 -> '-50' -fmax36106 fma 1 '-5E5' 0 -> '-500000' -fmax36107 fma 1 '-5E15' 0 -> '-5000000000000000' -fmax36108 fma 1 '-5E16' 0 -> '-5.000000000000000E+16' Rounded -fmax36109 fma 1 '-5E17' 0 -> '-5.000000000000000E+17' Rounded -fmax36110 fma 1 '-5E18' 0 -> '-5.000000000000000E+18' Rounded -fmax36111 fma 1 '-5E100' 0 -> '-5.000000000000000E+100' Rounded - --- more RHS swaps -fmax36113 fma 1 0 '-56267E-10' -> '-0.0000056267' -fmax36114 fma 1 0 '-56267E-6' -> '-0.056267' -fmax36116 fma 1 0 '-56267E-5' -> '-0.56267' -fmax36117 fma 1 0 '-56267E-4' -> '-5.6267' -fmax36119 fma 1 0 '-56267E-3' -> '-56.267' -fmax36120 fma 1 0 '-56267E-2' -> '-562.67' -fmax36121 fma 1 0 '-56267E-1' -> '-5626.7' -fmax36122 fma 1 0 '-56267E-0' -> '-56267' -fmax36123 fma 1 0 '-5E-10' -> '-5E-10' -fmax36124 fma 1 0 '-5E-7' -> '-5E-7' -fmax36125 fma 1 0 '-5E-6' -> '-0.000005' -fmax36126 fma 1 0 '-5E-5' -> '-0.00005' -fmax36127 fma 1 0 '-5E-4' -> '-0.0005' -fmax36128 fma 1 0 '-5E-1' -> '-0.5' -fmax36129 fma 1 0 '-5E0' -> '-5' -fmax36130 fma 1 0 '-5E1' -> '-50' -fmax36131 fma 1 0 '-5E5' -> '-500000' -fmax36132 fma 1 0 '-5E15' -> '-5000000000000000' -fmax36133 fma 1 0 '-5E16' -> '-5.000000000000000E+16' Rounded -fmax36134 fma 1 0 '-5E17' -> '-5.000000000000000E+17' Rounded -fmax36135 fma 1 0 '-5E18' -> '-5.000000000000000E+18' Rounded -fmax36136 fma 1 0 '-5E100' -> '-5.000000000000000E+100' Rounded - --- related -fmax36137 fma 1 1 '0E-19' -> '1.000000000000000' Rounded -fmax36138 fma 1 -1 '0E-19' -> '-1.000000000000000' Rounded -fmax36139 fma 1 '0E-19' 1 -> '1.000000000000000' Rounded -fmax36140 fma 1 '0E-19' -1 -> '-1.000000000000000' Rounded -fmax36141 fma 1 1E+11 0.0000 -> '100000000000.0000' -fmax36142 fma 1 1E+11 0.00000 -> '100000000000.0000' Rounded -fmax36143 fma 1 0.000 1E+12 -> '1000000000000.000' -fmax36144 fma 1 0.0000 1E+12 -> '1000000000000.000' Rounded - --- [some of the next group are really constructor tests] -fmax36146 fma 1 '00.0' 0 -> '0.0' -fmax36147 fma 1 '0.00' 0 -> '0.00' -fmax36148 fma 1 0 '0.00' -> '0.00' -fmax36149 fma 1 0 '00.0' -> '0.0' -fmax36150 fma 1 '00.0' '0.00' -> '0.00' -fmax36151 fma 1 '0.00' '00.0' -> '0.00' -fmax36152 fma 1 '3' '.3' -> '3.3' -fmax36153 fma 1 '3.' '.3' -> '3.3' -fmax36154 fma 1 '3.0' '.3' -> '3.3' -fmax36155 fma 1 '3.00' '.3' -> '3.30' -fmax36156 fma 1 '3' '3' -> '6' -fmax36157 fma 1 '3' '+3' -> '6' -fmax36158 fma 1 '3' '-3' -> '0' -fmax36159 fma 1 '0.3' '-0.3' -> '0.0' -fmax36160 fma 1 '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -fmax36161 fma 1 '1E+13' '-1' -> '9999999999999' -fmax36162 fma 1 '1E+13' '1.11' -> '10000000000001.11' -fmax36163 fma 1 '1.11' '1E+13' -> '10000000000001.11' -fmax36164 fma 1 '-1' '1E+13' -> '9999999999999' -fmax36165 fma 1 '7E+13' '-1' -> '69999999999999' -fmax36166 fma 1 '7E+13' '1.11' -> '70000000000001.11' -fmax36167 fma 1 '1.11' '7E+13' -> '70000000000001.11' -fmax36168 fma 1 '-1' '7E+13' -> '69999999999999' - --- 1234567890123456 1234567890123456 1 234567890123456 -fmax36170 fma 1 '0.4444444444444444' '0.5555555555555563' -> '1.000000000000001' Inexact Rounded -fmax36171 fma 1 '0.4444444444444444' '0.5555555555555562' -> '1.000000000000001' Inexact Rounded -fmax36172 fma 1 '0.4444444444444444' '0.5555555555555561' -> '1.000000000000000' Inexact Rounded -fmax36173 fma 1 '0.4444444444444444' '0.5555555555555560' -> '1.000000000000000' Inexact Rounded -fmax36174 fma 1 '0.4444444444444444' '0.5555555555555559' -> '1.000000000000000' Inexact Rounded -fmax36175 fma 1 '0.4444444444444444' '0.5555555555555558' -> '1.000000000000000' Inexact Rounded -fmax36176 fma 1 '0.4444444444444444' '0.5555555555555557' -> '1.000000000000000' Inexact Rounded -fmax36177 fma 1 '0.4444444444444444' '0.5555555555555556' -> '1.000000000000000' Rounded -fmax36178 fma 1 '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' -fmax36179 fma 1 '0.4444444444444444' '0.5555555555555554' -> '0.9999999999999998' -fmax36180 fma 1 '0.4444444444444444' '0.5555555555555553' -> '0.9999999999999997' -fmax36181 fma 1 '0.4444444444444444' '0.5555555555555552' -> '0.9999999999999996' -fmax36182 fma 1 '0.4444444444444444' '0.5555555555555551' -> '0.9999999999999995' -fmax36183 fma 1 '0.4444444444444444' '0.5555555555555550' -> '0.9999999999999994' - --- and some more, including residue effects and different roundings -rounding: half_up -fmax36200 fma 1 '6543210123456789' 0 -> '6543210123456789' -fmax36201 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -fmax36202 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -fmax36203 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -fmax36204 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -fmax36205 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -fmax36206 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36207 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36208 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -fmax36209 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -fmax36210 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -fmax36211 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -fmax36212 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -fmax36213 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -fmax36214 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -fmax36215 fma 1 '6543210123456789' 0.999999 -> '6543210123456790' Inexact Rounded -fmax36216 fma 1 '6543210123456789' 1 -> '6543210123456790' -fmax36217 fma 1 '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded -fmax36218 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -fmax36219 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - -rounding: half_even -fmax36220 fma 1 '6543210123456789' 0 -> '6543210123456789' -fmax36221 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -fmax36222 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -fmax36223 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -fmax36224 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -fmax36225 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -fmax36226 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36227 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36228 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -fmax36229 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -fmax36230 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -fmax36231 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -fmax36232 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -fmax36233 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -fmax36234 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -fmax36235 fma 1 '6543210123456789' 0.999999 -> '6543210123456790' Inexact Rounded -fmax36236 fma 1 '6543210123456789' 1 -> '6543210123456790' -fmax36237 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -fmax36238 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -fmax36239 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded --- critical few with even bottom digit... -fmax36240 fma 1 '6543210123456788' 0.499999 -> '6543210123456788' Inexact Rounded -fmax36241 fma 1 '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded -fmax36242 fma 1 '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded - -rounding: down -fmax36250 fma 1 '6543210123456789' 0 -> '6543210123456789' -fmax36251 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -fmax36252 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -fmax36253 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -fmax36254 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -fmax36255 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -fmax36256 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36257 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36258 fma 1 '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded -fmax36259 fma 1 '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded -fmax36260 fma 1 '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded -fmax36261 fma 1 '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded -fmax36262 fma 1 '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded -fmax36263 fma 1 '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded -fmax36264 fma 1 '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded -fmax36265 fma 1 '6543210123456789' 0.999999 -> '6543210123456789' Inexact Rounded -fmax36266 fma 1 '6543210123456789' 1 -> '6543210123456790' -fmax36267 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -fmax36268 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -fmax36269 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_even -fmax36301 fma 1 -1 1 -> 0 -fmax36302 fma 1 0 1 -> 1 -fmax36303 fma 1 1 1 -> 2 -fmax36304 fma 1 12 1 -> 13 -fmax36305 fma 1 98 1 -> 99 -fmax36306 fma 1 99 1 -> 100 -fmax36307 fma 1 100 1 -> 101 -fmax36308 fma 1 101 1 -> 102 -fmax36309 fma 1 -1 -1 -> -2 -fmax36310 fma 1 0 -1 -> -1 -fmax36311 fma 1 1 -1 -> 0 -fmax36312 fma 1 12 -1 -> 11 -fmax36313 fma 1 98 -1 -> 97 -fmax36314 fma 1 99 -1 -> 98 -fmax36315 fma 1 100 -1 -> 99 -fmax36316 fma 1 101 -1 -> 100 - -fmax36321 fma 1 -0.01 0.01 -> 0.00 -fmax36322 fma 1 0.00 0.01 -> 0.01 -fmax36323 fma 1 0.01 0.01 -> 0.02 -fmax36324 fma 1 0.12 0.01 -> 0.13 -fmax36325 fma 1 0.98 0.01 -> 0.99 -fmax36326 fma 1 0.99 0.01 -> 1.00 -fmax36327 fma 1 1.00 0.01 -> 1.01 -fmax36328 fma 1 1.01 0.01 -> 1.02 -fmax36329 fma 1 -0.01 -0.01 -> -0.02 -fmax36330 fma 1 0.00 -0.01 -> -0.01 -fmax36331 fma 1 0.01 -0.01 -> 0.00 -fmax36332 fma 1 0.12 -0.01 -> 0.11 -fmax36333 fma 1 0.98 -0.01 -> 0.97 -fmax36334 fma 1 0.99 -0.01 -> 0.98 -fmax36335 fma 1 1.00 -0.01 -> 0.99 -fmax36336 fma 1 1.01 -0.01 -> 1.00 - --- some more cases where fma 1 ing 0 affects the coefficient -fmax36340 fma 1 1E+3 0 -> 1000 -fmax36341 fma 1 1E+15 0 -> 1000000000000000 -fmax36342 fma 1 1E+16 0 -> 1.000000000000000E+16 Rounded -fmax36343 fma 1 1E+17 0 -> 1.000000000000000E+17 Rounded --- which simply follow from these cases ... -fmax36344 fma 1 1E+3 1 -> 1001 -fmax36345 fma 1 1E+15 1 -> 1000000000000001 -fmax36346 fma 1 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded -fmax36347 fma 1 1E+17 1 -> 1.000000000000000E+17 Inexact Rounded -fmax36348 fma 1 1E+3 7 -> 1007 -fmax36349 fma 1 1E+15 7 -> 1000000000000007 -fmax36350 fma 1 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded -fmax36351 fma 1 1E+17 7 -> 1.000000000000000E+17 Inexact Rounded - --- tryzeros cases -fmax36361 fma 1 0E+50 10000E+1 -> 1.0000E+5 -fmax36362 fma 1 10000E+1 0E-50 -> 100000.0000000000 Rounded -fmax36363 fma 1 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact -fmax36364 fma 1 12.34 0e-398 -> 12.34000000000000 Rounded - --- ulp replacement tests -fmax36400 fma 1 1 77e-14 -> 1.00000000000077 -fmax36401 fma 1 1 77e-15 -> 1.000000000000077 -fmax36402 fma 1 1 77e-16 -> 1.000000000000008 Inexact Rounded -fmax36403 fma 1 1 77e-17 -> 1.000000000000001 Inexact Rounded -fmax36404 fma 1 1 77e-18 -> 1.000000000000000 Inexact Rounded -fmax36405 fma 1 1 77e-19 -> 1.000000000000000 Inexact Rounded -fmax36406 fma 1 1 77e-99 -> 1.000000000000000 Inexact Rounded - -fmax36410 fma 1 10 77e-14 -> 10.00000000000077 -fmax36411 fma 1 10 77e-15 -> 10.00000000000008 Inexact Rounded -fmax36412 fma 1 10 77e-16 -> 10.00000000000001 Inexact Rounded -fmax36413 fma 1 10 77e-17 -> 10.00000000000000 Inexact Rounded -fmax36414 fma 1 10 77e-18 -> 10.00000000000000 Inexact Rounded -fmax36415 fma 1 10 77e-19 -> 10.00000000000000 Inexact Rounded -fmax36416 fma 1 10 77e-99 -> 10.00000000000000 Inexact Rounded - -fmax36420 fma 1 77e-14 1 -> 1.00000000000077 -fmax36421 fma 1 77e-15 1 -> 1.000000000000077 -fmax36422 fma 1 77e-16 1 -> 1.000000000000008 Inexact Rounded -fmax36423 fma 1 77e-17 1 -> 1.000000000000001 Inexact Rounded -fmax36424 fma 1 77e-18 1 -> 1.000000000000000 Inexact Rounded -fmax36425 fma 1 77e-19 1 -> 1.000000000000000 Inexact Rounded -fmax36426 fma 1 77e-99 1 -> 1.000000000000000 Inexact Rounded - -fmax36430 fma 1 77e-14 10 -> 10.00000000000077 -fmax36431 fma 1 77e-15 10 -> 10.00000000000008 Inexact Rounded -fmax36432 fma 1 77e-16 10 -> 10.00000000000001 Inexact Rounded -fmax36433 fma 1 77e-17 10 -> 10.00000000000000 Inexact Rounded -fmax36434 fma 1 77e-18 10 -> 10.00000000000000 Inexact Rounded -fmax36435 fma 1 77e-19 10 -> 10.00000000000000 Inexact Rounded -fmax36436 fma 1 77e-99 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -fmax36440 fma 1 1 -77e-14 -> 0.99999999999923 -fmax36441 fma 1 1 -77e-15 -> 0.999999999999923 -fmax36442 fma 1 1 -77e-16 -> 0.9999999999999923 -fmax36443 fma 1 1 -77e-17 -> 0.9999999999999992 Inexact Rounded -fmax36444 fma 1 1 -77e-18 -> 0.9999999999999999 Inexact Rounded -fmax36445 fma 1 1 -77e-19 -> 1.000000000000000 Inexact Rounded -fmax36446 fma 1 1 -77e-99 -> 1.000000000000000 Inexact Rounded - -fmax36450 fma 1 10 -77e-14 -> 9.99999999999923 -fmax36451 fma 1 10 -77e-15 -> 9.999999999999923 -fmax36452 fma 1 10 -77e-16 -> 9.999999999999992 Inexact Rounded -fmax36453 fma 1 10 -77e-17 -> 9.999999999999999 Inexact Rounded -fmax36454 fma 1 10 -77e-18 -> 10.00000000000000 Inexact Rounded -fmax36455 fma 1 10 -77e-19 -> 10.00000000000000 Inexact Rounded -fmax36456 fma 1 10 -77e-99 -> 10.00000000000000 Inexact Rounded - -fmax36460 fma 1 -77e-14 1 -> 0.99999999999923 -fmax36461 fma 1 -77e-15 1 -> 0.999999999999923 -fmax36462 fma 1 -77e-16 1 -> 0.9999999999999923 -fmax36463 fma 1 -77e-17 1 -> 0.9999999999999992 Inexact Rounded -fmax36464 fma 1 -77e-18 1 -> 0.9999999999999999 Inexact Rounded -fmax36465 fma 1 -77e-19 1 -> 1.000000000000000 Inexact Rounded -fmax36466 fma 1 -77e-99 1 -> 1.000000000000000 Inexact Rounded - -fmax36470 fma 1 -77e-14 10 -> 9.99999999999923 -fmax36471 fma 1 -77e-15 10 -> 9.999999999999923 -fmax36472 fma 1 -77e-16 10 -> 9.999999999999992 Inexact Rounded -fmax36473 fma 1 -77e-17 10 -> 9.999999999999999 Inexact Rounded -fmax36474 fma 1 -77e-18 10 -> 10.00000000000000 Inexact Rounded -fmax36475 fma 1 -77e-19 10 -> 10.00000000000000 Inexact Rounded -fmax36476 fma 1 -77e-99 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -fmax36480 fma 1 -1 77e-14 -> -0.99999999999923 -fmax36481 fma 1 -1 77e-15 -> -0.999999999999923 -fmax36482 fma 1 -1 77e-16 -> -0.9999999999999923 -fmax36483 fma 1 -1 77e-17 -> -0.9999999999999992 Inexact Rounded -fmax36484 fma 1 -1 77e-18 -> -0.9999999999999999 Inexact Rounded -fmax36485 fma 1 -1 77e-19 -> -1.000000000000000 Inexact Rounded -fmax36486 fma 1 -1 77e-99 -> -1.000000000000000 Inexact Rounded - -fmax36490 fma 1 -10 77e-14 -> -9.99999999999923 -fmax36491 fma 1 -10 77e-15 -> -9.999999999999923 -fmax36492 fma 1 -10 77e-16 -> -9.999999999999992 Inexact Rounded -fmax36493 fma 1 -10 77e-17 -> -9.999999999999999 Inexact Rounded -fmax36494 fma 1 -10 77e-18 -> -10.00000000000000 Inexact Rounded -fmax36495 fma 1 -10 77e-19 -> -10.00000000000000 Inexact Rounded -fmax36496 fma 1 -10 77e-99 -> -10.00000000000000 Inexact Rounded - -fmax36500 fma 1 77e-14 -1 -> -0.99999999999923 -fmax36501 fma 1 77e-15 -1 -> -0.999999999999923 -fmax36502 fma 1 77e-16 -1 -> -0.9999999999999923 -fmax36503 fma 1 77e-17 -1 -> -0.9999999999999992 Inexact Rounded -fmax36504 fma 1 77e-18 -1 -> -0.9999999999999999 Inexact Rounded -fmax36505 fma 1 77e-19 -1 -> -1.000000000000000 Inexact Rounded -fmax36506 fma 1 77e-99 -1 -> -1.000000000000000 Inexact Rounded - -fmax36510 fma 1 77e-14 -10 -> -9.99999999999923 -fmax36511 fma 1 77e-15 -10 -> -9.999999999999923 -fmax36512 fma 1 77e-16 -10 -> -9.999999999999992 Inexact Rounded -fmax36513 fma 1 77e-17 -10 -> -9.999999999999999 Inexact Rounded -fmax36514 fma 1 77e-18 -10 -> -10.00000000000000 Inexact Rounded -fmax36515 fma 1 77e-19 -10 -> -10.00000000000000 Inexact Rounded -fmax36516 fma 1 77e-99 -10 -> -10.00000000000000 Inexact Rounded - - --- long operands -fmax36521 fma 1 101234562345678000 0 -> 1.012345623456780E+17 Rounded -fmax36522 fma 1 0 101234562345678000 -> 1.012345623456780E+17 Rounded -fmax36523 fma 1 10123456234567800 0 -> 1.012345623456780E+16 Rounded -fmax36524 fma 1 0 10123456234567800 -> 1.012345623456780E+16 Rounded -fmax36525 fma 1 10123456234567890 0 -> 1.012345623456789E+16 Rounded -fmax36526 fma 1 0 10123456234567890 -> 1.012345623456789E+16 Rounded -fmax36527 fma 1 10123456234567891 0 -> 1.012345623456789E+16 Inexact Rounded -fmax36528 fma 1 0 10123456234567891 -> 1.012345623456789E+16 Inexact Rounded -fmax36529 fma 1 101234562345678901 0 -> 1.012345623456789E+17 Inexact Rounded -fmax36530 fma 1 0 101234562345678901 -> 1.012345623456789E+17 Inexact Rounded -fmax36531 fma 1 10123456234567896 0 -> 1.012345623456790E+16 Inexact Rounded -fmax36532 fma 1 0 10123456234567896 -> 1.012345623456790E+16 Inexact Rounded - --- verify a query -rounding: down -fmax36561 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded -fmax36562 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded --- and using decimal64 bounds... -rounding: down -fmax36563 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded -fmax36564 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded - --- more zeros, etc. -rounding: half_even - -fmax36701 fma 1 5.00 1.00E-3 -> 5.00100 -fmax36702 fma 1 00.00 0.000 -> 0.000 -fmax36703 fma 1 00.00 0E-3 -> 0.000 -fmax36704 fma 1 0E-3 00.00 -> 0.000 - -fmax36710 fma 1 0E+3 00.00 -> 0.00 -fmax36711 fma 1 0E+3 00.0 -> 0.0 -fmax36712 fma 1 0E+3 00. -> 0 -fmax36713 fma 1 0E+3 00.E+1 -> 0E+1 -fmax36714 fma 1 0E+3 00.E+2 -> 0E+2 -fmax36715 fma 1 0E+3 00.E+3 -> 0E+3 -fmax36716 fma 1 0E+3 00.E+4 -> 0E+3 -fmax36717 fma 1 0E+3 00.E+5 -> 0E+3 -fmax36718 fma 1 0E+3 -00.0 -> 0.0 -fmax36719 fma 1 0E+3 -00. -> 0 -fmax36731 fma 1 0E+3 -00.E+1 -> 0E+1 - -fmax36720 fma 1 00.00 0E+3 -> 0.00 -fmax36721 fma 1 00.0 0E+3 -> 0.0 -fmax36722 fma 1 00. 0E+3 -> 0 -fmax36723 fma 1 00.E+1 0E+3 -> 0E+1 -fmax36724 fma 1 00.E+2 0E+3 -> 0E+2 -fmax36725 fma 1 00.E+3 0E+3 -> 0E+3 -fmax36726 fma 1 00.E+4 0E+3 -> 0E+3 -fmax36727 fma 1 00.E+5 0E+3 -> 0E+3 -fmax36728 fma 1 -00.00 0E+3 -> 0.00 -fmax36729 fma 1 -00.0 0E+3 -> 0.0 -fmax36730 fma 1 -00. 0E+3 -> 0 - -fmax36732 fma 1 0 0 -> 0 -fmax36733 fma 1 0 -0 -> 0 -fmax36734 fma 1 -0 0 -> 0 -fmax36735 fma 1 -0 -0 -> -0 -- IEEE 854 special case - -fmax36736 fma 1 1 -1 -> 0 -fmax36737 fma 1 -1 -1 -> -2 -fmax36738 fma 1 1 1 -> 2 -fmax36739 fma 1 -1 1 -> 0 - -fmax36741 fma 1 0 -1 -> -1 -fmax36742 fma 1 -0 -1 -> -1 -fmax36743 fma 1 0 1 -> 1 -fmax36744 fma 1 -0 1 -> 1 -fmax36745 fma 1 -1 0 -> -1 -fmax36746 fma 1 -1 -0 -> -1 -fmax36747 fma 1 1 0 -> 1 -fmax36748 fma 1 1 -0 -> 1 - -fmax36751 fma 1 0.0 -1 -> -1.0 -fmax36752 fma 1 -0.0 -1 -> -1.0 -fmax36753 fma 1 0.0 1 -> 1.0 -fmax36754 fma 1 -0.0 1 -> 1.0 -fmax36755 fma 1 -1.0 0 -> -1.0 -fmax36756 fma 1 -1.0 -0 -> -1.0 -fmax36757 fma 1 1.0 0 -> 1.0 -fmax36758 fma 1 1.0 -0 -> 1.0 - -fmax36761 fma 1 0 -1.0 -> -1.0 -fmax36762 fma 1 -0 -1.0 -> -1.0 -fmax36763 fma 1 0 1.0 -> 1.0 -fmax36764 fma 1 -0 1.0 -> 1.0 -fmax36765 fma 1 -1 0.0 -> -1.0 -fmax36766 fma 1 -1 -0.0 -> -1.0 -fmax36767 fma 1 1 0.0 -> 1.0 -fmax36768 fma 1 1 -0.0 -> 1.0 - -fmax36771 fma 1 0.0 -1.0 -> -1.0 -fmax36772 fma 1 -0.0 -1.0 -> -1.0 -fmax36773 fma 1 0.0 1.0 -> 1.0 -fmax36774 fma 1 -0.0 1.0 -> 1.0 -fmax36775 fma 1 -1.0 0.0 -> -1.0 -fmax36776 fma 1 -1.0 -0.0 -> -1.0 -fmax36777 fma 1 1.0 0.0 -> 1.0 -fmax36778 fma 1 1.0 -0.0 -> 1.0 - --- Specials -fmax36780 fma 1 -Inf -Inf -> -Infinity -fmax36781 fma 1 -Inf -1000 -> -Infinity -fmax36782 fma 1 -Inf -1 -> -Infinity -fmax36783 fma 1 -Inf -0 -> -Infinity -fmax36784 fma 1 -Inf 0 -> -Infinity -fmax36785 fma 1 -Inf 1 -> -Infinity -fmax36786 fma 1 -Inf 1000 -> -Infinity -fmax36787 fma 1 -1000 -Inf -> -Infinity -fmax36788 fma 1 -Inf -Inf -> -Infinity -fmax36789 fma 1 -1 -Inf -> -Infinity -fmax36790 fma 1 -0 -Inf -> -Infinity -fmax36791 fma 1 0 -Inf -> -Infinity -fmax36792 fma 1 1 -Inf -> -Infinity -fmax36793 fma 1 1000 -Inf -> -Infinity -fmax36794 fma 1 Inf -Inf -> NaN Invalid_operation - -fmax36800 fma 1 Inf -Inf -> NaN Invalid_operation -fmax36801 fma 1 Inf -1000 -> Infinity -fmax36802 fma 1 Inf -1 -> Infinity -fmax36803 fma 1 Inf -0 -> Infinity -fmax36804 fma 1 Inf 0 -> Infinity -fmax36805 fma 1 Inf 1 -> Infinity -fmax36806 fma 1 Inf 1000 -> Infinity -fmax36807 fma 1 Inf Inf -> Infinity -fmax36808 fma 1 -1000 Inf -> Infinity -fmax36809 fma 1 -Inf Inf -> NaN Invalid_operation -fmax36810 fma 1 -1 Inf -> Infinity -fmax36811 fma 1 -0 Inf -> Infinity -fmax36812 fma 1 0 Inf -> Infinity -fmax36813 fma 1 1 Inf -> Infinity -fmax36814 fma 1 1000 Inf -> Infinity -fmax36815 fma 1 Inf Inf -> Infinity - -fmax36821 fma 1 NaN -Inf -> NaN -fmax36822 fma 1 NaN -1000 -> NaN -fmax36823 fma 1 NaN -1 -> NaN -fmax36824 fma 1 NaN -0 -> NaN -fmax36825 fma 1 NaN 0 -> NaN -fmax36826 fma 1 NaN 1 -> NaN -fmax36827 fma 1 NaN 1000 -> NaN -fmax36828 fma 1 NaN Inf -> NaN -fmax36829 fma 1 NaN NaN -> NaN -fmax36830 fma 1 -Inf NaN -> NaN -fmax36831 fma 1 -1000 NaN -> NaN -fmax36832 fma 1 -1 NaN -> NaN -fmax36833 fma 1 -0 NaN -> NaN -fmax36834 fma 1 0 NaN -> NaN -fmax36835 fma 1 1 NaN -> NaN -fmax36836 fma 1 1000 NaN -> NaN -fmax36837 fma 1 Inf NaN -> NaN - -fmax36841 fma 1 sNaN -Inf -> NaN Invalid_operation -fmax36842 fma 1 sNaN -1000 -> NaN Invalid_operation -fmax36843 fma 1 sNaN -1 -> NaN Invalid_operation -fmax36844 fma 1 sNaN -0 -> NaN Invalid_operation -fmax36845 fma 1 sNaN 0 -> NaN Invalid_operation -fmax36846 fma 1 sNaN 1 -> NaN Invalid_operation -fmax36847 fma 1 sNaN 1000 -> NaN Invalid_operation -fmax36848 fma 1 sNaN NaN -> NaN Invalid_operation -fmax36849 fma 1 sNaN sNaN -> NaN Invalid_operation -fmax36850 fma 1 NaN sNaN -> NaN Invalid_operation -fmax36851 fma 1 -Inf sNaN -> NaN Invalid_operation -fmax36852 fma 1 -1000 sNaN -> NaN Invalid_operation -fmax36853 fma 1 -1 sNaN -> NaN Invalid_operation -fmax36854 fma 1 -0 sNaN -> NaN Invalid_operation -fmax36855 fma 1 0 sNaN -> NaN Invalid_operation -fmax36856 fma 1 1 sNaN -> NaN Invalid_operation -fmax36857 fma 1 1000 sNaN -> NaN Invalid_operation -fmax36858 fma 1 Inf sNaN -> NaN Invalid_operation -fmax36859 fma 1 NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -fmax36861 fma 1 NaN1 -Inf -> NaN1 -fmax36862 fma 1 +NaN2 -1000 -> NaN2 -fmax36863 fma 1 NaN3 1000 -> NaN3 -fmax36864 fma 1 NaN4 Inf -> NaN4 -fmax36865 fma 1 NaN5 +NaN6 -> NaN5 -fmax36866 fma 1 -Inf NaN7 -> NaN7 -fmax36867 fma 1 -1000 NaN8 -> NaN8 -fmax36868 fma 1 1000 NaN9 -> NaN9 -fmax36869 fma 1 Inf +NaN10 -> NaN10 -fmax36871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation -fmax36872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation -fmax36873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation -fmax36874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation -fmax36875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation -fmax36876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation -fmax36877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation -fmax36878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation -fmax36879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation -fmax36880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation -fmax36881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation -fmax36882 fma 1 -NaN26 NaN28 -> -NaN26 -fmax36883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation -fmax36884 fma 1 1000 -NaN30 -> -NaN30 -fmax36885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation - --- now the case where we can get underflow but the result is normal --- [note this can't happen if the operands are also bounded, as we --- cannot represent 1E-399, for example] - -fmax36571 fma 1 1E-383 0 -> 1E-383 -fmax36572 fma 1 1E-384 0 -> 1E-384 Subnormal -fmax36573 fma 1 1E-383 1E-384 -> 1.1E-383 -fmax36574 subtract 1E-383 1E-384 -> 9E-384 Subnormal - --- Here we explore the boundary of rounding a subnormal to Nmin -fmax36575 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal -fmax36576 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal -fmax36577 subtract 1E-383 1E-399 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax36578 subtract 1E-383 1E-400 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax36579 subtract 1E-383 1E-401 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax36580 subtract 1E-383 1E-402 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded - --- check overflow edge case --- 1234567890123456 -fmax36972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 -fmax36973 fma 1 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded -fmax36974 fma 1 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded -fmax36975 fma 1 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded -fmax36976 fma 1 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded -fmax36977 fma 1 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded -fmax36978 fma 1 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded -fmax36979 fma 1 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded -fmax36980 fma 1 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded -fmax36981 fma 1 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded -fmax36982 fma 1 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded -fmax36983 fma 1 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded -fmax36984 fma 1 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded - -fmax36985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 -fmax36986 fma 1 -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded -fmax36987 fma 1 -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded -fmax36988 fma 1 -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded -fmax36989 fma 1 -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded -fmax36990 fma 1 -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded -fmax36991 fma 1 -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded -fmax36992 fma 1 -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded -fmax36993 fma 1 -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded -fmax36994 fma 1 -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded -fmax36995 fma 1 -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded -fmax36996 fma 1 -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded -fmax36997 fma 1 -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -fmax361100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact -fmax361101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact -fmax361103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact -fmax361104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact -fmax361105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact -fmax361106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact -fmax361107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact -fmax361108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact -fmax361109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact - -rounding: ceiling -fmax361110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact -fmax361111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact -fmax361113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact -fmax361114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact -fmax361115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact -fmax361116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact -fmax361117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact -fmax361118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact -fmax361119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -fmax361300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded -fmax361310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded -fmax361311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded -fmax361312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded -fmax361313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded -fmax361314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded -fmax361315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded -fmax361316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded -fmax361317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded -fmax361318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded -fmax361319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded -fmax361320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded -fmax361321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded -fmax361322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded -fmax361323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded -fmax361324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded -fmax361325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded -fmax361336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded -fmax361337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded -fmax361338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded -fmax361339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded - -fmax361340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded -fmax361341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded - -fmax361349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded -fmax361350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded -fmax361351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded -fmax361352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded -fmax361353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded -fmax361354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded -fmax361355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded -fmax361356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded -fmax361357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded -fmax361358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded -fmax361359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded -fmax361360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded -fmax361361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded -fmax361362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded -fmax361363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded -fmax361364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded -fmax361365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded -fmax361377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded -fmax361378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded -fmax361379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded -fmax361380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded -fmax361381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded -fmax361382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded -fmax361393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded -fmax361394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded -fmax361395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded -fmax361396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -fmax361420 fma 1 0 1.123456789012345 -> 1.123456789012345 -fmax361421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 -fmax361422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 -fmax361423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 -fmax361424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 -fmax361425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 -fmax361426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 -fmax361427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 -fmax361428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 -fmax361429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 -fmax361430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 -fmax361431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 -fmax361432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 -fmax361433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 -fmax361434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 -fmax361435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 -fmax361436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 -fmax361437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 -fmax361438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 -fmax361439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 - --- same, reversed 0 -fmax361440 fma 1 1.123456789012345 0 -> 1.123456789012345 -fmax361441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 -fmax361442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 -fmax361443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 -fmax361444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 -fmax361445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 -fmax361446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 -fmax361447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 -fmax361448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 -fmax361449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 -fmax361450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 -fmax361451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 -fmax361452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 -fmax361453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 -fmax361454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 -fmax361455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 -fmax361456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 -fmax361457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 -fmax361458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 -fmax361459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 - --- same, Es on the 0 -fmax361460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 -fmax361461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 -fmax361462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 -fmax361463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 -fmax361464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 -fmax361465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 -fmax361466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 -fmax361467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 -fmax361468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 -fmax361469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 -fmax361470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 -fmax361471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 -fmax361472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 -fmax361473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 -fmax361474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 -fmax361475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 --- next four flag Rounded because the 0 extends the result -fmax361476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded -fmax361477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded -fmax361478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded -fmax361479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -fmax361500 fma 1 0 0E-19 -> 0E-19 -fmax361501 fma 1 -0 0E-19 -> 0E-19 -fmax361502 fma 1 0 -0E-19 -> 0E-19 -fmax361503 fma 1 -0 -0E-19 -> -0E-19 -fmax361504 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361505 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361506 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361507 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361511 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361512 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361513 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361514 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361515 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361516 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361517 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361518 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: half_down --- exact zeros from zeros -fmax361520 fma 1 0 0E-19 -> 0E-19 -fmax361521 fma 1 -0 0E-19 -> 0E-19 -fmax361522 fma 1 0 -0E-19 -> 0E-19 -fmax361523 fma 1 -0 -0E-19 -> -0E-19 -fmax361524 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361525 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361526 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361527 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361531 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361532 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361533 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361534 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361535 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361536 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361537 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361538 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: half_even --- exact zeros from zeros -fmax361540 fma 1 0 0E-19 -> 0E-19 -fmax361541 fma 1 -0 0E-19 -> 0E-19 -fmax361542 fma 1 0 -0E-19 -> 0E-19 -fmax361543 fma 1 -0 -0E-19 -> -0E-19 -fmax361544 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361545 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361546 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361547 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361551 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361552 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361553 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361554 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361555 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361556 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361557 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361558 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: up --- exact zeros from zeros -fmax361560 fma 1 0 0E-19 -> 0E-19 -fmax361561 fma 1 -0 0E-19 -> 0E-19 -fmax361562 fma 1 0 -0E-19 -> 0E-19 -fmax361563 fma 1 -0 -0E-19 -> -0E-19 -fmax361564 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361565 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361566 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361567 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361571 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361572 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361573 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow -fmax361574 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow --- some exact zeros from non-zeros -fmax361575 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361576 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361577 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361578 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow - -rounding: down --- exact zeros from zeros -fmax361580 fma 1 0 0E-19 -> 0E-19 -fmax361581 fma 1 -0 0E-19 -> 0E-19 -fmax361582 fma 1 0 -0E-19 -> 0E-19 -fmax361583 fma 1 -0 -0E-19 -> -0E-19 -fmax361584 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361585 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361586 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361587 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361591 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361592 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361593 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361594 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361595 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361596 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361597 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361598 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: ceiling --- exact zeros from zeros -fmax361600 fma 1 0 0E-19 -> 0E-19 -fmax361601 fma 1 -0 0E-19 -> 0E-19 -fmax361602 fma 1 0 -0E-19 -> 0E-19 -fmax361603 fma 1 -0 -0E-19 -> -0E-19 -fmax361604 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361605 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361606 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361607 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361611 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361612 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361613 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361614 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361615 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361616 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361617 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361618 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -fmax361620 fma 1 0 0E-19 -> 0E-19 -fmax361621 fma 1 -0 0E-19 -> -0E-19 -- * -fmax361622 fma 1 0 -0E-19 -> -0E-19 -- * -fmax361623 fma 1 -0 -0E-19 -> -0E-19 -fmax361624 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361625 fma 1 -0E-400 0E-19 -> -0E-398 Clamped -- * -fmax361626 fma 1 0E-400 -0E-19 -> -0E-398 Clamped -- * -fmax361627 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361631 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361632 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361633 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow -fmax361634 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow --- some exact zeros from non-zeros -fmax361635 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361636 fma 1 -1E-401 1E-401 -> -0E-398 Clamped -- * -fmax361637 fma 1 1E-401 -1E-401 -> -0E-398 Clamped -- * -fmax361638 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow - --- Examples from SQL proposal (Krishna Kulkarni) -fmax361701 fma 1 130E-2 120E-2 -> 2.50 -fmax361702 fma 1 130E-2 12E-1 -> 2.50 -fmax361703 fma 1 130E-2 1E0 -> 2.30 -fmax361704 fma 1 1E2 1E4 -> 1.01E+4 -fmax361705 subtract 130E-2 120E-2 -> 0.10 -fmax361706 subtract 130E-2 12E-1 -> 0.10 -fmax361707 subtract 130E-2 1E0 -> 0.30 -fmax361708 subtract 1E2 1E4 -> -9.9E+3 - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -fmax362001 fma 1 1234567890123456 1 -> 1234567890123457 -fmax362002 fma 1 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded -fmax362003 fma 1 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded -fmax362004 fma 1 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded -fmax362005 fma 1 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded -fmax362006 fma 1 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded -fmax362007 fma 1 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded -fmax362008 fma 1 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded -fmax362009 fma 1 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded -fmax362010 fma 1 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded -fmax362011 fma 1 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded -fmax362012 fma 1 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded -fmax362013 fma 1 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded -fmax362014 fma 1 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded -fmax362015 fma 1 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded -fmax362016 fma 1 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded -fmax362017 fma 1 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded -fmax362018 fma 1 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded -fmax362019 fma 1 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded -fmax362020 fma 1 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded -fmax362021 fma 1 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded - --- widening second argument at gap -fmax362030 fma 1 12345678 1 -> 12345679 -fmax362031 fma 1 12345678 0.1 -> 12345678.1 -fmax362032 fma 1 12345678 0.12 -> 12345678.12 -fmax362033 fma 1 12345678 0.123 -> 12345678.123 -fmax362034 fma 1 12345678 0.1234 -> 12345678.1234 -fmax362035 fma 1 12345678 0.12345 -> 12345678.12345 -fmax362036 fma 1 12345678 0.123456 -> 12345678.123456 -fmax362037 fma 1 12345678 0.1234567 -> 12345678.1234567 -fmax362038 fma 1 12345678 0.12345678 -> 12345678.12345678 -fmax362039 fma 1 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded -fmax362040 fma 1 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded -fmax362041 fma 1 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded -fmax362042 fma 1 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded -fmax362043 fma 1 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded -fmax362044 fma 1 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded -fmax362045 fma 1 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded -fmax362046 fma 1 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded -fmax362047 fma 1 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded -fmax362048 fma 1 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded -fmax362049 fma 1 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -fmax362050 fma 1 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded -fmax362051 fma 1 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded -fmax362052 fma 1 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded -fmax362053 fma 1 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded -fmax362054 fma 1 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded -fmax362055 fma 1 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded -fmax362056 fma 1 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded -fmax362057 fma 1 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded -fmax362060 fma 1 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded -fmax362061 fma 1 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded -fmax362062 fma 1 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded -fmax362063 fma 1 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded -fmax362064 fma 1 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded -fmax362065 fma 1 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded -fmax362066 fma 1 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded -fmax362067 fma 1 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -fmax362070 fma 1 12345678 1E-8 -> 12345678.00000001 -fmax362071 fma 1 12345678 1E-9 -> 12345678.00000001 Inexact Rounded -fmax362072 fma 1 12345678 1E-10 -> 12345678.00000001 Inexact Rounded -fmax362073 fma 1 12345678 1E-11 -> 12345678.00000001 Inexact Rounded -fmax362074 fma 1 12345678 1E-12 -> 12345678.00000001 Inexact Rounded -fmax362075 fma 1 12345678 1E-13 -> 12345678.00000001 Inexact Rounded -fmax362076 fma 1 12345678 1E-14 -> 12345678.00000001 Inexact Rounded -fmax362077 fma 1 12345678 1E-15 -> 12345678.00000001 Inexact Rounded -fmax362078 fma 1 12345678 1E-16 -> 12345678.00000001 Inexact Rounded -fmax362079 fma 1 12345678 1E-17 -> 12345678.00000001 Inexact Rounded -fmax362080 fma 1 12345678 1E-18 -> 12345678.00000001 Inexact Rounded -fmax362081 fma 1 12345678 1E-19 -> 12345678.00000001 Inexact Rounded -fmax362082 fma 1 12345678 1E-20 -> 12345678.00000001 Inexact Rounded -fmax362083 fma 1 12345678 1E-25 -> 12345678.00000001 Inexact Rounded -fmax362084 fma 1 12345678 1E-30 -> 12345678.00000001 Inexact Rounded -fmax362085 fma 1 12345678 1E-31 -> 12345678.00000001 Inexact Rounded -fmax362086 fma 1 12345678 1E-32 -> 12345678.00000001 Inexact Rounded -fmax362087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexact Rounded -fmax362088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded -fmax362089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded - --- payload decapitate x3 -precision: 5 -fmax363000 fma 1 1 sNaN1234567890 -> NaN67890 Invalid_operation -fmax363001 fma 1 -sNaN1234512345 1 -> -NaN12345 Invalid_operation -fmax363002 fma sNaN1234554321 1 1 -> NaN54321 Invalid_operation - --- Null tests -fmax39990 fma 1 10 # -> NaN Invalid_operation -fmax39991 fma 1 # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- fma.decTest -- decimal fused multiply add -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- These tests comprise three parts: +-- 1. Sanity checks and other three-operand tests (especially those +-- where the fused operation makes a difference) +-- 2. Multiply tests (third operand is neutral zero [0E+emax]) +-- 3. Addition tests (first operand is 1) +-- The multiply and addition tests are extensive because FMA may have +-- its own dedicated multiplication or addition routine(s), and they +-- also inherently check the left-to-right properties. + +-- Sanity checks +fmax0001 fma 1 1 1 -> 2 +fmax0002 fma 1 1 2 -> 3 +fmax0003 fma 2 2 3 -> 7 +fmax0004 fma 9 9 9 -> 90 +fmax0005 fma -1 1 1 -> 0 +fmax0006 fma -1 1 2 -> 1 +fmax0007 fma -2 2 3 -> -1 +fmax0008 fma -9 9 9 -> -72 +fmax0011 fma 1 -1 1 -> 0 +fmax0012 fma 1 -1 2 -> 1 +fmax0013 fma 2 -2 3 -> -1 +fmax0014 fma 9 -9 9 -> -72 +fmax0015 fma 1 1 -1 -> 0 +fmax0016 fma 1 1 -2 -> -1 +fmax0017 fma 2 2 -3 -> 1 +fmax0018 fma 9 9 -9 -> 72 +fmax0019 fma 3 5 7 -> 22 +fmax0029 fma 3 -5 7 -> -8 + +-- non-integer exacts +fma0100 fma 25.2 63.6 -438 -> 1164.72 +fma0101 fma 0.301 0.380 334 -> 334.114380 +fma0102 fma 49.2 -4.8 23.3 -> -212.86 +fma0103 fma 4.22 0.079 -94.6 -> -94.26662 +fma0104 fma 903 0.797 0.887 -> 720.578 +fma0105 fma 6.13 -161 65.9 -> -921.03 +fma0106 fma 28.2 727 5.45 -> 20506.85 +fma0107 fma 4 605 688 -> 3108 +fma0108 fma 93.3 0.19 0.226 -> 17.953 +fma0109 fma 0.169 -341 5.61 -> -52.019 +fma0110 fma -72.2 30 -51.2 -> -2217.2 +fma0111 fma -0.409 13 20.4 -> 15.083 +fma0112 fma 317 77.0 19.0 -> 24428.0 +fma0113 fma 47 6.58 1.62 -> 310.88 +fma0114 fma 1.36 0.984 0.493 -> 1.83124 +fma0115 fma 72.7 274 1.56 -> 19921.36 +fma0116 fma 335 847 83 -> 283828 +fma0117 fma 666 0.247 25.4 -> 189.902 +fma0118 fma -3.87 3.06 78.0 -> 66.1578 +fma0119 fma 0.742 192 35.6 -> 178.064 +fma0120 fma -91.6 5.29 0.153 -> -484.411 + +-- cases where result is different from separate multiply + add; each +-- is preceded by the result of unfused multiply and add +-- [this is about 20% of all similar cases in general] +-- 888565290 1557.96930 -86087.7578 -> 1.38435735E+12 +fma0201 fma 888565290 1557.96930 -86087.7578 -> 1.38435736E+12 Inexact Rounded +-- -85519342.9 735155419 42010431 -> -6.28700084E+16 +fma0205 fma -85519342.9 735155419 42010431 -> -6.28700083E+16 Inexact Rounded +-- -98025.5 -294603.472 10414348.2 -> 2.88890669E+10 +fma0208 fma -98025.5 -294603.472 10414348.2 -> 2.88890670E+10 Inexact Rounded +-- 5967627.39 83526540.6 498494.810 -> 4.98455271E+14 +fma0211 fma 5967627.39 83526540.6 498494.810 -> 4.98455272E+14 Inexact Rounded +-- 3456.9433 874.39518 197866.615 -> 3220601.18 +fma0216 fma 3456.9433 874.39518 197866.615 -> 3220601.17 Inexact Rounded +-- 62769.8287 2096.98927 48.420317 -> 131627705 +fma0218 fma 62769.8287 2096.98927 48.420317 -> 131627706 Inexact Rounded +-- -68.81500 59961113.9 -8988862 -> -4.13521291E+9 +fma0219 fma -68.81500 59961113.9 -8988862 -> -4.13521292E+9 Inexact Rounded +-- 2126341.02 63491.5152 302427455 -> 1.35307040E+11 +fma0226 fma 2126341.02 63491.5152 302427455 -> 1.35307041E+11 Inexact Rounded + + +-- Infinite combinations +fmax0800 fma Inf Inf Inf -> Infinity +fmax0801 fma Inf Inf -Inf -> NaN Invalid_operation +fmax0802 fma Inf -Inf Inf -> NaN Invalid_operation +fmax0803 fma Inf -Inf -Inf -> -Infinity +fmax0804 fma -Inf Inf Inf -> NaN Invalid_operation +fmax0805 fma -Inf Inf -Inf -> -Infinity +fmax0806 fma -Inf -Inf Inf -> Infinity +fmax0807 fma -Inf -Inf -Inf -> NaN Invalid_operation +fmax0808 fma -Inf 0 1 -> NaN Invalid_operation +fmax0809 fma -Inf 0 NaN -> NaN Invalid_operation + +-- Triple NaN propagation +fmax0900 fma NaN2 NaN3 NaN5 -> NaN2 +fmax0901 fma 0 NaN3 NaN5 -> NaN3 +fmax0902 fma 0 0 NaN5 -> NaN5 +-- first sNaN wins (consider qNaN from earlier sNaN being +-- overridden by an sNaN in third operand) +fmax0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +fmax0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation +fmax0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation +fmax0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +fmax0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation +fmax0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation + +-- MULTIPLICATION TESTS ------------------------------------------------ +-- sanity checks (as base, above) +fmax2000 fma 2 2 0E+999999 -> 4 +fmax2001 fma 2 3 0E+999999 -> 6 +fmax2002 fma 5 1 0E+999999 -> 5 +fmax2003 fma 5 2 0E+999999 -> 10 +fmax2004 fma 1.20 2 0E+999999 -> 2.40 +fmax2005 fma 1.20 0 0E+999999 -> 0.00 +fmax2006 fma 1.20 -2 0E+999999 -> -2.40 +fmax2007 fma -1.20 2 0E+999999 -> -2.40 +fmax2008 fma -1.20 0 0E+999999 -> 0.00 +fmax2009 fma -1.20 -2 0E+999999 -> 2.40 +fmax2010 fma 5.09 7.1 0E+999999 -> 36.139 +fmax2011 fma 2.5 4 0E+999999 -> 10.0 +fmax2012 fma 2.50 4 0E+999999 -> 10.00 +fmax2013 fma 1.23456789 1.00000000 0E+999999 -> 1.23456789 Rounded +fmax2014 fma 9.999999999 9.999999999 0E+999999 -> 100.000000 Inexact Rounded +fmax2015 fma 2.50 4 0E+999999 -> 10.00 +precision: 6 +fmax2016 fma 2.50 4 0E+999999 -> 10.00 +fmax2017 fma 9.999999 9.999999 0E+999999 -> 100.000 Inexact Rounded +fmax2018 fma 9.999999 -9.999999 0E+999999 -> -100.000 Inexact Rounded +fmax2019 fma -9.999999 9.999999 0E+999999 -> -100.000 Inexact Rounded +fmax2020 fma -9.999999 -9.999999 0E+999999 -> 100.000 Inexact Rounded + +-- 1999.12.21: next one is an edge case if intermediate longs are used +precision: 15 +fmax2059 fma 999999999999 9765625 0E+999999 -> 9.76562499999023E+18 Inexact Rounded +precision: 30 +fmax2160 fma 999999999999 9765625 0E+999999 -> 9765624999990234375 +precision: 9 +----- + +-- zeros, etc. +fmax2021 fma 0 0 0E+999999 -> 0 +fmax2022 fma 0 -0 0E+999999 -> 0 +fmax2023 fma -0 0 0E+999999 -> 0 +fmax2024 fma -0 -0 0E+999999 -> 0 +fmax2025 fma -0.0 -0.0 0E+999999 -> 0.00 +fmax2026 fma -0.0 -0.0 0E+999999 -> 0.00 +fmax2027 fma -0.0 -0.0 0E+999999 -> 0.00 +fmax2028 fma -0.0 -0.0 0E+999999 -> 0.00 +fmax2030 fma 5.00 1E-3 0E+999999 -> 0.00500 +fmax2031 fma 00.00 0.000 0E+999999 -> 0.00000 +fmax2032 fma 00.00 0E-3 0E+999999 -> 0.00000 -- rhs is 0 +fmax2033 fma 0E-3 00.00 0E+999999 -> 0.00000 -- lhs is 0 +fmax2034 fma -5.00 1E-3 0E+999999 -> -0.00500 +fmax2035 fma -00.00 0.000 0E+999999 -> 0.00000 +fmax2036 fma -00.00 0E-3 0E+999999 -> 0.00000 -- rhs is 0 +fmax2037 fma -0E-3 00.00 0E+999999 -> 0.00000 -- lhs is 0 +fmax2038 fma 5.00 -1E-3 0E+999999 -> -0.00500 +fmax2039 fma 00.00 -0.000 0E+999999 -> 0.00000 +fmax2040 fma 00.00 -0E-3 0E+999999 -> 0.00000 -- rhs is 0 +fmax2041 fma 0E-3 -00.00 0E+999999 -> 0.00000 -- lhs is 0 +fmax2042 fma -5.00 -1E-3 0E+999999 -> 0.00500 +fmax2043 fma -00.00 -0.000 0E+999999 -> 0.00000 +fmax2044 fma -00.00 -0E-3 0E+999999 -> 0.00000 -- rhs is 0 +fmax2045 fma -0E-3 -00.00 0E+999999 -> 0.00000 -- lhs is 0 + +-- examples from decarith multiply +fmax2050 fma 1.20 3 0E+999999 -> 3.60 +fmax2051 fma 7 3 0E+999999 -> 21 +fmax2052 fma 0.9 0.8 0E+999999 -> 0.72 +fmax2053 fma 0.9 -0 0E+999999 -> 0.0 +fmax2054 fma 654321 654321 0E+999999 -> 4.28135971E+11 Inexact Rounded + +fmax2060 fma 123.45 1e7 0E+999999 -> 1.2345E+9 +fmax2061 fma 123.45 1e8 0E+999999 -> 1.2345E+10 +fmax2062 fma 123.45 1e+9 0E+999999 -> 1.2345E+11 +fmax2063 fma 123.45 1e10 0E+999999 -> 1.2345E+12 +fmax2064 fma 123.45 1e11 0E+999999 -> 1.2345E+13 +fmax2065 fma 123.45 1e12 0E+999999 -> 1.2345E+14 +fmax2066 fma 123.45 1e13 0E+999999 -> 1.2345E+15 + + +-- test some intermediate lengths +precision: 9 +fmax2080 fma 0.1 123456789 0E+999999 -> 12345678.9 +fmax2081 fma 0.1 1234567891 0E+999999 -> 123456789 Inexact Rounded +fmax2082 fma 0.1 12345678912 0E+999999 -> 1.23456789E+9 Inexact Rounded +fmax2083 fma 0.1 12345678912345 0E+999999 -> 1.23456789E+12 Inexact Rounded +fmax2084 fma 0.1 123456789 0E+999999 -> 12345678.9 +precision: 8 +fmax2085 fma 0.1 12345678912 0E+999999 -> 1.2345679E+9 Inexact Rounded +fmax2086 fma 0.1 12345678912345 0E+999999 -> 1.2345679E+12 Inexact Rounded +precision: 7 +fmax2087 fma 0.1 12345678912 0E+999999 -> 1.234568E+9 Inexact Rounded +fmax2088 fma 0.1 12345678912345 0E+999999 -> 1.234568E+12 Inexact Rounded + +precision: 9 +fmax2090 fma 123456789 0.1 0E+999999 -> 12345678.9 +fmax2091 fma 1234567891 0.1 0E+999999 -> 123456789 Inexact Rounded +fmax2092 fma 12345678912 0.1 0E+999999 -> 1.23456789E+9 Inexact Rounded +fmax2093 fma 12345678912345 0.1 0E+999999 -> 1.23456789E+12 Inexact Rounded +fmax2094 fma 123456789 0.1 0E+999999 -> 12345678.9 +precision: 8 +fmax2095 fma 12345678912 0.1 0E+999999 -> 1.2345679E+9 Inexact Rounded +fmax2096 fma 12345678912345 0.1 0E+999999 -> 1.2345679E+12 Inexact Rounded +precision: 7 +fmax2097 fma 12345678912 0.1 0E+999999 -> 1.234568E+9 Inexact Rounded +fmax2098 fma 12345678912345 0.1 0E+999999 -> 1.234568E+12 Inexact Rounded + +-- test some more edge cases and carries +maxexponent: 9999 +minexponent: -9999 +precision: 33 +fmax2101 fma 9 9 0E+999999 -> 81 +fmax2102 fma 9 90 0E+999999 -> 810 +fmax2103 fma 9 900 0E+999999 -> 8100 +fmax2104 fma 9 9000 0E+999999 -> 81000 +fmax2105 fma 9 90000 0E+999999 -> 810000 +fmax2106 fma 9 900000 0E+999999 -> 8100000 +fmax2107 fma 9 9000000 0E+999999 -> 81000000 +fmax2108 fma 9 90000000 0E+999999 -> 810000000 +fmax2109 fma 9 900000000 0E+999999 -> 8100000000 +fmax2110 fma 9 9000000000 0E+999999 -> 81000000000 +fmax2111 fma 9 90000000000 0E+999999 -> 810000000000 +fmax2112 fma 9 900000000000 0E+999999 -> 8100000000000 +fmax2113 fma 9 9000000000000 0E+999999 -> 81000000000000 +fmax2114 fma 9 90000000000000 0E+999999 -> 810000000000000 +fmax2115 fma 9 900000000000000 0E+999999 -> 8100000000000000 +fmax2116 fma 9 9000000000000000 0E+999999 -> 81000000000000000 +fmax2117 fma 9 90000000000000000 0E+999999 -> 810000000000000000 +fmax2118 fma 9 900000000000000000 0E+999999 -> 8100000000000000000 +fmax2119 fma 9 9000000000000000000 0E+999999 -> 81000000000000000000 +fmax2120 fma 9 90000000000000000000 0E+999999 -> 810000000000000000000 +fmax2121 fma 9 900000000000000000000 0E+999999 -> 8100000000000000000000 +fmax2122 fma 9 9000000000000000000000 0E+999999 -> 81000000000000000000000 +fmax2123 fma 9 90000000000000000000000 0E+999999 -> 810000000000000000000000 +-- test some more edge cases without carries +fmax2131 fma 3 3 0E+999999 -> 9 +fmax2132 fma 3 30 0E+999999 -> 90 +fmax2133 fma 3 300 0E+999999 -> 900 +fmax2134 fma 3 3000 0E+999999 -> 9000 +fmax2135 fma 3 30000 0E+999999 -> 90000 +fmax2136 fma 3 300000 0E+999999 -> 900000 +fmax2137 fma 3 3000000 0E+999999 -> 9000000 +fmax2138 fma 3 30000000 0E+999999 -> 90000000 +fmax2139 fma 3 300000000 0E+999999 -> 900000000 +fmax2140 fma 3 3000000000 0E+999999 -> 9000000000 +fmax2141 fma 3 30000000000 0E+999999 -> 90000000000 +fmax2142 fma 3 300000000000 0E+999999 -> 900000000000 +fmax2143 fma 3 3000000000000 0E+999999 -> 9000000000000 +fmax2144 fma 3 30000000000000 0E+999999 -> 90000000000000 +fmax2145 fma 3 300000000000000 0E+999999 -> 900000000000000 +fmax2146 fma 3 3000000000000000 0E+999999 -> 9000000000000000 +fmax2147 fma 3 30000000000000000 0E+999999 -> 90000000000000000 +fmax2148 fma 3 300000000000000000 0E+999999 -> 900000000000000000 +fmax2149 fma 3 3000000000000000000 0E+999999 -> 9000000000000000000 +fmax2150 fma 3 30000000000000000000 0E+999999 -> 90000000000000000000 +fmax2151 fma 3 300000000000000000000 0E+999999 -> 900000000000000000000 +fmax2152 fma 3 3000000000000000000000 0E+999999 -> 9000000000000000000000 +fmax2153 fma 3 30000000000000000000000 0E+999999 -> 90000000000000000000000 + +maxexponent: 999999 +minexponent: -999999 +precision: 9 +-- test some cases that are close to exponent overflow/underflow +fmax2170 fma 1 9e999999 0E+999999 -> 9E+999999 +fmax2171 fma 1 9.9e999999 0E+999999 -> 9.9E+999999 +fmax2172 fma 1 9.99e999999 0E+999999 -> 9.99E+999999 +fmax2173 fma 9e999999 1 0E+999999 -> 9E+999999 +fmax2174 fma 9.9e999999 1 0E+999999 -> 9.9E+999999 +fmax2176 fma 9.99e999999 1 0E+999999 -> 9.99E+999999 +fmax2177 fma 1 9.99999e999999 0E+999999 -> 9.99999E+999999 +fmax2178 fma 9.99999e999999 1 0E+999999 -> 9.99999E+999999 + +fmax2180 fma 0.1 9e-999998 0E+999999 -> 9E-999999 +fmax2181 fma 0.1 99e-999998 0E+999999 -> 9.9E-999998 +fmax2182 fma 0.1 999e-999998 0E+999999 -> 9.99E-999997 + +fmax2183 fma 0.1 9e-999998 0E+999999 -> 9E-999999 +fmax2184 fma 0.1 99e-999998 0E+999999 -> 9.9E-999998 +fmax2185 fma 0.1 999e-999998 0E+999999 -> 9.99E-999997 +fmax2186 fma 0.1 999e-999997 0E+999999 -> 9.99E-999996 +fmax2187 fma 0.1 9999e-999997 0E+999999 -> 9.999E-999995 +fmax2188 fma 0.1 99999e-999997 0E+999999 -> 9.9999E-999994 + +fmax2190 fma 1 9e-999998 0E+999999 -> 9E-999998 +fmax2191 fma 1 99e-999998 0E+999999 -> 9.9E-999997 +fmax2192 fma 1 999e-999998 0E+999999 -> 9.99E-999996 +fmax2193 fma 9e-999998 1 0E+999999 -> 9E-999998 +fmax2194 fma 99e-999998 1 0E+999999 -> 9.9E-999997 +fmax2195 fma 999e-999998 1 0E+999999 -> 9.99E-999996 + +-- long operand triangle +precision: 33 +fmax2246 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916511992830 Inexact Rounded +precision: 32 +fmax2247 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651199283 Inexact Rounded +precision: 31 +fmax2248 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165119928 Inexact Rounded +precision: 30 +fmax2249 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916511993 Inexact Rounded +precision: 29 +fmax2250 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651199 Inexact Rounded +precision: 28 +fmax2251 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165120 Inexact Rounded +precision: 27 +fmax2252 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916512 Inexact Rounded +precision: 26 +fmax2253 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651 Inexact Rounded +precision: 25 +fmax2254 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165 Inexact Rounded +precision: 24 +fmax2255 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671917 Inexact Rounded +precision: 23 +fmax2256 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967192 Inexact Rounded +precision: 22 +fmax2257 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719 Inexact Rounded +precision: 21 +fmax2258 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369672 Inexact Rounded +precision: 20 +fmax2259 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967 Inexact Rounded +precision: 19 +fmax2260 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933697 Inexact Rounded +precision: 18 +fmax2261 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193370 Inexact Rounded +precision: 17 +fmax2262 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119337 Inexact Rounded +precision: 16 +fmax2263 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011934 Inexact Rounded +precision: 15 +fmax2264 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193 Inexact Rounded +precision: 14 +fmax2265 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119 Inexact Rounded +precision: 13 +fmax2266 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908012 Inexact Rounded +precision: 12 +fmax2267 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801 Inexact Rounded +precision: 11 +fmax2268 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080 Inexact Rounded +precision: 10 +fmax2269 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908 Inexact Rounded +precision: 9 +fmax2270 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.291 Inexact Rounded +precision: 8 +fmax2271 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29 Inexact Rounded +precision: 7 +fmax2272 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.3 Inexact Rounded +precision: 6 +fmax2273 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433 Inexact Rounded +precision: 5 +fmax2274 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.4543E+5 Inexact Rounded +precision: 4 +fmax2275 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.454E+5 Inexact Rounded +precision: 3 +fmax2276 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.45E+5 Inexact Rounded +precision: 2 +fmax2277 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.5E+5 Inexact Rounded +precision: 1 +fmax2278 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1E+5 Inexact Rounded + +-- test some edge cases with exact rounding +maxexponent: 9999 +minexponent: -9999 +precision: 9 +fmax2301 fma 9 9 0E+999999 -> 81 +fmax2302 fma 9 90 0E+999999 -> 810 +fmax2303 fma 9 900 0E+999999 -> 8100 +fmax2304 fma 9 9000 0E+999999 -> 81000 +fmax2305 fma 9 90000 0E+999999 -> 810000 +fmax2306 fma 9 900000 0E+999999 -> 8100000 +fmax2307 fma 9 9000000 0E+999999 -> 81000000 +fmax2308 fma 9 90000000 0E+999999 -> 810000000 +fmax2309 fma 9 900000000 0E+999999 -> 8.10000000E+9 Rounded +fmax2310 fma 9 9000000000 0E+999999 -> 8.10000000E+10 Rounded +fmax2311 fma 9 90000000000 0E+999999 -> 8.10000000E+11 Rounded +fmax2312 fma 9 900000000000 0E+999999 -> 8.10000000E+12 Rounded +fmax2313 fma 9 9000000000000 0E+999999 -> 8.10000000E+13 Rounded +fmax2314 fma 9 90000000000000 0E+999999 -> 8.10000000E+14 Rounded +fmax2315 fma 9 900000000000000 0E+999999 -> 8.10000000E+15 Rounded +fmax2316 fma 9 9000000000000000 0E+999999 -> 8.10000000E+16 Rounded +fmax2317 fma 9 90000000000000000 0E+999999 -> 8.10000000E+17 Rounded +fmax2318 fma 9 900000000000000000 0E+999999 -> 8.10000000E+18 Rounded +fmax2319 fma 9 9000000000000000000 0E+999999 -> 8.10000000E+19 Rounded +fmax2320 fma 9 90000000000000000000 0E+999999 -> 8.10000000E+20 Rounded +fmax2321 fma 9 900000000000000000000 0E+999999 -> 8.10000000E+21 Rounded +fmax2322 fma 9 9000000000000000000000 0E+999999 -> 8.10000000E+22 Rounded +fmax2323 fma 9 90000000000000000000000 0E+999999 -> 8.10000000E+23 Rounded + +-- fastpath breakers +precision: 29 +fmax2330 fma 1.491824697641270317824852952837224 1.105170918075647624811707826490246514675628614562883537345747603 0E+999999 -> 1.6487212707001281468486507878 Inexact Rounded +precision: 55 +fmax2331 fma 0.8958341352965282506768545828765117803873717284891040428 0.8958341352965282506768545828765117803873717284891040428 0E+999999 -> 0.8025187979624784829842553829934069955890983696752228299 Inexact Rounded + + +-- tryzeros cases +precision: 7 +rounding: half_up +maxExponent: 92 +minexponent: -92 +fmax2504 fma 0E-60 1000E-60 0E+999999 -> 0E-98 Clamped +fmax2505 fma 100E+60 0E+60 0E+999999 -> 0E+92 Clamped + +-- mixed with zeros +maxexponent: 999999 +minexponent: -999999 +precision: 9 +fmax2541 fma 0 -1 0E+999999 -> 0 +fmax2542 fma -0 -1 0E+999999 -> 0 +fmax2543 fma 0 1 0E+999999 -> 0 +fmax2544 fma -0 1 0E+999999 -> 0 +fmax2545 fma -1 0 0E+999999 -> 0 +fmax2546 fma -1 -0 0E+999999 -> 0 +fmax2547 fma 1 0 0E+999999 -> 0 +fmax2548 fma 1 -0 0E+999999 -> 0 + +fmax2551 fma 0.0 -1 0E+999999 -> 0.0 +fmax2552 fma -0.0 -1 0E+999999 -> 0.0 +fmax2553 fma 0.0 1 0E+999999 -> 0.0 +fmax2554 fma -0.0 1 0E+999999 -> 0.0 +fmax2555 fma -1.0 0 0E+999999 -> 0.0 +fmax2556 fma -1.0 -0 0E+999999 -> 0.0 +fmax2557 fma 1.0 0 0E+999999 -> 0.0 +fmax2558 fma 1.0 -0 0E+999999 -> 0.0 + +fmax2561 fma 0 -1.0 0E+999999 -> 0.0 +fmax2562 fma -0 -1.0 0E+999999 -> 0.0 +fmax2563 fma 0 1.0 0E+999999 -> 0.0 +fmax2564 fma -0 1.0 0E+999999 -> 0.0 +fmax2565 fma -1 0.0 0E+999999 -> 0.0 +fmax2566 fma -1 -0.0 0E+999999 -> 0.0 +fmax2567 fma 1 0.0 0E+999999 -> 0.0 +fmax2568 fma 1 -0.0 0E+999999 -> 0.0 + +fmax2571 fma 0.0 -1.0 0E+999999 -> 0.00 +fmax2572 fma -0.0 -1.0 0E+999999 -> 0.00 +fmax2573 fma 0.0 1.0 0E+999999 -> 0.00 +fmax2574 fma -0.0 1.0 0E+999999 -> 0.00 +fmax2575 fma -1.0 0.0 0E+999999 -> 0.00 +fmax2576 fma -1.0 -0.0 0E+999999 -> 0.00 +fmax2577 fma 1.0 0.0 0E+999999 -> 0.00 +fmax2578 fma 1.0 -0.0 0E+999999 -> 0.00 + + +-- Specials +fmax2580 fma Inf -Inf 0E+999999 -> -Infinity +fmax2581 fma Inf -1000 0E+999999 -> -Infinity +fmax2582 fma Inf -1 0E+999999 -> -Infinity +fmax2583 fma Inf -0 0E+999999 -> NaN Invalid_operation +fmax2584 fma Inf 0 0E+999999 -> NaN Invalid_operation +fmax2585 fma Inf 1 0E+999999 -> Infinity +fmax2586 fma Inf 1000 0E+999999 -> Infinity +fmax2587 fma Inf Inf 0E+999999 -> Infinity +fmax2588 fma -1000 Inf 0E+999999 -> -Infinity +fmax2589 fma -Inf Inf 0E+999999 -> -Infinity +fmax2590 fma -1 Inf 0E+999999 -> -Infinity +fmax2591 fma -0 Inf 0E+999999 -> NaN Invalid_operation +fmax2592 fma 0 Inf 0E+999999 -> NaN Invalid_operation +fmax2593 fma 1 Inf 0E+999999 -> Infinity +fmax2594 fma 1000 Inf 0E+999999 -> Infinity +fmax2595 fma Inf Inf 0E+999999 -> Infinity + +fmax2600 fma -Inf -Inf 0E+999999 -> Infinity +fmax2601 fma -Inf -1000 0E+999999 -> Infinity +fmax2602 fma -Inf -1 0E+999999 -> Infinity +fmax2603 fma -Inf -0 0E+999999 -> NaN Invalid_operation +fmax2604 fma -Inf 0 0E+999999 -> NaN Invalid_operation +fmax2605 fma -Inf 1 0E+999999 -> -Infinity +fmax2606 fma -Inf 1000 0E+999999 -> -Infinity +fmax2607 fma -Inf Inf 0E+999999 -> -Infinity +fmax2608 fma -1000 Inf 0E+999999 -> -Infinity +fmax2609 fma -Inf -Inf 0E+999999 -> Infinity +fmax2610 fma -1 -Inf 0E+999999 -> Infinity +fmax2611 fma -0 -Inf 0E+999999 -> NaN Invalid_operation +fmax2612 fma 0 -Inf 0E+999999 -> NaN Invalid_operation +fmax2613 fma 1 -Inf 0E+999999 -> -Infinity +fmax2614 fma 1000 -Inf 0E+999999 -> -Infinity +fmax2615 fma Inf -Inf 0E+999999 -> -Infinity + +fmax2621 fma NaN -Inf 0E+999999 -> NaN +fmax2622 fma NaN -1000 0E+999999 -> NaN +fmax2623 fma NaN -1 0E+999999 -> NaN +fmax2624 fma NaN -0 0E+999999 -> NaN +fmax2625 fma NaN 0 0E+999999 -> NaN +fmax2626 fma NaN 1 0E+999999 -> NaN +fmax2627 fma NaN 1000 0E+999999 -> NaN +fmax2628 fma NaN Inf 0E+999999 -> NaN +fmax2629 fma NaN NaN 0E+999999 -> NaN +fmax2630 fma -Inf NaN 0E+999999 -> NaN +fmax2631 fma -1000 NaN 0E+999999 -> NaN +fmax2632 fma -1 NaN 0E+999999 -> NaN +fmax2633 fma -0 NaN 0E+999999 -> NaN +fmax2634 fma 0 NaN 0E+999999 -> NaN +fmax2635 fma 1 NaN 0E+999999 -> NaN +fmax2636 fma 1000 NaN 0E+999999 -> NaN +fmax2637 fma Inf NaN 0E+999999 -> NaN + +fmax2641 fma sNaN -Inf 0E+999999 -> NaN Invalid_operation +fmax2642 fma sNaN -1000 0E+999999 -> NaN Invalid_operation +fmax2643 fma sNaN -1 0E+999999 -> NaN Invalid_operation +fmax2644 fma sNaN -0 0E+999999 -> NaN Invalid_operation +fmax2645 fma sNaN 0 0E+999999 -> NaN Invalid_operation +fmax2646 fma sNaN 1 0E+999999 -> NaN Invalid_operation +fmax2647 fma sNaN 1000 0E+999999 -> NaN Invalid_operation +fmax2648 fma sNaN NaN 0E+999999 -> NaN Invalid_operation +fmax2649 fma sNaN sNaN 0E+999999 -> NaN Invalid_operation +fmax2650 fma NaN sNaN 0E+999999 -> NaN Invalid_operation +fmax2651 fma -Inf sNaN 0E+999999 -> NaN Invalid_operation +fmax2652 fma -1000 sNaN 0E+999999 -> NaN Invalid_operation +fmax2653 fma -1 sNaN 0E+999999 -> NaN Invalid_operation +fmax2654 fma -0 sNaN 0E+999999 -> NaN Invalid_operation +fmax2655 fma 0 sNaN 0E+999999 -> NaN Invalid_operation +fmax2656 fma 1 sNaN 0E+999999 -> NaN Invalid_operation +fmax2657 fma 1000 sNaN 0E+999999 -> NaN Invalid_operation +fmax2658 fma Inf sNaN 0E+999999 -> NaN Invalid_operation +fmax2659 fma NaN sNaN 0E+999999 -> NaN Invalid_operation + +-- propagating NaNs +fmax2661 fma NaN9 -Inf 0E+999999 -> NaN9 +fmax2662 fma NaN8 999 0E+999999 -> NaN8 +fmax2663 fma NaN71 Inf 0E+999999 -> NaN71 +fmax2664 fma NaN6 NaN5 0E+999999 -> NaN6 +fmax2665 fma -Inf NaN4 0E+999999 -> NaN4 +fmax2666 fma -999 NaN33 0E+999999 -> NaN33 +fmax2667 fma Inf NaN2 0E+999999 -> NaN2 + +fmax2671 fma sNaN99 -Inf 0E+999999 -> NaN99 Invalid_operation +fmax2672 fma sNaN98 -11 0E+999999 -> NaN98 Invalid_operation +fmax2673 fma sNaN97 NaN 0E+999999 -> NaN97 Invalid_operation +fmax2674 fma sNaN16 sNaN94 0E+999999 -> NaN16 Invalid_operation +fmax2675 fma NaN95 sNaN93 0E+999999 -> NaN93 Invalid_operation +fmax2676 fma -Inf sNaN92 0E+999999 -> NaN92 Invalid_operation +fmax2677 fma 088 sNaN91 0E+999999 -> NaN91 Invalid_operation +fmax2678 fma Inf sNaN90 0E+999999 -> NaN90 Invalid_operation +fmax2679 fma NaN sNaN89 0E+999999 -> NaN89 Invalid_operation + +fmax2681 fma -NaN9 -Inf 0E+999999 -> -NaN9 +fmax2682 fma -NaN8 999 0E+999999 -> -NaN8 +fmax2683 fma -NaN71 Inf 0E+999999 -> -NaN71 +fmax2684 fma -NaN6 -NaN5 0E+999999 -> -NaN6 +fmax2685 fma -Inf -NaN4 0E+999999 -> -NaN4 +fmax2686 fma -999 -NaN33 0E+999999 -> -NaN33 +fmax2687 fma Inf -NaN2 0E+999999 -> -NaN2 + +fmax2691 fma -sNaN99 -Inf 0E+999999 -> -NaN99 Invalid_operation +fmax2692 fma -sNaN98 -11 0E+999999 -> -NaN98 Invalid_operation +fmax2693 fma -sNaN97 NaN 0E+999999 -> -NaN97 Invalid_operation +fmax2694 fma -sNaN16 -sNaN94 0E+999999 -> -NaN16 Invalid_operation +fmax2695 fma -NaN95 -sNaN93 0E+999999 -> -NaN93 Invalid_operation +fmax2696 fma -Inf -sNaN92 0E+999999 -> -NaN92 Invalid_operation +fmax2697 fma 088 -sNaN91 0E+999999 -> -NaN91 Invalid_operation +fmax2698 fma Inf -sNaN90 0E+999999 -> -NaN90 Invalid_operation +fmax2699 fma -NaN -sNaN89 0E+999999 -> -NaN89 Invalid_operation + +fmax2701 fma -NaN -Inf 0E+999999 -> -NaN +fmax2702 fma -NaN 999 0E+999999 -> -NaN +fmax2703 fma -NaN Inf 0E+999999 -> -NaN +fmax2704 fma -NaN -NaN 0E+999999 -> -NaN +fmax2705 fma -Inf -NaN0 0E+999999 -> -NaN +fmax2706 fma -999 -NaN 0E+999999 -> -NaN +fmax2707 fma Inf -NaN 0E+999999 -> -NaN + +fmax2711 fma -sNaN -Inf 0E+999999 -> -NaN Invalid_operation +fmax2712 fma -sNaN -11 0E+999999 -> -NaN Invalid_operation +fmax2713 fma -sNaN00 NaN 0E+999999 -> -NaN Invalid_operation +fmax2714 fma -sNaN -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2715 fma -NaN -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2716 fma -Inf -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2717 fma 088 -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2718 fma Inf -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2719 fma -NaN -sNaN 0E+999999 -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +maxexponent: 999999 +minexponent: -999999 +fmax2730 fma +1.23456789012345E-0 9E+999999 0E+999999 -> Infinity Inexact Overflow Rounded +fmax2731 fma 9E+999999 +1.23456789012345E-0 0E+999999 -> Infinity Inexact Overflow Rounded +fmax2732 fma +0.100 9E-999999 0E+999999 -> 9.00E-1000000 Subnormal +fmax2733 fma 9E-999999 +0.100 0E+999999 -> 9.00E-1000000 Subnormal +fmax2735 fma -1.23456789012345E-0 9E+999999 0E+999999 -> -Infinity Inexact Overflow Rounded +fmax2736 fma 9E+999999 -1.23456789012345E-0 0E+999999 -> -Infinity Inexact Overflow Rounded +fmax2737 fma -0.100 9E-999999 0E+999999 -> -9.00E-1000000 Subnormal +fmax2738 fma 9E-999999 -0.100 0E+999999 -> -9.00E-1000000 Subnormal + +-- signs +fmax2751 fma 1e+777777 1e+411111 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2752 fma 1e+777777 -1e+411111 0E+999999 -> -Infinity Overflow Inexact Rounded +fmax2753 fma -1e+777777 1e+411111 0E+999999 -> -Infinity Overflow Inexact Rounded +fmax2754 fma -1e+777777 -1e+411111 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2755 fma 1e-777777 1e-411111 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2756 fma 1e-777777 -1e-411111 0E+999999 -> -0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2757 fma -1e-777777 1e-411111 0E+999999 -> -0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2758 fma -1e-777777 -1e-411111 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +precision: 9 +fmax2760 fma 1e-600000 1e-400001 0E+999999 -> 1E-1000001 Subnormal +fmax2761 fma 1e-600000 1e-400002 0E+999999 -> 1E-1000002 Subnormal +fmax2762 fma 1e-600000 1e-400003 0E+999999 -> 1E-1000003 Subnormal +fmax2763 fma 1e-600000 1e-400004 0E+999999 -> 1E-1000004 Subnormal +fmax2764 fma 1e-600000 1e-400005 0E+999999 -> 1E-1000005 Subnormal +fmax2765 fma 1e-600000 1e-400006 0E+999999 -> 1E-1000006 Subnormal +fmax2766 fma 1e-600000 1e-400007 0E+999999 -> 1E-1000007 Subnormal +fmax2767 fma 1e-600000 1e-400008 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2768 fma 1e-600000 1e-400009 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2769 fma 1e-600000 1e-400010 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +fmax2770 fma 1e+600000 1e+400001 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2771 fma 1e+600000 1e+400002 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2772 fma 1e+600000 1e+400003 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2773 fma 1e+600000 1e+400004 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2774 fma 1e+600000 1e+400005 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2775 fma 1e+600000 1e+400006 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2776 fma 1e+600000 1e+400007 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2777 fma 1e+600000 1e+400008 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2778 fma 1e+600000 1e+400009 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2779 fma 1e+600000 1e+400010 0E+999999 -> Infinity Overflow Inexact Rounded + +-- 'subnormal' test edge condition at higher precisions +precision: 99 +fmax2780 fma 1e-600000 1e-400007 0E+999999 -> 1E-1000007 Subnormal +fmax2781 fma 1e-600000 1e-400008 0E+999999 -> 1E-1000008 Subnormal +fmax2782 fma 1e-600000 1e-400097 0E+999999 -> 1E-1000097 Subnormal +fmax2783 fma 1e-600000 1e-400098 0E+999999 -> 0E-1000097 Underflow Subnormal Inexact Rounded Clamped +precision: 999 +fmax2784 fma 1e-600000 1e-400997 0E+999999 -> 1E-1000997 Subnormal +fmax2785 fma 1e-600000 1e-400998 0E+999999 -> 0E-1000997 Underflow Subnormal Inexact Rounded Clamped + +-- test subnormals rounding +precision: 5 +maxExponent: 999 +minexponent: -999 +rounding: half_even + +fmax2801 fma 1.0000E-999 1 0E+999999 -> 1.0000E-999 +fmax2802 fma 1.000E-999 1e-1 0E+999999 -> 1.000E-1000 Subnormal +fmax2803 fma 1.00E-999 1e-2 0E+999999 -> 1.00E-1001 Subnormal +fmax2804 fma 1.0E-999 1e-3 0E+999999 -> 1.0E-1002 Subnormal +fmax2805 fma 1.0E-999 1e-4 0E+999999 -> 1E-1003 Subnormal Rounded +fmax2806 fma 1.3E-999 1e-4 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded +fmax2807 fma 1.5E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2808 fma 1.7E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2809 fma 2.3E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2810 fma 2.5E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2811 fma 2.7E-999 1e-4 0E+999999 -> 3E-1003 Underflow Subnormal Inexact Rounded +fmax2812 fma 1.49E-999 1e-4 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded +fmax2813 fma 1.50E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2814 fma 1.51E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2815 fma 2.49E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2816 fma 2.50E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2817 fma 2.51E-999 1e-4 0E+999999 -> 3E-1003 Underflow Subnormal Inexact Rounded + +fmax2818 fma 1E-999 1e-4 0E+999999 -> 1E-1003 Subnormal +fmax2819 fma 3E-999 1e-5 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2820 fma 5E-999 1e-5 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2821 fma 7E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded +fmax2822 fma 9E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded +fmax2823 fma 9.9E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded + +fmax2824 fma 1E-999 -1e-4 0E+999999 -> -1E-1003 Subnormal +fmax2825 fma 3E-999 -1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2826 fma -5E-999 1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2827 fma 7E-999 -1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded +fmax2828 fma -9E-999 1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded +fmax2829 fma 9.9E-999 -1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded +fmax2830 fma 3.0E-999 -1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped + +fmax2831 fma 1.0E-501 1e-501 0E+999999 -> 1.0E-1002 Subnormal +fmax2832 fma 2.0E-501 2e-501 0E+999999 -> 4.0E-1002 Subnormal +fmax2833 fma 4.0E-501 4e-501 0E+999999 -> 1.60E-1001 Subnormal +fmax2834 fma 10.0E-501 10e-501 0E+999999 -> 1.000E-1000 Subnormal +fmax2835 fma 30.0E-501 30e-501 0E+999999 -> 9.000E-1000 Subnormal +fmax2836 fma 40.0E-501 40e-501 0E+999999 -> 1.6000E-999 + +-- squares +fmax2840 fma 1E-502 1e-502 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2841 fma 1E-501 1e-501 0E+999999 -> 1E-1002 Subnormal +fmax2842 fma 2E-501 2e-501 0E+999999 -> 4E-1002 Subnormal +fmax2843 fma 4E-501 4e-501 0E+999999 -> 1.6E-1001 Subnormal +fmax2844 fma 10E-501 10e-501 0E+999999 -> 1.00E-1000 Subnormal +fmax2845 fma 30E-501 30e-501 0E+999999 -> 9.00E-1000 Subnormal +fmax2846 fma 40E-501 40e-501 0E+999999 -> 1.600E-999 + +-- cubes +fmax2850 fma 1E-670 1e-335 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2851 fma 1E-668 1e-334 0E+999999 -> 1E-1002 Subnormal +fmax2852 fma 4E-668 2e-334 0E+999999 -> 8E-1002 Subnormal +fmax2853 fma 9E-668 3e-334 0E+999999 -> 2.7E-1001 Subnormal +fmax2854 fma 16E-668 4e-334 0E+999999 -> 6.4E-1001 Subnormal +fmax2855 fma 25E-668 5e-334 0E+999999 -> 1.25E-1000 Subnormal +fmax2856 fma 10E-668 100e-334 0E+999999 -> 1.000E-999 + +-- test derived from result of 0.099 ** 999 at 15 digits with unlimited exponent +precision: 19 +fmax2860 fma 6636851557994578716E-520 6636851557994578716E-520 0E+999999 -> 4.40477986028551E-1003 Underflow Subnormal Inexact Rounded + +-- Long operand overflow may be a different path +precision: 3 +maxExponent: 999999 +minexponent: -999999 +fmax2870 fma 1 9.999E+999999 0E+999999 -> Infinity Inexact Overflow Rounded +fmax2871 fma 1 -9.999E+999999 0E+999999 -> -Infinity Inexact Overflow Rounded +fmax2872 fma 9.999E+999999 1 0E+999999 -> Infinity Inexact Overflow Rounded +fmax2873 fma -9.999E+999999 1 0E+999999 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +precision: 5 +maxexponent: 79 +minexponent: -79 +fmax2881 fma 1.2347E-40 1.2347E-40 0E+999999 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax2882 fma 1.234E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow +fmax2883 fma 1.23E-40 1.23E-40 0E+999999 -> 1.513E-80 Inexact Rounded Subnormal Underflow +fmax2884 fma 1.2E-40 1.2E-40 0E+999999 -> 1.44E-80 Subnormal +fmax2885 fma 1.2E-40 1.2E-41 0E+999999 -> 1.44E-81 Subnormal +fmax2886 fma 1.2E-40 1.2E-42 0E+999999 -> 1.4E-82 Subnormal Inexact Rounded Underflow +fmax2887 fma 1.2E-40 1.3E-42 0E+999999 -> 1.6E-82 Subnormal Inexact Rounded Underflow +fmax2888 fma 1.3E-40 1.3E-42 0E+999999 -> 1.7E-82 Subnormal Inexact Rounded Underflow +fmax2889 fma 1.3E-40 1.3E-43 0E+999999 -> 2E-83 Subnormal Inexact Rounded Underflow +fmax2890 fma 1.3E-41 1.3E-43 0E+999999 -> 0E-83 Clamped Subnormal Inexact Rounded Underflow + +fmax2891 fma 1.2345E-39 1.234E-40 0E+999999 -> 1.5234E-79 Inexact Rounded +fmax2892 fma 1.23456E-39 1.234E-40 0E+999999 -> 1.5234E-79 Inexact Rounded +fmax2893 fma 1.2345E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow +fmax2894 fma 1.23456E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow +fmax2895 fma 1.2345E-41 1.234E-40 0E+999999 -> 1.52E-81 Inexact Rounded Subnormal Underflow +fmax2896 fma 1.23456E-41 1.234E-40 0E+999999 -> 1.52E-81 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +fmax2900 fma 0.3000000000E-191 0.3000000000E-191 0E+999999 -> 9.00000000000000E-384 Subnormal Rounded +fmax2901 fma 0.3000000001E-191 0.3000000001E-191 0E+999999 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded +fmax2902 fma 9.999999999999999E-383 0.0999999999999 0E+999999 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded +fmax2903 fma 9.999999999999999E-383 0.09999999999999 0E+999999 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded +fmax2904 fma 9.999999999999999E-383 0.099999999999999 0E+999999 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded +fmax2905 fma 9.999999999999999E-383 0.0999999999999999 0E+999999 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded +-- prove operands are exact +fmax2906 fma 9.999999999999999E-383 1 0E+999999 -> 9.999999999999999E-383 +fmax2907 fma 1 0.09999999999999999 0E+999999 -> 0.09999999999999999 +-- the next rounds to Nmin +fmax2908 fma 9.999999999999999E-383 0.09999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax2909 fma 9.999999999999999E-383 0.099999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax2910 fma 9.999999999999999E-383 0.0999999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax2911 fma 9.999999999999999E-383 0.09999999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded + +-- Examples from SQL proposal (Krishna Kulkarni) +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 +fmax2921 fma 130E-2 120E-2 0E+999999 -> 1.5600 +fmax2922 fma 130E-2 12E-1 0E+999999 -> 1.560 +fmax2923 fma 130E-2 1E0 0E+999999 -> 1.30 + +-- Null tests +fmax2990 fma # 10 0E+999999 -> NaN Invalid_operation +fmax2991 fma 10 # 0E+999999 -> NaN Invalid_operation + +-- ADDITION TESTS ------------------------------------------------------ +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- [first group are 'quick confidence check'] +fmax3001 fma 1 1 1 -> 2 +fmax3002 fma 1 2 3 -> 5 +fmax3003 fma 1 '5.75' '3.3' -> 9.05 +fmax3004 fma 1 '5' '-3' -> 2 +fmax3005 fma 1 '-5' '-3' -> -8 +fmax3006 fma 1 '-7' '2.5' -> -4.5 +fmax3007 fma 1 '0.7' '0.3' -> 1.0 +fmax3008 fma 1 '1.25' '1.25' -> 2.50 +fmax3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' +fmax3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' + +fmax3011 fma 1 '0.4444444444' '0.5555555555' -> '1.00000000' Inexact Rounded +fmax3012 fma 1 '0.4444444440' '0.5555555555' -> '1.00000000' Inexact Rounded +fmax3013 fma 1 '0.4444444444' '0.5555555550' -> '0.999999999' Inexact Rounded +fmax3014 fma 1 '0.44444444449' '0' -> '0.444444444' Inexact Rounded +fmax3015 fma 1 '0.444444444499' '0' -> '0.444444444' Inexact Rounded +fmax3016 fma 1 '0.4444444444999' '0' -> '0.444444444' Inexact Rounded +fmax3017 fma 1 '0.4444444445000' '0' -> '0.444444445' Inexact Rounded +fmax3018 fma 1 '0.4444444445001' '0' -> '0.444444445' Inexact Rounded +fmax3019 fma 1 '0.444444444501' '0' -> '0.444444445' Inexact Rounded +fmax3020 fma 1 '0.44444444451' '0' -> '0.444444445' Inexact Rounded + +fmax3021 fma 1 0 1 -> 1 +fmax3022 fma 1 1 1 -> 2 +fmax3023 fma 1 2 1 -> 3 +fmax3024 fma 1 3 1 -> 4 +fmax3025 fma 1 4 1 -> 5 +fmax3026 fma 1 5 1 -> 6 +fmax3027 fma 1 6 1 -> 7 +fmax3028 fma 1 7 1 -> 8 +fmax3029 fma 1 8 1 -> 9 +fmax3030 fma 1 9 1 -> 10 + +-- some carrying effects +fmax3031 fma 1 '0.9998' '0.0000' -> '0.9998' +fmax3032 fma 1 '0.9998' '0.0001' -> '0.9999' +fmax3033 fma 1 '0.9998' '0.0002' -> '1.0000' +fmax3034 fma 1 '0.9998' '0.0003' -> '1.0001' + +fmax3035 fma 1 '70' '10000e+9' -> '1.00000000E+13' Inexact Rounded +fmax3036 fma 1 '700' '10000e+9' -> '1.00000000E+13' Inexact Rounded +fmax3037 fma 1 '7000' '10000e+9' -> '1.00000000E+13' Inexact Rounded +fmax3038 fma 1 '70000' '10000e+9' -> '1.00000001E+13' Inexact Rounded +fmax3039 fma 1 '700000' '10000e+9' -> '1.00000007E+13' Rounded + +-- symmetry: +fmax3040 fma 1 '10000e+9' '70' -> '1.00000000E+13' Inexact Rounded +fmax3041 fma 1 '10000e+9' '700' -> '1.00000000E+13' Inexact Rounded +fmax3042 fma 1 '10000e+9' '7000' -> '1.00000000E+13' Inexact Rounded +fmax3044 fma 1 '10000e+9' '70000' -> '1.00000001E+13' Inexact Rounded +fmax3045 fma 1 '10000e+9' '700000' -> '1.00000007E+13' Rounded + +-- same, higher precision +precision: 15 +fmax3046 fma 1 '10000e+9' '7' -> '10000000000007' +fmax3047 fma 1 '10000e+9' '70' -> '10000000000070' +fmax3048 fma 1 '10000e+9' '700' -> '10000000000700' +fmax3049 fma 1 '10000e+9' '7000' -> '10000000007000' +fmax3050 fma 1 '10000e+9' '70000' -> '10000000070000' +fmax3051 fma 1 '10000e+9' '700000' -> '10000000700000' +fmax3052 fma 1 '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +fmax3053 fma 1 '12' '7.00' -> '19.00' +fmax3054 fma 1 '1.3' '-1.07' -> '0.23' +fmax3055 fma 1 '1.3' '-1.30' -> '0.00' +fmax3056 fma 1 '1.3' '-2.07' -> '-0.77' +fmax3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' + +-- zero preservation +precision: 6 +fmax3060 fma 1 '10000e+9' '70000' -> '1.00000E+13' Inexact Rounded +fmax3061 fma 1 1 '0.0001' -> '1.0001' +fmax3062 fma 1 1 '0.00001' -> '1.00001' +fmax3063 fma 1 1 '0.000001' -> '1.00000' Inexact Rounded +fmax3064 fma 1 1 '0.0000001' -> '1.00000' Inexact Rounded +fmax3065 fma 1 1 '0.00000001' -> '1.00000' Inexact Rounded + +-- some funny zeros [in case of bad signum] +fmax3070 fma 1 1 0 -> 1 +fmax3071 fma 1 1 0. -> 1 +fmax3072 fma 1 1 .0 -> 1.0 +fmax3073 fma 1 1 0.0 -> 1.0 +fmax3074 fma 1 1 0.00 -> 1.00 +fmax3075 fma 1 0 1 -> 1 +fmax3076 fma 1 0. 1 -> 1 +fmax3077 fma 1 .0 1 -> 1.0 +fmax3078 fma 1 0.0 1 -> 1.0 +fmax3079 fma 1 0.00 1 -> 1.00 + +precision: 9 + +-- some carries +fmax3080 fma 1 999999998 1 -> 999999999 +fmax3081 fma 1 999999999 1 -> 1.00000000E+9 Rounded +fmax3082 fma 1 99999999 1 -> 100000000 +fmax3083 fma 1 9999999 1 -> 10000000 +fmax3084 fma 1 999999 1 -> 1000000 +fmax3085 fma 1 99999 1 -> 100000 +fmax3086 fma 1 9999 1 -> 10000 +fmax3087 fma 1 999 1 -> 1000 +fmax3088 fma 1 99 1 -> 100 +fmax3089 fma 1 9 1 -> 10 + + +-- more LHS swaps +fmax3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' +fmax3091 fma 1 '-56267E-6' 0 -> '-0.056267' +fmax3092 fma 1 '-56267E-5' 0 -> '-0.56267' +fmax3093 fma 1 '-56267E-4' 0 -> '-5.6267' +fmax3094 fma 1 '-56267E-3' 0 -> '-56.267' +fmax3095 fma 1 '-56267E-2' 0 -> '-562.67' +fmax3096 fma 1 '-56267E-1' 0 -> '-5626.7' +fmax3097 fma 1 '-56267E-0' 0 -> '-56267' +fmax3098 fma 1 '-5E-10' 0 -> '-5E-10' +fmax3099 fma 1 '-5E-7' 0 -> '-5E-7' +fmax3100 fma 1 '-5E-6' 0 -> '-0.000005' +fmax3101 fma 1 '-5E-5' 0 -> '-0.00005' +fmax3102 fma 1 '-5E-4' 0 -> '-0.0005' +fmax3103 fma 1 '-5E-1' 0 -> '-0.5' +fmax3104 fma 1 '-5E0' 0 -> '-5' +fmax3105 fma 1 '-5E1' 0 -> '-50' +fmax3106 fma 1 '-5E5' 0 -> '-500000' +fmax3107 fma 1 '-5E8' 0 -> '-500000000' +fmax3108 fma 1 '-5E9' 0 -> '-5.00000000E+9' Rounded +fmax3109 fma 1 '-5E10' 0 -> '-5.00000000E+10' Rounded +fmax3110 fma 1 '-5E11' 0 -> '-5.00000000E+11' Rounded +fmax3111 fma 1 '-5E100' 0 -> '-5.00000000E+100' Rounded + +-- more RHS swaps +fmax3113 fma 1 0 '-56267E-10' -> '-0.0000056267' +fmax3114 fma 1 0 '-56267E-6' -> '-0.056267' +fmax3116 fma 1 0 '-56267E-5' -> '-0.56267' +fmax3117 fma 1 0 '-56267E-4' -> '-5.6267' +fmax3119 fma 1 0 '-56267E-3' -> '-56.267' +fmax3120 fma 1 0 '-56267E-2' -> '-562.67' +fmax3121 fma 1 0 '-56267E-1' -> '-5626.7' +fmax3122 fma 1 0 '-56267E-0' -> '-56267' +fmax3123 fma 1 0 '-5E-10' -> '-5E-10' +fmax3124 fma 1 0 '-5E-7' -> '-5E-7' +fmax3125 fma 1 0 '-5E-6' -> '-0.000005' +fmax3126 fma 1 0 '-5E-5' -> '-0.00005' +fmax3127 fma 1 0 '-5E-4' -> '-0.0005' +fmax3128 fma 1 0 '-5E-1' -> '-0.5' +fmax3129 fma 1 0 '-5E0' -> '-5' +fmax3130 fma 1 0 '-5E1' -> '-50' +fmax3131 fma 1 0 '-5E5' -> '-500000' +fmax3132 fma 1 0 '-5E8' -> '-500000000' +fmax3133 fma 1 0 '-5E9' -> '-5.00000000E+9' Rounded +fmax3134 fma 1 0 '-5E10' -> '-5.00000000E+10' Rounded +fmax3135 fma 1 0 '-5E11' -> '-5.00000000E+11' Rounded +fmax3136 fma 1 0 '-5E100' -> '-5.00000000E+100' Rounded + +-- related +fmax3137 fma 1 1 '0E-12' -> '1.00000000' Rounded +fmax3138 fma 1 -1 '0E-12' -> '-1.00000000' Rounded +fmax3139 fma 1 '0E-12' 1 -> '1.00000000' Rounded +fmax3140 fma 1 '0E-12' -1 -> '-1.00000000' Rounded +fmax3141 fma 1 1E+4 0.0000 -> '10000.0000' +fmax3142 fma 1 1E+4 0.00000 -> '10000.0000' Rounded +fmax3143 fma 1 0.000 1E+5 -> '100000.000' +fmax3144 fma 1 0.0000 1E+5 -> '100000.000' Rounded + +-- [some of the next group are really constructor tests] +fmax3146 fma 1 '00.0' 0 -> '0.0' +fmax3147 fma 1 '0.00' 0 -> '0.00' +fmax3148 fma 1 0 '0.00' -> '0.00' +fmax3149 fma 1 0 '00.0' -> '0.0' +fmax3150 fma 1 '00.0' '0.00' -> '0.00' +fmax3151 fma 1 '0.00' '00.0' -> '0.00' +fmax3152 fma 1 '3' '.3' -> '3.3' +fmax3153 fma 1 '3.' '.3' -> '3.3' +fmax3154 fma 1 '3.0' '.3' -> '3.3' +fmax3155 fma 1 '3.00' '.3' -> '3.30' +fmax3156 fma 1 '3' '3' -> '6' +fmax3157 fma 1 '3' '+3' -> '6' +fmax3158 fma 1 '3' '-3' -> '0' +fmax3159 fma 1 '0.3' '-0.3' -> '0.0' +fmax3160 fma 1 '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +precision: 15 +fmax3161 fma 1 '1E+12' '-1' -> '999999999999' +fmax3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' +fmax3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' +fmax3164 fma 1 '-1' '1E+12' -> '999999999999' +fmax3165 fma 1 '7E+12' '-1' -> '6999999999999' +fmax3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' +fmax3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' +fmax3168 fma 1 '-1' '7E+12' -> '6999999999999' + +-- 123456789012345 123456789012345 1 23456789012345 +fmax3170 fma 1 '0.444444444444444' '0.555555555555563' -> '1.00000000000001' Inexact Rounded +fmax3171 fma 1 '0.444444444444444' '0.555555555555562' -> '1.00000000000001' Inexact Rounded +fmax3172 fma 1 '0.444444444444444' '0.555555555555561' -> '1.00000000000001' Inexact Rounded +fmax3173 fma 1 '0.444444444444444' '0.555555555555560' -> '1.00000000000000' Inexact Rounded +fmax3174 fma 1 '0.444444444444444' '0.555555555555559' -> '1.00000000000000' Inexact Rounded +fmax3175 fma 1 '0.444444444444444' '0.555555555555558' -> '1.00000000000000' Inexact Rounded +fmax3176 fma 1 '0.444444444444444' '0.555555555555557' -> '1.00000000000000' Inexact Rounded +fmax3177 fma 1 '0.444444444444444' '0.555555555555556' -> '1.00000000000000' Rounded +fmax3178 fma 1 '0.444444444444444' '0.555555555555555' -> '0.999999999999999' +fmax3179 fma 1 '0.444444444444444' '0.555555555555554' -> '0.999999999999998' +fmax3180 fma 1 '0.444444444444444' '0.555555555555553' -> '0.999999999999997' +fmax3181 fma 1 '0.444444444444444' '0.555555555555552' -> '0.999999999999996' +fmax3182 fma 1 '0.444444444444444' '0.555555555555551' -> '0.999999999999995' +fmax3183 fma 1 '0.444444444444444' '0.555555555555550' -> '0.999999999999994' + +-- and some more, including residue effects and different roundings +precision: 9 +rounding: half_up +fmax3200 fma 1 '123456789' 0 -> '123456789' +fmax3201 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded +fmax3202 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded +fmax3203 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded +fmax3204 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded +fmax3205 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded +fmax3206 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded +fmax3207 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded +fmax3208 fma 1 '123456789' 0.5 -> '123456790' Inexact Rounded +fmax3209 fma 1 '123456789' 0.500000001 -> '123456790' Inexact Rounded +fmax3210 fma 1 '123456789' 0.500001 -> '123456790' Inexact Rounded +fmax3211 fma 1 '123456789' 0.51 -> '123456790' Inexact Rounded +fmax3212 fma 1 '123456789' 0.6 -> '123456790' Inexact Rounded +fmax3213 fma 1 '123456789' 0.9 -> '123456790' Inexact Rounded +fmax3214 fma 1 '123456789' 0.99999 -> '123456790' Inexact Rounded +fmax3215 fma 1 '123456789' 0.999999999 -> '123456790' Inexact Rounded +fmax3216 fma 1 '123456789' 1 -> '123456790' +fmax3217 fma 1 '123456789' 1.000000001 -> '123456790' Inexact Rounded +fmax3218 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded +fmax3219 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded + +rounding: half_even +fmax3220 fma 1 '123456789' 0 -> '123456789' +fmax3221 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded +fmax3222 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded +fmax3223 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded +fmax3224 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded +fmax3225 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded +fmax3226 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded +fmax3227 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded +fmax3228 fma 1 '123456789' 0.5 -> '123456790' Inexact Rounded +fmax3229 fma 1 '123456789' 0.500000001 -> '123456790' Inexact Rounded +fmax3230 fma 1 '123456789' 0.500001 -> '123456790' Inexact Rounded +fmax3231 fma 1 '123456789' 0.51 -> '123456790' Inexact Rounded +fmax3232 fma 1 '123456789' 0.6 -> '123456790' Inexact Rounded +fmax3233 fma 1 '123456789' 0.9 -> '123456790' Inexact Rounded +fmax3234 fma 1 '123456789' 0.99999 -> '123456790' Inexact Rounded +fmax3235 fma 1 '123456789' 0.999999999 -> '123456790' Inexact Rounded +fmax3236 fma 1 '123456789' 1 -> '123456790' +fmax3237 fma 1 '123456789' 1.00000001 -> '123456790' Inexact Rounded +fmax3238 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded +fmax3239 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded +-- critical few with even bottom digit... +fmax3240 fma 1 '123456788' 0.499999999 -> '123456788' Inexact Rounded +fmax3241 fma 1 '123456788' 0.5 -> '123456788' Inexact Rounded +fmax3242 fma 1 '123456788' 0.500000001 -> '123456789' Inexact Rounded + +rounding: down +fmax3250 fma 1 '123456789' 0 -> '123456789' +fmax3251 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded +fmax3252 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded +fmax3253 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded +fmax3254 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded +fmax3255 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded +fmax3256 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded +fmax3257 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded +fmax3258 fma 1 '123456789' 0.5 -> '123456789' Inexact Rounded +fmax3259 fma 1 '123456789' 0.500000001 -> '123456789' Inexact Rounded +fmax3260 fma 1 '123456789' 0.500001 -> '123456789' Inexact Rounded +fmax3261 fma 1 '123456789' 0.51 -> '123456789' Inexact Rounded +fmax3262 fma 1 '123456789' 0.6 -> '123456789' Inexact Rounded +fmax3263 fma 1 '123456789' 0.9 -> '123456789' Inexact Rounded +fmax3264 fma 1 '123456789' 0.99999 -> '123456789' Inexact Rounded +fmax3265 fma 1 '123456789' 0.999999999 -> '123456789' Inexact Rounded +fmax3266 fma 1 '123456789' 1 -> '123456790' +fmax3267 fma 1 '123456789' 1.00000001 -> '123456790' Inexact Rounded +fmax3268 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded +fmax3269 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded + +-- input preparation tests (operands should not be rounded) +precision: 3 +rounding: half_up + +fmax3270 fma 1 '12345678900000' 9999999999999 -> '2.23E+13' Inexact Rounded +fmax3271 fma 1 '9999999999999' 12345678900000 -> '2.23E+13' Inexact Rounded + +fmax3272 fma 1 '12E+3' '3444' -> '1.54E+4' Inexact Rounded +fmax3273 fma 1 '12E+3' '3446' -> '1.54E+4' Inexact Rounded +fmax3274 fma 1 '12E+3' '3449.9' -> '1.54E+4' Inexact Rounded +fmax3275 fma 1 '12E+3' '3450.0' -> '1.55E+4' Inexact Rounded +fmax3276 fma 1 '12E+3' '3450.1' -> '1.55E+4' Inexact Rounded +fmax3277 fma 1 '12E+3' '3454' -> '1.55E+4' Inexact Rounded +fmax3278 fma 1 '12E+3' '3456' -> '1.55E+4' Inexact Rounded + +fmax3281 fma 1 '3444' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3282 fma 1 '3446' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3283 fma 1 '3449.9' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3284 fma 1 '3450.0' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3285 fma 1 '3450.1' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3286 fma 1 '3454' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3287 fma 1 '3456' '12E+3' -> '1.55E+4' Inexact Rounded + +rounding: half_down +fmax3291 fma 1 '3444' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3292 fma 1 '3446' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3293 fma 1 '3449.9' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3294 fma 1 '3450.0' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3295 fma 1 '3450.1' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3296 fma 1 '3454' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3297 fma 1 '3456' '12E+3' -> '1.55E+4' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +fmax3301 fma 1 -1 1 -> 0 +fmax3302 fma 1 0 1 -> 1 +fmax3303 fma 1 1 1 -> 2 +fmax3304 fma 1 12 1 -> 13 +fmax3305 fma 1 98 1 -> 99 +fmax3306 fma 1 99 1 -> 100 +fmax3307 fma 1 100 1 -> 101 +fmax3308 fma 1 101 1 -> 102 +fmax3309 fma 1 -1 -1 -> -2 +fmax3310 fma 1 0 -1 -> -1 +fmax3311 fma 1 1 -1 -> 0 +fmax3312 fma 1 12 -1 -> 11 +fmax3313 fma 1 98 -1 -> 97 +fmax3314 fma 1 99 -1 -> 98 +fmax3315 fma 1 100 -1 -> 99 +fmax3316 fma 1 101 -1 -> 100 + +fmax3321 fma 1 -0.01 0.01 -> 0.00 +fmax3322 fma 1 0.00 0.01 -> 0.01 +fmax3323 fma 1 0.01 0.01 -> 0.02 +fmax3324 fma 1 0.12 0.01 -> 0.13 +fmax3325 fma 1 0.98 0.01 -> 0.99 +fmax3326 fma 1 0.99 0.01 -> 1.00 +fmax3327 fma 1 1.00 0.01 -> 1.01 +fmax3328 fma 1 1.01 0.01 -> 1.02 +fmax3329 fma 1 -0.01 -0.01 -> -0.02 +fmax3330 fma 1 0.00 -0.01 -> -0.01 +fmax3331 fma 1 0.01 -0.01 -> 0.00 +fmax3332 fma 1 0.12 -0.01 -> 0.11 +fmax3333 fma 1 0.98 -0.01 -> 0.97 +fmax3334 fma 1 0.99 -0.01 -> 0.98 +fmax3335 fma 1 1.00 -0.01 -> 0.99 +fmax3336 fma 1 1.01 -0.01 -> 1.00 + +-- some more cases where fma 1 ing 0 affects the coefficient +precision: 9 +fmax3340 fma 1 1E+3 0 -> 1000 +fmax3341 fma 1 1E+8 0 -> 100000000 +fmax3342 fma 1 1E+9 0 -> 1.00000000E+9 Rounded +fmax3343 fma 1 1E+10 0 -> 1.00000000E+10 Rounded +-- which simply follow from these cases ... +fmax3344 fma 1 1E+3 1 -> 1001 +fmax3345 fma 1 1E+8 1 -> 100000001 +fmax3346 fma 1 1E+9 1 -> 1.00000000E+9 Inexact Rounded +fmax3347 fma 1 1E+10 1 -> 1.00000000E+10 Inexact Rounded +fmax3348 fma 1 1E+3 7 -> 1007 +fmax3349 fma 1 1E+8 7 -> 100000007 +fmax3350 fma 1 1E+9 7 -> 1.00000001E+9 Inexact Rounded +fmax3351 fma 1 1E+10 7 -> 1.00000000E+10 Inexact Rounded + +-- tryzeros cases +precision: 7 +rounding: half_up +maxExponent: 92 +minexponent: -92 +fmax3361 fma 1 0E+50 10000E+1 -> 1.0000E+5 +fmax3362 fma 1 10000E+1 0E-50 -> 100000.0 Rounded +fmax3363 fma 1 10000E+1 10000E-50 -> 100000.0 Rounded Inexact +fmax3364 fma 1 9.999999E+92 -9.999999E+92 -> 0E+86 + +-- a curiosity from JSR 13 testing +rounding: half_down +precision: 10 +fmax3370 fma 1 99999999 81512 -> 100081511 +precision: 6 +fmax3371 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact +rounding: half_up +precision: 10 +fmax3372 fma 1 99999999 81512 -> 100081511 +precision: 6 +fmax3373 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact +rounding: half_even +precision: 10 +fmax3374 fma 1 99999999 81512 -> 100081511 +precision: 6 +fmax3375 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact + +-- ulp replacement tests +precision: 9 +maxexponent: 999999 +minexponent: -999999 +fmax3400 fma 1 1 77e-7 -> 1.0000077 +fmax3401 fma 1 1 77e-8 -> 1.00000077 +fmax3402 fma 1 1 77e-9 -> 1.00000008 Inexact Rounded +fmax3403 fma 1 1 77e-10 -> 1.00000001 Inexact Rounded +fmax3404 fma 1 1 77e-11 -> 1.00000000 Inexact Rounded +fmax3405 fma 1 1 77e-12 -> 1.00000000 Inexact Rounded +fmax3406 fma 1 1 77e-999 -> 1.00000000 Inexact Rounded +fmax3407 fma 1 1 77e-999999 -> 1.00000000 Inexact Rounded + +fmax3410 fma 1 10 77e-7 -> 10.0000077 +fmax3411 fma 1 10 77e-8 -> 10.0000008 Inexact Rounded +fmax3412 fma 1 10 77e-9 -> 10.0000001 Inexact Rounded +fmax3413 fma 1 10 77e-10 -> 10.0000000 Inexact Rounded +fmax3414 fma 1 10 77e-11 -> 10.0000000 Inexact Rounded +fmax3415 fma 1 10 77e-12 -> 10.0000000 Inexact Rounded +fmax3416 fma 1 10 77e-999 -> 10.0000000 Inexact Rounded +fmax3417 fma 1 10 77e-999999 -> 10.0000000 Inexact Rounded + +fmax3420 fma 1 77e-7 1 -> 1.0000077 +fmax3421 fma 1 77e-8 1 -> 1.00000077 +fmax3422 fma 1 77e-9 1 -> 1.00000008 Inexact Rounded +fmax3423 fma 1 77e-10 1 -> 1.00000001 Inexact Rounded +fmax3424 fma 1 77e-11 1 -> 1.00000000 Inexact Rounded +fmax3425 fma 1 77e-12 1 -> 1.00000000 Inexact Rounded +fmax3426 fma 1 77e-999 1 -> 1.00000000 Inexact Rounded +fmax3427 fma 1 77e-999999 1 -> 1.00000000 Inexact Rounded + +fmax3430 fma 1 77e-7 10 -> 10.0000077 +fmax3431 fma 1 77e-8 10 -> 10.0000008 Inexact Rounded +fmax3432 fma 1 77e-9 10 -> 10.0000001 Inexact Rounded +fmax3433 fma 1 77e-10 10 -> 10.0000000 Inexact Rounded +fmax3434 fma 1 77e-11 10 -> 10.0000000 Inexact Rounded +fmax3435 fma 1 77e-12 10 -> 10.0000000 Inexact Rounded +fmax3436 fma 1 77e-999 10 -> 10.0000000 Inexact Rounded +fmax3437 fma 1 77e-999999 10 -> 10.0000000 Inexact Rounded + +-- negative ulps +fmax3440 fma 1 1 -77e-7 -> 0.9999923 +fmax3441 fma 1 1 -77e-8 -> 0.99999923 +fmax3442 fma 1 1 -77e-9 -> 0.999999923 +fmax3443 fma 1 1 -77e-10 -> 0.999999992 Inexact Rounded +fmax3444 fma 1 1 -77e-11 -> 0.999999999 Inexact Rounded +fmax3445 fma 1 1 -77e-12 -> 1.00000000 Inexact Rounded +fmax3446 fma 1 1 -77e-999 -> 1.00000000 Inexact Rounded +fmax3447 fma 1 1 -77e-999999 -> 1.00000000 Inexact Rounded + +fmax3450 fma 1 10 -77e-7 -> 9.9999923 +fmax3451 fma 1 10 -77e-8 -> 9.99999923 +fmax3452 fma 1 10 -77e-9 -> 9.99999992 Inexact Rounded +fmax3453 fma 1 10 -77e-10 -> 9.99999999 Inexact Rounded +fmax3454 fma 1 10 -77e-11 -> 10.0000000 Inexact Rounded +fmax3455 fma 1 10 -77e-12 -> 10.0000000 Inexact Rounded +fmax3456 fma 1 10 -77e-999 -> 10.0000000 Inexact Rounded +fmax3457 fma 1 10 -77e-999999 -> 10.0000000 Inexact Rounded + +fmax3460 fma 1 -77e-7 1 -> 0.9999923 +fmax3461 fma 1 -77e-8 1 -> 0.99999923 +fmax3462 fma 1 -77e-9 1 -> 0.999999923 +fmax3463 fma 1 -77e-10 1 -> 0.999999992 Inexact Rounded +fmax3464 fma 1 -77e-11 1 -> 0.999999999 Inexact Rounded +fmax3465 fma 1 -77e-12 1 -> 1.00000000 Inexact Rounded +fmax3466 fma 1 -77e-999 1 -> 1.00000000 Inexact Rounded +fmax3467 fma 1 -77e-999999 1 -> 1.00000000 Inexact Rounded + +fmax3470 fma 1 -77e-7 10 -> 9.9999923 +fmax3471 fma 1 -77e-8 10 -> 9.99999923 +fmax3472 fma 1 -77e-9 10 -> 9.99999992 Inexact Rounded +fmax3473 fma 1 -77e-10 10 -> 9.99999999 Inexact Rounded +fmax3474 fma 1 -77e-11 10 -> 10.0000000 Inexact Rounded +fmax3475 fma 1 -77e-12 10 -> 10.0000000 Inexact Rounded +fmax3476 fma 1 -77e-999 10 -> 10.0000000 Inexact Rounded +fmax3477 fma 1 -77e-999999 10 -> 10.0000000 Inexact Rounded + +-- negative ulps +fmax3480 fma 1 -1 77e-7 -> -0.9999923 +fmax3481 fma 1 -1 77e-8 -> -0.99999923 +fmax3482 fma 1 -1 77e-9 -> -0.999999923 +fmax3483 fma 1 -1 77e-10 -> -0.999999992 Inexact Rounded +fmax3484 fma 1 -1 77e-11 -> -0.999999999 Inexact Rounded +fmax3485 fma 1 -1 77e-12 -> -1.00000000 Inexact Rounded +fmax3486 fma 1 -1 77e-999 -> -1.00000000 Inexact Rounded +fmax3487 fma 1 -1 77e-999999 -> -1.00000000 Inexact Rounded + +fmax3490 fma 1 -10 77e-7 -> -9.9999923 +fmax3491 fma 1 -10 77e-8 -> -9.99999923 +fmax3492 fma 1 -10 77e-9 -> -9.99999992 Inexact Rounded +fmax3493 fma 1 -10 77e-10 -> -9.99999999 Inexact Rounded +fmax3494 fma 1 -10 77e-11 -> -10.0000000 Inexact Rounded +fmax3495 fma 1 -10 77e-12 -> -10.0000000 Inexact Rounded +fmax3496 fma 1 -10 77e-999 -> -10.0000000 Inexact Rounded +fmax3497 fma 1 -10 77e-999999 -> -10.0000000 Inexact Rounded + +fmax3500 fma 1 77e-7 -1 -> -0.9999923 +fmax3501 fma 1 77e-8 -1 -> -0.99999923 +fmax3502 fma 1 77e-9 -1 -> -0.999999923 +fmax3503 fma 1 77e-10 -1 -> -0.999999992 Inexact Rounded +fmax3504 fma 1 77e-11 -1 -> -0.999999999 Inexact Rounded +fmax3505 fma 1 77e-12 -1 -> -1.00000000 Inexact Rounded +fmax3506 fma 1 77e-999 -1 -> -1.00000000 Inexact Rounded +fmax3507 fma 1 77e-999999 -1 -> -1.00000000 Inexact Rounded + +fmax3510 fma 1 77e-7 -10 -> -9.9999923 +fmax3511 fma 1 77e-8 -10 -> -9.99999923 +fmax3512 fma 1 77e-9 -10 -> -9.99999992 Inexact Rounded +fmax3513 fma 1 77e-10 -10 -> -9.99999999 Inexact Rounded +fmax3514 fma 1 77e-11 -10 -> -10.0000000 Inexact Rounded +fmax3515 fma 1 77e-12 -10 -> -10.0000000 Inexact Rounded +fmax3516 fma 1 77e-999 -10 -> -10.0000000 Inexact Rounded +fmax3517 fma 1 77e-999999 -10 -> -10.0000000 Inexact Rounded + + +-- long operands +maxexponent: 999 +minexponent: -999 +precision: 9 +fmax3521 fma 1 12345678000 0 -> 1.23456780E+10 Rounded +fmax3522 fma 1 0 12345678000 -> 1.23456780E+10 Rounded +fmax3523 fma 1 1234567800 0 -> 1.23456780E+9 Rounded +fmax3524 fma 1 0 1234567800 -> 1.23456780E+9 Rounded +fmax3525 fma 1 1234567890 0 -> 1.23456789E+9 Rounded +fmax3526 fma 1 0 1234567890 -> 1.23456789E+9 Rounded +fmax3527 fma 1 1234567891 0 -> 1.23456789E+9 Inexact Rounded +fmax3528 fma 1 0 1234567891 -> 1.23456789E+9 Inexact Rounded +fmax3529 fma 1 12345678901 0 -> 1.23456789E+10 Inexact Rounded +fmax3530 fma 1 0 12345678901 -> 1.23456789E+10 Inexact Rounded +fmax3531 fma 1 1234567896 0 -> 1.23456790E+9 Inexact Rounded +fmax3532 fma 1 0 1234567896 -> 1.23456790E+9 Inexact Rounded + +precision: 15 +-- still checking +fmax3541 fma 1 12345678000 0 -> 12345678000 +fmax3542 fma 1 0 12345678000 -> 12345678000 +fmax3543 fma 1 1234567800 0 -> 1234567800 +fmax3544 fma 1 0 1234567800 -> 1234567800 +fmax3545 fma 1 1234567890 0 -> 1234567890 +fmax3546 fma 1 0 1234567890 -> 1234567890 +fmax3547 fma 1 1234567891 0 -> 1234567891 +fmax3548 fma 1 0 1234567891 -> 1234567891 +fmax3549 fma 1 12345678901 0 -> 12345678901 +fmax3550 fma 1 0 12345678901 -> 12345678901 +fmax3551 fma 1 1234567896 0 -> 1234567896 +fmax3552 fma 1 0 1234567896 -> 1234567896 + +-- verify a query +precision: 16 +maxExponent: +394 +minExponent: -393 +rounding: down +fmax3561 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded +fmax3562 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded +-- and using decimal64 bounds... +precision: 16 +maxExponent: +384 +minExponent: -383 +rounding: down +fmax3563 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded +fmax3564 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded + + +-- some more residue effects with extreme rounding +precision: 9 +rounding: half_up +fmax3601 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded +rounding: half_even +fmax3602 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded +rounding: half_down +fmax3603 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded +rounding: floor +fmax3604 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded +rounding: ceiling +fmax3605 fma 1 123456789 0.000001 -> 123456790 Inexact Rounded +rounding: up +fmax3606 fma 1 123456789 0.000001 -> 123456790 Inexact Rounded +rounding: down +fmax3607 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded + +rounding: half_up +fmax3611 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: half_even +fmax3612 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: half_down +fmax3613 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: floor +fmax3614 fma 1 123456789 -0.000001 -> 123456788 Inexact Rounded +rounding: ceiling +fmax3615 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: up +fmax3616 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: down +fmax3617 fma 1 123456789 -0.000001 -> 123456788 Inexact Rounded + +rounding: half_up +fmax3621 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded +rounding: half_even +fmax3622 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded +rounding: half_down +fmax3623 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded +rounding: floor +fmax3624 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded +rounding: ceiling +fmax3625 fma 1 123456789 0.499999 -> 123456790 Inexact Rounded +rounding: up +fmax3626 fma 1 123456789 0.499999 -> 123456790 Inexact Rounded +rounding: down +fmax3627 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded + +rounding: half_up +fmax3631 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: half_even +fmax3632 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: half_down +fmax3633 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: floor +fmax3634 fma 1 123456789 -0.499999 -> 123456788 Inexact Rounded +rounding: ceiling +fmax3635 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: up +fmax3636 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: down +fmax3637 fma 1 123456789 -0.499999 -> 123456788 Inexact Rounded + +rounding: half_up +fmax3641 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: half_even +fmax3642 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: half_down +fmax3643 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: floor +fmax3644 fma 1 123456789 0.500001 -> 123456789 Inexact Rounded +rounding: ceiling +fmax3645 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: up +fmax3646 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: down +fmax3647 fma 1 123456789 0.500001 -> 123456789 Inexact Rounded + +rounding: half_up +fmax3651 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded +rounding: half_even +fmax3652 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded +rounding: half_down +fmax3653 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded +rounding: floor +fmax3654 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded +rounding: ceiling +fmax3655 fma 1 123456789 -0.500001 -> 123456789 Inexact Rounded +rounding: up +fmax3656 fma 1 123456789 -0.500001 -> 123456789 Inexact Rounded +rounding: down +fmax3657 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded + +-- long operand triangle +rounding: half_up +precision: 37 +fmax3660 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337114834538 +precision: 36 +fmax3661 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711483454 Inexact Rounded +precision: 35 +fmax3662 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371148345 Inexact Rounded +precision: 34 +fmax3663 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337114835 Inexact Rounded +precision: 33 +fmax3664 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711483 Inexact Rounded +precision: 32 +fmax3665 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371148 Inexact Rounded +precision: 31 +fmax3666 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337115 Inexact Rounded +precision: 30 +fmax3667 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711 Inexact Rounded +precision: 29 +fmax3668 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371 Inexact Rounded +precision: 28 +fmax3669 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337 Inexact Rounded +precision: 27 +fmax3670 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892234 Inexact Rounded +precision: 26 +fmax3671 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223 Inexact Rounded +precision: 25 +fmax3672 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922 Inexact Rounded +precision: 24 +fmax3673 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892 Inexact Rounded +precision: 23 +fmax3674 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389 Inexact Rounded +precision: 22 +fmax3675 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023639 Inexact Rounded +precision: 21 +fmax3676 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102364 Inexact Rounded +precision: 20 +fmax3677 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236 Inexact Rounded +precision: 19 +fmax3678 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211024 Inexact Rounded +precision: 18 +fmax3679 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102 Inexact Rounded +precision: 17 +fmax3680 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110 Inexact Rounded +precision: 16 +fmax3681 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211 Inexact Rounded +precision: 15 +fmax3682 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221 Inexact Rounded +precision: 14 +fmax3683 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422 Inexact Rounded +precision: 13 +fmax3684 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42 Inexact Rounded +precision: 12 +fmax3685 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4 Inexact Rounded +precision: 11 +fmax3686 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166 Inexact Rounded +precision: 10 +fmax3687 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847117417E+10 Inexact Rounded +precision: 9 +fmax3688 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.84711742E+10 Inexact Rounded +precision: 8 +fmax3689 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8471174E+10 Inexact Rounded +precision: 7 +fmax3690 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847117E+10 Inexact Rounded +precision: 6 +fmax3691 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.84712E+10 Inexact Rounded +precision: 5 +fmax3692 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8471E+10 Inexact Rounded +precision: 4 +fmax3693 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847E+10 Inexact Rounded +precision: 3 +fmax3694 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.85E+10 Inexact Rounded +precision: 2 +fmax3695 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8E+10 Inexact Rounded +precision: 1 +fmax3696 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 1E+11 Inexact Rounded + +-- more zeros, etc. +rounding: half_up +precision: 9 + +fmax3701 fma 1 5.00 1.00E-3 -> 5.00100 +fmax3702 fma 1 00.00 0.000 -> 0.000 +fmax3703 fma 1 00.00 0E-3 -> 0.000 +fmax3704 fma 1 0E-3 00.00 -> 0.000 + +fmax3710 fma 1 0E+3 00.00 -> 0.00 +fmax3711 fma 1 0E+3 00.0 -> 0.0 +fmax3712 fma 1 0E+3 00. -> 0 +fmax3713 fma 1 0E+3 00.E+1 -> 0E+1 +fmax3714 fma 1 0E+3 00.E+2 -> 0E+2 +fmax3715 fma 1 0E+3 00.E+3 -> 0E+3 +fmax3716 fma 1 0E+3 00.E+4 -> 0E+3 +fmax3717 fma 1 0E+3 00.E+5 -> 0E+3 +fmax3718 fma 1 0E+3 -00.0 -> 0.0 +fmax3719 fma 1 0E+3 -00. -> 0 +fmax3731 fma 1 0E+3 -00.E+1 -> 0E+1 + +fmax3720 fma 1 00.00 0E+3 -> 0.00 +fmax3721 fma 1 00.0 0E+3 -> 0.0 +fmax3722 fma 1 00. 0E+3 -> 0 +fmax3723 fma 1 00.E+1 0E+3 -> 0E+1 +fmax3724 fma 1 00.E+2 0E+3 -> 0E+2 +fmax3725 fma 1 00.E+3 0E+3 -> 0E+3 +fmax3726 fma 1 00.E+4 0E+3 -> 0E+3 +fmax3727 fma 1 00.E+5 0E+3 -> 0E+3 +fmax3728 fma 1 -00.00 0E+3 -> 0.00 +fmax3729 fma 1 -00.0 0E+3 -> 0.0 +fmax3730 fma 1 -00. 0E+3 -> 0 + +fmax3732 fma 1 0 0 -> 0 +fmax3733 fma 1 0 -0 -> 0 +fmax3734 fma 1 -0 0 -> 0 +fmax3735 fma 1 -0 -0 -> -0 -- IEEE 854 special case + +fmax3736 fma 1 1 -1 -> 0 +fmax3737 fma 1 -1 -1 -> -2 +fmax3738 fma 1 1 1 -> 2 +fmax3739 fma 1 -1 1 -> 0 + +fmax3741 fma 1 0 -1 -> -1 +fmax3742 fma 1 -0 -1 -> -1 +fmax3743 fma 1 0 1 -> 1 +fmax3744 fma 1 -0 1 -> 1 +fmax3745 fma 1 -1 0 -> -1 +fmax3746 fma 1 -1 -0 -> -1 +fmax3747 fma 1 1 0 -> 1 +fmax3748 fma 1 1 -0 -> 1 + +fmax3751 fma 1 0.0 -1 -> -1.0 +fmax3752 fma 1 -0.0 -1 -> -1.0 +fmax3753 fma 1 0.0 1 -> 1.0 +fmax3754 fma 1 -0.0 1 -> 1.0 +fmax3755 fma 1 -1.0 0 -> -1.0 +fmax3756 fma 1 -1.0 -0 -> -1.0 +fmax3757 fma 1 1.0 0 -> 1.0 +fmax3758 fma 1 1.0 -0 -> 1.0 + +fmax3761 fma 1 0 -1.0 -> -1.0 +fmax3762 fma 1 -0 -1.0 -> -1.0 +fmax3763 fma 1 0 1.0 -> 1.0 +fmax3764 fma 1 -0 1.0 -> 1.0 +fmax3765 fma 1 -1 0.0 -> -1.0 +fmax3766 fma 1 -1 -0.0 -> -1.0 +fmax3767 fma 1 1 0.0 -> 1.0 +fmax3768 fma 1 1 -0.0 -> 1.0 + +fmax3771 fma 1 0.0 -1.0 -> -1.0 +fmax3772 fma 1 -0.0 -1.0 -> -1.0 +fmax3773 fma 1 0.0 1.0 -> 1.0 +fmax3774 fma 1 -0.0 1.0 -> 1.0 +fmax3775 fma 1 -1.0 0.0 -> -1.0 +fmax3776 fma 1 -1.0 -0.0 -> -1.0 +fmax3777 fma 1 1.0 0.0 -> 1.0 +fmax3778 fma 1 1.0 -0.0 -> 1.0 + +-- Specials +fmax3780 fma 1 -Inf -Inf -> -Infinity +fmax3781 fma 1 -Inf -1000 -> -Infinity +fmax3782 fma 1 -Inf -1 -> -Infinity +fmax3783 fma 1 -Inf -0 -> -Infinity +fmax3784 fma 1 -Inf 0 -> -Infinity +fmax3785 fma 1 -Inf 1 -> -Infinity +fmax3786 fma 1 -Inf 1000 -> -Infinity +fmax3787 fma 1 -1000 -Inf -> -Infinity +fmax3788 fma 1 -Inf -Inf -> -Infinity +fmax3789 fma 1 -1 -Inf -> -Infinity +fmax3790 fma 1 -0 -Inf -> -Infinity +fmax3791 fma 1 0 -Inf -> -Infinity +fmax3792 fma 1 1 -Inf -> -Infinity +fmax3793 fma 1 1000 -Inf -> -Infinity +fmax3794 fma 1 Inf -Inf -> NaN Invalid_operation + +fmax3800 fma 1 Inf -Inf -> NaN Invalid_operation +fmax3801 fma 1 Inf -1000 -> Infinity +fmax3802 fma 1 Inf -1 -> Infinity +fmax3803 fma 1 Inf -0 -> Infinity +fmax3804 fma 1 Inf 0 -> Infinity +fmax3805 fma 1 Inf 1 -> Infinity +fmax3806 fma 1 Inf 1000 -> Infinity +fmax3807 fma 1 Inf Inf -> Infinity +fmax3808 fma 1 -1000 Inf -> Infinity +fmax3809 fma 1 -Inf Inf -> NaN Invalid_operation +fmax3810 fma 1 -1 Inf -> Infinity +fmax3811 fma 1 -0 Inf -> Infinity +fmax3812 fma 1 0 Inf -> Infinity +fmax3813 fma 1 1 Inf -> Infinity +fmax3814 fma 1 1000 Inf -> Infinity +fmax3815 fma 1 Inf Inf -> Infinity + +fmax3821 fma 1 NaN -Inf -> NaN +fmax3822 fma 1 NaN -1000 -> NaN +fmax3823 fma 1 NaN -1 -> NaN +fmax3824 fma 1 NaN -0 -> NaN +fmax3825 fma 1 NaN 0 -> NaN +fmax3826 fma 1 NaN 1 -> NaN +fmax3827 fma 1 NaN 1000 -> NaN +fmax3828 fma 1 NaN Inf -> NaN +fmax3829 fma 1 NaN NaN -> NaN +fmax3830 fma 1 -Inf NaN -> NaN +fmax3831 fma 1 -1000 NaN -> NaN +fmax3832 fma 1 -1 NaN -> NaN +fmax3833 fma 1 -0 NaN -> NaN +fmax3834 fma 1 0 NaN -> NaN +fmax3835 fma 1 1 NaN -> NaN +fmax3836 fma 1 1000 NaN -> NaN +fmax3837 fma 1 Inf NaN -> NaN + +fmax3841 fma 1 sNaN -Inf -> NaN Invalid_operation +fmax3842 fma 1 sNaN -1000 -> NaN Invalid_operation +fmax3843 fma 1 sNaN -1 -> NaN Invalid_operation +fmax3844 fma 1 sNaN -0 -> NaN Invalid_operation +fmax3845 fma 1 sNaN 0 -> NaN Invalid_operation +fmax3846 fma 1 sNaN 1 -> NaN Invalid_operation +fmax3847 fma 1 sNaN 1000 -> NaN Invalid_operation +fmax3848 fma 1 sNaN NaN -> NaN Invalid_operation +fmax3849 fma 1 sNaN sNaN -> NaN Invalid_operation +fmax3850 fma 1 NaN sNaN -> NaN Invalid_operation +fmax3851 fma 1 -Inf sNaN -> NaN Invalid_operation +fmax3852 fma 1 -1000 sNaN -> NaN Invalid_operation +fmax3853 fma 1 -1 sNaN -> NaN Invalid_operation +fmax3854 fma 1 -0 sNaN -> NaN Invalid_operation +fmax3855 fma 1 0 sNaN -> NaN Invalid_operation +fmax3856 fma 1 1 sNaN -> NaN Invalid_operation +fmax3857 fma 1 1000 sNaN -> NaN Invalid_operation +fmax3858 fma 1 Inf sNaN -> NaN Invalid_operation +fmax3859 fma 1 NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +fmax3861 fma 1 NaN1 -Inf -> NaN1 +fmax3862 fma 1 +NaN2 -1000 -> NaN2 +fmax3863 fma 1 NaN3 1000 -> NaN3 +fmax3864 fma 1 NaN4 Inf -> NaN4 +fmax3865 fma 1 NaN5 +NaN6 -> NaN5 +fmax3866 fma 1 -Inf NaN7 -> NaN7 +fmax3867 fma 1 -1000 NaN8 -> NaN8 +fmax3868 fma 1 1000 NaN9 -> NaN9 +fmax3869 fma 1 Inf +NaN10 -> NaN10 +fmax3871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation +fmax3872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation +fmax3873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation +fmax3874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation +fmax3875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation +fmax3876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation +fmax3877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation +fmax3878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation +fmax3879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation +fmax3880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation +fmax3881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation +fmax3882 fma 1 -NaN26 NaN28 -> -NaN26 +fmax3883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation +fmax3884 fma 1 1000 -NaN30 -> -NaN30 +fmax3885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- overflow, underflow and subnormal tests +maxexponent: 999999 +minexponent: -999999 +precision: 9 +fmax3890 fma 1 1E+999999 9E+999999 -> Infinity Overflow Inexact Rounded +fmax3891 fma 1 9E+999999 1E+999999 -> Infinity Overflow Inexact Rounded +fmax3892 fma 1 -1.1E-999999 1E-999999 -> -1E-1000000 Subnormal +fmax3893 fma 1 1E-999999 -1.1e-999999 -> -1E-1000000 Subnormal +fmax3894 fma 1 -1.0001E-999999 1E-999999 -> -1E-1000003 Subnormal +fmax3895 fma 1 1E-999999 -1.0001e-999999 -> -1E-1000003 Subnormal +fmax3896 fma 1 -1E+999999 -9E+999999 -> -Infinity Overflow Inexact Rounded +fmax3897 fma 1 -9E+999999 -1E+999999 -> -Infinity Overflow Inexact Rounded +fmax3898 fma 1 +1.1E-999999 -1E-999999 -> 1E-1000000 Subnormal +fmax3899 fma 1 -1E-999999 +1.1e-999999 -> 1E-1000000 Subnormal +fmax3900 fma 1 +1.0001E-999999 -1E-999999 -> 1E-1000003 Subnormal +fmax3901 fma 1 -1E-999999 +1.0001e-999999 -> 1E-1000003 Subnormal +fmax3902 fma 1 -1E+999999 +9E+999999 -> 8E+999999 +fmax3903 fma 1 -9E+999999 +1E+999999 -> -8E+999999 + +precision: 3 +fmax3904 fma 1 0 -9.999E+999999 -> -Infinity Inexact Overflow Rounded +fmax3905 fma 1 -9.999E+999999 0 -> -Infinity Inexact Overflow Rounded +fmax3906 fma 1 0 9.999E+999999 -> Infinity Inexact Overflow Rounded +fmax3907 fma 1 9.999E+999999 0 -> Infinity Inexact Overflow Rounded + +precision: 3 +maxexponent: 999 +minexponent: -999 +fmax3910 fma 1 1.00E-999 0 -> 1.00E-999 +fmax3911 fma 1 0.1E-999 0 -> 1E-1000 Subnormal +fmax3912 fma 1 0.10E-999 0 -> 1.0E-1000 Subnormal +fmax3913 fma 1 0.100E-999 0 -> 1.0E-1000 Subnormal Rounded +fmax3914 fma 1 0.01E-999 0 -> 1E-1001 Subnormal +-- next is rounded to Nmin +fmax3915 fma 1 0.999E-999 0 -> 1.00E-999 Inexact Rounded Subnormal Underflow +fmax3916 fma 1 0.099E-999 0 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3917 fma 1 0.009E-999 0 -> 1E-1001 Inexact Rounded Subnormal Underflow +fmax3918 fma 1 0.001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3919 fma 1 0.0009E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3920 fma 1 0.0001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped + +fmax3930 fma 1 -1.00E-999 0 -> -1.00E-999 +fmax3931 fma 1 -0.1E-999 0 -> -1E-1000 Subnormal +fmax3932 fma 1 -0.10E-999 0 -> -1.0E-1000 Subnormal +fmax3933 fma 1 -0.100E-999 0 -> -1.0E-1000 Subnormal Rounded +fmax3934 fma 1 -0.01E-999 0 -> -1E-1001 Subnormal +-- next is rounded to Nmin +fmax3935 fma 1 -0.999E-999 0 -> -1.00E-999 Inexact Rounded Subnormal Underflow +fmax3936 fma 1 -0.099E-999 0 -> -1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3937 fma 1 -0.009E-999 0 -> -1E-1001 Inexact Rounded Subnormal Underflow +fmax3938 fma 1 -0.001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3939 fma 1 -0.0009E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3940 fma 1 -0.0001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped + +-- some non-zero subnormal fma 1 s +fmax3950 fma 1 1.00E-999 0.1E-999 -> 1.10E-999 +fmax3951 fma 1 0.1E-999 0.1E-999 -> 2E-1000 Subnormal +fmax3952 fma 1 0.10E-999 0.1E-999 -> 2.0E-1000 Subnormal +fmax3953 fma 1 0.100E-999 0.1E-999 -> 2.0E-1000 Subnormal Rounded +fmax3954 fma 1 0.01E-999 0.1E-999 -> 1.1E-1000 Subnormal +fmax3955 fma 1 0.999E-999 0.1E-999 -> 1.10E-999 Inexact Rounded +fmax3956 fma 1 0.099E-999 0.1E-999 -> 2.0E-1000 Inexact Rounded Subnormal Underflow +fmax3957 fma 1 0.009E-999 0.1E-999 -> 1.1E-1000 Inexact Rounded Subnormal Underflow +fmax3958 fma 1 0.001E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3959 fma 1 0.0009E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3960 fma 1 0.0001E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +-- negatives... +fmax3961 fma 1 1.00E-999 -0.1E-999 -> 9.0E-1000 Subnormal +fmax3962 fma 1 0.1E-999 -0.1E-999 -> 0E-1000 +fmax3963 fma 1 0.10E-999 -0.1E-999 -> 0E-1001 +fmax3964 fma 1 0.100E-999 -0.1E-999 -> 0E-1001 Clamped +fmax3965 fma 1 0.01E-999 -0.1E-999 -> -9E-1001 Subnormal +fmax3966 fma 1 0.999E-999 -0.1E-999 -> 9.0E-1000 Inexact Rounded Subnormal Underflow +fmax3967 fma 1 0.099E-999 -0.1E-999 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3968 fma 1 0.009E-999 -0.1E-999 -> -9E-1001 Inexact Rounded Subnormal Underflow +fmax3969 fma 1 0.001E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3970 fma 1 0.0009E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3971 fma 1 0.0001E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow + +-- some 'real' numbers +maxExponent: 384 +minExponent: -383 +precision: 8 +fmax3566 fma 1 99999061735E-394 0E-394 -> 9.999906E-384 Inexact Rounded Underflow Subnormal +precision: 7 +fmax3567 fma 1 99999061735E-394 0E-394 -> 9.99991E-384 Inexact Rounded Underflow Subnormal +precision: 6 +fmax3568 fma 1 99999061735E-394 0E-394 -> 9.9999E-384 Inexact Rounded Underflow Subnormal + +-- now the case where we can get underflow but the result is normal +-- [note this can't happen if the operands are also bounded, as we +-- cannot represent 1E-399, for example] +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +fmax3571 fma 1 1E-383 0 -> 1E-383 +fmax3572 fma 1 1E-384 0 -> 1E-384 Subnormal +fmax3573 fma 1 1E-383 1E-384 -> 1.1E-383 +fmax3574 subtract 1E-383 1E-384 -> 9E-384 Subnormal + +-- Here we explore the boundary of rounding a subnormal to Nmin +fmax3575 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal +fmax3576 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal +fmax3577 subtract 1E-383 1E-399 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax3578 subtract 1E-383 1E-400 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax3579 subtract 1E-383 1E-401 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax3580 subtract 1E-383 1E-402 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded + +-- check for double-rounded subnormals +precision: 5 +maxexponent: 79 +minexponent: -79 +-- Add: lhs and rhs 0 +fmax31001 fma 1 1.52444E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31002 fma 1 1.52445E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31003 fma 1 1.52446E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31004 fma 1 0 1.52444E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31005 fma 1 0 1.52445E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31006 fma 1 0 1.52446E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow + +-- Add: lhs >> rhs and vice versa +fmax31011 fma 1 1.52444E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31012 fma 1 1.52445E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31013 fma 1 1.52446E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31014 fma 1 1E-100 1.52444E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31015 fma 1 1E-100 1.52445E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31016 fma 1 1E-100 1.52446E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow + +-- Add: lhs + rhs fma 1 ition carried out +fmax31021 fma 1 1.52443E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31022 fma 1 1.52444E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31023 fma 1 1.52445E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31024 fma 1 1.00001E-80 1.52443E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31025 fma 1 1.00001E-80 1.52444E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31026 fma 1 1.00001E-80 1.52445E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow + +-- And for round down full and subnormal results +precision: 16 +maxExponent: +384 +minExponent: -383 +rounding: down + +fmax31100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact +fmax31101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact +fmax31103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact +fmax31104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact +fmax31105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact +fmax31106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact +fmax31107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact +fmax31108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact +fmax31109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact + +rounding: ceiling +fmax31110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact +fmax31111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact +fmax31113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact +fmax31114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact +fmax31115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact +fmax31116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact +fmax31117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact +fmax31118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact +fmax31119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact + +rounding: down +precision: 7 +maxExponent: +96 +minExponent: -95 +fmax31130 fma 1 1 -1e-200 -> 0.9999999 Rounded Inexact +-- subnormal boundary +fmax31131 fma 1 1.000000E-94 -1e-200 -> 9.999999E-95 Rounded Inexact +fmax31132 fma 1 1.000001E-95 -1e-200 -> 1.000000E-95 Rounded Inexact +fmax31133 fma 1 1.000000E-95 -1e-200 -> 9.99999E-96 Rounded Inexact Subnormal Underflow +fmax31134 fma 1 0.999999E-95 -1e-200 -> 9.99998E-96 Rounded Inexact Subnormal Underflow +fmax31135 fma 1 0.001000E-95 -1e-200 -> 9.99E-99 Rounded Inexact Subnormal Underflow +fmax31136 fma 1 0.000999E-95 -1e-200 -> 9.98E-99 Rounded Inexact Subnormal Underflow +fmax31137 fma 1 1.000000E-95 -1e-101 -> 9.99999E-96 Subnormal +fmax31138 fma 1 10000E-101 -1e-200 -> 9.999E-98 Subnormal Inexact Rounded Underflow +fmax31139 fma 1 1000E-101 -1e-200 -> 9.99E-99 Subnormal Inexact Rounded Underflow +fmax31140 fma 1 100E-101 -1e-200 -> 9.9E-100 Subnormal Inexact Rounded Underflow +fmax31141 fma 1 10E-101 -1e-200 -> 9E-101 Subnormal Inexact Rounded Underflow +fmax31142 fma 1 1E-101 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31143 fma 1 0E-101 -1e-200 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31144 fma 1 1E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped + +fmax31151 fma 1 10000E-102 -1e-200 -> 9.99E-99 Subnormal Inexact Rounded Underflow +fmax31152 fma 1 1000E-102 -1e-200 -> 9.9E-100 Subnormal Inexact Rounded Underflow +fmax31153 fma 1 100E-102 -1e-200 -> 9E-101 Subnormal Inexact Rounded Underflow +fmax31154 fma 1 10E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31155 fma 1 1E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31156 fma 1 0E-102 -1e-200 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31157 fma 1 1E-103 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped + +fmax31160 fma 1 100E-105 -1e-101 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31161 fma 1 100E-105 -1e-201 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped + +-- tests based on Gunnar Degnbol's edge case +precision: 15 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +fmax31200 fma 1 1E15 -0.5 -> 1.00000000000000E+15 Inexact Rounded +fmax31201 fma 1 1E15 -0.50 -> 1.00000000000000E+15 Inexact Rounded +fmax31210 fma 1 1E15 -0.51 -> 999999999999999 Inexact Rounded +fmax31211 fma 1 1E15 -0.501 -> 999999999999999 Inexact Rounded +fmax31212 fma 1 1E15 -0.5001 -> 999999999999999 Inexact Rounded +fmax31213 fma 1 1E15 -0.50001 -> 999999999999999 Inexact Rounded +fmax31214 fma 1 1E15 -0.500001 -> 999999999999999 Inexact Rounded +fmax31215 fma 1 1E15 -0.5000001 -> 999999999999999 Inexact Rounded +fmax31216 fma 1 1E15 -0.50000001 -> 999999999999999 Inexact Rounded +fmax31217 fma 1 1E15 -0.500000001 -> 999999999999999 Inexact Rounded +fmax31218 fma 1 1E15 -0.5000000001 -> 999999999999999 Inexact Rounded +fmax31219 fma 1 1E15 -0.50000000001 -> 999999999999999 Inexact Rounded +fmax31220 fma 1 1E15 -0.500000000001 -> 999999999999999 Inexact Rounded +fmax31221 fma 1 1E15 -0.5000000000001 -> 999999999999999 Inexact Rounded +fmax31222 fma 1 1E15 -0.50000000000001 -> 999999999999999 Inexact Rounded +fmax31223 fma 1 1E15 -0.500000000000001 -> 999999999999999 Inexact Rounded +fmax31224 fma 1 1E15 -0.5000000000000001 -> 999999999999999 Inexact Rounded +fmax31225 fma 1 1E15 -0.5000000000000000 -> 1.00000000000000E+15 Inexact Rounded +fmax31230 fma 1 1E15 -5000000.000000001 -> 999999995000000 Inexact Rounded + +precision: 16 + +fmax31300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded +fmax31310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded +fmax31311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded +fmax31312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded +fmax31313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded +fmax31314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded +fmax31315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded +fmax31316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded +fmax31317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded +fmax31318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded +fmax31319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded +fmax31320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded +fmax31321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded +fmax31322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded +fmax31323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded +fmax31324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded +fmax31325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded +fmax31336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded +fmax31337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded +fmax31338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded +fmax31339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded + +fmax31340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded +fmax31341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded + +fmax31349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded +fmax31350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded +fmax31351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded +fmax31352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded +fmax31353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded +fmax31354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded +fmax31355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded +fmax31356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded +fmax31357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded +fmax31358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded +fmax31359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded +fmax31360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded +fmax31361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded +fmax31362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded +fmax31363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded +fmax31364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded +fmax31365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded +fmax31377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded +fmax31378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded +fmax31379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded +fmax31380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded +fmax31381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded +fmax31382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded +fmax31393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded +fmax31394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded +fmax31395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded +fmax31396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +precision: 15 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +fmax31400 fma 1 0 1.23456789012345 -> 1.23456789012345 +fmax31401 fma 1 0 1.23456789012345E-1 -> 0.123456789012345 +fmax31402 fma 1 0 1.23456789012345E-2 -> 0.0123456789012345 +fmax31403 fma 1 0 1.23456789012345E-3 -> 0.00123456789012345 +fmax31404 fma 1 0 1.23456789012345E-4 -> 0.000123456789012345 +fmax31405 fma 1 0 1.23456789012345E-5 -> 0.0000123456789012345 +fmax31406 fma 1 0 1.23456789012345E-6 -> 0.00000123456789012345 +fmax31407 fma 1 0 1.23456789012345E-7 -> 1.23456789012345E-7 +fmax31408 fma 1 0 1.23456789012345E-8 -> 1.23456789012345E-8 +fmax31409 fma 1 0 1.23456789012345E-9 -> 1.23456789012345E-9 +fmax31410 fma 1 0 1.23456789012345E-10 -> 1.23456789012345E-10 +fmax31411 fma 1 0 1.23456789012345E-11 -> 1.23456789012345E-11 +fmax31412 fma 1 0 1.23456789012345E-12 -> 1.23456789012345E-12 +fmax31413 fma 1 0 1.23456789012345E-13 -> 1.23456789012345E-13 +fmax31414 fma 1 0 1.23456789012345E-14 -> 1.23456789012345E-14 +fmax31415 fma 1 0 1.23456789012345E-15 -> 1.23456789012345E-15 +fmax31416 fma 1 0 1.23456789012345E-16 -> 1.23456789012345E-16 +fmax31417 fma 1 0 1.23456789012345E-17 -> 1.23456789012345E-17 +fmax31418 fma 1 0 1.23456789012345E-18 -> 1.23456789012345E-18 +fmax31419 fma 1 0 1.23456789012345E-19 -> 1.23456789012345E-19 + +-- same, precision 16.. +precision: 16 +fmax31420 fma 1 0 1.123456789012345 -> 1.123456789012345 +fmax31421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 +fmax31422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 +fmax31423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 +fmax31424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 +fmax31425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 +fmax31426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 +fmax31427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 +fmax31428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 +fmax31429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 +fmax31430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 +fmax31431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 +fmax31432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 +fmax31433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 +fmax31434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 +fmax31435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 +fmax31436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 +fmax31437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 +fmax31438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 +fmax31439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 + +-- same, reversed 0 +fmax31440 fma 1 1.123456789012345 0 -> 1.123456789012345 +fmax31441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 +fmax31442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 +fmax31443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 +fmax31444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 +fmax31445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 +fmax31446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 +fmax31447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 +fmax31448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 +fmax31449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 +fmax31450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 +fmax31451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 +fmax31452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 +fmax31453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 +fmax31454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 +fmax31455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 +fmax31456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 +fmax31457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 +fmax31458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 +fmax31459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 + +-- same, Es on the 0 +fmax31460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 +fmax31461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 +fmax31462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 +fmax31463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 +fmax31464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 +fmax31465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 +fmax31466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 +fmax31467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 +fmax31468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 +fmax31469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 +fmax31470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 +fmax31471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 +fmax31472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 +fmax31473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 +fmax31474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 +fmax31475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 +-- next four flag Rounded because the 0 extends the result +fmax31476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded +fmax31477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded +fmax31478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded +fmax31479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +precision: 16 +maxExponent: 384 +minexponent: -383 + +rounding: half_up +-- exact zeros from zeros +fmax31500 fma 1 0 0E-19 -> 0E-19 +fmax31501 fma 1 -0 0E-19 -> 0E-19 +fmax31502 fma 1 0 -0E-19 -> 0E-19 +fmax31503 fma 1 -0 -0E-19 -> -0E-19 +fmax31504 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31505 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31506 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31507 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31511 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31512 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31513 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31514 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31515 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31516 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31517 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31518 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: half_down +-- exact zeros from zeros +fmax31520 fma 1 0 0E-19 -> 0E-19 +fmax31521 fma 1 -0 0E-19 -> 0E-19 +fmax31522 fma 1 0 -0E-19 -> 0E-19 +fmax31523 fma 1 -0 -0E-19 -> -0E-19 +fmax31524 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31525 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31526 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31527 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31531 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31532 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31533 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31534 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31535 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31536 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31537 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31538 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: half_even +-- exact zeros from zeros +fmax31540 fma 1 0 0E-19 -> 0E-19 +fmax31541 fma 1 -0 0E-19 -> 0E-19 +fmax31542 fma 1 0 -0E-19 -> 0E-19 +fmax31543 fma 1 -0 -0E-19 -> -0E-19 +fmax31544 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31545 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31546 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31547 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31551 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31552 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31553 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31554 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31555 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31556 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31557 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31558 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: up +-- exact zeros from zeros +fmax31560 fma 1 0 0E-19 -> 0E-19 +fmax31561 fma 1 -0 0E-19 -> 0E-19 +fmax31562 fma 1 0 -0E-19 -> 0E-19 +fmax31563 fma 1 -0 -0E-19 -> -0E-19 +fmax31564 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31565 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31566 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31567 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31571 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31572 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31573 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +fmax31574 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +-- some exact zeros from non-zeros +fmax31575 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31576 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31577 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31578 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow + +rounding: down +-- exact zeros from zeros +fmax31580 fma 1 0 0E-19 -> 0E-19 +fmax31581 fma 1 -0 0E-19 -> 0E-19 +fmax31582 fma 1 0 -0E-19 -> 0E-19 +fmax31583 fma 1 -0 -0E-19 -> -0E-19 +fmax31584 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31585 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31586 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31587 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31591 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31592 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31593 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31594 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31595 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31596 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31597 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31598 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: ceiling +-- exact zeros from zeros +fmax31600 fma 1 0 0E-19 -> 0E-19 +fmax31601 fma 1 -0 0E-19 -> 0E-19 +fmax31602 fma 1 0 -0E-19 -> 0E-19 +fmax31603 fma 1 -0 -0E-19 -> -0E-19 +fmax31604 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31605 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31606 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31607 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31611 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31612 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31613 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31614 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31615 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31616 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31617 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31618 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +fmax31620 fma 1 0 0E-19 -> 0E-19 +fmax31621 fma 1 -0 0E-19 -> -0E-19 -- * +fmax31622 fma 1 0 -0E-19 -> -0E-19 -- * +fmax31623 fma 1 -0 -0E-19 -> -0E-19 +fmax31624 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31625 fma 1 -0E-400 0E-19 -> -0E-398 Clamped -- * +fmax31626 fma 1 0E-400 -0E-19 -> -0E-398 Clamped -- * +fmax31627 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31631 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31632 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31633 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +fmax31634 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +-- some exact zeros from non-zeros +fmax31635 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31636 fma 1 -1E-401 1E-401 -> -0E-398 Clamped -- * +fmax31637 fma 1 1E-401 -1E-401 -> -0E-398 Clamped -- * +fmax31638 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow + +-- BigDecimal problem testcases 2006.01.23 +precision: 16 +maxExponent: 384 +minexponent: -383 + +rounding: down +precision: 7 +fmax31651 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 6 +fmax31652 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 5 +fmax31653 fma 1 10001E+2 -2E+1 -> 1.0000E+6 Inexact Rounded +precision: 4 +fmax31654 fma 1 10001E+2 -2E+1 -> 1.000E+6 Inexact Rounded +precision: 3 +fmax31655 fma 1 10001E+2 -2E+1 -> 1.00E+6 Inexact Rounded +precision: 2 +fmax31656 fma 1 10001E+2 -2E+1 -> 1.0E+6 Inexact Rounded +precision: 1 +fmax31657 fma 1 10001E+2 -2E+1 -> 1E+6 Inexact Rounded + +rounding: half_even +precision: 7 +fmax31661 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 6 +fmax31662 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 5 +fmax31663 fma 1 10001E+2 -2E+1 -> 1.0001E+6 Inexact Rounded +precision: 4 +fmax31664 fma 1 10001E+2 -2E+1 -> 1.000E+6 Inexact Rounded +precision: 3 +fmax31665 fma 1 10001E+2 -2E+1 -> 1.00E+6 Inexact Rounded +precision: 2 +fmax31666 fma 1 10001E+2 -2E+1 -> 1.0E+6 Inexact Rounded +precision: 1 +fmax31667 fma 1 10001E+2 -2E+1 -> 1E+6 Inexact Rounded + +rounding: up +precision: 7 +fmax31671 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 6 +fmax31672 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 5 +fmax31673 fma 1 10001E+2 -2E+1 -> 1.0001E+6 Inexact Rounded +precision: 4 +fmax31674 fma 1 10001E+2 -2E+1 -> 1.001E+6 Inexact Rounded +precision: 3 +fmax31675 fma 1 10001E+2 -2E+1 -> 1.01E+6 Inexact Rounded +precision: 2 +fmax31676 fma 1 10001E+2 -2E+1 -> 1.1E+6 Inexact Rounded +precision: 1 +fmax31677 fma 1 10001E+2 -2E+1 -> 2E+6 Inexact Rounded + +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 +-- Examples from SQL proposal (Krishna Kulkarni) +fmax31701 fma 1 130E-2 120E-2 -> 2.50 +fmax31702 fma 1 130E-2 12E-1 -> 2.50 +fmax31703 fma 1 130E-2 1E0 -> 2.30 +fmax31704 fma 1 1E2 1E4 -> 1.01E+4 +fmax31705 subtract 130E-2 120E-2 -> 0.10 +fmax31706 subtract 130E-2 12E-1 -> 0.10 +fmax31707 subtract 130E-2 1E0 -> 0.30 +fmax31708 subtract 1E2 1E4 -> -9.9E+3 + +------------------------------------------------------------------------ +-- Same as above, using decimal64 default parameters -- +------------------------------------------------------------------------ +precision: 16 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- [first group are 'quick confidence check'] +fmax36001 fma 1 1 1 -> 2 +fmax36002 fma 1 2 3 -> 5 +fmax36003 fma 1 '5.75' '3.3' -> 9.05 +fmax36004 fma 1 '5' '-3' -> 2 +fmax36005 fma 1 '-5' '-3' -> -8 +fmax36006 fma 1 '-7' '2.5' -> -4.5 +fmax36007 fma 1 '0.7' '0.3' -> 1.0 +fmax36008 fma 1 '1.25' '1.25' -> 2.50 +fmax36009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' +fmax36010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' + +fmax36011 fma 1 '0.44444444444444444' '0.55555555555555555' -> '1.000000000000000' Inexact Rounded +fmax36012 fma 1 '0.44444444444444440' '0.55555555555555555' -> '1.000000000000000' Inexact Rounded +fmax36013 fma 1 '0.44444444444444444' '0.55555555555555550' -> '0.9999999999999999' Inexact Rounded +fmax36014 fma 1 '0.444444444444444449' '0' -> '0.4444444444444444' Inexact Rounded +fmax36015 fma 1 '0.4444444444444444499' '0' -> '0.4444444444444444' Inexact Rounded +fmax36016 fma 1 '0.44444444444444444999' '0' -> '0.4444444444444444' Inexact Rounded +fmax36017 fma 1 '0.44444444444444445000' '0' -> '0.4444444444444444' Inexact Rounded +fmax36018 fma 1 '0.44444444444444445001' '0' -> '0.4444444444444445' Inexact Rounded +fmax36019 fma 1 '0.4444444444444444501' '0' -> '0.4444444444444445' Inexact Rounded +fmax36020 fma 1 '0.444444444444444451' '0' -> '0.4444444444444445' Inexact Rounded + +fmax36021 fma 1 0 1 -> 1 +fmax36022 fma 1 1 1 -> 2 +fmax36023 fma 1 2 1 -> 3 +fmax36024 fma 1 3 1 -> 4 +fmax36025 fma 1 4 1 -> 5 +fmax36026 fma 1 5 1 -> 6 +fmax36027 fma 1 6 1 -> 7 +fmax36028 fma 1 7 1 -> 8 +fmax36029 fma 1 8 1 -> 9 +fmax36030 fma 1 9 1 -> 10 + +-- some carrying effects +fmax36031 fma 1 '0.9998' '0.0000' -> '0.9998' +fmax36032 fma 1 '0.9998' '0.0001' -> '0.9999' +fmax36033 fma 1 '0.9998' '0.0002' -> '1.0000' +fmax36034 fma 1 '0.9998' '0.0003' -> '1.0001' + +fmax36035 fma 1 '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +fmax36036 fma 1 '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +fmax36037 fma 1 '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +fmax36038 fma 1 '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded +fmax36039 fma 1 '700000' '10000e+16' -> '1.000000000000007E+20' Rounded + +-- symmetry: +fmax36040 fma 1 '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded +fmax36041 fma 1 '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded +fmax36042 fma 1 '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded +fmax36044 fma 1 '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded +fmax36045 fma 1 '10000e+16' '700000' -> '1.000000000000007E+20' Rounded + +fmax36046 fma 1 '10000e+9' '7' -> '10000000000007' +fmax36047 fma 1 '10000e+9' '70' -> '10000000000070' +fmax36048 fma 1 '10000e+9' '700' -> '10000000000700' +fmax36049 fma 1 '10000e+9' '7000' -> '10000000007000' +fmax36050 fma 1 '10000e+9' '70000' -> '10000000070000' +fmax36051 fma 1 '10000e+9' '700000' -> '10000000700000' + +-- examples from decarith +fmax36053 fma 1 '12' '7.00' -> '19.00' +fmax36054 fma 1 '1.3' '-1.07' -> '0.23' +fmax36055 fma 1 '1.3' '-1.30' -> '0.00' +fmax36056 fma 1 '1.3' '-2.07' -> '-0.77' +fmax36057 fma 1 '1E+2' '1E+4' -> '1.01E+4' + +-- from above +fmax36061 fma 1 1 '0.1' -> '1.1' +fmax36062 fma 1 1 '0.01' -> '1.01' +fmax36063 fma 1 1 '0.001' -> '1.001' +fmax36064 fma 1 1 '0.0001' -> '1.0001' +fmax36065 fma 1 1 '0.00001' -> '1.00001' +fmax36066 fma 1 1 '0.000001' -> '1.000001' +fmax36067 fma 1 1 '0.0000001' -> '1.0000001' +fmax36068 fma 1 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +fmax36070 fma 1 1 0 -> 1 +fmax36071 fma 1 1 0. -> 1 +fmax36072 fma 1 1 .0 -> 1.0 +fmax36073 fma 1 1 0.0 -> 1.0 +fmax36074 fma 1 1 0.00 -> 1.00 +fmax36075 fma 1 0 1 -> 1 +fmax36076 fma 1 0. 1 -> 1 +fmax36077 fma 1 .0 1 -> 1.0 +fmax36078 fma 1 0.0 1 -> 1.0 +fmax36079 fma 1 0.00 1 -> 1.00 + +-- some carries +fmax36080 fma 1 9999999999999998 1 -> 9999999999999999 +fmax36081 fma 1 9999999999999999 1 -> 1.000000000000000E+16 Rounded +fmax36082 fma 1 999999999999999 1 -> 1000000000000000 +fmax36083 fma 1 9999999999999 1 -> 10000000000000 +fmax36084 fma 1 99999999999 1 -> 100000000000 +fmax36085 fma 1 999999999 1 -> 1000000000 +fmax36086 fma 1 9999999 1 -> 10000000 +fmax36087 fma 1 99999 1 -> 100000 +fmax36088 fma 1 999 1 -> 1000 +fmax36089 fma 1 9 1 -> 10 + + +-- more LHS swaps +fmax36090 fma 1 '-56267E-10' 0 -> '-0.0000056267' +fmax36091 fma 1 '-56267E-6' 0 -> '-0.056267' +fmax36092 fma 1 '-56267E-5' 0 -> '-0.56267' +fmax36093 fma 1 '-56267E-4' 0 -> '-5.6267' +fmax36094 fma 1 '-56267E-3' 0 -> '-56.267' +fmax36095 fma 1 '-56267E-2' 0 -> '-562.67' +fmax36096 fma 1 '-56267E-1' 0 -> '-5626.7' +fmax36097 fma 1 '-56267E-0' 0 -> '-56267' +fmax36098 fma 1 '-5E-10' 0 -> '-5E-10' +fmax36099 fma 1 '-5E-7' 0 -> '-5E-7' +fmax36100 fma 1 '-5E-6' 0 -> '-0.000005' +fmax36101 fma 1 '-5E-5' 0 -> '-0.00005' +fmax36102 fma 1 '-5E-4' 0 -> '-0.0005' +fmax36103 fma 1 '-5E-1' 0 -> '-0.5' +fmax36104 fma 1 '-5E0' 0 -> '-5' +fmax36105 fma 1 '-5E1' 0 -> '-50' +fmax36106 fma 1 '-5E5' 0 -> '-500000' +fmax36107 fma 1 '-5E15' 0 -> '-5000000000000000' +fmax36108 fma 1 '-5E16' 0 -> '-5.000000000000000E+16' Rounded +fmax36109 fma 1 '-5E17' 0 -> '-5.000000000000000E+17' Rounded +fmax36110 fma 1 '-5E18' 0 -> '-5.000000000000000E+18' Rounded +fmax36111 fma 1 '-5E100' 0 -> '-5.000000000000000E+100' Rounded + +-- more RHS swaps +fmax36113 fma 1 0 '-56267E-10' -> '-0.0000056267' +fmax36114 fma 1 0 '-56267E-6' -> '-0.056267' +fmax36116 fma 1 0 '-56267E-5' -> '-0.56267' +fmax36117 fma 1 0 '-56267E-4' -> '-5.6267' +fmax36119 fma 1 0 '-56267E-3' -> '-56.267' +fmax36120 fma 1 0 '-56267E-2' -> '-562.67' +fmax36121 fma 1 0 '-56267E-1' -> '-5626.7' +fmax36122 fma 1 0 '-56267E-0' -> '-56267' +fmax36123 fma 1 0 '-5E-10' -> '-5E-10' +fmax36124 fma 1 0 '-5E-7' -> '-5E-7' +fmax36125 fma 1 0 '-5E-6' -> '-0.000005' +fmax36126 fma 1 0 '-5E-5' -> '-0.00005' +fmax36127 fma 1 0 '-5E-4' -> '-0.0005' +fmax36128 fma 1 0 '-5E-1' -> '-0.5' +fmax36129 fma 1 0 '-5E0' -> '-5' +fmax36130 fma 1 0 '-5E1' -> '-50' +fmax36131 fma 1 0 '-5E5' -> '-500000' +fmax36132 fma 1 0 '-5E15' -> '-5000000000000000' +fmax36133 fma 1 0 '-5E16' -> '-5.000000000000000E+16' Rounded +fmax36134 fma 1 0 '-5E17' -> '-5.000000000000000E+17' Rounded +fmax36135 fma 1 0 '-5E18' -> '-5.000000000000000E+18' Rounded +fmax36136 fma 1 0 '-5E100' -> '-5.000000000000000E+100' Rounded + +-- related +fmax36137 fma 1 1 '0E-19' -> '1.000000000000000' Rounded +fmax36138 fma 1 -1 '0E-19' -> '-1.000000000000000' Rounded +fmax36139 fma 1 '0E-19' 1 -> '1.000000000000000' Rounded +fmax36140 fma 1 '0E-19' -1 -> '-1.000000000000000' Rounded +fmax36141 fma 1 1E+11 0.0000 -> '100000000000.0000' +fmax36142 fma 1 1E+11 0.00000 -> '100000000000.0000' Rounded +fmax36143 fma 1 0.000 1E+12 -> '1000000000000.000' +fmax36144 fma 1 0.0000 1E+12 -> '1000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +fmax36146 fma 1 '00.0' 0 -> '0.0' +fmax36147 fma 1 '0.00' 0 -> '0.00' +fmax36148 fma 1 0 '0.00' -> '0.00' +fmax36149 fma 1 0 '00.0' -> '0.0' +fmax36150 fma 1 '00.0' '0.00' -> '0.00' +fmax36151 fma 1 '0.00' '00.0' -> '0.00' +fmax36152 fma 1 '3' '.3' -> '3.3' +fmax36153 fma 1 '3.' '.3' -> '3.3' +fmax36154 fma 1 '3.0' '.3' -> '3.3' +fmax36155 fma 1 '3.00' '.3' -> '3.30' +fmax36156 fma 1 '3' '3' -> '6' +fmax36157 fma 1 '3' '+3' -> '6' +fmax36158 fma 1 '3' '-3' -> '0' +fmax36159 fma 1 '0.3' '-0.3' -> '0.0' +fmax36160 fma 1 '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +fmax36161 fma 1 '1E+13' '-1' -> '9999999999999' +fmax36162 fma 1 '1E+13' '1.11' -> '10000000000001.11' +fmax36163 fma 1 '1.11' '1E+13' -> '10000000000001.11' +fmax36164 fma 1 '-1' '1E+13' -> '9999999999999' +fmax36165 fma 1 '7E+13' '-1' -> '69999999999999' +fmax36166 fma 1 '7E+13' '1.11' -> '70000000000001.11' +fmax36167 fma 1 '1.11' '7E+13' -> '70000000000001.11' +fmax36168 fma 1 '-1' '7E+13' -> '69999999999999' + +-- 1234567890123456 1234567890123456 1 234567890123456 +fmax36170 fma 1 '0.4444444444444444' '0.5555555555555563' -> '1.000000000000001' Inexact Rounded +fmax36171 fma 1 '0.4444444444444444' '0.5555555555555562' -> '1.000000000000001' Inexact Rounded +fmax36172 fma 1 '0.4444444444444444' '0.5555555555555561' -> '1.000000000000000' Inexact Rounded +fmax36173 fma 1 '0.4444444444444444' '0.5555555555555560' -> '1.000000000000000' Inexact Rounded +fmax36174 fma 1 '0.4444444444444444' '0.5555555555555559' -> '1.000000000000000' Inexact Rounded +fmax36175 fma 1 '0.4444444444444444' '0.5555555555555558' -> '1.000000000000000' Inexact Rounded +fmax36176 fma 1 '0.4444444444444444' '0.5555555555555557' -> '1.000000000000000' Inexact Rounded +fmax36177 fma 1 '0.4444444444444444' '0.5555555555555556' -> '1.000000000000000' Rounded +fmax36178 fma 1 '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' +fmax36179 fma 1 '0.4444444444444444' '0.5555555555555554' -> '0.9999999999999998' +fmax36180 fma 1 '0.4444444444444444' '0.5555555555555553' -> '0.9999999999999997' +fmax36181 fma 1 '0.4444444444444444' '0.5555555555555552' -> '0.9999999999999996' +fmax36182 fma 1 '0.4444444444444444' '0.5555555555555551' -> '0.9999999999999995' +fmax36183 fma 1 '0.4444444444444444' '0.5555555555555550' -> '0.9999999999999994' + +-- and some more, including residue effects and different roundings +rounding: half_up +fmax36200 fma 1 '6543210123456789' 0 -> '6543210123456789' +fmax36201 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +fmax36202 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +fmax36203 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +fmax36204 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +fmax36205 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +fmax36206 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36207 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36208 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +fmax36209 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +fmax36210 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +fmax36211 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +fmax36212 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +fmax36213 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +fmax36214 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +fmax36215 fma 1 '6543210123456789' 0.999999 -> '6543210123456790' Inexact Rounded +fmax36216 fma 1 '6543210123456789' 1 -> '6543210123456790' +fmax36217 fma 1 '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded +fmax36218 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +fmax36219 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +rounding: half_even +fmax36220 fma 1 '6543210123456789' 0 -> '6543210123456789' +fmax36221 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +fmax36222 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +fmax36223 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +fmax36224 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +fmax36225 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +fmax36226 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36227 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36228 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +fmax36229 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +fmax36230 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +fmax36231 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +fmax36232 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +fmax36233 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +fmax36234 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +fmax36235 fma 1 '6543210123456789' 0.999999 -> '6543210123456790' Inexact Rounded +fmax36236 fma 1 '6543210123456789' 1 -> '6543210123456790' +fmax36237 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +fmax36238 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +fmax36239 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded +-- critical few with even bottom digit... +fmax36240 fma 1 '6543210123456788' 0.499999 -> '6543210123456788' Inexact Rounded +fmax36241 fma 1 '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded +fmax36242 fma 1 '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded + +rounding: down +fmax36250 fma 1 '6543210123456789' 0 -> '6543210123456789' +fmax36251 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +fmax36252 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +fmax36253 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +fmax36254 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +fmax36255 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +fmax36256 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36257 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36258 fma 1 '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded +fmax36259 fma 1 '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded +fmax36260 fma 1 '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded +fmax36261 fma 1 '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded +fmax36262 fma 1 '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded +fmax36263 fma 1 '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded +fmax36264 fma 1 '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded +fmax36265 fma 1 '6543210123456789' 0.999999 -> '6543210123456789' Inexact Rounded +fmax36266 fma 1 '6543210123456789' 1 -> '6543210123456790' +fmax36267 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +fmax36268 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +fmax36269 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_even +fmax36301 fma 1 -1 1 -> 0 +fmax36302 fma 1 0 1 -> 1 +fmax36303 fma 1 1 1 -> 2 +fmax36304 fma 1 12 1 -> 13 +fmax36305 fma 1 98 1 -> 99 +fmax36306 fma 1 99 1 -> 100 +fmax36307 fma 1 100 1 -> 101 +fmax36308 fma 1 101 1 -> 102 +fmax36309 fma 1 -1 -1 -> -2 +fmax36310 fma 1 0 -1 -> -1 +fmax36311 fma 1 1 -1 -> 0 +fmax36312 fma 1 12 -1 -> 11 +fmax36313 fma 1 98 -1 -> 97 +fmax36314 fma 1 99 -1 -> 98 +fmax36315 fma 1 100 -1 -> 99 +fmax36316 fma 1 101 -1 -> 100 + +fmax36321 fma 1 -0.01 0.01 -> 0.00 +fmax36322 fma 1 0.00 0.01 -> 0.01 +fmax36323 fma 1 0.01 0.01 -> 0.02 +fmax36324 fma 1 0.12 0.01 -> 0.13 +fmax36325 fma 1 0.98 0.01 -> 0.99 +fmax36326 fma 1 0.99 0.01 -> 1.00 +fmax36327 fma 1 1.00 0.01 -> 1.01 +fmax36328 fma 1 1.01 0.01 -> 1.02 +fmax36329 fma 1 -0.01 -0.01 -> -0.02 +fmax36330 fma 1 0.00 -0.01 -> -0.01 +fmax36331 fma 1 0.01 -0.01 -> 0.00 +fmax36332 fma 1 0.12 -0.01 -> 0.11 +fmax36333 fma 1 0.98 -0.01 -> 0.97 +fmax36334 fma 1 0.99 -0.01 -> 0.98 +fmax36335 fma 1 1.00 -0.01 -> 0.99 +fmax36336 fma 1 1.01 -0.01 -> 1.00 + +-- some more cases where fma 1 ing 0 affects the coefficient +fmax36340 fma 1 1E+3 0 -> 1000 +fmax36341 fma 1 1E+15 0 -> 1000000000000000 +fmax36342 fma 1 1E+16 0 -> 1.000000000000000E+16 Rounded +fmax36343 fma 1 1E+17 0 -> 1.000000000000000E+17 Rounded +-- which simply follow from these cases ... +fmax36344 fma 1 1E+3 1 -> 1001 +fmax36345 fma 1 1E+15 1 -> 1000000000000001 +fmax36346 fma 1 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded +fmax36347 fma 1 1E+17 1 -> 1.000000000000000E+17 Inexact Rounded +fmax36348 fma 1 1E+3 7 -> 1007 +fmax36349 fma 1 1E+15 7 -> 1000000000000007 +fmax36350 fma 1 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded +fmax36351 fma 1 1E+17 7 -> 1.000000000000000E+17 Inexact Rounded + +-- tryzeros cases +fmax36361 fma 1 0E+50 10000E+1 -> 1.0000E+5 +fmax36362 fma 1 10000E+1 0E-50 -> 100000.0000000000 Rounded +fmax36363 fma 1 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact +fmax36364 fma 1 12.34 0e-398 -> 12.34000000000000 Rounded + +-- ulp replacement tests +fmax36400 fma 1 1 77e-14 -> 1.00000000000077 +fmax36401 fma 1 1 77e-15 -> 1.000000000000077 +fmax36402 fma 1 1 77e-16 -> 1.000000000000008 Inexact Rounded +fmax36403 fma 1 1 77e-17 -> 1.000000000000001 Inexact Rounded +fmax36404 fma 1 1 77e-18 -> 1.000000000000000 Inexact Rounded +fmax36405 fma 1 1 77e-19 -> 1.000000000000000 Inexact Rounded +fmax36406 fma 1 1 77e-99 -> 1.000000000000000 Inexact Rounded + +fmax36410 fma 1 10 77e-14 -> 10.00000000000077 +fmax36411 fma 1 10 77e-15 -> 10.00000000000008 Inexact Rounded +fmax36412 fma 1 10 77e-16 -> 10.00000000000001 Inexact Rounded +fmax36413 fma 1 10 77e-17 -> 10.00000000000000 Inexact Rounded +fmax36414 fma 1 10 77e-18 -> 10.00000000000000 Inexact Rounded +fmax36415 fma 1 10 77e-19 -> 10.00000000000000 Inexact Rounded +fmax36416 fma 1 10 77e-99 -> 10.00000000000000 Inexact Rounded + +fmax36420 fma 1 77e-14 1 -> 1.00000000000077 +fmax36421 fma 1 77e-15 1 -> 1.000000000000077 +fmax36422 fma 1 77e-16 1 -> 1.000000000000008 Inexact Rounded +fmax36423 fma 1 77e-17 1 -> 1.000000000000001 Inexact Rounded +fmax36424 fma 1 77e-18 1 -> 1.000000000000000 Inexact Rounded +fmax36425 fma 1 77e-19 1 -> 1.000000000000000 Inexact Rounded +fmax36426 fma 1 77e-99 1 -> 1.000000000000000 Inexact Rounded + +fmax36430 fma 1 77e-14 10 -> 10.00000000000077 +fmax36431 fma 1 77e-15 10 -> 10.00000000000008 Inexact Rounded +fmax36432 fma 1 77e-16 10 -> 10.00000000000001 Inexact Rounded +fmax36433 fma 1 77e-17 10 -> 10.00000000000000 Inexact Rounded +fmax36434 fma 1 77e-18 10 -> 10.00000000000000 Inexact Rounded +fmax36435 fma 1 77e-19 10 -> 10.00000000000000 Inexact Rounded +fmax36436 fma 1 77e-99 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +fmax36440 fma 1 1 -77e-14 -> 0.99999999999923 +fmax36441 fma 1 1 -77e-15 -> 0.999999999999923 +fmax36442 fma 1 1 -77e-16 -> 0.9999999999999923 +fmax36443 fma 1 1 -77e-17 -> 0.9999999999999992 Inexact Rounded +fmax36444 fma 1 1 -77e-18 -> 0.9999999999999999 Inexact Rounded +fmax36445 fma 1 1 -77e-19 -> 1.000000000000000 Inexact Rounded +fmax36446 fma 1 1 -77e-99 -> 1.000000000000000 Inexact Rounded + +fmax36450 fma 1 10 -77e-14 -> 9.99999999999923 +fmax36451 fma 1 10 -77e-15 -> 9.999999999999923 +fmax36452 fma 1 10 -77e-16 -> 9.999999999999992 Inexact Rounded +fmax36453 fma 1 10 -77e-17 -> 9.999999999999999 Inexact Rounded +fmax36454 fma 1 10 -77e-18 -> 10.00000000000000 Inexact Rounded +fmax36455 fma 1 10 -77e-19 -> 10.00000000000000 Inexact Rounded +fmax36456 fma 1 10 -77e-99 -> 10.00000000000000 Inexact Rounded + +fmax36460 fma 1 -77e-14 1 -> 0.99999999999923 +fmax36461 fma 1 -77e-15 1 -> 0.999999999999923 +fmax36462 fma 1 -77e-16 1 -> 0.9999999999999923 +fmax36463 fma 1 -77e-17 1 -> 0.9999999999999992 Inexact Rounded +fmax36464 fma 1 -77e-18 1 -> 0.9999999999999999 Inexact Rounded +fmax36465 fma 1 -77e-19 1 -> 1.000000000000000 Inexact Rounded +fmax36466 fma 1 -77e-99 1 -> 1.000000000000000 Inexact Rounded + +fmax36470 fma 1 -77e-14 10 -> 9.99999999999923 +fmax36471 fma 1 -77e-15 10 -> 9.999999999999923 +fmax36472 fma 1 -77e-16 10 -> 9.999999999999992 Inexact Rounded +fmax36473 fma 1 -77e-17 10 -> 9.999999999999999 Inexact Rounded +fmax36474 fma 1 -77e-18 10 -> 10.00000000000000 Inexact Rounded +fmax36475 fma 1 -77e-19 10 -> 10.00000000000000 Inexact Rounded +fmax36476 fma 1 -77e-99 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +fmax36480 fma 1 -1 77e-14 -> -0.99999999999923 +fmax36481 fma 1 -1 77e-15 -> -0.999999999999923 +fmax36482 fma 1 -1 77e-16 -> -0.9999999999999923 +fmax36483 fma 1 -1 77e-17 -> -0.9999999999999992 Inexact Rounded +fmax36484 fma 1 -1 77e-18 -> -0.9999999999999999 Inexact Rounded +fmax36485 fma 1 -1 77e-19 -> -1.000000000000000 Inexact Rounded +fmax36486 fma 1 -1 77e-99 -> -1.000000000000000 Inexact Rounded + +fmax36490 fma 1 -10 77e-14 -> -9.99999999999923 +fmax36491 fma 1 -10 77e-15 -> -9.999999999999923 +fmax36492 fma 1 -10 77e-16 -> -9.999999999999992 Inexact Rounded +fmax36493 fma 1 -10 77e-17 -> -9.999999999999999 Inexact Rounded +fmax36494 fma 1 -10 77e-18 -> -10.00000000000000 Inexact Rounded +fmax36495 fma 1 -10 77e-19 -> -10.00000000000000 Inexact Rounded +fmax36496 fma 1 -10 77e-99 -> -10.00000000000000 Inexact Rounded + +fmax36500 fma 1 77e-14 -1 -> -0.99999999999923 +fmax36501 fma 1 77e-15 -1 -> -0.999999999999923 +fmax36502 fma 1 77e-16 -1 -> -0.9999999999999923 +fmax36503 fma 1 77e-17 -1 -> -0.9999999999999992 Inexact Rounded +fmax36504 fma 1 77e-18 -1 -> -0.9999999999999999 Inexact Rounded +fmax36505 fma 1 77e-19 -1 -> -1.000000000000000 Inexact Rounded +fmax36506 fma 1 77e-99 -1 -> -1.000000000000000 Inexact Rounded + +fmax36510 fma 1 77e-14 -10 -> -9.99999999999923 +fmax36511 fma 1 77e-15 -10 -> -9.999999999999923 +fmax36512 fma 1 77e-16 -10 -> -9.999999999999992 Inexact Rounded +fmax36513 fma 1 77e-17 -10 -> -9.999999999999999 Inexact Rounded +fmax36514 fma 1 77e-18 -10 -> -10.00000000000000 Inexact Rounded +fmax36515 fma 1 77e-19 -10 -> -10.00000000000000 Inexact Rounded +fmax36516 fma 1 77e-99 -10 -> -10.00000000000000 Inexact Rounded + + +-- long operands +fmax36521 fma 1 101234562345678000 0 -> 1.012345623456780E+17 Rounded +fmax36522 fma 1 0 101234562345678000 -> 1.012345623456780E+17 Rounded +fmax36523 fma 1 10123456234567800 0 -> 1.012345623456780E+16 Rounded +fmax36524 fma 1 0 10123456234567800 -> 1.012345623456780E+16 Rounded +fmax36525 fma 1 10123456234567890 0 -> 1.012345623456789E+16 Rounded +fmax36526 fma 1 0 10123456234567890 -> 1.012345623456789E+16 Rounded +fmax36527 fma 1 10123456234567891 0 -> 1.012345623456789E+16 Inexact Rounded +fmax36528 fma 1 0 10123456234567891 -> 1.012345623456789E+16 Inexact Rounded +fmax36529 fma 1 101234562345678901 0 -> 1.012345623456789E+17 Inexact Rounded +fmax36530 fma 1 0 101234562345678901 -> 1.012345623456789E+17 Inexact Rounded +fmax36531 fma 1 10123456234567896 0 -> 1.012345623456790E+16 Inexact Rounded +fmax36532 fma 1 0 10123456234567896 -> 1.012345623456790E+16 Inexact Rounded + +-- verify a query +rounding: down +fmax36561 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded +fmax36562 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded +-- and using decimal64 bounds... +rounding: down +fmax36563 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded +fmax36564 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded + +-- more zeros, etc. +rounding: half_even + +fmax36701 fma 1 5.00 1.00E-3 -> 5.00100 +fmax36702 fma 1 00.00 0.000 -> 0.000 +fmax36703 fma 1 00.00 0E-3 -> 0.000 +fmax36704 fma 1 0E-3 00.00 -> 0.000 + +fmax36710 fma 1 0E+3 00.00 -> 0.00 +fmax36711 fma 1 0E+3 00.0 -> 0.0 +fmax36712 fma 1 0E+3 00. -> 0 +fmax36713 fma 1 0E+3 00.E+1 -> 0E+1 +fmax36714 fma 1 0E+3 00.E+2 -> 0E+2 +fmax36715 fma 1 0E+3 00.E+3 -> 0E+3 +fmax36716 fma 1 0E+3 00.E+4 -> 0E+3 +fmax36717 fma 1 0E+3 00.E+5 -> 0E+3 +fmax36718 fma 1 0E+3 -00.0 -> 0.0 +fmax36719 fma 1 0E+3 -00. -> 0 +fmax36731 fma 1 0E+3 -00.E+1 -> 0E+1 + +fmax36720 fma 1 00.00 0E+3 -> 0.00 +fmax36721 fma 1 00.0 0E+3 -> 0.0 +fmax36722 fma 1 00. 0E+3 -> 0 +fmax36723 fma 1 00.E+1 0E+3 -> 0E+1 +fmax36724 fma 1 00.E+2 0E+3 -> 0E+2 +fmax36725 fma 1 00.E+3 0E+3 -> 0E+3 +fmax36726 fma 1 00.E+4 0E+3 -> 0E+3 +fmax36727 fma 1 00.E+5 0E+3 -> 0E+3 +fmax36728 fma 1 -00.00 0E+3 -> 0.00 +fmax36729 fma 1 -00.0 0E+3 -> 0.0 +fmax36730 fma 1 -00. 0E+3 -> 0 + +fmax36732 fma 1 0 0 -> 0 +fmax36733 fma 1 0 -0 -> 0 +fmax36734 fma 1 -0 0 -> 0 +fmax36735 fma 1 -0 -0 -> -0 -- IEEE 854 special case + +fmax36736 fma 1 1 -1 -> 0 +fmax36737 fma 1 -1 -1 -> -2 +fmax36738 fma 1 1 1 -> 2 +fmax36739 fma 1 -1 1 -> 0 + +fmax36741 fma 1 0 -1 -> -1 +fmax36742 fma 1 -0 -1 -> -1 +fmax36743 fma 1 0 1 -> 1 +fmax36744 fma 1 -0 1 -> 1 +fmax36745 fma 1 -1 0 -> -1 +fmax36746 fma 1 -1 -0 -> -1 +fmax36747 fma 1 1 0 -> 1 +fmax36748 fma 1 1 -0 -> 1 + +fmax36751 fma 1 0.0 -1 -> -1.0 +fmax36752 fma 1 -0.0 -1 -> -1.0 +fmax36753 fma 1 0.0 1 -> 1.0 +fmax36754 fma 1 -0.0 1 -> 1.0 +fmax36755 fma 1 -1.0 0 -> -1.0 +fmax36756 fma 1 -1.0 -0 -> -1.0 +fmax36757 fma 1 1.0 0 -> 1.0 +fmax36758 fma 1 1.0 -0 -> 1.0 + +fmax36761 fma 1 0 -1.0 -> -1.0 +fmax36762 fma 1 -0 -1.0 -> -1.0 +fmax36763 fma 1 0 1.0 -> 1.0 +fmax36764 fma 1 -0 1.0 -> 1.0 +fmax36765 fma 1 -1 0.0 -> -1.0 +fmax36766 fma 1 -1 -0.0 -> -1.0 +fmax36767 fma 1 1 0.0 -> 1.0 +fmax36768 fma 1 1 -0.0 -> 1.0 + +fmax36771 fma 1 0.0 -1.0 -> -1.0 +fmax36772 fma 1 -0.0 -1.0 -> -1.0 +fmax36773 fma 1 0.0 1.0 -> 1.0 +fmax36774 fma 1 -0.0 1.0 -> 1.0 +fmax36775 fma 1 -1.0 0.0 -> -1.0 +fmax36776 fma 1 -1.0 -0.0 -> -1.0 +fmax36777 fma 1 1.0 0.0 -> 1.0 +fmax36778 fma 1 1.0 -0.0 -> 1.0 + +-- Specials +fmax36780 fma 1 -Inf -Inf -> -Infinity +fmax36781 fma 1 -Inf -1000 -> -Infinity +fmax36782 fma 1 -Inf -1 -> -Infinity +fmax36783 fma 1 -Inf -0 -> -Infinity +fmax36784 fma 1 -Inf 0 -> -Infinity +fmax36785 fma 1 -Inf 1 -> -Infinity +fmax36786 fma 1 -Inf 1000 -> -Infinity +fmax36787 fma 1 -1000 -Inf -> -Infinity +fmax36788 fma 1 -Inf -Inf -> -Infinity +fmax36789 fma 1 -1 -Inf -> -Infinity +fmax36790 fma 1 -0 -Inf -> -Infinity +fmax36791 fma 1 0 -Inf -> -Infinity +fmax36792 fma 1 1 -Inf -> -Infinity +fmax36793 fma 1 1000 -Inf -> -Infinity +fmax36794 fma 1 Inf -Inf -> NaN Invalid_operation + +fmax36800 fma 1 Inf -Inf -> NaN Invalid_operation +fmax36801 fma 1 Inf -1000 -> Infinity +fmax36802 fma 1 Inf -1 -> Infinity +fmax36803 fma 1 Inf -0 -> Infinity +fmax36804 fma 1 Inf 0 -> Infinity +fmax36805 fma 1 Inf 1 -> Infinity +fmax36806 fma 1 Inf 1000 -> Infinity +fmax36807 fma 1 Inf Inf -> Infinity +fmax36808 fma 1 -1000 Inf -> Infinity +fmax36809 fma 1 -Inf Inf -> NaN Invalid_operation +fmax36810 fma 1 -1 Inf -> Infinity +fmax36811 fma 1 -0 Inf -> Infinity +fmax36812 fma 1 0 Inf -> Infinity +fmax36813 fma 1 1 Inf -> Infinity +fmax36814 fma 1 1000 Inf -> Infinity +fmax36815 fma 1 Inf Inf -> Infinity + +fmax36821 fma 1 NaN -Inf -> NaN +fmax36822 fma 1 NaN -1000 -> NaN +fmax36823 fma 1 NaN -1 -> NaN +fmax36824 fma 1 NaN -0 -> NaN +fmax36825 fma 1 NaN 0 -> NaN +fmax36826 fma 1 NaN 1 -> NaN +fmax36827 fma 1 NaN 1000 -> NaN +fmax36828 fma 1 NaN Inf -> NaN +fmax36829 fma 1 NaN NaN -> NaN +fmax36830 fma 1 -Inf NaN -> NaN +fmax36831 fma 1 -1000 NaN -> NaN +fmax36832 fma 1 -1 NaN -> NaN +fmax36833 fma 1 -0 NaN -> NaN +fmax36834 fma 1 0 NaN -> NaN +fmax36835 fma 1 1 NaN -> NaN +fmax36836 fma 1 1000 NaN -> NaN +fmax36837 fma 1 Inf NaN -> NaN + +fmax36841 fma 1 sNaN -Inf -> NaN Invalid_operation +fmax36842 fma 1 sNaN -1000 -> NaN Invalid_operation +fmax36843 fma 1 sNaN -1 -> NaN Invalid_operation +fmax36844 fma 1 sNaN -0 -> NaN Invalid_operation +fmax36845 fma 1 sNaN 0 -> NaN Invalid_operation +fmax36846 fma 1 sNaN 1 -> NaN Invalid_operation +fmax36847 fma 1 sNaN 1000 -> NaN Invalid_operation +fmax36848 fma 1 sNaN NaN -> NaN Invalid_operation +fmax36849 fma 1 sNaN sNaN -> NaN Invalid_operation +fmax36850 fma 1 NaN sNaN -> NaN Invalid_operation +fmax36851 fma 1 -Inf sNaN -> NaN Invalid_operation +fmax36852 fma 1 -1000 sNaN -> NaN Invalid_operation +fmax36853 fma 1 -1 sNaN -> NaN Invalid_operation +fmax36854 fma 1 -0 sNaN -> NaN Invalid_operation +fmax36855 fma 1 0 sNaN -> NaN Invalid_operation +fmax36856 fma 1 1 sNaN -> NaN Invalid_operation +fmax36857 fma 1 1000 sNaN -> NaN Invalid_operation +fmax36858 fma 1 Inf sNaN -> NaN Invalid_operation +fmax36859 fma 1 NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +fmax36861 fma 1 NaN1 -Inf -> NaN1 +fmax36862 fma 1 +NaN2 -1000 -> NaN2 +fmax36863 fma 1 NaN3 1000 -> NaN3 +fmax36864 fma 1 NaN4 Inf -> NaN4 +fmax36865 fma 1 NaN5 +NaN6 -> NaN5 +fmax36866 fma 1 -Inf NaN7 -> NaN7 +fmax36867 fma 1 -1000 NaN8 -> NaN8 +fmax36868 fma 1 1000 NaN9 -> NaN9 +fmax36869 fma 1 Inf +NaN10 -> NaN10 +fmax36871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation +fmax36872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation +fmax36873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation +fmax36874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation +fmax36875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation +fmax36876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation +fmax36877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation +fmax36878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation +fmax36879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation +fmax36880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation +fmax36881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation +fmax36882 fma 1 -NaN26 NaN28 -> -NaN26 +fmax36883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation +fmax36884 fma 1 1000 -NaN30 -> -NaN30 +fmax36885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- now the case where we can get underflow but the result is normal +-- [note this can't happen if the operands are also bounded, as we +-- cannot represent 1E-399, for example] + +fmax36571 fma 1 1E-383 0 -> 1E-383 +fmax36572 fma 1 1E-384 0 -> 1E-384 Subnormal +fmax36573 fma 1 1E-383 1E-384 -> 1.1E-383 +fmax36574 subtract 1E-383 1E-384 -> 9E-384 Subnormal + +-- Here we explore the boundary of rounding a subnormal to Nmin +fmax36575 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal +fmax36576 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal +fmax36577 subtract 1E-383 1E-399 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax36578 subtract 1E-383 1E-400 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax36579 subtract 1E-383 1E-401 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax36580 subtract 1E-383 1E-402 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded + +-- check overflow edge case +-- 1234567890123456 +fmax36972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 +fmax36973 fma 1 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded +fmax36974 fma 1 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded +fmax36975 fma 1 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded +fmax36976 fma 1 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded +fmax36977 fma 1 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded +fmax36978 fma 1 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded +fmax36979 fma 1 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded +fmax36980 fma 1 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded +fmax36981 fma 1 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded +fmax36982 fma 1 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded +fmax36983 fma 1 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded +fmax36984 fma 1 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded + +fmax36985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 +fmax36986 fma 1 -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded +fmax36987 fma 1 -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded +fmax36988 fma 1 -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded +fmax36989 fma 1 -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded +fmax36990 fma 1 -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded +fmax36991 fma 1 -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded +fmax36992 fma 1 -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded +fmax36993 fma 1 -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded +fmax36994 fma 1 -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded +fmax36995 fma 1 -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded +fmax36996 fma 1 -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded +fmax36997 fma 1 -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +fmax361100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact +fmax361101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact +fmax361103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact +fmax361104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact +fmax361105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact +fmax361106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact +fmax361107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact +fmax361108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact +fmax361109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact + +rounding: ceiling +fmax361110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact +fmax361111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact +fmax361113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact +fmax361114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact +fmax361115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact +fmax361116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact +fmax361117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact +fmax361118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact +fmax361119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +fmax361300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded +fmax361310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded +fmax361311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded +fmax361312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded +fmax361313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded +fmax361314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded +fmax361315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded +fmax361316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded +fmax361317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded +fmax361318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded +fmax361319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded +fmax361320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded +fmax361321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded +fmax361322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded +fmax361323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded +fmax361324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded +fmax361325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded +fmax361336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded +fmax361337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded +fmax361338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded +fmax361339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded + +fmax361340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded +fmax361341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded + +fmax361349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded +fmax361350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded +fmax361351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded +fmax361352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded +fmax361353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded +fmax361354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded +fmax361355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded +fmax361356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded +fmax361357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded +fmax361358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded +fmax361359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded +fmax361360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded +fmax361361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded +fmax361362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded +fmax361363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded +fmax361364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded +fmax361365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded +fmax361377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded +fmax361378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded +fmax361379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded +fmax361380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded +fmax361381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded +fmax361382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded +fmax361393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded +fmax361394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded +fmax361395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded +fmax361396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +fmax361420 fma 1 0 1.123456789012345 -> 1.123456789012345 +fmax361421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 +fmax361422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 +fmax361423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 +fmax361424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 +fmax361425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 +fmax361426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 +fmax361427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 +fmax361428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 +fmax361429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 +fmax361430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 +fmax361431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 +fmax361432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 +fmax361433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 +fmax361434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 +fmax361435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 +fmax361436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 +fmax361437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 +fmax361438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 +fmax361439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 + +-- same, reversed 0 +fmax361440 fma 1 1.123456789012345 0 -> 1.123456789012345 +fmax361441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 +fmax361442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 +fmax361443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 +fmax361444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 +fmax361445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 +fmax361446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 +fmax361447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 +fmax361448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 +fmax361449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 +fmax361450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 +fmax361451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 +fmax361452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 +fmax361453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 +fmax361454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 +fmax361455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 +fmax361456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 +fmax361457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 +fmax361458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 +fmax361459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 + +-- same, Es on the 0 +fmax361460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 +fmax361461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 +fmax361462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 +fmax361463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 +fmax361464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 +fmax361465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 +fmax361466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 +fmax361467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 +fmax361468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 +fmax361469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 +fmax361470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 +fmax361471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 +fmax361472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 +fmax361473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 +fmax361474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 +fmax361475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 +-- next four flag Rounded because the 0 extends the result +fmax361476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded +fmax361477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded +fmax361478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded +fmax361479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +fmax361500 fma 1 0 0E-19 -> 0E-19 +fmax361501 fma 1 -0 0E-19 -> 0E-19 +fmax361502 fma 1 0 -0E-19 -> 0E-19 +fmax361503 fma 1 -0 -0E-19 -> -0E-19 +fmax361504 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361505 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361506 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361507 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361511 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361512 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361513 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361514 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361515 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361516 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361517 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361518 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: half_down +-- exact zeros from zeros +fmax361520 fma 1 0 0E-19 -> 0E-19 +fmax361521 fma 1 -0 0E-19 -> 0E-19 +fmax361522 fma 1 0 -0E-19 -> 0E-19 +fmax361523 fma 1 -0 -0E-19 -> -0E-19 +fmax361524 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361525 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361526 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361527 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361531 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361532 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361533 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361534 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361535 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361536 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361537 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361538 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: half_even +-- exact zeros from zeros +fmax361540 fma 1 0 0E-19 -> 0E-19 +fmax361541 fma 1 -0 0E-19 -> 0E-19 +fmax361542 fma 1 0 -0E-19 -> 0E-19 +fmax361543 fma 1 -0 -0E-19 -> -0E-19 +fmax361544 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361545 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361546 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361547 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361551 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361552 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361553 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361554 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361555 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361556 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361557 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361558 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: up +-- exact zeros from zeros +fmax361560 fma 1 0 0E-19 -> 0E-19 +fmax361561 fma 1 -0 0E-19 -> 0E-19 +fmax361562 fma 1 0 -0E-19 -> 0E-19 +fmax361563 fma 1 -0 -0E-19 -> -0E-19 +fmax361564 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361565 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361566 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361567 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361571 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361572 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361573 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +fmax361574 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +-- some exact zeros from non-zeros +fmax361575 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361576 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361577 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361578 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow + +rounding: down +-- exact zeros from zeros +fmax361580 fma 1 0 0E-19 -> 0E-19 +fmax361581 fma 1 -0 0E-19 -> 0E-19 +fmax361582 fma 1 0 -0E-19 -> 0E-19 +fmax361583 fma 1 -0 -0E-19 -> -0E-19 +fmax361584 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361585 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361586 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361587 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361591 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361592 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361593 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361594 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361595 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361596 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361597 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361598 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: ceiling +-- exact zeros from zeros +fmax361600 fma 1 0 0E-19 -> 0E-19 +fmax361601 fma 1 -0 0E-19 -> 0E-19 +fmax361602 fma 1 0 -0E-19 -> 0E-19 +fmax361603 fma 1 -0 -0E-19 -> -0E-19 +fmax361604 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361605 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361606 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361607 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361611 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361612 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361613 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361614 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361615 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361616 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361617 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361618 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +fmax361620 fma 1 0 0E-19 -> 0E-19 +fmax361621 fma 1 -0 0E-19 -> -0E-19 -- * +fmax361622 fma 1 0 -0E-19 -> -0E-19 -- * +fmax361623 fma 1 -0 -0E-19 -> -0E-19 +fmax361624 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361625 fma 1 -0E-400 0E-19 -> -0E-398 Clamped -- * +fmax361626 fma 1 0E-400 -0E-19 -> -0E-398 Clamped -- * +fmax361627 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361631 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361632 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361633 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +fmax361634 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +-- some exact zeros from non-zeros +fmax361635 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361636 fma 1 -1E-401 1E-401 -> -0E-398 Clamped -- * +fmax361637 fma 1 1E-401 -1E-401 -> -0E-398 Clamped -- * +fmax361638 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow + +-- Examples from SQL proposal (Krishna Kulkarni) +fmax361701 fma 1 130E-2 120E-2 -> 2.50 +fmax361702 fma 1 130E-2 12E-1 -> 2.50 +fmax361703 fma 1 130E-2 1E0 -> 2.30 +fmax361704 fma 1 1E2 1E4 -> 1.01E+4 +fmax361705 subtract 130E-2 120E-2 -> 0.10 +fmax361706 subtract 130E-2 12E-1 -> 0.10 +fmax361707 subtract 130E-2 1E0 -> 0.30 +fmax361708 subtract 1E2 1E4 -> -9.9E+3 + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +fmax362001 fma 1 1234567890123456 1 -> 1234567890123457 +fmax362002 fma 1 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded +fmax362003 fma 1 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded +fmax362004 fma 1 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded +fmax362005 fma 1 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded +fmax362006 fma 1 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded +fmax362007 fma 1 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded +fmax362008 fma 1 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded +fmax362009 fma 1 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded +fmax362010 fma 1 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded +fmax362011 fma 1 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded +fmax362012 fma 1 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded +fmax362013 fma 1 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded +fmax362014 fma 1 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded +fmax362015 fma 1 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded +fmax362016 fma 1 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded +fmax362017 fma 1 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded +fmax362018 fma 1 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded +fmax362019 fma 1 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded +fmax362020 fma 1 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded +fmax362021 fma 1 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded + +-- widening second argument at gap +fmax362030 fma 1 12345678 1 -> 12345679 +fmax362031 fma 1 12345678 0.1 -> 12345678.1 +fmax362032 fma 1 12345678 0.12 -> 12345678.12 +fmax362033 fma 1 12345678 0.123 -> 12345678.123 +fmax362034 fma 1 12345678 0.1234 -> 12345678.1234 +fmax362035 fma 1 12345678 0.12345 -> 12345678.12345 +fmax362036 fma 1 12345678 0.123456 -> 12345678.123456 +fmax362037 fma 1 12345678 0.1234567 -> 12345678.1234567 +fmax362038 fma 1 12345678 0.12345678 -> 12345678.12345678 +fmax362039 fma 1 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded +fmax362040 fma 1 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded +fmax362041 fma 1 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded +fmax362042 fma 1 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded +fmax362043 fma 1 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded +fmax362044 fma 1 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded +fmax362045 fma 1 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded +fmax362046 fma 1 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded +fmax362047 fma 1 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded +fmax362048 fma 1 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded +fmax362049 fma 1 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +fmax362050 fma 1 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded +fmax362051 fma 1 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded +fmax362052 fma 1 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded +fmax362053 fma 1 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded +fmax362054 fma 1 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded +fmax362055 fma 1 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded +fmax362056 fma 1 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded +fmax362057 fma 1 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded +fmax362060 fma 1 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded +fmax362061 fma 1 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded +fmax362062 fma 1 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded +fmax362063 fma 1 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded +fmax362064 fma 1 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded +fmax362065 fma 1 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded +fmax362066 fma 1 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded +fmax362067 fma 1 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +fmax362070 fma 1 12345678 1E-8 -> 12345678.00000001 +fmax362071 fma 1 12345678 1E-9 -> 12345678.00000001 Inexact Rounded +fmax362072 fma 1 12345678 1E-10 -> 12345678.00000001 Inexact Rounded +fmax362073 fma 1 12345678 1E-11 -> 12345678.00000001 Inexact Rounded +fmax362074 fma 1 12345678 1E-12 -> 12345678.00000001 Inexact Rounded +fmax362075 fma 1 12345678 1E-13 -> 12345678.00000001 Inexact Rounded +fmax362076 fma 1 12345678 1E-14 -> 12345678.00000001 Inexact Rounded +fmax362077 fma 1 12345678 1E-15 -> 12345678.00000001 Inexact Rounded +fmax362078 fma 1 12345678 1E-16 -> 12345678.00000001 Inexact Rounded +fmax362079 fma 1 12345678 1E-17 -> 12345678.00000001 Inexact Rounded +fmax362080 fma 1 12345678 1E-18 -> 12345678.00000001 Inexact Rounded +fmax362081 fma 1 12345678 1E-19 -> 12345678.00000001 Inexact Rounded +fmax362082 fma 1 12345678 1E-20 -> 12345678.00000001 Inexact Rounded +fmax362083 fma 1 12345678 1E-25 -> 12345678.00000001 Inexact Rounded +fmax362084 fma 1 12345678 1E-30 -> 12345678.00000001 Inexact Rounded +fmax362085 fma 1 12345678 1E-31 -> 12345678.00000001 Inexact Rounded +fmax362086 fma 1 12345678 1E-32 -> 12345678.00000001 Inexact Rounded +fmax362087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexact Rounded +fmax362088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded +fmax362089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded + +-- payload decapitate x3 +precision: 5 +fmax363000 fma 1 1 sNaN1234567890 -> NaN67890 Invalid_operation +fmax363001 fma 1 -sNaN1234512345 1 -> -NaN12345 Invalid_operation +fmax363002 fma sNaN1234554321 1 1 -> NaN54321 Invalid_operation + +-- Null tests +fmax39990 fma 1 10 # -> NaN Invalid_operation +fmax39991 fma 1 # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/invert.decTest b/Lib/test/decimaltestdata/invert.decTest index 9ef5a9137ce..a2f7be5a779 100644 --- a/Lib/test/decimaltestdata/invert.decTest +++ b/Lib/test/decimaltestdata/invert.decTest @@ -1,176 +1,176 @@ ------------------------------------------------------------------------- --- invert.decTest -- digitwise logical INVERT -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check (truth table), and examples from decArith -invx001 invert 0 -> 111111111 -invx002 invert 1 -> 111111110 -invx003 invert 10 -> 111111101 -invx004 invert 111111111 -> 0 -invx005 invert 000000000 -> 111111111 -invx006 invert 101010101 -> '10101010' --- and at msd and msd-1 -invx007 invert 000000000 -> 111111111 -invx009 invert 100000000 -> 11111111 -invx011 invert 000000000 -> 111111111 -invx013 invert 010000000 -> 101111111 - --- Various lengths --- 123456789 123456789 -invx021 invert 111111111 -> 0 -invx022 invert 111111111111 -> 0 -invx023 invert 11111111 -> 100000000 -invx025 invert 1111111 -> 110000000 -invx026 invert 111111 -> 111000000 -invx027 invert 11111 -> 111100000 -invx028 invert 1111 -> 111110000 -invx029 invert 111 -> 111111000 -invx031 invert 11 -> 111111100 -invx032 invert 1 -> 111111110 -invx033 invert 111111111111 -> 0 -invx034 invert 11111111111 -> 0 -invx035 invert 1111111111 -> 0 -invx036 invert 111111111 -> 0 - -invx080 invert 011111111 -> 100000000 -invx081 invert 101111111 -> 10000000 -invx082 invert 110111111 -> 1000000 -invx083 invert 111011111 -> 100000 -invx084 invert 111101111 -> 10000 -invx085 invert 111110111 -> 1000 -invx086 invert 111111011 -> 100 -invx087 invert 111111101 -> 10 -invx088 invert 111111110 -> 1 -invx089 invert 011111011 -> 100000100 -invx090 invert 101111101 -> 10000010 -invx091 invert 110111110 -> 1000001 -invx092 invert 111011101 -> 100010 -invx093 invert 111101011 -> 10100 -invx094 invert 111110111 -> 1000 -invx095 invert 111101011 -> 10100 -invx096 invert 111011101 -> 100010 -invx097 invert 110111110 -> 1000001 -invx098 invert 101111101 -> 10000010 -invx099 invert 011111011 -> 100000100 - --- non-0/1 should not be accepted, nor should signs -invx220 invert 111111112 -> NaN Invalid_operation -invx221 invert 333333333 -> NaN Invalid_operation -invx222 invert 555555555 -> NaN Invalid_operation -invx223 invert 777777777 -> NaN Invalid_operation -invx224 invert 999999999 -> NaN Invalid_operation -invx225 invert 222222222 -> NaN Invalid_operation -invx226 invert 444444444 -> NaN Invalid_operation -invx227 invert 666666666 -> NaN Invalid_operation -invx228 invert 888888888 -> NaN Invalid_operation -invx229 invert 999999999 -> NaN Invalid_operation -invx230 invert 999999999 -> NaN Invalid_operation -invx231 invert 999999999 -> NaN Invalid_operation -invx232 invert 999999999 -> NaN Invalid_operation --- a few randoms -invx240 invert 567468689 -> NaN Invalid_operation -invx241 invert 567367689 -> NaN Invalid_operation -invx242 invert -631917772 -> NaN Invalid_operation -invx243 invert -756253257 -> NaN Invalid_operation -invx244 invert 835590149 -> NaN Invalid_operation --- test MSD -invx250 invert 200000000 -> NaN Invalid_operation -invx251 invert 300000000 -> NaN Invalid_operation -invx252 invert 400000000 -> NaN Invalid_operation -invx253 invert 500000000 -> NaN Invalid_operation -invx254 invert 600000000 -> NaN Invalid_operation -invx255 invert 700000000 -> NaN Invalid_operation -invx256 invert 800000000 -> NaN Invalid_operation -invx257 invert 900000000 -> NaN Invalid_operation --- test MSD-1 -invx270 invert 021000000 -> NaN Invalid_operation -invx271 invert 030100000 -> NaN Invalid_operation -invx272 invert 040010000 -> NaN Invalid_operation -invx273 invert 050001000 -> NaN Invalid_operation -invx274 invert 160000100 -> NaN Invalid_operation -invx275 invert 170000010 -> NaN Invalid_operation -invx276 invert 180000000 -> NaN Invalid_operation -invx277 invert 190000000 -> NaN Invalid_operation --- test LSD -invx280 invert 000000002 -> NaN Invalid_operation -invx281 invert 000000003 -> NaN Invalid_operation -invx282 invert 000000004 -> NaN Invalid_operation -invx283 invert 000000005 -> NaN Invalid_operation -invx284 invert 101000006 -> NaN Invalid_operation -invx285 invert 100100007 -> NaN Invalid_operation -invx286 invert 100010008 -> NaN Invalid_operation -invx287 invert 100001009 -> NaN Invalid_operation --- test Middie -invx288 invert 000020000 -> NaN Invalid_operation -invx289 invert 000030001 -> NaN Invalid_operation -invx290 invert 000040000 -> NaN Invalid_operation -invx291 invert 000050000 -> NaN Invalid_operation -invx292 invert 101060000 -> NaN Invalid_operation -invx293 invert 100170010 -> NaN Invalid_operation -invx294 invert 100080100 -> NaN Invalid_operation -invx295 invert 100091000 -> NaN Invalid_operation --- signs -invx296 invert -100001000 -> NaN Invalid_operation -invx299 invert 100001000 -> 11110111 - --- Nmax, Nmin, Ntiny -invx341 invert 9.99999999E+999 -> NaN Invalid_operation -invx342 invert 1E-999 -> NaN Invalid_operation -invx343 invert 1.00000000E-999 -> NaN Invalid_operation -invx344 invert 1E-1007 -> NaN Invalid_operation -invx345 invert -1E-1007 -> NaN Invalid_operation -invx346 invert -1.00000000E-999 -> NaN Invalid_operation -invx347 invert -1E-999 -> NaN Invalid_operation -invx348 invert -9.99999999E+999 -> NaN Invalid_operation - --- A few other non-integers -invx361 invert 1.0 -> NaN Invalid_operation -invx362 invert 1E+1 -> NaN Invalid_operation -invx363 invert 0.0 -> NaN Invalid_operation -invx364 invert 0E+1 -> NaN Invalid_operation -invx365 invert 9.9 -> NaN Invalid_operation -invx366 invert 9E+1 -> NaN Invalid_operation - --- All Specials are in error -invx788 invert -Inf -> NaN Invalid_operation -invx794 invert Inf -> NaN Invalid_operation -invx821 invert NaN -> NaN Invalid_operation -invx841 invert sNaN -> NaN Invalid_operation --- propagating NaNs -invx861 invert NaN1 -> NaN Invalid_operation -invx862 invert +NaN2 -> NaN Invalid_operation -invx863 invert NaN3 -> NaN Invalid_operation -invx864 invert NaN4 -> NaN Invalid_operation -invx865 invert NaN5 -> NaN Invalid_operation -invx871 invert sNaN11 -> NaN Invalid_operation -invx872 invert sNaN12 -> NaN Invalid_operation -invx873 invert sNaN13 -> NaN Invalid_operation -invx874 invert sNaN14 -> NaN Invalid_operation -invx875 invert sNaN15 -> NaN Invalid_operation -invx876 invert NaN16 -> NaN Invalid_operation -invx881 invert +NaN25 -> NaN Invalid_operation -invx882 invert -NaN26 -> NaN Invalid_operation -invx883 invert -sNaN27 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- invert.decTest -- digitwise logical INVERT -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check (truth table), and examples from decArith +invx001 invert 0 -> 111111111 +invx002 invert 1 -> 111111110 +invx003 invert 10 -> 111111101 +invx004 invert 111111111 -> 0 +invx005 invert 000000000 -> 111111111 +invx006 invert 101010101 -> '10101010' +-- and at msd and msd-1 +invx007 invert 000000000 -> 111111111 +invx009 invert 100000000 -> 11111111 +invx011 invert 000000000 -> 111111111 +invx013 invert 010000000 -> 101111111 + +-- Various lengths +-- 123456789 123456789 +invx021 invert 111111111 -> 0 +invx022 invert 111111111111 -> 0 +invx023 invert 11111111 -> 100000000 +invx025 invert 1111111 -> 110000000 +invx026 invert 111111 -> 111000000 +invx027 invert 11111 -> 111100000 +invx028 invert 1111 -> 111110000 +invx029 invert 111 -> 111111000 +invx031 invert 11 -> 111111100 +invx032 invert 1 -> 111111110 +invx033 invert 111111111111 -> 0 +invx034 invert 11111111111 -> 0 +invx035 invert 1111111111 -> 0 +invx036 invert 111111111 -> 0 + +invx080 invert 011111111 -> 100000000 +invx081 invert 101111111 -> 10000000 +invx082 invert 110111111 -> 1000000 +invx083 invert 111011111 -> 100000 +invx084 invert 111101111 -> 10000 +invx085 invert 111110111 -> 1000 +invx086 invert 111111011 -> 100 +invx087 invert 111111101 -> 10 +invx088 invert 111111110 -> 1 +invx089 invert 011111011 -> 100000100 +invx090 invert 101111101 -> 10000010 +invx091 invert 110111110 -> 1000001 +invx092 invert 111011101 -> 100010 +invx093 invert 111101011 -> 10100 +invx094 invert 111110111 -> 1000 +invx095 invert 111101011 -> 10100 +invx096 invert 111011101 -> 100010 +invx097 invert 110111110 -> 1000001 +invx098 invert 101111101 -> 10000010 +invx099 invert 011111011 -> 100000100 + +-- non-0/1 should not be accepted, nor should signs +invx220 invert 111111112 -> NaN Invalid_operation +invx221 invert 333333333 -> NaN Invalid_operation +invx222 invert 555555555 -> NaN Invalid_operation +invx223 invert 777777777 -> NaN Invalid_operation +invx224 invert 999999999 -> NaN Invalid_operation +invx225 invert 222222222 -> NaN Invalid_operation +invx226 invert 444444444 -> NaN Invalid_operation +invx227 invert 666666666 -> NaN Invalid_operation +invx228 invert 888888888 -> NaN Invalid_operation +invx229 invert 999999999 -> NaN Invalid_operation +invx230 invert 999999999 -> NaN Invalid_operation +invx231 invert 999999999 -> NaN Invalid_operation +invx232 invert 999999999 -> NaN Invalid_operation +-- a few randoms +invx240 invert 567468689 -> NaN Invalid_operation +invx241 invert 567367689 -> NaN Invalid_operation +invx242 invert -631917772 -> NaN Invalid_operation +invx243 invert -756253257 -> NaN Invalid_operation +invx244 invert 835590149 -> NaN Invalid_operation +-- test MSD +invx250 invert 200000000 -> NaN Invalid_operation +invx251 invert 300000000 -> NaN Invalid_operation +invx252 invert 400000000 -> NaN Invalid_operation +invx253 invert 500000000 -> NaN Invalid_operation +invx254 invert 600000000 -> NaN Invalid_operation +invx255 invert 700000000 -> NaN Invalid_operation +invx256 invert 800000000 -> NaN Invalid_operation +invx257 invert 900000000 -> NaN Invalid_operation +-- test MSD-1 +invx270 invert 021000000 -> NaN Invalid_operation +invx271 invert 030100000 -> NaN Invalid_operation +invx272 invert 040010000 -> NaN Invalid_operation +invx273 invert 050001000 -> NaN Invalid_operation +invx274 invert 160000100 -> NaN Invalid_operation +invx275 invert 170000010 -> NaN Invalid_operation +invx276 invert 180000000 -> NaN Invalid_operation +invx277 invert 190000000 -> NaN Invalid_operation +-- test LSD +invx280 invert 000000002 -> NaN Invalid_operation +invx281 invert 000000003 -> NaN Invalid_operation +invx282 invert 000000004 -> NaN Invalid_operation +invx283 invert 000000005 -> NaN Invalid_operation +invx284 invert 101000006 -> NaN Invalid_operation +invx285 invert 100100007 -> NaN Invalid_operation +invx286 invert 100010008 -> NaN Invalid_operation +invx287 invert 100001009 -> NaN Invalid_operation +-- test Middie +invx288 invert 000020000 -> NaN Invalid_operation +invx289 invert 000030001 -> NaN Invalid_operation +invx290 invert 000040000 -> NaN Invalid_operation +invx291 invert 000050000 -> NaN Invalid_operation +invx292 invert 101060000 -> NaN Invalid_operation +invx293 invert 100170010 -> NaN Invalid_operation +invx294 invert 100080100 -> NaN Invalid_operation +invx295 invert 100091000 -> NaN Invalid_operation +-- signs +invx296 invert -100001000 -> NaN Invalid_operation +invx299 invert 100001000 -> 11110111 + +-- Nmax, Nmin, Ntiny +invx341 invert 9.99999999E+999 -> NaN Invalid_operation +invx342 invert 1E-999 -> NaN Invalid_operation +invx343 invert 1.00000000E-999 -> NaN Invalid_operation +invx344 invert 1E-1007 -> NaN Invalid_operation +invx345 invert -1E-1007 -> NaN Invalid_operation +invx346 invert -1.00000000E-999 -> NaN Invalid_operation +invx347 invert -1E-999 -> NaN Invalid_operation +invx348 invert -9.99999999E+999 -> NaN Invalid_operation + +-- A few other non-integers +invx361 invert 1.0 -> NaN Invalid_operation +invx362 invert 1E+1 -> NaN Invalid_operation +invx363 invert 0.0 -> NaN Invalid_operation +invx364 invert 0E+1 -> NaN Invalid_operation +invx365 invert 9.9 -> NaN Invalid_operation +invx366 invert 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +invx788 invert -Inf -> NaN Invalid_operation +invx794 invert Inf -> NaN Invalid_operation +invx821 invert NaN -> NaN Invalid_operation +invx841 invert sNaN -> NaN Invalid_operation +-- propagating NaNs +invx861 invert NaN1 -> NaN Invalid_operation +invx862 invert +NaN2 -> NaN Invalid_operation +invx863 invert NaN3 -> NaN Invalid_operation +invx864 invert NaN4 -> NaN Invalid_operation +invx865 invert NaN5 -> NaN Invalid_operation +invx871 invert sNaN11 -> NaN Invalid_operation +invx872 invert sNaN12 -> NaN Invalid_operation +invx873 invert sNaN13 -> NaN Invalid_operation +invx874 invert sNaN14 -> NaN Invalid_operation +invx875 invert sNaN15 -> NaN Invalid_operation +invx876 invert NaN16 -> NaN Invalid_operation +invx881 invert +NaN25 -> NaN Invalid_operation +invx882 invert -NaN26 -> NaN Invalid_operation +invx883 invert -sNaN27 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ln.decTest b/Lib/test/decimaltestdata/ln.decTest index efcb2a66065..f602af23775 100644 --- a/Lib/test/decimaltestdata/ln.decTest +++ b/Lib/test/decimaltestdata/ln.decTest @@ -1,611 +1,611 @@ ------------------------------------------------------------------------- --- ln.decTest -- decimal natural logarithm -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 16 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- basics (examples in specification) -precision: 9 -lnxs001 ln 0 -> -Infinity -lnxs002 ln 1.000 -> 0 -lnxs003 ln 2.71828183 -> 1.00000000 Inexact Rounded -lnxs004 ln 10 -> 2.30258509 Inexact Rounded -lnxs005 ln +Infinity -> Infinity - - --- basics -precision: 16 -lnx0001 ln 0 -> -Infinity -lnx0002 ln 1E-9 -> -20.72326583694641 Inexact Rounded -lnx0003 ln 0.0007 -> -7.264430222920869 Inexact Rounded -lnx0004 ln 0.1 -> -2.302585092994046 Inexact Rounded -lnx0005 ln 0.7 -> -0.3566749439387324 Inexact Rounded -lnx0006 ln 1 -> 0 -lnx0007 ln 1.000 -> 0 -lnx0008 ln 1.5 -> 0.4054651081081644 Inexact Rounded -lnx0009 ln 2 -> 0.6931471805599453 Inexact Rounded -lnx0010 ln 2.718281828459045 -> 0.9999999999999999 Inexact Rounded -lnx0011 ln 2.718281828459046 -> 1.000000000000000 Inexact Rounded -lnx0012 ln 2.718281828459047 -> 1.000000000000001 Inexact Rounded -lnx0013 ln 10 -> 2.302585092994046 Inexact Rounded -lnx0014 ln 10.5 -> 2.351375257163478 Inexact Rounded -lnx0015 ln 9999 -> 9.210240366975849 Inexact Rounded -lnx0016 ln 1E6 -> 13.81551055796427 Inexact Rounded -lnx0017 ln 1E+9 -> 20.72326583694641 Inexact Rounded -lnx0018 ln +Infinity -> Infinity - --- notable cases --- negatives -lnx0021 ln -1E-9 -> NaN Invalid_operation -lnx0022 ln -0.0007 -> NaN Invalid_operation -lnx0023 ln -0.1 -> NaN Invalid_operation -lnx0024 ln -0.7 -> NaN Invalid_operation -lnx0025 ln -1 -> NaN Invalid_operation -lnx0026 ln -1.5 -> NaN Invalid_operation -lnx0027 ln -2 -> NaN Invalid_operation -lnx0029 ln -10.5 -> NaN Invalid_operation -lnx0028 ln -9999 -> NaN Invalid_operation -lnx0030 ln -2.718281828459045 -> NaN Invalid_operation -lnx0031 ln -2.718281828459046 -> NaN Invalid_operation -lnx0032 ln -0 -> -Infinity -lnx0033 ln -0E+17 -> -Infinity -lnx0034 ln -0E-17 -> -Infinity --- other zeros -lnx0041 ln 0 -> -Infinity -lnx0042 ln 0E+17 -> -Infinity -lnx0043 ln 0E-17 -> -Infinity --- infinities -lnx0045 ln -Infinity -> NaN Invalid_operation -lnx0046 ln +Infinity -> Infinity --- ones -lnx0050 ln 1 -> 0 -lnx0051 ln 1.0 -> 0 -lnx0052 ln 1.000000000000000 -> 0 -lnx0053 ln 1.000000000000000000 -> 0 - --- lower precision basics -Precision: 7 -lnx0101 ln 0 -> -Infinity -lnx0102 ln 1E-9 -> -20.72327 Inexact Rounded -lnx0103 ln 0.0007 -> -7.264430 Inexact Rounded -lnx0104 ln 0.1 -> -2.302585 Inexact Rounded -lnx0105 ln 0.7 -> -0.3566749 Inexact Rounded -lnx0106 ln 1 -> 0 -lnx0107 ln 1.5 -> 0.4054651 Inexact Rounded -lnx0108 ln 2 -> 0.6931472 Inexact Rounded -lnx0109 ln 2.718281828459045 -> 1.000000 Inexact Rounded -lnx0110 ln 2.718281828459046 -> 1.000000 Inexact Rounded -lnx0111 ln 2.718281828459047 -> 1.000000 Inexact Rounded -lnx0112 ln 10 -> 2.302585 Inexact Rounded -lnx0113 ln 10.5 -> 2.351375 Inexact Rounded -lnx0114 ln 9999 -> 9.210240 Inexact Rounded -lnx0115 ln 1E6 -> 13.81551 Inexact Rounded -lnx0116 ln 1E+9 -> 20.72327 Inexact Rounded -lnx0117 ln +Infinity -> Infinity -Precision: 2 -lnx0121 ln 0 -> -Infinity -lnx0122 ln 1E-9 -> -21 Inexact Rounded -lnx0123 ln 0.0007 -> -7.3 Inexact Rounded -lnx0124 ln 0.1 -> -2.3 Inexact Rounded -lnx0125 ln 0.7 -> -0.36 Inexact Rounded -lnx0126 ln 1 -> 0 -lnx0127 ln 1.5 -> 0.41 Inexact Rounded -lnx0128 ln 2 -> 0.69 Inexact Rounded -lnx0129 ln 2.718281828459045 -> 1.0 Inexact Rounded -lnx0130 ln 2.718281828459046 -> 1.0 Inexact Rounded -lnx0131 ln 2.718281828459047 -> 1.0 Inexact Rounded -lnx0132 ln 10 -> 2.3 Inexact Rounded -lnx0133 ln 10.5 -> 2.4 Inexact Rounded -lnx0134 ln 9999 -> 9.2 Inexact Rounded -lnx0135 ln 1E6 -> 14 Inexact Rounded -lnx0136 ln 1E+9 -> 21 Inexact Rounded -lnx0137 ln +Infinity -> Infinity -Precision: 1 -lnx0141 ln 0 -> -Infinity -lnx0142 ln 1E-9 -> -2E+1 Inexact Rounded -lnx0143 ln 0.0007 -> -7 Inexact Rounded -lnx0144 ln 0.1 -> -2 Inexact Rounded -lnx0145 ln 0.7 -> -0.4 Inexact Rounded -lnx0146 ln 1 -> 0 -lnx0147 ln 1.5 -> 0.4 Inexact Rounded -lnx0148 ln 2 -> 0.7 Inexact Rounded -lnx0149 ln 2.718281828459045 -> 1 Inexact Rounded -lnx0150 ln 2.718281828459046 -> 1 Inexact Rounded -lnx0151 ln 2.718281828459047 -> 1 Inexact Rounded -lnx0152 ln 10 -> 2 Inexact Rounded -lnx0153 ln 10.5 -> 2 Inexact Rounded -lnx0154 ln 9999 -> 9 Inexact Rounded -lnx0155 ln 1E6 -> 1E+1 Inexact Rounded -lnx0156 ln 1E+9 -> 2E+1 Inexact Rounded -lnx0157 ln +Infinity -> Infinity - --- group low-precision ln(1)s: -precision: 1 -lnx0161 ln 1 -> 0 -precision: 2 -lnx0162 ln 1 -> 0 -precision: 3 -lnx0163 ln 1 -> 0 -precision: 4 -lnx0164 ln 1 -> 0 -precision: 5 -lnx0165 ln 1 -> 0 -precision: 6 -lnx0166 ln 1 -> 0 -precision: 7 -lnx0167 ln 1 -> 0 -precision: 8 -lnx0168 ln 1 -> 0 - --- edge-test ln(2) and ln(10) in case of lookasides -precision: 45 -lnx201 ln 2 -> 0.693147180559945309417232121458176568075500134 Inexact Rounded -lnx202 ln 10 -> 2.30258509299404568401799145468436420760110149 Inexact Rounded -precision: 44 -lnx203 ln 2 -> 0.69314718055994530941723212145817656807550013 Inexact Rounded -lnx204 ln 10 -> 2.3025850929940456840179914546843642076011015 Inexact Rounded -precision: 43 -lnx205 ln 2 -> 0.6931471805599453094172321214581765680755001 Inexact Rounded -lnx206 ln 10 -> 2.302585092994045684017991454684364207601101 Inexact Rounded -precision: 42 -lnx207 ln 2 -> 0.693147180559945309417232121458176568075500 Inexact Rounded -lnx208 ln 10 -> 2.30258509299404568401799145468436420760110 Inexact Rounded -precision: 41 -lnx209 ln 2 -> 0.69314718055994530941723212145817656807550 Inexact Rounded -lnx210 ln 10 -> 2.3025850929940456840179914546843642076011 Inexact Rounded -precision: 40 -lnx211 ln 2 -> 0.6931471805599453094172321214581765680755 Inexact Rounded -lnx212 ln 10 -> 2.302585092994045684017991454684364207601 Inexact Rounded -precision: 39 -lnx213 ln 2 -> 0.693147180559945309417232121458176568076 Inexact Rounded -lnx214 ln 10 -> 2.30258509299404568401799145468436420760 Inexact Rounded -precision: 38 -lnx215 ln 2 -> 0.69314718055994530941723212145817656808 Inexact Rounded -lnx216 ln 10 -> 2.3025850929940456840179914546843642076 Inexact Rounded -precision: 37 -lnx217 ln 2 -> 0.6931471805599453094172321214581765681 Inexact Rounded -lnx218 ln 10 -> 2.302585092994045684017991454684364208 Inexact Rounded -precision: 36 -lnx219 ln 2 -> 0.693147180559945309417232121458176568 Inexact Rounded -lnx220 ln 10 -> 2.30258509299404568401799145468436421 Inexact Rounded -precision: 35 -lnx221 ln 2 -> 0.69314718055994530941723212145817657 Inexact Rounded -lnx222 ln 10 -> 2.3025850929940456840179914546843642 Inexact Rounded -precision: 34 -lnx223 ln 2 -> 0.6931471805599453094172321214581766 Inexact Rounded -lnx224 ln 10 -> 2.302585092994045684017991454684364 Inexact Rounded -precision: 33 -lnx225 ln 2 -> 0.693147180559945309417232121458177 Inexact Rounded -lnx226 ln 10 -> 2.30258509299404568401799145468436 Inexact Rounded -precision: 32 -lnx227 ln 2 -> 0.69314718055994530941723212145818 Inexact Rounded -lnx228 ln 10 -> 2.3025850929940456840179914546844 Inexact Rounded -precision: 31 -lnx229 ln 2 -> 0.6931471805599453094172321214582 Inexact Rounded -lnx230 ln 10 -> 2.302585092994045684017991454684 Inexact Rounded -precision: 30 -lnx231 ln 2 -> 0.693147180559945309417232121458 Inexact Rounded -lnx232 ln 10 -> 2.30258509299404568401799145468 Inexact Rounded - --- extreme input range values -maxExponent: 384 -minExponent: -383 -Precision: 16 - -lnx0901 ln 1e-400 -> -921.0340371976183 Inexact Rounded -lnx0902 ln 1e+400 -> 921.0340371976183 Inexact Rounded -lnx0903 ln 1e-999999 -> -2302582.790408953 Inexact Rounded -lnx0904 ln 1e+999999 -> 2302582.790408953 Inexact Rounded -lnx0905 ln 1e-1000013 -> -2302615.026600255 Inexact Rounded -lnx0906 ln 2e-1000013 -> -2302614.333453074 Inexact Rounded - -lnx0910 ln 9.999999e+999999 -> 2302585.092993946 Inexact Rounded -lnx0911 ln 9.9999999e+999999 -> 2302585.092994036 Inexact Rounded -lnx0912 ln 9.99999999e+999999 -> 2302585.092994045 Inexact Rounded -lnx0913 ln 9.999999999e+999999 -> 2302585.092994046 Inexact Rounded -lnx0914 ln 9.999999999999e+999999 -> 2302585.092994046 Inexact Rounded -lnx0915 ln 9.999999999999999e+999999 -> 2302585.092994046 Inexact Rounded -lnx0916 ln 9.999999999999999999999999e+999999 -> 2302585.092994046 Inexact Rounded - --- randoms --- P=50, within 0-999 -Precision: 50 -maxExponent: 384 -minExponent: -383 -lnx1501 ln 0.00098800906574486388604608477869812518857023768951 -> -6.9198186844033787995945147836955586009548513043689 Inexact Rounded -lnx1502 ln 158.15866624664623070184595045304145949900714987827 -> 5.0635987458895647454907806507503825602758392287684 Inexact Rounded -lnx1503 ln 0.00565661412059571925040285814021799775249288309321 -> -5.1749297776760632102047540300491550931651318975237 Inexact Rounded -lnx1504 ln 0.00000006914232532620489602008402091666547903180607 -> -16.487098770877825308138976818688771638172333034347 Inexact Rounded -lnx1505 ln 0.00025380374621297657504661540749355251231770070723 -> -8.2789492423005003205242162741569033124260321954589 Inexact Rounded -lnx1506 ln 83.033654063877426261108592599182418953442677554806 -> 4.4192459962647137976949249810815698465031609843669 Inexact Rounded -lnx1507 ln 0.00000000416863228092481651627734668440663678118729 -> -19.295677845122141772791294599714950175284915666430 Inexact Rounded -lnx1508 ln 0.00000140847873187820570181214271960511080523457669 -> -13.473000349581967189668305314384952251556809480339 Inexact Rounded -lnx1509 ln 66.176106555181527101630351127583944689752069132522 -> 4.1923194696232505883666171116966137694013431504252 Inexact Rounded -lnx1510 ln 0.00000000000009899043487403590900111602024562297908 -> -29.943753166877840985821508112917991506656545174163 Inexact Rounded -lnx1511 ln 0.00000000000324618296721747097510453388683912733569 -> -26.453541281444586819009546418577507163362590139422 Inexact Rounded -lnx1512 ln 72.646968818463546449499147579023555008392860423385 -> 4.2856116660689646882852128853423566276718230426479 Inexact Rounded -lnx1513 ln 0.00000000000000066755483124635612574263153825990523 -> -34.942910142802769319262875080398852491588707172483 Inexact Rounded -lnx1514 ln 61.002910447202398204114909451851111424657671911002 -> 4.1109215752843377323363182051446177066434038096529 Inexact Rounded -lnx1515 ln 917.06917611331980999227893584010544542312239174774 -> 6.8211829068303114128752453661946446979787826282907 Inexact Rounded -lnx1516 ln 0.00000000170823794883673083358549749078972003965194 -> -20.187803436976150477297246666771626827057191023004 Inexact Rounded -lnx1517 ln 0.53731767845358224445809761315159249898566542910649 -> -0.62116577939968409211736413628236285160048357000961 Inexact Rounded -lnx1518 ln 0.00000000000000008965291392882804161299758708033373 -> -36.950585970980857376081265073276303670820056916206 Inexact Rounded -lnx1519 ln 0.00000000006990244916026429904498278982530170295668 -> -23.383920429244457578373523508427783144589480420753 Inexact Rounded -lnx1520 ln 4.0312542977070300070506064666536478373801988540614 -> 1.3940775676592451945795752796421391871302024763305 Inexact Rounded -lnx1521 ln 271.84991311551875601432518819562391699324632396423 -> 5.6052501239873862517916679747146539808077431873478 Inexact Rounded -lnx1522 ln 7.4118671629373864667229445746862314443895404818689 -> 2.0030823863706344628239147639318289961917060121141 Inexact Rounded -lnx1523 ln 0.00000000000002026311452625364905357321664186034258 -> -31.529974180054438792043856877314043794320951134754 Inexact Rounded -lnx1524 ln 0.00000000000009563398651261756952398250624737809347 -> -29.978248130576972953141284136962670021368834792579 Inexact Rounded -lnx1525 ln 0.00000000009556772669409858653026558223465197808991 -> -23.071185939748285541228206161472956661196956741186 Inexact Rounded -lnx1526 ln 6.8441648298027301292342057248737326152250794026761 -> 1.9233964395801946597272589473417948024361005082908 Inexact Rounded -lnx1527 ln 0.00000000000073059699884439979394945822035704264577 -> -27.944914388353724718836101828677771967128509603158 Inexact Rounded -lnx1528 ln 0.00000000000000002610078280419082263138064745416787 -> -38.184566367516207885573773320135965798717120735115 Inexact Rounded -lnx1529 ln 0.00000000000000000150259517166294243088546806083283 -> -41.039337946266676108538170837580051699618334928421 Inexact Rounded -lnx1530 ln 0.00000000000000087919160541714580707181969708502091 -> -34.667528818827671507514319744047440696187358676848 Inexact Rounded -lnx1531 ln 0.00000000000395726725120787763271849577708068584598 -> -26.255467416961357741818735787226671938678424748431 Inexact Rounded -lnx1532 ln 0.00000000002014334901669366218018377213150715938355 -> -24.628146955635359035289123027319969201693737159108 Inexact Rounded -lnx1533 ln 0.00000008097927101101093117753938766241442896030637 -> -16.329072628469715178637178365710373398203190937454 Inexact Rounded -lnx1534 ln 0.00000000000017115834162632864392039668116243984176 -> -29.396187292434898225453626794459285157263177528034 Inexact Rounded -lnx1535 ln 0.39168317593866334087305459933723864294857086105035 -> -0.93730199062757240485836637306785037368746737693029 Inexact Rounded -lnx1536 ln 79.335036798971515026519630103325369729637514127617 -> 4.3736798570287828823772149735170431010616961976965 Inexact Rounded -lnx1537 ln 0.00000000000000056004952129926137413602116591493625 -> -35.118506463181870020730685884333000241039028127213 Inexact Rounded -lnx1538 ln 0.00000006006035907843890918832481099660639553666078 -> -16.627915795747112566532705974853114454405010472043 Inexact Rounded -lnx1539 ln 0.00000000085242024937414906371333826574632450587590 -> -20.882941460268101080186482230657774997273494107221 Inexact Rounded -lnx1540 ln 0.00000000000043671099499262350316173246550771951561 -> -28.459504757285639221776305968469058854558726593945 Inexact Rounded - --- P=34, within 0-999 -Precision: 34 -lnx1201 ln 0.0086732880815927182997566810334394 -> -4.747507311920844752486938187973721 Inexact Rounded -lnx1202 ln 0.0007104103693460260609792222569854 -> -7.249667769903503023005549250347695 Inexact Rounded -lnx1203 ln 786.8398945385105190697541493392742 -> 6.668024790031836340471824147010546 Inexact Rounded -lnx1204 ln 0.7723073620282687656895190171967399 -> -0.2583726708506850868786816238217326 Inexact Rounded -lnx1205 ln 0.0061057951517197631287183938412200 -> -5.098516933918797347064454103742635 Inexact Rounded -lnx1206 ln 0.6181379708184393730103917562498745 -> -0.4810435926903365087463387760350021 Inexact Rounded -lnx1207 ln 09.13888261229039989110753389096760 -> 2.212538125507975574509563027696021 Inexact Rounded -lnx1208 ln 802.0105417063143696497292158147174 -> 6.687121752052341737234832203350214 Inexact Rounded -lnx1209 ln 778.7749710387773713523028497333058 -> 6.657722135126935472086625031413031 Inexact Rounded -lnx1210 ln 0.0024457295895346502513567679390616 -> -6.013411799940245345321348290398517 Inexact Rounded -lnx1211 ln 0.0000511296947872828310338864217860 -> -9.881145118237281798081573131711636 Inexact Rounded -lnx1212 ln 0.0000246803508602554924938685155658 -> -10.60950314264825661825360971430218 Inexact Rounded -lnx1213 ln 9.027898199253511668242977766616082 -> 2.200319582778899029786017830557293 Inexact Rounded -lnx1214 ln 0.0991812396542505631850692800904188 -> -2.310806398964672258823043180400384 Inexact Rounded -lnx1215 ln 0.0000000000070238810143028811223924 -> -25.68170519961636647174714538290075 Inexact Rounded -lnx1216 ln 2.630101665342826494730394729313167 -> 0.9670225014664367465128243039749559 Inexact Rounded -lnx1217 ln 0.0056878928594359587691526063254683 -> -5.169415422904037819736637399445096 Inexact Rounded -lnx1218 ln 567.3436047121057843908106573095590 -> 6.340965124964258486463444360787970 Inexact Rounded -lnx1219 ln 1.199291248124655996614605745649725 -> 0.1817307557425911805765087755675657 Inexact Rounded -lnx1220 ln 25.02050448582031098696267479135557 -> 3.219695668137659139544178905459317 Inexact Rounded -lnx1221 ln 0.0000000000009939597023558756961300 -> -27.63707972996537636504396558259058 Inexact Rounded -lnx1222 ln 0.0000007988551670159429716506430403 -> -14.04008617542597230988198612376415 Inexact Rounded -lnx1223 ln 4.681515800176129184873770605589795 -> 1.543621946415383338972124445445748 Inexact Rounded -lnx1224 ln 15.95126669161103011206658749345781 -> 2.769538242479483539275986395443539 Inexact Rounded -lnx1225 ln 0.0301626783922211213675457279076066 -> -3.501149933677283341023932281826341 Inexact Rounded -lnx1226 ln 000.0040544064881821770528475185674 -> -5.507950967557021671647165889608324 Inexact Rounded -lnx1227 ln 29.01617095935593792095913785100360 -> 3.367853293862745651888450004473297 Inexact Rounded -lnx1228 ln 78.01836167344736733024804243195323 -> 4.356944205055768575987781375003992 Inexact Rounded -lnx1229 ln 0.0000000096545319316965321158634893 -> -18.45583840160965814462095477365013 Inexact Rounded -lnx1230 ln 97.95475237720579752770587185074428 -> 4.584505661612812742208619358214729 Inexact Rounded -lnx1231 ln 528.0609262050423246402564228432371 -> 6.269211667589138113396583894315956 Inexact Rounded -lnx1232 ln 0.0000002250064349732969696660452972 -> -15.30713683526963996712167701738724 Inexact Rounded -lnx1233 ln 47.97063637767998658567199049725754 -> 3.870589081585660692195989854842372 Inexact Rounded -lnx1234 ln 0.0005394311344541432318853513414361 -> -7.524995428393925934087126702974121 Inexact Rounded -lnx1235 ln 0.0000000090973385649567471674972633 -> -18.51528393158931783447035004125791 Inexact Rounded -lnx1236 ln 0.0000000000238776490227576197317977 -> -24.45807828188389561331158879207262 Inexact Rounded -lnx1237 ln 0.0000236587000231921532145326218758 -> -10.65177964499823314952429277979034 Inexact Rounded -lnx1238 ln 499.1277448846130709827154556125942 -> 6.212862064761427967461188083514774 Inexact Rounded -lnx1239 ln 0.0000003960192300284787663712417647 -> -14.74180306619298548093697608293284 Inexact Rounded -lnx1240 ln 41.08268350829477451667228892495136 -> 3.715586706887278039173584859218960 Inexact Rounded - --- P=16, within 0-99 -Precision: 16 -lnx1101 ln 7.964875261033948 -> 2.075041282352241 Inexact Rounded -lnx1102 ln 13.54527396845394 -> 2.606037701870263 Inexact Rounded -lnx1103 ln 0.0008026554341331 -> -7.127585034321814 Inexact Rounded -lnx1104 ln 0.0000030582233261 -> -12.69767642300625 Inexact Rounded -lnx1105 ln 0.0004477497509672 -> -7.711276073210766 Inexact Rounded -lnx1106 ln 7.616268622474371 -> 2.030286567675148 Inexact Rounded -lnx1107 ln 51.58329925806381 -> 3.943197962309569 Inexact Rounded -lnx1108 ln 0.0018197497951263 -> -6.309056262549345 Inexact Rounded -lnx1109 ln 2.956282457072984 -> 1.083932552334575 Inexact Rounded -lnx1110 ln 0.3843325579189906 -> -0.9562470649400558 Inexact Rounded -lnx1111 ln 0.0074466329265663 -> -4.899993304919237 Inexact Rounded -lnx1112 ln 0.0003372478532993 -> -7.994692428206378 Inexact Rounded -lnx1113 ln 0.0084792263167809 -> -4.770136069569271 Inexact Rounded -lnx1114 ln 5.926756998151102 -> 1.779477182834305 Inexact Rounded -lnx1115 ln 9.025699152180897 -> 2.200075969604119 Inexact Rounded -lnx1116 ln 1.910124643533526 -> 0.6471684983238183 Inexact Rounded -lnx1117 ln 0.8158922711411020 -> -0.2034729533939387 Inexact Rounded -lnx1118 ln 0.0067080016475322 -> -5.004454189414139 Inexact Rounded -lnx1119 ln 0.0047583242092716 -> -5.347859729601094 Inexact Rounded -lnx1120 ln 0.0386647411641339 -> -3.252827175263113 Inexact Rounded -lnx1121 ln 0.0050226427841761 -> -5.293799032774131 Inexact Rounded -lnx1122 ln 6.927937541637261 -> 1.935562155866906 Inexact Rounded -lnx1123 ln 0.0000095745343513 -> -11.55640365579814 Inexact Rounded -lnx1124 ln 1.602465492956538 -> 0.4715433763243936 Inexact Rounded -lnx1125 ln 38.98415625087535 -> 3.663155313610213 Inexact Rounded -lnx1126 ln 5.343182042276734 -> 1.675821363568112 Inexact Rounded -lnx1127 ln 55.89763703245816 -> 4.023522107934110 Inexact Rounded -lnx1128 ln 0.7445257810280847 -> -0.2950077988101030 Inexact Rounded -lnx1129 ln 1.631407314946094 -> 0.4894430257201248 Inexact Rounded -lnx1130 ln 0.0005462451932602 -> -7.512442611116852 Inexact Rounded -lnx1131 ln 0.0000864173269362 -> -9.356322359017317 Inexact Rounded -lnx1132 ln 5.227161719132849 -> 1.653868438439637 Inexact Rounded -lnx1133 ln 60.57078466941998 -> 4.103812675662452 Inexact Rounded -lnx1134 ln 0.0992864325333160 -> -2.309746348350318 Inexact Rounded -lnx1135 ln 09.48564268447325 -> 2.249779359074983 Inexact Rounded -lnx1136 ln 0.0036106089355634 -> -5.623878840650787 Inexact Rounded -lnx1137 ln 1.805176865587172 -> 0.5906585734593707 Inexact Rounded -lnx1138 ln 62.59363259642255 -> 4.136663557220559 Inexact Rounded -lnx1139 ln 4.373828261137201 -> 1.475638657912000 Inexact Rounded -lnx1140 ln 0.994483524148738 -> -0.005531747794938690 Inexact Rounded - --- P=7, within 0-9 -Precision: 7 -lnx1001 ln 0.0912025 -> -2.394673 Inexact Rounded -lnx1002 ln 0.9728626 -> -0.02751242 Inexact Rounded -lnx1003 ln 0.3886032 -> -0.9451965 Inexact Rounded -lnx1004 ln 8.798639 -> 2.174597 Inexact Rounded -lnx1005 ln 2.459121 -> 0.8998040 Inexact Rounded -lnx1006 ln 2.013193 -> 0.6997220 Inexact Rounded -lnx1007 ln 9.064857 -> 2.204405 Inexact Rounded -lnx1008 ln 5.796417 -> 1.757240 Inexact Rounded -lnx1009 ln 0.1143471 -> -2.168517 Inexact Rounded -lnx1010 ln 0.5341542 -> -0.6270707 Inexact Rounded -lnx1011 ln 6.693781 -> 1.901179 Inexact Rounded -lnx1012 ln 0.0081779 -> -4.806320 Inexact Rounded -lnx1013 ln 8.313616 -> 2.117895 Inexact Rounded -lnx1014 ln 3.486925 -> 1.249020 Inexact Rounded -lnx1015 ln 0.1801401 -> -1.714020 Inexact Rounded -lnx1016 ln 0.5227148 -> -0.6487193 Inexact Rounded -lnx1017 ln 7.818111 -> 2.056443 Inexact Rounded -lnx1018 ln 0.0870671 -> -2.441076 Inexact Rounded -lnx1019 ln 8.153966 -> 2.098504 Inexact Rounded -lnx1020 ln 2.040975 -> 0.7134276 Inexact Rounded -lnx1021 ln 1.481642 -> 0.3931509 Inexact Rounded -lnx1022 ln 0.2610123 -> -1.343188 Inexact Rounded -lnx1023 ln 0.466723 -> -0.7620193 Inexact Rounded -lnx1024 ln 0.0518756 -> -2.958907 Inexact Rounded -lnx1025 ln 2.056410 -> 0.7209617 Inexact Rounded -lnx1026 ln 0.181522 -> -1.706378 Inexact Rounded -lnx1027 ln 0.515551 -> -0.6625190 Inexact Rounded -lnx1028 ln 8.425089 -> 2.131214 Inexact Rounded -lnx1029 ln 2.077091 -> 0.7309684 Inexact Rounded -lnx1030 ln 6.212705 -> 1.826596 Inexact Rounded -lnx1031 ln 5.729343 -> 1.745601 Inexact Rounded -lnx1032 ln 4.831251 -> 1.575105 Inexact Rounded -lnx1033 ln 2.029760 -> 0.7079176 Inexact Rounded -lnx1034 ln 8.615060 -> 2.153512 Inexact Rounded -lnx1035 ln 0.0611511 -> -2.794407 Inexact Rounded -lnx1036 ln 5.195269 -> 1.647748 Inexact Rounded -lnx1037 ln 9.617686 -> 2.263604 Inexact Rounded -lnx1038 ln 0.0049382 -> -5.310754 Inexact Rounded -lnx1039 ln 2.786840 -> 1.024908 Inexact Rounded -lnx1040 ln 0.0091073 -> -4.698679 Inexact Rounded - --- from here 3-digit tests are based on reverse exp tests -precision: 9 -rounding: half_even -maxExponent: 384 -minexponent: -383 - -lnx001 ln 0 -> -Infinity -lnx002 ln 0.367879441 -> -1.00000000 Inexact Rounded -lnx003 ln 1 -> 0 -lnx005 ln 2.71828183 -> 1.00000000 Inexact Rounded -lnx006 ln 2.00000000 -> 0.693147181 Inexact Rounded -lnx007 ln +Infinity -> Infinity - --- tiny edge cases -precision: 7 -lnx011 ln 1.105171 -> 0.1000001 Inexact Rounded -lnx012 ln 1.010050 -> 0.009999835 Inexact Rounded -lnx013 ln 1.000010 -> 0.000009999950 Inexact Rounded -lnx014 ln 1.000001 -> 9.999995E-7 Inexact Rounded -lnx015 ln 1.000000 -> 0 - --- basic e=0, e=1, e=2, e=4, e>=8 cases -precision: 7 -lnx041 ln 2.718282 -> 1.000000 Inexact Rounded -lnx042 ln 0.3678794 -> -1.000000 Inexact Rounded -lnx043 ln 22026.47 -> 10.00000 Inexact Rounded -lnx044 ln 0.00004539993 -> -10.00000 Inexact Rounded -lnx045 ln 2.688117E+43 -> 100.0000 Inexact Rounded -lnx046 ln 3.720076E-44 -> -100.0000 Inexact Rounded -lnx047 ln Infinity -> Infinity -lnx048 ln 0E-389 -> -Infinity - --- miscellanea -precision: 16 -lnx055 ln 2.717658486884572E-236 -> -542.4103112874415 Inexact Rounded -precision: 17 -lnx056 ln 2.7176584868845721E-236 -> -542.41031128744146 Inexact Rounded -precision: 18 -lnx057 ln 2.71765848688457211E-236 -> -542.410311287441459 Inexact Rounded -precision: 19 -lnx058 ln 2.717658486884572112E-236 -> -542.4103112874414592 Inexact Rounded -precision: 20 -lnx059 ln 2.7176584868845721118E-236 -> -542.41031128744145917 Inexact Rounded - --- inputs ending in ..500.., ..499.., ..100.., ..999.. sequences -precision: 50 -lnx102 ln 0.9999999100000040499998785000027 -> -9.0000000000000000000000033749953829996446124861750E-8 Inexact Rounded -precision: 30 -lnx103 ln 0.999999910000004049999878500003 -> -8.99999999999999999999997337499E-8 Inexact Rounded -precision: 29 -lnx104 ln 0.99999991000000404999987850000 -> -9.0000000000000000000002733750E-8 Inexact Rounded -precision: 28 -lnx105 ln 0.9999999100000040499998785000 -> -9.000000000000000000000273375E-8 Inexact Rounded -precision: 27 -lnx106 ln 0.999999910000004049999878500 -> -9.00000000000000000000027338E-8 Inexact Rounded -precision: 26 -lnx107 ln 0.99999991000000404999987850 -> -9.0000000000000000000002734E-8 Inexact Rounded -precision: 25 -lnx108 ln 0.9999999100000040499998785 -> -9.000000000000000000000273E-8 Inexact Rounded -precision: 24 -lnx109 ln 0.999999910000004049999879 -> -8.99999999999999995000027E-8 Inexact Rounded -precision: 23 -lnx110 ln 0.99999991000000404999988 -> -8.9999999999999998500003E-8 Inexact Rounded -precision: 22 -lnx111 ln 0.9999999100000040499999 -> -8.999999999999997850000E-8 Inexact Rounded -precision: 21 -lnx112 ln 0.999999910000004050000 -> -8.99999999999998785000E-8 Inexact Rounded -precision: 20 -lnx113 ln 0.99999991000000405000 -> -8.9999999999999878500E-8 Inexact Rounded -precision: 19 -lnx114 ln 0.9999999100000040500 -> -8.999999999999987850E-8 Inexact Rounded -precision: 18 -lnx115 ln 0.999999910000004050 -> -8.99999999999998785E-8 Inexact Rounded --- next may be a > 0.5ulp case; a more precise answer is: --- -8.99999999999998784999918E-8 -precision: 17 -lnx116 ln 0.99999991000000405 -> -8.9999999999999878E-8 Inexact Rounded -precision: 16 -lnx117 ln 0.9999999100000040 -> -9.000000004999988E-8 Inexact Rounded -precision: 15 -lnx118 ln 0.999999910000004 -> -9.00000000499999E-8 Inexact Rounded -precision: 14 -lnx119 ln 0.99999991000000 -> -9.0000004050000E-8 Inexact Rounded -precision: 13 -lnx120 ln 0.9999999100000 -> -9.000000405000E-8 Inexact Rounded -precision: 12 -lnx121 ln 0.999999910000 -> -9.00000040500E-8 Inexact Rounded -precision: 11 -lnx122 ln 0.99999991000 -> -9.0000004050E-8 Inexact Rounded -precision: 10 -lnx123 ln 0.9999999100 -> -9.000000405E-8 Inexact Rounded -precision: 9 -lnx124 ln 0.999999910 -> -9.00000041E-8 Inexact Rounded -precision: 8 -lnx125 ln 0.99999991 -> -9.0000004E-8 Inexact Rounded -precision: 7 -lnx126 ln 0.9999999 -> -1.000000E-7 Inexact Rounded -precision: 16 -lnx126b ln 0.9999999 -> -1.000000050000003E-7 Inexact Rounded -precision: 6 -lnx127 ln 0.999999 -> -0.00000100000 Inexact Rounded -precision: 5 -lnx128 ln 0.99999 -> -0.000010000 Inexact Rounded -precision: 4 -lnx129 ln 0.9999 -> -0.0001000 Inexact Rounded -precision: 3 -lnx130 ln 0.999 -> -0.00100 Inexact Rounded -precision: 2 -lnx131 ln 0.99 -> -0.010 Inexact Rounded -precision: 1 -lnx132 ln 0.9 -> -0.1 Inexact Rounded - - --- cases near 1 -- 1 2345678901234567890 -precision: 20 -lnx401 ln 2.7182818284589365041 -> 0.99999999999996000000 Inexact Rounded -lnx402 ln 2.7182818284589636869 -> 0.99999999999997000000 Inexact Rounded -lnx403 ln 2.7182818284589908697 -> 0.99999999999997999999 Inexact Rounded -lnx404 ln 2.7182818284590180525 -> 0.99999999999998999998 Inexact Rounded -lnx405 ln 2.7182818284590452354 -> 1.0000000000000000000 Inexact Rounded -lnx406 ln 2.7182818284593170635 -> 1.0000000000001000000 Inexact Rounded -lnx407 ln 2.7182818284595888917 -> 1.0000000000002000000 Inexact Rounded -precision: 14 -lnx411 ln 2.7182818284589 -> 0.99999999999995 Inexact Rounded -lnx413 ln 2.7182818284590 -> 0.99999999999998 Inexact Rounded -lnx416 ln 2.7182818284591 -> 1.0000000000000 Inexact Rounded -lnx417 ln 2.7182818284592 -> 1.0000000000001 Inexact Rounded - --- overflows, including some exp overprecise borderlines -precision: 7 -maxExponent: 384 -minExponent: -383 -lnx709 ln 9.999999E+384 -> 886.4953 Inexact Rounded -lnx711 ln 9.999992E+384 -> 886.4953 Inexact Rounded -precision: 16 -lnx722 ln 9.999999999999999E+384 -> 886.4952608027076 Inexact Rounded -lnx724 ln 9.999999999999917E+384 -> 886.4952608027076 Inexact Rounded -lnx726 ln 9.999999999999117E+384 -> 886.4952608027075 Inexact Rounded --- and more... -precision: 15 -maxExponent: 999 -minExponent: -999 -lnx731 ln 9.99999999999999E+999 -> 2302.58509299405 Inexact Rounded --- next may be a > 0.5ulp case; a more precise answer is: --- 2302.58509299404495001799145442 -lnx732 ln 9.99999999999266E+999 -> 2302.58509299404 Inexact Rounded -lnx733 ln 9.99999999999265E+999 -> 2302.58509299404 Inexact Rounded -lnx734 ln 9.99999999999264E+999 -> 2302.58509299404 Inexact Rounded - --- subnormals and underflows for exp, including underflow-to-zero edge point -precision: 7 -maxExponent: 384 -minExponent: -383 -lnx751 ln 0E-389 -> -Infinity -lnx758 ln 1.000001E-383 -> -881.8901 Inexact Rounded -lnx759 ln 9.99991E-384 -> -881.8901 Inexact Rounded -lnx760 ln 4.4605E-385 -> -885.0000 Inexact Rounded -lnx761 ln 2.221E-386 -> -887.9999 Inexact Rounded -lnx762 ln 3.01E-387 -> -889.9985 Inexact Rounded -lnx763 ln 1.7E-388 -> -892.8724 Inexact Rounded -lnx764 ln 1.5E-388 -> -892.9976 Inexact Rounded -lnx765 ln 9E-389 -> -893.5084 Inexact Rounded -lnx766 ln 1E-389 -> -895.7056 Inexact Rounded -lnx774 ln 0E-389 -> -Infinity - --- special values -lnx820 ln Infinity -> Infinity -lnx821 ln 0 -> -Infinity -lnx822 ln NaN -> NaN -lnx823 ln sNaN -> NaN Invalid_operation --- propagating NaNs -lnx824 ln sNaN123 -> NaN123 Invalid_operation -lnx825 ln -sNaN321 -> -NaN321 Invalid_operation -lnx826 ln NaN456 -> NaN456 -lnx827 ln -NaN654 -> -NaN654 -lnx828 ln NaN1 -> NaN1 - --- Invalid operations due to restrictions --- [next two probably skipped by most test harnesses] -precision: 100000000 -lnx901 ln 1 -> NaN Invalid_context -precision: 99999999 -lnx902 ln 0 -> NaN Invalid_context - -precision: 9 -maxExponent: 1000000 -minExponent: -999999 -lnx903 ln 1 -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999999 -lnx904 ln 0 -> -Infinity -maxExponent: 999999 -minExponent: -1000000 -lnx905 ln 1 -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999998 -lnx906 ln 0 -> -Infinity - --- payload decapitate -precision: 5 -lnx910 ln -sNaN1234567890 -> -NaN67890 Invalid_operation - --- Null test -lnx900 ln # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- ln.decTest -- decimal natural logarithm -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 16 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- basics (examples in specification) +precision: 9 +lnxs001 ln 0 -> -Infinity +lnxs002 ln 1.000 -> 0 +lnxs003 ln 2.71828183 -> 1.00000000 Inexact Rounded +lnxs004 ln 10 -> 2.30258509 Inexact Rounded +lnxs005 ln +Infinity -> Infinity + + +-- basics +precision: 16 +lnx0001 ln 0 -> -Infinity +lnx0002 ln 1E-9 -> -20.72326583694641 Inexact Rounded +lnx0003 ln 0.0007 -> -7.264430222920869 Inexact Rounded +lnx0004 ln 0.1 -> -2.302585092994046 Inexact Rounded +lnx0005 ln 0.7 -> -0.3566749439387324 Inexact Rounded +lnx0006 ln 1 -> 0 +lnx0007 ln 1.000 -> 0 +lnx0008 ln 1.5 -> 0.4054651081081644 Inexact Rounded +lnx0009 ln 2 -> 0.6931471805599453 Inexact Rounded +lnx0010 ln 2.718281828459045 -> 0.9999999999999999 Inexact Rounded +lnx0011 ln 2.718281828459046 -> 1.000000000000000 Inexact Rounded +lnx0012 ln 2.718281828459047 -> 1.000000000000001 Inexact Rounded +lnx0013 ln 10 -> 2.302585092994046 Inexact Rounded +lnx0014 ln 10.5 -> 2.351375257163478 Inexact Rounded +lnx0015 ln 9999 -> 9.210240366975849 Inexact Rounded +lnx0016 ln 1E6 -> 13.81551055796427 Inexact Rounded +lnx0017 ln 1E+9 -> 20.72326583694641 Inexact Rounded +lnx0018 ln +Infinity -> Infinity + +-- notable cases +-- negatives +lnx0021 ln -1E-9 -> NaN Invalid_operation +lnx0022 ln -0.0007 -> NaN Invalid_operation +lnx0023 ln -0.1 -> NaN Invalid_operation +lnx0024 ln -0.7 -> NaN Invalid_operation +lnx0025 ln -1 -> NaN Invalid_operation +lnx0026 ln -1.5 -> NaN Invalid_operation +lnx0027 ln -2 -> NaN Invalid_operation +lnx0029 ln -10.5 -> NaN Invalid_operation +lnx0028 ln -9999 -> NaN Invalid_operation +lnx0030 ln -2.718281828459045 -> NaN Invalid_operation +lnx0031 ln -2.718281828459046 -> NaN Invalid_operation +lnx0032 ln -0 -> -Infinity +lnx0033 ln -0E+17 -> -Infinity +lnx0034 ln -0E-17 -> -Infinity +-- other zeros +lnx0041 ln 0 -> -Infinity +lnx0042 ln 0E+17 -> -Infinity +lnx0043 ln 0E-17 -> -Infinity +-- infinities +lnx0045 ln -Infinity -> NaN Invalid_operation +lnx0046 ln +Infinity -> Infinity +-- ones +lnx0050 ln 1 -> 0 +lnx0051 ln 1.0 -> 0 +lnx0052 ln 1.000000000000000 -> 0 +lnx0053 ln 1.000000000000000000 -> 0 + +-- lower precision basics +Precision: 7 +lnx0101 ln 0 -> -Infinity +lnx0102 ln 1E-9 -> -20.72327 Inexact Rounded +lnx0103 ln 0.0007 -> -7.264430 Inexact Rounded +lnx0104 ln 0.1 -> -2.302585 Inexact Rounded +lnx0105 ln 0.7 -> -0.3566749 Inexact Rounded +lnx0106 ln 1 -> 0 +lnx0107 ln 1.5 -> 0.4054651 Inexact Rounded +lnx0108 ln 2 -> 0.6931472 Inexact Rounded +lnx0109 ln 2.718281828459045 -> 1.000000 Inexact Rounded +lnx0110 ln 2.718281828459046 -> 1.000000 Inexact Rounded +lnx0111 ln 2.718281828459047 -> 1.000000 Inexact Rounded +lnx0112 ln 10 -> 2.302585 Inexact Rounded +lnx0113 ln 10.5 -> 2.351375 Inexact Rounded +lnx0114 ln 9999 -> 9.210240 Inexact Rounded +lnx0115 ln 1E6 -> 13.81551 Inexact Rounded +lnx0116 ln 1E+9 -> 20.72327 Inexact Rounded +lnx0117 ln +Infinity -> Infinity +Precision: 2 +lnx0121 ln 0 -> -Infinity +lnx0122 ln 1E-9 -> -21 Inexact Rounded +lnx0123 ln 0.0007 -> -7.3 Inexact Rounded +lnx0124 ln 0.1 -> -2.3 Inexact Rounded +lnx0125 ln 0.7 -> -0.36 Inexact Rounded +lnx0126 ln 1 -> 0 +lnx0127 ln 1.5 -> 0.41 Inexact Rounded +lnx0128 ln 2 -> 0.69 Inexact Rounded +lnx0129 ln 2.718281828459045 -> 1.0 Inexact Rounded +lnx0130 ln 2.718281828459046 -> 1.0 Inexact Rounded +lnx0131 ln 2.718281828459047 -> 1.0 Inexact Rounded +lnx0132 ln 10 -> 2.3 Inexact Rounded +lnx0133 ln 10.5 -> 2.4 Inexact Rounded +lnx0134 ln 9999 -> 9.2 Inexact Rounded +lnx0135 ln 1E6 -> 14 Inexact Rounded +lnx0136 ln 1E+9 -> 21 Inexact Rounded +lnx0137 ln +Infinity -> Infinity +Precision: 1 +lnx0141 ln 0 -> -Infinity +lnx0142 ln 1E-9 -> -2E+1 Inexact Rounded +lnx0143 ln 0.0007 -> -7 Inexact Rounded +lnx0144 ln 0.1 -> -2 Inexact Rounded +lnx0145 ln 0.7 -> -0.4 Inexact Rounded +lnx0146 ln 1 -> 0 +lnx0147 ln 1.5 -> 0.4 Inexact Rounded +lnx0148 ln 2 -> 0.7 Inexact Rounded +lnx0149 ln 2.718281828459045 -> 1 Inexact Rounded +lnx0150 ln 2.718281828459046 -> 1 Inexact Rounded +lnx0151 ln 2.718281828459047 -> 1 Inexact Rounded +lnx0152 ln 10 -> 2 Inexact Rounded +lnx0153 ln 10.5 -> 2 Inexact Rounded +lnx0154 ln 9999 -> 9 Inexact Rounded +lnx0155 ln 1E6 -> 1E+1 Inexact Rounded +lnx0156 ln 1E+9 -> 2E+1 Inexact Rounded +lnx0157 ln +Infinity -> Infinity + +-- group low-precision ln(1)s: +precision: 1 +lnx0161 ln 1 -> 0 +precision: 2 +lnx0162 ln 1 -> 0 +precision: 3 +lnx0163 ln 1 -> 0 +precision: 4 +lnx0164 ln 1 -> 0 +precision: 5 +lnx0165 ln 1 -> 0 +precision: 6 +lnx0166 ln 1 -> 0 +precision: 7 +lnx0167 ln 1 -> 0 +precision: 8 +lnx0168 ln 1 -> 0 + +-- edge-test ln(2) and ln(10) in case of lookasides +precision: 45 +lnx201 ln 2 -> 0.693147180559945309417232121458176568075500134 Inexact Rounded +lnx202 ln 10 -> 2.30258509299404568401799145468436420760110149 Inexact Rounded +precision: 44 +lnx203 ln 2 -> 0.69314718055994530941723212145817656807550013 Inexact Rounded +lnx204 ln 10 -> 2.3025850929940456840179914546843642076011015 Inexact Rounded +precision: 43 +lnx205 ln 2 -> 0.6931471805599453094172321214581765680755001 Inexact Rounded +lnx206 ln 10 -> 2.302585092994045684017991454684364207601101 Inexact Rounded +precision: 42 +lnx207 ln 2 -> 0.693147180559945309417232121458176568075500 Inexact Rounded +lnx208 ln 10 -> 2.30258509299404568401799145468436420760110 Inexact Rounded +precision: 41 +lnx209 ln 2 -> 0.69314718055994530941723212145817656807550 Inexact Rounded +lnx210 ln 10 -> 2.3025850929940456840179914546843642076011 Inexact Rounded +precision: 40 +lnx211 ln 2 -> 0.6931471805599453094172321214581765680755 Inexact Rounded +lnx212 ln 10 -> 2.302585092994045684017991454684364207601 Inexact Rounded +precision: 39 +lnx213 ln 2 -> 0.693147180559945309417232121458176568076 Inexact Rounded +lnx214 ln 10 -> 2.30258509299404568401799145468436420760 Inexact Rounded +precision: 38 +lnx215 ln 2 -> 0.69314718055994530941723212145817656808 Inexact Rounded +lnx216 ln 10 -> 2.3025850929940456840179914546843642076 Inexact Rounded +precision: 37 +lnx217 ln 2 -> 0.6931471805599453094172321214581765681 Inexact Rounded +lnx218 ln 10 -> 2.302585092994045684017991454684364208 Inexact Rounded +precision: 36 +lnx219 ln 2 -> 0.693147180559945309417232121458176568 Inexact Rounded +lnx220 ln 10 -> 2.30258509299404568401799145468436421 Inexact Rounded +precision: 35 +lnx221 ln 2 -> 0.69314718055994530941723212145817657 Inexact Rounded +lnx222 ln 10 -> 2.3025850929940456840179914546843642 Inexact Rounded +precision: 34 +lnx223 ln 2 -> 0.6931471805599453094172321214581766 Inexact Rounded +lnx224 ln 10 -> 2.302585092994045684017991454684364 Inexact Rounded +precision: 33 +lnx225 ln 2 -> 0.693147180559945309417232121458177 Inexact Rounded +lnx226 ln 10 -> 2.30258509299404568401799145468436 Inexact Rounded +precision: 32 +lnx227 ln 2 -> 0.69314718055994530941723212145818 Inexact Rounded +lnx228 ln 10 -> 2.3025850929940456840179914546844 Inexact Rounded +precision: 31 +lnx229 ln 2 -> 0.6931471805599453094172321214582 Inexact Rounded +lnx230 ln 10 -> 2.302585092994045684017991454684 Inexact Rounded +precision: 30 +lnx231 ln 2 -> 0.693147180559945309417232121458 Inexact Rounded +lnx232 ln 10 -> 2.30258509299404568401799145468 Inexact Rounded + +-- extreme input range values +maxExponent: 384 +minExponent: -383 +Precision: 16 + +lnx0901 ln 1e-400 -> -921.0340371976183 Inexact Rounded +lnx0902 ln 1e+400 -> 921.0340371976183 Inexact Rounded +lnx0903 ln 1e-999999 -> -2302582.790408953 Inexact Rounded +lnx0904 ln 1e+999999 -> 2302582.790408953 Inexact Rounded +lnx0905 ln 1e-1000013 -> -2302615.026600255 Inexact Rounded +lnx0906 ln 2e-1000013 -> -2302614.333453074 Inexact Rounded + +lnx0910 ln 9.999999e+999999 -> 2302585.092993946 Inexact Rounded +lnx0911 ln 9.9999999e+999999 -> 2302585.092994036 Inexact Rounded +lnx0912 ln 9.99999999e+999999 -> 2302585.092994045 Inexact Rounded +lnx0913 ln 9.999999999e+999999 -> 2302585.092994046 Inexact Rounded +lnx0914 ln 9.999999999999e+999999 -> 2302585.092994046 Inexact Rounded +lnx0915 ln 9.999999999999999e+999999 -> 2302585.092994046 Inexact Rounded +lnx0916 ln 9.999999999999999999999999e+999999 -> 2302585.092994046 Inexact Rounded + +-- randoms +-- P=50, within 0-999 +Precision: 50 +maxExponent: 384 +minExponent: -383 +lnx1501 ln 0.00098800906574486388604608477869812518857023768951 -> -6.9198186844033787995945147836955586009548513043689 Inexact Rounded +lnx1502 ln 158.15866624664623070184595045304145949900714987827 -> 5.0635987458895647454907806507503825602758392287684 Inexact Rounded +lnx1503 ln 0.00565661412059571925040285814021799775249288309321 -> -5.1749297776760632102047540300491550931651318975237 Inexact Rounded +lnx1504 ln 0.00000006914232532620489602008402091666547903180607 -> -16.487098770877825308138976818688771638172333034347 Inexact Rounded +lnx1505 ln 0.00025380374621297657504661540749355251231770070723 -> -8.2789492423005003205242162741569033124260321954589 Inexact Rounded +lnx1506 ln 83.033654063877426261108592599182418953442677554806 -> 4.4192459962647137976949249810815698465031609843669 Inexact Rounded +lnx1507 ln 0.00000000416863228092481651627734668440663678118729 -> -19.295677845122141772791294599714950175284915666430 Inexact Rounded +lnx1508 ln 0.00000140847873187820570181214271960511080523457669 -> -13.473000349581967189668305314384952251556809480339 Inexact Rounded +lnx1509 ln 66.176106555181527101630351127583944689752069132522 -> 4.1923194696232505883666171116966137694013431504252 Inexact Rounded +lnx1510 ln 0.00000000000009899043487403590900111602024562297908 -> -29.943753166877840985821508112917991506656545174163 Inexact Rounded +lnx1511 ln 0.00000000000324618296721747097510453388683912733569 -> -26.453541281444586819009546418577507163362590139422 Inexact Rounded +lnx1512 ln 72.646968818463546449499147579023555008392860423385 -> 4.2856116660689646882852128853423566276718230426479 Inexact Rounded +lnx1513 ln 0.00000000000000066755483124635612574263153825990523 -> -34.942910142802769319262875080398852491588707172483 Inexact Rounded +lnx1514 ln 61.002910447202398204114909451851111424657671911002 -> 4.1109215752843377323363182051446177066434038096529 Inexact Rounded +lnx1515 ln 917.06917611331980999227893584010544542312239174774 -> 6.8211829068303114128752453661946446979787826282907 Inexact Rounded +lnx1516 ln 0.00000000170823794883673083358549749078972003965194 -> -20.187803436976150477297246666771626827057191023004 Inexact Rounded +lnx1517 ln 0.53731767845358224445809761315159249898566542910649 -> -0.62116577939968409211736413628236285160048357000961 Inexact Rounded +lnx1518 ln 0.00000000000000008965291392882804161299758708033373 -> -36.950585970980857376081265073276303670820056916206 Inexact Rounded +lnx1519 ln 0.00000000006990244916026429904498278982530170295668 -> -23.383920429244457578373523508427783144589480420753 Inexact Rounded +lnx1520 ln 4.0312542977070300070506064666536478373801988540614 -> 1.3940775676592451945795752796421391871302024763305 Inexact Rounded +lnx1521 ln 271.84991311551875601432518819562391699324632396423 -> 5.6052501239873862517916679747146539808077431873478 Inexact Rounded +lnx1522 ln 7.4118671629373864667229445746862314443895404818689 -> 2.0030823863706344628239147639318289961917060121141 Inexact Rounded +lnx1523 ln 0.00000000000002026311452625364905357321664186034258 -> -31.529974180054438792043856877314043794320951134754 Inexact Rounded +lnx1524 ln 0.00000000000009563398651261756952398250624737809347 -> -29.978248130576972953141284136962670021368834792579 Inexact Rounded +lnx1525 ln 0.00000000009556772669409858653026558223465197808991 -> -23.071185939748285541228206161472956661196956741186 Inexact Rounded +lnx1526 ln 6.8441648298027301292342057248737326152250794026761 -> 1.9233964395801946597272589473417948024361005082908 Inexact Rounded +lnx1527 ln 0.00000000000073059699884439979394945822035704264577 -> -27.944914388353724718836101828677771967128509603158 Inexact Rounded +lnx1528 ln 0.00000000000000002610078280419082263138064745416787 -> -38.184566367516207885573773320135965798717120735115 Inexact Rounded +lnx1529 ln 0.00000000000000000150259517166294243088546806083283 -> -41.039337946266676108538170837580051699618334928421 Inexact Rounded +lnx1530 ln 0.00000000000000087919160541714580707181969708502091 -> -34.667528818827671507514319744047440696187358676848 Inexact Rounded +lnx1531 ln 0.00000000000395726725120787763271849577708068584598 -> -26.255467416961357741818735787226671938678424748431 Inexact Rounded +lnx1532 ln 0.00000000002014334901669366218018377213150715938355 -> -24.628146955635359035289123027319969201693737159108 Inexact Rounded +lnx1533 ln 0.00000008097927101101093117753938766241442896030637 -> -16.329072628469715178637178365710373398203190937454 Inexact Rounded +lnx1534 ln 0.00000000000017115834162632864392039668116243984176 -> -29.396187292434898225453626794459285157263177528034 Inexact Rounded +lnx1535 ln 0.39168317593866334087305459933723864294857086105035 -> -0.93730199062757240485836637306785037368746737693029 Inexact Rounded +lnx1536 ln 79.335036798971515026519630103325369729637514127617 -> 4.3736798570287828823772149735170431010616961976965 Inexact Rounded +lnx1537 ln 0.00000000000000056004952129926137413602116591493625 -> -35.118506463181870020730685884333000241039028127213 Inexact Rounded +lnx1538 ln 0.00000006006035907843890918832481099660639553666078 -> -16.627915795747112566532705974853114454405010472043 Inexact Rounded +lnx1539 ln 0.00000000085242024937414906371333826574632450587590 -> -20.882941460268101080186482230657774997273494107221 Inexact Rounded +lnx1540 ln 0.00000000000043671099499262350316173246550771951561 -> -28.459504757285639221776305968469058854558726593945 Inexact Rounded + +-- P=34, within 0-999 +Precision: 34 +lnx1201 ln 0.0086732880815927182997566810334394 -> -4.747507311920844752486938187973721 Inexact Rounded +lnx1202 ln 0.0007104103693460260609792222569854 -> -7.249667769903503023005549250347695 Inexact Rounded +lnx1203 ln 786.8398945385105190697541493392742 -> 6.668024790031836340471824147010546 Inexact Rounded +lnx1204 ln 0.7723073620282687656895190171967399 -> -0.2583726708506850868786816238217326 Inexact Rounded +lnx1205 ln 0.0061057951517197631287183938412200 -> -5.098516933918797347064454103742635 Inexact Rounded +lnx1206 ln 0.6181379708184393730103917562498745 -> -0.4810435926903365087463387760350021 Inexact Rounded +lnx1207 ln 09.13888261229039989110753389096760 -> 2.212538125507975574509563027696021 Inexact Rounded +lnx1208 ln 802.0105417063143696497292158147174 -> 6.687121752052341737234832203350214 Inexact Rounded +lnx1209 ln 778.7749710387773713523028497333058 -> 6.657722135126935472086625031413031 Inexact Rounded +lnx1210 ln 0.0024457295895346502513567679390616 -> -6.013411799940245345321348290398517 Inexact Rounded +lnx1211 ln 0.0000511296947872828310338864217860 -> -9.881145118237281798081573131711636 Inexact Rounded +lnx1212 ln 0.0000246803508602554924938685155658 -> -10.60950314264825661825360971430218 Inexact Rounded +lnx1213 ln 9.027898199253511668242977766616082 -> 2.200319582778899029786017830557293 Inexact Rounded +lnx1214 ln 0.0991812396542505631850692800904188 -> -2.310806398964672258823043180400384 Inexact Rounded +lnx1215 ln 0.0000000000070238810143028811223924 -> -25.68170519961636647174714538290075 Inexact Rounded +lnx1216 ln 2.630101665342826494730394729313167 -> 0.9670225014664367465128243039749559 Inexact Rounded +lnx1217 ln 0.0056878928594359587691526063254683 -> -5.169415422904037819736637399445096 Inexact Rounded +lnx1218 ln 567.3436047121057843908106573095590 -> 6.340965124964258486463444360787970 Inexact Rounded +lnx1219 ln 1.199291248124655996614605745649725 -> 0.1817307557425911805765087755675657 Inexact Rounded +lnx1220 ln 25.02050448582031098696267479135557 -> 3.219695668137659139544178905459317 Inexact Rounded +lnx1221 ln 0.0000000000009939597023558756961300 -> -27.63707972996537636504396558259058 Inexact Rounded +lnx1222 ln 0.0000007988551670159429716506430403 -> -14.04008617542597230988198612376415 Inexact Rounded +lnx1223 ln 4.681515800176129184873770605589795 -> 1.543621946415383338972124445445748 Inexact Rounded +lnx1224 ln 15.95126669161103011206658749345781 -> 2.769538242479483539275986395443539 Inexact Rounded +lnx1225 ln 0.0301626783922211213675457279076066 -> -3.501149933677283341023932281826341 Inexact Rounded +lnx1226 ln 000.0040544064881821770528475185674 -> -5.507950967557021671647165889608324 Inexact Rounded +lnx1227 ln 29.01617095935593792095913785100360 -> 3.367853293862745651888450004473297 Inexact Rounded +lnx1228 ln 78.01836167344736733024804243195323 -> 4.356944205055768575987781375003992 Inexact Rounded +lnx1229 ln 0.0000000096545319316965321158634893 -> -18.45583840160965814462095477365013 Inexact Rounded +lnx1230 ln 97.95475237720579752770587185074428 -> 4.584505661612812742208619358214729 Inexact Rounded +lnx1231 ln 528.0609262050423246402564228432371 -> 6.269211667589138113396583894315956 Inexact Rounded +lnx1232 ln 0.0000002250064349732969696660452972 -> -15.30713683526963996712167701738724 Inexact Rounded +lnx1233 ln 47.97063637767998658567199049725754 -> 3.870589081585660692195989854842372 Inexact Rounded +lnx1234 ln 0.0005394311344541432318853513414361 -> -7.524995428393925934087126702974121 Inexact Rounded +lnx1235 ln 0.0000000090973385649567471674972633 -> -18.51528393158931783447035004125791 Inexact Rounded +lnx1236 ln 0.0000000000238776490227576197317977 -> -24.45807828188389561331158879207262 Inexact Rounded +lnx1237 ln 0.0000236587000231921532145326218758 -> -10.65177964499823314952429277979034 Inexact Rounded +lnx1238 ln 499.1277448846130709827154556125942 -> 6.212862064761427967461188083514774 Inexact Rounded +lnx1239 ln 0.0000003960192300284787663712417647 -> -14.74180306619298548093697608293284 Inexact Rounded +lnx1240 ln 41.08268350829477451667228892495136 -> 3.715586706887278039173584859218960 Inexact Rounded + +-- P=16, within 0-99 +Precision: 16 +lnx1101 ln 7.964875261033948 -> 2.075041282352241 Inexact Rounded +lnx1102 ln 13.54527396845394 -> 2.606037701870263 Inexact Rounded +lnx1103 ln 0.0008026554341331 -> -7.127585034321814 Inexact Rounded +lnx1104 ln 0.0000030582233261 -> -12.69767642300625 Inexact Rounded +lnx1105 ln 0.0004477497509672 -> -7.711276073210766 Inexact Rounded +lnx1106 ln 7.616268622474371 -> 2.030286567675148 Inexact Rounded +lnx1107 ln 51.58329925806381 -> 3.943197962309569 Inexact Rounded +lnx1108 ln 0.0018197497951263 -> -6.309056262549345 Inexact Rounded +lnx1109 ln 2.956282457072984 -> 1.083932552334575 Inexact Rounded +lnx1110 ln 0.3843325579189906 -> -0.9562470649400558 Inexact Rounded +lnx1111 ln 0.0074466329265663 -> -4.899993304919237 Inexact Rounded +lnx1112 ln 0.0003372478532993 -> -7.994692428206378 Inexact Rounded +lnx1113 ln 0.0084792263167809 -> -4.770136069569271 Inexact Rounded +lnx1114 ln 5.926756998151102 -> 1.779477182834305 Inexact Rounded +lnx1115 ln 9.025699152180897 -> 2.200075969604119 Inexact Rounded +lnx1116 ln 1.910124643533526 -> 0.6471684983238183 Inexact Rounded +lnx1117 ln 0.8158922711411020 -> -0.2034729533939387 Inexact Rounded +lnx1118 ln 0.0067080016475322 -> -5.004454189414139 Inexact Rounded +lnx1119 ln 0.0047583242092716 -> -5.347859729601094 Inexact Rounded +lnx1120 ln 0.0386647411641339 -> -3.252827175263113 Inexact Rounded +lnx1121 ln 0.0050226427841761 -> -5.293799032774131 Inexact Rounded +lnx1122 ln 6.927937541637261 -> 1.935562155866906 Inexact Rounded +lnx1123 ln 0.0000095745343513 -> -11.55640365579814 Inexact Rounded +lnx1124 ln 1.602465492956538 -> 0.4715433763243936 Inexact Rounded +lnx1125 ln 38.98415625087535 -> 3.663155313610213 Inexact Rounded +lnx1126 ln 5.343182042276734 -> 1.675821363568112 Inexact Rounded +lnx1127 ln 55.89763703245816 -> 4.023522107934110 Inexact Rounded +lnx1128 ln 0.7445257810280847 -> -0.2950077988101030 Inexact Rounded +lnx1129 ln 1.631407314946094 -> 0.4894430257201248 Inexact Rounded +lnx1130 ln 0.0005462451932602 -> -7.512442611116852 Inexact Rounded +lnx1131 ln 0.0000864173269362 -> -9.356322359017317 Inexact Rounded +lnx1132 ln 5.227161719132849 -> 1.653868438439637 Inexact Rounded +lnx1133 ln 60.57078466941998 -> 4.103812675662452 Inexact Rounded +lnx1134 ln 0.0992864325333160 -> -2.309746348350318 Inexact Rounded +lnx1135 ln 09.48564268447325 -> 2.249779359074983 Inexact Rounded +lnx1136 ln 0.0036106089355634 -> -5.623878840650787 Inexact Rounded +lnx1137 ln 1.805176865587172 -> 0.5906585734593707 Inexact Rounded +lnx1138 ln 62.59363259642255 -> 4.136663557220559 Inexact Rounded +lnx1139 ln 4.373828261137201 -> 1.475638657912000 Inexact Rounded +lnx1140 ln 0.994483524148738 -> -0.005531747794938690 Inexact Rounded + +-- P=7, within 0-9 +Precision: 7 +lnx1001 ln 0.0912025 -> -2.394673 Inexact Rounded +lnx1002 ln 0.9728626 -> -0.02751242 Inexact Rounded +lnx1003 ln 0.3886032 -> -0.9451965 Inexact Rounded +lnx1004 ln 8.798639 -> 2.174597 Inexact Rounded +lnx1005 ln 2.459121 -> 0.8998040 Inexact Rounded +lnx1006 ln 2.013193 -> 0.6997220 Inexact Rounded +lnx1007 ln 9.064857 -> 2.204405 Inexact Rounded +lnx1008 ln 5.796417 -> 1.757240 Inexact Rounded +lnx1009 ln 0.1143471 -> -2.168517 Inexact Rounded +lnx1010 ln 0.5341542 -> -0.6270707 Inexact Rounded +lnx1011 ln 6.693781 -> 1.901179 Inexact Rounded +lnx1012 ln 0.0081779 -> -4.806320 Inexact Rounded +lnx1013 ln 8.313616 -> 2.117895 Inexact Rounded +lnx1014 ln 3.486925 -> 1.249020 Inexact Rounded +lnx1015 ln 0.1801401 -> -1.714020 Inexact Rounded +lnx1016 ln 0.5227148 -> -0.6487193 Inexact Rounded +lnx1017 ln 7.818111 -> 2.056443 Inexact Rounded +lnx1018 ln 0.0870671 -> -2.441076 Inexact Rounded +lnx1019 ln 8.153966 -> 2.098504 Inexact Rounded +lnx1020 ln 2.040975 -> 0.7134276 Inexact Rounded +lnx1021 ln 1.481642 -> 0.3931509 Inexact Rounded +lnx1022 ln 0.2610123 -> -1.343188 Inexact Rounded +lnx1023 ln 0.466723 -> -0.7620193 Inexact Rounded +lnx1024 ln 0.0518756 -> -2.958907 Inexact Rounded +lnx1025 ln 2.056410 -> 0.7209617 Inexact Rounded +lnx1026 ln 0.181522 -> -1.706378 Inexact Rounded +lnx1027 ln 0.515551 -> -0.6625190 Inexact Rounded +lnx1028 ln 8.425089 -> 2.131214 Inexact Rounded +lnx1029 ln 2.077091 -> 0.7309684 Inexact Rounded +lnx1030 ln 6.212705 -> 1.826596 Inexact Rounded +lnx1031 ln 5.729343 -> 1.745601 Inexact Rounded +lnx1032 ln 4.831251 -> 1.575105 Inexact Rounded +lnx1033 ln 2.029760 -> 0.7079176 Inexact Rounded +lnx1034 ln 8.615060 -> 2.153512 Inexact Rounded +lnx1035 ln 0.0611511 -> -2.794407 Inexact Rounded +lnx1036 ln 5.195269 -> 1.647748 Inexact Rounded +lnx1037 ln 9.617686 -> 2.263604 Inexact Rounded +lnx1038 ln 0.0049382 -> -5.310754 Inexact Rounded +lnx1039 ln 2.786840 -> 1.024908 Inexact Rounded +lnx1040 ln 0.0091073 -> -4.698679 Inexact Rounded + +-- from here 3-digit tests are based on reverse exp tests +precision: 9 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +lnx001 ln 0 -> -Infinity +lnx002 ln 0.367879441 -> -1.00000000 Inexact Rounded +lnx003 ln 1 -> 0 +lnx005 ln 2.71828183 -> 1.00000000 Inexact Rounded +lnx006 ln 2.00000000 -> 0.693147181 Inexact Rounded +lnx007 ln +Infinity -> Infinity + +-- tiny edge cases +precision: 7 +lnx011 ln 1.105171 -> 0.1000001 Inexact Rounded +lnx012 ln 1.010050 -> 0.009999835 Inexact Rounded +lnx013 ln 1.000010 -> 0.000009999950 Inexact Rounded +lnx014 ln 1.000001 -> 9.999995E-7 Inexact Rounded +lnx015 ln 1.000000 -> 0 + +-- basic e=0, e=1, e=2, e=4, e>=8 cases +precision: 7 +lnx041 ln 2.718282 -> 1.000000 Inexact Rounded +lnx042 ln 0.3678794 -> -1.000000 Inexact Rounded +lnx043 ln 22026.47 -> 10.00000 Inexact Rounded +lnx044 ln 0.00004539993 -> -10.00000 Inexact Rounded +lnx045 ln 2.688117E+43 -> 100.0000 Inexact Rounded +lnx046 ln 3.720076E-44 -> -100.0000 Inexact Rounded +lnx047 ln Infinity -> Infinity +lnx048 ln 0E-389 -> -Infinity + +-- miscellanea +precision: 16 +lnx055 ln 2.717658486884572E-236 -> -542.4103112874415 Inexact Rounded +precision: 17 +lnx056 ln 2.7176584868845721E-236 -> -542.41031128744146 Inexact Rounded +precision: 18 +lnx057 ln 2.71765848688457211E-236 -> -542.410311287441459 Inexact Rounded +precision: 19 +lnx058 ln 2.717658486884572112E-236 -> -542.4103112874414592 Inexact Rounded +precision: 20 +lnx059 ln 2.7176584868845721118E-236 -> -542.41031128744145917 Inexact Rounded + +-- inputs ending in ..500.., ..499.., ..100.., ..999.. sequences +precision: 50 +lnx102 ln 0.9999999100000040499998785000027 -> -9.0000000000000000000000033749953829996446124861750E-8 Inexact Rounded +precision: 30 +lnx103 ln 0.999999910000004049999878500003 -> -8.99999999999999999999997337499E-8 Inexact Rounded +precision: 29 +lnx104 ln 0.99999991000000404999987850000 -> -9.0000000000000000000002733750E-8 Inexact Rounded +precision: 28 +lnx105 ln 0.9999999100000040499998785000 -> -9.000000000000000000000273375E-8 Inexact Rounded +precision: 27 +lnx106 ln 0.999999910000004049999878500 -> -9.00000000000000000000027338E-8 Inexact Rounded +precision: 26 +lnx107 ln 0.99999991000000404999987850 -> -9.0000000000000000000002734E-8 Inexact Rounded +precision: 25 +lnx108 ln 0.9999999100000040499998785 -> -9.000000000000000000000273E-8 Inexact Rounded +precision: 24 +lnx109 ln 0.999999910000004049999879 -> -8.99999999999999995000027E-8 Inexact Rounded +precision: 23 +lnx110 ln 0.99999991000000404999988 -> -8.9999999999999998500003E-8 Inexact Rounded +precision: 22 +lnx111 ln 0.9999999100000040499999 -> -8.999999999999997850000E-8 Inexact Rounded +precision: 21 +lnx112 ln 0.999999910000004050000 -> -8.99999999999998785000E-8 Inexact Rounded +precision: 20 +lnx113 ln 0.99999991000000405000 -> -8.9999999999999878500E-8 Inexact Rounded +precision: 19 +lnx114 ln 0.9999999100000040500 -> -8.999999999999987850E-8 Inexact Rounded +precision: 18 +lnx115 ln 0.999999910000004050 -> -8.99999999999998785E-8 Inexact Rounded +-- next may be a > 0.5ulp case; a more precise answer is: +-- -8.99999999999998784999918E-8 +precision: 17 +lnx116 ln 0.99999991000000405 -> -8.9999999999999878E-8 Inexact Rounded +precision: 16 +lnx117 ln 0.9999999100000040 -> -9.000000004999988E-8 Inexact Rounded +precision: 15 +lnx118 ln 0.999999910000004 -> -9.00000000499999E-8 Inexact Rounded +precision: 14 +lnx119 ln 0.99999991000000 -> -9.0000004050000E-8 Inexact Rounded +precision: 13 +lnx120 ln 0.9999999100000 -> -9.000000405000E-8 Inexact Rounded +precision: 12 +lnx121 ln 0.999999910000 -> -9.00000040500E-8 Inexact Rounded +precision: 11 +lnx122 ln 0.99999991000 -> -9.0000004050E-8 Inexact Rounded +precision: 10 +lnx123 ln 0.9999999100 -> -9.000000405E-8 Inexact Rounded +precision: 9 +lnx124 ln 0.999999910 -> -9.00000041E-8 Inexact Rounded +precision: 8 +lnx125 ln 0.99999991 -> -9.0000004E-8 Inexact Rounded +precision: 7 +lnx126 ln 0.9999999 -> -1.000000E-7 Inexact Rounded +precision: 16 +lnx126b ln 0.9999999 -> -1.000000050000003E-7 Inexact Rounded +precision: 6 +lnx127 ln 0.999999 -> -0.00000100000 Inexact Rounded +precision: 5 +lnx128 ln 0.99999 -> -0.000010000 Inexact Rounded +precision: 4 +lnx129 ln 0.9999 -> -0.0001000 Inexact Rounded +precision: 3 +lnx130 ln 0.999 -> -0.00100 Inexact Rounded +precision: 2 +lnx131 ln 0.99 -> -0.010 Inexact Rounded +precision: 1 +lnx132 ln 0.9 -> -0.1 Inexact Rounded + + +-- cases near 1 -- 1 2345678901234567890 +precision: 20 +lnx401 ln 2.7182818284589365041 -> 0.99999999999996000000 Inexact Rounded +lnx402 ln 2.7182818284589636869 -> 0.99999999999997000000 Inexact Rounded +lnx403 ln 2.7182818284589908697 -> 0.99999999999997999999 Inexact Rounded +lnx404 ln 2.7182818284590180525 -> 0.99999999999998999998 Inexact Rounded +lnx405 ln 2.7182818284590452354 -> 1.0000000000000000000 Inexact Rounded +lnx406 ln 2.7182818284593170635 -> 1.0000000000001000000 Inexact Rounded +lnx407 ln 2.7182818284595888917 -> 1.0000000000002000000 Inexact Rounded +precision: 14 +lnx411 ln 2.7182818284589 -> 0.99999999999995 Inexact Rounded +lnx413 ln 2.7182818284590 -> 0.99999999999998 Inexact Rounded +lnx416 ln 2.7182818284591 -> 1.0000000000000 Inexact Rounded +lnx417 ln 2.7182818284592 -> 1.0000000000001 Inexact Rounded + +-- overflows, including some exp overprecise borderlines +precision: 7 +maxExponent: 384 +minExponent: -383 +lnx709 ln 9.999999E+384 -> 886.4953 Inexact Rounded +lnx711 ln 9.999992E+384 -> 886.4953 Inexact Rounded +precision: 16 +lnx722 ln 9.999999999999999E+384 -> 886.4952608027076 Inexact Rounded +lnx724 ln 9.999999999999917E+384 -> 886.4952608027076 Inexact Rounded +lnx726 ln 9.999999999999117E+384 -> 886.4952608027075 Inexact Rounded +-- and more... +precision: 15 +maxExponent: 999 +minExponent: -999 +lnx731 ln 9.99999999999999E+999 -> 2302.58509299405 Inexact Rounded +-- next may be a > 0.5ulp case; a more precise answer is: +-- 2302.58509299404495001799145442 +lnx732 ln 9.99999999999266E+999 -> 2302.58509299404 Inexact Rounded +lnx733 ln 9.99999999999265E+999 -> 2302.58509299404 Inexact Rounded +lnx734 ln 9.99999999999264E+999 -> 2302.58509299404 Inexact Rounded + +-- subnormals and underflows for exp, including underflow-to-zero edge point +precision: 7 +maxExponent: 384 +minExponent: -383 +lnx751 ln 0E-389 -> -Infinity +lnx758 ln 1.000001E-383 -> -881.8901 Inexact Rounded +lnx759 ln 9.99991E-384 -> -881.8901 Inexact Rounded +lnx760 ln 4.4605E-385 -> -885.0000 Inexact Rounded +lnx761 ln 2.221E-386 -> -887.9999 Inexact Rounded +lnx762 ln 3.01E-387 -> -889.9985 Inexact Rounded +lnx763 ln 1.7E-388 -> -892.8724 Inexact Rounded +lnx764 ln 1.5E-388 -> -892.9976 Inexact Rounded +lnx765 ln 9E-389 -> -893.5084 Inexact Rounded +lnx766 ln 1E-389 -> -895.7056 Inexact Rounded +lnx774 ln 0E-389 -> -Infinity + +-- special values +lnx820 ln Infinity -> Infinity +lnx821 ln 0 -> -Infinity +lnx822 ln NaN -> NaN +lnx823 ln sNaN -> NaN Invalid_operation +-- propagating NaNs +lnx824 ln sNaN123 -> NaN123 Invalid_operation +lnx825 ln -sNaN321 -> -NaN321 Invalid_operation +lnx826 ln NaN456 -> NaN456 +lnx827 ln -NaN654 -> -NaN654 +lnx828 ln NaN1 -> NaN1 + +-- Invalid operations due to restrictions +-- [next two probably skipped by most test harnesses] +precision: 100000000 +lnx901 ln 1 -> NaN Invalid_context +precision: 99999999 +lnx902 ln 0 -> NaN Invalid_context + +precision: 9 +maxExponent: 1000000 +minExponent: -999999 +lnx903 ln 1 -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999999 +lnx904 ln 0 -> -Infinity +maxExponent: 999999 +minExponent: -1000000 +lnx905 ln 1 -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999998 +lnx906 ln 0 -> -Infinity + +-- payload decapitate +precision: 5 +lnx910 ln -sNaN1234567890 -> -NaN67890 Invalid_operation + +-- Null test +lnx900 ln # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/log10.decTest b/Lib/test/decimaltestdata/log10.decTest index 5169eabde35..6502f0d0914 100644 --- a/Lib/test/decimaltestdata/log10.decTest +++ b/Lib/test/decimaltestdata/log10.decTest @@ -1,551 +1,551 @@ ------------------------------------------------------------------------- --- log10.decTest -- decimal logarithm in base 10 -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This emphasises the testing of notable cases, as they will often --- have unusual paths (especially the 10**n results). - -extended: 1 -precision: 16 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- examples in specification -precision: 9 -logxs000 log10 0 -> -Infinity -logxs001 log10 0.001 -> -3 -logxs002 log10 1 -> 0 -logxs003 log10 2 -> 0.301029996 Inexact Rounded -logxs004 log10 10 -> 1 -logxs005 log10 70 -> 1.84509804 Inexact Rounded -logxs006 log10 +Infinity -> Infinity - - --- basics (examples in specification, etc.) -precision: 16 -logx0000 log10 0 -> -Infinity -logx0001 log10 7E-1000 -> -999.1549019599857 Inexact Rounded -logx0002 log10 1.1E-9 -> -8.958607314841775 Inexact Rounded -logx0003 log10 0.0007 -> -3.154901959985743 Inexact Rounded -logx0004 log10 0.11 -> -0.9586073148417750 Inexact Rounded -logx0005 log10 0.7 -> -0.1549019599857432 Inexact Rounded -logx0006 log10 1 -> 0 -logx0007 log10 1.5 -> 0.1760912590556812 Inexact Rounded -logx0008 log10 2 -> 0.3010299956639812 Inexact Rounded -logx0009 log10 2.718281828459045 -> 0.4342944819032518 Inexact Rounded -logx0010 log10 2.718281828459046 -> 0.4342944819032519 Inexact Rounded -logx0011 log10 2.718281828459047 -> 0.4342944819032521 Inexact Rounded -logx0012 log10 7 -> 0.8450980400142568 Inexact Rounded -logx0013 log10 10 -> 1 -logx0014 log10 10.5 -> 1.021189299069938 Inexact Rounded -logx0015 log10 11 -> 1.041392685158225 Inexact Rounded -logx0016 log10 70 -> 1.845098040014257 Inexact Rounded -logx0017 log10 9999 -> 3.999956568380192 Inexact Rounded -logx0018 log10 1.21E6 -> 6.082785370316450 Inexact Rounded -logx0019 log10 1.1E+9 -> 9.041392685158225 Inexact Rounded -logx0020 log10 7E+1000 -> 1000.845098040014 Inexact Rounded -logx0021 log10 +Infinity -> Infinity - --- notable cases --- negatives -logx0031 log10 -1E-9 -> NaN Invalid_operation -logx0032 log10 -0.0007 -> NaN Invalid_operation -logx0033 log10 -0.1 -> NaN Invalid_operation -logx0034 log10 -0.7 -> NaN Invalid_operation -logx0035 log10 -1 -> NaN Invalid_operation -logx0036 log10 -1.5 -> NaN Invalid_operation -logx0037 log10 -2 -> NaN Invalid_operation -logx0038 log10 -10.5 -> NaN Invalid_operation -logx0039 log10 -10.5 -> NaN Invalid_operation -logx0040 log10 -9999 -> NaN Invalid_operation -logx0041 log10 -10 -> NaN Invalid_operation -logx0042 log10 -0 -> -Infinity -logx0043 log10 -0E+17 -> -Infinity -logx0044 log10 -0E-17 -> -Infinity --- other zeros -logx0051 log10 0 -> -Infinity -logx0052 log10 0E+17 -> -Infinity -logx0053 log10 0E-17 -> -Infinity --- infinities -logx0055 log10 -Infinity -> NaN Invalid_operation -logx0056 log10 +Infinity -> Infinity --- ones -logx0061 log10 1 -> 0 -logx0062 log10 1.0 -> 0 -logx0063 log10 1.000000000000000 -> 0 -logx0064 log10 1.000000000000000000 -> 0 - --- notable cases -- exact powers of 10 -logx1100 log10 1 -> 0 -logx1101 log10 10 -> 1 -logx1102 log10 100 -> 2 -logx1103 log10 1000 -> 3 -logx1104 log10 10000 -> 4 -logx1105 log10 100000 -> 5 -logx1106 log10 1000000 -> 6 -logx1107 log10 10000000 -> 7 -logx1108 log10 100000000 -> 8 -logx1109 log10 1000000000 -> 9 -logx1110 log10 10000000000 -> 10 -logx1111 log10 100000000000 -> 11 -logx1112 log10 1000000000000 -> 12 -logx1113 log10 0.00000000001 -> -11 -logx1114 log10 0.0000000001 -> -10 -logx1115 log10 0.000000001 -> -9 -logx1116 log10 0.00000001 -> -8 -logx1117 log10 0.0000001 -> -7 -logx1118 log10 0.000001 -> -6 -logx1119 log10 0.00001 -> -5 -logx1120 log10 0.0001 -> -4 -logx1121 log10 0.001 -> -3 -logx1122 log10 0.01 -> -2 -logx1123 log10 0.1 -> -1 -logx1124 log10 1E-99 -> -99 -logx1125 log10 1E-100 -> -100 -logx1126 log10 1E-383 -> -383 - --- check normally exact cases round properly -precision: 1 -logx1141 log10 10000000000 -> 1E+1 Rounded -logx1142 log10 1000000000000 -> 1E+1 Inexact Rounded -logx1143 log10 1E+100 -> 1E+2 Rounded -logx1144 log10 1E+123 -> 1E+2 Inexact Rounded -logx1145 log10 1E+126 -> 1E+2 Inexact Rounded -logx1146 log10 1E+916 -> 9E+2 Inexact Rounded -logx1147 log10 1E+999 -> 1E+3 Inexact Rounded - -precision: 2 -logx1151 log10 10000000000 -> 10 -logx1152 log10 1000000000000 -> 12 -logx1153 log10 1E+100 -> 1.0E+2 Rounded -logx1154 log10 1E+123 -> 1.2E+2 Inexact Rounded -logx1155 log10 1E+126 -> 1.3E+2 Inexact Rounded -logx1156 log10 1E+916 -> 9.2E+2 Inexact Rounded -logx1157 log10 1E+999 -> 1.0E+3 Inexact Rounded --- some half-way point rounds, other cases, and negatives -logx1158 log10 1E+125 -> 1.2E+2 Inexact Rounded -logx1159 log10 1E+135 -> 1.4E+2 Inexact Rounded -logx1160 log10 1E+129 -> 1.3E+2 Inexact Rounded -logx1161 log10 1E+131 -> 1.3E+2 Inexact Rounded -logx1162 log10 1E-123 -> -1.2E+2 Inexact Rounded -logx1163 log10 1E-126 -> -1.3E+2 Inexact Rounded -logx1164 log10 1E-916 -> -9.2E+2 Inexact Rounded -logx1165 log10 1E-999 -> -1.0E+3 Inexact Rounded -logx1166 log10 1E-125 -> -1.2E+2 Inexact Rounded -logx1167 log10 1E-135 -> -1.4E+2 Inexact Rounded -logx1168 log10 1E-129 -> -1.3E+2 Inexact Rounded -logx1169 log10 1E-131 -> -1.3E+2 Inexact Rounded - -precision: 3 -logx1171 log10 10000000000 -> 10 -logx1172 log10 1000000000000 -> 12 -logx1173 log10 1E+100 -> 100 -logx1174 log10 1E+123 -> 123 -logx1175 log10 1E+126 -> 126 -logx1176 log10 1E+916 -> 916 -logx1177 log10 1E+999 -> 999 - --- log10(2) .. tests both ln(2) and ln(10) constants, too -precision: 50 -logx1201 log10 2 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded -logx1202 log10 2.000 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded -logx1203 log10 0.2E1 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded -precision: 49 -logx1204 log10 2 -> 0.3010299956639811952137388947244930267681898814621 Inexact Rounded -precision: 48 -logx1205 log10 2 -> 0.301029995663981195213738894724493026768189881462 Inexact Rounded -precision: 47 -logx1206 log10 2 -> 0.30102999566398119521373889472449302676818988146 Inexact Rounded -precision: 46 -logx1207 log10 2 -> 0.3010299956639811952137388947244930267681898815 Inexact Rounded -precision: 45 -logx1208 log10 2 -> 0.301029995663981195213738894724493026768189881 Inexact Rounded -precision: 44 -logx1209 log10 2 -> 0.30102999566398119521373889472449302676818988 Inexact Rounded -precision: 43 -logx1210 log10 2 -> 0.3010299956639811952137388947244930267681899 Inexact Rounded -precision: 42 -logx1211 log10 2 -> 0.301029995663981195213738894724493026768190 Inexact Rounded -precision: 41 -logx1212 log10 2 -> 0.30102999566398119521373889472449302676819 Inexact Rounded -precision: 40 -logx1213 log10 2 -> 0.3010299956639811952137388947244930267682 Inexact Rounded -precision: 39 -logx1214 log10 2 -> 0.301029995663981195213738894724493026768 Inexact Rounded -precision: 38 -logx1215 log10 2 -> 0.30102999566398119521373889472449302677 Inexact Rounded -precision: 37 -logx1216 log10 2 -> 0.3010299956639811952137388947244930268 Inexact Rounded -precision: 36 -logx1217 log10 2 -> 0.301029995663981195213738894724493027 Inexact Rounded -precision: 35 -logx1218 log10 2 -> 0.30102999566398119521373889472449303 Inexact Rounded -precision: 34 -logx1219 log10 2 -> 0.3010299956639811952137388947244930 Inexact Rounded -precision: 33 -logx1220 log10 2 -> 0.301029995663981195213738894724493 Inexact Rounded -precision: 32 -logx1221 log10 2 -> 0.30102999566398119521373889472449 Inexact Rounded -precision: 31 -logx1222 log10 2 -> 0.3010299956639811952137388947245 Inexact Rounded -precision: 30 -logx1223 log10 2 -> 0.301029995663981195213738894724 Inexact Rounded -precision: 29 -logx1224 log10 2 -> 0.30102999566398119521373889472 Inexact Rounded -precision: 28 -logx1225 log10 2 -> 0.3010299956639811952137388947 Inexact Rounded -precision: 27 -logx1226 log10 2 -> 0.301029995663981195213738895 Inexact Rounded -precision: 26 -logx1227 log10 2 -> 0.30102999566398119521373889 Inexact Rounded -precision: 25 -logx1228 log10 2 -> 0.3010299956639811952137389 Inexact Rounded -precision: 24 -logx1229 log10 2 -> 0.301029995663981195213739 Inexact Rounded -precision: 23 -logx1230 log10 2 -> 0.30102999566398119521374 Inexact Rounded -precision: 22 -logx1231 log10 2 -> 0.3010299956639811952137 Inexact Rounded -precision: 21 -logx1232 log10 2 -> 0.301029995663981195214 Inexact Rounded -precision: 20 -logx1233 log10 2 -> 0.30102999566398119521 Inexact Rounded -precision: 19 -logx1234 log10 2 -> 0.3010299956639811952 Inexact Rounded -precision: 18 -logx1235 log10 2 -> 0.301029995663981195 Inexact Rounded -precision: 17 -logx1236 log10 2 -> 0.30102999566398120 Inexact Rounded -precision: 16 -logx1237 log10 2 -> 0.3010299956639812 Inexact Rounded -precision: 15 -logx1238 log10 2 -> 0.301029995663981 Inexact Rounded -precision: 14 -logx1239 log10 2 -> 0.30102999566398 Inexact Rounded -precision: 13 -logx1240 log10 2 -> 0.3010299956640 Inexact Rounded -precision: 12 -logx1241 log10 2 -> 0.301029995664 Inexact Rounded -precision: 11 -logx1242 log10 2 -> 0.30102999566 Inexact Rounded -precision: 10 -logx1243 log10 2 -> 0.3010299957 Inexact Rounded -precision: 9 -logx1244 log10 2 -> 0.301029996 Inexact Rounded -precision: 8 -logx1245 log10 2 -> 0.30103000 Inexact Rounded -precision: 7 -logx1246 log10 2 -> 0.3010300 Inexact Rounded -precision: 6 -logx1247 log10 2 -> 0.301030 Inexact Rounded -precision: 5 -logx1248 log10 2 -> 0.30103 Inexact Rounded -precision: 4 -logx1249 log10 2 -> 0.3010 Inexact Rounded -precision: 3 -logx1250 log10 2 -> 0.301 Inexact Rounded -precision: 2 -logx1251 log10 2 -> 0.30 Inexact Rounded -precision: 1 -logx1252 log10 2 -> 0.3 Inexact Rounded - -maxExponent: 384 -minExponent: -383 -precision: 16 -rounding: half_even - --- More close-to-e, etc., tests -precision: 34 -logx1301 log10 2.718281828459045235360287471352661 -> 0.4342944819032518276511289189166048 Inexact Rounded -logx1302 log10 2.718281828459045235360287471352662 -> 0.4342944819032518276511289189166050 Inexact Rounded -logx1303 log10 2.718281828459045235360287471352663 -> 0.4342944819032518276511289189166052 Inexact Rounded -logx1304 log10 0.99999999999999999999999999999999 -> -4.342944819032518276511289189166073E-33 Inexact Rounded -logx1305 log10 0.999999999999999999999999999999999 -> -4.342944819032518276511289189166053E-34 Inexact Rounded -logx1306 log10 0.9999999999999999999999999999999999 -> -4.342944819032518276511289189166051E-35 Inexact Rounded -logx1307 log10 1.000000000000000000000000000000000 -> 0 -logx1308 log10 1.0000000000000000000000000000000001 -> 4.342944819032518276511289189166051E-35 Inexact Rounded -logx1309 log10 1.000000000000000000000000000000001 -> 4.342944819032518276511289189166049E-34 Inexact Rounded -logx1310 log10 1.00000000000000000000000000000001 -> 4.342944819032518276511289189166029E-33 Inexact Rounded --- lower p -precision: 7 -logx1320 log10 0.999999 -> -4.342947E-7 Inexact Rounded -logx1321 log10 0.9999999 -> -4.342945E-8 Inexact Rounded -logx1322 log10 0.99999999 -> -4.342945E-9 Inexact Rounded -logx1323 log10 0.999999999 -> -4.342945E-10 Inexact Rounded -logx1324 log10 1.00000000 -> 0 -logx1325 log10 1.00000001 -> 4.342945E-9 Inexact Rounded -logx1326 log10 1.0000001 -> 4.342945E-8 Inexact Rounded -logx1327 log10 1.000001 -> 4.342943E-7 Inexact Rounded - --- near 10^3 -precision: 9 -logx1331 log10 999.9999998 -> 3.00000000 Inexact Rounded -logx1332 log10 999.9999999 -> 3.00000000 Inexact Rounded -logx1333 log10 1000.000000 -> 3 -logx1334 log10 1000.000001 -> 3.00000000 Inexact Rounded -logx1335 log10 1000.000002 -> 3.00000000 Inexact Rounded -precision: 16 -logx1341 log10 999.9999998 -> 2.999999999913141 Inexact Rounded -logx1342 log10 999.9999999 -> 2.999999999956571 Inexact Rounded -logx1343 log10 1000.000000 -> 3 -logx1344 log10 1000.000001 -> 3.000000000434294 Inexact Rounded -logx1345 log10 1000.000002 -> 3.000000000868589 Inexact Rounded - --- suggestions from Ilan Nehama -logx1400 log10 10E-3 -> -2 -logx1401 log10 10E-2 -> -1 -logx1402 log10 100E-2 -> 0 -logx1403 log10 1000E-2 -> 1 -logx1404 log10 10000E-2 -> 2 -logx1405 log10 10E-1 -> 0 -logx1406 log10 100E-1 -> 1 -logx1407 log10 1000E-1 -> 2 -logx1408 log10 10000E-1 -> 3 -logx1409 log10 10E0 -> 1 -logx1410 log10 100E0 -> 2 -logx1411 log10 1000E0 -> 3 -logx1412 log10 10000E0 -> 4 -logx1413 log10 10E1 -> 2 -logx1414 log10 100E1 -> 3 -logx1415 log10 1000E1 -> 4 -logx1416 log10 10000E1 -> 5 -logx1417 log10 10E2 -> 3 -logx1418 log10 100E2 -> 4 -logx1419 log10 1000E2 -> 5 -logx1420 log10 10000E2 -> 6 - --- Randoms --- P=50, within 0-9999 -Precision: 50 -logx2501 log10 0.00035448001667968141775891246991912655961163345904 -> -3.4504082425411775290864053318247274944685586188505 Inexact Rounded -logx2502 log10 70.636455726424311228255338637935330826995136597644 -> 1.8490288998408492045793070255302335558140975719247 Inexact Rounded -logx2503 log10 0.00000000000000233550362473821889060812804063040169 -> -14.631619454343834858023578299142866557717904223667 Inexact Rounded -logx2504 log10 97.783628621523244679901260358286898958832135433764 -> 1.9902661493224219517897657964362571690592734407330 Inexact Rounded -logx2505 log10 0062.2377135315858392802612812022807838599572017342 -> 1.7940536293085066199287632725026837018486533544141 Inexact Rounded -logx2506 log10 6.3767634652071053619977602804724129652981747879532 -> 0.80460030789825961615100163576080761326857374098644 Inexact Rounded -logx2507 log10 63.297088981313278529306533814195068850532666658798 -> 1.8013837373724427092417170149098614410849353839673 Inexact Rounded -logx2508 log10 0.00000077239693316881797717820110898167721602299187 -> -6.1121594592718550613773886241951966264826760310047 Inexact Rounded -logx2509 log10 0.00000003953580359780185534830572461922527831395002 -> -7.4030094293833847136252547069905477213541787177561 Inexact Rounded -logx2510 log10 754.62905817369989169188998111527272688791544577204 -> 2.8777335243761300047758534304371912099958057545416 Inexact Rounded -logx2511 log10 0.00000048360378410241428936607147056283282849158312 -> -6.3155103095309353457604038397980091650760346334512 Inexact Rounded -logx2512 log10 0.00007509037583645612577196104591672080542932166089 -> -4.1244157219700166314012344705538088030592896111026 Inexact Rounded -logx2513 log10 0.00000000000705475944638915053419839063567898092064 -> -11.151517790256466048553810002525868198178167950377 Inexact Rounded -logx2514 log10 9.6210300460497657917445410947099633479609165120661 -> 0.98322157093260978206633922877716078683518617768411 Inexact Rounded -logx2515 log10 0.00000000050150361386555527496607245976120864985611 -> -9.2997259330798261040411086835563234390934934629340 Inexact Rounded -logx2516 log10 098.24754029731994125797723545333677604490074810751 -> 1.9923216862874337077795278629351060819105679670633 Inexact Rounded -logx2517 log10 7.5091998150046994320441463854301624742491015752980 -> 0.87559366078005924080766469158763499725414024128781 Inexact Rounded -logx2518 log10 0.00000000000079540571273330075193668596942268542425 -> -12.099411294165176028817305108475326325006250936963 Inexact Rounded -logx2519 log10 0.00000042395034799555215782907515074134154915491701 -> -6.3726850039125381134069450802108893075604464135297 Inexact Rounded -logx2520 log10 56.683376304674355481905023145238799909301732694982 -> 1.7534557107853480435703421826077606250636580091754 Inexact Rounded -logx2521 log10 48.734033811444195070807606721517169810438049581227 -> 1.6878323602741065190942654710049433808208291564049 Inexact Rounded -logx2522 log10 0.00074830310930046865009851706989430228561880221063 -> -3.1259224502209974082223667712016445572431791920618 Inexact Rounded -logx2523 log10 36.677348885111593384020836720396262497122708598359 -> 1.5643979364260796086754530282302605477567469395425 Inexact Rounded -logx2524 log10 0.00000000000000004495678560480432858812419145833744 -> -16.347204748239740510014320630363244015916029619561 Inexact Rounded -logx2525 log10 9509.5854013650642799374159131940108748594774307104 -> 3.9781615829916326741100166519726824430945406302661 Inexact Rounded -logx2526 log10 0.07834891268689177014044454793608715276615743819097 -> -1.1059670262197643147805517398621288897669876996348 Inexact Rounded -logx2527 log10 0.00000029584529880706128444454688454999032801904794 -> -6.5289353275814043710076526920566721570375026917206 Inexact Rounded -logx2528 log10 3.0713496544497618098794332787772186176981011904294 -> 0.48732926103896828546424341029492468100431414072994 Inexact Rounded -logx2529 log10 352.66392670788816474407442785460803833927136413943 -> 2.5473610388199562714709836398243933320284077008314 Inexact Rounded -logx2530 log10 0.00304743125181876267210516527361742185617091801650 -> -2.5160660830163981967774124745311497447050056400207 Inexact Rounded -logx2531 log10 0.00000076120535894952136499250364604538117729437183 -> -6.1184981629047051532448413863950776496652483019415 Inexact Rounded -logx2532 log10 769.88795978534353052965286195053735007473187735815 -> 2.8864275277862652709986498581064117950288798222100 Inexact Rounded -logx2533 log10 0.00000000000000041297494808612226304619570016336188 -> -15.384076292745415917510668454361868659468669804710 Inexact Rounded -logx2534 log10 860.88864595714426940247940960258558876903741966974 -> 2.9349469800554277915920278090647283233440859155176 Inexact Rounded -logx2535 log10 5839.0328812994787235900178587371051096898683972444 -> 3.7663409208972392569269125539438874737147906238543 Inexact Rounded -logx2536 log10 0.00000028532710151284840471670497112821201598377841 -> -6.5446569753514027675878879843238065488490618159490 Inexact Rounded -logx2537 log10 0.00000000000000009734490059931638483445631835651581 -> -16.011686794011271135978633880864278692254243106931 Inexact Rounded -logx2538 log10 5.8610949526439529489252302463450302981511714144330 -> 0.76797875722452549281028552067645732490929361952278 Inexact Rounded -logx2539 log10 6.6282432221115923372151148990137179611977576327206 -> 0.82139843639227213211012044000785757267155736071361 Inexact Rounded -logx2540 log10 0.00000000001994071862386846626954819923923344413454 -> -10.700259194632339980266559224447212260115021637626 Inexact Rounded - --- P=34, within 0-9999 -Precision: 34 -logx2201 log10 1.522513203889714179088327328864183 -> 0.1825610677098896250496651330492109 Inexact Rounded -logx2202 log10 0.171123774769717316154080888930404 -> -0.7666896483548462582461898092764408 Inexact Rounded -logx2203 log10 0.0000000997467236251714283104963838 -> -7.001101360652518274271569010312115 Inexact Rounded -logx2204 log10 0.0008856103624122479769647543468633 -> -3.052757310476070891830490327138190 Inexact Rounded -logx2205 log10 1.938274868738032930709498221236758 -> 0.2874153648259449520201536171714594 Inexact Rounded -logx2206 log10 479.5667847823826713082613445010097 -> 2.680849095850361068709165157286435 Inexact Rounded -logx2207 log10 8856.136599178820202141823157336804 -> 3.947244306584767101480454261950559 Inexact Rounded -logx2208 log10 0.0000911026318801903982642871344858 -> -4.040469076434979398438617464033826 Inexact Rounded -logx2209 log10 0.0000000000017271112650427414732630 -> -11.76267968314038748995178212654921 Inexact Rounded -logx2210 log10 6.962605370078885647639503548229695 -> 0.8427717807200322352686396925992250 Inexact Rounded -logx2211 log10 0.3354804428992793132855923541692781 -> -0.4743327923012159170967636070844834 Inexact Rounded -logx2212 log10 2.079864257474859008252165836663504 -> 0.3180349916198059046812506741388856 Inexact Rounded -logx2213 log10 2805.479529292939499220276986621988 -> 3.448007104139974344565978780624744 Inexact Rounded -logx2214 log10 66.45731133034187374557028537213949 -> 1.822542767005644041661520936223086 Inexact Rounded -logx2215 log10 0.0000001206521261762681738274822835 -> -6.918465020390216969561494755767318 Inexact Rounded -logx2216 log10 0.0000000001884891916264401160472381 -> -9.724713548119065386091933007528633 Inexact Rounded -logx2217 log10 0.0000015467279551726326581314582759 -> -5.810586065070435383755759514608738 Inexact Rounded -logx2218 log10 0.0090776316728068586744633914135952 -> -2.042027442843745884503280954390114 Inexact Rounded -logx2219 log10 0.0000000000024541106528713393740030 -> -11.61010585935635713090119156069479 Inexact Rounded -logx2220 log10 14.12936879385863410081087750645856 -> 1.150122760895466989841057385742662 Inexact Rounded -logx2221 log10 0.0000036912481831392922922647231392 -> -5.432826753789892283556211380824203 Inexact Rounded -logx2222 log10 0.0000000004067477525420424270138734 -> -9.390674838050073122857868012475060 Inexact Rounded -logx2223 log10 7080.122562705399744969319589806194 -> 3.850040775747103318724330047546916 Inexact Rounded -logx2224 log10 261.3491411363679209175524790255725 -> 2.417221077227536319655699517530855 Inexact Rounded -logx2225 log10 003.9945581449915240094728380041494 -> 0.6014687471531988260823066997845691 Inexact Rounded -logx2226 log10 0.0000000000583549164588495206767840 -> -10.23392254834182677023231713519341 Inexact Rounded -logx2227 log10 9567.961832607240278342761088487484 -> 3.980819434211107631569386147016368 Inexact Rounded -logx2228 log10 06.26592979160342972777219828867033 -> 0.7969855243966221408595024012574729 Inexact Rounded -logx2229 log10 0.0000000000589847046598067273287319 -> -10.22926059078206218717755253582907 Inexact Rounded -logx2230 log10 567.9388648235589204769442863724997 -> 2.754301589058313576472380262907638 Inexact Rounded -logx2231 log10 039.7790325480037778918162264883415 -> 1.599654216592019199639285308997886 Inexact Rounded -logx2232 log10 0.0000000005123951921894162149817207 -> -9.290394953898862694847327137242690 Inexact Rounded -logx2233 log10 0.0000000000038500999723636904276723 -> -11.41452799337924056186867324854691 Inexact Rounded -logx2234 log10 0.0006726500658977759825616537935864 -> -3.172210810922768725687671849421792 Inexact Rounded -logx2235 log10 260.2400250475967528429943779126507 -> 2.415374092073799204236801383070064 Inexact Rounded -logx2236 log10 0.0000000006101942339385102585042548 -> -9.214531900562046557191261226632509 Inexact Rounded -logx2237 log10 0.0000000010846867501382746760066557 -> -8.964695664883282406359874242387236 Inexact Rounded -logx2238 log10 60.24078375568814769010333711509928 -> 1.779890613567084253168373266648922 Inexact Rounded -logx2239 log10 0.0012058738711757669337600252986093 -> -2.918698115012605915753728220896010 Inexact Rounded -logx2240 log10 230.9450930197841600611503095185600 -> 2.363508739056822846742942599628966 Inexact Rounded - --- P=16, within 0-999 -Precision: 16 -logx2101 log10 0.0072067119605184 -> -2.142262835573038 Inexact Rounded -logx2102 log10 503.6828482226624 -> 2.702157162195652 Inexact Rounded -logx2103 log10 64.96074447821815 -> 1.812650993464174 Inexact Rounded -logx2104 log10 48.75408597467246 -> 1.688011018842600 Inexact Rounded -logx2105 log10 0.0329009839269587 -> -1.482791113975280 Inexact Rounded -logx2106 log10 223.5320415060633 -> 2.349339784523410 Inexact Rounded -logx2107 log10 73.12765002292194 -> 1.864081617476268 Inexact Rounded -logx2108 log10 487.3749378358509 -> 2.687863192802252 Inexact Rounded -logx2109 log10 0.0000019671987621 -> -5.706151757557926 Inexact Rounded -logx2110 log10 0.0570680660609784 -> -1.243606844697873 Inexact Rounded -logx2111 log10 33.10311638788998 -> 1.519868880976773 Inexact Rounded -logx2112 log10 0.0687382699187077 -> -1.162801402868185 Inexact Rounded -logx2113 log10 258.9416193626484 -> 2.413201859654145 Inexact Rounded -logx2114 log10 0.0005306100136736 -> -3.275224558269725 Inexact Rounded -logx2115 log10 65.78490393408572 -> 1.818126244825109 Inexact Rounded -logx2116 log10 504.2328842073510 -> 2.702631165346958 Inexact Rounded -logx2117 log10 9.417432755815027 -> 0.9739325278524503 Inexact Rounded -logx2118 log10 006.7054835355498 -> 0.8264301004947640 Inexact Rounded -logx2119 log10 0.0917012272363915 -> -1.037624852133399 Inexact Rounded -logx2120 log10 5.959404385244921 -> 0.7752028561953401 Inexact Rounded -logx2121 log10 0.0001209759148486 -> -3.917301084968903 Inexact Rounded -logx2122 log10 0.0004706112139838 -> -3.327337728428039 Inexact Rounded -logx2123 log10 0.0069700457377046 -> -2.156764372035771 Inexact Rounded -logx2124 log10 0.5155584569852619 -> -0.2877220847805025 Inexact Rounded -logx2125 log10 88.06005885607414 -> 1.944778971389913 Inexact Rounded -logx2126 log10 0.0448240038219866 -> -1.348489353509709 Inexact Rounded -logx2127 log10 3.419622484059565 -> 0.5339781639101145 Inexact Rounded -logx2128 log10 5.171123353858721 -> 0.7135848977142854 Inexact Rounded -logx2129 log10 0.0002133188319807 -> -3.670970802945872 Inexact Rounded -logx2130 log10 46.21086703136966 -> 1.664744117045149 Inexact Rounded -logx2131 log10 0.0000631053714415 -> -4.199933672639880 Inexact Rounded -logx2132 log10 78.66019196870698 -> 1.895755001962469 Inexact Rounded -logx2133 log10 0.0007152278351188 -> -3.145555592082297 Inexact Rounded -logx2134 log10 45.52509819928536 -> 1.658250891256892 Inexact Rounded -logx2135 log10 0.0000703227795740 -> -4.152903971697183 Inexact Rounded -logx2136 log10 26.24438641426669 -> 1.419036423550599 Inexact Rounded -logx2137 log10 0.0000044654829535 -> -5.350131564166817 Inexact Rounded -logx2138 log10 0.7360702733062529 -> -0.1330807211893611 Inexact Rounded -logx2139 log10 8.417059176469655 -> 0.9251603805112778 Inexact Rounded -logx2140 log10 0.0002926570767968 -> -3.533640969664818 Inexact Rounded - --- P=7, within 0-99 -Precision: 7 -logx2001 log10 57.26089 -> 1.757858 Inexact Rounded -logx2002 log10 0.0575421 -> -1.240014 Inexact Rounded -logx2003 log10 0.5918465 -> -0.2277909 Inexact Rounded -logx2004 log10 0.0068776 -> -2.162563 Inexact Rounded -logx2005 log10 0.0066833 -> -2.175009 Inexact Rounded -logx2006 log10 9.926963 -> 0.9968164 Inexact Rounded -logx2007 log10 0.0041852 -> -2.378284 Inexact Rounded -logx2008 log10 84.15412 -> 1.925075 Inexact Rounded -logx2009 log10 2.466856 -> 0.3921438 Inexact Rounded -logx2010 log10 0.0058047 -> -2.236220 Inexact Rounded -logx2011 log10 9.885154 -> 0.9949834 Inexact Rounded -logx2012 log10 0.6667654 -> -0.1760269 Inexact Rounded -logx2013 log10 34.65736 -> 1.539795 Inexact Rounded -logx2014 log10 0.0026884 -> -2.570506 Inexact Rounded -logx2015 log10 0.0432767 -> -1.363746 Inexact Rounded -logx2016 log10 66.01407 -> 1.819637 Inexact Rounded -logx2017 log10 0.0070572 -> -2.151368 Inexact Rounded -logx2018 log10 0.0731613 -> -1.135719 Inexact Rounded -logx2019 log10 9.838983 -> 0.9929502 Inexact Rounded -logx2020 log10 15.89696 -> 1.201314 Inexact Rounded -logx2021 log10 8.459247 -> 0.9273317 Inexact Rounded -logx2022 log10 0.0010873 -> -2.963651 Inexact Rounded -logx2023 log10 0.6498619 -> -0.1871789 Inexact Rounded -logx2024 log10 0.0847008 -> -1.072112 Inexact Rounded -logx2025 log10 0.0075489 -> -2.122116 Inexact Rounded -logx2026 log10 51.11152 -> 1.708519 Inexact Rounded -logx2027 log10 0.7233866 -> -0.1406295 Inexact Rounded -logx2028 log10 2.254721 -> 0.3530928 Inexact Rounded -logx2029 log10 6.568444 -> 0.8174625 Inexact Rounded -logx2030 log10 83.72639 -> 1.922862 Inexact Rounded -logx2031 log10 6.720585 -> 0.8274071 Inexact Rounded -logx2032 log10 87.90366 -> 1.944007 Inexact Rounded -logx2033 log10 0.0433324 -> -1.363187 Inexact Rounded -logx2034 log10 34.63912 -> 1.539567 Inexact Rounded -logx2035 log10 0.8089059 -> -0.09210200 Inexact Rounded -logx2036 log10 7.793405 -> 0.8917272 Inexact Rounded -logx2037 log10 0.0041757 -> -2.379271 Inexact Rounded -logx2038 log10 7.135417 -> 0.8534194 Inexact Rounded -logx2039 log10 12.49570 -> 1.096761 Inexact Rounded -logx2040 log10 6.356276 -> 0.8032027 Inexact Rounded - --------- -maxExponent: 384 -minExponent: -383 -precision: 16 -rounding: half_even - --- special values -logx820 log10 Infinity -> Infinity -logx821 log10 0 -> -Infinity -logx822 log10 NaN -> NaN -logx823 log10 sNaN -> NaN Invalid_operation --- propagating NaNs -logx824 log10 sNaN123 -> NaN123 Invalid_operation -logx825 log10 -sNaN321 -> -NaN321 Invalid_operation -logx826 log10 NaN456 -> NaN456 -logx827 log10 -NaN654 -> -NaN654 -logx828 log10 NaN1 -> NaN1 - - --- Invalid operations due to restrictions --- [next two probably skipped by most test harnesses] -precision: 100000000 -logx901 log10 1 -> NaN Invalid_context -precision: 99999999 -logx902 log10 0 -> NaN Invalid_context - -precision: 9 -maxExponent: 1000000 -minExponent: -999999 -logx903 log10 1 -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999999 -logx904 log10 0 -> -Infinity -maxExponent: 999999 -minExponent: -1000000 -logx905 log10 1 -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999998 -logx906 log10 0 -> -Infinity - --- Null test -logx900 log10 # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- log10.decTest -- decimal logarithm in base 10 -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This emphasises the testing of notable cases, as they will often +-- have unusual paths (especially the 10**n results). + +extended: 1 +precision: 16 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- examples in specification +precision: 9 +logxs000 log10 0 -> -Infinity +logxs001 log10 0.001 -> -3 +logxs002 log10 1 -> 0 +logxs003 log10 2 -> 0.301029996 Inexact Rounded +logxs004 log10 10 -> 1 +logxs005 log10 70 -> 1.84509804 Inexact Rounded +logxs006 log10 +Infinity -> Infinity + + +-- basics (examples in specification, etc.) +precision: 16 +logx0000 log10 0 -> -Infinity +logx0001 log10 7E-1000 -> -999.1549019599857 Inexact Rounded +logx0002 log10 1.1E-9 -> -8.958607314841775 Inexact Rounded +logx0003 log10 0.0007 -> -3.154901959985743 Inexact Rounded +logx0004 log10 0.11 -> -0.9586073148417750 Inexact Rounded +logx0005 log10 0.7 -> -0.1549019599857432 Inexact Rounded +logx0006 log10 1 -> 0 +logx0007 log10 1.5 -> 0.1760912590556812 Inexact Rounded +logx0008 log10 2 -> 0.3010299956639812 Inexact Rounded +logx0009 log10 2.718281828459045 -> 0.4342944819032518 Inexact Rounded +logx0010 log10 2.718281828459046 -> 0.4342944819032519 Inexact Rounded +logx0011 log10 2.718281828459047 -> 0.4342944819032521 Inexact Rounded +logx0012 log10 7 -> 0.8450980400142568 Inexact Rounded +logx0013 log10 10 -> 1 +logx0014 log10 10.5 -> 1.021189299069938 Inexact Rounded +logx0015 log10 11 -> 1.041392685158225 Inexact Rounded +logx0016 log10 70 -> 1.845098040014257 Inexact Rounded +logx0017 log10 9999 -> 3.999956568380192 Inexact Rounded +logx0018 log10 1.21E6 -> 6.082785370316450 Inexact Rounded +logx0019 log10 1.1E+9 -> 9.041392685158225 Inexact Rounded +logx0020 log10 7E+1000 -> 1000.845098040014 Inexact Rounded +logx0021 log10 +Infinity -> Infinity + +-- notable cases +-- negatives +logx0031 log10 -1E-9 -> NaN Invalid_operation +logx0032 log10 -0.0007 -> NaN Invalid_operation +logx0033 log10 -0.1 -> NaN Invalid_operation +logx0034 log10 -0.7 -> NaN Invalid_operation +logx0035 log10 -1 -> NaN Invalid_operation +logx0036 log10 -1.5 -> NaN Invalid_operation +logx0037 log10 -2 -> NaN Invalid_operation +logx0038 log10 -10.5 -> NaN Invalid_operation +logx0039 log10 -10.5 -> NaN Invalid_operation +logx0040 log10 -9999 -> NaN Invalid_operation +logx0041 log10 -10 -> NaN Invalid_operation +logx0042 log10 -0 -> -Infinity +logx0043 log10 -0E+17 -> -Infinity +logx0044 log10 -0E-17 -> -Infinity +-- other zeros +logx0051 log10 0 -> -Infinity +logx0052 log10 0E+17 -> -Infinity +logx0053 log10 0E-17 -> -Infinity +-- infinities +logx0055 log10 -Infinity -> NaN Invalid_operation +logx0056 log10 +Infinity -> Infinity +-- ones +logx0061 log10 1 -> 0 +logx0062 log10 1.0 -> 0 +logx0063 log10 1.000000000000000 -> 0 +logx0064 log10 1.000000000000000000 -> 0 + +-- notable cases -- exact powers of 10 +logx1100 log10 1 -> 0 +logx1101 log10 10 -> 1 +logx1102 log10 100 -> 2 +logx1103 log10 1000 -> 3 +logx1104 log10 10000 -> 4 +logx1105 log10 100000 -> 5 +logx1106 log10 1000000 -> 6 +logx1107 log10 10000000 -> 7 +logx1108 log10 100000000 -> 8 +logx1109 log10 1000000000 -> 9 +logx1110 log10 10000000000 -> 10 +logx1111 log10 100000000000 -> 11 +logx1112 log10 1000000000000 -> 12 +logx1113 log10 0.00000000001 -> -11 +logx1114 log10 0.0000000001 -> -10 +logx1115 log10 0.000000001 -> -9 +logx1116 log10 0.00000001 -> -8 +logx1117 log10 0.0000001 -> -7 +logx1118 log10 0.000001 -> -6 +logx1119 log10 0.00001 -> -5 +logx1120 log10 0.0001 -> -4 +logx1121 log10 0.001 -> -3 +logx1122 log10 0.01 -> -2 +logx1123 log10 0.1 -> -1 +logx1124 log10 1E-99 -> -99 +logx1125 log10 1E-100 -> -100 +logx1126 log10 1E-383 -> -383 + +-- check normally exact cases round properly +precision: 1 +logx1141 log10 10000000000 -> 1E+1 Rounded +logx1142 log10 1000000000000 -> 1E+1 Inexact Rounded +logx1143 log10 1E+100 -> 1E+2 Rounded +logx1144 log10 1E+123 -> 1E+2 Inexact Rounded +logx1145 log10 1E+126 -> 1E+2 Inexact Rounded +logx1146 log10 1E+916 -> 9E+2 Inexact Rounded +logx1147 log10 1E+999 -> 1E+3 Inexact Rounded + +precision: 2 +logx1151 log10 10000000000 -> 10 +logx1152 log10 1000000000000 -> 12 +logx1153 log10 1E+100 -> 1.0E+2 Rounded +logx1154 log10 1E+123 -> 1.2E+2 Inexact Rounded +logx1155 log10 1E+126 -> 1.3E+2 Inexact Rounded +logx1156 log10 1E+916 -> 9.2E+2 Inexact Rounded +logx1157 log10 1E+999 -> 1.0E+3 Inexact Rounded +-- some half-way point rounds, other cases, and negatives +logx1158 log10 1E+125 -> 1.2E+2 Inexact Rounded +logx1159 log10 1E+135 -> 1.4E+2 Inexact Rounded +logx1160 log10 1E+129 -> 1.3E+2 Inexact Rounded +logx1161 log10 1E+131 -> 1.3E+2 Inexact Rounded +logx1162 log10 1E-123 -> -1.2E+2 Inexact Rounded +logx1163 log10 1E-126 -> -1.3E+2 Inexact Rounded +logx1164 log10 1E-916 -> -9.2E+2 Inexact Rounded +logx1165 log10 1E-999 -> -1.0E+3 Inexact Rounded +logx1166 log10 1E-125 -> -1.2E+2 Inexact Rounded +logx1167 log10 1E-135 -> -1.4E+2 Inexact Rounded +logx1168 log10 1E-129 -> -1.3E+2 Inexact Rounded +logx1169 log10 1E-131 -> -1.3E+2 Inexact Rounded + +precision: 3 +logx1171 log10 10000000000 -> 10 +logx1172 log10 1000000000000 -> 12 +logx1173 log10 1E+100 -> 100 +logx1174 log10 1E+123 -> 123 +logx1175 log10 1E+126 -> 126 +logx1176 log10 1E+916 -> 916 +logx1177 log10 1E+999 -> 999 + +-- log10(2) .. tests both ln(2) and ln(10) constants, too +precision: 50 +logx1201 log10 2 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded +logx1202 log10 2.000 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded +logx1203 log10 0.2E1 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded +precision: 49 +logx1204 log10 2 -> 0.3010299956639811952137388947244930267681898814621 Inexact Rounded +precision: 48 +logx1205 log10 2 -> 0.301029995663981195213738894724493026768189881462 Inexact Rounded +precision: 47 +logx1206 log10 2 -> 0.30102999566398119521373889472449302676818988146 Inexact Rounded +precision: 46 +logx1207 log10 2 -> 0.3010299956639811952137388947244930267681898815 Inexact Rounded +precision: 45 +logx1208 log10 2 -> 0.301029995663981195213738894724493026768189881 Inexact Rounded +precision: 44 +logx1209 log10 2 -> 0.30102999566398119521373889472449302676818988 Inexact Rounded +precision: 43 +logx1210 log10 2 -> 0.3010299956639811952137388947244930267681899 Inexact Rounded +precision: 42 +logx1211 log10 2 -> 0.301029995663981195213738894724493026768190 Inexact Rounded +precision: 41 +logx1212 log10 2 -> 0.30102999566398119521373889472449302676819 Inexact Rounded +precision: 40 +logx1213 log10 2 -> 0.3010299956639811952137388947244930267682 Inexact Rounded +precision: 39 +logx1214 log10 2 -> 0.301029995663981195213738894724493026768 Inexact Rounded +precision: 38 +logx1215 log10 2 -> 0.30102999566398119521373889472449302677 Inexact Rounded +precision: 37 +logx1216 log10 2 -> 0.3010299956639811952137388947244930268 Inexact Rounded +precision: 36 +logx1217 log10 2 -> 0.301029995663981195213738894724493027 Inexact Rounded +precision: 35 +logx1218 log10 2 -> 0.30102999566398119521373889472449303 Inexact Rounded +precision: 34 +logx1219 log10 2 -> 0.3010299956639811952137388947244930 Inexact Rounded +precision: 33 +logx1220 log10 2 -> 0.301029995663981195213738894724493 Inexact Rounded +precision: 32 +logx1221 log10 2 -> 0.30102999566398119521373889472449 Inexact Rounded +precision: 31 +logx1222 log10 2 -> 0.3010299956639811952137388947245 Inexact Rounded +precision: 30 +logx1223 log10 2 -> 0.301029995663981195213738894724 Inexact Rounded +precision: 29 +logx1224 log10 2 -> 0.30102999566398119521373889472 Inexact Rounded +precision: 28 +logx1225 log10 2 -> 0.3010299956639811952137388947 Inexact Rounded +precision: 27 +logx1226 log10 2 -> 0.301029995663981195213738895 Inexact Rounded +precision: 26 +logx1227 log10 2 -> 0.30102999566398119521373889 Inexact Rounded +precision: 25 +logx1228 log10 2 -> 0.3010299956639811952137389 Inexact Rounded +precision: 24 +logx1229 log10 2 -> 0.301029995663981195213739 Inexact Rounded +precision: 23 +logx1230 log10 2 -> 0.30102999566398119521374 Inexact Rounded +precision: 22 +logx1231 log10 2 -> 0.3010299956639811952137 Inexact Rounded +precision: 21 +logx1232 log10 2 -> 0.301029995663981195214 Inexact Rounded +precision: 20 +logx1233 log10 2 -> 0.30102999566398119521 Inexact Rounded +precision: 19 +logx1234 log10 2 -> 0.3010299956639811952 Inexact Rounded +precision: 18 +logx1235 log10 2 -> 0.301029995663981195 Inexact Rounded +precision: 17 +logx1236 log10 2 -> 0.30102999566398120 Inexact Rounded +precision: 16 +logx1237 log10 2 -> 0.3010299956639812 Inexact Rounded +precision: 15 +logx1238 log10 2 -> 0.301029995663981 Inexact Rounded +precision: 14 +logx1239 log10 2 -> 0.30102999566398 Inexact Rounded +precision: 13 +logx1240 log10 2 -> 0.3010299956640 Inexact Rounded +precision: 12 +logx1241 log10 2 -> 0.301029995664 Inexact Rounded +precision: 11 +logx1242 log10 2 -> 0.30102999566 Inexact Rounded +precision: 10 +logx1243 log10 2 -> 0.3010299957 Inexact Rounded +precision: 9 +logx1244 log10 2 -> 0.301029996 Inexact Rounded +precision: 8 +logx1245 log10 2 -> 0.30103000 Inexact Rounded +precision: 7 +logx1246 log10 2 -> 0.3010300 Inexact Rounded +precision: 6 +logx1247 log10 2 -> 0.301030 Inexact Rounded +precision: 5 +logx1248 log10 2 -> 0.30103 Inexact Rounded +precision: 4 +logx1249 log10 2 -> 0.3010 Inexact Rounded +precision: 3 +logx1250 log10 2 -> 0.301 Inexact Rounded +precision: 2 +logx1251 log10 2 -> 0.30 Inexact Rounded +precision: 1 +logx1252 log10 2 -> 0.3 Inexact Rounded + +maxExponent: 384 +minExponent: -383 +precision: 16 +rounding: half_even + +-- More close-to-e, etc., tests +precision: 34 +logx1301 log10 2.718281828459045235360287471352661 -> 0.4342944819032518276511289189166048 Inexact Rounded +logx1302 log10 2.718281828459045235360287471352662 -> 0.4342944819032518276511289189166050 Inexact Rounded +logx1303 log10 2.718281828459045235360287471352663 -> 0.4342944819032518276511289189166052 Inexact Rounded +logx1304 log10 0.99999999999999999999999999999999 -> -4.342944819032518276511289189166073E-33 Inexact Rounded +logx1305 log10 0.999999999999999999999999999999999 -> -4.342944819032518276511289189166053E-34 Inexact Rounded +logx1306 log10 0.9999999999999999999999999999999999 -> -4.342944819032518276511289189166051E-35 Inexact Rounded +logx1307 log10 1.000000000000000000000000000000000 -> 0 +logx1308 log10 1.0000000000000000000000000000000001 -> 4.342944819032518276511289189166051E-35 Inexact Rounded +logx1309 log10 1.000000000000000000000000000000001 -> 4.342944819032518276511289189166049E-34 Inexact Rounded +logx1310 log10 1.00000000000000000000000000000001 -> 4.342944819032518276511289189166029E-33 Inexact Rounded +-- lower p +precision: 7 +logx1320 log10 0.999999 -> -4.342947E-7 Inexact Rounded +logx1321 log10 0.9999999 -> -4.342945E-8 Inexact Rounded +logx1322 log10 0.99999999 -> -4.342945E-9 Inexact Rounded +logx1323 log10 0.999999999 -> -4.342945E-10 Inexact Rounded +logx1324 log10 1.00000000 -> 0 +logx1325 log10 1.00000001 -> 4.342945E-9 Inexact Rounded +logx1326 log10 1.0000001 -> 4.342945E-8 Inexact Rounded +logx1327 log10 1.000001 -> 4.342943E-7 Inexact Rounded + +-- near 10^3 +precision: 9 +logx1331 log10 999.9999998 -> 3.00000000 Inexact Rounded +logx1332 log10 999.9999999 -> 3.00000000 Inexact Rounded +logx1333 log10 1000.000000 -> 3 +logx1334 log10 1000.000001 -> 3.00000000 Inexact Rounded +logx1335 log10 1000.000002 -> 3.00000000 Inexact Rounded +precision: 16 +logx1341 log10 999.9999998 -> 2.999999999913141 Inexact Rounded +logx1342 log10 999.9999999 -> 2.999999999956571 Inexact Rounded +logx1343 log10 1000.000000 -> 3 +logx1344 log10 1000.000001 -> 3.000000000434294 Inexact Rounded +logx1345 log10 1000.000002 -> 3.000000000868589 Inexact Rounded + +-- suggestions from Ilan Nehama +logx1400 log10 10E-3 -> -2 +logx1401 log10 10E-2 -> -1 +logx1402 log10 100E-2 -> 0 +logx1403 log10 1000E-2 -> 1 +logx1404 log10 10000E-2 -> 2 +logx1405 log10 10E-1 -> 0 +logx1406 log10 100E-1 -> 1 +logx1407 log10 1000E-1 -> 2 +logx1408 log10 10000E-1 -> 3 +logx1409 log10 10E0 -> 1 +logx1410 log10 100E0 -> 2 +logx1411 log10 1000E0 -> 3 +logx1412 log10 10000E0 -> 4 +logx1413 log10 10E1 -> 2 +logx1414 log10 100E1 -> 3 +logx1415 log10 1000E1 -> 4 +logx1416 log10 10000E1 -> 5 +logx1417 log10 10E2 -> 3 +logx1418 log10 100E2 -> 4 +logx1419 log10 1000E2 -> 5 +logx1420 log10 10000E2 -> 6 + +-- Randoms +-- P=50, within 0-9999 +Precision: 50 +logx2501 log10 0.00035448001667968141775891246991912655961163345904 -> -3.4504082425411775290864053318247274944685586188505 Inexact Rounded +logx2502 log10 70.636455726424311228255338637935330826995136597644 -> 1.8490288998408492045793070255302335558140975719247 Inexact Rounded +logx2503 log10 0.00000000000000233550362473821889060812804063040169 -> -14.631619454343834858023578299142866557717904223667 Inexact Rounded +logx2504 log10 97.783628621523244679901260358286898958832135433764 -> 1.9902661493224219517897657964362571690592734407330 Inexact Rounded +logx2505 log10 0062.2377135315858392802612812022807838599572017342 -> 1.7940536293085066199287632725026837018486533544141 Inexact Rounded +logx2506 log10 6.3767634652071053619977602804724129652981747879532 -> 0.80460030789825961615100163576080761326857374098644 Inexact Rounded +logx2507 log10 63.297088981313278529306533814195068850532666658798 -> 1.8013837373724427092417170149098614410849353839673 Inexact Rounded +logx2508 log10 0.00000077239693316881797717820110898167721602299187 -> -6.1121594592718550613773886241951966264826760310047 Inexact Rounded +logx2509 log10 0.00000003953580359780185534830572461922527831395002 -> -7.4030094293833847136252547069905477213541787177561 Inexact Rounded +logx2510 log10 754.62905817369989169188998111527272688791544577204 -> 2.8777335243761300047758534304371912099958057545416 Inexact Rounded +logx2511 log10 0.00000048360378410241428936607147056283282849158312 -> -6.3155103095309353457604038397980091650760346334512 Inexact Rounded +logx2512 log10 0.00007509037583645612577196104591672080542932166089 -> -4.1244157219700166314012344705538088030592896111026 Inexact Rounded +logx2513 log10 0.00000000000705475944638915053419839063567898092064 -> -11.151517790256466048553810002525868198178167950377 Inexact Rounded +logx2514 log10 9.6210300460497657917445410947099633479609165120661 -> 0.98322157093260978206633922877716078683518617768411 Inexact Rounded +logx2515 log10 0.00000000050150361386555527496607245976120864985611 -> -9.2997259330798261040411086835563234390934934629340 Inexact Rounded +logx2516 log10 098.24754029731994125797723545333677604490074810751 -> 1.9923216862874337077795278629351060819105679670633 Inexact Rounded +logx2517 log10 7.5091998150046994320441463854301624742491015752980 -> 0.87559366078005924080766469158763499725414024128781 Inexact Rounded +logx2518 log10 0.00000000000079540571273330075193668596942268542425 -> -12.099411294165176028817305108475326325006250936963 Inexact Rounded +logx2519 log10 0.00000042395034799555215782907515074134154915491701 -> -6.3726850039125381134069450802108893075604464135297 Inexact Rounded +logx2520 log10 56.683376304674355481905023145238799909301732694982 -> 1.7534557107853480435703421826077606250636580091754 Inexact Rounded +logx2521 log10 48.734033811444195070807606721517169810438049581227 -> 1.6878323602741065190942654710049433808208291564049 Inexact Rounded +logx2522 log10 0.00074830310930046865009851706989430228561880221063 -> -3.1259224502209974082223667712016445572431791920618 Inexact Rounded +logx2523 log10 36.677348885111593384020836720396262497122708598359 -> 1.5643979364260796086754530282302605477567469395425 Inexact Rounded +logx2524 log10 0.00000000000000004495678560480432858812419145833744 -> -16.347204748239740510014320630363244015916029619561 Inexact Rounded +logx2525 log10 9509.5854013650642799374159131940108748594774307104 -> 3.9781615829916326741100166519726824430945406302661 Inexact Rounded +logx2526 log10 0.07834891268689177014044454793608715276615743819097 -> -1.1059670262197643147805517398621288897669876996348 Inexact Rounded +logx2527 log10 0.00000029584529880706128444454688454999032801904794 -> -6.5289353275814043710076526920566721570375026917206 Inexact Rounded +logx2528 log10 3.0713496544497618098794332787772186176981011904294 -> 0.48732926103896828546424341029492468100431414072994 Inexact Rounded +logx2529 log10 352.66392670788816474407442785460803833927136413943 -> 2.5473610388199562714709836398243933320284077008314 Inexact Rounded +logx2530 log10 0.00304743125181876267210516527361742185617091801650 -> -2.5160660830163981967774124745311497447050056400207 Inexact Rounded +logx2531 log10 0.00000076120535894952136499250364604538117729437183 -> -6.1184981629047051532448413863950776496652483019415 Inexact Rounded +logx2532 log10 769.88795978534353052965286195053735007473187735815 -> 2.8864275277862652709986498581064117950288798222100 Inexact Rounded +logx2533 log10 0.00000000000000041297494808612226304619570016336188 -> -15.384076292745415917510668454361868659468669804710 Inexact Rounded +logx2534 log10 860.88864595714426940247940960258558876903741966974 -> 2.9349469800554277915920278090647283233440859155176 Inexact Rounded +logx2535 log10 5839.0328812994787235900178587371051096898683972444 -> 3.7663409208972392569269125539438874737147906238543 Inexact Rounded +logx2536 log10 0.00000028532710151284840471670497112821201598377841 -> -6.5446569753514027675878879843238065488490618159490 Inexact Rounded +logx2537 log10 0.00000000000000009734490059931638483445631835651581 -> -16.011686794011271135978633880864278692254243106931 Inexact Rounded +logx2538 log10 5.8610949526439529489252302463450302981511714144330 -> 0.76797875722452549281028552067645732490929361952278 Inexact Rounded +logx2539 log10 6.6282432221115923372151148990137179611977576327206 -> 0.82139843639227213211012044000785757267155736071361 Inexact Rounded +logx2540 log10 0.00000000001994071862386846626954819923923344413454 -> -10.700259194632339980266559224447212260115021637626 Inexact Rounded + +-- P=34, within 0-9999 +Precision: 34 +logx2201 log10 1.522513203889714179088327328864183 -> 0.1825610677098896250496651330492109 Inexact Rounded +logx2202 log10 0.171123774769717316154080888930404 -> -0.7666896483548462582461898092764408 Inexact Rounded +logx2203 log10 0.0000000997467236251714283104963838 -> -7.001101360652518274271569010312115 Inexact Rounded +logx2204 log10 0.0008856103624122479769647543468633 -> -3.052757310476070891830490327138190 Inexact Rounded +logx2205 log10 1.938274868738032930709498221236758 -> 0.2874153648259449520201536171714594 Inexact Rounded +logx2206 log10 479.5667847823826713082613445010097 -> 2.680849095850361068709165157286435 Inexact Rounded +logx2207 log10 8856.136599178820202141823157336804 -> 3.947244306584767101480454261950559 Inexact Rounded +logx2208 log10 0.0000911026318801903982642871344858 -> -4.040469076434979398438617464033826 Inexact Rounded +logx2209 log10 0.0000000000017271112650427414732630 -> -11.76267968314038748995178212654921 Inexact Rounded +logx2210 log10 6.962605370078885647639503548229695 -> 0.8427717807200322352686396925992250 Inexact Rounded +logx2211 log10 0.3354804428992793132855923541692781 -> -0.4743327923012159170967636070844834 Inexact Rounded +logx2212 log10 2.079864257474859008252165836663504 -> 0.3180349916198059046812506741388856 Inexact Rounded +logx2213 log10 2805.479529292939499220276986621988 -> 3.448007104139974344565978780624744 Inexact Rounded +logx2214 log10 66.45731133034187374557028537213949 -> 1.822542767005644041661520936223086 Inexact Rounded +logx2215 log10 0.0000001206521261762681738274822835 -> -6.918465020390216969561494755767318 Inexact Rounded +logx2216 log10 0.0000000001884891916264401160472381 -> -9.724713548119065386091933007528633 Inexact Rounded +logx2217 log10 0.0000015467279551726326581314582759 -> -5.810586065070435383755759514608738 Inexact Rounded +logx2218 log10 0.0090776316728068586744633914135952 -> -2.042027442843745884503280954390114 Inexact Rounded +logx2219 log10 0.0000000000024541106528713393740030 -> -11.61010585935635713090119156069479 Inexact Rounded +logx2220 log10 14.12936879385863410081087750645856 -> 1.150122760895466989841057385742662 Inexact Rounded +logx2221 log10 0.0000036912481831392922922647231392 -> -5.432826753789892283556211380824203 Inexact Rounded +logx2222 log10 0.0000000004067477525420424270138734 -> -9.390674838050073122857868012475060 Inexact Rounded +logx2223 log10 7080.122562705399744969319589806194 -> 3.850040775747103318724330047546916 Inexact Rounded +logx2224 log10 261.3491411363679209175524790255725 -> 2.417221077227536319655699517530855 Inexact Rounded +logx2225 log10 003.9945581449915240094728380041494 -> 0.6014687471531988260823066997845691 Inexact Rounded +logx2226 log10 0.0000000000583549164588495206767840 -> -10.23392254834182677023231713519341 Inexact Rounded +logx2227 log10 9567.961832607240278342761088487484 -> 3.980819434211107631569386147016368 Inexact Rounded +logx2228 log10 06.26592979160342972777219828867033 -> 0.7969855243966221408595024012574729 Inexact Rounded +logx2229 log10 0.0000000000589847046598067273287319 -> -10.22926059078206218717755253582907 Inexact Rounded +logx2230 log10 567.9388648235589204769442863724997 -> 2.754301589058313576472380262907638 Inexact Rounded +logx2231 log10 039.7790325480037778918162264883415 -> 1.599654216592019199639285308997886 Inexact Rounded +logx2232 log10 0.0000000005123951921894162149817207 -> -9.290394953898862694847327137242690 Inexact Rounded +logx2233 log10 0.0000000000038500999723636904276723 -> -11.41452799337924056186867324854691 Inexact Rounded +logx2234 log10 0.0006726500658977759825616537935864 -> -3.172210810922768725687671849421792 Inexact Rounded +logx2235 log10 260.2400250475967528429943779126507 -> 2.415374092073799204236801383070064 Inexact Rounded +logx2236 log10 0.0000000006101942339385102585042548 -> -9.214531900562046557191261226632509 Inexact Rounded +logx2237 log10 0.0000000010846867501382746760066557 -> -8.964695664883282406359874242387236 Inexact Rounded +logx2238 log10 60.24078375568814769010333711509928 -> 1.779890613567084253168373266648922 Inexact Rounded +logx2239 log10 0.0012058738711757669337600252986093 -> -2.918698115012605915753728220896010 Inexact Rounded +logx2240 log10 230.9450930197841600611503095185600 -> 2.363508739056822846742942599628966 Inexact Rounded + +-- P=16, within 0-999 +Precision: 16 +logx2101 log10 0.0072067119605184 -> -2.142262835573038 Inexact Rounded +logx2102 log10 503.6828482226624 -> 2.702157162195652 Inexact Rounded +logx2103 log10 64.96074447821815 -> 1.812650993464174 Inexact Rounded +logx2104 log10 48.75408597467246 -> 1.688011018842600 Inexact Rounded +logx2105 log10 0.0329009839269587 -> -1.482791113975280 Inexact Rounded +logx2106 log10 223.5320415060633 -> 2.349339784523410 Inexact Rounded +logx2107 log10 73.12765002292194 -> 1.864081617476268 Inexact Rounded +logx2108 log10 487.3749378358509 -> 2.687863192802252 Inexact Rounded +logx2109 log10 0.0000019671987621 -> -5.706151757557926 Inexact Rounded +logx2110 log10 0.0570680660609784 -> -1.243606844697873 Inexact Rounded +logx2111 log10 33.10311638788998 -> 1.519868880976773 Inexact Rounded +logx2112 log10 0.0687382699187077 -> -1.162801402868185 Inexact Rounded +logx2113 log10 258.9416193626484 -> 2.413201859654145 Inexact Rounded +logx2114 log10 0.0005306100136736 -> -3.275224558269725 Inexact Rounded +logx2115 log10 65.78490393408572 -> 1.818126244825109 Inexact Rounded +logx2116 log10 504.2328842073510 -> 2.702631165346958 Inexact Rounded +logx2117 log10 9.417432755815027 -> 0.9739325278524503 Inexact Rounded +logx2118 log10 006.7054835355498 -> 0.8264301004947640 Inexact Rounded +logx2119 log10 0.0917012272363915 -> -1.037624852133399 Inexact Rounded +logx2120 log10 5.959404385244921 -> 0.7752028561953401 Inexact Rounded +logx2121 log10 0.0001209759148486 -> -3.917301084968903 Inexact Rounded +logx2122 log10 0.0004706112139838 -> -3.327337728428039 Inexact Rounded +logx2123 log10 0.0069700457377046 -> -2.156764372035771 Inexact Rounded +logx2124 log10 0.5155584569852619 -> -0.2877220847805025 Inexact Rounded +logx2125 log10 88.06005885607414 -> 1.944778971389913 Inexact Rounded +logx2126 log10 0.0448240038219866 -> -1.348489353509709 Inexact Rounded +logx2127 log10 3.419622484059565 -> 0.5339781639101145 Inexact Rounded +logx2128 log10 5.171123353858721 -> 0.7135848977142854 Inexact Rounded +logx2129 log10 0.0002133188319807 -> -3.670970802945872 Inexact Rounded +logx2130 log10 46.21086703136966 -> 1.664744117045149 Inexact Rounded +logx2131 log10 0.0000631053714415 -> -4.199933672639880 Inexact Rounded +logx2132 log10 78.66019196870698 -> 1.895755001962469 Inexact Rounded +logx2133 log10 0.0007152278351188 -> -3.145555592082297 Inexact Rounded +logx2134 log10 45.52509819928536 -> 1.658250891256892 Inexact Rounded +logx2135 log10 0.0000703227795740 -> -4.152903971697183 Inexact Rounded +logx2136 log10 26.24438641426669 -> 1.419036423550599 Inexact Rounded +logx2137 log10 0.0000044654829535 -> -5.350131564166817 Inexact Rounded +logx2138 log10 0.7360702733062529 -> -0.1330807211893611 Inexact Rounded +logx2139 log10 8.417059176469655 -> 0.9251603805112778 Inexact Rounded +logx2140 log10 0.0002926570767968 -> -3.533640969664818 Inexact Rounded + +-- P=7, within 0-99 +Precision: 7 +logx2001 log10 57.26089 -> 1.757858 Inexact Rounded +logx2002 log10 0.0575421 -> -1.240014 Inexact Rounded +logx2003 log10 0.5918465 -> -0.2277909 Inexact Rounded +logx2004 log10 0.0068776 -> -2.162563 Inexact Rounded +logx2005 log10 0.0066833 -> -2.175009 Inexact Rounded +logx2006 log10 9.926963 -> 0.9968164 Inexact Rounded +logx2007 log10 0.0041852 -> -2.378284 Inexact Rounded +logx2008 log10 84.15412 -> 1.925075 Inexact Rounded +logx2009 log10 2.466856 -> 0.3921438 Inexact Rounded +logx2010 log10 0.0058047 -> -2.236220 Inexact Rounded +logx2011 log10 9.885154 -> 0.9949834 Inexact Rounded +logx2012 log10 0.6667654 -> -0.1760269 Inexact Rounded +logx2013 log10 34.65736 -> 1.539795 Inexact Rounded +logx2014 log10 0.0026884 -> -2.570506 Inexact Rounded +logx2015 log10 0.0432767 -> -1.363746 Inexact Rounded +logx2016 log10 66.01407 -> 1.819637 Inexact Rounded +logx2017 log10 0.0070572 -> -2.151368 Inexact Rounded +logx2018 log10 0.0731613 -> -1.135719 Inexact Rounded +logx2019 log10 9.838983 -> 0.9929502 Inexact Rounded +logx2020 log10 15.89696 -> 1.201314 Inexact Rounded +logx2021 log10 8.459247 -> 0.9273317 Inexact Rounded +logx2022 log10 0.0010873 -> -2.963651 Inexact Rounded +logx2023 log10 0.6498619 -> -0.1871789 Inexact Rounded +logx2024 log10 0.0847008 -> -1.072112 Inexact Rounded +logx2025 log10 0.0075489 -> -2.122116 Inexact Rounded +logx2026 log10 51.11152 -> 1.708519 Inexact Rounded +logx2027 log10 0.7233866 -> -0.1406295 Inexact Rounded +logx2028 log10 2.254721 -> 0.3530928 Inexact Rounded +logx2029 log10 6.568444 -> 0.8174625 Inexact Rounded +logx2030 log10 83.72639 -> 1.922862 Inexact Rounded +logx2031 log10 6.720585 -> 0.8274071 Inexact Rounded +logx2032 log10 87.90366 -> 1.944007 Inexact Rounded +logx2033 log10 0.0433324 -> -1.363187 Inexact Rounded +logx2034 log10 34.63912 -> 1.539567 Inexact Rounded +logx2035 log10 0.8089059 -> -0.09210200 Inexact Rounded +logx2036 log10 7.793405 -> 0.8917272 Inexact Rounded +logx2037 log10 0.0041757 -> -2.379271 Inexact Rounded +logx2038 log10 7.135417 -> 0.8534194 Inexact Rounded +logx2039 log10 12.49570 -> 1.096761 Inexact Rounded +logx2040 log10 6.356276 -> 0.8032027 Inexact Rounded + +-------- +maxExponent: 384 +minExponent: -383 +precision: 16 +rounding: half_even + +-- special values +logx820 log10 Infinity -> Infinity +logx821 log10 0 -> -Infinity +logx822 log10 NaN -> NaN +logx823 log10 sNaN -> NaN Invalid_operation +-- propagating NaNs +logx824 log10 sNaN123 -> NaN123 Invalid_operation +logx825 log10 -sNaN321 -> -NaN321 Invalid_operation +logx826 log10 NaN456 -> NaN456 +logx827 log10 -NaN654 -> -NaN654 +logx828 log10 NaN1 -> NaN1 + + +-- Invalid operations due to restrictions +-- [next two probably skipped by most test harnesses] +precision: 100000000 +logx901 log10 1 -> NaN Invalid_context +precision: 99999999 +logx902 log10 0 -> NaN Invalid_context + +precision: 9 +maxExponent: 1000000 +minExponent: -999999 +logx903 log10 1 -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999999 +logx904 log10 0 -> -Infinity +maxExponent: 999999 +minExponent: -1000000 +logx905 log10 1 -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999998 +logx906 log10 0 -> -Infinity + +-- Null test +logx900 log10 # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/logb.decTest b/Lib/test/decimaltestdata/logb.decTest index ff420d0a842..8b79006257d 100644 --- a/Lib/test/decimaltestdata/logb.decTest +++ b/Lib/test/decimaltestdata/logb.decTest @@ -1,188 +1,188 @@ ------------------------------------------------------------------------- --- logb.decTest -- return integral adjusted exponent as per 754r -- --- Copyright (c) IBM Corporation, 2005, 2009. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This emphasises the testing of notable cases, as they will often --- have unusual paths (especially the 10**n results). - -extended: 1 -rounding: half_even -maxExponent: 999 -minexponent: -999 - --- basics & examples -precision: 9 -logbx001 logb 0 -> -Infinity Division_by_zero -logbx002 logb 1E-999 -> -999 -logbx003 logb 9E-999 -> -999 -logbx004 logb 0.001 -> -3 -logbx005 logb 0.03 -> -2 -logbx006 logb 1 -> 0 -logbx007 logb 2 -> 0 -logbx008 logb 2.5 -> 0 -logbx009 logb 2.50 -> 0 -logbx010 logb 10 -> 1 -logbx011 logb 70 -> 1 -logbx012 logb 100 -> 2 -logbx013 logb 250 -> 2 -logbx014 logb +Infinity -> Infinity - --- negatives are treated as positives -logbx021 logb -0 -> -Infinity Division_by_zero -logbx022 logb -1E-999 -> -999 -logbx023 logb -9E-999 -> -999 -logbx024 logb -0.001 -> -3 -logbx025 logb -1 -> 0 -logbx026 logb -2 -> 0 -logbx027 logb -10 -> 1 -logbx028 logb -70 -> 1 -logbx029 logb -100 -> 2 -logbx030 logb -100000000 -> 8 -logbx031 logb -Infinity -> Infinity - --- zeros -logbx111 logb 0 -> -Infinity Division_by_zero -logbx112 logb -0 -> -Infinity Division_by_zero -logbx113 logb 0E+4 -> -Infinity Division_by_zero -logbx114 logb -0E+4 -> -Infinity Division_by_zero -logbx115 logb 0.0000 -> -Infinity Division_by_zero -logbx116 logb -0.0000 -> -Infinity Division_by_zero -logbx117 logb 0E-141 -> -Infinity Division_by_zero -logbx118 logb -0E-141 -> -Infinity Division_by_zero - --- full coefficients, alternating bits -logbx121 logb 268268268 -> 8 -logbx122 logb -268268268 -> 8 -logbx123 logb 134134134 -> 8 -logbx124 logb -134134134 -> 8 - --- Nmax, Nmin, Ntiny -logbx131 logb 9.99999999E+999 -> 999 -logbx132 logb 1E-999 -> -999 -logbx133 logb 1.00000000E-999 -> -999 -logbx134 logb 1E-1007 -> -1007 - -logbx135 logb -1E-1007 -> -1007 -logbx136 logb -1.00000000E-999 -> -999 -logbx137 logb -1E-999 -> -999 -logbx138 logb -9.99999999E+999 -> 999 - --- ones -logbx0061 logb 1 -> 0 -logbx0062 logb 1.0 -> 0 -logbx0063 logb 1.000000000000000 -> 0 -logbx0064 logb 1.000000000000000000 -> 0 - --- notable cases -- exact powers of 10 -logbx1100 logb 1 -> 0 -logbx1101 logb 10 -> 1 -logbx1102 logb 100 -> 2 -logbx1103 logb 1000 -> 3 -logbx1104 logb 10000 -> 4 -logbx1105 logb 100000 -> 5 -logbx1106 logb 1000000 -> 6 -logbx1107 logb 10000000 -> 7 -logbx1108 logb 100000000 -> 8 -logbx1109 logb 1000000000 -> 9 -logbx1110 logb 10000000000 -> 10 -logbx1111 logb 100000000000 -> 11 -logbx1112 logb 1000000000000 -> 12 -logbx1113 logb 0.00000000001 -> -11 -logbx1114 logb 0.0000000001 -> -10 -logbx1115 logb 0.000000001 -> -9 -logbx1116 logb 0.00000001 -> -8 -logbx1117 logb 0.0000001 -> -7 -logbx1118 logb 0.000001 -> -6 -logbx1119 logb 0.00001 -> -5 -logbx1120 logb 0.0001 -> -4 -logbx1121 logb 0.001 -> -3 -logbx1122 logb 0.01 -> -2 -logbx1123 logb 0.1 -> -1 -logbx1124 logb 1E-99 -> -99 -logbx1125 logb 1E-100 -> -100 -logbx1126 logb 1E-383 -> -383 -logbx1127 logb 1E-999 -> -999 - --- suggestions from Ilan Nehama -logbx1400 logb 10E-3 -> -2 -logbx1401 logb 10E-2 -> -1 -logbx1402 logb 100E-2 -> 0 -logbx1403 logb 1000E-2 -> 1 -logbx1404 logb 10000E-2 -> 2 -logbx1405 logb 10E-1 -> 0 -logbx1406 logb 100E-1 -> 1 -logbx1407 logb 1000E-1 -> 2 -logbx1408 logb 10000E-1 -> 3 -logbx1409 logb 10E0 -> 1 -logbx1410 logb 100E0 -> 2 -logbx1411 logb 1000E0 -> 3 -logbx1412 logb 10000E0 -> 4 -logbx1413 logb 10E1 -> 2 -logbx1414 logb 100E1 -> 3 -logbx1415 logb 1000E1 -> 4 -logbx1416 logb 10000E1 -> 5 -logbx1417 logb 10E2 -> 3 -logbx1418 logb 100E2 -> 4 -logbx1419 logb 1000E2 -> 5 -logbx1420 logb 10000E2 -> 6 - --- inexacts -precision: 2 -logbx1500 logb 10000E2 -> 6 -logbx1501 logb 1E+99 -> 99 -logbx1502 logb 1E-99 -> -99 -logbx1503 logb 1E+100 -> 1.0E+2 Rounded -logbx1504 logb 1E+999 -> 1.0E+3 Inexact Rounded -logbx1505 logb 1E-100 -> -1.0E+2 Rounded -logbx1506 logb 1E-999 -> -1.0E+3 Inexact Rounded -logbx1507 logb 1E-1111 -> -1.1E+3 Inexact Rounded -logbx1508 logb 1E-3333 -> -3.3E+3 Inexact Rounded -logbx1509 logb 1E-6666 -> -6.7E+3 Inexact Rounded -logbx1510 logb 1E+999999999 -> 1.0E+9 Inexact Rounded -logbx1511 logb 1E-999999999 -> -1.0E+9 Inexact Rounded -precision: 1 -logbx1517 logb 1E-1111 -> -1E+3 Inexact Rounded -logbx1518 logb 1E-3333 -> -3E+3 Inexact Rounded -logbx1519 logb 1E-6666 -> -7E+3 Inexact Rounded -precision: 8 -logbx1520 logb 1E+999999999 -> 1.0000000E+9 Inexact Rounded -logbx1521 logb 1E-999999999 -> -1.0000000E+9 Inexact Rounded -precision: 9 -logbx1523 logb 1E+999999999 -> 999999999 -logbx1524 logb 1E-999999999 -> -999999999 - --- special values -precision: 9 -logbx820 logb Infinity -> Infinity -logbx821 logb -Infinity -> Infinity -logbx822 logb 0 -> -Infinity Division_by_zero -logbx823 logb NaN -> NaN -logbx824 logb sNaN -> NaN Invalid_operation --- propagating NaNs -logbx825 logb sNaN123 -> NaN123 Invalid_operation -logbx826 logb -sNaN321 -> -NaN321 Invalid_operation -logbx827 logb NaN456 -> NaN456 -logbx828 logb -NaN654 -> -NaN654 -logbx829 logb NaN1 -> NaN1 - --- Null test -logbx900 logb # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- logb.decTest -- return integral adjusted exponent as per 754r -- +-- Copyright (c) IBM Corporation, 2005, 2009. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This emphasises the testing of notable cases, as they will often +-- have unusual paths (especially the 10**n results). + +extended: 1 +rounding: half_even +maxExponent: 999 +minexponent: -999 + +-- basics & examples +precision: 9 +logbx001 logb 0 -> -Infinity Division_by_zero +logbx002 logb 1E-999 -> -999 +logbx003 logb 9E-999 -> -999 +logbx004 logb 0.001 -> -3 +logbx005 logb 0.03 -> -2 +logbx006 logb 1 -> 0 +logbx007 logb 2 -> 0 +logbx008 logb 2.5 -> 0 +logbx009 logb 2.50 -> 0 +logbx010 logb 10 -> 1 +logbx011 logb 70 -> 1 +logbx012 logb 100 -> 2 +logbx013 logb 250 -> 2 +logbx014 logb +Infinity -> Infinity + +-- negatives are treated as positives +logbx021 logb -0 -> -Infinity Division_by_zero +logbx022 logb -1E-999 -> -999 +logbx023 logb -9E-999 -> -999 +logbx024 logb -0.001 -> -3 +logbx025 logb -1 -> 0 +logbx026 logb -2 -> 0 +logbx027 logb -10 -> 1 +logbx028 logb -70 -> 1 +logbx029 logb -100 -> 2 +logbx030 logb -100000000 -> 8 +logbx031 logb -Infinity -> Infinity + +-- zeros +logbx111 logb 0 -> -Infinity Division_by_zero +logbx112 logb -0 -> -Infinity Division_by_zero +logbx113 logb 0E+4 -> -Infinity Division_by_zero +logbx114 logb -0E+4 -> -Infinity Division_by_zero +logbx115 logb 0.0000 -> -Infinity Division_by_zero +logbx116 logb -0.0000 -> -Infinity Division_by_zero +logbx117 logb 0E-141 -> -Infinity Division_by_zero +logbx118 logb -0E-141 -> -Infinity Division_by_zero + +-- full coefficients, alternating bits +logbx121 logb 268268268 -> 8 +logbx122 logb -268268268 -> 8 +logbx123 logb 134134134 -> 8 +logbx124 logb -134134134 -> 8 + +-- Nmax, Nmin, Ntiny +logbx131 logb 9.99999999E+999 -> 999 +logbx132 logb 1E-999 -> -999 +logbx133 logb 1.00000000E-999 -> -999 +logbx134 logb 1E-1007 -> -1007 + +logbx135 logb -1E-1007 -> -1007 +logbx136 logb -1.00000000E-999 -> -999 +logbx137 logb -1E-999 -> -999 +logbx138 logb -9.99999999E+999 -> 999 + +-- ones +logbx0061 logb 1 -> 0 +logbx0062 logb 1.0 -> 0 +logbx0063 logb 1.000000000000000 -> 0 +logbx0064 logb 1.000000000000000000 -> 0 + +-- notable cases -- exact powers of 10 +logbx1100 logb 1 -> 0 +logbx1101 logb 10 -> 1 +logbx1102 logb 100 -> 2 +logbx1103 logb 1000 -> 3 +logbx1104 logb 10000 -> 4 +logbx1105 logb 100000 -> 5 +logbx1106 logb 1000000 -> 6 +logbx1107 logb 10000000 -> 7 +logbx1108 logb 100000000 -> 8 +logbx1109 logb 1000000000 -> 9 +logbx1110 logb 10000000000 -> 10 +logbx1111 logb 100000000000 -> 11 +logbx1112 logb 1000000000000 -> 12 +logbx1113 logb 0.00000000001 -> -11 +logbx1114 logb 0.0000000001 -> -10 +logbx1115 logb 0.000000001 -> -9 +logbx1116 logb 0.00000001 -> -8 +logbx1117 logb 0.0000001 -> -7 +logbx1118 logb 0.000001 -> -6 +logbx1119 logb 0.00001 -> -5 +logbx1120 logb 0.0001 -> -4 +logbx1121 logb 0.001 -> -3 +logbx1122 logb 0.01 -> -2 +logbx1123 logb 0.1 -> -1 +logbx1124 logb 1E-99 -> -99 +logbx1125 logb 1E-100 -> -100 +logbx1126 logb 1E-383 -> -383 +logbx1127 logb 1E-999 -> -999 + +-- suggestions from Ilan Nehama +logbx1400 logb 10E-3 -> -2 +logbx1401 logb 10E-2 -> -1 +logbx1402 logb 100E-2 -> 0 +logbx1403 logb 1000E-2 -> 1 +logbx1404 logb 10000E-2 -> 2 +logbx1405 logb 10E-1 -> 0 +logbx1406 logb 100E-1 -> 1 +logbx1407 logb 1000E-1 -> 2 +logbx1408 logb 10000E-1 -> 3 +logbx1409 logb 10E0 -> 1 +logbx1410 logb 100E0 -> 2 +logbx1411 logb 1000E0 -> 3 +logbx1412 logb 10000E0 -> 4 +logbx1413 logb 10E1 -> 2 +logbx1414 logb 100E1 -> 3 +logbx1415 logb 1000E1 -> 4 +logbx1416 logb 10000E1 -> 5 +logbx1417 logb 10E2 -> 3 +logbx1418 logb 100E2 -> 4 +logbx1419 logb 1000E2 -> 5 +logbx1420 logb 10000E2 -> 6 + +-- inexacts +precision: 2 +logbx1500 logb 10000E2 -> 6 +logbx1501 logb 1E+99 -> 99 +logbx1502 logb 1E-99 -> -99 +logbx1503 logb 1E+100 -> 1.0E+2 Rounded +logbx1504 logb 1E+999 -> 1.0E+3 Inexact Rounded +logbx1505 logb 1E-100 -> -1.0E+2 Rounded +logbx1506 logb 1E-999 -> -1.0E+3 Inexact Rounded +logbx1507 logb 1E-1111 -> -1.1E+3 Inexact Rounded +logbx1508 logb 1E-3333 -> -3.3E+3 Inexact Rounded +logbx1509 logb 1E-6666 -> -6.7E+3 Inexact Rounded +logbx1510 logb 1E+999999999 -> 1.0E+9 Inexact Rounded +logbx1511 logb 1E-999999999 -> -1.0E+9 Inexact Rounded +precision: 1 +logbx1517 logb 1E-1111 -> -1E+3 Inexact Rounded +logbx1518 logb 1E-3333 -> -3E+3 Inexact Rounded +logbx1519 logb 1E-6666 -> -7E+3 Inexact Rounded +precision: 8 +logbx1520 logb 1E+999999999 -> 1.0000000E+9 Inexact Rounded +logbx1521 logb 1E-999999999 -> -1.0000000E+9 Inexact Rounded +precision: 9 +logbx1523 logb 1E+999999999 -> 999999999 +logbx1524 logb 1E-999999999 -> -999999999 + +-- special values +precision: 9 +logbx820 logb Infinity -> Infinity +logbx821 logb -Infinity -> Infinity +logbx822 logb 0 -> -Infinity Division_by_zero +logbx823 logb NaN -> NaN +logbx824 logb sNaN -> NaN Invalid_operation +-- propagating NaNs +logbx825 logb sNaN123 -> NaN123 Invalid_operation +logbx826 logb -sNaN321 -> -NaN321 Invalid_operation +logbx827 logb NaN456 -> NaN456 +logbx828 logb -NaN654 -> -NaN654 +logbx829 logb NaN1 -> NaN1 + +-- Null test +logbx900 logb # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/maxmag.decTest b/Lib/test/decimaltestdata/maxmag.decTest index 6b442130798..265e912ed45 100644 --- a/Lib/test/decimaltestdata/maxmag.decTest +++ b/Lib/test/decimaltestdata/maxmag.decTest @@ -1,404 +1,404 @@ ------------------------------------------------------------------------- --- maxmag.decTest -- decimal maximum by magnitude -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- sanity checks -mxgx001 maxmag -2 -2 -> -2 -mxgx002 maxmag -2 -1 -> -2 -mxgx003 maxmag -2 0 -> -2 -mxgx004 maxmag -2 1 -> -2 -mxgx005 maxmag -2 2 -> 2 -mxgx006 maxmag -1 -2 -> -2 -mxgx007 maxmag -1 -1 -> -1 -mxgx008 maxmag -1 0 -> -1 -mxgx009 maxmag -1 1 -> 1 -mxgx010 maxmag -1 2 -> 2 -mxgx011 maxmag 0 -2 -> -2 -mxgx012 maxmag 0 -1 -> -1 -mxgx013 maxmag 0 0 -> 0 -mxgx014 maxmag 0 1 -> 1 -mxgx015 maxmag 0 2 -> 2 -mxgx016 maxmag 1 -2 -> -2 -mxgx017 maxmag 1 -1 -> 1 -mxgx018 maxmag 1 0 -> 1 -mxgx019 maxmag 1 1 -> 1 -mxgx020 maxmag 1 2 -> 2 -mxgx021 maxmag 2 -2 -> 2 -mxgx022 maxmag 2 -1 -> 2 -mxgx023 maxmag 2 0 -> 2 -mxgx025 maxmag 2 1 -> 2 -mxgx026 maxmag 2 2 -> 2 - --- extended zeros -mxgx030 maxmag 0 0 -> 0 -mxgx031 maxmag 0 -0 -> 0 -mxgx032 maxmag 0 -0.0 -> 0 -mxgx033 maxmag 0 0.0 -> 0 -mxgx034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen -mxgx035 maxmag -0 -0 -> -0 -mxgx036 maxmag -0 -0.0 -> -0.0 -mxgx037 maxmag -0 0.0 -> 0.0 -mxgx038 maxmag 0.0 0 -> 0 -mxgx039 maxmag 0.0 -0 -> 0.0 -mxgx040 maxmag 0.0 -0.0 -> 0.0 -mxgx041 maxmag 0.0 0.0 -> 0.0 -mxgx042 maxmag -0.0 0 -> 0 -mxgx043 maxmag -0.0 -0 -> -0.0 -mxgx044 maxmag -0.0 -0.0 -> -0.0 -mxgx045 maxmag -0.0 0.0 -> 0.0 - -mxgx050 maxmag -0E1 0E1 -> 0E+1 -mxgx051 maxmag -0E2 0E2 -> 0E+2 -mxgx052 maxmag -0E2 0E1 -> 0E+1 -mxgx053 maxmag -0E1 0E2 -> 0E+2 -mxgx054 maxmag 0E1 -0E1 -> 0E+1 -mxgx055 maxmag 0E2 -0E2 -> 0E+2 -mxgx056 maxmag 0E2 -0E1 -> 0E+2 -mxgx057 maxmag 0E1 -0E2 -> 0E+1 - -mxgx058 maxmag 0E1 0E1 -> 0E+1 -mxgx059 maxmag 0E2 0E2 -> 0E+2 -mxgx060 maxmag 0E2 0E1 -> 0E+2 -mxgx061 maxmag 0E1 0E2 -> 0E+2 -mxgx062 maxmag -0E1 -0E1 -> -0E+1 -mxgx063 maxmag -0E2 -0E2 -> -0E+2 -mxgx064 maxmag -0E2 -0E1 -> -0E+1 -mxgx065 maxmag -0E1 -0E2 -> -0E+1 - --- Specials -precision: 9 -mxgx090 maxmag Inf -Inf -> Infinity -mxgx091 maxmag Inf -1000 -> Infinity -mxgx092 maxmag Inf -1 -> Infinity -mxgx093 maxmag Inf -0 -> Infinity -mxgx094 maxmag Inf 0 -> Infinity -mxgx095 maxmag Inf 1 -> Infinity -mxgx096 maxmag Inf 1000 -> Infinity -mxgx097 maxmag Inf Inf -> Infinity -mxgx098 maxmag -1000 Inf -> Infinity -mxgx099 maxmag -Inf Inf -> Infinity -mxgx100 maxmag -1 Inf -> Infinity -mxgx101 maxmag -0 Inf -> Infinity -mxgx102 maxmag 0 Inf -> Infinity -mxgx103 maxmag 1 Inf -> Infinity -mxgx104 maxmag 1000 Inf -> Infinity -mxgx105 maxmag Inf Inf -> Infinity - -mxgx120 maxmag -Inf -Inf -> -Infinity -mxgx121 maxmag -Inf -1000 -> -Infinity -mxgx122 maxmag -Inf -1 -> -Infinity -mxgx123 maxmag -Inf -0 -> -Infinity -mxgx124 maxmag -Inf 0 -> -Infinity -mxgx125 maxmag -Inf 1 -> -Infinity -mxgx126 maxmag -Inf 1000 -> -Infinity -mxgx127 maxmag -Inf Inf -> Infinity -mxgx128 maxmag -Inf -Inf -> -Infinity -mxgx129 maxmag -1000 -Inf -> -Infinity -mxgx130 maxmag -1 -Inf -> -Infinity -mxgx131 maxmag -0 -Inf -> -Infinity -mxgx132 maxmag 0 -Inf -> -Infinity -mxgx133 maxmag 1 -Inf -> -Infinity -mxgx134 maxmag 1000 -Inf -> -Infinity -mxgx135 maxmag Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -mxgx141 maxmag NaN -Inf -> -Infinity -mxgx142 maxmag NaN -1000 -> -1000 -mxgx143 maxmag NaN -1 -> -1 -mxgx144 maxmag NaN -0 -> -0 -mxgx145 maxmag NaN 0 -> 0 -mxgx146 maxmag NaN 1 -> 1 -mxgx147 maxmag NaN 1000 -> 1000 -mxgx148 maxmag NaN Inf -> Infinity -mxgx149 maxmag NaN NaN -> NaN -mxgx150 maxmag -Inf NaN -> -Infinity -mxgx151 maxmag -1000 NaN -> -1000 -mxgx152 maxmag -1 NaN -> -1 -mxgx153 maxmag -0 NaN -> -0 -mxgx154 maxmag 0 NaN -> 0 -mxgx155 maxmag 1 NaN -> 1 -mxgx156 maxmag 1000 NaN -> 1000 -mxgx157 maxmag Inf NaN -> Infinity - -mxgx161 maxmag sNaN -Inf -> NaN Invalid_operation -mxgx162 maxmag sNaN -1000 -> NaN Invalid_operation -mxgx163 maxmag sNaN -1 -> NaN Invalid_operation -mxgx164 maxmag sNaN -0 -> NaN Invalid_operation -mxgx165 maxmag sNaN 0 -> NaN Invalid_operation -mxgx166 maxmag sNaN 1 -> NaN Invalid_operation -mxgx167 maxmag sNaN 1000 -> NaN Invalid_operation -mxgx168 maxmag sNaN NaN -> NaN Invalid_operation -mxgx169 maxmag sNaN sNaN -> NaN Invalid_operation -mxgx170 maxmag NaN sNaN -> NaN Invalid_operation -mxgx171 maxmag -Inf sNaN -> NaN Invalid_operation -mxgx172 maxmag -1000 sNaN -> NaN Invalid_operation -mxgx173 maxmag -1 sNaN -> NaN Invalid_operation -mxgx174 maxmag -0 sNaN -> NaN Invalid_operation -mxgx175 maxmag 0 sNaN -> NaN Invalid_operation -mxgx176 maxmag 1 sNaN -> NaN Invalid_operation -mxgx177 maxmag 1000 sNaN -> NaN Invalid_operation -mxgx178 maxmag Inf sNaN -> NaN Invalid_operation -mxgx179 maxmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -mxgx181 maxmag NaN9 -Inf -> -Infinity -mxgx182 maxmag NaN8 9 -> 9 -mxgx183 maxmag -NaN7 Inf -> Infinity - -mxgx184 maxmag -NaN1 NaN11 -> -NaN1 -mxgx185 maxmag NaN2 NaN12 -> NaN2 -mxgx186 maxmag -NaN13 -NaN7 -> -NaN13 -mxgx187 maxmag NaN14 -NaN5 -> NaN14 - -mxgx188 maxmag -Inf NaN4 -> -Infinity -mxgx189 maxmag -9 -NaN3 -> -9 -mxgx190 maxmag Inf NaN2 -> Infinity - -mxgx191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation -mxgx192 maxmag sNaN98 -1 -> NaN98 Invalid_operation -mxgx193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation -mxgx194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation -mxgx195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation -mxgx196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation -mxgx197 maxmag 0 sNaN91 -> NaN91 Invalid_operation -mxgx198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation -mxgx199 maxmag NaN sNaN89 -> NaN89 Invalid_operation - --- rounding checks -maxexponent: 999 -minexponent: -999 -precision: 9 -mxgx201 maxmag 12345678000 1 -> 1.23456780E+10 Rounded -mxgx202 maxmag 1 12345678000 -> 1.23456780E+10 Rounded -mxgx203 maxmag 1234567800 1 -> 1.23456780E+9 Rounded -mxgx204 maxmag 1 1234567800 -> 1.23456780E+9 Rounded -mxgx205 maxmag 1234567890 1 -> 1.23456789E+9 Rounded -mxgx206 maxmag 1 1234567890 -> 1.23456789E+9 Rounded -mxgx207 maxmag 1234567891 1 -> 1.23456789E+9 Inexact Rounded -mxgx208 maxmag 1 1234567891 -> 1.23456789E+9 Inexact Rounded -mxgx209 maxmag 12345678901 1 -> 1.23456789E+10 Inexact Rounded -mxgx210 maxmag 1 12345678901 -> 1.23456789E+10 Inexact Rounded -mxgx211 maxmag 1234567896 1 -> 1.23456790E+9 Inexact Rounded -mxgx212 maxmag 1 1234567896 -> 1.23456790E+9 Inexact Rounded -mxgx213 maxmag -1234567891 1 -> -1.23456789E+9 Inexact Rounded -mxgx214 maxmag 1 -1234567891 -> -1.23456789E+9 Inexact Rounded -mxgx215 maxmag -12345678901 1 -> -1.23456789E+10 Inexact Rounded -mxgx216 maxmag 1 -12345678901 -> -1.23456789E+10 Inexact Rounded -mxgx217 maxmag -1234567896 1 -> -1.23456790E+9 Inexact Rounded -mxgx218 maxmag 1 -1234567896 -> -1.23456790E+9 Inexact Rounded - -precision: 15 -mxgx221 maxmag 12345678000 1 -> 12345678000 -mxgx222 maxmag 1 12345678000 -> 12345678000 -mxgx223 maxmag 1234567800 1 -> 1234567800 -mxgx224 maxmag 1 1234567800 -> 1234567800 -mxgx225 maxmag 1234567890 1 -> 1234567890 -mxgx226 maxmag 1 1234567890 -> 1234567890 -mxgx227 maxmag 1234567891 1 -> 1234567891 -mxgx228 maxmag 1 1234567891 -> 1234567891 -mxgx229 maxmag 12345678901 1 -> 12345678901 -mxgx230 maxmag 1 12345678901 -> 12345678901 -mxgx231 maxmag 1234567896 1 -> 1234567896 -mxgx232 maxmag 1 1234567896 -> 1234567896 -mxgx233 maxmag -1234567891 1 -> -1234567891 -mxgx234 maxmag 1 -1234567891 -> -1234567891 -mxgx235 maxmag -12345678901 1 -> -12345678901 -mxgx236 maxmag 1 -12345678901 -> -12345678901 -mxgx237 maxmag -1234567896 1 -> -1234567896 -mxgx238 maxmag 1 -1234567896 -> -1234567896 - --- from examples -mxgx280 maxmag '3' '2' -> '3' -mxgx281 maxmag '-10' '3' -> '-10' -mxgx282 maxmag '1.0' '1' -> '1' -mxgx283 maxmag '1' '1.0' -> '1' -mxgx284 maxmag '7' 'NaN' -> '7' - --- overflow and underflow tests ... -maxExponent: 999999999 -minexponent: -999999999 -mxgx330 maxmag +1.23456789012345E-0 9E+999999999 -> 9E+999999999 -mxgx331 maxmag 9E+999999999 +1.23456789012345E-0 -> 9E+999999999 -mxgx332 maxmag +0.100 9E-999999999 -> 0.100 -mxgx333 maxmag 9E-999999999 +0.100 -> 0.100 -mxgx335 maxmag -1.23456789012345E-0 9E+999999999 -> 9E+999999999 -mxgx336 maxmag 9E+999999999 -1.23456789012345E-0 -> 9E+999999999 -mxgx337 maxmag -0.100 9E-999999999 -> -0.100 -mxgx338 maxmag 9E-999999999 -0.100 -> -0.100 - -mxgx339 maxmag 1e-599999999 1e-400000001 -> 1E-400000001 -mxgx340 maxmag 1e-599999999 1e-400000000 -> 1E-400000000 -mxgx341 maxmag 1e-600000000 1e-400000000 -> 1E-400000000 -mxgx342 maxmag 9e-999999998 0.01 -> 0.01 -mxgx343 maxmag 9e-999999998 0.1 -> 0.1 -mxgx344 maxmag 0.01 9e-999999998 -> 0.01 -mxgx345 maxmag 1e599999999 1e400000001 -> 1E+599999999 -mxgx346 maxmag 1e599999999 1e400000000 -> 1E+599999999 -mxgx347 maxmag 1e600000000 1e400000000 -> 1E+600000000 -mxgx348 maxmag 9e999999998 100 -> 9E+999999998 -mxgx349 maxmag 9e999999998 10 -> 9E+999999998 -mxgx350 maxmag 100 9e999999998 -> 9E+999999998 --- signs -mxgx351 maxmag 1e+777777777 1e+411111111 -> 1E+777777777 -mxgx352 maxmag 1e+777777777 -1e+411111111 -> 1E+777777777 -mxgx353 maxmag -1e+777777777 1e+411111111 -> -1E+777777777 -mxgx354 maxmag -1e+777777777 -1e+411111111 -> -1E+777777777 -mxgx355 maxmag 1e-777777777 1e-411111111 -> 1E-411111111 -mxgx356 maxmag 1e-777777777 -1e-411111111 -> -1E-411111111 -mxgx357 maxmag -1e-777777777 1e-411111111 -> 1E-411111111 -mxgx358 maxmag -1e-777777777 -1e-411111111 -> -1E-411111111 - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -mxgx401 maxmag Inf 1.1 -> Infinity -mxgx402 maxmag 1.1 1 -> 1.1 -mxgx403 maxmag 1 1.0 -> 1 -mxgx404 maxmag 1.0 0.1 -> 1.0 -mxgx405 maxmag 0.1 0.10 -> 0.1 -mxgx406 maxmag 0.10 0.100 -> 0.10 -mxgx407 maxmag 0.10 0 -> 0.10 -mxgx408 maxmag 0 0.0 -> 0 -mxgx409 maxmag 0.0 -0 -> 0.0 -mxgx410 maxmag 0.0 -0.0 -> 0.0 -mxgx411 maxmag 0.00 -0.0 -> 0.00 -mxgx412 maxmag 0.0 -0.00 -> 0.0 -mxgx413 maxmag 0 -0.0 -> 0 -mxgx414 maxmag 0 -0 -> 0 -mxgx415 maxmag -0.0 -0 -> -0.0 -mxgx416 maxmag -0 -0.100 -> -0.100 -mxgx417 maxmag -0.100 -0.10 -> -0.100 -mxgx418 maxmag -0.10 -0.1 -> -0.10 -mxgx419 maxmag -0.1 -1.0 -> -1.0 -mxgx420 maxmag -1.0 -1 -> -1.0 -mxgx421 maxmag -1 -1.1 -> -1.1 -mxgx423 maxmag -1.1 -Inf -> -Infinity --- same with operands reversed -mxgx431 maxmag 1.1 Inf -> Infinity -mxgx432 maxmag 1 1.1 -> 1.1 -mxgx433 maxmag 1.0 1 -> 1 -mxgx434 maxmag 0.1 1.0 -> 1.0 -mxgx435 maxmag 0.10 0.1 -> 0.1 -mxgx436 maxmag 0.100 0.10 -> 0.10 -mxgx437 maxmag 0 0.10 -> 0.10 -mxgx438 maxmag 0.0 0 -> 0 -mxgx439 maxmag -0 0.0 -> 0.0 -mxgx440 maxmag -0.0 0.0 -> 0.0 -mxgx441 maxmag -0.0 0.00 -> 0.00 -mxgx442 maxmag -0.00 0.0 -> 0.0 -mxgx443 maxmag -0.0 0 -> 0 -mxgx444 maxmag -0 0 -> 0 -mxgx445 maxmag -0 -0.0 -> -0.0 -mxgx446 maxmag -0.100 -0 -> -0.100 -mxgx447 maxmag -0.10 -0.100 -> -0.100 -mxgx448 maxmag -0.1 -0.10 -> -0.10 -mxgx449 maxmag -1.0 -0.1 -> -1.0 -mxgx450 maxmag -1 -1.0 -> -1.0 -mxgx451 maxmag -1.1 -1 -> -1.1 -mxgx453 maxmag -Inf -1.1 -> -Infinity --- largies -mxgx460 maxmag 1000 1E+3 -> 1E+3 -mxgx461 maxmag 1E+3 1000 -> 1E+3 -mxgx462 maxmag 1000 -1E+3 -> 1000 -mxgx463 maxmag 1E+3 -1000 -> 1E+3 -mxgx464 maxmag -1000 1E+3 -> 1E+3 -mxgx465 maxmag -1E+3 1000 -> 1000 -mxgx466 maxmag -1000 -1E+3 -> -1000 -mxgx467 maxmag -1E+3 -1000 -> -1000 - --- rounding (results treated as though plus) -maxexponent: 999999999 -minexponent: -999999999 -precision: 3 - -mxgx470 maxmag 1 .5 -> 1 -mxgx471 maxmag 10 5 -> 10 -mxgx472 maxmag 100 50 -> 100 -mxgx473 maxmag 1000 500 -> 1.00E+3 Rounded -mxgx474 maxmag 10000 5000 -> 1.00E+4 Rounded -mxgx475 maxmag 6 .5 -> 6 -mxgx476 maxmag 66 5 -> 66 -mxgx477 maxmag 666 50 -> 666 -mxgx478 maxmag 6666 500 -> 6.67E+3 Rounded Inexact -mxgx479 maxmag 66666 5000 -> 6.67E+4 Rounded Inexact -mxgx480 maxmag 33333 5000 -> 3.33E+4 Rounded Inexact -mxgx481 maxmag .5 1 -> 1 -mxgx482 maxmag .5 10 -> 10 -mxgx483 maxmag .5 100 -> 100 -mxgx484 maxmag .5 1000 -> 1.00E+3 Rounded -mxgx485 maxmag .5 10000 -> 1.00E+4 Rounded -mxgx486 maxmag .5 6 -> 6 -mxgx487 maxmag .5 66 -> 66 -mxgx488 maxmag .5 666 -> 666 -mxgx489 maxmag .5 6666 -> 6.67E+3 Rounded Inexact -mxgx490 maxmag .5 66666 -> 6.67E+4 Rounded Inexact -mxgx491 maxmag .5 33333 -> 3.33E+4 Rounded Inexact - --- overflow tests -maxexponent: 999999999 -minexponent: -999999999 -precision: 3 -mxgx500 maxmag 9.999E+999999999 0 -> Infinity Inexact Overflow Rounded -mxgx501 maxmag -9.999E+999999999 0 -> -Infinity Inexact Overflow Rounded - --- subnormals and underflow -precision: 3 -maxexponent: 999 -minexponent: -999 -mxgx510 maxmag 1.00E-999 0 -> 1.00E-999 -mxgx511 maxmag 0.1E-999 0 -> 1E-1000 Subnormal -mxgx512 maxmag 0.10E-999 0 -> 1.0E-1000 Subnormal -mxgx513 maxmag 0.100E-999 0 -> 1.0E-1000 Subnormal Rounded -mxgx514 maxmag 0.01E-999 0 -> 1E-1001 Subnormal --- next is rounded to Nmin -mxgx515 maxmag 0.999E-999 0 -> 1.00E-999 Inexact Rounded Subnormal Underflow -mxgx516 maxmag 0.099E-999 0 -> 1.0E-1000 Inexact Rounded Subnormal Underflow -mxgx517 maxmag 0.009E-999 0 -> 1E-1001 Inexact Rounded Subnormal Underflow -mxgx518 maxmag 0.001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped -mxgx519 maxmag 0.0009E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped -mxgx520 maxmag 0.0001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped - -mxgx530 maxmag -1.00E-999 0 -> -1.00E-999 -mxgx531 maxmag -0.1E-999 0 -> -1E-1000 Subnormal -mxgx532 maxmag -0.10E-999 0 -> -1.0E-1000 Subnormal -mxgx533 maxmag -0.100E-999 0 -> -1.0E-1000 Subnormal Rounded -mxgx534 maxmag -0.01E-999 0 -> -1E-1001 Subnormal --- next is rounded to -Nmin -mxgx535 maxmag -0.999E-999 0 -> -1.00E-999 Inexact Rounded Subnormal Underflow -mxgx536 maxmag -0.099E-999 0 -> -1.0E-1000 Inexact Rounded Subnormal Underflow -mxgx537 maxmag -0.009E-999 0 -> -1E-1001 Inexact Rounded Subnormal Underflow -mxgx538 maxmag -0.001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -mxgx539 maxmag -0.0009E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -mxgx540 maxmag -0.0001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped - --- Null tests -mxgx900 maxmag 10 # -> NaN Invalid_operation -mxgx901 maxmag # 10 -> NaN Invalid_operation - - - +------------------------------------------------------------------------ +-- maxmag.decTest -- decimal maximum by magnitude -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- sanity checks +mxgx001 maxmag -2 -2 -> -2 +mxgx002 maxmag -2 -1 -> -2 +mxgx003 maxmag -2 0 -> -2 +mxgx004 maxmag -2 1 -> -2 +mxgx005 maxmag -2 2 -> 2 +mxgx006 maxmag -1 -2 -> -2 +mxgx007 maxmag -1 -1 -> -1 +mxgx008 maxmag -1 0 -> -1 +mxgx009 maxmag -1 1 -> 1 +mxgx010 maxmag -1 2 -> 2 +mxgx011 maxmag 0 -2 -> -2 +mxgx012 maxmag 0 -1 -> -1 +mxgx013 maxmag 0 0 -> 0 +mxgx014 maxmag 0 1 -> 1 +mxgx015 maxmag 0 2 -> 2 +mxgx016 maxmag 1 -2 -> -2 +mxgx017 maxmag 1 -1 -> 1 +mxgx018 maxmag 1 0 -> 1 +mxgx019 maxmag 1 1 -> 1 +mxgx020 maxmag 1 2 -> 2 +mxgx021 maxmag 2 -2 -> 2 +mxgx022 maxmag 2 -1 -> 2 +mxgx023 maxmag 2 0 -> 2 +mxgx025 maxmag 2 1 -> 2 +mxgx026 maxmag 2 2 -> 2 + +-- extended zeros +mxgx030 maxmag 0 0 -> 0 +mxgx031 maxmag 0 -0 -> 0 +mxgx032 maxmag 0 -0.0 -> 0 +mxgx033 maxmag 0 0.0 -> 0 +mxgx034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen +mxgx035 maxmag -0 -0 -> -0 +mxgx036 maxmag -0 -0.0 -> -0.0 +mxgx037 maxmag -0 0.0 -> 0.0 +mxgx038 maxmag 0.0 0 -> 0 +mxgx039 maxmag 0.0 -0 -> 0.0 +mxgx040 maxmag 0.0 -0.0 -> 0.0 +mxgx041 maxmag 0.0 0.0 -> 0.0 +mxgx042 maxmag -0.0 0 -> 0 +mxgx043 maxmag -0.0 -0 -> -0.0 +mxgx044 maxmag -0.0 -0.0 -> -0.0 +mxgx045 maxmag -0.0 0.0 -> 0.0 + +mxgx050 maxmag -0E1 0E1 -> 0E+1 +mxgx051 maxmag -0E2 0E2 -> 0E+2 +mxgx052 maxmag -0E2 0E1 -> 0E+1 +mxgx053 maxmag -0E1 0E2 -> 0E+2 +mxgx054 maxmag 0E1 -0E1 -> 0E+1 +mxgx055 maxmag 0E2 -0E2 -> 0E+2 +mxgx056 maxmag 0E2 -0E1 -> 0E+2 +mxgx057 maxmag 0E1 -0E2 -> 0E+1 + +mxgx058 maxmag 0E1 0E1 -> 0E+1 +mxgx059 maxmag 0E2 0E2 -> 0E+2 +mxgx060 maxmag 0E2 0E1 -> 0E+2 +mxgx061 maxmag 0E1 0E2 -> 0E+2 +mxgx062 maxmag -0E1 -0E1 -> -0E+1 +mxgx063 maxmag -0E2 -0E2 -> -0E+2 +mxgx064 maxmag -0E2 -0E1 -> -0E+1 +mxgx065 maxmag -0E1 -0E2 -> -0E+1 + +-- Specials +precision: 9 +mxgx090 maxmag Inf -Inf -> Infinity +mxgx091 maxmag Inf -1000 -> Infinity +mxgx092 maxmag Inf -1 -> Infinity +mxgx093 maxmag Inf -0 -> Infinity +mxgx094 maxmag Inf 0 -> Infinity +mxgx095 maxmag Inf 1 -> Infinity +mxgx096 maxmag Inf 1000 -> Infinity +mxgx097 maxmag Inf Inf -> Infinity +mxgx098 maxmag -1000 Inf -> Infinity +mxgx099 maxmag -Inf Inf -> Infinity +mxgx100 maxmag -1 Inf -> Infinity +mxgx101 maxmag -0 Inf -> Infinity +mxgx102 maxmag 0 Inf -> Infinity +mxgx103 maxmag 1 Inf -> Infinity +mxgx104 maxmag 1000 Inf -> Infinity +mxgx105 maxmag Inf Inf -> Infinity + +mxgx120 maxmag -Inf -Inf -> -Infinity +mxgx121 maxmag -Inf -1000 -> -Infinity +mxgx122 maxmag -Inf -1 -> -Infinity +mxgx123 maxmag -Inf -0 -> -Infinity +mxgx124 maxmag -Inf 0 -> -Infinity +mxgx125 maxmag -Inf 1 -> -Infinity +mxgx126 maxmag -Inf 1000 -> -Infinity +mxgx127 maxmag -Inf Inf -> Infinity +mxgx128 maxmag -Inf -Inf -> -Infinity +mxgx129 maxmag -1000 -Inf -> -Infinity +mxgx130 maxmag -1 -Inf -> -Infinity +mxgx131 maxmag -0 -Inf -> -Infinity +mxgx132 maxmag 0 -Inf -> -Infinity +mxgx133 maxmag 1 -Inf -> -Infinity +mxgx134 maxmag 1000 -Inf -> -Infinity +mxgx135 maxmag Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +mxgx141 maxmag NaN -Inf -> -Infinity +mxgx142 maxmag NaN -1000 -> -1000 +mxgx143 maxmag NaN -1 -> -1 +mxgx144 maxmag NaN -0 -> -0 +mxgx145 maxmag NaN 0 -> 0 +mxgx146 maxmag NaN 1 -> 1 +mxgx147 maxmag NaN 1000 -> 1000 +mxgx148 maxmag NaN Inf -> Infinity +mxgx149 maxmag NaN NaN -> NaN +mxgx150 maxmag -Inf NaN -> -Infinity +mxgx151 maxmag -1000 NaN -> -1000 +mxgx152 maxmag -1 NaN -> -1 +mxgx153 maxmag -0 NaN -> -0 +mxgx154 maxmag 0 NaN -> 0 +mxgx155 maxmag 1 NaN -> 1 +mxgx156 maxmag 1000 NaN -> 1000 +mxgx157 maxmag Inf NaN -> Infinity + +mxgx161 maxmag sNaN -Inf -> NaN Invalid_operation +mxgx162 maxmag sNaN -1000 -> NaN Invalid_operation +mxgx163 maxmag sNaN -1 -> NaN Invalid_operation +mxgx164 maxmag sNaN -0 -> NaN Invalid_operation +mxgx165 maxmag sNaN 0 -> NaN Invalid_operation +mxgx166 maxmag sNaN 1 -> NaN Invalid_operation +mxgx167 maxmag sNaN 1000 -> NaN Invalid_operation +mxgx168 maxmag sNaN NaN -> NaN Invalid_operation +mxgx169 maxmag sNaN sNaN -> NaN Invalid_operation +mxgx170 maxmag NaN sNaN -> NaN Invalid_operation +mxgx171 maxmag -Inf sNaN -> NaN Invalid_operation +mxgx172 maxmag -1000 sNaN -> NaN Invalid_operation +mxgx173 maxmag -1 sNaN -> NaN Invalid_operation +mxgx174 maxmag -0 sNaN -> NaN Invalid_operation +mxgx175 maxmag 0 sNaN -> NaN Invalid_operation +mxgx176 maxmag 1 sNaN -> NaN Invalid_operation +mxgx177 maxmag 1000 sNaN -> NaN Invalid_operation +mxgx178 maxmag Inf sNaN -> NaN Invalid_operation +mxgx179 maxmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +mxgx181 maxmag NaN9 -Inf -> -Infinity +mxgx182 maxmag NaN8 9 -> 9 +mxgx183 maxmag -NaN7 Inf -> Infinity + +mxgx184 maxmag -NaN1 NaN11 -> -NaN1 +mxgx185 maxmag NaN2 NaN12 -> NaN2 +mxgx186 maxmag -NaN13 -NaN7 -> -NaN13 +mxgx187 maxmag NaN14 -NaN5 -> NaN14 + +mxgx188 maxmag -Inf NaN4 -> -Infinity +mxgx189 maxmag -9 -NaN3 -> -9 +mxgx190 maxmag Inf NaN2 -> Infinity + +mxgx191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation +mxgx192 maxmag sNaN98 -1 -> NaN98 Invalid_operation +mxgx193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation +mxgx194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation +mxgx195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation +mxgx196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation +mxgx197 maxmag 0 sNaN91 -> NaN91 Invalid_operation +mxgx198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation +mxgx199 maxmag NaN sNaN89 -> NaN89 Invalid_operation + +-- rounding checks +maxexponent: 999 +minexponent: -999 +precision: 9 +mxgx201 maxmag 12345678000 1 -> 1.23456780E+10 Rounded +mxgx202 maxmag 1 12345678000 -> 1.23456780E+10 Rounded +mxgx203 maxmag 1234567800 1 -> 1.23456780E+9 Rounded +mxgx204 maxmag 1 1234567800 -> 1.23456780E+9 Rounded +mxgx205 maxmag 1234567890 1 -> 1.23456789E+9 Rounded +mxgx206 maxmag 1 1234567890 -> 1.23456789E+9 Rounded +mxgx207 maxmag 1234567891 1 -> 1.23456789E+9 Inexact Rounded +mxgx208 maxmag 1 1234567891 -> 1.23456789E+9 Inexact Rounded +mxgx209 maxmag 12345678901 1 -> 1.23456789E+10 Inexact Rounded +mxgx210 maxmag 1 12345678901 -> 1.23456789E+10 Inexact Rounded +mxgx211 maxmag 1234567896 1 -> 1.23456790E+9 Inexact Rounded +mxgx212 maxmag 1 1234567896 -> 1.23456790E+9 Inexact Rounded +mxgx213 maxmag -1234567891 1 -> -1.23456789E+9 Inexact Rounded +mxgx214 maxmag 1 -1234567891 -> -1.23456789E+9 Inexact Rounded +mxgx215 maxmag -12345678901 1 -> -1.23456789E+10 Inexact Rounded +mxgx216 maxmag 1 -12345678901 -> -1.23456789E+10 Inexact Rounded +mxgx217 maxmag -1234567896 1 -> -1.23456790E+9 Inexact Rounded +mxgx218 maxmag 1 -1234567896 -> -1.23456790E+9 Inexact Rounded + +precision: 15 +mxgx221 maxmag 12345678000 1 -> 12345678000 +mxgx222 maxmag 1 12345678000 -> 12345678000 +mxgx223 maxmag 1234567800 1 -> 1234567800 +mxgx224 maxmag 1 1234567800 -> 1234567800 +mxgx225 maxmag 1234567890 1 -> 1234567890 +mxgx226 maxmag 1 1234567890 -> 1234567890 +mxgx227 maxmag 1234567891 1 -> 1234567891 +mxgx228 maxmag 1 1234567891 -> 1234567891 +mxgx229 maxmag 12345678901 1 -> 12345678901 +mxgx230 maxmag 1 12345678901 -> 12345678901 +mxgx231 maxmag 1234567896 1 -> 1234567896 +mxgx232 maxmag 1 1234567896 -> 1234567896 +mxgx233 maxmag -1234567891 1 -> -1234567891 +mxgx234 maxmag 1 -1234567891 -> -1234567891 +mxgx235 maxmag -12345678901 1 -> -12345678901 +mxgx236 maxmag 1 -12345678901 -> -12345678901 +mxgx237 maxmag -1234567896 1 -> -1234567896 +mxgx238 maxmag 1 -1234567896 -> -1234567896 + +-- from examples +mxgx280 maxmag '3' '2' -> '3' +mxgx281 maxmag '-10' '3' -> '-10' +mxgx282 maxmag '1.0' '1' -> '1' +mxgx283 maxmag '1' '1.0' -> '1' +mxgx284 maxmag '7' 'NaN' -> '7' + +-- overflow and underflow tests ... +maxExponent: 999999999 +minexponent: -999999999 +mxgx330 maxmag +1.23456789012345E-0 9E+999999999 -> 9E+999999999 +mxgx331 maxmag 9E+999999999 +1.23456789012345E-0 -> 9E+999999999 +mxgx332 maxmag +0.100 9E-999999999 -> 0.100 +mxgx333 maxmag 9E-999999999 +0.100 -> 0.100 +mxgx335 maxmag -1.23456789012345E-0 9E+999999999 -> 9E+999999999 +mxgx336 maxmag 9E+999999999 -1.23456789012345E-0 -> 9E+999999999 +mxgx337 maxmag -0.100 9E-999999999 -> -0.100 +mxgx338 maxmag 9E-999999999 -0.100 -> -0.100 + +mxgx339 maxmag 1e-599999999 1e-400000001 -> 1E-400000001 +mxgx340 maxmag 1e-599999999 1e-400000000 -> 1E-400000000 +mxgx341 maxmag 1e-600000000 1e-400000000 -> 1E-400000000 +mxgx342 maxmag 9e-999999998 0.01 -> 0.01 +mxgx343 maxmag 9e-999999998 0.1 -> 0.1 +mxgx344 maxmag 0.01 9e-999999998 -> 0.01 +mxgx345 maxmag 1e599999999 1e400000001 -> 1E+599999999 +mxgx346 maxmag 1e599999999 1e400000000 -> 1E+599999999 +mxgx347 maxmag 1e600000000 1e400000000 -> 1E+600000000 +mxgx348 maxmag 9e999999998 100 -> 9E+999999998 +mxgx349 maxmag 9e999999998 10 -> 9E+999999998 +mxgx350 maxmag 100 9e999999998 -> 9E+999999998 +-- signs +mxgx351 maxmag 1e+777777777 1e+411111111 -> 1E+777777777 +mxgx352 maxmag 1e+777777777 -1e+411111111 -> 1E+777777777 +mxgx353 maxmag -1e+777777777 1e+411111111 -> -1E+777777777 +mxgx354 maxmag -1e+777777777 -1e+411111111 -> -1E+777777777 +mxgx355 maxmag 1e-777777777 1e-411111111 -> 1E-411111111 +mxgx356 maxmag 1e-777777777 -1e-411111111 -> -1E-411111111 +mxgx357 maxmag -1e-777777777 1e-411111111 -> 1E-411111111 +mxgx358 maxmag -1e-777777777 -1e-411111111 -> -1E-411111111 + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +mxgx401 maxmag Inf 1.1 -> Infinity +mxgx402 maxmag 1.1 1 -> 1.1 +mxgx403 maxmag 1 1.0 -> 1 +mxgx404 maxmag 1.0 0.1 -> 1.0 +mxgx405 maxmag 0.1 0.10 -> 0.1 +mxgx406 maxmag 0.10 0.100 -> 0.10 +mxgx407 maxmag 0.10 0 -> 0.10 +mxgx408 maxmag 0 0.0 -> 0 +mxgx409 maxmag 0.0 -0 -> 0.0 +mxgx410 maxmag 0.0 -0.0 -> 0.0 +mxgx411 maxmag 0.00 -0.0 -> 0.00 +mxgx412 maxmag 0.0 -0.00 -> 0.0 +mxgx413 maxmag 0 -0.0 -> 0 +mxgx414 maxmag 0 -0 -> 0 +mxgx415 maxmag -0.0 -0 -> -0.0 +mxgx416 maxmag -0 -0.100 -> -0.100 +mxgx417 maxmag -0.100 -0.10 -> -0.100 +mxgx418 maxmag -0.10 -0.1 -> -0.10 +mxgx419 maxmag -0.1 -1.0 -> -1.0 +mxgx420 maxmag -1.0 -1 -> -1.0 +mxgx421 maxmag -1 -1.1 -> -1.1 +mxgx423 maxmag -1.1 -Inf -> -Infinity +-- same with operands reversed +mxgx431 maxmag 1.1 Inf -> Infinity +mxgx432 maxmag 1 1.1 -> 1.1 +mxgx433 maxmag 1.0 1 -> 1 +mxgx434 maxmag 0.1 1.0 -> 1.0 +mxgx435 maxmag 0.10 0.1 -> 0.1 +mxgx436 maxmag 0.100 0.10 -> 0.10 +mxgx437 maxmag 0 0.10 -> 0.10 +mxgx438 maxmag 0.0 0 -> 0 +mxgx439 maxmag -0 0.0 -> 0.0 +mxgx440 maxmag -0.0 0.0 -> 0.0 +mxgx441 maxmag -0.0 0.00 -> 0.00 +mxgx442 maxmag -0.00 0.0 -> 0.0 +mxgx443 maxmag -0.0 0 -> 0 +mxgx444 maxmag -0 0 -> 0 +mxgx445 maxmag -0 -0.0 -> -0.0 +mxgx446 maxmag -0.100 -0 -> -0.100 +mxgx447 maxmag -0.10 -0.100 -> -0.100 +mxgx448 maxmag -0.1 -0.10 -> -0.10 +mxgx449 maxmag -1.0 -0.1 -> -1.0 +mxgx450 maxmag -1 -1.0 -> -1.0 +mxgx451 maxmag -1.1 -1 -> -1.1 +mxgx453 maxmag -Inf -1.1 -> -Infinity +-- largies +mxgx460 maxmag 1000 1E+3 -> 1E+3 +mxgx461 maxmag 1E+3 1000 -> 1E+3 +mxgx462 maxmag 1000 -1E+3 -> 1000 +mxgx463 maxmag 1E+3 -1000 -> 1E+3 +mxgx464 maxmag -1000 1E+3 -> 1E+3 +mxgx465 maxmag -1E+3 1000 -> 1000 +mxgx466 maxmag -1000 -1E+3 -> -1000 +mxgx467 maxmag -1E+3 -1000 -> -1000 + +-- rounding (results treated as though plus) +maxexponent: 999999999 +minexponent: -999999999 +precision: 3 + +mxgx470 maxmag 1 .5 -> 1 +mxgx471 maxmag 10 5 -> 10 +mxgx472 maxmag 100 50 -> 100 +mxgx473 maxmag 1000 500 -> 1.00E+3 Rounded +mxgx474 maxmag 10000 5000 -> 1.00E+4 Rounded +mxgx475 maxmag 6 .5 -> 6 +mxgx476 maxmag 66 5 -> 66 +mxgx477 maxmag 666 50 -> 666 +mxgx478 maxmag 6666 500 -> 6.67E+3 Rounded Inexact +mxgx479 maxmag 66666 5000 -> 6.67E+4 Rounded Inexact +mxgx480 maxmag 33333 5000 -> 3.33E+4 Rounded Inexact +mxgx481 maxmag .5 1 -> 1 +mxgx482 maxmag .5 10 -> 10 +mxgx483 maxmag .5 100 -> 100 +mxgx484 maxmag .5 1000 -> 1.00E+3 Rounded +mxgx485 maxmag .5 10000 -> 1.00E+4 Rounded +mxgx486 maxmag .5 6 -> 6 +mxgx487 maxmag .5 66 -> 66 +mxgx488 maxmag .5 666 -> 666 +mxgx489 maxmag .5 6666 -> 6.67E+3 Rounded Inexact +mxgx490 maxmag .5 66666 -> 6.67E+4 Rounded Inexact +mxgx491 maxmag .5 33333 -> 3.33E+4 Rounded Inexact + +-- overflow tests +maxexponent: 999999999 +minexponent: -999999999 +precision: 3 +mxgx500 maxmag 9.999E+999999999 0 -> Infinity Inexact Overflow Rounded +mxgx501 maxmag -9.999E+999999999 0 -> -Infinity Inexact Overflow Rounded + +-- subnormals and underflow +precision: 3 +maxexponent: 999 +minexponent: -999 +mxgx510 maxmag 1.00E-999 0 -> 1.00E-999 +mxgx511 maxmag 0.1E-999 0 -> 1E-1000 Subnormal +mxgx512 maxmag 0.10E-999 0 -> 1.0E-1000 Subnormal +mxgx513 maxmag 0.100E-999 0 -> 1.0E-1000 Subnormal Rounded +mxgx514 maxmag 0.01E-999 0 -> 1E-1001 Subnormal +-- next is rounded to Nmin +mxgx515 maxmag 0.999E-999 0 -> 1.00E-999 Inexact Rounded Subnormal Underflow +mxgx516 maxmag 0.099E-999 0 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +mxgx517 maxmag 0.009E-999 0 -> 1E-1001 Inexact Rounded Subnormal Underflow +mxgx518 maxmag 0.001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped +mxgx519 maxmag 0.0009E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped +mxgx520 maxmag 0.0001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped + +mxgx530 maxmag -1.00E-999 0 -> -1.00E-999 +mxgx531 maxmag -0.1E-999 0 -> -1E-1000 Subnormal +mxgx532 maxmag -0.10E-999 0 -> -1.0E-1000 Subnormal +mxgx533 maxmag -0.100E-999 0 -> -1.0E-1000 Subnormal Rounded +mxgx534 maxmag -0.01E-999 0 -> -1E-1001 Subnormal +-- next is rounded to -Nmin +mxgx535 maxmag -0.999E-999 0 -> -1.00E-999 Inexact Rounded Subnormal Underflow +mxgx536 maxmag -0.099E-999 0 -> -1.0E-1000 Inexact Rounded Subnormal Underflow +mxgx537 maxmag -0.009E-999 0 -> -1E-1001 Inexact Rounded Subnormal Underflow +mxgx538 maxmag -0.001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +mxgx539 maxmag -0.0009E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +mxgx540 maxmag -0.0001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped + +-- Null tests +mxgx900 maxmag 10 # -> NaN Invalid_operation +mxgx901 maxmag # 10 -> NaN Invalid_operation + + + diff --git a/Lib/test/decimaltestdata/minmag.decTest b/Lib/test/decimaltestdata/minmag.decTest index 9e562339eb6..f1ac3852e83 100644 --- a/Lib/test/decimaltestdata/minmag.decTest +++ b/Lib/test/decimaltestdata/minmag.decTest @@ -1,390 +1,390 @@ ------------------------------------------------------------------------- --- minmag.decTest -- decimal minimum by magnitude -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- sanity checks -mngx001 minmag -2 -2 -> -2 -mngx002 minmag -2 -1 -> -1 -mngx003 minmag -2 0 -> 0 -mngx004 minmag -2 1 -> 1 -mngx005 minmag -2 2 -> -2 -mngx006 minmag -1 -2 -> -1 -mngx007 minmag -1 -1 -> -1 -mngx008 minmag -1 0 -> 0 -mngx009 minmag -1 1 -> -1 -mngx010 minmag -1 2 -> -1 -mngx011 minmag 0 -2 -> 0 -mngx012 minmag 0 -1 -> 0 -mngx013 minmag 0 0 -> 0 -mngx014 minmag 0 1 -> 0 -mngx015 minmag 0 2 -> 0 -mngx016 minmag 1 -2 -> 1 -mngx017 minmag 1 -1 -> -1 -mngx018 minmag 1 0 -> 0 -mngx019 minmag 1 1 -> 1 -mngx020 minmag 1 2 -> 1 -mngx021 minmag 2 -2 -> -2 -mngx022 minmag 2 -1 -> -1 -mngx023 minmag 2 0 -> 0 -mngx025 minmag 2 1 -> 1 -mngx026 minmag 2 2 -> 2 - --- extended zeros -mngx030 minmag 0 0 -> 0 -mngx031 minmag 0 -0 -> -0 -mngx032 minmag 0 -0.0 -> -0.0 -mngx033 minmag 0 0.0 -> 0.0 -mngx034 minmag -0 0 -> -0 -mngx035 minmag -0 -0 -> -0 -mngx036 minmag -0 -0.0 -> -0 -mngx037 minmag -0 0.0 -> -0 -mngx038 minmag 0.0 0 -> 0.0 -mngx039 minmag 0.0 -0 -> -0 -mngx040 minmag 0.0 -0.0 -> -0.0 -mngx041 minmag 0.0 0.0 -> 0.0 -mngx042 minmag -0.0 0 -> -0.0 -mngx043 minmag -0.0 -0 -> -0 -mngx044 minmag -0.0 -0.0 -> -0.0 -mngx045 minmag -0.0 0.0 -> -0.0 - -mngx046 minmag 0E1 -0E1 -> -0E+1 -mngx047 minmag -0E1 0E2 -> -0E+1 -mngx048 minmag 0E2 0E1 -> 0E+1 -mngx049 minmag 0E1 0E2 -> 0E+1 -mngx050 minmag -0E3 -0E2 -> -0E+3 -mngx051 minmag -0E2 -0E3 -> -0E+3 - --- Specials -precision: 9 -mngx090 minmag Inf -Inf -> -Infinity -mngx091 minmag Inf -1000 -> -1000 -mngx092 minmag Inf -1 -> -1 -mngx093 minmag Inf -0 -> -0 -mngx094 minmag Inf 0 -> 0 -mngx095 minmag Inf 1 -> 1 -mngx096 minmag Inf 1000 -> 1000 -mngx097 minmag Inf Inf -> Infinity -mngx098 minmag -1000 Inf -> -1000 -mngx099 minmag -Inf Inf -> -Infinity -mngx100 minmag -1 Inf -> -1 -mngx101 minmag -0 Inf -> -0 -mngx102 minmag 0 Inf -> 0 -mngx103 minmag 1 Inf -> 1 -mngx104 minmag 1000 Inf -> 1000 -mngx105 minmag Inf Inf -> Infinity - -mngx120 minmag -Inf -Inf -> -Infinity -mngx121 minmag -Inf -1000 -> -1000 -mngx122 minmag -Inf -1 -> -1 -mngx123 minmag -Inf -0 -> -0 -mngx124 minmag -Inf 0 -> 0 -mngx125 minmag -Inf 1 -> 1 -mngx126 minmag -Inf 1000 -> 1000 -mngx127 minmag -Inf Inf -> -Infinity -mngx128 minmag -Inf -Inf -> -Infinity -mngx129 minmag -1000 -Inf -> -1000 -mngx130 minmag -1 -Inf -> -1 -mngx131 minmag -0 -Inf -> -0 -mngx132 minmag 0 -Inf -> 0 -mngx133 minmag 1 -Inf -> 1 -mngx134 minmag 1000 -Inf -> 1000 -mngx135 minmag Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -mngx141 minmag NaN -Inf -> -Infinity -mngx142 minmag NaN -1000 -> -1000 -mngx143 minmag NaN -1 -> -1 -mngx144 minmag NaN -0 -> -0 -mngx145 minmag NaN 0 -> 0 -mngx146 minmag NaN 1 -> 1 -mngx147 minmag NaN 1000 -> 1000 -mngx148 minmag NaN Inf -> Infinity -mngx149 minmag NaN NaN -> NaN -mngx150 minmag -Inf NaN -> -Infinity -mngx151 minmag -1000 NaN -> -1000 -mngx152 minmag -1 -NaN -> -1 -mngx153 minmag -0 NaN -> -0 -mngx154 minmag 0 -NaN -> 0 -mngx155 minmag 1 NaN -> 1 -mngx156 minmag 1000 NaN -> 1000 -mngx157 minmag Inf NaN -> Infinity - -mngx161 minmag sNaN -Inf -> NaN Invalid_operation -mngx162 minmag sNaN -1000 -> NaN Invalid_operation -mngx163 minmag sNaN -1 -> NaN Invalid_operation -mngx164 minmag sNaN -0 -> NaN Invalid_operation -mngx165 minmag -sNaN 0 -> -NaN Invalid_operation -mngx166 minmag -sNaN 1 -> -NaN Invalid_operation -mngx167 minmag sNaN 1000 -> NaN Invalid_operation -mngx168 minmag sNaN NaN -> NaN Invalid_operation -mngx169 minmag sNaN sNaN -> NaN Invalid_operation -mngx170 minmag NaN sNaN -> NaN Invalid_operation -mngx171 minmag -Inf sNaN -> NaN Invalid_operation -mngx172 minmag -1000 sNaN -> NaN Invalid_operation -mngx173 minmag -1 sNaN -> NaN Invalid_operation -mngx174 minmag -0 sNaN -> NaN Invalid_operation -mngx175 minmag 0 sNaN -> NaN Invalid_operation -mngx176 minmag 1 sNaN -> NaN Invalid_operation -mngx177 minmag 1000 sNaN -> NaN Invalid_operation -mngx178 minmag Inf sNaN -> NaN Invalid_operation -mngx179 minmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -mngx181 minmag NaN9 -Inf -> -Infinity -mngx182 minmag -NaN8 9990 -> 9990 -mngx183 minmag NaN71 Inf -> Infinity - -mngx184 minmag NaN1 NaN54 -> NaN1 -mngx185 minmag NaN22 -NaN53 -> NaN22 -mngx186 minmag -NaN3 NaN6 -> -NaN3 -mngx187 minmag -NaN44 NaN7 -> -NaN44 - -mngx188 minmag -Inf NaN41 -> -Infinity -mngx189 minmag -9999 -NaN33 -> -9999 -mngx190 minmag Inf NaN2 -> Infinity - -mngx191 minmag sNaN99 -Inf -> NaN99 Invalid_operation -mngx192 minmag sNaN98 -11 -> NaN98 Invalid_operation -mngx193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation -mngx194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation -mngx195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation -mngx196 minmag -Inf sNaN92 -> NaN92 Invalid_operation -mngx197 minmag 088 sNaN91 -> NaN91 Invalid_operation -mngx198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation -mngx199 minmag NaN sNaN86 -> NaN86 Invalid_operation - --- rounding checks -- chosen is rounded, or not -maxExponent: 999 -minexponent: -999 -precision: 9 -mngx201 minmag -12345678000 1 -> 1 -mngx202 minmag 1 -12345678000 -> 1 -mngx203 minmag -1234567800 1 -> 1 -mngx204 minmag 1 -1234567800 -> 1 -mngx205 minmag -1234567890 1 -> 1 -mngx206 minmag 1 -1234567890 -> 1 -mngx207 minmag -1234567891 1 -> 1 -mngx208 minmag 1 -1234567891 -> 1 -mngx209 minmag -12345678901 1 -> 1 -mngx210 minmag 1 -12345678901 -> 1 -mngx211 minmag -1234567896 1 -> 1 -mngx212 minmag 1 -1234567896 -> 1 -mngx213 minmag 1234567891 1 -> 1 -mngx214 minmag 1 1234567891 -> 1 -mngx215 minmag 12345678901 1 -> 1 -mngx216 minmag 1 12345678901 -> 1 -mngx217 minmag 1234567896 1 -> 1 -mngx218 minmag 1 1234567896 -> 1 - -precision: 15 -mngx221 minmag -12345678000 1 -> 1 -mngx222 minmag 1 -12345678000 -> 1 -mngx223 minmag -1234567800 1 -> 1 -mngx224 minmag 1 -1234567800 -> 1 -mngx225 minmag -1234567890 1 -> 1 -mngx226 minmag 1 -1234567890 -> 1 -mngx227 minmag -1234567891 1 -> 1 -mngx228 minmag 1 -1234567891 -> 1 -mngx229 minmag -12345678901 1 -> 1 -mngx230 minmag 1 -12345678901 -> 1 -mngx231 minmag -1234567896 1 -> 1 -mngx232 minmag 1 -1234567896 -> 1 -mngx233 minmag 1234567891 1 -> 1 -mngx234 minmag 1 1234567891 -> 1 -mngx235 minmag 12345678901 1 -> 1 -mngx236 minmag 1 12345678901 -> 1 -mngx237 minmag 1234567896 1 -> 1 -mngx238 minmag 1 1234567896 -> 1 - --- from examples -mngx280 minmag '3' '2' -> '2' -mngx281 minmag '-10' '3' -> '3' -mngx282 minmag '1.0' '1' -> '1.0' -mngx283 minmag '1' '1.0' -> '1.0' -mngx284 minmag '7' 'NaN' -> '7' - --- overflow and underflow tests .. subnormal results [inputs] now allowed -maxExponent: 999999999 -minexponent: -999999999 -mngx330 minmag -1.23456789012345E-0 -9E+999999999 -> -1.23456789012345 -mngx331 minmag -9E+999999999 -1.23456789012345E-0 -> -1.23456789012345 -mngx332 minmag -0.100 -9E-999999999 -> -9E-999999999 -mngx333 minmag -9E-999999999 -0.100 -> -9E-999999999 -mngx335 minmag +1.23456789012345E-0 -9E+999999999 -> 1.23456789012345 -mngx336 minmag -9E+999999999 1.23456789012345E-0 -> 1.23456789012345 -mngx337 minmag +0.100 -9E-999999999 -> -9E-999999999 -mngx338 minmag -9E-999999999 0.100 -> -9E-999999999 - -mngx339 minmag -1e-599999999 -1e-400000001 -> -1E-599999999 -mngx340 minmag -1e-599999999 -1e-400000000 -> -1E-599999999 -mngx341 minmag -1e-600000000 -1e-400000000 -> -1E-600000000 -mngx342 minmag -9e-999999998 -0.01 -> -9E-999999998 -mngx343 minmag -9e-999999998 -0.1 -> -9E-999999998 -mngx344 minmag -0.01 -9e-999999998 -> -9E-999999998 -mngx345 minmag -1e599999999 -1e400000001 -> -1E+400000001 -mngx346 minmag -1e599999999 -1e400000000 -> -1E+400000000 -mngx347 minmag -1e600000000 -1e400000000 -> -1E+400000000 -mngx348 minmag -9e999999998 -100 -> -100 -mngx349 minmag -9e999999998 -10 -> -10 -mngx350 minmag -100 -9e999999998 -> -100 --- signs -mngx351 minmag -1e+777777777 -1e+411111111 -> -1E+411111111 -mngx352 minmag -1e+777777777 +1e+411111111 -> 1E+411111111 -mngx353 minmag +1e+777777777 -1e+411111111 -> -1E+411111111 -mngx354 minmag +1e+777777777 +1e+411111111 -> 1E+411111111 -mngx355 minmag -1e-777777777 -1e-411111111 -> -1E-777777777 -mngx356 minmag -1e-777777777 +1e-411111111 -> -1E-777777777 -mngx357 minmag +1e-777777777 -1e-411111111 -> 1E-777777777 -mngx358 minmag +1e-777777777 +1e-411111111 -> 1E-777777777 - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -mngx401 minmag Inf 1.1 -> 1.1 -mngx402 minmag 1.1 1 -> 1 -mngx403 minmag 1 1.0 -> 1.0 -mngx404 minmag 1.0 0.1 -> 0.1 -mngx405 minmag 0.1 0.10 -> 0.10 -mngx406 minmag 0.10 0.100 -> 0.100 -mngx407 minmag 0.10 0 -> 0 -mngx408 minmag 0 0.0 -> 0.0 -mngx409 minmag 0.0 -0 -> -0 -mngx410 minmag 0.0 -0.0 -> -0.0 -mngx411 minmag 0.00 -0.0 -> -0.0 -mngx412 minmag 0.0 -0.00 -> -0.00 -mngx413 minmag 0 -0.0 -> -0.0 -mngx414 minmag 0 -0 -> -0 -mngx415 minmag -0.0 -0 -> -0 -mngx416 minmag -0 -0.100 -> -0 -mngx417 minmag -0.100 -0.10 -> -0.10 -mngx418 minmag -0.10 -0.1 -> -0.1 -mngx419 minmag -0.1 -1.0 -> -0.1 -mngx420 minmag -1.0 -1 -> -1 -mngx421 minmag -1 -1.1 -> -1 -mngx423 minmag -1.1 -Inf -> -1.1 --- same with operands reversed -mngx431 minmag 1.1 Inf -> 1.1 -mngx432 minmag 1 1.1 -> 1 -mngx433 minmag 1.0 1 -> 1.0 -mngx434 minmag 0.1 1.0 -> 0.1 -mngx435 minmag 0.10 0.1 -> 0.10 -mngx436 minmag 0.100 0.10 -> 0.100 -mngx437 minmag 0 0.10 -> 0 -mngx438 minmag 0.0 0 -> 0.0 -mngx439 minmag -0 0.0 -> -0 -mngx440 minmag -0.0 0.0 -> -0.0 -mngx441 minmag -0.0 0.00 -> -0.0 -mngx442 minmag -0.00 0.0 -> -0.00 -mngx443 minmag -0.0 0 -> -0.0 -mngx444 minmag -0 0 -> -0 -mngx445 minmag -0 -0.0 -> -0 -mngx446 minmag -0.100 -0 -> -0 -mngx447 minmag -0.10 -0.100 -> -0.10 -mngx448 minmag -0.1 -0.10 -> -0.1 -mngx449 minmag -1.0 -0.1 -> -0.1 -mngx450 minmag -1 -1.0 -> -1 -mngx451 minmag -1.1 -1 -> -1 -mngx453 minmag -Inf -1.1 -> -1.1 --- largies -mngx460 minmag 1000 1E+3 -> 1000 -mngx461 minmag 1E+3 1000 -> 1000 -mngx462 minmag 1000 -1E+3 -> -1E+3 -mngx463 minmag 1E+3 -1000 -> -1000 -mngx464 minmag -1000 1E+3 -> -1000 -mngx465 minmag -1E+3 1000 -> -1E+3 -mngx466 minmag -1000 -1E+3 -> -1E+3 -mngx467 minmag -1E+3 -1000 -> -1E+3 - --- rounding (results treated as though plus) -maxexponent: 999999999 -minexponent: -999999999 -precision: 3 - -mngx470 minmag 1 5 -> 1 -mngx471 minmag 10 50 -> 10 -mngx472 minmag 100 500 -> 100 -mngx473 minmag 1000 5000 -> 1.00E+3 Rounded -mngx474 minmag 10000 50000 -> 1.00E+4 Rounded -mngx475 minmag 6 50 -> 6 -mngx476 minmag 66 500 -> 66 -mngx477 minmag 666 5000 -> 666 -mngx478 minmag 6666 50000 -> 6.67E+3 Rounded Inexact -mngx479 minmag 66666 500000 -> 6.67E+4 Rounded Inexact -mngx480 minmag 33333 500000 -> 3.33E+4 Rounded Inexact -mngx481 minmag 75401 1 -> 1 -mngx482 minmag 75402 10 -> 10 -mngx483 minmag 75403 100 -> 100 -mngx484 minmag 75404 1000 -> 1.00E+3 Rounded -mngx485 minmag 75405 10000 -> 1.00E+4 Rounded -mngx486 minmag 75406 6 -> 6 -mngx487 minmag 75407 66 -> 66 -mngx488 minmag 75408 666 -> 666 -mngx489 minmag 75409 6666 -> 6.67E+3 Rounded Inexact -mngx490 minmag 75410 66666 -> 6.67E+4 Rounded Inexact -mngx491 minmag 75411 33333 -> 3.33E+4 Rounded Inexact - - --- overflow tests -maxexponent: 999999999 -minexponent: -999999999 -precision: 3 -mngx500 minmag 9.999E+999999999 0 -> 0 -mngx501 minmag -9.999E+999999999 0 -> 0 - --- subnormals and underflow -precision: 3 -maxexponent: 999 -minexponent: -999 -mngx510 minmag 1.00E-999 0 -> 0 -mngx511 minmag 0.1E-999 0 -> 0 -mngx512 minmag 0.10E-999 0 -> 0 -mngx513 minmag 0.100E-999 0 -> 0 -mngx514 minmag 0.01E-999 0 -> 0 -mngx515 minmag 0.999E-999 0 -> 0 -mngx516 minmag 0.099E-999 0 -> 0 -mngx517 minmag 0.009E-999 0 -> 0 -mngx518 minmag 0.001E-999 0 -> 0 -mngx519 minmag 0.0009E-999 0 -> 0 -mngx520 minmag 0.0001E-999 0 -> 0 - -mngx530 minmag -1.00E-999 0 -> 0 -mngx531 minmag -0.1E-999 0 -> 0 -mngx532 minmag -0.10E-999 0 -> 0 -mngx533 minmag -0.100E-999 0 -> 0 -mngx534 minmag -0.01E-999 0 -> 0 -mngx535 minmag -0.999E-999 0 -> 0 -mngx536 minmag -0.099E-999 0 -> 0 -mngx537 minmag -0.009E-999 0 -> 0 -mngx538 minmag -0.001E-999 0 -> 0 -mngx539 minmag -0.0009E-999 0 -> 0 -mngx540 minmag -0.0001E-999 0 -> 0 - - --- Null tests -mng900 minmag 10 # -> NaN Invalid_operation -mng901 minmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- minmag.decTest -- decimal minimum by magnitude -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- sanity checks +mngx001 minmag -2 -2 -> -2 +mngx002 minmag -2 -1 -> -1 +mngx003 minmag -2 0 -> 0 +mngx004 minmag -2 1 -> 1 +mngx005 minmag -2 2 -> -2 +mngx006 minmag -1 -2 -> -1 +mngx007 minmag -1 -1 -> -1 +mngx008 minmag -1 0 -> 0 +mngx009 minmag -1 1 -> -1 +mngx010 minmag -1 2 -> -1 +mngx011 minmag 0 -2 -> 0 +mngx012 minmag 0 -1 -> 0 +mngx013 minmag 0 0 -> 0 +mngx014 minmag 0 1 -> 0 +mngx015 minmag 0 2 -> 0 +mngx016 minmag 1 -2 -> 1 +mngx017 minmag 1 -1 -> -1 +mngx018 minmag 1 0 -> 0 +mngx019 minmag 1 1 -> 1 +mngx020 minmag 1 2 -> 1 +mngx021 minmag 2 -2 -> -2 +mngx022 minmag 2 -1 -> -1 +mngx023 minmag 2 0 -> 0 +mngx025 minmag 2 1 -> 1 +mngx026 minmag 2 2 -> 2 + +-- extended zeros +mngx030 minmag 0 0 -> 0 +mngx031 minmag 0 -0 -> -0 +mngx032 minmag 0 -0.0 -> -0.0 +mngx033 minmag 0 0.0 -> 0.0 +mngx034 minmag -0 0 -> -0 +mngx035 minmag -0 -0 -> -0 +mngx036 minmag -0 -0.0 -> -0 +mngx037 minmag -0 0.0 -> -0 +mngx038 minmag 0.0 0 -> 0.0 +mngx039 minmag 0.0 -0 -> -0 +mngx040 minmag 0.0 -0.0 -> -0.0 +mngx041 minmag 0.0 0.0 -> 0.0 +mngx042 minmag -0.0 0 -> -0.0 +mngx043 minmag -0.0 -0 -> -0 +mngx044 minmag -0.0 -0.0 -> -0.0 +mngx045 minmag -0.0 0.0 -> -0.0 + +mngx046 minmag 0E1 -0E1 -> -0E+1 +mngx047 minmag -0E1 0E2 -> -0E+1 +mngx048 minmag 0E2 0E1 -> 0E+1 +mngx049 minmag 0E1 0E2 -> 0E+1 +mngx050 minmag -0E3 -0E2 -> -0E+3 +mngx051 minmag -0E2 -0E3 -> -0E+3 + +-- Specials +precision: 9 +mngx090 minmag Inf -Inf -> -Infinity +mngx091 minmag Inf -1000 -> -1000 +mngx092 minmag Inf -1 -> -1 +mngx093 minmag Inf -0 -> -0 +mngx094 minmag Inf 0 -> 0 +mngx095 minmag Inf 1 -> 1 +mngx096 minmag Inf 1000 -> 1000 +mngx097 minmag Inf Inf -> Infinity +mngx098 minmag -1000 Inf -> -1000 +mngx099 minmag -Inf Inf -> -Infinity +mngx100 minmag -1 Inf -> -1 +mngx101 minmag -0 Inf -> -0 +mngx102 minmag 0 Inf -> 0 +mngx103 minmag 1 Inf -> 1 +mngx104 minmag 1000 Inf -> 1000 +mngx105 minmag Inf Inf -> Infinity + +mngx120 minmag -Inf -Inf -> -Infinity +mngx121 minmag -Inf -1000 -> -1000 +mngx122 minmag -Inf -1 -> -1 +mngx123 minmag -Inf -0 -> -0 +mngx124 minmag -Inf 0 -> 0 +mngx125 minmag -Inf 1 -> 1 +mngx126 minmag -Inf 1000 -> 1000 +mngx127 minmag -Inf Inf -> -Infinity +mngx128 minmag -Inf -Inf -> -Infinity +mngx129 minmag -1000 -Inf -> -1000 +mngx130 minmag -1 -Inf -> -1 +mngx131 minmag -0 -Inf -> -0 +mngx132 minmag 0 -Inf -> 0 +mngx133 minmag 1 -Inf -> 1 +mngx134 minmag 1000 -Inf -> 1000 +mngx135 minmag Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +mngx141 minmag NaN -Inf -> -Infinity +mngx142 minmag NaN -1000 -> -1000 +mngx143 minmag NaN -1 -> -1 +mngx144 minmag NaN -0 -> -0 +mngx145 minmag NaN 0 -> 0 +mngx146 minmag NaN 1 -> 1 +mngx147 minmag NaN 1000 -> 1000 +mngx148 minmag NaN Inf -> Infinity +mngx149 minmag NaN NaN -> NaN +mngx150 minmag -Inf NaN -> -Infinity +mngx151 minmag -1000 NaN -> -1000 +mngx152 minmag -1 -NaN -> -1 +mngx153 minmag -0 NaN -> -0 +mngx154 minmag 0 -NaN -> 0 +mngx155 minmag 1 NaN -> 1 +mngx156 minmag 1000 NaN -> 1000 +mngx157 minmag Inf NaN -> Infinity + +mngx161 minmag sNaN -Inf -> NaN Invalid_operation +mngx162 minmag sNaN -1000 -> NaN Invalid_operation +mngx163 minmag sNaN -1 -> NaN Invalid_operation +mngx164 minmag sNaN -0 -> NaN Invalid_operation +mngx165 minmag -sNaN 0 -> -NaN Invalid_operation +mngx166 minmag -sNaN 1 -> -NaN Invalid_operation +mngx167 minmag sNaN 1000 -> NaN Invalid_operation +mngx168 minmag sNaN NaN -> NaN Invalid_operation +mngx169 minmag sNaN sNaN -> NaN Invalid_operation +mngx170 minmag NaN sNaN -> NaN Invalid_operation +mngx171 minmag -Inf sNaN -> NaN Invalid_operation +mngx172 minmag -1000 sNaN -> NaN Invalid_operation +mngx173 minmag -1 sNaN -> NaN Invalid_operation +mngx174 minmag -0 sNaN -> NaN Invalid_operation +mngx175 minmag 0 sNaN -> NaN Invalid_operation +mngx176 minmag 1 sNaN -> NaN Invalid_operation +mngx177 minmag 1000 sNaN -> NaN Invalid_operation +mngx178 minmag Inf sNaN -> NaN Invalid_operation +mngx179 minmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +mngx181 minmag NaN9 -Inf -> -Infinity +mngx182 minmag -NaN8 9990 -> 9990 +mngx183 minmag NaN71 Inf -> Infinity + +mngx184 minmag NaN1 NaN54 -> NaN1 +mngx185 minmag NaN22 -NaN53 -> NaN22 +mngx186 minmag -NaN3 NaN6 -> -NaN3 +mngx187 minmag -NaN44 NaN7 -> -NaN44 + +mngx188 minmag -Inf NaN41 -> -Infinity +mngx189 minmag -9999 -NaN33 -> -9999 +mngx190 minmag Inf NaN2 -> Infinity + +mngx191 minmag sNaN99 -Inf -> NaN99 Invalid_operation +mngx192 minmag sNaN98 -11 -> NaN98 Invalid_operation +mngx193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation +mngx194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation +mngx195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation +mngx196 minmag -Inf sNaN92 -> NaN92 Invalid_operation +mngx197 minmag 088 sNaN91 -> NaN91 Invalid_operation +mngx198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation +mngx199 minmag NaN sNaN86 -> NaN86 Invalid_operation + +-- rounding checks -- chosen is rounded, or not +maxExponent: 999 +minexponent: -999 +precision: 9 +mngx201 minmag -12345678000 1 -> 1 +mngx202 minmag 1 -12345678000 -> 1 +mngx203 minmag -1234567800 1 -> 1 +mngx204 minmag 1 -1234567800 -> 1 +mngx205 minmag -1234567890 1 -> 1 +mngx206 minmag 1 -1234567890 -> 1 +mngx207 minmag -1234567891 1 -> 1 +mngx208 minmag 1 -1234567891 -> 1 +mngx209 minmag -12345678901 1 -> 1 +mngx210 minmag 1 -12345678901 -> 1 +mngx211 minmag -1234567896 1 -> 1 +mngx212 minmag 1 -1234567896 -> 1 +mngx213 minmag 1234567891 1 -> 1 +mngx214 minmag 1 1234567891 -> 1 +mngx215 minmag 12345678901 1 -> 1 +mngx216 minmag 1 12345678901 -> 1 +mngx217 minmag 1234567896 1 -> 1 +mngx218 minmag 1 1234567896 -> 1 + +precision: 15 +mngx221 minmag -12345678000 1 -> 1 +mngx222 minmag 1 -12345678000 -> 1 +mngx223 minmag -1234567800 1 -> 1 +mngx224 minmag 1 -1234567800 -> 1 +mngx225 minmag -1234567890 1 -> 1 +mngx226 minmag 1 -1234567890 -> 1 +mngx227 minmag -1234567891 1 -> 1 +mngx228 minmag 1 -1234567891 -> 1 +mngx229 minmag -12345678901 1 -> 1 +mngx230 minmag 1 -12345678901 -> 1 +mngx231 minmag -1234567896 1 -> 1 +mngx232 minmag 1 -1234567896 -> 1 +mngx233 minmag 1234567891 1 -> 1 +mngx234 minmag 1 1234567891 -> 1 +mngx235 minmag 12345678901 1 -> 1 +mngx236 minmag 1 12345678901 -> 1 +mngx237 minmag 1234567896 1 -> 1 +mngx238 minmag 1 1234567896 -> 1 + +-- from examples +mngx280 minmag '3' '2' -> '2' +mngx281 minmag '-10' '3' -> '3' +mngx282 minmag '1.0' '1' -> '1.0' +mngx283 minmag '1' '1.0' -> '1.0' +mngx284 minmag '7' 'NaN' -> '7' + +-- overflow and underflow tests .. subnormal results [inputs] now allowed +maxExponent: 999999999 +minexponent: -999999999 +mngx330 minmag -1.23456789012345E-0 -9E+999999999 -> -1.23456789012345 +mngx331 minmag -9E+999999999 -1.23456789012345E-0 -> -1.23456789012345 +mngx332 minmag -0.100 -9E-999999999 -> -9E-999999999 +mngx333 minmag -9E-999999999 -0.100 -> -9E-999999999 +mngx335 minmag +1.23456789012345E-0 -9E+999999999 -> 1.23456789012345 +mngx336 minmag -9E+999999999 1.23456789012345E-0 -> 1.23456789012345 +mngx337 minmag +0.100 -9E-999999999 -> -9E-999999999 +mngx338 minmag -9E-999999999 0.100 -> -9E-999999999 + +mngx339 minmag -1e-599999999 -1e-400000001 -> -1E-599999999 +mngx340 minmag -1e-599999999 -1e-400000000 -> -1E-599999999 +mngx341 minmag -1e-600000000 -1e-400000000 -> -1E-600000000 +mngx342 minmag -9e-999999998 -0.01 -> -9E-999999998 +mngx343 minmag -9e-999999998 -0.1 -> -9E-999999998 +mngx344 minmag -0.01 -9e-999999998 -> -9E-999999998 +mngx345 minmag -1e599999999 -1e400000001 -> -1E+400000001 +mngx346 minmag -1e599999999 -1e400000000 -> -1E+400000000 +mngx347 minmag -1e600000000 -1e400000000 -> -1E+400000000 +mngx348 minmag -9e999999998 -100 -> -100 +mngx349 minmag -9e999999998 -10 -> -10 +mngx350 minmag -100 -9e999999998 -> -100 +-- signs +mngx351 minmag -1e+777777777 -1e+411111111 -> -1E+411111111 +mngx352 minmag -1e+777777777 +1e+411111111 -> 1E+411111111 +mngx353 minmag +1e+777777777 -1e+411111111 -> -1E+411111111 +mngx354 minmag +1e+777777777 +1e+411111111 -> 1E+411111111 +mngx355 minmag -1e-777777777 -1e-411111111 -> -1E-777777777 +mngx356 minmag -1e-777777777 +1e-411111111 -> -1E-777777777 +mngx357 minmag +1e-777777777 -1e-411111111 -> 1E-777777777 +mngx358 minmag +1e-777777777 +1e-411111111 -> 1E-777777777 + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +mngx401 minmag Inf 1.1 -> 1.1 +mngx402 minmag 1.1 1 -> 1 +mngx403 minmag 1 1.0 -> 1.0 +mngx404 minmag 1.0 0.1 -> 0.1 +mngx405 minmag 0.1 0.10 -> 0.10 +mngx406 minmag 0.10 0.100 -> 0.100 +mngx407 minmag 0.10 0 -> 0 +mngx408 minmag 0 0.0 -> 0.0 +mngx409 minmag 0.0 -0 -> -0 +mngx410 minmag 0.0 -0.0 -> -0.0 +mngx411 minmag 0.00 -0.0 -> -0.0 +mngx412 minmag 0.0 -0.00 -> -0.00 +mngx413 minmag 0 -0.0 -> -0.0 +mngx414 minmag 0 -0 -> -0 +mngx415 minmag -0.0 -0 -> -0 +mngx416 minmag -0 -0.100 -> -0 +mngx417 minmag -0.100 -0.10 -> -0.10 +mngx418 minmag -0.10 -0.1 -> -0.1 +mngx419 minmag -0.1 -1.0 -> -0.1 +mngx420 minmag -1.0 -1 -> -1 +mngx421 minmag -1 -1.1 -> -1 +mngx423 minmag -1.1 -Inf -> -1.1 +-- same with operands reversed +mngx431 minmag 1.1 Inf -> 1.1 +mngx432 minmag 1 1.1 -> 1 +mngx433 minmag 1.0 1 -> 1.0 +mngx434 minmag 0.1 1.0 -> 0.1 +mngx435 minmag 0.10 0.1 -> 0.10 +mngx436 minmag 0.100 0.10 -> 0.100 +mngx437 minmag 0 0.10 -> 0 +mngx438 minmag 0.0 0 -> 0.0 +mngx439 minmag -0 0.0 -> -0 +mngx440 minmag -0.0 0.0 -> -0.0 +mngx441 minmag -0.0 0.00 -> -0.0 +mngx442 minmag -0.00 0.0 -> -0.00 +mngx443 minmag -0.0 0 -> -0.0 +mngx444 minmag -0 0 -> -0 +mngx445 minmag -0 -0.0 -> -0 +mngx446 minmag -0.100 -0 -> -0 +mngx447 minmag -0.10 -0.100 -> -0.10 +mngx448 minmag -0.1 -0.10 -> -0.1 +mngx449 minmag -1.0 -0.1 -> -0.1 +mngx450 minmag -1 -1.0 -> -1 +mngx451 minmag -1.1 -1 -> -1 +mngx453 minmag -Inf -1.1 -> -1.1 +-- largies +mngx460 minmag 1000 1E+3 -> 1000 +mngx461 minmag 1E+3 1000 -> 1000 +mngx462 minmag 1000 -1E+3 -> -1E+3 +mngx463 minmag 1E+3 -1000 -> -1000 +mngx464 minmag -1000 1E+3 -> -1000 +mngx465 minmag -1E+3 1000 -> -1E+3 +mngx466 minmag -1000 -1E+3 -> -1E+3 +mngx467 minmag -1E+3 -1000 -> -1E+3 + +-- rounding (results treated as though plus) +maxexponent: 999999999 +minexponent: -999999999 +precision: 3 + +mngx470 minmag 1 5 -> 1 +mngx471 minmag 10 50 -> 10 +mngx472 minmag 100 500 -> 100 +mngx473 minmag 1000 5000 -> 1.00E+3 Rounded +mngx474 minmag 10000 50000 -> 1.00E+4 Rounded +mngx475 minmag 6 50 -> 6 +mngx476 minmag 66 500 -> 66 +mngx477 minmag 666 5000 -> 666 +mngx478 minmag 6666 50000 -> 6.67E+3 Rounded Inexact +mngx479 minmag 66666 500000 -> 6.67E+4 Rounded Inexact +mngx480 minmag 33333 500000 -> 3.33E+4 Rounded Inexact +mngx481 minmag 75401 1 -> 1 +mngx482 minmag 75402 10 -> 10 +mngx483 minmag 75403 100 -> 100 +mngx484 minmag 75404 1000 -> 1.00E+3 Rounded +mngx485 minmag 75405 10000 -> 1.00E+4 Rounded +mngx486 minmag 75406 6 -> 6 +mngx487 minmag 75407 66 -> 66 +mngx488 minmag 75408 666 -> 666 +mngx489 minmag 75409 6666 -> 6.67E+3 Rounded Inexact +mngx490 minmag 75410 66666 -> 6.67E+4 Rounded Inexact +mngx491 minmag 75411 33333 -> 3.33E+4 Rounded Inexact + + +-- overflow tests +maxexponent: 999999999 +minexponent: -999999999 +precision: 3 +mngx500 minmag 9.999E+999999999 0 -> 0 +mngx501 minmag -9.999E+999999999 0 -> 0 + +-- subnormals and underflow +precision: 3 +maxexponent: 999 +minexponent: -999 +mngx510 minmag 1.00E-999 0 -> 0 +mngx511 minmag 0.1E-999 0 -> 0 +mngx512 minmag 0.10E-999 0 -> 0 +mngx513 minmag 0.100E-999 0 -> 0 +mngx514 minmag 0.01E-999 0 -> 0 +mngx515 minmag 0.999E-999 0 -> 0 +mngx516 minmag 0.099E-999 0 -> 0 +mngx517 minmag 0.009E-999 0 -> 0 +mngx518 minmag 0.001E-999 0 -> 0 +mngx519 minmag 0.0009E-999 0 -> 0 +mngx520 minmag 0.0001E-999 0 -> 0 + +mngx530 minmag -1.00E-999 0 -> 0 +mngx531 minmag -0.1E-999 0 -> 0 +mngx532 minmag -0.10E-999 0 -> 0 +mngx533 minmag -0.100E-999 0 -> 0 +mngx534 minmag -0.01E-999 0 -> 0 +mngx535 minmag -0.999E-999 0 -> 0 +mngx536 minmag -0.099E-999 0 -> 0 +mngx537 minmag -0.009E-999 0 -> 0 +mngx538 minmag -0.001E-999 0 -> 0 +mngx539 minmag -0.0009E-999 0 -> 0 +mngx540 minmag -0.0001E-999 0 -> 0 + + +-- Null tests +mng900 minmag 10 # -> NaN Invalid_operation +mng901 minmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/nextminus.decTest b/Lib/test/decimaltestdata/nextminus.decTest index ba93066b96a..531c5252a5f 100644 --- a/Lib/test/decimaltestdata/nextminus.decTest +++ b/Lib/test/decimaltestdata/nextminus.decTest @@ -1,148 +1,148 @@ ------------------------------------------------------------------------- --- nextminus.decTest -- decimal next that is less [754r nextdown] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - -nextm001 nextminus 0.999999995 -> 0.999999994 -nextm002 nextminus 0.999999996 -> 0.999999995 -nextm003 nextminus 0.999999997 -> 0.999999996 -nextm004 nextminus 0.999999998 -> 0.999999997 -nextm005 nextminus 0.999999999 -> 0.999999998 -nextm006 nextminus 1.00000000 -> 0.999999999 -nextm007 nextminus 1.0 -> 0.999999999 -nextm008 nextminus 1 -> 0.999999999 -nextm009 nextminus 1.00000001 -> 1.00000000 -nextm010 nextminus 1.00000002 -> 1.00000001 -nextm011 nextminus 1.00000003 -> 1.00000002 -nextm012 nextminus 1.00000004 -> 1.00000003 -nextm013 nextminus 1.00000005 -> 1.00000004 -nextm014 nextminus 1.00000006 -> 1.00000005 -nextm015 nextminus 1.00000007 -> 1.00000006 -nextm016 nextminus 1.00000008 -> 1.00000007 -nextm017 nextminus 1.00000009 -> 1.00000008 -nextm018 nextminus 1.00000010 -> 1.00000009 -nextm019 nextminus 1.00000011 -> 1.00000010 -nextm020 nextminus 1.00000012 -> 1.00000011 - -nextm021 nextminus -0.999999995 -> -0.999999996 -nextm022 nextminus -0.999999996 -> -0.999999997 -nextm023 nextminus -0.999999997 -> -0.999999998 -nextm024 nextminus -0.999999998 -> -0.999999999 -nextm025 nextminus -0.999999999 -> -1.00000000 -nextm026 nextminus -1.00000000 -> -1.00000001 -nextm027 nextminus -1.0 -> -1.00000001 -nextm028 nextminus -1 -> -1.00000001 -nextm029 nextminus -1.00000001 -> -1.00000002 -nextm030 nextminus -1.00000002 -> -1.00000003 -nextm031 nextminus -1.00000003 -> -1.00000004 -nextm032 nextminus -1.00000004 -> -1.00000005 -nextm033 nextminus -1.00000005 -> -1.00000006 -nextm034 nextminus -1.00000006 -> -1.00000007 -nextm035 nextminus -1.00000007 -> -1.00000008 -nextm036 nextminus -1.00000008 -> -1.00000009 -nextm037 nextminus -1.00000009 -> -1.00000010 -nextm038 nextminus -1.00000010 -> -1.00000011 -nextm039 nextminus -1.00000011 -> -1.00000012 - --- input operand is >precision -nextm041 nextminus 1.00000010998 -> 1.00000010 -nextm042 nextminus 1.00000010999 -> 1.00000010 -nextm043 nextminus 1.00000011000 -> 1.00000010 -nextm044 nextminus 1.00000011001 -> 1.00000011 -nextm045 nextminus 1.00000011002 -> 1.00000011 -nextm046 nextminus 1.00000011002 -> 1.00000011 -nextm047 nextminus 1.00000011052 -> 1.00000011 -nextm048 nextminus 1.00000011552 -> 1.00000011 -nextm049 nextminus -1.00000010998 -> -1.00000011 -nextm050 nextminus -1.00000010999 -> -1.00000011 -nextm051 nextminus -1.00000011000 -> -1.00000012 -nextm052 nextminus -1.00000011001 -> -1.00000012 -nextm053 nextminus -1.00000011002 -> -1.00000012 -nextm054 nextminus -1.00000011002 -> -1.00000012 -nextm055 nextminus -1.00000011052 -> -1.00000012 -nextm056 nextminus -1.00000011552 -> -1.00000012 --- ultra-tiny inputs -nextm060 nextminus 1E-99999 -> 0E-391 -nextm061 nextminus 1E-999999999 -> 0E-391 -nextm062 nextminus 1E-391 -> 0E-391 -nextm063 nextminus -1E-99999 -> -1E-391 -nextm064 nextminus -1E-999999999 -> -1E-391 -nextm065 nextminus -1E-391 -> -2E-391 - --- Zeros -nextm100 nextminus -0 -> -1E-391 -nextm101 nextminus 0 -> -1E-391 -nextm102 nextminus 0.00 -> -1E-391 -nextm103 nextminus -0.00 -> -1E-391 -nextm104 nextminus 0E-300 -> -1E-391 -nextm105 nextminus 0E+300 -> -1E-391 -nextm106 nextminus 0E+30000 -> -1E-391 -nextm107 nextminus -0E+30000 -> -1E-391 - -precision: 9 -maxExponent: 999 -minexponent: -999 --- specials -nextm150 nextminus Inf -> 9.99999999E+999 -nextm151 nextminus -Inf -> -Infinity -nextm152 nextminus NaN -> NaN -nextm153 nextminus sNaN -> NaN Invalid_operation -nextm154 nextminus NaN77 -> NaN77 -nextm155 nextminus sNaN88 -> NaN88 Invalid_operation -nextm156 nextminus -NaN -> -NaN -nextm157 nextminus -sNaN -> -NaN Invalid_operation -nextm158 nextminus -NaN77 -> -NaN77 -nextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -nextm170 nextminus 9.99999999E+999 -> 9.99999998E+999 -nextm171 nextminus 9.99999998E+999 -> 9.99999997E+999 -nextm172 nextminus 1E-999 -> 9.9999999E-1000 -nextm173 nextminus 1.00000000E-999 -> 9.9999999E-1000 -nextm174 nextminus 9E-1007 -> 8E-1007 -nextm175 nextminus 9.9E-1006 -> 9.8E-1006 -nextm176 nextminus 9.9999E-1003 -> 9.9998E-1003 -nextm177 nextminus 9.9999999E-1000 -> 9.9999998E-1000 -nextm178 nextminus 9.9999998E-1000 -> 9.9999997E-1000 -nextm179 nextminus 9.9999997E-1000 -> 9.9999996E-1000 -nextm180 nextminus 0E-1007 -> -1E-1007 -nextm181 nextminus 1E-1007 -> 0E-1007 -nextm182 nextminus 2E-1007 -> 1E-1007 - -nextm183 nextminus -0E-1007 -> -1E-1007 -nextm184 nextminus -1E-1007 -> -2E-1007 -nextm185 nextminus -2E-1007 -> -3E-1007 -nextm186 nextminus -10E-1007 -> -1.1E-1006 -nextm187 nextminus -100E-1007 -> -1.01E-1005 -nextm188 nextminus -100000E-1007 -> -1.00001E-1002 -nextm189 nextminus -1.0000E-999 -> -1.00000001E-999 -nextm190 nextminus -1.00000000E-999 -> -1.00000001E-999 -nextm191 nextminus -1E-999 -> -1.00000001E-999 -nextm192 nextminus -9.99999998E+999 -> -9.99999999E+999 -nextm193 nextminus -9.99999999E+999 -> -Infinity - --- Null tests -nextm900 nextminus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- nextminus.decTest -- decimal next that is less [754r nextdown] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +nextm001 nextminus 0.999999995 -> 0.999999994 +nextm002 nextminus 0.999999996 -> 0.999999995 +nextm003 nextminus 0.999999997 -> 0.999999996 +nextm004 nextminus 0.999999998 -> 0.999999997 +nextm005 nextminus 0.999999999 -> 0.999999998 +nextm006 nextminus 1.00000000 -> 0.999999999 +nextm007 nextminus 1.0 -> 0.999999999 +nextm008 nextminus 1 -> 0.999999999 +nextm009 nextminus 1.00000001 -> 1.00000000 +nextm010 nextminus 1.00000002 -> 1.00000001 +nextm011 nextminus 1.00000003 -> 1.00000002 +nextm012 nextminus 1.00000004 -> 1.00000003 +nextm013 nextminus 1.00000005 -> 1.00000004 +nextm014 nextminus 1.00000006 -> 1.00000005 +nextm015 nextminus 1.00000007 -> 1.00000006 +nextm016 nextminus 1.00000008 -> 1.00000007 +nextm017 nextminus 1.00000009 -> 1.00000008 +nextm018 nextminus 1.00000010 -> 1.00000009 +nextm019 nextminus 1.00000011 -> 1.00000010 +nextm020 nextminus 1.00000012 -> 1.00000011 + +nextm021 nextminus -0.999999995 -> -0.999999996 +nextm022 nextminus -0.999999996 -> -0.999999997 +nextm023 nextminus -0.999999997 -> -0.999999998 +nextm024 nextminus -0.999999998 -> -0.999999999 +nextm025 nextminus -0.999999999 -> -1.00000000 +nextm026 nextminus -1.00000000 -> -1.00000001 +nextm027 nextminus -1.0 -> -1.00000001 +nextm028 nextminus -1 -> -1.00000001 +nextm029 nextminus -1.00000001 -> -1.00000002 +nextm030 nextminus -1.00000002 -> -1.00000003 +nextm031 nextminus -1.00000003 -> -1.00000004 +nextm032 nextminus -1.00000004 -> -1.00000005 +nextm033 nextminus -1.00000005 -> -1.00000006 +nextm034 nextminus -1.00000006 -> -1.00000007 +nextm035 nextminus -1.00000007 -> -1.00000008 +nextm036 nextminus -1.00000008 -> -1.00000009 +nextm037 nextminus -1.00000009 -> -1.00000010 +nextm038 nextminus -1.00000010 -> -1.00000011 +nextm039 nextminus -1.00000011 -> -1.00000012 + +-- input operand is >precision +nextm041 nextminus 1.00000010998 -> 1.00000010 +nextm042 nextminus 1.00000010999 -> 1.00000010 +nextm043 nextminus 1.00000011000 -> 1.00000010 +nextm044 nextminus 1.00000011001 -> 1.00000011 +nextm045 nextminus 1.00000011002 -> 1.00000011 +nextm046 nextminus 1.00000011002 -> 1.00000011 +nextm047 nextminus 1.00000011052 -> 1.00000011 +nextm048 nextminus 1.00000011552 -> 1.00000011 +nextm049 nextminus -1.00000010998 -> -1.00000011 +nextm050 nextminus -1.00000010999 -> -1.00000011 +nextm051 nextminus -1.00000011000 -> -1.00000012 +nextm052 nextminus -1.00000011001 -> -1.00000012 +nextm053 nextminus -1.00000011002 -> -1.00000012 +nextm054 nextminus -1.00000011002 -> -1.00000012 +nextm055 nextminus -1.00000011052 -> -1.00000012 +nextm056 nextminus -1.00000011552 -> -1.00000012 +-- ultra-tiny inputs +nextm060 nextminus 1E-99999 -> 0E-391 +nextm061 nextminus 1E-999999999 -> 0E-391 +nextm062 nextminus 1E-391 -> 0E-391 +nextm063 nextminus -1E-99999 -> -1E-391 +nextm064 nextminus -1E-999999999 -> -1E-391 +nextm065 nextminus -1E-391 -> -2E-391 + +-- Zeros +nextm100 nextminus -0 -> -1E-391 +nextm101 nextminus 0 -> -1E-391 +nextm102 nextminus 0.00 -> -1E-391 +nextm103 nextminus -0.00 -> -1E-391 +nextm104 nextminus 0E-300 -> -1E-391 +nextm105 nextminus 0E+300 -> -1E-391 +nextm106 nextminus 0E+30000 -> -1E-391 +nextm107 nextminus -0E+30000 -> -1E-391 + +precision: 9 +maxExponent: 999 +minexponent: -999 +-- specials +nextm150 nextminus Inf -> 9.99999999E+999 +nextm151 nextminus -Inf -> -Infinity +nextm152 nextminus NaN -> NaN +nextm153 nextminus sNaN -> NaN Invalid_operation +nextm154 nextminus NaN77 -> NaN77 +nextm155 nextminus sNaN88 -> NaN88 Invalid_operation +nextm156 nextminus -NaN -> -NaN +nextm157 nextminus -sNaN -> -NaN Invalid_operation +nextm158 nextminus -NaN77 -> -NaN77 +nextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +nextm170 nextminus 9.99999999E+999 -> 9.99999998E+999 +nextm171 nextminus 9.99999998E+999 -> 9.99999997E+999 +nextm172 nextminus 1E-999 -> 9.9999999E-1000 +nextm173 nextminus 1.00000000E-999 -> 9.9999999E-1000 +nextm174 nextminus 9E-1007 -> 8E-1007 +nextm175 nextminus 9.9E-1006 -> 9.8E-1006 +nextm176 nextminus 9.9999E-1003 -> 9.9998E-1003 +nextm177 nextminus 9.9999999E-1000 -> 9.9999998E-1000 +nextm178 nextminus 9.9999998E-1000 -> 9.9999997E-1000 +nextm179 nextminus 9.9999997E-1000 -> 9.9999996E-1000 +nextm180 nextminus 0E-1007 -> -1E-1007 +nextm181 nextminus 1E-1007 -> 0E-1007 +nextm182 nextminus 2E-1007 -> 1E-1007 + +nextm183 nextminus -0E-1007 -> -1E-1007 +nextm184 nextminus -1E-1007 -> -2E-1007 +nextm185 nextminus -2E-1007 -> -3E-1007 +nextm186 nextminus -10E-1007 -> -1.1E-1006 +nextm187 nextminus -100E-1007 -> -1.01E-1005 +nextm188 nextminus -100000E-1007 -> -1.00001E-1002 +nextm189 nextminus -1.0000E-999 -> -1.00000001E-999 +nextm190 nextminus -1.00000000E-999 -> -1.00000001E-999 +nextm191 nextminus -1E-999 -> -1.00000001E-999 +nextm192 nextminus -9.99999998E+999 -> -9.99999999E+999 +nextm193 nextminus -9.99999999E+999 -> -Infinity + +-- Null tests +nextm900 nextminus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/nextplus.decTest b/Lib/test/decimaltestdata/nextplus.decTest index 44989e50b17..c66e3287270 100644 --- a/Lib/test/decimaltestdata/nextplus.decTest +++ b/Lib/test/decimaltestdata/nextplus.decTest @@ -1,150 +1,150 @@ ------------------------------------------------------------------------- --- nextplus.decTest -- decimal next that is greater [754r nextup] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - -nextp001 nextplus 0.999999995 -> 0.999999996 -nextp002 nextplus 0.999999996 -> 0.999999997 -nextp003 nextplus 0.999999997 -> 0.999999998 -nextp004 nextplus 0.999999998 -> 0.999999999 -nextp005 nextplus 0.999999999 -> 1.00000000 -nextp006 nextplus 1.00000000 -> 1.00000001 -nextp007 nextplus 1.0 -> 1.00000001 -nextp008 nextplus 1 -> 1.00000001 -nextp009 nextplus 1.00000001 -> 1.00000002 -nextp010 nextplus 1.00000002 -> 1.00000003 -nextp011 nextplus 1.00000003 -> 1.00000004 -nextp012 nextplus 1.00000004 -> 1.00000005 -nextp013 nextplus 1.00000005 -> 1.00000006 -nextp014 nextplus 1.00000006 -> 1.00000007 -nextp015 nextplus 1.00000007 -> 1.00000008 -nextp016 nextplus 1.00000008 -> 1.00000009 -nextp017 nextplus 1.00000009 -> 1.00000010 -nextp018 nextplus 1.00000010 -> 1.00000011 -nextp019 nextplus 1.00000011 -> 1.00000012 - -nextp021 nextplus -0.999999995 -> -0.999999994 -nextp022 nextplus -0.999999996 -> -0.999999995 -nextp023 nextplus -0.999999997 -> -0.999999996 -nextp024 nextplus -0.999999998 -> -0.999999997 -nextp025 nextplus -0.999999999 -> -0.999999998 -nextp026 nextplus -1.00000000 -> -0.999999999 -nextp027 nextplus -1.0 -> -0.999999999 -nextp028 nextplus -1 -> -0.999999999 -nextp029 nextplus -1.00000001 -> -1.00000000 -nextp030 nextplus -1.00000002 -> -1.00000001 -nextp031 nextplus -1.00000003 -> -1.00000002 -nextp032 nextplus -1.00000004 -> -1.00000003 -nextp033 nextplus -1.00000005 -> -1.00000004 -nextp034 nextplus -1.00000006 -> -1.00000005 -nextp035 nextplus -1.00000007 -> -1.00000006 -nextp036 nextplus -1.00000008 -> -1.00000007 -nextp037 nextplus -1.00000009 -> -1.00000008 -nextp038 nextplus -1.00000010 -> -1.00000009 -nextp039 nextplus -1.00000011 -> -1.00000010 -nextp040 nextplus -1.00000012 -> -1.00000011 - --- input operand is >precision -nextp041 nextplus 1.00000010998 -> 1.00000011 -nextp042 nextplus 1.00000010999 -> 1.00000011 -nextp043 nextplus 1.00000011000 -> 1.00000012 -nextp044 nextplus 1.00000011001 -> 1.00000012 -nextp045 nextplus 1.00000011002 -> 1.00000012 -nextp046 nextplus 1.00000011002 -> 1.00000012 -nextp047 nextplus 1.00000011052 -> 1.00000012 -nextp048 nextplus 1.00000011552 -> 1.00000012 -nextp049 nextplus -1.00000010998 -> -1.00000010 -nextp050 nextplus -1.00000010999 -> -1.00000010 -nextp051 nextplus -1.00000011000 -> -1.00000010 -nextp052 nextplus -1.00000011001 -> -1.00000011 -nextp053 nextplus -1.00000011002 -> -1.00000011 -nextp054 nextplus -1.00000011002 -> -1.00000011 -nextp055 nextplus -1.00000011052 -> -1.00000011 -nextp056 nextplus -1.00000011552 -> -1.00000011 --- ultra-tiny inputs -nextp060 nextplus 1E-99999 -> 1E-391 -nextp061 nextplus 1E-999999999 -> 1E-391 -nextp062 nextplus 1E-391 -> 2E-391 -nextp063 nextplus -1E-99999 -> -0E-391 -nextp064 nextplus -1E-999999999 -> -0E-391 -nextp065 nextplus -1E-391 -> -0E-391 - --- Zeros -nextp100 nextplus 0 -> 1E-391 -nextp101 nextplus 0.00 -> 1E-391 -nextp102 nextplus 0E-300 -> 1E-391 -nextp103 nextplus 0E+300 -> 1E-391 -nextp104 nextplus 0E+30000 -> 1E-391 -nextp105 nextplus -0 -> 1E-391 -nextp106 nextplus -0.00 -> 1E-391 -nextp107 nextplus -0E-300 -> 1E-391 -nextp108 nextplus -0E+300 -> 1E-391 -nextp109 nextplus -0E+30000 -> 1E-391 - -maxExponent: 999 -minexponent: -999 -precision: 9 --- specials -nextp150 nextplus Inf -> Infinity -nextp151 nextplus -Inf -> -9.99999999E+999 -nextp152 nextplus NaN -> NaN -nextp153 nextplus sNaN -> NaN Invalid_operation -nextp154 nextplus NaN77 -> NaN77 -nextp155 nextplus sNaN88 -> NaN88 Invalid_operation -nextp156 nextplus -NaN -> -NaN -nextp157 nextplus -sNaN -> -NaN Invalid_operation -nextp158 nextplus -NaN77 -> -NaN77 -nextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -nextp170 nextplus 9.99999999E+999 -> Infinity -nextp171 nextplus 9.99999998E+999 -> 9.99999999E+999 -nextp172 nextplus 1E-999 -> 1.00000001E-999 -nextp173 nextplus 1.00000000E-999 -> 1.00000001E-999 -nextp174 nextplus 9E-1007 -> 1.0E-1006 -nextp175 nextplus 9.9E-1006 -> 1.00E-1005 -nextp176 nextplus 9.9999E-1003 -> 1.00000E-1002 -nextp177 nextplus 9.9999999E-1000 -> 1.00000000E-999 -nextp178 nextplus 9.9999998E-1000 -> 9.9999999E-1000 -nextp179 nextplus 9.9999997E-1000 -> 9.9999998E-1000 -nextp180 nextplus 0E-1007 -> 1E-1007 -nextp181 nextplus 1E-1007 -> 2E-1007 -nextp182 nextplus 2E-1007 -> 3E-1007 - -nextp183 nextplus -0E-1007 -> 1E-1007 -nextp184 nextplus -1E-1007 -> -0E-1007 -nextp185 nextplus -2E-1007 -> -1E-1007 -nextp186 nextplus -10E-1007 -> -9E-1007 -nextp187 nextplus -100E-1007 -> -9.9E-1006 -nextp188 nextplus -100000E-1007 -> -9.9999E-1003 -nextp189 nextplus -1.0000E-999 -> -9.9999999E-1000 -nextp190 nextplus -1.00000000E-999 -> -9.9999999E-1000 -nextp191 nextplus -1E-999 -> -9.9999999E-1000 -nextp192 nextplus -9.99999998E+999 -> -9.99999997E+999 -nextp193 nextplus -9.99999999E+999 -> -9.99999998E+999 - --- Null tests -nextp900 nextplus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- nextplus.decTest -- decimal next that is greater [754r nextup] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +nextp001 nextplus 0.999999995 -> 0.999999996 +nextp002 nextplus 0.999999996 -> 0.999999997 +nextp003 nextplus 0.999999997 -> 0.999999998 +nextp004 nextplus 0.999999998 -> 0.999999999 +nextp005 nextplus 0.999999999 -> 1.00000000 +nextp006 nextplus 1.00000000 -> 1.00000001 +nextp007 nextplus 1.0 -> 1.00000001 +nextp008 nextplus 1 -> 1.00000001 +nextp009 nextplus 1.00000001 -> 1.00000002 +nextp010 nextplus 1.00000002 -> 1.00000003 +nextp011 nextplus 1.00000003 -> 1.00000004 +nextp012 nextplus 1.00000004 -> 1.00000005 +nextp013 nextplus 1.00000005 -> 1.00000006 +nextp014 nextplus 1.00000006 -> 1.00000007 +nextp015 nextplus 1.00000007 -> 1.00000008 +nextp016 nextplus 1.00000008 -> 1.00000009 +nextp017 nextplus 1.00000009 -> 1.00000010 +nextp018 nextplus 1.00000010 -> 1.00000011 +nextp019 nextplus 1.00000011 -> 1.00000012 + +nextp021 nextplus -0.999999995 -> -0.999999994 +nextp022 nextplus -0.999999996 -> -0.999999995 +nextp023 nextplus -0.999999997 -> -0.999999996 +nextp024 nextplus -0.999999998 -> -0.999999997 +nextp025 nextplus -0.999999999 -> -0.999999998 +nextp026 nextplus -1.00000000 -> -0.999999999 +nextp027 nextplus -1.0 -> -0.999999999 +nextp028 nextplus -1 -> -0.999999999 +nextp029 nextplus -1.00000001 -> -1.00000000 +nextp030 nextplus -1.00000002 -> -1.00000001 +nextp031 nextplus -1.00000003 -> -1.00000002 +nextp032 nextplus -1.00000004 -> -1.00000003 +nextp033 nextplus -1.00000005 -> -1.00000004 +nextp034 nextplus -1.00000006 -> -1.00000005 +nextp035 nextplus -1.00000007 -> -1.00000006 +nextp036 nextplus -1.00000008 -> -1.00000007 +nextp037 nextplus -1.00000009 -> -1.00000008 +nextp038 nextplus -1.00000010 -> -1.00000009 +nextp039 nextplus -1.00000011 -> -1.00000010 +nextp040 nextplus -1.00000012 -> -1.00000011 + +-- input operand is >precision +nextp041 nextplus 1.00000010998 -> 1.00000011 +nextp042 nextplus 1.00000010999 -> 1.00000011 +nextp043 nextplus 1.00000011000 -> 1.00000012 +nextp044 nextplus 1.00000011001 -> 1.00000012 +nextp045 nextplus 1.00000011002 -> 1.00000012 +nextp046 nextplus 1.00000011002 -> 1.00000012 +nextp047 nextplus 1.00000011052 -> 1.00000012 +nextp048 nextplus 1.00000011552 -> 1.00000012 +nextp049 nextplus -1.00000010998 -> -1.00000010 +nextp050 nextplus -1.00000010999 -> -1.00000010 +nextp051 nextplus -1.00000011000 -> -1.00000010 +nextp052 nextplus -1.00000011001 -> -1.00000011 +nextp053 nextplus -1.00000011002 -> -1.00000011 +nextp054 nextplus -1.00000011002 -> -1.00000011 +nextp055 nextplus -1.00000011052 -> -1.00000011 +nextp056 nextplus -1.00000011552 -> -1.00000011 +-- ultra-tiny inputs +nextp060 nextplus 1E-99999 -> 1E-391 +nextp061 nextplus 1E-999999999 -> 1E-391 +nextp062 nextplus 1E-391 -> 2E-391 +nextp063 nextplus -1E-99999 -> -0E-391 +nextp064 nextplus -1E-999999999 -> -0E-391 +nextp065 nextplus -1E-391 -> -0E-391 + +-- Zeros +nextp100 nextplus 0 -> 1E-391 +nextp101 nextplus 0.00 -> 1E-391 +nextp102 nextplus 0E-300 -> 1E-391 +nextp103 nextplus 0E+300 -> 1E-391 +nextp104 nextplus 0E+30000 -> 1E-391 +nextp105 nextplus -0 -> 1E-391 +nextp106 nextplus -0.00 -> 1E-391 +nextp107 nextplus -0E-300 -> 1E-391 +nextp108 nextplus -0E+300 -> 1E-391 +nextp109 nextplus -0E+30000 -> 1E-391 + +maxExponent: 999 +minexponent: -999 +precision: 9 +-- specials +nextp150 nextplus Inf -> Infinity +nextp151 nextplus -Inf -> -9.99999999E+999 +nextp152 nextplus NaN -> NaN +nextp153 nextplus sNaN -> NaN Invalid_operation +nextp154 nextplus NaN77 -> NaN77 +nextp155 nextplus sNaN88 -> NaN88 Invalid_operation +nextp156 nextplus -NaN -> -NaN +nextp157 nextplus -sNaN -> -NaN Invalid_operation +nextp158 nextplus -NaN77 -> -NaN77 +nextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +nextp170 nextplus 9.99999999E+999 -> Infinity +nextp171 nextplus 9.99999998E+999 -> 9.99999999E+999 +nextp172 nextplus 1E-999 -> 1.00000001E-999 +nextp173 nextplus 1.00000000E-999 -> 1.00000001E-999 +nextp174 nextplus 9E-1007 -> 1.0E-1006 +nextp175 nextplus 9.9E-1006 -> 1.00E-1005 +nextp176 nextplus 9.9999E-1003 -> 1.00000E-1002 +nextp177 nextplus 9.9999999E-1000 -> 1.00000000E-999 +nextp178 nextplus 9.9999998E-1000 -> 9.9999999E-1000 +nextp179 nextplus 9.9999997E-1000 -> 9.9999998E-1000 +nextp180 nextplus 0E-1007 -> 1E-1007 +nextp181 nextplus 1E-1007 -> 2E-1007 +nextp182 nextplus 2E-1007 -> 3E-1007 + +nextp183 nextplus -0E-1007 -> 1E-1007 +nextp184 nextplus -1E-1007 -> -0E-1007 +nextp185 nextplus -2E-1007 -> -1E-1007 +nextp186 nextplus -10E-1007 -> -9E-1007 +nextp187 nextplus -100E-1007 -> -9.9E-1006 +nextp188 nextplus -100000E-1007 -> -9.9999E-1003 +nextp189 nextplus -1.0000E-999 -> -9.9999999E-1000 +nextp190 nextplus -1.00000000E-999 -> -9.9999999E-1000 +nextp191 nextplus -1E-999 -> -9.9999999E-1000 +nextp192 nextplus -9.99999998E+999 -> -9.99999997E+999 +nextp193 nextplus -9.99999999E+999 -> -9.99999998E+999 + +-- Null tests +nextp900 nextplus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/nexttoward.decTest b/Lib/test/decimaltestdata/nexttoward.decTest index da26f651c81..562385a00f2 100644 --- a/Lib/test/decimaltestdata/nexttoward.decTest +++ b/Lib/test/decimaltestdata/nexttoward.decTest @@ -1,426 +1,426 @@ ------------------------------------------------------------------------- --- nexttoward.decTest -- decimal next toward rhs [754r nextafter] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- Sanity check with a scattering of numerics -nextt001 nexttoward 10 10 -> 10 -nextt002 nexttoward -10 -10 -> -10 -nextt003 nexttoward 1 10 -> 1.00000001 -nextt004 nexttoward 1 -10 -> 0.999999999 -nextt005 nexttoward -1 10 -> -0.999999999 -nextt006 nexttoward -1 -10 -> -1.00000001 -nextt007 nexttoward 0 10 -> 1E-391 Underflow Subnormal Inexact Rounded -nextt008 nexttoward 0 -10 -> -1E-391 Underflow Subnormal Inexact Rounded -nextt009 nexttoward 9.99999999E+384 +Infinity -> Infinity Overflow Inexact Rounded -nextt010 nexttoward -9.99999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded - -------- lhs=rhs --- finites -nextt101 nexttoward 7 7 -> 7 -nextt102 nexttoward -7 -7 -> -7 -nextt103 nexttoward 75 75 -> 75 -nextt104 nexttoward -75 -75 -> -75 -nextt105 nexttoward 7.50 7.5 -> 7.50 -nextt106 nexttoward -7.50 -7.50 -> -7.50 -nextt107 nexttoward 7.500 7.5000 -> 7.500 -nextt108 nexttoward -7.500 -7.5 -> -7.500 - --- zeros -nextt111 nexttoward 0 0 -> 0 -nextt112 nexttoward -0 -0 -> -0 -nextt113 nexttoward 0E+4 0 -> 0E+4 -nextt114 nexttoward -0E+4 -0 -> -0E+4 -nextt115 nexttoward 0.0000 0.00000 -> 0.0000 -nextt116 nexttoward -0.0000 -0.00 -> -0.0000 -nextt117 nexttoward 0E-141 0 -> 0E-141 -nextt118 nexttoward -0E-141 -000 -> -0E-141 - --- full coefficients, alternating bits -nextt121 nexttoward 268268268 268268268 -> 268268268 -nextt122 nexttoward -268268268 -268268268 -> -268268268 -nextt123 nexttoward 134134134 134134134 -> 134134134 -nextt124 nexttoward -134134134 -134134134 -> -134134134 - --- Nmax, Nmin, Ntiny -nextt131 nexttoward 9.99999999E+384 9.99999999E+384 -> 9.99999999E+384 -nextt132 nexttoward 1E-383 1E-383 -> 1E-383 -nextt133 nexttoward 1.00000000E-383 1.00000000E-383 -> 1.00000000E-383 -nextt134 nexttoward 1E-391 1E-391 -> 1E-391 - -nextt135 nexttoward -1E-391 -1E-391 -> -1E-391 -nextt136 nexttoward -1.00000000E-383 -1.00000000E-383 -> -1.00000000E-383 -nextt137 nexttoward -1E-383 -1E-383 -> -1E-383 -nextt138 nexttoward -9.99999999E+384 -9.99999999E+384 -> -9.99999999E+384 - -------- lhs 0.999999996 -nextt202 nexttoward 0.999999996 Infinity -> 0.999999997 -nextt203 nexttoward 0.999999997 Infinity -> 0.999999998 -nextt204 nexttoward 0.999999998 Infinity -> 0.999999999 -nextt205 nexttoward 0.999999999 Infinity -> 1.00000000 -nextt206 nexttoward 1.00000000 Infinity -> 1.00000001 -nextt207 nexttoward 1.0 Infinity -> 1.00000001 -nextt208 nexttoward 1 Infinity -> 1.00000001 -nextt209 nexttoward 1.00000001 Infinity -> 1.00000002 -nextt210 nexttoward 1.00000002 Infinity -> 1.00000003 -nextt211 nexttoward 1.00000003 Infinity -> 1.00000004 -nextt212 nexttoward 1.00000004 Infinity -> 1.00000005 -nextt213 nexttoward 1.00000005 Infinity -> 1.00000006 -nextt214 nexttoward 1.00000006 Infinity -> 1.00000007 -nextt215 nexttoward 1.00000007 Infinity -> 1.00000008 -nextt216 nexttoward 1.00000008 Infinity -> 1.00000009 -nextt217 nexttoward 1.00000009 Infinity -> 1.00000010 -nextt218 nexttoward 1.00000010 Infinity -> 1.00000011 -nextt219 nexttoward 1.00000011 Infinity -> 1.00000012 - -nextt221 nexttoward -0.999999995 Infinity -> -0.999999994 -nextt222 nexttoward -0.999999996 Infinity -> -0.999999995 -nextt223 nexttoward -0.999999997 Infinity -> -0.999999996 -nextt224 nexttoward -0.999999998 Infinity -> -0.999999997 -nextt225 nexttoward -0.999999999 Infinity -> -0.999999998 -nextt226 nexttoward -1.00000000 Infinity -> -0.999999999 -nextt227 nexttoward -1.0 Infinity -> -0.999999999 -nextt228 nexttoward -1 Infinity -> -0.999999999 -nextt229 nexttoward -1.00000001 Infinity -> -1.00000000 -nextt230 nexttoward -1.00000002 Infinity -> -1.00000001 -nextt231 nexttoward -1.00000003 Infinity -> -1.00000002 -nextt232 nexttoward -1.00000004 Infinity -> -1.00000003 -nextt233 nexttoward -1.00000005 Infinity -> -1.00000004 -nextt234 nexttoward -1.00000006 Infinity -> -1.00000005 -nextt235 nexttoward -1.00000007 Infinity -> -1.00000006 -nextt236 nexttoward -1.00000008 Infinity -> -1.00000007 -nextt237 nexttoward -1.00000009 Infinity -> -1.00000008 -nextt238 nexttoward -1.00000010 Infinity -> -1.00000009 -nextt239 nexttoward -1.00000011 Infinity -> -1.00000010 -nextt240 nexttoward -1.00000012 Infinity -> -1.00000011 - --- input operand is >precision -nextt241 nexttoward 1.00000010998 Infinity -> 1.00000011 -nextt242 nexttoward 1.00000010999 Infinity -> 1.00000011 -nextt243 nexttoward 1.00000011000 Infinity -> 1.00000012 -nextt244 nexttoward 1.00000011001 Infinity -> 1.00000012 -nextt245 nexttoward 1.00000011002 Infinity -> 1.00000012 -nextt246 nexttoward 1.00000011002 Infinity -> 1.00000012 -nextt247 nexttoward 1.00000011052 Infinity -> 1.00000012 -nextt248 nexttoward 1.00000011552 Infinity -> 1.00000012 -nextt249 nexttoward -1.00000010998 Infinity -> -1.00000010 -nextt250 nexttoward -1.00000010999 Infinity -> -1.00000010 -nextt251 nexttoward -1.00000011000 Infinity -> -1.00000010 -nextt252 nexttoward -1.00000011001 Infinity -> -1.00000011 -nextt253 nexttoward -1.00000011002 Infinity -> -1.00000011 -nextt254 nexttoward -1.00000011002 Infinity -> -1.00000011 -nextt255 nexttoward -1.00000011052 Infinity -> -1.00000011 -nextt256 nexttoward -1.00000011552 Infinity -> -1.00000011 --- ultra-tiny inputs -nextt260 nexttoward 1E-99999 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt261 nexttoward 1E-999999999 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt262 nexttoward 1E-391 Infinity -> 2E-391 Underflow Subnormal Inexact Rounded -nextt263 nexttoward -1E-99999 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt264 nexttoward -1E-999999999 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt265 nexttoward -1E-391 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped - --- Zeros -nextt300 nexttoward 0 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt301 nexttoward 0.00 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt302 nexttoward 0E-300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt303 nexttoward 0E+300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt304 nexttoward 0E+30000 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt305 nexttoward -0 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt306 nexttoward -0.00 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt307 nexttoward -0E-300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt308 nexttoward -0E+300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt309 nexttoward -0E+30000 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded - --- specials -nextt350 nexttoward Inf Infinity -> Infinity -nextt351 nexttoward -Inf Infinity -> -9.99999999E+384 -nextt352 nexttoward NaN Infinity -> NaN -nextt353 nexttoward sNaN Infinity -> NaN Invalid_operation -nextt354 nexttoward NaN77 Infinity -> NaN77 -nextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation -nextt356 nexttoward -NaN Infinity -> -NaN -nextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation -nextt358 nexttoward -NaN77 Infinity -> -NaN77 -nextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -maxExponent: 999 -minexponent: -999 -nextt370 nexttoward 9.99999999E+999 Infinity -> Infinity Overflow Inexact Rounded -nextt371 nexttoward 9.99999998E+999 Infinity -> 9.99999999E+999 -nextt372 nexttoward 1E-999 Infinity -> 1.00000001E-999 -nextt373 nexttoward 1.00000000E-999 Infinity -> 1.00000001E-999 -nextt374 nexttoward 0.999999999E-999 Infinity -> 1.00000000E-999 -nextt375 nexttoward 0.99999999E-999 Infinity -> 1.00000000E-999 -nextt376 nexttoward 9E-1007 Infinity -> 1.0E-1006 Underflow Subnormal Inexact Rounded -nextt377 nexttoward 9.9E-1006 Infinity -> 1.00E-1005 Underflow Subnormal Inexact Rounded -nextt378 nexttoward 9.9999E-1003 Infinity -> 1.00000E-1002 Underflow Subnormal Inexact Rounded -nextt379 nexttoward 9.9999998E-1000 Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt380 nexttoward 9.9999997E-1000 Infinity -> 9.9999998E-1000 Underflow Subnormal Inexact Rounded -nextt381 nexttoward 0E-1007 Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded -nextt382 nexttoward 1E-1007 Infinity -> 2E-1007 Underflow Subnormal Inexact Rounded -nextt383 nexttoward 2E-1007 Infinity -> 3E-1007 Underflow Subnormal Inexact Rounded - -nextt385 nexttoward -0E-1007 Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded -nextt386 nexttoward -1E-1007 Infinity -> -0E-1007 Underflow Subnormal Inexact Rounded Clamped -nextt387 nexttoward -2E-1007 Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded -nextt388 nexttoward -10E-1007 Infinity -> -9E-1007 Underflow Subnormal Inexact Rounded -nextt389 nexttoward -100E-1007 Infinity -> -9.9E-1006 Underflow Subnormal Inexact Rounded -nextt390 nexttoward -100000E-1007 Infinity -> -9.9999E-1003 Underflow Subnormal Inexact Rounded -nextt391 nexttoward -1.0000E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt392 nexttoward -1.00000000E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt393 nexttoward -1E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt394 nexttoward -9.99999998E+999 Infinity -> -9.99999997E+999 -nextt395 nexttoward -9.99999999E+999 Infinity -> -9.99999998E+999 - -------- lhs>rhs -maxExponent: 384 -minexponent: -383 -nextt401 nexttoward 0.999999995 -Infinity -> 0.999999994 -nextt402 nexttoward 0.999999996 -Infinity -> 0.999999995 -nextt403 nexttoward 0.999999997 -Infinity -> 0.999999996 -nextt404 nexttoward 0.999999998 -Infinity -> 0.999999997 -nextt405 nexttoward 0.999999999 -Infinity -> 0.999999998 -nextt406 nexttoward 1.00000000 -Infinity -> 0.999999999 -nextt407 nexttoward 1.0 -Infinity -> 0.999999999 -nextt408 nexttoward 1 -Infinity -> 0.999999999 -nextt409 nexttoward 1.00000001 -Infinity -> 1.00000000 -nextt410 nexttoward 1.00000002 -Infinity -> 1.00000001 -nextt411 nexttoward 1.00000003 -Infinity -> 1.00000002 -nextt412 nexttoward 1.00000004 -Infinity -> 1.00000003 -nextt413 nexttoward 1.00000005 -Infinity -> 1.00000004 -nextt414 nexttoward 1.00000006 -Infinity -> 1.00000005 -nextt415 nexttoward 1.00000007 -Infinity -> 1.00000006 -nextt416 nexttoward 1.00000008 -Infinity -> 1.00000007 -nextt417 nexttoward 1.00000009 -Infinity -> 1.00000008 -nextt418 nexttoward 1.00000010 -Infinity -> 1.00000009 -nextt419 nexttoward 1.00000011 -Infinity -> 1.00000010 -nextt420 nexttoward 1.00000012 -Infinity -> 1.00000011 - -nextt421 nexttoward -0.999999995 -Infinity -> -0.999999996 -nextt422 nexttoward -0.999999996 -Infinity -> -0.999999997 -nextt423 nexttoward -0.999999997 -Infinity -> -0.999999998 -nextt424 nexttoward -0.999999998 -Infinity -> -0.999999999 -nextt425 nexttoward -0.999999999 -Infinity -> -1.00000000 -nextt426 nexttoward -1.00000000 -Infinity -> -1.00000001 -nextt427 nexttoward -1.0 -Infinity -> -1.00000001 -nextt428 nexttoward -1 -Infinity -> -1.00000001 -nextt429 nexttoward -1.00000001 -Infinity -> -1.00000002 -nextt430 nexttoward -1.00000002 -Infinity -> -1.00000003 -nextt431 nexttoward -1.00000003 -Infinity -> -1.00000004 -nextt432 nexttoward -1.00000004 -Infinity -> -1.00000005 -nextt433 nexttoward -1.00000005 -Infinity -> -1.00000006 -nextt434 nexttoward -1.00000006 -Infinity -> -1.00000007 -nextt435 nexttoward -1.00000007 -Infinity -> -1.00000008 -nextt436 nexttoward -1.00000008 -Infinity -> -1.00000009 -nextt437 nexttoward -1.00000009 -Infinity -> -1.00000010 -nextt438 nexttoward -1.00000010 -Infinity -> -1.00000011 -nextt439 nexttoward -1.00000011 -Infinity -> -1.00000012 - --- input operand is >precision -nextt441 nexttoward 1.00000010998 -Infinity -> 1.00000010 -nextt442 nexttoward 1.00000010999 -Infinity -> 1.00000010 -nextt443 nexttoward 1.00000011000 -Infinity -> 1.00000010 -nextt444 nexttoward 1.00000011001 -Infinity -> 1.00000011 -nextt445 nexttoward 1.00000011002 -Infinity -> 1.00000011 -nextt446 nexttoward 1.00000011002 -Infinity -> 1.00000011 -nextt447 nexttoward 1.00000011052 -Infinity -> 1.00000011 -nextt448 nexttoward 1.00000011552 -Infinity -> 1.00000011 -nextt449 nexttoward -1.00000010998 -Infinity -> -1.00000011 -nextt450 nexttoward -1.00000010999 -Infinity -> -1.00000011 -nextt451 nexttoward -1.00000011000 -Infinity -> -1.00000012 -nextt452 nexttoward -1.00000011001 -Infinity -> -1.00000012 -nextt453 nexttoward -1.00000011002 -Infinity -> -1.00000012 -nextt454 nexttoward -1.00000011002 -Infinity -> -1.00000012 -nextt455 nexttoward -1.00000011052 -Infinity -> -1.00000012 -nextt456 nexttoward -1.00000011552 -Infinity -> -1.00000012 --- ultra-tiny inputs -nextt460 nexttoward 1E-99999 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt461 nexttoward 1E-999999999 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt462 nexttoward 1E-391 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt463 nexttoward -1E-99999 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt464 nexttoward -1E-999999999 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt465 nexttoward -1E-391 -Infinity -> -2E-391 Underflow Subnormal Inexact Rounded - --- Zeros -nextt500 nexttoward -0 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt501 nexttoward 0 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt502 nexttoward 0.00 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt503 nexttoward -0.00 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt504 nexttoward 0E-300 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt505 nexttoward 0E+300 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt506 nexttoward 0E+30000 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt507 nexttoward -0E+30000 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt508 nexttoward 0.00 -0.0000 -> -0.00 - --- specials -nextt550 nexttoward Inf -Infinity -> 9.99999999E+384 -nextt551 nexttoward -Inf -Infinity -> -Infinity -nextt552 nexttoward NaN -Infinity -> NaN -nextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation -nextt554 nexttoward NaN77 -Infinity -> NaN77 -nextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation -nextt556 nexttoward -NaN -Infinity -> -NaN -nextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation -nextt558 nexttoward -NaN77 -Infinity -> -NaN77 -nextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -maxExponent: 999 -minexponent: -999 -nextt570 nexttoward 9.99999999E+999 -Infinity -> 9.99999998E+999 -nextt571 nexttoward 9.99999998E+999 -Infinity -> 9.99999997E+999 -nextt572 nexttoward 1E-999 -Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt573 nexttoward 1.00000000E-999 -Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt574 nexttoward 9E-1007 -Infinity -> 8E-1007 Underflow Subnormal Inexact Rounded -nextt575 nexttoward 9.9E-1006 -Infinity -> 9.8E-1006 Underflow Subnormal Inexact Rounded -nextt576 nexttoward 9.9999E-1003 -Infinity -> 9.9998E-1003 Underflow Subnormal Inexact Rounded -nextt577 nexttoward 9.9999999E-1000 -Infinity -> 9.9999998E-1000 Underflow Subnormal Inexact Rounded -nextt578 nexttoward 9.9999998E-1000 -Infinity -> 9.9999997E-1000 Underflow Subnormal Inexact Rounded -nextt579 nexttoward 9.9999997E-1000 -Infinity -> 9.9999996E-1000 Underflow Subnormal Inexact Rounded -nextt580 nexttoward 0E-1007 -Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded -nextt581 nexttoward 1E-1007 -Infinity -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped -nextt582 nexttoward 2E-1007 -Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded - -nextt583 nexttoward -0E-1007 -Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded -nextt584 nexttoward -1E-1007 -Infinity -> -2E-1007 Underflow Subnormal Inexact Rounded -nextt585 nexttoward -2E-1007 -Infinity -> -3E-1007 Underflow Subnormal Inexact Rounded -nextt586 nexttoward -10E-1007 -Infinity -> -1.1E-1006 Underflow Subnormal Inexact Rounded -nextt587 nexttoward -100E-1007 -Infinity -> -1.01E-1005 Underflow Subnormal Inexact Rounded -nextt588 nexttoward -100000E-1007 -Infinity -> -1.00001E-1002 Underflow Subnormal Inexact Rounded -nextt589 nexttoward -1.0000E-999 -Infinity -> -1.00000001E-999 -nextt590 nexttoward -1.00000000E-999 -Infinity -> -1.00000001E-999 -nextt591 nexttoward -1E-999 -Infinity -> -1.00000001E-999 -nextt592 nexttoward -9.99999998E+999 -Infinity -> -9.99999999E+999 -nextt593 nexttoward -9.99999999E+999 -Infinity -> -Infinity Overflow Inexact Rounded - - - - -------- Specials -maxExponent: 384 -minexponent: -383 -nextt780 nexttoward -Inf -Inf -> -Infinity -nextt781 nexttoward -Inf -1000 -> -9.99999999E+384 -nextt782 nexttoward -Inf -1 -> -9.99999999E+384 -nextt783 nexttoward -Inf -0 -> -9.99999999E+384 -nextt784 nexttoward -Inf 0 -> -9.99999999E+384 -nextt785 nexttoward -Inf 1 -> -9.99999999E+384 -nextt786 nexttoward -Inf 1000 -> -9.99999999E+384 -nextt787 nexttoward -1000 -Inf -> -1000.00001 -nextt788 nexttoward -Inf -Inf -> -Infinity -nextt789 nexttoward -1 -Inf -> -1.00000001 -nextt790 nexttoward -0 -Inf -> -1E-391 Underflow Subnormal Inexact Rounded -nextt791 nexttoward 0 -Inf -> -1E-391 Underflow Subnormal Inexact Rounded -nextt792 nexttoward 1 -Inf -> 0.999999999 -nextt793 nexttoward 1000 -Inf -> 999.999999 -nextt794 nexttoward Inf -Inf -> 9.99999999E+384 - -nextt800 nexttoward Inf -Inf -> 9.99999999E+384 -nextt801 nexttoward Inf -1000 -> 9.99999999E+384 -nextt802 nexttoward Inf -1 -> 9.99999999E+384 -nextt803 nexttoward Inf -0 -> 9.99999999E+384 -nextt804 nexttoward Inf 0 -> 9.99999999E+384 -nextt805 nexttoward Inf 1 -> 9.99999999E+384 -nextt806 nexttoward Inf 1000 -> 9.99999999E+384 -nextt807 nexttoward Inf Inf -> Infinity -nextt808 nexttoward -1000 Inf -> -999.999999 -nextt809 nexttoward -Inf Inf -> -9.99999999E+384 -nextt810 nexttoward -1 Inf -> -0.999999999 -nextt811 nexttoward -0 Inf -> 1E-391 Underflow Subnormal Inexact Rounded -nextt812 nexttoward 0 Inf -> 1E-391 Underflow Subnormal Inexact Rounded -nextt813 nexttoward 1 Inf -> 1.00000001 -nextt814 nexttoward 1000 Inf -> 1000.00001 -nextt815 nexttoward Inf Inf -> Infinity - -nextt821 nexttoward NaN -Inf -> NaN -nextt822 nexttoward NaN -1000 -> NaN -nextt823 nexttoward NaN -1 -> NaN -nextt824 nexttoward NaN -0 -> NaN -nextt825 nexttoward NaN 0 -> NaN -nextt826 nexttoward NaN 1 -> NaN -nextt827 nexttoward NaN 1000 -> NaN -nextt828 nexttoward NaN Inf -> NaN -nextt829 nexttoward NaN NaN -> NaN -nextt830 nexttoward -Inf NaN -> NaN -nextt831 nexttoward -1000 NaN -> NaN -nextt832 nexttoward -1 NaN -> NaN -nextt833 nexttoward -0 NaN -> NaN -nextt834 nexttoward 0 NaN -> NaN -nextt835 nexttoward 1 NaN -> NaN -nextt836 nexttoward 1000 NaN -> NaN -nextt837 nexttoward Inf NaN -> NaN - -nextt841 nexttoward sNaN -Inf -> NaN Invalid_operation -nextt842 nexttoward sNaN -1000 -> NaN Invalid_operation -nextt843 nexttoward sNaN -1 -> NaN Invalid_operation -nextt844 nexttoward sNaN -0 -> NaN Invalid_operation -nextt845 nexttoward sNaN 0 -> NaN Invalid_operation -nextt846 nexttoward sNaN 1 -> NaN Invalid_operation -nextt847 nexttoward sNaN 1000 -> NaN Invalid_operation -nextt848 nexttoward sNaN NaN -> NaN Invalid_operation -nextt849 nexttoward sNaN sNaN -> NaN Invalid_operation -nextt850 nexttoward NaN sNaN -> NaN Invalid_operation -nextt851 nexttoward -Inf sNaN -> NaN Invalid_operation -nextt852 nexttoward -1000 sNaN -> NaN Invalid_operation -nextt853 nexttoward -1 sNaN -> NaN Invalid_operation -nextt854 nexttoward -0 sNaN -> NaN Invalid_operation -nextt855 nexttoward 0 sNaN -> NaN Invalid_operation -nextt856 nexttoward 1 sNaN -> NaN Invalid_operation -nextt857 nexttoward 1000 sNaN -> NaN Invalid_operation -nextt858 nexttoward Inf sNaN -> NaN Invalid_operation -nextt859 nexttoward NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -nextt861 nexttoward NaN1 -Inf -> NaN1 -nextt862 nexttoward +NaN2 -1000 -> NaN2 -nextt863 nexttoward NaN3 1000 -> NaN3 -nextt864 nexttoward NaN4 Inf -> NaN4 -nextt865 nexttoward NaN5 +NaN6 -> NaN5 -nextt866 nexttoward -Inf NaN7 -> NaN7 -nextt867 nexttoward -1000 NaN8 -> NaN8 -nextt868 nexttoward 1000 NaN9 -> NaN9 -nextt869 nexttoward Inf +NaN10 -> NaN10 -nextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation -nextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation -nextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation -nextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation -nextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation -nextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation -nextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation -nextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation -nextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation -nextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation -nextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation -nextt882 nexttoward -NaN26 NaN28 -> -NaN26 -nextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation -nextt884 nexttoward 1000 -NaN30 -> -NaN30 -nextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Null tests -nextt900 nexttoward 1 # -> NaN Invalid_operation -nextt901 nexttoward # 1 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- nexttoward.decTest -- decimal next toward rhs [754r nextafter] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- Sanity check with a scattering of numerics +nextt001 nexttoward 10 10 -> 10 +nextt002 nexttoward -10 -10 -> -10 +nextt003 nexttoward 1 10 -> 1.00000001 +nextt004 nexttoward 1 -10 -> 0.999999999 +nextt005 nexttoward -1 10 -> -0.999999999 +nextt006 nexttoward -1 -10 -> -1.00000001 +nextt007 nexttoward 0 10 -> 1E-391 Underflow Subnormal Inexact Rounded +nextt008 nexttoward 0 -10 -> -1E-391 Underflow Subnormal Inexact Rounded +nextt009 nexttoward 9.99999999E+384 +Infinity -> Infinity Overflow Inexact Rounded +nextt010 nexttoward -9.99999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded + +------- lhs=rhs +-- finites +nextt101 nexttoward 7 7 -> 7 +nextt102 nexttoward -7 -7 -> -7 +nextt103 nexttoward 75 75 -> 75 +nextt104 nexttoward -75 -75 -> -75 +nextt105 nexttoward 7.50 7.5 -> 7.50 +nextt106 nexttoward -7.50 -7.50 -> -7.50 +nextt107 nexttoward 7.500 7.5000 -> 7.500 +nextt108 nexttoward -7.500 -7.5 -> -7.500 + +-- zeros +nextt111 nexttoward 0 0 -> 0 +nextt112 nexttoward -0 -0 -> -0 +nextt113 nexttoward 0E+4 0 -> 0E+4 +nextt114 nexttoward -0E+4 -0 -> -0E+4 +nextt115 nexttoward 0.0000 0.00000 -> 0.0000 +nextt116 nexttoward -0.0000 -0.00 -> -0.0000 +nextt117 nexttoward 0E-141 0 -> 0E-141 +nextt118 nexttoward -0E-141 -000 -> -0E-141 + +-- full coefficients, alternating bits +nextt121 nexttoward 268268268 268268268 -> 268268268 +nextt122 nexttoward -268268268 -268268268 -> -268268268 +nextt123 nexttoward 134134134 134134134 -> 134134134 +nextt124 nexttoward -134134134 -134134134 -> -134134134 + +-- Nmax, Nmin, Ntiny +nextt131 nexttoward 9.99999999E+384 9.99999999E+384 -> 9.99999999E+384 +nextt132 nexttoward 1E-383 1E-383 -> 1E-383 +nextt133 nexttoward 1.00000000E-383 1.00000000E-383 -> 1.00000000E-383 +nextt134 nexttoward 1E-391 1E-391 -> 1E-391 + +nextt135 nexttoward -1E-391 -1E-391 -> -1E-391 +nextt136 nexttoward -1.00000000E-383 -1.00000000E-383 -> -1.00000000E-383 +nextt137 nexttoward -1E-383 -1E-383 -> -1E-383 +nextt138 nexttoward -9.99999999E+384 -9.99999999E+384 -> -9.99999999E+384 + +------- lhs 0.999999996 +nextt202 nexttoward 0.999999996 Infinity -> 0.999999997 +nextt203 nexttoward 0.999999997 Infinity -> 0.999999998 +nextt204 nexttoward 0.999999998 Infinity -> 0.999999999 +nextt205 nexttoward 0.999999999 Infinity -> 1.00000000 +nextt206 nexttoward 1.00000000 Infinity -> 1.00000001 +nextt207 nexttoward 1.0 Infinity -> 1.00000001 +nextt208 nexttoward 1 Infinity -> 1.00000001 +nextt209 nexttoward 1.00000001 Infinity -> 1.00000002 +nextt210 nexttoward 1.00000002 Infinity -> 1.00000003 +nextt211 nexttoward 1.00000003 Infinity -> 1.00000004 +nextt212 nexttoward 1.00000004 Infinity -> 1.00000005 +nextt213 nexttoward 1.00000005 Infinity -> 1.00000006 +nextt214 nexttoward 1.00000006 Infinity -> 1.00000007 +nextt215 nexttoward 1.00000007 Infinity -> 1.00000008 +nextt216 nexttoward 1.00000008 Infinity -> 1.00000009 +nextt217 nexttoward 1.00000009 Infinity -> 1.00000010 +nextt218 nexttoward 1.00000010 Infinity -> 1.00000011 +nextt219 nexttoward 1.00000011 Infinity -> 1.00000012 + +nextt221 nexttoward -0.999999995 Infinity -> -0.999999994 +nextt222 nexttoward -0.999999996 Infinity -> -0.999999995 +nextt223 nexttoward -0.999999997 Infinity -> -0.999999996 +nextt224 nexttoward -0.999999998 Infinity -> -0.999999997 +nextt225 nexttoward -0.999999999 Infinity -> -0.999999998 +nextt226 nexttoward -1.00000000 Infinity -> -0.999999999 +nextt227 nexttoward -1.0 Infinity -> -0.999999999 +nextt228 nexttoward -1 Infinity -> -0.999999999 +nextt229 nexttoward -1.00000001 Infinity -> -1.00000000 +nextt230 nexttoward -1.00000002 Infinity -> -1.00000001 +nextt231 nexttoward -1.00000003 Infinity -> -1.00000002 +nextt232 nexttoward -1.00000004 Infinity -> -1.00000003 +nextt233 nexttoward -1.00000005 Infinity -> -1.00000004 +nextt234 nexttoward -1.00000006 Infinity -> -1.00000005 +nextt235 nexttoward -1.00000007 Infinity -> -1.00000006 +nextt236 nexttoward -1.00000008 Infinity -> -1.00000007 +nextt237 nexttoward -1.00000009 Infinity -> -1.00000008 +nextt238 nexttoward -1.00000010 Infinity -> -1.00000009 +nextt239 nexttoward -1.00000011 Infinity -> -1.00000010 +nextt240 nexttoward -1.00000012 Infinity -> -1.00000011 + +-- input operand is >precision +nextt241 nexttoward 1.00000010998 Infinity -> 1.00000011 +nextt242 nexttoward 1.00000010999 Infinity -> 1.00000011 +nextt243 nexttoward 1.00000011000 Infinity -> 1.00000012 +nextt244 nexttoward 1.00000011001 Infinity -> 1.00000012 +nextt245 nexttoward 1.00000011002 Infinity -> 1.00000012 +nextt246 nexttoward 1.00000011002 Infinity -> 1.00000012 +nextt247 nexttoward 1.00000011052 Infinity -> 1.00000012 +nextt248 nexttoward 1.00000011552 Infinity -> 1.00000012 +nextt249 nexttoward -1.00000010998 Infinity -> -1.00000010 +nextt250 nexttoward -1.00000010999 Infinity -> -1.00000010 +nextt251 nexttoward -1.00000011000 Infinity -> -1.00000010 +nextt252 nexttoward -1.00000011001 Infinity -> -1.00000011 +nextt253 nexttoward -1.00000011002 Infinity -> -1.00000011 +nextt254 nexttoward -1.00000011002 Infinity -> -1.00000011 +nextt255 nexttoward -1.00000011052 Infinity -> -1.00000011 +nextt256 nexttoward -1.00000011552 Infinity -> -1.00000011 +-- ultra-tiny inputs +nextt260 nexttoward 1E-99999 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt261 nexttoward 1E-999999999 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt262 nexttoward 1E-391 Infinity -> 2E-391 Underflow Subnormal Inexact Rounded +nextt263 nexttoward -1E-99999 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt264 nexttoward -1E-999999999 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt265 nexttoward -1E-391 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped + +-- Zeros +nextt300 nexttoward 0 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt301 nexttoward 0.00 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt302 nexttoward 0E-300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt303 nexttoward 0E+300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt304 nexttoward 0E+30000 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt305 nexttoward -0 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt306 nexttoward -0.00 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt307 nexttoward -0E-300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt308 nexttoward -0E+300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt309 nexttoward -0E+30000 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded + +-- specials +nextt350 nexttoward Inf Infinity -> Infinity +nextt351 nexttoward -Inf Infinity -> -9.99999999E+384 +nextt352 nexttoward NaN Infinity -> NaN +nextt353 nexttoward sNaN Infinity -> NaN Invalid_operation +nextt354 nexttoward NaN77 Infinity -> NaN77 +nextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation +nextt356 nexttoward -NaN Infinity -> -NaN +nextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation +nextt358 nexttoward -NaN77 Infinity -> -NaN77 +nextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +maxExponent: 999 +minexponent: -999 +nextt370 nexttoward 9.99999999E+999 Infinity -> Infinity Overflow Inexact Rounded +nextt371 nexttoward 9.99999998E+999 Infinity -> 9.99999999E+999 +nextt372 nexttoward 1E-999 Infinity -> 1.00000001E-999 +nextt373 nexttoward 1.00000000E-999 Infinity -> 1.00000001E-999 +nextt374 nexttoward 0.999999999E-999 Infinity -> 1.00000000E-999 +nextt375 nexttoward 0.99999999E-999 Infinity -> 1.00000000E-999 +nextt376 nexttoward 9E-1007 Infinity -> 1.0E-1006 Underflow Subnormal Inexact Rounded +nextt377 nexttoward 9.9E-1006 Infinity -> 1.00E-1005 Underflow Subnormal Inexact Rounded +nextt378 nexttoward 9.9999E-1003 Infinity -> 1.00000E-1002 Underflow Subnormal Inexact Rounded +nextt379 nexttoward 9.9999998E-1000 Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt380 nexttoward 9.9999997E-1000 Infinity -> 9.9999998E-1000 Underflow Subnormal Inexact Rounded +nextt381 nexttoward 0E-1007 Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded +nextt382 nexttoward 1E-1007 Infinity -> 2E-1007 Underflow Subnormal Inexact Rounded +nextt383 nexttoward 2E-1007 Infinity -> 3E-1007 Underflow Subnormal Inexact Rounded + +nextt385 nexttoward -0E-1007 Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded +nextt386 nexttoward -1E-1007 Infinity -> -0E-1007 Underflow Subnormal Inexact Rounded Clamped +nextt387 nexttoward -2E-1007 Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded +nextt388 nexttoward -10E-1007 Infinity -> -9E-1007 Underflow Subnormal Inexact Rounded +nextt389 nexttoward -100E-1007 Infinity -> -9.9E-1006 Underflow Subnormal Inexact Rounded +nextt390 nexttoward -100000E-1007 Infinity -> -9.9999E-1003 Underflow Subnormal Inexact Rounded +nextt391 nexttoward -1.0000E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt392 nexttoward -1.00000000E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt393 nexttoward -1E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt394 nexttoward -9.99999998E+999 Infinity -> -9.99999997E+999 +nextt395 nexttoward -9.99999999E+999 Infinity -> -9.99999998E+999 + +------- lhs>rhs +maxExponent: 384 +minexponent: -383 +nextt401 nexttoward 0.999999995 -Infinity -> 0.999999994 +nextt402 nexttoward 0.999999996 -Infinity -> 0.999999995 +nextt403 nexttoward 0.999999997 -Infinity -> 0.999999996 +nextt404 nexttoward 0.999999998 -Infinity -> 0.999999997 +nextt405 nexttoward 0.999999999 -Infinity -> 0.999999998 +nextt406 nexttoward 1.00000000 -Infinity -> 0.999999999 +nextt407 nexttoward 1.0 -Infinity -> 0.999999999 +nextt408 nexttoward 1 -Infinity -> 0.999999999 +nextt409 nexttoward 1.00000001 -Infinity -> 1.00000000 +nextt410 nexttoward 1.00000002 -Infinity -> 1.00000001 +nextt411 nexttoward 1.00000003 -Infinity -> 1.00000002 +nextt412 nexttoward 1.00000004 -Infinity -> 1.00000003 +nextt413 nexttoward 1.00000005 -Infinity -> 1.00000004 +nextt414 nexttoward 1.00000006 -Infinity -> 1.00000005 +nextt415 nexttoward 1.00000007 -Infinity -> 1.00000006 +nextt416 nexttoward 1.00000008 -Infinity -> 1.00000007 +nextt417 nexttoward 1.00000009 -Infinity -> 1.00000008 +nextt418 nexttoward 1.00000010 -Infinity -> 1.00000009 +nextt419 nexttoward 1.00000011 -Infinity -> 1.00000010 +nextt420 nexttoward 1.00000012 -Infinity -> 1.00000011 + +nextt421 nexttoward -0.999999995 -Infinity -> -0.999999996 +nextt422 nexttoward -0.999999996 -Infinity -> -0.999999997 +nextt423 nexttoward -0.999999997 -Infinity -> -0.999999998 +nextt424 nexttoward -0.999999998 -Infinity -> -0.999999999 +nextt425 nexttoward -0.999999999 -Infinity -> -1.00000000 +nextt426 nexttoward -1.00000000 -Infinity -> -1.00000001 +nextt427 nexttoward -1.0 -Infinity -> -1.00000001 +nextt428 nexttoward -1 -Infinity -> -1.00000001 +nextt429 nexttoward -1.00000001 -Infinity -> -1.00000002 +nextt430 nexttoward -1.00000002 -Infinity -> -1.00000003 +nextt431 nexttoward -1.00000003 -Infinity -> -1.00000004 +nextt432 nexttoward -1.00000004 -Infinity -> -1.00000005 +nextt433 nexttoward -1.00000005 -Infinity -> -1.00000006 +nextt434 nexttoward -1.00000006 -Infinity -> -1.00000007 +nextt435 nexttoward -1.00000007 -Infinity -> -1.00000008 +nextt436 nexttoward -1.00000008 -Infinity -> -1.00000009 +nextt437 nexttoward -1.00000009 -Infinity -> -1.00000010 +nextt438 nexttoward -1.00000010 -Infinity -> -1.00000011 +nextt439 nexttoward -1.00000011 -Infinity -> -1.00000012 + +-- input operand is >precision +nextt441 nexttoward 1.00000010998 -Infinity -> 1.00000010 +nextt442 nexttoward 1.00000010999 -Infinity -> 1.00000010 +nextt443 nexttoward 1.00000011000 -Infinity -> 1.00000010 +nextt444 nexttoward 1.00000011001 -Infinity -> 1.00000011 +nextt445 nexttoward 1.00000011002 -Infinity -> 1.00000011 +nextt446 nexttoward 1.00000011002 -Infinity -> 1.00000011 +nextt447 nexttoward 1.00000011052 -Infinity -> 1.00000011 +nextt448 nexttoward 1.00000011552 -Infinity -> 1.00000011 +nextt449 nexttoward -1.00000010998 -Infinity -> -1.00000011 +nextt450 nexttoward -1.00000010999 -Infinity -> -1.00000011 +nextt451 nexttoward -1.00000011000 -Infinity -> -1.00000012 +nextt452 nexttoward -1.00000011001 -Infinity -> -1.00000012 +nextt453 nexttoward -1.00000011002 -Infinity -> -1.00000012 +nextt454 nexttoward -1.00000011002 -Infinity -> -1.00000012 +nextt455 nexttoward -1.00000011052 -Infinity -> -1.00000012 +nextt456 nexttoward -1.00000011552 -Infinity -> -1.00000012 +-- ultra-tiny inputs +nextt460 nexttoward 1E-99999 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt461 nexttoward 1E-999999999 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt462 nexttoward 1E-391 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt463 nexttoward -1E-99999 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt464 nexttoward -1E-999999999 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt465 nexttoward -1E-391 -Infinity -> -2E-391 Underflow Subnormal Inexact Rounded + +-- Zeros +nextt500 nexttoward -0 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt501 nexttoward 0 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt502 nexttoward 0.00 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt503 nexttoward -0.00 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt504 nexttoward 0E-300 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt505 nexttoward 0E+300 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt506 nexttoward 0E+30000 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt507 nexttoward -0E+30000 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt508 nexttoward 0.00 -0.0000 -> -0.00 + +-- specials +nextt550 nexttoward Inf -Infinity -> 9.99999999E+384 +nextt551 nexttoward -Inf -Infinity -> -Infinity +nextt552 nexttoward NaN -Infinity -> NaN +nextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation +nextt554 nexttoward NaN77 -Infinity -> NaN77 +nextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation +nextt556 nexttoward -NaN -Infinity -> -NaN +nextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation +nextt558 nexttoward -NaN77 -Infinity -> -NaN77 +nextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +maxExponent: 999 +minexponent: -999 +nextt570 nexttoward 9.99999999E+999 -Infinity -> 9.99999998E+999 +nextt571 nexttoward 9.99999998E+999 -Infinity -> 9.99999997E+999 +nextt572 nexttoward 1E-999 -Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt573 nexttoward 1.00000000E-999 -Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt574 nexttoward 9E-1007 -Infinity -> 8E-1007 Underflow Subnormal Inexact Rounded +nextt575 nexttoward 9.9E-1006 -Infinity -> 9.8E-1006 Underflow Subnormal Inexact Rounded +nextt576 nexttoward 9.9999E-1003 -Infinity -> 9.9998E-1003 Underflow Subnormal Inexact Rounded +nextt577 nexttoward 9.9999999E-1000 -Infinity -> 9.9999998E-1000 Underflow Subnormal Inexact Rounded +nextt578 nexttoward 9.9999998E-1000 -Infinity -> 9.9999997E-1000 Underflow Subnormal Inexact Rounded +nextt579 nexttoward 9.9999997E-1000 -Infinity -> 9.9999996E-1000 Underflow Subnormal Inexact Rounded +nextt580 nexttoward 0E-1007 -Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded +nextt581 nexttoward 1E-1007 -Infinity -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped +nextt582 nexttoward 2E-1007 -Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded + +nextt583 nexttoward -0E-1007 -Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded +nextt584 nexttoward -1E-1007 -Infinity -> -2E-1007 Underflow Subnormal Inexact Rounded +nextt585 nexttoward -2E-1007 -Infinity -> -3E-1007 Underflow Subnormal Inexact Rounded +nextt586 nexttoward -10E-1007 -Infinity -> -1.1E-1006 Underflow Subnormal Inexact Rounded +nextt587 nexttoward -100E-1007 -Infinity -> -1.01E-1005 Underflow Subnormal Inexact Rounded +nextt588 nexttoward -100000E-1007 -Infinity -> -1.00001E-1002 Underflow Subnormal Inexact Rounded +nextt589 nexttoward -1.0000E-999 -Infinity -> -1.00000001E-999 +nextt590 nexttoward -1.00000000E-999 -Infinity -> -1.00000001E-999 +nextt591 nexttoward -1E-999 -Infinity -> -1.00000001E-999 +nextt592 nexttoward -9.99999998E+999 -Infinity -> -9.99999999E+999 +nextt593 nexttoward -9.99999999E+999 -Infinity -> -Infinity Overflow Inexact Rounded + + + + +------- Specials +maxExponent: 384 +minexponent: -383 +nextt780 nexttoward -Inf -Inf -> -Infinity +nextt781 nexttoward -Inf -1000 -> -9.99999999E+384 +nextt782 nexttoward -Inf -1 -> -9.99999999E+384 +nextt783 nexttoward -Inf -0 -> -9.99999999E+384 +nextt784 nexttoward -Inf 0 -> -9.99999999E+384 +nextt785 nexttoward -Inf 1 -> -9.99999999E+384 +nextt786 nexttoward -Inf 1000 -> -9.99999999E+384 +nextt787 nexttoward -1000 -Inf -> -1000.00001 +nextt788 nexttoward -Inf -Inf -> -Infinity +nextt789 nexttoward -1 -Inf -> -1.00000001 +nextt790 nexttoward -0 -Inf -> -1E-391 Underflow Subnormal Inexact Rounded +nextt791 nexttoward 0 -Inf -> -1E-391 Underflow Subnormal Inexact Rounded +nextt792 nexttoward 1 -Inf -> 0.999999999 +nextt793 nexttoward 1000 -Inf -> 999.999999 +nextt794 nexttoward Inf -Inf -> 9.99999999E+384 + +nextt800 nexttoward Inf -Inf -> 9.99999999E+384 +nextt801 nexttoward Inf -1000 -> 9.99999999E+384 +nextt802 nexttoward Inf -1 -> 9.99999999E+384 +nextt803 nexttoward Inf -0 -> 9.99999999E+384 +nextt804 nexttoward Inf 0 -> 9.99999999E+384 +nextt805 nexttoward Inf 1 -> 9.99999999E+384 +nextt806 nexttoward Inf 1000 -> 9.99999999E+384 +nextt807 nexttoward Inf Inf -> Infinity +nextt808 nexttoward -1000 Inf -> -999.999999 +nextt809 nexttoward -Inf Inf -> -9.99999999E+384 +nextt810 nexttoward -1 Inf -> -0.999999999 +nextt811 nexttoward -0 Inf -> 1E-391 Underflow Subnormal Inexact Rounded +nextt812 nexttoward 0 Inf -> 1E-391 Underflow Subnormal Inexact Rounded +nextt813 nexttoward 1 Inf -> 1.00000001 +nextt814 nexttoward 1000 Inf -> 1000.00001 +nextt815 nexttoward Inf Inf -> Infinity + +nextt821 nexttoward NaN -Inf -> NaN +nextt822 nexttoward NaN -1000 -> NaN +nextt823 nexttoward NaN -1 -> NaN +nextt824 nexttoward NaN -0 -> NaN +nextt825 nexttoward NaN 0 -> NaN +nextt826 nexttoward NaN 1 -> NaN +nextt827 nexttoward NaN 1000 -> NaN +nextt828 nexttoward NaN Inf -> NaN +nextt829 nexttoward NaN NaN -> NaN +nextt830 nexttoward -Inf NaN -> NaN +nextt831 nexttoward -1000 NaN -> NaN +nextt832 nexttoward -1 NaN -> NaN +nextt833 nexttoward -0 NaN -> NaN +nextt834 nexttoward 0 NaN -> NaN +nextt835 nexttoward 1 NaN -> NaN +nextt836 nexttoward 1000 NaN -> NaN +nextt837 nexttoward Inf NaN -> NaN + +nextt841 nexttoward sNaN -Inf -> NaN Invalid_operation +nextt842 nexttoward sNaN -1000 -> NaN Invalid_operation +nextt843 nexttoward sNaN -1 -> NaN Invalid_operation +nextt844 nexttoward sNaN -0 -> NaN Invalid_operation +nextt845 nexttoward sNaN 0 -> NaN Invalid_operation +nextt846 nexttoward sNaN 1 -> NaN Invalid_operation +nextt847 nexttoward sNaN 1000 -> NaN Invalid_operation +nextt848 nexttoward sNaN NaN -> NaN Invalid_operation +nextt849 nexttoward sNaN sNaN -> NaN Invalid_operation +nextt850 nexttoward NaN sNaN -> NaN Invalid_operation +nextt851 nexttoward -Inf sNaN -> NaN Invalid_operation +nextt852 nexttoward -1000 sNaN -> NaN Invalid_operation +nextt853 nexttoward -1 sNaN -> NaN Invalid_operation +nextt854 nexttoward -0 sNaN -> NaN Invalid_operation +nextt855 nexttoward 0 sNaN -> NaN Invalid_operation +nextt856 nexttoward 1 sNaN -> NaN Invalid_operation +nextt857 nexttoward 1000 sNaN -> NaN Invalid_operation +nextt858 nexttoward Inf sNaN -> NaN Invalid_operation +nextt859 nexttoward NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +nextt861 nexttoward NaN1 -Inf -> NaN1 +nextt862 nexttoward +NaN2 -1000 -> NaN2 +nextt863 nexttoward NaN3 1000 -> NaN3 +nextt864 nexttoward NaN4 Inf -> NaN4 +nextt865 nexttoward NaN5 +NaN6 -> NaN5 +nextt866 nexttoward -Inf NaN7 -> NaN7 +nextt867 nexttoward -1000 NaN8 -> NaN8 +nextt868 nexttoward 1000 NaN9 -> NaN9 +nextt869 nexttoward Inf +NaN10 -> NaN10 +nextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation +nextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation +nextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation +nextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation +nextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation +nextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation +nextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation +nextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation +nextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation +nextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation +nextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation +nextt882 nexttoward -NaN26 NaN28 -> -NaN26 +nextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation +nextt884 nexttoward 1000 -NaN30 -> -NaN30 +nextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Null tests +nextt900 nexttoward 1 # -> NaN Invalid_operation +nextt901 nexttoward # 1 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/or.decTest b/Lib/test/decimaltestdata/or.decTest index f471d0b6ced..1aebff4e001 100644 --- a/Lib/test/decimaltestdata/or.decTest +++ b/Lib/test/decimaltestdata/or.decTest @@ -1,334 +1,334 @@ ------------------------------------------------------------------------- --- or.decTest -- digitwise logical OR -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check (truth table) -orx001 or 0 0 -> 0 -orx002 or 0 1 -> 1 -orx003 or 1 0 -> 1 -orx004 or 1 1 -> 1 -orx005 or 1100 1010 -> 1110 --- and at msd and msd-1 -orx006 or 000000000 000000000 -> 0 -orx007 or 000000000 100000000 -> 100000000 -orx008 or 100000000 000000000 -> 100000000 -orx009 or 100000000 100000000 -> 100000000 -orx010 or 000000000 000000000 -> 0 -orx011 or 000000000 010000000 -> 10000000 -orx012 or 010000000 000000000 -> 10000000 -orx013 or 010000000 010000000 -> 10000000 - --- Various lengths --- 123456789 123456789 123456789 -orx021 or 111111111 111111111 -> 111111111 -orx022 or 111111111111 111111111 -> 111111111 -orx023 or 11111111 11111111 -> 11111111 -orx025 or 1111111 1111111 -> 1111111 -orx026 or 111111 111111 -> 111111 -orx027 or 11111 11111 -> 11111 -orx028 or 1111 1111 -> 1111 -orx029 or 111 111 -> 111 -orx031 or 11 11 -> 11 -orx032 or 1 1 -> 1 -orx033 or 111111111111 1111111111 -> 111111111 -orx034 or 11111111111 11111111111 -> 111111111 -orx035 or 1111111111 111111111111 -> 111111111 -orx036 or 111111111 1111111111111 -> 111111111 - -orx040 or 111111111 111111111111 -> 111111111 -orx041 or 11111111 111111111111 -> 111111111 -orx042 or 11111111 111111111 -> 111111111 -orx043 or 1111111 100000010 -> 101111111 -orx044 or 111111 100000100 -> 100111111 -orx045 or 11111 100001000 -> 100011111 -orx046 or 1111 100010000 -> 100011111 -orx047 or 111 100100000 -> 100100111 -orx048 or 11 101000000 -> 101000011 -orx049 or 1 110000000 -> 110000001 - -orx050 or 1111111111 1 -> 111111111 -orx051 or 111111111 1 -> 111111111 -orx052 or 11111111 1 -> 11111111 -orx053 or 1111111 1 -> 1111111 -orx054 or 111111 1 -> 111111 -orx055 or 11111 1 -> 11111 -orx056 or 1111 1 -> 1111 -orx057 or 111 1 -> 111 -orx058 or 11 1 -> 11 -orx059 or 1 1 -> 1 - -orx060 or 1111111111 0 -> 111111111 -orx061 or 111111111 0 -> 111111111 -orx062 or 11111111 0 -> 11111111 -orx063 or 1111111 0 -> 1111111 -orx064 or 111111 0 -> 111111 -orx065 or 11111 0 -> 11111 -orx066 or 1111 0 -> 1111 -orx067 or 111 0 -> 111 -orx068 or 11 0 -> 11 -orx069 or 1 0 -> 1 - -orx070 or 1 1111111111 -> 111111111 -orx071 or 1 111111111 -> 111111111 -orx072 or 1 11111111 -> 11111111 -orx073 or 1 1111111 -> 1111111 -orx074 or 1 111111 -> 111111 -orx075 or 1 11111 -> 11111 -orx076 or 1 1111 -> 1111 -orx077 or 1 111 -> 111 -orx078 or 1 11 -> 11 -orx079 or 1 1 -> 1 - -orx080 or 0 1111111111 -> 111111111 -orx081 or 0 111111111 -> 111111111 -orx082 or 0 11111111 -> 11111111 -orx083 or 0 1111111 -> 1111111 -orx084 or 0 111111 -> 111111 -orx085 or 0 11111 -> 11111 -orx086 or 0 1111 -> 1111 -orx087 or 0 111 -> 111 -orx088 or 0 11 -> 11 -orx089 or 0 1 -> 1 - -orx090 or 011111111 111101111 -> 111111111 -orx091 or 101111111 111101111 -> 111111111 -orx092 or 110111111 111101111 -> 111111111 -orx093 or 111011111 111101111 -> 111111111 -orx094 or 111101111 111101111 -> 111101111 -orx095 or 111110111 111101111 -> 111111111 -orx096 or 111111011 111101111 -> 111111111 -orx097 or 111111101 111101111 -> 111111111 -orx098 or 111111110 111101111 -> 111111111 - -orx100 or 111101111 011111111 -> 111111111 -orx101 or 111101111 101111111 -> 111111111 -orx102 or 111101111 110111111 -> 111111111 -orx103 or 111101111 111011111 -> 111111111 -orx104 or 111101111 111101111 -> 111101111 -orx105 or 111101111 111110111 -> 111111111 -orx106 or 111101111 111111011 -> 111111111 -orx107 or 111101111 111111101 -> 111111111 -orx108 or 111101111 111111110 -> 111111111 - --- non-0/1 should not be accepted, nor should signs -orx220 or 111111112 111111111 -> NaN Invalid_operation -orx221 or 333333333 333333333 -> NaN Invalid_operation -orx222 or 555555555 555555555 -> NaN Invalid_operation -orx223 or 777777777 777777777 -> NaN Invalid_operation -orx224 or 999999999 999999999 -> NaN Invalid_operation -orx225 or 222222222 999999999 -> NaN Invalid_operation -orx226 or 444444444 999999999 -> NaN Invalid_operation -orx227 or 666666666 999999999 -> NaN Invalid_operation -orx228 or 888888888 999999999 -> NaN Invalid_operation -orx229 or 999999999 222222222 -> NaN Invalid_operation -orx230 or 999999999 444444444 -> NaN Invalid_operation -orx231 or 999999999 666666666 -> NaN Invalid_operation -orx232 or 999999999 888888888 -> NaN Invalid_operation --- a few randoms -orx240 or 567468689 -934981942 -> NaN Invalid_operation -orx241 or 567367689 934981942 -> NaN Invalid_operation -orx242 or -631917772 -706014634 -> NaN Invalid_operation -orx243 or -756253257 138579234 -> NaN Invalid_operation -orx244 or 835590149 567435400 -> NaN Invalid_operation --- test MSD -orx250 or 200000000 100000000 -> NaN Invalid_operation -orx251 or 700000000 100000000 -> NaN Invalid_operation -orx252 or 800000000 100000000 -> NaN Invalid_operation -orx253 or 900000000 100000000 -> NaN Invalid_operation -orx254 or 200000000 000000000 -> NaN Invalid_operation -orx255 or 700000000 000000000 -> NaN Invalid_operation -orx256 or 800000000 000000000 -> NaN Invalid_operation -orx257 or 900000000 000000000 -> NaN Invalid_operation -orx258 or 100000000 200000000 -> NaN Invalid_operation -orx259 or 100000000 700000000 -> NaN Invalid_operation -orx260 or 100000000 800000000 -> NaN Invalid_operation -orx261 or 100000000 900000000 -> NaN Invalid_operation -orx262 or 000000000 200000000 -> NaN Invalid_operation -orx263 or 000000000 700000000 -> NaN Invalid_operation -orx264 or 000000000 800000000 -> NaN Invalid_operation -orx265 or 000000000 900000000 -> NaN Invalid_operation --- test MSD-1 -orx270 or 020000000 100000000 -> NaN Invalid_operation -orx271 or 070100000 100000000 -> NaN Invalid_operation -orx272 or 080010000 100000001 -> NaN Invalid_operation -orx273 or 090001000 100000010 -> NaN Invalid_operation -orx274 or 100000100 020010100 -> NaN Invalid_operation -orx275 or 100000000 070001000 -> NaN Invalid_operation -orx276 or 100000010 080010100 -> NaN Invalid_operation -orx277 or 100000000 090000010 -> NaN Invalid_operation --- test LSD -orx280 or 001000002 100000000 -> NaN Invalid_operation -orx281 or 000000007 100000000 -> NaN Invalid_operation -orx282 or 000000008 100000000 -> NaN Invalid_operation -orx283 or 000000009 100000000 -> NaN Invalid_operation -orx284 or 100000000 000100002 -> NaN Invalid_operation -orx285 or 100100000 001000007 -> NaN Invalid_operation -orx286 or 100010000 010000008 -> NaN Invalid_operation -orx287 or 100001000 100000009 -> NaN Invalid_operation --- test Middie -orx288 or 001020000 100000000 -> NaN Invalid_operation -orx289 or 000070001 100000000 -> NaN Invalid_operation -orx290 or 000080000 100010000 -> NaN Invalid_operation -orx291 or 000090000 100001000 -> NaN Invalid_operation -orx292 or 100000010 000020100 -> NaN Invalid_operation -orx293 or 100100000 000070010 -> NaN Invalid_operation -orx294 or 100010100 000080001 -> NaN Invalid_operation -orx295 or 100001000 000090000 -> NaN Invalid_operation --- signs -orx296 or -100001000 -000000000 -> NaN Invalid_operation -orx297 or -100001000 000010000 -> NaN Invalid_operation -orx298 or 100001000 -000000000 -> NaN Invalid_operation -orx299 or 100001000 000011000 -> 100011000 - --- Nmax, Nmin, Ntiny -orx331 or 2 9.99999999E+999 -> NaN Invalid_operation -orx332 or 3 1E-999 -> NaN Invalid_operation -orx333 or 4 1.00000000E-999 -> NaN Invalid_operation -orx334 or 5 1E-1007 -> NaN Invalid_operation -orx335 or 6 -1E-1007 -> NaN Invalid_operation -orx336 or 7 -1.00000000E-999 -> NaN Invalid_operation -orx337 or 8 -1E-999 -> NaN Invalid_operation -orx338 or 9 -9.99999999E+999 -> NaN Invalid_operation -orx341 or 9.99999999E+999 -18 -> NaN Invalid_operation -orx342 or 1E-999 01 -> NaN Invalid_operation -orx343 or 1.00000000E-999 -18 -> NaN Invalid_operation -orx344 or 1E-1007 18 -> NaN Invalid_operation -orx345 or -1E-1007 -10 -> NaN Invalid_operation -orx346 or -1.00000000E-999 18 -> NaN Invalid_operation -orx347 or -1E-999 10 -> NaN Invalid_operation -orx348 or -9.99999999E+999 -18 -> NaN Invalid_operation - --- A few other non-integers -orx361 or 1.0 1 -> NaN Invalid_operation -orx362 or 1E+1 1 -> NaN Invalid_operation -orx363 or 0.0 1 -> NaN Invalid_operation -orx364 or 0E+1 1 -> NaN Invalid_operation -orx365 or 9.9 1 -> NaN Invalid_operation -orx366 or 9E+1 1 -> NaN Invalid_operation -orx371 or 0 1.0 -> NaN Invalid_operation -orx372 or 0 1E+1 -> NaN Invalid_operation -orx373 or 0 0.0 -> NaN Invalid_operation -orx374 or 0 0E+1 -> NaN Invalid_operation -orx375 or 0 9.9 -> NaN Invalid_operation -orx376 or 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -orx780 or -Inf -Inf -> NaN Invalid_operation -orx781 or -Inf -1000 -> NaN Invalid_operation -orx782 or -Inf -1 -> NaN Invalid_operation -orx783 or -Inf -0 -> NaN Invalid_operation -orx784 or -Inf 0 -> NaN Invalid_operation -orx785 or -Inf 1 -> NaN Invalid_operation -orx786 or -Inf 1000 -> NaN Invalid_operation -orx787 or -1000 -Inf -> NaN Invalid_operation -orx788 or -Inf -Inf -> NaN Invalid_operation -orx789 or -1 -Inf -> NaN Invalid_operation -orx790 or -0 -Inf -> NaN Invalid_operation -orx791 or 0 -Inf -> NaN Invalid_operation -orx792 or 1 -Inf -> NaN Invalid_operation -orx793 or 1000 -Inf -> NaN Invalid_operation -orx794 or Inf -Inf -> NaN Invalid_operation - -orx800 or Inf -Inf -> NaN Invalid_operation -orx801 or Inf -1000 -> NaN Invalid_operation -orx802 or Inf -1 -> NaN Invalid_operation -orx803 or Inf -0 -> NaN Invalid_operation -orx804 or Inf 0 -> NaN Invalid_operation -orx805 or Inf 1 -> NaN Invalid_operation -orx806 or Inf 1000 -> NaN Invalid_operation -orx807 or Inf Inf -> NaN Invalid_operation -orx808 or -1000 Inf -> NaN Invalid_operation -orx809 or -Inf Inf -> NaN Invalid_operation -orx810 or -1 Inf -> NaN Invalid_operation -orx811 or -0 Inf -> NaN Invalid_operation -orx812 or 0 Inf -> NaN Invalid_operation -orx813 or 1 Inf -> NaN Invalid_operation -orx814 or 1000 Inf -> NaN Invalid_operation -orx815 or Inf Inf -> NaN Invalid_operation - -orx821 or NaN -Inf -> NaN Invalid_operation -orx822 or NaN -1000 -> NaN Invalid_operation -orx823 or NaN -1 -> NaN Invalid_operation -orx824 or NaN -0 -> NaN Invalid_operation -orx825 or NaN 0 -> NaN Invalid_operation -orx826 or NaN 1 -> NaN Invalid_operation -orx827 or NaN 1000 -> NaN Invalid_operation -orx828 or NaN Inf -> NaN Invalid_operation -orx829 or NaN NaN -> NaN Invalid_operation -orx830 or -Inf NaN -> NaN Invalid_operation -orx831 or -1000 NaN -> NaN Invalid_operation -orx832 or -1 NaN -> NaN Invalid_operation -orx833 or -0 NaN -> NaN Invalid_operation -orx834 or 0 NaN -> NaN Invalid_operation -orx835 or 1 NaN -> NaN Invalid_operation -orx836 or 1000 NaN -> NaN Invalid_operation -orx837 or Inf NaN -> NaN Invalid_operation - -orx841 or sNaN -Inf -> NaN Invalid_operation -orx842 or sNaN -1000 -> NaN Invalid_operation -orx843 or sNaN -1 -> NaN Invalid_operation -orx844 or sNaN -0 -> NaN Invalid_operation -orx845 or sNaN 0 -> NaN Invalid_operation -orx846 or sNaN 1 -> NaN Invalid_operation -orx847 or sNaN 1000 -> NaN Invalid_operation -orx848 or sNaN NaN -> NaN Invalid_operation -orx849 or sNaN sNaN -> NaN Invalid_operation -orx850 or NaN sNaN -> NaN Invalid_operation -orx851 or -Inf sNaN -> NaN Invalid_operation -orx852 or -1000 sNaN -> NaN Invalid_operation -orx853 or -1 sNaN -> NaN Invalid_operation -orx854 or -0 sNaN -> NaN Invalid_operation -orx855 or 0 sNaN -> NaN Invalid_operation -orx856 or 1 sNaN -> NaN Invalid_operation -orx857 or 1000 sNaN -> NaN Invalid_operation -orx858 or Inf sNaN -> NaN Invalid_operation -orx859 or NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -orx861 or NaN1 -Inf -> NaN Invalid_operation -orx862 or +NaN2 -1000 -> NaN Invalid_operation -orx863 or NaN3 1000 -> NaN Invalid_operation -orx864 or NaN4 Inf -> NaN Invalid_operation -orx865 or NaN5 +NaN6 -> NaN Invalid_operation -orx866 or -Inf NaN7 -> NaN Invalid_operation -orx867 or -1000 NaN8 -> NaN Invalid_operation -orx868 or 1000 NaN9 -> NaN Invalid_operation -orx869 or Inf +NaN10 -> NaN Invalid_operation -orx871 or sNaN11 -Inf -> NaN Invalid_operation -orx872 or sNaN12 -1000 -> NaN Invalid_operation -orx873 or sNaN13 1000 -> NaN Invalid_operation -orx874 or sNaN14 NaN17 -> NaN Invalid_operation -orx875 or sNaN15 sNaN18 -> NaN Invalid_operation -orx876 or NaN16 sNaN19 -> NaN Invalid_operation -orx877 or -Inf +sNaN20 -> NaN Invalid_operation -orx878 or -1000 sNaN21 -> NaN Invalid_operation -orx879 or 1000 sNaN22 -> NaN Invalid_operation -orx880 or Inf sNaN23 -> NaN Invalid_operation -orx881 or +NaN25 +sNaN24 -> NaN Invalid_operation -orx882 or -NaN26 NaN28 -> NaN Invalid_operation -orx883 or -sNaN27 sNaN29 -> NaN Invalid_operation -orx884 or 1000 -NaN30 -> NaN Invalid_operation -orx885 or 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- or.decTest -- digitwise logical OR -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check (truth table) +orx001 or 0 0 -> 0 +orx002 or 0 1 -> 1 +orx003 or 1 0 -> 1 +orx004 or 1 1 -> 1 +orx005 or 1100 1010 -> 1110 +-- and at msd and msd-1 +orx006 or 000000000 000000000 -> 0 +orx007 or 000000000 100000000 -> 100000000 +orx008 or 100000000 000000000 -> 100000000 +orx009 or 100000000 100000000 -> 100000000 +orx010 or 000000000 000000000 -> 0 +orx011 or 000000000 010000000 -> 10000000 +orx012 or 010000000 000000000 -> 10000000 +orx013 or 010000000 010000000 -> 10000000 + +-- Various lengths +-- 123456789 123456789 123456789 +orx021 or 111111111 111111111 -> 111111111 +orx022 or 111111111111 111111111 -> 111111111 +orx023 or 11111111 11111111 -> 11111111 +orx025 or 1111111 1111111 -> 1111111 +orx026 or 111111 111111 -> 111111 +orx027 or 11111 11111 -> 11111 +orx028 or 1111 1111 -> 1111 +orx029 or 111 111 -> 111 +orx031 or 11 11 -> 11 +orx032 or 1 1 -> 1 +orx033 or 111111111111 1111111111 -> 111111111 +orx034 or 11111111111 11111111111 -> 111111111 +orx035 or 1111111111 111111111111 -> 111111111 +orx036 or 111111111 1111111111111 -> 111111111 + +orx040 or 111111111 111111111111 -> 111111111 +orx041 or 11111111 111111111111 -> 111111111 +orx042 or 11111111 111111111 -> 111111111 +orx043 or 1111111 100000010 -> 101111111 +orx044 or 111111 100000100 -> 100111111 +orx045 or 11111 100001000 -> 100011111 +orx046 or 1111 100010000 -> 100011111 +orx047 or 111 100100000 -> 100100111 +orx048 or 11 101000000 -> 101000011 +orx049 or 1 110000000 -> 110000001 + +orx050 or 1111111111 1 -> 111111111 +orx051 or 111111111 1 -> 111111111 +orx052 or 11111111 1 -> 11111111 +orx053 or 1111111 1 -> 1111111 +orx054 or 111111 1 -> 111111 +orx055 or 11111 1 -> 11111 +orx056 or 1111 1 -> 1111 +orx057 or 111 1 -> 111 +orx058 or 11 1 -> 11 +orx059 or 1 1 -> 1 + +orx060 or 1111111111 0 -> 111111111 +orx061 or 111111111 0 -> 111111111 +orx062 or 11111111 0 -> 11111111 +orx063 or 1111111 0 -> 1111111 +orx064 or 111111 0 -> 111111 +orx065 or 11111 0 -> 11111 +orx066 or 1111 0 -> 1111 +orx067 or 111 0 -> 111 +orx068 or 11 0 -> 11 +orx069 or 1 0 -> 1 + +orx070 or 1 1111111111 -> 111111111 +orx071 or 1 111111111 -> 111111111 +orx072 or 1 11111111 -> 11111111 +orx073 or 1 1111111 -> 1111111 +orx074 or 1 111111 -> 111111 +orx075 or 1 11111 -> 11111 +orx076 or 1 1111 -> 1111 +orx077 or 1 111 -> 111 +orx078 or 1 11 -> 11 +orx079 or 1 1 -> 1 + +orx080 or 0 1111111111 -> 111111111 +orx081 or 0 111111111 -> 111111111 +orx082 or 0 11111111 -> 11111111 +orx083 or 0 1111111 -> 1111111 +orx084 or 0 111111 -> 111111 +orx085 or 0 11111 -> 11111 +orx086 or 0 1111 -> 1111 +orx087 or 0 111 -> 111 +orx088 or 0 11 -> 11 +orx089 or 0 1 -> 1 + +orx090 or 011111111 111101111 -> 111111111 +orx091 or 101111111 111101111 -> 111111111 +orx092 or 110111111 111101111 -> 111111111 +orx093 or 111011111 111101111 -> 111111111 +orx094 or 111101111 111101111 -> 111101111 +orx095 or 111110111 111101111 -> 111111111 +orx096 or 111111011 111101111 -> 111111111 +orx097 or 111111101 111101111 -> 111111111 +orx098 or 111111110 111101111 -> 111111111 + +orx100 or 111101111 011111111 -> 111111111 +orx101 or 111101111 101111111 -> 111111111 +orx102 or 111101111 110111111 -> 111111111 +orx103 or 111101111 111011111 -> 111111111 +orx104 or 111101111 111101111 -> 111101111 +orx105 or 111101111 111110111 -> 111111111 +orx106 or 111101111 111111011 -> 111111111 +orx107 or 111101111 111111101 -> 111111111 +orx108 or 111101111 111111110 -> 111111111 + +-- non-0/1 should not be accepted, nor should signs +orx220 or 111111112 111111111 -> NaN Invalid_operation +orx221 or 333333333 333333333 -> NaN Invalid_operation +orx222 or 555555555 555555555 -> NaN Invalid_operation +orx223 or 777777777 777777777 -> NaN Invalid_operation +orx224 or 999999999 999999999 -> NaN Invalid_operation +orx225 or 222222222 999999999 -> NaN Invalid_operation +orx226 or 444444444 999999999 -> NaN Invalid_operation +orx227 or 666666666 999999999 -> NaN Invalid_operation +orx228 or 888888888 999999999 -> NaN Invalid_operation +orx229 or 999999999 222222222 -> NaN Invalid_operation +orx230 or 999999999 444444444 -> NaN Invalid_operation +orx231 or 999999999 666666666 -> NaN Invalid_operation +orx232 or 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +orx240 or 567468689 -934981942 -> NaN Invalid_operation +orx241 or 567367689 934981942 -> NaN Invalid_operation +orx242 or -631917772 -706014634 -> NaN Invalid_operation +orx243 or -756253257 138579234 -> NaN Invalid_operation +orx244 or 835590149 567435400 -> NaN Invalid_operation +-- test MSD +orx250 or 200000000 100000000 -> NaN Invalid_operation +orx251 or 700000000 100000000 -> NaN Invalid_operation +orx252 or 800000000 100000000 -> NaN Invalid_operation +orx253 or 900000000 100000000 -> NaN Invalid_operation +orx254 or 200000000 000000000 -> NaN Invalid_operation +orx255 or 700000000 000000000 -> NaN Invalid_operation +orx256 or 800000000 000000000 -> NaN Invalid_operation +orx257 or 900000000 000000000 -> NaN Invalid_operation +orx258 or 100000000 200000000 -> NaN Invalid_operation +orx259 or 100000000 700000000 -> NaN Invalid_operation +orx260 or 100000000 800000000 -> NaN Invalid_operation +orx261 or 100000000 900000000 -> NaN Invalid_operation +orx262 or 000000000 200000000 -> NaN Invalid_operation +orx263 or 000000000 700000000 -> NaN Invalid_operation +orx264 or 000000000 800000000 -> NaN Invalid_operation +orx265 or 000000000 900000000 -> NaN Invalid_operation +-- test MSD-1 +orx270 or 020000000 100000000 -> NaN Invalid_operation +orx271 or 070100000 100000000 -> NaN Invalid_operation +orx272 or 080010000 100000001 -> NaN Invalid_operation +orx273 or 090001000 100000010 -> NaN Invalid_operation +orx274 or 100000100 020010100 -> NaN Invalid_operation +orx275 or 100000000 070001000 -> NaN Invalid_operation +orx276 or 100000010 080010100 -> NaN Invalid_operation +orx277 or 100000000 090000010 -> NaN Invalid_operation +-- test LSD +orx280 or 001000002 100000000 -> NaN Invalid_operation +orx281 or 000000007 100000000 -> NaN Invalid_operation +orx282 or 000000008 100000000 -> NaN Invalid_operation +orx283 or 000000009 100000000 -> NaN Invalid_operation +orx284 or 100000000 000100002 -> NaN Invalid_operation +orx285 or 100100000 001000007 -> NaN Invalid_operation +orx286 or 100010000 010000008 -> NaN Invalid_operation +orx287 or 100001000 100000009 -> NaN Invalid_operation +-- test Middie +orx288 or 001020000 100000000 -> NaN Invalid_operation +orx289 or 000070001 100000000 -> NaN Invalid_operation +orx290 or 000080000 100010000 -> NaN Invalid_operation +orx291 or 000090000 100001000 -> NaN Invalid_operation +orx292 or 100000010 000020100 -> NaN Invalid_operation +orx293 or 100100000 000070010 -> NaN Invalid_operation +orx294 or 100010100 000080001 -> NaN Invalid_operation +orx295 or 100001000 000090000 -> NaN Invalid_operation +-- signs +orx296 or -100001000 -000000000 -> NaN Invalid_operation +orx297 or -100001000 000010000 -> NaN Invalid_operation +orx298 or 100001000 -000000000 -> NaN Invalid_operation +orx299 or 100001000 000011000 -> 100011000 + +-- Nmax, Nmin, Ntiny +orx331 or 2 9.99999999E+999 -> NaN Invalid_operation +orx332 or 3 1E-999 -> NaN Invalid_operation +orx333 or 4 1.00000000E-999 -> NaN Invalid_operation +orx334 or 5 1E-1007 -> NaN Invalid_operation +orx335 or 6 -1E-1007 -> NaN Invalid_operation +orx336 or 7 -1.00000000E-999 -> NaN Invalid_operation +orx337 or 8 -1E-999 -> NaN Invalid_operation +orx338 or 9 -9.99999999E+999 -> NaN Invalid_operation +orx341 or 9.99999999E+999 -18 -> NaN Invalid_operation +orx342 or 1E-999 01 -> NaN Invalid_operation +orx343 or 1.00000000E-999 -18 -> NaN Invalid_operation +orx344 or 1E-1007 18 -> NaN Invalid_operation +orx345 or -1E-1007 -10 -> NaN Invalid_operation +orx346 or -1.00000000E-999 18 -> NaN Invalid_operation +orx347 or -1E-999 10 -> NaN Invalid_operation +orx348 or -9.99999999E+999 -18 -> NaN Invalid_operation + +-- A few other non-integers +orx361 or 1.0 1 -> NaN Invalid_operation +orx362 or 1E+1 1 -> NaN Invalid_operation +orx363 or 0.0 1 -> NaN Invalid_operation +orx364 or 0E+1 1 -> NaN Invalid_operation +orx365 or 9.9 1 -> NaN Invalid_operation +orx366 or 9E+1 1 -> NaN Invalid_operation +orx371 or 0 1.0 -> NaN Invalid_operation +orx372 or 0 1E+1 -> NaN Invalid_operation +orx373 or 0 0.0 -> NaN Invalid_operation +orx374 or 0 0E+1 -> NaN Invalid_operation +orx375 or 0 9.9 -> NaN Invalid_operation +orx376 or 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +orx780 or -Inf -Inf -> NaN Invalid_operation +orx781 or -Inf -1000 -> NaN Invalid_operation +orx782 or -Inf -1 -> NaN Invalid_operation +orx783 or -Inf -0 -> NaN Invalid_operation +orx784 or -Inf 0 -> NaN Invalid_operation +orx785 or -Inf 1 -> NaN Invalid_operation +orx786 or -Inf 1000 -> NaN Invalid_operation +orx787 or -1000 -Inf -> NaN Invalid_operation +orx788 or -Inf -Inf -> NaN Invalid_operation +orx789 or -1 -Inf -> NaN Invalid_operation +orx790 or -0 -Inf -> NaN Invalid_operation +orx791 or 0 -Inf -> NaN Invalid_operation +orx792 or 1 -Inf -> NaN Invalid_operation +orx793 or 1000 -Inf -> NaN Invalid_operation +orx794 or Inf -Inf -> NaN Invalid_operation + +orx800 or Inf -Inf -> NaN Invalid_operation +orx801 or Inf -1000 -> NaN Invalid_operation +orx802 or Inf -1 -> NaN Invalid_operation +orx803 or Inf -0 -> NaN Invalid_operation +orx804 or Inf 0 -> NaN Invalid_operation +orx805 or Inf 1 -> NaN Invalid_operation +orx806 or Inf 1000 -> NaN Invalid_operation +orx807 or Inf Inf -> NaN Invalid_operation +orx808 or -1000 Inf -> NaN Invalid_operation +orx809 or -Inf Inf -> NaN Invalid_operation +orx810 or -1 Inf -> NaN Invalid_operation +orx811 or -0 Inf -> NaN Invalid_operation +orx812 or 0 Inf -> NaN Invalid_operation +orx813 or 1 Inf -> NaN Invalid_operation +orx814 or 1000 Inf -> NaN Invalid_operation +orx815 or Inf Inf -> NaN Invalid_operation + +orx821 or NaN -Inf -> NaN Invalid_operation +orx822 or NaN -1000 -> NaN Invalid_operation +orx823 or NaN -1 -> NaN Invalid_operation +orx824 or NaN -0 -> NaN Invalid_operation +orx825 or NaN 0 -> NaN Invalid_operation +orx826 or NaN 1 -> NaN Invalid_operation +orx827 or NaN 1000 -> NaN Invalid_operation +orx828 or NaN Inf -> NaN Invalid_operation +orx829 or NaN NaN -> NaN Invalid_operation +orx830 or -Inf NaN -> NaN Invalid_operation +orx831 or -1000 NaN -> NaN Invalid_operation +orx832 or -1 NaN -> NaN Invalid_operation +orx833 or -0 NaN -> NaN Invalid_operation +orx834 or 0 NaN -> NaN Invalid_operation +orx835 or 1 NaN -> NaN Invalid_operation +orx836 or 1000 NaN -> NaN Invalid_operation +orx837 or Inf NaN -> NaN Invalid_operation + +orx841 or sNaN -Inf -> NaN Invalid_operation +orx842 or sNaN -1000 -> NaN Invalid_operation +orx843 or sNaN -1 -> NaN Invalid_operation +orx844 or sNaN -0 -> NaN Invalid_operation +orx845 or sNaN 0 -> NaN Invalid_operation +orx846 or sNaN 1 -> NaN Invalid_operation +orx847 or sNaN 1000 -> NaN Invalid_operation +orx848 or sNaN NaN -> NaN Invalid_operation +orx849 or sNaN sNaN -> NaN Invalid_operation +orx850 or NaN sNaN -> NaN Invalid_operation +orx851 or -Inf sNaN -> NaN Invalid_operation +orx852 or -1000 sNaN -> NaN Invalid_operation +orx853 or -1 sNaN -> NaN Invalid_operation +orx854 or -0 sNaN -> NaN Invalid_operation +orx855 or 0 sNaN -> NaN Invalid_operation +orx856 or 1 sNaN -> NaN Invalid_operation +orx857 or 1000 sNaN -> NaN Invalid_operation +orx858 or Inf sNaN -> NaN Invalid_operation +orx859 or NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +orx861 or NaN1 -Inf -> NaN Invalid_operation +orx862 or +NaN2 -1000 -> NaN Invalid_operation +orx863 or NaN3 1000 -> NaN Invalid_operation +orx864 or NaN4 Inf -> NaN Invalid_operation +orx865 or NaN5 +NaN6 -> NaN Invalid_operation +orx866 or -Inf NaN7 -> NaN Invalid_operation +orx867 or -1000 NaN8 -> NaN Invalid_operation +orx868 or 1000 NaN9 -> NaN Invalid_operation +orx869 or Inf +NaN10 -> NaN Invalid_operation +orx871 or sNaN11 -Inf -> NaN Invalid_operation +orx872 or sNaN12 -1000 -> NaN Invalid_operation +orx873 or sNaN13 1000 -> NaN Invalid_operation +orx874 or sNaN14 NaN17 -> NaN Invalid_operation +orx875 or sNaN15 sNaN18 -> NaN Invalid_operation +orx876 or NaN16 sNaN19 -> NaN Invalid_operation +orx877 or -Inf +sNaN20 -> NaN Invalid_operation +orx878 or -1000 sNaN21 -> NaN Invalid_operation +orx879 or 1000 sNaN22 -> NaN Invalid_operation +orx880 or Inf sNaN23 -> NaN Invalid_operation +orx881 or +NaN25 +sNaN24 -> NaN Invalid_operation +orx882 or -NaN26 NaN28 -> NaN Invalid_operation +orx883 or -sNaN27 sNaN29 -> NaN Invalid_operation +orx884 or 1000 -NaN30 -> NaN Invalid_operation +orx885 or 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/powersqrt.decTest b/Lib/test/decimaltestdata/powersqrt.decTest index 6c021a0cbb4..260b941537b 100644 --- a/Lib/test/decimaltestdata/powersqrt.decTest +++ b/Lib/test/decimaltestdata/powersqrt.decTest @@ -1,2970 +1,2970 @@ ------------------------------------------------------------------------- --- powersqrt.decTest -- decimal square root, using power -- --- Copyright (c) IBM Corporation, 2004, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- These testcases are taken from squareroot.decTest but are --- evaluated using the power operator. The differences in results --- (153 out of 2856) fall into the following categories: --- --- x ** 0.5 (x>0) has no preferred exponent, and is Inexact --- (and hence full precision); almost all differences are --- in this category --- 0.00 ** 0.5 becomes 0 (not 0.0), etc. --- -0 ** 0.5 becomes 0 (never -0) --- Some exact subnormals become inexact and hence underflows - -extended: 1 -precision: 9 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- basics -pwsx001 power 1 0.5 -> 1.00000000 Inexact Rounded -pwsx002 power -1 0.5 -> NaN Invalid_operation -pwsx003 power 1.00 0.5 -> 1.00000000 Inexact Rounded -pwsx004 power -1.00 0.5 -> NaN Invalid_operation -pwsx005 power 0 0.5 -> 0 -pwsx006 power 00.0 0.5 -> 0 -pwsx007 power 0.00 0.5 -> 0 -pwsx008 power 00.00 0.5 -> 0 -pwsx009 power 00.000 0.5 -> 0 -pwsx010 power 00.0000 0.5 -> 0 -pwsx011 power 00 0.5 -> 0 - -pwsx012 power -2 0.5 -> NaN Invalid_operation -pwsx013 power 2 0.5 -> 1.41421356 Inexact Rounded -pwsx014 power -2.00 0.5 -> NaN Invalid_operation -pwsx015 power 2.00 0.5 -> 1.41421356 Inexact Rounded -pwsx016 power -0 0.5 -> 0 -pwsx017 power -0.0 0.5 -> 0 -pwsx018 power -00.00 0.5 -> 0 -pwsx019 power -00.000 0.5 -> 0 -pwsx020 power -0.0000 0.5 -> 0 -pwsx021 power -0E+9 0.5 -> 0 -pwsx022 power -0E+10 0.5 -> 0 -pwsx023 power -0E+11 0.5 -> 0 -pwsx024 power -0E+12 0.5 -> 0 -pwsx025 power -00 0.5 -> 0 -pwsx026 power 0E+5 0.5 -> 0 -pwsx027 power 4.0 0.5 -> 2.00000000 Inexact Rounded -pwsx028 power 4.00 0.5 -> 2.00000000 Inexact Rounded - -pwsx030 power +0.1 0.5 -> 0.316227766 Inexact Rounded -pwsx031 power -0.1 0.5 -> NaN Invalid_operation -pwsx032 power +0.01 0.5 -> 0.100000000 Inexact Rounded -pwsx033 power -0.01 0.5 -> NaN Invalid_operation -pwsx034 power +0.001 0.5 -> 0.0316227766 Inexact Rounded -pwsx035 power -0.001 0.5 -> NaN Invalid_operation -pwsx036 power +0.000001 0.5 -> 0.00100000000 Inexact Rounded -pwsx037 power -0.000001 0.5 -> NaN Invalid_operation -pwsx038 power +0.000000000001 0.5 -> 0.00000100000000 Inexact Rounded -pwsx039 power -0.000000000001 0.5 -> NaN Invalid_operation - -pwsx041 power 1.1 0.5 -> 1.04880885 Inexact Rounded -pwsx042 power 1.10 0.5 -> 1.04880885 Inexact Rounded -pwsx043 power 1.100 0.5 -> 1.04880885 Inexact Rounded -pwsx044 power 1.110 0.5 -> 1.05356538 Inexact Rounded -pwsx045 power -1.1 0.5 -> NaN Invalid_operation -pwsx046 power -1.10 0.5 -> NaN Invalid_operation -pwsx047 power -1.100 0.5 -> NaN Invalid_operation -pwsx048 power -1.110 0.5 -> NaN Invalid_operation -pwsx049 power 9.9 0.5 -> 3.14642654 Inexact Rounded -pwsx050 power 9.90 0.5 -> 3.14642654 Inexact Rounded -pwsx051 power 9.900 0.5 -> 3.14642654 Inexact Rounded -pwsx052 power 9.990 0.5 -> 3.16069613 Inexact Rounded -pwsx053 power -9.9 0.5 -> NaN Invalid_operation -pwsx054 power -9.90 0.5 -> NaN Invalid_operation -pwsx055 power -9.900 0.5 -> NaN Invalid_operation -pwsx056 power -9.990 0.5 -> NaN Invalid_operation - -pwsx060 power 1 0.5 -> 1.00000000 Inexact Rounded -pwsx061 power 1.0 0.5 -> 1.00000000 Inexact Rounded -pwsx062 power 1.00 0.5 -> 1.00000000 Inexact Rounded -pwsx063 power 10.0 0.5 -> 3.16227766 Inexact Rounded -pwsx064 power 10.0 0.5 -> 3.16227766 Inexact Rounded -pwsx065 power 10.0 0.5 -> 3.16227766 Inexact Rounded -pwsx066 power 10.00 0.5 -> 3.16227766 Inexact Rounded -pwsx067 power 100 0.5 -> 10.0000000 Inexact Rounded -pwsx068 power 100.0 0.5 -> 10.0000000 Inexact Rounded -pwsx069 power 100.00 0.5 -> 10.0000000 Inexact Rounded -pwsx070 power 1.1000E+3 0.5 -> 33.1662479 Inexact Rounded -pwsx071 power 1.10000E+3 0.5 -> 33.1662479 Inexact Rounded -pwsx072 power -10.0 0.5 -> NaN Invalid_operation -pwsx073 power -10.00 0.5 -> NaN Invalid_operation -pwsx074 power -100.0 0.5 -> NaN Invalid_operation -pwsx075 power -100.00 0.5 -> NaN Invalid_operation -pwsx076 power -1.1000E+3 0.5 -> NaN Invalid_operation -pwsx077 power -1.10000E+3 0.5 -> NaN Invalid_operation - --- famous squares -pwsx080 power 1 0.5 -> 1.00000000 Inexact Rounded -pwsx081 power 4 0.5 -> 2.00000000 Inexact Rounded -pwsx082 power 9 0.5 -> 3.00000000 Inexact Rounded -pwsx083 power 16 0.5 -> 4.00000000 Inexact Rounded -pwsx084 power 25 0.5 -> 5.00000000 Inexact Rounded -pwsx085 power 36 0.5 -> 6.00000000 Inexact Rounded -pwsx086 power 49 0.5 -> 7.00000000 Inexact Rounded -pwsx087 power 64 0.5 -> 8.00000000 Inexact Rounded -pwsx088 power 81 0.5 -> 9.00000000 Inexact Rounded -pwsx089 power 100 0.5 -> 10.0000000 Inexact Rounded -pwsx090 power 121 0.5 -> 11.0000000 Inexact Rounded -pwsx091 power 144 0.5 -> 12.0000000 Inexact Rounded -pwsx092 power 169 0.5 -> 13.0000000 Inexact Rounded -pwsx093 power 256 0.5 -> 16.0000000 Inexact Rounded -pwsx094 power 1024 0.5 -> 32.0000000 Inexact Rounded -pwsx095 power 4096 0.5 -> 64.0000000 Inexact Rounded -pwsx100 power 0.01 0.5 -> 0.100000000 Inexact Rounded -pwsx101 power 0.04 0.5 -> 0.200000000 Inexact Rounded -pwsx102 power 0.09 0.5 -> 0.300000000 Inexact Rounded -pwsx103 power 0.16 0.5 -> 0.400000000 Inexact Rounded -pwsx104 power 0.25 0.5 -> 0.500000000 Inexact Rounded -pwsx105 power 0.36 0.5 -> 0.600000000 Inexact Rounded -pwsx106 power 0.49 0.5 -> 0.700000000 Inexact Rounded -pwsx107 power 0.64 0.5 -> 0.800000000 Inexact Rounded -pwsx108 power 0.81 0.5 -> 0.900000000 Inexact Rounded -pwsx109 power 1.00 0.5 -> 1.00000000 Inexact Rounded -pwsx110 power 1.21 0.5 -> 1.10000000 Inexact Rounded -pwsx111 power 1.44 0.5 -> 1.20000000 Inexact Rounded -pwsx112 power 1.69 0.5 -> 1.30000000 Inexact Rounded -pwsx113 power 2.56 0.5 -> 1.60000000 Inexact Rounded -pwsx114 power 10.24 0.5 -> 3.20000000 Inexact Rounded -pwsx115 power 40.96 0.5 -> 6.40000000 Inexact Rounded - --- Precision 1 squareroot tests [exhaustive, plus exponent adjusts] -rounding: half_even -maxExponent: 999 -minexponent: -999 -precision: 1 -pwsx1201 power 0.1 0.5 -> 0.3 Inexact Rounded -pwsx1202 power 0.01 0.5 -> 0.1 Inexact Rounded -pwsx1203 power 1.0E-1 0.5 -> 0.3 Inexact Rounded -pwsx1204 power 1.00E-2 0.5 -> 0.1 Inexact Rounded -pwsx1205 power 1E-3 0.5 -> 0.03 Inexact Rounded -pwsx1206 power 1E+1 0.5 -> 3 Inexact Rounded -pwsx1207 power 1E+2 0.5 -> 1E+1 Inexact Rounded -pwsx1208 power 1E+3 0.5 -> 3E+1 Inexact Rounded -pwsx1209 power 0.2 0.5 -> 0.4 Inexact Rounded -pwsx1210 power 0.02 0.5 -> 0.1 Inexact Rounded -pwsx1211 power 2.0E-1 0.5 -> 0.4 Inexact Rounded -pwsx1212 power 2.00E-2 0.5 -> 0.1 Inexact Rounded -pwsx1213 power 2E-3 0.5 -> 0.04 Inexact Rounded -pwsx1214 power 2E+1 0.5 -> 4 Inexact Rounded -pwsx1215 power 2E+2 0.5 -> 1E+1 Inexact Rounded -pwsx1216 power 2E+3 0.5 -> 4E+1 Inexact Rounded -pwsx1217 power 0.3 0.5 -> 0.5 Inexact Rounded -pwsx1218 power 0.03 0.5 -> 0.2 Inexact Rounded -pwsx1219 power 3.0E-1 0.5 -> 0.5 Inexact Rounded -pwsx1220 power 3.00E-2 0.5 -> 0.2 Inexact Rounded -pwsx1221 power 3E-3 0.5 -> 0.05 Inexact Rounded -pwsx1222 power 3E+1 0.5 -> 5 Inexact Rounded -pwsx1223 power 3E+2 0.5 -> 2E+1 Inexact Rounded -pwsx1224 power 3E+3 0.5 -> 5E+1 Inexact Rounded -pwsx1225 power 0.4 0.5 -> 0.6 Inexact Rounded -pwsx1226 power 0.04 0.5 -> 0.2 Inexact Rounded -pwsx1227 power 4.0E-1 0.5 -> 0.6 Inexact Rounded -pwsx1228 power 4.00E-2 0.5 -> 0.2 Inexact Rounded -pwsx1229 power 4E-3 0.5 -> 0.06 Inexact Rounded -pwsx1230 power 4E+1 0.5 -> 6 Inexact Rounded -pwsx1231 power 4E+2 0.5 -> 2E+1 Inexact Rounded -pwsx1232 power 4E+3 0.5 -> 6E+1 Inexact Rounded -pwsx1233 power 0.5 0.5 -> 0.7 Inexact Rounded -pwsx1234 power 0.05 0.5 -> 0.2 Inexact Rounded -pwsx1235 power 5.0E-1 0.5 -> 0.7 Inexact Rounded -pwsx1236 power 5.00E-2 0.5 -> 0.2 Inexact Rounded -pwsx1237 power 5E-3 0.5 -> 0.07 Inexact Rounded -pwsx1238 power 5E+1 0.5 -> 7 Inexact Rounded -pwsx1239 power 5E+2 0.5 -> 2E+1 Inexact Rounded -pwsx1240 power 5E+3 0.5 -> 7E+1 Inexact Rounded -pwsx1241 power 0.6 0.5 -> 0.8 Inexact Rounded -pwsx1242 power 0.06 0.5 -> 0.2 Inexact Rounded -pwsx1243 power 6.0E-1 0.5 -> 0.8 Inexact Rounded -pwsx1244 power 6.00E-2 0.5 -> 0.2 Inexact Rounded -pwsx1245 power 6E-3 0.5 -> 0.08 Inexact Rounded -pwsx1246 power 6E+1 0.5 -> 8 Inexact Rounded -pwsx1247 power 6E+2 0.5 -> 2E+1 Inexact Rounded -pwsx1248 power 6E+3 0.5 -> 8E+1 Inexact Rounded -pwsx1249 power 0.7 0.5 -> 0.8 Inexact Rounded -pwsx1250 power 0.07 0.5 -> 0.3 Inexact Rounded -pwsx1251 power 7.0E-1 0.5 -> 0.8 Inexact Rounded -pwsx1252 power 7.00E-2 0.5 -> 0.3 Inexact Rounded -pwsx1253 power 7E-3 0.5 -> 0.08 Inexact Rounded -pwsx1254 power 7E+1 0.5 -> 8 Inexact Rounded -pwsx1255 power 7E+2 0.5 -> 3E+1 Inexact Rounded -pwsx1256 power 7E+3 0.5 -> 8E+1 Inexact Rounded -pwsx1257 power 0.8 0.5 -> 0.9 Inexact Rounded -pwsx1258 power 0.08 0.5 -> 0.3 Inexact Rounded -pwsx1259 power 8.0E-1 0.5 -> 0.9 Inexact Rounded -pwsx1260 power 8.00E-2 0.5 -> 0.3 Inexact Rounded -pwsx1261 power 8E-3 0.5 -> 0.09 Inexact Rounded -pwsx1262 power 8E+1 0.5 -> 9 Inexact Rounded -pwsx1263 power 8E+2 0.5 -> 3E+1 Inexact Rounded -pwsx1264 power 8E+3 0.5 -> 9E+1 Inexact Rounded -pwsx1265 power 0.9 0.5 -> 0.9 Inexact Rounded -pwsx1266 power 0.09 0.5 -> 0.3 Inexact Rounded -pwsx1267 power 9.0E-1 0.5 -> 0.9 Inexact Rounded -pwsx1268 power 9.00E-2 0.5 -> 0.3 Inexact Rounded -pwsx1269 power 9E-3 0.5 -> 0.09 Inexact Rounded -pwsx1270 power 9E+1 0.5 -> 9 Inexact Rounded -pwsx1271 power 9E+2 0.5 -> 3E+1 Inexact Rounded -pwsx1272 power 9E+3 0.5 -> 9E+1 Inexact Rounded - --- Precision 2 squareroot tests [exhaustive, plus exponent adjusts] -rounding: half_even -maxExponent: 999 -minexponent: -999 -precision: 2 -pwsx2201 power 0.1 0.5 -> 0.32 Inexact Rounded -pwsx2202 power 0.01 0.5 -> 0.10 Inexact Rounded -pwsx2203 power 1.0E-1 0.5 -> 0.32 Inexact Rounded -pwsx2204 power 1.00E-2 0.5 -> 0.10 Inexact Rounded -pwsx2205 power 1E-3 0.5 -> 0.032 Inexact Rounded -pwsx2206 power 1E+1 0.5 -> 3.2 Inexact Rounded -pwsx2207 power 1E+2 0.5 -> 10 Inexact Rounded -pwsx2208 power 1E+3 0.5 -> 32 Inexact Rounded -pwsx2209 power 0.2 0.5 -> 0.45 Inexact Rounded -pwsx2210 power 0.02 0.5 -> 0.14 Inexact Rounded -pwsx2211 power 2.0E-1 0.5 -> 0.45 Inexact Rounded -pwsx2212 power 2.00E-2 0.5 -> 0.14 Inexact Rounded -pwsx2213 power 2E-3 0.5 -> 0.045 Inexact Rounded -pwsx2214 power 2E+1 0.5 -> 4.5 Inexact Rounded -pwsx2215 power 2E+2 0.5 -> 14 Inexact Rounded -pwsx2216 power 2E+3 0.5 -> 45 Inexact Rounded -pwsx2217 power 0.3 0.5 -> 0.55 Inexact Rounded -pwsx2218 power 0.03 0.5 -> 0.17 Inexact Rounded -pwsx2219 power 3.0E-1 0.5 -> 0.55 Inexact Rounded -pwsx2220 power 3.00E-2 0.5 -> 0.17 Inexact Rounded -pwsx2221 power 3E-3 0.5 -> 0.055 Inexact Rounded -pwsx2222 power 3E+1 0.5 -> 5.5 Inexact Rounded -pwsx2223 power 3E+2 0.5 -> 17 Inexact Rounded -pwsx2224 power 3E+3 0.5 -> 55 Inexact Rounded -pwsx2225 power 0.4 0.5 -> 0.63 Inexact Rounded -pwsx2226 power 0.04 0.5 -> 0.20 Inexact Rounded -pwsx2227 power 4.0E-1 0.5 -> 0.63 Inexact Rounded -pwsx2228 power 4.00E-2 0.5 -> 0.20 Inexact Rounded -pwsx2229 power 4E-3 0.5 -> 0.063 Inexact Rounded -pwsx2230 power 4E+1 0.5 -> 6.3 Inexact Rounded -pwsx2231 power 4E+2 0.5 -> 20 Inexact Rounded -pwsx2232 power 4E+3 0.5 -> 63 Inexact Rounded -pwsx2233 power 0.5 0.5 -> 0.71 Inexact Rounded -pwsx2234 power 0.05 0.5 -> 0.22 Inexact Rounded -pwsx2235 power 5.0E-1 0.5 -> 0.71 Inexact Rounded -pwsx2236 power 5.00E-2 0.5 -> 0.22 Inexact Rounded -pwsx2237 power 5E-3 0.5 -> 0.071 Inexact Rounded -pwsx2238 power 5E+1 0.5 -> 7.1 Inexact Rounded -pwsx2239 power 5E+2 0.5 -> 22 Inexact Rounded -pwsx2240 power 5E+3 0.5 -> 71 Inexact Rounded -pwsx2241 power 0.6 0.5 -> 0.77 Inexact Rounded -pwsx2242 power 0.06 0.5 -> 0.24 Inexact Rounded -pwsx2243 power 6.0E-1 0.5 -> 0.77 Inexact Rounded -pwsx2244 power 6.00E-2 0.5 -> 0.24 Inexact Rounded -pwsx2245 power 6E-3 0.5 -> 0.077 Inexact Rounded -pwsx2246 power 6E+1 0.5 -> 7.7 Inexact Rounded -pwsx2247 power 6E+2 0.5 -> 24 Inexact Rounded -pwsx2248 power 6E+3 0.5 -> 77 Inexact Rounded -pwsx2249 power 0.7 0.5 -> 0.84 Inexact Rounded -pwsx2250 power 0.07 0.5 -> 0.26 Inexact Rounded -pwsx2251 power 7.0E-1 0.5 -> 0.84 Inexact Rounded -pwsx2252 power 7.00E-2 0.5 -> 0.26 Inexact Rounded -pwsx2253 power 7E-3 0.5 -> 0.084 Inexact Rounded -pwsx2254 power 7E+1 0.5 -> 8.4 Inexact Rounded -pwsx2255 power 7E+2 0.5 -> 26 Inexact Rounded -pwsx2256 power 7E+3 0.5 -> 84 Inexact Rounded -pwsx2257 power 0.8 0.5 -> 0.89 Inexact Rounded -pwsx2258 power 0.08 0.5 -> 0.28 Inexact Rounded -pwsx2259 power 8.0E-1 0.5 -> 0.89 Inexact Rounded -pwsx2260 power 8.00E-2 0.5 -> 0.28 Inexact Rounded -pwsx2261 power 8E-3 0.5 -> 0.089 Inexact Rounded -pwsx2262 power 8E+1 0.5 -> 8.9 Inexact Rounded -pwsx2263 power 8E+2 0.5 -> 28 Inexact Rounded -pwsx2264 power 8E+3 0.5 -> 89 Inexact Rounded -pwsx2265 power 0.9 0.5 -> 0.95 Inexact Rounded -pwsx2266 power 0.09 0.5 -> 0.30 Inexact Rounded -pwsx2267 power 9.0E-1 0.5 -> 0.95 Inexact Rounded -pwsx2268 power 9.00E-2 0.5 -> 0.30 Inexact Rounded -pwsx2269 power 9E-3 0.5 -> 0.095 Inexact Rounded -pwsx2270 power 9E+1 0.5 -> 9.5 Inexact Rounded -pwsx2271 power 9E+2 0.5 -> 30 Inexact Rounded -pwsx2272 power 9E+3 0.5 -> 95 Inexact Rounded -pwsx2273 power 0.10 0.5 -> 0.32 Inexact Rounded -pwsx2274 power 0.010 0.5 -> 0.10 Inexact Rounded -pwsx2275 power 10.0E-1 0.5 -> 1.0 Inexact Rounded -pwsx2276 power 10.00E-2 0.5 -> 0.32 Inexact Rounded -pwsx2277 power 10E-3 0.5 -> 0.10 Inexact Rounded -pwsx2278 power 10E+1 0.5 -> 10 Inexact Rounded -pwsx2279 power 10E+2 0.5 -> 32 Inexact Rounded -pwsx2280 power 10E+3 0.5 -> 1.0E+2 Inexact Rounded -pwsx2281 power 0.11 0.5 -> 0.33 Inexact Rounded -pwsx2282 power 0.011 0.5 -> 0.10 Inexact Rounded -pwsx2283 power 11.0E-1 0.5 -> 1.0 Inexact Rounded -pwsx2284 power 11.00E-2 0.5 -> 0.33 Inexact Rounded -pwsx2285 power 11E-3 0.5 -> 0.10 Inexact Rounded -pwsx2286 power 11E+1 0.5 -> 10 Inexact Rounded -pwsx2287 power 11E+2 0.5 -> 33 Inexact Rounded -pwsx2288 power 11E+3 0.5 -> 1.0E+2 Inexact Rounded -pwsx2289 power 0.12 0.5 -> 0.35 Inexact Rounded -pwsx2290 power 0.012 0.5 -> 0.11 Inexact Rounded -pwsx2291 power 12.0E-1 0.5 -> 1.1 Inexact Rounded -pwsx2292 power 12.00E-2 0.5 -> 0.35 Inexact Rounded -pwsx2293 power 12E-3 0.5 -> 0.11 Inexact Rounded -pwsx2294 power 12E+1 0.5 -> 11 Inexact Rounded -pwsx2295 power 12E+2 0.5 -> 35 Inexact Rounded -pwsx2296 power 12E+3 0.5 -> 1.1E+2 Inexact Rounded -pwsx2297 power 0.13 0.5 -> 0.36 Inexact Rounded -pwsx2298 power 0.013 0.5 -> 0.11 Inexact Rounded -pwsx2299 power 13.0E-1 0.5 -> 1.1 Inexact Rounded -pwsx2300 power 13.00E-2 0.5 -> 0.36 Inexact Rounded -pwsx2301 power 13E-3 0.5 -> 0.11 Inexact Rounded -pwsx2302 power 13E+1 0.5 -> 11 Inexact Rounded -pwsx2303 power 13E+2 0.5 -> 36 Inexact Rounded -pwsx2304 power 13E+3 0.5 -> 1.1E+2 Inexact Rounded -pwsx2305 power 0.14 0.5 -> 0.37 Inexact Rounded -pwsx2306 power 0.014 0.5 -> 0.12 Inexact Rounded -pwsx2307 power 14.0E-1 0.5 -> 1.2 Inexact Rounded -pwsx2308 power 14.00E-2 0.5 -> 0.37 Inexact Rounded -pwsx2309 power 14E-3 0.5 -> 0.12 Inexact Rounded -pwsx2310 power 14E+1 0.5 -> 12 Inexact Rounded -pwsx2311 power 14E+2 0.5 -> 37 Inexact Rounded -pwsx2312 power 14E+3 0.5 -> 1.2E+2 Inexact Rounded -pwsx2313 power 0.15 0.5 -> 0.39 Inexact Rounded -pwsx2314 power 0.015 0.5 -> 0.12 Inexact Rounded -pwsx2315 power 15.0E-1 0.5 -> 1.2 Inexact Rounded -pwsx2316 power 15.00E-2 0.5 -> 0.39 Inexact Rounded -pwsx2317 power 15E-3 0.5 -> 0.12 Inexact Rounded -pwsx2318 power 15E+1 0.5 -> 12 Inexact Rounded -pwsx2319 power 15E+2 0.5 -> 39 Inexact Rounded -pwsx2320 power 15E+3 0.5 -> 1.2E+2 Inexact Rounded -pwsx2321 power 0.16 0.5 -> 0.40 Inexact Rounded -pwsx2322 power 0.016 0.5 -> 0.13 Inexact Rounded -pwsx2323 power 16.0E-1 0.5 -> 1.3 Inexact Rounded -pwsx2324 power 16.00E-2 0.5 -> 0.40 Inexact Rounded -pwsx2325 power 16E-3 0.5 -> 0.13 Inexact Rounded -pwsx2326 power 16E+1 0.5 -> 13 Inexact Rounded -pwsx2327 power 16E+2 0.5 -> 40 Inexact Rounded -pwsx2328 power 16E+3 0.5 -> 1.3E+2 Inexact Rounded -pwsx2329 power 0.17 0.5 -> 0.41 Inexact Rounded -pwsx2330 power 0.017 0.5 -> 0.13 Inexact Rounded -pwsx2331 power 17.0E-1 0.5 -> 1.3 Inexact Rounded -pwsx2332 power 17.00E-2 0.5 -> 0.41 Inexact Rounded -pwsx2333 power 17E-3 0.5 -> 0.13 Inexact Rounded -pwsx2334 power 17E+1 0.5 -> 13 Inexact Rounded -pwsx2335 power 17E+2 0.5 -> 41 Inexact Rounded -pwsx2336 power 17E+3 0.5 -> 1.3E+2 Inexact Rounded -pwsx2337 power 0.18 0.5 -> 0.42 Inexact Rounded -pwsx2338 power 0.018 0.5 -> 0.13 Inexact Rounded -pwsx2339 power 18.0E-1 0.5 -> 1.3 Inexact Rounded -pwsx2340 power 18.00E-2 0.5 -> 0.42 Inexact Rounded -pwsx2341 power 18E-3 0.5 -> 0.13 Inexact Rounded -pwsx2342 power 18E+1 0.5 -> 13 Inexact Rounded -pwsx2343 power 18E+2 0.5 -> 42 Inexact Rounded -pwsx2344 power 18E+3 0.5 -> 1.3E+2 Inexact Rounded -pwsx2345 power 0.19 0.5 -> 0.44 Inexact Rounded -pwsx2346 power 0.019 0.5 -> 0.14 Inexact Rounded -pwsx2347 power 19.0E-1 0.5 -> 1.4 Inexact Rounded -pwsx2348 power 19.00E-2 0.5 -> 0.44 Inexact Rounded -pwsx2349 power 19E-3 0.5 -> 0.14 Inexact Rounded -pwsx2350 power 19E+1 0.5 -> 14 Inexact Rounded -pwsx2351 power 19E+2 0.5 -> 44 Inexact Rounded -pwsx2352 power 19E+3 0.5 -> 1.4E+2 Inexact Rounded -pwsx2353 power 0.20 0.5 -> 0.45 Inexact Rounded -pwsx2354 power 0.020 0.5 -> 0.14 Inexact Rounded -pwsx2355 power 20.0E-1 0.5 -> 1.4 Inexact Rounded -pwsx2356 power 20.00E-2 0.5 -> 0.45 Inexact Rounded -pwsx2357 power 20E-3 0.5 -> 0.14 Inexact Rounded -pwsx2358 power 20E+1 0.5 -> 14 Inexact Rounded -pwsx2359 power 20E+2 0.5 -> 45 Inexact Rounded -pwsx2360 power 20E+3 0.5 -> 1.4E+2 Inexact Rounded -pwsx2361 power 0.21 0.5 -> 0.46 Inexact Rounded -pwsx2362 power 0.021 0.5 -> 0.14 Inexact Rounded -pwsx2363 power 21.0E-1 0.5 -> 1.4 Inexact Rounded -pwsx2364 power 21.00E-2 0.5 -> 0.46 Inexact Rounded -pwsx2365 power 21E-3 0.5 -> 0.14 Inexact Rounded -pwsx2366 power 21E+1 0.5 -> 14 Inexact Rounded -pwsx2367 power 21E+2 0.5 -> 46 Inexact Rounded -pwsx2368 power 21E+3 0.5 -> 1.4E+2 Inexact Rounded -pwsx2369 power 0.22 0.5 -> 0.47 Inexact Rounded -pwsx2370 power 0.022 0.5 -> 0.15 Inexact Rounded -pwsx2371 power 22.0E-1 0.5 -> 1.5 Inexact Rounded -pwsx2372 power 22.00E-2 0.5 -> 0.47 Inexact Rounded -pwsx2373 power 22E-3 0.5 -> 0.15 Inexact Rounded -pwsx2374 power 22E+1 0.5 -> 15 Inexact Rounded -pwsx2375 power 22E+2 0.5 -> 47 Inexact Rounded -pwsx2376 power 22E+3 0.5 -> 1.5E+2 Inexact Rounded -pwsx2377 power 0.23 0.5 -> 0.48 Inexact Rounded -pwsx2378 power 0.023 0.5 -> 0.15 Inexact Rounded -pwsx2379 power 23.0E-1 0.5 -> 1.5 Inexact Rounded -pwsx2380 power 23.00E-2 0.5 -> 0.48 Inexact Rounded -pwsx2381 power 23E-3 0.5 -> 0.15 Inexact Rounded -pwsx2382 power 23E+1 0.5 -> 15 Inexact Rounded -pwsx2383 power 23E+2 0.5 -> 48 Inexact Rounded -pwsx2384 power 23E+3 0.5 -> 1.5E+2 Inexact Rounded -pwsx2385 power 0.24 0.5 -> 0.49 Inexact Rounded -pwsx2386 power 0.024 0.5 -> 0.15 Inexact Rounded -pwsx2387 power 24.0E-1 0.5 -> 1.5 Inexact Rounded -pwsx2388 power 24.00E-2 0.5 -> 0.49 Inexact Rounded -pwsx2389 power 24E-3 0.5 -> 0.15 Inexact Rounded -pwsx2390 power 24E+1 0.5 -> 15 Inexact Rounded -pwsx2391 power 24E+2 0.5 -> 49 Inexact Rounded -pwsx2392 power 24E+3 0.5 -> 1.5E+2 Inexact Rounded -pwsx2393 power 0.25 0.5 -> 0.50 Inexact Rounded -pwsx2394 power 0.025 0.5 -> 0.16 Inexact Rounded -pwsx2395 power 25.0E-1 0.5 -> 1.6 Inexact Rounded -pwsx2396 power 25.00E-2 0.5 -> 0.50 Inexact Rounded -pwsx2397 power 25E-3 0.5 -> 0.16 Inexact Rounded -pwsx2398 power 25E+1 0.5 -> 16 Inexact Rounded -pwsx2399 power 25E+2 0.5 -> 50 Inexact Rounded -pwsx2400 power 25E+3 0.5 -> 1.6E+2 Inexact Rounded -pwsx2401 power 0.26 0.5 -> 0.51 Inexact Rounded -pwsx2402 power 0.026 0.5 -> 0.16 Inexact Rounded -pwsx2403 power 26.0E-1 0.5 -> 1.6 Inexact Rounded -pwsx2404 power 26.00E-2 0.5 -> 0.51 Inexact Rounded -pwsx2405 power 26E-3 0.5 -> 0.16 Inexact Rounded -pwsx2406 power 26E+1 0.5 -> 16 Inexact Rounded -pwsx2407 power 26E+2 0.5 -> 51 Inexact Rounded -pwsx2408 power 26E+3 0.5 -> 1.6E+2 Inexact Rounded -pwsx2409 power 0.27 0.5 -> 0.52 Inexact Rounded -pwsx2410 power 0.027 0.5 -> 0.16 Inexact Rounded -pwsx2411 power 27.0E-1 0.5 -> 1.6 Inexact Rounded -pwsx2412 power 27.00E-2 0.5 -> 0.52 Inexact Rounded -pwsx2413 power 27E-3 0.5 -> 0.16 Inexact Rounded -pwsx2414 power 27E+1 0.5 -> 16 Inexact Rounded -pwsx2415 power 27E+2 0.5 -> 52 Inexact Rounded -pwsx2416 power 27E+3 0.5 -> 1.6E+2 Inexact Rounded -pwsx2417 power 0.28 0.5 -> 0.53 Inexact Rounded -pwsx2418 power 0.028 0.5 -> 0.17 Inexact Rounded -pwsx2419 power 28.0E-1 0.5 -> 1.7 Inexact Rounded -pwsx2420 power 28.00E-2 0.5 -> 0.53 Inexact Rounded -pwsx2421 power 28E-3 0.5 -> 0.17 Inexact Rounded -pwsx2422 power 28E+1 0.5 -> 17 Inexact Rounded -pwsx2423 power 28E+2 0.5 -> 53 Inexact Rounded -pwsx2424 power 28E+3 0.5 -> 1.7E+2 Inexact Rounded -pwsx2425 power 0.29 0.5 -> 0.54 Inexact Rounded -pwsx2426 power 0.029 0.5 -> 0.17 Inexact Rounded -pwsx2427 power 29.0E-1 0.5 -> 1.7 Inexact Rounded -pwsx2428 power 29.00E-2 0.5 -> 0.54 Inexact Rounded -pwsx2429 power 29E-3 0.5 -> 0.17 Inexact Rounded -pwsx2430 power 29E+1 0.5 -> 17 Inexact Rounded -pwsx2431 power 29E+2 0.5 -> 54 Inexact Rounded -pwsx2432 power 29E+3 0.5 -> 1.7E+2 Inexact Rounded -pwsx2433 power 0.30 0.5 -> 0.55 Inexact Rounded -pwsx2434 power 0.030 0.5 -> 0.17 Inexact Rounded -pwsx2435 power 30.0E-1 0.5 -> 1.7 Inexact Rounded -pwsx2436 power 30.00E-2 0.5 -> 0.55 Inexact Rounded -pwsx2437 power 30E-3 0.5 -> 0.17 Inexact Rounded -pwsx2438 power 30E+1 0.5 -> 17 Inexact Rounded -pwsx2439 power 30E+2 0.5 -> 55 Inexact Rounded -pwsx2440 power 30E+3 0.5 -> 1.7E+2 Inexact Rounded -pwsx2441 power 0.31 0.5 -> 0.56 Inexact Rounded -pwsx2442 power 0.031 0.5 -> 0.18 Inexact Rounded -pwsx2443 power 31.0E-1 0.5 -> 1.8 Inexact Rounded -pwsx2444 power 31.00E-2 0.5 -> 0.56 Inexact Rounded -pwsx2445 power 31E-3 0.5 -> 0.18 Inexact Rounded -pwsx2446 power 31E+1 0.5 -> 18 Inexact Rounded -pwsx2447 power 31E+2 0.5 -> 56 Inexact Rounded -pwsx2448 power 31E+3 0.5 -> 1.8E+2 Inexact Rounded -pwsx2449 power 0.32 0.5 -> 0.57 Inexact Rounded -pwsx2450 power 0.032 0.5 -> 0.18 Inexact Rounded -pwsx2451 power 32.0E-1 0.5 -> 1.8 Inexact Rounded -pwsx2452 power 32.00E-2 0.5 -> 0.57 Inexact Rounded -pwsx2453 power 32E-3 0.5 -> 0.18 Inexact Rounded -pwsx2454 power 32E+1 0.5 -> 18 Inexact Rounded -pwsx2455 power 32E+2 0.5 -> 57 Inexact Rounded -pwsx2456 power 32E+3 0.5 -> 1.8E+2 Inexact Rounded -pwsx2457 power 0.33 0.5 -> 0.57 Inexact Rounded -pwsx2458 power 0.033 0.5 -> 0.18 Inexact Rounded -pwsx2459 power 33.0E-1 0.5 -> 1.8 Inexact Rounded -pwsx2460 power 33.00E-2 0.5 -> 0.57 Inexact Rounded -pwsx2461 power 33E-3 0.5 -> 0.18 Inexact Rounded -pwsx2462 power 33E+1 0.5 -> 18 Inexact Rounded -pwsx2463 power 33E+2 0.5 -> 57 Inexact Rounded -pwsx2464 power 33E+3 0.5 -> 1.8E+2 Inexact Rounded -pwsx2465 power 0.34 0.5 -> 0.58 Inexact Rounded -pwsx2466 power 0.034 0.5 -> 0.18 Inexact Rounded -pwsx2467 power 34.0E-1 0.5 -> 1.8 Inexact Rounded -pwsx2468 power 34.00E-2 0.5 -> 0.58 Inexact Rounded -pwsx2469 power 34E-3 0.5 -> 0.18 Inexact Rounded -pwsx2470 power 34E+1 0.5 -> 18 Inexact Rounded -pwsx2471 power 34E+2 0.5 -> 58 Inexact Rounded -pwsx2472 power 34E+3 0.5 -> 1.8E+2 Inexact Rounded -pwsx2473 power 0.35 0.5 -> 0.59 Inexact Rounded -pwsx2474 power 0.035 0.5 -> 0.19 Inexact Rounded -pwsx2475 power 35.0E-1 0.5 -> 1.9 Inexact Rounded -pwsx2476 power 35.00E-2 0.5 -> 0.59 Inexact Rounded -pwsx2477 power 35E-3 0.5 -> 0.19 Inexact Rounded -pwsx2478 power 35E+1 0.5 -> 19 Inexact Rounded -pwsx2479 power 35E+2 0.5 -> 59 Inexact Rounded -pwsx2480 power 35E+3 0.5 -> 1.9E+2 Inexact Rounded -pwsx2481 power 0.36 0.5 -> 0.60 Inexact Rounded -pwsx2482 power 0.036 0.5 -> 0.19 Inexact Rounded -pwsx2483 power 36.0E-1 0.5 -> 1.9 Inexact Rounded -pwsx2484 power 36.00E-2 0.5 -> 0.60 Inexact Rounded -pwsx2485 power 36E-3 0.5 -> 0.19 Inexact Rounded -pwsx2486 power 36E+1 0.5 -> 19 Inexact Rounded -pwsx2487 power 36E+2 0.5 -> 60 Inexact Rounded -pwsx2488 power 36E+3 0.5 -> 1.9E+2 Inexact Rounded -pwsx2489 power 0.37 0.5 -> 0.61 Inexact Rounded -pwsx2490 power 0.037 0.5 -> 0.19 Inexact Rounded -pwsx2491 power 37.0E-1 0.5 -> 1.9 Inexact Rounded -pwsx2492 power 37.00E-2 0.5 -> 0.61 Inexact Rounded -pwsx2493 power 37E-3 0.5 -> 0.19 Inexact Rounded -pwsx2494 power 37E+1 0.5 -> 19 Inexact Rounded -pwsx2495 power 37E+2 0.5 -> 61 Inexact Rounded -pwsx2496 power 37E+3 0.5 -> 1.9E+2 Inexact Rounded -pwsx2497 power 0.38 0.5 -> 0.62 Inexact Rounded -pwsx2498 power 0.038 0.5 -> 0.19 Inexact Rounded -pwsx2499 power 38.0E-1 0.5 -> 1.9 Inexact Rounded -pwsx2500 power 38.00E-2 0.5 -> 0.62 Inexact Rounded -pwsx2501 power 38E-3 0.5 -> 0.19 Inexact Rounded -pwsx2502 power 38E+1 0.5 -> 19 Inexact Rounded -pwsx2503 power 38E+2 0.5 -> 62 Inexact Rounded -pwsx2504 power 38E+3 0.5 -> 1.9E+2 Inexact Rounded -pwsx2505 power 0.39 0.5 -> 0.62 Inexact Rounded -pwsx2506 power 0.039 0.5 -> 0.20 Inexact Rounded -pwsx2507 power 39.0E-1 0.5 -> 2.0 Inexact Rounded -pwsx2508 power 39.00E-2 0.5 -> 0.62 Inexact Rounded -pwsx2509 power 39E-3 0.5 -> 0.20 Inexact Rounded -pwsx2510 power 39E+1 0.5 -> 20 Inexact Rounded -pwsx2511 power 39E+2 0.5 -> 62 Inexact Rounded -pwsx2512 power 39E+3 0.5 -> 2.0E+2 Inexact Rounded -pwsx2513 power 0.40 0.5 -> 0.63 Inexact Rounded -pwsx2514 power 0.040 0.5 -> 0.20 Inexact Rounded -pwsx2515 power 40.0E-1 0.5 -> 2.0 Inexact Rounded -pwsx2516 power 40.00E-2 0.5 -> 0.63 Inexact Rounded -pwsx2517 power 40E-3 0.5 -> 0.20 Inexact Rounded -pwsx2518 power 40E+1 0.5 -> 20 Inexact Rounded -pwsx2519 power 40E+2 0.5 -> 63 Inexact Rounded -pwsx2520 power 40E+3 0.5 -> 2.0E+2 Inexact Rounded -pwsx2521 power 0.41 0.5 -> 0.64 Inexact Rounded -pwsx2522 power 0.041 0.5 -> 0.20 Inexact Rounded -pwsx2523 power 41.0E-1 0.5 -> 2.0 Inexact Rounded -pwsx2524 power 41.00E-2 0.5 -> 0.64 Inexact Rounded -pwsx2525 power 41E-3 0.5 -> 0.20 Inexact Rounded -pwsx2526 power 41E+1 0.5 -> 20 Inexact Rounded -pwsx2527 power 41E+2 0.5 -> 64 Inexact Rounded -pwsx2528 power 41E+3 0.5 -> 2.0E+2 Inexact Rounded -pwsx2529 power 0.42 0.5 -> 0.65 Inexact Rounded -pwsx2530 power 0.042 0.5 -> 0.20 Inexact Rounded -pwsx2531 power 42.0E-1 0.5 -> 2.0 Inexact Rounded -pwsx2532 power 42.00E-2 0.5 -> 0.65 Inexact Rounded -pwsx2533 power 42E-3 0.5 -> 0.20 Inexact Rounded -pwsx2534 power 42E+1 0.5 -> 20 Inexact Rounded -pwsx2535 power 42E+2 0.5 -> 65 Inexact Rounded -pwsx2536 power 42E+3 0.5 -> 2.0E+2 Inexact Rounded -pwsx2537 power 0.43 0.5 -> 0.66 Inexact Rounded -pwsx2538 power 0.043 0.5 -> 0.21 Inexact Rounded -pwsx2539 power 43.0E-1 0.5 -> 2.1 Inexact Rounded -pwsx2540 power 43.00E-2 0.5 -> 0.66 Inexact Rounded -pwsx2541 power 43E-3 0.5 -> 0.21 Inexact Rounded -pwsx2542 power 43E+1 0.5 -> 21 Inexact Rounded -pwsx2543 power 43E+2 0.5 -> 66 Inexact Rounded -pwsx2544 power 43E+3 0.5 -> 2.1E+2 Inexact Rounded -pwsx2545 power 0.44 0.5 -> 0.66 Inexact Rounded -pwsx2546 power 0.044 0.5 -> 0.21 Inexact Rounded -pwsx2547 power 44.0E-1 0.5 -> 2.1 Inexact Rounded -pwsx2548 power 44.00E-2 0.5 -> 0.66 Inexact Rounded -pwsx2549 power 44E-3 0.5 -> 0.21 Inexact Rounded -pwsx2550 power 44E+1 0.5 -> 21 Inexact Rounded -pwsx2551 power 44E+2 0.5 -> 66 Inexact Rounded -pwsx2552 power 44E+3 0.5 -> 2.1E+2 Inexact Rounded -pwsx2553 power 0.45 0.5 -> 0.67 Inexact Rounded -pwsx2554 power 0.045 0.5 -> 0.21 Inexact Rounded -pwsx2555 power 45.0E-1 0.5 -> 2.1 Inexact Rounded -pwsx2556 power 45.00E-2 0.5 -> 0.67 Inexact Rounded -pwsx2557 power 45E-3 0.5 -> 0.21 Inexact Rounded -pwsx2558 power 45E+1 0.5 -> 21 Inexact Rounded -pwsx2559 power 45E+2 0.5 -> 67 Inexact Rounded -pwsx2560 power 45E+3 0.5 -> 2.1E+2 Inexact Rounded -pwsx2561 power 0.46 0.5 -> 0.68 Inexact Rounded -pwsx2562 power 0.046 0.5 -> 0.21 Inexact Rounded -pwsx2563 power 46.0E-1 0.5 -> 2.1 Inexact Rounded -pwsx2564 power 46.00E-2 0.5 -> 0.68 Inexact Rounded -pwsx2565 power 46E-3 0.5 -> 0.21 Inexact Rounded -pwsx2566 power 46E+1 0.5 -> 21 Inexact Rounded -pwsx2567 power 46E+2 0.5 -> 68 Inexact Rounded -pwsx2568 power 46E+3 0.5 -> 2.1E+2 Inexact Rounded -pwsx2569 power 0.47 0.5 -> 0.69 Inexact Rounded -pwsx2570 power 0.047 0.5 -> 0.22 Inexact Rounded -pwsx2571 power 47.0E-1 0.5 -> 2.2 Inexact Rounded -pwsx2572 power 47.00E-2 0.5 -> 0.69 Inexact Rounded -pwsx2573 power 47E-3 0.5 -> 0.22 Inexact Rounded -pwsx2574 power 47E+1 0.5 -> 22 Inexact Rounded -pwsx2575 power 47E+2 0.5 -> 69 Inexact Rounded -pwsx2576 power 47E+3 0.5 -> 2.2E+2 Inexact Rounded -pwsx2577 power 0.48 0.5 -> 0.69 Inexact Rounded -pwsx2578 power 0.048 0.5 -> 0.22 Inexact Rounded -pwsx2579 power 48.0E-1 0.5 -> 2.2 Inexact Rounded -pwsx2580 power 48.00E-2 0.5 -> 0.69 Inexact Rounded -pwsx2581 power 48E-3 0.5 -> 0.22 Inexact Rounded -pwsx2582 power 48E+1 0.5 -> 22 Inexact Rounded -pwsx2583 power 48E+2 0.5 -> 69 Inexact Rounded -pwsx2584 power 48E+3 0.5 -> 2.2E+2 Inexact Rounded -pwsx2585 power 0.49 0.5 -> 0.70 Inexact Rounded -pwsx2586 power 0.049 0.5 -> 0.22 Inexact Rounded -pwsx2587 power 49.0E-1 0.5 -> 2.2 Inexact Rounded -pwsx2588 power 49.00E-2 0.5 -> 0.70 Inexact Rounded -pwsx2589 power 49E-3 0.5 -> 0.22 Inexact Rounded -pwsx2590 power 49E+1 0.5 -> 22 Inexact Rounded -pwsx2591 power 49E+2 0.5 -> 70 Inexact Rounded -pwsx2592 power 49E+3 0.5 -> 2.2E+2 Inexact Rounded -pwsx2593 power 0.50 0.5 -> 0.71 Inexact Rounded -pwsx2594 power 0.050 0.5 -> 0.22 Inexact Rounded -pwsx2595 power 50.0E-1 0.5 -> 2.2 Inexact Rounded -pwsx2596 power 50.00E-2 0.5 -> 0.71 Inexact Rounded -pwsx2597 power 50E-3 0.5 -> 0.22 Inexact Rounded -pwsx2598 power 50E+1 0.5 -> 22 Inexact Rounded -pwsx2599 power 50E+2 0.5 -> 71 Inexact Rounded -pwsx2600 power 50E+3 0.5 -> 2.2E+2 Inexact Rounded -pwsx2601 power 0.51 0.5 -> 0.71 Inexact Rounded -pwsx2602 power 0.051 0.5 -> 0.23 Inexact Rounded -pwsx2603 power 51.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2604 power 51.00E-2 0.5 -> 0.71 Inexact Rounded -pwsx2605 power 51E-3 0.5 -> 0.23 Inexact Rounded -pwsx2606 power 51E+1 0.5 -> 23 Inexact Rounded -pwsx2607 power 51E+2 0.5 -> 71 Inexact Rounded -pwsx2608 power 51E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2609 power 0.52 0.5 -> 0.72 Inexact Rounded -pwsx2610 power 0.052 0.5 -> 0.23 Inexact Rounded -pwsx2611 power 52.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2612 power 52.00E-2 0.5 -> 0.72 Inexact Rounded -pwsx2613 power 52E-3 0.5 -> 0.23 Inexact Rounded -pwsx2614 power 52E+1 0.5 -> 23 Inexact Rounded -pwsx2615 power 52E+2 0.5 -> 72 Inexact Rounded -pwsx2616 power 52E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2617 power 0.53 0.5 -> 0.73 Inexact Rounded -pwsx2618 power 0.053 0.5 -> 0.23 Inexact Rounded -pwsx2619 power 53.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2620 power 53.00E-2 0.5 -> 0.73 Inexact Rounded -pwsx2621 power 53E-3 0.5 -> 0.23 Inexact Rounded -pwsx2622 power 53E+1 0.5 -> 23 Inexact Rounded -pwsx2623 power 53E+2 0.5 -> 73 Inexact Rounded -pwsx2624 power 53E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2625 power 0.54 0.5 -> 0.73 Inexact Rounded -pwsx2626 power 0.054 0.5 -> 0.23 Inexact Rounded -pwsx2627 power 54.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2628 power 54.00E-2 0.5 -> 0.73 Inexact Rounded -pwsx2629 power 54E-3 0.5 -> 0.23 Inexact Rounded -pwsx2630 power 54E+1 0.5 -> 23 Inexact Rounded -pwsx2631 power 54E+2 0.5 -> 73 Inexact Rounded -pwsx2632 power 54E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2633 power 0.55 0.5 -> 0.74 Inexact Rounded -pwsx2634 power 0.055 0.5 -> 0.23 Inexact Rounded -pwsx2635 power 55.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2636 power 55.00E-2 0.5 -> 0.74 Inexact Rounded -pwsx2637 power 55E-3 0.5 -> 0.23 Inexact Rounded -pwsx2638 power 55E+1 0.5 -> 23 Inexact Rounded -pwsx2639 power 55E+2 0.5 -> 74 Inexact Rounded -pwsx2640 power 55E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2641 power 0.56 0.5 -> 0.75 Inexact Rounded -pwsx2642 power 0.056 0.5 -> 0.24 Inexact Rounded -pwsx2643 power 56.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2644 power 56.00E-2 0.5 -> 0.75 Inexact Rounded -pwsx2645 power 56E-3 0.5 -> 0.24 Inexact Rounded -pwsx2646 power 56E+1 0.5 -> 24 Inexact Rounded -pwsx2647 power 56E+2 0.5 -> 75 Inexact Rounded -pwsx2648 power 56E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2649 power 0.57 0.5 -> 0.75 Inexact Rounded -pwsx2650 power 0.057 0.5 -> 0.24 Inexact Rounded -pwsx2651 power 57.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2652 power 57.00E-2 0.5 -> 0.75 Inexact Rounded -pwsx2653 power 57E-3 0.5 -> 0.24 Inexact Rounded -pwsx2654 power 57E+1 0.5 -> 24 Inexact Rounded -pwsx2655 power 57E+2 0.5 -> 75 Inexact Rounded -pwsx2656 power 57E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2657 power 0.58 0.5 -> 0.76 Inexact Rounded -pwsx2658 power 0.058 0.5 -> 0.24 Inexact Rounded -pwsx2659 power 58.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2660 power 58.00E-2 0.5 -> 0.76 Inexact Rounded -pwsx2661 power 58E-3 0.5 -> 0.24 Inexact Rounded -pwsx2662 power 58E+1 0.5 -> 24 Inexact Rounded -pwsx2663 power 58E+2 0.5 -> 76 Inexact Rounded -pwsx2664 power 58E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2665 power 0.59 0.5 -> 0.77 Inexact Rounded -pwsx2666 power 0.059 0.5 -> 0.24 Inexact Rounded -pwsx2667 power 59.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2668 power 59.00E-2 0.5 -> 0.77 Inexact Rounded -pwsx2669 power 59E-3 0.5 -> 0.24 Inexact Rounded -pwsx2670 power 59E+1 0.5 -> 24 Inexact Rounded -pwsx2671 power 59E+2 0.5 -> 77 Inexact Rounded -pwsx2672 power 59E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2673 power 0.60 0.5 -> 0.77 Inexact Rounded -pwsx2674 power 0.060 0.5 -> 0.24 Inexact Rounded -pwsx2675 power 60.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2676 power 60.00E-2 0.5 -> 0.77 Inexact Rounded -pwsx2677 power 60E-3 0.5 -> 0.24 Inexact Rounded -pwsx2678 power 60E+1 0.5 -> 24 Inexact Rounded -pwsx2679 power 60E+2 0.5 -> 77 Inexact Rounded -pwsx2680 power 60E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2681 power 0.61 0.5 -> 0.78 Inexact Rounded -pwsx2682 power 0.061 0.5 -> 0.25 Inexact Rounded -pwsx2683 power 61.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2684 power 61.00E-2 0.5 -> 0.78 Inexact Rounded -pwsx2685 power 61E-3 0.5 -> 0.25 Inexact Rounded -pwsx2686 power 61E+1 0.5 -> 25 Inexact Rounded -pwsx2687 power 61E+2 0.5 -> 78 Inexact Rounded -pwsx2688 power 61E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2689 power 0.62 0.5 -> 0.79 Inexact Rounded -pwsx2690 power 0.062 0.5 -> 0.25 Inexact Rounded -pwsx2691 power 62.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2692 power 62.00E-2 0.5 -> 0.79 Inexact Rounded -pwsx2693 power 62E-3 0.5 -> 0.25 Inexact Rounded -pwsx2694 power 62E+1 0.5 -> 25 Inexact Rounded -pwsx2695 power 62E+2 0.5 -> 79 Inexact Rounded -pwsx2696 power 62E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2697 power 0.63 0.5 -> 0.79 Inexact Rounded -pwsx2698 power 0.063 0.5 -> 0.25 Inexact Rounded -pwsx2699 power 63.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2700 power 63.00E-2 0.5 -> 0.79 Inexact Rounded -pwsx2701 power 63E-3 0.5 -> 0.25 Inexact Rounded -pwsx2702 power 63E+1 0.5 -> 25 Inexact Rounded -pwsx2703 power 63E+2 0.5 -> 79 Inexact Rounded -pwsx2704 power 63E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2705 power 0.64 0.5 -> 0.80 Inexact Rounded -pwsx2706 power 0.064 0.5 -> 0.25 Inexact Rounded -pwsx2707 power 64.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2708 power 64.00E-2 0.5 -> 0.80 Inexact Rounded -pwsx2709 power 64E-3 0.5 -> 0.25 Inexact Rounded -pwsx2710 power 64E+1 0.5 -> 25 Inexact Rounded -pwsx2711 power 64E+2 0.5 -> 80 Inexact Rounded -pwsx2712 power 64E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2713 power 0.65 0.5 -> 0.81 Inexact Rounded -pwsx2714 power 0.065 0.5 -> 0.25 Inexact Rounded -pwsx2715 power 65.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2716 power 65.00E-2 0.5 -> 0.81 Inexact Rounded -pwsx2717 power 65E-3 0.5 -> 0.25 Inexact Rounded -pwsx2718 power 65E+1 0.5 -> 25 Inexact Rounded -pwsx2719 power 65E+2 0.5 -> 81 Inexact Rounded -pwsx2720 power 65E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2721 power 0.66 0.5 -> 0.81 Inexact Rounded -pwsx2722 power 0.066 0.5 -> 0.26 Inexact Rounded -pwsx2723 power 66.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2724 power 66.00E-2 0.5 -> 0.81 Inexact Rounded -pwsx2725 power 66E-3 0.5 -> 0.26 Inexact Rounded -pwsx2726 power 66E+1 0.5 -> 26 Inexact Rounded -pwsx2727 power 66E+2 0.5 -> 81 Inexact Rounded -pwsx2728 power 66E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2729 power 0.67 0.5 -> 0.82 Inexact Rounded -pwsx2730 power 0.067 0.5 -> 0.26 Inexact Rounded -pwsx2731 power 67.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2732 power 67.00E-2 0.5 -> 0.82 Inexact Rounded -pwsx2733 power 67E-3 0.5 -> 0.26 Inexact Rounded -pwsx2734 power 67E+1 0.5 -> 26 Inexact Rounded -pwsx2735 power 67E+2 0.5 -> 82 Inexact Rounded -pwsx2736 power 67E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2737 power 0.68 0.5 -> 0.82 Inexact Rounded -pwsx2738 power 0.068 0.5 -> 0.26 Inexact Rounded -pwsx2739 power 68.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2740 power 68.00E-2 0.5 -> 0.82 Inexact Rounded -pwsx2741 power 68E-3 0.5 -> 0.26 Inexact Rounded -pwsx2742 power 68E+1 0.5 -> 26 Inexact Rounded -pwsx2743 power 68E+2 0.5 -> 82 Inexact Rounded -pwsx2744 power 68E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2745 power 0.69 0.5 -> 0.83 Inexact Rounded -pwsx2746 power 0.069 0.5 -> 0.26 Inexact Rounded -pwsx2747 power 69.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2748 power 69.00E-2 0.5 -> 0.83 Inexact Rounded -pwsx2749 power 69E-3 0.5 -> 0.26 Inexact Rounded -pwsx2750 power 69E+1 0.5 -> 26 Inexact Rounded -pwsx2751 power 69E+2 0.5 -> 83 Inexact Rounded -pwsx2752 power 69E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2753 power 0.70 0.5 -> 0.84 Inexact Rounded -pwsx2754 power 0.070 0.5 -> 0.26 Inexact Rounded -pwsx2755 power 70.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2756 power 70.00E-2 0.5 -> 0.84 Inexact Rounded -pwsx2757 power 70E-3 0.5 -> 0.26 Inexact Rounded -pwsx2758 power 70E+1 0.5 -> 26 Inexact Rounded -pwsx2759 power 70E+2 0.5 -> 84 Inexact Rounded -pwsx2760 power 70E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2761 power 0.71 0.5 -> 0.84 Inexact Rounded -pwsx2762 power 0.071 0.5 -> 0.27 Inexact Rounded -pwsx2763 power 71.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2764 power 71.00E-2 0.5 -> 0.84 Inexact Rounded -pwsx2765 power 71E-3 0.5 -> 0.27 Inexact Rounded -pwsx2766 power 71E+1 0.5 -> 27 Inexact Rounded -pwsx2767 power 71E+2 0.5 -> 84 Inexact Rounded -pwsx2768 power 71E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2769 power 0.72 0.5 -> 0.85 Inexact Rounded -pwsx2770 power 0.072 0.5 -> 0.27 Inexact Rounded -pwsx2771 power 72.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2772 power 72.00E-2 0.5 -> 0.85 Inexact Rounded -pwsx2773 power 72E-3 0.5 -> 0.27 Inexact Rounded -pwsx2774 power 72E+1 0.5 -> 27 Inexact Rounded -pwsx2775 power 72E+2 0.5 -> 85 Inexact Rounded -pwsx2776 power 72E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2777 power 0.73 0.5 -> 0.85 Inexact Rounded -pwsx2778 power 0.073 0.5 -> 0.27 Inexact Rounded -pwsx2779 power 73.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2780 power 73.00E-2 0.5 -> 0.85 Inexact Rounded -pwsx2781 power 73E-3 0.5 -> 0.27 Inexact Rounded -pwsx2782 power 73E+1 0.5 -> 27 Inexact Rounded -pwsx2783 power 73E+2 0.5 -> 85 Inexact Rounded -pwsx2784 power 73E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2785 power 0.74 0.5 -> 0.86 Inexact Rounded -pwsx2786 power 0.074 0.5 -> 0.27 Inexact Rounded -pwsx2787 power 74.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2788 power 74.00E-2 0.5 -> 0.86 Inexact Rounded -pwsx2789 power 74E-3 0.5 -> 0.27 Inexact Rounded -pwsx2790 power 74E+1 0.5 -> 27 Inexact Rounded -pwsx2791 power 74E+2 0.5 -> 86 Inexact Rounded -pwsx2792 power 74E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2793 power 0.75 0.5 -> 0.87 Inexact Rounded -pwsx2794 power 0.075 0.5 -> 0.27 Inexact Rounded -pwsx2795 power 75.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2796 power 75.00E-2 0.5 -> 0.87 Inexact Rounded -pwsx2797 power 75E-3 0.5 -> 0.27 Inexact Rounded -pwsx2798 power 75E+1 0.5 -> 27 Inexact Rounded -pwsx2799 power 75E+2 0.5 -> 87 Inexact Rounded -pwsx2800 power 75E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2801 power 0.76 0.5 -> 0.87 Inexact Rounded -pwsx2802 power 0.076 0.5 -> 0.28 Inexact Rounded -pwsx2803 power 76.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2804 power 76.00E-2 0.5 -> 0.87 Inexact Rounded -pwsx2805 power 76E-3 0.5 -> 0.28 Inexact Rounded -pwsx2806 power 76E+1 0.5 -> 28 Inexact Rounded -pwsx2807 power 76E+2 0.5 -> 87 Inexact Rounded -pwsx2808 power 76E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2809 power 0.77 0.5 -> 0.88 Inexact Rounded -pwsx2810 power 0.077 0.5 -> 0.28 Inexact Rounded -pwsx2811 power 77.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2812 power 77.00E-2 0.5 -> 0.88 Inexact Rounded -pwsx2813 power 77E-3 0.5 -> 0.28 Inexact Rounded -pwsx2814 power 77E+1 0.5 -> 28 Inexact Rounded -pwsx2815 power 77E+2 0.5 -> 88 Inexact Rounded -pwsx2816 power 77E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2817 power 0.78 0.5 -> 0.88 Inexact Rounded -pwsx2818 power 0.078 0.5 -> 0.28 Inexact Rounded -pwsx2819 power 78.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2820 power 78.00E-2 0.5 -> 0.88 Inexact Rounded -pwsx2821 power 78E-3 0.5 -> 0.28 Inexact Rounded -pwsx2822 power 78E+1 0.5 -> 28 Inexact Rounded -pwsx2823 power 78E+2 0.5 -> 88 Inexact Rounded -pwsx2824 power 78E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2825 power 0.79 0.5 -> 0.89 Inexact Rounded -pwsx2826 power 0.079 0.5 -> 0.28 Inexact Rounded -pwsx2827 power 79.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2828 power 79.00E-2 0.5 -> 0.89 Inexact Rounded -pwsx2829 power 79E-3 0.5 -> 0.28 Inexact Rounded -pwsx2830 power 79E+1 0.5 -> 28 Inexact Rounded -pwsx2831 power 79E+2 0.5 -> 89 Inexact Rounded -pwsx2832 power 79E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2833 power 0.80 0.5 -> 0.89 Inexact Rounded -pwsx2834 power 0.080 0.5 -> 0.28 Inexact Rounded -pwsx2835 power 80.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2836 power 80.00E-2 0.5 -> 0.89 Inexact Rounded -pwsx2837 power 80E-3 0.5 -> 0.28 Inexact Rounded -pwsx2838 power 80E+1 0.5 -> 28 Inexact Rounded -pwsx2839 power 80E+2 0.5 -> 89 Inexact Rounded -pwsx2840 power 80E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2841 power 0.81 0.5 -> 0.90 Inexact Rounded -pwsx2842 power 0.081 0.5 -> 0.28 Inexact Rounded -pwsx2843 power 81.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2844 power 81.00E-2 0.5 -> 0.90 Inexact Rounded -pwsx2845 power 81E-3 0.5 -> 0.28 Inexact Rounded -pwsx2846 power 81E+1 0.5 -> 28 Inexact Rounded -pwsx2847 power 81E+2 0.5 -> 90 Inexact Rounded -pwsx2848 power 81E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2849 power 0.82 0.5 -> 0.91 Inexact Rounded -pwsx2850 power 0.082 0.5 -> 0.29 Inexact Rounded -pwsx2851 power 82.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2852 power 82.00E-2 0.5 -> 0.91 Inexact Rounded -pwsx2853 power 82E-3 0.5 -> 0.29 Inexact Rounded -pwsx2854 power 82E+1 0.5 -> 29 Inexact Rounded -pwsx2855 power 82E+2 0.5 -> 91 Inexact Rounded -pwsx2856 power 82E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2857 power 0.83 0.5 -> 0.91 Inexact Rounded -pwsx2858 power 0.083 0.5 -> 0.29 Inexact Rounded -pwsx2859 power 83.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2860 power 83.00E-2 0.5 -> 0.91 Inexact Rounded -pwsx2861 power 83E-3 0.5 -> 0.29 Inexact Rounded -pwsx2862 power 83E+1 0.5 -> 29 Inexact Rounded -pwsx2863 power 83E+2 0.5 -> 91 Inexact Rounded -pwsx2864 power 83E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2865 power 0.84 0.5 -> 0.92 Inexact Rounded -pwsx2866 power 0.084 0.5 -> 0.29 Inexact Rounded -pwsx2867 power 84.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2868 power 84.00E-2 0.5 -> 0.92 Inexact Rounded -pwsx2869 power 84E-3 0.5 -> 0.29 Inexact Rounded -pwsx2870 power 84E+1 0.5 -> 29 Inexact Rounded -pwsx2871 power 84E+2 0.5 -> 92 Inexact Rounded -pwsx2872 power 84E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2873 power 0.85 0.5 -> 0.92 Inexact Rounded -pwsx2874 power 0.085 0.5 -> 0.29 Inexact Rounded -pwsx2875 power 85.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2876 power 85.00E-2 0.5 -> 0.92 Inexact Rounded -pwsx2877 power 85E-3 0.5 -> 0.29 Inexact Rounded -pwsx2878 power 85E+1 0.5 -> 29 Inexact Rounded -pwsx2879 power 85E+2 0.5 -> 92 Inexact Rounded -pwsx2880 power 85E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2881 power 0.86 0.5 -> 0.93 Inexact Rounded -pwsx2882 power 0.086 0.5 -> 0.29 Inexact Rounded -pwsx2883 power 86.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2884 power 86.00E-2 0.5 -> 0.93 Inexact Rounded -pwsx2885 power 86E-3 0.5 -> 0.29 Inexact Rounded -pwsx2886 power 86E+1 0.5 -> 29 Inexact Rounded -pwsx2887 power 86E+2 0.5 -> 93 Inexact Rounded -pwsx2888 power 86E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2889 power 0.87 0.5 -> 0.93 Inexact Rounded -pwsx2890 power 0.087 0.5 -> 0.29 Inexact Rounded -pwsx2891 power 87.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2892 power 87.00E-2 0.5 -> 0.93 Inexact Rounded -pwsx2893 power 87E-3 0.5 -> 0.29 Inexact Rounded -pwsx2894 power 87E+1 0.5 -> 29 Inexact Rounded -pwsx2895 power 87E+2 0.5 -> 93 Inexact Rounded -pwsx2896 power 87E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2897 power 0.88 0.5 -> 0.94 Inexact Rounded -pwsx2898 power 0.088 0.5 -> 0.30 Inexact Rounded -pwsx2899 power 88.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2900 power 88.00E-2 0.5 -> 0.94 Inexact Rounded -pwsx2901 power 88E-3 0.5 -> 0.30 Inexact Rounded -pwsx2902 power 88E+1 0.5 -> 30 Inexact Rounded -pwsx2903 power 88E+2 0.5 -> 94 Inexact Rounded -pwsx2904 power 88E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2905 power 0.89 0.5 -> 0.94 Inexact Rounded -pwsx2906 power 0.089 0.5 -> 0.30 Inexact Rounded -pwsx2907 power 89.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2908 power 89.00E-2 0.5 -> 0.94 Inexact Rounded -pwsx2909 power 89E-3 0.5 -> 0.30 Inexact Rounded -pwsx2910 power 89E+1 0.5 -> 30 Inexact Rounded -pwsx2911 power 89E+2 0.5 -> 94 Inexact Rounded -pwsx2912 power 89E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2913 power 0.90 0.5 -> 0.95 Inexact Rounded -pwsx2914 power 0.090 0.5 -> 0.30 Inexact Rounded -pwsx2915 power 90.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2916 power 90.00E-2 0.5 -> 0.95 Inexact Rounded -pwsx2917 power 90E-3 0.5 -> 0.30 Inexact Rounded -pwsx2918 power 90E+1 0.5 -> 30 Inexact Rounded -pwsx2919 power 90E+2 0.5 -> 95 Inexact Rounded -pwsx2920 power 90E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2921 power 0.91 0.5 -> 0.95 Inexact Rounded -pwsx2922 power 0.091 0.5 -> 0.30 Inexact Rounded -pwsx2923 power 91.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2924 power 91.00E-2 0.5 -> 0.95 Inexact Rounded -pwsx2925 power 91E-3 0.5 -> 0.30 Inexact Rounded -pwsx2926 power 91E+1 0.5 -> 30 Inexact Rounded -pwsx2927 power 91E+2 0.5 -> 95 Inexact Rounded -pwsx2928 power 91E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2929 power 0.92 0.5 -> 0.96 Inexact Rounded -pwsx2930 power 0.092 0.5 -> 0.30 Inexact Rounded -pwsx2931 power 92.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2932 power 92.00E-2 0.5 -> 0.96 Inexact Rounded -pwsx2933 power 92E-3 0.5 -> 0.30 Inexact Rounded -pwsx2934 power 92E+1 0.5 -> 30 Inexact Rounded -pwsx2935 power 92E+2 0.5 -> 96 Inexact Rounded -pwsx2936 power 92E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2937 power 0.93 0.5 -> 0.96 Inexact Rounded -pwsx2938 power 0.093 0.5 -> 0.30 Inexact Rounded -pwsx2939 power 93.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2940 power 93.00E-2 0.5 -> 0.96 Inexact Rounded -pwsx2941 power 93E-3 0.5 -> 0.30 Inexact Rounded -pwsx2942 power 93E+1 0.5 -> 30 Inexact Rounded -pwsx2943 power 93E+2 0.5 -> 96 Inexact Rounded -pwsx2944 power 93E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2945 power 0.94 0.5 -> 0.97 Inexact Rounded -pwsx2946 power 0.094 0.5 -> 0.31 Inexact Rounded -pwsx2947 power 94.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2948 power 94.00E-2 0.5 -> 0.97 Inexact Rounded -pwsx2949 power 94E-3 0.5 -> 0.31 Inexact Rounded -pwsx2950 power 94E+1 0.5 -> 31 Inexact Rounded -pwsx2951 power 94E+2 0.5 -> 97 Inexact Rounded -pwsx2952 power 94E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2953 power 0.95 0.5 -> 0.97 Inexact Rounded -pwsx2954 power 0.095 0.5 -> 0.31 Inexact Rounded -pwsx2955 power 95.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2956 power 95.00E-2 0.5 -> 0.97 Inexact Rounded -pwsx2957 power 95E-3 0.5 -> 0.31 Inexact Rounded -pwsx2958 power 95E+1 0.5 -> 31 Inexact Rounded -pwsx2959 power 95E+2 0.5 -> 97 Inexact Rounded -pwsx2960 power 95E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2961 power 0.96 0.5 -> 0.98 Inexact Rounded -pwsx2962 power 0.096 0.5 -> 0.31 Inexact Rounded -pwsx2963 power 96.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2964 power 96.00E-2 0.5 -> 0.98 Inexact Rounded -pwsx2965 power 96E-3 0.5 -> 0.31 Inexact Rounded -pwsx2966 power 96E+1 0.5 -> 31 Inexact Rounded -pwsx2967 power 96E+2 0.5 -> 98 Inexact Rounded -pwsx2968 power 96E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2969 power 0.97 0.5 -> 0.98 Inexact Rounded -pwsx2970 power 0.097 0.5 -> 0.31 Inexact Rounded -pwsx2971 power 97.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2972 power 97.00E-2 0.5 -> 0.98 Inexact Rounded -pwsx2973 power 97E-3 0.5 -> 0.31 Inexact Rounded -pwsx2974 power 97E+1 0.5 -> 31 Inexact Rounded -pwsx2975 power 97E+2 0.5 -> 98 Inexact Rounded -pwsx2976 power 97E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2977 power 0.98 0.5 -> 0.99 Inexact Rounded -pwsx2978 power 0.098 0.5 -> 0.31 Inexact Rounded -pwsx2979 power 98.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2980 power 98.00E-2 0.5 -> 0.99 Inexact Rounded -pwsx2981 power 98E-3 0.5 -> 0.31 Inexact Rounded -pwsx2982 power 98E+1 0.5 -> 31 Inexact Rounded -pwsx2983 power 98E+2 0.5 -> 99 Inexact Rounded -pwsx2984 power 98E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2985 power 0.99 0.5 -> 0.99 Inexact Rounded -pwsx2986 power 0.099 0.5 -> 0.31 Inexact Rounded -pwsx2987 power 99.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2988 power 99.00E-2 0.5 -> 0.99 Inexact Rounded -pwsx2989 power 99E-3 0.5 -> 0.31 Inexact Rounded -pwsx2990 power 99E+1 0.5 -> 31 Inexact Rounded -pwsx2991 power 99E+2 0.5 -> 99 Inexact Rounded -pwsx2992 power 99E+3 0.5 -> 3.1E+2 Inexact Rounded - --- Precision 3 squareroot tests [exhaustive, f and f/10] -rounding: half_even -maxExponent: 999 -minexponent: -999 -precision: 3 -pwsx3001 power 0.1 0.5 -> 0.316 Inexact Rounded -pwsx3002 power 0.01 0.5 -> 0.100 Inexact Rounded -pwsx3003 power 0.2 0.5 -> 0.447 Inexact Rounded -pwsx3004 power 0.02 0.5 -> 0.141 Inexact Rounded -pwsx3005 power 0.3 0.5 -> 0.548 Inexact Rounded -pwsx3006 power 0.03 0.5 -> 0.173 Inexact Rounded -pwsx3007 power 0.4 0.5 -> 0.632 Inexact Rounded -pwsx3008 power 0.04 0.5 -> 0.200 Inexact Rounded -pwsx3009 power 0.5 0.5 -> 0.707 Inexact Rounded -pwsx3010 power 0.05 0.5 -> 0.224 Inexact Rounded -pwsx3011 power 0.6 0.5 -> 0.775 Inexact Rounded -pwsx3012 power 0.06 0.5 -> 0.245 Inexact Rounded -pwsx3013 power 0.7 0.5 -> 0.837 Inexact Rounded -pwsx3014 power 0.07 0.5 -> 0.265 Inexact Rounded -pwsx3015 power 0.8 0.5 -> 0.894 Inexact Rounded -pwsx3016 power 0.08 0.5 -> 0.283 Inexact Rounded -pwsx3017 power 0.9 0.5 -> 0.949 Inexact Rounded -pwsx3018 power 0.09 0.5 -> 0.300 Inexact Rounded -pwsx3019 power 0.11 0.5 -> 0.332 Inexact Rounded -pwsx3020 power 0.011 0.5 -> 0.105 Inexact Rounded -pwsx3021 power 0.12 0.5 -> 0.346 Inexact Rounded -pwsx3022 power 0.012 0.5 -> 0.110 Inexact Rounded -pwsx3023 power 0.13 0.5 -> 0.361 Inexact Rounded -pwsx3024 power 0.013 0.5 -> 0.114 Inexact Rounded -pwsx3025 power 0.14 0.5 -> 0.374 Inexact Rounded -pwsx3026 power 0.014 0.5 -> 0.118 Inexact Rounded -pwsx3027 power 0.15 0.5 -> 0.387 Inexact Rounded -pwsx3028 power 0.015 0.5 -> 0.122 Inexact Rounded -pwsx3029 power 0.16 0.5 -> 0.400 Inexact Rounded -pwsx3030 power 0.016 0.5 -> 0.126 Inexact Rounded -pwsx3031 power 0.17 0.5 -> 0.412 Inexact Rounded -pwsx3032 power 0.017 0.5 -> 0.130 Inexact Rounded -pwsx3033 power 0.18 0.5 -> 0.424 Inexact Rounded -pwsx3034 power 0.018 0.5 -> 0.134 Inexact Rounded -pwsx3035 power 0.19 0.5 -> 0.436 Inexact Rounded -pwsx3036 power 0.019 0.5 -> 0.138 Inexact Rounded -pwsx3037 power 0.21 0.5 -> 0.458 Inexact Rounded -pwsx3038 power 0.021 0.5 -> 0.145 Inexact Rounded -pwsx3039 power 0.22 0.5 -> 0.469 Inexact Rounded -pwsx3040 power 0.022 0.5 -> 0.148 Inexact Rounded -pwsx3041 power 0.23 0.5 -> 0.480 Inexact Rounded -pwsx3042 power 0.023 0.5 -> 0.152 Inexact Rounded -pwsx3043 power 0.24 0.5 -> 0.490 Inexact Rounded -pwsx3044 power 0.024 0.5 -> 0.155 Inexact Rounded -pwsx3045 power 0.25 0.5 -> 0.500 Inexact Rounded -pwsx3046 power 0.025 0.5 -> 0.158 Inexact Rounded -pwsx3047 power 0.26 0.5 -> 0.510 Inexact Rounded -pwsx3048 power 0.026 0.5 -> 0.161 Inexact Rounded -pwsx3049 power 0.27 0.5 -> 0.520 Inexact Rounded -pwsx3050 power 0.027 0.5 -> 0.164 Inexact Rounded -pwsx3051 power 0.28 0.5 -> 0.529 Inexact Rounded -pwsx3052 power 0.028 0.5 -> 0.167 Inexact Rounded -pwsx3053 power 0.29 0.5 -> 0.539 Inexact Rounded -pwsx3054 power 0.029 0.5 -> 0.170 Inexact Rounded -pwsx3055 power 0.31 0.5 -> 0.557 Inexact Rounded -pwsx3056 power 0.031 0.5 -> 0.176 Inexact Rounded -pwsx3057 power 0.32 0.5 -> 0.566 Inexact Rounded -pwsx3058 power 0.032 0.5 -> 0.179 Inexact Rounded -pwsx3059 power 0.33 0.5 -> 0.574 Inexact Rounded -pwsx3060 power 0.033 0.5 -> 0.182 Inexact Rounded -pwsx3061 power 0.34 0.5 -> 0.583 Inexact Rounded -pwsx3062 power 0.034 0.5 -> 0.184 Inexact Rounded -pwsx3063 power 0.35 0.5 -> 0.592 Inexact Rounded -pwsx3064 power 0.035 0.5 -> 0.187 Inexact Rounded -pwsx3065 power 0.36 0.5 -> 0.600 Inexact Rounded -pwsx3066 power 0.036 0.5 -> 0.190 Inexact Rounded -pwsx3067 power 0.37 0.5 -> 0.608 Inexact Rounded -pwsx3068 power 0.037 0.5 -> 0.192 Inexact Rounded -pwsx3069 power 0.38 0.5 -> 0.616 Inexact Rounded -pwsx3070 power 0.038 0.5 -> 0.195 Inexact Rounded -pwsx3071 power 0.39 0.5 -> 0.624 Inexact Rounded -pwsx3072 power 0.039 0.5 -> 0.197 Inexact Rounded -pwsx3073 power 0.41 0.5 -> 0.640 Inexact Rounded -pwsx3074 power 0.041 0.5 -> 0.202 Inexact Rounded -pwsx3075 power 0.42 0.5 -> 0.648 Inexact Rounded -pwsx3076 power 0.042 0.5 -> 0.205 Inexact Rounded -pwsx3077 power 0.43 0.5 -> 0.656 Inexact Rounded -pwsx3078 power 0.043 0.5 -> 0.207 Inexact Rounded -pwsx3079 power 0.44 0.5 -> 0.663 Inexact Rounded -pwsx3080 power 0.044 0.5 -> 0.210 Inexact Rounded -pwsx3081 power 0.45 0.5 -> 0.671 Inexact Rounded -pwsx3082 power 0.045 0.5 -> 0.212 Inexact Rounded -pwsx3083 power 0.46 0.5 -> 0.678 Inexact Rounded -pwsx3084 power 0.046 0.5 -> 0.214 Inexact Rounded -pwsx3085 power 0.47 0.5 -> 0.686 Inexact Rounded -pwsx3086 power 0.047 0.5 -> 0.217 Inexact Rounded -pwsx3087 power 0.48 0.5 -> 0.693 Inexact Rounded -pwsx3088 power 0.048 0.5 -> 0.219 Inexact Rounded -pwsx3089 power 0.49 0.5 -> 0.700 Inexact Rounded -pwsx3090 power 0.049 0.5 -> 0.221 Inexact Rounded -pwsx3091 power 0.51 0.5 -> 0.714 Inexact Rounded -pwsx3092 power 0.051 0.5 -> 0.226 Inexact Rounded -pwsx3093 power 0.52 0.5 -> 0.721 Inexact Rounded -pwsx3094 power 0.052 0.5 -> 0.228 Inexact Rounded -pwsx3095 power 0.53 0.5 -> 0.728 Inexact Rounded -pwsx3096 power 0.053 0.5 -> 0.230 Inexact Rounded -pwsx3097 power 0.54 0.5 -> 0.735 Inexact Rounded -pwsx3098 power 0.054 0.5 -> 0.232 Inexact Rounded -pwsx3099 power 0.55 0.5 -> 0.742 Inexact Rounded -pwsx3100 power 0.055 0.5 -> 0.235 Inexact Rounded -pwsx3101 power 0.56 0.5 -> 0.748 Inexact Rounded -pwsx3102 power 0.056 0.5 -> 0.237 Inexact Rounded -pwsx3103 power 0.57 0.5 -> 0.755 Inexact Rounded -pwsx3104 power 0.057 0.5 -> 0.239 Inexact Rounded -pwsx3105 power 0.58 0.5 -> 0.762 Inexact Rounded -pwsx3106 power 0.058 0.5 -> 0.241 Inexact Rounded -pwsx3107 power 0.59 0.5 -> 0.768 Inexact Rounded -pwsx3108 power 0.059 0.5 -> 0.243 Inexact Rounded -pwsx3109 power 0.61 0.5 -> 0.781 Inexact Rounded -pwsx3110 power 0.061 0.5 -> 0.247 Inexact Rounded -pwsx3111 power 0.62 0.5 -> 0.787 Inexact Rounded -pwsx3112 power 0.062 0.5 -> 0.249 Inexact Rounded -pwsx3113 power 0.63 0.5 -> 0.794 Inexact Rounded -pwsx3114 power 0.063 0.5 -> 0.251 Inexact Rounded -pwsx3115 power 0.64 0.5 -> 0.800 Inexact Rounded -pwsx3116 power 0.064 0.5 -> 0.253 Inexact Rounded -pwsx3117 power 0.65 0.5 -> 0.806 Inexact Rounded -pwsx3118 power 0.065 0.5 -> 0.255 Inexact Rounded -pwsx3119 power 0.66 0.5 -> 0.812 Inexact Rounded -pwsx3120 power 0.066 0.5 -> 0.257 Inexact Rounded -pwsx3121 power 0.67 0.5 -> 0.819 Inexact Rounded -pwsx3122 power 0.067 0.5 -> 0.259 Inexact Rounded -pwsx3123 power 0.68 0.5 -> 0.825 Inexact Rounded -pwsx3124 power 0.068 0.5 -> 0.261 Inexact Rounded -pwsx3125 power 0.69 0.5 -> 0.831 Inexact Rounded -pwsx3126 power 0.069 0.5 -> 0.263 Inexact Rounded -pwsx3127 power 0.71 0.5 -> 0.843 Inexact Rounded -pwsx3128 power 0.071 0.5 -> 0.266 Inexact Rounded -pwsx3129 power 0.72 0.5 -> 0.849 Inexact Rounded -pwsx3130 power 0.072 0.5 -> 0.268 Inexact Rounded -pwsx3131 power 0.73 0.5 -> 0.854 Inexact Rounded -pwsx3132 power 0.073 0.5 -> 0.270 Inexact Rounded -pwsx3133 power 0.74 0.5 -> 0.860 Inexact Rounded -pwsx3134 power 0.074 0.5 -> 0.272 Inexact Rounded -pwsx3135 power 0.75 0.5 -> 0.866 Inexact Rounded -pwsx3136 power 0.075 0.5 -> 0.274 Inexact Rounded -pwsx3137 power 0.76 0.5 -> 0.872 Inexact Rounded -pwsx3138 power 0.076 0.5 -> 0.276 Inexact Rounded -pwsx3139 power 0.77 0.5 -> 0.877 Inexact Rounded -pwsx3140 power 0.077 0.5 -> 0.277 Inexact Rounded -pwsx3141 power 0.78 0.5 -> 0.883 Inexact Rounded -pwsx3142 power 0.078 0.5 -> 0.279 Inexact Rounded -pwsx3143 power 0.79 0.5 -> 0.889 Inexact Rounded -pwsx3144 power 0.079 0.5 -> 0.281 Inexact Rounded -pwsx3145 power 0.81 0.5 -> 0.900 Inexact Rounded -pwsx3146 power 0.081 0.5 -> 0.285 Inexact Rounded -pwsx3147 power 0.82 0.5 -> 0.906 Inexact Rounded -pwsx3148 power 0.082 0.5 -> 0.286 Inexact Rounded -pwsx3149 power 0.83 0.5 -> 0.911 Inexact Rounded -pwsx3150 power 0.083 0.5 -> 0.288 Inexact Rounded -pwsx3151 power 0.84 0.5 -> 0.917 Inexact Rounded -pwsx3152 power 0.084 0.5 -> 0.290 Inexact Rounded -pwsx3153 power 0.85 0.5 -> 0.922 Inexact Rounded -pwsx3154 power 0.085 0.5 -> 0.292 Inexact Rounded -pwsx3155 power 0.86 0.5 -> 0.927 Inexact Rounded -pwsx3156 power 0.086 0.5 -> 0.293 Inexact Rounded -pwsx3157 power 0.87 0.5 -> 0.933 Inexact Rounded -pwsx3158 power 0.087 0.5 -> 0.295 Inexact Rounded -pwsx3159 power 0.88 0.5 -> 0.938 Inexact Rounded -pwsx3160 power 0.088 0.5 -> 0.297 Inexact Rounded -pwsx3161 power 0.89 0.5 -> 0.943 Inexact Rounded -pwsx3162 power 0.089 0.5 -> 0.298 Inexact Rounded -pwsx3163 power 0.91 0.5 -> 0.954 Inexact Rounded -pwsx3164 power 0.091 0.5 -> 0.302 Inexact Rounded -pwsx3165 power 0.92 0.5 -> 0.959 Inexact Rounded -pwsx3166 power 0.092 0.5 -> 0.303 Inexact Rounded -pwsx3167 power 0.93 0.5 -> 0.964 Inexact Rounded -pwsx3168 power 0.093 0.5 -> 0.305 Inexact Rounded -pwsx3169 power 0.94 0.5 -> 0.970 Inexact Rounded -pwsx3170 power 0.094 0.5 -> 0.307 Inexact Rounded -pwsx3171 power 0.95 0.5 -> 0.975 Inexact Rounded -pwsx3172 power 0.095 0.5 -> 0.308 Inexact Rounded -pwsx3173 power 0.96 0.5 -> 0.980 Inexact Rounded -pwsx3174 power 0.096 0.5 -> 0.310 Inexact Rounded -pwsx3175 power 0.97 0.5 -> 0.985 Inexact Rounded -pwsx3176 power 0.097 0.5 -> 0.311 Inexact Rounded -pwsx3177 power 0.98 0.5 -> 0.990 Inexact Rounded -pwsx3178 power 0.098 0.5 -> 0.313 Inexact Rounded -pwsx3179 power 0.99 0.5 -> 0.995 Inexact Rounded -pwsx3180 power 0.099 0.5 -> 0.315 Inexact Rounded -pwsx3181 power 0.101 0.5 -> 0.318 Inexact Rounded -pwsx3182 power 0.0101 0.5 -> 0.100 Inexact Rounded -pwsx3183 power 0.102 0.5 -> 0.319 Inexact Rounded -pwsx3184 power 0.0102 0.5 -> 0.101 Inexact Rounded -pwsx3185 power 0.103 0.5 -> 0.321 Inexact Rounded -pwsx3186 power 0.0103 0.5 -> 0.101 Inexact Rounded -pwsx3187 power 0.104 0.5 -> 0.322 Inexact Rounded -pwsx3188 power 0.0104 0.5 -> 0.102 Inexact Rounded -pwsx3189 power 0.105 0.5 -> 0.324 Inexact Rounded -pwsx3190 power 0.0105 0.5 -> 0.102 Inexact Rounded -pwsx3191 power 0.106 0.5 -> 0.326 Inexact Rounded -pwsx3192 power 0.0106 0.5 -> 0.103 Inexact Rounded -pwsx3193 power 0.107 0.5 -> 0.327 Inexact Rounded -pwsx3194 power 0.0107 0.5 -> 0.103 Inexact Rounded -pwsx3195 power 0.108 0.5 -> 0.329 Inexact Rounded -pwsx3196 power 0.0108 0.5 -> 0.104 Inexact Rounded -pwsx3197 power 0.109 0.5 -> 0.330 Inexact Rounded -pwsx3198 power 0.0109 0.5 -> 0.104 Inexact Rounded -pwsx3199 power 0.111 0.5 -> 0.333 Inexact Rounded -pwsx3200 power 0.0111 0.5 -> 0.105 Inexact Rounded -pwsx3201 power 0.112 0.5 -> 0.335 Inexact Rounded -pwsx3202 power 0.0112 0.5 -> 0.106 Inexact Rounded -pwsx3203 power 0.113 0.5 -> 0.336 Inexact Rounded -pwsx3204 power 0.0113 0.5 -> 0.106 Inexact Rounded -pwsx3205 power 0.114 0.5 -> 0.338 Inexact Rounded -pwsx3206 power 0.0114 0.5 -> 0.107 Inexact Rounded -pwsx3207 power 0.115 0.5 -> 0.339 Inexact Rounded -pwsx3208 power 0.0115 0.5 -> 0.107 Inexact Rounded -pwsx3209 power 0.116 0.5 -> 0.341 Inexact Rounded -pwsx3210 power 0.0116 0.5 -> 0.108 Inexact Rounded -pwsx3211 power 0.117 0.5 -> 0.342 Inexact Rounded -pwsx3212 power 0.0117 0.5 -> 0.108 Inexact Rounded -pwsx3213 power 0.118 0.5 -> 0.344 Inexact Rounded -pwsx3214 power 0.0118 0.5 -> 0.109 Inexact Rounded -pwsx3215 power 0.119 0.5 -> 0.345 Inexact Rounded -pwsx3216 power 0.0119 0.5 -> 0.109 Inexact Rounded -pwsx3217 power 0.121 0.5 -> 0.348 Inexact Rounded -pwsx3218 power 0.0121 0.5 -> 0.110 Inexact Rounded -pwsx3219 power 0.122 0.5 -> 0.349 Inexact Rounded -pwsx3220 power 0.0122 0.5 -> 0.110 Inexact Rounded -pwsx3221 power 0.123 0.5 -> 0.351 Inexact Rounded -pwsx3222 power 0.0123 0.5 -> 0.111 Inexact Rounded -pwsx3223 power 0.124 0.5 -> 0.352 Inexact Rounded -pwsx3224 power 0.0124 0.5 -> 0.111 Inexact Rounded -pwsx3225 power 0.125 0.5 -> 0.354 Inexact Rounded -pwsx3226 power 0.0125 0.5 -> 0.112 Inexact Rounded -pwsx3227 power 0.126 0.5 -> 0.355 Inexact Rounded -pwsx3228 power 0.0126 0.5 -> 0.112 Inexact Rounded -pwsx3229 power 0.127 0.5 -> 0.356 Inexact Rounded -pwsx3230 power 0.0127 0.5 -> 0.113 Inexact Rounded -pwsx3231 power 0.128 0.5 -> 0.358 Inexact Rounded -pwsx3232 power 0.0128 0.5 -> 0.113 Inexact Rounded -pwsx3233 power 0.129 0.5 -> 0.359 Inexact Rounded -pwsx3234 power 0.0129 0.5 -> 0.114 Inexact Rounded -pwsx3235 power 0.131 0.5 -> 0.362 Inexact Rounded -pwsx3236 power 0.0131 0.5 -> 0.114 Inexact Rounded -pwsx3237 power 0.132 0.5 -> 0.363 Inexact Rounded -pwsx3238 power 0.0132 0.5 -> 0.115 Inexact Rounded -pwsx3239 power 0.133 0.5 -> 0.365 Inexact Rounded -pwsx3240 power 0.0133 0.5 -> 0.115 Inexact Rounded -pwsx3241 power 0.134 0.5 -> 0.366 Inexact Rounded -pwsx3242 power 0.0134 0.5 -> 0.116 Inexact Rounded -pwsx3243 power 0.135 0.5 -> 0.367 Inexact Rounded -pwsx3244 power 0.0135 0.5 -> 0.116 Inexact Rounded -pwsx3245 power 0.136 0.5 -> 0.369 Inexact Rounded -pwsx3246 power 0.0136 0.5 -> 0.117 Inexact Rounded -pwsx3247 power 0.137 0.5 -> 0.370 Inexact Rounded -pwsx3248 power 0.0137 0.5 -> 0.117 Inexact Rounded -pwsx3249 power 0.138 0.5 -> 0.371 Inexact Rounded -pwsx3250 power 0.0138 0.5 -> 0.117 Inexact Rounded -pwsx3251 power 0.139 0.5 -> 0.373 Inexact Rounded -pwsx3252 power 0.0139 0.5 -> 0.118 Inexact Rounded -pwsx3253 power 0.141 0.5 -> 0.375 Inexact Rounded -pwsx3254 power 0.0141 0.5 -> 0.119 Inexact Rounded -pwsx3255 power 0.142 0.5 -> 0.377 Inexact Rounded -pwsx3256 power 0.0142 0.5 -> 0.119 Inexact Rounded -pwsx3257 power 0.143 0.5 -> 0.378 Inexact Rounded -pwsx3258 power 0.0143 0.5 -> 0.120 Inexact Rounded -pwsx3259 power 0.144 0.5 -> 0.379 Inexact Rounded -pwsx3260 power 0.0144 0.5 -> 0.120 Inexact Rounded -pwsx3261 power 0.145 0.5 -> 0.381 Inexact Rounded -pwsx3262 power 0.0145 0.5 -> 0.120 Inexact Rounded -pwsx3263 power 0.146 0.5 -> 0.382 Inexact Rounded -pwsx3264 power 0.0146 0.5 -> 0.121 Inexact Rounded -pwsx3265 power 0.147 0.5 -> 0.383 Inexact Rounded -pwsx3266 power 0.0147 0.5 -> 0.121 Inexact Rounded -pwsx3267 power 0.148 0.5 -> 0.385 Inexact Rounded -pwsx3268 power 0.0148 0.5 -> 0.122 Inexact Rounded -pwsx3269 power 0.149 0.5 -> 0.386 Inexact Rounded -pwsx3270 power 0.0149 0.5 -> 0.122 Inexact Rounded -pwsx3271 power 0.151 0.5 -> 0.389 Inexact Rounded -pwsx3272 power 0.0151 0.5 -> 0.123 Inexact Rounded -pwsx3273 power 0.152 0.5 -> 0.390 Inexact Rounded -pwsx3274 power 0.0152 0.5 -> 0.123 Inexact Rounded -pwsx3275 power 0.153 0.5 -> 0.391 Inexact Rounded -pwsx3276 power 0.0153 0.5 -> 0.124 Inexact Rounded -pwsx3277 power 0.154 0.5 -> 0.392 Inexact Rounded -pwsx3278 power 0.0154 0.5 -> 0.124 Inexact Rounded -pwsx3279 power 0.155 0.5 -> 0.394 Inexact Rounded -pwsx3280 power 0.0155 0.5 -> 0.124 Inexact Rounded -pwsx3281 power 0.156 0.5 -> 0.395 Inexact Rounded -pwsx3282 power 0.0156 0.5 -> 0.125 Inexact Rounded -pwsx3283 power 0.157 0.5 -> 0.396 Inexact Rounded -pwsx3284 power 0.0157 0.5 -> 0.125 Inexact Rounded -pwsx3285 power 0.158 0.5 -> 0.397 Inexact Rounded -pwsx3286 power 0.0158 0.5 -> 0.126 Inexact Rounded -pwsx3287 power 0.159 0.5 -> 0.399 Inexact Rounded -pwsx3288 power 0.0159 0.5 -> 0.126 Inexact Rounded -pwsx3289 power 0.161 0.5 -> 0.401 Inexact Rounded -pwsx3290 power 0.0161 0.5 -> 0.127 Inexact Rounded -pwsx3291 power 0.162 0.5 -> 0.402 Inexact Rounded -pwsx3292 power 0.0162 0.5 -> 0.127 Inexact Rounded -pwsx3293 power 0.163 0.5 -> 0.404 Inexact Rounded -pwsx3294 power 0.0163 0.5 -> 0.128 Inexact Rounded -pwsx3295 power 0.164 0.5 -> 0.405 Inexact Rounded -pwsx3296 power 0.0164 0.5 -> 0.128 Inexact Rounded -pwsx3297 power 0.165 0.5 -> 0.406 Inexact Rounded -pwsx3298 power 0.0165 0.5 -> 0.128 Inexact Rounded -pwsx3299 power 0.166 0.5 -> 0.407 Inexact Rounded -pwsx3300 power 0.0166 0.5 -> 0.129 Inexact Rounded -pwsx3301 power 0.167 0.5 -> 0.409 Inexact Rounded -pwsx3302 power 0.0167 0.5 -> 0.129 Inexact Rounded -pwsx3303 power 0.168 0.5 -> 0.410 Inexact Rounded -pwsx3304 power 0.0168 0.5 -> 0.130 Inexact Rounded -pwsx3305 power 0.169 0.5 -> 0.411 Inexact Rounded -pwsx3306 power 0.0169 0.5 -> 0.130 Inexact Rounded -pwsx3307 power 0.171 0.5 -> 0.414 Inexact Rounded -pwsx3308 power 0.0171 0.5 -> 0.131 Inexact Rounded -pwsx3309 power 0.172 0.5 -> 0.415 Inexact Rounded -pwsx3310 power 0.0172 0.5 -> 0.131 Inexact Rounded -pwsx3311 power 0.173 0.5 -> 0.416 Inexact Rounded -pwsx3312 power 0.0173 0.5 -> 0.132 Inexact Rounded -pwsx3313 power 0.174 0.5 -> 0.417 Inexact Rounded -pwsx3314 power 0.0174 0.5 -> 0.132 Inexact Rounded -pwsx3315 power 0.175 0.5 -> 0.418 Inexact Rounded -pwsx3316 power 0.0175 0.5 -> 0.132 Inexact Rounded -pwsx3317 power 0.176 0.5 -> 0.420 Inexact Rounded -pwsx3318 power 0.0176 0.5 -> 0.133 Inexact Rounded -pwsx3319 power 0.177 0.5 -> 0.421 Inexact Rounded -pwsx3320 power 0.0177 0.5 -> 0.133 Inexact Rounded -pwsx3321 power 0.178 0.5 -> 0.422 Inexact Rounded -pwsx3322 power 0.0178 0.5 -> 0.133 Inexact Rounded -pwsx3323 power 0.179 0.5 -> 0.423 Inexact Rounded -pwsx3324 power 0.0179 0.5 -> 0.134 Inexact Rounded -pwsx3325 power 0.181 0.5 -> 0.425 Inexact Rounded -pwsx3326 power 0.0181 0.5 -> 0.135 Inexact Rounded -pwsx3327 power 0.182 0.5 -> 0.427 Inexact Rounded -pwsx3328 power 0.0182 0.5 -> 0.135 Inexact Rounded -pwsx3329 power 0.183 0.5 -> 0.428 Inexact Rounded -pwsx3330 power 0.0183 0.5 -> 0.135 Inexact Rounded -pwsx3331 power 0.184 0.5 -> 0.429 Inexact Rounded -pwsx3332 power 0.0184 0.5 -> 0.136 Inexact Rounded -pwsx3333 power 0.185 0.5 -> 0.430 Inexact Rounded -pwsx3334 power 0.0185 0.5 -> 0.136 Inexact Rounded -pwsx3335 power 0.186 0.5 -> 0.431 Inexact Rounded -pwsx3336 power 0.0186 0.5 -> 0.136 Inexact Rounded -pwsx3337 power 0.187 0.5 -> 0.432 Inexact Rounded -pwsx3338 power 0.0187 0.5 -> 0.137 Inexact Rounded -pwsx3339 power 0.188 0.5 -> 0.434 Inexact Rounded -pwsx3340 power 0.0188 0.5 -> 0.137 Inexact Rounded -pwsx3341 power 0.189 0.5 -> 0.435 Inexact Rounded -pwsx3342 power 0.0189 0.5 -> 0.137 Inexact Rounded -pwsx3343 power 0.191 0.5 -> 0.437 Inexact Rounded -pwsx3344 power 0.0191 0.5 -> 0.138 Inexact Rounded -pwsx3345 power 0.192 0.5 -> 0.438 Inexact Rounded -pwsx3346 power 0.0192 0.5 -> 0.139 Inexact Rounded -pwsx3347 power 0.193 0.5 -> 0.439 Inexact Rounded -pwsx3348 power 0.0193 0.5 -> 0.139 Inexact Rounded -pwsx3349 power 0.194 0.5 -> 0.440 Inexact Rounded -pwsx3350 power 0.0194 0.5 -> 0.139 Inexact Rounded -pwsx3351 power 0.195 0.5 -> 0.442 Inexact Rounded -pwsx3352 power 0.0195 0.5 -> 0.140 Inexact Rounded -pwsx3353 power 0.196 0.5 -> 0.443 Inexact Rounded -pwsx3354 power 0.0196 0.5 -> 0.140 Inexact Rounded -pwsx3355 power 0.197 0.5 -> 0.444 Inexact Rounded -pwsx3356 power 0.0197 0.5 -> 0.140 Inexact Rounded -pwsx3357 power 0.198 0.5 -> 0.445 Inexact Rounded -pwsx3358 power 0.0198 0.5 -> 0.141 Inexact Rounded -pwsx3359 power 0.199 0.5 -> 0.446 Inexact Rounded -pwsx3360 power 0.0199 0.5 -> 0.141 Inexact Rounded -pwsx3361 power 0.201 0.5 -> 0.448 Inexact Rounded -pwsx3362 power 0.0201 0.5 -> 0.142 Inexact Rounded -pwsx3363 power 0.202 0.5 -> 0.449 Inexact Rounded -pwsx3364 power 0.0202 0.5 -> 0.142 Inexact Rounded -pwsx3365 power 0.203 0.5 -> 0.451 Inexact Rounded -pwsx3366 power 0.0203 0.5 -> 0.142 Inexact Rounded -pwsx3367 power 0.204 0.5 -> 0.452 Inexact Rounded -pwsx3368 power 0.0204 0.5 -> 0.143 Inexact Rounded -pwsx3369 power 0.205 0.5 -> 0.453 Inexact Rounded -pwsx3370 power 0.0205 0.5 -> 0.143 Inexact Rounded -pwsx3371 power 0.206 0.5 -> 0.454 Inexact Rounded -pwsx3372 power 0.0206 0.5 -> 0.144 Inexact Rounded -pwsx3373 power 0.207 0.5 -> 0.455 Inexact Rounded -pwsx3374 power 0.0207 0.5 -> 0.144 Inexact Rounded -pwsx3375 power 0.208 0.5 -> 0.456 Inexact Rounded -pwsx3376 power 0.0208 0.5 -> 0.144 Inexact Rounded -pwsx3377 power 0.209 0.5 -> 0.457 Inexact Rounded -pwsx3378 power 0.0209 0.5 -> 0.145 Inexact Rounded -pwsx3379 power 0.211 0.5 -> 0.459 Inexact Rounded -pwsx3380 power 0.0211 0.5 -> 0.145 Inexact Rounded -pwsx3381 power 0.212 0.5 -> 0.460 Inexact Rounded -pwsx3382 power 0.0212 0.5 -> 0.146 Inexact Rounded -pwsx3383 power 0.213 0.5 -> 0.462 Inexact Rounded -pwsx3384 power 0.0213 0.5 -> 0.146 Inexact Rounded -pwsx3385 power 0.214 0.5 -> 0.463 Inexact Rounded -pwsx3386 power 0.0214 0.5 -> 0.146 Inexact Rounded -pwsx3387 power 0.215 0.5 -> 0.464 Inexact Rounded -pwsx3388 power 0.0215 0.5 -> 0.147 Inexact Rounded -pwsx3389 power 0.216 0.5 -> 0.465 Inexact Rounded -pwsx3390 power 0.0216 0.5 -> 0.147 Inexact Rounded -pwsx3391 power 0.217 0.5 -> 0.466 Inexact Rounded -pwsx3392 power 0.0217 0.5 -> 0.147 Inexact Rounded -pwsx3393 power 0.218 0.5 -> 0.467 Inexact Rounded -pwsx3394 power 0.0218 0.5 -> 0.148 Inexact Rounded -pwsx3395 power 0.219 0.5 -> 0.468 Inexact Rounded -pwsx3396 power 0.0219 0.5 -> 0.148 Inexact Rounded -pwsx3397 power 0.221 0.5 -> 0.470 Inexact Rounded -pwsx3398 power 0.0221 0.5 -> 0.149 Inexact Rounded -pwsx3399 power 0.222 0.5 -> 0.471 Inexact Rounded -pwsx3400 power 0.0222 0.5 -> 0.149 Inexact Rounded -pwsx3401 power 0.223 0.5 -> 0.472 Inexact Rounded -pwsx3402 power 0.0223 0.5 -> 0.149 Inexact Rounded -pwsx3403 power 0.224 0.5 -> 0.473 Inexact Rounded -pwsx3404 power 0.0224 0.5 -> 0.150 Inexact Rounded -pwsx3405 power 0.225 0.5 -> 0.474 Inexact Rounded -pwsx3406 power 0.0225 0.5 -> 0.150 Inexact Rounded -pwsx3407 power 0.226 0.5 -> 0.475 Inexact Rounded -pwsx3408 power 0.0226 0.5 -> 0.150 Inexact Rounded -pwsx3409 power 0.227 0.5 -> 0.476 Inexact Rounded -pwsx3410 power 0.0227 0.5 -> 0.151 Inexact Rounded -pwsx3411 power 0.228 0.5 -> 0.477 Inexact Rounded -pwsx3412 power 0.0228 0.5 -> 0.151 Inexact Rounded -pwsx3413 power 0.229 0.5 -> 0.479 Inexact Rounded -pwsx3414 power 0.0229 0.5 -> 0.151 Inexact Rounded -pwsx3415 power 0.231 0.5 -> 0.481 Inexact Rounded -pwsx3416 power 0.0231 0.5 -> 0.152 Inexact Rounded -pwsx3417 power 0.232 0.5 -> 0.482 Inexact Rounded -pwsx3418 power 0.0232 0.5 -> 0.152 Inexact Rounded -pwsx3419 power 0.233 0.5 -> 0.483 Inexact Rounded -pwsx3420 power 0.0233 0.5 -> 0.153 Inexact Rounded -pwsx3421 power 0.234 0.5 -> 0.484 Inexact Rounded -pwsx3422 power 0.0234 0.5 -> 0.153 Inexact Rounded -pwsx3423 power 0.235 0.5 -> 0.485 Inexact Rounded -pwsx3424 power 0.0235 0.5 -> 0.153 Inexact Rounded -pwsx3425 power 0.236 0.5 -> 0.486 Inexact Rounded -pwsx3426 power 0.0236 0.5 -> 0.154 Inexact Rounded -pwsx3427 power 0.237 0.5 -> 0.487 Inexact Rounded -pwsx3428 power 0.0237 0.5 -> 0.154 Inexact Rounded -pwsx3429 power 0.238 0.5 -> 0.488 Inexact Rounded -pwsx3430 power 0.0238 0.5 -> 0.154 Inexact Rounded -pwsx3431 power 0.239 0.5 -> 0.489 Inexact Rounded -pwsx3432 power 0.0239 0.5 -> 0.155 Inexact Rounded -pwsx3433 power 0.241 0.5 -> 0.491 Inexact Rounded -pwsx3434 power 0.0241 0.5 -> 0.155 Inexact Rounded -pwsx3435 power 0.242 0.5 -> 0.492 Inexact Rounded -pwsx3436 power 0.0242 0.5 -> 0.156 Inexact Rounded -pwsx3437 power 0.243 0.5 -> 0.493 Inexact Rounded -pwsx3438 power 0.0243 0.5 -> 0.156 Inexact Rounded -pwsx3439 power 0.244 0.5 -> 0.494 Inexact Rounded -pwsx3440 power 0.0244 0.5 -> 0.156 Inexact Rounded -pwsx3441 power 0.245 0.5 -> 0.495 Inexact Rounded -pwsx3442 power 0.0245 0.5 -> 0.157 Inexact Rounded -pwsx3443 power 0.246 0.5 -> 0.496 Inexact Rounded -pwsx3444 power 0.0246 0.5 -> 0.157 Inexact Rounded -pwsx3445 power 0.247 0.5 -> 0.497 Inexact Rounded -pwsx3446 power 0.0247 0.5 -> 0.157 Inexact Rounded -pwsx3447 power 0.248 0.5 -> 0.498 Inexact Rounded -pwsx3448 power 0.0248 0.5 -> 0.157 Inexact Rounded -pwsx3449 power 0.249 0.5 -> 0.499 Inexact Rounded -pwsx3450 power 0.0249 0.5 -> 0.158 Inexact Rounded -pwsx3451 power 0.251 0.5 -> 0.501 Inexact Rounded -pwsx3452 power 0.0251 0.5 -> 0.158 Inexact Rounded -pwsx3453 power 0.252 0.5 -> 0.502 Inexact Rounded -pwsx3454 power 0.0252 0.5 -> 0.159 Inexact Rounded -pwsx3455 power 0.253 0.5 -> 0.503 Inexact Rounded -pwsx3456 power 0.0253 0.5 -> 0.159 Inexact Rounded -pwsx3457 power 0.254 0.5 -> 0.504 Inexact Rounded -pwsx3458 power 0.0254 0.5 -> 0.159 Inexact Rounded -pwsx3459 power 0.255 0.5 -> 0.505 Inexact Rounded -pwsx3460 power 0.0255 0.5 -> 0.160 Inexact Rounded -pwsx3461 power 0.256 0.5 -> 0.506 Inexact Rounded -pwsx3462 power 0.0256 0.5 -> 0.160 Inexact Rounded -pwsx3463 power 0.257 0.5 -> 0.507 Inexact Rounded -pwsx3464 power 0.0257 0.5 -> 0.160 Inexact Rounded -pwsx3465 power 0.258 0.5 -> 0.508 Inexact Rounded -pwsx3466 power 0.0258 0.5 -> 0.161 Inexact Rounded -pwsx3467 power 0.259 0.5 -> 0.509 Inexact Rounded -pwsx3468 power 0.0259 0.5 -> 0.161 Inexact Rounded -pwsx3469 power 0.261 0.5 -> 0.511 Inexact Rounded -pwsx3470 power 0.0261 0.5 -> 0.162 Inexact Rounded -pwsx3471 power 0.262 0.5 -> 0.512 Inexact Rounded -pwsx3472 power 0.0262 0.5 -> 0.162 Inexact Rounded -pwsx3473 power 0.263 0.5 -> 0.513 Inexact Rounded -pwsx3474 power 0.0263 0.5 -> 0.162 Inexact Rounded -pwsx3475 power 0.264 0.5 -> 0.514 Inexact Rounded -pwsx3476 power 0.0264 0.5 -> 0.162 Inexact Rounded -pwsx3477 power 0.265 0.5 -> 0.515 Inexact Rounded -pwsx3478 power 0.0265 0.5 -> 0.163 Inexact Rounded -pwsx3479 power 0.266 0.5 -> 0.516 Inexact Rounded -pwsx3480 power 0.0266 0.5 -> 0.163 Inexact Rounded -pwsx3481 power 0.267 0.5 -> 0.517 Inexact Rounded -pwsx3482 power 0.0267 0.5 -> 0.163 Inexact Rounded -pwsx3483 power 0.268 0.5 -> 0.518 Inexact Rounded -pwsx3484 power 0.0268 0.5 -> 0.164 Inexact Rounded -pwsx3485 power 0.269 0.5 -> 0.519 Inexact Rounded -pwsx3486 power 0.0269 0.5 -> 0.164 Inexact Rounded -pwsx3487 power 0.271 0.5 -> 0.521 Inexact Rounded -pwsx3488 power 0.0271 0.5 -> 0.165 Inexact Rounded -pwsx3489 power 0.272 0.5 -> 0.522 Inexact Rounded -pwsx3490 power 0.0272 0.5 -> 0.165 Inexact Rounded -pwsx3491 power 0.273 0.5 -> 0.522 Inexact Rounded -pwsx3492 power 0.0273 0.5 -> 0.165 Inexact Rounded -pwsx3493 power 0.274 0.5 -> 0.523 Inexact Rounded -pwsx3494 power 0.0274 0.5 -> 0.166 Inexact Rounded -pwsx3495 power 0.275 0.5 -> 0.524 Inexact Rounded -pwsx3496 power 0.0275 0.5 -> 0.166 Inexact Rounded -pwsx3497 power 0.276 0.5 -> 0.525 Inexact Rounded -pwsx3498 power 0.0276 0.5 -> 0.166 Inexact Rounded -pwsx3499 power 0.277 0.5 -> 0.526 Inexact Rounded -pwsx3500 power 0.0277 0.5 -> 0.166 Inexact Rounded -pwsx3501 power 0.278 0.5 -> 0.527 Inexact Rounded -pwsx3502 power 0.0278 0.5 -> 0.167 Inexact Rounded -pwsx3503 power 0.279 0.5 -> 0.528 Inexact Rounded -pwsx3504 power 0.0279 0.5 -> 0.167 Inexact Rounded -pwsx3505 power 0.281 0.5 -> 0.530 Inexact Rounded -pwsx3506 power 0.0281 0.5 -> 0.168 Inexact Rounded -pwsx3507 power 0.282 0.5 -> 0.531 Inexact Rounded -pwsx3508 power 0.0282 0.5 -> 0.168 Inexact Rounded -pwsx3509 power 0.283 0.5 -> 0.532 Inexact Rounded -pwsx3510 power 0.0283 0.5 -> 0.168 Inexact Rounded -pwsx3511 power 0.284 0.5 -> 0.533 Inexact Rounded -pwsx3512 power 0.0284 0.5 -> 0.169 Inexact Rounded -pwsx3513 power 0.285 0.5 -> 0.534 Inexact Rounded -pwsx3514 power 0.0285 0.5 -> 0.169 Inexact Rounded -pwsx3515 power 0.286 0.5 -> 0.535 Inexact Rounded -pwsx3516 power 0.0286 0.5 -> 0.169 Inexact Rounded -pwsx3517 power 0.287 0.5 -> 0.536 Inexact Rounded -pwsx3518 power 0.0287 0.5 -> 0.169 Inexact Rounded -pwsx3519 power 0.288 0.5 -> 0.537 Inexact Rounded -pwsx3520 power 0.0288 0.5 -> 0.170 Inexact Rounded -pwsx3521 power 0.289 0.5 -> 0.538 Inexact Rounded -pwsx3522 power 0.0289 0.5 -> 0.170 Inexact Rounded -pwsx3523 power 0.291 0.5 -> 0.539 Inexact Rounded -pwsx3524 power 0.0291 0.5 -> 0.171 Inexact Rounded -pwsx3525 power 0.292 0.5 -> 0.540 Inexact Rounded -pwsx3526 power 0.0292 0.5 -> 0.171 Inexact Rounded -pwsx3527 power 0.293 0.5 -> 0.541 Inexact Rounded -pwsx3528 power 0.0293 0.5 -> 0.171 Inexact Rounded -pwsx3529 power 0.294 0.5 -> 0.542 Inexact Rounded -pwsx3530 power 0.0294 0.5 -> 0.171 Inexact Rounded -pwsx3531 power 0.295 0.5 -> 0.543 Inexact Rounded -pwsx3532 power 0.0295 0.5 -> 0.172 Inexact Rounded -pwsx3533 power 0.296 0.5 -> 0.544 Inexact Rounded -pwsx3534 power 0.0296 0.5 -> 0.172 Inexact Rounded -pwsx3535 power 0.297 0.5 -> 0.545 Inexact Rounded -pwsx3536 power 0.0297 0.5 -> 0.172 Inexact Rounded -pwsx3537 power 0.298 0.5 -> 0.546 Inexact Rounded -pwsx3538 power 0.0298 0.5 -> 0.173 Inexact Rounded -pwsx3539 power 0.299 0.5 -> 0.547 Inexact Rounded -pwsx3540 power 0.0299 0.5 -> 0.173 Inexact Rounded -pwsx3541 power 0.301 0.5 -> 0.549 Inexact Rounded -pwsx3542 power 0.0301 0.5 -> 0.173 Inexact Rounded -pwsx3543 power 0.302 0.5 -> 0.550 Inexact Rounded -pwsx3544 power 0.0302 0.5 -> 0.174 Inexact Rounded -pwsx3545 power 0.303 0.5 -> 0.550 Inexact Rounded -pwsx3546 power 0.0303 0.5 -> 0.174 Inexact Rounded -pwsx3547 power 0.304 0.5 -> 0.551 Inexact Rounded -pwsx3548 power 0.0304 0.5 -> 0.174 Inexact Rounded -pwsx3549 power 0.305 0.5 -> 0.552 Inexact Rounded -pwsx3550 power 0.0305 0.5 -> 0.175 Inexact Rounded -pwsx3551 power 0.306 0.5 -> 0.553 Inexact Rounded -pwsx3552 power 0.0306 0.5 -> 0.175 Inexact Rounded -pwsx3553 power 0.307 0.5 -> 0.554 Inexact Rounded -pwsx3554 power 0.0307 0.5 -> 0.175 Inexact Rounded -pwsx3555 power 0.308 0.5 -> 0.555 Inexact Rounded -pwsx3556 power 0.0308 0.5 -> 0.175 Inexact Rounded -pwsx3557 power 0.309 0.5 -> 0.556 Inexact Rounded -pwsx3558 power 0.0309 0.5 -> 0.176 Inexact Rounded -pwsx3559 power 0.311 0.5 -> 0.558 Inexact Rounded -pwsx3560 power 0.0311 0.5 -> 0.176 Inexact Rounded -pwsx3561 power 0.312 0.5 -> 0.559 Inexact Rounded -pwsx3562 power 0.0312 0.5 -> 0.177 Inexact Rounded -pwsx3563 power 0.313 0.5 -> 0.559 Inexact Rounded -pwsx3564 power 0.0313 0.5 -> 0.177 Inexact Rounded -pwsx3565 power 0.314 0.5 -> 0.560 Inexact Rounded -pwsx3566 power 0.0314 0.5 -> 0.177 Inexact Rounded -pwsx3567 power 0.315 0.5 -> 0.561 Inexact Rounded -pwsx3568 power 0.0315 0.5 -> 0.177 Inexact Rounded -pwsx3569 power 0.316 0.5 -> 0.562 Inexact Rounded -pwsx3570 power 0.0316 0.5 -> 0.178 Inexact Rounded -pwsx3571 power 0.317 0.5 -> 0.563 Inexact Rounded -pwsx3572 power 0.0317 0.5 -> 0.178 Inexact Rounded -pwsx3573 power 0.318 0.5 -> 0.564 Inexact Rounded -pwsx3574 power 0.0318 0.5 -> 0.178 Inexact Rounded -pwsx3575 power 0.319 0.5 -> 0.565 Inexact Rounded -pwsx3576 power 0.0319 0.5 -> 0.179 Inexact Rounded -pwsx3577 power 0.321 0.5 -> 0.567 Inexact Rounded -pwsx3578 power 0.0321 0.5 -> 0.179 Inexact Rounded -pwsx3579 power 0.322 0.5 -> 0.567 Inexact Rounded -pwsx3580 power 0.0322 0.5 -> 0.179 Inexact Rounded -pwsx3581 power 0.323 0.5 -> 0.568 Inexact Rounded -pwsx3582 power 0.0323 0.5 -> 0.180 Inexact Rounded -pwsx3583 power 0.324 0.5 -> 0.569 Inexact Rounded -pwsx3584 power 0.0324 0.5 -> 0.180 Inexact Rounded -pwsx3585 power 0.325 0.5 -> 0.570 Inexact Rounded -pwsx3586 power 0.0325 0.5 -> 0.180 Inexact Rounded -pwsx3587 power 0.326 0.5 -> 0.571 Inexact Rounded -pwsx3588 power 0.0326 0.5 -> 0.181 Inexact Rounded -pwsx3589 power 0.327 0.5 -> 0.572 Inexact Rounded -pwsx3590 power 0.0327 0.5 -> 0.181 Inexact Rounded -pwsx3591 power 0.328 0.5 -> 0.573 Inexact Rounded -pwsx3592 power 0.0328 0.5 -> 0.181 Inexact Rounded -pwsx3593 power 0.329 0.5 -> 0.574 Inexact Rounded -pwsx3594 power 0.0329 0.5 -> 0.181 Inexact Rounded -pwsx3595 power 0.331 0.5 -> 0.575 Inexact Rounded -pwsx3596 power 0.0331 0.5 -> 0.182 Inexact Rounded -pwsx3597 power 0.332 0.5 -> 0.576 Inexact Rounded -pwsx3598 power 0.0332 0.5 -> 0.182 Inexact Rounded -pwsx3599 power 0.333 0.5 -> 0.577 Inexact Rounded -pwsx3600 power 0.0333 0.5 -> 0.182 Inexact Rounded -pwsx3601 power 0.334 0.5 -> 0.578 Inexact Rounded -pwsx3602 power 0.0334 0.5 -> 0.183 Inexact Rounded -pwsx3603 power 0.335 0.5 -> 0.579 Inexact Rounded -pwsx3604 power 0.0335 0.5 -> 0.183 Inexact Rounded -pwsx3605 power 0.336 0.5 -> 0.580 Inexact Rounded -pwsx3606 power 0.0336 0.5 -> 0.183 Inexact Rounded -pwsx3607 power 0.337 0.5 -> 0.581 Inexact Rounded -pwsx3608 power 0.0337 0.5 -> 0.184 Inexact Rounded -pwsx3609 power 0.338 0.5 -> 0.581 Inexact Rounded -pwsx3610 power 0.0338 0.5 -> 0.184 Inexact Rounded -pwsx3611 power 0.339 0.5 -> 0.582 Inexact Rounded -pwsx3612 power 0.0339 0.5 -> 0.184 Inexact Rounded -pwsx3613 power 0.341 0.5 -> 0.584 Inexact Rounded -pwsx3614 power 0.0341 0.5 -> 0.185 Inexact Rounded -pwsx3615 power 0.342 0.5 -> 0.585 Inexact Rounded -pwsx3616 power 0.0342 0.5 -> 0.185 Inexact Rounded -pwsx3617 power 0.343 0.5 -> 0.586 Inexact Rounded -pwsx3618 power 0.0343 0.5 -> 0.185 Inexact Rounded -pwsx3619 power 0.344 0.5 -> 0.587 Inexact Rounded -pwsx3620 power 0.0344 0.5 -> 0.185 Inexact Rounded -pwsx3621 power 0.345 0.5 -> 0.587 Inexact Rounded -pwsx3622 power 0.0345 0.5 -> 0.186 Inexact Rounded -pwsx3623 power 0.346 0.5 -> 0.588 Inexact Rounded -pwsx3624 power 0.0346 0.5 -> 0.186 Inexact Rounded -pwsx3625 power 0.347 0.5 -> 0.589 Inexact Rounded -pwsx3626 power 0.0347 0.5 -> 0.186 Inexact Rounded -pwsx3627 power 0.348 0.5 -> 0.590 Inexact Rounded -pwsx3628 power 0.0348 0.5 -> 0.187 Inexact Rounded -pwsx3629 power 0.349 0.5 -> 0.591 Inexact Rounded -pwsx3630 power 0.0349 0.5 -> 0.187 Inexact Rounded -pwsx3631 power 0.351 0.5 -> 0.592 Inexact Rounded -pwsx3632 power 0.0351 0.5 -> 0.187 Inexact Rounded -pwsx3633 power 0.352 0.5 -> 0.593 Inexact Rounded -pwsx3634 power 0.0352 0.5 -> 0.188 Inexact Rounded -pwsx3635 power 0.353 0.5 -> 0.594 Inexact Rounded -pwsx3636 power 0.0353 0.5 -> 0.188 Inexact Rounded -pwsx3637 power 0.354 0.5 -> 0.595 Inexact Rounded -pwsx3638 power 0.0354 0.5 -> 0.188 Inexact Rounded -pwsx3639 power 0.355 0.5 -> 0.596 Inexact Rounded -pwsx3640 power 0.0355 0.5 -> 0.188 Inexact Rounded -pwsx3641 power 0.356 0.5 -> 0.597 Inexact Rounded -pwsx3642 power 0.0356 0.5 -> 0.189 Inexact Rounded -pwsx3643 power 0.357 0.5 -> 0.597 Inexact Rounded -pwsx3644 power 0.0357 0.5 -> 0.189 Inexact Rounded -pwsx3645 power 0.358 0.5 -> 0.598 Inexact Rounded -pwsx3646 power 0.0358 0.5 -> 0.189 Inexact Rounded -pwsx3647 power 0.359 0.5 -> 0.599 Inexact Rounded -pwsx3648 power 0.0359 0.5 -> 0.189 Inexact Rounded -pwsx3649 power 0.361 0.5 -> 0.601 Inexact Rounded -pwsx3650 power 0.0361 0.5 -> 0.190 Inexact Rounded -pwsx3651 power 0.362 0.5 -> 0.602 Inexact Rounded -pwsx3652 power 0.0362 0.5 -> 0.190 Inexact Rounded -pwsx3653 power 0.363 0.5 -> 0.602 Inexact Rounded -pwsx3654 power 0.0363 0.5 -> 0.191 Inexact Rounded -pwsx3655 power 0.364 0.5 -> 0.603 Inexact Rounded -pwsx3656 power 0.0364 0.5 -> 0.191 Inexact Rounded -pwsx3657 power 0.365 0.5 -> 0.604 Inexact Rounded -pwsx3658 power 0.0365 0.5 -> 0.191 Inexact Rounded -pwsx3659 power 0.366 0.5 -> 0.605 Inexact Rounded -pwsx3660 power 0.0366 0.5 -> 0.191 Inexact Rounded -pwsx3661 power 0.367 0.5 -> 0.606 Inexact Rounded -pwsx3662 power 0.0367 0.5 -> 0.192 Inexact Rounded -pwsx3663 power 0.368 0.5 -> 0.607 Inexact Rounded -pwsx3664 power 0.0368 0.5 -> 0.192 Inexact Rounded -pwsx3665 power 0.369 0.5 -> 0.607 Inexact Rounded -pwsx3666 power 0.0369 0.5 -> 0.192 Inexact Rounded -pwsx3667 power 0.371 0.5 -> 0.609 Inexact Rounded -pwsx3668 power 0.0371 0.5 -> 0.193 Inexact Rounded -pwsx3669 power 0.372 0.5 -> 0.610 Inexact Rounded -pwsx3670 power 0.0372 0.5 -> 0.193 Inexact Rounded -pwsx3671 power 0.373 0.5 -> 0.611 Inexact Rounded -pwsx3672 power 0.0373 0.5 -> 0.193 Inexact Rounded -pwsx3673 power 0.374 0.5 -> 0.612 Inexact Rounded -pwsx3674 power 0.0374 0.5 -> 0.193 Inexact Rounded -pwsx3675 power 0.375 0.5 -> 0.612 Inexact Rounded -pwsx3676 power 0.0375 0.5 -> 0.194 Inexact Rounded -pwsx3677 power 0.376 0.5 -> 0.613 Inexact Rounded -pwsx3678 power 0.0376 0.5 -> 0.194 Inexact Rounded -pwsx3679 power 0.377 0.5 -> 0.614 Inexact Rounded -pwsx3680 power 0.0377 0.5 -> 0.194 Inexact Rounded -pwsx3681 power 0.378 0.5 -> 0.615 Inexact Rounded -pwsx3682 power 0.0378 0.5 -> 0.194 Inexact Rounded -pwsx3683 power 0.379 0.5 -> 0.616 Inexact Rounded -pwsx3684 power 0.0379 0.5 -> 0.195 Inexact Rounded -pwsx3685 power 0.381 0.5 -> 0.617 Inexact Rounded -pwsx3686 power 0.0381 0.5 -> 0.195 Inexact Rounded -pwsx3687 power 0.382 0.5 -> 0.618 Inexact Rounded -pwsx3688 power 0.0382 0.5 -> 0.195 Inexact Rounded -pwsx3689 power 0.383 0.5 -> 0.619 Inexact Rounded -pwsx3690 power 0.0383 0.5 -> 0.196 Inexact Rounded -pwsx3691 power 0.384 0.5 -> 0.620 Inexact Rounded -pwsx3692 power 0.0384 0.5 -> 0.196 Inexact Rounded -pwsx3693 power 0.385 0.5 -> 0.620 Inexact Rounded -pwsx3694 power 0.0385 0.5 -> 0.196 Inexact Rounded -pwsx3695 power 0.386 0.5 -> 0.621 Inexact Rounded -pwsx3696 power 0.0386 0.5 -> 0.196 Inexact Rounded -pwsx3697 power 0.387 0.5 -> 0.622 Inexact Rounded -pwsx3698 power 0.0387 0.5 -> 0.197 Inexact Rounded -pwsx3699 power 0.388 0.5 -> 0.623 Inexact Rounded -pwsx3700 power 0.0388 0.5 -> 0.197 Inexact Rounded -pwsx3701 power 0.389 0.5 -> 0.624 Inexact Rounded -pwsx3702 power 0.0389 0.5 -> 0.197 Inexact Rounded -pwsx3703 power 0.391 0.5 -> 0.625 Inexact Rounded -pwsx3704 power 0.0391 0.5 -> 0.198 Inexact Rounded -pwsx3705 power 0.392 0.5 -> 0.626 Inexact Rounded -pwsx3706 power 0.0392 0.5 -> 0.198 Inexact Rounded -pwsx3707 power 0.393 0.5 -> 0.627 Inexact Rounded -pwsx3708 power 0.0393 0.5 -> 0.198 Inexact Rounded -pwsx3709 power 0.394 0.5 -> 0.628 Inexact Rounded -pwsx3710 power 0.0394 0.5 -> 0.198 Inexact Rounded -pwsx3711 power 0.395 0.5 -> 0.628 Inexact Rounded -pwsx3712 power 0.0395 0.5 -> 0.199 Inexact Rounded -pwsx3713 power 0.396 0.5 -> 0.629 Inexact Rounded -pwsx3714 power 0.0396 0.5 -> 0.199 Inexact Rounded -pwsx3715 power 0.397 0.5 -> 0.630 Inexact Rounded -pwsx3716 power 0.0397 0.5 -> 0.199 Inexact Rounded -pwsx3717 power 0.398 0.5 -> 0.631 Inexact Rounded -pwsx3718 power 0.0398 0.5 -> 0.199 Inexact Rounded -pwsx3719 power 0.399 0.5 -> 0.632 Inexact Rounded -pwsx3720 power 0.0399 0.5 -> 0.200 Inexact Rounded -pwsx3721 power 0.401 0.5 -> 0.633 Inexact Rounded -pwsx3722 power 0.0401 0.5 -> 0.200 Inexact Rounded -pwsx3723 power 0.402 0.5 -> 0.634 Inexact Rounded -pwsx3724 power 0.0402 0.5 -> 0.200 Inexact Rounded -pwsx3725 power 0.403 0.5 -> 0.635 Inexact Rounded -pwsx3726 power 0.0403 0.5 -> 0.201 Inexact Rounded -pwsx3727 power 0.404 0.5 -> 0.636 Inexact Rounded -pwsx3728 power 0.0404 0.5 -> 0.201 Inexact Rounded -pwsx3729 power 0.405 0.5 -> 0.636 Inexact Rounded -pwsx3730 power 0.0405 0.5 -> 0.201 Inexact Rounded -pwsx3731 power 0.406 0.5 -> 0.637 Inexact Rounded -pwsx3732 power 0.0406 0.5 -> 0.201 Inexact Rounded -pwsx3733 power 0.407 0.5 -> 0.638 Inexact Rounded -pwsx3734 power 0.0407 0.5 -> 0.202 Inexact Rounded -pwsx3735 power 0.408 0.5 -> 0.639 Inexact Rounded -pwsx3736 power 0.0408 0.5 -> 0.202 Inexact Rounded -pwsx3737 power 0.409 0.5 -> 0.640 Inexact Rounded -pwsx3738 power 0.0409 0.5 -> 0.202 Inexact Rounded -pwsx3739 power 0.411 0.5 -> 0.641 Inexact Rounded -pwsx3740 power 0.0411 0.5 -> 0.203 Inexact Rounded -pwsx3741 power 0.412 0.5 -> 0.642 Inexact Rounded -pwsx3742 power 0.0412 0.5 -> 0.203 Inexact Rounded -pwsx3743 power 0.413 0.5 -> 0.643 Inexact Rounded -pwsx3744 power 0.0413 0.5 -> 0.203 Inexact Rounded -pwsx3745 power 0.414 0.5 -> 0.643 Inexact Rounded -pwsx3746 power 0.0414 0.5 -> 0.203 Inexact Rounded -pwsx3747 power 0.415 0.5 -> 0.644 Inexact Rounded -pwsx3748 power 0.0415 0.5 -> 0.204 Inexact Rounded -pwsx3749 power 0.416 0.5 -> 0.645 Inexact Rounded -pwsx3750 power 0.0416 0.5 -> 0.204 Inexact Rounded -pwsx3751 power 0.417 0.5 -> 0.646 Inexact Rounded -pwsx3752 power 0.0417 0.5 -> 0.204 Inexact Rounded -pwsx3753 power 0.418 0.5 -> 0.647 Inexact Rounded -pwsx3754 power 0.0418 0.5 -> 0.204 Inexact Rounded -pwsx3755 power 0.419 0.5 -> 0.647 Inexact Rounded -pwsx3756 power 0.0419 0.5 -> 0.205 Inexact Rounded -pwsx3757 power 0.421 0.5 -> 0.649 Inexact Rounded -pwsx3758 power 0.0421 0.5 -> 0.205 Inexact Rounded -pwsx3759 power 0.422 0.5 -> 0.650 Inexact Rounded -pwsx3760 power 0.0422 0.5 -> 0.205 Inexact Rounded -pwsx3761 power 0.423 0.5 -> 0.650 Inexact Rounded -pwsx3762 power 0.0423 0.5 -> 0.206 Inexact Rounded -pwsx3763 power 0.424 0.5 -> 0.651 Inexact Rounded -pwsx3764 power 0.0424 0.5 -> 0.206 Inexact Rounded -pwsx3765 power 0.425 0.5 -> 0.652 Inexact Rounded -pwsx3766 power 0.0425 0.5 -> 0.206 Inexact Rounded -pwsx3767 power 0.426 0.5 -> 0.653 Inexact Rounded -pwsx3768 power 0.0426 0.5 -> 0.206 Inexact Rounded -pwsx3769 power 0.427 0.5 -> 0.653 Inexact Rounded -pwsx3770 power 0.0427 0.5 -> 0.207 Inexact Rounded -pwsx3771 power 0.428 0.5 -> 0.654 Inexact Rounded -pwsx3772 power 0.0428 0.5 -> 0.207 Inexact Rounded -pwsx3773 power 0.429 0.5 -> 0.655 Inexact Rounded -pwsx3774 power 0.0429 0.5 -> 0.207 Inexact Rounded -pwsx3775 power 0.431 0.5 -> 0.657 Inexact Rounded -pwsx3776 power 0.0431 0.5 -> 0.208 Inexact Rounded -pwsx3777 power 0.432 0.5 -> 0.657 Inexact Rounded -pwsx3778 power 0.0432 0.5 -> 0.208 Inexact Rounded -pwsx3779 power 0.433 0.5 -> 0.658 Inexact Rounded -pwsx3780 power 0.0433 0.5 -> 0.208 Inexact Rounded -pwsx3781 power 0.434 0.5 -> 0.659 Inexact Rounded -pwsx3782 power 0.0434 0.5 -> 0.208 Inexact Rounded -pwsx3783 power 0.435 0.5 -> 0.660 Inexact Rounded -pwsx3784 power 0.0435 0.5 -> 0.209 Inexact Rounded -pwsx3785 power 0.436 0.5 -> 0.660 Inexact Rounded -pwsx3786 power 0.0436 0.5 -> 0.209 Inexact Rounded -pwsx3787 power 0.437 0.5 -> 0.661 Inexact Rounded -pwsx3788 power 0.0437 0.5 -> 0.209 Inexact Rounded -pwsx3789 power 0.438 0.5 -> 0.662 Inexact Rounded -pwsx3790 power 0.0438 0.5 -> 0.209 Inexact Rounded -pwsx3791 power 0.439 0.5 -> 0.663 Inexact Rounded -pwsx3792 power 0.0439 0.5 -> 0.210 Inexact Rounded -pwsx3793 power 0.441 0.5 -> 0.664 Inexact Rounded -pwsx3794 power 0.0441 0.5 -> 0.210 Inexact Rounded -pwsx3795 power 0.442 0.5 -> 0.665 Inexact Rounded -pwsx3796 power 0.0442 0.5 -> 0.210 Inexact Rounded -pwsx3797 power 0.443 0.5 -> 0.666 Inexact Rounded -pwsx3798 power 0.0443 0.5 -> 0.210 Inexact Rounded -pwsx3799 power 0.444 0.5 -> 0.666 Inexact Rounded -pwsx3800 power 0.0444 0.5 -> 0.211 Inexact Rounded -pwsx3801 power 0.445 0.5 -> 0.667 Inexact Rounded -pwsx3802 power 0.0445 0.5 -> 0.211 Inexact Rounded -pwsx3803 power 0.446 0.5 -> 0.668 Inexact Rounded -pwsx3804 power 0.0446 0.5 -> 0.211 Inexact Rounded -pwsx3805 power 0.447 0.5 -> 0.669 Inexact Rounded -pwsx3806 power 0.0447 0.5 -> 0.211 Inexact Rounded -pwsx3807 power 0.448 0.5 -> 0.669 Inexact Rounded -pwsx3808 power 0.0448 0.5 -> 0.212 Inexact Rounded -pwsx3809 power 0.449 0.5 -> 0.670 Inexact Rounded -pwsx3810 power 0.0449 0.5 -> 0.212 Inexact Rounded -pwsx3811 power 0.451 0.5 -> 0.672 Inexact Rounded -pwsx3812 power 0.0451 0.5 -> 0.212 Inexact Rounded -pwsx3813 power 0.452 0.5 -> 0.672 Inexact Rounded -pwsx3814 power 0.0452 0.5 -> 0.213 Inexact Rounded -pwsx3815 power 0.453 0.5 -> 0.673 Inexact Rounded -pwsx3816 power 0.0453 0.5 -> 0.213 Inexact Rounded -pwsx3817 power 0.454 0.5 -> 0.674 Inexact Rounded -pwsx3818 power 0.0454 0.5 -> 0.213 Inexact Rounded -pwsx3819 power 0.455 0.5 -> 0.675 Inexact Rounded -pwsx3820 power 0.0455 0.5 -> 0.213 Inexact Rounded -pwsx3821 power 0.456 0.5 -> 0.675 Inexact Rounded -pwsx3822 power 0.0456 0.5 -> 0.214 Inexact Rounded -pwsx3823 power 0.457 0.5 -> 0.676 Inexact Rounded -pwsx3824 power 0.0457 0.5 -> 0.214 Inexact Rounded -pwsx3825 power 0.458 0.5 -> 0.677 Inexact Rounded -pwsx3826 power 0.0458 0.5 -> 0.214 Inexact Rounded -pwsx3827 power 0.459 0.5 -> 0.677 Inexact Rounded -pwsx3828 power 0.0459 0.5 -> 0.214 Inexact Rounded -pwsx3829 power 0.461 0.5 -> 0.679 Inexact Rounded -pwsx3830 power 0.0461 0.5 -> 0.215 Inexact Rounded -pwsx3831 power 0.462 0.5 -> 0.680 Inexact Rounded -pwsx3832 power 0.0462 0.5 -> 0.215 Inexact Rounded -pwsx3833 power 0.463 0.5 -> 0.680 Inexact Rounded -pwsx3834 power 0.0463 0.5 -> 0.215 Inexact Rounded -pwsx3835 power 0.464 0.5 -> 0.681 Inexact Rounded -pwsx3836 power 0.0464 0.5 -> 0.215 Inexact Rounded -pwsx3837 power 0.465 0.5 -> 0.682 Inexact Rounded -pwsx3838 power 0.0465 0.5 -> 0.216 Inexact Rounded -pwsx3839 power 0.466 0.5 -> 0.683 Inexact Rounded -pwsx3840 power 0.0466 0.5 -> 0.216 Inexact Rounded -pwsx3841 power 0.467 0.5 -> 0.683 Inexact Rounded -pwsx3842 power 0.0467 0.5 -> 0.216 Inexact Rounded -pwsx3843 power 0.468 0.5 -> 0.684 Inexact Rounded -pwsx3844 power 0.0468 0.5 -> 0.216 Inexact Rounded -pwsx3845 power 0.469 0.5 -> 0.685 Inexact Rounded -pwsx3846 power 0.0469 0.5 -> 0.217 Inexact Rounded -pwsx3847 power 0.471 0.5 -> 0.686 Inexact Rounded -pwsx3848 power 0.0471 0.5 -> 0.217 Inexact Rounded -pwsx3849 power 0.472 0.5 -> 0.687 Inexact Rounded -pwsx3850 power 0.0472 0.5 -> 0.217 Inexact Rounded -pwsx3851 power 0.473 0.5 -> 0.688 Inexact Rounded -pwsx3852 power 0.0473 0.5 -> 0.217 Inexact Rounded -pwsx3853 power 0.474 0.5 -> 0.688 Inexact Rounded -pwsx3854 power 0.0474 0.5 -> 0.218 Inexact Rounded -pwsx3855 power 0.475 0.5 -> 0.689 Inexact Rounded -pwsx3856 power 0.0475 0.5 -> 0.218 Inexact Rounded -pwsx3857 power 0.476 0.5 -> 0.690 Inexact Rounded -pwsx3858 power 0.0476 0.5 -> 0.218 Inexact Rounded -pwsx3859 power 0.477 0.5 -> 0.691 Inexact Rounded -pwsx3860 power 0.0477 0.5 -> 0.218 Inexact Rounded -pwsx3861 power 0.478 0.5 -> 0.691 Inexact Rounded -pwsx3862 power 0.0478 0.5 -> 0.219 Inexact Rounded -pwsx3863 power 0.479 0.5 -> 0.692 Inexact Rounded -pwsx3864 power 0.0479 0.5 -> 0.219 Inexact Rounded -pwsx3865 power 0.481 0.5 -> 0.694 Inexact Rounded -pwsx3866 power 0.0481 0.5 -> 0.219 Inexact Rounded -pwsx3867 power 0.482 0.5 -> 0.694 Inexact Rounded -pwsx3868 power 0.0482 0.5 -> 0.220 Inexact Rounded -pwsx3869 power 0.483 0.5 -> 0.695 Inexact Rounded -pwsx3870 power 0.0483 0.5 -> 0.220 Inexact Rounded -pwsx3871 power 0.484 0.5 -> 0.696 Inexact Rounded -pwsx3872 power 0.0484 0.5 -> 0.220 Inexact Rounded -pwsx3873 power 0.485 0.5 -> 0.696 Inexact Rounded -pwsx3874 power 0.0485 0.5 -> 0.220 Inexact Rounded -pwsx3875 power 0.486 0.5 -> 0.697 Inexact Rounded -pwsx3876 power 0.0486 0.5 -> 0.220 Inexact Rounded -pwsx3877 power 0.487 0.5 -> 0.698 Inexact Rounded -pwsx3878 power 0.0487 0.5 -> 0.221 Inexact Rounded -pwsx3879 power 0.488 0.5 -> 0.699 Inexact Rounded -pwsx3880 power 0.0488 0.5 -> 0.221 Inexact Rounded -pwsx3881 power 0.489 0.5 -> 0.699 Inexact Rounded -pwsx3882 power 0.0489 0.5 -> 0.221 Inexact Rounded -pwsx3883 power 0.491 0.5 -> 0.701 Inexact Rounded -pwsx3884 power 0.0491 0.5 -> 0.222 Inexact Rounded -pwsx3885 power 0.492 0.5 -> 0.701 Inexact Rounded -pwsx3886 power 0.0492 0.5 -> 0.222 Inexact Rounded -pwsx3887 power 0.493 0.5 -> 0.702 Inexact Rounded -pwsx3888 power 0.0493 0.5 -> 0.222 Inexact Rounded -pwsx3889 power 0.494 0.5 -> 0.703 Inexact Rounded -pwsx3890 power 0.0494 0.5 -> 0.222 Inexact Rounded -pwsx3891 power 0.495 0.5 -> 0.704 Inexact Rounded -pwsx3892 power 0.0495 0.5 -> 0.222 Inexact Rounded -pwsx3893 power 0.496 0.5 -> 0.704 Inexact Rounded -pwsx3894 power 0.0496 0.5 -> 0.223 Inexact Rounded -pwsx3895 power 0.497 0.5 -> 0.705 Inexact Rounded -pwsx3896 power 0.0497 0.5 -> 0.223 Inexact Rounded -pwsx3897 power 0.498 0.5 -> 0.706 Inexact Rounded -pwsx3898 power 0.0498 0.5 -> 0.223 Inexact Rounded -pwsx3899 power 0.499 0.5 -> 0.706 Inexact Rounded -pwsx3900 power 0.0499 0.5 -> 0.223 Inexact Rounded -pwsx3901 power 0.501 0.5 -> 0.708 Inexact Rounded -pwsx3902 power 0.0501 0.5 -> 0.224 Inexact Rounded -pwsx3903 power 0.502 0.5 -> 0.709 Inexact Rounded -pwsx3904 power 0.0502 0.5 -> 0.224 Inexact Rounded -pwsx3905 power 0.503 0.5 -> 0.709 Inexact Rounded -pwsx3906 power 0.0503 0.5 -> 0.224 Inexact Rounded -pwsx3907 power 0.504 0.5 -> 0.710 Inexact Rounded -pwsx3908 power 0.0504 0.5 -> 0.224 Inexact Rounded -pwsx3909 power 0.505 0.5 -> 0.711 Inexact Rounded -pwsx3910 power 0.0505 0.5 -> 0.225 Inexact Rounded -pwsx3911 power 0.506 0.5 -> 0.711 Inexact Rounded -pwsx3912 power 0.0506 0.5 -> 0.225 Inexact Rounded -pwsx3913 power 0.507 0.5 -> 0.712 Inexact Rounded -pwsx3914 power 0.0507 0.5 -> 0.225 Inexact Rounded -pwsx3915 power 0.508 0.5 -> 0.713 Inexact Rounded -pwsx3916 power 0.0508 0.5 -> 0.225 Inexact Rounded -pwsx3917 power 0.509 0.5 -> 0.713 Inexact Rounded -pwsx3918 power 0.0509 0.5 -> 0.226 Inexact Rounded -pwsx3919 power 0.511 0.5 -> 0.715 Inexact Rounded -pwsx3920 power 0.0511 0.5 -> 0.226 Inexact Rounded -pwsx3921 power 0.512 0.5 -> 0.716 Inexact Rounded -pwsx3922 power 0.0512 0.5 -> 0.226 Inexact Rounded -pwsx3923 power 0.513 0.5 -> 0.716 Inexact Rounded -pwsx3924 power 0.0513 0.5 -> 0.226 Inexact Rounded -pwsx3925 power 0.514 0.5 -> 0.717 Inexact Rounded -pwsx3926 power 0.0514 0.5 -> 0.227 Inexact Rounded -pwsx3927 power 0.515 0.5 -> 0.718 Inexact Rounded -pwsx3928 power 0.0515 0.5 -> 0.227 Inexact Rounded -pwsx3929 power 0.516 0.5 -> 0.718 Inexact Rounded -pwsx3930 power 0.0516 0.5 -> 0.227 Inexact Rounded -pwsx3931 power 0.517 0.5 -> 0.719 Inexact Rounded -pwsx3932 power 0.0517 0.5 -> 0.227 Inexact Rounded -pwsx3933 power 0.518 0.5 -> 0.720 Inexact Rounded -pwsx3934 power 0.0518 0.5 -> 0.228 Inexact Rounded -pwsx3935 power 0.519 0.5 -> 0.720 Inexact Rounded -pwsx3936 power 0.0519 0.5 -> 0.228 Inexact Rounded -pwsx3937 power 0.521 0.5 -> 0.722 Inexact Rounded -pwsx3938 power 0.0521 0.5 -> 0.228 Inexact Rounded -pwsx3939 power 0.522 0.5 -> 0.722 Inexact Rounded -pwsx3940 power 0.0522 0.5 -> 0.228 Inexact Rounded -pwsx3941 power 0.523 0.5 -> 0.723 Inexact Rounded -pwsx3942 power 0.0523 0.5 -> 0.229 Inexact Rounded -pwsx3943 power 0.524 0.5 -> 0.724 Inexact Rounded -pwsx3944 power 0.0524 0.5 -> 0.229 Inexact Rounded -pwsx3945 power 0.525 0.5 -> 0.725 Inexact Rounded -pwsx3946 power 0.0525 0.5 -> 0.229 Inexact Rounded -pwsx3947 power 0.526 0.5 -> 0.725 Inexact Rounded -pwsx3948 power 0.0526 0.5 -> 0.229 Inexact Rounded -pwsx3949 power 0.527 0.5 -> 0.726 Inexact Rounded -pwsx3950 power 0.0527 0.5 -> 0.230 Inexact Rounded -pwsx3951 power 0.528 0.5 -> 0.727 Inexact Rounded -pwsx3952 power 0.0528 0.5 -> 0.230 Inexact Rounded -pwsx3953 power 0.529 0.5 -> 0.727 Inexact Rounded -pwsx3954 power 0.0529 0.5 -> 0.230 Inexact Rounded -pwsx3955 power 0.531 0.5 -> 0.729 Inexact Rounded -pwsx3956 power 0.0531 0.5 -> 0.230 Inexact Rounded -pwsx3957 power 0.532 0.5 -> 0.729 Inexact Rounded -pwsx3958 power 0.0532 0.5 -> 0.231 Inexact Rounded -pwsx3959 power 0.533 0.5 -> 0.730 Inexact Rounded -pwsx3960 power 0.0533 0.5 -> 0.231 Inexact Rounded -pwsx3961 power 0.534 0.5 -> 0.731 Inexact Rounded -pwsx3962 power 0.0534 0.5 -> 0.231 Inexact Rounded -pwsx3963 power 0.535 0.5 -> 0.731 Inexact Rounded -pwsx3964 power 0.0535 0.5 -> 0.231 Inexact Rounded -pwsx3965 power 0.536 0.5 -> 0.732 Inexact Rounded -pwsx3966 power 0.0536 0.5 -> 0.232 Inexact Rounded -pwsx3967 power 0.537 0.5 -> 0.733 Inexact Rounded -pwsx3968 power 0.0537 0.5 -> 0.232 Inexact Rounded -pwsx3969 power 0.538 0.5 -> 0.733 Inexact Rounded -pwsx3970 power 0.0538 0.5 -> 0.232 Inexact Rounded -pwsx3971 power 0.539 0.5 -> 0.734 Inexact Rounded -pwsx3972 power 0.0539 0.5 -> 0.232 Inexact Rounded -pwsx3973 power 0.541 0.5 -> 0.736 Inexact Rounded -pwsx3974 power 0.0541 0.5 -> 0.233 Inexact Rounded -pwsx3975 power 0.542 0.5 -> 0.736 Inexact Rounded -pwsx3976 power 0.0542 0.5 -> 0.233 Inexact Rounded -pwsx3977 power 0.543 0.5 -> 0.737 Inexact Rounded -pwsx3978 power 0.0543 0.5 -> 0.233 Inexact Rounded -pwsx3979 power 0.544 0.5 -> 0.738 Inexact Rounded -pwsx3980 power 0.0544 0.5 -> 0.233 Inexact Rounded -pwsx3981 power 0.545 0.5 -> 0.738 Inexact Rounded -pwsx3982 power 0.0545 0.5 -> 0.233 Inexact Rounded -pwsx3983 power 0.546 0.5 -> 0.739 Inexact Rounded -pwsx3984 power 0.0546 0.5 -> 0.234 Inexact Rounded -pwsx3985 power 0.547 0.5 -> 0.740 Inexact Rounded -pwsx3986 power 0.0547 0.5 -> 0.234 Inexact Rounded -pwsx3987 power 0.548 0.5 -> 0.740 Inexact Rounded -pwsx3988 power 0.0548 0.5 -> 0.234 Inexact Rounded -pwsx3989 power 0.549 0.5 -> 0.741 Inexact Rounded -pwsx3990 power 0.0549 0.5 -> 0.234 Inexact Rounded -pwsx3991 power 0.551 0.5 -> 0.742 Inexact Rounded -pwsx3992 power 0.0551 0.5 -> 0.235 Inexact Rounded -pwsx3993 power 0.552 0.5 -> 0.743 Inexact Rounded -pwsx3994 power 0.0552 0.5 -> 0.235 Inexact Rounded -pwsx3995 power 0.553 0.5 -> 0.744 Inexact Rounded -pwsx3996 power 0.0553 0.5 -> 0.235 Inexact Rounded -pwsx3997 power 0.554 0.5 -> 0.744 Inexact Rounded -pwsx3998 power 0.0554 0.5 -> 0.235 Inexact Rounded -pwsx3999 power 0.555 0.5 -> 0.745 Inexact Rounded -pwsx4000 power 0.0555 0.5 -> 0.236 Inexact Rounded -pwsx4001 power 0.556 0.5 -> 0.746 Inexact Rounded -pwsx4002 power 0.0556 0.5 -> 0.236 Inexact Rounded -pwsx4003 power 0.557 0.5 -> 0.746 Inexact Rounded -pwsx4004 power 0.0557 0.5 -> 0.236 Inexact Rounded -pwsx4005 power 0.558 0.5 -> 0.747 Inexact Rounded -pwsx4006 power 0.0558 0.5 -> 0.236 Inexact Rounded -pwsx4007 power 0.559 0.5 -> 0.748 Inexact Rounded -pwsx4008 power 0.0559 0.5 -> 0.236 Inexact Rounded -pwsx4009 power 0.561 0.5 -> 0.749 Inexact Rounded -pwsx4010 power 0.0561 0.5 -> 0.237 Inexact Rounded -pwsx4011 power 0.562 0.5 -> 0.750 Inexact Rounded -pwsx4012 power 0.0562 0.5 -> 0.237 Inexact Rounded -pwsx4013 power 0.563 0.5 -> 0.750 Inexact Rounded -pwsx4014 power 0.0563 0.5 -> 0.237 Inexact Rounded -pwsx4015 power 0.564 0.5 -> 0.751 Inexact Rounded -pwsx4016 power 0.0564 0.5 -> 0.237 Inexact Rounded -pwsx4017 power 0.565 0.5 -> 0.752 Inexact Rounded -pwsx4018 power 0.0565 0.5 -> 0.238 Inexact Rounded -pwsx4019 power 0.566 0.5 -> 0.752 Inexact Rounded -pwsx4020 power 0.0566 0.5 -> 0.238 Inexact Rounded -pwsx4021 power 0.567 0.5 -> 0.753 Inexact Rounded -pwsx4022 power 0.0567 0.5 -> 0.238 Inexact Rounded -pwsx4023 power 0.568 0.5 -> 0.754 Inexact Rounded -pwsx4024 power 0.0568 0.5 -> 0.238 Inexact Rounded -pwsx4025 power 0.569 0.5 -> 0.754 Inexact Rounded -pwsx4026 power 0.0569 0.5 -> 0.239 Inexact Rounded -pwsx4027 power 0.571 0.5 -> 0.756 Inexact Rounded -pwsx4028 power 0.0571 0.5 -> 0.239 Inexact Rounded -pwsx4029 power 0.572 0.5 -> 0.756 Inexact Rounded -pwsx4030 power 0.0572 0.5 -> 0.239 Inexact Rounded -pwsx4031 power 0.573 0.5 -> 0.757 Inexact Rounded -pwsx4032 power 0.0573 0.5 -> 0.239 Inexact Rounded -pwsx4033 power 0.574 0.5 -> 0.758 Inexact Rounded -pwsx4034 power 0.0574 0.5 -> 0.240 Inexact Rounded -pwsx4035 power 0.575 0.5 -> 0.758 Inexact Rounded -pwsx4036 power 0.0575 0.5 -> 0.240 Inexact Rounded -pwsx4037 power 0.576 0.5 -> 0.759 Inexact Rounded -pwsx4038 power 0.0576 0.5 -> 0.240 Inexact Rounded -pwsx4039 power 0.577 0.5 -> 0.760 Inexact Rounded -pwsx4040 power 0.0577 0.5 -> 0.240 Inexact Rounded -pwsx4041 power 0.578 0.5 -> 0.760 Inexact Rounded -pwsx4042 power 0.0578 0.5 -> 0.240 Inexact Rounded -pwsx4043 power 0.579 0.5 -> 0.761 Inexact Rounded -pwsx4044 power 0.0579 0.5 -> 0.241 Inexact Rounded -pwsx4045 power 0.581 0.5 -> 0.762 Inexact Rounded -pwsx4046 power 0.0581 0.5 -> 0.241 Inexact Rounded -pwsx4047 power 0.582 0.5 -> 0.763 Inexact Rounded -pwsx4048 power 0.0582 0.5 -> 0.241 Inexact Rounded -pwsx4049 power 0.583 0.5 -> 0.764 Inexact Rounded -pwsx4050 power 0.0583 0.5 -> 0.241 Inexact Rounded -pwsx4051 power 0.584 0.5 -> 0.764 Inexact Rounded -pwsx4052 power 0.0584 0.5 -> 0.242 Inexact Rounded -pwsx4053 power 0.585 0.5 -> 0.765 Inexact Rounded -pwsx4054 power 0.0585 0.5 -> 0.242 Inexact Rounded -pwsx4055 power 0.586 0.5 -> 0.766 Inexact Rounded -pwsx4056 power 0.0586 0.5 -> 0.242 Inexact Rounded -pwsx4057 power 0.587 0.5 -> 0.766 Inexact Rounded -pwsx4058 power 0.0587 0.5 -> 0.242 Inexact Rounded -pwsx4059 power 0.588 0.5 -> 0.767 Inexact Rounded -pwsx4060 power 0.0588 0.5 -> 0.242 Inexact Rounded -pwsx4061 power 0.589 0.5 -> 0.767 Inexact Rounded -pwsx4062 power 0.0589 0.5 -> 0.243 Inexact Rounded -pwsx4063 power 0.591 0.5 -> 0.769 Inexact Rounded -pwsx4064 power 0.0591 0.5 -> 0.243 Inexact Rounded -pwsx4065 power 0.592 0.5 -> 0.769 Inexact Rounded -pwsx4066 power 0.0592 0.5 -> 0.243 Inexact Rounded -pwsx4067 power 0.593 0.5 -> 0.770 Inexact Rounded -pwsx4068 power 0.0593 0.5 -> 0.244 Inexact Rounded -pwsx4069 power 0.594 0.5 -> 0.771 Inexact Rounded -pwsx4070 power 0.0594 0.5 -> 0.244 Inexact Rounded -pwsx4071 power 0.595 0.5 -> 0.771 Inexact Rounded -pwsx4072 power 0.0595 0.5 -> 0.244 Inexact Rounded -pwsx4073 power 0.596 0.5 -> 0.772 Inexact Rounded -pwsx4074 power 0.0596 0.5 -> 0.244 Inexact Rounded -pwsx4075 power 0.597 0.5 -> 0.773 Inexact Rounded -pwsx4076 power 0.0597 0.5 -> 0.244 Inexact Rounded -pwsx4077 power 0.598 0.5 -> 0.773 Inexact Rounded -pwsx4078 power 0.0598 0.5 -> 0.245 Inexact Rounded -pwsx4079 power 0.599 0.5 -> 0.774 Inexact Rounded -pwsx4080 power 0.0599 0.5 -> 0.245 Inexact Rounded -pwsx4081 power 0.601 0.5 -> 0.775 Inexact Rounded -pwsx4082 power 0.0601 0.5 -> 0.245 Inexact Rounded -pwsx4083 power 0.602 0.5 -> 0.776 Inexact Rounded -pwsx4084 power 0.0602 0.5 -> 0.245 Inexact Rounded -pwsx4085 power 0.603 0.5 -> 0.777 Inexact Rounded -pwsx4086 power 0.0603 0.5 -> 0.246 Inexact Rounded -pwsx4087 power 0.604 0.5 -> 0.777 Inexact Rounded -pwsx4088 power 0.0604 0.5 -> 0.246 Inexact Rounded -pwsx4089 power 0.605 0.5 -> 0.778 Inexact Rounded -pwsx4090 power 0.0605 0.5 -> 0.246 Inexact Rounded -pwsx4091 power 0.606 0.5 -> 0.778 Inexact Rounded -pwsx4092 power 0.0606 0.5 -> 0.246 Inexact Rounded -pwsx4093 power 0.607 0.5 -> 0.779 Inexact Rounded -pwsx4094 power 0.0607 0.5 -> 0.246 Inexact Rounded -pwsx4095 power 0.608 0.5 -> 0.780 Inexact Rounded -pwsx4096 power 0.0608 0.5 -> 0.247 Inexact Rounded -pwsx4097 power 0.609 0.5 -> 0.780 Inexact Rounded -pwsx4098 power 0.0609 0.5 -> 0.247 Inexact Rounded -pwsx4099 power 0.611 0.5 -> 0.782 Inexact Rounded -pwsx4100 power 0.0611 0.5 -> 0.247 Inexact Rounded -pwsx4101 power 0.612 0.5 -> 0.782 Inexact Rounded -pwsx4102 power 0.0612 0.5 -> 0.247 Inexact Rounded -pwsx4103 power 0.613 0.5 -> 0.783 Inexact Rounded -pwsx4104 power 0.0613 0.5 -> 0.248 Inexact Rounded -pwsx4105 power 0.614 0.5 -> 0.784 Inexact Rounded -pwsx4106 power 0.0614 0.5 -> 0.248 Inexact Rounded -pwsx4107 power 0.615 0.5 -> 0.784 Inexact Rounded -pwsx4108 power 0.0615 0.5 -> 0.248 Inexact Rounded -pwsx4109 power 0.616 0.5 -> 0.785 Inexact Rounded -pwsx4110 power 0.0616 0.5 -> 0.248 Inexact Rounded -pwsx4111 power 0.617 0.5 -> 0.785 Inexact Rounded -pwsx4112 power 0.0617 0.5 -> 0.248 Inexact Rounded -pwsx4113 power 0.618 0.5 -> 0.786 Inexact Rounded -pwsx4114 power 0.0618 0.5 -> 0.249 Inexact Rounded -pwsx4115 power 0.619 0.5 -> 0.787 Inexact Rounded -pwsx4116 power 0.0619 0.5 -> 0.249 Inexact Rounded -pwsx4117 power 0.621 0.5 -> 0.788 Inexact Rounded -pwsx4118 power 0.0621 0.5 -> 0.249 Inexact Rounded -pwsx4119 power 0.622 0.5 -> 0.789 Inexact Rounded -pwsx4120 power 0.0622 0.5 -> 0.249 Inexact Rounded -pwsx4121 power 0.623 0.5 -> 0.789 Inexact Rounded -pwsx4122 power 0.0623 0.5 -> 0.250 Inexact Rounded -pwsx4123 power 0.624 0.5 -> 0.790 Inexact Rounded -pwsx4124 power 0.0624 0.5 -> 0.250 Inexact Rounded -pwsx4125 power 0.625 0.5 -> 0.791 Inexact Rounded -pwsx4126 power 0.0625 0.5 -> 0.250 Inexact Rounded -pwsx4127 power 0.626 0.5 -> 0.791 Inexact Rounded -pwsx4128 power 0.0626 0.5 -> 0.250 Inexact Rounded -pwsx4129 power 0.627 0.5 -> 0.792 Inexact Rounded -pwsx4130 power 0.0627 0.5 -> 0.250 Inexact Rounded -pwsx4131 power 0.628 0.5 -> 0.792 Inexact Rounded -pwsx4132 power 0.0628 0.5 -> 0.251 Inexact Rounded -pwsx4133 power 0.629 0.5 -> 0.793 Inexact Rounded -pwsx4134 power 0.0629 0.5 -> 0.251 Inexact Rounded -pwsx4135 power 0.631 0.5 -> 0.794 Inexact Rounded -pwsx4136 power 0.0631 0.5 -> 0.251 Inexact Rounded -pwsx4137 power 0.632 0.5 -> 0.795 Inexact Rounded -pwsx4138 power 0.0632 0.5 -> 0.251 Inexact Rounded -pwsx4139 power 0.633 0.5 -> 0.796 Inexact Rounded -pwsx4140 power 0.0633 0.5 -> 0.252 Inexact Rounded -pwsx4141 power 0.634 0.5 -> 0.796 Inexact Rounded -pwsx4142 power 0.0634 0.5 -> 0.252 Inexact Rounded -pwsx4143 power 0.635 0.5 -> 0.797 Inexact Rounded -pwsx4144 power 0.0635 0.5 -> 0.252 Inexact Rounded -pwsx4145 power 0.636 0.5 -> 0.797 Inexact Rounded -pwsx4146 power 0.0636 0.5 -> 0.252 Inexact Rounded -pwsx4147 power 0.637 0.5 -> 0.798 Inexact Rounded -pwsx4148 power 0.0637 0.5 -> 0.252 Inexact Rounded -pwsx4149 power 0.638 0.5 -> 0.799 Inexact Rounded -pwsx4150 power 0.0638 0.5 -> 0.253 Inexact Rounded -pwsx4151 power 0.639 0.5 -> 0.799 Inexact Rounded -pwsx4152 power 0.0639 0.5 -> 0.253 Inexact Rounded -pwsx4153 power 0.641 0.5 -> 0.801 Inexact Rounded -pwsx4154 power 0.0641 0.5 -> 0.253 Inexact Rounded -pwsx4155 power 0.642 0.5 -> 0.801 Inexact Rounded -pwsx4156 power 0.0642 0.5 -> 0.253 Inexact Rounded -pwsx4157 power 0.643 0.5 -> 0.802 Inexact Rounded -pwsx4158 power 0.0643 0.5 -> 0.254 Inexact Rounded -pwsx4159 power 0.644 0.5 -> 0.802 Inexact Rounded -pwsx4160 power 0.0644 0.5 -> 0.254 Inexact Rounded -pwsx4161 power 0.645 0.5 -> 0.803 Inexact Rounded -pwsx4162 power 0.0645 0.5 -> 0.254 Inexact Rounded -pwsx4163 power 0.646 0.5 -> 0.804 Inexact Rounded -pwsx4164 power 0.0646 0.5 -> 0.254 Inexact Rounded -pwsx4165 power 0.647 0.5 -> 0.804 Inexact Rounded -pwsx4166 power 0.0647 0.5 -> 0.254 Inexact Rounded -pwsx4167 power 0.648 0.5 -> 0.805 Inexact Rounded -pwsx4168 power 0.0648 0.5 -> 0.255 Inexact Rounded -pwsx4169 power 0.649 0.5 -> 0.806 Inexact Rounded -pwsx4170 power 0.0649 0.5 -> 0.255 Inexact Rounded -pwsx4171 power 0.651 0.5 -> 0.807 Inexact Rounded -pwsx4172 power 0.0651 0.5 -> 0.255 Inexact Rounded -pwsx4173 power 0.652 0.5 -> 0.807 Inexact Rounded -pwsx4174 power 0.0652 0.5 -> 0.255 Inexact Rounded -pwsx4175 power 0.653 0.5 -> 0.808 Inexact Rounded -pwsx4176 power 0.0653 0.5 -> 0.256 Inexact Rounded -pwsx4177 power 0.654 0.5 -> 0.809 Inexact Rounded -pwsx4178 power 0.0654 0.5 -> 0.256 Inexact Rounded -pwsx4179 power 0.655 0.5 -> 0.809 Inexact Rounded -pwsx4180 power 0.0655 0.5 -> 0.256 Inexact Rounded -pwsx4181 power 0.656 0.5 -> 0.810 Inexact Rounded -pwsx4182 power 0.0656 0.5 -> 0.256 Inexact Rounded -pwsx4183 power 0.657 0.5 -> 0.811 Inexact Rounded -pwsx4184 power 0.0657 0.5 -> 0.256 Inexact Rounded -pwsx4185 power 0.658 0.5 -> 0.811 Inexact Rounded -pwsx4186 power 0.0658 0.5 -> 0.257 Inexact Rounded -pwsx4187 power 0.659 0.5 -> 0.812 Inexact Rounded -pwsx4188 power 0.0659 0.5 -> 0.257 Inexact Rounded -pwsx4189 power 0.661 0.5 -> 0.813 Inexact Rounded -pwsx4190 power 0.0661 0.5 -> 0.257 Inexact Rounded -pwsx4191 power 0.662 0.5 -> 0.814 Inexact Rounded -pwsx4192 power 0.0662 0.5 -> 0.257 Inexact Rounded -pwsx4193 power 0.663 0.5 -> 0.814 Inexact Rounded -pwsx4194 power 0.0663 0.5 -> 0.257 Inexact Rounded -pwsx4195 power 0.664 0.5 -> 0.815 Inexact Rounded -pwsx4196 power 0.0664 0.5 -> 0.258 Inexact Rounded -pwsx4197 power 0.665 0.5 -> 0.815 Inexact Rounded -pwsx4198 power 0.0665 0.5 -> 0.258 Inexact Rounded -pwsx4199 power 0.666 0.5 -> 0.816 Inexact Rounded -pwsx4200 power 0.0666 0.5 -> 0.258 Inexact Rounded -pwsx4201 power 0.667 0.5 -> 0.817 Inexact Rounded -pwsx4202 power 0.0667 0.5 -> 0.258 Inexact Rounded -pwsx4203 power 0.668 0.5 -> 0.817 Inexact Rounded -pwsx4204 power 0.0668 0.5 -> 0.258 Inexact Rounded -pwsx4205 power 0.669 0.5 -> 0.818 Inexact Rounded -pwsx4206 power 0.0669 0.5 -> 0.259 Inexact Rounded -pwsx4207 power 0.671 0.5 -> 0.819 Inexact Rounded -pwsx4208 power 0.0671 0.5 -> 0.259 Inexact Rounded -pwsx4209 power 0.672 0.5 -> 0.820 Inexact Rounded -pwsx4210 power 0.0672 0.5 -> 0.259 Inexact Rounded -pwsx4211 power 0.673 0.5 -> 0.820 Inexact Rounded -pwsx4212 power 0.0673 0.5 -> 0.259 Inexact Rounded -pwsx4213 power 0.674 0.5 -> 0.821 Inexact Rounded -pwsx4214 power 0.0674 0.5 -> 0.260 Inexact Rounded -pwsx4215 power 0.675 0.5 -> 0.822 Inexact Rounded -pwsx4216 power 0.0675 0.5 -> 0.260 Inexact Rounded -pwsx4217 power 0.676 0.5 -> 0.822 Inexact Rounded -pwsx4218 power 0.0676 0.5 -> 0.260 Inexact Rounded -pwsx4219 power 0.677 0.5 -> 0.823 Inexact Rounded -pwsx4220 power 0.0677 0.5 -> 0.260 Inexact Rounded -pwsx4221 power 0.678 0.5 -> 0.823 Inexact Rounded -pwsx4222 power 0.0678 0.5 -> 0.260 Inexact Rounded -pwsx4223 power 0.679 0.5 -> 0.824 Inexact Rounded -pwsx4224 power 0.0679 0.5 -> 0.261 Inexact Rounded -pwsx4225 power 0.681 0.5 -> 0.825 Inexact Rounded -pwsx4226 power 0.0681 0.5 -> 0.261 Inexact Rounded -pwsx4227 power 0.682 0.5 -> 0.826 Inexact Rounded -pwsx4228 power 0.0682 0.5 -> 0.261 Inexact Rounded -pwsx4229 power 0.683 0.5 -> 0.826 Inexact Rounded -pwsx4230 power 0.0683 0.5 -> 0.261 Inexact Rounded -pwsx4231 power 0.684 0.5 -> 0.827 Inexact Rounded -pwsx4232 power 0.0684 0.5 -> 0.262 Inexact Rounded -pwsx4233 power 0.685 0.5 -> 0.828 Inexact Rounded -pwsx4234 power 0.0685 0.5 -> 0.262 Inexact Rounded -pwsx4235 power 0.686 0.5 -> 0.828 Inexact Rounded -pwsx4236 power 0.0686 0.5 -> 0.262 Inexact Rounded -pwsx4237 power 0.687 0.5 -> 0.829 Inexact Rounded -pwsx4238 power 0.0687 0.5 -> 0.262 Inexact Rounded -pwsx4239 power 0.688 0.5 -> 0.829 Inexact Rounded -pwsx4240 power 0.0688 0.5 -> 0.262 Inexact Rounded -pwsx4241 power 0.689 0.5 -> 0.830 Inexact Rounded -pwsx4242 power 0.0689 0.5 -> 0.262 Inexact Rounded -pwsx4243 power 0.691 0.5 -> 0.831 Inexact Rounded -pwsx4244 power 0.0691 0.5 -> 0.263 Inexact Rounded -pwsx4245 power 0.692 0.5 -> 0.832 Inexact Rounded -pwsx4246 power 0.0692 0.5 -> 0.263 Inexact Rounded -pwsx4247 power 0.693 0.5 -> 0.832 Inexact Rounded -pwsx4248 power 0.0693 0.5 -> 0.263 Inexact Rounded -pwsx4249 power 0.694 0.5 -> 0.833 Inexact Rounded -pwsx4250 power 0.0694 0.5 -> 0.263 Inexact Rounded -pwsx4251 power 0.695 0.5 -> 0.834 Inexact Rounded -pwsx4252 power 0.0695 0.5 -> 0.264 Inexact Rounded -pwsx4253 power 0.696 0.5 -> 0.834 Inexact Rounded -pwsx4254 power 0.0696 0.5 -> 0.264 Inexact Rounded -pwsx4255 power 0.697 0.5 -> 0.835 Inexact Rounded -pwsx4256 power 0.0697 0.5 -> 0.264 Inexact Rounded -pwsx4257 power 0.698 0.5 -> 0.835 Inexact Rounded -pwsx4258 power 0.0698 0.5 -> 0.264 Inexact Rounded -pwsx4259 power 0.699 0.5 -> 0.836 Inexact Rounded -pwsx4260 power 0.0699 0.5 -> 0.264 Inexact Rounded -pwsx4261 power 0.701 0.5 -> 0.837 Inexact Rounded -pwsx4262 power 0.0701 0.5 -> 0.265 Inexact Rounded -pwsx4263 power 0.702 0.5 -> 0.838 Inexact Rounded -pwsx4264 power 0.0702 0.5 -> 0.265 Inexact Rounded -pwsx4265 power 0.703 0.5 -> 0.838 Inexact Rounded -pwsx4266 power 0.0703 0.5 -> 0.265 Inexact Rounded -pwsx4267 power 0.704 0.5 -> 0.839 Inexact Rounded -pwsx4268 power 0.0704 0.5 -> 0.265 Inexact Rounded -pwsx4269 power 0.705 0.5 -> 0.840 Inexact Rounded -pwsx4270 power 0.0705 0.5 -> 0.266 Inexact Rounded -pwsx4271 power 0.706 0.5 -> 0.840 Inexact Rounded -pwsx4272 power 0.0706 0.5 -> 0.266 Inexact Rounded -pwsx4273 power 0.707 0.5 -> 0.841 Inexact Rounded -pwsx4274 power 0.0707 0.5 -> 0.266 Inexact Rounded -pwsx4275 power 0.708 0.5 -> 0.841 Inexact Rounded -pwsx4276 power 0.0708 0.5 -> 0.266 Inexact Rounded -pwsx4277 power 0.709 0.5 -> 0.842 Inexact Rounded -pwsx4278 power 0.0709 0.5 -> 0.266 Inexact Rounded -pwsx4279 power 0.711 0.5 -> 0.843 Inexact Rounded -pwsx4280 power 0.0711 0.5 -> 0.267 Inexact Rounded -pwsx4281 power 0.712 0.5 -> 0.844 Inexact Rounded -pwsx4282 power 0.0712 0.5 -> 0.267 Inexact Rounded -pwsx4283 power 0.713 0.5 -> 0.844 Inexact Rounded -pwsx4284 power 0.0713 0.5 -> 0.267 Inexact Rounded -pwsx4285 power 0.714 0.5 -> 0.845 Inexact Rounded -pwsx4286 power 0.0714 0.5 -> 0.267 Inexact Rounded -pwsx4287 power 0.715 0.5 -> 0.846 Inexact Rounded -pwsx4288 power 0.0715 0.5 -> 0.267 Inexact Rounded -pwsx4289 power 0.716 0.5 -> 0.846 Inexact Rounded -pwsx4290 power 0.0716 0.5 -> 0.268 Inexact Rounded -pwsx4291 power 0.717 0.5 -> 0.847 Inexact Rounded -pwsx4292 power 0.0717 0.5 -> 0.268 Inexact Rounded -pwsx4293 power 0.718 0.5 -> 0.847 Inexact Rounded -pwsx4294 power 0.0718 0.5 -> 0.268 Inexact Rounded -pwsx4295 power 0.719 0.5 -> 0.848 Inexact Rounded -pwsx4296 power 0.0719 0.5 -> 0.268 Inexact Rounded -pwsx4297 power 0.721 0.5 -> 0.849 Inexact Rounded -pwsx4298 power 0.0721 0.5 -> 0.269 Inexact Rounded -pwsx4299 power 0.722 0.5 -> 0.850 Inexact Rounded -pwsx4300 power 0.0722 0.5 -> 0.269 Inexact Rounded -pwsx4301 power 0.723 0.5 -> 0.850 Inexact Rounded -pwsx4302 power 0.0723 0.5 -> 0.269 Inexact Rounded -pwsx4303 power 0.724 0.5 -> 0.851 Inexact Rounded -pwsx4304 power 0.0724 0.5 -> 0.269 Inexact Rounded -pwsx4305 power 0.725 0.5 -> 0.851 Inexact Rounded -pwsx4306 power 0.0725 0.5 -> 0.269 Inexact Rounded -pwsx4307 power 0.726 0.5 -> 0.852 Inexact Rounded -pwsx4308 power 0.0726 0.5 -> 0.269 Inexact Rounded -pwsx4309 power 0.727 0.5 -> 0.853 Inexact Rounded -pwsx4310 power 0.0727 0.5 -> 0.270 Inexact Rounded -pwsx4311 power 0.728 0.5 -> 0.853 Inexact Rounded -pwsx4312 power 0.0728 0.5 -> 0.270 Inexact Rounded -pwsx4313 power 0.729 0.5 -> 0.854 Inexact Rounded -pwsx4314 power 0.0729 0.5 -> 0.270 Inexact Rounded -pwsx4315 power 0.731 0.5 -> 0.855 Inexact Rounded -pwsx4316 power 0.0731 0.5 -> 0.270 Inexact Rounded -pwsx4317 power 0.732 0.5 -> 0.856 Inexact Rounded -pwsx4318 power 0.0732 0.5 -> 0.271 Inexact Rounded -pwsx4319 power 0.733 0.5 -> 0.856 Inexact Rounded -pwsx4320 power 0.0733 0.5 -> 0.271 Inexact Rounded -pwsx4321 power 0.734 0.5 -> 0.857 Inexact Rounded -pwsx4322 power 0.0734 0.5 -> 0.271 Inexact Rounded -pwsx4323 power 0.735 0.5 -> 0.857 Inexact Rounded -pwsx4324 power 0.0735 0.5 -> 0.271 Inexact Rounded -pwsx4325 power 0.736 0.5 -> 0.858 Inexact Rounded -pwsx4326 power 0.0736 0.5 -> 0.271 Inexact Rounded -pwsx4327 power 0.737 0.5 -> 0.858 Inexact Rounded -pwsx4328 power 0.0737 0.5 -> 0.271 Inexact Rounded -pwsx4329 power 0.738 0.5 -> 0.859 Inexact Rounded -pwsx4330 power 0.0738 0.5 -> 0.272 Inexact Rounded -pwsx4331 power 0.739 0.5 -> 0.860 Inexact Rounded -pwsx4332 power 0.0739 0.5 -> 0.272 Inexact Rounded -pwsx4333 power 0.741 0.5 -> 0.861 Inexact Rounded -pwsx4334 power 0.0741 0.5 -> 0.272 Inexact Rounded -pwsx4335 power 0.742 0.5 -> 0.861 Inexact Rounded -pwsx4336 power 0.0742 0.5 -> 0.272 Inexact Rounded -pwsx4337 power 0.743 0.5 -> 0.862 Inexact Rounded -pwsx4338 power 0.0743 0.5 -> 0.273 Inexact Rounded -pwsx4339 power 0.744 0.5 -> 0.863 Inexact Rounded -pwsx4340 power 0.0744 0.5 -> 0.273 Inexact Rounded -pwsx4341 power 0.745 0.5 -> 0.863 Inexact Rounded -pwsx4342 power 0.0745 0.5 -> 0.273 Inexact Rounded -pwsx4343 power 0.746 0.5 -> 0.864 Inexact Rounded -pwsx4344 power 0.0746 0.5 -> 0.273 Inexact Rounded -pwsx4345 power 0.747 0.5 -> 0.864 Inexact Rounded -pwsx4346 power 0.0747 0.5 -> 0.273 Inexact Rounded -pwsx4347 power 0.748 0.5 -> 0.865 Inexact Rounded -pwsx4348 power 0.0748 0.5 -> 0.273 Inexact Rounded -pwsx4349 power 0.749 0.5 -> 0.865 Inexact Rounded -pwsx4350 power 0.0749 0.5 -> 0.274 Inexact Rounded -pwsx4351 power 0.751 0.5 -> 0.867 Inexact Rounded -pwsx4352 power 0.0751 0.5 -> 0.274 Inexact Rounded -pwsx4353 power 0.752 0.5 -> 0.867 Inexact Rounded -pwsx4354 power 0.0752 0.5 -> 0.274 Inexact Rounded -pwsx4355 power 0.753 0.5 -> 0.868 Inexact Rounded -pwsx4356 power 0.0753 0.5 -> 0.274 Inexact Rounded -pwsx4357 power 0.754 0.5 -> 0.868 Inexact Rounded -pwsx4358 power 0.0754 0.5 -> 0.275 Inexact Rounded -pwsx4359 power 0.755 0.5 -> 0.869 Inexact Rounded -pwsx4360 power 0.0755 0.5 -> 0.275 Inexact Rounded -pwsx4361 power 0.756 0.5 -> 0.869 Inexact Rounded -pwsx4362 power 0.0756 0.5 -> 0.275 Inexact Rounded -pwsx4363 power 0.757 0.5 -> 0.870 Inexact Rounded -pwsx4364 power 0.0757 0.5 -> 0.275 Inexact Rounded -pwsx4365 power 0.758 0.5 -> 0.871 Inexact Rounded -pwsx4366 power 0.0758 0.5 -> 0.275 Inexact Rounded -pwsx4367 power 0.759 0.5 -> 0.871 Inexact Rounded -pwsx4368 power 0.0759 0.5 -> 0.275 Inexact Rounded -pwsx4369 power 0.761 0.5 -> 0.872 Inexact Rounded -pwsx4370 power 0.0761 0.5 -> 0.276 Inexact Rounded -pwsx4371 power 0.762 0.5 -> 0.873 Inexact Rounded -pwsx4372 power 0.0762 0.5 -> 0.276 Inexact Rounded -pwsx4373 power 0.763 0.5 -> 0.873 Inexact Rounded -pwsx4374 power 0.0763 0.5 -> 0.276 Inexact Rounded -pwsx4375 power 0.764 0.5 -> 0.874 Inexact Rounded -pwsx4376 power 0.0764 0.5 -> 0.276 Inexact Rounded -pwsx4377 power 0.765 0.5 -> 0.875 Inexact Rounded -pwsx4378 power 0.0765 0.5 -> 0.277 Inexact Rounded -pwsx4379 power 0.766 0.5 -> 0.875 Inexact Rounded -pwsx4380 power 0.0766 0.5 -> 0.277 Inexact Rounded -pwsx4381 power 0.767 0.5 -> 0.876 Inexact Rounded -pwsx4382 power 0.0767 0.5 -> 0.277 Inexact Rounded -pwsx4383 power 0.768 0.5 -> 0.876 Inexact Rounded -pwsx4384 power 0.0768 0.5 -> 0.277 Inexact Rounded -pwsx4385 power 0.769 0.5 -> 0.877 Inexact Rounded -pwsx4386 power 0.0769 0.5 -> 0.277 Inexact Rounded -pwsx4387 power 0.771 0.5 -> 0.878 Inexact Rounded -pwsx4388 power 0.0771 0.5 -> 0.278 Inexact Rounded -pwsx4389 power 0.772 0.5 -> 0.879 Inexact Rounded -pwsx4390 power 0.0772 0.5 -> 0.278 Inexact Rounded -pwsx4391 power 0.773 0.5 -> 0.879 Inexact Rounded -pwsx4392 power 0.0773 0.5 -> 0.278 Inexact Rounded -pwsx4393 power 0.774 0.5 -> 0.880 Inexact Rounded -pwsx4394 power 0.0774 0.5 -> 0.278 Inexact Rounded -pwsx4395 power 0.775 0.5 -> 0.880 Inexact Rounded -pwsx4396 power 0.0775 0.5 -> 0.278 Inexact Rounded -pwsx4397 power 0.776 0.5 -> 0.881 Inexact Rounded -pwsx4398 power 0.0776 0.5 -> 0.279 Inexact Rounded -pwsx4399 power 0.777 0.5 -> 0.881 Inexact Rounded -pwsx4400 power 0.0777 0.5 -> 0.279 Inexact Rounded -pwsx4401 power 0.778 0.5 -> 0.882 Inexact Rounded -pwsx4402 power 0.0778 0.5 -> 0.279 Inexact Rounded -pwsx4403 power 0.779 0.5 -> 0.883 Inexact Rounded -pwsx4404 power 0.0779 0.5 -> 0.279 Inexact Rounded -pwsx4405 power 0.781 0.5 -> 0.884 Inexact Rounded -pwsx4406 power 0.0781 0.5 -> 0.279 Inexact Rounded -pwsx4407 power 0.782 0.5 -> 0.884 Inexact Rounded -pwsx4408 power 0.0782 0.5 -> 0.280 Inexact Rounded -pwsx4409 power 0.783 0.5 -> 0.885 Inexact Rounded -pwsx4410 power 0.0783 0.5 -> 0.280 Inexact Rounded -pwsx4411 power 0.784 0.5 -> 0.885 Inexact Rounded -pwsx4412 power 0.0784 0.5 -> 0.280 Inexact Rounded -pwsx4413 power 0.785 0.5 -> 0.886 Inexact Rounded -pwsx4414 power 0.0785 0.5 -> 0.280 Inexact Rounded -pwsx4415 power 0.786 0.5 -> 0.887 Inexact Rounded -pwsx4416 power 0.0786 0.5 -> 0.280 Inexact Rounded -pwsx4417 power 0.787 0.5 -> 0.887 Inexact Rounded -pwsx4418 power 0.0787 0.5 -> 0.281 Inexact Rounded -pwsx4419 power 0.788 0.5 -> 0.888 Inexact Rounded -pwsx4420 power 0.0788 0.5 -> 0.281 Inexact Rounded -pwsx4421 power 0.789 0.5 -> 0.888 Inexact Rounded -pwsx4422 power 0.0789 0.5 -> 0.281 Inexact Rounded -pwsx4423 power 0.791 0.5 -> 0.889 Inexact Rounded -pwsx4424 power 0.0791 0.5 -> 0.281 Inexact Rounded -pwsx4425 power 0.792 0.5 -> 0.890 Inexact Rounded -pwsx4426 power 0.0792 0.5 -> 0.281 Inexact Rounded -pwsx4427 power 0.793 0.5 -> 0.891 Inexact Rounded -pwsx4428 power 0.0793 0.5 -> 0.282 Inexact Rounded -pwsx4429 power 0.794 0.5 -> 0.891 Inexact Rounded -pwsx4430 power 0.0794 0.5 -> 0.282 Inexact Rounded -pwsx4431 power 0.795 0.5 -> 0.892 Inexact Rounded -pwsx4432 power 0.0795 0.5 -> 0.282 Inexact Rounded -pwsx4433 power 0.796 0.5 -> 0.892 Inexact Rounded -pwsx4434 power 0.0796 0.5 -> 0.282 Inexact Rounded -pwsx4435 power 0.797 0.5 -> 0.893 Inexact Rounded -pwsx4436 power 0.0797 0.5 -> 0.282 Inexact Rounded -pwsx4437 power 0.798 0.5 -> 0.893 Inexact Rounded -pwsx4438 power 0.0798 0.5 -> 0.282 Inexact Rounded -pwsx4439 power 0.799 0.5 -> 0.894 Inexact Rounded -pwsx4440 power 0.0799 0.5 -> 0.283 Inexact Rounded -pwsx4441 power 0.801 0.5 -> 0.895 Inexact Rounded -pwsx4442 power 0.0801 0.5 -> 0.283 Inexact Rounded -pwsx4443 power 0.802 0.5 -> 0.896 Inexact Rounded -pwsx4444 power 0.0802 0.5 -> 0.283 Inexact Rounded -pwsx4445 power 0.803 0.5 -> 0.896 Inexact Rounded -pwsx4446 power 0.0803 0.5 -> 0.283 Inexact Rounded -pwsx4447 power 0.804 0.5 -> 0.897 Inexact Rounded -pwsx4448 power 0.0804 0.5 -> 0.284 Inexact Rounded -pwsx4449 power 0.805 0.5 -> 0.897 Inexact Rounded -pwsx4450 power 0.0805 0.5 -> 0.284 Inexact Rounded -pwsx4451 power 0.806 0.5 -> 0.898 Inexact Rounded -pwsx4452 power 0.0806 0.5 -> 0.284 Inexact Rounded -pwsx4453 power 0.807 0.5 -> 0.898 Inexact Rounded -pwsx4454 power 0.0807 0.5 -> 0.284 Inexact Rounded -pwsx4455 power 0.808 0.5 -> 0.899 Inexact Rounded -pwsx4456 power 0.0808 0.5 -> 0.284 Inexact Rounded -pwsx4457 power 0.809 0.5 -> 0.899 Inexact Rounded -pwsx4458 power 0.0809 0.5 -> 0.284 Inexact Rounded -pwsx4459 power 0.811 0.5 -> 0.901 Inexact Rounded -pwsx4460 power 0.0811 0.5 -> 0.285 Inexact Rounded -pwsx4461 power 0.812 0.5 -> 0.901 Inexact Rounded -pwsx4462 power 0.0812 0.5 -> 0.285 Inexact Rounded -pwsx4463 power 0.813 0.5 -> 0.902 Inexact Rounded -pwsx4464 power 0.0813 0.5 -> 0.285 Inexact Rounded -pwsx4465 power 0.814 0.5 -> 0.902 Inexact Rounded -pwsx4466 power 0.0814 0.5 -> 0.285 Inexact Rounded -pwsx4467 power 0.815 0.5 -> 0.903 Inexact Rounded -pwsx4468 power 0.0815 0.5 -> 0.285 Inexact Rounded -pwsx4469 power 0.816 0.5 -> 0.903 Inexact Rounded -pwsx4470 power 0.0816 0.5 -> 0.286 Inexact Rounded -pwsx4471 power 0.817 0.5 -> 0.904 Inexact Rounded -pwsx4472 power 0.0817 0.5 -> 0.286 Inexact Rounded -pwsx4473 power 0.818 0.5 -> 0.904 Inexact Rounded -pwsx4474 power 0.0818 0.5 -> 0.286 Inexact Rounded -pwsx4475 power 0.819 0.5 -> 0.905 Inexact Rounded -pwsx4476 power 0.0819 0.5 -> 0.286 Inexact Rounded -pwsx4477 power 0.821 0.5 -> 0.906 Inexact Rounded -pwsx4478 power 0.0821 0.5 -> 0.287 Inexact Rounded -pwsx4479 power 0.822 0.5 -> 0.907 Inexact Rounded -pwsx4480 power 0.0822 0.5 -> 0.287 Inexact Rounded -pwsx4481 power 0.823 0.5 -> 0.907 Inexact Rounded -pwsx4482 power 0.0823 0.5 -> 0.287 Inexact Rounded -pwsx4483 power 0.824 0.5 -> 0.908 Inexact Rounded -pwsx4484 power 0.0824 0.5 -> 0.287 Inexact Rounded -pwsx4485 power 0.825 0.5 -> 0.908 Inexact Rounded -pwsx4486 power 0.0825 0.5 -> 0.287 Inexact Rounded -pwsx4487 power 0.826 0.5 -> 0.909 Inexact Rounded -pwsx4488 power 0.0826 0.5 -> 0.287 Inexact Rounded -pwsx4489 power 0.827 0.5 -> 0.909 Inexact Rounded -pwsx4490 power 0.0827 0.5 -> 0.288 Inexact Rounded -pwsx4491 power 0.828 0.5 -> 0.910 Inexact Rounded -pwsx4492 power 0.0828 0.5 -> 0.288 Inexact Rounded -pwsx4493 power 0.829 0.5 -> 0.910 Inexact Rounded -pwsx4494 power 0.0829 0.5 -> 0.288 Inexact Rounded -pwsx4495 power 0.831 0.5 -> 0.912 Inexact Rounded -pwsx4496 power 0.0831 0.5 -> 0.288 Inexact Rounded -pwsx4497 power 0.832 0.5 -> 0.912 Inexact Rounded -pwsx4498 power 0.0832 0.5 -> 0.288 Inexact Rounded -pwsx4499 power 0.833 0.5 -> 0.913 Inexact Rounded -pwsx4500 power 0.0833 0.5 -> 0.289 Inexact Rounded -pwsx4501 power 0.834 0.5 -> 0.913 Inexact Rounded -pwsx4502 power 0.0834 0.5 -> 0.289 Inexact Rounded -pwsx4503 power 0.835 0.5 -> 0.914 Inexact Rounded -pwsx4504 power 0.0835 0.5 -> 0.289 Inexact Rounded -pwsx4505 power 0.836 0.5 -> 0.914 Inexact Rounded -pwsx4506 power 0.0836 0.5 -> 0.289 Inexact Rounded -pwsx4507 power 0.837 0.5 -> 0.915 Inexact Rounded -pwsx4508 power 0.0837 0.5 -> 0.289 Inexact Rounded -pwsx4509 power 0.838 0.5 -> 0.915 Inexact Rounded -pwsx4510 power 0.0838 0.5 -> 0.289 Inexact Rounded -pwsx4511 power 0.839 0.5 -> 0.916 Inexact Rounded -pwsx4512 power 0.0839 0.5 -> 0.290 Inexact Rounded -pwsx4513 power 0.841 0.5 -> 0.917 Inexact Rounded -pwsx4514 power 0.0841 0.5 -> 0.290 Inexact Rounded -pwsx4515 power 0.842 0.5 -> 0.918 Inexact Rounded -pwsx4516 power 0.0842 0.5 -> 0.290 Inexact Rounded -pwsx4517 power 0.843 0.5 -> 0.918 Inexact Rounded -pwsx4518 power 0.0843 0.5 -> 0.290 Inexact Rounded -pwsx4519 power 0.844 0.5 -> 0.919 Inexact Rounded -pwsx4520 power 0.0844 0.5 -> 0.291 Inexact Rounded -pwsx4521 power 0.845 0.5 -> 0.919 Inexact Rounded -pwsx4522 power 0.0845 0.5 -> 0.291 Inexact Rounded -pwsx4523 power 0.846 0.5 -> 0.920 Inexact Rounded -pwsx4524 power 0.0846 0.5 -> 0.291 Inexact Rounded -pwsx4525 power 0.847 0.5 -> 0.920 Inexact Rounded -pwsx4526 power 0.0847 0.5 -> 0.291 Inexact Rounded -pwsx4527 power 0.848 0.5 -> 0.921 Inexact Rounded -pwsx4528 power 0.0848 0.5 -> 0.291 Inexact Rounded -pwsx4529 power 0.849 0.5 -> 0.921 Inexact Rounded -pwsx4530 power 0.0849 0.5 -> 0.291 Inexact Rounded -pwsx4531 power 0.851 0.5 -> 0.922 Inexact Rounded -pwsx4532 power 0.0851 0.5 -> 0.292 Inexact Rounded -pwsx4533 power 0.852 0.5 -> 0.923 Inexact Rounded -pwsx4534 power 0.0852 0.5 -> 0.292 Inexact Rounded -pwsx4535 power 0.853 0.5 -> 0.924 Inexact Rounded -pwsx4536 power 0.0853 0.5 -> 0.292 Inexact Rounded -pwsx4537 power 0.854 0.5 -> 0.924 Inexact Rounded -pwsx4538 power 0.0854 0.5 -> 0.292 Inexact Rounded -pwsx4539 power 0.855 0.5 -> 0.925 Inexact Rounded -pwsx4540 power 0.0855 0.5 -> 0.292 Inexact Rounded -pwsx4541 power 0.856 0.5 -> 0.925 Inexact Rounded -pwsx4542 power 0.0856 0.5 -> 0.293 Inexact Rounded -pwsx4543 power 0.857 0.5 -> 0.926 Inexact Rounded -pwsx4544 power 0.0857 0.5 -> 0.293 Inexact Rounded -pwsx4545 power 0.858 0.5 -> 0.926 Inexact Rounded -pwsx4546 power 0.0858 0.5 -> 0.293 Inexact Rounded -pwsx4547 power 0.859 0.5 -> 0.927 Inexact Rounded -pwsx4548 power 0.0859 0.5 -> 0.293 Inexact Rounded -pwsx4549 power 0.861 0.5 -> 0.928 Inexact Rounded -pwsx4550 power 0.0861 0.5 -> 0.293 Inexact Rounded -pwsx4551 power 0.862 0.5 -> 0.928 Inexact Rounded -pwsx4552 power 0.0862 0.5 -> 0.294 Inexact Rounded -pwsx4553 power 0.863 0.5 -> 0.929 Inexact Rounded -pwsx4554 power 0.0863 0.5 -> 0.294 Inexact Rounded -pwsx4555 power 0.864 0.5 -> 0.930 Inexact Rounded -pwsx4556 power 0.0864 0.5 -> 0.294 Inexact Rounded -pwsx4557 power 0.865 0.5 -> 0.930 Inexact Rounded -pwsx4558 power 0.0865 0.5 -> 0.294 Inexact Rounded -pwsx4559 power 0.866 0.5 -> 0.931 Inexact Rounded -pwsx4560 power 0.0866 0.5 -> 0.294 Inexact Rounded -pwsx4561 power 0.867 0.5 -> 0.931 Inexact Rounded -pwsx4562 power 0.0867 0.5 -> 0.294 Inexact Rounded -pwsx4563 power 0.868 0.5 -> 0.932 Inexact Rounded -pwsx4564 power 0.0868 0.5 -> 0.295 Inexact Rounded -pwsx4565 power 0.869 0.5 -> 0.932 Inexact Rounded -pwsx4566 power 0.0869 0.5 -> 0.295 Inexact Rounded -pwsx4567 power 0.871 0.5 -> 0.933 Inexact Rounded -pwsx4568 power 0.0871 0.5 -> 0.295 Inexact Rounded -pwsx4569 power 0.872 0.5 -> 0.934 Inexact Rounded -pwsx4570 power 0.0872 0.5 -> 0.295 Inexact Rounded -pwsx4571 power 0.873 0.5 -> 0.934 Inexact Rounded -pwsx4572 power 0.0873 0.5 -> 0.295 Inexact Rounded -pwsx4573 power 0.874 0.5 -> 0.935 Inexact Rounded -pwsx4574 power 0.0874 0.5 -> 0.296 Inexact Rounded -pwsx4575 power 0.875 0.5 -> 0.935 Inexact Rounded -pwsx4576 power 0.0875 0.5 -> 0.296 Inexact Rounded -pwsx4577 power 0.876 0.5 -> 0.936 Inexact Rounded -pwsx4578 power 0.0876 0.5 -> 0.296 Inexact Rounded -pwsx4579 power 0.877 0.5 -> 0.936 Inexact Rounded -pwsx4580 power 0.0877 0.5 -> 0.296 Inexact Rounded -pwsx4581 power 0.878 0.5 -> 0.937 Inexact Rounded -pwsx4582 power 0.0878 0.5 -> 0.296 Inexact Rounded -pwsx4583 power 0.879 0.5 -> 0.938 Inexact Rounded -pwsx4584 power 0.0879 0.5 -> 0.296 Inexact Rounded -pwsx4585 power 0.881 0.5 -> 0.939 Inexact Rounded -pwsx4586 power 0.0881 0.5 -> 0.297 Inexact Rounded -pwsx4587 power 0.882 0.5 -> 0.939 Inexact Rounded -pwsx4588 power 0.0882 0.5 -> 0.297 Inexact Rounded -pwsx4589 power 0.883 0.5 -> 0.940 Inexact Rounded -pwsx4590 power 0.0883 0.5 -> 0.297 Inexact Rounded -pwsx4591 power 0.884 0.5 -> 0.940 Inexact Rounded -pwsx4592 power 0.0884 0.5 -> 0.297 Inexact Rounded -pwsx4593 power 0.885 0.5 -> 0.941 Inexact Rounded -pwsx4594 power 0.0885 0.5 -> 0.297 Inexact Rounded -pwsx4595 power 0.886 0.5 -> 0.941 Inexact Rounded -pwsx4596 power 0.0886 0.5 -> 0.298 Inexact Rounded -pwsx4597 power 0.887 0.5 -> 0.942 Inexact Rounded -pwsx4598 power 0.0887 0.5 -> 0.298 Inexact Rounded -pwsx4599 power 0.888 0.5 -> 0.942 Inexact Rounded -pwsx4600 power 0.0888 0.5 -> 0.298 Inexact Rounded -pwsx4601 power 0.889 0.5 -> 0.943 Inexact Rounded -pwsx4602 power 0.0889 0.5 -> 0.298 Inexact Rounded -pwsx4603 power 0.891 0.5 -> 0.944 Inexact Rounded -pwsx4604 power 0.0891 0.5 -> 0.298 Inexact Rounded -pwsx4605 power 0.892 0.5 -> 0.944 Inexact Rounded -pwsx4606 power 0.0892 0.5 -> 0.299 Inexact Rounded -pwsx4607 power 0.893 0.5 -> 0.945 Inexact Rounded -pwsx4608 power 0.0893 0.5 -> 0.299 Inexact Rounded -pwsx4609 power 0.894 0.5 -> 0.946 Inexact Rounded -pwsx4610 power 0.0894 0.5 -> 0.299 Inexact Rounded -pwsx4611 power 0.895 0.5 -> 0.946 Inexact Rounded -pwsx4612 power 0.0895 0.5 -> 0.299 Inexact Rounded -pwsx4613 power 0.896 0.5 -> 0.947 Inexact Rounded -pwsx4614 power 0.0896 0.5 -> 0.299 Inexact Rounded -pwsx4615 power 0.897 0.5 -> 0.947 Inexact Rounded -pwsx4616 power 0.0897 0.5 -> 0.299 Inexact Rounded -pwsx4617 power 0.898 0.5 -> 0.948 Inexact Rounded -pwsx4618 power 0.0898 0.5 -> 0.300 Inexact Rounded -pwsx4619 power 0.899 0.5 -> 0.948 Inexact Rounded -pwsx4620 power 0.0899 0.5 -> 0.300 Inexact Rounded -pwsx4621 power 0.901 0.5 -> 0.949 Inexact Rounded -pwsx4622 power 0.0901 0.5 -> 0.300 Inexact Rounded -pwsx4623 power 0.902 0.5 -> 0.950 Inexact Rounded -pwsx4624 power 0.0902 0.5 -> 0.300 Inexact Rounded -pwsx4625 power 0.903 0.5 -> 0.950 Inexact Rounded -pwsx4626 power 0.0903 0.5 -> 0.300 Inexact Rounded -pwsx4627 power 0.904 0.5 -> 0.951 Inexact Rounded -pwsx4628 power 0.0904 0.5 -> 0.301 Inexact Rounded -pwsx4629 power 0.905 0.5 -> 0.951 Inexact Rounded -pwsx4630 power 0.0905 0.5 -> 0.301 Inexact Rounded -pwsx4631 power 0.906 0.5 -> 0.952 Inexact Rounded -pwsx4632 power 0.0906 0.5 -> 0.301 Inexact Rounded -pwsx4633 power 0.907 0.5 -> 0.952 Inexact Rounded -pwsx4634 power 0.0907 0.5 -> 0.301 Inexact Rounded -pwsx4635 power 0.908 0.5 -> 0.953 Inexact Rounded -pwsx4636 power 0.0908 0.5 -> 0.301 Inexact Rounded -pwsx4637 power 0.909 0.5 -> 0.953 Inexact Rounded -pwsx4638 power 0.0909 0.5 -> 0.301 Inexact Rounded -pwsx4639 power 0.911 0.5 -> 0.954 Inexact Rounded -pwsx4640 power 0.0911 0.5 -> 0.302 Inexact Rounded -pwsx4641 power 0.912 0.5 -> 0.955 Inexact Rounded -pwsx4642 power 0.0912 0.5 -> 0.302 Inexact Rounded -pwsx4643 power 0.913 0.5 -> 0.956 Inexact Rounded -pwsx4644 power 0.0913 0.5 -> 0.302 Inexact Rounded -pwsx4645 power 0.914 0.5 -> 0.956 Inexact Rounded -pwsx4646 power 0.0914 0.5 -> 0.302 Inexact Rounded -pwsx4647 power 0.915 0.5 -> 0.957 Inexact Rounded -pwsx4648 power 0.0915 0.5 -> 0.302 Inexact Rounded -pwsx4649 power 0.916 0.5 -> 0.957 Inexact Rounded -pwsx4650 power 0.0916 0.5 -> 0.303 Inexact Rounded -pwsx4651 power 0.917 0.5 -> 0.958 Inexact Rounded -pwsx4652 power 0.0917 0.5 -> 0.303 Inexact Rounded -pwsx4653 power 0.918 0.5 -> 0.958 Inexact Rounded -pwsx4654 power 0.0918 0.5 -> 0.303 Inexact Rounded -pwsx4655 power 0.919 0.5 -> 0.959 Inexact Rounded -pwsx4656 power 0.0919 0.5 -> 0.303 Inexact Rounded -pwsx4657 power 0.921 0.5 -> 0.960 Inexact Rounded -pwsx4658 power 0.0921 0.5 -> 0.303 Inexact Rounded -pwsx4659 power 0.922 0.5 -> 0.960 Inexact Rounded -pwsx4660 power 0.0922 0.5 -> 0.304 Inexact Rounded -pwsx4661 power 0.923 0.5 -> 0.961 Inexact Rounded -pwsx4662 power 0.0923 0.5 -> 0.304 Inexact Rounded -pwsx4663 power 0.924 0.5 -> 0.961 Inexact Rounded -pwsx4664 power 0.0924 0.5 -> 0.304 Inexact Rounded -pwsx4665 power 0.925 0.5 -> 0.962 Inexact Rounded -pwsx4666 power 0.0925 0.5 -> 0.304 Inexact Rounded -pwsx4667 power 0.926 0.5 -> 0.962 Inexact Rounded -pwsx4668 power 0.0926 0.5 -> 0.304 Inexact Rounded -pwsx4669 power 0.927 0.5 -> 0.963 Inexact Rounded -pwsx4670 power 0.0927 0.5 -> 0.304 Inexact Rounded -pwsx4671 power 0.928 0.5 -> 0.963 Inexact Rounded -pwsx4672 power 0.0928 0.5 -> 0.305 Inexact Rounded -pwsx4673 power 0.929 0.5 -> 0.964 Inexact Rounded -pwsx4674 power 0.0929 0.5 -> 0.305 Inexact Rounded -pwsx4675 power 0.931 0.5 -> 0.965 Inexact Rounded -pwsx4676 power 0.0931 0.5 -> 0.305 Inexact Rounded -pwsx4677 power 0.932 0.5 -> 0.965 Inexact Rounded -pwsx4678 power 0.0932 0.5 -> 0.305 Inexact Rounded -pwsx4679 power 0.933 0.5 -> 0.966 Inexact Rounded -pwsx4680 power 0.0933 0.5 -> 0.305 Inexact Rounded -pwsx4681 power 0.934 0.5 -> 0.966 Inexact Rounded -pwsx4682 power 0.0934 0.5 -> 0.306 Inexact Rounded -pwsx4683 power 0.935 0.5 -> 0.967 Inexact Rounded -pwsx4684 power 0.0935 0.5 -> 0.306 Inexact Rounded -pwsx4685 power 0.936 0.5 -> 0.967 Inexact Rounded -pwsx4686 power 0.0936 0.5 -> 0.306 Inexact Rounded -pwsx4687 power 0.937 0.5 -> 0.968 Inexact Rounded -pwsx4688 power 0.0937 0.5 -> 0.306 Inexact Rounded -pwsx4689 power 0.938 0.5 -> 0.969 Inexact Rounded -pwsx4690 power 0.0938 0.5 -> 0.306 Inexact Rounded -pwsx4691 power 0.939 0.5 -> 0.969 Inexact Rounded -pwsx4692 power 0.0939 0.5 -> 0.306 Inexact Rounded -pwsx4693 power 0.941 0.5 -> 0.970 Inexact Rounded -pwsx4694 power 0.0941 0.5 -> 0.307 Inexact Rounded -pwsx4695 power 0.942 0.5 -> 0.971 Inexact Rounded -pwsx4696 power 0.0942 0.5 -> 0.307 Inexact Rounded -pwsx4697 power 0.943 0.5 -> 0.971 Inexact Rounded -pwsx4698 power 0.0943 0.5 -> 0.307 Inexact Rounded -pwsx4699 power 0.944 0.5 -> 0.972 Inexact Rounded -pwsx4700 power 0.0944 0.5 -> 0.307 Inexact Rounded -pwsx4701 power 0.945 0.5 -> 0.972 Inexact Rounded -pwsx4702 power 0.0945 0.5 -> 0.307 Inexact Rounded -pwsx4703 power 0.946 0.5 -> 0.973 Inexact Rounded -pwsx4704 power 0.0946 0.5 -> 0.308 Inexact Rounded -pwsx4705 power 0.947 0.5 -> 0.973 Inexact Rounded -pwsx4706 power 0.0947 0.5 -> 0.308 Inexact Rounded -pwsx4707 power 0.948 0.5 -> 0.974 Inexact Rounded -pwsx4708 power 0.0948 0.5 -> 0.308 Inexact Rounded -pwsx4709 power 0.949 0.5 -> 0.974 Inexact Rounded -pwsx4710 power 0.0949 0.5 -> 0.308 Inexact Rounded -pwsx4711 power 0.951 0.5 -> 0.975 Inexact Rounded -pwsx4712 power 0.0951 0.5 -> 0.308 Inexact Rounded -pwsx4713 power 0.952 0.5 -> 0.976 Inexact Rounded -pwsx4714 power 0.0952 0.5 -> 0.309 Inexact Rounded -pwsx4715 power 0.953 0.5 -> 0.976 Inexact Rounded -pwsx4716 power 0.0953 0.5 -> 0.309 Inexact Rounded -pwsx4717 power 0.954 0.5 -> 0.977 Inexact Rounded -pwsx4718 power 0.0954 0.5 -> 0.309 Inexact Rounded -pwsx4719 power 0.955 0.5 -> 0.977 Inexact Rounded -pwsx4720 power 0.0955 0.5 -> 0.309 Inexact Rounded -pwsx4721 power 0.956 0.5 -> 0.978 Inexact Rounded -pwsx4722 power 0.0956 0.5 -> 0.309 Inexact Rounded -pwsx4723 power 0.957 0.5 -> 0.978 Inexact Rounded -pwsx4724 power 0.0957 0.5 -> 0.309 Inexact Rounded -pwsx4725 power 0.958 0.5 -> 0.979 Inexact Rounded -pwsx4726 power 0.0958 0.5 -> 0.310 Inexact Rounded -pwsx4727 power 0.959 0.5 -> 0.979 Inexact Rounded -pwsx4728 power 0.0959 0.5 -> 0.310 Inexact Rounded -pwsx4729 power 0.961 0.5 -> 0.980 Inexact Rounded -pwsx4730 power 0.0961 0.5 -> 0.310 Inexact Rounded -pwsx4731 power 0.962 0.5 -> 0.981 Inexact Rounded -pwsx4732 power 0.0962 0.5 -> 0.310 Inexact Rounded -pwsx4733 power 0.963 0.5 -> 0.981 Inexact Rounded -pwsx4734 power 0.0963 0.5 -> 0.310 Inexact Rounded -pwsx4735 power 0.964 0.5 -> 0.982 Inexact Rounded -pwsx4736 power 0.0964 0.5 -> 0.310 Inexact Rounded -pwsx4737 power 0.965 0.5 -> 0.982 Inexact Rounded -pwsx4738 power 0.0965 0.5 -> 0.311 Inexact Rounded -pwsx4739 power 0.966 0.5 -> 0.983 Inexact Rounded -pwsx4740 power 0.0966 0.5 -> 0.311 Inexact Rounded -pwsx4741 power 0.967 0.5 -> 0.983 Inexact Rounded -pwsx4742 power 0.0967 0.5 -> 0.311 Inexact Rounded -pwsx4743 power 0.968 0.5 -> 0.984 Inexact Rounded -pwsx4744 power 0.0968 0.5 -> 0.311 Inexact Rounded -pwsx4745 power 0.969 0.5 -> 0.984 Inexact Rounded -pwsx4746 power 0.0969 0.5 -> 0.311 Inexact Rounded -pwsx4747 power 0.971 0.5 -> 0.985 Inexact Rounded -pwsx4748 power 0.0971 0.5 -> 0.312 Inexact Rounded -pwsx4749 power 0.972 0.5 -> 0.986 Inexact Rounded -pwsx4750 power 0.0972 0.5 -> 0.312 Inexact Rounded -pwsx4751 power 0.973 0.5 -> 0.986 Inexact Rounded -pwsx4752 power 0.0973 0.5 -> 0.312 Inexact Rounded -pwsx4753 power 0.974 0.5 -> 0.987 Inexact Rounded -pwsx4754 power 0.0974 0.5 -> 0.312 Inexact Rounded -pwsx4755 power 0.975 0.5 -> 0.987 Inexact Rounded -pwsx4756 power 0.0975 0.5 -> 0.312 Inexact Rounded -pwsx4757 power 0.976 0.5 -> 0.988 Inexact Rounded -pwsx4758 power 0.0976 0.5 -> 0.312 Inexact Rounded -pwsx4759 power 0.977 0.5 -> 0.988 Inexact Rounded -pwsx4760 power 0.0977 0.5 -> 0.313 Inexact Rounded -pwsx4761 power 0.978 0.5 -> 0.989 Inexact Rounded -pwsx4762 power 0.0978 0.5 -> 0.313 Inexact Rounded -pwsx4763 power 0.979 0.5 -> 0.989 Inexact Rounded -pwsx4764 power 0.0979 0.5 -> 0.313 Inexact Rounded -pwsx4765 power 0.981 0.5 -> 0.990 Inexact Rounded -pwsx4766 power 0.0981 0.5 -> 0.313 Inexact Rounded -pwsx4767 power 0.982 0.5 -> 0.991 Inexact Rounded -pwsx4768 power 0.0982 0.5 -> 0.313 Inexact Rounded -pwsx4769 power 0.983 0.5 -> 0.991 Inexact Rounded -pwsx4770 power 0.0983 0.5 -> 0.314 Inexact Rounded -pwsx4771 power 0.984 0.5 -> 0.992 Inexact Rounded -pwsx4772 power 0.0984 0.5 -> 0.314 Inexact Rounded -pwsx4773 power 0.985 0.5 -> 0.992 Inexact Rounded -pwsx4774 power 0.0985 0.5 -> 0.314 Inexact Rounded -pwsx4775 power 0.986 0.5 -> 0.993 Inexact Rounded -pwsx4776 power 0.0986 0.5 -> 0.314 Inexact Rounded -pwsx4777 power 0.987 0.5 -> 0.993 Inexact Rounded -pwsx4778 power 0.0987 0.5 -> 0.314 Inexact Rounded -pwsx4779 power 0.988 0.5 -> 0.994 Inexact Rounded -pwsx4780 power 0.0988 0.5 -> 0.314 Inexact Rounded -pwsx4781 power 0.989 0.5 -> 0.994 Inexact Rounded -pwsx4782 power 0.0989 0.5 -> 0.314 Inexact Rounded -pwsx4783 power 0.991 0.5 -> 0.995 Inexact Rounded -pwsx4784 power 0.0991 0.5 -> 0.315 Inexact Rounded -pwsx4785 power 0.992 0.5 -> 0.996 Inexact Rounded -pwsx4786 power 0.0992 0.5 -> 0.315 Inexact Rounded -pwsx4787 power 0.993 0.5 -> 0.996 Inexact Rounded -pwsx4788 power 0.0993 0.5 -> 0.315 Inexact Rounded -pwsx4789 power 0.994 0.5 -> 0.997 Inexact Rounded -pwsx4790 power 0.0994 0.5 -> 0.315 Inexact Rounded -pwsx4791 power 0.995 0.5 -> 0.997 Inexact Rounded -pwsx4792 power 0.0995 0.5 -> 0.315 Inexact Rounded -pwsx4793 power 0.996 0.5 -> 0.998 Inexact Rounded -pwsx4794 power 0.0996 0.5 -> 0.316 Inexact Rounded -pwsx4795 power 0.997 0.5 -> 0.998 Inexact Rounded -pwsx4796 power 0.0997 0.5 -> 0.316 Inexact Rounded -pwsx4797 power 0.998 0.5 -> 0.999 Inexact Rounded -pwsx4798 power 0.0998 0.5 -> 0.316 Inexact Rounded -pwsx4799 power 0.999 0.5 -> 0.999 Inexact Rounded -pwsx4800 power 0.0999 0.5 -> 0.316 Inexact Rounded - --- A group of precision 4 tests where Hull & Abrham adjustments are --- needed in some cases (both up and down) [see Hull1985b] -rounding: half_even -maxExponent: 999 -minexponent: -999 -precision: 4 -pwsx5001 power 0.0118 0.5 -> 0.1086 Inexact Rounded -pwsx5002 power 0.119 0.5 -> 0.3450 Inexact Rounded -pwsx5003 power 0.0119 0.5 -> 0.1091 Inexact Rounded -pwsx5004 power 0.121 0.5 -> 0.3479 Inexact Rounded -pwsx5005 power 0.0121 0.5 -> 0.1100 Inexact Rounded -pwsx5006 power 0.122 0.5 -> 0.3493 Inexact Rounded -pwsx5007 power 0.0122 0.5 -> 0.1105 Inexact Rounded -pwsx5008 power 0.123 0.5 -> 0.3507 Inexact Rounded -pwsx5009 power 0.494 0.5 -> 0.7029 Inexact Rounded -pwsx5010 power 0.0669 0.5 -> 0.2587 Inexact Rounded -pwsx5011 power 0.9558 0.5 -> 0.9777 Inexact Rounded -pwsx5012 power 0.9348 0.5 -> 0.9669 Inexact Rounded -pwsx5013 power 0.9345 0.5 -> 0.9667 Inexact Rounded -pwsx5014 power 0.09345 0.5 -> 0.3057 Inexact Rounded -pwsx5015 power 0.9346 0.5 -> 0.9667 Inexact Rounded -pwsx5016 power 0.09346 0.5 -> 0.3057 Inexact Rounded -pwsx5017 power 0.9347 0.5 -> 0.9668 Inexact Rounded - --- examples from decArith -precision: 9 -pwsx700 power 0 0.5 -> '0' -pwsx701 power -0 0.5 -> '0' -pwsx702 power 0.39 0.5 -> 0.624499800 Inexact Rounded -pwsx703 power 100 0.5 -> '10.0000000' Inexact Rounded -pwsx704 power 1.00 0.5 -> '1.00000000' Inexact Rounded -pwsx705 power 7 0.5 -> '2.64575131' Inexact Rounded -pwsx706 power 10 0.5 -> 3.16227766 Inexact Rounded - --- some one-offs -precision: 9 -pwsx711 power 0.1 0.5 -> 0.316227766 Inexact Rounded -pwsx712 power 0.2 0.5 -> 0.447213595 Inexact Rounded -pwsx713 power 0.3 0.5 -> 0.547722558 Inexact Rounded -pwsx714 power 0.4 0.5 -> 0.632455532 Inexact Rounded -pwsx715 power 0.5 0.5 -> 0.707106781 Inexact Rounded -pwsx716 power 0.6 0.5 -> 0.774596669 Inexact Rounded -pwsx717 power 0.7 0.5 -> 0.836660027 Inexact Rounded -pwsx718 power 0.8 0.5 -> 0.894427191 Inexact Rounded -pwsx719 power 0.9 0.5 -> 0.948683298 Inexact Rounded -precision: 10 -- note no normalizatoin here -pwsx720 power +0.1 0.5 -> 0.3162277660 Inexact Rounded -precision: 11 -pwsx721 power +0.1 0.5 -> 0.31622776602 Inexact Rounded -precision: 12 -pwsx722 power +0.1 0.5 -> 0.316227766017 Inexact Rounded -precision: 9 -pwsx723 power 0.39 0.5 -> 0.624499800 Inexact Rounded -precision: 15 -pwsx724 power 0.39 0.5 -> 0.624499799839840 Inexact Rounded - --- discussion cases -precision: 7 -pwsx731 power 9 0.5 -> 3.000000 Inexact Rounded -pwsx732 power 100 0.5 -> 10.00000 Inexact Rounded -pwsx733 power 123 0.5 -> 11.09054 Inexact Rounded -pwsx734 power 144 0.5 -> 12.00000 Inexact Rounded -pwsx735 power 156 0.5 -> 12.49000 Inexact Rounded -pwsx736 power 10000 0.5 -> 100.0000 Inexact Rounded - --- values close to overflow (if there were input rounding) -maxexponent: 99 -minexponent: -99 -precision: 5 -pwsx760 power 9.9997E+99 0.5 -> 9.9998E+49 Inexact Rounded -pwsx761 power 9.9998E+99 0.5 -> 9.9999E+49 Inexact Rounded -pwsx762 power 9.9999E+99 0.5 -> 9.9999E+49 Inexact Rounded -pwsx763 power 9.99991E+99 0.5 -> 1.0000E+50 Inexact Rounded -pwsx764 power 9.99994E+99 0.5 -> 1.0000E+50 Inexact Rounded -pwsx765 power 9.99995E+99 0.5 -> 1.0000E+50 Inexact Rounded -pwsx766 power 9.99999E+99 0.5 -> 1.0000E+50 Inexact Rounded -precision: 9 -pwsx770 power 9.9997E+99 0.5 -> 9.99985000E+49 Inexact Rounded -pwsx771 power 9.9998E+99 0.5 -> 9.99990000E+49 Inexact Rounded -pwsx772 power 9.9999E+99 0.5 -> 9.99995000E+49 Inexact Rounded -pwsx773 power 9.99991E+99 0.5 -> 9.99995500E+49 Inexact Rounded -pwsx774 power 9.99994E+99 0.5 -> 9.99997000E+49 Inexact Rounded -pwsx775 power 9.99995E+99 0.5 -> 9.99997500E+49 Inexact Rounded -pwsx776 power 9.99999E+99 0.5 -> 9.99999500E+49 Inexact Rounded -precision: 20 -pwsx780 power 9.9997E+99 0.5 -> '9.9998499988749831247E+49' Inexact Rounded -pwsx781 power 9.9998E+99 0.5 -> '9.9998999994999949999E+49' Inexact Rounded -pwsx782 power 9.9999E+99 0.5 -> '9.9999499998749993750E+49' Inexact Rounded -pwsx783 power 9.99991E+99 0.5 -> '9.9999549998987495444E+49' Inexact Rounded -pwsx784 power 9.99994E+99 0.5 -> '9.9999699999549998650E+49' Inexact Rounded -pwsx785 power 9.99995E+99 0.5 -> '9.9999749999687499219E+49' Inexact Rounded -pwsx786 power 9.99999E+99 0.5 -> '9.9999949999987499994E+49' Inexact Rounded - --- subnormals and underflows [these can only result when eMax is < digits+1] --- Etiny = -(Emax + (precision-1)) --- start with subnormal operands and normal results -maxexponent: 9 -minexponent: -9 -precision: 9 -- Etiny=-17 -pwsx800 power 1E-17 0.5 -> 3.16227766E-9 Inexact Rounded -pwsx801 power 10E-17 0.5 -> 1.00000000E-8 Inexact Rounded -precision: 10 -- Etiny=-18 -pwsx802 power 10E-18 0.5 -> 3.162277660E-9 Inexact Rounded -pwsx803 power 1E-18 0.5 -> 1.000000000E-9 Inexact Rounded - -precision: 11 -- Etiny=-19 -pwsx804 power 1E-19 0.5 -> 3.162277660E-10 Underflow Subnormal Inexact Rounded --- The next test should be skipped for decNumber -pwsx805 power 10E-19 0.5 -> 1.0000000000E-9 Inexact Rounded -precision: 12 -- Etiny=-20 -pwsx806 power 10E-20 0.5 -> 3.1622776602E-10 Underflow Subnormal Inexact Rounded -pwsx807 power 1E-20 0.5 -> 1.0000000000E-10 Underflow Subnormal Inexact Rounded - -precision: 13 -- Etiny=-21 -pwsx808 power 1E-21 0.5 -> 3.1622776602E-11 Underflow Subnormal Inexact Rounded -pwsx809 power 10E-21 0.5 -> 1.00000000000E-10 Underflow Subnormal Inexact Rounded -precision: 14 -- Etiny=-22 -pwsx810 power 1E-21 0.5 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded -pwsx811 power 10E-22 0.5 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded -pwsx812 power 1E-22 0.5 -> 1.00000000000E-11 Underflow Subnormal Inexact Rounded - - --- special values -maxexponent: 999 -minexponent: -999 -pwsx820 power Inf 0.5 -> Infinity -pwsx821 power -Inf 0.5 -> NaN Invalid_operation -pwsx822 power NaN 0.5 -> NaN -pwsx823 power sNaN 0.5 -> NaN Invalid_operation --- propagating NaNs -pwsx824 power sNaN123 0.5 -> NaN123 Invalid_operation -pwsx825 power -sNaN321 0.5 -> -NaN321 Invalid_operation -pwsx826 power NaN456 0.5 -> NaN456 -pwsx827 power -NaN654 0.5 -> -NaN654 -pwsx828 power NaN1 0.5 -> NaN1 - --- Null test -pwsx900 power # 0.5 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- powersqrt.decTest -- decimal square root, using power -- +-- Copyright (c) IBM Corporation, 2004, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- These testcases are taken from squareroot.decTest but are +-- evaluated using the power operator. The differences in results +-- (153 out of 2856) fall into the following categories: +-- +-- x ** 0.5 (x>0) has no preferred exponent, and is Inexact +-- (and hence full precision); almost all differences are +-- in this category +-- 0.00 ** 0.5 becomes 0 (not 0.0), etc. +-- -0 ** 0.5 becomes 0 (never -0) +-- Some exact subnormals become inexact and hence underflows + +extended: 1 +precision: 9 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- basics +pwsx001 power 1 0.5 -> 1.00000000 Inexact Rounded +pwsx002 power -1 0.5 -> NaN Invalid_operation +pwsx003 power 1.00 0.5 -> 1.00000000 Inexact Rounded +pwsx004 power -1.00 0.5 -> NaN Invalid_operation +pwsx005 power 0 0.5 -> 0 +pwsx006 power 00.0 0.5 -> 0 +pwsx007 power 0.00 0.5 -> 0 +pwsx008 power 00.00 0.5 -> 0 +pwsx009 power 00.000 0.5 -> 0 +pwsx010 power 00.0000 0.5 -> 0 +pwsx011 power 00 0.5 -> 0 + +pwsx012 power -2 0.5 -> NaN Invalid_operation +pwsx013 power 2 0.5 -> 1.41421356 Inexact Rounded +pwsx014 power -2.00 0.5 -> NaN Invalid_operation +pwsx015 power 2.00 0.5 -> 1.41421356 Inexact Rounded +pwsx016 power -0 0.5 -> 0 +pwsx017 power -0.0 0.5 -> 0 +pwsx018 power -00.00 0.5 -> 0 +pwsx019 power -00.000 0.5 -> 0 +pwsx020 power -0.0000 0.5 -> 0 +pwsx021 power -0E+9 0.5 -> 0 +pwsx022 power -0E+10 0.5 -> 0 +pwsx023 power -0E+11 0.5 -> 0 +pwsx024 power -0E+12 0.5 -> 0 +pwsx025 power -00 0.5 -> 0 +pwsx026 power 0E+5 0.5 -> 0 +pwsx027 power 4.0 0.5 -> 2.00000000 Inexact Rounded +pwsx028 power 4.00 0.5 -> 2.00000000 Inexact Rounded + +pwsx030 power +0.1 0.5 -> 0.316227766 Inexact Rounded +pwsx031 power -0.1 0.5 -> NaN Invalid_operation +pwsx032 power +0.01 0.5 -> 0.100000000 Inexact Rounded +pwsx033 power -0.01 0.5 -> NaN Invalid_operation +pwsx034 power +0.001 0.5 -> 0.0316227766 Inexact Rounded +pwsx035 power -0.001 0.5 -> NaN Invalid_operation +pwsx036 power +0.000001 0.5 -> 0.00100000000 Inexact Rounded +pwsx037 power -0.000001 0.5 -> NaN Invalid_operation +pwsx038 power +0.000000000001 0.5 -> 0.00000100000000 Inexact Rounded +pwsx039 power -0.000000000001 0.5 -> NaN Invalid_operation + +pwsx041 power 1.1 0.5 -> 1.04880885 Inexact Rounded +pwsx042 power 1.10 0.5 -> 1.04880885 Inexact Rounded +pwsx043 power 1.100 0.5 -> 1.04880885 Inexact Rounded +pwsx044 power 1.110 0.5 -> 1.05356538 Inexact Rounded +pwsx045 power -1.1 0.5 -> NaN Invalid_operation +pwsx046 power -1.10 0.5 -> NaN Invalid_operation +pwsx047 power -1.100 0.5 -> NaN Invalid_operation +pwsx048 power -1.110 0.5 -> NaN Invalid_operation +pwsx049 power 9.9 0.5 -> 3.14642654 Inexact Rounded +pwsx050 power 9.90 0.5 -> 3.14642654 Inexact Rounded +pwsx051 power 9.900 0.5 -> 3.14642654 Inexact Rounded +pwsx052 power 9.990 0.5 -> 3.16069613 Inexact Rounded +pwsx053 power -9.9 0.5 -> NaN Invalid_operation +pwsx054 power -9.90 0.5 -> NaN Invalid_operation +pwsx055 power -9.900 0.5 -> NaN Invalid_operation +pwsx056 power -9.990 0.5 -> NaN Invalid_operation + +pwsx060 power 1 0.5 -> 1.00000000 Inexact Rounded +pwsx061 power 1.0 0.5 -> 1.00000000 Inexact Rounded +pwsx062 power 1.00 0.5 -> 1.00000000 Inexact Rounded +pwsx063 power 10.0 0.5 -> 3.16227766 Inexact Rounded +pwsx064 power 10.0 0.5 -> 3.16227766 Inexact Rounded +pwsx065 power 10.0 0.5 -> 3.16227766 Inexact Rounded +pwsx066 power 10.00 0.5 -> 3.16227766 Inexact Rounded +pwsx067 power 100 0.5 -> 10.0000000 Inexact Rounded +pwsx068 power 100.0 0.5 -> 10.0000000 Inexact Rounded +pwsx069 power 100.00 0.5 -> 10.0000000 Inexact Rounded +pwsx070 power 1.1000E+3 0.5 -> 33.1662479 Inexact Rounded +pwsx071 power 1.10000E+3 0.5 -> 33.1662479 Inexact Rounded +pwsx072 power -10.0 0.5 -> NaN Invalid_operation +pwsx073 power -10.00 0.5 -> NaN Invalid_operation +pwsx074 power -100.0 0.5 -> NaN Invalid_operation +pwsx075 power -100.00 0.5 -> NaN Invalid_operation +pwsx076 power -1.1000E+3 0.5 -> NaN Invalid_operation +pwsx077 power -1.10000E+3 0.5 -> NaN Invalid_operation + +-- famous squares +pwsx080 power 1 0.5 -> 1.00000000 Inexact Rounded +pwsx081 power 4 0.5 -> 2.00000000 Inexact Rounded +pwsx082 power 9 0.5 -> 3.00000000 Inexact Rounded +pwsx083 power 16 0.5 -> 4.00000000 Inexact Rounded +pwsx084 power 25 0.5 -> 5.00000000 Inexact Rounded +pwsx085 power 36 0.5 -> 6.00000000 Inexact Rounded +pwsx086 power 49 0.5 -> 7.00000000 Inexact Rounded +pwsx087 power 64 0.5 -> 8.00000000 Inexact Rounded +pwsx088 power 81 0.5 -> 9.00000000 Inexact Rounded +pwsx089 power 100 0.5 -> 10.0000000 Inexact Rounded +pwsx090 power 121 0.5 -> 11.0000000 Inexact Rounded +pwsx091 power 144 0.5 -> 12.0000000 Inexact Rounded +pwsx092 power 169 0.5 -> 13.0000000 Inexact Rounded +pwsx093 power 256 0.5 -> 16.0000000 Inexact Rounded +pwsx094 power 1024 0.5 -> 32.0000000 Inexact Rounded +pwsx095 power 4096 0.5 -> 64.0000000 Inexact Rounded +pwsx100 power 0.01 0.5 -> 0.100000000 Inexact Rounded +pwsx101 power 0.04 0.5 -> 0.200000000 Inexact Rounded +pwsx102 power 0.09 0.5 -> 0.300000000 Inexact Rounded +pwsx103 power 0.16 0.5 -> 0.400000000 Inexact Rounded +pwsx104 power 0.25 0.5 -> 0.500000000 Inexact Rounded +pwsx105 power 0.36 0.5 -> 0.600000000 Inexact Rounded +pwsx106 power 0.49 0.5 -> 0.700000000 Inexact Rounded +pwsx107 power 0.64 0.5 -> 0.800000000 Inexact Rounded +pwsx108 power 0.81 0.5 -> 0.900000000 Inexact Rounded +pwsx109 power 1.00 0.5 -> 1.00000000 Inexact Rounded +pwsx110 power 1.21 0.5 -> 1.10000000 Inexact Rounded +pwsx111 power 1.44 0.5 -> 1.20000000 Inexact Rounded +pwsx112 power 1.69 0.5 -> 1.30000000 Inexact Rounded +pwsx113 power 2.56 0.5 -> 1.60000000 Inexact Rounded +pwsx114 power 10.24 0.5 -> 3.20000000 Inexact Rounded +pwsx115 power 40.96 0.5 -> 6.40000000 Inexact Rounded + +-- Precision 1 squareroot tests [exhaustive, plus exponent adjusts] +rounding: half_even +maxExponent: 999 +minexponent: -999 +precision: 1 +pwsx1201 power 0.1 0.5 -> 0.3 Inexact Rounded +pwsx1202 power 0.01 0.5 -> 0.1 Inexact Rounded +pwsx1203 power 1.0E-1 0.5 -> 0.3 Inexact Rounded +pwsx1204 power 1.00E-2 0.5 -> 0.1 Inexact Rounded +pwsx1205 power 1E-3 0.5 -> 0.03 Inexact Rounded +pwsx1206 power 1E+1 0.5 -> 3 Inexact Rounded +pwsx1207 power 1E+2 0.5 -> 1E+1 Inexact Rounded +pwsx1208 power 1E+3 0.5 -> 3E+1 Inexact Rounded +pwsx1209 power 0.2 0.5 -> 0.4 Inexact Rounded +pwsx1210 power 0.02 0.5 -> 0.1 Inexact Rounded +pwsx1211 power 2.0E-1 0.5 -> 0.4 Inexact Rounded +pwsx1212 power 2.00E-2 0.5 -> 0.1 Inexact Rounded +pwsx1213 power 2E-3 0.5 -> 0.04 Inexact Rounded +pwsx1214 power 2E+1 0.5 -> 4 Inexact Rounded +pwsx1215 power 2E+2 0.5 -> 1E+1 Inexact Rounded +pwsx1216 power 2E+3 0.5 -> 4E+1 Inexact Rounded +pwsx1217 power 0.3 0.5 -> 0.5 Inexact Rounded +pwsx1218 power 0.03 0.5 -> 0.2 Inexact Rounded +pwsx1219 power 3.0E-1 0.5 -> 0.5 Inexact Rounded +pwsx1220 power 3.00E-2 0.5 -> 0.2 Inexact Rounded +pwsx1221 power 3E-3 0.5 -> 0.05 Inexact Rounded +pwsx1222 power 3E+1 0.5 -> 5 Inexact Rounded +pwsx1223 power 3E+2 0.5 -> 2E+1 Inexact Rounded +pwsx1224 power 3E+3 0.5 -> 5E+1 Inexact Rounded +pwsx1225 power 0.4 0.5 -> 0.6 Inexact Rounded +pwsx1226 power 0.04 0.5 -> 0.2 Inexact Rounded +pwsx1227 power 4.0E-1 0.5 -> 0.6 Inexact Rounded +pwsx1228 power 4.00E-2 0.5 -> 0.2 Inexact Rounded +pwsx1229 power 4E-3 0.5 -> 0.06 Inexact Rounded +pwsx1230 power 4E+1 0.5 -> 6 Inexact Rounded +pwsx1231 power 4E+2 0.5 -> 2E+1 Inexact Rounded +pwsx1232 power 4E+3 0.5 -> 6E+1 Inexact Rounded +pwsx1233 power 0.5 0.5 -> 0.7 Inexact Rounded +pwsx1234 power 0.05 0.5 -> 0.2 Inexact Rounded +pwsx1235 power 5.0E-1 0.5 -> 0.7 Inexact Rounded +pwsx1236 power 5.00E-2 0.5 -> 0.2 Inexact Rounded +pwsx1237 power 5E-3 0.5 -> 0.07 Inexact Rounded +pwsx1238 power 5E+1 0.5 -> 7 Inexact Rounded +pwsx1239 power 5E+2 0.5 -> 2E+1 Inexact Rounded +pwsx1240 power 5E+3 0.5 -> 7E+1 Inexact Rounded +pwsx1241 power 0.6 0.5 -> 0.8 Inexact Rounded +pwsx1242 power 0.06 0.5 -> 0.2 Inexact Rounded +pwsx1243 power 6.0E-1 0.5 -> 0.8 Inexact Rounded +pwsx1244 power 6.00E-2 0.5 -> 0.2 Inexact Rounded +pwsx1245 power 6E-3 0.5 -> 0.08 Inexact Rounded +pwsx1246 power 6E+1 0.5 -> 8 Inexact Rounded +pwsx1247 power 6E+2 0.5 -> 2E+1 Inexact Rounded +pwsx1248 power 6E+3 0.5 -> 8E+1 Inexact Rounded +pwsx1249 power 0.7 0.5 -> 0.8 Inexact Rounded +pwsx1250 power 0.07 0.5 -> 0.3 Inexact Rounded +pwsx1251 power 7.0E-1 0.5 -> 0.8 Inexact Rounded +pwsx1252 power 7.00E-2 0.5 -> 0.3 Inexact Rounded +pwsx1253 power 7E-3 0.5 -> 0.08 Inexact Rounded +pwsx1254 power 7E+1 0.5 -> 8 Inexact Rounded +pwsx1255 power 7E+2 0.5 -> 3E+1 Inexact Rounded +pwsx1256 power 7E+3 0.5 -> 8E+1 Inexact Rounded +pwsx1257 power 0.8 0.5 -> 0.9 Inexact Rounded +pwsx1258 power 0.08 0.5 -> 0.3 Inexact Rounded +pwsx1259 power 8.0E-1 0.5 -> 0.9 Inexact Rounded +pwsx1260 power 8.00E-2 0.5 -> 0.3 Inexact Rounded +pwsx1261 power 8E-3 0.5 -> 0.09 Inexact Rounded +pwsx1262 power 8E+1 0.5 -> 9 Inexact Rounded +pwsx1263 power 8E+2 0.5 -> 3E+1 Inexact Rounded +pwsx1264 power 8E+3 0.5 -> 9E+1 Inexact Rounded +pwsx1265 power 0.9 0.5 -> 0.9 Inexact Rounded +pwsx1266 power 0.09 0.5 -> 0.3 Inexact Rounded +pwsx1267 power 9.0E-1 0.5 -> 0.9 Inexact Rounded +pwsx1268 power 9.00E-2 0.5 -> 0.3 Inexact Rounded +pwsx1269 power 9E-3 0.5 -> 0.09 Inexact Rounded +pwsx1270 power 9E+1 0.5 -> 9 Inexact Rounded +pwsx1271 power 9E+2 0.5 -> 3E+1 Inexact Rounded +pwsx1272 power 9E+3 0.5 -> 9E+1 Inexact Rounded + +-- Precision 2 squareroot tests [exhaustive, plus exponent adjusts] +rounding: half_even +maxExponent: 999 +minexponent: -999 +precision: 2 +pwsx2201 power 0.1 0.5 -> 0.32 Inexact Rounded +pwsx2202 power 0.01 0.5 -> 0.10 Inexact Rounded +pwsx2203 power 1.0E-1 0.5 -> 0.32 Inexact Rounded +pwsx2204 power 1.00E-2 0.5 -> 0.10 Inexact Rounded +pwsx2205 power 1E-3 0.5 -> 0.032 Inexact Rounded +pwsx2206 power 1E+1 0.5 -> 3.2 Inexact Rounded +pwsx2207 power 1E+2 0.5 -> 10 Inexact Rounded +pwsx2208 power 1E+3 0.5 -> 32 Inexact Rounded +pwsx2209 power 0.2 0.5 -> 0.45 Inexact Rounded +pwsx2210 power 0.02 0.5 -> 0.14 Inexact Rounded +pwsx2211 power 2.0E-1 0.5 -> 0.45 Inexact Rounded +pwsx2212 power 2.00E-2 0.5 -> 0.14 Inexact Rounded +pwsx2213 power 2E-3 0.5 -> 0.045 Inexact Rounded +pwsx2214 power 2E+1 0.5 -> 4.5 Inexact Rounded +pwsx2215 power 2E+2 0.5 -> 14 Inexact Rounded +pwsx2216 power 2E+3 0.5 -> 45 Inexact Rounded +pwsx2217 power 0.3 0.5 -> 0.55 Inexact Rounded +pwsx2218 power 0.03 0.5 -> 0.17 Inexact Rounded +pwsx2219 power 3.0E-1 0.5 -> 0.55 Inexact Rounded +pwsx2220 power 3.00E-2 0.5 -> 0.17 Inexact Rounded +pwsx2221 power 3E-3 0.5 -> 0.055 Inexact Rounded +pwsx2222 power 3E+1 0.5 -> 5.5 Inexact Rounded +pwsx2223 power 3E+2 0.5 -> 17 Inexact Rounded +pwsx2224 power 3E+3 0.5 -> 55 Inexact Rounded +pwsx2225 power 0.4 0.5 -> 0.63 Inexact Rounded +pwsx2226 power 0.04 0.5 -> 0.20 Inexact Rounded +pwsx2227 power 4.0E-1 0.5 -> 0.63 Inexact Rounded +pwsx2228 power 4.00E-2 0.5 -> 0.20 Inexact Rounded +pwsx2229 power 4E-3 0.5 -> 0.063 Inexact Rounded +pwsx2230 power 4E+1 0.5 -> 6.3 Inexact Rounded +pwsx2231 power 4E+2 0.5 -> 20 Inexact Rounded +pwsx2232 power 4E+3 0.5 -> 63 Inexact Rounded +pwsx2233 power 0.5 0.5 -> 0.71 Inexact Rounded +pwsx2234 power 0.05 0.5 -> 0.22 Inexact Rounded +pwsx2235 power 5.0E-1 0.5 -> 0.71 Inexact Rounded +pwsx2236 power 5.00E-2 0.5 -> 0.22 Inexact Rounded +pwsx2237 power 5E-3 0.5 -> 0.071 Inexact Rounded +pwsx2238 power 5E+1 0.5 -> 7.1 Inexact Rounded +pwsx2239 power 5E+2 0.5 -> 22 Inexact Rounded +pwsx2240 power 5E+3 0.5 -> 71 Inexact Rounded +pwsx2241 power 0.6 0.5 -> 0.77 Inexact Rounded +pwsx2242 power 0.06 0.5 -> 0.24 Inexact Rounded +pwsx2243 power 6.0E-1 0.5 -> 0.77 Inexact Rounded +pwsx2244 power 6.00E-2 0.5 -> 0.24 Inexact Rounded +pwsx2245 power 6E-3 0.5 -> 0.077 Inexact Rounded +pwsx2246 power 6E+1 0.5 -> 7.7 Inexact Rounded +pwsx2247 power 6E+2 0.5 -> 24 Inexact Rounded +pwsx2248 power 6E+3 0.5 -> 77 Inexact Rounded +pwsx2249 power 0.7 0.5 -> 0.84 Inexact Rounded +pwsx2250 power 0.07 0.5 -> 0.26 Inexact Rounded +pwsx2251 power 7.0E-1 0.5 -> 0.84 Inexact Rounded +pwsx2252 power 7.00E-2 0.5 -> 0.26 Inexact Rounded +pwsx2253 power 7E-3 0.5 -> 0.084 Inexact Rounded +pwsx2254 power 7E+1 0.5 -> 8.4 Inexact Rounded +pwsx2255 power 7E+2 0.5 -> 26 Inexact Rounded +pwsx2256 power 7E+3 0.5 -> 84 Inexact Rounded +pwsx2257 power 0.8 0.5 -> 0.89 Inexact Rounded +pwsx2258 power 0.08 0.5 -> 0.28 Inexact Rounded +pwsx2259 power 8.0E-1 0.5 -> 0.89 Inexact Rounded +pwsx2260 power 8.00E-2 0.5 -> 0.28 Inexact Rounded +pwsx2261 power 8E-3 0.5 -> 0.089 Inexact Rounded +pwsx2262 power 8E+1 0.5 -> 8.9 Inexact Rounded +pwsx2263 power 8E+2 0.5 -> 28 Inexact Rounded +pwsx2264 power 8E+3 0.5 -> 89 Inexact Rounded +pwsx2265 power 0.9 0.5 -> 0.95 Inexact Rounded +pwsx2266 power 0.09 0.5 -> 0.30 Inexact Rounded +pwsx2267 power 9.0E-1 0.5 -> 0.95 Inexact Rounded +pwsx2268 power 9.00E-2 0.5 -> 0.30 Inexact Rounded +pwsx2269 power 9E-3 0.5 -> 0.095 Inexact Rounded +pwsx2270 power 9E+1 0.5 -> 9.5 Inexact Rounded +pwsx2271 power 9E+2 0.5 -> 30 Inexact Rounded +pwsx2272 power 9E+3 0.5 -> 95 Inexact Rounded +pwsx2273 power 0.10 0.5 -> 0.32 Inexact Rounded +pwsx2274 power 0.010 0.5 -> 0.10 Inexact Rounded +pwsx2275 power 10.0E-1 0.5 -> 1.0 Inexact Rounded +pwsx2276 power 10.00E-2 0.5 -> 0.32 Inexact Rounded +pwsx2277 power 10E-3 0.5 -> 0.10 Inexact Rounded +pwsx2278 power 10E+1 0.5 -> 10 Inexact Rounded +pwsx2279 power 10E+2 0.5 -> 32 Inexact Rounded +pwsx2280 power 10E+3 0.5 -> 1.0E+2 Inexact Rounded +pwsx2281 power 0.11 0.5 -> 0.33 Inexact Rounded +pwsx2282 power 0.011 0.5 -> 0.10 Inexact Rounded +pwsx2283 power 11.0E-1 0.5 -> 1.0 Inexact Rounded +pwsx2284 power 11.00E-2 0.5 -> 0.33 Inexact Rounded +pwsx2285 power 11E-3 0.5 -> 0.10 Inexact Rounded +pwsx2286 power 11E+1 0.5 -> 10 Inexact Rounded +pwsx2287 power 11E+2 0.5 -> 33 Inexact Rounded +pwsx2288 power 11E+3 0.5 -> 1.0E+2 Inexact Rounded +pwsx2289 power 0.12 0.5 -> 0.35 Inexact Rounded +pwsx2290 power 0.012 0.5 -> 0.11 Inexact Rounded +pwsx2291 power 12.0E-1 0.5 -> 1.1 Inexact Rounded +pwsx2292 power 12.00E-2 0.5 -> 0.35 Inexact Rounded +pwsx2293 power 12E-3 0.5 -> 0.11 Inexact Rounded +pwsx2294 power 12E+1 0.5 -> 11 Inexact Rounded +pwsx2295 power 12E+2 0.5 -> 35 Inexact Rounded +pwsx2296 power 12E+3 0.5 -> 1.1E+2 Inexact Rounded +pwsx2297 power 0.13 0.5 -> 0.36 Inexact Rounded +pwsx2298 power 0.013 0.5 -> 0.11 Inexact Rounded +pwsx2299 power 13.0E-1 0.5 -> 1.1 Inexact Rounded +pwsx2300 power 13.00E-2 0.5 -> 0.36 Inexact Rounded +pwsx2301 power 13E-3 0.5 -> 0.11 Inexact Rounded +pwsx2302 power 13E+1 0.5 -> 11 Inexact Rounded +pwsx2303 power 13E+2 0.5 -> 36 Inexact Rounded +pwsx2304 power 13E+3 0.5 -> 1.1E+2 Inexact Rounded +pwsx2305 power 0.14 0.5 -> 0.37 Inexact Rounded +pwsx2306 power 0.014 0.5 -> 0.12 Inexact Rounded +pwsx2307 power 14.0E-1 0.5 -> 1.2 Inexact Rounded +pwsx2308 power 14.00E-2 0.5 -> 0.37 Inexact Rounded +pwsx2309 power 14E-3 0.5 -> 0.12 Inexact Rounded +pwsx2310 power 14E+1 0.5 -> 12 Inexact Rounded +pwsx2311 power 14E+2 0.5 -> 37 Inexact Rounded +pwsx2312 power 14E+3 0.5 -> 1.2E+2 Inexact Rounded +pwsx2313 power 0.15 0.5 -> 0.39 Inexact Rounded +pwsx2314 power 0.015 0.5 -> 0.12 Inexact Rounded +pwsx2315 power 15.0E-1 0.5 -> 1.2 Inexact Rounded +pwsx2316 power 15.00E-2 0.5 -> 0.39 Inexact Rounded +pwsx2317 power 15E-3 0.5 -> 0.12 Inexact Rounded +pwsx2318 power 15E+1 0.5 -> 12 Inexact Rounded +pwsx2319 power 15E+2 0.5 -> 39 Inexact Rounded +pwsx2320 power 15E+3 0.5 -> 1.2E+2 Inexact Rounded +pwsx2321 power 0.16 0.5 -> 0.40 Inexact Rounded +pwsx2322 power 0.016 0.5 -> 0.13 Inexact Rounded +pwsx2323 power 16.0E-1 0.5 -> 1.3 Inexact Rounded +pwsx2324 power 16.00E-2 0.5 -> 0.40 Inexact Rounded +pwsx2325 power 16E-3 0.5 -> 0.13 Inexact Rounded +pwsx2326 power 16E+1 0.5 -> 13 Inexact Rounded +pwsx2327 power 16E+2 0.5 -> 40 Inexact Rounded +pwsx2328 power 16E+3 0.5 -> 1.3E+2 Inexact Rounded +pwsx2329 power 0.17 0.5 -> 0.41 Inexact Rounded +pwsx2330 power 0.017 0.5 -> 0.13 Inexact Rounded +pwsx2331 power 17.0E-1 0.5 -> 1.3 Inexact Rounded +pwsx2332 power 17.00E-2 0.5 -> 0.41 Inexact Rounded +pwsx2333 power 17E-3 0.5 -> 0.13 Inexact Rounded +pwsx2334 power 17E+1 0.5 -> 13 Inexact Rounded +pwsx2335 power 17E+2 0.5 -> 41 Inexact Rounded +pwsx2336 power 17E+3 0.5 -> 1.3E+2 Inexact Rounded +pwsx2337 power 0.18 0.5 -> 0.42 Inexact Rounded +pwsx2338 power 0.018 0.5 -> 0.13 Inexact Rounded +pwsx2339 power 18.0E-1 0.5 -> 1.3 Inexact Rounded +pwsx2340 power 18.00E-2 0.5 -> 0.42 Inexact Rounded +pwsx2341 power 18E-3 0.5 -> 0.13 Inexact Rounded +pwsx2342 power 18E+1 0.5 -> 13 Inexact Rounded +pwsx2343 power 18E+2 0.5 -> 42 Inexact Rounded +pwsx2344 power 18E+3 0.5 -> 1.3E+2 Inexact Rounded +pwsx2345 power 0.19 0.5 -> 0.44 Inexact Rounded +pwsx2346 power 0.019 0.5 -> 0.14 Inexact Rounded +pwsx2347 power 19.0E-1 0.5 -> 1.4 Inexact Rounded +pwsx2348 power 19.00E-2 0.5 -> 0.44 Inexact Rounded +pwsx2349 power 19E-3 0.5 -> 0.14 Inexact Rounded +pwsx2350 power 19E+1 0.5 -> 14 Inexact Rounded +pwsx2351 power 19E+2 0.5 -> 44 Inexact Rounded +pwsx2352 power 19E+3 0.5 -> 1.4E+2 Inexact Rounded +pwsx2353 power 0.20 0.5 -> 0.45 Inexact Rounded +pwsx2354 power 0.020 0.5 -> 0.14 Inexact Rounded +pwsx2355 power 20.0E-1 0.5 -> 1.4 Inexact Rounded +pwsx2356 power 20.00E-2 0.5 -> 0.45 Inexact Rounded +pwsx2357 power 20E-3 0.5 -> 0.14 Inexact Rounded +pwsx2358 power 20E+1 0.5 -> 14 Inexact Rounded +pwsx2359 power 20E+2 0.5 -> 45 Inexact Rounded +pwsx2360 power 20E+3 0.5 -> 1.4E+2 Inexact Rounded +pwsx2361 power 0.21 0.5 -> 0.46 Inexact Rounded +pwsx2362 power 0.021 0.5 -> 0.14 Inexact Rounded +pwsx2363 power 21.0E-1 0.5 -> 1.4 Inexact Rounded +pwsx2364 power 21.00E-2 0.5 -> 0.46 Inexact Rounded +pwsx2365 power 21E-3 0.5 -> 0.14 Inexact Rounded +pwsx2366 power 21E+1 0.5 -> 14 Inexact Rounded +pwsx2367 power 21E+2 0.5 -> 46 Inexact Rounded +pwsx2368 power 21E+3 0.5 -> 1.4E+2 Inexact Rounded +pwsx2369 power 0.22 0.5 -> 0.47 Inexact Rounded +pwsx2370 power 0.022 0.5 -> 0.15 Inexact Rounded +pwsx2371 power 22.0E-1 0.5 -> 1.5 Inexact Rounded +pwsx2372 power 22.00E-2 0.5 -> 0.47 Inexact Rounded +pwsx2373 power 22E-3 0.5 -> 0.15 Inexact Rounded +pwsx2374 power 22E+1 0.5 -> 15 Inexact Rounded +pwsx2375 power 22E+2 0.5 -> 47 Inexact Rounded +pwsx2376 power 22E+3 0.5 -> 1.5E+2 Inexact Rounded +pwsx2377 power 0.23 0.5 -> 0.48 Inexact Rounded +pwsx2378 power 0.023 0.5 -> 0.15 Inexact Rounded +pwsx2379 power 23.0E-1 0.5 -> 1.5 Inexact Rounded +pwsx2380 power 23.00E-2 0.5 -> 0.48 Inexact Rounded +pwsx2381 power 23E-3 0.5 -> 0.15 Inexact Rounded +pwsx2382 power 23E+1 0.5 -> 15 Inexact Rounded +pwsx2383 power 23E+2 0.5 -> 48 Inexact Rounded +pwsx2384 power 23E+3 0.5 -> 1.5E+2 Inexact Rounded +pwsx2385 power 0.24 0.5 -> 0.49 Inexact Rounded +pwsx2386 power 0.024 0.5 -> 0.15 Inexact Rounded +pwsx2387 power 24.0E-1 0.5 -> 1.5 Inexact Rounded +pwsx2388 power 24.00E-2 0.5 -> 0.49 Inexact Rounded +pwsx2389 power 24E-3 0.5 -> 0.15 Inexact Rounded +pwsx2390 power 24E+1 0.5 -> 15 Inexact Rounded +pwsx2391 power 24E+2 0.5 -> 49 Inexact Rounded +pwsx2392 power 24E+3 0.5 -> 1.5E+2 Inexact Rounded +pwsx2393 power 0.25 0.5 -> 0.50 Inexact Rounded +pwsx2394 power 0.025 0.5 -> 0.16 Inexact Rounded +pwsx2395 power 25.0E-1 0.5 -> 1.6 Inexact Rounded +pwsx2396 power 25.00E-2 0.5 -> 0.50 Inexact Rounded +pwsx2397 power 25E-3 0.5 -> 0.16 Inexact Rounded +pwsx2398 power 25E+1 0.5 -> 16 Inexact Rounded +pwsx2399 power 25E+2 0.5 -> 50 Inexact Rounded +pwsx2400 power 25E+3 0.5 -> 1.6E+2 Inexact Rounded +pwsx2401 power 0.26 0.5 -> 0.51 Inexact Rounded +pwsx2402 power 0.026 0.5 -> 0.16 Inexact Rounded +pwsx2403 power 26.0E-1 0.5 -> 1.6 Inexact Rounded +pwsx2404 power 26.00E-2 0.5 -> 0.51 Inexact Rounded +pwsx2405 power 26E-3 0.5 -> 0.16 Inexact Rounded +pwsx2406 power 26E+1 0.5 -> 16 Inexact Rounded +pwsx2407 power 26E+2 0.5 -> 51 Inexact Rounded +pwsx2408 power 26E+3 0.5 -> 1.6E+2 Inexact Rounded +pwsx2409 power 0.27 0.5 -> 0.52 Inexact Rounded +pwsx2410 power 0.027 0.5 -> 0.16 Inexact Rounded +pwsx2411 power 27.0E-1 0.5 -> 1.6 Inexact Rounded +pwsx2412 power 27.00E-2 0.5 -> 0.52 Inexact Rounded +pwsx2413 power 27E-3 0.5 -> 0.16 Inexact Rounded +pwsx2414 power 27E+1 0.5 -> 16 Inexact Rounded +pwsx2415 power 27E+2 0.5 -> 52 Inexact Rounded +pwsx2416 power 27E+3 0.5 -> 1.6E+2 Inexact Rounded +pwsx2417 power 0.28 0.5 -> 0.53 Inexact Rounded +pwsx2418 power 0.028 0.5 -> 0.17 Inexact Rounded +pwsx2419 power 28.0E-1 0.5 -> 1.7 Inexact Rounded +pwsx2420 power 28.00E-2 0.5 -> 0.53 Inexact Rounded +pwsx2421 power 28E-3 0.5 -> 0.17 Inexact Rounded +pwsx2422 power 28E+1 0.5 -> 17 Inexact Rounded +pwsx2423 power 28E+2 0.5 -> 53 Inexact Rounded +pwsx2424 power 28E+3 0.5 -> 1.7E+2 Inexact Rounded +pwsx2425 power 0.29 0.5 -> 0.54 Inexact Rounded +pwsx2426 power 0.029 0.5 -> 0.17 Inexact Rounded +pwsx2427 power 29.0E-1 0.5 -> 1.7 Inexact Rounded +pwsx2428 power 29.00E-2 0.5 -> 0.54 Inexact Rounded +pwsx2429 power 29E-3 0.5 -> 0.17 Inexact Rounded +pwsx2430 power 29E+1 0.5 -> 17 Inexact Rounded +pwsx2431 power 29E+2 0.5 -> 54 Inexact Rounded +pwsx2432 power 29E+3 0.5 -> 1.7E+2 Inexact Rounded +pwsx2433 power 0.30 0.5 -> 0.55 Inexact Rounded +pwsx2434 power 0.030 0.5 -> 0.17 Inexact Rounded +pwsx2435 power 30.0E-1 0.5 -> 1.7 Inexact Rounded +pwsx2436 power 30.00E-2 0.5 -> 0.55 Inexact Rounded +pwsx2437 power 30E-3 0.5 -> 0.17 Inexact Rounded +pwsx2438 power 30E+1 0.5 -> 17 Inexact Rounded +pwsx2439 power 30E+2 0.5 -> 55 Inexact Rounded +pwsx2440 power 30E+3 0.5 -> 1.7E+2 Inexact Rounded +pwsx2441 power 0.31 0.5 -> 0.56 Inexact Rounded +pwsx2442 power 0.031 0.5 -> 0.18 Inexact Rounded +pwsx2443 power 31.0E-1 0.5 -> 1.8 Inexact Rounded +pwsx2444 power 31.00E-2 0.5 -> 0.56 Inexact Rounded +pwsx2445 power 31E-3 0.5 -> 0.18 Inexact Rounded +pwsx2446 power 31E+1 0.5 -> 18 Inexact Rounded +pwsx2447 power 31E+2 0.5 -> 56 Inexact Rounded +pwsx2448 power 31E+3 0.5 -> 1.8E+2 Inexact Rounded +pwsx2449 power 0.32 0.5 -> 0.57 Inexact Rounded +pwsx2450 power 0.032 0.5 -> 0.18 Inexact Rounded +pwsx2451 power 32.0E-1 0.5 -> 1.8 Inexact Rounded +pwsx2452 power 32.00E-2 0.5 -> 0.57 Inexact Rounded +pwsx2453 power 32E-3 0.5 -> 0.18 Inexact Rounded +pwsx2454 power 32E+1 0.5 -> 18 Inexact Rounded +pwsx2455 power 32E+2 0.5 -> 57 Inexact Rounded +pwsx2456 power 32E+3 0.5 -> 1.8E+2 Inexact Rounded +pwsx2457 power 0.33 0.5 -> 0.57 Inexact Rounded +pwsx2458 power 0.033 0.5 -> 0.18 Inexact Rounded +pwsx2459 power 33.0E-1 0.5 -> 1.8 Inexact Rounded +pwsx2460 power 33.00E-2 0.5 -> 0.57 Inexact Rounded +pwsx2461 power 33E-3 0.5 -> 0.18 Inexact Rounded +pwsx2462 power 33E+1 0.5 -> 18 Inexact Rounded +pwsx2463 power 33E+2 0.5 -> 57 Inexact Rounded +pwsx2464 power 33E+3 0.5 -> 1.8E+2 Inexact Rounded +pwsx2465 power 0.34 0.5 -> 0.58 Inexact Rounded +pwsx2466 power 0.034 0.5 -> 0.18 Inexact Rounded +pwsx2467 power 34.0E-1 0.5 -> 1.8 Inexact Rounded +pwsx2468 power 34.00E-2 0.5 -> 0.58 Inexact Rounded +pwsx2469 power 34E-3 0.5 -> 0.18 Inexact Rounded +pwsx2470 power 34E+1 0.5 -> 18 Inexact Rounded +pwsx2471 power 34E+2 0.5 -> 58 Inexact Rounded +pwsx2472 power 34E+3 0.5 -> 1.8E+2 Inexact Rounded +pwsx2473 power 0.35 0.5 -> 0.59 Inexact Rounded +pwsx2474 power 0.035 0.5 -> 0.19 Inexact Rounded +pwsx2475 power 35.0E-1 0.5 -> 1.9 Inexact Rounded +pwsx2476 power 35.00E-2 0.5 -> 0.59 Inexact Rounded +pwsx2477 power 35E-3 0.5 -> 0.19 Inexact Rounded +pwsx2478 power 35E+1 0.5 -> 19 Inexact Rounded +pwsx2479 power 35E+2 0.5 -> 59 Inexact Rounded +pwsx2480 power 35E+3 0.5 -> 1.9E+2 Inexact Rounded +pwsx2481 power 0.36 0.5 -> 0.60 Inexact Rounded +pwsx2482 power 0.036 0.5 -> 0.19 Inexact Rounded +pwsx2483 power 36.0E-1 0.5 -> 1.9 Inexact Rounded +pwsx2484 power 36.00E-2 0.5 -> 0.60 Inexact Rounded +pwsx2485 power 36E-3 0.5 -> 0.19 Inexact Rounded +pwsx2486 power 36E+1 0.5 -> 19 Inexact Rounded +pwsx2487 power 36E+2 0.5 -> 60 Inexact Rounded +pwsx2488 power 36E+3 0.5 -> 1.9E+2 Inexact Rounded +pwsx2489 power 0.37 0.5 -> 0.61 Inexact Rounded +pwsx2490 power 0.037 0.5 -> 0.19 Inexact Rounded +pwsx2491 power 37.0E-1 0.5 -> 1.9 Inexact Rounded +pwsx2492 power 37.00E-2 0.5 -> 0.61 Inexact Rounded +pwsx2493 power 37E-3 0.5 -> 0.19 Inexact Rounded +pwsx2494 power 37E+1 0.5 -> 19 Inexact Rounded +pwsx2495 power 37E+2 0.5 -> 61 Inexact Rounded +pwsx2496 power 37E+3 0.5 -> 1.9E+2 Inexact Rounded +pwsx2497 power 0.38 0.5 -> 0.62 Inexact Rounded +pwsx2498 power 0.038 0.5 -> 0.19 Inexact Rounded +pwsx2499 power 38.0E-1 0.5 -> 1.9 Inexact Rounded +pwsx2500 power 38.00E-2 0.5 -> 0.62 Inexact Rounded +pwsx2501 power 38E-3 0.5 -> 0.19 Inexact Rounded +pwsx2502 power 38E+1 0.5 -> 19 Inexact Rounded +pwsx2503 power 38E+2 0.5 -> 62 Inexact Rounded +pwsx2504 power 38E+3 0.5 -> 1.9E+2 Inexact Rounded +pwsx2505 power 0.39 0.5 -> 0.62 Inexact Rounded +pwsx2506 power 0.039 0.5 -> 0.20 Inexact Rounded +pwsx2507 power 39.0E-1 0.5 -> 2.0 Inexact Rounded +pwsx2508 power 39.00E-2 0.5 -> 0.62 Inexact Rounded +pwsx2509 power 39E-3 0.5 -> 0.20 Inexact Rounded +pwsx2510 power 39E+1 0.5 -> 20 Inexact Rounded +pwsx2511 power 39E+2 0.5 -> 62 Inexact Rounded +pwsx2512 power 39E+3 0.5 -> 2.0E+2 Inexact Rounded +pwsx2513 power 0.40 0.5 -> 0.63 Inexact Rounded +pwsx2514 power 0.040 0.5 -> 0.20 Inexact Rounded +pwsx2515 power 40.0E-1 0.5 -> 2.0 Inexact Rounded +pwsx2516 power 40.00E-2 0.5 -> 0.63 Inexact Rounded +pwsx2517 power 40E-3 0.5 -> 0.20 Inexact Rounded +pwsx2518 power 40E+1 0.5 -> 20 Inexact Rounded +pwsx2519 power 40E+2 0.5 -> 63 Inexact Rounded +pwsx2520 power 40E+3 0.5 -> 2.0E+2 Inexact Rounded +pwsx2521 power 0.41 0.5 -> 0.64 Inexact Rounded +pwsx2522 power 0.041 0.5 -> 0.20 Inexact Rounded +pwsx2523 power 41.0E-1 0.5 -> 2.0 Inexact Rounded +pwsx2524 power 41.00E-2 0.5 -> 0.64 Inexact Rounded +pwsx2525 power 41E-3 0.5 -> 0.20 Inexact Rounded +pwsx2526 power 41E+1 0.5 -> 20 Inexact Rounded +pwsx2527 power 41E+2 0.5 -> 64 Inexact Rounded +pwsx2528 power 41E+3 0.5 -> 2.0E+2 Inexact Rounded +pwsx2529 power 0.42 0.5 -> 0.65 Inexact Rounded +pwsx2530 power 0.042 0.5 -> 0.20 Inexact Rounded +pwsx2531 power 42.0E-1 0.5 -> 2.0 Inexact Rounded +pwsx2532 power 42.00E-2 0.5 -> 0.65 Inexact Rounded +pwsx2533 power 42E-3 0.5 -> 0.20 Inexact Rounded +pwsx2534 power 42E+1 0.5 -> 20 Inexact Rounded +pwsx2535 power 42E+2 0.5 -> 65 Inexact Rounded +pwsx2536 power 42E+3 0.5 -> 2.0E+2 Inexact Rounded +pwsx2537 power 0.43 0.5 -> 0.66 Inexact Rounded +pwsx2538 power 0.043 0.5 -> 0.21 Inexact Rounded +pwsx2539 power 43.0E-1 0.5 -> 2.1 Inexact Rounded +pwsx2540 power 43.00E-2 0.5 -> 0.66 Inexact Rounded +pwsx2541 power 43E-3 0.5 -> 0.21 Inexact Rounded +pwsx2542 power 43E+1 0.5 -> 21 Inexact Rounded +pwsx2543 power 43E+2 0.5 -> 66 Inexact Rounded +pwsx2544 power 43E+3 0.5 -> 2.1E+2 Inexact Rounded +pwsx2545 power 0.44 0.5 -> 0.66 Inexact Rounded +pwsx2546 power 0.044 0.5 -> 0.21 Inexact Rounded +pwsx2547 power 44.0E-1 0.5 -> 2.1 Inexact Rounded +pwsx2548 power 44.00E-2 0.5 -> 0.66 Inexact Rounded +pwsx2549 power 44E-3 0.5 -> 0.21 Inexact Rounded +pwsx2550 power 44E+1 0.5 -> 21 Inexact Rounded +pwsx2551 power 44E+2 0.5 -> 66 Inexact Rounded +pwsx2552 power 44E+3 0.5 -> 2.1E+2 Inexact Rounded +pwsx2553 power 0.45 0.5 -> 0.67 Inexact Rounded +pwsx2554 power 0.045 0.5 -> 0.21 Inexact Rounded +pwsx2555 power 45.0E-1 0.5 -> 2.1 Inexact Rounded +pwsx2556 power 45.00E-2 0.5 -> 0.67 Inexact Rounded +pwsx2557 power 45E-3 0.5 -> 0.21 Inexact Rounded +pwsx2558 power 45E+1 0.5 -> 21 Inexact Rounded +pwsx2559 power 45E+2 0.5 -> 67 Inexact Rounded +pwsx2560 power 45E+3 0.5 -> 2.1E+2 Inexact Rounded +pwsx2561 power 0.46 0.5 -> 0.68 Inexact Rounded +pwsx2562 power 0.046 0.5 -> 0.21 Inexact Rounded +pwsx2563 power 46.0E-1 0.5 -> 2.1 Inexact Rounded +pwsx2564 power 46.00E-2 0.5 -> 0.68 Inexact Rounded +pwsx2565 power 46E-3 0.5 -> 0.21 Inexact Rounded +pwsx2566 power 46E+1 0.5 -> 21 Inexact Rounded +pwsx2567 power 46E+2 0.5 -> 68 Inexact Rounded +pwsx2568 power 46E+3 0.5 -> 2.1E+2 Inexact Rounded +pwsx2569 power 0.47 0.5 -> 0.69 Inexact Rounded +pwsx2570 power 0.047 0.5 -> 0.22 Inexact Rounded +pwsx2571 power 47.0E-1 0.5 -> 2.2 Inexact Rounded +pwsx2572 power 47.00E-2 0.5 -> 0.69 Inexact Rounded +pwsx2573 power 47E-3 0.5 -> 0.22 Inexact Rounded +pwsx2574 power 47E+1 0.5 -> 22 Inexact Rounded +pwsx2575 power 47E+2 0.5 -> 69 Inexact Rounded +pwsx2576 power 47E+3 0.5 -> 2.2E+2 Inexact Rounded +pwsx2577 power 0.48 0.5 -> 0.69 Inexact Rounded +pwsx2578 power 0.048 0.5 -> 0.22 Inexact Rounded +pwsx2579 power 48.0E-1 0.5 -> 2.2 Inexact Rounded +pwsx2580 power 48.00E-2 0.5 -> 0.69 Inexact Rounded +pwsx2581 power 48E-3 0.5 -> 0.22 Inexact Rounded +pwsx2582 power 48E+1 0.5 -> 22 Inexact Rounded +pwsx2583 power 48E+2 0.5 -> 69 Inexact Rounded +pwsx2584 power 48E+3 0.5 -> 2.2E+2 Inexact Rounded +pwsx2585 power 0.49 0.5 -> 0.70 Inexact Rounded +pwsx2586 power 0.049 0.5 -> 0.22 Inexact Rounded +pwsx2587 power 49.0E-1 0.5 -> 2.2 Inexact Rounded +pwsx2588 power 49.00E-2 0.5 -> 0.70 Inexact Rounded +pwsx2589 power 49E-3 0.5 -> 0.22 Inexact Rounded +pwsx2590 power 49E+1 0.5 -> 22 Inexact Rounded +pwsx2591 power 49E+2 0.5 -> 70 Inexact Rounded +pwsx2592 power 49E+3 0.5 -> 2.2E+2 Inexact Rounded +pwsx2593 power 0.50 0.5 -> 0.71 Inexact Rounded +pwsx2594 power 0.050 0.5 -> 0.22 Inexact Rounded +pwsx2595 power 50.0E-1 0.5 -> 2.2 Inexact Rounded +pwsx2596 power 50.00E-2 0.5 -> 0.71 Inexact Rounded +pwsx2597 power 50E-3 0.5 -> 0.22 Inexact Rounded +pwsx2598 power 50E+1 0.5 -> 22 Inexact Rounded +pwsx2599 power 50E+2 0.5 -> 71 Inexact Rounded +pwsx2600 power 50E+3 0.5 -> 2.2E+2 Inexact Rounded +pwsx2601 power 0.51 0.5 -> 0.71 Inexact Rounded +pwsx2602 power 0.051 0.5 -> 0.23 Inexact Rounded +pwsx2603 power 51.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2604 power 51.00E-2 0.5 -> 0.71 Inexact Rounded +pwsx2605 power 51E-3 0.5 -> 0.23 Inexact Rounded +pwsx2606 power 51E+1 0.5 -> 23 Inexact Rounded +pwsx2607 power 51E+2 0.5 -> 71 Inexact Rounded +pwsx2608 power 51E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2609 power 0.52 0.5 -> 0.72 Inexact Rounded +pwsx2610 power 0.052 0.5 -> 0.23 Inexact Rounded +pwsx2611 power 52.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2612 power 52.00E-2 0.5 -> 0.72 Inexact Rounded +pwsx2613 power 52E-3 0.5 -> 0.23 Inexact Rounded +pwsx2614 power 52E+1 0.5 -> 23 Inexact Rounded +pwsx2615 power 52E+2 0.5 -> 72 Inexact Rounded +pwsx2616 power 52E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2617 power 0.53 0.5 -> 0.73 Inexact Rounded +pwsx2618 power 0.053 0.5 -> 0.23 Inexact Rounded +pwsx2619 power 53.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2620 power 53.00E-2 0.5 -> 0.73 Inexact Rounded +pwsx2621 power 53E-3 0.5 -> 0.23 Inexact Rounded +pwsx2622 power 53E+1 0.5 -> 23 Inexact Rounded +pwsx2623 power 53E+2 0.5 -> 73 Inexact Rounded +pwsx2624 power 53E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2625 power 0.54 0.5 -> 0.73 Inexact Rounded +pwsx2626 power 0.054 0.5 -> 0.23 Inexact Rounded +pwsx2627 power 54.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2628 power 54.00E-2 0.5 -> 0.73 Inexact Rounded +pwsx2629 power 54E-3 0.5 -> 0.23 Inexact Rounded +pwsx2630 power 54E+1 0.5 -> 23 Inexact Rounded +pwsx2631 power 54E+2 0.5 -> 73 Inexact Rounded +pwsx2632 power 54E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2633 power 0.55 0.5 -> 0.74 Inexact Rounded +pwsx2634 power 0.055 0.5 -> 0.23 Inexact Rounded +pwsx2635 power 55.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2636 power 55.00E-2 0.5 -> 0.74 Inexact Rounded +pwsx2637 power 55E-3 0.5 -> 0.23 Inexact Rounded +pwsx2638 power 55E+1 0.5 -> 23 Inexact Rounded +pwsx2639 power 55E+2 0.5 -> 74 Inexact Rounded +pwsx2640 power 55E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2641 power 0.56 0.5 -> 0.75 Inexact Rounded +pwsx2642 power 0.056 0.5 -> 0.24 Inexact Rounded +pwsx2643 power 56.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2644 power 56.00E-2 0.5 -> 0.75 Inexact Rounded +pwsx2645 power 56E-3 0.5 -> 0.24 Inexact Rounded +pwsx2646 power 56E+1 0.5 -> 24 Inexact Rounded +pwsx2647 power 56E+2 0.5 -> 75 Inexact Rounded +pwsx2648 power 56E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2649 power 0.57 0.5 -> 0.75 Inexact Rounded +pwsx2650 power 0.057 0.5 -> 0.24 Inexact Rounded +pwsx2651 power 57.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2652 power 57.00E-2 0.5 -> 0.75 Inexact Rounded +pwsx2653 power 57E-3 0.5 -> 0.24 Inexact Rounded +pwsx2654 power 57E+1 0.5 -> 24 Inexact Rounded +pwsx2655 power 57E+2 0.5 -> 75 Inexact Rounded +pwsx2656 power 57E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2657 power 0.58 0.5 -> 0.76 Inexact Rounded +pwsx2658 power 0.058 0.5 -> 0.24 Inexact Rounded +pwsx2659 power 58.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2660 power 58.00E-2 0.5 -> 0.76 Inexact Rounded +pwsx2661 power 58E-3 0.5 -> 0.24 Inexact Rounded +pwsx2662 power 58E+1 0.5 -> 24 Inexact Rounded +pwsx2663 power 58E+2 0.5 -> 76 Inexact Rounded +pwsx2664 power 58E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2665 power 0.59 0.5 -> 0.77 Inexact Rounded +pwsx2666 power 0.059 0.5 -> 0.24 Inexact Rounded +pwsx2667 power 59.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2668 power 59.00E-2 0.5 -> 0.77 Inexact Rounded +pwsx2669 power 59E-3 0.5 -> 0.24 Inexact Rounded +pwsx2670 power 59E+1 0.5 -> 24 Inexact Rounded +pwsx2671 power 59E+2 0.5 -> 77 Inexact Rounded +pwsx2672 power 59E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2673 power 0.60 0.5 -> 0.77 Inexact Rounded +pwsx2674 power 0.060 0.5 -> 0.24 Inexact Rounded +pwsx2675 power 60.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2676 power 60.00E-2 0.5 -> 0.77 Inexact Rounded +pwsx2677 power 60E-3 0.5 -> 0.24 Inexact Rounded +pwsx2678 power 60E+1 0.5 -> 24 Inexact Rounded +pwsx2679 power 60E+2 0.5 -> 77 Inexact Rounded +pwsx2680 power 60E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2681 power 0.61 0.5 -> 0.78 Inexact Rounded +pwsx2682 power 0.061 0.5 -> 0.25 Inexact Rounded +pwsx2683 power 61.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2684 power 61.00E-2 0.5 -> 0.78 Inexact Rounded +pwsx2685 power 61E-3 0.5 -> 0.25 Inexact Rounded +pwsx2686 power 61E+1 0.5 -> 25 Inexact Rounded +pwsx2687 power 61E+2 0.5 -> 78 Inexact Rounded +pwsx2688 power 61E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2689 power 0.62 0.5 -> 0.79 Inexact Rounded +pwsx2690 power 0.062 0.5 -> 0.25 Inexact Rounded +pwsx2691 power 62.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2692 power 62.00E-2 0.5 -> 0.79 Inexact Rounded +pwsx2693 power 62E-3 0.5 -> 0.25 Inexact Rounded +pwsx2694 power 62E+1 0.5 -> 25 Inexact Rounded +pwsx2695 power 62E+2 0.5 -> 79 Inexact Rounded +pwsx2696 power 62E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2697 power 0.63 0.5 -> 0.79 Inexact Rounded +pwsx2698 power 0.063 0.5 -> 0.25 Inexact Rounded +pwsx2699 power 63.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2700 power 63.00E-2 0.5 -> 0.79 Inexact Rounded +pwsx2701 power 63E-3 0.5 -> 0.25 Inexact Rounded +pwsx2702 power 63E+1 0.5 -> 25 Inexact Rounded +pwsx2703 power 63E+2 0.5 -> 79 Inexact Rounded +pwsx2704 power 63E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2705 power 0.64 0.5 -> 0.80 Inexact Rounded +pwsx2706 power 0.064 0.5 -> 0.25 Inexact Rounded +pwsx2707 power 64.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2708 power 64.00E-2 0.5 -> 0.80 Inexact Rounded +pwsx2709 power 64E-3 0.5 -> 0.25 Inexact Rounded +pwsx2710 power 64E+1 0.5 -> 25 Inexact Rounded +pwsx2711 power 64E+2 0.5 -> 80 Inexact Rounded +pwsx2712 power 64E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2713 power 0.65 0.5 -> 0.81 Inexact Rounded +pwsx2714 power 0.065 0.5 -> 0.25 Inexact Rounded +pwsx2715 power 65.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2716 power 65.00E-2 0.5 -> 0.81 Inexact Rounded +pwsx2717 power 65E-3 0.5 -> 0.25 Inexact Rounded +pwsx2718 power 65E+1 0.5 -> 25 Inexact Rounded +pwsx2719 power 65E+2 0.5 -> 81 Inexact Rounded +pwsx2720 power 65E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2721 power 0.66 0.5 -> 0.81 Inexact Rounded +pwsx2722 power 0.066 0.5 -> 0.26 Inexact Rounded +pwsx2723 power 66.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2724 power 66.00E-2 0.5 -> 0.81 Inexact Rounded +pwsx2725 power 66E-3 0.5 -> 0.26 Inexact Rounded +pwsx2726 power 66E+1 0.5 -> 26 Inexact Rounded +pwsx2727 power 66E+2 0.5 -> 81 Inexact Rounded +pwsx2728 power 66E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2729 power 0.67 0.5 -> 0.82 Inexact Rounded +pwsx2730 power 0.067 0.5 -> 0.26 Inexact Rounded +pwsx2731 power 67.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2732 power 67.00E-2 0.5 -> 0.82 Inexact Rounded +pwsx2733 power 67E-3 0.5 -> 0.26 Inexact Rounded +pwsx2734 power 67E+1 0.5 -> 26 Inexact Rounded +pwsx2735 power 67E+2 0.5 -> 82 Inexact Rounded +pwsx2736 power 67E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2737 power 0.68 0.5 -> 0.82 Inexact Rounded +pwsx2738 power 0.068 0.5 -> 0.26 Inexact Rounded +pwsx2739 power 68.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2740 power 68.00E-2 0.5 -> 0.82 Inexact Rounded +pwsx2741 power 68E-3 0.5 -> 0.26 Inexact Rounded +pwsx2742 power 68E+1 0.5 -> 26 Inexact Rounded +pwsx2743 power 68E+2 0.5 -> 82 Inexact Rounded +pwsx2744 power 68E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2745 power 0.69 0.5 -> 0.83 Inexact Rounded +pwsx2746 power 0.069 0.5 -> 0.26 Inexact Rounded +pwsx2747 power 69.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2748 power 69.00E-2 0.5 -> 0.83 Inexact Rounded +pwsx2749 power 69E-3 0.5 -> 0.26 Inexact Rounded +pwsx2750 power 69E+1 0.5 -> 26 Inexact Rounded +pwsx2751 power 69E+2 0.5 -> 83 Inexact Rounded +pwsx2752 power 69E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2753 power 0.70 0.5 -> 0.84 Inexact Rounded +pwsx2754 power 0.070 0.5 -> 0.26 Inexact Rounded +pwsx2755 power 70.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2756 power 70.00E-2 0.5 -> 0.84 Inexact Rounded +pwsx2757 power 70E-3 0.5 -> 0.26 Inexact Rounded +pwsx2758 power 70E+1 0.5 -> 26 Inexact Rounded +pwsx2759 power 70E+2 0.5 -> 84 Inexact Rounded +pwsx2760 power 70E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2761 power 0.71 0.5 -> 0.84 Inexact Rounded +pwsx2762 power 0.071 0.5 -> 0.27 Inexact Rounded +pwsx2763 power 71.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2764 power 71.00E-2 0.5 -> 0.84 Inexact Rounded +pwsx2765 power 71E-3 0.5 -> 0.27 Inexact Rounded +pwsx2766 power 71E+1 0.5 -> 27 Inexact Rounded +pwsx2767 power 71E+2 0.5 -> 84 Inexact Rounded +pwsx2768 power 71E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2769 power 0.72 0.5 -> 0.85 Inexact Rounded +pwsx2770 power 0.072 0.5 -> 0.27 Inexact Rounded +pwsx2771 power 72.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2772 power 72.00E-2 0.5 -> 0.85 Inexact Rounded +pwsx2773 power 72E-3 0.5 -> 0.27 Inexact Rounded +pwsx2774 power 72E+1 0.5 -> 27 Inexact Rounded +pwsx2775 power 72E+2 0.5 -> 85 Inexact Rounded +pwsx2776 power 72E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2777 power 0.73 0.5 -> 0.85 Inexact Rounded +pwsx2778 power 0.073 0.5 -> 0.27 Inexact Rounded +pwsx2779 power 73.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2780 power 73.00E-2 0.5 -> 0.85 Inexact Rounded +pwsx2781 power 73E-3 0.5 -> 0.27 Inexact Rounded +pwsx2782 power 73E+1 0.5 -> 27 Inexact Rounded +pwsx2783 power 73E+2 0.5 -> 85 Inexact Rounded +pwsx2784 power 73E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2785 power 0.74 0.5 -> 0.86 Inexact Rounded +pwsx2786 power 0.074 0.5 -> 0.27 Inexact Rounded +pwsx2787 power 74.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2788 power 74.00E-2 0.5 -> 0.86 Inexact Rounded +pwsx2789 power 74E-3 0.5 -> 0.27 Inexact Rounded +pwsx2790 power 74E+1 0.5 -> 27 Inexact Rounded +pwsx2791 power 74E+2 0.5 -> 86 Inexact Rounded +pwsx2792 power 74E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2793 power 0.75 0.5 -> 0.87 Inexact Rounded +pwsx2794 power 0.075 0.5 -> 0.27 Inexact Rounded +pwsx2795 power 75.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2796 power 75.00E-2 0.5 -> 0.87 Inexact Rounded +pwsx2797 power 75E-3 0.5 -> 0.27 Inexact Rounded +pwsx2798 power 75E+1 0.5 -> 27 Inexact Rounded +pwsx2799 power 75E+2 0.5 -> 87 Inexact Rounded +pwsx2800 power 75E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2801 power 0.76 0.5 -> 0.87 Inexact Rounded +pwsx2802 power 0.076 0.5 -> 0.28 Inexact Rounded +pwsx2803 power 76.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2804 power 76.00E-2 0.5 -> 0.87 Inexact Rounded +pwsx2805 power 76E-3 0.5 -> 0.28 Inexact Rounded +pwsx2806 power 76E+1 0.5 -> 28 Inexact Rounded +pwsx2807 power 76E+2 0.5 -> 87 Inexact Rounded +pwsx2808 power 76E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2809 power 0.77 0.5 -> 0.88 Inexact Rounded +pwsx2810 power 0.077 0.5 -> 0.28 Inexact Rounded +pwsx2811 power 77.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2812 power 77.00E-2 0.5 -> 0.88 Inexact Rounded +pwsx2813 power 77E-3 0.5 -> 0.28 Inexact Rounded +pwsx2814 power 77E+1 0.5 -> 28 Inexact Rounded +pwsx2815 power 77E+2 0.5 -> 88 Inexact Rounded +pwsx2816 power 77E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2817 power 0.78 0.5 -> 0.88 Inexact Rounded +pwsx2818 power 0.078 0.5 -> 0.28 Inexact Rounded +pwsx2819 power 78.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2820 power 78.00E-2 0.5 -> 0.88 Inexact Rounded +pwsx2821 power 78E-3 0.5 -> 0.28 Inexact Rounded +pwsx2822 power 78E+1 0.5 -> 28 Inexact Rounded +pwsx2823 power 78E+2 0.5 -> 88 Inexact Rounded +pwsx2824 power 78E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2825 power 0.79 0.5 -> 0.89 Inexact Rounded +pwsx2826 power 0.079 0.5 -> 0.28 Inexact Rounded +pwsx2827 power 79.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2828 power 79.00E-2 0.5 -> 0.89 Inexact Rounded +pwsx2829 power 79E-3 0.5 -> 0.28 Inexact Rounded +pwsx2830 power 79E+1 0.5 -> 28 Inexact Rounded +pwsx2831 power 79E+2 0.5 -> 89 Inexact Rounded +pwsx2832 power 79E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2833 power 0.80 0.5 -> 0.89 Inexact Rounded +pwsx2834 power 0.080 0.5 -> 0.28 Inexact Rounded +pwsx2835 power 80.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2836 power 80.00E-2 0.5 -> 0.89 Inexact Rounded +pwsx2837 power 80E-3 0.5 -> 0.28 Inexact Rounded +pwsx2838 power 80E+1 0.5 -> 28 Inexact Rounded +pwsx2839 power 80E+2 0.5 -> 89 Inexact Rounded +pwsx2840 power 80E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2841 power 0.81 0.5 -> 0.90 Inexact Rounded +pwsx2842 power 0.081 0.5 -> 0.28 Inexact Rounded +pwsx2843 power 81.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2844 power 81.00E-2 0.5 -> 0.90 Inexact Rounded +pwsx2845 power 81E-3 0.5 -> 0.28 Inexact Rounded +pwsx2846 power 81E+1 0.5 -> 28 Inexact Rounded +pwsx2847 power 81E+2 0.5 -> 90 Inexact Rounded +pwsx2848 power 81E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2849 power 0.82 0.5 -> 0.91 Inexact Rounded +pwsx2850 power 0.082 0.5 -> 0.29 Inexact Rounded +pwsx2851 power 82.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2852 power 82.00E-2 0.5 -> 0.91 Inexact Rounded +pwsx2853 power 82E-3 0.5 -> 0.29 Inexact Rounded +pwsx2854 power 82E+1 0.5 -> 29 Inexact Rounded +pwsx2855 power 82E+2 0.5 -> 91 Inexact Rounded +pwsx2856 power 82E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2857 power 0.83 0.5 -> 0.91 Inexact Rounded +pwsx2858 power 0.083 0.5 -> 0.29 Inexact Rounded +pwsx2859 power 83.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2860 power 83.00E-2 0.5 -> 0.91 Inexact Rounded +pwsx2861 power 83E-3 0.5 -> 0.29 Inexact Rounded +pwsx2862 power 83E+1 0.5 -> 29 Inexact Rounded +pwsx2863 power 83E+2 0.5 -> 91 Inexact Rounded +pwsx2864 power 83E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2865 power 0.84 0.5 -> 0.92 Inexact Rounded +pwsx2866 power 0.084 0.5 -> 0.29 Inexact Rounded +pwsx2867 power 84.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2868 power 84.00E-2 0.5 -> 0.92 Inexact Rounded +pwsx2869 power 84E-3 0.5 -> 0.29 Inexact Rounded +pwsx2870 power 84E+1 0.5 -> 29 Inexact Rounded +pwsx2871 power 84E+2 0.5 -> 92 Inexact Rounded +pwsx2872 power 84E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2873 power 0.85 0.5 -> 0.92 Inexact Rounded +pwsx2874 power 0.085 0.5 -> 0.29 Inexact Rounded +pwsx2875 power 85.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2876 power 85.00E-2 0.5 -> 0.92 Inexact Rounded +pwsx2877 power 85E-3 0.5 -> 0.29 Inexact Rounded +pwsx2878 power 85E+1 0.5 -> 29 Inexact Rounded +pwsx2879 power 85E+2 0.5 -> 92 Inexact Rounded +pwsx2880 power 85E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2881 power 0.86 0.5 -> 0.93 Inexact Rounded +pwsx2882 power 0.086 0.5 -> 0.29 Inexact Rounded +pwsx2883 power 86.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2884 power 86.00E-2 0.5 -> 0.93 Inexact Rounded +pwsx2885 power 86E-3 0.5 -> 0.29 Inexact Rounded +pwsx2886 power 86E+1 0.5 -> 29 Inexact Rounded +pwsx2887 power 86E+2 0.5 -> 93 Inexact Rounded +pwsx2888 power 86E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2889 power 0.87 0.5 -> 0.93 Inexact Rounded +pwsx2890 power 0.087 0.5 -> 0.29 Inexact Rounded +pwsx2891 power 87.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2892 power 87.00E-2 0.5 -> 0.93 Inexact Rounded +pwsx2893 power 87E-3 0.5 -> 0.29 Inexact Rounded +pwsx2894 power 87E+1 0.5 -> 29 Inexact Rounded +pwsx2895 power 87E+2 0.5 -> 93 Inexact Rounded +pwsx2896 power 87E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2897 power 0.88 0.5 -> 0.94 Inexact Rounded +pwsx2898 power 0.088 0.5 -> 0.30 Inexact Rounded +pwsx2899 power 88.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2900 power 88.00E-2 0.5 -> 0.94 Inexact Rounded +pwsx2901 power 88E-3 0.5 -> 0.30 Inexact Rounded +pwsx2902 power 88E+1 0.5 -> 30 Inexact Rounded +pwsx2903 power 88E+2 0.5 -> 94 Inexact Rounded +pwsx2904 power 88E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2905 power 0.89 0.5 -> 0.94 Inexact Rounded +pwsx2906 power 0.089 0.5 -> 0.30 Inexact Rounded +pwsx2907 power 89.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2908 power 89.00E-2 0.5 -> 0.94 Inexact Rounded +pwsx2909 power 89E-3 0.5 -> 0.30 Inexact Rounded +pwsx2910 power 89E+1 0.5 -> 30 Inexact Rounded +pwsx2911 power 89E+2 0.5 -> 94 Inexact Rounded +pwsx2912 power 89E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2913 power 0.90 0.5 -> 0.95 Inexact Rounded +pwsx2914 power 0.090 0.5 -> 0.30 Inexact Rounded +pwsx2915 power 90.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2916 power 90.00E-2 0.5 -> 0.95 Inexact Rounded +pwsx2917 power 90E-3 0.5 -> 0.30 Inexact Rounded +pwsx2918 power 90E+1 0.5 -> 30 Inexact Rounded +pwsx2919 power 90E+2 0.5 -> 95 Inexact Rounded +pwsx2920 power 90E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2921 power 0.91 0.5 -> 0.95 Inexact Rounded +pwsx2922 power 0.091 0.5 -> 0.30 Inexact Rounded +pwsx2923 power 91.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2924 power 91.00E-2 0.5 -> 0.95 Inexact Rounded +pwsx2925 power 91E-3 0.5 -> 0.30 Inexact Rounded +pwsx2926 power 91E+1 0.5 -> 30 Inexact Rounded +pwsx2927 power 91E+2 0.5 -> 95 Inexact Rounded +pwsx2928 power 91E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2929 power 0.92 0.5 -> 0.96 Inexact Rounded +pwsx2930 power 0.092 0.5 -> 0.30 Inexact Rounded +pwsx2931 power 92.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2932 power 92.00E-2 0.5 -> 0.96 Inexact Rounded +pwsx2933 power 92E-3 0.5 -> 0.30 Inexact Rounded +pwsx2934 power 92E+1 0.5 -> 30 Inexact Rounded +pwsx2935 power 92E+2 0.5 -> 96 Inexact Rounded +pwsx2936 power 92E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2937 power 0.93 0.5 -> 0.96 Inexact Rounded +pwsx2938 power 0.093 0.5 -> 0.30 Inexact Rounded +pwsx2939 power 93.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2940 power 93.00E-2 0.5 -> 0.96 Inexact Rounded +pwsx2941 power 93E-3 0.5 -> 0.30 Inexact Rounded +pwsx2942 power 93E+1 0.5 -> 30 Inexact Rounded +pwsx2943 power 93E+2 0.5 -> 96 Inexact Rounded +pwsx2944 power 93E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2945 power 0.94 0.5 -> 0.97 Inexact Rounded +pwsx2946 power 0.094 0.5 -> 0.31 Inexact Rounded +pwsx2947 power 94.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2948 power 94.00E-2 0.5 -> 0.97 Inexact Rounded +pwsx2949 power 94E-3 0.5 -> 0.31 Inexact Rounded +pwsx2950 power 94E+1 0.5 -> 31 Inexact Rounded +pwsx2951 power 94E+2 0.5 -> 97 Inexact Rounded +pwsx2952 power 94E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2953 power 0.95 0.5 -> 0.97 Inexact Rounded +pwsx2954 power 0.095 0.5 -> 0.31 Inexact Rounded +pwsx2955 power 95.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2956 power 95.00E-2 0.5 -> 0.97 Inexact Rounded +pwsx2957 power 95E-3 0.5 -> 0.31 Inexact Rounded +pwsx2958 power 95E+1 0.5 -> 31 Inexact Rounded +pwsx2959 power 95E+2 0.5 -> 97 Inexact Rounded +pwsx2960 power 95E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2961 power 0.96 0.5 -> 0.98 Inexact Rounded +pwsx2962 power 0.096 0.5 -> 0.31 Inexact Rounded +pwsx2963 power 96.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2964 power 96.00E-2 0.5 -> 0.98 Inexact Rounded +pwsx2965 power 96E-3 0.5 -> 0.31 Inexact Rounded +pwsx2966 power 96E+1 0.5 -> 31 Inexact Rounded +pwsx2967 power 96E+2 0.5 -> 98 Inexact Rounded +pwsx2968 power 96E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2969 power 0.97 0.5 -> 0.98 Inexact Rounded +pwsx2970 power 0.097 0.5 -> 0.31 Inexact Rounded +pwsx2971 power 97.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2972 power 97.00E-2 0.5 -> 0.98 Inexact Rounded +pwsx2973 power 97E-3 0.5 -> 0.31 Inexact Rounded +pwsx2974 power 97E+1 0.5 -> 31 Inexact Rounded +pwsx2975 power 97E+2 0.5 -> 98 Inexact Rounded +pwsx2976 power 97E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2977 power 0.98 0.5 -> 0.99 Inexact Rounded +pwsx2978 power 0.098 0.5 -> 0.31 Inexact Rounded +pwsx2979 power 98.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2980 power 98.00E-2 0.5 -> 0.99 Inexact Rounded +pwsx2981 power 98E-3 0.5 -> 0.31 Inexact Rounded +pwsx2982 power 98E+1 0.5 -> 31 Inexact Rounded +pwsx2983 power 98E+2 0.5 -> 99 Inexact Rounded +pwsx2984 power 98E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2985 power 0.99 0.5 -> 0.99 Inexact Rounded +pwsx2986 power 0.099 0.5 -> 0.31 Inexact Rounded +pwsx2987 power 99.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2988 power 99.00E-2 0.5 -> 0.99 Inexact Rounded +pwsx2989 power 99E-3 0.5 -> 0.31 Inexact Rounded +pwsx2990 power 99E+1 0.5 -> 31 Inexact Rounded +pwsx2991 power 99E+2 0.5 -> 99 Inexact Rounded +pwsx2992 power 99E+3 0.5 -> 3.1E+2 Inexact Rounded + +-- Precision 3 squareroot tests [exhaustive, f and f/10] +rounding: half_even +maxExponent: 999 +minexponent: -999 +precision: 3 +pwsx3001 power 0.1 0.5 -> 0.316 Inexact Rounded +pwsx3002 power 0.01 0.5 -> 0.100 Inexact Rounded +pwsx3003 power 0.2 0.5 -> 0.447 Inexact Rounded +pwsx3004 power 0.02 0.5 -> 0.141 Inexact Rounded +pwsx3005 power 0.3 0.5 -> 0.548 Inexact Rounded +pwsx3006 power 0.03 0.5 -> 0.173 Inexact Rounded +pwsx3007 power 0.4 0.5 -> 0.632 Inexact Rounded +pwsx3008 power 0.04 0.5 -> 0.200 Inexact Rounded +pwsx3009 power 0.5 0.5 -> 0.707 Inexact Rounded +pwsx3010 power 0.05 0.5 -> 0.224 Inexact Rounded +pwsx3011 power 0.6 0.5 -> 0.775 Inexact Rounded +pwsx3012 power 0.06 0.5 -> 0.245 Inexact Rounded +pwsx3013 power 0.7 0.5 -> 0.837 Inexact Rounded +pwsx3014 power 0.07 0.5 -> 0.265 Inexact Rounded +pwsx3015 power 0.8 0.5 -> 0.894 Inexact Rounded +pwsx3016 power 0.08 0.5 -> 0.283 Inexact Rounded +pwsx3017 power 0.9 0.5 -> 0.949 Inexact Rounded +pwsx3018 power 0.09 0.5 -> 0.300 Inexact Rounded +pwsx3019 power 0.11 0.5 -> 0.332 Inexact Rounded +pwsx3020 power 0.011 0.5 -> 0.105 Inexact Rounded +pwsx3021 power 0.12 0.5 -> 0.346 Inexact Rounded +pwsx3022 power 0.012 0.5 -> 0.110 Inexact Rounded +pwsx3023 power 0.13 0.5 -> 0.361 Inexact Rounded +pwsx3024 power 0.013 0.5 -> 0.114 Inexact Rounded +pwsx3025 power 0.14 0.5 -> 0.374 Inexact Rounded +pwsx3026 power 0.014 0.5 -> 0.118 Inexact Rounded +pwsx3027 power 0.15 0.5 -> 0.387 Inexact Rounded +pwsx3028 power 0.015 0.5 -> 0.122 Inexact Rounded +pwsx3029 power 0.16 0.5 -> 0.400 Inexact Rounded +pwsx3030 power 0.016 0.5 -> 0.126 Inexact Rounded +pwsx3031 power 0.17 0.5 -> 0.412 Inexact Rounded +pwsx3032 power 0.017 0.5 -> 0.130 Inexact Rounded +pwsx3033 power 0.18 0.5 -> 0.424 Inexact Rounded +pwsx3034 power 0.018 0.5 -> 0.134 Inexact Rounded +pwsx3035 power 0.19 0.5 -> 0.436 Inexact Rounded +pwsx3036 power 0.019 0.5 -> 0.138 Inexact Rounded +pwsx3037 power 0.21 0.5 -> 0.458 Inexact Rounded +pwsx3038 power 0.021 0.5 -> 0.145 Inexact Rounded +pwsx3039 power 0.22 0.5 -> 0.469 Inexact Rounded +pwsx3040 power 0.022 0.5 -> 0.148 Inexact Rounded +pwsx3041 power 0.23 0.5 -> 0.480 Inexact Rounded +pwsx3042 power 0.023 0.5 -> 0.152 Inexact Rounded +pwsx3043 power 0.24 0.5 -> 0.490 Inexact Rounded +pwsx3044 power 0.024 0.5 -> 0.155 Inexact Rounded +pwsx3045 power 0.25 0.5 -> 0.500 Inexact Rounded +pwsx3046 power 0.025 0.5 -> 0.158 Inexact Rounded +pwsx3047 power 0.26 0.5 -> 0.510 Inexact Rounded +pwsx3048 power 0.026 0.5 -> 0.161 Inexact Rounded +pwsx3049 power 0.27 0.5 -> 0.520 Inexact Rounded +pwsx3050 power 0.027 0.5 -> 0.164 Inexact Rounded +pwsx3051 power 0.28 0.5 -> 0.529 Inexact Rounded +pwsx3052 power 0.028 0.5 -> 0.167 Inexact Rounded +pwsx3053 power 0.29 0.5 -> 0.539 Inexact Rounded +pwsx3054 power 0.029 0.5 -> 0.170 Inexact Rounded +pwsx3055 power 0.31 0.5 -> 0.557 Inexact Rounded +pwsx3056 power 0.031 0.5 -> 0.176 Inexact Rounded +pwsx3057 power 0.32 0.5 -> 0.566 Inexact Rounded +pwsx3058 power 0.032 0.5 -> 0.179 Inexact Rounded +pwsx3059 power 0.33 0.5 -> 0.574 Inexact Rounded +pwsx3060 power 0.033 0.5 -> 0.182 Inexact Rounded +pwsx3061 power 0.34 0.5 -> 0.583 Inexact Rounded +pwsx3062 power 0.034 0.5 -> 0.184 Inexact Rounded +pwsx3063 power 0.35 0.5 -> 0.592 Inexact Rounded +pwsx3064 power 0.035 0.5 -> 0.187 Inexact Rounded +pwsx3065 power 0.36 0.5 -> 0.600 Inexact Rounded +pwsx3066 power 0.036 0.5 -> 0.190 Inexact Rounded +pwsx3067 power 0.37 0.5 -> 0.608 Inexact Rounded +pwsx3068 power 0.037 0.5 -> 0.192 Inexact Rounded +pwsx3069 power 0.38 0.5 -> 0.616 Inexact Rounded +pwsx3070 power 0.038 0.5 -> 0.195 Inexact Rounded +pwsx3071 power 0.39 0.5 -> 0.624 Inexact Rounded +pwsx3072 power 0.039 0.5 -> 0.197 Inexact Rounded +pwsx3073 power 0.41 0.5 -> 0.640 Inexact Rounded +pwsx3074 power 0.041 0.5 -> 0.202 Inexact Rounded +pwsx3075 power 0.42 0.5 -> 0.648 Inexact Rounded +pwsx3076 power 0.042 0.5 -> 0.205 Inexact Rounded +pwsx3077 power 0.43 0.5 -> 0.656 Inexact Rounded +pwsx3078 power 0.043 0.5 -> 0.207 Inexact Rounded +pwsx3079 power 0.44 0.5 -> 0.663 Inexact Rounded +pwsx3080 power 0.044 0.5 -> 0.210 Inexact Rounded +pwsx3081 power 0.45 0.5 -> 0.671 Inexact Rounded +pwsx3082 power 0.045 0.5 -> 0.212 Inexact Rounded +pwsx3083 power 0.46 0.5 -> 0.678 Inexact Rounded +pwsx3084 power 0.046 0.5 -> 0.214 Inexact Rounded +pwsx3085 power 0.47 0.5 -> 0.686 Inexact Rounded +pwsx3086 power 0.047 0.5 -> 0.217 Inexact Rounded +pwsx3087 power 0.48 0.5 -> 0.693 Inexact Rounded +pwsx3088 power 0.048 0.5 -> 0.219 Inexact Rounded +pwsx3089 power 0.49 0.5 -> 0.700 Inexact Rounded +pwsx3090 power 0.049 0.5 -> 0.221 Inexact Rounded +pwsx3091 power 0.51 0.5 -> 0.714 Inexact Rounded +pwsx3092 power 0.051 0.5 -> 0.226 Inexact Rounded +pwsx3093 power 0.52 0.5 -> 0.721 Inexact Rounded +pwsx3094 power 0.052 0.5 -> 0.228 Inexact Rounded +pwsx3095 power 0.53 0.5 -> 0.728 Inexact Rounded +pwsx3096 power 0.053 0.5 -> 0.230 Inexact Rounded +pwsx3097 power 0.54 0.5 -> 0.735 Inexact Rounded +pwsx3098 power 0.054 0.5 -> 0.232 Inexact Rounded +pwsx3099 power 0.55 0.5 -> 0.742 Inexact Rounded +pwsx3100 power 0.055 0.5 -> 0.235 Inexact Rounded +pwsx3101 power 0.56 0.5 -> 0.748 Inexact Rounded +pwsx3102 power 0.056 0.5 -> 0.237 Inexact Rounded +pwsx3103 power 0.57 0.5 -> 0.755 Inexact Rounded +pwsx3104 power 0.057 0.5 -> 0.239 Inexact Rounded +pwsx3105 power 0.58 0.5 -> 0.762 Inexact Rounded +pwsx3106 power 0.058 0.5 -> 0.241 Inexact Rounded +pwsx3107 power 0.59 0.5 -> 0.768 Inexact Rounded +pwsx3108 power 0.059 0.5 -> 0.243 Inexact Rounded +pwsx3109 power 0.61 0.5 -> 0.781 Inexact Rounded +pwsx3110 power 0.061 0.5 -> 0.247 Inexact Rounded +pwsx3111 power 0.62 0.5 -> 0.787 Inexact Rounded +pwsx3112 power 0.062 0.5 -> 0.249 Inexact Rounded +pwsx3113 power 0.63 0.5 -> 0.794 Inexact Rounded +pwsx3114 power 0.063 0.5 -> 0.251 Inexact Rounded +pwsx3115 power 0.64 0.5 -> 0.800 Inexact Rounded +pwsx3116 power 0.064 0.5 -> 0.253 Inexact Rounded +pwsx3117 power 0.65 0.5 -> 0.806 Inexact Rounded +pwsx3118 power 0.065 0.5 -> 0.255 Inexact Rounded +pwsx3119 power 0.66 0.5 -> 0.812 Inexact Rounded +pwsx3120 power 0.066 0.5 -> 0.257 Inexact Rounded +pwsx3121 power 0.67 0.5 -> 0.819 Inexact Rounded +pwsx3122 power 0.067 0.5 -> 0.259 Inexact Rounded +pwsx3123 power 0.68 0.5 -> 0.825 Inexact Rounded +pwsx3124 power 0.068 0.5 -> 0.261 Inexact Rounded +pwsx3125 power 0.69 0.5 -> 0.831 Inexact Rounded +pwsx3126 power 0.069 0.5 -> 0.263 Inexact Rounded +pwsx3127 power 0.71 0.5 -> 0.843 Inexact Rounded +pwsx3128 power 0.071 0.5 -> 0.266 Inexact Rounded +pwsx3129 power 0.72 0.5 -> 0.849 Inexact Rounded +pwsx3130 power 0.072 0.5 -> 0.268 Inexact Rounded +pwsx3131 power 0.73 0.5 -> 0.854 Inexact Rounded +pwsx3132 power 0.073 0.5 -> 0.270 Inexact Rounded +pwsx3133 power 0.74 0.5 -> 0.860 Inexact Rounded +pwsx3134 power 0.074 0.5 -> 0.272 Inexact Rounded +pwsx3135 power 0.75 0.5 -> 0.866 Inexact Rounded +pwsx3136 power 0.075 0.5 -> 0.274 Inexact Rounded +pwsx3137 power 0.76 0.5 -> 0.872 Inexact Rounded +pwsx3138 power 0.076 0.5 -> 0.276 Inexact Rounded +pwsx3139 power 0.77 0.5 -> 0.877 Inexact Rounded +pwsx3140 power 0.077 0.5 -> 0.277 Inexact Rounded +pwsx3141 power 0.78 0.5 -> 0.883 Inexact Rounded +pwsx3142 power 0.078 0.5 -> 0.279 Inexact Rounded +pwsx3143 power 0.79 0.5 -> 0.889 Inexact Rounded +pwsx3144 power 0.079 0.5 -> 0.281 Inexact Rounded +pwsx3145 power 0.81 0.5 -> 0.900 Inexact Rounded +pwsx3146 power 0.081 0.5 -> 0.285 Inexact Rounded +pwsx3147 power 0.82 0.5 -> 0.906 Inexact Rounded +pwsx3148 power 0.082 0.5 -> 0.286 Inexact Rounded +pwsx3149 power 0.83 0.5 -> 0.911 Inexact Rounded +pwsx3150 power 0.083 0.5 -> 0.288 Inexact Rounded +pwsx3151 power 0.84 0.5 -> 0.917 Inexact Rounded +pwsx3152 power 0.084 0.5 -> 0.290 Inexact Rounded +pwsx3153 power 0.85 0.5 -> 0.922 Inexact Rounded +pwsx3154 power 0.085 0.5 -> 0.292 Inexact Rounded +pwsx3155 power 0.86 0.5 -> 0.927 Inexact Rounded +pwsx3156 power 0.086 0.5 -> 0.293 Inexact Rounded +pwsx3157 power 0.87 0.5 -> 0.933 Inexact Rounded +pwsx3158 power 0.087 0.5 -> 0.295 Inexact Rounded +pwsx3159 power 0.88 0.5 -> 0.938 Inexact Rounded +pwsx3160 power 0.088 0.5 -> 0.297 Inexact Rounded +pwsx3161 power 0.89 0.5 -> 0.943 Inexact Rounded +pwsx3162 power 0.089 0.5 -> 0.298 Inexact Rounded +pwsx3163 power 0.91 0.5 -> 0.954 Inexact Rounded +pwsx3164 power 0.091 0.5 -> 0.302 Inexact Rounded +pwsx3165 power 0.92 0.5 -> 0.959 Inexact Rounded +pwsx3166 power 0.092 0.5 -> 0.303 Inexact Rounded +pwsx3167 power 0.93 0.5 -> 0.964 Inexact Rounded +pwsx3168 power 0.093 0.5 -> 0.305 Inexact Rounded +pwsx3169 power 0.94 0.5 -> 0.970 Inexact Rounded +pwsx3170 power 0.094 0.5 -> 0.307 Inexact Rounded +pwsx3171 power 0.95 0.5 -> 0.975 Inexact Rounded +pwsx3172 power 0.095 0.5 -> 0.308 Inexact Rounded +pwsx3173 power 0.96 0.5 -> 0.980 Inexact Rounded +pwsx3174 power 0.096 0.5 -> 0.310 Inexact Rounded +pwsx3175 power 0.97 0.5 -> 0.985 Inexact Rounded +pwsx3176 power 0.097 0.5 -> 0.311 Inexact Rounded +pwsx3177 power 0.98 0.5 -> 0.990 Inexact Rounded +pwsx3178 power 0.098 0.5 -> 0.313 Inexact Rounded +pwsx3179 power 0.99 0.5 -> 0.995 Inexact Rounded +pwsx3180 power 0.099 0.5 -> 0.315 Inexact Rounded +pwsx3181 power 0.101 0.5 -> 0.318 Inexact Rounded +pwsx3182 power 0.0101 0.5 -> 0.100 Inexact Rounded +pwsx3183 power 0.102 0.5 -> 0.319 Inexact Rounded +pwsx3184 power 0.0102 0.5 -> 0.101 Inexact Rounded +pwsx3185 power 0.103 0.5 -> 0.321 Inexact Rounded +pwsx3186 power 0.0103 0.5 -> 0.101 Inexact Rounded +pwsx3187 power 0.104 0.5 -> 0.322 Inexact Rounded +pwsx3188 power 0.0104 0.5 -> 0.102 Inexact Rounded +pwsx3189 power 0.105 0.5 -> 0.324 Inexact Rounded +pwsx3190 power 0.0105 0.5 -> 0.102 Inexact Rounded +pwsx3191 power 0.106 0.5 -> 0.326 Inexact Rounded +pwsx3192 power 0.0106 0.5 -> 0.103 Inexact Rounded +pwsx3193 power 0.107 0.5 -> 0.327 Inexact Rounded +pwsx3194 power 0.0107 0.5 -> 0.103 Inexact Rounded +pwsx3195 power 0.108 0.5 -> 0.329 Inexact Rounded +pwsx3196 power 0.0108 0.5 -> 0.104 Inexact Rounded +pwsx3197 power 0.109 0.5 -> 0.330 Inexact Rounded +pwsx3198 power 0.0109 0.5 -> 0.104 Inexact Rounded +pwsx3199 power 0.111 0.5 -> 0.333 Inexact Rounded +pwsx3200 power 0.0111 0.5 -> 0.105 Inexact Rounded +pwsx3201 power 0.112 0.5 -> 0.335 Inexact Rounded +pwsx3202 power 0.0112 0.5 -> 0.106 Inexact Rounded +pwsx3203 power 0.113 0.5 -> 0.336 Inexact Rounded +pwsx3204 power 0.0113 0.5 -> 0.106 Inexact Rounded +pwsx3205 power 0.114 0.5 -> 0.338 Inexact Rounded +pwsx3206 power 0.0114 0.5 -> 0.107 Inexact Rounded +pwsx3207 power 0.115 0.5 -> 0.339 Inexact Rounded +pwsx3208 power 0.0115 0.5 -> 0.107 Inexact Rounded +pwsx3209 power 0.116 0.5 -> 0.341 Inexact Rounded +pwsx3210 power 0.0116 0.5 -> 0.108 Inexact Rounded +pwsx3211 power 0.117 0.5 -> 0.342 Inexact Rounded +pwsx3212 power 0.0117 0.5 -> 0.108 Inexact Rounded +pwsx3213 power 0.118 0.5 -> 0.344 Inexact Rounded +pwsx3214 power 0.0118 0.5 -> 0.109 Inexact Rounded +pwsx3215 power 0.119 0.5 -> 0.345 Inexact Rounded +pwsx3216 power 0.0119 0.5 -> 0.109 Inexact Rounded +pwsx3217 power 0.121 0.5 -> 0.348 Inexact Rounded +pwsx3218 power 0.0121 0.5 -> 0.110 Inexact Rounded +pwsx3219 power 0.122 0.5 -> 0.349 Inexact Rounded +pwsx3220 power 0.0122 0.5 -> 0.110 Inexact Rounded +pwsx3221 power 0.123 0.5 -> 0.351 Inexact Rounded +pwsx3222 power 0.0123 0.5 -> 0.111 Inexact Rounded +pwsx3223 power 0.124 0.5 -> 0.352 Inexact Rounded +pwsx3224 power 0.0124 0.5 -> 0.111 Inexact Rounded +pwsx3225 power 0.125 0.5 -> 0.354 Inexact Rounded +pwsx3226 power 0.0125 0.5 -> 0.112 Inexact Rounded +pwsx3227 power 0.126 0.5 -> 0.355 Inexact Rounded +pwsx3228 power 0.0126 0.5 -> 0.112 Inexact Rounded +pwsx3229 power 0.127 0.5 -> 0.356 Inexact Rounded +pwsx3230 power 0.0127 0.5 -> 0.113 Inexact Rounded +pwsx3231 power 0.128 0.5 -> 0.358 Inexact Rounded +pwsx3232 power 0.0128 0.5 -> 0.113 Inexact Rounded +pwsx3233 power 0.129 0.5 -> 0.359 Inexact Rounded +pwsx3234 power 0.0129 0.5 -> 0.114 Inexact Rounded +pwsx3235 power 0.131 0.5 -> 0.362 Inexact Rounded +pwsx3236 power 0.0131 0.5 -> 0.114 Inexact Rounded +pwsx3237 power 0.132 0.5 -> 0.363 Inexact Rounded +pwsx3238 power 0.0132 0.5 -> 0.115 Inexact Rounded +pwsx3239 power 0.133 0.5 -> 0.365 Inexact Rounded +pwsx3240 power 0.0133 0.5 -> 0.115 Inexact Rounded +pwsx3241 power 0.134 0.5 -> 0.366 Inexact Rounded +pwsx3242 power 0.0134 0.5 -> 0.116 Inexact Rounded +pwsx3243 power 0.135 0.5 -> 0.367 Inexact Rounded +pwsx3244 power 0.0135 0.5 -> 0.116 Inexact Rounded +pwsx3245 power 0.136 0.5 -> 0.369 Inexact Rounded +pwsx3246 power 0.0136 0.5 -> 0.117 Inexact Rounded +pwsx3247 power 0.137 0.5 -> 0.370 Inexact Rounded +pwsx3248 power 0.0137 0.5 -> 0.117 Inexact Rounded +pwsx3249 power 0.138 0.5 -> 0.371 Inexact Rounded +pwsx3250 power 0.0138 0.5 -> 0.117 Inexact Rounded +pwsx3251 power 0.139 0.5 -> 0.373 Inexact Rounded +pwsx3252 power 0.0139 0.5 -> 0.118 Inexact Rounded +pwsx3253 power 0.141 0.5 -> 0.375 Inexact Rounded +pwsx3254 power 0.0141 0.5 -> 0.119 Inexact Rounded +pwsx3255 power 0.142 0.5 -> 0.377 Inexact Rounded +pwsx3256 power 0.0142 0.5 -> 0.119 Inexact Rounded +pwsx3257 power 0.143 0.5 -> 0.378 Inexact Rounded +pwsx3258 power 0.0143 0.5 -> 0.120 Inexact Rounded +pwsx3259 power 0.144 0.5 -> 0.379 Inexact Rounded +pwsx3260 power 0.0144 0.5 -> 0.120 Inexact Rounded +pwsx3261 power 0.145 0.5 -> 0.381 Inexact Rounded +pwsx3262 power 0.0145 0.5 -> 0.120 Inexact Rounded +pwsx3263 power 0.146 0.5 -> 0.382 Inexact Rounded +pwsx3264 power 0.0146 0.5 -> 0.121 Inexact Rounded +pwsx3265 power 0.147 0.5 -> 0.383 Inexact Rounded +pwsx3266 power 0.0147 0.5 -> 0.121 Inexact Rounded +pwsx3267 power 0.148 0.5 -> 0.385 Inexact Rounded +pwsx3268 power 0.0148 0.5 -> 0.122 Inexact Rounded +pwsx3269 power 0.149 0.5 -> 0.386 Inexact Rounded +pwsx3270 power 0.0149 0.5 -> 0.122 Inexact Rounded +pwsx3271 power 0.151 0.5 -> 0.389 Inexact Rounded +pwsx3272 power 0.0151 0.5 -> 0.123 Inexact Rounded +pwsx3273 power 0.152 0.5 -> 0.390 Inexact Rounded +pwsx3274 power 0.0152 0.5 -> 0.123 Inexact Rounded +pwsx3275 power 0.153 0.5 -> 0.391 Inexact Rounded +pwsx3276 power 0.0153 0.5 -> 0.124 Inexact Rounded +pwsx3277 power 0.154 0.5 -> 0.392 Inexact Rounded +pwsx3278 power 0.0154 0.5 -> 0.124 Inexact Rounded +pwsx3279 power 0.155 0.5 -> 0.394 Inexact Rounded +pwsx3280 power 0.0155 0.5 -> 0.124 Inexact Rounded +pwsx3281 power 0.156 0.5 -> 0.395 Inexact Rounded +pwsx3282 power 0.0156 0.5 -> 0.125 Inexact Rounded +pwsx3283 power 0.157 0.5 -> 0.396 Inexact Rounded +pwsx3284 power 0.0157 0.5 -> 0.125 Inexact Rounded +pwsx3285 power 0.158 0.5 -> 0.397 Inexact Rounded +pwsx3286 power 0.0158 0.5 -> 0.126 Inexact Rounded +pwsx3287 power 0.159 0.5 -> 0.399 Inexact Rounded +pwsx3288 power 0.0159 0.5 -> 0.126 Inexact Rounded +pwsx3289 power 0.161 0.5 -> 0.401 Inexact Rounded +pwsx3290 power 0.0161 0.5 -> 0.127 Inexact Rounded +pwsx3291 power 0.162 0.5 -> 0.402 Inexact Rounded +pwsx3292 power 0.0162 0.5 -> 0.127 Inexact Rounded +pwsx3293 power 0.163 0.5 -> 0.404 Inexact Rounded +pwsx3294 power 0.0163 0.5 -> 0.128 Inexact Rounded +pwsx3295 power 0.164 0.5 -> 0.405 Inexact Rounded +pwsx3296 power 0.0164 0.5 -> 0.128 Inexact Rounded +pwsx3297 power 0.165 0.5 -> 0.406 Inexact Rounded +pwsx3298 power 0.0165 0.5 -> 0.128 Inexact Rounded +pwsx3299 power 0.166 0.5 -> 0.407 Inexact Rounded +pwsx3300 power 0.0166 0.5 -> 0.129 Inexact Rounded +pwsx3301 power 0.167 0.5 -> 0.409 Inexact Rounded +pwsx3302 power 0.0167 0.5 -> 0.129 Inexact Rounded +pwsx3303 power 0.168 0.5 -> 0.410 Inexact Rounded +pwsx3304 power 0.0168 0.5 -> 0.130 Inexact Rounded +pwsx3305 power 0.169 0.5 -> 0.411 Inexact Rounded +pwsx3306 power 0.0169 0.5 -> 0.130 Inexact Rounded +pwsx3307 power 0.171 0.5 -> 0.414 Inexact Rounded +pwsx3308 power 0.0171 0.5 -> 0.131 Inexact Rounded +pwsx3309 power 0.172 0.5 -> 0.415 Inexact Rounded +pwsx3310 power 0.0172 0.5 -> 0.131 Inexact Rounded +pwsx3311 power 0.173 0.5 -> 0.416 Inexact Rounded +pwsx3312 power 0.0173 0.5 -> 0.132 Inexact Rounded +pwsx3313 power 0.174 0.5 -> 0.417 Inexact Rounded +pwsx3314 power 0.0174 0.5 -> 0.132 Inexact Rounded +pwsx3315 power 0.175 0.5 -> 0.418 Inexact Rounded +pwsx3316 power 0.0175 0.5 -> 0.132 Inexact Rounded +pwsx3317 power 0.176 0.5 -> 0.420 Inexact Rounded +pwsx3318 power 0.0176 0.5 -> 0.133 Inexact Rounded +pwsx3319 power 0.177 0.5 -> 0.421 Inexact Rounded +pwsx3320 power 0.0177 0.5 -> 0.133 Inexact Rounded +pwsx3321 power 0.178 0.5 -> 0.422 Inexact Rounded +pwsx3322 power 0.0178 0.5 -> 0.133 Inexact Rounded +pwsx3323 power 0.179 0.5 -> 0.423 Inexact Rounded +pwsx3324 power 0.0179 0.5 -> 0.134 Inexact Rounded +pwsx3325 power 0.181 0.5 -> 0.425 Inexact Rounded +pwsx3326 power 0.0181 0.5 -> 0.135 Inexact Rounded +pwsx3327 power 0.182 0.5 -> 0.427 Inexact Rounded +pwsx3328 power 0.0182 0.5 -> 0.135 Inexact Rounded +pwsx3329 power 0.183 0.5 -> 0.428 Inexact Rounded +pwsx3330 power 0.0183 0.5 -> 0.135 Inexact Rounded +pwsx3331 power 0.184 0.5 -> 0.429 Inexact Rounded +pwsx3332 power 0.0184 0.5 -> 0.136 Inexact Rounded +pwsx3333 power 0.185 0.5 -> 0.430 Inexact Rounded +pwsx3334 power 0.0185 0.5 -> 0.136 Inexact Rounded +pwsx3335 power 0.186 0.5 -> 0.431 Inexact Rounded +pwsx3336 power 0.0186 0.5 -> 0.136 Inexact Rounded +pwsx3337 power 0.187 0.5 -> 0.432 Inexact Rounded +pwsx3338 power 0.0187 0.5 -> 0.137 Inexact Rounded +pwsx3339 power 0.188 0.5 -> 0.434 Inexact Rounded +pwsx3340 power 0.0188 0.5 -> 0.137 Inexact Rounded +pwsx3341 power 0.189 0.5 -> 0.435 Inexact Rounded +pwsx3342 power 0.0189 0.5 -> 0.137 Inexact Rounded +pwsx3343 power 0.191 0.5 -> 0.437 Inexact Rounded +pwsx3344 power 0.0191 0.5 -> 0.138 Inexact Rounded +pwsx3345 power 0.192 0.5 -> 0.438 Inexact Rounded +pwsx3346 power 0.0192 0.5 -> 0.139 Inexact Rounded +pwsx3347 power 0.193 0.5 -> 0.439 Inexact Rounded +pwsx3348 power 0.0193 0.5 -> 0.139 Inexact Rounded +pwsx3349 power 0.194 0.5 -> 0.440 Inexact Rounded +pwsx3350 power 0.0194 0.5 -> 0.139 Inexact Rounded +pwsx3351 power 0.195 0.5 -> 0.442 Inexact Rounded +pwsx3352 power 0.0195 0.5 -> 0.140 Inexact Rounded +pwsx3353 power 0.196 0.5 -> 0.443 Inexact Rounded +pwsx3354 power 0.0196 0.5 -> 0.140 Inexact Rounded +pwsx3355 power 0.197 0.5 -> 0.444 Inexact Rounded +pwsx3356 power 0.0197 0.5 -> 0.140 Inexact Rounded +pwsx3357 power 0.198 0.5 -> 0.445 Inexact Rounded +pwsx3358 power 0.0198 0.5 -> 0.141 Inexact Rounded +pwsx3359 power 0.199 0.5 -> 0.446 Inexact Rounded +pwsx3360 power 0.0199 0.5 -> 0.141 Inexact Rounded +pwsx3361 power 0.201 0.5 -> 0.448 Inexact Rounded +pwsx3362 power 0.0201 0.5 -> 0.142 Inexact Rounded +pwsx3363 power 0.202 0.5 -> 0.449 Inexact Rounded +pwsx3364 power 0.0202 0.5 -> 0.142 Inexact Rounded +pwsx3365 power 0.203 0.5 -> 0.451 Inexact Rounded +pwsx3366 power 0.0203 0.5 -> 0.142 Inexact Rounded +pwsx3367 power 0.204 0.5 -> 0.452 Inexact Rounded +pwsx3368 power 0.0204 0.5 -> 0.143 Inexact Rounded +pwsx3369 power 0.205 0.5 -> 0.453 Inexact Rounded +pwsx3370 power 0.0205 0.5 -> 0.143 Inexact Rounded +pwsx3371 power 0.206 0.5 -> 0.454 Inexact Rounded +pwsx3372 power 0.0206 0.5 -> 0.144 Inexact Rounded +pwsx3373 power 0.207 0.5 -> 0.455 Inexact Rounded +pwsx3374 power 0.0207 0.5 -> 0.144 Inexact Rounded +pwsx3375 power 0.208 0.5 -> 0.456 Inexact Rounded +pwsx3376 power 0.0208 0.5 -> 0.144 Inexact Rounded +pwsx3377 power 0.209 0.5 -> 0.457 Inexact Rounded +pwsx3378 power 0.0209 0.5 -> 0.145 Inexact Rounded +pwsx3379 power 0.211 0.5 -> 0.459 Inexact Rounded +pwsx3380 power 0.0211 0.5 -> 0.145 Inexact Rounded +pwsx3381 power 0.212 0.5 -> 0.460 Inexact Rounded +pwsx3382 power 0.0212 0.5 -> 0.146 Inexact Rounded +pwsx3383 power 0.213 0.5 -> 0.462 Inexact Rounded +pwsx3384 power 0.0213 0.5 -> 0.146 Inexact Rounded +pwsx3385 power 0.214 0.5 -> 0.463 Inexact Rounded +pwsx3386 power 0.0214 0.5 -> 0.146 Inexact Rounded +pwsx3387 power 0.215 0.5 -> 0.464 Inexact Rounded +pwsx3388 power 0.0215 0.5 -> 0.147 Inexact Rounded +pwsx3389 power 0.216 0.5 -> 0.465 Inexact Rounded +pwsx3390 power 0.0216 0.5 -> 0.147 Inexact Rounded +pwsx3391 power 0.217 0.5 -> 0.466 Inexact Rounded +pwsx3392 power 0.0217 0.5 -> 0.147 Inexact Rounded +pwsx3393 power 0.218 0.5 -> 0.467 Inexact Rounded +pwsx3394 power 0.0218 0.5 -> 0.148 Inexact Rounded +pwsx3395 power 0.219 0.5 -> 0.468 Inexact Rounded +pwsx3396 power 0.0219 0.5 -> 0.148 Inexact Rounded +pwsx3397 power 0.221 0.5 -> 0.470 Inexact Rounded +pwsx3398 power 0.0221 0.5 -> 0.149 Inexact Rounded +pwsx3399 power 0.222 0.5 -> 0.471 Inexact Rounded +pwsx3400 power 0.0222 0.5 -> 0.149 Inexact Rounded +pwsx3401 power 0.223 0.5 -> 0.472 Inexact Rounded +pwsx3402 power 0.0223 0.5 -> 0.149 Inexact Rounded +pwsx3403 power 0.224 0.5 -> 0.473 Inexact Rounded +pwsx3404 power 0.0224 0.5 -> 0.150 Inexact Rounded +pwsx3405 power 0.225 0.5 -> 0.474 Inexact Rounded +pwsx3406 power 0.0225 0.5 -> 0.150 Inexact Rounded +pwsx3407 power 0.226 0.5 -> 0.475 Inexact Rounded +pwsx3408 power 0.0226 0.5 -> 0.150 Inexact Rounded +pwsx3409 power 0.227 0.5 -> 0.476 Inexact Rounded +pwsx3410 power 0.0227 0.5 -> 0.151 Inexact Rounded +pwsx3411 power 0.228 0.5 -> 0.477 Inexact Rounded +pwsx3412 power 0.0228 0.5 -> 0.151 Inexact Rounded +pwsx3413 power 0.229 0.5 -> 0.479 Inexact Rounded +pwsx3414 power 0.0229 0.5 -> 0.151 Inexact Rounded +pwsx3415 power 0.231 0.5 -> 0.481 Inexact Rounded +pwsx3416 power 0.0231 0.5 -> 0.152 Inexact Rounded +pwsx3417 power 0.232 0.5 -> 0.482 Inexact Rounded +pwsx3418 power 0.0232 0.5 -> 0.152 Inexact Rounded +pwsx3419 power 0.233 0.5 -> 0.483 Inexact Rounded +pwsx3420 power 0.0233 0.5 -> 0.153 Inexact Rounded +pwsx3421 power 0.234 0.5 -> 0.484 Inexact Rounded +pwsx3422 power 0.0234 0.5 -> 0.153 Inexact Rounded +pwsx3423 power 0.235 0.5 -> 0.485 Inexact Rounded +pwsx3424 power 0.0235 0.5 -> 0.153 Inexact Rounded +pwsx3425 power 0.236 0.5 -> 0.486 Inexact Rounded +pwsx3426 power 0.0236 0.5 -> 0.154 Inexact Rounded +pwsx3427 power 0.237 0.5 -> 0.487 Inexact Rounded +pwsx3428 power 0.0237 0.5 -> 0.154 Inexact Rounded +pwsx3429 power 0.238 0.5 -> 0.488 Inexact Rounded +pwsx3430 power 0.0238 0.5 -> 0.154 Inexact Rounded +pwsx3431 power 0.239 0.5 -> 0.489 Inexact Rounded +pwsx3432 power 0.0239 0.5 -> 0.155 Inexact Rounded +pwsx3433 power 0.241 0.5 -> 0.491 Inexact Rounded +pwsx3434 power 0.0241 0.5 -> 0.155 Inexact Rounded +pwsx3435 power 0.242 0.5 -> 0.492 Inexact Rounded +pwsx3436 power 0.0242 0.5 -> 0.156 Inexact Rounded +pwsx3437 power 0.243 0.5 -> 0.493 Inexact Rounded +pwsx3438 power 0.0243 0.5 -> 0.156 Inexact Rounded +pwsx3439 power 0.244 0.5 -> 0.494 Inexact Rounded +pwsx3440 power 0.0244 0.5 -> 0.156 Inexact Rounded +pwsx3441 power 0.245 0.5 -> 0.495 Inexact Rounded +pwsx3442 power 0.0245 0.5 -> 0.157 Inexact Rounded +pwsx3443 power 0.246 0.5 -> 0.496 Inexact Rounded +pwsx3444 power 0.0246 0.5 -> 0.157 Inexact Rounded +pwsx3445 power 0.247 0.5 -> 0.497 Inexact Rounded +pwsx3446 power 0.0247 0.5 -> 0.157 Inexact Rounded +pwsx3447 power 0.248 0.5 -> 0.498 Inexact Rounded +pwsx3448 power 0.0248 0.5 -> 0.157 Inexact Rounded +pwsx3449 power 0.249 0.5 -> 0.499 Inexact Rounded +pwsx3450 power 0.0249 0.5 -> 0.158 Inexact Rounded +pwsx3451 power 0.251 0.5 -> 0.501 Inexact Rounded +pwsx3452 power 0.0251 0.5 -> 0.158 Inexact Rounded +pwsx3453 power 0.252 0.5 -> 0.502 Inexact Rounded +pwsx3454 power 0.0252 0.5 -> 0.159 Inexact Rounded +pwsx3455 power 0.253 0.5 -> 0.503 Inexact Rounded +pwsx3456 power 0.0253 0.5 -> 0.159 Inexact Rounded +pwsx3457 power 0.254 0.5 -> 0.504 Inexact Rounded +pwsx3458 power 0.0254 0.5 -> 0.159 Inexact Rounded +pwsx3459 power 0.255 0.5 -> 0.505 Inexact Rounded +pwsx3460 power 0.0255 0.5 -> 0.160 Inexact Rounded +pwsx3461 power 0.256 0.5 -> 0.506 Inexact Rounded +pwsx3462 power 0.0256 0.5 -> 0.160 Inexact Rounded +pwsx3463 power 0.257 0.5 -> 0.507 Inexact Rounded +pwsx3464 power 0.0257 0.5 -> 0.160 Inexact Rounded +pwsx3465 power 0.258 0.5 -> 0.508 Inexact Rounded +pwsx3466 power 0.0258 0.5 -> 0.161 Inexact Rounded +pwsx3467 power 0.259 0.5 -> 0.509 Inexact Rounded +pwsx3468 power 0.0259 0.5 -> 0.161 Inexact Rounded +pwsx3469 power 0.261 0.5 -> 0.511 Inexact Rounded +pwsx3470 power 0.0261 0.5 -> 0.162 Inexact Rounded +pwsx3471 power 0.262 0.5 -> 0.512 Inexact Rounded +pwsx3472 power 0.0262 0.5 -> 0.162 Inexact Rounded +pwsx3473 power 0.263 0.5 -> 0.513 Inexact Rounded +pwsx3474 power 0.0263 0.5 -> 0.162 Inexact Rounded +pwsx3475 power 0.264 0.5 -> 0.514 Inexact Rounded +pwsx3476 power 0.0264 0.5 -> 0.162 Inexact Rounded +pwsx3477 power 0.265 0.5 -> 0.515 Inexact Rounded +pwsx3478 power 0.0265 0.5 -> 0.163 Inexact Rounded +pwsx3479 power 0.266 0.5 -> 0.516 Inexact Rounded +pwsx3480 power 0.0266 0.5 -> 0.163 Inexact Rounded +pwsx3481 power 0.267 0.5 -> 0.517 Inexact Rounded +pwsx3482 power 0.0267 0.5 -> 0.163 Inexact Rounded +pwsx3483 power 0.268 0.5 -> 0.518 Inexact Rounded +pwsx3484 power 0.0268 0.5 -> 0.164 Inexact Rounded +pwsx3485 power 0.269 0.5 -> 0.519 Inexact Rounded +pwsx3486 power 0.0269 0.5 -> 0.164 Inexact Rounded +pwsx3487 power 0.271 0.5 -> 0.521 Inexact Rounded +pwsx3488 power 0.0271 0.5 -> 0.165 Inexact Rounded +pwsx3489 power 0.272 0.5 -> 0.522 Inexact Rounded +pwsx3490 power 0.0272 0.5 -> 0.165 Inexact Rounded +pwsx3491 power 0.273 0.5 -> 0.522 Inexact Rounded +pwsx3492 power 0.0273 0.5 -> 0.165 Inexact Rounded +pwsx3493 power 0.274 0.5 -> 0.523 Inexact Rounded +pwsx3494 power 0.0274 0.5 -> 0.166 Inexact Rounded +pwsx3495 power 0.275 0.5 -> 0.524 Inexact Rounded +pwsx3496 power 0.0275 0.5 -> 0.166 Inexact Rounded +pwsx3497 power 0.276 0.5 -> 0.525 Inexact Rounded +pwsx3498 power 0.0276 0.5 -> 0.166 Inexact Rounded +pwsx3499 power 0.277 0.5 -> 0.526 Inexact Rounded +pwsx3500 power 0.0277 0.5 -> 0.166 Inexact Rounded +pwsx3501 power 0.278 0.5 -> 0.527 Inexact Rounded +pwsx3502 power 0.0278 0.5 -> 0.167 Inexact Rounded +pwsx3503 power 0.279 0.5 -> 0.528 Inexact Rounded +pwsx3504 power 0.0279 0.5 -> 0.167 Inexact Rounded +pwsx3505 power 0.281 0.5 -> 0.530 Inexact Rounded +pwsx3506 power 0.0281 0.5 -> 0.168 Inexact Rounded +pwsx3507 power 0.282 0.5 -> 0.531 Inexact Rounded +pwsx3508 power 0.0282 0.5 -> 0.168 Inexact Rounded +pwsx3509 power 0.283 0.5 -> 0.532 Inexact Rounded +pwsx3510 power 0.0283 0.5 -> 0.168 Inexact Rounded +pwsx3511 power 0.284 0.5 -> 0.533 Inexact Rounded +pwsx3512 power 0.0284 0.5 -> 0.169 Inexact Rounded +pwsx3513 power 0.285 0.5 -> 0.534 Inexact Rounded +pwsx3514 power 0.0285 0.5 -> 0.169 Inexact Rounded +pwsx3515 power 0.286 0.5 -> 0.535 Inexact Rounded +pwsx3516 power 0.0286 0.5 -> 0.169 Inexact Rounded +pwsx3517 power 0.287 0.5 -> 0.536 Inexact Rounded +pwsx3518 power 0.0287 0.5 -> 0.169 Inexact Rounded +pwsx3519 power 0.288 0.5 -> 0.537 Inexact Rounded +pwsx3520 power 0.0288 0.5 -> 0.170 Inexact Rounded +pwsx3521 power 0.289 0.5 -> 0.538 Inexact Rounded +pwsx3522 power 0.0289 0.5 -> 0.170 Inexact Rounded +pwsx3523 power 0.291 0.5 -> 0.539 Inexact Rounded +pwsx3524 power 0.0291 0.5 -> 0.171 Inexact Rounded +pwsx3525 power 0.292 0.5 -> 0.540 Inexact Rounded +pwsx3526 power 0.0292 0.5 -> 0.171 Inexact Rounded +pwsx3527 power 0.293 0.5 -> 0.541 Inexact Rounded +pwsx3528 power 0.0293 0.5 -> 0.171 Inexact Rounded +pwsx3529 power 0.294 0.5 -> 0.542 Inexact Rounded +pwsx3530 power 0.0294 0.5 -> 0.171 Inexact Rounded +pwsx3531 power 0.295 0.5 -> 0.543 Inexact Rounded +pwsx3532 power 0.0295 0.5 -> 0.172 Inexact Rounded +pwsx3533 power 0.296 0.5 -> 0.544 Inexact Rounded +pwsx3534 power 0.0296 0.5 -> 0.172 Inexact Rounded +pwsx3535 power 0.297 0.5 -> 0.545 Inexact Rounded +pwsx3536 power 0.0297 0.5 -> 0.172 Inexact Rounded +pwsx3537 power 0.298 0.5 -> 0.546 Inexact Rounded +pwsx3538 power 0.0298 0.5 -> 0.173 Inexact Rounded +pwsx3539 power 0.299 0.5 -> 0.547 Inexact Rounded +pwsx3540 power 0.0299 0.5 -> 0.173 Inexact Rounded +pwsx3541 power 0.301 0.5 -> 0.549 Inexact Rounded +pwsx3542 power 0.0301 0.5 -> 0.173 Inexact Rounded +pwsx3543 power 0.302 0.5 -> 0.550 Inexact Rounded +pwsx3544 power 0.0302 0.5 -> 0.174 Inexact Rounded +pwsx3545 power 0.303 0.5 -> 0.550 Inexact Rounded +pwsx3546 power 0.0303 0.5 -> 0.174 Inexact Rounded +pwsx3547 power 0.304 0.5 -> 0.551 Inexact Rounded +pwsx3548 power 0.0304 0.5 -> 0.174 Inexact Rounded +pwsx3549 power 0.305 0.5 -> 0.552 Inexact Rounded +pwsx3550 power 0.0305 0.5 -> 0.175 Inexact Rounded +pwsx3551 power 0.306 0.5 -> 0.553 Inexact Rounded +pwsx3552 power 0.0306 0.5 -> 0.175 Inexact Rounded +pwsx3553 power 0.307 0.5 -> 0.554 Inexact Rounded +pwsx3554 power 0.0307 0.5 -> 0.175 Inexact Rounded +pwsx3555 power 0.308 0.5 -> 0.555 Inexact Rounded +pwsx3556 power 0.0308 0.5 -> 0.175 Inexact Rounded +pwsx3557 power 0.309 0.5 -> 0.556 Inexact Rounded +pwsx3558 power 0.0309 0.5 -> 0.176 Inexact Rounded +pwsx3559 power 0.311 0.5 -> 0.558 Inexact Rounded +pwsx3560 power 0.0311 0.5 -> 0.176 Inexact Rounded +pwsx3561 power 0.312 0.5 -> 0.559 Inexact Rounded +pwsx3562 power 0.0312 0.5 -> 0.177 Inexact Rounded +pwsx3563 power 0.313 0.5 -> 0.559 Inexact Rounded +pwsx3564 power 0.0313 0.5 -> 0.177 Inexact Rounded +pwsx3565 power 0.314 0.5 -> 0.560 Inexact Rounded +pwsx3566 power 0.0314 0.5 -> 0.177 Inexact Rounded +pwsx3567 power 0.315 0.5 -> 0.561 Inexact Rounded +pwsx3568 power 0.0315 0.5 -> 0.177 Inexact Rounded +pwsx3569 power 0.316 0.5 -> 0.562 Inexact Rounded +pwsx3570 power 0.0316 0.5 -> 0.178 Inexact Rounded +pwsx3571 power 0.317 0.5 -> 0.563 Inexact Rounded +pwsx3572 power 0.0317 0.5 -> 0.178 Inexact Rounded +pwsx3573 power 0.318 0.5 -> 0.564 Inexact Rounded +pwsx3574 power 0.0318 0.5 -> 0.178 Inexact Rounded +pwsx3575 power 0.319 0.5 -> 0.565 Inexact Rounded +pwsx3576 power 0.0319 0.5 -> 0.179 Inexact Rounded +pwsx3577 power 0.321 0.5 -> 0.567 Inexact Rounded +pwsx3578 power 0.0321 0.5 -> 0.179 Inexact Rounded +pwsx3579 power 0.322 0.5 -> 0.567 Inexact Rounded +pwsx3580 power 0.0322 0.5 -> 0.179 Inexact Rounded +pwsx3581 power 0.323 0.5 -> 0.568 Inexact Rounded +pwsx3582 power 0.0323 0.5 -> 0.180 Inexact Rounded +pwsx3583 power 0.324 0.5 -> 0.569 Inexact Rounded +pwsx3584 power 0.0324 0.5 -> 0.180 Inexact Rounded +pwsx3585 power 0.325 0.5 -> 0.570 Inexact Rounded +pwsx3586 power 0.0325 0.5 -> 0.180 Inexact Rounded +pwsx3587 power 0.326 0.5 -> 0.571 Inexact Rounded +pwsx3588 power 0.0326 0.5 -> 0.181 Inexact Rounded +pwsx3589 power 0.327 0.5 -> 0.572 Inexact Rounded +pwsx3590 power 0.0327 0.5 -> 0.181 Inexact Rounded +pwsx3591 power 0.328 0.5 -> 0.573 Inexact Rounded +pwsx3592 power 0.0328 0.5 -> 0.181 Inexact Rounded +pwsx3593 power 0.329 0.5 -> 0.574 Inexact Rounded +pwsx3594 power 0.0329 0.5 -> 0.181 Inexact Rounded +pwsx3595 power 0.331 0.5 -> 0.575 Inexact Rounded +pwsx3596 power 0.0331 0.5 -> 0.182 Inexact Rounded +pwsx3597 power 0.332 0.5 -> 0.576 Inexact Rounded +pwsx3598 power 0.0332 0.5 -> 0.182 Inexact Rounded +pwsx3599 power 0.333 0.5 -> 0.577 Inexact Rounded +pwsx3600 power 0.0333 0.5 -> 0.182 Inexact Rounded +pwsx3601 power 0.334 0.5 -> 0.578 Inexact Rounded +pwsx3602 power 0.0334 0.5 -> 0.183 Inexact Rounded +pwsx3603 power 0.335 0.5 -> 0.579 Inexact Rounded +pwsx3604 power 0.0335 0.5 -> 0.183 Inexact Rounded +pwsx3605 power 0.336 0.5 -> 0.580 Inexact Rounded +pwsx3606 power 0.0336 0.5 -> 0.183 Inexact Rounded +pwsx3607 power 0.337 0.5 -> 0.581 Inexact Rounded +pwsx3608 power 0.0337 0.5 -> 0.184 Inexact Rounded +pwsx3609 power 0.338 0.5 -> 0.581 Inexact Rounded +pwsx3610 power 0.0338 0.5 -> 0.184 Inexact Rounded +pwsx3611 power 0.339 0.5 -> 0.582 Inexact Rounded +pwsx3612 power 0.0339 0.5 -> 0.184 Inexact Rounded +pwsx3613 power 0.341 0.5 -> 0.584 Inexact Rounded +pwsx3614 power 0.0341 0.5 -> 0.185 Inexact Rounded +pwsx3615 power 0.342 0.5 -> 0.585 Inexact Rounded +pwsx3616 power 0.0342 0.5 -> 0.185 Inexact Rounded +pwsx3617 power 0.343 0.5 -> 0.586 Inexact Rounded +pwsx3618 power 0.0343 0.5 -> 0.185 Inexact Rounded +pwsx3619 power 0.344 0.5 -> 0.587 Inexact Rounded +pwsx3620 power 0.0344 0.5 -> 0.185 Inexact Rounded +pwsx3621 power 0.345 0.5 -> 0.587 Inexact Rounded +pwsx3622 power 0.0345 0.5 -> 0.186 Inexact Rounded +pwsx3623 power 0.346 0.5 -> 0.588 Inexact Rounded +pwsx3624 power 0.0346 0.5 -> 0.186 Inexact Rounded +pwsx3625 power 0.347 0.5 -> 0.589 Inexact Rounded +pwsx3626 power 0.0347 0.5 -> 0.186 Inexact Rounded +pwsx3627 power 0.348 0.5 -> 0.590 Inexact Rounded +pwsx3628 power 0.0348 0.5 -> 0.187 Inexact Rounded +pwsx3629 power 0.349 0.5 -> 0.591 Inexact Rounded +pwsx3630 power 0.0349 0.5 -> 0.187 Inexact Rounded +pwsx3631 power 0.351 0.5 -> 0.592 Inexact Rounded +pwsx3632 power 0.0351 0.5 -> 0.187 Inexact Rounded +pwsx3633 power 0.352 0.5 -> 0.593 Inexact Rounded +pwsx3634 power 0.0352 0.5 -> 0.188 Inexact Rounded +pwsx3635 power 0.353 0.5 -> 0.594 Inexact Rounded +pwsx3636 power 0.0353 0.5 -> 0.188 Inexact Rounded +pwsx3637 power 0.354 0.5 -> 0.595 Inexact Rounded +pwsx3638 power 0.0354 0.5 -> 0.188 Inexact Rounded +pwsx3639 power 0.355 0.5 -> 0.596 Inexact Rounded +pwsx3640 power 0.0355 0.5 -> 0.188 Inexact Rounded +pwsx3641 power 0.356 0.5 -> 0.597 Inexact Rounded +pwsx3642 power 0.0356 0.5 -> 0.189 Inexact Rounded +pwsx3643 power 0.357 0.5 -> 0.597 Inexact Rounded +pwsx3644 power 0.0357 0.5 -> 0.189 Inexact Rounded +pwsx3645 power 0.358 0.5 -> 0.598 Inexact Rounded +pwsx3646 power 0.0358 0.5 -> 0.189 Inexact Rounded +pwsx3647 power 0.359 0.5 -> 0.599 Inexact Rounded +pwsx3648 power 0.0359 0.5 -> 0.189 Inexact Rounded +pwsx3649 power 0.361 0.5 -> 0.601 Inexact Rounded +pwsx3650 power 0.0361 0.5 -> 0.190 Inexact Rounded +pwsx3651 power 0.362 0.5 -> 0.602 Inexact Rounded +pwsx3652 power 0.0362 0.5 -> 0.190 Inexact Rounded +pwsx3653 power 0.363 0.5 -> 0.602 Inexact Rounded +pwsx3654 power 0.0363 0.5 -> 0.191 Inexact Rounded +pwsx3655 power 0.364 0.5 -> 0.603 Inexact Rounded +pwsx3656 power 0.0364 0.5 -> 0.191 Inexact Rounded +pwsx3657 power 0.365 0.5 -> 0.604 Inexact Rounded +pwsx3658 power 0.0365 0.5 -> 0.191 Inexact Rounded +pwsx3659 power 0.366 0.5 -> 0.605 Inexact Rounded +pwsx3660 power 0.0366 0.5 -> 0.191 Inexact Rounded +pwsx3661 power 0.367 0.5 -> 0.606 Inexact Rounded +pwsx3662 power 0.0367 0.5 -> 0.192 Inexact Rounded +pwsx3663 power 0.368 0.5 -> 0.607 Inexact Rounded +pwsx3664 power 0.0368 0.5 -> 0.192 Inexact Rounded +pwsx3665 power 0.369 0.5 -> 0.607 Inexact Rounded +pwsx3666 power 0.0369 0.5 -> 0.192 Inexact Rounded +pwsx3667 power 0.371 0.5 -> 0.609 Inexact Rounded +pwsx3668 power 0.0371 0.5 -> 0.193 Inexact Rounded +pwsx3669 power 0.372 0.5 -> 0.610 Inexact Rounded +pwsx3670 power 0.0372 0.5 -> 0.193 Inexact Rounded +pwsx3671 power 0.373 0.5 -> 0.611 Inexact Rounded +pwsx3672 power 0.0373 0.5 -> 0.193 Inexact Rounded +pwsx3673 power 0.374 0.5 -> 0.612 Inexact Rounded +pwsx3674 power 0.0374 0.5 -> 0.193 Inexact Rounded +pwsx3675 power 0.375 0.5 -> 0.612 Inexact Rounded +pwsx3676 power 0.0375 0.5 -> 0.194 Inexact Rounded +pwsx3677 power 0.376 0.5 -> 0.613 Inexact Rounded +pwsx3678 power 0.0376 0.5 -> 0.194 Inexact Rounded +pwsx3679 power 0.377 0.5 -> 0.614 Inexact Rounded +pwsx3680 power 0.0377 0.5 -> 0.194 Inexact Rounded +pwsx3681 power 0.378 0.5 -> 0.615 Inexact Rounded +pwsx3682 power 0.0378 0.5 -> 0.194 Inexact Rounded +pwsx3683 power 0.379 0.5 -> 0.616 Inexact Rounded +pwsx3684 power 0.0379 0.5 -> 0.195 Inexact Rounded +pwsx3685 power 0.381 0.5 -> 0.617 Inexact Rounded +pwsx3686 power 0.0381 0.5 -> 0.195 Inexact Rounded +pwsx3687 power 0.382 0.5 -> 0.618 Inexact Rounded +pwsx3688 power 0.0382 0.5 -> 0.195 Inexact Rounded +pwsx3689 power 0.383 0.5 -> 0.619 Inexact Rounded +pwsx3690 power 0.0383 0.5 -> 0.196 Inexact Rounded +pwsx3691 power 0.384 0.5 -> 0.620 Inexact Rounded +pwsx3692 power 0.0384 0.5 -> 0.196 Inexact Rounded +pwsx3693 power 0.385 0.5 -> 0.620 Inexact Rounded +pwsx3694 power 0.0385 0.5 -> 0.196 Inexact Rounded +pwsx3695 power 0.386 0.5 -> 0.621 Inexact Rounded +pwsx3696 power 0.0386 0.5 -> 0.196 Inexact Rounded +pwsx3697 power 0.387 0.5 -> 0.622 Inexact Rounded +pwsx3698 power 0.0387 0.5 -> 0.197 Inexact Rounded +pwsx3699 power 0.388 0.5 -> 0.623 Inexact Rounded +pwsx3700 power 0.0388 0.5 -> 0.197 Inexact Rounded +pwsx3701 power 0.389 0.5 -> 0.624 Inexact Rounded +pwsx3702 power 0.0389 0.5 -> 0.197 Inexact Rounded +pwsx3703 power 0.391 0.5 -> 0.625 Inexact Rounded +pwsx3704 power 0.0391 0.5 -> 0.198 Inexact Rounded +pwsx3705 power 0.392 0.5 -> 0.626 Inexact Rounded +pwsx3706 power 0.0392 0.5 -> 0.198 Inexact Rounded +pwsx3707 power 0.393 0.5 -> 0.627 Inexact Rounded +pwsx3708 power 0.0393 0.5 -> 0.198 Inexact Rounded +pwsx3709 power 0.394 0.5 -> 0.628 Inexact Rounded +pwsx3710 power 0.0394 0.5 -> 0.198 Inexact Rounded +pwsx3711 power 0.395 0.5 -> 0.628 Inexact Rounded +pwsx3712 power 0.0395 0.5 -> 0.199 Inexact Rounded +pwsx3713 power 0.396 0.5 -> 0.629 Inexact Rounded +pwsx3714 power 0.0396 0.5 -> 0.199 Inexact Rounded +pwsx3715 power 0.397 0.5 -> 0.630 Inexact Rounded +pwsx3716 power 0.0397 0.5 -> 0.199 Inexact Rounded +pwsx3717 power 0.398 0.5 -> 0.631 Inexact Rounded +pwsx3718 power 0.0398 0.5 -> 0.199 Inexact Rounded +pwsx3719 power 0.399 0.5 -> 0.632 Inexact Rounded +pwsx3720 power 0.0399 0.5 -> 0.200 Inexact Rounded +pwsx3721 power 0.401 0.5 -> 0.633 Inexact Rounded +pwsx3722 power 0.0401 0.5 -> 0.200 Inexact Rounded +pwsx3723 power 0.402 0.5 -> 0.634 Inexact Rounded +pwsx3724 power 0.0402 0.5 -> 0.200 Inexact Rounded +pwsx3725 power 0.403 0.5 -> 0.635 Inexact Rounded +pwsx3726 power 0.0403 0.5 -> 0.201 Inexact Rounded +pwsx3727 power 0.404 0.5 -> 0.636 Inexact Rounded +pwsx3728 power 0.0404 0.5 -> 0.201 Inexact Rounded +pwsx3729 power 0.405 0.5 -> 0.636 Inexact Rounded +pwsx3730 power 0.0405 0.5 -> 0.201 Inexact Rounded +pwsx3731 power 0.406 0.5 -> 0.637 Inexact Rounded +pwsx3732 power 0.0406 0.5 -> 0.201 Inexact Rounded +pwsx3733 power 0.407 0.5 -> 0.638 Inexact Rounded +pwsx3734 power 0.0407 0.5 -> 0.202 Inexact Rounded +pwsx3735 power 0.408 0.5 -> 0.639 Inexact Rounded +pwsx3736 power 0.0408 0.5 -> 0.202 Inexact Rounded +pwsx3737 power 0.409 0.5 -> 0.640 Inexact Rounded +pwsx3738 power 0.0409 0.5 -> 0.202 Inexact Rounded +pwsx3739 power 0.411 0.5 -> 0.641 Inexact Rounded +pwsx3740 power 0.0411 0.5 -> 0.203 Inexact Rounded +pwsx3741 power 0.412 0.5 -> 0.642 Inexact Rounded +pwsx3742 power 0.0412 0.5 -> 0.203 Inexact Rounded +pwsx3743 power 0.413 0.5 -> 0.643 Inexact Rounded +pwsx3744 power 0.0413 0.5 -> 0.203 Inexact Rounded +pwsx3745 power 0.414 0.5 -> 0.643 Inexact Rounded +pwsx3746 power 0.0414 0.5 -> 0.203 Inexact Rounded +pwsx3747 power 0.415 0.5 -> 0.644 Inexact Rounded +pwsx3748 power 0.0415 0.5 -> 0.204 Inexact Rounded +pwsx3749 power 0.416 0.5 -> 0.645 Inexact Rounded +pwsx3750 power 0.0416 0.5 -> 0.204 Inexact Rounded +pwsx3751 power 0.417 0.5 -> 0.646 Inexact Rounded +pwsx3752 power 0.0417 0.5 -> 0.204 Inexact Rounded +pwsx3753 power 0.418 0.5 -> 0.647 Inexact Rounded +pwsx3754 power 0.0418 0.5 -> 0.204 Inexact Rounded +pwsx3755 power 0.419 0.5 -> 0.647 Inexact Rounded +pwsx3756 power 0.0419 0.5 -> 0.205 Inexact Rounded +pwsx3757 power 0.421 0.5 -> 0.649 Inexact Rounded +pwsx3758 power 0.0421 0.5 -> 0.205 Inexact Rounded +pwsx3759 power 0.422 0.5 -> 0.650 Inexact Rounded +pwsx3760 power 0.0422 0.5 -> 0.205 Inexact Rounded +pwsx3761 power 0.423 0.5 -> 0.650 Inexact Rounded +pwsx3762 power 0.0423 0.5 -> 0.206 Inexact Rounded +pwsx3763 power 0.424 0.5 -> 0.651 Inexact Rounded +pwsx3764 power 0.0424 0.5 -> 0.206 Inexact Rounded +pwsx3765 power 0.425 0.5 -> 0.652 Inexact Rounded +pwsx3766 power 0.0425 0.5 -> 0.206 Inexact Rounded +pwsx3767 power 0.426 0.5 -> 0.653 Inexact Rounded +pwsx3768 power 0.0426 0.5 -> 0.206 Inexact Rounded +pwsx3769 power 0.427 0.5 -> 0.653 Inexact Rounded +pwsx3770 power 0.0427 0.5 -> 0.207 Inexact Rounded +pwsx3771 power 0.428 0.5 -> 0.654 Inexact Rounded +pwsx3772 power 0.0428 0.5 -> 0.207 Inexact Rounded +pwsx3773 power 0.429 0.5 -> 0.655 Inexact Rounded +pwsx3774 power 0.0429 0.5 -> 0.207 Inexact Rounded +pwsx3775 power 0.431 0.5 -> 0.657 Inexact Rounded +pwsx3776 power 0.0431 0.5 -> 0.208 Inexact Rounded +pwsx3777 power 0.432 0.5 -> 0.657 Inexact Rounded +pwsx3778 power 0.0432 0.5 -> 0.208 Inexact Rounded +pwsx3779 power 0.433 0.5 -> 0.658 Inexact Rounded +pwsx3780 power 0.0433 0.5 -> 0.208 Inexact Rounded +pwsx3781 power 0.434 0.5 -> 0.659 Inexact Rounded +pwsx3782 power 0.0434 0.5 -> 0.208 Inexact Rounded +pwsx3783 power 0.435 0.5 -> 0.660 Inexact Rounded +pwsx3784 power 0.0435 0.5 -> 0.209 Inexact Rounded +pwsx3785 power 0.436 0.5 -> 0.660 Inexact Rounded +pwsx3786 power 0.0436 0.5 -> 0.209 Inexact Rounded +pwsx3787 power 0.437 0.5 -> 0.661 Inexact Rounded +pwsx3788 power 0.0437 0.5 -> 0.209 Inexact Rounded +pwsx3789 power 0.438 0.5 -> 0.662 Inexact Rounded +pwsx3790 power 0.0438 0.5 -> 0.209 Inexact Rounded +pwsx3791 power 0.439 0.5 -> 0.663 Inexact Rounded +pwsx3792 power 0.0439 0.5 -> 0.210 Inexact Rounded +pwsx3793 power 0.441 0.5 -> 0.664 Inexact Rounded +pwsx3794 power 0.0441 0.5 -> 0.210 Inexact Rounded +pwsx3795 power 0.442 0.5 -> 0.665 Inexact Rounded +pwsx3796 power 0.0442 0.5 -> 0.210 Inexact Rounded +pwsx3797 power 0.443 0.5 -> 0.666 Inexact Rounded +pwsx3798 power 0.0443 0.5 -> 0.210 Inexact Rounded +pwsx3799 power 0.444 0.5 -> 0.666 Inexact Rounded +pwsx3800 power 0.0444 0.5 -> 0.211 Inexact Rounded +pwsx3801 power 0.445 0.5 -> 0.667 Inexact Rounded +pwsx3802 power 0.0445 0.5 -> 0.211 Inexact Rounded +pwsx3803 power 0.446 0.5 -> 0.668 Inexact Rounded +pwsx3804 power 0.0446 0.5 -> 0.211 Inexact Rounded +pwsx3805 power 0.447 0.5 -> 0.669 Inexact Rounded +pwsx3806 power 0.0447 0.5 -> 0.211 Inexact Rounded +pwsx3807 power 0.448 0.5 -> 0.669 Inexact Rounded +pwsx3808 power 0.0448 0.5 -> 0.212 Inexact Rounded +pwsx3809 power 0.449 0.5 -> 0.670 Inexact Rounded +pwsx3810 power 0.0449 0.5 -> 0.212 Inexact Rounded +pwsx3811 power 0.451 0.5 -> 0.672 Inexact Rounded +pwsx3812 power 0.0451 0.5 -> 0.212 Inexact Rounded +pwsx3813 power 0.452 0.5 -> 0.672 Inexact Rounded +pwsx3814 power 0.0452 0.5 -> 0.213 Inexact Rounded +pwsx3815 power 0.453 0.5 -> 0.673 Inexact Rounded +pwsx3816 power 0.0453 0.5 -> 0.213 Inexact Rounded +pwsx3817 power 0.454 0.5 -> 0.674 Inexact Rounded +pwsx3818 power 0.0454 0.5 -> 0.213 Inexact Rounded +pwsx3819 power 0.455 0.5 -> 0.675 Inexact Rounded +pwsx3820 power 0.0455 0.5 -> 0.213 Inexact Rounded +pwsx3821 power 0.456 0.5 -> 0.675 Inexact Rounded +pwsx3822 power 0.0456 0.5 -> 0.214 Inexact Rounded +pwsx3823 power 0.457 0.5 -> 0.676 Inexact Rounded +pwsx3824 power 0.0457 0.5 -> 0.214 Inexact Rounded +pwsx3825 power 0.458 0.5 -> 0.677 Inexact Rounded +pwsx3826 power 0.0458 0.5 -> 0.214 Inexact Rounded +pwsx3827 power 0.459 0.5 -> 0.677 Inexact Rounded +pwsx3828 power 0.0459 0.5 -> 0.214 Inexact Rounded +pwsx3829 power 0.461 0.5 -> 0.679 Inexact Rounded +pwsx3830 power 0.0461 0.5 -> 0.215 Inexact Rounded +pwsx3831 power 0.462 0.5 -> 0.680 Inexact Rounded +pwsx3832 power 0.0462 0.5 -> 0.215 Inexact Rounded +pwsx3833 power 0.463 0.5 -> 0.680 Inexact Rounded +pwsx3834 power 0.0463 0.5 -> 0.215 Inexact Rounded +pwsx3835 power 0.464 0.5 -> 0.681 Inexact Rounded +pwsx3836 power 0.0464 0.5 -> 0.215 Inexact Rounded +pwsx3837 power 0.465 0.5 -> 0.682 Inexact Rounded +pwsx3838 power 0.0465 0.5 -> 0.216 Inexact Rounded +pwsx3839 power 0.466 0.5 -> 0.683 Inexact Rounded +pwsx3840 power 0.0466 0.5 -> 0.216 Inexact Rounded +pwsx3841 power 0.467 0.5 -> 0.683 Inexact Rounded +pwsx3842 power 0.0467 0.5 -> 0.216 Inexact Rounded +pwsx3843 power 0.468 0.5 -> 0.684 Inexact Rounded +pwsx3844 power 0.0468 0.5 -> 0.216 Inexact Rounded +pwsx3845 power 0.469 0.5 -> 0.685 Inexact Rounded +pwsx3846 power 0.0469 0.5 -> 0.217 Inexact Rounded +pwsx3847 power 0.471 0.5 -> 0.686 Inexact Rounded +pwsx3848 power 0.0471 0.5 -> 0.217 Inexact Rounded +pwsx3849 power 0.472 0.5 -> 0.687 Inexact Rounded +pwsx3850 power 0.0472 0.5 -> 0.217 Inexact Rounded +pwsx3851 power 0.473 0.5 -> 0.688 Inexact Rounded +pwsx3852 power 0.0473 0.5 -> 0.217 Inexact Rounded +pwsx3853 power 0.474 0.5 -> 0.688 Inexact Rounded +pwsx3854 power 0.0474 0.5 -> 0.218 Inexact Rounded +pwsx3855 power 0.475 0.5 -> 0.689 Inexact Rounded +pwsx3856 power 0.0475 0.5 -> 0.218 Inexact Rounded +pwsx3857 power 0.476 0.5 -> 0.690 Inexact Rounded +pwsx3858 power 0.0476 0.5 -> 0.218 Inexact Rounded +pwsx3859 power 0.477 0.5 -> 0.691 Inexact Rounded +pwsx3860 power 0.0477 0.5 -> 0.218 Inexact Rounded +pwsx3861 power 0.478 0.5 -> 0.691 Inexact Rounded +pwsx3862 power 0.0478 0.5 -> 0.219 Inexact Rounded +pwsx3863 power 0.479 0.5 -> 0.692 Inexact Rounded +pwsx3864 power 0.0479 0.5 -> 0.219 Inexact Rounded +pwsx3865 power 0.481 0.5 -> 0.694 Inexact Rounded +pwsx3866 power 0.0481 0.5 -> 0.219 Inexact Rounded +pwsx3867 power 0.482 0.5 -> 0.694 Inexact Rounded +pwsx3868 power 0.0482 0.5 -> 0.220 Inexact Rounded +pwsx3869 power 0.483 0.5 -> 0.695 Inexact Rounded +pwsx3870 power 0.0483 0.5 -> 0.220 Inexact Rounded +pwsx3871 power 0.484 0.5 -> 0.696 Inexact Rounded +pwsx3872 power 0.0484 0.5 -> 0.220 Inexact Rounded +pwsx3873 power 0.485 0.5 -> 0.696 Inexact Rounded +pwsx3874 power 0.0485 0.5 -> 0.220 Inexact Rounded +pwsx3875 power 0.486 0.5 -> 0.697 Inexact Rounded +pwsx3876 power 0.0486 0.5 -> 0.220 Inexact Rounded +pwsx3877 power 0.487 0.5 -> 0.698 Inexact Rounded +pwsx3878 power 0.0487 0.5 -> 0.221 Inexact Rounded +pwsx3879 power 0.488 0.5 -> 0.699 Inexact Rounded +pwsx3880 power 0.0488 0.5 -> 0.221 Inexact Rounded +pwsx3881 power 0.489 0.5 -> 0.699 Inexact Rounded +pwsx3882 power 0.0489 0.5 -> 0.221 Inexact Rounded +pwsx3883 power 0.491 0.5 -> 0.701 Inexact Rounded +pwsx3884 power 0.0491 0.5 -> 0.222 Inexact Rounded +pwsx3885 power 0.492 0.5 -> 0.701 Inexact Rounded +pwsx3886 power 0.0492 0.5 -> 0.222 Inexact Rounded +pwsx3887 power 0.493 0.5 -> 0.702 Inexact Rounded +pwsx3888 power 0.0493 0.5 -> 0.222 Inexact Rounded +pwsx3889 power 0.494 0.5 -> 0.703 Inexact Rounded +pwsx3890 power 0.0494 0.5 -> 0.222 Inexact Rounded +pwsx3891 power 0.495 0.5 -> 0.704 Inexact Rounded +pwsx3892 power 0.0495 0.5 -> 0.222 Inexact Rounded +pwsx3893 power 0.496 0.5 -> 0.704 Inexact Rounded +pwsx3894 power 0.0496 0.5 -> 0.223 Inexact Rounded +pwsx3895 power 0.497 0.5 -> 0.705 Inexact Rounded +pwsx3896 power 0.0497 0.5 -> 0.223 Inexact Rounded +pwsx3897 power 0.498 0.5 -> 0.706 Inexact Rounded +pwsx3898 power 0.0498 0.5 -> 0.223 Inexact Rounded +pwsx3899 power 0.499 0.5 -> 0.706 Inexact Rounded +pwsx3900 power 0.0499 0.5 -> 0.223 Inexact Rounded +pwsx3901 power 0.501 0.5 -> 0.708 Inexact Rounded +pwsx3902 power 0.0501 0.5 -> 0.224 Inexact Rounded +pwsx3903 power 0.502 0.5 -> 0.709 Inexact Rounded +pwsx3904 power 0.0502 0.5 -> 0.224 Inexact Rounded +pwsx3905 power 0.503 0.5 -> 0.709 Inexact Rounded +pwsx3906 power 0.0503 0.5 -> 0.224 Inexact Rounded +pwsx3907 power 0.504 0.5 -> 0.710 Inexact Rounded +pwsx3908 power 0.0504 0.5 -> 0.224 Inexact Rounded +pwsx3909 power 0.505 0.5 -> 0.711 Inexact Rounded +pwsx3910 power 0.0505 0.5 -> 0.225 Inexact Rounded +pwsx3911 power 0.506 0.5 -> 0.711 Inexact Rounded +pwsx3912 power 0.0506 0.5 -> 0.225 Inexact Rounded +pwsx3913 power 0.507 0.5 -> 0.712 Inexact Rounded +pwsx3914 power 0.0507 0.5 -> 0.225 Inexact Rounded +pwsx3915 power 0.508 0.5 -> 0.713 Inexact Rounded +pwsx3916 power 0.0508 0.5 -> 0.225 Inexact Rounded +pwsx3917 power 0.509 0.5 -> 0.713 Inexact Rounded +pwsx3918 power 0.0509 0.5 -> 0.226 Inexact Rounded +pwsx3919 power 0.511 0.5 -> 0.715 Inexact Rounded +pwsx3920 power 0.0511 0.5 -> 0.226 Inexact Rounded +pwsx3921 power 0.512 0.5 -> 0.716 Inexact Rounded +pwsx3922 power 0.0512 0.5 -> 0.226 Inexact Rounded +pwsx3923 power 0.513 0.5 -> 0.716 Inexact Rounded +pwsx3924 power 0.0513 0.5 -> 0.226 Inexact Rounded +pwsx3925 power 0.514 0.5 -> 0.717 Inexact Rounded +pwsx3926 power 0.0514 0.5 -> 0.227 Inexact Rounded +pwsx3927 power 0.515 0.5 -> 0.718 Inexact Rounded +pwsx3928 power 0.0515 0.5 -> 0.227 Inexact Rounded +pwsx3929 power 0.516 0.5 -> 0.718 Inexact Rounded +pwsx3930 power 0.0516 0.5 -> 0.227 Inexact Rounded +pwsx3931 power 0.517 0.5 -> 0.719 Inexact Rounded +pwsx3932 power 0.0517 0.5 -> 0.227 Inexact Rounded +pwsx3933 power 0.518 0.5 -> 0.720 Inexact Rounded +pwsx3934 power 0.0518 0.5 -> 0.228 Inexact Rounded +pwsx3935 power 0.519 0.5 -> 0.720 Inexact Rounded +pwsx3936 power 0.0519 0.5 -> 0.228 Inexact Rounded +pwsx3937 power 0.521 0.5 -> 0.722 Inexact Rounded +pwsx3938 power 0.0521 0.5 -> 0.228 Inexact Rounded +pwsx3939 power 0.522 0.5 -> 0.722 Inexact Rounded +pwsx3940 power 0.0522 0.5 -> 0.228 Inexact Rounded +pwsx3941 power 0.523 0.5 -> 0.723 Inexact Rounded +pwsx3942 power 0.0523 0.5 -> 0.229 Inexact Rounded +pwsx3943 power 0.524 0.5 -> 0.724 Inexact Rounded +pwsx3944 power 0.0524 0.5 -> 0.229 Inexact Rounded +pwsx3945 power 0.525 0.5 -> 0.725 Inexact Rounded +pwsx3946 power 0.0525 0.5 -> 0.229 Inexact Rounded +pwsx3947 power 0.526 0.5 -> 0.725 Inexact Rounded +pwsx3948 power 0.0526 0.5 -> 0.229 Inexact Rounded +pwsx3949 power 0.527 0.5 -> 0.726 Inexact Rounded +pwsx3950 power 0.0527 0.5 -> 0.230 Inexact Rounded +pwsx3951 power 0.528 0.5 -> 0.727 Inexact Rounded +pwsx3952 power 0.0528 0.5 -> 0.230 Inexact Rounded +pwsx3953 power 0.529 0.5 -> 0.727 Inexact Rounded +pwsx3954 power 0.0529 0.5 -> 0.230 Inexact Rounded +pwsx3955 power 0.531 0.5 -> 0.729 Inexact Rounded +pwsx3956 power 0.0531 0.5 -> 0.230 Inexact Rounded +pwsx3957 power 0.532 0.5 -> 0.729 Inexact Rounded +pwsx3958 power 0.0532 0.5 -> 0.231 Inexact Rounded +pwsx3959 power 0.533 0.5 -> 0.730 Inexact Rounded +pwsx3960 power 0.0533 0.5 -> 0.231 Inexact Rounded +pwsx3961 power 0.534 0.5 -> 0.731 Inexact Rounded +pwsx3962 power 0.0534 0.5 -> 0.231 Inexact Rounded +pwsx3963 power 0.535 0.5 -> 0.731 Inexact Rounded +pwsx3964 power 0.0535 0.5 -> 0.231 Inexact Rounded +pwsx3965 power 0.536 0.5 -> 0.732 Inexact Rounded +pwsx3966 power 0.0536 0.5 -> 0.232 Inexact Rounded +pwsx3967 power 0.537 0.5 -> 0.733 Inexact Rounded +pwsx3968 power 0.0537 0.5 -> 0.232 Inexact Rounded +pwsx3969 power 0.538 0.5 -> 0.733 Inexact Rounded +pwsx3970 power 0.0538 0.5 -> 0.232 Inexact Rounded +pwsx3971 power 0.539 0.5 -> 0.734 Inexact Rounded +pwsx3972 power 0.0539 0.5 -> 0.232 Inexact Rounded +pwsx3973 power 0.541 0.5 -> 0.736 Inexact Rounded +pwsx3974 power 0.0541 0.5 -> 0.233 Inexact Rounded +pwsx3975 power 0.542 0.5 -> 0.736 Inexact Rounded +pwsx3976 power 0.0542 0.5 -> 0.233 Inexact Rounded +pwsx3977 power 0.543 0.5 -> 0.737 Inexact Rounded +pwsx3978 power 0.0543 0.5 -> 0.233 Inexact Rounded +pwsx3979 power 0.544 0.5 -> 0.738 Inexact Rounded +pwsx3980 power 0.0544 0.5 -> 0.233 Inexact Rounded +pwsx3981 power 0.545 0.5 -> 0.738 Inexact Rounded +pwsx3982 power 0.0545 0.5 -> 0.233 Inexact Rounded +pwsx3983 power 0.546 0.5 -> 0.739 Inexact Rounded +pwsx3984 power 0.0546 0.5 -> 0.234 Inexact Rounded +pwsx3985 power 0.547 0.5 -> 0.740 Inexact Rounded +pwsx3986 power 0.0547 0.5 -> 0.234 Inexact Rounded +pwsx3987 power 0.548 0.5 -> 0.740 Inexact Rounded +pwsx3988 power 0.0548 0.5 -> 0.234 Inexact Rounded +pwsx3989 power 0.549 0.5 -> 0.741 Inexact Rounded +pwsx3990 power 0.0549 0.5 -> 0.234 Inexact Rounded +pwsx3991 power 0.551 0.5 -> 0.742 Inexact Rounded +pwsx3992 power 0.0551 0.5 -> 0.235 Inexact Rounded +pwsx3993 power 0.552 0.5 -> 0.743 Inexact Rounded +pwsx3994 power 0.0552 0.5 -> 0.235 Inexact Rounded +pwsx3995 power 0.553 0.5 -> 0.744 Inexact Rounded +pwsx3996 power 0.0553 0.5 -> 0.235 Inexact Rounded +pwsx3997 power 0.554 0.5 -> 0.744 Inexact Rounded +pwsx3998 power 0.0554 0.5 -> 0.235 Inexact Rounded +pwsx3999 power 0.555 0.5 -> 0.745 Inexact Rounded +pwsx4000 power 0.0555 0.5 -> 0.236 Inexact Rounded +pwsx4001 power 0.556 0.5 -> 0.746 Inexact Rounded +pwsx4002 power 0.0556 0.5 -> 0.236 Inexact Rounded +pwsx4003 power 0.557 0.5 -> 0.746 Inexact Rounded +pwsx4004 power 0.0557 0.5 -> 0.236 Inexact Rounded +pwsx4005 power 0.558 0.5 -> 0.747 Inexact Rounded +pwsx4006 power 0.0558 0.5 -> 0.236 Inexact Rounded +pwsx4007 power 0.559 0.5 -> 0.748 Inexact Rounded +pwsx4008 power 0.0559 0.5 -> 0.236 Inexact Rounded +pwsx4009 power 0.561 0.5 -> 0.749 Inexact Rounded +pwsx4010 power 0.0561 0.5 -> 0.237 Inexact Rounded +pwsx4011 power 0.562 0.5 -> 0.750 Inexact Rounded +pwsx4012 power 0.0562 0.5 -> 0.237 Inexact Rounded +pwsx4013 power 0.563 0.5 -> 0.750 Inexact Rounded +pwsx4014 power 0.0563 0.5 -> 0.237 Inexact Rounded +pwsx4015 power 0.564 0.5 -> 0.751 Inexact Rounded +pwsx4016 power 0.0564 0.5 -> 0.237 Inexact Rounded +pwsx4017 power 0.565 0.5 -> 0.752 Inexact Rounded +pwsx4018 power 0.0565 0.5 -> 0.238 Inexact Rounded +pwsx4019 power 0.566 0.5 -> 0.752 Inexact Rounded +pwsx4020 power 0.0566 0.5 -> 0.238 Inexact Rounded +pwsx4021 power 0.567 0.5 -> 0.753 Inexact Rounded +pwsx4022 power 0.0567 0.5 -> 0.238 Inexact Rounded +pwsx4023 power 0.568 0.5 -> 0.754 Inexact Rounded +pwsx4024 power 0.0568 0.5 -> 0.238 Inexact Rounded +pwsx4025 power 0.569 0.5 -> 0.754 Inexact Rounded +pwsx4026 power 0.0569 0.5 -> 0.239 Inexact Rounded +pwsx4027 power 0.571 0.5 -> 0.756 Inexact Rounded +pwsx4028 power 0.0571 0.5 -> 0.239 Inexact Rounded +pwsx4029 power 0.572 0.5 -> 0.756 Inexact Rounded +pwsx4030 power 0.0572 0.5 -> 0.239 Inexact Rounded +pwsx4031 power 0.573 0.5 -> 0.757 Inexact Rounded +pwsx4032 power 0.0573 0.5 -> 0.239 Inexact Rounded +pwsx4033 power 0.574 0.5 -> 0.758 Inexact Rounded +pwsx4034 power 0.0574 0.5 -> 0.240 Inexact Rounded +pwsx4035 power 0.575 0.5 -> 0.758 Inexact Rounded +pwsx4036 power 0.0575 0.5 -> 0.240 Inexact Rounded +pwsx4037 power 0.576 0.5 -> 0.759 Inexact Rounded +pwsx4038 power 0.0576 0.5 -> 0.240 Inexact Rounded +pwsx4039 power 0.577 0.5 -> 0.760 Inexact Rounded +pwsx4040 power 0.0577 0.5 -> 0.240 Inexact Rounded +pwsx4041 power 0.578 0.5 -> 0.760 Inexact Rounded +pwsx4042 power 0.0578 0.5 -> 0.240 Inexact Rounded +pwsx4043 power 0.579 0.5 -> 0.761 Inexact Rounded +pwsx4044 power 0.0579 0.5 -> 0.241 Inexact Rounded +pwsx4045 power 0.581 0.5 -> 0.762 Inexact Rounded +pwsx4046 power 0.0581 0.5 -> 0.241 Inexact Rounded +pwsx4047 power 0.582 0.5 -> 0.763 Inexact Rounded +pwsx4048 power 0.0582 0.5 -> 0.241 Inexact Rounded +pwsx4049 power 0.583 0.5 -> 0.764 Inexact Rounded +pwsx4050 power 0.0583 0.5 -> 0.241 Inexact Rounded +pwsx4051 power 0.584 0.5 -> 0.764 Inexact Rounded +pwsx4052 power 0.0584 0.5 -> 0.242 Inexact Rounded +pwsx4053 power 0.585 0.5 -> 0.765 Inexact Rounded +pwsx4054 power 0.0585 0.5 -> 0.242 Inexact Rounded +pwsx4055 power 0.586 0.5 -> 0.766 Inexact Rounded +pwsx4056 power 0.0586 0.5 -> 0.242 Inexact Rounded +pwsx4057 power 0.587 0.5 -> 0.766 Inexact Rounded +pwsx4058 power 0.0587 0.5 -> 0.242 Inexact Rounded +pwsx4059 power 0.588 0.5 -> 0.767 Inexact Rounded +pwsx4060 power 0.0588 0.5 -> 0.242 Inexact Rounded +pwsx4061 power 0.589 0.5 -> 0.767 Inexact Rounded +pwsx4062 power 0.0589 0.5 -> 0.243 Inexact Rounded +pwsx4063 power 0.591 0.5 -> 0.769 Inexact Rounded +pwsx4064 power 0.0591 0.5 -> 0.243 Inexact Rounded +pwsx4065 power 0.592 0.5 -> 0.769 Inexact Rounded +pwsx4066 power 0.0592 0.5 -> 0.243 Inexact Rounded +pwsx4067 power 0.593 0.5 -> 0.770 Inexact Rounded +pwsx4068 power 0.0593 0.5 -> 0.244 Inexact Rounded +pwsx4069 power 0.594 0.5 -> 0.771 Inexact Rounded +pwsx4070 power 0.0594 0.5 -> 0.244 Inexact Rounded +pwsx4071 power 0.595 0.5 -> 0.771 Inexact Rounded +pwsx4072 power 0.0595 0.5 -> 0.244 Inexact Rounded +pwsx4073 power 0.596 0.5 -> 0.772 Inexact Rounded +pwsx4074 power 0.0596 0.5 -> 0.244 Inexact Rounded +pwsx4075 power 0.597 0.5 -> 0.773 Inexact Rounded +pwsx4076 power 0.0597 0.5 -> 0.244 Inexact Rounded +pwsx4077 power 0.598 0.5 -> 0.773 Inexact Rounded +pwsx4078 power 0.0598 0.5 -> 0.245 Inexact Rounded +pwsx4079 power 0.599 0.5 -> 0.774 Inexact Rounded +pwsx4080 power 0.0599 0.5 -> 0.245 Inexact Rounded +pwsx4081 power 0.601 0.5 -> 0.775 Inexact Rounded +pwsx4082 power 0.0601 0.5 -> 0.245 Inexact Rounded +pwsx4083 power 0.602 0.5 -> 0.776 Inexact Rounded +pwsx4084 power 0.0602 0.5 -> 0.245 Inexact Rounded +pwsx4085 power 0.603 0.5 -> 0.777 Inexact Rounded +pwsx4086 power 0.0603 0.5 -> 0.246 Inexact Rounded +pwsx4087 power 0.604 0.5 -> 0.777 Inexact Rounded +pwsx4088 power 0.0604 0.5 -> 0.246 Inexact Rounded +pwsx4089 power 0.605 0.5 -> 0.778 Inexact Rounded +pwsx4090 power 0.0605 0.5 -> 0.246 Inexact Rounded +pwsx4091 power 0.606 0.5 -> 0.778 Inexact Rounded +pwsx4092 power 0.0606 0.5 -> 0.246 Inexact Rounded +pwsx4093 power 0.607 0.5 -> 0.779 Inexact Rounded +pwsx4094 power 0.0607 0.5 -> 0.246 Inexact Rounded +pwsx4095 power 0.608 0.5 -> 0.780 Inexact Rounded +pwsx4096 power 0.0608 0.5 -> 0.247 Inexact Rounded +pwsx4097 power 0.609 0.5 -> 0.780 Inexact Rounded +pwsx4098 power 0.0609 0.5 -> 0.247 Inexact Rounded +pwsx4099 power 0.611 0.5 -> 0.782 Inexact Rounded +pwsx4100 power 0.0611 0.5 -> 0.247 Inexact Rounded +pwsx4101 power 0.612 0.5 -> 0.782 Inexact Rounded +pwsx4102 power 0.0612 0.5 -> 0.247 Inexact Rounded +pwsx4103 power 0.613 0.5 -> 0.783 Inexact Rounded +pwsx4104 power 0.0613 0.5 -> 0.248 Inexact Rounded +pwsx4105 power 0.614 0.5 -> 0.784 Inexact Rounded +pwsx4106 power 0.0614 0.5 -> 0.248 Inexact Rounded +pwsx4107 power 0.615 0.5 -> 0.784 Inexact Rounded +pwsx4108 power 0.0615 0.5 -> 0.248 Inexact Rounded +pwsx4109 power 0.616 0.5 -> 0.785 Inexact Rounded +pwsx4110 power 0.0616 0.5 -> 0.248 Inexact Rounded +pwsx4111 power 0.617 0.5 -> 0.785 Inexact Rounded +pwsx4112 power 0.0617 0.5 -> 0.248 Inexact Rounded +pwsx4113 power 0.618 0.5 -> 0.786 Inexact Rounded +pwsx4114 power 0.0618 0.5 -> 0.249 Inexact Rounded +pwsx4115 power 0.619 0.5 -> 0.787 Inexact Rounded +pwsx4116 power 0.0619 0.5 -> 0.249 Inexact Rounded +pwsx4117 power 0.621 0.5 -> 0.788 Inexact Rounded +pwsx4118 power 0.0621 0.5 -> 0.249 Inexact Rounded +pwsx4119 power 0.622 0.5 -> 0.789 Inexact Rounded +pwsx4120 power 0.0622 0.5 -> 0.249 Inexact Rounded +pwsx4121 power 0.623 0.5 -> 0.789 Inexact Rounded +pwsx4122 power 0.0623 0.5 -> 0.250 Inexact Rounded +pwsx4123 power 0.624 0.5 -> 0.790 Inexact Rounded +pwsx4124 power 0.0624 0.5 -> 0.250 Inexact Rounded +pwsx4125 power 0.625 0.5 -> 0.791 Inexact Rounded +pwsx4126 power 0.0625 0.5 -> 0.250 Inexact Rounded +pwsx4127 power 0.626 0.5 -> 0.791 Inexact Rounded +pwsx4128 power 0.0626 0.5 -> 0.250 Inexact Rounded +pwsx4129 power 0.627 0.5 -> 0.792 Inexact Rounded +pwsx4130 power 0.0627 0.5 -> 0.250 Inexact Rounded +pwsx4131 power 0.628 0.5 -> 0.792 Inexact Rounded +pwsx4132 power 0.0628 0.5 -> 0.251 Inexact Rounded +pwsx4133 power 0.629 0.5 -> 0.793 Inexact Rounded +pwsx4134 power 0.0629 0.5 -> 0.251 Inexact Rounded +pwsx4135 power 0.631 0.5 -> 0.794 Inexact Rounded +pwsx4136 power 0.0631 0.5 -> 0.251 Inexact Rounded +pwsx4137 power 0.632 0.5 -> 0.795 Inexact Rounded +pwsx4138 power 0.0632 0.5 -> 0.251 Inexact Rounded +pwsx4139 power 0.633 0.5 -> 0.796 Inexact Rounded +pwsx4140 power 0.0633 0.5 -> 0.252 Inexact Rounded +pwsx4141 power 0.634 0.5 -> 0.796 Inexact Rounded +pwsx4142 power 0.0634 0.5 -> 0.252 Inexact Rounded +pwsx4143 power 0.635 0.5 -> 0.797 Inexact Rounded +pwsx4144 power 0.0635 0.5 -> 0.252 Inexact Rounded +pwsx4145 power 0.636 0.5 -> 0.797 Inexact Rounded +pwsx4146 power 0.0636 0.5 -> 0.252 Inexact Rounded +pwsx4147 power 0.637 0.5 -> 0.798 Inexact Rounded +pwsx4148 power 0.0637 0.5 -> 0.252 Inexact Rounded +pwsx4149 power 0.638 0.5 -> 0.799 Inexact Rounded +pwsx4150 power 0.0638 0.5 -> 0.253 Inexact Rounded +pwsx4151 power 0.639 0.5 -> 0.799 Inexact Rounded +pwsx4152 power 0.0639 0.5 -> 0.253 Inexact Rounded +pwsx4153 power 0.641 0.5 -> 0.801 Inexact Rounded +pwsx4154 power 0.0641 0.5 -> 0.253 Inexact Rounded +pwsx4155 power 0.642 0.5 -> 0.801 Inexact Rounded +pwsx4156 power 0.0642 0.5 -> 0.253 Inexact Rounded +pwsx4157 power 0.643 0.5 -> 0.802 Inexact Rounded +pwsx4158 power 0.0643 0.5 -> 0.254 Inexact Rounded +pwsx4159 power 0.644 0.5 -> 0.802 Inexact Rounded +pwsx4160 power 0.0644 0.5 -> 0.254 Inexact Rounded +pwsx4161 power 0.645 0.5 -> 0.803 Inexact Rounded +pwsx4162 power 0.0645 0.5 -> 0.254 Inexact Rounded +pwsx4163 power 0.646 0.5 -> 0.804 Inexact Rounded +pwsx4164 power 0.0646 0.5 -> 0.254 Inexact Rounded +pwsx4165 power 0.647 0.5 -> 0.804 Inexact Rounded +pwsx4166 power 0.0647 0.5 -> 0.254 Inexact Rounded +pwsx4167 power 0.648 0.5 -> 0.805 Inexact Rounded +pwsx4168 power 0.0648 0.5 -> 0.255 Inexact Rounded +pwsx4169 power 0.649 0.5 -> 0.806 Inexact Rounded +pwsx4170 power 0.0649 0.5 -> 0.255 Inexact Rounded +pwsx4171 power 0.651 0.5 -> 0.807 Inexact Rounded +pwsx4172 power 0.0651 0.5 -> 0.255 Inexact Rounded +pwsx4173 power 0.652 0.5 -> 0.807 Inexact Rounded +pwsx4174 power 0.0652 0.5 -> 0.255 Inexact Rounded +pwsx4175 power 0.653 0.5 -> 0.808 Inexact Rounded +pwsx4176 power 0.0653 0.5 -> 0.256 Inexact Rounded +pwsx4177 power 0.654 0.5 -> 0.809 Inexact Rounded +pwsx4178 power 0.0654 0.5 -> 0.256 Inexact Rounded +pwsx4179 power 0.655 0.5 -> 0.809 Inexact Rounded +pwsx4180 power 0.0655 0.5 -> 0.256 Inexact Rounded +pwsx4181 power 0.656 0.5 -> 0.810 Inexact Rounded +pwsx4182 power 0.0656 0.5 -> 0.256 Inexact Rounded +pwsx4183 power 0.657 0.5 -> 0.811 Inexact Rounded +pwsx4184 power 0.0657 0.5 -> 0.256 Inexact Rounded +pwsx4185 power 0.658 0.5 -> 0.811 Inexact Rounded +pwsx4186 power 0.0658 0.5 -> 0.257 Inexact Rounded +pwsx4187 power 0.659 0.5 -> 0.812 Inexact Rounded +pwsx4188 power 0.0659 0.5 -> 0.257 Inexact Rounded +pwsx4189 power 0.661 0.5 -> 0.813 Inexact Rounded +pwsx4190 power 0.0661 0.5 -> 0.257 Inexact Rounded +pwsx4191 power 0.662 0.5 -> 0.814 Inexact Rounded +pwsx4192 power 0.0662 0.5 -> 0.257 Inexact Rounded +pwsx4193 power 0.663 0.5 -> 0.814 Inexact Rounded +pwsx4194 power 0.0663 0.5 -> 0.257 Inexact Rounded +pwsx4195 power 0.664 0.5 -> 0.815 Inexact Rounded +pwsx4196 power 0.0664 0.5 -> 0.258 Inexact Rounded +pwsx4197 power 0.665 0.5 -> 0.815 Inexact Rounded +pwsx4198 power 0.0665 0.5 -> 0.258 Inexact Rounded +pwsx4199 power 0.666 0.5 -> 0.816 Inexact Rounded +pwsx4200 power 0.0666 0.5 -> 0.258 Inexact Rounded +pwsx4201 power 0.667 0.5 -> 0.817 Inexact Rounded +pwsx4202 power 0.0667 0.5 -> 0.258 Inexact Rounded +pwsx4203 power 0.668 0.5 -> 0.817 Inexact Rounded +pwsx4204 power 0.0668 0.5 -> 0.258 Inexact Rounded +pwsx4205 power 0.669 0.5 -> 0.818 Inexact Rounded +pwsx4206 power 0.0669 0.5 -> 0.259 Inexact Rounded +pwsx4207 power 0.671 0.5 -> 0.819 Inexact Rounded +pwsx4208 power 0.0671 0.5 -> 0.259 Inexact Rounded +pwsx4209 power 0.672 0.5 -> 0.820 Inexact Rounded +pwsx4210 power 0.0672 0.5 -> 0.259 Inexact Rounded +pwsx4211 power 0.673 0.5 -> 0.820 Inexact Rounded +pwsx4212 power 0.0673 0.5 -> 0.259 Inexact Rounded +pwsx4213 power 0.674 0.5 -> 0.821 Inexact Rounded +pwsx4214 power 0.0674 0.5 -> 0.260 Inexact Rounded +pwsx4215 power 0.675 0.5 -> 0.822 Inexact Rounded +pwsx4216 power 0.0675 0.5 -> 0.260 Inexact Rounded +pwsx4217 power 0.676 0.5 -> 0.822 Inexact Rounded +pwsx4218 power 0.0676 0.5 -> 0.260 Inexact Rounded +pwsx4219 power 0.677 0.5 -> 0.823 Inexact Rounded +pwsx4220 power 0.0677 0.5 -> 0.260 Inexact Rounded +pwsx4221 power 0.678 0.5 -> 0.823 Inexact Rounded +pwsx4222 power 0.0678 0.5 -> 0.260 Inexact Rounded +pwsx4223 power 0.679 0.5 -> 0.824 Inexact Rounded +pwsx4224 power 0.0679 0.5 -> 0.261 Inexact Rounded +pwsx4225 power 0.681 0.5 -> 0.825 Inexact Rounded +pwsx4226 power 0.0681 0.5 -> 0.261 Inexact Rounded +pwsx4227 power 0.682 0.5 -> 0.826 Inexact Rounded +pwsx4228 power 0.0682 0.5 -> 0.261 Inexact Rounded +pwsx4229 power 0.683 0.5 -> 0.826 Inexact Rounded +pwsx4230 power 0.0683 0.5 -> 0.261 Inexact Rounded +pwsx4231 power 0.684 0.5 -> 0.827 Inexact Rounded +pwsx4232 power 0.0684 0.5 -> 0.262 Inexact Rounded +pwsx4233 power 0.685 0.5 -> 0.828 Inexact Rounded +pwsx4234 power 0.0685 0.5 -> 0.262 Inexact Rounded +pwsx4235 power 0.686 0.5 -> 0.828 Inexact Rounded +pwsx4236 power 0.0686 0.5 -> 0.262 Inexact Rounded +pwsx4237 power 0.687 0.5 -> 0.829 Inexact Rounded +pwsx4238 power 0.0687 0.5 -> 0.262 Inexact Rounded +pwsx4239 power 0.688 0.5 -> 0.829 Inexact Rounded +pwsx4240 power 0.0688 0.5 -> 0.262 Inexact Rounded +pwsx4241 power 0.689 0.5 -> 0.830 Inexact Rounded +pwsx4242 power 0.0689 0.5 -> 0.262 Inexact Rounded +pwsx4243 power 0.691 0.5 -> 0.831 Inexact Rounded +pwsx4244 power 0.0691 0.5 -> 0.263 Inexact Rounded +pwsx4245 power 0.692 0.5 -> 0.832 Inexact Rounded +pwsx4246 power 0.0692 0.5 -> 0.263 Inexact Rounded +pwsx4247 power 0.693 0.5 -> 0.832 Inexact Rounded +pwsx4248 power 0.0693 0.5 -> 0.263 Inexact Rounded +pwsx4249 power 0.694 0.5 -> 0.833 Inexact Rounded +pwsx4250 power 0.0694 0.5 -> 0.263 Inexact Rounded +pwsx4251 power 0.695 0.5 -> 0.834 Inexact Rounded +pwsx4252 power 0.0695 0.5 -> 0.264 Inexact Rounded +pwsx4253 power 0.696 0.5 -> 0.834 Inexact Rounded +pwsx4254 power 0.0696 0.5 -> 0.264 Inexact Rounded +pwsx4255 power 0.697 0.5 -> 0.835 Inexact Rounded +pwsx4256 power 0.0697 0.5 -> 0.264 Inexact Rounded +pwsx4257 power 0.698 0.5 -> 0.835 Inexact Rounded +pwsx4258 power 0.0698 0.5 -> 0.264 Inexact Rounded +pwsx4259 power 0.699 0.5 -> 0.836 Inexact Rounded +pwsx4260 power 0.0699 0.5 -> 0.264 Inexact Rounded +pwsx4261 power 0.701 0.5 -> 0.837 Inexact Rounded +pwsx4262 power 0.0701 0.5 -> 0.265 Inexact Rounded +pwsx4263 power 0.702 0.5 -> 0.838 Inexact Rounded +pwsx4264 power 0.0702 0.5 -> 0.265 Inexact Rounded +pwsx4265 power 0.703 0.5 -> 0.838 Inexact Rounded +pwsx4266 power 0.0703 0.5 -> 0.265 Inexact Rounded +pwsx4267 power 0.704 0.5 -> 0.839 Inexact Rounded +pwsx4268 power 0.0704 0.5 -> 0.265 Inexact Rounded +pwsx4269 power 0.705 0.5 -> 0.840 Inexact Rounded +pwsx4270 power 0.0705 0.5 -> 0.266 Inexact Rounded +pwsx4271 power 0.706 0.5 -> 0.840 Inexact Rounded +pwsx4272 power 0.0706 0.5 -> 0.266 Inexact Rounded +pwsx4273 power 0.707 0.5 -> 0.841 Inexact Rounded +pwsx4274 power 0.0707 0.5 -> 0.266 Inexact Rounded +pwsx4275 power 0.708 0.5 -> 0.841 Inexact Rounded +pwsx4276 power 0.0708 0.5 -> 0.266 Inexact Rounded +pwsx4277 power 0.709 0.5 -> 0.842 Inexact Rounded +pwsx4278 power 0.0709 0.5 -> 0.266 Inexact Rounded +pwsx4279 power 0.711 0.5 -> 0.843 Inexact Rounded +pwsx4280 power 0.0711 0.5 -> 0.267 Inexact Rounded +pwsx4281 power 0.712 0.5 -> 0.844 Inexact Rounded +pwsx4282 power 0.0712 0.5 -> 0.267 Inexact Rounded +pwsx4283 power 0.713 0.5 -> 0.844 Inexact Rounded +pwsx4284 power 0.0713 0.5 -> 0.267 Inexact Rounded +pwsx4285 power 0.714 0.5 -> 0.845 Inexact Rounded +pwsx4286 power 0.0714 0.5 -> 0.267 Inexact Rounded +pwsx4287 power 0.715 0.5 -> 0.846 Inexact Rounded +pwsx4288 power 0.0715 0.5 -> 0.267 Inexact Rounded +pwsx4289 power 0.716 0.5 -> 0.846 Inexact Rounded +pwsx4290 power 0.0716 0.5 -> 0.268 Inexact Rounded +pwsx4291 power 0.717 0.5 -> 0.847 Inexact Rounded +pwsx4292 power 0.0717 0.5 -> 0.268 Inexact Rounded +pwsx4293 power 0.718 0.5 -> 0.847 Inexact Rounded +pwsx4294 power 0.0718 0.5 -> 0.268 Inexact Rounded +pwsx4295 power 0.719 0.5 -> 0.848 Inexact Rounded +pwsx4296 power 0.0719 0.5 -> 0.268 Inexact Rounded +pwsx4297 power 0.721 0.5 -> 0.849 Inexact Rounded +pwsx4298 power 0.0721 0.5 -> 0.269 Inexact Rounded +pwsx4299 power 0.722 0.5 -> 0.850 Inexact Rounded +pwsx4300 power 0.0722 0.5 -> 0.269 Inexact Rounded +pwsx4301 power 0.723 0.5 -> 0.850 Inexact Rounded +pwsx4302 power 0.0723 0.5 -> 0.269 Inexact Rounded +pwsx4303 power 0.724 0.5 -> 0.851 Inexact Rounded +pwsx4304 power 0.0724 0.5 -> 0.269 Inexact Rounded +pwsx4305 power 0.725 0.5 -> 0.851 Inexact Rounded +pwsx4306 power 0.0725 0.5 -> 0.269 Inexact Rounded +pwsx4307 power 0.726 0.5 -> 0.852 Inexact Rounded +pwsx4308 power 0.0726 0.5 -> 0.269 Inexact Rounded +pwsx4309 power 0.727 0.5 -> 0.853 Inexact Rounded +pwsx4310 power 0.0727 0.5 -> 0.270 Inexact Rounded +pwsx4311 power 0.728 0.5 -> 0.853 Inexact Rounded +pwsx4312 power 0.0728 0.5 -> 0.270 Inexact Rounded +pwsx4313 power 0.729 0.5 -> 0.854 Inexact Rounded +pwsx4314 power 0.0729 0.5 -> 0.270 Inexact Rounded +pwsx4315 power 0.731 0.5 -> 0.855 Inexact Rounded +pwsx4316 power 0.0731 0.5 -> 0.270 Inexact Rounded +pwsx4317 power 0.732 0.5 -> 0.856 Inexact Rounded +pwsx4318 power 0.0732 0.5 -> 0.271 Inexact Rounded +pwsx4319 power 0.733 0.5 -> 0.856 Inexact Rounded +pwsx4320 power 0.0733 0.5 -> 0.271 Inexact Rounded +pwsx4321 power 0.734 0.5 -> 0.857 Inexact Rounded +pwsx4322 power 0.0734 0.5 -> 0.271 Inexact Rounded +pwsx4323 power 0.735 0.5 -> 0.857 Inexact Rounded +pwsx4324 power 0.0735 0.5 -> 0.271 Inexact Rounded +pwsx4325 power 0.736 0.5 -> 0.858 Inexact Rounded +pwsx4326 power 0.0736 0.5 -> 0.271 Inexact Rounded +pwsx4327 power 0.737 0.5 -> 0.858 Inexact Rounded +pwsx4328 power 0.0737 0.5 -> 0.271 Inexact Rounded +pwsx4329 power 0.738 0.5 -> 0.859 Inexact Rounded +pwsx4330 power 0.0738 0.5 -> 0.272 Inexact Rounded +pwsx4331 power 0.739 0.5 -> 0.860 Inexact Rounded +pwsx4332 power 0.0739 0.5 -> 0.272 Inexact Rounded +pwsx4333 power 0.741 0.5 -> 0.861 Inexact Rounded +pwsx4334 power 0.0741 0.5 -> 0.272 Inexact Rounded +pwsx4335 power 0.742 0.5 -> 0.861 Inexact Rounded +pwsx4336 power 0.0742 0.5 -> 0.272 Inexact Rounded +pwsx4337 power 0.743 0.5 -> 0.862 Inexact Rounded +pwsx4338 power 0.0743 0.5 -> 0.273 Inexact Rounded +pwsx4339 power 0.744 0.5 -> 0.863 Inexact Rounded +pwsx4340 power 0.0744 0.5 -> 0.273 Inexact Rounded +pwsx4341 power 0.745 0.5 -> 0.863 Inexact Rounded +pwsx4342 power 0.0745 0.5 -> 0.273 Inexact Rounded +pwsx4343 power 0.746 0.5 -> 0.864 Inexact Rounded +pwsx4344 power 0.0746 0.5 -> 0.273 Inexact Rounded +pwsx4345 power 0.747 0.5 -> 0.864 Inexact Rounded +pwsx4346 power 0.0747 0.5 -> 0.273 Inexact Rounded +pwsx4347 power 0.748 0.5 -> 0.865 Inexact Rounded +pwsx4348 power 0.0748 0.5 -> 0.273 Inexact Rounded +pwsx4349 power 0.749 0.5 -> 0.865 Inexact Rounded +pwsx4350 power 0.0749 0.5 -> 0.274 Inexact Rounded +pwsx4351 power 0.751 0.5 -> 0.867 Inexact Rounded +pwsx4352 power 0.0751 0.5 -> 0.274 Inexact Rounded +pwsx4353 power 0.752 0.5 -> 0.867 Inexact Rounded +pwsx4354 power 0.0752 0.5 -> 0.274 Inexact Rounded +pwsx4355 power 0.753 0.5 -> 0.868 Inexact Rounded +pwsx4356 power 0.0753 0.5 -> 0.274 Inexact Rounded +pwsx4357 power 0.754 0.5 -> 0.868 Inexact Rounded +pwsx4358 power 0.0754 0.5 -> 0.275 Inexact Rounded +pwsx4359 power 0.755 0.5 -> 0.869 Inexact Rounded +pwsx4360 power 0.0755 0.5 -> 0.275 Inexact Rounded +pwsx4361 power 0.756 0.5 -> 0.869 Inexact Rounded +pwsx4362 power 0.0756 0.5 -> 0.275 Inexact Rounded +pwsx4363 power 0.757 0.5 -> 0.870 Inexact Rounded +pwsx4364 power 0.0757 0.5 -> 0.275 Inexact Rounded +pwsx4365 power 0.758 0.5 -> 0.871 Inexact Rounded +pwsx4366 power 0.0758 0.5 -> 0.275 Inexact Rounded +pwsx4367 power 0.759 0.5 -> 0.871 Inexact Rounded +pwsx4368 power 0.0759 0.5 -> 0.275 Inexact Rounded +pwsx4369 power 0.761 0.5 -> 0.872 Inexact Rounded +pwsx4370 power 0.0761 0.5 -> 0.276 Inexact Rounded +pwsx4371 power 0.762 0.5 -> 0.873 Inexact Rounded +pwsx4372 power 0.0762 0.5 -> 0.276 Inexact Rounded +pwsx4373 power 0.763 0.5 -> 0.873 Inexact Rounded +pwsx4374 power 0.0763 0.5 -> 0.276 Inexact Rounded +pwsx4375 power 0.764 0.5 -> 0.874 Inexact Rounded +pwsx4376 power 0.0764 0.5 -> 0.276 Inexact Rounded +pwsx4377 power 0.765 0.5 -> 0.875 Inexact Rounded +pwsx4378 power 0.0765 0.5 -> 0.277 Inexact Rounded +pwsx4379 power 0.766 0.5 -> 0.875 Inexact Rounded +pwsx4380 power 0.0766 0.5 -> 0.277 Inexact Rounded +pwsx4381 power 0.767 0.5 -> 0.876 Inexact Rounded +pwsx4382 power 0.0767 0.5 -> 0.277 Inexact Rounded +pwsx4383 power 0.768 0.5 -> 0.876 Inexact Rounded +pwsx4384 power 0.0768 0.5 -> 0.277 Inexact Rounded +pwsx4385 power 0.769 0.5 -> 0.877 Inexact Rounded +pwsx4386 power 0.0769 0.5 -> 0.277 Inexact Rounded +pwsx4387 power 0.771 0.5 -> 0.878 Inexact Rounded +pwsx4388 power 0.0771 0.5 -> 0.278 Inexact Rounded +pwsx4389 power 0.772 0.5 -> 0.879 Inexact Rounded +pwsx4390 power 0.0772 0.5 -> 0.278 Inexact Rounded +pwsx4391 power 0.773 0.5 -> 0.879 Inexact Rounded +pwsx4392 power 0.0773 0.5 -> 0.278 Inexact Rounded +pwsx4393 power 0.774 0.5 -> 0.880 Inexact Rounded +pwsx4394 power 0.0774 0.5 -> 0.278 Inexact Rounded +pwsx4395 power 0.775 0.5 -> 0.880 Inexact Rounded +pwsx4396 power 0.0775 0.5 -> 0.278 Inexact Rounded +pwsx4397 power 0.776 0.5 -> 0.881 Inexact Rounded +pwsx4398 power 0.0776 0.5 -> 0.279 Inexact Rounded +pwsx4399 power 0.777 0.5 -> 0.881 Inexact Rounded +pwsx4400 power 0.0777 0.5 -> 0.279 Inexact Rounded +pwsx4401 power 0.778 0.5 -> 0.882 Inexact Rounded +pwsx4402 power 0.0778 0.5 -> 0.279 Inexact Rounded +pwsx4403 power 0.779 0.5 -> 0.883 Inexact Rounded +pwsx4404 power 0.0779 0.5 -> 0.279 Inexact Rounded +pwsx4405 power 0.781 0.5 -> 0.884 Inexact Rounded +pwsx4406 power 0.0781 0.5 -> 0.279 Inexact Rounded +pwsx4407 power 0.782 0.5 -> 0.884 Inexact Rounded +pwsx4408 power 0.0782 0.5 -> 0.280 Inexact Rounded +pwsx4409 power 0.783 0.5 -> 0.885 Inexact Rounded +pwsx4410 power 0.0783 0.5 -> 0.280 Inexact Rounded +pwsx4411 power 0.784 0.5 -> 0.885 Inexact Rounded +pwsx4412 power 0.0784 0.5 -> 0.280 Inexact Rounded +pwsx4413 power 0.785 0.5 -> 0.886 Inexact Rounded +pwsx4414 power 0.0785 0.5 -> 0.280 Inexact Rounded +pwsx4415 power 0.786 0.5 -> 0.887 Inexact Rounded +pwsx4416 power 0.0786 0.5 -> 0.280 Inexact Rounded +pwsx4417 power 0.787 0.5 -> 0.887 Inexact Rounded +pwsx4418 power 0.0787 0.5 -> 0.281 Inexact Rounded +pwsx4419 power 0.788 0.5 -> 0.888 Inexact Rounded +pwsx4420 power 0.0788 0.5 -> 0.281 Inexact Rounded +pwsx4421 power 0.789 0.5 -> 0.888 Inexact Rounded +pwsx4422 power 0.0789 0.5 -> 0.281 Inexact Rounded +pwsx4423 power 0.791 0.5 -> 0.889 Inexact Rounded +pwsx4424 power 0.0791 0.5 -> 0.281 Inexact Rounded +pwsx4425 power 0.792 0.5 -> 0.890 Inexact Rounded +pwsx4426 power 0.0792 0.5 -> 0.281 Inexact Rounded +pwsx4427 power 0.793 0.5 -> 0.891 Inexact Rounded +pwsx4428 power 0.0793 0.5 -> 0.282 Inexact Rounded +pwsx4429 power 0.794 0.5 -> 0.891 Inexact Rounded +pwsx4430 power 0.0794 0.5 -> 0.282 Inexact Rounded +pwsx4431 power 0.795 0.5 -> 0.892 Inexact Rounded +pwsx4432 power 0.0795 0.5 -> 0.282 Inexact Rounded +pwsx4433 power 0.796 0.5 -> 0.892 Inexact Rounded +pwsx4434 power 0.0796 0.5 -> 0.282 Inexact Rounded +pwsx4435 power 0.797 0.5 -> 0.893 Inexact Rounded +pwsx4436 power 0.0797 0.5 -> 0.282 Inexact Rounded +pwsx4437 power 0.798 0.5 -> 0.893 Inexact Rounded +pwsx4438 power 0.0798 0.5 -> 0.282 Inexact Rounded +pwsx4439 power 0.799 0.5 -> 0.894 Inexact Rounded +pwsx4440 power 0.0799 0.5 -> 0.283 Inexact Rounded +pwsx4441 power 0.801 0.5 -> 0.895 Inexact Rounded +pwsx4442 power 0.0801 0.5 -> 0.283 Inexact Rounded +pwsx4443 power 0.802 0.5 -> 0.896 Inexact Rounded +pwsx4444 power 0.0802 0.5 -> 0.283 Inexact Rounded +pwsx4445 power 0.803 0.5 -> 0.896 Inexact Rounded +pwsx4446 power 0.0803 0.5 -> 0.283 Inexact Rounded +pwsx4447 power 0.804 0.5 -> 0.897 Inexact Rounded +pwsx4448 power 0.0804 0.5 -> 0.284 Inexact Rounded +pwsx4449 power 0.805 0.5 -> 0.897 Inexact Rounded +pwsx4450 power 0.0805 0.5 -> 0.284 Inexact Rounded +pwsx4451 power 0.806 0.5 -> 0.898 Inexact Rounded +pwsx4452 power 0.0806 0.5 -> 0.284 Inexact Rounded +pwsx4453 power 0.807 0.5 -> 0.898 Inexact Rounded +pwsx4454 power 0.0807 0.5 -> 0.284 Inexact Rounded +pwsx4455 power 0.808 0.5 -> 0.899 Inexact Rounded +pwsx4456 power 0.0808 0.5 -> 0.284 Inexact Rounded +pwsx4457 power 0.809 0.5 -> 0.899 Inexact Rounded +pwsx4458 power 0.0809 0.5 -> 0.284 Inexact Rounded +pwsx4459 power 0.811 0.5 -> 0.901 Inexact Rounded +pwsx4460 power 0.0811 0.5 -> 0.285 Inexact Rounded +pwsx4461 power 0.812 0.5 -> 0.901 Inexact Rounded +pwsx4462 power 0.0812 0.5 -> 0.285 Inexact Rounded +pwsx4463 power 0.813 0.5 -> 0.902 Inexact Rounded +pwsx4464 power 0.0813 0.5 -> 0.285 Inexact Rounded +pwsx4465 power 0.814 0.5 -> 0.902 Inexact Rounded +pwsx4466 power 0.0814 0.5 -> 0.285 Inexact Rounded +pwsx4467 power 0.815 0.5 -> 0.903 Inexact Rounded +pwsx4468 power 0.0815 0.5 -> 0.285 Inexact Rounded +pwsx4469 power 0.816 0.5 -> 0.903 Inexact Rounded +pwsx4470 power 0.0816 0.5 -> 0.286 Inexact Rounded +pwsx4471 power 0.817 0.5 -> 0.904 Inexact Rounded +pwsx4472 power 0.0817 0.5 -> 0.286 Inexact Rounded +pwsx4473 power 0.818 0.5 -> 0.904 Inexact Rounded +pwsx4474 power 0.0818 0.5 -> 0.286 Inexact Rounded +pwsx4475 power 0.819 0.5 -> 0.905 Inexact Rounded +pwsx4476 power 0.0819 0.5 -> 0.286 Inexact Rounded +pwsx4477 power 0.821 0.5 -> 0.906 Inexact Rounded +pwsx4478 power 0.0821 0.5 -> 0.287 Inexact Rounded +pwsx4479 power 0.822 0.5 -> 0.907 Inexact Rounded +pwsx4480 power 0.0822 0.5 -> 0.287 Inexact Rounded +pwsx4481 power 0.823 0.5 -> 0.907 Inexact Rounded +pwsx4482 power 0.0823 0.5 -> 0.287 Inexact Rounded +pwsx4483 power 0.824 0.5 -> 0.908 Inexact Rounded +pwsx4484 power 0.0824 0.5 -> 0.287 Inexact Rounded +pwsx4485 power 0.825 0.5 -> 0.908 Inexact Rounded +pwsx4486 power 0.0825 0.5 -> 0.287 Inexact Rounded +pwsx4487 power 0.826 0.5 -> 0.909 Inexact Rounded +pwsx4488 power 0.0826 0.5 -> 0.287 Inexact Rounded +pwsx4489 power 0.827 0.5 -> 0.909 Inexact Rounded +pwsx4490 power 0.0827 0.5 -> 0.288 Inexact Rounded +pwsx4491 power 0.828 0.5 -> 0.910 Inexact Rounded +pwsx4492 power 0.0828 0.5 -> 0.288 Inexact Rounded +pwsx4493 power 0.829 0.5 -> 0.910 Inexact Rounded +pwsx4494 power 0.0829 0.5 -> 0.288 Inexact Rounded +pwsx4495 power 0.831 0.5 -> 0.912 Inexact Rounded +pwsx4496 power 0.0831 0.5 -> 0.288 Inexact Rounded +pwsx4497 power 0.832 0.5 -> 0.912 Inexact Rounded +pwsx4498 power 0.0832 0.5 -> 0.288 Inexact Rounded +pwsx4499 power 0.833 0.5 -> 0.913 Inexact Rounded +pwsx4500 power 0.0833 0.5 -> 0.289 Inexact Rounded +pwsx4501 power 0.834 0.5 -> 0.913 Inexact Rounded +pwsx4502 power 0.0834 0.5 -> 0.289 Inexact Rounded +pwsx4503 power 0.835 0.5 -> 0.914 Inexact Rounded +pwsx4504 power 0.0835 0.5 -> 0.289 Inexact Rounded +pwsx4505 power 0.836 0.5 -> 0.914 Inexact Rounded +pwsx4506 power 0.0836 0.5 -> 0.289 Inexact Rounded +pwsx4507 power 0.837 0.5 -> 0.915 Inexact Rounded +pwsx4508 power 0.0837 0.5 -> 0.289 Inexact Rounded +pwsx4509 power 0.838 0.5 -> 0.915 Inexact Rounded +pwsx4510 power 0.0838 0.5 -> 0.289 Inexact Rounded +pwsx4511 power 0.839 0.5 -> 0.916 Inexact Rounded +pwsx4512 power 0.0839 0.5 -> 0.290 Inexact Rounded +pwsx4513 power 0.841 0.5 -> 0.917 Inexact Rounded +pwsx4514 power 0.0841 0.5 -> 0.290 Inexact Rounded +pwsx4515 power 0.842 0.5 -> 0.918 Inexact Rounded +pwsx4516 power 0.0842 0.5 -> 0.290 Inexact Rounded +pwsx4517 power 0.843 0.5 -> 0.918 Inexact Rounded +pwsx4518 power 0.0843 0.5 -> 0.290 Inexact Rounded +pwsx4519 power 0.844 0.5 -> 0.919 Inexact Rounded +pwsx4520 power 0.0844 0.5 -> 0.291 Inexact Rounded +pwsx4521 power 0.845 0.5 -> 0.919 Inexact Rounded +pwsx4522 power 0.0845 0.5 -> 0.291 Inexact Rounded +pwsx4523 power 0.846 0.5 -> 0.920 Inexact Rounded +pwsx4524 power 0.0846 0.5 -> 0.291 Inexact Rounded +pwsx4525 power 0.847 0.5 -> 0.920 Inexact Rounded +pwsx4526 power 0.0847 0.5 -> 0.291 Inexact Rounded +pwsx4527 power 0.848 0.5 -> 0.921 Inexact Rounded +pwsx4528 power 0.0848 0.5 -> 0.291 Inexact Rounded +pwsx4529 power 0.849 0.5 -> 0.921 Inexact Rounded +pwsx4530 power 0.0849 0.5 -> 0.291 Inexact Rounded +pwsx4531 power 0.851 0.5 -> 0.922 Inexact Rounded +pwsx4532 power 0.0851 0.5 -> 0.292 Inexact Rounded +pwsx4533 power 0.852 0.5 -> 0.923 Inexact Rounded +pwsx4534 power 0.0852 0.5 -> 0.292 Inexact Rounded +pwsx4535 power 0.853 0.5 -> 0.924 Inexact Rounded +pwsx4536 power 0.0853 0.5 -> 0.292 Inexact Rounded +pwsx4537 power 0.854 0.5 -> 0.924 Inexact Rounded +pwsx4538 power 0.0854 0.5 -> 0.292 Inexact Rounded +pwsx4539 power 0.855 0.5 -> 0.925 Inexact Rounded +pwsx4540 power 0.0855 0.5 -> 0.292 Inexact Rounded +pwsx4541 power 0.856 0.5 -> 0.925 Inexact Rounded +pwsx4542 power 0.0856 0.5 -> 0.293 Inexact Rounded +pwsx4543 power 0.857 0.5 -> 0.926 Inexact Rounded +pwsx4544 power 0.0857 0.5 -> 0.293 Inexact Rounded +pwsx4545 power 0.858 0.5 -> 0.926 Inexact Rounded +pwsx4546 power 0.0858 0.5 -> 0.293 Inexact Rounded +pwsx4547 power 0.859 0.5 -> 0.927 Inexact Rounded +pwsx4548 power 0.0859 0.5 -> 0.293 Inexact Rounded +pwsx4549 power 0.861 0.5 -> 0.928 Inexact Rounded +pwsx4550 power 0.0861 0.5 -> 0.293 Inexact Rounded +pwsx4551 power 0.862 0.5 -> 0.928 Inexact Rounded +pwsx4552 power 0.0862 0.5 -> 0.294 Inexact Rounded +pwsx4553 power 0.863 0.5 -> 0.929 Inexact Rounded +pwsx4554 power 0.0863 0.5 -> 0.294 Inexact Rounded +pwsx4555 power 0.864 0.5 -> 0.930 Inexact Rounded +pwsx4556 power 0.0864 0.5 -> 0.294 Inexact Rounded +pwsx4557 power 0.865 0.5 -> 0.930 Inexact Rounded +pwsx4558 power 0.0865 0.5 -> 0.294 Inexact Rounded +pwsx4559 power 0.866 0.5 -> 0.931 Inexact Rounded +pwsx4560 power 0.0866 0.5 -> 0.294 Inexact Rounded +pwsx4561 power 0.867 0.5 -> 0.931 Inexact Rounded +pwsx4562 power 0.0867 0.5 -> 0.294 Inexact Rounded +pwsx4563 power 0.868 0.5 -> 0.932 Inexact Rounded +pwsx4564 power 0.0868 0.5 -> 0.295 Inexact Rounded +pwsx4565 power 0.869 0.5 -> 0.932 Inexact Rounded +pwsx4566 power 0.0869 0.5 -> 0.295 Inexact Rounded +pwsx4567 power 0.871 0.5 -> 0.933 Inexact Rounded +pwsx4568 power 0.0871 0.5 -> 0.295 Inexact Rounded +pwsx4569 power 0.872 0.5 -> 0.934 Inexact Rounded +pwsx4570 power 0.0872 0.5 -> 0.295 Inexact Rounded +pwsx4571 power 0.873 0.5 -> 0.934 Inexact Rounded +pwsx4572 power 0.0873 0.5 -> 0.295 Inexact Rounded +pwsx4573 power 0.874 0.5 -> 0.935 Inexact Rounded +pwsx4574 power 0.0874 0.5 -> 0.296 Inexact Rounded +pwsx4575 power 0.875 0.5 -> 0.935 Inexact Rounded +pwsx4576 power 0.0875 0.5 -> 0.296 Inexact Rounded +pwsx4577 power 0.876 0.5 -> 0.936 Inexact Rounded +pwsx4578 power 0.0876 0.5 -> 0.296 Inexact Rounded +pwsx4579 power 0.877 0.5 -> 0.936 Inexact Rounded +pwsx4580 power 0.0877 0.5 -> 0.296 Inexact Rounded +pwsx4581 power 0.878 0.5 -> 0.937 Inexact Rounded +pwsx4582 power 0.0878 0.5 -> 0.296 Inexact Rounded +pwsx4583 power 0.879 0.5 -> 0.938 Inexact Rounded +pwsx4584 power 0.0879 0.5 -> 0.296 Inexact Rounded +pwsx4585 power 0.881 0.5 -> 0.939 Inexact Rounded +pwsx4586 power 0.0881 0.5 -> 0.297 Inexact Rounded +pwsx4587 power 0.882 0.5 -> 0.939 Inexact Rounded +pwsx4588 power 0.0882 0.5 -> 0.297 Inexact Rounded +pwsx4589 power 0.883 0.5 -> 0.940 Inexact Rounded +pwsx4590 power 0.0883 0.5 -> 0.297 Inexact Rounded +pwsx4591 power 0.884 0.5 -> 0.940 Inexact Rounded +pwsx4592 power 0.0884 0.5 -> 0.297 Inexact Rounded +pwsx4593 power 0.885 0.5 -> 0.941 Inexact Rounded +pwsx4594 power 0.0885 0.5 -> 0.297 Inexact Rounded +pwsx4595 power 0.886 0.5 -> 0.941 Inexact Rounded +pwsx4596 power 0.0886 0.5 -> 0.298 Inexact Rounded +pwsx4597 power 0.887 0.5 -> 0.942 Inexact Rounded +pwsx4598 power 0.0887 0.5 -> 0.298 Inexact Rounded +pwsx4599 power 0.888 0.5 -> 0.942 Inexact Rounded +pwsx4600 power 0.0888 0.5 -> 0.298 Inexact Rounded +pwsx4601 power 0.889 0.5 -> 0.943 Inexact Rounded +pwsx4602 power 0.0889 0.5 -> 0.298 Inexact Rounded +pwsx4603 power 0.891 0.5 -> 0.944 Inexact Rounded +pwsx4604 power 0.0891 0.5 -> 0.298 Inexact Rounded +pwsx4605 power 0.892 0.5 -> 0.944 Inexact Rounded +pwsx4606 power 0.0892 0.5 -> 0.299 Inexact Rounded +pwsx4607 power 0.893 0.5 -> 0.945 Inexact Rounded +pwsx4608 power 0.0893 0.5 -> 0.299 Inexact Rounded +pwsx4609 power 0.894 0.5 -> 0.946 Inexact Rounded +pwsx4610 power 0.0894 0.5 -> 0.299 Inexact Rounded +pwsx4611 power 0.895 0.5 -> 0.946 Inexact Rounded +pwsx4612 power 0.0895 0.5 -> 0.299 Inexact Rounded +pwsx4613 power 0.896 0.5 -> 0.947 Inexact Rounded +pwsx4614 power 0.0896 0.5 -> 0.299 Inexact Rounded +pwsx4615 power 0.897 0.5 -> 0.947 Inexact Rounded +pwsx4616 power 0.0897 0.5 -> 0.299 Inexact Rounded +pwsx4617 power 0.898 0.5 -> 0.948 Inexact Rounded +pwsx4618 power 0.0898 0.5 -> 0.300 Inexact Rounded +pwsx4619 power 0.899 0.5 -> 0.948 Inexact Rounded +pwsx4620 power 0.0899 0.5 -> 0.300 Inexact Rounded +pwsx4621 power 0.901 0.5 -> 0.949 Inexact Rounded +pwsx4622 power 0.0901 0.5 -> 0.300 Inexact Rounded +pwsx4623 power 0.902 0.5 -> 0.950 Inexact Rounded +pwsx4624 power 0.0902 0.5 -> 0.300 Inexact Rounded +pwsx4625 power 0.903 0.5 -> 0.950 Inexact Rounded +pwsx4626 power 0.0903 0.5 -> 0.300 Inexact Rounded +pwsx4627 power 0.904 0.5 -> 0.951 Inexact Rounded +pwsx4628 power 0.0904 0.5 -> 0.301 Inexact Rounded +pwsx4629 power 0.905 0.5 -> 0.951 Inexact Rounded +pwsx4630 power 0.0905 0.5 -> 0.301 Inexact Rounded +pwsx4631 power 0.906 0.5 -> 0.952 Inexact Rounded +pwsx4632 power 0.0906 0.5 -> 0.301 Inexact Rounded +pwsx4633 power 0.907 0.5 -> 0.952 Inexact Rounded +pwsx4634 power 0.0907 0.5 -> 0.301 Inexact Rounded +pwsx4635 power 0.908 0.5 -> 0.953 Inexact Rounded +pwsx4636 power 0.0908 0.5 -> 0.301 Inexact Rounded +pwsx4637 power 0.909 0.5 -> 0.953 Inexact Rounded +pwsx4638 power 0.0909 0.5 -> 0.301 Inexact Rounded +pwsx4639 power 0.911 0.5 -> 0.954 Inexact Rounded +pwsx4640 power 0.0911 0.5 -> 0.302 Inexact Rounded +pwsx4641 power 0.912 0.5 -> 0.955 Inexact Rounded +pwsx4642 power 0.0912 0.5 -> 0.302 Inexact Rounded +pwsx4643 power 0.913 0.5 -> 0.956 Inexact Rounded +pwsx4644 power 0.0913 0.5 -> 0.302 Inexact Rounded +pwsx4645 power 0.914 0.5 -> 0.956 Inexact Rounded +pwsx4646 power 0.0914 0.5 -> 0.302 Inexact Rounded +pwsx4647 power 0.915 0.5 -> 0.957 Inexact Rounded +pwsx4648 power 0.0915 0.5 -> 0.302 Inexact Rounded +pwsx4649 power 0.916 0.5 -> 0.957 Inexact Rounded +pwsx4650 power 0.0916 0.5 -> 0.303 Inexact Rounded +pwsx4651 power 0.917 0.5 -> 0.958 Inexact Rounded +pwsx4652 power 0.0917 0.5 -> 0.303 Inexact Rounded +pwsx4653 power 0.918 0.5 -> 0.958 Inexact Rounded +pwsx4654 power 0.0918 0.5 -> 0.303 Inexact Rounded +pwsx4655 power 0.919 0.5 -> 0.959 Inexact Rounded +pwsx4656 power 0.0919 0.5 -> 0.303 Inexact Rounded +pwsx4657 power 0.921 0.5 -> 0.960 Inexact Rounded +pwsx4658 power 0.0921 0.5 -> 0.303 Inexact Rounded +pwsx4659 power 0.922 0.5 -> 0.960 Inexact Rounded +pwsx4660 power 0.0922 0.5 -> 0.304 Inexact Rounded +pwsx4661 power 0.923 0.5 -> 0.961 Inexact Rounded +pwsx4662 power 0.0923 0.5 -> 0.304 Inexact Rounded +pwsx4663 power 0.924 0.5 -> 0.961 Inexact Rounded +pwsx4664 power 0.0924 0.5 -> 0.304 Inexact Rounded +pwsx4665 power 0.925 0.5 -> 0.962 Inexact Rounded +pwsx4666 power 0.0925 0.5 -> 0.304 Inexact Rounded +pwsx4667 power 0.926 0.5 -> 0.962 Inexact Rounded +pwsx4668 power 0.0926 0.5 -> 0.304 Inexact Rounded +pwsx4669 power 0.927 0.5 -> 0.963 Inexact Rounded +pwsx4670 power 0.0927 0.5 -> 0.304 Inexact Rounded +pwsx4671 power 0.928 0.5 -> 0.963 Inexact Rounded +pwsx4672 power 0.0928 0.5 -> 0.305 Inexact Rounded +pwsx4673 power 0.929 0.5 -> 0.964 Inexact Rounded +pwsx4674 power 0.0929 0.5 -> 0.305 Inexact Rounded +pwsx4675 power 0.931 0.5 -> 0.965 Inexact Rounded +pwsx4676 power 0.0931 0.5 -> 0.305 Inexact Rounded +pwsx4677 power 0.932 0.5 -> 0.965 Inexact Rounded +pwsx4678 power 0.0932 0.5 -> 0.305 Inexact Rounded +pwsx4679 power 0.933 0.5 -> 0.966 Inexact Rounded +pwsx4680 power 0.0933 0.5 -> 0.305 Inexact Rounded +pwsx4681 power 0.934 0.5 -> 0.966 Inexact Rounded +pwsx4682 power 0.0934 0.5 -> 0.306 Inexact Rounded +pwsx4683 power 0.935 0.5 -> 0.967 Inexact Rounded +pwsx4684 power 0.0935 0.5 -> 0.306 Inexact Rounded +pwsx4685 power 0.936 0.5 -> 0.967 Inexact Rounded +pwsx4686 power 0.0936 0.5 -> 0.306 Inexact Rounded +pwsx4687 power 0.937 0.5 -> 0.968 Inexact Rounded +pwsx4688 power 0.0937 0.5 -> 0.306 Inexact Rounded +pwsx4689 power 0.938 0.5 -> 0.969 Inexact Rounded +pwsx4690 power 0.0938 0.5 -> 0.306 Inexact Rounded +pwsx4691 power 0.939 0.5 -> 0.969 Inexact Rounded +pwsx4692 power 0.0939 0.5 -> 0.306 Inexact Rounded +pwsx4693 power 0.941 0.5 -> 0.970 Inexact Rounded +pwsx4694 power 0.0941 0.5 -> 0.307 Inexact Rounded +pwsx4695 power 0.942 0.5 -> 0.971 Inexact Rounded +pwsx4696 power 0.0942 0.5 -> 0.307 Inexact Rounded +pwsx4697 power 0.943 0.5 -> 0.971 Inexact Rounded +pwsx4698 power 0.0943 0.5 -> 0.307 Inexact Rounded +pwsx4699 power 0.944 0.5 -> 0.972 Inexact Rounded +pwsx4700 power 0.0944 0.5 -> 0.307 Inexact Rounded +pwsx4701 power 0.945 0.5 -> 0.972 Inexact Rounded +pwsx4702 power 0.0945 0.5 -> 0.307 Inexact Rounded +pwsx4703 power 0.946 0.5 -> 0.973 Inexact Rounded +pwsx4704 power 0.0946 0.5 -> 0.308 Inexact Rounded +pwsx4705 power 0.947 0.5 -> 0.973 Inexact Rounded +pwsx4706 power 0.0947 0.5 -> 0.308 Inexact Rounded +pwsx4707 power 0.948 0.5 -> 0.974 Inexact Rounded +pwsx4708 power 0.0948 0.5 -> 0.308 Inexact Rounded +pwsx4709 power 0.949 0.5 -> 0.974 Inexact Rounded +pwsx4710 power 0.0949 0.5 -> 0.308 Inexact Rounded +pwsx4711 power 0.951 0.5 -> 0.975 Inexact Rounded +pwsx4712 power 0.0951 0.5 -> 0.308 Inexact Rounded +pwsx4713 power 0.952 0.5 -> 0.976 Inexact Rounded +pwsx4714 power 0.0952 0.5 -> 0.309 Inexact Rounded +pwsx4715 power 0.953 0.5 -> 0.976 Inexact Rounded +pwsx4716 power 0.0953 0.5 -> 0.309 Inexact Rounded +pwsx4717 power 0.954 0.5 -> 0.977 Inexact Rounded +pwsx4718 power 0.0954 0.5 -> 0.309 Inexact Rounded +pwsx4719 power 0.955 0.5 -> 0.977 Inexact Rounded +pwsx4720 power 0.0955 0.5 -> 0.309 Inexact Rounded +pwsx4721 power 0.956 0.5 -> 0.978 Inexact Rounded +pwsx4722 power 0.0956 0.5 -> 0.309 Inexact Rounded +pwsx4723 power 0.957 0.5 -> 0.978 Inexact Rounded +pwsx4724 power 0.0957 0.5 -> 0.309 Inexact Rounded +pwsx4725 power 0.958 0.5 -> 0.979 Inexact Rounded +pwsx4726 power 0.0958 0.5 -> 0.310 Inexact Rounded +pwsx4727 power 0.959 0.5 -> 0.979 Inexact Rounded +pwsx4728 power 0.0959 0.5 -> 0.310 Inexact Rounded +pwsx4729 power 0.961 0.5 -> 0.980 Inexact Rounded +pwsx4730 power 0.0961 0.5 -> 0.310 Inexact Rounded +pwsx4731 power 0.962 0.5 -> 0.981 Inexact Rounded +pwsx4732 power 0.0962 0.5 -> 0.310 Inexact Rounded +pwsx4733 power 0.963 0.5 -> 0.981 Inexact Rounded +pwsx4734 power 0.0963 0.5 -> 0.310 Inexact Rounded +pwsx4735 power 0.964 0.5 -> 0.982 Inexact Rounded +pwsx4736 power 0.0964 0.5 -> 0.310 Inexact Rounded +pwsx4737 power 0.965 0.5 -> 0.982 Inexact Rounded +pwsx4738 power 0.0965 0.5 -> 0.311 Inexact Rounded +pwsx4739 power 0.966 0.5 -> 0.983 Inexact Rounded +pwsx4740 power 0.0966 0.5 -> 0.311 Inexact Rounded +pwsx4741 power 0.967 0.5 -> 0.983 Inexact Rounded +pwsx4742 power 0.0967 0.5 -> 0.311 Inexact Rounded +pwsx4743 power 0.968 0.5 -> 0.984 Inexact Rounded +pwsx4744 power 0.0968 0.5 -> 0.311 Inexact Rounded +pwsx4745 power 0.969 0.5 -> 0.984 Inexact Rounded +pwsx4746 power 0.0969 0.5 -> 0.311 Inexact Rounded +pwsx4747 power 0.971 0.5 -> 0.985 Inexact Rounded +pwsx4748 power 0.0971 0.5 -> 0.312 Inexact Rounded +pwsx4749 power 0.972 0.5 -> 0.986 Inexact Rounded +pwsx4750 power 0.0972 0.5 -> 0.312 Inexact Rounded +pwsx4751 power 0.973 0.5 -> 0.986 Inexact Rounded +pwsx4752 power 0.0973 0.5 -> 0.312 Inexact Rounded +pwsx4753 power 0.974 0.5 -> 0.987 Inexact Rounded +pwsx4754 power 0.0974 0.5 -> 0.312 Inexact Rounded +pwsx4755 power 0.975 0.5 -> 0.987 Inexact Rounded +pwsx4756 power 0.0975 0.5 -> 0.312 Inexact Rounded +pwsx4757 power 0.976 0.5 -> 0.988 Inexact Rounded +pwsx4758 power 0.0976 0.5 -> 0.312 Inexact Rounded +pwsx4759 power 0.977 0.5 -> 0.988 Inexact Rounded +pwsx4760 power 0.0977 0.5 -> 0.313 Inexact Rounded +pwsx4761 power 0.978 0.5 -> 0.989 Inexact Rounded +pwsx4762 power 0.0978 0.5 -> 0.313 Inexact Rounded +pwsx4763 power 0.979 0.5 -> 0.989 Inexact Rounded +pwsx4764 power 0.0979 0.5 -> 0.313 Inexact Rounded +pwsx4765 power 0.981 0.5 -> 0.990 Inexact Rounded +pwsx4766 power 0.0981 0.5 -> 0.313 Inexact Rounded +pwsx4767 power 0.982 0.5 -> 0.991 Inexact Rounded +pwsx4768 power 0.0982 0.5 -> 0.313 Inexact Rounded +pwsx4769 power 0.983 0.5 -> 0.991 Inexact Rounded +pwsx4770 power 0.0983 0.5 -> 0.314 Inexact Rounded +pwsx4771 power 0.984 0.5 -> 0.992 Inexact Rounded +pwsx4772 power 0.0984 0.5 -> 0.314 Inexact Rounded +pwsx4773 power 0.985 0.5 -> 0.992 Inexact Rounded +pwsx4774 power 0.0985 0.5 -> 0.314 Inexact Rounded +pwsx4775 power 0.986 0.5 -> 0.993 Inexact Rounded +pwsx4776 power 0.0986 0.5 -> 0.314 Inexact Rounded +pwsx4777 power 0.987 0.5 -> 0.993 Inexact Rounded +pwsx4778 power 0.0987 0.5 -> 0.314 Inexact Rounded +pwsx4779 power 0.988 0.5 -> 0.994 Inexact Rounded +pwsx4780 power 0.0988 0.5 -> 0.314 Inexact Rounded +pwsx4781 power 0.989 0.5 -> 0.994 Inexact Rounded +pwsx4782 power 0.0989 0.5 -> 0.314 Inexact Rounded +pwsx4783 power 0.991 0.5 -> 0.995 Inexact Rounded +pwsx4784 power 0.0991 0.5 -> 0.315 Inexact Rounded +pwsx4785 power 0.992 0.5 -> 0.996 Inexact Rounded +pwsx4786 power 0.0992 0.5 -> 0.315 Inexact Rounded +pwsx4787 power 0.993 0.5 -> 0.996 Inexact Rounded +pwsx4788 power 0.0993 0.5 -> 0.315 Inexact Rounded +pwsx4789 power 0.994 0.5 -> 0.997 Inexact Rounded +pwsx4790 power 0.0994 0.5 -> 0.315 Inexact Rounded +pwsx4791 power 0.995 0.5 -> 0.997 Inexact Rounded +pwsx4792 power 0.0995 0.5 -> 0.315 Inexact Rounded +pwsx4793 power 0.996 0.5 -> 0.998 Inexact Rounded +pwsx4794 power 0.0996 0.5 -> 0.316 Inexact Rounded +pwsx4795 power 0.997 0.5 -> 0.998 Inexact Rounded +pwsx4796 power 0.0997 0.5 -> 0.316 Inexact Rounded +pwsx4797 power 0.998 0.5 -> 0.999 Inexact Rounded +pwsx4798 power 0.0998 0.5 -> 0.316 Inexact Rounded +pwsx4799 power 0.999 0.5 -> 0.999 Inexact Rounded +pwsx4800 power 0.0999 0.5 -> 0.316 Inexact Rounded + +-- A group of precision 4 tests where Hull & Abrham adjustments are +-- needed in some cases (both up and down) [see Hull1985b] +rounding: half_even +maxExponent: 999 +minexponent: -999 +precision: 4 +pwsx5001 power 0.0118 0.5 -> 0.1086 Inexact Rounded +pwsx5002 power 0.119 0.5 -> 0.3450 Inexact Rounded +pwsx5003 power 0.0119 0.5 -> 0.1091 Inexact Rounded +pwsx5004 power 0.121 0.5 -> 0.3479 Inexact Rounded +pwsx5005 power 0.0121 0.5 -> 0.1100 Inexact Rounded +pwsx5006 power 0.122 0.5 -> 0.3493 Inexact Rounded +pwsx5007 power 0.0122 0.5 -> 0.1105 Inexact Rounded +pwsx5008 power 0.123 0.5 -> 0.3507 Inexact Rounded +pwsx5009 power 0.494 0.5 -> 0.7029 Inexact Rounded +pwsx5010 power 0.0669 0.5 -> 0.2587 Inexact Rounded +pwsx5011 power 0.9558 0.5 -> 0.9777 Inexact Rounded +pwsx5012 power 0.9348 0.5 -> 0.9669 Inexact Rounded +pwsx5013 power 0.9345 0.5 -> 0.9667 Inexact Rounded +pwsx5014 power 0.09345 0.5 -> 0.3057 Inexact Rounded +pwsx5015 power 0.9346 0.5 -> 0.9667 Inexact Rounded +pwsx5016 power 0.09346 0.5 -> 0.3057 Inexact Rounded +pwsx5017 power 0.9347 0.5 -> 0.9668 Inexact Rounded + +-- examples from decArith +precision: 9 +pwsx700 power 0 0.5 -> '0' +pwsx701 power -0 0.5 -> '0' +pwsx702 power 0.39 0.5 -> 0.624499800 Inexact Rounded +pwsx703 power 100 0.5 -> '10.0000000' Inexact Rounded +pwsx704 power 1.00 0.5 -> '1.00000000' Inexact Rounded +pwsx705 power 7 0.5 -> '2.64575131' Inexact Rounded +pwsx706 power 10 0.5 -> 3.16227766 Inexact Rounded + +-- some one-offs +precision: 9 +pwsx711 power 0.1 0.5 -> 0.316227766 Inexact Rounded +pwsx712 power 0.2 0.5 -> 0.447213595 Inexact Rounded +pwsx713 power 0.3 0.5 -> 0.547722558 Inexact Rounded +pwsx714 power 0.4 0.5 -> 0.632455532 Inexact Rounded +pwsx715 power 0.5 0.5 -> 0.707106781 Inexact Rounded +pwsx716 power 0.6 0.5 -> 0.774596669 Inexact Rounded +pwsx717 power 0.7 0.5 -> 0.836660027 Inexact Rounded +pwsx718 power 0.8 0.5 -> 0.894427191 Inexact Rounded +pwsx719 power 0.9 0.5 -> 0.948683298 Inexact Rounded +precision: 10 -- note no normalizatoin here +pwsx720 power +0.1 0.5 -> 0.3162277660 Inexact Rounded +precision: 11 +pwsx721 power +0.1 0.5 -> 0.31622776602 Inexact Rounded +precision: 12 +pwsx722 power +0.1 0.5 -> 0.316227766017 Inexact Rounded +precision: 9 +pwsx723 power 0.39 0.5 -> 0.624499800 Inexact Rounded +precision: 15 +pwsx724 power 0.39 0.5 -> 0.624499799839840 Inexact Rounded + +-- discussion cases +precision: 7 +pwsx731 power 9 0.5 -> 3.000000 Inexact Rounded +pwsx732 power 100 0.5 -> 10.00000 Inexact Rounded +pwsx733 power 123 0.5 -> 11.09054 Inexact Rounded +pwsx734 power 144 0.5 -> 12.00000 Inexact Rounded +pwsx735 power 156 0.5 -> 12.49000 Inexact Rounded +pwsx736 power 10000 0.5 -> 100.0000 Inexact Rounded + +-- values close to overflow (if there were input rounding) +maxexponent: 99 +minexponent: -99 +precision: 5 +pwsx760 power 9.9997E+99 0.5 -> 9.9998E+49 Inexact Rounded +pwsx761 power 9.9998E+99 0.5 -> 9.9999E+49 Inexact Rounded +pwsx762 power 9.9999E+99 0.5 -> 9.9999E+49 Inexact Rounded +pwsx763 power 9.99991E+99 0.5 -> 1.0000E+50 Inexact Rounded +pwsx764 power 9.99994E+99 0.5 -> 1.0000E+50 Inexact Rounded +pwsx765 power 9.99995E+99 0.5 -> 1.0000E+50 Inexact Rounded +pwsx766 power 9.99999E+99 0.5 -> 1.0000E+50 Inexact Rounded +precision: 9 +pwsx770 power 9.9997E+99 0.5 -> 9.99985000E+49 Inexact Rounded +pwsx771 power 9.9998E+99 0.5 -> 9.99990000E+49 Inexact Rounded +pwsx772 power 9.9999E+99 0.5 -> 9.99995000E+49 Inexact Rounded +pwsx773 power 9.99991E+99 0.5 -> 9.99995500E+49 Inexact Rounded +pwsx774 power 9.99994E+99 0.5 -> 9.99997000E+49 Inexact Rounded +pwsx775 power 9.99995E+99 0.5 -> 9.99997500E+49 Inexact Rounded +pwsx776 power 9.99999E+99 0.5 -> 9.99999500E+49 Inexact Rounded +precision: 20 +pwsx780 power 9.9997E+99 0.5 -> '9.9998499988749831247E+49' Inexact Rounded +pwsx781 power 9.9998E+99 0.5 -> '9.9998999994999949999E+49' Inexact Rounded +pwsx782 power 9.9999E+99 0.5 -> '9.9999499998749993750E+49' Inexact Rounded +pwsx783 power 9.99991E+99 0.5 -> '9.9999549998987495444E+49' Inexact Rounded +pwsx784 power 9.99994E+99 0.5 -> '9.9999699999549998650E+49' Inexact Rounded +pwsx785 power 9.99995E+99 0.5 -> '9.9999749999687499219E+49' Inexact Rounded +pwsx786 power 9.99999E+99 0.5 -> '9.9999949999987499994E+49' Inexact Rounded + +-- subnormals and underflows [these can only result when eMax is < digits+1] +-- Etiny = -(Emax + (precision-1)) +-- start with subnormal operands and normal results +maxexponent: 9 +minexponent: -9 +precision: 9 -- Etiny=-17 +pwsx800 power 1E-17 0.5 -> 3.16227766E-9 Inexact Rounded +pwsx801 power 10E-17 0.5 -> 1.00000000E-8 Inexact Rounded +precision: 10 -- Etiny=-18 +pwsx802 power 10E-18 0.5 -> 3.162277660E-9 Inexact Rounded +pwsx803 power 1E-18 0.5 -> 1.000000000E-9 Inexact Rounded + +precision: 11 -- Etiny=-19 +pwsx804 power 1E-19 0.5 -> 3.162277660E-10 Underflow Subnormal Inexact Rounded +-- The next test should be skipped for decNumber +pwsx805 power 10E-19 0.5 -> 1.0000000000E-9 Inexact Rounded +precision: 12 -- Etiny=-20 +pwsx806 power 10E-20 0.5 -> 3.1622776602E-10 Underflow Subnormal Inexact Rounded +pwsx807 power 1E-20 0.5 -> 1.0000000000E-10 Underflow Subnormal Inexact Rounded + +precision: 13 -- Etiny=-21 +pwsx808 power 1E-21 0.5 -> 3.1622776602E-11 Underflow Subnormal Inexact Rounded +pwsx809 power 10E-21 0.5 -> 1.00000000000E-10 Underflow Subnormal Inexact Rounded +precision: 14 -- Etiny=-22 +pwsx810 power 1E-21 0.5 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded +pwsx811 power 10E-22 0.5 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded +pwsx812 power 1E-22 0.5 -> 1.00000000000E-11 Underflow Subnormal Inexact Rounded + + +-- special values +maxexponent: 999 +minexponent: -999 +pwsx820 power Inf 0.5 -> Infinity +pwsx821 power -Inf 0.5 -> NaN Invalid_operation +pwsx822 power NaN 0.5 -> NaN +pwsx823 power sNaN 0.5 -> NaN Invalid_operation +-- propagating NaNs +pwsx824 power sNaN123 0.5 -> NaN123 Invalid_operation +pwsx825 power -sNaN321 0.5 -> -NaN321 Invalid_operation +pwsx826 power NaN456 0.5 -> NaN456 +pwsx827 power -NaN654 0.5 -> -NaN654 +pwsx828 power NaN1 0.5 -> NaN1 + +-- Null test +pwsx900 power # 0.5 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/rotate.decTest b/Lib/test/decimaltestdata/rotate.decTest index 12db8213178..81ade79c220 100644 --- a/Lib/test/decimaltestdata/rotate.decTest +++ b/Lib/test/decimaltestdata/rotate.decTest @@ -1,247 +1,247 @@ ------------------------------------------------------------------------- --- rotate.decTest -- rotate coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -rotx001 rotate 0 0 -> 0 -rotx002 rotate 0 2 -> 0 -rotx003 rotate 1 2 -> 100 -rotx004 rotate 34 8 -> 400000003 -rotx005 rotate 1 9 -> 1 -rotx006 rotate 1 -1 -> 100000000 -rotx007 rotate 123456789 -1 -> 912345678 -rotx008 rotate 123456789 -8 -> 234567891 -rotx009 rotate 123456789 -9 -> 123456789 -rotx010 rotate 0 -2 -> 0 - --- rhs must be an integer -rotx011 rotate 1 1.5 -> NaN Invalid_operation -rotx012 rotate 1 1.0 -> NaN Invalid_operation -rotx013 rotate 1 0.1 -> NaN Invalid_operation -rotx014 rotate 1 0.0 -> NaN Invalid_operation -rotx015 rotate 1 1E+1 -> NaN Invalid_operation -rotx016 rotate 1 1E+99 -> NaN Invalid_operation -rotx017 rotate 1 Inf -> NaN Invalid_operation -rotx018 rotate 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -rotx020 rotate 1 -1000 -> NaN Invalid_operation -rotx021 rotate 1 -10 -> NaN Invalid_operation -rotx022 rotate 1 10 -> NaN Invalid_operation -rotx023 rotate 1 1000 -> NaN Invalid_operation - --- full pattern -rotx030 rotate 123456789 -9 -> 123456789 -rotx031 rotate 123456789 -8 -> 234567891 -rotx032 rotate 123456789 -7 -> 345678912 -rotx033 rotate 123456789 -6 -> 456789123 -rotx034 rotate 123456789 -5 -> 567891234 -rotx035 rotate 123456789 -4 -> 678912345 -rotx036 rotate 123456789 -3 -> 789123456 -rotx037 rotate 123456789 -2 -> 891234567 -rotx038 rotate 123456789 -1 -> 912345678 -rotx039 rotate 123456789 -0 -> 123456789 -rotx040 rotate 123456789 +0 -> 123456789 -rotx041 rotate 123456789 +1 -> 234567891 -rotx042 rotate 123456789 +2 -> 345678912 -rotx043 rotate 123456789 +3 -> 456789123 -rotx044 rotate 123456789 +4 -> 567891234 -rotx045 rotate 123456789 +5 -> 678912345 -rotx046 rotate 123456789 +6 -> 789123456 -rotx047 rotate 123456789 +7 -> 891234567 -rotx048 rotate 123456789 +8 -> 912345678 -rotx049 rotate 123456789 +9 -> 123456789 - --- zeros -rotx060 rotate 0E-10 +9 -> 0E-10 -rotx061 rotate 0E-10 -9 -> 0E-10 -rotx062 rotate 0.000 +9 -> 0.000 -rotx063 rotate 0.000 -9 -> 0.000 -rotx064 rotate 0E+10 +9 -> 0E+10 -rotx065 rotate 0E+10 -9 -> 0E+10 -rotx066 rotate -0E-10 +9 -> -0E-10 -rotx067 rotate -0E-10 -9 -> -0E-10 -rotx068 rotate -0.000 +9 -> -0.000 -rotx069 rotate -0.000 -9 -> -0.000 -rotx070 rotate -0E+10 +9 -> -0E+10 -rotx071 rotate -0E+10 -9 -> -0E+10 - --- Nmax, Nmin, Ntiny -rotx141 rotate 9.99999999E+999 -1 -> 9.99999999E+999 -rotx142 rotate 9.99999999E+999 -8 -> 9.99999999E+999 -rotx143 rotate 9.99999999E+999 1 -> 9.99999999E+999 -rotx144 rotate 9.99999999E+999 8 -> 9.99999999E+999 -rotx145 rotate 1E-999 -1 -> 1.00000000E-991 -rotx146 rotate 1E-999 -8 -> 1.0E-998 -rotx147 rotate 1E-999 1 -> 1.0E-998 -rotx148 rotate 1E-999 8 -> 1.00000000E-991 -rotx151 rotate 1.00000000E-999 -1 -> 1.0000000E-1000 -rotx152 rotate 1.00000000E-999 -8 -> 1E-1007 -rotx153 rotate 1.00000000E-999 1 -> 1E-1007 -rotx154 rotate 1.00000000E-999 8 -> 1.0000000E-1000 -rotx155 rotate 9.00000000E-999 -1 -> 9.0000000E-1000 -rotx156 rotate 9.00000000E-999 -8 -> 9E-1007 -rotx157 rotate 9.00000000E-999 1 -> 9E-1007 -rotx158 rotate 9.00000000E-999 8 -> 9.0000000E-1000 -rotx160 rotate 1E-1007 -1 -> 1.00000000E-999 -rotx161 rotate 1E-1007 -8 -> 1.0E-1006 -rotx162 rotate 1E-1007 1 -> 1.0E-1006 -rotx163 rotate 1E-1007 8 -> 1.00000000E-999 --- negatives -rotx171 rotate -9.99999999E+999 -1 -> -9.99999999E+999 -rotx172 rotate -9.99999999E+999 -8 -> -9.99999999E+999 -rotx173 rotate -9.99999999E+999 1 -> -9.99999999E+999 -rotx174 rotate -9.99999999E+999 8 -> -9.99999999E+999 -rotx175 rotate -1E-999 -1 -> -1.00000000E-991 -rotx176 rotate -1E-999 -8 -> -1.0E-998 -rotx177 rotate -1E-999 1 -> -1.0E-998 -rotx178 rotate -1E-999 8 -> -1.00000000E-991 -rotx181 rotate -1.00000000E-999 -1 -> -1.0000000E-1000 -rotx182 rotate -1.00000000E-999 -8 -> -1E-1007 -rotx183 rotate -1.00000000E-999 1 -> -1E-1007 -rotx184 rotate -1.00000000E-999 8 -> -1.0000000E-1000 -rotx185 rotate -9.00000000E-999 -1 -> -9.0000000E-1000 -rotx186 rotate -9.00000000E-999 -8 -> -9E-1007 -rotx187 rotate -9.00000000E-999 1 -> -9E-1007 -rotx188 rotate -9.00000000E-999 8 -> -9.0000000E-1000 -rotx190 rotate -1E-1007 -1 -> -1.00000000E-999 -rotx191 rotate -1E-1007 -8 -> -1.0E-1006 -rotx192 rotate -1E-1007 1 -> -1.0E-1006 -rotx193 rotate -1E-1007 8 -> -1.00000000E-999 - --- more negatives (of sanities) -rotx201 rotate -0 0 -> -0 -rotx202 rotate -0 2 -> -0 -rotx203 rotate -1 2 -> -100 -rotx204 rotate -1 8 -> -100000000 -rotx205 rotate -1 9 -> -1 -rotx206 rotate -1 -1 -> -100000000 -rotx207 rotate -123456789 -1 -> -912345678 -rotx208 rotate -123456789 -8 -> -234567891 -rotx209 rotate -123456789 -9 -> -123456789 -rotx210 rotate -0 -2 -> -0 - --- Specials; NaNs are handled as usual -rotx781 rotate -Inf -8 -> -Infinity -rotx782 rotate -Inf -1 -> -Infinity -rotx783 rotate -Inf -0 -> -Infinity -rotx784 rotate -Inf 0 -> -Infinity -rotx785 rotate -Inf 1 -> -Infinity -rotx786 rotate -Inf 8 -> -Infinity -rotx787 rotate -1000 -Inf -> NaN Invalid_operation -rotx788 rotate -Inf -Inf -> NaN Invalid_operation -rotx789 rotate -1 -Inf -> NaN Invalid_operation -rotx790 rotate -0 -Inf -> NaN Invalid_operation -rotx791 rotate 0 -Inf -> NaN Invalid_operation -rotx792 rotate 1 -Inf -> NaN Invalid_operation -rotx793 rotate 1000 -Inf -> NaN Invalid_operation -rotx794 rotate Inf -Inf -> NaN Invalid_operation - -rotx800 rotate Inf -Inf -> NaN Invalid_operation -rotx801 rotate Inf -8 -> Infinity -rotx802 rotate Inf -1 -> Infinity -rotx803 rotate Inf -0 -> Infinity -rotx804 rotate Inf 0 -> Infinity -rotx805 rotate Inf 1 -> Infinity -rotx806 rotate Inf 8 -> Infinity -rotx807 rotate Inf Inf -> NaN Invalid_operation -rotx808 rotate -1000 Inf -> NaN Invalid_operation -rotx809 rotate -Inf Inf -> NaN Invalid_operation -rotx810 rotate -1 Inf -> NaN Invalid_operation -rotx811 rotate -0 Inf -> NaN Invalid_operation -rotx812 rotate 0 Inf -> NaN Invalid_operation -rotx813 rotate 1 Inf -> NaN Invalid_operation -rotx814 rotate 1000 Inf -> NaN Invalid_operation -rotx815 rotate Inf Inf -> NaN Invalid_operation - -rotx821 rotate NaN -Inf -> NaN -rotx822 rotate NaN -1000 -> NaN -rotx823 rotate NaN -1 -> NaN -rotx824 rotate NaN -0 -> NaN -rotx825 rotate NaN 0 -> NaN -rotx826 rotate NaN 1 -> NaN -rotx827 rotate NaN 1000 -> NaN -rotx828 rotate NaN Inf -> NaN -rotx829 rotate NaN NaN -> NaN -rotx830 rotate -Inf NaN -> NaN -rotx831 rotate -1000 NaN -> NaN -rotx832 rotate -1 NaN -> NaN -rotx833 rotate -0 NaN -> NaN -rotx834 rotate 0 NaN -> NaN -rotx835 rotate 1 NaN -> NaN -rotx836 rotate 1000 NaN -> NaN -rotx837 rotate Inf NaN -> NaN - - - -rotx841 rotate sNaN -Inf -> NaN Invalid_operation -rotx842 rotate sNaN -1000 -> NaN Invalid_operation -rotx843 rotate sNaN -1 -> NaN Invalid_operation -rotx844 rotate sNaN -0 -> NaN Invalid_operation -rotx845 rotate sNaN 0 -> NaN Invalid_operation -rotx846 rotate sNaN 1 -> NaN Invalid_operation -rotx847 rotate sNaN 1000 -> NaN Invalid_operation -rotx848 rotate sNaN NaN -> NaN Invalid_operation -rotx849 rotate sNaN sNaN -> NaN Invalid_operation -rotx850 rotate NaN sNaN -> NaN Invalid_operation -rotx851 rotate -Inf sNaN -> NaN Invalid_operation -rotx852 rotate -1000 sNaN -> NaN Invalid_operation -rotx853 rotate -1 sNaN -> NaN Invalid_operation -rotx854 rotate -0 sNaN -> NaN Invalid_operation -rotx855 rotate 0 sNaN -> NaN Invalid_operation -rotx856 rotate 1 sNaN -> NaN Invalid_operation -rotx857 rotate 1000 sNaN -> NaN Invalid_operation -rotx858 rotate Inf sNaN -> NaN Invalid_operation -rotx859 rotate NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -rotx861 rotate NaN1 -Inf -> NaN1 -rotx862 rotate +NaN2 -1000 -> NaN2 -rotx863 rotate NaN3 1000 -> NaN3 -rotx864 rotate NaN4 Inf -> NaN4 -rotx865 rotate NaN5 +NaN6 -> NaN5 -rotx866 rotate -Inf NaN7 -> NaN7 -rotx867 rotate -1000 NaN8 -> NaN8 -rotx868 rotate 1000 NaN9 -> NaN9 -rotx869 rotate Inf +NaN10 -> NaN10 -rotx871 rotate sNaN11 -Inf -> NaN11 Invalid_operation -rotx872 rotate sNaN12 -1000 -> NaN12 Invalid_operation -rotx873 rotate sNaN13 1000 -> NaN13 Invalid_operation -rotx874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation -rotx875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation -rotx876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation -rotx877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation -rotx878 rotate -1000 sNaN21 -> NaN21 Invalid_operation -rotx879 rotate 1000 sNaN22 -> NaN22 Invalid_operation -rotx880 rotate Inf sNaN23 -> NaN23 Invalid_operation -rotx881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation -rotx882 rotate -NaN26 NaN28 -> -NaN26 -rotx883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation -rotx884 rotate 1000 -NaN30 -> -NaN30 -rotx885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation - --- payload decapitate -precision: 5 -rotx886 rotate 11 -sNaN1234567890 -> -NaN67890 Invalid_operation +------------------------------------------------------------------------ +-- rotate.decTest -- rotate coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +rotx001 rotate 0 0 -> 0 +rotx002 rotate 0 2 -> 0 +rotx003 rotate 1 2 -> 100 +rotx004 rotate 34 8 -> 400000003 +rotx005 rotate 1 9 -> 1 +rotx006 rotate 1 -1 -> 100000000 +rotx007 rotate 123456789 -1 -> 912345678 +rotx008 rotate 123456789 -8 -> 234567891 +rotx009 rotate 123456789 -9 -> 123456789 +rotx010 rotate 0 -2 -> 0 + +-- rhs must be an integer +rotx011 rotate 1 1.5 -> NaN Invalid_operation +rotx012 rotate 1 1.0 -> NaN Invalid_operation +rotx013 rotate 1 0.1 -> NaN Invalid_operation +rotx014 rotate 1 0.0 -> NaN Invalid_operation +rotx015 rotate 1 1E+1 -> NaN Invalid_operation +rotx016 rotate 1 1E+99 -> NaN Invalid_operation +rotx017 rotate 1 Inf -> NaN Invalid_operation +rotx018 rotate 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +rotx020 rotate 1 -1000 -> NaN Invalid_operation +rotx021 rotate 1 -10 -> NaN Invalid_operation +rotx022 rotate 1 10 -> NaN Invalid_operation +rotx023 rotate 1 1000 -> NaN Invalid_operation + +-- full pattern +rotx030 rotate 123456789 -9 -> 123456789 +rotx031 rotate 123456789 -8 -> 234567891 +rotx032 rotate 123456789 -7 -> 345678912 +rotx033 rotate 123456789 -6 -> 456789123 +rotx034 rotate 123456789 -5 -> 567891234 +rotx035 rotate 123456789 -4 -> 678912345 +rotx036 rotate 123456789 -3 -> 789123456 +rotx037 rotate 123456789 -2 -> 891234567 +rotx038 rotate 123456789 -1 -> 912345678 +rotx039 rotate 123456789 -0 -> 123456789 +rotx040 rotate 123456789 +0 -> 123456789 +rotx041 rotate 123456789 +1 -> 234567891 +rotx042 rotate 123456789 +2 -> 345678912 +rotx043 rotate 123456789 +3 -> 456789123 +rotx044 rotate 123456789 +4 -> 567891234 +rotx045 rotate 123456789 +5 -> 678912345 +rotx046 rotate 123456789 +6 -> 789123456 +rotx047 rotate 123456789 +7 -> 891234567 +rotx048 rotate 123456789 +8 -> 912345678 +rotx049 rotate 123456789 +9 -> 123456789 + +-- zeros +rotx060 rotate 0E-10 +9 -> 0E-10 +rotx061 rotate 0E-10 -9 -> 0E-10 +rotx062 rotate 0.000 +9 -> 0.000 +rotx063 rotate 0.000 -9 -> 0.000 +rotx064 rotate 0E+10 +9 -> 0E+10 +rotx065 rotate 0E+10 -9 -> 0E+10 +rotx066 rotate -0E-10 +9 -> -0E-10 +rotx067 rotate -0E-10 -9 -> -0E-10 +rotx068 rotate -0.000 +9 -> -0.000 +rotx069 rotate -0.000 -9 -> -0.000 +rotx070 rotate -0E+10 +9 -> -0E+10 +rotx071 rotate -0E+10 -9 -> -0E+10 + +-- Nmax, Nmin, Ntiny +rotx141 rotate 9.99999999E+999 -1 -> 9.99999999E+999 +rotx142 rotate 9.99999999E+999 -8 -> 9.99999999E+999 +rotx143 rotate 9.99999999E+999 1 -> 9.99999999E+999 +rotx144 rotate 9.99999999E+999 8 -> 9.99999999E+999 +rotx145 rotate 1E-999 -1 -> 1.00000000E-991 +rotx146 rotate 1E-999 -8 -> 1.0E-998 +rotx147 rotate 1E-999 1 -> 1.0E-998 +rotx148 rotate 1E-999 8 -> 1.00000000E-991 +rotx151 rotate 1.00000000E-999 -1 -> 1.0000000E-1000 +rotx152 rotate 1.00000000E-999 -8 -> 1E-1007 +rotx153 rotate 1.00000000E-999 1 -> 1E-1007 +rotx154 rotate 1.00000000E-999 8 -> 1.0000000E-1000 +rotx155 rotate 9.00000000E-999 -1 -> 9.0000000E-1000 +rotx156 rotate 9.00000000E-999 -8 -> 9E-1007 +rotx157 rotate 9.00000000E-999 1 -> 9E-1007 +rotx158 rotate 9.00000000E-999 8 -> 9.0000000E-1000 +rotx160 rotate 1E-1007 -1 -> 1.00000000E-999 +rotx161 rotate 1E-1007 -8 -> 1.0E-1006 +rotx162 rotate 1E-1007 1 -> 1.0E-1006 +rotx163 rotate 1E-1007 8 -> 1.00000000E-999 +-- negatives +rotx171 rotate -9.99999999E+999 -1 -> -9.99999999E+999 +rotx172 rotate -9.99999999E+999 -8 -> -9.99999999E+999 +rotx173 rotate -9.99999999E+999 1 -> -9.99999999E+999 +rotx174 rotate -9.99999999E+999 8 -> -9.99999999E+999 +rotx175 rotate -1E-999 -1 -> -1.00000000E-991 +rotx176 rotate -1E-999 -8 -> -1.0E-998 +rotx177 rotate -1E-999 1 -> -1.0E-998 +rotx178 rotate -1E-999 8 -> -1.00000000E-991 +rotx181 rotate -1.00000000E-999 -1 -> -1.0000000E-1000 +rotx182 rotate -1.00000000E-999 -8 -> -1E-1007 +rotx183 rotate -1.00000000E-999 1 -> -1E-1007 +rotx184 rotate -1.00000000E-999 8 -> -1.0000000E-1000 +rotx185 rotate -9.00000000E-999 -1 -> -9.0000000E-1000 +rotx186 rotate -9.00000000E-999 -8 -> -9E-1007 +rotx187 rotate -9.00000000E-999 1 -> -9E-1007 +rotx188 rotate -9.00000000E-999 8 -> -9.0000000E-1000 +rotx190 rotate -1E-1007 -1 -> -1.00000000E-999 +rotx191 rotate -1E-1007 -8 -> -1.0E-1006 +rotx192 rotate -1E-1007 1 -> -1.0E-1006 +rotx193 rotate -1E-1007 8 -> -1.00000000E-999 + +-- more negatives (of sanities) +rotx201 rotate -0 0 -> -0 +rotx202 rotate -0 2 -> -0 +rotx203 rotate -1 2 -> -100 +rotx204 rotate -1 8 -> -100000000 +rotx205 rotate -1 9 -> -1 +rotx206 rotate -1 -1 -> -100000000 +rotx207 rotate -123456789 -1 -> -912345678 +rotx208 rotate -123456789 -8 -> -234567891 +rotx209 rotate -123456789 -9 -> -123456789 +rotx210 rotate -0 -2 -> -0 + +-- Specials; NaNs are handled as usual +rotx781 rotate -Inf -8 -> -Infinity +rotx782 rotate -Inf -1 -> -Infinity +rotx783 rotate -Inf -0 -> -Infinity +rotx784 rotate -Inf 0 -> -Infinity +rotx785 rotate -Inf 1 -> -Infinity +rotx786 rotate -Inf 8 -> -Infinity +rotx787 rotate -1000 -Inf -> NaN Invalid_operation +rotx788 rotate -Inf -Inf -> NaN Invalid_operation +rotx789 rotate -1 -Inf -> NaN Invalid_operation +rotx790 rotate -0 -Inf -> NaN Invalid_operation +rotx791 rotate 0 -Inf -> NaN Invalid_operation +rotx792 rotate 1 -Inf -> NaN Invalid_operation +rotx793 rotate 1000 -Inf -> NaN Invalid_operation +rotx794 rotate Inf -Inf -> NaN Invalid_operation + +rotx800 rotate Inf -Inf -> NaN Invalid_operation +rotx801 rotate Inf -8 -> Infinity +rotx802 rotate Inf -1 -> Infinity +rotx803 rotate Inf -0 -> Infinity +rotx804 rotate Inf 0 -> Infinity +rotx805 rotate Inf 1 -> Infinity +rotx806 rotate Inf 8 -> Infinity +rotx807 rotate Inf Inf -> NaN Invalid_operation +rotx808 rotate -1000 Inf -> NaN Invalid_operation +rotx809 rotate -Inf Inf -> NaN Invalid_operation +rotx810 rotate -1 Inf -> NaN Invalid_operation +rotx811 rotate -0 Inf -> NaN Invalid_operation +rotx812 rotate 0 Inf -> NaN Invalid_operation +rotx813 rotate 1 Inf -> NaN Invalid_operation +rotx814 rotate 1000 Inf -> NaN Invalid_operation +rotx815 rotate Inf Inf -> NaN Invalid_operation + +rotx821 rotate NaN -Inf -> NaN +rotx822 rotate NaN -1000 -> NaN +rotx823 rotate NaN -1 -> NaN +rotx824 rotate NaN -0 -> NaN +rotx825 rotate NaN 0 -> NaN +rotx826 rotate NaN 1 -> NaN +rotx827 rotate NaN 1000 -> NaN +rotx828 rotate NaN Inf -> NaN +rotx829 rotate NaN NaN -> NaN +rotx830 rotate -Inf NaN -> NaN +rotx831 rotate -1000 NaN -> NaN +rotx832 rotate -1 NaN -> NaN +rotx833 rotate -0 NaN -> NaN +rotx834 rotate 0 NaN -> NaN +rotx835 rotate 1 NaN -> NaN +rotx836 rotate 1000 NaN -> NaN +rotx837 rotate Inf NaN -> NaN + + + +rotx841 rotate sNaN -Inf -> NaN Invalid_operation +rotx842 rotate sNaN -1000 -> NaN Invalid_operation +rotx843 rotate sNaN -1 -> NaN Invalid_operation +rotx844 rotate sNaN -0 -> NaN Invalid_operation +rotx845 rotate sNaN 0 -> NaN Invalid_operation +rotx846 rotate sNaN 1 -> NaN Invalid_operation +rotx847 rotate sNaN 1000 -> NaN Invalid_operation +rotx848 rotate sNaN NaN -> NaN Invalid_operation +rotx849 rotate sNaN sNaN -> NaN Invalid_operation +rotx850 rotate NaN sNaN -> NaN Invalid_operation +rotx851 rotate -Inf sNaN -> NaN Invalid_operation +rotx852 rotate -1000 sNaN -> NaN Invalid_operation +rotx853 rotate -1 sNaN -> NaN Invalid_operation +rotx854 rotate -0 sNaN -> NaN Invalid_operation +rotx855 rotate 0 sNaN -> NaN Invalid_operation +rotx856 rotate 1 sNaN -> NaN Invalid_operation +rotx857 rotate 1000 sNaN -> NaN Invalid_operation +rotx858 rotate Inf sNaN -> NaN Invalid_operation +rotx859 rotate NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +rotx861 rotate NaN1 -Inf -> NaN1 +rotx862 rotate +NaN2 -1000 -> NaN2 +rotx863 rotate NaN3 1000 -> NaN3 +rotx864 rotate NaN4 Inf -> NaN4 +rotx865 rotate NaN5 +NaN6 -> NaN5 +rotx866 rotate -Inf NaN7 -> NaN7 +rotx867 rotate -1000 NaN8 -> NaN8 +rotx868 rotate 1000 NaN9 -> NaN9 +rotx869 rotate Inf +NaN10 -> NaN10 +rotx871 rotate sNaN11 -Inf -> NaN11 Invalid_operation +rotx872 rotate sNaN12 -1000 -> NaN12 Invalid_operation +rotx873 rotate sNaN13 1000 -> NaN13 Invalid_operation +rotx874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation +rotx875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation +rotx876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation +rotx877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation +rotx878 rotate -1000 sNaN21 -> NaN21 Invalid_operation +rotx879 rotate 1000 sNaN22 -> NaN22 Invalid_operation +rotx880 rotate Inf sNaN23 -> NaN23 Invalid_operation +rotx881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation +rotx882 rotate -NaN26 NaN28 -> -NaN26 +rotx883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation +rotx884 rotate 1000 -NaN30 -> -NaN30 +rotx885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- payload decapitate +precision: 5 +rotx886 rotate 11 -sNaN1234567890 -> -NaN67890 Invalid_operation diff --git a/Lib/test/decimaltestdata/scaleb.decTest b/Lib/test/decimaltestdata/scaleb.decTest index 372e3dd4c3e..04a65d6eae8 100644 --- a/Lib/test/decimaltestdata/scaleb.decTest +++ b/Lib/test/decimaltestdata/scaleb.decTest @@ -1,209 +1,209 @@ ------------------------------------------------------------------------- --- scaleb.decTest -- scale a number by powers of 10 -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Max |rhs| is 2*(999+9) = 2016 - --- Sanity checks -scbx001 scaleb 7.50 10 -> 7.50E+10 -scbx002 scaleb 7.50 3 -> 7.50E+3 -scbx003 scaleb 7.50 2 -> 750 -scbx004 scaleb 7.50 1 -> 75.0 -scbx005 scaleb 7.50 0 -> 7.50 -scbx006 scaleb 7.50 -1 -> 0.750 -scbx007 scaleb 7.50 -2 -> 0.0750 -scbx008 scaleb 7.50 -10 -> 7.50E-10 -scbx009 scaleb -7.50 3 -> -7.50E+3 -scbx010 scaleb -7.50 2 -> -750 -scbx011 scaleb -7.50 1 -> -75.0 -scbx012 scaleb -7.50 0 -> -7.50 -scbx013 scaleb -7.50 -1 -> -0.750 - --- Infinities -scbx014 scaleb Infinity 1 -> Infinity -scbx015 scaleb -Infinity 2 -> -Infinity -scbx016 scaleb Infinity -1 -> Infinity -scbx017 scaleb -Infinity -2 -> -Infinity - --- Next two are somewhat undefined in 754r; treat as non-integer -scbx018 scaleb 10 Infinity -> NaN Invalid_operation -scbx019 scaleb 10 -Infinity -> NaN Invalid_operation - --- NaNs are undefined in 754r; assume usual processing --- NaNs, 0 payload -scbx021 scaleb NaN 1 -> NaN -scbx022 scaleb -NaN -1 -> -NaN -scbx023 scaleb sNaN 1 -> NaN Invalid_operation -scbx024 scaleb -sNaN 1 -> -NaN Invalid_operation -scbx025 scaleb 4 NaN -> NaN -scbx026 scaleb -Inf -NaN -> -NaN -scbx027 scaleb 4 sNaN -> NaN Invalid_operation -scbx028 scaleb Inf -sNaN -> -NaN Invalid_operation - --- non-integer RHS -scbx030 scaleb 1.23 1 -> 12.3 -scbx031 scaleb 1.23 1.00 -> NaN Invalid_operation -scbx032 scaleb 1.23 1.1 -> NaN Invalid_operation -scbx033 scaleb 1.23 1.01 -> NaN Invalid_operation -scbx034 scaleb 1.23 0.01 -> NaN Invalid_operation -scbx035 scaleb 1.23 0.11 -> NaN Invalid_operation -scbx036 scaleb 1.23 0.999999999 -> NaN Invalid_operation -scbx037 scaleb 1.23 -1 -> 0.123 -scbx038 scaleb 1.23 -1.00 -> NaN Invalid_operation -scbx039 scaleb 1.23 -1.1 -> NaN Invalid_operation -scbx040 scaleb 1.23 -1.01 -> NaN Invalid_operation -scbx041 scaleb 1.23 -0.01 -> NaN Invalid_operation -scbx042 scaleb 1.23 -0.11 -> NaN Invalid_operation -scbx043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation -scbx044 scaleb 1.23 0.1 -> NaN Invalid_operation -scbx045 scaleb 1.23 1E+1 -> NaN Invalid_operation -scbx046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation -scbx047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation - - -scbx120 scaleb 1.23 2015 -> Infinity Overflow Inexact Rounded -scbx121 scaleb 1.23 2016 -> Infinity Overflow Inexact Rounded -scbx122 scaleb 1.23 2017 -> NaN Invalid_operation -scbx123 scaleb 1.23 2018 -> NaN Invalid_operation -scbx124 scaleb 1.23 -2015 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped -scbx125 scaleb 1.23 -2016 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped -scbx126 scaleb 1.23 -2017 -> NaN Invalid_operation -scbx127 scaleb 1.23 -2018 -> NaN Invalid_operation - --- NaNs, non-0 payload --- propagating NaNs -scbx861 scaleb NaN01 -Inf -> NaN1 -scbx862 scaleb -NaN02 -1000 -> -NaN2 -scbx863 scaleb NaN03 1000 -> NaN3 -scbx864 scaleb NaN04 Inf -> NaN4 -scbx865 scaleb NaN05 NaN61 -> NaN5 -scbx866 scaleb -Inf -NaN71 -> -NaN71 -scbx867 scaleb -1000 NaN81 -> NaN81 -scbx868 scaleb 1000 NaN91 -> NaN91 -scbx869 scaleb Inf NaN101 -> NaN101 -scbx871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation -scbx872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation -scbx873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation -scbx874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation -scbx875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation -scbx876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation -scbx877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation -scbx878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation -scbx879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation -scbx880 scaleb Inf sNaN231 -> NaN231 Invalid_operation -scbx881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation - --- finites -scbx051 scaleb 7 -2 -> 0.07 -scbx052 scaleb -7 -2 -> -0.07 -scbx053 scaleb 75 -2 -> 0.75 -scbx054 scaleb -75 -2 -> -0.75 -scbx055 scaleb 7.50 -2 -> 0.0750 -scbx056 scaleb -7.50 -2 -> -0.0750 -scbx057 scaleb 7.500 -2 -> 0.07500 -scbx058 scaleb -7.500 -2 -> -0.07500 -scbx061 scaleb 7 -1 -> 0.7 -scbx062 scaleb -7 -1 -> -0.7 -scbx063 scaleb 75 -1 -> 7.5 -scbx064 scaleb -75 -1 -> -7.5 -scbx065 scaleb 7.50 -1 -> 0.750 -scbx066 scaleb -7.50 -1 -> -0.750 -scbx067 scaleb 7.500 -1 -> 0.7500 -scbx068 scaleb -7.500 -1 -> -0.7500 -scbx071 scaleb 7 0 -> 7 -scbx072 scaleb -7 0 -> -7 -scbx073 scaleb 75 0 -> 75 -scbx074 scaleb -75 0 -> -75 -scbx075 scaleb 7.50 0 -> 7.50 -scbx076 scaleb -7.50 0 -> -7.50 -scbx077 scaleb 7.500 0 -> 7.500 -scbx078 scaleb -7.500 0 -> -7.500 -scbx081 scaleb 7 1 -> 7E+1 -scbx082 scaleb -7 1 -> -7E+1 -scbx083 scaleb 75 1 -> 7.5E+2 -scbx084 scaleb -75 1 -> -7.5E+2 -scbx085 scaleb 7.50 1 -> 75.0 -scbx086 scaleb -7.50 1 -> -75.0 -scbx087 scaleb 7.500 1 -> 75.00 -scbx088 scaleb -7.500 1 -> -75.00 -scbx091 scaleb 7 2 -> 7E+2 -scbx092 scaleb -7 2 -> -7E+2 -scbx093 scaleb 75 2 -> 7.5E+3 -scbx094 scaleb -75 2 -> -7.5E+3 -scbx095 scaleb 7.50 2 -> 750 -scbx096 scaleb -7.50 2 -> -750 -scbx097 scaleb 7.500 2 -> 750.0 -scbx098 scaleb -7.500 2 -> -750.0 - --- zeros -scbx111 scaleb 0 1 -> 0E+1 -scbx112 scaleb -0 2 -> -0E+2 -scbx113 scaleb 0E+4 3 -> 0E+7 -scbx114 scaleb -0E+4 4 -> -0E+8 -scbx115 scaleb 0.0000 5 -> 0E+1 -scbx116 scaleb -0.0000 6 -> -0E+2 -scbx117 scaleb 0E-141 7 -> 0E-134 -scbx118 scaleb -0E-141 8 -> -0E-133 - --- Nmax, Nmin, Ntiny -scbx132 scaleb 9.99999999E+999 +999 -> Infinity Overflow Inexact Rounded -scbx133 scaleb 9.99999999E+999 +10 -> Infinity Overflow Inexact Rounded -scbx134 scaleb 9.99999999E+999 +1 -> Infinity Overflow Inexact Rounded -scbx135 scaleb 9.99999999E+999 0 -> 9.99999999E+999 -scbx136 scaleb 9.99999999E+999 -1 -> 9.99999999E+998 -scbx137 scaleb 1E-999 +1 -> 1E-998 -scbx138 scaleb 1E-999 -0 -> 1E-999 -scbx139 scaleb 1E-999 -1 -> 1E-1000 Subnormal -scbx140 scaleb 1.00000000E-999 +1 -> 1.00000000E-998 -scbx141 scaleb 1.00000000E-999 0 -> 1.00000000E-999 -scbx142 scaleb 1.00000000E-999 -1 -> 1.0000000E-1000 Subnormal Rounded -scbx143 scaleb 1E-1007 +1 -> 1E-1006 Subnormal -scbx144 scaleb 1E-1007 -0 -> 1E-1007 Subnormal -scbx145 scaleb 1E-1007 -1 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped - -scbx150 scaleb -1E-1007 +1 -> -1E-1006 Subnormal -scbx151 scaleb -1E-1007 -0 -> -1E-1007 Subnormal -scbx152 scaleb -1E-1007 -1 -> -0E-1007 Underflow Subnormal Inexact Rounded Clamped -scbx153 scaleb -1.00000000E-999 +1 -> -1.00000000E-998 -scbx154 scaleb -1.00000000E-999 +0 -> -1.00000000E-999 -scbx155 scaleb -1.00000000E-999 -1 -> -1.0000000E-1000 Subnormal Rounded -scbx156 scaleb -1E-999 +1 -> -1E-998 -scbx157 scaleb -1E-999 -0 -> -1E-999 -scbx158 scaleb -1E-999 -1 -> -1E-1000 Subnormal -scbx159 scaleb -9.99999999E+999 +1 -> -Infinity Overflow Inexact Rounded -scbx160 scaleb -9.99999999E+999 +0 -> -9.99999999E+999 -scbx161 scaleb -9.99999999E+999 -1 -> -9.99999999E+998 -scbx162 scaleb -9E+999 +1 -> -Infinity Overflow Inexact Rounded -scbx163 scaleb -1E+999 +1 -> -Infinity Overflow Inexact Rounded - --- Krah examples -precision: 34 -maxExponent: 999999999 -minExponent: -999999999 --- integer overflow in 3.61 or earlier -scbx164 scaleb 1E-999999999 -1200000000 -> NaN Invalid_operation --- out of range -scbx165 scaleb -1E-999999999 +1200000000 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- scaleb.decTest -- scale a number by powers of 10 -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Max |rhs| is 2*(999+9) = 2016 + +-- Sanity checks +scbx001 scaleb 7.50 10 -> 7.50E+10 +scbx002 scaleb 7.50 3 -> 7.50E+3 +scbx003 scaleb 7.50 2 -> 750 +scbx004 scaleb 7.50 1 -> 75.0 +scbx005 scaleb 7.50 0 -> 7.50 +scbx006 scaleb 7.50 -1 -> 0.750 +scbx007 scaleb 7.50 -2 -> 0.0750 +scbx008 scaleb 7.50 -10 -> 7.50E-10 +scbx009 scaleb -7.50 3 -> -7.50E+3 +scbx010 scaleb -7.50 2 -> -750 +scbx011 scaleb -7.50 1 -> -75.0 +scbx012 scaleb -7.50 0 -> -7.50 +scbx013 scaleb -7.50 -1 -> -0.750 + +-- Infinities +scbx014 scaleb Infinity 1 -> Infinity +scbx015 scaleb -Infinity 2 -> -Infinity +scbx016 scaleb Infinity -1 -> Infinity +scbx017 scaleb -Infinity -2 -> -Infinity + +-- Next two are somewhat undefined in 754r; treat as non-integer +scbx018 scaleb 10 Infinity -> NaN Invalid_operation +scbx019 scaleb 10 -Infinity -> NaN Invalid_operation + +-- NaNs are undefined in 754r; assume usual processing +-- NaNs, 0 payload +scbx021 scaleb NaN 1 -> NaN +scbx022 scaleb -NaN -1 -> -NaN +scbx023 scaleb sNaN 1 -> NaN Invalid_operation +scbx024 scaleb -sNaN 1 -> -NaN Invalid_operation +scbx025 scaleb 4 NaN -> NaN +scbx026 scaleb -Inf -NaN -> -NaN +scbx027 scaleb 4 sNaN -> NaN Invalid_operation +scbx028 scaleb Inf -sNaN -> -NaN Invalid_operation + +-- non-integer RHS +scbx030 scaleb 1.23 1 -> 12.3 +scbx031 scaleb 1.23 1.00 -> NaN Invalid_operation +scbx032 scaleb 1.23 1.1 -> NaN Invalid_operation +scbx033 scaleb 1.23 1.01 -> NaN Invalid_operation +scbx034 scaleb 1.23 0.01 -> NaN Invalid_operation +scbx035 scaleb 1.23 0.11 -> NaN Invalid_operation +scbx036 scaleb 1.23 0.999999999 -> NaN Invalid_operation +scbx037 scaleb 1.23 -1 -> 0.123 +scbx038 scaleb 1.23 -1.00 -> NaN Invalid_operation +scbx039 scaleb 1.23 -1.1 -> NaN Invalid_operation +scbx040 scaleb 1.23 -1.01 -> NaN Invalid_operation +scbx041 scaleb 1.23 -0.01 -> NaN Invalid_operation +scbx042 scaleb 1.23 -0.11 -> NaN Invalid_operation +scbx043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation +scbx044 scaleb 1.23 0.1 -> NaN Invalid_operation +scbx045 scaleb 1.23 1E+1 -> NaN Invalid_operation +scbx046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation +scbx047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation + + +scbx120 scaleb 1.23 2015 -> Infinity Overflow Inexact Rounded +scbx121 scaleb 1.23 2016 -> Infinity Overflow Inexact Rounded +scbx122 scaleb 1.23 2017 -> NaN Invalid_operation +scbx123 scaleb 1.23 2018 -> NaN Invalid_operation +scbx124 scaleb 1.23 -2015 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped +scbx125 scaleb 1.23 -2016 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped +scbx126 scaleb 1.23 -2017 -> NaN Invalid_operation +scbx127 scaleb 1.23 -2018 -> NaN Invalid_operation + +-- NaNs, non-0 payload +-- propagating NaNs +scbx861 scaleb NaN01 -Inf -> NaN1 +scbx862 scaleb -NaN02 -1000 -> -NaN2 +scbx863 scaleb NaN03 1000 -> NaN3 +scbx864 scaleb NaN04 Inf -> NaN4 +scbx865 scaleb NaN05 NaN61 -> NaN5 +scbx866 scaleb -Inf -NaN71 -> -NaN71 +scbx867 scaleb -1000 NaN81 -> NaN81 +scbx868 scaleb 1000 NaN91 -> NaN91 +scbx869 scaleb Inf NaN101 -> NaN101 +scbx871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation +scbx872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation +scbx873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation +scbx874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation +scbx875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation +scbx876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation +scbx877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation +scbx878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation +scbx879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation +scbx880 scaleb Inf sNaN231 -> NaN231 Invalid_operation +scbx881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation + +-- finites +scbx051 scaleb 7 -2 -> 0.07 +scbx052 scaleb -7 -2 -> -0.07 +scbx053 scaleb 75 -2 -> 0.75 +scbx054 scaleb -75 -2 -> -0.75 +scbx055 scaleb 7.50 -2 -> 0.0750 +scbx056 scaleb -7.50 -2 -> -0.0750 +scbx057 scaleb 7.500 -2 -> 0.07500 +scbx058 scaleb -7.500 -2 -> -0.07500 +scbx061 scaleb 7 -1 -> 0.7 +scbx062 scaleb -7 -1 -> -0.7 +scbx063 scaleb 75 -1 -> 7.5 +scbx064 scaleb -75 -1 -> -7.5 +scbx065 scaleb 7.50 -1 -> 0.750 +scbx066 scaleb -7.50 -1 -> -0.750 +scbx067 scaleb 7.500 -1 -> 0.7500 +scbx068 scaleb -7.500 -1 -> -0.7500 +scbx071 scaleb 7 0 -> 7 +scbx072 scaleb -7 0 -> -7 +scbx073 scaleb 75 0 -> 75 +scbx074 scaleb -75 0 -> -75 +scbx075 scaleb 7.50 0 -> 7.50 +scbx076 scaleb -7.50 0 -> -7.50 +scbx077 scaleb 7.500 0 -> 7.500 +scbx078 scaleb -7.500 0 -> -7.500 +scbx081 scaleb 7 1 -> 7E+1 +scbx082 scaleb -7 1 -> -7E+1 +scbx083 scaleb 75 1 -> 7.5E+2 +scbx084 scaleb -75 1 -> -7.5E+2 +scbx085 scaleb 7.50 1 -> 75.0 +scbx086 scaleb -7.50 1 -> -75.0 +scbx087 scaleb 7.500 1 -> 75.00 +scbx088 scaleb -7.500 1 -> -75.00 +scbx091 scaleb 7 2 -> 7E+2 +scbx092 scaleb -7 2 -> -7E+2 +scbx093 scaleb 75 2 -> 7.5E+3 +scbx094 scaleb -75 2 -> -7.5E+3 +scbx095 scaleb 7.50 2 -> 750 +scbx096 scaleb -7.50 2 -> -750 +scbx097 scaleb 7.500 2 -> 750.0 +scbx098 scaleb -7.500 2 -> -750.0 + +-- zeros +scbx111 scaleb 0 1 -> 0E+1 +scbx112 scaleb -0 2 -> -0E+2 +scbx113 scaleb 0E+4 3 -> 0E+7 +scbx114 scaleb -0E+4 4 -> -0E+8 +scbx115 scaleb 0.0000 5 -> 0E+1 +scbx116 scaleb -0.0000 6 -> -0E+2 +scbx117 scaleb 0E-141 7 -> 0E-134 +scbx118 scaleb -0E-141 8 -> -0E-133 + +-- Nmax, Nmin, Ntiny +scbx132 scaleb 9.99999999E+999 +999 -> Infinity Overflow Inexact Rounded +scbx133 scaleb 9.99999999E+999 +10 -> Infinity Overflow Inexact Rounded +scbx134 scaleb 9.99999999E+999 +1 -> Infinity Overflow Inexact Rounded +scbx135 scaleb 9.99999999E+999 0 -> 9.99999999E+999 +scbx136 scaleb 9.99999999E+999 -1 -> 9.99999999E+998 +scbx137 scaleb 1E-999 +1 -> 1E-998 +scbx138 scaleb 1E-999 -0 -> 1E-999 +scbx139 scaleb 1E-999 -1 -> 1E-1000 Subnormal +scbx140 scaleb 1.00000000E-999 +1 -> 1.00000000E-998 +scbx141 scaleb 1.00000000E-999 0 -> 1.00000000E-999 +scbx142 scaleb 1.00000000E-999 -1 -> 1.0000000E-1000 Subnormal Rounded +scbx143 scaleb 1E-1007 +1 -> 1E-1006 Subnormal +scbx144 scaleb 1E-1007 -0 -> 1E-1007 Subnormal +scbx145 scaleb 1E-1007 -1 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped + +scbx150 scaleb -1E-1007 +1 -> -1E-1006 Subnormal +scbx151 scaleb -1E-1007 -0 -> -1E-1007 Subnormal +scbx152 scaleb -1E-1007 -1 -> -0E-1007 Underflow Subnormal Inexact Rounded Clamped +scbx153 scaleb -1.00000000E-999 +1 -> -1.00000000E-998 +scbx154 scaleb -1.00000000E-999 +0 -> -1.00000000E-999 +scbx155 scaleb -1.00000000E-999 -1 -> -1.0000000E-1000 Subnormal Rounded +scbx156 scaleb -1E-999 +1 -> -1E-998 +scbx157 scaleb -1E-999 -0 -> -1E-999 +scbx158 scaleb -1E-999 -1 -> -1E-1000 Subnormal +scbx159 scaleb -9.99999999E+999 +1 -> -Infinity Overflow Inexact Rounded +scbx160 scaleb -9.99999999E+999 +0 -> -9.99999999E+999 +scbx161 scaleb -9.99999999E+999 -1 -> -9.99999999E+998 +scbx162 scaleb -9E+999 +1 -> -Infinity Overflow Inexact Rounded +scbx163 scaleb -1E+999 +1 -> -Infinity Overflow Inexact Rounded + +-- Krah examples +precision: 34 +maxExponent: 999999999 +minExponent: -999999999 +-- integer overflow in 3.61 or earlier +scbx164 scaleb 1E-999999999 -1200000000 -> NaN Invalid_operation +-- out of range +scbx165 scaleb -1E-999999999 +1200000000 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/shift.decTest b/Lib/test/decimaltestdata/shift.decTest index 3fac72f722e..78838cc10d3 100644 --- a/Lib/test/decimaltestdata/shift.decTest +++ b/Lib/test/decimaltestdata/shift.decTest @@ -1,250 +1,250 @@ ------------------------------------------------------------------------- --- shift.decTest -- shift coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -shix001 shift 0 0 -> 0 -shix002 shift 0 2 -> 0 -shix003 shift 1 2 -> 100 -shix004 shift 1 8 -> 100000000 -shix005 shift 1 9 -> 0 -shix006 shift 1 -1 -> 0 -shix007 shift 123456789 -1 -> 12345678 -shix008 shift 123456789 -8 -> 1 -shix009 shift 123456789 -9 -> 0 -shix010 shift 0 -2 -> 0 - --- rhs must be an integer -shix011 shift 1 1.5 -> NaN Invalid_operation -shix012 shift 1 1.0 -> NaN Invalid_operation -shix013 shift 1 0.1 -> NaN Invalid_operation -shix014 shift 1 0.0 -> NaN Invalid_operation -shix015 shift 1 1E+1 -> NaN Invalid_operation -shix016 shift 1 1E+99 -> NaN Invalid_operation -shix017 shift 1 Inf -> NaN Invalid_operation -shix018 shift 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -shix020 shift 1 -1000 -> NaN Invalid_operation -shix021 shift 1 -10 -> NaN Invalid_operation -shix022 shift 1 10 -> NaN Invalid_operation -shix023 shift 1 1000 -> NaN Invalid_operation - --- full shifting pattern -shix030 shift 123456789 -9 -> 0 -shix031 shift 123456789 -8 -> 1 -shix032 shift 123456789 -7 -> 12 -shix033 shift 123456789 -6 -> 123 -shix034 shift 123456789 -5 -> 1234 -shix035 shift 123456789 -4 -> 12345 -shix036 shift 123456789 -3 -> 123456 -shix037 shift 123456789 -2 -> 1234567 -shix038 shift 123456789 -1 -> 12345678 -shix039 shift 123456789 -0 -> 123456789 -shix040 shift 123456789 +0 -> 123456789 -shix041 shift 123456789 +1 -> 234567890 -shix042 shift 123456789 +2 -> 345678900 -shix043 shift 123456789 +3 -> 456789000 -shix044 shift 123456789 +4 -> 567890000 -shix045 shift 123456789 +5 -> 678900000 -shix046 shift 123456789 +6 -> 789000000 -shix047 shift 123456789 +7 -> 890000000 -shix048 shift 123456789 +8 -> 900000000 -shix049 shift 123456789 +9 -> 0 - --- from examples -shix051 shift 34 8 -> '400000000' -shix052 shift 12 9 -> '0' -shix053 shift 123456789 -2 -> '1234567' -shix054 shift 123456789 0 -> '123456789' -shix055 shift 123456789 +2 -> '345678900' - --- zeros -shix060 shift 0E-10 +9 -> 0E-10 -shix061 shift 0E-10 -9 -> 0E-10 -shix062 shift 0.000 +9 -> 0.000 -shix063 shift 0.000 -9 -> 0.000 -shix064 shift 0E+10 +9 -> 0E+10 -shix065 shift 0E+10 -9 -> 0E+10 -shix066 shift -0E-10 +9 -> -0E-10 -shix067 shift -0E-10 -9 -> -0E-10 -shix068 shift -0.000 +9 -> -0.000 -shix069 shift -0.000 -9 -> -0.000 -shix070 shift -0E+10 +9 -> -0E+10 -shix071 shift -0E+10 -9 -> -0E+10 - --- Nmax, Nmin, Ntiny -shix141 shift 9.99999999E+999 -1 -> 9.9999999E+998 -shix142 shift 9.99999999E+999 -8 -> 9E+991 -shix143 shift 9.99999999E+999 1 -> 9.99999990E+999 -shix144 shift 9.99999999E+999 8 -> 9.00000000E+999 -shix145 shift 1E-999 -1 -> 0E-999 -shix146 shift 1E-999 -8 -> 0E-999 -shix147 shift 1E-999 1 -> 1.0E-998 -shix148 shift 1E-999 8 -> 1.00000000E-991 -shix151 shift 1.00000000E-999 -1 -> 1.0000000E-1000 -shix152 shift 1.00000000E-999 -8 -> 1E-1007 -shix153 shift 1.00000000E-999 1 -> 0E-1007 -shix154 shift 1.00000000E-999 8 -> 0E-1007 -shix155 shift 9.00000000E-999 -1 -> 9.0000000E-1000 -shix156 shift 9.00000000E-999 -8 -> 9E-1007 -shix157 shift 9.00000000E-999 1 -> 0E-1007 -shix158 shift 9.00000000E-999 8 -> 0E-1007 -shix160 shift 1E-1007 -1 -> 0E-1007 -shix161 shift 1E-1007 -8 -> 0E-1007 -shix162 shift 1E-1007 1 -> 1.0E-1006 -shix163 shift 1E-1007 8 -> 1.00000000E-999 --- negatives -shix171 shift -9.99999999E+999 -1 -> -9.9999999E+998 -shix172 shift -9.99999999E+999 -8 -> -9E+991 -shix173 shift -9.99999999E+999 1 -> -9.99999990E+999 -shix174 shift -9.99999999E+999 8 -> -9.00000000E+999 -shix175 shift -1E-999 -1 -> -0E-999 -shix176 shift -1E-999 -8 -> -0E-999 -shix177 shift -1E-999 1 -> -1.0E-998 -shix178 shift -1E-999 8 -> -1.00000000E-991 -shix181 shift -1.00000000E-999 -1 -> -1.0000000E-1000 -shix182 shift -1.00000000E-999 -8 -> -1E-1007 -shix183 shift -1.00000000E-999 1 -> -0E-1007 -shix184 shift -1.00000000E-999 8 -> -0E-1007 -shix185 shift -9.00000000E-999 -1 -> -9.0000000E-1000 -shix186 shift -9.00000000E-999 -8 -> -9E-1007 -shix187 shift -9.00000000E-999 1 -> -0E-1007 -shix188 shift -9.00000000E-999 8 -> -0E-1007 -shix190 shift -1E-1007 -1 -> -0E-1007 -shix191 shift -1E-1007 -8 -> -0E-1007 -shix192 shift -1E-1007 1 -> -1.0E-1006 -shix193 shift -1E-1007 8 -> -1.00000000E-999 - --- more negatives (of sanities) -shix201 shift -0 0 -> -0 -shix202 shift -0 2 -> -0 -shix203 shift -1 2 -> -100 -shix204 shift -1 8 -> -100000000 -shix205 shift -1 9 -> -0 -shix206 shift -1 -1 -> -0 -shix207 shift -123456789 -1 -> -12345678 -shix208 shift -123456789 -8 -> -1 -shix209 shift -123456789 -9 -> -0 -shix210 shift -0 -2 -> -0 -shix211 shift -0 -0 -> -0 - - --- Specials; NaNs are handled as usual -shix781 shift -Inf -8 -> -Infinity -shix782 shift -Inf -1 -> -Infinity -shix783 shift -Inf -0 -> -Infinity -shix784 shift -Inf 0 -> -Infinity -shix785 shift -Inf 1 -> -Infinity -shix786 shift -Inf 8 -> -Infinity -shix787 shift -1000 -Inf -> NaN Invalid_operation -shix788 shift -Inf -Inf -> NaN Invalid_operation -shix789 shift -1 -Inf -> NaN Invalid_operation -shix790 shift -0 -Inf -> NaN Invalid_operation -shix791 shift 0 -Inf -> NaN Invalid_operation -shix792 shift 1 -Inf -> NaN Invalid_operation -shix793 shift 1000 -Inf -> NaN Invalid_operation -shix794 shift Inf -Inf -> NaN Invalid_operation - -shix800 shift Inf -Inf -> NaN Invalid_operation -shix801 shift Inf -8 -> Infinity -shix802 shift Inf -1 -> Infinity -shix803 shift Inf -0 -> Infinity -shix804 shift Inf 0 -> Infinity -shix805 shift Inf 1 -> Infinity -shix806 shift Inf 8 -> Infinity -shix807 shift Inf Inf -> NaN Invalid_operation -shix808 shift -1000 Inf -> NaN Invalid_operation -shix809 shift -Inf Inf -> NaN Invalid_operation -shix810 shift -1 Inf -> NaN Invalid_operation -shix811 shift -0 Inf -> NaN Invalid_operation -shix812 shift 0 Inf -> NaN Invalid_operation -shix813 shift 1 Inf -> NaN Invalid_operation -shix814 shift 1000 Inf -> NaN Invalid_operation -shix815 shift Inf Inf -> NaN Invalid_operation - -shix821 shift NaN -Inf -> NaN -shix822 shift NaN -1000 -> NaN -shix823 shift NaN -1 -> NaN -shix824 shift NaN -0 -> NaN -shix825 shift NaN 0 -> NaN -shix826 shift NaN 1 -> NaN -shix827 shift NaN 1000 -> NaN -shix828 shift NaN Inf -> NaN -shix829 shift NaN NaN -> NaN -shix830 shift -Inf NaN -> NaN -shix831 shift -1000 NaN -> NaN -shix832 shift -1 NaN -> NaN -shix833 shift -0 NaN -> NaN -shix834 shift 0 NaN -> NaN -shix835 shift 1 NaN -> NaN -shix836 shift 1000 NaN -> NaN -shix837 shift Inf NaN -> NaN - -shix841 shift sNaN -Inf -> NaN Invalid_operation -shix842 shift sNaN -1000 -> NaN Invalid_operation -shix843 shift sNaN -1 -> NaN Invalid_operation -shix844 shift sNaN -0 -> NaN Invalid_operation -shix845 shift sNaN 0 -> NaN Invalid_operation -shix846 shift sNaN 1 -> NaN Invalid_operation -shix847 shift sNaN 1000 -> NaN Invalid_operation -shix848 shift sNaN NaN -> NaN Invalid_operation -shix849 shift sNaN sNaN -> NaN Invalid_operation -shix850 shift NaN sNaN -> NaN Invalid_operation -shix851 shift -Inf sNaN -> NaN Invalid_operation -shix852 shift -1000 sNaN -> NaN Invalid_operation -shix853 shift -1 sNaN -> NaN Invalid_operation -shix854 shift -0 sNaN -> NaN Invalid_operation -shix855 shift 0 sNaN -> NaN Invalid_operation -shix856 shift 1 sNaN -> NaN Invalid_operation -shix857 shift 1000 sNaN -> NaN Invalid_operation -shix858 shift Inf sNaN -> NaN Invalid_operation -shix859 shift NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -shix861 shift NaN1 -Inf -> NaN1 -shix862 shift +NaN2 -1000 -> NaN2 -shix863 shift NaN3 1000 -> NaN3 -shix864 shift NaN4 Inf -> NaN4 -shix865 shift NaN5 +NaN6 -> NaN5 -shix866 shift -Inf NaN7 -> NaN7 -shix867 shift -1000 NaN8 -> NaN8 -shix868 shift 1000 NaN9 -> NaN9 -shix869 shift Inf +NaN10 -> NaN10 -shix871 shift sNaN11 -Inf -> NaN11 Invalid_operation -shix872 shift sNaN12 -1000 -> NaN12 Invalid_operation -shix873 shift sNaN13 1000 -> NaN13 Invalid_operation -shix874 shift sNaN14 NaN17 -> NaN14 Invalid_operation -shix875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation -shix876 shift NaN16 sNaN19 -> NaN19 Invalid_operation -shix877 shift -Inf +sNaN20 -> NaN20 Invalid_operation -shix878 shift -1000 sNaN21 -> NaN21 Invalid_operation -shix879 shift 1000 sNaN22 -> NaN22 Invalid_operation -shix880 shift Inf sNaN23 -> NaN23 Invalid_operation -shix881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation -shix882 shift -NaN26 NaN28 -> -NaN26 -shix883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation -shix884 shift 1000 -NaN30 -> -NaN30 -shix885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- shift.decTest -- shift coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +shix001 shift 0 0 -> 0 +shix002 shift 0 2 -> 0 +shix003 shift 1 2 -> 100 +shix004 shift 1 8 -> 100000000 +shix005 shift 1 9 -> 0 +shix006 shift 1 -1 -> 0 +shix007 shift 123456789 -1 -> 12345678 +shix008 shift 123456789 -8 -> 1 +shix009 shift 123456789 -9 -> 0 +shix010 shift 0 -2 -> 0 + +-- rhs must be an integer +shix011 shift 1 1.5 -> NaN Invalid_operation +shix012 shift 1 1.0 -> NaN Invalid_operation +shix013 shift 1 0.1 -> NaN Invalid_operation +shix014 shift 1 0.0 -> NaN Invalid_operation +shix015 shift 1 1E+1 -> NaN Invalid_operation +shix016 shift 1 1E+99 -> NaN Invalid_operation +shix017 shift 1 Inf -> NaN Invalid_operation +shix018 shift 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +shix020 shift 1 -1000 -> NaN Invalid_operation +shix021 shift 1 -10 -> NaN Invalid_operation +shix022 shift 1 10 -> NaN Invalid_operation +shix023 shift 1 1000 -> NaN Invalid_operation + +-- full shifting pattern +shix030 shift 123456789 -9 -> 0 +shix031 shift 123456789 -8 -> 1 +shix032 shift 123456789 -7 -> 12 +shix033 shift 123456789 -6 -> 123 +shix034 shift 123456789 -5 -> 1234 +shix035 shift 123456789 -4 -> 12345 +shix036 shift 123456789 -3 -> 123456 +shix037 shift 123456789 -2 -> 1234567 +shix038 shift 123456789 -1 -> 12345678 +shix039 shift 123456789 -0 -> 123456789 +shix040 shift 123456789 +0 -> 123456789 +shix041 shift 123456789 +1 -> 234567890 +shix042 shift 123456789 +2 -> 345678900 +shix043 shift 123456789 +3 -> 456789000 +shix044 shift 123456789 +4 -> 567890000 +shix045 shift 123456789 +5 -> 678900000 +shix046 shift 123456789 +6 -> 789000000 +shix047 shift 123456789 +7 -> 890000000 +shix048 shift 123456789 +8 -> 900000000 +shix049 shift 123456789 +9 -> 0 + +-- from examples +shix051 shift 34 8 -> '400000000' +shix052 shift 12 9 -> '0' +shix053 shift 123456789 -2 -> '1234567' +shix054 shift 123456789 0 -> '123456789' +shix055 shift 123456789 +2 -> '345678900' + +-- zeros +shix060 shift 0E-10 +9 -> 0E-10 +shix061 shift 0E-10 -9 -> 0E-10 +shix062 shift 0.000 +9 -> 0.000 +shix063 shift 0.000 -9 -> 0.000 +shix064 shift 0E+10 +9 -> 0E+10 +shix065 shift 0E+10 -9 -> 0E+10 +shix066 shift -0E-10 +9 -> -0E-10 +shix067 shift -0E-10 -9 -> -0E-10 +shix068 shift -0.000 +9 -> -0.000 +shix069 shift -0.000 -9 -> -0.000 +shix070 shift -0E+10 +9 -> -0E+10 +shix071 shift -0E+10 -9 -> -0E+10 + +-- Nmax, Nmin, Ntiny +shix141 shift 9.99999999E+999 -1 -> 9.9999999E+998 +shix142 shift 9.99999999E+999 -8 -> 9E+991 +shix143 shift 9.99999999E+999 1 -> 9.99999990E+999 +shix144 shift 9.99999999E+999 8 -> 9.00000000E+999 +shix145 shift 1E-999 -1 -> 0E-999 +shix146 shift 1E-999 -8 -> 0E-999 +shix147 shift 1E-999 1 -> 1.0E-998 +shix148 shift 1E-999 8 -> 1.00000000E-991 +shix151 shift 1.00000000E-999 -1 -> 1.0000000E-1000 +shix152 shift 1.00000000E-999 -8 -> 1E-1007 +shix153 shift 1.00000000E-999 1 -> 0E-1007 +shix154 shift 1.00000000E-999 8 -> 0E-1007 +shix155 shift 9.00000000E-999 -1 -> 9.0000000E-1000 +shix156 shift 9.00000000E-999 -8 -> 9E-1007 +shix157 shift 9.00000000E-999 1 -> 0E-1007 +shix158 shift 9.00000000E-999 8 -> 0E-1007 +shix160 shift 1E-1007 -1 -> 0E-1007 +shix161 shift 1E-1007 -8 -> 0E-1007 +shix162 shift 1E-1007 1 -> 1.0E-1006 +shix163 shift 1E-1007 8 -> 1.00000000E-999 +-- negatives +shix171 shift -9.99999999E+999 -1 -> -9.9999999E+998 +shix172 shift -9.99999999E+999 -8 -> -9E+991 +shix173 shift -9.99999999E+999 1 -> -9.99999990E+999 +shix174 shift -9.99999999E+999 8 -> -9.00000000E+999 +shix175 shift -1E-999 -1 -> -0E-999 +shix176 shift -1E-999 -8 -> -0E-999 +shix177 shift -1E-999 1 -> -1.0E-998 +shix178 shift -1E-999 8 -> -1.00000000E-991 +shix181 shift -1.00000000E-999 -1 -> -1.0000000E-1000 +shix182 shift -1.00000000E-999 -8 -> -1E-1007 +shix183 shift -1.00000000E-999 1 -> -0E-1007 +shix184 shift -1.00000000E-999 8 -> -0E-1007 +shix185 shift -9.00000000E-999 -1 -> -9.0000000E-1000 +shix186 shift -9.00000000E-999 -8 -> -9E-1007 +shix187 shift -9.00000000E-999 1 -> -0E-1007 +shix188 shift -9.00000000E-999 8 -> -0E-1007 +shix190 shift -1E-1007 -1 -> -0E-1007 +shix191 shift -1E-1007 -8 -> -0E-1007 +shix192 shift -1E-1007 1 -> -1.0E-1006 +shix193 shift -1E-1007 8 -> -1.00000000E-999 + +-- more negatives (of sanities) +shix201 shift -0 0 -> -0 +shix202 shift -0 2 -> -0 +shix203 shift -1 2 -> -100 +shix204 shift -1 8 -> -100000000 +shix205 shift -1 9 -> -0 +shix206 shift -1 -1 -> -0 +shix207 shift -123456789 -1 -> -12345678 +shix208 shift -123456789 -8 -> -1 +shix209 shift -123456789 -9 -> -0 +shix210 shift -0 -2 -> -0 +shix211 shift -0 -0 -> -0 + + +-- Specials; NaNs are handled as usual +shix781 shift -Inf -8 -> -Infinity +shix782 shift -Inf -1 -> -Infinity +shix783 shift -Inf -0 -> -Infinity +shix784 shift -Inf 0 -> -Infinity +shix785 shift -Inf 1 -> -Infinity +shix786 shift -Inf 8 -> -Infinity +shix787 shift -1000 -Inf -> NaN Invalid_operation +shix788 shift -Inf -Inf -> NaN Invalid_operation +shix789 shift -1 -Inf -> NaN Invalid_operation +shix790 shift -0 -Inf -> NaN Invalid_operation +shix791 shift 0 -Inf -> NaN Invalid_operation +shix792 shift 1 -Inf -> NaN Invalid_operation +shix793 shift 1000 -Inf -> NaN Invalid_operation +shix794 shift Inf -Inf -> NaN Invalid_operation + +shix800 shift Inf -Inf -> NaN Invalid_operation +shix801 shift Inf -8 -> Infinity +shix802 shift Inf -1 -> Infinity +shix803 shift Inf -0 -> Infinity +shix804 shift Inf 0 -> Infinity +shix805 shift Inf 1 -> Infinity +shix806 shift Inf 8 -> Infinity +shix807 shift Inf Inf -> NaN Invalid_operation +shix808 shift -1000 Inf -> NaN Invalid_operation +shix809 shift -Inf Inf -> NaN Invalid_operation +shix810 shift -1 Inf -> NaN Invalid_operation +shix811 shift -0 Inf -> NaN Invalid_operation +shix812 shift 0 Inf -> NaN Invalid_operation +shix813 shift 1 Inf -> NaN Invalid_operation +shix814 shift 1000 Inf -> NaN Invalid_operation +shix815 shift Inf Inf -> NaN Invalid_operation + +shix821 shift NaN -Inf -> NaN +shix822 shift NaN -1000 -> NaN +shix823 shift NaN -1 -> NaN +shix824 shift NaN -0 -> NaN +shix825 shift NaN 0 -> NaN +shix826 shift NaN 1 -> NaN +shix827 shift NaN 1000 -> NaN +shix828 shift NaN Inf -> NaN +shix829 shift NaN NaN -> NaN +shix830 shift -Inf NaN -> NaN +shix831 shift -1000 NaN -> NaN +shix832 shift -1 NaN -> NaN +shix833 shift -0 NaN -> NaN +shix834 shift 0 NaN -> NaN +shix835 shift 1 NaN -> NaN +shix836 shift 1000 NaN -> NaN +shix837 shift Inf NaN -> NaN + +shix841 shift sNaN -Inf -> NaN Invalid_operation +shix842 shift sNaN -1000 -> NaN Invalid_operation +shix843 shift sNaN -1 -> NaN Invalid_operation +shix844 shift sNaN -0 -> NaN Invalid_operation +shix845 shift sNaN 0 -> NaN Invalid_operation +shix846 shift sNaN 1 -> NaN Invalid_operation +shix847 shift sNaN 1000 -> NaN Invalid_operation +shix848 shift sNaN NaN -> NaN Invalid_operation +shix849 shift sNaN sNaN -> NaN Invalid_operation +shix850 shift NaN sNaN -> NaN Invalid_operation +shix851 shift -Inf sNaN -> NaN Invalid_operation +shix852 shift -1000 sNaN -> NaN Invalid_operation +shix853 shift -1 sNaN -> NaN Invalid_operation +shix854 shift -0 sNaN -> NaN Invalid_operation +shix855 shift 0 sNaN -> NaN Invalid_operation +shix856 shift 1 sNaN -> NaN Invalid_operation +shix857 shift 1000 sNaN -> NaN Invalid_operation +shix858 shift Inf sNaN -> NaN Invalid_operation +shix859 shift NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +shix861 shift NaN1 -Inf -> NaN1 +shix862 shift +NaN2 -1000 -> NaN2 +shix863 shift NaN3 1000 -> NaN3 +shix864 shift NaN4 Inf -> NaN4 +shix865 shift NaN5 +NaN6 -> NaN5 +shix866 shift -Inf NaN7 -> NaN7 +shix867 shift -1000 NaN8 -> NaN8 +shix868 shift 1000 NaN9 -> NaN9 +shix869 shift Inf +NaN10 -> NaN10 +shix871 shift sNaN11 -Inf -> NaN11 Invalid_operation +shix872 shift sNaN12 -1000 -> NaN12 Invalid_operation +shix873 shift sNaN13 1000 -> NaN13 Invalid_operation +shix874 shift sNaN14 NaN17 -> NaN14 Invalid_operation +shix875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation +shix876 shift NaN16 sNaN19 -> NaN19 Invalid_operation +shix877 shift -Inf +sNaN20 -> NaN20 Invalid_operation +shix878 shift -1000 sNaN21 -> NaN21 Invalid_operation +shix879 shift 1000 sNaN22 -> NaN22 Invalid_operation +shix880 shift Inf sNaN23 -> NaN23 Invalid_operation +shix881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation +shix882 shift -NaN26 NaN28 -> -NaN26 +shix883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation +shix884 shift 1000 -NaN30 -> -NaN30 +shix885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/tointegralx.decTest b/Lib/test/decimaltestdata/tointegralx.decTest index 0ce0d0935e1..e250e3a06ea 100644 --- a/Lib/test/decimaltestdata/tointegralx.decTest +++ b/Lib/test/decimaltestdata/tointegralx.decTest @@ -1,255 +1,255 @@ ------------------------------------------------------------------------- --- tointegralx.decTest -- round decimal to integral value, exact -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests tests the extended specification 'round-to-integral --- value' operation (from IEEE 854, later modified in 754r). --- All non-zero results are defined as being those from either copy or --- quantize, so those are assumed to have been tested. - --- This tests toIntegraExact, which may set Inexact - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - -intxx001 tointegralx 0 -> 0 -intxx002 tointegralx 0.0 -> 0 -intxx003 tointegralx 0.1 -> 0 Inexact Rounded -intxx004 tointegralx 0.2 -> 0 Inexact Rounded -intxx005 tointegralx 0.3 -> 0 Inexact Rounded -intxx006 tointegralx 0.4 -> 0 Inexact Rounded -intxx007 tointegralx 0.5 -> 1 Inexact Rounded -intxx008 tointegralx 0.6 -> 1 Inexact Rounded -intxx009 tointegralx 0.7 -> 1 Inexact Rounded -intxx010 tointegralx 0.8 -> 1 Inexact Rounded -intxx011 tointegralx 0.9 -> 1 Inexact Rounded -intxx012 tointegralx 1 -> 1 -intxx013 tointegralx 1.0 -> 1 Rounded -intxx014 tointegralx 1.1 -> 1 Inexact Rounded -intxx015 tointegralx 1.2 -> 1 Inexact Rounded -intxx016 tointegralx 1.3 -> 1 Inexact Rounded -intxx017 tointegralx 1.4 -> 1 Inexact Rounded -intxx018 tointegralx 1.5 -> 2 Inexact Rounded -intxx019 tointegralx 1.6 -> 2 Inexact Rounded -intxx020 tointegralx 1.7 -> 2 Inexact Rounded -intxx021 tointegralx 1.8 -> 2 Inexact Rounded -intxx022 tointegralx 1.9 -> 2 Inexact Rounded --- negatives -intxx031 tointegralx -0 -> -0 -intxx032 tointegralx -0.0 -> -0 -intxx033 tointegralx -0.1 -> -0 Inexact Rounded -intxx034 tointegralx -0.2 -> -0 Inexact Rounded -intxx035 tointegralx -0.3 -> -0 Inexact Rounded -intxx036 tointegralx -0.4 -> -0 Inexact Rounded -intxx037 tointegralx -0.5 -> -1 Inexact Rounded -intxx038 tointegralx -0.6 -> -1 Inexact Rounded -intxx039 tointegralx -0.7 -> -1 Inexact Rounded -intxx040 tointegralx -0.8 -> -1 Inexact Rounded -intxx041 tointegralx -0.9 -> -1 Inexact Rounded -intxx042 tointegralx -1 -> -1 -intxx043 tointegralx -1.0 -> -1 Rounded -intxx044 tointegralx -1.1 -> -1 Inexact Rounded -intxx045 tointegralx -1.2 -> -1 Inexact Rounded -intxx046 tointegralx -1.3 -> -1 Inexact Rounded -intxx047 tointegralx -1.4 -> -1 Inexact Rounded -intxx048 tointegralx -1.5 -> -2 Inexact Rounded -intxx049 tointegralx -1.6 -> -2 Inexact Rounded -intxx050 tointegralx -1.7 -> -2 Inexact Rounded -intxx051 tointegralx -1.8 -> -2 Inexact Rounded -intxx052 tointegralx -1.9 -> -2 Inexact Rounded --- next two would be NaN using quantize(x, 0) -intxx053 tointegralx 10E+30 -> 1.0E+31 -intxx054 tointegralx -10E+30 -> -1.0E+31 - --- numbers around precision -precision: 9 -intxx060 tointegralx '56267E-10' -> '0' Inexact Rounded -intxx061 tointegralx '56267E-5' -> '1' Inexact Rounded -intxx062 tointegralx '56267E-2' -> '563' Inexact Rounded -intxx063 tointegralx '56267E-1' -> '5627' Inexact Rounded -intxx065 tointegralx '56267E-0' -> '56267' -intxx066 tointegralx '56267E+0' -> '56267' -intxx067 tointegralx '56267E+1' -> '5.6267E+5' -intxx068 tointegralx '56267E+2' -> '5.6267E+6' -intxx069 tointegralx '56267E+3' -> '5.6267E+7' -intxx070 tointegralx '56267E+4' -> '5.6267E+8' -intxx071 tointegralx '56267E+5' -> '5.6267E+9' -intxx072 tointegralx '56267E+6' -> '5.6267E+10' -intxx073 tointegralx '1.23E+96' -> '1.23E+96' -intxx074 tointegralx '1.23E+384' -> '1.23E+384' -intxx075 tointegralx '1.23E+999' -> '1.23E+999' - -intxx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded -intxx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded -intxx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded -intxx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded -intxx085 tointegralx '-56267E-0' -> '-56267' -intxx086 tointegralx '-56267E+0' -> '-56267' -intxx087 tointegralx '-56267E+1' -> '-5.6267E+5' -intxx088 tointegralx '-56267E+2' -> '-5.6267E+6' -intxx089 tointegralx '-56267E+3' -> '-5.6267E+7' -intxx090 tointegralx '-56267E+4' -> '-5.6267E+8' -intxx091 tointegralx '-56267E+5' -> '-5.6267E+9' -intxx092 tointegralx '-56267E+6' -> '-5.6267E+10' -intxx093 tointegralx '-1.23E+96' -> '-1.23E+96' -intxx094 tointegralx '-1.23E+384' -> '-1.23E+384' -intxx095 tointegralx '-1.23E+999' -> '-1.23E+999' - --- subnormal inputs -intxx100 tointegralx 1E-999 -> 0 Inexact Rounded -intxx101 tointegralx 0.1E-999 -> 0 Inexact Rounded -intxx102 tointegralx 0.01E-999 -> 0 Inexact Rounded -intxx103 tointegralx 0E-999 -> 0 - --- specials and zeros -intxx120 tointegralx 'Inf' -> Infinity -intxx121 tointegralx '-Inf' -> -Infinity -intxx122 tointegralx NaN -> NaN -intxx123 tointegralx sNaN -> NaN Invalid_operation -intxx124 tointegralx 0 -> 0 -intxx125 tointegralx -0 -> -0 -intxx126 tointegralx 0.000 -> 0 -intxx127 tointegralx 0.00 -> 0 -intxx128 tointegralx 0.0 -> 0 -intxx129 tointegralx 0 -> 0 -intxx130 tointegralx 0E-3 -> 0 -intxx131 tointegralx 0E-2 -> 0 -intxx132 tointegralx 0E-1 -> 0 -intxx133 tointegralx 0E-0 -> 0 -intxx134 tointegralx 0E+1 -> 0E+1 -intxx135 tointegralx 0E+2 -> 0E+2 -intxx136 tointegralx 0E+3 -> 0E+3 -intxx137 tointegralx 0E+4 -> 0E+4 -intxx138 tointegralx 0E+5 -> 0E+5 -intxx139 tointegralx -0.000 -> -0 -intxx140 tointegralx -0.00 -> -0 -intxx141 tointegralx -0.0 -> -0 -intxx142 tointegralx -0 -> -0 -intxx143 tointegralx -0E-3 -> -0 -intxx144 tointegralx -0E-2 -> -0 -intxx145 tointegralx -0E-1 -> -0 -intxx146 tointegralx -0E-0 -> -0 -intxx147 tointegralx -0E+1 -> -0E+1 -intxx148 tointegralx -0E+2 -> -0E+2 -intxx149 tointegralx -0E+3 -> -0E+3 -intxx150 tointegralx -0E+4 -> -0E+4 -intxx151 tointegralx -0E+5 -> -0E+5 --- propagating NaNs -intxx152 tointegralx NaN808 -> NaN808 -intxx153 tointegralx sNaN080 -> NaN80 Invalid_operation -intxx154 tointegralx -NaN808 -> -NaN808 -intxx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation -intxx156 tointegralx -NaN -> -NaN -intxx157 tointegralx -sNaN -> -NaN Invalid_operation - --- examples -rounding: half_up -precision: 9 -intxx200 tointegralx 2.1 -> 2 Inexact Rounded -intxx201 tointegralx 100 -> 100 -intxx202 tointegralx 100.0 -> 100 Rounded -intxx203 tointegralx 101.5 -> 102 Inexact Rounded -intxx204 tointegralx -101.5 -> -102 Inexact Rounded -intxx205 tointegralx 10E+5 -> 1.0E+6 -intxx206 tointegralx 7.89E+77 -> 7.89E+77 -intxx207 tointegralx -Inf -> -Infinity - - --- all rounding modes -rounding: half_even - -intxx210 tointegralx 55.5 -> 56 Inexact Rounded -intxx211 tointegralx 56.5 -> 56 Inexact Rounded -intxx212 tointegralx 57.5 -> 58 Inexact Rounded -intxx213 tointegralx -55.5 -> -56 Inexact Rounded -intxx214 tointegralx -56.5 -> -56 Inexact Rounded -intxx215 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_up - -intxx220 tointegralx 55.5 -> 56 Inexact Rounded -intxx221 tointegralx 56.5 -> 57 Inexact Rounded -intxx222 tointegralx 57.5 -> 58 Inexact Rounded -intxx223 tointegralx -55.5 -> -56 Inexact Rounded -intxx224 tointegralx -56.5 -> -57 Inexact Rounded -intxx225 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_down - -intxx230 tointegralx 55.5 -> 55 Inexact Rounded -intxx231 tointegralx 56.5 -> 56 Inexact Rounded -intxx232 tointegralx 57.5 -> 57 Inexact Rounded -intxx233 tointegralx -55.5 -> -55 Inexact Rounded -intxx234 tointegralx -56.5 -> -56 Inexact Rounded -intxx235 tointegralx -57.5 -> -57 Inexact Rounded - -rounding: up - -intxx240 tointegralx 55.3 -> 56 Inexact Rounded -intxx241 tointegralx 56.3 -> 57 Inexact Rounded -intxx242 tointegralx 57.3 -> 58 Inexact Rounded -intxx243 tointegralx -55.3 -> -56 Inexact Rounded -intxx244 tointegralx -56.3 -> -57 Inexact Rounded -intxx245 tointegralx -57.3 -> -58 Inexact Rounded - -rounding: down - -intxx250 tointegralx 55.7 -> 55 Inexact Rounded -intxx251 tointegralx 56.7 -> 56 Inexact Rounded -intxx252 tointegralx 57.7 -> 57 Inexact Rounded -intxx253 tointegralx -55.7 -> -55 Inexact Rounded -intxx254 tointegralx -56.7 -> -56 Inexact Rounded -intxx255 tointegralx -57.7 -> -57 Inexact Rounded - -rounding: ceiling - -intxx260 tointegralx 55.3 -> 56 Inexact Rounded -intxx261 tointegralx 56.3 -> 57 Inexact Rounded -intxx262 tointegralx 57.3 -> 58 Inexact Rounded -intxx263 tointegralx -55.3 -> -55 Inexact Rounded -intxx264 tointegralx -56.3 -> -56 Inexact Rounded -intxx265 tointegralx -57.3 -> -57 Inexact Rounded - -rounding: floor - -intxx270 tointegralx 55.7 -> 55 Inexact Rounded -intxx271 tointegralx 56.7 -> 56 Inexact Rounded -intxx272 tointegralx 57.7 -> 57 Inexact Rounded -intxx273 tointegralx -55.7 -> -56 Inexact Rounded -intxx274 tointegralx -56.7 -> -57 Inexact Rounded -intxx275 tointegralx -57.7 -> -58 Inexact Rounded - --- Int and uInt32 edge values for testing conversions -precision: 16 -intxx300 tointegralx -2147483646 -> -2147483646 -intxx301 tointegralx -2147483647 -> -2147483647 -intxx302 tointegralx -2147483648 -> -2147483648 -intxx303 tointegralx -2147483649 -> -2147483649 -intxx304 tointegralx 2147483646 -> 2147483646 -intxx305 tointegralx 2147483647 -> 2147483647 -intxx306 tointegralx 2147483648 -> 2147483648 -intxx307 tointegralx 2147483649 -> 2147483649 -intxx308 tointegralx 4294967294 -> 4294967294 -intxx309 tointegralx 4294967295 -> 4294967295 -intxx310 tointegralx 4294967296 -> 4294967296 -intxx311 tointegralx 4294967297 -> 4294967297 +------------------------------------------------------------------------ +-- tointegralx.decTest -- round decimal to integral value, exact -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests tests the extended specification 'round-to-integral +-- value' operation (from IEEE 854, later modified in 754r). +-- All non-zero results are defined as being those from either copy or +-- quantize, so those are assumed to have been tested. + +-- This tests toIntegraExact, which may set Inexact + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +intxx001 tointegralx 0 -> 0 +intxx002 tointegralx 0.0 -> 0 +intxx003 tointegralx 0.1 -> 0 Inexact Rounded +intxx004 tointegralx 0.2 -> 0 Inexact Rounded +intxx005 tointegralx 0.3 -> 0 Inexact Rounded +intxx006 tointegralx 0.4 -> 0 Inexact Rounded +intxx007 tointegralx 0.5 -> 1 Inexact Rounded +intxx008 tointegralx 0.6 -> 1 Inexact Rounded +intxx009 tointegralx 0.7 -> 1 Inexact Rounded +intxx010 tointegralx 0.8 -> 1 Inexact Rounded +intxx011 tointegralx 0.9 -> 1 Inexact Rounded +intxx012 tointegralx 1 -> 1 +intxx013 tointegralx 1.0 -> 1 Rounded +intxx014 tointegralx 1.1 -> 1 Inexact Rounded +intxx015 tointegralx 1.2 -> 1 Inexact Rounded +intxx016 tointegralx 1.3 -> 1 Inexact Rounded +intxx017 tointegralx 1.4 -> 1 Inexact Rounded +intxx018 tointegralx 1.5 -> 2 Inexact Rounded +intxx019 tointegralx 1.6 -> 2 Inexact Rounded +intxx020 tointegralx 1.7 -> 2 Inexact Rounded +intxx021 tointegralx 1.8 -> 2 Inexact Rounded +intxx022 tointegralx 1.9 -> 2 Inexact Rounded +-- negatives +intxx031 tointegralx -0 -> -0 +intxx032 tointegralx -0.0 -> -0 +intxx033 tointegralx -0.1 -> -0 Inexact Rounded +intxx034 tointegralx -0.2 -> -0 Inexact Rounded +intxx035 tointegralx -0.3 -> -0 Inexact Rounded +intxx036 tointegralx -0.4 -> -0 Inexact Rounded +intxx037 tointegralx -0.5 -> -1 Inexact Rounded +intxx038 tointegralx -0.6 -> -1 Inexact Rounded +intxx039 tointegralx -0.7 -> -1 Inexact Rounded +intxx040 tointegralx -0.8 -> -1 Inexact Rounded +intxx041 tointegralx -0.9 -> -1 Inexact Rounded +intxx042 tointegralx -1 -> -1 +intxx043 tointegralx -1.0 -> -1 Rounded +intxx044 tointegralx -1.1 -> -1 Inexact Rounded +intxx045 tointegralx -1.2 -> -1 Inexact Rounded +intxx046 tointegralx -1.3 -> -1 Inexact Rounded +intxx047 tointegralx -1.4 -> -1 Inexact Rounded +intxx048 tointegralx -1.5 -> -2 Inexact Rounded +intxx049 tointegralx -1.6 -> -2 Inexact Rounded +intxx050 tointegralx -1.7 -> -2 Inexact Rounded +intxx051 tointegralx -1.8 -> -2 Inexact Rounded +intxx052 tointegralx -1.9 -> -2 Inexact Rounded +-- next two would be NaN using quantize(x, 0) +intxx053 tointegralx 10E+30 -> 1.0E+31 +intxx054 tointegralx -10E+30 -> -1.0E+31 + +-- numbers around precision +precision: 9 +intxx060 tointegralx '56267E-10' -> '0' Inexact Rounded +intxx061 tointegralx '56267E-5' -> '1' Inexact Rounded +intxx062 tointegralx '56267E-2' -> '563' Inexact Rounded +intxx063 tointegralx '56267E-1' -> '5627' Inexact Rounded +intxx065 tointegralx '56267E-0' -> '56267' +intxx066 tointegralx '56267E+0' -> '56267' +intxx067 tointegralx '56267E+1' -> '5.6267E+5' +intxx068 tointegralx '56267E+2' -> '5.6267E+6' +intxx069 tointegralx '56267E+3' -> '5.6267E+7' +intxx070 tointegralx '56267E+4' -> '5.6267E+8' +intxx071 tointegralx '56267E+5' -> '5.6267E+9' +intxx072 tointegralx '56267E+6' -> '5.6267E+10' +intxx073 tointegralx '1.23E+96' -> '1.23E+96' +intxx074 tointegralx '1.23E+384' -> '1.23E+384' +intxx075 tointegralx '1.23E+999' -> '1.23E+999' + +intxx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded +intxx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded +intxx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded +intxx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded +intxx085 tointegralx '-56267E-0' -> '-56267' +intxx086 tointegralx '-56267E+0' -> '-56267' +intxx087 tointegralx '-56267E+1' -> '-5.6267E+5' +intxx088 tointegralx '-56267E+2' -> '-5.6267E+6' +intxx089 tointegralx '-56267E+3' -> '-5.6267E+7' +intxx090 tointegralx '-56267E+4' -> '-5.6267E+8' +intxx091 tointegralx '-56267E+5' -> '-5.6267E+9' +intxx092 tointegralx '-56267E+6' -> '-5.6267E+10' +intxx093 tointegralx '-1.23E+96' -> '-1.23E+96' +intxx094 tointegralx '-1.23E+384' -> '-1.23E+384' +intxx095 tointegralx '-1.23E+999' -> '-1.23E+999' + +-- subnormal inputs +intxx100 tointegralx 1E-999 -> 0 Inexact Rounded +intxx101 tointegralx 0.1E-999 -> 0 Inexact Rounded +intxx102 tointegralx 0.01E-999 -> 0 Inexact Rounded +intxx103 tointegralx 0E-999 -> 0 + +-- specials and zeros +intxx120 tointegralx 'Inf' -> Infinity +intxx121 tointegralx '-Inf' -> -Infinity +intxx122 tointegralx NaN -> NaN +intxx123 tointegralx sNaN -> NaN Invalid_operation +intxx124 tointegralx 0 -> 0 +intxx125 tointegralx -0 -> -0 +intxx126 tointegralx 0.000 -> 0 +intxx127 tointegralx 0.00 -> 0 +intxx128 tointegralx 0.0 -> 0 +intxx129 tointegralx 0 -> 0 +intxx130 tointegralx 0E-3 -> 0 +intxx131 tointegralx 0E-2 -> 0 +intxx132 tointegralx 0E-1 -> 0 +intxx133 tointegralx 0E-0 -> 0 +intxx134 tointegralx 0E+1 -> 0E+1 +intxx135 tointegralx 0E+2 -> 0E+2 +intxx136 tointegralx 0E+3 -> 0E+3 +intxx137 tointegralx 0E+4 -> 0E+4 +intxx138 tointegralx 0E+5 -> 0E+5 +intxx139 tointegralx -0.000 -> -0 +intxx140 tointegralx -0.00 -> -0 +intxx141 tointegralx -0.0 -> -0 +intxx142 tointegralx -0 -> -0 +intxx143 tointegralx -0E-3 -> -0 +intxx144 tointegralx -0E-2 -> -0 +intxx145 tointegralx -0E-1 -> -0 +intxx146 tointegralx -0E-0 -> -0 +intxx147 tointegralx -0E+1 -> -0E+1 +intxx148 tointegralx -0E+2 -> -0E+2 +intxx149 tointegralx -0E+3 -> -0E+3 +intxx150 tointegralx -0E+4 -> -0E+4 +intxx151 tointegralx -0E+5 -> -0E+5 +-- propagating NaNs +intxx152 tointegralx NaN808 -> NaN808 +intxx153 tointegralx sNaN080 -> NaN80 Invalid_operation +intxx154 tointegralx -NaN808 -> -NaN808 +intxx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation +intxx156 tointegralx -NaN -> -NaN +intxx157 tointegralx -sNaN -> -NaN Invalid_operation + +-- examples +rounding: half_up +precision: 9 +intxx200 tointegralx 2.1 -> 2 Inexact Rounded +intxx201 tointegralx 100 -> 100 +intxx202 tointegralx 100.0 -> 100 Rounded +intxx203 tointegralx 101.5 -> 102 Inexact Rounded +intxx204 tointegralx -101.5 -> -102 Inexact Rounded +intxx205 tointegralx 10E+5 -> 1.0E+6 +intxx206 tointegralx 7.89E+77 -> 7.89E+77 +intxx207 tointegralx -Inf -> -Infinity + + +-- all rounding modes +rounding: half_even + +intxx210 tointegralx 55.5 -> 56 Inexact Rounded +intxx211 tointegralx 56.5 -> 56 Inexact Rounded +intxx212 tointegralx 57.5 -> 58 Inexact Rounded +intxx213 tointegralx -55.5 -> -56 Inexact Rounded +intxx214 tointegralx -56.5 -> -56 Inexact Rounded +intxx215 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_up + +intxx220 tointegralx 55.5 -> 56 Inexact Rounded +intxx221 tointegralx 56.5 -> 57 Inexact Rounded +intxx222 tointegralx 57.5 -> 58 Inexact Rounded +intxx223 tointegralx -55.5 -> -56 Inexact Rounded +intxx224 tointegralx -56.5 -> -57 Inexact Rounded +intxx225 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_down + +intxx230 tointegralx 55.5 -> 55 Inexact Rounded +intxx231 tointegralx 56.5 -> 56 Inexact Rounded +intxx232 tointegralx 57.5 -> 57 Inexact Rounded +intxx233 tointegralx -55.5 -> -55 Inexact Rounded +intxx234 tointegralx -56.5 -> -56 Inexact Rounded +intxx235 tointegralx -57.5 -> -57 Inexact Rounded + +rounding: up + +intxx240 tointegralx 55.3 -> 56 Inexact Rounded +intxx241 tointegralx 56.3 -> 57 Inexact Rounded +intxx242 tointegralx 57.3 -> 58 Inexact Rounded +intxx243 tointegralx -55.3 -> -56 Inexact Rounded +intxx244 tointegralx -56.3 -> -57 Inexact Rounded +intxx245 tointegralx -57.3 -> -58 Inexact Rounded + +rounding: down + +intxx250 tointegralx 55.7 -> 55 Inexact Rounded +intxx251 tointegralx 56.7 -> 56 Inexact Rounded +intxx252 tointegralx 57.7 -> 57 Inexact Rounded +intxx253 tointegralx -55.7 -> -55 Inexact Rounded +intxx254 tointegralx -56.7 -> -56 Inexact Rounded +intxx255 tointegralx -57.7 -> -57 Inexact Rounded + +rounding: ceiling + +intxx260 tointegralx 55.3 -> 56 Inexact Rounded +intxx261 tointegralx 56.3 -> 57 Inexact Rounded +intxx262 tointegralx 57.3 -> 58 Inexact Rounded +intxx263 tointegralx -55.3 -> -55 Inexact Rounded +intxx264 tointegralx -56.3 -> -56 Inexact Rounded +intxx265 tointegralx -57.3 -> -57 Inexact Rounded + +rounding: floor + +intxx270 tointegralx 55.7 -> 55 Inexact Rounded +intxx271 tointegralx 56.7 -> 56 Inexact Rounded +intxx272 tointegralx 57.7 -> 57 Inexact Rounded +intxx273 tointegralx -55.7 -> -56 Inexact Rounded +intxx274 tointegralx -56.7 -> -57 Inexact Rounded +intxx275 tointegralx -57.7 -> -58 Inexact Rounded + +-- Int and uInt32 edge values for testing conversions +precision: 16 +intxx300 tointegralx -2147483646 -> -2147483646 +intxx301 tointegralx -2147483647 -> -2147483647 +intxx302 tointegralx -2147483648 -> -2147483648 +intxx303 tointegralx -2147483649 -> -2147483649 +intxx304 tointegralx 2147483646 -> 2147483646 +intxx305 tointegralx 2147483647 -> 2147483647 +intxx306 tointegralx 2147483648 -> 2147483648 +intxx307 tointegralx 2147483649 -> 2147483649 +intxx308 tointegralx 4294967294 -> 4294967294 +intxx309 tointegralx 4294967295 -> 4294967295 +intxx310 tointegralx 4294967296 -> 4294967296 +intxx311 tointegralx 4294967297 -> 4294967297 diff --git a/Lib/test/decimaltestdata/xor.decTest b/Lib/test/decimaltestdata/xor.decTest index cd71bbcf86b..122976e44cc 100644 --- a/Lib/test/decimaltestdata/xor.decTest +++ b/Lib/test/decimaltestdata/xor.decTest @@ -1,335 +1,335 @@ ------------------------------------------------------------------------- --- xor.decTest -- digitwise logical XOR -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check (truth table) -xorx001 xor 0 0 -> 0 -xorx002 xor 0 1 -> 1 -xorx003 xor 1 0 -> 1 -xorx004 xor 1 1 -> 0 -xorx005 xor 1100 1010 -> 110 -xorx006 xor 1111 10 -> 1101 --- and at msd and msd-1 -xorx010 xor 000000000 000000000 -> 0 -xorx011 xor 000000000 100000000 -> 100000000 -xorx012 xor 100000000 000000000 -> 100000000 -xorx013 xor 100000000 100000000 -> 0 -xorx014 xor 000000000 000000000 -> 0 -xorx015 xor 000000000 010000000 -> 10000000 -xorx016 xor 010000000 000000000 -> 10000000 -xorx017 xor 010000000 010000000 -> 0 - --- Various lengths --- 123456789 123456789 123456789 -xorx021 xor 111111111 111111111 -> 0 -xorx022 xor 111111111111 111111111 -> 0 -xorx023 xor 11111111 11111111 -> 0 -xorx025 xor 1111111 1111111 -> 0 -xorx026 xor 111111 111111 -> 0 -xorx027 xor 11111 11111 -> 0 -xorx028 xor 1111 1111 -> 0 -xorx029 xor 111 111 -> 0 -xorx031 xor 11 11 -> 0 -xorx032 xor 1 1 -> 0 -xorx033 xor 111111111111 1111111111 -> 0 -xorx034 xor 11111111111 11111111111 -> 0 -xorx035 xor 1111111111 111111111111 -> 0 -xorx036 xor 111111111 1111111111111 -> 0 - -xorx040 xor 111111111 111111111111 -> 0 -xorx041 xor 11111111 111111111111 -> 100000000 -xorx042 xor 11111111 111111111 -> 100000000 -xorx043 xor 1111111 100000010 -> 101111101 -xorx044 xor 111111 100000100 -> 100111011 -xorx045 xor 11111 100001000 -> 100010111 -xorx046 xor 1111 100010000 -> 100011111 -xorx047 xor 111 100100000 -> 100100111 -xorx048 xor 11 101000000 -> 101000011 -xorx049 xor 1 110000000 -> 110000001 - -xorx050 xor 1111111111 1 -> 111111110 -xorx051 xor 111111111 1 -> 111111110 -xorx052 xor 11111111 1 -> 11111110 -xorx053 xor 1111111 1 -> 1111110 -xorx054 xor 111111 1 -> 111110 -xorx055 xor 11111 1 -> 11110 -xorx056 xor 1111 1 -> 1110 -xorx057 xor 111 1 -> 110 -xorx058 xor 11 1 -> 10 -xorx059 xor 1 1 -> 0 - -xorx060 xor 1111111111 0 -> 111111111 -xorx061 xor 111111111 0 -> 111111111 -xorx062 xor 11111111 0 -> 11111111 -xorx063 xor 1111111 0 -> 1111111 -xorx064 xor 111111 0 -> 111111 -xorx065 xor 11111 0 -> 11111 -xorx066 xor 1111 0 -> 1111 -xorx067 xor 111 0 -> 111 -xorx068 xor 11 0 -> 11 -xorx069 xor 1 0 -> 1 - -xorx070 xor 1 1111111111 -> 111111110 -xorx071 xor 1 111111111 -> 111111110 -xorx072 xor 1 11111111 -> 11111110 -xorx073 xor 1 1111111 -> 1111110 -xorx074 xor 1 111111 -> 111110 -xorx075 xor 1 11111 -> 11110 -xorx076 xor 1 1111 -> 1110 -xorx077 xor 1 111 -> 110 -xorx078 xor 1 11 -> 10 -xorx079 xor 1 1 -> 0 - -xorx080 xor 0 1111111111 -> 111111111 -xorx081 xor 0 111111111 -> 111111111 -xorx082 xor 0 11111111 -> 11111111 -xorx083 xor 0 1111111 -> 1111111 -xorx084 xor 0 111111 -> 111111 -xorx085 xor 0 11111 -> 11111 -xorx086 xor 0 1111 -> 1111 -xorx087 xor 0 111 -> 111 -xorx088 xor 0 11 -> 11 -xorx089 xor 0 1 -> 1 - -xorx090 xor 011111111 111101111 -> 100010000 -xorx091 xor 101111111 111101111 -> 10010000 -xorx092 xor 110111111 111101111 -> 1010000 -xorx093 xor 111011111 111101111 -> 110000 -xorx094 xor 111101111 111101111 -> 0 -xorx095 xor 111110111 111101111 -> 11000 -xorx096 xor 111111011 111101111 -> 10100 -xorx097 xor 111111101 111101111 -> 10010 -xorx098 xor 111111110 111101111 -> 10001 - -xorx100 xor 111101111 011111111 -> 100010000 -xorx101 xor 111101111 101111111 -> 10010000 -xorx102 xor 111101111 110111111 -> 1010000 -xorx103 xor 111101111 111011111 -> 110000 -xorx104 xor 111101111 111101111 -> 0 -xorx105 xor 111101111 111110111 -> 11000 -xorx106 xor 111101111 111111011 -> 10100 -xorx107 xor 111101111 111111101 -> 10010 -xorx108 xor 111101111 111111110 -> 10001 - --- non-0/1 should not be accepted, nor should signs -xorx220 xor 111111112 111111111 -> NaN Invalid_operation -xorx221 xor 333333333 333333333 -> NaN Invalid_operation -xorx222 xor 555555555 555555555 -> NaN Invalid_operation -xorx223 xor 777777777 777777777 -> NaN Invalid_operation -xorx224 xor 999999999 999999999 -> NaN Invalid_operation -xorx225 xor 222222222 999999999 -> NaN Invalid_operation -xorx226 xor 444444444 999999999 -> NaN Invalid_operation -xorx227 xor 666666666 999999999 -> NaN Invalid_operation -xorx228 xor 888888888 999999999 -> NaN Invalid_operation -xorx229 xor 999999999 222222222 -> NaN Invalid_operation -xorx230 xor 999999999 444444444 -> NaN Invalid_operation -xorx231 xor 999999999 666666666 -> NaN Invalid_operation -xorx232 xor 999999999 888888888 -> NaN Invalid_operation --- a few randoms -xorx240 xor 567468689 -934981942 -> NaN Invalid_operation -xorx241 xor 567367689 934981942 -> NaN Invalid_operation -xorx242 xor -631917772 -706014634 -> NaN Invalid_operation -xorx243 xor -756253257 138579234 -> NaN Invalid_operation -xorx244 xor 835590149 567435400 -> NaN Invalid_operation --- test MSD -xorx250 xor 200000000 100000000 -> NaN Invalid_operation -xorx251 xor 700000000 100000000 -> NaN Invalid_operation -xorx252 xor 800000000 100000000 -> NaN Invalid_operation -xorx253 xor 900000000 100000000 -> NaN Invalid_operation -xorx254 xor 200000000 000000000 -> NaN Invalid_operation -xorx255 xor 700000000 000000000 -> NaN Invalid_operation -xorx256 xor 800000000 000000000 -> NaN Invalid_operation -xorx257 xor 900000000 000000000 -> NaN Invalid_operation -xorx258 xor 100000000 200000000 -> NaN Invalid_operation -xorx259 xor 100000000 700000000 -> NaN Invalid_operation -xorx260 xor 100000000 800000000 -> NaN Invalid_operation -xorx261 xor 100000000 900000000 -> NaN Invalid_operation -xorx262 xor 000000000 200000000 -> NaN Invalid_operation -xorx263 xor 000000000 700000000 -> NaN Invalid_operation -xorx264 xor 000000000 800000000 -> NaN Invalid_operation -xorx265 xor 000000000 900000000 -> NaN Invalid_operation --- test MSD-1 -xorx270 xor 020000000 100000000 -> NaN Invalid_operation -xorx271 xor 070100000 100000000 -> NaN Invalid_operation -xorx272 xor 080010000 100000001 -> NaN Invalid_operation -xorx273 xor 090001000 100000010 -> NaN Invalid_operation -xorx274 xor 100000100 020010100 -> NaN Invalid_operation -xorx275 xor 100000000 070001000 -> NaN Invalid_operation -xorx276 xor 100000010 080010100 -> NaN Invalid_operation -xorx277 xor 100000000 090000010 -> NaN Invalid_operation --- test LSD -xorx280 xor 001000002 100000000 -> NaN Invalid_operation -xorx281 xor 000000007 100000000 -> NaN Invalid_operation -xorx282 xor 000000008 100000000 -> NaN Invalid_operation -xorx283 xor 000000009 100000000 -> NaN Invalid_operation -xorx284 xor 100000000 000100002 -> NaN Invalid_operation -xorx285 xor 100100000 001000007 -> NaN Invalid_operation -xorx286 xor 100010000 010000008 -> NaN Invalid_operation -xorx287 xor 100001000 100000009 -> NaN Invalid_operation --- test Middie -xorx288 xor 001020000 100000000 -> NaN Invalid_operation -xorx289 xor 000070001 100000000 -> NaN Invalid_operation -xorx290 xor 000080000 100010000 -> NaN Invalid_operation -xorx291 xor 000090000 100001000 -> NaN Invalid_operation -xorx292 xor 100000010 000020100 -> NaN Invalid_operation -xorx293 xor 100100000 000070010 -> NaN Invalid_operation -xorx294 xor 100010100 000080001 -> NaN Invalid_operation -xorx295 xor 100001000 000090000 -> NaN Invalid_operation --- signs -xorx296 xor -100001000 -000000000 -> NaN Invalid_operation -xorx297 xor -100001000 000010000 -> NaN Invalid_operation -xorx298 xor 100001000 -000000000 -> NaN Invalid_operation -xorx299 xor 100001000 000011000 -> 100010000 - --- Nmax, Nmin, Ntiny -xorx331 xor 2 9.99999999E+999 -> NaN Invalid_operation -xorx332 xor 3 1E-999 -> NaN Invalid_operation -xorx333 xor 4 1.00000000E-999 -> NaN Invalid_operation -xorx334 xor 5 1E-1007 -> NaN Invalid_operation -xorx335 xor 6 -1E-1007 -> NaN Invalid_operation -xorx336 xor 7 -1.00000000E-999 -> NaN Invalid_operation -xorx337 xor 8 -1E-999 -> NaN Invalid_operation -xorx338 xor 9 -9.99999999E+999 -> NaN Invalid_operation -xorx341 xor 9.99999999E+999 -18 -> NaN Invalid_operation -xorx342 xor 1E-999 01 -> NaN Invalid_operation -xorx343 xor 1.00000000E-999 -18 -> NaN Invalid_operation -xorx344 xor 1E-1007 18 -> NaN Invalid_operation -xorx345 xor -1E-1007 -10 -> NaN Invalid_operation -xorx346 xor -1.00000000E-999 18 -> NaN Invalid_operation -xorx347 xor -1E-999 10 -> NaN Invalid_operation -xorx348 xor -9.99999999E+999 -18 -> NaN Invalid_operation - --- A few other non-integers -xorx361 xor 1.0 1 -> NaN Invalid_operation -xorx362 xor 1E+1 1 -> NaN Invalid_operation -xorx363 xor 0.0 1 -> NaN Invalid_operation -xorx364 xor 0E+1 1 -> NaN Invalid_operation -xorx365 xor 9.9 1 -> NaN Invalid_operation -xorx366 xor 9E+1 1 -> NaN Invalid_operation -xorx371 xor 0 1.0 -> NaN Invalid_operation -xorx372 xor 0 1E+1 -> NaN Invalid_operation -xorx373 xor 0 0.0 -> NaN Invalid_operation -xorx374 xor 0 0E+1 -> NaN Invalid_operation -xorx375 xor 0 9.9 -> NaN Invalid_operation -xorx376 xor 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -xorx780 xor -Inf -Inf -> NaN Invalid_operation -xorx781 xor -Inf -1000 -> NaN Invalid_operation -xorx782 xor -Inf -1 -> NaN Invalid_operation -xorx783 xor -Inf -0 -> NaN Invalid_operation -xorx784 xor -Inf 0 -> NaN Invalid_operation -xorx785 xor -Inf 1 -> NaN Invalid_operation -xorx786 xor -Inf 1000 -> NaN Invalid_operation -xorx787 xor -1000 -Inf -> NaN Invalid_operation -xorx788 xor -Inf -Inf -> NaN Invalid_operation -xorx789 xor -1 -Inf -> NaN Invalid_operation -xorx790 xor -0 -Inf -> NaN Invalid_operation -xorx791 xor 0 -Inf -> NaN Invalid_operation -xorx792 xor 1 -Inf -> NaN Invalid_operation -xorx793 xor 1000 -Inf -> NaN Invalid_operation -xorx794 xor Inf -Inf -> NaN Invalid_operation - -xorx800 xor Inf -Inf -> NaN Invalid_operation -xorx801 xor Inf -1000 -> NaN Invalid_operation -xorx802 xor Inf -1 -> NaN Invalid_operation -xorx803 xor Inf -0 -> NaN Invalid_operation -xorx804 xor Inf 0 -> NaN Invalid_operation -xorx805 xor Inf 1 -> NaN Invalid_operation -xorx806 xor Inf 1000 -> NaN Invalid_operation -xorx807 xor Inf Inf -> NaN Invalid_operation -xorx808 xor -1000 Inf -> NaN Invalid_operation -xorx809 xor -Inf Inf -> NaN Invalid_operation -xorx810 xor -1 Inf -> NaN Invalid_operation -xorx811 xor -0 Inf -> NaN Invalid_operation -xorx812 xor 0 Inf -> NaN Invalid_operation -xorx813 xor 1 Inf -> NaN Invalid_operation -xorx814 xor 1000 Inf -> NaN Invalid_operation -xorx815 xor Inf Inf -> NaN Invalid_operation - -xorx821 xor NaN -Inf -> NaN Invalid_operation -xorx822 xor NaN -1000 -> NaN Invalid_operation -xorx823 xor NaN -1 -> NaN Invalid_operation -xorx824 xor NaN -0 -> NaN Invalid_operation -xorx825 xor NaN 0 -> NaN Invalid_operation -xorx826 xor NaN 1 -> NaN Invalid_operation -xorx827 xor NaN 1000 -> NaN Invalid_operation -xorx828 xor NaN Inf -> NaN Invalid_operation -xorx829 xor NaN NaN -> NaN Invalid_operation -xorx830 xor -Inf NaN -> NaN Invalid_operation -xorx831 xor -1000 NaN -> NaN Invalid_operation -xorx832 xor -1 NaN -> NaN Invalid_operation -xorx833 xor -0 NaN -> NaN Invalid_operation -xorx834 xor 0 NaN -> NaN Invalid_operation -xorx835 xor 1 NaN -> NaN Invalid_operation -xorx836 xor 1000 NaN -> NaN Invalid_operation -xorx837 xor Inf NaN -> NaN Invalid_operation - -xorx841 xor sNaN -Inf -> NaN Invalid_operation -xorx842 xor sNaN -1000 -> NaN Invalid_operation -xorx843 xor sNaN -1 -> NaN Invalid_operation -xorx844 xor sNaN -0 -> NaN Invalid_operation -xorx845 xor sNaN 0 -> NaN Invalid_operation -xorx846 xor sNaN 1 -> NaN Invalid_operation -xorx847 xor sNaN 1000 -> NaN Invalid_operation -xorx848 xor sNaN NaN -> NaN Invalid_operation -xorx849 xor sNaN sNaN -> NaN Invalid_operation -xorx850 xor NaN sNaN -> NaN Invalid_operation -xorx851 xor -Inf sNaN -> NaN Invalid_operation -xorx852 xor -1000 sNaN -> NaN Invalid_operation -xorx853 xor -1 sNaN -> NaN Invalid_operation -xorx854 xor -0 sNaN -> NaN Invalid_operation -xorx855 xor 0 sNaN -> NaN Invalid_operation -xorx856 xor 1 sNaN -> NaN Invalid_operation -xorx857 xor 1000 sNaN -> NaN Invalid_operation -xorx858 xor Inf sNaN -> NaN Invalid_operation -xorx859 xor NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -xorx861 xor NaN1 -Inf -> NaN Invalid_operation -xorx862 xor +NaN2 -1000 -> NaN Invalid_operation -xorx863 xor NaN3 1000 -> NaN Invalid_operation -xorx864 xor NaN4 Inf -> NaN Invalid_operation -xorx865 xor NaN5 +NaN6 -> NaN Invalid_operation -xorx866 xor -Inf NaN7 -> NaN Invalid_operation -xorx867 xor -1000 NaN8 -> NaN Invalid_operation -xorx868 xor 1000 NaN9 -> NaN Invalid_operation -xorx869 xor Inf +NaN10 -> NaN Invalid_operation -xorx871 xor sNaN11 -Inf -> NaN Invalid_operation -xorx872 xor sNaN12 -1000 -> NaN Invalid_operation -xorx873 xor sNaN13 1000 -> NaN Invalid_operation -xorx874 xor sNaN14 NaN17 -> NaN Invalid_operation -xorx875 xor sNaN15 sNaN18 -> NaN Invalid_operation -xorx876 xor NaN16 sNaN19 -> NaN Invalid_operation -xorx877 xor -Inf +sNaN20 -> NaN Invalid_operation -xorx878 xor -1000 sNaN21 -> NaN Invalid_operation -xorx879 xor 1000 sNaN22 -> NaN Invalid_operation -xorx880 xor Inf sNaN23 -> NaN Invalid_operation -xorx881 xor +NaN25 +sNaN24 -> NaN Invalid_operation -xorx882 xor -NaN26 NaN28 -> NaN Invalid_operation -xorx883 xor -sNaN27 sNaN29 -> NaN Invalid_operation -xorx884 xor 1000 -NaN30 -> NaN Invalid_operation -xorx885 xor 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- xor.decTest -- digitwise logical XOR -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check (truth table) +xorx001 xor 0 0 -> 0 +xorx002 xor 0 1 -> 1 +xorx003 xor 1 0 -> 1 +xorx004 xor 1 1 -> 0 +xorx005 xor 1100 1010 -> 110 +xorx006 xor 1111 10 -> 1101 +-- and at msd and msd-1 +xorx010 xor 000000000 000000000 -> 0 +xorx011 xor 000000000 100000000 -> 100000000 +xorx012 xor 100000000 000000000 -> 100000000 +xorx013 xor 100000000 100000000 -> 0 +xorx014 xor 000000000 000000000 -> 0 +xorx015 xor 000000000 010000000 -> 10000000 +xorx016 xor 010000000 000000000 -> 10000000 +xorx017 xor 010000000 010000000 -> 0 + +-- Various lengths +-- 123456789 123456789 123456789 +xorx021 xor 111111111 111111111 -> 0 +xorx022 xor 111111111111 111111111 -> 0 +xorx023 xor 11111111 11111111 -> 0 +xorx025 xor 1111111 1111111 -> 0 +xorx026 xor 111111 111111 -> 0 +xorx027 xor 11111 11111 -> 0 +xorx028 xor 1111 1111 -> 0 +xorx029 xor 111 111 -> 0 +xorx031 xor 11 11 -> 0 +xorx032 xor 1 1 -> 0 +xorx033 xor 111111111111 1111111111 -> 0 +xorx034 xor 11111111111 11111111111 -> 0 +xorx035 xor 1111111111 111111111111 -> 0 +xorx036 xor 111111111 1111111111111 -> 0 + +xorx040 xor 111111111 111111111111 -> 0 +xorx041 xor 11111111 111111111111 -> 100000000 +xorx042 xor 11111111 111111111 -> 100000000 +xorx043 xor 1111111 100000010 -> 101111101 +xorx044 xor 111111 100000100 -> 100111011 +xorx045 xor 11111 100001000 -> 100010111 +xorx046 xor 1111 100010000 -> 100011111 +xorx047 xor 111 100100000 -> 100100111 +xorx048 xor 11 101000000 -> 101000011 +xorx049 xor 1 110000000 -> 110000001 + +xorx050 xor 1111111111 1 -> 111111110 +xorx051 xor 111111111 1 -> 111111110 +xorx052 xor 11111111 1 -> 11111110 +xorx053 xor 1111111 1 -> 1111110 +xorx054 xor 111111 1 -> 111110 +xorx055 xor 11111 1 -> 11110 +xorx056 xor 1111 1 -> 1110 +xorx057 xor 111 1 -> 110 +xorx058 xor 11 1 -> 10 +xorx059 xor 1 1 -> 0 + +xorx060 xor 1111111111 0 -> 111111111 +xorx061 xor 111111111 0 -> 111111111 +xorx062 xor 11111111 0 -> 11111111 +xorx063 xor 1111111 0 -> 1111111 +xorx064 xor 111111 0 -> 111111 +xorx065 xor 11111 0 -> 11111 +xorx066 xor 1111 0 -> 1111 +xorx067 xor 111 0 -> 111 +xorx068 xor 11 0 -> 11 +xorx069 xor 1 0 -> 1 + +xorx070 xor 1 1111111111 -> 111111110 +xorx071 xor 1 111111111 -> 111111110 +xorx072 xor 1 11111111 -> 11111110 +xorx073 xor 1 1111111 -> 1111110 +xorx074 xor 1 111111 -> 111110 +xorx075 xor 1 11111 -> 11110 +xorx076 xor 1 1111 -> 1110 +xorx077 xor 1 111 -> 110 +xorx078 xor 1 11 -> 10 +xorx079 xor 1 1 -> 0 + +xorx080 xor 0 1111111111 -> 111111111 +xorx081 xor 0 111111111 -> 111111111 +xorx082 xor 0 11111111 -> 11111111 +xorx083 xor 0 1111111 -> 1111111 +xorx084 xor 0 111111 -> 111111 +xorx085 xor 0 11111 -> 11111 +xorx086 xor 0 1111 -> 1111 +xorx087 xor 0 111 -> 111 +xorx088 xor 0 11 -> 11 +xorx089 xor 0 1 -> 1 + +xorx090 xor 011111111 111101111 -> 100010000 +xorx091 xor 101111111 111101111 -> 10010000 +xorx092 xor 110111111 111101111 -> 1010000 +xorx093 xor 111011111 111101111 -> 110000 +xorx094 xor 111101111 111101111 -> 0 +xorx095 xor 111110111 111101111 -> 11000 +xorx096 xor 111111011 111101111 -> 10100 +xorx097 xor 111111101 111101111 -> 10010 +xorx098 xor 111111110 111101111 -> 10001 + +xorx100 xor 111101111 011111111 -> 100010000 +xorx101 xor 111101111 101111111 -> 10010000 +xorx102 xor 111101111 110111111 -> 1010000 +xorx103 xor 111101111 111011111 -> 110000 +xorx104 xor 111101111 111101111 -> 0 +xorx105 xor 111101111 111110111 -> 11000 +xorx106 xor 111101111 111111011 -> 10100 +xorx107 xor 111101111 111111101 -> 10010 +xorx108 xor 111101111 111111110 -> 10001 + +-- non-0/1 should not be accepted, nor should signs +xorx220 xor 111111112 111111111 -> NaN Invalid_operation +xorx221 xor 333333333 333333333 -> NaN Invalid_operation +xorx222 xor 555555555 555555555 -> NaN Invalid_operation +xorx223 xor 777777777 777777777 -> NaN Invalid_operation +xorx224 xor 999999999 999999999 -> NaN Invalid_operation +xorx225 xor 222222222 999999999 -> NaN Invalid_operation +xorx226 xor 444444444 999999999 -> NaN Invalid_operation +xorx227 xor 666666666 999999999 -> NaN Invalid_operation +xorx228 xor 888888888 999999999 -> NaN Invalid_operation +xorx229 xor 999999999 222222222 -> NaN Invalid_operation +xorx230 xor 999999999 444444444 -> NaN Invalid_operation +xorx231 xor 999999999 666666666 -> NaN Invalid_operation +xorx232 xor 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +xorx240 xor 567468689 -934981942 -> NaN Invalid_operation +xorx241 xor 567367689 934981942 -> NaN Invalid_operation +xorx242 xor -631917772 -706014634 -> NaN Invalid_operation +xorx243 xor -756253257 138579234 -> NaN Invalid_operation +xorx244 xor 835590149 567435400 -> NaN Invalid_operation +-- test MSD +xorx250 xor 200000000 100000000 -> NaN Invalid_operation +xorx251 xor 700000000 100000000 -> NaN Invalid_operation +xorx252 xor 800000000 100000000 -> NaN Invalid_operation +xorx253 xor 900000000 100000000 -> NaN Invalid_operation +xorx254 xor 200000000 000000000 -> NaN Invalid_operation +xorx255 xor 700000000 000000000 -> NaN Invalid_operation +xorx256 xor 800000000 000000000 -> NaN Invalid_operation +xorx257 xor 900000000 000000000 -> NaN Invalid_operation +xorx258 xor 100000000 200000000 -> NaN Invalid_operation +xorx259 xor 100000000 700000000 -> NaN Invalid_operation +xorx260 xor 100000000 800000000 -> NaN Invalid_operation +xorx261 xor 100000000 900000000 -> NaN Invalid_operation +xorx262 xor 000000000 200000000 -> NaN Invalid_operation +xorx263 xor 000000000 700000000 -> NaN Invalid_operation +xorx264 xor 000000000 800000000 -> NaN Invalid_operation +xorx265 xor 000000000 900000000 -> NaN Invalid_operation +-- test MSD-1 +xorx270 xor 020000000 100000000 -> NaN Invalid_operation +xorx271 xor 070100000 100000000 -> NaN Invalid_operation +xorx272 xor 080010000 100000001 -> NaN Invalid_operation +xorx273 xor 090001000 100000010 -> NaN Invalid_operation +xorx274 xor 100000100 020010100 -> NaN Invalid_operation +xorx275 xor 100000000 070001000 -> NaN Invalid_operation +xorx276 xor 100000010 080010100 -> NaN Invalid_operation +xorx277 xor 100000000 090000010 -> NaN Invalid_operation +-- test LSD +xorx280 xor 001000002 100000000 -> NaN Invalid_operation +xorx281 xor 000000007 100000000 -> NaN Invalid_operation +xorx282 xor 000000008 100000000 -> NaN Invalid_operation +xorx283 xor 000000009 100000000 -> NaN Invalid_operation +xorx284 xor 100000000 000100002 -> NaN Invalid_operation +xorx285 xor 100100000 001000007 -> NaN Invalid_operation +xorx286 xor 100010000 010000008 -> NaN Invalid_operation +xorx287 xor 100001000 100000009 -> NaN Invalid_operation +-- test Middie +xorx288 xor 001020000 100000000 -> NaN Invalid_operation +xorx289 xor 000070001 100000000 -> NaN Invalid_operation +xorx290 xor 000080000 100010000 -> NaN Invalid_operation +xorx291 xor 000090000 100001000 -> NaN Invalid_operation +xorx292 xor 100000010 000020100 -> NaN Invalid_operation +xorx293 xor 100100000 000070010 -> NaN Invalid_operation +xorx294 xor 100010100 000080001 -> NaN Invalid_operation +xorx295 xor 100001000 000090000 -> NaN Invalid_operation +-- signs +xorx296 xor -100001000 -000000000 -> NaN Invalid_operation +xorx297 xor -100001000 000010000 -> NaN Invalid_operation +xorx298 xor 100001000 -000000000 -> NaN Invalid_operation +xorx299 xor 100001000 000011000 -> 100010000 + +-- Nmax, Nmin, Ntiny +xorx331 xor 2 9.99999999E+999 -> NaN Invalid_operation +xorx332 xor 3 1E-999 -> NaN Invalid_operation +xorx333 xor 4 1.00000000E-999 -> NaN Invalid_operation +xorx334 xor 5 1E-1007 -> NaN Invalid_operation +xorx335 xor 6 -1E-1007 -> NaN Invalid_operation +xorx336 xor 7 -1.00000000E-999 -> NaN Invalid_operation +xorx337 xor 8 -1E-999 -> NaN Invalid_operation +xorx338 xor 9 -9.99999999E+999 -> NaN Invalid_operation +xorx341 xor 9.99999999E+999 -18 -> NaN Invalid_operation +xorx342 xor 1E-999 01 -> NaN Invalid_operation +xorx343 xor 1.00000000E-999 -18 -> NaN Invalid_operation +xorx344 xor 1E-1007 18 -> NaN Invalid_operation +xorx345 xor -1E-1007 -10 -> NaN Invalid_operation +xorx346 xor -1.00000000E-999 18 -> NaN Invalid_operation +xorx347 xor -1E-999 10 -> NaN Invalid_operation +xorx348 xor -9.99999999E+999 -18 -> NaN Invalid_operation + +-- A few other non-integers +xorx361 xor 1.0 1 -> NaN Invalid_operation +xorx362 xor 1E+1 1 -> NaN Invalid_operation +xorx363 xor 0.0 1 -> NaN Invalid_operation +xorx364 xor 0E+1 1 -> NaN Invalid_operation +xorx365 xor 9.9 1 -> NaN Invalid_operation +xorx366 xor 9E+1 1 -> NaN Invalid_operation +xorx371 xor 0 1.0 -> NaN Invalid_operation +xorx372 xor 0 1E+1 -> NaN Invalid_operation +xorx373 xor 0 0.0 -> NaN Invalid_operation +xorx374 xor 0 0E+1 -> NaN Invalid_operation +xorx375 xor 0 9.9 -> NaN Invalid_operation +xorx376 xor 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +xorx780 xor -Inf -Inf -> NaN Invalid_operation +xorx781 xor -Inf -1000 -> NaN Invalid_operation +xorx782 xor -Inf -1 -> NaN Invalid_operation +xorx783 xor -Inf -0 -> NaN Invalid_operation +xorx784 xor -Inf 0 -> NaN Invalid_operation +xorx785 xor -Inf 1 -> NaN Invalid_operation +xorx786 xor -Inf 1000 -> NaN Invalid_operation +xorx787 xor -1000 -Inf -> NaN Invalid_operation +xorx788 xor -Inf -Inf -> NaN Invalid_operation +xorx789 xor -1 -Inf -> NaN Invalid_operation +xorx790 xor -0 -Inf -> NaN Invalid_operation +xorx791 xor 0 -Inf -> NaN Invalid_operation +xorx792 xor 1 -Inf -> NaN Invalid_operation +xorx793 xor 1000 -Inf -> NaN Invalid_operation +xorx794 xor Inf -Inf -> NaN Invalid_operation + +xorx800 xor Inf -Inf -> NaN Invalid_operation +xorx801 xor Inf -1000 -> NaN Invalid_operation +xorx802 xor Inf -1 -> NaN Invalid_operation +xorx803 xor Inf -0 -> NaN Invalid_operation +xorx804 xor Inf 0 -> NaN Invalid_operation +xorx805 xor Inf 1 -> NaN Invalid_operation +xorx806 xor Inf 1000 -> NaN Invalid_operation +xorx807 xor Inf Inf -> NaN Invalid_operation +xorx808 xor -1000 Inf -> NaN Invalid_operation +xorx809 xor -Inf Inf -> NaN Invalid_operation +xorx810 xor -1 Inf -> NaN Invalid_operation +xorx811 xor -0 Inf -> NaN Invalid_operation +xorx812 xor 0 Inf -> NaN Invalid_operation +xorx813 xor 1 Inf -> NaN Invalid_operation +xorx814 xor 1000 Inf -> NaN Invalid_operation +xorx815 xor Inf Inf -> NaN Invalid_operation + +xorx821 xor NaN -Inf -> NaN Invalid_operation +xorx822 xor NaN -1000 -> NaN Invalid_operation +xorx823 xor NaN -1 -> NaN Invalid_operation +xorx824 xor NaN -0 -> NaN Invalid_operation +xorx825 xor NaN 0 -> NaN Invalid_operation +xorx826 xor NaN 1 -> NaN Invalid_operation +xorx827 xor NaN 1000 -> NaN Invalid_operation +xorx828 xor NaN Inf -> NaN Invalid_operation +xorx829 xor NaN NaN -> NaN Invalid_operation +xorx830 xor -Inf NaN -> NaN Invalid_operation +xorx831 xor -1000 NaN -> NaN Invalid_operation +xorx832 xor -1 NaN -> NaN Invalid_operation +xorx833 xor -0 NaN -> NaN Invalid_operation +xorx834 xor 0 NaN -> NaN Invalid_operation +xorx835 xor 1 NaN -> NaN Invalid_operation +xorx836 xor 1000 NaN -> NaN Invalid_operation +xorx837 xor Inf NaN -> NaN Invalid_operation + +xorx841 xor sNaN -Inf -> NaN Invalid_operation +xorx842 xor sNaN -1000 -> NaN Invalid_operation +xorx843 xor sNaN -1 -> NaN Invalid_operation +xorx844 xor sNaN -0 -> NaN Invalid_operation +xorx845 xor sNaN 0 -> NaN Invalid_operation +xorx846 xor sNaN 1 -> NaN Invalid_operation +xorx847 xor sNaN 1000 -> NaN Invalid_operation +xorx848 xor sNaN NaN -> NaN Invalid_operation +xorx849 xor sNaN sNaN -> NaN Invalid_operation +xorx850 xor NaN sNaN -> NaN Invalid_operation +xorx851 xor -Inf sNaN -> NaN Invalid_operation +xorx852 xor -1000 sNaN -> NaN Invalid_operation +xorx853 xor -1 sNaN -> NaN Invalid_operation +xorx854 xor -0 sNaN -> NaN Invalid_operation +xorx855 xor 0 sNaN -> NaN Invalid_operation +xorx856 xor 1 sNaN -> NaN Invalid_operation +xorx857 xor 1000 sNaN -> NaN Invalid_operation +xorx858 xor Inf sNaN -> NaN Invalid_operation +xorx859 xor NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +xorx861 xor NaN1 -Inf -> NaN Invalid_operation +xorx862 xor +NaN2 -1000 -> NaN Invalid_operation +xorx863 xor NaN3 1000 -> NaN Invalid_operation +xorx864 xor NaN4 Inf -> NaN Invalid_operation +xorx865 xor NaN5 +NaN6 -> NaN Invalid_operation +xorx866 xor -Inf NaN7 -> NaN Invalid_operation +xorx867 xor -1000 NaN8 -> NaN Invalid_operation +xorx868 xor 1000 NaN9 -> NaN Invalid_operation +xorx869 xor Inf +NaN10 -> NaN Invalid_operation +xorx871 xor sNaN11 -Inf -> NaN Invalid_operation +xorx872 xor sNaN12 -1000 -> NaN Invalid_operation +xorx873 xor sNaN13 1000 -> NaN Invalid_operation +xorx874 xor sNaN14 NaN17 -> NaN Invalid_operation +xorx875 xor sNaN15 sNaN18 -> NaN Invalid_operation +xorx876 xor NaN16 sNaN19 -> NaN Invalid_operation +xorx877 xor -Inf +sNaN20 -> NaN Invalid_operation +xorx878 xor -1000 sNaN21 -> NaN Invalid_operation +xorx879 xor 1000 sNaN22 -> NaN Invalid_operation +xorx880 xor Inf sNaN23 -> NaN Invalid_operation +xorx881 xor +NaN25 +sNaN24 -> NaN Invalid_operation +xorx882 xor -NaN26 NaN28 -> NaN Invalid_operation +xorx883 xor -sNaN27 sNaN29 -> NaN Invalid_operation +xorx884 xor 1000 -NaN30 -> NaN Invalid_operation +xorx885 xor 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/test_email/data/msg_26.txt b/Lib/test/test_email/data/msg_26.txt index 58efaa9c9a8..5cc6c8178c9 100644 --- a/Lib/test/test_email/data/msg_26.txt +++ b/Lib/test/test_email/data/msg_26.txt @@ -1,46 +1,46 @@ -Received: from xcar [192.168.0.2] by jeeves.wooster.local - (SMTPD32-7.07 EVAL) id AFF92F0214; Sun, 12 May 2002 08:55:37 +0100 -Date: Sun, 12 May 2002 08:56:15 +0100 -From: Father Time -To: timbo@jeeves.wooster.local -Subject: IMAP file test -Message-ID: <6df65d354b.father.time@rpc.wooster.local> -X-Organization: Home -User-Agent: Messenger-Pro/2.50a (MsgServe/1.50) (RISC-OS/4.02) POPstar/2.03 -MIME-Version: 1.0 -Content-Type: multipart/mixed; boundary="1618492860--2051301190--113853680" -Status: R -X-UIDL: 319998302 - -This message is in MIME format which your mailer apparently does not support. -You either require a newer version of your software which supports MIME, or -a separate MIME decoding utility. Alternatively, ask the sender of this -message to resend it in a different format. - ---1618492860--2051301190--113853680 -Content-Type: text/plain; charset=us-ascii - -Simple email with attachment. - - ---1618492860--2051301190--113853680 -Content-Type: application/riscos; name="clock.bmp,69c"; type=BMP; - load=&fff69c4b; exec=&355dd4d1; access=&03 -Content-Disposition: attachment; filename="clock.bmp" -Content-Transfer-Encoding: base64 - -Qk12AgAAAAAAAHYAAAAoAAAAIAAAACAAAAABAAQAAAAAAAAAAADXDQAA1w0AAAAAAAAA -AAAAAAAAAAAAiAAAiAAAAIiIAIgAAACIAIgAiIgAALu7uwCIiIgAERHdACLuIgAz//8A -zAAAAN0R3QDu7iIA////AAAAAAAAAAAAAAAAAAAAAAAAAAi3AAAAAAAAADeAAAAAAAAA -C3ADMzMzMANwAAAAAAAAAAAHMAAAAANwAAAAAAAAAACAMAd3zPfwAwgAAAAAAAAIAwd/ -f8x/f3AwgAAAAAAAgDB0x/f3//zPAwgAAAAAAAcHfM9////8z/AwAAAAAAiwd/f3//// -////A4AAAAAAcEx/f///////zAMAAAAAiwfM9////3///8zwOAAAAAcHf3////B///// -8DAAAAALB/f3///wd3d3//AwAAAABwTPf//wCQAAD/zAMAAAAAsEx/f///B////8wDAA -AAAHB39////wf/////AwAAAACwf39///8H/////wMAAAAIcHfM9///B////M8DgAAAAA -sHTH///wf///xAMAAAAACHB3f3//8H////cDgAAAAAALB3zH//D//M9wMAAAAAAAgLB0 -z39///xHAwgAAAAAAAgLB3d3RHd3cDCAAAAAAAAAgLAHd0R3cAMIAAAAAAAAgAgLcAAA -AAMwgAgAAAAACDAAAAu7t7cwAAgDgAAAAABzcIAAAAAAAAgDMwAAAAAAN7uwgAAAAAgH -MzMAAAAACH97tzAAAAALu3c3gAAAAAAL+7tzDABAu7f7cAAAAAAACA+3MA7EQAv/sIAA -AAAAAAAIAAAAAAAAAIAAAAAA - ---1618492860--2051301190--113853680-- +Received: from xcar [192.168.0.2] by jeeves.wooster.local + (SMTPD32-7.07 EVAL) id AFF92F0214; Sun, 12 May 2002 08:55:37 +0100 +Date: Sun, 12 May 2002 08:56:15 +0100 +From: Father Time +To: timbo@jeeves.wooster.local +Subject: IMAP file test +Message-ID: <6df65d354b.father.time@rpc.wooster.local> +X-Organization: Home +User-Agent: Messenger-Pro/2.50a (MsgServe/1.50) (RISC-OS/4.02) POPstar/2.03 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="1618492860--2051301190--113853680" +Status: R +X-UIDL: 319998302 + +This message is in MIME format which your mailer apparently does not support. +You either require a newer version of your software which supports MIME, or +a separate MIME decoding utility. Alternatively, ask the sender of this +message to resend it in a different format. + +--1618492860--2051301190--113853680 +Content-Type: text/plain; charset=us-ascii + +Simple email with attachment. + + +--1618492860--2051301190--113853680 +Content-Type: application/riscos; name="clock.bmp,69c"; type=BMP; + load=&fff69c4b; exec=&355dd4d1; access=&03 +Content-Disposition: attachment; filename="clock.bmp" +Content-Transfer-Encoding: base64 + +Qk12AgAAAAAAAHYAAAAoAAAAIAAAACAAAAABAAQAAAAAAAAAAADXDQAA1w0AAAAAAAAA +AAAAAAAAAAAAiAAAiAAAAIiIAIgAAACIAIgAiIgAALu7uwCIiIgAERHdACLuIgAz//8A +zAAAAN0R3QDu7iIA////AAAAAAAAAAAAAAAAAAAAAAAAAAi3AAAAAAAAADeAAAAAAAAA +C3ADMzMzMANwAAAAAAAAAAAHMAAAAANwAAAAAAAAAACAMAd3zPfwAwgAAAAAAAAIAwd/ +f8x/f3AwgAAAAAAAgDB0x/f3//zPAwgAAAAAAAcHfM9////8z/AwAAAAAAiwd/f3//// +////A4AAAAAAcEx/f///////zAMAAAAAiwfM9////3///8zwOAAAAAcHf3////B///// +8DAAAAALB/f3///wd3d3//AwAAAABwTPf//wCQAAD/zAMAAAAAsEx/f///B////8wDAA +AAAHB39////wf/////AwAAAACwf39///8H/////wMAAAAIcHfM9///B////M8DgAAAAA +sHTH///wf///xAMAAAAACHB3f3//8H////cDgAAAAAALB3zH//D//M9wMAAAAAAAgLB0 +z39///xHAwgAAAAAAAgLB3d3RHd3cDCAAAAAAAAAgLAHd0R3cAMIAAAAAAAAgAgLcAAA +AAMwgAgAAAAACDAAAAu7t7cwAAgDgAAAAABzcIAAAAAAAAgDMwAAAAAAN7uwgAAAAAgH +MzMAAAAACH97tzAAAAALu3c3gAAAAAAL+7tzDABAu7f7cAAAAAAACA+3MA7EQAv/sIAA +AAAAAAAIAAAAAAAAAIAAAAAA + +--1618492860--2051301190--113853680-- diff --git a/Lib/test/tokenizedata/coding20731.py b/Lib/test/tokenizedata/coding20731.py index b0e227ad110..ca4962ee8ef 100644 --- a/Lib/test/tokenizedata/coding20731.py +++ b/Lib/test/tokenizedata/coding20731.py @@ -1,4 +1,4 @@ -#coding:latin1 - - - +#coding:latin1 + + + diff --git a/Lib/test/xmltestdata/expat224_utf8_bug.xml b/Lib/test/xmltestdata/expat224_utf8_bug.xml index d66a8e6b50f..7880d96a979 100644 --- a/Lib/test/xmltestdata/expat224_utf8_bug.xml +++ b/Lib/test/xmltestdata/expat224_utf8_bug.xml @@ -1,2 +1,2 @@ - + diff --git a/Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/expat224_utf8_bug.xml b/Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/expat224_utf8_bug.xml index d66a8e6b50f..7880d96a979 100644 --- a/Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/expat224_utf8_bug.xml +++ b/Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/expat224_utf8_bug.xml @@ -1,2 +1,2 @@ - + diff --git a/PC/layout/main.py b/PC/layout/main.py index 3a62ea91420..cb0c23c3b69 100644 --- a/PC/layout/main.py +++ b/PC/layout/main.py @@ -520,9 +520,9 @@ def copy_files(files, ns): if need_compile: for dest, src in need_compile: compiled = [ - _compile_one_py(src, None, dest, optimize=0), - _compile_one_py(src, None, dest, optimize=1), - _compile_one_py(src, None, dest, optimize=2), + _compile_one_py(src, None, dest, optimize=0, checked=False), + _compile_one_py(src, None, dest, optimize=1, checked=False), + _compile_one_py(src, None, dest, optimize=2, checked=False), ] for c in compiled: if not c: diff --git a/Python/gc.c b/Python/gc.c index 54ac1b089e5..77e73b50b0d 100644 --- a/Python/gc.c +++ b/Python/gc.c @@ -21,6 +21,10 @@ typedef struct _gc_runtime_state GCState; +static void _Ci_PyGCImpl_Fini(GCState *gcstate); +static void _Ci_PyGC_InitState(GCState *gcstate); + + #ifdef Py_DEBUG # define GC_DEBUG #endif @@ -149,6 +153,8 @@ _PyGC_Init(PyInterpreterState *interp) return _PyStatus_NO_MEMORY(); } + _Ci_PyGC_InitState(gcstate); + return _PyStatus_OK(); } @@ -1420,7 +1426,7 @@ add_stats(GCState *gcstate, int gen, struct gc_generation_stats *stats) /* This is the main function. Read this to understand how the * collection process works. */ static Py_ssize_t -gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason) +gc_collect_impl(struct _Ci_PyGCImpl *impl, PyThreadState *tstate, int generation, _PyGC_Reason reason) { int i; PyGC_Head *young; /* the generation we are examining */ @@ -1435,11 +1441,6 @@ gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason) assert(gcstate->garbage != NULL); assert(!_PyErr_Occurred(tstate)); - int expected = 0; - if (!_Py_atomic_compare_exchange_int(&gcstate->collecting, &expected, 1)) { - // Don't start a garbage collection if one is already in progress. - return 0; - } gcstate->frame = tstate->current_frame; if (generation == GENERATION_AUTO) { @@ -1448,7 +1449,6 @@ gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason) generation = gc_select_generation(gcstate); if (generation < 0) { // No generation needs to be collected. - _Py_atomic_store_int(&gcstate->collecting, 0); return 0; } } @@ -1645,10 +1645,26 @@ gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason) assert(!_PyErr_Occurred(tstate)); gcstate->frame = NULL; - _Py_atomic_store_int(&gcstate->collecting, 0); return stats.uncollectable + stats.collected; } +static Py_ssize_t +gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason) +{ + GCState *gcstate = &tstate->interp->gc; + int expected = 0; + if (!_Py_atomic_compare_exchange_int(&gcstate->collecting, &expected, 1)) { + // Don't start a garbage collection if one is already in progress. + return 0; + } + + _Ci_PyGCImpl *impl = _Ci_PyGC_GetImpl(gcstate); + Py_ssize_t res = impl->collect(impl, tstate, generation, reason); + + _Py_atomic_store_int(&gcstate->collecting, 0); + return res; +} + static int referrersvisit(PyObject* obj, void *arg) { @@ -1896,6 +1912,8 @@ _PyGC_Fini(PyInterpreterState *interp) finalize_unlink_gc_head(&gcstate->generations[i].head); } finalize_unlink_gc_head(&gcstate->permanent_generation.head); + + _Ci_PyGCImpl_Fini(gcstate); } /* for debugging */ @@ -2171,4 +2189,105 @@ PyUnstable_GC_VisitObjects(gcvisitobjects_t callback, void *arg) gcstate->enabled = original_state; } +/* We keep a mapping between GCState and GCImpl to avoid potential ABI breakage. + */ +typedef struct _Ci_PyGCImplListNode _Ci_PyGCImplListNode; + +struct _Ci_PyGCImplListNode { + GCState *gc_state; + _Ci_PyGCImpl *gc_impl; + + _Ci_PyGCImplListNode *prev; + _Ci_PyGCImplListNode *next; +}; + +static _Ci_PyGCImplListNode *gc_impl_head; + +static _Ci_PyGCImplListNode * +Ci_find_gc_impl_node(GCState *gc_state) +{ + for (_Ci_PyGCImplListNode *cur = gc_impl_head; cur != NULL; cur = cur->next) { + if (cur->gc_state == gc_state) { + return cur; + } + } + return NULL; +} + +_Ci_PyGCImpl * +_Ci_PyGC_SetImpl(GCState *gc_state, _Ci_PyGCImpl *impl) +{ + _Ci_PyGCImpl *old_gc_impl = NULL; + + _Ci_PyGCImplListNode *node = Ci_find_gc_impl_node(gc_state); + if (node == NULL) { + node = PyMem_RawCalloc(1, sizeof(_Ci_PyGCImplListNode)); + if (node == NULL) { + PyErr_SetString(PyExc_MemoryError, "out of memory"); + return NULL; + } + + if (gc_impl_head != NULL) { + gc_impl_head->prev = node; + } + node->next = gc_impl_head; + gc_impl_head = node; + } else { + old_gc_impl = node->gc_impl; + } + + node->gc_state = gc_state; + node->gc_impl = impl; + + return old_gc_impl; +} + +_Ci_PyGCImpl * +_Ci_PyGC_GetImpl(GCState *gc_state) +{ + _Ci_PyGCImplListNode *node = Ci_find_gc_impl_node(gc_state); + return node->gc_impl; +} + +static void +_Ci_PyGCImpl_Fini(GCState *gc_state) +{ + _Ci_PyGCImplListNode *node = Ci_find_gc_impl_node(gc_state); + assert(node != NULL); + + node->gc_impl->finalize(node->gc_impl); + + if (node->prev != NULL) { + node->prev->next = node->next; + } + if (node->next != NULL) { + node->next->prev = node->prev; + } + if (gc_impl_head == node) { + gc_impl_head = node->next; + } + + PyMem_RawFree(node); +} + +static void +_Ci_PyGC_InitState(GCState *gcstate) +{ + _Ci_PyGCImpl *default_impl = PyMem_RawCalloc(1, sizeof(_Ci_PyGCImpl)); + if (default_impl == NULL) { + Py_FatalError("out of memory"); + return; + } + default_impl->collect = gc_collect_impl; + default_impl->finalize = (Ci_gc_finalize_t)PyMem_RawFree; + + _Ci_PyGC_SetImpl(gcstate, default_impl); +} + +void _Ci_PyGC_ClearFreeLists(PyInterpreterState* interp) +{ + _PyGC_ClearAllFreeLists(interp); +} + + #endif // !Py_GIL_DISABLED diff --git a/Python/pystate.c b/Python/pystate.c index ff712019aff..41c57a1c703 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -95,6 +95,13 @@ current_fast_set(_PyRuntimeState *Py_UNUSED(runtime), PyThreadState *tstate) _Py_tss_interp = tstate->interp; } +void +Ci_SetTStateForGC(PyThreadState *tstate) +{ + current_fast_set(&_PyRuntime, tstate); +} + + static inline void current_fast_clear(_PyRuntimeState *Py_UNUSED(runtime)) { diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 59bca201a94..47d82c8e276 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -1220,6 +1220,10 @@ def assign_opcodes( # 128 is RESUME - it is hard coded as such in Tools/build/deepfreeze.py instmap["RESUME"] = 128 + # Reserve 126 for EXTENDED_OPCODE if it's defined. + if "EXTENDED_OPCODE" in instructions: + instmap["EXTENDED_OPCODE"] = 126 + # This is an historical oddity. instmap["BINARY_OP_INPLACE_ADD_UNICODE"] = 3 From 13c73a0f3aec14d88a0629d5b463051776b00bb0 Mon Sep 17 00:00:00 2001 From: Dino Viehland Date: Wed, 3 Jun 2026 11:09:41 -0700 Subject: [PATCH 2/2] Merge main --- Doc/c-api/exceptions.rst | 4 +- Doc/c-api/import.rst | 5 - Doc/c-api/sentinel.rst | 4 +- Doc/c-api/threads.rst | 4 +- Doc/c-api/typehints.rst | 2 +- Doc/conf.py | 2 - Doc/data/refcounts.dat | 1 + Doc/deprecations/index.rst | 2 + Doc/deprecations/pending-removal-in-3.21.rst | 19 + .../a-conceptual-overview-of-asyncio.rst | 2 +- Doc/howto/free-threading-python.rst | 129 + Doc/library/_thread.rst | 79 +- Doc/library/abc.rst | 6 +- Doc/library/array.rst | 33 +- Doc/library/asyncio-future.rst | 2 + Doc/library/asyncio-task.rst | 3 + Doc/library/binascii.rst | 5 +- Doc/library/codecs.rst | 4 +- Doc/library/collections.rst | 5 + Doc/library/constants.rst | 6 +- Doc/library/contextvars.rst | 6 + Doc/library/copy.rst | 10 +- Doc/library/ctypes.rst | 16 +- Doc/library/dataclasses.rst | 7 +- Doc/library/difflib.rst | 22 +- Doc/library/email.headerregistry.rst | 7 +- Doc/library/enum.rst | 4 +- Doc/library/exceptions.rst | 3 + Doc/library/functions.rst | 69 +- Doc/library/gettext.rst | 32 +- Doc/library/gzip.rst | 23 +- Doc/library/imaplib.rst | 5 + Doc/library/importlib.metadata.rst | 19 + Doc/library/inspect.rst | 50 +- Doc/library/io.rst | 6 +- Doc/library/lzma.rst | 26 +- Doc/library/math.rst | 10 +- Doc/library/mimetypes.rst | 7 +- Doc/library/multiprocessing.rst | 13 +- Doc/library/os.rst | 41 +- Doc/library/pathlib.rst | 12 +- Doc/library/pprint.rst | 396 +- Doc/library/profiling.sampling.rst | 5 + Doc/library/pydoc.rst | 5 + Doc/library/pyexpat.rst | 35 +- Doc/library/queue.rst | 2 + Doc/library/re.rst | 6 + Doc/library/sched.rst | 8 +- Doc/library/select.rst | 260 +- Doc/library/shutil.rst | 18 +- Doc/library/site.rst | 87 +- Doc/library/sqlite3.rst | 9 + Doc/library/ssl.rst | 128 +- Doc/library/stdtypes.rst | 19 + Doc/library/string.rst | 24 +- Doc/library/string.templatelib.rst | 2 + Doc/library/sys.rst | 19 +- Doc/library/tarfile.rst | 4 +- Doc/library/threading.rst | 2 +- Doc/library/traceback.rst | 10 +- Doc/library/types.rst | 46 +- Doc/library/typing.rst | 50 +- Doc/library/unicodedata.rst | 43 +- Doc/library/unittest.mock.rst | 10 +- Doc/library/urllib.request.rst | 54 +- Doc/library/weakref.rst | 9 +- Doc/library/zipfile.rst | 8 +- Doc/reference/compound_stmts.rst | 8 +- Doc/reference/datamodel.rst | 19 +- Doc/reference/expressions.rst | 756 +- Doc/reference/import.rst | 12 + Doc/reference/simple_stmts.rst | 4 - Doc/tools/extensions/pydoc_topics.py | 1 + Doc/tools/removed-ids.txt | 14 + Doc/tools/templates/indexcontent.html | 152 +- Doc/tutorial/stdlib2.rst | 21 +- Doc/using/cmdline.rst | 22 +- Doc/using/configure.rst | 9 + Doc/whatsnew/3.10.rst | 6 +- Doc/whatsnew/3.12.rst | 2 + Doc/whatsnew/3.13.rst | 2 + Doc/whatsnew/3.14.rst | 2 + Doc/whatsnew/3.15.rst | 58 +- Doc/whatsnew/3.16.rst | 88 +- Include/cpython/pystats.h | 1 + Include/cpython/sentinelobject.h | 3 +- Include/import.h | 3 +- Include/internal/pycore_ceval.h | 16 +- Include/internal/pycore_codecs.h | 2 +- Include/internal/pycore_gc.h | 5 +- .../pycore_global_objects_fini_generated.h | 3 + Include/internal/pycore_global_strings.h | 3 + Include/internal/pycore_import.h | 2 + Include/internal/pycore_interp_structs.h | 10 +- Include/internal/pycore_interpframe.h | 5 + Include/internal/pycore_intrinsics.h | 3 +- Include/internal/pycore_jit.h | 2 + Include/internal/pycore_magic_number.h | 3 +- Include/internal/pycore_opcode_utils.h | 4 +- Include/internal/pycore_optimizer.h | 3 +- Include/internal/pycore_pystate.h | 17 +- Include/internal/pycore_pythonrun.h | 3 +- .../internal/pycore_runtime_init_generated.h | 3 + Include/internal/pycore_setobject.h | 3 + Include/internal/pycore_sliceobject.h | 2 +- Include/internal/pycore_stackref.h | 21 + .../internal/pycore_unicodeobject_generated.h | 12 + Include/internal/pycore_uop.h | 13 +- InternalDocs/compiler.md | 12 +- InternalDocs/qsbr.md | 42 +- Lib/_collections_abc.py | 29 +- Lib/_pydecimal.py | 107 +- Lib/_pyio.py | 134 +- Lib/_sitebuiltins.py | 1 - Lib/abc.py | 21 + Lib/ast.py | 22 +- Lib/asyncio/base_events.py | 5 +- Lib/asyncio/locks.py | 5 +- Lib/asyncio/proactor_events.py | 3 +- Lib/asyncio/selector_events.py | 3 +- Lib/asyncio/unix_events.py | 21 +- Lib/asyncio/windows_events.py | 3 + Lib/codecs.py | 4 +- Lib/compression/zstd/__init__.py | 28 +- Lib/compression/zstd/_zstdfile.py | 39 +- Lib/ctypes/__init__.py | 4 +- Lib/curses/textpad.py | 12 +- Lib/dataclasses.py | 8 +- Lib/difflib.py | 42 +- Lib/dis.py | 51 +- Lib/email/_parseaddr.py | 2 +- Lib/email/charset.py | 2 - Lib/encodings/aliases.py | 8 + Lib/encodings/big5.py | 9 + Lib/encodings/big5hkscs.py | 9 + Lib/encodings/cp932.py | 14 + Lib/encodings/cp949.py | 9 + Lib/encodings/cp950.py | 9 + Lib/encodings/euc_jis_2004.py | 9 + Lib/encodings/euc_jisx0213.py | 9 + Lib/encodings/euc_jp.py | 9 + Lib/encodings/euc_kr.py | 1 + Lib/encodings/gb18030.py | 1 + Lib/encodings/gb2312.py | 9 + Lib/encodings/gbk.py | 9 + Lib/encodings/hz.py | 1 + Lib/encodings/idna.py | 1 + Lib/encodings/iso2022_jp.py | 1 + Lib/encodings/iso2022_jp_1.py | 1 + Lib/encodings/iso2022_jp_2.py | 1 + Lib/encodings/iso2022_jp_2004.py | 1 + Lib/encodings/iso2022_jp_3.py | 1 + Lib/encodings/iso2022_jp_ext.py | 1 + Lib/encodings/iso2022_kr.py | 1 + Lib/encodings/johab.py | 9 + Lib/encodings/punycode.py | 1 + Lib/encodings/raw_unicode_escape.py | 1 + Lib/encodings/shift_jis.py | 13 + Lib/encodings/shift_jis_2004.py | 14 + Lib/encodings/shift_jisx0213.py | 14 + Lib/encodings/unicode_escape.py | 1 + Lib/encodings/utf_16.py | 1 + Lib/encodings/utf_16_be.py | 1 + Lib/encodings/utf_16_le.py | 1 + Lib/encodings/utf_32.py | 1 + Lib/encodings/utf_32_be.py | 1 + Lib/encodings/utf_32_le.py | 1 + Lib/encodings/utf_7.py | 1 + Lib/encodings/utf_8.py | 9 + Lib/encodings/utf_8_sig.py | 10 + Lib/ensurepip/__init__.py | 2 +- .../_bundled/pip-26.1.2-py3-none-any.whl | Bin 0 -> 1813144 bytes Lib/enum.py | 30 +- Lib/fractions.py | 20 +- Lib/functools.py | 12 +- Lib/glob.py | 34 +- Lib/gzip.py | 128 +- Lib/http/cookies.py | 7 +- Lib/imaplib.py | 2 +- Lib/json/__init__.py | 28 +- Lib/logging/config.py | 51 +- Lib/lzma.py | 1 + Lib/multiprocessing/connection.py | 2 +- Lib/multiprocessing/context.py | 4 +- Lib/ntpath.py | 16 +- Lib/opcode.py | 2 +- Lib/os.py | 55 +- Lib/pathlib/__init__.py | 8 +- Lib/pprint.py | 178 +- .../sampling/_flamegraph_assets/flamegraph.js | 12 + Lib/profiling/sampling/jsonl_collector.py | 1 + Lib/profiling/sampling/sample.py | 27 + Lib/pydoc.py | 1 + Lib/shutil.py | 24 +- Lib/signal.py | 2 +- Lib/site.py | 462 +- Lib/ssl.py | 7 +- Lib/sysconfig/__init__.py | 3 + Lib/tarfile.py | 95 +- Lib/test/_test_multiprocessing.py | 9 +- Lib/test/decimaltestdata/and.decTest | 676 +- Lib/test/decimaltestdata/class.decTest | 262 +- Lib/test/decimaltestdata/comparetotal.decTest | 1596 ++-- .../decimaltestdata/comparetotmag.decTest | 1580 ++-- Lib/test/decimaltestdata/copy.decTest | 172 +- Lib/test/decimaltestdata/copyabs.decTest | 172 +- Lib/test/decimaltestdata/copynegate.decTest | 172 +- Lib/test/decimaltestdata/copysign.decTest | 354 +- Lib/test/decimaltestdata/ddAbs.decTest | 252 +- Lib/test/decimaltestdata/ddAdd.decTest | 2656 +++---- Lib/test/decimaltestdata/ddAnd.decTest | 694 +- Lib/test/decimaltestdata/ddBase.decTest | 2208 +++--- Lib/test/decimaltestdata/ddCanonical.decTest | 714 +- Lib/test/decimaltestdata/ddClass.decTest | 152 +- Lib/test/decimaltestdata/ddCompare.decTest | 1488 ++-- Lib/test/decimaltestdata/ddCompareSig.decTest | 1294 ++-- .../decimaltestdata/ddCompareTotal.decTest | 1412 ++-- .../decimaltestdata/ddCompareTotalMag.decTest | 1412 ++-- Lib/test/decimaltestdata/ddCopy.decTest | 176 +- Lib/test/decimaltestdata/ddCopyAbs.decTest | 176 +- Lib/test/decimaltestdata/ddCopyNegate.decTest | 176 +- Lib/test/decimaltestdata/ddCopySign.decTest | 350 +- Lib/test/decimaltestdata/ddDivide.decTest | 1726 ++--- Lib/test/decimaltestdata/ddDivideInt.decTest | 898 +-- Lib/test/decimaltestdata/ddEncode.decTest | 990 +-- Lib/test/decimaltestdata/ddFMA.decTest | 3396 ++++---- Lib/test/decimaltestdata/ddInvert.decTest | 404 +- Lib/test/decimaltestdata/ddLogB.decTest | 318 +- Lib/test/decimaltestdata/ddMax.decTest | 644 +- Lib/test/decimaltestdata/ddMaxMag.decTest | 608 +- Lib/test/decimaltestdata/ddMin.decTest | 618 +- Lib/test/decimaltestdata/ddMinMag.decTest | 586 +- Lib/test/decimaltestdata/ddMinus.decTest | 176 +- Lib/test/decimaltestdata/ddMultiply.decTest | 1106 +-- Lib/test/decimaltestdata/ddNextMinus.decTest | 252 +- Lib/test/decimaltestdata/ddNextPlus.decTest | 248 +- Lib/test/decimaltestdata/ddNextToward.decTest | 748 +- Lib/test/decimaltestdata/ddOr.decTest | 584 +- Lib/test/decimaltestdata/ddPlus.decTest | 176 +- Lib/test/decimaltestdata/ddQuantize.decTest | 1666 ++-- Lib/test/decimaltestdata/ddReduce.decTest | 364 +- Lib/test/decimaltestdata/ddRemainder.decTest | 1200 +-- .../decimaltestdata/ddRemainderNear.decTest | 1258 +-- Lib/test/decimaltestdata/ddRotate.decTest | 524 +- .../decimaltestdata/ddSameQuantum.decTest | 778 +- Lib/test/decimaltestdata/ddScaleB.decTest | 486 +- Lib/test/decimaltestdata/ddShift.decTest | 524 +- Lib/test/decimaltestdata/ddSubtract.decTest | 1258 +-- Lib/test/decimaltestdata/ddToIntegral.decTest | 514 +- Lib/test/decimaltestdata/ddXor.decTest | 674 +- Lib/test/decimaltestdata/dqAbs.decTest | 252 +- Lib/test/decimaltestdata/dqAdd.decTest | 2430 +++--- Lib/test/decimaltestdata/dqAnd.decTest | 840 +- Lib/test/decimaltestdata/dqBase.decTest | 2162 +++--- Lib/test/decimaltestdata/dqCanonical.decTest | 744 +- Lib/test/decimaltestdata/dqClass.decTest | 154 +- Lib/test/decimaltestdata/dqCompare.decTest | 1506 ++-- Lib/test/decimaltestdata/dqCompareSig.decTest | 1294 ++-- .../decimaltestdata/dqCompareTotal.decTest | 1412 ++-- .../decimaltestdata/dqCompareTotalMag.decTest | 1412 ++-- Lib/test/decimaltestdata/dqCopy.decTest | 176 +- Lib/test/decimaltestdata/dqCopyAbs.decTest | 176 +- Lib/test/decimaltestdata/dqCopyNegate.decTest | 176 +- Lib/test/decimaltestdata/dqCopySign.decTest | 350 +- Lib/test/decimaltestdata/dqDivide.decTest | 1616 ++-- Lib/test/decimaltestdata/dqDivideInt.decTest | 906 +-- Lib/test/decimaltestdata/dqEncode.decTest | 954 +-- Lib/test/decimaltestdata/dqFMA.decTest | 3572 ++++----- Lib/test/decimaltestdata/dqInvert.decTest | 490 +- Lib/test/decimaltestdata/dqLogB.decTest | 320 +- Lib/test/decimaltestdata/dqMax.decTest | 644 +- Lib/test/decimaltestdata/dqMaxMag.decTest | 608 +- Lib/test/decimaltestdata/dqMin.decTest | 618 +- Lib/test/decimaltestdata/dqMinMag.decTest | 586 +- Lib/test/decimaltestdata/dqMinus.decTest | 176 +- Lib/test/decimaltestdata/dqMultiply.decTest | 1178 +-- Lib/test/decimaltestdata/dqNextMinus.decTest | 252 +- Lib/test/decimaltestdata/dqNextPlus.decTest | 248 +- Lib/test/decimaltestdata/dqNextToward.decTest | 750 +- Lib/test/decimaltestdata/dqOr.decTest | 802 +- Lib/test/decimaltestdata/dqPlus.decTest | 176 +- Lib/test/decimaltestdata/dqQuantize.decTest | 1672 ++-- Lib/test/decimaltestdata/dqReduce.decTest | 366 +- Lib/test/decimaltestdata/dqRemainder.decTest | 1194 +-- .../decimaltestdata/dqRemainderNear.decTest | 1262 +-- Lib/test/decimaltestdata/dqRotate.decTest | 596 +- .../decimaltestdata/dqSameQuantum.decTest | 778 +- Lib/test/decimaltestdata/dqScaleB.decTest | 520 +- Lib/test/decimaltestdata/dqShift.decTest | 596 +- Lib/test/decimaltestdata/dqSubtract.decTest | 1270 +-- Lib/test/decimaltestdata/dqToIntegral.decTest | 514 +- Lib/test/decimaltestdata/dqXor.decTest | 820 +- Lib/test/decimaltestdata/dsBase.decTest | 2124 ++--- Lib/test/decimaltestdata/dsEncode.decTest | 744 +- Lib/test/decimaltestdata/exp.decTest | 1348 ++-- Lib/test/decimaltestdata/fma.decTest | 6852 ++++++++--------- Lib/test/decimaltestdata/invert.decTest | 352 +- Lib/test/decimaltestdata/ln.decTest | 1222 +-- Lib/test/decimaltestdata/log10.decTest | 1102 +-- Lib/test/decimaltestdata/logb.decTest | 376 +- Lib/test/decimaltestdata/maxmag.decTest | 808 +- Lib/test/decimaltestdata/minmag.decTest | 780 +- Lib/test/decimaltestdata/nextminus.decTest | 296 +- Lib/test/decimaltestdata/nextplus.decTest | 300 +- Lib/test/decimaltestdata/nexttoward.decTest | 852 +- Lib/test/decimaltestdata/or.decTest | 668 +- Lib/test/decimaltestdata/powersqrt.decTest | 5940 +++++++------- Lib/test/decimaltestdata/rotate.decTest | 494 +- Lib/test/decimaltestdata/scaleb.decTest | 418 +- Lib/test/decimaltestdata/shift.decTest | 500 +- Lib/test/decimaltestdata/tointegralx.decTest | 510 +- Lib/test/decimaltestdata/xor.decTest | 670 +- Lib/test/libregrtest/logger.py | 16 +- Lib/test/libregrtest/main.py | 7 +- Lib/test/libregrtest/run_workers.py | 22 +- Lib/test/libregrtest/utils.py | 62 + Lib/test/memory_watchdog.py | 49 +- Lib/test/mime.types2 | 3 + Lib/test/support/__init__.py | 66 +- Lib/test/support/socket_helper.py | 2 + Lib/test/test__locale.py | 3 + Lib/test/test_abc.py | 61 +- Lib/test/test_array.py | 77 +- Lib/test/test_ast/test_ast.py | 43 +- Lib/test/test_asyncio/test_sendfile.py | 55 + Lib/test/test_asyncio/test_subprocess.py | 5 +- Lib/test/test_asyncio/test_transports.py | 20 + Lib/test/test_buffer.py | 10 - Lib/test/test_builtin.py | 56 +- Lib/test/test_bytes.py | 7 +- Lib/test/test_c_locale_coercion.py | 5 +- Lib/test/test_capi/test_object.py | 6 + Lib/test/test_capi/test_opt.py | 44 +- Lib/test/test_cmd_line.py | 2 + Lib/test/test_codecs.py | 11 + Lib/test/test_compiler_codegen.py | 31 + Lib/test/test_concurrent_futures/test_init.py | 2 + .../test_process_pool.py | 11 +- Lib/test/test_concurrent_futures/util.py | 2 +- Lib/test/test_crossinterp.py | 4 + Lib/test/test_ctypes/test_parameters.py | 8 + Lib/test/test_dataclasses/__init__.py | 9 + Lib/test/test_defaultdict.py | 12 + Lib/test/test_descrtut.py | 98 +- Lib/test/test_dict.py | 25 + Lib/test/test_dis.py | 34 +- Lib/test/test_email/data/msg_26.txt | 92 +- Lib/test/test_email/test_asian_codecs.py | 56 + Lib/test/test_email/test_email.py | 11 +- Lib/test/test_embed.py | 38 +- Lib/test/test_enum.py | 20 +- Lib/test/test_external_inspection.py | 7 + Lib/test/test_format.py | 38 +- Lib/test/test_free_threading/test_dict.py | 28 + .../test_free_threading/test_exceptions.py | 16 + .../test_free_threading/test_iteration.py | 2 +- Lib/test/test_free_threading/test_pickle.py | 78 + Lib/test/test_ftplib.py | 3 + Lib/test/test_generated_cases.py | 74 + Lib/test/test_genericalias.py | 13 +- Lib/test/test_grp.py | 101 +- Lib/test/test_gzip.py | 32 + Lib/test/test_http_cookies.py | 27 +- Lib/test/test_httpservers.py | 2 +- Lib/test/test_imaplib.py | 10 + Lib/test/test_io/test_memoryio.py | 19 + Lib/test/test_ioctl.py | 1 + Lib/test/test_json/test_decode.py | 7 + Lib/test/test_lazy_import/__init__.py | 334 +- Lib/test/test_lazy_import/__main__.py | 3 + .../data/module_with_getattr.py | 8 + .../test_lazy_import/data/pkg/__init__.py | 8 + Lib/test/test_logging.py | 36 +- Lib/test/test_lzma.py | 6 + Lib/test/test_math.py | 42 +- Lib/test/test_mimetypes.py | 416 +- Lib/test/test_msvcrt.py | 9 +- .../__init__.py | 2 +- Lib/test/test_os/test_os.py | 126 +- Lib/test/test_os/test_posix.py | 44 +- Lib/test/test_pathlib/test_pathlib.py | 110 + Lib/test/test_peepholer.py | 12 +- Lib/test/test_perf_profiler.py | 166 +- Lib/test/test_pickle.py | 6 +- Lib/test/test_pprint.py | 693 +- .../test_binary_format.py | 41 + .../test_sampling_profiler/test_blocking.py | 71 +- .../test_integration.py | 2 - .../test_live_collector_ui.py | 3 +- Lib/test/test_pwd.py | 94 +- Lib/test/test_pydoc/test_pydoc.py | 2 +- Lib/test/test_pyexpat.py | 115 +- Lib/test/test_re.py | 5 +- Lib/test/test_regrtest.py | 9 +- Lib/test/test_resource.py | 12 +- Lib/test/test_samply_profiler.py | 24 + Lib/test/test_shutil.py | 2 - Lib/test/test_signal.py | 4 + Lib/test/test_site.py | 421 +- Lib/test/test_socket.py | 13 +- Lib/test/test_sqlite3/test_factory.py | 10 + Lib/test/test_ssl.py | 75 +- Lib/test/test_stable_abi_ctypes.py | 28 +- Lib/test/test_statistics.py | 13 +- Lib/test/test_strptime.py | 17 + Lib/test/test_subprocess.py | 10 +- Lib/test/test_sysconfig.py | 6 + Lib/test/test_tarfile.py | 66 +- Lib/test/test_tcl.py | 12 +- Lib/test/test_tempfile.py | 10 +- Lib/test/test_termios.py | 45 +- Lib/test/test_tkinter/test_misc.py | 19 +- Lib/test/test_traceback.py | 3 + Lib/test/test_type_annotations.py | 7 + Lib/test/test_type_cache.py | 20 + Lib/test/test_unicodedata.py | 44 + .../test_unittest/testmock/testhelpers.py | 4 +- Lib/test/test_venv.py | 19 +- Lib/test/test_xml_etree.py | 95 +- Lib/test/test_zipfile/test_core.py | 57 +- Lib/test/tokenizedata/coding20731.py | 8 +- Lib/test/xmltestdata/expat224_utf8_bug.xml | 4 +- Lib/traceback.py | 23 +- Lib/types.py | 25 +- Lib/typing.py | 115 +- Lib/unittest/mock.py | 4 + Lib/venv/__init__.py | 8 + Lib/xml/etree/ElementTree.py | 113 +- Lib/zipfile/__init__.py | 64 +- Mac/BuildScript/build-installer.py | 6 +- Makefile.pre.in | 39 +- Misc/ACKS | 1 + Misc/Brewfile | 14 + Misc/NEWS.d/3.15.0a8.rst | 12 +- ...-05-18-16-00-41.gh-issue-148260.UwFiIX.rst | 3 + ...-05-19-12-45-23.gh-issue-131372.oJykeB.rst | 3 + ...-05-21-15-14-59.gh-issue-148294.VtFaW4.rst | 2 + ...-05-27-14-28-36.gh-issue-115119.wotFWh.rst | 1 + ...-04-15-15-48-04.gh-issue-148450.2MEVqH.rst | 1 + ...-issue-149321.remove-lazy-imports-none.rst | 1 + ...-05-10-16-43-50.gh-issue-148829.gscS14.rst | 2 + ...-05-11-18-20-41.gh-issue-148871.AeCbq7.rst | 3 + ...-05-13-06-54-41.gh-issue-149738.4BLFoH.rst | 2 + ...-05-13-21-26-26.gh-issue-149805.IG6cza.rst | 2 + ...-05-14-19-41-03.gh-issue-149807.IwGaCo.rst | 2 + ...-05-15-11-31-57.gh-issue-149816.ugN2rx.rst | 1 + ...-05-16-11-03-54.gh-issue-149816.X_gqMT.rst | 1 + ...-05-17-12-00-00.gh-issue-138325.h2XSfe.rst | 3 + ...-05-18-13-47-17.gh-issue-149590.IPBeQx.rst | 1 + ...-05-18-16-54-54.gh-issue-150042.LSr5W8.rst | 1 + ...-05-18-17-16-51.gh-issue-150027.sJgLvd.rst | 2 + ...-05-18-18-36-28.gh-issue-148587.-RD3z5.rst | 1 + ...-05-20-13-06-17.gh-issue-150146.i5m_SL.rst | 5 + ...-05-21-21-04-43.gh-issue-150208.VOkxRG.rst | 2 + ...-05-22-17-09-28.gh-issue-150107.GD72-D.rst | 3 + ...-05-23-22-08-01.gh-issue-149449.2lhQFF.rst | 3 + ...-05-24-14-45-00.gh-issue-149156.NP73rB.rst | 3 + ...-05-25-16-00-22.gh-issue-150374.Emu6d8.rst | 1 + ...-05-29-17-51-11.gh-issue-144774.jPcixe.rst | 1 + ...-06-01-19-21-01.gh-issue-150723.Hb3JDG.rst | 4 + ...-06-01-19-24-12.gh-issue-150723.WlcL_-.rst | 4 + ...-09-16-23-42-27.gh-issue-109503.mZ-kdU.rst | 3 + ...-05-23-17-27-41.gh-issue-150319.ol9tWK.rst | 2 + .../2022-04-04-17-58-05.bpo-47216.gPyPte.rst | 2 + ...3-02-26-14-07-18.gh-issue-91099._QPbEL.rst | 2 + ...-03-17-22-16-53.gh-issue-115988.EshSDM.rst | 1 + ...-07-02-20-57-43.gh-issue-121109.Tp6R2s.rst | 2 + ...-11-02-02-02-31.gh-issue-107398.uUtA6Q.rst | 1 + ...5-05-01-16-44-16.gh-issue-72902.19qwJW.rst | 3 + ...-05-19-20-29-35.gh-issue-133998.KmElUw.rst | 5 + ...-05-19-21-08-25.gh-issue-134261.ravGYm.rst | 1 + ...-08-30-07-44-30.gh-issue-86533.pathlib.rst | 4 + ...-10-12-08-46-26.gh-issue-139398.hESOMl.rst | 2 + ...-10-20-09-12-18.gh-issue-140344.WjbYg-.rst | 11 + ...3-26-09-30-00.gh-issue-146452.Y2N6qZ8J.rst | 2 + ...-04-27-11-12-00.gh-issue-149046.74shDd.rst | 2 + ...-04-29-08-10-17.gh-issue-149056.jnaD4W.rst | 2 + ...-05-06-20-10-44.gh-issue-149464.3mPhcr.rst | 3 + ...-05-07-14-18-47.gh-issue-149489.bX9iHe.rst | 5 + ...6-05-08-07-51-54.gh-issue-80480.nnA4p1.rst | 2 + ...-05-08-09-11-48.gh-issue-149534.Tw7eeY.rst | 1 + ...-05-08-16-44-20.gh-issue-149567.iiZKEj.rst | 2 + ...-05-10-16-06-27.gh-issue-149609.yLKPXo.rst | 3 + ...-05-10-19-26-50.gh-issue-149584.x7Qm9A.rst | 4 + ...-05-13-12-16-54.gh-issue-149473.nOQZqn.rst | 2 + ...-05-13-23-18-39.gh-issue-149801.S_FfGr.rst | 2 + ...-05-14-15-55-28.gh-issue-149816.ZaXQ0q.rst | 2 + ...6-05-14-17-01-19.gh-issue-62259.ytlFD5.rst | 9 + ...-05-15-16-28-00.gh-issue-149819.fixpth.rst | 4 + ...-05-15-18-44-20.gh-issue-142349.fHK3v1.rst | 1 + ...-05-16-21-08-33.gh-issue-149921.I1yNML.rst | 2 + ...-05-16-22-00-00.gh-issue-146406.10e0da.rst | 3 + ...-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst | 2 + ...6-05-17-22-37-02.gh-issue-88726.BAoL6j.rst | 2 + ...-05-18-07-44-46.gh-issue-149995.vvtFHn.rst | 1 + ...-05-18-12-42-31.gh-issue-149816.F98iME.rst | 2 + ...6-05-18-13-43-06.gh-issue-79413.OpTXbV.rst | 3 + ...-05-18-17-17-20.gh-issue-149189.a8IooK.rst | 1 + ...-05-18-22-45-54.gh-issue-149816.T68vc_.rst | 1 + ...-05-19-12-00-00.gh-issue-149980.Kx7p2A.rst | 3 + ...6-05-19-19-00-49.gh-issue-84353.ZU5zaQ.rst | 5 + ...-05-21-11-25-58.gh-issue-150175.8H4Caz.rst | 3 + ...5-21-20-47-45.gh-issue-150157.ZvmO-bQZ.rst | 3 + ...-05-22-15-30-00.gh-issue-132372.YP4a6x.rst | 2 + ...-05-25-07-22-05.gh-issue-150372.9hLqhe.rst | 2 + ...-05-25-17-00-00.gh-issue-150406.jF3g63.rst | 3 + ...-05-27-11-18-36.gh-issue-150228.pNPiO-.rst | 11 + ...-05-28-23-38-46.gh-issue-150478.qEr0E-.rst | 3 + ...-05-31-17-47-30.gh-issue-150685.EBB2mU.rst | 1 + ...-06-01-08-12-34.gh-issue-150717.LVRJXH.rst | 2 + ...-04-27-16-36-11.gh-issue-149079.vKl-LM.rst | 5 + ...-05-22-16-41-45.gh-issue-150114.UdMikH.rst | 2 + ...-05-25-15-39-53.gh-issue-150387.yzZ7jq.rst | 5 + ...-05-22-18-51-09.gh-issue-150258.dh8GVK.rst | 1 + ...-04-26-23-14-45.gh-issue-149029.oPTXP4.rst | 1 + ...-04-29-14-44-51.gh-issue-138489.234aj6.rst | 4 + ...-05-06-21-36-53.gh-issue-124111.m4OBX8.rst | 1 + ...-05-14-22-09-46.gh-issue-149786.UI-HZM.rst | 1 + ...-04-26-23-15-09.gh-issue-149029.Lsx--T.rst | 1 + ...-05-31-10-40-00.gh-issue-150644.zLWyjj.rst | 3 + Misc/externals.spdx.json | 28 +- Misc/sbom.spdx.json | 16 +- Modules/_abc.c | 8 +- Modules/_asynciomodule.c | 34 +- Modules/_bisectmodule.c | 12 +- Modules/_bz2module.c | 24 +- Modules/_codecsmodule.c | 42 +- Modules/_collectionsmodule.c | 15 +- Modules/_ctypes/_ctypes.c | 34 +- Modules/_ctypes/_ctypes_test.c | 2 +- Modules/_ctypes/callproc.c | 45 +- Modules/_ctypes/ctypes.h | 4 +- Modules/_curses_panel.c | 11 +- Modules/_cursesmodule.c | 415 +- Modules/_datetimemodule.c | 38 +- Modules/_dbmmodule.c | 5 +- Modules/_decimal/_decimal.c | 177 +- Modules/_decimal/clinic/_decimal.c.h | 122 +- Modules/_elementtree.c | 7 +- Modules/_functoolsmodule.c | 12 +- Modules/_gdbmmodule.c | 22 +- Modules/_hacl/Lib_Memzero0.c | 4 +- Modules/_hacl/libintvector.h | 12 + Modules/_hacl/refresh.sh | 2 +- Modules/_hashopenssl.c | 13 +- Modules/_heapqmodule.c | 9 +- Modules/_interpchannelsmodule.c | 4 +- Modules/_interpqueuesmodule.c | 6 +- Modules/_interpretersmodule.c | 16 +- Modules/_io/_iomodule.c | 89 +- Modules/_io/bufferedio.c | 2 + Modules/_io/bytesio.c | 12 +- Modules/_io/clinic/_iomodule.c.h | 85 +- Modules/_io/clinic/bytesio.c.h | 10 +- Modules/_io/clinic/fileio.c.h | 66 +- Modules/_io/clinic/iobase.c.h | 16 +- Modules/_io/clinic/stringio.c.h | 5 +- Modules/_io/clinic/textio.c.h | 13 +- Modules/_io/clinic/winconsoleio.c.h | 8 +- Modules/_io/fileio.c | 82 +- Modules/_io/iobase.c | 19 +- Modules/_io/stringio.c | 9 +- Modules/_io/textio.c | 18 +- Modules/_io/winconsoleio.c | 11 +- Modules/_json.c | 6 +- Modules/_lzmamodule.c | 45 +- .../_multiprocessing/clinic/posixshmem.c.h | 8 +- Modules/_multiprocessing/posixshmem.c | 8 +- Modules/_opcode.c | 4 +- Modules/_pickle.c | 63 +- Modules/_posixsubprocess.c | 17 +- Modules/_queuemodule.c | 57 +- Modules/_randommodule.c | 35 +- Modules/_remote_debugging/_remote_debugging.h | 85 +- Modules/_remote_debugging/asyncio.c | 41 +- Modules/_remote_debugging/binary_io_reader.c | 72 +- Modules/_remote_debugging/binary_io_writer.c | 42 +- Modules/_remote_debugging/clinic/module.c.h | 192 +- Modules/_remote_debugging/code_objects.c | 17 +- Modules/_remote_debugging/frame_cache.c | 26 + Modules/_remote_debugging/frames.c | 107 +- Modules/_remote_debugging/module.c | 508 +- Modules/_remote_debugging/object_reading.c | 58 +- Modules/_remote_debugging/subprocess.c | 51 +- Modules/_remote_debugging/threads.c | 205 +- Modules/_sqlite/blob.c | 26 +- Modules/_sqlite/clinic/blob.c.h | 19 +- Modules/_sqlite/clinic/connection.c.h | 41 +- Modules/_sqlite/connection.c | 103 +- Modules/_sre/sre.c | 21 +- Modules/_ssl.c | 115 +- Modules/_struct.c | 6 +- Modules/_testcapi/import.c | 4 - Modules/_testcapi/mem.c | 93 + Modules/_testcapi/object.c | 5 +- Modules/_testinternalcapi.c | 9 +- Modules/_testinternalcapi/test_cases.c.h | 5 +- Modules/_testlimitedcapi/clinic/long.c.h | 6 +- Modules/_testlimitedcapi/long.c | 6 +- Modules/_testmultiphase.c | 6 +- Modules/_threadmodule.c | 18 +- Modules/_tkinter.c | 6 +- Modules/_tracemalloc.c | 6 +- Modules/_winapi.c | 64 + .../expat224_utf8_bug.xml | 4 +- Modules/_zstd/clinic/compressor.c.h | 31 +- Modules/_zstd/clinic/decompressor.c.h | 30 +- Modules/_zstd/clinic/zstddict.c.h | 30 +- Modules/_zstd/compressor.c | 41 +- Modules/_zstd/decompressor.c | 37 +- Modules/_zstd/zstddict.c | 40 +- Modules/arraymodule.c | 239 +- Modules/cjkcodecs/clinic/multibytecodec.c.h | 18 +- Modules/cjkcodecs/multibytecodec.c | 22 +- Modules/clinic/_abc.c.h | 8 +- Modules/clinic/_asynciomodule.c.h | 19 +- Modules/clinic/_bisectmodule.c.h | 10 +- Modules/clinic/_bz2module.c.h | 23 +- Modules/clinic/_codecsmodule.c.h | 34 +- Modules/clinic/_curses_panel.c.h | 8 +- Modules/clinic/_cursesmodule.c.h | 282 +- Modules/clinic/_datetimemodule.c.h | 21 +- Modules/clinic/_dbmmodule.c.h | 5 +- Modules/clinic/_functoolsmodule.c.h | 8 +- Modules/clinic/_gdbmmodule.c.h | 18 +- Modules/clinic/_hashopenssl.c.h | 10 +- Modules/clinic/_heapqmodule.c.h | 6 +- Modules/clinic/_interpqueuesmodule.c.h | 5 +- Modules/clinic/_interpretersmodule.c.h | 10 +- Modules/clinic/_json.c.h | 6 +- Modules/clinic/_lzmamodule.c.h | 23 +- Modules/clinic/_posixsubprocess.c.h | 16 +- Modules/clinic/_queuemodule.c.h | 16 +- Modules/clinic/_randommodule.c.h | 33 +- Modules/clinic/_ssl.c.h | 55 +- Modules/clinic/_testmultiphase.c.h | 6 +- Modules/clinic/_threadmodule.c.h | 16 +- Modules/clinic/_tkinter.c.h | 5 +- Modules/clinic/_winapi.c.h | 29 +- Modules/clinic/arraymodule.c.h | 23 +- Modules/clinic/cmathmodule.c.h | 14 +- Modules/clinic/faulthandler.c.h | 8 +- Modules/clinic/gcmodule.c.h | 13 +- Modules/clinic/hmacmodule.c.h | 6 +- Modules/clinic/itertoolsmodule.c.h | 6 +- Modules/clinic/mathmodule.c.h | 11 +- Modules/clinic/overlapped.c.h | 7 +- Modules/clinic/posixmodule.c.h | 480 +- Modules/clinic/pyexpat.c.h | 73 +- Modules/clinic/selectmodule.c.h | 35 +- Modules/clinic/signalmodule.c.h | 17 +- Modules/clinic/socketmodule.c.h | 22 +- Modules/clinic/termios.c.h | 5 +- Modules/clinic/zlibmodule.c.h | 27 +- Modules/cmathmodule.c | 17 +- Modules/faulthandler.c | 24 +- Modules/gcmodule.c | 17 +- Modules/hmacmodule.c | 7 +- Modules/itertoolsmodule.c | 21 +- Modules/mathmodule.c | 18 +- Modules/overlapped.c | 7 +- Modules/posixmodule.c | 570 +- Modules/pyexpat.c | 190 +- Modules/readline.c | 14 +- Modules/selectmodule.c | 51 +- Modules/signalmodule.c | 23 +- Modules/socketmodule.c | 49 +- Modules/termios.c | 9 +- Modules/timemodule.c | 9 +- Modules/unicodedata.c | 189 +- Modules/zlibmodule.c | 32 +- Objects/bytearrayobject.c | 98 +- Objects/bytes_methods.c | 4 +- Objects/bytesobject.c | 112 +- Objects/clinic/bytearrayobject.c.h | 73 +- Objects/clinic/bytesobject.c.h | 75 +- Objects/clinic/codeobject.c.h | 5 +- Objects/clinic/exceptions.c.h | 4 +- Objects/clinic/floatobject.c.h | 6 +- Objects/clinic/listobject.c.h | 10 +- Objects/clinic/longobject.c.h | 45 +- Objects/clinic/memoryobject.c.h | 17 +- Objects/clinic/odictobject.c.h | 5 +- Objects/clinic/sentinelobject.c.h | 62 +- Objects/clinic/unicodeobject.c.h | 162 +- Objects/codeobject.c | 5 +- Objects/descrobject.c | 2 +- Objects/dictobject.c | 65 +- Objects/enumobject.c | 2 +- Objects/exceptions.c | 7 +- Objects/floatobject.c | 7 +- Objects/frameobject.c | 3 +- Objects/genericaliasobject.c | 3 + Objects/genobject.c | 8 +- Objects/interpolationobject.c | 2 +- Objects/lazyimportobject.c | 2 +- Objects/listobject.c | 25 +- Objects/longobject.c | 53 +- Objects/memoryobject.c | 43 +- Objects/moduleobject.c | 34 + Objects/odictobject.c | 5 +- Objects/sentinelobject.c | 42 +- Objects/setobject.c | 22 +- Objects/sliceobject.c | 31 +- Objects/templateobject.c | 6 +- Objects/tupleobject.c | 11 +- Objects/typeobject.c | 19 +- Objects/unicodeobject.c | 239 +- Objects/unionobject.c | 3 +- Objects/weakrefobject.c | 3 +- PC/_wmimodule.cpp | 7 +- PC/clinic/_wmimodule.cpp.h | 6 +- PC/layout/main.py | 4 + PC/layout/support/builddetails.py | 119 + PC/layout/support/constants.py | 9 + PC/layout/support/options.py | 8 + PC/layout/support/pymanager.py | 5 +- PC/python_uwp.cpp | 1 + PCbuild/get_externals.bat | 8 +- PCbuild/python.props | 2 +- PCbuild/python.vcxproj | 8 + PCbuild/pythonw.vcxproj | 8 + PCbuild/readme.txt | 4 +- PCbuild/tcltk.props | 6 +- PCbuild/venvlauncher.vcxproj | 7 +- PCbuild/venvwlauncher.vcxproj | 7 +- Platforms/Android/__main__.py | 2 +- Platforms/Apple/testbed/__main__.py | 2 +- Programs/_testembed.c | 9 +- Python/asm_trampoline_aarch64.S | 77 + Python/asm_trampoline_riscv64.S | 12 + Python/asm_trampoline_x86_64.S | 45 + Python/bltinmodule.c | 139 +- Python/bytecodes.c | 5 +- Python/ceval.c | 70 +- Python/ceval_macros.h | 6 +- Python/clinic/bltinmodule.c.h | 63 +- Python/clinic/context.c.h | 27 +- Python/clinic/import.c.h | 7 +- Python/clinic/marshal.c.h | 10 +- Python/clinic/sysmodule.c.h | 28 +- Python/codecs.c | 1 + Python/codegen.c | 50 +- Python/context.c | 44 +- Python/executor_cases.c.h | 3707 ++++----- Python/flowgraph.c | 8 +- Python/generated_cases.c.h | 5 +- Python/hamt.c | 2 + Python/import.c | 263 +- Python/initconfig.c | 60 +- Python/instrumentation.c | 4 +- Python/intrinsics.c | 20 +- Python/jit.c | 12 +- Python/marshal.c | 13 +- Python/optimizer.c | 38 - Python/optimizer_bytecodes.c | 23 +- Python/optimizer_cases.c.h | 25 +- Python/perf_jit_trampoline.c | 29 +- Python/perf_trampoline.c | 17 +- Python/pylifecycle.c | 51 +- Python/pystate.c | 38 +- Python/record_functions.c.h | 82 +- Python/remote_debug.h | 496 +- Python/symtable.c | 3 +- Python/sysmodule.c | 53 +- Tools/c-analyzer/cpython/ignored.tsv | 1 + Tools/cases_generator/analyzer.py | 14 + .../record_function_generator.py | 135 +- Tools/cases_generator/tier2_generator.py | 4 +- Tools/clinic/libclinic/function.py | 8 +- .../benchmark_external_inspection.py | 100 +- Tools/jit/template.c | 8 +- Tools/msi/dev/dev_files.wxs | 6 + Tools/msi/tcltk/tcltk_files.wxs | 11 +- Tools/msi/testrelease.bat | 2 - configure | 362 +- configure.ac | 167 +- 777 files changed, 68163 insertions(+), 61368 deletions(-) create mode 100644 Doc/deprecations/pending-removal-in-3.21.rst create mode 100644 Lib/ensurepip/_bundled/pip-26.1.2-py3-none-any.whl create mode 100644 Lib/test/mime.types2 create mode 100644 Lib/test/test_free_threading/test_exceptions.py create mode 100644 Lib/test/test_free_threading/test_pickle.py create mode 100644 Lib/test/test_lazy_import/__main__.py create mode 100644 Misc/Brewfile create mode 100644 Misc/NEWS.d/next/Build/2026-05-18-16-00-41.gh-issue-148260.UwFiIX.rst create mode 100644 Misc/NEWS.d/next/Build/2026-05-19-12-45-23.gh-issue-131372.oJykeB.rst create mode 100644 Misc/NEWS.d/next/Build/2026-05-21-15-14-59.gh-issue-148294.VtFaW4.rst create mode 100644 Misc/NEWS.d/next/Build/2026-05-27-14-28-36.gh-issue-115119.wotFWh.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-04-15-15-48-04.gh-issue-148450.2MEVqH.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-05-12-00-00.gh-issue-149321.remove-lazy-imports-none.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-10-16-43-50.gh-issue-148829.gscS14.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-11-18-20-41.gh-issue-148871.AeCbq7.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-13-06-54-41.gh-issue-149738.4BLFoH.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-13-21-26-26.gh-issue-149805.IG6cza.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-14-19-41-03.gh-issue-149807.IwGaCo.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-15-11-31-57.gh-issue-149816.ugN2rx.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-16-11-03-54.gh-issue-149816.X_gqMT.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-17-12-00-00.gh-issue-138325.h2XSfe.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-16-54-54.gh-issue-150042.LSr5W8.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-17-16-51.gh-issue-150027.sJgLvd.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-18-36-28.gh-issue-148587.-RD3z5.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-20-13-06-17.gh-issue-150146.i5m_SL.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-21-21-04-43.gh-issue-150208.VOkxRG.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-22-17-09-28.gh-issue-150107.GD72-D.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-23-22-08-01.gh-issue-149449.2lhQFF.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-24-14-45-00.gh-issue-149156.NP73rB.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-25-16-00-22.gh-issue-150374.Emu6d8.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-29-17-51-11.gh-issue-144774.jPcixe.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-06-01-19-21-01.gh-issue-150723.Hb3JDG.rst create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-06-01-19-24-12.gh-issue-150723.WlcL_-.rst create mode 100644 Misc/NEWS.d/next/Documentation/2023-09-16-23-42-27.gh-issue-109503.mZ-kdU.rst create mode 100644 Misc/NEWS.d/next/Documentation/2026-05-23-17-27-41.gh-issue-150319.ol9tWK.rst create mode 100644 Misc/NEWS.d/next/Library/2022-04-04-17-58-05.bpo-47216.gPyPte.rst create mode 100644 Misc/NEWS.d/next/Library/2023-02-26-14-07-18.gh-issue-91099._QPbEL.rst create mode 100644 Misc/NEWS.d/next/Library/2024-03-17-22-16-53.gh-issue-115988.EshSDM.rst create mode 100644 Misc/NEWS.d/next/Library/2024-07-02-20-57-43.gh-issue-121109.Tp6R2s.rst create mode 100644 Misc/NEWS.d/next/Library/2024-11-02-02-02-31.gh-issue-107398.uUtA6Q.rst create mode 100644 Misc/NEWS.d/next/Library/2025-05-01-16-44-16.gh-issue-72902.19qwJW.rst create mode 100644 Misc/NEWS.d/next/Library/2025-05-19-20-29-35.gh-issue-133998.KmElUw.rst create mode 100644 Misc/NEWS.d/next/Library/2025-05-19-21-08-25.gh-issue-134261.ravGYm.rst create mode 100644 Misc/NEWS.d/next/Library/2025-08-30-07-44-30.gh-issue-86533.pathlib.rst create mode 100644 Misc/NEWS.d/next/Library/2025-10-12-08-46-26.gh-issue-139398.hESOMl.rst create mode 100644 Misc/NEWS.d/next/Library/2025-10-20-09-12-18.gh-issue-140344.WjbYg-.rst create mode 100644 Misc/NEWS.d/next/Library/2026-03-26-09-30-00.gh-issue-146452.Y2N6qZ8J.rst create mode 100644 Misc/NEWS.d/next/Library/2026-04-27-11-12-00.gh-issue-149046.74shDd.rst create mode 100644 Misc/NEWS.d/next/Library/2026-04-29-08-10-17.gh-issue-149056.jnaD4W.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-06-20-10-44.gh-issue-149464.3mPhcr.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-07-14-18-47.gh-issue-149489.bX9iHe.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-08-07-51-54.gh-issue-80480.nnA4p1.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-08-09-11-48.gh-issue-149534.Tw7eeY.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-08-16-44-20.gh-issue-149567.iiZKEj.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-10-16-06-27.gh-issue-149609.yLKPXo.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-10-19-26-50.gh-issue-149584.x7Qm9A.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-13-12-16-54.gh-issue-149473.nOQZqn.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-13-23-18-39.gh-issue-149801.S_FfGr.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-14-15-55-28.gh-issue-149816.ZaXQ0q.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-14-17-01-19.gh-issue-62259.ytlFD5.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-15-16-28-00.gh-issue-149819.fixpth.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-15-18-44-20.gh-issue-142349.fHK3v1.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-16-21-08-33.gh-issue-149921.I1yNML.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-16-22-00-00.gh-issue-146406.10e0da.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-17-22-37-02.gh-issue-88726.BAoL6j.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-18-07-44-46.gh-issue-149995.vvtFHn.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-18-12-42-31.gh-issue-149816.F98iME.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-18-13-43-06.gh-issue-79413.OpTXbV.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-18-17-17-20.gh-issue-149189.a8IooK.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-18-22-45-54.gh-issue-149816.T68vc_.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-19-12-00-00.gh-issue-149980.Kx7p2A.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-19-19-00-49.gh-issue-84353.ZU5zaQ.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-21-11-25-58.gh-issue-150175.8H4Caz.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-21-20-47-45.gh-issue-150157.ZvmO-bQZ.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-22-15-30-00.gh-issue-132372.YP4a6x.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-25-07-22-05.gh-issue-150372.9hLqhe.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-25-17-00-00.gh-issue-150406.jF3g63.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-27-11-18-36.gh-issue-150228.pNPiO-.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-28-23-38-46.gh-issue-150478.qEr0E-.rst create mode 100644 Misc/NEWS.d/next/Library/2026-05-31-17-47-30.gh-issue-150685.EBB2mU.rst create mode 100644 Misc/NEWS.d/next/Library/2026-06-01-08-12-34.gh-issue-150717.LVRJXH.rst create mode 100644 Misc/NEWS.d/next/Security/2026-04-27-16-36-11.gh-issue-149079.vKl-LM.rst create mode 100644 Misc/NEWS.d/next/Tests/2026-05-22-16-41-45.gh-issue-150114.UdMikH.rst create mode 100644 Misc/NEWS.d/next/Tests/2026-05-25-15-39-53.gh-issue-150387.yzZ7jq.rst create mode 100644 Misc/NEWS.d/next/Tools-Demos/2026-05-22-18-51-09.gh-issue-150258.dh8GVK.rst create mode 100644 Misc/NEWS.d/next/Windows/2026-04-26-23-14-45.gh-issue-149029.oPTXP4.rst create mode 100644 Misc/NEWS.d/next/Windows/2026-04-29-14-44-51.gh-issue-138489.234aj6.rst create mode 100644 Misc/NEWS.d/next/Windows/2026-05-06-21-36-53.gh-issue-124111.m4OBX8.rst create mode 100644 Misc/NEWS.d/next/Windows/2026-05-14-22-09-46.gh-issue-149786.UI-HZM.rst create mode 100644 Misc/NEWS.d/next/macOS/2026-04-26-23-15-09.gh-issue-149029.Lsx--T.rst create mode 100644 Misc/NEWS.d/next/macOS/2026-05-31-10-40-00.gh-issue-150644.zLWyjj.rst create mode 100644 PC/layout/support/builddetails.py create mode 100644 Python/asm_trampoline_aarch64.S create mode 100644 Python/asm_trampoline_riscv64.S create mode 100644 Python/asm_trampoline_x86_64.S diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst index fd9ea6272df..f3f408c400b 100644 --- a/Doc/c-api/exceptions.rst +++ b/Doc/c-api/exceptions.rst @@ -412,7 +412,7 @@ an error value). .. c:function:: int PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, const char *format, ...) - Function similar to :c:func:`PyErr_WarnEx`, but use + Function similar to :c:func:`PyErr_WarnEx`, but uses :c:func:`PyUnicode_FromFormat` to format the warning message. *format* is an ASCII-encoded string. @@ -1392,7 +1392,7 @@ Tracebacks This function will return ``NULL`` on success, or an error message on error. - This function is meant to debug debug situations such as segfaults, fatal + This function is meant to debug situations such as segfaults, fatal errors, and similar. It calls :c:func:`PyUnstable_DumpTraceback` for each thread. It only writes the tracebacks of the first *max_threads* threads, further output is truncated with the line ``...``. If *max_threads* is 0, the diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst index e2d363b911a..ec9462931d5 100644 --- a/Doc/c-api/import.rst +++ b/Doc/c-api/import.rst @@ -393,11 +393,6 @@ Importing Modules Make all imports lazy by default. - .. c:enumerator:: PyImport_LAZY_NONE - - Disable lazy imports entirely. Even explicit ``lazy`` statements become - eager imports. - .. versionadded:: 3.15 .. c:function:: PyObject* PyImport_CreateModuleFromInitfunc(PyObject *spec, PyObject* (*initfunc)(void)) diff --git a/Doc/c-api/sentinel.rst b/Doc/c-api/sentinel.rst index 937cae18e86..b1b7329a5d4 100644 --- a/Doc/c-api/sentinel.rst +++ b/Doc/c-api/sentinel.rst @@ -31,12 +31,12 @@ Sentinel objects .. versionadded:: 3.15 -.. c:function:: PyObject* PySentinel_New(const char *name, const char *module_name) +.. c:function:: PyObject* PySentinel_New(const char *name, const char *module_name, const char *repr) Return a new :class:`sentinel` object with :attr:`~sentinel.__name__` set to *name* and :attr:`~sentinel.__module__` set to *module_name*. *name* must not be ``NULL``. If *module_name* is ``NULL``, :attr:`~sentinel.__module__` - is set to ``None``. + is set to ``None``. If *repr* is ``NULL``, ``repr()`` returns :attr:`~sentinel.__name__`. Return ``NULL`` with an exception set on failure. For pickling to work, *module_name* must be the name of an importable diff --git a/Doc/c-api/threads.rst b/Doc/c-api/threads.rst index 508a4d71ecd..ca34abd73d8 100644 --- a/Doc/c-api/threads.rst +++ b/Doc/c-api/threads.rst @@ -736,10 +736,10 @@ Low-level APIs .. c:function:: PyObject* PyThreadState_GetDict() Return a dictionary in which extensions can store thread-specific state - information. Each extension should use a unique key to use to store state in + information. Each extension should use a unique key to store a state in the dictionary. It is okay to call this function when no :term:`thread state` is :term:`attached `. If this function returns - ``NULL``, no exception has been raised and the caller should assume no + ``NULL`` and no exception has been raised, then the caller should assume no thread state is attached. diff --git a/Doc/c-api/typehints.rst b/Doc/c-api/typehints.rst index 98fe68737de..ec2fba6da8b 100644 --- a/Doc/c-api/typehints.rst +++ b/Doc/c-api/typehints.rst @@ -31,7 +31,7 @@ two types exist -- :ref:`GenericAlias ` and static PyMethodDef my_obj_methods[] = { // Other methods. ... - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, "See PEP 585"} + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, "my_obj is generic over its contained type"} ... } diff --git a/Doc/conf.py b/Doc/conf.py index e2dff74538a..3856f4fe9b3 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -349,8 +349,6 @@ \sphinxstrong{Python Software Foundation}\\ Email: \sphinxemail{docs@python.org} } -\let\Verbatim=\OriginalVerbatim -\let\endVerbatim=\endOriginalVerbatim \setcounter{tocdepth}{2} ''', # The paper size ('letterpaper' or 'a4paper'). diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat index 663b79e45ee..60c02aabeb8 100644 --- a/Doc/data/refcounts.dat +++ b/Doc/data/refcounts.dat @@ -2040,6 +2040,7 @@ PySeqIter_New:PyObject*:seq:0: PySentinel_New:PyObject*::+1: PySentinel_New:const char*:name:: PySentinel_New:const char*:module_name:: +PySentinel_New:const char*:repr:: PySequence_Check:int::: PySequence_Check:PyObject*:o:0: diff --git a/Doc/deprecations/index.rst b/Doc/deprecations/index.rst index eedcd2e9c9d..50e1b126fd1 100644 --- a/Doc/deprecations/index.rst +++ b/Doc/deprecations/index.rst @@ -13,6 +13,8 @@ Deprecations .. include:: pending-removal-in-3.20.rst +.. include:: pending-removal-in-3.21.rst + .. include:: pending-removal-in-future.rst .. include:: soft-deprecations.rst diff --git a/Doc/deprecations/pending-removal-in-3.21.rst b/Doc/deprecations/pending-removal-in-3.21.rst new file mode 100644 index 00000000000..18b89a20e4a --- /dev/null +++ b/Doc/deprecations/pending-removal-in-3.21.rst @@ -0,0 +1,19 @@ +Pending removal in Python 3.21 +------------------------------ + +* :mod:`abc` + + * Soft-deprecated since Python 3.3 :class:`abc.abstractclassmethod`, + :class:`abc.abstractstaticmethod`, and :class:`abc.abstractproperty` + now raise a :exc:`DeprecationWarning`. + These classes will be removed in Python 3.21, instead + use :func:`abc.abstractmethod` with :func:`classmethod`, + :func:`staticmethod`, and :class:`property` respectively. + +* :mod:`ast`: + + * Classes ``slice``, ``Index``, ``ExtSlice``, ``Suite``, ``Param``, + ``AugLoad`` and ``AugStore``, will be removed in Python 3.21. These types + are not generated by the parser or accepted by the code generator. + * The ``dims`` property of ``ast.Tuple`` will be removed in Python 3.21. Use + the ``ast.Tuple.elts`` property instead. diff --git a/Doc/howto/a-conceptual-overview-of-asyncio.rst b/Doc/howto/a-conceptual-overview-of-asyncio.rst index 3adfedbf410..7a7a87cb958 100644 --- a/Doc/howto/a-conceptual-overview-of-asyncio.rst +++ b/Doc/howto/a-conceptual-overview-of-asyncio.rst @@ -115,7 +115,7 @@ The terms "coroutine function" and "coroutine object" are often conflated as coroutine. That can be confusing! In this article, coroutine specifically refers to a coroutine object, or more -precisely, an instance of :data:`types.CoroutineType` (native coroutine). +precisely, an instance of :class:`types.CoroutineType` (native coroutine). Note that coroutines can also exist as instances of :class:`collections.abc.Coroutine` -- a distinction that matters for type checking. diff --git a/Doc/howto/free-threading-python.rst b/Doc/howto/free-threading-python.rst index 380c2be0495..53bea1db191 100644 --- a/Doc/howto/free-threading-python.rst +++ b/Doc/howto/free-threading-python.rst @@ -165,3 +165,132 @@ to false. If the flag is true then the :class:`warnings.catch_warnings` context manager uses a context variable for warning filters. If the flag is false then :class:`~warnings.catch_warnings` modifies the global filters list, which is not thread-safe. See the :mod:`warnings` module for more details. + + +Increased memory usage +---------------------- + +The free-threaded build will typically use more memory compared to the default +build. There are multiple reasons for this, mostly due to design decisions. + + +All interned strings are immortal +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For modern Python versions (since version 2.3), interning a string (e.g. with +:func:`sys.intern`) does not cause it to become immortal. Instead, if the last +reference to that string disappears, it will be removed from the interned +string table. This is not the case for the free-threaded build and any interned +string will become immortal, surviving until interpreter shutdown. + + +Non-GC objects have a larger object header +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The free-threaded build uses a different :c:type:`PyObject` structure. Instead +of having the GC related information allocated before the :c:type:`PyObject` +structure, like in the default build, the GC related info is part of the normal +object header. For example, on the AMD64 platform, ``None`` uses 32 bytes on +the free-threaded build vs 16 bytes for the default build. GC objects (such as +dicts and lists) are the same size for both builds since the free-threaded +build does not use additional space for the GC info. + + +QSBR can delay freeing of memory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In order to safely implement lock-free data structures, a safe memory +reclamation (SMR) scheme is used, known as quiescent state-based reclamation +(QSBR). This means that the memory backing data structures allowing lock-free +access will use QSBR, which defers the free operation, rather than immediately +freeing the memory. Two examples of these data structures are the list object +and the dictionary keys object. See ``InternalDocs/qsbr.md`` in the CPython +source tree for more details on how QSBR is implemented. Running +:func:`gc.collect` should cause all memory being held by QSBR to be actually +freed. Note that even when QSBR frees the memory, the underlying memory +allocator may not immediately return that memory to the OS and so the resident +set size (RSS) of the process might not decrease. + + +mimalloc allocator vs pymalloc +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The default build will normally use the "pymalloc" memory allocator for small +allocations (512 bytes or smaller). The free-threaded build does not use +pymalloc and allocates all Python objects using the "mimalloc" allocator. The +pymalloc allocator has the following properties that help keep memory usage +low: small per-allocated-block overhead, effective memory fragmentation +prevention, and quick return of free memory to the operating system. The +mimalloc allocator does quite well in these respects as well but can have some +more overhead. + +In the free-threaded build, mimalloc manages memory in a number of separate +heaps (currently four). For example, all GC supporting objects are allocated +from their own heap. Using separate heaps means that free memory in one heap +cannot be used for an allocation that uses another heap. Also, some heaps are +configured to use QSBR (quiescent-state based reclamation) when freeing the +memory that backs up the heap (known as "pages" in mimalloc terminology). The +use of QSBR creates a delay between all memory blocks for a page being freed +and the memory page being released, either for new allocations or back to the +OS. + +The mimalloc allocator also defers returning freed memory back to the OS. You +can reduce that delay by setting the environment variable +:envvar:`!MIMALLOC_PURGE_DELAY` to ``0``. Note that this will likely reduce +the performance of the allocator. + + +Free-threaded reference counting can cause objects to live longer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In the default build, when an object's reference count reaches zero, it is +normally deallocated. The free-threaded build uses "biased reference +counting", with a fast-path for objects "owned" by the current thread and a +slow path for other objects. See :pep:`703` for additional details. Any time +an object's reference count ends up in a "queued" state, deallocation can be +deferred. The queued state is cleared from the "eval breaker" section of the +bytecode evaluator. + +The free-threaded build also allows a different mode of reference counting, +known as "deferred reference counting". This mode is enabled by setting a flag +on a per-object basis. Deferred reference counting is enabled for the +following types: + +* module objects +* module top-level functions +* class methods defined in the class scope +* descriptor objects +* thread-local objects, created by :class:`threading.local` + +When deferred reference counting is enabled, references from Python function +stacks are not added to the reference count. This scheme reduces the overhead +of reference counting, especially for objects used from multiple threads. +Because the stack references are not counted, objects with deferred reference +counting are not immediately freed when their internal reference count goes to +zero. Instead, they are examined by the next GC run and, if no stack +references to them are found, they are freed. This means these objects are +freed by the GC and not when their reference count goes to zero, as is typical. + + +Per-thread reference counting can delay freeing objects +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To avoid contention on the reference count fields of frequently shared +objects, the free-threaded build also uses "per-thread reference counting" +for a few selected object types. Rather than updating a single shared +reference count, each thread maintains its own local reference count array, +indexed by a unique id assigned to the object. The true reference count is +only computed by summing the per-thread counts when the object's local +count drops to zero. Per-thread reference counting is currently used for: + +* heap type objects (classes created in Python) +* code objects +* the ``__dict__`` of module objects + +Because the per-thread counts must be merged back to the object before it +can be deallocated, objects using per-thread reference counting are +typically freed later than they would be in the default build. In +particular, such an object is usually not freed until the thread that +referenced it reaches a safe point (for example, in the "eval breaker" +section of the bytecode evaluator) or exits. Running :func:`gc.collect` +will merge the per-thread counts and allow these objects to be freed. diff --git a/Doc/library/_thread.rst b/Doc/library/_thread.rst index 47f5eabb6f2..13f463a1e95 100644 --- a/Doc/library/_thread.rst +++ b/Doc/library/_thread.rst @@ -36,11 +36,6 @@ This module defines the following constants and functions: This is now a synonym of the built-in :exc:`RuntimeError`. -.. data:: LockType - - This is the type of lock objects. - - .. function:: start_new_thread(function, args[, kwargs]) Start a new thread and return its identifier. The thread executes the @@ -162,58 +157,66 @@ This module defines the following constants and functions: .. versionadded:: 3.2 -Lock objects have the following methods: +.. raw:: html + + + + + +.. class:: LockType -.. method:: lock.acquire(blocking=True, timeout=-1) + This is the type of lock objects. - Without any optional argument, this method acquires the lock unconditionally, if - necessary waiting until it is released by another thread (only one thread at a - time can acquire a lock --- that's their reason for existence). + Lock objects have the following methods: - If the *blocking* argument is present, the action depends on its - value: if it is false, the lock is only acquired if it can be acquired - immediately without waiting, while if it is true, the lock is acquired - unconditionally as above. + .. method:: acquire(blocking=True, timeout=-1) - If the floating-point *timeout* argument is present and positive, it - specifies the maximum wait time in seconds before returning. A negative - *timeout* argument specifies an unbounded wait. You cannot specify - a *timeout* if *blocking* is false. + Without any optional argument, this method acquires the lock unconditionally, if + necessary waiting until it is released by another thread (only one thread at a + time can acquire a lock --- that's their reason for existence). - The return value is ``True`` if the lock is acquired successfully, - ``False`` if not. + If the *blocking* argument is present, the action depends on its + value: if it is false, the lock is only acquired if it can be acquired + immediately without waiting, while if it is true, the lock is acquired + unconditionally as above. - .. versionchanged:: 3.2 - The *timeout* parameter is new. + If the floating-point *timeout* argument is present and positive, it + specifies the maximum wait time in seconds before returning. A negative + *timeout* argument specifies an unbounded wait. You cannot specify + a *timeout* if *blocking* is false. - .. versionchanged:: 3.2 - Lock acquires can now be interrupted by signals on POSIX. + The return value is ``True`` if the lock is acquired successfully, + ``False`` if not. - .. versionchanged:: 3.14 - Lock acquires can now be interrupted by signals on Windows. + .. versionchanged:: 3.2 + The *timeout* parameter is new. + .. versionchanged:: 3.2 + Lock acquires can now be interrupted by signals on POSIX. -.. method:: lock.release() + .. versionchanged:: 3.14 + Lock acquires can now be interrupted by signals on Windows. - Releases the lock. The lock must have been acquired earlier, but not - necessarily by the same thread. + .. method:: release() + Releases the lock. The lock must have been acquired earlier, but not + necessarily by the same thread. -.. method:: lock.locked() + .. method:: locked() - Return the status of the lock: ``True`` if it has been acquired by some thread, - ``False`` if not. + Return the status of the lock: ``True`` if it has been acquired by some thread, + ``False`` if not. -In addition to these methods, lock objects can also be used via the -:keyword:`with` statement, e.g.:: + In addition to these methods, lock objects can also be used via the + :keyword:`with` statement, e.g.:: - import _thread + import _thread - a_lock = _thread.allocate_lock() + a_lock = _thread.allocate_lock() - with a_lock: - print("a_lock is locked while this executes") + with a_lock: + print("a_lock is locked while this executes") **Caveats:** diff --git a/Doc/library/abc.rst b/Doc/library/abc.rst index 8112cfee7d2..904eff2e31e 100644 --- a/Doc/library/abc.rst +++ b/Doc/library/abc.rst @@ -237,7 +237,7 @@ The :mod:`!abc` module also supports the following legacy decorators: .. decorator:: abstractclassmethod .. versionadded:: 3.2 - .. deprecated:: 3.3 + .. deprecated-removed:: 3.3 3.21 It is now possible to use :class:`classmethod` with :func:`abstractmethod`, making this decorator redundant. @@ -258,7 +258,7 @@ The :mod:`!abc` module also supports the following legacy decorators: .. decorator:: abstractstaticmethod .. versionadded:: 3.2 - .. deprecated:: 3.3 + .. deprecated-removed:: 3.3 3.21 It is now possible to use :class:`staticmethod` with :func:`abstractmethod`, making this decorator redundant. @@ -278,7 +278,7 @@ The :mod:`!abc` module also supports the following legacy decorators: .. decorator:: abstractproperty - .. deprecated:: 3.3 + .. deprecated-removed:: 3.3 3.21 It is now possible to use :class:`property`, :meth:`property.getter`, :meth:`property.setter` and :meth:`property.deleter` with :func:`abstractmethod`, making this decorator redundant. diff --git a/Doc/library/array.rst b/Doc/library/array.rst index 4b3ffbbfe80..c688d54318e 100644 --- a/Doc/library/array.rst +++ b/Doc/library/array.rst @@ -22,9 +22,7 @@ defined: +-----------+--------------------+-------------------+-----------------------+-------+ | ``'B'`` | unsigned char | int | 1 | | +-----------+--------------------+-------------------+-----------------------+-------+ -| ``'u'`` | wchar_t | Unicode character | 2 | \(1) | -+-----------+--------------------+-------------------+-----------------------+-------+ -| ``'w'`` | Py_UCS4 | Unicode character | 4 | \(2) | +| ``'w'`` | Py_UCS4 | Unicode character | 4 | \(1) | +-----------+--------------------+-------------------+-----------------------+-------+ | ``'h'`` | signed short | int | 2 | | +-----------+--------------------+-------------------+-----------------------+-------+ @@ -42,35 +40,24 @@ defined: +-----------+--------------------+-------------------+-----------------------+-------+ | ``'Q'`` | unsigned long long | int | 8 | | +-----------+--------------------+-------------------+-----------------------+-------+ -| ``'e'`` | _Float16 | float | 2 | \(3) | +| ``'e'`` | _Float16 | float | 2 | \(2) | +-----------+--------------------+-------------------+-----------------------+-------+ | ``'f'`` | float | float | 4 | | +-----------+--------------------+-------------------+-----------------------+-------+ | ``'d'`` | double | float | 8 | | +-----------+--------------------+-------------------+-----------------------+-------+ -| ``'Zf'`` | float complex | complex | 8 | \(4) | +| ``'Zf'`` | float complex | complex | 8 | \(3) | +-----------+--------------------+-------------------+-----------------------+-------+ -| ``'Zd'`` | double complex | complex | 16 | \(4) | +| ``'Zd'`` | double complex | complex | 16 | \(3) | +-----------+--------------------+-------------------+-----------------------+-------+ Notes: (1) - It can be 16 bits or 32 bits depending on the platform. - - .. versionchanged:: 3.9 - ``array('u')`` now uses :c:type:`wchar_t` as C type instead of deprecated - ``Py_UNICODE``. This change doesn't affect its behavior because - ``Py_UNICODE`` is alias of :c:type:`wchar_t` since Python 3.3. - - .. deprecated-removed:: 3.3 3.16 - Please migrate to ``'w'`` typecode. - -(2) .. versionadded:: 3.13 -(3) +(2) The IEEE 754 binary16 "half precision" type was introduced in the 2008 revision of the `IEEE 754 standard `_. This type is not widely supported by C compilers. It's available @@ -79,7 +66,7 @@ Notes: .. versionadded:: 3.15 -(4) +(3) Complex types (``Zf`` and ``Zd``) are available unconditionally, regardless on support for complex types (the Annex G of the C11 standard) by the C compiler. @@ -134,6 +121,8 @@ The module defines the following type: :exc:`TypeError` is raised. Array objects also implement the buffer interface, and may be used wherever :term:`bytes-like objects ` are supported. + Arrays are :ref:`generic ` over the type of their contents. + .. audit-event:: array.__new__ typecode,initializer array.array @@ -220,7 +209,7 @@ The module defines the following type: .. method:: fromunicode(ustr, /) Extends this array with data from the given Unicode string. - The array must have type code ``'u'`` or ``'w'``; otherwise a :exc:`ValueError` is raised. + The array must have type code ``'w'``; otherwise a :exc:`ValueError` is raised. Use ``array.frombytes(unicodestring.encode(enc))`` to append Unicode data to an array of some other type. @@ -288,7 +277,7 @@ The module defines the following type: .. method:: tounicode() - Convert the array to a Unicode string. The array must have a type ``'u'`` or ``'w'``; + Convert the array to a Unicode string. The array must have a type ``'w'``; otherwise a :exc:`ValueError` is raised. Use ``array.tobytes().decode(enc)`` to obtain a Unicode string from an array of some other type. @@ -296,7 +285,7 @@ The module defines the following type: The string representation of array objects has the form ``array(typecode, initializer)``. The *initializer* is omitted if the array is empty, otherwise it is -a Unicode string if the *typecode* is ``'u'`` or ``'w'``, otherwise it is +a Unicode string if the *typecode* is ``'w'``, otherwise it is a list of numbers. The string representation is guaranteed to be able to be converted back to an array with the same type and value using :func:`eval`, so long as the diff --git a/Doc/library/asyncio-future.rst b/Doc/library/asyncio-future.rst index 43977de273e..195d99123db 100644 --- a/Doc/library/asyncio-future.rst +++ b/Doc/library/asyncio-future.rst @@ -101,6 +101,8 @@ Future Object implementations can inject their own optimized implementations of a Future object. + Futures are :ref:`generic ` over the type of their results. + .. versionchanged:: 3.7 Added support for the :mod:`contextvars` module. diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index cc833b80d52..64f0810777e 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -1230,6 +1230,9 @@ Task object blocks. If the coroutine returns or raises without blocking, the task will be finished eagerly and will skip scheduling to the event loop. + Tasks are :ref:`generic ` over the return type of their wrapped + coroutines. + .. versionchanged:: 3.7 Added support for the :mod:`contextvars` module. diff --git a/Doc/library/binascii.rst b/Doc/library/binascii.rst index 60afe9261d5..ceb80a35a1a 100644 --- a/Doc/library/binascii.rst +++ b/Doc/library/binascii.rst @@ -367,9 +367,8 @@ The :mod:`!binascii` module defines the following functions: *ignorechars* should be a :term:`bytes-like object` containing characters to ignore from the input. - Similar functionality (accepting only text string arguments, but more - liberal towards whitespace) is also accessible using the - :meth:`bytes.fromhex` class method. + Similar functionality (but more liberal towards whitespace) is also accessible + using the :meth:`bytes.fromhex` class method. .. versionchanged:: 3.15 Added the *ignorechars* parameter. diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 9259ab10d58..059ed2c03ac 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -1155,7 +1155,7 @@ particular, the following variants typically exist: +-----------------+--------------------------------+--------------------------------+ | cp857 | 857, IBM857 | Turkish | +-----------------+--------------------------------+--------------------------------+ -| cp858 | 858, IBM858 | Western Europe | +| cp858 | 858, IBM00858 | Western Europe | +-----------------+--------------------------------+--------------------------------+ | cp860 | 860, IBM860 | Portuguese | +-----------------+--------------------------------+--------------------------------+ @@ -1192,7 +1192,7 @@ particular, the following variants typically exist: | | | | | | | .. versionadded:: 3.4 | +-----------------+--------------------------------+--------------------------------+ -| cp1140 | ibm1140 | Western Europe | +| cp1140 | IBM01140 | Western Europe | +-----------------+--------------------------------+--------------------------------+ | cp1250 | windows-1250 | Central and Eastern Europe | +-----------------+--------------------------------+--------------------------------+ diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index e42bdc06be0..25e4a71b03c 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -484,6 +484,8 @@ or subtracting from an empty counter. Unix. They are also useful for tracking transactions and other pools of data where only the most recent activity is of interest. + Deques are :ref:`generic ` over the type of their contents. + Deque objects support the following methods: @@ -739,6 +741,9 @@ stack manipulations such as ``dup``, ``drop``, ``swap``, ``over``, ``pick``, as if they were passed to the :class:`dict` constructor, including keyword arguments. + :class:`!defaultdict`\s are :ref:`generic ` over two types, + signifying (respectively) the types of the dictionary's keys and values. + :class:`defaultdict` objects support the following method in addition to the standard :class:`dict` operations: diff --git a/Doc/library/constants.rst b/Doc/library/constants.rst index d058ba206c6..6f005f98bd3 100644 --- a/Doc/library/constants.rst +++ b/Doc/library/constants.rst @@ -22,7 +22,7 @@ A small number of constants live in the built-in namespace. They are: An object frequently used to represent the absence of a value, as when default arguments are not passed to a function. Assignments to ``None`` are illegal and raise a :exc:`SyntaxError`. - ``None`` is the sole instance of the :data:`~types.NoneType` type. + ``None`` is the sole instance of the :class:`~types.NoneType` type. .. data:: NotImplemented @@ -33,7 +33,7 @@ A small number of constants live in the built-in namespace. They are: the other type; may be returned by the in-place binary special methods (e.g. :meth:`~object.__imul__`, :meth:`~object.__iand__`, etc.) for the same purpose. It should not be evaluated in a boolean context. - :data:`!NotImplemented` is the sole instance of the :data:`types.NotImplementedType` type. + :data:`!NotImplemented` is the sole instance of the :class:`types.NotImplementedType` type. .. note:: @@ -68,7 +68,7 @@ A small number of constants live in the built-in namespace. They are: The same as the ellipsis literal "``...``", an object frequently used to indicate that something is omitted. Assignment to ``Ellipsis`` is possible, but assignment to ``...`` raises a :exc:`SyntaxError`. - ``Ellipsis`` is the sole instance of the :data:`types.EllipsisType` type. + ``Ellipsis`` is the sole instance of the :class:`types.EllipsisType` type. .. data:: __debug__ diff --git a/Doc/library/contextvars.rst b/Doc/library/contextvars.rst index 93d0c0d34bf..b0cc0be8e91 100644 --- a/Doc/library/contextvars.rst +++ b/Doc/library/contextvars.rst @@ -42,6 +42,9 @@ Context Variables references to context variables which prevents context variables from being properly garbage collected. + :class:`!ContextVar`\s are :ref:`generic ` over the type of + their contained value. + .. attribute:: ContextVar.name The name of the variable. This is a read-only property. @@ -130,6 +133,9 @@ Context Variables Tokens support the :ref:`context manager protocol ` to automatically reset context variables. See :meth:`ContextVar.set`. + Tokens are :ref:`generic ` over the same type as the + :class:`ContextVar` which created them. + .. versionadded:: 3.14 Added support for usage as a context manager. diff --git a/Doc/library/copy.rst b/Doc/library/copy.rst index 121c44a16ad..39fc7800d03 100644 --- a/Doc/library/copy.rst +++ b/Doc/library/copy.rst @@ -72,9 +72,13 @@ file, socket, window, or any similar types. It does "copy" functions and classes (shallow and deeply), by returning the original object unchanged; this is compatible with the way these are treated by the :mod:`pickle` module. -Shallow copies of dictionaries can be made using :meth:`dict.copy`, and -of lists by assigning a slice of the entire list, for example, -``copied_list = original_list[:]``. +Shallow copies of many collections can be made using the corresponding +:meth:`!copy` method (such as :meth:`list.copy`, :meth:`dict.copy` or +:meth:`set.copy`), and of sequences (such as lists or bytearrays) by making +a slice of the entire sequence (``sequence[:]``). +However, these methods and slicing can create an instance of the base type +when copying an instance of a subclass, whereas :func:`copy.copy` normally +returns an instance of the same type. .. index:: pair: module; pickle diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 4330be92201..d6e70482592 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -14,6 +14,14 @@ used to wrap these libraries in pure Python. .. include:: ../includes/optional-module.rst +.. warning:: + + :mod:`!ctypes` provides low-level access to native libraries and the + process's memory, bypassing Python's safety mechanisms and allowing + execution of arbitrary native code. + Incorrect use can corrupt data and objects, reveal sensitive information, + cause crashes, or otherwise compromise the running process. + .. _ctypes-ctypes-tutorial: @@ -198,10 +206,8 @@ argument values:: OSError: exception: access violation reading 0x00000020 >>> -There are, however, enough ways to crash Python with :mod:`!ctypes`, so you -should be careful anyway. The :mod:`faulthandler` module can be helpful in -debugging crashes (e.g. from segmentation faults produced by erroneous C library -calls). +The :mod:`faulthandler` module can help debug crashes, +such as segmentation faults produced by erroneous C library calls. ``None``, integers, bytes objects and (unicode) strings are the only native Python objects that can directly be used as parameters in these function calls. @@ -3171,6 +3177,8 @@ Arrays and pointers subscript and slice accesses; for slice reads, the resulting object is *not* itself an :class:`Array`. + Arrays are :ref:`generic ` over the type of their elements. + .. attribute:: _length_ diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index a09c28ad979..954edc4506d 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -418,7 +418,7 @@ Module contents :func:`!astuple` raises :exc:`TypeError` if *obj* is not a dataclass instance. -.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False, weakref_slot=False, module=None, decorator=dataclass) +.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False, weakref_slot=False, module=None, qualname=None, decorator=dataclass) Creates a new dataclass with name *cls_name*, fields as defined in *fields*, base classes as given in *bases*, and initialized @@ -434,6 +434,9 @@ Module contents of the dataclass is set to that value. By default, it is set to the module name of the caller. + If *qualname* is defined, the :attr:`~type.__qualname__` attribute of the dataclass + is set to that value. By default, it is set to the value passed to *cls_name*. + The *decorator* parameter is a callable that will be used to create the dataclass. It should take the class object as a first argument and the same keyword arguments as :deco:`dataclass`. By default, the :deco:`dataclass` @@ -464,6 +467,8 @@ Module contents .. versionadded:: 3.14 Added the *decorator* parameter. + .. versionadded:: next + Added the *qualname* parameter. .. function:: replace(obj, /, **changes) diff --git a/Doc/library/difflib.rst b/Doc/library/difflib.rst index e5afa174413..8b812c173b5 100644 --- a/Doc/library/difflib.rst +++ b/Doc/library/difflib.rst @@ -728,18 +728,16 @@ Finally, we compare the two: >>> from pprint import pprint >>> pprint(result) - [ - ' 1. Beautiful is better than ugly.\n', - '- 2. Explicit is better than implicit.\n', - '- 3. Simple is better than complex.\n', - '+ 3. Simple is better than complex.\n', - '? ++\n', - '- 4. Complex is better than complicated.\n', - '? ^ ---- ^\n', - '+ 4. Complicated is better than complex.\n', - '? ++++ ^ ^\n', - '+ 5. Flat is better than nested.\n', - ] + [' 1. Beautiful is better than ugly.\n', + '- 2. Explicit is better than implicit.\n', + '- 3. Simple is better than complex.\n', + '+ 3. Simple is better than complex.\n', + '? ++\n', + '- 4. Complex is better than complicated.\n', + '? ^ ---- ^\n', + '+ 4. Complicated is better than complex.\n', + '? ++++ ^ ^\n', + '+ 5. Flat is better than nested.\n'] As a single multi-line string it looks like this: diff --git a/Doc/library/email.headerregistry.rst b/Doc/library/email.headerregistry.rst index c6924a0ac29..619c17c98e8 100644 --- a/Doc/library/email.headerregistry.rst +++ b/Doc/library/email.headerregistry.rst @@ -93,9 +93,10 @@ headers. ``kwds`` is a dictionary containing one pre-initialized key, ``defects``. ``defects`` is an empty list. The parse method should append any detected defects to this list. On return, the ``kwds`` dictionary *must* contain - values for at least the keys ``decoded`` and ``defects``. ``decoded`` - should be the string value for the header (that is, the header value fully - decoded to unicode). The parse method should assume that *string* may + values for at least the keys ``decoded``, ``defects`` and ``parse_tree``. + ``decoded`` should be the string value for the header (that is, the header + value fully decoded to unicode). ``parse_tree`` is set to the parse tree obtained + from parsing the header. The parse method should assume that *string* may contain content-transfer-encoded parts, but should correctly handle all valid unicode characters as well so that it can parse un-encoded header values. diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index be7f59b0fce..04b41ad6ead 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -222,7 +222,7 @@ Data types names of the members in *cls*:: >>> dir(Color) - ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__'] + ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__', '_generate_next_value_', '_missing_'] .. method:: EnumType.__getitem__(cls, name) @@ -355,7 +355,7 @@ Data types ... print(f'today is {cls(dt.date.today().isoweekday()).name}') ... >>> dir(Weekday.SATURDAY) - ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value'] + ['__class__', '__doc__', '__eq__', '__hash__', '__module__', '_add_alias_', '_add_value_alias_', '_generate_next_value_', '_missing_', 'name', 'today', 'value'] .. method:: Enum._generate_next_value_(name, start, count, last_values) diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 7fc6055aa9a..3775d5ac81a 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -984,6 +984,9 @@ their subgroups based on the types of the contained exceptions. raises a :exc:`TypeError` if any contained exception is not an :exc:`Exception` subclass. + Exception groups are :ref:`generic ` over the type of their + contained exceptions. + .. impl-detail:: The ``excs`` parameter may be any sequence, but lists and tuples are diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 1fed142d81b..def2a211d1b 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -19,24 +19,25 @@ are always available. They are listed here in alphabetical order. | | :func:`ascii` | | :func:`filter` | | :func:`map` | | **S** | | | | | :func:`float` | | :func:`max` | | |func-set|_ | | | **B** | | :func:`format` | | |func-memoryview|_ | | :func:`setattr` | -| | :func:`bin` | | |func-frozenset|_ | | :func:`min` | | :func:`sentinel` | -| | :func:`bool` | | | | | | :func:`slice` | -| | :func:`breakpoint` | | **G** | | **N** | | :func:`sorted` | -| | |func-bytearray|_ | | :func:`getattr` | | :func:`next` | | :func:`staticmethod` | -| | |func-bytes|_ | | :func:`globals` | | | | |func-str|_ | -| | | | | | **O** | | :func:`sum` | -| | **C** | | **H** | | :func:`object` | | :func:`super` | -| | :func:`callable` | | :func:`hasattr` | | :func:`oct` | | **T** | -| | :func:`chr` | | :func:`hash` | | :func:`open` | | |func-tuple|_ | -| | :func:`classmethod` | | :func:`help` | | :func:`ord` | | :func:`type` | -| | :func:`compile` | | :func:`hex` | | | | | -| | :func:`complex` | | | | **P** | | **V** | -| | | | **I** | | :func:`pow` | | :func:`vars` | -| | **D** | | :func:`id` | | :func:`print` | | | -| | :func:`delattr` | | :func:`input` | | :func:`property` | | **Z** | -| | |func-dict|_ | | :func:`int` | | | | :func:`zip` | -| | :func:`dir` | | :func:`isinstance` | | | | | -| | :func:`divmod` | | :func:`issubclass` | | | | **_** | +| | :func:`bin` | | |func-frozendict|_ | | :func:`min` | | :func:`sentinel` | +| | :func:`bool` | | |func-frozenset|_ | | | | :func:`slice` | +| | :func:`breakpoint` | | | | **N** | | :func:`sorted` | +| | |func-bytearray|_ | | **G** | | :func:`next` | | :func:`staticmethod` | +| | |func-bytes|_ | | :func:`getattr` | | | | |func-str|_ | +| | | | :func:`globals` | | **O** | | :func:`sum` | +| | **C** | | | | :func:`object` | | :func:`super` | +| | :func:`callable` | | **H** | | :func:`oct` | | | +| | :func:`chr` | | :func:`hasattr` | | :func:`open` | | **T** | +| | :func:`classmethod` | | :func:`hash` | | :func:`ord` | | |func-tuple|_ | +| | :func:`compile` | | :func:`help` | | | | :func:`type` | +| | :func:`complex` | | :func:`hex` | | **P** | | | +| | | | | | :func:`pow` | | **V** | +| | **D** | | **I** | | :func:`print` | | :func:`vars` | +| | :func:`delattr` | | :func:`id` | | :func:`property` | | | +| | |func-dict|_ | | :func:`input` | | | | **Z** | +| | :func:`dir` | | :func:`int` | | | | :func:`zip` | +| | :func:`divmod` | | :func:`isinstance` | | | | | +| | | | :func:`issubclass` | | | | **_** | | | | | :func:`iter` | | | | :func:`__import__` | +-------------------------+-----------------------+-----------------------+-------------------------+ @@ -44,6 +45,7 @@ are always available. They are listed here in alphabetical order. used, with replacement texts to make the output in the table consistent .. |func-dict| replace:: ``dict()`` +.. |func-frozendict| replace:: ``frozendict()`` .. |func-frozenset| replace:: ``frozenset()`` .. |func-memoryview| replace:: ``memoryview()`` .. |func-set| replace:: ``set()`` @@ -485,8 +487,8 @@ are always available. They are listed here in alphabetical order. Create a new dictionary. The :class:`dict` object is the dictionary class. See :class:`dict` and :ref:`typesmapping` for documentation about this class. - For other containers see the built-in :class:`list`, :class:`set`, and - :class:`tuple` classes, as well as the :mod:`collections` module. + For other containers see the built-in :class:`frozendict`, :class:`list`, + :class:`set`, and :class:`tuple` classes, as well as the :mod:`collections` module. .. function:: dir() @@ -864,6 +866,21 @@ are always available. They are listed here in alphabetical order. if *format_spec* is not an empty string. +.. _func-frozendict: +.. class:: frozendict(**kwargs) + frozendict(mapping, /, **kwargs) + frozendict(iterable, /, **kwargs) + :noindex: + + Create a new frozen dictionary. The :class:`frozendict` object is a built-in class. + See :class:`frozendict` and :ref:`typesmapping` for documentation about this class. + + For other containers see the built-in :class:`dict`, :class:`list`, :class:`set`, + and :class:`tuple` classes, as well as the :mod:`collections` module. + + .. versionadded:: 3.15 + + .. _func-frozenset: .. class:: frozenset(iterable=(), /) :noindex: @@ -1827,15 +1844,21 @@ are always available. They are listed here in alphabetical order. :func:`setattr`. -.. class:: sentinel(name, /) +.. class:: sentinel(name, /, *, repr=None) Return a new unique sentinel object. *name* must be a :class:`str`, and is - used as the returned object's representation:: + used by default as the returned object's representation:: >>> MISSING = sentinel("MISSING") >>> MISSING MISSING + The optional *repr* argument can be used to specify a different representation:: + + >>> MISSING = sentinel("MISSING", repr="") + >>> MISSING + + Sentinel objects are truthy and compare equal only to themselves. They are intended to be compared with the :keyword:`is` operator. @@ -1879,7 +1902,7 @@ are always available. They are listed here in alphabetical order. .. attribute:: __module__ - The name of the module where the sentinel was created. + The name of the module where the sentinel was created. This attribute is writable. .. versionadded:: 3.15 diff --git a/Doc/library/gettext.rst b/Doc/library/gettext.rst index 2de16fe4036..2ab7ba7df19 100644 --- a/Doc/library/gettext.rst +++ b/Doc/library/gettext.rst @@ -51,19 +51,19 @@ class-based API instead. .. index:: single: _ (underscore); gettext -.. function:: gettext(message) +.. function:: gettext(message, /) Return the localized translation of *message*, based on the current global domain, language, and locale directory. This function is usually aliased as :func:`!_` in the local namespace (see examples below). -.. function:: dgettext(domain, message) +.. function:: dgettext(domain, message, /) Like :func:`.gettext`, but look the message up in the specified *domain*. -.. function:: ngettext(singular, plural, n) +.. function:: ngettext(singular, plural, n, /) Like :func:`.gettext`, but consider plural forms. If a translation is found, apply the plural formula to *n*, and return the resulting message (some @@ -78,15 +78,15 @@ class-based API instead. formulas for a variety of languages. -.. function:: dngettext(domain, singular, plural, n) +.. function:: dngettext(domain, singular, plural, n, /) Like :func:`ngettext`, but look the message up in the specified *domain*. -.. function:: pgettext(context, message) -.. function:: dpgettext(domain, context, message) -.. function:: npgettext(context, singular, plural, n) -.. function:: dnpgettext(domain, context, singular, plural, n) +.. function:: pgettext(context, message, /) +.. function:: dpgettext(domain, context, message, /) +.. function:: npgettext(context, singular, plural, n, /) +.. function:: dnpgettext(domain, context, singular, plural, n, /) Similar to the corresponding functions without the ``p`` in the prefix (that is, :func:`gettext`, :func:`dgettext`, :func:`ngettext`, :func:`dngettext`), @@ -223,20 +223,20 @@ are the methods of :class:`!NullTranslations`: translation for a given message. - .. method:: gettext(message) + .. method:: gettext(message, /) If a fallback has been set, forward :meth:`!gettext` to the fallback. Otherwise, return *message*. Overridden in derived classes. - .. method:: ngettext(singular, plural, n) + .. method:: ngettext(singular, plural, n, /) If a fallback has been set, forward :meth:`!ngettext` to the fallback. Otherwise, return *singular* if *n* is 1; return *plural* otherwise. Overridden in derived classes. - .. method:: pgettext(context, message) + .. method:: pgettext(context, message, /) If a fallback has been set, forward :meth:`pgettext` to the fallback. Otherwise, return the translated message. Overridden in derived classes. @@ -244,7 +244,7 @@ are the methods of :class:`!NullTranslations`: .. versionadded:: 3.8 - .. method:: npgettext(context, singular, plural, n) + .. method:: npgettext(context, singular, plural, n, /) If a fallback has been set, forward :meth:`npgettext` to the fallback. Otherwise, return the translated message. Overridden in derived classes. @@ -322,7 +322,7 @@ unexpected, or if other problems occur while reading the file, instantiating a The following methods are overridden from the base class implementation: - .. method:: gettext(message) + .. method:: gettext(message, /) Look up the *message* id in the catalog and return the corresponding message string, as a Unicode string. If there is no entry in the catalog for the @@ -331,7 +331,7 @@ unexpected, or if other problems occur while reading the file, instantiating a *message* id is returned. - .. method:: ngettext(singular, plural, n) + .. method:: ngettext(singular, plural, n, /) Do a plural-forms lookup of a message id. *singular* is used as the message id for purposes of lookup in the catalog, while *n* is used to determine which @@ -352,7 +352,7 @@ unexpected, or if other problems occur while reading the file, instantiating a n) % {'num': n} - .. method:: pgettext(context, message) + .. method:: pgettext(context, message, /) Look up the *context* and *message* id in the catalog and return the corresponding message string, as a Unicode string. If there is no @@ -363,7 +363,7 @@ unexpected, or if other problems occur while reading the file, instantiating a .. versionadded:: 3.8 - .. method:: npgettext(context, singular, plural, n) + .. method:: npgettext(context, singular, plural, n, /) Do a plural-forms lookup of a message id. *singular* is used as the message id for purposes of lookup in the catalog, while *n* is used to diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst index ed9fdaf1d72..9211e5f18c6 100644 --- a/Doc/library/gzip.rst +++ b/Doc/library/gzip.rst @@ -28,7 +28,7 @@ Note that additional file formats which can be decompressed by the The module defines the following items: -.. function:: open(filename, mode='rb', compresslevel=6, encoding=None, errors=None, newline=None) +.. function:: open(filename, mode='rb', compresslevel=6, encoding=None, errors=None, newline=None, *, mtime=None) Open a gzip-compressed file in binary or text mode, returning a :term:`file object`. @@ -43,9 +43,12 @@ The module defines the following items: The *compresslevel* argument is an integer from 0 to 9, as for the :class:`GzipFile` constructor. + The keyword-only argument *mtime* represents a Unix timestamp. + For binary mode, this function is equivalent to the :class:`GzipFile` - constructor: ``GzipFile(filename, mode, compresslevel)``. In this case, the - *encoding*, *errors* and *newline* arguments must not be provided. + constructor: ``GzipFile(filename, mode, compresslevel, mtime=mtime)``. + In this case, the *encoding*, *errors* and *newline* arguments must not + be provided. For text mode, a :class:`GzipFile` object is created, and wrapped in an :class:`io.TextIOWrapper` instance with the specified encoding, error @@ -66,6 +69,10 @@ The module defines the following items: It is the default level used by most compression tools and a better tradeoff between speed and performance. + .. versionchanged:: next + Added keyword-only argument *mtime* which is passed to the class + constructor of :class:`~gzip.GzipFile`. + .. exception:: BadGzipFile An exception raised for invalid gzip files. It inherits from :exc:`OSError`. @@ -108,9 +115,13 @@ The module defines the following items: is no compression. The default is ``9``. The optional *mtime* argument is the timestamp requested by gzip. The time - is in Unix format, i.e., seconds since 00:00:00 UTC, January 1, 1970. - If *mtime* is omitted or ``None``, the current time is used. Use *mtime* = 0 - to generate a compressed stream that does not depend on creation time. + is in Unix format, i.e., seconds since 00:00:00 UTC, January 1, 1970. Set + *mtime* to ``0`` to generate a compressed stream that does not depend on + creation time. If *mtime* is omitted or ``None``, the current time is used; + however, if the current time is outside the range 00:00:00 UTC, January 1, + 1970 through 06:28:15 UTC, February 7, 2106, or explicitly passed *mtime* + argument is outside the range ``0`` to ``2**32-1``, then the value ``0`` + is used instead. See below for the :attr:`mtime` attribute that is set when decompressing. diff --git a/Doc/library/imaplib.rst b/Doc/library/imaplib.rst index b002f497812..df2468f7124 100644 --- a/Doc/library/imaplib.rst +++ b/Doc/library/imaplib.rst @@ -199,6 +199,11 @@ An :class:`IMAP4` instance has the following methods: Append *message* to named mailbox. + *flags* may be ``None`` or a string of IMAP flag tokens. Multiple + flags are separated by spaces, for example ``r'\Seen \Answered'``. + If *flags* is not already enclosed in parentheses, parentheses are + added automatically. + .. method:: IMAP4.authenticate(mechanism, authobject) diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 63de4f91f4b..e11db37b9fa 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -105,6 +105,13 @@ You can also get a :ref:`distribution's version number `, list its current Python environment. +.. exception:: MetadataNotFound + + Subclass of :class:`FileNotFoundError` raised when attempting to load metadata + from a distribution folder that is empty or otherwise does not contain a + metadata file. + + Functional API ============== @@ -224,6 +231,9 @@ Distribution metadata Raises :exc:`PackageNotFoundError` if the named distribution package is not installed in the current Python environment. + Raises :exc:`MetadataNotFound` if a distribution package is + present but no METADATA file is present. + .. class:: PackageMetadata A concrete implementation of the @@ -252,6 +262,12 @@ all the metadata in a JSON-compatible form per :PEP:`566`:: The full set of available metadata is not described here. See the PyPA `Core metadata specification `_ for additional details. +.. versionchanged:: 3.15 + Previously and incidentally, if a METADATA file was missing from a distribution, an + empty ``PackageMetadata`` would be returned, indistinguishable from + an empty METADATA file. Now, a missing METADATA file triggers a + ``MetadataNotFound`` exception. + .. versionchanged:: 3.10 The ``Description`` is now included in the metadata when presented through the payload. Line continuation characters have been removed. @@ -465,6 +481,9 @@ The same applies for :func:`entry_points` and :func:`files`. .. attribute:: metadata :type: PackageMetadata + Raises :exc:`MetadataNotFound` if the METADATA file is not present in + the distribution. + There are all kinds of additional metadata available on :class:`!Distribution` instances as a :class:`PackageMetadata` instance:: diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index 48ae9147587..a0f7379b12a 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -424,12 +424,39 @@ attributes (see :ref:`import-mod-attrs` for module attributes): Return ``True`` if the object is a bound method written in Python. + .. note:: -.. function:: ispackage(object) + For example, given this class:: - Return ``True`` if the object is a :term:`package`. + >>> class Greeter: + ... def say_hello(self): + ... print('hello!') - .. versionadded:: 3.14 + A bound method (also known as an *instance method*) is created when + accessing ``say_hello`` (a :term:`function` defined in the + ``Greeter`` namespace) through an instance of the ``Greeter`` class:: + + >>> instance = Greeter() + + >>> instance.say_hello + > + >>> ismethod(instance.say_hello) + True + >>> isfunction(instance.say_hello) + False + + Accessing ``say_hello`` through the ``Greeter`` class will return the + function itself. For this function, :func:`ismethod` will return + ``False``, but :func:`isfunction` will return ``True``:: + + >>> Greeter.say_hello + + >>> ismethod(Greeter.say_hello) + False + >>> isfunction(Greeter.say_hello) + True + + See :ref:`typesmethods` for details. .. function:: isfunction(object) @@ -437,11 +464,23 @@ attributes (see :ref:`import-mod-attrs` for module attributes): Return ``True`` if the object is a Python function, which includes functions created by a :term:`lambda` expression. + See the note for :func:`~inspect.ismethod` for an example. + + +.. function:: ispackage(object) + + Return ``True`` if the object is a :term:`package`. + + .. versionadded:: 3.14 + .. function:: isgeneratorfunction(object) Return ``True`` if the object is a Python generator function. + It also returns ``True`` for bound methods created from Python generator functions + (see :ref:`typesmethods` for more information). + .. versionchanged:: 3.8 Functions wrapped in :func:`functools.partial` now return ``True`` if the wrapped function is a Python generator function. @@ -1575,10 +1614,11 @@ properties, will be invoked and :meth:`~object.__getattr__` and may be called. For cases where you want passive introspection, like documentation tools, this -can be inconvenient. :func:`getattr_static` has the same signature as :func:`getattr` +can be inconvenient. :func:`getattr_static` has a similar signature as :func:`getattr` but avoids executing code when it fetches attributes. -.. function:: getattr_static(obj, attr, default=None) +.. function:: getattr_static(obj, attr) + getattr_static(obj, attr, default) Retrieve attributes without triggering dynamic lookup via the descriptor protocol, :meth:`~object.__getattr__` diff --git a/Doc/library/io.rst b/Doc/library/io.rst index 494e57fe1c0..8c0eed592dd 100644 --- a/Doc/library/io.rst +++ b/Doc/library/io.rst @@ -824,9 +824,9 @@ than raw I/O does. .. class:: BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE) - A buffered binary stream providing higher-level access to a seekable - :class:`RawIOBase` raw binary stream. It inherits from :class:`BufferedReader` - and :class:`BufferedWriter`. + A buffered binary stream implementing :class:`BufferedIOBase` interfaces + providing higher-level access to a seekable :class:`RawIOBase` raw binary + stream. The constructor creates a reader and writer for a seekable raw stream, given in the first argument. If the *buffer_size* is omitted it defaults to diff --git a/Doc/library/lzma.rst b/Doc/library/lzma.rst index 6cede00b218..cd72174d54f 100644 --- a/Doc/library/lzma.rst +++ b/Doc/library/lzma.rst @@ -356,12 +356,26 @@ options. Valid filter IDs are as follows: * Branch-Call-Jump (BCJ) filters: - * :const:`FILTER_X86` - * :const:`FILTER_IA64` - * :const:`FILTER_ARM` - * :const:`FILTER_ARMTHUMB` - * :const:`FILTER_POWERPC` - * :const:`FILTER_SPARC` + * :const:`!FILTER_X86` + * :const:`!FILTER_IA64` + * :const:`!FILTER_ARM` + * :const:`!FILTER_ARMTHUMB` + * :const:`!FILTER_POWERPC` + * :const:`!FILTER_SPARC` + + The above work on all lzma runtime library versions. + + * :const:`!FILTER_ARM64` + + Only works if the lzma version is 5.4.0 or later. + + .. versionadded:: next + + * :const:`!FILTER_RISCV` + + Only works if the lzma version is 5.6.0 or later. + + .. versionadded:: next A filter chain can consist of up to 4 filters, and cannot be empty. The last filter in the chain must be a compression filter, and any other filters must be diff --git a/Doc/library/math.rst b/Doc/library/math.rst index 9cc8c5d6886..41a9a0ab55d 100644 --- a/Doc/library/math.rst +++ b/Doc/library/math.rst @@ -255,10 +255,12 @@ Floating point manipulation functions .. function:: frexp(x) - Return the mantissa and exponent of *x* as the pair ``(m, e)``. *m* is a float - and *e* is an integer such that ``x == m * 2**e`` exactly. If *x* is zero, - returns ``(0.0, 0)``, otherwise ``0.5 <= abs(m) < 1``. This is used to "pick - apart" the internal representation of a float in a portable way. + Return the mantissa and exponent of *x* as the pair ``(m, e)``. + If *x* is a finite nonzero number, then *m* is a float with + ``0.5 <= abs(m) < 1.0`` and an integer *e* is such that + ``x == m * 2**e`` exactly. Else, return ``(x, 0)``. + This is used to "pick apart" the internal representation of + a float in a portable way. Note that :func:`frexp` has a different call/return pattern than its C equivalents: it takes a single argument and return a pair of diff --git a/Doc/library/mimetypes.rst b/Doc/library/mimetypes.rst index 5103eacde1d..f33098faf7d 100644 --- a/Doc/library/mimetypes.rst +++ b/Doc/library/mimetypes.rst @@ -358,7 +358,7 @@ it converts file extensions to MIME types. For each ``type`` entry, the script writes a line into the standard output stream. If an unknown type occurs, it writes an error message into the -standard error stream and exits with the return code ``1``. +standard output stream and exits with the return code ``1``. .. mimetypes-cli-example: @@ -385,7 +385,7 @@ interface: $ # get a MIME type for a rare file extension $ python -m mimetypes filename.pict - error: unknown extension of filename.pict + error: media type unknown for filename.pict $ # now look in the extended database built into Python $ python -m mimetypes --lenient filename.pict @@ -407,7 +407,8 @@ interface: $ python -m mimetypes filename.sh filename.nc filename.xxx filename.txt type: application/x-sh encoding: None type: application/x-netcdf encoding: None - error: unknown extension of filename.xxx + error: media type unknown for filename.xxx + type: text/plain encoding: None $ # try to feed an unknown MIME type $ python -m mimetypes --extension audio/aac audio/opus audio/future audio/x-wav diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index 187143d02cd..2d130539158 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -100,10 +100,10 @@ To show the individual process IDs involved, here is an expanded example:: For an explanation of why the ``if __name__ == '__main__'`` part is necessary, see :ref:`multiprocessing-programming`. -The arguments to :class:`Process` usually need to be unpickleable from within -the child process. If you tried typing the above example directly into a REPL it -could lead to an :exc:`AttributeError` in the child process trying to locate the -*f* function in the ``__main__`` module. +The arguments to :class:`Process` usually need to be picklable so they can be +passed to the child process. If you tried typing the above example directly +into a REPL it could lead to an :exc:`AttributeError` in the child process +trying to locate the *f* function in the ``__main__`` module. .. _multiprocessing-start-methods: @@ -1723,7 +1723,10 @@ inherited by child processes. Note that *lock* is a keyword only argument. Note that an array of :data:`ctypes.c_char` has *value* and *raw* - attributes which allow one to use it to store and retrieve strings. + attributes which can both be used to store and retrieve byte strings. + While *raw* allows interaction with a :class:`bytes` object the full size of + the array, reading *value* will terminate after a null byte, like most + programming languages handle strings. The :mod:`!multiprocessing.sharedctypes` module diff --git a/Doc/library/os.rst b/Doc/library/os.rst index d2534b3e974..9327d616ffa 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -219,6 +219,14 @@ process and user. :data:`os.environ`, and when one of the :meth:`~dict.pop` or :meth:`~dict.clear` methods is called. + If the :manpage:`clearenv(3)` function is available, the :meth:`~dict.clear` method + uses it and emits a single ``os._clearenv`` audit event. Otherwise, it emits + an ``os.unsetenv`` event on each deleted variable. + + .. audit-event:: os.unsetenv key os.unsetenv + + .. audit-event:: os._clearenv "" os._clearenv + .. seealso:: The :func:`os.reload_environ` function. @@ -226,6 +234,10 @@ process and user. .. versionchanged:: 3.9 Updated to support :pep:`584`'s merge (``|``) and update (``|=``) operators. + .. versionchanged:: 3.15 + The :meth:`~dict.clear` method can now emit an ``os._clearenv`` audit + event. + .. data:: environb @@ -2549,7 +2561,8 @@ features: Windows now handles a *mode* of ``0o700``. -.. function:: makedirs(name, mode=0o777, exist_ok=False) +.. function:: makedirs(name, mode=0o777, exist_ok=False, *, \ + parent_mode=None) .. index:: single: directory; creating @@ -2567,6 +2580,12 @@ features: If *exist_ok* is ``False`` (the default), a :exc:`FileExistsError` is raised if the target directory already exists. + If *parent_mode* is not ``None``, it is used as the mode for any + newly-created, intermediate-level directories. Like *mode*, it is + combined with the process's umask value; see :ref:`the mkdir() + description `. Otherwise, intermediate directories are + created with the default mode, which is also subject to the umask. + .. note:: :func:`makedirs` will become confused if the path elements to create @@ -2593,6 +2612,11 @@ features: The *mode* argument no longer affects the file permission bits of newly created intermediate-level directories. + .. versionadded:: 3.15 + The *parent_mode* parameter. To match the behavior from Python 3.6 and + earlier (where *mode* was applied to all created directories), pass + ``parent_mode=mode``. + .. function:: mkfifo(path, mode=0o666, *, dir_fd=None) @@ -2970,6 +2994,9 @@ features: To be directly usable as a :term:`path-like object`, ``os.DirEntry`` implements the :class:`PathLike` interface. + :class:`!DirEntry` objects are :ref:`generic ` over the type of the + path (:class:`str` or :class:`bytes`). + Attributes and methods on a ``os.DirEntry`` instance are as follows: .. attribute:: name @@ -5062,6 +5089,18 @@ written in Python, such as a mail server's external command delivery program. .. availability:: Linux >= 5.10 .. versionadded:: 3.12 +.. function:: pidfd_getfd(pidfd, targetfd, *, flags=0) + + Duplicate *targetfd* from the process referred to by the process file + descriptor *pidfd*, into the calling process. The returned file descriptor + is :ref:`non-inheritable `. + + *flags* is reserved, and currently must be ``0``. + + See the :manpage:`pidfd_getfd(2)` man page for more details. + + .. availability:: Linux >= 5.6, Android >= :func:`build-time ` API level 31 + .. versionadded:: next .. function:: plock(op, /) diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index 923cd4a2c4c..ab92c142c37 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -1518,7 +1518,8 @@ Creating files and directories :meth:`~Path.write_bytes` methods are often used to create files. -.. method:: Path.mkdir(mode=0o777, parents=False, exist_ok=False) +.. method:: Path.mkdir(mode=0o777, parents=False, exist_ok=False, *, \ + parent_mode=None) Create a new directory at this given path. If *mode* is given, it is combined with the process's ``umask`` value to determine the file mode @@ -1529,6 +1530,12 @@ Creating files and directories as needed; they are created with the default permissions without taking *mode* into account (mimicking the POSIX ``mkdir -p`` command). + If *parent_mode* is not ``None``, it is used as the mode for any + newly-created, intermediate-level directories when *parents* is true. + Like *mode*, it is combined with the process's ``umask`` value. + Otherwise, intermediate directories are created with the default + permissions (also subject to the umask). + If *parents* is false (the default), a missing parent raises :exc:`FileNotFoundError`. @@ -1542,6 +1549,9 @@ Creating files and directories .. versionchanged:: 3.5 The *exist_ok* parameter was added. + .. versionadded:: 3.15 + The *parent_mode* parameter. + .. method:: Path.symlink_to(target, target_is_directory=False) diff --git a/Doc/library/pprint.rst b/Doc/library/pprint.rst index d62ef1f4d1e..4f043fbb3a4 100644 --- a/Doc/library/pprint.rst +++ b/Doc/library/pprint.rst @@ -17,7 +17,7 @@ objects which are not representable as Python literals. The formatted representation keeps objects on a single line if it can, and breaks them onto multiple lines if they don't fit within the allowed width, -adjustable by the *width* parameter defaulting to 88 characters. +adjustable by the *width* parameter defaulting to 80 characters. .. versionchanged:: 3.9 Added support for pretty-printing :class:`types.SimpleNamespace`. @@ -30,8 +30,9 @@ adjustable by the *width* parameter defaulting to 88 characters. Functions --------- -.. function:: pp(object, stream=None, indent=4, width=88, depth=None, *, \ - compact=False, sort_dicts=False, underscore_numbers=False) +.. function:: pp(object, stream=None, indent=1, width=80, depth=None, *, \ + compact=False, expand=False, sort_dicts=False, \ + underscore_numbers=False) Prints the formatted representation of *object*, followed by a newline. This function may be used in the interactive interpreter @@ -66,11 +67,16 @@ Functions :param bool compact: Control the way long :term:`sequences ` are formatted. If ``False`` (the default), + each item of a sequence will be formatted on a separate line, + otherwise as many items as will fit within the *width* + will be formatted on each output line. + Incompatible with *expand*. + + :param bool expand: + If ``True``, opening parentheses and brackets will be followed by a newline and the following content will be indented by one level, similar to - pretty-printed JSON. - If ``True``, as many items as will fit within the *width* - will be formatted on each output line. + pretty-printed JSON. Incompatible with *compact*. :param bool sort_dicts: If ``True``, dictionaries will be formatted with @@ -85,25 +91,32 @@ Functions >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) - >>> pprint.pp(stuff, width=100) - [, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] + >>> pprint.pp(stuff) + [, + 'spam', + 'eggs', + 'lumberjack', + 'knights', + 'ni'] .. versionadded:: 3.8 -.. function:: pprint(object, stream=None, indent=4, width=88, depth=None, *, \ - compact=False, sort_dicts=True, underscore_numbers=False) +.. function:: pprint(object, stream=None, indent=1, width=80, depth=None, *, \ + compact=False, expand=False, sort_dicts=True, \ + underscore_numbers=False) Alias for :func:`~pprint.pp` with *sort_dicts* set to ``True`` by default, which would automatically sort the dictionaries' keys, you might want to use :func:`~pprint.pp` instead where it is ``False`` by default. -.. function:: pformat(object, indent=4, width=88, depth=None, *, \ - compact=False, sort_dicts=True, underscore_numbers=False) +.. function:: pformat(object, indent=1, width=80, depth=None, *, \ + compact=False, expand=False, sort_dicts=True, \ + underscore_numbers=False) Return the formatted representation of *object* as a string. *indent*, - *width*, *depth*, *compact*, *sort_dicts* and *underscore_numbers* are + *width*, *depth*, *compact*, *expand*, *sort_dicts* and *underscore_numbers* are passed to the :class:`PrettyPrinter` constructor as formatting parameters and their meanings are as described in the documentation above. @@ -141,13 +154,13 @@ Functions .. _prettyprinter-objects: -PrettyPrinter objects +PrettyPrinter Objects --------------------- .. index:: single: ...; placeholder -.. class:: PrettyPrinter(indent=4, width=88, depth=None, stream=None, *, \ - compact=False, sort_dicts=True, \ +.. class:: PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, \ + compact=False, expand=False, sort_dicts=True, \ underscore_numbers=False) Construct a :class:`PrettyPrinter` instance. @@ -158,23 +171,21 @@ PrettyPrinter objects >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff[:]) - >>> pp = pprint.PrettyPrinter() + >>> pp = pprint.PrettyPrinter(indent=4) >>> pp.pprint(stuff) - [ - ['spam', 'eggs', 'lumberjack', 'knights', 'ni'], + [ ['spam', 'eggs', 'lumberjack', 'knights', 'ni'], 'spam', 'eggs', 'lumberjack', 'knights', - 'ni', - ] - >>> pp = pprint.PrettyPrinter(indent=1, width=41, compact=True) + 'ni'] + >>> pp = pprint.PrettyPrinter(width=41, compact=True) >>> pp.pprint(stuff) [['spam', 'eggs', 'lumberjack', 'knights', 'ni'], 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] - >>> pp = pprint.PrettyPrinter(width=41, indent=3) + >>> pp = pprint.PrettyPrinter(width=41, expand=True, indent=3) >>> pp.pprint(stuff) [ [ @@ -210,11 +221,7 @@ PrettyPrinter objects No longer attempts to write to :data:`!sys.stdout` if it is ``None``. .. versionchanged:: 3.15 - Changed default *indent* from 1 to 4 - and default *width* from 80 to 88. - The default ``compact=False`` layout is now similar to - pretty-printed JSON, with opening parentheses and brackets - followed by a newline and the contents indented by one level. + Added the *expand* parameter. :class:`PrettyPrinter` instances have the following methods: @@ -291,144 +298,219 @@ let's fetch information about a project from `PyPI `_:: In its basic form, :func:`~pprint.pp` shows the whole object:: >>> pprint.pp(project_info) - { - 'author': 'The Python Packaging Authority', - 'author_email': 'pypa-dev@googlegroups.com', - 'bugtrack_url': None, - 'classifiers': [ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.2', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Topic :: Software Development :: Build Tools', - ], - 'description': 'A sample Python project\n' - '=======================\n' - '\n' - 'This is the description file for the project.\n' - '\n' - 'The file should use UTF-8 encoding and be written using ReStructured Text. It\n' - 'will be used to generate the project webpage on PyPI, and should be written for\n' - 'that purpose.\n' - '\n' - 'Typical contents for this file would include an overview of the project, basic\n' - 'usage examples, etc. Generally, including the project changelog in here is not\n' - 'a good idea, although a simple "What\'s New" section for the most recent version\n' - 'may be appropriate.', - 'description_content_type': None, - 'docs_url': None, - 'download_url': 'UNKNOWN', - 'downloads': {'last_day': -1, 'last_month': -1, 'last_week': -1}, - 'home_page': 'https://github.com/pypa/sampleproject', - 'keywords': 'sample setuptools development', - 'license': 'MIT', - 'maintainer': None, - 'maintainer_email': None, - 'name': 'sampleproject', - 'package_url': 'https://pypi.org/project/sampleproject/', - 'platform': 'UNKNOWN', - 'project_url': 'https://pypi.org/project/sampleproject/', - 'project_urls': {'Download': 'UNKNOWN', 'Homepage': 'https://github.com/pypa/sampleproject'}, - 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', - 'requires_dist': None, - 'requires_python': None, - 'summary': 'A sample Python project', - 'version': '1.2.0', - } + {'author': 'The Python Packaging Authority', + 'author_email': 'pypa-dev@googlegroups.com', + 'bugtrack_url': None, + 'classifiers': ['Development Status :: 3 - Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.2', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Topic :: Software Development :: Build Tools'], + 'description': 'A sample Python project\n' + '=======================\n' + '\n' + 'This is the description file for the project.\n' + '\n' + 'The file should use UTF-8 encoding and be written using ' + 'ReStructured Text. It\n' + 'will be used to generate the project webpage on PyPI, and ' + 'should be written for\n' + 'that purpose.\n' + '\n' + 'Typical contents for this file would include an overview of ' + 'the project, basic\n' + 'usage examples, etc. Generally, including the project ' + 'changelog in here is not\n' + 'a good idea, although a simple "What\'s New" section for the ' + 'most recent version\n' + 'may be appropriate.', + 'description_content_type': None, + 'docs_url': None, + 'download_url': 'UNKNOWN', + 'downloads': {'last_day': -1, 'last_month': -1, 'last_week': -1}, + 'home_page': 'https://github.com/pypa/sampleproject', + 'keywords': 'sample setuptools development', + 'license': 'MIT', + 'maintainer': None, + 'maintainer_email': None, + 'name': 'sampleproject', + 'package_url': 'https://pypi.org/project/sampleproject/', + 'platform': 'UNKNOWN', + 'project_url': 'https://pypi.org/project/sampleproject/', + 'project_urls': {'Download': 'UNKNOWN', + 'Homepage': 'https://github.com/pypa/sampleproject'}, + 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', + 'requires_dist': None, + 'requires_python': None, + 'summary': 'A sample Python project', + 'version': '1.2.0'} The result can be limited to a certain *depth* (ellipsis is used for deeper contents):: >>> pprint.pp(project_info, depth=1) - { - 'author': 'The Python Packaging Authority', - 'author_email': 'pypa-dev@googlegroups.com', - 'bugtrack_url': None, - 'classifiers': [...], - 'description': 'A sample Python project\n' - '=======================\n' - '\n' - 'This is the description file for the project.\n' - '\n' - 'The file should use UTF-8 encoding and be written using ReStructured Text. It\n' - 'will be used to generate the project webpage on PyPI, and should be written for\n' - 'that purpose.\n' - '\n' - 'Typical contents for this file would include an overview of the project, basic\n' - 'usage examples, etc. Generally, including the project changelog in here is not\n' - 'a good idea, although a simple "What\'s New" section for the most recent version\n' - 'may be appropriate.', - 'description_content_type': None, - 'docs_url': None, - 'download_url': 'UNKNOWN', - 'downloads': {...}, - 'home_page': 'https://github.com/pypa/sampleproject', - 'keywords': 'sample setuptools development', - 'license': 'MIT', - 'maintainer': None, - 'maintainer_email': None, - 'name': 'sampleproject', - 'package_url': 'https://pypi.org/project/sampleproject/', - 'platform': 'UNKNOWN', - 'project_url': 'https://pypi.org/project/sampleproject/', - 'project_urls': {...}, - 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', - 'requires_dist': None, - 'requires_python': None, - 'summary': 'A sample Python project', - 'version': '1.2.0', - } + {'author': 'The Python Packaging Authority', + 'author_email': 'pypa-dev@googlegroups.com', + 'bugtrack_url': None, + 'classifiers': [...], + 'description': 'A sample Python project\n' + '=======================\n' + '\n' + 'This is the description file for the project.\n' + '\n' + 'The file should use UTF-8 encoding and be written using ' + 'ReStructured Text. It\n' + 'will be used to generate the project webpage on PyPI, and ' + 'should be written for\n' + 'that purpose.\n' + '\n' + 'Typical contents for this file would include an overview of ' + 'the project, basic\n' + 'usage examples, etc. Generally, including the project ' + 'changelog in here is not\n' + 'a good idea, although a simple "What\'s New" section for the ' + 'most recent version\n' + 'may be appropriate.', + 'description_content_type': None, + 'docs_url': None, + 'download_url': 'UNKNOWN', + 'downloads': {...}, + 'home_page': 'https://github.com/pypa/sampleproject', + 'keywords': 'sample setuptools development', + 'license': 'MIT', + 'maintainer': None, + 'maintainer_email': None, + 'name': 'sampleproject', + 'package_url': 'https://pypi.org/project/sampleproject/', + 'platform': 'UNKNOWN', + 'project_url': 'https://pypi.org/project/sampleproject/', + 'project_urls': {...}, + 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', + 'requires_dist': None, + 'requires_python': None, + 'summary': 'A sample Python project', + 'version': '1.2.0'} Additionally, maximum character *width* can be suggested. If a long object cannot be split, the specified width will be exceeded:: >>> pprint.pp(project_info, depth=1, width=60) + {'author': 'The Python Packaging Authority', + 'author_email': 'pypa-dev@googlegroups.com', + 'bugtrack_url': None, + 'classifiers': [...], + 'description': 'A sample Python project\n' + '=======================\n' + '\n' + 'This is the description file for the ' + 'project.\n' + '\n' + 'The file should use UTF-8 encoding and be ' + 'written using ReStructured Text. It\n' + 'will be used to generate the project ' + 'webpage on PyPI, and should be written ' + 'for\n' + 'that purpose.\n' + '\n' + 'Typical contents for this file would ' + 'include an overview of the project, ' + 'basic\n' + 'usage examples, etc. Generally, including ' + 'the project changelog in here is not\n' + 'a good idea, although a simple "What\'s ' + 'New" section for the most recent version\n' + 'may be appropriate.', + 'description_content_type': None, + 'docs_url': None, + 'download_url': 'UNKNOWN', + 'downloads': {...}, + 'home_page': 'https://github.com/pypa/sampleproject', + 'keywords': 'sample setuptools development', + 'license': 'MIT', + 'maintainer': None, + 'maintainer_email': None, + 'name': 'sampleproject', + 'package_url': 'https://pypi.org/project/sampleproject/', + 'platform': 'UNKNOWN', + 'project_url': 'https://pypi.org/project/sampleproject/', + 'project_urls': {...}, + 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', + 'requires_dist': None, + 'requires_python': None, + 'summary': 'A sample Python project', + 'version': '1.2.0'} + +Lastly, we can format like pretty-printed JSON with the *expand* parameter. +Best results are achieved with a higher *indent* value:: + + >>> pprint.pp(project_info, indent=4, expand=True) { - 'author': 'The Python Packaging Authority', - 'author_email': 'pypa-dev@googlegroups.com', - 'bugtrack_url': None, - 'classifiers': [...], - 'description': 'A sample Python project\n' - '=======================\n' - '\n' - 'This is the description file for the project.\n' - '\n' - 'The file should use UTF-8 encoding and be written ' - 'using ReStructured Text. It\n' - 'will be used to generate the project webpage on PyPI, ' - 'and should be written for\n' - 'that purpose.\n' - '\n' - 'Typical contents for this file would include an ' - 'overview of the project, basic\n' - 'usage examples, etc. Generally, including the project ' - 'changelog in here is not\n' - 'a good idea, although a simple "What\'s New" section ' - 'for the most recent version\n' - 'may be appropriate.', - 'description_content_type': None, - 'docs_url': None, - 'download_url': 'UNKNOWN', - 'downloads': {...}, - 'home_page': 'https://github.com/pypa/sampleproject', - 'keywords': 'sample setuptools development', - 'license': 'MIT', - 'maintainer': None, - 'maintainer_email': None, - 'name': 'sampleproject', - 'package_url': 'https://pypi.org/project/sampleproject/', - 'platform': 'UNKNOWN', - 'project_url': 'https://pypi.org/project/sampleproject/', - 'project_urls': {...}, - 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', - 'requires_dist': None, - 'requires_python': None, - 'summary': 'A sample Python project', - 'version': '1.2.0', + 'author': 'The Python Packaging Authority', + 'author_email': 'pypa-dev@googlegroups.com', + 'bugtrack_url': None, + 'classifiers': [ + 'Development Status :: 3 - Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.2', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Topic :: Software Development :: Build Tools', + ], + 'description': 'A sample Python project\n' + '=======================\n' + '\n' + 'This is the description file for the project.\n' + '\n' + 'The file should use UTF-8 encoding and be written using ReStructured ' + 'Text. It\n' + 'will be used to generate the project webpage on PyPI, and should be ' + 'written for\n' + 'that purpose.\n' + '\n' + 'Typical contents for this file would include an overview of the project, ' + 'basic\n' + 'usage examples, etc. Generally, including the project changelog in here ' + 'is not\n' + 'a good idea, although a simple "What\'s New" section for the most recent ' + 'version\n' + 'may be appropriate.', + 'description_content_type': None, + 'docs_url': None, + 'download_url': 'UNKNOWN', + 'downloads': {'last_day': -1, 'last_month': -1, 'last_week': -1}, + 'dynamic': None, + 'home_page': 'https://github.com/pypa/sampleproject', + 'keywords': 'sample setuptools development', + 'license': 'MIT', + 'license_expression': None, + 'license_files': None, + 'maintainer': None, + 'maintainer_email': None, + 'name': 'sampleproject', + 'package_url': 'https://pypi.org/project/sampleproject/', + 'platform': 'UNKNOWN', + 'project_url': 'https://pypi.org/project/sampleproject/', + 'project_urls': { + 'Download': 'UNKNOWN', + 'Homepage': 'https://github.com/pypa/sampleproject', + }, + 'provides_extra': None, + 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', + 'requires_dist': None, + 'requires_python': None, + 'summary': 'A sample Python project', + 'version': '1.2.0', + 'yanked': False, + 'yanked_reason': None, } diff --git a/Doc/library/profiling.sampling.rst b/Doc/library/profiling.sampling.rst index aeb1a429b58..39b6ea4e31c 100644 --- a/Doc/library/profiling.sampling.rst +++ b/Doc/library/profiling.sampling.rst @@ -387,6 +387,11 @@ This requires one of: On Windows, the profiler requires administrative privileges or the ``SeDebugPrivilege`` privilege to read another process's memory. +*Note*: On Windows, ``python -m profiling.sampling`` fails inside a virtual +environment because the venv's ``python.exe`` is just a launcher shim that +re-executes the base interpreter as a child process. The shim itself isn't +a Python process and has no ``PyRuntime`` section to attach to. Instead, +run it from the global Python installation. Version compatibility --------------------- diff --git a/Doc/library/pydoc.rst b/Doc/library/pydoc.rst index f236eba8457..a0cfb440a36 100644 --- a/Doc/library/pydoc.rst +++ b/Doc/library/pydoc.rst @@ -68,6 +68,11 @@ will start a HTTP server on port 1234, allowing you to browse the documentation at ``http://localhost:1234/`` in your preferred web browser. Specifying ``0`` as the port number will select an arbitrary unused port. +.. warning:: + + The :mod:`!pydoc` HTTP server is intended for local use during + development and is not suitable for production use. + :program:`python -m pydoc -n ` will start the server listening at the given hostname. By default the hostname is 'localhost' but if you want the server to be reached from other machines, you may want to change the host name that the diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst index 2e6938b5cf6..c88411ce0b7 100644 --- a/Doc/library/pyexpat.rst +++ b/Doc/library/pyexpat.rst @@ -63,12 +63,26 @@ The :mod:`!xml.parsers.expat` module contains two functions: .. function:: ParserCreate(encoding=None, namespace_separator=None) - Creates and returns a new :class:`xmlparser` object. *encoding*, if specified, - must be a string naming the encoding used by the XML data. Expat doesn't - support as many encodings as Python does, and its repertoire of encodings can't - be extended; it supports UTF-8, UTF-16, ISO-8859-1 (Latin1), and ASCII. If - *encoding* [1]_ is given it will override the implicit or explicit encoding of the - document. + Creates and returns a new :class:`xmlparser` object. + *encoding* [1]_, if specified, must be a string naming the encoding + used by the XML data. + If it is given it will override the implicit or explicit encoding + of the document. + + .. impl-detail:: + + Expat natively understands and processes UTF-8, UTF-16, UTF-16BE, + UTF-16LE, ISO-8859-1, and US-ASCII. + For other encodings (including aliases like Latin1 and ASCII) it + falls back to Python. + It supports most of 8-bit encodings and many multi-byte encodings + like Shift_JIS, although only BMP characters (``U+0000-U+FFFF``) + are supported with non-native encodings (this restriction is also + applied to aliases like UTF8). + These restrictions only apply if *encoding* is not given. + + .. versionchanged:: next + Added support for multi-byte encodings. .. _xmlparser-non-root: @@ -113,7 +127,6 @@ The :mod:`!xml.parsers.expat` module contains two functions: XML document. Call ``ParserCreate`` for each document to provide unique parser instances. - .. seealso:: `The Expat XML Parser `_ @@ -1083,9 +1096,11 @@ The ``errors`` module has the following attributes: .. rubric:: Footnotes -.. [1] The encoding string included in XML output should conform to the - appropriate standards. For example, "UTF-8" is valid, but "UTF8" is - not. See https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl +.. [1] The encoding string included in XML output should conform to + the appropriate standards. For example, "UTF-8" is valid, but + "UTF8" is not valid in an XML document's declaration, even though + Python accepts it as an encoding name. + See https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl and https://www.iana.org/assignments/character-sets/character-sets.xhtml. diff --git a/Doc/library/queue.rst b/Doc/library/queue.rst index 5ac72ef7604..f5326aff723 100644 --- a/Doc/library/queue.rst +++ b/Doc/library/queue.rst @@ -76,6 +76,8 @@ The :mod:`!queue` module defines the following classes and exceptions: Constructor for an unbounded :abbr:`FIFO (first-in, first-out)` queue. Simple queues lack advanced functionality such as task tracking. + Simple queues are :ref:`generic ` over the type of their items. + .. versionadded:: 3.7 diff --git a/Doc/library/re.rst b/Doc/library/re.rst index a46fd424581..4745c1b98a4 100644 --- a/Doc/library/re.rst +++ b/Doc/library/re.rst @@ -1257,6 +1257,9 @@ Regular expression objects Compiled regular expression object returned by :func:`re.compile`. + Patterns are :ref:`generic ` over the type of string they handle + (:class:`str` or :class:`bytes`). + .. versionchanged:: 3.9 :py:class:`re.Pattern` supports ``[]`` to indicate a Unicode (str) or bytes pattern. See :ref:`types-genericalias`. @@ -1419,6 +1422,9 @@ when there is no match, you can test whether there was a match with a simple Match object returned by successful ``match``\ es and ``search``\ es. + Matches are :ref:`generic ` over the type of string which was + matched (:class:`str` or :class:`bytes`). + .. versionchanged:: 3.9 :py:class:`re.Match` supports ``[]`` to indicate a Unicode (str) or bytes match. See :ref:`types-genericalias`. diff --git a/Doc/library/sched.rst b/Doc/library/sched.rst index 70541c5f3cb..037e27f031d 100644 --- a/Doc/library/sched.rst +++ b/Doc/library/sched.rst @@ -117,9 +117,11 @@ Scheduler Objects function passed to the constructor) for the next event, then execute it and so on until there are no more scheduled events. - If *blocking* is false executes the scheduled events due to expire soonest - (if any) and then return the deadline of the next scheduled call in the - scheduler (if any). + If *blocking* is false, immediately executes all events in the queue which have + a time value less than or equal to the current *timefunc* value (if any) and + returns the difference between the current *timefunc* value and the time value + of the next scheduled event in the scheduler's event queue. If the queue is + empty, returns ``None``. Either *action* or *delayfunc* can raise an exception. In either case, the scheduler will maintain a consistent state and propagate the exception. If an diff --git a/Doc/library/select.rst b/Doc/library/select.rst index 09563af14d0..64000058717 100644 --- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -37,7 +37,7 @@ The module defines the following: .. function:: devpoll() - (Only supported on Solaris and derivatives.) Returns a ``/dev/poll`` + Returns a ``/dev/poll`` polling object; see section :ref:`devpoll-objects` below for the methods supported by devpoll objects. @@ -54,9 +54,11 @@ The module defines the following: .. versionchanged:: 3.4 The new file descriptor is now non-inheritable. + .. availability:: Solaris. + .. function:: epoll(sizehint=-1, flags=0) - (Only supported on Linux 2.5.44 and newer.) Return an edge polling object, + Return an edge polling object, which can be used as Edge or Level Triggered interface for I/O events. @@ -94,18 +96,22 @@ The module defines the following: When CPython is built, this function may be disabled using :option:`--disable-epoll`. + .. availability:: Linux >= 2.5.44. + .. function:: poll() - (Not supported by all operating systems.) Returns a polling object, which + Returns a polling object, which supports registering and unregistering file descriptors, and then polling them for I/O events; see section :ref:`poll-objects` below for the methods supported by polling objects. + .. availability:: Unix. + .. function:: kqueue() - (Only supported on BSD.) Returns a kernel queue object; see section + Returns a kernel queue object; see section :ref:`kqueue-objects` below for the methods supported by kqueue objects. The new file descriptor is :ref:`non-inheritable `. @@ -113,12 +119,16 @@ The module defines the following: .. versionchanged:: 3.4 The new file descriptor is now non-inheritable. + .. availability:: BSD, macOS. + .. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0) - (Only supported on BSD.) Returns a kernel event object; see section + Returns a kernel event object; see section :ref:`kevent-objects` below for the methods supported by kevent objects. + .. availability:: BSD, macOS. + .. function:: select(rlist, wlist, xlist, timeout=None) @@ -190,7 +200,7 @@ The module defines the following: .. _devpoll-objects: -``/dev/poll`` Polling Objects +``/dev/poll`` polling objects ----------------------------- Solaris and derivatives have ``/dev/poll``. While :c:func:`!select` is @@ -285,52 +295,52 @@ object. .. _epoll-objects: -Edge and Level Trigger Polling (epoll) Objects +Edge and level trigger polling (epoll) objects ---------------------------------------------- https://linux.die.net/man/4/epoll - *eventmask* - - +-------------------------+-----------------------------------------------+ - | Constant | Meaning | - +=========================+===============================================+ - | :const:`EPOLLIN` | Available for read | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLOUT` | Available for write | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLPRI` | Urgent data for read | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLERR` | Error condition happened on the assoc. fd | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLHUP` | Hang up happened on the assoc. fd | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLET` | Set Edge Trigger behavior, the default is | - | | Level Trigger behavior | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLONESHOT` | Set one-shot behavior. After one event is | - | | pulled out, the fd is internally disabled | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLEXCLUSIVE` | Wake only one epoll object when the | - | | associated fd has an event. The default (if | - | | this flag is not set) is to wake all epoll | - | | objects polling on a fd. | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLRDHUP` | Stream socket peer closed connection or shut | - | | down writing half of connection. | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLRDNORM` | Equivalent to :const:`EPOLLIN` | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLRDBAND` | Priority data band can be read. | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLWRNORM` | Equivalent to :const:`EPOLLOUT` | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLWRBAND` | Priority data may be written. | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLMSG` | Ignored. | - +-------------------------+-----------------------------------------------+ - | :const:`EPOLLWAKEUP` | Prevents sleep during event waiting. | - +-------------------------+-----------------------------------------------+ + The *eventmask* is a bit mask using the following constants: + + +-------------------------+------------------------------------------------+ + | Constant | Meaning | + +=========================+================================================+ + | :const:`EPOLLIN` | Available for read. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLOUT` | Available for write. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLPRI` | Urgent data for read. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLERR` | Error condition happened on the associated fd. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLHUP` | Hang up happened on the associated fd. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLET` | Set Edge Trigger behavior, the default is | + | | Level Trigger behavior. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLONESHOT` | Set one-shot behavior. After one event is | + | | pulled out, the fd is internally disabled. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLEXCLUSIVE` | Wake only one epoll object when the | + | | associated fd has an event. The default (if | + | | this flag is not set) is to wake all epoll | + | | objects polling on an fd. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLRDHUP` | Stream socket peer closed connection or shut | + | | down writing half of connection. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLRDNORM` | Equivalent to :const:`EPOLLIN` | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLRDBAND` | Priority data band can be read. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLWRNORM` | Equivalent to :const:`EPOLLOUT`. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLWRBAND` | Priority data may be written. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLMSG` | Ignored. | + +-------------------------+------------------------------------------------+ + | :const:`EPOLLWAKEUP` | Prevents sleep during event waiting. | + +-------------------------+------------------------------------------------+ .. versionadded:: 3.6 :const:`EPOLLEXCLUSIVE` was added. It's only supported by Linux Kernel 4.5 @@ -362,12 +372,12 @@ Edge and Level Trigger Polling (epoll) Objects .. method:: epoll.register(fd[, eventmask]) - Register a fd descriptor with the epoll object. + Register a file descriptor *fd* with the epoll object. .. method:: epoll.modify(fd, eventmask) - Modify a registered file descriptor. + Modify a registered file descriptor *fd*. .. method:: epoll.unregister(fd) @@ -396,7 +406,7 @@ Edge and Level Trigger Polling (epoll) Objects .. _poll-objects: -Polling Objects +Polling objects --------------- The :c:func:`!poll` system call, supported on most Unix systems, provides better @@ -421,24 +431,24 @@ linearly scanned again. :c:func:`!select` is *O*\ (*highest file descriptor*), w :const:`POLLPRI`, and :const:`POLLOUT`, described in the table below. If not specified, the default value used will check for all 3 types of events. - +-------------------+------------------------------------------+ - | Constant | Meaning | - +===================+==========================================+ - | :const:`POLLIN` | There is data to read | - +-------------------+------------------------------------------+ - | :const:`POLLPRI` | There is urgent data to read | - +-------------------+------------------------------------------+ - | :const:`POLLOUT` | Ready for output: writing will not block | - +-------------------+------------------------------------------+ - | :const:`POLLERR` | Error condition of some sort | - +-------------------+------------------------------------------+ - | :const:`POLLHUP` | Hung up | - +-------------------+------------------------------------------+ - | :const:`POLLRDHUP`| Stream socket peer closed connection, or | - | | shut down writing half of connection | - +-------------------+------------------------------------------+ - | :const:`POLLNVAL` | Invalid request: descriptor not open | - +-------------------+------------------------------------------+ + +-------------------+-------------------------------------------+ + | Constant | Meaning | + +===================+===========================================+ + | :const:`POLLIN` | There is data to read. | + +-------------------+-------------------------------------------+ + | :const:`POLLPRI` | There is urgent data to read. | + +-------------------+-------------------------------------------+ + | :const:`POLLOUT` | Ready for output: writing will not block. | + +-------------------+-------------------------------------------+ + | :const:`POLLERR` | Error condition of some sort. | + +-------------------+-------------------------------------------+ + | :const:`POLLHUP` | Hung up. | + +-------------------+-------------------------------------------+ + | :const:`POLLRDHUP`| Stream socket peer closed connection, or | + | | shut down writing half of connection. | + +-------------------+-------------------------------------------+ + | :const:`POLLNVAL` | Invalid request: descriptor not open. | + +-------------------+-------------------------------------------+ Registering a file descriptor that's already registered is not an error, and has the same effect as registering the descriptor exactly once. @@ -489,7 +499,7 @@ linearly scanned again. :c:func:`!select` is *O*\ (*highest file descriptor*), w .. _kqueue-objects: -Kqueue Objects +Kqueue objects -------------- .. method:: kqueue.close() @@ -533,7 +543,7 @@ Kqueue Objects .. _kevent-objects: -Kevent Objects +Kevent objects -------------- https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 @@ -553,66 +563,66 @@ https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 | Constant | Meaning | +===========================+=============================================+ | :const:`KQ_FILTER_READ` | Takes a descriptor and returns whenever | - | | there is data available to read | + | | there is data available to read. | +---------------------------+---------------------------------------------+ | :const:`KQ_FILTER_WRITE` | Takes a descriptor and returns whenever | - | | there is data available to write | + | | there is data available to write. | +---------------------------+---------------------------------------------+ - | :const:`KQ_FILTER_AIO` | AIO requests | + | :const:`KQ_FILTER_AIO` | AIO requests. | +---------------------------+---------------------------------------------+ | :const:`KQ_FILTER_VNODE` | Returns when one or more of the requested | - | | events watched in *fflag* occurs | + | | events watched in *fflag* occurs. | +---------------------------+---------------------------------------------+ - | :const:`KQ_FILTER_PROC` | Watch for events on a process id | + | :const:`KQ_FILTER_PROC` | Watch for events on a process ID. | +---------------------------+---------------------------------------------+ | :const:`KQ_FILTER_NETDEV` | Watch for events on a network device | - | | [not available on macOS] | + | | (not available on macOS). | +---------------------------+---------------------------------------------+ | :const:`KQ_FILTER_SIGNAL` | Returns whenever the watched signal is | - | | delivered to the process | + | | delivered to the process. | +---------------------------+---------------------------------------------+ - | :const:`KQ_FILTER_TIMER` | Establishes an arbitrary timer | + | :const:`KQ_FILTER_TIMER` | Establishes an arbitrary timer. | +---------------------------+---------------------------------------------+ .. attribute:: kevent.flags Filter action. - +---------------------------+---------------------------------------------+ - | Constant | Meaning | - +===========================+=============================================+ - | :const:`KQ_EV_ADD` | Adds or modifies an event | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_DELETE` | Removes an event from the queue | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_ENABLE` | Permits control() to return the event | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_DISABLE` | Disables event | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_ONESHOT` | Removes event after first occurrence | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_CLEAR` | Reset the state after an event is retrieved | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_SYSFLAGS` | internal event | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_FLAG1` | internal event | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_EOF` | Filter specific EOF condition | - +---------------------------+---------------------------------------------+ - | :const:`KQ_EV_ERROR` | See return values | - +---------------------------+---------------------------------------------+ + +---------------------------+----------------------------------------------+ + | Constant | Meaning | + +===========================+==============================================+ + | :const:`KQ_EV_ADD` | Adds or modifies an event. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_DELETE` | Removes an event from the queue. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_ENABLE` | Permits control() to return the event. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_DISABLE` | Disables event. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_ONESHOT` | Removes event after first occurrence. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_CLEAR` | Reset the state after an event is retrieved. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_SYSFLAGS` | Internal event. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_FLAG1` | Internal event. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_EOF` | Filter-specific EOF condition. | + +---------------------------+----------------------------------------------+ + | :const:`KQ_EV_ERROR` | See return values. | + +---------------------------+----------------------------------------------+ .. attribute:: kevent.fflags - Filter specific flags. + Filter-specific flags. :const:`KQ_FILTER_READ` and :const:`KQ_FILTER_WRITE` filter flags: +----------------------------+--------------------------------------------+ | Constant | Meaning | +============================+============================================+ - | :const:`KQ_NOTE_LOWAT` | low water mark of a socket buffer | + | :const:`KQ_NOTE_LOWAT` | Low water mark of a socket buffer. | +----------------------------+--------------------------------------------+ :const:`KQ_FILTER_VNODE` filter flags: @@ -620,19 +630,19 @@ https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 +----------------------------+--------------------------------------------+ | Constant | Meaning | +============================+============================================+ - | :const:`KQ_NOTE_DELETE` | *unlink()* was called | + | :const:`KQ_NOTE_DELETE` | *unlink()* was called. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_WRITE` | a write occurred | + | :const:`KQ_NOTE_WRITE` | A write occurred. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_EXTEND` | the file was extended | + | :const:`KQ_NOTE_EXTEND` | The file was extended. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_ATTRIB` | an attribute was changed | + | :const:`KQ_NOTE_ATTRIB` | An attribute was changed. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_LINK` | the link count has changed | + | :const:`KQ_NOTE_LINK` | The link count has changed. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_RENAME` | the file was renamed | + | :const:`KQ_NOTE_RENAME` | The file was renamed. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_REVOKE` | access to the file was revoked | + | :const:`KQ_NOTE_REVOKE` | Access to the file was revoked. | +----------------------------+--------------------------------------------+ :const:`KQ_FILTER_PROC` filter flags: @@ -640,22 +650,22 @@ https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 +----------------------------+--------------------------------------------+ | Constant | Meaning | +============================+============================================+ - | :const:`KQ_NOTE_EXIT` | the process has exited | + | :const:`KQ_NOTE_EXIT` | The process has exited. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_FORK` | the process has called *fork()* | + | :const:`KQ_NOTE_FORK` | The process has called *fork()*. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_EXEC` | the process has executed a new process | + | :const:`KQ_NOTE_EXEC` | The process has executed a new process. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_PCTRLMASK` | internal filter flag | + | :const:`KQ_NOTE_PCTRLMASK` | Internal filter flag. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_PDATAMASK` | internal filter flag | + | :const:`KQ_NOTE_PDATAMASK` | Internal filter flag. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_TRACK` | follow a process across *fork()* | + | :const:`KQ_NOTE_TRACK` | Follow a process across *fork()*. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_CHILD` | returned on the child process for | - | | *NOTE_TRACK* | + | :const:`KQ_NOTE_CHILD` | Returned on the child process for | + | | *NOTE_TRACK*. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_TRACKERR` | unable to attach to a child | + | :const:`KQ_NOTE_TRACKERR` | Unable to attach to a child. | +----------------------------+--------------------------------------------+ :const:`KQ_FILTER_NETDEV` filter flags (not available on macOS): @@ -663,19 +673,19 @@ https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 +----------------------------+--------------------------------------------+ | Constant | Meaning | +============================+============================================+ - | :const:`KQ_NOTE_LINKUP` | link is up | + | :const:`KQ_NOTE_LINKUP` | Link is up. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_LINKDOWN` | link is down | + | :const:`KQ_NOTE_LINKDOWN` | Link is down. | +----------------------------+--------------------------------------------+ - | :const:`KQ_NOTE_LINKINV` | link state is invalid | + | :const:`KQ_NOTE_LINKINV` | Link state is invalid. | +----------------------------+--------------------------------------------+ .. attribute:: kevent.data - Filter specific data. + Filter-specific data. .. attribute:: kevent.udata - User defined value. + User-defined value. diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index d289ba58c24..6febc7a187a 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -385,10 +385,14 @@ Directory and files operations If *dst* already exists but is not a directory, it may be overwritten depending on :func:`os.rename` semantics. - If the destination is on the current filesystem, then :func:`os.rename` is - used. Otherwise, *src* is copied to the destination using *copy_function* - and then removed. In case of symlinks, a new symlink pointing to the target - of *src* will be created as the destination and *src* will be removed. + :func:`os.rename` is preferably used internally when *src* and the destination are on + the same filesystem. In case :func:`os.rename` fails due to :exc:`OSError` + (e.g. the user has write permission to the destination file but not to its parent + directory), this method falls back to using *copy_function*, in which case + *src* is copied to the destination using *copy_function* and then removed. + + In case of symlinks, a new symlink pointing to the target of *src* will be + created in or as the destination, and *src* will be removed. If *copy_function* is given, it must be a callable that takes two arguments, *src* and the destination, and will be used to copy *src* to the destination @@ -696,7 +700,7 @@ provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules. Register an archiver for the format *name*. - *function* is the callable that will be used to unpack archives. The callable + *function* is the callable that will be used to create archives. The callable will receive the *base_name* of the file to create, followed by the *base_dir* (which defaults to :data:`os.curdir`) to start archiving from. Further arguments are passed as keyword arguments: *owner*, *group*, @@ -749,8 +753,8 @@ provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules. Never extract archives from untrusted sources without prior inspection. It is possible that files are created outside of the path specified in - the *extract_dir* argument, e.g. members that have absolute filenames - starting with "/" or filenames with two dots "..". + the *extract_dir* argument, for example, members that have absolute filenames + or filenames with ".." components. Since Python 3.14, the defaults for both built-in formats (zip and tar files) will prevent the most dangerous of such security issues, diff --git a/Doc/library/site.rst b/Doc/library/site.rst index 656fbd142df..11a5484c2b1 100644 --- a/Doc/library/site.rst +++ b/Doc/library/site.rst @@ -356,7 +356,79 @@ Module contents This function used to be called unconditionally. -.. function:: addsitedir(sitedir, known_paths=None, *, defer_processing_start_files=False) +.. function:: makepath(*paths) + + Join *paths* with :func:`os.path.join`, attempt to make the result + absolute with :func:`os.path.abspath`, and return a 2-tuple containing + the absolute path and its case-normalized form as produced by + :func:`os.path.normcase`. If :func:`os.path.abspath` raises + :exc:`OSError`, the joined path is used unchanged for the + case-normalization step. + + The second element of the returned tuple is the form used throughout the + :mod:`!site` module to compare paths on case-insensitive file systems, and + is what populates the ``known_paths`` sets that prevent duplicate + :data:`sys.path` entries in various APIs within this module. + + +.. class:: StartupState(known_paths=None) + + Instances of this class accumulate interpreter startup configuration data + from one or more site directories. They are the preferred interface for + batching the processing of :file:`.pth` and :file:`.start` files across + multiple site directories, so that every :data:`sys.path` extension is + visible before any startup code runs. + + The optional *known_paths* argument is a set of case-normalized paths + (which can be produced by :func:`makepath`) used to prevent duplicate + :data:`sys.path` entries. When ``None`` (the default), the set is built + from the current :data:`sys.path`. :func:`main` implicitly uses an + instance of this class. + + Typical use: + + .. code-block:: python + + state = site.StartupState() + for sitedir in site_dirs: + state.addsitedir(sitedir) + state.process() + + .. versionadded:: 3.15 + + .. method:: addsitedir(sitedir) + + Read the :file:`.pth` and :file:`.start` files in *sitedir* and + record their :data:`sys.path` extensions, deprecated :file:`.pth` + ``import`` lines, and :file:`.start` entry points on this state. + The recorded data is not applied until :meth:`process` is called. + + .. method:: addusersitepackages() + + Add the per-user site-packages directory, if enabled and if it exists. + The directory's startup data is accumulated for later processing by + :meth:`process`. + + .. method:: addsitepackages(prefixes=None) + + Add global site-packages directories, computed from *prefixes* or from + the global :data:`PREFIXES` when *prefixes* is ``None``. Each + directory's startup data is accumulated for later processing by + :meth:`process`. + + .. method:: process() + + Apply the accumulated state by first adding the path extensions to + :data:`sys.path`, then executing the :file:`.start` file entry points + and :file:`.pth` file ``import`` lines (:ref:`deprecated + `). + + This method is not idempotent and must not be called more than once + on the same instance. Doing so will apply the accumulated state + more than once, re-running entry points and ``import`` lines. + + +.. function:: addsitedir(sitedir, known_paths=None) Add a directory to sys.path and parse the :file:`.pth` and :file:`.start` files found in that directory. Typically used in :mod:`sitecustomize` or @@ -366,17 +438,15 @@ Module contents used to prevent duplicate :data:`sys.path` entries. When ``None`` (the default), the set is built from the current :data:`sys.path`. - While :file:`.pth` and :file:`.start` files are always parsed, set - *defer_processing_start_files* to ``True`` to prevent processing the - startup data found in those files, so that you can process them explicitly - (this is typically used by the :func:`main` function). + For batched processing across multiple site directories, build a + :class:`StartupState` explicitly and call :meth:`StartupState.addsitedir` + on it; that defers :file:`.pth` and :file:`.start` processing until a + single :meth:`StartupState.process` call, ensuring every :data:`sys.path` + extension is visible before any startup code runs. .. versionchanged:: 3.15 Also processes :file:`.start` files. See :ref:`site-start-files`. - All :file:`.pth` and :file:`.start` files are now read and - accumulated before any path extensions, ``import`` line execution, - or entry point invocations take place. .. function:: getsitepackages() @@ -447,4 +517,3 @@ value greater than 2 if there is an error. * :pep:`370` -- Per user site-packages directory * :pep:`829` -- Startup entry points and the deprecation of import lines in ``.pth`` files * :ref:`sys-path-init` -- The initialization of :data:`sys.path`. - diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 484260e63dd..3a75d44f3f7 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -1417,6 +1417,9 @@ Connection objects See :ref:`sqlite3-howto-row-factory` for more details. + .. versionchanged:: next + Deleting the ``row_factory`` attribute is no longer allowed. + .. attribute:: text_factory A :term:`callable` that accepts a :class:`bytes` parameter @@ -1426,6 +1429,9 @@ Connection objects See :ref:`sqlite3-howto-encoding` for more details. + .. versionchanged:: next + Deleting the ``text_factory`` attribute is no longer allowed. + .. attribute:: total_changes Return the total number of database rows that have been modified, inserted, or @@ -1709,6 +1715,9 @@ Cursor objects See :ref:`sqlite3-howto-row-factory` for more details. + .. versionchanged:: next + Deleting the ``row_factory`` attribute is no longer allowed. + .. The sqlite3.Row example used to be a how-to. It has now been incorporated into the Row reference. We keep the anchor here in order not to break diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index d9c736d27dc..c0f3757e583 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -2076,7 +2076,7 @@ to speed up repeated connections from the same clients. :attr:`~SSLContext.minimum_version` and :attr:`SSLContext.options` all affect the supported SSL and TLS versions of the context. The implementation does not prevent - invalid combination. For example a context with + invalid combinations. For example a context with :attr:`OP_NO_TLSv1_2` in :attr:`~SSLContext.options` and :attr:`~SSLContext.maximum_version` set to :attr:`TLSVersion.TLSv1_2` will not be able to establish a TLS 1.2 connection. @@ -2473,79 +2473,67 @@ Visual inspection shows that the certificate does identify the desired service (that is, the HTTPS host ``www.python.org``):: >>> pprint.pprint(cert) - { - 'OCSP': ('http://ocsp.digicert.com',), - 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',), - 'crlDistributionPoints': ( - 'http://crl3.digicert.com/sha2-ev-server-g1.crl', - 'http://crl4.digicert.com/sha2-ev-server-g1.crl', - ), - 'issuer': ( - (('countryName', 'US'),), - (('organizationName', 'DigiCert Inc'),), - (('organizationalUnitName', 'www.digicert.com'),), - (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),), - ), - 'notAfter': 'Sep 9 12:00:00 2016 GMT', - 'notBefore': 'Sep 5 00:00:00 2014 GMT', - 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26', - 'subject': ( - (('businessCategory', 'Private Organization'),), - (('1.3.6.1.4.1.311.60.2.1.3', 'US'),), - (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),), - (('serialNumber', '3359300'),), - (('streetAddress', '16 Allen Rd'),), - (('postalCode', '03894-4801'),), - (('countryName', 'US'),), - (('stateOrProvinceName', 'NH'),), - (('localityName', 'Wolfeboro'),), - (('organizationName', 'Python Software Foundation'),), - (('commonName', 'www.python.org'),), - ), - 'subjectAltName': ( - ('DNS', 'www.python.org'), - ('DNS', 'python.org'), - ('DNS', 'pypi.org'), - ('DNS', 'docs.python.org'), - ('DNS', 'testpypi.org'), - ('DNS', 'bugs.python.org'), - ('DNS', 'wiki.python.org'), - ('DNS', 'hg.python.org'), - ('DNS', 'mail.python.org'), - ('DNS', 'packaging.python.org'), - ('DNS', 'pythonhosted.org'), - ('DNS', 'www.pythonhosted.org'), - ('DNS', 'test.pythonhosted.org'), - ('DNS', 'us.pycon.org'), - ('DNS', 'id.python.org'), - ), - 'version': 3, - } + {'OCSP': ('http://ocsp.digicert.com',), + 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',), + 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl', + 'http://crl4.digicert.com/sha2-ev-server-g1.crl'), + 'issuer': ((('countryName', 'US'),), + (('organizationName', 'DigiCert Inc'),), + (('organizationalUnitName', 'www.digicert.com'),), + (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)), + 'notAfter': 'Sep 9 12:00:00 2016 GMT', + 'notBefore': 'Sep 5 00:00:00 2014 GMT', + 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26', + 'subject': ((('businessCategory', 'Private Organization'),), + (('1.3.6.1.4.1.311.60.2.1.3', 'US'),), + (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),), + (('serialNumber', '3359300'),), + (('streetAddress', '16 Allen Rd'),), + (('postalCode', '03894-4801'),), + (('countryName', 'US'),), + (('stateOrProvinceName', 'NH'),), + (('localityName', 'Wolfeboro'),), + (('organizationName', 'Python Software Foundation'),), + (('commonName', 'www.python.org'),)), + 'subjectAltName': (('DNS', 'www.python.org'), + ('DNS', 'python.org'), + ('DNS', 'pypi.org'), + ('DNS', 'docs.python.org'), + ('DNS', 'testpypi.org'), + ('DNS', 'bugs.python.org'), + ('DNS', 'wiki.python.org'), + ('DNS', 'hg.python.org'), + ('DNS', 'mail.python.org'), + ('DNS', 'packaging.python.org'), + ('DNS', 'pythonhosted.org'), + ('DNS', 'www.pythonhosted.org'), + ('DNS', 'test.pythonhosted.org'), + ('DNS', 'us.pycon.org'), + ('DNS', 'id.python.org')), + 'version': 3} Now the SSL channel is established and the certificate verified, you can proceed to talk with the server:: >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n") >>> pprint.pprint(conn.recv(1024).split(b"\r\n")) - [ - b'HTTP/1.1 200 OK', - b'Date: Sat, 18 Oct 2014 18:27:20 GMT', - b'Server: nginx', - b'Content-Type: text/html; charset=utf-8', - b'X-Frame-Options: SAMEORIGIN', - b'Content-Length: 45679', - b'Accept-Ranges: bytes', - b'Via: 1.1 varnish', - b'Age: 2188', - b'X-Served-By: cache-lcy1134-LCY', - b'X-Cache: HIT', - b'X-Cache-Hits: 11', - b'Vary: Cookie', - b'Strict-Transport-Security: max-age=63072000; includeSubDomains', - b'Connection: close', - b'', - b'', - ] + [b'HTTP/1.1 200 OK', + b'Date: Sat, 18 Oct 2014 18:27:20 GMT', + b'Server: nginx', + b'Content-Type: text/html; charset=utf-8', + b'X-Frame-Options: SAMEORIGIN', + b'Content-Length: 45679', + b'Accept-Ranges: bytes', + b'Via: 1.1 varnish', + b'Age: 2188', + b'X-Served-By: cache-lcy1134-LCY', + b'X-Cache: HIT', + b'X-Cache-Hits: 11', + b'Vary: Cookie', + b'Strict-Transport-Security: max-age=63072000; includeSubDomains', + b'Connection: close', + b'', + b''] See the discussion of :ref:`ssl-security` below. @@ -2891,11 +2879,11 @@ disabled by default. :: >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) - >>> client_context.minimum_version = ssl.TLSVersion.TLSv1_3 + >>> client_context.minimum_version = ssl.TLSVersion.TLSv1_2 >>> client_context.maximum_version = ssl.TLSVersion.TLSv1_3 -The SSL context created above will only allow TLSv1.3 and later (if +The SSL client context created above will only allow TLSv1.2 and TLSv1.3 (if supported by your system) connections to a server. :const:`PROTOCOL_TLS_CLIENT` implies certificate validation and hostname checks by default. You have to load certificates into the context. diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index e3bd1a46891..c8f2cca484a 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -1403,6 +1403,8 @@ application). Many other operations also produce lists, including the :func:`sorted` built-in. + Lists are :ref:`generic ` over the types of their items. + Lists implement all of the :ref:`common ` and :ref:`mutable ` sequence operations. Lists also provide the following additional method: @@ -1494,6 +1496,10 @@ homogeneous data is needed (such as allowing storage in a :class:`set` or Tuples implement all of the :ref:`common ` sequence operations. + Tuples are :ref:`generic ` over the types of their contents. + For more information, refer to + :ref:`the typing documentation on annotating tuples `. + For heterogeneous collections of data where access by name is clearer than access by index, :func:`collections.namedtuple` may be a more appropriate choice than a simple tuple object. @@ -2747,6 +2753,8 @@ expression support in the :mod:`re` module). The *chars* argument is not a prefix or suffix; rather, all combinations of its values are stripped. + Whitespace characters are defined by :meth:`str.isspace`. + For example: .. doctest:: @@ -4584,6 +4592,9 @@ copying. types such as :class:`bytes` and :class:`bytearray`, an element is a single byte, but other types such as :class:`array.array` may have bigger elements. + :class:`!memoryview`\s are :ref:`generic ` over the type of their + underlying data. + ``len(view)`` is equal to the length of :meth:`~memoryview.tolist`, which is the nested list representation of the view. If ``view.ndim = 1``, this is equal to the number of elements in the view. @@ -5277,6 +5288,8 @@ Note, the *elem* argument to the :meth:`~object.__contains__`, :meth:`~set.discard` methods may be a set. To support searching for an equivalent frozenset, a temporary one is created from *elem*. +Sets and frozensets are :ref:`generic ` over the type of their elements. + .. seealso:: For detailed information on thread-safety guarantees for :class:`set` @@ -5380,6 +5393,9 @@ can be used interchangeably to index the same dictionary entry. Dictionary order is guaranteed to be insertion order. This behavior was an implementation detail of CPython from 3.6. + Dictionaries are :ref:`generic ` over two types, signifying + (respectively) the types of the dictionary's keys and values. + These are the operations that dictionaries support (and therefore, custom mapping types should support too): @@ -5717,6 +5733,9 @@ Frozen dictionaries :class:`!frozendict` is not a :class:`!dict` subclass but inherits directly from ``object``. + Like dictionaries, frozendicts are :ref:`generic ` over two types, + signifying (respectively) the types of the frozendict's keys and values. + .. versionadded:: 3.15 diff --git a/Doc/library/string.rst b/Doc/library/string.rst index 08ccdfa3f45..be968a3c53d 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -472,7 +472,9 @@ of a number respectively. It can be one of the following: | | this option is not supported. | +---------+----------------------------------------------------------+ -For a locale aware separator, use the ``'n'`` presentation type instead. +For a locale-aware separator, use the ``'n'`` +:ref:`float presentation type ` or +:ref:`integer presentation type ` instead. .. versionchanged:: 3.1 Added the ``','`` option (see also :pep:`378`). @@ -518,9 +520,14 @@ The available integer presentation types are: | | In case ``'#'`` is specified, the prefix ``'0x'`` will | | | be upper-cased to ``'0X'`` as well. | +---------+----------------------------------------------------------+ - | ``'n'`` | Number. This is the same as ``'d'``, except that it uses | + | ``'n'`` | .. _n-format-integer: | + | | | + | | Number. This is the same as ``'d'``, except that it uses | | | the current locale setting to insert the appropriate | - | | digit group separators. | + | | digit group separators. Note that the default locale is | + | | not the system locale. Depending on your use case, you | + | | may wish to set :const:`~locale.LC_NUMERIC` with | + | | :func:`locale.setlocale` before using ``'n'``. | +---------+----------------------------------------------------------+ | None | The same as ``'d'``. | +---------+----------------------------------------------------------+ @@ -603,10 +610,15 @@ The available presentation types for :class:`float` and | | ``'E'`` if the number gets too large. The | | | representations of infinity and NaN are uppercased, too. | +---------+----------------------------------------------------------+ - | ``'n'`` | Number. This is the same as ``'g'``, except that it uses | + | ``'n'`` | .. _n-format-float: | + | | | + | | Number. This is the same as ``'g'``, except that it uses | | | the current locale setting to insert the appropriate | - | | digit group separators | - | | for the integral part of a number. | + | | digit group separators for the integral part of a | + | | number. Note that the default locale is not the system | + | | locale. Depending on your use case, you may wish to set | + | | :const:`~locale.LC_NUMERIC` with | + | | :func:`locale.setlocale` before using ``'n'``. | +---------+----------------------------------------------------------+ | ``'%'`` | Percentage. Multiplies the number by 100 and displays | | | in fixed (``'f'``) format, followed by a percent sign. | diff --git a/Doc/library/string.templatelib.rst b/Doc/library/string.templatelib.rst index a5b2d796aaf..6e91850fdf5 100644 --- a/Doc/library/string.templatelib.rst +++ b/Doc/library/string.templatelib.rst @@ -245,6 +245,8 @@ Types ... 3.0 | 1. + 2. | None | .2f + Interpolations are :ref:`generic ` over the types of their values. + .. rubric:: Attributes .. attribute:: value diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 21de31383d4..d0fe0625deb 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -919,8 +919,6 @@ always available. Unless explicitly noted otherwise, all variables are read-only * ``"normal"``: Only imports explicitly marked with the ``lazy`` keyword are lazy * ``"all"``: All top-level imports are potentially lazy - * ``"none"``: All lazy imports are suppressed (even explicitly marked - ones) See also :func:`set_lazy_imports` and :pep:`810`. @@ -1483,6 +1481,21 @@ always available. Unless explicitly noted otherwise, all variables are read-only They hold the legacy representation of ``sys.last_exc``, as returned from :func:`exc_info` above. + +.. data:: lazy_modules + + A :class:`set` of fully qualified module name strings that have been lazily + imported in the current interpreter but not yet loaded. When a + lazily imported module is accessed for the first time, its name is removed + from this set. + + This attribute is intended for debugging and introspection. + + See also :func:`set_lazy_imports` and :pep:`810`. + + .. versionadded:: 3.15 + + .. data:: maxsize An integer giving the maximum value a variable of type :c:type:`Py_ssize_t` can @@ -1757,8 +1770,6 @@ always available. Unless explicitly noted otherwise, all variables are read-only * ``"normal"``: Only imports explicitly marked with the ``lazy`` keyword are lazy * ``"all"``: All top-level imports become potentially lazy - * ``"none"``: All lazy imports are suppressed (even explicitly marked - ones) This function is intended for advanced users who need to control lazy imports across their entire application. Library developers should diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst index 6f1e01cf5aa..9b9783d8e58 100644 --- a/Doc/library/tarfile.rst +++ b/Doc/library/tarfile.rst @@ -144,7 +144,9 @@ Some facts and figures: For modes ``'w:gz'`` and ``'w|gz'``, :func:`tarfile.open` accepts the keyword argument *mtime* to create a gzip archive header with that mtime. By - default, the mtime is set to the time of creation of the archive. + default, the mtime is set to the time of creation of the archive. Use + *mtime* ``0`` to generate a compressed stream that does not depend on + creation time, for reproducible output. For special purposes, there is a second format for *mode*: ``'filemode|[compression]'``. :func:`tarfile.open` will return a :class:`TarFile` diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index eca3e76d84a..5d9a7b6314b 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -515,7 +515,7 @@ since it is impossible to detect the termination of alien threads. This constructor should always be called with keyword arguments. Arguments are: - *group* should be ``None``; reserved for future extension when a + *group* must be ``None`` as it is reserved for future extension when a :class:`!ThreadGroup` class is implemented. *target* is the callable object to be invoked by the :meth:`run` method. diff --git a/Doc/library/traceback.rst b/Doc/library/traceback.rst index b5464ac55dd..aa48cea357c 100644 --- a/Doc/library/traceback.rst +++ b/Doc/library/traceback.rst @@ -147,9 +147,7 @@ Module-Level Functions :ref:`traceback object ` *tb*. It is useful for alternate formatting of stack traces. The optional *limit* argument has the same meaning as for :func:`print_tb`. A "pre-processed" stack trace - entry is a :class:`FrameSummary` object containing attributes - :attr:`~FrameSummary.filename`, :attr:`~FrameSummary.lineno`, - :attr:`~FrameSummary.name`, and :attr:`~FrameSummary.line` representing the + entry is a :class:`FrameSummary` object with attributes representing the information that is usually printed for a stack trace. @@ -181,7 +179,7 @@ Module-Level Functions .. function:: format_exception_only(exc, /[, value], *, show_group=False) Format the exception part of a traceback using an exception value such as - given by :data:`sys.last_value`. The return value is a list of strings, each + given by :data:`sys.last_exc`. The return value is a list of strings, each ending in a newline. The list contains the exception's message, which is normally a single string; however, for :exc:`SyntaxError` exceptions, it contains several lines that (when printed) display detailed information @@ -347,7 +345,7 @@ the module-level functions described above. .. attribute:: exc_type - The class of the original traceback. + The class of the original exception. .. deprecated:: 3.13 @@ -391,7 +389,7 @@ the module-level functions described above. For syntax errors - the compiler error message. - .. classmethod:: from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False) + .. classmethod:: from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False, compact=False, max_group_width=15, max_group_depth=10) Capture an exception for later rendering. *limit*, *lookup_lines* and *capture_locals* are as for the :class:`StackSummary` class. diff --git a/Doc/library/types.rst b/Doc/library/types.rst index 74898baa521..38a77119769 100644 --- a/Doc/library/types.rst +++ b/Doc/library/types.rst @@ -143,15 +143,15 @@ If you instantiate any of these types, note that signatures may vary between Pyt Standard names are defined for the following types: -.. data:: NoneType +.. class:: NoneType The type of :data:`None`. .. versionadded:: 3.10 -.. data:: FunctionType - LambdaType +.. class:: FunctionType + LambdaType The type of user-defined functions and functions created by :keyword:`lambda` expressions. @@ -162,13 +162,13 @@ Standard names are defined for the following types: and is not raised for normal compilation. -.. data:: GeneratorType +.. class:: GeneratorType The type of :term:`generator`-iterator objects, created by generator functions. -.. data:: CoroutineType +.. class:: CoroutineType The type of :term:`coroutine` objects, created by :keyword:`async def` functions. @@ -176,7 +176,7 @@ Standard names are defined for the following types: .. versionadded:: 3.5 -.. data:: AsyncGeneratorType +.. class:: AsyncGeneratorType The type of :term:`asynchronous generator`-iterator objects, created by asynchronous generator functions. @@ -196,7 +196,7 @@ Standard names are defined for the following types: required by the initializer. The audit event only occurs for direct instantiation of code objects, and is not raised for normal compilation. -.. data:: CellType +.. class:: CellType The type for cell objects: such objects are used as containers for a function's :term:`closure variables `. @@ -204,20 +204,20 @@ Standard names are defined for the following types: .. versionadded:: 3.8 -.. data:: MethodType +.. class:: MethodType The type of methods of user-defined class instances. -.. data:: BuiltinFunctionType - BuiltinMethodType +.. class:: BuiltinFunctionType + BuiltinMethodType The type of built-in functions like :func:`len` or :func:`sys.exit`, and methods of built-in classes. (Here, the term "built-in" means "written in C".) -.. data:: WrapperDescriptorType +.. class:: WrapperDescriptorType The type of methods of some built-in data types and base classes such as :meth:`object.__init__` or :meth:`object.__lt__`. @@ -225,7 +225,7 @@ Standard names are defined for the following types: .. versionadded:: 3.7 -.. data:: MethodWrapperType +.. class:: MethodWrapperType The type of *bound* methods of some built-in data types and base classes. For example it is the type of :code:`object().__str__`. @@ -233,21 +233,21 @@ Standard names are defined for the following types: .. versionadded:: 3.7 -.. data:: NotImplementedType +.. class:: NotImplementedType The type of :data:`NotImplemented`. .. versionadded:: 3.10 -.. data:: MethodDescriptorType +.. class:: MethodDescriptorType The type of methods of some built-in data types such as :meth:`str.join`. .. versionadded:: 3.7 -.. data:: ClassMethodDescriptorType +.. class:: ClassMethodDescriptorType The type of *unbound* class methods of some built-in data types such as ``dict.__dict__['fromkeys']``. @@ -273,7 +273,7 @@ Standard names are defined for the following types: creating :class:`!ModuleType` instances which ensures the various attributes are set appropriately. -.. data:: EllipsisType +.. class:: EllipsisType The type of :data:`Ellipsis`. @@ -327,13 +327,13 @@ Standard names are defined for the following types: dynamically. -.. data:: FrameType +.. class:: FrameType The type of :ref:`frame objects ` such as found in :attr:`tb.tb_frame ` if ``tb`` is a traceback object. -.. data:: FrameLocalsProxyType +.. class:: FrameLocalsProxyType The type of frame locals proxy objects, as found on the :attr:`frame.f_locals` attribute. @@ -343,7 +343,7 @@ Standard names are defined for the following types: .. seealso:: :pep:`667` -.. data:: LazyImportType +.. class:: LazyImportType The type of lazy import proxy objects. These objects are created when a module is lazily imported and serve as placeholders until the module is @@ -355,7 +355,7 @@ Standard names are defined for the following types: .. seealso:: :pep:`810` -.. data:: GetSetDescriptorType +.. class:: GetSetDescriptorType The type of objects defined in extension modules with ``PyGetSetDef``, such as :attr:`FrameType.f_locals ` or ``array.array.typecode``. @@ -364,7 +364,7 @@ Standard names are defined for the following types: :class:`property` type, but for classes defined in extension modules. -.. data:: MemberDescriptorType +.. class:: MemberDescriptorType The type of objects defined in extension modules with ``PyMemberDef``, such as ``datetime.timedelta.days``. This type is used as descriptor for simple C @@ -386,6 +386,10 @@ Standard names are defined for the following types: entries, which means that when the mapping changes, the view reflects these changes. + :class:`!MappingProxyType`\s are :ref:`generic ` over two types, + signifying (respectively) the types of the underlying mapping's keys and + values. + .. versionadded:: 3.3 .. versionchanged:: 3.9 diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 71b395c8016..ef6016d45c1 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -719,8 +719,8 @@ The :data:`Any` type ==================== A special kind of type is :data:`Any`. A static type checker will treat -every type as being compatible with :data:`Any` and :data:`Any` as being -compatible with every type. +every type as assignable to :data:`Any` and :data:`Any` as assignable to +every type. This means that it is possible to perform any operation or method call on a value of type :data:`Any` and assign it to any variable:: @@ -785,7 +785,7 @@ it as a return value) of a more specialized type is a type error. For example:: hash_a(42) hash_a("foo") - # Passes type checking, since Any is compatible with all types + # Passes type checking, since Any is assignable to all types hash_b(42) hash_b("foo") @@ -851,8 +851,8 @@ using ``[]``. Special type indicating an unconstrained type. - * Every type is compatible with :data:`Any`. - * :data:`Any` is compatible with every type. + * Every type is assignable to :data:`Any`. + * :data:`Any` is assignable to every type. .. versionchanged:: 3.11 :data:`Any` can now be used as a base class. This can be useful for @@ -1292,10 +1292,10 @@ These can be used as types in annotations. They all support subscription using :data:`ClassVar` accepts only types and cannot be further subscribed. - :data:`ClassVar` is not a class itself, and should not + :data:`ClassVar` is not a class itself, and cannot be used with :func:`isinstance` or :func:`issubclass`. :data:`ClassVar` does not change Python runtime behavior, but - it can be used by third-party type checkers. For example, a type checker + it can be used by static type checkers. For example, a type checker might flag the following code as an error:: enterprise_d = Starship(3000) @@ -1365,7 +1365,7 @@ These can be used as types in annotations. They all support subscription using def mutate_movie(m: Movie) -> None: m["year"] = 1999 # allowed - m["title"] = "The Matrix" # typechecker error + m["title"] = "The Matrix" # type checker error There is no runtime checking for this property. @@ -2292,8 +2292,8 @@ without the dedicated syntax, as documented below. * :data:`Concatenate` * :ref:`annotating-callables` -.. data:: ParamSpecArgs - ParamSpecKwargs +.. class:: ParamSpecArgs + ParamSpecKwargs Arguments and keyword arguments attributes of a :class:`ParamSpec`. The ``P.args`` attribute of a ``ParamSpec`` is an instance of ``ParamSpecArgs``, @@ -2472,9 +2472,9 @@ types. Fields with a default value must come after any fields without a default. - The resulting class has an extra attribute ``__annotations__`` giving a - dict that maps the field names to the field types. (The field names are in - the ``_fields`` attribute and the default values are in the + The types for each field name can be retrieved by calling + :func:`annotationlib.get_annotations` on the resulting class. (The field + names are in the ``_fields`` attribute and the default values are in the ``_field_defaults`` attribute, both of which are part of the :func:`~collections.namedtuple` API.) @@ -2535,7 +2535,7 @@ types. Helper class to create low-overhead :ref:`distinct types `. - A ``NewType`` is considered a distinct type by a typechecker. At runtime, + A ``NewType`` is considered a distinct type by a type checker. At runtime, however, calling a ``NewType`` returns its argument unchanged. Usage:: @@ -2616,7 +2616,7 @@ types. Mark a protocol class as a runtime protocol. Such a protocol can be used with :func:`isinstance` and :func:`issubclass`. - This allows a simple-minded structural check, very similar to "one trick ponies" + This allows a simple-minded structural check, very similar to "one-trick ponies" in :mod:`collections.abc` such as :class:`~collections.abc.Iterable`. For example:: @runtime_checkable @@ -2855,7 +2855,7 @@ types. key: T group: list[T] - A ``TypedDict`` can be introspected via annotations dicts + A ``TypedDict`` can be introspected via :func:`annotationlib.get_annotations` (see :ref:`annotations-howto` for more information on annotations best practices) and the following attributes: @@ -2898,7 +2898,7 @@ types. For backwards compatibility with Python 3.10 and below, it is also possible to use inheritance to declare both required and - non-required keys in the same ``TypedDict`` . This is done by declaring a + non-required keys in the same ``TypedDict``. This is done by declaring a ``TypedDict`` with one value for the ``total`` argument and then inheriting from it in another ``TypedDict`` with a different value for ``total``: @@ -2982,34 +2982,34 @@ with :deco:`runtime_checkable`. .. class:: SupportsAbs - An ABC with one abstract method ``__abs__`` that is covariant + A protocol with one abstract method ``__abs__`` that is covariant in its return type. .. class:: SupportsBytes - An ABC with one abstract method ``__bytes__``. + A protocol with one abstract method ``__bytes__``. .. class:: SupportsComplex - An ABC with one abstract method ``__complex__``. + A protocol with one abstract method ``__complex__``. .. class:: SupportsFloat - An ABC with one abstract method ``__float__``. + A protocol with one abstract method ``__float__``. .. class:: SupportsIndex - An ABC with one abstract method ``__index__``. + A protocol with one abstract method ``__index__``. .. versionadded:: 3.8 .. class:: SupportsInt - An ABC with one abstract method ``__int__``. + A protocol with one abstract method ``__int__``. .. class:: SupportsRound - An ABC with one abstract method ``__round__`` + A protocol with one abstract method ``__round__`` that is covariant in its return type. .. _typing-io: @@ -3763,7 +3763,7 @@ Constant .. data:: TYPE_CHECKING - A special constant that is assumed to be ``True`` by 3rd party static + A special constant that is assumed to be ``True`` by static type checkers. It's ``False`` at runtime. A module which is expensive to import, and which only contain types diff --git a/Doc/library/unicodedata.rst b/Doc/library/unicodedata.rst index f5c11fd849f..25bf872e0ab 100644 --- a/Doc/library/unicodedata.rst +++ b/Doc/library/unicodedata.rst @@ -18,8 +18,7 @@ this database is compiled from the `UCD version 17.0.0 The module uses the same names and symbols as defined by Unicode Standard Annex #44, `"Unicode Character Database" -`_. It defines the -following functions: +`_. .. seealso:: @@ -27,6 +26,44 @@ following functions: this module. +============================================================ =========================================================== +**Lookup** +------------------------------------------------------------------------------------------------------------------------- +:func:`lookup(name) ` Look up character by name +:func:`name(chr) ` Return the name assigned to a character + +**Numeric values** +------------------------------------------------------------------------------------------------------------------------- +:func:`decimal(chr) ` Decimal value of a character +:func:`digit(chr) ` Digit value of a character +:func:`numeric(chr) ` Numeric value of a character + +**Properties** +------------------------------------------------------------------------------------------------------------------------- +:func:`bidirectional(chr) ` Bidirectional class of a character +:func:`block(chr) ` Unicode block of a character +:func:`category(chr) ` General category of a character +:func:`combining(chr) ` Canonical combining class of a character +:func:`decomposition(chr) ` Character decomposition mapping +:func:`east_asian_width(chr) ` East Asian width of a character +:func:`extended_pictographic(chr) ` Check if a character has the Extended_Pictographic property +:func:`grapheme_cluster_break(chr) ` Grapheme_Cluster_Break property of a character +:func:`indic_conjunct_break(chr) ` Indic_Conjunct_Break property of a character +:func:`isxidcontinue(chr) ` Check if a character is a valid identifier continuation +:func:`isxidstart(chr) ` Check if a character is a valid identifier start +:func:`mirrored(chr) ` Mirrored property of a character + +**Normalization** +------------------------------------------------------------------------------------------------------------------------- +:func:`normalize(form, unistr) ` Return the normalized form of a string +:func:`is_normalized(form, unistr) ` Check if a Unicode string is normalized + +**Text segmentation** +------------------------------------------------------------------------------------------------------------------------- +:func:`iter_graphemes(unistr) ` Iterate over grapheme clusters in a string +============================================================ =========================================================== + + .. function:: lookup(name, /) Look up character by name. If a character with the given name is found, return @@ -273,7 +310,7 @@ following functions: .. versionadded:: 3.15 -In addition, the module exposes the following constant: +In addition, the module exposes the following constants: .. data:: unidata_version diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst index 5b9f9eec93a..2ff1015af7a 100644 --- a/Doc/library/unittest.mock.rst +++ b/Doc/library/unittest.mock.rst @@ -2347,12 +2347,10 @@ chained call: >>> kall = call(1).method(arg='foo').other('bar')(2.0) >>> kall.call_list() - [ - call(1), - call().method(arg='foo'), - call().method().other('bar'), - call().method().other()(2.0), - ] + [call(1), + call().method(arg='foo'), + call().method().other('bar'), + call().method().other()(2.0)] >>> m.mock_calls == kall.call_list() True diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst index 64e915d042d..03518d49d43 100644 --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -1051,7 +1051,7 @@ AbstractBasicAuthHandler Objects *headers* should be the error headers. *host* is either an authority (e.g. ``"python.org"``) or a URL containing an - authority component (e.g. ``"http://python.org/"``). In either case, the + authority component (e.g. ``"https://python.org/"``). In either case, the authority must not contain a userinfo component (so, ``"python.org"`` and ``"python.org:80"`` are fine, ``"joe:password@python.org"`` is not). @@ -1247,10 +1247,14 @@ This example gets the python.org main page and displays the first 300 bytes of it:: >>> import urllib.request - >>> with urllib.request.urlopen('http://www.python.org/') as f: - ... print(f.read(300)) - ... - b'\n\n\n - >> import urllib.request - >>> f = urllib.request.urlopen('http://www.python.org/') + >>> f = urllib.request.urlopen('https://www.python.org/') >>> try: - ... print(f.read(100).decode('utf-8')) + ... enc = f.headers.get('Content-Encoding') + ... data = f.read() + ... if enc == 'gzip': + ... import gzip + ... data = gzip.decompress(data) + ... print(data[:100].decode('utf-8', errors='replace')) ... finally: ... f.close() - ... - - - g1$R&l;4CU zPp>zM^Sg9*09qxTW)D(bYti+m2pC0upxLu7#!W$&&k9I{Z-D9f`I6eww}4!+tKx{O z#dl`XJ&^)et6MA^M;h0cVFN;$TVd1B(1X%dWyk`%e!RWj;uc<(y1t3*8?fh)YCy{j zoe%37GJk&hKi4?2?Mz#T4?vDSQr?PuG@$E3X}64aue;-#mr~uk^2f4U#nj8 ztlg^&0m&#Iwyyf9rhsA;0v@uUBbYL{1LISP|566Qm*}g3lmnvzeq@NI1dzp=?^{SL z*RqQWP10HtPXr(-1qmN_O^}DngZ>SvP$ta8Fyxa;j26N*$;G&ggSZtV#g84xSZ@R> z!YE)s+Y30-<6Q)f?PI}f+Wn*c^ zO~AhZ-28dwDy-==X4wzrsYX9X7UsfHmCPoj@R&yC(UWwG5z$R`L$9Didqjw@ij<$M zeijTCSb*l3?gfJE5J-pLE`(NMb?B8=lt8xDD&eRe{Hq+93dlTaLj{oo11qnM&Rcs# zsnvX#HuD@@KoiFCWW4-9U{iVJa`S*ld{Gb)N7TJz2SEC%;iXhcA4GMngJblCQ4F}{ zoGtaWKn3d=Hwz%AbQWAnESy6tiW;e&0kGf@bO|!^zE41viwo=BYZZ1|7;!7#d|>rw zicL1g1in)k35^(qapFsoTLd;&y)v^X9mXugbE((uJ&p7Ub{|vHH`sdC4l<}Qeh=CE@#vZhU z(Ut>PqZ7+*&7f&24~$mpmyh;Apcy3Ue=qt$L8s6$i?)U#VmOw~?c+j}F>FLrDX)O6 zbhkwv3tS9gELTrRr{U2eC(VH1T0V8~|ShUVDkh$)=WeLII* z%={)$x%FPTQ1I>l^a5E<)hUCzVy!4FDF-}o4Qnq^n7UV8II~~A$)GGpfI3Gh2GY8c z-C=?Yd_-a3HTQwJ65&5_^5IU+w>}&+zBvS}}^i-Qd%PPBI!d@EibfWq%7*h&Em>WwlV%4lcRU zvq3LNLcs0S?a_sixN21?)J@n=jrE#}bS4bt6M0*h-@Ds`fU7EFNNpK$`2&kkbYtsG zp)U%hmIWKP5`zzr?6fK>L^%R| z3VVfew39g1C-e}AsDM9_*kBGeAQNeYk?SD+);hj>0Fl+enWzEuZ>^1G&Cs9Eux01> z9_Ua6nv9s6YHiyTV}6MC(E=BRtsFGysOgOCj0}y4?TVn_J#+C#HZ!;zw=A)R zebJc4#sEO0xQi$)X$1}S=!>&9W+XgL0c^entFSQ~>()89Zh;P*~%p)w(7|3z>iCG?7*Leeyd^2pUOOQ~Kxw)S;^+}H3q;a2@w zoOk^cneA{R5uzJr6FxmwTJSOO8(z>>B9JD$15`>dVsDR%U?E{b`SJ_I z(<4OY)rny6I1rHH;~N;8xoYZrj_-E|?S}0o9{CWC)ZEM)#%vF)`Hmk5+Do1p%+02q zP<={O>>7yPO(M6W!~Gk>Ny|1ZVfR1`xFy*vvmNEkCAqaMTGB_0_KB5@+>NON>H|FC z5%kJYV}yciCxm^3@Fg!zBg6`k8r6M3${CsAcaFU+WB`Ng^(uVonZbAHP7(mnWV0$F zvypM}xNI>&j87aG)cJIw%epsPDf5ybsw7JPn)4j;P@1_Nzp|x^EAcO?hbo&kV>2QI zjyGy`PeGGl@gaR?d&y%wd4R?GI)jXr*L21sS3AHTrYHbCT*!|Cs4H%S_ ziW#<~+4KX8he_y9`Oy#!S~sWo)x{o*vT}n@)%aGROF0ZE#R+OBeOCJOELou~Zcm*P zUVYU>tZ)Vr$^Ia;&cjUqR@>|qAsPF^9X6^;5#=%ymYOU_1op^sCXuhCDG`~4h_;jE zS-?$;AgCs!H4OUNFj&T>YVlHP{(z!x&xZ|^xsuKbP;|-XeK|&r_Kd|%V-0IakV}d< z^p;zMU>zNX$~f4DLZJwCYJ(1LEOl!y|ZTfFVV|mu^zv+^Z ze17Ft=!W88Md)K6c$U*Nc~uGdri>j2Y&(*ankXpUFQlw{a;BZDf$RDH{AdI#9KZtWN#J>3 z>+5`|3**4?Mxo3D&^6xisck?N`i>8Zjxd^)e#_NNhwY54-oCCeFrcd}Q8FVBEBK|$ z!`<+5tF35xNUIF*{DhOYe`8RM`<(8yz=4d!f`1Uy5u^8);i<7{Z7-g9O@duGHO0Dj zHF(3HtLMf2+b}$eJ`oqWU~i_@-T#@@*gmGo)_;*Va`)DU{EIz<_Di@(3Y*i83ujb; zpWUR;E58e|Wye_7aR(b*B-9N;;LeHKm*Ut)-Oe#z&QlA%Q1|ImrZb4s?TiKPMx<2T zG~A}3>WxIhONzGu_zH7(57Zu_`!6Y36ss<4p{*ug@_k zkRzL3G(l0ti4kgWPI@0Eq!p0gBz!=a$KD}D!32GNKHoMY%Al?osu0x!3QIIS>s~9H z@7`WG{h$nkq<^XA_oTW*U1`xm{U;-%MCV?Xs&e`Wc(&JuRDtGYrMI9=rslY10KB+~%5J(y-FGm~Lx@PU* z7mKq#%;=tx2bbtck|YzU^gL9YsD0z!^sE zVj4r92S^0em_Z7>VIK=Z5atrgTQphJ=}gkP?3yxNHbsFR8Ok{cuk>xmO3*ApcgEcJ3a` zq$#je?9b)KpOpRg_|&rmewZ^VbN`Y#geuAmd`qLNrNBFl$axs|@*OD4iq5plJnG$!X(~>K79mGauzU2I&gh!baTbAKp5(w4n{XL0v zC4UMt2OSD*E>@5Mbq$Y}Le8+AcNXZm+-mty>O8FXN3H_~K?T62)By&GX(k3;bCh`Q z((GGnKi86hm^7(d4H$?3Xjpv`vY<9uBS?dj(nFTmgK=7)Qb>9w5_Us&r%xUcp)uj= zN#Jd!>e03r7<|lJM#P`n7DrH9vvy_Zmk>1|)1uu~zl)mEJw?p=;{GnAN z(AL(1NmiPX7V4$Xe4k~0W6lyIqJ7agL@rV7in-Kskp{j>luECpO)_s7XGI|~0EU8d zQb)_I)+k?_=%UW2Pz^}LLe-P9=ZYUt8DBe$0PxxQ-S?a(0%!c-yTXUt;{)^{g3Od{ zdH5x9_q(4e=VR-CddsP2JU2U(0G=LLO^FC007K%h;0$--PK&lMp`_b+TGoY$OEFoV zR9StL@(G_($eb(Qaa77E;;hc|Vr7t|}LQb+^ky)98HOsy8 zV<h+8AD+-?z(+L~1G?=WhGMr}fa=!Wl|GpmS#|+i=&F7%SM{PdMW zCkF9miH$#U{6XJtvrbrz^LyJU%kzDBZh)wyTULqE6M4YVd*EV1fDmQm5!m%@DTY@& zcU;|zJ;>WT;LD4x=tN2TG;C21LAZiIrc6W}{M53eT?a~`K6_em=JMxRmoBn0F1>`gEcjuS!W;Ew zi1_l3RGD~pAkw_)ahwK7qBy@xk0>~^k)QRJJaczY2q6=4U|6^SxwbRLbRA*ZR_T^u zC`hP>5;5T10K13h*mt;_bMzeN7O)9jH9|>z z@=n>g&Vx*uwPoxk33bN6&DW8&y+qF4)XXr@QPMfG^B zZm;4vNJ*Z$%C2m?XGE0rz@mH+Hx(@rGvfP?q%D{%4J>VY7*HBGfn)S%tzt`cppq>AE!hKGjip{-E}V z(T!s!Y|h`s-K)G7$=Z$+XhePXplrCKLXKqJfSZ%joQAX#tg^PLR1kX2Y~VNt?>Nf2 zj+vl2C-JC&_b(=kH`TO2)Vun&{*43U_8}`A&n+qosp4%_V>6SC)^Y~NjssTuZ&xvP z8tR&0&QColoD5wY{a5>NoYBBlERAUqAKa;iwP_{q4W>KouZ-m5=VnKS&mMI`eQg9Q~HC!QXzb_S6DyX2_ zCZEF;4B|YgQ+d=@X;Ililb)}`30aa1@YZQSBgfudffW|Rs@p#r2Q?zgw~zHy-;MyD z-u5T6^@3ZvWfPqmm^R1KD|CI9t#UuBO+Jn-Hqy{b$pSU&zlqVnyKdx8Oy?d;34D&D z1sA9hK^e%tIdovVqjzDIVpv4xj z=L`UM_J=ZRU5-Db-v)9%%G@49^n7tG>yU|G!8U76=9jn3Tn>e-2`1gF0`L$~xe>+@ zTzn)up0wmclGjfREUtc+g>*h4&ymG^jEE`!6tgMDX(E#}qgmo)$@3AvIJApg3N^YA z*NH1Z#tTvR#IHg9`K17bN?@Hs;+AX&vSdb%yZ0{{Hlxn2hR9(nqxy63AZ9ShB5hME z3L>{W|0=J%!dMWXebr0VI}m8-?W0%{wT!Fy4pWtLb>jVRe(`4ZujY#x;@<_l8u$dH^I;#Tj@&G>{C?9 z^70VmMW=A3{oZ|o+{H4ZBVT^~O!y=U%%k-}c@u&%^986RSfSEf@-}D;H4Rt*t)qso zbAD9bT?6TgtKvqC zj2PUOpi@F6#r`r%y>FCzDS}YCVy=5&cDpjQG>)Z`dEoZWT5Mv{ajIGt@u>eTce7}3 zX70jH&V(o`ejalmo%i>urm|{D^rzPZ5U+9NeAyArcZ{*W%K_*Um9QDnpy?$YUg%cY za>0d&b!np(s( zdZ!3|skaGzqxuG*c$>bta(Re|epRSyuOu*hnP)xQLIcYsYls)9MvQfn)?=|HP`|-T zA+$HH5~k-OV7ZpHcy|e>UD=CtFD26$ql`y`(_;_AW-O|DzY@Na0!w+0FzU{c`lCfd z4E9x6Ter3MG37>w3l%e(X$MODv>-9ImwNN5>wI~7^YJYm2PTb$?W~g1uvF_MGG!>e z0iyVf6SJ+SN3yc*C>1m*otv0a-kj)CtCvD`Mf^3`Jy&vEPsx08Y|8tOF*~={u4+iG zo}kuht~%xV4*bas7VS}C8jjZdyzS&W!?y?IETipNlz$uiwAL7863i&9oU`FhrI@#R zLHUJ;s%+n0QM27y;%HvWDhcq-3$AgKYnlz?0L|f%V{dq6^=Py-q_Do)>orFYUGOBN zWj9~D!`$vfcI%GT9nsYgz#j-(U@7{n@8H@#YwDICu0|)1DI$-H_mL{*48iU!qjQ$) zq20Q#0V$8&&CB^M6Y+#vlkiR)RZ2IWXVnPi%BOxLCg(jlQ)E=1Rf*gKgW_K2SpX)j z%MQ(bizd03_UqOhtI?3_`N}5qfq6cb>}qT-YSuu0|I?Px8mHD^HL1^l9`JvfLz^{_2Xyic#LCfU={eV z|F&T)%J-CGI7tWA)+QF7Q_@;GixpErtIt)^ob@`m2W8dd3y_ftu zp%eceC^&-_o>p02oFAkwc4^NqQ=_>PvE>O&QAV_MULxMz1|GEMhwKicRiv$~IQD7v zOwOSz_R!ZzuAF1$Kjda;r{GVDDenw{=6pJ|kn>Oe8 zZsFSft^P1~i!wUzrWSpiSLuaoQRJR9V@X3rV%^K1J> z@%O_9R8KNUkF!+M>IY+LH&xo_glpX(4Cy=1Ueq3yocrsdN)hm{=w|6x zj{S^z+w+CqYbV~}TMCU%y`lw|Q-t)?eHfv4-a5Ws%dY)YGK+A<;A3(?K8%s^s%dnZO$v; zz-Nn(+nX`)H-_fu%RU2bAPyeM^s)SXq?uWN4kE>OoyBsZL`CZLaKYt@czpAFNQ>4B(Pi z(yvvoW^1`t_RvCGnd9P8WAxpVWM?+NX|(Ypd|wn1^?jLmf?h=2Ew8Ma9y)1*lH1h8 zzf;eIo_1w4Qcf#-tWDqK+RG)D>!Y6Sw_gReOsF$0`)r=&Zls_@+(FwGkt3C+h}Y@1 zvxvZ|y6A;I;Na;C;+0$Yt-UD4qX|j~BDCiFUIE077%)CP!Vr z0LC93+tO>DQavFs0{)0&)8f-c>EdpPIl%3pCebl7ggyJ3@7WoDI58vGe%v_5hIR+WiBuzQSOlbcAEAry zCsf)v?oRQge-)RQ8K^DkB%~Lg>$LxkTfu647@X-Eu3kj8Sr0|1khyYg_S$>BI}LC& zX8eai4HKUT4{;R0HfwOLxwMydHLk3`_cn1F4F{ONJ3*)h97< zfGFgLv68z^TSb4zk||b~K!1x9S4G0M67+!&)~2RhuM*?6rrK|N#nnu#Ymb)whQ!kI z(z3_`xGN;C3jbF2Zg$(`!P>qjyB(s!Sr?Sn+%2vsb&)pTSohrG4mH-h8G#Uzg41{^ zz~mes;UE!N$2f8t@T+kKA8L2HHNyqkJr%Q+vdflwMy*Y*U)jGY%>QM2Q*=%%*1r3Y zfHAnXmr7m#p}UjAs_BMio89qTj{MVxGq-7E?rc@3Wz)J?(tAbfU+@Sn(?0?CD(BxA z;rAEPe*1QopVbM8dSp8S=o+1V0 zybLhzoR;Ka2ctA3aJ-=g+ljZ%J+!AtiJM}PwBT+~0NeZR(MuACD(D=cr<>;(a4d!z zbQ!}qHkfTok2d9JNNR)Fs^N(6$?O;_^zvm3lRW!#gNqvWQq=N7z!{;x>)Rf0=)|3E z%3qcNlGIfRwl~=v`@wNl6ovH^D7T`jTxuiicRi@6HMK)(&)LC6F9v54&X#LBk+D9_ zKd5lrtOV{NBWYN1mlPC*FQ#ucNhcajmUU`rb*l=X5Y}1^i~iD9VuIb1W z@BdH#(6i!S4+Q`qObGyh|6kI!jwViaE{;YfPX7Y8HJV;=TkQzHdwGE|4)xwIm0f99 zE%co>bQX#r;z>fR6!Vy&f?CZp)zpxM-CeT>yS~X(Arg$F6Ek=O@WNZXPdRKtF$x{oa=%R&jpR@#<-HRwk4|#j&Oso{p?yt2X8qz&t zn(ROf?Dl$mT<*+NwfmN1%qhJ-es{&;?RLLEKYWK_c|$lC$*5dwBwEA16d+0r9`{mL zVjfG;ix6j2i;OU_U}glQC>!c*={45xH5zt-PTl+~!Ld8Jd6l1<{`pq}uZSmg;Om`I z^254FIii~6C$3`V_;P7LBgwo2T_i2lczTs1p43PwsjxDJu@%W#5H=A>#b8AD@Yg(; zGjOf8rjcR3r^HMl@!0#{xfUxzZ~$8AB1D7cHEOK|sWZ^Ibt5$EfUgiwpgodofD=Rs zv!pSP4gblT6&p{BgmG6rZIn$EkFaJkDxYPUWFdY}!1A0fF2u+J`|C6kzv8z#q=|!3gBHPKx)fSAejl@Q*S7s zs1YZ95~Yc2LyYIrst$(GOhb%9Tjk=pWpORig-U*EKPmJ4K86 zeNkpsIx{*(g@>1P{5##D559ZcbSWmi1a*X+G@33k9gUCxkwUZJLHNPy$y z$2X)g>rPOAIV3eV>7^hvYsyp56!w$-C-3CCsILdR)BbFDZ<~MAwfFAW;DX^9pb4NCMb}okcjoKv@uXXF(#1 zJdVFSj*&@cds*ZF*%8DP#YIoc0GScYt+g|8=zn^T>320RV9?Rd29&i3958L!fkz%j zdfkm)fOxJ|r1IAb3W8(HfdFZGp!H^}TKz%VEK!eF=j~EeE-F@Vdr1OOXV=EeQ(8c> zxz!Qa)vGy9T;;KfUCCT%6V#RU{ByAyB{>*i7Ghi=#b!U}DjL;C%p=FxK%=q2#6r4< zAUGr;5WNRg=C7IzZmhI7fQYtfH(06%Zy)z2dNHC5soO_@chxAdLYR46xrv%>8=O zz>Y-WI1#6UYXa-7U9V$#!NO$7z$;OYTwjjzPKgy*aaIHUGXFpE2o1LNG5FO& zz35%35>*e;fR;m~fib`C9A!B$s0^3LDAw%uVWB%}K?mEn{|xvCkmJP3+*R^|6U35z z>Eb2@hREd%OBQ@NRveaU*p0}g0jrHi^`{(GGbK1Wfl+EneA2S`Y%<47$>@c+sl=d$ zDuR-MVUrf(=s|<=sS7978tQ$6F9(Bm5lu?q5q#=uQLmXJgI`=$9Wa(wG_Fu^aJL}Q z^w8U;*&u9<+$y1hqxp_D>PTh;9eqFRBrGfvb{XjI$SzzBwdx+?@X0#kwB!~dF4sut z5I3lgyufq(9XJtjP>a+J4;u9c<^>XdEIq5fmLxRoHmHbyBwI3@4T~(&dj^5Bw-Hu= z(`K%*s(CGzGpAV=lOnU+!N3aPNNpjZxwPw)1Kl)Kx1*Rhodu&zqgk)r*3>-;Y~(A6 zkvI{9*0Itfy90LA0%k*+dsMlNy{n+oPW&KuL8# ziyBnLLl$1h$X5M995zu9OaEZVG;Q#D+|lY+Z&uSmBVU0n~fFU#vLeC!EKreP>!--Z)MM{v!Z-unq`{s z2W1%UBir02dg>~*$|iaODdsc^(v_Z+Qi^;k8Fw!?s9iWxx`r^a`Z**uLm#Qpe(mE!V!*W)@x<+QS>_~i2rG1VH`N6VE!rC;GP6Qo zW*Iw{Gs-)aSF1X#8c(XhN1}RlP`e%4R0`sj9nF!$c*_dYxOamch5b(Rw;*LU1myk8 z+LU^a-^(y+dPuXPTk`hl(AiOXc`{Nf!^BUrx0vu5@M!s!m#YL!N%XmlqI_(O=rCsN zaWv{%?XuMv6MiC z*WiRnF@3XbW+s4eqqFI?1w9Lcq`TbimTr#G8~S#)FLdaorpL3{miFYTyxQ}b5Mi(8 znB|3iV76~!FN^QglCFm?szWL`Z45c`87KZ)K0WXgwLw~nYY=ygV?Mew(I=KOYel(h z2iO<;oc+etuk-aA2=2K4aYupaJ$45&pIy@f@voW$>-qR}#k*A5FbF-JdDEvdE4ojc z2ek2EX3fJF0(=%C9q%}Ku0u}&BaU}G-Vm#w&I{~iRXH??@5;B8mS3`fu}c`jg7!oa<}_zES$&` zwbSjVL@#k8b*pl#ClPPR-ZaD7`Kc(*S7$++@>4^$L5t{xYedGU(c=qV|GysPW)HM- zr~I&XlkkKSpmqXRTd^#RY#N5s?Er)-XG^vgR;O!8Tt_+{bF{QJaVn4QxX)YLrUT}% zB|4yA@c+46N3hj)3Wf#%&?E)`fcyWbeMdtFb33R1()wK1|G8ZE>kK7?%c~GBG%PO5 za%k-wn>e<)VQ&cT{bp-=$YOD^p8DQoEy_t*vz+h`y?BG9D5h6fT`% zl+fLg$d#Mr{4`6ZUaiM_Vw#X?i^00Vos(G3h>hOr;iwZ+Vbz7lajDy9Ls){;2(HS?8)0j*?#*l@Eg87Tf7A*Cw=B9f)Zr@ro?7 z7Sy3=3?TEBR<}=b>$t2lcTm+mbzrqRESL8Z&i4Y~Ni+~pF)r1WXjVT%#GnR*4gABT z&1mFTB`oTQ1%6G>&&^-#7|Hm^-_uK`lOF$`Qy>`UaoC;2#_y9dhck9`NSE&@X!kBm z_-$97b&B*}+F`nphH_{g`<45GW{~W(jrirz4ty=Y`>AdSH;tKz=m*jb*RLjQ2|Rzz zurB?b8CkOMh|u(rE`slU9~{Y&yaD@<+)$Qvu+|_WI*6z(tm^LQ(m|3nd8gI@%QB?i?5fj zqq7JAfDlj4C^f}P`PtN|F?K9}IoZ-ogeJoa92ayiG5FVS=>{^w9m-~>T~%E(6WY>z z0BVTF<>}DU+$EU@gA>yn-mz0Yx_5f9+m_!SdVpe~qt85EZ%>(8kOAA^r`K;|#97bw z-AiY=MZb+x3_Pm#tlID=Htp2rh6y3|ubH`vXv!U+d|9wNkU@LzF;7@0Q~_!7Z-+ z1R-cI7?WWC=yXSxLp{?zm65zp`JhHUbiRo9l`_*l5=ju?7U+8gENICsyim#U#!))j zB#-hQRC0zmPdx;_WJ9>cR-hN&zX?>(PTcx3f{S)OI5liHTrz!q!)E6LnQ}rxBmh-) z5lGduo6MqB#G4@@%K)&(_yFJ`Ya-%p{|e$T!ia4ohyIQBY?1f`hX5$Gwu0`nz;TkQ zh~UFS$kghe(BD{heO@r)?#C+o7t6VuN{4J?rQ^`9-unqOiRww$Ii^tYH~hS(2Gnze zf~#06%0Ob2WJOLBt>r#JkPxSO+xAE30~>&~i_@hPccf@)Wk_mEPDN{f9iC*%crmQ+5q@|DRke7)^Yt(!!VL;^HEYoP z%t?MvTsylRP!SXWVcfdL=40NpmHu)c@p5F(1km>1epQPRwRYv`dM`hL$l-ngqbt?I zO$N)A)UZ$Xv*Oo6VyiWXVfaY)>-}&|u~*=_$y@T+#O;P;{sDuH-^)Bun(WD7&*yWs%9W#a{uYODs>YPlpjV1cFl>JJJ{S4w)yQjXe6 zhv&Lvj4bFg#)?XS5JB3Xsywrj72%IXHs^JeJ6}m9{c|KtTue5<=wrNLbci4iI`kWvDtanWm+lM)iY#4$y8Wy}L5mSyGXZC%LFAfp#fh#OEE zgbrz#Jd2Q5M@S0%7tgswdR|0?33p)Q5yFePlPLBPHHiH&5kp|{^U@``4x64CL8>2n zz=KKZF)9@QWLXeDG#QVpZh&Fj1XKR_gg)Jo*4RvzWDEZ<9r9RxT6V6s%no?7HqZc*+0jQK)A(@p zs%Kg5!l3pVt3HW9l%z;lqYw{hEAxkE zmnEz*O1z&Je;rQ&`jn4RIKBf%RG;{8{-t@6)CQz#LV}7KPza#EN0@lZZ8a2N6G6`l z#J^y3=-2_%zxe+hLSU*p5IQ@F1!5rnXar2!gSq9F3EaJ)U@ARP)}Q?M9H^>zc8;N! zEyx&?3}zlu!k6WVQvew8XCh<~3yKv_27wHtc@B=ObXMM*m>q7z&DRuL}I#b&(uJ&mUI3wZBp`B>zcfM-ID2kRN_?f zI&!VISr4K*&)6(d;; zg%PjlxCU+-!;}M;ii6nCr@U3W!Qwc|mK*E{JTdNsD~(T?C#YYolk~G`!x=P+RW3w( z`^W>Z9};*>JExTpg;nz&t%XQ@AXj89B#5QiM;NiBan9XEmSM%Myy7m;chyKli5_8_ zKd8i-ceC9T70-XT>07L!#a`AryCiP(;-rz@URfb360Lh8!#V2~Y`57EKnA0oDUjJH zg__bVUbhTh`^d%UGV{F4o53}8bqGL~I6(uOpd0v=>Bm4pXaDGYE|+|mZEuqkcU^1n zU6dIMkWefZ>J5|CL#2BnDA1Ki~?y!<~ zmK*Qf2_G9U%|JUs@GfZZP3OTzBRVWga+SME$ zoXEsW<`1cajR+Kh=;zf>GZp>?0AgZGVtDK)c~VD7gPVqC+K6KHp^CS!E6Ts#o z12;q>Y9Jap(AiCaQ+5p-Vh*LV0t2ZARQ&oDRetj5B6oO44~49lp_by0YP7+nabH~$ zrh6W25Q0t7NLT`B#LC7YQlma_>@_V4D?+;L7wJG4#jGM`^XHiq;K%RSh^|Y$0`>xA z{dzzioFF8JFe1U;bqV~$*b^z8{<4h4p+>!8ha}=)virp53X_0*PoW5MuMZM!4qk#% zBz93Nsc~NhZ+4q@v z|AA37Zqk-f7YGjWf!&KOOfmNOr(`mnQ`oB1KfA){+;R}na@P9ikT+chYtvupUvBox zfh9FXJVTgIAYm>%azZQJt3I2Z)nDOdJMVINU2lU!MG^3-A3|M>Eu^R|YT2tE*hVxw zmS{#t18w<}i#x#nD`$&}qqWwX-^MEMR;1v&&;;!}Y$p;S- zE$`(5CIU+VfT&PbDMPPUp*dM}Zq(y<9rrI934KM|dXOs;8I{83`TspJG?Z@L4B+zm zp`0q-*#Unay6->hvqcibd{D|wa9XIF1O|(`X%MHX{nq>;s0zSUHmAokTK!-p8*8et z1ZT<>CV?!`)l7%_2&w<}eqPGGA}o_ERgRx$j)Tgz{7a$yvT?P6w-^ZA0)pAIo>ZH8 z-?~T)^+tTu9!5@%uaiq`4Zf-tU+XGfZy)=&4ER|#_L3_8K(Sn7WMto{9~UV)y&$5- zkUxny&mql%T|KXFwjM54-ebAE+)QLFP3)oL6GW{jfKdJE8VE~nRI3%UhgtTLlODjZ zimoQ;%du~A8V5V1nRZB*ZX2`Tg8|9q9D(bW#XC zL2N6P-Nky? zCCb`-*d@w(%ZuLNT6T0Ed#sP8abhgf4`c;R%Ow!{ZrQ9b_L3I)B@5}hoS|}oZy9fHoIw8vat>LQ{w^-V>VomMQOt4 z-uTG^tf+GBY*-&ih19&MN@uK3VI_*ODoBga69&sQ8?aNHamQ+1VZn~1>NNzbk%&sM z@&$dx3!~tmZm{MXvgn(M(dEeG^Q(D}un^Ngf1p)bX-eXuCORKtC7wk2S=kRkp!H(_By7>b$g; z(*8X_MLuUKl6L%i5z^3=w>>3$Vytl=7F0(w03d;Fw3DcX`LcE7IO2)#8jvwHW)+5G zlZ~!uwWEuyqN<1IZ(mo>v^tO25R6G2WiNjbJYuyQ-I(Bhp;fTHa^YpxZ2iujd9Zul zmY_}}d7_rRTYBO<h8Gx^PZ3KK`= zC&AwlA%w4+$3zPJSIn9wQa9rRm#o-<{?%Er?x@~&c~e9eI?lsm1!`_n+4ot<%4Oxu z2*Iesa5HwkReX`@a+Un@TWt2M;4Ydrw80rCxzK>R1)dI(j3uYFszH8HrJw>&MSZsU;VBpVRo`zVOl`02yNUz& z>U)c_<@=bDQyz-D@RPR2hUY+kQEQ$=6u_TVXIKJ4IUHZFDesN-+Y@!P?l%R!yMkyJ zbPuyAY<4S2hz|wPgg;!A*|#OOxf~0HWb;wDVjfha3OBYQ9wytUMDGkb_d5sdS+cozR>V=r(Q^c!$BnS z$(JNuDyv`gH~_a)Af(B7`1l;F$nQSK_VnAI%2ou;IQE^J^sZngO^;*f+X-=#XNSTp z(VQq@4~@dn9E_6&o{i3A{vjr#OmR*C^fn3ZHkZK}FLY5Z4X(a!gZ`_rYYZ&o^9$S9 z-JnoSu6xTrxCy{~*RR{_>@N{@t$dMWrQ3ad-d}1WvBG9PXd=X#I+vPQRir-(n5q5V zKM-q*oYxEhZx0P7CL@~-6sP~V`e!$A!|QD+%YmQ5`EMZpQ0fUjx$pu$8w^k78*GVdVJn&qb2xe0$}Y* zxS4v#G?22v#ROw}^a3k(($#8#=i(Jp-%me^%GjuFsH}a^Nf5?CFGkL_HJh$m1e^{- z*LsnBE?sNlHix=K3M%U4QlJ5|oSZGDElH1y2i!<_=p@xRb_2H7F7Q1T=&vXVeNQrj zv%~U$Zv*g9XU9X!P_;$Ht~({*{Anc#s-WEM99adm>nV{X$$-yAV}4}ZXcDZ*s>V}R zBKN@8O3Qi;qr8r(mdD;DDqN<;RqSvdMqSSP$M+3(Gvrb=5Dyh_xiHSVgE}OAj3n8W z0_5HiC*vw1kVU<3mLy5Z)$Zm4^l7OUff_5(bZ7MH?+dZwr+95WZ^oKISM&zQHO9#y zrX>(!RYQ^3H}HjvsH@^CHE8{O?}mbLK02-K(R~YH0&Ia_Wlfaxn=WLd&o9Dcl-WcU zDzwvYk7*Rp28J-EH6a*p`Q4ILmC3XQ=+gSIjBxos7L>r8@v@ELXEGs^F=F{x?RV)k z>+AdB%1qvho0|&DOeL1}Ziz!vFY0MqCRViiwD^m&--7Fv6qbh8Rp?vdu?C9sx6Wew zikN+^%v>dJX-9U4(`3fw(U*(Tr6o`S!MQHkmjZGNTtf6rNjp&qjJ&qk+#far5%d9-cOY!&f1+;P$QQ9-L+L zhs?0L{HexJWXg=!$6ttkuBemtH=zB)b_;i3@l4PAK>#_kyYw0iKt!D{xz3_Fie8ha zN7EZKM+oj^ZH2Vm;Pny1ip18hNzk5){@n<4-NB3sj1|Xx<#euM{tlS4!%CIi)IAye~bta@si79SCC zu_jO>;tjkpEV6$N+37G9lB0_gkN#wk$9$z2Mk6aS!KUh`%ZZiCCd&>B)$C05NW9<_ z6Dv)hptHbDjr>d3namqPv*MmJPN{AFccEvFb=cHs5k=f#9Sy*Kq< zl}iRrUem17Wrm4><8~L?Qn=BAmW$A7!X1vLX#&M#!6s;UhkR|kT($Ju22iOGz`hVr zZE^)KqTV)Is%0{01__Wkj{K$;H7xJgd+0@xNWACL8zoWCpua{goDASg0nD<@>lhoS zc?Kn>a*m5^Q$gMuO4xRDsECfWjZS)gje-=bFp)53v&HC5LWuMjB{6#l4h_fy`Nd7U z_c!X2-eRw6yhG-&^{RcZD(1&7A*_?`sysK9a=Y6Nga|=KpPo{#eBrw}GuQNj;&A!@ zcF=<)+>tK2{#oZffd2=V^538YCq@PuV>jcgZci_z$Ht(fFemv1 zVYN+pB9hLrf|g_i7-D1Z)y*^M;y^8}y}P%M-#2@w*9X?y%#%{4ULUZu-KcpTn#nTJ&qa=w#Lnl8k}3Z z(2t7-PPEx860cL{wEf-ea$MIC{XbqCvE)DDx(zkBtfSQQ#r7vx zz1!JRmq$}2h$U1pmwu_am*(`OT32_g#&UqU)7Ysa>1Un~GdRqM^CmY;fZtltAYpao zo);p&DyJE3?QeFa;g>Hy!1RAfY;;LRxji!uNq&$sc&XDuUSXFW;TCyAdPTZi10i1T z@i0&ZS~Nlj{}G34$~B!+-Oxt2xd+WYneSW;*szl>J4C<_Rkr;wq&a4&7KiQPEiYD9 zwt;7tRLmG%u~ZI_*jAaHUu%AN0A$ddFcEsdY5Y6y@mlYGe_wx3b{(FT4#_EJ?Kv|_ zX!fvcDQ|q*b54m|*Q{U75~#5+ZkL<u4l8cfN%B;nTTa+ZGPFWCY*(hv#$ve8q+xvdu zG&h$((T|myynXqX=1P18u3?+S6>hInaLr@8q2j01lV_BGPWwn- zm|ptxxcS;6jdB;ZscZcDm5hf%Cm)yoaUEFKu$8|+21w`2yFKdzq_p#zJ2L)dPC4wd zK%<1Zr%>hoj*gedI8<4C2P(zGD8{V!KV5hVBq@blf zn4Bz!z>|}>FnJs~&}98{PoN}u?I4uZJ&+jRS2+hG%yFzgNx$x0F}95(6=*;S_?F)9 zunxN}HiTg@EG{W*8rRtnV2<>4o65Vd)~&N(xrWZ$a^MYkW^9gW?jKw5jqtk7Wb&PYY&sUDo%wstb}^0i0rhF8BOQ@HCBnLfp?~dOq#CO49NwM?KB<$Z9~Re@YU-sD5zwxzSMnuxoDEbb za?a`%KzJ4cEqcHLnugVA{wgKA8;ed-C_`O|}7n;-W3+(6Y+m_PtX_eDXXP;Wyxb(||0fUfa z9AF-(S#I>27Qo5=yuIw)8ft~l2rwn+Biz5FO!h@t=m^#pmW~5g`l|x8N)z&xTNchL z_s+gUDLi0o6qTwga)SDG1P(6<^klUpYh&~tt5)dy`nFPjrp=T#@w+QuR_|(oLL*|$ zpI=t8ED=$=gKhp*wD_qaP+V4|J+9<^Z?eW%0f+XO8Z3Ko>Wf01j(lbV?~~~W8B=zt z;B@t>W*pE9^XtS+-zYb0*ql+XB{EW0h#7XM%BG!uUORfRFZy>?8-S}e_`xp(F#Igp z7LF)&keNwUlS7mAvg}9YRZcJA=ETa|3L%GV1ajNoGay9moyAr7Xk3-vWV@U2R+;D- z8`0&EMkc0844g5X+usQ&`&l<2Jbk4LC~KRe!`SVz$c)_^qH(ZuoH40N&ygk4Ef9e;|$)ZbDjA2n$@c(x6AXNDDA{m(ahq*h(FU!I3tYeRX zm+XdTwMRws)S4$J@Ba%(JbRr%C zWJmP{feg7Ara^((D75s#%TCP|KaK4(=cl&7>p z-ktJ2O)5sY*U|w5Vm1S<8&Uo7s$pmm_er7Vmf}zTam&3>@PmY?k2g zdT!+O5A5p3@!z@v-2$N=t2X;WGKEje;-*><)YhcrER|5@Lv`O#s=X5;lFNy1{$Tf7 zzUN!km~vQxL4kqtA8o8(-klb!;8wIa4keXEc}#@R+t?L`xFLLEDZ_3#hpO8DGJ<`C zbj-r^P-d_P`BNw;sas)_sQ{y)_$(o4^~V$j1#7NeBL}6UT_uN6xd{yVz`VcQVMwEW zYS5;RTcv(`t-vyb3Ou9Mg^e)(Pz;F%d@%*cQzgWhYGhuq zyyyH%Ewk0xXz<-?e#MSQa!PH_s`8V=MnzVz1$Qb%c74R4MZ%YDDH^zpIGd8=@Dc2t z?+PfU-atu-{}^cA8|;y)fXnx0rL$IiKnkDT^{~6eh;v7w>#5fvfl9E8N&O?C5#6|*>duNm(y!s{4rLbr56&5&nv2Jnb0@tO z&s5c{KBU<<*Mc|NLRY{KP=*d&#cwIEZsC%Y#7I{o9vnLVcO{+>_5je?yNCv2334dU z0}}#g*8FO6I@|fHI2R5n#Li$T#z8??D+vS zT`>G!3A;4R4#O|k_JO(?C)hXYIxQ*Wl6fG9EpBKXN_m}K*|8n~|>tk?5L zLgCsZZopBiK`&4OXQMrn_zB~DnkB;;WQ*S@oRBx<6J%(~Qm&H_-vm2vFoWL1m@%%H z?J=MG!J6Y-X^hyHzF(YG(OIDIJ>*=aQO=K7)b|Mk6TaJ6`t*pL3|&>58)q6vGqFs$ zU%J9s0IudBzR4e04GBl#2p2= z2VOp4a*>L*P2^+q4C|2m9P)q;Zf9#{%MeY#T1^B{^$LEqfMPs?T!kRx82)j+t+X_v z#a{|@YmF}xy@Lq zo=mdZB8HJuuE`Hsw0s>@H6U8PM`S`zmJ^Uho4S!>u|zgB)=+6I>0_o*2mGL3z#`T% zT74pUay2aw?z)Uq-U^2@*48*6k%RKh^v2HEA)^9 z+RRxT7f|9NIXh5dfr>sF+HybwUGK^|vB;rgTz+sjsvPM_U`ku7r0?uq-RKE2@1-NT zQQ(&W>WS1~mi2(n+pfaWmfY^FawLX@ut1OHbZ|y8SoQJ3W}YQ`?i0cta!V5;mH-!T z%5_G9g}FvU@xA8~lxCUsSJxR+6WM72Do!ve4$4agjk!EyGsJ~6%%!tZltMQg3iGHa zcr<@d7U3dP5cjya&Qjb5$Exq{X{uyAI6HZ+wi?7=dj?IfzoVc`Rhhm#)8M1Rm6)K1 zf22zJQ?vt-)d`ElRY9zmiOp+g07u4N7#0b~fVQ52qLx_s@cZgw7GReH-D*;u1qhO_ zS`*^|Sl~jBCMwQ&YV-inw(U#tP9L@`#&YZ7Q?(AyXHq_3nvF?)AT_wJS{SP4XM`i? zf09YSt9guBd<MqmE!xNX2msaTn`xAXBBS#zxd99SNz_WN7-)d2_T zaxZ0xDOTqPG=OG#==?ZHJf@ykFaulj?5q=N02Zsa!!_)#x!J%Pt-ZNK|5d;-#!Gh8 z5;O;1kd-pz%!k{sqKb?bLGhHElmE=pc2>j!zX@tsjaA*Hv9RO;S84XfnEZqrWu|Gi z$A6|cRCkc{mz_lR?+_Hq${MT2`zv~dJ7OcyZ(vEax(_&HEx4#K%a9hRabs1JsUQJ* z!n$L=$YQA>&&ZU7(43^`!hIV;;7;i#{@qQ@TzsvAb9tmZwgTUTe(TegA zbEtVs*7S@!01IkAwL%`##%stk|_qojXFhHA2LO!1Qa}YMf13ux_%|HE$xe=u|{oto)4V)-cF2=SCl3s5Q1eacEr^Ukt zSlYMt8*rKc<#R1YkyJgjAswykPiNoLZmwUqXm2HaYtF7;(@D@pmPjkC=5gKgQy(DLUn6o2NQm|y#nbZcToow=w7kBCFqtLR3xBB&XX8jL0sJ(YA6Xu z_|rjYiNYa+f0|xEtse=KH8JyvI***EWmoBCR8H1G)Ii683tP;p*{mu@O>rKa` zUGVS;Yyjf>Q*}r1@?REspsHQ!uNI!x)+v)gW4{lYXT^Bc$p;iySFXb4?dTG&vUzFW zfB+bLd&H>*z8MAm$zA)7Ge?)D^yQ$&9^JQoJpBGz?bwu>B)#A6sKc5qBj#zwWzq;9 z&~YDQ?_P~vltE!QQ)Sm}90zY!QknHw#>m68$Jk4T72yP#!q_$D{@W`V=`VuixNuo|S>+mE>9c98}NmXPQKxYP_9Ao@m za^B^5-bOvqhSf)Lyvfzj&VZ&Vyb)@=`2>d>1Y#Cx)#HOC>(BQjEm>n|i?n-}gF&qY zR#$!H$GVEqWQwKfOLtQ|i+}&P`-e59Vg~9WhY_7p_qw8prkQ`FsPfbAt7b>F!HS=p zVV2YOu}~%EhU^nTx*_OFrb4*^6A`SO)J@hB^24sUcjc-9MIs*VoF3O?0}OB zre!A?^BbvFwLy+O9v~+amaulK3%%$S!PQ9=(&mJU#D!y@7raCHULkL^k=E(i0o(;w z`*n{2){D;980IJKd#wn$$(Q{a2kY?6RK7sl(D9w3-Wt&43D}II^2&arElX{L+@K2U zxj!zCxLZr>WtPJ!lXlnOzZ6!ftgY~f`+0q+k#pCqwFB3syhX;W%hs@} zYRPmOztu`PkY*)8=sun0x{$d;p-`DfBOc`_E@Jr|Sr?-y&D3p1;1lU7t3sD{YSwAZ zSWXTb{HBc<(LUcUT8g!2wf5NR<2gLpNMk(KED6$+p4h8!#JJQ6)^}nh0J);D>eTwjuk1T__AMrJ* z#lGY%EUO>q=7NiBG~98)A*bW$kgUJqEsl|7%FobF2Zl(mvVlWLPNtAwbVAcL0bUUL zGNPw;Pl%?X(u-aXn`%r0T+M)_0&ac^PIh7-<0rSjnU~AmXHSCFA(BW;@x(%Mqi~yi zNg_<7HCxQr6s3WitK znA{W?mo(j)3(sODlwD^Dpqq{bld#)~=#OYin0(`R8qG?Y0fiN>yD1Rd3}7?CveeL>l!Y$Lx#S9}0EeYKyF8<6$}-YEbWfMPhM_v!^Pof( zYX}QL4(v;8EuOWseOAuf0FQhBA%2~ZCyLqT3Nu7vC{YSbzXfuZ^5S^77SiGr%*58M z5kNV`Lglr=F%BE*>`){`gthl2Ysg;+Sa9_~CMQFmOHjFM+n zRgSy#&>eHg)B89bO_{x}1YR4_;_s1hk*6tuAwruzba~u9oS|l=B%Go2RASaEeq{Rr z-W+FrPWN!&UbUQ4G0fQ}oh_TJ#=g{m0WkC1ooz9eBjcZl4-R$D5qvSyh=)mcfIs0P zr^&xcvaud!^+C1T7#7NbCtuAaJ*vG{9=lN!beVOse~l*3|=OxZ&V3OYM%$5V_3V z1#G;gmc4rQtz5B8U+>+f7~sU6Ftpz|yGFdu?1{eh~QF*pyg;wTUFMSC3Q^`)w>Mts}F(V*Wn56 zV$w$<2WeL!rJRUwGydTl#>}jkGG)TY!TpyQoD*RjyAnfNfonzIr7Jdkz_Thw4R5)U zbB=p`5d|80Co?B8J4w!>@JD4+p7H4V zSVNyOP4D0xsU6t=CQ=E z`N**6ZYtEE&8EIZ>gof_Oh<0aLOwdmhMzcYop{^qn9P&Hj`fy5rLz9VJuH>;6Oe@G z#66Mi!d+*|9q^Qfys()H@07V)5ASj?d}vT$(vB9H^$RKE&dAZtUq$-B1`a9$FSgAL zj#7F#?AtSzCv;l1-f@V^y^pA59N6SscCBpKmzjh)cYcC=d=V*C%KB0iU2(JU->R#% zgL%J!)~k|fZF;+(U^H*f4m_2e^!OD3QP^vJKqs5cDft}adh6{_^F=7bdacDBe~0=k zh_eP?aUW_ZSx(dEJW&@v)NnLIs2tQ|oF6#`~+?@p=v!j)YL-46*n>KBBROAF~-j{!k zsY--@UP3nCFnpY+s99UZ{Qj5FSKs7LkVMdGT7U^&XYl!-NjtL{6}`@rsUsw)&BSm? zR=&wMklNY7yE1YL?&<|&H3`ZTpaydBvw5(5$2<*r-XB8-n@Z!lsP#b?g|EOsirDRp zbgQ99fT|V*04aHs^m zh5WoH4UAq9i4%aoVJmM1ISiRpGxzli>1&UWFGNmBvF^Wc|A1bG1;$Pa^E>kgg-Z?L zZMm2Fy1sx)71xISieN3FAGTv@QfokLavfI%P7 zd_w&6KNRDGRy8bI)PjyYKRpqZ%A&oPEn?6r*3>yteCwy{{2N1l;uBZqW&u`-NA^Hwb0F5);-wgQmn0u+C~sHuv4VWjjZfa#dOD4QkM*Km3(aYQqCPH8vdKXL;0qHic$ zbciWCZiP06XdVQAB~?f13+S|^YR^f7U9@knM-K~r`pkJU;CRR*)ql9Xp!z8~cQBCR zB^EC;_W6&VS>-u9uhS6O|94Eh80h4Vp2+rXPbg%vIQdF5SR^2uIzMQm(|+gLG+CIa z;B5~C75uqGVbT-zdau20?3WOVAtc}`k`tCJr#nWjs$@fK%!t-dU~WjsibO0127c3D zoKp__Mhg}#mgQ4sOEKLWTr2(BQE!&KDIO#X#liS30b=LTB~c6}Tr@Fi*6ms;x) z$t`;+dUajfjhY*Db;H{Ieb{ZXW!@U8aHuKKDRV`&2B-@FEJ0qS01oq9dl=f=c#Hu$1)8y+ilo5E zG1A(prjjL_yf4#-R(pJe65@g-AiV(sCX*-Cp&?y~G+ZZ_lt8C`%Rt4v31I(#|95t# zoH3Iq-z9D*cntC%%1@ck%3z|OK)%(FadS@uM4@;aUr@MK@XgTD$kJ^hi1Ele`=P)7 znxvV=D)>y#d+3ILhcqXLgBd2#YE#rx+|sA21k6GqVYh=2JR<)LgD6P(EaFBEcn_5p z8NUc=3!Jeg-4u8)skovA4Cmy>nh-p(MX&q3&jRPUkJ)C3HVJ$h!WNB?vWZLWQ-|^5 zH*OAX8mIj2nDmE}E9XithR(MKn8P|I}Wi)>T1>Xgzebaj($H}mA`13 zI{qF{A{WVtkG4G!QPElxo!rMMSf0majXe{qo`A?lZt~a~hLoN?fD8)2?ADby2@lU3 zMq`7?o_X0ZH3JYZgH~xH_C|p4s8dQ%P+tJD<%h$2JU@gH`G#mGhOPkYQ1RlAgLnFe zp%3wCIW%QN%f+06$SRn9FP}v|O2PiJItaOo6dW87saILd`+?_B@G{8rXNkVjXT{Y3 z-abCm;Al3(wj~3|)|9*)Qf`UxDc%Z+^unr|z%~Z1wMr{X+BByGDhY;5O6naf6dyeY zfVg{)uXL_NdCrg_wT^_^XSKuMPcd5Ss3g+W3hz`XD@f_}GfG7bnxq+n{QQvLXXp%V zp2fFRF!LZxm&|OQ99{XwFlF;lt?u;DqFdeM;&BN|m^|QBK$i1=^e+Z1TgQl)Ht&ZN=(LVMi*_~72Cp- zj9IBLNU4~V5&l5^vP8uM#NLtYJ+)6HWc1!b!k!_pW>F z_;>Xbq*2u`#fbZ1NJ)!EMl)!{M1~kwtG7!%=1y6@MUQYA@%$4hm3FTn4%K*-DDmT& zC^KKWZkBmtRHNkX3Q+;6bFI=&H9}tj9$S0wK*c<-k6#%LWg~ex_=WBZ#o5E#2gzf# z{S&9wGs!cZgjmlF(^_#Wysp!7Ste#fWxiQrd}MS2b4%e5nW!8}n?dy>=S zuS{>o&cO1~A;LjtQl3Ten_2IKC%I>yT?4(9ztbOwUuFlLK z+ujbOARsyt)+ zPXrk!K6fsrvH6jlw?eQj9zt+|ZKl&IGHt+NDJcMws#48iB(mH zH!FRLky={}E$64$qAsrv&dvnBmkiQWQ^uX(Fkf7$3hUlim%Vw>^K}z!ZEf-0PxOAm zP+8hW9#B@`-JN^iGNMDplPZR-${H8Xfw)|VO*HO2ui#mJML@Kk_YO&g|0@4QLnj>q zO^Tyb7gWiN-zCzSbE;=lS?(veiaB)4TUcnC(?u8H>Me;cuEvj*8+3YuKS2HjyA9j( zr~r6xs#z}ngqXT*$J^AYWSb5d4(wo$(i?OB zZ7MzUK(F0Tw5xXRA!q6iI%#n)K92GN$Y(Ql1+f`uF~#TZ%4<}SsZyhb@XQPjgk5CU z+D3_+80aq%Jif!6GLuoWRTY>Oz?G};kppON8jw3?aPo~GTw^NxU0i~)&dD|gM(X{`80pqMXg_DTqB^m zem9aO>}?M(;*aWekCh_ubJ#L2c3l$j6~hsC8;C~|VxmGUjZk)9gc9FlU-5e56E}%| zIS~-chu;HGS%{*iJs#414Uyspo>2O6WnT zUN23ll{cAZN%?Y%)yUqE%DxJ-Bpf=-OdaMqguxR?28@efRtZfv(8K*g(>3()eW7U@ zJxHKP)58X#X*4~o5Sp^^;W^|Hpa8P*vhZ$XwpQwU6o70a*cGwQG7LJb5`K6sX!1f+ z1UJJ`BcFgrGd9U=foKP&sDwYhC@O?L1*s}G7qk+KAtIf#^_IJ2>Ig2p9bFe`UrO2D zMLdT?K?wglq_k2Opd^l+g4bSR%3`EgsEr$>Au98O-=qv9U8T`0_i0iZo`Ts7Y|ukc z1w*(2ixirAt$5Z%8nL7EYBZ!UQGV_e(PTHigpLc3*`YaG)0;s3ONS?2dZ>!~2P*NN^Rgt@e*P#0_k2va?qC1bWd6`TY+e+RYS8N^F1?5>)Cwq}w;9Kt(DX}vgV=ACTlv^~I46#&l@B27eNvUqon)>pE1~C2>AKKp zB;H0%bkhy$Zc1sX!mVodz(kxpLx*)T+lO|8+7ZvvQDR0Ybv7OefP$6K;;oL7T=s&@!9ZlOMYy|MHGlpftipD9n`tQs$r*;=9L{(j>6 zrfsOK;M{?SQd&a@@h$G64o5e4p=mWh28&k!^S*^dAW%874Bp@FOHR$P#RJr3b`%U1 zh#E$EbAgzz6QrjZ6bIq8#r<)suy=9)Gx5TN^#V7yF1xmVw3AI1}EbVRF^ei_ZK;oW_BVu8{% znu0=+&FKgsUaeB&pSjiJ_p;NtaNk_4Y~M!wp`Mq|m2674gpmkaa+byqghPm^sHM!P z9!gOXKnjU1u?CndLv3l8Q!L)5(ePD?<8&$2!WG9$N$j0WjamKs;P{Sb-CQfr;lvC% zVh$ab{$51i(E$W8$OmvV0o9+!fkJh7-X#{jfD{w0!K>pr&zs<06iTiJn8{d z!&Fkk!o(>c2@#BW=Oo#RudEcW)gP_W6)KeyA0I5%ajVf=*b^6H|6D#mf=&9aN&-D} zeA8VjO&P-kaZ&=Kr1pDmX1iDFo*toX)U%rkwcWoU(o*%PI5r*1vK&Bw%Fyx6yW-c# zVJbL2O&`8`i!|!SWV@Q0 zY~G3I>(%DeISrVmCKzXVoo?G&fvx=-tEQiwuZjx4tpF?kbf`x%m4Vhf(7ArJFUSu) zr4NS8Ot};f=ySM7QIo4588}8;LSlLn6__>^b|@^p)r1LPmR$V{n4`q0GP8aD3xnm!ZL zh8^Sc1M8f}iD8{p%i9G_rbE;?UG`Jcwlq;#0hhD2u6t|fZ|709z=VRPh*%un{`GlO zblQYH7H8Y~F-6TTPxy&!{2na0l^rC<9^2N1COK+uibx+qcdf%n6_5$a^FY}M>Is^H z9DAb*7v#K<4yhM#up~eGA(NNY-+{;$836r50Rptci$E&~s1WJ4&5gzMG@Hbnh9&8f z>|3{`A=>!Jo@TR{he-vP1cbAjhD^Yhe1_yqXios_O&5oP4l={R*8q)fVOg;Ak+LO&o{2 zUAWD(KA=b^owLci==xBPINqn_?bBITXdFN;5i@-3;2XG3h(OBXfJ)Gi4M1N8&|&*~ zkEzm0DB$z4LylQsR}5_wntp^OyHCoI;!=#uQ}<<~#x9`pAOd8g7Nh3?Z6UOJ zw7kPaIibmin+$FSyhnoqlWu?{8lmBZ6MY``8Tt<%yAijW9=0lLZ6(W@@F%LO!(WA9t9w!}zj?>(oatkllcUl2MT}*9- zy0tFk$x^!?MSr@o&=y{34=b|((e1VBb+t;d+>CqK-;qwMXV^!mGQEth14}HEtS)Es zx*kNo3FmS29SbjMA*EpNyyT~s}cqALE&lG)hL zLg+UAXl6>--_=3`Avcge3I@WIui$G%r^dFW<6uzgPcYoTQfmUx=j=f|6YS=l3#~$v zAG@Le20i;WI*+5bh0s(6iTiN}1BQg!cjh_ya&m-cFOyp^9eEN$*g>jvLR%L|jgpaS zS)f!OCm!}xD{j?R2fS)2jtuRip0YJ&A@mh0plLWdO+pA4$YF#$lb0NV3#~in;KZ|# z-#M4=ww*4xJ0c1&ULvjDUaKxyXs=al?irBmiZl9BicC&_c#4TG2uD}m5{R57O zdJtIoC}Fm2nf@*O_Ju~HHdXD>G@4Tt|F{J!J_*yj+DFL|ZN{Nh43!;?GgmY|O-^W1 zL1Uku%gcU=xmXoTPS|m)d~YX*yPh9GT2wBbfs4e_sNeG4Ppg|pOTO{pL?O^v%%m_V_)UJeAGL*r z*5rHCu2t|7Ab20((-0-34jweZYM^6?3?Hy+NUZx zrE|bq5(Da^ST#tfF3Fc}S0CM{zm0{r(H@rmI&|Y6%*ERAz)i{(rYzF|SkK$(NYiRrxwR+fNlyua1YanEp zpGk+w8B%=|8(KOY$ugnjX{;00#_a=XyXSpczHzraYzCl7gj0xnwvn%gFrfG08&Ca+m-%)*7d zJ`2C{7o3G{?5UB42+(Gu>#y9h+Q%w2UEG`;HU;lEIEsN{~d@|;#v4~SlN`TY+BRu zC@!fjYro=t(m<{mqkys1 zBd{kckq^G@(;>ClONP(~!*T>UA4?2SES0=Yq|H*RrliL+ee8*5NOkl;Nhcs3!z5wB zY%_&IB0jLQiRr`#)lnd01CnvopW!PVw`xk@3{zH!#?Tb3920p$l{-n{@#-x0)zO>yvmAWy@I-*@2CC-?<1o?!&+u zdMVdm0`x*%`k`Ek5S%(2hs91D2I3gGw4B_Ev*pqy^ngytg*)D&!!MAq14lz^8fKh- zhl^8)J9g?r2nXa&W8?@;&8R)nFa&XqN+8MB=S<|Rj8pw=9LL&+I*d_So!gAc>O<40 zES15&7(sK)J!&cPV}Pr68Q8Rsw4*zdqk2)2pMT1y__=sEKYv8LJOO!mM*qdUjInnz zNS|{=s%vz~N#11gsa*6R6PkWNb0o$NtT@HSzJ?rpN?n@kIPQE?$^+pVE`P07J~wW? zwO03+kKau0XF(G=piM^I%HK|>z0nt~Qk zT@g^UqDR`Css#F_cB83Koz(UN(|eN40S(Iwpk@FXGl=n4t8<|4v|Kt1%c-drCj{_` zb?9LNL|c#}|DQZerDz=mf#*>eee?+^`aCko4VHq@`4yEd7=(rfrW*6dFmJd-Me_yFOfu0dxTjAN+S9dd;c}~+x zGQ_{a%RKD{%*Libl9Hjlr{lw(cL!lrtB%HBY;~V(02(yb zpWFtwwIfycNtH7Q;XY}Nf6?mhe4GF}pD+MA2LU<>K$k}axcgIY=cFrJsnsaefE>7` zhs?qbpk@HyMLcrYhckMV#Xg34$8e6;oos(QFw{31QZeKodnTEROBO+nDf&CU;u^-k z8LyOw#dIHcHWN>p=;t-bTaUgvB5DQiw7nh~aDgW2k`rU<{)U~XT3#) zqn-}i?$_<#ANodN@6FTqE*Q~M)2PC2CZ>Wt8^wSdh z^=L`;Yrvwp7Eu2lpNXN+K09U{&=NwZjZ&bYgNNXg&s)3mjadtfh*5v&Gt&{CDS@{D zf!D`gNaho5NsmN(D~`8#F~_-}R&&=~tXk< zG>&vh2Li7`;z6vI&(At;Hx8*u&uP1{$&hw9mG+~6y}-l;)<6b7TcCUP#jCyeFZK|g zM(Wn`T%<)g&xmChqi}&EvemYD%eFLr0E0zMTrBdgQap20$GqVX7T^ho@SA5#RUeaZ za3>RdS{~Cwrs_uQPxq1$YhmkF>ZBL*;N||6I@zZr{l3Nokm79G07hxWrwOEf3_9EH zo0D?3)n?;M%I{Mk!IzAvh7l)I9{EdrVfV{Mz&>>FsrIqe=z?D9Xm>X2u1x~Ghabm% zx}D_hGaC;%I}feBUXG;6<$YRht4rgulyVC^OyROxT$jO%V@vt9>TEh`9dU&{eT^;T z81!M?5wE|tq~Z&qDThw}FlV#SgkkS6l#>-W)Dk_2kQhkylZ|HelM*^pUH{$J3gJdB zNN<^p9nocm+fjH6<;ZY0uf5KwlYFOzYq)btgM6oh)9VMoHg}f$=nN1l?<%KUFu!G~^Uz9t9r-EUtK_oUlk% zc;qjslQ;wF6VF1hR@`RO7Rr4VVOs!wpQz8Zyi*k2v}R>>dlXN~_vn+I-_b+9D*I8U zRDw?St&+3|@ZY*A!0O%T2K^|5QRvhYEx3Twh3g1!=#B>|B&oO(^$aoL(EOKiMK8i- zV7hw+t^`$LrDl}4ZQ{R(t@#pcNw=eegix;_)S0G7dY6i_1BwqquX#YLz2``k)!P`%sKJj@_s%?@!WFEw}YF%i^^q%Xw*} zhkZvgh&~yJ9v@dy&r7+u3jqCbt?@~+WV%7O>1VhtT^4V0fHK@Uc#L-v6%tK$z$j8N zcoTGjXi?oK*b5)%J%M|DmH2>;U%JKW=y|OTcuAgn_SGWt{|#Hu?n4`R4vk=~SZ>Wv z4PhHhPK6ua11Voq9hD0S5cii(tD0Axgv{YPh-uJ~ASp)6o2(`=+poRnXCMC#=H4q{ z{%PSG2RdeeJUl^=HR#eMW+J3y@o4W2e*dC+Fr<$*>-BxKxL~-<+5+~`&^6)rv1=A% zki6q1lW<#1%4ef6bnIkyM{jZ>TTNjQfg!@PsKOwR^D!03 z$8^gb^R$29V%m5tRi6(J{7){Xzv70wm@Z0Xrf3Ch7QBChi|N5P!In8N=wiB`2Cbji(T zr`uL{dN6R8@o!mpNg-dW!v&hk8yW@ZMI*vbY62~aj*5~cI{jM(M<<0>m z2Lv`CLtoi8Gdu$X46GOEr0xv%$Cr$Ay`qgBc`13OHyfiwJu*jEQ!{+*jQ|ShG8@ho zexa#>*0FeXUbx((nyb`>Ene>ia>U>2!)?C<@Y&NUIq-H|4R=J1O4(6A(Oho|J~#5owu^sr!tnr`X3f>(2vXAy{yA@B%8Q&u}JWcf&i-suJmxQCVXUX{*ax_{iKx zqznvl2Zn9qCh}&M@~|1hot!a7Lyor8D(o>WP;%nAq+WK~<%m5KdIsiipw^(2o2V`) z5fB_$p}0>e%TEGBOknrnX^#SqEqOb|j=+lbX&mRppt~D+Cn=J3Q&{QSI7HdyDL}Si zzb+J)reP#fXqx|`Xc$|U6k9<7mvR}WXa3?yGIKo8h(`i8uV1QEbvxhFPf@}QErc#u zF+hY(oV|5XaiKYKG_l1!ARLU82d$OjxN<2+J=A*?hlKq3fU?}KR@v~!5dKY1mBz8B zj!;P(kE9skU7&OPdiBt|OsTLto9ir!8w04Z)9CKo0nIb+j zBUB;0&}8_Mv@FU=%Mv}Ruysk!Gz4}N@cb>jD!B9<2x`_rr)5dg2=odB9Z#USNl*Z@ z=wMf51-WnqTL#VYs2SRre&Bay2Fdotvy_W z(1am9pk%YqgiDa2b}_5LnI)w)@YcAcp`cH#>cYq`QKbr|s%~e8Aiv9zlgn1q-0?!w zZ{cNbwrJa8S-1db9QzSX(B0+Ewzc`;1tyG2gQ0%lQ;Q`lE&=`H-_zXoAnmtf1S@TL zt&^_6@C4LhKpk|gO}CbdxefJNmbkyglC5TJt+^XRufcSjTX7PumhlxLg*-`pNheakej!T zXlmb(zA*MEDKjo%PkUUD6V}b6q42t#n}t0iTn+m>XW;T6+d5j<^M-Ix!Pii`l+C_= z1NjMq5yt;*fwN7rS~}t`Rp?oC9W-g$!Y#L5mj?FU#>}mwRbk6*Inx%R$(MY)VqsB7 zd{l48GeOg>PVpeNd_8^3^WeLw3uV7&RZa(kP63e?`*&1T zseZw_0NV)(sZ<=I{R%Z+1Pzq1!$o;)2=qI|iC-+ft_m_Ig>z-i!R* z4JFLW{{37s_C(uM*64%JnJmg*8y8offMmZxiIDj!u|nZ*XFRh5t9+G;dj9?E2@X9 zcr3p8V@wC`SVBGrEbMkp>-F3Zxls~hG zwxV~pWXP>1IcAc2)VAhM-qMUWJKWxoKesf;%wqbP7XfjW4)+zpK>;;UxLS=6ZaoWa zE}z<^W`NowX3Gyl>%knbnbPC)kMm;vvkob*e^$-Sc6haTu zp+4syg{J%9Y3pbs5@DDk5r+4{b<2}q!?o#{(DYaq$1Qa9DBCgOV99O-6t+Etu2wg8 z&P7M7gNH70v}#T{T2(5cZIHv+oN~1K#iK4x4kOuswp)n8M7P~U&)r1H-9+KtNXb|X z-K-8Cy2#C{yxefJdV~Cx5T1`6Og&p;ze_!vV*gEUR``tE8~btUlR2isbHn+hn-xV! zME@78i*rB-uO7tMO92>Tx06p4KB7<5!8dfDDEc%%6CIPVWwBWX+AD^mWd_GH=JKDgg)ex?I91VRs?gdmc}eJ64Aekx-0f; zK3RWz?Ag?FLF@^5-fEe9y)?PuVG}x6Ma@RuhE(1)05jJ?5Hod%=MX|e*D4)iDMG9g zn#%BgztA)f@81`iuE)EiJ6g@%AT(Wp_Z33ZWL)gtjr?#K^=&wWBg`Z0Ipkrj*N{23 zHH3UuDNa?xIPSv4Z)|)8R(GLZEczPl!qag>Areb~5EuvrSp}W3_K;J}ilj5vE70-c z5^}}@)+sE{Z6D+WjQ=S#4I~|`bWej$a)0Qg_??H13dP<^`btd&Z58Uhxu{ua z!q#E^LQ1FPWP6iyP4=>KgKi`jUL2XmsnO&?`@#QLBxfLC>f=6-1`cwCw==A4KFqtS;ez2^)igL#H4@k`#55{K=K@H5 zmOwDaaL+1i>M+kL%tfA6gl?E;Rl@LKF!@R2y{r~7)l>{0eI<|QXc~{wcJ4Szq&Q-}48e?jRbJcM6NcvV0*BQQ5L;1q+ zt)eM4ES=FO8I1(gP{%54w(eN<^p%EVmChO|$0{U*?pWnMLta(MF{MyuWj77?yUDBS z?S_(K(XWvNQ0dxYDt5)^-&70fH+=e?IBlWiey$9*M7tPv5gt*Ai z;GQLnHffrgh))_i!R#uyg*{OQlN1H6;k zM$lEX=b=}X+c?u`lz64ls7t6;?Y@X=@&S}Y)S;5kQ6s zmj-PMW9;IB3#koN58AbtzcR$G?cA?hny>F4YS%t-v0c000Q*@AjGg(#zZRu!>I?tK zYV8>qVzn+B#JptxKeSqZy+3KS245JA-2RVEw}na5Z8n&0!d|r9JZhB9JOCxQc{5mV zm6Cwwn>{!m(#Idbx}yDd^qcIr;h`+Re#*Y=YaT* zuy?FN?uNQ2vqFA_%5Dm<@g%wp);d2FntnmiEGjMMlmqBcSVB33Z5wn8D;dn>5Ic6GJFN zK_faTyam}^er#5QSkQ(WjCju`RAn;+-}OZ?}OrXGmxZ z^YG9XZwv`-@g=V}JaLn_3`1ME218rCH9WM%0Sav~f3-Bya&9oRMeM(a1hx3dkf0Wi z@p@2$#P!m+T6wd1mNW{KhQXi~vF{n-Ea>Y@{c9?mMeLSjAd9kOAdAvuAd6YaKo&*G zKo(Pzfh@*RAPaJ1Rmpw%)?^@yqlT|B`#p@}%2-#1(QGiDt|RUHwWRTcapo|#97eKe z7H@|?9*mICXBf%i(9lR0#MLU1*a#sIJ}?-_;=o`ai%`3uJT^R(#U~eqvS{Z9DR+ST z=1>;oYmQ<#?KLvCqNz|8)b;Ahe%P<-g2EUqfJ zB$UMgBb3F7q`AOQ%MhBnF_uMhGL{809zeUT z@Zwk&ph04}cMpkU;Y(E(dXarFQMc4KkfnBUAPY+>kcFj{gc?=5cW59B#GjSoBHcoJ z2EAB6Q5PmuZ-49q-1Hm;(&IkKKO}U)&Ca$>yb-FPt?`^5ydwOPZeH#EBl^T5YA~;! z@B4<}6^UWND=db26-@@OSeOc4L7koqUUA3>TtUqr7P!Jc)V$iB3|#T&q^a`)dBMz!i)2@#>F_8^Gptlgz;RGXv?O2d;RypIE%n`+IUgm3IrVzxFU?xP|S~}RVXP>g%G|Ej%{(G{@~K-gJ#x3GP4$fnKjn< z2Bb}zS_EYz|DOqFp$9bhXTdCxAiB*}IPsfovKS(WFOFpq%l`+lEU0>VEQ>pS z_kSmrh2Ad8xW}-tE{$bD4Z4J6XI{EAmIX>9GO_T1y`tiDM`@KRshKK`3eZLzJxWN| zMO%Q4j>aB5i#jOk3!u7FNQ?|2WIFqe>h47WEW!#}UE!O!->WX}_lk@A3;emZy0~rd z_cZ){0)HRCx0G+aT4e{`%y2|v=_Wc?$VuZ_`>#`K_T;BQcfgrF_63JA!ttkj0OFT} z5dA++LSP76KdAxEPuJx!c@U-pU}(wK_$AOQR6Q7@3r*zjsLT1H4~4zfnHT+bW?S5> zwoweSi+($^#e6gVa%MaJa%P+Oy0G`Cu(!GBQ2Yk3552AfCOdkT_LUiqKhi|j`=b7X zbb5UTef?YGb~!SDUj}~(wEE(o0u@4djKHAHZ(dBb%A9I>6YV79uYi7f5EDuy`?_5A z$ROxPPtjIk4OmD2TYe^V#_*pBrC-+_{KaH9|8Al@^&5%knv5~5@eFalnvVX!9<>zr z>hXsRJzlT&5uTuriVK2f5Bte6-KDf25{fk`;R$Nm^#}t(@2W5ueIE9!GF>;@kVjGc zol$9z@!NZJ(7U9nU+mGOezs=|po+&;4Jv@YBj9(SRW}|@w(T71@rhE=wAjZ=a2SQf zvgGeOec=sS7yFt07@d--R3_1n4IG!~u_f~!E6?uwF!SYN_t%*6l@ICPo9R4oP0UgnpTiVTS3a z`)Km$dp6{?V&2x8mDN$N&(EHjqHiOAG5m)r#L3U|;&^Qx&+dWBG}hXB`*5?qQc1^{ zmu1!=Y@l+Db13NQRq_VAMJiNXxupeZ|1nO?E4>VFIi*wamQl*No-s*j>?8WMWef%y znDn&E2+*DMxA(ELhjmX>p=l;gMoaI2v8y)wOY9)3BDU~;JeBHft^2yMnVy>0TJ@iE zrWw-1hmMh`Ig7*Te41p#Uw3gtT(OgsVA6fWU?6$b>N}OCcY=Z}pX0&Qh16hSrMl@3 zc~uDyleMk!9OB>jSCvyYttx$t<04XK>;J{xy8uL0ZU5tYV1QB4!PG+292FJA6vG#e zWY zcIuuRb+7u4TNmAvqAJvP?4EPq5_OOIjy*Q+AyI!;-`C*%hN!JR%6kRgJ4L;U_W*jw zjuE~jGgrqyn(17b=?(yaQ}8l(-Yn%FCsnV3pVWh7B{c=f(-d&alGw5|R&EG);D~pH z&0m8#k^KkJ3fdnK>@w3Cg*IHqZSTt|q_`terFe=^f(9@H4M3A39s5u;0G#R@mr6}_ zQcv~R(nOlt`ksaEj=fwYAYE4m#+C&84{VM7k)d>^6rr*&WB*MX)YD~CTuDJG5tXUV z0M}2h>4AH&7YBEH+1g=|&8*WpyO203xuvfim(-XWU+JsAuW|yma*pKzBT2Ag(lJG=h`_t{DAZ-vJ}MYw$+jbt<4!{P&-s0ZOz={c)lF@zbT34;RBQ)X?8AJrpaHxhlfotML=03B>6G8jz zXFvov+ruJzfdz>JAAFm0`Gj5Y z7@V*x@72?Yo%n$yg*M`@1m}olRMRB-v647C*zW7JH@c=bVh2=8O2vvgsXcBbFyl~5 z6y-XuC;=O)&hw)2u7;}beJZqiW0iGevZUWHF2XaOwGC3D`(8>*MFRUSstLqx!aWL3 zai>B=rQ28DW$lH!Dq4?3oHKqY-%yhk8KH>Qa7DC++iTNYQ9)4lo|+m~oqDLjl$?^9 z>NMBM-P&&3=wzwneQ_y9BfZ_2nu=bH+v_M4dNp*YjZ*v7@;##|iby8zY^T`Odu4g* z>!zS+wjDodtsb8himy^%k3*=qD~D2UG{9P_!_pv_HYIJxr0+~`y+tC08~4~cmQ~x@ z)gRo1D;3<9RFom_W&m#X#t3@@@75Ez)yl`PVFrtLaV2lJu7ZZT2y<;jt+C!7uzfP6 z><%hBYY%ko?$~)EV^zn4I@CIa%JKS7oFkBn*M9y}!-;XunS)AFUA4|R$I9nia?WYk zW8NCf2fnDv*LgY4JTn}e7s zfZ<5)F`Kp|iI=#{L5}0TVb!?itP*<#N^CK4w$M16K}vcO8)+S#xD@`Ry7%g?3Jj=f zz7$*Z>fF~8ZX{rkETd#k$y&!vZeQp0I+wX?ZqUrID%&W68wq+51UV#={i(?5b)wmx za^JAWjEf1h`E`sa}M>SL2pvRtl!QzuNta1O#PvLNx`N2mIWx6MbH%SnpH_qJEdKf zREKL097(6N&kCj1zU@}jZZX)}$^JTbhb=+20Qn_IiYGztc%M5lj_V^GdP019aNZ!j z`UFO^!5GaxOI8=FnJ3E`S5(Lulh~77yGK^GWtS?<`>9EtqE>|gDmA?0lv*Ll2At`w z?6=pr*B(Yyrm^*3WvRo6SwyE;6!-Foqg*4~`jm4?-B@aT0!McA0yApoHCb99a$G&m zXpjBXG;mP==f}mV{^QD3KBXV(xvK@0$5U z+Vjv<_?(b;ClcrG6r0IMN_UF5D1rKJuHEiP5E&*>BiwzNB#nQy29*Zd(yt z(4O3U+*$KT3@;jt7pCy<`XE#!3UI5)0Zw08)$uOxx^RxGAvcB zT5;m^TRWJ22B;Q?I}`*z5F2QG^mpZmFGO1X-Dx-`F6TZ~&0SxLlY=q_QL-#*N4LV`5O<;JFztY z#ea*)Wtr^bewc~{nCJS=a#e@zNv?>E64d7Qmv^w@n91D~)wjX;Rq+=jDu}NyyUMd7 zRui&DcXQIElCO)yb!~;fzWt!8nxM+B14_OrZvS4%ii@mVXYV7V`Spm^%I%uk5}l!$ zBv~mW$udu~Rb@%8FGLBkPJc)k>`v$1AgV~Bc=n@f9~JGk^?XP&jFd{(;M>ebEVGPs zedtAnkRVQNCmOxfO#g**apYfmMhzSkXFS zT&@*?uDC$sd22h@44v<1#tYW=;~kZu#!sx07{s;MZ!HMEl)av6PQL49Bb6jecAU~R zUGUNn@ouu`HW#NwqC$r)8#kFrH;S@>Ubbn3*G=MfGubCu_~^t}A5%z`)VrQ~0*!jn zm)D&z@}()_zOaaoR^iUHNL%z+b+NV>%>ycIXyy|F?AN7RKhNiMG5y z?=Ac zo+*}e^ts!BwnD9P5lTd5rc1o9TCN2S_8`}kK-bj3$SFFzpCGL|Wy)K%H_L7&IBuHLd_?b2pAv{|cZ(yM)@=Tk78OA*s^Q66KIy-&Ep$%RMm9V-vNU6uy3aL0Xn=ChiQthdYFCEyN!n%Cxct{7M%9(;T%DAo zgPo`dqv}$VrG$6I54kyOP+J>)kN%z^b4Wcul~L&R}~tR zXfIXZdRxdEjiU+*Q76d`_S52Go{G&OUWQBaCckuPrSCyUEsxmgsG`BPMzhK$xuP2> z=FO!iY$4Cmn3UPNKn*Lm`M5u*h~~&8tg5;q`jW?X(PL{=Y@X$M`KB0}Mt6&x6J!e- zeFL=F>S);Jhs$tv5tW!OD2wb>MPiXXaz1y<+FF^qAX*R1RxnG|%VA>yORIn+PxoJtiuB{jDlFVxCMyviymG&RDcAft$4 zHH@CCA?aI!7s^aunkA&1SYEHW4Sm$Y`_yx2-pFA2%P1tA$f**C%qZzxP4nFJWn=IW z=S@XBQqwBf4f z%clMz72>i(r9G4?1-C*4MtoF%#&rY|lFV9Hb$uqe?{)2l>3hgMk?ga{1;=~-~LU9}XdD}^9oTK}EzA!{cigWvh3NxMm5pj`~xtwuL503XREW4yHML0|k#p*7FQkc?AI2LPdW6V|?~bE&jc5>GDC7X5#y=6CDP%=? zVp?8CqmMx@vjL7TF!`Rvdp604_w!LCh7ar<+-L7e<=NJ{}_ z-LOVQ6r@Q8yO?y=N!QuMTG-4A%L(+^NsSR7NN+Bd<(SIQIxzHi1<-{MO6?XYDd{#1 z(vqc)WSODDXfaTRtoEld=yrQD6AI6XKTfjs;Jal;EN@Ft#p1d^v3I?Gr|m% zYJ?dieJ#wc(r3a9mJY!jDZM9N4bo0whKOq9OG2fWg*jMyPMG1+lfoP>JuJ+g(w~Jn zT3RE_vC`_rz|h2(n53n`DOM^FW}LK8n2A!lFq5S;VNR1K3v-4vQJAx(al)J@jS^<2 zG*p<`(m-M6Nxg+xC|xH^o1_=!GATfqcS<}@M&UIqI7w&djlYHuDbjbs3a!`D=fb)c z)`P-|&ok1y!iv4K(woBiAgq5E)<CgW15upWc8m#{+0NY@A}zDG#`!ivF_ z)VK)NQ-XeB6{t8 z=zfq~!XpUQ5@GEMt6f-wVa*j*Yzvgqh1CG-G+_;aHC|XlVZB9I2g4d6tl_YR3hQuK zdkHHp{Fbf}*0Hb#2&)O!##~rqVLc?q3+k|yC ztS<=bJXkl1M1tow)9qxN>GC)F2_4k|$$Sj^c$;}QjegSeAy+|=y#{$GFx_uGy0V%E(yYANuqH?sY3ne9GQC0cm{=_e7&QG=I<5pY>iKQ zC~VrP(Lb*Zai5_wqA>%x)981Nzwp|v(Qnd*6#eL`a_lmwJHcJkb*X9i4kat^=_1{| zMqS|e!Y&p#BIJwgwdFqUZ(Kix)vnQ%2l|^z#TE8vDN5(vK1`ajrs+WRZuutl=I5cc zxV*A{rx=2db@`0Z*oP2O1IA=%?ETxHu=T2vg2qJq*t?Ts=P?<+_8=OCJ9cW@pRj-A zqETh_`s*tX9d}e}s_S=(8F26#AEK3#`JM=*NXP1TV%6TZIm?Ar3-b7oTz4b=cPagM z992Hrw zOLNohel^PnGgiMx(9*T4#>erEuj9PVI_T_EJmfF6uVWj)oA7khXsv;cc2{^bE{CTPkhYSv8fp=8S^`Z#v`I`)Xf z_j?kjI`xDVp)`)&K8`&;2=%ll)OtA#RXPydqk(U^cN*W5@iD=Ef?Wh}6TC|B0>Ng` z5WDV#GxnYnWJ+X8WS%1P6q&VT){V&7N6FcZ>?{GS{fWg>j=6M zgua3AS-QFD`>NLiLvOoGz2X9%_AU`B4mE6rZCGQ)oso@79fUO1LC1?{pK7Fh*S?8- z>p!EC9{Z-CSFMxta-D>sPS(F6>I8w;KSB0g1g8krOz`b@sC=TY<3~|?r$y<#?3FZd zQ^GXW)sGZX)Izye$n{>~C{RXUCMYCuyeaCY zCzW+iGK0wsCbKJR0Y+UiV0knRJpqB7qKWi{4Sb+KJ_GtCDSq* zTV5-4$RBjmbjIYh$|ij=h5hr*qFHKWveu?|omq4)(3hlXWuS4l_0*z$fxbz)xyGs@KY06Kt%;8qYgF~FLY?wK z;96eh(NB0p98u~}e5Q=KySEx5r2`H{uf!1;p`9Or_BQZwHDS@#CJ( zm(F$_mgb1vRfRg2zk7@u#h#&X0+d=3? z{J7h12dNwJv&Vcwo)iego#x{am5vq1HTu#|#02cPJs{Ut8vYFDk>(TVn7(=uD(RGiMFW3G;| zWbqZRkx9o^bay2kqXKoM&349i)^YPO_ZQN&kBdXYUMu2Aqc>lgnZl%}b~ zib85x9W@kOH_{ZU)_7LG8heynm%=VoOw>9Wv{rkHbpJqdIYRF&UKh%5j}-a1 zs(q`C)mD8n_9sk!UeV`$ZADBFx!xjNBNbQM&?@eeTrvE0g=fSPmiyL z27o8=1+q~rpP=BqFQQO2B{ovPYU$G_)dED=ZCw7wQGaA+9D00Z{ua{wl4N2nmpPE8 ztCY&9$7C%vj;LfRZQ?q~z9Re8c0xI{*dc;Dc`$l*MG3Y3TiS`6X|R?c^soud`N{l~ z><8ho35oDe@m?z4r+MD9#rq8PebYR$;fO(YvYaB^W}_+K$CV_>)orY@O^ob_u(ol@ zsB~Ce4bVqk#%+UX${Q;7Pj;_JIyNO2OH@;GHOc%iu5~+SZqV4djgltY>xioF!w%uQk5k*821)q* zLj$`XBPuDmofJV@QqnZEdrloQiUWhPBFK;IL6OsiB1rLF#(OMj^dPfgkr+#UA@5ku za{9OrdST_`{@Aq>x9SGd0P~EDOeY1IfrN~^uj@?MPx@_v{#j0CZ>-IKvd#BayBnKH z#R6&>*Ox69E09Pi$dweBo1Ep0O}I3p2G@R3CejPV9!hF3jcK~?Z`low^FAvB9p`=R zT{qSaffx{mv!nbX-Cpbwue);4(b#ZKhNyVzaCcx0mD6@g?u4O8xLI{j{=42`Xw-`g$dH zWvQP+H>^aH^>=?G?Q7<~Ty}Tualfa~id|&J_m?zXZx~dhm+tdQ-5ss}ds0wpn(IvD z9G$HLsHo~IF3SS$l8(!J7>RAV8ow+G3Ok#c%Y45|k=kt&3qUxYtE$(0{X`EcuApws z?@X7kVxyk1Z1_o>W*9Ag!|6A2MUYsT{F^^^qS|{)`jt=uD*e2|Q}&n}p?`GwE7}5G zmr^Qv$|rVx9pCq^`rdy{;^+{ceFx7w9}A&0%PYpwZ^?Ndn_tO!jeQ_7UHu{K2J9uh zv_d`ye1B8&?rhF$dQsZvVn=HYHa#v%z%?05yNWL%snVL0^2HUU4?!n|@446jZHc~g zEv^*n^e~1cc@g^}WmS$Cj>rP*4l<^{Ys# zBjH$4fiP2&`Bspn#Fm#(skc1hvVjz|mC(qFjuMPF9+a5^s-Fcp|c^0^H(T zg0^o zkFGgQ+!V17tT`I2xshH=-T}`rXN893kfu9WyHDE z)a>aUaW=QsO%1Z50?CF|2|Yu}uBzlzMfIa-nMaIY>PsI`T9Kfg$k?4+Q91&VTPpxt zpzl@$G=5q9zB^Fvfn?Sum)R~sXqZCuXtg*x;A`MG!UZv*d6aKO2tItYC)sXtnL3_| z6-+GRHc#In`VeN%bG#$M*lx=8n;R*bpuMZKZK>zm|Bj{5nCKp-G|%d#IMgysr3J#= zMDsm?W69_q;uA@Tv{c0JiTK4!Wn~U~2?3WtBuq4lS@I37bEUm0;!cmC?4YhRvc7An zmvV|2Ij$7C^oq(UdMd#*O<1SSzdGdLv1U(%*>3jI=5ImHJ^ zRw$ALO)oF;(9}hmy~LZAjm>GfMv7|6>CYKN!_hWr@E0_Em?BkKylC(z8iu7vv2deF z>gY3KH)sc?>WLVw!*YU&iC}l>TP#*4op9=;-F6RFtq?YHiAq=<(ycxh9cZGl@Nylq zh46UovJS4!|Et!3_`=1O8W6W!ypje)p)pa` zfLKY4Bwe%#4H_2}4H`e%JmZv@c{oz|x~j+U#3mgbadC={j(tK$2ZH~>nh|N9;{45;5gktn zBStBz5l1Mh5pPmdBlcHRBlZ$%I)rvB$5TS_Q-x4&Br8XJ?h7&0ZCyFy#S74w zNO*N z0lgcSToW5yX^l1QT53jAlmxb-AQ2kM{xH>u7yja<8u5vX%~c~Jr>j?uDB39(dQC4^ zjricj->Mo>BzGm%h-!deSBHS8nzXiWj;!6wQb~{eI1eXovqs&4>?Pyn<%LJAMWRt!PHX$gefch{2oN(u|0FnrlYv z)gtjLX-0&WL!lW_C__{=BSLAZ(2N-G=cO4DuF#BF-V)O$&4{;eLe@y@a?Oa3UTmou zF=kU+nh^z2mz7#JYnyuEbBxiq?+X4wzWl2Q)1qI7u+0{(g8lxxX0dE zI+U$WdR%*4pSlyoM&iaP;(V;oxQGpxd+c4*+YW5)lBMcw%zqEGt!j}nn@)u8!<}o% znEkz)Egvw%J*>x-jrTpJ>}+|?n$(0twd=4vA8gu%-$ODf;re^RNq5jZ$9+hgXsH-0 zW*M$pWnM_Lg2Z83$JaEsO_rWbYcaR&+3eb;PvzaiPV+J6^yBXCQuV^7D+?CNryvE& z%_oD$T+@$B0|=RFq;WFMb99FL9jD$Q8&x0$-GkjYNjhgVj(~J@#0Tp3M2l;4+@0w~ zTM^xryvPXx+!d{JWN4XFGp9OBf4Xu?3NA9jb-=~0osMsctE2$iC}qoemcCd+5FLac z1AfBsW5Q1|e&*q)u)>KhF3x_i>?7MK*G`%R+4OE-VmQRFh!2XhpL2YpxAk=GjQG6j z2Opcx*}WoOn_zEn9QU>Pmv@hjv;Q({Mz!lm{pXJAps>Rcl~Y}Z9pAuD6P;lHrOJ&s zl#=#Vd&6xt)2VcF+w*Q?iDNcl?~AHGqG<;^O>cvYXYHMh7nXFC_on+egCi>4f0AE( z9Xh^>V}QD(i)765eE*puzW=0hdoVV39*E+4yBaBfqibuXETaCKkn`Y>#--7nW? zhPy*VW!XOcLzNY=Ow+WHPUuB(hop%+VRpW*o;nS3`Rli7mqDw`4fqDvU1*0Pk562? z!~77Zs==rJ2-0bKch}0YD$UhEGx!5#+?E&_U~A{7(wZER%wC^r%GD-Ierts~0UXdT zJ7?GBwv+ttMhnBi`fg#DlBKF)|dub$9&nDrr+rDfg)MZ5418ot;-L|39r!@82Bs9*Pc^%`O?VXawyJgGgwDpdpIxbC|uQt>)sn|rRQ7PCuA?@2u;?Vg_qRw1ba}=~p z(oS@CBJ?Bu?PrD57^inkf(+88DLQ)!)~INdj!-M6CX8&9ter4l;Zy%r#Y7+D9{t)f zN-;`K12<|X=W3NS!sIltaFl^ur#DsvzV7Voyj_dp878Os8E%KhBi)-wi4eY3<5YYj zDr>?nDUG&iclz}vaW*B;l~lK8de_ovnqKxB#3eD;G&`-*&m5#^IQEUGG_`tcMJo=j zzs@Nx1(JTK$0dN0IM?i)ehN!=GjSgtn(&A9P_@|aJ=}?R zp4+0a$8kkaSnc({=*xE#KE*l`Om|^Z_FL$}QgTUB%o7_bx)q8=)kfT+DLLkOt}$CS z55iUm*lf%|kxMrX&Kgm}DdTsxFV-5*TD7ifw~uRgvfv_}bn$ETd!TLPL&$xZfAL{z z?gv~rWzm2jxcdwDDK_FNdIg0%oLu-^T#qGnp?n>q{p=m2bLr|Se#eKL8om1+lM+`CLX}FckK_31Sski9mn#mIOyjucV#?vd?zxz< z=3V)w)__!L7%pmUx|q_zJQq{?C>K+Pz3-eva|iWi%GmFe&m@iRNy^2JQKFOo4L4JE zOTmtTDbjm&O)NswVaj)oF3TD0?uD=LjmXY*K{(B6l=h!g^TidF9X!S64scZqH39Nf zUOv*XVhmB!T)V}fQeTGCQ?5gfuZydG2(Ve){uPhNBg+DRf=M*8EJ&r1Wx-sGECUE8 zW3ZWq!Dc!+6=cz1vml=an*~c~uvxIOkUSP*09t?n=u!+oiwi5n*^!DJ_)V~HD%)p^ zC-Q&5)mGPe=T{t1u_UOXI4Hq>+VQpC7UHVHRaG5b*E+AOSfZ^c*2de<;@g9-tsQpt zPM8>Pub(kDeNOe8SRM&G81~*2*G@ISwdL1|098`6B;xF6XV&18p|s``(dp`Pua(x4 zb>=z0C#X}V>3FUtyBlMsTwiI0S(GZ-ZeOYDw-TFmx=EX7dD#2>1Z6W%vyC~kn=W;o z;)r^YlD=g3lW^(hM!Z09$VXzSS{UY87%1wdkerDXAE|8L;K-{Y-BThykDQ|uUlXHK z(;z>(yhtO=LQSqus`NmlM>&YCH~FQeNe@p^hhex5IZ)P3z|G=LH|5~F*uS3QN($<* z&z1yHvm$U?^eeZ$X28DM0qsw$39t=pUuo;-*sXEw(Tw@t>Obb&r9M92joCxCYO?Jf zbKKqmcZ?m1*f-|5tsPdBxz(rsGgs9tjI_iC4qy7uCYnvzgWIE2pnzc$=&x2w!4`;b zMFGjO@`k2ezvAe5Vn|Sjy*RyXZ-=YN>c8F@#8T?NR*qd}hII9nZD0Eyo<&}~{}xK) z|Hh-eR>Q6#2qCzcAdz4$!4iUX1kVw?P4E$cM4-J+!+H=5CKyYQOfZk2kf4NM9l_HC z+X*K0)Ue?MAq4FSf`iFU5Ka(BFpt1Wu#Vsbf=Yse1jh;L2z1>kEWvn!83dUGR)UoT z_Y?e$;B|ss1fLLmLr_a_i9pvw!+H`7CKyjJjbI*um0%6Qp9!8M_!~hb!BK)bg7(*I zn1NsnK?1=%f;$Mx2_7VPn&35py#&Vy8VIK11Qk8CMDtOC#_Kefm9w+2iG4N0#8S4K z*keacEd4=~$FK4`6C2adbXgqr@#*;Ed|?tK5ggZ38BssnK&+oUG@31-zany<&Ze;m z>?Sta%RY>aWQoiy(wWXCv3M54CbL-K5=Vby*kbw{L-C75m`vqwFf&kI@}I%uvRwIN z!hNW4AF8-8mMpMiELt&RnT0U3Q2O)f*DBm5u>!WFh1+BbWg~ahC56mFa`6sDlM}X( zporY@B#=E%$rtu~3Mc1XNa1tH4>)F!eF5}pP+3?gEh~kDn;I{J;x)O*_^LRnc&YfP zIH-B6`O5h$_vEeStLCZZgLE<|Jv;ejDlrfS*fzaSBWw|($jdE_(#aGQHn~otP~PuJ zgmb=EoD_kZ_j`t*Mb1ynM@?HzPfbUSj}LHT7B3!CB$y+Up23DBdJM2Er-vma4b99P zx?E(EOw}Gu5NlarSv=n&DtA)B5|4fI0$TyBDV9Q;>KJWbXfLv%L(dawB-rysMMf7| zb3`3xSQm);v&^^JGpur$jC^6Ge2_lUMVd$p=^zb?w;X98KH?${OUba=t(h4jjS1Eq zVVjn1w-zaGX_m}Lg#k8lVBe|9Uis;R_1W@>Q}>}EEE zI4Y6;M1FZi6RZ{s%oK|)H6zb1>=V80(Rq0V3)D8R@$uFA`3LCQweJwvv6DWi^EF+% zcDwev;O;%H@7e2y-iAJX`-Su$Ffeq`jbVdt8ZtC|*v%2cM~oabI&zG0Y}75|Owr?G zV$BmK#>FSxnwT_ca`Kd^DbuE>rp=gn+pO7h=BCffn7<&?lC>~9CwEca;{1Zb+pR@5 z`;w*0mf!KGJ6EhMW-$d;^RgUUvbA7=1+~AJcx?gkhLyO)LX>4v3qbu?1)tc6rxugD zL9|w@2xkyrVPxMFl1h`<#8!OJCMOe5MvD-w`A;SJ7EYxdAzW^v zFwumKEIS}W3_`LPgygUYnTFgF$p&gNg1 zPB#hKP?nIXkQD|NN-}=|y;<2HQF`Ej1srevSRUM1QxpJBhkSC`kf z#jCtyD4l6ay;wayatRlRQbSw%cko3^I>J44s5q(R)*1zwE#luyV+u9CUDW7&r4+AJ z3Md2Mr>5nd-l*SMe@g|0S8ivmTx77B9zt7>m4OeHTz}76oIuJr^kckb+ADH@2Q` zb3Ot#g<{lYQ)G+EGp)&b?{r4}N;-=bDVHN!oK>Wn>5&18el`8y!!ONq$`s|Dp`@;+ z+tdzGrUil@LWLa77JZIEjCd{0xZ(2l817X+SC1b;$UKNTTP)sf&F~BNs-LS*7o%N_ z&D9i(F5};DFL|9M>OgKia*tC;?>Qo-LG(_A!o@1yRV?HZBC|8x8%^vQxRcoh?qot0?GqPFtUH;>WcDEQ_%9}QJ(-1MVz;${ z%p2f--o$#78B8WdH!n7rSRXPg&zXq-C>=5}b}S|H4&*~7^mfc66JHcfWG0EWVHN!} z`d`qNDrCPZ6=GNz{TZm_nvbj!$%YwB)BL5qQVv7JA7f+1{G))%6rmO?eXkrFX)O|^ zxs-lyQR=374rWh_=p)ijZkE~@L35~>F@Y-wi8Mm2Tt=Vk$ z!!shB(m_DO=;RpzIyNdiJS{nZ3e|urW4d|S^XOr0S>ZBzbQFRGFrAJJ9sLF9*nb{8 zhRgm!J%5+`UH%tGHFKrE(pLVOhgjwHr@6{M@A#{|{(P?TPmOE%pDzCY1<&Pmn*HC+ z0h*@2t9_brfTros=PLi2IN)FX`!)LU*OmUf-@N^WaZxh`uUBnF-tYp<{ zM`_tzcb7ZYxYkyzyJ!7|Ki_-bU+#b4!G|7xP8z5L3nTVLDu`WtV)_4Yg4cT`sGtlstR?mc_=z4!k94?a9_@X$wxKmNxjpC0+_ z=;z12`0}gcUw`xMiId-bFV+0uKK0KZPuHIL>1^H4=jt2I|8k-6;wAnsFHE$(@NiWN z6aUln|4--tZ(kT{+y8$>`9qg+2SpSc!_pLTM3Vwb{1i@Ii(mXn`Zur$S%VaqAVhx_y*i*@q+T+0Gme12Ae zb+PbBlj9_26xpH|*m9Owk_!s$g~CmKmy=;hlw!t0%lLw2X>2-65i5-?*BJ5mmz3O9 zvZ{mzV!n5k+_k!-tDhf@#LCLbsNllGOOi{@I1uQEpTv}MzY#fF!2a^c!Z2>z6Cnz(VJl1^OPhO+QBOiHwn=O1Xe(X=< zTzSkoA;XrDXRuhU1y(~&z9BEep1&a5VjW}XUnBxp#mYIt<>Xm14YmS9L7^qzU|D8a zV7Fz=&%+||^n6(0mqmqS$jCQj6jGo}3XfG|D!d_HVXT&nOhcBnU@?Uj(OJJf_+}AJ z)WlJF&LER9qf(9u1@jFHC<^MxkR^~1ZaGa=XSm&Nu`bWaU)Yv^k;P{7@@9)O7U8wX zmPr)n;7Ood%U%8)5KFZ)MiLK$)G|gqu89SRmGzikQ4Ys?Nv; zQcdO2`#`1E^2FDn1qJywYeAkNJ0m|c&tkodzNWfbXt7aM<=6}h3NkH*f-FO!x{f?V z%+=*@HA6+7Rx;;{oQEniR6OQoh15{w)a2Twv=%R>oDEdN$d$@);1J@6fv^>2Tjpnw zV_r_ag?K2hsMR!t5jGEU9y4_x2qxvCEZ=O_ZNRPd&-K2{(C@am`W|RLk zujJ))m*&{A!7oL&46B#()n(^ZXM$EGOeK#BPbs<#F0BhgSH^y3mfwEi!~!mXO5B z$ud|L7uuE&x^h1AiKP^#$-sA<45|W^VMQS8Z!lfaKcn}R{X+*` z*?-E7SN6{wdS(BDVa@&bw(uVwVe-&ec(bX^bjFRmay~DQy0U-W=;rF$u^XVB^j(_9q=Ke=o_)nkHRCbwO_LkwUOK9))5^Jh%#$7kC1Pkzh9 zroGkNzhyZ^y>sPydvp7h@qgyMEBlwce`WgCe`aD^x@tUSy&rpIYKh;wHMs=_YgpnL z*6Q=0eM#y|gJ745*VcY}sk-c6#%k!O*Bzp4G4| zECwTHi#h=!Nr|v=Vz}rPgRx(^>csOba(weLb}fr8D#}@yucR=opeb=S zS2IB*pv;6Q^{;>_P>-P@hi9ikS08dsD#*0wStiifW>Ustgni0)3P$U#;=Rx}$)0D+ z8Nb|SnO2aNlWB>`&akotNGAou5_=({rLi)&Orz0&ToCLp3ca3`sBg@aV`a)jGv?!? z%M(XUO2o_mENB3p)0P)n*iG<_DabD>$g{-Qta)-MD@zjYcB_>JCb2nI%8JGk zX;{IJ$tx(bD2d%_o;t~#NPTr?ULIpE1~jMAuw#iRh!h&Eq%pH5#b%}dc#1tngrKUP zFRGcP#3iOhC&!EE2Yliz8HHlY3VUDJWI0CLn;M_%cZG0e(MvTPpD_)<=oMdi0J&xl){|+ zm;yWHcUOzn5zP*Z(rMl%7z@@;wdGCEr$K5a`#^+{d4*=SB86mxW~V7v!jcMhktH)e zpC+6bdNStrb|->V_iV(Cj!9;06v}n7ISKamR4%E6d8TLw)Hc|=+G(EsM0;TO>@(Vn zH_r~F-FOp~9Ng4uWNxCGDne~|@$S1`Y68p^ZSE@PFKwJCWPOCh_-H!&uO3RLh6VNvNjm2wh^u`Hwpt6IG*Lj&~9 zO_MS?9toeLLOQhK!Ma>7A*khc_EVewv;vPjV9&^MBiUjVm7BjnCWErRS4e}L1&b8A zsxId$DxT$n|CblpEQ_b*P(DSXt&@%2qeu@pq_J_ni3J(NQS+@CqGf+1cxI|auEd9B zu9M{g)%Xiu??ecdOqymwp1mj=iH)~sWzoo<`b^>r1(O2n1PgY*S=4ru$%u&yGprU* zIj5m)y~-;!!NW%?PIS7 zu1v!TIVg_7x_bbV*WGoB*-kOrD}Eik{H|5v!qhA21}SdXA99TXaPOnIk5JyDmG>Cs zJz0q}RdG*I%rqtanM&Syiu+>5#8+(WBgdW+tAeY)623&id6ixh&K&`}aOUZ9cNUq0Q&tj@p0A)Aq+q*}v_N zZU3`)|B=uCbskWj|JPX|gvJLxTHR(6$n#b&U)@J>e)=of-1wAiu6q2qxXaeGvP76$ zD16nXqniwEB)jU8Y?>5v>s5x2R?OEZ{DCJ=JlTVtd{TOHR@>>X+$d~Qr~{dDbna0D zOFx=>^ybUMA3pNs@$-xgTPerH`W0k;+|MQ!OJE`xOE8*XI6*i;D1m_>m>`gV5j519 z*eL>u-~_>Of@1_n2tFn_NU)z^FTpN?N`kiuUM1K<@C3nwO8E5z1SJG{1epZ038oPw z62uaWB^XXHm>`6pCqY+&K!V1fC{2Q61P6bT!|x*Vb%HGf_Yss56cWrPm`0FDFq$BU zpz(}J;CrR<<-hWT42u3k-!<%VTyfQy`fSlevvB`t_F_OZ3#GX0Z;WPKd0z09?IrEm zzw~HYn7`G%E&tydzAgX%JpcOhYx~T6T0FkWqsBMU$Tge*{P-O4ox$(k?%wGSKViBm zP@f?RgcGla8h;&%m1j7GA8c$J&~`LR+TMKBaz3ekPw+gq`uYDM1^s{g(JH@SoN$_s zbRu&ZnHZ$4Clhn8E%G$QD|~>ct4eZ5Jslwv@oUM1zfQwSFkdr}iAowxCgx**agKB(^xzN}%ldF3C<4;`}EUK*`-UDnEJ_41f~~Uo=Owid-j(E zGX0*VOAm#shqRJ$dh;cOAW)rnvOJbSd7Y1N-;y7w_nr z8E%(3%^S0X|I#~ab*CsY->tkaJ)mnq{H&}-`Mnt7_aDg0IlWjA+D+<$;V ztVMC@8lQc5*l0O`cyIXNz~;U$>=$7HVX~lV12jrF?|9?dfMNn(!ZZZF1OWtkg5Df_9;ER4ukrct;lo){QW8r^Nnv-~ zaYr*AU%!4md+xdC*sHI;DtP>pPd;HMPoDJfc_EfH;cE z0Sf5lazYuIL^)k~#i@V){wypkjD?4Xv#6*j79AbU;^X5**-e=;g{7vZvY9hyvN?0+ zu$7q;*usSiS#EAFTfBHNvs$e}eymurf^D>qW6$3a#a>xyWR8VqwsuhryRRUcJz_Pn zw^of||5Xyt9$qz{ZF{hg?Y`$$c5u@o7P_6Y!8oTOlzs8V7wq)OBkb@`oPGWE*McuB=^xm)=Q*pbt!4G~^@3OM_zb1~BAGFN zVj3NF+U<#NI#6TpL=D)$uVGPq7@NhXu;u)A_8{NDw(^(Q$NZ2gPgz%r-OMDgNImekH~Kh~l5{ia&tjn<)Nm6yHYi*HQduDgI81e~98A zq4-}?{BJ3K4aGlA@y~h1A3A{gH=05f(lma(jr#F*G`D}2`rB%1gdcTg{KzoIznH@K ziQ5_fVFTl}FEM`3D}Gms-=62yBNRyQN}mC%=k-t89(%uS9}A-A4%~ODgJzl zzl`FqqxhRC{woxJJH_8a@hQ&@$0+_uieKxAKbTUul~Tx|6z--Jo}v_XQ3_vE3bma% z`)L?wbyGMycROeG8#p`v5@#0oZ>%3@t>ynuTuP- z6#oFlKSuH0Uh#EG33Q|Q*HipH6n_B4A58IYq4+Z>{_PZhEyaJD;_smNN4?@Vf70d0 z+bJeyeDwHe@tuGr-Wb|Hq;KB=6Ft7s;}hcJV`CFy#*K@PO}{C0;K2SN6DRglQ;3Zx zZ~BiXOKfa<*dPR$IMJZ^CnUv~6UI^U=9uVl@kyrWgy@*q7>W

=|TZK{^=wA(@jIol))tOzhS}zfkID@e~jKw zKe|)6IUzQQN_j$WK}4?!3VVzj6CHiCuih_wTzXP^QoLEgGD+pG_?Y42V}@!q?I$T7 zD69Bb&x%icdgRcccK#Yo=QzR;C?+M0BSvcSj~+E5JffYi?wWY=j2Tb7JbZXeOp||l z`uOO{#!dl#Bgq<*j@090oAOVOL6FJDjy?e<_{WSRc1>VS{wN<}FjI%lohGNpB#ko? zuQBGGzWl@mb&gDmrgDt;@<#fx!kgSjMZ_56n|sUrL+Qs7BgUIYjA`NRl|B_seDs(W z-YlW{lhneS^UC4|eaX1vG?1wLW5#pEtw5_|xe_+6#dz+@;}mr~H+AY%F&@l`+ z<3_f5^JXztc;%H>#CY({H{TRvg@05&!ycjW#)~vo*tKgH`|!gL#n|A)H(#-DzWIio zIB|lx-EMa3)G7AUnbTry@bk|Nur`A_IE#=pjCVbr-9tJ%alW9Xb@6 zrh6EA^a$?J=f>VaojTn>eAc~hX#f5L`w#6Lq#x9g-h1@vH*g?@?Hts5XxPv&*0b-8 zp+kGMAKIA$bn4jghMs-;hYsz~KJ*5~!C(lzai~rg7)o&lUDK&!kKpTW9NIyrYv0b# zFL01v-$U!)wSBY zFGcA^@05R7&#nXeg$*4VhU;P|{~N=?Lc+rOgbDh3(t~fYefr2>{EGFAjm09KuL5l? z`fI$xAUrl)^p@9$i0#=t5yWssIeQh4x;4b#3;dK^|2v-F^T`AFVk<_s-o1OHPyskj zIiOv;b|hJZPGTx4p@M`Yh1kxamiQm__$uiJUS)WcE4oLpzv1!6A5Wux=dIJHPk;C0 zk3W7-ea|=l{O3PUlKE9#UEOJ#m!3Fw?AS|t_Uv(KG@7unW5*6vXbM)+!PXX(!*3}+ z)HOQhYX%G$(2q=%Ri~?r8$4^)tZ^ghA^Y{8e){P>G>_&xcI@EafB!wF{*-_6$tPH# z;$MCB6{q<(hdQeEaRUUr}D?5sv7*m)hG1!eJfa{#N{HJcYbG0Q^+|4Jx2c zQ~>@e9jaZ0mb9oqID3HV+ymb3fZv0Eb#?Vxs>i;>6Q!VG=gyr1fAGiAqen#@eEs#; z;vG1mO;8&a=HbJK1)y!9K47BW&~^~#{rBG&_@fS~{d3gArAwE%_e1X&$h{H%)P`^V zE%={1caBpxB=~>y=+Ohf#{l5}!3Q7kx88b-Q=M}fGmAEi@<)B_+qX{uaNoOkuV^br zjvNto&;S_#enUG!9Rau3e&pP8l=E>Paz1dz?RalJlR>ojXiz zrRQ(KfBW|B8$v=tM$j039mz}7hoAxYqRdgQpa*pU++j!EfBEH?0$@j(qr8DH_yDv3 zZlM8hu5ZzLK9yu*3lH#uK-jPu6E#z%h({v_)? z0Q^-@>q3R!(@xM1z%OZEaz610=Q01F@&^r62P5C-{AQvd|5MJ-HFBPHi1YC6o=+23 zg@1j0J$QL-L_|bi;)PPsK=p7LEx-kQ1RPtV1Lck~M;(E0!2giDG-neCO(y(r{amJD z{KuT%Lb#408b%P`6dsZB&pFI_$lG$8xLW+F&)};32me!l!~reqMCEgoE9wG#1>R8U zKpO|2f$z~SR1@t2Ps-PvPa+x;i2o;iD$@{kkn_k7WE#S$EezhtdFYPcjz7ub4gLG~ zA3^o74($xGr8PRh>uvED${+sd7Z49}#`{SG&n&%9`!)@Vz z{``4P{Y*0e4JxQ~v{omr(Q)Cz1%Bv_$M{osCh&)EAII-6FbO1X`;PPJ-*P_XIOj>A z;WMQ@6VHrQ+w(rTJwql9*e#}U6XH{$X_wC!)!~fLBqo2R5KG1&AAEcFle`!FPi<`-#zSaxDjg~6=4e3O~tnY~iulAgvwCCuHNf!sf< zGHD>u(C@8Q<&wak#`kMSj2O|E#wex0A94{Ucm_0J%%jo*H}tjYxD0;iZ!u=T^JYmT ze{E$Xe~D=LFQQ=!(eU;|1-$Nb%~c7T8lrPC)yZhJJu733f!kZhAM!%w|1o363_x9| zfc6T!fg5mFX@TsAyvMu-auae&Lndvs-@+fW-ohU&9LMj=H}QM&qPdG`xQl35O*E_^8t}9nW6V9= zy8HqD#0!G|iLXmR%UyTf#b0>g1wqf%(4o?TxYD6l_|DQ%ypm{mi)aw-nP`AaQrq(r zB$FPsj^hs$n)tm$!#bj24bf0We6-3U?!^)^DcWm{@rt{3`49Y6{x=$p1AqhYD=#ni z(9n{OE75ZCVk7^$>S6xw+8DmWF`B=nwC9(-+Vf_GhDQ_{{!DzdZc#LM=EyYQ5n~MM zpA!il`(E_F@3YIF?x=I>e>Y5-G9@8DKmR@8iuQ;$uyW-}L4!Ac{aT&CM4M_k$7=2Q zbl2ZJV+^$C3Z*@_c&<490sg4_xVSjf1Aq3}XT{hHV;QH@$(Jly;-TS6bX=)U@IWTL zy7DU8GttnBoN4Rnj&fSReti|mPCjtpK%SnS&YybfDUN=*sHlkBY&O1j?OM^Uzxd({ zA$KqqYK<1)jlKc03S%LRM=>A3gZ6yjX*+NHh2|TZmU!B;I>vZNY0vAaE&Lk(Z@>Mv zp2j-URQzwc>86ocSy}m+nVD{qqoN+3eDX;?dGchQl9IwJDk}K>_utR&yYD`M59as4 z7c`(RKtG|p?HMxZ;bloc|5xW< zW5JGHD@(}swzeE}R*7YAmrndV; zVPWA{fBMs(E&{}V55T(xS|$7rVs2?_kpJMR?r02+Y*`0?ZUj2Sb8JL&*5 zr~n$&c`xQ-7+-_$fhSDx5NPw}EsUuUo@B|NLqbAEzWVB`_h1h3d+-Nu0>DdHZ-yK2 z!kV+)ZWrx0CMJfPOeQ{L$PiHv@JF1MbhO4>YTHmv@Dbzz_zLnEb*HXx5Kj2qcD3Ix z1pY+#+L0qi_N6i`MSFhdop%HcC?BjFQu`1zWMpLU#Kc6wTbnm;7WkvAQRc7%Z?pr* zAGl*|3jV=Z8|?sX0Br*4LIxA=mnfam;NV~r)%%mXcI}dw{LLreYVk+D-s2y&TmhIb z0w1bdPGbw~Di-a5>YEe42_8Tng)&y-sOyQ4qbO6z|Ce8Wng8u?e-nM+-~ax15f5ce zS0Y@0)UNws7~|cXN_iqM!DDfSU@4133d(ga`bCIS~N3gRaLPe;jL!Px$!w z{8rpO_^ac8D(_OzpvuM8=sUcVy&3-A{0|w?vX5;^3rwuB&z?P-Kk&c#FM-$bjy?dmtKUaxT>IF+ zfV;rod;Uv(&pPlW`XJDuuJ=QJK-Qr@@}>i2``T--@rNINSn#vjh5?{kU7N?a3Gd(; z_4@(I%x8Rkeg75QJ@|X~i{4`x@3GC5>ICq_6HkcvpbOza8}J2hL3V-`6?Yn+KK(oS z{WAQ43$-u7|I~k%s`IZa(W0(-s^9NWH*iBesNdvJXOKnsmVj?ipar;79=}J zpzp-^1@aGkfc^-5C(0OePLw_BL0#WPJ>VTOAF>v5jOG;Ly9UwxN8>K=2k%~q&)ed6 zZ&?I?b=?Bx3>v}f#7CECj37~6pFHv{s(zK1_V1rRTx&Sl5arHw3r zUmCY`>2b!!)ygK>{$SHrF*SvqOPASWByA7XG!KB zCb{`062>=Ed~d{eE_`3XnmE>C|53;J!Jn?`TW@d3>D8-OXWVz+eg9v3R~{clk?$J; zIb>ISin?!c$wO3Fu0E!Z>aOl48ii=YEP)slgd`*+kc&*<0TMt#33u>99`}ua5I~My z0l|mBD!N>C8_S&gSr7kWiC#&&;Xg_}LL-jcipb6~P@&DT&SvVqHLj6Zx}^ab|k z^(loS2Znqwa`Hj@IG#8b#XW(y34Z(_inRgb0Y3tx0@ewfuDr$zzeHPG8&y@MC&4e)MCQsTSkMYB-%}pW>vx$T)Td;u~6d<0nG@SLRcG(d^h(ZFuw`5&@1 zc<|sN(*Jz|d;oC)Vmr_Tx(Bp4d-NZXx1UcHI05q0Rk8f~yf~Qv&NMcLlMRdY0Y&g5 zwcCx317BY(|3Q2PIfTz2kF&&Mcc9aiFrz(hE*BUJu)2}dhoLd7F|PbX|DpY{W5;IB zm@y+A*bw}2^dpF?gL#AK2WSC(gx^qr-!2<`K_)K6k8!+qN&OEWd&rO>MWaTIDg+%S zPMj$89`r73AM`(X0rUVbqV0Ih>BQl^k>iK=kxW$M$AZN3SlQ3D51WEK2XeZgG2$zd z#q+uJ>R4DXHW-VyCZ$GB9oZW>`SHFB{8)B@AEyrOismnA|Ed1#g7(wX(?9ZkU*uhZ zP3Pz5N5+g9BjP*sDbNLhuEh9&HfN6RkGwa#Z{*J-62)AAfFI`!dLXj$#gfQpM-D_H zm+^l*&(qqqYc~kbF?8tA;;gK!ZL%y!`u6QB^1u@&Oc1$?Aoc;xaR&W^xs9Mlb(@TW zI_bLI#9Ke>|Fv%2x(ms@hy!8kfy)3}B0nqg_~Va@=e}I7x%$`yc08C{N!4TC^UuHF zPxMFIE1@JYp%jfX|&^_S8V2(&|CR_C#(ep{FYbM3# z$ED~i8&@h#f*e2UfNuwSBbN&vL@ph;2IM0iN5B|BFW^4(1+;+PhR#Gk-+1GViPF_! z6hi*TjT@Iad-m+~Am+w6qYu4%_l~q|*)r0xV@J`qAnzC8L%0rn6X*-fOI*2fC6?A~ zbQNuj_R%Kv&xjEt`k+4Ki zzj_WUJ|_WtR9adpbOYw926;t{7if*=hECqIXU~FP*tTdN?U1e!`u|e>2z=lbD^^6N zPoFMw#n6q&IR%*FuWVbik9Gq43tqzW20l1sFTf?y2k;m$4&)8K=)ystE#HNf5(Xyqorv69@<4b4`Z(hiY8(?k$chy|Wwt z?(X^fr07w7{gq$v-fqHW`$_h&$>n|{e!Oqy%$cvvnKS1r(orYo&!7L?f&~jM(mP9+ zEIvo^l^>Z@Wr0~>~MCYjzBe?RcF&6_tP&-y*paftZu zEaVWeG5B>E#UN?_jLw7d$-ka@SX8w(xF6Sor{Ti|{!AcK&}BXT9gUgbpYA5NCbaD$ z|5$r9q5I-V* zMXZ2WMW$G33iS(ED`Il=9sG}WUm2P#e4H~BgH1gftpl+*VlTvgi2D$CS`>G}hk;Lp zenW4eAcldzxa!4zqK^3T+4s?$4)O?y*+4&x6Kqg02le%5?-%|S{5|-3@HOGuhOq>{RQJVqZmtr3e|h$KpBoRm8uTN(AoLb6Im{mjY$?i$p zxKa3O!F(L(ZTMUm59rhQzTh)#c|8B)`e6KnIZ3Dsb`tHw9wAOZ-O$Tq`-jEf4?T^3 zqaM%#SP`BHHXHdQ+>1CHwtLH#Ef?L3GPKUp#D;W8HDibLGe>Yuo!D_BzONzGkrEOb ziq)R50$UBNY%Ko5`fJxoSg#l>2VnKJni5tw#$Q-_t(GLqQSF44*J{VEOc3j?T_3wL zL9Dt~N2*&B?q0f-CiS5IvCC(glq~k$>_O*_(gXAvWkao#KStNVt05G4aQ0)*TZ{fx zPq^laUZ+WAQfX|b#|P+)9U_zIuUx5^uDMrSBTE(?jE<0$B@(9(l4-0V-AC6HN+nVz zT|bC=6Wv`NB~9!iUlQAIGNsxch6z#^DJ(vrJR$v_>I&LU5<5_4i$0Zz-RO(y&a0{O zezB8eHho)mey>XuRjLz*Y^9Q7Igk4^s+?X9*NbHAM0E2d_|Y- zV>|3xEv1TmK6_F9*>uI#j~N1=dOx|pIyEmv%Ot^%=~Q3oB{&R8c(@y#=~wVkSnPNi zKkoHvRn_8|;c!l2R>7czfrSM{VYg}j(jq&YotIOX8E##epIurUF3v4$on2gLXNC*g z3{aXT6lNCX=jMdV(sN3~`Nc(UQ>BgE)cZ~Sgalqz+CMDz=ef$-wCH_wXE-Oje`$W% zpxEE^O=(WQ{?tlNuhi1~0r>?vy>r6ne~kb6ezEB!btENcKu$qI0seQJW`>iC1{C+r zDQ%k2KR+=WTd25Ab2AIVIZZv@_A)nLXuR#^Tjy;r>ML)1{-Nn_-Zr48mztQGn3R;< zv3*7ceSq_HglJx0PLv;$%j6~U7Ws($wcJE$p(HAG)jV~O`i|N_Ypk`<(zG60v9?Ov zpl#Q7X@|8RwYH&gAy@CG@6`Xx;6?}IVI$ipFiMTF#$;oWvCLRyd|;d~8kw!kd(BdF zygAuiWxi$ZHTRo`%zD-zth=n1mTY-elJ&5aX7#jkt-jVUYrOTG^@;VZ)to)Yrn8Og z0E@5;JJ%j>Z?w1B@7W*QKidD{Bs+ypx$~y;rQ`69Jd>C5=lNRxA@A#sb{Dv7T+KV| zmHQ+77k#*e!|54sly8$;$)=p4)KF#BQ14eqs$MC`Ux{;1xdwbc@} zN3>pAk@kYNP1~m()M|#*P$PYz)roCo@3NEZEB2H<#Xe}Cws$%IbdEZ=^2Yog-iklW zJ5x`3^KaY&uYo_*pXAT+xA{<@cq!{TxslvjepsF*ZSpz?Y8`EEXh&$Lo@!(m`9^50r{8?Vfr|@~aim&Ex@wfR-zK?&-&+zNqH@wqcL%*&6oWI)tyMNdhN=59Ge7oFS z?j&c+CGvmEqvR>_4EYQBw~C@9DgBfQ%3)=_x`inEwc1hZuRW!W3!Ml_`UZW0vD(;a z9A~mKm~ZCC`Hk)oPZFDHG$3QuRq3u|DmhBNQb@J*S4I+T_9+LHPn0Lsb?V<#Ka?68 z6Pg^F9a@F=K9Nu6)A=iWIbYAW@*PB>Z}@Lq%?-PQ+_~;6?sE4n_d~a)SMJU778B{%)e~C;mCmx2IS)mw2VV z41R4aHSA@Zx2+@6hhi9@aV&Klj&WY4?V@gnEaTg|>!vhCU0O34I%?qdR&By}Ld^ zU!s4l-({p2U5y^bXk$5z)q&CIFmJUUurjP?tyiq&)<3Mn)(Pt_ z)`rxtjq!O|`QdzKYbxnJ!@l6j}LDD;G$r#CiQ8gr;`Bh3kB8>_&Y zVQsY}d%NA&8SN~0ZsdO;9`EQw;IW5plKg@4d$m33v6Rp}(n(8=D&sX{ow457WNbBl zFzTCsG?UB$<_xpK3bV0nIa|lixu!qZU*K=YcvMQ#5IU_;8ix`>%|gvXtwJ(6@m45X z=SD|kgYlhF&rC5NH8V-Wm77z{_f6=rKeO#jvg_Lq5e0hM{p=w&C!XrUAE#%}<-7R@ z{48(m=DB6=2)BaxXPLX#{o1YNHS})x61-Mk7q7b~&5G_HQ(qnnYNswOJF^oaM7|YysOwe6HG0 z+N~Vbv78Q0n)3|F_;0;Oy;I&MA8U-(BEGZb?($diN5mJk_1p9o`XhR#9@d}HC+n~1 zuj}vX2ldl>O{0-#X^`S<|X(HLx05%<4h1HPWiE##xot3)ailG;5Z1%sOSA zwZ5^=Sy`-*_+uh_fxXP8u?_4~_B%VlZe};PTiLQ5vMrn2&)VbcO8W)UYMRr>DRKHc zBb*9nyz`thha~gwf`eL;RQBQh_yCg2r%7|2=HGFNXgJwjNK{*7h6vxB7ScEq(4M`45szKIZrG`}k#kxnJRr_h0g7`AbOtu#k0za0dTVo}tWF zmXMvOqu#7OsAj3B)l}__c5|qv-ioMk#(3A9ZoOw6A>L17AF-Ql$6ihLAY$u|@4W34 z^09mcZ{)Ui(_E@=XLP-rzH*jwMm4l7ZG@Jq?>6_59sHMh*!;viMtZ8)8e+X@t+Gy9 zw~ms2s?1c5D{IuZ$x5f`|D(^+m(kem*Q<;*#_PsrW4CduiAB00A9+fFQlgY814-Lf zDC?C?$`)^jx7R!19q~T*&U)v(T7Con7QeCI%x~p~1O-!sR_o;#h+w0Jn1sF8|G<|T z))4f|lPly!WaEw!&o);=N-DKbsZ=RDl%2{cr6JkgRJBAMqP|SFcawTZm9z$0bFG7x zr&Vb4v_;w$@-L2RbxGDbg!1rU2{k0Kb*x-hZcbi7D<-oLvlwUXi25B^3QJ|3SqAII zda_IR>lUBJ{rzO63>lel`*cH#pba^Y$>Z^ud#J(J=?^#keu!yYkG(sVMp2L z>=Zjomh~LTZY{g6-N0^W-(ufxH~tBywj=Ge* zxINOYAbb3cUDvtYY3`&r8BRB+r_;;HbIP1U?h*H>`?)K5wY<7s1Csh%XiOWEy$r9Lm**7_FPC`(y&>LkZ=_e@RgZ74m22f%xmK=~Yvq@e{|8V@ z0|XQR000O81&Y61oCtaWPCfwu0LlUY9{>OVaA|NaUv_0~WN&gWWNCABY-wUIbT%|C zVRCIQWq4)my$yU+SD8P4?wy(B&P)P%nY{4UnFMGj1JnXZNNQ_tLSGW7?UJO`t-DJC zRVRSj6j0JyGXY)ZztcU&uXP1u{Jl~jp8uJ@uWnfDrE=oy@^?2gc26jY9iREe z8vWgAme1_+v^nfqRMai;cO`}RFHMk$zoC1Xu_XGB#jea{5=6zHiPg2}ne@x#=Lxs0 z@*iY&1KsSES#B+^yKzl5BuF!{o03q>3Ypbjf=51lFOdu{UX)m`JazhOH+_7|CR`W( zL=p&5-OUrzxEQOu_P%@SH`O!toks;s_6=O0lP087@$XuZjFrsCfA^x`6kMz2_;kJ3 z-YXLFI-;&@8m|8|DV=)leH-svi+fHJ(1zWG>xM+>KEB~INJumyS}_IJ1C!EKOihXZ zH~y}Z*o$d03#7?v#L3b|${DNeHLZSm?17&L$4o4se_xF2;(U>AF@C3Sm4a0YYiI03 zFA<#RHg?$bUEh(lOCEpggoywidk@hC!S&qCFfKeViTk~&S z1p99RQ^(iDr2b|mj~ukI+Jh47&SSpFY8N|$I)?J0dTUr(vC9=rt#j>5UBi@O7sEZH zdsdv!)KXkajqu|CDtzpW$--*sy4K8U^IX121(VJkG_l&U6!k5rL~S#!brP#}xsKg7 z55GLs7s;#hMe1Cgx7~wZ1(VO@N29fCE1N=M%@9=Xmykjm=&U>p% z*1YE|nW`M3>j{m%MCZKIyGDt=Ci6u4_JY27OhS3;ZFHSS*V8*k^G>&ouElemi`_=o zdvGOsJqCJB2d#nsVWKh78nir2bSL`jd5OkEYoa;PUZ?eApf#1VRx6X>KL(oT`A|pv zT)XjZH@$Ne=c#yypX*+{yO-YO7U#L}&c)w>7cAv3rCIc#ba?Cm334w({!P#WGxWg% zy+{h?F*P!1Vv)0u^>ZdEblxO~-Zq&+$MG{qqdNyonV~_G1J7BZ6Q=A?4Rq~J=-Nl1 zYkv=2`xtcXAE9dux<)WAUexkTS0UrRBWJbecQ@XGGH*uNHvxy`z@-BETOI^%fy>E{ zY*x3dNnwSr0lsQx%l2rx^4LOk$Lij)Gyeg3+Pz7=P3mg=bUwTKs(gtRKB2O}6Q@4E z!|5{pdiSPdNxkk|v~%aIbhL%InjGyhi*vF3H); zzNE0~Ctx=SPb&8bv!MAnk5J#o9BN5LG&;_sVcu1tEM^l5Cj83ONqpdV zZZPt}fbUk~12YLes5&2RYBSfMyZf7*Sop~4_fhfP zHyY!?ALDosUCs{kwi|8snYD}i&m^;mkw5h9bh6f_uf49{DW{LXS*=Aru6v{-1E#bP zJSPXGCtERwZ*Pr7cao0A>*p#P;B5TB$mykzbP%lNnm>{Dt4%u=C#i?aP)?bgHnIn} z()*L3yDLSyU7Ef7b{Rhteyd@te~`p#CH9H$_~E@-8`hL4R%81a zch#(1M_Nk3)p37u_CamzOi}aprK))>mC74`mRu8_%O%lPiD%ESbCO1*Glk3 zk!-E3k==%Owzm7R${*ilsmwVp+E~jJ~k!G{n6{)?yE5J{ctRn-- zoio`y-`xb;^hI^ljUS~O0RC%JdVi-NT^;B#A>B>tvu^yx(DW|tHtMtgSC4dm{*{iOZ`$w=E53aEyM3p0yCShi*nY>jzje0eXTkG!7CAm$4!)XW z3jWDSG1WdE6P|<3K1=@KL9_$#17T$&Cdl1!%^!Rf{@@WOYae@Hf7f}t8aZ3@i>?^l zpL4i6tn=KrGy$GDbWDTwC%~})-m8FhqS<#u_W6zs0_GwYYgd>r!^vP}pYqL&!9UP7 z0dI;0Gg%}a@3%ES_ALC^^C-l0N4bOWXQ>`(3Cg^XsYXPs_=~PT zmtNnSf?nRgfL?8vq1V@)m#5d*1J4DIPnUqR44h58jI(IlqbAqk0f`m8y3G|h0o(`h zK7jI6=Br+u0=V!SBq<|s9Pc;deIH||l@F^C7rry8>}BK+409jhU%Nzq!sK#(%gagA z%1Ik9=b%+kjmnvAsE&L!~D{n*$l_a3&)< z<#+~6wvg;)?Zl^c#Q0nJdq;?6x&ta=l!ua7pi8#(Tczw)qGf(MJKQF>b)12(Mez%l ziShn}gA?({B;GyG@u0fMEt!ER_*sDayp{qklLPRla!}?6QD1`3>%1p3Fp$$Z^J$8+ z>^xqomhk&DscR$tFouIxeQFa!}+jGDX z0A0@v?ChNRPbkZQcP&e@0u@@ie~0|kF;;W|_gA654WK2#r+Vh0epFss0{BY-pJ0#I z1@Ld7y2#nBnHF|98L+4fDvRXgNt6TMt#D%!JKQX1k5Hct`PCQjjmnGI!CTm&u?G$s zY|Pa1wBO>Zj!tJ0;)Me^{?@|Ui&3}T;49aYbTvYD;a}w?0h7;HEi+*k$VVXE={2*$ zLgXVJbJ;A<3Jh*z0g}h7^T0RYfVz1Iw`cKOV`4>gpNX{fTeAYk!LMx4MU`3iZ&2P) zh8lsMhKywz%R_rxM0qGLy-P;kx{J{sqCug?(;uUpPMJ0KAwNs+>_|ilVYh^CI~CUG zBY)VzRyi%mhxXGgvD0jOMWhaNpnDm1suJ>T%J5a^Nxo`pQ$_}-k5!FSrLi#KM)rjC zc--zzcaG|1@U(YwT7)RA4{<7$%lnR!)VCy*$R$$03>=D8FchJelMwfjOI!|c`CT!P^0obTNa+wh}=xmJv{{(gr zG_O7Y7$+d3Br}B9&+$y{E|o<#_osONJ)ZX^v8SjkqU}D}G4kDvns0PIs zHS$Hg8?X}%#Jgs^yCBlZ zqqtv!`+agQ%KYd%gG_^8u0~)JkLYFO;(ni;gESwRltwQzho{L#n!6^Y(Q(MeeKX1$ zFnzP58Su`Tc6N}yDrR>0tmzva&Q$i4Tj%+Wu*G^^;_&f9&na!CAuaJNKD~~cH(~nB zN$GVw6SX^J8_w29cqa>r)pvHoCtbkQ@TLdVHvcq7t2G_| zD16Bi@KN2p3tFv^K^J5&6Yp;U-9L*oo7RYSv=ek#1N<^gz9arGtD_3+oHLz09Ftj4sbVtoKWB7*#^1h*rAo0l!|%-m^F$+SaTb?N!shTiE!lxE@(eu=TlOFe4)CiKbUrBKXTr~npC#yA%pyF$ zB;;-AlWN#$$+@q^JhiT!PoQh(47zq!YnOjeb)1 z`n$Z`z{7+ya5#T7Ie7L~7Ez?!B}1QNVXDW_$5@b;w@Qs9gZ@eQS$I3+t0uo!v_m=L z?SfBcMLd0xL6;Wuw#38pq8)j4xy;)W!PBkPE zJNQA!)o;|M67oT~jm-!gLOQoajpS**q^R4>z@0h_=wEM=0jE+t1Ewr|u^3(dUc9Ha za~#f|nSteFF@JRcGQ(*;p&d80FMnSiAs;mdc?T_dL11Gqm5o!>31O}&tLD(g)v+H2gC?2G#0?FVfT@4Sjn_D+_*A(?-A~Io&s=%js3z7VU%2 z#qos>55dm)k=MDMHMW2@R2F@sXCWt7aew-cNT7g%4e+aceL+%eUHj4LUo%MS0=D?Xvd?bIk0mqCNndH zY${CPNn^Jx4fX@~E6lJt_?1iBXTooT|G;_(@9aQUzy{uBD}WJ)+vhag`ZV0gW;zg~ z@UrG}-?y5_MVj6cy{(^Dk5YNaS9<~9On|);^)9fo!-@_5>HP&;Jczq0)7_;5kEaEG z`kuza{dp5&fGv2xF2fvXmTek5aGh5SH?J)8=8w$3Z#dT=uM4EZx_(}Y>Qf#+pZov6fz=O<{1D*xA>Uri&m8X7Q z!1*PSr!X#0T3nt%v~?6ml3gCr?Q;42alN2=%ms{5_|!sYt`0a&;{6UHKweMdOFRppV#lB}(RfH`o`!Qr0AwM*`88m8C}^>i=l-79Z%KuS8619V>71SXx`lAzv#k54Ucz ze6`gF+xUSb4R`692{L)~T~4RHron3h{|$K5NAw!-p#GYz$k&q3cwD#kUC}=N9`*^k z)lPbw!N+05_zV1*2>I4^>_ac<<0|7mxkPQE==L3QSSFEg;j6w;5@}x7 z(*AZX@k;RTS19ArDD}ThDzBpg#27lgD8t}~*X{fAJluz#!q$|L+0N-th=WPWn=)uosWf3qf!sS=KzI43* zK#T8pzB}vP*rO+?A%_oBLTMre?YRWmn^Jy;f-q8vwvZ$J>;*hln^sW_Vwk6 z87dbe%_5}{u~@C0S^Eo+#$BK`DU!9-R*&{O755h3k%a}yt`PKawUjbKK4(>`8g4Ex z7ZPS=nV4o6G0F(qn<4n2wifFP!^l%9Szk~j`wQ0R)g5KP z%`dT!D$@22Km68VlRHGTwpz$e9~_rY8h2ju*s(?5TEN&+?Mgh>byv{9&#yvXuIIMb zEtvxX7pHjNa(y7azwfR{bmw-n?+AQe_%&AQFN>V#F&*kBH9rko7ctVA%R&~(z3{6H z?_XqlV&h%>xh3{YZ7NBkT67VWzjX~0-2)@z8;ZenEUWd$e-)zklVBJSa167IKpu zlN;jmq8nJv>lRkjHw`}1sn737lX`DVDQ5v&3d=}^9Z&11yFJ}jcl&}5<=!5WbC(r- zNV#1}nN!m>zpuk1DJLmbs!H$u9r+esT&bV*+x!}EM?IP-Hd{AxkrTY08lUu9P z3e>4mn*LCgH0>eC(jlqrRMWWVb8h=+XeXEC5~Bq0L+^rLM1&Iy=O8%g-jxDV`e}ce!9Pg@!(%21jU2 z_bSn+JpwywlVdk?pxc<1hu(dBq4XNn(QHJGroH+y0gwQx{TVWPodpc5LXmTW4UA-_LFURx;#R%Rkt-Y z@R`+U6UmRkJKcYMQ|o^gV;Z?3@?WW38s|8R_QA!=$_)8X4!u8)G$s>`;bn$i%U2_> zW~-4rr13^YJM|#aQN2cxm+IV}#L}tWTS13kh`DRrC#SKbAK-f?Xxb^Ktlyf1RwNA$n$;to~&Nb+J$`06`&>R z-enc{`M4iWSHoTD!e;J)ybY(|IaNGUpTl|!OK*lxbz&@9I}ALUrIhu9kYTDvALXS! zAHe!oMZKTwza4e(qi)2Hp%pBA2(XAJWZ(0b7qr%Z4pcvaMKmBdow9ZPNt4xcVl-MS ze3OG+@6J^t6X&OkxdCKmD|ob`no^G(U6iasN`Ksp%zdXL3$_A{y znOsj7*Nb-cNQsC&(SAt*-3Q~(`_0srdwP*xf6x1MlGszE26S8~osRcz1Kut^zQ7z77VB$B6dz;)ULElQ@CU@W(_Tfg#L6dlGX=c(_`u+I zoMzIE0{426myZjaYpHgLvF<_}(o{Cw!QsG1POoa19*)N^(Rh|oW{$4ABYYG#naXpZ zJi;}r#S+LtY=(GYRq*1mzPjq1U0imM7Uiruv~GHMDPm_G|HS>uq|ZMeA9sER?blMo z<&Pkq>63Yk97dc-cxF&+rt22*{7#b?bB4aQ4?UnhP5SXm(6Pmk*MWTG$C4aV+S_>^ zhv#+8pN=2*K8tv<(U3o1l)d9Nz@Yp|Ggv!~s}a0Pw6Dz>jJH7&mqUl=IP(5C;C%98 z^e5hIHB9lL(=ziun#)Z2272B7rDT)8pth|e9~p7MLMb_5AG@V3HA~&$Z(2V(&FVW6 z%$v5$3tui>_rcGvU2PVAG^MAsp7UyHh$+Q`rer==52Ps`bc}x= z>@9r=_}0s6@J(*xrni0)bRIBG4`q=rromUNat(ZzqU#Ja=mo9x@8Em!apcj!&#ds%h>jkjA?WP|9qyE@tzB$% z*c7E)EpN)^_Us!7b56zr+Huw+IUA`mpaE)&KK>t~7j@u2nLQh7ikBajn zJ48M|;=bTaD<69$Kh9GCzIeu}T9szO@1@{(7WnNTe&4@&^dn>CZQJu_?#i2?M(m&& zy^ElXhw!cn@5)Tpk@6(XcJ8+X)GU?vBbfOdN*0jW*6P8zqR)bXM}i00Au9U<;>SAk z=ud{=Cr05jrNDO>M%snt?$(pI+NsTwMf*DqcKNFoc9{B~Dj*Y;5@fE3@%S13I``cw zEqGVJ8uwEll!XPz&sV^MLx+Y+R=~f2?-pp5az^Oee)w-gD5DbfXYkLpSbIk_Sq(gY zHo7yi{wC0Qc`!ETK=7e*Hp{e*nbJLgdkS<|4gR`WO1}b}U~>Z==wGKKjl8k#p$@_y zao~|R;1~Gkt6QGLcfxOdR%^#TY1#;_1*wZPABE51pghCd{2k;EP`}wQ<;m(TS)t`& z4qpeKKdh~nc>1ESpO0wQTDMr2k!Ze;1b#EccVwko^fzyW{878^BKoLXk8F~a)@Io; z;-fyy11#_n$yc2VTKxC`jX`9G^!DsV4{LvRt8>&weePd2k9Jl6L&-jQ_LiUI&o24N z68tJ=mni9TGPQLz_pJaaj9r4mTqf zTLXRcYVAO=W*2e*zYjJbmuy~s?k*4X9Xjxo1ljq~3~o~!CFlZth(hWYr@o|S8*8LK zFPd*cI!SX;_mrG z;91pvOL+4qX4XI^J?%)-1)AEZO-0@Xz=`_zy@RZj$~$=t@jT0uNVZ7ke*>962c7Jm z&JZW&jO+%F{KxqiPVqGEBRND|lo#`3={smqJpQdb_N^xqu{U&t)+_qu?0zfgqof|{ z$eNL9Cp=Strww@8LBCXdt8CgZ+K`t@ZGW{JIP1^U-?a$5`cJ@te5OAGI{gIqiTqiT zw;IbtSvz2mwIcA$fpW7^X4n0jMsrZ^3;8*_s?fG>H?iVM$Q<>zPF zK>ZuQ=Q`A%VzPhMU_W7ieU}(t-J!=6XKS9D;P)A0AMf!yxUZ(DVjRYq${HJpuTS}B zN|Nu0_xSWMga7vY)vP_2`o%9KN62QsMq_3dZly8L9xt^GTG~2%dm7*LbidcqdBqqI ztv}%Njxt*q_0yhSMm7cMXrARJz#+e+l*bFAy{SW6wA(FU1TWsw7Rpw499`!g9lF0^ zv?_1rt_7fj*9ux&*%`=xZ4+X(9@xg0^I2fy8Y$3@xTt$9IzBEv(XSHg1PC96@cF!Y z)Mh8!VB00=HnH7Vh_>&V0v_W&LUC87hBIQb7yI76HBz_EJ31d}=)M8>A+$lR{VbqD zwrJiJ;qubOXi+b|KMJ}WdpkLjs2w8sy6&=G@|&Eo_vMq{$B&PXuQ4&no?7tds{B|S z@t-2zJQ6>~d-h_qo93Q$U5pmeT%In-M4BPrS?KZZ=_$&8hvG!I6_4$kzQyz-J>ax`c^#RQRf19(#oSY*Cq79!Mk0p+~ zpElsOmQ9Yk$77MjDK!M2#)`ry<89EhQKRiaF^`+$dmn%2@Vq&J-lAOV4XkD;+F4Cw zK1*>Ade)Xn=0@JnPI_^3dBob(u*D^1+GxDt1Y}_N8rDSdc62Ul8eA#nW1R4ac_Tw} z)h33t#<5(T4}6}{SaKw>zZDy|IuHK84gOy+nLMK=bEsmWSXYqwU*!?<`?ww$`lDYp z<%Uimo;!{)SO`T-~V1%!iDLL7suckI>(Y3}{6Z(8&YU>E59WYaI?E=hofVlxM6@}(R+E!W@_R-kP3tgzY59K80zs%QibwdVR zOpQdf{Sd4sF`vhWxS0vwdW^DgIXJItaDFDo;Jk4$F&tW#WsENg-p132DGz2Gep}XEA{jN=YCwf%c zGL+LfGuq5bht{&vVVWyU{&o!uLjMCpACV(8r)@ZD4o26raP(l(Xmok`RqD;ih-8mU6<@=b)IpSke{E359ycT!xOF; zAMVolpeEo$`uoNQ&_DUoyg2gL^P*`IFYb45Azu7q-j(s9|INRE7fIm7pmWQg#``BH zuDev&=^akQ>SU|PPTm6A`!(N-Y~Bn$-cu1-I@)}c{GMhx?aX$h^UD1~P;jw%Z{1h4WsvF@vZ;GiwDvoE~GVU2ZG6C4hY;sS}Cq4^(E!L?pj5dj@~ ztaVZVe(@3Nr&ktMM3k}eqckTf#ljAIXS2+dd5mm+^{^==q?CwxC9YT0`>AhOv9MK2 z2@6-ikD`7)k8)sU)tBU1gC?8Dy`QDq=djG?*I46MsZTm9)oz``(ih;JGLN@SrB+-E zP>yvT>0UHvyJTHy{W})6;eDkAyqy=@yJG^rE+f7bN8J{sHN|>qdjAzi@t$z?;vR8J6X9>Q3cUZD;z`NM=h_nP+P8pJ!~Jq}PSxm~iuBVs-l?HG;G-LG zf2Y@g`yE=J>H_6II~u+;eHV?fx`CGs_}_+Wr$%po)-;a)LXF-jar7Pn-od|u-h^YS zbu#WoyqW1Tc!RDSZ(KVyy6boo-EY(A?oU8>vRhr3pnD>}3;vepm@L-vE(6}=Ly(St z7!uBH>#Uevn+n%Y0oMq8*(=8PL#*ao*RuAq zxvuqp3BHk8Y9v0EoND|I?X`#2vc9e1d|t;Hwu%N?Slv_dGS|{T>U>(qeq2r99k6eG4=%YjAqNTA&6S zLM)g`aRg%edc?#OzbTclA4x1?y-AHU*jVJJ9-1$#M(QhApda@%X5>cO-o=zV3Uy0H#ln5s^vQnZshBStyMreFuI4TFDE6E=+!ymGYo}{&h2U$~eBiMSZsvHlj0dNSv_S^3ZJK=%j!EBFKH~W4QqCuOVWn-$^%L4-)p-cwa`(*O1SLJbZqSwg!&!4D)>v6h7a3 z`!p6Y`cht5i~-*XK5qsr-rqFk{LRGp-g_nZqRo3D4&OC@GkhoZBh?jGL|jR%yTh)n z`AC9%p&Y-3b$jo-iMJ&U_nE_GR@S(C8Xuc_#IfHTXs%}A=4)B_9vT}5f7f}`a0Bo; znKHU;L(=|Ie~UJ5+#od$QM>e@+GcHGhZoFv@aRJsEbys@bl^2)p9J`*j&=WXNRe zN4vYjBiUM4=CQ!~3>MkYvijK##Vq_Ei1WNl)bL4D%F1DI$D1mdJO+&D!5+2r8e7(eB^6+uUEqbPx)sy;CV#bqveaJyGg^J=CyD-j7B-{ ztkAQDB&n3{3(iK1h(E-eczzC^iPqMEZ$AdiA3Xc>{lEF`$Q$wU;e~wAd{cr2KK48} zJ4WYEX>@*&`W)k64~)x-V_a6&#K}tN3T4Hs$%;brj#3pn$xDHxOp+JZyHPGLUR)dE zj3EIpt={;wBhOp=pAjm{r~oO~dGoE*Iv-C6Kg%E?Sk zPGO-9xmWaJx~jQHQ0EF%p@8M#*Y_vRV5-oNK`v^Jivdo-Cb>Q?ZX z@N-9AdTl6?eTkQ!g$DWg!#hHLHYSjt-Kmpp%|DR*SPizuKDuoEm(?caz0PVc3_03WBf^N6Y0bUH_p?cga3u1j1UXSPlXz++W06zcMlX(7bd>l;jQwQDgLRNVhQL=8L)-CJ)$B=@!HUTbm23*oFfs2lV6?#)P zL*nxZX$_%2C3o2{`ArL1nAXKJ$QSH^qpVco^GYa<*Pgq~Dv2~V8Ol39D$1)Rd~Z<0 zZp3M2L8zmUtg_*(#}VH(-|Sks4_okTr$&wCgQ(;+fW6#+q#nrzQ^B~R)$YCw{|3kThjvZppEbt64{7|n!N9-kHU2Fd=bzdX;~(Hm$v=EE@-IEczxjmw z`OfM}-4D}vSP32~^AAnp;UBM%hc9V7JTi%gz~!ll^}Q4i{~Z3EzXJZ9%Z>5xi3|VB zzyB%z#m^t(F$UUVn?+i+`VYW4lhtm|gzx_Mp=Yf!u5tYW-H3bUY5whpO{_gnAJR|Aq2;s|oHfy$e5aL_`qRxd zU9`8?j3i!OmqqY)17pQriJOw#`0N$ z@>zmBxl9}_=15S!$?z^i%YQk&^QXg(WlXJiFPma|_Zc~+cYaGu@1B=0t#^ye@1Ne? zpvAU*cA}74jk$*LA5c1HSJi+OSfCF8!Mn z)1}wUF^AnFl07JI%E<$C|+n zGhT=6EI{8^jO&n%>rnG$bZFa!zq0Kz37z}*E7ZA9UWn=34$GD4+}#%@>fF<>O&+5r z`QE0<{kAx{r{^pEy^|pQbnSZK60nTr$LrlTO>g4!81*i`e3RkbB)!x2m-fCkS?|1; zX~RAy$MkN9#q=)Opm*)krS&f5ebl>FleSl))`q$5|99)%+i`kVBxM`)E^Az--+Vi| za}%yKPb8*K*<7EtST3bYSzMR+{_}6gbjf~6T@vL|p2KfX)TLvuPTu32WOj=t%Uj}P znVzro_fCTJ)3xh`OTaRgAFoSWG+l_#W7MVi@=bNl;E5wo5L53gpCpsY4=8J75d7}eAtUGSh(Lvdn=u@@_)`2jD| zRpIKM(_13;M4eB2!Sz%BYeRJ`PMokt=&!{SvQKzs{LS%#mR4 zkQLHsu{Wul`;_D>l0SKfd`H*>Pr85Ry6Z{b84N!wBEQ`E&qC*D?Xz=^#QOs_Aq|aV zRc^MVOAo4Tb!()+rgPDqd~Z_9w}g+?_2~0kz1NEQt=7$!RWwG_fb?!lMFh6xjGOjO zKz*m8>Afwh->V0_)0u1xW%rm3FwKAoThb%rT|Ho~U1JScv~R;EB{bJu*_w|upUhYJ zT(5I>7XCQu^oi@aZHx5Jg}#!W!WNO9(!2@SuA+MIukLC!atL}lPOCYBRSvW^a{AME?|iL)@=?S)wAYd>`X@oNWzD71c;5BX zeAVldq*80s>K1+L(s}XLu z_@1_O7Su#OtZiAnh4|27ptsHk88p6!=ujaA{7%;Hk~P~WOQp1S+sN;Q;CCYU-j-t} zeu}YBSw_3P3H5p$^{4W9oKJh)qTF+c&nebj zi+V+GWu=6Ji*R6SM7H|EZ(K!t2agtSMjc7!jPmS|Sd$U|&DDI~mZ1&@60CDcxPL)t z9dNy1k~|*;ZmSouM)!19Ta`w04npH|4mKTN0h;Gs3}4I&AI_V>$72hvsBZ)6TL9V? zK~H%Y`<6sM9;P)zE{@a2FL+yY$>JX1(}L}A{n~NAVbLp8A`OiV{gkNd%ugn^WWY3-S~M~Q?<*m zo1+ip!v@0ElYEg}fey6|ripU3&f^O|B%}SKwgRye(Tec%R`)jHzKORXkM)+~zEp2B z^g7Hp)ZyjRu{!AO+o`wSJT;8J(cx3W@qRqbyM8DE?ybPxZ@aa?%Jyb#L>*et2Kr>a z@5bUH$v?9VG);X=_%djZXkYH0Ank#-e_p_kZ%c6{JokJ7dQlUd_0`8hG* z72w+8zxdHMJ`A~w&1YG^rCCb9&zscNkqN)2Q_5Q3dNEr2@Dz0x{Vm$MPDgD0f0vmR zRUp=WgU&cnSURnLd>yfq{quBQBCB0Dc1v5IlpLTvL>jWx9Vu4dk%f6FyC~lNfn*K% zU+XQUc3jUpRh|V}o_|3e?|HR!h_PaSdQ9d@Pfwm-qvLIZA5gVN4LT+32<<^#S+ACo zzE(1!i&ZQ(uc#9DG%n1LCXMDV7}5}&N-M45Vu30vi|}XAQbOBcXW|@CuOz-VNU`;L z{{!VWO(@?wvHbY{>F*5C`W!9ps4g#cTZ9dx`F_7Nv)awDTeOGN<5#O&4#3t%O)N}4 zBkiF^>vrCm4ZqPu=d-Bct%E^_)Ub5tSe|#W8pJ^POYUAic=a=YoqIHRvqtjl{X}2Wk zv<7&_*ZUDRvEH;FoXt>g>d&J(Q$DJXB$4DZLJU3t~R44vQ?YI^>|t z(P(Ei_n~QD4cdDG@O2-04(jqY><+DaT!gw4%?IYHO_!U;SMOr&&bgE47m}WSj^^-b z_3t@Q+)6Z%!22xi+xx}$SI74dp1hyccwAyw2V~%PQ6hd%MWdHy#b`w990x%keU2dQ zrx9P*E9G~I0e|C~phW8~#ktb5hxTS@H?zV+)GxK@ zKj?zp*ok(=Ddmi0E#BEdYcyZ|Lv-g0vam5$DXX;#HibW1wP&mL44D40Xc3)vN&OGJ zKJXoQA2iAd%8I>#uW7pS^`q}sJsx|f`RLQedRYFJ^+>$WRm5ZtEj7`)GDhcohelB^ zS~E;*%ziUntT9_^Vv*4UC9V28v#6Xq;)8z91P*<)Rye!2BwpA0wDrUVCe}^o3%>0X zb7uFzw{w}qTC{!Bxvds!(SodTKh5Duur|5Rur`@s4J7-jk2@2ur6%3&&~VIqSDbxD z&y&}%CEo8U@jkGER7-;pdMypKJhxUg3tVXM4$x3UPDQBctqu0Bz zW3<-Vb&a}Zsx{bECb0&))ES!tO>|=#-5OCAi=*2Wt?35c<^g7Nf;HVbod{Pc0p0Eb zyw7TMn`#eM(VjocX>~l)6de4z6dcH5kwM^m({#i9-`B-D4Dul=qS5Z5wP<&e&B37s zEHb=}1?X(d;m0k(p%b_sr2C}c36m5!zFb24B=K{XZEw(7N`03t_i97Azj+_Z{oU&m z%biNEMzwv$XfGOCUw#3y6ERsr@0gN8%aU1l4{#$N`K2Ur{twM@-I&C>Yw@EqgQ3f{ z7pAfH*Gw}*4)FO^(+t`ZmiAu?J(dK#=^QoSLi_0Lhy6b_jm|C;YdZJ9Pa49rgZ768 z+}AWX*>Q06GqMi7PG@n8J$49QIob!>L!IXEy=;Ixi031ChW`_$H3~jyv=}m8N_l8r zV?VxCn#JDYebZueZ+bnpZZeV1{jKTv#AWC>VxVJ3938)5pkv!*==fWrBkhj^ShPou zk&a)CqoZ#!9h-DIHW}#nSpyxfxgt7F?#HCP)3kk&JT(&QsW-sP7>7BrFR|0c8v8Da zJz?jbiteN_ezE6QW@sgg?e~^{O6;F@dW!wZY2Q@Zi^i24+c(w3N%@vRBLGHXy zN)mgJlTY&`>?Q3z&(kAb8=`YIrrh_jx3s`Ky3C7s4Y6^NEVCkg&+{(SRW*(Ngy24W zvH7UA*WKSLTl)*fnvZsBXI6OmJ^VY!$~lugv@Tx_S|wY5ndBJZ`&}b%=K=Rf3dKi~ zqZRFLq#;9`ZS0mDE4>+P;@)}__8*%(E=YCO`JwNnM`OnCrpEX}JfU+B)>R{(8e8oz zXquf-HKzExw6orf{CGSn;&dCT!$IIG$)r7KWZ#$h&1$^H&tIcWA#uwuD{-(V$z4#)i0X@=a83~gVeZW%FIJq@%+0?lh!sBZCJq;vb!rjx*_60vB327~rtC;*I9JX4+_ z4kwkv@pCw0Uj`aOA~;^aA^e>4*cKNHC>#)qtod)@Lg}9&+JoNua8hnTaLDl z{07A9k)eyx?n8!i2rsceUihhDY8UA2T=)s#3+bM&hopm~f24;6&_UYQ{UOGRuh;hR zpg8B&)Y!hOw4ay{zQpn2srJ_sXQrUt4(ofvE=m>qw-y=TP`@rSjV|MOXnVtMmBrq$ zQ`ra|zZDWI9;%`E*Hl1l`4D{i6Yv3!qwOEu$O6xcGp`-fwQ_R|<@Sx}cJkm<{cN79 zlW0dEQ1fA&&hoCIZZm@wK?xyvl)L&JV zm$IvDkd;2e`2L-qpQVU>G>tltaQ`&Jey`^Z?Q$Jx^iS!m9rf;cAtfe*4}fMzaZhdM zKG>TY_@Ss%=C>4xb|h2?e|H$qZmGA4^tHgs0yGB+ww3SGRBT~^a(?bXcIazE z(Ve>iqZeiUC?&RMTbsB#L|dF4I*pjNPGUt=Cj8b2@q+NYJKeDNnjv0Iw0~vQtKdh1 z{?vd)i;K*x+hL|Ncj!D`$At5B33u9?Ckyxw%dDH~cG6^xJ8Re4zc0zp_vWWDL}kn7 zEza}8ev5sN9JEIlKZCX5YwGA5bk2n=;zXB~&JN)GI+BQAbdEgLX)dk-gFPJp-RccI z%FyJRd<~W>Z1%)+k0$T8*z^17&e6F2NYBw(qz1U}ofP(YgBX|KdxcK>J)QBGHL{lG zX2IW~`DPT`v42)0y|B#>$!gOIvaJ_rU5H(*3;8%}^pf7RuypF@f9P6uizh1fET;7@ zdOg9r4C1}y@>Ms?5odHzoBEFe|q}ZO-CR4{rEW(fsJ$? z)3?4=O}4NwN65@k$Ya;fc2!gCzOh2^koHQZeJbCz$K-j`PJSotw+mkyGXu52w8{w?se*iXaerIO z_L&X1r*~f5`y^#0+SMY+VPOUQfQpOJ9%H-7+l-d-uot$1bc6P*(Pen$Nz#qI8G0Lf zEGov?z=I=Z7Jm-2v7hMqaT`hd^-#M?wsD&QcA*BFWb7`$-pFF{%OKidqT}mm!$+p8 z5$`|q^N)K3kLhfXtk847#m#7K6x*A#|LVZ*t5x_0=0-ZpF=e)TbjZd6)}{?xw$q%; z?P|o)u%U$d@Eq_HNiGJ#pM$emJHdC{z-oFgli#Z4w;J+4qvfZ4l6|t3(|Hr&u`k#Z!MA7JkpA&V+l0 z&MafT9g6jpj%JfGvR#YQc58N5%+s6^di;0MolD1}6Vi6Q7o8Nxz&`WyLP?jcY-_c> zdDgCz$UmIP!Y6+u1>XToiYr=etef!E^V@lT`#Klm%+F=e*g7k`V52=>myJ{a<^|~E z>gCJeBC^_g*ns0-P>*hfO@aT3_R|)E?sh-+N_1y3Z}(<$ygv(^hixLZ+(rHy;I>yR z>!-7v?q0sE-zw#-tSn#F+MvY%u!BcwZ`sa@f|17&|DJq6eY#V&jo2WYA8BcyNn`g_ z+P;@VwnHi=xOz{cWp26vK9#M`b3;vVK!U|QyX6*-D{R(`v zyAQhhhcngiNu){D<}e?gE&B3&fcI0>jlQ)*hVD*ghv^I@Rbr(?U!tc?vbCO^4jy` zY%x3G8JFh+lXQl!D}p~n?ZOGv9W)P#ed4l13&kGiJU%QP;xT%N_Bh{>l?dOM4@>rH zQI>WN&NS9dawUBa6YmjQQGfK2p%m7gWl#d)1R!~@&4d)oW9O1r1M&aB$~Ia9VL z&w{$7`Kk-?qj@BKxW1Go{8cZmoA9G}qY~Fz{76syxVEQ>{ecf98OlpCl$T^EFDX_Y z?djZ=?yK%j7yI=0;rdd#n4{1InB8fj&!-aaYVo6f1^@W@qT;+B@YloOBkY#TUjA$b zjmIJ`1byPuQCm)FJ_ovfPdhI((bzzMvEHxZ_ci>!j^88r?ZB@MziyfJ_TWeIf_8E* z#esTzC!U${`4JkwAHjPsWI*3L-m~b1j@7iMuy!^u&u3wVeePrZMTuaL4C{N)>un_2 zJAd4{tHyopjs66|w9%gSim$o~@ERoRN@d}p4n?xPAj;AAeN8;?X_WUjnnLi4=$!c@ zZd}h9+V#)E1|Nmpqcb&fXl+7vZwc=^gnUP3)_5VObLO39-ZnWDlNcYj0!AC1U-j0p z64=aAIBHSUIPQr&4D0sQ!7zed~PPwFkDcckxxvsuJ~jpsoZI(K%(gHnwL zcmc*L@VEPOTK$Z5Cx73Ea$P2xPsNIyKGtZ?t>Sx0uasFK)wd4$C=KP!GtiI9oQj6V zGAP|4I-5ttsFS|$#kafg?HK6d*4`66rkV>i@%+yBcF@_6Yh*rdx1&Pa(^#<{=qST` zI@_k;^YX5t>8=pX!zjSBE0wk8LEf%T6}Fh#fICvf*&4>UFLsWH9-oiNbY(QVLQ(iXJ-?j@16V{gv`yz81GXr?p28_-p%>345&{nSpvy{7!o% zZk?9hN-$6G_`$*3uNlaTHiPdeFf?7*hfPm0eufV16MYiTm47dVX-$;A_a)hbkBL1p zJ!h$(13qXpg~vD{`u<)D@7H&bZ)&Bp2g&ZBee+ZOzN(HEfWLjwXb+Xu0N9j=Y?nGy~e2YbVUt@eO1C_TUMacXkDVI7Y#!&u_Soy@?pHETt z-HFP66lL#-mAz3byD>r8Q}|CIvM(ng6C_jAr%wGj1(xj{yx&J(r-LhxWXsEt?wsss9n$)d&Y>*CXNV<~P>IHW_`W?<=R%F&ON4Cm{;&_E7|tS$^CJ@V zpEVt${=i!@pG6s?dtIEk9Msu z&LU_>aECxUX##U%aC`qM#plEj{Ww@bo^r^x-*`RuOnT1Qcmk@3Ft`u zEk-&Xw+lKB*kg43gZO+Vw4W~75Xeq4@9*~=naXBtgDz&lW^9Jd z5VDgM`kGzz!NT|GUc+rhmPd#4DrjJ|9UGlS+u;c1<%_xn0mF+rE3h4miS?cI{c*c~ zK2xIpo8nicFjU?)2r0v(^XxnNReK1qm0}l7m%foGogS$BqTtj<4 zZo>gbr8C}=RQ(J$KHl;(>U)OFwb2<|kU2^hzux5ji<8Gob-08BoflLGS^E#_JEQlY zPa@n`#NmDmo_YF56Q}=BT>9(d>KboPeI1DJQOC>G`3qW|?=sZc*P*SmG0<_-c)cgv zh4Xx$z^s1j96Bd<`O$r{H1hVghdM}aK8v~_5Pq@y%jzhMd-u>9^8Fp$_xHi?Cx5M3 z&K{AXiTCDDbWSS8=5#(P$;CGSdoy6eXYKA=6N{rLhN6BgN=LBA$43(Gf35G;EzTc$ zMjJ=Vu?xQ=nen~*!=;?&@#j=c9%nd@*rhA~=F*`gRz!O6_vfnok{WiF zigQIOBYgf7A17N%=eV!s>mo~sa^Mr!Kxg4^4$n0OD^VZXH*5HDQ^ARiEO7jB_^KnJN&hsmmIJa|vd|p#VNLdUzKCgy7c}fjpD^Xu5 zDRzb_KhrcxJ0~{Nr=n-TbD6IZ0;fXqCC6x@8z+4MqLo{7V96Nc^u_h`_rQD zRiHgTsO?uk-|yG@=X5p zzWwo|p`9zK5BR zsr_u?`{zX;qH(;1zpu9hCOo&qo+rn{rch6&u*c6>S^GZHVcPGxZ8rqF^j&2K0{eeT3L#wGq&`kK;_tKzdC01AJY2T;hT6S@fY?i zQTrM{Po>N%{OMV2{2a${omC&_zvA;C!;3UHO$Io(PYGx8I@=4de?u~zb*V-W({;ZB z`lXoENRY2A4y%;;FE+F9$eq&mj(u|G$XxJMMhqmze6vF@e4xx?Tj(XW(YgfR|GTyeM&Wm2?Sc$szODsa^=sTsWLYkA*zj5uM4m-a0 z<*@+TV*Y)BmX^{HEGuA8+672gsim=7L>fQRR7whm6IJ}GB}o>$_&PWtFO1Mfv^FPKt8=kXgg+4;ERaczvu$L9rRg>D4z31*-0 z=OPRBH3xJK4`|ERGtk*VRvz&rhq7PI`WtiRT}ykzMrs<5=6CsD9*cvhsp}#LR)CF0oH;B6{<4 z18A)X@$vkvkxJOAWV=|Kl%$Op>2S^@fMcxBwp7-hnW7S&-SIIK=_Jj6$=Ce$MDtYX zTw=ZL`|04Md8(xo=cx{txU*P^ck(>d(hG8I{JLu}@jTV>^Vjoue`Yt8^}#%T4*O}P zpgdg3l;S$}p_l5ArwFpt%hHy)Bv#yu_X^uvU4|Ho;v8Mx@h;inUIT^AxxA@WfAA$%j;HUpo16|Auy_W6`a3Hd9uGlJ%ed1n3t zY!&&y{x8Vly*B^M|4-5?KJIui_TK+TwyH{Bi$(pkk~o*?t0=P-Wz&8@>ru9GPfm*G zX#7h-+6@+VxCgisey`J>pR`Xn%>zc7EubaQ(E~be0G;?Apn$natB)d!wbYcK%D+>a zqhYiDdgjVKS+m}+deM4t+C$nYWv!QSJto`MA7tWclUCl}Ky#lZF&6l8e%377Cz|A9 znUv!}TM}?+`2H8|%S>mM()>@FAIGCq}*jRZ>WjrmSFBs1AL7J zCi=BtyLcP0n9rHY_RtxdmD*hRArmXS#-Kl+V{92@Era+&@OMf|@s+{f%g6e!Fl`3y zQ}Yq%*4w7+l~c`siq8k%jE@^797mi&|ETYZdwamv|!rulhKO-^6 zH^?R?(7(IjlYa~OY0P@5No{i58J}xGFf-??Tgd12g9o%n;0FOqMSIZ&U4y-Dd=@h2 z{UKWwq_t_1bzO^COUCn2o@4jVx{vT^aUk|Mz#0!u!}TO>fa zKc0ebTW2&ro{DQ|hDft@#;Q+J{CHqi;|cnHa+a2N)+(Au(%dn>aW1_-Fkigyn7`^{ z{QWhJYwh&@8twfxtM26Q3mPA{(fb1JeZi_b`1=KoC;kt6?;amjb*_)EJ(J5^l0fbu zs6*hO$sl@w1QL764yX;p))J!C_Iyi_W1S>=&WWHUDkeZL39&5$*tFra;nLb<)K*JS zMr#S$_JC+Bps2l(K-Ed&4H3wIVSdlE*4~-PWP*Cm`TckP$R~UDUe|ZM>s{~ruJ>Z+ z`x(aj8N_?MpIJXmzMpBlpSgH}d_SvxxsC5<8SiH;{+xV2ryge=-p?`K&sjWAzAvgj zp1}7-#`~hh#MQ?6CH2$zzP3cYpI@?ghJ62-`sML_{~6=`XBN{grE%?N>vzNvKA$z< z^V!8N$setiFnkXDWVxNswz{?4w|MWd*eYmqVE;&!*+H3qSe0QLHoT`Tj_v$^vaGVT zC9R-ct7Tm!{dpE1S8F88W4)Lo&ZG&nW$`2^+sm5oXp4DThB(_X7QoNhgm0hb}Vkjj5Vq#&g%4 zb(C*s0`H0QM~^C7IF$1)!FSeUdB(CllGY;WrQRiGJ#yNLpYL-0bh`YsFj@zVrckqm}s9e)67Rl!p%De+wx;*FB35BOcz|+@^ zbMD9EoO3P48PPoEoMY^t9QXH!!{^)`B7DxR!a0{6anAi{oO5n$`{SQ;G0Mtw?k1db zXRO)do^#Rlcs`GJ&XLDUO(?y^cH+ZH$)g67|z)|92hM z>KetrY}Hhb2iyCW#njn5@OwY@yY6j~IqX}|jwe-kr_^|M$I_#H;1HX!HoNvof1)^P zk8j%`bEdh|HR1nrNc!Zs1Ciw(H_9~$FU!Qrm-N?&^1^5rQlmGTZ$A`S&S+OOh08^s z|L0tzd^_Dc(}myg!EiS^l;0HX)ak$U7Hz~0JDbbV?#{TOc~UOedySv_Y%1+{@7FhF z4_~`!Ki(H>iQY+>`o_uh>$>-wLj}_&OP%t7Ma(5UX8u+B6K)*!4fytAL_a-7-wDzt zIm`4>bY~d8K73yGS7nb%ePFjy{x=bA-0^p*FWg9-+c}pWjLjE~@pE;PC!##^)?bw$ z7VS?TifET@UZP~d4Ys{X_k7%%DepLFYb5VX)ZNyGNS~?|XyXK9AOpYIZqIP2ss?aV z`iR&*shzH-%38puT(dbmeZ1!y?O(gzxM%p|h~I21eUzHpS%jgv z?}BO0EuYEMgU1XTH&=m@f$}j1n|8@;?gc*Ay6C^@aQx6>X{8>&!;&?43Uj9p{1%)+ zU8q}HBkFr_j&vpnZ)uT`aXV`)qU03hCFX^3X<37}$g?@z&q7V=bPf@JX(ySfWwx>o zZMs-b!8~5Vl(q@f)9@~b_FA;#CY)*i#CtLu?Kh0Mab7liQzdb2sb;I?9mc?do|2^n zO1Ir9bXXF@mQ4Y z(Ub<)k_+L+$LXi(+cpFopk4A=Yn<Hxhbvbj3J3VUn7R*oy59v{SMGBT8sA*k@ou$Cl! z&sNO8yp?i5IbdhE8~!v{=PzPC>#&bH?BLH)j^nQZz2W_XoCDUkBU$B^8uJZny`t>$ z1M-g6npDBq!c(QqQnveN7|#kzPQ`JYLvLWc8OPz6HAmV=O?jrHGAB#=(-nE5{Axb{ zzx5JmHT!aj^g6N1wd4T$BAu@}rI)xt=c!w^rFP^l)NJmWQ_8ks{Qdv&=lW^mJTuSr z{$X`io)`|FY0Ue&GhUwSFO8h*@uSZ5m&QHUt%5qhv^}VUa#aV7_Fu<;>MtiNTS@no zf0pNdTJ*X9r-*SpI~;lLGuK2`>3TTZyD`BV89H_amEdoh{73{*yiPhLfz$=v_ES)6xw0w`Wp6K zW1_M-Y;-Dn=1fh@U179wuhE9&*8q#dXzN43lDby%Ew7wUoY#53w#1dnd-bNu!dcC^ z9w2mm71nPfOl1Ws(ST z?wmLGCAbv-8Ed+a`;>chD{!p5U!Aev%GK|gLYy;VZw647ZB?Kj!&hN3+nj+teGc*p zzwx*G9d(Y&`jin-x7H$UYh-=1E@39?W6v{o%1Hea5%nqWjZ>)Rf0hi7g2=$KC z8}8W$nZ6(AXNG2XMy?&_v)(>5w*~mj@e(%2v7df+zU=TZtKFykaAkhA}S$UghK5EXTR&(X!<^S%`BoSIN9`ygPxT% z&%+;u_xMi@I5T%3e`gr>2d-`vdp^VPU%BriMcY`G_id+zvh{Wt_bjZ_`jOh7nAS^dZVFv<-3D#N(8y z!TXhTf&R3JoOyxsNB8l5i+(en^Ve>&-Rl{u$`s4T*&LP_v>!d#6CH@y<%v_tRz>hgF?$1nYs{A2kEsQB}k7sB< z#xy6-u?1rbx`9ti1KXIhGcI6Q758r+@)Ye#AIJ83AK}|fd zAQY;KdH)+_uS&bVfR%pIJ?$<{8(asPVY^S;Qh>H!K|fnlu90!==g8Ri!2P^LiTm_v z=N*HT2P|S2zh&TC;Ixe2LAy)ewn;eC@XR(?z8Sd6I$Wck^Pz6)@*X)CKI3A=#E697 zF|7Agi|Cd*m*i`Lay(^fJepzaI3)({{>nL}3-aPWWK92PxQ@0jmar|$CTuG?|E&0? zL*U5{i^W-6q^;qHYbqbtl%HCsrQDA_mD+d}&N=YLT^5^v$9Vz7{`*iC<6FER#L$i7NXJ}n@ zc)qtR!Ta*H`tFn9>)D?4olFpq_aula^43KSD~Bv%O=Y>l4e2u>3|rToR0_l41Kk)26POcZ?xv^DEn#gYovyDC;6jmVw@wu#@d# zKS+FElK^-t{-f96Il!-WueXf#p9%u1I3wX$SsE5Bf(@HRo#zFp~SeRDKpJ`r}v)bVXa|Fq#C zJVCQ^BIz3QoJ=?Tog?Xm>~EW$|2JrR?Oyi9y|~!uOU6`*@<%rNh_-FH(0Rz%Cy@7~ z?!=-wOdkce>^IK=`NryAFa^8<+GHHWA#1#waS+d06Ma`;ER2&;Vu>8fBsrGAXY}A( z*2%s%t+~E8tT~W*vwg?GPce6m5obuo@|$8UJwh7+Gf&wdV?eX5Je#C}k#)^_#1EA( z=E8A7qtPppHuah=N#z|xL5hRPt)JF3-vep z{8cb@j_AP^Y@J^A+k<`|Lcip5ibnN25>r6R>hyI41FIIm%Bgdi^19 zJm%gzm1p$^+RK)g#d)ubYdW-4vklS*_U&~Kw9}Wm;@e_~a^E(CpB!)8@=jBe{!EXh z^-`B6;?U3OF9hwcuNYd0vzPK{*8~yFH)1U_b|?LOSw^5t<*V}U zX;!t0t&rM@KFs=4_6lz;bN8)@AE8@jJ?drn?0S99PdAz$d4CklxZjvm&WJb$y}Ls%T04V4q2z9pSn=S zrqd$gOUG->Z^iiLj19@S3Nn5Vb>-}@Tr=`QXhwYU6zOB1X2rTkj^!wY&yG*p*iM8?3wj6kEkCMm5AGK?&5Il_oPt3w^CeuNcV%eK3fd}m zSVTQzIWdpI$-z(?^U_iOl$I+t<69kdNwMN68GM}duOEpCYqv<7+;9xr(Q#!(EV(i& zzuYDx<_qUL!JtKqU&`2yBmK;D%3Mp*ei~!;W=mUGc^?w#2M}prOghm)`_`!bM%v`Q zX8sWK_oM`w$A_^I?)V7%3UhMiH>D{!I31DmYP?@`5r(7qKG{z=CNtw;a&K=yTf`aA z6~>1S%9vcFajC-Z$`q8DnUhEDpGk^db$z64!{r__+Lv}O_lYiBj_}*QEWECXsNbUv zxiU~c!tW@CoVvkg?5P6msmx`{_cT9Q9DD-%i}zfNUB45wcL~qF2>9epRi7}H4kaa~P6ef(V`<03FVaEkkF>jc`L6uQ2s z)$fa=4~M8?9G@P@wXR2%PS*9fs2BX7s@3z3+*P8AluVYyxWcTzC5UOejZE8?1fs>p)|v;MJr43Du1sG-xo&8 zOqgxAG##>=W!9t^`iBhP=TW9Q7($tev-hK305EE-3UdoXy}hi>PnN;XNT>7x&LimB;0MVTQCz z-glAMEU=%S$2iMRT<;%r8E5l}3I6cDceLg%n`xV1E7yYo#`Up?%>k$4Z%iM|Xnrf&&;R0cGWVY3wcOX}K{-~AJz}iY z^#4B>i~kwlFER0)io;Exq3T64R&Mv#({aWvl5s&d*iKv>q~8wX&2<`nOr{@?ZKCck z2h3jp{xvQVLGmP%KBoWZdA)UZ#E(BnJy4#;7!Z2!Cq_Jj_)pp1;j>{lO#z&mFdy4T z$~VdOQP?*Lb1RbbDN}w)I_C3z)McN6v!nYQzV~TG$LaG0JPWvly!#0d_wWw?gY>QK zl0N!z1rly+E|Yma0^lJT)2#n8`oA|-I`f79IDN*h6!iUn$zC?y%eYg=j)VW&qV{s;EM@g3AbYu>({s;zC(2X3sM z-{60`6O|s{cl}uvw|%sql)*=$&E6fBu1@3rmGhMOOeSOgE;X-a>Gx(WunQTx19Ind z8P{0(1=@Y{(0*?=aK2a%7M_(c3xZ;%9-L)9&(ecen9oIeaEAFj9rHGy3-sW0^Z9dn zaH{!ShWVS%ePzLm@GO0wBmDGeXD9jG;|8CLcUOhNK6=r59nzX6>;c}7b5Hy@P5M2_ z{lNDhw~=FIvCXVw{D#8rwqh1ZuL1OTQg1x z<9jl%2;|K}v~yuO+MjJWC*!0PY7L4PdL*do@cYZ)d8z;X?l~3v^B}&_-kCIV?K%2z zi6Wz&L-(Ikwv@D$mh?QN>iiCM&FdPlx3Bzsra(vH2|ej`mlLq&I-= z`_%?~xKDm{miZ8x(mWe2BY8JR-FHR6+tnl<_mJ-s;sotK)3v5{Ij_7#FZC+CyBoRh z6Ql0?9^-xA+wX<%`+lAljOFRON$*Np!!^SeOyrc6Y;k13BgN!~X9CwdU_=&lvY{*y5+8>UE_ua}f3jJ3s| z$$g4)q_yA7Rrz+=|1>*zr#MmnJ?WQdt*el+CuQ!k6K{YgXKZ1{LdyfJ7bl6$tV6uc zN4-7I<_{j%sORb_VGOq^c-PAqq7xWzD_oy&6ll|IhjHk(o(&b1emL4T@F4R6VE(SY zIK%IJEdR#X>)WJXstNz!jQGPHpC%e0^PS)t{LG=B<(kkoz{ooxZ|($q zm#CPee#qhVcR)z5Z~ien9W|6Hi; z)X6ZMbo>t-H~cNqqvNXoZWO#$Vhnf5SdyZIvb)NQEd11?FwProy57PWY{q)yI?)!M zeKY?+uQ2SfKMEC@^C1j-l?~1)`sxa3^?T2T#+}EPF^}gs55rGoncoeTVUS4-OW+C&wbC7Mr)+1~KSxAz;zIPG2F z-Z~`nvTDA*3Y9C6@nrX4?-GX?3!Hb?%)5BxBC+JGHPPL@wIla~mqE|25UC;TsQ~(2 z6#=UP16Ge?-Kg6v53W4y8g`vn26`LV0{+~Z>ke5(kh+97tQpd#^|&?12RX*CVuGj3 zoB_X5F)s@_o}Z$vZAt1L;^Yj-rs<-4-z6d)d~Kz>X7ZAXGA-39M2Ra&lx$?bV(5v^ zcxB(tG0+BRpG8#WUM$iVx+X7~d$C9zYHT{xfcHxauKQqe0%#}ZaWBeKhq@o%TrcV$ z6sLByQGO3(DFHvE@K6MboF7{ z2yPz^&Ar7sH19azNmxyU{KvZp%(1X8K^%N%a#Q8)7)vvKxhK(=J6Yn#y{BBoJXagF zY>7i1=x^VENTsaO%$(MMPmQK*!96FA7DL8K^_*}ObL=n5J(A(p64W|;_t{X}iur}D z0h}9;#?uyB)R)&yUQ(C#<90jNgY6LZx7&r6IAGUu4%n==1Ercc;ojEV&i@|N>wLU9 z*Ap*FmTsGHVhidFT9bTE#v)(cbf`Ree>;8C9bNVk--21+YUdf=lps>M-_BsaB~FHHpRW7g_!{&03HNb)UyJXq zU7~(4yQ7_JGw^Chd#A;5z^*wDlxxmb#!nGidh0ezOZzV-h4&Hd1mBvWtG$PI{$b5_ ztNXifezruR;{AQHysRcaVR57Vde5^Rx%TPUTbPgQxq?CRo{YBu`r$rhjh8fpxoB?x zAWSbVKB(x0^tFqTC$P_&D0z@q4u{(2T4bJ3Kj+?$xx2ND)oa5?auG5DvW z=4*}vmU#M0Iea?)TYA8MqW&Og{8Pl)UFv?N9k6MYF&RaDGHv7H(H3)=02lI&z3oQ( zwHJ%xeHQ(YeeaxBSE6`)4q(0Bk`9>XwDRt6>a5vb&Dz{fI8FzTI3-aORfAr9lW`?% ziiUJb-9%4G>0acbvK zPsxnc@#(j(u5be1D{Wem^LxAOlRXZUFA%bPXIw=26qdKh@+|8~5hcy`B;a+2JA!oLv6HAaeaGm z@onGu#y3XCp9=G!z0#L0Uit$v=2;u?<7-%FA7GLLI`d8NY2|>8OUtTbtiw@jzt`Pb z4jf-vGp9HQG|K$O@td@tG?VZpZMxhl`PCv5{^T#X2D$IaaD&9Z(*RQ(JCA2WQ|Wevd3$s2N_m$Vdu-Lu7PhMP(|un++iUOFH<|Q$^4<%t zrOa~^6?K~ruhTMDNW8S+ApPQ<;BoK@rK?4k@}0_bzb5y8qWhIe1|3@- zrepNI;F^(duKwnrQp$c%vJoxJU#eNn48&`^7F{>{R?DGNel7)(h*uX3A8ZB9a-*o=an2a zp1rWiqZMF|`KiJ?fO$0v+h8x?vRz2|vZP51%dq{V1By2;fgJO=>mpH1{97I;4mP6= z@-s6VTuZ)$x&1rnNxycb_hEZV>*Wn~LyWgFV8oja$JkCf!2SZ?1>MDdo`JFf)S=vF zL7ljF!@gEW$Jwh-?^F7S(@V8cx~gUwuS4^F<+J3ovevu7uT)HbwS5Knl68zRI~6?Q zypCMjFTa1W*xY0lMYN&wpe%VGH_BdzvK@Jfr=h$@KYPX#qs(o~d$k>Fc+jmm*DnRH zMSFV5e~p(o9|+tW*9+^a>{S&$cgCn8tiAmDh)n!uR+yY{>vmbd=nPfFebUC*cr zg}P_pFAjfu;?(_GXNI$A@@#>aZd)unuz~7T0Lc~zzo_2CAm+752w6!oUzyp z8b{lpUTd=N-H$?TSE1~l&00P0S@--%t7rV5k-F9xbrV(Hcd(ZzpKb-+V2m@;2^Z+Z zF_e}1Q`CC_`y6tnU*!S-jlg?JA1+h$fqJhgp!pUp)7cFAum<$u-?PK~4Si|fz*yqA z=hvBgUg;&4qJQTnoact&P@CfMM%%EA$}dQI2%P!J9$EIFv}4QC{h5#p<(>1aq$Qnp zQA9fO!tqcWknnx#s-D2UW{e`f|HE;W%b7k_{Qc~4WwXuaJ$R;H9Al>rS`xjUhTDf6 z8T!U#nG-X43(uSV7P~k94V>k}M*O6BQEyLBZT;%Fvh6YZdN``DUqtlvvrpPrANsNm z&E*{!@AmqpaovRXv%m{s5k&fKX|7Wf|a`DuLbdH!TE*B~##?uO;04Y|cu=fu9J zo}o9?A#>$5r-8QH#p0GU;olFQNUdL{`wVCdVJqXKF;}G~8d@yMuVTHtJI{1;&C0MI zXC{+(9h(m@f1)}!3MLBwLbSd1V)}pc-b|Df@IPoUWA}rm$ymFcGDoW(?84d=ym58V zq3ORa)f|InoagBK4;^z~`l8B(%KLWi>#rHV%{<2o0qY;7jJEk0tFIhw5A&v(GdV#N zvh1}+o08X|4?@{xUh3J{f2r|Ji#NV4yUgpO9oLEL!*`RWUBr(tUd>j!&8qBVD!$xQ z8SBnc(O2qb*B*NGY^bft%r9_K-HmZfHpW@MQ+P2(88cDkofiI@smjli@0o9o<%1D9 zp2oAM;e1JlN7=PZw@bSgsRuZ1*tL9l9J?0u%lp+>@h;RIOPPP4kw>xoy)bPLzNm5? z^8T556sdDt$}{$SsA~Q3a85;QL{7z6_sXY?oJ(dND4vtdJ32F>ufH38O`{*C(HGYhHEWS{_ z!)QIG2`}D5^`)x$tGt@A=WULi^S|vS+AAs;aGt!sc#!@##$4%_8hAH6#vcPFjJ3l# zYnU@+lU*|Jam2ijq>9a?6^WVTCDYw+LcRno_wg*8in;fq{L)L*{13kSKc9cB__<1N zW|eZUkvr2(p24)meFyVe2Aaz8-un!F^3v|D|5%MfzcT zL)|LSwYf5HU<>f8rmmQDm^4uG1N5u-i5_gxME7*8-9IXXcSPqpg))WR_f$ynm+XUZ z?Y&HI2s~%Nb;4MEZ_Id~%Ku^4Z4v8~^P=gm7^V+Vwp?MFz;pI|C~RLBuPq^6pe4b132$JC|i>vg4F5I-WWVi1J32_ z=$y{HGot_RKd-xr7$HKi@gYoUL*avH{-jQQGe?pCM>)FP` ze;Q|uU6!$9Bro=_4(7+PyQ9a|ig7VMKl<3U(C`QQGh>l4-ep=ihVq!aV4(A7CXCMc zaZ=?A9kUiMofy3qm5OI;7;i0pXO!oi^@E>cEw+Z&qJ(P^JEu^Faj%o@{|4rHg-1Ov31gZSH{;^87GSNeP18)42O1|{L1{UE=&4> z{NV+gGC(WxFQ(spy3anm;BcdsIrz@Hmi9?#GYNl>;w-BDwmvkTuGgkbYJC80Ou}CW zm;8kZxJ3(7`fD@kcUD4{Qu{aj8^6zV$Ab1)?8mN*8MLS7jx5<3-)J; z>d$fj>*8H#%{~yozBrCK=AnP)=GuI*%#T+@9_E{Mg+rUCVmxR!Tgz@;GaRbQvWD}v z#h>7q(tVwltZ)o_ls&a>eS5a@NAB+Vjy`k_XU&-e@E!QZ9JbQ`|9#WfVtl{;SUR82 z|IW0ZiJeDO#gylqvwT5A7ebr3(euxe`P~B6LSG1coE>L`sq2cRFAG>QT63h{G{?t$ zUR&N*epTR!yOj=O5_q2+dG~iU^Ta2JBF&m{;5guU4CB~}`k%-9DR^JAUGL&OC}o^# zi?qqx#T;u*X!qOi)8*J|o)hq<$4`qmQ`-hU{vWaVIhkgc=jOXsaA*v~^J@0QwMQTcPEal3-$U z`>o*V0*T5V!IrFYA~4C9l;EN9pc#rj5j{J!TjsjGiy zSo)v@3d86MbC zR^pL9ESbJnAYV%O?N#vW1N^whWlpOzp`z!f>Roow<{5xZ$l{c^Mtd;pHiuVF&Td_% zWgp<4E1RrhM94e!i1wc`+h1cdY|d2Mf#vg68LVmddul&ok9hY!6>1AkBmG&>71jYM zTBzBiGmR)bAGQZS?HtR~kiVp?&U3$EXU}p(@2=*v8>8vfMMRV|k2$ z7(B-5DElRo$l_-adtVg61{j2}O_lg#jtoRTe0}(nBYg zSR}1Dxy0HP0<8;8(@MVf!herWl)nEzq!ZGHSM%N*k}`7;bM#*E6z@ieKhgPd!?xn5 zaV|b#*osq+)Er?`U$#u@nqJD>cA0l8^<>~*w&A>+3OFs@t#TRzPcraZ=C+%S{(e57 z-ZN&$jr&KpcipXV-iL9Xw4$B2(aw4;&f7eFZ>MMan$8a93zNC+fe(1!xOz<|^WN;m zyA1;>2FU#VVcU4-Oc^i7hFNBcCT+$yMB22!{;nDm{bw07m+g42p&z9PwivlsD)76; z@F%E=kSBXAkaylwcWROHg=<5K@(0?QBK?$HFQ>?RAgQk?OZK{6OQ|QFwk!YY$Ap&b zO)#JLCdpXv@_9{?H>{T(xo39wDm$@5zXQ)pIk;4F_!*~;@%VTT4BpX?z3@_go?Yru zv0rBq=SF>l>>O#IE6b&cS=%DoAitLmoE=ZMWaeCsrROE>*>sDH382OKEt zsi|S!^To{FL0`9My{p{cPQ`1~__@C?I!L`tb%O5C$Npk&!yX4?p3x3p!GZFC+~*Ea zXp?>l;N8)_O~y-%tKR{JBRb<-vKwqkbD>YIq)tSW!^%&Z=%lr>H4aE@I5v2FK?}=xve;V z8RI8iG&_HpC?Q_<3!Cxn8^*WE@|%p&iZ&~1u9Wd7u@2rxu@>JOW=tB9LAi!-Vqczb zs~F(qM?I^>;@bK7t^WqzYvD4+8@p(B`7)LB&J%Bu5TRpGU;4I?#c<4uDKV9B~rHwy0^rL*EF5J zz3I%`D%`efsQ1zR;Hm3O+ivWWT=h0-8~li zLS?u&8ggPsf|#`ibFA(U%dM2#xJRCRCoKC!(h|nZ|I$Cym>k!{rg4C85xtuMxribb}V2Sm<|SPxIbnFV5S@d`+E(&kpl7Mf;1?gMYg5 zY=}0hlD7KL)1yh!B?-*l}WyqNc?=+B2S^EYh^ zsZ-wyTDp_563(l+d(MaF9#DQtlBUbtfrg%QIojBX`kSs5!J6|1?LHr--R$RycVwK$ z5ub)g9fbW&o|U8gF&=A9^HA@{{vJ!m8EC@V0~v|W1!Wg|yUeBeX>w%M@wqxoZ zEp7RHwbyyC&Gl$b%P)zJ?Pc~g|D>dok7<3Ec^?fazoYT)YiI3N_qF6%?lxiyW~7Ni zjw5SLo{Z`4OlUfE!)pC-=l#wt_L{qQmueYxy2FU;o@vB&2VLy2*y?nm>(c1F_2Vr#r8 zyi1-BnIq@JrI-uvQdb&n)8;^n1Ftk$FX^8QdTe1F0lg#ux;sPDOTZ7*mCM-3&Wc*h z#fiVpMYY9s^kvg7ncca_&2u8Pj`BTda6V`-<-7t}uBNzj*jmq+ah;0_ikAZhJRedq zZkDM=|E4?$8Q8y{@n>b;*F}C?qP*)&W4zvP$~k0@%;D6N>WoV)%kz>Jejo4tfd7BO z`ghJw*fN-GYpuoDYk3cdxo}R{dv(;ce-Y!_6CYPUpZwvXJLK3~NSigAJFsYGG0Q*7 zHADIRkbP@0rvcDi(!f7r&M9~%Zmrxd3J7P$6(!y0TyCE&ya(_t#oBb}#Wak?ow9{+ zBK_`a@T_W?E>;mvUc>JvS^3CR^3G=Kldu$B*s+R!&YKcRy(8hg&5#QqV+Es2X(?OUMXKSPGlRwS<7RKP_8MsdABr1;>`uWc9 z{79btwApO__K!e+Z56KRqQ05&eXGFpOy8FaS~Snq3Aqt8hwCYQ1`fB&dRxguy|P6< z*KiLUQO{fpo55F93oV7CkJJbXKD&2~r2m8M?H(F_(CKc&|8G$0 zAR^{urJRm6$?}y?5u2qB$|_F8rQdkA zI$cyf4Vt?02YN6!v8UuoJO|qKAkG-Wz9hr9LQ}abR{lT)H^+%xyHMtJ#{AhReXzQN zM?-B>Qbjl0Fzc3CRo#D$s7t-VQxilX^{Tv=xsty3KTvwroAAu~RTF@>8>Q^G%Pcn? z-?na4<-UYxez&El{$5U2`Bk#5SqB)~-v&HXJ|8xj7xv9F$`6rzjJ@Veap@^h|4)n3Oh#Nn=r)Y?I5pxqo;VEn8 zfo;q`ATkH1B~qXD(Z*8nkIyEkJhyCXaztB6XzRmx%pLu*t*q6ei!k=bi9%D)9;sU| z)UpmVIVAsc=-`0jo9|M07SszcSBY|?-z>#PXZqei`;=e!d~86*7nVA>b#IR4x&J(1^4#Oc_ll+4p8DGu z_YKm2;I|`t;*7B;Zhdp~p4iDd8qAmbf-)-cWbFP_v8F?Qc14TNK&#qx29wP$X4#_$u5uz%oLby(R_9g4oA_gG}yvO@zZ2W)rw_w*sg zvfC$fv;zO|{M&wY-dDwmZr+RS2af%acdyd6+&;>-{07Z_U~7V+L64zcPwgBT`{;G~ zykcky>fVAjwxLWd^8y1mYk-Gc!y!4oKlLjg@+0HicU_G6-FM8S3;(k@_0y63Xq1{C3eS z`83+!=4;GB=Fm#_+2I6U4nO)gx`IU@22A2)bP7*(#L2=&8~7?{#rq=VmCq(T<(ei;IJ2@fQ^Hk+e;5 z-;H`aOPG7;mHYKgosdWDWkSZjnX;y%eJf~@OH4dLncVhS=Clxl*U^Ud=zYJQFnsml z2RY6aS02E+dLavRH~;v@@?0u?Psuve-*rB{Mf%pSm@m9$tnQO&m$Hu;@AU_0NBLo- z`^<6X$!{6%v*%R&3weeb@u`l{U&A`t@ZX-~Hsm(9As1H4xYL%UySvc0X{%a2UmUy! z>sfBx?JcrK-#m(rGCo$yv*Jm+SR=e)XW^xf_sM)rwAH|!Xr;#fKULk~WW{$qYy zb%AdyFYv8t{BNWc$$1mKj$WlhD%X|{xwK^IbA26ns~1qO#i-X3QLlW>*CkJO-I}FC zKTsIsl5*zg34bl#Kte!!}(Y#*|))=(QjGsiiCeNMJ6^m}0ru(U%t-eRv zmUr8P?r)|&FXYl{)V-6ry6ztR?RDeZll+EuUNL?j#(&RR70ZYtT$Okk7w6g zv}4nQJMq7H?bnC)kp`|^I@Dy80ge_uf^SEr3h(B%G8f3=2ZvQG$cNriv?N+5u~m~g zjQ4G8X3Kj4#@})LN4(d#OGu5pOX#)Q+$wJ8V`<~X1zi!*9(C@tf$)62%x~aI(SM#- zF@)B>HJY}4%s3W*+&Fp@K?lQoV(|s`#NrF=iNzP#6N@jfCl>!V_r&5)uqPH@Xixka zd{{K!Q}T}D33;c|Y{bssoeJfrP2dNXKu)8--B;dH`e==Dx#nBEPNDKu@!Q>R#g6Ip z{L!)TsCd7?JO!lJ8G`a;`k-l3o+@dskT&IqvGyxNAsOdtGtNHxKk@Ff*@y#1Ig~n5 zeoqLgm`x^MJSx6=l%2GZXH~{6SGi7JX=iT4XEBBcj*X5-lwtT~u#f+jspe~*3%l;m z+M;}&Gkvw0N@io+lz&UR;VkcNw}Y?dnbBlPZ?*hd@xjqNdxTzZgRL*D*W(;Tay)I4 zPV^>rFp`X2u%CzMYXN($=H@^3-dBZq4@ml9>nES?1w4&A7kOer;yl z$Z(9sdt$YBv1+dh?Sbd^x4miNRydBL%O>i3Xg880>SeB|&#FADt|}q@a9ua4-^6kH zNy$C6E#E8hgx3-Idzp~-BodB&`O=<5KI2o#gDL3t|C!;;)MB2GPlypoL^_TPhn=zLhm=j~RqzM_Lwj)>NN@G0R zjw^(WqucR$l@GP~MwuVHzEkP1+)rR^XR!WxD7)G(XO=V(0=gYclCw!AD8xo+US!#5AddK-yX~<2j%FS zU5(!#y#bz=@)Xv7k|txi73PBnbOHySx7eP)5o>=mL7b?@{yqYkmGcac@144)(l-6& zT<{okcSG*l4Z5%=K?Dge`c?mSFw{1AqV9h>Tlk;Gb8{-jGg0{EcTL{cK4wq8M&6e@ zQtho3_+111EyuHOf(SAn0Plg8#*5%0%<&xNz;OjEGXA0*`$>$QV>9g>eu*+{pZ9b> z9aOwF>5sYJxYw3}wlgMnkC7`P`a9Q(-#AataA;(nw&6s~Q_XMNN1>|k$oUEXG4yGU z=TC3&Zl=z=_zLs-{x z)3{GQ>J7K|=pJ?NIVw(H41YO!&lM;0H*Cn(=1F{5c@cTLbf?T1$To za*yr3`wnY0-yE9xN~n!_r>e!!+?T<-kv<)kzQY-HGkK3FRIW5T$_GG`^J_f2ZQ9U0 zm)Ba)v(CQyzDy6^y?RSP@1hya+48iSROE<*{5&jW*ac$H0f))mlKB7rJRz8TS9{vOkR&-7Ou zU#@=fSF~-n9Hi{aoTe=pkD1dn8{;u^U!KExxoW}G)^l@2uz#w3%TTt=YY_}wDS{rn zXI$Kc)cfa!VJ&U7rwM=Wan1Yty~_SOl&E|!sBg>UK8DQdpp0(K863Dw_$@A#Tb1LW zKb;NZ2>c?UYsNDjmG@eDN@zQ_RCCsSpScTBUvrA884aGHWa=LBNV|>lOi}zW_+Z)qF!sz$>}C4Tyv=%RcF=yc3{K2}3jP)++ zLw}0va-%K!hu@UiqS~9Ld1*7u_AWKr>rDeM_UznN`b^8bu7K;{rH(DPpVCX3wM)|2 z);ijJ;9V`&WIla-)>*uEz}({kP0?(Qf$v&MJf}oS|2j(v`P*6jp*EH+XH2x$0;{^T zp}Dlhx;sI5kAlaxB#SE9j?`ZWuXj-SU^beF(3Y@66DJsd(_!Gye&Scn$>KjUe%#)I)E%501 z)%vETTGHSkXmqod;S8XC@*l}Y8+QN?9br67C4SG)9Ib4N^?gQt#)qKH!*Zlc{Zm1g z@O=?}w_x1;Xm`-<+~PT;Ye6JyZUUZ?OAj)4X9m0e6}l&&dJ4>Fe!Xp#4^UtU<( z6w9t`3+h~%4|(aAO8-XMN*`~NzJ}0$G>xSUK>S!ae`+h~EqVNTplRFVMb+u$Dn9tb zSl1J4*B%;JKC6}AncJQ@(1}x}Mh;u2CQ9<+L@NE!?4SoO@MO%%n5kt|^r7D|IAO*^ zTCQxd2p{J43w&2E=m(5!n%x;l6p)WI>lSEAKH70ER22)ZeNM(8qz#)ME->uA6$ zV3j&!nTLqELrMU@sfn~<7w_j_zGpGNr#0pjOLq@0XH2Wf-hegN$MW-|;7Q(hGT<2r z%jd|GY0d*yz;J{n`qotbW7=ddswDtImEroA_{pPzd~4|j8<0I%AB^_Eg2Oi z+>FvMc%lbB>R>oez^&kIrLlz?yKs-hlU$kAA#9`IF?m zH}otcdGBZZUFBb%^Y<`6bUAQfXPo4}!g=rG!g=poE|m8kd?b0khNoiZwVxExPtxBb z^V(;bF&#(cwSV-fa9(?1l($8+;s4FY=e55OUfvA2hOC<8=S~{AHD1XQg^cm=kH4w@ z-u_!yM*NA<-!JJ$r}(ayJ_A_f8vLK<-g|~}0FyJ|_XeisY^i#qr=z3iDL7fsZ;9maCQ%2Ju;j)gTcS=af^ETo@}L@h%$`v;VM#odKnYI z8}h9Fi=`lhHi_?V$HI5urGl9*^K{LY_>k!~bE#i69BQNO2IohZE(ARGTZZO-sHq&( zGB&IO<4BZokw@xnIIrv;BHz7=ckxm0ilshV1eqfz@SO1KnbPl#ak&nW<|tSy+Isx3 z8K=w0-^zI1(es%j{LFnpyOaUoSb<&l)8A+z+TxxLBu;J(rgt?fXD6N zSLVlwgY(aac17w_B|V9VW0V!Kum0=l@#7f%HT22i7@acW#8VbNh4#$H>v52RpO$VtY+(aWnqg@PCRiPukOhuQ`|=3hnxI@p(q) z$2w_^^X;4B)q&Xw7BmSG;uxwr>=@=a^J z5nsvTK5o^>*UNiO=0f|qvYB*uqg*HXOW@yT=18_Q`3)VxOVK(4H_qXOz_g~Ya(JA?lE@7G7#rk;X*F+OJGxqn)%om9?tYK-shU1WHis)dN%CMnGUBCjyp4{DcTRzfMLWnq z@;}deB|-N)L}#U4+B!B>PMRQcIuk5u^bO;^nL|8Q$>$y^gY1^ic}b}60PLOE`*u;! zc#?)e4KN>@~_HYmofdj?sqNu8+~p+ zC(`zZI^=ygbvBnq;41C;`j4t_Tr0L)X0-cLquuJ^kc1_9%*cL!Xny}FRJFv)IG8;p zW{x-Ng$YN(sZZJsbW}2r))Jv|j|K6}{GyvQ#h0A|oVGn%*m?{2F}D5mup##bLsc0f z!%00{Qb^r_d>Z?xY^hELA(|bg$c-bedHXrvD<2p7ch&!1VmVDN$fREJm$E$OS z^B}E$^)I2eY{0GMDU}DrF7LE*=5_$Ts-@5QZaF_2aLXe9KUUe|$VsDLPN_Cg>Xl0y zG9_M@YH<=qrJAjtxKOGk)iZYj^%m46Fh3FV!PFS^yj07Oy7^KqM~@x0I3JhPFJ@YXa;Od^WDnH(yXH|Z@Jr)&TbC1O${b7Gy*K72?kpwH1}Q7q3o`YUU{O(>9E*p zi5H{|1Frz5;}u~TnLDpF|N!H2G^tqA-EnMX9x8}RuT9%_$6wi~n8`6ZoO2c`Y zrTc3+cP(Ld4f?G~;n_WLHsS7uyk48au~g4x+$g)2Gn+A^HVcoeXV(&Coz39u)bIG& zoYQ78#rPd3zsHJK9t-EhP8FA$co)7W3-j|e5j2(bbVR2Mno1gKvo}@F=#zd_wadW2 zSHu;Y{N_ggU)23FW0aEjDEJH42yjcb$hE!lFKYj1DLqnUXqsqHG$`GDH_mODUjuYV z*uQ!Y{gTaG*4L+~xS0ayQFxE1yMOW*wa4}0@ZJmG2gmY1*lpgsF;1&I*Mm6Mdu80Y zc<^6wZt`jugEtt!|5K${r|EhZWxz#to%buVJkv#2tz85;zY~8}I7ptT8E4j+KdbqD zM4!YbWsFFfn}@XP&8V_(^S8lQeIWVQrpkdY=>8C7h<*6ZZ+)AtEeKRFAJ_`FT@z`6 z1-ifgYm{vu6He14&v=byb4y;a%whOtOp-k0xw>l#{^7j3fOlRY=1Rg^_0QA&NuUAw z@jOeC>X^6jq$cK?_2)K-G`4Y#b+Vg%oOTJn)J@8Ge5zfuJ)QwAINwcNA)XLlOk9aP z-)Erx8t}3_=kteE4(Rome>diR+NCRAc$>u-ztY82TgURi#LxRsFIKKRgc`>K z^zk&tvD+eMb1Xy4MM>nI;djQNE5=yXqfUi{Q{B))`8{b%=^LVCj%J(7wl4}9Isx!O z{9XB?jJ@N&4gC)+XRdRdxfe<#Uar$5UMgKyy1Ng*P5k`zu#8dQXIpp4I3hOpJ3Mb! z>zf|Ln7b@SoIH#n--wgfzo4h20^{k#x0*M`j`ebUYdHnDmMvN2rVbgjzzMwcXpTkA zr$mX%YOf{lvqH<6OW3fTXuOyKc+~VMKWz`-u@8KWUGgwE|G{5uikJBKlFe8z6CdO| z1IPE?BhrZ5CY};UP5dN1Aa2U?5xDd2>uS9&I40l=$3z$>VE^Jw&mON1*L6y!87pMp zxV|6(84J_``eFs&9LJc>G8P!)Nv02*`HV-$Y53aHJS$ZUfqlfm5r4-OtEOnFX{OwD zA^BjuJjQJQwq(%LiQ)u(?0K&B8~j%n{uiui&SmbP8jEO%%vT(no|?Qkcx)LfUC4Y| z%$GCQCb~bgX89hB7u^k5qjts@K>Iv9J&<#Fk08(L1ofNu4l?J81G1+k>Ze-U+nEzb z%F`J0RmsM^2+k4EhHiNtYm@7`$QvYx6AQ8C4)EnRv88esJgs=w>=53~4&KS9x3c^V=R&(a#JV(FvJRYN?5yFkO?Jcn2RwQMbH?!f z{jZP8fwfWUh{joa`U2iXzbX31e8PEexBPHq-aM~AN>cOI!N>M8&otJJKBAiw)Y$pI z-^fu%e%h3a!Kdt6DtK?(bm$7&JfJVe;^#enY4s$Te^+|gY!hIV{Wlpe!rxt@@=cbm!E<2 z1bk9U&6MK2`x2Hs5HAki4!PE&Y1F-yFdqrWNM4QqFB=2f@$J8j{B3UP)^^C8xq#m* z;On34$i0*?B@)DD#v3%>KO*l0MO6*pbpvgpwH_&d(cg?YKa8BcMV=3q7K5iw%QS46 zc%R2O`-FvTYp-F0@&tHpe5b90U6zTHvV>WNe4<%KH|!%~`$>-V`=Bh#c>Bj+3&+9P z{G^iGujX26q8sq4r(96p(~--V)}=iKgBX9+5!6`{r}$pRZ#opw#=0lf-T54R%fg;$ zO3;IMqm8=~WPU;!M~!|VB2L*v+fb%6OBBzK6N}j&Wt=^fTP;KL)__JH2hVg2H0{Sm zZ0>TvwF`TRu%&Kgt|rg>V%Hmh8RG?DocVYsVf1^IuedouFTnFA3UQe*R^T{g3U~AB&xjrfk6(eK>hdax3f6w$3wL zeb~8G6iA;I%(;TH1?aTuH+f9Ijo|H?vqaVRG-pMJmRvVrO>z&)I4Sxj_FazuSD=4B zPr(19+Jrjt+l-I16y>dUzy@Le+Yb&_gp2HNsW zKa!iNWx7dse~xiXPac~09N_VgNOT?*Np+pfjd7oXVI0QJF*4V|vl!dLI0e^z7~6nV z1leXX+WbeN@V_kmr1hY0`jPfWF@~ey@AC6rZogi$`K-+2XpF&Wj3HS|mbS$2q0Rzh zjo!6C*FMmw|9amu)-6Xh$DkeKqMjwNuKL&eG+V2Ex^>ID_#S9vjC|W5<1;*bzkc{v zC|A2WWy?GKw#M$GZ58KTBkZlETJqo@K^GTk&I1M5BPlp9i8IVGf0+d^H}J)cd6myZ z8{p%dz=wbq?@W?-bo=i2q-{fTUAdNAQ8&G{-L~rT-61WpZW`@7%l>JQXCv>N-vSKK z?x9Z9^`TwXXKZ3S+L*D*vs>C}pk992j8=y>q1AzQu18%ZzcmRu$~#_eDkwiUrd4Lih)TWbVxT$D4C|cgP%j{xv9H zb9Uun#;t4oqy7PPFM%1lzf<(g1xm@ev zSlaF9s}BcpP6c<`3%&|C+bydu$=ASxG`Q|OWo^mr0Bt#ysQRIfX9n6Cgq+-QXkz{H zOu%~1CA{DDQ(tSdY^@w>P4ovgCHgOSibC25y^Zhh%+b7EH`nfN#vgg#GBdUfU|2?8 z;Q5J*Tkw~>I)2GzzzeQ-f|gi;J`d&R{h>V`xZ965Jd7!Jvu8JLdftZ2{txSPw;gn_ zJab`1i)OEIfEF%g%nWPGSGzQ)v-Cx+K530ewIu+@K+kx7FmKUZd^`F_tseWa>Q`v< zg#@v<19Z6wJWDh7wO!@_bJne8d=K>drJI!vf$k2XOzq8=@8(&<_KBN=6}q1`s=@1ZKkL1Ny~(+i-kiT%#Ux9vV_ZFc zKMgqZY?t?Xc>WRopP6j&54kM<*U4M|5petC|G_O5+@3&L6K*?cEBj~cTi{(_#q`nm z`Zc>hu-xu{!LIQ29ejTm?d}Jzb{hEFXB&;LEr1>Ol@0JCJfmS~2kc5wcHpv(+#3y; zwO|hBco-9SKVVl%UWM{AbBjg5ZIJ;Vj>m*2Vd631$@!NzG^eX~1-t2=!nRB}y=}mW zaM<@9@T1@fR^A`KWbOU;D}TG46TCZr4!Ji?q{(D%(*%B$GOBO;#c{FU=siTGfY;0 zGMID%CQsw{+7cB9^FIKKS`-JtxeCV2_-?f9o3yxX_YLyb?eYxczP9<^!5VemT({e{I%$ietf19*^Nih$!Plr|*Db{O^N71?;BzoP7xp;s z^9N98A@&g8Wuq+D{Q>mB`I~*R53E&2C_&VBVoYbOb~nqVH|mF{0!J(s$Vk8q;t1s; z;>Us=)WM1j6UNz?_xe}Dv1&gP0p~fvP+=q5?oAd|uO^4*6rNA|xbt~|GBtjOo{ski zfLnYXME{)E@>%QK6KLOB99Qxar?^CqM={3f^fi z@Vx(ImUkcJy_>Jt9YFiDFdy=Y?^sh9x2W>gcu}|qaFll`tV8;SI@hG_55_R(wj(9c3`lOope`JLf4BpvCeeWz1r{L=SJthS2a zo1vmpiI5AiZ|rwnvc#SIRp-MAj*0_Tnfr2sjd9AcZyea$js#Ii8IgPcRZApZJ3bL! z7ieL;-fkU@*E}BrnCFqH5$%Fbd{JvU)GXUgmhG+|X*Vm}ZXVhN{gC^`rD&0C7w=@d zpeI7Z-az}1owLtcGb_p)JGbPZem3U)%?NrCYA3yD`&9H|;m(rly`FbXs!#4Ij3EPjw;a=H&?m6C?NPKM>r>H+ zefK>AS}~(_-{nc56<2~*Oc+BeP8+o1dV^LlekA*eMJopJy9Ts^@-AUji*J-YPaE`N zf$m6ESU=zl@r1k+c*qf2amHe+ z$bKtSWE-IqH#sX39Tly|LSyK}daI%nTl+#)KkN&QrW2n4pBHLje4eVs#^=-LL)jeb zhxo7XS=layupf^BH~4N1=E?c*5Mp!Ra+|kzn&$oNxlr4Opm(l(QNIm%Uyy)tf&SD$ zHlxk^ibUakA#U{f_9f6DHRhD4F(-v-kahes+oWw1qsNGMa*QZ@55~wj(B_Hx-06cN zZ4-J#st04^xB@OcI6zz1c;W9BL-QybQirf%V@IyT;&2A0$s9`uOUvAY)Hf8&YHlyo zCQG~LBK+S9TzMBTgN&c^CEI8^`=UeK6r0Ybgy(1(pU#+c_Co7W7O@V0J{xM|Sdz7- z%0a7e|G<)7aTI&_t?Z86w=iGN>L<2@ATK1L@Aa##OUi+B_T=lFb@BF!+Pxx`x!GIs zo;)V?%WsK}T=JNnMKg=(!?Fi_WgqrhrzQOW+jC79Ckn8R`Foq&)3tO7lfE+{=AA5| z-k9{`WMW5dV4bdV2rL)g#zYm*IJE9^?_=99Y|j_VwxHh^Y7@`5e};OQ7hibch1hXh zq&=+6rDEF1$-Ir4*mc?Au&(;G$4xu6(K>U+J8Mc?auzsVW#+?saVua8I%>xF--fY2 z$ascEd-2lFDt&M*;FEG#>Brf}p2w9w{H=(46NgP~PPE0c2mI}bPkXP-0hI1*`vc^a zk=$jucTNG#^<1GdcTi=9=B$8>>yg&74c9Og2XO&KM8Ku8WPm|NV8EF{!L-me)G|#=vrM$*i?ms3X^UaDU@j?InVMo! z;ZkW?VWs@fx%b>RGf%L--{0^1|NfWX!|}Y&UCurC+~wVO?|JvK9TTCA z6FLIVN_kHglv5X5ITYu}yI@<;L*EVkO1$&i#1)O%w&VIG?f-t!Pw`oqecCv*^lCrV z4tVlmVJC6=&jy!s&fL$0Gmy;;|4t^Btz3MW$C-oYd}?h48@D$Ey>w;8sF%rqr57KK zUVN_COS)DsU5&+{m*Rg>F9#dbi{C$?mrz zJ;a{L8Dfou@0pBq5?y2XSwSeX^V`q&-S!XC?%N>G);sy3YgvYI+r|;qPMhMU^oI8A z<52f5XB6W4P~U3j^S80Mmt4*Rgp8uyf5i(84QueMKn%~%fQ9EYo+*TNh{rDu3vf-_ z$v133qwd8W1GMK5YR^7AP5V^DeNE@i;+`;owA&&wO>sYJ?4y1YXUO4tbH%S7p78wgig*cRT*S{eZBr3jCiYRseXh`5oO{}~VnmrZ zGiWR59_>lp&pi!{sD&_RpufXChEID0N1(mSna>;6;4^WVE-)v1VOXFK=r^JTi~(@I zURfH_)S0M%wI1?%8GdKX4*ed>?ZYEtJn$PRHV19?{_xO6;5jZ=JiPdM@4tC?N9=dW zM_n_%e?|m9hrSu>zpNeFWU@IJW+M;Nz5?E@R{ug_&{i&|ElZsT@t*dseybU$*3lCzAha53|fN z@lD%hC@Tlu59`GDxkKPxvg&Skng2@OD3bT*Sob~GzCM2AJ=b2>i9NT)9&02I$-5Ec zDT8t_dKj;`w;R_z*>GQ;4iRlX7vlxwi{p%eiu+z`8)>h#b4SEJ-53VX-7D4X$5sMi zP9G6AclbVHWX}CyW41Gj|I0G;^f}i6E&v)Dh=|=WnjeWDG-Ir@Nor(T4-xsB%8sGQv zd~-Y>-Ejo>bQJsau0O(Ux3BR2U!lFNln}SR9nZc+I~d{D*8L1!IujlHFMd8Q@Zx>G z4)x-`kKv8_uX{IO|J4fjALRQwT>;(w4(|=SK&Ie>&hG~Hyv)O`yyq{EHSTavC|{^!e}I02Ep4CtrK^7BFF&%)xE_Bq_DvokdwqO9U&r^C?#wR5!TWTW zN67iJ?OEz!T?o8m1)sm{5rTWNr;0t3#5bFAFLi^*$j{Nf+427Bb%%9;}{~=xQUbKOM_t8U3Ea#$1EfG=iZ5Zxbur1i5?Osf?^iPauys`!D+^@zQ z4qVvwNtvbtWO1e&qNa=AtY3h%aNqcu9zi^<*-GGEu}4DXP_)m2{%@$|Qdm?1et+ba zhv4gYNx5fw2)PqHnwI-|UO|oW`a3%K8RYndhYdWB_J2Z`LHyg?8|i&N=o)Q|r0&E2 zMtFFcUGW>V!EL&>d*MCgJf4$~ouQ4>Mve0#elrDfdFW)G+Em~kTbQR@U7IHJgnM|c z4p_Ag>)9tTM)|`J_e*PceiOv|4bpCawBr?eMw+zgx8vzoUTYYHXCrZ$d7Kb_Ch7I^ zitsfM9@Fvh2;6&qnsIZTE@UshhwOzoGdTMw{$Y!B!8xFPsF z%Bq8W{th}D3NoV`#wl`%^SVnMh#vM4$hv&{AEY}>MSU)!C{LZ7@SGI!tTQukA!Nf!L$=3Pp^-+wE&er+t zHA1)>+C!`7B{ltgIlo?bAJYP02C(x6%4lG+0 z;yUh)vm19rD0t>0&P9o_7tX)Mv|bV-#%O3?(=Gz{{l_t55uIamFU}SG3uDL6);B(O zyywdsj~$QrX~&Lj)UjAJ$X4m={{G^=hcAx9+DD+B(6S?9EH=f54H~LT8Zrdvd%Ctc z`}8bzbR%OqZT!0^exWxTjOQhl|C3|U$JRGK79IKJjmM&gJ=j)v+1hBvnL@slBVt@C z_jVBD)_mAWj4F>doU1$?8j*+ZL)Eq-{S@Ed zda$1Fm*%tb^g!d4nhDN*AAUI#GxRdJ;hX@zCrOO9f#Q3kpo&Khp>F7mVu-u!kled% zZ~66hoT8lZ8-6?|T0T2Ie}O+c9>sSH{N^0za#@QpSA6i?-WU%#AIi_FzV3U0M)n(B z4g68x!;dzs!F?lFaU4{Ud5C`l9dyrP_G+95KcD%czO%>5xsYCE%P~CP&?i>NH3mNK zs$<(QTpI`%Ue&M$=V6ie>2qSgK8%NP%CF(x;36K5!SEYh(>^4?gD=wjvq% zMSt9|=ALH8OFr;^h;s{FHm(YxF>}N#KhSs7P_Ki*-~PT~FS=tIdAKJn#KW+$p5VeO8VH+!rv?a43s$bl=K< z!@5~e76xcDx8u8E3u7_#$%FU8*y(^5?mHcI^CWoIoLAV6d$2F{-mq>m&J+7|2nbU= zxa~9A=HhrayG6%l=qH83ul5Dw!=w72Y~`1yYC z(L4g}m=jtXhqma%QYPSj=vQdZ8Xq>N?1`B9yS>mJpn1+>PQA~cH9WlTV@27EYpNf? zJLz|xpa;(okV`iQzcsE3VgY{b{UREe&v_3RKcekCzHgK(Jts_n{3Q6WV&os+f)!Wd zw~h>+@rw9%$%6GMX7rpcK=uA0w+EKpqU3N^hUfP7EcIcB&f=K3ID0#u5qSpqy6S1B zf_qgzypDgX1owaLb^lfgpJN$MI>*V{{m*MWl!%z3<^k|d;Coibf^m);>pkwJEzg!4 ziftLjB;V|H_J5C8h<6rm(N}Gaq%hdl`(S^-XrE%5L#g@m;-8J}zYb$Q5l;cyjLYm6 zPy3x9?#I!Zhc)hi_s-S)`3di4=ipgxgy#b8_m!;^&n2`QIonR0&w}6hqZ@wnB+qDZ zTW8XwgFKP4z7b|Bx1pzT?uc^2H@TdN6{a~#pe`}XXjqi?)+P_tfzgh{a9Vq zGvQHum&I?KPwf{r_%$9aD^}}R&<`!@-{_9tNI@IMbu?W=LvRw-bJk_L>t~>H#t?OnY=y2V3YcW!BRxhusxg9AOWg@4F!MurHet zRX{R=9s7d3snIz+a4-9#(&@Ff0V(C;Kf7EuL^k*sZhf3`>I_o|B>1)l{E? z@iE$u=;zl|`}?pNAXi0e;QxqsNpk;N3PStpvYytF4N%p7>)`=p*AWeG*>x2R?hQI1cwxT1~KAZ8aIcV~T<>EfnQY z9Pgu)m4&{x(17B+KjY}^!k}9ULzBFK*VM^jQ-IEa-xDGBPzTTs6H>!&hJ5`xYD!oe zh;w-Cw6I@2*$jv8ywEjSw}$-|Q5YIBb86Uh%xlISVab@+33rC^J+E>90=TALY+Z?T zalMXRY`CLpP|5I--=!sqY};`_Xo zMp2K^eyc$Vw)sFiKc}<{IP0+_1Z|Y{Xe)wzJxW8c4|)K?MJW1+3rZVsdw_ojf!~6~ zgWLB?5V$Q1!M#;6%vrSUSm+D=u1|!I(jj0r&(!g~3a@v}AI9jdwo3kzt;LIYZ{P66JmV?Z<3Apmuc z-(H1#vgy4P{Zc&(N|_CHeFFoX8Oor}maYSxRG^%GY!TpP>(JK5ucV|J@=<}f0kN^9 zI$mOk>t}HK`>_?(rx@B82;38BgyL1tI72`+2bGdc|+4FYB1%<6lxef%99k4rN1`L5EznI99^t23=O5Y)b)Kc-W;v zHpM9$%G8t6Pitss!1UqSRe|4K;yAJj#)Dx@Ighpl_${YC`)pKcL&IS0bIH!winME^ zuY~E@t8!0pwyX6@AKWj2zO|R{`I+!TJEwF$J}l?s-?VF?-hX z&R#9&b79VJ`te-Y>&B-p=NgExIzDEf2YhNkMvO=M-&BY>hqe`B&oprkDUQ2VdGhxa zx9|ROU;JIT2mH0BWEuJSKbvnUAIeb!IuP#$*UO`h^BOttRlmS9#TVLBoYHAP7;9&n zpp=GWE1_`T);1f@EmOkaz74rExDO)t7I5F1yX!rD`My()^*8v;%JB;3d&T4^!F>OU z9Hkw^)!Sf9G$0M)^Y2?h&bmO{k5)e$pR4%&*ixlq3d*$s`UWZ21|?LLYlG5Bm1~32 z(T2PdSkw^4S`3i+!@AF)jRNmS^-RAs9O~;gF7upvZx-B}>0zA6B3%2@8jn^HJK$M= z)}wbsgu;BwmFB*Q3ieYh#{lERD$tp49?I8lz$sOZws0@yYct@KDt8dvGjeYY_bs@4 zl~*w7?fU*m=*^e(=1Y3>8Gt%F<)ycs1zjP(I>pD=2y*G6KY;x4{$QEQx$9vbdXL8J z-|&6w^#B%t?_i&?;2~R?aR`2+|16Aa?DIPY;P>XAF@JE68)5|ar@1@!Dd^6?J!wb@ zxUc2zVFBLUT@UWlhZHiy5C;9kO70gLunjQoE5vjq)emvE4golyDd$gIZI`az^|t%G zXjgWnt_Qn{GC#Lg>`z{-XVYu^*wt`jT4+6;SBi5y40J$y#Yc#FqGl24kY0gq*3-BL zqBtk4ZNx=ycJ&?5Q4Ngq-t%Q#*Eom7&yN@ed|R`Db@#&fw<}v&3u8cW_A>6_iM9aB z%APQWO@2?z1K}CyLGZh@+n9$kTzp2Chx?me?!b1`Ltk|jQgSjkHL8FZM=&69~VHL>v|ZkUg?VSQm*rCVs8hwp^}%co=toW zzkQVTz8UW)T+XB7@7?qc5A^`&Aj0swanL=Unf9B9X9doy;hZw=3wajYFNd<=kuBJc z_o4i7&S*8@I4|7mi4BPNLU%oPzuZZ>hmkwu?y0JKD7pJ{_pKeJdna-a=I%kNdq?gL z`HlhwV)AbY`Ga z+3FFkO>K7sDcN9^NFv1Fx(7d$Oyy2|I6iCevQ0v0^WFF;^bM?Rz*+ zAN)SrFa-7Lb7kJ6@V-uN!Q?jA#m%4G3SHdv$<1pSznrwV`i;lgE zwoj9L8n3>pgT52@WYf&?KtEpj2>jq(zH%k}mcwra{M7SGJjLFGdc8QmrVhVl_*kqN zBJY!MA5QCsuJfJpd5inWN6^@i_fPa}Z3*?}tVidFK1$1_Jr@`c>+z@fEPVmSl0MLX zTNIy9d>|gaBg^*#--X6i6BJg_%Y~mzN98}B8`;Wd#930+O`StJsG(s?iH@zr z{hZTioeZCirQl}L>Gz`F@dn=C^YvjYGkrJXjsqffBo6R3B*sVU6X9Lp9L{OPx2`;fW0kn*;6xv|@2M!Q<8@ItheH{qwTN2= z6k8d~-wUO4`VgZTJfRnj7UnFZqI#;}zuymk%8 zbR%!sV%0-fc#qf$@e;%F9?utqIKB%#Quw(@BttKdVK%sx#zZV*G3?M(@Eg=zN%V$% zU1XIbd?1fdPaj3Tfy)P3k)I8Iy&?W2!LjQK{{#)GVJK>H}ZOa0)7bA#cX*<_zN zol?ek-?MI#(rRgf(tN2Oe^)H2exMcq4trY;{1V{zsg7+eMHxXREc*($&%ynzfMR>9 z!#soEOepsZ7+>Z>S~(!YcwN*G*Knm2u8R3g_@Q~+vWv}k4M*7nAP;ju_GI|=g1G%4 z?nIyoKu_Wx%P5z^wuX29WF3C15&^PK0A5SHOOkskeiLwxG)_?_hj*?be?PTcUDMqI z>0+7IK-zqspV}$b8wKi5o&SG--Ld_Pbtm(`vF=P3_WRrxArbCMC}&^b-$L;{*Bj~(=Dk9bcW9rjbMb6N(tDLlz3BC4Luwzi zPldLe)}nM7?q%Ns^ztg`B^>k;59vmNPW(Y9n9s=OO3UWZxAtEi*%$SM`Sk^iXL;jiq7tyB)3xu|nanzCUX){~hAb_wmH-bcL$8Kc6K&U_C8+*5mTL&G*b(3y-~atK*k z`ZMEI(4i_nrZG}c__GQ1;M=@(nGe$~n~C2o^yh01LE{a;BZgh_gFZjQlcf%UJk3;; zOCF%Rf-%OIEW6lBn@{D43m$$Id5~A@BDS*4@*&npC_j*S<;`$EUQrIE0u6@Wj?gy~ zSA=d)>>suzaRBH6^B(TOwjodamIu@73VA}EjfXt9MqaY6c|kbv@6rI_Io1=6~20Yc{3@?RG2hDcMYmzHudfD|j~RSBetC9H*S)b+h$J|tnVzs;+Rbh>*9{}Qo36_obLF&#DonEYowpvU&z@L?gx4q zuZ#x2z#w)d_kE#@S5w%^k=HhqA~jq)Rq8sgh55!X8TPyygV(C|o#EF7eyR>&96SD* zrgd5a&;6S|Y1+TM6+Z`X8}cdIFT&yd;2ZEP_v2-GrT1Tl+41AXro*HuCCLqY{+h?H zHwdGrdUbW@4fq6#Fts<}Qx<64@xcvb#q$G?+(_0ik;dK|r2%EJ`v(4a*6rIj@W*lA z>o<}C+CV9tOSt();UKSZ@Xl7=&bZ?REPvcLUlIG}XVZ6W_)S}Lb>IBv?)&CLK8tUl zE7^`K_?qr^TVrjR{Xclc&D3#v8&Mn4hlrLFeS_!$qBTS>5^bI)XcwXbh{h4Ujp%Hm zi;1ovT1Ip`(S1aZ5xqe4ccRP9g5FKEfM_PsRH8FXg3cxS5YbIU-yvE}^deEubU_1% zb|KoA=y0OriKY_GC3+vxO+?=!x{v5lqP0Zpi8jv=G=yj*(NRQGiDna>Pjo5K$BAwt z`U%m`iPjSRiRhn1TV@JsAR0+@6wySY=|pWr?<2aL=sKd$6Mcv1=R_|O^`-LZNHmh@ zSfcU@rSj-YbhOFczoBTWhqw$hH65&c-75@H{ z8|N=C|M@!ZzlCVH(LH>@F~LVqxP-7b;ZlwNTEaduAB24gZ`a@|!p#XE)x@tQ+>G!= zjXyi?j{T3j%NKmyJ-u+keuSem@kbqZ*XwA)o`jP${HGI^ab^&frJkn2nVRs~8vk4k zF3{kj&tPvc*z;s21ve}x9G)`VZH!B1&$8DUyrXU}T<%Qg5#4c?+jf2+oSyT<<= zjen)a{{xMGl?LzA;Deg@M>P1T2A|O28V#=1;5rSypwZVw4Zf@iU$4P`YA`#YsqY$W zIN@GD!%w)^mngzPgp)M>X@mm^7ZL7AcrD>hgtu$_k81quHU7b03EY*ik#LAipRj>& zDd8}}<%Dk{d{7hrBH>n2Unkx5?Mc{6>hGj`c*99|`9_~~?|+g`y6ZcQa7)4kC*9>) zane2iTL^cT`Xby-%6rP)Kb&wc!qZQ=^DjE(uCFq}T?khZ4kuhsI70HT5x4{4xElBV zcsk+MGJiGh{in9SEYXBttKq-B#=U+WtZ~=RMZ)cy;IHl9wEdH|eQWyzZU3aL|Nf^1 zZbNwH%yg68oGH}@I3v@XkqflIWX~|=I^FG#Ou)G+c4S-ZPKTK@vrKk}E1ql4aOB&h z3-HaAVCGD-Dcz#-ooC5%%9kDrd-P`t2vWn>5CaL zSk3dK+=fhZuGwK`Bj7$d8pesk8S4!9Bfz0E{BFNPgv&25+e{!Y-uHu0F0B$0{zZd-az^@AB_}B!Al6bPYx&_F!p_;sSGimUL!mx%uE>usci+ONL=q zp~;rX{nAh^)>+PQbFsWZE8t#;1=K^j^WqZff(Y6WX_@9MQ(>;dkdbed9)^tEe0!md z%a(?9!E}T8#NRc##UXUw!!7+ry;Xl9ep6g9oW;<`|40E2@>M-P)3S>Ub z*@nLmMH{YBkzD+5C{kKRenD|lO2c#tGaUw-*->b-@?uIG6UWk$Q&Z#J%T=uv?znNr zSpQ|crur`-OUuu*S`1i+>=vvQX-*}HkXre){!4 zXwHq__4>a-Xso}*R#P4{4U5&{ut3i--)u8vK`@z5>2GqFi!2UT`CLM|*5ex{cU^tG zap=bM_!s=$+Pfp$W;SKIG<&r_Gj!=0CMcCXU@xm+&x^djOVS9!<$`y=`_@pe`DcYFAOJj z+pH1X7}Z|h6wkX6+!$?4zNX~WVr_gqYy7&AzWLZV%PpbwsURT-mG!`xYoxT^%GjT zZq)u=`wQ2w`bO}Lt{e3m`bH>ggnBdg{z3j&6PRh@|4;k>&t2in$_iO7{Ph&rT9}*L z)9H`vy?!p?I|24|!H;Y3!+>4OW4Q)DqQNUPc%=qEs==!?c&pAGZ_{8oPa)fxoR`UC zc9y~NnT?s@uP@8wI$$g|-!=xuuSvH2471(NSj}Gd`EKJrcO3kSz|)BqM7dML1wku` zu1FH|2bD?g^A;Q+Z>6+z$vuyWIk5sJ=9X+EYYEA^i0EQ+znA#jNAaPa@)q+n z;f*B6vy{$1$o)-{>j3$GLH@UTiaC;CZ)Y9FEA4wxo@GR9h#Gznw1DVAqJ|#@O(R-H zw1%kRBKZ^DLe&2fxf9(&w2EjA(ThZ*eiGCK8nduIy#4fH^WfeJRJNo((2h*Z0e24Y z$>T1$tUvrOet#W53tZCS&c^-Saj{?B!D$CTu=x@rBPYXP|BLs;a1B~-}cUf(MT z-cov*mOEceRQ(&>jB&Njk=OFsww2aASPT{l1V~Y556y3+>+GBEa z^D|_AT-?Xn%w|_S&g__K$}Kc&!=<>ody{*-IxQD#gS!kVac~b+IV?TxP;h= zrUF$e7k8WvGbftz%&GYavGJoZ4nBKh3JQ|)b1fOgAPo(QQq8tJi`9h8Cz>7E`FsH( z1O8yR#HO%RHWoA#MfsDsKO4dl*ciZxEFPZPlh|lL|8p6x`wLh9uJ^nCFAhrYMt}D; z^5-66k;|X*H~(DYFLwFU{mnla*YKZK|9|`{S+w}x`|f|>!O|s5mp%0G@<&#ze00_7 z#~xp^_K9^*KDGYo4P_fQJ@f2y&;O%*bHxiUzVz}dTV8$b^{w09cys%Xx88o|-JS1M z?s|Xs2Ooa)an+tr_U_w%;M0SLst+Ie?DH>PwS9#C=q{oTv02UMJYy1)77>;YZ#{de-K{nIy+ z=K#(>QpG{=CtVQ*xXAyvvrPGR$A34!&U|ZK6u0RMPt*7p zX#7hw{_%-pnZ=sL5@QmX)nr8)o&x{LDKT&hx5IxDqknwjXm!R6{Vmo^j?KLyBi%>O zAWwrxCzEJ4(OjYhL>)wnh%O*{AJG*=*Agu!x|L`p(S1Y@5D+L zM5~A%Bzlx+4beKH7l}fD%&9+71JNj=Nkr3#77;BWT1s>U(X~X&h?W!GLUcRPN}^Rn z4-!2}w2mm#k$gIL{szL4M2$p~h-MQlBD#X;vqWDcx}E4jqV+O84?$B3t!!exm8HV_ z$24;$OU*81V{I0eVsfBgrm2{rKc{#>I6DFeYZZ6oo?U2@5aO#Iz^BkgXgsvPvF3C( z(PV@75F5~9HXhO+Uzp2c3TLqta{-%_;b4jRbJ=LKc%_0kg(h1u#GJneh|k}X@dM*RhC)t*|1&wx1{cs3pA*3F z_*O0B;jEkBE8;t`;A2-^1V5{r8&mn)G_Eo|r<+I@L%N3>56H^Hn^`)S!^G!QWB3e} zz{NbA$me*z>VW=*Y!>Hh=5w)=_`C-6tB{YmsAoPCBKa3`uElCPHWwGtKgT%#BrcJ@ zMV&7Y>6=~TMme1Eg*=6P-h!!eiFp?>FG=-+%bBmb33;`lr2OvgF-%mJB%(s@iL4*! zG!ymemQ{R!VpIGC`U$1)HeN;sTwG~r0X zw80>Y3Y6m;aTy865RM}pOE`(}Xu{J8k0qQ&cpTwu!qU#Mfbe+2MT931E+H)2c`4yZ zgjWR0ahSN)5}r!9jPNwV<%Dk|yoIprS+^6uhj8W?8mCbQP)Yte!UqX^5UwHYNjQn> zmlxrSBmIe=AK^&yZ%)`qxP?rga7)5zgj*3VAnZ@Lgm7z_ zKBX5R`4bK#yn@095iTR#hVT}`ZKeJQ2TT1CZZGvmI7I4;a0jWcHq<{zeGu*>{ z^+PyJ%1_uJ^+UL`)DPhc1;a)QT zgnP^Ux267pa4_M1gu@9BARI+_5aBq&g9%S3JcMvI;hPB;5so5UN_Z&YwS;dWTuyix z;q8Q@30DywN%$yXBjGy2F@)<0#}d}Jqy9#gH{mg|ya|t$o} z*AVVRxSnut!us}9zX%%$N6Y*WjwNg)oI`jzVTA@%*@Qg_7ZLU*TuRu7@LIyYgv$vx zC%m0-2;nLzFX0*~58;ba9yve@A$bV<6ZR%-AnZdplCUpfBjM(RlL&_pP9r>wZ~U0^a)qW^a&r7=@YJz=@YJ(>C=Ew-+}lO4kqkNIGk{E!cl}n z2*(i~MmUYILIcVI$)9kE6W%Vv6Rwis z2T}fIc*1ouJmGp7o(8D;PUKHGn6NUO@-O`fM@fGp3%L z29RqBdoG~-6AmG~ov?}CiPQNk0OPhYc**zDIC^u`D8mxE(U_0Q(<<5_}=3jxQmDTFON{diR#3%3%9#|;AcW##E5s`0ImBgFE(tAP6_ zss05#{wOtl8=sF!R>RwP`pIhg*<9W@H9Xco)ZYXZ&jB2x^2hp!{!$+fn%{|2v5jNN zuaM&;l^@nu%-?9$KZnmRIm^q;<-b);FPEn$^=sz&8>6P5%jHQ>-!pT$e}byNEMA`R zsyuUfc}-Q{W3#z+RE#>4hV20HZJZ0vRmy&$(5>F&ak(d|`Eu}ivfI>r6mh*c@q8ZN ziLqU|;v6pLI5l6wdTp#)ZrNP!cvbE^p3jMDKJ8p@&Uzv2j3%mj%;EA*Q0sXP&-Vni zUD&yG*#tHHLav7?*XhB*({ynike`&T`D-<&>!E z*+lYACM^1sShc-~`BkTUW-7PoghhWcN-Y=BKRDxy{=w;Q<@{Xx2M2F|&Uzwpm!v6I z(XO5Sm}@(Tn{H!wOYlet_t4n@GIlH&hSQoiO&*L6HMXg67{wPg3C8_*H`0*+~5kA$W{@Z!| zPj(BR;3ALE+cdZEW7P5x;U~EGTY36%ZsB9q=e!6XqbctxYJN;q4({=jH2#w{HS2o{r$BZKXX9&j;-cNWs;TH*K6W&9(i14F? zO9{Uv^-1_csZYXNWqt^MF7-wDpwt&(`CP9fTq*NI_%LC)?kd-1_5B1sB=tr3E2$sC zUr2or{zU47@HVLr!n>qC2+PeZiwHj}^+EV0sSm=Zq&^6*lKLQABlSV}ZK)5!2c$j- zpO*R{d|c)~Qs9#^|AfDk`6v95Opo*@*HNR$U$t1E`X|>xRi~4`w1<%E z;BuWjoBZW-L#}i7mHH%qX;C28&E>j!DfzD^yq55Dgv$xPOn5tC`5dnz{08Bpgx?`7 z*B#|LYaRKQO8GVGw)NyM*B#}$zFha$_ZL_`r{p@WTo(=|f4RShTvwOt@ZseD3gIZi za$F$o2Bcj<9Qn)Vrd+3%8%9kh|Jj7)y1HD4&+aeh$tZn|ok9`$%XM36mmuvHO3D8* z!fOf3_ZexoAg9gC$pD!^X1`xPr{y}hTu0wd{?fulu5-(8;;P8Mh_GCDzJ>5n@?T6? z+DS+|3c0Q<*U{@J{1U?TgynmKTvwN02ADy#F2j<;pv3$B`nv`M-a{?{|5-mb@*X~i^%^z!qTol+L4x$|9Z)vu-ve# zoNyuG?S$p~gS11Db}Cim|G3l_VL5KCBfN&Nv|EvOE%oI8Fkxw@Anhvj0|mZY>PKS- z6HNYc94YNyq+Lun`O9%{6ydcpKZGBW{0VO$oK3h~VvU_m5&6sab!k`Aj&LdY%W<)^ zlb~sIwwCpwx)DK~~AD6VF87TEb{_`b&jU7%s`7b3b?PjE%kAASgC4{9NjkNm-CjUh; zKN>r$aPq&Ca1>!HVQE(-?Xcp=eFRjML|?$pcf)4&`5>@Gecu##wwhmo zbJYG<;9RvlBrbNtc^dih)#r!6b2R?;>##dNhg!b`E_TW9e4c;&Kf`6d#nnC6WqwD@ z->0km#rjLSst++=Y*Et_^HJ%1?#7jmSf??o<3_PglcDNa%V1TJvNpTK4fwrOy&8@8*@U4aWV{&QXU zIk@~zTp z$|u%oob6JqTRQFD#rl)0zm3|hE6!Ha7weqaYWiZG&7{^}u?}ca$01@J)S}8G);XN{ z6WF5G2VsXkTkW^S`q?a1Ut+y0M{OTDntn&F`$!jIx1OWQFV@F$)P5_Mc7$-KcrM4X zeu#A+XL}UugL!IyB-XK<>5JLoJQr-!_>1=Dj`P&|mq)t^NO{D%uvM);VqM5te+0Iw zm#oIvo-!!7m4J0f)mf- z^*>ilPqrWT=c=o_>+{e~&+URn!wYx!@N+f#nXA#qJYK(@xY%uE;LzyXLH&UfXY=Pv zwu;@KCk`4{*i`IrD^IcRU#Nx`b^--z`H0$4c-^?e)!j9}VqJf(DxX+?cgiEy3$Q=2 zYp}x&TiwEEtMUk(r`9il?P~uppY$aGs+i06&**dK$2l|)Z9MnAW9-4F zdT-$KOr~FUyzt($Gj?CBF5bLakFt}w6eJu3YRWlWcK z?QZHZ3Ex?by2reCEt%S_<3E1?a8_QG{Y2hN=WRH^WxEb!_Sls1N$|5jcE9V;{(>J* z<%C6_TR&3_v}>)`cJH6v{GF@;VMF_R=*HaEy}o+R)ba1{KIRPxJ<_*aANyLxf{@P3 zjR%(g?04XU`+E4DU$A?1_m|>vBET5()v?qK``$C%dg6r_W_;XywAU}Q+P-rr`IR^S z==ty?X{*I#W9Q~e-){Hp@>iyA-Y~A&kk=;MQ8V*IiEqWVi^eaPmme$%$>|DRLuORM zfX6?ccJF7S#@Cvj_xFe1ZklAZMBEkJ z@#`edUW2~s_d}1Qj3?&odA{x0@yo;e>f7a8<3p_NQQO7=HyK~@OtOVu`Rvf@o^S8J zJ?rtl!!{jX_`CVVl#}zG++^62a^<~`Ug*Ah!o)M4Y*C-xe_TG;B{?a))tf*66gVv~ zXw->?cMSdfiT1bFcZ_ z3f|pmo@+S&!A(!Dubb7z>eFU@ub&3Y37j0a^T4KW#w6c^Z^Qm?7p?wHSLx{R5WC~z zmcoyYZw}h=<=3Zdt;`7%!soTE`8DtTm9djQ-Sb$FDKC8ed5>?)pL+gPJ_}?VfAGTP zi=|!f`7qCSdcNm-vAgf+Qy-^q{X@rF%YF~PczOTG=lZrUoAdcQ5017hRIFG0*G~;8 zE`0V8#!kPsV|Zcd;#F-&?$5bp>yncXKCK@+W@2{p=Z{}qxvJZ#zzf-tJw|VR;)j?; zZ|wd=H~rG&>@PQUpS$qkIf+n%GXMDY-rIg^_0qJ}t+$o1tZh9FpH_eP#lpOi&vl&m z=Khlf>yM3yY5Qj4CkN-O4XpiQ#Vy83Uypp@O8&fwH+}nxFW)An|CASes;4)9e(z1D zsSn=UarUmu4;Id?8{PZUab+=2d+GN?H+!qBuIkh8rd0lZ`nA!@k6Z3GbhCH29a?l{ zd+p0!ZM==?!{$%A)Biw}LdPuMs^ z)Ju;aI`I3_$6=IGwr-&=X|#rFEl%SRGtHweJhSAFR}M}2zT7bW$@*z)Uhuv4vU1n+y~kS~doQ$S#}7WPsQ&Ee+>eJG zYCh%Isuk-$URS<%Ligag7hCw0mjCAP54+{h)^Xpwv^?Wh|L^v$sk3}>Q?#vi>jM=l zZtpU5;8TU(^Czr4JFd^XE7o=28U5ORQ2%Ii|BEw!YMr~g`>17C_N-s&XMbfugV+6i zVz*cdd-dsk-?Zobe+)awjPpPKCVhL|?9!wD->ltV_2HBy{!`w#_27}6e@yScc)LgY zF$o?+_e^a6BKt7x>&k@UjU{`A9qRMy+4?SdcdlC!b=T4M#RqJ2KPuX=5{LUMHuY9RBI_hOu4RESOe)YvFe{rOcYw zF5}H_&(HL|dd4!eZs6cDukr_X^#3)sRaocav9}$4{Fe?dY-&F;8`tYHuPxl!&vVa& zE#Log`dH$|N9@OaYM=UH(ySI6+HC%O+qPd@J|1OX`F{NQeQSEnd~9S?t6yJVX$ZQx z=+LQAhjyLp65VFnsaKZH{N|T=%Rc$;ncI{5d5oC!-6*~;;s4d;WS=p2oF29H<-UVn zedRlAHEhpIuTQPY^;^IGF}5r2_7O{Wj=wzQ%jAi5 z$LD<5x#Ja|MPtU#K3eg`f`rrhr=EMVkd+Rv6?1yVN00bl^4w|53~s(_$b)~pP!!bj zmC1h&U30#Bo5)@Xel0yV4jXqH{<*qDS6qf`5XzHJC0%;y#K*l~8WDB##EL*mOF%?3S+nUu?GDKl-gN13vW#ez4%lTTUd`CBODf;ven2`#nE#=jktA z@SXI1`a^eJ*m0n&|Bv-@a*IKb!yHdq%I{xjpdx^27lNdtMs&^gC}|dvWf7&Ix@7><^6Iy7F4V zkS}MvegB%EQCCCujjjJG>f7oEy)Eqy=|Zku+7|ut3p;k_|Df-&%u?}lf-UjLfu>k}Cf?|9y{`pM4& zJB6jq4&1(JSoIS7!b@qVzWC&$UZ*V0Zhmlkx9^*+$~te2Z=Zks;Z=o;9d`~{XZ^7M zn=6KVI4ZnqdGX8LPV$AB%$Qy4Nf?SJpS9OUDg$R zUi0IppLl)o?8EQovdlBDpGbVpsxRO8^q5B+RjJGWoc57p-;v$hM_DtzoVM@wZG+EV z3(Pf5{vhP|TaRs9pLl6w(sx%*%(*ASyVr((C)bOKVgDuX-Z^~g&GXJgJ+pVjq^GMF z^?v%dXB{73*}dkwjftv{UCr>=SM!gl$q zEq9*oy*x8+=*Gud*R&cmeR#XAtACB_@$R&n7W6%~tgviF$*{mTj`vv+_i5hUp0(Yc zkc&;?(m_#rz&Oa$hbf*dnBo<{lxD$9*DRFjyt^}*8~g{O{jzQ2t=&hf)!a{5TXDIR|ME1Z@kcdy~@(Kb$NY&$tE`Pt_*=eIkR)3R@$ z=F~W|PPj+*|C;l^vzXJGvz440zVJT7sj>c9PTA4# zI5qT%_=fvm$>G#!e2LRC-4C4BjOzQXT#i()<3ATKC%&h9=jdei**JKkA(d-RFtZhgG# zp#120%Hg=H-qz?}FF!Hv)PS7m`i?(cuI-r{eQSqPaa9laM@PoY-8%JhLiE~!Z~WP> zEF*fZPfqFc-&Ubs`H`O-uW&sIjHoM+7SI~w;o$--W(qN@!0ThJYUR@-Z|=nmxG?XGy0}E zi5_)# z=Ga%qeVZ5E>4D$w>hO;{qSMxFc_4dsbadvATh0}-{OBjw{;@c~dth|+&P%&v&!BoF4RvV))oVogVLLY1N zphq^J{p@mj^v)Uktb1l9m!wBW{bFm^X~}KT zE4PL1^q-Uwz3P11!>6ChiyrmC=JpX&GolmpalgFub!zndJykQlc_@kW5E=bm58d0* zTk@jUZh30U?Qfc*yPVqbLficK==6>;PyGD4IeJRUueV0$OpgwD@$|XgammrciwFNW z^ml7?ZvL$P*ngk}A=*OXK8Lu5JeI%H;yi(Y;eHP`zALDKzj+(@8*d@)kBYvxfLnKX z3srY5U}H@VQ?9{mv*D2?Rzt3-(3+8Lw%uarZs&n)G{ZdBWXUyW8XWnC`~tJpU@kIe z6!If&h|d%&Ki>xYvnDrlb3sL+! zU<{ki*M#Ld_4xdBLk2{_T_6ovTo~2eV$I68yy~PSyw}_K^D1g&HztGWG0J@yvK$kZNHw8+=1UkiCcny3<4+Ed|HZ!pYtU|E=`6olW`}_vnUj&9X*T3% z84Bdy<9PLDxbvuUzmk4DeH+kpE=4~+^FLShA5&Cd&Tt6MqU3>ZULHtcfYL_^K(9Ue zLVf9hclK;^x(OU}Emkwsv0QtTeCB0a9OC#GgDJ}aIqK1`&~EFOZn5?=Tj%zWku~+s zSuZg)2xzh8Tk$j`8Qz(W+*K6MzRE9z7=7jx<~z*%_#k&SjR`&cy0$fwuld+mw7OP} zSE@@gg8w{=BOB|I-C?r1IRCw5UCNQ?m%=onKbb$#u3dRur|(QNuL`bV425(&6s`~7xd-GiH#dJCGRD}AiFJLvrghRp{j<#~!~(Y)!p(D` zr?O-j%y|Wl;+}t^TT;Ov{9J>els+FXxsHHI2C|jL6rOXy-^DL_gn>Hom+cVRyV%? zzk2<<mFuKTUWIC z9v7RMfW~urc<<}$Fc;x$v_2Gm&nW_T%i~kh{<{^v*M@K_!VTV7B~+chmP~l!cjM+B zP?p>-xNl@+Mi%rTRT9T0r*@kj8-rmEYTVHAsJk1l(lu^w@jPyw#tj`WYTVH7ydKpV7@NmGg^pcjMubz-*S{Q2`U({Wxuc#=-UwK+1niR?0io7-)iU%0DVst6Z3Nhk8b-9$Je zhJ(i6w@9QLH$%tmIH?S|31R`b1v}liSyCyuxs)|Gy}@(pr#4gFgt=S+qzR+EzLYKh z`M|#ep3zRDfimEY=@(FdEjpHjd~J4HMz=_Af|>N1j#W)o-K1IM-@e+gv@WL?ojG&n z;NpndMfl&DGo4sj1iBsatU^aYAV>(?(*88i2Wu-!lm~0i6uhIb?F|hLF78HG_n|D( z|8&)TRl56yTNSvy48`=dZdBzGnePFgHdZ?J2zaI$GwQvVk=536n`8ayduv%A zX7mpSx6_M`C@4oZOY)zA_}+tyyMaUS2+_A!4nTW3(e{uUK=YA`Qk@rEVL_t`jelB4D|s$3 zGPVMKnZOh2CsWta_bp3f4dtJUG0t-h9*g)y=vGkSdOJN^^>o(E7Ry=z@=|H>bE zdXk(0#B(UoK%#L(dop7b$nWt<^F2%V=&K&6@*L$|>ju!)Co=f-p3*(dund=oGAxHO z41>J-as4~<8Z{d73BTMAMDMQW`4jq^3gy*}hZm(R%d6W&&^i1bqBzgO{q#g92A%r1 zXe3_h1kmdQXSg!B-|m9@sqvikgWCiq1Aq9vNZ}xi-j`(T)JUGHQW!gu;>=SosE5H^ zze1i;h(C~RpgYI>GSR-y|14vppJUAPL*X9{dxcft4a`g*-SyqH0c9Y+N4 z<>hzpA+HXz%Gc;WlFKCGCIcSlf;-|-(bPW;2ER!3 zdr;t5NH>~?b=S-4O33prNEhVK-i0>&?s_qTe;ockRQ2Y6`u-|69tS^Utm8*eZWKma zo@F0HegD|WL+f7$ewSVRTQGk$A8PsRhs+%i_eh&#zYLXUEGq~;eQ&k*A+Dovm1pzg zzz=>~iDzOH;XKbk9?v+#1z`R(X|Fv8kG*rwwmlfb-0QA`nqL?z`W4zL@#(M0<96_i z`^{OWharz;?mX@T|3USj3*r&X({Yz&#_#ZK|J|9+At>k7F7+My0{gHcZaTTclW3~y3}U#@P|Aw^@o99 z375s$zB0j0JWCI$X&i$-4!&c^U_~OwTqU(*S6TeHv+t zmj^2>bqMJEBcU%CU-Q zHLpV!GLscn0>9}L zW*z9eyXg1a+A8+FFQzJN#uSAWQP>M`&!#$Ykf#1^1-=K9oqFh_@t;0TVMpL6`~0T* zk`pEEK=_pJ`uv> zdfVv}J}#~MjM~22V|{U{&qv>e_i6BB9}9}(b3N&|8I7eCcxeE4|7Q69pj^OL2nO#G z{_v`(z&l6ns9N#tLiY@!mxiF&3B8bGuQ(Y{276CF=9m1r)}`-pBL`WDfBM2`}!C0b9k zd4`}NL?elgBAQAxo9KL^ONl;CbQ94}h<;AAmgrAJ|0LQnQ&0oZNTQ>NCK632Y9o3d z(d9(f5q+NMJ48PxdXcCvl}|^akwnLuopl$lP%4kUL`R$4{SWHKnH?!OnOs;9Z_Ub| z#?E@Cm>seCR(pP~Io4szjT0*ytgjci$2*sF#^@cV1PqSp2W3x>*wpkg=#h3_8O|vkb3F9T0 z?2a+GI0rS&YnsX8fKVwG>#SU}NOVjQTf$;<^X+C5a02GcMP47ov4u99+3FZ=u|br4 zTk$mfemxdf)6A;)F?hy=>ru3I6oN3snS>Hy&QgmD%xnZAj1ZfjX;#m#oiHXjaZJL% z0ev%bbMYyFnFfWXb7iteI8HX_<xYEMJWcXf_SP^Fm_nuh%wv$V;wlIm`Yf1;tOWq}%Wy zjCop3jVS_My{w~y{bDjRZ9LXdO`D5hT~ULWa#Fqp6@do_UK62sZvad|!dYBeastky zJ)rmsgrej4Jy#~XvuW+bSTj=!ELL8t*wbFAYB`nRy;@Ei5vk?00TE~Yu17+?DU^%RR=W_0rXfEPT)7bqU z@ph2JlF8d0^c8F?>Lw;OiLo`vebShTc)y!#ED8HJcFjw6G^zP&@57>a3wExN3bC-I zzsO6nF|Qyj8yAnMCYuEp&8D%fI_Hs%sC~vZLX9r8XQSAo3bV4zHai+`Im>ZUp`)PC zfwCT;zDDG5qU>iPdC+W3Sr-Ds@rsXli`hbZ{&BAz2JB3&SM5P^VsZT*P90{I(+nG z%@xM_-z{R+QNP`M>3jAq0j)$j zO~)3rfwlxRtu145K=tilYy-3gs3*=D2ZIPeBY_%#CIO8ES^_i*s38R6qm59guqP@A z#l4KqCvd-*L-j%TyirHg(Hw<6H zg1aL%DJ9*}wmDrn3iOJSr90Szv8N#Z_HY<$VYrk_w`&qFG^SVm6Rj;*@BaR1Q?s`u~1wpN&VtsoVGbpYMC_s^!bx zd%bJD?|O&zuC?}ATfd+1AkQwU5Xpe&aNnn!em@LwJo>Ywn@)$hyAW1h1Ns0a_29cF zQCevap8Xl6dGzF&n^9VLPrbf`o;(wBtjXcSJ;w^+)r)6}R)`Y7xxf$V%`-WUYei1T zeSj2GTm$~1rXNph^y3+CzynM~`AR>XE*{iL=mXdUa^%ZrcWK8p>j0h+7o}AW(CM)R zu)iuqVgS!(h&ELN&OrHuK(wcg)hY(UFKegV?1P1P0{2UUc}8c9DLF)^hX-UH!u?9X z6S&U<4%6A*BSM@(eL+Kc=4gc|2W+WTnmmT_xA4ccV!%6xqn+VAlP5|mAI`J-#%k6P z&@bGt96>sdXx2xe2e`J51gj$;N5DG)d2rex+)u>hx*E`PG|yfA3Wf9~6J`?^b|IFbUau6| z>sZYvmGvLftZ6(;4EB^xRfT>4u1C4Z44zS3p?PFdf8YnQ`0kNOz2CBd@^$ETQVrPT zQIqhl_`S35e&rP`p_#Ch?>_7Ys+AH+?4f+%G(?*`{ z5vADyS8B&iKE*uS6!x~6_6T`zrhLb09&ZW}i+X&v2$2A2+e&*lriHzw`yGc9@?g49 z+W9u>Kl*>0-d@;twu64$&gV`=8{!Iz1JDVQ9zm zL#KQJXW+V;*KQ}>5RW!Gj-l!UVv%D4+BN^>v&n@{kbU!~cYR zh4xLS+^leIM?iPjQS=weB_4x*H#pV6r&5St#e|!DPU(EvPNQGR_i54vdcUDwL4Ur{ z+ckenc^=nFzSaFf_!;m4ziK;6zcyB@I?J;UqqLwZ+Dn|9-}fvxRxA3R@*As}f6!sl z548Vdn&*$~_v4!5N4>oL9PQzl7Ji=fpUP7q^YQy`aM>Q z{fXt_4}ap>K~b9D&q9QwTq$5f`0uh`&_B5Ll(g$(rgBMnMQZLs6Aso3=+1GO@4evK zqG_TM&U=;5x3nc6W^Qe#bcp?&Kun$nvRC-i8diD_==-=-S;)d^F$hbG3O zT+;0t{9ue*(4CsNUz^|-dzU7{ao_S6O(Xz%-K~kPrtzlmdo-~G*Rl6%N-iaU=RtSz zeVUS|=l#52A*_I3qF-YFs^~X`wa{RHF{TQ@x4^I64E|70X)8@EMSq61LBHX;s;ws0 zvpp~L8(?tT(11byy3HQ|Z-$-Oj;cgIYLeKgTli#8SY)s!Ex_0xo%&k^mf2P_Q$ zJ*+QK6Xk%8fg1D~{XGc%4u9%5ScBe;)ye>eahwQZJyDuZFyxN%RS)An>bHezD(-L} zs)+`pK^GwXS=CU=^SG82hJFTpWq>HMAc?|uE`&Eyz{t7KA9R2t>^z%v71DO0bP51$pMrh(uz@RAbiSm(f zomGGp(Yic+Vl?`FQx%|<uKevfEj zfTbu`J%f4&{$>(l9Gt~|Ij&XD23=#I_s?kJTa-)u2jmWDS*|Jn7X)~h20!$o4il0{ z&k@bC0{o)?i~gxY%S#%@#~4#J-~*`7mQ4Acbn{%PsW_t;FbMa{)<91Hi(b>j48Yj6 z8vN2&lcyd1ifeP4hWG{kF-_N(O2But<2My$=yoVF+0JpT6tExdK1&n%@aM%2^f%kh z(Nr8Faw#9gC4kYOHyQ9rK+koW@-L2cw4Z2G@*A2s#rSW%rs50B22B*Ro{iwY!Plmu zH#HS!mTrOm;XdC>>4j^)Oa1`jO}-}{&Upr49w6TxO-B5;%nA99abLt2eCMzm#&N#q zM96nl`8>#ZJ;@1^oN&GK`NvLp&Uv5jrSaOw3B#R`?_ZG~zIT)i`SJaj>M{T6Zo&W7 z)Igm>Y7xT5V;K?vxd@je)O3tz0^2Sx-$<>&m*75otQ?T|82W5H?*y*h#&_7^I&EBF z@B!p+0^lm@)T60iY{u4epXW;3>bbApZLQ}%Q_=4h#Pu5`SGZqxh5Hp(xLO#1ItDqWuYY=BL;&=a{4zTRa8&V4(4MZ-(i)?Iks_R_WI zXC#0E9z0k) z_Sj=0E-p^YoHaKp3k0J<^C;@<-5-7+56n9i60YFqhBvz`91q$V)nh~yspuoPs05g zUZegRJZD0g1$zDZ^`wic{GL7g-qmkhRP`Tb`}#H7m-2;udq^7Yk-nOJKOM%^1wL2w zFRFQdPtBeStb^CT4SymS1!^Xteq1-)y8F%!tM}{!3o+~;_wxLOcbwJN0IPZZ>)#)2 zHe}B}lvu{@a<9pLwX2U_KwVew-Iv}fZ;vX=jQijE_m$N^SNo!%|HHIL_f*&Hvz4gw z`=tDJu8=inIafU2E93>p(k3)yH{?dhO_5tj>bZwg*RQ4L-MV!Xp`oE- z#E22%>8GE*OvjUwl0;5Uj#$5bz0&bdKmAmkIB}v@&#n9^73QASqD_q`iD#_O$c-`E z#e(f;x5rGJDi%OQG25kFu>G3|Xu`w=-<^-xh(8v*c4CZ_zr@VjePZOuk=tX2bjt;d zm>4o`sFWKbC`U!u3e-RuUtom-)uwi1yDV#Nya$}6vkl`B_@ z)vH$vyWK7_GBT8Wi;9ZGh7B8(FWb6xt2pp>ky!M-6dS6fc;}sW#O~d@#ooPp#s2;K z#m66iEDjz#D8BsiOL6u@xj68H6i1F6QF?Le)G2Z9>}hfACn>6`s>H>M7nQCsnY=NA zhY4{Ll*S!{_RY|nTVU+B!GO*3cF|9E6=UQuF-J}l$#R9*AlHeH<$lATiaUYd3iuY_ z_XGYA;Ex9W1mGvgX5x9^uLgbr@JoRI5%7<@;I{+5AMhUs{tVzR2Yxp2cLIMu@XLY! z74VM%{}k}g0{?;wzIQu}Z~oBrF&JlNU>sjA#J+5dw{OD;KWZjqc~>F7946%PX+oY} zA!OA$AuqV#-wFIyz()X+)F1evz(-wGaloGg{O5tc2Ka@*-vRuOfPcaT-%bC1x)s4n zQe)uX41D;XDg;B)e7lhSf&T>Xp9cObz~2b`k6rM^Z6ZwE4V!I=n5h%YwujgU&9B0Y zLNwQbX?RlC8pPyGjk z1P2EOh6MQf`UggI_G;h0ZJWV^TN^b52IDdQ55^yXff1cLu)yHKX6N&e(13vy`^ZA{3-2bqXv>_eY0`Mbz{X-uK2^km?(VP|B<9YYp ze`(UB$$dlE0-uMfg!-FbRv?1iz~=!2LxV#?LI;MnxU2x4x9_Ox9}pTCGB7kSbkJX$ z-{ma8=N-H{4-tC(0jde3*CP6|fV2Np{ayQnqKiWZhJ-36R0~G`gZ_xXu6`sT1a&kY zH0X{y?m&Us=Mg<_itzIuhz1_P^S=%nq)520_IW_lhE08LvkVLg3`H*wYN438-}o?s zZ*PD92i=-BwD?AZMuY|rbW&-2cS!^XbQ=)h-9Wqf5$6N;RdAqx?emCU-X4u_(zIql zppYbnhWJ8}EI`V>kEPgYht60Cc%qw}604&m$rR_z&%KTcd_O@Mk~-YYz^* z)P6(&iwx~^tErJ6p9lCtU5(GA8T|tV^Sh%?V_i%{Sjv zvBD=MSz;C9jUvPfyLRmoAAb0uiVcn*JuHqMJt~eLKQ6xc<{Rc$v_XBO)k`J==PFd-K@u=H}+jJ)5`e*uvws+x`kYyQh^`+qUi7 zdN=cE+Tm7QH*eXxeS4H`=F!5tlXoX^U#pH@-uK_^-3$e8yY<$;-q*6Nm-j6;H?V=?+}o()#AcjXS})w0sy%#i1>(sYzUvDQ*p3Zvsxl{JTjr1R7&4Ky$cJ12nbD!+1 z+pdmMn>@#i8ROdn34h=F*=L`aOU%C|pMwX9 zarVo~%F0vV^~gsbee~Ln9Xl2b7%+h66j4t6j2Vx~Zsw$ga=qD^`S-2PXZ(B~KW%XL z(;HCw`tR+c?j7CE?&HNsMTr>T)upH7~*Qu z#!n)5y8G_CA6mL}>EjPR_#pevGcYjFi}l_p{XhQrqeLvTqIK)m-O-23PoF+5OG-*= z`+48Kee(0qKUZ`@K8kk!T~SdXzxd({bxod(jF?A3=-j#QzyH1(diM+Jto-@spXCof z{P5!^pM0|U*s)`W(bi8a2R{D=d+QDwmJ|0z=|?=pwrVr!H!^uJGG$_9(r@r#{B7jA zyciiY*JjAPHoM+u{v-6i{r20-AjekFi6!J==gysqe(J};g9nuijvP6nu1Og&w4)v~lm5MX_sT6>wn)faB4$=L%>Ji5cJJP;GHEX@EmgKsUS6*LCJ*!h)Hm7* zWklLGekW!0K`DJdl(O4yDZSs3veOPJyOc;d{Cz2NPDpwF!i58{mHVzqxeNWZ_56wuf9^5f3wfo-=vp%Kwd~U`=2sS{Z`7r zPo?zxNXkC@r0lsz%7;q9!!9X1f`@i*N!jX6DVHCTvZkhH^|eXAL_d6eZ6^IjHe_Ms zKVm1e1M16TUr9N*T*`n?(EsECGU)Mvln;W3DW6Gsp+?G>{Zd-C)ox8(7yTD6UZgHB zd+4EuT0s|Je$Ij}P`c`O5Fr3lHp+(rf#T(+^*~qHWu@-64nNv@`ma z`uL!(UrE2%|9sAIfq3*Yu4&Y9*eH4UQp#ZPFc3Txosrj*zDIubO7#Eq(@zrP%w?H8 z7}?;XKAF_V$1lJ9BKL1zBQxfP$XBQN%9p45DIy;KTFQ~fq#RZuWhi<0+-c9ynZAZS z@7C>^KB?U{-JUyd)omIcch8mRhn$yn>(;Fm{P_~nPd%y22lbwMU6&7o7wS6o=)5QLOt` zq=og-->OxsTK&fu&vE{D@}T{4JTPQId*HRf1L=p~lO?Z=m$`HL%FNmQWGZ-A10I;7 z;6I-L58f0AN}z6O8;SN%NY;R z<_tazUdRK-gDdG4>8GFEu+U!?Jkv+!fQJn5kTOH3KmM$gk>7xaN+};Zq1!WkQpgvV z?3p|m_DmiOd!|qF+M=qtSeJg<8OImIS+$uw7`ZMV_1TEQ3)7|rz2xh2d&`2S`^fAB z@Gz^NJYRKMe)hA@Lj-sja}qqb*mH=}p8XH#KFMdVK0X^hsXcgTy`^5ir07R{zpQ)r z?yV4`EFt~$i-gn}^1ztK;Dz@%)*5jcpK-ip%)s=ft(V+5zn5GG9`eD113YY9IaQuJ zd+NHJ%_;CX88Y!P?AaM(wBJ@g{qz@x{`c@Sy193T_p0_5Te0dm3kK>5PV$K_X_ zl_?%vV~j4&7~@Lx!{00Y2R+M4H|ZiIO{AOlK)MZ?(8s&R#~gpjBlZ97#QyRv@K6jM z*3SbEum##Pc}R8gu+qsx5_x!PfP5|%Jj4Xb`QryF9+>Epdb`9J-QTHS|LHS0hB1y{ zb~qd|H#b)@E;6#KOs-}pzyA8GEPE|V?pWMYZe0i-U<+@6heD@4(@U|$?=O?B zzVf9he)7dh{_+Lz@GN*(1Rmyr2d26)#@`Oq?|(=?bV2Dq^m++-dG^_7WnNyM;^%t! zFnA$u<^DJ1&Lur%33%879+W+U2l^z#p6&2StEcWU*KUmcz7N>{2h9}(Z#F_u}nbg7&*YgR1}SL5SqGGU@mT0j3f>=``N<7cjv?qNSAB_-{E@09J^x0ewS z5i%nqLvmb>kB^r#X3UVwmMv3u{pFWmD!;>6s6JjuH^&D0D#k*LM>!v0qCM}+oGEL5 z#(X1fR;@i7F~&-#Jtx5yu0{XWty`NS)_K&RzjNo#Jz`>Fri>py{u}sFC5P11R5^6$ zP&s162>FkH{6oI{^2_q2mtIozaDGpE$pgm%juQqSoWqa@`cvv5$3nKT>xDr1Q5NaH zAm2})bt%S}rNsRgCb?JMSocAnl};GBWhakO%pr?s1;OxQ?=*JoEq$=iGS#a?`&i$S*$FC@-8pe*p5n?)8V{F1(k1dhyC9#WjeOMQg=-KThpG1*qiHK#kKjC#_ZTBl zcI2g=1onUWihXpW>pw(>?b@wY>)~gfdFD6L`PgHRsZ5(Tc<9)%qntf^wvq$K3}bD_ z;Dhv%eq+s-a|1%!18s!%P}kl$X1mTkIDZy5xc)}lqW(jdQWh>;_%ZD?BqT)6ojX^_ zfjp4@0Rsle@bGYTpE4j1MkWu&yq9w^#@Ez)(n&}iB5$s`#h8la;Y({S; zk#mSYLO*qrnYzUFX5J%RTyvf|bEdN2fPet$=jSK8bm^kxz~{uN%SU~>W!Q!RsYmn& z)GPX9%FbBd5bDU?>)yXm^n>qZJ$m$Lg+5$Ddw%P!w-gWTAFdn1J`@j8QBiWpkReL9 z($muw{p@S@IsYczv;+Dd-e+t|{b8(4JD?5FCRi_hFlhe`^(^u9^z?(=Q+Ms!RVnm6 zpGMb9KihSUe~f-*=6sR#K(-RG1>Y)G_5gWH=$q03j#2Dm1IJiTq#tFU(*M8y`s=cw zpg@g*g@uI*kA01Ps)TQQ5@Y0C(7qG*o)h}M$Mx>tsQ8WX5B)#vaXGJPZ-k_U@}|u~ zPgN{2dGciCTVd;Je50?Sej9oKeL#Z0NIRfiQYO?B%78xEH6G&Mtd}yPJUE_%U!FWc zzuE9wMAxO?Raaeg*j2Yl8~LIR(H5S2?l}pcrN(L3MB0o@9QqmhA|~n&=S0k;oqVlb zyOwK=c9Y3;qqNu3Z^ZxT?me zkOz*Pj9=*gs0SR6ICip+Ip<{GQx3-ZF6F>$`h5CY`Z3HY)V>CI{A^!T4p_>zGPAL8)sMV?8rCpm7mi!s?FK|MsL(K`@oUoA-Hg&=l zPU!1|3!G5uP$RtjcRObB2NK`!Y2?fe#Z_WOuJy(SYAI(Ol``m4eUFW6!Q4}L@NFrd_)yAE ze^9hsjRx|1U&DqCdtz=k4K`g(e}OKX=Cbzajq! zpL+m)^G#OFJyY&Ca-WO)D_j%jTI?t1q%8a4y7qco&`&Q~v?%JOmtGo08W=lq{=o5( zew||xeKliQ#wmQpznR8VUfM6@9uN0Bxu(ti9j?i9kL_CRa}Izx=oHKso-*e5oaeG# z#?kB(W6s04$u)7m?D3QOejoSB)>qZHba7caTSp&M`>yXk)P3iHeZukU%!z|CYw;+x zj=9{q1~~SNlo6-(ebW&~^?hIC{Q*~fYZT(#QLgV{Q2va8 zNejoHEh{IhH88FRb4}i8pZRa6^?gt7w<&!r*Z11E$3uPO9u@aGxlcIy1BF^@w9j!I z^ZhCF=FNM`b-&w)X9*cw7t9Y(Yl&RX}k31`^#ydK8~uRkG{@5(}$e;SZAM3wU2pH z)XJ4BN4e6$wyEcYOx$ndnkx4fxF)>u73($k3{U?o<#f=}Z@<3RMw{S%r)&F+E9T6Z zGiAYo1y8x|y^;p5o3JmKxW3N4rhMmqANQHK9!h=W9uxOA7CZNs=8n_z%ZuU^4N4!& zF718SZNKhbaNRv%%74dmzG}aVdqrH+0q+0vy;qgJn8J&Lx-`99-w@=aRU2ZSG`#i@Nm?pJYLHP^Yez1F$EK%3zH2=@wY z(Sfynz~t(qxp(WT|Fo^ApMH7@{QpzN{s89%oZGQa=zG`~=PEy!@Bb@I?Gtc)y2!b{ zp6+53+-G{hxlgvhNduG8N3{C{@}Y~D+rKeCqa8Blcim@k-MeEyU2D(iz|KOo$HKk3 zC7@xxbFa}Q{m%cf{TE(%A?mf)UK_=|A;#mR!@YaW-c()SO^S$S*|G*#p&$bbNoaSC4*NuaNgVp*gX_z)`n(BA@17nZG z&;er&+0X}!6E%}2O_~5*jz^5dA9i!jf2}!H3-%TIJ}EXf_FeAraE*TC$dQt=;QkuM z<=XuM_Pe2n#ycVg#8~w+`tupowHEX9GeZB##V7WM`GHhm`P+`fJLi{kqBD3tv#Ted7JB_(B)G3Tb7NyCH*6J)1Oo#Z2r zJfdhb*8PnAA(o@w82*CqCBFXp>nTE?D_l=f{*V4=@#4i#u|BTJbIhmD;oicNPd=&k zm}wU*%fvn~)_55&b5DhFJ9t=q18vu~Uv~}5bxnff(e&xlm2cp?s>Zq^<;A`x-}K1` z4jjn5!M0WVYzMwZ`TzRpFk;|!>(V){m|IT?G3f3R)UKHD+IU+NP1HDYku zp0O`U8mMF35cRZTb26N}k3TMmfW# zKXt|De%g*5JGjpJ3+kwV{+**8a&An0Ex;UP#25N|P`-$-R~=PVZ8Gp#mO9NC&WL9W zo1!m^IHk{-7@vNGu%_F4m&M0|V=&vItr>G7*H|#>j6Mh6^uzCl;q%BF>6>Urq}BL+ zN7>eNxnimw8;*0%oj8Bw{FQSB&Q&a!E3E`w+-v2WoU~K_*>3jyU=`#1h&kA*b9x<| zi*xS9xgY0!oOk+Q-pLq-F%{{i-(un%hVkMX|DLAma82L*qOa+29f5N;_8;ZMG01oa zb<48@RlLP`kFg$OO~$&MZ{)3Bs_NjJBM5X*expZ^R{PxaVeE&BT`6*-t)H4tGInR& z&UpjpPV=G%t2Ra)mePTKS+#1FiU;|Q2=~<}OX^GASiEdUk&650jjN5h$?OL9AI1gc zx40+A_Xmuzlxf}k{_=Fi0o9+JL;XEYwSUf#KXs43o_b1I4j(>T^(p-{W%GRFP|uK4uRq?`4yFSu7ko;YT6J&CxSXLIb{wQJX9xJ>gK<@tLc3pZyL zSII`1M$X)n_chT-n9UyQv?rdxrt!-a>Wb&DnFPN_!IJ}c`kI^I*DH9%v)393i$(WN zJbA65v!q#_yLOYaq*~TK?L!%}FP-e2QiYSzy18Smp2Ck}m1Zv_F)@Bw%@MI>+j1#fAo{l>sMZEfp>2Km* z)Md0Ch#ZfS)79_6XW-wdz`UM12Z{vzH4b-Y;MrJJj_Eza+O0s9H=o4}=0Tj*+8!v zrH`Xf-}HJkjEnFLHy*`P>QOwNM_nfO#tn)Z^z}`cJjpyOdU|}^)G7VickN#i z`?a4reM;~6ak0^pqvAVHjvF_9YW&og8J)*Xo!mPresY&tUE7-{M@@-~iH@H!%C$9A zWj6PnF@0vd`dFv4wpQ1u?V(l*518@M<7Q5en=!|EjXTq$r_Dqw(c{CW$IXhH6g?q2 zzV@N(&o|M9+$zWS+!-`?ZgX51uk>>cr^j?aede{KxStb^Y4ML`{m1Zg2L! z)QI<$Tj}e48BKk?YnfxWc^mzPi@MJ9zv=&OD#Hkdfuba}EVVMVDz!RQq`9Y=)4b9w zX<=#MX_0BxG+SCynmw&3tt721ts<=|O{9CIo6{}ne(7Q9k?GcSTY6HuJ-sNsB)u%X zBE2eIWO!tlGb|Z?8DSZb8P*J2MpA}7qbQ>!qb#E$qbfsWdSse2Et!6qVVRMc)=XPw zQl>q#D6=H9EVClBDpO>6WSO%pS$=REL&DmmOZN|t0b!|t0Jo^3j?Ra?65fe z9AS<~ht*+oBsuJkB1eg%%u(T}a)@k?Y;(3H+b=sTJ2KmvZOcx|wr3Y*mt>b^S7cXZ ziyV&}bB-m)FDEP~GDoO`UdIFQ%9@jqW6Md*NyczNKDmCmLAfP)rFms}<#`o(m3dWp)p;V{J>MhWGvA!=m2b)S$@j|-$`8vA z&ll>@*m8i9+|t~#-16Lt+{)al-0EDB=bq=0=b2~D^UAa2`Q+L29C<}~#d+6Tb7X#O zzBNA~-wntQrux>veSdQf_J zdTe?^dSZHVx+A?fy)?Z%y)wNz-95uI!z;rlBPb(0BQ_%;BQYa6!;w*(QJPVnQJGPl z;hyQ4>6Ph|8I&2G8Jn4qnV6ZJ>Bub3EX^#>tjw&=bkFk4^2+kb3d#!4ip@&MO3X^m za%2@}m1dP^Rc2LZxjQ@^UJf5ekR#j?>qu}UI+77Q7duKF<&H{6wZlEzGutcMCp#!R zJUcc!Av-ZUIopw4oL!n-o?V$;o$a3End6n?lM|E^o)ZhLNQ6dEA4;JMl{wW;P4Iyh zgy+WQCgdjOCg(bGiy_}~$hJDy9a8mzM1%6e^J4Q7@)GlsA=_fewHz|7&U1$}y&%aT zNHG=?Ooa3tkX$LGR+(R&?+$r+K~_PKQ!HeZ2>Cc5n^MT75;AdzJiH)_Ajl!MFrhH9 zFuBlCSX@|ISYB9JSWVe@m_#CgyWP|7W%scM*~9Iz_5^#PJ=yNC7u!qi<@QQ@wcS0% zGsP>#CnYE)JS8?IAtf;-ImMAu0{y8_y5j-8u|Q|Spf6VFN)q&>2s%;*{iuR&ct9^K z(220Z$U=pJZyGZd!F{fBk{8GYFB2%m>wv?n4drDDCNlIBtMM_nQNcBiHr&?0|Qo~XsQ?04C z)TC51Qzc&IXXr>Y#0>yc}QZ}Q6x%Z<#n z=GteMz!HP>@!6H2j zwh;;Iu);oUu#hBWBSo;164*%@ETtm*|I4WL-}EP?{|8V@0|XQR000O81&Y61TxA0p zlgt1B0Hy%|8vp=kH6b(jH)J&*m84(jJJ(K3z4$h2@v+B6KqqA?X z1W?EVSy%%q22hNmP)z{_#4H3--#O=2cf#V#`~3d>cu05EUC+Ju+_T+tZWrFWRpyx!f8pQ#c3xR!3GTdd&f-UxdP+*4dZhHhCp<+DKKbNR ziszw+J*A;1J&!)=@y(p=dE%)>4_}*}o|0*{@y6MO%Z~oK|JeAS^3lsa5H?Jxv*S5{J)kL6MT}uXKXNbV!60n^|d9u zAdL~mDx|^pv`fn6Ut7Agv+}C`zH#5CcB|b)CXx%d7&J2x29PHO&lNy>v0_n_u8)oVMpDL9pBNX zo%+n_)2IDE_WAx}(C3GPFYNQr*yrq#i9Sb~eaeyfnNB&PWV-H=)#D!K_!l6X%+AW} zRL;R5YYIlEof9`T2UwH#(h%&nQ4UutqnLwHxm}Xi5)gg+14d0C3kv)4&gsoEQ!;a9 zRwuLh(7(FH^FUp1KN)glRisZkIPw|(C1{c&mgN0&>*#(;WUxZQ9ADkd-)OcB8lt#Lb2B|5RyZVLiUwj zjIBj~LG!m4#_=JvtbI2A;ub$27H@H5N?*_?L!);@=Vuv(-cL)1i|ZU!kX1o|o$PUwz{W%M9b$(`kfNcq|`?3RUDLg(c2iRfh0qK5efi!;speo0qxpyO? zX6L{poQmFaEn?F`?e%n+m*}MA*#v_!Nm`G413;G9zMLj3GhU7?$@CcR>yN|Ut`;jQ zU^+MBR?wdT#Jd84kIuK(%38FOu!F+~LwC`;p2?dJvP+x)NXOi34m>JmQ8MBJi9Ju$RKOw0sJ7fmrY#vaB#V$Eg z0)%0Ohm!^DLL2D98jaeI4BU&Inib!pa<&$tgcj|TNC^wIMUnc*KG4fs8`5N2E6Am z=M&2LmU2c?&Jo$$qc~*mA<8*JIo4xHmY}s0g`y9t9)~X|cM`~Mdtvy5GBTi^HmSEBg67L? zNv4cseU{8tWzNF|zN+;9YGg#JiSXWAd(WYd_pKpXcn&X)@d{ z?5hd($hss>J0gy75Xd{wk5iqvr0L7x6)D54jfmfy5x)WB%OKUqwzH3efRM21-qr}I zQ}du;$Pt~{savVp70|5q2j0>(P^Ucot{{qv)QC6Uh~XZu;ljBeh2pT5%b-HeUL*ty zfw3;uep-yV@MgGYLctFIZ-gX42t8xY@@&mS6Tk<t}x?KzMREeh^fmCtB6Tg9d68gIwd8SH^EC5dEcxZ+Nu&fD* z9I$;^MtT!qAL2{CtS-vT74S1#fRFJo%?%(LaMmv!B^ouuaKCy~Fbm1iXe%;9B5Xhk za`yTnL8NNIOwW3he+~D%;vr=hxaOv%SAT>mw6qg(y+_kn$mlLg8WZ6j#L?H*LDoSX7A4kMl*Y0!@=fQ zI$37j$mUe9pk%-&ZdMicM;gqWT+?OKUKxkr*Ewai!3h;gKSGYALPOf?)b8Bo^#CP+ z^D2O2G)@H-L0Fyw9JSeSZ#jbfrN4C6FgEaM`6H#cXEQ<8n7LbSx0QQK#(;-L8&T@8s4oH^^0@vJ&+!*4zdQ6t5)E~jV{j+*Y(FP2ViHx zL8jOU4cmB~ub>Xp&;nRot+$%R)3Ep`4x1*kL&d(lamp}pT`HzKczOyfnH4g|gpQgS z#|P5>br$;~V=xoNBUfi!CiviD}rIxXxA#1N;g$=mli6o>NXvH0M81m*9IPfD9`#dS&70+qqptH(yI8x_Rr> zak{xS2~qT^!$1VDf*};=OxX~ia(gwk-0m+NHkJ9K6nZz@FuyaPL95`kXS&p43MobYWErLXAdK5cncG9ssn115n$&* zV~ozS7N7oGfEjYfo?ujh)FygA2k)}c6tvaEQ+h5+f!9EEzB3uQ;RY*FFWqXQQ)j;T zQaw%I?Q?B(2jj77KLZ zyxyCHj}1tu<{^Pvh}s9rbPx3E3;_nXxDBQKa8t;w6+mAbv8zai)(!Z_>OdE&Dx*%x zL_m6T#D-kU4t*zU1E2yd~Z{qU^GFCpBWAe4`8xl-?q4ZteKhq#Y`$+86Ky z%a?woXQB96}VU>6-%$gV*RuqJ~vvY^ey4NC1_X!pY{u6DI9U&YN6;U-!1cLBOTd_5T) zLLP0@rd!zZnLJk--*Ot<46?<&=%>AS*COH)sa>5hN(Uo1lz8D%%3AF&K6KUbcY3UM<&j zI@Hfc2bjH9e!OX3kPWs3)UyUi)4(;w;I zL^*4Z+;L2NtC@Va;(2h^^?&kRy) zT-uR4FRF2SqQ;-F2CkEPeFlQCt@H)}XDWfyxO{@R;RjGFYg-?fI${?A6#MZk+=n&U z(A*+u4!cbkHX_Mm((eAvem*e#VjVbmN3R4fv zK>?w@GznCJ9Q{Cm`2{8qhJ80j0^tW_kPUbe1}n&51sSYh^kEm;q88Nk+9yG>2I6(VWFO7iMrZ}OuZPQq+R^idQMM{G zSGXJ@2g(hE1~zu=&t&fVgwA2q*lX@d4Qk*uS+<{64-?%nq!^f;0h zVnKEa?I()?vkO^QAqs}4<;a}O62#Zxg@7*Z!f<=&YVG*w1QU2GDNgoQkiKY|ztJcx zv-dJd)Pfc259B3__xnG zre~y)BBm=zJ~lH`Pm;*UgEpUqa`>QFF%PoMQql%wO3MAgqUBD1xLuhgR-z#(;63RR zr+w>ZyMo>(@yEx|G{-<---9!{So>rFG&fNfvw8A70t+R*tEEbs5McfR zqaHL8ni1T?i*YHT%!$}%#6n@h(-RZ^6d<-X?h0H*+Ko3r5p`yUN6z{b<{y-^jx(|G zJk6ya3$TXR@E+7fF0=y#BMUuTlL)X=M2F4>+2@EX3lUlFL#)8n30);4A4v(a+MK=G zH+Q1!Fe-sTMX=TN>u_^@-enkT2{%FVEd)ISk8E~mcbw;Y8cN)A79SgQD@VC}ue;u$3ElCKA{H%ql+>ZYF8rs?b9>z#qf_zv&}>cU$Kd5XOA*gE@~#O(d7V*H%qbz z>KCKs$M?<)*akNOJM4EQaOeT>AY6&oHBdnvNl>VLTJE!R{8i>nv?bEd1CoADiFj{5uHgc;wCnrkOJ&GxHZ2FNCJiv=_^myo4g$=NGa{Tw^H zdnP~GE0LpqmmDp0p~YS%h1PJ_?7_YNmXoXrbMW*JCsX_9cCHQGWE!y?RW6+R%sG0DX^u=w>By`?4#&Yq&7_OT{$8Q^k+J$NdG7ovLbG%U1RN1O97dEAytdL) zK%+*mtua_=penQ)f_MiZ+&PCnGbf$w#GOR4Fp6@>8Xx_40Mpv z3(x^#AJo(KJVe~Mav#hTX=)&m3}`RNa4M--7mp2#+4YMz(b zU#Jmjj1CO-G&)7p9p<@W>JB6oSTiy*8Cb&*ZL1q$$1_mv06eN5q~oTB zyaXL?6g>FjYH}ZXK%fGgKk%mOc>w35auFztle+T|&TjQEz-a)S2NBNmLc1@+X;J(D zZib=UqE7u+e+2jHKH!eH47jNJ-@BavJ`Y1pvl#^Opk9c_Uk>89PEWoLJ+M4hUP?PK zI9^c)(PzbEZ+bR@K0z+p1N=OnK(9q^51RrxzRc`3?LHSko&=9BeWZr|GT74EL`zx# znHd5=_K(ZRUVLvC?GLiUftqt5RNSyH7laC!A()*R?D`{Q98p*0qzR$xqci(ypG^ZE z&)Ez=&Ojj~(&noQU3^2AEwS zaa#${n|G1kY}bb2C~^$gbw_Wq2v9pyHS)zMv!Kq}aXTB?Mk>K6f%lS)`%-oYsoa%9 zZG!an0;fd`|A}Y{OvV&GdBgoc6K@(wJ-y!p@4Ad5!a}#!LzW!L0fKog06rrN0Ihn1UAsYhon0$;=t1@c zETf%hr*>=5*2)@cS{*)HE2^X(eK6?O^RO)#_{keBLTof3vd?=&3?o}I8e&M%H_U_Q z=%0_;<4###BTinR#hoNc`K15nd>=-wYiWR%K^deSlMZ1i*dD$%ODi_MTw^?Az z&IARRWuV-&A_!6zEc|$UDZzsnlB4cIfuXY}RH7ZnBaGau#PIVt>4!wLg2YhO*Y=W2 zQMzpbO3FKZ%wx7!cbWFklnBzyk_URQ)#0e3!fLMNZHKPcek7uT@6jiQt5;5dg4bcO zQQA{tTy51;wTHyS+K*_bwZGW7-S>=$WWcy!IG#&`+An%~Wx&huOeSTJ;sA{KZ8hZ5 z+WNMy>gm z>AR0jUY&aP^<t$Y0D^#ABe6`#<}{l7n#jL7=E~&Pvs!(cv`QK^-U1G^ks77 z3bbC?hKQjWTUc1u95wicsCFB{uJF+A*Z75kxX zW2$ND)oVetYUrb1s=EzS9~rE@o|-_)`=Eo=2K}~nDMM9m))wDL8-jIerHlF2I0Wh| zOu}pn;fw>C(Sab(K#PHrqS+7QHZB@3s6`nGA?3n7(nrRI%6&G+U~PCW9O$b6bb1`X zk*_4F4`v8@n|9k#Q{ukCh)dktAxYoYN8;YmSBEa@f_?KLIU51t|Gvx|-s>#FdR%kW z07{WxQH7_Up%iadXjFUtLW?p~dkc!M=iaR?+ACPsTc=zB?L3dqtkG~cRCA9c!~Ie< z8KSL#nY*>>Gl*iJaW^wigg^j{y0>48doXQVA;^N$>V3nU0&FT2sGdyWv@5YI68b_0 zPLXK{L%CAz?g5H?MGBWp+xx{OQ*s0VG52Bbr~ve`bOAcPv2Rd+2u8==1xct)fF=R* z!5MK=FxRPmZc%Q6zHfw)ti{xJUoMDAsgTq_I*i_5dpXfQtPW)S^IKYo5!!G2aR5Sz z0@}50eTY5Ep7S5LpW85q6lGTx-iyvajw7JBEB2g&dahjLaBoJJp7gztCfjPtb1`%% zba;KL6^qIlp_ZJ3Y89GZ`!DO4_X-9@i7(Ybllj`KLulTwQl}~dErL~XX#YD&5Y}V- zjy5AJe!BSL)$nm4ZVnmMSNfa%{qOm1FS~PtU;d9FR5p-5L5k<})ZzdX< z4=AJUew?0<4}jPNCF_UOs9-C--zG>RkL<*B($IPV|0>@8*;szs* zpAAL4a4Yb|(jP-A{L4>q1&}8LrN#=!CqM%ReCR`2rwTH@5OPBD=a8~P>wwR-e1pl{ z*1~;M*b?r*9b48z_7=n?x%_w~IeMg@7=Y%aXE%{uu4SNwWYc+c8aW3gLv$~Hw2F(Y zu%bY!1Vxe?e3=xcgpO1)muAr?fwS+Z|A(Jr|xr+6@{1Eb|+?3ypR6y z+)`$^pTs)lTM$^FD->gMpED47JR=ZU>cM!MzGpZ2g>0p>kWFS1=ngA$3$r>3+2=ua zOlGmSi^cE>!KK|=i~U~4d%(KZr+ywytiGeXhQCt5=wQ%!yD8a(~I0!F+N zp0s~I&Ykx*@X6b0xF3RKHp9*hhSb(>?a3s3gr#M(?ZKi#n$q!@Fg{@WIEV~zr|B=J zya!YE6nYod1DAK5RwbC8s7FO-kiO8LzmqkM`t>j1Y@f% zO=cGOT9#(i%4&_vJ9KG={uQf*$zZ_-7x1Mdwxl6VxA{QEhIy0OA@5B~=gLN%Tyxki z+dg9jXJCd(^Z2YSoea92;_!L1l*#zuef*pI!3dJw)f2z8*HU?iS`LV^DQmY_u?M?~r7F{nCgm12 zmZ4m&#!{4FYL`9qydU)x)Ykm0S>5f5y@k~`e4QLa?8|R&$QQ#AVhH)MHB_oaUj@n5 z&@%OCk9y>sy4xylIGL=MKtrL2pb;t6(2LaA9A%~&>#t0KE+=B&L)ES%F+3b_q@zIq z))~4Hdg-s{`C+xQ{H#&j(B5Cq!naZMcCx=d$}E`%B}H8nHylk{>X6tz-3|$T+-JqG z9h&u{#bFbQJNDk0hCQ%#Bj~?XHp2Z6v|s;#EQ;Y5N$03b>RY&2^-dMT%Xvc(?|>pJsfg1o;_WTsf+7R-EcB10BFScv3@RdqQ+Q|np_uCe zP<(kgVwgvB1@WkJ2dE^lQ_&^A49&%_mhf@xha!eUN`(y#);aIw;P*9DbX6M0U=>=nRXNlTB70G$nYa-k)m`#OQH^zo-Mq?zQ95 zr({Z-pcKo@-qxOF3o>*K${Mrc1M5$B$J1PGfg}iyq2s@M(~m z_I-*{)2PE&qxXyb8*BrQ*P9{Bdk8Is7!S0{Xo#(ZL9R!;iZ+PitQskz&GAQUDw5WT z^5Kc?Q&y0qdJ>T5anrDk>udL}gRD9`Q0x`unqI^@!$<`6g| zyHSiqHE2|M5seCs@*v;3;A4!y1>G4Vxwxn~uNC4)GN!E0`En5OuZvt<*&bgs-|0(T4w>I4S0tEkG4?n`2jyIW zh8mCKXTx--S!Qi-VcvcpJYALPGDTzaSWCoN?B|IS6w+n-`nN>?oas47C&R5gIQivv!8{pmws8lR{fH1NDQg+2tc06P>PYlW}*BqSrcki>@qtTx~y!_Yo~wn2-QBmOEhc3h)vhXj+8 zRvgB>gTCAaZ!4)X^S`FPM!q{}rbNvu$oysKGO^t+t{X40(>_4Sd_OxYvAw~_+`kut za3NNF(GQ_sP(@ToT93veU-bKpsCx$^{<3hpSc$P_Fr8bArL4MQZ_RQy#yf7|X`q5R zTh-4+-6pYZa#5{Z)FemI<-k!7CB#jGtu<%u(C-qq4SDzoU?oPASTUv_|K4T3KW%;& zo8QCD@6IIp4o@&aSicCM^wx+!aRQuTMJ75TbV_1HJvl=Zh!rwD_{EBU)5CPJ;!pH2 zTdb%gxn!PL@gyGmcisz}yYoS@;$_M&5-Wzm1056wSW-Z(ccQBc`kE_Vnay(|!TjFl zNjOR3hA&f>W{8^wU|Q%LB>Xa~c2B2|b;fXu`ozt-IMefD5#kG@CSf20P@Hd{#CWE? zLC{E_kUF+tw0y|sPdyA8iO&eIE6Cwh^mQis_E#JhD@c|OAB1I-Mc=5;(es~u6E;?l z^W_dvt`y(xFGuID)w-UbwgFh1Y}8A5^jPon8mkVVO^u-T<;}?~5yQ)X-AnCT^2G|j zoe#w+s%h|8jKRZnr~?mjEDLk{011;%lM){?0ay%px(J|DZmJ}e#lO~9IVbbcU{M)T zo**E*8Ax2%tbP2r3E|5A&_)T-4SR9K-z-NLG)vTRY&Oh5gTE4=i~Tlz{UbQr>W+LW z!cK(^F>)8IowPX#2Ly2XVlUBJJ}f>z6glZ5gdMB5uYZ)INrjCT_ers$1`^gkWv2d) zFrh@bU+r8fR;&V1WqruZ+K1&<@Rx8M3&#%_`q=$iY(-(pr;wTL7s6bPN2Wm zun}sLv+87y36)S4LmP04kBcN8;ck~mTbJI)ZRW4|a^*598t@dW)pthk+>5R-3vo&x z(u*Wg!?DC2X5rMY^gw{!l0Xja$;ZqI6)TQ*10jgs>%paP6i05-t&yAJlN?)PgY7kF7j4eZS|Fa@Z0qd$#xtK zV+)8EuntBYtb;%Nl~{4^9Ll6sAoK}}GuI|o=t!`Q?XXQMZLve}5*kqK^TtAwiHE<( zYXH1m(&jg40cUn$lakk1eRX-m0)(+>w^oEfL=per@#cVv67nN!VI4l;fId|3U_&Q? zlvZva-!Yd=5;vWfi`t=9wc-BkFQ~f14na>IR#@p{yG=Kq>L5nReSrAwF#zw+l^-ob z&`0pAuuZ_ng|RPrqE#7G<%uUoSA33?LhlDdmMPf>&CCx1+g#z#>hNWC zK#jD}K=RXKjfHG01`f7OLz)<>GQGC|;~@i&ZO}E?)=Awsl@ai154ow(`fSp>srEmo zAxF)Ftr!CCWvqTsX5A9&K+40ZO)ztjNquDYG4TBdAK^5&NDEi59!pv?x`!>|@h4f( zT)=i7cTxMZ8whfJ0)45w42(w8M-vFt`^OllM_|tHAfAkq7H(g06~d~Fyb}m*5)-NHVq+}4I z2CZ5Q53_Rek{T1y&M4(MDKFF?nKx#n#o8^j`CYLS7NjAEV-(qpB&k?Zb8id{fdEB7 zy1%a#*6XQ?ozi2Q(CZE|bIi=|B{I*5vEM^x74l%{4b3P% z+@{DR(3+<1Hi$u>)gYR-87DKkN^YjKgSf5PS?tmm+ePqVgV#u$5cX*hBr{m7$lo|4 zvUjv#O6)bXWx+!NSTtfbU4tTn=BT7>5jA>uUSH`n33;Xco|3UnMME) z1J9ziJF3@f-`lWM)IK?d;x3PX(HF?#-@14UVFMU(Cq{@Et;;i@zXn+J=qx8l^oBd@ zZLSMWQl~zZj3&cjc+~g~x3q6ZN$#HwHf&S>Bfcc@mrKrdF7a`Sejn5q*dRn+w)@cK zS$lRYQka8s^cj~Fosk5~U+0S~NDD?5*o(jUlN_De|2RezoL^%fjjRgz(yq`qax^*$ z!%-1Y*VywaEg14^Y=ex;oy1;zuY??Zdj)q!E#uCpV~)jDjuO&APO*U9jKr`0176Ex z;Tq%=3n?T(sY)s>Mm2Qmtt*y zbCbML6TsMcV|%DkzZG%wj!`fVuS(H;kJ>qGxf7a+PV?w#62A3^RseY~YQw0-iTv z7#m_m1!mHV$I&fJW_kda`g_=6UM{~eN3!h**p8zqM(uKx#>x%tJZhwmFw&Zl%OKMxvuQQWkB}m4M!>?UDP_e0hs9J>rj^7x*#N zxZL@f5`lBj>dKF0j=vxpkc z41ywSe8WagtE{k;Os4{iD`g!y>bCmxUXjZA4AWJr}-aT=<&Z_cbcb zld6(vC%HTE3Z=YRZ79gO(4PiMSY>rZC(*uH&fcVI55|515|*O?-DZ^GH5GN_srL&K zWt)sPpQT?P$n5a$>;qc-J>#PH>(OOJzRrg8YT#o_Z=D(M~# zR&!}AcKLY9*^iyBl%wenw2@1x@`TLPIPeduxk6~Z%ovBhNg1N%384Yn4D`xi3|r8W zAH`-^#)Ty&^eM5DoPiiNstxFq?x1HiKJw|<*)+(^#f0)05?Af>O;jGOkDG}aWbM{= z^0ZkN{M^_iu6Y39iEf;09h{^{}PjED4flt?0wSE=qhSz< z;Xd?hns(HOB2nP8af`~xF?VJIw%?9wJD^;s68K@%)oKJC44fdz6A-yGU28?o{X znZK>!Z}a%uD*m>Zzdgy{O8DDC{MVb|NK6JmEFIgMR&QzTq6&1W4bU&YAD1 zfwW4DOV21CL)DSUFNZ>%>4*9V%}H9@23QQJq`Bg&cxV7skFTPVg*s;hqe{I~AA=pP z42M=MxOcssN`LiMA=D2`r1q}rZ(RHg{pTADqpwhH&MWQ@ZHY)eFAISZ{)3k1>R+L2 z(14@d4P2(>&DKOGDP>KJd%L8uJsqWIAU`>|oQ+ zk%BejF7y~_Pb1`a0bS+2OGeDcr2+?Lr z`r^7;y+mAB=-R+TJ-00#OWLA#WGguuB#G<%E`2JNfZc<{Reaa()URPP27}hcC-D{k(N=!j z;W5)6^?>>PWHEhHk1?qj?^=RMnsf<~Vsy=r6=AD$%HGdPPh4`}FcnAHl`23hL($*Z zbbPiNd*U@?-$hqsb?WIPm~gfqsCG2{C|)S}z1#S0bvXEanDF~MNfxNZ`HH6h48FA0 zbR9zouQ+5rc)uSRadgxpRAlO6_|p4dZUE|3hTY+%!|Bgq+gttAnTSrvO;U80)o?!s z=@+<~_VM??!_;B?J_PKFa-CaFCh{32Go!EvEPHwn&yhIyT^I>Kr+4uljE}@qH$#dX+9=*T*5^~#bLXMzUQ{D@* zZ*bV-W&WL==+lHn{}n9B%wN!wWd8zV&B^`79pp(kAH;`Kn)81*LiLuvM=DE;aB z7?;{Pr1Vq{x|zr}$njM>6Ey51UpKk@_$;!-I}Ys=;+Kl&W1n5xYiJl~=Ok3DIEl9F zJ8asJ$B@)oxPpcW4)UB0rK?kax{q*aKG^`yp$=J5MIzp$^~VA1_XgYOy4Cq_VTU{M z!o820p^GNe)CSXu>7-gLNcRpFM{aokBzZ9c{rM@5dR698=w~9daO_P~v+%lwpEu*~ zQrx}H`TUGx3n+Cvuz-%v?l>!*Q8JDQ9)c z>|<>qMNM4V?hP5cY0L;1M3O|$WqqBoGsZyo0I4?&TVARrm zLUq>ivu9vROTR+1RDOQtzcX`C3M!h(uMxJ-(}Z68J4 z=>%}iQb~@^;sBRDbY0m6Kxe1)0XX?mV4Ik`;XIkTo!$>tRq9D>)VlLX`+C9$SFZ}F zQ!))@F@E(Z4@&KR!J^!YU(Qhf087g>-1q;4c935#`WlGrD^Qi3_+++K{mKkoJuy$V zT~iZa_DsBSNm}DaG0IixcN*@NpK$BoqbTJ0(~O3Iu{EG>aeBK~RruMF06QeJsRabz z6t9672~P3$C@Ez@ud^%`CL-y}L>~}mc}GhX#wCwvQfs~ik}mo{pn2y7ghZolQ;4%D zlbrL%7YJsr_%7^&YrJ?fdNMYducxS;wvYp#LF*5C;{mLbO)zWEQ^07No=(N(2D`V1 zEHcY%#jtaJxjrK0gs&1HOw4n105M;76*9?xynq0_$^jVl84`Kc4M3ce zyyrsI{{@KehM}Frxfq{-j}d^XqJ*}09cm!}#Sb_Xy9{?0LGe2iitiH?-vAV6B<~qC z4E*P*_)fn(bPxxoaSRQcK@1N-r#cKjGcE<@OFa(E@1lKy*`ddQ`Bw6N8`{|SUIWwn zG~tDJu}`lNooUe?zzZ&;57_Vs$U7>MW)YrwST6boXwiamg6Yr;ZKbtQ5SU9V*oGme zhLU77P?&f3;8l~Ma5ff(QrvO&^z$U%jo^u=w6lLEU)$7k=+%+=jbPO2KjF$&t2G|K zeu10pCBG>mW#FRi&$LakhHmYUGH_ogH?q8}m9DU{dXhG0JtEL-7Y1rJYX1YGg|{Ij zvVx3?>Xo9}dOlK+p(m>|GCUZp&1SgJcb8wPoGV9CFO=PTc}TbkowiYlxE_IhghX=1 zfuUL+yl(=eE4)8ryY^8Pxt#WYoPzeNdzs7SV(Mx3eJqyK4oh%{Mf=1`@r)84z0)e# zQqi>XcSNS$sPi+}b`3R^oo>^$&li5ID!bFrTHh(h}uJ>Um3O zpmrlV>UtZLF-ARfpQ(?)c=sVt#0sl8jAu%s&!AtPVD6`=jlo|)v(3<~Q5P#Q%-A>0 zOWqLYEuyc7uhlG^xOs@~3r){)q&ieMmcs9Lxp>@kp;>fnMho69opUh2&Z*BjEunF8 zQ9Y-L^>Q?=3{?FjwBSV38s!Lx_WjlnVI61G;iYkEcjl@l^T#GGxbVQ-Yk0LV$gOJT z7CiMnc)7Fa&6&g!N3H!B@UBBz**w(qw{`VnN zD*71nW{`V%s_M0bk_>k;mZvhiLx(RP5KO+Ejw`UTtqJx+qil?At`si0Z(*((Q z^-s4%K-n#92dLT0Yyr3s(_k%bx7&QjlL7*+4q0RQ&9#V9jQF#E}nF2HPS?`8~x%$nI zFPW?V^PL144sIKCYulO=4#4U<9&EiVaUsFy@rwr5qcdsH`#D{Z@Ub|(2Awc3x~(AM zZ%JH4kQ1(6aV1_Z;N%w(BrX^*ti2Zu^v_$+GOcp{IOG3tzrc6!tn5o}7r@Aii*6U# zPYWFTikt7miY9v4D^^qs{C0stZOd+y$LV%~yhq}<3oPz?yTHQ4Z2*<#?E*`*7oZm1 zE`S21Rt9g841Kk>d^bgJwiWliT3~VCs|9)+L%F8jH`);T-Yjqev%rLK z^~&+}$pXJvV90J)+anh>2FL6P6x9K7bkS8svQxIraJEY}QArcum27Hj zoBT@9))>s$7GO=BU0B{U?+Gtt62P$yFCdO!Fh?IZo{M8_0!1Lwwy?A8lt0|GIu(@* z*n>BrS%uLRka)iqt22L815d+0_OV7334Rvl6!Ah9N_GQ=SK=uHL3O|zP*ADEd#Y+n zPks{*-slsrp&oYyBZD*Xf;DGh&cPsPcNxK~=0b7W2M-6?$g${yTj>2@>5yWn{0pJ2 zF#2l&2$588!_-h)kU?FBV^X)c61WU_ycqDf#1oO@wzq9C>Duf60G2r;LoRA-uXzrr z+{B%@ycBDUY#LN5)N|Tv@|AS0|IP#+e34_c*I1Nck*A&QH7>D&JBt^%)X#h5h%GWB z19(2SlPmgj1 z{d!A1{@w}bqj*aT=`c;8!=%;f$*_OkY=&`4PLDD)XD{2u@5Xvcpx+h}E54>bIE$MntB^h39%7EhH z;uuH9R;vK|i(Dyi{a)5c8ZhM_LI$yv-@IO%Ag+H^nG#krD?t~q1rwi)k!*>h( zwL*RP(%`QR{yIY~`p?byAhB)${6P));8ozE1wW_~d~5j8h98}w=C-o5Od&SsB6%cn zp&s38`0s5AqVfbFWNZ*xYNd>~Rj~pQ;O%@dj7Ge-t-$abJrOA*hPS$?jTU(1sFkcu zc@i!EGLrz+EqFH3@Knb*K|9yV(Op;uNA<%1cJ7ahxFuNbkx1OKu}v# z;LLn(%5x!yxZ$ac^zvuvB9qVv=*_9P0jiGabWs{bGl{;M2*N2EGo9kQuL>PSCwzVlh?5ZbWTxyh5LB~S!Xbs{;$=B5vVa7>XFei*z;Yj zPg(@|@%DLZe3PATTf~YbP`11q8TYcGnhjcp4nAp&uWRgqB&486F&gxiBwR`{d}9(Z zMrDt0&63HvQWZMW_^l_T=JS%cX{WF9iG@a!G8phUmDP1Lzim<8RuA_C*=c>D`Toit zUGla_;08pBebH%xVWUPphr5$XvN7P7<^;%}I z3K|lS-R%7MOMvZ@s!&dA_hkdVSNs|t*95csNjEo&6)y;6W3Rv~O{L2I@j8;a&5&#d z0@1rI{^-IEU!^a*pTFXS@=&}0G>``kD0hYrDutCPiF&pJvQZ0FI8q2y z&Ek)LU?;2Uo>hR*wlARdPHYATT_#rCfDW}~=dEJJ^Hz*yR??-iTT;-plI^tXj(67lx zW6-ND9U6%GEqMQ662`mftAk97;ckVIb;d^qqTM_kni(f=Y&FL?Vs-oukQZ0cQ*qui zpC}K)xVoM;jJ|`CmEmR2%u7*5`zpu8TVCUzSLvJFPxl7AheD~C9dgv$QuHi97|9eE zwi(*JivW%K(Wj>!TtKJXif`;#7hy7Vc z%AQ$h5yN||bYLM?-~p&?Y;U)fg)qb+_7B1ILDfa|to_-c0A1-oC}7lz@7kv2z9*F2 zX%Un!#dlMuiJK}c_(nJJJhTqdlwimK` z6#sJe(l7l4`R^-k{UOo=yhz<`xLbcnzqoN?3(#BucN;Y3tz!#X@xJ*V8piD=u=(Ok z4Sw5~kyY7p?0?WJc<%<>oJxAJlsDu*BIH6s$cK9ol71~o?F5{>mK^!LTNIahOFLp- zj0a)(L9wpxLBt#mh-od(bA|drwmtS2v`d_tiPNX%` zBgXZ|B)r(O^NEn1eWw2};KxqLid}OakM{N9+N-t1V^;K5o%{}0NYpL!dLsbtGw<-_ z<_Eg#sPFae60)~ra#5FRAaA_A7Cl5F8QPVJW@C7JLC!(sjlYE_@6;!cAa8t;P~d2g zbp+^opQ%fapnc{`kOjV+H-p(bU_%BybivP~tWGNLqyWj6`L#-iYfyR9-m6JC?%e}o z#^k?%I!{&GeIBPp8Q{a8XZ;9r@cus5qPw*2t<;kxUlA3x+|%JqzkB#c1EnMYI9XV*JXhraw?`Q&7AdD0@FBO{ZUL z+NU+&3?tdjuQSiYyO}^Y-zs~%m!@fZs-ZsV4x1>J{t`ik>w@jmGV($H!YhG)NI}tt zppP|fcdkg6nY9u~qE&piMt6#vnzS+Bkhm7I_p|9%Bk@B$;k~Pam$NwqSQiY89mro3 z=DBdV(b6ZLy9A|13~epr0o@o1>th;5 zZYN^7@tT17@Ha>E|H3dd*XDRE_iH?s+t`#4+N<7*$8x_yvD|C>#By&)#%;0NXfMdf z2XX5O1@xovTLO0x8S@66<&Up}GTsJdJWAYSf<@I((5K+9P&7(v>u9{ZtMKvad4;x$ zCL}yM-k1+Xu2eAME5kU9hLFWs3(D|LoJed54W>EQ6=J)4j`VRAZjrpyZ zLFZ$zXXsGvTqOQvDXGysbX*cE(D{=B&OZ{&fb(${GvIs_JDJvxQ^9 zFSDV!k1*1=V=KjMJD~oF)Bw9e@*1pRJr6Cf!JeRm%ZX#@M-HtA;~ijN^BUe<>4(A#s$;nTBc!ds zG^q?WqPi2qyQ?J(Y8N9{SSj0wuCB59@z`z~h50|Sdav5~C>Mb#ru*;o@D%rH#(3@` zisw#7dej->kris^3Nc&<4OLx@FwHU=i+y?c^Ehga75GS-oV8uv)1`Z0B5(rA>u3V> z6r<6XJ3vVWMG{J#&f1Rg$g!vK<6Y`$QtBdl3)n1`TE9eEXgCzRX$KQuNN#mA=e7 z^_lTN?h`BX{i!<0#ynLUOL$}$S%%B;xt%Z^i zKhl;aVz;lQ1;SPa!)GF3dngasc2QcNfNgs38>@Z7iLItktCz-Vf7Ky*yCrdEH_*>T zJXRa?dSkVN{|~X+*g_&!8*jewhjsq*)A$pVW!`MDg2ER-RENxZTXw7)&k6Wj&IhpgtFviW&`c1~waxP6q zl$!+0)V|fCxbP(_evd;?9{{OVg^GA|jX{!+;uxUW5?|ILXf*366p6=a!x$y@;XgcD zC;k4i|FuM%_AJPX+rY1*IPI-YB?CU~7go*I-tVA@W|<~qj`B#@SY0HuZ+!Gqb1zks zLsa40JZ`|)jlVIc9av!QhR}6v?%SXskEg!zPG1v%DAl9h|G~qrVIKdikC#{n2FmB- zg?uKo98e6_#?tBq!P-|Mz{-f;micH?5M(~lW`MRLVsLiKPpC3-DGakER)*$l&ZU5V ze!c_>tnnZV3s3K&I9p?$0oGsu-K*@#A#mWTu zT!LnTbIU`o5&_m%}D zF*XkhOv&LH-%DhCE0T$K$|AAiCj18CioaYn1xV`E_zg4^F9M&k0=6Z713ME@^+DE( zSSyL|?jUxgt(<_zYA|hCXx=a3A>3w)?6hUwInkUzo%cBzo6(X-zL@| z_A`*cVC)k^9y7)}9@)JXGnm2e{!sCH4h-$yv?USR{S*~2L%Sb}H#5SF>_+Jf2dEQj) zTmE2);pJvH>&dY%c#<`Smzg0*D-uE6^Zq~fz62nuYXAQX3^1}dprE+rsF)-!C|W35 zGcxEM9TF9k$`XV@P=sl?<5DgV&;zfO^=y5;vgMVP^?YS+ZJ;J-sA!v6FKK&SnlgN^ z5I64s`#tB}nPD^E_FMkHH+cPi&%S-ne$MCMf7T@Fdo?wzTi*^AWqF5teD(D26vY_t ze6;Dw7J82ocg8y1k;(d$y+8B5{LWJh71kLlKfA-d4N<4K=0Zb8AD^Jdd=m0;tsU*@ zln6XyfcyN|=z_?<4DMX@^pePaJim7m%88@0^Vj=|vvs=5?Xdd2v2azKSM_}mm>rs> zulVdRQXU1~BjBpm9lfUe2}OJ@N|?F;0xMc3NT;pRPnMd?`079gXt`e<(4K(_VI-Xp zCc%`={1lt)ona3(;9L)?GZ=hE;iX-D9IKG zaj)5)`#BB7fbD*M)koes6!BN-iTE0)UulryHKF>o`ILSapHJy`;e6_$tDR3>8HcLp zHu87iP}vy{6`Q*VeD0Eu^BB2u1IT3RYaMW?5?^x*>7_@z$Dvx-8Hegbl5`3N;L>?iu-`=KPJ;Hm8jeX-LpUbY-5ir@Hk~Fsp-vNqYH*D&Kg#UJ zaLU)0-|nwsIF0plV>q>N45x+ezP~BLuQQg_Bz2Av>xE_22j&~*s=^N+!#60*9L&n~ z03umI3q{*fJQXo0Yd4#1#6+n`R!xhr=kdacnj}UE-C|kIV>1qpWfehv!(sn@c#Ov! z-$!2-iVrbzOsnC;y2iBnxas@0_JOM4R3^HqNYQC%O4N|W2{0JXR`IE99q_5LDL&N= zLsWdKAatAW0jElmE;p@h>x@iAF$Yw5DybQ}r-kj%sf4EAt23DRHV-;gts9*xP{U_3 zFzxc7Q$53HGnsTY^RhQO6)u*#(W!p%K`@m+x&+8lmU7J1+MO79K8{hZ2vGI%W3js!C9ys?6no0r{s;Rbmfwe2l)#*9}u;u83*+<)Ry>>L!j;^$3(< zLMwx*($8*1-#VaFz5Stk`lBz)^+u@@yilq>+tD3L)ub%)kD^pPxdSISt&7Q(P^#{v zmOk*d)HO=gZYE6FF8Q&x5L?Bj?=N&ht6JD};X)_0s)Y=#%1Y6ytZuX_IuGg!t%^=& zK9;Ao(piuPt!kmyEGX@j?$D~ZYi+ASALr=~sw$%$RMpObT|!l5FsQ0xn4x%}s%W%b zqbVspj2G>Vu3_$o(%?NapjWoB84y@1Ke1{Ng{!*716Rc(yWkvd;$nLlcY=XX(Z>c= zxT<*^uBx?!P44)t2)b*u#!;&#`mh&FIo6e{=2s!C!rTy60o_4ZozZXzt8X<7!s?{v z*C4ERYOVlb^_Zp|gw+O3I|!@0HSHj*uytw=VYNu(1z|N;qe58WBA1!22zP|AqN@~g z^)Iv#nvS~RtD?JtuM)5q!OJ018|Vo1kVbp-Dxv8laidoWP4AN{qF2$`4z4x2(W}y% za0|vg>2af1rPEh-{x0;Y1r)t%4n?n;PSLB3483X+MX!oep{w$}Cp=%Vl(9iYD2ft& zl*@|e?UIT+Kv%V5u9Y7W{bAG=;GEhS#cH1yidEX$E23D*54_+WvCh1&>k+GT(DiDU z*iR|=ERy@wVzo0MuDVGk^mwAPzkGwo=jJL!p@W|$erQqr(!w^bR-WVt_s8WM)?;0R zfxStZg`n^=gqVx^UE0C)(d$6^=(QFfz1Hsv>iFEfK+%Yf;?wrk__TeEc#uAeS{+m4 znqiiX!bD=PCX_zw8BJepksq|uebW*01JA3mG{)yg3Hq{BdQlrBm8ZTb5oaFNZPb`O z2W|AaG@F6bkX*WQgx6;maa^!NR_VBTQb^$&AQ7urevEL3BsXs4`N7bf+vSHf<^;%_ zwpZt52X;>OJ|Bxx=auaD)MRs*=mXJBW_rY|M!zdmpfAUqaQ-ZS`SDgkscV1#k39)W zk)>c*`ypNjXE#utrAHLdjwbA+rCB-xeK_7oQzGWyhFxkaSXw1W$LJF~@)t+2d&OrX z5QV}jL6>?2ZPT;p>`{Tix6$>?$@Jz~+zI*RS*Tuh4ZY|}19jfVuCNN2zwS3ivBLq$ z4@RtT;N|sepy7Sb^>O_b&elR&qF=>c?wKWWZn%BUuaMIYvpKEf{J>?8DC^c=iNC1f2Gss<*aU(OxiF~z3@FQ2{}YDDGm zrLSPqHKNwfc9^IrD&3!r_1qV4he^t%d?q}I^dgH*j>@C=HN=ijkn?6 zG`~n_&6zY<>_x?AQl#^o%AAR*1y0D4F_n4mV;12tDKX4SpOVH@_8o*N`2s;pBfh?s zc%TtF&)xYtf+-T_RG*4Nfzcr@wk1@4{4PZ)$%;I8k>0(p^hHSS%0!)dzmL8lttpA8 z4`RfWu8Pz;hf7AoRD>57Bc={P(sSxiBmq;2@iC3lU;b_cA@v-LhTl;{>;QU$GUgUH zPEFTudj3^9FF*4(wv~s}Yp@&XfMwGbTI7c(O%g+es(Y$YRaz5@_vU_3)d_V)S}^yu z&=;UsXK9s8x?~D}slg#bk3B(r>-=@J^j8r({xMnZ4iS4qvJ-{Svtf@M+~DrrhwftXQ}MGHDYCC!(n z58D_VRacmSUA%!@I`z6*%o9KP#$71FgZ}m+9$CbOVgP12G=pS{yP23Cj)U@rzM2ib zW!28_yc>z{>eNQ!u|Kj#0wOW!58zvI0=;GRzN`yJg{O(o@Frqgox6!B@-z`EhSEN2 zmfA%4o&=AayTH?w7g+;Qyb@P7hZ|p{MLvSm`b|67T@%4t(2fr>zgEs#hrhgv=UkX~ zpT3IONN7KJg*T275;h}QI%|anim|xO zAo|1qJ)BRYogN2gD8z-6$+#BCCVko01oPS;`V}YiaQcB$*IBBMV?(?dqO(*^iNffa z6n}ot-i6kbn&O0oVhcw3`m)2$LFFxCPoXMNQyf3kNnfZ4!mKNAfpkdC$D3SX${`Hj z|6ssEh$2QAdV3d&hd8^u#i^TO5NAy3AtpkG+@OC4<_ZG6vjVB87JF{M1A8=W=#VGV z6-2k?l>Mkj^FZ0(bPE;-3x{y)P2max4}By0SxTd#z^4DNJ$_8rN7*%hCi-IzFwsxk zfxX|nyB&xYdro!9v2>qJ=`16%VeTSBmBcRpDoagyRkYfs}^7$7&EHKi*oUZT9#p zc+K3FP#`xwvp=G*KU@b94qnQ#v-vcaM!en8%*K#ml=-72#o(pK1U3>^zLxL01q}Jv2|P}>2ko@qCNOrbpd)`J!gn4&wWUNf&&3spla{#8l!%31e8XHq@9M{^8oTCV zd$SPo5e6x{nQVd1u#>{>I3Aoe;j~q6hH@IzA40R7`vADe&FWQ}_O~YL>G-i`4|~K; zC;B2vMwT!|@U4rhE}2B%tqb1E-mRMx2{r$3`|GV)rYUrsf5PgEQ+i`K%+S*PXI5EB zWD?YlYos~B)`Sy|Kt8NjeMDw%Q~)64!jHmS`&1o-|ghO&2QHHYb%G5p|VoTTQz{T><7wTdR44f>-b4 zz0=tV)9V6onHT&jZ+3>BJ4lQH(1c7%Iw|@l1zwhpGW-n0i>fvaJ7hwpSiDU+B%0uh zmyM6%@ygO5Meg&M=jh+j_3XvdC!%m>1rt>|@AjIgnx$q}KV!>5ov4E#2?Y702@g;j zUA{?Dvy_}+u5?zL-lp$8Hie3#@xNjCUqAd$UwYo?EK5pgmOjyM-scK4NylBmCg~$r zfJyq$f84kwLGSigzo-QB(08sTe(# z_#;Le%)16PMIj=A^sTG6=`B2C>IyQwh4&6Hc3GZ`ma_Z;uo7u{l+Fi}jAkk6fFLEO)H1}_q7;z>Va$c(MkV4KTnYHh`J()rhcT=06u0XMQ^I>re^c=> zqpJr(JZOQ1d1+ds6eNciW2c58o!YC0#E+>%cu9e+7#s#`u2`dkaa&NAk%=!hZK#bB zDv}!Xrht~o|dSGQe7KR_OM0C- zrBN7)*wk2~_u%#S^1nJmq@_BpjdXI(x)%~0t3K-?3j;wV$R4yIE;hJwn6RtF=H zA)wL{I@Qt==OA-MQo5_}9(>b|OH81-VtKkti_HzI$@;Qw^zcqC$mH7U%C&X+@~2Qk zs-==PtY#`o7&|67m9{2!-08tZNqV=zflR`;D?&}Bm$WNJ!~cHza$M`zzmuG9mcGO7 z$p{VGo}3P}HmOc&gAr~|ybXpq4S9k1KiIO?tC@4?di9Rp18Nr6v3KRzZU;VD6x~Xl@IXU}78O(yoxO~lKce^KDZ2AyW zh4FC?reQ;?B*&iSAw;y{1(42F2g3?UA(;0a4Q;Wi+FMkO8iLz#hAsxA4jqYWk?U~vZxtk$ql+F#twg{iq z^QG&>pC}O9ts z&p6tWPvMy^T=AX&j$@%K1KUG{EIs5k&FHEK?M`-&74NW0+I_U)l=SjLYoSf~3@RJ0 zhU%53rHbNy4cNGdVgJUPq#9hb&Pb9PtT4QQJf|{(rvl9ql-UUjOj;GsJ#Abxj)akr zewPN9Fni@B_&7u8C1$p=>HG_r=ywIi)Ub7)((`T35c!Ku>ai5pwDLo%#w3JHfO$*N zwe+}ig!zq*?LQ_%|BhLwD{VBoddW|@oy+MfIheh5FQ@A;hvhd#oHvcG-b|6C5A9$r>_oiVxkY3bJ)=?aTajJ#QDMjE`DB#fP?otIyLQj!suY1xnI7T-~yw3x=J zF_5BQ(wDv_EsQd(yHTjhkBU-e>sIv@k5=% zadlgpW3C*+=5`r4t;?mY10rp&VhEiGD~dZNemS^fa(iRaq^xk~F#2eRekWvruQ}e< zO1E&D`6dPfMSDfRQxE-EqufY5k0)ZAX_gQgh?q*xYu3e@63(uP!6h|F0Mz)0s&V%O zs|&?iz}*uiVo@S<2=%v@kX1tWYZICs*P7#(XhefVH82wTvg>I(;l>$lx)wpf2Ue-K z2s_0Tm)v}?HhLLTtM6gq+zCtEam%m| zL|KqhTEX3%vKDcMQ1g8#@RNWa%lRR|_hoEgS&MUzP-WIY<%0j)=>M1L|Ci|h7wP{O z=>O;G|E>FtXHIAN0NaR;gND+U>=>{B968WBWE=39^WtdnJTGg}SNmshX5gFTyLIrj^6 z@IH>&v#PA4Lxqy_IEh<1Qm8WNg@l@wzIb}2w6R$}^%j(DOd~${V#KAkZM6aQ_4qb| z+??%RmBaa`Lf-XJC0afblwQo>pN{aSW)G#9&ew|nr5FB|2X@FqH~ z*z1<4?*+Bcgr|e-ULR^ns9QNvO?05(&M2DpFW%&7$Hfus=kXe8t*@H?EER4@?5U=I zf2hkR?lWw33cO?E-eOfEP8o3>5!_6XlI(a&k}lvJr3f-mJ#dYSp`Ad*a)t1!olBDg zS*b)E2KUfRR?TWInS^0F{p9;Iu)m${(O3r>c;qHoC&V3*bMK%~%g{}Oa7rMYRkl!d z5y6dBH9F=b)7BE|hPHLkioX$%) z#p_sr8}>J&{W7Dc{kKAw5_4RC&y#F}Pv^*NsR>NZ;`YRpTP5*b6Vl(bTSlv0c&Lz3Ck zMx)yy{qSwF_||nSAVE2#mJux=p|r`ztB_~`fu7b~NNNG4cnYYrNr!n#Gfv|vpa51t z#4CuaEFW`VE2g*^e8vKTA?KV>)P;-ypg>>03unQYbk@o+=SQ@7ij)rNrR4)PekCg( zD2rn6Vq)b}<5fOZ9vdB~wgcsjVLbLn@@B?kpCnf>9$OoE4dd~NX4%eoJPRjhGrp0| za~Y3kvt%pdn~^s%z7_cijK|erIhyf^kt7dfJbeHrl=1jnjI3omJ}x7-rYr7;VSZpd zebJ?n@pvs*{*duFT$bw?kH-V$w-}EP!pPehj}O$z&oLhF#LAB{z8Lw9jK@>waxvpK zAulriQRH(OpNsrL#&1PFh4I^wH!~h*Mshsk@iv`2it%_mO*SyT0r_yoZ$Vzicsz3{ zUs}NO8Tn?$%gBGj_-5o!GQJi0ddB0nf?Umbe70NO!T3<*w=zBw`6n1pAGF%U_-N$I z7>}<`%BvV3k9`c`%8`s;g?upM zi;*XcuR#9i`K&CEml^*k@}Dz)3-S$&--`SJ#&1V{H{%i9MBX-^E)P-61)L4%c1x$pxJ=Oy?1%V+WmYm`*v zoqyTnnGVma3h$9q@|B{`DY?+9U->=^f@ezMAR_ym?^^b%(`T#i38A!Ep~IlKeU|e5 zVy#Or41fvWNo9XrHFm0-U}ii5CdtG2gn0l?m^rTpK8Ueem^@3kYs(#X5q~;L7>Y>< zhxxo_vNq5;ijA;9&v}M-{m#L-+@oja!F&XERsgRDRHMh6z><%61Efbt02{Xnk_p5d zx^btKqR;^w>YNH}B(jmtF*qQ@G2RjE*VXaG?^O2#)FI#*9AUUhQR)7q;4nd7C+H8s zfS-k4-~Q)GA4b~A3dvIlnAX9pxF8`=Vhiv*>djDQGu1NtvO_@~_bRCOXxvI=ou|N7 zgkgC>vGL-naRm!rxqkI!Re{dC-p_WX_0d zk&c&s@58YezV{IqjSj!_*fa#J5o8=FJK}g2IjxI@%psv}XA&nMKH?TeSF+ zYE3AviPSV|1>b#mdQontEb>EZK5>VvRhhbEX;hR8v7gK6+YljZfvA`5GL(p(u@unC zf~eIv|GY#c=|^XvsVdo5CcjgZ`f^3o#T}A&yr3wXN-yffu+ob`VsPn2tr%dHU^?p> zWtHBcGi`c+xb%7C3D|V@HcLBkoK$-+{*Srf^1}-(8E8033aOk4)4Aigyde3N0PkCu zaD44ZA?q+jYQC2yy)?T{N0faOaWy0zEV(|AKYdV9ES1_QJbDH(>;Jr>yo;y&5>7iq zq=)HQ#A7DqBbT4_K9GddVo!{64~Vk9JW|0Ewluy8r`fWkxst}R>2e!ed3K)`kM)8} zLK(|@fZk(fl(oV1bYa!ZNV#$gI>z^rl!!l#p%S|ENlI>ek}i@u{i+fpUH*t_-SO=U zvHjZ@^z7bQdD+7ZXz=cJC_?PESDs`-O8|S5Y-OR?dmhTJQn?8a`g82+WFUbcs(L_ud^uhf! zH}vJ~Dc6u^12-L<=NX)wX(UVo9 zx%n|>9_lvFq2}qT`5&2i!wl8@W@;XWG7!+_nJGZsi3Q~SMbuwiXt>-_|w=$ZQh*6`M;FPyO8A3oe zC?6vkN%tE~^bI$>_!Cc;`Ak)Fe!=%yl@IZVV~aV;sB!x1_x>2+f?^9PK|d3Yi4&BF zk7EdbKD~jjEDZ(=x!gi;CE^WkK}WC0v1g$0h_e#$J8lwcrprtgJWLB#=s76~4<5$V z%QwxWgPj!j`J&r+eWMq6@np8x6GuKhaO5*6$6OgE=Zc=8kKs1Y(1#-D^q`xTFyJ|h z10MgJq{=YY5etln^t(vTv`QEg(YqIXRMdo)LeY}kOH{{2TVY)Eiu)Wq!k#xER9a7g z{ddA?01IO=W_>B>GaCBkRQ7YpbaV!s{9chKifeE69-Vz^mG)Um&nwP>$uXxOQa(9} zmD=8x(tR{iV{ru1PUFrsKDXD*YAk$ zAkT5owNE8NjHYJ?&fkg0uv{O>@v6aX%%G7P-~rAzJ7VMEt0|BwlpS#pF5S;)6wdw4 zl2Bcwm(Skm1@1r9qW|Mb6ak$)X$WnF1nC1jC;Ca7+PRB;5Em~@h&e4(1qWb)_seJh zfTjn##-=cIz)NWOR#A4x4uDcP{487WmHbXF~de&Rx>|v4)QjFfmO)X}<&LD=wosizAsM>vd(>KvR zJdK5@FFQ=%w)dO(5Wak&Z3OE9xO@FN&M|X0(zd)RHEJP@3fVHhU(iE1{t3sJSfpUR ze)E24N2A#u&RRsM{Y>m(ENju1;gnd3$Oj|Hfpm-XXS_M%O{Dclj2-=jt{)$_8 zK*J8_#`7b(&?qj%qt@(FE!%aCJAtP+a9ba*8nYdy$s;(ls=n-I4ck#qVHXM@aYyK2 zGq?_qYp2r$U?wI>2cW;cmSrMtZ%G$TF_(Q2*=168RJwknA71uf6J;g1y`93}eOLWl z4SpVkc!f~uXy-9Yn-Vdf`+bm5f6_Jjjjy4BIm)cmy6!@mp_1d{yhgvvH!1F$oYK}n zy!&i4={Fysn4%zcRvb41@v=S{uNfQVp4T9F30QY7DXsOv16M;h(yLUTgHDaIYmjOM zg2aGnQgCKA zQ^^_`11U`n7fsG<+Uk3e8>rKZ9k*^=`L)Fa1HVaP&+@+vn_eC>ng zm}=bgPJ!{x*Yt(C;2H|hgClfWAXq$tQ1uYnhw)kzD;5M!^2KM9m`6fPvycU&Dk0&Z zeq%76c9ah6rMXEXr@v=9*l+q9U zP9WGtof>0Sxo;naxzLJ9!r?x?$7FU_@2sOj)#ebiog~#l1~uN#GKjvx!SY24)|q1t zDiQC|OG{#qFJ5O(Xj{MA1ta$KAt=$Pj4(-;Sc0J)FeS9<@A1V66XtQbqA$mwp`Be= zdeP50Oa5i4`=nOjGQ^*4+I=2p=sl=+u0vQV0<^&f8igb})>9%9hq97+{Srr9`^@zm z^b2^LzG>BYc6b9zc>qm>wubf$Mlr}#yq5IWmyHK2^4&D#ff(|pr4$UQX)5T)fIQ%? zV-4(>8?C4?5CY+9Q)~MrYo=ZSR9|y9rhDFGpDAHp>EMsh02rN z&gsp11UbgLf(cVAs~|;dac5XMCs2Un;SW~1Q)H2}Kf6yIG-@6Uu`Lo?=W79=Xx~`0W zn@O$$|MvW^;NKb%|2DTH{_PSE{_V}(-e{Wyzp-iUM>EuC)%2Bq77rWrYMGgOX2TuyjyGDFti>1Z4yL5#lQWg9saEfm52DZ zZ+6DN-MLY>eV{k~EeE}-7JTcb>vxv*XaG}FjjY8&fRR?KPG2^io;0gV!uBGI1Kn=q zh*lFg{TtW+g3~8BE#rW=QU5i7xB(Wt2KtWy;#MzbVo~uaw1Hg#;tqzU*c%YH_KJYG ztC@FQ0^-)T1H_%(9uQX-)FmM9jQ?$bxb}SV?*_!Z3A0ju>LZ5giM{ea2Z&3>2LW+w zI|Aa)V1T$YyZ~`$P+X`P|91d!U*4cx0T35-LXIrOV>-3%0dZsdk$(~p_r9e#n8a&% zT?69gQ1d!(^G<-cuYKgk2>q`H#Ql!0N_PW@d(G2V0>s_6J>>s)0OD@h(hd-} z#at;~0T9=*yAg4ZMJNh%bQBSHBHjwYl{M&s0-)7t z{WXBx2Pd*Y=9K_)r&562Fm?awHzY%8V-@$hePD{_ce{HC zw$98Ua_?^OzHh`~aWOmNq2+i^P#7|9m|S_gIwlqn8g~I?aXe=66l~jYv^_9_c4P5q zy|)rk-kUYRApZA(Q`aFkIPQKts@erOF3!8++rPzoHS?p;+u4LfUg(}tJjmupD-xzA zKv+cu?dC`3lCI}Rc)=xFXg5FV<(?mXM%PbIy86l`?qKAH7t)XgHhb7C&@Cp{KzSY0 zm*;z|>Ju>|uYixM_-(YI;C@OUW|I@ju)j$R#U>=AbXKIUHZckfT)jb|6{->qpg~vm z&=Nj?n5AP^P(1s3Ie5tnS8v&^k_`IX^k3PP5+}P-f=k6dL&D;!n>O&BZ{N}$3Wu6n z5g~8B&9h-(oknLz*@Bd2#0w_!3vujriK+DNaH22AWi|b-qUT!;S6{UC-n-lpE}kmGJ#3apvEKQ>L z3h``##9EaUuP$^lSSk@0LDG9M;E~d`(U9UedfWap@##um*YA~x--hBi@h*M&0IJ_9 z?b3aa_G!2B%@0Vx1tUwmzU;ZS_A%Q`ufY8f&tEPbt=@?1{(aaid_70{-Yk8I&xiID z@K!~g+$vGA#T6%dNhqVdnm;XiO#WQL3wxpg(lZc`Fw>*U2c?fpQa!(*urCY*u5Zjq zdaJccXwwTddwl2u49o$pfH1{zmhpW+?>RC)I{u?{!781V{>pxd=pt4i=rmeJyJZOZcS)pD8Mam9^p@+QZE?N|Hhj4%p^Aq;p zzX?Le3bH7jt zW1Wd9EFw+=oi50~tf!VHb4yP$OEIXF&Y*;D6eR!Tm>&eG&2s!QK9FWl&iWCpCcT4M zpNu$N4Ojp({si6dAqc!5-k_T{X+o~P>}kyZX_JC;*<}!xJBU%_tc6hC%fZFYHr%y8 zcRDHVN9bfL=sA>0%R%7pp#^YGkgUHD`P3L3@F-%AbyEH>L>vU;#9zQGjZ#a`AXS=w zfzkUxYUq@OtWQ)x4@8S;(3d_)Gd(0V2bW4|x+{y>nSr}q4v0yDCnoezv$Zn&7m{2# z#zK7N zst&TRP6ysXh99ya>U4h8D$$9V_vCg(d51RERl)w!$MP5JnAAZG)6je!m?z_l)5nCW zaDVxng(JV==#pv9fVO<3;QKK|*rHGRNQo#6X3x4o*CYRwrZ%Tot*b_}%nU-Gi$MWV zlJ++}bJ_czve z-|hWAPC%9XbI_9R?c{0J;fZefXJ_>`d0bR%B{odQwC_(V&L;6CpeFGeS8NCUd#JvTD-u*1-FjE3Y95T{n)u?R^3R+Bbk)P9 zH=R2*pn5o|Cd3aTfd#7L=YOzU>MK7v*WE2Gn4~E5**I6Ao2Qmi$dSGu7a|3zi*8VviJMeKJ0z#QrV~7 z1J`NaL2~ec>%#_!Lemtb%LlGq&aNN0-k;X#f$ONBRe}0}j(ieBbMX21fp4=`GBrw| z&s)M!W5dq63JB#ekKKFp`ZLvmqYeJ48@uzHyzbqeIP4 z^}Eazjw-&3H{p_K+d;`{z`=8N7w;cWw;EiGW>h`e-z8cdSe=I;1Q!kJ`;n75uvbe-`~!}D1X?| zB$k~n0q?9!5knCaP6|IPmyhfaR=eP6`o6fU%Zv%RZ!T7XtsrMzWn0{#l6Vl7YW?OK z3H~~kM(NsEBF4c))n2-G0zv$eK#pHxt@1P9>BcXyNZM+KUlJ&P6yHVJm9EVo^ziWw zT}4w)Th@gx%49`+mj)?vp_c*q&+q@|U*k9prDr%L;~DMAX*8#kIi1VtQcmyX^ifV< z<@5ljjhwb{s*7VZlG9O~PT|zb=|WDIa(WM^k8>Iw&uAY`{W<;N21bA8_Q(WAgE@`j zbPA_8bGnq%3QnKkbUUYqIsJmuGn}?@+G`@C*K&F@rx~0Ua9YOcgPd;RbQ`BTIo-$U zhn#-JX)~u6I1Rj>Q3I!=IK7e6xt!j?sh!gbPB(G7h0|@EzQgHBPXEfOj_2<+oW^r1 zaC!%)t2n)v(}y{Ij?*2S9^~{CrxSQNs=s<(jypL$8Q0#tyWf`K2icqXG6Cm5}N zfzggX-9@Hfd~Mg}-ak#qnZ-zPD3c6d<4_H0?8D1vo`$;Ll*(up{1pLBBdKIM8BOB3 zAF6sBxt>@_lH2bzax<}zL^7M0sjdKjlgV=Un+*OGx$R~1zfr^habSN2x6W$*N2vZ- zsy~+N5RyV;4RcCP@n-1;|@Lb9R@{n=n!1T$549#A{zbhK$APO=2P zA~3_>OyKi*JXCc7*e7oLc5s_V^0_*hWP&=2nF4Xv8>^*v^5OcIu)WO~Y@GqODyuC>( z*!I>-hWHnF*_cP;>8;MB>0;rk;i>+s{;B?`?m@1E$;+2dE^-T0HvC2zlHq4SW;Og+ z{wI&k&K}DYDIhK;E;43YmTmcBn_D1mE?m)0Jv&P*MCCl2T~rNB&Lz$wi0n*fKJ{;= zvw#-7$?nL*GDyyJWVy@Pw%Fm!bhtBYW@Z6ZLbwk|% zrs#BJXHtKrJMuUO`I75&6uDK9U$*Q5o0mqalc|ym3#jHiC#RVr`h)J#4cbFHXinW} ze0;Tj{sFokfkD9`J@uhsy?Td7^ywSfum6C7gRU8D7&3HN)bMLZL|->DX4L30V`ImS zkDD;@`WxaWO-`6H^~RfwrfG@hr0FvR%gkBUAEXv4S zoRw|MS(2N#bXorLfyV&$sUcip{a?Yi|OvCxsUDo;#t6lU45beDrHWkK0H zKniSR49G-2m3Ie~0}*6qIp`Z`jdf6a2AYl#63FGz3Uy~5{CV3^O;MgKP{(F;V~X`~ zHprfd+Um;ATxkDdNgVv4&Sf>^P31ltn>ZDkC!1+me#4nwp8hpEb@dO6h3<H^BdyH1#W}4<5hJJdc`Wg1bC&7q^GCCy>@I=6@co zg?ZpIlg5^XX@Jn2)PFR`cDRs+ie`5B%XhnAK8^ts3r!{Sbvfu3Q8n6J2L7_RW4bVQ z4jK}+SZJpZQf{FBZ^^cqA?%KC5x%BBbId=j_UtEB0udz%BK0B*&!9G|DJk^d0j~5B$~FjxwLOG&{49j zos@K6Ut_(>@9N`=HkgcJnJ%YlvCH_zdX?YR`;Q}I9NVit7j;phs{fw$K8KbOt8J{u zvV%I0`e2~Fo1N-7s9KE;bCcaEk9;`I2xapvooc|PW7(b9FziHgI)+uHGKZ)B{xixO$)(eh^b%!_`~4daxQ^AX6LE z@VI&iR~PG;dX<_VT&<30ja+?~8b7YS#MO~pt#EZ~08=N^y6>Rl5*%+}SoZ9Lo zk{I|iKuNbBQCfk+nVM&w7U)%OW9T0tQ|LUa5aa-DF6ZM7<^%e-j7q>t`2R-gu45=k z?pi*C`k&Iyx5@7Oil(zetYz0Rb%8TKA6S3cy45&#)zpdzNr$jyKsWVn45{B&T01Q4B0ha#vW0d6_`KmIdx`ipk|bvEn# zCqT(u>94GdzxFmty#6#-`RDEa9)KmLWopSQ}}?5dN@)7@TuwdwVwyQ2<$NX`8#F1e?)to+{JR8($| zHdftt|E32X{O#t49)9G}#~%OP6Tg4*sVz@G^Xzkfc>aa0FTV8hwpU*LBcX= z`udx1|MH#O^u6ncAJ6>MeD<$@`}voabFJquT)cF-P5Gx6Xu4m3xvB-4|L*kvcZdIP zUm)w={C`CL<9=|ESA7@+YOR<0;SOqilG1xDabE}Z{TT39KCw_)aU29yBSCCz}a-Nte<`ov8ep->uF?;b+Tb5`k$SHIzrv?kS zKVWXnED}vwV%`c{N}=6pck44f<{e1}pEH-(rWLMYF4M?781v1gD@bFA8Ah2_;{Ee4 zF21+8q!{oy`JqB<#J0%GP)C!Gx^|uHmEXc~WIVKy17g0+Ny6b@U^73uj2C>jkXtxy@ zY^!WpPBC+FzPfXgR)7jL&w-3HWEL1Q?O-t*+~BG@WayX<_8hj%Y(tKta5=bO-V7Up zdqXBjnE-j54wR4t?*Gif#fB_!f@NsPp^P&S6lwLllNAQx&ckjq$6&8q&!hAz+WL_=0#w#`tOW3a1h z_4pe@*E&4=VPk3d4xo!^EXML#z4}X9WrqsJd}bvN{w`k*u`odCV+_Oqxkhw%}s)oz6lL$_r{jdvCgm^ps9@YY|=BbHF@t zp;vp5>J<$0e`TJSi?UQCW;(pIuP#`xa-`|ycDl$vHGQmJd;8TXzq4&r6uj*ioJAP5 zwAAUN{lw$ryFrZY*Lyb$}RqJ{IJkXA2*J`6jmqJ>3y%kBBLMQS^| zFgveETqs^YVT?U{F}aE#`W@C=M|x)mlim}8NbkA&hLGwY`{#*lt?C&AA@9LwyvXby z2L1~#by$Bb=|8@YJt8AK7TutKhoD{l8+^BNJDPrhq@Nf<`au}|QiDjp37~dFRQDSl zGI8($JsBYOBz?0(ApBsWj|+78H)A4Vc(9K^hVSDbs`plJE(7 z5J6+@L*{4v4=9@y`x`boi5g<0BeX z_am<-WEOn)spUZPxF^_!e1?34{B7*r5LT_0qvZxd?C`zF?Kgwl2cW7RQo|n*2;~q; z24q8dOz24lJQ&{4t2#7A6B$S%q1+;&+#;b2BIiX*MpW#4-z=n-|g3K6Cn$x5z_AxqncnJ608X$8bdHKWQP$$D$I=` zUkr|c&HWoA8~Rj-+cg7&$w0`jfvG*oK*;lfb0eGkH1hnx@`QBiA)WfUo;ZIj5Yl2H zba2RR7`GtBpXV|$Qm z#5c$_**nNJ6J96RXttA3E{ArI!!VlG04j%S9A3SR5I^X2=BjbPGIIFD_8Y8&Fkuev z@YE;tCtj7WE7Ys-3>af)c>D}QKgavH+l2Knrg#X)PpY|B{ZM6KI<&DV@Kta-HsJC8 z=2q``jt5!lt%bHCfb<@(cf0)|2g+`V$1PsRTD-)|Z7(h9H6eubdN3$OLuHBAvw?xE z454fXIy~j4#{09SgfuN9WPkfO#P%B<1a)N&8IYO+^<_30pqWXSOP2Qt1g{wwL}l1RukPLJHM`VRFxo42QPBbvSIdkze_ zUV`sCZhtiJ`{C=$>wqRgMX|MA66aKS$iG+=z+W|nt)cb;sAnb248>DqXlXj=sz#3vHMj~vhIBBl%cfb=x7-p$iC z{2nH-#~$|f1KdHGL_(QFLLPu0_I|NJWblON$zaVBq|{Sns9o=`VKpl$|} z@CQTftW6Juyy(I5g4%(83*r|J@e7~J?LZmop$w@VS}%08Ui84co95|@7HlVE1AHl$ z8P!AulBfy&NYr2ZH%B)1X$Y_GWe>{;O$qbrFWu?f4fPW~2QR;VLv*B9svhb@Ptwal zd#?<4e~bCf`{e=9pA3NXK!1>;mKXHfNrS~+U={{t8A^I5_Ixm~S=Z>_psiN>ZGrGU z4eaQ_j{ZcDo%Z*K^{5j=|g&s4~$jS9cjn>dixk5 zHOCl_G^}qR$RLb0pdIKtw|BED4XXXLzG%2H{R2yqWyy>pndv)kWbY- zy#{3d!Jx(-4FT1Dc5Q}licf6&yzunz{jLup!zbM7J6x0F+m%ci20-{%klV)^33lb8#JKj03nD{Bn`UTswr1#rEX`2O9UA5v%g@F@h|>)r zsf-{8plQj)#E&RGU#pbX}3)6{{82C zJP+qT=i^yC{+FGPAFS~{4qBy|VG|SCl-de2>IEc5JI{s-gejR~?gFw7RNkw#GYc29 z6LRiqCw6&2+zDd0Y& z7J57<*_!Fp1HRe|zW)VdicwE2%(l5tv-bA^-Q>b-XTEKEUcT+-%;jkJ1>ZTi>eywx z^L&$?`C{I*)uJu6a6w+SEipIKL6)LF^Kj|JX-8)Z$VSvjwJo=^j35v3^tye5`OGrr zDw`!5%G!soVkhD9Eg_pRN4(50U>Y!2TNz zM01`4f+}>ZUVtYZ67vg-Y}~V1Npo*bvc`=clbxSWh(s`&b8X8DSI~@@XSZc7AW52e zq67X}!1ZKm1B!YvEoL%Lur4sASg7+)d<0vjeYykZ10PV{gv%}DuOz8Jv^f$Td178x zX8t^g3N6tDU#l&1g{_mmo#lrE${AA#p?sxHD_|?2*-5LiY<9E<@e}d*_v@I>ZjF6> zEk$PAV&{@2Hb;uXRs@+ruGP*J^XKP5A!X*L6|BrFfcef~)Uy^AE_2$aI}2z;Akw%f z6p1E@nRe0Xut7G9wpAiI11Z9_wUojX;3tg6w(ryn@6+C&YMThx%nA!!cGY@=ympqq*I_j={VF^Krh-QAAZAQ9Dff zpq-#Trl5UNfV?RYdbk_W#q6YHJ*Mnz2hFQ%JoS;uDagPCzXgy(R4mCF zPaDB9h@5~D$hV1|gsECPFW+Xfld-X zGBa}r&C{2({piAg^y}P)K;1U@sf|Nwp}WN(FS3>;#pa;JRglG!0YN`b+l#!cWjtNA zouvk{ub9@5)kUIhd1@YnQ$$+>;K=>FeL;-{#N=x&%mj&9?8u~b{}h#hxi*&ZTbNX_ zmIF%sH7_+J1ajtfC?#i6E_yc2nUe#egg1mh5bc=`n>#OUn15b*GC$LihYPL?NG3DM zo}I&TdXA50Uk_sfa{wl}ApeBKu@dGnSU~>s```OB-pS7SbyT-IwGm2w^@nRDU5}u< zx9{_-w*K?`&+k9KEB(|uH~yK^qaTYQ*MSHTc&?qSATB5n8&$<(|fpiDK{_U{yYF5o(O)DtDola zd5(wo0@vTg<9C#sf5Ocp16W?DdG_!9g?9U6=7w&6|MsZ;m;AavT*u72Km7II8}EPR z@Bg|Cbol)*7m1W4KHl=t(&pniXrMFhS$)qCZvOmfMxXuzqa{x@(j6${x?)NZd#2{u zQ_mW@@xO$xD;qg|<0|c&INb^Mk3I9vGyTc8&&bc**1iAho~GO!=uqaIy5p3AEIPIH z)cDT!KREeC<9R~Htz$0R6h%q&G8g#06EmkqPN#4h&*=nCV>ylH)WB&Zr#ens{Tcm% z(?(7|=kz3}A9C8jX+5WPoF3q`n$x#9-OcF^PPcQqmD5K#-NNsun8F{y)F}oxfkZKjhQl z=gWVp`_^8(9p_Z7?~8dowx1{eQaXlzYJ1bjX+_q*hOXzoZ@9l3v;Hxv#q??DDX1S*)ZYVJxW7TfIiS0#$uqq8R*(@=+A*K z26_m-&w;N88WI8hYqW-h16>T?)+i0h1{&QL#x-CE>FoZ{mII#xbRkUK7Xpv;n!OTx$AY?FnDZ?}{t0Ckve5t_WV#2&3EG!YI-%#)q^mT~y312aUi%W#SVM(rbg;aX;AE6|`3Og|XtRL<7{ef>HZ z%YmOefGY6)jPV&s$Vf!IhWLyEnl%c>6PPDJgGNL0fDZ;@V-0rCXwAblIYOV?^hHPEFKp=>}uA86x5o>xH2uZKDe`rCo-j)!sFa1Es= zCPDmx{}AYq1gM9=M**Fdz~W#A+LFNhZw2a@0%-v|BG9o@S^mcY9e*S6pg#fVQ#Z1F z-U77$O)R|wf!+gOE7&OmYBVx^q`oFX27>=upm$G$xdiZQfZjKa#eWmfQ!wes1${h+ z^Jx;q6M3L}1gMk1zXi1SOz;!jp8+%zzDD4)fljm%@(u9uKnvmf8F)L;z+{L&lwB}lZKXpQ;R~EV=clu9(}Dgq zou&6@pvAYa{6uPpDO%_V4W%O&LOlh36wtTeO9dY3xJ6L!fS&-gS0;?zfe!~dC6oD| zznGA3vshWkKyS)sX*2?T1HP?b{{YaYY-axlpikRi3=aCw0gcXKaYJg&VQ!JGUqXl$ z>l9E;F4NZn{S>}<;6Dc%k;n8SfsWz4094}qMxgJ)X9m6+==nSr)+L}XFJ=5Tpb7aP zZ`eKneLSDnQ=r2OLEeCm2D+?}#a{&aLLsxW73f_KLbd_F2IvL&>VUrlbbS%yi-G!y zjMo9(B(m~CI@t;33;I)lzTsqfxErW;1y3)~X83g1fuE?i5@ZE)NYy%sC-7T}~gn2aZ2B0rgGCNy=o~dNv zHUl+nfW95_#0>P)4J>~?2U_tE)YZ|DS3s|Qn7NGx8t@3r>A{W;=uMAsc?0^uBg~)8 zK+inG>OwQn$md{A4Ls6q&#^St0j>H2sIe@7zV|%KpE{t)FR;8#0s5O4nEw?(552(q zFQDIW9_fx3nSG?+yu{j4q_1ydZRQT3FTDbJ1^U~7Zh4jUDM(Mg%E}9A=pPx6bU%EJ zU_WI$qzk?uFkL{W>?R~QMnh@OJ(hhczzE%VCIN)~xow*P44R|Zim-a(?f!_vn zrkMdz!wU9 zGtfUAgR(^V0s20C1A(sx+H{PicVGh{H=lq!0{sl2&z@j@J_q#G4+zNz{p~<&Kj1O| zwBaLYqd^~O+Q-a(I?xfHFg_Y+?kCJX(u9*t4yOR!$N2+5qZ;vki-uC)FQL4E*8=?v zzDSVa&w;-D1C!@%KutfgvM>W3aR$l)^rL~^eTId*2B@(a+6&M}n%d0D7wLs&Caaf# z?)n+z3GD0!8utst2Y3N!V++Iwc%-kMgK`0WJJ8eTc)tv^@I1s5^w$7=>pas(`U~e< zfzH7fY=BP%dguac6Y7BmT!bLWCf0^-kK7Tyt zk*07Sse|)K@r*LY4e6&`AL&n=M~Y{3kw-d&^Z&p6wETaZsKM~DxF?}lLdCeLun8#c z6>eqQYF_pO=zOIb^l_d7Ri+r-H{&uJP#tt@xW8xsij$Ujpty&aqUq?5hTeG1?Lr@h z4WzgWeGK=}F7)xY-K$u<^{czlZ|Fw9u^av7ZuGqmG{|9JeG#+)v^H48z9<}a|(8l?B)b<@|Is83Di1YkNVNSLc8DPo_(`e1bWEu~2gbFa)`8+Da0}{{D^V>UtFN!8YC6r z0SlM%!GBQuy>%%3x+m(7K@xH>e{?5bDe3(aTT^I7_2u&MVb=O%U}Ga@m+sPwkB^II z7O1-Q$g$^!ZmXwu@dN!IOjDFra8CEWA^u07O|5Uebga0V+CQc!m($*Dy+n=CKICuH z6Riq0rumOv$jlh+(}x#MGGppLjax96;|l&`#^loA>h+Dj#W#Tn4EFkb;nNfo)=+ix zX}CRacQ#n=n$@r#C zo5)Kqy+n5G*g<9dvM-d6%qz_osJrU;?uq ziYVt@MOpu@YY|Aovh`|MiOUSP2antPo%Rkt=+vodEvn zSw3MN8EHOU`Gmyq;loKxObm&QjU`j3P9-LjiC8Qans;;N%pvpV&nLIsatpcr_S?z2 z?CE65k|kv6(xqhi^5w+gaM1Q+?b@~EY3EJk<-4Ym*ViSG(j`e``%7g-krGkSRwMvhavP5Du}`h8o%$ zs(m7*iI_r4Vh$qHO^{0nUQ?xgX%Iw{h{O;rF}|WS*O{fe7^7deZOCKyPbRQIcx7VueJ9&=VYE(uwa2$ym+xlO-&Wc zmoJy{&Cbpi>({TBzHIB(ts?iUY%%F7iS>mfcJJOT_U_#)_V3>>4jnoqjvP56jvqfR zPM$m|3NGY{+-oGxo;@q|;^M`N;zq$G@zd`l3JVLx?c2AduAr6i;CKB)_*D$Qli?3Bd>+G}V)&mJ{vyK{ zF#IhYyhlThZ~oRj46LQIlX#ssyhtT2bg7TURI@wdu`Qd^tr3flqE$EgG{$+-D zWq3|tX8SOF2*dMOg;5MYhT%VA_$3VgIm7Q@_`?i;K?l!qEtE|;j+2$yl^DJGkYr;zx4HHo{2$Oiu^!#8Dk zUxx3+@BhTqQc$93>UTe!99e=-;X`~&<0<>ziq+#1w(b#2($cGf?@7#tiJXf*ix z`Ui$Lb!*h9LH*91>!}d}gZVW7AIu*D1H;`LaNtDO%H@$)zO8v+ds54@Va?(Xgr{t!uHh*7mpuR7KYZ`RB@LVee|F7-MCp2s&D zgME$Rb!yadfw7r+|=an>K_U#?N7tA<*)CYXWY!+rfjx*Lr_#&9PLP|LAq&A+|y!V9&# zVFsKJk&VZ9Dsn+M*nsnfppamrF(fF&xyS{4zEKl7en3c|F(@Q3q|<9ouV@$Gd}Ft! z-Gp^~gPcNfE!-OyX#A7oH}4R_EDi}WhDajh42u7Ze|TVXKcHabF`PPes!^i`Utl{Q z-sZV*KaU`upgW&`ty3q7LT%f5L)G$Cy{dQy83RL@%blDh5p_Cg>fzho-@irKs^vX> z!$ZPDf`c?HZGRyn*w8A#;8D(@a(C?ncoiJzZ#y5}&ZAnT=NufWcVP^HVu;a~73tx5 z|F*3?TUIJt@ugrsX$W9lZq>?Qcz8ZMJixz4hbk4yx8aY5aEu-t_;CJk11{;&;l(l) z{BYjj%j#+r56^=?tYCi6SFh3|+z{g1fptv?{rJ|_rCRlNA^yzAVBKkqA1F`r?`>Ne zIs_LzZPgzhKadqMIH+}dyVJVynKi-w?d?trW6>63cbX_?{GF;3e9v$qk@IZwx$(vH zVsp6(!q+aJD>+Y5`CPAFy<|R;6xrF9dwiDYBc??KiTUvcv2Ie3$X=Kv+V0_;g8f{V zVfkvb zhB`7l3U99qSp>ohK?;ow-;d#kGyGJBU&8Qf7=ACqKa6vKPXlar%U-6qb}s#JN6^{kewTZ0CT8hBK%R<-eq{N1T;y+)1r z+UnJuJ={IqMQzt6ZXR_idsOEOs=WB(Yqje(aPxS+vfFFg4=yflO*|@Ae8G)j8oyNK zMJLCaO+22jSg~@Y^5tJ>T(zoGx#ygk)Oo&QW&Ge#&H0rI4i#KI(CSnwkMaNJSf&Pl zd%j-fN|oH%zUnr3wQOxZ%OG|5JJ0W4`{hRU+&w(p8!`Soe-n52`tI&^-6egsx#8a7 zx^?AOF}^D9#T3>D3CfB`-{|9@y9U?e0Rd<0{t#X`@vgkYr9?klil!cAcuv>LYqS1u zw5Qns2EKT7;1y?QXD}5Vuaaz7sZu5OEb>q6;Ao0HHG!j5a0s2R@OQ`t4Cq*$VnYs8xs@L^3I(*sKC7b1o+oteji{PY=tq}wr$%G z_%U7*|9$)R(dNyYiSeUNn>I1lKmYtQ9XxoD4jnoquLBI{2>AUx!z^9BdiA)C z8#j*Qlr3oT-EXKWN&6+KzPoLhmMT-{Tonv5Npc}@0Qv9!9 zzfPRXq|~cduQl^9`O>9Jl#`QVeZ`vSnuxgnE8MF@dsVIcJ2E2-+#aPr=Na0&2#;Z>zK|@*xp(*4#|LhQv5le z!d$iv{8a}HszWBK1Aj$_`mDM=Evhrlw$3uQb^Y(?PlNwgUwt)`<><;fF$Fa2+__WY z5B)fP{J50C*|TTmci;${U>lal+}vE*VH=PKj*uH{2Qc4$`>n(uGGzNF$l<{Qb=R7; z@%Ov@`#qdz8*cF=_}{v9i#QBP{rB?nY6v|>2mbr_@24$Wwh+slIA@kN4E{qNd-v{@ z9k}n=vq#!WUS6L33>x4Apl`4f$OyP?_>Cy?IFavnM6LD`dF&=~-$B$Yhp5*+qKpef zH*ej_Wm~EJSj=_!Z`-ylrGEYTtvQEJW`7BJNE(1Icn-dT9>@Z?<1=J`>eMOO@fkb^ zzkx6G0JH#a@EL|H(C|wl*Dr{YPY~U^cW?2N z;LpC^)`7q3N*1a=jh(;_pf7KpBI=w+WcZ%>4;okoZN4RH!8F7kBf52uXwV@d&uzBS zM5*wP!=GpYF3=<3SR5VTJ9rKmL2sb{@VmTblL+--{JZ{W zr6J%5kq_hAo@r>!dJ~st#Xl;SsQy;%e$G^nJ7I6Um*+V6?8+< z0UL*&LGNJ~>Il0)>wT7}JJVof{qJ(E(k5lzxH#IFGmhIQSWT3p>v?3K~ul1v3pnOhfh+Dowk}ec_|<|NZyh ziQ`O>4jNQfbQC9(;^?@0_bwgUyo8pIHPXW2zBG53pG2bX&qQzhMAY*PQ3z=GL9=Jp z8E<9Jd#&~ipVV-h)t;Mfwc0d$+~WRZx5S_2JhN4+R<7*NrvQKGi9H?Ad+4=29f}s{ zI`ruDf7a1wqrEA8WJmfm!AH`7_RdA3w=^0;PZM=xoVxs=vuDtt*>f}aB=)Hd*eBIx z8k{#-eJi(##o_Pj>T1(}j`4`|f07667x6&J0``FKiU#1%evfkI4J7jzZ(1?BBbk_n zB}@Za1pCjonT9@$$KTIcX;AhI8k9Z5CpG_u`TiAAW6;3-ciGJLzef)9U2*ucznA*Y zww8>12sWqaP_%#s#Dhoa7Vw9kTtCsDvOefQ8BD`+rXg*F75{_+qIWMd4f#ZGUa;CT ze3J3UhxQB_ls$t6WzXFqx9#zVoguz(o@MKxL3MjNin9?#3);rqy#Tr8EdxyW?JuuQy^J!?5eqix0G4}YQbzkU1m4IvBFVXwd&xB+)X3w%HPJ=Qhw zn}}72ZD`vjdC_L3VSQ42${yQ+EKGyFJ^!11Qc8?J&3rF_rbQWO@?Zmv9~ek8M)svs z#|}yw^f^W|Eys8i{_O9i{xd$wz#Dks2%La7>;ZTynZU>E^JBzc&6I_*}DR_@uOvKC~p>hvvum z(wta7nicI&Gnj@CnTAPB!#Jh^%|6HYM{e={2l%rtNd0HMo&s7v{P07vSS*sB($Jx3 z0c`%EwX}0eTgqV?wlEFSo|y*tBxTR3?2{J9`_jBPKl+4eNM;&7VjBL*dNeUIP$CMS zokoosWuu`aI!clW8hp~aq*B;3(@>0`c~q+fKFyvzdk6bYYSgF^g@=dJ^5x43 zaXBF&fkuoNK{IF0ly-gcgnSh10W{e2ffXa^-XFZ)NFQah zXO&|t(Cm3O+rs1U-@0{cRnB$(uJCW#v}v0`g9gP8960bY`%x(elgUIqdi0>)y?fKg zAAd}9=gy@$bLL2Vu)YVrpaHP}aYE67H4JEgKZPD57GjQFGXm-GXTbj!?OQhLVU97% znq$D8;gc37h5-G?uD`s!y{CtSgiM6~u&$@@y1(`M_3JHc!^Gz(F)@+YCJ5iVcI_&2 zgx$M$OML+Dz!fr5dZpw6`k;GQ=OC|xEMO0?X=%?a2faP7va{#^Y+Q;wa8YTLr(L^t za~3REAooEqw`R*UVZsCo3k#!q_3BaM#*K+{Yl#c+fNkhIXi(jr7If&88XLZK|C0W+ z^`CwmpRG9t;iviL^XJo)DO0Yeq@>WKNt15&?c0~4 zqoXC?d0i=W2{gbiKqqhm9rmRHuRXAS7EieU2HS%Evo57goH+3a?9^y9(%7+Mr5r#5@DB(Gpgw*2$loCY z(4abKQ0rc-#gJb^?|~_&K*Dd5!xSoB^I{# z;DtTskt0V+`!yI0}O*way*ZYkSPN9Ym!0rU#~7_w9Q8;ldmZKbVW zNc@@ZnQhv%ab+G(fjxiu<(HBM@CW;bY#)+_h=>U4)~%b=t!2xWN&LZU@Eo6kH|zlZ z2frgXh5jJdh8@5LU=tV@KA3TTz~fADbaeD%xtn(F+LbS?HJ=Kl#UJzP^B=`mbgUPF z56hM~x4>P+(jHje#QG+605J+YRxoNm5q=arh5ui(W({R!Wyu)$`RAWYIPjYJl+V8H z9gdM>8TXz1+f-q#dz7|*Bl9=pKk)x-kIDEBd&3d9K;E!f)>D~F#Kgo%-^#Ww;~RVp z^jqm6>;QHNnLtk<1NdZpK7`L07czo85YL%jyh#UsvwSIWx8bkXRlN@DbsM;WF6a zaKs+_+i$;3^XAQy`mN`?>bMTN1YO5>!~o!~>LZ-jF8OcZF7el|e>wIfLoX47K!@7z zhyQ@DLp;*c0p4!duz?mXTqyNf*)TfjR(tcvoA4bvqv{9jGe0X^w(NfgcN_ltxTw!z z^tnw*GC@yGO_lJV3)h1-;0xV??*uIhcg{~&Jf*(>34h?i_9gY7>#x6- zeiuA|y+YrCKkR_@aoID(UE;6b|71U5+y4O#h@Hq^;Qycph)0N>;4#*m;63D^_IDu% ze2346uZ17uHHEBeFwM^zcZolAwXb$Z6Q zqv182fBPTqm;?7cJd@Y@(gY4J+eeSSCo0eb-_fJb2;p03J@Th#d@QRS9kio(Mn?y` z@pbb~(2hCJ0{`*ak*r4t?O0YjR?v=BwWG6k^wo~zwIf-N4mcKlZpTGDMZ^6)6|`Pn zl#nZ8zmNM~?zimLi};R;iv51zqZ;ONiqPpP z#y)w6Xw*5PE=R33HtYqXrqJRmqPM>zI(kjwQW6fJwRZXP<=gVwZaCZY9r!cOId8JR zy~uv)SN2QCIX^dXZab87U_8UnoVzRM8wG>UTkB-l3q_r;gSMA@&fzm!zx;>wLezLr@5G)q>O0tz zM~&@q^J5LbYtUF;FAP=dd#rOYFY;*cM6G#{H|ZPdWqp6K*85N^TUS`z)TdJ@JrUZY43B^y05x_K(CLe524QJ&ByPH z>ZCJb3a?)yIL{5!--iMDBL@a9h(B8v#K=7`><42{Ud@mGk4x6NC+cldAM>oWHq>~a zkEl_h)`>ddTi;61J!*c$abEAojvF^_sJ`B<@>v{_TW2L1t8MuS=(YD~~a_b;vfLCuf+M_((oufGEqv}~32X6bI;In4LcQ zYBkfAnm*dq>E!&pPKsEtU_qE356lfc#}N(nHteaQzJNX94fEn2TQj`$2T?rZ((#bB z)&`qEy;DCw@`^EI#>9>vKYpmb_6i)ZZvtMRVSgR9rcABghdLAXL!pnTF`>3GS*tIN z9boNqCq+pdq&^;eSo^l0-@X=XUjv5xcTDw_^)A$ku&0T=aix#g7e{>swFz0{(&isG zu#=ptvrZp7{->z?k&{iIK0RXb;>BUGMXdLcpM!4T0v_OaI6X?%4N z39vt%t?jQb)7b>-Of$4P*?0{HG^vj~@7vr@+%9VWYJCPfM9#0Tv*>Gg;M3!3M!7pb zmo*mD>ZULbNm{K@*Z$=HF#n7hGa^3y^wTiZhLDc~54EmV_YDFM@B;n_=g?5U&3gZ# zO%$h(I$bN)|0Bm9J9cdB)TvWrz=v70W=X#Xzl+!h{|{XNKcI`4TVHef?c5Q%a_%VG zgq=P{``c<|CC!hRf_)C`>4L{tU$HIP_R{TZVM;cT#qN|)Dm;IL3Vu5JP#;G;)W=0h zZ(;gk<3EpIM$I1<7IxOx*H`YlqBb2B6-6I?^pRZO0Vm}Pl&^$*z?NwKj6>&$K0HMTtY1o`^Le+!E*l?T=E_MK-EZ;4yZk3 zr4Jk@?nOsO4`y9X;2a4Lc4N)|xHXkCc*VS*J!Hs`uTkT{9{n3{yg`r!>T4XAZS?~1 zUFo5^M?@VtR{g>J{D8+=%Ioth!urU@_cBifDGUl z00&&a3;1pLOyIeF`}SF)bTtZT|1)RKj7UpM3sY-u$Qd{c9z2-b-QB5s_wEumweP3u zL%0rlqx=Q#OI)*NO`5Q-6-v{j|AYUTJbCg^jE6mW#C-T1)E3@(=N(yNhF#!VH1I&} z@giSFO$B*7)3Epn=C;jmzlWvYlR!L*kB^tW0r#q^eMQI%yawIy$+@|?E1qy}IX~uM zUnBj0ad@a4c=hVlv}DN=xmOI|h&?A&Q+&#~<@}gO#b4+W=v6s5Y){oCfdh05H4f}Q zZQQs~-6#08bKB@I%^oQH416EtoSmHw{ky`vm@cgQCr{h(tVy+}?69xL`L{>5d(IPl z&o~r$_7?qd&+O`--L=69Yqx*@$`d@d>+(oEIUYJc>KyB%Vd>JP>r5uoE%s5rEnmL; zUn^FuDB^c47E1w-F)Sk^L;lX!luJ)f4^B-@-Ike|DdnkR805@0eN+#RdfJX1JFw4s zm&Z86`ga3%h_x~FHH+6Ey??ac2j$E8^`difsErC9*FvX}!>N2m*%W+P_(kiQ3Hj+^ zPHS3yQzSnYh{2c(wx-rZ`dl#LiggXV@!Frl@J;R;;G1Aaz*Rlpad7K0N*QL&4F_mz zC#)Z_e#Ke=YZXskD=lEWP;14S9JoXOG4HCRV434w=QY@(8`d$f7RTBPYd@^}uLP(TK9CYkAO8B_y;*52B~{cw|p2R^DX3i$n}tG zBG<)w!?Jj~90O~PE{q4{_tsl)$vQWD82E5zR~l`Y&{3`@k-H;r$GQP)r*V;;RN)|L2m#uC(uq&j7z( z!Ef8PP3CIqejNC1p!kn@>lmHVJyT+%#V14bppnQU*_09UJnmH z4ZJZ9c!63GXhO`!eiC4@&PMFswQE-qShS=H7XND8MOm$j61uvkg4V0zcLz~HxVTi4 zZ+pTU*c|Yec;q*{f31vsLp9zUfVZ!e75HmB_=b0{l@p$xR_}y2ua(!Xbdm2}drrI3 zMZR^df~Z&)>0X%VEyDTVAkm9I1&bb{JAV)6e>?GKv@gpQJg~k8&p|qHb@bKfEyw@a zZ@3PUSoanqM7)R+v0^Zf7A2xZB##^`28m&OO@O?{Q+RQ2$Gw&4FE>t&92y;jfv<@X zaUz1RAH�@V7`gc5faDXE2(J=*DM8@-+j*5dI#|zq}z5hbm6`14?SB{&nuJOLGh8N(4m6!V)4C({Pen2%4w zFE5E(4{e+%4L3z!>?3jX6VT64h8rdZ^7sSziqgvr3!h4Vg16^pal8za`WVLJ#TTPt z*n~&A@pnE8Jxbv75k=%)sa$qB?}&ti$e8}oV_XtrqGJ;}x{i#GZJ#h;NMuYzLerS2 z0rA5Uh7B6gbilBf_7Mp&%|N7v@fJY9WWtnA|AJtBT&g8ZAi zr5vrL6^y0ULGib3yG4$Q zjCP5}za3p85`tq#4SO##-qmGfl>Y$yfz^(#gCe36B3*sFJstu4aB`1F&+hF}1Xphl z8`1pT+e7iwC)7XGKQJ)3d*?oVLh&vo2l-HTp6QG!-&AO-m|iVCG`&x{sOBK0xhFL* zH9z%EYQ;3iG`BRbv@U6V(uSlZrcFzmpSCh>Q`(-iytMqZJ82b7jwbxYg(DDPYPHk} zt7d1+&q&Q!nUS5bDI+IiPsYKFyo@s$`5A>7cQS;zqPd#c(d=S&Gkco7%zoxB=1_AV z^SkCD<~Vbrd4hSGdA51JIn}(d6{=I9kaZ$60>G!&Cg2BTA7udm6Ijp%SyZPA09lUc)cS(0k_e}Rn?;`p5Zu*e)xb(#I3F-C` z>96)z`@e7h1yD-^1QY-O00;mDioaZ{Oc!Jc4cm4Z*nhW zX>)XJX<{#RbZKlZaCyajZF}1`vgr5x3f4Y3q*9r7lBVr?t9HGv+xRqzeQl@h9@$lC ziMF|>NQI>AxG($L@4Nv7Ku~tt-RJ0OV~GR?gTY`hGZ+lkAFT(w<>Ic&F0Yy(+8qSX zww^xQc((QId2n)-28VaeRapebH8+n&h?Y}hO1uY<+-Yp(T}7K>Si{fAF6m(s&D_S%R+t6%gf8GxKuyOT76sGO{V31 zk>whLN`I@%>2=yXYO1^KM*)1)<2rwozMrOxCfKJZdsS6d+d;4%EUM&ko@@t22_3mf zE2;+NgHiCNELyuo(^{iZ-|4SSQe7D6H0gX{|9;=xR>|T~2e0O;N|PD(@>?P3gAqdyG2?LsSEUd z7}QtGCd-FGmE2CUVzF$7!7-KHKNtqnWO|iO5a6UPm(>)?FRQ#HXXPLp5tEO21 z0z>Ld=ktD^SBojW4_=;}9KHlj&C_Za{5`4D-LkmIE|*o(lB{Pp(e7147T{BO4S28N}l-HRGn9@ribE#585hEXRdgGY~$8`BDyLfA6C zOq*BqESgM;WS&kYP--1!+7Zl+tV-vARe-f|Xb>)r&jLUk?i~g%wmyflkM_Ubdvmh? z&HmmI0It$l*gC4hpQ7>U?P$+dv2lV^jLN77-ZL*ZzsDi-@f^-Q*3-% zBQbvcJsLduczye?!_BWg`q$5Y`>)48{rBj%FTOk-pPnI^0L-IDv-E-nDxJ)e>KX== z|4euW40yt>t*z1DLo6610hbB53`x@}ZI)F5uVxtu%cQy^(FjaQMO2ma{h|UfLUNfv zqVP8A+-7;MDhAi-T^+2Ii?v~}mS5Ft)Y4jo-!94u#6q#rq}4ntk{pC{LGT)Y*ESMd zR>>Ti9tNdCw~m7yg}F48&Y*TcY!7fikd(oB%EAVOdj-H6C;}Xu1bGGzl3V}`38O@T z10LuDnGm>}q{@=>JOu%>oL(WsvZnbnh&7$*3yz8m1k{OOLNOs_Jn*v~q#1O!3P=QG z7g@@^v@z7h=fEZH^oi$5Grcn4>T(%0ylu${AmuV|p!z(%tjgu0jt1kcGpC5aAy$;{ z<9VDGvuLp0mQ8a2k5tlyoTict`0Mx%Ncf(_RunD^7)@A!fuH~_C@%sMyWzk9TBkOc zcNQ8Bu7JTi!U4u7JPp^v?T$qBppg|MZw=Pk4j$KG@Hp_$5I-d%LGa@$UF69$jouA| zFdRI9a8I{wlwp20HIx{?v!CBy!G!OlC4MxIXcnDbEsJa7lky$?d57FCv#3cs5P(`H zC4$Y)^~qplKB>)nRDvsAOtOnRz% z=m4;K^v<0PB5772&^!Ebj_od@0kVC4oh_iL8su?ak`h9q_)!ammMd;>*aGTEU!3n= z@oTcRtbjI?hf(O0qeH6)vgZ0bGH~UV)x<~8#Nc7V%NiY^DXbS)X`R*gFyZ~AULk{F zz4mq0Se>BscJ+Mq%d2v+a-r)di+_$$`46Xr5D?1#8kUQ28_ z8in_dg^=7PoJ;QyqP0CX4=44(3SIC2g3>+x=n}fD{v4gQEm`U@6o6{40O$YPqgTpJISgtrgs;&3lh%z(P$cJh2IfSyoTV{sD4Z`! z+<*A&>5#uZf3fu;-~4pFah{svuFZiTmh&govd0O6p9h#bMuQV`sIA{C z%pdhZ@^t<94X_*o%xgldYHAK2{8hY*QIMXhKN8g4g(6`=nlRfQrp7!V6K zoD~b6`SF{?4@0$g6)`{S!Ep(4Xpu~>lS`O~SIG_P*0A(tIs4;rsRhQJUIn)#0SP4( z%f)5A3T!GOK3ISH$>$$Ltv^GOKQiSVT>dyOgBejH<%;G5*tw+u@o9hK_emzP8&t8O z-MB5?eXc9lJ7%_N8;;hx(9=D?FVm;M4{QbAK+&Vf>(2h$d}{bvq29OD{U9}8eb$2= zGDvX^OL8!;)VfET+_LvN1T`ctZ=sxeTP)}2VyxQGlK4EHqQF4XJ*wNMF2l7-%MP7@jza^Ezr9} zc_0a%AHFHjKZSc*dDsf%7)h(;F2-^7-A*fLclTF+a{}~!=RFB#T z%rqStbO-xx1UARe9Nke>D<2-t_A2FYn|d+>(+w91^}8xd^ms2p>2Ljd-@rl;U`dqT z+K|$f0*qd&t*v-&B%dsj225ariC?YV_yVjj;KE-}Lh67B3K<}-TBNg$&5b$*){!Nn zxoQUjKq5E7AH7>#)-jfep$ZJfrm=C1kBJH4?fs?ESBY_B^tSZ^Vq4~%ps~Y3<2)_+ zZ95|fpisjg+bH;zU9m{N^Q6Z3sO7~)_I^m^kV%O2EtwWo3a_D}!k2i=9WMmc;)cMJ z^Lm0$5hO*=MGVPV5U>~p+BprV>Iy$wUa1C%uDSsQ%V#JHz7ymWS#etSa5|$PdzUyS zQ%x!sg}ecOmp3U#u@p^pM~X=k+`^)Zz6`INHOC}gl#9s1Z%DvDWEoUlaeLNMvA<8M zK6PwFsP*$`Tp8?jU(d!?ug*w#OFJJUH27CxYKkKhgouo+0R5o2iDYDf!dFR+{`siB zqkV=n0XW28p*6*CvZ`4oFh6br1Yqv4$+jC>+a5u?PP*48TQB7;L2axlXZGlgZ&fzTbQE{p8io+c&!}_l_nLSX_!}O4`|i z6}|ipV=nWuz^K0>O=sv1NooNzy-EtS-Y{?kAlA+DJjjz}F~vxed79wPMnWN?af^la zeU&Kj1(FE?7L|kJ;757G<3gRylLkFpWnpsjKjqJu0 zr}SeYDntg2!5RVF5UJf_9s6qS83`m6H7ce1Ig+A>(-}zZa=vJW$_$tQD^GW65u-y+jWh2};JW6iYd8hz&FTAH&3BB@XO!mQ<}%~R64 zw_ve^E>(`U4aLcTvO4_0jS7=0-6{*x-KMA%o))6OO>I&RrOVd1Ol3$&51TfV^SjA) zdKbY2$8gJ5CK|keFNT2`6Kya91!<1xPh2nZtce_UGjs$f6i8gBrS!}5nJ-{w3@=gI z&*)1phhgY9YK$c)I2gX2CiAv0$nm0M0&859sEB_#3Z7f~8}O%uexgeX$P+M_mbvIB zpu*<^FbEo3O;KfUE;c?72dZHuZ(;pzP>v=PJ^DY#2XBVK1+W5Y^ykU+8iih-UMAB! zBoEk`tYd+$k32=NVr)W4su55j=Mfg=cRIKpKmQaEc%mT2<}Jjm(V?Q_5W1Tdq=ScN z<8VQn7_pEOpXjfaT1E!xkTjJH-Rf#g;;c#Mb>yf{!~tLflJU<~`~|76Vw#MUae_5H zS_~;kBU$ng#|b_1nd_nni(XaJ?DzV%1iA4w@*Nd-6=g$O%h?5epkUkK7f^T7>u75j zYzx^<&$CKh03tjdRKPI+rPY%R< z*npxRluWZ&tfvPiNi2A;Vf6x@J?67CFKOQJNe`D^7_pZcVpMopog;}s8NpDEmi61Z z{;9DF-TOop(5sf?KT&4|RH8}ozXqUyu;F`?hm?8)Gh!M7E3PYYrB>oE6!QW{hHJ<|9=9BxS{M!zeeK&~Hr zeE?c;3Id!;V>Q`d!trYLdl>L!27JdH6kXd!tqe^O+{9eZm4m1Q(D1O;strZ2u;h|# z8rWmlALskH-WGNK6NBfz!kOfsrEdtx-t8Wi$ehS|SX zV;9rVwleF{-`aC`v3#8;MFRE;aUvcrPpL{h(g-0s(xmSJND%86U5kp>DeX z$#xf&=l_I>HP~*K)d|RxteH$A6l9=kflX>mDSQ~?Gqhabk1?ak1q6#N&PKE=`Ai!! z?qo7AXUkmwnw3-dYKa4eEhalPj9-V^jK{XrGcsoeCdMeo6~fS?VKB{W)9R5~2e16| zUj(rwx_QMJwLL~!wIjiVizgGo8rr9pb@5nHptAz4V`X@aN46%DakmDp68AK(whpnB ztQ^29up%_24f1 zV?SRVkhOvp(0hbNAlQtomNzAg3Z0v|#6Zm@oghH4(`AMJ5gxt_BX&v<;o{XTt2hYW zkhdgIJ7I_bqDjgz`8uF0i=duX8E8l<07ZNw^>P6y@$T5$0t9~D+@S*xaigtrUJr#> zxIMuBlf0ZJInQ5wRp4R+1%av4;1Bz@=r~A*3$* z$bQ&5)SpnrRy5T3({X&)@9VV5KgrbVkypF{}i7 z$<4sDEUQ^$N?G$cmUJ8CR{)eya#jqSArn+Uz(n@93#6(iQ_xKs12e8>xPOH9Z(Eh9YBZa2(rv*2Ik&L3eqy;SaW_)1_IVbaVmm} z0L1NH=#lJbH5FPjF!#9x%>4IYJ+K=Mz|2wVKp)tR42vg4(-B+^D&$r}I)T^&N|jNe zlpahjaImocc?r{q>e^K?m=n8#>jdaP*xFsWM6b4nMg3Ln$1DMZLkds=p^tpcLeRt# zF_K7LXwpFJP1(qTqytHn=>-z|4y5oDkMF13EOrCMGHPv5!i$F-^(S80Soo`+tU*`S zVsk)E9>T`dTxD`bjJIQ4u!M5cAw+AmrxiY~+-{9WI}y%K`yC#n_F1gZ zj)_MA!8+0?`0!&gN0l)6QojY}lR_m|q0e zsS7?)gF!S6ZM|1_8z_*FvtUV`!kUQ&jDG+O88tz*Tu}nPqY#e-34>&uTOme6I0_L3 zZ1XYMzOYzy(C^UN6q-&US*gnsY%8N%LN8+19Fp~ZKlSekztOq~|f5_6xprh~YFY`PL>dhz-5 ztSf#Qi-R3(KY)kH-@rZVcYgp_?G3_gE0Ly3czf;)kKY?&LJ)tF3n(;btiITwExWjf z9Y8mVEPA*uTl{qF;|`h~C+UNkiG6hE8D`rsr6dmZkbJGKZnT0WNdNe-(R3!iqXX%V zYQ41^W=}eil+6Q}(P; zL;{Kkq#mC9cwDam%|0mh6Kjr$e57Aouxf!%exLTe) z1;z4JDO4<@%w56zC%IY8FlEdlGeF+JhRxq@F;_;-?AP`hh59z@SD{$k-g9iL*$*(9 zUt?3=`n@)sM%J_zeP-PG9Y_zA&dHQIC8+50?3a`c=OJsO>IeJoC3@m2snJy`fw2_* z)Umc_GTfc4Wg@L;Af?5gHUIB`=>}u!XssgfI;?Z=`oJ1CW^2MyY|)y)yyAjf8PtFO z3B*Nt!T$>%NS3tZ^4*xwhyIeo`Dp1Aa4%0=>TCN zJiMFk8wFp3IB=!BK`_fQolt?(KfJ_x0rE&hg6*RGUcS z&;(5qFGQEKr(Fw@fq|M?23HOBpbg0&9R^RH*zHnQ88!|m!sb3*!r^=sj7ZUmt~_Q< zXV&W#x?h@FhMSg59)pUEx}JF?GkcbvFE69;2$3T5SG&1!*DFYxc7pe&T)BVwwztxH zfvps#QbvXCc4TY+>4vTt?$tJXP8M}6sg{vK?gn4y=+6f>iW zJb~XoOb)*560IBJ$Fa7Cies5oE?%lMuPP4-A=HbI-m+rMt-uXMPds{=HLi2qbZzZY z3GrrwvL|7{!+>3O7s}C1XX&{WU02HbeP*)88Z6Zv#4cY9yR+C9%FbrMJ^ioBJjcC1 zmjd@r8g0$ssq?6dr+)!Nu~A|!P?6z;V~Nm6~vqbGQ;v2ful=exWiIT&dUzs8N8i-I^j{&-uEUd$0s;6ok;5 zkPioNP6n3;L;Z5bN$YqpFOn>0wktMhL|3x4ihixj9JoYc6*zikRs#RcCWZtOII_=P{joi{=EC}M1ng7NO%1LYx7 z0axnS6o*DR?j*^ORM@*i@Is%aa-zQIrNoSl1h)N>+QBdw{L480%?Yp3h*O+~D;8S{ z5Z@W-49(`PNS7*IRMP)Je|~QRdiaGw(md4@qB21BF67B=a-HtYr? z7rHXvFp#Lk&>Z2;ZkAWu=<0X6U}TK#h*98QsI^eUEx&4!x=* zgz1i}UL7YBG_EFiv|0xa@e|dR>S)9Lu^^!Q0{ zE{xOq$q4?(8dF%$P_g?mI=%gP5RJD_<1_sBWJTTRbS$;0M_-OlZ#T|9jz(DTt7r)C z;G6seK=}J?@Kp~yz#NyS`1`%1zaJd$4XkrjX2>l&IHzQ93P<1;f}%=X!%B%~$E|Wo zAi6o!6lYj23fy-dha{>^Am||p&$`baw#Tc|`q&`5DQ!HTH4I_FymXVx)V z%uvBZpv}gVB+giDMPr2*iUo|9(=z8nrzHKS<+1?jza3icB~@nRW^%9vtpFL?r0!1E z7UD;v;A!7(;lGu>_tAJ|ht!&AQbmb+AS!(|C`uXOAJG#2i zg-WDoY)#M>zmRhn4$ivM)LiaYt>#{hL5UMqIM3}E8w}?la5|)8h)0Vv9flGIZ)*uNVWt9A;3h*;58>l;YE?tz zt0aumbLjmIV?iX8qstiv?`TjGEOSr!)*>k;fF0JdS@x8vcV0UbI`*mDvNemIg%EHwcg3&=Rg0<9P;zeop{c^qY7G1 zwRov2=8k32@P1`z5<9ey>Ux&U)|^J--Xv8Wh5toiv0$y@wrl8Hp)g$za!)`TqMQ{U z3@{n;`&!XM_=sWM5(5Mwd0<0|dPozxu^?nCA9M;877S%?lL9Ao8Q5z3dgbhG+pT3yd$*= zuDES>L7K;bZIX9lByck=xlYm0w@wjvI-`%)6Hs<ZftCXO5gyT9jIGQIUs*Z+w4F8%)#Uc z%v;~A4i93&I^^Pz}3o2fH6YleQWc9epTq3Fkf>Wn(v%{xmJavvFoy2+J^`Jp5g^rj~jbj|rR%vNeE zVKz)7x^f0)MPwxtMTsc7J*LRM<&bJKqiy&%lI2{>aPNrX#Lv;!L0{rZ6tKT_vMvL; zR0M)=)fXwZsGI$5d& zBKloy0xIu|uBoP?;dD_gi=!ekq>O=s`a0g8a}-D<24Qw#(V0|NjQ7w@244mo|Irp2 zP!>ns%$&zrrPq$rdYUZKPK_!&Jr9S0-Is2E@KaEKC<&l{;6TN#TkM!mt$hx8F%V}`c8=~VXd9=0XrH4rDKCeAh|VWq^{=K zbsDUl+`Jm*dmhK;K8WdYZ#PMdFDB#J?Q>bXpIv;^4oW z`}XL(BruFhRv9gv8M+f-j6~Ml1@jap<&1SH(8ch;j%GJ!rpjd$JTt$+XK8#H!;3?< z!0Qck$gopiN^Rrm#d)yUh8A_Mf`l@X1mQ(l2GP@aYrx&!=0VsdEw6(Eoyw#f+qN1- zndEI!3yUmzy`g^RQMjMy8XULoDi4rK;xoio z06RRhe7~5w5HAT?rZsJ0CO2TWQHmvJIcyJ!>C*DF{SC5lEZc?}judKt8--Bqc@lD# z6@g(YZ}LcO7>7@~8)LtX+LrYCT=hW2xlcCvhW8>Xid?MBTq9V)x@cs>jXqlzX!Q~) zs?L>ds9CA^qS|R>d!v=KIkg1keVQkgd*Orv*@>snZRxBveNi5YqFqp4k8$;H#J=)L zaFg;KnFvyG57%dO+kx0fD0>Q?!KNEFQJUc0tHjb1;c3(^^9dG=mR0U@vcx1>hWom@ z*EX2beay;xf#D%byePQDcO333I@e1@|y*9#71ZQo9@(^3ReAmGUs81`iZWJjhPK5;8X8R;BVU0)d|YqBe^MwWR#16;Fj?GkvEX&4Rgk!%TofJk zAWJH#!0ynAJGiFX@0g)g0%xB?SSF9Sf_(su zJROdA+Jl(!-8>7MgH69ON)-#-hX_zzMcvz*#I*lg$aa&8E!5-S<})nZa6nxWtZHXR z+Iu*(8%7S*XdB8t0)63&BE^ppAL_J+AM3O=PlR4bc0j%htv|`3hotKA8xx2Oy-}(S zo5PGXue0|+zaEKBxf5!V=)q!n4&!pQSuf8qiO#ta)b|NTH>hr+0aSAGM%P32nkP(p zLtD;m(V^@UteQ4EGrAI9*Wu(+1q15}TzYKS)8&Ox*eTlrU;Wcw2#j zaaFK^Ljo(y0#s2!;pRY^;+i|9PANhe=Kvx+8B-ZbE{m#mG;Tqitx~q@cNA8s0k{^R z(5ln(`kk5@Z9@+^ZKCVt=|yAJ)jTUwpoeXHIQ58=&HrC9s}dLgsUhyB zRH(@kn1R)@46G8aUXr7ZYCtn--%D@4pbq0#I9HNpc2gSJL(o40+P*mLoig_F|^6NDSOPVZ=!?~k?8 z(~do)Vh1{kj4|QVDJ+*~U2esXS5wg`{dDE1hY3DVZ|Iu(ty5sOM4zq(00ZM&yX)c4&*+Dp6S!MkLzJeYjQRS377(0&JNjN47x75V^(Hl zLlrMfTNiEUSoT=&O{3OPXkZbZIfsbV1fNd5FAA_%z*ffXf6z?;hG( zFkm^e#pELa$T*?=^DM=DNR3Y<+Z+n4VULEImykx*-CU8AW=cj?j%opcu*kz#dU^aQHheHkXT*1Akk|1s=Y2^3Z! zlGxKIpOk9mALk4bd7S|yZF`XuFo>N$_9kaNrUd;hk$ zF3Q_NX}w%&r4rGUv(kQ2r=Ap;SWMgeHdH=sjRhRBjWif>O+J|C+E6W(e8k9s4nSdEeyVvBdu~HrKdhw(Q;mu!oqpz2SFUi6bFlA zBD%b%I#GqN#cPx#WwCOfVp4kE*K$wka%Bwv>MDndL?4Y9x?h^w8<@nttI8?sv{SCf zE=?s5sUPrtK=I>|ZM0G{ts>89G2$5tL1Jm`JG{o@q$As?z~4Ft8|$Vji^~bnzfe~^ zIEvMJfcrw*o14(j+w3}9q_ZrE%j$9ye{G&5)jyNs@w3k;LJnZ%cM2L_^;6ClppAmU zKhfc^?KCcC>H7&CVxnz3^GeUU!5q}qyvxg5bPqaO909Q(nbTN5ysVPNmAy2yFI!3o z>QT{6@3M|lUJjrvD60du%nVOn>{+TW^O~dM39LGdXQqu@C~D7cd@{y5=z6gz;ofYj z`u(ud?#tlgQSj7}J3v~+k%n^G_H!55Aj7Rxy++t`&!6N^m&G%~NNq;=18pG-%($y; zwaXUyJ5*t>iq)1C|A-=`Ur>NaqAOe_yf1N=ViIf+d^Z`G%BlZUsm(gNRlk_&4Cg#6 zBKzU6Eu?{Y&eoG_+olH&ZC~fu#iC2M+1P2SQ9>n(B3FADMw<67Fg4c$J=X(0*MsPI zclS?pp67n7@Z-Pe-RvpFwM8C$y3Hexl$E+P zz_={R{MgH*0nKvaC<~aRN+;Hc-rhUGJ>tESa@job-CZhYWhXUEyV8WSj8~X%gI`0} z1vQ;In(-g8Z7z6^VJ6}JE|4xY!vNC-YD%jJ@Bk)|w(0Mb`aSGu zCE;linrC(f;tG0OV32Y~DV(f0Ekf^?Y(Y8P;h)Q2;Gc8&=k_Yc7_Ob8-Ix2{?@ji8 zJlT7LQI*G-RUnL^bbR>>UAlu`&wqKQzSCcT$iG#YbN&lZb%5$pa7rWjJ89#}@j_MH zv>nQob&_$=N~*2-hMu;!daR84=OaqK`zDD|+KhU=0ZQgk9e1Og)3s>a{h4bQW+;~` zOdGO`F--n~uJ7ivIQLmwgfHgn1!cm#gjShf3*$m%Y{i4RMt}-p`%nm@$?X?1M9xVY z9-MC2Hrh?jn6~GEqLw{~9l96zA z-)w=mA$TML^r2(E_hgvot8hjNES>u$*I{=JRrlwqxc(l+)sQguQG>3@+V%xTgHCBu zY-qPb-3+}C?-3ZU^yoj(qjs!5lCk1kFrMr5zA$go!w+V6PVIQxr=LB2@x09wfF>IW zExa}?0jZ2v5TTqMI)H?D>H=9hdyr&#jcyTX;92~h9W?WFj@wV1FxZUJVo7v;%$G}x{gM%u3zFzq06SI~Gyvh1qnnNz z`h=vTsO@$j8GG;bq}}C9Ku9{GzGX~(%+kz|`e$c(Gu#ocGEBi|P`i zqA%q6CI>~{ZK`>7)y(tt7RwEI*qBZ%4OEekzw;jdI0lJ|{e zBIhobaOze-np>sZ8w%XakYUk?<2V_)4o56M#mHz1D}Hx7LBr_t28hDfMb_@2&pDv# zd_(2=<{1o)en0gz<1PfC=0{L+U~r6L<_@ue=Q_`Ns{w@!or6kst|(|1N3YP;7Z$LB z3Brq$b*m7-Cr#8+zlb*wrs)QG8Puc z5@YPyb~j5QNpTlqn)d6Itid+Cgy(f|o>XXtynVBO!j=arTi@Y7 zukoL6@t+g?=P+y|w-2SZ9qP9f4F;CAw{O0CbMV8Pus6nePC1@OTX-|Vd;IovYpc7n z#_yE+iyFK<`En!>T6Zg2e(+3Lp&$Z+oD`w7VuqNh zW6Zj{OUzfIHV*-p8*6LF%$15be=(9W{u0T1lLTB6>!`OjLfmr)9t;dFP#G*t_)lc% zBUb0VS)?5D0JIevnnN#adc%TXY|ItYisJkAl{nL?ODBAaL+()CpfPp&W3F!8#6gFA zePI@6RTzMdnU60_IOW2VQPvzBbvoTc39GHdNH=e?PkVt@*KGrpviWk}lf04Jkg4Zj zMJz+SS0v;n{HuD9f}lOs~!~sUApn-TR zcoMXOy`g8%AlM8vb6Ems$X%i_@k8x&h z4cY{c&h%~P=t!g5N1Ly{+NS?n@~ks)+qTR@=<81Pjg4*kZxwahq&FxVK>4^J`4B#S zx&8R{_Tys^{q*LN?q}1T9C-HYR=FPcPIey7SUMwW_%*z9! z$jhX;f6j36O=CrEOM2l(4U~8~fQjlIBIQGsV}9b%HPX8})2$iw@A@v%v~vllkKjGr z4&vk?lcG=Fc)Lfrl!}bp_@qyD4;3@qFHoLsbqBJ$dm$AzNdlTUYf^$NtN*^q#8etE zBB319-{$3c_vG-={_e}kx33QV?&eB3{WTi@^!wS9!6`bwCv>OBDRL-r@#Mp`YW~ECRoTW z0e5mJPw-o7TK z@xxaY0tC6GgpddxSKH7nV3ZntQ}k%<$&fn;A(-SKJgk^s-#vwVqY*djU}@6v zkKs7aYD(EaM>bN_u&ZmZBg0?m+OhEW@Watlr#;=_Qs>kC!&qh0tBHOH*lLzE?uepy zX3{3K0qvTYo8@UoWAv2+Y4CjLw5#j2a;Pz~vGx?Ed`J!7zFp&u_d3C-Cq7lK&k!<% zvU{WjAHvaz-+Y0VcUhXx2n@Zlg%u@}c+w`(QmA(E(D*j9o)PIbnyI6+-G)t?Rmm)y zCb{hE5J*K5z|G3}B{;V^vBR+2c)J?Mouyc}<*(YJ5;_@P`j*byREZ0^e|QB%`4;D# zWJF)#{jk!fr%rLj9ORPlcqG(iQ(f{T*8Oh!?5O{im-Z~A47=r3U<3qLANS#hnc<>< z35_dkEm3N8Mw$dU?ohD?61_Y*IXr&Jc^uFQ^Y^4q&1Y!ugZPMk|V4x+Q!UuXNGoP zz>x8U#^j_w6s2f~!XtD!z6VAkd29sjX-!&+OA7d^G5-#>Vbr>Z95|@7 zF%@#I@)d1hjtydh$@D5wXOVS%8HMYVFC?|Qwc`Fch9cb6-#E>xJ9RZB_HlRb=md15 z|MzzPXz%OQNK0jv2(^x;3F0`i+V09HlUg(wFL#b7$8Yvmuua?9aR{qDG_1u5-6E$M z*k%}$+Z5)vRkE1yREY3T-w7y}hOKpP&TEee=i6Dpk1YiwjT>%QfoW4=E0LOYSgbD^ z%{=<_vaA~=8fTJ8Wd#7)t#AeK{hQYvipF^Ed{*8Tk%*P!mv4b@zW(9Jk9J$py#d+$ zkowsX-?ETI?#iM9R`BC-IIEExT9Vj30gfLRaBLsg>hhGaMyRizLbm)je>!-hES_Kj z3nf4L4`|}Y-568bVzMLFCQMF(R?4@jLqH%^80&i%+?C7FcBjzsMync+18%{V6Wn&^ zjXN-TF)cl2h)<@?lAuusJF)NyL*TsZv|Y(tebkIx77+(KH83_Ne5p}AJ5R3?u&Jmt z9uja@0Z_1(xOF43_*i&IYMoAPa_}APk>ZXi=82SR%+!@w7Cfl;1Z}n_y7P?hZ5rme zrX<++MV(xvu5v&1j!b=jBEgKcnE zMw|K21uU=zp+SLucTe4Wi^ym$HjPGUj`62=~-1%TfN|A&|9Oh5}h7xscB2%r6i`TDI_zGv3l9M9u?|um|4401#f#7I`iHe_q zB7>p80nrKKi*h`3>ZuZAG!UYsw9{gQCN2s~KEp{T zZII=KwUnW?fwJs;ndLKL;S^;dNn=c6BCr%DILy>y))1!~4H~QL0nkdVw6^_bwCgUp zNSf7?khxjS8!K}j;UvlO0y6Xxlk5qM+;myp!_;BBR&BS;tbCzAzJ9fFbhs-yr`VLK z^_lIHDgo;X_$PWl&#T204MY8G#T{@0i1QxdRv$hXZMj>HQcQMQ;G2H!X)bo!FhLs| zoG716+l>p;)NNY_13!iT-@n-UixRPTJP}J#q*-K7b@OPV0UPHN7Nmo&&b#rJbI^bb zP~6F+&C{4(c?uaVi~_bgO{?5A*1fy579LN}3?GHT(#Nn?`-azgevblq|1dvbsO{ml znt#BMf6%ZSL$58vdk5cO07-t)nQeV$rn1PS%dI8mqrty}$sWvT4`w#YHN>WRpGLHj z162+PT#yfOu`*e%eY!%XEUV0`@cY>dzHv!9ful!2oDGHpi7xfP%Yk@aq$+r>oJ(-l zB2Vr(=F=Uub+jq;1wy8@P)PJfL97Qg=yVhzNp4{bsEnY8l&oTwf{s9$2T_Y^v&lY> zKes2A05%sv2n`w^xWzE|Mc$uY|zlxqW z>MhM28eOOs`NfVc94tB!hbUMG#k0;BOxO`S7U#*rxqJM*y@wcUGgIF#rV|2F;4ojM zHLY(X>m{m3Ve?3-Au1|44qleGXq1t~rm}d>(j@0aT8h!d6PQf%Xm9u6=xcVC$88E^ zXovNVi-P06JCg^;_r3^g@_T&@!!MUw*@LOZsYvmF7JHgPGcZFjZhI3KSOo>3uT?g> z$_o1YO^HbuB{JB6zyaB+3J`+4M3PnX0xQh|s-z2buv0G>J);G6?NASu+N7+<-=hP> zj_i|^86@>}li@7QF_1Z}!fmo-a06_p#0)$D^SM&FQQOR*G{|_0=BACX3+ZwQ3>sIU z)&vy%(AF_9)6U_35Mf+8>$j-Xw?J@MnDUsEOF=pN<3SBHzjY12aUV=c)X!t zQ2MV@pk&FKI4{5c;=jGp-OFr z?fOQ3Lt;_Ck7&-9100)teX-p(R} z&87ksaHmTVEOcDURC*DW4jb4kQx1bDr~6^)%)4)QzYYFGmAo88V+A_nTXZvuNN_SY zP-LUs5Dt-F=!DULFaBI5UbO4ir9$~ZE=cFH3-?2r&Q{>k!Wdtl@g^aY8Gb$_kxr*C zGDr_`Vo$j}=snwT(ZF*@g=~;SQ-{=3)g~tR&Tp`QevgrpwF5l%n1;J*zb4>_v5YPU z1Y6HID1d*$hNJY-QFm5SB?a6t)%i16^oqf-7=v~! z`5`t-cuxrL=-RmISvxF9ju2!|!mMfk4hUZlw(uk$EF^Cpy;jNcd|nFP;8yXOMcb#F z)q&J3p+H<9Y%Qd&(>tG9VN9Vh6tQjyH>Rt?g61q=(<^h-cY%%zl)^Vx&e?l1XR2-) z;#j)HX+7KK*Vfk5^{QH+>r}f?eS32gDc_XSGLOxTuFmBF$$1^Q(D9@4jrOH~cM^?~ zNh*phX&dyO)Xbqa$wq3$MSsSHqX%^FQ@Q9RlyW02&*fIg71`D46`yij7KP;FmTDC`vsBqkvI?^rEX2RF>M{x-`#IP!oYr%w&y97~MkJb)h5pGm`?WrEHqv0sY>QeK z9|lS-lQ50mM9c}^ z=%j;v-aNBAc*mz2qX#UIDrYEn&c6s7l;lH=uv&eH640q%yB13qno;K>U)EO!30*rL zpAow*3rrm}PYRXHbUL4TEfq{>((+||NP>e3LzBRyBlG3{;T}B)RJzZ*D^v3nSJf*V zdb}?1gudY!c33e+hJne+jYkn?MwyW}G2|~MHJYdDR?PO%vp)bIaA)}N#e)B=1Ah_U zCYjaXQ~pz5Qk(zF*VsQ zd_AOjtrQ4_H|ixyAodx`#Y}P)V~{7o;of2JV(Yn*A?ty8wUu#df0o{CF49Gf|7>hQ zjm>r4_-upnQ#>*dtkM|R3e>iZNqqJ(U%V>Eiq)NobS0<0SPn1Fs-~LNp%?2U*w%w@ zRVqO+G4RrnI*>waIG|4r&!xk9L(Asj-Qm8rayUXT1}OR_O7ieAfLOOdVqG@?sz#Nn zNMpQHvdYev2+3EHwL&h7Z6EFKGIZ=6aJ5+p4l^2%z80km@#+RAO#oTSxoma2178dI_PA>{c)3mH|cLBz< zB8C5eTK9$<^&@@1fL>y1(kT2FdR)Vp2i$d_n78N__A7lkn7x+wI=|E%ErN853SJ@= zS*>-hjHYb=m`-5Swylm-c88%8FN`dq%oo~2s^X*MmJRwt`t2;9V(IAqw3s<^h7*sr zwvl?$U5rD`q#OYx1$|!EJZ-|7Zpy>Sq3&4VI3G_cSxTEJZ(B@g@2hQdh<*?#xFH2S zYpVfc%wN^Ds+jbaUt<^DpWc`rfEBOG6<{ zgJ~s7O&{^y1<1gD=h%hJuhn$-k%8-V(eGD7Y)UCu_xT-gdPqn!ZeP$Bzb~V$GY-|w z^5L01>|7s4To-Uc=*`c1z~Svl9?<0%y%$-q>7CvUHN~NWQ53ebQ$-zjXCz1%ESTi; zZW)k(gKpC2l^@K{R@ZnfhjM82_(jzxQ;xRyD#36;iJo9G*;aMmM>&Yt6!uUX!K{SR z&ouq*2&q>M9|nqn8dff01zw~jCi%EZC?DZkJ2Y$BeqKYCURwdLRv{S|VlavTrQ4B3RAoDyggfTcXrCo&kn_^%lZI^fG5gYAuv|X0+f(Uh845p;Wn#3DmSP7*@xs zcova9Fr+m`3Ybh2SS37vXV78?7!fYky_C12tFS%OzyX}#`o$_Wza<3E5N^_&AF$`3{tR(CYNmB5kO4@~v8dsW`1B!Jw^A1Dh zOmBHuCQKya!||5+`ki2Lp&B;Pb=q#aas9{@jMwajNYV9lwl4U`Wp@en{wTYVgKyId1h+%T& z)Q6b?V4$++2o%j>{JW(TZ$y&CnkNm4xM;AcBOTjk(6dFRF8I}2@`WGmpyQHMsrSfdEjcAs@vhvbHvV8JRPexQ)(+covI$Ur*2K^KHow`1E z#y2c3@lq>QV?&&iQ;z!9iPkc4_WH{;8lJLzYit@uU`l6pvSOMqXM*IxvA81uoXW$P z@a>QUhEl>c&?*LHN5Ud`#vBrYS+^wL#{kXBBnLt-FRvuIUove>2P%P+wr3a+i0N2^ zvJf=>8l;yo{(O}cO9?Ey20lo0jaPcKcou)UQ7?;6mfXe(Z}lVPx5G--}s_FjMb$;mKC zn|6B-Ks|p3#i1>V62o+xYRGX&hvdCd+<*+G`YoowH@E>u`Wq(i#C7sV%{=u`aVpS~ zjxcfM8de$uYADn-l4`){v$p`WiJ}QDFGWaQXHBJzolxE<*W%|aCz@iR1u06Z`QQ&g zs^-t1bs>HF$sdDdVx?k%4D!gCnBX|&q`uRt#I$=jZ80Sz=R(cz6zSF`hyOTvdGKcP z^5FPna`p zW5vc?!GHYmM?RL3oMXT*PDE1*d=F3v2RVeZz+#iot+=7gf8qgbVZ8lXJxZZeNuVHc{HI!<|xG!=!w$&Su#${~_9T|CvaSUIC+k9C{0pt1tD;={m5A37- zdPG8z_MsyP2r9mRJc}ix6%1+AHa7r){9JS1_}R7-NwOaNAhFSOcr4T^fjO}vjB^il z5N+Z>I4{cvmh@zSV{x9RpilfjakrF#b=oK|8Qw;V$F7{}=&VC!r(V{e2+(Z0qR_C~ zK1vEJRl!@Bzdn2V$!DK@{`}KVKHCn$=g;5`FxX$7J$wHAvu9h+KmGj0C!c-x;`1$h zODkMx8?K6XG1gkhCcwuy?dQq+I{U@AcV|7gz!k2!s#u9AF|%VaORAZS(1y@=LqV?a zR6&gi4Yh({amsV%lq55`o^-+qJe#PDFk-UcBQ1*@4mID2VPduPDYrDeyM*P!Xsl%| zd1V03Cso?XvUNJ+9UFK`iLhHfnp0V<6jQ*sVn55~nY(M4V%>Rs31nTYz#Rx}<1S>G zl(i<6e%Co>Ywygcx-iacW9YJSrgop+b0PxUcivY~2?j0QThVA@7@NiczKAp^dc|KS zu%OhKc%cuf$elKo-3I*^nj*?m=h5V3=jhwLlgY^et;yQu5Q3Tq(kLWNE*#1;&?&Y} zwMU+VwxOSs5;J`CyJ3^K=7_V{Tbh`3z+=i#5z@6aWAK2ml3&zg(4+ zZeS*~0001H0RS5S003}la4%nWWo~3|axY|Qb98KJVlQ_yGA?C!W$e9ud=y2tFx>N% zbdpJWfCK^rh!7MEYIKN_9fAX7LR5l-12aTO(7TWw$1e=sfGdGyJELjZQFpKIv+mV< zWzl`u>+ZAORX+RxW*9eEs}(zHTtYIKA^n_F-7^X3-o5W1@9+KRs&9RaF)<8dhCfwhn1hV=&&mAre{uNBnej>v^HRoJmmD-Kf9sM} z{yR1oZfdyqCk?mXUHIeM@44q*zVKf*7B&d?6y9-9Va3g!!n^O?u<^?5?93t^$8ol4 z(Gz!keRuLN?XoR*KMwCl23&W)MBkh4{xyA9-2EB6pBmSA_b({yH+P?*@lG9{*Wa7z z`<6R?>_>e6sP1kT!z?#gn5^ut|0NmM%@_??hD?SDL*O@B+zpH1VS~R;ohtZkWEcx$ zpy|ms^MZjA@s2_xBs-faAi}2JsTckC)Bx0hqBJlAo*$^-GY00a45-R+hAH^(I-&of zzJhu-8U8W&mHftSJiLE&Sg#Pa)qEjLA;a8uWy6Ns`P&(0%@umvuY|wXFNA|~omXmL z%)09^#-QQ+`}g3&S2k>J_%VFbwnCekRq!?%zK^eA<6ZXx;1o`y0mbM29^8_D+`|9= z-~W?;tK~kgf8Cc(M$KE*>15>o-SOFrnP6C$9314Y_4^^ktL80-q&->!KgEAAi(vwc z-v-_74`Wt=4KQk_k^zu5fV79}YNOvroEVFE`xwNDA42@te}lNW&&)E+?iS->#{Or? zl@J?QMwlOR+1#pN4FwZJs_Iuks`-(#-Q>|r8AgkBlZ~pXim&Gf3~C;O)v8X|-y%Wx~xJwuEyQGwzk-l8Fo>zHWt< zPkkAqo zTPVif;fQgMNBrFYv67TPGXqASDkO*lT95C0XE4l@l8aapw5CPU>ORR8cf=Y^Qezw- z;|P?a0sGA`;sOQ_xpxY~c;tRkM#)y_i1Cx;{^F>~6%SaRtO+%~cjh@jDgRyB0rJFV z_LBH`hLKzYGL!?dX}IS5MLa*77U2a-2?Hc&3Wf%th?7t)x!)dk3~^6{{RwD>B=osS zJx06wid_Q%3lv)ez)y~rOUyPT;yk&!$5h=NVCGg6Re=8q@gs&T)=D~pjqzb?c2A~s zYM&ZDT&Osip)RkRqyheVIqTp;hybe8LmybA+J0q~tdr_~qdgp8+*tMgB8rgWS`E15 zI8-+_HB1p5I#0n3@{kiD_PceA;4-)4Y%jLx2Uof)u_|xzFc!D#!@~Zr}ztxo5UU zMM~f@%2&CL5#ffAEABqx21w)trEm;N_gIudE&}?zr8OU&}c~&}ZojMN}czyOk zFZ@&UHXH{D;Pr-FJpjc+AfT$H1nQ^e`L(3Ld4%-(*FXdOn-nTAHqj(G?)7OI?>df+ z%i9JoouJS#HE)eZswraJD5MR#Sd+j749IbimJeyQQCcU2Us;c>X}A}_@8k}wW_|Jk z`JFpEEMmm$INsp%c>N=}Kx#hSOso^<=;X*grgW-M&M%M_3QBF5` zjE-L`u%M`_yv;GfwPeDmaKyP5oP@;@j2z-x&cc-7=;vC#f;TqD212E!8zbAemM(b9 zr4>LvPhe0z88|CocH#xcxW%4!FMbo(ia zKz1b@afosa2$=yUa8^AjZcM<~h>wjOz}PsB7)Mkv+D|!L3BinT4p$sMAgO!<_Vy`0 zM;uo943GK&WCQf}Q)RUY-X=CCR6Y|(uYTacGRkV>7#XLLag2l_*6PgD+_xcf>;wRU z*aIx9`g~H5oCPB0Igy`H);Hy@3q16qD7w z5{(~o#6t+MNw5I>DIi$a0a5VrIs0an00wg{+ zx$0Ir(zP%Qh6MmQ6l{k8lg2PyFqrDF3;HYAjV(Fpk%B$&LE00l8Z#HYM@txr1MloZ z05AC?B=`qtbT>q+`zZL67@OaRv2P$SMFMj}bBGoU+$25y9(+mry6_o14bQ_kuDyCa zeLfJNKA*Y|2?}F37wYGT3FT^D6@2+#M)9;V^h7_T-m=o|^P>u=<`qF&DA-RMN^|<1 zPzN9RY6wfW>7qj?Ss?(c``$i_)$7Dc=R&1x$m{R~93ZIOev1LIE(E};aua-S&DK-Y zyxWjq2LBbgsJyI0>OW4Kduj-&GJlv3CAGAV$|~eN->B#+pw*;Ykc^r``;TIHatOIZ z-PcE13H5|yD1m^*QtM08P5#) z;Zn#VE}H4#9uNCpptY)mR1FVQt<5M#jZnb==Z}Adt$s5jsbkHk7ay2Dlh02g039R$ zYeZntngx}^HeHG}{N*^khWQk;LL1tgjLd>!G-%-q*=3bVKt-!ttBa44^s(XtI#$gy zLpRrp3uf}>K%rs@%oM}snw3BXbFvR(!S|r~t6-ohMWIbbWgHea{)dW__93LE&>Zfj zA_f?29xb38!!vnS+IJdYl`(TayrlV_f-mY;?-(~aGrtdQO^u><$hHn(3{4Hb~#B5D8+pCzZ z#uo|>;5ceaV~WpsJptC=dme|{d};;Q!yv-XV4mO8JP!?M-Pa;uCXk@}@LgZ_G`>>2 zWU(b#hVs&M;S1W0v;19v1bD$suBT-OjO(?|dXLjHWSWMMcrbSmn&lEd`;DH(O0#J2 z&;9^>DA)zGa(ktx@l8AloMoZKD%O7CH(2|QGg$jF3h4JEVr1ACAvVCR_4p_gl4a@0 zgGJDPTd39!;sNalq^_ID1(ZRxIFLQ-j$>c$oIX=14%pU)mK6qOx=FT?p`@e4_UVjY zeFph9mvU&xyxy&&2nBo2QB11n~7Cl%|be=t>UmnpYWjQKR>l!npNZVF+}fHA~h&3ehRz~7^c^(>{=lYhr) zoTg8#1DG}6pjPK0Ph=rAN<8E~h(1RC6G(o{k&VMiFrJC_{sv4K5NP3kpy~ur zdF`sy*kccam~(s#g}@||Oa253M~nd#m?6W^srIn)06+*#@(~cMY?1bTf^f6Y zTwx(+HrYmVf|kW79bj11mpOz&^5Yb`z(~l|@AhM5$b*;CUQ>318f}AmbA=eTNv@ul z3vC9KWT5zU^^pI9{813-yrf*QC`kTipbh?3c#z##U6i7$K$pI5CBzf~z`-U+JKO?~ z8aeK0+sw)7fX1kHq9#7l@U2+B2FqDr$4~X+7qRFiSwVF)qD;kDBw?V?-;M0{>`dq? zmee2#Q2T_rvCLxQV2Yw@@g6ID?sD0F!@^r^w1V>W4EAK{a=;^(K8E_pNx4g^?F2p5 zua;IpG(^Ou#`mP!(^6xX_>CF99m5Sbkz;cirYxQR3IdDN>o6O68KR_g^<51gMkP^{ z)t(kWSMK6-5KnEVS}5!k!w*;_NzF|{|FU4rm;^W z%kWodt45{F6jZ(**9_czFL|;Mc~(<0-Q)%c)ktYc##@Pf>P1@`MjqlneKkU(>M$te zm$?%B1hNLQATyGi5mR+SVyRJ_9E)E0+qOz87WQMUzbaX|>MkiquJTJO%yNz+`=E6( z!;hD#5E={g9J1pBWAaSA$nNsO28MY%HGsF%$HyMRov1*eM3Na{| zG7FfUW=sT&@Ti&52+(H(ea%@&m%yiHK_6* zdsQJfRNYUPjlj|px8*Xz;^L3F17?R9U)+!_#&6vU(?=n9pdY6Fe$*HtIt!!IXml8q zF16amSJZ2h^kynWO8^=mtlLZT45mhlSr!_vgm^qD%3IDagU^#4lz< zzDSeJ>A1GQI@)+MpfpNXL-r-j=Qcrx?QgHQhwGx`y6YLHsT`##!&``{9Azn%MJAvn zH#(!x_Br|+W;T!924!!ZBEMbS9yw~d5}QOE36Dmsx?Zc*jDIO^PU3gj+sHl zcy8lFF>G^_9hcyYZEdd7-~q&C#U%_a%V-YTaz~_LMma4ozxg(+x>Hq)BhXNaXk8)A zuH}7ZOx|i1QJ%|foS^5SmAvBn;KxS)$rVLb4@jL`0@Q;dN4ZpoMa9sUX^upd8R42EXDTfQ*?(6g>l_{ou88+=;f)2Ots4=qvGMng+R*5mU$ zeJ0?UBoWkiyhzyQ1%Lf3R0#%r9kP2;)UF(BAAt>V%I7!(ircvC4H{k2Ic@i6;vPb9FE^}IDR9A^%B)~%kqW4*~7h` z0%bg&fa*Ph6PM3T4laVeZU@~&s*XF}1hKJw3XYn~acJH*1(mGc{{!D;)$HbRv{14Z zYd5pE7UYTJ%^gbv-S!h}hQ1Z!#)j)c6&Y+fE?R7zKn@||*Bw#5AjTX639O8BlfQvl zUIS4XF$U=&hFOqkau*2ZY+|009IeWOv{@^$nm%f@Ph=jdVO-E4Tvk%CSZPK^tM(H^LuIbqEtlY8p4AgzR+6e^nh`(9M@9j* z?&JR0m^)Nywc?6XW54_{&&rkgl50RokGTeL(FiQHmcKwjIuKt06D^RloNL7mN_p7P z)nEkmura|s^eRO7)N64uMTiq`CBw|!VKyu>G{%cR2H`%pF(Ehh_u_h*qjsQSo!B_Q z@H1Y<$;E!c@!^&XIWi;+$Pp!7j^anO_^6Ua=N?DbR-+tsxDs2}0@34M@+j1##!b#w zBo`(gKv}rK;EES_&2=S|A}?VVp^^!)w}{X^{7mQ^)fI0wK=W==LGN%4fK3&=l+M+; zy|3Z?(`Z$B>=RATnp8=VliyB4T7%}w^gfDEE3AcbtQe&CkYMX=(PC^$ADC3kx1i&O zC!xJB2|ZA~i{Ii?HNdtmbSA>*cdh}DI?_*^&4S4?0znC0*h0L}BK6}V}L z(NeIBE=ZP~*9^VjX&TuLK`C?^pHFn*^Xd2SxvvwShmPU$$iq*>=_}MnUr)EwSMYWE zdM->~e|QaEPd!Q(HD#AMRBe_*xTq4N(ZCN zg~}IjK@@ZnHShOyc@wJ*lht00oHkHZta_s-Rp6FIbz;5!t+ixHe@X~>)lwvznnx`m zfkj39CEWYPSh}YHW@W%|c#@e3djm%D@0!vN^Yv?;)LcD?)3(kVV^G2PG1aQw7c&|) z3G87v{v$Dsd34^9T{hhCBD-=^{rs+qt2iA|&?l^P4YisDQ8i6wsld8@6!1SOVDBRg zsOsnlmt*ygqhr_W`s>9-3`9gAVjM1^yk9StF;aDcUkJjUJFo!E zcg&f`9k?1Zw*l-?fHmrwf5Zrw88Zp*DRjBi0AXkX2!2$>$H#eH3_2z)V<0bDep<^33*%9R) z9>&4x1AT*qOafcH%-lO0zT|ZIW>)Sh{!pqN7(8l%ww#Q7XOVNCKpju~d`9H+w84sN z%uQg;9CvhXw#ofXKgtvgOP4rKHk^e#DAa_ha=av)Oz9A#yllAO<2p)sWtOl;- zC0e=}sK#EhdZ70?YR<%EAzmCY9gPfIprla2(^#eiW8OqdErC++rv^MoaaL;#ZWtBH z%V5%FP3=lX(}GOFq`FuqsBmY7mRZr;MR8&dD*E4Dtjp#5EkG`10acbkv~0D>H(LiI zEYA)_aIWV~^0ItdFqUfO5hVzRxwvICU~(nu&|Cq*T8M)6C*x5*0v7IxFcmV{sRk48 zdD=0`9OT>CXF&p@DT;y1aa#X@C8fIY`jS%MY)W3D{pkyax79c-EKp?gN*R@4Fkpd5 z3qw@-=72)t!W>m770XdgH{d)iOcx2m+p2iBN|@jY3@EH8a8@zl_FNur+R5osK^hnm z%0yB#4(p7SAh*M(SctN5ech;X>#?8m`W$a=U+c)Gb@0fj63gGxI%oz!y536${#tQi ziOQGgRS~8YzscKf;Mp7gK`lgU8jL(8kGyM3)#4OkJu zbD9~ERok4FOz}1rx7Hz(^4G{07OAmE?`#6?56@?@zjJGd!*X#GtZaR<^p5Co1Kyz1?M!8{u*7!vEl6H80HJW zn93)=9|b!b*T5c!K+M&*g!UGJ4r_)=sMl}F0B)tLBxxb@^&oCkp&;baXH>Vknx*U7 zxsEfu*Ad;mM6K@GmMOcsTk}B+>CsYDB?tBMT-VQo*n zRIy`(dpax8^A7R(fC z$tL)c7AULae4h^JAHlsd+$5Ej?-)V&$zmhu8k02p2Xb9TeuTO5mFX~ZOtW{?OF0N; zBeSeY6`b5PL>n_It)NmDnNw%A8r6=jZ^)I_y&~W_m6dE4P8L5AyT5@N7^F(8kmDr` zkjdb(iW_ZAjh8gc1AeHq*0hB0XT|OWz$g><8u;;hSw81?IClx@vC4d$*R+DYWEgkC z+~k8F;TAFOqsCS4iAZR%T1UlQD+-D|Sr^S=H)M_K|AX2bcD;<9!)J;k2Hql$7=^!J zqugKXlbTm=<&2~=%J-%=F-xD?9{oBswTa~wxK{6#OXHx{qsFgn^#Kc9SytK)5&Tcc zvo|u#oAGtiT3^sawYu`ZqhPAofgxzVF%(KszMz#uFP?hKKyjVwoH-J>cxfI z%7t-0fN+y3RY~iN6Wh#k8lXCXmMU}%h|z6EWdO*s7s>K)CWy#%vKaRd(RNDM!yt_v zBe=oT25RQ4%;c)Z-RKP=^eDV^9VmaG>lvjIAgExYp#1yDy;-=MA$K`G;@|g>o1qe+ zO@@HcOV;#i6ic_Oju^1rTN%k^19CJ2mn(pl%2bcnO&pA-^u&Zqu#^~<0g6TNzvxrQF+&-SjtBpXS1J zp*YFI!O@c6KBMt)HWcmTvndK7)VBZ;^^%8`BoC8?>V;|GP6$ zbofBo=iW`Vi4lX4G1$}sSqz}s!w4xDbXFMniD2?L05o8Lwq8S>M4;;myyQ~+c57ZH zP~%K(`vREPXji@DXM@-qqYJE>5>nF!8Wsa)h1Eyiz+FddmQiEhfXz>k9`C2q%>i+E zM3_o`k*+C1ThqrVOTAdh;3?3Trs?|9ojRC11xELCl@oFls*qIi&S;g8)49V?4YAw6 zw|PkWpiVwHT~q(89`e4f-YOg!NlO(xW`4Blyn0VM?jzN*9#S|oMk*BHHk4o?rzUAT zLPZmki|ZwyApxPWYy9lrp|J$ehg`qX9i;4oWu|CP_-;OkF?d)&`10i}y3Ej;4>7`N@gNWHoGtI#JIY=l3~v2Lr0O0LoJ1uL z8z>+iX9^Ft+jOZgP^s>{|x9m+N%{pT-@iZdXi!%$k*MuOHh& ze%lRl$kkmY^ayEgvJT*h2oL2-+0`era)wlW+P#v@t;AV7DsLpR>okCa&cq=65`_O3 zc<8+ZQ$2YL$QC7jsB$mv-Hllp*;8TzO)7gHKJ(__b6OETOAGN?UI5Sfhx4lFD|;b* zP0Ob*OD=uQw$axWR(L)2sKp5{*~RRcPv7P}3*a4cv3n{oOxILmmL|GAX<&9^;-2{s zidp8sGsDb;W0raP<|SRT(H3BKx6;qksilrR+W-j2dZQg^fSbX%>ftw^z-@F~^AO7s z04!pFxfEgii2H)2iqW;#-3z8JX6z?CsGgzI=;{G!bzEAFUY%`V*)J;O(cwgl-wwu5 zyn&x3#<%j5NS`Ssm`cB)iw?KLeEq5cqLpm>DX}_XP%>W4KuK7gFls9f_KwBAddE?& zc8) ziJ1%THlWcP=Yq$m(ilgIiEr9^qwvo9m};DZQ70Gt1C4jmt;CqCAHjN`q=`l@_!u3( z3GuTL&_cvFjae~he{U02>En#Rr|=dk_lRT_f2&AxcvltB0V0^qj_UOJ%SuKfccfHY3%Hb)rn-x3_Z`d<~MOKN8t|A<=`&fZ0}HvSzW0W z8ZLO6uAcTYTnp~k2MX6~{Zh7wj|WU%zZE*2ELo{*16;5bE8Lbg3Ish^E(obC7Jn|} zfSKwuI$^`O&l1}*p&FofDT@QFzmO)+ADe8$WFw=@45a(#)8xEV@>H=c2a^rV7=E#< zSlDD=zqLGfNAk zZLGAdK&rCQrFfVk=AhL46MBE0qAoVT=eMP47A)#G-441l$c5g(frPtqA@d7m`TSbk zl|gm2>UT(XVR5MPycoA_9UrR1Z7~bAEV-7)leyISFL=pj6j(JhESp~#bi%xEb$iJh zG`dpxIeIhnC_fG?AaBh;y)B#WIGX><5#?7<^D&uK+d$LINE#$ z8zngzbe2dv7&k3uq7WA)!>k^a(4uq~2rv0mrTaK5C6@e*DvbT)HF!%UFv0svDxAy) zwUoiCRutK!yNYZf_$%)AczsmpUF}NP|Lm4F5><%9@YLHTx#A&L|AsvbZCiE!1}Pgq zYu4kI(%))VCif(Dv6fFadF0Kky%cf!jF~t7pU+G zt6a%y;kg)gv4c)?y*9?>YFlVEkvs``EeJ^>Rri5r!mkhA0Gzc}UjATisNzAeLi)4#_Dz|`%C+1KA3EAM z$zn+Aos5gz=sLWr$Oc`VD=#m~Uww;vG|1jguIW;Nd;Iz8Cab#1hI^cg^!-H& z1I>_(2XPlWx*E{1@?7=40`$NB9{Ef3BekEf5874r_*!a@d?|k` zM_@>Pvm6aoNbP`hRs9@&GQ7S3bBlkl61|=mJ%o;5Yw;AtT}A9ID^JL91-*@J9x1deX11TEkn7RnajQ!9E_e-+B@?}kBNP?w=+YIi}nl$R``8Q2W?1EO2B4AWM3aDDFTeS;OcnnbU=0N(*0V>28vb zZ21dnpI4!`)<-sx6+efpKK$ zLsXQnO}TNvjOxcmTL2MRiXNxVZS*J(uAz4->Ch>t!zRl;3(7Q^j)nSMLcXn7!)oh(3 zve|;k)B#g1MI72z6}l3(VqI&#Q|WSRkJQ*jZLqAJH}QFLG+?YLj_@<#kA*+@7M7AB z^!$YxunSD-T(rto!Js;fRosmaWwp9>o%}9Aw}hI|CRR>UR?1P4aQro(Kk=7TftIlQ z9QFp)623$||K-D2r``BaCLYFy?#73bc^I3z8z1`mwOgw=X#e)G*w}3V%@S9pUEM-@ zz(f`R2bH;c(CAo-rkp*D2PTJEJ`-BRTf||rFjcw*{c)$^*QMHb9=ntH_t2ZgC>X?qHj z+@AvI#$a1rbT^KFTuGSdR!cimkZPxxjVbExB0W6^x~&JTlx&KicMGsP43oXcdLQA* z*oqTLe_$B?vC4I8faYR7%b?KMkt^-k)b?OI5O-dHqP66=qdRQ!>2d_4ko=2ce`sh{xk~)WLZtJwgZNpxOSj_o;tP9ZH){ zB;)_Wbr-sh)Pi>)$dyG<2#kZR6tHrh7P>RIP=aTIhN$RH22g)j!G*p5&;mNb>W%2`PRqxsabfpu9X4d3j#qVqV6xTIu8iocqId>vdlT zk5_X&_a*(tHLr2>Lr)!IC>KLMDlRg#L!Y3#4e(-uO&}*T@_J{?$G>$`UFc07g)KRlJ5gN^JVs` zAMBx(ak1LsB;5t_2F!s%GKbgl`1oGE_nsq5&27o$G90z3D8Q{#7?|?R? z@0}<9!QS~y0F087capLmVGjTRI#LXE)l^YGl!GtyJDJ1y@crQFf%Q~I96X3n2mc9_ z4^+?tbEqW8rbrLrH$aH$oQBWW*QGYk^#w=+8tPDq#S2Z5<^^=!@f-UIedVz#pL_hM zeDp&9(4=Bgwb0bg9ax;}@p1?5OS7Nwg(_I|shcV{TIDLM<6J`qX#J)S9m5ToOT_RT z$H@jl$$kMk4PRiypMM5;mD-ZKQM-4Gee9?K83zM0Wi3iny}~bTeerUts-vN_3hH$Q zT|d=Q+%yHfLw_VYiy~ykP^Z{!NG>Ffu{kxPjIKx8Pc-AIY?!uuj4Edj|3C(;J0`FW z>z{3>KwM@z#rVXAuPI5*f6hJS9Ch46@ppkEDqXLCnI5IKpQ@1#nV}fRFxPSyZi1W0 zv1QaL50s#EE#lQ>+D>`4?!&;fd<}JJ9zjxYE!P5&fB9)3VlG%TN4j7D`^dk4uCMEG zLA+;&9sxU?nY)De$>TNdaQ!4z$Y=X@^3B>g@WWebokq1 zR`ZzSPKJ6>1qT_hdL7v4(+N!LI?dEr=0?En&VS^z=6n!R>G7_M05-TPGGr zobJ%$*_a+EyoKC7mGacCr3Nu-YzYe|p}V%=O)HQI%5y{62R$kIm|WHeQ`km4 zs2kr+4+kyV#7`4<-o@~fHOKqE~v zPr=R35n+1Ff}f~rs(CE%&Vt$m@6x@^m4)KSd13rm5Ho-%r^JzjFdo;zoaWI)<#o)P zF1zC5ZJW-^Z7HvjzQPL}aII97lMR|AAH-WaMuZ$WN?u9OjTGG5fQH$_We1xw@ciD- zv1C_|7%nOAhtGyDnpJWhWjGIz&1x_G_R~F-7+z>{+)0@qFQp2(2=E>q6c}|K3Vj@C zp``_0H+d`{`1QmR+_-&b&90o54z8sQXN~=pFj6{t zf5%*a=7xM+AngG(cXpIWLU-uD9@F|pDc)6SfI&8w+rNn0A69^5-MgB$Ln2$@mX@EGSktn&up zoV?Ub#z7XqDtTDNByDDOnWc%U2T)Wg|GTUd`pI$q{YDp;ZEveU3UWD6_#D5el1!wOk&u2Xm2iUnCci6tlRoo55}0lMojb z%iZXmBa9E6CtjR*V-}2{?vG*pL>yQlNGWto21`$V2(2n~+;(H&;Ml-RV*}yQKxn-? z=3;SCx%q)O4>aa8=#@K|CO(h=MGq*P3`cEhH7fvu_W<7V5?#nTIqG$V)xeV>A|znd z2B?Ab|53F-amD++l5_$a=|S9F#WPV+{@(Hh=-}j+AH=FbL|s|FaI5^_K`k^1LKED? z_-E+G{g{jVTLrb79(?HnfKOge0gR&n>V9h1c8ta!ex0rcKN!|BRzOCl{2*TUcLfe* zH+dQWn6zvh@jmyu8dj8g0dBF-B<`^OEx*CTcF|V?5XD z(9WXG_sS)XA%2ceT0jES6BEoLFZmihuNN^jI0@4A4wwWt)1y?eI%<;AHT7*McYcdr z4?SPunvgaDS8f8$Z3j%i1>`M^-gK8f3wxv5Ec|j0&caqQr#HD~R*GvYV%uF_Qlo0( zrssk&co?8BA(&g}(ON-|xrlwac(jFUd5H2W-a}X2M;?me3RIuGBG-P(@urXm4GmQt zsTa>p-fFJb&aWyr(Q`2Y13eit9p&8NV^lfCLozk|Jo%AhbkZ>!l)}*J#4Q0sXf=C_ zdnNgGx_20W# z<9Ndfu;jHOw*N*+lj)aT4W8Q3fcuejVP_rg`1xQy+m(TuX7yl%6|&r^8_LS5>o|2C z9`zrmnWZ$@mDt6!R+_)(CC#_t;+C;##UTW-il%r=x<0^TG`Zkmmya3v^?pDFM$yX@{Z%>0*Al*;6T8o&%W^uNRutb<*F#3J-VDQ` zPL8e};~5PCH^WPCle(u&?se6E*FZ%3!me)RMm>Z+L3o7|}CM4t{sS0a*5^|1b@M+sX0n%WpV-maYype|dfqXd&3 zXM{X*`zY9dYGBHp^k^$gV2=1!lhinRWI#V(pbEK?K-@sVvF8U$9ntMSa6Vwa;ezu4 z96cYMKb@-2l=gpiJm5c>3y%jpp2|#5nvoU=|G@Ep8~+HLacJ~-z%sHH z0MXIEhOC4yX@TOV#{($f;~HRF#Uhm%dpO`SJq3tP ztc?BBqXFkGI2r(y3Wj%N;q^mg3PY7T+6s3ngPNCrJhj}3j{DXvk zE^EWL7cTz7zm=ioMQm}q_z7o6As|M$(9zFZ$rSqSbo2|^c&h!8RoeO>D04r;PmlyC zfP7p_6Wyv~>M|dmM#kc#RB>gE2|h!olY++x>BLJX%CX`ukG%h3iub33+TZ&fZIX4b z$hCaKAbGjq7x*^9)K42g&sd7>cu+*69f-_X9u%1tsFakZZpl}-uwHWRD3!)PNz4>!2 zCf8c=GUA_VvBG5X`3JP5V;`g#ArGplTq_?vPNZs^Bhp}!TzKIF`FGr;?gG`IAB5s` z^6L+h>)PZu^pn+zagP~|gya=X|LbOGEGJdu%t5)mDrcU|ncf~;Y_5`{{7-k?U}-v+ z$v4oOp6*hsZB30MOly|Rg_at0-@mqs97`tembqQab7mv3ivnNY%F3Km%YmRq4Rm&< zFq?v2il9>{Xl@b|z)Tw0rI`UHR83Ywv)ppJIzLU#E6|tRwwZ8oj08Kl*1J)2s1koP^ZLQhJ{nOmOnyZVK#4VH7#8XH17R5Re%Pn9POL)LyHY~q8N{9LsFY5QxSmv z%H68V7NE<6c>92QVXc$LIN%GYLx4JXEF#TZ#pgCPs+s)DZKiBFeOI;Gx;)LI%y!iF zgZhmL&pcY|`hy&#Dl26%R9!_l#4!*XFdN0-ZfwGG%<>Y^9?Q4Tz>iLkE%?B*Qu zC&Z+mwfj?G;+ndP_V-s6Sq8@GCEU>@+v z=fv;K4Ob6+D1Kt%t;NS%)5VxU>@^63a(kqkHAV1cgV!74r>01+kxx7GJRr{0;J!pS zC}4dQp5~}H+l;tJH5xCe3hU;NjSP2=>2amn2XWM(2cxv`xV}DtN-c66T5z}*?j}kn zB7h82zkduagttKyo=;iM%m8rPUpvQe+pjzI{vTU5Jtutuw{6zJ)}+A5?pOb3=iWMx z{3Bi(92vt)Bk!azr*-~AUaId*@=|^{#YOXC*-H3-(wj z^b&3h?RyWOPxs(6_3c@g&ipjyZQ#z61 z6;*9I6owRBgAcxjS9agF={$DtS9lNhpksu8hdVGy+DB*|`snj@`rM1pC%WNT?>Nb| zJc|c-jWwoo(xGP{u8ij39^MAgp(Wk*Vtmb3jyrIa+uzjL>tw`k4!KjNxb6&RaQj!voMZtlcxHKk)u({BtUyW&R*BA=KQxxd!&cF@H zqarEft3+br=NGr}Ma2<57Xn;xKcr^tL-5`Mcm;L{Kh3?*r@jrn{{i34^c%;1?_-#Q z2780>SucKfxlk;F#5X592P*;!gH%6?aOi1_>|KRtkZJmz;Y{wp8=(reQ-kjBqfX%Y6DFa4p63V;k2plYXq>S|;Pi zbI2CZUK|RygeZr_XfM-US$cPUZ-2Vp>@|aTg=;l0dCbC z$hqJrU~-5@3uBa<5R=B$G9|IrXlLjU{(23)Kv>+H>HP?T zLzDqakWRr4W|VS=n6YU>x*jhdq9uXgwj4nsL7xv&s6wsl<+TavX)Kg$IcG+pD`f3{ zCI`=AVx;(7AEnAZ3X$PX#>g*;d6Uu z?`bn0as)zu4D|=9v^;_JCh1(uzzAO2$OT_9BVmyt?Sqxc`t9o+BbA;V#fG5v!=a@OuXD^lI1c-`0K)=$tEgN}ZGT;Ye1}>m{0|L1>NCL{IOvcyeKM zOi&NGDl_P$c8#pa&fF133Sl08{FB8;NBN`oTNAQSCmmv6;B{o9G<1{G_!}a!KZO0^$EGj(Y}M#1cTh(d=4EFcU%|xuUfq2iahlN zy5b<}8Y#F}qpNK!-Q~EFsUgFRvPtun6{CRhF-%^Xkb;kocDlL`M-q4VsJd?;#U2pb zM?o-$&#jg^E!5MtQ+^toBEDYG{22;Zews*!10&?>=+G-yhpnlp7Y|`YeuG066DES+&&L^4HxMmCDPLmBZ4mZJMmoEjx_kq9ld-A zC+cDe)>@>}UQD)&W_*$UZiH4%X1iT)5P!Mepzo1v)xgCh6Az&@V)zLv)i%lXdvLm= zaWyhkGi5p|KpU|SNY%7EfcAa}-|1Y?aP|k)T}|kwT&Z6CcXXu+ z-N49O@#v3}IRtK_IWfW%vND=dvwsa* zxOSKL=M3J{g4ZVk#8smZ+fopCb%2km0gjKi3{UgdT*?|3*6m>%OBd@t4nhIhc~rXySF6vci(yQ$iQy4U8NGzO?&4d>x!}*46m3e6rdqY*56PCd z&=n!Pfc)db7*QtJw&aq`QBcnxsL8(`tfT)|ZYZC3;SJ^VcOyoB48+AAk5{GcW=4-F zyjBUfmlJXtx*@sca$Ix63zXd+kNN>RS48>60i&Dj?AAP45)e_M3UPNpRj)-D5PFw~ z!02<6zdQ9GG|QtmDLJCTe*Lru^#Q=2=o+LyQ}_&^QWRN*3gBH%K08`B6x^M%`W}*2z@b*sO&niVh{_Q^?bvAx7;w&a+sYrRb z)vR4#7ggy+Q$(Op_(|6>dXnz?)1RlmQQ%ec<{YO#gVW*o78ii(qV;7tJpF~0GFFJ| z?|x5lTWF0Drk@W#N_s_PL*63H8(Y7&F6#06$nDyF(8}i*UKYkr-^=n-)GaI_FyNc( ztwY1O=vE`8NtLWrX&%D{GSj?(9(KQ6+-5TgMY1!uywLKmlli>zOYoIbJ`-Q*<&5)5 zylUr>*AWvQ!uFpPo%+QnNjE<)xv^b4G{?1EgOkyUbuf12h_B2BqAF|+y^Oodj#$Gt z%@O()*=*K+sD#dtZZ>#=iW>Y0I`KP;V8t8u>|tkb4~;PBzdu)P^~iO%Nh@vx1z9}D zf~gC!fub6D$2xIC84HuOwfP+4-~N@%$U8QaKf*9!AtP3~0eA709p#TD!+7#Zxu^W+ z$uN#nrLO#6lVQB=Sy@pYN``S4Oj%U^Xfljz<;s=izet96VR(A^KBFEEVK}G!B@CxS z7*~GPEgJ%?dZI?!u|Y}42Cl?F-EC`AcWL5@p)%@J2?YQ5lR(i@yb%abJ{`Wf+X)uX z!osa=OPIehsPaV%X9^ki4zP|MkI3i17;=-?Lw3&pn^k`$!Thl@+ z05goVg49UEi!|xZ#zJkJ?ZMxl3h`+Mn*B>U$R0aQxv@qnM-c(#zo}vHD0VMtfDBDI zzSiLQGI+?poTlRoPeont1xc`MTJl)QGO(OYXV4?LU8M*}`BOM<3h3y%?1x4d7Dy&h zsQ&MbuJHd({sPEKx!UHjhrLp|{C9b^HHJ&}czr9MfvbKl)+|i`Y1Oo7rhxYlx)LwW zan#r~FG7RlG-n=kFNUK!NtWZ9q37z`n z0Tpy<6||`a`>CaPQBCFIrbX-cb6DF;ai4Jpy$;+Osx&k$m?@a$ekB_(I)G+CBcKh( zdtr_le*-PtxNZqFs6+S`+X6kvucmcmp$a!G%;1*=Px0m4;jkNkXOT-5X^qU@l?Khz z8mFd@wp7U`Bjp;12@)V_wY9R>i%RSXKE2JzAjL3)tv83>3B}f}MOd+rQ4M3RCdLb5 z%ckkPee_-ZN3af;Ou-XSt<&by-|m|SLT)#*yj02nKfug_Yn2P~1(PHsDDikg zjRPc;{xmGQQm{}yhQu;(&DK1 zc--msc)gNqK$|t&_yul~_8~o*n1ImbUN26XsxSahIBDX1oggJoYS*WGbcqk#nW2BD z4od2mOX2b={sty8n#Xr!#pljfU&SACcf|PYV3f}o>fD33TPYj8*lsn?iTH$sU5KlB z3lU$xc8C<;3uu`BIzZlhTJC_|)o<^23<>FnZwAbYEqF$-%5B->mN87E+m_WY(c52! zPD-U%${1IjzWLDEgDzW>SMHZ;Pq)^NNVV~p>zH;aL?@pi)xOu}Qf**=yWYbw+FGlI zT&LY+hQ^9q@S`;RF?z6^gD#see#m8Goaqey)X{0)+*GYL$u67NZ7Po9?X%%m;L*e{ zt>WiY@rC5*LEIx3b5!!&!Q{5eH+xXW>ivlBz6~f-p>7})5G?~}`?L#SoQg?WJs`Vs z12(*h;X3%c9R8-kpG_oA;kmNa19YhMDbr&vyrYXz^5BE|?^@x5nrkMh7A9BQD}b1p zb(H>`rH>w&azu98`8mMQMff|)q_^=7O{chdP)sQ9Ni@CVQWh=pdOH#80ke;`-y$9ChvROK1XbGBMd zdCpd=EJ9yPDxZad)8tOPq&anYI{M1g>;mTQFtjc=n!lG$FL5>&H5E3sR-bR$c)qH& zS`~H1 zD0E@$i>H(N@05D6v1^JjL5@9n3#Lq7pgCzq`J>cNdh%+kxm%T3msH*DP-b{juUQ8{g@~Su#4j5`8Di;9-0!2~K z)CdIxLO{6Jp;S;H#Ve-GR#v8#jjx$QlL~6iIb?&`;E>iKDk)9T$o;QpopUY+1hc;0 z@BRM&{|>CX_t|F;YpuQZ-fPdU^eeQ&Ybto1_e2sNmZCXlOoc1dS$?hUSi+OX-oO^$pu#E-PylzWF5I4D!SJOkOJZa==S`a7sc6TK9y^of< zsQ~LtRSZ5>9XoBOlnSACmbr6Nd8RX_1qWTFA6pypH|jN%fxNf1Dx}C(Sr$)(4FZw2 zwsC3BoCE9%vjyn<{21$C(m zIFb7`RTU)H*PO6k9OC4?$m7nat9hq#eLd>)fh9R!rDa|vr`+>S=Qi4xH|Gzr(8Jb& zYxA}URmY*{u6Z8j8a2sWu1RJ(imhIkq`9CfA<^lK8isFzYl*6gY81y(lUeJz+}52A z)eQZVpU{ylTZxgEe)fX~D!2wIa&1Z)N7xmm$8@xM z#k%1(4yA)Mu3P0h1l1!BpgenE{Gz34vlFh~ZIT?|Z1ccY!|l%H-;twfb0eS9S}Ro5 z)4ax@8cNyo2;U{5qz4EwQ9lEq_W5IX^3iBvRepPv^>#jg%*!6#ZInIQdz8|Gmrr0IPTR={<`3 zOt*W!T@>l-^Rg45t(|6|9i--0l4$4md9z%BgU!o6 z($hZ5(|@Fg&5cRh5i|0AFKWrl8*3Ij(z@HDDA={=e$O!@qsNY$IBq<3*5%beuOLIyg0kEXGD0eL9@=UggOGqXi{EoxG9+f;?c2H_R;<78? z>U58QO4Ixous`-PuN-NouN-L}7n}dRDgQfDz}0)>ZEj_=`v`GqH(yQGqO{C8|FjEr z+OuyzzeajLzVvYnXS|1x`DL!zo}|yY?2+Dus~@9$^)7yaJ})KH8|DUbJ4xV5FP)B1 zFU@_?P^X2%oE8mrrf3%qbI#x8lE0fHKj4VGIK0{~`*Ok!(Yu}D>m`S;rK+F&UGRg2 zEA(}tF^&afSP9Yz5(y>{j3$UA2muWtOU@L9JbZ>sg-nIaAIbcY%nC9q$h<)21u`qi ztR%CF%&KBn3=s&I3YSWq8xlmXCD=f)2QJi?ir>3qDKIqJRq8bt!m$QNh#k7$Vr%cJ z;@SRHS{`^;=RuP{&abJWbh|%^bT55Doc`(wrdQ9C%W9tZAWwXs;5>onr53U$5-cWI zG}NWjk%hxt@_%OTon!8;H$)BGG(XjO^)vb8Tv%xExzyl~JXPn}&o24rfU;>mx|}uR zK1nzz1Qi681cIDB2)qb7J;`~~j(FXU%vNN!BC`dVEy(mD(~C?`GCj%kAk%|PS2A5| z=8ejuf%F?fFq$CcNkiTYbs?+`dBN{B^TFs=Bkvp+m)cq?7hiLX2?su@ZEdJ=n`sy? z=}&W3&MiWfi?ueW?@IYXK<`CP`K8zoK3sLMo#TTUi&uLa47<~NeAnOM{0ix}J-?JR zd|dUX*n_Gl@nert z)QMkGPKWt7fnRH2G!9FG)n19~b_=Dod*PSXZalKxx;W~qk!haAQ57T8oTBAXobz!p zw9?5&9VAjo&7$0IC2$D{Rjjx3NmAC1@-X!p5q4#W_Qj-r@j&kdA7x*r2X0>6cAkNP zf{(nSNT0>|si68&t=i}GZ+b;n6U5_=bNX@Yh)ugX@oW2MxK+y9fSTA5whKhn_dZ9^ z{1&-3!bMXUw9!xQ-;R^}6JM!bP57!hY&^z;mvX6FZ9cYn`H$hPHoSKQ!$B%C&6V37 z$mBf6I?LDUTvBq8bNOKdR?g+0*th5ZPD+FQS4@8ZnWh>tT?v`;j`m-Cel>0OY@l80 zh*MNXSY7V6m1CG6cWq!lci}8P6$lY|*`qwuqLYh4BCd`t!#NO?i1PGW2PI``Qah!b z4}h6@TmEI|xt{r#U2H8@dh_LOY!o$7UzGT@j$*m?QLR|k7=clReM~F$2Bf2N+mj|{ z-xuD$mDR%%u-|quf3LJ}_bCkv*gnU}QWV;%Xkw-RL~mPT9)ia$zMA*(>2;V6bNx^~h|%V)-WFX!-8l@Bk0NLN7RpQ7EtG+dTPW{3K=jqRg)+WK*1Clf zS0%a>O}yYg@q+dBIPO71Z-WZwtsZ}Nk_#R75yix)9$1(BjAww<BS(pE`HR2Wi0d5ekhpJ=wZ#>A92kTx@Kj;f4{0c9;QK1US9DN%Or zykAg4>^u%Qt~lw8;|9&bc{Oj)^uW}l*F)GY)~z_S0x@avRx7*F%2~e3&%4H);ods# zJ%ymK6tpu+LAz=xFhdGjuoQSzOF=tG0f_*{A9LppoF^-=$E1%j?*sN-oA;9!T*E%9 zYOU`Ty9P$5i5TVkqpbOXKcEB>(2m*I3|q=#xFfWhm)%#!D7P%qnN@w==-9kEnDuP| znB~pPs>P;qo{?-<7n@?WgB2&cV7A0n>4aFOdnj$$^i-O&>7_JgvxVZqW-I0Qd@}nf z7hp^`D?hU7t(;-AoAMQ#-IY(+^i>Y9*+<#QW;^8rHv20Z*c_<5o(~Kya=JxX$xb24 zayG-1Wo$+&MQlbZ^Vl4%%wlt_GL6j%N-CT8DG6*QD&yEpQAV5*ouYB${Dsk1?v}V zeHPY(Y<&UN9c*0<>pN^+3+o&69cM$lINx!y!;@^qu@K5)wqoyyGLNkQhCq40I7>j8 zK3_u_(;7+&e?Y%mnaEZQYAB=F`W39h*os<48OT;l^(npCs=(TXtv@pTY~^z!yx3a7 z^t1H>(~tYCHdQkHY~^FY&af53jLH{m#f*b;kgeDksO*@hp^WWu%0~VG6-0TJtu0`E zo~^B5eT=PGaj6us)eP%gwtB;w!`5!Frmz(k87mXn>I>^Aw)TN_7+Z0ljWUp}17YpW zRtv0M*ct+BTegP5>ZPL`i8p8d5Dn|4JXmo=u<|2Y$HIDwtrKAVjIH;sV*%7+#)rXn^l)q0dCQni>vC=F2HTH z=JIPUyO;yq#%eAnRTu97w+WidLDi*yfLoU4@`36yFu={KxxA{nSOVN;YA#QyE+GMK zvo)88RF|*-w>-_o$}ZC*1Ns(d)KAJ)sdx0JW3_2ZdhBC7(O+Yekmy)=KPS>F{(niy$e290a;^SZ|6WM_@bPrancb)j?l zX;Q8#7I`f6Y+xzi>zU3|kY>A_srWu$t>W!cZwacoU&IxMv1`|h541ZEaI*Czq`C}9 zaI$r7bjEsXsp2&t$l2DK9GeYDaItw&uOffDYojx^kL{$9?O58jPOk$>+gnB|E!i+ z<<~Xp*#o!cUp+Z}f2?vE?@G7ls!tLGSCw0y!$hP$lDK;XX89VFpH}1wqx-*9cl+-0 zeVUGniPM1n)2q)Z^vW?Q`&JlEW)Cv`E6OW2&i;%4L=S6YP_gD0$l)=*vDrha)Apq9 zw+Q$q$IIt@Y?^R65u=>j&+R_8$mko--#OEUDu?8j#;qIZzoDz)CyNUEoW=UU{`~7p zzy5Q)SRsA00oHcd+AEe!`tqawCwDtztK3edd6%87Zh4oTY+b3daOnspz;9K)e^%X#bKu$P{jU^#*{u}!#gP84 zW~&L;zv7JCk6Q2`c&sw}X6@pUpV?nnTP}+3vvACX zg;Brd-`8JYU*Lu4^1Dr2OQV&ht<^dB0rp~~>9gM@%FD0B60pbg&>EhPC@u^k_n2tq zkyh11?~jmP7%Ul)^0sMCF{-C%CBxt+gKuJwj!ttcj=Dgd+TvpP85u1%f-EhxsyV9* zdP^45QzGD6gC@i<$=q6|F#~fxHKds650@E$iKNl5B7+#;Zn{ zfvn3KSpoLPS=cw<ic^4#ck7t+jX679$dMSFML}S1p{etM(igTey!Sg>8XZ-B)|>`|7@0FqF8q z*uc>}1|C;9cwF{9_SJ5!wXZfTOxstxm-p4ed)Zdrt_rJb*?NcFsq7`*R|`AFZOWc> zd~z^OZKrwki? z%)&;v_uW-l!JgdByt8tQz9$ze60MQECzpf=0^|`EMtU4|3i7Zg7m~>99=R}-#qjQ0 z5UlR5eNNQiId;cXf3`KM{$%HT&A%*dZn(Q3mn1;-=!HWqt7YLNN>{<}7_66$-DW3w z3mkrTv+(o2%)R=KS*WvwcP@4izKumtgg@3M+Bw!b60-W5HV>;(&sr}oyzmF_0YmAJ zR!p~OyJ4;EcXRpUm6FXD4Xawn9(S`pII00v+{$JlId_LtQ}BW6zSzEM+Kzp(@NI3u zYLS7IKCVK~`m%1Wj-9b58Kv#GG`9?A>+{aoe!Qo;qqDX%R_Z%r-{#d@f%~4xaK4GV#$MU0_F;-&b312b5$UUSAezZX73dz znafYnFSbwOJJ!sUr`ek2U72E=tU7Tn#rd-xyC`AK)z(TC1Qn2i@%mQVtxkF-?B)hu-Ehl7qh_MI;kNHpj1Rzr>&RV& zpP+;_&Bd3kfP4!kP*o(js88lSLkIKxeXV09mwr3{?sD?Alv~1izpQ(H ziF4sz+pj(>fk!IKyK&X`LanN=+&w&xe7jkAH=HW1oK*f6ltbeAJ5G9W0~`BNR$y~& zLp8g4l()gTzS^5lxhIbHY^J`M)lB3i*xYLSaKt{E*6|d_=xOV0uPndS*t)DUk5F3i zR#?1A-ZXkbZbT^i7HEF<73`T4p*ogZq&C0l^$Pac_EfE|6!{jUQ{GyQnlxD75z6}) zYDWHT{uZt!)eN%Q3QOirvu{*cu@q%+a|2lnOLSTTjLQ@kF2qazE@!20Gp%N~_48*} zYfrgxVQow~45OLDNh2;XZk+9<@=p21j7NDJH2{_GlS~`?4%PPB;zi89QzOcHyGGPC zTswWf7T5B(pd#X}wy-FlOhLDl-NxCud0*tRkad6p-0aGQ#qZ*x!)1xgf7Twb(-szY zQ(^IiI#q17>UONr2%oI&wEb?qMSQ!?B3iy>5z`2^5bPx|k$ceF7NMTE>FTqmZONs> zo%Yywb`}++%I?W-WG@}}m|YaPdhh7LcUOz@GHn)F8;vart+a=F#l=!5LlH9wjYD!= zz;0VJ<*fyJSIWNI{&{%>@2agD$s0}hEG5j|@3uA9PZzT`j8;}*g1G!p{f8(~Vq=In zzKJ0ZeagocsH^@bepNK_B(^S9UbVGT!WO7K;U3jE?64nIdzmHF%XHIv%x2A>o5P_fldxh59q@F-zZ`b@&)MJiT=1i~EV{TXDnAFeJy{<)}UlolxS>9S% z^^hZl*B(;0CNRo1yO>|u$DC9e5HeV9rMx@cv7S}EE}JhBQlc=bZ;$dQ3c{iCP4dG% zJ$482F_q=b=*6`-s0Do@Csf+@Admb6S5f3tz1tEjGATDX5W*^016OY1Ub}{?g*sE^ z-(0)QnEKsL)bF;`wE%^$m`5is&Q#cs8{|%zgz@`&Pp@aJa#N;uU}wizr9o!R^ExkP z7|-jZZrzSW7H{v|fzGA^%*DnkpJr$$e^NwyGpZxnl2J3FH|mMV$yD$>N3_@wQJx_p zYpsY9uZifQ#Wl}5kry*xNOQv-WYNk7PhGWi=L7T0C;CbMITdq#<#5-TH`yC3iX3!d zp@+Sxc8q9KV&R|*vC+!lSF|Al>z-i&b1G&ZPR3Pq=KP_qS7$b{H^naLBB%TY&gD&T z3_b-&@#NbT^g^B(k3z2Qz}n;Fx7XioY}+7#jhK$5a9*4xIB3+`(to0t)vNz)xYx!b zV24#*x8zrX?K;}N_qQkWzIXqzEo`@`o*I}oH6>rhdv9>h-+s_-+SDLg!BjjSd@~0d z<`=%st2UkHcJ`0*nr-&`*ngsj>GAEOh+iXP(;CVwSM~J7!V>b0RZ?C793g_Wf^7npqNa^*N=EKB7>2I0A6;*DV5*=GKxCQsb*@X!U3q@-&0qJ z8#bnYsutFXhLs~&Rj0f%2`Br6df1~X>_u2(VA|{&)ESy?T`NY^qwvuC88_~l^NeG$ z{JU|9t(!fPZ^`!b`}oo?q;7#Hw_?vGd!|Q0pxdj!{I*kq3vkz7Jgrn&4X;7 zmyVOJbzIo@*^k=4Ksxts_Y%pbb0s5VaFno#+Ra@1_WaYirHZ@tE^U!!vMJYzAjk_p zX8ic#$AX_|{M?71tl}alx?#4%g&$k*vTrX{T&<>Z7ixA8zBt?~%yu#Vw8`4ezTNN3 z(jT0y9!0H-!(Ah6mH8)KtPK{n4hpkf89#Q1{n({1^LKdp9Q7+1Wj~sK8sD6PB5YSm z%MpfRa=qJDc~99G;&56c*>WbXWW;K3$Ifp)&v0%NoKvVQUc*<3RM-Qf9In zZl1#3%y5b|oKtPZk$yMZ5Blt}xurReEpO~sQn=T&yreipI90D2;QjUG-f?`$-2+?o ztx8_@1|%FaaXP?lSTWd|PZ^*OpV@c$xFJkwrSqj@h^P9!yh3eDT1dN7q&~WmNeIB<;CZD-zaus^5q^4m09s<0kEODrO(x9Wq(6lNQ?ws@4}JO zKjnA9X3gqVy+3;4HftOue<5HO@d3*hw6VJQ`_)NNDqv+)-eGmtRwwOlKp2m^S;B%m7pNNt%`najg)?rBdgeDmu==s?2Godd0PDfc3FEV z4{xJyd~yNK@h>cy6{oaji*>lNBv;1+`&@Avr@yU|L=k%wciGyexhe_I5v8jtIBM(h zB42-IzpXia8p@y4RIS^JeC>SV0wMpl4>p`s9g#(IDwLsDnTUX^rp13?MWCOl02}*@ z`@ApvDI@OX6A7?PkheZjom$isEvu8?MNlv!&3SwbcEUz(p|o6fL@PHx=itdb^nrKD zYTx3NVK&FLif6ewukhPj>^h8UPO2zec3k?R?cPgAI_()5CtGG|*Pi7^U69Ixxq77* zr+hFG*UZ=|txXa4n-h7b;y9u%^g`Kj&@$Y0SW#0#-@k$FJXYMuKvVv3lnB>2?d%87 z=X5j*`sx`|=0i4$)<&4malUk-c$jm*ZqwpIigAz{#{+!5ovRkdo)zkDt6ipo1f)8q zs@U_LqGm_P(AHY7Z#0a zQ83!+R@-fSXy{Efs@P7UUfS83F4WG{S=YL9ZJQ>Pr)AB$yH!jqt{HH`x@k_+I8f`i9I4N2kb9Jh`yo4)lvcva5uu*1UxlkAH54Ah%78EV zxMU?}Hjepsvo%)w&DOVm<{y+)=*zbR{GK~)HYJ;Le@u0==SQ6g{cw0wK?sD2Tm$Y` zr%ci*YV|tWu;oRe6`i&hjk$n{jN6sZAJn5)PCQt>WTdD8;o8Y|A^$4HhI2(@ctfm$ zNcWsKCiMj$zsvHYUe}?`PO#oz+(Mn>X{2i1E(aF{c{`WHnKsRGHEk_X2UU(#&ikG3 z)rcmO9IQjg#BRde%y6X+zSITc5Fj3gn9m$`^4$7br)werzS6m?Y04}^vOitdL|yH>%RSXSy}k*2%sCd-@&3se>S{IKYmGuxJI8Z#(A)QHGGpCh zmquq6xm&w7DzSFT-{q9Q+iAe}*$oDKJHy%ey8*k&wu5ZD2As4t#+lnk{PqqwX>Evp zj?8wx^o6~2JTy&Sw&g{t5C#u=mp*CiB7hAw7TQDx|hUTU#V-< zcn@}u+8W}h?n|erj}mj~l-5n6E{}_9JLPh8JbjX#4^SNc`~1J~q+b-`0fNN@PZMk) z*iP^X!H)#4mxM4A+({5da4*3F1WO5CBv?Fn!9|@`mysil0O%O?N zFM;(6Ca{HgieN3l27>JbhY5}o{7T?V`bjGSUxI-I5d^UW_YtHM%q3V#@D#yXf(-<_ z2u>1QA@CwRyAW6iq6v}-@(7j?g#DrN)Rl0nB$`iGs_$#be2k!gAe-PFf?bu@=EZlN zEuuKuA}kXuqStndxU0b8_;&Imi+Hk&<=Q~>G;Z?qB$ya?j3NlDAUGpLaAtPs%v5W1 zcIM=yoE#yhiX1UnWQuH&M1MU+qDZGdA-Yj7F^^y}{gF2@MvN9iMGw*6VDByZiAWL3 z>5UP?MYsqSBSZ+h+)clu$Sst7_=!6y<`A+)vfrWUIYYCPl3>OpSz{B@ZEPQAum`25 zXHJISY+(}_!YWb;(IVrnpCl82U5%QNP9zX2Zp>I=+xxQK%>p z#6If!j%O6n=}T1jv1$lIzd0PsB;xrja!I5(vgvDvm_lzEY^aAR`@%qZqdWrI7cUGT)Z9^zysiSZF#*@-1Rr}Zw6C%{c=`Udj0-JdXUn@ zznNZNM|xSDQ;2su`Ol_MHjbmNlB1W!>KOI-`uq+2<2lwOF_SUxrAd_fhMd!L@mlVW(IH2%LMFEvw2WPT@TvFq_xmqYM0ljWfs*P|)i=Afh}Ie4o|!?oqn*N{Iq zjvsueGKf5z%J0@1`1u<0=f>krpx-IvLys}%8u|4#)Yr+J2Wsh2TbwLVe}3d#}nuRH4v>Yv%+GE4gt?B0vrducADld}dasC8A%5H7{4-h~p1XEVOJ^Lx-^l{K^P%*866-0|Jdfbk zyV^y?SI1GuOUFmYK~GyxS50S@BW*ohJxx6w#FM}+MmEGf!nAmF;ClXEB9z+n5G&yPNq$JMV;hEDN_7Rh0zIhtEsQesAu_A=V0+M+Tu*dfNInF&^eML76}Kls6S;pFV% z>ej&BqhX`Qo=uvXyqewAyhY2KZ)w%KP1|<2-qzmSp<^fS&Rx28yZsKI?mc?;^6h=6 zU!T7H?&|M9AYkC2!GV^bA;BS`Lx+WhN8BA5HGD+$$Wbw)$Hc~s9e2<82@~&)zb|3Z z=u;%|X`~L?#*XC);f42lURsY@SQ$qrrs{fpC@UL0| z{;Pj~MnC>q(4Xp*Wa8tdFu4HXU=~2y;Al= z`Hw&Se6He`U(a9o?c$}%%U6D{`s1qnFE<4BSM)d35d5d<|4*m?Z*Pd}|NcLM|8CUX zX{^waX|Na>uRSK-jWvGs#BW#MGi>SUsugFvH^8K{mvCty z8aR8ohK7c^;pyv3eH(Z-_m3Xy?ji2-^^J>mr{>1YBzoMJavwcH%*>iej|ce>?!v=^ z3=jHq*ZI&OFYlqed3lt8%R_k&&ChG$=0+(L78X*5`TFKX=Pe}P-MaRVj?1I)lt^?m z4w^D|%UhU7p#&w9l9J-#;XX4fYerU9jrcJmFq{B$23W^vBS!k&*)uVnl;~={j82`J zlxedD)!`P0zJWT*kzS+!sE<=d(ie4%D@E&*4Nb5nq?<#tvoo{JsTtuEb^2{{-NzS8%DT}B~yq1jnC24=eZVJ^l3(O2+W`0iO8H}o=j0g z#>~l#EW4#vi=KI!Eh&3eYQ~iMzUL%at%lEHYQp_^&9NpDM^ZD09jQ#R?xFfS@w_e% z!Wc(Vc6L2}@QkTrG;gvtYGq|NbqrxL_Y`x4I&-3r)N~b{DP#_r7!6SELQKxgux4kb zn^O`p64R5iuc5CxPp2eVDN9qW=E<3fN#@LCbCy2W)sx5Y)c$xcPBWX#Nt|*oZR841 z=*%oC=xS`L6i{4Kr&7vhk_4nmJnY(&opH=aNwp^B zWF<^aGAATkiGr@ZY&qGzCZ%TdO3IktRS#H8{;FjYDUrw2?97a*Nf}m0LN(G#%AT5< zk-&_he56o4rr9#Bls{AwYDQHT(gTUtHKjA2$ELHzU@?Kdk2XZF#yca`ngV&ru_k02 zoNp{SL!L3Mnx8s&r_-gDXJcG7{3a%GmK(pDZ8<<|%;=##`d=Gw*G^r{2^#j0lo~PD zfk)R4U5U2z^voHE6rpRQb8VRV`A~n zbynEJ$4t*Be0o<~D8j)5CZIjdnGj2vI%@*8xoB8(Cgh|}%}P&-PuJ?}35lsW)(JDH zwa7}GWK6?1gzD0vLL7diZXB?Q2j(Z5slO++x77GvQtSKO9WB=lzp(rDzrWM_`rmi> z)%?DvcKm%U4jOj$vD6#Sqy4X+PJ;p0{~i`l^ZVgi-`5VT`F)|`d*i_t(SGpt!}|wc zKmGi$n%|EZzMr6P-`4tGJD(0j)E^$^{K#tFEi>3_`wJOf{VjTU{rtWVU4MGdjIxL~ zM_r%ZzGG{CKTzwt`-JO^pJMsA5mh$jZO7MH2*IwI4}4F-cIoqZ6ztabg<18GB%)^{TxxG06!_iXu}dWn%<> ztq6wxoTPW>gvdh3FjgK7;fW^KxP(;e(9G-@YSPn_)Yw92ikn4HPEP8S3@wJynbk>& zd!2@I1X^E(Vm|@AK}awuAdan;dhP8Na*f$QZdCP%9d_T z9Wu+BG&(abH8CkTB_Uf(Mm#Z4QfyfW7AFefGMaP)l`Z0Njb2Ag)RRh7LnW$2Q_eeU zeO2xlkp|(c^>>336SEoL1>lh(#6XwG%!EXZrxfFPPzg##&&o;?J>WYyGb1N6Jt^3l zovwz;7E$bO%g!c6CL}eRkRjb84l{wl>6tl6TI6?!jv5{ssrLjkH2l>Lb13zb{hXtd zlJ2kOa2FRXpTaY;Y}Rnbub*>tW{x2jCIUal>q{aeDTn$Dv$S6Ln3&K}dU|#N#*HGi zXgX(23@KA_BGf6ynoa-V6xRUuL83T`#ZbhAMaBh1hjZ{&)%mJYL*Msd)(4rNnVLcB zsyO5vmXwgi%iP3%wyR6peiotl9!x!_)X53yF~lC0Lw}dZq=e~7*SM#uxtLAT39eI0 zM_tEcsJ)=X(3z8yvfz(sK%!y|cwhf#m++jBq)E0ZQLk}u*7PwM zq*y14BgD(}BjWfWn? z$%qB*k-#-#XmyuS4M&yXajvcE_#m2JTVqkVZ|0^~MWZtv^^<%ifgizRzjjx}j2hI)c>xMm@ncv!0q;1DN1QRRi?Oo)%! zJ}ODg^ruzXQfnaM<)k2@A-3dX>T^)*L>$+!$jly^gt^xwy)+~W z64k7P>?8+|oL(OcYeQRv^cC!{1rb&y}OLN0|uA4M~dk4+Eul63Ky$5UW z(OQ^MntP09#%b}7)6!1Y+@}h`v*TF9gEe5;8mk(|K+*#b0!<@B3f%U*Grtj~n|L-!OJ^z=BLbMy{Th6W?tEqvz zZ~mjOK7t7ZV+lqRL=!|3gb{=g zSP1$PbSLm8Xs7vaLEuT?N>KTYMN|-+Avi|x3Bh54odoL$RueRIt!|T^rT51O784W@ z%qFlBq!Uaah$I+D(2bx4fh*$w+9DK!lLW^I4ioGlC?R-(6)f)@y$B3Me0N03f% zAHitNe;C0)g6;&Z2s{Wbd`0mR93wbP@BzVN1bGB_{#|XUwNcPN`tBsI#TEAu=}+`2 zqVX){_4gJrlfs^C93)16YvJ}euaWrw_W85*ZO*kG7wyr*gRi5AkNRVFd$hGN{@VSy zo*MX4-bA zR68CgUa65%hkG*p=GEbjbf2oj9nU(002$p&>Ty3@kNe4b+$-vFHx?G7yH`E#=6c+H z>u^UKWFhzHAx=Ue^NhBLu79YLz-4p#`+Y;5#9EK)caITHBE_xxJ!>?5?_B-f>H&K9 zs(vq7ME+f?-@85R#Cuot_oeiXdu;Ugryg+<_ZZUeCe(heg|XIG`qlmP?AcQc8#YYD z#l?x#)Kp=!+0+cp%cK81@zhgKiI-n~S-ku1yP~9|M121F=i=(st3s;+^4K%I;3h!o z&^~-1&r_Io&zNzDUk}N1Re7FOGiJ=54G-t!fvQ9Dz$N;;o8CR>zu4g=I=9RS9ttLf#ojkea0b=N`y~Nu2SD~;s3y)C632f6>8tOQzLfSum?VW8@T)p>`2@XP#COJj ze$}D_RR=C24!mC-H6fflRHak=^zQb--WIn%d*Bd}kPQBK9D8G4^K)w77SnSce-z%? zEb_o1^064~@~C>{>E8WS5By&F(V^8HUq8Tp0p$K;&_G#9!Feo!@ISa}^nuE%LwP0a z|B#e_jM-LM#h>Ay_*?dDrR2}de?+0EpW&a+BRQsi=J**mPfd;&YLEI^RJAY3J?WAc zNFvbQ04@Yhc|xtI>H#OspD|ouJ&;Qv^Mn(D3xPX>#DiH6%1z1J zMDDh8+mi3k6uFc|$=jsN-Bun?l5l_S&%ecQB1`UbXU9wVd-9yUXUB{gvn@HY&ue7H z-ybn;gp?cO<=mpK+s2QH7rAoPwvA&D-@8i?f3B22UAnYRuoOQi#N77nrI&kqDO@xV z*8$y+y9OqePvDV-`Q%YQlj!N(xwG)`@e#hhzGBdzK_Vz9NQ8%nGw()@94TUBW5u{} z?6UE%bp<>FEDIzT`O-!9SRb*#pbNw-A&K$AQ7ARhOV32rwZh*+25-JwoA1ofr z3=+>|Tg3bG28cKE!o}0`CW*~YWrMc_^;`tFlr;6W)S zd?ZEiCsN#fT#At=q{tx{b6Se=-%Bz1q!g2Wlw#hzd7`MONGw~nOg#DIlVbVu<>J|A zpA|2>@Pb&gW)0`>x^?Ts#*G`fF8knv55&%{zDq}W&?#fKk$DE98%D?a+@BXQ)& z5%I||- zFQSELKtkg|jdmlFo5obwn^FNb%bUa?*;|a4BgHH^O*|!+iH-6t@rgX5*QcTdh3`n= zeJT7P3Li<~$5Hqx6n>^`CKgfnXDR%f6uyMQe@x-e7{Yg<@D>Vx4~4f<_$3tn6$-zd z!XKgV$0+L5w6qu!hDSQ-#r?@IoDf}!7zlg%Gpz!~q@TC;~ zV+w!P5T4q#Xe!ECq^vA$Na3kpafs@l3Q~ro`6eL;Q}_uK{s9XAB!%BZ;Xg5i7fnU9 zxP{7W2hy2*sMz)she+}(M7WU6?h&$gmXISK5^~zJLM~e`2yg&$1e$5Qxd6n-&SJ^Y4jvLTB#7q;MC2XaI(v8Q*kzdGYtWF0@bHk3h~U7$ppf_;-MV(|>^*E)Cq0Ic zaQaOD;baL3iTAl39)=AwYu_WHf$pmnQTZn@dh)3aS9Qo#2peklGnH9W+F4fq}$8WkQ9 z5fvKMzJ>?--t`WSe@IkFL}*k<)X>}7wA4J{`|aI&L<%+jU`|5kTKqtG(D=vk_YR06 z7Dt6fL@^PZg3f=!KR%?l1t>&N9BqaUZQi^&d2oD>@7EyS(kqk_7*5}B8#CzP*+-FE|FIT5V z!?h3KRd|SFgd#lNzn53T22M`R!U#j47!?snf>ixI=&ruLehpnbZVIQ5!9z%v`}7G8 zuKpe$KO|^GKvQ?Oeq;@fN9^Gt)#=9v!^?<(CeH2_d=CyJag7kw-@zXeFiYcRO-IBB zM+F9utO;R^Uwy*7n)ycs5g)@1pAmlue= z@Sp*;K8uK&PgJeXQkLXan(_iqk|I&^&**cxbwHiET%HK5rO#boPtol^rZL%nudoo}Mf2+Cw@8)pKE=OA&io)fr}z`NR`Xh-aR8Myyz| zLabc5QmkIRnstS@-+r6*!S~*Kk9CDlOI{YwkiM~wbcLNecZ!1t53+7>=JW}1`t)gW z=FAyUUS2MK{P9Qe>o4b6H~8(h-^3q({2`WIlHx6TKk~bwp6!K=D|b;tN9A(qWNPSU zQA77IHFPhDW^#k*Ew_r1a*voMkBVjTEAf^*OYL`sAv`sR(XA*vHMUE;Q}})q-a_Fc zDExQ|KaIjKpztdw{CWz%m%>-KbN{QS{I8z!f2*F-Mymtbv}warHm!NIv`wqdy?XV+ z(X?&MZQ8VI)8UTxUQL_cMsn7=W4F$oyLRr?%*%9p6MApcp;OncS$~p>wxhjT?2lO>;1tyWP>t!^5*1g}MEvrcK(ky5){ujXgXX zHFR_HyxnAK#9rLTUd-36XK&!qmxeSjfSZ=;f5-E8rdNP3mSVJQ-@ZMV z3cz;BE)5$tq?&~f?;H}^YhO?A4l!Z`{&M` z`|jtTfBv4@p3^`5^wU`~Ph7Zg;T-i#&wTaOS8wg!z1!~OeuNj}zi;0@`R=># zO2SXR^Ugbr_t~>&<#*qGCl4P!ERP&H!u}A3bOgAcp)k+C_10T+HgDcMhg7!E{QUe8 zSy@>jOO`B&CcPTCVVRN7Ew|j_S5#DV&z*PP3Es5|2?^gN?=g*&)q{}Sp)TvWn z;^C4Xe)vI_l$1F5eCW_2`NbDsFrJh@j63WnPo9)te)%Q8gC-qF=V6m%?!qs>{8CAB z_dCU@T)A>Z{`%{$=Rf`Q(|5o9_S+Mb)@Ar3Iv=I-)|YTtg0O!Tf6}LrmIHvl4xm8? zrk5(9SCO!P@X%$=nnWh`0v=UV=?7pN0NyG(6D{`cE%s_as2pk&Vy5@ zPVqZ%M46y6%;wRfM;TBykRLFSZzwwmvw#17#vge|h8ix(v|LoEOO`}gkxIR*g#k3RZHzW@IFlJZ=V&dg;P{6~K5-Mg0oxbNAshs(;b zW5?JI8c+v7-cU}EN5E~<&r&8Gmoo66lzsL}+3Q2xxh`eT5-CURlk(NGQvP=F;!!Fq z?fwe>Teogq=I!m>mvs0gR9_-LmqUDepQUrQaT+VW*UL5Di_nNZIi{DVKaDWmQ$xvwsDDs_Pv9 z{B_XtLWjRoPEZaYFLB>UIqaB}!JiWUK?CJMzx`6)Ni<}9F6G54DU**#>ATf2HE~1u zU%GS&vb@;O&#xoNLIG%?e7J@d-~u@Uj&;!izJuq;BghTpAN4Nv*%+Y_g#X=Nsx%Dw zM9RU0>j0vmFUd{TF%|#Rqf&Z*pq7an#h=;?sn`FIe`=2;pmv_~2#0#c_{5%}G71{LmNJ}Z2qhZU{UmSX`Gw%=`tZMe z`Ld*TrUrlp9dtVC%9Fb2`2F|a<&k$+$ThPgZC4P)$-iq1GP+3jeDRz{3)Lo_vzE8Bh}{xz#no_n-0i5sET^)rEh@jvXEHPi;Kf`D^k6E#QxOa^t)p`R0QG@>QZ?4biaDs^X7pG43lT z8Wbtx&Z^}ZbyCEa)#Vv9=;awS=;ax8Qn&XxnoG6uM>#|LLVA`1K!Xmo>8PuW=(OP3 zoa-;w&mJJ(d>}x+GLvYSK1lvn@q_&Qib_K~(J=mdqQOv}Bee1ybX2XA`hTRh&w8EI zm1yYnex3Ca<4^ki;=Xo#(z2;Ra`F8` zJp5dOEX}`5elU+{ zptA5b(eN*=JflupX&Wq8WDk~4Wd+K|GA#1p^dM;`8Xh7V<`WHbhz2~hb&PwD)?NPq zf06~3f0FA0(DKkj56RbGf1T;M5ju2Q5LP+zw%lHDmn+ zW(UeAvn=vaqG1Wqu!v|VBsrRw#P^ez-VTZp-g4-`C3XdP8|$t`{_YpoKCO}G)c!6TIdWt~Mn=Xy;EM8yGB9`UT&BS&Uw@V-Fj1yz_p$1FKHvGK zL&rdQF4oF(t>?P>5Aa9chlPb9ALJ{qyu!K{beW=}A~}8fbO#OBqvLvcf(LcdhPgLT zo{5G!>Y4hU*5K39rAtex?v!1-c9rq*@p8?YH4^P|PEL-rTCH;N;>BF9zyA7bu6Ljd z)kO>NM%#e83c3*VQS=A!pgbRX$tJ6=P=909bVmT0KxV&r)^&{KT6tbdW#P~8|KNiU zOr-0K*75Jrqes8w!u}eDOs&V#Ej;6B8qgi;LwGPdp(Xd+agB2mO2C z3mVWCpqR|I_~0 zz<~pcqN1YaL4HWqmr=jJ@5YTAU#BuG>6@H6bEc#+A@P3q-FLH&@ZpCavOEBH;EFub zgp@&e@nWtz(~<%6+2zf!9_AK3gn^uT9sM0ouD{U2Mtd^wMUAZ@KI z%e=fi+`}n5b?PK>%jEp|^MAYNo_l0^dOGu+`jsq8 zpaJCqbOJZfQJWTwL7*Lm+@p;~S;2S&`jK#hj)c4eEpX7IZ53r@G`3Z*T8@8#Zis7=4JpgFj>w09nF#Gu(g|#++?7 z8<*eU;9zO7SY*$hJvkrn9bszIQI~A#WkWY1N2m`VSE!GXcl!7S;e_e78=b#k{E6tp_@W} zplhQXpbVf)AYRnLg!@&Br=V4$Nfg}N4iG+N9QX5{YBtIc`He` zz^Y;{50u}Mj`9W*xFEk#W=T$2mzX+rD%Y)4*13H{T?6^n zv-4lY-GRTZ{}aCpK!aW{ z)QrqI^bF{aP>BX4va0`oeMd&m-ajxzKV7W4mgzSqFtDF3JJeiy)SjWJb``>{Ri)umjghy zVD8$ri|bwR0Ob|(4*XFLNFG=JgSa#P#_><8CmiEHpaE?s^cU2BkOQU`9-sK=;J!SfnK^FNI{;}6-ro}AYw@5Z_a-}P||@EJ5h)=7@8l8&HI zUZGuW^AF>W2gjP+{BH)Nfpri6$Pqv?j~bV4GiFo?cX>5%#*C9f1Xidf+5TbEMKhf= zQ~X1wQ?2+7>E>x>$v=UAu4YQrbka;0&2-mHlV-Np%s|b|)l8|HPB3fk+cAs3@nC(A zy9RFJI=Ujp`v~?DT&&e!#5-nGYL5rj_aLoSr2G0(n;(&slr)m`{Sd12u?!o_&Y*L* z6b3m(++SBpIsLShVV|jUY#0m1oWh+uq?~Y2%FljfT&{-$Xl>`_=5`nL?WR$gu0(xC zI_Gax-#VJsB$d;!{6?kDG^JoJl{ zfjc?G|{LCp`ApW3j*ix)b^jXdh9pqb)*R4P6#`3ckUPXS`B9Ux+y# z%y(i;8}mCDlgAv}pQVpJ0QEsLsK1b=_wUiqMY_$?gF0^-b6TDE)z=Rg zc1wCo*Qdihk^Wu4h&q-{=C0@DvyC-JQ!p0disESe^BQ= zG2h1WcubvZ!yFIf5pz_S>%=_axcwY-kDfl-aq919%$YMM%{bq!>$5PSTfaFsn8y+^ zo{MorWBQnT#r$zxEqSzPb2OOi!yFUj(PxWVKj`U0|1r*$)}DU{E_l{y^AoG4tK+d3 z&ix?g{ZbPL$YX3Rc?{I%O#L)@tTj)^=~F)`Vfpgqu|_(1Duy51p*2s3_stXP=ElSww#y`Z?$ZF5m&o zk5{GgydmbRFs}NVHn#n|Hot%}f%y^473L*{ICy}^SVv>-)+qldTMs<&KnB(SY5M#C z`UU9QfhVYYz>5pY7joaD(L7Ip@#%Hi`1)!?nZP`gU7IJ%)o{SW@<{1UAo%K1&GN7J z&rlAb^Bd<`jB|J3)1S>59o_yfo@2pWT>;@RSDR}zJlE8JNZ)R^Cp`DubFr8kf<6vB z^nSIzZV-5Y7pRZ$4G-pT-+Z9DOw=Wh23f1K{)dh|d-m*%1q&8T1s@)M_+hU1Q17Dc zL;Vj~06!p$NZUB)^z-RYe)(>G5U&N$Feao{COmhjkx-uD5|VS@kq+D7oBcAJa`agx7}Nw%)5 z|Mlq6V+@sh?gyf+$Gi;YmPpT%NK0gG1kQ=?ez`Dfs>(}FG&6YQiHm8p? zQUB!U=cge)jLDf!49hqs zf%YgnJDckUtX0*=6_H=yHRwj2eDvtim;PefoIcW_x`yljy716-;J4m-ORiY4g2#$c zH)705pHuvsX>2OQ2WR!BO_~c}d^^8N(b0#-BEC-mI?^{JUv8=)aLMP}DQ1 z`;gD;)~$p5{Y1Pd66*NL-+i#x#OrSY%GaOOZ}mP^?ehXpI@Q>F3;44=yT-k{j&MSS z+UKwQg?+o`dhw+8uzh{sNFIZqfByLmFTVKVMXIBIUbAM+BQL%5QjL1&_19lNM{#7n z`s%CfPJUchty&fS!V52KedCQcI6w6^4EaoD`ZHsA%%_!>mSUXscZ%aA$=?N(L-dUy zuWwQxB<4$X9aJFc*Uy~hs5a~2;TJLu9ZuJ0^fHCIEWS+bGeJN7nADm+yKCsj0&OtT zLRr)ML`GdO;U~2Zy!qE_n&ICFHlc1pIRdWw{*J>Rtd`3%Ro!s1)^|ex5&c*670_4l zrM}W~!V7b)=#v9?$UoA3Wo|g@IOnMk_RIw}4)n#*_d?$f{XXp3SVEfcEZVPZkkUspS#vT^J(T&*W87N3)H<> z5hLR17q^H0pZ2ajDyu4sUzAqbOU5*Hlo1hKX&UEoALpLe1w=zbrBGu{X&`mscW>{&;pDya+#lpRc`h_C~_br7v7_ ze67=sVx#CB1LF{=!_19C;Vj1}gf>Zj8)PszTsTZ)y#L~K7^KDsV-U0{Fs2w;(0(Rp zlLcpIITq7FQuxkU9>`0XFJp|+M(6?u<~XA}$U5J5vd;{e?dvoJbjyQ2g1<@TV4vYJ z8?F{#;Ghf_Vzj?V{usY?=pwn;xY<9DUz`3l1Y;H9<529k5BeOWKUp~A9E?_5 zZ)l$ipL6||VPvKNCSfabLBnFh_=Rg>HuynCKdAo~yqK@s$a8Y?&gpjEzTmIwm=I>e zHqw0l%?Ths8#MUsV;276)BeAnzZA`1!ZO+S$1xzU=odUJ{1QIA+!zIS!+sRU|vojR6Hh76v`_Ms#tt8iq+R%6%!+ii>8Hq4w~O6jh=lDo(u)DrxoQD&pdYy zSBe5tr$H})328-n)ARBJxq;Ayn-||6?2|!)BB_Dtf&7^K@NX5H6&f0xUN|{W6dN-w zFEKkzAfjS(vhqWLSS{m!<>8+?kN@@FW&F={mGKvhhI1Kz9#5T?n3kBFJaoh@85!^) zym;yaf#M2uHR_0ZqQ2-Rlz`IEI5YuGMkVMzG#5RJR-#Sl6zYse;bJ@wKZiHq_iz>>ctx_gcJ@;Q$(QmQSHOsz6m}HCl%@qIc15 z)QnnD8{8H5#tNt4G@OZZ@C@95U&aUUXE=hiBb4kT2S^Lar^R#ut)wrR@rV^_-e<=2v`!K#mr z*HTZ?Q}my7sa~$@^h=9=V?^C&x(-YSG*1y>vBQ zM?a=5^b{2^HVe!(=0@|7+1ZM=?zB$WF-{z-W%cY8_7*$Hg!>VnB%Tq^i?>9Jh?A-E zWw~D-k>AO-s)OpTdMT=e8lo1dC8}C|t?t$VJy}oHGxR-ru6{@_(U0mH{fu6t*XdXF z8+wQSKp)Vb>SOw(j`X6u&R!p{zlS{AOZC#d@m~0ki^<@7J@IXL3NFVjxHEA`5-B0` z$qVG~q>1b%pOKT~M{+w2(#5ovzDJMHB(sMVXG!Z0YmN0j;QE!_&53dP19s`YH!XA) zJFA>movq+a2b@Tj%&ORWwuPMpABuE4x?S8J;78cabaULG`;z;zd)z(g8vF`=4gVeQ z$xHbH@T4xHudqatND;XrC}xRLQ6`p%$Ha26N~{x`z_Z>KyF|12Tzo4|ing+kwGrUr-#(Ua()jQ}N_KtaBB9ibw z{AHp53Zi>Z4SEW#La)JG{XG^q0SEA8JQa5((IlP>Cs`zy>?L0TqJ!yJnoH-&@<9<5@m?kd?D1 z*&FN!M%=-G;|{kwU&vSTKZyQ9iIHNGC<5FT172^4e~S0ThvE=;RX3R=(`BxFQMOUT z)H0O?cwFiA@`yLt3vUWi3bqVE`KSn0ql4%$`T-^55qKtE3{mG_xGm{S29X?+PaYvp zkk#ZP@+CPz5OwKbu;n4Tls15m?4uFpb>{VEFY~n7)9P;xx2mlh9MAc{NpNp*NArB% zMo_U{233g~poM-xZ`PIGvha2?hJ^k#nvK?=T__6rSwR}W55Iujqi zx*f#r;$BfB7O3N1t9RN9D?Z;}NJOG`=o%D-1nxxol84C-a*)K)c+hbe9ZjdwXDKta zxzwt)p0$oyXDr7~wCC81?4@>{{h}RWb6FW%!j`hfS$nsGdy|{)KH;u*H@hFXN8M9y zTYfd~!V`E3|F@VX56Ew2M-`_WHB>E7E0y7I*4z|c?}8`nMFx(+{c$41sRh_3n@BG@ zkUm8>({1#7I?SAHR+^8QE6h5x9-{PK^Nbk{GwVicfQ2m6Vlc-Ntc6yERcTcLf^F<; z?HlcQ+q9W2?XmVedxPC*Z?(7C+wCTMr@hB+w);8*9ORe|gIK=C8O3I>Icz@6zsK1c zwvKHAZ`ls9yqSH?3vur-h9Z z<3$embP&9HI{5WbaaweiR2IsmvX^>L)u}D&kh(&T&`Wh9#J6K%nT>|er9BQ&(ES0j zihKwfH$X(*Lf@eu(rB}v$;@Q)s5u0p@j~l4>sfoPjU2~W;%s)V1*E=oTiq@^UJMt@ zWu0tNyVM8jplVUJ4i9peySWTk;7VMDt8pE!$B~eOI*A@4P7DyHkRn;6ic#V&F+t>u zVli9Hg(y}jszt4+7i%Gk8UAM78Bj^c`g(jvg3_u_gFqjA^OaUB90Etq-Vm_cz z0eDmaA~k?X9iY+xxU2_c8X>}O6Wc|T*eUi1CR1dFoG43VHH<^OY>;c^dbvp&I#M&p z&j~tNr|49jrbp=veV3l7^C4pw>k^3hrH~uvLtd=amwqR`TrQW(<#M@PE|>pT`43P_ z0|XQR000O81&Y61Ekq02^(_Ga0FnX#9{>OVaA|NaUv_0~WN&gWWNCABY-wUIcQ!OF zVRCIQWq4)my$gJl)tNtj-gjn_nMnfV%AHAqw39)sKmtjt&70sQ0jo=r+OFOH2%y^u zpfy}tqSYk0?GC2xGLV)QcQ>H5n@n{VYiOO`2+-XP(u;uF%eFNEZ4+V@1SEro`G3FX zypwq|nW)=sfB(<_^WS_J-rG6PdCv1Z=eeBgNAB1mY(fY-e$l89&j|Hri1+ZP2{Fm@ zy-A|m_0xi9v|D~!Q0H&hlz;EWPk(CT>bvvTuD<7?L9ZMFG# zfBMe5uF1%7UuA+geanCB`(eAioo|E4I?$Tz&#g-GFlB7PNTbwy11xxO`)DRvqE zJmyyPzF!xA#hVsgOsm87UR?~NSrYW=!blNff1WPt-hnk!rs|?pv%J`=iD7->^w(^@ zYwKoQH+)`G2(j+=v1#&!sJ~|8ovSym7UIRAf+=?5`mi=8oq>PXsAQsQ9$%o~bX;fY ziRpT-xmP8Wb-dS1=N*^MxMt&~jcai)X#(1a+i@*UmhP?%pGHE`h_n(;;x{f`<;0Zu z|JUCXO`M&gi{KR9helet3OTa!n+`0@fR!aeC_wTE`CDmy0ljBimbPFy|u~S zHFCeBYh;-g-1JvQ*Orf0bbYqIva89ztn2=JZ|GX>H6n&62R=6K3}2hjjx`H?=!jd?9nnO0foO@W$`|KQ$50`f;2JSyNq&Abqdxy&#v0*V zk}q&CcrTU|3Zo3yGAq2qzseSI&gKwxysov2x`Oy7uTRTf9`5m|1iC?AA&lN_ab!+r%m!Rq9k7X+LL$Y=uiIbEZdW7@s0V{TtR+u?GlzjxNC%WN&a5k@8x~|lKgvd ze=qN+@je~*>HpKZ^AEVS6`buDCQWU)-v*jK3b+MR#PPNG<>%J}etyQIfM4LmJN)tm z-idrw&fBX>*Szg1ov0kr^|VP}(z)R5Bg3Sx%|4dCJ)m!a&`_Rn3$Iu4dUp44!P#BI zYw=v4FK*%WPFzW^M?tU2pf&J6P8yTepyhGWo%E08C5=gI(wwx9(fU!)n&qrD%Ow0q zLGywZ)Dge@y?D2m@A8)v7T_QKxHFO7bCG#V|zx8sL&@sHwb^|y*y1-FXMd+*WltuZ&xJfbX3Aj<_b=id`F`4FJ7%qe{#F#_J#_4GVQXXFWvJuax0mg**5z;{ zS`2-1ZZ&W!aGLTBdFi)l#~!z9$E<1B3`dJ$E_3z?(M{YdFGpp4I+53kzr-c=AzA0b zh)N?O(K?p10cn4Wy2Ci1u<{K2DczQ)_(R?ps(x>m z__A8^CEw)BwTdt4qULev4dTgiAGa%-kMaoheKf}?t&B!Tc{B(-Cr`>qPjkDRsVNS- z4Fwawa$_7HB%T|re6ZlVjeHO`#RntChZ}ZTaVITD`4H1HCSH%jwpi1ivho2qKN=a! zhfy8?5BYsqeQz0#^Wb+0Jcuq6$EEFt%|5qw;jwe6B4Xtaznx7rZTi}4k9qXWAvmpd z$S2z#+en{nN(dfQ4%1UtjNscFBhlS#qlxWvr5kWIePHP9;vIVkYnka!O!?X7oeNWp zo(2MuEs+d85x-{+QC{ zbK7wAz`Nd7LL48kIgeEe=P{!(a7*>uH|-*?5`VIc0<(-9V`t@C(QeXr z{>5k=%cfmCbV2bVS$V4<*BhpZx@B|36u*B>=~}1rSiSJX{Uh(8PVZHRIz5_gNSh_< zmS^<*x(Gi*a}D*ScFYi0wcJ72w!brmz4$R*AMjtB-t%iG($#|=W76GVJmbZ0G@TRa zTuIVF{=N8(d;jMy2fEISUo+n`ogL{M|L@~75gxI&|KBZl!tzWw6Xt)f<@`_S^Dg!N z@51?0`6=6uF8#^lR@sLhu3H6}FMv(6zF%!q?^mll=hngZ!!^iub@wZ{hfTKP-Vfb? zcT$(}<9z8^GeB zykygYzZ@-dsx0#~%07j1`{8%Kj575kWnRiQA}Xf)_s;iHuY>PWuiZ1=OTEUzcWPpX z&}_k@LhSdJ84=b?Xyq@KfZm;7u9UvDQx^xGMr_HnT7{YRBk-G%ZUEmqzpO_Fgg7AI zf6|E1XXZDw^%@uKvJ3eN57~o`&$ias@ougrrqM5_E?~MuJZTrE2-Rnki0=TqzZAYZ z67b#8xpOSOOsnlP(^~P}Ig0O&WcUsuU!nG=;X88w54uiG*1BGvszYXM66gPfFA}xo zABW#x^72FZ!PCIG5ASaSKl}L|*IwY_{HPJhM|ms*>4S%)5A)+r)!#85?o$%(6cg^0 zQMjKr;eI|T+$q6tS>T?p{o!cegjMF=1gvSAcy4O;K-n3{*5NF1JX=uCruzD9?$AA- z5bYO`t{rsVCf|cT+1}tR#7qyTh+wDgKIYQ$+9->Knd0~^eb=6I@cl?@Df^@S8ArzA zkxgFzaFo}2fg>0N{~<$X3tEe0+v|gWHx*?D(?vVsOFmaPf_+mvW_*WnUz&{HYBc=b z%na)WF8_nZF4Xhbx=ayXtckX(=!b6Gd*UACb#2>Qvt4(s zU^%2I%Pp4W<@kup&&@J*q*rC;hOQkgGdJ{glqu_W$PuJmH|ydY_2vV3?|+}dV_lXJ zW?JGBkhtWUxMa6ogw7fGmm7*$7R&Z(&a_RH-eauq{v`FyMA;Wn-o7;{LD2PF-|mhX zYf#n&ylXv?609`SJqG!y7oy}6?&qMs4WK3Avz`U0AItk%68Mo>qMfiu>jL=8SrN6E}>Rhb|g>kzZtX>`6uorI%FO_Bcgj3;pvPvC`u} zKG<_FZNT=*2=qud?{zIJSOxjEWwq24XwZpGSy_@kE+bMsMTChP^$FYYs9l-t8K#b6 z8SHD7=^HB|HsDPg$4islimhO2H5GlzQ8y%B&eJ^X>|1A7bBFc0XmwESoYX z)2*(Mwu1e`)RX5^D~89`Q_)hTl{}aBqeT0QF9h0L{x;iV5jw=oT2LPziHgD$?D#Qj;CW8>1q%A6|GR704exZx^GDx;@372y+U6m;suksp~_aYXUFO2Z!2aH{TNjYt< zOvC~3;ZGwr@b=7agKxAWA2OJY_iI4+&mhg_HOgP;03Frn2%B<`*MSO^HqBVO;>s{?2Vlym9gky&qjxcs$l0Bw?&nGDTX&bP@GU-oAy>*UQPP&b|e52zmrhjwaUt`VkOdMflrLvZ-BrAGNC&fpHf z@@FZXN*J-cE=SIym~L&zQo2>yd}r_>quDI@H0Ox@UOpSZ1EOw!gaSlZfo)BpJQE2jTZ;R@D|urE9()DwGm$QAs=i0U8z ze(c?9ckp)N3>+?=Ozk>a#mnO4(W=I zOxyn<$ki{5rc%hE)UgG*Dqe6Hkpk0psJf*GJ+i)ep&PH5u+R>BQY^S#k7vL(ZCaeZ zcd7UE6-MFprw7wU;{JIbWJl6|jNf9hGk;wXp-+AZdHc6z1TUC2hrHSZf8qtCsn0T+ z_RzMew%N^lP+38NqEDeYTv? zgVW(dN*S0$pRkcJE&c4@ydB;B6}0`my3y1F*=JcUlm)-AIA7XU_Q#s?zj|_z`F@T( zPrDHtTw`qQHS_e@oW8eQ@QI?)5U}Z%$fiwz zNqLp+MdCU|>ZF74F(tle%llDw0C_#zMPn;y!?O5|&q`i0W&H3>q>I69$M1k!#UWZj zR`8TblQPf*zEW}E!wQ~A2JcW-kmc?Kym||bdJ^zvK5KoSF~7&^dr}t>)@^KmK@xoj zdmgpThQ1SVnVGI+(SD|g6akq_rgg8LF^A@HC-QZoG6EG5R z3!1p~nz&JS<{&1MWzCbmevLIwCcRysGfuKRP9^B>%IzsFFA^Ldr$?YG9}@g?Nxhs|T$O#M8h^z(CC>(tS9!Fmh<#xP%3>KihOFDkEBEo0Vs}pTv5P8V+ zec(?8WNhy?5qw^kdgM8_vlw4FF3a+czNOlnOK&+L;jOHQJeuNa>j%ufBRLZ8MO-`e zo~A*@x~QjjLC@9!%Al>MX#ry1Gq!2+eUTA&-NQ%u||rjL=yM@%}|3T6cV0C?>Cdj)u~zi%7z zwH68)$NurMvXj4pewrjWCnX+_y_P512l1OE`}Wj$82p?FeeQbk;pb!HT%*3aMq4S` zW3iW+KHO(B!q)WGIEAo&1D*A6nrQz$V*D;m#tXi$&k^m}LP(zl#YeT{hn3vVXJk)-Yq>dN=jADDfgqXXT`D7vsr-j38xE!0taVOSP>&PfJZD z+FYl!G3i03%h%F_e~s@|W?q{an|Gru@Z9%Hl-H=}9YQ;fbRx#?F!6#vU%UzLUWaT* zxqm>#o%Dk$%y_w8FMshaOMd9u?td`zQ+{DvBDaC3@V(o!;mck>~fCd~t%$a8OH1k(aSK>GgdfV@4nQK$-R~GwlHI>|AD)ftMxT*(%M*{fEc& zfs%*i8hwqHn(H-{W~rHW?ric(@$Y9S<1112KaS<=e;`l24jqws+vxtT~4`hk|M3cM<=7@I$s2oYCk3tL(@)TaG)&@%+nCy`$PksJg9&vH^HOuLl1>bFbGNqVDSJjj->~ z)op2^Kuwi~SVBu%Ux8SnY9Z1ra5f@Ft4kBEV?{{gEi#&%nybyd8umN`_l}kmR~I=S z385XX($a_MgH~r4;pU2>p~qmCt6WCdrMc4h{1Bd(?}Oh78lo;I)`5qtD}9fuc}CbT zhL;H0pQHLo?4~~%^D8NTiF%Ihx)`*jul2M^ODAN+Gt$vZxv=USYd)C{vcUXBrp`j! zE}`uHdXAFekL#+>A+f*43WvP$7TqlSgP>QQVn2`%`H4IGnexHEsyV99x?X2rT^v>n z#;a%>GXBi&xMRFr{m>#;Mr2cp__#;Q9;yJ}r2fzxLH2LDMqcXegD;X#|7Effp`I%0 zw+9En7cag^zXolWzFCpxd{*W?WDgFesl54??|q0_M$_yYn`RI(%Mk3%0Q^#StLxc8 zgiYc|)YN%RxPTWK=#mezNG%mlk||z7UJe zD|sAiyNU(@c~$M@gHrc;3mid(i$}e0{a`S$zw?dZ=|sIiM>X57AP;<#P$Oaw=1ewz^< ze2i^TY^Mvy9Qu&K}5eL%O??T)5Xs-1Ix~OwrXN1|7 z-96s6YP9EawCB}Yygjpzvg-4wZ<%Q9VjGRH?TwA$#?Xg0f8RBV{uOchTlF4e(_N6y zBAb{7n-wN5GUl3r`%KYTfcu6*BV476X7--%U+eOr^h zN@N$}?E~h$18r&Trn~#{9lNFrP(+q+c~dyk56-+VN6z?+4F1qEPh;FaLxzy(j_|_hpx*+-fKU&{~jmu1ftRI zg@EJbJ^U9J($XeX6^NCt#@V%9^N#NEYH4STE73Y9zPSNsd&crM>TWN}X8Iz$^FCml z+@4X@mR})`SF=oIOHbT{`=>MXThmd89jJo~_|v{+5&ti5x~B$Zv;12D>jU@=qAsjQ zHSk%Ex)854&Hb=fbIUrp%{uj(xU2`w8_ahDW<6IyCg;B$ty{pp%?FHKEg1nhcIP$g zv>bJ+(k4G#txb9uGC9f-L-MSLABVJXY z9r3TiJ?blIM|)6}K$iy4Wj^S#4z_rema)EG>)4~lvA#cc?)cpJc-AGGEi~}AM%NJM zzRpp7=tI!YZf*LpPF>khSCg@`M4R3=xTvD6DpMT4u$($TG~S^F_Bd0G@X_=Z>WX!T zoT6^HP3vO54&AxFa*DDkGg}=&*wVA#sVQ#jO)V zlMLxk=R@94`;188GH+YIEiFV_V^{)5z1Em zwn@RswXn7HkMORO?dpLF=_9kfs4 zl|m!(a-I<>KpKBk**_c7pFc+p zin=qlbl<;%9)mWwuh*gIFqd?2sr$pQ$E0nFHgjXW^p{#{Lhx<>4SD_rzb9+vw{;?4 zb0uhrx_7$NeIf1#GmUU(rqY@FAa8@|c+ODI?AuuH5Sh*J)lQE@>jr^GvzETTA2Q5( z^fE8|mH_L=PUAl6|1{JgfVz<%1ItDDC}5E%)bEAMirRj4KDwLrBP`N@a5{9?`ZG3{ z@APoAPWe1XI^UXWM8>W|P;*wOf30@u*J7;i%rV`^E$^Tw+b<{an@4>yGadA0`)@_u z=St=W?L&;!Vi(uF;t7xme7`enHA)qF)oUPxd~s|Xl+O2iWj$deg|#2uLtR4?`8i{ig=1`{3~{GK&I1Dg0VD+ zC3i9%`)t`yH&KQ1U z%aJ}$uAEzt9r|9j345RNNx%T1K7I;1K4Qt6gM9R3DaTBE ztIU(*`=jYkCyuk9M;zK_$zQ0--gygPF#l(=L_5dv2(JqEwK+>j8zkp20Pfq!`v<`J z)RpLW{dq>1ai_;IVlVJ!Q+Au?Jl0^sDtCyD@bl|d*_9v7^i1o!Xq1J7b4kA~Rn83n(u^~6 zM!)y>lsyc5SL;UC>r%%}Zu=DI+-I8{%B3%6!gsp#TKFs_%PlnM0j*-+5o|0ug*>rx z5U;nhADZ}ZeBt$xij#d>YTNjE2g&@HINv#sFJjX}b3orqpzVO1%Ov)H2(+02+PFX) z|NZw3yFnYqpz{mdkD$GssK#$AXyi#1jZ5Iukj8!)yXS<+GZ*|c($Pm6g5G}6;iHBT)CR&$R`K2G&LEaUVXIWM+8g=3D>e45DRI*xYIA{F1!1sf?^V|md zLNQ)UPpRct!sv5>Q`*MK2FFT8&Zi4o!f~1)-U3a0{YIHvo3dm=Tr_7}tloneFYfV9 zesPaWa~;dqa@yFwCbIJ*_kVwM{=lWRHt^7{`f1@mOwMmP5yCaP=>x~kn{x-B$W-lQ zn0;T8A9*4A{D}LyX1L^7Fa0=Q5%}U8scv&ND}FBqzjMLw9P<0VEyEuhso1r>aKn`@{d#nhesDM2IGko^;OIR{q+b+N6cf3E5a5e}}%B@gmK zEISkM>g~hd9e|%0h0l}@-(e7GudeX6oxwGYHcMCbcar7^e#s$@vtO$cGEt>L=1PQ& zpW&}d->u4lcSWM{5c{?qB1k{q2_76hI#9YC{snxuV6!%Lh~Eyue;Ys`$jo31Mfcq-wunPS3iu7Yn-~^o;^r8KAXxh+g z4?Vnx_#+NH@f!Ssz&vB?llV^j*5|hEIjBt<;+miONb^bf968K0_)uUE{Q>sJ4Khz| zPw8?qkH~4+Bj<^m>teorMd{BS=JlQewf-jA{2~qf7S5IvcNM69>`jnA+VyLmG&O?wN=B`(U0{+L|J*RXj}{2I|0+9o{;cbU zg7`eC#5ps`{3qg{O_{LZeNp-VN(S>_6ML`F|Hzf`%7H>H$azw$<(!x7&|ej(af|W& z30AuOC^iq*chGG#t_AGh!=LkNN*_PKzDP~=fhOY2aSryuvtFd}LFme9XjfD58$5ht z_#k}y`GA*aOAYqkw`sTvd?x>QMx(oX?pr(z|LZ`zreL%dC|mh^=>GxamHh*U9bwq} zAni15sOxjaF4<>>cI!jCEke6>Hmw^@1JCmd(jNI1Xwp!T5>)+;o}}}Q**`Al)7yua zN?3<(3^yYdTZ8uKH|@X@Q!h*f{9fpQY1Daz(;o4my`v30r9pN)*;1!AYG@1aA&S}G z&c38(w`gRa7w5OIO>*vwoPUR_^0{==m&=j99O2V1BK+c95n&AT1q=O~W=Y!`Rz68` zxp_}?Sv?V56#vPC%lV=mK5iBoOgNizKUIXu&t_e3d>Hl20Uy8m>rKN;Y~nxxc-Zo5 z@DTpA9N##kcvgML5#I8*Gio7|zILSP1WnzvsmMDYIC0#--!IBoo?Y@h*OyGTDD%I7 z%wIs8?4B$TCr%yO3myed$+4j&lcbN7qvE29xF5^!UQH|+{kA&(?LanSZ?qAvOAY9G z$6TO~Gvnx<-09hA#4{aux`AgJ=$C6;eq=ahN}x^JTf12@Vh{3mpBLcuWLfAb^yBZ#X=F>v_=cI zBQEM5iH?qUkM*n6`U~RYBtD-rPP)^m8{Cg5x{b9vH^KH*6v`NPKjW@!6X!RPzxU0X zBlYY2!{tcB`v%;HV1x1xiJ$@5;`}b+^8A%(Ne{mN8|d=Vo2ijxc1X&m*>*(_{U%TR z{p#`W6UW`z_kUik#rM^LKczF{am3G6ym=yV?D+hZXgBA$bY6)TbIuUTD)CwJoku&~ zyG#TNP`}5J?;-HBkn5>zEj7dVb`ZMg6m*uH%MBg#k*k!S@igAk*Vv0ZKIG-~XXd^D zFU8_NOFXXTJ!*(;bQuS_EI82b@6pxzAbm6nKxSbd%m zVIR;^@V7Zn&HZ_`P}%VD@mTV>`zIFM){60Q_h>A#Fuj)WIaYKMWxNS`Hk!0OqUMcD zd^gH>IlkA&&|8)3x=z#%L_2CY=Cc_0pl4mVW^ZIayKEOXRzzG)4O{cIY&XXnPD2I; z-!GaNZ%5~frv4Rbp2x^sH6LYQuF)ir);dNU;{)M|k<>_Xe=9z2brJl36a2qqv-yT? z_R!zVQ|mRde^U{m-zVFFr9b**+qBSW#B--$6FE;R-VZq5FCY#s&4>(9_l?{ffsW7O z*y`d1&+e%mi5^G>>&&p47sPnRT(fW@Hh-D6jxf^z^N+Z80_Hlv+yIzPCwQp2SGcb3 z<=D)#ov3>Y%9&`sOiTt?{|jilwUC8si!AiX`AJF^tZlagcCPn|@@>yuiS9lHUMt+Q zLn}mFZqHs(a&UHnei!r9AT%A`qo9`dSTdLYBeyXUM zQl)Cuo}sNOtyR@hyR8yCh!w;rHEPw~dsXedLu{kgxdg;kFWoHXx>X>k&Vzny#3nFB3V_r)$Nj^b&jUWJv1$9`HIq8p#6r1eX3 zYWFNS%P&EAmuh)%3bNU}RxCJQxIA2F%B&}S7Z$Fit18ui00h+(xiRjmyRs3ou~iRO zY?O~wR1#Ae_a7uK*iD2|Z=;!0!KhJf? zN=vsGK-pvIG!|{1A*=2jjl!r-M{C8w3(pB{*IJj&9`nAM- zH^!w^iVf(WY*si+C;QQzia%?cyn{h>1z@fRLTG|Ux}fisOw6fJveGvIt)92gFN{+w zSY1?DXW$)E@)<@Em(6Q7X%8lhd}e>JRF2~^(e4*PCV$24Lsvx5kD zIu5!feYTMdHBx>sMppThQlaLd7X6LWZ)`k`#ahOpezzl$Zg=(D&vAe%0ttYcQ<}2Ina}fuC@qY zDlZP-t$Rz(pW{s9oyuv5H)PF^Z5%vp5X;>z!UIA}=VECa$QO!rx7`!*K{glBM$Hu^#4#NJRUS!N9X!?V^?^&}wyH+};wIXb(xx6gG9%TQng6d1BwiCw?)XlO>?!9v?gnNv0rO_|3 zSG)b~D{)C(32O~{IgNyhSh5C2DQaGp^J_uPhakb6hG}{ngez0`5(=|Yw*Nu+)vK8% zT%Bgl5NVz}KRBcg8DdVsA0VL#3~$C>rO=>x;xWxX9Yp2bTGox0&jlIWF|Y*6*0!hc zkkJP|__9;|%p>`9hs|=2o(5dol6Twh$8ggt;j_boYJt%}d9N+inujEk^p8ltgBvk% zK?0p++Nn(W_HeJUcjJ((>dJ3cG8md^#cHVt13>0EumnPJUBM4tw2Y4fEOXov-FKlR z8$0bj+vM!c;5}%c$@lQ0XruP`K$HC!y2LuAxI6?G{+)<;2A1CgnMuRE%8(w}-qj@W^DGk!ZDRF(PY8;!{-9+fu`yU>_jU}+%_Z{TqjVdagr~#L)jRKfEV=60qr) zae?JLc_rMu&D95&j;Dwc8r5G1?KO7}GkAE)*(1~g*-4WoNDCRB5;#Gn0#p3gmwAHi}3RjBz@nrI}EvLO08 zo7tP>g6S_w%QELfwSMWhflBP+ze>u4(BhNM+Ub7oIs#+T&!b@K4O_pgSCebOs|D{D z2(R+o%%tFTq^-dYEv&8x_1=E-gVE*Ep9h7 zTAKF-aQ33VE4q+=H6=zvZ?5?=Ys=}th`bC{GZgLRJ;};<7QfPb?o0Okcb3z4Fn?;c zubOuGh5~+-uG{Bik0vI4s9vm{Ren=Wui&I-HWzZSYuq2=UMVB#7o*qWi3c_>cblFKm<)`vhcQ>Yp0?vsCBh^nJoWxqle3>bDmnWb&qEF@ zRvl{ApESu!U`m4z(Y&nn^S8)1{R8$pzFk+o%@`W}^MN-g;I%YCEU9y9b8OB*@XjkI zSYoKXwdwI-@ME3}#?um#>g&@8VOY1kVoR-DI2&`=GsH71C*T0Js%P`SS8+?RSzF-61B}$3Em@ZglwJ8h?hvwd2{$m`vul zEaNMj^IA)1d={OaugQDg%m)d8ExW6_pI%D)ifD0sNxVl=ih@>(jrOmU0RvL2_}B#~ zHf1rqad1!qtxOxyA2Bk%Pc_m-%!_A5d!~#aBa>KnBM-#!K>`xm#2j%QL2F7t5~+?{@Mdl*{|LdZPOUAn zYLR6IG>#;GL!JQE+^d{IT~c{A*>WPy4@xGCFO979HPKZ7fx@iy=aanjpV>dQFwNl# zS3hXC0;Nn7cZ>O^GsW}l;-2FUH&fFq{?&;F9NB147aLSCFPm3p0WN|$*5Z?FT;^hJ zE^NjUn+uX2bI)CVH>Ut%kr(;*K63&^v+0r%*ghuWc*qv;-1-9LVM*_k!@yV z62vj;56~mg&K7>~$Go`7`Eb@b!I2XV7TBd<{b$4CM(cjyjB8y0 zW?bF>)b(~t85^BSe_sgH&>^H)!xPE+al6ev@9b6;x6SgsU-U={OYu*)TbEn1mu>4= zY&XxZvLF;p(cM_jo^@I~z4|q~!~+wSRdj#5HVwI7vb%la_65zSQ;(J(etr>8NHEC& zKja7927>7+TDf1jw&(%b#F+$}T3vKwCc%bR7e{qTtXj^b>&T#sP8mV6IOZZvZBEpE z{6qIqdtc|%{b4!WhAbCp4|uo_jSJ!LIry*fs%I6B>*{FL8c%c_fw>t%xLe$hyhg-(VOpD=O1?6YgdURP;;=M$Cwp% zhoJ+nrhQi1*lXniPYdD>25fso_uPozd`kA=J^5$6Uka~trf}6GVS-0r)fpcLc66su z%(4G`OJ6>@n)x3!=Pz8JuvCOkB*%;XGi8ecn zo>^u8MBgd33hCAlhjh@W+^8^1Hg6O+U+a`gLgf5|vB=-YPp_eJ{q^e-j=PEL^M!NN_KHQIOLkl7*>_=yARCpYyu*wCF33ZTE@|#s>VG98W)klWG#D;ehOJ@- z^TYz}><23g+$Q!_wOlwkB;g-fxH6^cxE=9$YR5r#8-WNbqm?{pA0a&wDcod%*Y?%D9zpL76zAW!k+-T7UyQ`#=I7LlvN}bvecjUxw`JE*eWy1QE$!! zhK)psS$V>97=P|&TUp718LcO%ru$aE(&vVbT1r0GzU!PgeaiJ2sq*a33u$Xe@cK;2 z%$=BZy&tbx5KN-^Vf&`P#}<9xZPoV*o>^De7Y(c07x}hgADr0kSCC+@SDAVzpOje% z8uiKDu*%#`tesbHp+ht6SEVr^x<{QC&YKC&i%YDrq>H^Q&^ggOV6nR{q4|*TqNZTT za>jb$IL^p+^3kM=)KLG=HO|^5mF?nft?7N+JquqwzD8`6TU7kfA{B~`O#!uKx<)DP z9qe^Fze>5eP~vmpa!P)5xEwWr;9pc#df*o|x@EeG*=mpX@p&P6X}J0*C#&O+g`eyo z5ET(RZtMc)*eeDm(%TsuI6MXz2_Horyr7Q6@p3+`Tap2Vo%qa;!Kig!W^nMt6da zs%lLHGo~sU3+gZ__ov&H>5vlUR132)iyCAmXgg1EyI#;qy(xBPVa{UQ&m``NCC$0o z9!r4q$G?}LnBemg{Cih|!Nb{m(S@vrgBso!@3~QpY3mA)5nMGY90MyCRgu3~`<3@# zO`R?%M5Ud(?e4=%EL)w@0$FK--pp5hNN}k}LA5**xNuF*KT6obXgbNJ{>#dG@;#i& z86x}-{o`pxR8c)umKTQ~Scx=_u~=_MY3_q!d*5}E`-lCEgZr&DxYe{6d*7+vW3~07 zW=*w^$+=8gcoQ5^=q$ds3UtB@ z2d%ocDhJ<(n45>9xvdt>V3=bA>H`_Y)2+|B0F?7^NZiuG%{j`wv~ZKJev^FTIZV=( zs!7}S%!$?ktS!&Sdei!o0)Q(dGwON>eXdH=-)nH;o&?W5@Be(L!D~h>NqH@X?IX4O zSW6?56z!8dZdxBY^Ce&pH;&bBs_NARd7!Hu4_wKjpEIL!gffl?V2r5UMo#sb$U>e} zjW+w{6qS+YL37;*mPxR~q`1tvp8IZJ@Zwm`S~g(G*-~# zgqy-j(d*=wXId8h9+AR+we4Z}tD^l`^L5|NLb92jZVya+8ZJjVW+*pSC1N?Y5DN%A zv$6Io2OiDEaJ%Rx@R^pxE23E>v50M1YDuqjF>rC3--QyLfbJsXET4aFFjQ{W37TH4 zxw)7Emg+aMi=r16BdF&@8&YtH9^Sp9;rDt)@dgd)ao>KDFB4kd2`T%z=i(1elVunD zlG*%wt2382*(6Uu`gQjuheabmwl#mZJ{$x|!X9`c0EGl-si$HN9b_Y-)qf9w#7%yLVGYyiuksl~|1u**aN~3n98*+fz<) zI=r{^8`4;<(qOt|C}AriwfymUR8tZyA{A~QFd%{C>XA5dOt$C{4joGSLY)$V0n=Ol zcDp{VEX?YBxP}XTZWyPHhZDN{@qQ(`toK; z&k>^suJ%7ioO6Cep+9Y$;=rve@gm?y%~nyaW&WS*l51j6812?&D-gKEr=;;&BQ-0+g8 zpI#GN;>t?iJp7tveakJS2!s?%dH%fpYPib{^dCZ*)Ud^Jlm z?}S`UHB9?m(i?>8A%t{I5t?jC>2Bt{XYl7Y5Q+w&Rage2$!)XRTCCS0k6vb(+h<5~ zH<=o&y^`rb=WCL$AL=+P;~TfnBkX}l z09fx!W|b87cw?{4e)O9i$b-W8L9pT+v{KkHs zt9MT`yOhh_e>X*j@8&8XkifA7#AR`B5Q7ucLHZ<#FAwsYWHz?u*R_+s;wPY993brTlHz8nefq%!y{|ZI4R-mengi zZvB(xODH~M;}yOh-@sM(dJDG~tkX+OaA_n3J%L_n%5wL$m9_M?lfkc*_S#+FdC+a9 z{##QXU9nqMf@+ujz?g7?^3U>VcKsnbcw>bVCwimkWEYVRxhLp8=fND~#!Ny13g&&- zOUq9Du^*B=RXz}b3jyfmfqFA#r!`~jQ zkolWLN!PnEict3vdjIewh~|G1IzUOOMi%E3wJG){7Vx0#l zi;93nJVzHcKHPV|h@x8MR1O_Blj+fi6UVm*ow1~zH6hznJ>JNJrBM=d$NEPd3I{$H z&|pR!CA--1;Ioa>M5zAGv(?k~eHs<;#XsR0^Bbm{A@dOZGJ;PL5SX=|8JBBWGhZf9jmNXYD3^9ny=Bsre%z!YK1QNfIa&B0 zh@`dMd^g!dXMUY|zDpueS!-R#IEkKoRAaa!$kd%QXTsR%`ulwbKgPJue)HGR<1Kv^ z>U6JR*(R-B*w~Q7+Y$GctTR(rk3Y5E61)rMH;^rJ{rnkz`Wbx_W=%&A2rDfX)1ww5 z4qHF}{48*wU7rDM{Eaj5p3*gxJbG}kEl+#8-(aqL}37|ntzMeAowSfrMe26)9aE;_!}_O^TT^U5j2KCNTUpo~6`(660Jt+kgf{%}+iFZFU+Ri*JBOt!a2TV@hK%kTqlfA_{gl09+}dOaFpqyxH2c1ROd|E!B6%3v;D1@J@Mm0rG^NwgW z8RkrXFR88Nj=Fx*D;LRx@~lli7EZSaC6tXk!R#_pZssbWzr3Pb@_MF|enl8MKQWJk z$h0x7oIdWZfULv)4YN9ksF%S?aXdV7bdTnApRgHo<0keEu?8D1r4<~{e&*9^v(F%^ z|08^8>8?e6D+W4yb2pd(yvGYpjIV-6Rr9UbnO<9brrjHp^-C(_%!-bHW=)%7fu3j# zMO&kivg%ohuZau>(O7r~Eq^hkP0?7dqr0sZUHGYAqbfe>tAOZZGcNRnyH)+TE9ehQ z-^&@Mq<1XmL19I>&m^e7Y|807r^EfM84xl9js$HVMx?iSorP!heQnR~<&I<=8%dNH z0=+U{}J0O!{nhWajQPv$&S+d-SM z`zeS$&)e^mS+NC_P>5s{C)}FmwhHf^lJz*^Xmoz|q_Yb6>Z`Q)$LTgPV*Dq<X7->+z8O3p!v z!AAbk4@jwjZGi+B-5lZ*OJvfOMRxkzbf%D_Nb7j4`C1@$lxo4V_`ZBi1aSyPMc8dt z#10Xf)pqHXMA{bgm^J7x9|*ljod>HJIOy5&(!q5kZ7X#&XD@<_;+w;~B$GV3E0RFi zx<9p<&^w6dcV^opR>!^iJr@T2_3j&QuTs&qjIB<6sl4U+AJRt-{Hf3ObJU!Q*x1-_ zsXf)%hzw86WlKifow6K_tI-<%wq zLiJUEf3K+p%}w_#v%)2G&zM2yfxB)iD+)C`p|n$JH*bM42K6d}n%6(>3(=FtuXeae z85fJ@nLK}QZTmPei_B@Kj1-*z;LEnVi^tw37aWT<@JPLQRfjy&AQQG9RBh7(%fC(-lFQvr({I(F2WvrkUd zgqH7Syw$r1!Fl_;kxWxp2;k9irIJ>1!rI{OD`g%-^7NU(l%F(1MkDn*?a*xjc`f-e zkJ{a3(p?MU$mkG+Ms+`&&cpb59C72#%ml`?BY*yDNG|6xoxeMBTeY6(rJGi29<`sy zgL@hm#l*+iz?*|vP=4*fKk6(qT34j$;QjbErw8xwK{y{LpnmuOM^1B{)NxU= zd{zB}oA7j*t=%Zn3o0by!M`;6tMFWi&sO=~UL1~&U~${YF0KRUV|k%u9i%hQk73>u z?ZrQuIGY01=w^MhG);P^FF<^kOzKTbE9xX@&DaEFuYSpbFyn_QgR~qpIs>A zifx=Z0n#?>_8c4Rgb00auVOtkay*xuLo8GHq$s5gpzoN1ev_gf`hlIa^h;9hHnS{x zFYi+P`s<Tt|BzN-_litq+eZMc)kVG78_){~3`Z*cD z)FyxV=p)w>q!mPsN?1TjtO|;MH;?Fd&f!dze$%#%xeFT9CNj5VV$6b~S(ESki?CNMk_lTXMl7NJR&2Kz-bkAQD1JmjMXVMNH{^=_i_@^O ze1q&KuooHp!&7R2;Y6ktxy^C_+ZXeI8s@6tKVVg#3yle7Dfi$osQ%mfXl!pUnCOb< zU^*UpS`i^!2OBE@yjg%6GjW_mr@y>>f_F)$Z+>1lVRd8E{ExWXb~1p#za7<={8;~3 z7oH3P?|AzuX4MI+Lun8g%knmHly;d-WLdX(7T_7$;(!RV^7~lIc@YHHmF1$Yz(QYG z(??u4H2}K3>A-bpm4`0^W5f@cPm035Bp!FRYf| zS$VsVwzIfAkx`B2{o2%_4;0>eB-FGZvuHhtg<9WqvQBM{!FnWy|LoC+F8n=Godc&i zRMR}m%t$&{pAgK|%%lYQ=4nd2E>9JyK2866#yn7S2dX5D3ZCIcJVFl;{W&OYgXyM4 zP9{AM2GA4|v52c^OMra=f0ldLNuafHzK-@bafHt0<$qUw>o{=suPc^dBX4$25d{1< z6?2&#vaiWr^Uyp~j(wTb>k|ECV+PRj+b%j{3>{02<#&ksX1Rj3+x*_G?{miNXz9lbz@%axVN;v-7HA5DD=l_H=pUQ0Mg4z z$GN}L#ycHH$k4^axs-n#}J>os2khMP?)gqjnq>vW)Q`t8zQ}-qGl_)yI@xUtTnCkRER&IjZ;wVf6}?XV;$b zI1Dp1h-RC0)C`2q*)I6qKqu8kB|!_#$~II6YH4F?S5 zkb`QQe&fG`2&K>GqilHoxn3Y$C)6Rq&Zkmpg#2Z1aKNp9ulsTMp;}F~Pa++kXU^0O zEDPU2eoJ1@FCI<5r;q-=0IZU<5n&L+Y~My1sw;^wXMqq^U-qI~7v?B4iP0oB=}qSN z+0TbH*Do%_olZBtX9@TghGN!OSBm8o4GKb=Z+$J-$RHF8>FMjUxyk%E`{$c#;Ij#-GVR{mZ~U01B)V-`U4+QlRh z7osLjt1W{>R%Glo;xHCPgH`FwO<=I&hSz@PGw*~frY3o5LNw7ipx(udoA93=Ong*Y zQ*s@xWAp;KiK^03E(8~&&$Gb=eqXohub&DWfi~Jdq{urajypTU$J34yiTtu_q{jE; zJ-rkAc1BM*ylT=|u~QAQ=z*}zN1VLdH~S_R`cVSnl0OmX`ooeeyH3C3QQsV>2IZQO z^X9Dwgg@?yb-O6|S(2GoasKi{8I86(*D`v6i#YVB-B7>2u!nH-=J*0uL-8%aXQ;K% zTpwr75!U&}J&N7NXfNK_%+1EU}Mm+wL?O_4Rguu*!a3Fm;MS|X{ zVL*J`-iK3&=ZSe$G}4AGk1TY|eQ_=!^NK_TO+`&TIy|dm=ZQWzlftvYJ*l(iUjlW+ zd7}5B?|qOTs?SG47?~u#r&dw}vhq#@Q#LLT*H7DGqglXFA6^&~6c)?<6R#{-mogqWxVKg%e2M2w}S=eN1GMZ*sa<@b<}6)l>%ppJn;$Dslmc&Vy< zYFx%wKP|bhSt1Y}{Y`S%r6D*4V+0<6yt{`0`&!Rv3%^ococa;VLJ>}{zM zrHac8aq83!e*lu7A9FXs_N9QygGq*x+aWD&RrrqQkpYVoceptG47uHUv z5>AO7xUT-KsdVcT{wv^Sj&eogNe!(fg!9lV-eEp2$e9^oldj(Kmpck@ZLbR#J% zUOHtt=1<=-ijC5Hj-btso1>(9CX;sTyk$#Ejjy?gPKDf_D`&APok~)`qdtn3t1O!- zaS400MQv*|dtWl-lsh_f!)WJZ-sxHBi!!exSABu;;RQ1v0QPU5A-V`MbAS-<3YSbC zLfS94p&0M?X5h)=AIh&h$S>3CTxLNq>IEuybpa80Tumo zCB7YeKNrC^%2`Zb1-=Pu?2X+%ZIQyp5^nmnbHw>Z+tf5Fomf~KgJ%x)H6?ZU#Q;7M za_|_}R=e*f2&Kp8|ABKa9mHlAfAP(j53ij*_hh#|v(Z}hNst$NLnPkzIjnf3jL>J9 zjo<^P{(?~4lJL%~N>Bn{Q(Ri$rSiAzFmuf;(eh`$IcL7h{o8BA?#N0v z&-N*wcF(ov|L-bup zukiKTY=D|LC3MPBlVgF}x!No*ZFEOgsmsAalP~+M@B+~ddnYQgWkKJD%R)#gcl5t2 z^-B)a1ziKA=nvg4C||nJxXfY8Y|w=n9jF&lw+AOLjNeX&EbHh(Zm`3%%kpV+_N<>B z2b(msYn8@(S+Tp0gS+3>Q~T|?xAg7adr>ZYltx7Uu7McaCWma6 zn5@XIZ6_=0Oj;jW+ibHgiVS;BrraVEaTDpn`81O&3V1OfVHhfA*D@a05WUsMlEaU; zB31ZYJw2;&XMC0mzKa5p5Y70EaK0)?(j9z$M&3@M?U;{Pn@59Uxb|*J8z&08#-$TK zW^aS#y7yKa^itc;W~Qk^=QFlGO`7K!66rj2Ai0>Nw&K3$$j|^W{(>zu+L=T1RYEY! zI`-Ju`~>$sOeG}AUXQ;P5_V>t#a|6MLXACLzad9nOQep73xLq4yGoV%^*l1!-jr|_ z8T><;>nwsTo~JOI|9z3vmO5jHg6f<1!ChrCqjTHX|L(eol6L(usQZ5}ZjvSX&PNuU z1|+iSj;bq8f0-iLJ@$Tim!DTlF_7Fol7TU#toI~Pv)6Up6yuSSFo^OQA z>UM@XwGN6fI7A_JJ9~|JIGJ1HKA2MTO#vn=-NV=>zsi>Lxa)ta^IUU8Vzw zIL%NEO;OZbEsZmd^j=s>7Kombi`!1$Bkwqk%%xOU5F(Hg4_-u%9kym=SioN__}U5- zA%qlEkr_kb8QiM_V(9#R()yU~0xyxWW#~w`vg0>Q^@L?F9(%_-Lfxg^dQOS^Q0QIH zBV}OO0|1Z#3{~5xCNcsA(N*!pbr_dAg~lrunc>iB2RlS|6#yd z)q*NyjO*-OIfI-fvU_E^8yFZ7U(>44x39<=mQ!%gYm zG|&O|R~Ga;>Y$&u5|eHv98mAR+Y6hlo$I6`}aZHz4HL@@YaG{_bFNm6^7I2Cbz-!nz5f>W9RDSHC_} zF??5>6&x!5IL;>e^rk8+;n#ytg-#{tZIJ;tYxN`%jJq7Ex&|fP*$|DfR7bcZCqkUU zl(Q_HGlUv+v64qld_w&IC!kI;8D8mD7>{oK}g*IT#qxr{T zr5LUUcfT9=prVi9V6)mV^2(R+H|u%2f^Tj?YL~$bU?aiCuZGp6CY_M|A zH=av|!v$~cc*`mg#@<%}0*pJ+-%>Vji^p&!g%xT!K4ye0*7mHZrd$ff0Ldv=QRaTQNt_J^2N(v$1M`XSO8? z)`c@SYmInpX|2cM6k(Is?@6t9^KxSw;NDrCiVt$z+81%{ivWB|3giT`+lDr?!_~pV zd%Qj#Shh_CUc7zD`fSL`xuw+=iz)_|tVUFK*3!e&F|^8SDsOK#kOwYc#%B!d1me|6 z%;)vtq;Y7#OEe|~7M;AM@aAJ z$BFH4MKLeh?k>E}RaH)K`)(apqu(oxOOG}mhim_F;$4QfR4IDEXX)g&iVCxZ@g+P_ zE{g}Q%$_N}o#X@Ur|3!=IFlFUr7w3Q%ZlUh8NHWTE@47Z!P$7-mHGMN2)I-u_PtM0 z!hO+6fyoW`REx(dU!yO}O<@liA=-$G13jbokFSq6q>l&Qt(zE)f!>(^Rk-lrVj{|- z=s6iYHN_jC%V&|T*{moXJFcl~n6u~~t08ciH@=yK2P^COa@2)2WwRDX();jK8zm1W zqpz>=XQ{X-!rkFk%!x4je-(`z*LE<__QcAU5ymo3F-|&?4>Sh|jR}J_nLX5`l({I? z)Lyll$QY%V@|*A%M}V0+S$>(xZ(6yFmB$R0JwK9~-hP&6w>;;3`t16a&>I=$VHNqy z|8}#a`|N2s6^=l0P)WZ>L!ergS~<<_O)NH?NH1Vju@BIKEV!AS)-Xe$Z-j5ue^nS+ zztwj~ptG zG1YhwW#8}|k`fXz6Y*ekx)z)`4Bw0$JyS~2Am*EHw6?aPMmeaEUc6eI(j%GtNGkLx z%2l4SlauVwd>N3Z_t|X5RXIH5)!ngg`Q5Nt0Y3X!;d3C(p=1{0Hbg`H45@On;v9qB z!Ng!2yk#p^V83qoUPD@(O_AP~fkQN1f3Rf(tH*9~+&P&){4i=hD`Y#Lxae3L80{$A zi+d=C+wu`;U{zEu^A5kfHl!E0n0Mj&X88bKG}dZ;ktu&?o~oXkj?w$3yi}j>56&(> z>FNko5}w-Ishx^Uhd$eGNak{l)GsQIma8cQ&o=s=S=&6Nsnzp}pr2%lHqf@)P81Uc z@BGdDEq{sa6WdT}UYOhr91J`&f9}vTW%A}Q`Ns@wqPFJ{pn}eoJ_9&K?&V1f4_4df z)l;QQW+fu3Efjs{xO>~iSQ_c7Uh+py2OdRw-&}gPr2YG?t!A)d;advA6`5KiH3FIn ze2I2`XBhg?dNhmO!(rBW!IMD)E)z+`VI_u8g`H3VhJ9XLKz$dwvP@gAIRo~I*WX4< zTI(t7eAZd$K&e!3>u^8P zjy3hu26Sn>N|k2r`WDJ;zyYF@&Q)Gl|2VXzI|n$?HKdhl$}4H)9Iv&|kSr75x&#Mt z3heA&+_`|Z7%>1`D8G&Xc^w9Fsuy#->UEl;Fg7Bq$!WuBT0VQ71U8SmCV*elj;%E# z3S@yOiNBcSinm3;NZ-7>`5t2?s$3DeXlNND2&$7wyXQPo$^LTFBecgmaZvs&MPtS7 z`a-7A2-lm27lZd(iJR|~@O3pSLcJ=B`4;E@HrX5r12)F#bTf&0WSgo;7;oHhjit?O zBkfXH;US23S!Y5d>D2RXv!G4Zqv=K!=`;5X7T4$z?2;sd9_+i;Gv(-9FMn!_9C>jY zhw*nU8sQkl=}O%Mj<}f@W8p)WA3WN-a6?e<5$rgpbEfOl@R{1uKx@;FnQ+=mTu$vc z+>-bkMk6JRN@f{x%HnfC|Lk?w+RKU(9}SlP29B>wY+IsSV>kW7t~Y&)cLhv|x{fy6 zCVu2F+oFd1ZtTvnRZevj|GzX0L1*98K~h3kC9_hE0m|5`C3rpLj38 z&E_HLt6uR4*u~0}gsF4sy=phJ%Prj$sf47^rV*L!Sv!0q_Rg%<_SvR=>Z3xjzY-ja zzZ!k~&+|(KfgwkV+v*kmrhQMlty9_qm*1vO)VPuczPqt{GV?O-o#<3arG+V{ zB4)fA+ZEc_3qg-92E3p43<86-GT1#L*c!Um)`ap;=!S&%u4(E2*Dhv_7$`XIz!LAI zYzVJLUpHNU2(5#}DUP6PT(^#_!oNX>iW?}!Oe4h^0CyHAxZS^~qhKVPh|<{Ox+X6; zs*@?S7Id9nG-v z@I#JyQJHx2{d0E{fvs)$Xkc?CbJC`p^Gfp zD(AU;?JUyAYZ%af1Bw29Z~N+N_;|rvu8zu+?uU!DaUs6`wBkJ_KtQ6E{9$K-KH=^t zbgV7pO(um^eN;%Nv!+BsE@dUdvz12?*NlJRZ6&Y)InYR-WB^5x*I}FB)@fPe+u@qc zr((Y2qEo-q6-2F5?^#~lHDCSY9IOGExc_w)*hHqSs4%Vo{~Ajet75oRRNhl&eV?UO zA=-UAD_S-W?x>gS;N7@r^a?gQkqa*^L2TzW8ITZu1@J$U zUAL`0--{c&`eQ<2kBD@0JI(H5cf&o~lqRiY==zPH4s#Q^_PB4fRnTR%2j&Vt-E3e# zs-NR15MDt(A4F81+>dTR*z6Zs3bLF&&ToA_rk{faky#b!d9th-K(fAL+k@gTB}B8QNBhFrZ3l}W+^ zQ3rDm#-vqskM&k(Cb*GIV8QcuWF zN56#1c^qDHVtt#Dqm>I{wx?QJ!5ZvgpgWuv;5&Ukc_m1}NBtj<{A7-o<<1q;kUqc= z#}$x`Q1F(Vn@Yz8>Cedf8Sk8EcTLNHoeu$07X2El2Ufp=byL6l?Y9)2eWaj#Se&u- z>=5KGLH{i~meU#IGte6XVZCr~ZFj1bP+dEG_%%8QrV|+ksp-R1ysiV$+Y?(R-!rN; z=R0E47(3-5NA4iKmH^c>&VksRvFH3EKkF6)9{{b+CVi5AU~75(cj@Z?1w1SD9Kj zr$6sdj&c1>cbY*<8unPcuZOS6*Xsm;752o7cih?7MePS{%+gfOjd-+n1d-H)Dr1%( z^(!-`r;_YF0~m^%Ydk+4JeprZC{Q?Y1BsYP6NyPlg_tq$XZ zAk6V#jZ1_FS4GlHt9ZifzeD1$cgp_nh+p@^q^BBQkIR_xO-il0VaP|aQ2;ss37nDV zrV6XJlHsF~|0JAqY5NHw|Ge{AQ#6{f>-|l$N0TR3PiY{*r~Ud|3VQ3Fw=$x5*CF}h z8-pDbEZd;wB?C@ukb|tbir3lP-WvDhm;TR6W9<^r7Hn&{*w>uW{eTsZ`%UHz7>>84 z#SJdjS_S3*DdkLu*^?o)a3|CR)4*ZK6R+)6FP{vBla%quh{i>o1A#nLk7u z&Y5K}tAv{%Bkvdox!MVE9#QnYJ%4zisUE$c-O7IGck{Ryc6q3~AcTW zBl_t%S+qNY0_GECDiy5r@?-})zt$Lirey+ zSf5f~v|h}MwNBDmffvvL-3u+={b3KHO-c8qKk5DGGD8tBaevVYdk}_+#lrWtg(@&eVzKICU9Pqi8g zXnlO1CppHvljq}`8`Dylil)g*)2eQ2;?2(})D_09zSTb+ZJhsE74zKt&G;Qm-`;x zZ=C&+;=elBI!z#kxWo{Hk$l1xnE-Z zS%FIppP{Oy9MiS)-;!vLTZ;P)_?KQAfZq;q(KtVEvW)xjn5L<|5~BIfX#O=UWdX<} z(?6&F$bNlvX57C%fODWM`c~=lQypg@_FpWo|4fihnM9{X>W}H1@J%wE3;HIJ4v@$D zQ!Mtp9!yX?7C<{mwx?*M#jJGk$BOb(}8)1{uF zm+2kJkigy=x>UsGwPrKlVfc()!Qhksw7EFV1AL@Ihe`h0B7Dk7mJI+;(P&>;hvFNe z|Jm1x=hZkXtC#AL&-}2$zljG1zC-Kb@GhJ|OP;}JMOizz58T9aeqH|Qj2Gwl-kW%z zBmJawIg-j8*d=$g>-VqdC!P(>p#D2VzuesKP02AcRh)TKzkt6h`~uD1MesRGr#WAs z26E4EEP()A}v9%ejYjIhUSYsRe!XBF}ZeYZ_?{;C>uyqL${ku^#aJ^VY=sQ`y!nv?f+@ zjFS{E37AoETqfw%n~dhP8RG z(L|mDm(1^WQ@mf%`=poCS9(^+x2N@Zw`RRhKcqa*>SGl; zPDP(h#1sD_foeUfpCHb!Coj<~xT zoaOPJ;d=2~%p>!D>G+=<%kc$`@Bh1X+=s1asP0IA)lh!(Ec`Nc`e2>><_zKkG$y+q zlgH!zgxz?osZSsMMBmj6`}Svtu8UOb!fOV0L8@t>;+TR^-9F&Zc~OU&@Nw8@M0#b<}^yV2ti}K2d%HM)(fymuk@e z#c_YQ!?RgE>3qj920yo`XD}wP4bbBwaNLwdTrc1_)jW=k|3US)z^eyl#f%d{+5Wfh z3%}jDe9U6Jh&QVJP3&JeG-l`zd=qx)F^z!Bu1yvC<~$m&3W1&JBR#zCTcl&f@OWpc z54Jug8aq=A+YLKY$Cy&LPv&@6$9`^C&vdX*yk(pB<9%Ao$>Tvfsr2nXtovJ}MB;z{ zF^pcTsSWpX%tKZP-Ce|EV?Latd`L1kY`Q+8J(zURz7MD_j1z3(QTOW>fq&2KvCnCF zMt?v7w!2Om9-;5 z+&iqjgmlpq*4Z`3?24(m2*BqikuQ4`-9#qP4=`Nz$gd^xie+ zrB?Wc&FyAMHT1pwL*e69BBfb@Q&=*MErU&<{AHGcK4hJ{wjVZuJIA#AJCxByhl!q` z)il!gc)VERi?wlV|IrzZ<#$tC-0Sne7h)L`!jC4E0z^5-!b*rHp(-iBzUdB z$X?snSCY7|6~5?}4)Zn>warX)+DK^{q=XUlXSqi@hO`?KMB31Fs2?`fNPDe$=@~1> zc$++3Nyz^OY7cnDWV}k;X-$6T9}V~Ygc9p?TUgQvtuYJLS0$-q%cYo+lU%=)XrEHN zOXh#K6?=AL981D_J5B5DVdBR)Blz%k#HC`+!}NYVy?5+pbtCC*tr(l(ciURqWyCnO z_LfN2X5ghTDW!Rbys>podT<@VF7Ttds#tqe&Id}mQ{30t3|}XXzZVTxeu6z9kK<*? z53-ZWuXDZBW;f5FwMG4Lyqq%vSrhmQ#6O%Tl~~S05F_O~p9T3v{Ck35aNoKpajyoI zcrJ6?^jEDVUxvLA?OoLOA?mwRvNbp8vH42$c+{?lc+_$%{G%*hmA>zJmE=vzKSDhH zcbK!g#eGUE(WaSWBeJ?g*uuq9S%|TL7|{CKc2fB@7qfyMS?x1-FKl+ivu73(tvAUj zMDvVh-1W_xKieZI?pDw-hh)Occ$Qa1{NjG#NSFiT2P$62~&y*Jf`sk5%=%EM0|j*T$yYy|&Cs^S#_8C0HNbZJyz>Q2HFk z)3?Wjq@RNHGEa}Rt|_e0ZBDR06>BPUC3h8?q(rMLnH3gUMSO4*>ne0~3;RHv`$;j( zbIGfd$7sR&*h0J{8aC+zZ)q*CM{ztnvh1#Je)F5*cvC@{bAbD<#d7~YV4Stk{CMXt zT8o!xl0kgtev->dh&B!>trnPrVPoIzY%ZZWzPx&2K?d@P6=2&=mH3*+`pxvMD;zXy^rpHd>`Q%W!1V@?g|apC^{iq^6QJenc)Z+0{M zw%>>WrU3HWBJ$hx`DpXf8uz?Oc_D9Z0j_w+JliDZiO(&M=KB>>88G85(k&0Xz0+-9 z&F?Owx2@`>+-6aJiuZXcd;L0fi@~p(|8(K8A#&jXA=Yzz%(rL_lWOHw~ zEY{KqaVM5bysq#fvFCDIzM>>H|4Tb=e&99k^K7o&1l!g$L63$*j)D&tsevz1-;BD1 zUx&^64bm++FQoUEjPt_jP7xP5nC_3~h2AuoeXt>;~ zg^f~BXGI+7b|DKFlHT%+<04jo`L{BL?RQfdkZ0!AJ1V|PefwX;PllvS&lBb;&6m~J zjsjn0SjRyQVm~MJqCWrkiSN>So=a){lm~j6OnFQn2Yss!PO?^i_-AqcaB8^}b~fea z_#Be=Yga?gO55Zld8KU5yREB8F4+LA*I6VZE^4#GUisTI*w#jc<-umoMQI`XI4SLo zl(sEP$TZOJ;8zd)FzDE(tan=xd)z5mH!UYw3-%A%OTuTZC%J5s`S+rXGLm5+gEf$x zHbOcX>DkG+TX8TGKjU8r>=~-p&qkmB2=>e@hVy_`Ogt|+r#)}n)t*`&t^%^~ z(U2H+BSgoON*u7_cfb5;P`~>60ij@3~X?-e?2Ugz3Sed zNOi#b8PBUk$r~^79;LMeeRMnV4PcsqPdJEA9HO-Ryp-}SO(PyLn|K7rs3#sl&pCg% zRPYC!b7d0Gm!(vzoA^T$@rR?fpnL=0*$=5LFTioA%ZP!$8+I?fw%FIB#}CU5nLEAjh!|hE&qDk#=mh>JHs|A8Aau#$PaM7sf;gAmVI&waSqX4AfOkM$z8 z-&|k2hUQ5=j~BI(=v!S|fb$bzxAFA`JLR9M0n%qW=g|0lP{ustXBe5-v(4V$X@Y;F z4$yVrQnlXyvQF2j6VFeg-81O+#JjhIjFa=7V60i=96G`_B4|4@KcNEH`s4p&r3&0- z!Zs$F9nCPXP55&b_B=8^8mA@AwRDVxghH;-v8CK}VKWadM> zl6Hyjsdd1_fsN7JB)5ICdsW=2{t3P;dcBTV$30CkqRz#Kbvrj%{J-X~h!KptejZoi zu<$Lz??s38*sL_Ub0j@Jt4)0@M~}~1GACgh)@%oliDLGc2GzpSX=tC>;xNlxwhp#& zMmSAoK{hqj;p{ZjRtK~l|DR>5aPjko_2sTv%!k-*H9X!YTZVXTBp-WJiJzec9?{RE z8uf1nlSb|kXX@Mr0sjYD1h0x_|7yf+ggl;0bH=q(#Tjre@DG}YO`Y;!PD{WC;sW8wAH{qAx~^0lUd$>SrALb?2K$zGqnpi)KtgrQusttyZ!=fAK=F&2Qf(} z#DgLJetK#+w*7GtCvL)6ock<%EXw&N>#QJs;AFhGt2w>| z{Wf_|-oOgAGFF&x2NoysMk*WfOfZ&`2{B-{@|c_4X2s-1TU3x;RXI%%b`clV#6z9v3MOa?Aa-xuaWWQG2M| zbSb^LX-un3Q-bk&=6{AZrFh%rv>+xlr9HV}Q){~L@9XUPo;rFdr8`Y}xJK^~yAZs8 z)@O$8^5lN9(R8XSUpMZfqsNaE7|rN&nm3^98n7`5?|&MP>*H5)y&B1Eq#ITmx@0tc z)GynbGx)hgh8Hn_{&YQCWvvn8IZy=84Ns6sk#JErMZm0Zr(DO`s zUcFQ8z&(Q$D`HTSjK3SPbx0rSd*&EySVY{LztC^oNtkgz)5JX0J6Q*C7fcfCwb6Vt zvrivuqcv_q>=5Fy(5qqJp4zOyhCU%OnfFY~63z zf8ku?+3D<7j*mif)AW0`jN^;$7Pwv2m-MvmV{DOFdp7Ty>4-sZ5GPhPdDP| z!ES@rZ{=b1eSH1eyoh)4B<>bM%5KN`1(i*8^oZR^z<;yYmbr!|;51|T1o zu>i`_R?3Becz0_&>7@R6aldCu6frP)Y_yfSyr_iBi?b*l)2)g zNp<&JqITp+rrt#~r+A+mVmkPpWRH!|AmTYD*S@x!fuDv4W#_2m7k~j^t06%V9T&v{9nN_1iK0$F}-<(l-`RqcW1irx#o9PA>|K!s+YgQtlMyivi&O;i!?N*1D}fZNNdD%+e=zY zU^e(qXe@BS3nddbPG`C2gZ7oDtP^D#$d}MnvG12acMp+e3Jh6B)@2zfJl%>T!Mg+8 z8}PhSU<1c&hOF}O=gKN+&Ls-l3jf}mD6+~WRL2cRgshUP`+$HS_MFu!g^XdEM8-&S z&Qm7J7{gIyj8hTz9^gx$QJ|Z6(FXJW67E|i+6080r?RT??PN(;ZSe7(TZ1kVU zaC(jE+dm?n!w25AKfJsf?~L(0LHkKFm2-s3*(Aky+;h6yU2~e++YlFr$26w-K+hZ2 zHnk&;L^nNqaYXpkSMCqmnj!|lWSI3vnoNnu2l_PBMl@FMBmB{TL5Xr)*TFA|1vcuj z4a(?$wQiqV9imTm$*OPJr{c^yRKIX+o+9k)w@=}A|Bkn(@N-sf2T^>D$MN2jI`CDbk)3W(OrTxqNT-(bpIG3r4Q+?UAz7WH!%fiQl*1SdV z`6U8Zg;`jxiQD~>>`vvIIR02n-7cDUR^osD+ttF6U952EcIJVP&k;)Jj8zN4=aCNg z5Y468dOk~SHRa2mrxy6nYk7B4{WzokU{``ip?<(eD@&J~x5Timci}xfUy)oK_;6Q@ zM^l(DhW^6_Sk4sbaxx;*nZnblBAtWM{V$>$Fxft)`YiM;kb0BCzWk`+83bdH*===_iSQA&-0=&2!4r z`3J29XS#c3_!iilkLh}1TO6B@xXh0X2lZCyZCE3RKMv|Xp}Yhb)DL_p+GM#dI*%jz z=HWe~_Z#8w7{cG)pmKSPJJ_$K2>gcB>sVkYMdyXbN_|dR)4)&cru{ZF{zwK{9ei8SN^K>4IOF!rQA(ing<==8W3sj%idH4As z??yd`KIXV-<2J&fXApTGg~$8sBtGj-cH!I)`|;)!+5-(*yDU6L-KROl7khYHr0E{l zC9Gr539SYAF)EGm%Ee->iYHxZl}9h8obo=lqT%>jdSvGeQJi_ zZ~ON0b9HW0cAt*XWlQEU@jgv!%HkNw*0{#Lo7bxS?dz=D%+>epDUxipszt|1PStUe zi7&Rvrdrjk^TlqlKQvy$D!>;TO{6R9Y54hR9P>30?{2Wu_m!-k_8(sZ@$iN;;ZM^> zZTXJa$AUao;rIC5W_f!o%e|NH52@q(!yl+Geud-?y=>g+NiifV%}@)6W)MG?;g_ox z`ibw(mDEC#2Wm?=)~L0thWcWqPy5oEf?D{7NHZ6-FLm;`=(W)Ai3evB4~CwX!_!q4 z6pbl$z+h@$np3cnXn_48iQ0`cRaC#B50Vb-+b8TzH=CrTK2tou<4p$s<^8-5>EnHP zbg$Us;)}C9;DtY+XRp%tpK1Kt7sPEFNi;RrP}^(ZFG_tupJ?sX;;j8E)ULg;F?EX} zA1?hCZ~I2@X36CAFP&F_^iN^TDE&UteQT&s!^C&N1K*@RPodwKTdQ}n9MBm!ec=1( z%iRl@r&ez{NZu9}&w!qn|-Hs7fh()_Ez971e*$QayT{Qa6WPASy_ znq$t^g!tqdw#r}hev8`R#2&aooJo`)(9h@FzxNZq_roU2{qRqS|C-7ib3|;|p-Pf@ z=JeQ!7cFwMlio-?2jj_YaQj<%zU`2q-r2@~S7Qwv5Wg`NCS9(mqThy$0sr_cc5yOa z11qF)KQg4{b>ohO+BEcioU@9#9NDg6YF7!h%Pos`O$}+!KuCK^L)wGb^+tOjcN*;h zZ_HYg!S4*wH=J+yQ@#(|z`B2?e6JO8u5TcIr~waLF?o5ri!I~rj)n`x(=^45%aRcZZd9XQW59{F-^ zqgspcALo@~{9<%{J=GiPa}nKcFMR)tq!HSDd}BFeag5L1e-bj&Uf6vn-*TqP#wveDJhk!(HLxd6t@q(h?>B0I_81<+ z4efeL$AYhXf(5q5u-$wg{-qjtp2t99oi_|>Et$!z6J;2AixrXgXCZlUuCQks@m&3E z6?ZdVCpsX`J?9nl8|7wC6J_Owr2BVzr#>Ol)zfdhKQV=MzC8u=Jgs*+(cjJETiLuO z8F9;T#$@8L7T-NBe0w0vnCt7;Aa4AZrmGKNEw=wa9X)}4MYi>(jxE^&y$`=nPIdSG zNEv;e+tVnlv+;p@M{hsE?cVa-^qb_p&W%%2n`ti$09z6968L}Uu9~(x80*pIovQ@n zI4(uosk{u~bKZy8x<7s(Zxpn7FP`O|R8o6)0N0zPjvS81xz@SIib#%JA1~rZqP+Bw z^75&?PFm}3s@o_pZ7u5ny}w5Ldym{zk2Cl1xt!K(BYHJbJ&5@p7!h;gUU7#}jyNAU zA8)b<*&yppqF)Tl%Z{ggD$dkg!hLdMJPw7`6%9Jp3@RI2L)Rs+_&PrlJ`m6Yf--ih z*K$PIq2YJ@5uqp8^fS6&eKb)fKR*)0Qi*0O8|~aX{Z-w+EF!LVzpxwWi@b|;$sF&b zZ&<{^?kss!9R&tX50C9e^N)T%JtFwp>KN9E^Zy~5V?V|nlhjo|teAz3noi#m(vefa z58?!UcOW)!%|ecw@EZTUYBZDb-$CW=OO($G|*a4LFn3K$%(fjj+*0kO#IM;c@`CeZ;<}>ULP6dKz?y z67y1@nYlTCh8=0PgjhZnUo@POEhZkf`7K-V91mgyx~B*~PL%ya_^Kzy~}J+lX&HR9P!dNwoo>_I%6MbBmhpWTONm(a6Ig3s#kET5j`2cO-IXIIj* zD}&GO!n14W*)_puci`D#dbT+D>_6~~bRqZk!DqMP8R<>#rNL(vBf7uuB)DdrUP=hP zX#BxnjQmSbW*j|>3qHFB&n)!J5`0#OXP48n%Y)By@oWJ-TM&G9Mb!38)C)IGk(#qV zRUZTYz}?l!4enO#xxk>ENoB0!cH-iW@IpA9ynnH*bCAmUCvXHH_a0)N!}Pm})=||< zl4rp9y;$-5oql6|RJ{}fdx4g!out2`AG8NBe0$Zv`C+}B^|7A)MwxfSdEOi^C*IRL zUcL!yR+PEe;&}ySmKO((QW;gZ6bDA|{q^F&5WfGjIPlT%ME~qNblWn>c%?CHKgo2R z7N*u)fJa2%ko&POG85^N^dUa6-%NZ0SR{C#DVfTIp7^`)d$-z{jzs$o%c~b@K#{>zq3x=(oS-SxtMVu^30~TR?_J^9cA3z^5j zP0OKjgneU**Jx*!@H2CsJ16`|OG0oS4#5smnW6hdO?T?@np2kt%Q=3dynIgw)os|Q zRV`-wSJ8Nu=x6#%mB@2an{zqt5H~Q-hc9R?XXoN>``V81JDpd@*NH{d?Uy3(AS~Ze z1Fup2QQxh(z`NBKc-J`jJMfCctZ5$0fY2RFq~)UyDUtg!-6-POcW%`4Z4Aj*()6EP zM!B(R`RHV6mNr3_Wy@+wXJwn!0Aia((=Rw4)jBm$t@ADu@h;3E*fY59!5ImBc zbD63KxJ_lJiK#ee%A10i(}{NX?TqoPCO-5I&U|FhPxyj0 z%Hi!fJOuj{H84ou?)CpU+5;ZAe)(vlo`&XV-e2h5fmzJ6bv?(_UiPCgfvNQNkl-be zx(Mm3o#HNdHa`!9AG_r{u^#;lF)8#65i!*T{?*gTli_Qv3Mmg~ZMge%{ilfQjz0YN zdEtxy^iVi&`bzQCGTcA+)# zTav#b<(|7f5wf6umim@)mI{4h3&{f&q_@D1{ox^T4kZEKVzKP8ia7ONy!-i3bZmst z!HKvII9CMTFZi{MLBC2FF>FbbIL~F=mb9P7ezm4?yojx|_mSM?!<~m)$J2mbhO-g8 zkJAM9fgulv;gm+$N9ys)IR2-=41cE;F@|2EHvH~`aKC=UP43h&E0U5$e~o=%_qw!g z!iOl;J2P46Fz`SAcJj?3)LeJZx z@sr8yS1~8xmv9TU`(COS_4Q0rAKEy0J_LI+gua}PNwI;+@LQ(obGSnAlg-iaesP|Y z$--k_kI%0Veuj51`uQ4p3-=duQ(5vR;7BE17jR0Z*DB`qwj#~@egi)*5*OdVUkYLs zwTtqe4lD0sQC=mLM>4nX6~8gJf_Ov@6RYdOeQ^e><1rVm7V*j)m5lqhIBpgHF~{K_ zz}M7{Y!Ay~9!u!|70jc@FMo>-W{ViT_)YIZaW42>&XV9=4q~BH>-RkSv>-PZ|fPgWEjPe92it zda0=ya%6TaY%y%Lpl=SBOD!WSG}x0h_U$7%eAnUNdBBzXv=;a}Eh2iure`npDTC6% z=LtB}P8!owGQUrIdb-51QF60M2DH)~cuh9Fb_>c{qTlW$YR@$0IV9`S0>r7FbGsM67nS%P(^rBi{BbYCGCy+;9FGvC^r0 zoX@|0RLI)kKiMI1?N<$9#vV zPNO|zAK^^4vHUk2_f^M>F$uc__zf5_Rd8m-`QyY`r* z(M1lAQir|Hy!N3jOMwU6eGQLK8p_`$`jJkK4>#{sfe*)kV@tFGjSPB$R-hB;WzfnZ zv;3Gp;m#8Gn!!C!KR4$w@v&sCHh@H{`QHN;?o9rxfWTC>DkFeiQyQs31*hTo3i zr!=`|n{=^P(A;J<~ELi@lWJ3|~PWAC2fba*1Wz-6z#Tw=^>u zWo^J+FFmWFFwy zjpoA!H!Oo1CX*_o!KKWc$*CdM=t^S3q-Y7e?Tpj~7er<9r)7F zEaFS_ekuLmNbMe?az~ujZLX6dCM(7~J_>IgureR$=wGr}+=mxMoHfO(0bueIFY+vX z{=#QX(d0XJDnU!QgR$X^-`PU(FdJ8kr=s)gRADKTfS(A_@Iy*IBJH8eIpi!1jUdiW)%w zsqf8ao{MhxfPKoK8^8B>PS8yLKcHDY(F?wF2Ceo_pq0ww!iLbQKFdV3G83)lur&s) zhA2O1Wzz3~qS0*U1C9zov$Uu*D~e661>Fpqt^5~g_7u?~NUzV|Hy@|;H&Nbap9|7% zvb~(!IO+8AEBwru==J>?{xd@E zdipA&gKb53 ztW9KF_s+_!&7!?~l*Yqmr9GJB_q|RLvvxa;$7)Ig-+o7)@XxVLCD{;r^GhEmx5+0k9Vh?%vGf#Ykm_9!YcEbItAx^ODFo z2*;He@3T`GKXXPqjJ5FbAB8V&B+fnQDarTB%(wl#)_EuVi&m%KQ%t-Mv32&+ocX5` ztK(kC&cliXxs%_+A?C#|B(e58DP23{AEM7z#KMyseYy_&bfgaJq27z->chZzsv2FquVzjcKXmdb-Zlo(Wnc!NTK`EDS-{*6uM?t;c)V3{=GJq z(IBVRU=2Xugr2tfeVR|n+*aFXmQrhq_1Fc~a;l{$Nv*pQ`UF3NrhTkfUFN7yx(DZe z*-hd%&RDahV*VR;Q^87DsFXml1xV<7A<|4VG#5WRea5KUja_ zzb$$vPW4$>dpYb|p~p|3$}-yH70uW_7^r zgbrf{mM`gsS)@ba%&&uZ&KnklO=w$|29LJjivJXVB-}{}6s;z;5kW=cxEQe8IlV zlJ{wC{Js`v3QztcI9FkRHFQwC!&sr*V!hli>E%|9X`GgjfkNxO$asHFtE^Cff7DfI z#PYzoCFlq`4f1>KwsOQvs9++-M1X!Hj?@-O$PFinPCH)8ZN7u#1(cm~Uf0V4TBVKI ztT-o1(8L-2zhaMc95#PyJp1H@y(}6|;&H{~#kvBXk2{XtgZN*N1KuV2@U!Sx!AH># z@RI)^+NBfSPQEPgp3VHuB_qF$=2sQ>h1|pYXQH_!^Y5q2H(D~1VJ}`JP2=aDMfItC zUKdF*oJK{GsSb0YNJ`+baiLd3*98teaKCXjJ&nGLBpW|FE|M~MTZ*KM_;-Qcrnjg~ zt~kU&7H4T4`aM97Zo|EIG4+M!>fZGt4$9t_L>!d8vcOf^E6dzZ>q~lhFY0|v;CA3o z^Em*Y0aXNc$U#7n`$sG zz#BHbM{_z>@C8Sf%Fn)eo)y!19-E}*a~@Q>)HkGLJDpORrG^zO;uyWjjC5(@_i3bC zqwiAOf@-R_dJ6WIX$wGiC+U+lQ_z;GeBhawrHlo@GTF*pJfB&L=Xti0+#&wQEw;74}A)6XSl|ktp-A-Tim5{?o)cN4Yke)e9b!;yg#|mE$NAA7bXO zKLCF@BWB_4RuPws(S8(M<0;PBB1YRY>R52?1@9}P;Z*D~?uCHQ#c{p^ip=XcMEl#I z661s{aj~Yg4Ab|?A{wVTY6oOH`@C~X@BN?}c-s9cimg{r;Wr+K*%4wEZvVV!{ z8@e5`H|Z?1B`(ukCz+f=Zd7!8;ptq)Ia_;O&Ii_Ob8si40TZ9bYG{$_OCTPQ9gDpr zp%(FZj!P`x$e&-&l2OKW$_yv!IOSkIes;!jqC~kydDsIs(*ADD70eUN7h|r3?(cJ{ z{A!Z5u+L}f@pY$B|2wJQryQz~)g+_+;;f)bnJA-Se#(?DTD``ekNlCcMGkzAC3(D@ z{?D|$WGV;eS=)h=XA*k5e`Qx;s$^e)y#)JR@Y%%+z&}pXZ=8`Mj{R4=L^~d#cDVI+ z?2*|5v}JT9D-2yTcn^G}0&2@9%2USaR6APA-zRJ<`j8baluY?3`yx%(SxFAUf7@Fe z6T*2H)jzxvF)dYK?iTWSxk2LdQk=DHl8H97FR5F;*67cftBW^OR_9=pJas& z#asi~XO)zZ589xd$ayiB=utf={0Ch`j~0f*)XRM$Vnpe-q<%!8Xx+L7PD1duV)VPfwpL55_e!)$n2OnG_Sn4?J<& zvkwu^IZXWJ10ACVIA#V0SYNgLvDj$2Ni}Wv?bMw7APW;EYILF$ykZvTgx>-tVE3nYHzDI4o-lCt| z(>_AHp_A{&(u~>;$OdujSSgLUh2(M*+g83ij_o()EOid2a9&&Qk83Qq+?=*>)8%Xp zkH-HJ!&Ydt_y=bQzpA3Er`>}+4)n~1 z&(oNrZir~S6lpFJSOP`a)_b5Q`N#Isej?Q(hC~hC&ulC|qFB7yHrh`}PTE+VS&;Qm zT*V`?Z2#Sww%a91I2$Si4mH{cSqu95TAi{3%&hXjHSdn ziC%Tk3rf1$?1-yY)Ri+r?XUa><*A4faxZX2ZVf5plP+<$yO7?c(VA$CQv>%=8TZEV zI5ZsJ2mT5yM%e6{C{24BD_9)EmZ3iAID4VD%A<>#h({hKnduPmw8v@Bg6$Jxvv$y0 z0&QX6k}vW7zQFMz(F}g9)Xr>r#%c75h)d^=6LH}-k}M2azJ}UzA^h?caRRqs@o$1Q z0Tb}!h@SAf<+hnKS?;BXy++>&v2580^~D;`@|-cMZ+WaZ!!gAm1_;g^OkVg@hL(3k zVtIJK6mgB%HE)~Eui3MASY}|Ynqo*cYvDSF4;Yn^c@wb~z&~OIp5n*UC-+*l-wYi8 zHPw5{nylWhGS~!O^R~uSmmRVwX97_tQ}SooFm+SU)_SbOX&M@svp0n()U4WYAxh#;5IC$ z^tki&a#%V+W%^tr={LZ7_XcKS+UQ6owx+!&O89z6rwpJ!J z+fDR5O|q5YJgDQ61NNS*x9yjc%({El+jfoQu6@|w5=2>ZsVvu=1NKxY)d{})3u?!l z#L-1B6Fq*(;;jc+LTx)RkslH?jG?xpjlj5liP}~gBk0;gZ5vit0A(gpnIFV6-`m`O zPYrnI9B6%t+HjEMyX>sDTW^v~UWI7Wqqo7Tw;@qVx4FhN|E8NTz1<9A(?b^xoe9EL_tF{Dz-cr}qDb($%b;vh66|HJQDz z{XxI0nYp=0N*sBU_~KH@+M7dbWD4zal1e=QQ@hiO*n{ zGWk8h&~M;RaoK);FA>kiPVu_}#e3>qr309?XGvCh$;7rI=JFz(+a|GO$69gcq-_wf zKalPqr8!OikH@Ql4%(mo8pi^d*SaoRju=VV&$#UayLfCB-=mbi`poKn;3+k{seXpD z7yn$<*Uq}~VVfjBGv9NN_#N=ui-3PkaosJe&s-ujhC+vb4Z6s>cJ8 z2j_cE8o#^ekLP=y@~MqH?q~UD3bo~o`WWuVfosjAyMAUFTirjT$7WrgqkcA|u)+j+ zpbxY+y`erfq&(6}dQLO?cq44?CAWQP4oj|-OxB+f&8Btz*Gv<8I{EJNRs8|lrvlHK zbG}Y=Hp^>fW=kZ4)I07uscf_(R_)1nQ4h{|=2AH$q$juaO{-g(O0-@$6ZelkoY$J< z?d7A*@jm~Sc;97KmJ1t}BlQ00Ldnx{Tg@IfeIWZ58<-13!(zw+uT5LFkv@rQV=FGD zd4chclj6&$&c5udS6gFg?ha8IE@0i<=Gp_BlOv?Ff1u29nu!mVq?VR#l+0xo;)ToM z%dKqudWU4S7QG?WB{Z=lQyk4P;%C@DfLEVS?+(5x)zNya{0)`)dK_EUMtm7Dc-^$F z%{=ylwRS!H&Z*w7-X`qKU@uXmKljsf(`|w$;;hRg#aQ-9u@=jmSMAwZf3hznzB@u` zYHqu15B3_AkGVNgrutw*8MsOHA>UD2o9J87ZP|MSR!(9q@SgDg6ww)bJHL0L-#?-6 z(=%k>s6+O>583)nqT8GQpKj6U_8g@(==LmZIsZcImgb#*)tvD8db`=@UupKeZWi

{QP$eocCBGE3$-AXzqM7euSl1@+ zQ5vK6+iLfi)+TJT6z4R1Z=1UZ*ia2pdTlASKMQj=ndBVmpM%yo?wf}xPbsY-JWHpv z823l04)ous6Lrv7*|a!T*G_FZt(cuim(rm2&!RaZ%cLXG+`t@xUWECP_ax3>na!ZF znfg8Ly-uYMn-^TL3Z+dyRxB(lnP6N7yU_9tc1{=5#In*M7q#QOX+xA1#}>PNp; z&fnC^|I=^K`40X6m*%(FA>V(PywQ$%1OD{$c$WLkTfe<0j&zWNBs+D}JRdrq=IMdH zciZKA{8avY>JMbaqskQEX_Vg?%X0S;9r;}f@_@fl9>;C-_W0QpD|D?P%6H?fckLOZ z=W}oU)}D`ISdzwKYu#&qxy@XBMYH?MaWkAG1Da_~48!L2)_HqAS)}?PANpUo&L@p& zl~>53o`D2W&yJ9K+IhNI-!T0zx$RqfP-ZDTzXEbA99?Hv6J68xQ30iQL`o=1ktRq} zAdxO2AfnPi0i}a<0t7@vdPhJhQL0EU(t8ax^bVmUbO?l+Lh|MPe(YYE$y_@-vnME??nXW?3RtEehXdIU_(AlPIF9=O%QHr{z6ACf1#J%6#Ue(Xhd6%DK7RGd3jMlkOYWQsbav8Fn&=s25Txm}?{(tI0&dLg8`7gm z%hW_MlUDb7`Td!s(sPbIqo5C?W+=ZKGUwXBcv{S%~v_h#4a_5 z+IytR1Dvv~TiD{PmxvnP!S9czt+xr+?+DgwU}$!Ay_+cU*4f+>A?zz8+2=ID3$cMq znV)9w?e_f4m7jZdxas;tlW={9eV4GFm=BkGFtp0?n90jE_EP%=%wq98cgAzKd?G8F z(aM7_)j0OzezNgRJce?M&5^%FK<|ipP|Tm=stBQKm88|O-k)XMqDE$Kv4zlXusQw< z^RQ9j{miY_vd;Rwo$rgWGIyWY1o6Jr_{msGkJzUCg+oj6gn*H4^mU^?Hb%_rn5w*92Y*GX+d(KtM zF#Ta>iqOmJCylSEN4HF0onnJ_Thij|a(=l>Lp5Ev<7PJae{%WHXk2NK{G{uAJ{1f+ zdT5TZh?|@1L37WSx>1ebvlN{;j-gHyBkxjLALM|o5^f_9ZO@gT)q zF7Lls3zMICw4(JKf9)R=#Nl4sXT_YOq}96Hmf{1NuIkMMdbx+R=EEkNdv50 z_|3n8lV%0EUpKQJA8R?gmNu3aX5Qx)vVWu!5gT=aN-)XfktuZEX}NxBvVXtPGjYbO zIcp*Y!|gR!#eKJb-_6fCIuRLqHgG_DgA-(Np}#q~PWwKW<1)Ar_QVcnVx zd{kJ{#hrbm?$;k9=l2!=tirv1C|HGDoozP=2-L|3J&NHk0s@;{0+hiR77{S8E=rz%XgjHc>@coRgY@mv)hkefiN zoESwt#})dD4n=hSKL(||BSk&YQ3jEb_r05}$K8*z8mLqV9Ay->PH9F?md-q)n*rL@ zkCHYiM?LcO&IfE1HPki+-96C>9h0130|ANbjm#GYGh(qwOBpLc~gKlo(W z&<_5*Im-D{YI&+~*ze1^4V)BTbi#dM<$t*1XSLT72hUNiYRlwK_*Q+LIxLVUA3}HiX}S9z38SQ*bwDMOWFgPgwpuV9v>EJav6mFev^?J{6ODIN>99t3 z&JUk7qpJ){sTS(5{{k#L$Gk;x=9==`I7~i5nzAHs%_l00uvFD+6%&V6OZ2d+G0Qb` z#H5NU`seK=@dG9=21hta|LqNDhhX>&EkUNUCK7>O(TCcs8Ck^>*MV7fGo#;6x&0O! z@`SNbq`Gz<8xor4@V*HtQb|PvKlboAiHmbjlVG^C+*G1XZ6Pap(322~s7>mNz#nnJ zfB0MJ`AGI=)3sVZ_fdFvkTva_m&LO*`pSu%Kij1BVY-#+g~gPo0jWv=a`=LW(9HW0 z$M`Fuzlu7DOD%7gUrqJIO9)xrFwKkHjLp-z^xu5=uk!BYW~v+SXnTL!sePuYr_b3k z#Y!n}V3eKjrbRw`!(S;e7{8Uv%p@EoBYMK;N{=f3T|1vjMQ;B?QZVAp-|~~-%COhg zW<)gXI);J-&I4EfJ29Va=N>=a@CE-1>PLBVVwQ$ zIYA+&EBv2+!o}BoPe%7HmF<1DXHDM=!fa)ruhz37)p=v0wEVW5yQ9@@!YF0=ax?LUvZkPSx9s@YG8P1iuDaIGo@9=I#=dQCKA&Hio<`6^s6`V0M^GeJMZClo5@T4x|vc2d5+tXR;)?om3VXg6K2n4z=D+c z+1(R?oH3CR>}1erjQ^Q1BR+kTIC<|; z%IGRSa&rKr1H5kr)_LoLW7}jou93-7rd*KR{81L=uXbR#PI24x3^Q7zkQ6&0LN0WB^N;RRCpZ zFqPN*M+co=&@|21)nmoKX69gjfn=>?NqdGFlaOZJCpB7lj(=DIo1^yGE8NENxskO7-~t0<)F zoWnb7hDx0Fa&Vz#dP@E>p?d|pGfTnFxDbPPTcS8~Uhona{q6w&23#g)_3P{Td{pU& zX9DHQZmp}^<;-IA(F`-fo9`R+P9pFWy#3=>xe~eY-d5Ur(9nJ+OLC#!_G~+IU`EWw z5z7DW9i_LAMwSN`ZQGWNG)PiKq)V;gW3E$#QPIDDE1I@RI?kKE+pJMeDrKk^s|7Da zEJeIoXKrSscHFb!+0Sx!5Hn4*TlAZp1N1s;b<7Pz5n0IREh6*d_i~n9=fv(=X63l~FVD$)(WgoJqA$({!=)Nu-)5 zm5VE1QJwDN4t*_d7sUfA;9d+yRn|rVN7`^X|@BA)8p8&F&CGAdQ`H6~z%MfB~(Ob2m)`8aC&+ zhBA1MApF1*gdr-A6@ZjHw}4Dk2u69O8-uLqw?F2A`rHsVdY1=|bb^xqN*y8hxtn#* zp8+bx7$<|nCrpCb3RLdA1gVqC^G*>3Te^wFmKiGRx`h7Pt-#X#w{y`4dG1rQ>Vf^W zj)`OumR7zd!iSZ;d@pXz z-~$mCBnXLw2>f)lZ=dtSJ_r19G|TJb$E}85W%j7!JPHZ)MEX>}YCq zNE4a&A=@|P+G2McapiXWd>qdMk#dJuNqw962iokhnMamg;)>_`cg}`$JDRPfreA?q z+S`6qf;ZXV&AG|K-1yVwt(-tN)Xj5S(N_n3RqwiX@BrJj_eT1$bP@huA3apOb%&4m z5qfvhLAzUlL|MnEX3(OTk&4H@@rsW@|G)H>B6;y=+cy`eg3r=4&+JWlltf;^nJxsl#m!Ib6YkfD|eDCk>Brb?~&hW!KDT;AL8+ zpGHTkpPmx)svp%3YBuNe^yHojVIlD_cHzM-u$&^BR7KzMMLGy z8<>Ks;}&+*({5O|CdH57Sy`u^KCUxddC^$@OX&HhXM1@bFvv5*5zbpIn9$Fv$^G)s zrXpv7`%w5aOLK_k&|H>m=vjTvJNv-O6Z*;;o;l8^P3C_RAWP43%`m1Yy?~xTEc?_8 zTijc>{5r$T&WPcdLOW*?AayEZ&Q7ohl5?2zlk@^=Jf8Zn?Pq#Pxji zb^{YNjdRDx3bZufkS&?=D-?6as3ox%=v9$1PJfyScrrNqtirv!fTyqmRRTvzMQ(K zD9_E0B^_4eTRp2N@owFDP)shMa(;A5*Hu39N@|{bGWg$#fo7UbPfeR;!mU9B;EKOF zYB+Y4`ty%5g<4?isw}YZ{2nnZ>h2+nPNJ8!+13ou0bsEw)ksHAogC>`JT;@Fm3zfH zFx3IExqmsVl({hLbICa$FL`7+Hwz|zI@CYPe&=1R@Y6wobE_l;^`p6rd@BP}2!B@+$poD{0CIr@91Jf0Fwu9AC#W z;&A<{=ZVlBs-8pfibuwfZA!Vbs|i2u@$h)*Dsw2%%pDTq-F?k7Y@sDU4B;+it;f6< z1dDrW`Km%F2tdcf#kYE63I8xML8|ul^KXRVzo#5KIlMs#yrgPe4zdq_%2WIadXc2? zzOB%f!38u`^{f5{=lIdXdA~Ku>T=%0|FBA5w{v7q6$B=lLO(GqZm|G^pCVAxw}Hm= z+ttN%aZ)AKJHaZ(%_$JQv2=^ud}}kx>%4$R(B4Ex-L!`*HomJpy7VW-GP;#8YsOsr!T3tqtx9V;Wqc2P9|o_`2B` z$H-YD9qpGkhnv%eG_LtKudcz{T3(R5GMsWU>_xqA(|_Oka2O#feyv+p|NYl+L#~#! z;Dp1P=4&|XCSb^ar|sSe;S^(}36%hoyHQuXPKwzT)LmO?#ojzzue4nA1F@ZtX4{53XhhNb@Sukx4N4?eNtnsfii3gsb>Ot+&^2IYx%1HBq5b~IhU{N& zK#wmU;9+Ayhhktta%Jp(Zg(=8g71%e3Fo1anj3bO3w2ayVEQcV}IkVEk zfNplBaI8(nvgnJr_wtWR85jOzsKGq6;$Ux@rL-LCJFh3`tShrpQSFy>(^ml=7Vje9bWoq zY2NLAv6(Ka9F*8hr#)Rz^r|4beQ)$a#;^n%JWO{4S>XsOkJ{D$iVjsoBb8S~%j>;E zdiYut?5rgt_ZpP=BH%NoRkigNAcPw4XNCv0*$zN4&EY zvuR?v3x|p}=>O~7)m-=cHM%j&sWPWzc0u>WOR-X>#*zP$@o<*Jc2B3or*$AHI(gH+ zH+Wx`M;SkTdY*q##&*H#doASO{a|2vI`H31R7kz)-#ZmBXtRUnfyefSPf18^~rN5j>aeHMBh4(c_Yo_ zL#=#c_@(c!lGME>+l>0n_|QKwDV2s{rWiSL z1kax~Wjw`Yw@KZY@R#z6vBwAH(S>z<3uk88veyf0?5b!octhUPNj3F;U`k zfI%pJNE{}{;*#-~n&*JKf^p*wbA==5U!2AAoG(eysTq*^o@tJk3aXmuE0Uj0e}~Th zF7Eb1L~RNzr(*@`p6|T)rDMkNmve!=>eABz`@1}XajE$~LR-ZQ4+UpSyxJo8tj&si z5*4_%`cJ$=zghg=yALe%8Q0;s%Xjv%{ljfPVePlFHRfH4ERa1s3GO+_{(&f zdpprw%Emv0cYN<&r1-E`L?5Rw2i1L0&y_Gx2`%Csm+zV`Fh^GqG>AU&PO%7ImM_4)ns$Cqs9c58yY}Lt6|U_3Y`D zb35EP&QBY9z1}&LI#vGZOvH>>^`VgVC&yGj@0jr|#M)yY1I{U)R-m=7bA1_8+hk** zKoS5Z6;=_$w-ncVys){K7iDN`CZ$Z8(%%A%)Lg^l<55vwy^q~~36wLfJN?R<`c^!q zZFerTx2`a6C4i^&hhNhY6H5z6?i=gsAT|?W@5lS zo&kjhlWu#Hq>COa-enlwpzgmDT3ePc)_A_zZI`{dxj8s-Ygy$xuiZUVr~>@;gr8K) z?TgtPs#?;wx+K9Jt@%CupLa4;=SE4u*LA_+fm zQqfO-%{Y7Ri_N94U+gio&D_BcxSo0=J<7S=RP=SUm)rc@Y{eiEo%4(N+U6D6K^yWO z*Bf{u-0i8RdhP3zCjBr$-dvAcbK1R>l-9UKdM+aG(lc<0`IYb2BPy1z(dhSalJK?GZGxB8EMXl&{B@Pl(SJ;mx_eacV9*pL}oJ1 z@@?`L3iR=R6F67%)>ghVd@Q^EMgz^yjTeYleW5X|X7Qzg+T+Ih+n(h}H2K;svD+%F zSCNX$h7orn{6V=C$I?A|ksl%ff-`(MS_Iy4shd}y74LY^u50wn|G(xEMg>0d2E80r z)W_u3L6IQ-=nd)96UrW*&T@_SXRw#)$(INPfw#lR zIlJ^b>?`;GWt7`dCCpZ44P~yI%~U7{75z17kQq!o-S zF;LL`)u%Jx(M5p^#Np32DU3W!oz*k@OTU}nKPiu9=U`44Bymf0qGIlF7onZlEGYGA zTS`lE!bMHesa>P9{=s_s1Edmb%ZtvT`eq#dmzq`am~}y-vDl@wCc%sXRIus;^H@)v z5<}8a2b*?sv0<&>z%p4ed(@BT*B%dC|NAp_tDRuCr7lfUy-J5he!{OQPa)f4Tx_L`%+|^1~KsLJmC7E;Nw5T_MqzI?Wab zfp+Q6B%|7)X~caP`l(f6Wl=!7GnOmqf`u3mcGA|hqF{mIgi-NJ1$Vy*!E%)o|EjN0 zH8#bbJVpM7g?$Z1E+=uMHJu;{KnRj1y=?dFgT*sPRaqhR@=Eg*Cz#9}t(|hvtkdsyPVHyzmq6a@0p0d15M`_Q z`FG=Ct*3#NY4uRmF_EyaHFbadKHN^#PGs%CkNfH~ebX&%8pS&gKk+Rs-dJIP7Rb`w zGo!Zt@)URr*m=ZB4Gos%xp$X}8rOYMaMTC@>cmXC;E>|o*J?qI9@Srrgz5Qo>Vj(c zh4pTxNjP7Ca6poR^4&&jfr|= zG?D)-nKeC;5oK24S@H=bAy#-`UF+;Z`jVWV<&t8kzL+@u%v>|MTSvKY0$32V0+EzX zu09ijH1VIIv;M};I;kklCUkj8;@r+it~QhBneG$z-No-^IbF53AE(_B|0x?OG$@J; z$mEARc-6s0)4Y`0Tz%_nXBYe31``AX#S zA8w#qOIm&U&23{@7P=YMnDKqPUqV@Ff&#kk|DNb{n*Z!DN4{r|0RmWTUgk4ZSLNFw z#ojmzcvg>;E{{C3x}`a*q28E<(VNKhe1V;R>{~*)+y72Z-8nV;8&#_x)2xF1>u*Zd zRNo^`dJ;@D`$2n`O7}#K12MB z8^nlhTv=X{ctb*NGP6{rh+lHS8V7Q|%Z>3Dou~lykJlQ@x|XBdUmgjED$VxarLZnp z)ue9I?}WZODq;&t82pZY^XWKCVD!KKWjdTZsF?lfP=`)S^56l+rHWH6T zDNERL6nvZG{n$kP`xLU$1(K!99m?0X15<5R8Ht2M#h$aq0{XKVt3H2_XKDH7cF5N} zx44qv5K>w{-cIT0S%9we%0*g9j`A?bv))9(Q;X6sgYOy)88ll{1g* zZ62+`)7WeOU30aJZ@AtK&{9cw7vNB|9}8x}>N@nl9o~|o4WT-~F{AnofwS2lL2TfY z1re3!=f}8G^{JL2>DyJb;}tk>4qj@0W^e-I8wH<~p~|m7*GS3@6oO)LTfAPye$jXRBvY_MfEbNlSfzO@(QgMFN%4F<`78tqB=2r1 zH48fmc^&){svdDWg9lm57Nc0qH{#k^n07W^EBY&J<}01D070#6kP<%kBSF)=y6)B6 zfIGi5>da4@%`&Ke2h6;h{H?e7G@6tJ++wD2Z_3deMH$?W8K)7<8l8GkICPU_-}rSh ztLI;n4{7}6qpzr^7Jox$60-|h{~510g`WvX8Mh94p6s!zbcuf(=o44Zn0KIyiAu1U zReg|`@F5_EKPQe?Z_swu@GkK2(A_i&cuuae{#uFzW!NLAP36dp{XE^E|MBQr&K=(S zpfqihRW9YlzV69i()~BVlihS1n%XaBGe3}jPCFZw{FJ;*ES|Z7xk3}Nrwd#k<@-17 zIE^r!cUwfCKQyV16H<8tTz)qMdw(NR^oXin*N$C>FQrrcw+XN_B5C~I&llHu)pJ+> zs)W6`dEOqenb!Uki+(#_7LxQbupS?n9}b$mGn7rt54qgR3J#xy?gEHWwLe4Z@uUOo zP7E6Z2(xXQz)^1T4;LjoTPk68F*Ugdoj-Cp_TqvfPP<|8oTna$c<2LICQ z4HkX{%D5)4Y@5;DbMkeKHA$S7d z8C4s7&cfTL1ER&>YENl5x`s<#jN-vby-qb!qa#DsGVVmkh14@AOJc{w2XYG%v?Qrr ziA1U;b$1C0>Hk!|FXOaZyS*d*$i}{}S9tiRim=CF>k_GKh@^c<3ejK?c}yhktWDf_ z9uJxZ5xh=6kD`des5iu7bCDXrBtYOq|43L(^u(*01mNHtIv6B5f_YGHzde)eW~TT~ zcx<#PNG<+)m4#aT6-<{EBNN`D#-9-V<3((tEHewc`ilUT-VXmu1KKE6lV5B^maM@% z8=*nLkFVWi3uN5xurjX)T+p5qVzz47s#ra!Y&h3>dpvtCm>2}!3eE_~^I2)$d!uNO zupKjZdmKA?m#6mvqiW406isM2cCs!s9u2?+6T^0V`&@udmA<$L@8s%H4*`Q!!U z`IDu_tu(APLVBKR@Yw99m*Y|rGnr@@V;FVGTd;mGW z?sc5>bE`klfmNmqunR`bF8&dJ12y=Q#jnDb^PM@;c^&akx!aA2bzC>W-#B7(!U)jGv5i+pu#~GW#CzU&^&>iI<-0AP) zV)YYEX`Kh$VRDmeV`EZStVnb$cS^R(xA=#)ZTnc(iJC1tT(`8+Z>`Z#k`X8TGvg5( z7t62X9ixBGw6&KTta4U58+l8(yUu=CbVZgTa&NI=A9wk;$rd`d6nDH3ZwtNmNa@t& zg2|^6yye4qb8sl~@i;~na#|#TBgt$

a`HDq)axXPQUucs^d=q;x|b* z)r)PDq}~hqFuenTWaj@Y%F4$dCJI-2cq={o9YhlIbDP7O<#bS8ts{qHIzYnZ;>CHV)=^5Ub79NZS(k9!A*|X|U>PF+8 z3u!@)y*W%`jE^$~Oi4gWL$aboLvkjGO%VNsjNd_+S4f*>b52iiHo&tgzWjQliGp#I zMQL-X)(Q<+g3PL>Z=?j@z^uTyl45+mW**`AW;Er0Ta=pLvsdKUW1ohhe15`u7jA|i z*ZZD_S(NJ1k}t3FjSmp3%nE+!$%FX~6HH3b;*BA=A){cuif@@Qfr<8fvjPf&{c(BE zc*zpik?&zNN!ol;YCtBiG-d#%n`oeF6>U-K^*|lS27Zijgo!1_oU|}wX_3<~&Gwfu zLGqXYd&+5LB-z>tGc)(0`QVd9b5%(~Q zh$R-VxThTE9@0uJ9v76DX}H1;{tx3T5Q6mMlTuyb1#@~@BiYDV1VI`E`V9bUBd71Q zvyc^KCn*S^1qgoZc&arJ(vORrs~L) z7g?^|cuK)D%mEF1q=`+kkHQFAOAaPjba5pLAP-?9{=h&1Db+>}j0|#x{3z-*t>TtA zz&x0E@}TfzR(Q%$33_@M)57IRhslAdCoyP|Z%3T$Xfs1zBomA#(O!U@wXV^<5%u&# zqF^dX#sU{=RxwLlNNBOm(Y!w@Ou#wcY&gh7)0)XP|hbk+wOM+lLGk- zG!EmG)wi{Cgii&fSaC_|x32uvO@&ScD;RM}#xxMv-d7+}PYwFb%jd?f`e6e3p7=0T zWE*t-!#G7J1PxeslI$Z-VJ8{^1eDhAX9+DP`Pxz;nDsb~D!IU>l7N`hLvvH{G;B$!{@N?dUzF^!rx3dNy( zcSuTc<>`!opLH}!dxZ|n;;8~;5w0=3)-^LYrmmc>wVvWk4V)~@Rc1rW(p}oQzssZk z8s|JF75ct27rIU1$#F36BK$AG;Mu9ox7SF#WDVbvs*SGjM}Bd~g$UL}7OHDQb6 zeqrC^|2EZLU^9=W(P4|ZcJUi(D_}wzz~#xc0F63Jl)$SeEPdUnerQEMlvM8gTYBei zYVX(jhEUSx{R!uj>}Nt7bk|Q2r1| zaL=!L!<&NI`Xif0vNO%;oX}2k_^}wOooot=6DNtx^9q{ZXVz2*wuvA+Ot45nHA;j7 zZuwCt;XCSM8qi`C(bZ?Wj=W?~3(3j~p{!AO6>qQzI77((kh;z*v{!VHG#CzYQEX!o z^`hBOgJvI_m;ziYYJ*rlfQ7iMJ*Uz`=RwA!QZXoDg7Z66=DjUw?|xJo^ifTQve~)y z-4eLSd`@p^+s7ez6{m~O>kQ>&E%=Q=^arzTlY(uIeaQo%%y|_{$@I9mlx4AW!31n? zXL{u+y*^ybK4)M*OCUX_!YWgI)||3N>3N+}=6A0q3w^PZ%sk5@AFas`ppPsNP5m+0M$V6OhbihT@v(Vibg z8+yad*>KgSxE&dT_o%Gv63^#SP_GhN03HsjSGQd~mb_Z5f0MgUnSaf>t!;2J?G+y| z{PB!c5O11rKB_T_Pq~E+TH7e0$J3g)N5Q}$%#yP-XaM&Pn6#RhnE~7)cJ_^ew3XHh zV%|)Nfhu^eGETsZok7Xr$F!1LAb0z<>h|o#IIkyb^*V|+y;m|iZXtvKp5kr4ZoB42 zXcyAA{|fm>`>^O%BX8Caxa2C{le*caN@J=ww-4Wvxk@q|PZc&>gA6tr?41#C6|O)d8I`f$|E1;j?4W69u* z!`G6*R{EX;!f(@x-UmtZI({DlI|Fg%gPDBwfUsNu3i~2;2wgh+&#KYN7;g`|dNQjt z9c4c6^DenGz20tI#vj+Hk3ya82jple&i4lL&Ym87Dy{Eyvz@Vu?QIH;c~Q zKOBHY?+4eWs4TgAS*#l*?}hb4H}5G_5dQ zwNQg^VG_QA5{(5I-VA5<%X z=#TYE2qh}lG8zn$9yX5g9Jf~B3$eIVmv*1~>Ny_YtNc4d`!#6*%bo0LGW$r^tL!j5B3J!l4g+H9MCnCEa$Sx z@rpbW9_)?2F6}P4IW1<`#tW9f7?WWJBE02xV?%t2`zNA2IqsqbD~yI~D05q0&Q)a8 z(`hzl__3bgY*s+bD9lNojg=x3YW?C06%D?mO>GZVW@v1XV%($bY5Jm;8naiJQN+&G z$C?+!kJ0K?4%(rU*8heTn-NXTvlw2C_PK4dtag78s%jNup$w1op|P=4zcJYBV>TQX z13nc>jbW3t$uTDg=|fUZl*ujw(|U%aRy>uQ(TVh7rHcliK8Cda?yCBDt+Ua7AF zhLUf`B7JV!EUO9(PLd%Ul})x9<=~_SHnD;U$F@gLZI~0+atGTD>s7}2BMU@AXd5#k z05L7xs02QaJ?fq(6VFrI`A!8nxXxwy>IL1^By#{gPgtw;HJ696l>d8zZE}p*8dz@= zTUGgeR+Ir5kh1nPML$agi4gKks8S+5JpiIJt&u*`oFW_-tzcM;CO8qqe=3NGZD9o$ zuSWaGqsZ^`JsV3sW8`R=E&?=*!|+rLSGOcdU&i zTfQ7?V$TwZc}>PgAPwFq!ZkAP{Q!HEm@WucCrTm1VIUTiap|K6TG${%Aa_3~p@kI% zh{5oao?g;mOUS?l6hQ{7%zGJA%<1l|L{-W24W>N@ty`pDK~ZBBCJ`*rm^WmjIIBj5 znNbw5-Y0jf4$0$vNE6JuS1R)|7=%$q3L$MQznet7iNufvnxKYX^0~G?faaZk*d{l&vdMHG=*J))}#n$+pBK zY72zi1`A-8yP&Z8+aY9c=29nRCY^Z9-^ZLKgZg(-c;V3$6rNv&c-=ROMgcZUH5!LG z5!#|bVLWq0FWR&02hRBY+i2i#=h6kOL5kM-iRSKW0RNLH>x? z9pfR>8U*NTw6%19a47%o)0(MgGwYJ17mz+HPDL6@^*kMIOMBV;zL~}#?Lcl7-E&5r zv)?tzwj{FHk5y~Tp}TB$G`{-S7?ib$#CW--UkzZH!&P*VzOa7tQ+?FNS?WfY5ps*N z^SkHlX)$%9Dz7l((r(ve_I{DFx|>3l{m?~JRwfd+v9$jhI7&zDW_T3D;r6|vIct#( z)2okj84jkZZ%&PXt8=0Vmo4vqx=2CMIw@Bv->zai!<7~iRyie=M|9eI3$6;^xAPN5 zwp6*#kHL5Q!2??oJbNoxLQ2ijm#wl#@Whj?lPpe8Vo;8rRJ}Ej!66l`eyRM&ur31b zr8wB%Xz0ce#Di07L~Nee?^L&61{oIy1=~Hq@kpZu)h?UPUd#srL205F=B5pTU-dR) zI5`f&;CRJRZ6GK^;zB!!cPI%2kQnt{XAjSUx|b`PyM@d*WPYxUfYW3m&%3w6xep?| zQY@fC`ylS)GRdn@&cza)P1Ah>EV(gmr@rA+jY~p?F_X%-)%92oi>#!eoCSf!?yX`8 zPkhyb{k0Rt_>%}PZLnhfAZqJm;cX-EvZZ=jR0RrRynB=5ZVw@{Cg``Cn`ia2VPVBf zff-^AlF)JD)rr#kx%izv)Zhokg)tx;wv~|WYbbgHWi%zB#zHusmf_ztX*J>1Knd!6-`e37mQ|~B#d-bc_COdznz73rzGg6;9T|> zLON)1!+(ubHX1`v`)w*#_>+{={pWkd``I9qZ92($(udv85~5JN`&A?2hIZRSQjpN2 zr}!%xn#(xf)}75zDfT)D$ko3?MSbaY%HhH6>l%misRV|s)332J^rCOH_gCs_&CzmA zQpQ)iC#X(s%1c7!X$LM?DR2Af=kmpRVHSB~NIo>s34e}-{>$DzHV;U@Na$%j9<{y! zwaBc^VURy}Yu;@wH=k{h#-EKCEyS*<9JDo26j8U-FS|@-n;4l{j!B$IZr^>So)_VM z=`z}F9d1xIdjY=c@ke+7OoCf0M`yrpn$5<6R-;dtkb$R4W;pG@kxBSN&M@91w1?yj zWDMpWL6qf_M>T3jSRHse?*8oH-z|S!_{XhKskq*!8^7n<)NdAGiQk3cLeUUuDcA1A zD)Tne^P>0Kgq@|WdWXUF3drfsdGKD59tf?UMg_RsbMk>U%ypcj2{_&U$2>~mP%~eI ziZ#e@YpIa;w?R^cQtR1V+mdnGwtL$~{Y&(XmA$c(fzul`a{ul1m+~H*wJbOgSJk_1 zMi{8@Ad;GTfPISb76;{(Opsy!k0d~FBdROEA!2*75*-NMBfWe>ZWgY3=qz3nf*aY( zKF?P4>zi0%RFQaCue*$%2UNslfG@`$-T3GVx;Xocey-4p6XK$n&?{>T`d4*S9swLU z*B|yEiL7@(I`xuv=|N{1<{0~T8`DxkEi%Z_WKHXK(xt|R%z*dEMfm(O=D>WG+0*x; z&Evd_&A{)+k>+NGikJb2m>Yn}-{Ew%zS`_-D#GXN_&*l3>*!H|U$NE^4sJk8m@9^d z6{`vm>mLjxqeIzKakG952)r&n+iS*e&iv`bIsFuOITm?Yy??vnG=n(GQ8Xfz#SNH2 zWoN)kIN1D3K~}O_3L8sb4`w|*i!MlqbnbO}!TMQe(R&1eLebWC~}_Tqu&w&J--3E3B+`N%WJgF3pk*r&&a*K+_(ly4=KlO#!N~l zys;Y&*a2=Fe%~PAB!AWprzckO-YE2y8=3ze1YR5jfVBBa>+f^)dgBq`?C#vgs{Nu<+h0q<{I;O0eRfdOb~s!CFufeYf%*>I3QZ+P$c-_f{=5y@|RM z5q-S3gHK)=LHF?r<+PAr=c5EEi5SqxVhdU=ICc>i5OpCZW%)!NBxY}Vb;4l~+j{;= z-}7)dsRZPjp|tJ2zT*+Wk|}(#)8ehaV}b7_9`7_-8m(XtBPdoBM!C?AcclOJU((ydN4!ge`;0nyQ6b%Zt5@ zadYZQh@X}}P$yk9@WiX6lfDYvr`_ps;q^j=pqlNJ6_s+Z1XR}N{XyM^ZXW!vLMx^v zn>D^<%Qm2?C?0F&K^jZmMfj4o`$-EqvyQ7=k17x+`wUl4B50$}8@mq*sy5sx+X7o3 zDoC&QV#>}o$^ax8F!_IPS6BRsUvSOdL3+ggA#3x&z`;cj0O;9WQvrP}xU7tG)(d^m z{&iIK8QeX(wfbbrKFlwkp*0X!G_!lUk6ug#f@*d+>ch-O`@Y9E4qaUC&1eg^1$Ln; zGf5kpTm4zl&XJ1{{>_T=9Chn#;@bSiVyitNgV1v${Q@#?p6(l~yo4=4?{Ad^b1I%P z$#1?!$SIsvAmSzOwl^Rr#`K3Kax3ERcoq<57DJH{&4Gq z5Sa{ey-z${UV0F2y+hKtRaoOH;Bwm7)4FZ1yG(4;wfL^nG0)jp4+l^jed*yie6+2u zq}_5!Y*z3S=Uq_>fE`Iaak?mNcI1WF5Cao{i=qUr`o9Buh;PBhCk;hadrWWYGmX!k z{9F-!d|Sdk2@JIQ1avz(u&Ur<#Oz_2| z8=M~~zOx^(L@!};@SUn}T*-JVLZK+@=jK`0)?XuN=@0C3<(GM?nN%Tq9?q2^h))p> zV0quabv_Rg{2UiIZe1V|uhJ~_L!WYQXrdXcE5~N9^0(jYs_n-^yOW_UtGP0e--G+x zkPG4-lr&h17()}to9F!^@s{tv7`Q@^R0S4`^CmtLH-)>fIY z=K7pZZB@q(l!u#APRyyAw|CT~n;o}f@u+!1zzavSgB#lVFYB7K-gy7n!D~_@?|JE&4t4EECXVa6XZ`Py13sA3f9a5u ztL-I41!FtD{Y`LDGuoq?C2q>JNirN&cTwpON8XrWv=Aa)hv1W7fRm#C6f1@`y}sfMKS@5_ zy;MFu`l)<+(tdN6e%Xa`FC67r&7v7!}Y$%57=x-k6^NnNaoXW7f=#C#0XVNV{ z0OJv(VkQ#TqqJfzo0ckGv6*3_?KOrW-fu8G9`+W)n#Q*oWA7kM=yM4v*gCh({Gv4$)!-5eTYZ+fZX(t4A=UdVeu2+U|15@ua1RlEez`{ zA2KZX)$1(NcOZdb$#*X@)GcV>;UUA$G5z=FGpxH*!BBJD^E^u*7{jol?rDZesuK+B z*7mGNKQPoaZDmMmFEZ2w2VG$DYncpnx}6M5R6jAS3m@{Gn2wZ>Z+^{RS`aW=TbZsZ z-fzv&zW8b3=6RpquYGQ4Rl;CZqBbPnZ_JVd$=auvT8%sB>$R62-Tmgme$%yEmMq!# z{;GM}Q?Jb3aM#EjZLV}Q@`k5L`}@`Brkoj`scq`<%hmdUS=zbX&qP)}=Bo_}TfArX z)o5+;h_|l~ElJTX_R1`L^*cT4$<)TpdU@5_Ihoq)``%bod5>P3`laM~^eclly!Vma z?_bQ;rgn)bUSrPIjvo5irAfwF+LQAdI{to6qy4?_fIW5ZjMIKLIq-t}jvVcW;Rknh zdj5WG|3xuw4fkbgkIvnFcFz86ZStnC7kYV&)qWfO?w?(H&(}_wcdcL5f;4SxMWNYeRptbnUtF zUhTTQ0U!F#NYOt1LzkmxH)U(X559h9(Cid#v^w&)o#zs?OAb}ezwksX`XNO7(E!zZ z+OlkIaoMJ_dGF}8ea`IL-X$kWo7^MpxnJKhXlKR$K3AKWsP)@%_WQw+aoTbDqkg{U zPm?w)Cw&<0Kj;cVx)ze|b4cfq?N)w zNc3dAG0TvuvE^uT%m$OjkY`A-vsYhWJDz1?@4*0hn$eW1(VH}SGek^chOf=MKi%^i#R>{xjAztw6wf1kioMBz%esX57-6i`if zmDHp$qvdd;DJ{p6%|(ms21`DDKMKZC%B=>Q%}GqM^_i4fZK>cLqX}GNa zK}!+vaKtlMEVqd_3(Bbn-_u=vHEf3v4I4!_5Wc6ZMzLeBhK=d-{dP5E0OGMjL+}g+`xdgAxrGYPVX3CL2vd4W`8dL}EqzbhKZZ8$>i(a!mB?Dk8ok zAF)d*eV0y-9a01@vgg~$orYFaXS92=c-ZnX>89Fm1-<+*QqBsgWm_2(LG8MG}~ zZF-AS@ITAesUBH*F-{Bq6XoOQy|b=c{GDoGO~E;i#%`si%}SUY9NKdI47h6meLD#& z1#Lx&9Bz%@djOO%D=R0LDyFGhGV9iKt^1^v_Gd}A(+an00u76yM>D2r4B2K|{=mP_ zFBzH|HYPpYgI7=A)`N|iIVIbWox`_`B7N}e>m#3snij(N5zzf7*4ffW8oCawz+XiQ zR4Nx49T%i)UQU7RltM<=ifx6UMvyhCT;B^CDv|%5L&xXMl}FPSsl{;l`0ujkzvw89 zX}Mhg^oWa}7+-^bp(&f*OwdByZ?O5kq zjr8?93$pOKJ3lOL`sk7K;|y5_z11*3cl5|$y(N2yIaSOHA0v*ns&vill!%0Ay7*2F z&y7QDhCDi&t?orgq*da)Z#Em!j$J3Qy*hYU9^9QuqzRhJ5MwIb0rX|dMWF83y5b=r zAt`BeVEbj{5pfB96C>E2hguOv1ASe?*iuG+m#`?7R-*``fq{xJdNmJ$Fn>oFyTC`f z#$$QJx`f5DJQ81)*jhvkW6QEKT;nCuh-TL?rZ3MWEP?4OaM72*;uS$yBRG19h5C-4 zul{a=_g%7NNoq26UvYO8*JrV%^yS4RB`#t2GJU1aVF^55S$7rBmxb|o6*L}n1Vi$8 zzLf)1Y#kZaAzQ-e9;jmd1ctF?P5uz(RM%|j4t-Ddr)}ggzT8d+dBTJ55U!rSyO)G^ z2cC>qf3u1-_y9L!gaQ?brFtz^OG@7mwuCcwg^EZo0M~vN=DJn5k}-mi7^e zcS9c!m(x6mOVP(EZg=?JmE~W5egJ&$!@l>a?+xEO)*+#PIt7^ z4|U#y*by-jaUju!g8govw>`A#kh=1*O80QjdKW_12Zi{bJydw84Xw+Sye>Thv$E8H8lPrwY?N0pE484h}x`ZP!A& zanr%C(;e{&;d_Y_A1bGFv=1r?gohg)d@f@=h@Uo5J6g!644wxM&T*tmCb9l>P4-#t$;W9M7UxO|$l_a(4X5W(wd;9Q19{T*;L7u> zH*3!h+e4oq;>an2(kUoDI4S`X2$LH)s}5bW2K(slK&K5C*1SwWtPesYT;J)?p_GU2qVFYk$lDQLxf~)+hig2K zFdqfVI_K|)>l=KkQD;mm@e&Tf_41G-o*ylrBJT$JW1%CCb7vHd^RTNALQcW;4nB>j zXPBal>Tkgw`1r2p^08FMYF8b{K>o;SLPla7f0mD{Ej#K6sjYM5a|G&nz0>(M7WinV zdL9C8ItcsU&I+6Iz5|=SbNIcZLLPgO?xW+7_fW`7Kz7PW9-xp{gKmE(xfN`i#M&gc zZ7BA$cOwQNjzS#H`X1g_uYvP{U0)tOgf)2n{CJWCbyfK>)%B1Zw@-Zr3qRsUb9oZd z6|g)V=TRzz@oUl%S=UMEW9VwH0aF;ag;Gw*|&_8NY*Gx?!#N_4{Q@8QU;%D z*;lRmVWiZ$ET)yZj&9+8ZozHx7!7TsZ41}M!U(VvK6P>*K<}UUHR%PY%Oa<1$GcG9 zI~4W35W*(2Fh_fb^WWFksU4=f$7<-la;@3+7twX_CHyy9bVbK6@c9Ei5^qB1J)~F- z{e4Vp=|jQhj(FYC%dh|gYgP4G5Mtl%) z17ay+IpQ(I?-Bn*^c{@)5r-p&Bi@UcftZI_gt!IqZN!6!UnABd{(|`FFpQ5_ins}J z4PqW*Dqp&l?bT1iQ+kk&i*_kJtrqK4O+4UA1b8!4^*kVeRH9Q(Dd( za>+g3V2j8xS#z=s5jIO!B%cu=Lp&fn$}tr(H7A+B5}Jg$&!n>^Ey`*^8=dHh)!Q=W zkYK8VD|CuY$O&l*&65q4MjK6rIi!Z$mC7U2-%o~Ft;Tedct=={BMV}qai`~`+OycZ z(&$UZ;K}B98k%6pHuJ1WgWGg_mdzNRZ!;w1%rT}KA~N(A^13vcnSt|V5Km9jMeD6L zHt9vkdv4J=dax?lqPOIS!4=tKj^1d4RPjbrdX|A3F)5F%BoSFTRs$M5jh58OelN-+ z>=ui`WSeNTu$PGELvFiN_~Ns$)Km+bML9+y=scA{E+FKYBssq{wgF=x2Q51#`f@k4 zk<6evsVC^W!pV5bX!3}hRD=B9*=dvFVkSk4nZ)g?Sc4(c;e%6dSjH%m*=~zsC0LBP z&M}%&b8;u;%^`cqMEVx?oO~Wc-cZHnSe-n%lGdtBXT?v76ZwrNv{InLlUZexwT#CZ zvU3)*DvUQ9Qs$5uQoPLq|Dqs9d}Q>Tu-GV;d?Igeu?7okLZ%c$M2_8LgErcYmKD8> zMU6@&y_`Z5*qhiPkX&LdEZ=G~WYa0qFe~#Id?U$jjRJqJh5HU72jIdz{{AHOK`dWTAT; zIAAiHjjdIjsbR#g%^c9cs*T)vtN+Op9%2s5(fV?g-lENk+(kV^^~B~FX+h}=1aI>E zSZ@Rgz=CvU4F*A~iEdCmX70#H_MJJ4+~0cX!%V61W}}I<8uFq?f?N+J^t)USFHt7f z!)D5u>JOZI1ZMe*uJ2=nknL_xZ$boqocCvx(X$dla;3@8Fj${Kma*@XjTS2_KhwE} zg~b^1SkN5us9Tg3EHS3C^B7JkvWNO6EFzYWXQ}oXlcv+}2bjlVY5z)YdWeoLAxG~0 zNGR(O9CMr8EZUFkVEsr-qE57KoCLG=79*YPnnU)e9ItMq-Y4WGXt8!{1~og}o|a~? zSm`1zM?KE4+n`sWwtk6y3NPVwR(tVKU(i3X?{NlRF}^(a)EQ~K6?Wil&d~_|@iBbM znc(LJ5%R@-nwqp@&Fr9egcMs#BWeBv8TumEs9ML&3Q2do3!3P=~z z>;S9)Ye$jN=RS8I>3SfDz?$v6M!Lrn*d`0cK{Xu?g7+vBjkNR z|6X(tqVrN-FTSp)5qWF?-TUsmL^K@B0Bh;GALwuz0h4;uz0A^74S+LM2Di|@gtU_k zZjt?H`Z`hyc!8W%74@fFFE#b2Yl@Sl*a38_&@@%#K)81Uzk~#V{eX>w2?s zUmaj)sa{H)NcVozOVty(UH+4(|LTZ&65VsbpsE9GfcQz1AwMZus+eW`a)*Xy+rFs1z>NfLDdvTf8$;+ zmBbTL2=S5<=w3T|sUm^y!Ivy0()A!z-z;k9St)Tg+%p4Dgoortz}h*qJtRvFiBPZ7 zc}a6G-D|3jM9!moj@FSvK>q+0@x70bk$@%l^L7@wfTKAD%ZV79O81J>OX@Vb2WG0O z95Evu>P3|-l^O{d2w0v)+ofL8Wy3X0s$&~E?E|bZgCA5WDz%M}RLCzjm#)1yFEt^S zazY`7*laXo{-fL7GpRs-ghuQ*}|LewgN;ELA*A_wYO~6+A-7 zZ}dER4EzlGb&u1%a#K}JkJI!9RYf7k!j({;;NR+19Q~glWGOBG6Lc@%Iw|%^S|8^n z-5Of&(7pgmseCQnJM_GiQN-I}31A(Bmp{eME0yolgfs!qdz$V^Sw|`X!{B^WKSM~M z2F?e%@f~0uT$jAyJfj=w-Us#lfe=w29lDe^@^o|EcTb(`s4p!HHk32o=e zlI|s1&){FcaiFJe3n9^ffm```U4U4(mA0c~Deo1!mtL}@ewFGqsPbN=`PECcfF+R5 z|20DL0ClBszEb`=A@czXU#EMhos&wp@pjU%jqdSS$2N|w0C~v{y5=HDs@_5M>m~C} zUfycJda7p^A@04Qy#js!{S2LejFOCQd2h1wP-=XW>P=Eb?xu6hbtG>$KmUq$vv;ma zb-Vd_PdCn`{z-a^_g@un@$8PpqMC15PXuiH=CPl~GSV?wUL`CD=j@>gAQtN4_@8qerfQVD*7c(sS1 zy}4gT2*O$mybnNz~pWv>lz7d~0~V<{DaW^^)&Vejb$q_Je+@ z`YYNmK)rrV`!l^%{55UAMz^BlG+weqH=bSuXhy87rF#QH`#VAXUN1GB;PD$z(thH+ zRQe6o2l<{NQ+twBbi>-cv>lzH@%2(*9o7j6l_VtsE`{(iz*B%B7vcH_SOEAwVB-^2A5;)VVI&-^t0541l#FV$Y=?I`d^emzL~k?!RN*T0{5z9EQ7 zfOhG;s_tj#$Eh7xc)OvK=M-ZB7r7bTD}JN>#|2gK?{K|`>vDAy?T6Cb3jc)qmD1fx z|AO*DxEb!wqX9E+K)Y5!zt&9aqmI7M92<8sA+aE5T2V z9ui3fUgRkeGhn5cL>>W5^pQw0<#$M=60otoMD_qS`AQ_TFVu&h1pS^~71>dOdQFz9 z0sBIDU1y1O0*vh{k;@R@-(O<&UkKQn_D6un?xO2)CAbbiz4VkwKMDHhUJ_hypq~$r z$b6c<57+~!yGw$0nIx402E+BBwy(tcg^Yd@oY&{2@_sZOT<7{rqyXX<4uo*f=RZhd z*Wr@E64?adzQGdfe+mI#g7z0UM1p>xj${Dthjtw}RD$*e*WaO3FI;y3DRIprP=e6$&3Hk@P z&O9QKOQ5&$5s6)AiyxK9NUG;Cu;2YVmH%pq-5-TKA&~?Kr)xd#0Z!K`m%x1zU4vW& zNY@Q(;J${gn`{gB7gdOK{c0H?T^F1EM^jqLuLKR>JFA32$sA{MJbZ9`4&pxTclxkQTz}dvtXw{(FH2Cwb_ja85hf zlk}L1lsb*TsMo?d=;7ez^(ywvBM$#}f%`gm#pkrocJRQ%DtXT;dK3XyJB|Jq*Qm%c zr~K(Y+Zw|6f0c-nq85%JLxzwkQ>KtPbLJ4E(MareJFn1!0{B-zii?ZMYp=aV_U+q8 zDk>_-@#DwI&6_s~4q+6q$Uqt?YfIKv6|^PoKg-QM%;@3fpRX6Ry`G!9bSaJSb92@8 z!_8HHfcUdUy3ahwAuaIST*?~`S5;Lp&ZZ#L@ZZnP*VC9hcWI;gG9+&P6nXApbrVgW zmUf-_k(aUSCOInVlo#jmP5{3#FkgXup*^XDA$ zZ*E?FxQdzvVbs3shp(Lh_B)j``&V3FRdv1UcdCQ(n{o4_Aj0)5&=1_>{X?AwZmK#A zMM$ImQP=KV-tlKX2Gm6PjYo%fh^{&eF`l6AQeS_4Z@K6RMi7A1KM7 zA5ZwShfhE=ZRft&*8i@Zj~qFYOrJiT#K*^zB}%BC>7UHnL~W9@fUc{`zZj z;lc&Eotx>;THx8hT=tG9t%(QB4>Z4>_7QpLqn|%Y%giAUK^3Ka)ZF~gM?WlpmXP_- zProgA8@@dB;)Qw5&3~mWJ9J^ztXUtWMUUJLxFB=tq8ZK2dlxi6xN^Wp^JXm|4>iC1 z(cW29-@Y|e|3l5qKmPGY8DXvX0YV-O2x#{83}_~9_#wCXh&Z13Y0v#ceWYW4y8Y~F zzkdD5ph1J+UMPf&A3vUig@uu*s3_*UnKNgS*|TSpxpU`|`|i7sJeWF}q^GBog$oyw z?Cfk}u~=CDv258g@{)Z5*}h~vdF#Qk0>(;F!&p!JsdG5LA$fix3NJ&WvdF7Q?SpAlj zm65%B_p-k1{rBG|M-P;d6<3EY$SjD@ds-w^iU0jD|jp+ZJ^Pp;iByg z?ZyXA_B-GN)-?N(@y)}?yylrCzj+ZUZeB#|GQKAq5a|d76xs79$aVspZ2Z=E~;wlA2JiI6tA}{ndOKNP*N~o_+)q~ zkRP+)wAQ!& zduHQdLPW3M?|c02uI-tbbJpJLz1H6AaL!zgNy!A%^wsR%kU2~{1XiS0>f`%_>WZZN=GGD>B=_SlXE72Hrrv! zUe^42&Y-FDLkbPbP-xOq3e9;*p*5Qn+E}H~z9TAl4Z{y(_z4XED8pwnd_KdQ82%N8 z-@)*2Gd$0^<}kw_XZZR?_`7+8dwGOZ9$_VqVCE6_@CaY>2=$#w`Ed{_XD5+zehw)= zts&*-jig-IM~(1zFg)HF70mFH8GahW&u92NhF{C@7KY!<@Vgm)FT)>Z_>(GlPZtMn zWB5B5z9+-?W%#=pek{YsGyEKeU(N6qhTqBXpQ_-SwghKW{}dJ$8WI}fd`!@U{(gOW z`}p)7-*`48G&(9OJUluqI5;FcVSt~nZ=c@d$M=#Wgh%md{y&O8goh{i_rnF_$7@{Y zqhrD%qJw$(h_I00(2#_?aY3IxK0RIMqhhon(IH{sVGIwv2Hx%OKQ`eKlF>2IvW>gL zyKBP0fzAO~Pq^)mUAo*mMqJ=8F6gNNd{{WnhT!}kyWDxN3$+RTF$2RV1c$`j7abiD zozM*f-0t1A>z{79<(BRfFayrVh{of0YjQyX*nsn45iwEG(J>J*J(^s==Y9K&@k3+6 zqa$L%W5(Up?Kam1IN#52zy!rPewdg-axGyrE^zTrj6Y~p46`^UB05G8A!d;LXZ#bw z2Wf#qG>_43+_)}Xy6^>!=M#qAl%NfW;0f;I^LLFKCs63#cs{IC+fG3p10$ltW0=e1 zdI%!!ln=HK9vKpHPn%9{1A`M{5@MnvTv*EY<|t8NLqfv>ZuIDIpX&s86%`)Rcs^l7 zfLHsQJUlu_GKN4gCOViE>C*X-;X?xlw{PS5hbTT77RtIjWJp-prSl01p&=7Tb!^vm z7=H{)!01uom*!6h!zB|(-FibiEzXApv%1RHTuJ`0f@yE=+;L(;SWNIJ)-^>@kMC@e zUY$q8gfJhYRHre1xH!$f4<8&hDyr#er~dHx;jD;J5kp71omP#{tceO4>2_L)ZrWnp zP7_rwY3P(2T+4|><@L$umNe6w&E;~HV7Gj(c%_U_Tdmh?Kaa&YU5ekIz5quv{@NM zJCsROrOcrN${ISXY^38Hzw1@-91u~c%kaS;WGJFowO7mV(F{M8;pZ^?N`_z0@S7O^ z9frRY=l+wY{3lQOznZ7W_wsb>)=k{fa=UnuP&e;B0RaJcY;!kFw{G6udiL+()v@DU ztY^3T`1R@I+b5v2SEqir^7n2%d-?kEwVl0s1o#K|E8Tti`vu(DA)qr~(DBw=@9N&O zk6*ye9sKTc{h-nK^$+m$yv2`U`u(Bft=+u4_7Aw()3ZbSwry|e*Qryt8*l2?|IV8| zJK%=^uO7Fx^JwQ2fOcp5wiy3U-ZymNZ#Vbq(7wGt+gHy%ceLrwXBp&9{?7CJcmJbr zFaLl5fBan>&)?tQzqh}CPk%vQcW$`Xs%KB<9Xv}qDavSU;kyW6$gdI@~-I=|a`^ymSmqT^9^ecQKh zkLM(_XApnth*vV<(Ij|Wk>vRGYHeKO-g2c2T@8Fic!c_EHf-4N0LPter%#{$`up#{ z|Au4F(Nm{R9p~ebvuDqq=5^_@!-o%VeEaRUpYibU@E<*TbbyN{Z`U|@T_yN%HT;9D z5t#qbw{Ks(t`WTI*fL0C^PW0&YVa^_{P~VUhYmf<>uB1!b0>ZC%{RpHlnx#|hz%+_ za^wi{`kQc`X&{cXpV!sZeap0dxqtuumv`;jwInn&6wir)obVbdJm$Ew3m3?>gRA57 zt*&!;{TUuj-!&~QZE!B-F;luj^KgLVo|L(i*(rd51 zMvNa-R8$DOj~_oyUw{2IRaaNjzJ2?|b%5a<0lyz(m<<~@Zd|-|>(<4bvPCRkzI$jt5!X9&pr2mci!RQ;eHtRYVkjF<_vKzv!++CUPGCO z`6o`Cpvub1Mn3P|yO%!s%SYgj&$YF+^x0>hiSM9EcFuXkk#+9u4?q0Szge)~<{W$0}D{R01f5$D;4 z@3|WM&!0a}9EODc2L%Q7g&v~={|`R+fVOShMl5sUoLSf~_z!u!^Ugb>1NW+`Dq$-% zH8tWhXn+rZzQIl)BjC2>d!pn|iGn{Q8uAWNz*|KAyNCu>5>0-WsN^`&x%1}_u&s2z zBIYXmckI})rg!h&Lpg`fXMYKK2pWJdcn-dT9>@Z?<1=Lc#TQ?Qj?dsZ_zira2cQLb zga44R;X9)6gGAc>M5Fc+4S%0#a23ghNtMLEn zr=Ot9s|ODr?8CaS0yMB3en$&%fgSzM|$ zB=(;VGY#>K$DfZnX^{2|8l*kLCk=X=`TizRKhVJZ*SyB|UnPe5usQtM-wXX`Tgyj2 z1e=p|NLoMx;=$!~3;4rNzPdDoN}n7>B}{{vY0%Gg;-7VzDDfoIP)GE@ai=}QCq;jD z$(})jv}e#D?HNAFZ<`qACwKf|XNWJHXEk=vAiFyq&Dn^g1#Rn+5wvO1NGg3|6cuMP z4fDs)x%v}y=ocpq2~5M(Z1|1<`9v!>c(XseI8WvNH|t_WV!wNo&$VX!YZvl$RPt%V&nslIh{}%)E!_i$m3d z26c`x(3N9c4uAIdLjM_`eBceda0E`k8}0 z$!4<=@*>&QGHJ<9e*N`Vs(v|%b}b)H+m|v8Yzwb24P`EShELMZ8%ygm$5LTNFg=&9 zrDtb_&@)WKQ%u7$reQJDfaacK{N+IN{s;K8E(rZ+y9G@p}U;mAWzwar(Z?{9{9DmnLnlvdoJw5$h;0k+$ z4dmqH2pZJ-btReL2%BQq`j<31l{#32`|q zD~smNolC1%uNHRw`RAVtzk^(;Ia+`>Vgq~?av|iSSP!7Vp7&bj(ZyeQyILzzy0lR z^!)SB({s-~C-A}g9{7R=!~(<#Ne9+2paK3AdWcwvIrcmgPWy|1|9N`XH2+eLG2fYE zz@FigUd)aG`d3_kjUGLERZL9GQs@us`WjyM4}JC3SM6-W#OEkGJDb=h2;c9$_g;}B zy!F;wLLY!TaD|MdUP*a?KIk6SImqiE3)ll}TG%toL2b{)Zub2C)(yx5*R@7@MvNHo z+}gEk#Xbn;cG)uJ=H^mdTpac4)rqneh3tWH)Y(w2agY53KphKtR*zm0%tbdfY z|5eNJ*_mS?KHC_H$7L+=rzVJp~=z&aAYAxDDjKua@?$^ZEa@aSsy ze*nz3tINp9IP&C^PyPlxA9&ya(P7h)hW`Eg(}D#Hgd7kvqwAtT5G@to1H9d`WedId;)_C`r46HlZn-y)yb0f-GqQfbKC`Gzn>POr?v41XtFv8 zeiuA|y+YrCKkR_@(R3Yg7x=69KiN+-?*D)W#7^Wd@PE()#3RH`@EB`O@E&rI`@4_> zzQgCk*TRqSnnKhynC9z^yTBj1+mfDNPT$qO2*U&phU=lVL9ub-q!qz1)w^5bgbe zD0q*U|N9o^zmt8qk>_ks*VE;_CUXDWmGl3`{S5ou1MD|n$H1tWqTYx)7wRk66UScc z$7hMEe{5B)w+H<6vSrJXo_p@OIN*TX3F`;MNBDKbBKT_LvdB|#4xiDc)?KO>qQ--I zC-$^a-@%?dYHU}UA8PHbjnd@-B;c}pw>s! zhfrr6&Bu?M>SPbZ6kfk3ah@Bez7GTPM-B{J5P!Cuxe#<}TZu&ZV|*rktdbviLWualD2u3a0a#shOh&v8UUy$yS+s4rkoc*_eJSF9PH z_=PBwaT&AES!;t$px&vTA9=;Xg$vV{ELrlHy7mejux|ohpkaRkd*f0cu`iDL z3ThLg#^suS@$_+GuJI~;9P@rt`6DM=wQ5z;OE0|?2V2B?ANe`x1}@+Mj{A+NqHc(K z74}tauD$IIuKEIO0`(Ep3Uiag8+m}H_R*-_s`VeX^~4iTq_h8jOx6dmF2LFjJb~{4 zFV5C|Lht?~R@4cwKV9zHUpJ|20(GWmTy?S~E*#K=KJvT|b3go3Q~Q_eGuR<=es!Hi zUAqIHu2eHRu)9puSWv55!8qi&YK^M)JO79IpLyn)q?ccQIS#cUE$ zy5{u#(U0iV(SvLgZu&SYq_I}k()@@i*yq5WE_jUf729ItUb=fNOv(nbcxz28)gSwa zPJeaql0MG8q>t-z9>ny`#(y6F204FRT-=wz!NFqR6}9Qq)Kq%<>8Hi|4me3)Ablm| z1Kyme`;#xS#D_tOF72 zQI|n&iSsO)I(4d``*M5D?y`|_T;5yB!{ff^mjA$?`H#6d|2TnKBKD1=qN2q9D{z=I zXO7@I{DG{INF9)S$Wk9TPF$QdYt~HGAw5!6S&EJKUp8bbFK}PtrcImligT^dnkM`o{Lk{`%OAsd*po-hhtEN6 z;gLrk5jAGm1+GN{59A&%@@3Rikhe1pFI~mljq|(jVX5~d5RWo5Glg%!y{d9w5%L1B zK{tHzfddCDS2?$sAM>!U5&pk9JY){MapOi>zka>gD~4~xo|CL8UgO+ie#|4|FLVj? z${ZZFC+m{H0Xl{n2lk(~Zrv*H6TH^B8|iP&9w___d>`aoUS1CUJH@UCm|j2$gs4u?a?Q^qjJ znQi)@8XonuUAuN+pY;NdQOo*w7IuiWG4!>R*C10qbKVCP%=z`YqhhG75+2t=r;)?S zd`8+7d|AS`&NUPA)BT**40*dreykt{V=ma5Tob8t!K72pHSpFSe;0<&ao+;p1Umw* z^6xvUx0`6qY-esb&9!#I`Vs3_tQD|U3FNiXTE+{tR;$C5rcV908{Hqdv$BrE$SCjYSz;7exf;`|))wtj@V!2xXalMqkyeA1`Ax>g` z#3QT|FgE-$$NnX1c=&1Hjd8#W)QUh8Vm9`Z0E=}tV)vdsdz!$a<+QVhcyU+SxVq9p zm)Ep&^-lQRLusdIG+yFqPj~{G2i{yDzTx?6Hz;@?0iGOyr?0h9@b&_H!?V|JR00E? z-U&}$YwNmFBc8i}LuJP+Z(B;R^*90m- z+(&R9f;Wou@6j9@J(MuMCQZpulKA?Cj7<`r)hfoG!Xx1fM$;%0_{==MW}1@1-!u7_ z`;{#53GFY+9XyttJDhtKUzsWX9(*qUJDVX}GiHR6&7Y?6uXFj_qvATWdzAL7@#DnR zS*mddDFa0h6vrXrw?LMahv36paeX?EI7>z00%b6dJCHwTi|>yqz4-bG{CTFh5}e6k zo`8y(jNx2GY34T#C(~g{KR#X!zk&pA6J6t^x^R>9rC%0Dt#~?XEW^!Krt|pI7=zZ! z3=5z3zk_$@W^=p@7y1~-<7GCZVc3L6y76Z|3q8u>^GQwQ-u}k&8%GCcr_IvLPtMFr zot-|$chJBvIeB3PRpE~HG9U~0n=uujZDf)8#sTEuO=-i zJ#|KM*4#MtY&?`kGkR|3ye#pON7raRR~T)ukAP#ytmJ9)GE?U+bbaSvGLz@b<5`lY z$7ZI^Po0%KGdZjAr22G3HiP1|Y!i~_C(qK%!oOpDld_`H=g)pTIn!4&FEwNu-Yz!A zcSh2ztYlwJz@-b`lwry>6_|9Ua#N+L+Ei<* zHz{T>v&I}~)|z9@iRKJ*uDQUhGnbny&DG{wbG=!ycv&=-K#SHAYe}?ZSaK}|7M-Qs zQfaBS)LQB-N|9HQrYNvTTNGQASd>weTU1b_D=IIlEUGT5Evhf#fN9lO1Fc$XtToY^ zVa>G`SasHNYo)c?T5GMhD#c#Kn&QA>ZE~uajv8iBusu-gh#;MNIz*u=QUfztEALABT6kn9W zxMeeTc|`zEK(N0`u_w>z&9nOPyg@v3B+nhsv#0R<*^EIR<4{KZ7H@4TedCNmS-!l71}Dws>*80>dG3*@DSZ9)+0}yx6V%&q>I$W>r!;t zx;$N>&Z?`>Rq1MUb-D(fr`}udrw`Ic>f`k(`fPokzEE$~SLmzsHTpVzgWl8NZSXS$ z86pkwh7?1#A0lw!&@<(UdiR#Szk%2Z>jGc}kz&E94|bC5aG9B)oBXPfiPg=VX{!dzvp zG1r+J%$^o+i=QRP5^0IIq*$^od6q(pm35+u^#R)8$(rC-6y(x_Y}SFoB5P4aQB_e* zQC(3(ktfU6kL4Q4GEHH5=2;6lWv{SSS!-Cb4OUNJ+jA4?>XrIEst$YUv3Z56gETaB&G)?o9r zd)xi&LH0;{ygkL9ZO^k8+O75qdzHP$UT1Hxdpf)wevTkVq$A#u;>dR7ISL(CM}?!x zQRAp{DB_{VqNvfVt(3E-RI`@Uvxa!Fb_B9!#IjaoutpTvbhdI^rLEdlYpb^@b}zfe z9%$FvW9^Cd412D$-r))DJSbYwVk9R&`Zquf#HsCLvk z>K#g{SE;5nuvA+bTbfv!QJPy?P^v2}FRd)CF0C!CFICFC$~0wxW!kdXvc$5CvfQ$Q zGF@4DS!G#uS#4Q;86MK?g#=jVrPJsFby{7lE>V}E%heU|lD%A4sjJr2>gsih-b=61 z2kN!@Sbd^CL!YZJ(ChT&`bvGZzE)qaR}5YTjUmvWHN+Yc4H<@9LxDkOC^u9ZstvV< zdV^y0V!s*4J~NhmW`;4Bz2^T$pNWT1W1l32ufV%3@G$8}KIAbqb!=6BY*8s}OXX}! zm25|fsX1@s?rZ)>BG!M}b!`6yP)h>@6aWAK2ml3&zg+(CqApIw0001v0RS5S003}l za4%nWWo~3|axY|Qb98KJVlQ_#G%jU$W#qkid=yo-0NkDKPC6UaEDd1^L}?I-Xqbp5 zHfRdErCK_I0-8|}G#YV0WkNOJ2%1=lljhnZjylhoaW-dj)Ok9Nk1QxA1hTM(uoyrg z3Su<{61FTrQr|h}R(HbUy!UtZA z{a+jW^&3^y&-6+B_UkIl{_WSzS@hJhw55g5K3Vwa(`osSKJ(18a@u20q!k99Nqg#< zG|$Z0X-_}<_!BoLCnva!IzD>q%YUBh`nV_Z_hk9_p7ZcL_4v@9z4T1!`8hpr>gk4O zcky*SXDRQ$dwxmrBaHmxjOQ)%y#J~EMOfdJeV*ktnI3;R))b%o{bRl3xZac)lVCEn zK;UB@mvlG$IQUeUO~!kS$z;PHQ}2@^Ve;PDWrnw$;z*&$EkB%mv;4$L8J?A27#+f~TQAR(W-=|j zx$yBv(-W(&=6Wr&pyli8HnSnqL-s{qg`2(EIa=}ncm(7N+>$iJ<2 z+kYI3mBzC7`rffv|Ch1cm``K*$t7%J)#1okewKU1SbluT7>jh6#`5FbzGGQ`$Qa8n zFa4j!viJ~(I1+6N!ZZjV~uL@FdRq& zG%2St+mVTwZ-?kM`vlK^pI+ljhs>VrOInk}WLK8NY9%($l_4pc(iZe-Cq=?;%oXQ| zbHxY52PJj_+RgE^Fm(OYMeMqB=~SpXl$+(vJn9cVk)>t;-VoWg(rQTC16hPOYSfiI zx-K!u6Y{uXGMiP?1e~1QEVbOlU;O!PVrau9$X2S0f^^B7Svu>$d&dN*$#%cb`~4^-bklZl4Gylpfcnbj8W2`Rl3+B})g+w`+K9}Q9+ zHIgP08rpk-8p2j?hE_zO+-oXu+YUf#qrTD~ z-{!eybsUz4S4*Qe!(Pc)@CYBPa$=m)6(c7oUDo9jm9E$oH%Tn{Z+GGV8|5^iYEmP- zCqv&qhNoD$7HX}Er=9(e1HfKUE6S#ESXa($Kunmyo7o6+lG&Wus5{+X;gJ2Vg^@_W zD;UL+eNdsYMc18a7*-y4<&4+8L&w!33wqJMt^Z?GOJX-0D3E0|eErFqY zbZo1KRkJ2UFb_-mm@WHzhn!Tilyj8w z-z|trp|+E`f(MG8fCuFJ9!N!dZs|#Rgiq<#<-veKbmx1JH`-VLt1LZ=87@(VZMrka zGw?R&wBSx^mq$oS4`cvLs5=+&47};g7QU%+B(}sQAt{ zh|OlLM_B$G_ay9!B#8B}t?Uaw03;v^{}%+*iP?}bU<=Lc)MBXGPoP@$x4fo`JItoy z?=UKXeY1~t*+D6xx3niaQ6PJv(CtP1RpB$zp=rpu!KaU6EP)-Eaa zb|_G|7pW+tic*`h%&_)U{oJNXn;Azi8G5BROtC;^w*@ z&Z2WP`SZ{7C9z!~D0(RiN9Wl~xc%uYocn4*?|<4uQ4eLAiT2IXoqyj$_2lt-oKO$Y zDTu!d;v@7I37vx&xd&n2JisyQaVT}qIjpWrcQ)=rRB}|@U^j7I7U0|?l+Umi0Od+A zP`a*{$B1m7`Y$J~=};)!56gyT*mdVC`yyom+mP{1^jQu`tRuYBL|r=%;;C4XL>2E; zSyF`i=st^e`B^>khV#zh6s|}S%KKrH{jo6*G)9~+RBYj8`k%vnU9V2S>`GmXkv$2s zJ9*z!i5)8NWRI1H3gw9y-#v)p6JQBrAYpXiJ0syJCCK&yPjECQB8%tmi12lX&JwbK z)?mjWuBbe#>jlbP*9UGaP~6w^OyRS{+G3Y}gUOMal=>L#9^??t;phcp^r1v*GOa*) zapd*#(B6t1kPRBaitdAopocgvn)4~Vn?td3O@J7oyg?nuBa^T-q1;jc1N;^?>}6=Q zj$=}eMCUE2jncuT01PWrdinX#yIEa?NBAb8ah;UyVfB;`0vYiOwjdDGyn57gO` z#+XgB)R{1AfC7OZKiik7wVpw^Qm}G~^&kV`Zdo>@C_7mein0^r1WB)v+zo}_YZllC zP`(r~qIQNBL#;op>p5k&BNCjIe$mfrVI-B|Zp2(WQ9`3yQ6AKtSPbQ1b1kaT-7}+M`z3X@ji-YWLKwh?qhPVPdLqcGSG<^u79E3{D<2^qV&72OxZ)YuKW<4JYt+DZf?^0Z8eg&x?RkNH$QP2ZFop%6|m~!l)9`w@B{f`v#azf&NlWjiaEWM%M!| zXKSUJMo0KHm%$hJqVc&XQc2j7m$h=~-&`XXd88Gjo~Ed* z5-F>e10#m=(AI54b1RXEhBr*W0Du4ZCVc1l)vq$BR^--xMXy`ct%*7kp;ehOc9hv<7D~*}RK0Bg1|ZQ>HYN^UOAiXA zdkE5!O@8FaVz!YyhPxvJRWT)h=BWo}VCvDW9MF*>_*pylVjS?87|xQEQ+Cp#f#g-V zRNapYn;jR3(NGjCTp%$)cm9RSx2T_DVlYkze3D#7HLuxfXc&{1Qut>O_PfspY<{;Y zf9hvvaoFP|{>+HBY4k<=4J^s4+i6Lb!b2@5C6)6P9<>^y{sK{Jy&%O2e0EGITb3RT zjIFnsNAgMG3E$m_2xO;PdkGn(ow{>hBZ4I?!BX7OD`6dSA{roA4^mTv3wjXo!8Q(xP@ra5Op+RpBCM@p^-S`tz!X|SgzQ^Ae-cvQ2UdkzJ6PjnH`=D z5wcTl9m{urqPh>>0M+FL?Wkk8ybjn_bz%x+Y!1ArK1EA7%^|V1)d(U%*lA@I^fm+F z+j)AZ*(48UMGeT^+WrmvR=}>}Nd#gtW_xE4kkRaEc6qqOra4#{WlMeqv&F0N*;Kb3 zliI02fylC#*$7||9Xj5b!^#QyP{SeuvT!iW^*ipc~!_;rb zL#UVbtBJ|#EHU!%AR_vB8B{oP7a5jqwO6S#bon0mn zoMu1UpKV)nBh2s$m;?D|#`s;m<4-ikPbxYZzd!xJG@(3cAjn5FsxBH;O&V~w0}7N2 z6nBB*Hm3QMjWIsG0sGvDecmE(63RCU<&EhL0JvBs$k*yzBxY3qbukEeB`;?`1yz{Gz;K+YcO>sCNiEl z&q$1`7>3-)a#FrL2(3xML1szW2sEI^F6mo=r)IWWP-r-YD$9^_CgkykB#VzV_(M(` z@TkCKNHv`{NeRsFXR5azw6eLqN^*ImGf_0P3q{R(CdNGQ}xE}KZ;D{yn{=z$9k}~Z0-m>CH z$Tn8I{~rAtFQxC2I*v;<7XS%tk!r$sh5Y>;stlV@s9KyN7)^&}WJDCG!OehtBW)Z| zx(2NtsMI*rsaKY`CtBjc&0H@Ka;8#uwiHf+?))hZ-y2rkC{+CvN~Le<)2EK`6&(s6 z8IAj}CIhN-Ky}z`vQSl+B0$^WI!wd{^)Y8RQCqm5lCt{Cur@WY1p?=M9WA6huL1sR zuAzv{kwQxVmV)!)FOVe#SLgVHPk<0>yA!*XxmgN&QQ4V`xay3-9S&B#*Y$FT`$2dO zKZ`=gs}eHPb%n7YGG}TBe9UWN(jeG(b3_mlfLE_Vg61Lm3_odV&vc-t`KV@Ikczud8@6Ji6cPo=U9%!Vs%X>cAFN+%n|cm< zC#AQd3<+F^F5g%mw+$E(ZJ@gEB544TI0^NpuSoY_@6aqL*_7%5hdL%LvRT8oASA;~ z7*hZfV$8zhsDA^_MD4trkiY;^dF(^9@EZ`>S&NpWel;pODN<-=TX8nF6|kwRJAv~B z(I*#{XuIk@i`{`0WUzt^R*=C8hMsUBH!!~s9|{sEAg==k`DjwtLoG;s)3^+!eh17* z(JEJ#=~{>!FgNEb!XJ>D{7XE?g-Wx0p=slM!D($iC0{kEFZQETg{)f6!=}xBpf4|& zhKHBzH0m7}0c7X0u3QwN&Pc&IuB8aC!*T&!oVlg#fg9A;kx?QLutm_`O46%D7@bGv z!z6s_BC!Nks2{Ae(xCe~&iUO9%WovTx5LlsGMiC#I7s5^TFCh4J{db#yy;_K`h*V; zcT7)7B87z}$9mXImli9Mauju?3nk!6OY$Ju$R$=GQIa3==dZAPOWWmHLK!MxeeUl) z!qoF#w!`mk6n=i3&b~pg-Gwu{NOjx~)!n$lF0wj5;O|9Jx+1VVAe03l93e(R( z^$5|=;;McHz498(`Pe?-#h#tjd$5OxB#Qwnr>o)RI@emaOy|*g)Gg%nZV=08LV)=D z^g58-X-04lFT$mSJSW44iG;$0Cr2mz&j8r!uvA<{+KrPSi!w7MO-la?=AYHV^oPgs zIEQxJ$Lhnwkh{D>U*-=kOyg3wkDVqwbivQQMqpWp!16Fc1+GrudI{-Bf}d^7Y*uf; zwtqh&3PG6`*txgh=K30_^IC#UKiiQDGC3a4Zd32==6f1)JV@H$dM$>7TnC2>#m&Ak9uRq5{phgz^Ig?uGyg%ian^ z0T5aSoT_b)!wiXyLb+Aa#**UI4?8r63==%8Mt7!vjyyUH*d~-if>2%~ly4nf6Jauu zCUT+uzlTT1I}J!aK)7aM;t1n#QwkBL0NY!)ltz{aXP{8W0W6!JQxP_DxtIk1?eJAbzUVfn9i zGe0-Zfyu@L@(cgs-2Lswkp@Ez86A4Uv}MrYGFnj3F$L6!x+$D%VAiUjq&7lgrFQIZ zu$0#v3B5~f6NO-iO98{mK*Nf3XZL3~i+FCMea4S`B;DEa8L>zXz}iW8ju;2af9_ta zA%ugMGPkK;okT48whL#+#~vQ%W6Lt|xP9J&zPL4waBFg&1Lef~KO+?s$v=PljF_mq z9Of$zNO9dnI)<$pVl{z`CYjZR$oM#4`pk$!eFZEY(DWxiyXLt9DWg~zT0SJ0VXgN2 z5QNX@&Yhp4o^We~rfkQlzRnMm4BK`N+O}MI@Q3H=&^ih*7C2<0&aUa0E?koaM!NR29ywo9x=OTV(5`C8=yR1V&T26k$A)-V*qfE9hg z1fSrk<(uL^o>3d@PKx?KN_0pX;;RNd{17rcFM%+wJa0!HX0=txw}S{QvTZ0|t21+f zgtwJeuWV+sQ#v*xj0O_Ym)Tiecob@L-2Ra5EXV=uRQh5^`$mgA8Ce+UO_V*ZM)tVf zW49N{PLw&dgrcm3K#aaw0>0R7DLf5CayZ)@Zh~%=G_O3Zel#S~%kV=m@$DPULdl1S z;-QCuxXhE`cOa1dJZz;Cx$Ksm&-##tHE+=AU z*j21kwy@`2!2h1U!ECw*TBnw+GSr*i5%Ns>-%h2sMRcTp85|J@q+zfcc4FW0EL`n@S0xScxFPW^LG6-^$H0B{gw$W^D)jTG?&KH8LO-99 z@jijo7z1ocC+k-?xyJSoywHy)ZH8Uba(hQx{IQ0PdRnC z8-|)>(W%F`_x9L-tsX~YRI=0Qf#n&?bE!RpA_X-d>?^A>lT3kILo?&m#Y0eKN#S8YH!>Yne-uz>eFUbWqh)yW z=nJ|hGpRBGTfYl{4j4>f21_~yd51c5=RC;9fy|KE@r(yK35kO=ts{;28`rf)4AnRs zKmtbK%t!STC_AJ?aTP$s4&B2*@ID!OBncpUCqI>q1AMd2OsYKG6KgYd*mciCGf>*4 z=s7}&nNbGoxQC5sBNq3xiMNu0`%u%J)uQr4*=*m&7w~;CTW-xwVWpdk7It_>0ZaH22@YsObBZdjtDc|RR>8@ zFcT2w#?fZejCAN|#h=;DRq8wJW~oE-vu|J-t%N((yZn|`R$tR<^H^F@#7ff!fvlK^ zb-}=2g7V=}0LUKqF`*R6l3pK1j9!%o@1c7d)VF@bj}}qQEH9JtzkpW#P|6pyHYv6- z@CK4oQj=6%!zZR@*|54CI~2*N%ZX1=7AC>AsLrDrw0$+-*+})A51c@af!GnLBXX|; z#BK&=`{8bsPz6tqhkb{cE71sB?HY)T*Cx)|lAHiAvy`-FhF#9(aKP4l^6411l`bSaZkWNn1{%+zHMK-h=I#lmfrxGj#TH&wB zR}92XziWAXy|)D=A1!WL$m$AuTl_3n@-uG^T3i4xE$VwwGH#dW0rB(cxh*RPO3d3- zmV&=XHGZl+$7|SLkoW+5!^grt)`l`LNS;702-=ZtaU!7~ipO)Mhe*X1 zKF$?>Ldg!!y$B_nQP1FRT0Tp?+kyP<-DcRb&w{YTQjl+2=?5+g7JeKCmf|5C@lp39 z!_e6iSgJapl#+G5Q2Gi^dW-|5`Y?*FYP&!u0;5qKf(Eu}Mt!x{s1H?Rz|AaK(1W!O zLy-$s^AmyU4&17~C!oNZrj0MHe(pxdcnfArRbLk(VwjewzAQx7et0{r{gukvzUPC) z14bCbahw}e|Es5$2fPN&WMT>l4nUaSRRRumP_#v)#XnJ6Pi3AALLQ~l9Eew!Lnl}_ zh`xZP9+-%X>%%GDl7r7Bh{};mp5VhN+Ay)b)+`T#U%T8-6snFS6vow0b0K?yg}Tnb zo@VtV-R_-6V3Q-fxjE$hA;Q@!1NAZyB5T18cU{IwJlrojRc+@uCo!S)pq!vwG|M*S zVocyGb*%<`g@@H5pS@H49+`_4d~=-ON}74sXuFS&S((yrB555`H4CEu(?W?tAa^j3 zDP^bDL8Kf|-E&Bcuv^V0wc~z7tzn3YRe^55hjU0wo#^GFL zIgr>KgyEOA^Qj!DI+A;phJOKGOj|AmN1`^yA_YgWTEIN~G<+Y5<6qFxhKgu-CYrj8 zx(~P9LUUCN*Y>GZ-{SdmEGni4ssED{Ri3|>gd0*D29mvx?ZKjct_B}WP5Fa2@E-oE zA028tNfXdVxG6Y8T;dOl{f6Gxo7wDVjX1UaP_~IjERqWQt-m@hsdt>8o*@_@N!^#; zAPVIsKx0<3PpOV6K#5+`w*rvds`QuDV zeoB-{xqOfG;jy7`pUp8yy|cF;yH6u0t&N3#O+-$1EHCJ@N6gedoc$ybTaCZe#+jAD0wCfMjP;e(;CJ9D^v7CP0z^{@|Rj!JlPUzBbFZL)*8(NY-L(yC)0S zq(q3SCmBZTr=lf0uOC(i5ec~F}u<=cJ<0m)KdoQ3Xtf#a2lF=#&~r34OV z9#kq&wb*ZYeD+(NCbVIy4ZiLA2zxLmg_h!aWr|lviNmJ$0CQc5ZglD!&d34UutU18 zp6?&YI?Twr8?&NgocdHW>#46G>pEbU)~aP=2*eXAhhxHzzDDs%`hd{pYp|+n-UIah zSr7JOu924x*JB~CD&B8I(NvvnHK0oU=^^CMokY%C@JX}+kfp0mS#D{EoJ%)*$AI)0*K>hPjL$?qRq#Nqeu9sMei#iar zxvdvX};eq9+-G*JNdcT|7EMET}&A{s);0z=~K$-HZZo&^d-*`7B-1;8+dvI-< z?i~3Z%`kQrCYb!v9=7{}i&K2TWohW6cA4!;E_=?N%O)}rvO z3xv{>NQ?4+D*1vl8ghfvfc>p=-!3S{NX{)V|MTjT*tAZ+yG?ir)sk%5C45)jCIQN7 z5=wrFZ*H?Z6lpGOJRjTZv()QNs6Pop+6!{=YE%BQr&|NScTL$yC!Ql=#Fg--p6kyI zJFEEQZP%UeKs1|ScTi?hR5)rD)%>jW8L^U+)0g70Z^?CutTB@Zm6T5NowPh1Q{*!GUce*?gU)+l?$>S8a2^e*N#g)K-|H~{w-z5*sY_6qV)SDt*FZ`bh zu1F_WDfE+C49{hK{iH6}pQIo|mezOeGuWhr1T%Shu&_7u0=M@&0FsrL?eMaFUb1(- zBWmF6mfMAL3!i(X^HDiN=`2J~oE1Q$oYp9zeD65TChF%uH{+p1vdDVG#5T?Tc{~(V zcEn(PB5UI2#X?CfQf?4G&LJi(Z&12szxbT|6ES_KP_he~3Mb0b^+x$lC7dGPpoA0T zp-PuE@QN2@8I%s}SDlIrBlP98*XIbOK_VJC;Wd=2MOy{YF@fdEcRk9n zOUlj|q3ZiMZ7Ea~cnm5L6Ll?L3D1#dD&c8Bc(lVRK_Gwm#=wn(flv<%$FKQ(= zAWLNJooU2-@1ljbgMydx}uHf~Q0)aLQDH&BXbnpL|93 za=4la(2W7wz39(DS?orZ>AhJTkfpzt4p|IV0eU%1RBA#?)!pWgv!_ZhT-QYN>VsCssVp!dbiT)Sm6lGbf`-#{21{g8oP567G#6Y00sQ!5OP+jqX(hI zhxIJhfk(zPjOu|X)dVXA3U`a%j(X9e@3}F^$pCzMqETz7e%Gi z;(QtvD(-;?cEHbQ6K95Jj4+7*QW7w0`^W=yPO{A(N}hC#%%9mVPbkOkPLR{}YM-S^ z>6}n_CM2FzI{UAPtw=^HQ(WVLVOEgv+Xcew-PN_yTO#w+Sos-{dP^J~g$3e)@J|1Z z1A4WC>n|}~=#!ovNgqV%QF}ctwl_~)G!IB1&9R6Eou`f&rnLUhEC&Fp8@eP0W1@y? z|H(eO_(TiZerHzaqAL=J|9+$)>YcwLN{VSl4NwG)afm+&&T*xnEvUm+Uz28geW+$P z@~rL6%#84HBQ|~ zbO{L2aOHX6!kt8NJN`tpSJn36hDZ3Rbx8V-z#b^XzQwc|1jdO#<^!?1vmWzPo}Gas z*H%tQ`He8HyRopP5umt1(#NFz>1y5YTtnX2z&$yq43EJ>rXlJFAb*DLO;tS!5hi&{ zGfF}iC5!G4O*nZJ7y@M#@JX_j)oIUFj>9aYQls{lf?5E`Ct_=+<#C;D0sNpW$BPCg z7+do2AGyINBERqU0-rm+w`{wX>bo?P zx^Irj@b;y1^HB0GI)~B!K)mU~3z1YhFaI$HgUJu^$HV+F?}7odEZK)K`k2T5fQPeJ z_z6VWi2a0W7iPAzUCQwou1ACy`7!*-#h*OoxJ90=9Jk6hE5~Ey!TJ_?lKS;UoJiss zmVX0CGY7WAt}e25+X9d9E5zT7*}GiMa1qCW z!utLm5w7Y}y3K(&V0JE%mi1&HK@817(a@_2*Yq;JHNaF+ZwWYTu4pCQj2w7Q^YanQ5nmvsGer2Ou~ zfn@e8Y>Vv_^}U*nZH0&Xu-p&391mRk7zDoFix9~MgE@rWTvy$pBL{Rs0=q>)L5 ze;I)Wa7qOlUwh@V*M5;DCw1bU>3N$Ya0j}8H=#gEn2q!i9Ek&R*2mobJ8mZcu+5UE z9zl|$%gMU)S%_DXGa!Nv#=^oyZpVG4OGC)EeH}u1G0v0nsKZn*q8Xm4z8G!6@U5;` zhR3wJ;tqU3fyqax0E(`aNbpqmCEDx?#UYy&}eEZQ(zPb^GpfRuBZ9q+qc98OAA>iqM(eix$8&m~6)yj{CBwAk1s(m#$ zy2cY(^7K|?ji31qu>>PgH?vhuLblpj_?ze&^Gy_|ZoPzJ*%iJ8WGNlGCq*qDY%+X@ zbm!h*6Qw8^iae_A!J(vg57A-dE_uv$p|FK}9q;3b3n=jr)~LR^g+u)1O7qL@HIN?TNvqV+GQ7H@MQ<=@a4-G|r5>yz zb>p6@AM#DQT<;n!_itYAga5bXG7kaON}%aY)Scb`#Yc&yfH~7HM>u`{Nvx(4HKPUD zcG;2%%zVByS+X=_Ru^ZJE;Ol%>q75K5#Fdi3$jAKIN1wylQsJ-HKI_SGsr8H=f&O= z@|#jXxRpn;`;z?b=E4Lf+ASOXux^5=*8n{p=XGx_{03WKHGTSkbLnR_Ac8di6>W$pNk0y4oYVl8Zg@vaPheNztllXj_pM14^^--<%X_h#fqE$Y3q zam$*8l7JC0Wj1k+$;y;1Ehh8@n+FNSI`RraNd?*TO}Oqf2-lwuve1^mrm$@J~Y0O#De(BDHH_>ZpmFqibXFSv}6>8v@@njvN8FTg? z{Lt9cMJ+%UF~f)GkA$<*IeGbXjQIU+)QOIF@EQfuI)wb*Phn+z>6@ipol-jNoiEh4 z_)*$b^*XR#DE`4a*tI<r_xB<~m-n6%&$@ii*ruf1+ zn9{;;QCX3bQ}&4~6RGL*x!goGBjVPK*ZW{Qx^vu{Sotdi3TQm}$4%UL5`l#qPcFtg zi?WR4`lybZW>g)2AHj$`ga?PyWCl`|DevyX6M#XL2psAXz~Nl3d92%T+cE4As|g3v zWf&QFW~4hmdV{c)ncqMn->5r(1u>Ijmkk44tKqE%F!Bts60fL3>!zh|Tz(-?FTU{M zq3#8wk*U4j1n&A}f|}LVM_QUM2_JUx8cKCZ@O0vy(_2@hKzq+ad!bo&KdaZBcfHQ# z^$E(9S5dPk4@K%|YbV)eE2<|xuD4*F+Itv?<$TZ zlg(u5574!=%nU%N*SKp7&#&>g9;oxUmZqUI#sk`o!ny~|9${Uz$GvgIU@^T(WYvI9 ztxM7L^5ZmhJhFRAeaxD;lIp;2c6Sn)7~@he#gh(px7EY8@{^8I)bJQykleuHAG68E zImZOq*aJ!A(HZhCMUyDfog?Hg^|0E^Mm#xIU%Kxa*-Mu~jhB}Y$rjQml#6sbG5@ig&E>BplKDK`=&k6vd~BYdrQNWyLsIT3lT*KQ_^8 ze0cYTzBSOG-G#7uZz{~gAH+~jn$kIRg&nF1O-<91L=5$VS^#*js6*d~6TQ2zUSgr8 zhTZeG)qLv~al7Xf*tW0A+KBJ@1Lrz%hTN&?2O;BB1oPo-dSYNOFplcJKJ2GW4Q<9YY%vG1(9fwXvzn$jL%3@Z`vGXO`_+`#M|Ydtb_LC&FUwRM;Y^N8_AbFfid;A zeQjLS(Vb;$O(yOVGrO-#jOJA?b_WL3+dhcqd;oH4dz6cp0)x<4CavDK)<|PHR&9OM zuLk<7{E;dl86oFkeuixL$#5?nTg@(Gw~#yW8P%tg7}AOK5^X!oz^#S{#}Mi3-jC*e z64QKav-l}Cn4QIMz!ELne3lcEQk|i6*$TtOy4sDj)k1VOOz#~?ZOcKt`TMJU{~aUB zhH^1P{>+HnOp*7FK!bn8ENbH*0Ph#9!AFuj*^j%@gqL5T93I!$ta+}n@`S8Bvph~% zmnE!|%6|QMR&LZCHiXif&jH1MrblVYQfghFODha3?!8wItZg99>71wGC-rT-nXBd->t{$DW`;cD z9X{3|W~Imzvwm!rZxYt^7uJbpchicYu)%+nDz34JmOY}~jIp_vZSJP!C(z_PYiMAn zPpP)&TE6t9p9rjnc`H7JL&KiRqm@%ud5Cf-o^uMwf?DrL1Y}{}OO|4qp)2y78t4u?dpq1_=ZOPP$=X;E(&#(AC zZ4fIc%m0Y5K5o3A5d;r=H`b!kQ3+-KMFm%9ooYs%L42UU5#@7l!~I`_#y-F23I$91 z%j9$|lwN>GyG{E7*+)8z-9WPK4z&_Zve-0h&^G!cp1azEwvqIb6toS+7qshq<2SmF z8X)C@ZM9R%-y)QIW;hDOV2QNoeh|VoYTvLgFunK!g2w8BkY$Z$=!mIhC1%GRl;LYU zLMhg9m#-cyaOo1`asQ=36pmU?-Th?c1mP#J!Lb_FR)H1_^R;$ z_w}|96Zp*nhB(lsnaayaz2iDJ9}1}oG38| z+C@Q*7)e>#Nw{y8y*H{l4SiAp2#e9Fu1zn(Yi78<1Ozd1mu&Nx!5Y-WS)~0+xje^feR8axNjb1m z^|?OrPt&^+8ToWnI&ByH7)7#_$5);VM498+qH)B5K#ZKf9 z*i3t$l=ms6J`H)#4Rqn;WtN9w_8I9bqdwQTQX-b0>}UN!dX{gIg0R81&>gM0kT}W* zfq&wKt;!vEw-4<1eRz9E6YRY^NGDs{M|W!IoNhcpy1WQ4^UK{Px|`16W%{Y{l>Qb5 zwREn!{Bbj3l@YM4*hZ@Fy-cOsN;)Rqe6xsEFCX1Hb9 z7~*i%pVX6h5i68?9oiJk0YHNQA*{37wVT+CLBQ#ziKI`X3j+P<&qrMG>;z&3prCAp z->VztI&NjttofJORa~a~;#aE@-=#ZCOM&qwyZfIsfQ&oRLbqy4tSNd}u{ef=w{3W{ z7&#)a?ZM=CFywAp=9QF<@se^+hh9)WRW~Jgf`t}%yTz1HH+3S0rhCc?rvds6VF6`h zo)o&LBjV4{P`H^T=Rrb&CtG$sCY0PtI~Wa*kbaFNpNO>eCcIlaw8)xk`8GR6@Ta)9 z3Zb9V2&UY1*62OT=a0qkeYc1?E!bM9jG76?S@s5drPY=lf?!q_MkquPW1GS?X`kpoc(D>A@FP`IN~nU0#Hb9{EwR-D@(-58=Ze z=;vceF5UT1327y~QvNAGPphCPo!&`ov+}LsYH~79vfNbTV^$Y>{EKV62zrh(uU&Uu zD&btcLTCh7G)eX~#5WOrX&RpMpGd<=-(lpCmjlifOA`ZU?yBPSI3-S(nzDdKWq z4D~vX+g{w!Qh|O%!yA>F^WM^80SGg$L@XBfRll9RC}tg8@+h#2=?ME^x~Z8K8FP0KTpLE`FNzEu~w(V zjw1u>M^inJX!oL~JOAp=jEHuo>ZQJ&u|_*{UUZ)itncfGXehbqsG0yvK(xQ^cD%yA zMi0$2tM0FXB!m`NP}Fy)P5|z4^%GM5S-?g8Pn!(m8mKF&jf}P(>g&zuBBIN&dOf*i zT^zJ(B4j>_xAH+QZp8A7Vhknki&8$1s83<%Q878a94+zg8M?gjb*1l=P1=*n4taznQk`QfsPdoYQh|o$z2~1*tC?A z>gNQdwL3U1MT=8rq@gp zY3LuC1D$Xp(>tby4A%?ikds|?FR{MXxeCp`hlMlSVF~Uvs}(Q@Ycmgu%1)iH!r##Y zKZJabKmQ0!?$1w|O!p|0TTSw!d)T1X_NlNEk3g$8RFQtd_9UjWq*hv@Oc77A2dKB9 z(TuxZ9T`lk(sEHSW(LwTYocyv0lX3o)6$DnVZ+F5v8L~VGf9uuHduxe$Ka?WxEo1;x4}^j#+6$`t0CK*`EwlT&ZY}ETy4715(xE!f zDBaZ8bL+x>syC3Sw(Uo&fi&&L((32N)y0{()*pKPwhTWO9RC47YZR3uonpJm>Sw#;fg;PX=jP9{cC`2{yQKUE|L9%5{8|8J z2f2bvcF8is-Y!}MIZ0S2T9no{=`Fvd!JoOs#~S(e{_6+E{hPT=gnn$n3(JCN2-iow zex-e)FCSQt7IuN1_LerjkciA6Y@XYZ9c6T74BlVBYK_aQQA_oOhczGy*H@WLSED?- z`;JwkurL5vJ@hcegAKd~U}NF;XZs%P^|5zTPB{F*K`y++!k(LX&>x!PO7W*RS4S&~HJ0)x|ms#s=E_49YSbm$Jzbg=c`}MF7i7(}GgO z-~xop1L~b15wIC4Qhr-|%}aqH>hUjdiOHV>Q7f>)$eXs;VM#!HGx~y-T%h*ug;L%Eg;Wq z=AnfU3M2yC@~`=H;zCM?``{fAGI2{KA=Im+BQ;204BLCE85&{JTzW%rn!WVo3qw6@ zGZa6DmmYL#4=Rmm(1Y+@_~nBhT^_CU^vEOWrt~_H!Y_RXWBc0RI~#%TOxmc$!5(^i z3yf2=r^!Pyo7oP!e<1v@iSF?iN=}i;Hp8*TYaMw@|tn zatiCvp@DneE$M}czDK!z)|=J%lumo$Y++rquhMM%^9djBg6N#Wky6Kg()}LM@ z1s#&5A(u7yl-9d^HR0GmHV?!>z#{iAC@5IF76nnI#*X)vox^Kt63Y4;H*mGr3ZrsN zm2;I9?R!$XC?Hu&odv}kV__LV|yfB1tE@WYG1 zOAG!`A$Y3z(}q8tfu^>iB$p{X=L#AUy|jdGj*<695lcJ(WOyL@jEgDnDnbbYz`Hp@ zDaw-X#>k0ELt0Qw38Uw%(qM*H4q9<)+QWFFATbd@-HfMM`IV^To9>d>gASnNopB~p zaJoHme{jq0xa;OO3nyP#=sZ~^nhRwfs{(Rn@9>x+JJVE`7Kh-MVlH! z4YZ)^7W!-XEh7$TasE*1Fpx;aHPh^_mnOdyunASqrX&}?NY0{x;n130c0#W@rqg8< zbi5|M>czSb1V=p9Y|K$U*OGcs{+PcP~M6q z0}nsz^oNpFge5(Ls2!0Ug<*K zR$xVd%gAh|J5rWCh~jl}QYn^enZZhENPu=Tav}jA+b33_iAK981K_;`jbYaKGvdWN z8ibNxpppiL^D@eqW&I*$L}iOES`PR^51757g&m$UPe#1A018WFM%Z~TZMO_)JpCq;pacKl68T(1OVFd4b7w_04C(}VM2=d`=gaN&(q&N88>aroekk^cNyu{*t@!AW1riO91!pJ%!BLns> z4~J&>8R?siF)D$GpJn4RdMn6Y{iXaUjO#{4*ZU4il7|(o&P$L-dCEpdYF^{bEAvc@ z*W5n$p+F)g2W)kg1T7r^Ml_g)ExLN=T$2eCq1N3m>AEc7j<+?yE7S#J^1Gi_g_n}> z(vneqo6O8XQ-uvBW(<+H^Yu*#^>}xmvQ-ZUpjN%w zy%Fln-zZsHwE34$hZ~wI1GrW$#H{MS#uAwmjP*>+RxVfqSH<3eHKn&`17UtT4j40( z->jx0PwPGEXHU-((+}-ZJ#1?(t3wtrvzczu_w(;Bb^jFc0bai7)SW4XbW86)cLL6Z z?rwp~+_h|es}!<5U99W(7@f@#-mLdpjs{m{Na4ScUs4rrPC2fmq{h ziL`~Fy2iV|PcS=Dwrozu9hx7Z*byxsuoVOcYPZ8uN%b3%761aYsD<|fY$fp4W1)3w zX|R?Qi97RR@3$=gt``a~A#=oS5%F7#VdI`OuBst_^1fF>ib&p$OZi=jjISLHehn?VdEdS?=$_&$sP`6ucvawP;TDo@lq! z1yl#@7f5$kprb!b%00Z|(Y@I!K8{Li(c3lB`WS&{(gQ3;8yjHb=)&Q;83S+jfyD^x^};Z?W7C9NOh|`i@Z4Iv+K?c zPje%6{N@Hg&-PXKDFiTH zydU6yI52$AFUvw$5ZN9`I7nA~XoJ-|qphg3dBYqSZeB;rGhCfwbjR77@x71wKtt3- z7X9$KJl;MvB?n|+y!P&A4pYD;>LzGuaMxJHcc4~l;MSJKuEbJu7cHfsHu1nF5qKmJK$8@;{$^#@1h-y>8g%iJ?$@U zL-$?_qP(lFCrs=0ndr5b;os5uz?F81jLlm4Cq-ZS?})KklZ9U#yB{swS4zRTMN%kt zt&cV3veS5X=PYzE2P%jz^W?LSx)OA6TLOO`_1AyWbv3U+*S%;->8-$XyqnbN4N+m~ z%m2o-gPyGU@8W5g_m75c56bQH5^!|hBHW}~y+Zjoku`hS1uxs;56=Avgoc~~Z|O;) z(TRFShKmS;yRvka;c z3nwlcEPQVAgr42=YrLb(lfH3Rr-yZFuX%*ev%KuM2Uf|0o@%LapOQhP`r`F?OxX+q zS$F{|d^SU zP;KnV8Z4AJ@Z#xp{eXd4t6n#YT0sj7Nv{*}y2Uz=TVJ&=e7xuKMqw3blp-la3IJ*s z(numL%eR(!T#o}}uJx47aXsPBFG?bd>D;xbJb4^dyK3gWMr+R{V%a5{wIJwil0x&F zysSIC8f`|rWmLV_qE$X=!cUUNAgSG!gPB+xj3YP?V?K|iljBt`Df~NH)hC2kvYZns=vA)dfztC(c}V(En-A|+FT1<5H)ArOr049u zjuxB%J5(P?;I&%3th!WxE{=chH6EC$4tI|*vj_d_mZCdg=yy92kULt2H;&!{IK|I) z>N`stU$h~T!waezAfQI6~KBiQd7rwwFW8{GqX_3g#O0-k+Yw<92KSg`^QIqUi=}qtOq<27xq`&~WbsDd-uEWpY z{f)k1>8&vCqV~JyK|LAjMcT1NxuUvqgm4D1To7UUe_3fyDLVTIoEUr)ETMw8I z19oPUqf3Ko|21%R06o}KAmBi*F&i%so)p7xY@fx$8an!HRyuw1ETwaiJgssGVJkjz49CUL2cPYf7U+l69}|+o=sN?b!4duzUI5vLTg(R1DiD>d+X92( zu`=dXDq^L0y6h7ZGmXR_MH9~n;a@{y1(IxN4aoHx3_cYNK99j?qd~+@6^MO9(h(lB z06llaG#6^+1e73g%GK=Qxj{RZ(R>;kqXg||{yvA&x`jvV{c2mBnYUGM`F z&7ifT1!KY}KH^3qRPS5DwBg9yCcHGGjC zgi7t&eOR@2H~gBl9Gw3+K+npy7%kHioLh#yT!KG&_~ZAoZ}`YKQ{g~RqDx!-cwXo& zqKc7CB(AU&Ke3Cq{>K8>78jV}$(lk4Vj*O2(aJabHE!jbfk(Z?o9N#5 zKHo@C-~24fv5x=CwK-N+r~UUeeM)BGwVBaV*J^U;R!t`3OGWP9nw$Qt>-y7mDypoL79_hraNs@4!#_RO6?7 zYUDb)HorQ(Mw{+oJ3x}CGCSzn_i=QqpZb&Or1QB!ee=^uFLSa$q!3ExkcA#VsxkWT zG?a>}dnlQI{vxN3VH;hs67}GowV;;!8#VgbE>Cvy)@p!=m3%(Zqb;e`?-=vZ`{knO zeE8Fw0p6?wt{!&6)x(Z{!N?f)=E$&(D?&Dn3w!8ztVSqzNOZGcbKsl=>AN~5z2R~n zK7M69d8`0iy9jUL=N^**WxGzF6y_(z9=4rsG{bwgn(-US`JIqyrNnm96^!aL2a&wu zm0@Vz>SsVww_|Spg?GA8>bG>7DBnTeW0}pWLLWL=Ig(r~snNhM_-%R;&TsS%dL%gb zby>V82Hw?IUkAjyS=;v?zNZB;Z0d=R_{VhFB^1+AQ3R_(6rprZ!JEaAl>e~nS7a)SR$3Eire4j$C==qPIuSExtt?FBd!xZ^1eEx^LTI4ngMx3axRGIsrw3@-0O%RMQ-P6~~fMxVm{1S+2L5tk_b^-H`vV9d=Q zA?muJ-q!u4DPo=d!)N=wK7ah9mmmFsKAe&K?uV$C;x)bv@8R~IUO)dU^aHx{_eXv0=hKkQZ6IPKEdEpm&e4*AGuW`fM z*7#X!)YTy2L8G3Is%7jE(}yGIH+=*G|LH{Ykiy|7UU&oY?mqL% z^?kfZPeFctvupo*?>gVV7cPnqyn}7!0r@EFU39=AE6OL^_olc6TcC4;nIDt^!9q;Z}cXM z+LsYjuJ%!?syhLDJ)Xv1NfS}IC)8AH^6D~F{EX4A`MP4t-Gnp>Z=mK0hpM>}Au5xl zhes=>G=QUQU4hnjQ|o)tI+$7GCvoTP6;uA~VTXG-op}{g>OJf>pxuIsDff8T;deOa zjEX7udDx+DG3PZEQ(pCQ+u?eFLPM`~$KoPo$F z!RP}vhFZ#(_T!h?F_+%XBD(M0l%`B?`h?z?^xYwp+#xjw=>GK96?8TZlg8HaWc8|m z@?>I9z$>20lSeoL5?~Ib+Sn*`sa^{b{n+hH>|Eqt=aFgP9gsTjszy8uxwrd1x8CmO zsGP3FT}hCLTUjEKpTkeR*hocValZnN(_Br|(Egah3~vRE;cL$Z>X#4Y2I|GXu?7kl zFytKInEq4@-4=!hck`s+%~RutuI8!K-8?;|W>>|_&6789gE)2o(M^A2jZ^sDxZ*pi zhTc6`IfgX*-qPAv^Tb;3o|lCTe3-RNm!E}}X@5N>cOJL4w-ee2|Hl0rCZL^V7S0=m zE^Va+YtWa_YG|7k3O>H@H`RLKPUM7hSZ-lZZs#(>E0X;o{tEQ^c9t|^>=QZV*)pkGl4RAb$egc~2NW_T~*@RADld9?; z1bMBt`<5pMIDAn!&Qp6Fm*TEErLlHe3?@%2`SBB`PV^@2E>F&|cVd#St9sWlq`K4I z&rqMDC{G&UpqkNwkag9aD1seF+nr(30gT_T$v*>Y1!zDaS zaoX-{tc-~PpMJl0F$Z0nWoiPL=+FL$iGIm@*z-=`zJs{#9EaYc$@g(Q(qtz2ROB~(?;S|+UO6P6tP`f<8dkd%aIau>|v76hZVTR=Mr5T1C6K?pq zD3#7P)Q6upBpU;T04C*s`rB;Z`9Qe83VY} z+pR6#&bs5w-`KOLks_)W(P0UTR#o*3t&y!T3{cy{xnjVPj!qYL7CZDLLtHDuc*D_O z=qOBAf4w5%0KGJhcKA}n3{(n>6K4B-I{rB7>Y25a0u7GA=oOSOE-Q46%e)t{s~K>k zdO{tlkob}I-5;c5(wdw>)U-ccuH=2(;z`Sz_m;jY)Sdx#Kb{!gne_OnaSz2|H`okA z=?lFpmN)ex?xp8YcJ13GPTP#k;`kw*$f&t4; zR@PuMvemFNfk$UbK4pRi-Bded1H@*$@Bv`u56IgB-S-rS;`%<*`<~u?!%oFnoCqdJ z+E>f9!g-kTH0wpYfm>I}(_dF>>C)9nxb0S4 zG>d&%zSbt6VdoX6_}!LwR`IWe-#cf{ShemjoOh1w1|}3ZCMwq%Uc41~}%?GvB9rl5BzOQd3r1QuKeg3xc zdToVD*8)zEGmU+q>h<=kV50qPXyv;;kQA`TT&Z6FD!9~78^rxVvkm^Doq>Rd+Wi3^ z3=U!=p7->|&yvH%tuM$tzWoK9uwf~SC4dT~eG{Ea=`}h*zYiwdsm<&ZxBejRB#37R z`pu$N_(;cU;-{!-y;k2wH!4;OIDDZ+D>RMVoxIzTLU(3psyggbfQC#IGSNA#SAv)! zDdJBaL>*HNIYFlSYxllQH!FJVoiqwQP58a^vJ|l>mG0nh!i+8P*(duf}C}G?Y)N5jr%C&XPF@_rb5mhw~ zVf9s#s`g1-GpqW^?hu0X!hYNiH17*2NPP=(DM~!_9Lyn-(6`+T33=i%NovQ9qe76O zKK(dLLtgFL}JI8+t_}@mswDngb}DO z0&DaxJgQLry(2`>w~pN7@CiEa^a|>LLf-@8o-!RrN%pH@Dgs~xn7n9p&;S??CLcnl zDL%w8L|3C<;vBRKbpdmU3DngTEphr_bHi$~s_Hph`0H#2nOxggyS7DD{a3UQnyI9X z+&vv7OjQ*EmeXl#V#Ti{xS&V(G@;f%ee#)=q1wtzJ}bw;udk{a*U43Ho0sT>ukq7f zgo1tAn+>p8-y&Ux5n4ao1&W*oUNlW$L(YRTb6%Yw@6EkeW^oJC$18sG5#^hz3U%&+ zq}ZcTMzSl`wtV--JH!#9tJhq{Y|}IOsvY{4>6f7~cU%Q!@EuHK#jl=qwR^%Z?Z+`! zm>$P48aK2`;*wK5hKS3!@vCSFoyy2bo620B)A45YGRV2=&i?qZ4sx&h(`A}kmZ|gO zX{JSi%bUhv%-IKF4fSchE&8~9;ty)Rll3kfGFO*?cr_?Lz5WV0*D2xGkTanB%}+)lxJdvHVM*(Ei=mBe{z_d~ zk|t^G5r>*K@>lg~&>>VOo|kq6f3WhUC5$!(FV8G=UX!Z2)$ zP#v*1U2FYVinwIv{J2(%=(wJ?GS$yWk|`(JDD0)zCO`sk|1Bn9R(Wou@-h_UvOh!R zv!MZep16RUJHR0k0>?vFh8HIqa#Z{ZCqsS2v|VifI__N;eD=_WQ&5RhHbR?n5-J<6 zB&wwLTP4YL(}ITIf0m>bcGG)a^>|_831D+9l@ZidsS}{gju~OnCArUN;DT#pLgQX` z|DnBqUb2@XgdSjEtAdWNz(utqFm5;3CA|D^Oz~IXF1iMp55`X4)tjOHv4``^CL^G& z(AFEg#2*AnVw#pdSx;Aqde{GJ5{q5J`@q?f`pFl_jRSwj- z+sm%X6TqTU^x|46I(PfnLztBhwei92^1Iu89rGFD4P#(%H&92qWxfM<(_^-kAYF97 zJj6jG!0i5jmU--v)910D9x7w$EF@?W(gKwRTs^JTwwZ7ny`T&1K-(_5uU^|>!aeoJ zA+llZsKL>bUW1|HXWSKTdzF4IQ$_j&sv>oP8bify9H&4sV5r!RK6Yv-e}Y+jCe_{m z6K>2m38uhMw2B0yF%<10(N2wavAAO&?c2~^M0=JnsReC2Omx@&v&IS$V=z{9(GBXA zm`Jvhf7fN2+#dOdx54P$(zAdJ(gC@QXaN~2+r2yri53vp`M3&6E}&F*0admuk*Ab# z3U>kdvjQR>QT)O3(FJy4jyr%d7Eq)Kk3N7cFfN=$qg9$}!yF&d;whDSFDha|0H z}n(kGy+j$kk zg-;C6;JyW@aSe5$2C1>?m_2iwKk$F2beTTujBgNjlBL2Rgqrap*+!+w`(49@W5$G| z#*rV`p-!ZBLAd!H_gDIRiT?gV ze}AUG7wK=;Ud_UEkDYp{sMo!Q$ZCxYS^@ZvTgOD*Gq~f^FlERSIPDj@RMku^Pe^4p zE)6^~n;wCn-SnTSHj0RwviZQaK+pT{+ZEhq@@(oOmimBh#`lJ8NJOLO?t_?nN0#h< z9d%dB?icjbeY?wjD0L^Y`^S0|s8(=@*v1A#BfxtB^DafS>bSqZV}M#;@o5+=<0a3h zo@UA^eLs4dDx?4SX*NGz2D4WCQW|71jU(i(r)hqrh+sWa3R>N1pGI#=mOeso4eh72 zRJjCxY)zuQhqiwHPpE50I*v;_ow^u}!U40Oa}iDr(40?WJ8VysB3{!Gt_tr6*OodA zJS1@s1Eh%ixd$cPl7N1MkbtL=33qUpP@V9;nQn}wUf7jLxZsj-Q2e`{_Fbv2dFjo2 zfA7Amt}X7a{H{N_@5{>5O$oCH(9TYJ*Kr;%$@0TXvYhY#k(;z0-y&~!-ImbkeBSl# zfnHXOTWk9n*v~PC8azzElntT>1<}zruQtjlVj2enCZ>BNvHebW5}|7}344r{7bVAF zbKD6n-awpE>odRzy)!0i0`^($&RA32(G=AVpR4k;wce<#4c)NCwEJS0cbe|>1-EGY zK2TjuH%bD@puF0Q`Ioiznp9^4rsD8ld6wE85>wcJr zDutz436fbjuNS&%(_uQe?i!u&fl=74mEP4PCDC)0cu`0P9=?H5VcZ_6C3$cC62%%X zp;aeX%7hCr7I*j?1cgq>^11K`w%F`sLNwksj9(2azf`il`g^2^EG-_?7WwDqP8@mc z>|m=ts_Mpdw=flq#tT2ez|_k&@A`VvxKIOhFfij?1rR_<&8U*D%(25YnnhP z@ytcHix308kRb`aEsR=v-LB2lwhxho#ipn z9f}Sz96vb2k6Mct!@O@2n(4T?a2AgKJJ2WYWz_D()ak3c?2`qv6~7AM2AJgYs(XCc zQHOjSlDficvGrm1^31}MQv~B&w_Mge*-10L1loe@LXF8StFDzZ9cXYdispU%ex7$+ z1jF$u9(!o^mh-<_RuW>#v0pJoSGDMf71;^o+e`s+I?reK_?|Hpyr!}Hu0e*p{JW@T0y z65bb=Sg8seXv;u21rW}9OQ^i~we$+z23AyuaTMFhRHJ~q*To}9t%_c+r4u&CG!nMF zn5u(t8q~4}j`*pGUW5fW)jZGEgJZ$Cg@$VuKBDWxdoM{+`I?w~!Zr$I@r?p_rrl~3 zZVojHrIAMAA5_<%XC2dE9gFW#$3Ci%>lhIn`3aI%t@1M5f|uOsh564otu75;ita@(pUP%mO!^@T{+ zy&J_>_u=~9`*NKT4$;+WE-?+$nOkW;3Kr zTw-%+g%?c>$6L=t4Z|_lVj{zlFJi3Cr8Hg~%y49z7|L*Zf1eM-u^x$Cw^1DHl6aQk z$R)9j;dt$ac%0$5Z%b@pIJRWsn+(T&MB;Xaqy9~CE5q^DKyeeparITai{W?{SuAHb zRf1+`II2t&^BIl`*2Ik4+{)2XZ*yxk(=iU1D-n-mcqrn* z439*dFq|rN{IP`b8F7)}sCilZl;KH;A7MDEgckQP+<^E_hNEg|@i~SsL3|6tvk>3N z@O;E;7>;Uk#Wf5sL)^;na>R2PUW51&hBqK?V)!P+H4NW^cp}5MAs)-{?T8O%I36Mt zLrdt8mMUz+QDUCEt_K*BL#7Kb4f7Shp)J+*O0Y>_Hm%Gi6l|_$HciZC3D{&Zn^%}k z7TBaSo5zdg*l62=((lo>M1sfDb=2c(7E}#3Cz#E0W)llGN0?1Ivxx_rCT5euY?8p{ zO=dHZ*=WG#C1x{>*%-iP8?y;vHu+%l8ngMOh&4B0^Bl8jXEtSE^Ek8lxX9H2f#v+J(Fb0v%)7iW=BCzU50jj$ycqU&Y*m`HI_l1CWkxM8XZ=$;&<& z@?%H_A2%BWEr`1=Q0XvHtq*{PI;H~}iD;x_JTAcD1m}HR$C1~Q9+tyL%S(RW;);^9 z5{<4`2o5u-S`4ZKFkoS^_gOxeXa_4KcOhV2hq2;yJU@OD0yr9^4aqV^n8$7uF$IGe)gI%HfM$LBEGW}S>yP^%G-+3!atG{^n zt$=43Dt~TUl>)Qzga>3L^=u0h{lX8URVm^?qP$k(D4F6r8T_$rLC-%(&sM}4Dt~EP z`4-wd3^wArd)=Drd!Dxxv+17VRw?3A0$uYDxEDX4IzJQ*vco@^Lq`KT;KqSBdgci= z(?PCq?#|Ta&w;7S560xiQkAIih}=2dsQP;=R&S-a`z)K12_NA8gpV(~_B9N|bF5*8 zxKoDuV1LZ;UQzoxx;FKGR#e^NjNp+olC(2E8g-lQWCLEocgafmq@emL{PM4-hmnV` ziP0HyKGE}`^%=y4 zNH^uia7>9&2v(^!?v*0$nZ$^#MU4_C?E#vqPE{3lty07qZ~_i2F$$mI@ezGBxR|~0 z6LzPnx(ej3E-0a~{9>SLVdGS#~njl>vR64p5W_gn$KA*^FHxWu_i9&VPOX#4B(MiqD+finyjAB|SEaUazI08(edyU_r6c%O<#Yc%4CVR)DrygQaxHhbZR(&1b) zgK#hpgKESbE-w%zMohDUt2_I($xWrB+rRl$lIpw-^$}M?exzo|%$M34oyr7a`K7j5 z=buU^f*CQU_KQ@qUYdZ{ueYD|;KBIK2`-(X{#7+9%sHSH_VMJ5(boCI7^QvF0v$m$1KF8LdS}J%8b3rUE=mIku^loD zho-?$U#+J4aGG>+jd&0MW|kp2kI<6djR(7QcncjZ5G)>pq5gjKFGb9WXT>rBX3yTJ znvxMR#B~^Q@Fwl#Ce>ZRxJyCU_d4Y!O`K}OZ1CUy1MmaOKvmr;X9`Ec)MH=SnuO;B za2uf)7O+E=S36J(1!kyh@?zfscYEd4`cY%W#mkt(y?y7fV)O6k&@zGL(0sY?9A2Zi zGKYAhXnUA~=gUf0yh8YV+nR99oudiea}*5HrjS2r;>*7s8Y+I?2JzaOJZm)8W@}sv zy~+dYaXQ2x?51i>9*WzOa10N4w#X@Fl{;bra-j>egxZ5p=cUe7y>kv3>NkdUmAbelDZ)ISHdsO4c!VeU^7@@lr4-RN79|>u5nACA%P_P9+T_cs z4c>SuAo93cQdMKr(9UL5{^IMnUi7VV=>xc`4)sN}@4Se+((k3@oCmN}4A2IvX%h5w ztzC+EZyYO`moKq{XbC5sTcKa*ss+ZE(aY3WDL;(Yn+ZO0);Pay^ zN2qFKSt;ZQZCQ@uP_G1CTxpRazPUzLq*Q(l6$r0{lOQ}1;<-OjpDP zbxvsNxXuYp9qOE@{TBx>tCR8I86FDcS~)Hu-}HBN*vmltP>KQeU_NB@Aj ziC*{_2InrahlJ~~lR3*`@q;mUMF~*(jT`PJ|HjH=MWBlpCUpzRP zk8^}(UEK(+@I9W8)X+nodPqWT`gVQQX;sx}sta%FPVF0n>gd`-*$bUb%^QA9$#~ne zC9C?w=yKmI)oXVtNr-}6p&X;p;N3D?^;%Vc8eFxzMIS5#7@c-0RaMwWYlRj)wy`-( z(?!)?T=PXDhd*%p&pF)8VU-`-J{N;YffQ7B<*M!}#VvMK#a>)1Mv{VS#lY{|R4c}4 z1=or(gdz*=cB&EMBL&llF^Fo!2vKm27y#rvtqVVuQF85Hk}D{=L)ypaRXgT&8S2yN-ChPWOy0@{ z$x1GwfL;bwIiS+k&FKOYF2s@=J$PQ)*q#Jw1iLc&DXtu9X65^+c%o5DHE7fh^`g!? z)IHIjA*-EW%7>S)J673M!1UfxbrbYNR96YRWCT@BD)IvW+I|RxFcnCRM+FlwQ=0FbC+n9uw_2kQaypZZ!c1hPSQ_Zk zD)I0otd#rJs7_+C)2nu}%)xdmRVVR2S0~}2Lqc@;qkIIH2AG-nILFfhLMq|#%k)Rg z>2eN&q5=>~?flF+bEy7^IbGE3sXF4E5~&7Ksy$Rk1ZgYJT+k-}qE*fN1sc>`raJ=N z`p_LQtXJI;Ub5Ex)wfks=>ScTV9+LsAtI>X2AB+O0Waz!pi?908??S|glF42u4s>KTNPt8c}v zaKJp(+n1Qah@DbI#z-9On#*;{K}O^3{7a9 z0<@`0h;IsT03J^1q?gmp6*S?p%7{JG{l^g=?&ZnjsJ4i6vbKoNPr_Khjt6CqA%9SB zPKK)bCc1wZ%5Nf;ma^0zMQ$7vQ|Eq#JroUbF6BASFtGKqQ!i?#h*~3b^kN}A{;Z43 z1)_0ZgBMw41l6K&{6)3+HB%X}#icSL)k9^(&@L*mN_!;y`g9K(FFtpH4{4DZY4+vS z(z+aj@PkgZqaRF68tI~dc^kXPM>>qN9dXJ4UK<<}g!FCDdBoDVVGL~L38<&xXzW{< zA_(B)bIw?;(5ZtFhQ>LnFVc(|1=>+Syphu04mn7)uuv4qP7I(nn?gQw8{Grw9LTy0lw5K#T$VdH~ zU|^0T3mll=FrN*~aepoh%y9(bIWPx#G1{lYZ@zsz{1&3F&`YZv4YWaa)|O8#bc8_H ziN@geRdiGI`=RZ{3{kgR0IBn$P1UsP9O31+D-s?3a8gFC+Odb6mO$+%x$J*ZwU0;p zTmkswzK((81vzZ0wV=P>!{#*ACJSO1#D&=Vx@G61Zk% zt2T89#o4IIj`Fc?gxv4bA;BQJTI1<8`X^VZv{&Hn^YTmAIACT%TTra-*kj;kV6AW& zg+SMC0|V7F@%BEhXF}J03-v(tOz7I@%VeUptl^ZEOQ2>W;F`~cR;S9PRRXBUS|uV` zK($>9zaydQm0yapkAUBC_5tu4ud42(_Y=LZY(K{kpZ3!XQM8{#1eosMew0~xwYU7r zxK@Tg8J?OYzL9goI{LqYNAa;cTtl$ymPwK($+4;Zj!w_L)m*h7vNH)DtN}kJCwm@Uv>ic~x~atF%a`JuV_ZWaz11(Ej-9Nz7Wr;k$`pIYqG2Zb z1EJy?z2ld5)97vX9{j1(+a!FZtxHLYSwGE-jfOFx-%@rqhmyRQ;X(3jMmLh5W&9>d zg{tax!brZH!AMR-!&97O3>qHlPO=V+f{1q~tvClWpRu2I>T%tY>fo~ES?dWkzMvQvh4BQbEBh6EmLHDjgy~GNG;IDd3iPsd=`aAon z-ZrC-Bys0o@iLUki<12tDWeKFyzcZ z)n}Kf#`QAjnf&u=p|1IRVW1$q*ki{bF(8<&cE@AS^5a}d;yYXl=?)hSUkedJCN5># z5)LQ~Q$ohBrKc$N_Huuud>@HE;WX1>N^g8QW*>k~L{ zMLs>;^Hs_6)VfM5W>q+R`@tl$>zKNO}>n>NUuSw=T)jMQ4*8d^Sl}&7IGy zUQ-O^p*jJ`K=n!0{f($OCV&mhmIar>;uJ^m9qBdD^iNnbuT*8 z+{eC1ur$E%A8&@{o8{VQG6aK<6pOVVgf|)X2Hfj=v zoAE#$9{qoPI-L$26hnU=vPcQXQ-V3nJzQbUVDE5idd(-9OUZ&bG2kQA`PAR54>2R)^|Ht zihtdSUx`<*77y*9pNp;H(o&fRv^#TMBOC8IRRyqeO!W*naW7 zhFXy6YlB%r9BMkf6`yCGI`f&QN13Ou(I|Y2o8Ip-2!7_cvj*X^@#wFpwA^aWIfq{L zZzJo?sDI`N7C^~s&{-XT$fK~8n>8gdUsd%O@_*Kp;C!~>m2n64UpSf}mI{m|?y_OG z2_6oCVuM4N@=XfPItM0O2#*=rA?pRF8jjBoI4x4IYT7Z2mN+1giuU?MYRH22pJCJ!zuS(L}bZ}80>?eFAK5#FSI!IwUx<3W( zX1odNu%SNOPn2@GMkAaJG0Qp7nqL6OKsUc*@csxAY*gt#lp>-|Q?%pjz^6AX|fVQ>56zj_`6r26T_&tV#M5WU^YytV)3S9$E}+Fzi-%>{J7CyWy> z!cbAfo3b%!vDkKLtJZiAaSQ`dilFV8XInP1i7Tb{r9DS)t(vEj2Ry(h9M$fkH)KFE z5479ZeJXwEFX1~nzDbZ!cf%Zoa9*tbku?)I!bk->FTCYOEcuZQy6w{q(D1~yVrOvo zZu$jyUw_o7iUYy=#UODldZAg0@E?Gj#Ky)kQGC0^b;-udC3tqdPxTz^HnG>S0f$IG zr{5c)Q`~DzK4lO-)T_+RVBP#V8~+3wHnEhfi*}wASK~*LBwt66IIl!L|81x|ETJy! zL*k!lQlt7~+X(fsCE=J9aWj~l>8qF0y9hr7Pjx@AOftP|U~&FN{-r|L{Hj=vNc^RkZ#G#8K5@t^No+a^#Eq2rI2Z8?R3}h70xBmaT=X4MzaHBP zy2NedOWbpX;P+x^Wa~B*YgJfd#7McR6FXG)R26$ki=n0yn8DcW0pB`$8%3M6NnV0)J8am9FN)Nn zLiz8=$*I2X0wr>7B9V3RpZtN)ee2qE{RYb=qu-9578eFYJ|}3PgIx512FP> zwoqWH_tXkKZ>n|mV_EcDCQypU3-YcOiy%aO<_JiT_d=X9uZ8iQrN{U#9n3X; zbS&EJP1_ELLRA$(y}3qt?Y_98Y>6dW;d+?D>8b9OB=!;8RIg8xH={6hd3GGp6oxXT zM3rk}A;$?+9nVSoW3}GSN2G{V{cr|#yQ(^x+Fz0P$@fFvUs%ESG(rYuEnt~fRc*c8 zJ!Ko&`NSlCBiuOow6W{^TcrHa69#PjmaSLiC=p zXF4Rwbx#>~;-2@Ed9i!SDn+ku7nM!_0ulJa&1e z-6V#;0G&OfYk=uuhxqqdt}c7Lp?;BqD)?#<)0R>u`5J^~XXF)nxz^2N%JHteGY=v& zFhQm2Ael}F$oA=2?E4PjY+0jYdn>*Op{E>wzJ=B%gRG}7r2Q7wz~C3=i~2gtb}3u7sk)@3~jzgm#yW1%2j(4imQY7F0Ym%`=o|ViOKj zB>583sM@$&fWO`&y}sA<(D>qeb;71kjOfkDkYiTk`DP*FEBci({9Q3Z-y=)iaz#nK zo8Jp56s9K^^ipt@YvYMM0eTv1<=RAo${hl^atBkrZ{{kOatEW})5w%N1d168dMReX ztPxW@Vj%yTrvbMU!t*GH+c|uj!&VNz;;@Uu(2)$ra;W2Q5r>5wZs71y4qxH0iNlXL z{D#AyISh{{D#AyIaH2ea3F_j z4&ynT&EWzLZ{g6+;RX&HINZ$PQyjj;;XV#O;_!10zvb{}4ud%#M{}s*a1n=v9Nx*{ z0~|ibVH1bPIkfTelAl=4*TEe6jq2`xkjueN4!3dm0EeG)_)SdraD6?~u0f?rgj6kN z(2&RAlKUC#`Mi0W*$COdh@dY(iu+@;16xafgdfT$__q@h!vn3-V*qAKyEReW*VajFyvA$wacS4i>Tjx z$WbX^+3;IRsVoEjtp=N1pkV{oVzL}e#oz;TzmigL(?a(G>XHrN3drr;UkTU;0ykv( z=r0$3bEvz8$Ek+c9F#t~t0CSJ8Y{Y4;jhpYf>9g~E=HP5MzsiROQ{)st^m3$?U*l2 zosGui09*7^0y$SxdWFQ^Y&0#lZXtCvO=bvNK=awNyeGNJyBI>)scaNeZY_trsv!m|gw5gQ z%cvIuWVw|~in$bdaMV-wJmZ`AJMwj9xm!H=o&t2zc=^~|E{xM9lzUiL{~hwtlW*~^ ze8_2%`PW+xa{J)NBxo;WIu2UG%Q#nmiyO!bOs6MJncn1ovOHJOoc?yb>n*D`d%&es_7oR3XJ2n!;QU+3BmF=t*z#@6apa ztzZGIi8e|-*VRU>=rbOf{y!r>-DAq7{Lk)@3z@#Vo+7VHsGP*o_BNmPP1q7xTs&t| z(szB0_b9(Vo?i69WE9J^h??!arZ?WB{QfxoZ1`OcK4i+Jy_Bd--`(El(K2GSjrCYo zFc(k?YTCP5sf~@A<%&Bj)BvZfv;7%u(E|;pVHj`A8QtN6YlMd9WNmHxK3JmJ7^0OpcG6)pC5D z%siZ%xBSS=Wimgwd9@rLH{UL&kDD)Xa}qc6VJV5^W;3n(HaafB@dlQ~BHG8vtzHU= zgFiKtboUXZ39w}l5~YNtBG9AU#?wC-e?wU#_2txO5g%_b3P^7Sm4H?7JA;Pn8H?Uk z%ZF3?sokheb@9spe^bE*?Mms$nLWAuZ!8@%u|KuTW;OpK)P4fBpTKQk4oXM!1V$8Q z7d;(qrP#O=TOj$l0aCTH7yEg93?>l<-_RUsK#x}@*}5TPOqF!IbCvkPmSr|a zw#~(`x!J|k2=QWENFQk*1Hh9L{H?G9URHl;J$R=_dfOTNQa>M{Yp zEV;!N4~sMhGnq?@spUckhuL^TPG-0Mx|8|J0XU$8JOebM42H{Nt}#?o6dv$B`v2~Fx0eaZq`m5^Yue*;5k3Yp9{PPUI!Q;>C5B|wv z)&JA%|6lN2S*H2_-4dX1|NYUYn*=D_e_ns^&n*G}uYbRnfBXxFKTngV+aJy{&v$q8 zAI+~j-#u;U1v###ykbLTRrQ^Js;R9L?yA50o`!qx`}4;8A9!%nLw|XA^COS`b<1Oq zKe6@6r=H&S%(H)c?)ew~zWv3QUVi1(*LLjO_4*rczV-Gyjl1{k-M7D~x#hsS?;U*q z(BUITk9~0b!;e00{p7^SPe1$oRNEI{{^RtSuf7)Bzj2;D_w9Eb=fD5q$DcYcbY1-U zmrK81mj0hRguWa6Khz=oPv`%CI{trqhupXO{|f%&_sbxU`Y;5{J|5-=dYJK=Go^?5 z?jGiQdYBt}nD6ajzORS*&ppg|4VtI<)gEU2{ElKu#w?O}02ac;?~h4yTF z0gS`IKE2dpo44#%OOD-GoL6Eiq7I8W9dI{gm)f;C_JWm`)Do-1>au5cj2tloAu^?F}? zu8oKJ7kX4Dr7rPTlF9M$i&OofyHeBaDzoyl;DHITwG195_#pm7sZ`<;fs**kJn<_p zzq7oe93t?(v;58t<>9`*5JPo!H57Dwe0gel4fu{7la#u+9Ku5+si~-KOdVTZQx2gB zM3bMNuT=V%S*@$A)+^}a7nd90#qTmPV0Hjg6DEz%E#wn3H-FL!iYz4#yS5K|&iL7U z)v2)C+*e*tHh~LUgUsi1$JyET>_WBPW-GC&3yRgIY)5fUz6HZAWAw5M3N5*6dx^Tl zYAIG*$}Bk!d-k$Ic_x`&j0SYig924&7pt?a;4v4%;4A|QdVCLmHcNJ{I?q;81R)ri zk;8GWtOX7jAk9kv5|Yg6r^5W}%2eb0DvgG~Z&vusEm@|{0n#Xg>O7igmwka-Jk_^3 zEVk7J#mi+sJ>5$!cDsi&Dau}f#!`DOaHpUcSW`f=FMDviLmBkufj@447Mtxi{H6D@ z`kKR6746iHt%u~$*=s3bU%up(vN2>7ge(P!D;o@FPfkg(-Bwbl&d)B+EwtFK$fvuU zms{*m%msFJPD!psU6QA^%HJOG8Bf<*-RlSwX#6&S%V;Vl@Kr_m(U)1Ffnb!GgaF;5 zB1nZAqy$p{d>u0$b%I zl-edND=3~|DPB274%|aN-SUgEfyV+{NpX>-*e?5b$78V-6%=PvCPCRkh;g?$O6*Wx zP*b{-=`GRIfcM>{Hj{o^u#p)ggSekGk7yYERR#8Zl%-O8w#~!(k45WIjx@jAPcQtF z^T+DFC#@^^ook_@;OR&0D8;0ur_COh)O-1i897Fs&2xcL)FXx~{SO}lc`Pg}S%ri# zbZ^PJGF;z0=|lc(%NAD(s8gn9VE~Z&YvJuU&HPUV{00xRLghnLiGD;iDaaZ&IFJm^RguAo{m5WjWXHg^ z@FV>jLn$qc=O56aogYO=;29n^Dv(6kLr4_F9hDYDq7uPui)f4*7jo^eeJT=d??(pZ zhCsT4i7Fw`=GW$P#0xs{gLdd^F?^s834}1QU30Vv8c%HVX@d0E=?mjXkaW5I7c$@TV z47LXGxZ8X&9wiCSg}BlJAU?nsgj&NWFZ?MlWV%Zy6S5rMU2>jPz^gQWH_vFgAU$?S zPp&_t%a24&ifEI=KQM)m9q<}>cjAri_V5_lT9fR$ZXxF6&b@(1|>p1Sh& z>P$lR&2;DMxA=?cI-r5E4~$hF<^GESukE1|M;u{(Bn;9PHVGv(FiZ9~ zNC)Esc(;7b`~`&gl90qfBt#KT{9v3Z`-oX3883q->UL;r%MilB`qRtH?>NJ?Y z15ebp!5vq%MIIU07;aSz4rVf)1~Lu&9=yOU*I`(ekXIGtRkgsK?mQTx-f1SJ^(&8h z=I=%P6%SK)*BhZE5m4?CQ0@^>?h%v18ktR-f`T|8Nh?nVGJsV8Q=qT)}IWRq;iERTtvu2i`-%U2KbkY++h@cUc_&b z7pte9GBn98-2_gA%IFI!8%=?&|2)PN~@~;?-8W#j|Kc7UWrGo6wBhiYv zgq0+#*Qg{qYC-@RYJZgs&3%OoO?;UQRct4ryxv=VWq$a(_<`|!nMKHyY(gIQ%!|z{ zK5CefgeHcPP@B6QLOMymQ(us#0s5OCEpD1&j6dhCy2u4gFR0q(L1lZz@-s%PRCB$ z@t7BbyB@|vAFLl{?+<(qgK`Na15*0k7uca}^E=|xDEGkz7jMHL?V&_c;g zOkQ$9UT*4DURu0vj5c1du9`ZL_N&2U$plKU^OP`K=rSTVqBrr0K!VJ{|eJ_{|lu$Y={&tFW|fys0Ad2Y!vwjxdP6|-#?i>Y9l4R66?j+ z=;`7wAto=r*00UYwbAr$L>_sBnBi?I$k4d;m=fFS#kf-|rLd&b!iit6UvPuoB(HoI^YpWi1p2bYWU^PP z#j?W9;ql(QoQ%a*huuiiH`Ob(q|~DnGBJHF<5NUuDYe^5R`V|p=?nD>}|4Sue4lYZ)K%u1L;Jr zLrh=#q!+VQ-CTWHj>U@pAP*QRc^P@%r?Z#0u~cVS=2*VmVoQZ0hXNv_eHPdY7ZreL zWf!IwuL4#=W-3PHBrWOgZ4@ETVi_*7*h;DCL+XdgJ0WG1ek%GW#fWQDVDvEqL(J2g5f6q^ zgH#se(zXReo2+rSWsF6n(Pv?y#bPBByiF-)NC1@=$n#$B1(0HzG-Ah4h{^>;meV#< z?_LyV;h?$vg0^S9IFP6-+cany)V^|Kl~&?v!N@bLrAxKgC^L$4SaKoiztHxpAZGk6!7vT z4>M!}{4a%)bd=^Jp;?Z+JSZgG0}A41&9+%we6%3%JovFF+g5-}!;48abIF~T$GAM- z%l!ovQ$k1rlMf#2V)8%yWV7>PJjd`}g`?U;laj^Ze)etw*jy zlO8`c?x8qB-e0OdmUmo|x9QV5Igq&Pn>UBJ2L;b2pvpizSC6`Gao-2(8NhuXN)7`! z4CHP>9&Q79ScEE0H60{#tIo8ZznrJJg2N5my^_0EaXRtqDdbaZTp62#Dc=`@;_m8=I zq(9?@%rj5Elix7+eE!w`|EuBu-Sq#f;s38bsAjF3#k2ez`M(POTc6NAALg#^^ZBOSaKTxL+i;j4epzm~(-!2jXLPd|PYIrF&q_|1LO zU-uZr=EHzz{)t;os7dCDTTe{7(*FmopSN8kWa2s&@-no?DIV_Iy%;~9<8T{?TRGgq z;bsmuaoE6N4Tt3%S~<+(FpWb4hdK^598TjfiNiz=<2fA5VJwF+9I81S%wZ&lp&Swp ze^fAdR?(gQX>R_M!{Z#baM;MSekl#JM0$ZvrU6d;BT|oy2RyA)7*X=z)v`yJC=}nARJXdGZo;&@ID9lR)9_L?!>$Rl;WWu2AoU; zI`Fmvz761hc(Wkh7ToVTiKRat;G#(^-YkHBO8}lnD9CdFzfNF$5CKLdGCzX>3h>5) zpSu7)o5*NB2XMu;%ugY}5tCW@#sFLc?=4CJF06t-cF&f}!0S4c|!Xg~YafG%TSlSu@ zz5?$O@ZSiq72Yhs+W>w6Z!X{+0MEml5BQG&%jSXX0gh0b$9NK%3hf5G8}SCC`Or7b zXZb?79NtE-&j(mNpQT|Zz;6};&%xd&jgZM{EIm4a1!=sj0S-@xd;y&pfZNg;O@s&2 zd0hY~ErR&K9vAW|7Bl-QfXy6l0eEZ)q!auc2k2bF=${1`b0edPFoWX=@8h@{rbyZF zz6p2(z;hWeJ_Wo3V8T*HClO#B$L|6-`W6;87T_zlF#aIing!{JQc!qHHjJA9&jQ#1 zuMTj8cuvLycs`z&$pfAPZUAV_WAwKy2NDHL-Ub6KEns=H18j$P6Zk(1aQCfHX93>_ z@PQ(bCBQcU99RrI2Rsts!yMlXaCiyBV*ow}Z|o2Sg^R3E7r=fAz@t_c?{R?Y+jtuY zFxUoWu#W_I*~aP-9y~DEAzq+^Fwf5FQ9i);?7Zv%w%d7G05m#aZUXIdIlx2k=7awu z0GF?YPWB7Ea7 ztPOk<;7bn^Vh8*cfZH~+egWalk3f44_89M05gw4IsnfC_|q{~c3l8ZegJJL*nbLe!f`Hd0Pi`@ zd5-u;kY@0+4d9SgsE2^Z0xW7}?SmEI4vy~xc*`eD#>sHcF3159b-;{kw=z#9wpTL9*M3HE>^Ec=ql215VSkT0-T0$h8V*HeIR zz?%#Bn*cvQ&1m8|9z2gz26;y~p5qAd%*i&88H7399^pEUlxH<2XVC$MHNsKF1NR<2df&f1Kk8-{LsJR*ob5f#V3Hzh*e@J)gmGgo`#_DeuLetu0+?kI#0GBK5Ry?8E*@ zANFm1*mv|{?>YJOv=8mWUfqX%d@uI6K8EL2QtyMd65wgBL?G#YXonPTbJhdUMk(E9 z8Y&ZH{~w%%N^`;|cKZ<2J{hQc#^>vbh1wN^iG$)0YZzlSllqm@k6s zUYKf6O$S##G>0l?)K=b7V8AkAMsSxOc+4s!@;a6`yco?#fhx}2t zK3_55JGPe4h2~$YCxw{~9tIzGA-j~9p83nfB<6vdyWT&%b;NTAsb74-{;YPI)CIxm zw{J-Qp(oM~c3nDL-bno)mZV?P-|4zUozXw=w|#S$M4c)Bk%Y*c(LYtT-^!dReVVpl zF2^mNOH zvn2hJxAwr9^z`(1@=S?;1DLsD?rrlV>D5eWUG126Zcfi6>!l~&c{LsB?YbN3ua~5A z7cOikREqC_{&?6hDb#`14oA_=G&tP(CU9W)eK3MvWqIad9L*KAudU zKAmW_T4FRBDevabpHCJoT10NV@kX+A=~A*TcQ#qRd^x%G)>}zYQ4z7(Y_$DYyLK&k z%rTSv?e^*9<#oxVa=D(|wIYRVEYXsOZ5r}M#Z>Zqxsm*(Vj0=7$x52;xt<((Vg-qP zTOwokNMvG@L}u=j$hGfEWZEH#WV|ntl;aY){)9y4pOQ!^yy;&`lG7%UWoIQ) zQBgr^Yir59_ufk$eDFc?&_fTA&6_uqEnBvbC!c(hmhblM+sUi1zDnD&H(`ML!QSm; z!+D9k+98qs`}dOr2M&<;-+!MRJ$jTJKYpB?IB|k}_St9TyECoigYPBs#TQ>txoB^1 zCqI7o4f)4KiF9;ykP8(JQhZz)`>*=Y(9}r-$tZw?j=&ki$v=52p+Mf;>3`y$# zM4AENGa&r!5dJ|3{~Clp?h&5!BdKH%)Y;)MW{QJqdmT9plHWm$L<+l!NE59@ntvye zZreJ8H6u`@OMM_tq}fY2>&*OZ-(#?=e?go_%jf` z!xerkP`Dl_6aa-k0fi@l!aktz1yJY+lgRfICGz8ZiFDp3kqh@q7G`Q@nO3Lg#O z$3gg+5PkuK&w=nOA$$#le+a@q1>s+T@OvQqVF>>zgm-#`S8@(SK=^0~KODl3hVWw{ z{0s=c1j642;qQX*PeJ&1Ap8lB@ZFzG_IO&Qq|DOJ(&{K~x+Zp1%!m=A=eS(8v*sF& zI^EoqnKQMz%yF?}#*B)YGiRhsL1zSK_%{Ng(`Ck8jUMLAQFHgX<`n(hnLu8jqMbQQ zn>iLej2bm!ICnRiHQKq_6kQ60$8?P!8y7bt)1An<=DG4SJ34Yu=J@f9Ld=Na>XCCW zJkXyz*En--=8yqVk>Cy%Lng8T-Ba{tUk<%ntP2YiL+8B_$UHz;10+uqfYB`&zv$LG{8@x2s1zmF^T56GeMBt?%K)M#wP@L zEBhP4F=ZCWa$;giirYOibCz~qazB6H>i|v3MCwMJJO0cR^fE6w#LHiU?kO`tT;~$E zJMsqvOcNB=Z(e4Kd1f-m8X=za*<%O|n_|`iAB`T)NMA>t!G3Z=O0u!LGm{^nuLD6e z>aU&J!`XvAu*RsJ+QXU5?f#g1I7?FF`Yu)Z%r+QEH2!PGbL)F~dmYP_lbJonbH6=K zk;iij7A&CSk#&|iuCd3{Wiv=kfu3x#rI1%P=*jlKtRs_KU`zq+oZ(}MEc%j-8Oi`Y z@W2D);fEh4k38}SdF-*r$kwe}=~&_AmtUsi!Pj4ZosJbgY$+#?&E0aEBpl`ot{vRD20A=mxt5W56B zrujDIuX=w|y+20p@1*y4*ZT+P{p0oiS$h9sz5hME|E!<;El&9@PWk^Dr`X@?uU4&E zb&fZfAM~#lTq`0Xg1-Y=Ewoy-;A++Dhg7}hn!l)=-4Ir{R;@a(-B`T=@@m z^`3fvyyog^!PnQ1_K4@elQ`y|&twzpGaNrr%e-iZ>#vhWx2gP^GX4#!Xc! zvi^SsU-2J$_WK%FRjCrL`c=KwpDWy`pXx0)>ACJ7e&c`EsSzF#5pG)8)oaxc53d;> zUOn94ccTuT&8%MCoH`?~b(|=QcoqD!wDM_?>l&`-3j!g&`VhZm@Tj>Yv`jl&j$yyb z@H^M6=->5!V_Zt{7Wz@I`wLLe%WpMI=erAif^G~j6l{;UIk3PLS~`TBvS_~jZE z{OkUqoYzBF+#}*2I(zo)`_=EPJb3Wnw?F>)<9F(Nb{{x!V6Pr`9yxO4pys7}zWCyc zMen}*?!=&=pzx@us0cq!!TxplDh71882Z6$9P=M**RIXe9MI~Ta^4%U~ zs}441jb_c7)doI=%fP>B(0LUw>`Rff1ch9X7|p!a_6A4fw$kzM(tZ^Zxtq8~EX& z>c7B;GiU76YQCZ8C-wbPe6Bit%f-Nd?AS3;H)Q0$dGqGAkz*$CfB4~tvU250QJ#y& z%tnWyKm2&_z4y!n_Kh1i8eQ43V~2SS4%h(X4LyNJz_#>9k%Z4gqCXO8{GLd}+alrX zL>jIYxp$MuD|S)|zqB8@gG4jV-3D-N~a6bXAn zB=ZZAQ>RY7croy+tuLOyZ>QyjotL5~=mGL_|5qZn?+|JKiP9e&lm|`U7r8}oNZBrO z?376FEh3Sti(3=rg8!FaenFNeHEPr-Ol4slI4B>^!v$E7BVa5E59kif;Sq9!{9|`D zXEOlZt?=LRxeteSAB(h6SX(L%O;m1Dclh8>EEK7^%Ksc^IpJ5IA=dsQ|LTu~8OReW z=g<{iAXmtS#RDBj&X9Zb!XD8JM%S-J?ou2&sr=uz-G@W#0+ALU`f!L;UHI#Ik-BRx z9)7jOQ)|_#)kOJ_iJoCwO2PwKFHOFnKcC|lxDPwy9&vkAN5SDsk&cSPt%}3K15%#x zlg<}Pga6lGe--sJ=S*<0)8bJQPfEh$mOr)c<@`1`@Rvm zXP3yG;P9zmpH*g}tUkZz(`Rf_?bSYgZm`Oy(`s=``qR(`e&zF|#*G_?sXZSD{K!cl z9>_g%9f*g;1zAUqc7Cu#@`gl7?x5E4QhFPM1LNWEMIP|u&}FAcXN9T5r!IX42fscy z#3rdtt)(`py5bPB+-F;Lj4lcOu&}UV`Bxv0pFfWu=r8`j@&bL}+~NTIYWHOA^S$KN zVNo(~NNdSa9A+sFjCi%54=E1a6pp{`_Tgal862!WW0P)vSLyziNIh^+`iHJi{oiPo z`KToL)!rNVS6#~_9zy3V9u^mHz#o(*TfmQ?p`6Up3^bG%^aaQpJ2Rj4tC`m^wE{tU( zTgc+!EyeSAD|vaS;xM?i96hv8wx96f@QC8j{X50MrO%!G`rNkAXOo(L==0CkCe=|K zYOE~LE*bbWzMs^jNs};*QN{s3c9A180}jMI78l;b*V?#@&+xaz42(BMwUDJ5Eo716 zkgqt*R~%N&=r2bOeqSzQ^S$DktUPIM_1Pa|)LC6J{MZXC|1Dd#tPL;hL|=g$*nr*Q zg6+rNlh& zQ*Go;#bLSPuw;bdpt^uQgF}uVhZ%kxrhr4gb~3)N;?O%*GJ4%=aA07QTDoG4CU2K4 z|JV$C7;yx1{`~p!>Z`8`agm*Fo|L60r%#`jf|ufD-PmTbYP8~@y6~Ff;PvY>HYs~h z8<~~XMy97m%e0gjnVi&CCMph3Dh^{5hY^YcBQVDJdtu4;2l!PMjQp!yj{}z{pL|jl zELdRhDGweN7w#?E@|vt4*G$$b4l5N0qtA*1Hp%L9mfEBj)1u}1)EIeIamZ90o>mi}jA=UtjO=|0kF<#qWvi%2sEB~!pwWq0!?h)xCOSS5|^8$87^2KxMrU!Ma;neh+s!}|^$ zI=}~c`Q?{Q>_sdyVZsC%Ja}+14rSp{7Ec)1q$L^U&}YS=1UpmOxB)s%nKEUa+D@rc zr;a@G$Rjd$?p(nyr>CdOz<~p0(xgd7ufP2AOJjG4g-XH&xbY3xDq`n-AG zAUSnH^NrlW#rkYxj2V7?o}#*NA^2CVT6L|)I)Ah9H)znHY46^>Q+oC4wO{S1;X_VN zj@*6s-O{ydS9#`{XXLr(o|9?QrWtt1?|~N_@CEn@iw8LjIABkaLwq57Y?v4;Tl0Yb zm~5Ie_-u?Z*cW4<&)B3FhTaMI7tFt+qM|0;dFP#@ksp=yshamUdHwa*7pM-4ekMbQ z4i(i2;rxy}?l3XJ+i$;ZYsfv2LAcg5$$E!vwh_A_m|4Cqelys-{r19OrJho#*G_ycu=~5@~^U#J$m%$kI~akojS?z;lm9dzybK%wQDEc zx^*+}!vk=z6C7;bOD;xyjobq#M`Q@x+_FVX#r0}S{#mnT&8AD1ESXFWaVhX4n@nVh zdNc0<7d7WWg9aJ>ZQs7V#Kgo%!-fqFANZVm0`VwGwybX0BXWd2K(4UI@XppZ6eikj z_!aL-O`A3iQyPv#pWl4*O@jmUp>C-9VQ`3#kC)D!I~&=WGiQ#0A6i3mUIRCJ zfc@cpVpHUYSQ|Y+2ha)D#Reoxa5Yo$|>+O~() zM-Erm*Xw)Z9bez0y!{&!zY+gn|5YC|IY-|(0t@^`XH`y3ERmd?Y;3FQy76z=8syu` zA$ovb!V}~K9$=H*@er?B7aqY6{JG-GFO^_7E0z=XV))&%>Xu=*Yy%s3Aw%fG`0?XK zZIlY6`YwFn9Gj1=#g1uCVfq@1^W}!! zz>n;fCFiBdyW1A=xvg73XK+N;RgTVRj8LS!!mn1l%&;@~8P5OuAD-;Na}Ss0XMJUq zI+ry=hMaOL$(iUOLv}e%^da9-UtQ*71^+R~e{?R>F(_bt*S@3t$F-LO{*nHp_>MvT zV+H@QlK*(E{}|#wM*EK={YUW~gE*f1y`50!5(dxrRPxV?P8qQx^*){N={y#YFLF*t zC9ob?+F-9>jeR54=XXj-NVrGi{aCg6Jci9(6cVl&O{2B=OS$DV1-c~tG~_iC4ZP`mV*#^*U2+xF8K znC~#$tTRmGje~vm`1)kjLh19h^4D@dJ}k2NCz0q4X8#|{*#9QA;kml!ad$u6K5Js@ z=l+=gjLySqa|_jOzQMxuOzAh$=c2ztO`KZnCr3mIelAz9Hv~I9X3UuQY15{~0RyoU z`2+qDyN)lyRujt-r|=oC8QqJ{_6zCp(C?(CO@D`)JUzAx?N1J%IcSRJ3;k?{i<~+nr?m@ro!S8(iK6+(K4wY28IA6SxzrKe`_p@+e|&#{JjVEYH1zuDF(HrPZ~E+m-Jkf!-75|3 zzXJl4fw~E_ zU{GJD*Oc$?_t9sf9*R8DW1_b)*56+m-qSaq8D|{e(}q> z`fu|y^pKd}-Dh$4?x53!dParoy{5-PuWp>ekm2t&y2g3-kNqc3oEZPoOE1OI8zLSD z4x3lo=LUfTT40a(j6wg_^Y~evC`le&vR0z~C&nH=e0a+E@#B-B!{o`6joriU;`^}w z$O8007TMd~bNX@j$8uozHr0s$c}!|s+$$?+YQ2cDJ3nHdkTeTn{G*T2H<9~T$*b#!#Jsk_pfPE1Ucr=Nb>fq&)W6W2O$AnVD&77dH2FT~mxFakm`X_Kt1a*s*Qf){dx=_Jtb^Tzq@4xni~)d6|3G>fw~3WP#y0`W`J$JLiwn+7=RtFWlZDc_;IObs zUH2_hgGSe%uV|0^U}POOM_Q-L!?9(55`BUt`g8Cr8lR`-*STWi=&`Z$2_5gp&0xuB zw4MVUD9$Pl!!0u(`kveHzu~CWPLJAx+W{^f1{+luXkYAim#xs-6YZrp*^$C8 z6&4q}hT%T$Y@LGjHDCGM+S+^nQB{0=CP%$&+gX%5R0zOPU9u#PKK=Xx=p`g3I?LED z#yKBPe;#*v-cQ%_{1C>RW!4XVhso+w?_Pl9_V#xC#)by9 zN5Ol)IaAz8+^IW(J0<@HB%4v{JZO!N2jIV&@1(MDXJ8%I9T~91y(|-AQalqslU$Qr z+thecFu^gQI~ccO9WV|>)qYz0YYy@~x6cTs|Mr@eLtMR#0L$yb~Mm|Tj zMmbNgr}c0Q)C|fh3>pCbCh*t=UN{~J6$;bEZ7@A8TPDvXb)&GOuqSlKiFfE+D?FEr zf0au8na5;!{52OnsqB|NAY;T}&}f|<`Xuqf7~Ld%=YCM`HMqdw1Tqd9hWsQ>3!Y3GKE1sf`-A&W?`}gzbs^zX3 zzJ*XNRMySfVq#k=FYZpa;b5rqm8pq})@)0KTxp;mx2cS`EZKKg%5zYbl$?cy>bh#NHGfno`?_Aft)D`NtS~#}e&L^Jl6?z8l&ksj5%iFeBd5)qDkz6Ja3%)Yp45B=n9M zoG{Mnqza(-svc=?+9ZjI_dn<^!f8_Y=%9hke!_%Wyioj%F& z@#(>JXW*`0J=G?jgaP(am8hec5boB*uFtO@<{!PO!48kHBjl6suMmsOB%7ky?yySF zi<1cr(f&bme3j%9OPs!WesKBJ{)AQ06z(l7peA^e!o%WcWF;kRbK59rNliZF_@XB4 zFW{0=JjtBrZudU-LGZm(v_{Lz+i|`e)y*EfBn@ptpFS~Ewjgx28=7cj{!kh4F*s@L zlv^M0%T6`RWA3@z={d8`3R-)8hF{LU6m*7tgj;0!>Zwgb{SlJTz9{oi0xo_&=L+4) z0x#=ah7Q6?7AW7X2vPFaY0Pck#?Y3A`9UZfPX{xBEePlMxk))l%jDDrNtrWt1d4B0 zipa-(IOvMeO*s-`8eT1@^DWXFtE;i@Tiex{J-ega|I{t)wl>E$kJ@#eIuGrp=*H-@ z9DIZhKXyMlUIF(!2kw*CnF6fe50QY63wG>M%i!2i?TZxD1*P17qSDNQ* zCsa2VHy3wko(P_?-gx$=_Nw-E9E;j3xTm&PF}H3vZntjt{AZWvvX2Olv3LB3*?ZYn zfV=5u`Um>wnn$|_3=ek?ch9IUO1ZzU-oaZ9p=Po(S~<-mG@Lxlot|zoZebVnYg-K~ zM>bPb6I@Boyg#esS=wwIoGVJTLHRp{?Y_>+&S6Kf6M%{AT-=k0Ke)Xy-#q)hzzWi! zU}!)OKTjPj9T@c8OzlkUofu3kon4&l8Du0y#N?F4 zwzO=Waa)nUa`Xe7N|Y^+WGF1>*~ck{6L4D)4&x6xUZJ-C{azde1>KA=VtKvxb-VQ< zJ#1UBUoz23Rcc9DjdSqt=ul38M^oTR#>)Nh+;U-Ro}C3_*Kjo&LHsp zQE8588*2D`Ihp$Y`G?*!v%UU2HG5~G`y(2Ie{=KGgP|s6WpC;7&g-_WO?NwLrPY0J z>rz&s!+C4-@7}#ZosxURI_bMpJqSDj;}ctOiw^ z%$sSqD5yc3!el3W{UJu5Ov`xqM1`zsU2`Ft%~uy(@xi8W%iz(f=sLuuAfHZ^L=Doh z){5Z(cC6J*$9{-opy?&=HmiKJ`Yg=2JDN|iioG*v=^Q{f)uXN^NJhIjC^Y7{idFgj zV~)vntOke61!dFGf&%-_CV+OKK$*APfXYGpCK^#+3fk}_HI`8SAEnC68jBi108`(lf z)^SaA{Hpg3+%>e{!gHBIE?$+E?k{ucZmY^3T-!);mIj|`-n5kAw}>iC-`d>-bl(WA zE*1W98%w=NFr^ifU%S0QJR`C9h0SJBzs_SW@?B++M8&R8B(Xswdrt>O)qej24DMB& z0tZDG8WY>PWuQ#dIsHqs76qC1ucd&bpM$0FeK@)N9XqpCZPkP}XsAx`-d+DoPS7xp zLDP7ID6%OFq$6(hH}tM7W^8jZy#ImXnOsdr+BZ18YH$gfe=}S@DJs3FOVCdsVjzb- z6>rsAl@nH3OI=7oi_j1_LSD{+TUd5I(rhf_GwkVj<(8b`F$Jlz`BUl|%*w=>gvPBR zG;??+z68*v<4*|VgHS@Nkctl(K3DCrij4(g(JP1OT zYOlo$sYs(V@`DJ4y1M#XR8cUF)HSqV#bjlK_<`lr)hU-OG>wv#j#2tjeu3fraOF$V zPZ~#?9s|C}qg@`1UlpOM+U3fBDzcmKs7x^VN7OWz@c%-7Lb7kd%n3WrPgZwC%dG$r zZ%kxFiK;G+nJl6fk8w{lt)16GO^Cz@oZs%_{if2sNQJ{fp^={xR zq^W?TYbp|-4Uw7{a(P`5mr@X{dr0uYa1JKAh);JVNJUglsTl#&9)!ENoQxEk!9z_= z#I`ba6YMUa%0HuqvO*oBht9|x5je1J!r`##<)U-wIZC&0niqeKed}bYBtHkW&^Y2T zq_`=!QizS8;7)T18OWcxrdXsiaq2p=8mB<|tKM)%oH$^~2HIO%@#xIQEn`69gBzd6 zY}Z~XXWlz8v z^;1ThxcwXEg=ZM*!YHNzpPOt(Z@KG-EFp&Jj@tZ3@UTpZyc@6bG`4nE(3b}1Nj2&0 zr@+lLcuM(}AarPoaX1<@4EGL_Ze+HA^*_E@SE!9KiD6m>>LK4IOYJ>RN{|ZBkGF5| z0xTYnQBpi8QLZ}S&~y)G=749#P1P$m{N~J(u!XgWU|pf+jzpZNrx}c}Aau>&mRrG@ zd<`pHmTczc)&czWg^JwEJxMd59^hLD+zzh{=&w*i_vRDXlw6p!m?xG7qXMwQha0Q zq!uK4bDRalu9r76fYfQI@H+>RsC;1cIm+HdcFtOvbGf=r6A{q78BfZf8}XuNiW?Ql z)MLY^qu|D58Rs8}sU22=7E^jMj6}M`*Rj1YL+Cfq7b)hhdQiSt(O;=>VQ1VgYkQ83 zxkU^23E{T`z~cA^?pDb}aqHKh{_b-UiwAvkloQKunCTDX3N=u-3fug})6y>PO4VM- zr?`9MGg@h_pVk|b_M1nJZz1=UD;{@fCRp+c%ad`HR{4{sh~! z&MC%FIEq?il+^hxx>1B)=Zmzo*vqQvC_#|sRe<%+!P(l~li}@|S?GZ`&gyoOn;~Ms z<}kmh8#sqe&`0~+EP%;{EcW9 z73P(8kemsQ7VhSTXr03iaqP3tFG~)I8r**ByBsr>)CcS%ftqn<%J5bT&m4IAUd9=z=e(5iEOyIIzA@>j()Ca7iUwl9om^%V}I;L*z<$o7Y5lrR~*>HJLY+ zJFPcu(h}rYicOsANRg#TXk#vPRrQVAE)~I0EXy{Ul+2?^B-YEEsl;*zM2PepnNe(l zz38zu3UXjxd#Nan$|=jQmMt%SH4Nf*;|snKqUHrN-`JVq2Gi8_s& zlMzNIgd8VK4q=lQhy0^c>8_E#+8LQ-;v&inroSvpe(?*JA`O21!)j98$D(SNZ9Y3z z4BH@~K0)BmPnf0``^TZ(kwb24V0sga0|{62TNYB*O8%&kDYIZln2l2zq^tOg7jtFZ z@mw^urP>4W3%V0e358Tu9df77=~$LdEfn~Pn1jI+M$I%VWYb-933fg?6k?Rl>XkKy zfnvJ5s2zjQ&&`zq$d`ICY{0*wCgf4%CnT};7ljSsFPU1wkG9+ue4YghP1=Y|%8e&u!2M2mpk59cu zPmeb3x7YnX;4U9UV0*Ls4OmOhx7VZ5<0V4m_ncEPPY+37PqxVKM!0atsk15~y zaG5pk_cMm$WWctdgAdOiegR%Dxd}*k(}GEE0B%?WP^X&Rp%?dH>C$bo|A&+R233bP zgI#XC0%6M+bpTX!?&*Ap4iXM>hMC=L=E&0WPP#I>d~=3fOdPIm%TXGm*~88WKWAg# zl9Q3c?Htc-89II^3%|k22&?y2a^oN(<%C&lA}blG9Am;>_2QO=FI$2x&r|xQ12XSD zIn)-2!cEH44K7VsUp^;k;2+*_Smt>~UG}&P2FZ<^Hwb1zETW!Gq@j1X7c=@As|sk7 zknpaidsX^HF{Q2@B-h-M^IOw@615w|u+R^1;1+&(Ve;DmX9_X7`Y(G3u#KtmJk&y7us*n zkjBLMX9H;e+GdP>^n{NDvXkrj0PWD$me=HX!^isddc9-B(SE(swf`*z7hDwa@Xhye zjr(J)`gBSU?T47#mIqU-C{qd@uZC+9BZkXAR4$&(^Qu-^;|Kx{GJYlGC)Sz-6VLU2 zxS|R2BgYT6au4qxD#PjMDM-wTin3n#ChBHTIIuwb>Xh!^;%+TRcmRn9ip+h0+7eQ1 ziR#pxKz9eq5h#vQusiDp>4T=dz|&QDEgj5aE#MS5--l2Xk6vokm0@wO#~Q6%`q{6n zx`DS`9GV-zPTKEhGrWnm8h$up>G}}1BEE6yh(k6+LtH$;dOdhH9-Kp~5>(-%}ikfD-k z!)G}a43n9M#x58WXWvQ7SlpJ%yd!U(r~hQ~AbOQnH*G;&(#RgWsbccl{V;kQR^#h! zm1h~YVvK03d@RYqo8llKx(?0u&2H_-G%aUw$kd0(;YJ0_i)BuPUFM0?etV$IQgbro zdl&~5DlJC`d6q>5A)MWW2-e9@62F%jw&X-@&}l5mgCTB^(INXFo#_xmgF-EF3h`qC zL6XKjb1rR>SgYKFjnuQBj$?j))=~jfmIQQ=)1~i*Cq<3;NPo`^+b?Fm%ac#k2LTF; zAfj9MBHy&lE*dzDUQh{Wn)V$bWzpJeJ0GzMUbXgr(M#U|8DUA-q3ic9XYgDXZYm{r{HN*3i=KKjoFCnV36GzCS;Vu<7T9%WMksg>zY*+BI6(Kfb;ZHNR3VFPZHe8e?50{}dA2E!?J+radIDi4 zo7mZ36};xs@6QWJAP_>zanB~_X>P5`7)cP^pX(jmV1HZxs| z(@8;qIq90Nr@OK@7Zm2l2(mf(kS042FANHHp9Z*Xb5t{f>Fk&o`m;qVbLPgj9` z;ib>g!qHKR<55U|T6Di0^M(phs&C`ulv%*I7O8ZfX@(5YAZho+UiOEwj{vtPGZM-e7+{QJ66F?>RGBnC zi>Q0L*aayKGg_fJX~88&E?@t3iMl;uufl_F60d_Kr9r0%9l-?r1OOzJLO;)4ekxn3 ze7miOCgzQKb99&BrLLm~L-+z8c&T|^fzziNJh;HB-;FHKN(bbmPdmBi%AL5Rmmv}l z-b|4oSzn>*tYK=Vifl1xIv5G}_~!)&zlZoH9!nlr)ZK?Q>)h45lm&w3JXv0wz+7IOf*dp zl}i>w>A(r5FgMBCE1)q-ar2$@D>F@UH^wrMcGP*A5E!%oCQ^QHCO;F_AP9R8Toywe zMUw`juwxw*ip2`ltM)ufu(ZB2bq_;=SY)8~a=8+X{3*xkM)8BH*&YW#r()!&SE|Y0 z7f)#@HRu;bsvl(u;+#sp07|Sa@^~39 zl- z(*ds3IUOyS_e(DEaLpd)I5K1dKI;2Q=diw~2*=H;TH5ZS#VF8Ya6GE8@8$#UE%f2b z6Cj|_4853>W?kSfjJ-c2~Qg7E__*eV2t*2WP z_CW3rhmm1e=q)uCck=0|i9x2`u>$vQ4nePq9L89p;B3#UmgveG>OMF4@;!{`f8xDB z8!)GC1!?^tv&9dpPueTUL+B;-N5=Wxu|cYFjZ>eFT&a7BQG#(m$p5seyymY}Hx?-3 z;?k^mG{5<2j17!@RQi+9OW+{)I{lzT<^n}9Th#_NNRkK4z?%gKia-1_m$!AY2Lk-cKT)D)=<8{u7d zej8*C9jzhGV#2wzll zGM*taercn0JOjuqu`wYStLJqX)s_Mo)j3x}2IA9P| z8yy+J_bnAYMJ0zNv=YyyCRqT&aKssNl245NUU%X`x@r-dMEv{KVg4u_0yPkQ#&^VA`zraSBz^UVxg0SU%3;AR;FLEgOH3H{~mlL62Cir zU71!0Y)C$AkfB-oNLIlg^tOqlOgyaJ5~S7~II-J9z2&HZUw_7VGqu{rIFubG2U26G zH62Nw>EZc9&5s{GGbAq?&lp|usPO3ghEo%v#$6|gfI_Q+-v#mZ2W01ZD1JmR=v24F z0jG`UO7P z>?3qUh&PA|A%%3#QtN=T2!9BzTdCk6o@ExbLa3TX5MCEASEuhjZq)qPf3~qODr&zG zRj@RPi5U{efTk$gOCMhUM;m4JZQ6@@{jC4=rXS(!;r{1V<)Qbi+k-1g;E(5Dybl;M zGv7DTN-!jO9-M)vz%h69v$bEG_@FRiblgsbi zaD|t3%ao~UXsGIfHX(a^$+BYSf0Ry5e6UTotB?^q_1usydN&3I!5lbgw$)GydA~MjXtiJLF?VN*s~ac_Cl5-N2)gC9UXKm%v52nQSj zLRl#pNzaKUk4Zb)ytC8P8?}M>duR{)9@45bMGME}L1OML;ltz^bsn`NWl)eJZw9Il zJ6)L=PawT!0%f@Sno`-%8V@qi(Q{4OoK*|d))OJRa=y3AguAFu4_z%A6PvQrY7FW^ z#8vhE4rOuAg8pf+sxGdOS)O_EFP=@g8unR1Hxj7_=}EB zS?Q#vs%xvP?oH5SFgJr&r4@MWBMv^2!?S9c)~2Y@#L*v8ud&oQhqx<=-WyiiU#pl?$dNZ-q>fYsnmjoqDKw zQvErDgqRR_7v$7PMvnT(Cr~(p9&}h>s_``N18pcCv3vtiE1Ttc*pu~e%%(B$bTl); z;$X8i^i^qP7Q>?B9S6JcBdzH6#O`!aht$$ixdx2$Ek4TuWmw-Q*jyO4f5)`J8_2>7 zA@^k`sImmpjXQvHI}0J&`*c1&q)TCMN8P+~-c!4 zJ)W6~Q*{`$8b;tqqr_70lc*}f%Nee12fwt4|A28?6h?`0?gZjp&!sxj#t;LT_AJL$ zglX1i%-Iyp#NEa_F5xHJ3;M{zYz;68tkc!Kn<%`f9btwj6K2znNW&p-cIgS$&#efA zo4>q##tAq8dmx&^fqBT!W5a$?Pmj0NCYAdCIEDap(iA^|b8K?~KyLvAx)QYWxi51g zsLkFf<1#VZET3gPCDY*o(wWE%iB^_Oo9SLn-CW8u5pItT1MXn+Z;_cLRI`|v4A4XE zo=r>~SNI&xHNRfZag#XF-V164K)pRTIm*p&gy7o$_fV&G}H2Hvd~=@o~}M_BD2F;>7u^;

VdBGq+_ihscRXsX64FP|= zEQV+J1+WzQ=JuphWGFMer72&O?uYFbFNn?Y&qxPQ8X+EzxqurdxDt=bB5m?6p$Oph zvMkrI(VYq}1GBwC?j@Lj0fK=_7(S~Ri?U@oUVJ@>VrO{1c4 zlC$nMNo?Z_z_jtjEpRHo5~EO+84mDn@~W=ZYqDIW5SAd;-yuKe=R(W=X9UW?bR^LE z9?3gpD1C$WuQCgs(jbyZ%G3hLzVnfiR3F$L^)sc?NmC^z>NG``iZT?ZW3kYJoR&j| zhR14qa0jSTIM;=+4`I3)kaCpLIzgU|P)S*1&qc5o{t{x=dz<5M)FNc*o#@Mt#9Lk> zpU{d4n@nPdxiM99;fZzs7rHMn{P>=(r%xAY7pF@uN;SEfE=Of{Y6@|9Cw@y;eexcA z7F=N)=#_j{Nw-!u`Vtqe#^w?ELUIY2$OutLr#A0+gu~!^^9hl0d64p@9^Yy(N8~pz zob;&&6rH$3Rgm{);;kwzaSMZ{sUaButc-4r3Jnfcq#%5ZnPP*^Jb8}X>|W!G;m3_V zB0qBXC}ZbaM|n#y$Na~@*|IjY6WI`aT`TedQ6!?P#RDN>8Iy2VV-aGI2d3t=^t%JB zKA~=JG!S|Oa)6xYFZaK|Tt+15IobI7Iv>s-{NY5Emg(~&=>mx;po4o5T@hbgNa<2$ zB@YD*5248}5SN5AV)`fT_ok?%L|_$P;%I$;ST;KqZ8RICq8RY)p(Pokk<=dXi!+dE zf2q}_;|Bw;nTaAnz! z(7u%%-Ww5hzZ6B9c>$kAu9ZO-8>P`4c2io~fm8t8@ky4>>jQrF>NuyMPx{P;ci6XO z|Dv}(O)qc=$~yo>p@9A&Wy~a0NC-$*iC_c32RBht#}J{8)N#dw$butyhtKRw6x}5w z0G(d{4c%{~4{(9fMva^*zESd6LDEM0WPDBJR(W zQp6>1t4C#pZ7=7owxpGsrKMIF24=vNy|O~RJ<(Qt_05uammSjM5Uy8aJaOOw@;4W; zfX0^vn%JaOWGrAe41*_Ov2b^)6K`}$8`K`!x|+q1jn+enGoaOF5oH7STdjxg__kul?erwcX1!toOXG4h0APupHcDtqBExE<9@dCfJ`Z z=pn%LX72^mDfn9dD0uPEOKsUG4SJGTaN_v14Zm??C8O>DJuSHHp2_&(Z89bEXDBty z8t;mZOM~~JDs>7B;}VGl3(L z*XT;Pg>xsmWnOT`NJKRK;eZ0N_d}WL2y)OiS#k$7>ZPltn zzf9n3mMVY~GL0CA4_g4=_j=X-2_+UBFPelfZJqNb#FZOO{R-$oR+sj4DwTiQGq+W7 z`bq@w4xjhZp=YAM$2|*CVzjLoU8MVPsm&hEvcstt{gHwV*x#8t8=<7AF z8)v7@+c-?wy6t>yBC!svV{6IN{hutkKN>1Bd@YJ-R939CEUP%}l51P#feWFc-V(j8K0ZL&iD+MsZt~GZPFZcId)O6R6Cgl}&o&oy4vkyyZE*d8! zrDN9w%#{6gX!aMkic7|EWRyLtK<``Y&{h^PsP=3jhKI#5xX^b280H!(vx}reL+dfI zd!X8PRQh0;Sk6^;7&41c^Td`dBScNDwhh?>QLbQelPfEd5tYsu!vFXH+TBc>1s{6s z_&hTH&IkCq^Xy&j_lnv-KCab~bS<4VP`I9UG-fIm3-p(|&&uxF8QhFc@NokHWB^9lbxN^58LjuWO0b`rmN{nF8Wi2{O zoydv9$7+Es(4~|UJKuESIO`O*ZldslUiMYkq-n%QFyOO();M-2ZCmXvv?4Su<}#WS zUUh)>P`iq3#>N(b_NcrDW5mq%z4Z9&lx>bxJ-tYRPJ~aQ9PDLA-=eG_4fvvxtGE`b ztCi*Rj!l7Ah&q+5lGtCG+v(cN9ug|2h$+2SeW75tkhpJlYh%mbx~7BQD)cX?F2B=g zc-LO~u}EB~pZ&P@W)%Gm{>F@^w$1tU?Bzl9rvUnIHdrTB zj>14~WG^=jSdBX=WU-)2hp{e7(fpsO(*cl1{H(8?dR?3oE42`5tLNx|_(bAVkucag zIo=%Q;5&uBTo*G3UIg?3kUtCR4VLX`AIwFhMg?sECO!SFw%elo-i z>yW0oP0qs;EWWX=z83taNKn&~!uY7ZF%nM?TsX6rnH@7(j z-hurvKbUOII5$b%1uUTjgRFV`t#Y78-%hS!rCF>`wSF z4YyZM1Qm^A1HRZnfX-2=zG^EcATM=)y7RML25fk)m}1Pcmh zcaMY!`-zp-b+56G=RPGJrIXn-x!2`&Q*l|ctXnrYI8 zVqM-j==s7Xn1Y}!>e74+bo}{kC=NoGW-P;Y!cVTk*ptrvKgql69W;(jYexQT0k)al zoNGd=``CnJSWYA!(Pd2B8x6?QOs=3uE>&WQEG$@byR2|FPp^5n4>G7}pDmgwE=pv( zXnkzBdQWtDe>N$zQZz#ZBAYojLq^aMK+`1RJTc~rMDMtUP_*&zv|`B1s4M+LN@rl6GHohDDJ4x-wbhi!hq-sHP*s^oCvK2O2qJ-m4kDIiuwA zJTQ4nFvlELDD*DzM`PM}SGR$@<&pgRfC%2IXACJ2v!CZq}ddr&1FuW`VF=;b345e8K{+plRk}P)ovVFm`g3g8YL7dQc=Md#pIw z@G9HyL?F{26%Ve2#O|& z5SacAAY(bH&hA?VZ?BkeOp!xd&Edn#j!E;m$A?e9c!1FA&3ECp4?$Y*m#GDFUG+4s z_{~jh52_%F6K0_CSr5$(Rifug5}%=<-PdCD!k;{7%eD08J-yH8=;Y-%bw`vvF8XtH zQ~zyVj2QUzt>b%o_C$1uC^(S{kl~Y2CRE%dZz2a(=cvY(e z0}e6}_nQ?xyW_qX8W>A}Y$t_aF4(ilgytfI3?vbwCf7C~h$qUn8O>997#ps0riZn$ zmuTx^G_;9!5-;M$J|cS z&6=j@QnKQZQp{f+vu{}`&^)zIOwg?6<#n|yu|386LC2c-t@Oo@q&M96ppp!#FAPL` zrHEe5kx4z9=B;|NRU&1T)n#>NTUJ28sVX868X4Q|n_3b1&8@MtV_0_nb{&)qntA5( z*;h&!Zswg)v(|NbLK8oAZgG!5{aBc03eWUFVY0;RM`Oj+KuOuTYmsGr#ymxaW& zxyyi@;4NvCe_o_jc{YaUEZ&^m*j>K@1)f*MRi?}yPU5d!iCfz8?*6^|sJc(tb|7Dk zoDc6W1Uktaf7#;mD$k==;9|xWKb?s)s4xf&0vGH@vsm(^?R`YdVj;%$r+4gTSUj^1 z+IGup292q8#b#h|J@5gNwYFkCYM1qwCbPYKRcUGHS0_pT_Ivu@Gbrh@tvn&@BPR@@ z8c_Z1bdpOeq2;yNXucsmCi6D*SA49B!hbc6A@vj{+TB*(D9eg@^u0p=M0w;C_*(r} z(`@s`=v8I~y5}xuRrxjnA|2AjsubBAmKh)R7#a5`9NT{%GpRqlrG2d+XLImyLatux z`D}3&d3nvd4p6Sm*I6ajgsU^9pB~6$-Z0JT$yF868i3YWe)EA#L#~-f!x~TE9%S~M zN!4y6+!x4CH1I)Ixj_=&mGoyLLqp1gfQ)2#(zCGS@M{stT%@BBKGSHIfVs-(EP0e5 z(`^wHZ$1U$Jv*SD&YhS$&xwk4#c}C>s`BX}yO0=V4EK=?W+!w*f&z46B<9XJx>M7| zljyxUd2Qxj_FWeJ_H)>XsZH_1D@{|DyOEBvKCgf#;T^2A9IkVeD$mc9I5$Nh@$FqB(*V$B90_9y72{YN(*zPVldejhvvuSx z^9S^-H1%c^`}|}uhPxn6{4+P9I)TUi%($2sF6di3T*`zLlK-j`A>`p=$})x5DlKb zpjDf!SZQfND_j*^HMtY4$39$&{9Oo-2RaGZX^tOsV=CLUG5bfV7?6F%a}%5EMi?A^ zRtjKs>uJM8)YHUwM=|O49?kYKyl&pt`xD%H`XW-fFNaa#e)U{pV_?6c&tN*Z;qp93 z!$aUj(pjjLPj4$zEOsM2a7S-AoJrrhex*UE!#Yw?rFzL_<1&%mVaW^^67qfZS>K== zoWW||{&1c163arv#Tx^5kDhn2>uo8f7vVIrKA-4LSy_>$AbwBXH ziZ%p2qNp!Q?zWC~fA)9n*~vDW@jmbJB9yg$O)VxyF&6OX!!QwfQ850EA=i}2KK^UH zvq-*S1!U7=GaDPB-!4ZG$JTz>(QOskQeF6f5$Q<*TRHGh^91i}O#Tw$R>CU^7}CkK zC6OY&P5p3#3vc7l)^U7k-4bF;Ynx;uNo2C#xz{R`XVdhvPd?e`K#}q_Sit2vC%B*< z=G0?c_wFZN`{ur*D@f-#B&N9HV~Fyb{9%J>aEfQfy7#*iX`yyOfh7s=a3?sA$4uPQ zJP_h{9jq+q5>A6wx%!uE*=Y`+M{Z*0={dcLwbTa698CMAO%8s{pDzpRBKsg8%XPR3 zGiI_?tkoo>d}pv7BJEh|iKw?n!i1~FfFY{~=NlrcY~C6IyTKBZBCZHlOOJ|Eol z&iG&=mZw4GdKxN7!$*Q~%#$r`snrvkvL<(8@FN1_NA1Zl>= zVRIEZzkCQDmvp1>JNLBt~1G{_)_p=8~$%#O;FqxZ%5MR@Kzd^_}_XGJdz+^NdvftwYG=$=bDC zN6&qqb%d9ixcS)244Uzbrc{@p+o;o;T>cgL?a*Qvjt3#%J8^&;X|BFyK#Wfhg~Nb;n1K>;MBgjf4e zLPO4oZ!)EjmDg>>e)V6f8saz6wbH4fGl(VX?ul}15g+g0Wla+_0EO~NnT3Y&RbsEK zI)}Bsu(nF$1qp zn(eTSEV$aKr4X^h;9Ne7#)9^L{za@tio-5IPSv%#IeAcJ*1q22${P~jv#`5%c`i{l zYI!)V&Z7Sr9P#{p#5+woDIl$L6IAfGJl6HyEcN}t%V^@Ud@g(6Rm5ndTDSliKv2^Nbzzf= z$Pu{spSqsLX}NO~C@#8;B!&6RO9cP>alcm4EN+y`Q%gr5_#1({imf&=-MV#pZp*1v zV>&y_Qtu~z^rC|6jDnBhQ~3@+Lp4X^{p^N(VYxH23iu?y+U(&y*QmJwT5=0WaU9JF zr`uDu#2jG)8@@*GfjRDhz0G2^h1P)Dd{=*~>uNuxNW#|CCYq4k(>dS1WI=yJ;KD4! z`zejt$!_yfX0bIb&iUz2r{yo3*%X8{&kB~$9qmR#3QM0<2Z!G+)$5s=*MwVT?BmT1 zZwi635fo(EUxcTFCYOJCa0~FX3jz5|vs9XI|3!X7#U~m z3rjmEn}Q1H8d&p_m+`h8<^`N^qu$)$$jeJC&*-iez?mnf8K-=(_qloRa0qPY`JTc* zWiuq}yn2OPw*Wg{jpO1m#|>5UjK>p?TQ%os#t;W~-U;9)?qjZR>es`)dTO|WyIh;@(K-DERRa~{J!$35xE4BPA!Kb1!cL=~QqliC?hv%P%%6E_K zQJKsQs9LYS9+oRr0cph?m`E<{@h?bGEc+i57nAW>jDMbnr&vU0@tvV>$`EbwuBQC# z5v`iNm;NrCRN9RNsXj4$Ug%5f=EAr_1?vBC&V>j=>S*ejG;KSYZ z^_#=@)<32ltAUj_G)Nls^W>QzNru+9m zDUJsU%39oR9TV%|r3o#IijrqZ5bfR@dVHY%dP)jrr+I?3{n;MjNmRBH9c>U?8-s!q zauX_Fu84nJ-tz;4eA3yf&a885(|$DXZ`zlWGt?oe3p8Y{64THrKWbDXN%umg$>p7g zKAm>Ns1-m9uE#_~6$M2=+IL+jvOfkved1C0?c3>qww|!^bCG0C6d0zZv zkJTc3^p?Sr-yK#DH>3UdlrfL31(>GE1Y+iT=GI~5d^?}2jQDPsw2LS!nww4 z%op;c+4dcgyBzW{=l0pY4a8<&ymmUE14YF2SfN(i4^|^xQF-Q*8C3=_;j>x0YErBe zzOzf#K)@^I1{~`E`!L-#pi#YmP8=Rfsp%ftj^cac%oj%|(>q8DWarZ{DilMm2Z!(0 z7_h2vwB{O)=_TQhQe3~|6%uJ)>wX;xaJ^^S*^PD!Qu{pG8!6X|_%eR4JXD%p6eim8 z)w#qljiS@H4wMBe(HX>fluAv!B2URA>l9z2YLlM6WBmc65c_$o9IHgn?QH3XsBcT? zEiK*Eh6nF^m3lfVTxIHm4$nWzpu8DhCQ24^@sT$%LffajVS= zG{%N-AAf(rOIq&y5~Z=LNBVOV2Zln@`p}b|1KX0gvDOehj$m3dFYnFfVO5PKum9k=)O zo>1*LPSt{Il@bYNZS@+%@|{yNzFB#~tSwUTtVpE--BCUrqSJgI=(5=cRj(k$MMX+g zOM7gX5)4m-$G)rNJ~N@Fd{yjc|0MOzyQPV(R8qhLSTk3GHR;T)dK{OhRM?&IQu7;C zep>}AnuOGId`UM^K##aZAezigg{g5m_qR((pP$T=rakFmV;0g*y`tJ#_BUI*tE+JZ zz2;XN1UHY>gRwBu#$UN|%ZYVA=aNNB=Pa^lpRkq;#552Lw6`>>49+95R#%k_24Ni1 zG)W#kqtazNIo+)3gP7tOXQkdEXC&2qk9pmYTVkCyy8qDPml2LAt)NP~_)&U;mn^kQ zoBPyE5d(uP;n^me3;xF-yxU%_Q?^`%MR}oIX*Aq7eOP4gkNj2n)(&?A-s#8?)E4%V z$w+n$;re$npIKF_t422j>w?bU=)OItfH(<-Jrb4{>?FIV=UDrUAsasfx2km3k8+kg#FAMK54;QB4vU48t!@mYX#Cl*PC>YIwyz8Cep7P1hBj$)HbL zCP1F)Neoo6O8zpn4EW3RcIc>+73G|M3xdN(G(OOlrCz6-`Ry|xSX#z5^3gdJD*nM33iT<~s>uV_ZyVcN-M7t^xw zTb27{IuVD&RekZA^not`O-IWUK`{3bf;+eC;o_+M0fwlm@(T?wkV$NzW8yGX8wk9a z6$2Y$84-d*lDs3DmdE7NUU1Ie&={@|oHk~`KyGrfFPguc;lAYg%4qSb4b(2Ev=@mC z@6#tfNZ(O`%JQ60Uu#0<0Z{eakgLk3ip|8~UIE@g`^#w#?9vs@wgJKfWp9f|=f);qH`Qp{x%10FsuZUbLC#pmr58>rd?TVc=n z=E5+LcSw_Gq-ofbfpniMQ7a>e9h+G_N)T2(a`!zxeuaxgVj+QbYv!e`UnZQLG=33{ zsDpP?%__x2qV#%5z&6xI5lo@(8T>VlEcKb8!vwn$mwr~|4&M!sNM9*QA ztM#)NrTndPhOzg0-sGv3;nA?Sq^VSo^u7Fh*q4!$6<)sL6Bo&z(xM;AR3tJuhy5_U9hnVqrhh8PVWEhuFS5sD5P zB!n%~kBylwb>*jdvZu@Ar%-^A2Ndui4Cnh@1ulUpOp z@qqqg*JleSA$c*PtW&mGTLf=4Tr;U)B?Mxe0d%eE7ZiwQC43c9MIY+%RhaTLaQbyD z?EM=f^Q>gT-#6~`&b=C_qEvSBmKs`S;{1?=P!FfG_#x8EynD>v(9(V@rK!v)h!bT6bhS z$K=qsdSqnnQMqI*fgkb>Zx0xN>pJD4={-TkI9xHOEB6OI7a=xRN!3;-oY8TPkz%z- zHueTGHmT(Cq>!R?_6lK~5ep%w&)tF%GaV=F&tWM(6j zzUQM%9{B(oSlC@ly>3q$VGl%m>;a8UL}2M9jc|VQu$yk@!|umV<$MtFHg}y zbWmof6AyWk(mpBzvszzKJ|$vAX6VJapW6$(qAgkANSJJNBt2#H#FI1zVsRuQ*tOKq zO!2WMtU<-?YYQDY&|-`37eS^3Lq_MMOo;?Hb!G(?a3IL}DywWJEj{;CVpDZG zjezfBb5Eh-S{T0aVvyDr&-NTN&5Mb$l78(X{=DP7c^W@H_yM7_$}_0QImEg%e&kR z`7$_tT0#3Mr2{v2{|!Wxe(Rv&@F4jB-{nNqu#_sa`^h$ ziX5Wk&{D!vq8(iY?z3;vhgZSaq4ftSSt5M9JiXuN32{j~wB?_@5=+xVFkD*M;ZIxb zGqhUw(bM!br>;uRIF(46do|JW!`OUkdE$^_rK_Tbz54b%D`Vd#NjbVIuB(RL*r zcju#d5mnp#W>u)2G?_jnEwm=jm=`e;zr^sIRQxc{Q!q}u!!o-iQ5o4U)W{nXQYrtg z7D{_4mGZO!4v7Kd!?ed;Q6ph$uvCC=tw=BmhP*o6?nU3G3Xe~Lg zsLsEv&)QDk5o&%aK>m;ps8fT^?HZ%=)uKxdLql4dfAJv}l(T`zrHbLtNc55H{3HqJ zEzjH?nX(guwDy#TTJCYx&_Kb=tY|fmFX~Ol;xdTgW|!x1PXCF-h4nXk?zV)a36}-@ zb{&?h{a1+(jcrrwWiOqvOs`1Z zAm_ZCxiG~qG5o=6=GDDdY%L8-8JWQwT!xzj8s#WkITC1pWAa?Jt^o4_+<`2qUcXaD zH-!G*C$~|9ci?VNVPIO=U|apDUQSV!98Nu zWYl!0gCXtzYS{cKOwP5w*bFY>bR`R-^2GCu?@?^$O>Eg%$>nB=CRSJiKSl>VzTJD3 zvZ)x!?nn;j68Xy!k-&Uq|E4}e0-z7*5CP?L`=!ct8N4yNdEC`ozfG1Ef9dLFe{s$_ z5Lt9D42Q!EF%N9pa9e)ePoxio#bJmNjl?1rHTam?RR+@)S^jm~N_LzfLDXtUUt1hT z0``mVz6v)cRRfBB=t0H1i!y^Zw5H@HY2+^~+RjShbY>Wa-=?=&ec${%!M7O_KBURg zea()tv(u)U=rideB-O{a*`|LE1BR&-{l@I8$4t8x9vr*Op*vM5~tn zB1>AAbb_OBdW!9=kJgpwRwDBqvD(c2vz4ws5otfXA+zvGw7H2iH|$T{=PyJ0y!upn zbNPCIuoHk!`3|sdnRF1K8-WGMUUi}C9#GGb1|6!{@PrH9s6%AI*t!~>auSMhmQPb0 zy3x@*pMzmYOTM3|JVSYgQ^I77DgUi{InY#BHn6AlaSgq#avGO9&hpEA?)U{IKJ$f& zTGRLbcsBgcm(SKa*Ga43Q8%qp!O~*l)dIN7uZit*a2%5G28Gb<#yo5Ej) z3g`NLWt?=xlnb+$*Oed)7r~GV12@y6t1{Fj8N|~f<8rO($*C1E{p{YSrNA!9z#*R|*vR!^jREi~hCsp$$U zZ+MbCL%BR)dG;8}_2whnCgY%Rh~&ID@kp1vHD-;yq-I5tFR7!mT2LE1xom;_+>fu_ z?_xcSEDxuPsxfAri=&MkgjG( z-*-5ETdoshUdlYt&fFOu8_=BD)udTe8y-u#wk^^h$UL=AjHEYaS4hXUoM81LGnSCV zXHs($l)J;y+#Elr&t!cdr_dG=KO(NkgbSX+BRMS}tU9kcFXuZBWTQ(j_ObAA!2&dW zxryTnwn6Hmciyv^jQ0m}!tUljW8Y2`{?VNUdn@d}uHyroU?0xEOya0|H6BHI7+E%8 zUg@WCAp_^6kYaVMELREVNWI55{xR#5glTxeL&|m-_(iJUTJxY+RhL1@0{ZrSVqJ>d z6|&~}aJ2+0OH5QCi*5u<@GN#wMr>+=6CYmF0t)Z0=y|wUL4tmQ>L!P!bY_HaR)us$ zE)Q>qV8ll!tVuq?%aK{^1HN|Hc-NuN7GeAQBZrE_o24m=yL&l(OJWUFL4mnFkwRt% zwTg8aTDFQ*@h4mIk7=X}!J3np85hImv6N3oYq4W9 zj6&4cMfFe-UL)kbG<3|Q1#?}ha;fdCVibhHc*H(;eo4?z7Csc}C;CNPtDWTS^`OZI zj+xX@8@NsNYuoC5KSy^U86!73XS8BCi_5y&v67tc_U)M+Hy;;|Sv=a&=;>q_T4Utb;=fg4E5Di1GKn0TtL}pVagZB3f=tovu=Gf|RH-3lgS#ZuR;c zLLqhrUqtj~K2v7zExCI~p)1P~Hoi=Tg*VKFaX1preF14W^%Q@Ghi&#**3*P2(*>Vc zO)Tc(&^lssc>ZyecaDGS5p7HNdgRfC$Mu?KuPxHaVdnS?0RWb{s+)bH?2dQCgH4%g zSbnOI%Zkg!_mHe3phHcNXq+UH;GG}yB|mw%jL3J4y_o0XJ1 z$!>Mv7#f8*W!Z711}^h(=jz2073@SQ0$TMJgD{%7+K8qk8_qjQ`?xIadWpt)U{yp& z)tFk;_EQy$4RmA{mvGT4#f9D*k;-oZGKtlCz3I3k=A_CV@3lQ*Qm_a3h0l27+3H{G zZiYZss_5%L78mlF3h#7ElopAViVMHRn;;)p`m5HL0vxzlQC?Y~@KqVBNpB1XPfwfJ zU3|~{UP|VuoE$%>@D13!BGA(0?X@PuU~A5uU)EGA>Hq<4gU+uPbVsuGA(J-#UY2_`m4D&>da$jJfi@SQ2RJ`+=p{FqC zfheHTd}C0?Gs+^$Af(?&zx-@P-m0_z&avdMIzQqW=}v)|d^l3tx+UJ+z=dkRKg(or z!aIM4IKmedoFUu!1&PPF#m)KQG{`}bu5%2T?DDMIAFi2fRXe91f{B5A)umh6<X%O-(C2kfP+KKL@xV1!ZfZjxsIaUahFn!^@+>R@+>61cy=At*6i~OxR=WV zEs7f7!&jm?4D56RDkYZGebXu>f?bb^F!I^dR4t{nhxsLG$WT0*+2(3qm|Ntf>+h%-PS|azQubtLrLwlG+`K(*N`Vyy@3nY zJ(Nw1_$(MDt)#0|)CknfgUAMN&f*BR3t;KavwA09(zx!mm!!ise-!;-a>Yu_JlMyV zhhnb2QQL#>%lm=+^m)T8!y?%Buv%{qVGKF3bDoeUP3~|(B|hqXRhZ{(Qz2=(54k%b zUV%Zr#H0euu0e!mgqk?dpNPwEt|ix@?;JPu2tT9s4T9|SP93WVIZX!Qkf>L7(;_1d zd0r-ZcoFScurW352L#wy4(<17xG0wvhN_|MMF(m6daCCO4ime>HTsP@5-wU7Ywj z&|Epazc1N14<&#E7?TC=hf`6(FyL6x8tT==BV6}eM2kERIVGP#5}%!Fsp(nP=_!d# zqKa-xs?FE=5f7(iw;g-8>sLJ~9*UM-GOEvynxGcc_zm*x;tc^qusXSfh?$PCNMb21 zc{(MR#dg|qUPQ&gF8jg9ZwK{-JEsI2erpN#5#a<_7@;&&OxeP0KvX((SK=>jGbG%F zUoBF+@H81WT1qH68u?uCAOfIojrzy@wB{?*l1!x*uZH4w_#IZ#=Q6s&!iq%;bW z-`Plg=L`-}GypBL^*ahp;P#g?t)%N$yG{Sw}~bQ5z8P??o?T7IOpiWf~-JL7%-Rq<;{TA7HD8ME3-YO8l>jq!A` zhevG@@3pgKf`z7*N991xjTS`p_o^r)14is<#fwD?4iJ^USQz2a;SAeaKy}@M0+tI&A%?^B8M6 zQm{4`+=Y;5F#m z`1{A(juF9!?Z6cXh@$0wfdX*7LE(LK+tYe`T>7}ymXYk0kvE8@jY-a!+It)xI>gYpz|iT~XPEBGP=RY!_X#IF)xL zZo*y0Tx@RR=Q~xsDL-*Kx+QiV0K_{0Mb4_o`8>KRwNvdMxG@E;ARu)YE!9Ppj@tF* z5@4Oc{1w&=O{0Ly>d+~MC!v5ZbBEhw;0#?`A-~J3uAa=1gtpwZ*Yqs{_Oq3PDe(Lh zzQWyJ%CrM?`v_E+WmF5g;P~P%&8sMkD$Pn zHSLT0h@lheDTjfLc3|(ukQX>cvg!8fj^&X&h@j)DxEYSG?j$(yZdG^_b8H#E?vtlZ z{fuUC>DdH1_>#fK!TpVAKFN0FN<}jei-sJ~DDHMf9#M*YjeKrq3p~w4m~xE1`JQ(d zroFmh<85Qj!=zWuQZupdwrtZ{+d{sq0}p5rpp36?|B@G)fGRh1%c5f!NAY-vDF~r( zmA0V3yOvU-zjV`NZrVCF7sQCVJmT)~(gKLl1`AFBfT%Z|U|Psc7r*;zyB#0bHj>=t z-2_zb3l!eh@b?*N?1I+wY)$j-rzJz}uB{Q*k9OoVTBjpH&+OJk9;z(tZt-Ua{B^H`va@iLW!O%u3ybjZN7&xzo_mHrA2=(>%zun zrE5aBmvcdVI0Lez`ww~7?r(edWmF$Sm-{YjZBDWY@ywQILsJLUsl*N?jq_bJN zwu=GjAF)4L3R)f!sAT5V5?p~YY+c4?>Wvup540wmLsVVH_L=sVMVA`$JP4@NqxGgh z1qB{zPA3J&+EdMi4K6CzCHu=NON|y6DvkJo___FT__g@ew-)oB9L1wKc=J{7k~n8% z4rv32Mw!FdhM8LE<0oGqWGY#>q`BQ!AH;i~BTN@;{%my8(~nv(Y!c&0u&7F6yk zn?h^OP)Zif!vDW0cyI3TVUqaUez_z+XMPX$)od1d(xhROyOknPX1_e&LSbbT z$_c=~LWgF58R~yB!f7sc%aG_8Tj=q%F4+by*+z7Rr_(p3;Pa_BvUCbiW20Tk@C>Pu z5Is-}gi5LJxB%W~Yz`7E!V)Tw`GDk6wrH0dV)qaurRM&bzWzN)^ux7}+ zvV8;lpZSn36@rk$5)3tMvXTZKEvL72`wn(fTdM^F?J9BpmeI7e`wRwCA3F;wzp9vG z6%N0gj=vg)%AMKfPxdbAwpY-NreYXS@J3`RKAn0`37X}gTgmcNn#!0?8-A&pELt>w zqIR@f=zOWddsjf_HDnP3I^?iqGzv1ZP*58?uG^0`oI0+vaM5x?tk_30nj-2gSh9z5 z@Co1krd`#v@SineY*kuRZoLPEVs(RmMuu^Lnfa=`Vcn_QLLPw1&dl5H0?T}r8O6eq zY*pEo z+LcVtKLOEEkLVMu78x9+Bty-CN|{5@%fiG++CHc=VV;KX5Ej$}Fu9;Hdg zoV>k#yNM?&IjAi%1fEGuH=Nq1)(xu*j_tMPs_GL(WvWwXGQ#GGM&s;#Su)Kr+uzx( z(-MbkxxA2)roDf2c(1E0zc?3g9gUVr69{ZgVb?KIRt@I8iSzu;4;MOOc^ z3aF&QC8oLXP+Q5XA?NNg|FSx)VOn8^XaCOG#jCNgWl4MGIP7k!*2ByRvv?&Pr&Xlz zC-edYwzP`8cHD*T|HMyxw~ppzA27Wd&&=5GpTnuEq_hR~hCCDL*4wb@u4H+j${;~i^xwUL_WdJ|Uk6*&du3&bm%nrf&V5y&< z#0Z5pHIqZJQnkw8v)38$OwFIwv2$t?CozT&#UdJN&iK@noLgyc&A|dRtJJG!t7tiG zoqiO{);V<R}! znqyS2r{e)~i&A@*g8)Z^)7{S1v3&uJR`J)DX1dP7GX~JnL54scG< ztfZ@<>^C1zA;T+}=|oTF-ve>cW(nfY;7ymAz1l1?%7PLSu5 zgJZ$wu5#a4eq^Q+m3XdHm~0GbGX2}1mmh)6=5NQUE;7w`#3zPa9c{o)y^UUjzS(k>@sEIEWW*$wAf%eUy>_;c&Wc}8y z(DShh>X(ZZ;&0PP6=Z2U$gS&b>eCk$0v=#NmhTQ3H@t&p{B03+t$A&Uz^FF_r=@i* z?|>-$^f!C=du8pt`hgK0_>^kwD=T<1H!h-V5HiINqz)gnB)L=V$nS7>l@L>MPr4Wh zqF?u;Z-t!;xn&gH;WbehuS0OIQ|lf(A81Zm6~rEPwNhU5B<%G2rJ%a+zfUY=PKatU z{+QIX<$FNW-;_G9$$>SXGSumyqExOmrB$REMoSaT*1wub!mTy+jX})`HLx%-YOBCz z-A<*l!p1Grvx>A$&<6nX2m^ry!`~pCVy;sB8>3y&4}kFa6oLh&yb(VIu2TG!k=iEc z3xIn>fFOf$ZfH*BR{x#RF6a+Hd_;o~f!S_MPe)c$|H{y9YxM!ZKEgqs{OUgDRoym< zv-hHW3a=q8=O^j9U%c_|RCd*V101_EX}bR2=y$&ZFv$(qsqN}YTdOYs{t*#^4(7da zIXzijX>auhAU$G0$e@e^^?sEl!}Y`*^rZ@sxlAqj>6_vgEmmKz%jZ805SKd2q&92? zvzE*x3~6>>5mGqHIM*95+h#P$PrH^H@{KuxPGfQU%eee)10IM#rn9N~fPjauBfQNj=9vub*}zFtp2ct1h97cl??%kL!ZJuvFxL(xq^wgD7q!`z4nJCo>f%`)U0e?#6r zKg!qvKm?omJR&?ILvX+}H*%+`tH85os^3XtzuORj-{|ZUGCO^XD>HE#=m+d(wRWtJ zGkQeFoV0m%wt+jKX*B;#(}vb1ItCNJY_aX0>lA|i;M2|M-|GFYBNUFGMeq#^gxs}N zylX`b?A5d40`>|_;Q_h~jAA|v?2cxN05SME_boRdB-blok6o8G-A{~*lbuIbf^2W#d<}AHXmMItabZK)Yu>94KS%Xpz2e1GFzc@gO+VE^}$uu@ z3)Q6(TCV7JfbS#R;}ZxfnBd0tbY-=*9q?O&NWfhG&ak{+qZyViH)a0g&Rr| z{FJ5a2d+o4l>NwC-yDSNGZy6ont2|_D~DSzi`=;RE&U`$&^%Ks0hNA*v z4L`{Cq}aJ~Z_LNM?l${wtSk`jUI*$l(fBVrzLJp`yBBiny6HR=?s-BOMNVKL@L;4H!%{Jl zRV2VsUTN6f{=Z1cM&+_o%V{isf0_6Ws>h5nXqcZxU3X7iZcknC_e8O$4oxGw(6mT8 zan|D8RI0r(;Bo)iLG5OSF^s?n93ZXfSgi(bJc2)&R;W`|2|d(MK)0Jk#QLsGpM z0&`_I*`a_b&QJPxK#rg9>eS3WE|;8my6NYQ3zfEnCp!7c>OG4`7=^Xnl+%I%RM7NV zJBKD|ZwNFY`6q@Nmk_K|U-L+OYxSXAMNX^clL!Nl8TIHs$Du`__Z3USAw;0|71hJ> zAxM$ne|hzF62AVNAdMVL*2Un@ZA^k$deQte-23Ij`#a?19lFV?)0{6{j7{dZ+c`ln zUPYrlDF1;Frhk{>uX{jC(q9pJiQ#IO9v|iXZyx0qto-=QDQ;9m2 z^)|XM_j%B;o2tJlhpVc8ZZCO4HUTX{Ti1okb%^tG?ISo(2E-GBG_oY;=cY$+p)l;| zo|$kfd2QWq%Iwjs_D)|1+onCsLm-CLNHiDEA+x%B_k!S+o9^>xLL3MU&S{oNzsRAe zo&NZEpWw$PgRx5)hu*J_5&Zf_a)fg@VyezY#^RvQ5yKSF4CqtDgO-sX!CY}yXKoo% z@S*QZkF?$#=8C-#tGkz)4ZQ{5iu!wHU%zCVTQenCY2#9R4;S>a2iwNqf0$V356?Vc z^++4+ezU=b$5dH8XvN63#5(bd?6G<=RHFA2o-{7H0ow)JV`<|)DkR{={33gXU5s$6 zie((5coa{eRl-mVl;yG<(xG{vbfokzS5Sufo+N3YdThS7}i@AKgr`FWlJhn%CWj2|q z02Jf@1LXR37Ox?3?bgUq*xvtK5;*8}(8ynD6J$R+V^g zudYM)LpO>0I3g`y&2Yk292G4LHyll7DgkBrd9HSUftqh*CN!FeIF(V>G@1bI-+df3+3g2cQn$scvI(Rbw3{)eyFEB2}hVqWTd9FGY z@;*O;wr$8pUSKA9m^=6W+CPB&z+Cbach~*3e*^8z=A_gB?ffNJWV2$pz9ah=r z3qm#E3`CLGzHnn!qXe{%+sH;Fy_}vMvDFmn_Yv;z_p$QDv&eq}-?w{PWd%?V0h6>{ zujk?`@f>T_5S2pnX7+r@kk?mO4_h696V|ibCj=N00wg#^=&gygrdp7yiLrV;r&@8; zlmYnk*FZZV&e5 zOoa(C84`}8=rW}rvdFyX2kgzi0M%i1_?fsVc#H_(*iF$KC1CRX8g;GPq-666RMnpU zjIY0YYe_w1~vOV5$mn`7!I^1MOL@}kNcuklU*_?aDmC=FZaMX7i z0y(A>Exv>4N}D$aRSC%Te@bq??_sp~mgA1jzSN*XV=oxF?)@_5IeEnO*Cz3Gydbqz z7t58Op%USzAA;!;@V34z+&ow+)3xF{Bxw9OqWEk4PHKZ){Rf5pqv+oh_TN<)D^EO) z+}9mp|DV7g`ubv|+ZMAGmQ$1P+{&|m3mrP5@PWXrp{7spI=ExqY@_^l_aN)D=~x6o zgpQR~VSZPSKlJ23fUlEKZTLei{sda=A%Eol2io$7+WZ;3<43uooy?R6{w)x~v~u!* z5A&gU_A}-PQOo}vdi`t2)Ed$m4_~u#~b^#>&M&H z%g39O>1zOFDb+JNRSxMAs-jKsfXc{z!B3hA23^LXpu z{G)v}&yJP*wH8_l3YUN5kB-&+Q&!j4;4*vJBWIIZrN-pBqe&Z6XWr_Cgr)z$(m4W| z)T%W$&mB$K*gAVuFC;Dfne~Z1H_Tal8IyGKSkD=$nm6887#+<-&kV)IKk&!IYW6AT z%~R3`_?|R7c5b@w=u9XJ3(uz7%oIgq=o6I{vV*Br6!Rk`W0VVwRK8aQN72PAw;Q2Q z7q9=8olBlPHgcw^=1o}ocvLgJiGha4*;qNBJak;-Y+A`%xHNY-Y~k`JR%6~$*CCUI z%bUiKdF{dD3}=GMpDaFA%~@VJHg*1*_#XVL*`AqY5r!{AZ3T#`Y-I($Q+zcAJ*t&i z1I1(^nI=*zag@v6i+Q1FaxfGJ7$Y)q*d_RWK-Z$4 zQp}H)te)hEd)uj)&p=yepU}3j?_jBIQ#eq(Sv$2g-LMEcw(@eRL2kTCUI7i;PI)9j zw;NqHxmM5zesq|OGz9Y9_5K&R;2XEh+GJEbC#G`?iEa{;T7F4Y8WCA5(f2=Od%S6e zRsjQGLu&bSC?E26y@iHd^Z2daW?OW#-d2@IYcSk$JnsAD~{!Vf>-u46)|1jO9E9+p0V+ zi%Am3{ZQg7u@LvnzhUz@u#1Q7_l}XiEua+t?KCiN0ieggnV@=MQ2@WXF@EWev(vy? zt-3LBN#&?Uk6X1mYo4-DpkkhqV?T6?eC{#=dRM=QGJQxyW_NFSg0c*H)#zK!n1X~Q zVucg_{^p1hSvg228CWC zq$bz$je&FglgIkbnAINfOCm=#-ZU6L5pkzD>iWj7(y8M;bPN=6|EM2xs~L72b##m9 zuLRAXygzWs0P&99CFecJR(aD{wBq~^ z*qw&X6x9n2nR!bJRc|CG-$?R7)xOa>58EjZyZ9oQM>&X7Ip`OadzoD%V_TEMRhoTjsJEP1|`{`qc$VCL`JzKm{Y22J}ToV2#O0D)Lqrnoj3B8nr$LO;x#AFEES=6q8lHN0K?R^52SB z;)yTem#j_6Y7O`SEL#dvUP`<={$hL$EaTsuY9}GZtr6dcQ^uTHEjeX(r3058@>Gsm zYh)k1RH(g;D#4*ziuGz>y1z66O5aIb%$C4c*kopwkS`1wHio%0xLM8k%5VXX_RE*} zY6^Rtp(p6O)s{8=2GO0MMM|ZdP;yiQYCN!V`~6hQi&;h=;(0!dPebV?ZwEPgEa||s z+>;!E_1p3@q}z!i+MnVr!_t84Go<_e9iDc(@3vS>N%pNezFX&2qHA)HLNC>vBl%fD zP5RJA*|z;I?vFe%aWA`g%rG8YZwqU)!nani7Q3|WvvzLm&5~>~iPK@#`XW7D9f)n2 zg?=?z>aermmOkGB1y~o9kuCURviN~^5W#vFEOnn0^gp?i`S6faZGXS z9K5kBu#~-i$~(o8TfePrnzU`Dlx#i!eGdx9Y%+#9hvrP^QPiN}c0jK==xR|(`%|K& ztdk7M`_`O0=(2C$=Re6^wC4+O4T&4-vZ?R9yq>xvAu_MZ)q8gO7ab2J7ab_|%L#SUXL zdW6P>=~=zFs&@1<{fNh$-1l)peLwNIf@3M0qt!~rW$%4o1-*_&*Ma(x8J;b454C{z zyzl+H+N_1a(^8dvu`|1&6SZIbgBIhE=;9G7bn zTdSR|ME9z%nioMjHpNxe=>5~9b0+>enl#NIcb&-MYD04;E+ab>O#iOJuxu~VWV^Bg zPcpI*3RL{C?(!b&eAztcfXP0p=Qz{;uzWHvbHKkR7D-MEWkH5Lj6b%;u?mNK8kv-g znEU`iHa1{m)22*d94^4P%nApTw*)t)_hTYc7Hk^@-3JtiGLak$Kr3}6s=OZ=4- z^?lfICk5(zSv47kXK#6eycrJpML3AWOm``VB7i&<=#Z751c?Ih;NWET7u^baU`|j| z3K2|?r~D_mod}|xRL&KBx0^UL(W?;6l7J0?zGMII?6&pH{^H&mfcaaBQ7bzam zOpmeXqB;(V66-b?wY%jOP3OI+kJ*j{B*xF=LXQ2Mi)s(i#RIY`4{#h_q;mB|ysRF_b!s?suwE$B(o(DTqV+g|$BD{p zII4N0g^ytQJ^xFrQ)HxLg@@A*{S+17 ziyoWAS7WhMQO|D#Chi?C*R5bDRVGWfi0if|Q(Ip_UM$RPBPGp$?Xz;>4>lkFj z6fz^D{l#Tsek4CVAt`k)R6^#voJ~g3E_2H(?jNPol~t?w=Ur-q0ULKTO?HI5b;frL zuU1P;1D1+GBe`#FE_Ly7TU(Wp_z1(IyK^_1#5dUm26Rs_7h!D!C=1Vm;7+j2L* zfxVWVCMnCv@xi>66eJ`yZ1?4r`cQZT9heJ(IIT=UncDNihduXo$#cLX^o9A0&5f}2o?`M9`z*uxoU?cKOm%NzeNyIbZzN1+E`xi5z|K&qrT zIl(Xi_&k7GteTji#jqfxO2HoxGm!W!#SrA_edZj6K7jq6@(^euIG;*3 z8OodZFw0jSH3wY6;Z1n>isQ_BUk)&!fi{~K3daOaj6jB{T{W&&lsZd&hvMIBD(8UO zxV+E?ij_m5*DomX6DH#>%#VZ?|77g0)OPujB+)s)xi3#LAgH8xm|=q6xYD5kD3gC> zI^_iJK4eZ;5Af!GtknA8nrmG>sjg0ZR(Htzux57Zu*W$>dkBJZUpNPJHB_r?{Q_%d-Sn;<`{OHdDBOOwh2(CZ!4|;#Yx&AHt==0EV*aM1y@;ajy z*8BMNAKC9|4pX7+PCqmU8G1J4&I$hHVWpm!gXCrfhakxJxpS?0kF56uhq@+$-5)&? z9#BCGHbNk@!g8gn22fCQqbq|mekL3^{-WC1+hy`A`w zRkXCLaAI3Xc>R@(pOc*LD?B68h`!0?LuL?WnCtdHz>7}!p6(c=ha%&nB}z{6IX?Jp z`eYeZ9%;*t%hS5F!}CQDl3o;@{j9h!-%FzUS5`ein zVYl>yHH5!*wO+2t5m@$k7U(g##8o-(MSrYxBtTs2s)^FvgVsc-5Va^H;LSXL$|4Zz@5Q@+fVfOd%SFFxeSecW#fz;(D{ z@)+>2aJXXDQ&Sx{JIjf zYQF929|s9LP2x*6*Y4PXKe$$s+*kvT?dc$c%wOX6-3ErBVkHXWPgy$tWcN_MW6^D1 z_GH-SBoaYW;;9W>ZSv>Y|3%tcK-JN7?ScsjkYEYHA-KD{26uON5AK>kaCZn6+%-UO zcL;6=cRkp_eVXKbzkB~X->g})X04sxyPy5k?y9b;L#n#Ey61BP^6>-BTsCBt*V0nq zSIvH8I!0pW$^K11v#iwWFxNW}ZN)tv?}@(K>kNd^_OLZHH|FM7_<@rdCf6`Nc-lK# zHXyK=hn1|UuiwJ}Sgw*k<>Bom`A`0iN8?NKxy<3m*LQIsU^xie9W!{;6j&7k0*_Ym zr#`O|`N`k)X#KocKccy(eub&#DF50ZxhDt{XHoftO9m{4aHz%KZYn3m zz3@eY4d4GX34G4shX39;p5pe$&w3wdr@5@!W`=%_OoWyDFFG*rK*owWqG( zUNd+>=>d%`>XEelQQrk-4r^GJWG3k!%Xsl0YvcvDKL{(Upf(fw(5&k6=Z^=P86WhT z%%1sCzssNMcN$|p=vMsj^KuKej!~5>{{xMAvKs<^V@C}S%|6{}ls?dy^N0Pv#rdyf zW8e*;FPWl)0QsQ3Sj|FC5x2XEjpHkIo=cyMG;3hF|J({l#YC3)3 zMBiy@Ha1Wa*^$Cw4J~X-XU45`|MJG`$KAy-df%gIOY2XJFlzH3QetDW!9xTc0%=5gOB58s7R=cw+~ zwLw>orscKUQ5~BMH`b3=RUTO1GeMt;cX;>jE*j`^7Ab7#<&aaOGsC4&6ck?4e8unOfK-qW6{b=dRkPEXOMLWEe4!%hiyRA^L4 zYq7iMbOl@US99`{@X-oM_CAzlS%P0j)8I8k30#c1(YMA%%`^w;+>0v$)hGevcx8`%IhJ%J&cv6;(x3C`KbOhM}Lr9?@-M(wAQvyvtMZ6wG2 zPiB>*yR+?@H$#_(%`mZPx`|Um5k(jbj^r(yj-Eq?L;CLIS8vQJU+>HcZm(Hw1>Fc1 zFGAyiFdVvd7u*<%_AZQBTcVXIvd+^`qb~a4j{Fc7;TJJ>!l1it_Hv6M^HjK}do> zX&oGQa!kxO_IM-X79>M<)RMlv@mlxel^5H+cQ^SeZQ1iXjYbZGi&*T#;XfH3^@QH&~S6Pn_8>vy1qJ&W>|G(x2k!%+&B*=7>u z52dDb5FPr;!|sj{(_ezUThQTsB%iFXptJ%RWG)A^evfJ)X1FaER#FV~HD28Xo2lc0 zJ`>ncOC`7Uji9`9^pczcMIkN{|Bf)V5hl0h=Q!b8$EqutAPr6KJ)0p5O-@V~AjP51urby|nwv<}&swd&T(0-xCYWwFNq65q=+3TQ2YZ|TOs!aE^-YuLUaxx8zuyb#r+qQb!IeW)H; z79g)3=r;%@g}tF3tzjp85DdB7$@4X0McZ~+0{Tm+4%v1o8YdUrwuQAuR_}E0vbPh&;!sGYch&Nv_P8)ek0Qr$ms*gMM0 ztqx^w+2N}pIksG~3YeefCGZzn?lpIZR?08>Z#zc=3J%A{X1u32T0%jLUG{P!xR%Z| zt)1)`X`~<9qVD0(mb%gpDt6ZRR#{I@9jSSj9c?*5kE^rDV5M31#MO#xo=iWtAkw)= zn}sh%?cFm;nbQO2B5n7Y;X+NRW$wRm4^@1&(~glnJ%1wV9V7p${!P;G?y;u^CC;}B z{2H?T^AM*&>~lry{p;WDcQK!}J)^F-a2B{?8~WIzqI$+WyYma+OLtylf3fx-Z?2bF zsr$4@oKYo1ZR2%&Z=dEx$GgSP&T%^bH;Le^#+-??#Je37yeeN5|5?lwltgLmr!+%u@yKelk0|^ah=O^CWuk+zc`HjcMhK0Sotr ze9S~io&d&Nu5QUzQg5yb8+I@%+me%)u`U@yJ*_#$!LR3IPd7!{qNqZ)YFne`)NOoN z-?@xwitg}cn_NS>SkxUoUTtu`wAFhs!dSaYwqG}DIr8q7+d4P><#(*x&P!hT348`? zH`9TEGIKiG6{QBEB|Y(`;Zev$DPQXjvT9+^biBIhV;a0mb|YGN%Xjb2xpMdWqI-w_ zl0ye{ZyCh#3y$9?nL}rG^pb3tX@5v;UUd{`|9~NoCuQ%d`4=<<8 z-BI=f-!pqzO#Pw(qh=KtKJ|k`IaBmpOxBs{nr@29s|)f<~`4^!S2~ zck~_$+UB1wDjpy1t|<83c;7Bp%swht#&MIoE!{n%uF1C zw`aYT6{6-D5PXg+Dmg4HYZW^V5np&;$ zLRQD``)KXTlw!=ki9bakAhFZ&QNS`vtfu^%D$5)1zNDK0C%4@M59k1vwpq6o@s}}OPmov*XI>#}7v@Ynlmh{am-@6{(uIXE+ZZ({B-nzdnOm$Zf zk^O~3I1)`0n_r=14=$L*4RrBe*b}x7=?6Qkg}#{4={gZPH)-96NB%d|zlo3oYcoVZX>UkTqHMTuO`GXs?gaQZMUe zNB9{)Io$X4ek|Lq$g>&yvZa;<#(5Ri=*Oo|($>gtZ7Ql1zDPRZhNR3Y+y%!+*|Gop z%sEn%@<9lSI+S`|oDWM&fBZ_d?{bq-Cq`92jqcp#rNLN;v>QCUz*89ElpS0s2Mk6# z4D6Rn7{)om0l0FZ@3yf|0azf5mcY}!U6?dGJ$XhL%j$Bzcm$7onrS1@U z=T$8?vD^&4VQ`G8jWb5R%sGXaNaaX4UVYHhqr$W5eXBV`a;h#MN^O9?FphQI7E67x;dyi%N}dV6FqF_h$`H)x?svG2y^_9uQz&#f+d4b> zxe8`fR>@0bDelpx5V!TRW-HAfzt%7neYFsh!Zt9uw}W47Jc!eJ*IDr5?Z#cK%)7Y7 zHa4iBUo@d7Cim&c`g`gLJ-mE!t*;=uisCFdbItl_`hUKh-ml29fdTX@G~ge>f9qd% z21Zr}W+r<7yr3QyMK485H8MOJ7Nu6HBF{9#%%Z#w^?z&+2E_T#rlkLMbH4wlElCe8 z8%UAMUc5l8fA!ycyR(xc3)??gscEr@(wK^5mL4(JtPa|xAKA)ifMCZzM(eske^Z4f_-`)LQaoZE9C91q}XZh|}ckA&g z5_sf3_R5vVBtQn zi4VllTfA$JQswoyG8&Rwd00(6BC4|elbUn?}DMW zbl2YXju$dl{PeIahJP2P0=#%1bli4Fulg_xd+fd2fq%am#DBlGGW{f0wcoaQdIBl) z_3e{eY@*@6*L!+=l5X5PFKUTE%o-en-6M`@l-tXw_zJ5i2H0X=)RKmn zH8}?Rw>Y9%ZZEUy29{KW@&;DPY525TuO*KWYep6JsCtB1=^x+!goPu_vU{0hl(he7 zg^iTLQ|T!;GD{v5){GGB(ZBA0;e1P;Nvn+;J)hl2N3q~;_UO!S;tsDGn1v^B`gI6n zmjsTGVvZ0uGu{u_67VC&EF*535l*yyUBn^kLELN$5_f;qKrdX3)BixIxFUe}CT1H3 zq90tt9vvjeKH2b<=Od9W-xDfui24?sG@3)WzICP^>~?d{Bi!uegZ%9L!}tJLZ3xKp znNP?>mVw6qn>bA)>`{eHs-PEeo7g{&2l9{O^WX1LDa|Cj3}Z6UF&S(ejCW3;JOB_C zzkRAt&IvynCFONU3$@=;srd~i{BYR9c3{nDz#i2W{bI@E_}7duEAM4i+ej%n9iDdE zw&d}g?LB)!q8HsaETtpcH!P+z-8WRz8J_ORXq;2SfOoD^#-MhtQpLb=u0q4Ov*h{z zB=E=hY5~FD&jbGN;_6e}m%Q6+6*(Xn|B-=)dio@Zk1QM=PcJFZ z{Idc!4n7XqzJ|$n>WbUUR%Agww)^wn?;-0q=Vk99kelqb;wjlH-1kL=QB}OoY{hAfoc${2iz2A|md~61+dX7;QipKUd2Moua1(89 zl9zC^c6IVfs9$bGj{nUM?9fW~Z$IAL3BC!fc$la$|;o5Da499J!%DKr{xi?~mNhPC+o8B#euvFq=Qg-^9JP@56~2%^;Hg z(1UBs!RHysAc5)HJbrD>Y@mpTym|WZud?dQT? zBOD}*vfKJN;3Wur>Ta!=GuAzTB8aD-x*xa!LU_i~CK-f-Rq>DC7;NkK$fF1+kra-2 zdv`V&jc*ADTl#=31xgDEH(X(^K{)pZI^#30h|Y|YJ#;Db#vr-m0TX9}H-3rayp-`7 z7=!m`-`w>e&^NIe=cK&!@i!Q6&y-9uhK)wUw!;eE#%1r_NSu)nSk?2X?o=Ztz{J5qgWb7z3FJoMM`xqo~bQ_ znU50TL|CBobu1h~fbg^STHg~qgf8G5Smz*4ZV^jd1Q8J*5oId+kl+KC?iI_x|42@m zDD1Hn7X3X!5(}HS7Vr;=GW`Pl_i_{GqLF|nB|@@jPdwQR8B(G^DTeJH+%%U?Pyl=% zw7q?uzdt!sSU+lZeHU0>z7ZY?va|IKQDl zE%n64M|~R1Jee9$W=VNC%^6Uyeqfw?L?I+ck*ec|S@0#=G&UT#?9;!K`zDq7k8{m9 zlym{#|BxSa?{uS-#lBZo$440we8Bv6<0YQl7t0X!DcKjfJl_y?E0e?@VgBA&oV=T2 zIFo!bQxZ{Fafe>u`7dd`h2WbgC zSvZEh0&~UlmfK7?i`Ca&x0JEO=Eq8eBFX2BJzdW3P>?%iaa1ybHo2G@0iR5`1CBVp zT#>rfyxoA^bPA9seABp_*V&+ahei!?uO2KAO1Vnqq&cczz4_3AS6FYHU;fwP$N{kzv{KUad^{cX$4J(+)b9;6j=~ENV1Q0Grik3xR*sXNEpyVfx%(s)k8T`Gp`K1!@G4@UpwfR#+ zeiZBx)XlS$=tc?d<%IONzs=y_Zl#k?B)N4NN4|-&Kc{gG z0D5-RNOlNkzQwSy2*1Gyw4%J;WnTM08^QP_n9q=~WUe^nnDJI9MR~?Czi@{KC6KA8 zbVpiY)SV2$L{VcjB|GCx8gnqWI)hn+cL#_lVZv(`>M_D>KoK|SF@k!LX4WZBmT-|q zxz9QJElZjT`1Yfnv|0ZL$w*4*KBqwIADhXF&%mw3UjUr(H+{goakBm#GPPSUu z0?9o(A?|@h@kG+BzjdJXgT?6328~8tMm#J<+E11pPYAcbT3Q}xId0`8+z!p}vy6Kr zRH2N#u@d^WSDU{zLL+V!D+CtO@(RUOsq+b}M-+Lcl02Y`w`oKKt7RFXB^(nCf3(KK z?xy@ieK;@JWJLRMX(RLnu6Kt9TG^Y@+>Y05;Kz{R0BTR{KL*XH2Gee}Iumr8VFIV=s-=pYBdRmm-S?KoaHi{}?UN5CN(q8Z0MJGLZ;6V4N!szQU^i zX*?!H`EGN0B=%EMI;CRn(zD_I3-vSQvk^h5h^m(_kCUx`49HC=_K_YZTK@>0 zld#UCq@0tH!=S91lfTM38UtUvCH*4DJyKhq)(onC*m2X(k`txfFoPI_L}M70W}DOD zQ*4iP$A1Il2>&u5sQ)nje*x7R!f=m}kM3{-diksLqcH{1DrJ<#n$Ly|iQ?4H3}QLL z0}UmHq@8{x@ogp%-UChuYIO!Hbf$YGPe7^J?{?#icS29nGe1pN8Ad(1jHracPp3lN z(&&Sx`t+kg2ohxQCd?;^J3=-jaRJp>m_uiT)UgACAO!8L8@tc(&lb&J%VP%Ne)DFm z!wd-jirJmdNjl{@zC^}5TqUvt4d%+29ihJX0f5E>&=^ggX|Mi6l zw|}EC{)ZO!FRgj~Us}$8Xr%w41^-LCU;Bq9rK};7c&&c}CGqy66r=O#v&Op6HarRS zd1n3lOWUCj_#Ao!AzAP}0hNV}QeM|yUpEuo-s-%Ox@I~rsu!3Lx;PA|1Zf7YFTj&@ zbxR!xs>{Y_y}p8y_&{2Z(HWbCkWNh(&7+XyN;uqLTsYM9J`e{>(@gJ;BOO-p8Qr%} zVuAb3@CGBKLZ6od7|#3Ui#(r+=8pD+2m(w~2fEM1?>gFVx}p(OnlL)kqymABB|G&= zgbt4a7Er^*F(u)aAY;VzUYn{pu0o^XtrS2$+U!rS|Kgck2)ZY)>)O6nYiD-J*!8Z0zsN{ z9&HF4LbG$gvV>|^BDpLj(Iw|Zs*1Fml!78ePvtxV1?}H=2Al3GnsFkXV)|{9aIfG> zoy(g&#UE(VY|$X$nM4XdbE36ghY4$h2)ayCE3yi~H|&&)ZzT`4IEoaX*GGG=hDzT= zce?qz>Y?VCHFq@8Q+`}tT`Gf1GD?z(SaRxi!I4#^43~3vP4bZ9q~Bts7NNV4nBha6 zICvHaL#Uufx*#5tf_R0}|1R;61!IreXx#!p3a1P(0?xTaNT14|k9}(8dZC(;{xwel ze?)|Oi!APiiCEch$vx`7G8kE{m3NNz-vm1E96GON1rU?s>{P}1&Hp8rziF7!mg33$ zmLIkgmYlo-Lw>ln<=H*JD0b>_Hcmhi9Jq}@af)$?74d+Ci-43eYT{2_D7B^%AaiMo zsv-%H&D3goR7ntna86PwG3N~C#+$UQNNNsBGQCNti3dcb+|-+t+MjxWO?l#0 z<*zUul^8Fo4XBsLR%w%#Nst;f{GpR2)ch+nz-MQQxU0JAM#Mg;z(sbt{rgyiln0`NG9y`%dT`MmjdQYKrpB4#NQJLR)^t_vGv^LIY^%BPGL(D|ml0#mPz zvHxDaJacYL09Yo=5G1WgRl_Vlf<5|v)pCv6If=0%M z1Y^0szP>17=Q9F^kMV2*u|b}aQT>UPn|kU*zqA3dnJIOPeAxFIYDWVsE$XldO;j0e z&brIN)5_?q1T(*yBDhN}P;jZpO-F)}T!~(EfmN3L>R{DQw-Tg19DT=BkMlCyLo$Qd zH1VcSS4D0h=D@F#w{9Cq@06Rc!|_W8jiSckl};)S2;AgAla^n`qt+mz=yg-X;J!pe z>$7$JNZr>3i9ioIwW_~ESw}Z!i^7+8TUo!A>mTosczsJLVPCU5=eTuU@$LTBA#L+* zOBo5N=6P#_gICEdbWzt_o72{H>N=$aUrhkkQ~Ew705Jj(-9`M=+QgfEjjXObJ{h_F z%3Q{I$z|#*gPK~02nDhE#zOxGV|du2QE%8Ke{>{>gje)%=O-?XB7Z(Xc-R|hJ}{#e zhqxGp^O%(R8bRhr(2^-U>>fiN5=om~^ypq!>(2oHDbhCojAwQ?A6Nij^PY0=Qr7_P zBY#uckGcMgTq20^a;IJ8H2@d8)qmy@;PSLh^e27qc9kRs9v>7bVc#e=UCUZ*O2KA0 z0g&a#70L*&q7;_`7KnF@0>JUf1vst4g)#K${^QTSGB3cF_ezW_FNU5q`8Zy*)u~?s zfDk=xIHvlOu*Y4gh*wVTO@e^XQn#`un>aJ4T!7>IBSwLD%W><~25MU)4-2rV_eROssgT#D~2$ z+LX_(8Y6)uYJ~FfyFcs8f7xs{!F#)wtl)4j!KCg@eVi<@s!SO%WnO9oPQ!B#9vUBU z^OWX47}2s#VsYh{%<3~|u7e~K^vH~Sa@KH5SO^Kv2gC1#d9c5$2;7-%UUN72r5rq;# z*z7*S8!+6Cuc8tkY_=4hJq=o8s*)!!Y_=`NDKZ+HmI5(5?Cse0omy~d;aI0vrQW>( zmbDraDT>OjG;1;;RJNe!X$J!Gdo&MaMAP6eg#zkG&uXm9l0oRTZ~)teKNb-I)p;5A z@cWkvS<~10fp3E0a7$sBg$0z&+4=rNpfC9oK{N8*bJAOCT1IO5ia+UUvi_#K_>-=f z0YVCuO%?7H@}&@tSdWOHxU)ZrwfM zl~9D&9%{=U62>#BKlG1{`E1M1lmI|Iw;$rsPeJ}Jex3I964}mMW`zuFkpqFz5@37Mk;MPF1rZcV!d|VM|n8z+F1VNl_ zJ@j>ya|l_Ztl67xPJYnVVt%n{?R@crmo;5*t^HB*m3%47i}~DayKnPt-12yo+D4}g zqvXCuhj!#fy42eiS;|IhCzL&btTTw6#`++;cSamt(Q?bZ-wiU*QCSla&PrF*8Hbft zb&Wb0(Q2)j*wt!dl zozuKbE_HPdj1CHHQ2!J(>A)oN)n|^?o(BTeOk|IQirJ!<3QkFD^Y0X(6^KhzmrQ8r-YM+K6JL#q${4eJ zK`oC#L|ZZ;CSTvjZg@4T!{$J=GTC1jdQ=^Q0&NumF5RWW;Z)FH?BD(i4M%`0o}m~a zbK@`(S5SXQsdtWJu8j4ja7J}Z1p0F*%~;mz+3Y3&viTKr_y;lsVT0_)pQE!c_2-8@ zM|bxVz0`3^ib(5cXRp5aLyvLKu?Qz)bRe=_>VMVq917AC!K1`u`GJ_+p(|q1?+Cau zvepcVrff(I%DAyi_EtP5rvkyWxkr{ncp3$!%?H|o?*0&S=9U9e%XVr6q@O!dwP^xW zfZ;1yo7PV8kAaY4m;4Y1ezi&`Bn!L?F_8Y|h-uU586x@z+WV&E-x})Q1YyopW-bzu|iiF?#Ojg zr;SBr!I{PdfrWe6K#U2MNSWFGkcT*)%)viY7H{Ecr(qAA5ifgwbCxf>nLJN`1G_y# z4)5z09S)-YXaOi7-|CO&&Cp*@MgSUX!}yC!F9-IhChI>gGeI$!r@s%oM@ga3y4nuP#p|M3l5~Qr+5(}D|aS){17GaV8rImE^5-`4;eT*GvsV6 zBe9h~J$nx=g&9}PyyaX^hj(UZuRUe#f$Q^|^9 z#NZoa9PPiC0(bnAnV_!?Lq6w691=yty~^xwTnV^m>xWkHLC5{CYO;G#X~vEeg7y`d z65zzFMd$4xJh z9DLK7tZPzQ{CU)=Ev45wkS~!S*0j&pZ}A7~zGuy!T7BaQ3u5bjF7z?MJCMV3jdAxo z*8QnVBuL>uWb5AmdG49)zN$K<4?D3+;Ta@3^j0ehMhwKQtSLL^$igwWoHgN4Oi+*m z#x=%o-M!tu^z{vH5z5q`ssY0+fn?#NQ-N7q_%CB0*eB1lZ7zwZTc?{kvw;Q zs>(+U@99tdwh`lO*AI!la_b?zvupTkjJ^!}K5zb_qJC3BKgPn1fn$)G4m3w@X_@m9 ze6#sgUttpSxsJ{J0KP16!$)oYsave!KXps~4%YFxm}diL9e;}H1qo*OheG-fMecp@ z_nGGgVf}OSZ`>2 z-|qBl)Ooy;EBR$pOIE-nrZEKkS5$~EhqWkyb5N@;1`F2#w``ztSRqdiCuN-Q-Gr#a ztWe3-c?}s3qgdYPXY1DJ($7}09~_l$7kjti2X^bo*#C7{+gd52Iw}W%dPN_N{j^#% zidc=GKB}PBgkZrinU<~H?-Z{7kQru(ma#&-;1?r>{cITcRa(o6>4hUcqh;V%8toES zgW94Dm_S4RUQwtX4}T+T5`;;g@QBy@7chNu;+UNem^g2h!HAJnF=I_#S}oko2|B(@ zCTA8rUCa$<`M-zRPp1;o`?A@X@i%tPl{r4H1Ufn{9xodw|KRPTShl_xshBxw>YGb+ z`mJ6~%gA!fSVyYEoNFzGu;3Z~Szm zuKc)Ua1H0R4~nv!cV^PEe+<{eIJ^w+M7AF(Q{lLD9sW)6v14bEDsKs^5Z))nv?H*jRw>YKVs?OZg1+<5}me*_ZO_gp0b=05t0 z9uPSdh};CZI%rue%NmP1REg?XI#Q}k+AmsyOKf`7TAIve)w+oE&3(icc1ugbGyS=2 zuj_%S`H<{Z*KNk2UdHoU*RG^>odBJr$)iSRPeJ~$#AoQ>CCi=W#k6PuP6r-pTSTB< z0iP$_IJT745K4Oc9`2jLq!p?0M{*&vUO(BRRr6Y~Ym7VLUNGp2@>fL=TCx8L=m z%BGVm+*00jK4Fi*_Y4+Cyl+`v0L?^mFtgNxo5lv|Ku1ikFGH@il0!02G{?ra``j3H zjkGzz$PEg@hTezzII|45v-`;P51Sg1U=0m?>4ln!v)d;zwG0*i>Fs zMwdgCE;6|zNNrMS1#f4xW?(Pw09DhFxlRKa3k8yj@|UKx4Qipzu`J67JXb@L-9?jx ze!C>Jg)O>Y?D$jzsf|PCl?|qCcS*M51-8*wg&!lD!qJPZ_?(^~h&Shm5IkPpRh_3z zIZWjnG*?ieUOzjR@|M~x=3G%4u%4&bn;kq6=sKJ*w1AIt+*ns+0@nnIq{U#Q}qJWKa{>nc8HSzL}}F+0Ys5j5wKjyJy;HSgK?+ z`B&1@S4LY}47NZGq96~}2b|vKGVR~VYSa8?!&01J-}kN_)NkG>Yj!8QdNCR;3zLMG z5p*oWeEcSwMS)S5|8zecZ|5_KQz%a-}4svgK!_CAod>}GM-)*4lVektk$bIkB z>!mmPrHoy2(sE9?J1Bq`?PEUIP!BF>gO06b6@M)=MkLN&tZqBPd1a@5a zxqf3g3t8Ty;tjWMPn<6OqjQD8G*q|FC71nQiFvkxeA#Z7Y}xcdY!3C7;`a>2W$4x15)bAa_HDA8@-#-n&@yH~ z>O3wP@hq@nOfD!P32Ew8upq)Ivjd)3VH<%JM%L~6q@4v=z}Ba;jtA+i+}}*k3+1a@ z3n|9?tPr$O6zdl{$%sjzNEd-$L;_TxsVO{UbaGkMzOnZ7M0eT$`1KkC_y}X+`v%O| z??~tKqjAhJSsvdSqdkuZ-eDSeJ8&7(eGDdJuMr5Bzaq@&ejE*mxPNeXDrf@3vRF@T zGVmMIc$C_>$ye6DP4(fFeg`a+5`~Yd$l2u)RLisC5Ya@g6VvS?hO;AfQfqX11zmz% zC)tZV3O+-v5uIbjvRaHX$+qXuDC)htyrN`?tW08>bhF63G5|ZBc;O&^yyXsQn}?FOUrMgDL1Y(!RqS`zEzGv!2BFo6w12wOG?uKbEtE+>{E6 z-(Dsb+td=wdY``ENCK|-KQ1)DMey4T+G0?3|A@)0?}8_53zT+LjUOAyvRX}9(^Lv! zwkOew?_)G935aM~Z1WQ0_4aQTgVAJ!Dhr4>Zt~p=%w>K?JZ@g+wT4-B3iW){e32K; z7V{vs&Z2q|V^3uzx3s0WjJP3PqXhToupsRxYmgG+B59C3(3Q_HyveIHX96dqsBQw0 zp_FC{prNE;3ZkZzb|4XjY1KxEP#YHyk5C&GM~KYqiNVBm)4;=1-wN)7HRW7?>8BCt z_Dw&*2#-*GYZ}>JhY}3gSO1}#R)X@?<7>Gr^u9D#SJ-ya&6}N@CxSE&6z|Lq1VTmB(T)1o2D0m2eL1Y zfL*vb9fQeQIZ$H6Xvv!*A=PnQ*6NQhsIa)7`3BXmUg<}4mkwS!(ztC`k&}I>VAHhg znO4@Y%>^%1fSWIsy!e$FRDj(v8in!Q3N+mKGP%6?rO#JGBz^+<;Wb$3P|o{k0mdMF zbPAT8%-3+g-GzUQrHMfUMz{i4S?|H|t6*!}dy37wQK$f~Cy^h~$Mn!}H;?bWdfX^# z5{XRXDri$u9Z|^2DA9A@%%yIWs#CGA*N!JyA0Vrj2*wy@f$MKl2SfVKEQ zy`oAi{i5*{V${;h<~(B+zg4AcRKRuM>^P~rhI9tNHqH0y6$(c{QbT^ge`{Y#$6nee zLar`zaN$7c+0_e;{(}D&nREc2=EbAv7o9Iq37lzAp>>s33u*=`>0Mh^i4b8CR}Hkw z9uvL8ai^p$Y8CNGIxyk^CvGTIZHs|(gHTK+NJ>N)?L#fRCncgn7XNAIvYkwYX5NCzdOfz6jYur#iFOAgXFr z41Jzt$y|SuL!OHDCXVX!tT8+I^Qt`Y3I-M{1d*Kpy1nHm8mkd+;kfuw6$E=a79 zybrO1?>p~0P49pcMD8767WyBS!K?K83A84a*~Q3e%93?4DbX08^!42>Ttvm*dZ zO4!i&NOt=l=+ZW1MBD}-i76d6$MA;|ByOtcFw|tVALx|*rR~%i`uML@?K5-`IC=se zz=p;{BfvAR#>!0ZFl!K2>MKc%%b!XywA@CHc6*&Zmt@r@X4WG#I&-5o!gb(q>ZxEl zu-Ox#mP_Lh1NR-szCSVjhzb1L=MwXoC@TgK&prXf-&KY1cOWsqUB&s%*?^xL7F5m5 z2Ac(>uCR-%Y_Q$zKKfCyHO1~=$Uipgun!EyU+r3PUI1e;$WVS(73Y?d0l$_Hh=ql% zFO?4bj@!07!5SMo)lmlHQt3j2b&17^%dZtt47(AZ1zR8>A;DSn?)13lq_5-wdRWXe z9RieFcl8e$0%W2B{D34JrW2`vj!2 zhlX-pd*R9V>DJVEe3pwz%# zmCw)PN;brQ#+CV5e@C1kmgj35j*_PaHvS#jPRjosw_0QG{~4uDYHO(cnc$ES+9+oH zKdD#;A+MS<%+EcbxDzmtNW5nA_5xwXlc zL3fpFG_;!1>vwK-35*d&mom;+Rry|ZSuvlo`WT1R|3K8sAUeGV}71N1VSF(ivaWmO7ijN zYn#1&J{F)k0^#fZ1*4wn?_$zuId0ePO5*?`ex=Qq9Q>m^%q1scydy;J;NE_R{K3d*($w88-1)=8 zUSQ_f{9KKO?tK4GoX`A;Y}F?1E=_sl*Pc}?Hhb=d7V|7ngB#&S7)iRhDlVyH0-)m6 z^PW76uE=_%-(RXf_YsCm(O30#1h(ZRsb^Mg+3u+nvoS+X+o;n2`7JI|E@gl)cuNpRb>CXANQa#=J@nysu$47QtFsMQJcleK1WRAH3Q zqT%S!E{9n0+!+(sNaNRZm+x^P2O;T$? z#P=ATBXj-<+qa(&dhhsDtaNmak~Mz=*JzT*%Pam6M!oLTe#VTXt8dDglkIa?Utfya zCt0uR#4@Z)W*JkUY^;2scBW3B`~jF5iOni^r^2+;u=z|!3|f30yi zfL?bvH_8I)^*OR>@iX5$Mt6d4mmNtK7BJXzOQI@3~aKMhxU^HU!5!YNZE=`MpdqAKc5 zei|nC(nR0Iu;am_$Lksu)c3Q~SHdRcw0 z``dJrs4&_cNq*dRac^zbtAqrrFl4|q&*1~0;nq@Eh$+9mxLtpL?sW1#JoVTg z0Tr88CL;IcTfCr~{cM4CxHIPp+E8?)=|=O4@LW@ldbqg&s>Gff3+%rz)o4M7Yrq=< zpR#*uEV2J0aNFuU0d~K5Y6iF!h+~m`3CQ|Rj;Y20oXdKiP&DM}A@d3zy~}^O+ADE> z!m^e-h9nzGf6iZo`KKV`TOgQAXwQuc_FtmBP&uM?dU*T7D9eFa;G(JCf0Tgr=+EV@ zlROA)W3rN;VBP*Zfkbs4)kLgOp*$4OM2Y( z*YCq6E5MF?r#W206#UGYewYXfpxAxwL5KdViE#7fL5F?-S27DS{==Fn0lW=j1I~co zf{{V;0-{=bkDh_%gHtCZLOA&@(i=!iJU4eztD@S<5$*0HPd{1E4=eWKEU*nLeqOoO zV%cFqnohQ$#}+CIGL~RX)Nj^?S5DP$o@BoIuSA>WWTa~Kw?Sa{+G&un80&9zQevd( zIExBeVj%4R?@Wm)(&BD}3s5D^UtQG#!=|+TMnY4EJbh_V;VtRI9%;jm;YFIiyQ;;X zm?|zY-P{QQO)9b64CF&XLSnnQ(?2p$RN@%mR*i9qdyc;LTgtju-MtPvP3u4=H;r|c z0A5Kk6t-9K59u5T8#IiG#Euz{;bA4sAal2n;E{HT9P_p3I<(cja-Q1n+qv!;4RhmX zBw;88GJ@lfG)-%`NRv`cYp9$tDw=@3u#jj=%X-0?BL9yDGohN`^M;J>mGbiFWBg42 zcvj@O3;fW?V*IhQLrM(IeDyZ-zDk*4zo}HM+IZbqs&QkwVKDoo4L7Ixq89IDEBLCu zyifnqC&DC{U7TQ~7JeKfZxOsUEICPdL8vtX_-;O8P3|5hNP(+aV9XaVagVz|5GD;n z;HqrV!PI~bi6ea->^?OU<|9U^uS)6r85RN^BT_ze3?Bj8 zrnphrX$YQ<;ikAz)Hx5s#qSAbP z9IA!op&UGXOm+SI*A@SH>3XSqlJ$&r+1sl8@@M$RcZ=oJ4ubdf)@s>}$oKO*9y+Um z_j^-E7@Vv3SD0gP0P)7m&{lY)_WIm<4*j9s^aTxgc{djdr8D7FdS9OY=_#|?__VGe zvyA|N&6(SPIGSs3&#W_Fzu(1sy8c=v4D$>n9G@KRXYuB z?U28|_p`}dvAwl&i0EkEyZ5{NF<9X0k5c5O7imr}g5MGC6{&zs_>=g9Zj#(p4q5eQ%EQ!pNRi417T`B-^$_VW9xMxb6n z;Tl|8ejGps@&(|3Wg80B{I*36fy%~(lRt$M%&0)=X-^&;wTAAgd`csxLvMhkz@@Pdq9s!<@EVBet6M-@J>+5i08 z6<3`ErfHe}kdZo?qf&Om_L&%pquB#BX{BzrAwv)@HcyD?$-;%QgigQzxDFC0M8+Lk4by{4j33c(`Bg(Y%m*dqq?E(QjjEj^sOr zbRz`IAwGd^JuXAU6~<=>9&@v=->awkD_UW-`;2O=Dk?5-r1+O@e}K zBOjAsyAU)t=<=o$V?u^^lTAvp*$C+xi3QV~(a*v8Y^-VWTy+&> zXv=mpaZzJKOc(L8K9sJXKXm$@zR*LxwK!l|=u=xNb*l%8?G5orO$;i8G-Y`+#-ZW2 zfP+I06JRW^4Vx7_%5QNHhc-rF;7>fU+%>t8e-agq!N&f)m4$q7Bop~Z0&!_ z!?8d&c5wx%9)o7+WE@I+mu0#}UK6YRXKteQYd{t7jsuCN#-3-|*_>~HKF*UlsN1nryWNkxSrENB}FkkJ~ zYMAZ}TblsHwjB@~*RdY2RxHEZoX_fo+HivEgxbt7Rfse#G4toa>NkJO-!}`{CJGq= zzjT5o|3R$GRk&K!l98%128v+ApU@5uGutX*V+=&c7|GV5R29NUl2YB{t;hruL5Y*0x*M zUvl^9w;Z2T+u{t<35Cq&PFFiNxz06Be(Rz<#NfSJyBdxemFDQ30q&pPNC)gSpR-KY zMVJT=74Fh8@4cDi0&i!`T~{)qEiK$e&vuu4tZL=&alR^21%;ZlwhxS`A_?C4n-cCN z1ceGUvMyT3IEF_T@$R-+gtgG5J(+%&jv-HJ>nvKia;j3xwy@eCNtxddm)j#puzcGf zWeg5=SiLEDwi~}XuSz7$(ZW~5j<2;HrX=QRNo}$nzp9V4lqAeCevXgJsO4ZZanMpm z+j)&COlseb;;yU1@Hp$)`J?GtPm%>U@sCb=){;@OV6`p3auYxy))}k;fxdoXV%527AB7O7Mp1LMS4UT`JLuR z`;4yR%(HpFTW@7N*UEnYHyB&A85oHNMDS&Y0JL zi!{)agxE{`WZ~)%o#AQ`cA4a0Z|(E$JZ4^#GPs{f(3nUf(u}wO z(w!KJ_=2evp|({mM7l=Gn*X)iDuS!z$d0Qs+=^@|f5XEl?G=*hweAX^&;oL#yGxJQ2O8Gl-9@Zlq->@ySYd_n)xi-DGU z%O#Wjc#b3IPk{m{N;MO5TL67)<1Uef$rB%dL4t%!OvDTRE%w<&%uk7 zX1J78X9|VrC7{g@%HA%OJQWp}eis{h0r&YU-qsT0{yP2oT<_B(P$;FQ)ubzv8}dg4@tI<-|K*{&Fg;ZY@?==yH9XS z3$d9N+hm(R4&eX%*ocH-#&*0~;p^>7lREd?k1j}R82&Q5P@5ySU9g$82Y(}W#gsl! zIQgLLgwg`m8oh#@PIt~%PIT`Fxx{Hjf*kP_`rNg>5d*%9d4C;KIM$G%`K1^0p0}qv zcq{a|n`smGpqIjjGS-00imn+LXym$xZl30aPQo-HL;1Z4l-LK8Q8HE!fmJrf)`xV&Q*R=9DN_K8iT!6xjY}yu+w# z#)z8<=SpFhla>V{cBjIbz@39EMWX2L0FyA0aQq`?9d?hxg+SmCH~2Wji^F~cN|q1h z%7?OxaBdsYMk*pB!SioFfl*20@y6-N6l&&Hu zMRxvzlnBR^O~XMfP0b-QJ@@5*8YKgY@m$YrLIb)=k>G!gLagqhAo#_t!~fzwS=pt< zgBFj%E#^RJ8s_Fg@&6A0EA7+jE+~SZpb;A3x$2@5W-X`}Nww&)N)y zrgj~H2AHtx3rV%jSa1-w!v$b9ug_vlFk^j!2Q_P%c`u*F< z-HuEthV1)x+S}ygMUDv!JE{w8L$*h&`mm4xJJ?}eg>~%y4EkzY6f(B3vsCNH?6N-Dbouj- zNBbWpV3wbh8O|>I?Z*q>Qt_#5kqBzlBRK6@|oN%PsI z(gFL4n4G?&=Tg1wtKUNe!arv3RR;xjD`WY?L5t7pql1QaH|v2}c@=RI3V7n|JB3kC z9#lz%T=6yove37$ij1<2T;}uYeQt|biW+PRV+mXg{CEa)xWxeOG)Qt@{%%VhwWX-8W}eWVOCyanRuy83=WTv2_T4Xcg-5{C-0+hC2l_gW%3;6+=Ptj4PUEA_9YIxz zP*lq9fawYUjSVsDaMb)lz`?GFMLbb?CBo!z)C#q*hAw_~0ulQVQJZHN=txUJKbjxn zHJ7CeBl+kk)+RH{iAz{y3UimK*}^Rr0qf?QsacMFLq>|#J9Aww$I7^5!#kF$9PZiv zm-}|lFq$H+sV;T@wzj_bn)2IPdj7HanhAc5L;^!`l>-90(6%Ze6ctSvBC@(%zj%4= zogTn!^Ru+mt$}mO+XG@G01g@Fz>k?u=izp4(I2@7t&@lW|^=wne+VehTjCk%0~ek&XqSTnvr;04DefpZ=|cr5ftKywc67jvgHCAzpd|6NKDQdtus zO9$QBc*oLWwiSJvgWW&v4XWb;I}h!iX|3v|hJ;VFz!qJbRmKJM?%NB9+;NKy36Y*P z0}b`sXoM}8|7uz%*6VAx=6AoqLWSty#Bc8M>eNta;)za;FZ>|je`3d;RV+59i^pFP zCuW*g%~yChQ&>+EpDUlAc2p`3X=zz!l05 zW<(&LjBL%~mlA+u@;zXViR2-%6ZnVfFEF1V#aLP1Cmz!*e^w|+o!ob{rimh|6W0vh zF_RM|xjHGZ9BE`s%XR^D7??RQTJw|k#|13QG-W}LP;94xSYGUgGenB9sGJVfkQS4^ zg4hJN@2EgUoX9ymOLZyaG1G#?aUD{#EJO-LyBr!YHvo+lSb;Xhm`@$*wrGkf)Q0jH z?*}ZXksk)u;Y8EwYwtW0<_NXbOi{o9tI~E8fE78$o$?=!-svAnV3ttEctrA405k$4 zv4AHc58xx7s;P|iSY=2T=C)X!Ak=oUC{Cn#cLJ=`alHc;>TtUn?+mB60_$|fHU2MQ zhYJ-^$ANO`9>Dmny#R^Q_gi~3)|TeBF|n)Fs+Zcfv7U?7(qQRj9+&j6dq2g+EF-;F z6AXQ}8Pm%LBcnLnqgp37z8C%SUU9pYCVolIEqX?q!uc(N!v=n9VlG^vGnwx=YXlzX z0d4Z)Rsk;DxKoX|@TC_Cz4zIukN)&~0C*ZP4uoUo`0&8#AZD3IB_vD}J_k0y1u7i4 zG7$y*^sx+JNZ_|VcwU-lXGcMDV-5X*b41c$M_;oDe~W}O`e&^p%LqdXXxbWlSOy#s zV*oIub3m>RJXb&ebJ@V(>Q;`2s0seagWNX*@8{+iAR7lfYY)@;t|CHTqiv4Q-AWqZ z^nIe=^g$cw7fR_K@8l`L^s*I4>9hLCYeHAyP?m;mALmbmJsG1hd2QkYnVRJFuR@r> zlO84yqMHSHK`I;V@`)!?V^fS(Hk1Gqw*ePF2hE&#lLSUL4Qjus-%MkjL+d&RY>|7{JLhKx%vnjjlqH-S;d>$`8-(E_ z%=f_i?RpZ1y5T|(zq5?X#4d*+RJaRC{~avhl9#b(bxS#gNY;Y8532vk8SMx}xSXBp z-(2d=G7@0y=Rrv;6M|GGlMQC&=+XRhrii>$zAZCwUu5<9P-bDjc1szDvC4b@o62vv zLo@4-9TaRxupaT7RYrn!ZDb8|w3xKK;$2X3_2D&A(i(V@I3-W*H!_fL3%zsgl;C7Y zw_XzPQ=|CQ*B#HJ!vV?9LEQAWkP!*9?VCkv-kqF*-=O)i12Ji!<7@D+PrcA75Uy0SA{VenV5g6o9@3>xr)J9nh6qBo&f z=K7X?LoJuKW*L)oCNFrxpEuqT)(kU1&ph2yNxqzU8uONucD&MY_i{j;dA^{OM*xDX zP*+xBJ6#~qA)-x}rL4em17+5ZR|M7z5uayGmyoO3xGV2d&s<|buUr?4y`J%*?!Z>w zXLDMzSp(c!hZv&Scf@-{_9Dw876O3esQ}~e4eyA%O1RKcd+c|Lew!;!A5G#N1IDu6 z^@zq%fZi)5L4n`%F7~;6KJ&bSDAy4~ZnRcFIPHwOO5nU| zbrA?f-Qgta!@Rx+yBtewcV(CReBXXUXdAlm_G=^}dukHmj_m-0*+q~GM(TEc}^v?v1eUW^|5e#9ALKt<9 zE+!PetQ^B$RqeO74kQ8eqRABPxx!N=1O3rAbirKYNj;tcX;#ZsM?bhNIY<#Nh5PIX-je#cLS!LD1yI*Ik|n2^ZzncX1W)BPQX0 zZ4Y@kQhw8@iNR{^xg>594GXVK5MV00T;{?$AYt}Mp`lk1l?2!I6_SfldR3Jy|6M@rU(6(XdNqrRmK%%WHwfynG}smYihGy1{o z60F2v#K){MJO_JP(C7LGB@&sP@{N%#ses+*=XTMiP_&k}+r1UhVhQNu*(Rb&0m^_Q z9k-xj9$%ZQo!7(NhxWN9n~sB2RqU-0P#VMZ8VL6P_PAR8EOmg@E^6C;fFTvP6$ZL^ zaVa&G+NIYW5j@Ga!y=AE9SMiuMlACScMVO%4q-i4rZSRb?2J+G4mv_Tm&L1L*ni8w zI&tTAddCDNro|%;E%$Tue9kG#8>)y#ghSwZuif&GvI4#n#J!~p60PtFK zLnU$b#76TcLMq`fynuw`geG!F zD|<~IKuGT#f{PBQ@T;T<7n|(@X;=WkcB@p2!q7Q2>IBz3*G~ax;eqmHf;PoE(s~F9 zMH=L$%b^Opv%(FfNirOK6nuS}V< z5dqgdH2(HY_Q3B~2i)0k&@n=9d|WX2!wPoZfadG)7vr5t?aStgR9&v&NFiXZOQYBK zD<`l?2tQFG-XFuwpg~)gwkU7tA}A5{)qCG$xz+}geFZL^SUu^Gdbd|!6afQ*RbYU? z<-<2qPC&Jdk_&*T3c>^~cYdiDpo*YKYZUnDdIKUHd_WYrhD)l^2@sXn%riI)p0Rg3 ztj2(%shGZjCK9~OB`^U+1QcQZ`gy01uDYEM>EXyaoe0nvDl0{Spm&`@!ux3&4As&1LqO5Rrx5c#W7%p=s0wJK0lto3K@<~-FW~PE zNuge_J*Z;9*G7?QM77|ffslB+lYB@{PN4(UprRX_)^&m+pmdXmCqTILT{iHdr96AC zD@w$_#`4&`K2FvB&#}&bD>T&E}f) zUQOkiH0IXu6+0MHk(9yYnk4iD!vWE_&FZ6yQT@n1%hmc+&_x!jb5O29UvUq`ev+%D z%;qn4sPR`~6`3t|LMU27tSz=Kq$oF_GLfs5zA}L?QmIWAE_S%ViOWS5nGH|hM}?NF z&Dmc>Ciunal5|Q82nj*d)Dp#tRKP$s>z#&5=DZCns6%umHa`gJP(n zrAb#EVggOX^CX2+9){@1^MIFDV6(pw0Sk`s^MAD9lF5t}@Sffy3?Ot^>bpiSTDpW! z&jNxtR?QLoD#`wlYtn!IxM1u;V}(7o158?`l%?ks0gXt?ri}zwL^NxZb2jiMzHmZ+ z{z2^h>n4Qw;=w%~Mg+9vV4m1}|H0K9DUmx(6tvv1J%adR2P(Wo66pbTFCXx=W{&O% zCi*KeGg=KRs)ZUu1jXg-yBk7W5xfuuo_?~Y>`z>=aPsRL)Js79njRt{%!yVwRwTq* z_i~NWTqhgLgFDN{0GOtFHv!sJhthn-76HOb0Iu`}G+NLG?+IJS@DDwo_lxjvdr{Eo zI5~2QphX*l*5T`VtO<1jQoHFDWHPFRc{by%uulvvWL!i&-Ur`v@g%*24PU?VV5Jkz z9>r6d2c24=!)s&~{nBYq@eT5%i(;~(mz5)lhCmN5;Z08|7?g>NGNIX_eQvbAjI$hQ zjEfq{iCwU8uzqJ1Sc=m+qmzSG(rI24oN7V3c@>;$MpEsfogysm39kszQx*IAf^Hm~ zuyIc}MND0ZdqPOlCUyeREMl!0G^+Kn>gbsEZI6&W7wHfLQr=l6=%u4~-HoXry}ZEU zt7n!sZ0w5)Sj;&^6qyx$V<1wHPslh02H{(r55bNm6^4$7M(5WX7-;`OO@)f|*#TrV zH)ZbK&!_p3UIfQ9(Efilf6?o;{^~5gjBkd0Y|BrV3yWJqdh`yl3@nKJ*6@(;^UIgZ z5%bDTmHV@^g_2eNJNZt7Jhz|dbGQ$|xFag8^P5m-W_)o&Lz6EFSzt*a#uOIYmgg6A7<)tGmzR$^RUeDN)EeGK(l+^>_$eN(Ip1`m zzNa;Lj%U3}!*}5^einRWwEpi+rc#^kDVXOK?z3hj&ia(g)c4TGa5SQPq7g@&cWPTG zoY28JZ}Xtt?s^2l2gda zKH`=dh{Z~H^dpiSVbO(~C&oZ352eHKe`W?oe_`T#PalA>w=Whj}Je{Kb zh>~Xhu7e-*VxHq{i9H;(1`R7cVh`%k3Tu?zQ9x7Is!>3A!2AKba4> zM!4915UeW?O>T9J-z``>uWe7;k@q0C{ia|cylWVVvmhnc;*dZDdyhl@%l=B9_M0pK z|0dGHK6e0*=E=oO-_AaFn7|{~4(IIo_l<4mwGy!NYz)^#76OXjZjRVi`vA1XA_pT%Ae>$(QoAmhV8jMbt~VWmpb?0|ZDyN$v0#-5SoVAN(FG z)~rz84z{5OFw_9Xw@)M#+Xyo_LtjBs^I#EW?8*86q+f0w zHJ75Jx5JgRX&hitBH)fR%`s`Hy;^Vg`jr9i4@6%#Z)Njj9YV+(=6lV$_IuIJ)W;pc z_lFiZq?GkJ(0Z$AyWHC9e(DP;L14PWVd%J7+GfF7Jn~p@f<{!o2`l(IDYzaPZZaSS zhHU=(7LdKA*PWnmP5R^um8#QyG~w(TeII9`k0~Bzp|>e|N>Kac1C^-$7JMx?;P!K3 z-lmwDo*?dJ%G!{nzNH6b3-1K+r=ojWju@$guo;bg<-2lL>#4n zl`ryQ9m~V<`^9=d^->~FKlq_rtQ)0h{S52(3(HQa6DbOxSUMDHWV8q+oP6#Y&XuBo zoN*%I?f0G1z}%^S16~IF@~1$`QB=+k^u+!g5)Tb(1|VvJV0%(>3}kI6$yH)g#q=L= z5T_OV$7Rd?2ly%p$<<>2exXDsq4Jp$#JtLMnCvv0muVq4Mo^#=TLPO6iN52z%?=He zX(bPW*}*5V_I?r+Rm=2}g^(cEvZF_UnM#RH;seRiBaM8wqlc8JRbDUQ)xZMI6@B1b ziL4JUi2Pw+@nErFi>mUSw3;kkNFMv}HOe<`t-X?p`?BVCeajelEmtP?aeMD{#r}{i z0VHrK`F`^F8Vj)#O;S zlCykaH*@sO_MM2`o9ZWgV--D%5PXTK`#u&ET;K|UCe42&JTnbk)}}AEATMtI+25td z9t(Q#v#ta@Y=v#b3>8jTce)6?>M28B+%IwMDRO110xOy4#*0{A>8o3knc! z!1YRXWNk?SB5+YPW#|)wtEoKZHv>z+t>>f^@Jej8*L(GIT6%&3a)Q2Pd`#Cf9a*2O zo6pEM${>%KxtCZ3D`PvN08z+pKnXU3lTr-(RXXK1-316)STO1$%?;;V@~??04#Xrp zY3LJkzYb@+Ggjh9O+w%6-&mCm8jsB>aqZ3Om(8-6-`cU`Kq$?MWid0iva#Yoim`Hp z-ZT)=nXm4H8w#V^m3jozcBsNtrc|wGqThyc6#u?xN7idWn(Um@wb~{Xe>)biXeeSz z$w9mr zNuyt!<)*~eG_1Q4gP%dk$zSVyQqccXUGzkCiQY6h1NQxyoHBKszb6LmH)>r92WAa^khT75=ZiVAflK{g`{d7GuMb{q@XdW-ZJhFL3&4->pE(x2k2s`{Z9_=GCNKoUW8uHif0d+&pZ| zOYPBR;JpLKeH}gI7C-l=#90V`T$SNZ^+Atb`%>JDMTk4#N3&(W zoaOtAiaQv@HLf9;0A2+I>bXUdENWma!FEDUh7a==_1stSPDmaj$Lgzl&qhDo2}_;VAFi zi|J+7lf*vZR#xNhQSvP%3o$inHuX&d_yEfHq9oRujM~mN08}H|)>-$#5!*V;06v4# zth{E|zRb(G*IRc)RizB);8NkEPlXX@CYTd#oD*HD#nu5<)j6n0kE8Xz zu;KL}Z;ORZ>-6S@xbq0c7`cz&#Fx&SG^u;ZA_P27@_Koe@2Y6t^3)y)IrP*YF{Q6X zGO5VfqQktFdszn(^CBJUOz{S%TO};zJBs{%+RkvWd(X?T2M{KJWMG!;xb7H$!C+%f z_$ADfFPvy-b4Cw$6JdP~ETOG-9@Ga*fk@pf9yYVDu-;VJ{oKvXH6jG1w^dsV>kq>< za)-;cRT~WFPsKH|w|=7XJ4dUUHOObBFVf2t92WWlDNSnD>#bSfwGWHlHK9;j8%*&W z$==nt<3K&zz+7@1#hED(2h{w#kxTwSGGB#OLZP78G%F?s#Ha@Y_A}(rc<4^pNSev1@ZZAZOf9)+*Wvtj(@?c%q*iTW9?ny) zNj2lN37g4A3DGH?o7a8?K1&};Z|MOn+miJb)MycWM0LJIt5rg|ts!rDV(M#2$tf%s z97Gj#r#UJmk2aAt6O2*_5u<|6R*hAbjh)TzJ1WPxrhJ(H;|+B{zqgCdu$L2?$UxWr z2Pm;X2?YwRu7=0Er}_FEQGZn04IrYK?sIxlDF3umo&MgKarUcs|KFi zrPIMzAi#+rjL~md#PwyrnuG~H7v1)Hjmn#-GivR}7CS(irO2V4 zdU4AaBjHtOi$tDMno^$e+=2nf$;w+0WdqEPaH&_(h$AIzVI1> zXEK3KV1gWk{-^rS6o-l^e*ceQuz{-g(hPDJf5IsU8U1%*-ASgl)+{t^u)-?KTPRep z0Y-Hj=O6c!NQM_aXTQuwH$JbHps9nASMO5H(%OA8uH(v6ECs7urje!u)&1mJ$5k|k z40cexD_Wb1!Iw!RT|C?K3EJFQ4iOs6;ebXu>ijdDORyWAk&HXufmfRAu)GN(hgY6z zx*Sa`WQE;ujL9XlSFUQhLh7j3tH*FmZ~|t>ED-xlzeB2hSG2brHuEH&47HOnwyP~z z08>m`Q!o}bucDlg-(PM)2@#K<;-o|*48(2qDwmKJ;=&$?0JLMCM%u&@QoWw52)-A$ zV-9H5+c4Nc(=G+B{z7p*R~|+%h}qgz>==v@T@_cJKyDV&Wy#zNKgpJoY&Td#$1X+M zuL%`BXE8%m8NXrq;8EO)V@qeT$y%_w7aC~_MY}?Q7fK2pfEG)Qet4xN(kl>p%!;b= z(*Obu^GsLUQD|Kj+TCnY1wbk_VV;i`%KhB!Pv*PYIPOffHPgsG2&Tz@klt4K+KTcq z?Eg++YXddyAtq!(9)20(!o#gL(|eJxv6rgoAS@s^*s26Dvw)wa&hiJYdT|z@X0dzu zuCbQ{e0~1pICezPL)wux?LycE4=|2JuQk9=9OdM7nZ4x88OX`~m~z@o<+0`dUs^Q2 z@blDJ|6Y&wwCdm;ypFWT?q-8^k+OdOiJ$m?U6>Y6{<7TI&E+3U^$(=6HD z8NeFTEmyE7igfowX_Y4nb%pWcI5VaD$1u5n@C|-|v778pQYVqYlRwyE*f}K*hc;^3 z4M6gi;L<9B(|>))bN_`{#7X@YG;ID)5-vsowxso<(o9WUp=lZ+2otJlDxL+>r~6*K zk95=iPGR!RDQP38%TwjF^ojGWB)9Y%p~DS)wSls~*i z6w27V6Jf=!j>F&Ml~=F!Y(8;Ww~N1MBs8>(t?*v#k0Wg-jV>?{ZQn+(zXzU?-lGRS zQ(3J4mEw{f_2E>rM7rmt)EInK-+J?oFigi7=ep!_-g3SQ=apU~JHv0_MTc@lWygOf z+<(&?Y2-zL@}wH-c@4UxFyToT9DQv!LLOhga-zl?m3Vq%Pmagox?i!=z`vB(n112d zYV0VmeGWti%@{i);z56~o5QdsyEs(f+0xjU9(3yw_m(cWMl1*CNt+OEL3^+RzFID{ zF)ixe^Wm{hvndDGN&1LQ;v-m^EyA)D$nwyJ7z_8v_R+Sgh z>hUu)mkfzTL{G0}R&S1IxcFOY+{?VxRb7{VeE+ZZJiMXeea@~I`$BEO)3j+1*IN6% z^svdH$M3a1pK2Kq{cb%OO@N5@q@7uP^NM(EAk4F+fTT+S^W zH##ZN8ASALS8K7H@P@$hkZBv|9zi$tRN7HtwVwIjLovgDMF*jOL{RsC#4^=?#q58r zW&L1lV$U&2&2e{ROpa8i(gtUWOBo|8r8T@sjjG0;jJEYtZ+d$cd9Q;btN%yfv}7$2 z?Wy$Myc7_lJPnAU$qB@0cK~8|oH~8xI7f1(lg(-t@H?~V3;1&^xaBdP(eJGBqggI= zefMzK3F!5C)mV8M%C@8OzLHY#W%J+b5-PzLwYkUHI6@EFvv2JMLGDJRa~MqKpK;6LCf}V zVoev8Be(7Ej+7eOL{{2GR>!H-?+cN1?`@?9YlAR#HkkfMkMNOjU+}19kexZYafxR% ztY2f6NmvPxFiy8i7#|{rY247stGEd0Dn1FPA&c+iHoK5gMMa%Sh#n(KzL@M}HFFFn z4E$_&kKmS(_~~dLOc&*Ib_A8(lOM@B&3YmHoiv2gWr{9}(t$@i2ZN~>R~<2S0NL@z zO_fl5Wwu%<2**0$g;+0;(n6e|brUWJ69YaU zj8N*Fij*R7W`tJSLmI`I%uiJ*x>IH_AZCWtSaMwPVTuO#kt75<&PL`Cw4!fRbESUe z`=iC}IZHz+9;Qq!c0={dq^=Nr*+yx8iliaFnfR@3#Go~cCXP@l* zSnREyg}9o>5}YUT^E z$}zTk8AG?7V;`k#`!2cL)b}+G*}+*DjmKG-Gj`_HJw}c3!`IPJrKZu)T0PA2Yq9#I z%YEajo_)ih@$rXqb3Eg3J8uHSET1E8NGq2!MHfnvt_RGKOf0sM?#U>h^EdBIkf>t( zE#xuFZ9Od@Jl+YT*wKS7)ll4C(1YSex-Ks@W4S!g^|#)V%VE*&x15ohA<=;53cML3 zZ%>oHWW}jX)}?c+4x*YLKUV)E{P++|;mSXRGW~xnHZ>mtE!%&w(E6$T7ueUH#!QfT zEDfrpH1pEU+UUi_xqk)q$odcAm-2_Dbe=H_k4mmAYzhH5XV}5}0+OVFxoLt<*JagGO5LHlS0= z+~OMdGKE*eIRJ3p!N}ZTW$aegxrQCLODd^{fUZ7-AJ9=bS{DPp;)LP1unl{kdm7V0 z<^_V-7MM0%;)td0fOubmasb@C)|MF%Pmv$z4AZK03>|o)r&fN`dkMfz-L2aUJBZLd zYUFtQnJoG(5&I+%yo#BM!Qt4~T5&g*X}tK*Jd>lEn_#t}%ERI)*hkx?Hu ze`r3v(PoX=L)n*!E6k|-h@YlnWGuV5^#tL8%x_P#Gw{^kJ_LgCf|fCZS+5Cq)EayX zfBw=i2is$e4>E5T#&$xqkz9dj=nk$H^CJy8%2Cx6Vv8L3FI7=E6&%T`6gSY9545Zn z%o<*#gZZ2&90aPtz@vxa8_0Zf0SDd5dr(zld|Uz>5%EUT)lo~uJ6Y2el5iln znvzBu`rW&Ll12bo=vUAC7M)Wh>Zi>hupJMVa6Xn}WUA6AlhD)xNX+ z=Hw^At!v~Zne{8wQ*CSpoA(Z-LViMCxS$uigY5vgID@xEw!#2uU!6=d3ZnQ8F@TI z>E(V8RsAyHc%{u*@HoUO?b%kt`hDcFY{-h+ns?k%d2E|?*ma0r-?@wTI_J%~hLGDo zM%tH%j4NwHO{+nwvB@e;*o9%6NLf$e{L6e}0V@0bAHw}~8I+)LIwu3FhZN>bm#zD& zq3>!1OzMgw&ctZ8Lw*6rLF=5-?mYK9Jt?G{E;?>(3HW8#BZ_QKd*ULIL6g*j9f+x^mTL!D;>uI3Ui#|}!%Enb8J zl8~OK5bh;DE=MWck!MH|N3=0j9Xo_*_5TEq`V};ivJi(@b{)qz>WKK~IQANP-r1o1 zvCQ}HUNd}`y#~~*@|H6rPxYJ{3BtUyzWnto?@I=tt^qz0j;@#Mip9izHXl{r8am$157Eq5YN#81MY%A;68saQHdG2*(;2iQ4{Sop{fGW9%%T>S(gH z4Z+=lyNBTJ65Jt3kl-!}PH=a(V8JD5a0u@1?(XjHf1i9a_kJ_~oxAQ@)wOHC`>9>k zas;|hw_0Mkbz&d2c6OzL8P5Fr`reV}$!L&7R@@^7?J+~e#K~Q0*3sD)qiQnL zzKM&8bakc`3_S5htueHT zi;Hc|LM;Y6CR{cx1hS!y`ByJC!5ZnYzjw_=N@vqf*A!{Pi>9u_nnt~eb1PqP7rEU&uy#3z{Vi+ zT%)xYq}YiPZC0f^h$WG3)TWDkjfn>DAzE>(`C z(aQhgQ73O&xl^94ddrAT-r8rUNyETW>Iu97KHkd`m*$`3w{mLbCukd`w-jQQDvxRy zHC^aXJa93f6AWZuv!P?djgV>O6ZB?p$3JIpKYqfZFFV4f*G;BFcB+hfG-td&=eh3W zU`GBLHqtqXktWV0k1$CNm=U;1R*(lfDFX7KCzU}S)TANEgP61jd2c5DKpxm+9ANTZ z_s8YIMRhm#=jF+9s9*Ni0b}~SzYm!Fr~Pxl>^|<_gJO^S;0ok8$Avm`$a>YgSHbyc z;Ww%2=WM>?>60Sq;!F$nt^<>>;%+ZU;5q#HyL=Gui>M=Jzi5+Ad zwP>W?MQ|UQY&sgZZ@&nc1e1&O7A#d%2toT6cMN$F-#ZW_7D+NJ_SIJq32TR&`Xf|L zkOV^PV?Fu`aw@wSi~wg1#HsBf<<5Xrk6O33Z~Pw1$|R3gzPm$W$iZa|D`Vj6G(7zh zIi6^$OUNqu&2KL!g*)96lMWBudW8~;4i9d?Sao3?x zW!QY3#~7tSb}y$a?KwOuc}!B5_t9k|-RgncT`NH6VcC@O1ix=L<{Uc>=iKE;pkcFc z@NQ*-p`x~SFshPUqIlboYmLF3e7C+K^%m?1UAv(%Rc%(=;MBsYE+}Scbk|b^qX{Abddvgg5^L;XM-|T+JMm{bw~OyTTuw3WPhv{=p?dIDak( zhyH`#nr)n$5z6rqdE|uj=9sgcJ3E9^5k-9)@7f%v{o%}qCx#IvkqCm&0O&ajfVe?W zAOQUy>)Nz61H4o`Al5665!G7{^s}`ANd$l-ApuD9Ajugd5rHU>bPtleK@tgwk_05& z2|x-4Nn{`jByoeJXh0&M03>QDK>7$sSt+PdL1w~yM4@o!&V7`C5Dy57fbbp=Bq;zP z3J|yeVE`5&$N(V(5J&*Q0uUrg0l^OtU;zOhL=Xdl2Wphl_qLNARKDOUkzFmzXWiQzU7Snzhd)|mB9*@X}9SD*Gpeh;wVgqH$1E5|IlmtL0N&ut@f}{aR83erpWy%GhL=Y59 zMl{+u=xFZ{MK%&S^Ra8b-jldgLIh21XK}Uj+6;Q5z_~b-%c66?id!e1%qsXcHyD3| zl4c{&StPVhKMu#J2}_I*^;8rMrOQ&L3%JT1{amQ2T$B&hnii0Xr2#1&{k%;~GxNAh zLxN(LVdBkKYI$xlt3KVDqpoprie-j^H>)9+;gWgUxyJMIsYap%b#jB1X+_@AAqW*mxep0L(ax|f!!yT_4@Q#Zh& ze`%?`dtCWXj@wZ;3DN53ClBlM+ve`oTP!a@^`~dO^IN~}Rh0kijHh>P!i2RF)4h0> z-#xakoh}dk&kLa-Hi;Hzfg305e=oO^?~O+dP%o`a{#qDVgIyAFyP5_O4OWbynNL~# zlALgYUg+CRNsEX3tLR#Yv&gSwEG*E*0!{* zY%WTfxLnk5Qk!Uj?3h4Lcpw}Aggbz+{(pxz%kTmZ$G=mA!vmuS0Hb#RqkrIhbh5Hy zI{)`2@-`TL772aj{5W;Jp*@>dGOJ5s7dq@@=Wk0Yps##p)Z&D7*hPG^%;iOJ0XqF>7nM#*_y*eNghU-Z>J}KisXaRk<3~uZNI3t=}knF&ac)*arjB0=xX#&HP0O;SsFwNhc-T#gP zFVVkVue^VM@$wqJHXqWVw^m6$jgX!5hIIw$Nb|L@-mEr`WZ(0K?VQs6XstDSS;@Y4 z104FloH?&k*RaD=`qI|gx|fxW2e+`pKixpypV-+ceTP>$?CS@N7m4EQO|EeU_Yz7< z#Dwom>Pj7YQgD8N({tm=sqX)(hxXzpb|(@-S;6*S9t!mOsp7jCu;#9jnS~rD0 z1bY2r0n`lKsn$`%gH==L>r+<0huh>2&yPcM{y_WnHn{?B)$|XOa^_*u2SZdue||R< zjp7cp1z5KrGH@?^Mv?B@c0mk2p6@6UQu}UT;F`UN$XR_B>D|&8s=JjLtNr^JPRtYR3jL{VmL=@@eDz-%vpy^Z#{0sZVfz z0%r90rHPdd@)Q_~7nsG!80sIlI?$$CQ!sM!rDGQFz~3p5XFV-T-r2MOV+HrXKL}6O zpdYYKJz-EQxOl!!z#N;iNS&?CU{`=Oy!~I@Kb`-TYGDJ`7Y|rpV9O-}on?TD`~)_~ z1h6^Gfz9!^um}?9#s05oJb(@Ws4;-D0GWUpl>w`x24tcIGW{(~WWjX)|DnL3vjA!d zpfy0I1t8N`AQK0W37BTt-@;>GLVEulH3U#*Hpo?AcUc32ic~#QFDH(PR6n;C)w&4X ze+DD^am0UC_;dWr ztqRKRh)7CvJ`bSbounVE0v+nzirjz>`zM7f$KVmafq&=K!mup>!9}7moQPYM*&FX3 zn{#{GQ zP!pk?UH6iaF+{Vg)Us)~A8A4GPc=M(teNBXE&LJ!c*0Bwtnb?ChDe~QnEbGYIuH#2 zp#UVnR54k~&H9i4S}34NcF+xF!U51bKqvx)K9GO_2uy%5a5j6eH|H&mz~U72G`K|g zz-aFT+cvbE1;*+W1Ua-sh<8@IJ7r!E&QZl{q_@K}=96qM1ZyIQBhADrV*R6>Q>6Mo zl(*STRl?SRX8$aEdVza-3rY0c{BykS`Xy^wBC+`}6%AV3$?)8UZpR_b}D z%lKybXM(D1P?ZZ*sT$A>qzAEj@3KG@=^>~Esz{GOEl@>z3~GTY(i2eY1l@@-YYnJK z*Fh~%MY;iMfhy8XP;0aDzG&zdftK)qaVZ3SA~#Hz)`K7ZAY!t4#}NEDOO1u#Hzr_itlp&HtX_Y$nsM87AervXVB6_%G9iKaza8=g*JMI~ z4h9L(fItAO5E~NWha_PB`oR4Cf%#*A<_`!eARzz{uua+(HQuVh83XGurMq(y?FFpE ztMLgkIL?Wu!$%tenE1fc?kCwda2qTL6a|A0RKJFfkbRQ5Dc_pxe2f42@%va(p^w~d z!SGty|5}39hJ0H&{Qg;v7n9molcsSUOcU_%SlQW3EX;xAUBx56k@Tt~{zz;bc>gDm0}80)l0z;hMkpFa zjCJ5;&ERE?;AO4gWwqmw?ll|vlibFl`7X$a!x}K+lA3{pYe1L)1YtnfYXXGJN;HdK zXqxKeQ<~&cg=jpQC&YtN#gx^C95;T@bqqguab)2tgxBoe$O7cfwhWHZQ z-E)X?TO;YF979lQ1~NaNlGW6+$A-$OP1^5d#93NTFY!?@}GK`-W9g3`K<=A9&A)0e+`vRt<u3tx@`lL%c51gKBZY-IY-iiswZrUovkgXAwz*btKY|08W1jtQFK)_5Uo? zvO>%ygChd$JAm~ESX5z2gAcHzAyB0MEx4Y&{ead+AxcW|Y!a3UtA{Ru8cWn91e&BE zC9q1?p5j1zwPlEi7VnOeStat*Mz8Ib#obE!=wj5JIm_s5wbenDsCL};6^@SpE&46? zlS`$`#tZjXf1=XcC(qst!Ls|^U8Iu7hbB4D#WDRb0_ol1f}`siiVrU?8<)UUFrA+S zfm2(TcU_kRrDNC6L4(@g1j|07sO22JFxUzbzjiv3)O)SnQqSOeOkeQSx^~6KJo3J{ zS$=WmcYZG6giD8e!fUtpX%#yYUYmsju6jZ8<@H&msKdTngk*#&4GYG@*MoRLZnyL~ zyizyB_|mpYc_+Mfiq?dA_Xv3kSvr`C*Btq#R3;fO#TcSAESV?nW_DXPP3rN`H*X~O z*-=W_bmFCTxX?Mxo%Abxr!ged?Y?_UnS2Fn3`{r;P5E0cZ||{KyoYE<9;1^ z;cy*kZT$dz|5=Tm8**VduxG{JGU4dkx1C&fy-KjY+Nf3lp0i>l{*ZGEHm94+oSyRU zMJI{*9|gE+Ve}qW0j^)bpCZ?EwwUbvig3)Se^)`KmH{^kxi8adkwLC&qndh0I4d~^98tB!8TK|xhzr@ zm93!K+n{-0mV(Y-KiPqkMs=++ORJP8#AXuhq!2K?kNm#kQNuWR{2ZocS988uezNtB<;6bd76( z`X#vCHc8g$;K%0MKgB^*cyNOTT%Y#wxP&O(hw%&BntbXd^kyk`G-SOi%IVT?eL`g~ zSr*I$iUhy2HQS)STeae_pcWV5+JQ|Tw?ZUYy%M%LJf4E(EqcK)Ex+)3@87I~%htXk z>oq(({WoGJJB`Tw&lnNQmuS`DXi#Tno?ZQJBLJ^Lz0IZv7+o zgm-ljHHRvm@^Th*l#`?Sn$U%zwi<*;u!_>BtM9jl(zofm{|Igiqi`#MggbMvO5Lt> z`Ge8&og1$a|MIfnmf~Tef_sI#@Ye=JCsAFU^d;oi7+$-jtOOzOyy~^+9DhwgsTOR? zse@*0ID%FO$93E{ypYV&`XstI+ zdzORsCTX@h#J7#3-OAJcW@;P9m`$A4xdf9?)8a4uRu97kJ##?ILC0MA$#h;9<<6?c zhQRK-VzK>!_5_%O+v)NrnQf5OR{HD!L2%rB9~{mtT`o+x29r!ODdJyq~5o!hp90r98yf|yf#HH`j!8%v4C6`2` zbOc2V5HUx0IB@N!_ztNV(Q$5CveXm*jI5+0?5%&g`}P!b&Fu7g*J$YD^RKdKW{Kyj zmJR{F1-DalT=prUVrtBNEC84`?k@Xm^>EtPtZzs%8Y)Fp?ky_k@LdG?n028a6gRs{y1 zZ}&d1)1>F&h2@+t=(wQoIjWl1&P!r`kFAlR- zsFORQYIZ`&ot1Bv^qq(*r9eij2D3^CUbQC0$!^oB;yEXChvUhpqX8d&ugenExf}k= z&d}KRkjMH`UN+SY&r;mL!&DwK&680%8K)OyxkTr5hVy$5;8Zy9M;D(AJ^E&A!TlS( z^I%=-+Z+sU*IEH@=Gj80LkOIF)N3mbu+6Egl@b)aRF1hlL-V2eGjW?bRRPecj}B|bZt9JTz4L)@L+d&&o9=gq#Lso|tJ4G6sy$>>TEJCc z$5|7FC)RF1NH09cs}S)@l~IN<+>$O%Sx%g;Pp(w`&_=)%ri;-cS85*Tt0@TeoBC|8 zudc+h(0YGdCQb${!%9#uK3lvWh$x5Q^B6Snuh?;SZ*aw1-?J#D&fC6#&7tDw)@F}n zvY1ewY^EY_0^{?D<9fB?;r->F?v>W&?6r9yb2MKL`=Q&dx{^PTT)LN$=&XBERrh82 z%M&4=c25+OMJ21Uhr9pzr?F`nHP}d=+xz`c2mgu|ZV@`NJA@iVV*Ms`hwA{EYnBb0 zysAk%d;fJ=(|N{T-QDRon(qGmYx|+! z{PoZBL&Vzkex*~P!9yEf4>=h2z;>>Umh1bpXONCi;e=lv_3NKrP9~N~0LQx^<%Kv7 zsi$Xy3JMcW__Pa)ws*UFT1JaAM~AcR>A_;x)X6SK;X!ZDaQ(`Pr&#r(0R$>8q=Jti5+CZaUR7V3uSq z9_)%I?fIocaSc9|G#zh#>5mrpL6__%kf^FbSQy85NSa*|M<3^EdtV^`sZsUFNh;BZ zquoP`+!*8AOPMFn*Cmz?ragsur_M~Ze!fs0%Hr96wontw;$n*RO);NoRdho$wMy4G zBa|j4o3kFV*sAdgBgY62ZbZ+BA&xzbO4l$P0&7$=4Sf44N4BfO_ z26j*_-~N%%=S7Kij>=}KA)HGfAz>PlVz3jxQo_jhsUZM|#o$My1k7^AtfiS`4C z*feSV38()2&1S!87^6I~)yL`4klKxBziCFPnH~h#;tUL@E_~R*+0CNUy@yR4WDUYr zocnc=N*&S9&(lF&iD$8$7H;ot!!h-Pu(C zn!B+0Y@*`;L1}2CB*4!p-9u+{4x!?~H0SMJt&G zSj3rHE14r9&w81s7#DnXhi(Q%PNWlQLQzQ{tO$~O*crJqzJW(A@ACyQj6W-AN8U3(| z;(nbypbj-%6jN#C|b z^uzp++BL_JYnL0d;4{uuN~~^tj6+k&nO<6q!+a^79$t*YOC#xa{li03sR;@E=W8ef zo2zj_=Sv6UbFiI>R?&OC zw%~^;{!eW_;D=6qUwp_RkV~681PJ>#O}k>om%Z-oD`h3TUauRwMzaoywcO&OA){|* zPh<20>RO+o=MXPm9{80!gw}Lh6=dN-iBPT2D7*E=0*ojc%Ak1`qTK& zdD$GB9v$jCJWOKWT}Da5`P{r7M!|acLV(RI9<6_T>)H1UI>+l*q2aiI{c}Znp4jcs z^;dqBu$|t957QRlfX7kYUZ!+Merqu8D39!yHT zvMkNVIqaX489YU2hqilN>*;@(l(vq&P`HB3ApShdA0yaJCY{o%A+Fnxq3#E(0 zIMd|<@M;PPOrC9-SfRrM68)U#8)vjXwY{)W?71Z})kPjZwoO|Tts2^gYp;X$vSjtdyRfBu1 zHp{B(r%TjqnVl7G{?lNpWVhXFI^D40XN3c(Pe|rZYbA*e^BN-ft8UV2f$Y`i{567J z{%E__+WII#TQ4)J{EX9zy|*KWOWGoYt8NMYMb0tj_RXIPvLa9UWx|mi-S4^kZK7Lm ze@ha1KQ#llBtyP;vz94Cvg})R8^s91z`tXRRd0uW*-oTDB~3roo}dlETexrkEI4Z< zjCAgPik|EUuRjsx;HVKs|HNp2g&wj z?ZLb`usCZ3CUvMVdiS<8IvJwu&5<@KM-X4@EuO7Y-(};M8DG9uiSJu@7f&Y`M$-O# zt!}YHn)d6Aqx(=&NFJW2NG!x68LMu}RiD|f?tzo0J?R6=Mhmtb1&roD3j&2&ozkAz zsJ}dfQq@_$yMme3rIdn4e_lb7+nS2ryS0jyLP38%F<097kiFU{mPh&S%B?oIS14<> zv6~1;uxO**w$LPSYFY)<^1YWO%eaqMXGp2(Yxla8>2uX0h6e}DX(W*4yJb- zR#ghUkFKN9+o)_0%?kYvC=s5g*j;&Jd$$7QS#KgdZ*f@|g|Y?f+TRPAUBPgsQ=q`a zc;50!t)T9sSn&=xk1^SI=~=f-&kKCg30 z@`#t}M1LW(dt5@=st51Ga57ZI5TEVlCKYzs9rGp6k>sE1kcdEVd)UXy4n$9K=CcQ= zi^#8fL=L%uypU=C)E8u$C0hNfSt+7If0jp{N4NF?zGBYEsra??49aWPw~kc2vx-xk zyONkNVjh>6G!mHwr&ckLh=B7}V_igXl~1gP(Dz}7Mu{mCbM1geNfNF;E%+<@)(z6L z<=hiZWpE%~tILlm1mTF*bB1KBtRCxhszaLK^AyuL6p73XY9DxJ&r3Ruc9HN^zRnjs zXs?9lGqbZ{sEr}iP0r7nSp}p$)*~2dfjF(CDG`>z=lIiK^novY2o%WvI9`7AGk7tJ z{hk?k7EkRFUt@hqdQWviy*wSn>=1*NBXto?8zcz`g7hP4>5^at&9%BD z(`Az0SnE)|Kv#HOvV^=1eoje*Ge-m*ct8D1wY~#f&DR}x4Ve#zt4&4MS9pNOUMcNA z(^@Y~^{2fm5wt3#QQPR_vma$n5bwdB#_H8mkmhlu7e=Kp8MjLVjXLYQw`YJ zeg~KeuUkwdk`G6#9`RF4sE?ed(fYvb?{SkyNN%iGsPEwnUUx)dt4VK&m!5*TSf^fw zCAyNcZmfTYw8GWA8g?)UAFnb^!&$tx4>R_65ZS%9PZ#Gp_^q_we^*f(d*sZBMu&2J z-BDI5Lr{Hrf2me*k-`Z38A;Xil5!m@Yk;`vnM`UadK*GM^-aT*zbNaCuXSRPW} z#bdtIG`z;k+A%GKX6E2&2Gyq^hE}i0=PR@8=X|Lj-VCj;)iW)Ydl!!i=sCiPtH90o zNF45;cO}b(5(J$eA!3bzUbE@XWgso z^}c6Am8a_{FSgs&*OjQ&+c_`Kqu!j!3};Aw`0w)}s~%TTug-U)M|;4pC|>CzU+g`v zGEVjcpU1rtBwjTLpH2B)!uJj3(rHup)Hz%#zg(EjZ_QWscN)j#4^l-X%B3@A@aYN= z*7jd+$L$VMk0vVorMR@XU%20I-G}yHV#e*#<^`tl=`y>t7+kn_|CdNL%9+8p3UHVG zm&5t#oGvXuhn=|H6oqtafj`dD*8P7MHa4o!-M<&=(cQn7{0d$d0l|Ni7P|}g?XCNP z{>yk^cs>J_t<4p-o755J_#zyKtR3)0|SEvg9>fcQm=W(6ATUpX7UCM3?EQ!%xxHTzZqK@S=%vw zwKuiVH?(9FQBc&7l9w=!`Cy$Qgc@-Af~g=t8S6)wQN$4{{Z&mYqTDD|l)F^FEvMt; zn-k6Ys#8LpQnuZP!6uK(=H8yUaa()jx&5M zr9EYG`E_#AlgpzfU_^Bk$A!XWw05wj!WODDWrIdO)OP6+JvR4KM2#So{G+QVE_O zfy$<&NxSG;yRF_b-I^RB^!B?2l_S4RWnzJ=YZL{gR%}T_X~T4^zEJL#pJJcrvit47 zJym$|ZE*7wOgtqW!ylo{9bJC?Hgr>;+Co08d&W9gix6E+>9#lBkR-&!%^@|d^7+FR zcov7X+d3JC^A{2z9puCBS2xr44QgN;j?vRqUO6KeCLT6kZ8Xy4)&H{pXUi%AsKuQ|&{ zS=3Cx{SBEpuDMc%Tgxg)Q>=b|`|Ph5p0V1*$vV__vd97R)iao2rPZ~@$v&-&yT9J` zl!>jkQp>b#CBhlX{uU6F@L((%cMoHbYtiyjZ*_UBS6|gCnOWr|ZuOAc;fC<)J}OZx zLcg|(Ex%!2K(ulY6n{ijMa0zS+dpE4j$#vA9{=ryHEQ#223i2>Xh73216@ED+YsqD zQ&(ZXcdFR9ak=^ta)*^UTMC7gGYXqt5$`X;?|G0}_+0AysJRfPnc=%KSYxxn(X-O1 z+s1Ddg)Qll=G0yg9H+J)(PH+cKFmcl@oh zgO}wY8zaFgpkdFrS-CHnCHowg+*W5)|SQ>AzSJ)g4 zL?yiNTk@hP3z5O}o)3*gI&qd5jI@Udl;7mse>q?KIeuOJc|}EN)S#ly5IIZki#{FK zB>9@8y1hkgA7j37LL^m9T${M^QR@3#G&x6<*f6sG=HQwFE^vCII>KAWXJ%8l~&U z+~Qj8M!L%l@r7Rn|D_z8YAXw7dH;(i3Z*i>hmo}1-m+WKcgZ(D7fp%DU(4!Pq1h&; zT|U+Oy78&!!jtApw`m(#23p5*x(VGmUdTn^qi9@n?c^dLjXubdO zcC8Dq$9NWv2_>j0i6Lh?8LR1A+PR{oW@>GpYpe#951+YM)n;Ih_p^@0{_W#J7J9Ky zkh|D?U*8(90Ge(T)3Vo+Cw1;S;mO7!Vb4H{fIKncUx8vXMXL!86WM%9zI5NE&m>Yj z!!Nq`6qryr66_zqGY0xe$|eO!z1X=87RfcUhRpq2J=Ff~t$=b(;?@Nk3`_?L3=Ho- z?rR5NC;wFcYQ4yT`f{RcYhUp}now2V*MTF}KxhG(@ONf+Y>CjvzG~Ut1)~YfLN=+{ z=bPn^-(@u`H@^z6&|R!#xH-%I*6J7T3^y;WqC7R8HvJjKGTrP#nixI6w_7-ptEiU< z_4y*1L5=(L+SPpIyRVwl!+~eF-?h?M?db!=UcOyVKm1|PdL7K&)#EkKTX$8P?to8i zr@&2%65-T~QZQv+!);7QgNN=2VnxqJrORWS-J9brx&wr@ zs^5Q#KfHy)W}>gs>fDuOT-(rL%*B~%%v8~8hoa+dNzbx_+hNCGeHUPyzy0_HK}IXW$R7AVz9mIFWI z!g;n`LuVSf`z?CLP(+z*=l4*7A_-6!6P}R=U7rqOMYolTDSYhj#%kRPJ`%*dNMPS2 z_pv1?p1TVaL?CJ*>{dXCuw6kzu_TzH5F{zHb3a2g&WnqUI(NhWrl^~>@YvH%7^Gno z8c7*rdZppit7~z;B)XH%LxA0I{?fAcaPY>{;7uSC0e@7*O7c6*t<(|=B>gRoyMSek zV5nAop2qFv7Va3U%h7q^0Ap6=)esN%EEG?e9g}NAqNfSEJxvLcBKb^yioK zGV?ly>wE0k`7!|r_xYOclqccBCBdm5eH`WVImxv zQb9tBg+Hm7ODRIKhA8F>e)6X`RcELPh%xy5X4O5lLnzO>VIRc2r4H2AH*^T1(ld@C zYin*2VE;1FAvO1rxT7p$@~Eh~F%Mgoe!;tZqZ$X&3Jba%Y+TTTHU*W#lBTLhaKq!oR0)%rEy%D~9bul_&meG197((Z5^_u3FUKN|Dx zd0n!mPfnhRJdH1&UWzRJI$x@~XtoaMDW8l(CO_qg_=Tk2eoE33R=j&xj z_h#HzBIKx^MK;85M%%;Gn-w{#=Mp$epV@0P)Rw%-#X1tmI43`7+TH(pbrL)5~8=PMNQ|h99k6)v)3+xgeu6cMwoCno6=HaAsEUCisI0AGGttcf!r<5w(pym%I>tMX+*I3xp=l zkf)Vh47E!IV}^sWTH?!e^ zpHmdq=2>w{l{c#1ebqXB!s6`kNz-^mnN8CAUAQCBR5>PQK*+6wua1dU*|RRK6kaP@ zOo+&`GUOD7^*cY$Qr2z3%6RB4@o~U+|E{7Txa*AZjpd@o($EwKdVR)OdZDKP@B0eDY69ZS4|2-rUJurTl40<*#|fC`xCrt4=n_Wz1wY>{d|c-qis(Mfp}e_QOxiKU*yB zl^5tqwfXD4jD^Wyi&Fu1_z&+@M!MRB0h&v zGw{$b^@VJf-=h5MmlFztc4H3UuZ}>^|NPz6ME}bd1K_U^;8Sax|Ji;~ytMVPY_4ch zjV4C5UtYOadAsNLQSojpmnm=A@zwSCchUJ@#!3=O6&`6XrzmZnUeU1^w!m-Z`@6`n z!=TF5>B_^jYcxyZoCSz`<39gZ$AWWvRA1i0l{v+_++yf2s*_%4&Zua-a0OQ^`DAH{ zAbpu_V5~|<9q;N&S8F2X*_&q@ud=V*A?o8ADT5WUwvJ8&)*rsyWvrzthF|ne!}7e& zIedj$431vhoMZ5F+A}>gaR;853X#+=4Ld=F!S@YPRRci>5sCZm@O2b->xS{)gPyjr z+9ggIH!@!%?!_(|sAz4Y&rlHs0B+Fs>tIC+!K{r=F+(70{)72{qMRkY5tkj5hl#*>YMx_1}ZgChyk^Wm+n z1$zDymH`#91(^@qn`HYe1Rf->jomXd=L+N9tMaRFmOY+49d4lST$~)>7@_Yrp6>MC z5~gMlKM_2G>4tO?s-8Wpm3THc);Qi@E^h8!T_0|a@3(I=lm1lm_g0)BS0QJ+vhh44 zSIrCR1a3)l7A{Ee>Tl%USi{aE!0mi{fWE-z>f~ul(9GlEAuZ+yE*UAlxkZ({B#v2* z?IR~mt;$RMI%ACa26lo^gETz~afK0k38b$p+u6jL;2yu{Ch2RDXcFc@je$fA!^F7zKQzLsw z6a7)b*~C|Z4~S<}aYfy>2(f6bB;RN8YR_Md7K|0rmsWbaYpNm5uFg++ zBl$)k1y+VI%N(aSUA-c64>&i>ugTpp4HJ;CQ>Z%LMlp_Q3>KAtngeLtNt{*?iM+dxv|39Cbm2Zd5_}x?X%rV z7CCLs>9PrI*UHA&CHnJSdt+C?y^%yi{mDy~ZHwQte}OR6uF^4>uIhn)^2tJL<_?n| z8PO%y@~syn@=?j;&7Q^f@^G`c;?#d+SUWydsd=@z`jSxtqrEc)kwQE4IiHra6{?TW z##QHK3?5T3Xv0+99gprseoBB~(10ni!5Jmg3C^YN3F^C-%v|R-Oy#wPOe>#%qT8LF zMH3%9%dbI+A9BwZ>a6*?>5^Aovy2iRkuB^TD@YUr_?z32qRDuSPLu;)IE)!m-~Cv+ z9womGIa6yfxS2fBX}zSGIW%E2^tRygQNKwKBGqA|L6c3wyJ%A;E4~{8Rei;BtToU$ zF4u(KhA0rSCk=O9#iL=b-dWvgmga*~Z1x{9rQGw8sKS-47*RqGDSOD*lqWA=$QU+w zIUpv{hbKQ93JdtCE#67XD{-E?i8@b1Oig~9srQA$_9f77Ik$&zc_2&9t$Ir>Xl#kr z0?Ak*sXuT>y0;z}p8lanRe6_$Bgm-e+B8I5 zKJeA{(}rJ@(hQS&Zs##2q2BKHXSQArRXwB?M^0~XjqVB|WYZUW#3{heqxWa0LgI3- zF;(>Mp;(&lk3l-21Z~ktt1bq``yYeGkI|AcV>RGVfpktgZs6b#h%3M}PH2h$G%|2<(971gmv zHEQk1E0}F<9L|lSur1e;sxWTG7 z-#oCDay00m=57DVRgGL7;5+nxr_*Kr(UYpd)_=VSKG-s)Lq)vA<2`bDV}b^JQHCg- zt6Yy#7v($DW{A!tx!o~>Z&`S}*+01RT6Y#M9DCcqbG&(rpkHOG&2kyGcm#K3s+&U$ ze1~?Q<#_5p27gyeGg)HX&B4M~DXnByBCN_!c8y>8i8*Hx{$1!-(@(CF@MNQfPBhoV zuCaxYIO;~;MZa{)x9yCZ&)|s24<0PFSHwg8&o75pXdniLB^Y0_%F9;cKjEaMwQIt|9v-4oMo00_VfKOiDIs zEHM`FPH$F%x^4vm4S^5uX_MSsOBKPR!HX;vwNU9vI2=3Ef;+SmOfrISgqoO{+2-fB zAZ;;HnfEv>q390}IF9tSXFE7okNoj{_O_J=R3nMB*gFbKYkwSW2I0_0D>KV?SN_6=O#!S-n8 z14G>b++15gN|SZmxO1i9=oo5Mb`Wg&i}WszWK+$`LIsaXWlRaGgd|0ViMBY@%d71m zi+ad6&a<$ZzA{mn!%a=fp9#q3l;X`^*{$z&J?CZ_f9eW|im~WzK9bTCAF2&pvK23u zrucQ){3a;k%kQDtJ)C-RTa2)QU+$((BAdq$pQL=v`7r(o&9xr&D=FIKw2j*u$u4Wq ztq!hjnJA9VX>)n}L34$?Xt5MkVnJNrUJEM)eG;kVd8yggk34x_PejK`pSRBqwG44k{uuHldSMW#<2kc`yn`mnwgLtz#8pBXL~Oxz6< zHyUMPtY6BJc!pX>l&{Hr8^~WTwL#6#r2dt<8z#o%h|k7{EXj*NZW$5!8qE}3em_$+4&B6Y$2{gk`YV`91^&pg z<+!Tv{sCSkDFGabHH&T-Riv0Bw=GIJ`0*1ew;r1y(>V@SI8x9Tw>86$-3;>BQRU8# z&MN2c`38h%^jW|@t)p|)AjiGG*}5L){L(8%g=kC2qI!h3eO0o`iKJB!lGKc-=EM=) z+>96@v@m*sJOufk&VSr$GEi>2WdA_K4@-+js_I*GCIdbnc3eRaU5~biRXwF_qGi)nl!$m%=Q&5tb$(n+8=6hevf9IbB|ltxE~bGL zaGdL9A7*z-Z1&$LP{Hxy7lV%AXWwSQ=Nd z4fXJSY!1#3YR)Vf>=+4)%*a8OcHkMQ`KkeAQsk+F`k7TK0x_S`Ivv{#%iX8)A%$sF zQidcKAlUeq5Xz4c_5~v_Z1~%~CUl~l{U(tg4)#WGWexmFCuC-7;gYEA2fw}=3#y;b z3VkPWULk_E^rxL__^P|ngNru}>G1yud#6}YgEdNU+qP}vY}>YN+qP}nwr$(CZJn(- zGn2{my`AoUsE7aUPo+|+wY~)y?iJ&_oL-O5%l&h9PK=oKB|`Qki430@-UDt>8TaBA zntK^);sr3B)jjhk3XG&@cHdorR5E@97P(9AZE!(XwK3AjMqU)`V5L7-Mx`;cK0>rx z1cn%A^e%s{KK%7fcF75ua?FNO+jGzib;S{d$L1T2`@ozt4-GBc@*gGtMdw~M>XEoH zwv%!%p+W)Df|H_?CB_IavV+Kpm`qn1_&|8(E&Ut$DmxUj4ZZtewbpM>T}|@L-3c>Sc+iz0W~l-)n*xybImW>A?aR zOV-og!aDLxZnfIt$mB6~`yv1WOOU<2r$3q}smZ3_G;rn;ce4iZz0dF+!jNwb zfXU>+K}cNO)>t!dVOOlO5{iG?W$!NI&f$o>m=xk;Ao9=+?>z+=8w_Xx{aO9L5 zu#W-M`~8mf?xuR{17!Obd-^kP1bEm9-ZU+i*D1}n5N}I+|5q~)89pf8kmo}V^{Q`p z&P9xT%!Xv)V54)3rf&`dKHyE@RF9{5UCsKM_Bx=yYtSC+p^1HYZ0#*E%($^SvA_dt z9j?49^kSuonCPc94FZJ8xmZXnyyuHdIh=l4-4b@AH5MOj0>mj_f?Vsi5QZ_gCSNj7 z&$bw{pS2L8(;1aVuW_nrAw&A7SI!=0r$hth`5={_Fi!AiiDj{TIh zr2X?>V2aD)ED)tJSV;3@m<4~bw1x5QJ{>kQt6`A1u`QrQX8w5JE`Rk3XC41S_0Us> zjsq+!Ktv~YKcO&n2itGw1#nAOex__$WKX9p1TuW+-u{M~G-sB)WY#n%b6fL;cE)s7 zyWz);p5SD#47H<*AXp}xFWFS-paQ;J$uI0=&~z$(0qd0z7>cxnZIF#!fTT;iS_^J* zgTO~89&o5(Vm-0aI^JKGY);vSJ3o+5Ce58R?vV1_S$$GcU2=3tl`J~ReiRZU=H|Ex z3C9OcY2b$g%t3&SqHy(xJpu+H6|=kubQ3!85@=Yu?wFS1;6*tGWVY801>h?M|pJL&Nd0_ z;t?GKL;3F&_H`0Ds5cMENS1PKoB24RP}wfD;{H)k^hW}aJk37A$6es^x786$lZP~W z0C%@o?k5K;1e@`$>KLoc5uCsRr|<{0-r~=OV>8z-eo7Pbj5h{i>DqL);ZSFM>HW## z$ADUIj^UeETS=YP;6X4;2+Mjm4M-X7MZ|j9g?2%;F;OkIp72eborgh^3Pc!`Pz&Y; zDQy>nsLD;``-`>mmXZCm8*74lh}IOAw!7GMMXMsgH$&iv{$j~BONX!b?*L=e_|LiU$PslS4|F00 zJs^disVm_K9`1q=f#7m`{(=9FM4_+CaEDZs=7;_B|3>>e2Ih? zJ`xn-T*g09Yi`*7SldxgkB}hNF5t<`IVwhOUpLI-uJ-gwBM| zK*PGdA}Fy=ggq52`LGyy;Rw{r(49DTtAM<PJtuWV^y%U;@(|9UuTo3DHLS&w3Q7k|DO=Nl@@Y&+rz>y^tVz^U_E%Ou zEofc^WrgpdR7O+{Uf#|h?&Mz$?O8u+Et?1FG+?dqdFT3f6sQ^(l|pV!Wn>%fKB6`b z@Eu(o4pZ&3!rBhCM^o^4e2UqdwJlrUp`Z?E(<&-@5%cTmbz)B!yJ;Fh|d+M zch^V-9%9gkcQTk;pc;Sg%@Xa}L(}VuBOn6?nELt1LP6 z?GA8XtcNQ+DRtK+4iD>1l9I6|IC{=9@SD$3hY_XpQOg-jX3S#^(93yeOo_e{2cJAI_km+T8V>KjVX7@w!gLY&$ zr1^*hOhnazd&9m20G!EF=xw5wa#6c`NttJV(hnkCrrOZ{cRp64X-0wWv4iBamQdJ_ zNMWumWF|3Ink`g9*X@aPSfxVwd5f{Yf@A%%_LX-I{-S2RbEM?9OXuHRDD7JLK;ykI z*K8qjLJ|8Rcb49v6zLopc;8(LZ-`uk&ohAFC~n*DxuN2_BI1OHEFA|15VQ;TtQcw# zmz$f`uai(z6;~{Y;Uxe8s0(9~NU-DYdUOO2rzOLwBvHw$dXX;2gOb9VpP|@|b+MK| zww90|^02U!SI zuVPj+Q$yIZH~OG$ynT88XG*hA50<%~ynD7_SEDs$*-tqs*=r8J5ykgzbRkJE#q)JZ zp?OPPjHLfwCmS~TAm4yiheG57xif0E3h5KTg^7J%^n9~4R;0U`_%NkQH1ZU1aQgpm^jMM$pxJsn-$U!MAb`VjFwLg&xxMiZ%7@;?0~P z?t|(OnL{@y=!$s%avZO`J3(e3Xqw{3{-qez!yeOKGyP$vga%bG5F3Z=hC8VS>y_g&-fJWL zYRzmshn;X^6MEexY8-TyWw2E>wt9Y8ho?W-@mo8k3p!e{GaA-LqK|`ihU$^vpVg($JWa%!m(iC-L9pNezPOL#(~^eTAHuHp6ud&N0%fvl1R?Oca!~H zv7fi%F6_3S;4CBdzf9;^HXS<eo(gw+TbOX5HmqJT{ZecZXe-6OrRCA-J_t5<Gi+t%Or?q@C`R>QTJI-%D=G1p51Ewd((*o;%l(H=@mEvK4~K$2y*6`${({GXvH-d%u| z3y^y-utn2Pl%gVA;LAAvIpWHNanU>YC*V%SO^qeT;cidEzwU&0KC*=Pe!7Ht)ku#J zeu`!-(K2at$g-MlC%xW1duMX*7<#*|8(uJskUlkRK3h17Sn+pOM7%Ru4G`PKd_gOs zH2Lh{wTBoHkE)vxCI;0up+V3zMd&(x6`Hg^r4 z+~^mbvP3!J4YZ7iNnSaJXLd1MtU@@L2Z5HE#Pr~zwdQv> zz4-m-$ZhX-vD@#THe}@A!u>Ce$p0<&GcdETHKUi75E7A960wn;f*SmPv_PlZLcay8 zfq~)jegqBJjq#?0T`PNRJ?ABD9*oR$!%!*a_y7DksVDfr!7`A-?_Seb5pZxOi_uh zo7+|&MWZqmwiM>Xo(x_=5()z$BpQCr)ql1U^lgd>*;f~yjMc)3pdhD@SvR<6N$(4@ zg(=6nVQ`(w*$OrK?hksC9M+t7*Pm8|z6smpSBhSr&(|(9^qa7P--ns3p#z4r=9%sF zovhF{M?2kv!OyLiJM0Gaop3j|s;ramN81*}ySvpx11GKUmz%MdotYsnZ|!+4wyBwK z&yOcyUP8dV>5-U9mojkq*%>_#8`B?Q=7ZNp3*jnbaxnIbeCw;=Ybu4z+C!B>R@G=( z)WOQ#OiP*vhXav=t`ygxl`X_P=nLTxtx8GjIKv`Iv`5(SHq-5!5%|I7dx0UZQXH)n z*fLK{uTpi3zeOuu-vrYIN~->n_44pygkuJF)j#kzXD8a4jMpaw`b#+}_4Qi|QoC>& zK$hg#4pN14$rxPR1QvC{G!l~YK+^zso{V6+_fVE6?p6%v`Z7uo7Ao)a@r$6jV0p1R zpi`1dt))+iUr~qoVLVd@uxE!o4aH)7o4fqOBvqne;P^A$$(Xn!5!602QZoV@K-*>m zQsu$7?{9)IqRB|vv3DMnU*wJcs5RHevIS4}dTgm)b?St0ULs@QcT2sA#%HM<=Fw#F zjwJ%fj&WO8c%&9wxVmP0;C|=H;ySSuQc*p;-2pEln^)ja0eiG=a6q|7Fv$Ts zPH2`{>$M;$Aud*OMK$eIYN|s{p4T#IelXk2Wl9dr6C0`6)!j^(6DbKGMa;k!&Q*_Y z_r=UE5Bv{K%!TYFL092B!~(l9dL>2RkksxgMGA$JXV2 zmsgwb#~kUo<~d0qghkHoWiWvvbN~Dp(H84J#kU)J^3xw3r^mDQj0Q6mXY-xH5dqEu z#F2x~EGPDoYccRRpf1YCFiQLm{6 z5XURAJ#K~k$U9IBFpmUOm&BK3Iuzt*V*u{PIf$VJrMF_L!U3zMH7>}nL3aQJmzQh2 zF)&kyn1?f%g?^Y3*`r?nfK04l47)N8!8UmzR)0`{{1cv)BMNZqumSe-tc$coK+&55 zm$RlorP>ZI$|nqOgla2tJE+Zm?b0#V50K5m59>eOe5sH`%@{fGhgU8b2pSukHvr=9 zlsl`Nq1tg$pg8`8)Y=qF5=y<)tushx*2gz?46y7{;xGE)viGhh#>}o8$*vk~m1c#J zZ>6qgBuX-O4La;OGTriGIXG0-d+gOl>K_nFksIb?+D&ud% zW(&y0?GCalupp9|bXpBld@WxU0)2puz8 zx{#oWbrY7|mV>kMvDrw<{lemyT(Da?b6JUD@VS~0?|`Cq?ZjLZd}2%T6SH8B%oT+q z&CzoW@l}YTFmAjaofvVzvK7cnD&g$X+ckHP{EHKh%XlB1QqGotcY`&EbAS6|hT+0o&p!LuP_ zVv$D71XM-Q7z_!5FrT@B{ScHN?jX7U-jl`OMDQK(nPo+Qc+q zXmkR{gc(O~O?7}AcKCK78RFP%W&6#q-Qc`cAM{u~&cQp>8FKd10orOH5~19Om~j3G zc|Jp`rieUO{n$rK_K6q`S%Y`$L6C#o+5r5U#c5tFBLCBGKZjbq^e-SXjAksMJc<0g zgOD?=C$H5hPyQ8wH9bCRLw7#H%R*^w!kGY~JZwMxFFL}=dH^o6LqD>~92BJK;KV%0 zby0oQ^(WYt%u>M8#ALXRZcAeV*7eMtX&5kdV*GX|A{*DZ?pg6la!w2AGbC=zV!`W4 zgx^VR0W53IBP!xPJcfkvOY^m}06T(Pd+%o8U+Krv$q!n%^GNxtQ$vlSUnBZsfC`4v zA|L<#WmN=EXQqr1bSvwQ%W$ z=RFA2i=cz5149Vj3!Mb8pTm&_`&}LCRo+a0%4)Pcq{m$&1^t6K?Xw{9dio#7NyV`Z znh^P84IpG{bie zu^-$nm~0UbkHm{+tasjxV?>@vyU{h})L;<|MD}Mjq2+c0&!0crZ;Uz&p&)>os#nH_ z#N7fJG$@W|MMg`@hr?0sd~LXcI0)n^iI3zBZ)5NT!6?=;37Z#8?lUfAXFIrxheXLa z>Qj-FU{TsBy(+%&(*>J(HT!>m`vzpl+Sxg z-WODtk4X!Z(Pg3vNE~LfAs-3E#0S6&ic$2A)@Gznq4k=pL9xa!P+ZjKOqMiZg2OT+L6a6h_Ut*KhrYYmo=)!xYH@gct`vG0~st*97b zn_rO_0@d69qHlXdS{Uy$3pK?j9CKD5?oGr-Z&p1IU8u zWl+n9^NH0m#UB4@T!ozK>EB;6zZ*6qym7$X^T zLoYE+Cw}OCgnp7lFobU&N*&S*)~%)_bX*}YJpaf0SXhPf2kR=C8pcQ z1WXs%#-^;-8k)rE({9SB~mKeCQ=lV4WU&-WLm zAXb{Ef+@%yXxAK}%60LvXVK#B;11{qOdbOwTu6P|-Pr_!1H5#5BL)F$SFfDW2XYOg zail}T_z(Mw;wz%r-yh=hW21CEI05WGa0!W<%2hu&Eqy$Lfw%qS>WdR4^6xTHYfI&@ z>X`0gkl@d?;WFT|mUE{~gjs=m-Yo6%Kc!TR~=ADDP+R}UD#|nr9Cz;aO?}aZv(7tA~td`_R$+H?>lvP)^80lLJnLiLmlqh2pF`xhvRXp2X&~?m@iLt+ z*Dmz;O1kI_Z`~R)O~xeU(T{$jB7p!+?d>P4vniCQUh8{1J>b2@M7^oKk}n*LN?CLU+_P=Qq#p z2-sz>ZS^*bRpDN>>}KJ$ah}LD8ct8hJD=rZ9$N7>{FfP><30}+w}Szk{!YLIg=T&^WQk23$UCJ+DMIxUwFn?F4jjpl4HsBWhsFb-k_0{-^H*s zDpwHR)-A9ua5|+%YmYaLzNdHLpWiU>zJgPae5lHV6@8rnDSK9A*X%6gijBn4)`wO= zSnC(fpQ)exOj?>`tAJEkCZT`^=1UgMlT?eD$9TZ8H^J)CEK_1>uI3KPaCA9%uDzKW zPZ57*K9W3J)N;`}Ef))zR6spuni5t%^0Dpi^=wRxdmfG^&KhI<6E9*Uid{s9)8AHw zU0s#d3-)%|_n#m)P99pU>z|>GAM}4Vz5GugmrhVgI7d;=E{g%B?^B8UW?7PA$#q*c z)*+BIFvBMCR6O8MDnxC6^JUv!Q&Rbbs>LEZ3H)czULUyAoL!L*r)Rs>Euo9hPFw!B zH@kaz7~1vxCi>Q_3w#XrmpQ)K-Kd3t`JNC?w*Gagt@p(yC}E}5jq`1zZ8*f!G9i?- zEnXH~F85{u-roNH=u&cj)r*+D(U)5jIr-XVkj*7PJU@@?{dNrbmCxGX)44nh+K;-| z*FWFV-A)y5ZeaInXaOZ$4(D$WLjTzo5btDWKW?oj)|%lRw}{h815f<-{Ir%vv!~XUn+zozae9MKE*X8Jl#?)J13&EKTfg0_3bB@9uxnnI8UFDAy zTy~Cbf#%wDneF|HiC!nkBQk$p{k zw4g)^V)bN2V54HmGR{1jM2IN|Dt0biJT7K{oreLx*`GN+7tChA`}SjsL^>x~BIHi# zki%&Zt~=DBV|l$?e>x82f_-?L8Tl4Dy7bK7%6dq82}w5RnBChSM9AA)3y4hf+SWjaZ)C>`Bh8dk$l~RB@n{4LR9&N<>gMo*h(Y_3%0&o`?V=~# z(L#tK_RLXd6T})rLB$(j^KpXEynebP_gcYxMoKKA`E(3sHXD!+27ad_M5x}`kxcYx za2BTg>)_M3cIpD5AoitO3P;ri$92R?qK57d!=!cz1nT??RgjG|)9oI#v^x^fQ6~1W z9)do=|2+9fo0M1#|Lk73|JHxoz5f4`|3CNvWfY{Oh8Ylg-_&4su57!|9ta>VZ}Eaf zf+N=wZAx$SGlPvA<%fT5Sv3}x;_3H{@TlGM#)tT!2vsqIfkb#Ln_0Z`pNyRw0!ue*1?>F&k12_$4F=lrgfWubZ z4UbaK*)YI+GHL`xmm!U($x*t27r?rGUON&@utE*8RiCQKg`T<1oah%gLyN0 zXt^hTxnJ=JS0ZmY-$iiG#l1$h;PB+ffx zfXQwV&|XMewDl}ppQ9Z5Q{tYnE3Hlxdp%32B}j~}X&H-dpOM? zzl_qwjz%DRP-NZA(0YHryy~Fw{pWUf#LP$5{d3ku!TfKx+r-+`)WX{2pM6cIWS8ObCda?=GmgL@_0Y2L&EU z{5B7Jf9_7mRp;!*2&MryV4_k5KUl0&-*MzI)90v>d~hN~fn>r44DH;!Ju9)Ngo{Po z9w;NiJ%B>N1x`RaKlzAKuKb04fdCU0-~y)M*U%FZF~J&<1|bpx2uLpNc@F$;j_A}N0Le4` zilt!(hbg!u4avcH)XsQ>P}3f1%k9YV<`9Kgr5<2~;wz8Re+eokh!;p=b&hmsR?!bF zN9-pNgm(?^qR4n&ehbC^N|ekOaX5j*VnHgSAZxHOF9#P=aAD7|fm&r&d-6VU}Cx&6PBDAf+5#a!oV<*F_9gAx}(~Kviw2yff}18! zQL#Go@O(|$vp<2crcX|)pK%k!K7S>7574sAP#3aAwd>-AI{xZQj$1jVPM|DhAG9`L z(2&Sf{VSi(wgQy=5I}|yP97mcU*)%>jaRU6iB7jQHVT1?<~Y@kXy#L{gAArwDf*5M zG<)@!(iJd9ZJWy-gDJJ33tEkdU|TWJUctH4Qsy}UFiqEgNWfY-v7iEYT4uJUm{0$!w<}H z=ZSJ#9On8U+&z))*3H?wxv`1atHDLZ+w7^i4-GkC;Lvr1HR;5JY!hk#HpO>@Fz6iysh?kCMU+19r3BUsG=kKjh;kurf^gzX z0xwO;f|9r%%NuK4uAirfjtuD@iXc=g@xr#a3e}nG)JDC)vD#d{*!b()B(cu@`t#1o8rzo|UE+^$yk}cuEU~nW@f}s zRozd1Ts~cPy0Ncqdbu+6aeE(qIDI}QY4djQQk*{z&YmBi7u40+;iO{5hnV8zx0jp|eJIyTQ#5gWB{j{VAm$*BW8n1=$Fs9j2&J;1cJ>AH|zHVMVo zwy=Y4u|T`Sx@TpJgxqeJ59#zGn;B7{Pix#Nfz``JJz?w=H%&SCl2Uu@&<%b~Q6!-S zlYMPrqQW`0*P!1peiNF*p}PQ&bDchh&I+{!d!mu{xmtZ~=UHioj0jdUo@r}k7Lv6u zaETpLd+zBQSH2PxiiEoPTEub6z7$8-3uhM1n$N>U5KJ>>1r#D#gcvjtX4WH1AG1W# z?WXqFX!q$eAX(5c^+-;pLI6}?Mb@P6+Ql>)>Esq@O6lyJSAQUb6**LD)-LVYl~L*g z*yMmt0`M^iuqIQ2sc&J^gk}p~cOu$y={Z9#slX^b?5G$}$6*<-R{nJAD`NUFU6%JA zFp@j~^_~VSW4k&hhZVRra#?6Z0LY#mTbq)ORIsTurG_NHYBbG;)VXDg(o&-n>QTMI zT8+LUS_wa+-_(S>DSSo+%KJ^R91lbV&AE^MhSAQt>ET#k8I0^ffr7 z`YRwQg^BR?4Ge9C#vTJjFvaZh!FNfI+KMUB%YhsB5eUA%6CuG4X+YVc#4uYBHtmd4n&Sg6{IgmihRjg4=9B!a_YkejsR`&lV9`7;;j!s zT?9G;T$c(^Bsz59yeMTP$LNsd7$Z?eswPbe8Ka>|mQcprGfcZt!aL9MgFb^>XAq_( zk5wN#lGc~_$_AHVZ9uguQboxdDs-7(1R^M||BQ#%G{Em3HArC~4)3RO&tuB&61>$U zlnq$7<~q?%D>zx~gUGQF7zO(0Zqi=!l<3zT$;H*}ebklxt8;v}o294Q!^^Z`V_F3+ zSKlkFRE>`SFFVpGw~(PfUa+2pAHdrnAQ&?vAT=ZJ(`fJ{&9wK}#W;$G*wRuA>~ZdfD2I$)j|VF*-`-wEtlqUP zaiH0?XNqxn0H(!IMIwob4z@3{-BeZDbUo{52uS#Y68c)Zop5E6bHlOfCJ8xh2 z`71QjJq=+027`f?<}0{}G%m}kSA}Mn;@jo@@p}9y6}U_+3)&o0j!+6vZ?j=)WnMpz z!3LTD4TJZbiFicp3q?=^X5JRYwO8)ibYh73?Jnfw1p#C2`vnGvP;L6d{?Aq5Fo#Es z;tchp>qs?m$?$~UIJDYQ(!#ELU*)Y+)1tXU)gSd^vzE(PZUOz5bB{d7U~!|QE1)kG zYdkDt&xb4LP5kuE3xsB$0|-F;I>7jhLu`^Ux=9ch2F5a!DhwMu40{`cd;^e&u=(6D z(~yZSY6W>AV<0>_B|I0Md)|8)T|9XNYs!QN9;RV#MmKl~PdP|^!ZdRrjYJEv8v{~> zG3j*@jm#lgRhg?%0J{F2+C9)HCKQAu3!EY{jcO5sgmvIr`%}r{R|gG)C-;Ncd2e8r z@&0Th_FOeIt^@H(5{Q2~H_C~>z_IYKTfkxw$s~9jA1I6Z)>27{@d8!!xUJuS03MA{((6$J(?kS+1vnVOv?rj%D(K7&a{$w#{5+)h`M8OM;9vurEvl@k` zAS9>!0P5z;Ajw7~nEA!y@!mnQhSgZ*vgdLj7BN3evtK3izAO>@;Wb7*tsyH;R~K!n?yL(m0hUMw zhjuKh$oGP^)F^iKxNczfa5u|#l<6pIxmG#8a^fF0G;rGWn>>{opJcneGEp{OJdVbf zm(VHTya1M$bzCt>7FS0K)TnB$^51O8tiyXcsYAXIm93Qe+!FK$hah-B3sv#>>AU62 z7AGn_>Odz6Wv`vupo)cXZOcTOZxx=;#)O_%%H|J(x74mn{#4}x;Iar=_SFZEi%D)s zc>$66&liFjPIlNsn~SD#Am?&CHlFZ`}{= zTW|Ajf_zmuJKyN^mjpzCTZHJM!*cXDufE-XcmF`}ZAZK6?*7#L%FS^T4LpkN2&@2p zs+7f11yQrTKA#sZ%(%(nuelN^zws{-$Vkf%03LNaJx@QFA0hdS^D58&oQDQ}+|kNh z5j8)_M|GQI8ei$IF>Kwu$*ie* zNN*o8dVI=_Jg-A9O~bQy_k%Jd%J2Z>I=*|(x)VJ*RVkw*Z&EGxt4(}myf=UUVy2u_ zEm61f?c%0K1uc|gpr!yLF{|1eA&MQ>&k7ka6tYg{+6?ckD$!YW+Kq``N0GCn0}I<1AaQcL}64S&;C_``}dEN-rd&BQu2%FWg8L>5*mgQ9R)vTqvq zzkY&s`DorhBqgSKH$&>}tVM^Z+Kwi1a+!#2O`5u2CuE%2B{kD4d87XK_?2vXZku}@tVa8t7CZ~}7hcY%3<*f?k4R_$-78&Ht>Us2536*rv zd-%wzSGkAWZ1AIv|6k4;$1QTAzR4;fQ*|>uA^K95iG}2iGNVGH{yBn0w%ClqpObDV zNKfhuC)i9v6(SeQO*Ezw0qXn$O+?AOjaOC(WRW9fw{~n>)eDR?m#P6^SgWa4io9Zh zRH)?6t|rLq+t|b>!ND3>qJLj{Xm_`l-8MCBJl&YbnH3;qW0b;RbZbO;l-3rNn>Eu^ znY)xM$<#|Pgkjh0qWG4utMev1@-F))2ufFLz$i?0*}&~_;93S*Z=(m<&2~LYa2zVF zrIElBfL?$`GYrXK$0}L;d~~_m0a8eOkY}xdvg%ro928PD^Q%6e*VwNG@0(Y>Jl@r; zF=>oLSA;$Fz)8nSFkH2-pCulAbL+V$Qr&HOuoD2^RPl04@@OP(Xj)wpJw=-n{n%RviM zAj5WSGHKM?J~oa^1;1N6CN@@?b=JGp++rq21zu3j@U-^2BvUH|c@{taI=JkUpr2Tg zlUsW06uf%);D7ha5qda*^VHfP^tW%3T!S|RhqBc8W`djYU?jMUrRZB9nVD(Z-AU%8 zgN77P4{n9l5-c(}@3@}ORP9*GrnyYnEF{+0jOY7`Lc>2d{b~t=M*6**|6X}2|7pMV zQ6o+Yx>PlsTcK!8pIY-5|8}iY6w^Fz8ivrS7mAES(?2Byf9(}MR=gH@ z6OzCXOftvs%J~KOPX?+%YV&IR9|M&H^}oktE>70}A0~@Y{eQ!MYV{nJc%=ue4In%9 z8BPs=GhqNb>G*?u9bht2Wm(lCm&Gev7GC=9Vv~)zY#J~jNqV;*ZadC6sAQJHw!qsz z9>BEsTt@#AN#MOL3Rqq05{|bjtrxz+C2veXbq8SasNxv|`^L$?tS)wP2Hv!!dV<4? z^|4_UOC>Mg)q^!4D{{fx+%3Zd*B%V%4ik2ZT^X;#_6&83FaD899L+?VY`pNXYoOtP ziHwnMc^F*sO(Pl7Ub>pZF4|@{aPW5eZfzFw+)GDsvzL7El#04IHBJx$8NIf()}UyJOE*70BF zg)6}elTb7QHX*MbN)(_3muFh~tbK#F-#umcJvjt<2iL`pS>OPSflIAloX3C$DGQZG zHzx0*;hPZ&3%N>u9w3`?qAS(~XL~M{H!~m&%R9gtXNXqit5%Cbw|X~)qzp?Rb^0(% zh%6RjU}TOQGF*VtyJ60XJusDfdHYa8#JjM*_iULR3#w?G_uaW-=SUt06XMV{`H)uv3onUYlYieA5)*CUDpulA&Gh57~mE4-1WfSiPJT7&^K zVXdf;r)6ejqhj^e(FXUiOwF7sTSpzna*f3l&%`sO9GK zH}A~EJNpLlQl!x3lx@{`T;EPgJKf`@#qdKF2OVv>Ci<{ryy^{&g~2NOF9-*BPcLqV zYxf_S{0r=QO)YRkS7!zXOM_p z+*|MVzxGlo13`Mcn|M#qE#3uX^*V?<$3j;Z$@kI)i%~gK!8Nb8j4pks4u-hze6AA= z%#6Qo%iJ*q+rm>n0M}qtORmEbRFF=0*QM#P*v9qw1QqLZv7k%YUHd8%NJXFhsK~K# z$E^vew`if;HzA7C6ZV-*a25va+VK_g=)Qrfp*twRALe9ZM$y^O;iFA~=3A!7Of+oR zRG6%f48Szv^jR{-@1{et`Ek?}+`|_?~Dhrx1GY zL=?FdL@+{Dg_;faM9if+-6)#ebs7b3=`n~X2EJfV)IW3dFMi45kJgKn-;YNVv37}a zCu90@a=eeoK4B!ux*Ce_Ux&Z{_hfOqy+#V_+OJ#_6CklCXWA@sTEBvyDfG!-?uvblrZrM z%V}4}C;jCc&I)Fh)fnd1Bsv6;N}{C*vc_Ub=SAzR?;9s~WQhpJYkkfjmU&Sm54gE+ z@8V$TUW}N!v2!z5(+Dk$;Wa&selg zKnDz+0s{TwLBP%0Wrz_?C?fw@b9UN=`}^Z}RPAGj0QB=t2(_wue$ZKH?Zae%JUGDG z2P(OHD7@h0?kxwLvLy|)4XAYbHDjH9g8Zb$z`@YkZ6tCj{02xK z5Y?CYs+F9eHJoOcFZ=Yj<8bg z>Af{lfj^<`Db4%QjVgGeBqRH{;Z7J(b%!Km@H;ipAc&Go5ZtfZ&nm7jT(RLJIuA$! z_J!@i@#KWTX;T#5r#dV$83sS`My1_WFpGPO9EJt4!352bnw$HZh++0zV>Fp$aW zXT1nvubgg9k`V`}(}yyjMMO@5-gzr+PmTd6R8fUQ>N>weipV(A5~Bw}$jl|^*lUWw za5~^h64nH{_6cS@BnjsYp{@WH3uIZc!USFysPP@I74)!bqMLYwzr&{?nv*XO-88YbzaIq`C`>$<7GQQw zuZk2Gl!tP)LkqWq$$+8eBUgJXS0ih`!fu}}yqm@}PUH(l^MJy!MF83n2HUEI##h7s+0_-18m7n)i~cx13P=0T-{xw zA(-3h5Hnk1bmW_fhSZ*P+wB5tj_d901 z(bpkFQJ2_J&OLsK;{`e{1Ra8nwbe0WaQnkh848U|_<=n$Qypq3k0wU&Y%;2qDIYS7pKV7fOfKgbAOSO-0xw_y+?-w!`Q%C29t9 zl9N<-L?P9fK-UB}G$Q3Pw?po~|%Cpr^wkP{y@_|_{|b9hNe z><;T@)y@jKbEHNG5cfT^#w&hNcm)uSU1Lw)r?7`lxi$}$FE*C!Xd)sSjN-*q0iB#A zhM<~4E0Ser67)n!azj2QBt;N~a8KDUi zQV-(uE>JnRj-%vagY&k+Xxeg5|8IGq+^xGiH#}TfP>~<}*?I3Y{IEJd<=zAN(n1}6 zrGzH)?lEhQofIOXrH-~Etp=UB4Mhx6x#tDTSV#$&u*~jd2Vog20@?;=iGH*N8Cdm# zF;?HCKJ~gW+GfWpR0#)k7QL0VnP^esk$D(Q&Cbi>mY4O@t{l z2F1AJ%Xab5{8$V1$UL}Gg72^c>pwdjkU-T4*yAqceSXiOoO=5T{GPN!NT?>Wj2mf|puQ+Ckv~~r!u1IM(nGSM zn^~maADPp`jRp-Jyv?=FvKN_6Gae`2L6Q0Ow5?;q*nQ-);T=Ea9JJLHn`ZZbPb$)QDqHuIp00?X04+EsCZubGSVZ98 z$f2l*^V{c?8-$o%F4-dli6v_qZp|dv3MF|2cT7?!UvI3WL2eW4q*5pB9`$iiMx5mC zMaGknH~uuqSz!1N;UvnM9T5`;{cWs++o6uo zn@f|ht?{V#j+Q-}TA#?)la|e!4pZ3j=zvrYzDwG6F*H%f5>odbTPxY>72ghzbk|P z-CgwK{lM!A`Te^rCdfpS^xxD= zsP@V&t$>G;G20YfQfVlOA%}N+UyqmeE)Ld*BbtzS*rqf>1H7?PxL563CPY`RNl}9OxvA?QYBgWznRdoQd}a#c;xo#lqQ9O8eRD?Gbh_RRCD7f z+v&jY!E|8kohz)T?uq>WkbE zlto8IX+eox+vw@tUCfLXYmD6o?gDh2Uf*>vix9 z|7uE4ATp*R6dnPV8Tg{~!>g&wW|%OUOw~gZWm#piJyND>V7Q;r)dt|m>&QEb1ko(r zIf_!41=r>b{mr}{6&m^yHdcmTQSS8w<7RvI1LWzW`NeT}kmUXjm8)~inHkZ-RLur9 zKF0f>c2bVg;;q8C zAYoF^I(-TD-^Ms0pnF0q{`^XW(O~^7YF>BxrV`~~Yv_Pj_hit3D$zS4jqdAIIWAI? zo~6~Sh1mCswVDYN$$NNkUFqC*qzjyhvsMZqv+YHC59?OKt)K3o}}c|jZAoSi?4 zAsO>V4ak>=s=3SKpCfCpRkNS2LXOskIU{OjD-MxEcg$A+-k#MM;Jz{%qxlI|GV@*xJrGh_SsQnuV0iKN__fY2yi&C1($^7^ryc z7rKpk&me0Sn1Fd<+Tr^awOT@uh&ebK$I&MAaE*)XYlf_=V=W4C+^(fb#s> z*#GpwpZe)#5Y4QGp5u9(Q9NeBAa(ctJmZz&pP z?Uc2?CqLU-+2B%kDzVKmgTKt1*M%2Fe%~FjZ&*-zlDYZfqEA@JBor8yvd*-B#0>9o z$N>#eU;#7_&xP(pm%t#+C{b+40fpC*cLaKpV9Z5^mwZCY2#dIqZEiMB0=WMzxyy-q|6y);TBquGc%5aI_C`7+Q$84Jb z4M~Ebk$>c2+)T7P8)QS0u*ZQV+&eLx>)oIf2sP%ACC3B@x2(8PV6rGh3b3N=f#@tk ze7%CeK;B;kObgP4JRnTJw~Yz3&MD~JJi-lPI{Gv8DBJA}8M81341z#;*im|q!#FG` z)78s;;csJ&>Vdx6c?{3(aips9Jb8?rgz%CKrC-sR9TN&ls0LQb%7YKHtt3?2a^1Od zz0gXfGB*dTM6;C5R2A7&reCZq!y2_2>7sY5re=rL0(1AECNqIP)Jg9JlpXlFI3ZIY zLe1>8(Rp=zyiWyFU<|zBuh}42+X`kJB+8&GfLC;dYpoxaeeHS8 zkI!ido=rQ*t!(!SBw!H2-S@^c&k8aL=9cvdu=1nr{`Hr+(6zCk{Pe+fC3;r=b;PsC zzecS*rcqLl>OphLx#xoFQ-kGPt@BAEZ&)55>h>UDqZWv2L|G*nt9*?OmkszWt!~*q z21HRrq*ND5SuO_?hJ3#&|0{XHj)C$ZuX318mvR3*@J|QuX1`n>-8;*Ujcp%evpYx% zE=pHcJ%&^b_U(^9(B1X0GX_gijV1TB;>tYtQ_F}--o+MA6=j&p=bH&#m9H-&U4Hl1 zX{@6&|Tn?vBR6nauMDyW42FgmtS3;Ms{B?L1z6i8m!NlC(__4}-4!5r#i&&7sM z{{^6Fizb;oP}HC@(gUR*`6xYy-DTBHzR>XBdXp{nkv<1PWz!YTY}C%A;?o!$P4DX5 zGFjNGxw+I`bRYgK_P+!@poEgSF0s1Vwn7yZAHE}Vl#M!8Djw0l{{_DGe~~Fp{%2NR z{Oht){;#sl*u?(d5RZwik%yj{qn(TWf5h94rk>qlJEGrf*}g|Wt&7SsT9{B20EfPV zOcX$yS5!|vJPS-lLPdI8?C-lnxgrZ!>glln zUh=pTsoSTh#pq?{g7#FYtr^p&Y=lNcQ&efCuz=B@KC11+SMR>GXP-%5#9z+vP6Q?< z9%Mf(3Feu>s7AVcF%*toI5(wya~0I?DaqNE$Pk-1oRR5t69B$ewbx z`mMt~6{qz%B_?)vA0_k^10qsUzKGTe+~A8)c(45Fmiz^HZ!%3bXC=NnNn0=w-`-DD zV+W^Xf;78MiFck^LBgsH>sCY(a&ID)TskDzd*CYLsgkr zE_+S6Zl0?UO=1nRAbldNrleAnv6^ZSCP0vi;F+M~{$2i^xwNYZ``i0?`SI~gi@UR6~(xXe*UZMUYg`?;J6bEW8F!8(#;JzeuY#;@^C9xw|U|2 zimEYQeSAR;rN&We_J`DaK$=M4lSSlV#x27WVoe0ea$x-Ywnmd=kpL{#w)4@@)rw?h z9E00+*{hpi!3XbZ$Rm|O=oq9zIQvBE<^&Y60`7b`j-s6i(ovE%-#hRP3U~eSi+i6Y zMAT25@q!Raj^r5Rs!kB}nOo6eZo4YcHf1Wb$9|<#3&sqx*-0Q-pSSIPO9>13W&|_x zOQLtjIn+H^w+-21BX_HC1aQMB!_a<`rt2Pq3GYeH+Fm%Gc{It8*dbAYhJ#G4@0~&*m~)ysHjG|S zx>gWYaj#kcM12Vv699u20Sb!z3|K4vzR2+a63u98JSSswsDEdQHNvIQ&`TJXv>I1I z+f3*M9J1bvN|8NFCbS2$V$GV$l6PokYV}(4j;GDY5SuF8B`}e`eZ;}pJo50WE(<(@ z57rAl#}?n9Ty*lR@a1zOnS+6NwS5xpohU7?yX59~q`jfSb|PhwkmFm_HyO52f1~Cf z%>?m={9DWLSF{Og=Pg9|_EI5~6Pym+E({r&YgXJDHiYPWDHw8Oh-MTb$Qd|Jk*pBx zBhz9fK+;YVc@J@Y*nCN99(gFth%leYMrth=6jl6%rN=+mfl?CU_xX2d%%F=n@dnOa z0b=lPw?YZGZ60mAl7AWG{0Qw3Q|SxI;ZbMcP6T6E06p>ZoalQf4CY?D3IyCa; z!cCeBcO7k1Uo5g6w-i)SRg|j+;d)}A!%?NgpusUF&hRI@sbF-S2_isyUIoJue#otx zN@qvVD}=<=WU(Mgd>vN;q`|TXMG>&zs||XYLh%9>D}{9ZGvAoE;ehaBZWpgTR{2bf zwdxGpAyB3#UKMTyzTI02sQZ4+QXN(6RWlh?+32XH2O6k-?VGTpHz7ht)-p2-|KZVg zA}#F-AdczyJ_|bZox<(=A=xl5n#@By`-^cj-Sqj{XHm2=fg`jTEC7i7qhy(b=VLbe z@zKbMp(7w29Y_Ge$)ny)@@^AS-TNhyrLG7tNa$MxtVwYa@=e|4^ByLw#SM)kw`@}q z5Pd=;Q+Qkfg*(TXWl5xU0II={VY@@cNAIhtyMhdwTf5KvOm`E*t36}Zx4m6VH5ry8 z^!@(oc|Of+6{A61(p<;0aQ6Z)TeGYlfzC>QQ)UJ?jcu6#wBs9Em>^A~szkeX=Zm!d z$wdu~0GkMb*i(w|+RgW_MIjU{TjBw;1?08yMqT-%A+G;Lu2r5(5^V2Oyg{Jm3{}Yc z*W4$V5GRp6QBY3U3{CG2fab1b4YmSji~=;#WgS8QIR+Fo;y$tgEo>)aR)-8h!l5; zoFkja;53T@ohJ|+Nry?~oan2L2K+8cQY*(t*Cd3=>N|Ps_J!ogh5ri95X(A3FuU(u zYKO39w2PQ^X>m%alf<=HI;1=%1)CDlxI^MKs5bYASg_A;Y89x~c6BiCx+#4i+4ZrO zMl6io)#F=?{9Gy!ezm|thL#Nr4WGhi%xUW4C9hn}L3r7-ukPRhNV|whY{vKx+y^lj z)9A`C6WACUKsSZYdB|_>JQ#yUa%Uq*88x5hNtCCt3L*0zas^W8$>YlT8UGa8qSf6* zQA`P^Xhhb8w!XD7-;j!f^}Ml-pH2R7!0{Dw=%2+#`GBLdRT%B|NAN*lmL-fEnXqK9 zhQ)YqQ}j)1Gv6AH1zRvFja%T}NX_ODn?rz`qZ??irfgQqG4NY~{;$l!gg;)yIv!YL z>1uZ8#2k~5N!^iN z`Y=?3NSep#zskM-#4HqU@|CgQADLJmK)iCO?zd^cz&&ubs*JgGs~|87#V%ll;L-{x z_o9byyx+fU)?HQcQljYL$NtYydb8gXA0hDNz z1%&ekgkD&Iwf=ykV=$JI~JCD>kKkpV8=(nJt1rE9}^5Xhe||{aM2){unh0 zq^U%hV#!xp$5KyKbNfPjjx<4%?~d5aInaPF0t<; zb!PLpJ90Pvp4&|Bn)b0S-bcS)4yg#mUx4q5cQoz&S0ahY%dig~8UUc=pRoPkTO!65 zjwVLVdM=LE|3vK!=C|F}=(F25s#+=kxQZzz3eJWWUl&7X=+FjE)hr&x5p-MX`AWfuBg18>27 zqqE2wc|Es?=SGcO^JVM>!+c_W8j8wp(zz4jug7F=AIupPX`v;x!{n3>&pF8fFaqQk zg+?eyXn2c6;%4drXeY;lyFj5_+9<3S%yn?3o~O1zx8A^QJC6-5_A-+M3Orl~U8m0< zZd9;eN5%|eYVcPxP`N~ULhw0p4G0ec;=biXC$InoL?R4)Vl(`ldl3v`GXan&N^0>3 zo^taqt8cW;F!OC0I+Tyd36q=(P!g0)Xb>rr^i)I1#tc}TWLc515+n>7HX;Y?B70z@ zw+A>t5T(X)HWgMpPb>|hZ$f-H`CQ_%it2aP;ox+Opoy7I;~ITUMiARIZm->+$yO#u zp($7*j~PhsoXk3r5=K~}d1?syG-A7p$Q=!X+6Se1bDTj!FaG4zW zrHmN~w4(BUu1NWW)Dj~Y?dJ4y3xY^Vam^CxrE~IQW4y8uePimsLtwJUdUvf4Af#S+q?p)VObiRPf*9!*75|fDYEc5b>T&!8< zMX;;U16TIbty}pB0QySd#uCOc;jWk4Hqt~QYticLEt(@PDo(BedT?hz%Knnh9GS9- zc3vGP>J+Y$)v`c6RzA`jnu$cu;Le1~@wrrDN^pk#5kKNu5Ih;!csReu=WP>POGQaX zZ+B139G*_O*?76xq-0`svAY5(C)Bc+E1l#SFHG=1k3W~MZRla(zop=PeqMKLK}Qc+ zuWkp{<}98+F7y_WEa|1{WX?osniG)|jj}@DVjO;wATt_`h|y$Lchg~+W`-wEfR@P0 zh(Pd6m(BYk`BuszFb%aK&yAWk;c_#UiYqi?^Xhe@hB|1BAdBEBb1ODlhB<2`Y?uoDV5{U{-8mDE)eNvlKPJ;&gF?~W>pZ8 zGM&O-RhNRgBdW5`YAs!VDq&}xwe~T3&Fcn(Tq{^{`(r@Oq^MV^g3z8Ojnj@x7p1Y( zKD6?O1d63v4S!lq+G7ibo7SXd zXtw~cRm@vN>ftY`;R__RNRa~}uV*;AD(zSEBtLnbwkHjxHf62QepVb7^B7~uc<(#} zx_~Arvo5fZ0Ez>!hWr-s_+uR;V@*HuhWnfc2>LA$513*6#mc}<@H51zz&(Vk{hM6S zT6(TapW@xRTxJ5>C9pjMvww=tgin7Pt*NwAM(!oLB&+E9oV`V>a|okOb|D)ux^85x zH79&C`ZoV$KO5Ohk)}+Yah8sqRXZ0C;8;IwhJ&P!yibX)66i;AI znvG=b@^rW5Dc@+7X^RZvNL>t!h8{GovK!(`J%1?}=)uIwLH=Fy8+TFts8W&ZfarK!7yJsPyq^zH`nc;)cgKkCbk1>66&0}Vt1>wr@qQLEsjCd0Kiv-Lj9 zAcMu{Gj(u^2&7|CP9?~p6sqk+T33ydVF`KFMr`qzM$`xk9u>JWx|NI<0VM z8)sTWr%R+M2Z57fc}JX1<`PR^g)3u}qDqd%ReAyQaYIlLl*i3(z3yxch=V>Glwl&H z?@8S>3s@jGMI6u|K-DCQ1IhK}yyS$zh}ndSjNW^dc2w1IIQeV#Z%<+(lG{vs?&<{P ziy*XX&05wi|9mdX<|JUNwj*u<%v6KmzTZF;%|*vI)W;Ql0NlDZ6w1}XrzpS(WHnDfkJ?xttZ zJZ*|rzt@v3;H|l)@tR;5C>l4S@R1n$LU<&y#g4TV@Mf{>GTkytWo#<>xbW zadWASET>ll?39rZ9A`cgMu%%oR~wiAQLxS$0S@KrunrU{nvS0{eN9SNIw`wOnlrr) zk=u#D9F8tdlbrkUp~BDwdTVIRr$A7iou~bf0|(4jTsZ_*P+1%WUFipy{udF4+j^GS4NZ94a z8`AAf3o(WDB2wvzq<}_%&l9Oxc_5cK>yd(*j0haRXMMqmxUygO!|gOyw!+wH{9rGR z435+4##O6VJNvb2L+oIQ?Eob=1*bwxFtfddHnkfODd5V@Xf($-E*fqz_*!U)(D981 zPqgP6bK7VKQ_T9DPLUf;+eL)*8j7+i#1y^L;Z{kDj){4$ALUZ6r@{xr$H|!^Di_m+ z{PQ|I^0CY76-+}%g?{y}l{OcoXcA`(Qi-_E8;FFrEeT{9RXD zuq+Ss#g)BeQCrB@K7yz59X~C0XQi`BRus;#S@^~JL|2H5B`g!Qy~0iqeFEk%?n{Z7L=0S4ZD1>B6{Y}5EfO07+q$AJ-#=eoyS6w%sA0NF-l}yny2X}l z&Xcj7;i$%?Kt`@Ctu4A0T+%+`Y}iJUE3Nxgb*+m*MnB;H^GlX0qNnx%7y!WipI`jn z1KdRg3nwX#-LQ7BaupXjWUR!|IJX3AijG=Wi?xdH4Qdb zV@_+q-##YS>^WGxgiaUi&$sCejzi5Vu*kw2>#_!Nf3})MwDjaj#;Fu$1(Xv>5*l93 z0l7oz5o#(>Ca@WHlMf5?&(tX=6jV^;!2G%cQr}l~!%KZW^Ocr+8x#@LRpI=R-6c~a@b>b`3H$?((OectmNPV0xS0T zI0{mv=JL3)R{e+lPeyjP=Fd}K7nE_N`+mRe8Cd#)L{*;n79GP-vftsOH3AA|$k{zc zXn~2gW@hFb6Gj$(z0szo^Z5){(v%93r4rZ@=|k~-5i8f-PUFlGh7>EgV^GweIFWVH zzbV5SMz8G2-2UH{YEjMxkwyj)WbUwGy(Gn=IZ9-c$+(&a0?hM^s`e~-U+KPNLcqNpkyCU0~dPF}) z@4aCM@}nCs@EOmS*HJRsNBV^PKVJu0#dJv(6aauK!T&4vZe!qRW%B=?hZ%02e;cZa zw_m7D%Rv*cG3+m-X@50qmAZFnb~sw+922VyEBX=XlMw;{0s%=Fc)wpS>i|swqb;R-S}M2aha^gn z-%eSAXqM+nTQxMKW0#lCCIrt3N$T-te@^rXT})wMdwG4{FJ?BVH0tvkI;pWnVNsS# zDQ#AhpK7q|KJ6I!-p+6rta?VOzp$~-c5#NPMs3)%Q?nY0j8&XFyhKMB{YRW~L~>(-@E zxM~r@qGq^P2&=%*K@JZL6sp|we@o-PO{#M`yHl@O1ps)bw3;JiD$)crRvl-SAVP9B zsdlnXO&rb9R~6xq&b~pciFPdXQ6lzd7j*4#*kcm_8-Nb)F#(w%s-x_;Q3lLv26XJx z0CLkCGrr#+ef#x#`l01@`+mQqEwTNE&*}OAocLxBnp)Z<#8gzkoJk~H9Zq#_tGIgZ z$$I@>^!al7#69|kjxDv>+0$OihPFbS=Rg0&YW0?F%9e<*O2V?yim7^;LFKn|&1e0l z_^QO}0dJ9X)Ng~59f+<5%GuzcBD#9&nU$w(Q!AD4w3u!s3zywT90^+251c1jdNGMc6?*dy7nkG;t2!dk}Gxf?Ym>9(I z`0S`Y-{__L8@ELwfoIOb0s-1q)tb=)@i#-(#pWeJF0k#P`Z;2!@aZ-J2zJQl((^X8 z!qUh9j`lGYPNY6kR73gfR>`Ho3}@>q(zpYc;q+2G$KM5j_LxFSf?E8-0mknsmWi{L zq_QpO17H!#05@O?7{_LqBJ+$92>O})!0F4pCl-zX9T4nIWI+@S@ys^FY=LdAknDqk zS^({%gnlB1PI+a>w)#oh)Qx(n`%KCUulm4HjnJj5?Z)J28bHVngvNHq`!@V(&(Ja5<0%`%5 zf1NLUe$fVh<^B7aFg|}~-EV@)USBU!!^<8^&DiPRdA1LD{HKA( z`O||tZfqW<{O^j6Yc~<;+ER^CJXo6 z8F)y+)||`&LpFKM(k7p6W%5NtJlT7Yk}xad?{I>70XyH)XyByi>1bU(G5?5_3Hs($ zO+Y;{S^Ixn(cn4#=2LTodr`oO0dKR}WXWO3p&#@xh`|j(DzpP&*ibY#M1z=6Ro=K@ z1WN76K5PT5+#)J4m2Ehalcn>rf7;CXM_Xy>>||g!Najh*{;VIGkRK5R$Z>f-uMaBp z&SX+$c1>7Hof{oaxBdgjcfKJBC;&t4_Sv;x*OFhi<&>;1k7}T{@U&@r9eZhwbBhW{iM>1ZG zFdBshNOQ{{MyhuHN`BTbeMb$i2Y4#S^{E=7;9^h4iFBhB^XbYeG zn4C}Y!m#RfFh@z6HTP^4A6JKcuFG8-7%8G^Y_+KXkny)IJ{!!O>`T)*)|XazN1&~M z0uZw6w+G1LUFI61+@_>7-Eqk;kM=7t7yL;ifusVveHY z>rp(ZV>F;Ic5^hNS%P(dhO}luf+M0dzQtkr#WpYn7`l@57=P?E%G!*=lVe^MP+Mb5EXKY4K#0fy$&=nq>@d`WC#Q z?6Z;=O7wVM?&8qJsV}7^TxA2YnX_P#1?%c`Bb_Ffk{?fbYK+wNK${LcP2RD8Qt5cA zyHlDzn6bPSrQB2l$kjyr7(9jvh7sL8C?M~98NhdoZv+$rnL2#P9}76D@F!!>_|4t> zO>V&cAif(T%=do(;dNHhz!E-M@Uz?aQAt&*l6j30h_zg=Si78$j=rVr)i`-xy@7a= za#UjMZYV8Z$v!>Anp0ioa(H9;Q~r=X8>ri+!lO0A_h{vY52)c)Nlu4D{$i~{$XmVj zt2ywnG65Q5!%nRwVR{I+NGJ6$ic!7wVsi+4^}Fq&;led|H8+P23`*O8ma6ji$ljKLxNkiH-Q3DQqapCF(t@(<>*I1# z89`DB=14=LhKVE&e3bG|q<%ENSIx(LSrfbtz0htrMJGLdk;wAu zlj|x8$Ex)}ib;gXSW=QX|CmG59R|#DfeoBt ziS|e3wTe8;7TUqK)^$Y0GMn#udI(MQpUmD*PWygR9;#^@=m_R>zGY>>vNlaXcEALs zV@umhjcbAgTnMqw5!JXpjyQJMY*@C7Qm-wj;5QG2z;trH5yzWda1Zh|sDy>TI1&sv zGqk8!{exNRj0AqWm0^e8^bIeht3_vFk=uHA^cq7n(RB-DM*}n^7Ndn;|q{Q(>m%M@lBwJPy42 z0pSV`7dgd6*$&jjLV`7tk8}EC6RHu;#LOucRbMbNtbW7@RV?f1<6ar%8~z>nk;m$xl0tB@C5OjG{R2fs-O=gT;Qnl2 z1uY*lUATpbi_F*hb?erJh@=>surM;fQQOc{JmYS^=sGwYiY2+*<$DV5zb#KJ)bx(g zec9!8$H)vfXQGCeEjC)v)ziE$iwXE8-nN&8l-e_?`9lDLTl*sO)AG(6Yg$q$`(pLss$w3*gp!g8)Sl|M+j$BD+XiAU~a3xLUc-FBi;W}o!ntVGDz{PB%Z6gN0KuM8 zHl5Axd2~N?%Q*}BW6CCjc1{h5bRXEPL)Q zh7+H-V>PW?LpCs^oZOL>wPSIlL?TV<`Kjy70$n`2IDE3^7R?Ze@HrN@Mq5t819`_X z{DP{uQY7p;EieJ1Ies0fbQzxh7j4i{b}RFWaH`3auH9n*4Nu3fq7mv_J3%pMmgXlr zRcvTy2X?>wXIEzJY=qC)1tpHyIGx>t z;J%*ySPn*Tvt9sEd&F7fgg%vrFsKlV)*GY6)qL$nTF^GHUrM$8<)tRHM(E05AZ<}3 z%mm)5{?C`$$SVS${QHSaMxb*2L*G7-Jh(4zDU%pa_j(z#o2S$a*acy#hwiRp%E(4H zFGGQs0^RbH#?uapR!Gw>6-@p)j-)maFy=Pu#*Xt3zJ>ag{#-n&%to2Piq~l0hEp2F zEN)0JcV?e@`KeviMiKf~5|>(>Kdbvowqe*6V*Ho+)yVo}Uf0L{{VA;+aq=@c==Vx+ z19+N%=^-akx##8qkJKMm`v#1ziSI(#61IaH(dd&I?^)N4yMs?RC{lV}+ND`VLSZdS zamOx0Gz+7gT%90 z3zxK@Cp32o=C*tx)=WM>2@J!;z3ihi{+%QD-&aJD8KpwIoPG??33?V@$3%0HrvBIl zrZlnstdClkJQeY6D0=HusRw)YmvT(mf3o9JF$RuvJMp)QlXy*N6wGVy0_4F^bTh$H zt)>Owa4G2Cv4s<9ublG)&x$GbVKXFQ8p+oqxQ)yB&0}~mXL{^|g2dUY+_lKRslWpr zv&vM=8NZ)vZCi~N4JOd*cXBTM= z+Y47;0{YXR9A`YUSgS}Unn8@(m3_i%t#~;gQiq6%W8thGN{byHe*AF4J z8Yq{#os#;fW$1K(b@Jo)mv-`FK&Jh#i5qa(%Th?VZkV9?&^S`d-s{u$!=}l6XR5x`$?!=b9+h4w5y0gQ{ zmraHuUTuldtbtK0yzx^t`=f#DV~s?X_uV3$NEM@KS9G2G)0PdVZT!4Ce$`l>a84;1 zEr}#P;*?FeBCn+94@2|gAg?s=;tabCk6te5nqZ}T=L6beR4n}XNWC_9GU-x>s$9NK ziu&&u8qY~mK_Rcid?(h5-;7yw?^LuC#U8rlx5rhw57L>#tYu&^S|93;mxV@iv-6;= z;VvPCao<69@b{rK0L=Hrx^Jk8#5gy+pI!252bjs?us$x#9fjMjqMz2lx`=kRa4v|Q ze49Qd%eaWwjlb=pjT}M7_C2GYocIaU>h4i&hxddK5vOS1bDlD6C7WLFhQypsLt;y} zcndvhThl?hdFg>Yda@t<`yb@cIw1fM{AZoZNJ1^G6l@94F-iBR2HbK73Bvpm5m;>}M zR_)Yo4>!$Sk8vincV;q6JLG`|#q@)M)&>|iP}PFG*28!bkZ4{0<_@&Q$~HrqEWWj- zQk`T~7di^m&ak_;L6I?ktjgExp`El@&7QFmVkO^>hTX(Rx zv7%Rg;E8T5;rEw}H+AR{`Xqv8F5HU-Suycv|4bfVK7W6IgBLUHkpwzeUPyFZ;op+# zx&h@hE_;0Nu7E)dO42kap_y`h34{Y^f_9QDw@a zWST0LoiRY#GiYkdu;mx*MB=O81L-}TtFn=&{?jRb#;2cKVU=)smM#=FTgn**X$kD=Q}}S8MXRv#MAUU&AW5tH&0eAbEY2PdYN$ zOhB3S#)}V|em%d9KhDO;;(R?{9>O3CW)WCQF;Au%HAy^PerxsMP;p9PjT_ zbFu&g!1WQY*xR%EZ{SIn@$;#_FP&xk!+URo9g=fK`zl)EuuN6QqM4wQESP{z)l1eI zJgvC)#H3DO{`7oPa=z34aAu}asZS#Yd8uv#sGdWw5L+w~1DF2be|?>t7v0Lq>e7?F z>-Cb>GVGDG8R!|dP&8n8y8tFht^l=j&QzW|vq#4M!cA$iow_LL(1TKee(4G`x}DL_ zC3VIEX@~U@zl$y`Mz`0UARk1I4y_{M z0y!L_(;h>c#F-^_NvUNb;~L~u5`J@V=(S+eC^8&*rW!y^9uLwUgMB4`)W4lbc#I=v zeka~QA1#zpkU}?KCGoISCZS7}=Ah^f@kZ*8LG6>WJ?N=6d8afT^+lXP7eWT0RR=on zA@d|F@6PxO;Dg;hq?L`-GGhtURy&D>Z_H_!Y1juN;Zap-6dw?IB37kzsLrp0VXs7m z-DAtYc}Q=eNQXL9G@~Ibm*|p8gsG)AD9vynF>V}}bdZpkMIN0ho16QFFG#*Aaz5xOof+~v@ z7QoY|DiYZZp>^z<0m$nQIKEX0(kqK8Lbx%GNXl-+-`_r^vy40mx{g2!z%Zv1z77GR z0;?SY`ww>}fommdmWVAXs=E!IV~^eA`@qTRVV`$S8CP0JRpUKO(wL_ix8||9k5)~l zT8vi@qE(~MV?Cw3@<>UveU)bD*z8FsKrFqc>H0v;Hq%%=I9F|Q)m9k%9`(|FJJsFS z@ylONOi=W1@ke;^p>=$UILDUK4BJqxm2VKvu&lW^EoSedx4U{uo8>2n^@0rZ8GLV2 zbzGc{B8>EC|1laWo4j{p)k+qho-QS6gp)vS5TqN!QhJO@#7?D`NgB*w_ zN{M~{|BtV83eGI*(r|3swr$(CZQJaiV>{ikZ6{xB+qT`|Waeh7{;HXCv9C|;%#x8m1`&d&Ek)&t~UQ%%`9gIdI1X zYy?eG42TwMS}6yy07^g#$7<4;a1GeC>@p$hfNs^n6Lxn{?CK6#eyXJn@k&UXddIKx zC<3BiKfkOd)*YkwTkjuaUmAU1?}pl9^_o6pF9y<-TjX4vc0dNOh0qy(BEK*J#Oc;F+T^RCZ0J3D)IvscSw((c7mxE z4WmgG3F(6ncQ5z@pP#G5xg}dOydM;xOT{jWdf7rcp1`FY4sxu;EqfC1@dBQGy*K!B zT%vyxlxY-oDc016pQGlNH8+uKVd3$A`E3?vml!tV{FOZ9pK7r7vvgkQoMZrQKAqEv z8&3kj{Mvj#da`urM;AviRdKlZ6__6f1 z7|23cLTyi)kUHU%*=P4sz$g2&2h(`6Y--@sL-vUe#|7EI4iV<09YgDEaEaCJuyJAy z;c6aaPW@kr4WGt{xk`EPfJt;NFDhG?l)5}z8_PSXxrL5IQb_aI zq@?Ye{#?h&f!*oG4ND^PbQ!sWg6UAAq>CwCMO8$GpdK#%PBRwL*2iNvS#i8CilQNd zlk0+T7c;{~MNeSD#(5_4Ac5hiW3?v+PzX=tM}}iV(g>}clvUX*^t9pR3n$#UIqmui z4f5@5yY5!adQ@mNfoix8EvsmdMqNhtEsoW8i+Qq%h}zn^VS@^%$Z9zm+g_8`WSC3j z-GNv_m`M5BBg9O^C63^M1qHT9?sMaCo}Ehh$_#6p3z17LZP0-3$mTa1h}=YVmzxRf z2nCYB?=8=;Z`$e?%nQ>)Yu%+p@=Fsquj*fAjLJ||KnucGiglN+6T0tp6OC1 z<;NCRVw%!N6co{1$`x6vgkoycJEo+TaF2zL1(iAKXD4lt=53Ps2bYZ7Nfahvl2=PN zBnDQW*1+=gX9#d4yPJy~bX;$nc^;0G-YkribZ>r}L3R^K_V)n*2^cQ|Sek*9=+bX7ZQ(t^lqur-n z3S!wVIO5h@(nJ-UL6J?t``uK2yo;yr0635OGKYhGwO_nPB!OX^aH}Mp#z|OikCQk>=V*P5h)P)szO#1^Ck)o6Er9W1FeQgQrzV>g-R`qIFJEmw{t2W)<`? zXvZ=SgQ@i=NK#M>G{lgK0l5HUo21jFRT*_vR5%+;<3d=hL+2hDe|P=PFvZ6e5Wxhe zoWxbh)V{FZ2Ww7VVVB>9ri2Jw6D(8%HgfmTuwSeh)6ZH%E@+|7;QWe9hQ2^xMr6XX z%NlwKWnLYyqG3k}r5XPa6U4;k@ROVRJ*BKOFd#jmP)D7#Co}`kZfvZAm1Pu)yuko8 zYKHERL_^D&cRG6S_jW!N9bq|VqB_a#-zS0h5&y+J#5X8WCOm+N%@ZLFpBMATtUFyD z3~87QJjGNFRUV%Lsv7_85BjAt+B#M%B#{E0pa7Q`7@%ibB|LMf>`BNeSg)fWjdaY{ zUOR+BETy4@SRbB8rOI=0C4xk+iiglvrg79^lC2n!1`5qHC<4%B`w{XL#ZhmWpo%HG z`1)t7m1E`LneTId$ShDw%S_5U2NG?=kNZUN1bJ5$j?&K0LOZ@@#>UP7A#wjUm57nE z|3i72mqo^C8MKQz352c~o{1GUOkfkbKFp3#h&i?{k>gg?^>`-ef4{%ic(Tx_xxk4S znA_v^`o{kHL2ns2fAvh*$jE<&0IKDQsq4nwtB_;lqPe=O)ekX(#*uMJsKPaz&|kzm zn74H!J%Kv1JHQN1_%qlA<)IxoW&I>A|vwFI`_5sOfg31u044DW*pea5y9(K+)MxG=i3zv5Afaz|a>) zVIyWs2HOMQ`gK5+{FML9x18PbG9IH(|q6Nr2R z4W86CqplQ+M|pzK&H^qP5ue5Cmw4dhWt5oM(9+?vE-PQb`CPmuZtuO=5SA7 z6srU~jXFm3hbX+Dfg}c^0L3U(V$mn)$|iZG&H&O3y0w06u8y-Rq;p51sO7R~vO}u@ zhBXMgqx&dt45SG{7=WvPp?YgQ9ppO%8l?V?`zb2GhSzp`VVkOU4XyZszORu}(vW3< zz?0`J>weUYqC0|lsi~5_&SIJ)*o~sDx)M(?rpm5bd$e%>Oq(Q^ksdjM$wL80v)Hvh z%Ut0Y;&QX@qz^0wGT;iqiLL+*Hh3P=1rM$)aK8D9z_SV$Xj$!yEyeE7!YvK3j73#~ z=@6ngV7?vVmtbG@v~~-C^WZIofwb*j%byXmZ0Q(vdRevNsTl05#rBV%5aH`!r5(e0X&~^hQ??2Hkq;y&SE^cPrK;1Fji?@6IIs*g>V#SiIWbANTFJC@ zkrML^XE_)k*#uT@v%nRP-*)wEzPh|vVMxUZ*%_=5#VjTl{xwp>Ogh=?FolftaiENs zS74Q!=xm`%h|$pwNe_(7O=9VBz=-OD^@O<&`O;GSB3mlMz`_Ji78=#pBr67%u?hZt z!Vdp+1JT!T_1EvXBn6%qyw(e--dhg%P)0F;YHc28$&`+D`8l+3&HKl(*`Pfz4glYM zP`JbR8{v*(By3K~m+m2#4th4!gEEZdSnD0vjUK*ejHL zD!9^R!o8NTpj%iUhwq9|?EAoE2YhsRW|Mm~ysF}&YEeFhr{B+zS4RpF9`sKrK9dbA z3rVW}4Y7eR$dIPlkuDbd|Joa=H7DesX9St#W1b=8>mEw7v2*pCqbuE2C^4 zm%gAkQ0!di-voIx!hP$^Ty-r4e=IYd2n2rShtv&%7ge74v^&v^Lkpt{4V^#i+kY?P zPO7R%ptA3pv-HL}U5m=0D??z=^K>@+z+{7>ytNHfKT0)ZD9x3&jf=3uY5?RWW@foc ze$7c`xA50KbewzL44Z}qDtz12R?YcB*fXqIn=vX0k0Nfx`zROU-N0bY;?Hpverfv8 z8PB-Wj5*AIj>l5X7=H6t$`eObuDTf1dAOoLX|FTR*z`P< z5CV06Q@=z&w)1ixeLWtRzeRAz{Bbgl-=?*9!9LZ1KqyN%_{wXwm$g}EQirXw{JzFX zv6@{=(qt>iO+<+B33fYC%DNkzQ36thN%v_C$7ns3G#pl*PPVm7DgjOD1ugmty@-~} z(vM)(V3B~tDu+C%a`q+WDxydhqwGK6PI=Ed@RBH;DTz4DIWhoZqHPT0x;1tnb+oBy z&7<1i?fWV<;r)uzb1J7f0UVTWbs$!y9lo+p4tlvRi(-0snCvjz#YUinxf3B>sr9zk zLDcSrdb)prvt+F9;*_in>8(|Oq7#x)`O)_G)7B|PK=8wK9yKge)~K~oPp|THtsijK zFQWzj+K%?me?*fdz!#c_w3&3gh3rq4eN=_+F5ls;iwJc#^1%$+&DFb_8O>vhqho00 zzY7Tu#|#KJgBKq`5~dZ-hIpt^^`t6iW`IV+aFiQ$PvOL+LO=6EPSiAtD6H>!tU#hF zqY>>WZQ)t4qRTm7t7tDHu16`0+xD|Rl(5M}h~dqhXsmGeZSr(>tkGdOzZ}ySleMjo6T|MuC(4&mm& z(z`6#@OS)i6d>aFOt*rMssBgnA1~Z;2r3FuOmx%(t{i%j0Lk@4t~C zuG?fM>49ez;U-=GVY-hDb3b=!!%_svw{tei-@^Td5SUUT<#h22ZgPuuJY-{{2*c}~ z&>fbWhO#QQoKS1@!L-a0iI3k|*mH*L9+B*>e9$?^3kZ1N(;{k(boo9)Zs-I?CScql z*bwTagK;h5w;I#{TOzrj7eX0SM@~_eL6r$0{n2DTXSod|DQJRmPzT>ODIh#3zr4$dM1f*Mgg4j`)i(=>QPWTb2S3!UIZf62$N`O!L|&0u)8w z90VolIKH-rA4@QZbB8^5=5P@GO({RWORw&EvZ=y8=5lFJpOkLtSn8jp8Vu@L6o&gG z5uTkPy<+yUJrny1t=Q3^iHr7?9F%ecN_#*!X*-Ln$3pYfWzC}584yQfr;NMn_&CFp=HLw9m-1JqPvHII$-A?=oACc^amjc%1VeguyC zAM`QRjSVr`rj^|REhOYZdTk$(|I@?7h>&nxFnqh0Y>lK!ib_+u?c#n zL3xd0=GXn<)P`lP!T#Rd1K{)3mhJs|0jMh0WPhaNDP6 z80_e?_|y?x&+5?G0XAvnV9O;hef2-B0_bHP_2ea6I$q-C%PyDW7<`Y!A z3)T}}F%gsx{X$t5D?Itz%OSe992*I#J?t1Z9GN2udxem6FU`T25FVcIBy@W#ZqMA^ zCx~RK!-hB#K2nD=i)p_O%kRtJuwaLMHJepWUG$wsr*WapyQXW9yt^`Ntc;FhE>zr_G4f9;o=8(8)M8$_*;8bb(%%)AOp)-Cv1l=3OR{-4* zwcj7HBncH;noT(pWXI>odTb1i1%8w%jr2GsqmF@oc?#=3w~XOUAF(rg8QOX0%#KON z6zMwfX^3g$7Nj4`3dKJ(CEZ;MG!wBDpkaN>x!pSj`5Ublc6v9D%@(20xL~tJ69cd> zx%)mYTw2DMrd^+udQ7Pl6wt;Axnc^@lywl_=Y;hxp3p6F_S16mbZT)T+B6hr^D9Z< zvCe^z>=Kf|Bqji^a*TNO#2Zb0`R`{d)oidH+?DxQTdf&fo`jLKG=8serg9i}RWD|$ zraia~(;)JM7jyI9A<&^7ZaoX?tXT4s@-ZhTh|yO=Ts)$xpcsf}#kG~V8RkBYb^n-7 z-3|zBSYEhXZI#&GDV%0)79(wD=1wMDLlrg{?d182RcjF9JGw=a{Zp4*Z3(X*m91qs z2KI3%EkSh|r>TN=k;zV$g`KPf_6G=`1(v1g zDSz07LHe@FO}e^}b-|2{f;vVsx9)ub=$B33-0_RZe3~%bn7tHcUs9p@hmXC`rw1x38%!8RLF8@ZAk`wd)o{6BeH#c;#G=4~DahX|L`J>%Jrc@W+ zF$!tl|00rz2)b5KIy&QEd9qj~+)RG5smsix;eJAKTU!~ctGoB2f6=2l0j%MdLJ9S6 zED2oR{OXb6^MTILSO0Kwod6d>?nQFg0ronV{xpDv55?T^J29*wIVVc?qCw3S;Qip^@V^O&~IpVdX+Y@zc21`&IlGVh3;pcLPaNy)A1f$d!I z>~NEuD1HWVyL_AI9LFR=I1h$QeBh{C02E&${z|*t%Ho9S;1v(^)?|NHoeY5ijsDS! za~^&1pyrwQnweO0qopRtzewJsHU7!(4nbx3k3J-#f849RjhreMk+R0D!&6~^2VB;# z<%BPq1NB<`*j3SV>A+)!W!z<_mP5H6Qw#IceAYK63b@JZm*@sPP?z7R4s9*ET)|yw z!F<9PpZ_kY@e5t3Nj|?^DhLD1*D`^y{z~n$xZsE&(zqroc3PCSE}=QvN=1cx9v~_j z?p6_`R;p`v1yM}bB!}ZaCQz=T0xS8wTXy`ys#O57p8khy(GhSB$VuuwA`hEBfZ1t6 z`sO>o|Kmk0L@Eleh@4P6GP#IDfL)=#+KL60tW2sG>0E~bvB&$1-Vl9vLgV|qWp|hx zhk%p&B_~U_bj~2cqU)ro{Zth(t!U}WpO%d4n#=w>pH}LVSr(w?djo&7KH}04D<@%1 z<}o6m>=UT5o^(^;^xl1vU;Dc13DZy5?}tyjYJT@F`SlLsL(Iu-%=;EMW$_LJ(v*Ww z!73T0QsZ@JtEIz{Cvd%J+TkX=n3*VWu!Gm;VfQUK{yI`0=(!&4E{6D>BCfV^Ik5BEz`bn*D2N?H|BZf(3ea zn`N}5&+V&V&jn>7=&?!srn%qlH+!ecEX|Gvv3Q4Nf&@Rpu2qWqG5WwJDf56 z^@?ix+&W~1$R1~9XIZe}xZ|N#Xz0FWyV7?gzfdqz#f$4y;!3!DOI22gkhDIW^bz#C zcbTA)C$5L5e-fgHPEy@-D*A2R2Q5R|Dncb1A$TuMATXqH-|Z$5+3sQqCgzxBA~u>ILK+{{(|5QvwOZo3*UftyqDpt3!qk z_{8~+x!YH@WRbLIw04A~38BY;m7~*rRS^T$F?}FBeV*X^BWmoY0Bea_r4u1I#V_Ck zJ;U;MOq!@-Mo2@ePTs0dYE;70&K&nk$7JdH!YQ4=rZXEy82rIZE1@wg=LgC-PQLw>qiTLp5{r!jk}9NEK>LDHrRJR zK>&QR0T6s}pK`$8iBlgK-`A8(!wpe=%8M(oxd^_?5sO)hg&ypGabvv9ds`B%5kl(V;NI@KaQRq)Cq65 z7Us_7iT0=SHIj}}$&QhiC{qQ-{3K{?3XgBG_(# z;?$seuWv@Ib9z#IVl2;g;6 z*VHhblr+YiimREcf~Z13daegudGoIshpAoTcrdw8m)CG$J)ZWm7@fdFit!X_R#Jrx zg_MWzLhc(ljhQmm@hY}~#q!E{7@<`S*zB}${N5g5l@oF^?92^&M=;LlAZ&$@#FiEqyw89`D;P)cFC@Q>XbklUco^p& zL`vds`IdEr0j@9XHi3E2<(aHz+&KYhFh>QjgI%BN-C(7ROz}D^uWWZ|HhcK}=!!u2;!lNtwM_X8AdndQ?{k`neHph0c_!z3Bpg zE)#!y``Z*_Bx4iQa&tg`FeT5V2VYF8ym5B+PKi@*rB;x>?`LBBe6iviHAqj^o;Kq_ zjVRI_aEk?KW(0&$EXOV$Q`q$M<$*0AnO|z2nkt*c5!@#tMbNorpHnJ@BwYXHmjt8m z;sDiqa%br+Sy*ybbn&6^G=Bi$onKU&!3uG&w)X@+p`4OstjbNpUhCpp!d~l6Omjee z7-9R6;kcsyD^SSzG9VF-CZc;!p{ez<`me{CTULq_)9474fV{=k$)Ka_o9=l)J@n66 zJ&)m2*LRr+3*S&HA;=Xb0aw{*XTAUQcg`8iXl5tfqlsCCw7aYdJ!m`Q;WjMlrwFH? z^6lVurle%dizyNBVHIfXF8aXxt{Ip2j`^9ddW%3LoCf01hv5gt5%l9L zwzT!_jY+|f{&&`%cM*KnngHMT^lV&FIEdL={_pvLTVA_KqwCHU!KiRb-}zaDS?1#r zxqDU#gkw5$aKoe)5Ei_C-_RD;^|io5E3ZcYzTP%%RVoRb~Q+-hop>7yE(B zSciMD-N`ndu;>f`9sjTII_7EXG{WUbX8c8!7gIGoj9=H5K?};@{!tpP zsg}*U+j1NU(9JU{3J6T@$Lt^Q_D^qwlllp2d}A=CR{|uF6p?F-3P~7mFYX-a2G}(v z_JU`vo|AIGaFLL`Qafa5{JvrJXYqKn>;JT>Zf{ToSngf->|cFJX8z!WhBs5|YboCK z+XsAUv#@spc{gsNg1&9ILW8qGzsdH#uKpbGGJap+hv-^md&^kRbY>5y#TKY&s~2XXIA*rvZq; z%F=x7|C1l{$W)N$Q0%>`Rqr|1dotgR!6(2{ehi_Rt&pqyc*+m zLuT+3TU5xxDz!NBchmOZ!*OFxeCBdqRYH5hpZ2t{x4}H`7do#pEB<|8k`-lSUGJuI zi*@@(4((*_$K6DhBIJJ_C3O?(g1)}pl@-mMB4K3qtcB%Z^tWl_VL10??8yGgzrydk z+6L?JywbbDd?vvE_zzb94>uU-NB!_W55dpsWbMRg=pr|SksTJL*pAB$(B3axGO_S9xf$F&_t zc1tFOb&0d@igPy`xiH5HS~)p2WkvS)=Qbn|2$9r6OA-a^(q#z-G+)=v%k6Ex`j5*Q zueRl>CB>O;{;7n@Hu2C~nbKY7a0w9X(;|0nmPoEnPWwqkJ3X`TQ{mDd0bus%qv(=h z&-vw#Vc{Re8`gv_etXe>cc=anX>Qqt38Y#OSw7RzsXgQEt@eac@5RN3dd2(xIJf>d z+$dG-@qNC}hUWLlxp|GJlujdmkh^cyG*`w9VhZHlwm(#q9y7#{R#!wA<{NLBY;Y6U zA~QF?4YGXv49b>Uk@lvR6&+gmprMcUqkr%L89eCxtu?ORFmiMo^t-%n-6)$Mw>#&djT5D71(4U))24~dQ5MtK)18ZBAJ6TJYi?v z?AjKPlS7C%SoW_0O>!Nq1HhyAA z+~-K}^Cwu3=ehl`LIr%YrWif$d*4e1|6rGn9xeN_5%1l+MI`Q0E_UBU7d>zPh-w8$ z`UrYJQ9Fd$8N{_gC(Yj5Is*WJPdQ(c&2@(FtmqJWQLv4CRhEvwDU-y!Hi+65C`HbzTHTPGhI|DY3x(Bzz ze6mVZH_BzbDn>ej=807;0AV+wC|RI3!RzZICs`!QiuA6ZN|(%Ul`{A^KRMYE{7JLE ztv!_9O^h)985ZONFDuR|2n*GY9Y6g$d23iwm>j5}C`kCtQXTF7OgKnTL`jx`{KZPT zMX7Quo>)&;K;`2?jF}E1SKpJckC(zknGGyNf($0ZL=_w^e^W9$g+b0Qnu;kYNwUBE zOM@&bNdh-a3e-`X5sUkrf0=D?m9rMLI~j($H&SXkry}p5rr%U3Kzm=ECMMe zSYB@`#HiTp3-)*lP=BDb?*0Bw9&Nl~&&N$f{3$|xGNdCml78@?Hwe{4Z zgdni)hfy|?a7n>qgqD4rZ*?B-CFS$n$Sw!cg^P9Jf-@EkXQ4n0aRX5#evyA!mqsH?Aa@+tzqY5L*x!$MD2m=8h6u^rd58!XO*3vF4p~}k zJ4+1>{`a85Ywk(LDvZC`#n9N%q^aRO62K-~o4rVfvdL=2_50esK}3QlU#vo7r!o_m zHiu`MOHh+Q-_$c5S27?kj4fJ{pK{=zq0f?*&NRSYkYoEgKNVVUn5Eo#iL!+&PjS2+ zuMc_rJp6WEj#5v}b5o$g49~cap|eTN>MBylBoI;{-}lp$t>qODC@7TaA;^wr|9lKq$5EEO5#<0ayHu zNBJA{E@O7b5}((ZlVes(6)A2qy|Cm(U~2L8QSO+OzzJ@9E2CxzG{E*kg?Z$4D_xe` zV!Q)23($IB;Y3VyIzxYSs@T|+Sz=Z$tqOCcSR-feF4(>VALnJWBrlMn$ia}WMVir8p=!*6WRqnYe5AC zLvV|Ml#N2%Dj^0=h!z;4v%-s>rd`@9v8*4ARu^A z&AN>wX>x(C+7l=Blo6SyorpuNhk+JIEk18cj1T88o`8ubHS6Wa1S6=gsA#S4lENKF zQ^=4Ucp9ss=>3&ZIjvTFAyh(!n^_tM^0Svrp$@;>0Mb#9fdSc4Se3-b-~If$&K^io8f6^e4FTVsN|?5YkGL5Pqb8(C-Lp(4SC4qh)eq`5J|HLcZ}m;(Tq% z!V$UhM_D`roYDHmP883vv6Sz?l7>;7m@FrO^L~v-VQyFYbs!#*veMdFhwR*J=hY$w z)xvo|64c8L6-lno#hbzDuk(D>2W`~fYAm|!M`_{>OYSW@Sz23N-;*}$+ybq4o2e+d z8-b*YoRvx4n9{vewcGu6@poHyhgA&*>7ze zJHe_@Xza=b{S<5^ZvnILpU(--Prvix?ahNq^I%sO^($5RS|jdgqN|?!lzekMt!!32 z7$cK@0O^+mQ}<4iICG`=aU#hCofmL5_v#z5bdp+QYWxM5*6POFyUW%jo-zk(ZX@@; zjDP;*icYKB83T=Lquh?eOF2tS^x9kuVdHkPe%Y>*&z~uN{ZUgXUe7Qs#7$XkF%gVN zb!8qHdR)UE$i8nu$deF=y#821yE18DxpKDeo2!r1k8Vq?dh?NT;@F0?X zmGL3h9}tn0fR3Rk%`ZqhT1d{IT*lH!w5A)1ERVCZgB#JDP7J zQ9!9jd)ysZI@=;Ucu*CZsZnNG+8%FGOl*{+jzOmkYZgxnM;V2$h}qGcm;=#z`}k|Qdezu<*Op+k>I&U3r6Z0$B>>T221-WTncSGv2~Dl?-P@*wZ4-A z)P#FpoX#O^{~jlwtxJQ9vQ|6$#(;8RcUH>wlChC`*mJHA9zj^fKr#DjyDlzh`0E}& zAY_4Sz;e8olH;T_jw8E0*gFst(e62WO7CSnIni9lbjVKv*9Rov(Z5YHROF!yFFY2Ed#7O-M4DrmmmUBMa}jcD$JRQ3w6UPC@fLd@ zECauRTztHdFii(>IuhvT=O6<)`fG|irRS0rU$`XOf|>xt$oUmpX~29z$F>W3jQIE9 z#h9OfjlFhV`tJ`BJ<`%Uv(th^N1=B)#}v9QG)ciLSy#2}&R5rUkr^N3W$5d@v>j2g zw(8Q}Xv`a;&p3tG&yioan;$oa-HFk=9bU@E$Hy=Cb%e@AR^0C|$JJ+p%A=a36a1QD z{j1r5pZFnw2$!=^KUU}Mhslqs8AesuVub95)ln7t;(UhF17rMVljeZfN}rBmDzDUd z$mNN;S7!RSHnhoVS>NWwKgr;;u#F}XGx#KnHVNU}e&4o_zYt_W+?(lEtZSIq6ACa2 zAG15f724JaK)qvbZP8LhC~ zEeP#YinBK^GlMui|M`H|uFPEpR-UO=BrS)s|*6w#7~vyssv(;}hkn zI}<|u`uTnccMA81Fop+-y#uPTz_*Np?RP{;wz5Uu$0z_7o0!{)*0j3Z4G7)Hc&=xm z^_6{Tpt5JWK$ojV+Ee)rIEY#HK$2UMf_k0p`uKn8yTVF)7DYNi{tCi|#q-F4Z)Ir} z(an_(Y13PIvN?~{%OgfMv>_nTsAzMXyHj2~lyKQ)e&In@*O;Qg7!8Yb$JzPSRCT!` zdHfv5WlA=yV1FK?C$6TLe;(^W9=5LweH4{F6De@oY9$Z!`U_wdvaP*Tw0|0GQUAj7 zxfT+#@H)l0y4VZ|hxKVIF0KE%=o33ZM9Q^{^?ccB!fRuVc1iq};VX)?F9eync4iVN zNCBY;)3jopkobP`DO$ru@Fu&?DxQSqD)jobg4Rd-vgwBiE-49&^5sTGuoV$r>L~oU zrmz{3@+|y4suXdmeK;rZ3HJtUEjpZoGlgi=g1E+nU@=Lg@L0@xWk_sBp{2_aWZFi3Tn{e{WAN@$QfAj zeIXHHc)=raFYebIHr3|oR)H9ycAqYkkZfQ3Z%%7}bwSvvemw&T-n{?p;qohiDl zr9TqydQ}d`rGJ3^#5~rd$0M3%9D4lB!rMI^wibjSnQF{^Y5E`<=5lczv!frrzHaxv zo5Go(HJPf9ZZC&lTevp;3yD+QWCEeNyVa`*j2>E1nqBSqay%MQ-Kg)Umi6sUbu6SR zGZxA%a`W5k=0HMWhN6Kff$JOeu@5wX0Bed0v2ZH zm5;+cL$lOVdmk)n_&xSd1c%BL99FF#xH$cj*`9aa+IE~CjyeSh?tAY(5iKXO-syLK zo(sVw#ZbZLmOCEXFPfr=QSIzA0ZL>7fVV8LE`JaRn*WEzRDp_c^ zE@*CT)NM3hxr(iE2x#DKgd3L1ap9WJgXT`vPOLc{oVgs;EnakAmu1eOdwUCPF4`d- zciiQhM?|c5seI64hYaIWBoytR&;#vt{E?qF3)kF%x>5sb7IW99{D_#UGR?5^_|5x~ z)(y1>ar9eOC#6HM( zlWrm0RGk0NonHi@kdx-$WbEn*Adl?ydO7I-EpnJ2M8u!09gLY>h}iEgAIj{p>UQUr zOwMgjcUz5o(*sty@@-064uf+C%uJ#c90Z_Gf%vl@hS?!2q^JBdgRH9$7&6ULvv~Yn zS4$vhvm@bPT)noFcV)qU9VTzDmiz$reZ19w8GtePp&MNegmi>!b*3cqP#M1WsP5`x zHwWM(h8u0GUS(|zq%U%96mfB|OdT2Xw)Ch_Jv}~Qb{GxP&3p*@Lq_^ph)W5d@n;ohLPqYi53+Mxq8fd6$7pl&L z;>>b~n-Odzd&6!|nNhO%Yy62aAA%FOF*I56uR%lh-1T>Fv8gq@AzlZ~IJJR$^VAdL zppYCd@4;+@Ab&xChXu~7b>`gbCEOj8(p5m@y4tq{Tq_;w^>FQwH-;6-sf=Gi3|<1OsUIwwB7^G zW|WJNlKGKlpp;oLs8?tH&~5c;$$>pRh{Wcx@W9`ja{E&!z< z*}w}$k*jfw$&tjJ2(;}pt9aKQE?UJ;;XaZ2ESa! z?bYFm6^I!0323$tg!4}%Gk*ZzKG5h=Hb8|<^9HQr{F20UZ6<1=Jz^*aG*^ zZqP+%i_@mN$v9U8hT`v>+aFmOvC=swp>|`zr3+1`J}tJ-SG;Y__Hr9xj~hnH zTnKwhB!R-;wNEc^FRgIs`dlo;EGQF=;G`8-`Gu~JF-XvXyBNL106=SNmOPAvhmt~{ zUL;zbGKm}k@0zP|a7M9I5Rx81^H0y>eCK%a2sfBVx5>b6ePk|bO^foJ(Z8A)2zgj) z;nwqviMTM$Hw@{cWnJ=*jg!>HP?@44Hc+d~&4Nb4eAFWLN<;G!rXQ@Rcb(E3HSvRQ zn2_W@PhL$|xvxjkoagw>L)9}>CH2XmUwkT$Uui?DY~bYtj|3^9TbOg-GXT=@4*#ok zR^}m_hpJAV5Y@dO5VW6%`=+p!#5_{(+=yTq-AI4cXF?Kij5NTg`===ozfE)D4z(Mn zs93sZVI;VJqDO&v-leT7$S<~`OaTK^R$`+Z2 zYQ8pbLk8Y3}JlmdNq#v7D2~uk})-~@?3UHRaz){96A!?AA%nEB7 z%h0nswxPjNw6kN)riEW$;QJmzgn!wT;Z^J^Qu5zw8d4q{RO4tLuQp@$!O47Fsfm5e zxRPyX$+UL$IJ8rW)5f}1U0~9xPR{;ecouq9tgBsips{OqW_9>)`mbUK7BmgJHt;2vKSp|v6J0=mh_1Gd)3y3 zq6CaopoSZaU%U@YgAe}%Wkh-8@L`Ut6fZd-m7}qw@p-)g6PUatXwgNr4c*7D$a&GEJVFO$cpFZD2K)en*$Gbnj4vEJO4Qwu!_G_gFzFYwk@FS8@kh9 zMcYmb_SPtC-m*AF=^h@lE17XG@t%b%K0zmP%#UaH7|y3bXNwY-Y&clQUPYQ zsM=N|VxO zP_Ey_N5M`k0Hw=cjj0ol?w7L06rcRo9QiXa`sCD~c7#iCLogwWctK(Btqp0zsz>@1 z6`Lr$2~8@SG~*fpbGCb@;n8r7IRTD*Lbg8a7DD8vf|)Uhspz-n%7VJ0Ez!y7?PTbK zz?|kTJqi{%eSlTS|I|A|`yjkhLI45LA_D=D|DT;17jtL#9}AAXxr5t(gS(40Wq&#> zNIe&tc4yIS>Ri?q>t|)kn_UQhr12GVN+9DSf~96fLGBHU97#pbF11QI**Oox3QGi=?z+{21j@qIU*GGaPtoj z!Tua6p7fcCo76Jwh-Kn2aF?dvOdIs__xj<&$@r9}HW1+Q&vvOxXcc=#YSO|NuQ$QB z;?X!{TFD8NH?IpRFXmpcF~T5aYgk8n6gNy3P+IK&OfI9}Q(XTwMuH0-urO$n!;N9I zTd0`*u%%?%arzwu5jD3_X17G2zJJsG1)i^eU1a{^*etv ziKG>$eu+Jq;RlCh39rkh2>kWot9b+YG|5h(h2I5wy$ z>VhHz)A;CQrG>V{Ogaj0(4cX~GyQS5#;ULDY0N~Bc4dt-OY?;UIHn`x?n!CyF~1g@ zK;61-K?4x3&M0LQwx`1&e)?}nEb^yVG1GpW6`bWsfZNeJd)Nd+jft=y%=gFbbgO{+ z!r^T&^guj0Sc+IBtppmF9YO4p3N<-@0n^-~0A4IJD zO2?i^bmeq^_*D+B7Nz@1<6sCXzm1c{Y}WM*w4dMi@h6CZXuwV)t|4=vc2i<&Op8U{z7`|SkBBgvn$ zgJ6e+Nxb#EhfGq0!Ym=1XZaT;4P@G+HW@wZ^m%RFX7=D6V&PZ!Grdr-YFzCF+h zUJ2-$Lf6dk2_Ns5thAEj1;VkEJFn>6$P<_+fnMp*zf#Fd|$9rX)S5CQZ|J0_S`i5Bez`qq7Bk=>qwW zbC4(MBT}W8n-<$Or8_jA_Gni-iS9o;N;K1>rMNg~` zWcLT`g2=S@<(L!byjeQ0Q=07s9HaVu{5Rh22h>UU#aO7Ho*>t+ze8$H&M(qKh1%r% zg{}lP#bKr2y8#K69^77*?)vf*@|bdc)+lR=0(+os@D4y%`Vx=ZeC%hx)wLBGJyzrc zSN~T9lWDN}n=>4yD2rrCt{#v!6?&FH;&tcTztesB!Hoy^pB`0YCOdGxV1j3SMLf9)wkxeH@L5i6ydgd$w>2i-#&^I;hd znke{suI!on%61aGnjD5QO?1BJJS>+-_Q?$|kRTD=4o7b3V>~u>z3gD}qWJOQ>osWJ zqwL|x_fm08qu{}$&L;l?P)h>@6aWAK2ml3&zg*))Ks9(h004d$0RSTa003}la4%nW zWo~3|axZXUV{2h&X>MmPb8uy2X=Z6!?$S7p62v$C@C zaVXwg7mb(~i(J6p**aT@MKR6GCZCCQIm>I&Ugx6C>t!RVIsJIH%BJw=doDH*Z}Yk- zs`B7aJV}oSA}eQ9?CaNmP-Rl_I?w6h_bZ)oPHuRv*S5;HARecBW z=2b1G)pE7S+g!}@HY*lQdeH0j4$>6*)U-|Bu2;k1!GVC!ysnmFRjktSOcRo#l$>dC--eVw-h@uIxR7R5|I+y?rFN3Y-! z7pxQidY%7eotIPj?#{AUCdJ0Q2BrJcen6B_D}%s@VHFYjTZLJ)WALk8J9B_XEIDcy@7c za4^f~fLpVo9*>j0I64EmZQAputuMH%HPA*~3fU1=f!fR3e2gTK;D19=UH&Jz+ypn84%9vQ+SFX?4pj7H*#^UAA!etbdA z^*0teu?zKs!L8~%fq&gYy95#vAH~b6%-vx@Eo6lFLIC%%+J!d*f%UMtH?Xi0%ah)l zUjN{ya+TGkvO?PG(H|`6s5-_abjbV>I*OuYQ}9x9CyZnZs8ItMh(7&oAtSZ4J**s5XUY}Br*)~>2y z6UU8;b|m8T-@bYNRF4D;XgwwAWA6E4Q8ll}xqG|~fq23QLiAu4x_fCxD> z)!ybgytu8PDUf44yauG@t*TlA6)1ixntYj+Z80S#zPM9!TI7v}NYE4%?#pCyIyy;@ zCli?N>0&*D(vt~1;Aw-$h%}SQ8JEf5a~W9`9`bZfCaFMbqXvdF_Tfa1c_QXOs0|Ob z0$ed2<2|9NSYqNSn*t1wh>&pCIZ-MI1h^;ZX+cTL9tZ&e=y?IJ5O-#|oS`=`gYN+K z8t6FeDZoaqt6M^75L#}4x+=sy#BH?zZc)jJDA*R4b|sxP6##QwAb-pJF2;w3KG+sR}AUqelVT8MG&oIkHRKUSLl-QnlVP?}5pc=z<)& zRj(U?gOMnmDth3akH^iTY8#R^lHM4X4mOS+@!DlRQ|uO>$p!1l$z~a%D2o<^h$dgm z2Wm-<@4nZ|E{5V$irp8WxDPwahkBVBFW#HF$}Cyf(sLe_9Y199r8PBt2 zvAB~Xs1ToZ|Ea6E1DdYF#JxazrGiMS8jp!=h^jPeMIr(`xCF8A_iEd~&kc0Z9>paMA%{ALCSf(1W^F9)U%KVT`<1!|mF)nkEe+9V|s6!2y_a{tWkg44X+3X-hV zDL@lkX`}<2obtbDVv?xHQfLGdVX7?&lS&VQ-7mgoF1?LpztjVqC3g||{n#Nr3F>9l zzQ98^GOc`O4`tE%L-9KYLUcEw-Dh|T`_xDtctdkbcTLEtTd8vbX+BcgG<6;8nLksw z++5Ev9jeqfGwyZ4p3dv6xt0@3vjw8e&~F0EB#8}aV0E?cFzz~E)iyj3_XBwI-UqHe zCP865hHoWM#d!QF`CvEmp#C%vAFNryQlI+0UF0>|=V)EEsOD{bhR4=fd8H(cXZq=* zn@7AuA~gX|UgjB`tJfs~0O1{&M0G2YBRJkmN`2Of{4Z-upur9O{04V!V%c(so=g&a zc9~DJHPAd9U`S$XK#(CY+(ST7tdnQ;0))bi`>U?L=YBet`2MO^1TZjN8S=^Ue%q>s z0tL+A?#+=9$s=TI);P|PTrLvTs@#u-S;JFhqN9v3E341<9qPt`bPnIzj}T>n8NluX zf(0B{6AF|wd6Zescz$CLvux;q1YQ?LIv{Pza+FEKzjtM-nE>qvTX)SK81Y$Zr?;`Ul8Mrk4deo^9C<4!yxxQ__i9}&Dqv=|vM zC*(U?r>s;$fD=^3r*~8tQ2lO35b%!x7BE@|Mo^a&PF%;ORIX;|%D$j*+cAJYO-c-h1S-NlZ3cXM*lSUs!h#c0otjZ(g`HO5t zx4FD>2&WMV6g;8}0zmp@USH*Xy*@xJ>jm^D(jwl`Ug%-Lh-dkGct!)zzmBboA*# zdUv{*z%7Fam2WR=o3S~&wKb!scIVyRSPS@A-P+*?_X@Ay)_PJ=n}B#wic;_z056{B z#rrYdc`B8)tBLk+v|g+0Sj`?veW@TA+EARNPq6Mu`jl={Eu>b;^5l`HAU_`-;T^gE z6dsDl;>6(tvP&u6p^jI08cRq!JyMnF*Fd#4l79!lFKcWXe>ieRWXwD&LxAPsmWu-eb+u_OP%hcltj5j1~WWP2*?N_ z=-Ef5I-$|-801{sC>nT#eal>3e>ImUTy^<+!f16o!2hxnc_+!wvXg->M+OY4usMlt z86DOfvFL*s#@`}CX2H85#^GIcZ65q{S<$&d1WM9#poiK5lwVF zB@76M1KYGcBm#I7J#-&*5|hmxaoe{?s!ydY3RtX*cy#k*i=bghQMZ$3E*HYs^{)LXR=?5@8WkI5$O~h@{Uc;Nlv1WzyGgU>NS)joX^+7U>v$Hc}5u5ZD)#5g5 zdpxCY;1rx+!bw;pOI)rxpTY@Lz_9Qhx3R_CH09Ze+2E%BsE2AEOh<>}AvgWdDF5V~ zIhK^kGH)|_KFThq>9eoD`6E1#9dR^;efemawbScyR$pm@37C)GKuV$iwyGT0#hu7Yv~$H0 zv!cPT8m=`0GT&{zM)Y+?f=dEp&fo;s$2WKvA%7d2!1!$HCQ^Wkx(3)j%IYuKP<(y- zF1#B)uL1y1p z>q8q6fN#=1wwXr$kfYy7QNmgj%sQ@sjg-^?ZalJG+|>$H$}?H(Eg&`usdps}P?eb> z%!>uIWo)i!Bt|fko(n_m!*CwjT3-xeSQHz!DflkG8>%<3J+e2>KsMml-eY-I-hF}55R`B{k;?A4uwERY-(>HQxs|%lxFsSs zH>CXIanc^VWb<4+o|M3_xD4sEG%#e0TPVP0o~Rfqe9D#*k&%WR*{E+Fm9?R;TB8Q` z)N)29^p!r^3rk4jbwx+3Vr856z96CTDhD|nx^_p*zlL3_sG*aH7ATX_aDbPt zv1BU#t6D4R0!!uD%wFU6=76V@_&cqz1~sjg%j~GhkwxP5 zNH{i;aNPpe1lEX!)Lft}Im_BibHu)!g%|Q@$Xj%i%_XO;3-T?H-Cb5QVA#d<-6Ef$ zOqJi!u9BgRgW9C<+(4$;EUA%gB-KzG6>m&PN{iZpk}>Vk?x<&u9w*z3#Lopm^4e7?1Uv{Q)f0A4HzP_ zPKHfyU_IyC4(Ac#Pw+r#(3}^y#bP#vNq`bCdihF<`(urUa9q5~-=l<&ntYqjB)@l+ z2L5mSus08zufhaZ(hsO%enBDxnpQN^Y=!D`IFB$tg1#*xz-AR&VvxlypAYE}qlA7% zM0Y^Kw*?5}iqaR0G}^*jEdx2`EulRYnJHNz0t^jzl}JW*DA+qf zoc*x(0%tMSvj|NuLe0GHHQr0Tas_f40I=jYcB`@Cq3^&kY|%BC8P8 z{ZsQOcy|7O|J3}hfAL7IWmaDnz?$njJ=u~a{CSOb&zIG@)mCJK0Gd5Um{#r}IWDlh zgVY>jmx1}Uc>~0j59Gyh7a*AR;%Hhepf7x^Wj7-xNp|%GX1S>Fx*C@_FE@iL@M=fh zovPvGB|>0o#;wzx`M&e(V;Aq_d z;{==GN5Jx}guW1{uK0Kg3w2dj>lI67QXlq_T3UiQ$B(NOYDuyPD~q8RO=kKhBHW*K z-Zn+Fc7bR^O5BjPXjmQ=$ZVVoc9zI?>} zjE{3eM`dlmJr|B4kV8VuP5neTe|mhL9sO0248zh-`Uvl^gB5w5yB}9nG8rCR)P^ZV z_Xe+0u=8wgF)OZ&FKGmt@9Gw#n_pbEB|0|GNT>d8yz8+uIFbA;S$rlQt8)imS4U6? z;P{WkE`+;@wC+c+n;>=&Y6SP=tQm?oU6@K$ex7SG|+d*`7rT zIApCaNy`ZMam#LmF~aE*OlDQ8j`34ER=0S31gRXiNor!-mKVw>B`QcOhQz%@dSj!K z2s9!~QeLY)t%=h0>FDFx=;P_fv;IGbj1fYQZY}@Jq`1po`S+v6T{g&_h|zpA2X{Ip z;|V!WajPg6xjDbrJwUh~Fz4v0`mubE=0EA%=Rbb^>h*IF{ou!o?_R$8@%cB;UO#t^ z=9(O3L=>UO>mqT)>QO*yWI-}mm4ntqSTjV_9dd!t%bK6)T)Ci zZ}@hTm0|t`r*+LOb%UgUFv^FlbQJipApHPq_6G{#_qd!o>EzFsV7%i+L4o)H`N zF0_uA_acS@AMpEw`cu!^kMI#X=)<2B5oVS2?Y_w8XfKE-!h|To>w;ni1IsRtVh;_U zUNA+RKOJ5K&?$114?jWXF(5WEAg(YV1~4Eh@9*636V>pOXv4m(Q8%Cy1?a>AWG0VR ziD}-80fpMr0IXxc`?^I!3huw{`}$7OXuK}ix49#yoZX-XYt&{_iw?|al&;npRs3Ga zZs3P%wO){h9Mxb&-H;NM6ucrCjs8#isBgs<^4fJ(!K!5)stbM2+6`?hyEry;r-2FB ztyPCE@5H#Rq_Vp2HO)^uP4Hul66?RpTW7j_&pC{{)n&7XAE5hJWWPnuSKR3VYFJ5J z#wLk6Rduxa%5&7lqSdxu&D3Kb;W9ebVkY2$UF7_jA~kLGoN_CjSXT7%nUOEhy(MlY z>~NT{-X;eyciAID1+vqY!~tm2uxqnvN?5Ba&-?qVu(Pz^!4ZenPxmKln!F~fm!f^x z$k1U4t_&XWQERR^M&Gvp;frF$4+uXlbFwD`bimr?fOJbSuL6fl5(fBM?rIJDb=l^8 z4SAW%p7>#)xNFd@j;+d@cV3KuCW1BRSrAMxO9&RQK!%*OtvgM6Ju`KBswuyybH zxb60vaoouoYh9iLx#EQ(TEEVWnrNA==zu9*nkdK?R}~acX@sG$4F6t&WU^q_G~DMU z|4OoHiw?qUu{0xApq1hM6k|`qt68TAVe>V6ayJk*7dFGIR%%UyyBe4hc^T)#^|3pE zwMSBZcG`4$1{}ipxy8C>zxJ30_8>){OqNU1N4{9XPA3{M_5LE!rdkaYm`$RA2Su%S z6iRekp#vGYzj$L)PB9v#{T@nNyOlIClFb;V)9Dk2pF@~`G+KXzCC_cEc6N>F|4xVp zrUVC%bv2Zi>@lN6(Fiw`T{<5gJ-INGsQjrcN0&<-F%Un>hbr_0a?9Cx)Qh6-d18B6 zN@poFi|ad%nTd4LV&}^Kg*8hLM*g~-yE-n*$I=2Qo00$rUKOiPvSrmL?WU<~Tv!<3 zW7lV4z|Br;*N>6y*-q1a6AtSl2JN&9TBsn2s$%pC#NS%0;yWWa4hlg`uDg^nqr_<_T&Vd7gJr*X#FZLs75 zaihH|q*vRoIcgkEJdR->==fc+(h(r(N*5#mIr?azx1CAG>gujULE#+xil=oDn;hi5 zNaoZdnL}~pTXv5uSiO{64qukPms$nBC?ANtou(e4 za6pw2`a#WocNq4v2}x%I@&FKqcnVvc9R;`(#V$ISZgdNhkqh*m=4|}~*w}{twFk`t z-zn1M(&+>phJo{N(cqR6-j4YdEa2lF-gC;0!^ra(`I8HgM7JLg4uk@leA6sVyWK=w z%-nOo3Pl5Y6W_lc?7n}+SL&uiP~a+|uplWgCN1D6+R0!1PO?}Pa6s+f>-azScOBo> z=?rB${;nBIC!=6Zrg7^^=DnZFcO?eYRVR?4_)x7#ff>H?xqkC9AL)HFhWM5gJ zX_5|W4(AtXBPER$qiWJak*8NFatd~0e$-R*EnWJ$x(Td>c4ljQTTY$vQP5GC4Efkj zLYpwkTN=fr2hw0pj>$FHKI91311!*@O_sf&83r9=dP(?hiIKFj7i?E`je9IMYPvm? zbBE$vG_4J-0S1yHa;e^s*8n&OL!b0cZ{JCj05Ec4|hn*Ec1-Fs>KOZLa|g0Rl9xwX{s&(PL*7A!?#$bS&d zloPS4ai?g&BXwL0eHQ&}ahu(-@iLjulO{}sb3bAuj@`N&RUbP#$k^3Hyo^@%xJ2Ok z%hTXg+K=G;NU1-t1n2&U9gSY*x5_ahA-4lKMC`H5y34dOF7{H(LCGST357%W1X)CM zgKN)6)n&c# z46F@*+Utkc84pLJhjtVGc4lVs{P?1)=k^6*XUEkpbFY5;H+m20#jZU+vGvTG14UB$ zm{?c@dqp{K%5`;1t|FpP(H$7yyN2`d4CU|i_@Tl1)7aayZS|eqYb1jvZUPyruxBfD z+TEiODt{JTA4)ml>F(yPx!8z9Yg$i`a(q^?@fhh8=J1{dfTj4~A<$>?K?mc&D4)>a zr~X;bk>obV-+0z-jut^I>F`veO5q5tZdOiE1Y9ocPYiX;3h8IN)QjQACQuP->wWn2 z;ZrZ=Ehl+oh_5?hiq7gMIlX&I(B}g)lTk~h?T2kTd{)}*sAsE8|qc*I+0n^Rcg6`ZaL@&>PyO_=~XTR7f zKkpI~<;%uG(KStk44}+NXbm!HyeeUP_X#q#X(94C&nb}F)AZO{9w(+V0!ku~V&n;>xXVz{L(TS^R8{J5E-i@$lwuM|KJ39uR(vP_3Ll?hDV-&yh{_tvpe% zpJOuQ*W;-yG7JjC6a#pqG>_*|GxOe+Q@| zoEI`J-!G#l9NNGF(qhh9csv-v|Bs|oJNfK1VvUAZHXMZsEN!D&+fL8S2yO+tFpg_6 zAZ)iMs&x%Bb%XX?#8+AIPToK{*=LfQb0x#}z?7}0_Sj+#r?%4c=Um)o&}GXb9X;`} z9!8FnF@c=4j+|)kR#tSUfLOI?)^ofJlGl5d@>Jgvsr_&K=c@2FU$inwbUNh}70(pj zIl+L&=(54k2L=Y|$@tvb@6!cSY%|6f#xu*)N~mPdID>SP%LzDO#-;G+cl$B0W)NTk zGFKb2MDoxzB(cz(vAfSF?2rTvm`F`|x8;vc^9)yW==+FRqMm2x?Ak1{hLe?#I=g^IMmAo7>3bZ=iT^SYR#4(zJE-n>(T1enHp+oM;yW^(=z#pH)4522G!`rQzp zrYFbUK-Jp-?o$GOjL@ID?oH}@pofjAXYIYus}Q}ruzXuOBvJMRIC^psmpr}0C*ch? zr*tnKRhahNI>F!)0|iJ+E~vU$Hry&0{qMg^{4Cic@jc9E zSX}{v0_swDCCvnsbEUnGMl$*a5?RHw#b#86#3{w_2!L;1YLxZyb6~+{0A6_NF*g|X$M)8_k z>>LMM`0E&2ydj9pxZ?REkm1<)4%&npQjrNms{o`97O6Z?QT$?uJ$Fgfql+wabR~oJi+Y2oJxV(e z-+P}5@|SLq{(Lo$D(d+vf5x8q^6Q~Y6|C(qD1sKBS5Wiw^3@x32U`|xs{=y?&Oe6+ zugJc{jQ~W6g>{grby?sG3ay}`$KmyjcZP}JRA2|NX|eGhZZ{fnrZytV|2Dgk**&}0 z>}tf_I;pN7LZ}e%*r&}kwIBOHhB;&7IVDr+sFwCAwq@IwU@Fx0=H{V#eh$z-Qhrik z%6t=(gdGm21UJMo+%I*|vlO{Ex%461kQ*m$L1J3e({;hgxG6fFZ65~3Z|zZjZMuCL2?Vgos*ZQI?5-J#-sxNM$DdxmA&ggnTD*)I_Wm>r zX8}4YC(914VofCnL3iP%j;_)bfYlD;nRMAjSS-~uuzN`)kZ4X3CJj|(Nen4V? zdR4U~i@~7=AYz1QnGTdhsty#ptQ=$yG0vnKg;6{*m=<3lkn$pnW7%{DoP?Cwn|bYT z3_-1yoRxnTo^bXVJmDCO zW|5sQGEYRtLWg@j3yP6MkT$JM*Akv>H0;1#Pd&6Ru2p<*eSNKS9zg4|AMs0UX}KK9 z?-6D-h-5U-pyX9HxBEs_*EiVns`g_g6nGOP!y;gNlSxrxnhbT{hA4QML7E^`Bwm=nXk37^0T;c88atQE#I@bANWd`*jkv()2f!R>8um8=}6dg}gn zZwNgyR@vTkc>ml(|8U>|_vrSvs+)|d9AI6BY&!b}Vt|FE(X1R^HiLU+==e2|*kNo@ zgtjC0U*=W~(7(m6Sl zu`2bt^n**&TIbgbrG!p2khg+LOm+bBiX(qZS3*m6Sq2>kh1VDlH& z9(eu`UOl|HH`pf%F#fT&+OK+jzZrCmKzkDUbE?Y1@2?*A&+gxY*offSea2+Z(MB`X zb2*B=nuvp^&FeFX~V1hE#;wgX!+K<4sWnl(A5~0ltPOIBy)b@*qW(QuRomFb- zw2MB5qCZkyQ2T5ENO|Lgju$56W~kl?z~IMtI@s~`{8AmBn0H0Km<5-V_~D4V(LRQt z)a2f$<6GBp+sM3b`vw|z{{qZT+?98m@{A0ipK`HLV;o@2rYKdmdfyI?A)`E*unZMbFPENLJ`g zVgsI2`tKHR(b2?@^r`DehHp@%3#B3o(^OHMp%uW%z*odxHAectxEhw{j4$U^= z&L(%B(+x%@^x)t?8K6dz4b;6vW=u$u-w$=V2l))0eh)~g3=%iU+hZ0Q>@M8-uo!ZQa4Z}^zkhen>?82E^d36P7LV?2?Cx zfE|>gVvL4!nc2Z$%)F|#|3SFZ%j5y!?#@*@wgghiRE|yN7O*O_J9z;>p3wSO+yo|b*0hF9 zOl=LhtNn~`e!)5_R>!LGptyw>-6c_>P?T#odWqSL+)c<|6;1=9b|_|{M`FHMH`hV1 zBNa7^hU`z0VS^hdig;8o4MAZSlY>pKW75N!I21pa{r5;*uIF=~j_>kTdUw+9h_N00 ziR>I#_X0`A@KQIUrk1;o7{{GqRmqa4U{ibc{8`N^?(CXU%U@o|S>uz8so2S$+?)X% zXB4SJV9Nq5XZxw3$#{t-VHw5yn{r@7M}DWpNr{gcuB&A$0uxw8pFZq9ygl1F0!zKngpkDoTRAV--%r=FSK&l^!>#?Jc3i zW@jI_QjEB4LCMFlnAmCl9@j3R0x6}AY!d5)))h-TWI$d(Y!?s7AI&V5HIZ(d0hsUq zfT9x3Y*dn~EN!>_wUYQ*VEpxRN{T^X=If=r94^Y$8uhKqTF{Bk#>-DX;kH@vpQ4i%19h*Dpd|J3SEab!LjK%&tuV0e#yiW(=S2lc&DE*{Kq44 zVy_K7RWs;%m{{`$J8@Q{3dnLX8RA5CF#8{}*|uq8PCA*u^h_q&<&-&fCX?1pCSkKs zI9w+5>UVutm4HU_^vqr(JxF_HSiAZauZ#9zg#V89e_GM07R+@X>qI|>2@Q^=G2SRL znXpq^ztrYzRXPR42<>&Whn|YX`iLH#4=rFYu17T13ph0xh`>Q)VS7z4E)*^pg$ahy zu2y51)%s2)-0{8B2SP_7325v!S~H?hk2w7e#?<~gLoxUj9&$(xIky~IOokFbdv*Hr zF6m$CGW8m*J}{vNY7!_N4qlX81Kf8AdJ0^ULSf;Z5N+@VeyiNc>zu<~plTGmr**aeUg7KCyPs%`GWDZVOU1oJ% z-I{*tq#(9xg#exm#gCk|2n|3Qk(>dzQ}}lVe*h*t&Q`Q5teds;9H4P!&_lpCfjPz< zh);%;Zkb$!?OtL6CWJE$9QH->3wD25QQ$||pPS+)HvpfiF+Uio{-AXrh~ByGPGgFH zWwrkRS{)de)PAI%qP;Q2n;CHW5rv$JY+~V_C4n3()(N#eS5ZD|KCyt%26Sd87o)GX zoFu`XcuoHjY5Iv*=0T*)({0`RDi~vIkc@_3AX4%H-3%I2jn{dbAo1!4eNE*g8*%aM z68J!dL1)NkSCV+9vbk!}$~poQlovXplR7A?D^J57lF8(3^fW!5Oi%K>f7ktUnxZ1r8se2aVvSXQ&)WK~SxE%FH+ zLGEM%cBqVTG~_;xkp-K|*bs6JHB_|BV6(9K8deX-E@Kc%-lPKA($6$i(>J|FW-uEL zG1%l2a|C@hoAJz1A5>%9ja2+VKVhNBh;`-~%scTbpFB3sNDPEat8Ru7cE5(|w-jqt z@{NKR3RPOkb{(@VE7~Hph#Q0|RR2Mdsxxb%Qlp&q4C27SLzdN8J~Qaq5X$&UZ3Ta3lEQo#m6oW{V0*bpJfk@k3W@PHT`7b&;Jzy1xe!ves3^jh} z65U7Qyio~8`HaY?L%lRonKM9pa1g6iSO6YmA%vOo@&hJs* zj~nqVMjvX{my+U1SpA*IZmMF|NGmOTE-96|kVg9Euw$XF$eponP$604(*v>k?61Dt zTaxVgIt5)nte}%RmLA@&Vf5d~isMZ~0+P;pMRAZ=lxgGz5T10nOn;X_qte6-933$1 zMK@y%a>_Z|8~~!js8t@1lP6vsd&iPT|E*`e4VhLsZ!LQA*_UM;Gf?L)AbANWkB?B^ zMT-RtN{7j9gCG$*C%NT<{=OdDBW<4>C+b_{N8$A7$JtH)kk8h{l`#l4W{_m<9jBjV zET!a}cp!$Y4^BYjgTzugoqIcTKRYYEod_seH8OcPkHZj1(y}pwu1`nEBBQ~Ae7p*7 zN;^sa>2QM@MIz_@YDpo8}+cjTEip$+j#d9{>B5a+OFX^|#GV()<&oC)vbucUWVI z-M@Mgl1=NUyBn0*ly@X`DV8_IZMKq{j+KcjASh%GUfCjm*ao z&vtR23>h0l!-!BA*4$4z?VhRs9%)!&DOIFyMMwxE8FGiW2hqkc({ZEfEnEzP$bo?AS zU6i(4Rvljf@cGoWH)ZWlRZ)uCnVLSElJ=mYjcJCusb^ox`5dbG(iC(5q(`Xgjpsf3 zyc|46SxNZ3V;-KDRjZs1ucaBXyuM>Ar%)Hl{{AXnFc+`! zeptkkge5iPV-h9d(-Q zO|&Mzz~xd!`Yw-1>FlZ|yLKKbO6IYFyr@(3bl$jI18^nHu%e4E;rqDfQD+08Uf;kE zOyGUftw7*Z@}%M&Hp3R?bO9AZ&G)!54USQnqMzX8Fcs`JX2W* z2ON#I6)~OYPF}Y2mfW4kYzGiKr!?yxYw+~5phb)97BA|4%kkv?na~ot?>1-UUACN9 z{Yg&ofB3T1gU4xk>fTV!$eLe4!3JQ(ZzuC&6_EGO}6sW{Cq4up~_h5!kSHg?6}u4 zvz|GLs^x0ig6lQuBGVa-M81bErQ^0ztGr7*3|(_vsAX2w`PIOK8CC5|O%@J3syt@T zBb%#wBZ``vJN+aH=*M;07E37u^(>602wBP^S=w>idR@;~5Fa5;_;;YLwTPQejZML% z@Dg$ZQXQ0-eh(E05~d?VDEucmjD3K$zad8XrYd(nku}8IJdGJw{`bsk}p1bn1h!u~8P?W{Shb0!Q~wE0)fS z_AvBNJXE!&PScFV#rr`|Vl-%Y1B(Qk7+xnx6CA`l@I+#(L>n~K#+dsuGK9{_l0@sx zluyc=+v%q3pUEA;m#zo$`~Z_c88vyI(J_N5f2XZj)gisL8FnHq!^t%2(y}}u<-Xde z`i@LQ-eVX|dmz@U71R^3ZPm}k;|cPzhpfnXAXXd)Tem2r(_{SAAIg_&Mu>ZJm0 zpT!l_Q@6-|(Dl$pUPI*6Mo%bk2RexD2)QGC`bL`AwkKd9u*9fLl;>REvgEV?k`s)@ z##0)?p0>%58|U$7&Zr4N7aUS*J`w)Z58~6XT+QhO+QN!F`)b ze*=_+Dr2lJ-3iT3$3UgqBwOJ#CW9Ci=A^ZzM}N1qOy_Y6Ikrv@0*qbw>_~&!EzvE6C4Z<(F;=`gd?_CV2aieI+)4fv1g_d#G28Ymck%Cu^Dk9 zW_9sbC-_+uzbqhtX*v>gU-|E-F*~;UIhudgYdfrJa8cg5k2$5-BHQX$^oGkR)saYO zmxa|+zbl12=%Nq>X%_+^(Z?EMEN~Ks%A&nk%`~eTwZK|-Vov99?MM)d1<;CKUfm!2 zwn#$XCC7vp+3U9~6FX;_*jHz{G2z6%zssv?%1Jw+Zf$Guy#-9vGdi_eKULP+}nHc z)$Taa7IVcOLM#y$XA@8 z@Th1k5c0@pPJvJjJ+NlfWxn3zdl=*3j^?&$$8gmNJ&9fSv!lFoA;sRzN}BRSSw1+^ z07q^-#8BJpl=TAzZ_e0as{WR@<+r>o|Fn5qtZUH@0qD0RF25yl`NvP&8*GS*uwDzlKaEXsiSNK~banWypIrhkwpywIo67}1x`jSEn zO0_Q=gHOo>ETXS7p>(v__I7&cUgrHNz=d^h1pFJ}!k0#HTc-Ci>fGiJDbqqdB{|y5 zp8@;Iz?9-h)>P60hub~t-in4Y9T(H}BC8d$Adj|#JCJ4SE%0l)*l(R=y$;5qjlT>M z`V%;Fg!tZ|2m#p#U1wTRq-%R^9P zYy+Gc3_glG(jsT`BCA6bLBoUPxmob4slf0v=<^Jw?6O+BfnlV-MjnJ@(p*8U8S1kA z>>e~LQ0&?F->djU9vF&ow94A+VGy8jAkbdv3iazMc}o!BKX6flv*Ag2p{d0&$MOj8 zU3?zwz*k~v^sP^yU1*rQ7Q;;(8gg>@7rxxZ5-Av-7wh#t!;5z2%Z@ut4YU)b;zzka z$$`6oLWRPR86#n2AuWUC!dV)`I4_g*?=+Th-xr~ zF4HJ;&qEr(2)X&HstsJpXzaW~+Ic(~KLag_0MtAZk{P&gce*?_D{ZzI3e0huVM zm4zaI=G0QK&)sHsacd1qT5=@ad8}4Q6hZkVk>+yQ9H(3+Er5ycML7f&b@p-+;v=1taKIPSCb^sQHVTw(pP`s{4Ik2VxF_H~=;Fq}BYyQwjy9MA zqep!o%M2McUeI+m=Uc+hm&v(=pDlTp@N+0$p}i7nyp3@Z30XSCXQ)Q8;G=;+oc*r6 zWQlFfebg2=Y!MS!=-3~eEGv3=fx)mNi@YgmVkG+#+6_il&g2W+bf=v1g- zZ&|lpC&djW9=s-~)oMI1WyVCByATWoFvMaT=QbL+=k+yE|IxIlr)!F-%5b|$u+i8Hb7FSc#l=ESy>lYQ>?#r^|*wVv*$R#&|RaQMwlPFh5B2E#n8 zo%jv;-@$Fa!-!MrA2vv52oMnd|3rki7+L%W4f6l+_2J~6^O{v*XN!4aBPAESFpD-d zQ}VgRI`))=Ux0-Gq_!laU?9+d1TD4amYw%i1)!p$#kMDN`GsM!*7v8&jpr_V%#HmA z8tNfBsp0^Czyv4yZG1EY+ipJ7cAPs9GsUW8XiYKOQ{>mxhHU;V-lb^~BanFC9Ixe#KaYNtdc(kLd$Nq7H$5(WHFRW5tYr&%>_{0{mNGntY=7g zT|9gr4j+3+U%1&m-(Lg2AMC!v1`-2~kuMkxgCcJq8V=N4lP#LU0Jp_oFDB~!y-qN( z;{yewu%Dm~Hu01TlFlM!{({?}p+Q=r=q@a=m~08(m2r;bh1#*DNs{C|i^X7mk`($Y zWT49QFuS)T9HZAkkPA(Y>{|`(?DciY>CkkI=+=UA94lOr{zvm=^Bo z-KF*Es=&*bC6JhNE@+b$JUt%!H z9@H^#WidjHX)UAmCKHQBSvOdiXZ)FG{D5zC+y&EZiw#q;p0syJr=GI2S!bFa)YiLuI}16wDVg$twUE~y$Y>2}bQknju%G)^y} z8rLK)a;E_-49DO|Ka<2WbaWuUwvE~U4 z3FV}SWq>4q3F$E6mD8XYGO#c*7Z9n`(iEvQ)JF!A${=H+FpZCci9^68y!vS6bE_QL zj?q`|-@)XD?%!xIWlJ@o7~)V8&iy0eO_Rz>;aZIy3M!fBmdBm}VzdO$f)f0qh#((? z(llh#CrgYi!wc(`a3W73Hv~GjV5bdtg8M}U7)vIy3i7s;7s=^|HVwKg20H&_7AF=9 zO?0G|2~ov@DK@9jaCD;v6vnUmB46Frh%QhE%^#cxVudK;EvzWl(wKI;iHj&25UE4p zjRAuyRiQ^hFcWtNesMT5qiZ)%h?<2?f#P_WnqiEQfVrm2-IFv1_Y~|o@=Yp-!^X9F zb_%n>aLv@DOV|k%h+*p9GTHc6=P?9{ZRUVU&UU1Scmo{=Ih)C?$egV27$Gi8)hvi!$R<(}XI9aCMJ(B=YEAx32e&XQYFELpA` zJ@8xkD`DUt_f}n+43p0Sfg*e0mo!=(b3kX%E+`r!1U|zo*jiAuICKV?$PeIhL|1wc zzjHa3+>sEL|CbnFU=Dmh%`9#Y*&tq=mv&wc%$fx&z?MlKDXCMmN-Ka*JVcKoRf|Q& z&}FtAmKrbt{`WK>3xordam+)W!jucL3TIjUr~I2X_}hgW9^zz;{c0(tVZ#jkjp&%soph1XCQwTydNz{ZI8X&H%a+9UoHy7QKZ4;Xp>r_)X%vJ%Z$T5`7?a#zdlN4pGNg#b) zW2DnQ5y}b`4HJlJlW9QRtN`wR{ef<4b)#QMn5JhzmNnX+xSTh@pOgATp4yZ1b`G?C*j zrbBzl;NA56CqSTY5m-N^hZmH|S&v-;Z@QdVPV=s*>G#U z@G%8r@%hja6G(`yu7i!0yAnCLVNT*=x3*-DAi_tGpk*

LEr2jF--kJmEPO>{2Z? zC_mPAJ0++C)V;bC0HONw0kvVs{dpGn-ejcJjtZOmiOAld?pw9MtU+srxlMy*k!q-@ z8F9z=$Z@O!Zk+a)Bi*@nv3(NWJnn0%CX`5JEfBW}QPLk;)l|mz5^cS`*(l6-dow|x z(w+TY$!Z8WD4J+7gLV;E{!~{%3<82yzYJ+6{(S7nlXSE;0>v2CdPDTzQn}e1Megv{ zyqld8Xl!4%Y!^Ro@C`OSdw;|Py>38_NQozAU-W*fmA*HI!Dh-Ty({lqh<3vne%ofH zB)BjJyyM!@)t+Bb`o$odOMUUQTCPB^!^*z7thVS?hJM0f)e%}$IAUT_j-(lYF5V7@ z&r26F_Y%TR1#+wOtH%T*UWmM7^e~`KqRFKydo~-#|70086*-IU71A(B1WnlV1Odu> zP`$(P=ONdj4BaP*&b37%ibQg*LklIFh4bNO6N-RL^Ziqm+){;H5)8FKkR{Q6iUU;& zxJ2z;a1y4p%@7;1W8*L|OxjFYHvk>RYifI2Zh4;vk6?!emqGJ6;epF*CbK8b&&setE5ymc$n0W6@6RH5=H>Lst z)!EiSU9!3ZST`BHmNt6?eZGh$Lx2vCkU`lm#cB4S4b#l^Ocm$5WCv6~xpRK(^0cjSx2A1&46Q}Bn)KL6|Mbe?r`uewf<(Z=@roGlV?D_VNb@L^8w=%$cj3LnG_=X4iJbwGg)m-8r49wcVdj65 zOH@PoDa`Mg|AFev?fKh4tPGmDX+X406Zy!P+_)JsGdtqBTqgP*L?|je#7irO=j6v)d|9gRZ?$RYgl>1n;mi8es@5-1SI)(#efM{9kNj>mkBLmF?dDdwR(KHbnG`_ z-B92_j7%9ki(0IrcIa6J2V;4)4px3eELP$zozGnwaEqep!BdIZtT6kiK4N|Fc7hsxA7+o+jXbsw=e@LJ+dV(jAc;R%|<;@yu zO;i#yIePu7shGrqUd@{H`xa5Aw{+AK#dNvwVT@rL57>TUIai3?I9J^-XG1F;=HpCc z3G^AlhHT_|8_KH1jcp=oX|f})XWR(*u?e$^@C&ZG)Lm?Si>u^e185eAp_A*j=g(Vn z8z)n9V_zKhh&v}{jk|jKz_9ZygS0q%#S3BP2TZCai#>SReuVhn9|K<-E!T*=%Z_6v zM7@Kbkdfl-JzEG^lc1Q|ple1`=z8X3WVt~cf4~tgb-xZe3WJ~R5egFvzj?vqA>)tqb?GT=@)*ik(ogLB3T8KWGRM< zpO6?v;Q@U8dDOq`j@}vP-J)bRdBJF@{CGJ}7i6bEN-c4R2HgNRz;uO^CE3^>+$~m8 zS9b7Gr ze`P<3s2`inDPBAUHvk_B3vLh1qh2T4<0&rlGZBNus%5y_`ooNnGLnzG`TE_wj*Mg7n_TdYVO#vV; zq}^Fa{r3Ra9A!5$G>sq~GkP1T%men75)s_D1Lk%LsGqO$*hr2|fL>xhPV8s8-~z9V z2KPi*rriBYYUjywz?pT7!FlPE7;_VYnV`$_xU5uO()Kxg}hw^(Ihh)gi^JaV&Z z@D9T!GI*josbXYFkt_>ikH;|G0pqqJ z2RRAirX4hGDW~Hzou|?hp-fk>rVx0=?PH#R>P1_*&n%iS%c(*Se>L3z_0)w7SnMG6 ztf7g$Idv`ZE7poXS)*`MIYES>9&N5Dmf)DvVZZ5B;Yg5AM zC+K%_&f3-??Y86LyjLiAvImQE=WJ$F-|n^Y9nqf;$y;!Mm)3bTG^{-o!RT)Ncfk3E0ezFW${pe1O!ta!8*FSj8_GyVv-D+uu(d`f1J z(ihcXP=i+^^>Ah%bLyl@fRP>^i>wW8bXc9Qfq=?aWyUi&J~${TNzNbXxu>w;>@Pqn zV*%#O`-Am2i%zK7m*_=TN#lFWDQ_$#sWw>8JsX4J-Qv&}JGThx26jifwAJKis~(5D z9b5Ic<8h6sMMP##_wno{PMimVWswkr`atUE(0;|9wzNYg)CLw(su&&s>QJhb{|Q(Y zqj07gn0jAU5lO2}~`;xI{=h53Z-fLbBrJ5u5((-Z3}ueK76lm_({OK$Dmj3$7+okpt)x*&<)lF((|v*}iA&=i3Bj>5h*Ff3U@GU2cZMl#e!6k8+!$R z3Hbt&c=-nhIt%Bx+^eGdP8Bx*A?cn0Yxv7$FcMncn^?@efN8z+>AHdU4@6;i7ZB z-g8R=aIeqRrNinee-_?#q8$_=?N^$V=F1|w9zpq7l&Pln*I8e)FfZcFoT>}zTX@@D zSVl#5Mg80V?$Chbb)TU{D2H(Vw{_1+5&>6oetG_1e{F;e_tB4)=4dPC=_=O!ttvz{ zF+OhW1MkJAO?XNjtJCD2xW7QPbZYHx6Ejk+-lQ}OcRiVdySpG+EUDYvgL(}D`_`xC zPz8-Hwi5*L+2c+iD#f-tjRVG#_MHCtAMCES(s(ipr$AJ;OzU3FnEi3M7#C;c&C$=L%d~^ z^;;$-sXq+GOrAB9J#_mVcBwz&#G`cP20JV07y4-fWygq((pnIQyBmS6H)aI@_gAye zgw1%5r-1pz2j|bjXKR@`Tec!#Vm(A$ks=$%LUD0j*K>ze1EO1*p0|+mvvJ=J2hHvE zi&)x%KNj3jwpUr|J2P0^^k42mCJd1{+|OP-<>ooCb^Rc1o?iWH&ab&puq3CI8l$2J zLih2F$GRR+h9iP)+WCu;fkFfSBevX3e%!LvJ6@H-(yGH}sA7-(6?v(SK!C)d!x`M* zL(q%aF<4(uHZrzlvz1jcl+gf;;RsU-1G6F=u`wCH!Z&Nfr54K#JN>k&m`%;U(sjXB zZdh2LS35l*QB__UGOEsYYsL^jnbSf@#n0p31}_0yhGf3ZRag`cs3%r*>S@9ypJ4ejvVg>m%p=`9H5 zb3~*z(ASUXlW%<=X)fzLD)W(QYue!zxV&ev<(MkT&Vz}Z~#5tj?p#Xzf#(kNJ)+2si{HOGYV z!Cv~W6&8DGGGG%PJXnD`wk^i8Ib+!gyMOQkZF6wx5fu?7d$8eNwz^?#k|E}HDn_kY z0rWV60OuZ7?81v%tSg7ggXq@Z%dc$FqlxpeVVgWQ;mqk7;^a6x$&oP(40$4 zUkGEJMtp4x2sm62N;66sPdD^uLDtS6%X8U(@6gUa_Vl8&*Tq81RecEBY3@7?)R;g-v-- zHm+Q5Ng!4huy;jPhPW9}7KPhhh;yJ!Wh{lB6{;La?Tc%yMN(Ah8B*>;vb<=Vbik6L zp(i!hP-<|X*9^TpX~zdgPUSjjlpx^Xtp0&HTis)S|3Yh6O`6YeL7^pqtmcrfLK!+g z4Fk#8Yy#?ooY@XH;0PS`&PMVily0aOrR*~t?EFC6@{-)?bH}uPx$1MadfOyLpK225 zi;K8Q?YI0Ofao=2v{hGGlxntJ$->;KQ4!zaE8Iu@_#N3h8RBhoYT2NQ#Q1DX|6uTGT= z?`^p4N`M>Cnb4mPFrjAFq=lpR4+#79gUSxvWh$0)T&o+ZQFMaisO;%(lj?KK@`|+h z!}nXH+5*HBB1_b&-gD5u2&&_&HSR7Pr94$nI`^RBSnH2_yJ8A(I;OjXiNP~eusvD? z{9&?|oPJXMJrGi-R7qx=Gc|}*<4<<&exgZyVV2ad^!ZPuCYOVv>$$|uvVMTkd17%L zk5_Ot#-pQfSPh$1_%rsV+z$=CQ``VgO2{skZ$&4p^xIo`Dejye;9U<{=zJJ7ZqEwzzX-GS*T@7$aM@kH26)z*2yp60m{(IHm+pp)lK6GVYq| zSGMe$LHwC>x?LSs`fy~CeeiMtlPougx$sMoI=2~Au}JJerHozlH0>DD%0 zWZJWOyhCZP)C`Ro5|)#Ru<$k}F%qF;<;d5Bi!IrV|KJ#Xa6*IgyO&&1RP^-djw*)6 zfhp_0W~%W9m&R?Bqw(ANn)(|=Mw%;@K(682z_y5I6xrTkP6;YOo$Pb{8??qo#JJv? zj~|g^^pYW_E)_ak8q^V*&#I=5kIV?I3?&f7d)r^IAF;b&0$eMW%U)_A0H5Wyj(H5M z0Pn~+#!`h7&#p5*_!#B>eTMepZUEvHwL|ch17*>-6@-cgQ7g5`1J$lZHxve094~gd z(!4i?$s%8IkVd-9JiAT^hFN#gYEmNW^!kheL+!o6Kn*pp)`{?O#lJh4b6lE(b%Q|b zu((0;43OS)a?Z4wfmAZI<*n} z4eg1_&Z<={nHgIj+7NZ+!3_WRW@+XS6bC^dUzBZG9U;hYw#2NfNd?rrYyCZ`TO$ z)vfEF)ipG%-)r;M-hYSqr}(fw2?Fa%2;PRDWl1yreB9awNl#{KgOKW4auU}ajB=me z%sR_1h9*HFs}%YL$p|;N=#4bNiTr!C1#b-I>p?Q4`02Bw62=;KHEgjg9}*aWG)7CD ze}@l;2SSEQaHE-lbn^`{1ydg{J|=xE(OZ{pp`DHC=kXq~>sp89cVGbf@w7m=f`^Pn za7XI%uVuL$WM);;nz-{nLO3K6cq8!X+NamJsN0+U4lqeoYrHibfwrLA_C8-9e0Wi7;@$O#xIk8+uCS*X)()kxa_HHaUyytx~vjcy-m&q@PL!A+fkstx3p1FHv{~ zlB>Q+ln0juN6fLdA|hBmoTpNYM0$Be$;|x~qX(M2s6J&#~5??2;aVC;FB?W|;MB#q3<=`n`VzuL;2? z%~Wfe95~pz9?9Qt{LQ{5sYSitvzsMq;y>C&D)cLP@#ALh9SN^$m)WR+`Lwa41P_z( zTahnha4&2K0C^0RZ-972s#WJZ#M`rm1SNL(!MWgeV}>>_Os!9bcK9>W(Qy41wz9nO z2FAzXw+>upFn}?gARdB;TjfRkmt6BEv7XMjX?3j*kw-w8MtO^>SG-=|Z}W$)n%VP@ z)QzgTCK85$?rskDj>edj@Pi^WmS@@c!J!7|Iu7GA8*#UEl1$J(GX0pm< zeUr|f!n3Y-qPj$hHjCR)xq;X&JEH(evD`Ci;k`_DhN{MT;l0ZxehRKep&9sQ^tW%L z5}=z<6qkeQ?LuO;vfn;Spk>7D1?Vq-h+S;{T4sW4O8z-T-zkySC6fF*v~6+nXNmbj zi6>ZvpN4bZG^xpU8q5G2H%_Bp;aTXR-zpcbvpE>~TxUmpBO{un5nMypIa(maTbih{ zlQfcO^gb#$M9sy;MrzTm4veZi2P;FvaA*|YA*CTR3QxqXH41=cBittRDHsKHYM|4l z7;59MtXe?H(;<{yn<3Ieg7tl9 zDE9u0efa@x&+kFn40tHTl5G8z}X)^WSLt^^_`76=Hw~G&# z8K;KS$5DSGAkdY-WKd|l^5M;L8TV0!ovc~T4hctn~_I>Lk4Qug_$BG16arS=OF?-C*pXX*QI12-w6Ddz20-4J)D_>VzUyHN_&>pq&~my8(8mYdsyhX zFWYK(0sJ>B4eCVPd@bs`0kc4uRs}$J?}5nBzWB;r|Hit<;`Co;-JXSc`zH1z;jvJ6 zGgIp=6x!?b86T_-s0akTcd4)rDzVwJiK9z|W@T8k@%!<2m@9?w_GyC*t{WznHYAK2yk&60Pc z+soG_(Pn5Fu&;%>*dfwi1pq@djMUY{m#w*9nGeuWiPw5T z`i?3$YZ8!D*&vNT@rK7w-QIHS}Nmbv#|Lw6_)8=^lfCU2bpa23Q_@5ptSC`*5 z|1nurX)FEoFQNFY)CeYLG9M;HUs7~&ZEF>CMfxyEle4I&rpL+FfGr4D zqgP}i<`rdx>V=-A zRdGdGoy8QFAz9L}DEoezvtO=*dgqp8rqUZnAcW47{{B(hR3Kc~fn2a-NI@fImob|_Z6GL@25G~2ZH3KJVMg<~PIoKZGB{Ps-&2AVRe2?fI7^)Zt4 z528U~{G)sLgu>C^qA6(0&`NDd48od`NsU&TYIMfn1*NH%*+%Oao9>$IS@kC9AC;cv zdD;ed^I-rXx}lhdU~%dS<62@=55ZzD>|P;TUhf+ie2n8bshgTq-*Ny8_DWXS-!xR9 z;?^H2m0#S35rHOiOHd#YiPZ<)2qo(hbM5iqfbnVjl=*Jdb3m4n-R^A?o%C{K@KfgK z;QNSId&AM`_jPu5WX^`|%4%hpAIJ{!PMQJ!{Xr5*k+>~Q<_Yq&=9>oc57sR ztMm9(MLE#e&Ydu{w6_5MClk|SIm2-hOvX0}+KKi4{-J!$ZpoTepW*$WH$4}5G_@>* z5Sloc)HxaT#UoB4&Sf(#bQovcyDH%=j|q|;!@aNE!fGkxjjHXGWdhit(-$lR#o)d) z8ZOfN4tJ_13fCgN3pB(L44A!OWiJR#g;yI3`<#|c{nZf20b0;%xo3kR05F{n02Gx} z_UYHop{)+gn|I<{WSO`j6WokOc_ytUoL zm&x3^`b7T?8V3@IQ!TWhll-()w@)^cd=uy5HHryO=~y2~)ytOxv)iDnT z`n5#%J0V(-5M`3OU3~}t?Hw%009V{*X!V(qL1$@{@zkS_7`3fq1`*QpAgx_g-F+MQ zHT66CwGXj>ix;o)N-+pYnAX5No4krPhaBn$`11mrv73vyYk( zeXD@w{cguhpx!Xf{Q$v!K6i&zORUPnqVYUsTLSMu z>emZoA+i06btI`ftr4@_CE_qM9DX5{og|cNNr{k&G~G(x+i?;|#XA#22R$!W z?9Bc>YShG0f8`@e9&q3Jc@!YuImOtz8?^ogVU-3eQ6zI=gBo2JUkB(Fd`nVR4THz6 z=Nx;Z?zmRl;;%Mjq>TN8VXq#J-O9SV`DH_K0XsbK&IKjD;0;Kxk}2Vmi;~(!j?ByR z?!)EwTWh|8Vp&YxZDLn_8ZD-KAJ57-sbF(!v-=61lXUA zAhRL8zt^$fwPZeam>1#&Bx)^wCGrpJsg#-HWWO5D6QBdgrwt3mQe{D%2i)ZgVaWNm z8U%2M5m$#GG6M)|f1UBPW=-+SzejAeQ^fU_*~-DQ#7V`aabIvw5+Rj^G{`#7URbs; z*N18OlyTDoS2g$PkL846OZ{1fznbOUp!2BxHOtgU6@DWGDH#W87VPwclN-gles<$> zA~zO(?FY_mJbMz)uZpi{BjA?I96C#^yFyKYLoE-K^REi zR@yltXALKsKBS@atCz+SZY*_ZvFulk9AaY^-wTxM2C{rM|1@dXSe&4?Ax`Zm-PjT{ zzs@a|NO>go;AN|G_wupSyzYIGi=|~7HC3W!bM)kjUNoWdKwez7YSyu=;06-dV#DxYO2;x10_@8>4LFe|yig3Vy8{}S{*BlPhCci)qr zeYeOC^r*=f-OHIv$NqN$&EUim*u4C=f4Lc%1KSfF?bpm_XQsG<`B863MY3YH#O&D$ zxr=ReGAQgN78_ausRv3uz`xu`M++ElU0M+td-lvkeJ-zh+e+nMk^2c+%xXv-a4zLf zx_GLyqaock^7b%}FUtm2M6cK8ra{qJ{@U&YNkd&As_hC7G|+ljN?6XR17tLgOC-y7-fpU_O`C?_Y^z3&Z;H;;rw!xp08K8RTV^V*o?3g{JC^2 z_tk>(f=>h0_~EYps(@zVYZ3;q!gdgOwB&% zevHiYy@iniwc}E-9N;|%I41$?TvHHh-G*f(zs=kTXLmi{?&v3a{bk|FACSA$z5#yGz67b{#AI1 z>i}U%Y77EJn27thy0-n|!|lOxGp#3s2rU64WcEi3FE9=_}_6krNDZyU@lL&XGP5)SngLS4`s#JozeFD@El`_MXf|;V=Ty*SQ2}sC^ zGt&qE|JDsbsDUwVq(DHg$v{9v|5G=({nY9GwzvELc*cg)#%S{ON93#?hhn~ZDDr?d=chhu|fNm{?a3lw(b zbNO5Nx4KBDs}F=H4@6;JcyuHpB=^f?VYyJxT_~KD^ktOBeYC=DjY0inH+@kr3WUq%FXn22N$*Q6p8TPY){&FePdfVpT(^yCxbc|JCP%x9OUR>6*Xd zCvnU;F;Asbh^8n{nqm)0A-lD2*-^sf%ZX`?I(6av<;Dlj^~|9kqR|gY#7&>B=l$c> z9fjf84rSjOL84z>--%X1H4+NY>W)r$v3IH;w-tCZX3?wO9^)x56)BddxOZ)vJ~SWvjx?ElOs&H4DGf&7}6a7v(Ih zGRN9K6v2CM!tPL+&+$)u%Zx?%5cdm&P#cM!WcN}yuo#$4RlX2RX&mx z9u-c!FNfsl>_1a)5Db9MX{Tt9hbS#q!6d;~XEd|i{kgroVWu*&@Qif~+}{hlv$laK zGpR8`?Xx6eXZB$C{kLFG7?o~KF^&_ZVn>N1qVDh{UxKKG^Cg!Mu=ULrsDubW>4~eI z4i2yAe2VP_cf5fYcZ^lav6YRDmd!%{r4S z$TG%r4wnnSJQJe*qXPuMqkWJ<7S55Mw0zKN8dS@PrA+_uRz7T8_4jg~yY#XaPRT&F zm!tD0ax}R^lLUBV_)V}K#H%9yW0j-@Igg?gmADzr1|ojb22E@YgL^MWEQpILmX&&w z5QhCd8p)e`e5ymz3zCp{p?;(?Sqz-a-+x0gtR85HaXo+W%eBIYfT+?e6|~ zhIVVU__S-H(wt-67W94Zc>b8O9$451q~ z49Arh3JlS77?Ieh0Mi4tF~U9sR;#@3w4yT*M_?a_PpvLlE0TL^G@A&E*b_Ned5KrF zNN8W6pJ^60j^z*=c`BActt^$uLS?iK0{RF6q{Yk~3qhEuFTa1CHF-kL<0^ly@#{ic zT|1OM&sbzSPQsBGcF%b%{^eD>9!7f%KHEr{#338UE4TouMyJdWgmvMw-Ah1hOq<}) zGX)Z&!@f?9)iJ87G{N5*7jE5UY%9(BjAeV;X_r=mNLtJux&d#UYX}=+03^d#H7OAN zv6np!SM~8MuCrpTD!G_G3O>C(*ZAchHNAmEi8&YA9;p*npFw%11~j;BY8f6 zH&C!jQy;kP8ODq??MM!#Exg42ECkLE5ZN9w*@ot?rQ-hG9)lf7t_+NpHDMV#$%PiS zfC88G4JGU8#N91e*bH=VP4FCjH@`aYo_ulac#e}!3UQl*re4DvIIeEgfwwI3|HMm(UnNx zg#KtY3%x?KZn-O0L)EdC(wLLKvM?B@Wh!weGs)GEpZtvSnk6{Yaap`~NNY+P*}Y<5 z)dEzzP#ir2%OjsTM~5LRXP$HmDgE4MhGv z3fdzUdHH3%@q6?nWnN`8CWO99e8e*51x+9H>jsT8lN z@-+>3oJsT4dG!B$)1jfi`QVY%EbF4TrFLf&(QddEpGLzT*mCo^6}N#AGo`>lufV;C z1%-5!#zl))H&7d7F;4BEg%7yfG9Ux3F3 z$)R7>hU_Id+{u$w%|WN`J67lZr(R`mkR{wYL?aP#-%H!ej$ z7=PchTVdobt~fhW;>nC3$LQHsJ1LJ1x%J_yy;kG*k8tNsS~N|BNt|e|F5Hl`a!t;b z-R|^)rYnBqo=ld=fA>Jt6SZgHM#w4M2d$VbjVh zy`z?YX2U}e8NKWO;$Alcx^9vF{7-Qwb6(xYBy55$X*c>Zk@s=207E3Bn9%_ z-Z$-%6{Yss?G)fLDvM~1R{{s;s1v$4Uk=&i$xK4iC%s@6Pzovxm78_A#)f0LO#A0I z*_#LJm!E_R#NQO6#zA%}oOg~BBCOl2Fzh>21VW`8Z1%z0k>3tf4|s^&i5m9$c->A- z2-q}Pk9XBZ?C_nCX~ALax5)m4Io+K66fw6Zs=FClo_r`H)rAPQW^DdLbfFOjvp|!* z^AbKqy-Gy1I4?sT9>rxCwNZ-yGKKz93(x4Qg{5T?eBb_Cicd!!sWBkv;pFwce?s$O zpK0jX%P?L$4-MYyTd?o`yyEzN+NgH3k+Z{cbP{fti=DGd5zKk{#o8yB4;JF=nx_?6 z_>6+|stBsiOO1*J7M!tX`&edH*E{Tn?GaH8owvs(^Q_Vq;3)QpaBnjbFof zh?#^czDypm7wzZdJh|sACu7JuX5!=%Ui0-M7EPk%xJw!YoUL|uoIT`xT?UQ3cNLlV zTeiQ#`JqDSH@ks?sn?-GiW6wHTFOlbAFDBW@_F|0`hfT~-96$58I8HVI#=ks!v=+4IOW-G1 zyaU4r^bB4X+{8fw37=yC&ryWOW-`Js^u-r1G$9@iXYdSloOh83Q@W~9wFylPw7EO> zS6{fSFlq^(2a>ONxz(3$oZwK0$X4P5Nsd|3aG2qer8_ba3k(c82hEk9NjgvXg8+|-p=sHiI`Nx7RKw{g>G;dG$J;pVEpSX^*tD!ej^0pT z$g{Z%1Xh*2;ta*q9uyx@k_Q!(!Y4C&FK}FpQ8czC9BY`b{tMw;CM07qj_tBPINZ*$ z7*Yy>UB(Pu)O4VTm8Qb*Fw@s*+$3$n9ph!7CD18f!6Ga-z=nAtoFUuS zfg)B`yv6YnxBKZKa}c9ZKA=LerZ#$sXV*3vDS5BbsNgl)WjhhWXtU3;$u=^RGi1`T z9X5q=gHRhia)vIWbZG~R#$0(YyQFV1rI0K^g>k8vTyS&n=x-kCfNo^RMLYYUZrpFr zDj%W+i*>DB|I-`L+2`NJrNoi$8vUdz?>f`V)0PRc2r@F<{C5S`s?2o z2nl1H=_kBcDjkkk#46=dW&P)iSAVKgH}8ueV?sa#<@un(_kwwkQ>5b zD3N69JQ)RDyIT>O?-nkG6*nr$WYQ$xH_Xpt;nJ12EA)3Z87H9>az>q4QB_sCM&-Q7 zvX`+kYX+!xr_YG|7%t~)kEdU%#-Kn>de2PpE4}`7SRc*dO0`|_PU?)!xZ!wnRvoQN5Rl>zx!04 zXG}8ZVlhDPPxT(l@)vMg(h{x2pKC|w9)iX+ zt;KN(9QS~J=3kM|@<8L-3-bb_n4T>U_d*Btaq|-M}HS!5LuC5Bg#uk zVb9hSkqe28Gs7M=*5#N+^y;@#)FuxPL>k(sm$1G z;*l?bx*Wk_F3Lyat7%mxEvR41h*;9JBwi=09t#m^4pfI<1|29#xU9Z~lA<%3ax4Xw zG0wvnEia_L3Fupy#77ja@h{n5Vs6uXF8w!t_H{fPPT5aDVP+Ov0g2(>qVu>S2hD_j zZY!zRdyuE7O-*+bG3y~XJBjTwI8!B*AQs*&7-TRTv5V1BG>0wSp!Jd?YKew4M(kY= z?hil@4!pt3${zT*I74@?!-~{5S~~JtFB<0V0|sn{H5gK zn5>m-7&g`vkdk&Dz0YEe$+Y7PM+pJ1qI??ogD2hclXo;1n|9vmyH3nEP7-dQP2pG| zHz>m^Lg{AB@!)x&%)<7jb7@uuaij?SwiCl!itHQ<_Xr_!;_@0SUYRMYLOxb_Ir9(t zNH5=6z2^k2AW79^ob;&m4_W*q!`x}Q(QU2-;`Ty3*{v|*kK{mSi^AmB!5;$ zt9n?9B!mhf{JU>tYpu<3h)*kv3=ZU-+v9qy@9}_?bRF+gN+C7vooy8$zY^sKn47O` zmRGsq_0*esG5vJ4fyuU&g7$KAI&lY#>G?`F6F2DxBIMG0$`M1%Xor(PP~;osDPY|c z!}3F0^`iS7XF*&189d}KsS+VfLY5Ki?)9?rt3wFg?KG8-txq-U{%)HxZzWR5+;~4z;ho?3-Ma^WQToty0=ZxZeWj+W&}gL8@jhx8b$_R&j%_ z_64-|b_qKGqjLr0x&y5_1?O(P@apL$#^4J9@*@S0LKUd_ijWILeNG@pO_o-=?kDUf zO>QzCM8|saEs&3J<`q)Z67l+{3O?|!xXr|$v>SwG*0?II2!vemhWb%a8~3B^eg(HO zc;~PkkN;~U$W}yegGB--F2roZ-wH(76q|WdDgYU~51wTP2+piu z780V3&VPqoB^zl^f=VY&3`aWsI`=Jd+LmmyC0f5mxqOy*@&tQNaoF6(SKY=QuCcL= z6kRNrF!`rL5?td2VpuvirHnrn*F7XDy`;K`24{fK;FkifU7)sT!R=s9OCjw>yrd=PNscm~l#K89yC@Vom z!}*w(>DDz(llkTx=z5^z92nO1h!`8De5%Vn(Irp)3Ag`*Iof~14s*XN;jKVCS8tlpL>kBWWgD4&W=)fH;l#rfD+2oNe4s zbscPY-sbnHt&wyaf~cgVncdB6=IBh>imk2A^y*oZtK73+uTyn4Df%ce(8aho*Zew0 zLSejG2~riS{WC#^3eD5U3+x=B^V!}qt1q3X*cA|IZ_94L*=!!b;FxmNMsczZ-pw0w z%Kdy$$m!~*o7XfL6Q$@>r7y7_!8?*Ot#*iMHVUIHo9rS*X?GRm^vgrBm_P3@n`S6n z2K60qHqi{wF_hMJgmqltyD0|0KWD!0fUw(yB(fa?jLE{<+9!=U9|J5oJhpN)ICg)D zEVuvuyN^2K{QEjg+$~X=_L(7u-!|VN^ty*Z(KO1Do-PSv!YHH@rxC}LdYBICd@z=- z2Qt+I#aG5{H^e6(5AJiD#ah>m#`aOR9sg1YMiha}>hpCu$*C#1@0I^ zhW%S%cYPg*ov=aZ0;Lj}zz$QG=UCD^r~a9S>a+_wI>!Z&z z@mTwMrL)Z!k@{8oW&Eh#*>O%`uq&`u)>M{O$FA0RU^GGI)eWyF1MZhN>*4&w{h}Au zY$tum*QzyBuUu@-#m%pxufvE z>rf$0`P|-LLBKqm#&1cyl%J<~&f7^>(RMdX6tw5?oQN5++0}+D2cx9%UplKi88)f1 zUL#*XBu-qzpupX?Cchr+#KOa=17GzH9bf`q-N@{;J+U~#I+0-H&v=QFNkJyVKi9H`8LB8kPUkb z^st{qmiC)8Ej9?`0DV}Fl^}{UnK`=LpRtp=N)t)SH-(LT${e{t0_TJUJp5ThnmPRd zarNv+X^NTp=Vc)IheKNc)k!O^Ql%BX(8g|p-yqG$7_pU)brx$o1;%A<1ckY<>0(h7 ztv%oWp4p!hNmyuF55kabZK#?K=T3X^UVAf@Ja>s{j?zoEM)kw6g>_@U1U!|liFg^$ z(>Y|^jP=C8;Qnkxe9Q$c0dY@CFh8&0m%aDjV-unQa%|@utd~>PCB~JZ11iKBu`B3I{{}#i&d}7 zN!PQu%DR2t^Y_pvfmeJ5s_D3vjo1qk3$pkMvf|jumBQ$#DZ}+{2U`1c zpSgOLu|Uxu&%YMBZPn(YTu9Zbg#z^tw33Z9AQ9ZaNmS zrNgp#7iO~J@)4+K$~l9KrA%TR_?PP?j7YP>j&n3o)6lo7)uWQ(xg9+W;{kcV|3r`M z{VjxLj-P~(^SJnQr8u9;oe=2sd}~x@t_m@089^)%oUNwCJJcOj9lMMirz>Zs$2?X| zja7iXBfG5UyFKcF@O$QWU{{!n_=|hZr17flG6k9!t$8X$A*{xF(Ml?4BjG53ioTGe zCeLJ}X%G#mH}UCGe6SsS;Xj**jIlmRC)l_Uj_hL~hy6hGq6^DFZ%bos+l4#2x^VOQ z(juL)H~l0epOLo$F)E&c#%n4NjG8riomNRjRp1}(HLd?dFT8hXj+%#vb$w^QN1)-v z1)}d@@90?;!LG+U*wHDLxVKj41`8cwanf;M1i# zJgMG-^U0T=R?K+H?t>;)c>gJOIAb4Z7I|i=VPn1gXRBduwN<@chpxVDyvAwk2 z1iD(++-omV-+^iZw0VdPVzocD0h`=xi9=ojek>X*bY33WJNs^yv#q+JRI_)|eiku) zP?nIZvuExg0G{dCa)9%Y$s=Kb1(s(^qT>mYNbF>SHiSeGq&g9lekh;Wfj7iqAFsPq zcKw81D;6>2sJDD(7k;mP0i&nCzgCSENAF@3*i9UKglJ-?mCv$uuV7{4Z_DjiJ8;Ri z?0G)Qb$B&*U2`SLKQ3lJE=GYd^3LH-eS{3`P1G{JpIaP zC-CfFC~-{K`PyLBYu6RdIm|U0VMPgsU#?oV9#9yRf+tBhom>>m;E;GvR0Dewa$Sz& z&?u;=b;D20Dl;*83Y4vG6A@Tsm0d_gpXyG#`IlK<{dxwZ=Edg9LL#-eOeY|tWpLeh zU-4$O_sd?w5e%<0-qnkMC5n5q7kHj9bNK1Qk(<6;(5FNHKQ^dG2t50l3M#WGk=nKIV#P5^p|cSKI4!2Ll__G6mZtETssqus9cSr6 z()%?0GUhD&_~GouR6IZ+-1Jv67UB;)sNvfe(SACsC_$mHBqz3Mn-*%UY&^+s!bgc8 zyq*nTjIJr!rT=Yf?C`7etcTg9rYzBr^8U~mfoN`X0pkxCp0>_gYc5+hs9Ge-K9Gp|o#rdJ^NM)M55OcEQW^cThX|Jpxw`7u8pyN}UNsE{-w+&yv85(y%nO z5w{#=QFPu5{-Rm%{9usEHBMR}UAA}1l8vE$e`W{y+b2mnKvaMh?m7r(m|R^0crcr5DU25U%W&X@Q~=XJFH?xqSRYdWn$o>zu4X1bJ;txR zX$og}^8N*FMB_I-S452j?$XK1Evite$$JZR`d^ql8RJbB!E;0d0Lf>2VbV}ahY^a} z1!AMwU{?ypW(k&)$%W^a3`8^#Ly$VSRMqA`IthEB9#e?!D5*x_L0*XWpoG2aBVfPb zze}qahotgOcNWRnwdE!STz(eo)UjTHhQ#F*$rL|BWa-G*>O6!-;6RW$GuThMjq&!q z^E%C7A6!{NO1(IF`^0CwA856>u8K{V7by!qOZ@?qv5r65^zDwN^^{=ABpuMNP&z>$ zB)K7?Q?yk+mlCgxn(|{UlsaG;-9aG@D$jKgCujr|*KI0XnN-3=m5*Mj-*xlC6@iWk z^U)$iDF`aN3&YsBPrIyLn!ITJMD!V}Wrx}Luof7`Sv^1%@~+`eb|28$d1(|g^X?(0 zV82!?+*vJ*8&Wp|ADTiVyoE77Qo$q@CKM-kQ2fLgJA zwqy(rM$rYce7qna)ec!D`){K_U1d#mXi01Byry=^yxnE`dgGswo7iB(M7s-!=-^ci zubB?DEa666yGqqYyq-%5crPOIb*9K4Z%ir+b9$o7(*YT>B36QIN2tsxu@R@=tD-F< zN7haF<>C#5?WWT_^*ytujKC!+Z3}e&GK%gN60f(iyia=M;Wh8q%W|SEN|7}x=)8BS zp|eAmG}UZft8C0B!5oAjoK?nlTc0e?L0yoAp@ zD4!TiwxC=3vpq=;raCn5a-An6~?+vf9! z_;|wh{DIw2Ihb~Q?=u^(axTw1ksO?_I@^u}88EBdVMCy6%V>kJ^V(%5z19KKa_WRj zgQS~hKa=lVj)=q3*Wq<<7c$@XMvncr>Y#vDanEYZ-@36^}*spRzo(5_yeJ2S%?8+9QPR9-AFPi62tpwQoBvFifk|2!4>hXdnX3q$LIB6pWkDztps%2V|1lV<1h@2>!93^-o1)I$p z2uXGuxd#dgMDPyDUguLNm53w6MIqOlM~Z_pz&!|=^ZQI#l{KF~1!>vJDEIEUqw|$P z*UZEF%(HWYa_6AqXN*zDJli13d!hp4e(cM#d!U|PrMI9ilg501GpSqs7GRAcB^z>) zqG8uggTmpU5G#6JqaGz?yH6jNhaf_ZA62H_d|GA^&GN9~=1%uIiQ!(tX}q7i@xET+ zGLdzSaxER>eIP3xh=c+eD&tD?G8#Zx!t*lvK81_PoP2-uI*1;zVmIh+y!V;mDyez^ z7yFFd-`c_RgqiL~JlqnR6S^=eQ_CwexOK+c#VL9m;i^0l!`Sh--@eGU~)f6o@ za35Q^)wuu_lmq`hf}gVOQCIWca*gF|cUiW5na#3l|6KJxz2GG@ie=7dxf`k^M<-y2 z;TucVy$h(3XF`BTL_*KFac0(F@;!;}COePuFod2MGlK*}Rc+(@XVAxX6NL-?Dr!QA zF5Kh*w7mR;>$%BW6dm3zS)&A#gJ4EE45H*r0VX>%YN$H{mNWhL_u*;8pLGpp}q6eRu^Z&EAq;qVd&7%P<*G$p2XPTwvPY{fM0(K(VrT6aDhx2R8 zOI&PZM3OHmRE6+|>wY8KaX~8WJCcmoR|!hmiiQFeGN4H@;dp02VPWp2lQ^~ zRkNkFQ*{pRbe)-LDf;^jPkKOA2XmCC$vGqGUvz%pXb_~ zpV|64V>hpX$Of(t_k7t|VOClE!yWlCA{~jf!*#Baf&W9jlM&Ir0{rNV60*9#kY#(T zDKKSWmQ1Bh)1|rqypqqow0%#3q4SfL^$kF4kPy&-?Ryc^`X-0VR7#?(mWN8{3!67G zOuX-pqC+r$1DWiw9Z313L^Qn1GE@zDh1OiD4~aw6OaBbI1gWZek|H|(lE>{XyaIhQ zo#XJ-oS*q#ubtpSE0#j)BEgVRdCpW*&P3i2ohXNGJN7G+^lmpU=R>ktb_5ZW6*&Ku zhDConiSY(uc%dnnPOtZD<%XrAhs%F>)hH)JW*eba(MxM*q1Hu(3ld!9_xFL4te$uP zGOYb$osV9uHB|>P3CMqFe$nT4eyNbnr4WAwEFuIX_HIGi`mJE$H-Y`@MWw z&lSc)>O*E@N-@{tO}(iKi}VN}?7nY<*q_G0iT*MCuZq~-6^;)BBIs$}JJdK0s%x51 zThd+%Spk}o1ggoKe2aIW)Go2GTmkFl$qGxV->?p!HtszVrb2ul6nrI9sX`6QgJ$3= zvz7}m{Z4LZF40mszpAMa7X>P0Pl`UWW2&Bk7R%A_2Fa{O2sfyC=q9%G*^!%B%D46M*+9ld;k4KT5}nl z8y7hKtE1x@y9}K%c2*V`3Bz*KfTm_}qK~zk`_IVZT?Ici+0xs4)YgTv<@5y>#HyND z$v=_0XrED^x5dpRyB?L$y%fPz^6;?0j>7IrX-%Z+%LV#0 zMw>ygc5LX!yi0`Gdk3zUjm@i+=eMz5K?-D1E&+$E2W6%Y4r5Q8!mQ+aAYwPM$JJ9D z&4IE(I_+~8(ftPPW+5YMs_C?bsZb5AI{kOYd&|}NSf1TcX!onzCMNaKT#+ow#ERBJ z<*_qGY3#bHW+I2z(%Sj`X_S($)oR|_)DuRh-dR50ipH*#G-n0RVGv_d&C2HcQqnw=5n4vumbzqe)H;wuo=(5?t z`rEK7EASSx;62Oz=ly!e!re;Cj5}G8%6*C^8W?CbF?#Z`_EG6AB|WXwich~ z+8eE_A=qe}F^LPnecsZ1N;M5t^ZKnGVp0V~xT>|jN^=KK+PBY`CW+0Ekh_gvUiHBJ z53Tr^$o<7aY~kfG*Y|3?py*|WPdAZW%KUasE}`iLCV}j=QY~5bHX+_JRg`*EE z_FghXEqBDywnMw?Yverl&DNv0r~UPGv2xXkUB}Jvx^4Q6(GdoeH#(=EP=aavcR&L( z-JM@T)oht)^ms(MTXO`+Ew9HIJod6Tsk2|INCuMbzz>A*BTSXFJrEdbjZ{x=Lt{wP zAhq{G>v$8*0z>REEHG;Tm6gPJbd|#YgIbd!2 zXGbAZfC18$!X*-|7(raZAI)ryDZRMd`!~sUP3?iJr{MYv&3i)aVY8R`ZXk|?Sm0Ov zz#by$3u=6ISXQhi5$JTmWNLinss*6Gh>R;#(+am9o-Fpmh;Cq75s>q$Xv(7t#|=n8 zMG{G8M}|YsT*a>Tn=1n=$R-fc;$z3gq}2y3!bmz2BifD4XL9z-hnNTLG5O0_gphXZwFUKXv#hJ-W3U0Fzk#sHauC*g0s-tNVy4?y+9Afaokz-^^)A>$W# zs0l2Bb|BxYE{!xF8rUfFIEr-`{U@3@bqtLnMB1u!fE7b5EQO>qv4nv5&}7JP@gv6{ zMuTA&UpchTBfBEpu!O12?Bn-@UIbS0u{1K$hWftSDGJ;Ne;4&sgAO2+B!vVUzOd%k zZ2&$rKTty5%ep`@hn@}cRCy_bYgICkmg7Y`c5tm8g(m^iO4a8R?e|xqr^ItTuG2?3 z5`PRTw>@~B1R+cyE=DB}R_w$a6NR)RZ@(n=uRz54Aw-?SBe_<-czV1xoR7Dv>cA$!(?_+Ocp6 zIR%3nFPs4{nN={3Hi&AtYW6E$R=sX4>=$hjNe?IndIuP7jlo2kprTWK^_l#0>{QG< zq09?=G80tzp^jn^t67KGz3@$W;}3_;pD?{#g&zC4Wfqx`Z&ZB8^`44Ast1i(|YegwCk>bqf?sPE4O2B*QnKRJYG~oNt(R z^OPRMHMm;@Eczc@a`2dfxz0157a3lBQwUjQZMc-pBklNz*XSUfw?m}AG#VNpdg z2CuZGYNt^54}b#|@|i@!?dejyC?(DGpM5d> zd|ja3sE}SpYF8fv)W6eU*OX4BJf-iXc|&qEj|)E4T|lt~Sf?XHfVI>Vq|5V;0qD99 zxkjy~=jU%dk#c7j_oertFz}~cVC9gWyLO=mdh9*|+!qU8I0*RHe|_ph;jLB{1jIT< zkge;ToOqSu(PVVoPFs-Rg;0k>Uv=?qeJ^FH_5*#Y7PLY_Ka#4rUR1s+)B%3ws<|P7 zQ}e~5U_fgXU;3IB0lDVg+O{BRZwpsMuC~prW81o z(q_yn>?kMUwUF8d=d06WNufMuv}e0A^Ke1AnYL8uoD(Wyp*>w;MoD3s1=(|g#i+E* z_ur!xpnpzy#=V$-6h7KnE6vQgQ`>|27Zg6ChPz)ZGh$$C(>Iv9h}IQgR*k&z(wlx2 zCGdE4giNYWP?IfdPMdLBa1`3t9CfJBThTOkgEj(p;bHZgjTB z^h|Xdo}VmkbT-9&O?ES#UyaqA4Rdnh9pjf4cG_QCa&lrn>y&g7=`Kc4XJ|dpFfD8p z#QH_6=FM4#c(TpTLA1F7WCB^FD>8@ASZlAYglo0^$rESiC? zoKdM)sa-FcT`9NA$P85f*)Z$Ffl$Y^aPglT9io>9v2`YF+F%hrLDfCDPh?^kbG$3c zp)f=R@o^D_?T)B1Ee_;DlT9V?8mDmxDRLK#%Z7v?nP)WP&YIS~D+Alk=#y{%x06F@ z^75`#M`UudVGpu(Hp@k>mj{wB8etwVADE+Z4yNg2H(tdgFe44X4d+5J(u`q4rB2nh z6~CiJzJ^Xv!Wb(A8H+*Xi1#=jbJ~~5mwodK`~{sOj58<#F0@|=9R;N2jo3W0J=i3A zxylA9%{Zp5_}L<~hdks%m;;70O)#4kndL_zafm}e(*;$RNRpIiOE)CYVotlH^iZGj z_hu4O_YZ{FN0CR|aJnwykhrJ5(8uW8O@R@)T=8Ec-bWL7b&C73MHfpg&sE;J32H*EMKr;eW<6Y-wS=!A4yB( zw3ExKf*YI5`sN?#HiJwws_w{nF-SP`LsUv%S46q(!b8|!K`Y=w=C=L$Iqn3GcZN>6Gm$;qUmxG>Ji1yllpOgFGBfJKpj*{e$XcdiQ*N?OtwqE+Fo!5bMCw<{J8e>_(vX6Zh7NDat2d@!2@ z0aeFyfl6e_ZzH_y-j;9|r~G>G!BVWx?ns%RZSm^*T)AOPX;9zh5LQF%WUh|N%?^xDdZK9Hq6aTdG_Y7EZh0!T^mlMevcNi>oI zDl_m45LWur00EF7ZW-p;M4&fF!OD=xkCSrp{L0}-@J8}Hq83mFO4yfIRQk(nXi8T$ z`K^>BnMjy&|0ZIt8`Nx2`Nsw5l}7LZIh`wwiSTxJ=U7Ag!S>@_YNC&v&~-|XajoP* zM(t%{F8SXpo_WHngfWyj9=R|K#0nOn*UanhpG5;tw6ZFixWr?LGuP~B?PuP3hjYqV z$RznrxuBvBHl|G*Yu?GUjeT+Vn>8hz(z!0)e*YC6b+-rCt~*@ z%2%Z3zia7dG|J}UDFzlJHHzoyYpox!{a8ek{;pvQ_M7n;DSn!KL#-D`9E)cnO%mWI zD}pXz?zvIrH@3j5Us)3CuGP3%aF!Vm}Je~TqHvZjX zcvxG~Tk7jNbJ*#5bbZC)>stHX>ACFV>imuWY8aw~t-AV*2)CzR0gozA0<sPkh?e#!K3VYv{C4Jv3S}zZ^ zKDwVmL61!&2w0G)VPBRyh!PwmzMQ!~g{kwPU(F#sn9tFoRL{7wJu}d(FQA8p9qNn#21)mjc)}A-#>qPtnF@75x3t6n&?yK zd2-yN{*VhhedyL-DV_~(0#n$sq?d}0VScD4mY&%wr^BnGI&-9Lc`s%2zbzGsM9e_W%jjvA+&9zyZNTNuViRiivS*lI;w z^a$|{GT{BGM?fKxk3-HtjWhIY4*QKsu14iX2F8PhoP8P;u=pkcY8?leE2MIKz?<|+ zwSNjn^F&QT@2W+f_~NtHRB>YNHKF@qPFFzE)qnx0@z!z?HOMOhW3(dM;cX)vhXu7t zdYOrJ{egG*iVWh?)UO5cLa633k%}?gKe+;&|FC~fU%QGh8H5%s6kNzmaRZ?z#cwPOiBRUQ*IVg35~_JeO+MjtPK_{dzXNYPDlWSQ7HclGdYC z&hP5T5r44);{FA*ZIxIdbwSs)3?`t`BiZL>(jgYgDBI) zh~8p4t13ewRKxMeW;yD2$keKHii|8;x!cJG()kqQSl~?+I=i3x^W8*dkC{f|AuXzd zBU%t*8V#(tVgezBGq3 z(=VnwF3o;Z3d=SRg|d*^>|L*9s}lB505kVYyWDj5o-y#K7jFl-7 zj}9%^e+B{moXa`wlg&8law7sLg_DT+T2X8HN8pew!O~p+HUOImYtPO`1Qq6R%=G*~ zQtnBmiUgy+Ye2^Qf&|tQNbefWnUtE8Ce9~+@Hoo_FP*jx2@ZFWx_uozBO{VNFC~f} zoq74UP7-miBv;SV%RTrt1{aH2&yGvDG#!a%4@**H$yT0|Q;HlbJNT77zdQNWzQGAe z#><=r-hKo7iAg8OJBaa^HkgxwR7Da7H? zAIUugv-1`0o$k2TB?Mjwx81n=gy+sjT<|9t-3dwG{}kOtN)q>!P85`6%*lvBv;twu zr1?r48&RIWKoDnzIfQTCEB%HL!oF5t&_hw=&4!GXcWBjieUk`A@QNLwh_qt9te0+2qN$bvD(Lde~@lL`gVb))I_RZtnuK=Gq_bur3RKrs;J?^Xev@q7ha86iJa@aXeU_yi}M zpID3}eQ;pW%HFF+h4{7(J^2h*axH*+gh|ck9cx4Q>_H}Q%}40ql`Pt|0fKXp5b!Ei zv@HQ?Q^ZizZ2+pWlm4S=#{g*Bk!-uBMEa>DoK?$rMZ${LBN5Auwzc8?c*2+=q20+E zaN*f@v`OHI7jFk0*d6WWb3(M5pJ>FiLeEk|LLksm3W+*A?E%*=!dZ&H$rCB-;N@5# z2&FI}2!EVjc}{8P=D78EfLIH(keLF1eW(Tk(=_`#lYTx$6m7fE_uX`#by~Y$-?;F1 zApBB(IXEE4_F@*wl!D|($?uclLpFzJpWHf7|5S!pZM&v|v{xNr44N z76)T9R-|zD%jk)fj$C4Q>J0O=GG1Ygw;gK^^Wo(6rFg)64gtVu z1Da-a;bwI=^R8j#cTVq^*UC#%QX0bt>Wh`vIMfAu=G#OV){iVS7*Efp9Vui=(k4EU z6W#P?ln3N>UL;P$%mbXk84yW4iQBCV_DFIqi2y$n4%$R(_=V29WJ9%_8$kiSby@>v)sFEqN=u3PLy@!!zQ(x9Ck5rh7YIm9SbuZPtT%!c|hO z?vBh(txr$6qjw1sfXHW@B2}ho5W2Wkm#nN46r)$ZuNiKD0nDq9h(aq~ebWnH+?06Z z`M3^0C)%_9N3;igNt^CsbE9h!D+4D)B`-PZZC8n6=X~2moMM|sU9I;rPUz5B8NYvt zfQqkhhftKIacym=N_D_zNw1GP`OK5cveX+dnb`3`mEO4J7q^8wJ%IJ3xBr3C6+;OB~0L*^okgCitiK8Y|NealWIVF-9Q)ZQtPiQx2CqjgDvu zig~@L8tBYtJ5j{LbZbKTNga|DFNb($z%x2iOH2xU3KEu^5}w?1kv*o_XOYeEnrv*W9`F+H%-{o{W+-?+CONb;&3u z7%AsLt5y3%%|Z4XA8_!rB8dW`N*J9){0m)QCC(P{^La0YrA~JXMD-xL2azOV_Mm4i zMO5{6O`F_xr6&`n^qOt9FhClL;^3F9@&;H$;_^`*8(|l;|5no)Z~>Jt4EeYvbyZrW zIZYMi61Gwe>GT3Mw7YfyE8;@J-A1Z2qdca4 z*NG@UE0s+vG7sOLLm9ZGejgYT;M}Z;#Y?CTO+hzMp?e6hqk+&kl6^_Z>d<`PNgENd z3{QbuM2p-eNJwma)CVA|7toY!%*5U~Bb;0jyB3`|%lk3SJ7|$bl{nB*lb5zc@ZJr@{Kv;DZO|AwjKhLrcx7 z9)XK|G|;r;!!IaNE4#v9TZCIGw@ zWaHCwNeybsz)xrb_ie2997(8>tL)PSd8vndW$!Ob$5r#;QB-`tZvsq{EjQ0U>bts_D@OvgkjQS%#ly$SxX!uzs+#5F)ed%qC!Ov2NJY`h z5o>w<)0;_P9)oj@?rAFvL^>kpeS}5ZQnd&Tb<hYi2> zzGgALPylu2N1eJ!;XA2gA{L=2OScj33qK_#E8ljB6;b$$EZJ(|HHk!S*ulKa!t2`E zN_n9&=kcHK7NG^QMHSFro)?zM!l?Ewz8`MN(_e3`K8T9ZzN`OlOOD#Ewn>h-#| zd+}tVt^4+=cKO@w^O`f_tMhpn$FX4}Lo&DelVU7ZG{+zRM0B{C{DY=6s$^r;HEI3S z`s@jkMR!k90&Ws|IpK*&(QeU@&^jlf0i{)vPaM8fTe*uhVFiICF~`40wH}$e7U_lu zx8Ap%2~1anf!YgL+%1d!AumdEDW?n;VOjGr7hWR~iRWHnFSK$y2#RI&!;ww#qo+UB zh+YG__>9cBS?bY|Y_w8s`>@fedrf(bY?hO;gY(@%1otrWokq7riIoJDeTi2->G^gTawx-~CH;^2|xLBobD5zp@e)DdBXro{SYV4B~D>-l=5 z$@qWeb(fL0dtZR4uKpmezgYZdh;+vkhOA3q;qcCW?Peni|I=ah83|;J>>ti1sXl8U zFhyc*{dymA;AJfb3>qJ@W(eaMPJZt77XcD{?sKWWIYj5-!MM!#4dZ9%2XIwngRBu6 z(jK!4%DOPFKl$qA28Rm+Z&$2QE8!Tu=5!3`F+U zTMO{Mw$9~Wk@j5a8SFX_cNSLl#=ikf&|Tuz?fM6X0cM1y<$8qUIX|Wz__;Jla^Eth`cQNg9#AuT4WHbvK9Dxla^r)z&K;f8 zgeK|S#vHhY9Ia?kN&6%fIka{bUTUzs4!!+nb}kcLPqBS=8bOs8H&qu?g=$n)UZ|-( zo!@n&W4-cy+7y5tteG%v%XV!uWSL1FdtM`&DEr4!`E3zmpZp}1 zP`fv{8QwXXdUJ*%uA?oO))G*8M4(Rh?R;i~)NA?kdKtrmA8)zX2BrD>EX)_g=3uo| z`Ag>t#VqL(m2Rn8K;i8b9)UwEEYTmBEe}c!kVEDsWm6i|^kyR4;qaYQVNsrj`t`_BBLE6;) zd<1G*FGfse!nGFp5LAhk(w2x(B_VJj!YjP1!_CmXLHn!&g;|$qj&vGYl zp80ApqAoUnzM%)=71P&EtpTZ({qat$pR4qXpnGCVc`xu%nCcdwVs9`N~*xv)g1o@Ok$7V7s3nPTV?7a#1G=o~g* zOAK;wZWI>oBKh|+twxF){acvoHTnrq4MFW2W^j+_HTgR`=2=JlV(y+a2>~&0*TA~& zXVb|i!9CO?6HxM62FNn75m>P*9U~fLm0R#5m46^}`Wj9j+!Tx>=>Gw7K#jk(1zsHC zmn_l*#P3pzssg2%+?BZ$*ptO3->0&8hBe{}WgwS3X^_+?Ai)Qf6cv%}gx+LW^0myR zIVNl?O+lPnrGZ1qwUL{B&NY;KU8+i;e2TP%EVdd|#7-3E301KN;spz+GM?uo#rPiG zYw`yhRUWl`&J1KKPX#vD0-f=7F78qoYLj!hOCaSt{wx-hLKe+v?d}c^nV=Twar`z$ zs)Ax{RADrh38vKM9eR+JNPufup;flk3hC*bh)@d&;tFwRp;N<`7r_;(_my}jgjDbx zxhjU>&&yBjA5cpJ1QY-O00;mDioaZWQ*q8#f&c&`<^cdD0001RX>c!Jc4cm4Z*nhi zYiD0_Wpi(Ja${w4FJE72ZfSI1UoLQY?7i)F8%L5T_@7Tv4UR7W2`oysyT{EQ+9OM} zo40L=N0ROK&>Wx$6v=7=Rd5wR3a!zj?b%1#SJ?Q<%*d=PkhI-1ea|kAEdo`UkzbLK zk@2~kynXfJ)j{%XHcP(F%e*e8$!fFAldLSORkkXsvPo7|Qk2E2$mYf0^I0;j=JR|? zuhN~}`GlVzb;FB(tK)&gc1FUe{H+SSKT^7@9o?I0390pddvZ90`-WIE?qJ;NL20cn( zkhb(rvp$~{HOxU(Z<5tjUgy zG(*{j8rn(!UM#r|!J@{e>t$z*4dudb>Y4Hw3>sAlVV&LdpHs^h|>$#)Gx%IZ8}RN!$RK;eT4pgusJ7w4&& zqh>PN3Ex3088$hg{vIqh%i>_dlLHGdfnmaQWzY@8@tunr1~MLBtXJzgACD7;<87NA zc?R68O|v0oe31Vh@5StMH05yJI!>r7DL))pU zG2e>Hd_zFydu_iV{b_i-@D*`UUJR%kKu$*V;wMwZMH-Z z@?*V1dh!N(mzUF=AHD>npS@i#=jM0yI)^zf`Ima}T?tbmPk%f)8bAN@(eu9?zxmR+lg&JD&}# zzxjT#E`cglbNh06eYsv0bGr&lo*ercmJAksVSX#x?urx*;;Z?cFS23|6s3j@V4u}> z=~gvgcmr7F?^d^UwzTVCHb@T5&vJ#-$+lKC#XJ4L?w8hsG&`TRA1<;fknX(RFb2u^ z4GQ5l=daLtQyHJ^z@anEmbkf)A^@VpZa&{26-*k~pXb#(m~)0%H3r<8FgSP!a|{Hk zfhS}9YF;xDHvMgYYK)QwCU>>7v#K`-gbe|t#Wj_xb0o|o*qQU9yxyUbKfFGEdo+IY z-O0(T*Kd=<}B>)nbvC zvQ__973COD-J)C*4Z~gFn!3r$SyiW&B-&}o>T4ptO)|DG$MWewEa$XLF~S1T-b^5fe-zk2z@v)3=7|8EY78N}TQQ&n7SlJj*jpEZcjvo*3- zl_QY2rC~y_Z$RS<C>$zIJGx+R`kAZi9BPg#CICje%NT;X0*AB;fXQL$S zXjpq|W$ukXrV$*WWsbc#xxR$*0z`G(hq5z1Iza$lxe%m+1r@#(*2%AO{94cl&f=Q_ zsG8}@&KTd!Z}Qnu3AFYE$j%C?0Vjd9@i{P;=Xm4UB-x7F%#p`L#*leGu8)vmhVyLU z>f-Gw*-ws3KpS8bRykayfWAQIV7iDK-J2KJz=NOv4UfECs>eTwmj%WbnoFQ&AF#BX z706w}RZ6Z5NmC&&io1ZoWQG|XRD{H^E*rQ*z`h?dZwrheYz|-(q2=)y(DPd={|#0) z^Tf@Mn9oYN0M9FR?;v?|MfWq96I~tqi5){eeaY-KZx6VVzzxVNJFD`h?63HGGyaca z`3?1sOZ0Vj0ZC-BzRKu6)j~Pw5@Kn4anE@3eO2HA)~Yss3&$%W+c~g9XL_@En1yKi z^39*&gpZ-S1w#L{CTygU+93V28L$xmOVI)%n?3sm(b@003^Fzs@YL%c6@_CGNi5t! z92HL;55%)=IMSp7UN^~ZfNdkJj1oL#{8q zyWto71)ltr^4H;`VGp^l^mu4H$gqFl6J{WnA^9nN#OoT}7x4ZJd!u9#0SO#R-ZQ*? zGRp(No<*LxxG3_P?(IZQHn{KUZc7&oxWq!!scmCthnR4~GQcp~d_?-a@DngCcu#=R zPzNO|)77cL>@%qP{sR=jWgO3P7%5yasrUejuV|I1F#J*rDncOuIbXxG@mpHp@mpCc z*WRhr!-fPP-ze##<-;-E7z3-$5XJ+7>$;3PfZLz~+3!H{_snAvOS zH_~&}p%hr*1(abZ7Sic8_VDtwKW^}%&`%yGH)n%Ocs$horLwl4jq4}-l$cmUgExfu*?;l>oc&Nm}CxJC?2 z>Qz8J<~b0!q4~L9&Jb(3kk=%iI`KyR#r7JPYF*8@r+-MOjxClzka1HG9QiTN7U#1p zd6diYdFak*}Gz~UeJaG?iT5**?N3Yn*pKc zs}la3Vml7HNXOt1uXAj=VWtB%1j00T0UGNCG&OzohGkc`=72VW7UYK?0jv8cQ5?Cj z#87Y(bR|i?#M7KW0Wm`PD-o(GN`a8-nBf#~KiweZ0{AGw#r_d2OS$}huVxS^;l6hnnjKg@#bx$p5Gc0Rv`-M8z}@G$5djWqu39Fl=XpZ7kN!isgY`pQh^? zuF5N22dDGZ8(E6u3tm3Ban1_5iBwal)6l*{_OC)hZC5uW(y%Fu6^p`b5#%J`rZHl` zBz?i6jpd+dIcBg1*>qafGblXYq~0-su#ge}V$fAap$EN3ZWD%HHA2eYP?PBbuU7*s z%f;ZLx4?zM(*yCEgo-Euw0%81OnS4dzAeh0qbFAMU_R2FJ~jDn@1q9(>n9&2gMQji z@xneB(louQgtPaFrQuODlMwt0XSwgfxr&o zo*n}l0egFxoQh22%d9D;P6`bZoHs1{ohc4)KS!27SrX3=FQzDQ z)4Eu$%oEzJ!jtJ|x&iZ?_#bL)OpWRC{CJTq+YeDNYo4M&Q-f%1&t#Be#<$pGxR$gY z<1GNs-PQ{f>CK9|^*nzEFWRk=v`U`tCP(E>QCB5i-m*CZlY^yq>y*5U%nt6q%QMq0^IfA!n z`9-##uUI-_M{`maiwqD1)m3yMWf=u=dpRRwUyaxR{DBAb#*N3^Prl7cpl)^?FCwU- zuD|AyyO_FpwxSBxz?|UFZZb86EIhBu3m~GaSi3K))mJEdFz-YgcZ8E@J78y2L*Gq) zFv1in<*~nR4uJt7fsW8W-i3^-BqIZAYvz)9RxM{UJ@B|$yV$^`k2Ma{gP@Q;R4ppl z1KGZ^Eh*8Y1&fkcK+mat=r)gESc2!XV4^zxU0BN4)$ju^O;yvEgim+g2;Mhjh zj@2w0NX#P?f6q0l?G1dblNl6)IN-d%ymA{Nnh{TLbUQ z^Xj|T&yT!EBrtsS-COVBi=*$4zIk<`pY0|+dm~RsID7&79!^AmLy3m3&M&ds^k{!x zRoCk!st={7$40Jm642b%<=?#c3TD$(GS5&@89qC@ylg#MELWQlUXBl2B>yE`WW$mG zF?{rb2~7AHuC(DJo(3TH7bF5`J+}07e8o5aRtdQV<5kL0%y&TgTvfwo>0M&3$z9tU zg=|7PUpR?vxZht`J?Q>9G;*8Ovw&l)%DFjX;ZR*bKP-|L08japW}=IirCqO?J`gR zM#FGYJNqGA|JV`Q7?0RZzMd&sq#5(% zHsfpO1=f#_d*BcaEr|M#SoF7mN*qr1kZ>uw(weKf!AsBwt}*-#$;4Kg!!5U`ANDog z!S6wRwt&R}g(OM#ra$uN_Ut2qW=j;T&>7wj`_dmJa-sL34S##GIL4uDKXIigx9{~G zr5h(bV(Mv~GGK~{b5Abv49z-vMjmuo+~g&h;IS0lvU}qTQo8^{E;3x?u1=L+t3yR& zH80TJ1e0n)^NvgPzC^wZ%!m1NCFucw!P?oVxR39dc9^NAo zG{Opz1uB$hOn_y}tO?&_!YZcJX@VvbW-XCKM7lzDo>nr4M0{k78?)pQLwh7T+0l-} zOVZX%CatT-WI|)1(?I&-9Xt_qI#q*2WC=S7YxnQQ5X?%WO`!od@~Q@UMT!@qG_7v2 z9__wh6zyv>U6PrpO4@un0KblijjjM<_^e_1)5QdKB zRt5x8xAj2qjAATEMl%M11w`KMls;>zJ>?KxLB|=ZrUwz^9SP{6KtvM#@7B&Ro!4uY zs0|j`y9O>Hhuj3weJv^G0Xt=-k;3wUf&dOsg-xahow}fuTNL8(@R+rI-mkW|A3`C z7Fzc4TbSYcygx+itBWhYr0o{p3CQTgm{X=WtAmTHp;rTX&_5xy%}V;%N4pWuS}_15PR3LY>E53OA7|B4U`Qd!jp^dc0)A2h3mp`q$(+D~9G9h9;*> z0|W+FZ8F)aqeIhsyx44sZfPOvCT6eyS=1`Mr1v|mY_<{sF7yrN3*?;njUJBTKEe%Gmx$T4H%BL7I+#f z5W`u&)C2TVINh+ms6@jn2kSCXBMG-}!0?2pK4B@YsQzw?`JBjB0BdzsSL@5GM7$_O z2N4KIy*eHGueJ&>v}=*69{ebvjjmBO zrtI~YJboaj&CD4IK3<^T2iqI-^74(ufNz4u^01s zt9qT|qUVLL|1FRM10?( ze>P28I>lAgsSN$Q1BMxbTo`2!HoUJgJpPTzz!%{?SfGa+*idm{){$&>UCY4QyAcu+69SdlLl9#W)YMnVvPK_@KYX!Bc{YIc>%oU}+! z*9#^uhe>4DwxPR5|Z7yNvs6EnCS5$QOPlv-+9a=P3ulG@t3K8dpwpB-o_u%6Q zEa+aF^!ptmh`&;EqVq^exIOEOI+a0nq?D{0XJ4}Kl zGvvcP`=nj$lVMc4)atD8RF*`+pt-kf5r&gXlzdLlL(IBQk0MkK z33Nz-ood)8f5w96vP#f)bEn-<{MKW+j|<#nCL?6@Z=p+3_wM4~nz^l-AA0#^s$ zu(dNY9z4NXW75rN$ptxI;(CeapL zGTpLQiTOnU6&V{>Z_x?+TL>LgJO%KJD(BNwc+Gy}Q(lQvprxb&{|nF30f(@)W%%ng z{I&&9nO7n&?&x~75jLrcHf6lB1MMV$`Voz>wlzy~z3PIl-{{_)bRu~4{R$uQo$ z7=1=NfbZH%^Nq~B?EnXe5Y%%aFjP-WBdu;Y<67we{}?NO5^K5?b)oPTssQ`wT|Pxu zJvUJd()16_`R7GGb8rbPy3N%aR{hB~4s{TN*2W$s!Oli~xaEOJ7bNF@V+@gja|k14 zG_9S}GSziAB%Y-OTaz9nfqCi30(CP;Rihi*a&jc<@M3WQf)l;;z)jqSnn({OY;{kp z(_|9#hKXu?WNe%K+l(vl!;Fuy)BW-vKTz}u`%MOVjvm*s;UQv+c%L+*!ElgF9l&T0 zCIsPE4iAqm1K*l6g`K|N85TLT3@HE5@{P_P*s4c1-5K&r$Yy9Ozr82h>8Bs}=VA0y zXq2-zSN1qAS_dh~(U?B>bs#7NCDj4$^8sDenqpDRvzof>4|zOBQ$n%R7!kWiwh-2J zR++Z=45jqwIcz<2U*^7&F%_M$<^-o+2-svGvhYLGzo9llBcl-813SIw{&ChWv>9LL zo5nc;+L!0_Ci21>RnNw&YCO&0M90uhU2vwNkZiaET5@5=BSKkUIALBM+Es9Mks2{e z4G3X|>eXg*p_yE52K2A7Z6dVbKt*l=S@OQf&@5vxoi`nZg(o!zi{g`$3+pwDTLs?Y zAf|Jz9crnQBt{XM`??54V`J>!jK`r4rWL8ge0C|A76QU^^|H`8RhcJ)bqq=R3anwMMrL9o%jr*cfswsv{;Z?%P^86qI=%Faf zjAq-)w_!qqB$^$gc&h^)zQnpf8Cv@`(=$Z^vJ{Rn3MA85gpQ-jZbFE?A{M$@uZ-ra zG1kwTGO1eUn}n2@#`PI(M9AVb@d{dOJU!E`e2*fSw|+xHa5gMFLaa!m zq{DS8LOf)F$m6qGZb(mp{A#O1=E3Q~8PAop)rFggimpj_jBE}9fgc`UI5m7EpqDeY zKbe>YP~(P%DSVaNv=225n`D4ZCT(Xi9`A?*z;Ko#bzV2@CyRvxO92CETGfCJ%ZeKo zovl5!HX~y{zagptBgIH?$%I~F8x~MDzs=wv$(Bp@{%j2{M;k^~M-RdaxbCVPxSvCP(#9 z_vzJ1hfz`xoYEv8+&A zh92iX--;$#1e&50i7;j~hGIoN+ITh5^QFyVnSUW88mykek0GkGSbl4IOg3!R-C(vyIaIsQ7G2}?-B@JAY&Q`My21T`BA*KPJ^fnb zxwyp}y;pc9Vbl!k<4*Jdd&xfTBV3L9_ECC9d!%p-0WlsNd=ookjS42ZCnMMi0RzBP zha}pwG&*Nx_0TypGEB#SHZpa(4UJ8rp$M@FU=uQVtSoP;7$55~$Ohat9=f9uX~+ks zyw=-?n83i}URP?B>lmk3DLz`yW1b$$*@}B9;7U=4h-W&HR}>8UOde@3LO&HIHnleC z^t3S4`y7vg!24UabW{|+?Ha}sRZrhS@(*D+I zDr*%v#4#%42mj2LBTDg@Bi6y*;+&zsAnJr0+bav^yh0hQG(tAsBI$q?pl-qb7zkJ9 zl#?}Dtj2eQOulc6K%??6GwPJ_e4Wfo%c&7%j%hnmI*UVtI@J8(L9MKK=r@pc0+8Y_ zTVuFIglet}f*hel)yIl&DvB-EqBO=ns^Qs1%c+TiG!d|R21|3H#kegO=s-1iI!rId z63xbyqhUeu)4uVe?4KzpUi27#q)TE|Jr&wd#aJFSXf>SbnQ>i*?b3MXI_i0>Bkj$b2)Lxn;@5d&7PO|5sSH(5>YTUkPe;T-a+RaD}B z<~yy8MQ1{*u~Y2GS-VN-B37_H%p;~xW)_I~qk|w;f)_`fAgA#EnRl}Zq`Mxi^BF|< z&Ru|fqU}lmtC`nOANfg%@kzeD z#b5|%!&i-v2eWr~!8l;`(aQ^m$+rh?)?wc(xU|13M2bMhaexskQnIOLJS@hzf^rX$ zuB)lW=!o8pWx!Xb+l-8?g6q>TRd++niPI6&wQ(5H`w|Msa)LHO5v{Sfmzmbs&CDmL z<|2lZzAope2b#zN9^$f2JVuaOq%Mu7kFxDtOrnQMDXGNX{c!cdW zG~v{8u^0t})P(jn=(n|vB|i-sG95`ZJ1u;1sz_>^($j3q-MrnA4iF!=VSL;TguP2? zZ;Z?QR!i2LX$|47=xR`c*Fl`MC{SrL)Ghf;Q|p@pEd(@H>6%z`aNL6=2(x?YoA#Zx zX!zK~cYu|R(Q|4aeO95HD-1l(D)2N-&tgZ1(>w(Yv!&4g*j%;Fw@3f~?EQ+_>zuN# z3jgT&^0{R@TmQ84^IvzN+W+hfLeVH1dY3oSdBFki-$c+Ejrke44`C?7;wGPOhAgL= z=-Jkm0N!(D4$w$m4C3e}YEh8MV+jIFyKg3H_AjiV%}B*PB;RSZcoWWNf`+b`(#74T zDV%`?5HOqV5xX$PCPz=XQ5b`~hTPjjo=jhpU=$W>CL?bQEqnp}kI5LO$R?!WWrobdJVigKNCRPSUV4=|()F{|Bo~Lk6FajW2 z1H>7(EM%%@Ot^}bSr4`Cd0hZas&lIXG0g`tK=qO#$0vaY6||MUH1MXD*a60Rfo>`E zLTt!Mp=8+e##bvl{@ZA9SRIa`R*f!)!&7)OyvQ~QhDGCW?~}y_^_YM1i4FSUzzh1` zgT>W3wVXtaFc%0c+==koN9LQ$b)C=Mb}=#Jbr*1Ra^9hl4Gk+6^SJ47Pd0c@;8mw_ zN2xn|uheT7(lxk}*dOF(g(2nX;J^O?yVd{g;I=Qwx{eI_3k#LSQ<_%1(iDV(zyxkrHIea6V+!x zvbm4p;q6E!)dgZhsnt0WztzLC0}*DA*`vdKMht_X@giGxZpD~FRF@6|2Y zgmx1j?!D$je-P54XUC)kdU4Tr4tJVvh@5G}T4LquPDZH~nX|^D3(@hWDrQ?iAy;{^ zuF3r}67Nz?;T9lz%^xrkS`HX~Xmy;`OSG&)+*3gq+|kfbiqFREogHn0_SS6^?4LHr z9(mS+7xk^a8#!!q|g} zE?Eh`9*0s8R{(wTTCaZ-ais~r6wyd=4j+@U% zOw)q}kPny`PZDAMp_`RivS~b08O1aos#2RouH;g4+{9DF66F0R= zws`a|!^lRQ?B(E~eF?HKMiQGF?TUkNeCZCfT=Z?q^vf5@fl-o^F``uVWWA9rnuZmvt0tA>DCTgaHgw-TvHR1ZO@5x zyd zy2{aQjDl)NNwcE4N8g8>o|~4H(K!Mi$Brf8W?Phwq;*f zBLNiYkp%L5W8+nG<3Z7MOyzG<{0!R`xnk(Y?(Od`CQHIhm4>pM%04$*zlCr{q{Q z=el1L^1DcP;yxO?5QO@Qh*h*v1jPlyvIN$qP6WShWwf{!ca=5QvF?@Ge0i0f=PMEh z0=9O+P8$h2?G2x%{$TsT>5GHCIp1DWSOpU^+CYGvV<=sh9nJl3^;q`tp<;gA_*(aT zhHKk?tZO-1dzHYcKUQfQ(k7F zAZ^%&E-r;Z+;b%PH}O_sC!hw7w{OcZ-Ga5~P2;3|oL#~u%b9Kw!=SpA3I4m4e=dj? zhO!=a)wiPZXjku$NMRIr)EZSLM67XgbpKkn2>0*-mqsODn9gKtY;$%FBpBpDKGtFLuhUX z=NqfiBBjQSDN=T%5K(*FOVDkSML+UwMO=n+-{|$oc=cwh;N)}e4ZghtdG3i&YIYy1 z2o9G@cAerU}6nOw%5d7Zi_I42C*XJA{r|JsNuT$)8kXKd@s7AymPpb~`# zVhpyHIYTueywKJ|Hdv&O#>ZsLkW8kILq~)Q&0hk8Z2`_!9yXwY3Vb}Jqqtk2Z+6mihhOvpY#>p|qc5jMYQ6uy<4_a2Zc7C?O3_Wo|*EEK$mz6YK&Un;0 zajIEIsP`RYXB#?kaXh=pppApV7o8p`DUJ71?3p%DbEAYiJ4&{7YLw^z8y2XKRfe5BOxy&vOW05#YOsDO8xzEv zM!(D*;X&>(!5uq-{21LlyTtd-Qsf2R9(v0Bt~W~F`qqVKE(#U>{We=hOw%gQWQk75 ze36kqdJ!giqex-e$|3GfJi4E~V@IHgBgu(rS`w?3pOfqoIy(q3eR@=BA;oMeHf4A4}>*f>$7evPqq!PF%F9K7#y z=FkJK`N8K9$%BwaYG{vD!wrT*%%3I;hdO7H87mgErEC&=73o95`K$-3$1Z50x{n9Km)FMYSg%k0Rw^o6|_y&9|-N1$av?2ZtFb;&bJuQc2tzAX{lB4-% z!FRc!nUKUbiwus07GB2T1`k$nK=uaj?XK}Zs zFMfhf{QOw0$)r;yxJMa^n)3nBr+xIomCg@2R0tdSB2n8^YYPqt)fK1KS|*R+6nPY? zRFDk(4W}1iHLV%;1brs0h0S&VoshxXai~4wA7^x(!(Ox_WvN^cE%e|5+{mHqQ~xE3 z^9E`YDDDH^AWPRBkt2)*=h+2`A0VfH3vHxglbeo)uN3qcOOCjWG4Ngh*OgWcH7;Y<1-c^kIiGpA>Mh33+*TveiLideHZUffus2MsW3OCV zj2#4^^c}POtsuT7teV?fReLC|ZC1WPsTbm4qFYir{_oJ01hXWdPfK1l1x2v&OY`9z)tDW4m_uKdqGOKH%vsDyz+LN5RWXOd`74;3041Z08u- zfv~=X>vZd67=%;K(;36M%6=LIsEF^aL$)1j=vZxss;dU3d;}?yga#kSZ2|ovBu<8g z4lzA02I)vKt0BxfhPLd(5U!?+WuNlS;8@tbzSBcEW}Vq`P4sWNj_Y#vAP34o^uNWY zwKHSLKhrROr5|c%h%(RG>wk7=|1cNQ`^RVVm{Br(_cRu zVkmYT+OJw;5gQIrLtx(|60^9(^3A$vTZid*h8*22HE|5_Dnur>j{S(42aqQqTmTL9 zz?aWx`&~O0oJ3PIQ8+Be?F}Uz67Q15yRSHI3id$|CCOi4o}x@$A`YiY9_pBU&Khh( z+J#=WXn`WZ>xjFuU5uVxI0MA%aahL=-^mdN`efl)gUJUgcg;pjFt=gVPYSofUX?78 za=L1VCZR*-_WMaoUoN)vtz5jGE%kju>-qsbybaenTYT(O-SDnEk>GIAXuf3PZJvc% z3hN-y>a8i&vUcwREsFLknN_!B@3SxK5oJ;0>(+HLO6hKzYS6QTwm$Umd*F%o8+OlW z>%4daVvf`0ukW8k|Bdt4*`qs;%Kxr8vlYVAQN8f?)x%EFdmW9h*!8{bC^aOMb69k`O;*v6#`8Q4CiL*TV0Zg!4*26v*qF(?m>8roKv@z_blGM#4MEU z9x2vwWe|^(B7A$U9ZOA2F*Tm7zFd=-A`-SSJ~0y6N=#(YkcTl(-J?5$ z|26T9MA)fyS^T`t1N%Z@Lpscsb(h0ncJ@L=hCjpB!9d4G`^dl#$EL$bO?pTeYum^L zXenBW{uBa+76*G00BbfYR>EEd%SJ&iqrx&j8y_{@nYs=?R=hz))%iY;LW=j=OsQo6 zOBr-)w)9y{MU3%ZWM;kY`8U$GL0Bsd-}8*PM7Y0yR3j?u`NA}*JfLAzn4p*PSF9uj zQZGF=GYo+uR>1MKM5pSARp-dc;0~F%uq5u#cM{}4s5b`1N3j*b1|E}_WH<}(W@jg! zSXy%R?mRQwOixGSo5DKXCMrCq)?RY(dR?xH1+SHtxQXo~jfFESVu@u;T<$Sm9@GO| zR7eZy?TY)5bASs+14z1T(Ae4GS;K2_g^?sY>N@7KLz$Nn?t$V)2T&LYMb#X8zAFfa zjvVKYz`At-o!g0F5LI1V7G*Xc(?ob+BDUfZB_jO#~vr9GO|Xq48^l61(}Yhr7t3T5M~9M{<(9m%01U z?nhWx@m459H~y;$$31C7b~7FTKgsK>Y}ue`PmLBS)f(;XO?oqmq(?cnR3=ek1KsiG zfkPuB$^>+km6sBPFX-<%^>Sq-y(d4u{qw7rMO;?wlOF z(6f|dRpUj9SC3Tix)GKAqVY637>AJz(3CUsg%bFanHNrq4G}J$(i}t`G0$BFm2#Q* zE;Ow3d*O^kR_4}WcnN9OO?Ww-SDg3^cF}-kQ>XA00_viAm-{{MPS*8xh zWoe6C@NFn|j!q`0kU3?PyN)(}kw})r^tKvhH4g#5kfb3E``%!r$I=5N)kl&=34dHO ze|?#kDEKmYk@=vhWH)0%j&i+B;O3v#Tg;%Rt6y@I7!a$hrW2PTm_)390|GP9(EUA@ zJWl$1Kq3000WvFowJ+hz^>9x!nq){o42t7VRMK1((@Mq}_HTTRBHStV87`V22&`EZ7Zpavo%aYjeZ%>-3^N7)8vOt(k8DPC3rz4b8=l)x31rc z2DhxF-{dO#Ri5mA@~^+AzLNLlEMK96L8sjrAh=2J(=S(jnl>bWg!Po|vcVw?D$K7) zhwo|s7K1a?{j)&)xr?baet>rsh7w!mH6@l54?Wr1bBei&ePwMpkRMsj02C(!%oj@? z=z}8`K<|(Rp|k(ogg3wmgjSm>gu}ayBmBZ_1Bv#Tfxw?@QO$DR_lUZTjVW4pz;ius zRPKLa42)I!W_O?}v0I zRsAL2Vo&HuFq0R)@#z_`*kYW$iTER^_9P1L#55S1$`lPp7D>L%rpXnsML9}UO$uDg zTFk04|C4MJYt)QS`)<>5zL;{ey0UH+*__XB0W_;T@1_>ZAjPI^N9ov(S1-T$G0844 zN~*YuV>|~H7hQ|DQM_K8;KC%=_>OT|L#PEq?ZsTNE+P%b1 ztjTv}yd?(srmC}gGxT^s1S1A5X05$+hn8n_F~OmeeA!30=Z)NeNE67Dq7|;edD?UY zAqmJfU`+9@AJXD)vul%3+6rJ{m--ev_z{XX7#NyoX2sIIVe((elj`@s|NRh1+mq^F z;p0Joiqk77XlsrLsJ2LN?|3U_5eau-fiAf$iG%0+0b#mbaXY>4yj@kqU9+#WTIOSN zQ~?C0qr)Mn(Q=Cd7`LPABdjG(ARX%?-!K?^6S~=W{_td!9^o-3Xgf9d0WTUFX>g1- zYW-vq(!0qdO7TWaOz~&6R^h{21jWS4K(lyc6=IRx3DRHZm22(@we)GR2%Tj3?JB5AD_$aRsJd zR$Ge>1G3(>y|AVo*enH1r)j)vgdJIzoej9VU&M6T-{W@jl-V-UV3Z?S7AG8#Zui0) zO~`f}DxXPmn z*2Z49DdwJu=!bFL)QKzDrA#1+iMUvoJdwVTk5aw?UeJL!#q@Q6byK-9RW37#1?Kqs zK*DfqEIcFkwao2Vx9#kx;O;wLW7-(n<_Ypc^W20YZyN|{haW%A9{1!=0SPEp+V_z( z(h|;{6Fn~!tzL69Bh0f((cDTnLE%QbpCWytU0(CyC~|?Bi32St+~4a* zXQR$jI6(*f)Bk+7_aE8b-=FOLF+F?SA7KTS;Ch2Jelqem7%Kg}|9FidJHPaRcp|J_ z7hr;rsqI(FdcRdYP^kiq+wS*%m*r9>Las>p;}Te^VkXsGFRYiRbqJQJ9`qBOue9H? zYT7=zrb9BnW58!PG*wq@m+b_9WdgJig_}(DnoLYcP+BS2T-ExLnZD0I|2*NqK?ZQ7 zt^Skr<4@M->vFYz+LuZCx9|1Kbe7*ddE8{^XZUv@>bCIb4{T-cUhp3ZcW)d6`)go+ z`f>XBi^yca^I$3-I0;wzd`>B8=d-)}oKopjN`LNcll$T%`)MC0^i! z((3>~k4b=naTt4U8s3iy+nfB7f)HY@;fG$zsCwL!vW~X_8 zFjU+-EgcCV5T7QHMO7$hg}2x6bZ;sO|B@jQbL^XK4Lec}iB5GXdIm zid%Er$^~~MxyY&_MVtY$mp9XF$qd)RO%1GOI15g7?#~DGH99(S%C-A^k4I&OQSj+C z=Eye#v`&Z}(%)kt3_XMeI2#&}hUE88KJ&OThVm!VvJRbVNQE?LLo~RYYkudw6Ws&_ z(%tmVFgCc#q{>x^iy-R1~l7mxuG z+|2x0wE>;B&1R~3q%NZ9)5a!2A{QCVZ$~^3Fm!3vvsIYDRg`3p7bi8gyPS7# zo;&Hwx)IaK{&Ir{7qs6;QQCUGZT+MLFEz6Su}Z%UmsCxA7!#_C7c;Pg7yDLXS9yp~ zheIF0vXI@evyXiVw@@R^u}k%qoyY7%C@};Q9Jt+Our)HiUs&>o3;M~Ek16Igbj_L0 zUS2wzhrnjmyypPQ@%IexAQ^u{U!b?EY6@5W`&i$OWTl|?xAf(k;yMpaa=8Hx6@~WN z1FnNqW6bZyNECfLcB;t*L%lTIhKNW;z~Rm$VEz7Z=-Z35?JQ*g9rn?87`k~e2reW? zyXtRHy{j{xx#q9yN>Qbxd^vtKFyYHuwt|Z&z|N_P8%{o?n^ZMsE$Pi4UW4yFld7|x zfpo<5aqFT%xuYGwKp6=Ztx( zjYJ{?@zdwErYnd5rR%r){0sW3qbEJ2pR9pUr3bz}Ny{8XYc7C6pH?&AW7eySz0dkB zE0pib0^h%&QjQ;ZHw~3f#~g;2UE)dBCn7-4j1(0HNcfA3O;CSTSL^e6-dt4`XZNF2 zZor38)=-oITgPzgjj`G+b6>R&?|?PS8hH8mFzI6_-hUAB=}I(D??3d7s+cub{&dj{ zkzaOnrN_wRG*KMwaN(2bCYL!?JN57<+-6a~hWqbsSL>ns+m2H=ylpQ^yZF%G@CIge#D?;o(|9JNo>s+3zQhHLNHV^NBST4(x)MHw@ARL@Z$5aQp8W$nWY8 z)QC-gVp+iq%K&yjiNEMMf}%aMiCbXtT=bE9nuS1(=PO>V*$@x%LbxeO2bPUS1`Y1=q$^st3yoIn$5;= zP<%F~#Dhl7+^X+YpR%z5+If&+JV6_Uy&It@BcJw%0Xfg70|cPZS$*B+8cR13q_(WE z;B@CP8-IFq8g%C@YOzJKHMgDtBH`yr`;kU~22Q@!fEK>9pq-HbOCv?YsdX(qWPTN} zu4#7MpJ5y2)QlVlwDn(Bt7CJ&%V&}8FUsAe7)H_UnnP#|pQ&e|kCF5(a)SI1b@0MOjzn_}eNDdO#05G+wmQ++g`sD9oAytz@&u*z0Gm{> zWio-zkQ#*}&ZfyxK{jk+cRk{(gFCAl zs6P?0lif2L$DvWq5LL@;{{4RYXvgwf&8Is$yv1_bNf@<37*=S=$)}!)G@0zHtEtjN zU#(Wl=3sxnfzB;gu!mr1n`M?3)qY;?qb+{3+FxE@I+Ka?YPFc}!YGRAo_V;(UOA4~ zqHYFFFDa`AoU0ebI~Y8ihIKy0=ZZF&qGYZ~7ls@N8HL(o33O2QrpDO6TH4gL#$mNV z|Dvk)&$BvRy;}uPiKXQpyBB^OTni;l_a6wzv!-`*lcG6+4)L0b@kepRcxN`#IZy`O&S#ga3~ z9Zm)k&2eL&vC~5DVMr68jIv+eO`cs|qM3JblXKW*Dr9%L2fEQc9z;hMpO~TZWr@w~ z9rlJWwA%sAj-zST`B+XgAAO+Q>A~L9Gq`v6MCOHg zuh{F;NV+(Sq_mo#K^8C!Y0tkRyvUb;^27y-PeVLyjuAI&M%kB67bK7+?SfKaz!icl z&)_E9A3EWVC{O}%-ZQbwBn}Nud{dLXIGYIWX=te_&I?EKL0}~hlH#(g>iiVDwkNT- zl_kV)#XpOV$%-HCxCg_&$3yQJKHF$=u$Kc43o-Ke5o=|{zOf!g8Y;sBsZS%SPhi=84woN#r{svEp3n z4j-y@mL4iHqRV#L=@LQC!%mzP*Fm?C=I?YUuv zQzEr8D1&QGdPe`q@+HK9w=IvYfAsa&d&e)odex6qtE{d3E8$Vbk*g&+Q1P{eD2-soPk3Lg;H2;oE|3o!_$SVVnwha%Pxvik_$(S`Q@ z@^)C|`n>ELWTRo&)TMB;l%oO(V}klUWjj+W=X0mK{KX zty|)h1S+>V`!E6@R&rkF6YGpvlvjCOa7-E${pzmZW@i@%U<@%RPeDEcWZEj$FELlp3WxX@&(v+Q&c3NB0B!fn-h*(673pd z{G^*CP=5xrA38i1-HjNFQnXTX>L6>)Vo}Vq+6dTSq@sba?jW`{DIhQjF>BlvPe4fx z(Zzj*-ipxqV>~pODr^5RyrpF^$6`-*l90P6Ttg+-lyHd{{M92w-kpc3?sBt4Cm(ZN zi(inbqy$Pyp|eQygnx&f@OOM1gqX$5JyAtVT&L$7Uhelti43T%OCju{j$pnTj6TK3 zPOD&BJ*a6hgTP;uf7&k`5>*M5K3!2#okoru#4=3oi6~;XPz)aj`bU^hQ_7p^wY#PX z@@6u4z3B!o(JzM*b}H;OCA4l>Egj;SyH_nRXz4+60Yh0ia)JYE@r6jcx*;C4$fptP zpTUdP=45xVaBu2)!4Dp*lwVWmh}e0scb6D>+SCfJl-y70*z3w+<{RFj6O5C(`?C{` zAAv7C7j6P532AWVu#XgEnIf#D3<+*+JmJ2Wz;s;n!c3jo;vfgkl=P6n{1|Z?k^JbY zJ5p8?{_Q-rjS(OjF=;OW67b~*FCors6FJQ0z^TC^rkP`?I<}Y&Z=%~~C%Agq6v6`UFQ?#-M=~L2YQM!W?}$ccsw*-7KYd~>vK;&uxs+V zm@JO5<4uJP!?%OPAh9jTMHP>B9s4qlThzGu)B4hAnjV}VS>*8VMW80Z~%&fhw8?3$G9GhyGbNDGt zw8)-9jQG{lZrd@}Lg0L1hpsku6=Z95BvR+Au1BF#dn5+v`H!{54h>8rD(d?QM)A{Y zcW%h;-8RcH?P+X@6TBjJbZOhsbJPTtL#MLq!2NlIE=O=)+~%BQ4}(9^#n(bG2xsk~ zZ2wjj&VHB9p3fK0hL#@bUXty4cL~~?$L)FY;>^*)Mq6xZY4YsW@ zy1b{}$)Mr}fOi41-Q8+RAhPUy3}^DVf#Z~hiDmU^g}%OriFrdlKU7#P?Pf8%S~QPu zXW3?yZ0O&a3SB^L2ybNJxQCCE!IMz}|Lr~1`116RpFM#sdx7CT439R`-b7d#KrK+= zkKfb9HU1e`$gOF!HAXZnbFuvD_^;m{9VC6lH?$|WPa%G)iY`U-{9Q75`ti`sWos?& z+Q@c^jKeDCzdIkHqGnLXz!h;?gnSAx8gEaPg&{+=c#F{$%y)NfPdEK*N>Kv7<#AnQ0%ljQPvSprsH$A^cXSu_s zdJoZ<1UzX%UT7G;9BBF?&qxx-QH70&h3#)`g5sVMiS^QctEuoFoXriz7DP%T0c-8Z z4E+l!?oK!-#*%z2{+a{ZQj|w>{SlW`DeS|o)+-F}Mlq~VX1BOTssA!^E~ft?Xx(cI z5de7)LqxU>w#<#a_M4P~w+*->Q5C3~lb|X_r{${tt2I$X9@Qurs7++Q2Efcp>Cktk zz8i@@cP+%_>88=&RaazPg1&7q%0{_pD4@236wjIS%Q3`!c3r5Q^L&aV)x?HlCZ&+1 z=%Ufi&a0a|E_q^T7&M3GQp*?G^A(_H9F~o-Im_o5BHBd+0s!?UT8oky1;IYMN6&;z zP4kv6cP;TR9;EWOp`LHS4m@e-rkPPZn!Ss<$jcefGCy?;ehgA?ixo;L^SfIcd-j%_=I=q9X+FDM#sFvBP z7%u{*3yY{WE{ujT7=YiEL%&|&QyE@Qf@`OBFXD?$)acq?dQQ*$?kXN}&@V|QFrF9Z z4OtnYYk=Q28y`lga@zqY;xXd)C#9h1v$oTlIKxHQNj=g-0TaCq$t$&KiTMrYuFC_G zw-KD!R4XJufnlJ}kCZb`uM|$R$Fa*!Y)=k{c0bgXf}w!Je2hI$9ZO#>usDJVLok*U zP@e3{;#8T0(NwRX&%w1#L*Edf)q91PFe z2x36R=9P*fx(Xe8S@I_%*J>Af&Trq1>s}t8Fd# zy5g3ESYVTq%L9=*-}G3Mqh#PYZu(M;hk9+cWZAy=8%pc8Ii`n_q2I9i?Vh7?E5N7* zVWia*PNj~j(r*nx_4MvexnkZYS8&{8FyRY6P|I01N5#p>U)XAjt(SOSzC)+$1Cy%YP<-w52>eSS*s#0tSLNhkm_yHgI3j!Ya5FQxZ zK!q71w%yDiN9qrFH{0AV3rvtP8|K=GNksmVZ$!TSvT}=Esl#fETx$MK3||vfH7069SuibsI`vO7nz=c zq8G{*8e>c;^rQZN{_p?GQ#-ZFD7R*RaFWle_ufv^2S2haD=5%aN6;P?aI=jju46X#3Z*{=+Av0Wy^$IqqoiF21CoYzwZtu= zO>fK4*47`MJ~{JXKy{t2mfEByC6*esacEm}$bRVdj+({qO0=BKXW_I5vnkXxI-7ep zaCKj9@ZWqjrQAt(&Xlu$_EYqj$I5PaxNZ0;N;aK(%YluITCnbpN7{ z@^1Q}MYQ><4ejk5Xzt;TJ%KQp7uYrc!=z_`Jb zXR7%Yk*;1W8gajgAMqDm<8=g_mC#+z$gT_Ewn%ccnB{zmO>YVow1HJ47i9n zz8W#cT2Y?KF{12O^a8!8Pcd=_-igLQ{pWB)B7K@$mV9i+H!FIt86tQ<5*-<-JV5|HZrEQ zBr?gVM||it$z-Bw4h9Fd*|=H1A|V_}nq~Vc2^%I8-@O`pIFgCeB_H>eqJdC0zt|`pJ&nta^@R+;ud2Epn}8;OvwLaGUIKWZ;`knVOc+5q$ZKZw1qQj!Q`udz`hq?i@ zllb=g{tZpLeGLRc7@tQBog&UuGAdKgtA@R0|FQtvqv$=5R)!?{x+k8hd9{*I&B|f6oO{aLW9U{SY|{Mk)DnWY)^(H zRH}o>gsbJzEODs`>6N4@H$h!|I%OX#a%D|%g=!sWDmsYu)_98PZg^cYDWLA|75C)u zVP^~ZmfBOlm0Q~a$MeG`Ghmy9nLcUEZpUr6mTL|iI%#T|hi1`dXh|3YonPej?g#o51o*rbB{Ip0mPTpi^6#$IH{IA_qjV83&qyrYRWMXi;z0T78&$SvPL7{ z5G`+Ty+^=pC%<+)TrQ2*9V-m58=zIM!1Hl1^zs*I!qAca(hT_73azRrGcVTi1p6#| zK?go$IWa~EP=|#Mez7GGdY6|otqTjN2PZZyElIJ_4}SIRg`rLKEcAv{)x`)U2!6hs z9FqeRN6)fWj(|QkrxvL-Mq-SvQlV@9*=5Xy{(ScQ`OzEu>*cGXmv3W%PFg3pA#ferabP7|=JaRB`%uv7rrR^wvMb>+vuNZW zF4Yiq98W?UAF@?+mjNjKr=+)RWGe=Cr}sVX}1t^>pNO(GJ{AjO@?LdRD1v5itX77CVmmS6 zZL21UZet_h#=-y^V%bjlakqD4DNskFwA$YE>Z0+F4t^DNMRnMp2V-+L23*2f`J z^>Av?b;;eE{Aqb|IZ~m#xWKS>rGONA zB}p3XERKwj+UE1dM)h`gK626p9yV}=G`_LpWsE0|k={w3Oy@gmAf>>>dctXiFERmW z<<9I#TgpAp$H0h~6`uH1H?l3;!tGWW6L*V$j!C3#)sRZ;;C8|hr}dit*6W5tGmo2cL6n*6sOME7bLSaWq#Ow3LjgJ#LCtLVTvZa zCPH2lIyuE-!S*#kVdP{+9Va zBoP(=Xj0D95p)Md+g!K>GzR2U0YLP}ZP29be2zrE-GGCX+I{XB3{%W6w!sW`ijF< zGUfA^K!6AH=e;&YvMnjOV{G_aCq~jD)Hy|Xz(Ow6^Ol|)>obu|3(;#qsp`U5I|wLa z@gWfmLIeu9>(>mhg+Y`GnG>{R9GS_89O<;HXBdi{AWW+oDE_i4Rs89qcCuS4>$M55 zjGFy4BD`hpc&Qc1D(DfXniL3P)yfi~xaY;MN~cYpu!6QZfRzkm8kJW5EX zak(^_>PFpFkBO)X&>Mq6Ay)?dqP)eyJaYdAXjDbICemD{M&GLW~n z%VmCRt-e_@tv1SazB!Cd`7o?{2X>m0XZH9g8eZVQBX=?6L2z5+u?zXuYgqV52V00B{KL>i^E}Iev zeg;>ck%C9JPrRv~=gE4BzKTx59hqDp&#M_*{>ogU=zwJ^r)NXwe-z`G?gFP6r&Apl zz<6zqjd2EHX>jwGJ0TG&&Nc#_>o?&9z-FH3Qw|Nx9t6Vtm;bc642gUowF%5EL%N%_&RyQkGKs7W0G1q zabz*i{R4cY?w)PVex!td&#T1}qwm8`EgN&V*x4g^#50$i#y$zw$&M1Jf1;pJV`>;Q(r&`bF565^VXOAMi z_c9Vc-oE#(npmu}ZIs5uDd;wi=HD@lCCY+C|7K8)E@s9W$a$UF*gu$R20R2i^HL{DTo(nkAd{&b#}SP4q)I@oIX!n@VqKHV>s~aC$HWd|26se$&=5} zTqk)>EsRhQJH4GHgHMJ=qTPt3VS#EwngGCua@C~CcbJl$-kKq0=j8l47$(4!U*o|~ z;(`^&)mapr**#63;c0<{siIQ~T9hO1mZb5^x;oF$l=nPe(UvPr2hma%$r)xks!Uv9 zJ{&pp0W{R)$aBCDfwMYCmoN-NZBo~Ctd{AxoqRg#knNTbMdWVC%g{GQHR@X^2YhA9V)fvFk4eD-Zn zn3uw=$>58Vf5S#UKmE_Wv&Tb)gnRf3NJ{$+y_l2LZ;v*a^PM zAL!UfuqFNe==GPc-W&m8fgi_TzkK!j==rlZN5J362(23-3ZPG5vR4*qU$LgS&c*lz zTrF3Dv^QFWhyv^lu{g5ixG$4K6s)Me>e;_Ka9)pp2U- zkkcJy(0t{k8S#k4KYAr$zS>r!2nvJh9-0ukb{wNt&;0;U zw!guJJb4Ve{s6O#+r96~wn4~>M_?qUA2nxv=u>~B;eh; z+mGrYj=hm=XePR9iD;;73`KxRY0xtb#s9F*2pu~>B^q-4S+ zlRya?q38Hl#^CK5Upvq`g?c9@fpWvKnlY&YK%H4NO$t{llz*nCUlanh4Jb7olEfqV zd=q9W#Lvm~rHPK)Y|C6|S6-)ybVSPuf%ThLoTs2(7ZdDz&@L>U76iU6S2{r zZ$fb`nxNc zcQTKNI6V*chlJU&Qdf!;F01(v7ynFyqoGt z=SA$GO#c`{-eOwpfgZ#G#O_O;u3~J^8T>2Pa_}Mg(0CSD3BC&G*i*tc75syKNczOZ*oAUtbVk^ zsUmFDc?H|{*44mW+*BSk2`7ot9C`~~#W`zO5hh)@%_-|xn!G}(?rnkj$Syo*4(n%? z1QypJa0+pisq~UiK*5Pjk?97J*)2B)!E;p`|zo3cbN@Mh5%hm* z9`)5vdmBq1e=!W+9Y)GBMfm*mr`r@RU}1p+cz~sle3&xBFCt)gaG(Elnm+pJj7t1V z-`t?_Pc(-ZGmw-+tf{A>XuIo%;#={YAP6)#g$bNT$h73jo&fxb+i*v!ShFct**m}_ z%(%=}*(mJOcGCEf+Xwny3E@7V?>IBbDGmRrtoO%fuIgKRb`SuH2j}iXq7@~an~fw* z8^*UdAbLHScw2ii;dYucc)%<`-ogzkZDbo<)v;>m zZlUtMy@6BU%#Vw!y~cDnIQlo}M833p8J8A|7@X6^&^2<&!jyt@EOZ&c=<&Q*qdgdg zuToQGhBPt|1KS;deJXEoTq-`5RsR-u;|LysaSUO1Mb-=WLaqN&(;9hy_M4y$`iP+^ zXbX87jXh)TrEQ;NOP;?|tb=D7`;?(0M}@(`1*<<6w@ZqPLJWeYkF6kFrZ~|&;4G#b zugDMd2;=h*G(gn|t_nJ^LnNAVIdVZ$2v`|Yu$KeJyp*aD7(M$kW z+fZ;P6I;V09)aH{yQ;Im`a=7)W{C}xhcHIkdl*@g8yu*yi~gRQgpxq9Mx?=D3Hitv zq$QQP21H`c7LDyR_JH~ui?&?mR>z~Vr}d@ofiY~L?|T=ZnYBO~P#uF?Lo+WfDZ3&_cBOu(f#9HqVM<8|(Ynjz zV|E?@OpR{$jr+5m+LOP0J*MbVI$-VnwGqbqI%4A1_PK65k^ALz7>{; zJ^)6u@iJy_VFNmx|2CB5{T_m%R{m2j&agKyub2$%&@heqUe&paNKA~C zf1&A!vM+#=f8#plw+A=>HE<8R0bl-_4u8G{?yu?a=UY0Q{~Q8lgO0XTMqSpZq{+}X zCi*@ex56SETf1kkv*aqmjt&x2H2-<6qG`-X>-txyf1;+4JT$ctkJ+=H}L2+d~s)1W1tQXOOFH<+%^2} z%t*Ep97_Cei^cR}-34u8YaKoJsbVBQmUc>Kbm#@7v=`uR)HzFdKCdF1wKciddfH-L z)f|ay2$FLtmWoKtTrNoo84(_E7{802F~U1Y-nXXk!?3M+SMCJ)I~aR5qfnfAIB3_= z)D#&|-T*{7^o0DwzkU|2-~x%Yp58s&!A0*qD^!OclK0r&hn^@_T}TCm2(eY@!i>(N z^Ff#%wDnu8=e(>AigPTYWsJcKv@U-%}?)_#>lKL*z(IN?TNCV&ssSvkvj|XnrNZH7S|kc~0J~ zzL)NVb*&gIW%53@7#}7cL{v5Flr0oM?4~Ma>^eQXS*a(L+ z!&7*bn*>T^0gA2?=mP!e6M(kJX9b(>{5RkPqTcU*=RMN0XZ+mDuQ}KxzkrDR5|YtH zEbesFRkD!Wr1Esv5M9!juf*le#+}%L^3qiyeZiY6U^O58sS%{L^Y@9Le(&3YZ}R=` zjVv;`$|=?j-1YZiNbf&*kpkh20&;E=4nI%WkA!U!X$m(kf##YWmo}Q2)Q@QcL*t%pufHD@d zdIBK6bQJ5FEv_W1qR8xdxU)s*sEolms6rsurDp*WkVVgIK^_+Lei#Qul6~%`ffSSN z+dgN-ycyf_@&)Ioy`Kx_e5CY%|Bw!Vu6d{$z`Vr%YY$3`$m!-I$|xRnkk{4@)yS0T z$G|>TS_xeZ=1xThQ1gW`1|(T6HrPV?*+N}A{T&hzlG&oIS~ME#zOlhF*>@S?_@_T~ zi$^1#0SwCH>pR;tU-GK8=g=Q^d&ta{YI?@AuyqUvn&%;;iSQdb)1oduCSf5n2QWt%P=L27ln}j1 z`jAf*io(Ccv*^9iBwO4X-9sC7#!p-H+Q0~sz=t;L>6K8Ui##Kq^rPB(bI_W#&s}@E zhHIZM!^G9wnT=MS%#O%Z#KUknFmat*`1)Ev1Djv+o(CprJIb8n_i(m|SUS%k`Ub0f zq9z1q0L$2i!y2II2<1Uot*+LWk{^czWc`N3cyuKjj{|OQ7w!0_dAt`z!&Dc2gNqv= zpgsfcae1bz5q@tV9-gjEj{2%1swa7RnIbBq^R~n=cZ>>*pcR#W*G&#a1w{#%WC)6m z#r0g!`pC2$Woi1SF4N^KU%@n=^;;4Fj+zify*Q@bH(j|(1<}eGCFwuJDbetBA| zaNT7f=r*{A=AvHVa2vXi2WG;%JO)j(R&^gEZFmq5K5B;Q!0o`dwvC&)Yx$msTl_U! zC!muv7$G5d!Ppq}M~MqAK%Lkgm(szrv2FdwYRP)1Yi3i-!?RvE*El)avoxyn9{Tz* zbFlJ2@Q1$#UgY!qlG2o-J}nX-r$WOarQh#Xa+^ak#&k zC-X1f%25=gaA(^QgWHI|MDnz#Y6wV31Sfb{b z2~*jqQ(}W3hFh@P=B1qp%d>fDMeO)L)VQU!L}>BYVf2HaEfG9M?YtuDolC2T-3`}) zID|&u;JS~9ESXHym1r_y^(KipaASmr2gY+p<~P_JN>?1wp^Rc$6Okx}k=i)^I1q%x z!)}TYX=7`mUIp}_P{So{yB@H&ft`7>7a`llF&XO$fl^KYLGJXs+%(nYh|(WSJUeZ; zJWmMr1Zi!{c~P%ZZbf~_y>J&%0cQ+x+qO|1w#{u9No}1Bw@RWJl-`!++G}9c79`|L z3b8)ubg6g!H8K`Eq1s^zXESEx?I!l@Y@4_HmS)UiMS=RB>f51g^YKzEt(O>Ov`CO- zoyqo?ytmd8UweZ^B90!R5}c(Xp&poNzm)}taSwdA1;3Kd1uLW%{+IVuhrmzU&&N4+ zPsYq0B(aR3)B6t{;%F_5_E&_^ecOiYS`XzOCV4s3iah3hNeeTX;5a4|y&Sr8K6bFp zJPk@+Eq9Zzj{o}Y(LvJpa!1(<5`|e_RTZ5<^ZZ>hc>0Np3+3)n2&t@ohQssuAD_6m z+P*n-aC!7BQ4jq?HhPha`IX3ZvUMS=^z9u##~1dRN5JgmGQiP2EU6)x(29i#tyFGq zG0Gxrd&-oC^7%9Xanw2(1TdTBQ1mJ~<|zO=$0kxa-E8;UK?!)ulfR)?MurM97g!yk zq^(A&D;Ou&h`RD}W^#z6vDv|p7WbTzDwvXFK*IRT%O(`>0lHolmng$p)NxdTj-w)2h6f`wr9Q!!huPMhwuWOm748DT6{~w3Ls7ZQQ%p0Pf%U zZCgV3_eo?>@r}VTJ~>2st4c_1c9W$^(bgKI#~irRKP6~^N_#6; zJIg}5y+T`%_E{Cxij~N1nl-^p9k?DN=+EQiX;dZFC5*yPn{vb_XO_Bu^$ob3pJ-W<(JTKuS?v|M%|eVGlS`{Lpr${*Z{k z-QiyM_V%8AmTmD>1}dnlA1b5hO}ulsm*t8$-^OdQOF#{RSI1io+J@AFcBvY#=oX76 zZXzI}_2N79!F9e$i2^8OI7czm7z-^>Vl)_YdLya-dFX>@QUops{4-2*UIiU_If$2* z8XtO?M7;4gBagpe6A9fJ1k0Xz##}>!DPJ5=ATFZZP8-%;soZS21=mrhi(Pt-sVG#i z$7W0WbjR(<-u;DazZ(24z)i;N-O-n2^q83=08@p_&E1zJ8}_~=2q~dKdFu;Ml-b>o z3>DIM9cWtJJYVM;b88-N75Bvq+PjWwi`gyR{7z}TUn1ay^m$rWEfAM@Ey3RoV(I<8 zT|ReB6#jwl9Yi;m=a+9($}=w$=NT_DgwPU;k}x%o`TqyUFJJ%R^(*Z1+5C4zv_4x8 zd5D{Z5ugj0r*c4NlP;S~=0u%!p-gdCdI$ZlfEDE|Up<9TcjabOuIK9whXq>Fxqtz& zlSm@#5ObbAxsxD3KV#1WRxdZq)s%CLawoD%aXa(`p_<&OXrXGUEs(oMi_l?mGymR( zpHbVZA@{Q#s&GB*)Xe);4p0}Dh(=jF2^BFO>7wt9T^t9YMr-%HA>0hF?=lo)aTUQG z?{0nQ^e)Bi+y>J$h{UFiy+4_WL1Bh-HXO*3?9a+%HRR9?3eah3Ail^A7@8}g`H=WI|HpDGjQW|BWbXMqU6$G-A-OQ^kG z57^dccg%D{NG1?se72Psytl$H=l2e64YvP$P!S%g&>IX#&sY|;pSG|aT2GE$=xx*j zT-x0Z@%K%)6VJuea4PIGi?zD@(=AZ)igKY7B^8@pxqe#ISuQLU!wpl~TOHLDwvWn_Gv9{Uk1&MX*bMIeC~7Ud zzDw>xQM)N*E>)g`_*8?gUqndmeKudPvAsyBEqH-Tzwydn%M9-Awd!x{!!7XC{~5G= z%z=eci>VGf{)GVL92O*01Umqjdzl?j@|tO1$_wIS>^BlSi~QQ{gPX~K0~jl+eJQt zlT0X1-2sJJ7v-TS*UVN8+DE1ouOMrVpx2I|&n9RUFj?s`!&(R;ji?QJ4aIqvdta$+ z&FY35IcgyEv6!mePG+gpmK+ZK>BBAiN}IOh7>ZQ7tQmMNc!r8w%8HIVk?lh1%%X|pI^L0AD$%YO!zf-`J_|-Z7Svr#`s{832ec*WpNtIc!-sfa96C&nbK(U zXGDcT%-D`oXJeB|yY9?$Fnui01kB60nWq){`qpnYKj!gl@sZTzNV%f}H|pn?(Ywo= z=+9RJpVII_9o7z{e`y^JDi);qWS%rnBFWM zp_S?-UTlr6>{l*notvtO9%7~g|HV$q1Ik6zq;yY*e9K-={VN3a#!C#=F&P-`^oL~%W0)kh7 zT5FD%i+6^Kv5!iaTx)TyWKwQ*zBk2D^uKI8-V`-ge5+NtnV;xTNxzy#5rSlYnkF-; z_YaxVl-XNi<^&yt1x*>`!8IR4LEmXR_6%REXaK@U^=JN29@Uf=Tui%PgFRG$O9JuI zcx@8I`M$_0BqOCn!I>{6U9yTqQkt(Zz|@t3R8Qtq0hlm72mMK-i+XgM@><)0DrTBZ zvK2ZKbD&btK_fZH^zm5JiPBR}a5I24KXPJ*@TU68HC?g52oj)I(JW&`4uRbA(U9*} zhWa&!Zlg04qE-CPg&7D_a*f9s=rl)6l8@+8N{qpW9m)<*+j^uT4VStb%k^Z&nvWvV z+K}ZyU-s9$9Uk~y<-%=hylTzI2X_J`Rh$>NK*wasO{B2vJbIiSB8`1EC%bo61y@H2 zffjRTC9ku6%<%Y*uuripOxV>hTdNe=6#Sif)b<&ub?OmEXA3t%NWP#={!G>Xl#f2Q zROg=3OimqCBxao7wn(rxq<4j?GT1D{8MFTvF`u|w5EfoBUcbM(y8Ow2 zak%R*uesw7TUhHmD5b@_BYQdO$blr+D<2Je=vrnxrucfN>IuA#kPZ{ZfvNk!oNMq} z`^X5rt^J}&x102+4OO?l%>Ve!Hw`}@4Ab1BaShn?==jIuQ};Uej&LYkNNPjP0_@-p zVydP%97rtBoy;PR;_V&6@aiu|xc-=L@oOyX8wo(zON8wX>`MatK-NM-$SMYEG9bfOsPMvH8DCr>q^g`5JrIfe_T zR|!Eose$Clj;1~G&gP7x=}bW%VnyKkQE6Oj3MTVJ(ujl@bAV@(-gX79TY)6|yOVZ< zap98IRyN3Oto@~rW+A$00|jXH>lkxQS8 z^H2Cc_4e!gS2*1{7(~qlFWS17p*z zc*hYqBH$WMx}e=LgcL6hKjN2Qw_ZbO1ymuwho=9^=A$t|ABe^h|L_cTbZo|`P{c1l zBgnj48#po_xXcnd3S>*M0A-zz;jliL6Gm-o1Utq%&N}jwVoV&s_A^ahI76JDH*WEj zI!rhO=H0>$apHAFN2=#GT{Z&k4#F2Jx0bIfe}|j_oFCrY#Mnt{6bN z;`_@<6u<67$1mHJB|%pyVwlp+diHIKaxtC3O2ElZ-hSepqR(LWALl4fPU;nK5zgJd zI<+XlWV4*3y*VW`LbC0fPN}zYfWolh8jG2JqgAvp`j=Fs1*LSqZMAVUW>Ka}se+e8OJ% zqWIjwUZQ|oF8Qa%I6=Ch;r64+u8AteA7?&@?h>InFhh@ys#u#xN315Y{XphaX$=l$ zCVyR{JXF?L#|uaiL|x7+vJ3D~PF=gWmC|xt8LV+?6^QIea2~Mw#y)u=DK!KETTBU} zx1#05Xc)WZ1aJXT3MxTT1GYDmnCzB71yuK%j8pH@w;}D<@VDS>l!Qwe5;x^Z5EjsX*$guPRcE@9Us+O}=mwrz8_ZQHhO z+qQPwwr#t6w@%MQ%*6TrbLO8n>gv6yi>fD9X64G2D^I*r1+f7%sZC(FZP=T|L>eET zYxT~pZAxDlrBF}S3&}$7=dZlTz|IT2vZNCS!9TWtS-Yexi!tcFQ)WUfvl505OV9V4 zk%l9K#l==4D@E9`SkeF`7W|8v3dcwtfU^E$?WH!_s2F1IRM}pn*v^$2nJ9J$Eo5-i zXF^GE9zA)wIvOkGQm^?Pf|XqJFHD>QEIHF>g^F+a#(&LOGy-y$QU5}BZiuQHP};Jg z2;33&5l8i7U^00)ky7-rWZ%*{A!d1RQ?~>a1rtdMiX_PPLZQJ%uuo191;pf?5yrxD zJQ4|w#2D)CypQrN4x@| zg@4YsL#!^a?KoMHC8?~%o}jcs^mZ1%+dUFByJ=5>x@cIZQhsaKTrNA%9~q;vt#$~- z2cR=rKU4m#1WDHbLfoUYzD5i*d}FZx@KUVbTrI@BTQcO3(Yz>-GY#u(W#y6PTdyq%uxMfU`J{98-as?3ko-P;n9PD{vW- zZ#Q5fKtthLSLi8Fp7!zCw<@ttRM{xf&u^l0096R*{5B-f~^w-1OOli0suhp`>(x)J-wc*iLJ4n zBfY(~fwQTdqm8kJqZ7T1q_C)*vZ#)dwB05HOz)*S0%wc=stfN;>6#Sr6#bZ76ArFc zEGvf^0p;YsTX8OnE;tDN_=8uXq;V{z#fx#P5koIemlFn%cB|X{^ZU)iw6f7Meg$|e zIU{7x%h((TJgzUTxR>G_v+AWA^KN!mphJT>xm&&cy-dn8y1*R^*w!#t^DRMf1R9n_ zY6KKOS9~nyjB^0kW{MemCK!oB8~oqQMvg7P!yX&iAn&>L7w;uybD;BQ(CT75%9^U@p;Qm}-j_V+1S_cvRQdb_gqy1|S7I7zKg12tO+4!d`M!@&z zJ#+5GMfKSRxzjK6PXs};a8EzDwWpOAv;{Z=CR zoJsw-yd;d-e@$5mO0(%R2NR~ldY!OK1@}9#MLi15D{?snBH!Fb&NHTVewUn+&wEL* z=FgS^aQ6S&FRsVor#S|6chN#S+jma#IAV`{{tjlD1}C{R?ffv}EBMjoQ>i_tQUf*y zDxuOdAwtr)hddJn)>N+!mx5(0@YJ~}RQsQDzY#u?0NppK6jtUd$e5Z?fxZ~ym1T*X z%+`x&>+bdaF>MrE=mbFOR+Lmk)Fe~s9!aD(p}N!=Qfr)va8jk%Q*czBbWd^wJr+w5 zB~{=P+|WLu4xu7K_W1IzTm!xj1XZ!hEhQO#1KXy40C!NlN%q!Vt*2WM(RZSp!_+H1 zpb9BCNS>q#3^x1JoGJ&>L@8>h;$Eu-ZIOsOq^~teP>yaNvkEZ@rd0ic+n$gT`I}O0 zPDrh4j9BDCRG2P_kQPM^U4zA^10r6&qjHdgfYh&iR0$!2xEqSUruUx*Sk1ZIzYq)n zKtde=faJeBzPjixJOt4UWsx zdzI>Ezl0DjU@mDBYypbAe4)LP2SU?b>>ZB%Snd=dmkUtb5E)|EWYoo=xBQ9ecPBd+uz8su)> zJdc=-rk&o#eI4E}x3}fRxgZF^d3gl4GU(>!=~;;Flf@byr<7j7-^$6!gVsTK1$jDn zJiL7A^?X&PeJYY1@KuDCpYy*Y)+Zq0q#{<#d_hJCi2%BTAw9t31V$|u4d&^69%O{B zq=)P>AYb8RCxEPvY)^(aaOKo(Vbt|kQ)C0UQ%j;mXrf)l5AhKo1Avx1$ZqR7>A%2u z6Fp)3CmS1b9cpqR7a3z>1-6!0jg*mKO4JI@41>|b`F%W_(2c{8F<3^Nat&_Xfy{>P zQ52z&@?-*H*n3C$pFE9NRFY@_nUt|Jyt#r~jQQ8ARpY+>q1$4%Cl4i9wdBNx!od_? zN^_uLy*++`3cuB z&_+gzNY!2tM8&k*)yBo^<)DZS$x<9R`WM%0G_u}^>of+99T^dSE`k?ESYj3PSOaSr)Jth-kE4zvGn>*V za8rT(XZfc(D;0h0QiG)e9A<^lvVM%2aSp1?hYz$LRFce|#bbK(aAnAGNSN@kQQ?C9 z2d{(X%N7UII!a_QOsyFw-TH{Xrl+yWcNaPbEkPzEGr>5>ZhLZv)!vo%1P#!$B-u1n zkm<%2ka6eGInwFGTeVV|nEB|U8E`46y8(kJwkV~fLt-0sxz7BQ;FDjd`T3(4kjnEW z0FOz!t1TkM z?-5Fmh0#S5Y=<-v&>$&{V)P}J;TbcmqyvGKG1^AK`wH{mlIb6ZC}9z_4F&reGr^Ma zC44g&@TjFznM(`$XN?B`HFmj$kOYPL8cgsMxD7R@*iwRdCx&m3+Q&ZxjDH z@4bWi^ZIo~Yuib@pN(1V%(-ey$D`CyTOOAL(qXtv9q+5e)txbc?Of+~22ck_nV87- z7@~&+w-;QpQ|s%r)6Jd^Jwhj~#N$EKAElzt^I)lp0Eb>$)Sb)~0!H(vR zps_1QQEgfqz8b@JFo{Q-pBTd@#ylWSf7fTmIpw-;3+-hteJ*`hgSRgVXCGo$938iwHWIt-*wy7`86VGA1=4_RuvH()((x14_$EU~O|ist|3JzQVFi z5WkMULKs`s?Uck;r1oLN{K!4ETt8t&Ex_za`L3Kit~+nhv~`{a9227Yn$Ky%MZzZO zv8~kWPw*-q<-bop7^1!Of$vU?r4IKo9lG-sW^k1;WS`~ZBjSu%#RpMonYMlJYeFe2 z>qie+KsHBUUEhK7No)G7k$_s~rr;mE7igAA9R_Ybmn(&<*R9e;)|RRtyHa+p47<7+ ziwg_m?u*89(nU$0s%3&!45{=A%?j94C!1u~urYMBPMc$LYQpaudeANX+CAP2Vro}< z-9G^TiE&Buctu@+008@-|5uE&F|e@xpBOi-(jU3WfY5VE4fb5mHe}E?>JKgb%iTh4 z;y?@jJc#LAs7THr34Qkvb4%x_o)=s%{4?G;3T`Rbp7KWU(ErVuJ@+0NaA6H+CNzES3Q^DKzS4u&( z>+~ivF|bP>L25N((Fq8hCpDt)j3#sYn)(7sy)k?1_<-zDsl_ysdeyfWQH7nxe)E^J zJ9*CDje}c|lRqW`@`!oT<*;Cdjo8Jt?fC)x4I5#Y3TZR%aR!f+t^Fr}q&k}gMhE1e z4f6vcJ80#vzIT_k_4jmjm0jAEY>|!uu}VD2)t_%v4$j_1t)mh;goZ(JBWg=ko=+`m zMcsbI;(hvG<|=Xq#uA`sK5)hXXWsI{3gfCgHV2=%)E}sn%*34ee^1i#dfNL?qfe_b zU+{9}Z0wKNy5F)tPuRz+f>r!hzF0$3w!4#rz3JGdo}Ryf6Hi=i&afe4s~Qk|(zEKh zKH&fP@-ywAkvYHt09c6u0DiCkGebA9HFmVKF#hE?#~L>OgWr7L=m~P*n;ONUwCT)a zSt!gpZ0JuzZ=eXzqcIUHGGb>eNl-{^SzXj;Hp2SH&$8S9Spv&VfWz0`Ev95EDQ6cPGlbJrJE|9BB~LhHwjZ6-K{EC zEk6*`kT$|Oqm6V0p#{ddO8?;9QyjD*RZt45L&7pVLT09mmWm)W^Q%&&06 zYK#X-!pqu*$0KMnpL)tt+ps_;VNp7Ymn6bE|1w$R%dmc3{_bedxCjNOM|y$+S2=e; zwY4Bl?nDs-^lLnV3K1;5Dn0}dia{`mC?W(>|Gso$QAvLk_WpV0X9R~@9F~msKXc1< zTRva1LBMYOq49^*h6e|sEJO?2_#^if5sM^2N`4E+@vWox1j)gm|3()p@dVD+30zn* zxNI2OwuN(tSD-ym5a!Qay~=G;E!@=K=_`n|-ssCT1VHFcN4(aBm70L1St>wWOYBf9 z{zQAv2zjd7nS5twWm(pMUn$pafOIZd(W8-66SOa-h6OctUtx)4iCDSBL#Z?|Yzwz) zFr-3Di05Zn1K%$o(AXgp9CaAM4283Db4=NA*}NJ0IK+i)$mt-b*gPC z3ZshBvjJsV24sq5aAihtJYPFcTAZI#kHZA_3*;(9bWW>yoc zUlaPvc%5A3nxFa0{Zp@Y>fjpAT^IUt{4xF&{YKM}xCo`=yz%FExpWxZi(NL zx=&rSHcvf9xh?2EqGj0$f{5|+k3GIt^8wN@AQGzk;uu)#UVL0$VS6#TqDDff*)Pss zKsuH&!Jrvm@zhBYuu@e(LjOjiZ_e;Q1ogSL9zY8dzl!HjV(Xlor2%DfA(mz~@l8!Q zdVD2|12aoZfMso|=C70M7qmNT2qjy^R#X_KLEujJ84lW7Gwzyy-rkeGidGp=YQ2~jSkp}p!=zz=sY-|*Ge!p09je&7BV0ZPg_9w%gaYrkr zY&?lF%47aopHX`XFL#R^u^07_f9d@}{hi04a4aL3JI~;^DouZt;Vg2-AQia-_< zg@L*-(%8yJ`|Eq|KncNHrvU23w?6ifb0Roj<`Bmk0)4SPS2uz)Z>geEw+!lTSZ2{m zAfwR)sT-rlf$vb)zWuAY-Rt|!>F?HsuMfZQ1YWjc;OQC2*V~K~XfkNn$`q1@>qh((B2g=cC~YP#zV%$35K?LaqFe%Yx1O7QVJ`!2bkZL$By3(_i2f{FN2(|6Aa-xA+C!nm<;*po{YL3%bR6SN*DqHD`n7 zQKS}aVAP%ZunH)m1k6adO$ooE!Ufh^+-{GzL~`B(v4nvl*AXvIcQ;Rhm!qSjBq}jF z`|AAoxMUrB0ui|bPlYq7CJu6LnvkVXl#qF42Zc)A=?$dG{1e}Oebi(XVRK3<%RJ|z za>5@O$!C_sS3Eah*$;tPXfXXNb>q--t1$R16_S zfxSP>k}dJD^|*V);sPs|&xz4gqP9$xrmpVHz-Cx`rIbu+mc z^8&fh?97gFnd^x8?3CLSB*#b+kmDJRj)tSjvI2^__PC>8Aq}&B*qu@6U{U;$CP@a{ zg(jMF*)b5oWIqY=h5AP^@8$;PpoY?Mj*Fi!;L|8wTC3OKNl+kL9L*>!;9p`#y5TUn znTTQ2G~eyryxiRQ8?$U;?0!C^n9I=$O7-gxRI^38F*qqI3*DMEv(X6+Rxw4W41M}|=9`mqp1+$vT2c+3 zxiHhMXa@sb82@(mz|^P@0O(j@wi5IJw%x=4rwG|FP7{|Q(4_Ve$%`GiPJ~;8L+;GF z8%oJHFRezJdTm~&6b#(6Xai@q*WP6TNsr%B$G9Bm7CSYSJttSW-kEYxP(n^OzQ^0k z0)!exY6g5EC!{r}XW1iqjFO?CfCWP|26&^Qj-TUH5~0N3uN|GcM-%J`-72 z&HP{s^KXVOR4{d?ikX?a#6uaC>@TT?8i-0ZP|1&ZnSYqgUoANw+2&<-u7mQ&}|aLPofQu19A^H62V2 z1dB#X2e*$H2NsqLvA^IJ0G($h#1F`-l>&ZnkfJ2xF|sr_i}i_sCh!^7@Uenv(m#4uxm1dglV_DKMPQonAPPZ3#uYTpZ9K3jk=rLoRhf}bIvRdF zoz?BV@O#I}$%7@ToXE2qz1L5wbm<4sxxB17HFB@$XMR-I zh^8AODS}TYh-IzKkVX#+$|ybppQhq?*%WT2B81tptTTRSTZAzue|hTnVC7sZtJiB7 zIMSv};!_E9wG^mCLZ*{UXZk>vQl=6xV6Yt;(jwL(6xtNhXF+#YtQwhGs|>(rRBOhd z7`A&wnocRrqNren6wmWn?;Pn69-vnJGyFESq?MAUin&fG#1?_j^?o%HTJ^Ro8-cc}=?WYxOS-9WtB$wc7O3D}+uYqay8M!$NKIbpMUBnv5rHRw|_CB$+d` z&U^c!r+fgGQN3m%utbdmd{)WDU+O!Q9E%KPAH9lhpS8lJ-e_03vg=@=-T9Pw7d$U1 z6|L;)=(z~z;~-sQdA6B5>yrhJq#4ls7qXAEk~uh=!&6*oH{YG6t7$q0$*lEdzEbLr zjq$5-S{Avi3QniRl=LQcuLaBOB~zu9TjyhA+}Ye@ORE;rzHH!&Y@He4>nyF9{f((f z?!?;eZu0dcb$x%fwAUc_Ywd$H3qr(CF=h@z)xkl((+}A0O`WW{>?Rsq#7vWy7Or0I zVT_yV+TwRhvvVsg{@`;tHOw&8_z-6AfX-Jza3s5)^7WC`QSHfAFq*L|_;q1b+a86r z%G$V2-7T#76KvzDfM|4`Z?+l1qn2vnsR?H`dII&k5uXMRU-xf0O5ZJ(KZG~c22(_y{)11KS0`NwT_?}pb1d@k8TW|Mq0CM zeJN`^k2M5PWJ0ZVZDM&sGqTZ|?+2ZvWNY?NsT$4Z1-jNj2mWdNtFE*GMk>vhGirzd z21o}AX#tDgMG1%$B)t_OtAXlo*H&AF3L?`>NR)Lk>P4w0rD^3dQ~hz};a}RimZ#_U z%TrlY+%5JGVwFc1A9ean2+eG}ik&Zy=&i@DDHg(~1~+o;o?A{u1RjV*e=<>8=%D%N z<{Bop=}DIkDP~%{B_St8AbYqjKm!qiVvtB~I{(AGf>=O{H+iJc7BzG>y~ju;inW|8 ztB3L`XuM4EBob8_vPaKcr`jUNj6P_{eN;0dT1jDaLWr>=E^`Lm8`MFr#b+$K{WujH zxD!1eDn`wUwAxw2@sK^ zG)?~}l^T$T4!cl++=R7SbCJ~&fqY^FvOcJi<^nh^wy_yx3KKajUi-qtU~d?|Wad|c z+3M$8L8_Q#PpdlSQD}ZK=3;c=Y(gLrev&%5h{ZXaxDj89zj$vZ67V(LSf)7~=KKJZ zv9>IP$YVIkc;0=ODf0Bqu0%WfMaj1Vv4utP?|-FT_bky2w3#kFRVI%YKqb=eAa$ z3b}#;AWAv#A#_+6=@4oWdGQ>z|71-P2ghlBF&g|Ro1TyS~rgVtUW9OW$%(`?JosoE; z=Ia90i|C5(ZPhQ-6b1%+2J_jcjaHz4%Ii9X*Kg4g-&IgA+1fd0I9GznFbal(Is+#d zWZ0II*Ps;hW%c9|tvZ5vx0kt!Mlek#Or<^KxXo;dJ!|Z{-I9w7C*HT5(mC#S915p~ zOd?5o1fOa0@GNg{yfq86WG$6dwK`s&JlR(9Ec?o7bo}iq!MLr3^01Jfg@o5ZvAM!{ zQQUdL-AXt(BJ$7=ewe(~Wkyn8)cO5i8FDxg-zGN8-6P-P6lH!bY=5QZ$ck`gl`{wsc=~B z%Om+_%9$albNlL1>)yMqm+ z1p|L5wxdwAL{-B-pjuMVJZPl7!rbX z)YH1hk@hd|)FlYEv}LwNs=?n|(EJ&C{))CUKJ!*?4ShZa4f&@Y>Xd#@yt9|ihLolxFozwv(rBTAN(lV$Ur5ZJhm}-YtG-Wzl6x zpRfCUbaDel^5o+DIk|pYq^Ado0ZJ8%^JSRyBqS=MLNl=)Dq**A0)y={K68Y3j#Olj z*w`d|J-DYta;!-z&=&51ae15>N7q^hymwDw{2t)A#AJqy8U9o}7cXNwT|$gq5WS|B zLjKaS!#ok;5=rEalVjS9pF(qMx`Nb{>e1RW%F||7B2t81e|IjOH3~IE?Ft-KuQzh! z%(4|qqT6i;fqH<2bQ4rQ!|>vxX45|Wwtt!ug6T$HdzXpcrWW51={)pFz?#Cr3(KOT zzdb$^y36uu(~RRA7~dT#T}t5s1^U_X9vfmn_*0`rWwtF6-i71>wI-Xxj9civOjYL+ zD6i$8X*}4We5|GktHVix3xOiTy~s%87~uS|c}PjjB6;k2Nojgcm5P~DEgj`a%i187 zdlCEb&S`?|K%&3nk*G5IfqDxcK`N3smAgzuGsB$=-Hj=gxQs-GP9BNg@4%Nk)Clm; zO!+vA-0m=WGMi$}Qwu1X2I4&K0DwXQF4#X0xi8#`beMqVp{CXYCl#@3G5;QCWxj{OS_h!QS!h4IrSR_$UhDg#MeJ5IT zIKhp9SPIbQVYm_y3LXs`9K2KhxiUr^6dImeQveHo(9wR6@6f3uo7x0T)$Ipr0l%o; ze*$Ef?d(Bv)+sG8h{Kd67Fm71sPEP-0fOQ0@pvq)<`~fhp}h?A4=F+H4GE_NaVQ8{ z9wzmi+(MzM)!Zjn<)Q)<*9&@J2d|-Z@b=_%FCaCfPp8IIiT86DQKb2p{xrLu5BA#z z@`Il!B*EOTP$rRXze#=YVxO#5W}b-(O3(5H+Ymo`83$<~(y5op_{<{Z+plaUly2x2 zt#1)WIAqm}jzOJEB&r@}%py_7O!f;EVNooU19UB@Px+G*(5>CTU#oE@)JY)Hdij-QYMqLB@}qUv9AzwxJijEp>28B%omyow-8^J7d93*JIe0!=gE|%2 zew`{4bOk$#dEKb-2Xf)dL$f;F+bX0%8|hsQ zRqV97j@A_wK~MFXittnC5*Jr~eZ(MG#-<8)p_Rh54}7IN%zkN0w}racrelq;+)nq> zI=k9!PN|Q@v1p zGlihu4$o^uHA16l5ak}S$RSMvauxc@c5gXE zb=vydRY*N^Em`stBsUN>Z~d8`)znHQVSg!Gt*gV$W6_{8`8^7{C@y?+;OsH5mYCQ00oa3%y+3;5C5 zCXnM%7SO-Z_tWov2h=#^W-$4YQI1g?XmWD9u#*8rJFt_3Cv$ff4T%&$G2)W#T0-VgsE^^-epj z5e5}nr6Hs{43u(U{IDPBDcSW(D}Uo%=X%e@Zq_#TApP0?>ILS|#f|NBuex&gb#vk8 z=H?I-i_+LSTk7KH*ZmM+dhv6>{i|0$_~2Z;1EcLBgFiXw&zNJCyIwkQFcC5~ZS4{P z5PSbS{epI;iN;}dRg)Mj9(CF-_B@!%%VzGks8&Mcu&7(&&;u-@Vi~duytL#A`j6HF%jw5%N%(0{r4Z5(CnCXqVQwIPp&r|xd5#!%=4ZL>0;!toY4cxNxpw(p}Cj5QU5|@vSWw0 zh<;BHu3gjKwb905$(oZT9gOD=7w^f3+`ksAxv1g91w0KC72eigFrMj$Lnl~hiM_#;7ip7_REBOzILym zAs(0}Q+y4vhCTZS(pMIHBK7jjs&af)p;?e16AB4WiqK!Xrr| zqWO1)8xklxN{SxqwV=R-$c;&hbEM6ppy4t)n zZr6f#(3(~+jcc20&KBD`Yx$`p@u-shk?re!e*~F{v+A33^&^JBxw1JNs*fSe453q_ zlgPqWoCpx*b1T@99Kp7~iz8?77Ty{JP>d@JlI$dYC|bdIF884*v^1?a-dH6n=>~+CTHBvsZY4Ix`SC1nME{R5SK9z9Cq$i z=oYA&)Fk;YLg}!rK7<8JxhRJf%KuS>a>gOhO2E@ITODi0s~S2X1qoKMKj*&KGF3V0 zbipBmHHuY400yCl7MRZmqBL&*Gq-Syv=V`!ZH?&D(alOW_NG3~GmL2$`;vj{-Yw+wo2(N_B}V478b1XzuB7iEn56^gwu6TQP5i#9w>c=5Rp; zk)PQn(?>!jH;0120?Tp!&VJ2Jo&1XpyWKFfZPH8KuMw<2dVAR%Ze{*`KO-RE#CBJ( z;AsX}%a8@{mP7Va_U^DY#Dy0TJ8>ob@c$`8i0M4j;X?rcc>c2H|Mu~_S^OGn-TsFV z(euZ~X+r|(d!{a(xXom30K@1?r;Dw^$=|wsEtJ_+sUjZ9h|zyWsAw6cwL|;+!(}!) z7z8PNO;ep}M5)h>f4c^8*zi8-Fy^hO94%^C$N=XKv!VK4dj{B4b137TCqCE{FHMDO z3ppgPV?^{#k|x*`XO>sX@g_2U7WO1n_L_3>^?1OoThjgU#Hr4Pb+;`GpG(~jYgzSz zd;cp}`ZyiDDHS>Vu}xNiNA4jT72=bEFRP2LDJ4MF(=3cAbIIjAXA&wT@LGv5+@ZCZ zsH=)UC_p`j)AcVX z{$%B}8Tiy@UR02H4ZI)zGW<|-$4!6FD1Hy4n>dZVm|dt^OMbHMf>%5zdh{J*g0fg> z{!9_G*!Nvb3voRfv5F33pC!dE40UAG%yBZflqH?6Y+XCP1_41N=NnAP0Tf4$psAB3 z%Ti>Lu;|gE83ii(BghK5mt!yrXA7D84vg%Q>hfWj-#g%|CIR|I9U`_76%h2IO~6#5 z{!P2g%dP+=Navpe)F6H{K;R{JvrZ9zaHvFZXd+y;0jz=S!YL?&Wl2^;;=z6TwyzhL z+s=<#r}=La29DP+v~Ua=(xl2)F{B#R=gl97w4O_pc; zTlXrM0-mg18S(1+-+E8cPqsVwc;9#p7eEJmaxm$L(35Z&DN~UORu>i}H+P0=T?lXw zb~fmmIzloQ06qt{1)jlkvOw`$JlHUvfO-D>SOe!{F@r4RtuO*v+mn+ws=;$Q{i*Zp zfbB+RiOeXO?naX+91s-*gCgp3?YQjhf-Q_jv&_yJEpsY}O{|JY8LedHY~ZNs6*^@J zh8qZ4N`C_J2pEXs;F94{@E-al=9UX zeeGV}JxRY^a~FzVt&8_|Yx4|!ZE8Z(F^tvE}6;9(m*{iEwi}FFNqb6~^bT zadpdLZ|bnW%ATRv*!JlVX+7<5^w_**X#W>{F#%IjBFDCW!yDRBK6lxY0TcCO!mK^L zKtaLC@%Q4`fq<~TJ5$ELva}l78a~WI&6!#IL)EB{3ke&3zDkVC22D)jN@L%8QA;-e z&XAZ4GxuqOd3%JofJqsOPhG`Aokf|btF2G^Doa_{L{bIKu@q7qdaD{PoEZg~)jwaH z#LNgNJ~FH&pL2**5`Tu{qb2o$R|RzOSL_wB?a&qBE+2$wVmul^U*;xR(E(bCD9EnLY+89sF*TDRXY5JUAr$TuOPgHJsz3RmDy0${Itj6c~(mgIOd)lqiFs=2S_X zu;t_#o@FKB)_8k7pdeA=rTFToXFBSGJO5Mx^@et)%D=^~D-IctOC+)gsUQ2D-JbhA z_t8S>W?>ev6>~9{j+!uECCEnqK@5;mXZfz@0kGE_?E$}VsaD&?AG8(iV%4~QHMja{ z@O!rHa`18P@bmImT;b=iVV6B0x*i_2we7Bk49&wGw-X@BDNDd2q2>%IU?l)X5G@?{ zn2gktpOnG;6Ysm_k(iYFS`b=rHEaUH!+ zIEz3HyXe*GPhmw}Ntu}#Gk>qPR}NQou;sA55fL0pSAC7YRv7F_O+xYVuE958%i9j4 zmkTe00Y1&y3@z`wB%T%Yl63pv4;sXm3g=OlLvisbmgO0uA#L)L+oWGGxnEI?Qk$Y< zxE=tf7Do1-$ELBLXPz3#5O^8r;aEl%$X>|}vFUQWD*CqL8*3JC= z3Y*rCkFuH0sr=JG(IPDDU428rJuaS&^>WO{zw2cqAOy$8U&njU`{KWnP9JvsAO_`z zlX$lq&b23+cJ@&4_rX6s1+;^XfD)D9(o}#VnRSJpG+Pn3Ty|D1%5TDTaG`iz)INJN z5N+`FW2bj>H#`imSuLhGi<+t}9x8P&yTBXH@@M@(FBQL~a0pn9@Sjpm;7rOOSQJAB zh;wn@G4rseS{YX7c1#5EI7%*8>5OrwAGqI|vO7avC}hD-;ZTs`I9(EZv9EV^XHAR^ zl1uh5qk~S}GM3`mzALYve+=6pbMRlIGnV!(@u>Mj>iSn@NRFxt)@a8@T|z0b2UveO z+8y5v@#OTGYj^@Nfgz(znq2Z-EoySn%7W0{y?+m&e=b*{*w*Sc@HE)dLTxNWB?fY> zPox(VlPh-)cdrmU@fwF-nFv_oKc5oiz?R=qIBA$@XVQOAA8Hl3w=CT{H--q6BDJvF z2So8661!nZk$p1iSc>Ea-s!z+ddZZf;?lu?+2wAFRkitPL!v)JQ?GVQn>PF zfFn$VCXHY;(xByTuTk1^qfLpf=fu$A`}ar%cOT5l`QCm(&fly1`^mEPLu;@u^gD3i zAk5j)=NHTTj<+CeF?Wm@z(1GT5};mQEJ>6Fqr@V~j56u_mYtM@3(l@jLEAdrF1##0 z;A!*z*9OjM1+4eRW*?^R0X^7qMnJPG_$pg zL3=f`Un!jCq&i*uF}cD{0RnZf5>;A4j5THmB0$mr`_iMveJVOFQ&LksGs-dWa$BFO zJmJ6`Z4lL@KGH52vI91sFeu#zC@Xuv1IA;d*gRaoz_6mXFVq_&pUe)gz<4r{UNfU{ z4i(U35H)MBvKfgR{g}iQoX6h|ZyEIePebB=9sU2;XjhNgrtPK}g3qeDOb)mtsB9V7pM0Rt_;xv) zza0c>Q9z=EwPOX%s2#>HhMGQSZLe2!k~#;)^rD~;`ORHsGgH}|lTA%ci2IKQZIzmu z$iAQ3K4Rk1B(RW7+$O`wHOH1Z`&K1?6saF#G#G7Knp06FLxf$o%UOuF*4E~18Pq+i+^a#?M(WMLxfWGlh|Fh zDJt(a2_3A}K$nH=v@a!>iPR?BTWy+;3xgPGPmv&@^hjqX?JPrJilJJC)Fgx}wVN1v z>+`b9i?`<;!J$gxB`R&R8+mny;D?pFdG{BQ1&K%^fhxR~EZL8WwR=Qz;^hymFRlHE z?m?OKHLlNGzhC$Yyckb+k^XV`CCv@i@sk&@H;R=5hzVCKoWQ%i^0MlCP}TirmnQ7X z$Ewbh5)%YbWg|{T`ml>qP`Bo(D=|tfsO;NoR30foZ#&5^vd{n;_S|Cd3whPG#8*1M zpJc6dzh_cnlW0R9E`!me)HQ{W6Qndqkk_wCb(PWx=eS1Q{0M%ltAp~JYLZ(ZXz;{w zT}laAS!pqMwQB$_(JGU;&AXDnzzdyPy^o#MTxI~3F*?DMUJGMyYZK%8GY)o zcqEHx`)60XcDQ6hPs+Pq#TB+2Jij^&%O3`h+z0z%WpaHRv0$NUBelwWhLe3qJhQ01 zS3A{t`4&#mn>B>=B5AIr&lkInEFd8jUGaUR{(&Zy8#JIN!3bQe$B`k~Kxp=FsGkOF zkviY7z#Sn3Y;3~_86WHCm*NzYQnyCGA2QA?5&x{-fo(i9@^Kw|jEjDwJY8AvUVVsJ ziP_2X5p26^WHu=dy;!wKmBrl&>^*-ngWLo&T8eJwoLV*?=K8 ziC90oWP$8T;DL}m+`~Lf^&pKtUwy$?cnowcppn_wms*lo87$Bp5(_ z-b2?;%zF^)zbTFH_D+7vW`B++?2c%X`TnsEyc9jzkxmwXZn~)IOWbYS(KlE?XOZNd zV(SBL((Qu41C`Eg#@3J4Tj(Y+-d1_&M+Aqa+6F-Wmmwd>({Zkx(KfnN0ANkXTuq{r znP3becll$%*b{`;znGkfBb<|$5E<-Ie>;wR;_?k3i`pr12%Q*L^c_FclfJ>W9$ePP zpcWqL>&hCx8eZXtZAS+-H|GvG@Mk+2K5cj(^ghLcU+H4&ql3i&>0)H)HR2Jf4r%$G z+xA@LMsHo|hb?M_W*?SJ!|$XDjhtrW2{@WN@YO6<$d&2x!r8NdSKOQH-+vhwvCSDm zxcKD=2ETG3!T*UX=;{6MIUybSF55u{n5}2j;4%zzkWm3{cdG>e*ah?p*HqlB22c%n z32Ow}ua^neOv3E3!|jAL638G8HfJbS54zyW5;Q|0Kf5T|J1b)W<1T;|30Zp2tq_kq*jB+iPauySJTlu7GMjYuIE!?taTX7}W>r^KH#X2Q6^ljvBAb%VGoTb=3IYL? zJfRfZ3yG%Tt=LQEi0Iw*)v)Uof(psYuoI`5sjKNqFar3}dTJF)$5dFtUWddSh954@ zsK#zMO$icFLO6_3IRpVz2kp_E;edqoWOU66Q}E`W;Dp<_S+VakBs9`7)`3wfYKh`= z07nt`_v6P+_&mH&HkkpUBhJvfi~W}8zOKF=uOEAG=>);(#6}W)E|Kklex5*V0zJ2W z!@?zrp>*oOxIDFN1g2$Qr7Fx5iWphu4}qDwTKd{rAO4zkG780ehg<r;t*R*?l!3 z3`_ikJ8NniHD>YLXS)LVC;k$h$pKKx@U<11!{;;^MG{gBS{9d&6(3B=A|nNzEvQ=n z>&Tv>={9vZWur|=qh+wh6&K3{&zxAv581TS)URd98stRfz8K4T`h2TB?>KlF+Q7}v zWdQfk&*LJI`NVZ1gpBY)e=+Na*9Tq7hBC4G$`#~ds<55+T5vNl+dZVh@_Q6M*+PBg zqH8tdKd3GqM2McrTA?%^k9^JNLU9Pv9%mQ1brQR zbwFC|G}js`)?A4CTA?KD(2+N-ah`7}&Hng+?ioH*zjB zXDN{NWtH+Uxx)r}zlTnw ziG&H?&cp=4C-m9u_XjYv96(lY{@G-C)jmE$C^tSm7Bq}^E_fLT8L@|kVkYr}jboc0 zHBKz0O=uq?vYR=G7c3k7fdiVvfg-K+9}nzFn5=ufYe$IdhZ5diX7~5dQtw7x!K7lT zt{7C2|I^6_84yL>QOl4Ni5+>ZNtN`BOmzVaC!%F0DqdLIf)yOR;Jjk?WD>o#yAfZq zRW#8yB5tGs(%dN>aWevRiKv7NID&%}y&sWAtBKY%x@4>GYMs-TKJTcglRua#A~K*p zO>Hc!;fx&Fc@J9`z26>JuV3Y;G_pn%LfhQJD6Gxnp*~{tscky5He!D|Z#7!v^Rh}W zrAS8IzOr|SFU6E$q~3~ccQrDAA5p>Pe0iuIGCG&tU53PDI5#(T^_h#s*FXQ7OzW2lb2b}3U*CM8>4H1*xg51LymP=e%OjCw9 zCvtBEba_slxivUAqb8ZJ9(66`k>Hjwg{^NsU;QarVj+)kgNTj~6wFFz> zoFTL*xNI;ZOa#+dO#-WMQjrD}KvAg_QP3imBq>W?XLh@sVJM`eH*@d(b(FcAZaq%( zj_ukEZ_cAa)J<+4HrA8f=&7;2JnuATU#M<@C6!gmTkSkN8>yw-njYp~sXB1{>yzm8 zzH43H_YYnz{7kzLFIp^PU3=G=oP=w`qgm|uzP&R+Sfo+~Icp7StG&Uew>!E$zJA|W z*A0^Hbf|0Ee*mD@T}M1sGbNL4>&vPwG{`%>-RPZ7taA%5yOn8n_#k>Wv5QUk8BBvOS#0%itOch0ja)^d&d5w^;@t7y7I9Wm^;-q&5f- zOX^kIX3n5MTaM0J-V*&)4;t&PUIFF6RlPVZv;p!SoSX0aya-fv;dL9_?Ue903B^V7l0?l2SXH% zXalS@B4-X&%IbOD8gQ0GqeKM9=^}@a`*;xmY@XoUgYm8j&C(5mu_Z$rtvU`qcn$K3 z)%uinsLNJOzM6R^*S!uER6;7@v=bM%sqFX z@pv>3zDX;kB`~TprbKd!IrW!aCEWw0E7|>Vl)J(5zyOQ0o$u5*ay$;sDXRPLJHP@J zN9{{dmC{GctZK43u!-t;k{?_H|Vj9Ek4Tql*eI58xAOmD0Jd#PIWh;sS1uY^k zYNTF4!CpfvvaX|u0Wc!0CL z`VF);;L2d*8}IBX+Tk7ueL=R*e+6;HC$OicHdj?LuRljBt}mK<>cgLHxq@<(&PUQQ z&DJ5Nli79b4)E2u?}ma8f+lg2l_fPnmzD^hUK)di9=d7%>O_a(S=QMYSxzHz0MAldko*F|OIVj!N8k$L+rff}n%yvjFnlsb1Dks! zTPblyb_;~Qp;W@A0JKr0h4uWCCz30cxaWZ%Ozbl|u2?7i=tJK8)VU4Cy_Cu8hv)Td z90|XO&X2B6)?>hOrS0s_gqVKnhJf4ZbxzwldWNKSh@&CLr5zH?Hvqzva3f!8#TCA` zvH&y}pQza99taLF5rhW@#mdBMp$fq1Xd8E_vqnO~rr$KFK*W!U5{mai;&0Y-CoD8J zts*M6o@r7a|Lr+^amdj=9EAP z*VNoa0;?~V8i1>|K?r`WFsET34Q$aG3qB&^wAh;L zXYIJ^_4#D>~TWNp|imFBn zQ9ONZEpXiEH*GA3YFGRFv(AQIWFrS+;O&9Mc0G_UYTTy_G{?$*%n3mgM1j6R>`5tX zIZ|Ihq^m!JoWp0WKdS(+bucOTFo$Ikrlru-87D%iP5slq2yJ&H$15uNX#<}k`>1Kw zsa{$d!c8K}wfxY6^Y4E@dq2PJ>a$fLb)+^9TwE*{NBPVY9NSoiD~;AiiUP!r;Vp>Z zHs!%Lu*Sn+ztz!Dkppz1mIJ{gvt*wA9{#!Etkcl8l!j~u)L=48^DSs>XwGDGq*dWF zsK|Y_BZA0M;ESPJ6|9l0|JIY)uBQu*XT;s;16{I;#e7~{=D5xApyTa2#e_Hki>;e` zof~+V$r+GPtmFJ=;@5Y?dMEk;byLkPL8De60ifY_!0s!Ft zPn)H+iTnRqEU$Sj?6AdBcfYBr&|uhbBU7`1fo~{)M;%itb=4N7ch3@gK4$mY z#ddx0)if25neD_}IbNPKij4eq0y2(B54&XiUP90h*53m^D>&vr{zLHdsFqHij(FGo_bIGi2Ae;X}JWE?>o!mCjVA+J?XGirPfPYreY|bb3#AU~H zX{VbA-Y~PMIW57{+3F<6H-Ib2t%;mwn|5Z&Rt-V&uaO*dt-qq z!269>00emQhhQJESXgCnql&GghboaGihYtqm7Upzi5D<(i?}@BJVAHBG{#bY`#u`1 zo4)XbmL@3hhp{y#t7B~_?Hp>&V=Q&IIt3o$i?%L0NEl-MuAW{= zB{izq>U~Y%F%a9#G8grMrcZPu7-))MAYb3ml6UUq?<+ErcL?1nYK~viRN@()|=tmx$FzuCQ5EMYV2; zRlYjfX_}08xrlQwAR)GyN`a|FeI~7V2l+?QOeC%C!!XE)ZU6`W%$-y`j76b}PMOu3 zRo^E_5ErJ--M}jR1=SD4-DQV#8tfSBvN9K8w5pm&fL0R9U}>2+OxkdZ^r0qq8Ox_I zDrc2Z2AWKXDg%S{lX_^DY(&@9Jq} z?}`p<)jF-e1f?tucvt9)6(Bb58GnD1Ap<0UiKNu^hCP6!6siPl2Be3!1Xom`Gf)0R zv{A#7MS;Sk+CEy>*9Gpu`T`ReEm46q()Azo^9xYrb5)>N7zO8^Y?i7fgr8-2YO#6p zJR1P};_gK|%>t~h+?c}}0JatQf&}c307bz@hw2m23%*f)q4oJgxSj>5C->dNS?~VIc270{E&zWMw!w<`klMS`&Tu7Z zFRdcFc3Y*S!E7QPr<{PtpHIPqYCEHlhkmA$n|IF2f048zG0^q*pVnuBysP%GGmwyD z4;wZVX4^9dgz|T>3Oc}f5|8|p>h}6Pyw6)Ael7%S^h( z_4biIrOdj-fd~MGYWJWdg>~Q-fB*4tx4fM zRBJq*-86j7!sID^UIM39eK~pXiw1szv^uhTlUePOx**|O-q1n@#uPh2xnih!_FJB9Dp3OU(i612GmD(%KxX zFQU^Tdxt2P0Ala@K)&oBa*L3MU^AE&6|Lm27*w=ElNch5B+N0$@XI#E;w21ueYa*o zKBL8O*9h~>Jk~qm4+U&wh^2y>i;Dzxg|!ACQE|ni-oh;zSegyu{TGPS8akI6sV8p) zwyHH&g@An~45La=_XeZTCNT1{g>}zDJU$fUsmF=vups#T15CU8Z2tTTsx*rjsv%8# zfl7GKuw1^bE^CfZgMOZ(X(d*vmL+lC+C`)v)IqoQspv@u_WLrUAoBs50$^0C1j=+;@pi zuRkxrso>c15XHiOvN2iy=7$z0yyG2$7ddoNCm3>ZB(pOYf~NzAf;E9KYVkMVN`Mb? zJ&0EH8Ct+RdWO!M21yBxm?-s|;>pzkj%g$}kHihNVL|~BSL6(1`hjGnivo?QacyF8 zqORg3Yj+j(P+G^nH>HtB=$hiCYVTWVXuDsBT@zVAHzk7!s4_)+c@jIkxP_t3<-xun z_%m*X0j8sULxk_sY?IEMJ*U3Ty%#e#q_@!WG3^rL*FSqq#?Bz%#3<~8#|R;ixk^nIkuK0|lUVJ2U zL;PZ9I$*S*xWryW;b0pIt6q%&Jdyl5S;=JC(^SCY#IPjL7||HWG0IEUnPr=k_!-u7 zWaQR8HmheJj8eXrSkN+1EgB!tz(NOZDHQWUndAiM0Jx8)KpzIUY9-!*C*8|Kh*c0$PZm!1JReucopA{lo){riF>x^thzE7D0%w^=F ziD3b`idZ;XZ)tW>hyf7=0WccuqeZExdgPw5(FJtIqsNr!uY?mRa+D*G-k%Av`w31$ z{=@b*JkV9bv0uJdAB7qeDd!uwrJ&;Oe$ooDZYh+GntDSMbUjg&Vk-ZZr);u~LUIBm z@eX_lzVWMD`!8haYVu_;P?zPLaxF?pdUT$UKAHb47>w)N&F3opa5g>rp2yc>T#yW{ zlz&QXcVC6Qyj^ zymyr5Y`TntHSz?Y17x2=TEIOluO|{WNVK_xS0s}2o(zO++b5$)08bB)>-|yHZ?XfF z;|b?;skMnQnF)h|@;WqtaK{UNdL?ytwGTntLxSAVtbRX1|SL-o=-* zFkrNhOKg{2aD0UU$ro_*gBV4x)0(xbMSwSVBLpq>(>Vd#!#B2vSJ;DWdtX2rb@?E{!^@?|0{FBHg6)9|kU=vy2{ zyX8p+0NI^=r3t&`(9<2ERX$edx#Xq=4=+UX40^eU8e5U+Lu_5nC%{;H%AiUfXuzQp z>s2e`m|m4$fxL$PCAt8h(7?{^BTuLl?Q27hd8@fD*BWss#r;jLp(&ESL#ZF~NBzM* zp4C@d%$3gLFE>~)f5S^d_a`B>ln+5iDg+C|?`580a=SkwqqD5p6*>zQBogBMLs(Bi zp~g+>eoi%<>U5A;;UHlk+V`|D3@%I=2Cqs&kkA365`0|PMW1$Qk6kM z)EbYC+e~uV+ht;aO32AF3n@dA&ak5yQbFHTBW|w&SaIcO>@lg?w9qi35q5)ji{^IB z zUvIATTZd)`?!eOCT>r$J+HuSlM2Dx4RoMM5!(PEjLm9x#G3JcHD+>1buA!lZe8|Z9 zTfM|v1x3?C4)^i0Q|hd@LOyAB#4~Zw62;jQ2PQ=g+x1kMu`^;FW30gkon^g|ZRf{> zPlvUu=v(9~@_#m9epi&`VW)EuI&G{VG+$g1eYDo9MjayJD2;X?{$S5HGCDsCr-0gL zbxo|ZMCdSy6yL`gt1F~JS$Iffd7_@yK@UGYC^3KtBh}wyp?zb~aHMiXfvQL;A^>Z| zzA*ny#=#LD?~hOM^fGxAX_*3S#LLD7_U8$+>H6>wcXGwbvDEt5(2_s{X+7n5&}PWX zI$xug?=bt2zTo`~G;aFFL0Bur8#AYnM1>2^8L$K6X8N-hz`x$w3bnoK@<@-Zznchi zmhjlrhrd_?ndVin4%3BkGY`97N*jPB`wI7f8l#}fkcy=P2orDRqK5_7O5mrB!=Qp$S^|(oaAhZ)NN(~cR?W&YvWLe*f9GD z(m16_g~>6oCOcc%FfM(s1`~-Z4BnarRyVg%PcdCWy9JsraG;f2118p zt|uw9vV&&4+iBL9tC3xJFNl?4;a{O$n1hyp_G^8RnSo``Bc>%JK>w-&S<6%xj2Adl z*`Y)_RVpZD$&tNa+t1lR(1vM^qf{Vi;Bp0Xq& z9=~Q<3=3*_9}8c}+K|L`kWFhmJ8j)vpsUTH>#0ldP3a$iVTRFjj2-%*IrAtd%( z@+ac>?&%o~4;cdt%n`B2#$=L1AcCxTh+Gd9XNF9_sHVUg+%`rF)*1(XSpr*a@5D2I z^RHe2WnBU1H^RHNY1;v1x||e)t@>IxvYDIUREGUR4TiyqpbT9EMmaUODi9MAa9F0y zQbmu&qEa$jT%f!Q92yBm8<(XGgpiK~C(6zsRUV7oKpRDf@*Hq@+b70nXAz4Ig@pE~ za(&#QQL1==m8@5h(OR3{XJgoie0n!#WX4_a$Ic(KT}*uBDE!!fKSJtp`*(C**@2rz zV$b)t*TPberpz@&a&oDDy{2w)^lgQFh5JJzL!w>-3(2}mS^HpbcLVy|er9fG^QC|j zn7Lh741;H~Z#^Xq*w%(@L)cYH5zI6%?NiRMQ&w_3#Z^((D)?X}NBJOj6>f^s&Fb;U zMo9J~N#l^5hloY>SI(Ab)6jhTq;V(b^|#J#6}9J zYRy$2c%c=`p=TVB%TVHijvzx1sAAR?B=02&Tbfe2@NIM+H!2B76#>h=28$V^URh4d zmLv@wON%o}phF?0YZ$Q#B*w*t8NxUcu`rP<*_)?9M5vyv1M$!x0Tz_!`@sX$t!2FZ zz4hux${wjDH@?MPN*IT$7-D!7pmi%i!J$YZVly^sEZQNCuS|GPhe7cG1nFsb3I)%F zk$Rt(m{^W({r|QmG{H#w(rZD1NezjNSQ|IHX5)V2>{s#40g|JeTuRpOz@`3-FaY7C z6W~Nh@IKv^s@-w^vHy;qSpG7dori<-+5qyeOqUI+Dm&A&R7&56Dc``VkZ}WlO4IYr z==ZOrHqhs3wO7%0)106RuodGS)2coEn?>FU_{a1hRZ2tFnEl7*OAwkM8oY(X52E7O z+KgQYFQc|$gd%~47)F#uVM{HEp^mcYdRcu?kt_S|)PBw;^=f5OB-!-mMfL0#XF1Hd zh*Q$B50`oIB-rph?A*<^Vj!GMQQf5ylkqHRUvBo@78297s3_vzmtkSkxY!H)nxLT;MrEO8n| z%7+(3I45ad~3LHBz^iFCu=E2x@s6V+%i?3jrl~h>J(HyVg0MZiF%L|YL05+ z$rcigSJ$FNU_8qF!@n%!yk&Yj=ED$opN!FFb`p#|o6UEVLnU`a*Ek3Rhu11Jnz$e4 zOB%_P9BA$&3G6f*=&?eK2WYTnoPbkSsYO6$jPF|rrd_RE6n6Th>3<@7*E3t!^2LlKxmJ-m+`FkDE@LgUNd*tyi&&eQG zu5%t>6(6NsEKHC9Z-h6+*Ty;X!V&|2(;Ythah)CA)v}S-3Hba*p8MC-)d4$8jw5Y? zimWeK=7(_9iALKaX7SC~0IW(>{Dr;}RCQ=55HUOJ~}=Nm1(MyPcG!!^oo28W?}@yJg?l8{0H~ z%sUF%UaL%|KdjG5`z3eUXO%T#p~nX%(1}CXm^-|kgHg+M3vuq`e4U86E`5>iCn&3{ z6BXW02<51{dJXk1*Zwx`ER4m6rk|4i4A12h95NdK{OMLNEd+7Z8{;FXzXLe9WO*Fa zwq$-D!b@u8MBvxC`sxA}!bSsN^k{0YB?cAj8m+)v{}AX>*uZbW>@#u({17Rahg_eF z(W(~$*HcCss&*8e`ylgcO#&&px4OfmXXHhIrUwBXsC*4o1SUT&l~B-@GIq%>LAsAp zIM6|^rjy-qSBy7_@rpE$TjxeNV9Sv~L0==QXqPOget;_0a2x!>`9gyS1H4dZ2v!x< zmUBuR57`^css8V;QExAe$1;*19qGsV5yEV17*?)AVW5f&8ew4iO)FT~+AzuQcUGOK zVU!%j{oZ=!=Srs>NrOyG_MaUZOJs5bhR5kdL@flVuoaGFk{D=$Apy(EQV;amXyg8q}OJ{NV-YF0{aOi zfDnS@SYY^6N=MhSC@o@9Cncg(3r_dv3(GV^|1LPJXfrZ;-EhRdK(`a9pYuH@k1r9X zeCbQ^yOI0SE|wtD{Uufv1pKMgJtDDk$pfNduK<1?)e~tbLeHMg(d%HG0o~_pHwT%%60p&A@iOoP<}Rq~6vAWX;EE6&}$TbyF8@ugr+W zQFKa3ijFbjSm2;V+^N#9JF$dKO`UuC&`&VR*y1kG7F95RX!ub^W9qcA#h<_mZimQg z>eQPnObihEX|a|z!q9Cdm}%HM1{NS=LGRkrc0*8RoOU*vqfp*hEpJYFrRIBQQBv$; z*_jhG5$oacUM=6plhWICng>$5Mv+0HVH==L__De~(gicEvQpVeate}2y)ID>ZVyoz zuD2F^tDN|m@o>b) zZrtZAN#x!mjs}6H-(-PO>f4z7BTqY{K&dh&9%fWyYb6G_?D;Ka#ToO3<{+`1my!d= zv+G4`p{MDgztV>qMiz?(zST$ftK%sHkUE_Nc(HkrRs<1v%5_5A&oGnL;g*o`iOG(5+#3Y2f?IH%2 z3H$1E>rCk3%dVZM!Ff=+4DsPkJ(<47uF*M%5cLvCO8_MKLAN|$$;uh5VMQqUD3x(+ z>sX&~1tR{xGR*LqKQ($dr!(TZ@tkRLO|AEX#57{Y{i-yYFhqjW3szls-_nuladmYE z^kOndC~nz8Z8Au$O2IDj8kFdFtO??<-8SZh{A<*6yWER%1MBL@DtHIgJ|tgHRh(RJ z{j)!TJNiT*y}Q1~)-eW2Hc7H{~+I|P%<<;8eh-t6oV7~4}>?BQWMs&!V6 z$M0F%wlxU>`EBkcrjs|OmTMqu^0=W;nMkM-9`3c=GZs4#9wt%*^!8Yi+wHG5#=+qL zHXrBNGOdH28{Y$8hK)yr}OaZ9W9@P#JqG)7D$fU(*&mhGHZ@3{n@VG zu_Fw)ZG9aqIM&O}fKS1IZnefWx{_3DHkxa5U?yH3I_n|p-nvXYVjx&M-OyF`4d2#5oWOV+fEo3Cwq!`m8RAP;JgY4D|sq*3ws8e%Y&c%VZ6~ zx4F)PxNh3pKZfqMb-eOQXf%$djel6z(7 z!@RN52S2{p>kz2B4rBit+2B$dBNOtE)`MJTAoQr=Hgv$61V^-B{Qi3@ersT~OO_c- zaO<-;hqXS%=>cvx+}SuedTo$!&c`ONueK$2q-xgVGeOlY?7voa*5XzUe(jpzrW==% zFiVEu!(X3P%O&qRRBzv5&|3h!?DH{{vDjA})|6rToC5>TH&eM;zWItYr>GOp((_vW zn+V5cMIf*9w=d-zFUTN>uf@h*VAXJ_7BEjm$XuyKqZgfQ;J04dVveq1YU@1S=Og_< zvA{+W|K2>j74r+B5*Nb?A057iJA44R(ieoM^SEjq90qgP9S%SSCadkXV%$I-@y;B` zE96Fx5q;*+WtS6U+Itoo#>_Wm4}hVk3#ZHSKJ?S7=o@@^y1@|yAePIDd3|3*-1&rd z;QhSH3vbo$pNA}MzO5fDaIesO!ml@9EncofWjbLQ7{E6R^d&}z#u>mUcNzQd`3})? z+-t%Ix8Ap;E$X`F7`}$-5hc7_FMIuxG8)7KYk$!&Z`}|BxcF-QR;696`iZW>btyI= zR9UPmh^JoV^vF*EdiSF-8belKksD8>fJ!ktK%E$qckpS>9jY@4SY> zsDRLq{D!M!hxgeX@e20Bul!WflYGk?+-YrPvsu@dTEIq~J1w4vDCKM5Hg~r=x}Z*=<1M~cks5T(cW=8~m6-l(ecB8cxj!LJT9AvV7d(M5 zzSQaNz9s@$V|@K+fNj5YVv?~dci;lAevN7-4&B{mA#rY==5a#7vvzlbZ)JCcl?V~e z;Avpaw0e2Va5Ue?`m3}0BJ3B7z;PbDxRP@ce$@Stl0I@nMc~?cHpWdxoL^~mztPCQO>;cJbU0g^TAey@ zH2nC*X8ON?zuRU_;(tBpZ_pZUT4cBQPRGyEZfByAaC2RMmj{8ualiv!z&#C9Y5cl~ zOKgKcP)uN+mh{jp)Nol)f-^JAnb-NMG1i zbvg{)LT5x=Mt3U$4*aPFDY)q6cX?7qV_WRvol&bXvPA4@DwHY1!?ZcHgtjocb0}d!4JivU$iSI?ODM4A%&PE9J_Z)WNC-!JB^qA~9QT|~t{ zHct9yy`V;PWm{c{1vbYyn9M?85latRiFke$l{RVG5Jsh&TLGr#37dD(H4?$r>5@=Q zKJ@cxQZ`%p5?4x(t(PrqTkws(U<>0;A#6ubHAksnK|v=>EjgVF0`|m)_EU30O`-G} z-utROYqb0DnUPwuq+~d~6Y;mkV43lRi#II>_XtHYa)8SmC>xIk}P#H8I*C+bTj7`u@6l!f9T{*YU;$5|v1oF`3?xB9o(3|7lePus8dUc5L1Q|uWtI?4OD z6A^T!WbaEkb)8T=6pR^2_J7TmYcg&BWg<}evq@D!-^R~+#s*lj9RIBonZl(hZNm`7 zms@%t7tWEE)6|vl2`shhm{xu}{DAlL|c=L|0(j4hYtDi?YfrQ`_+ z5DQq1M&$S?yoqvm)*81=oM)$Fanx68-?BY&`7sa1Gg&>Ty zGYXZDs%PZHX)x6SvPF14G4@kE9fU&VTsb#>F2okv`<*C<%iDx)^$~^sA9yMy!Y_gX z{O^KB68KWR0F)}x3qj~f^F4Anayn2php||0j_er!ufKoEbI{>q@$-}~`tMuyfIpFu zjWkP2WkNe)dIzNFq-pWKZIKwx%eY4z%wV$34Ixk`u3qkT`+9dtF8cFI^=jYsa9G!w z6MljIo5OY7mSc1GPZM+v{J-deZ0w9ptSxN+BY5#qG_d-YAM{!H}=Ot`#wnDXz+y z`lo>V`_Y@h%^Oa1tV8&$Pu|H!Ua0N_%&83J-ld-5LE^r&0-Lsl8+*{CHDulR!Ivj% zO4eZ8f17ZN2NN(#JGPHt;QiGuuhwpHY%$p|XhI(b{hS>C_v6^nA%!l#jOEC@okC^^ z%$ZS?j@m|$*hph!l4+74;MhKjjaoROrJRx4nY8h_he94+ExLZjtu&zzt4M~_3JBbj z1BVN`pC{A{u-77y>f7kS%K?{8urbvrkZy;q4VVeWAh!H6J>KBKU}t$!im-=$!WhA77OsJg zG73R=x2t)RSG9nsmd^F1{zpe{t)jpr1c{&h2N@?U@9JK8$^xv~4JGduuhi)WYdn5^!~=>@l{WuBX;p!@q(y9Ya~oxa^Gce)-O%yh?^$9;5;1cpe=hg@AE9L7n3 z3i6kDQaa86rm$Xf)?T%2SNg=+(VW_WXw!AmG%vKVTDW&>+1mSxbgOHRY;7jJRMksT zwXZ_FMa8lliwnF~Ds{4nR-SOA5lS>_-Yji^+B{hbHqX7iH?N)f`-obJl)a4ONw5EK zo&Bc!Wl5X$1R?Se?KAk(H`dbeVd=t-GzKg)iVn8T^{nQD>Q=A-<{FnX1=4>78!|Fi zIRmCBc%+v!Rct(p2IU1=aA3^-ZQY+X=EzmzpDx7%*UXd)xqDiLdkLt5D#?2IfTcER!rZ<>oK~%oUu@zD( z>KkL3TpjiRHrl%RWzb;3Xp|+@{)pczpEE^~&b-bSbSP~rHd zk||iH&_H^@g&(a{yPPO3$}d>GBPS~TKpkd_;Zwq347yixrWCf!K3)wS9_d3XZw4B~ z>GN)&Nc%ZG9jl#NBAXBG{ETumeA+#n`!1imR;WzwSX1XF<}NJUId_(OX<#eOE(*7T z=n>c0@~pV=rPfpW9Jk?D+im_~58is{4V@Y{``{OzxP7M5kmbATm465RZ`{U|0szbW zlZyku{4ZV3(ZtNe-Ok?mA97<C8F z)(mEorfT6);|bJ5>)rTveSqk6WoFp3j?XR|PmXU1L zEUS}#s^8c^(@;GsIr6$6#**jkpiorFz%h29VmCY0MUqS3uqkwL-NW+Xxpk<|rN_hP zn>Gj?7lP4=O#Vz9o^*eIb!^9>SEELA@9p-}?lf~wjX_%%9paE*pUT{Ujdh%re8X53|N?7d& z+A^g+dB`xWt$(*lC_?dGokm2>uALNq*eVgL$fF4y^3(vu49V9_{JJUzAY$iL9Ydao z5Dv;LcVV)h*e(q@U;}n^kO)g~?E?Z6XEPdk0+W1NmJdqmO7;aVs7LY|i`p0qwDoMf z=Vq#NJn@>gjEdCgY(PgsoUIVJH&zLe^Uy^^>9Yn~{2>v^%{93A;?}@Qfy?>hlaz?H zNKm4Yw0HO3YoNnM^6h z_LdH!bMIlt5=-PrRqHc1XNl4trxrsb&5lLQ0*F#xwRmBgw-L`}F;FaQ=xY8x5&DZOo_pc&>9PXL035vC0q#rm8ojm?^1V9#Yt!{sJ5Wn&wAv$jYeVu5o`||tMYx{p_ z^UJDIc3W%+J-4;#SPZV{YgC~DFLh8B2mPtUJA|s(~7!Z z67qRf$t`rhPO`vV92^*dJu`hYieBg(+UKxr5Pp1~rUIYp6XBA#G!0$}E=3LQKmgIC zyaTH3)dkSW17gY%ljlsRC7lTa6XhWCKr$#0&;Ua=gV^UFE)iO)!z8^$?62N~Kh2Dw z!F!PS+|k$a>H5r(2#-X)yze2q`n8*mY+XsngBNCT2bpKatN+B--jNFL$={W@;I(*} z=Pa3k>{1y3>S0A43Ehw5*$7LCfv#Q!IC;-T(nNT78C3x#Gs+1#U@E(YRg@dE941LU z5wMH_fdW@eF-t+(hK1d|1P|w5Zn1b#PfpbC+x$YUs;Tk+y8F0%BLklX@wu1)#}(=Z z2nBD>#@+JqStnwMj^i{BvUaU+iF|+V?(F!jZ4J(-7cM}TYcqA`v+37Vk>i;*YSaWf z+1EzJb&46f-OpLlTXnUrtQ~U&_ndK^3W^)*+z_CIjFEfgd(%XA6^bH|n3g45Us2hS zMo{`t@h{_B?mt4gR?qMzknpS_A-$nmtN?29VH&PC3h#+MjZ%GgdI!mB{L4I3jG)^m!||+~K($m-D=tS5 z-J*eq#YtZ!XAwVkbRqAeiqRMUhM+93AjoUMhY=GNxdw8|Qa;Rbs!DX7=NFSAaQFui zPGc6&CJM8a_*HuqPl&$3dZBbYnIfvE*;D%Rc^XorA5CZ?h80$`S8wh#(nKN?jZALw zI6OXfDz8KI9P0s_)^U@?5?;eB8Md>!IkglUBKBw(@+k6M=eJtgKs zBYuPq5V;BG><3H9njkODPQ{dEdIBK->szlS(@qhfr#fHP&wEj_o&x;11Cou9HX*P# z>KiuD(2Y_tjXt>oYBCCaBiy}Ofu?aZP|FAf%-;xyeQ}+!>}(zWobQ5t6dJ?28>4VG zI$%2*xYeGerW9vc^x7aAXjzRGsERtHo@2bJb)rcmPi$4KRK^GY3VQRm1dKEVBa&|m zb3@z;)KFZo>}`)5=R&`Bqc$Cbqs_c!m%3lOq7I2N(@hS3_>2hLS84@Y z^VbaBSr>2390Qxw}Y*^DJNFC6wJ33PzbVvN7So z%nOH|F?q*V`2W2}%}BvEPD20y(EjUOg#VM`$I0H@!q(ly{XdJ;wuX(}Asf{Vu8v311}BP?@J<-Q~;_Vqkh#bflSDS-^T5HvIpG!ngZ?=mH1 z*Hlxn$r^);O&Ua+?SYw&Bagl!Rt*cCt0u6DNw$zxi;Yu`-?$gRN+mRSSJ%HaWyiTc zld^Mif8L+h&)4(DwwV*GWPKTIk;m6f|A3qxUB|Ke{l1-ZEm%I#0K&f~e_elQ&+7H~ zvH#lhianAXCz^1s;Rs=fu9s3-Nene&#HhNoE8Iw>lbe=ODA9E&CHPO@!%7k0ZB2X= zAI7C+#OIn1TLy4fg)}9eYD^<%@Y>T>1mPFB7e}+Ew#W0tq=ddPCS9tVGJ%_k7FEWb z^6Spb^7jxk|DnVcL0nHhXFFY_^Z*6A!~Yu0nE!t`dj}v{n!ihUY}+>P*!JA9J#)vl zZQHhO+qP}nzB|wV)xNv&?Z$p_x=v?hbaYq!GP5fCWaY`D&zuKY+%XapK@0)Znu{jJ z5mv2Ic^22WqfMAN%FHTU4{?ps55e}Wv~{I(3}$I-VNQ)p`i5hZ5BCK^B(=Pte^#; zBQ!P2ggLw6AKY7a)GYHF*^UKYn*x+-JPTQxMUipE=;)#xTX`G1vgKS+0I3Pmo2YIF zuQZWRFLRKn+9~c9XIM*`T-;Y~I<=@}eId9O?K}L?cr20u4j$A08*X&}CId*Eq+{c_ zl1v55LU#hEczDkVSOlijsDsj%+q^nF9Z4aOUH;`Ka=nNm=?_XNJyND~qUydUA9*yd z?2FWUuW7sK$rxh|`_KyN7D5b)hLGYzI1_S7%JQE8h}0LQW-yT#cfrc2gUc#p%8J!7 zIyNbQJVl&^b@uu4xea=CmO>zPlWlCl)&m z>D%jX1MScm zq@c@NkXeipLmmOa>nrSObwXB}h0L3qF;W4!vV|zqIFic-a`%5|X(3<4jCjI;g&fQ# z8a(qw1%8Q!JUUpjAEiW9*+kl+EL%9@U1tIBxFPz3-@G>uiM_$tI$M|K*vw(Jm8Pcn zTNfB-uuF>?7yB87W|y~gVk9VACm727m+$So8Gx@d2=^~XdQe5ukO}RaE@Agdz)FTv zSQ!{pw^|VYR=JVtG}ujmKPfD?=140q0yg&kc)7%Xr^|CYz92DKBhW9=$vzH-^M|NM zh2Lg0OT{!yR^g?3^x#hO0<$q-3kZpF(Nt>5aKiI_C4pIT12?aSZpjl(1tH?4B;Y`i z$xv&JA4%rG&oc8MH|$3RPG|%|4)PnuvP<^yan;*7 z3^31qxW$g%=}^#Qs3^X=cyd+QRrG%hp(a~#b6x?|NCAIbD4m@_-x65Ok7aQ--&)&I z`6HX6b8Tjz*FW3I2gzht`GP#+mz<4I$@u&?Vi-Hdz9Xyboc50wN(B}6i1r`t)f*1x zih9vDiH?bCl35*jNiBeK0!h2gl4>X*@_?mRausxheo8xYbYF0yXsYE)K#r0yN9Jn{ zbFyBhk<1%uvfWQo>Rb#qYO>kjexV}(iw;T62}rMyEb~UIC*hgei1;>@4p6Hm|r3C{>HMk1ds;wcNgUz z!Y+Fn;VhK`uB2_RKfiVR9|srJf$&1@_7zGI3Npb=UEG-VxT@HFs>B3=+V=U7v+sM zEU@PSK;JqibNS;<1^Z4gau`@5L8Hwu3nTlne${vn`PAP$nW~e=-miG@)HYxhUy|m2 zjTt_2VqL0bnK2P8f<7_3+|Ns-8GYk&(gpWDwA@4e6>@ZQ&poI7K9ZtsYIZkt8pQL= zxCHrtZF`75{H^W_A~isHD!5Q$QLvI{*>(6!_rrWIWM&z7AD0i^U2l!zl$TzUeYFKZ znxSQuqdT3A5c^j)q%t8G-Ybv2R#Xim;V-}qC1E}njfL%sc#B3xg@-@cXeG?HJyc_9Q(xC6}Mob6v*T+Qh=05yx{e$J0a z#*1!A?v6s|o@Wf&2SX#Wsx~&(wfH=n?A@E7%~antTz!9ae2(c%?`pjG`FO~2B3bag z0H$dpeNgk@wMOhdYn0Y6c`v&VzBPza+5V20_`Qi5D)M^`y<>f|JR;KhdNvI1d+qYL zqWkQt3kU0>zi&QjKH$(Ba*dcrWDcnEi z66eplAqJp2`Td9e9sa-fg|19o0^Wc8K~OON53`>g9Nqrq6P2X)AKoCl``{ZH2CWha zC}8igbXzKV7vW?c7?J#Oq~phe5m+Ka4E~obH#j;Z=lj1Gb6LH*AF`m~W5j=kBOW2R z*PPpm%f`vu*6quE-fNy8A8m5_Gev|ALe)Nnh*=o?)k*5B3@4J(<8roC?OC&Qva_XU z=tlK_FNVk4EW^k%YsE;&P_}(vT(|J`?8v~tnjlI$a1!TO+eCi8(DV6xyMLsS2*#(D z$KH9)a{;z^grQi(*I6QQ&oQIfD}dz<5=%pBng~+ahXgRRb#;8ZJA8eSwSIhToNVaS z$Xc5sp=rfAr5e#_BgMu3np%5!V3POu{QHC)27-<>3Hr*_J1Tac|8<$bo*46f0bm4; zCmIugi7EBOgrQ0#VSu7VD&41`kdB3m@}5t7q-7bot}JL#4@zI!;F$Cp@6;N2Dr8bc z7uo#BtddTB+%^Kq-S2N@p{xSo3gOG;IVCM{*R1Rm18nUcS(R2U%tfIaHKd^wb?c_ zRcke2#3faMcU5$G-zqZkI@xNHilP=-D-{ENeXPD>xK(uq3SFO3)0=N)EGGRB-3l*I zGOLSymZ|QjG-7Hvbwy3Zac3x1qi!H?RZ3zxj2AyGtvBU+ZuzsuliEaHPEI+Am$-s( zMP`tbl1V+(n+>7bHi6|)Rpo@aZ;^UMS!Q|Og;Ie|4f@@$nK4?{3%*=CxFyztg0!<0 z25E5w{x+~aTihc9?HYr62nVPDb_D>EXFpN+%Tk`T8U=H`nr0q$E9UKRH2h>WEh-fK zzC<_RBd1KKf$?LF6TD0;7_ zfDiP#_)MvRDUG4+Zj4`O8EkFS;Q(0#!zWn%P5^T?^vAJLPC_V-7d-BXIf(hr`nY^- zi^03ldZv*?R}phbgBM-O`*4C3j$j_Kd!Nk2+Aa z9~u&aG8-;fOa&&OE4>SJXDhKFruzFq_MMlB(${pk*XcXmQ1@zxSUi% zEojvd&brdv{?%eV4IaRd*3O6H%GapsTb(FCrPiJwUj|rQcF!$!FwXp5&|>3pwZS~a za__xecS?aWr33YOssNJ?3+_jYf))~yt0T;1zjFm$SY+7Oq*_#p9U}{Nk*`?VpjDs= zfp_y~p0c-FbQ@P9HN1ebL`;DZwI6a9;b?86(-Zit&KoV4h~xJe;qpUE+dJzvac9=d z^i+j;T_*0nXH4cdb|VQ#&Q{BZNJtg6#cy$lgWRr&tmo?J`Vy-?OoW&F4_fVRBQ*O} zEF7Xvcj!Hh!hM9j5U;?Fbk#DRt)wyer}PGTl~d^@IJp6!SxCniEKwY1`}c~Kd=&eE zypCdpem&FM`K3JW- zW|UL6HO~9eBc}U&mxCz@mWktksIggc*(!Z&lwEddRGsGxOl~#&tH41_B?<}-o1FDy zvS7FDN3NRC{+dFOYe9lfwQsG{Z7NoxedE-t!|YI7ycrPCNoD6U_x4k#kS5rv{7zMs`T94SGkH)!vXkX$1S z7@;QsnYcrVj!jj7AUj?5)1^n$S*vWutUW5;ZiMY>7_zB@g>Glix!EP0>4tkh)Sw(g z3(Du@mB}falwLi>$GQGv)$Z{P`4+$1m8h)jzc~ifN%7@e!hP#vFuh!42$`+e)>Pgf z%IfIH7Kv;RUYF1K8?_LM#=@lEQ9batdpSAXpSX!&j>t2_U#UenYQTVA(XNOFkMGWT zFMR*~rm0Lk7UcIcc&PBRGVA}RWr(AVh0(vp4}Wf&2d${yKdZ7b!aHiz{Nn0;?(2n# z-LM3kA`!TBmWKg@qn%^42tyI33X^Z_={ku`q#0LwSKu2Yd%C;T>UNNyo}NYm%6XSl z(!$EZYC4&>{vv-RalVN+i$jbcJeG5iPMr)}v&)D5)R(@-J73&GPb-IyqHs1AsBX_W zTo{S*c{^Gdk?o0_>cjJXY(XASXCY5_u)k|rx*AwubkdiM^ONf)NSUyB`Mlm(n)JmeNf5^xT6ng54D6P4FOXQ)E2R%)d}bO*=kX zKDcc#YXSJYYuJgUI;jn)^}cZ;m%Pq~fZZ9Ei{X2gnoz2Xp5`6zo zsRbKdi+QPcD!_t~v~Nw}MYXHe-ZpLp7C(<`m(UMj3MfGS8779XUk5^;!T5sZ=Mn~V zIg)=kA9PIq#(nRds|m>ct2j+g+S1CgQ}X*HCWcQDup7W+a(W=wO_9cJUZ-`nF&LZ; zXRS}S&j5H^o&GZ|x9Z{H!7rw&uppEJk0)k?z=$K(_!R@qY-Ya~Q^x=RrfdGT-C@iu zw{$5vKUqan$|POk5uxa$7B=EBNAeXQP^uKZ#GWs9DcWKbGz^t+0BX+GP_wGBUj={Jg^Q}kuTP0iV4sY6Q$E|XlM2gEp4CZ&43(c zg=OMblpQ(GH3=K10m}`1tC9Tz^X{HEvZ`$ss+IF(td<>Z8Q{@xQfTIZO9FMt?_t6W zSB=6$=cg~YNwS!hn3FMJrMUv`4#BS)C1py?MT^Q5jV4%%41pnu?{WAVsBveP<(dQ! z72Kv_5qoe}mfc9}g_;CX642AvwAZLbE0PzhraDQd4{PF|j-j!JabSE`WuMMHK-=hK zFVB{!|1tY|2e@}s^7k~UO)blls3fTmCe}J(`+&FAz$Fd;wFRg#^<$0!QgWCUGdB}S zfMAZ$I%3lk(Jlow=)&qixyU}{UYlXhm(C5*4c5)lw7@olgnuTwyVXI{Gpe5P?ae0T zQJT+j$8&jHw#=*=?H~j-!Uev=vu+fLA=_b~u(h`Dy zl&^}bxCFG>5h>A3C&2Bf1s28J(ip&L)ZDVpuhBKbt2tug>cl`e6S+SpWQ2YweMKFwpBZhqsfA?Tajy`xHKIvl}w7)XX-g2Qtu{>NrkcD!%b)FUqa?GQ# zM_J_Z1;bAlr!;4^z*Jv}yXV#=%&cQF;oX8aAdRnFRAP!{a=v=;x)ggUAdR3e&FYYQ zt5hdQ?HUNV`N@1^Z8YuWX#L2bBL~2uU#1`%e_Sj_w&w&9`1KbgRRdbsulvAINPm^} zV*#WQvyh;qtO1UL%sgAu1dRz8PTF4H(Kg;2wzaqRbi20e)O_E$Hh^gUbt>%hm-3>> z@@VJxNex!V@y73vMUm3wnSRQb@Jqa?6w(iH7ZccK#xv8L;Tmn3M%ytd&UL&2b;ntB zpO~%ta?FYHUBS`cTve%u@O^^_m8RV%ZBHTIEjYHSmSHaXa0l`9mnd}GGblLi#sp+& zAxd88I@=5w??OM95gRN*-_mj~FEA9^{Taw1)>kU9M+Ov?D#>t%=*opa8LlV}1Kw)|lj>~}Gz#=$SwVPP zCoe~?uQC7r3uK!Cb>Wg$)cXak{De+Xoulv!wZN1Yg>aXQsQN55Cm zc{YUx>a$A;o3$~g8%2JXZKniHEH@NLmiR%zY3wLt&+zIDXPafp0!@N;@F+`oMWy6- z*)!4?gnivscuT7Al;AEYjESh>2Sf6?G(_imooTI^?m)*`NJ_q7$FK+$y%>Me&|1L* zLv2)opbwOv;#aUa9*~XOz{BX1(v9FQ8)Wd}IZ3=y1Oj^!j8acfFS*XGt6@4qYvWBK zgMl|LApFv?k`Tyw_v!|qeL9bqL|yA6qedTM3#6a!?;(9);HqZATUK)>AQwUeTpeMh zqNGru1uoQLP*fub&(VEi*ea!y?CUR^a!IGFf`K9*VQ}bj9j>r|l_}GCM_Oy&0RQ<* zvE+qzddhEQ$NEA?^;5eu+Jz2SE=o-1jVRw8P1C`m*aJ$^3ejG%Prezm`Ps^7;GXc< zZh+0`SY(`%wHkxm55BRpEuNvTjpst2cJmuMwc=Kev_gQC7+*H!t_bt*??`b_zG#tZtW@6H9x!52G*#E<+Oh?J&5tW&vCh2?V$I39X{NDK2^MQdwyRo zU8Kxp`v~6pe2n+FK>S5WR&}92*M7Zh=+Nc$N!B^EPvM277joCuk(|_~qSp;EnYmGL z)#i1(yKlLJFB?EK*Fl*ws!yvCYH8cev&xUJvxLd*8KH+n7XbicXA@A340 zc^}%ExR-F#(P<9cPN4bxdQjEn_E=L0?>XwI@%a#Od$My^=bS+A>8haD{paHg_Al`C z**rHsF1kMsow~o>y}JH-yWb7j=<2&&ua`?6 zH=m`-k6e7eUHG~@9v`C^WV5^Lp3XA5SVz?Hn@XwV3HiR}Ewl3YmSwEYnO{P;7DZ$B zv%SsW6|=q9?y+-jOS9U2M-Uq@xidnn_suMu7G*4Wa&ALqeas^3mIt}D&g_R!G>8V; zLa8^r-14V=D;#%h+b*(>Hz_w9#-EGSpAR5o8WsWs=|+H}W_3nM8~4+k7_zEAknzMy z#0DK6q10vfktwUoRwgt^x)WtC!b?(`mhu*LVpe&yI&R7?=k~&~ENYMxJtp_Yk?|H^ zfwYkYEP|05@5b%+!>E;XCc98h_VV5!W4^y08eL`fg=)f?G)@IU$}$;3OI9Y*C??Wa zPbsqjs$3Zv-Voq#40%M1%Yl?pOUn_$k~pCj<#X+U znvmi>lXVd56R8g3-XRvnO5^j^nNZ4-#H)mbJVeY%C98zZNfoH$G{P1o6W>D@#U7cJ z3d!;ph5tobs;7i_+v;!QqQgWih(?)%0W)&Q^6%b;frAO54#cMQG!t3V)Kr6ucPrB^v)odGg6imJNy1ivEyT#QYpl6Nb^EFqj4-Po1I1HoTyiOd2Y&n>u7l~xj8ERU+(RebYcrk$+sg2tevU;+XiG7w)_(Y>YG48|I%EMU3 zoB(nnx3O`4W?;nT3ChsIhr~2VrU%a<(OANj){x>`vXplauQu8?{coS1Q5+Qv!=Sbn zoPJNsS!Al3Ukk|rnMugT?wXLDc-)CEK-&4UIHb2aFmi4g_NZ7zg}79Rjy3US?fr|& zg<79dY3Co{7sH{I9)GP#;gh^Ik(m>A)^|*Mbg&yuN_mhPLrX?Fw#}oE4!H%oK3F6N zsSv3V!39D}@*-S(Wy4X z2F1n%_)LNAJ>V-gMEEJsdGhswlwWGA{zF1@0gLXdze~Vvz%>l1y@LGS@!f%{^$c@Pub&H-Kg1NzM8dY4NsO#A+s^Jwg8J7YJhT6>U~BFdUfXAD|;ePz1br?_xS zZCn9r{-w1-aT&z5Bi~Gn#%!Ovrt5yeQg!AwIaR73LOC%nCTQ9%TLf8Z$FSi%I=Gq} zuT^^nyV~QriZ~3?(4@gF<+;6$SjO8rplK{QWqL>^A1Gly8Ef%3iCf2WeFZd+xn9F4 z{G)lh2n>I7`MDq5)$9%%Qd_4F2hR857v#XMHUm-|X!}c`S?rn_TC=9amXWDR>?{!w z72{}63IvjgxE*#H4>5IZ9Tw^p5Y}mnd`n}Lt3GGEk!)5_>5UC;Mv`k zWkwr$VGwH~&jPFOmSm;L-6@yK>#T`gXqtS@vqIb^C22P+Qc}sOGz{w8mr@gONrvyE zRzJ;Se7NDOXwO{Qp)I+zno+Au7N(@TbGla>_=D4#T`ZTypkm|OW}wLxR*U&|)@8bI zt^^FM;>VJ&;&{M}S1X4hL=m{5`??-Xa{lN1Yq8PRLnhN zREsce&cFs!Pxr>L!NCMO9MV=Y$z@QT{!!X^u+U56peis<-4AiF9ZoB1jr1H|Bj4w| z$9(dw;9$9R#Bx2qaHt*5^=qIl@aCD)C$sWLc@mQNJ-F<^E|xOkz-@>N@7C-zr$N=> zT$8U`^YBz&v!blK61FrA*$_p}rNud%-TP-Y3l-pA>a%BHqc*7kh;^XmJX*)+IH7n}qYsYv$f2i|;H}otq1y6IQ}y z-?Nx4=*(2bON<+G4z#No0-CjJqaO-&Cl69u+eCB5-nn)%OWO0>MY|5wLDd_QO@5nL zopoBB&!fOc@np3(s?;}2WFre=@*P+q7iV(La8A3?m4LlVYjdh(!U49t&l$=fYjk1< z3|Rs8j)oIRz5PnrJI6dzX)|0$V8((&S+HqAx6I*}SbgHanh zhk+*i@z#>Pd7XOHDO-*LuydDkxWlR+{zht+w!oy*7Pe%eHnGEEpSSE-LUc97#S;M6 zmYZH(e;TumMvHWC!gE?2Y>b)|!-ZkEQvWGwZW&l^W;rfthv7Y_0#%YJ1=e*ebsy~p zrvg>x69%pKgUqKF1}>|X%8#h#>szeS%!zU{x(cxC^y25S%N3{AX>P4`tSPglrb+&q zYA-On^Z7u1IaRD`W*wc8?W#6WVCEA&t*i3txLr1B#g6s??m=uR|jU|?F?MC_(;wXWI z%njQkZQ!Jb#V-SgpYqL~N(-^T#-uZ28$f*$QeU7kxKj-Ona2I|=ov~&*~L$T!%V?M zTTFU1viavQrROd-batN2T2-c2%Xc(QhE=4EmkfU>Yb8JKBSnQVh<(ca-4scc+Ph zsdPo)2xBv9tkR3`@`}E3=?PnNy=9s+gsPCaNqmibp%uodGCxkNi@Y?x=rK1_JqoN+ ze9n^)nXlQhC#P$b0+*7X@MoWg4-_r9@&u5fuw2Flz83Pgo9d?j|kb%cR{HE_G?*gZ$t>%-Z#nWj=q_Bryn>#+FHzxrv z4!UvNRx^vTme^OSxaz!54>Oz=uJ?a=y^vQ*Z0tiQma4vRx8`aLtLkP!+XY=tA){tt zf^w)In$H6IZT4DjHD3iz)u4L-W`A%`5aSE=y@@^eyXYs(9`H>rS z{WrX;=1T+IPr;6mHtefxcy{hQM;@}0Zfs|40PWTEpq+#8nL|KV^aXyc!hXYg0{}V) z`1}V#e13r6DFm+WBnjABWdSWO+56SSqsK!*{bG70P`+z?De(x2F$9EMN8W_+szne5 zphytatL?b~ASgk3&mo7#s-P@Ce-OPhOoJy0h%f@AT^q(7pk)dzPvHg>_6IPbaSAmt zu-*{gG8i=D4|E&NAyQ!gt&-#(aF7(*Yum5W0+?~=By_4u)MY5@uhqF2-2XeZ*;!ot zdOaJ7_P#v*?}QdhZWRC_Ehl+=+8k|t!A&`*h|9AyrGdJxTD&Z$ZPnENDRczY$SX)2tNqRHN^J28c`} zK>q_Y$L{@#YjA=IyW9UlP?waoKe^#oe)#XW-s9UYt5HA;cLaz$z@Z&-2Y^^^=8H_J zpAwvUuH3}qz@7KK06YidOx4^6`z=`3=wy-ZP!wbH=4}iBq*(#5X`6Z}4Ri|bmvefPxa|_}Bl?DB&7tJkw zW+th-XR_%wob?ZFjkjuIx=(4_uL* zEa18VQy83))fV1NG;e7>aCxf?eCpIkpsa$noq`2qN*0^BS7 zzX0f#1pE!`O~7#!_%|@8tdS=a3{wec&hM1p-tQ1-3^X4478s8TU_>$yKT{fzM}_DU z@f(8AwH_$DlH^t35Fpb6m$FHYXcbEPa z{T2EXpa-fnM_~{AL$S9g35rjzq<@zJAZi1?t~UXMNf^9ZhWl}%J=6rTGT!x6)d>}T ztH^pkkA6{`o7o~sK+SB(J^W-4c~B@|ks`a>(@Y6KL0+GqA28Jvejl_)wagrlrf~!) z34^K$Ei7-?JPCvf5@NjSx!rCVgo1!rWgyzA*5GJ8841r_5EN($JhP#<6^D9G6neFE zI-`^+g;R9+XGISzZOC=jQ$X0+Xj@4xsV~U}K5@gHL1ZqT(3^t%In;I`+0t7>iqLZ8 z?;m(0sGa@9>~A1`qY~6D_$%<|ZVCT2E0m8fzOZumt=KE^r(UH(AYVWJ9=KBy(kJ9M z2p>C5ZckKy&MtUb65}W4Hw>RzRpQ>vPv8V>ihz9L-l-RL^Yo#uW=8@NbOBO6DmN%r zYj_uet7g)o=w|=2^|IEi@QwcqvB%c@DcN_Xvi?tkbF?hD z1qQc_0mjOOlw@w|Q0(CPhduyhQw$)uSlV;+=A6qNOC(*&9aE@y-i{^m{m_BJz<%Ne z_)UPo-A}w1ciZg<85c(M*pVEqj0}Gi+2NY+JIO8^Y7DI13^5Axi3+f(G2&Nzhb**< zTDtcDgA*@IMhePb$ay^h2iq8KyB3azZsVSq)`e>#ycXlIefgBk`Jqe?iqaMLp|fj` zD+4@2D)DS*Kdh+D#A)F;FMIyxx{Q5t8DU&qqeq{zG+A}P%3R}~nYv<^nXw}DP!}z< z&^erDyv+O*Piu3~%V#6AusKX?vTaOjdEm=z6H?q3WM@@Z^yUtCK2IH5bqXt*m4XVq zy`Z%LgQL5Xf_XY&Tjg$3chNM{J=1$2r<&?V{NR!5H&!+=)2pa`ko&nn7dOG=u+s7#<&!I7d-N)zH zgoJJX3LM|cAZr40G>fZ_o2jrsGJ8L4CL<5WW?1f;HFp11=deE)U3E{};e!nh$IiKY z2zQ1Koi4X_1w<*M-;H0BdwVp0P8#*Z=KC%WrKTMdOa}XH>%jwkOL=7K7 zT_mWH8bUkq!H53DfuIe7#m$+*3&W_!>1n;e&ASPN<2fTrCbDr5K`A`;V#>$ngNNhw zlV**Uh)grvjw0uiAc*9~8M5QRGU9?l;j;6DDNL`1WFdOC1LjyCj;srhV{VZKiAN?f zDNIuwMMgl-5nYfo>e->j6iOhEXp_LX$%kXY52A~J(aiS~5PksP@o}g{lUtInanm1f zyBWk<5>caxNYa3%2Gq*K#zBcItP7hZAeQk+W*G95NM>x3DpCLiL)=TqN_({##5;O4 zi;>OgCM5nF$)}SPNib_br9kWfCAs8>VuW|<-M~q#hh+(9?)@4@eh^FsGK7jP0!RZg zq~t$lBuY5Bj62m7(YM{oZ4@OtxiUe3FG)~`ij`fJ3Hw7gO2n3#HpI9#$(Uj!0}kE7 zRZK$!b2=FCD`yfl^C;CGVq-5i^clAUgz!O3Y}a!zF@YO>S|H*P08T^-G9IcVCo>#F zMg$8Lk}sO?x1K0Kmg(Zp!i2#Vx--$x}nbQY(Ig%-eGMo!OO|muMs62PC%oXgb=OG0Uq(bcdC|TIDVs)A|qoN!Gdnw!2A%nJ&ZDVWW zDz{2uXC^PsDetSW&^W|MfjIit_SXYsas<)ZK!`DmgVSOzWwy!i&MBQ&IH^~oIk@qY zd-A@!ak5-$IJo_ukKP*;_t9bm#j>o=u}rxE4i$>`YXT2Zl8RY4G}-o@j?ZD++409? z65EuJnK<2`5(KL{O9G6j?F0=;Z|jUN8i?RFG1>eX%6E=)>eLRp9*^s&0+tc%PMSfZ zeT*foVY=SEiBXc^f?(^#MD+onb^^;NtakheJEp!*_#(*~oFN z1la_5asJQ{-6COOgTg;s=r4SSNaR06A(8bH>iUcfKU>8__mt(tbf9HMrLe5OOmeA! z|GR?w-fY*?j*f58LH*G9{?c<_%PN7ttrujAZPPY>)|6rp?~D9F1R^FINTZ>k>4gTo zNc2R5(90o*tsSDupA8rjA{A~G;l0?~^~}tQN0EA%kXqEW$A(W*RC#j5Xz%l#Q=)9t z_6Tx*`Z|skN+DvLFDWh@FX9b6L|IgL3H-0xra2k`h!IT0=mVPL#Hqh)F1UL?Z)0Xd zZlRIdy5UVut%HwOvIQNkYIzYP8xr&L8^F}%2qYnS@O`3Pt_bxBHw0tLXfHS^f!ZqX zqgz)**&}s71FZg)f$P9@)rr8+`3OiE0fVZshgLB<0P4g+bQg0k&^)}1HlWkLuy}?R z9O&Ay*8?!fPw-^8LtOQKBP~3YgJAlmDW-Ia-95@|zofgmAE~AZnTw6Hwnu=gH=D*y zG=$dFaaYuHSJ>?(8X?MeiwM6#`Fq$yEzERcB`K!DNtFVaZV)3Sg#CGv6S?BQnmweO z51GVADpghjY!nlgf|osG(kLiYc}HqjImFlyYF4*jUwE-smYJb0IZ&1vp$6ZN0=v7F zNlulD45f4C_`~rgulI9z*UJX#jKr+%KAvYHVfy7cm1L}^k}}?mQR8>|Omz{o* z>gPVsx}fw~scyonniQawg2}EIoUbUJ*%4kN{Rg;UgxPqgpMm}HbDr`3^+k}pgV;F%)2n`(GFxlrb84-^gu}+P5V{v|+ ze9m%^h^1Hj=u=pIk#Go=-3!gx=Ncxt;XP}Vi^WMO#(o0;-7dK7Sf#iulZs2ZKxu?i z%o7L$5e>cae9W>^vw{w7$14ZDPfb(XFgX2~WK+xw08{DQzz@FH&!q1Vl|suyN>^D< z&(oZ@i(ZB?1AhwkNsd$fsI-lg_~)9ZMvv0<+n1xwhMWyoj^^_gNUau&A|JR|%^ej0 zDKePz>`d3Sgu+Lp!!qCyu;`@g4?O8s7&v02wL{vALs#RLScVpUG#!)N@yS+p#ThC= z*aBmfu2$3OIYEc`#tcbAtM!=Xv{_cU#rm_h zOyB^U6UVh@8e%7r4UH@wOF1_XY_yWuJnV*sRUcd}i;%^=zRGZfW__G&xo(CZpoaB+1Yt_0h^LiVsQ?7Gwp;{^s9len02f zo1DxBZ>FXBNZyxxmoOWA0^vB})^%XaW`DuXt3zh;A>TvQH&cDq5_e$5dV@Ahzkzlf z=ZF#dm-Y}-Em&?TGpFVBQP^W)zyg(XJ3k!E>TVYK>dhV3%b}v6K74v1&Thc*+RIa<~u$v?ClQRmzBQU01Im>Ks*GzPEa^QX)p9 zEH^EdEait*^YDt|AEHt!=-(=`Wco*kViv$ zKT5T7F!hE70@=pvpSQ=$`i}$w`E^eg1+XcW<9L z0=yU}DvQjIt7+k);&*+?XN#=&)1!1w(oUm&*BPIH4ZD0Zjzu#r1d44VAdb~2KnqT? zkWqw!;6z%z2zg%9&)-|x&rLxMl#pk?Ex-F)uGhA#%ZoypJ(r&(?k5gf%Z?Alr&c0> zvUwuZ9>Rt_s4)+P75r)Xf#Jkj<&n%}z6CNyLY)@PT2kWNmkGyPvzD6r^bM^leR4(0 za|TS%ziBx+8MG5~HCwx4B3in~PEdd0dQO!ZeSK(mb)jEZ#@kwsHnC%s3o=0D1BGI* zcm1n2an!0kDz#qJuA!<-4H{32g+QfzAYgQD&rT;BD2y66gI5V^Y)`L<6}^; zCc7r{Hst*_e_s|87>~j1e~}_$cKB_ifUMIiuD2X2o*i1xzzk|ui7|V$RiZ83DYrgN zw)}D1_dN{bOj5zg_#E-vKBj&);W4H@-ce$92hU7Zfl1&S0N;yjwuRYDQ>$3(5K}Gp zF2Ky~J)(D8@;!hAH$ULaP2i7+W2nR3gT@P)oefX$uy4j5GZ|6x#yxdn#w+{amOiuK znSK1gobz8*;yg$PjFJI;EPUDMk^B-vO`}iUk>pD-j=Y6$=eumR7ctNCupfP)K==echGh4w zE7ksK6es_vK0Ez0BJ${p*C_vJK0AFgqy~0B4Fml@F$b=W_OrwDxoL$8-xHE^F+`WM zN%@KQj{x9Jmjm^r)@n_&d4r0=gNDN6ymuh8x3hba++cYdz)YnzkOb>(z4snpr}*mf z+Gb1rj|6l&D_l}}^u22DV<}H*(Z<`Xg|Epx&IZ1wbE&{c%L^!HZC5OUCFz1xlPJB*W09oIp8#a2|?3OkoZFT*8r$f8m<7* zT}C~GHA@pFq`IUsLtL#yD%{CS(s}vhR*dm<(+XVxLv-ewv~vYlPV92BXAa-;F01+{ zpDHOmYM?BXZVa#eOHwYBwpdOAJE&zkYb--71Q$Z!#*R5na>-DP1?5q157Vad&n+U2 z9azdwhowZ=L|OJvX{~ioak^z}U(J;prt^!m(7$FGoo-=3wcVD^EoGz^Dz@?X2=5OH znQGkYlU9TrxRs%*!XI@XXg1h`r!umYPo^kuz0yowMXGI(+q$C?YC417-sNoLTNn|a z54JgOoc+(xK^J5fzq=`|b>Jl*sx_k9m-RS^GT73r))wm~|Hf87lp~w1CwyIu#ptWP zL!vqmUMkA^3_WUZxoNrTY@@Jzne5{-@Y&kGJB7dbA-C-(7zF5n2vDoAcCKC^7+x5; z1`sq03FyE}095+pu=q<2-GbJL&7c!=T~MHD5UEF(s)gS5hXYYc>qh`_oKm=ci|Z8h z<`;NIc7|I=JOj*8ieCjzhmahJ-A~SQS>j7rBp7y^e|o^V z?DpojiB!vKC=S!I8Ww8SXDBUn`LKU^U7WO}urHfElnFzuz5v-qsFDc{It{(R$2?bf zu8A-hE5~ifSXi>p-L0E%A1kB-(y{koJx1dcy{J+lmtSC=IeTn2GKzr*0A_@5MYQ)c zf=uK|BRJmRXWO7EX}!En`&DXwRfaiR*0xi-TiMm4!bTaZ2Ad6`$2X3a=OEIc1*>kQAQ5VEZ)V*R)^|sV2-8;mSyF9`rznoAXfRngdOmdY+#%|b3(4rk|;$^yD1i579YM-b}; zHw3lR%<7j8wQfuzmoC4?*$|PpNFZ7E$m&HSOx5;A@_A;f2~Sq20lt&)&y~GPRlQ4B z4u=8+;ozh|H8$`dWX5WE^{1}LA}c8nRjguwsT7n-NdRrEo#k-` z=*BMXXX+i+J5nY_H-N5ca8wNQP~~7V+X4C*YZkSUBv#`^Bn1JQA5a~(JG zr7kn?wtCS6JP|9c3-ooOX28oVy#b~8Ym)TTHiWn_#1ks&dY9A)=mqYPOos@l3wxm` zW9tYop$%z5U9pd8))VPP7u3@0Jj3F7yyLM^%}6dIB%}wW4`U6}Mi}F4avLk<(ah@c zBxzdXXyp@>2Nl*1|EVxq@;z99iewQH?A*ug;)+-_# zZeko7SICv}W5l1nuj(Abg5Se$8y(vO2Z(1g)o0K{dIuK3HlvGnhbDVJ>$0ueHdouWZF9A4 z+s10!w!PZ6ZQHhOzusq`_g-?7n~aQ_g`rB#KYz_x^$iJbn7Q>SC63YoN+dxhI1DZ_ zutzP_bxCZ_W-(FT!vV)J4#Ir=m3#~MfqXy(x2f}>6GUzxN3wUCV{0oRc3>JhB7Z7TnCLZ5V6*~|N zRK&?0Vub-cV1pWKp&I_UdVVdC(?$Hba=`M8sPNIkP-gMON@m;?FegN-uPlXrxHOnn_{3^26+0 z4Vm_d8@p4CB>9~}dC=2Ml@igEIJs;UmpftB@;R#lvyP@uc_Pd=97`u)LnSee_#ne~ zCco*n0Tz4A*-$8ve_lnY^_5%OK!WPYP1Wm3)XxD)dYUQ z4d+m}BWdOvsPeE_s}*o2IRHlsXgi8~*ec5+J6elKpf`Qr%-Kbfq8g&&!K&JP zw3UVGwHG<>Ip?)lCRt>sxY?UUn3^g6{?RmPAZ;)ov=-={5x_V$v7hg-w$LzaUTb^; zoVMbEr-f!r5~g}I9!0$U@zv0a!l_{Z8;;*BO1aBVJf%$Pc1iN!d!?@L_}};YBp#- z#4^h-yhx|P$}P=r-as^cR$Y4yL_G$gPDM3)iL*}Qe59E1?5jm8f%uaYOLe_U7NP-6 zw6c~K z?U=nVN2A0M{dJ<=^^l%41v@xb^{T0yZkYq)5tWRboi)Thk-$AG#8GiM&#%8u#gW2b zDY78?NW&yo_2;*sVU)f+RlZ3MUZ*nsxFc-T&Bx|Kr^U9IEw^K|Ry?3ovXXv86zCER zrn(*TpCgoqFkZ(G-y6cK;KQJ%i11~y{sZ_lYd&hm%Og#41~t`Y2Nkn=y0w=pMm}Ov z@u|X6$>jI{JD+=d9Vk(uFOqX=Pw zWl?a!OLnd;$xH&3p;-KwW-`Zo4>Q4JxAp5--gzDQ+HwjJ{qd0|dilP}Wa5r_)}GST zG208qn-tt$+yh=iE#wK@1A}8+H2_qb?aj=R zYf0P$gKR`}GT6CsrVV*|dExlzv-w{0^tCgQ<}s(5?K0$C`uyDXt?URE&8E0yhErrY z%4{{v%skm<4fpdwOv$h@gj_0aoMC5IU8Zs-b}^Vyj5o>psIK-o$vV>I z0!o7ia}c5WbO+2-n9N_`ou;H9~Y!yTRZ|ad40@zBAX` z%N}MIbaFcaII>aC-P0Z$kTw-dHx}UnekFgPrkPVX-v?@W%{**28akqi#hY~tVXmPq zkl_t_rAcW%x8&?nvqSm+Uf zUB))YM8m99k6%NjFt_4Or<&$Jj7)Ics99(QwV9$dzXwbWjd|x6we9K;Z(^dtL}&r1 z+_9%()co{g4JfR(=hch4e=yGxQvo=o%9V$2Nj1ba1?dTO;SQ0o0oQ1;)=B#{lX)4w za@BOg*(=k0I#cvyPQ_uTrpilS(xJ!GDv9saV?5a|oAdSdEM<(iCfm*0EgB`G2WNeM}I|Y?=o=+vb|BH5x^xpaay&c9`%La^)7};t!Au zHy~I3d*y64xKcOES?&$+KMi%n<_*Q3PouMWe>eUmlvis;!C6T&b~h&Mp-0WEAWYlD z9A@a^p!u;zPOx$&OcnrpRe)ub9_K@~PN0@5kw4s*ey3JHEhWyNoZ5aes=4!(=4#Y= zuD}CUl~@*#%~fW10q&neBJQBw#Q5s3Vb0{9u0NDJgCntpQ?{<@U^rk}FyX{sz~&d2ok zdcyao`S&yF%2RXmhs~#H3s)@N?yz%QJGT;SBY5*4aEtp^Uv)%xwN?W4+0_+Xt&u#J zLY|f}p+aeohx1U_&yNh0pRd!&Hfw85zgqtgPiRTB1^m@b&5X@UBkSFG2+5)M_E4FA zf-k8cV7{!~@?RDZaYP@}_luXfl4BIRnCIxR1N z8`kWNvD!7(Ll#|rrv;#3HzYP_Bfqux0d>0M?+AwcuN`**nbv3OY$0y)()a|AL=biP zUq(M9JL~M6kAuS`{MkF(4Iu`Ce?AVuaHr&NIkPVY(pueSNV4X_GDQ^rJmbOD2FdT+z zwmZ5MIOK;$TfPuBmFt493fxX9&D+AuytA)I9rOrRlHd7lS&39Z$fvCgKHYXosch|&Q+9QnsS2R@7@aRDHPg7wy~C)#!_w9#t&LzIc$?{0wp>^yBB1EZ zWKPO1&Vu7SzK4m9VqSP=zIG=jdqws(?9Q{Vnr3V1s?AvhSuPRYhWSKMsl18KIt?A@ zro%VQmX%G)DKhX9W}=X^YmJ1r$f9%G|Mge9cq@q|#&OVkub7o)igi)c%6*`FdVkU@ zO&pJBDhoWTcY1##gK6t8ZRHYzQy%wy+(V{QnLy3vl7CCMMy^;ic*_0Q=||OYfyJB+ zbOE1@J~`c5KBfHH9{CWe@}&?5OIv1Hs(v;LuDc8-++t#9G##tyr@SVO9?sS6d@TH21 zL z>5)>jf5vnLH#G|ITdqJYr`JNu>28+bCWSuodknoRWcl{IwYvcy@^MTwEAAlN`y_ z=~i@QA(X^jwG>%>5eb|iLj3KdR6jXZvJ!ik zt>3!*q$;So>HtVl@1QasT$69`_lFD`>ce})jCD%3RGd}!ihyike4(4$%Syn z37cuhDcD$o9d-9)pZM+T>$re^4Z3fLa#or-yQpzEnDp9dlfeV|-+nb4*D@pafGkE(Aml<>(i%3QGrl$65lkgG{3)2xtLj?12 zZ?|6`4c{BAbfuawde)nT^M#rU=7(zo`46z3eu&K??nO!QFPQsA1w%T3^Xf-u|! zbJ?TsdGs%zzkUcsi%yyY6A^-oN^u zf6t!`53nF%7Xh{nyet;}4i`>}6DQRPs(okR&1%NmUVRu@ov9{$_qdrSRiIp|GW?}( zeDX3_M|x5coXbR{_77L)KKmx69$-XsiY2-b+x-b9B=Y9^uvdy)_6N#Ogc&>?~@jFq)g`-P1I zg;FAf)(WQ5%T0Cy%hXMFIFc1fCwlVMYd^Kh8yyNnhosZ}EQ~e|Fxb;eG!{=ZF6lRv ziZwbcSaO=A_HXw8=C!@HVR1E`eZXKhD=tFkvg@ecvo_GLa**A5 zlD8(&q^qlJ;Vc`oXuOkVyirr{NyK#k-)f8C*uf^@N4u}tjOyMUkvoe=f8Znwa$0vr zoLe*=J72R&ob3@W{(}|z{DX>|EBSK5xaE{)9iNI7p`QXVXWaMOC?Xh=%qXHO4YC+q zBvv^71Q$dykdHR)`g%M#Va2*_AOZIm&hZ?W{Y6L=cU%TEj*H>JDNQe_aQIiGOOCLK zg?OV6QCcaul!$gq(>suo=c`8(mWW6fNvN~z-WOoM06LkKAv`9lXxAN`B_3B;X zN@kl;CvN;x_d)kf=*)M3OPTl^uJ8?`21(ABy%M1L4Q1OFbdFeoVCA+X1OtY?IFA!@FGTr)__MLvTYWaQ^6G z4bZeaW?Mis-jnPF{Phfj-|FxABDwI~Oi=qM3!|yT{*CCEG>oKmx9AU{Ht5VF>fSS9R^dKq4L#sO=G3Uii0|G7Xx)DcIU$#+VJ_WAf2OO%EB?6^e>R$ zeO$PYZ0-{pa?e!qcGIMbm^6H>xq@ei7r42f1ojHEJ`QOtNO{v9a?j&K7$&xd&BOVM*YG88o^lpS!u*F^ z&j$ijJg+p;VKvG(%(fI_iReyK+$9uoW)4(y^G*3qb#D?GE2Arilp|Zc|IC~2L zlBQJZ2ehD2NRAXr$RY8cHOg!3{a%&L_Lnn2z6|4Qo>^GNTI&zhUVcuD7H|0oa}eQU zQsHAR4u=jS?Q?wK@;f_0Y|YP-FEg5VBD3yMl;D8;KAb7o|LdiFWXI#!k}VJIw%xKx zdP8t_0?uOpoD5T|R_y^DsM~E3@+x>xT)j4!;V?We=lEGx*)eY6`01E7;V~|uGmKN& zFM-?ki;l|80A1E|)>*-=pBil^8%@$vln~>X!3cVnH zLAN&9^|yj9*qw0JoENa$o`CDzsDV}Jg4WXA)#^a|LD3-5TcS;nb+B}YJ{bJ8SAk2u z>+coXC`m$Vn*4d6I%_TpbFIT<4Qfl<5yJ?7w8ahL?2m`8(3xjFcv%B-!K6+@j|;gg zfG=#;yI(zF#LX?+D|)!k-MU1HUm-R7#^3|Bzb(k-)(c1Ez zZXAu;*Q;pQX+GkZkL&0-9rBY5K(;6j+~iB{1%*P+T-;`1H~N4pSTs0_&qDzUwcdhG z#qs@`_d!S#T+aAYC+4L$1T;9$MmF66B>f>ut{-}=u*x_i0fK$cPJtz~L)|rx{aDJ; z+ajm?%xNWOc(zewXTv`ZC15c{%;)a~>@6zxjz;wkf?HAXl81O%+TDt#j4Hvq6*L_T zK^2r?wbu5rKgLT@MZ!zCZKs+j4HCmgc=H)m->L+KQIfi;iGK{$6;Lj=C?izG?>|rQ zM4yB-#!Z}nOLLV)$MG#T><762E=n2>5#GdO{(NC^mvkCyofW;?j1=}p>m(_wJP_FZ zxHd6#u(-&q-ZtZJmESL|=F0`$>Czu7x6(CCy~_spwENUsqQsk1xygkb4@qjsq2N0)sO@e|I-|cx2=lUmW;Wu`>70iqFKltbu}V zFUC>P-tIoi)Kr8h2a_p$_Oa0fxA4+GA+({TX*=7rpq2i7uXopD!SjJD2QLH6l~%UM z+YvAXF?Wc5)Nzys2Dix5E1wtiOSaB2ZfDS}`MDHn0_~KzxyG0(iu5$=ks&GRWVoZ} zQs&iDnLa+vFEYuOOMJMU7hM!Wz0X_Gayo=Rpf=lC$b97Rxma_h3ww@v*~?dDThuIAqe|xSU_LD6HVwa!LpL-Rg zF1KbtMnu7;U+J$_N(QXwhzcGMnIK^Fg^?pavVc8IE+HLZq`8ayoKu7b_Mbs-ffaIr z6%TG-N(z6(X*MDH?EKhWkUD$Xd|aH7yq@GKSiPUzmA~%20MTDpf)qR!$a9lRrC zKOFrL@%T~0-7EO{zPfq?;q^d&OCdXYP0R83-t&N50gt-wzJ3AmcTtBQf`&iQ?EaDM zhSLl2eic%R{}|Qd>>b+-7>@h$65hZA?gd2LSGllW!TM7V=mFg5f_M6)-D?dc!z5Q@ z3Y;(cp$n8Gs*?)eg`4;U@E~>fiI6Gf&04l1*|uXKv#?XZbOaQozc>QXHx59>fX>F4 zf3&HWya=HH$>RK(4F+GfD*yhl4S#Y$2Ss!KSUJPU4XhD-e4b~FmQKATl)&@J>4~1r z7yK&$>|I5TKFB8z$E>HjCX3{$DwUGDz5!)*#P9ro<&i*KUlTOHvAf7p_TXyp2wPmO_At52u!YE zvB|9la<)NMZtV2g@2E8qf8i@Mu>C{a0mhvH205cryByD9YoHZdZ2{Y99o=Mnwb?>x zFSNrx=odcUW8gkM-+SP$$6ltAo104b-H)4`JkMJp z10NBK?jP~9+3Ib#<6+lt(;qmX;AN8S#S}W;?)SUbdTgB#F3WAE>onJ`(Za1lw47nn z>GAz<1Rd|Yv(4x2R?Bal!TRGEzSj#8n4C`ck1MfCPH(S&(1;HN=`P4;POE8lng4FNS_qjHH{TS>{9HzP3 zv`s0X@{22t;e(yNH$B`>`N2PWWcR|<@%~t?SFPUm`o6jv{=p)G$??S9>h}1`SMKXh zOz|Z5UX6kxj)a@D0IEHPoCCE0^jzc^Sl*t%f{oA`OJEqQ`LRJ zG)X@sbFD>dt=*uqI(dzGPI$enzfF2p?4D!`N{9DQ5 zdV%JmP2i`_*861ra?Vz#*`UwI?eL@eIWFG!K^3>HIiJVZs4Sk>Ya1^IZl?#D&gLSW ziM_kvp<9T;BAv!J%Hbx5%oYyM+2FZH$FrJ` z6BoYEgAEpSJyw(dvxyr|XE!&TH*}vz*e*`4O^@oa^Cg4b z@o61Cn>;>qoQq9{3LA^(pT)hr{aqZx_fg#aIqYK~anhCZnWFnKzx}x%PQ~!|AnVaY))|+UlHY`l#;qT88!>u-*0bFnHg7*tvcrbjW^;Ud3IaC58Clw8NZPA)Y{Ywtt?K5`c+bh-hgpcZaE63#rN`uvMw)dLq z=j~%w+NKJxqx$Foclaf$-Q16_C-?F7O0~Rzx28kQI#?yEDXelDEKE8PppUP)A8oE8?s@+7O#cqQsCDjlE;ZJgGyojlTF=J>9*1 z%`jw*4~GrfwFhEv_B|5i&iZYf`YS3fUJ+IDNQHK=FH`5E?8S;ysbF@7DYunv-(*hF z|FSoVK7L+36GGQ*`7#5`_cRe^j+e8O{h!xs)nT@`Qdz2t z^yaVkj>nv>N{^FYtcJ%PRyq1EKysFI+D?N9vPGyhLs$<}Dy6quY_uw!i%;&Je$ya^vMQ!=o zIedW!24M+_dH_qPBwCg(5Waa*j)YB4XTF2T(%4lb%5o)@{6IU7YEgwyV^XC+6Nu{Q z%RA?ISLtz!vh@qtaTuqHHiQ${ahL>u#p7@UqW#6}+r^_J6yTGzdhp^1V?lZ)%^3dO z2j)*935m`T0$Og!s>t|DgQzY({g1F+tO7GDn5b7w#o>V?%hZez`p)k{{Wv8FVN&W6 zGnm29sGw63B*?BgV52UPl8jJ}L&aHP#se*wj2#A|Y!Z`eY~clvPzy|ZnkSh*`GZil z#mW9$wMJgxCDSAIc5diM;94|}b3Oj{LJ_WM;zR=UZ*cbA=Ei-0#y}*H%>w!@qAev- zr3$I5?1Hw}$P*W{6LR4EB)fM;7!0iOl(OsRXsjAqZ1Dt%g-osyerT9vVG zMvlm@*rU3>M~c!|OYBYUuld{wumQ>`DL^Hk`nHWS-xPoF0j%?)0eE501&IMA6$%zk z`Ns|bqf}5@%UTwUYQwHY>a6@F_<3%8zU3+Wy}>YoWrztF_1Z;$RiN?v0Tjl`2kTuE z>dsO7J2Sg51bFBb*hN?l3nK+lF3OSn4*Utkt%Iv!CJO~ogu_i6FgJhT+^`C)ZGs%j zpM8gJh2kX-z|HPme6#?p8`W0k%c}d;iShh3MYag|fzrT$c)23V352ggrn| z$_l^_q0w`?SX5fOmhXa`=>ME8*(Out72(21#VG_u7P4>-{`G;e9l_!--Fy0}^={TG zFqmNh7EMLC>d7E8`Nk7?Bm;72?Xc+#af8EsG)#2O+}M^E`o6XGF5y+t+GO~&A447R zzBM#q%C{xcK5vxU?LsLao7=@o0g%aJ9dOeLHTozQn0)TRg^vG&^s;OHkzCqL3(A}^ zEZ}@&LwT!9=*Le0YFRVlja_3g<0+-JWc&@~mV}5fv0D$c<2c!ts@?u+@!_-!>kA1g z-yh4S?t*XNH@!clR&oQs(k(yEathSa)~XQHL)*J0UZOk4oxL#BDK+2I{{((s~-v(?u@sHiZ9Iao#G~@A^_h2F7jInP19iZQZ(4$ zY@69F6F@>+xk`9;IXR#K0x6t7(oo`d7;Z?mLuspkv=S$=2i9dq2D^Wi2cU_xSnu&& z6^Lg5RtV%-l&}Mtt@eP}KtKu(?(TjJRC8mlxYKrkk=T>kXbCL0h+`uq4Pg_KOWB-= za@qSfPpgbC4-;tKWnipNk>}6N9KV+v5`I+Ae-0>t@fJADCBpZP6@4|x+jpCFu}vh60}l7)#^=uFdz-qM)#z!A z8-&;WYs5cgXb*uz(SxlX?>*+~)KUCJ^GPCRZmh)oKe1r>=khZ5#f62_b^|~(I@kpa z8CNX%8P8p?x`zk!pO21|t9m~eKw@)prQaUIsYa;e&draW-*qex1ek=a6P7Ka{yu2! zBgZI~;zI&c)vzE@_GaZd9ZAl^00jPCyR1+4CGrz-q>ZYnjZe2aAC5E?m6@&18`Wi` zX`$S(;q~)os;2Q`xI#5!eWBvdoFDk*Avy5dPfg4hYB4^i;gCkY4*A$eU?-R zXnlQMD}zxdT05sEUD&tTel=ISzUKKi+kfe*VoG5QIFE&!nO&*ySxp9gmlz)D%3sRN z&vQw%zRHLqPxsozcKP1;5_o~SgtcF|wj^%;&VT)UY3kANfG>>ybh$m<9Y)mjuY zN?f_9p*+m&#@p`S+H|IkC_<4N>8F!^eKvc@zF}BsDlKQl6#f%x{#%LgCp|e=xGyh&5N|pIR>qJ zXE|m9%2aR6+kaUqJT5JhDM!w)WQyloD>cQvkM%|AuQsahV5zD!CVXod*bIgY55)@m zyz|pz>#3uNIFNTTWATYbVj{g2oMS_sU~~;nnC*Z&IE}fs>jkWw>Mb-MiVSEsb;1$| z=G>9q1GDs6$x%I_a7eh;J^_LFm#w8E)122YUp;X->jX=OE&*${qDixC`&R9g2G3nl z`@6+(%+fy~pun5vA=4Ysoj3Nj)l6?E%>tb}l0t9>o~>eBrj@5zXEZwcn-Lw~=L&wS zGX@#%=@5HlDOiv>WfcKlC4mjmWprB45-~B2OX+V0mRR9~Yei&(!bRYIG;8;R@^w3_ zbE8;1{?+ArOS}Xbbn8oCi&v(WRi7f^b_W=vvjqHszFQ(=&kYXNmNiO-u@8lh+YE;u z-e;c$H^udLP7;J9?Um!29eMGhake0SJ^t#38rza@ozhPGt-VHeE zjo&hk{o}OxOinVLC~MZ#v6FDBu)Mi+MZ?2yEk|;P$l>9qIu5PovKpO9i{c0wi;e8h zPyO<(v<2N`ll~f7QXC}y{Gn%T^0>ybWiuzRr4D2OC&w`u-m6E^d1 zh@sj0+Ga_*mKYpvv}4H_CmRCgHBiL5YRCDDVjTYGn64#ld}-Lc1Tjcr5SYZ}&R{Hj zM5E`@U+G)iC*lASc`zoxvk0R1K2%*=zg$0630B9_t4t6bLD*D1Yd$1-sY3SHcTC48 z3}mx2Q~f_kw&zwyUlsu8oT?eXw>OEa<`B(7+?qqa1WP2RM+sf1qh^?kPWEqueS~e}7y6Q^%!p%rxsvps881-LE zFA?ga`S3@xdl)PUf;^Y2!Q)}M7vLArOY+q-Xe#UHj7*iht zoa=v_2%Mx2QOIhAh4SGs3YU1C%A%29v{<$j7p+?!iHit&lcw+^2|+{^t4zd1GJQ~8 zFp%m75f^(B!-FIW1;JI`z3CNjSjzzdK{_H>?)MKzCRHE+skxb2pJ>h-!78#SRDu60 zzR>#W>`OdfbFSA*qZs*S*B0YXHG&@Q*^!S%&MNy3C5M(#aZ`Jq;r`+~i*qw+kth&0 zkd}J~rt5y98iAf73iEjiK+Dba<*te+VdNMQP36U(f)_!&? z2#?rSTYKGYbs*%5W3{8QT_$r)hRr%&0|E5+hTPx2logquZReu*N%N<%D?sd?9vDdc zR(6Z>Zt&Xx7{ z@ArVt0FT)V(lS*>_eBTPMTH920*SGc+4G2N+36{=qI7C$Bc0LyllFVEqp#81{bIW5 z9MOn;khdOVFlO6;zs+-xMdartiOn`NV+J_ZbCU;m2@}U69IIuyw7etS77^LYB%v+P z*j0<0n?JmnZpe{5Brpr#*K)OTJFWKWz08qw6xA%kCUSAW=)h< zVZ8I*+=CgMlWl#H>bfT8%DSjnda|Dqjt_<^$Z4;}FAB@?%779~s(7aPWjd&j_4%U$ zW%E%MTr^1`U!<1Frz&C*%sIO0k||lA8*QL8wpXc=DPe@ntb7hLn^Sp5;A@8i=+P%I zkQzEDslujpHe=lG>IaMxX!1G$G=oP6E|yKFglANdz6GYkWN1ILA-#B}m`=HNZu>rW z9rfEk?4XSxp+W(L-3a6QVUdCsxwL>txTQOaT+pj|MwUdV9C;C_QpSWWr3~nA(&kBq zEz~BMa&@i>JP>oXYU9Yc(t^X5!%SO(IlEn(f+*Gu^F}rFr9hVTA;nJJL;YJ70cB7ma2O%T{gvH>EbtD^{~5F8LTHa8;BC#iMqbvUpVC(eR#02YRE!M`!U} z#@%uD;4Iu+^$6pdr+ADUaY|uH-fe^kh%pyVsYH3D^X6YhU>Yhqv&)c`i9 zD$TXr4opmQ+wnV%g;5EH3JNLYb%gq{+M)<_FkmVITHj${tpL)uxj&}OpODQ%Tq`6G zpC@c$=_Qx2qMp=yn%d$*TSzqOf`+d!3AQXJ2qWFsqsgjd>job-aoc4PZulFj5)pCJpffT`Ad<`lF>UNkgA7ahvMOi zf+u`(;e@3OqBQ6zP&U@z3fu7;2RvIJX{!w{%;{y7O%A__+ zCmlXK*|hq2&T-wE6h*obu`9Se=@v`K31`OZCg~g&RtZ}fVOXdyz(MOGUuR@(lJjW} zedglg>I9O0Fi(mfwS)|VOocv>=3)m6cm{S2UB2XzhJ6htw4|)b(y-49FMTH!Nav=A zhnTr85o|tO1Chv>=chm!dyh|0MF1Eh4rK3E zpANUe=jWz%u#3_V8A}TEnFBEpE<{vTVnOihmEG=)s3+7ti&W(=bAALTdA27pVH}ro zB-ie$hc0C#+Y{{aqnl~$o>IKL-tjLKmoxCH1@Z~`UKUX{Ws_GFfS7bz_x8En6JCUA z^-$)A(`9}vDlI5SIcR4SDRA_sRS1P8|KcX^xz{m&TK7UGX-N@um57cT79gKxx z_Xk$hZK7VDc+YIbc$rabcDtFB-u+p|C?g47K7&0_v-)}Ac*+WI5Ds7hKfC4*b*Bf6 zdeHr{*lrkX!uSZ^575=RhwKEKRT+wv853Zm9xx|>aibY<>Sv_p(67{ABKkeRSh1)C z$+&C2@On+&G>}+&zsSOSeA8gn*x=G=_zi&X@bzqftL72-*LHP6AV1 zlW0Ge(h)2xgCs3r@R!!?6iIwNq=F~IA)^5YG>~-C0YV#r!~g+mmkel9ylD_Ey>Ov` z;KMX>0{wf0@|U2mY(V&p*dbs0h4$cW1&5wv)y~Ti_z^65;4yOWHQaIPNCd1-l}DIC zY712f<`IM|i+}h4Gh-`#=hp}%`-+cv!(RtbxHG_Q+RzyQm(7(`c>!))Ho|&*+mUM?Op-kO zg|Dx}Evu8SAPFB5lq&M-F^x`fae%$jBPKjsDN@hkV7@fi~a(w z_~laJ2_2gXR* zkhcSj5L3?E_P56u6x@yi!8aP23yM_{o!`{wpGJWEC1DWG#DEZLcP@H%cSR`aQ2!ld zb}+?Un$KAgU}&!tc{{yWz6<&JmykV42v1&CrHViDXeXA z#CYCxWs?SXtQ&qt8V-CluzVFUs`y(<&olbK)SFMzH;(e~j2#`2SvWi&Py zUjJ$&r3ZL^vUmM0IUXZ@b}4d=l=Ee{3pKogXXdZ0wOC5l`)h%jwNR=9xeJ9^i4?FW zQgMeS1Q4=#2V4##P~w*{>j^*jU!0{s~Tcxe$$%xR?7iD>#(81^y$wP08ZDOWbgSEQ}sg!3Z8z(ml%Ld2$jbb<0PIv5fzPvaEERR4Sz<@&=tNxN(iUI+jyyz1h%|YW^prmcQ znBY8J&peoRmfCt6;-_OA8zj4B4+Hx0!hoeI3JkxZ^EWh%1UBzpZRaQ^pA|jGwfN*T zI29Ik@-S|6%TBCwY+9_&;ogT}aV=;9jF_0Uq%1pAq?jv@E7;&b0uzHHa~M_UZgo8m zp33flR0ucOsZ#+QVaruZtj^-c2m|aGlxET$XjIyqJOmjd$nxy#kc4K!3mK-Ry{cBkT3jFh=VI+ujAMo6J8xtAu7l)ER8WKPkVcDqIFsM+HYF}(0x=5qx*@32Fu%v?4gXF@%Jw77`3+R}A*|8*Kna!H<^-{bmS%>O z%K5ZH2$ghqzzLcx41Hk-%lW)Az~q75lm5d}=mSN^yMqZ9bcG=tVn``&sbTUea{>t# zhK}?hF5|MaTVV58n||b@XaW%4COCD1e!Ax91J_n$^&uK-;s0SjBCJhtLS|AfMySYw zL;AH$SoH)(CWKpo1k9v9Fh90i?%06xz7&3Bb+N-xg5-S6`w-6Pa{ghe0uWy7OfIAa ztbuRi(&&PphmQZSIIdPuc<681Bl0z;j4pR#RUx%IV}m2QbBLyimnb}KiaZe z6C`2szV0^u9d*4qN-{-LdW+YdAek8}7w}rZ)jALY3kJ+JcGufga7MEUKx7b5sBVQ&L?;c`>bPGhGiF?s1SxvMUMI#{?T^q#%E1etPU1z1)eX0X?lEyoX-0p+FkGJ7JA;CLYd)j5!UWw| zo=K)r79AtFpu?VKw8@BjJ+DKJHWdj1|EqLpj6P6$bq)W>xs z*}(#%n5X|iEFM&K7yZg;D;lIxr(Vy4P4g;o-J*NOlWWwp#HCa0D7H^D!t?f||3L_m zM|U{9vZKZeS1Jh6mmR5hkCWS{(1IVxgTYWf;)NL8WrNcVCwL-ww^Bj; z%)g>=*8(G?cAy&3?F%^vGZD!6ZK^Ha{Z-0@|KNoA$v$UYwjcjHrS;aO&`K~Y)u+W$n2!u zE}<9UNi>kMk{p&vG(+JMeCKj-B^aQ#pa37CjfB7BCs?|omh}e(BMHYn4?G{DtTC#t&Qw5Bi5$3RwS|uu$(|UxEOA46AO_ z9{fN`j>*=a{CQ7mH|!9*L=oJu#5Whe_s;PHVcp7NWH{A4G4-c}5Pn`Q>p% z2)-4PU(33P-iqFe2bu{UU`}@p1xsgwuj;516(G7g2)-2)APQ}&&#KaiM#BoC7G&TR zKf-i?(uz~aR$vcwUOU1-^dBjL3uV|wM86y;YqUlbziy9055$4RbYoQ312_*N!E4h#fkfw7n_eQ9+Jux^0VDJ@Y=jVGH-}Zs}F`$d_R@;VfO-MjS z`%@_>2!WFiWyX_$ScYE;T*|=&N{01d8iN_JHL6n!xKMuFX_(!sNWDTq)&&UDo9Hn5 z_5X*lZwl@#==KdJn%JHs|Jb%|+Y{S%Cbn(cwr$(C&6D$V>N~e?-TSm(cGZ69?!DIP zpYqFR7VxgVf&ZVpq3s>lU?f3Vs}%7_lRY5f_1u41j$isPC@@H!V)z7nn&*^ke^i-f{lwVhJJ)qH-gQx zE=G_X@i{JrCwPC;-;j20jG)8`5j1yn@b8_>PI!YSy&LI`T69OoV@_Z-&$Ooo4|*6y zy>$8kcUJIhDof6wmCupBI{G!5bzDqvMq(D|{KcV;1n0t$p#)oQ;kpv%+kWK)U zcyPgzm(MPE!HC-8yvr&0KNJ^sm5tB-4q4gU`-1JfY@Km7Ka9{%JgrZj?Oz~4ix<6w zg?n_~!1ST+Bt?BXSsgMAwZ^hLbf{P~JS=qz8Hfl)0zb#fboV-LWus+vzR$vdNn@+U z8BjyO)K|hy?HO?!Nxf&S8lKBG)Z7#@*@ecVzT$3JiX;uSuq1zN?hy1y;xjwOMc;No7_6M5NULEXoW|vnHBT0 z!y-6RW^I;mJHcM5AD4W7oM#-BU|7gHTtw4|9J80bi@84^ThY!XeLvq=c_e1+uh?)F z_&ATbm3MV~j|rl8@BJP8;?W1#@(|Fxsi@v;fp|V5244~^M+*~!9^-h^5ibJg%d2RO zG5|+#7}Ts5 z=mG4V`2Kpd1^ndxztH#7Ri8houkgngu64IlmYuM$LGZq)2{nivH-!Qaa zEpWi(Xh3~Q6{+fn*^T1BLo}CaiPI9rHh&eFKV98nv?O9W1 zE&nsUyzB0S1!Zk1MkIU@-TbJFYh=rx1{I2HV)@}af)U(>D&@et=O++ z@qYL?h&auBJZdO?f9vmH1_KCb^))c; zJ*8FLy538Uz6y-{vw4bJHO#(x&y!C{g+&mZS$s>fEO}$1$D3xE+#eHlEiMMOj!)=YVIMF7^s2 zXhO)pRpVqdoMSeY>$LxY&-ktg_f_xm>h_O{_(?5WX*&6Jvp@SZG{W)V>9Oi;>`=u} zHcoc_b0^=dI=pV<70E?alSZZe1+kYIg+Eq!ks)MZL*}HFh)N}qi`zw%51{{>pL z6fU4uH2>>GZJOG?@ouQeciXRkj$|(77S2&#-8ccM^rWaX7ThR8aQo_U#@uAwPNwqj!}&37B_XW1#rbez zi>ubdv{~X5!|Of;Sn+BI5tDhzAk3aECvR?t<(F<5gre9bLbjCGhvhxNGUE&no~l=t zM*hlgTNn*fSz&aF+po{2y`~RqQLXeXsZ58e>BQ>1)yRKo_VHbPO4vERPXSX{Qdny_ z+)i8Ci(1OenO}FZVrRpV>>ZtzmxH(Qq@=R>q{Zl*$XYH92nbZ#ixiXs%IR0lm6KTL zT#C$&`F^Ey?>TV~{1+Sts%sq_g;yf=MNRgFNfpk0I`L^+wBKnm>u($c`Stt9+qxfL zi>J5a;rq$c{1eOD{~Droc!GVtAKo7JW(RLi$4>_H>+zh${`~WRm&_n@S6{fBVVYDS zjLGzwL4#K|Ro7#pzx0&#m{1WXnX&MhSQP1NmoNvTZw!UeGV?~R93X`XOB&N-{aZ8> zCMO!TP%4h&_r5r?q{N-KkT0PRl(x%~4vwD8U5%U1+1@5c+ejggPR9~FqE(KXb+ukHM7AMq7vA>ybEQ3b43xo9q+eytTfGb|awx*I&|v+`jB* z3v`+EgY+Pm4gs|>ZqB+{fs+$!t%gQL<#}zX$dA+%cEWSG{f!ionu2B3-iJU9^L9ar-08N-vlHEWp5>{|Q*6smvr?@r zb5D-G;6lKu%S>ohni5+Px%yo}S^l+VSZp9SOE8hjQ=6G@nLRg-m(vPSRN^xJ+ z1Z@?_1rRvzYt?Q^kaUA3mSmUb#4bq1NzQj!7pi(E!(2}(IRXr+CWeJYWgr_eJtxqE zymtiTmZ1$d=+`4L)LQ@pcP^4i2T+cFCOT^DxfQnBl+`uf6|R=Qr8GFmqn)4BEgl$Q zj}5m(Y0ne2%j0bc+6CRUTajGXXq|f}AJrs5T|Ff=S*#;rJ}H%^nNj9Ts{>UCFplb0 zk{%MJwX`?Fe2si$Hq=G+&a@5K4=WQ!Q~Z1DIfyXNSZpPfDjD-!I8RkQ$4ug)HJ;If zj}V@a7P|;93aHX5CM+T!R#-5%r&PB2VS`ve@cNiKw798TN`)DN7tfo)y>d%Thy8fc z%s6eIj5%F_C#)F?sy3sso`?@QQ-Itz&ZOd`<;odgj$GfZ879&xh*ckMOt@DORMR2H zTb<>TKHka0_LfLU@)ZPu5Rs=B!AZNUtyan?Zn&8uQa4IKFeZJD_Ockr`}ky@cK2Q> zrq2F3bBAfRaaOfgMcv@$~o*iZU zp;JQoN|nLPocYCUU6}W>w0##l?WS4Zw`#bd`OaKV>WcSjMAzi&NVxK?E*+QFe)P&o z+F#F)aI;t}ApQ->_xi0*)4#FV z_IUAfuy?xp`ovZod$wy{D}~OQFQ`3k&|*uFG^8a3$7+t3dpRd(ZXyo1X*exds`U~X;=7$6V3+vWmUgM3K0tW(uLInb%{J(<#HuhF}j{gV#uO?}; z!Gh3ru3D4cZ$4kSgJlZ;^X(QE4gBan=NW%JF|E+LP*ZW`f($B{=VljUG4TWy8JrwG zFruY6#{S(2R$6Mb@Q_}`>uYBL_4tIgRXYn|1Jlp!e$u>1UT#oq45a4zQKwFugU!y( zn)<6mTs+**xB1)ITUyI@lP4V*kcyplW=4UU`RL_tpOy}Zj1-9@0nA!Gn<{UIcbjiE zP9GnqDA76rH5y7b2VmBagQ}%SqsWu3i7m%!XWj5G(NezE4;~8aPJ=Zf=H};#YpYho zuxp_oR9v0()L$;pIu7%m=rn4%QOO1OeK2_3rFePyI9XM9x4QgErYx#3p-gO30Sn{H z?P+PO%z&r7h5ov+bEc9ak4)N4xsaSwk9C|=55n!#IeV`$$%19ox49u9(YD>t=^KGy z47)+#N#Y)G0KqNZbC>ivLSbgfg`o#V0b9U6-Fr-WaT{8zN+r4&$WIp2JD*mf#D^v< zPau($L_r)4g`8|Yc}3BwZ6&5``%ze9mA`WA0UTlusZvyVE)nLJt3!nAIn@DqG_AK; z86P;@O(o8xxW;fZt(GfolNR-DC}8J5(Ok0;LbTkDH8A|gJk+X%0ks)Ga;Vx_Gh}uR zMl1xY71d)ig^MibP8j*Azn4j~CK0m?VbBQ%7z%bZqF1evQ@%LcJ7 zo$CbJ0Tq{nytAo!gfMgq?9L`fK5Ki9LL3ewawm65eH+&4QxD83zOQWv7rOjMq%bJw zg~*+n;x>>;%)K80HpKuk{otQ!<;mj1icnj6wvC6YjCD7Z!7~EffR`hunhmY6GS1pe zw*7i}GB{k1!|}axNqPLnwHqsft}Rv?`BCBlNkH+}!V;mcfIB`wSB<8#6VcQZg-IlI zl=jr{AuM|5^ovyd1iMA)4JjQN6v=(6HulzY;4Ykt;XIK}Omso}M0Qi~2F}a>_6|@T z(A>+H+8N91jKc+?Oe7QPHmTFS)R?FNMg!9^z=pzZM5WsL7b_~b38=GcG%j4m5PZ~K zvK&Enqs~K)j_?$df}+xbzoSk`7s(kGlcJ|U&jl%rh`4HkGJzfed_xDAlAXo_;ggu4 z1DhuDFZM0*wqgEST11%nksMmav${aL?-*QKE*vA7W2+_F%amVv)m02SZW%-{8?5Ns zz@dHtG_HgkK0Xge?N0(kxI7r}?d=Zb_1f`ow++-G{F~e3(Y*?0m23BH>MmHIq)E3n z2(U6=BPIo#G#|scULR8N|d&~J;fIJBY{cSObJ*9mYb8$B2Bq8JPL)s|G z=Ltzy-D&u#2>5|K4SWBH0hNpmJ$9GBMxdI~>gaXrJ7uI{gi&Mf1{Af(@ za^Pkxf>UlzGM>8UA25h0k3+N;lDt|tL{D;yf&90{62>zq8vyRKE$2bpAT};Ww5|gj zvDkB&^LR7offRBDJEnO*Wb7jx8m<#YRonj42;*!Ul8x%56`tFt#-wKhIadD`9lT=b zG2z0ouWP?^zsz+VWmRSqN$XGtb=HAr{{$O|eieju4ce)W0?Y!$BF03VqT&7|TaGH{ zgz|pxn|5q5&!e=FesBiJs#g+wEQ1AEj`fa~;tVXX_p$E*x_htj`hQPaicAyV(S`Qf z@+hrxVs6lOVwWyby1{WS5BpeK!7CiX06zPxxU_G5M$hkDcv&$?Lf5llm6XWH5($XL z8n9vUYoY;6x&edjSN>~{Vs=lh_SeVIDvt=f8VK&u%X&db8PHFp)Nd5E!=^^RyV`Dk zl+!X>JgA8+qN%1M5@NZ+Q>%gjlW$mp8n5QgyLIt2{ae}jf=cL*zk2~s`tyqve3F!F(OF?@qoPVt<+qiad9kCZG2N- zU-ZeCV;ne>lja&-2*uDG2Kgjds=_3hU#Ws?zS9|Xy*`og*_3+F$`ZUyldi|qI68fU zhagdK#n34qaK-QF!MwiZ%tXB#y&h1RULZewe_@`jRraoo%xhXS(R%ieUp|*WUy&s7 zpz-4d`v`(D)(_klQI_=;1#sS4j`Q9bMVM=mPaNWB)SdQj=B`~G5 z*61#*dm=O29il$~$dGORSspny#YWduw$ofL`sV=Hsr4RDt_YknjX~3 zwtQ4KYJ04zWkpW;!SPaR<=%xBD@> z58sE>nt^`4CM2v?0NWvgsu>PsrUAk^5D(KK(6L#`*d?8+sj!#~`mqTNgG@u1i*BnZ z-?pV6%AXO$E`OreSL*7Oa>LPD|obVJ9#P@8#>pgN{JZrY)R1W zSdSKD<>%w}QiBowStCA!v>FoJh~iNMOeP~Gk!3)kf|dPJfkf5Hd%`ZTgl{co(A6fI z3|N#hA$J6}!06g6Fx{9Ma~A3ykNn=;B`lqT+VbRx?-`({jV&EMA7zR$c+KSZwDgtZH*Oib_Ywq zi+P}@OVns=rPHXR2pejuI<&tD01ZK8_ShMpe)ueZ;)D7@yA3XCRITecc%s-ShayTG zA4qk6@=>t0bsPmXoa7^RCE5gx|GD8|tk>)&_5>5R?UQGgPhi@F)o^-1bYmqeu3tBy z8F|-l(1dmGKKKt$<=xbv7M}CkOW}~Jbp~pe!m#h}yTCj@_5yc-%fq^v6e>0}k`3Du z)uARxNYa4?6JgrJ7FY-i%O%A{kYZ;e7O)mtiY{=; z3q8{w&A%%){YLemPW4s zi+g;iVHLgJg7|f%+k53zlW|{~j#EXZWf`uO)&Oxp!yhLIO@&rxsc4~ZB#&CUiNXK2 z{yq_tK(_iGcTh!p0tg|F#eqA1OpTS1ks$%`dHk{`rL>q+=t_>;FWI) zE%j(qJ9pnM8L!k1G1*n%V(0$cWR;c4_9RvD&}**KwKVEVhbAm^eY zOiGM}zWrS1ZNE+CSFw^GIf6rSTGc6|Kp<0U9NoyDI6r+VtW-8qd#RX+d=+0u zZ>wZ+uv?WdsEgF{?;Sl@EyvU4^&*`bfLQ8%c-*pfdc2fe``ZTjeC5oOa#uCFY@b+N zE#e?L{h61{P~8^lcyERA^#c*B>m;dz(@Yf;k@Dy?t(g>LoN5Wd>p@Ws(e)|V30iOz zZ%=IAx-sHd>B2lhx}~VFevnA+K#6SZy@Y6i z^PD9&R$n_Ned9me6l&~F@aRqlg;PjPT;7JhASs2=3e5-@rQAp;oFQTsJSHA(4eT@L zJ|FNiaa@{6^-daGINl@GcKXhi?Oc?m-2f&VViT@Ms)1T6@>Zaobuy~~g+V&D4Ef;F zSRAKlN_D6ZH%s{yWkCzZU=FxC+|gRk=(Nyq`%BMmtXelpow5*EW2HSNgRtXCnlwIu z%Rr0TmuBaUa4|G7D09j7lCo+q&Lozjn%IRobcgr*cEsUMjBLQ%mJn$TjOy6R%*0`L zKTdNQo34*bU$(xwQ2Nj{dUlKBfCP09mHbu&v!<-vo>rxjf_j9XG6=oG$!I}@ zB?Y%&hFna&HQ#_!Rl52f2`+2G{qZ7^ik0i~<8}|w62>dfTdBx`$Qe;VKbS=kT_`hl z#WAwBEi&f}&ynhp7@e=o(BS^{h(#Jp%PvAgu!kx;+`kcq9S9@RA8q7||Oa3O=J6C#`to z=2}J>{Ag-wV=Y(0I+DO&{rMJN6Lg!-4y~-&RHhu9(qaIu<$a~>)D#8$iWxTpzlA4r z?*<{OlZPY%mWZgA$e`7$tkhBuQBtRs$QrdLIhnV(g&j|`c?na{$P&)(AjvN35plP$ z4dm6op(8`^T*Z>fw3P@&MbbE=^@ixH2*Dx^hldvJ?$f;%XD7iCNG_?u<+5{rog=Ex zlMvtr`?rWRt7s3)UbStE6}wfPY9Rh$^k1UCAZg!7Q)+JSkvRQj6A5*@G;d2{w;4}c zWO2Q0^Vc+;ce91Y8TKj>W7=ghycJoCI3I}U=ZnvT1zfa@x8uW0EVNgt!g~W(jpMb4 z!|h3I74^jh8tVk*^)HLj*T-I-Qw5`g~xUGh-a&60r<7AKZ+Au08wy}P)HZD%LC9HCn3k6b9FFQHLniBh=?k(ait6d3S z1I+};J1^?x1Q_i_0NuZb*7lwmf1;EdqDhZ3Am(Fz3AOW*<%uO zVm}0bMCyI2tYh@0+G96Ozz zydXPaqB6I#SgsL=kNp;5&C2|en|i&Ts0etbaIaX_=ar&ZVa=x+1!X7bELHo=W)Thn z8SAM_J(q7&RITyrg$8Be5dJ+xIZs)_q%Z6`6hawB`|qn zbE*W0VviRgn{Hk9&T(z4T=+(kmx!5@#GwVu+U3_YXmW4A%OyqC*k>oaa?*2Bhgm!k zb=S5eWyAJ)W9H1*ps-v{#K!_L>{J^hB}Ie2`VbexB$3f`Ncm8sVC8)p0a^$bjRW$fEr!spo^J_oVNo*>)9u-UX%fPU!(u9er8e0#{$djp{Kr=UNB z@|EV54ZnZ32!)oH$tMVaBs8K{Z}He*g^AJq1T@p?^}dUl7Zjd&Lf-;g^wV?i_Rb-0 zx^6jq0qepW@-wuvY7+VUjz55viMXoarfpt;v#X{WEx{J%?q)pmd62)SoqOVsFPMK$ zYm4fEwolJ3D4jS)LZ$_#Zdkp^?>5O7J3+G=)<$uKwo>OoMxbTNR? z*uqtNlx`K=p}PVJO05?>xDluG{~D6pM=%xwh!ZG68A!m$rAsYqyAMNwX1VnLQ)F4o?qE`Bo3N;8T+`8$7es?v`DX#~!boK9@=9|?-M-e>= z$RNj1$GwKS%@asvh4h*`}Cptg61Dk4z?PA*v>^3mp+^csU2f36aKZ))Tb;rYz=Ff zHBBLeX`z%7$u|jrVln-0$&rAN#xT8P5le>?Ks{IWyd>g1zKw`iNs2^R*AML(1QPDgBT1tz-)jeNb2p6+(@ zwDWeiliS#e#fi#0_qZ2YF6ANfXfJCi_qq2Um>ss0a2U_i@ODG|IC41C4F+~tx5MDG z*>HG^$Ou7P#2Jma+JUK#WV{MC7OTck4Y7Ojzz0bgJoF&st#rPYc?NzMqNcZT&%rdP zF(^Xk*oV^H+}3mpQKk-6T0Vi{q)U}OEBjEuMdf5E1(xg-A3WxUldn5@ob0@WO&hJQ z?hDhcslEl{j+8Z*31F0C>paBKT}Xsv(i?PiTS*>4(ORY-J|emH;1?A^*O?)Jrr#oa zzX<({SB^oS9VJSjW!)EkOvW3bsby=;dWu6yJB2Pwqi@G8mHqr&vSINf!08&+$!`VI z3i>l|cJuK?{1F>65PS0kbh8iw#@{%|0PycQ)#1It9sovJIU-BGzZzsEs=KHug>FLV zKJPaE^nI4q6?LRc+DNT=O{~DNg}Nr$AGwLK{hJ|g4PH6~Sk}huqb6fXT|g_TdRXkL zy6Amx(>%j64A9=Xcux`%E6_p4phH?MV(h+JJVs>f20e-1viGK6xMr8SpCs8G?^hVg zo^paYLFHiI;pU2Zc+cK@5Y~A^^Oc1p)Xz?JgGZ)y@hCGC@)ohd#l!2E#LX^Qa$?|w z%$q})xRyLyv9#tLVpefQ9pDT8&K{%>H}-3NcraCR(c#fAH7PGgNVnJ~%o0|{^wA%j zS%Whd=->8)P4nLlD1!`y1X}w0O9mUq0_OCKDFvgKgZCyqN&keL=JR~MV#XkLuFERHumf*|v#&>@K<>21bu z8C?yUQ}C6qz+oYWtXh1a4z(geTb#AWHiS5j#fQ!?R=A=gOghLMqfqL05&|3Xz@Y1p z=~kU4+%Jb#fM?jyO9~`+mo^YW1&5DEufwd5D4Y$rX|zxx@;f z$I>JYXxw=eNUqc;!ueO*0uLT+HuLVkzev@FOs-fTKVwaG$z0dg_MYV>)c{z32!2#& z^4WvK;i2~=(2InxZD^y7YoS;BV*<=WUY&Ak&+1FF(Nqu*wnctKBYp+$%_e3yXZZH{ z{VsijJ<4y$TdRmg-B^TC(Wq3D@`Yp`X<2Qu^HBlo?e!1Ue;hW)ctv0cjbX)w1feB7 z<^M)aI`jRbB67cZ@pEKY7_O~YAswvJo^kt#)o`rorvnM%QMYLH?}tjpJdO6ehg)a}^{cqC@;|_Zd z{#knusQsSnAikGtzgz3VZNF%7Hjl7MC?zuCjmfidh}NhB zh6GvLdV@8?czRn-5b=nspetOQ*ye*YD|YE^;v^`R;#68UsnDu3_gW2i_UhKsK7p;I z?eRxJ*DbX<&9%WHu}OX6xO~Og?F0Ouvsm!N(Kmn>2naw6{QsWC{^!E0(rewGkah0p zlM8G=8#-!JaMe1Ro3XtXo#TPOsh~)>b(0Yp`72ymxUPhwRE}7_v(~2e*`x8gIl2bu z&i7ZCmH$OIp@tMu%nK43%5O2CP+l3C;I7iRF0uGJ&#a1jj_Wv{X_E2dP>J@u%SF|+ zSBu1k^1O*f@psR=U|t!TEotkmO=%r%tu5)PFM2l*cZb_;(oH$puX-Ejcy*rKhi`Ur z^TlIv=byK=I^S;2oatZj;=f;mL%&$Lxj8d+58FG^znVw0i>zj|KHgH6)#uG(oD!Ei zImo3OIMm_FN*oG{e89;+-;2%aq}EQeyXg*+NfA;^$A&bmv#;N(of)N`2eT0$-}WXy zj@dQ}#+EMs%2%T70FYy$6M-%fj#Oh;n+qpByumQj@e?8PsA~1g^vaAWjLLv0JY>d< zxgV7^mde>Om$Vg>#h)!UAKH|en3Y~9Eh_HZiOVuTwdRxhb4o}5>S@k4$1>{+=j^H* z#tt56&hQh_XPD)6WyVSTMwQUe#x14xouxz}@Or-Uy4sra^wtv*{uhTM7bBZsU_&oN zUPq+xN>$6Tj#mls>v4L!TX64iS=VRy%~;YhC=~#>-4=-dCzl_glrPEZ_PueWk_zo9 z&v2V(_>gBvEO<{DpV+=5tTwFDLn8m|21R?4X5NbwZ~>w;)Tlcm&4Xh1x7GZugYu%? zau5iPtj~b}LOyBI0Y|7P$GZa35FW)yw=9PVV^VFgZU%FU_|VJp+6;`UBz}-*A;<%A zd`Fd*I{!Fn5kf;;JXaHYJ%{4Lad)`{(5C$f1#Quy18+3f>A9{N3+Ywmu&^zsxo&e^ zRZT)mk`OMuaZ;hPaGo47_5k?^DFi=ucyYXyyt(_Sp6)2|tr3&nUcNp`E8Lyxs{Non zSLtxE0W(r!Awc8eXtN^>%d1MV_^Kc8czImn{54!FP|DECp*+VsR5ItC_2>TekFW-- z`z!1TUfl2qoCR-FES|p&Gb{Kfn<2zQ>Cm%v>!j1T>%=r~u_aBi9aQ=uOCi3K zK$L=FW}TWp300WCDY6tniKv>88Vi|S-Dy12;OQ@+jF(d#ftB~G5YNCht5m$XKmk#; z1&f)C!eXYS@zU}GH@+T+6>Sz2CuDWq?xaEPh+IAxpwOaHn0X~rnH{R8E2x19~nj*^%N~Fskkb$b`~&#P=niH z&;=VZBbPMFYIUka%-Fo|m-40}oyY5@%l5}6eCvtKE}O>GuQeym_UY_e;P;OXnfBwR zX7?z7a%~l|w(u(%L$$Hl*5lxq?VWm?c$kJ1w$i7xW#r;EU*cwlr@yiho0cRBf?IPN z`Zod1`(=KmRzmLwY^M{#dJdvPhoEQGnoe{}e(}I%kyvgsfqZ~70kW;tF8jhiWDe>e zr>v6xcTP(18!@D_8n|-jll1YGRSGOW+c6tr#6p|jvxKnQ;70kbp>1aFn|#syGHPkF z>?I~b&sxLj9vKH#SL0?S2%&6+SpXC2A8>~9@7i6!JnB2A_P$MEcjGIu6O6@n!l(F@ z;?&gCG?KE=6OUy40+3nlC?@z9lQxZF1i$4Z%tPx)fo;U4~X#7r!BN14`SWa(S78;7uGGsxs~P$;6RxxgNU3I!yM z5jZmmEr+tk?x(`0iA6vfS%i>(bOvWf5A-icr!Q+uC_~2TW^EwzyLr0B(FW&D#K?>b z<%W`OTiwy9)>o6Op_%#$kfn>7=>8E^KdRP6LN1BMIWO_ZOG){DIl4F=FAu+Mc4Y+} zh$#-|U|0~ZQeB7U#-i3I1<@&#m0M8h`jRRc;?XTRPwf+{GCNus`>|Y%wyq81U9FcKg>#E7b8OoRx^i zfi2Sc%!ITzya~D7b3>O14vh(NMPfPZqhzHLXMQIoZ*3U2byTMVQ(N&-;BBx75FEfs z9c+#;lFE*QN{%V8L=|sjQufDUaXrbLb(7^^r8(coZE&bOsO6`rw2@P@r3WXt#$~1y zJ3=R=>Ue-WA5!kA{h$@n zvR=}An=!#Y3f59AW1a-Opd?d4#^;AIusIB!D1$B((WG4eT)~`aoTInKX14~84k$jv z_GUpF#JNXoq7MPt@aJ8?D;&#`y#eeX2RHuhypTnI(B1IOmG1b{cH%NvVR{9!e~eOZ zOi@XkQ&oSv(X48X`&32K3TBex5)3Xpww(sz%qlG7Wv~WG3q=CjrAucuy#(Dy`ymT< znHZsGUPUB6^G`$$m_!Q#Ig%};W(}rK7h7aM4K$dnq$H4axt7l!2+jH6-f?;NfDz9L z%YzB!oxnKXlSF5YrGQ+RKS+OtTSghnUH|@DmC*Qvg0M4M&g#hQl`VJ`QjtOtiqYK{(~Jk7zYVjZyJ$)9*XZEO5%ygt=XkZ66mk%{dTc?)Q;$qg0odDW7lL<-p$- zTkQ9HT$vFkG|S`AUG{fRAO5uY?IHQiK4Z#RZV~2Z(ZsXdOPb zmE4cO^7O^HeZ8TIfv_AJZ2P0yoQkXJX zl0I7AuM}I)=lSueAI79wug#IOU=5n3R!I=Lq_rgCqYzT%KoM`4+INlK^Q?Lf(S)F< z1P<0~;wu>QsWl3BQ}hrSW1w8G;|t0U8@|d})PsAA#os!z_RSb}AX&1@mQJX+5hRNw zNt4=_DXe~gH}bkzhIS*i@}9-JNmdS}M(aNh20D2O!H%1wYIrymtQ+diW{E96y_2A1 zQ{9p#e%dNod?7F$Wp3lU=qPTydwTt&GmmZ)UWT9ip{;wBRb1ARC-KoDw7-Ft*@CD%JF@BqICq!1GRas!wRttw@yZr2=e~Bvn z&MEo0yr?`*%_DB5*X!%*Vl#0R$dP5W(lP`^dry&zxBYikp12254yXekY}%zGh-cI# zqy5qMO*ZLo4(Ym&;t|9ab$Soq>h?qd>5$i+?I#GTXF<%SE#t;9cniRWGH6x2sAE6E z_ zBhm!4-W#YaLShJgDs4)EVHr*J`~zdsRrsd0POc)eGj{6;E~+{H`?uv}M1?w5iWUd0 z*3aUGlBP*+!4Bd`*}hz-kP}I+^9!fT3dy+wk9?*g3IfByBS$r(>2OVmW|#|y|JDx- zW+KFm&USxPC`}O#k&wdO$J_I`g*bzDKEBXgq^2?Wwb=&LmD%qe4eomj2-$U z9K8ge2^06gk&A74kkYXi7>-K?1=5H*Ar$ z2y+2#%XoKOGwVlDy6{10gs-#Uye$Rh67*Cfzu#wrOGB+je({%*7cekZ0Nt>zo@5g= zW59yPS6r?w4opR}dRf_<)zIe_|ZpzxGjz4OC^`h7j zHxHp!>;<5^V}sZ>5mx>nf4f3I;vytCeK?O5n$nkGNwq_Lsb|oX=N@BKe1G!37>oLL zFp>-~+(Ni>Nu}UU|i1U3o)MG)ok z%qOG0e2sgLEPU8cGaY{!YV*! zzK*1RgLSbPdnUN$=UX;ZVcSExPmde{P8FD=w`-D6DckdV$E1&1$fYS~_s|#@atbfa z(^$kcx9Ui8qtnK8SLR{B^F2xOFpVs=8nQ)J8P$`S1KP`$kmM zfWU3PfGHnAZw-7YudHGjV71n=1tq z^c8HPH|EDsM3~Xh?9VIgN;%Zgj#=I->F*coO7);XG$ZVHddGS77y%}t;!18EI;T=B zk14qRg>j;mdSVOC>(^-GPW0Bc>-3e;EKNKic6Gd@U93QKxF;|B48{FgvHPxZLQz-D zVhAIlkrDu5eO6>eP=NWV^317(_EPZE*D99na@E86PN1$N(55`@N?~tx5Z};WC=kIS zx2ul#BwzZd>~86vG#t(fTv)SB+XYyoXKuH2%OJPiHk%rdqiB6v^T+9;C@Zwa#VJU& zN*)c6a`9i5Rx1N=#p2fn!x(qmHTrU3LI5LOSZJ5szL^jF!siUOQ5gH=vd37>yh(v_ zUk^&BRv zt5X4A+8DTusDooj;+P!6)@`Sw-lYkyN0^Z6xGK;2!9V%;!=WP1`T_i?xM`IHhM-c_ zrBC-e9sr>LfwR`@un+pX&zq+$Ha(?LF!8`>*OYvTk3}U~YD(nGd9e&lA7Rc>ht@|hlF}G!`*Rgj=M9$>=jO}9l*%gj@_#SdL3>0Q zCye=<8hAaQBmm8!h0LLW6j2Lgs9;6uoDNmN>B<_=`!W&eNR6k`SytUJEPyJ4W#Un_ zKs|=71lh!CY#NKH5Besnerz%lnJS#3nK);-lt0+e>W)dUkCnZgJ;Cs`7n+`W-$r20 zV&nXln)ijbz7WDx!!J$2^;TjPn$ZK=QXt3%hk8Gwnh1BxkU`#06>j5qttHfZSz1AJP|WmK4&D3TZ8~A3h4XypukN7C zZ_2ILZvAU%O3!AMGW@>pkcvJ*plWn4q*p6{_GnZ-Fsi{BZvH1>U#L?I2Jv?iBnP8; z4Xr#Ty0`!;{{V3=2#w-cK{1WMS^y;Eg5zL#I^_nyD1VKp^EuqIr7KbOc!@O@?;=q; zoCC-x5ka`>xvP=rL~gQ#0BM1!F-6Q&Outfsr2-pCLg(tkj;jc5#R->FtDu^01fMN# zUU^biTJWv<{9GT^OhD%}0S(lf8HC}1_E*rnu_8~;)OpIj~obQeQyfUV;wX4AR6&W@2bNmvcB5VVRu(4wb0y((HO zSS_^x4H_yE6yfgq%nQ?Emwn?a|0Gkp#+&8Pqn4H(o~af z^D^QXR>8qL9By`v#x~TLWu$A$pk2Bi7o8=d(^#RLpULaK{;&K5@!yr)s12|BIdbY9 zxgTRR49YFrT7mlD$XiL)hc^ctw<}k$P~ZqL|6rzE*j}s@Nxm8znPUj)vcP35>a)nA zWpT<$4-&FSkIxa>iF7raWgfDBcJy}8TUe1s7C6@_L_AxA1llVc4x1?AAPpgE^_A9{ zugcVluU@djY=cz~JG7jpjkujQX5uw_m6C@+Y0>P@&e{Tv@vK{%*1taFN7IEbzAhX6 zB3DH~W~lwm{Xl8X)tYr$=H8AR|H)!Lv+QQFMssb8}ZpD@d*fvrCSy z&#$q2Fc2eEWn&z!bh6mk=11@o*t^3g=`gO^Ng=nnEd5P4o^Bq8dhw(@E4N^I#;L4Z z$0BM5^Xe-D5;tye3i*R_^~YZ0@e`Qh@=bX$Uqr>$KI;MMqIa<_GSJ*j=pT&W#rsh; z0lX}CwxC||HOci=_zCqz7*!`3MB?xR6YgBD#$4F~sppBUd$DjTX>4|HqqsRUU*7{t zQr^$`-(Um^-#yEvPG8Ycbe6$~ED@ToCx6{d=-M1EGz0@c{HZ~E0|&=JP-9*CB@_tj z8Bvj*17SHPM#g1p_zR)Zu}eye?_k65hsH5fH9OMJLB!b)mfi?wLPCXRy`+wXCQX85 zep1}-8j{)bm-Qz@p1uQ4Z(+DYHi5Hxe=u|hs@U%AGzGH=hu&ng2H8eCA29uPYakDL zRtA2nEl{}-1-TLbWI80o-;dE@uGo+390EbfKp_61@FbAyz3>NuVQ_488T(#A*e63; z-_sT!qGy1_7V|0gPk1y0-|0dG7?Yo#(9#XZ!yDpRy1J5e>_*+6^9duG1PgsuJ2vzv z705&oa}8v9;tR+t-R+65uWRzE#$CV->k3zwRk_!8bXHw0g`n8k8rM*jqP{^bprDNS zRb3B;t2yF{&Gu2x9K@$wG;lbIYY4?sLw2^ln4VDlXQk*#K2t)~ghb>2A`Gw(h;W*`8o2DuTyVt-5r3!Ra(a)d(9tGYJE=&Bv?jNlCn`inC!N16dhgR`E(z(Me*JKt;(aoD)N@Cu4qMorA{@Xy$^y@trSR4G> z#YpkWKePMAWqGPxc3)4s*7Qq3bTSVXo+m;ODO-W`#F?UY;=-<^ioY_2Z4HG> z4wMIG>(w<8^(8ETHzF3m&ET+0SUBjBwma>kWgrs%5u7DjNGKu3jiuYl1w30dzg`P}WHI5TSzn#A833!w~i5OU*X02v5~5f_jaeYDSn7M&?p6!ATHgh82q@2HjROHE$Ytt zIg+*qYF~Y_Hnr_e;PK))LnJp1(}M7C>>*mkwWq}2$vP>|aLICr*EOpTq_(7;8S3cU?WxT3z*oAw5ZBdt89t4NAC!sp zL&U**)xDSQ$xapM49%UNcSlIEmQ|6Y@u#7!rMaiJyzR>~e81NC zsEf*yV?lHBa&^v-B6I><$Vh7{Q2!ZS)`dPMg~jU;`r_9Fw(Qj34SIz*WkZ;1yDtvB zO(t%~jIZB|uU6bXUT!!a7IVq6irYv}{&7wQiOyB7TfpVN*rGaK^7{px2HN0?<_#zG z+b^n%H%=+EM>|jstD!)eVyUAaDZ2lNzuqG#ODa zY}d6?94G?tIQwX!9?k1p-Tudy59^|N49q{U<~6}G=MZ``s*y)Egt|Kz@WCC(?e0f4 zhE0=iEeHXvNnA7~P>QdNfhdnivu>yS%g&Bc8~Y?AJW+MQ#sH6 z0he#LV%gTwRDN%{_6N28j4MKZSiE_SMOv>!fjHp3MwUH#fshMNzyySDO&#en-W*8% z4m5gq^Bt;WS*#O>y!_3@VQ{5w9FSS?CLAX_B}-74{Z;ItO_A;F>VgXZ_i!0%R%TOC zmU7=loicl2;=IQjYsHWnFg$~UHv*{u^`K3SM$bAU_FT{Zi!whc8``JtH-oVo6p1lv zAui)kWMoyf`KbKCZ$r_e<1Hk%)xadwgf~cb$;<)TB?g0se{7FFS>)Yg-c9BSUPrZ6 zt$^O|dSUDNW&A-!Zo=QfK7}6^9}vj~yF8K48dr`47vI$#zqjTt1?Y)phV2v?$|5;v z^XJw`Se*jiS`FPk;QOF&{V~?fo?rSO(aYX_;=W*x zwp!mOqu1WB95NWD4z`K?NDdkdJkwL1d~hK>MIUxE7rxKCIxlC^7KZuQdk()mxAaL- z+n`oor%y@>t3Ii-q|0V{_CJ)lu?l)q?)#C?h#xK9RTEh}X?OzB32kM(uM`;ls$B8z zHDZ2w;@A$mxsQCagsIvH0iGoY2d|O6zxVffU?PWT&WIc|%?A-g1d=eZ!@loTfQiW% zb%@2hAHZ1g<3Nyu1Prf2{c%vSce~u1q>wcbI&au;1u+Cc+u%6;NvZmOl@f0# zNn3Q}4jo5h)%m+}t`eo1XqS8=?{!w(Vj359C4~I7JQ?Ake$K8LhijJ#_X5k9{fnEw zANjAp{r%rlU+w>@J2G4m#1w`#+ES(c{$z<|#&abGz)j*XQ4!1?vVSqLqQ$T^_X@$xk)RJeJc2ryXT0p&>@d1n#bI&nppP7uTV@((70U->jPS^vz(x<#!p-tn0`D_*i;BhN44e$uO}_t$`4KDx6@WjNx6NQrV?bZ1Q#Y4H|d zv+K*-iIHT~SygnirR9w58i;fhiU+_&W7=Uf>n5^+fvv8vZpA=`)kA#F8eNsjqQ+5|*pcv@^G(E;OS?e$&z{kX_!4TQC`ctL>yVSu=bS-UwpA6-p z4tuOfHj&UG@=Q{w#z1-uQjsBe+}G#k+<6~;UrtrjdD zb-DTU2h60jmLdB_35Dj7S7cX3t3aXo0u^eNc+*>4-n8+4BY5}jJo+rN*UnH9;F<={ zH5-zjeR$zICv)(Ni+76!obZp-fjpjA(aA!(|I~9uYG-~SlQbF1)v*@}`|7!l9~ zbs;L`%kZ^I?sGF}j>Uq#XC#Fvz^oi|TG>h8Qe`%hz!Nm2Rrf(Ao-FZCtkv<&&CeX^ zJsp;iW%&$?j*(`APGtjQdk*p?;^$a%7}J_;_JPU>iTYnhVyd`b$io_mumItn{Pw~ubm52kgA`qUjhNzLB4=-Bi)ZJ&zQ|x!053-URYQ}+S z#cR(MdO+b=zivoGsG=fAa{iRS$e|kQUR00@cIF~Sz#Vn{pOqs#v3H;L2f4F7RVtfD zGV~1`R|F5?MDKlB{H6Kpq&EYQUZ;p0)jJn8LKc;l;b~<@LeqN5o5%6a%``)oQ1!B< z=Q!3i$W2C>Q`1l8>d>S*IXu~k@mvSX+Mi5rRFrj8CXrhJE1MQ;2Pj)HmUNF(3;`+5 zM>}XV5`uc(iXhTC_8bpOc184X*QNy^qznKtjnCQVDskfiYNbhVTHrd5enF}nw_RN4 z{BjV>61qn#Xjh74Q2eh=YaXwD)pq`2e9XovRn)~H_ukm_IL@uvLM8zW+uyKnWDc=V z_+wobW>nWzRczI%0;7&e_lbRjA`7RY-2)!m9mpNyB#DD@3h+2Q9ENiO0j-C%vEyS% zjKG?ly(D1bS1+kfvK+e{9Xk!QfYd^XqW-10kK6()K3iJO{Qv5%OVWwSVZxCbPBUju znhCQLTw<4+h!jGXZRGf=(kVfUEe@TK@&EqM|Ng&jDzwE_E63$}*zQ?4v|OQ0eIM(R zewnBu1%-?dssto!BZ903@&sn=;i<|bMaZ6Jgq9+}@T}Bz)6~bmjVw%)&sw~VO;d{r zXdRYPrVXo{H!t=`PAs^()08Mt|t zU?H%%Y_JG7BRK50N$gFd4qT&bw3q}BS>w+gBOW@{a=2nQZBX{@{ur!+?Qhn=Jnzyx z_Et`>5?YW9>LKL*Mpb+mVw)Gke)#z+Ec|XL_mx_+_Y^yJzT)oIxTeVp%t5M$zrfFT z@Ka*2{ElBdNMVTYi15Al+N_*TDqZKX8&%QKEXaUfL>kI{j6+x3*TeiYa+o2<+C~as z27A*oO8-`CHFI@Zz>^zfdY(?t0oknJGM((Y#% zeXP9ejxe~#@Ix^^@@E-;95z^a_JaFSKKg%|5y)vGJ0{{^MS?J+qU@J4}_S`pmlUI2c zeYqH4dw^n4BSh0P2!J`-VXA{Ku&T8TqN!9gvk*%KH>zu_KF`dFzeq&4<;RHu~gblRq7Pc@7F8(i5?*FkEp=Mp+l|(iPYe3wPRvX_0H>@s=8{leoeAC3LWXUbWb{vh0F- z^e&aS(Ob;+Y6*onWi%QI^rj%!_jh_0os?Y^BcI>j=%yp3!TCNW%& zX61gx-7%K`D@0HlY9SouJscq*Sw@aD`;4!k`~ZgEK3|dX2k#y2&58U3d3$+Scy>-Y zU^qqfAV?u*yLlJ%4gTQ7%Vv+JZDcKdO4k=JLTxQa=*wXdWhl~`)c&O2Mry2itVa~D zTX2g15U9QNl%^1~w}Cs1v6|AU%DXh$e<`ePy*nrOrA;dRm-5Y;15O459Ck*^B;2v}k;e-f zYbrA70YaFG98FKL@!rxlc0~djQ47luP3u-598Cyq;vwYqt85+FPUJc|Nls4Bt`Ie^ z^9+|5msX*+Yu24fkILXsGcEmdV4kEm#^e}J;YFH6j;xHlN|THfUYw&r$wkmd(*?#V zU?l6%MIHilmP0Kvxu!i^O=pei`lrIJTbi_MLsU^Vg?Irvc@pv6(6>XZ^}fy10*-B( z$;PCyvY-W$qtE(0Nh^CZ^xk9qP$g?kdEL&PWa08rFv0PXGnm}jw_ zWSc=RH@`qvjldvS4!ErI$QNLr=Zg8OHvqy{Fl&tPI%Z%vysnJ&V%Xw6q*erRfSR`O z(P38jT`Vbe&n&3&2%7N2Z z%l2yJ@Jiu2fhze_P0;-vCSj=Be$9kpo7ib$yMcM)e1j83V4zOM={d=tD= z=<_1h)uJ2u%nS6k*jj>tAl5wcz>AQT|`bBPWKI3@s9{XsXbiEAjFEJCZ^P0=vKZzA0y z-R|)ZCM7-1%&_wy>k&03kk!qJjYfZJb=()AD5h!=;h~gw;t`j5qc-To+ORD`%&T2n zCb2WAvC6ML%&$%_Zzh=@@}X}er&SJli{4d+$11w`P|IW0GynIg=2z-(RGX*EW0yp} zP+rq}_x?7a*XmKcRga(O;Vq5_{FHac+!N~r5nTs4vVDRpVs%;JSA7FN)i>@%_=bj@ z#AF>^R(te3?vRI*_fC2kMQ6^AY7|Wyx3SB?cS#c2GqfhDg+xLp2Z~Bg39RGrlxiWk zV{@*f;!l6Hm>O`IHqaEX=yNY9!OB=yFz%q-oG1(9{0-}uF)g`(m>9jJ!&k>RY(BJYtcyKvPgVx?0FrbFy>-u@=g-j|uf#~m$W5-Or+aRnu}d=~7ns<4Y;G>j zX=0Y8B6mrG3T@XH5#`jX<&EG!hRER4{)P9%TVO%;KNz z&ocQ4dx2G-bR}M+-98tt+2NPu`H2X$h2e$*wt_Q?78}FpU19#e>yW8_9K@*Xm39VS%?Q_ z0)bFx_I_*AHWIncfr%Y@9I*BI_!Ho9X&%CoyuXV)Gx6|f8?F|32YEh%_d3I;%pXTX zh@bRmE;9eJuuu6X_|*W&Fu#vQ{zSCOYn5}rb29Sqh;#mj$0vV`|5NO$>Qla~3V45i z!X3U3@C|-g@(AvMhM&yy->HW^mxs+BdXxOcgSmqrMk1%(J=beT9w{}EG38IPoS^^wkuUUH=Vj!6 zk2dKPRf-Xt6!qkM^0rZ=>)LoU<@)KuDHveI?%3FiHlL61+V*!4BX{oa!@CI4vfsga zRW0)@%Olr!1tbYhY&HThuYLzI{z8*|CA5yCgF<>2o$Loa4$xujneo^Zhi*aIS0v73 z+&Jxaqu(x>x%lIFY$F|l(sdpf;*rN5{HMF-KK3|^SR2=Zlio;9&>1`XlphVVAdi_% zEhqQ4kxdqQf7s*Mxwqjq3wlB`jF#Ew@#pK|vjr0P@#|~=B7o*f#KCTt`@W%^gwSCb zyU5U)q*jYpXYWXbrC41+gHHD?p)UjUW#dD~RxbnRSjXV-NB?}Ko>iY$uHe-5=a~w? zGci!rp&3aEb<$|xJ-KT7yesfKoTao4q$3&?N}s~!oUhG=ZwFhlx_pfQ>q5_5+}cqW zF0(%sI3gV^3K2-F~qXOG_eF1cgJ4)iNIfxj%#8k?Mb(r<4$1R@=duNS(@xgE4)z2 z(s1<=>L{+Ib?366mvzb%vF*DnU=!1AK@GbQty%=A)P?7W>bB@3Kfhf87iHYSuL0`C zch&_g5QZ71SvKY!d1DrXBJohfVj?}U@_>%4*&0}=hX{?pFU`QXPGhapdlle3d?gCU zMnwXSr%eC4ORD^-=_03f2Bu$;4C&)?VO?Y*dN77f?}T_6xjlqptmuI|0my1Cjn-Z0 z*QfKA5pPu_1X)jS(K~x5yt8+{clJ*C2nU~T?(&7THw~RQBBZO1nRHO7gH1#xir;PJ zs@iw`fiX7JYP^-1q3I@)7qyjg8uzg$P`hNcDpF?-y90(;+8-t9dY*n8GH98)3p#8n zjUz)lYAib62~4*{vt=Q#lcUAb{9H4euIOd6`%o;Q=7E*iLRbsPWoWki$8${p*+1XU$kKa(nhLHAa!wRq}2aMZMiMAYU zt}xo7ia>45v6kt{?M4r%n(i3_ZP(CqJGss4$D(UwRV`+eBLro&&D?m0Sc1Owk_t@b z5wt7sb>vDhj3gF#Q_2K~7)qQ@P-H+;1+HGL2H!6k-LtaKk|yGuayMs@_rrQ#NR1e1 zS1;XqmIy#wfG}evvHK@+zuw~X7V9ACL?yTYx4*9Ra1L}uZv?2dD}fXGp+}Cxd5m=6 zqjX9DvcCq%5DY{Cmvx%NuKZJ7841W6D9T)fs2Io+V6nqs8tyJqIzFSk<1;ek(7Z|Q zBF$nCa;P+e-6ur+X)0M$2E~abLp)bh!0(;_Az98x71@SLwSi~9;jJTP3TP(CA zC@>1F@mHB&0wznszt-yC%qJakd30p4d9{nQ%yr-~&`N*?n|udtO%sf5XxYa>*x|)m z!??9=(6x)Qgo6oo3Ib=;whY&y7kTUvG-Z-nd?d62K#>N;BYkTO+kdNy@-dI}(5@2} zD^wWpj4T2I$%y!Mdu+Q9uU-#jqGy!ibEX+hkH7zl?SqrA$(r84?;1 zC@Lj&$0GM4(tm|mWivvUdr^tZiz;X~rFTqyQ4U>o7GE0LooM9{52&eHCVk4zI%rDf zkgBAN{5)n!`3Q@aRtSeZmg0er3&CrL42f38`_lKEAuL1yfH_J%4B#bU>SlbZ4{F#6 zNOijYjh4IPc>FJn$*xyhxhh6lWNNi=( z0x(hr7)XB7F6cn&CfX9NY+4IKlo_Tr(irXq=`j*dfIcmg*lovTuOKOc#Q*^>N3Tg! z7Fl$^rZBZda7EQZ} zy`@yyv;d2gDHxDgtYll=v}BZ@R^^IK~Gs}VbjBr0I)~h0`OqErDIh})V>NWs{X+Y4N>%md2T^4WhK8&(R_zNiEF~{ z#7&?>5b5+8isP&Mbgvo0;_RpcU@g2YxYCN&<>7VKnk zdwzNI`d#?)9d#qNox%6{=u&JYyQWWEimkj$v5g5Sa(XE|D;p^Q?8Omp7m(S-;wquV(B|EFQ|ixQ>p4y4|{sXP!3Asah>W<#VYb+;yH)0a-b$qq?rg&jUr1x#_l%f115`KF5eK^ zT7aQNQtoQN6pUt9_226WVf0y^4V;vR{Q!?33E%-|svh}?(8Tr8_iz)41ZqW^DrA2J zazY*9-a@~`1({=1LtER-RMYXRW~h;EJWGn8dP?v-bf0uOHTvr% zNvv8I(X(Bv4{yM{i{5tHN@QXz#lLy-Q=u35O2v zQY@$NvD(vl#O~2wMaBp=u$pyUO6`9L4O8fJu!+Zrpk83XN}VfKVi^zXn|)iiZM=tm z+$mTi>79Qy$osE4yUUY196uc~+S1aHf9{6%j;6}b;Wu~*n19q;Rh#7?}hG?RTKL_d~A>;a1Kp-J9*ipuKw}95M~80 z^lHyb&KU|_BX`xg4KH{32UO4QcQ7vnFL3m9G=mT##m;ys6EVMb+RaRX-lUCx> zweyCsp^JpOjUKe9i?hfV$EMEgdKyUrq+LPdXu=McW$!j!^bnm4f*=DZNK*DP7(8Z* zV&o#r%4c)o%Xf!9?B0mtJf;_SZado6tht%WCVdX>hq)^w*DCuGDz==#GNla@7||lz z*j-Opk5`Myyvvo2O2&Q!o&OgPqsf{+wmnK0vM7kdN2I@?5Hw17H6YG=J(|qxJG-P- zdi-^$DTw4|WE1K!qPGU1PZ@`L-#T>H<$2#6et-q#0GMccmK;Tb)4aQl_9%v`_{p)Y zJEl~!0hn{8E}{)pI;+Oh)z5@f#x$u?aBgMX(Ru=vrmS zau1^!xrWl&#jcO^CMl|*7+rb5BSi1i`=JMz>EyCJwmd$x{B!)llc6qf2kgLyP6qGD z3A!g7(6i7GEEoK2GdL9NXQDJ3k_cC%-X;=`6?nTNUCkNMuda%EAXom@hrc2%cI0_Z zk1kCj431js&)u>(F>SG3cCvyoN3ryubWIwi_iwRujFHbB}1H*{qVa;St0 zexgTxdU~3f(fiCx%X+9t1qNj|K>fS`=eiiwKYT4FvMiDKjqLr|A>9KXxhFA;__z#e zTQdMpCkxRUjGxS!#}Mxqi4LSoVN}M9xD+x*uh9E9krhlc5-kAvuEi2>8*VCjAH4(BEe*V< zJ*baB=--w-fe_D7t$+6M(ch5zetDDkr>cz{NxGYC5-l@(gxLqvY}adPVyhCSQl>Uc zRYdKwpeY-@4%O-X*-4$#TZ5#gkSLoaY?yC|P((ZyYDn~4ie5knd!8>I@r=VV*pScJ zb6Bj9z0b=gEk5u1G0MY@TpyX^zae2{sKpT)c;G&+sS`Bcu52&uKR--+{C!*=^lpE# z!#lb57G6*9+gNMjBc_J3Gi}OF0V;biLJ|oi^r5S7a@|d=xbcG9;~3RnVSB%cb&XAk z@cSnu2xmjL18B-`@Q{r0VmDOEjmJg^FvW(-N4NmU{C4&&Jjr)RteN+#qbT-Q7s~{) zJiWcmneXiz4o(Z-fG6+B7E-iO0wX_x3?`TZ7RkhbAHy~Axrpt$tHR!2sB*jxBWwm` zSBtdnLGInrX_0XR9lX3lIFlG>b+(0Kzzxrh4}f4L}D zvEB!DN|U!0v3WlM3-cBsmwoKc(x+U1Ayi&1t%Y^^OTIjHL5-Ba%HUEj77BclX34ED>}l>)4Z`PisX8Z{|Nw7Mmn1>a}kkgfxV=_Ro)E zn2|SnA`|&tda`LPI#C)7NrIC>@&iCT1}*N3KH7BdjJqTUz%DSYbhnmROKvz~4a~d0 zG{4-%9>{rWo_aWb^Gnl}*`!%ben~oeDr|E14o*!_8k)5?p=YCCy4dCOrw&%gf9Y`9 z92iuu9N?@!eDif&&bx2Ewx4wSqrc=3)ZYSj(_vY%+JM1G*H?#{8_f8DOb%vTAk7Xs zJhnW1_{nUjjDFGRWB`Z(3~tHPMSH*>_*=pcA8Ep9Ly&}_>9-`pTLN3l;WvFO>rmIQbm1$|WD|0k5bJ>J3n58Jht1fmGBrE}+ zRo=1F2hcm0$D~6I0`CyfLst6w(LKxZn&llGAKfY1ZJ-o$dZN&B@T6$8^`yKjD)*c% z1y)h%{`M>NxPGxGjfUFCPWq;@d|A}!izY^uOR0DhUmG^eGC1D^60F z%;jl{z38KJ6d#({OOAGUozVyQ)qt9iTVR8*gNSux<|eNn@V2>KYri%-cZ=L^Tzgv1aN0%ES{N(`&iC{W;;z&X^t&sBl&CatxY`zC1B0 zxnq5nbmDqh7b$vOtSBFfPp1jT0RM8KZ=FakN!I9M{iX#X|pm4 zfD>wz)0@RV787&#Se5r(kxsH)73+FZ%1K93t7mkEk@13kQi}sj|LYI`A5cpJ1QY-O z00;mDioaZ_kYfjOD*ymp(f|M@0001RX>c!Jc4cm4Z*nhid1q~9Zgg`mY-M<5a&s?m zd30!RZZ2?n?LBRK+qjY6^DDScw~}m`v7Kvsb(5%hajv;$H+hn5w|ABzQxqg|O%Ymx zwCqIL-+nU#fCNd9k{mnP_Ex(w0TLJhgTY_`%nWvRcJ4UvTU<@&EJ}nMvP%{VcX5@> zctoFmvHtGRx0jUKnefY#IU zaPY_dql2SAIHM~knK6JQ>*6HLn|B?-nDh9DcYk~J=B+Eign`c@!H%6LZ=cEUFJC-8 z`Tp$*RbX$fk$2EzgWcLzy~1ENAU3^juFt0 zvmjw&;rXn-PP#T}6bLHF@dQTh+!+qNFdPn@ht6qB5)h%d)pb<#DUSpXS?TS&7|I)Y z{<(TjwN^isseV%g88SrBmX`bx$IckbNrLr)0DsA@YWjLtE^+)+d7c|Irv zPh+0}9gLaNzJL(}77y)6l#yfEPONeVsY0I|U*j3+NSvycWGn;}BoX zl4K!{@7-H2mx@ieJf6xV1e*!!Px%dTxVXZ<0yu$;QMocmkCFF*g_I=m;?RrF<+lJZ zjzA|t$gn;HHtV+5u8VMs@ul(NuJi6{!2lWQNEA~Ag;f8YvpSXHr>jDOw@`8Ovuuc& z0I9T)!Z#~MpOZNClge8^4i-rf*7+4;;NDw>3a6b4V5PtspCFdH&Xd$X?-HAR?ZMdU znB|T>gk}*>et7!#V*JI+XO$POLVy1H$5(Iu{`U3brzb^hE@AXSRUR)Ez<`M>04JQp zo@`qh7m$>A8V9ly=fRvM&>xaE65vbsF86a1@p7QXdvlB`$c3Eu>$2Wgq@zaF&>N4T z=0Lm$?%_d8k~lD+p(69i&gn;px|hLth%}gd8ssm09>F}2vQL9uH8^1WLCb+1N^Ulc z(~yaFg3VJr0Dmz9oJ0o2N;KjC=HVFV@(PA#>s!%szIEEJ>vkN)9AOdzHji_U)0RW| z0>;%CiUfXgzf*wMj$7Zh`|bX6uixqPPWSH~ID3QL_UXa?p9g!Z)7?R**Y3M!ywhtH z(b_tlg)axa)06%G`lr7?4R|cP^zz$5OHT{#izs37f`^^1r7aO#>b89R)N*CzYuZz; zdjDgoE^(`kZRx;Y7oV$k|Mc{Ie=ykVL(O-g?pW+3V1PjEyGriV=@29(hHy9-=6 zQe;uhecX0?rw<-I?7tr%Hus!C?{4n^P&nS}^ty;j3K6bG`_qUEKvb`SQfS#HEBZ?K z!|6!Ci~=)y*ZDc+Fq6{AHYh*@(?~e;R3y%bISVgFZong8>WSkyNl?N8AQkY{@3(fo z{n(ENdr%8Wm)%M-NYn2RY7*Rq;Q>?8IAmiBSz@IsWC(rr@#A6l=u;JX^@Y$$#q8BV7I6ETI`XNVA%^9Ik z;CK`0Ak{ucESMhvg~e_O+*@xPUP%$onKLgE67G_Lm>0DYlslOZ`LCkHyOeEnfm_3j zoU}v<)|>+dq*Me<+)23XS)k20Hh`$8EEW)!@DiLENYEik(Lp4cgv{wyMw*=-%c(wA zQvru%my38mh(s`E`>H2e6?(Z%TK@Ry^Jw{cgh!Gz&Q~Avi7nXHaQ_B$f$NuQ+Pm(qneZ(@4K3&cGC&OD zddBwA{zp{A>AoJtE5LW41 zc|_iIVsGh8_9e3_a^E&kf6!^ilhq`qAy_}^YG^(kRY){jmCcR3g(lj28hd$kr3I8G9x+;t;?-wy3F_MFl(JKVfBoT4-B^WR zuK%@bze(k>46Z{SOm`c2nE-sf?*Tb@nH{QbL2Htq{bn7f@x3_B9)+C!pbl6}M zy1#k2diZel;KAzAqt)@l)#?5(d-ry~efZ$f@87RnTIo2vx|hbojPrO zxBwAhoG#o8gh<)_KmO<8pNgAG`JUe-+w^PN;kH9;wtiyvg!O}=>-V}SSX00tM|bK|AyXtH1;e+U$rF zCzFSOzfl>f`qa6MYgNzIyEvr^Joi*hzUL9E!qi|~I#=_eqz2QqNNz%mU@;+sP*gzA zC}tj=OzHz6nrr33B?}Q-Rd^bu?9yiof-(srAfYP*&(n~Pyl@kYFQ9suBK86a7DT9! z`!ciK1SfeTCh*Hy5VEX)YI{(29JQEo0nht&bz^aFt~y}ONGIZ~>zw&8bk1l^cQ!n8 zFrU`@5EZuj{?zFwgWXQ)oaip@MUU7NI0*7^KA~am>^Tb#!we78gJ{g6gm_1V{ZdU< zSPc{+OrUvwt%*|3+xte=sNFj@>x6PLPN>Ls=p5K}-E!X3-PcHBfLmp=YB5EZS`l$KcbrxO%AR~vGOUINWnDnui?_uBH zqmIX;7JgotqE;>UCmuxYbJEp0#~D)9$~|9(fk>QS;+&rz4BS9qljC-$18o6z+8=f5 zSFuvjB_qrd)l?^hS^}$?e(pMafnDx}L|e8_M5=;0qtgb#HyQ$IwTDn;Q@A&`(@9mR zjo8meLRn~6dLC^xLs=`I374BQx#3W5w+@Fi>_;^2fyqgQ7vN6xh=_@R$WIT>=`D)> zUL1Q@Hg-Y`asi#2=%fT0_!Ft2PUIWPk^hB;t3Fh8HJ}zy*=4{U6 ztBZgwDUs~V2*wIN`RFGm@yOLs4%C;$X1bK~J$;OEpLRLXQNAB(a!mjs%m3rTZ$B8X2~J;C!s zfYP1=f|Hz#+Pw$g^j#dNO>-WeW4KS`V6!YDC5*OU;be6ZhQUI>n(}*|yg>5BlPxx0 z`Js?&OB0s+TCjA?Yv$5wvmVDVK?5=ZpA_)0L61pj0p^sy0c-}qlbL!`1%p!N2?-^E zRKR%xZD(-?;R%l3AH5i7L5x3xZe>!*CVN|jdh+Ud2H_;S2x1;#+w*s3iO+HH0if5& zF={LNJVnhSqb8(>h%57xODUJVc$L9_L42(imi%nMdXdlNIShDrnZ0-m+31@W3iV`!VLx181+y==(f zy=UHUj0Q)xKix&y@Nnq94YP}_ugbad=ngFgu!sfNvK$VipHEydpfs}rc-ybhev!XIFO8qt4v zVVcAJ$9HdQK^d8T1i_OpMV9SnjI82W|K{CJd`sB59|L_lo z7VZG^%Q=*546UcIni#*1xev?D{3Qor$xj+;(0UT17RBqp=&3x{;}LOr%NL+k)O)N2 zYo>(hBZKf9Yd$UWmuf0@S}Lj9{Kr-rB}tJP(90`HI3_ zi9fu9vBc9_mIY!bYFi8HN7DZzed7C;K?bAnF|JvSp$P1UkJC!)aoqc9+(bAn8Vf)H zngGkwA^fg0fo2mxjVNyHgl;3xf($E#*&%9rW#F3>FI8Ivg1N9;gnq zu6)XE2tqLnCK=2C8Z=MCJj&}qndwky$Rj!aw50FPn15aiDKgT-6raaOL<#vXSo-fPr=Oj7Q4&az)!wwLd4ZG1#h4%fN zdZGSq?QmEwXFVSBy!0jW&OyA`usi?Z#R2XxHFl>yXSN(Hwfp0C?|9hjk2|}47gZYb zc&E22zd$2^JX*D2IAte;)4lycuaFBGChh86TKHPdoAT5)2tTcdaB#|B4JgCu!Tz5H zoxMEAE8m)a^hBpWEF^zo+vGSnz5J(2?(I(=?>|SQ5;ND|*kxn0@{}lUPgz{oRd|$b z>8HQquC_MYQQIiEw5w49_-o5l5zwn4;InaX=>QK+g4~dat8_&e#jylBEq{dwp^h;R*^%r9H)zmZD5(N;B6wYH+jL6CDb)YWBHpddwCgaa*cR znZEEEOx32NitTpV-3~qL>Xno{AZgu?Y;Gy2JGv#FRU?+)Oce)mFN`sm<1e-8t zwzU4NdM*C$;<*YQ(Ky`4#h(MqN+<+vQ=A<-P;@Tkwg4vD0j>+=%VZAUi%PH}ly1<7 z!*k?BQMJZ`T482tU-_i3t|1%t@kYa-r1opG+4yMMyPQxu3u-@^IwO@-g>G*wF=Gd% zn$_AQ)FdjL{uruQwifo=r~SS+nnZDOvD0r2R{dyoX>jk4N1s+SSA0C|-Y3JYVmqyc zuElG={eAzVyW8u3TBT-T|M6+{gBkx%ONlkeFdJ&Gl|ri67o@%h6)PHz)hV~-8ONk% zSC_G(gx9JRShWeQEwoZ*ZQg3Rs6}l-`%bH*FxbE@;J51ccUH=*rql(*EhOg0#3$&i zwoWHE>!UIvYpBOs`<>QKN&m36_B*QfEvo&_jn`gvr@i*5Tls6m{f4NwRsQRvek05$ zb!5M@De~(Hwc1Hh8D>qT>ZrN3DN^g{udz~!qts!_PNdso>Lw9or@ieFbrX2{l$#cN zkr!SGHbln)ZTwR;EG{`;p;TR1=}D!$Wv_jo48uEU2;Omk;`@avDH+<4>Y$MK^!V`L z-~io;m_9h1ho)bVlCP1Y&7F-LxtFHHku6+|$O31c0LhL;(0Y``q=J~m*GTCNdMCM) z;cbG47717WeB_~pbAjvhD1p3qCL?`}C|x4qguyujnCPDafX%#%Oq`_3%=raW1t4b7 zpqfh-hK-I(5E-B0yyOUXBNkUjHb*1_shhQQ5)U2ja1w~G%r11==;DQPHh90FGHgC9 zj_Q0^w7#$xit_ln1&0$G`kS~_e+ggMT|zCS-;CA2sIhvpnab^0vu|OZaxKI6>zTEb zOl~%|w^?gu|C<55rF*`p0sWUTK|=PN1pc|j8WjfhV0B94S_a{djNXcIZBuc#U~Ajh zx*ImVZEV_2TH;C@RDk;xtZikfU)tVQwe?F{+^U9t8JpW$TfySTszK(BS=Fq!p{d%; zRN;YeO{O`U+tO&;nJTPIn>jP8`KpFAx1!o#(CEjdhE(mx#g4QE?J7n8D!@$fpVWgX zl$!u-q2ynM?9UgH5LhfVzB4O;Ew%nF^ij0}kVG?4@R?E_*71r(Ko#a%yMT3e09B9` zy8vAF5aF2?0*w{{RiIT1fso4{HZ28eZ2_tP8*BsWOaQ#)Fl$@P#;M)VA!dMUX&#Yv1X-f5FHNkVm$bvfde37eSqZm@Jh<6RW z?V_Hx4QyF&8zf(x+6?9GFQdm@(bTrVU8A{e)6`~3p*_=D*rq1;%uuAZD0NfVRAM$8 zV-<+Y3f?&$*J^NE;gvPI*JyAr@?dSB)hKsws?2Q#SyApTD|7Q)0o$gtt*O*)P{u}j+g8ve#s97K zwrxN~X>LwD<6geRl=_q!;#F&srWfc6uAANJGX_wvF_vQAMthvRjNggZ^^2b$j~O)`D(Z?b=>wQTy5ovq6WrcTDbLND-@3e|YJMf&y-X)^xYk z=ul5LfI2j5!-g8VH>NqgVXGwsd&_J3_^awiTQ*~At109)1VL1)*42)4m2Fl1)73f;^15HSC+O=t&M?Ei%FtSS=@s;$pD>ZMl>Qb_!{hWa0MPN3Bd;Pv z5PQl-d`nit#jAq=`d!yS>BLF5T4UV!E@lu9N5s@Ul#js*9Qo4q?#kogr)Ipb>brx)tR?gKsCA! zbEj_CS!iK^Kj!69( z5(9Rjs9dgt&F!?;w6)Rxt=)hBwA0IQ@ATVqE)pPkA1d$Qo}~kHob)@#G@43X)y1P~ z6|UmV*a&y%ax)rFtmM+?~_+JA*yo1mye>RutQn34pNcTiKk?E7VsH;xRI=qBdqFP@Ud_N$NN)JtC{XJ^>V`Q5+edi zc2KTV!WW*Agz5^m%cKMj2jGHgU2SadA$)B+tKXqNMRi4J-K5{HoJUoVWG-eJiCob{ ziIA$e`c%?=H<@3%bTMna8oXxRiY?;Bu#)47t{l#uIL=h#rM^7w-5eh~#M5(k=7>rU z=Y$F8t-@Q<9cg>{bT%=hYfNzH+;a}HH~H|kk8We8)8p`gNX9|*NRPxrlKUUXCB>sG zb>&b7B|}>FJ7e`4+fUgzDyidst8C!o@iXia$`8U&<w>an zL6ZuaJ+mI0Tj}&Oy9XHFOdc9jGXqywW3HnYgL`5XsYEvwthyk!TbrdOUBlD^I?xi77 zcBQPODS{Z@%tMt+!=2vE+~QoUYyEZ38lJq>xqO{-1xh1>%u-t|phl82-iLt20E(_s zmT54Qr)pxGxd_xP-{ot3yB<@8DW!Eg#xPq6=UQkqMP(Sfm4guk{VXM0Au=5bq`z_M zQkT`$q%4Y*`LbN$Zg9Qh^`;mt6?erU9~J{spv{_J7^vn9;td&ikE)LX)90z z*rt3CMe9}^oh>nG3YRtFH)XX@!27nUM5nE)(P^uSbm->aHi=!Z`q)##ZxIb8C*oamG-Z{}WnZolZ~eOo!>FRsHjC{-C+ zmD)phL>mHs*=4>g^8N7u+IPG`l)Y1sCQ;Y6S+;F-*|u$Wxw@XRZFbqV-DTUhZQHj0 znmL$%-ghGAo5`b$%!qxka_`K%*Iw(sc-Zjct^TZsJw{McR=9bA3_dkc+IbV>(g`?2 z{>IFq0JcwId4PH!7Wf!-*W*a& z+}45=ryca(g&DB$&q5U>VAFK#UnKdcn~NX^riRD->kHwgLe|qM!!@KfQl-B8@n4BY zGuFB`gd>4NwXMO@R`~|{Rd0ZZ|7c+fZqsMeI7YNehObc;+t5zb9rRiq#~7sqeBJ0Q zIm+m)X#_sxRZbH+&lSjiKB#c&;yF90+38FXDuJ{h1C4e*ZFkDvr;0mQ9FT70O0uhR zR{1Axt5**^9<#(#-x+%miqjf)-=dB7KB-~a(Pe_uz4*UE=I&95@3A^RFmq{e2|0sa zQyK8O4j(S}-0lu&{apRF=9}!}!`8+&v5KPkulGLrYAZA6xsIye@wN~AlZQjjDmoMN zVQgcxVhR-8&id4G(3QG^9}tK{cNsdsfH6q4KRl~CWzIK;8j$`)qZA>!PM>*O%Whws zPKdVVK@riIvIvz#&)S zu_D*bHgCyF*fY^!zUlUS#V-?Wdu_<;rI1)8_maIzZwU zvnp1s1zpxx+X*shM4V+-A&OG`x6YkqseNVztvQOG`6JsUzLvOU+Sz}0r#s)Z;*%b& zgC35%2;+x9Q}^6gK=U*04EE24)1Bq0S6<2HNnR$ zn(1)7oKCF{r)rncZqnkXE$estL!RmKxbrIYbJRcIGZW02jc z8ACqNXzgz8pi63Ntu%eBUU7}N+%9c7EilSAH7oJ)h(HA3yefz2n?ig94)T~m2f3)4 zx)G&%^Vtz_0)O!Ea`IRTM`fLSiCHUJtBP%3z4{I8jPtlxa~q|c(%{o>b_cZhYa=QB zQmurCyj_3wo$hE~PISS4zJmD;J=b)#If*S$!M8<|(zuw#_PB3jnE|jp1D{nJs$XV% zt*m@_YU<)pJC&35wmkbomuHi~RYBtgnz6M`$ty7E!~Vz7|C_lU2S>r!WIBz~ehAha zY`nAFn*g#QQjDa@{9^K$b4HjUy=d!q^cH8-FXgmo$?6O9B8{h*>+s-mEkr#lu7eQQ zC(zG}fX4^^cZ(C$*fK24D^^L9(-HWWPW#UMH^OSiNCupkUeBcn$TDTk87?gAy@Ft6 zhtpS+$-eM--90NH)cG}I^dj~p7jJd`bt`QEKbfHHW@=lQM2@mrMt>&El?$VaCtCI1 zR>|_}nPhqS@y6L|VucKZOZj{gc}?M(jn`A7m?}q^S!4ELc=oP`^Rrd46nvh5MS)4s zLha72MVOZ-34Fx7?ce9iYuD$u_p8o*$akO1=k4mhuQDm23zSu<2bmzN4k0rucbVkD)mhwCSn7{>5A0Ee(YTpyDP3>UGwr%SjI>FmjCowkAy=M4I-Et6lb$C;&vA*OZhiOUY&b%j&)Wx3~>2`N*x zL%trL6VX&r{gu=^A2pUog~B|P(^GXIARN29oV*vKMB%w;C`()0eR8e5om5$NtIZSl z3Dxi&iI7q*$ssTk4;A)0*;(#vJk-?!vvqOZE?3<{{cbK_2cB_#RiPKda<9FKy!O(( z?%`3(zNe;3+i!5CLqaW%Gyx#)-S#EFU9&|)m71~?z2=6BaKx#c{DB))s}c(m3&v9X5}eTjJue&sueeQ zH>eBRxdWCZxpUo@)qAx!3mCv4(x`y!GzyGdNsA}FE zJ@N269`D{i1M&M11G;fS9w*LeT8TI&nImZKhS!K>+KfWeri+zsfZq>2(NsZF6P-~i z*M1k6DjaGqUI?9N>cj!-JA=z_pFM0MZiraVd8gQ{M1nrJgO7iDX=dBq5n+k;n1DX4 z_8d7VsN>kEV%|2j^BQAQe0x0~-QHYNeBbYvb4+hxs2^$t;z1Mq)Cb>s31k)Lq1fim zDGw$3hb6Q1BjJN(+!1t%AdcLzMD8)AaQ~IwxlJ6{j}vIDDg_;aVGdh>!Sy&8U2lgA zlm@>>QooU|lIf7Wdp6iU{)IRRGh+ZKiKk*!5sJOJn^7Y8y$_?RLEhk|JRtTf2NXXU;PDh4nu_)aiOa&5~o!WX>b+g-H6pQcpr;K6BvEuSEvK^QsjAtA$cN_wQj2X z^kkYT1Fr<2OYp)fyoY)Nw5I!tt>baZU~ji1-y1;i!3Th~%bW}XCIVq3_#O88If&5QUba zhjthV2me!(&r{p)DG&;pmO3Hhj?}JV=8Y@s>t&VnM?_I1I@n`tff^Dst9u?^6~r~= zB(PL%x2MLOefcNONGmeOn!ym?H1#4NR7h*F=U8mn`v!U+Xy2sHE^IF88b#RhU)N>4vC zE6V&=rzB)Go{x^vs*PIkuYZrCA?BXNJWv_wdK8O>d@R%fU~UQ8s5@x9Bc!S2PU%DZRTW9q-`wf4Xhw@?V{1GjGB}8y|T=(|^4 z^6^k25ZWGpO@MbuZ1s^U_I^RmZ=?Lj?&4aGp#o5B6J6zjG!M3k6RYs{F0}Mf6$tFe z2Kq%>BcKcotJ7Dv*h~TBh-#p$iLQNO?Ow5E#Wm#@Kg9zx)Y3`r-19IMG>9 zQ4m0#c&_B*4!EKj6}^C2IdDhP04i6wl!SX+5ZHY}zdf?}6OM->d50n*yb9JkKr@iL z&zI!Ron>Y|FY;t9Lb5w-h1C-}AhC~}@`TA;T9A10(2ps~K%+j}3)4a)5TtrINK`yK zaPm>bwqq~bZ!Q#(9yWK%9$n!ud)T2O$Z%1LID@o5GAYmkqSsX3)|ZwF?GQ=iglR!P zcUn3ICr21EUZxP8UllPnTvaa*L;~E`E8L+yyT$pp+y*x_S6uWT6D3tl&`e)+=)b>F z-RLJy=(v&ij~(chd-H~D5R9YuR^TYKTixYK(?~(?EQ*8;*rN_14tQbF4y8j)27w2K zxwNvh?Ume+_$C`)pp`vPC}G1(D3b)8Qtb}Z&kX5j%R<+D9`Zk&zoLuuK-XIIx_|;) zs{wi;aJxgame9PX3I73 zs@C`W58ktmCR$)jKuG22u05TQG^pAQ*C~&>^88d(D(kn$y_tzqn1|dVJ@=#)- z9pHPh#mS-uSgd0N%(!wx6{tZjs=fL%ppT?tmZ!i`pGmL3X5;6oWy4aH&ew(|92SjMmhBh(OC#!x7=-GQ~~Bn=<+pm(^VS0v&?0 zgB%Z%VociBzo78~pO+Mna1bm}<i%VFu9&($R64;ezE|D-_M zF+UaisHg+V30nlVA6tR+R+F@NV=NzVl)ZV@jIRF;I!58#%LtuxZ= zm^btU4u?)a12c2ni-~7KsbutpsoAV+Wau*LuS8A7x1OarW%hS;O#zt8^5j#@E7yiB z{6X2zI8}UPP;f@y@Q}aZppDS^Z;AJx()&4Q`WZ=J@8buWVS^!;!ge|07g+K-Ag9bQ z3iO8RtfZjTjXie2VtZ-Fr1qj(PS}aICe&|YnMFt&@X*zR$trFrrYqim7}*4b1bBFG zb+%_XflqCoNNdlFVo+}A{wi%cL7~C~DqM7;@JTCFj}Wi9bE5}p*2x%)X69^E0-Vyw zoFUG~|II1(w;|6r0tEtkgZzKt6gxV(TNyht008DT=1u^>PuXtPZ#ml^7<}iux@;rl zxQ4_Cgc%};gIzs6j$Q)o5_EVUqmdTQXrQ?=5tU((-upTaDcPV4JC!2A!(iHM#`6|q zcs}w>*}6r{T>8L@TJG)k7uO$>?^|)H@fOw^^OhP+9pMqlK9}_Jw#AOMwM5}|i66V| zkITKYyB|PvgI+TfpncmFeLyD5bEqYE5rkjC3)8drZQ0AgE@UzJWkIlgA=pEEkm_fcZ(^_%0i$hk|mCu zQ(a!D4j(Iq5>grrAC{LT(B(xo=7b~whASUHY-e=k@T1U4b&6)H%en-0g%(c51Pip= zwJ<(QN=_4S-dH)XXGi_|IC~)OTkOf&ez$?Y@_(`%{s(H!r<$v@u*H(egSvj6WVPM& zrF#}AW}n%H*1Jo?Q;lkGg^D*bVSqj6Hl--a5tdz@i&Vs6Sl;knCcf^U3&${ z0+886+2VAIbIw9&`$dj^PSFHc8e~K%Oou+9VgfnZdbQzBNCl7VS%hs?jBlTH{kEJ^ zW@q@%8y721JqAcf)V+yVR{4H?r99Ee3fD%6@XIJs3JJRx@l`s!dkop^2a(ge=;W%S*SN~{~s3W|AyE_CI3-aXG9CW zey5?m%qJ3Z?Ka1(VGbUUZp^p7DB=vu&~UyOAq--??4BkJ+gEnrroTDQe0HB7;FsFU zgDnt?Vw+?#q@#wWK(SQLtq`M5X_!6hhIonJ^?I+*PmhE&Qb2h6Mpcvyb_Z7M-I=9?{HkBEg0h?2SjNX!g<&D) zfY7Mxa18V<2?^y|)$4z76Gn!k*NcT_u(!d2c+tD@N(A*$-PehlA4tMqkMR5WMYRiV zSxsh>bjh?sZo_@vcF{?HH(3z!I&3&!qmCSG!Pv71x>X9?Rdu9cGrU`;g}JnI5`Q*k zbiBzL7Hg6cc1*(6d*JAg2j5m`3~rUg5uZx(ly4(VJWNtj$=!vE8flvX!pU*CF8=Zd zXA$UqI}1BG>b|16CDbXtsK$jVSJ!lDHgx79O#atE^a=%hjjHDH4RQd%uP*(mQ%*p8 zU4Um?e7a<~U$NLG7YLy<3USMd!O27K4rsot8%YL?S?Jm_-)1?m?uzRvLW}cH81Pg< zU^QF#iF%Iqm-g*>-Ux{9i1xov_%5PRTR_1nyeYKZSG;9tnN&d#%>AkOQQKb4*5Y)p z_TM0)-9zv@2c%W>{@?%*v9qN0erXar_#!~WNO0Y3GaaV6r5mb7nU3hyJ&UW-pDgl9 zCG^n6&25J=!cD+{UNZ!JuG7FllVBx31fkuemu(%fyp8V054Dg)aL2p0{G*8~{M^W$ zNstzcQIIk96v82Fl{5`oUz*-(5q5o9S$xfH(HEK9ZQL}}1p%b3CE;&J1U76l0GX9% z!|wZj=00*Z7BmL*#WIhzP&86e-e|l2b-a9fUaHnX>#5^wuj}_XX4A zR5f|m-1zpA7?uhEAYH9Uco$-B?%!hodRjhZARSKokCO!e$O(S&^W3O+x08rS zR?AGHb|s#7Z>2V8#HXfOW*ya(ibwu5-)95hE?6N1RF|ytZaS+2FUw1D%nN^S{v0zH zRX%y|k0`xNruHf~KHIw7Iq=wClSp?;<$`7kRC_Q4HJx# zr29t&<(S86r{QRA)Hd20{3u?nN)^j5vLcKD8%1kC26G=+kqUYn4xA{HeJnco0Q_)ii6A#;Qc6SOD{P3~I@nDccuXke83X?C_v=pUBri%(>TP_#A9?@zUcu`?-tf<4Z@WRX8XZZ%gIVuGC;{Rp>?Jr0R%+cYYotB^Bmb zD96mFl)_`BN`AypIgzL2-V{NdN63c4zZ+1}Nx^hL1jeW8RphDtSjRkB{H`%}0_aQ) zs7qB>OMP~DN)fy7pD<29etIW~Jf0=5B5SP$%No|fcYvy9-Dyc@fe($afU;fwhwn&L_WqL*>*0{_`C|Xv|c_{PTU* z;06LB{hywKxwW0u|Iq-aZEd^GiSl&?=v5KO{8Q4W@7GTk`M5X7-aPrV24?Ls_zTKN zD<74;t^}Q|U3~WYFAJ$yT)Y*>(VH$S&Ub%20`YVwb|K3}B>?B8P zBY>ufI+@q7z?e#n6xn@{Ukw|8biWZ0b{+ zy6{p&J{ojF9kGY!*T=)AyJWm&^2Px4WZhAFNqK(NLx+X-%|}_9SZA$nP{DeUsU|oz!{dK1PpGPt z7KsaT)Fmi4k=D+s;>BE2{v{nx&f|!$m@D1<4yqU%pSp+VwPh{LPQZ4jb2v)y!%bv0 zc}-9GoWGNel zV&xy(lPv~QVIuU0F2{>db_PGC60gN1aj6^x6Jd02 z*T#qjTdvVe4Xn{lVMw0}0a~%HjNXw>g4~Q-cdu{FJA3XR`0%tnvx;i^zzti4ENLgQ8;U&L{T1K;>F zwOwG~F31{@ix+q%5CwvJ0y5py>Df|))^qZbqp8o5Z#|#?j!}G)C7gN<9kTJ*82i!* zJc)r+^pyO9hu+_r42|A&uU-~iYZ3+IxOQNT^-srCMg6^r^+*LXHkjW}o-)dqzW50v zYlDmF}Y|GgfXV=hw5dm~I=5hJ|FF+BbLF@vzJ>1?U*jd%l8Q-okCN zqUd*G(oM~2Rp`rY9&UIKp(|4Zm0%QTI&VAQ9}5i4y4&fhh#|jbxy$$1p$E93PkcAP zPau6i2!OVb30%Ap#+demTGW?+4UY7R23Gl(tta*%=9i=M&y{g^AE9iD#h=zqC7f>L znK^!EE^t8<3ze{1s4aPpEED1V#x}uK`W1eu(GHzDwVkiZ2`B0t=Z`;3FgS2v(f)$< z8#kZ8^aioklP|zWj{K$Z=t99f(Ui!e*LMY+0bQj>eNdlP><>9@mGqG8u42AB>5d3)+D*6WzGbQciy*i#ll?DL-wp^E zq=u-wXkc^cB4S{4!&i?1FjiXFJQr{G^}&roE0eU`U|<3opd9EQf=gQXftWH0_+|LgN-{EE3Vm0 zg1G0MJTxa*X|UlTur3rXx9@nL-=$wxuy#oa*ZDrq@jUJ{Bf;48th z{%@9K`qR*tx5s9i2k9WOBA5mmbd=;+jcTKLT_p1qI5dd`PlHQYr!Ue~IWq9`mmFFP<*i!< zyNG3_EWT@m{~`J2`kB{zjmabnQnYkxYg%@onz){6{UJ&PZ=b%>$)zqVnb@6y+*D&a zQJ_u)9ljuuIfH5U^A0o4y)xS)5Ky_1YP)NSEbS~8T;Q2r-V25|BXHU}T%KKUw?zOk zu#GS7D_}kJP{9$?)J@8i(yk;tTBgKQ&+%VwAD!eS6=--P*V?@sZuN_%@9x^_WXDKh zTA7P4X>-eYf~W)$vOEA4Jmr`;TD5ZZAKGxl;k2$jh8;P>Wgx8bs>M83S?vb>~o2v!=8WVZwWU|io zag|@RgS#ySXr2Y<-yZXemk`-bb<)r1)AK;em{1uk%_$Ak$OUF5T8H_1FBH#u&eos-6mHkqQ22|rlOm=?zB6>1#C*F10ZgCLb{%so^+ z&M?ciXC%@?sJu|uqo`mcavjC`;9YuYY&D@>PrB<}P5z)xuIN)iZ7m1x-|zH$ zXwxPZs12WCk1MS3jRK(}XC^5a%fT^RtVL7ue=;ng*lR^V!K!#9hBVKHKbGW3Rch_o z8%a0UsxjbhzO%L-R+hf&7x=#I#9TxQWerkRwuS|{6*yuYK^#mt6wHExWIC@m^)`6E86J zV9_gn{jd)-HB@lxLc8bU)C~46tM9SS5cBmS_ zjD(u3DgQOCy#-*=%VkdbrE+n>MH%TLqS5$prbi-#&HK~!w-6)Q;s157wLpoV4J)~d zhp|y}DV|70ps`F-;vY6rUsJ5_xvxxo4nYeHN}LFP-!2r}S0G5EPNm-E_ToA%24 z+dWmd--tRO_#~pImk}rTmqb?yzKkCSh_&j{;v@S5f(>p%?w$DZu7~$ov5#>TTd~EN z*VO>Eof=9WovQu?2ExE$72cptq7df636eWUuwnF9tjrm z$Y}!1k(=Zzb9xska|?uPv7Z4nL&VNGcl}EEMCH<9X!1c}$dkCPIg9V5B<%}f$Bkx# z9$W49fk_n}-S05VuC@Rc5{*ZJ z00tS-uSLKOS7$@1llg>w0o_l)r#vA+e8pC7nsD=hHTi|vdz!fTL#2UVSL=HT%o|=V zHtACv@j=WZm)yp+Nr+$1oo@De6{7LvarrtBLH|^J7S37aySeG)+$^Ha_a-+h&X|7& z?^Ul*dBD~zn%AaHsm;~#;P&kdr*NI*7*M0G?8?_2E-od-?RMhX>@pO$FSG_hwrqQX zZKDtQc(Z%I`gQTo7Wi6D`q|fV(wR_ad!0X<3nA#osX(66HJewE5)txWeN5i^F7Ye_ z0ImZh{{jM#>G|*KP^sp&n27)V@M7|GdU$$jAG5faVS7knJL}`w{o~KmI?EMl;+`cV9V;e$&ccC(6>fw;^pGxBdG1`aMRKJoOh8Z6|*_t z(J{^Ny`y$hqtigSuD}N>&Yx@*?!GD?{9>qj!-`Qf@C0CFX@2x z-AwvqSH=t307(bVT$hD^wLce!;0LEwyuR}!o@>c3W<*>0Qp!fktagAI~_ z>7XObCMM-1L%LC;Jx=-s{8M8A-J1Z+ly=u_2xz|LRCk|83a5n%>an!^E2QxkoNl0u^TW zM-vrUOJLajmX+^CZPl+6Z-R9`DBLp@A&4SPo26`rc1MMon;wpUd-LOT^IGRMJ%0v7 z_ztrI&eMT_c?OVAiH;&oJFd6?%3J)%44@y;_kSM$ljg8!m$&OMbN^ok}DyKLQiPA{#^3xYg)#Ny>&Z+(Ch>mAn< zo%qhE^vQE2fe*4s#<6?g?@U1BP12KJDO%KHIhF-xa538vcp^Q5cL2#NElU_7!x*CL z-CWC}GrwdDn056GcoQg$;Zij~2RW9xU?g=i zimPzpl$c&OnwC*R2=GM0D3pZ>t9i+X%|mnsq~wdpea!F+539h-`H9cf{e5=Z+UGe% z5py2bMVJ)dUSKVL6?X#Xblr?`eAe@+nqeQ>p>$*Y#=PB2whO_(mAKJHm3tp!tv2*& ze?8(jg8k1pGm<&_;KKs}wJ-nyvH$;x^Z$UGaYErALs8 z&#VeGcmcG=UB7~S)n%3*<(D01(hN2j-FHx?>e{=^h8pzJ-@SV3(yvI5JyYXHWt$HP z{PwC^+&%H-i$8ZpP=Hl(NM24kiv_D^2HaC+j4LnKjbP+MtnNFISZG$cm#&gmi~Uuy zQ|vndJe@78Q!sqnf1I#-zTF)vRM!)3^S-~@Kkd&J#WdNty^D>))bMN04?fYWsJM)l z&C~yWaN=ayEuxv6-b${TaV$hvwA!38uOEO%4)qq0N{Ji%8P#Hmug@uj$r)jMZalh5 z&|=d<`&wU$nQ`Vn#>$%~f6YVsihE6{Jj|zZlOX?de2+d*x5a&` zt~ZCOMDJ!TTA6fp%M*sAT+xSEFv}+nr5)~1GI17605WjYSn`lathTk5r|zt)+M#Bv zRF|0kNnZws~{;cc^~vHZ^C74-UuEWjp2oj7>{{f z1UH#o2Z<=FNCDvvfr8F3d}QyCB#X^(>_9v=t~qyd*!w&RhFR;RXpGkFG+RMa;D&A9 z=m`0)cp2SllRl(3GNCr&#iX16<{l@K|7A9JCzodHprl6~6(ca=UKm7s=>*i0phG#~ zU~Tw4*e@ZJoiwOTsp5FZm!5TsL~JpP6jG$cePeMfV8()c=!L5W>!WkSM)VA+>Rvd?tq%`YCIH1~IslEO4K zYh%XBWAu@8RVFs9HbK48&lEJkfL{K`hI>ZBL@!eg`=4LEuX+z+BL-HUy#thEEaw0@ zJDb}r!3AuY-%045;POU5JaBa%J&9#6y7nQiJikWRIJ$beYNIcO$9R=mM?-9IZjmnC zHxOlhsV~?P3|vI9f~qPMUvx7FVQnQyg#`;cdf{Fpfe(Cn12*Q1-A0<>nKyH7L@*x> zEt(gYTEmFz1!SrqQr#*G3Rjh-X2`6iGju`9Xn`6EfCt>COn}^vgAqR%3nWoAER){2 zbIKWFKAM79mOfeECYI!Gg0V(}nG^YZh*U1W0m>2_>_}_b&s)k*v;2_V?I5A!T0aMF zC*I$1Hx~+gTF5>YB!aa%rG}ao0K*m1nT-u;nAgA6)tDzBh`ZG#H>nKhKQa&;Ea(G+ z$&1neO4G4|7wG|wvIBeiM<+1+i9k&X{-rKUFQvXtBnX0#WDNW=(QJm!ffXZ($pxc= zTa*tEM}R#H)Ylscl0s5KRBoZW3$(f*tD98nI3_<79!JoH9W(F|w6U-o^KxF3tArZ1 z#%&O?gp(Tq@<7dPA8$l_u2X?2$x002Uq6K_-%40WkAevarmx49r$faP_iXE-K z>NxtyQIo-JI}yzAH>Wl5+iS*h@x_l-55B4Hnvy#V!Cntt4UkF}&?IINW9KL?$A`oQ= z=^yE*{>Z5AjJj*!=D)d+pTd-XA|fCXgf$;XPJ86%!P{?l4RsH+X}w4ELoOE8s(~7} z3w`uqN98mxHE5{s{Hicor?kh~qI{F=Yu)hDOmaEN)d2;r2-THZoefL`Z_sn$L-DDd=Y}&`?_oBM^x&It z!ImCznP*F8)gp>r|Z6E26;bI;alNq)3 zj*#uDRc7an`7_H6#i1Nl#YBS$Fbhwj`|#_~+QlHSrflD?ppEHcL@AX)ib=O1ptWcz zX?r-9Ea;h^k@AES>VqRs8K254^@xe#*`RH`SCd9EQFEKyIQZ+;{Hm;ziFE&|HCi6>q1;eL}N4d zJNCqXXDm{1xWTjuRHtDA^zy@P=l{)!wlC@aGC=OOKW&EMqQ&f8(NysCWL+Gn)FvU*f zKTk8ahx^gn*?mCePXV0{RWvwHqX>2vm7<}}(sh1#ybG{9MRL)EywZnnTX7-nL>Qud z#rpdfRT)Jtg){bSS@7m*k`#S9h1j!x9DnrK4jWvld)w5b7h6?Ay$|2VW%IoN;YxQm zI0*rH(Z0>&@;SnuFc-ckco(K3-?AYazT#O-^YADvSItAA)mV@wEG^&d=Hy?ZO>7Qg zv|+a~E)MTjTbNSKhO6ewY1Cnp6FctY%WhF8KJ$TaQs-{lPj7#tj8ikU&>Z(pqc>$- zPeT#6euEen6)!rr&~yG!ikGM3UssXTyvYLzFsncm)%S0F5JVFY@?E|4}^PX|IUB=J(? zjMXF{^lm8rPk}9cFKaI=dTub=tdYhgQ9zaX-qq(^sYSk#ck{9dWSkY_4AKBtEsbai~Fo32BzB{R#O6#O>eDI#HHe80EvwY9cI@dkn3|Y=5utZU2YftRe4)RW}rbxYZduKH3!5R#@+;x zBppo^v&I>Sj6HSgKe&FF-F_dftnZy_p$|pIy)(G&cJfOwBuQy8%eaf5 zluM(czM%6rj`lpx5T*IDF&DvlVTa=WXd2+f9cko*nF0UwB_nk~MJ&!&7GC`?sw+55 zw^96%E`{94@WBk;Twlr3p)Tzf|I_MVDOW_{^d)@HZ2)BN2#f3FONSWE=Q)HMdryc7 zW#K+o`fh{Gi*I5vGRmG`Ii%5Mxm%mD{^7o7#?laeWaIqIN>+|lX%-JZ{x%yS*XkD7 zCPyCnC~y4505Od|W>l5U-pPqatqQBL2v!7r2t@)_zb9;Aws*t_ot>#zl4kI;T|BKw z@L1gd?a<8P$$yFC_@kWhogcxK{j(>E_g{j`!Pwr}*wN|#+Rfk8(so>D$M`#4-D75A zdVwu2)qZ)^iVsI~O<#)r8&4}(38{P3Ch>`~%lrMQ-4ydOB=7rnGNXT& zF{NR0V`VcVxY@y0cen3-{qY*NR%0{N)wMk1@bk{55&8OhX;0r#JM{5#_;GWxpT|pQ zMw?@N^3&t>9+aOLcza?ns?50kap-2rc%mn#0%flHG7~!o zo(+)`{RezpdcLXXKK>(O@25h3d>8(Bue0`_guvRC-~eg4cnBonWJe-4{$Lo5_oU3E z&??A=X|GI4;ML2sFr0WIN@n!6JJkn8oiBRj#esa@y&Zrf*|S=M7{OC)81j0)E8gfh znaeDaJl3I52-P8G{hWYou?@oVX)KxY?d-kTr?u!3E;R(65G*PHx998x)Gk4lUJ@)$ zd(jVB8onx1a{57*{<}Yt#U9-9mV>8#suSURhCHSXM=2TI-OCO547ynhNT4Fk3T+OWpkH%#mHo`ZfiMr$7HK1k?^rv8NC&jjDR$igwOPNB>je>BEA4xQBm7rNeGqS{iuIyJKz8-W@ z)`=*)k`S_%m8jKPAjJhl5e?C8#IE{uI4_)Ar+a`h*#zNzCmPO_5@?vhds+Dv0zqJL zarynAu8(*#Iv6V)#)SUGK9X6P;7G%06uGtq{F(Cp8$AqMd?xjVxwqi8<$*Q1T`;f(KYu>!pDI0URVk9hfd|Jo~ihpET)#A85qbdj&f|Prcj2TK0w` zm3Wg7&+Mblq{&nkP-JTycx%hwlVG4~@~__tb5U67Lw>S3&PasizWeNC(P$LC0i(ic zMH4HMD$dx8IMI3VTORS{o)cLy5Te(1Co zjUP3a_jDNMb6AxJ&z^OMj=Y12C1v#3aN#7xiR9YSwdVgOdsj5}N{4U~u6TZApjq&3 z$Z!Bu%2-sO0?}!RejvY>1AXAN|2GLn?OmMigAS!ioZF3^Q3Woj7Cm5AU9g zp@zB&AvOP`6NzRHyicvSAIWRBjR^jIAUtoUy;Y;!iB4~t&szIx8WxUZmmtyaYpyqs7(X{%2 zEypQPay_rBgy0!>M-5&=bY`s7_5$Jd_#!v{tlymC7By+M=9qmw0g@w3+K@2llLyh6 zHW;Y^v8|tT_iEO7on&AzRy=K`?Ro?&{7}}FzCNoGhp0EaC!-!CyA5>ae?@nXPsiY3J!$cXe`Zm z6p&Uj^FtZQt0)>8>{OC87PGE;|PkDaAFt;rfI ze)uajrbZ-Qa~dNghwUWWB#)6Un&hbzlHZ1zh zRtfc@sv)k~IjI3ijomlqhI_cV(GKGP5Q~m1dAgd=^Z;*9bn)$Qu=~~4UVfOex==$> z@S`k{JOm((Mln=CqKY~CfVFN3dc3n|XWs0(F9|tf^eSA|TPWjKp`6_0-ffy1Y0lK( z?_cgM&g_#iFqxZba%FZ#o18M_)KT`V*y988hyPGhIS)K7Tt4K0p3B0(+gjaDa>KbD z(mnj6q@ykwq$cPk_q_Jq#(vf7tFaGxxHu)H@?W`ekLZ^*PZm#q%UB+nW0a^GKS)UEZSI&Lc;k0 z6)<^2FJsjWwrU!&ay}|QA)CH^k(?YDrUDRza9I)J;@5tcf8jND^Y!^(^-yTcjTS1t z$VDvAm%wXayGcMpK2(LuLCRZ9AJr3Q_-}i$wJ3tDDEs6@;9izE_sOhld4YUEyKoJW zhL+jHZ1gA}N71SI1K<5(V=#wNBMo`oaFtr5SwIhgD5kUcVvlB^nCcvA#Sr|mszn~3 zl>O*fq2=gp$w_|h-s0PcP>6W+sBHsm*$ixQcPDpyGGLSo3<#u@v+qP}nw(S$!wrx8(vF&tj54!ulUhf~&q=tJH_ov;OYv{X=tM~2N{C@{0 z|HA%#;iCxNq`g#b!ut8>@0)mQSM?jf`@R$_N>>lyw-<@f6dc+|(dEh{h}KZVF~WwnH4(?H-C;$=Kt zs+sTWk#x}++PpSooQO%vqZ|1^MF!12WAl^>j!oX&=O)_G3Z?=71Pd(MyqkRMKjomr zXHSNtwPLopBnLXuT%Xu>4vniER0CQ_1J|)`yaURb!8cI*dJDuTT8eH}^w0}Ctai4>V+s1%f%VAg+V0*i~ zWkNAod_gJ=9)lEB?n>>zq){VYUouJ?gGKF!-UaE`0)W}s!t1JcL}14V6Q7d1fz+1eX+0{f&#k3zBn(j+9HyY3PX;gpJ$`-OBDoq4*cz3)0` z>gF8nVB`cW7C73iOEdo5wrC>e0xTtjHvB=wFFau=6YC`&&aveBw3NUKuh+=R@1)-x zkt+yq?GjiMIG$9avB#T2-_<+w&#&))UB;(Q7P_cR<$oHfSyJ6^;{6uXG_LG1_h zzoEDgN;-J!U(M5BWB>qy|Lte^|6$5DtMC4Yrs=z?$56?w4x~)#8o4=O4)nP3xY22= zNz#5Lq+o6lQQw{-LL)(XLF4K7;hQWj;hNmNGYBd{4Qs~EwEMX?CnlV1(vLXrkUH#c z>sS7fr{HSMSLZE_m|IAWg4^0FH|A)>5>;LI!vPma4-@p~TWhd+{_*(u7`Pkx&+roM z>+F&oJw3Ec)w%G5EJ=YEY4kp7L?rL!l&C7?wxmdwDf9{|`m$ze|852v$JgOODAx3f zHzo-Ezt7L?p_bH%ctFVKI!g{Z^zO0=_CW9x9!M7duwNVKkMq!raVtDJbDdyW8Eq~UE^h0wvSiaDj zky0X*Enja+NPS^9!UsmK2|=zm?a$5#)ED_7xDE%5yXsES(G0|XQZH>@X&`J_vy0d5 zmxsM40}KISP|3HKSRK3a$%{Ek^*nFXX?!KlT$ECk$GX;m*`$-lgtI;aCOf=JsIu||>?@B_Efq@FaciL)9TRx?ow(q z>6=1D*aYSrY7`DM-f1I?k;b0wMWJnOp7)5=}nIIZR4EBfHfAa`=e z-^A42Pa|r)%!~ipNWsnN1S@OlLk59T(`tR)Ihv+khz@-NV z4FQKoMs7hwaP|xnPZsVjTozd{N`2_@GrABGx{iOoG4-r?aY!nx&soC<9%C`_$4ncp z(8{Tg2F?j=Fs0@p(1M|kuEYgxbSpv=oyxyZu`ZW6YNzs`LJ4@|cz z)OYocarJ(whV?nThON{5({XNm@7Nr1WqNV((W29M$(G*Q5*k1g$_BBTm>^x6F$M^Q zD{k{!j&D=xL6EW>j3zQmR7F6KQAsjyvD8CQyuUOLT)+*Yzp$)yJ#X{YN8?dO{@PAr zew7k-*U)%2*3nd9^=}v5kxxqKSI=F6YR*R3ST|`LzS(J3zzy#9eAq2ot`xy3@>LQ1 z;F5;xTGir|SAxmUVn3R5Zu^=r-G(<^A(RO)1w&uS2$-L7jt@!zcoJ$vi4EpRCaBI7Icic*1i$(15~Y) zEu&u`1}Q zr_UZwNc)ZX(#?Cshi&8L)xX&wbJ%W~2_*rj++StvjA*MQrqPjg+48T)!!DtH!I0gd zI^1|e@MhafW}V$%6!rHdOI#7j4Pda-8%c@^Uy-7=fGHVCaR&kQ_)H@J(HG5Z#&Lrd zcquusr^=<+%04gUh}@wTZXmcZkp}_{77N(x`S`W+@Ic7sGf|KI)dgbr`#c5*zH={x zu(^r5kw_9KA%-#EeTc2)c+umS+u&iOR+2`OrZ$zvK|nO~hVr|YvXOxUQtQZeCQ7LL zb5EcDMj_o~UvsuLNNMftIDd&mXN^GJKOS?t~~X^SDpDYByEX;=}&4 zXd4qdQO1T?%k%#;9 z{`;oB_5E1}`H!^acl=Lb*8kJP)%&F@IXYR`+5X?^WRqVN*&si{@XZ^FkmsCKN!F1( zBFL~*zf^+f9}+7@n^dw+hoA5iZ+ExOauH*XsVOf$(=|~2P&L5s942Wr`fVWT40Kt0 z-=12Z^G$gkheN#_&}9s(#EOQ2XJwUJfbtS}v60NBO_~hRsCg(-qc)CpSqXK! zR_wJuuvTpL7W8$pF9~N=xYJ*b9vZ=!?p9ouDn{~UeZGmTyAE$DKp)GG)x0V~k&wo6e6p#&koj^pDXbp4`dT;^ zY^%PG#u__Aqo5d2%N|;r*tp4(YRX`aN^7l&{>G+Ghp++2u}a}MpJcClS)H(;<=13K zE)ZxEt2tnf8RR6?xiWJT5qivktU}WQ8VhsNQbk}XN3gfoLf9fiI%YZguO1n`+2W%R zV+Ps7@E7_8`JwworS|& z;M?+nC6B#dwcY_flV9*OTzKP|@ta4_Y5D$m-H83h@oBm~{v@P`o2TLeZtNOgV)1jI zf3A$x{E+>?>6%g5m>420%5xS&>LFT{Bx&mboQ@oX2exY-L;jSqte+VmTLwZu#dG13 z$qgh;fKV7n^IL2NuF{NM`-~Jb7|K}-O9#)UITnztU$bb?f+HJR@U5jUyC*K8MZ}y3 zleH^j5M7@Iv*RUtCs6rpPV`Xpl;gH&9W_V>lkEbGG@6|mlXEb``;0(G6}z!suqafRREUI6 z!(d76h|xl+_=6r~#LOyQZ>@i^RA3GIBxNw~Y1Lk)*${(*8FP(Aks}Jm(&34qDk6L% zK4Laos4X-Oz{jaJU~z-}{6^r!E0%4z=OQW7N{uFibuv|+aoR+H^Baz_`>p;ZbzFz) z+?5eh*u$6^++YFti$8CO)V6cazE5a#$mGoSP$N=xN^G9e&aYL>$N!+wv1R_< z47y=3PhybZ?=^SbbWrvrv6hm4=k3jnAsc;gpIHcY^x^I!7Yk*B5fR>CSi8 ztmCxf)fj50SBIp;QmNV82ol0+wWCM^(33M!RGF)8cNJ<9ptqzctbaT|8oul*E*=*=p4GN+SAyLqb`yoPX#Mu3 zlC+2QvZ(s(wNvy(A5~YQ4-afha$}NHm$e`M>@&3{skDBi1z=CFjDdPa9q7(YUK@WD){~d=ugsoxy!?s=obFZjT2;%UU~$&S zVw{L4>EMLuSc3JRN&f6g8vhWcq)YUGIxnG5Mky;}3sv+f2dv{VTp@kVM z5hyKFYfRe}rJ9dgQzih`nF>vOf$Rm2Qty$%21ITEdC49t(k_3!e$KcBJTBI*j&4ht z1Y1orcuIgBq;DY0lX!q&fJdgo;*32sVup*v)Yx8ahLZZ^C>JF|I(cwDvsF>^0sQwp z0g1(P|LD5~QdgKp4Uz$?&+B$9-1Bk#+^~r?4&ukb`EmMwiP>dT>-YkzC;!#7d;%eu zlI`Z;@OU~vg&{0C0M7skcxuihwox)uqeYPHi%8{i8wEi*rMBalTh6PsE>J!uUpND zxr0UiLjpa@-OELmNbKrM}6|dG|3tgLpb|0IPn9W1*j<-oaO!_l8@-%_b3s`600~}f(TRRLEv6{ZoYh0f1f+Hle{&gJhvl(oI zO~QBu5*s8Z5mQfk!03nHa%il|Eiuf`yDEMgZWQ-UT866QB&8 z35~(PoMOb}BNq9N^{6?yRQ&`LBzACUXL_|WkKugNhD3JGJmP?0v6sV&8g!>=pI$~R9PXUys zAv#|iSG+*8+wHq=e@i`+hYv^G$;+dTeG9`@22QB7oaXd>9U7~Xzy4b&(*7ADtjQ}pAS@~ z<##4RY>4`nE$E>N1>&ETth*z0_lqNqTM4sNgLi`8=D)ynTNEDK+P^o;BWWxQxN4f} zFt00)VU1ZsE8>qqEkhq*QsQ@_aWM5s24d+&rq#~!d!wmMqcxF<)n$L3%HUNK!qbRO z#fa22C9@!MqVN)^NsQE(m=xIb$p}LhX2gNY6X|Xd(T$S<7g&wkYEZCluy^!1U1h2f z#i|{&n1gg=93Yidj~iQn6j0P;5Z(4O{!2l~P*3;(v#gHfO#AjTK8?y!os_eXWwwg~zYC@Z?(G^@DhKGA2QivttDo zq^?|t5%o9$DF%1k({QU>QSm(E%V>UM@hxAc^A%uUiraO=a4aw|^=lT(ZrQ$2RpR-M zHRT1;()EBwlkvdvct32Z2Cs?wHT6wI+nST>10@pxkL85Tiyn73Aa*wX7|IpJ4-P)y zBbf7{!URp1aaYR`v(dBXUkv6x`!buh+~g>PaW2w|>+n3iVyu3etx25$ZW&j!wOLejfeDUGK$ynDNr4U9*BcL43N&mw3aRDx(g1kO~eT-iK5 zpqjL{pC1Zyq?Ow}jQjv%k?cTndk2LSBjTS)Pzfg~UmAPSk}bOol$+*S^)tkvnY}g$ zbLch^>plj%1N||V+XHZD{54hW4M9a`aTA?a3GY?tCsdYjT}AnCUB>9? z?yX3l(IIUKT<``=U8xB?xdZ|LOLzlP9X!sWL-yHUCTo-<#%{0yLX01vOUa9L^`Gz5 zFSvog%V8n2vAyRR?S9R_lq^bfb%<)x?q~qCV*>4~7@ryHdR>hPvl``OFqPB5j2TT7 zi*s&U_qbp8gJWO~`vsHgtJF@ zKpRn!O(0LZleva(TL!!i69Rqo!$g1Q@Fa0#gZmDMIbaDeQggwa-M!waEKLpn{YU~j zYP*QxWS?xob@O==P?)R?NP-s&%?l4w6 z<3~3gp#FgqrgzRcWLtML$6}6VQR)11{MzX`%Hx%KSb_O&YO3^?YXqK>*TjJLOfX)L zo<9Ys#;_V)ip-z}eWM1r4ps)%-{R%*E2n-P>!9(LxVX5Il>`MvX9}_DU6fkTqELPW z3dGN?1;TWB97m_J8DqU!eeo2#7Par3#kG1EW@Glm+(~}~UW$x8kFN<7>{YHA7B&Wb z4Xub>baImsp!8t6=mcFW)GdU{h~379L@mal^B&09<>=J0;qsgaHT5qm zPLtu^?0fV|pFqN}rVVx4c>rNm$9rVT86ANrpJK4)hj-}9WJWlx2`G%*!90r;U5McL zBdWH#5DeH%G#?5AA|_c!w^7?sF){8!b-0_zMKnm~_RYbS%t-R(i)!{dZP8@!AqSFSNMD-Ce) z!soD&Haauc?F&0aopZ10Wt163(bMo+!{a9!n}nDwVXZ0xv`!5`|L$X}DGbmi^RtO~ zK!Y?;&^|n>{ZqREMV7{ur3Fd@jaSSc=@jUkijn#|WNQwOf~4$q60>Et$ZTx5Z7NZcaUK|5Nf6{DZduHnI?_kOZ&BRvKW(Ila1Re8hN>4G*hI)^p!5uNY|_qpbdU%=sjC+A z$zM+8`+8B z>q~f{@H#*f!p7Ov(NBXASw55mvA`5@5RV1LNtpOu%&2;Ub!P|M%WtS3!m&_zAd^5S zNO)$2$SVU`!EL+VOYA2QqC0{iyi-z9A^oxeRIa^%2%S~x31WzP{-jBWHWE#vYY3UP z@j?<nTTxkr#=ALle1;B7?dt4txlq;-zb#IPTJv^B=Lyhd_m5Z z4e?|yYnTu|t0((%_|^JYOgx*Yaq~>wVFh8{g=+yNAh^S1ylqmq#ks!}1AF6(qsc znnGRvg$?5y%>=wf5ul{js^xV^*P-;m5FE`TuJRpi$<*8gOJ>bnEUD{E{iWHm>pEY5 ziiaN37t(^GW%Yd{Nnu4>`w4lPP{C7uxGZ}5w4l(a?Hv5$Q^INso+5RbD!7-fQnf1@BU6J!v z-R=b^@{hx}!%iC~h1#`V<9L~+;^6w)rmDChIiGA2)R4v!I&SrTMH0^C1=`QYV>OXb zc&?8?Rb)Ht%CgklvJ56hPtS+8)WMaq&k_1Ogt3<|Wwv=)$9N4+x5$1V@VL5`xsdrVAfJvL(lH){Tk?iJKsoi%;y zEQRpZm6F@lE2gcGgyOf(4jF739RZ`j^}T!;GV+hT)VE`pE3d@8O;S2Ix6ArJ#3^cq z@}^wgZ9n#p7ITv4Zbe(k=ps_l2T0M3ZuqM1{qkDCYr?!xOzqkmRH3Q#7j5%U=7QhtZX7zNy>>%l>AKG$iV4SRR(wIS09H#%#ux!)Xqu%qg}dbbtG` zV-S&OJ@20ohkn=^V2m8w@g7m13*LJfaL()KE`^qUAahIJGR0J+*}cLO^qYwUX2I zN<0I%c0}`4XxnJLS@n+14fQwBFapL#r)XR>b_SDHYvbT%a~R1}KINpNcJ8Q9#5`-& z@j6k@!~1FRG1$72;Hl!%3^}-oF0_wf_vr8d%ElVPP6i^RiiJQ6}hGl zKOXWX!AI*edzR|H^`s)o+V~{*hgNy~EU3sI$G;A3yz6M}RRe)-X^OJnKWbc$jKhT9 zLan3VxfFFZr|$js{}4NIWoSn2)mUeUxV*M?lj;J@XP{k>^%l+{SbAA?&qk5v1Q%9V zuO;>qM)i)?mQ@+~SD9{X3>?li*8LkWWqD7Wus0*FD3)L#z1N|mXMrWOEX@;w{;4r1 z#x4a+r~F3dv{yi?rz1Jje9Xz1E4DCuRPcLC4rg<|NyGqa#9U7ePX2Zxrrzc62#7Yk zlb#S#OUE3yr7Hsp^1sk``#nF=%QtZE=htGz-(=-*;y#DIvunvEu0FlKE`=6}H}zAcfzwMB3sZV^4V5n|vegH&9Vp7N9s@e}RC zDPYyrZnr4cO;2XDu)SwG@O+(UW=Lgkv=R=}xJBZ9nhP*2|GeO_tw^)L-0ZQL#fp+_ zO*Tk%wbF9o3pVN~>cXRZYWTw~BPw=q+|pmae*oixm*9mzB&Crf(<^X5M&f~l_uM3s zk0(L?3&!LA7+fq>=zV?6!RGj`1jPjwGoMG^u6}c+VSm*E?=~C6q3!i1xv7PJj6KZs z9%es2e!Gqt?9NP^1E;gNuT4Q&l}j?4eQhwNU!N#8iv{~UF zX@&2$|MEHAGmJW@e<7z8%`?52 z>re@8*8JZ_76z!$X~`q_8tgSC;&uQ)RnR6!lCw;k9!m!z#VqkXw`pOZGxisybq$RI zUaDEESj}q|Vv=s-ac`ojG+i$TC(qU?Ar}>m@4M5HcW2pxo$uUKs^yEz_)whC9GJ6m z1`~Ey$~2@VGQdN~C3PgbXtIM`_jbBb-b=vakf#}XXV2NMQHe%%n?z2^)r=3)V;MaB z>}(v`z7a=(^Zu!rl9o64ixeuBAatt{;j$2n-aX@tOA7-!6(?`s#hv=}j&fxu7AOg# z!LYmabh=FDjCMbT4(%~7<|EZ@rIBvshZdYtI7erK($1h+mW;tui@mi z!1}8^V%$%tuRZ{{2h1{@dJhF%x{F%NZfiwS52QFSx-Snr6BwNKXF=H$$4Zd3BLeNQ zWn6D%o+z;FvLfdX>ci-8*o>kzyM`_VanfCZHd4X}_zb(8_0D#pnMrI#15JXMC2TuI zSvmn`P6x9(v;}r01w*Yo8_F@~0z3UEs2dDa0{J`wNSM2Taf48tS+N7+uuq~+oAfOi zOu0+AjS93J_$_zUl9`Q#p(&HdR96J4xM;yW4QM+>0Ct8O^>^X<> zAljIgg(djbF9P+?F5Ro;MPc^7$H@E)>!slylF;cXN5=2tk{^G$x zGb7XCevGrLoPqcuZ7drbmMM79L|aHM!l}JPbF#Gw(wc7-JGc)@(!Tj09MR*kt&U!3 zxHCURefwAHxnr?VzaXs6id`jmylfnGZRX|u2wG>@sk=q4!B4&dkhto|~^dKrQg&*!QJsJI>o%g;6u|nkZ*9=-GP43u#N4CG` z`wjhKVE*c?kzCcMCTJ>_i~eVZFo{rbJ$+#eK>)7+F9I((`h7zzW~0xgyqgZS#ji;* zS^X(lqW$lvMGVvVC3J2+pRUEJh)Rk!@<~4a-4qfLJ*kW#Ah@cGmx|}r?CwDTGoiab z-uET62;}dBp*{Hy%xPF38K2PGVLKBFUymTKHn>Of#}LXZ(9K+)K(~JE(x(IUer+Gp zcSn%QvW?>QXmM1n@HkWK85J<53fy%M{p0z3MHO{BO|U+FO5G;J)~SiHoogeMzC0v=GSQP?ERi{?p$2D*&OKwy*h0rLGULD?86 zIZS2lFsvbxv~4ay&goE#ymyx(3BI{!8%{zAzQ=KyG%kCx9M(9Q)Hr!`kB={xxXYW} zEBDRr=jQl)K6sI|YAj5oiITB+w==EZt_{cE9|b6G{E{UqgLL!b?&gu{&CS~@d?}J) z0jK?x+b>yOq8}$aQ9=@+b1xBSDy-uy6>_dw$17gGq&U{Zc8T!n4>_AbOS+bmsD~JV z1B_IU6&VwPXd5P6s$Zm?gv2czU%2E?f7}=_=GyOu25pZHR8uG-FqCZ1%(e`tHm_yU zGe~#a#*npWMJp+>C#6X{VhnSX8hsS~H?+f;;FiVdl;3)a424wyiVVtLl?szx)fJkN zNU7#a=(yEhwHB8biGRw@E!E@2fY8xI#B$H);>H=W85H#E*;fn`$~D}nqEOSx-KMTN`gJbh#@RIb}9>A5bQ=u)B8 z@?p9}QZtX7_(u{9g7iJuan;0iFBTo66&aw?t)%ck1!!t;l}$9LN4i9OqP{_8Lk}hC zIEZ~>aiu!zRgyeQq9cJX*<*R>@B%Vr$famW_*8+Zpq~QO)Go-l{B17A)4w4fCy%%J zQ>gt;-PaCQTq_y!_;y%*`Mkg#5N*_MH?RRUg@4>!wl={h+G^PA>PUA%1b0|+mOxbw zG4Z$`stm{khC)s=o*FCCqhqOkik1`3xiu>>uQ6Q&R9tb28)l=xV`rYb9XF$zpawgg~{ zvqPkCFs|)_@n&FG?`+!vQwIaFPjPFJQlO7FegPxPqRN^SJB&A?!0Dg1T|*pi+4U2Y zDLO4dqhNq);YnT=gsOjFUkGr|TL*kiyvO*)!tg7TOVzH%K!6eOzk-pM#_Ta1UD|>W zDBvD22c!bnFuO*fKA6TY#1yB0OfYU6C<;ZuN!QRiGhL!0Cd4-QuV1 zZm*Go9rvL}j>o9@%jsTR9)rR*^;Y;tv5j7^mLETk+90Llb9<)gF4%P9;PCQo)G4XI z6=Z>a?>6etU9aHs@v(2!8U0Rif&ESy(b>X2qMcZ>k|HdVpVf(;$rf?B@O4Su6ycG@ zYI_$ACZWs0V{ud+*Rh6iBxIG_g?Ya}j?W;U2O+eZbhHT97zkZasganPhSS903%b?| zF9(OsUF>PdAhM0(CMOovyI+q$^mY@4iGhn5bDSh`oC+svSPBOqqidnq`kJ&6{#6)e zX5A$m7V%Oj^S8u(9p5~@hMh=4%nwjPUkx~r2?_3valP&__4PKt zvu+0CH%3SDHKJGr;a3oF+OYp=NQrM@3IT|EjuZSam?d%Lmmv^AF$c+?vG0_i@Cl67a+z>2-u%QNBzc?GTo|5ZoD4CAfXwcUapuRmJ?2AhGmOb8R7V%Q-nEnV~K zBef}PXyq`4V%}?yZ6$BBF#~^S&4JgU9f*adquj$e%49NeOzPhAH*7W#~=C7L)BfUil;h`lWo8YydRb3-S(K2WQsL7m86qRC*?{Q zN*}1ikry4@zJh5bF{q&?U1hYnByy`KpsTh4|k&iDh^L|&oRGZ9U)et8^@8gwo6Zt0ct#S2JuXi=yD2}=8v&b_($!LEQqJm*m9 za~O>8yK-#)vq^YjJ?@lcU4oN{?eD}?AK1#?6*xp)V(LMy=ycOMwtC|`8WmSy+XQXCjSs#IzBF;2aO!R4P7O&xMhpo+iRKj+tLM6ckUrCiZgB@9l z8xk9Rv*IaleBW*3Okz{sJp`_h$teep>ROT<1<<1uGp8JpI``Z6dH?fh`EFRk4x5h+ zU$dR{2B=g$<y8syVVg~V z)sI~eZQ;nbNiUfJ-kD>HTy$@lFlm>1d#Wlc)f8eF+H#jkLQY_x;zVPBWIrl{AY!;tR_l z>^PEHfDZCtnT1vOtYJ)a;$KqYCy!WEFz#gEivg5V2y|*)^xsemcH?DPvOMs*eb$el z8tXbEF-%pq_(W{7{(qt59I1E3FX@DxbSyI ztnQGdDrqJ9;36!#GWOZ3Fn-=7pHJCX0bgJHkL}e1CukaHvW%(ZM%JvC z^iuD6sv%l?G?^oEXi2ceVdokFOc99o1>J(RV85{vI<|_qge`v9lI$8h_0W0aMd$tK zCAZK?{!hi-84Ext&M$|*<9FcxZ_Ohk6G!L&Po5mRNGX7zCCh)1GSOSOQYuLv9@^;x7od(2N#K&rTzzu zTUzB!n-R3vkyoXh8gxE|WlS{wfx4m5Z(Fyp`0lQvzi%~j__5&b7RF&cl9EiJS*>{p zqb1Y|VV8IzHgJx_(Q+(!5ZK};%RQX`HUX+1HxiyRhQWJ;MCr?^4)sw7s$q z=lef?LPRrpe%!ygP%ZeIv32szV79u(23F*tr;%CCazOPU9VYdKo zFk^H8;X&}?6f*#-pXA5iFErlC!bvrli<##D`}acjDD*JB1@V(vLe%eYhvJ1#0}*ca zN3R5;!hUFv!d zX$YL)d-35Fr?D_-(MnXz#?=cluL+(psQU~w9LJb2U2DLXI}!V-RmCCboP$VJ=E9}- z^|gDPp@tH%@Low##5#4vt?1v}izn3b2*1AmIrd9Zha!(+p7QSUzJ?ixCT~mYK`7Ug z9?SeAI!>{u3AQ5}NJrZXQB!_lyD$%P7+Vs$Go{c8*{oIQdNwB}-6u61Lcr})Gs#$ zkHP)N-Pf~gbc0pHiL#py5trM+frs@a^2Cr~eA297EV_A_Q;jEjh$)aQT~PHY{DY!7 zHD!dxJ8|ZY#T}8-1B~m27oq)P(72b%JB2sKiB(-lO*_Fyi7KxOzRXE`eg0#r(exQ! z&aN~7*Kc2U1(*AA?iOv{>0dil_G39qhRb&4lhzTMUG3z;8Ab!{G&MWML)|L3y6!bO zvdsC6agU}6SrMOS!@HVkLm_5imPpHB+#usFPvXP#0L!MYS(>@*gqD->^gs1k%@WQu z&5-%=)0!$yav}E%jl^4RRRs&h5}2h~Y!3$=6--+H$@A}lOpkqObiWX*RHqX z{2U!W)4>%Ohe)3Xsk5_Vr`Faskpx}xyC|(=(PD@Bigl*Nw=2b=On~oY2f*Yn3U!mP^E+s7o>Q1ix=k{BzXB`a-1-uPW7tKp$ zCj>Xe@sv3b-r3}>rxcCZ#)T-5_#XOReNoa2BBg7$#oWu6U%)B~8Yt6tq9dtdrb4ET zG{2`jpbor!K8NapXLcq+m+MTWsHsZzKxLP(ySAYvr2LP8c=g0)%Bjk-DScGW6N^u8 z+v(ETxnSSuwQH%d>K^O85bdUHSMiCTa)rYDP$3_VEH;~tF{iqhLxNhyiodGw&j|ej zHCWGQeuHY1v^8#+#|YYAX9{?e*dl+D{4Z=a2qFQ1RksC*)~ZO1tDhj^&6wyavuqspB;BtcodtS=B;mlMbX15Qwmb)B|^NE(AXPF{Otp zQI@#|tq30R@=zYq0P0L3)fG)P zdO#hz&S_IX$xbbez%)^@+o0LS7$hq$Rt(77Fb;ga;lb_ll-o7S&%lDexB409IOa)s z=tKDEb5#JKd&0Gr@btP4tEaZ6!;dY^mlb4j0T>Z>{zFc;5Yd}Xm_Y!mz~6!@gUz!; zFZr}+!Sj5Is2=6Rn{2xg3+ANmBBa+1g*}(@VQ1^DGJQ8@RovHr)KytCk`yMC1c6Z? zYGiYN+qP}nw(Z>5wr$&XviIF@yH&ft;Z#k{ zobG-aGAfCDBCv&yYYFVm=>f2M868@kVsE>Gm+cH=6YQE1>?EJSi~mB%uN__gV@BVj z38@iG4v1+*V)t72%dF8kU)*;%8w&KT7h^9p8&uByuR0Jc@%i;C6;U3eM9NJ$g3hbnK0C3!ndI1ld-bUO-@~=i(~7VoE1c(L%JZUKKBW zZKrgTNt07~QxG=YK-t+0_y8ywCpr}Oa9?0pR{Z9~N2S(pNd;L;_JVtp?O!GO5&ASh zt;WJ|x8Ag}6!)=8eL4Fy+Ij-Hz7t`RR}x~Fy;zD20YAC>YXE`@3g0mMc~je_FWj1^ zr6-^*djkJVlOEpC+@#s>=CX`~0l}<3<^($(b z#Y3HyZ(Z-4bEJnIs3%Np1K^9$orG=50T)e?b!s?4d?4Bm`s0T*BUemQPXXW6K29KC zckbyu8Y3#NlHd#4Y1CB+VlX1gtvA=G)n?qK!3>60;a&fjg~Jmbq(_JWHU8a z0|*HL1D{u>N8Rz~X3bs`yCJF!j+OI`%;_?Z{5A;TUvm}It>d{n{Q00a)O&ns{WaNd zsj@Xc=Bc0@cKFU*I8C!)ZD)$^CoGQ`FKtLp>pklFyo!_9?X{9)o{aq}L9R)u1neU( zlKwZ5C+blK6ay7*U7^z==-0pSiGP(c^aD~z$Rwffb~IKiLPF}1#z#&*us-QE9BYky zOAj%K3>Ih2hDPqK@4k?-T`FQ=11wtgJqi-xu4p@ zh0tTKL4^IVwtuSKAZY-mo}Qvt7~XWzm9WR0{8M@I8s(WGN?oV`Q&f(3E3Ig8p*aA6 zGOn;c4G0qxWg+?P+d#^ENC~pwOm6LkLCZ)^L}*?n&Sfwg2M8m?0*@OOW*nD4F9Z+m z#|t$6h%ZuA6E#dIX#8hDGo*Nv7@5QLG*g0=?4_OuX{Q8pJzDK!sDJD}t8_=j#I{2) zip?j+hWcYaiVInxx9PT}dy1Gi=gGdqNj^>R* z*~QSJ@?A>fR7FpmiedCd`r2jbvR&j9xcrXSBc6)hpvb?$zJ>|UBJ`U@?mGW79N#aj zGJaZ=rk>C~mXu?_Lu7n^(4|V-3PMYLBWpOo51A`Y|3Gpbx|Cu4_Tj+kBoB&AP-Y^VXl zE^b83a~i_TceRkgYwiMs>zbz7b<2WirY$^V`7nflWFBA>Z4gBNM^7c?6zmzMJ&=R- zBA4F)`|xJV=8+&2)Bz^^EIq1ssXw`wVmZ{r*YJqd@SXhdNN`dd%+Hj}71L+(fUo0x2 z#VRZpe8nEUFHZ?YP^s{4+jOEC)WNtRsL*F{{u9vokoweU(UKfPfL~3))=VZ1@Re&x4O#Io!XdP`30w1iN7gXjAXh86h{XV~dVVJ2 zbkKlC70-0seoADyt3->KNGj25#cPq9Fm8^k_EbWEX@j z{@if1cLOgJ^MLluhwduedtlbu5@8;2EHQpzq#HpDkQ2NdZhcao3J-^eh{Z7By?;%Q zs__vX8+avNiKc+2OEL+UW6pgu@m$0%xzec^Hn$d`J+eUn>?18bkSPZ_!r;K4w}(^s*Bpw z5U>3agkm5A?)g~MHcIV@w1>8@lzuTlj&!XdW}x4I9U6Dje*uL-IqD<_1#E^hE` z7&O>Cu;FZNR4KnfbU0^EB}@!;K{|pDv0@L9t-Uuhg150%@rQ@liZdkvZ1L>B!=j-a z>IZ8n?wmpIwgG1>>8pbHU>I|;uS}wD&F{%4?vDVm$^jqVrSnaksOf|FA^?*o8Qwu` zrMoP)hl)otD3N86dDdCuxQYPn)(r2u;^Ok!h3KV$gizTbT;KEf{YuR3pBt7KttXsz zuUjlCC1id$n$6cvF`{$l>+aSb^H#V9K^K2il1C1n5hR;=p!#~>+@rgqB((Ar=XA_o z)$fvu!k+5NvN3yRS0R@MT4Eb&1`glBw(c(1lt6Klv{leii)0n}zxh5C=QB!jV(JA;CbpU_bcciZsO@1$cR-30gti{{9S zVU>sLpyWpCufs1+WJkfo1e=y^b`S1tF$L&l1i6x|)+2QHiHF|4{F(qohR+zo)KL-# z*QHWV%6U*+LTYbOgm(dJm7m3MAv;6z16|a+km!d<|Ik?#<$II{Wnr}BiBuhfQ-4jy zW)WOHG=xUQA^B+{A5idwnT+Z1^l#r6eEN^u&d&}RUPY_A7kfUGK`(^^r*5b=!vdtP z!r|U~hpu`it|~=0fm*AdiAGZzKc{0(NV+nz<1@VeGOi#xJv8L>mb7(0NpIMeWx+{V zW5`1LT6+3hE|E5xbYQUYwGz}(vzUeqrlR-?D|DN8``wrgwueBX|f>}5m)l|LI9z#E0qxkhZnNkO&b1Sug)IOP<4LHGZm(ocf zsbg&EzqMQ?w^POMvN!_?jkcoB>6M@$?=0<97Dm+}V0D>Y&K(ak41HEH5FTa`I~zjQ z2F+%2v>d2CgwZl!)*d!VG}LpfI|6}}kvH+5$v<#INGg#6pj&lh%JTE}YT{uZ*OtXP zdh8@2H{M%@-UUZnd(!w?r#UT2#fQ^Bwf|%I9SZcr*K*BW4VXeWCf1 z3OQj4KhLt%)?szk)t6XX7!_u6(BrO2Ae=y@S4axaukjaBP@rW<^20d<?lSrW)4>pIo0ebI;mS4+I9#s_V>sn(pS1R|Lcf%uj?~EX=1=oef#krKbX!!Zw4pX z@m@W8-7gUYXR^t1O=y!!|1*^(ZtHN8e*tZwlYzm%xos#5ABm;i6z`aNd;jK5o4 zVE?D*#6XW#Dnf1Fi(%-v{f9`!>Uumm>v(85FPyZ?Dy=u{dgL`IHAo^^b}`Dx)TyIt zv^TA2T!4fjF*gIr?FOhXN%?(Kpw6PSvq_MEE5`-{z3m_LFetl$gk<;nc$?o|eKtCF z5(6C+g=>B#(s`L)Abp=pV0H-p0f}3apb2WQ-XkXe1tQ2;bPM-JtaZ7IL1qwSWO*;| zF@L2oOIuw5U%_gBGVk@Jk{*8JGxCW#HhCULnCtsKlM;dP*(~Bwj>F3>ZTfA3)5wrk zbIBcNX}hop8)8@Euf_W6P2yUl9Ht~^{ zo#JT*r9QxCWaIJ&OCJedl3i!*u-b?FM49~z?eBD*-}5H=q@3to ztA;?D+sYEAkqi>uS=#=`LMDwItaaAF^>alEGUOy}go`W1i+fR>tKI4Lj*GTy17Nu(Vxyu`rM21RM z;ko&-y~5hMTaHRax4vaw7TaRmI% zfW-D1Y0)(9S=9rN`-AuEs8hbk(_LL2KbPmPx`Wxe+N3Ck>6c@_LJvRsCn1^*BzV!y z+JozZctkAiIX%MPhL*nSqIM0~vivBGq@S1*+Hd0*{mX#K!=sJbzZbojNZlvBzW$BQ zO|-*mINJaur>OZ1A^Hf?9yne?&Y_oMe>R5Kj7EXyj!5mJuh7DR(erR01HQe-z#>Ud zuLbn?*N*I48!o`2RN&NBG<8n>f)X~c`yC@gcGY}=UhVIEj}WCMSws=+mhHCsD`(B5 zr7(Q1(@NoQ;6D%8$^&ughVZ^*66oFqk=Vh;V&*L3lkV2<&>^~`|2V7mJj^1(^n_sc zTrRU9!iedB93ICSrAhGBlkTDZl&cxS$9^Fqt`0ne^G4gnZy@ip2f^r0Kd{F+YVtAX zypH0tp1gc07X{GXVl-fx?>Ag;dC}ZYgS;My;`bWpjWnP%$0dqsDGx(PXOn*#RnR-+ zh>He&Pk**fR^%TeZv-iOo$t&$7NN?=Py4E%1k{2|#nB-n^cmiO_VY6Z1^q#O#$A>0 zwT2ngEmKR1zuKIYTVhNM;v2%aH@Lwc6=ubIMIDcmk^8Mf>^KpaLRYsu_~Z1qNH@Vq zUH0;=D{P^_4J!VXHnN%(qF6~QkIW^R-aY3?c&>7ap5_fIa_XVwwp0<=PCLFY;hBRd zvn`Ry25kRIcOw&f=YL$H|NH@#s7d`J%p>$% zs$I2#Ph!A&olP_G5X&-3ki{~!Y~tF4t4GvJ_=ECKUJ&&1bWXB8Xa4OF2SVHJ>G8R{ zy0SjG&w~z7*(!`|5 zpyi>)Z!vMS4_f2OTj8CXb!-QmqaV5O4v}|r+v{_;;~@{YQ{lfY0Gw1@ORi#l{M**~ z{(-Ah*3juf0+a;av`#&(0#TEJr#byN%SLGLzybUb-~Ec=84OE60bQw{>2h2-=OrSW z*_?gb^uTT0Ik^Gq|Fn8=u)nN^>RcYp&ft7}P+@%RL2rQU%(j;EQv1IsF*w z#}dli%9~WI(Eg6*MjaLtfx*q{i94=2{VOQ3KO|;9NhVEESKR?>oi}hRPbDR(HZ!|% z*aYhBf=b8f!Ag&zZRsZqIuwW_&#~RlT(tvZnCzkeGUWZk6nHc!4f>}jul3)WU;uB} zJeryCeC=W9sZyAyN36qI>TyQ?xZWcV#>^yH&X{Lfcsip+K%8&iP!e9851Mu7$P21> zb!u04Frm`ka+**+Bv%4L)T1b}cD6^s{+Tzv^4(JyE}~bWFjvMR8iJQ1gQz;9lphjG zIor880GQ9%DDRMX=n>C^|G9wZsN{u^jiM6PH@k)mK~idJvhdOKFcynkej<2l3m@W1 z70wy0bXwSlu#_o%g4=i~@1N)%_!E-of{*Xzn0OUsBll!s>NXUT$5niZEVfjkXnh24 z99hU6Pt0a?!d#pTXCaduxKKR1kim}bqU2wQiSkc$Kv>NeHq)Cpm6|C!I$GtgVH5jV z|CC(MAAQqwoHSsBfbvlOV}5SDJRjPDkv1i0`E6kijuoF}hRtX+UvmHP0>&!sqi)N= zTRBnmHZI2%y)Exd+iX4mhY|68Ox^Oi^rZ0-^ZVz>D>|hWoP%CgN$qTVk8_2#IvnQ` zO*t|(P;yoFHCOiq{ebOOx0PiL#5-K2aful%LrUXL0Roq;X+OqIcyLH z-;CzvF0pXb%02Qw(xk|f*1ci}+2P->XZ5x*Xml3ZU62x;!3&y@#<8QNK?DV~kbG4| zP+^7=mbfQY(?3c`W37d8} z!isttn!fHnxyeRF>Gr;gR%NlRCwov+Tcs*(a)V?CXg4p7gOZHxeaz)|Wz7!5O)KnDsx~`qX5p&LP!bpkp zPV$e2UlU7M4+n<# zc~W`d2az4N2yLG!OV^p3Qb0R4G@+g)xV68Q{#=dT1jd` zGX?1Mc@;miq;y+~4Qp*IJaWF&3QsPzJbwapPcC+%G}S%o5WVZ5ClvNd8KvwB#=7D( zNt9k-6=!Jjg;;y_wav52_ckH7-P8uSqPthn8JkWH&}tD&D6E6*m~=H>dRl+|uhPrK z6ezwx5CDK|xc{dc#N5Q%{@>(oR+F+j{O`#vy&isQujpuN`ynbKPs9Y7AV&*70SwF*nlOVpIMS^fn5C-O^FKEctkXp zCLnJZg5f$>YsA8hHE}vCg~eM}u{}5D75k+LdQud{&r6nX_@Zrs^QMnpBgOrP_ zOJ}qIHN2dclW%Exhf?}r)(ZMIus47wzY!Omd+&e! zj^(tw>o;|D@nUGxOl*vI?j&_NqVq!C?@TA%jwhWA$*Qu3_yL|6o(!sLmat zFK~z^%}j`6wiOUvonA$imB;1t4C1hRWzD@*Ix$Uj{b0YIr6L#{_3iBHraMu$irxVg zx4qITcAKt>qE`yR1W@rH_jKJH^U6XxiiDY`)p-n@~e7& z#_=Wd)84hSRdpNRUY*6Oy-lkVV=Q)er{K&A1dmK!bi~EfCxYNd@+L;>=H3f=(vgih z;4qs`<57+1hCTR2?!-Qmod;}Mrbw@DvpCs4v9CNo9qV@MLj%R#z8P*r>C?MtETURh`MIf>BXRA z|J5m`2$4`m{w8FGUNeUYwT7$m$7X7O&4x++(t@YW<4zf5E84?vrnV8?0n~dBOlTFI zIQuA5Wc(LlGo1@Lgx~G3Wvl9RyvJ*=P?w)~`=8>oyGx;#`9B}c&OfB%|LLVMx3jbQ z&)R8|&~F*Uj}UtMi4xSEj^GVI5GDv0A{fHjir`#mq;2SWeUphK_;H1!79+6eam2eVfU6e{n0~LBt)9JUoKNkhVS()GB3DKTdj8K2}fJ8!< zPaiT%{|cf-Fg#Fl4|;Q>#8;mEay?Yr3Pt-&cw)GI-E;H@wiqa`lW`AnWt=jC46l)| zTJ<@@j(H}&MIcShSKK}Sv5-%#w-}UDyU*MAO|Ypo2=t{JbAz4!Nsp1-O_7QjCug|Z zSZYpu!h>|yKz<3Q4frX6HZ0{@uh#F`T&|Xh`BAG8`!TeD6O@M2Y@pvEzLaCdB@?Xa zyvgfkgwNW}OUH4C8~inDN5wNr{|@CRZCnUCtK;%uEXDP1#DOnSOo_<*qWyO?=?(aQ zKG9L^n*rRvbizdB|KrQCu`@RLZ_ws{5QST93A@i!_C=M*qZsqLUT%lxMcwSa#wk~| zI;q|jk%yTDq398aVcGH6Ka;=L*Eu?mMJ=`BDMJf8q`s;5|c=p ztQ2gIx?3pQCJF+pF*An+O{qa8gPwz{k`+vQnOIu$LGmE2a2DyXNha9F0G zG)&KBNo-91TefLwltqncmrgmSoN9Kqos%7s%M~jZjhC#~^Mhe%bB8b7IxCl9S+37> z`L_o1Eq9}XWV>Gv7M7&ermLkQx+ap>gUr8~I2CGod>@u}%S%=&OQxi^m9Cxrz0N|yyG|Y}A=39(EU+Q#_D_PYR z+Yf9q+sl(3&XGGnaI^Y87dEHKxw${&a*Ox-)lfPouH=nhb@ldYS&DWSE43sBQnRa@ zjZ~}}i_>Z@O<e(3^ zs-Vx>e;=!LP(%LCwrrPJJPod|XYHEWGg~_9>3cvjS8;g&6oO@=o_;|%nPjhzqPmKi<+c3TAEMQ! zKj{7I5`q#}Qt}fX*Mj?E#K5YzlC{Z!HuIav!h`|w#W4!@*ro2uQ4TSb-An=EsXf99d1(x;dop|^HkN#y;p?BI|+nsmWQ6@{IEm)7I;SwszNtq$PS z(Y16bP2LSm+ZgJ*ag8~0jQHJ09k?u_jM;3NS?c$R9ez`6>9UO4_Rr*aA)#YeL@em<=|KX`Nrr;DO>+p1 zhRp_v4EXP?8f4z!xVfR!vTB8qfMGq1oP=7-c|=`nw{7=#t9MpGT~0|RimTz;+5|=W z`&a%ko1Qx?!v>)2F88%zY26kfvi1$p^*g0!7!u&9Wzc1NlTXnMe^hh3!c#=K7(FAJ z57k@*bP4uA%%onUMW-8Vry*F!H)@(q2DZq~VRVrEu@JCQ=5?pX+u`Bm__68ze7&g& z*~OYZf?r@t_tHDGaSswApvPOqj!NlgjiOFqiB<7uh~k#H773!U{al^$d!Yh^T;1%? zRc8HyQuc3DT3v4U=e@P<=;z_M9GMyY4q4nwZtu_g)$y#^<0)U)=R5r4ViI3>@IxJL z1^8X>sNQW(cDMIs@8?O?sF#=5B%>7#MOMzY(tSgDthstGV03?ehn6RhW2gu?5YUE% zrcQ0CHnd+p`xk1u!AvEXvSPi9f)K!YZlbDzrJ&K-?{`>_G4O0C7Lqm!y3#36AeU+u z%5QziFw~Hf7~Q7<`!X5)x2%%>5q>O^_ccIRMUZR2+&LW@_n)_V9QLH&bm`F@1*x(m z(ZSeS0Eu(Gi$ckd^KUSUHuYK-bJ}*12W?}jt9t8gQgUS<; z7KlzT6{d82^31uvdovAFtbbwobzLc~W}@KS0;4R=@HL7OumBj^h$ObpZ`);{OOcXCF1}h8ubnUG@~VL?C`w^Ko+NclZB|@j_|x+}Ip6VGa%LlxW)5Fy#(+qD zTCtZ%U09S>|AqqYLZ|t(NV%}bZInYS@bwcS0Rl~2KUgeB;-;uW^C_gGSag9tC}FOD2x3G&sbio4?%JG4;dl#H}fIp%t*MeaGD>dsf+k#YuGauX+m^-tS zbl=L<*d-9VYn%NX^zQ4^%X;_P0=g}dT;+P<#AoK)b_y{HXkZMAaPDV%oXWCc{1Az1 z2&?a4ioa3^O`owizI1AW$mH@ip`+8)w_Jd0ulx_M-A3|axT*SKN_$c^3T3m704==b z^TF*xd1!smp-r3exgpQL7cgl`(#Uu-l_y`n+2qKkH2lidPU#v#%|d15JNv~<1uP`f^HI{1bbM?23PNo1+244YL-RG9Jbe0oWi2+9Q*~SY8i#~BSOjT~)(l*_ zVP14g? zT7IP`Ru}R91dw|LM1Pn80|*Ifyk$Rv{DK9~rmZ4B-x}-S-iGg>le+?kZTK2%I`L~P zle7(2;3T4bi@pa2?D8ZN%wAsc0ial&DE)86G}UJwlm;_VP_TLSnOlNiMnj+?ch-r5 zG`xF@REazMGl>?oZlq0!=r&q4$uFZ>a(Ojz&q7K_bxKYXrha zim%$Bin$>G6435mG8ReNx`?Cb<+A7A2rAk+KM7O{Lye5{0>)UKnCV>@Hk%Z5o{kvW zJyUJQfo)}E|Dc930fRb5q-uxOL1Ku_jLD-0 zsEIQ%{Nv@ERJKSECBPH}hPvQ}G~bR70rmxx!#BN;gpPo;ipavPDGvQ?^?vvnGE_X2 z?;d64(C5d$G-j1S z=@{zY{ywbwAI}XC(Hd5hmZ$mfo+F}IgT2}=r@xc}kS0qWMsEaeOTs^2t_9b)A-!?2Fj5~spSLpT1H$S#Z1NyT zE26cqr|fUrlTASxob&~nU$0%|3;$}g+zUE`D&PtK`0A@<*uPf20^AM0hJHSA;}DCf zI6r#W86&8*%5}ZRDIi}!8|;FUh;rRaMTiD5D%yV$lFsHMNDz=GiokS^979al({YHz zY6D%y1ItO)v2D}TI7nGZ_@d!TUc{tYJFE@|`mcN5W9N?ColN`-c$5|*n9S`hnpx}T zc9SZi=TEdGh}A)+y`P3wS_(;q*Kx$- zi@Kow>k`Gvpo|*gP>pSx={Z7&1RMP(&~grCFIqKq_+rUdYaH3pT!23KN7$17f$oF? ztUV_g-iV9v{YDD~$H5YGbtAA=o7){2OE5>P8n3(N{W;PIC+;A(?BBy{=+rct8EEkD$-TG8~D9xA&!hy zWfQ872c7f>S)#g0xoR_yj|-8gTSHHFl}ECL!B4z*zKt`mQ?b!;$iDnHi$~pNBax|(62Xq- zk3hHI*V(-6G{GL*ry*-!WiA#CpSHEq>gh{v*|fjI)IaRO%>@9=WC%iN-5{dyKB~Z@ zuJ0Q@`Ab9n#1T*oekOdDEi%BHovZmb!7%kWe-kr;z(nY2wPKM0k+U zgyz1U-}CMBjE-{P5r3XCV@RoAm!NiS^2J7OG`>@a4GZXn-!i>ILs3Oz?d2ir34}Qv zsC<)0IOS88CcDA$95fyy*LP=0q5QeT(Vm<;{46%y-pw{_mMKsf?$k>-9rZGkqMNhe z-{+~hYw9BvU~FstI;MX^fVfl3L@%}pVCN$CbVg~>Z9@$#izCDIWRMrDNOL zIZ4{B%-P_Dq%=i}Q523?n$={J;}M3bEM_MJ)~(GC5ef#$Dx-}U70~Q#qptUuIdT53 zg59s;emp8K50=B9!tyTmk%eQEMP1>FR#!QROq_axalwm*s^ff%1r+1cS_1fahECgb zRkINW<;Ew*l8u2;>@}dpZwVZ>vU}*>KO`qjBqgmCn?Fr>DGUIdT~nk(@Umq_^Q9&No-5zfTH7J1|E+47@%c1G?uiS>|D%F-7QCP4ZzRm?d?9PjP{*V07mdq zK7EH1Vaw!Il_&BT(&-|TIGN0jA~j!9pYQ0Xi#mT$CX^Hgv3hdyBUVayiu4}eVMP!w zFu%h@j)sO$D)&!`x^h_d`lO+FLgZg{Gm-V>s0?7sfI!Cr=hnZ36jt;UY8)P$%w3?- zrn2J`q}+S{258n*J3XGYxnCFOt@Y|9MX`V#WMat9fcrypEdE=8rD0@di58NPx>1ti zjQz*hFml5`*}k`JZyYXx?}91*H0eGf`>m;>{*cvhE~EYUg4@y!j(yPp1vBNx(Tkb_ z!{&`qESMFe-x@Hwo>D|p7zacYZ3F|#%!Y_QE4~l>Wg1TN9|nRCyNh?BnqC|~4x(e0 zgnJQ=y#4aOHSgXa)mr=;SGCGAV3@u0( z5D`LI_cC2P4vG=T04)zOs%#l=uzl(Ru3LHS2l57+3izsmVFTV%0(9WiH^pXUvvRU$ z(vmI2G3m_=dmhg+QvDpUsBIn(?$ZAJbeCXEa~242TTZatt>vvUmAZf=;ynqMsQoy_ z1GN^mDW*+~RGXMKr-m+<{Iu~*XQ&(?Hk2z@Oh+B>NO6HA@TGm%%+_$zPW0;Qs)Wik zz6C4`I2SuN&}uZp%=v0nN!)RvPW=x(;6+V zYSs+quuOr=>XGaarD^@cC?@y~(lAO3#QBhfA`_rGP;Jz!2J&yrTPper_?@$dIo$80 zwvZfB3CeJh$+2W2DcjNA@f2tS(|!B?vIQg6fqO8yGZ5y1ad_UevKpr?c%a(3_zUd^ z%b*~2yE7e1*BM|L)*}2Imv5p!hw<<#O{d10d2%Fl3Cje^qzNIhPAE`r$; zO9@1y>2@QzqM1%geUb%RUI`edNUXo`gEnOumygoF`h|CMT?Y0Fa8Rl{$<{rjBS-Qz zaDzit#ZpY0%V)p5OO*TT!qbz;ZLK4hjI+#zttq3pLp`J%9+}NtVomy`R?G>4SoF;l zwmR{?h66QF`?$RLRGUWQ5JozM1vN|*ke!+{hE$nJGP)iEJTm()k(GpHcr)I3or#vz z(u#9#EM|G@TbSP`GU4O$7FXr=OGD=iK5{#!`vTmyaQS(0NG;?AJD7qy8au3cpc=n7BbbzS+}VM?|7)AKdZ$eiR0Too`3G zKmjx%>39$vh144ihZFz@%`ndi6YL`A(nd@{eaNcaCSb9&!2~ld=A0Whn=FpZvG3!j`~}ERM_ul5`}tEmr^uB5d2RxZ9bB<|ym)MO$j}}v z#;Y8o1EB0z@{4%Qt0=Aw915p!pKol>>KNi_11i>@|Fg!xQ2a~fmyCt7YjHI8vp8~7 zavRVLssU)&hdF;yq6Poi!vu&s&LLqjI5dJJXIM#8t2=;?JF+&CvQV4hA_^obk0rF8;+N>@}*&xEKu0E`CATjpHQZdX+ zq{7&)ETBw36fhxfLds}SLj4e96+3gnFpyQ=(``2Qej|lHvvXx4VaV^Hvp(sVfIaD= z`%dQ_y9Wx{q(gZ+#VS~I99h!my57+gMq}?-<^i`U|5l%Do`6Bv4WBVYF`oDj%iVA3 zHTSL*slK73*lBk$mMB^}dzy&*50b$h|D0v6(`a}8&Qp?ByosV93Wht z$L6W_b2Ya%5HLTjJhfM`=(5S$&bG)n@CE)sN3os3tZo6^c z!@AlntNSz>BC3^Um10y;TpxU(v4+Ge#PsQTDnD@yO$4U^i)S~W58oQkD=JT_oLm?? z^QkI*K-Snxw|N#-SgT3Ar`3Ufb+X+s(@eXkIV~Nrj%5SA^p1R6$RJLJ`d5pIShqH0 zN+p_Br0@n({SgDjEl{+;Alw;IFtYG0uAAfaSyu|qsnZhR=mO~O;7n-wc~Ape+C_DKN1kFMdlDkKr6r{ zz>t(9;m#+hBwpQqaKf&X%%Ra>6P&Y2oVqFc4i*ph?UhYZ#RYY|Oc)l_+4P~X*(0y& zT&R}&s>5@JK&;ewdzMsNp4!Q&;}puRotZCh@OB1VtUSS#Z~Y;2YtS&9+C)F18s>CxBct3WHglr4DJu#Y4&U`-uXTumTKa_+HFwh#O z&3)s57L2a}L@>N~e(wL(5o!qfPCcZJhX z?4nXP@d+=Vx}%y6YE=@!RM_6tb6oc0EJhM|n@BN5=t1xwPqETJ9SXfdZO1GAg0?UxU)oV23>zEz?u)b2x9w_ zxM+(ueaPo2ul?(R<5^`40B)GPDj#sSqI@E3ofN~;rNT80?FS`89bz^>QNyZg9nq#- zg*+}OOgb0+?~>{9yjxEsbWXB8}u5A9mQ591#3QEcu7!vX)JDlU>l@e3}tBu_^@HauBl>F zREMW)4Ko&wMouk5ps%!px09~0O@X~lrSx?7n+vaKTPH*XW67@^tm$rLYf6*G9h7_- z#^gR+i8tJ-)DiV0R$-X3fR*eMguY|vTpo^Zs9!Aqn1?(|^W-lz@|)64b}UDv!NGAd zMN0742a1gkH3JhOLufFB9H_&92y3KDW)%x@zKaF?Gl;!%ixRmL^fiD{Gsu z2NXPy9R7Voieepph@_S^c=4clwG4<1Y_zdM-y#-VGcNu5yblBem<)dJxk9MqKz^Z6 zZu)uze0=xNNn;?F&mENFjWzE_g(L3};h)lw@9!18o^j)U5*EwAvB|qPtLut+Gn>au zH8TJ-J}})K=yeX9D28KAw+#Pu)j$<*&pfzrCd(6trR?uS@+{iE^*eD6hoW==!I{an zwm9uToZ-E46RN`H_Al|f0{|Bo$KCi9alD@U~- z!~5%){MZ|9A4 zz_O}{73F|5qVYMFacSc(`IB?bWsjm~;cNE~+bb`=E7)IspBn2LFF-=U@SD!@P9S>v z@#>3oY~#M!Kh}KRvO?}Busa6_mlSdeQ{$GKEh$=6YSl{vNJGce1=fG#-A5{lI_ggF zUN$n4W>fE$p2Tn!wgPLzQDHVqF=Y*aP=lu!OUH2En&nh$a?jRtFV34nfaea##0+@8`B4HO$F;q}oIM7zCTV!Q?yi*Gr zs>KIIUo?(V;z5y}hQ3g_Q9H}h&h%y(Q<$_#n@wQSz9~Zqq*7k8@Kh33N}d5mvJVJg z*@XcOoBl7xxIU!DDvE+dbUyb=az<%zgV?mo;4Ypf*4!>-2 z9)vStX=(@ZcyC+~fH4d(tuYiXQ&tr)fDi<`R_3lTP29d)Td+9!_>?pDs`fHYa6K3^ ztyGLwYN*@zprl~DqfVAXu#Q|%&R6|iH9>8*J!aue-wgeMpBk3LC8pGP=Rl-hs_s$a=?6Ml25KgkI+b z9LSM;Df*aG1H$c5FO(I_>pbV|Kf37A4hNrlS9Z1mhhbaFOK|G8dg+9jOU&YTZFJ`m zg)yV*+G4eY9}FASXtm|*+J#wnm?2eS^eQAx;HlFHDJ-(vV-^}9e+ZqtH8YZyp;*p6 zhU@TFy*t`_ZT0F_fL_L0N3f*7EnCx}jQR(E*a_N8Q|S(;*Z>DgYSJ(UAkKz&4~;^V zsZqzCz8t|pSSYzh0Pu!F$Bk0!yYO1IgV3aE)IicB^h3Om@<#_9Ha*Lo2)A5&-BP*| zQ-&m3tVX;^EL9c8L)%brF9ZX@*Hq?fbf-R2@p&rVHTRtUYDM{H7y+3W2o(vPJv2}_ zl!0l%{jEx+<-_M_6aav9E1(EKIVBPHzV0#)`?KI$?1`!$vtZ{uPAFFBmD8q|GK<#o(`-`GOH69Q^#^?*~CSd=qonc3>?Y( zP>N^l7yqJ*EGR*3XOCcW(mKkm7MWTWsCn|FL!ygaTRL~Up3Dr*28!u%nk1{rU>aMa zKjVQmUDPI+SIR(|6xz5UT!$tKlrVSqs6(i(vc}K#d`-C^ZGD~S48~&R=?`g3*G9*Z ze*H=|x9NTcmt;WYGzNW_+VOp>o{tqHrR4U0Yk)(~*=VaOtI47BdWb6@n2B9bd*ua| z`W&>)Vh)qDL{U*FeE?y-6DbqXUce}T$d%!|`V)|8BW$f{kk}eIPHJ7MePEyLM1MH` z7PwIw%CYcT;&S-mg?ZOTKWO%^?mXDQ9*>=U&-t^$yrYy zK1V?A#~$98YIF}*TOgG0ok{h``7%D6$Py_7n7Ut(iUF<=HcWPe8@i|7YH0b1di01L zG|JEU`m1;uPiww<`wCY<&YFbn{Sd~JjVgDl}gv3l=O|wr$(CZQHhOtIM|CW!u$d+qP{@ z{n^b#%q-tJBk?lNJvSpYP@|(>5W!kxG!SjZx26Z4e<);y=y4I8hW;o;nD6JQHO?PW z^m5f_;4cwvVy@0_l+13|6ySPmt#Yu8*%g8a2;%E@>;NSlyn$-XFcBP1?aUpFv)jJM z4#;BJH|iu(5djmN7ndWyy`W8R_XTZq0y~^cWB??9`ChW2DWlXldhW-rA#Oq;(7E-t zt()mwvZ=GCS3dA`=3;U4+w47)OWSeMlMG$3O@)&q!1qb~GZ%-BV5mQJJR<$Zp!xOR zWV@bO@@ixSrd*<$HwX@1l=TIx1pr33l05tj^f$}%{M{8Wv4~P9-Ff1G_h6pdM(f`& zq{HbboRm>#u$YdB;iw<2V_=?7@V;IA=m6oe(c83#+tC3GDsVndKYDkQS-QEi4$(hp z#~%8zV4YLE6i5l9cJl)7_(Z|pahUYs=LY6RQ^E=(XE;a`;5|Hf$BCRU^q)N)@Uqt= z)VHrJ5A_x>qgA(?VR&A=yPF?QBEwd^zH>g}A*uW>TTScRlftxMkG_dUJ)~ChPya@g z5F_dJC^PdO$d}Kk(edn0hWjxM|6=(UZf!#xE|J?S_RC>cpediF^qBVcqrxMj`3bS< z>W6@H8@24m{qXj^5d;vS4%Dt&BPlwK^i|YFvr1O8tr-ixmZ=1h>h2|gL(jQpaU$N} zNC3;v#^NG6H`ImKh5?2}eDi(Id!LxhI?oU6K3e*4Lwuo<%{*D=~dg|@j}_`#zvY| z;31SFRh{9)mtO3V=ZTmh1A!zx&L2LRi=w2Yx}Q2#==~CheM&Yx-C4CcB4G8h=5EBO_PD_V{y&MzF2BVp^eB#9Z#2y-OC{$-em(LbJo1aZrY# zXvr)dOv1YTad|gSVx=44cddZ}e{1wi?7HsX61*g*kR0t^$)B)+UoMZ|ri`s}ag!t) zTQ5p4nu{0Rtx&|!~Q=>x^#Rs(Dq;0k?+E*M{E?1#yg2T>@tZxY^t_1>z;|2!?@DR{aVn3yz)T3=Od7Duw8V zu1njxlOg3y`gqjC&LM-KC~8bl-mzDhUWSb3BRT~sUjPIS=Ql3ScNWj*Zo>&_%;vDs zS`TgFwVXgdub-`B#3*{{U6nV`(i~ft1$B|LNP#Z@*X#j3X+1NPy$gd^%a!JJz-4K) za4mJ4ffbTI1vTfBYE3UY za&yKwk#LBacVL{hzQVIxVZywr$*Fdy{IW1x)D6tmd8U1fXQ!EVd1Gl}y!j&Ycw2s~ zwgF|dpn}N$$a&JEO8Rz1GrN^knI2_FkGc&(4UXbp>ndt9Ykh9_OgsEEpJQfk0d~pK zyMF)KTIMJ>DZfT(ol197TQ?}+lbGA;WYpY`B0}A>|K$G`EM>$p)};^v05rS*Kf~^9 z>inP9_y1t7|3N4>IR4Y}TsICbO_?D_*1lC`l}t5qcX>!x+nCe6@vAJ>3bBc$OdJfy zy;6B@)$auWA~@n`e5t}-Srj4q1t_;H9+9zP#Jp3!+m~FG#hYs`nno|Wd&B*`y-(CF ztJy^7&9qWf9h1m9)atno=qlP?C2O&kP^^$o?n=}gbIX;~UA5RNmSvNU(`NltQC)4p zRSr}Yb;>$&E81*pN+DjEeR4#+iPKl~Iw+$m6h&?Mmb5?WCE2~~by2aKsTyF0hyPG} zzST&%lq98{RqU}zZdzOxWN-hO&h&`e5szZAcS#vpE3}=T1hV?2W7yAP^cH17rQ??! zk#5jGH`Ced_ZvW7m4`6K=A-^vRbG}6 zO`Qp2syDarLRywyc*ytf{M~&_*ZX$Xkv(H<{i3WvTXjzW5PJ>%-c-4((1fT1t$HM1 zuq>*Sw%wL_A!Dlf?wT(NH^+N_t(dBHbxN#_1X*@aQVj**q64V(d{BDX?i#n>r;(jj zQ};rCD0(RLKt9<}&M8KnUBG;WGBX;HdE~NdG!uj`qmr~1I5>~&xw+z1xF`&IGuO6B zKju2pq6ZBPW z!sJ;^b=3W^4K%HNas!NR8dVx5oW-B*T1MT~tZp!J8{b59N5+HucOnhTyxIo` zP_GTNJx(>0BIUmhU^d3Is=|85+5@bqL15>A8hu6$3sf{YuWD7oxnI=|1Zn17G&+)6 zDwsK;p6OYvSFJk9!U}r}((l@L(Y7vE|E9K8s#!|MLJUHH)+bwMuBvUEXWDvQqIr(z zD-iT1F#xy?)Qw3#saNNE86?ZS!SB)2=+6N6;-9aFkVKTLMniV+ zYjJf%;w;&)IU?%>;CWEM)Y6FcI*c&_Dm${tx&iB~t8yH=}ZVjcvP8!*A@2+*Yh z+=)2AIWfy?Q|rm>p#O~|5Z4aP^kEb8X>0h-7Sk@TjW-uGq)9a$)T~t1b7&U{04iX# zhh6b`zkj=4zqZJJsNRrmwP29je9%dN(OsG^!VzgXsF!~!pWnOCN816ktKu1kR&Kj6 zr2_PB`brSzkVtqVHOdj&NJ!Rj0|*Y(8Bee4La|fMFxXrHg=Cve`^m)>OVTJ$562M#HI~`z>=shob_MBi z2O;%a(OKmv?K@I5A&m3+Ei#fu&mzE+w3=Okr53>Iqj~0*U0%znF_3NWw8YhPN-HTL zkn5Zr)XO>A|2%+Q<`h=r2F%)mGS4+Zaf5TbN`mx@fX2D08SxECz;cw^3;1yD?*BfV zM77Lq75|C4V3M+)0Kpx)n}K6H2`ilO#mPV~lGpnHKW_v5BC!|H+Fe}d5gZF_c&Mf6L4iW%c#FzbZ zE5p?#DfNYsE7952*l=79xEm|jELAFG*z9?4>`U;Vd3)Q@9# zS_Ei=A2&B%*yw?A|M~#26<@Xsjwns2$j!z}eyQAcc_v$L9(brfH-)D#(fA}0#V3Iq zlt*L(04`Shb9aJ(0Vwd@BLpEcE+7B$rnemfX|%1LN(mCld7mMCP)9c*V@Sdxe^x$Xl>pGf3O7ig{HPpBDbLe>jE{T2NKd|T z6>#yr`>mj;w&94LIF9!OfKr$@ASf3>nwO}k;6VO{ugR6%1wRP3rI&nY+GJwPt~xTP zxd7Gz)M1sqvQmM}D+H*7QX?-Vb$H6qT|68MDGP41!=?9Y(-%;&@?a|4Y>QX)L~xGH zS;X%p*>;i>s_1%8O5Kp#u>?fE^)HxE`W9a7>urGtA36m$-4OhPY{zlQ^c)g!NT3QM ztd&Uqoq^bL;YcsF3qjF-j7rCHhl&NHUeYyWEtCR=jduLWEJ{5VtmQ~CI`;**E68HY zP)8&^dpQkP8889Czycu?y>078C5jtc*TY){%1N#u?q6Mg@yf!@SaNT@1@Lp=wGp%L zf79RNG_@gAz?Dw(aURUwlZw@li>A52oCXrMv{LX0LJ|87i=IdZp_((8CUPT@dE_`oeEkvToZNI)g=rg@VpMZaNMScNZNf`&arW`1vA^cK8k3fXit>A<4~)B zyzx$@nz}H!75UTw0Ex^pfmjfQ$f^k=GkCnf4=LKbIU%Q^Tfu&Ivla*g9xfgnSOhrI zFQP-8>uZ?|;_}YS{+kXg*rFJ0nEsb%?QkNTePk#)Z;RTO8-?rtG~e0R&s@kN&erk+ zEk(i`3W0MxWyb5vjpCN@3rFVMziB?KEbIvZBx9T9==uxAa1@|Te>2nl2tc456_fiZ zcv*B0cnJPLTo>|&2I+ujm@fD447SBXq`6?4c|(2?>g6GYHXvsL#mXPU9Bb@mi^-EF zbKKlpt>)GB6Rtl9$s3h}r5yi)+p5*P^b0;v3<`?3#C;vyJkn9JIHrooq~EW|0e6iR z(i>4O{nSzoKgs=lp1qlNrC@P)Lyd$GjOOU#WlDm09Seb+#bQ;w z$9gHkC|=$nBhQbCec{zOJYHOG$NY;v3|{jhNMoyoqD&y9HTxNbH098ko;yy)ouBf6 zL4yk=l=ub1bU@WJXEAF}xjQ$|p8N`A%%QTgVVn@NnsoQuz>%k-XY)gc(Nul3acHMV z2;T$eDj-i-FL;LUH1PYQn;%4|POi5AD=QW?cOSEuFam5eVv>BBs&UxYQP#z!bipAS z?pnmm(aRvFT1hHe*$?;c)jNScp*{6-7FRxXzfrK3^a=!jS2nvDOD-xC=v_M2Zv;I< zZ=Hbx)5&MMU;>~CE?~yXEIT|*bX(8^FbN5Ejq_$!g4M26juEC=0NB_f>bbq&iRz{PYra$Lj{>T8-0$ zd6gyv&-#(<4vyxUN;b^44xy1BKEKJ_?^Vph-|G=CaO>bwoR4jzM9kY>;o5r}>_wgj z{&U6w`5-LbKOFmyde9H1oe&??=gzJ5LG7)QzySX`Sq>uVJN@Rb6(sBfT>3_A#nq@UK!g{}pVUn-LyAl<+JD&7@ZclEqe>kBlN(4< zv|LI9QTe5Tru%RgRUD41KTrrVy%i({H%ICFv^5z9Y@kX`adVBavmW52`5?^kH^rGh z67j~IZ|sf(h=T8_h$ye*RENjzNdG?1yf=1o94#nzO&3QI${(nN0q1NHUQPfC@%3V| zA>k1AH^Pkn)*OJc@7iD!dV$D>VP5}+e1#ZW5h!E5I87b)Od_!%G!w`!GIao^+&@Fp z?I7Pd9cwyRg@s9!ZGN;K1Z)5`#flvF*n?SP1WgG+aa+Ws4x^IDq{Aqz2M6q3OoDTyA z8cC%ALpsSQM}e6Nu*(L_635S?hJj)Gsw4{uJDGu7SWuBFFB}r}>*eUOezo*hAWH!1 z8jZ}W?R8<^9N6s#{9sQNLkmJ%ml-C7oFAh!v?e9}|h?l!@KBZw8Z-UmsS?D=Y=U#iItu z=57-fOVW4mPP9Vy`4Za-F2s&z$xa|LhZ+<~FP`ok*-HS}1-IYZ;snAqNvMwF%jlo} zaX#wjYdPG;P!M9{*x!=LT(jbHd4U*AT>@n--!`m49 z9XKW2L9&VhQb|{2xvHq7g{x1IaaS!sHRjx(%9EcEy9d!j@3yoNij3V`r~EEhTDqmOBTKF*?J!@! zWCn7mh@WFcH&$?z0FNDM`Ay!C7lop6@B9p3%&_1x0~HNkKi8Ky@K%3n9_mHE*D#J> zHO#Wu5;vn8UDHI&2SFYDL9^sF092qoB0OgpQIP;zyM)+ty*|Um<$DcFvd8wTP;lQl zcD!p`z$*oX2c7)}c0DK@>!hK08xqvAGN+8Y*-d$E#?tR`Cs#AMrh|Z^u@xH}C&5~s zhne%yDcBdmWjxZSCb@F?{q3X>gG`Wol%s+(f%?pFky`;x2`;mELx1#&Ic+IC41FJW zvf>-wU$=_H^Ku_fZ>Z#|i|Tex#D1@J{GI;Md~q7cdr$ZC<@@_z*@S@bTp9)b@qIE1 zyt|THkI=z$1v`_Fk$ypxGJWZU(0xHHN%gYbr`qxL%>j>{^k+~OFTTPp)>Vzlnvb!gQ7ki{*0;FWAG(xBpNwu9 zvZ4HpJy zDNivGWBXe0v<2{Ljg+f74QEn@TJ7pkBB+%nIpR)1RP4{c{AMH5A@T82i`mdzkD@?A zYJ>UpOQ%;G~Jn3hd~xy%s`_#6QN&;{9zU{}^Sb zvxM_f^Hqygik4%-DEm|j#Aey@pDJn32@X4u{%tp5mde-Hj)#JiV?|5=r?2*t$ucM! zf0F%PRi$(44u=ol+}lh@AWDlc42rQEfKBN2giUGOvF*Be$cT0rfZ`mSZ0^2F=r$#@ z25ozw6O8nb3>Y$9xi9bCV>Xd2;gyil3)SCv?S+AF|({IV;^N@7mHi9hZJ$qJ(8hH13F3 ztW4@~S1>&z8>--@HXUdxDrrFNEXFjR9Ni%;ej=M5ZaRlg>lNd+(g{`kdgJj#A?WA+ z0mL5c}qE={u-HE^=Fi&+H70W5uVU%J+RV@vo8AG*Iq2Ly=UtdkAG=W~<}t zj>LeBMhq1n+ybrWueJ++?xh{?>Z+oUV!666?V_5ysdep>d1Zs#l5jLOr!R)I-8+sO z6Q3brF75ojMd8UspO0k4O-+t1?qW>kO)&UOT5jR20Y?f><-l9Y;dUu3H7@rq-IA)# z#?>(gPdU^|h~@SCUs=@(6d?3ww6A*Sr1y@e`KSEERHNDX4Ny221mz$lwzV$XVH1MW zk1Z>%Sms!*&Lkij7%pF~VfJ4(9f)a6xneP@5WrJm$dsJhtA@MGZ)F$;+|2}`tlj(N z37H13oL$9Nl7q=Kcb+Eyx-j^vEF9z-@I+rtQ4!Xp&VlIsVSz9q|hAjfX|PVV^|oCzY%Q#XoW` z`{N#Ea;pg>(PaFXu({*u(QoNRC999jo;TQ8x%!*CsGs+;j?pXY&;4GsBDZVxMlac0 z`Uo=_UhK6>6}*nxfl!pHoa(eU1IFrfHszIR$PVJAplP3#Xj1Q4!F0E4`xpRn3-W33 z^Cn{LE$b?2aIe~`>8Nhz6%X^V#kI0goGte_NDyH^LU6<_e-nx`e%6bpJSOG08Hkkc zqCKQ!2I#?BQA|1>!{qlFk~fpO9#RdF-k#9a4sVyZ;1>VlH44z&T%@2GWG*RM7UlJM zK}6?uuAf~CmUk78O-5bw;inB!@6BiUJ_T}Q1dT|co=p9P3{CUWVbBanN4C39TvUus z6oczc8>Abev|#`92IYT~MA?G&7ACW}!17~1g5$tiI(2y#SjyS)Qy2GOH$D~;1k94- z0;uTA>L}WO#wRPqhNAs%!~G`GFJQu-uFE0;jr!~; zV}H2Snsu&?k?#Pt_Hl1_pPbI{O&J88Yycf33(K-cn5g%Q+1YZ|u4hjTuRbe0S_3?! z08sqyhYJaY_9jrE=iuYoU-K*i6ugZ8G8rV_kLsKa3`xYeo+ z6%#zD(1_>eOL$%V8LcZou`-9d?EG>kzzcycn(#z|kO$VOacYfsv8#c$vH=J0=C8hA z@X%aPpTK0mIHkIy(A6)G#f}uE7gWA4HcW5kQO^#{x8FsX4&{kKyJZ95?HJ6CMlxg@ zyU{0Y0?&eeza!RDsp{kXRXqXzm;F(4oYAx}Io4SQ7fm0&WT)6ZtE=Q>O;5tY;y&Cqw!vT@M~Y+))^+N&hX~RGQD+*bEB-lPj1x^`r0~Gd&Y=4 zvdw)Y_sw|9I}KC(1k4i`EV`}dj;u6LBmnF^L2gHP-uydS(INb4Fm*b>F_@}RQUcCb z|F+heZDTg)4dqq2>S0A?CvoV=12$R~y^YF2L(b=_VUr_Rm%~pgx@CeffxHHI+g1Je zk4cm<%M`W~$;i0{n~y|X(1HUC^vp=jS6Tt$RJE1aPz@_)@$12T+4-JunLEGo#LU;V zT^vypuMfo*PB?{426KZSg=Z;s^tvg)Rg2d*VbW18{0~)9)?arbRTLlF1pGs>f+Hof zR-OHvuy;D}-F%BWeUO&`7e%LGULiS2_;bt`C6j+X@|e7YcHEbZE>*pOKsVcYy)KPTK_Nir>W(M2D+xkNJYzR_^u7E3apR_Lq;ne_rv!EcitnnmYVQ$Ks~r z{6Aw(f1)B{LE7=xkaH}RQf|CsdwD#4o&4^94oUF;(HZZ?I%m*8)4LlYR0gSdw|XF; z;g)A~)F#BrjnJu&Ez&wbk#AFmwr(B7@E%?d1$ot=MKx}CXe)yj07qZ!yaCP7IVLLS z_nFD8r;s#eRQh=h?*{Oh+!toqI&&7{gR$5GmE%|66oOGn@Q)ARy8`9(~nH$C?B1A1gfbn zQlxh;pzR!xbbedNypD&v{vdA6f6IVsCr_o1Vgmr?#iAf8E~A$3F*{rRr*kHAUTD^Z_Tdnd8v{!QREo^ch?x!dTErqaF}KM#6`I0YOKbJ zw!-efi27v(dD#8knu`;hSC&(6N_{KTX(H5FkHtgW5iKn_E^^_q40U?_nbjAJtOCvh zajUqnruhpsvtA_r_+IqI=!bC8_!*RD`X`?O&GlX zro7pm!;gfda}{hh4+jjc7S6H5OZClM{mN@=N7E(YMHJ$9=6O*Z%0hTytkZbN8)Zoex$7-E)mf*Qqhj-K{vKwfo)Tt!egL z5FKpB!WQA+OV4I-a}c)S8&{#B-(c@99~a#ypLOJY${T2G0XMYu2?Z1AG!7P?JGDP25Kup_IWMmE@jTNXW@Jp^WI#@)S>{NruVZypzyELVQ7XW$W>1Kp z=#T*08CsL(y2Yr*^ekS|>$+y!%KKVs5P<&f;ZTtCrL9ER66AxA$Q?Iwwd0N7`A)vz z*Yr4wzb~mfVWz&>uTnk{o1=pHt3%qub-^0us}VKV8jv)6qs zzTEWm4BCiz6gvK|(!`g^0h7SB%F8#-aQNkn9pPZ4H!#GwDo&sj)pfDw=Cx0L?2om&xocw1C`lk z+_7K|ogU8I)sni}ErR%<7^3;vZ!FYRs!mo;reg!H)fJ1rZaOJreS9zs0qnbiPj7}9JhV+^uf>7p$o5@ zHtbyaH3+jO4W(wT$#wR0e;3Q-^?dw`w+SJE-FMMZ z)*_-a%kK|lTIZ@atIls>e51aRs6Xk@En${|SBygb;AMg?WU^jNK$Vn7@Vc zJRi;0=C=(ga{E1zDA_;JZY>+yaSl#sO(}ibkrurL>Nsde)*{hl~jWaLKp&G5~^G5Y(?JT|4)*qN;1_n3k(2Y|5uqy@_&&$&Mt;7 zuFm?#ziO=iU>&~b6L#3_w>|oTHV7(KxI?K&{}|(S-UXu2Z0C+sK~S2dC9B-WXvdnX z!M-B#yv|mhq`9*95|gh~z`Z%?r@g~kYA(*N^ctQz7^___SedhSOb#@uTcxB&KrV(D zD7uZct-Y4hd)PBA=YZ|3X+EB>Hu5qa2IAy8#<7oIlr&36^t6^DVhc8r$uh;b%Gh#D zlmKH)fkM3Pm&_gsCJ6FXW7Nf-xBNe8G?c5Pr3R+NS+gGkgShZ)X$o476P+!FLh5Il6vIkKPYF<6617YD=}H zX(p5#QP^Ye^$$=@Wa5EO9j4d^FE%(}mU(;a%&oU;5aeqyO>mQ7^fuJDvM#lCiGS$g zo1vd!IV2LPa?IXaB~5}-CYa0N2s40+VNlv8bU~= zFsk>rF}5)i5sAm*b`wk`-!m@+FtX9VgI_oVPpO67hnx03cuj;~e{T5wO(iW1jZ1DD zWVvX^DimM_8F8v-#he-6yX&F$3++hMcNYoX9c5hHdt5}7JZ{@)eCm0+Auu3H9x=xt z;@9-^Cqkd3Tu3!ROb5~e5t6c%!9Xi0&u)TmtMC-cX|9oS<^vno6)Fi=q)uoQ>6e^O z88JUYzK|-hbm}5peKS#@S6IA@2z-$yI7Lg?*&B`&BD!Y{48s9M4Wf@5xfl()TFe%0 z2|~T2zl(pTJeQ=Il?wmOh`dsM@hSCP{SxPhWWM95iXL=(p)3XpgN^%gvUMKqBi z+S@$yLg|TAEE#6M8mBlc(ni70QEHJfb+`p-9^v|w3k%rAKcwg_9=wg!#EfRdaaD6} zya+3*PR8?%;BTDteL|C-k!+}TK`$PeeurcVfK1cL={qkBuO%nUpBmSZKc4_>jy0v6 z^3*v=j-nJ4dWwHMFrXO}pII(_b0I3B&l^x6dmv3ZSX*NU>%s$uK>POP!m#^z4HB7I z53nQf!f>>xZVurh4D-1a=pi`3WF~9NLHA&GWz9E<-(Et#sAz3QkD}Z1F##`fo9b+x z!cla^dPE1;)2C7>rCVX>Q13+&wx&0 zfa2P9s=~gnd#=K}HROAW9-lv}HP0S!FHxUPxW^>ZTE;t^d10Xls(PLXC!k#y1s0U_ zvOd56kZDUg{rK=~eOFbSO(ozHHQuUu=`M^*+9!JHsiJo2V_p)B&m60lD|%FcJwgUg zFNLzln2GfEl^u()&k?B-5Zy<^@ULbLZn&c1w@Nq#?VpIdSWWcthJ?SMRLvRoZp@gm z9vwV*@$sjAQl3Hka84gD(2k-++sFoogyMMd^_cC24cXsPWZGUly%&8uch}6Z<;3`- zfBTJU2`6Dxn?0ReT6z!Vc4YFJGT&oI#<1UTH3p9Go;dKHKt%31*yqL}UqWkCy5jyM zNJ-wHWaK9ghU6vKJyfA_I3Kc`4|fcaUb{-AXo9+puB! zoM&rLUgjl{P^Q$O*@X_l#|#Zik>@4+nHN6YrviLe#9&uIdRLNjpoom5iQHEj69?&j z7rHz8!~Uw!3T17R4O)P*c-qoY_`{BRiWURmdD;w)K2)$!2w-R!ZX)5oHnNFSzIfF` z;nb$6=H0n`YOYC`M_IF>#8pKrC)4$KQlF6(&DtT2Vc42N^dl&7c|Z=9rLnQbAZgCe?oGIXu%2ba#}$FQ&`!W6{Q zFQ)`mVwW8+OYx)P(=xpWKmLLFTXKuhSeDGAZg0f$8-m-t_@oXy&iJRBBIFuTOnP2ENeH)m3NjHHH@yv;&}f>EN80o#HIQ>IdhEj92Hs(nZuGZhr#IHz2IyZ8l@^ywGzWY0!)rd+$c~ zU`)+9mKGBE5P{ses2GM6A#5tC7VYkbL^+U5W|m@demYt`-x~j1PuW;Y-T+| zLlRE{NEg{q>oo_1FN1J^Gg_Loh6KBI8QKb0FqF);?<(wyhb;CuZbP;feeh3XnVv_< zM5IDhlrzy9UdRvA+_6>f!zAn1_p5lOWRjzWQF|PcDcra*4Du8rXx*5B&H(@NKtHQ? zqN>mFnd{8+{3gFkt%}(S=K^^=N()E`R7D0o3fZWj<>+t^_P4)8o5&vJd^2KLp{U}$ zo|wKUZnaC!T`#?S|8!6*)Z0!UY32kMEN>oB=!qqLkHQ9E;V~CkrZqw}6TtybzDa58 zgPTy<%zbAyu@FVv=Ct@*NRRvut;yFj3-Y+nTE6EovGLtVrN21Z7ma;{9^padK=oc_ z^s{MV7cO(~O#a9l)3b~XiQLW8NO0>Q{^g(Ay-mgS`@WrIf@>niN#Vt+C8SsZ_27JrF`rY}gMa(^mR@XF)t$WGPT=N(y z$LX_v@DFL3`(k2LtIqKuvki}a2ql&ue)U=IW1C8?^0Qdfq5uCpcau|{Ni0$T0L%yc zKe}L77t8-v(Qf(LdT+MWpSpiRC3jS}O-DAEjEt;#ByqKDmb==h(~nu2;$~_Yk!p1w zh8>=h`fcv`9m5g`IH}ut&vegpd#!s&0tELPm@%Yd1_&b9B)_ke)SOdkEw5FrzlOiG z);s!Ss9Nb2Ph_Y?HMC7D=~7l@F1cHEOp?2*9i~*!CuxzEs7*+fos(74H|pR*ox*Bo zPF4U_%A_%~(n^)sTk9VGid+Cjoq7Ze=EMLjY)u|S6_*v_&n1_5j#!&AOizww)zbAt zt5vNYDyhiSJ6hyj+p}5Z-CG2!PogZ@8mH_MnP%>xwZFB8hZY*rf#Di6QVpfwHkg)5 zmdH9l?(aG= zc2iJYut!Q)J)7(6|DF>~CvkNyGe)D_sx!DwWSbo#-TuxnQ(D<0RM`PfruHDjGE^Ab z9sqz7md?@*niI~*KY}tV1xi^|^nS8p=Sv6So!C&{`}i+;y_@{e{(j%@yGIWPt>NN# z@c!J}_%&2KTzrQOa)`ZlaprA|2*ntRQP4}@l$tcm0h*`1yPgd$~Ni{fmdGU=1Z#m>)!1pxikZ*O1kie@5)`A%8l8GmbG z`-nQ`k65WxeREJJq)NO}rV8;ezqLDevXGW(!lM%L3j`1i{eC6 zAF7hMD$od;4KZPM)Zz0NmlzD0`o}=jKwP1c*!bwuyd1D@FKi#UII#PC0?u;^oubhi zi^0Aa)QwN!O0Vbi7z(G^rlj(b;+9e@h(UioKubH?{#sB{2wZjfIRB!eHWQ-Ff&xms zPe;Xz=zY~kx*nP;PXXRUv#P8=@a&vAjN9W{=S07}l{a~q-4KZQ3!wOrqlZ*l%>KiZ%Bhqn$tQ;t4PP4pd8gM=JZrL3n~ zU*BamN@%D&-RM%?{`EA{v%k3l*d2TbqHzPH*ITgdg;KBZrp+0}E`f?PW&^isxR)Ok z{4d?W#1VaZe^2jMCkU<1>|l#;F=~;kKur#TVTmXOu$Pq*x*I<^GwE)B>=sLqs?$e2 z7&-jhC!-g%*CLS?Ku!s>2O!m@OS1N0@}cpLsAyZ`lf5Vf#wmylwzv@cIE@bqu;5;B z>$ai$VH68>ZxNvJb@kF2`n^usM0t#tLnZl|Mb`ZS3C|?1D*9%o`}_dP0O>tU5T~GX z5pIK)+^I-OrVl%5iU=w=?FH>*61$p2o|2a&ptdS46wmWSZ)MrUu2Dhb={7%;sP)EO z-l%!V9#}9qnz|H)n1a<{Lr^!OBDI2T>6$1SQCC*^^RbcwI12yW$ZUq}AYawZU4_|a z?HGs`q#jDAI-4#b^t7%vM6AKfEsLQoA#7C{U#0~d69Ey{^_hU@HvX z-LRwylHS>KBem>GDA{M9d(a&J8HNsmUH7%p_>3C_Lm10XVINP1)5L-}5M4qmdi(|} zjLOB9knVqmzzz}%pp9~gin>_5V+^xMb+Gyb3o4u7@uF(MQN?1~1h)ScS#J=$nrD&g z=v~&!txZV67l_a~)!QGn3k`d%v`mee2(ePYQ966Od!K_K0}e%v8NjeNZ$;9f$Wlx5 z+ni0G!BgGK326)=A(osHf)LT>V&%j||5iV1<;4-1Big=X=(KYOrRViZLrLt_UcR=R@& zwZcM6^x9rXYWL@XNW;9s5jAL#UpSoElyN%p6a?l7)Ly!OoC-O+y1)w#*R;;`N;jWf zd&oo?z&SYz$^1@e?F(9_c=;9V_ykEU7`q$P>}7(3mUW>epq_%LxWvbWeOq9e~sXSpe2XQicWM0XO<^4~>8V zjJF^3N1LR435bRA-coHkLyh%4qI?T>whdriAn6E5z2hNzv2Rm*Ec8#Xb0+~B;__(? z=rAJkUR=#ljQ^MY9X-Q0`Qf@*@-Q4wbIQtwkdW4;BSycK!#*YOIUy`!L^K?w?Ia}0 zAjF$Ya5F=(y0rk(973lvY^P!Y&bnY9l?V$$oP@X=dgyM;bn9|ZHYxgWvJgbDL_Iux zd$6Uf#e<|)7EQloH(aWGF~sxZa#(VH;^G!q>Y$F=K3ma0 zO3)oX)W4e#qE@%IwCc&GMNRjq3PUucy2DDk1;MsNq!>(F%LOF1p6ZwYgNs_(AlXZD zyjo~J5EqJB-Vb7slh&eqfo#@@gK|I8Zy(C^1#fd2o+Y0M;77HVOx%d ziUff&(H_-GYL;kw4X>CkVgCU2z-2fam;^}#b z_5OH;W5P-5?hUthOsYTp~XSTbnD({Qo*$mm;rSL7mYUFa%V7tk-r^byP8JKZTrzn%> za~pS!S&Tu0tj2Igxzs09h!z4HgT$)&dazc&7-4%Z{n*sIA0zx3+36R;03vsV7tVCX^<&Q7AvM0wCa=u})S-=pT$RPl@ zW&*3VJ0%6RGmA=P?mOf0y)9b*n%u-ZLnGV(k=cjKY-AP6a4-E8iWc@+eRO)ijmA*E zs<}sz_$izJw6V~-&T)0e#{EX_URcw^NzV|@Vk^Lawxzac6ddRj@NTH!5D_xtIhQcT zPSj~O7+40rBw6=TQC|}x34ZKn0#AYvMvc;B8?(~6t)zxSjnCYRt(@LJKhMY0he~C_ z2hgWOv*Pa+5dJ|z19@#l@(AOIeejujj%pz*L=~)6Ef$L36VgDzg7wfb%7(lxlS(Di zn8TQ;`u3pw6U`h#6|J~;@8tK5i00yh2_q?ll@gAsz2WA=?o#M)1H7w!ShQ0RM`xjD zdvnjdVoWY$>H-{8Sik2#X+(hC{@Mx?-IWYd1|{i(^EI=*j>91KBs4*{d_apFCba4R z{2Q_13hgG)I<~4gIXUIY8L$tKzfE*vg-@E97V>So|I5m5be^LaS)hao~4;+dJUK0y?`a=c0 z08F>&qFETxEE#7DGb6`*r#)zg%)l)Iqyy}n|rCDjm|rY$)1Zro+dLZIbd zH3dpc-#IVTl-AEBA~`k*I)3+Kg3O$2oNx)B!4ITNSYxq*>EL%?G*F8dWQ6V@^HphZ z&9gG2O^i`P;2N(0wqp80l~^tv8V09~z%P?oJ_@)AatKc#&v*dj%TbY8G()S8McLoH z#V+hA$R_XR6odEOcn0@6@Q+Sp@c*y1`h^t!=pq0csJZpC8 zpx6>d(&*u|$U`NRe>jZa6i?Q_Q#;71#6^p1eFV;YVp(zv8k19&%9;@U_WDe+ zB~l85BBF~oBDXER=+blKoC^7hciHo9edeZ0(T~PLuwx#NFd4wUC zQti(2PMH~{*8gJcoq|M*f;8Q-PuaF@+qP}nwr!uX?NhdG+qN+^J#!;&_l>^M`(eNB zmyBF%{VR9o_pg$aL!P2Xhq*fk}f;|V*C)Bc-xyJN9! ziJzj_JXVKBhGiKBpmJQCY7<(*JOWEb;8Y!*5MD##pmi_XhZIF}4qt@CQkn-MsosG4 zq7xbrkdUR%=BC|!JSD_r{2L=0L-V!ew(}Hy%)A+BCVlU(rUg85>#Sc>z69qI6_Z|F zvduu>UUKCve)pg#H`|b&C!0;8yDf~&GHi%+f=eI~Pl&Bq_idF`5N6`F(WF#;EpUSr zV>(#)_E{`s8kw4|$a2qk5{wj`dzkKSrbW!OZ2c#J1rs=4^N&h+hDzd7@pKfB>xG6c zoc5Nas*6xM{VN#+(ks*`4*f%OosZ7vU!!;6QrCgiY-Rrm0D|t+>W$SJ(-qe-P5R2! z!@ofHzfGXrEh5R^dWS39-6Rh4XHj8{$9`Ug^{{Mq`V|{g&X1Fg?V7r#YD3d8w6(qq z6VNE@-uh-8+~MNvoD`8ZcX>9PE+Ty@x{uQwF*mnM(9JKmV@fWA|Jp3&3}3)GxM;{G zG!!K*X-He9lddEOlmdYU=_#t?f?k+e^;8m23bZA{M~= zBLX&hjS3!;FBp@hUk;G^p)%Alg-~K0$4h@kWkdcGz!o~l#k>^_1cN((E>V6wp^=mS z&@g=*4r5N)Fe&3nY8qsgGG)mefjrVQL>ODYAMj6imX|__CDT7owGdAH9IhZ*{Y%14NFv;8ATO)mvtMALMa&vVM7^B@7V?lpD+V@ zybO>Edx^TU7VAJ`LNn|BcMg2OcyAPV7IF#{sqM@ELP-szYi`ezI>6i%9AmaLHxYrx z{cn#pKz->C2B7fh1!(;HGYGxSMxiPIpU*cMC_VayHMsTa^8?YV5;eP%Qu-ub4VlI@ z@!*~8RMo=j^yT_UuWLuHRJbL^+DTYSza9RwBwy0~<057v<%3!%{D4x^U} z-KT1QRnB2Uk!Grqk!blXyb@D|ap<{VTjj<`m;f;q`nY*MM+s?kMC^A)o+wA_M5fW% ziHSqdH#zSmalTjJfCSMf>wH<78wJap0Gb<+V8E!6y#Af<2a=j;ZfV%Iw_9n4!}|Vc zd*S|p;KF4p5vF`CrF3^(RzNfq%7avsIT8Yj^tXoYEg(RairigH!D4ZmGXDwWbdnRj z3b{t$SIi$8jTM9IrS5D@sbgp;XHNXyX&UzT{xyYc6?2m;2+8wgHCT<-0*9RMNSy475;h z!^9YDbyB2FQtjM}Uu(Q>r3GjclmrW@Zl!HN#g^z1fK120x~L{~LsKD8%HQ&(?`o?L z8PRmkGrn)DLrE6EtiLcQ&!o8%r36D}-!*coRy8Z0-`8TCpChU%5*lSp%lg6Sq}MC- zdV51XS(dYL1^XaaUvKwTAelDC)cggjOOp0jvq79-NK)JuJ8yM57q^70FIBZsgr|Vb z4~+J)#M9wH83kj9w=|GJSTSQ*J$xkH&NdM7FywME3Pu`%FLCXi_;`V-&j}iNP*U9A zt$Z%|U;v5CVbX;alD^sM4Y4>=eZgQ}pz10~TU3Vo4ty!V zf$Yl}U}@>k&2kEH#M=mMvu9|hw{tQ;3}MBT11!meXyZLPf@|;6q_7^6HucJy!ut&f zUcjr#4(`KYC*bF*MN;n+iG2dw#C8g(JLd+?NFRhxP;C=4OVG!ln&}+4C`pq#^3$Ch zi^E>L8mh;}=wah*FVDH$5z65gR?xW^p<^?2_ZeGZsK2eg0t>y6j9tRu7-1q^o%{~k zdA`Gc>>?_<7oCF<2bhkQnbg}8Py1dJjl3~CcR0P^MfH66djIa^1VHswjay2Sp+c+| zNYfsVaq3I+13p)ScH>@Nc`pM$^yGH^;7S5i@bs<>&ArSpD{V(}_3Klj6Q`=#%$TaLhI(b21u9yQ`_bZjJKrm{xnqwjj#E zbZBXQv3qKN@;F(mu1F}4Y>ey(>jOa3 zUB!17jMxw<_uve4HKm75^-YausAz+HeoR?cDfHUlXkrhMC8D?XcLD3tisB9IkovVO zP_NE-sJp*Gv%J8Ii`${#-H?uw$AeQPO3U$lbeSQ%!MwwPZLn5#=>9u4G~Cb&r_nLB z%$}=udx9C^vcsYSR-hQj``t)jaz(IlayR0xo8EG%4*AOYTo% zkXqlr^QMmShRL3F&T-;lp{~S zq7WyxDC&U4YeBNqd7x}!%u$8pwcAVQ&|tCAzkppbz)LR?Si8X=8YHf=BX2Ad~< z20k}IxRy5H$0=p97a=l_B&q%H|9oVW)ysM$xrLTSMmDU?u)wwR^x1X`{3OmKrb^tK4aswoitJ@5<#t@5c zqjFk;MpgAV6Us{VAp#AI5+p#;LB7qZ1T^oS$2mv9EM`8W6LY+AQ!Px#ScWoM{?jOo zN)Ii{Vr+mWO=q;(QZL~NW$1e9zlfglqygX+5|n+(m(#3LIWR0TJJ^@FXE?uYKMcGp zyaR#vhF6&b%wcRC?w`G(i7z$3_q*L0Kaa14tk#=vPj_eU`vvg%Zl^%Q{M{ZV+1kk1GUnP-CQ7JzTl;tJN0V6Mlg-CM?Irv20k>yS#-tYMZ_f{f zXyD+TYpLq(5xO;s5a@a}tC1AF6zp-CTNRFvlDV&&B zj4IgkFlrj`iXY%H;h~rw?N1OB;gelN_y7Ck9a`cEuJM@J=ski{m^#CqDa9 z-oIY5Y_R(}OGi=5i-n_;>O2=1NH8V=!&mB+tJ!!Ug^{VU{K@Up$&oIn>&hih%+K#6 zkIzl=CfklDo9I7ekcHen{gY*f5g8McC;LKEdp=~1IO$7Z{deJ2!PVqJx@x{6?vznS zpzj(ny_fWzV_U(D2qI>zZcxA6x?o8O01ldNl+w%r=-A+$fiV@vCFFlmCWa1`Zyi%V zPak~NAwl4Jf80cOVtalL&er%eml$SGT2JkE9ZpLU^I+(Bn``T`m)b1sqjMcgV-j@K z8jC?~0^3qioWR8wAdmX(zI?4_Rf`wdwew3unXetfRC6;wnvr2>fY^n(3Iom}_N5her}3so}bIv121^2M9WxPM%fkabhkVy}YnE ze(W5ek57z*^ar~}{?KKv?R>mnjDG&?c`i{Z-QPZ^e3t(x?$vlcOY^KNZA6azqbXgF z4mpLVtBoQ?hGO#R;ev240S`sQ7+u(ZccAVk(GqlDnKk0M@Ob~n^KaZiP%fTn(`Y? z&|BxEhI0I#>xwm*aIieKCVh4zV#n4&Xk}H^w^Sd@1CLTioBZ6(jla%!anz;ilquXk zTu1mz?(nsAlbzbu0Qd{`c$qo4IC!>!n+pyX25qdI^vab~+T~{@&4M-bk#`hQLb{+> zgx5krQCxhFvH8KeGip_QuzXKV0Z?Z~Q1P)Zj5Ox);;w-=zmSH}9YFS;bOl0|k@5kl z$~^V~>*s}vGpxbn{Oaq5*2v%=!6^_n6j_=48|@eN2=hU%tY?SprB`u_pyhEZG)0~Z zkyGfZZZJ4r(OF_JkpMt)nlFw&wx)e@h3r_?m*$g@_}Uyl=KO(;%+Ak-cWiF~u6V%g|> z+3oxhh_lArU(7f6Qo6C62U~~u)xpKqeQ*#m(=*Mr@tuW}Tv`Znm*&$&ic8(UVmZqF z(_-vRl9WM6FRcPx3j6d$l-ICJk`e2jXvC%44h%BX925(f#<(%-9TLp9BK0MQVKsmr zRHexyEUcflfHk4krWLX`wQ?fggq3I~jHkcEXFudJnr>9|Em0hZAR12#Knpv@i zpI^xObiKq?JGJCwGt!~HeFrvG46i4W8kc%45;ZeQw}*t?UAfPRXmkjFM~UC}sJCUl zVRg*0U?v-wgIO?cocAtHv5V(fJv0~XJjBVBC9@M~HhnwJiLJ0GN;GDg!4!MUq!#*3 z%dP|FbGKbFw*D=f*4?cJ>bPu7224CcM=C}wux}Wft_AW{ zo%*keXrlv&w-HY$`D|+Vwu4N<#<%CbtB@>vN}S?BFj`NLZ!2)ThSl$(7I2@ zz{kl_Mcu9Udoa@iZL(RLZJ)h*ek2@oo~gz|?KaXL@P4?MmRyq`WgE-c1TIkPSz;*Z zpnjKzOKQ}W<{=WuYr2e)E%AI7VV!9+`D8DQ|4h=|=>C__%{?oP!3;YAMt!@erR&J?j?xD3PKDv+Z_!qYCOJz4mwR!#a?c%w5A$;JWBd2{Yvkk6B~6h^!y?!baBldRNsq#WOHl)#rRn>{j=}ij>32 zo|Ws4IjiVysrC8+dLl^rQloXzQyaO~++s*jWn9iPI8jE0s5?#ii<&8mgRaX-q_Uv} zcP(flMOoHHq0oJ^aIHVolF1OdA4>FA2!!5d>^GygASkxdx;%6`^%opA{xZr9{TG{_ zhwv#tyHb@n_YOOQYCL{qC&gV_u{7+*iIH@dI$!J@e3jKg zoj{Q%gT&iYELyEI0Pw=2J$^)as}QP#klI?5FYAhBhi++<^+<1i_ilqm+Bmf=wKHnc z-7CI??bjjIlyHU30lXHX_6jnKCWIuqi|SZU`K%gc6l{H^S_)O#2qz<;8FL;Wrs16G zAvu-mxLccxIl{kLKr-p5Du8;G{r-}fp4Y$@>A;5G!7%`1&6%2f_rYs}l!ZvWd0(=i zna9Mg<_@vfc`BN)_a%4{WXR$c65+M;VeCzO<|HqqM#52jueN!|)UrDk@yQ3Zxb!F2 zQl@{LEbg-pGTP>YBbEmJNuj|dN$xhA539kB7mHDms#|G(1GWMj&K0+b*DN6RBU{ec z5cJW_dcgEjlj}*HKW2|WuWOGM)ZF-k2;dMaI!&qN-rSRZr+moJYuP z+?*`30B81`{ss^2eZRvlptq5s>ot`zVnl!yobgKEf<9Sv5voyOQ}p%IrgSVb3iK2_ zW>TUm0mmr`ql&&bapKeIBirF@$?jT~%96urxkbFJhjb2|Qh_t*YjHrH#~t-GR^#(x z_1qdNlUS*2yGY6l9Qo!h*{wG(D^G!(Ipq}xw+!4H_=hE;WTu;_ABOh>O}quMGza^d zZnWAS7HtE@%IW<6?{tIt7M6vmkj9LUl3RJ{gKoEr zojFxA_A=;G7^LUFc}R71=i1PJQ*^`L8}1r%Z2Q>x`ho9P17QJOb-d-I8pAuGbsD;} z=}tEGxZ8LC&c$H#;U3~4=Yg9?YH>MgaXnW4WOffQmnWfQHdd#wE&Yw#?q=9#<7^@m z1G&HoQcY6k=d$jk&o1+a$! z|Ge|lpr_-ZF#AZ%3y=_!Woihmd}r+J6ak0yNr3k%?Af_voR$+H?7WmHJ(#PPeUN(? zsA>T^2X-CjD(5NM{6%6WeD`P^;fnVR4`CW}3Ocl*Tr2_taf79zq5Qb`q6M+*!}7)h z3!8}&ds#i*E3R9;fl4bx%w$}xl|P~s{d3Ry??oQ?tu5RkPkRB2O5B{@2WY$*?4isP zqtS&@x})56>HzWk7FndRcNXH-`WlywAon@RU?JFsSYe7f&$<@JHl0n6t8xTWg_ze@ zp(6@8UYR};h%>$US~|@Vd)Dx$07rdUpX5=ZsKi$Uq95Y@gTg8>lPCGIml*rlmT%0N z6b?Iwkaqw2ZZSuyZDUqU3;hR*mjU^;1SQ=DVO_rBO^=0|XQ?7H6@s(9GR+O1z1JYdPs3wObU%FQk#>W?ig6a0b*BZCA*POy?BG>aKj7WVyiQVFxz zz_FG~ax8ND80B|@^-lrn8!{E@Ekx4sIs$f3v@7}4p%vssr6lV_4NpKvOUuJFuXs>F zG=)D|)ALQ_!}^=vaKqG`;mz0hjfJ0>b(dnalZspu&)a?Xt<%7Z^RWoarm!3D?%Ch- z3@|=cn38@uSlb>dKDgD*wAQ~`V(uk<*juS5-WwdbryvakrDHUHWi5PjBJ!|{0ZGl* zc=t^M33O-wVzPrkKcAs$r*J2l&ydA$iXkIJAcG+~#&#mLNQ)b5L)nj8p4{2Y_&u^~o_>@0( zRYH1Uyi@1ng39PwDL4x4KrP%4^faGun56p&7q`)Ui}PkEc|A;_)uvY8f%fHbkOk;@ z#m+=M(rSx~6QG8fGEwmD!AQU96X_rt_oxJ&H5TXgMhc;kj?-`*H&RRA_jlm2NW6X1 zi$Hc*gsRQFj-w|;oJFxuy@0N_iKvfx3zj_%1(bAQ@tFGr=GF7B$48()PcRDoT-l0mxPsQv5ss|=lcay)^C^e!knzEizFe93+SfM_TPR-FT=H~-Pi z+z6Yp8_d@v6-z;_yRx8v&;$6N+adePt0y*ofxX-6mW0 z26opGyy32n64Se~RD)L|0~Ct46sG*KRxO`Kp;dcf=p;L11F~T_n%bltJ*pQQi@DDYj4F@wCz8dkkd9L zO(&s%`6>0|q&4YPpx(kPrugmKQDG#DAyee^Tc}Tzjl(N7Y?&T=eDZnK=IikOnC62) zX)eeJ&c;{y#Tu(ASRu1odZ$%sCU5B+hO+ zk|beDRhLBYH^l5>kvgSDTPkQ3E3ED+qX~g2J0)SN7%kW@B8Fomc9GH^$TIOq7XP*I z_LfOoy#KkY9ku(;t%b9m-tTOhO*{{DKRvR@%V*@Q zgaA}Km$}O+>5vR@(G?ZQeCNCF;|tc68;jQUzu>IGq2l$?%aO_aL~z4DXpO3j>HEZsWz77G%lUqi zq*!#~+IQf($`kV!WHC4^Z;FZ+T~GCVXx`~+&6r#!?2%iEb6O-ma~e?pOH4fC#*Gdk ze>;bN148uQ$Hd;z&eg)$#PL5k%$hoJ8*L~)FSYo`B+tD@`g%G|efTmBLHJ{aNX`l% z0WuTGGSR~A#4Jd3?+0GA5)nn#a;yTgKIXv22xEswU)(RZmR5yYEt*R?7t!j~>DF-T z?87PZv0UXTIntJz2eIJgu3t9`kOP0?em;+m&WC2`^g4f$9iG>EU8s`i8X;j^WH39- zgkFy8!KJOA{6GT(;CHpMWl+#&cWogqC6(D%zuq7Y)7!f@wXYwk9hP*|xOFm^b5KXu z%GEL#EVQy)$|Le<#NUfb=OYZzx^HO zHw6e>*TTvp7OoH<=+g$It6e6FeWfh5AVE)eWR+Rq2B`3eFoY)c3LF}Eh3%woHpNpF z`<7I#>^6`u4Sqscb^}>)V}{~hGFgb{VZPbU%vord!?q(NnIUJ+%Q z%Npna1D;#Q($ucd&uwUjlE=6%zR5Vx8(r6#G#d}#H!v3IJmHksuDf6q3s8+g*4UFt zo>hM|243+gS`P&rTXa_xZPXn0oLhA19Knlxv^D#-E!~rNxJlS(DE=`G!4FQW?KIFO%h`G7ddpUVEr>?FbAALbtvO~;9`?UK93dk;I?-AU zRCoLlj%_vTlik(xu zMpHp*s!1xr`AnV_Y9p`FX;Js{r973MM8kOC4}(c9MeqwVEp1{Bq(BriDQR~NT531F zKptelhn#g<)ESjE-qAHq#C>U4PXf6+!cPtnfPiwg0=*a1sMn_}2fD^q614VNYW>s& zLFp<}1}&n};McgW8)c+&gR;b@(kJ>-WNB}IDVfp;Q6^jzSR%L#N^agC-561Ug%DRz zP?%gU;-|qP18RzQ?u(YV^&~zV*@kQn#_0;y09W{K%9+~=_}y}A z9!`U7GWMl*VeF#ryJ-01Hr&bo9YE+~0HpH|3GL!n0RUwkc#S#=d{xBZz1bBFan#{& zA#vAL1jUTAh=t-6%CeWr8<=BXl8B`ar=zIzjvOpgt#&YiuZj@F62=?dBuJNGX(#}; z`v6|$GYv>U(m9^SxaJ0MF)GEkXaxiY<}Te~jH_!=^>H@f6x(k18Usm3L#Vf32?ser zNNU~Nn^=Ke!TKY0Bkkl3K7l5zka6mW?vowiM`BaYBy-S@^I)lZ^lb#{xSP)}?};2C zRl+l!CJ)>pwTqkJ#6k3C?9=2d=QoEc6OhhA^=oxV1Jx$bXAC}h<^j42E5^G|kN%Ma z*$dn^7Ox7Iz7p-vhQ2Fp+`YbIs2O#*`E>)M&KgcG0%O5K(JI-@zV+(zElpAP>I4M@ z4Cb=L6}3vM?TXG$0Uxv{WEljvExLwivKHgksHiw=G5$tw@{KQm=eDXx?e!Nu%$LK; zo2K4Y8Nv$26jA*Zss8^u(ByDCd~>A&Dyh6jndf(OguI&@{vXd;|i0*Gf#e5=Ro ziEvjf8Q&%1OpbLfvZ}(`IjX{nqN_;6WY(D@ME=vo@>E;CQe-BB3*`>6=NUs=uS+H? z7*4FcE7GLD5WutP9&6iPA`jhe`d?3YfGB|f`m%J3DR)3aH*E{_n6VM!zcDH1Gp_q0Dofga7icQ_25G8MY0Cd6@ zz{eJpqWQ0uwg;xOiX$juNCApoN&ocpW>6XDoX3E6NM6LYGQ1whyS5vKL)88-Gi5Wk zNpw%5ybUSqeOlnvD_AlB_gpb~bHPUKO;XgS@qJ4Vi*@G%m_vR2Vtd~ctcMPKidNix zch;LGWP_yRl^?t0ob?rGg_{)l${^RRiKshP$h^f-LA=>OdVrx|v}((1?I6@l3p{?V z$*a=k1C~}|Q>Fi}<9scvnW(Q6pYT+uufz6N7gMll$8qsgj<^oIbgh^ zxT9V}aOrW_@9FqiW_y1{f3@f_3yAjs4wi4nS4zgyG~8-BPOboLzIYsxM~kqD&O~wP zcG*4BJ!^+=w~qbtfQ1!EWX<*60=75mM?WLO%#ChtEWo@(-dWe}M`=h8>}*`|#I|Gz z-&y6RM0$I}jcNEGaoSi2v?DUdFW+}1^x}Ev`$b1S37<%o^&@nZ#)LwhICbMbI9W1l zpp4a?C>UBMR+&M`MyZ9rxy>kt=RG_&SW`Cg1ALyts_8FgGHbL94~EmC!N+pwO?&sB zz+yJUOK@f1e5N0%3|ZLkis^0UOcSzL9&cQwHg;SWigYTPTj9^Uv6HS?RGW~pQwy)4 zIB`MorLprbL-B0}EjP||oxvTlDqc0N{`vF)lzy^$DdFb(^fSY-o5M2|U;Kkc6YZb4 zXEuD|@0`eH!WN-Os5Vivh#D@j(Xd!c*yAky>$Tqem|OO}ny23nN*IXc`(gD^X|?d% zhO5HUi#ZdS?hB70j&r>X1d?4)8bodhxX)rB{@0D;X*e!(s^7Fwhq3_aE`hIGn#*4= zyvl)3N#!pKuEzq}u+|<~dZw?jN;2=)$swrSp@seOLPK!&kQfa&`dxp)1AOyNb52xl zPYUtRs0x1m;%5KwZ|fDzw{p1b_b_&NTC7+;k8}sGa|85*?$SZuQkKE!UsS5N1UQ8D zkD?H>-$~d1=RRfcLF?>cZ(y}1)-HevA|AEKgDjvw zw@7Iql|(5);xZd|Lt9>&#cX4=no5(%G_a;o;pz&WC9@T}yk`n*xuTB7k8TtMF^>7y zgk=WuLo{Q<*Zb?};LP;t+u6mz*CTac+%hJy^u#_CEGKcRp%|_vrSAn=?E;(j)M*Is zbDJ`Zi+OKzarsJE@Kty+-J~LS0U2YKDxdRFb*B)^AqPs>N+#7r5&CAY`qn*!JKT0I zqTO_zc<-2f4+jUQODLvQ7}CO^ZkFAvmh$j|M!~}#A^Z=14*WH|C#V$AD4}8q%PanV zQ;3)j-oO}ETN43?8U7FR>+ssLasnZ^3FW84EXn5| z94HTP2aZ)w$;~^Hfq53lsMS1f?t(@#EygBI*?KVx^NN#@qiEbZ@sOOQU6#ZMC))Jj z`H%YnOk=@35S-TuD}Io68787rL|(68Mw>kBS@W~)mRo%3UH+nXq3Y<_bB1H*H$7CB zi)V7Z|xQOiGKS6+E3rjRp98JyL9j z+#izyb!G>DTkrRW!`rU}Ydm?1BprU^hUn^8RtZ4=L(54b*7QL6QOMc9q>Qx=`9#I` zNeDEXdK z)nSKpJntR`W7Jb1`%}VnMfacA#I4B7p2qKbK*sp>J^JsL)c+YL|KGQ+YIQBU4OV2| zmD=4-G)O0&%O!PaYuyb{fuR07PMFX=@_B_SQBSc8?G?4h~%S19W#)665QMg zw;E%D*VO72kwQ$s3l^$YE?Q)%i_A*pl+IKIAL z5b-{Xm!R_L1ba)?f&N?z`yVdh24@=wdIweEEHb?i&Od6TNS;~wD4=OuH~SgEafE&S zPLp<_Rt|<2#+|att$ELN?-UF62qJ$QsC9zr?X!f!cjD_$(gG6{&Y8=KvJ{~wHD#r+ zNM-EG)anHGf>VEpK%@K46GovX%y~vlq>RGrj4&Cs%eh%gJWhgEb zt5@oSE5uhT**G~l^%gG1FbC99FbHS^Hk$+oZq>3MPvMKgln>`0O1JpAa&sw;e7nO2 zun?VNsNM~h4g|?R$ymEp!prSaDkTO7<kJB0d^$`x^J(>T!h96}I9=ST4B&x7M~)y!y0 z?&U330k#X-UCpG{b01tM75jp5(k3mUyXQ*@kkaN#DW+j1P=E$qX6X)dnoYNo1R12X z8HNNOL0?caJX~S++w~9VGn0%j`9MgZQUTDI5v~-|C-G=Uhe*fSvFL~2>h2mkCstxX z=Av`3Nl+zFq7!L8+TE|f#~zXH%6=L0$0Y|6>)KqYPtmQ4CC*KBJM7NLH#-mbHP@tT zzIBuNgmMZ=WnFFdKOPn2`d1CO`ZfCxX#R6ngXfOqO(Ou9TljhJkU>U9JsVzKQ`HO zD&Z7;J29G)T_{Er;$VE_r1HPJ@v(mWM{E2qAT>=XN$P z#k7~LDwsHoOJyxWucHTYg=*hX0t`trA0zrP)^J(ucG#0j2lE4vKT!^wkx9gF?-^bb zpeC~3b|o!DAWyrm+TUh^XA3}GKH3Uoig&c9k`M~t z6E)to~Ldmrl@KI^4s11M3zpk10-)# zsKO^Bs7WHMO}|rq3^+i3zms-tO8!s#o8vLNz{2zUa%0Ot`_hR^$AMqen|#08(AVAR z?rQeR5%mpnSyotxmB zXV43zjVaR<3D_8nt0~ycMul8?gA9_z=4D#At#iBeTP<$q?UJC`*`s~jmK24fesR&8 zMvwpHT&|bj_qzK%kNto3D)oPVF8^QE>*z%H|E?A*3fKnI!*rgYAe5>KegxrCwu9GH zZdX8=1SJrL1ap?0KU@?u6!F_;U~C*nfJGN}Ya{MiQ&_OcB1r7)TDd|HfmjZ}J1`#_ z$`25-x~XDG5&BNOU=^MA09w(?HI`Dhoa{z+v>3)f*L zeXL;vc@jkVRzw=u%^^7rF~WK%+(BX3$F=qlmb|_;nCTpO1*1oyr*lGaYWAG=b*Nt5 zM=a8XPC4g1@L4%S`>JoMdKOUeE39CF2b5()yZ^M2T_wzjK`9h7mbieh^T7F+y~0y1${PbC=U;W>qC97LKo9TzqDJj2 z88w5ae=1Om=2$E*IX0mXSh#v2JecZDMbXvk^I1(j;hg2^E-Kvq+U1S6mGKUAFUE`?+nC3 z67LwM1yK7ALqpl+ggZSP=_5hoE?)ocMH>fnmH0iFRqpCgjB$8{rU6W6fkU;9c9YEf zPG@AExf9aqdnr=ajSgUQ)#b(ld}D^}i>{3WO>WRG9=BCUT3bSP`hc*f(cToPL>&vd zBzUep+h3C!ZmSCox_S6`)7#Wo(y~Z39Zy$ zh&b2=X_o37@erBYhko(4i zn8D4&ZqtO;t%W$P8~WI$mKmiHG!^-X6{##njNnZ9Il>pShr2#*gG_%D*zhIqGrH1z z1$XPosj$X=f--6f(1_dNYCIqJ$aFt4`!(GSsEv22l&ZU!^# z0@%x;}#C#YU!41;ZM`G=3lXXTa%gYh zH{(x#GoI#uvRN28TKrycfBh`~H}_CkDlUs2zWafyBs($u2pr#r&O+s?I84R162(D( zRockfGHXh7vG!n%0*lThiW{xJ=WT9hQUjwK)hZQzhaUD`jbB)--JDSU- zXnT5RMN_is^99B?Pf$n&Ob#|?RU%qWHY+{rWI3bT(N%iK`1bPWwSz2(hVrEd(`KDN zgIIzjq`8iDkl(u@9Gi~UqRT@E74nu&X2I+dMspf2BMfjUH}qVX&GL*W5KG%r%G92NFWn*B7|w-mDrFuU+L=~J>5 zM`}HRSj_w;6JD`j;H(hn`YUJwPRs@tDJ|x(3YL#@Z3QC#AN3Yv2V|_+IK@@!L>5X> z=dUL&tMzyQrd2Ll710TOz-5h^!lg)`X|4_VlK#Q)^FIVR*h}4)2C$GDbNw)Xn-kd# zx6quR16-9|EG>BHG7EOWKEiAS05=RX zh8dr;dU8Vh>}dmx*MMZ9q2fE9+e|+7tbN2>_uBRCx2*|-=JyhwNlVc0$vp_t#jy!e zy`niWYp~prWH(EAC8Gf};MTE}Bg4Tu@+@obEKb$vji3Gx4v|UL()2A%x)-$L&K)!W zHJMI-jDM-OweX2H6~;JB3N?}9e3z5 z+&g#qP7l%F8~2MPH`XR)JmAdmc+u4Kp(W4Mve6}9k7?;L{1Ls5uVT9;dwii)d;G!6 z{4WrqYm4by+5fv5X#Xdx!NlFj#NPS;y1OIjk!Z*3oDk6ax~61EX9de>XESKGGN~n z052KVw*?cL1p^B@3e~Xe!jJI(Gpx#64ced#&8gOmk(ljMQ&J}>$1`&P=iOdcRl_j} zsGE{0CK1gbqHSaTh^;Y?67({_igVEdIp;zT4<1A~mKApl)rNl=n;osXQjn4Ttz%Gv z!gtFXHJwa*#oPKm7AUJvAd?qrr-nqg#~L7eag1>n>@JwK)q}yA`#EgjhbS;MM8BFx zBJ5{Gpee=btA@Zx>j|fc;+9eeGnRs(KKSNeV(IoTJP>kBDzXc5mK&-Q!>MM(*X73- zOuO9IV6P;jPX{UmwmYq*O2wq)%n`s8IOWMk3? zy90-QxZR$nUKUmuTbBmQ;hkboM!_`b`X7xtb@5%SJ2c;YaISl-crK_4r|NpHRbJ1W zQROvL6Pv1>`a+SG_+L*?2q{us@`jn^X33_!Q=Hiq?~!YKm& zm6Z+aIgQXwFfh78F?6cvdrKW_DH)f1OFgKJ{>YkQ9LSD-zKl`k@PhLFFZD~hQir+& zGys5PT>yapQD**!y!+*4{l`Y#%)Q~dA)0ve9*KL_XAB$CZ04%#p2~4C8Y^}ovwz@j zHoP~N&!0y@2m(k=Tfm|F^P#HZR#*!_LDm-}1L#v;Q&HpfQbPM;-MsE>qxP^AY4TA~ zrG<(nvNmj^iaIqE;+>Z4F^zO5+dZzS+iH^WLN^|{;-IyRhK1eAqpES2H~e{fw{@{J zwWGV!+4Xfd72UN5THAOi$Q)BpQr%HxqkJ(28gz0z5dG~(_2WnPnLI=~1CMf!+513D%}Z#cp4Ywl++< zlD&>N2!;i~nCPqXb)g{_iIG&+GrLt-RxvR`edKabaGUc6npuz8fVgXlQ(ffox?4AVm;yyw`MzxtD#y(K%}4K!<6A$KddQ;cF8;R{VJsY z4A|PYxs4)aMSHPeT;V0+KpAFy8Tkdnor1z`<}h&HV68DurCY=w5zRKEjsmQ(E-nrA zsqxzrx_rBwd(HF>pSQ67>M$H#EidjordF?6#ZSrG>yIC>YKg^G*?y_nZ8?D=$XxF= zJ-7<>%W6ttNDoF;U3PE+I~8aI;06j(g^R&8XS?Ft^Q63-uO%a7Ah2h0D6zRH`~vz5 zMW(ARTwUU(%0z&=s^#nbYxsT@w^uDzQ;w;Z+*LQOnek1UAie`Rpd@gg8I(zWXq*0s zLoz|jdvn}7Kr|^WPPR!w>64+Ou0)61BwT7D$w`OZpakrHPB?Z@!VtV6e2!uT4UMg> zt2=+a?aWan?4p14t_C2&_!MRXwqFd`ZPySMSlWhQ2sY`hW6Rn=VbzK+(PEM-s8lVa zuGOHEdKuq(kt%A{x|t10tk;jFuNZ&Q&|?jF8tlPZ*CM1{DpRzJ!kTK?fa`B~G(Mu!thJQf za>1$kw$7tZ&8l2p((^2<)GDW}Ymci}Vrv`&J)n8|Fh=)fR&DfgB_8yJ zLea=HE%>Xy;=TBPoy?-yt=PTRT3lMd0Hvo$)0kI}luwOqZ_SoiHdOlHsKBkW-26*- z1cX+VW|gbp5fm9$-SjJPh-AFiBiokyGB90Oj(QY!M$5vk5Qm<_iHUnsiBJnp6wDZ4B< zZ(>}$gI%+QoW?%Lilk!RBU);39SlEp(R<7sA46X4e!atuk<7@LbgWW zrk(uZmKQMsJrZwzRvK_OD;se^5~#h z0I?>3oe!a=Fp8Zh-+5{bwV6&8J?QvfbbVutC_$U<*tTuk_MDkBwr$(CZQHhO+qP}o zvp3n~-Y>g9`&XqpU0rV;(z_Uz)`phvg8pC}5!(q$&2=(of$Ux~c7Y^Ti?>N-5(D;J z@XLgHP`V?!B$E4Uv*Vu1Amf)rT+NYR4tDobttI-7pICe-k+#0(8Vr zGVWx?eI@rqigkt173mM&bd_Y12OJcegfv19e4{%tk(H# z4B6hrZrs|njHNx)qk<^JjpAxLvETUggdF_l)!?5VSg8ZO8Q(+I}gr98=`7Vpaolsscv{o?O9TVz_+B%plT((3q*bje_soM_Uyf?cAp| zV`)~~N%fPug{>B%=Xt{wWRExW+#}}#j_@)AW)=quKLgZ2>;43w$>H3GXI74BBl&CB zR{r`jBfcJHzefQh4Cbeyq3lg!O~mGbc>9ji1-?EYKClT3J*X53O1U zV`sBjwT@E_y8fjf7S>)1)zqh(YRq>KhLuQ#ymSyqI&=D7ykD1kG<9ppz^vs0N@<>0 zvYQjFWi_(6{9*Qqz&z~^4XofPRj^kM49LI8oDLQr<0*a?s6?$(ZoAxdhJ;8Y{!}9- zTx*U-*ppaOM0yQNL3v|gWy##a&4`fi!|5U50Cy?JG)V)1i>^j$!2{mM z`8&W>!8yV>-+cp~YnNTgw6?e^1Ee@1%isZ;QGwC?d>pZD<=&7epCRni1!iGbrd-G( zvjOMw6puUMu_{7@vSc+$C!3vr@P&Zi?>0zar<(V!k|zzCNLiU^11|zzy*#znLHshx zi461X7mv;@Y<)my8{3V`VF-@tgk<8O#UK;URJSZp9XL`t-{75${1Po!iUGf2-5@*V z&{~S|@y*_3gj3HFebrsk6VB4_x8k1QhFx;D2!g{G^GR_viwBo`3j!8M`FDCJWF%b& zghUpXFgI_4tGy!53gxpRRaG&Sau+ZZrruDh2+Sw;0|d|(i^azvN^&8^F645V2@LPC zVT;uOrF(-~5cnrq6FS!psblszxn&Imn8(K^9!q+FaEMaarR^SxVh1bW68j za6a;19e}_Brh;3fKqmKs9T9_6!UG5E2%yt6hKW3Y_?Q8i7?CV)oD$>Uc$*>Ew(=|# z+Rk+cooiQ|Lf5sPX@VH45bn@h-Zl_Z`H6@H@d1qm28y$bs5?c?<^vX^A77EgAwa=n zAtPK1xaT_~btf3enlKE##U2^*gYx}g(v-g5oupX5))6j!z>thjrc+^YrcBSxV*WN|s;SHMSZ!*-XmM>k8( z7%D=OZ)kjsrl6mZ$9>PrEzXVs0o>W4voPGpBrdb(ZkDVnU}5&wb?$w}0^k0gcg61M z^VB#>J5V*O?4>TT&b}L3iPq|h_|Z2pV>cZ3(Fn?Xf=)Fh7}H8gokbC)3>?*4$Ng{` z`~rkRfT7G^fJv)@QjK&&>$5>uLJaaUW<+h>B|WS8h7ZvNFNZOu0fU_`n}OTutl|(H z4rEL~?e|jNO+6zQ9fiVfs+J&@kTJ$RU_C-$Qfg6wBklV#tW!Juo}hgwef^C2gj2lS zPE#{bd@CIECRN8S#DH8hu}LKg>F)w#zLjElk7Ig{;c<3Uu(mcJzUg>Wd9D_2Th>^u@un#eT zPs0<4CbY?P+b2=dpj$W~dy;;B88C|deh?$#uJ-5xV;iesdx6CVE*j!NuEr<{z%Bs- z!F^$VLCZ+V_`vQZE;lJLJh6)W!Xdb$Qsd{!_e((80DPA2g9mZgQ#8bX|BWH!}T{_yCa$b$_M)Kh3Twe^V~yG zjq4UPzjKCai|r(ev4x6aZ33#zsTyI?&f ziYZUpPV(;5^Q}+bM@?K;C>PS8Ye?A(;OB`0fHuU*O*-{?PGIh!D=FN|Fu~gkUdxh; zs8-yf@tRGph+aTzSpHLm5BqmlXB5@YPp~GvC?=*8f;Itam0NGXa}bnwl~6)C7$ro> z3mFC<(QN*Xrpo?bHVv5!aG(UeTfya(Nw*XatZ;<|&==EBxRDwmN7J?;U!c1T)Lb^p zZh&??P#9$L)Dv5%?OaHzi>O6SIQ!NE#DvfTQBNPLT%3xLVUr3s91P_v?==PplMPPG z^n1DB3Tvz@ADw=0nBP5Fr9Um8B?=x@q@^XK5^WSI=ywThRM5U_-k=;qx!k{M<#2A@FE7Y@xL`RT zJyCUFv8`HTl_uoaJm4qnEzaH1f%&Y$Spp<>mil6cv9{6oAa5)TG7=lgx1QP!;`F?_ zP%7>fI1K3dEPrEpk}QM^D`p2%q@yrGui!m5BC#DOy+tIhF&AJ`=oFNQWZ`la`elG& zOu!~O+(#WEkxkDtV@?-y2(R6nw^&fm`{s^Oopmz_E{x3dD-jl-2MmbTztx4rXfxYT z#d0(vhUdm`S@p4&#G@EZgfa8)lk$+V>E7xun>RLCQ!1RtcQQ2fQg;MlF^-$#G4cXk zL(A6G2~55Qztfwh1C8RNMa>td*~K;}FoBFpxR^_dkfq)5$aB(87NTz8ZQnBu%QbpW zg-U5@`p(@$(A#(7a%uPT_s$WAcuJ+IB1rnWxG)E~X9Q7E-N90LlLiduve(Yd{o!}< zsH`5eCMq#d>Q)?K@;7Qwn{3DCs{Xp6rBpDZk~Lv3P&vp`C5|bWJ&{4$O2hNm%t~LR zNWlq-7>OeSDxFr_eG^_W)KvIlj4giDoWviauadj$MsCz5IeJ|%Mq!yV%i z&gBJ@bg+1;9lD*2z!dQn6R~X~VSuOCdxP3V#ZhoyT!;MrZMS|MHH94KP3n zSCND`+dV^X=*!5>0^**ZVpR zTd8w3rM%F5Y=X=sgLY=<0d$HZcKME|ST0zn2&v?>WxUE&T7;dl)nNo%1PK zRsXkKi8ZUIINm*`sZH!XPi)RWbaR}rsJTlVHeO)D&SqR4mcP+lR;yQYy*Jq~+SIR> zfZaJb`I3Ubu|nQ&FgUxVi+b=wBznm^cURA75Ot^qfoi`g4@ODN61nmjWPd=yEh%TRNQudTZZ5P+{z9A|{9Q{zY zKTvZfQAIwP-2lxFzz<%B!7k=I-mxKOjC!tCylP2Zg=PGuAW3jQXD}Io^-X%bsr-Ij z6+eKVs&JdDV3~MsT;Ci>c3hl{9kF3vq#gxIZvRyw_RVEv(vqA_=nncT?xmpTvt@UV zekRg6;1?Pm5}GjLfZQm9Vr6KNbe|sng(DOU%{rEfxRD~%7ktaSn|lMekt;rxmZGem z`B4nE&K`1@OARtZ)Ft9~TUKNsNQcbsKTLrduT%|lLC)_)!aO^ydmK+tQ~Adv@seG_ zDZp|dzXUOF7O_Ru`(D9n_jD;qJ6kRWkvbahFe|D&t^svW+Kcz^G79*T??}2|PrNMV zgmRUTjT(nBhQsjP`}Iv)5$q0G2rq6R=~70+K<|9u;OMNzpB}!?KftxM*xV7Qo0TlMQnyWiRFoqGduC<0vY~1 zpJc3SUC6HnlXt-uWmU#?sOsHF%MAr!!dVB*%++O)g+Ch1H2Ip(uew07p04sAmMyBV|tCA=^@?FFrFm3+qN&Nq^QbVysCnOeJOV%2>3l zBBSs7ik&gs15~A{eg)CSDjHMW(nBi(+Ds3kq7P5X2V(L5@>+RZ;M@Jk1{QxJ^R@N{Y3Asj6T!kOVbyNhE!jHVcexB6v`WV(i zHZn7)rH(es(95k`?iBMx13Z)*K;kv`nZJ{}#4<|z?b`nsfy*lrn6lJr0dA}5vTG|J zmsL*j8W2iLN=HJ{EpJMBBNFA6lTwc;Jf%F|FGzP%2NwVT#=6wxb{7m?EBix%exw$jPpw;O#E8c9`>&5QDC zZGy{V;3^z$MSePD@rrh~f>=Y+_VG};31fqnB8$%EcK#YI*V~vlD%;UMtvoZ^y&@M(cn; zY`WIia-rRh&<8mNi7azNv;Q`ZYRmsOgDb{){l~0x!_XFvBV4&}j3e_zq7SkLBBsu~ z>9>cOH@oaOQ>gXxf8oSr{eRgh%tX8oSTqY|0GI z)(-2EFpVwb&hdPiSG>5acm-u!FU^Wrv-@Ctp?oSklb=|r>R>8)f{Y|J7@UQs$@^g&y)c`Wv(6r}fD`J#Gd{4HH(({@}}JHYB4nmItaT-EMYFV(|!_>&%nrQzol-GeBS zTVTAM6<)0^j>~WSN62S(9IEyO?h=kLs6V8-q7#a0bx^yJ7%oD#M=HQF6e?%DW2kio z@Vz4OBYnQ95vr&XsNr2xAfp)+309dA2Cz~?s0zYl4*Bs)QvYh!llM^LkF`j#y&8(g zf_6sd|C|MIs44&kCQ#BQSdXA2X(~@d6naH81yiU%DZ9-;e+N~l0sln6m$A`IN>CYS zI@ONhlQe8m*YB9EjnN#dX*oEJq+s?+>X(ri62%f4b80?flE#aQvbZ>ccfyt;oilzR z(HaRdBB`4N&tfQ2eFJWXM~wC*m6;JzlRk13I1>rYkc3gcMF*?E?$QMiKkcY|1tKWS zFdbDuNF(ls<`(=1)2bg>J`4Z>05I{7)57_mKG6S1lvJ&zZF|Uu_FryI9(YS|tU}rk zqbew)MI$oW3=n2@lt`z%1tep8F*N0bh|$lwUhi4ba(c~|t3j|Z()iTSqwZ6mxX1Ue zKxt@`Vbw{uonda znWfepezB`}UD?+0>Ceqf-CO(}(W?$Fk*knY(%mE?gV^R|C_Tha)8N!}adlF)ure48 zjWUIMn)v5_v0>(?$|NhlIMc?y1%Rvhs>3s$m`jN7}piN$bLG z(`sYmb5WHNwDRkXgjq4=N7*%XKAlgGk-O7Xbi2*r?YG(WD_Bp}3Rrq|>NyNRYdj44 z{FVsKcdE2Zla(6l?ejfjJiC+JI)89wz`2XST=w?g>+}0TM~BDH*)t^*Wk=1bw~;wV ze_Jc|ZPUnO2eO`$f|e_plmo$a?q#L*>Xkp9dF*pO!%#Y_Kois1l8gwnU?$?4WPkKU z*%+zUJyXK7V3j)68d~}5ZH|557!I=m64zEN4YO0W(w=jF=k?SpyOc2=$-|6kY8C1Y zW`kL1Y%7+y7O`u4z5R_j11#=UiJKYx;0lS^3GLCa%YID0@rG7AlFFNo{jKvKA_UVb z(~-XktO}_Q(f|0eSL4=jS2{ymxE|){GhfeWW22-w6-F^@#CoMuS1Yme*?gi&?N)9p zd_s0VfQ#s8*>|&A-YTi8>b`83HvZ|wvf3BspW-OA9hC-^Y%Y_^;rea1qPGU@rV6{r z>#!8MUAaCnfzGg+&Pj^T8HSmjmQh-fyRu_;*Ak50%^Ro?hwn5ee^bVJ`D6ME{g^THYL{m7UoM6P%Os4}|*Lk96hfa@XbCkT{ zB~}MT=K5D`$tgigFCuupgb6|%Wl{7Nkw`$^6qV`5Ut+0G zH22Z+KEtj4D{fHCobH5J6B=|I1S`EDyTcwtTdiA?(tPO_KMkUifES3I_XiLb8Tx2Pk(X06Gyt0tcS7v}}giWfSQZR@-aDWBhu< zcu6$lX#IY~MiKA4Wy)tuGfp#_QPWF|Pl1t9xJ>K0v|~TSTdxet#c5-XSE>7hqJ}y* z@BMFr5LAlPt|(9yc$_<;;*OL2r$Q)>*?-cM|I1Pec7o;CmEM;<`9$%z}}sI_DtOtuUC zC;wuhk3q4&k1je2)eQ7j#+P$WO32g3@w$3oKaUR&2P1g7*a%^hNxx#c9~4Y_EGO*8 zS!U)_l1A@~Xuv!*>8L%Pfi=w=H;z6YIds}vpU1hFlOhCf5ZPb~+!7^MSzhw+_! zm`(Z}S`9`^mwTZn!flN<<`^qhvQpN9%0rGVYtpB*?9XTg;UPN#eT9H%5nKi}jRl89 z4vjxe$bLc|L(J#fzryb9w?wuiKxqx0u;ngkU5H%C@>>F>u;&r z3?D(@PzC4wE9;OpO{FwHg%dw0ec#`ygs1b+lf8i=NYWuh*K&sX`8?$JY43LbF+bM= zKh86E;jTIEm9HMBQmtfukgv>1TbYZ7i#`>PZx|JR0PDBiFW5CH1cfqCijX3A!y_~E zh(f`V$0o|Q{@1Em&j119R4uT@H_p$an%^N!-%lFg}m_EQe(yHg@W-KS``) z)h?bRJy)liXfZ-)RCfR@Co)+lO*s&W+{X7bonpY!eu9$C4T? zOssB1MTIs7J`*O>ryZXEL0_gpkKo16K2q?r^j2)xukzT@mbMBMI&=C`2g!v*h}!CY z=+HnCn>}SBCWvVyj071xH_Wrra1}*XBH=caMTkjXvksY)X~y7RueAw1)WrfBoa@+b z!vIQu8F0uUeme7T7k#jQl`z`W+eCwYN@f?5T#L@tn)33*!hzOotM`3QI{5S~w%{S{ zDSXLqx^Hnu%txXPWq%kORs9%R8k$lP7@lod$dMwPC;0l!@E9zB5S`8I(mOxKc-W7l z2F5Bniswv%tWg*ri!&~#=p_Bk!Ba?FGV;SH^GG)sdjVR3Qc$07__~<_AY2*TXu5E| zxXnyn#_SSs<8Qzwn}7>PE6JprC~6Uuh8vT};a!UIurUM^_wMPB6>O8^quMc5Q*$!8 z?)x9fC=1qxisAqIE7$(TqWmwDgSEc7&HoL*s8-jE#TiER$<>v&kvmgw^>j7q*6}P3 zH!|ppyxMb9y{qH4u;{Qfnb>6iIM_xMGUz4|+@pX*PlQ0$fk7M#k^uY%yZFE$(~NB# z&>vM+^voDrlh^ZbYb&2-@j27&aw-pYGlU@-fZHGp7q;~;r-A>o#=DX1;}NfGVSutl z8cI#EE;)<|FLq3Lk%vu%Z4PENpLPIIf>i7`?wSMJlqVKZ3=Iam&fp#-`IS=GupBF{#P z4Z4`)Q0wyHURAR~{BTyu(n#5wE8<-Yy>5e>LzBrnNL?* z2DkAMLAkt0ihKhurouEV(5N~_bSDsb!V~GuZXC-nWf7qNh7{O!QWT~Lg1tRy=#4AR;B<_Y_eFs5dYd7v63{xDgV|zty*+J+-wAG6AmlZ^2&~dF|UpXYOnTm z--no#`K=Ux#e7*Fak)0!nrJKhjW~D6J)a&iLNFQk6hW|1pE8d{2ua?e2L^x77V~lb zYm2$K54?>f#299;YdS>V&JGpJRV23mIUrDDbgQl%>V2` zLnN5{gc%G(!`4qFT9$P~QGP;j5QC>My8n|0JbY)yXxhh>DL;`x8kl}3(qNtnns=%| zP4pK+P^Gi{^m3!o0$1e`*pj^tm_Jo#Qvw!c8|I}OZA0)MoPlV-_G|!Yuz83W8K)|4c~?lL*L% zrzJ2brT#S-Ua|=3b4e$ExDD{y)6eo4icg6~1Y0r;51=(62XcULb{jLqcK@3;iJbUF zbbL=uiTn&VWDZm2C?PEz<63A3guq!R+(eF3KnYk8<^(IFQknn0Xv1EoKyQ}i)kDgtV)ttvN3j@a>U zWzddvj-;Q0`JG%#7<@>wYq*Fvg)G1Gc7kYt9;*BaXiJ&#<()2 z$f6DuQ7A+hSwT4S_~ReihGGWEH5pJ_Fpvobi$4c(TTCM$@qQ4l9R~bFe*Op=xWrT` zX?I18;gHD&*5Eo4#CYI6Iw{>N8%mD4bS>oQAmS6|c@Oua*lxUmpsN3uRPdm?k#MUB^94p~s5JyD5PKj?7P z&SGgjA^LQQk3Q-7-)}NqZ@XWQyDvX~J06F-v3q~+Z=OBzy#hjSciMjjM|1ZDzk1z2 zM>{_^eJJ;!f~)`Ka^J1LZB*a)!`|E7y}SKNg}vVl`g;Ao=Z@6gLQAsSR-WSX`LJj1 z{!YH_sUBMDM%8|Md)=M9ZE*j4h=u3F!rww2{DvR-%#C^7#kl=-?D`$O;65by8?pj7 zAXVn`TUa}`FYbEp>~{LGKiUe<-|hXj;(7E_z5DxlNq@8ZHUTiaJ=nY5Pt5ssX*(YH zYFh#Nu$S7~{<~5QZoAF-bwt75>+ACNk{N2dTQS)9havJ>o<2!lnbEBq zD)L9tNXo={zIs@T$@<==))XA>0_Zl!PM#-DUz^n3vVJxBG?@stu|tM=e`PD1#4rGqqjOw(&B`Z+R{jz=+gB_pLdYijNm z=i_{QLjKkqpGv~usN^h%eDWXlmHZa}y;MwLCucLyA784dR+CYit|q9Oo=x*-Sg4xZ z7sXM@X?zf)8p}O@_mnMjg}Ctjw?YBD-f@b|I?H5Js+w7OZ$rXNM5h4Jz}0bV%ovZ^ z9%^F^^IE}G9OWtDW&GtLqQ0q#gs=JCc&c@yG)m>N>4oEub`dd-d9gxiB~bh@wuCCl z2^Oam6zV;SNTK-R*;K>4hB@XWxhlRCv3^O)f|+wk`WSP*q>h%ZuIfvNz+n*2ERN3V zg_38AN`BYbHKr^BK4~z3h9|SXqbdBA1 zs}>m|I15K+k3%UI=kawCgROF00_XsAZJY)ky!b~7fB#!%U$o^DhHI$|?F{KE)sOu@ z-3t^08JlvNv(hCkbRM%&hs}ktT@Ny@oA^Lh+JJ2w`qrQP>o3X4L+r1^Mxxn&615fO z#}`D$3L8QSjWFIO$DrqJ)h;q9XXsoxJ`nip!OH7WsbZe5D<*Ba4=O_$mS=(9r@e|N zh2Cu0b0}`lu(91$kBeXA2z-Hx)W$f`!;H%>Z6~=_%(4hhjY|;^&&{zMHG>+&k@YiJ z8|n!1tn~W{pfBcPOH+e!b1gbM3? zRqj|FyeuZg>Xp46C_8_>#;nKe^LOg0C@iqJpq<$4r9JvI+}XsZV;fC|`zfs%5LzMp zG)Il&0T}>yUdpQ~8OQF`zA2W*YfUC$UpcXm@Y1j$g?#FM0(8RZI5yEzt1o0M zD?ll2^a))bG*r4@Aw^h_!a;hbC6MB@vD}ABUgY{!qCS%S+CQMvcd9I`CPbE?`=@ax zX(&NOO+(+~{0h5o&pfmdIP-T1d{oWy7t#+Ldes}lC|l?+1eXD#eFIx)n;rMPF6`$b@OR1 zRJ9X<8KVsT9Uof0Q>o=($blCU6BGQC=1YnZ&w@5iArn7(M0>TwdqtWm@6>$|+_w}q zl<(Gj$A{Rv@ls5ah2M}tt2m7vzfG{gXd31zw)GbZCHSPps)X|W1^(7>l<$1p1@Cgt z_3Ug7=0!gt=zini0DxC|gBj2^jZ^;%=008^s{}Af`5&SbWwzAT7H8*lH`>)^t z?To*brJRVvuiun(ZJ7DVMGp$&251EV16L?oVJx(ZXL-yMYebLN)s7eK-i}O9O7Xf6 zN4&`uU$?V5KF_k2ZKi^;8WS5_*XurP&K7c2; zx)*B$U7&$)581QNKgRETl@*2}^<0;boq#Wtq@Ah)s|i-co~j&>+WTZlT;jsx^Tjia zFm@Sz>yX9y>hs0xN00011V`9U@(kF6s0C6r&L2)f-&^nPQzqJ=q?EF4kj811hmWkM zkgo##tt>{M)aJ#o{@wsC!Dk9%C2^#w1Icr!Hhr|Dmcp0K*8ZCS%|)n9HcT$e(haP^ zu$LGO)LDKTvm-t&-Zdr90kfX*3Eiv$*~K$H3ONiL(LULu#$t0yvd%3-9J{Sr0*C9H0f^aV2&L6C|@U2@Wwpa!_Ybp8x9gvC-J>QL(-GD$@|`G|kAN4Tc{>XSS9GXN19U$rngw-i6Z zRwh39g(UnvZPaHDN}_9yrfcR!J$R%$DVPTdP72}Dyxs5^eTStazQ{V_D|&1qq?8Tg z3avTWvrx!EP-G8*akNVarP~TBmv$F=a19sCMcYI+WcAkSU-O zqa7<@W|X^wNYP>Dx8zZ1C2&!gbX3f7>RSOJ})u>Y~VXX zrJd1)M>u;NX33l(@eamKb9$vsIKuaAH3Nz7EMqTIa%hv?^#d37p4EeLFqmX(SN}{J zN`0f*N4q+-#lhq#m91k3?}0dY0P2Xh0CLdrN~AgOPRv1m2aENE&z|^C%CG?04pP8e zqcU#}uU%~*jf8d4V4f|;ROIAiu*64-qt>OH;*mVb;7ph*fbnST&_;wwtnrs^&7f5^ z)zi^>i=J>cunzjBZCd*S?EKXRZ;f5zmi-tKTc10hI01?>cd-JJE2Rp2CC)RX*WfNV{#* zZDP6hXkKm#qz3P;S%6Mqu5o3AiXSNs?fl-#kRaC~OH*~E2xp9AGk~NZ;^n%RvmL2j{dioE6GY#S*jE6sU{D>=oNmYRWj=a$;^x0 zrh$cOGxM7UIaTn@qrFU=a*5k2BTHG2n1EX|xdxcVc@@z!B3FYVdoTQF6_2@(P^43ig|?nNnL-rvDr<^oP4L5ePK$H} zE-S`*?KPxUsr4a?`5o&BkP3H`S* z;IVST-IwxV&)M`cNZ*fg+KkeJFydmFQ@m+^>d18>INz>QAA30h_jk?Cjd6~V8e^WM zs|MAh|I#s*#LxK9hmV-PxzbekYZQqaKw1n&p@bk|)rn^0cv3!7!OBuDp|;&+b0*PX zE%4R{!3U=T6lBw`L1h*pWy#CWFVK2AfHDUA10=zP_Uo3Ff8VIlmQ^C9fl+kcNqB*p zMe?3s4rCTytx|~VCl;C|7LwI)xy|->YP;DbVU>yTtkDb(II0e#_Q9!qV*;2@xw<85 zGvMRrH?hDrt0p2)(;=*F$*Csd)@YScIx66Xa3uw~>%0<`4Eh?R0sYq+G|3`aA)Jz= zYeWv2LYb&so-YqT@eb0R2>a3ZXBIs3 zoa~ZS#0B2_wmM|hYLZ#6OGWDa@(>Gjyzu6meq7J)eWGtYOfQfV4id}DMTsKzdK}6v zr?Aq$xgkWb^n^=X)R2}joE}MgVl*q{3mhbJQg+7M`6Nv@s4rjgrsi2Z6z8t&Yc*k! znISrWZ<#jb!bGk^L$u5#JQP9am|uvP9=e!!X=UFtYw7j36?5t#GbNZ_`0mR{N}C=9 z7nM|WOO+{6KVFO%$^Co$|H>X1dhbI@Q_fKH_%X4HYva2$gndK7($WbnvEn_9{a|=+ zqOvh{YG8iy;H!Pf>Z((`V9GY$PT;$i9=JV{4l99tWOOq6sWCK&g#FZ+g@1ASb9yP< znvASQp5AxtP413?H4K(5WF>4;X^HjvY&*|5fZR;Z#%O)p1CO~tgc zDpiIJ2M0&J@I;E4kfBFb1+w#r8p+vXBJ+U!GsCS-rIo)Ixh`(bf=z;uBZ)pm8+?V@q2_mm#Ir> zA-iiwc-gaR%Vp(z-pGkgE@@8RbAKeE#H||Pd**lp>678e6baR29NjU^&b&l~>voH_M zzj9to&0Xi&Mf{$P%#<++LTy$p&uus#<~}FJvfDesn?)i9pw(NC~Ydf+q*9!8N zyTJ5n?Ra}~%6hv#`Tzeo2w%DzKN@=gfJtJY|7A`!wzjn}*EO^?GXAeQHLH8m0f#ez z;;l!Q(R9Sh%EW3}Wt(?#yV2yc4ZhRF^0Ucyl!k^0IUUo$NJK?Tg7j6?wSr_vGMrtz z;tz@9(zjT6f<*IrIlsPd-xE0v0$?95BAm!wQhJ5bofH8sT<9QR+b{m_>+hrQckb_9 z@9*I6Yws8E?JxP6 z*DN$F95>Dd@f z6>A?8|GCLmCBz4$V4&cQ=kJyCS5e|C!-7=wli>}yU=GyU`%H(83|Lg6c-jdw05BQk zjlgDDI+G`SURNMsDOQ||dJ>pdT>#6`fFQ>#i%gD5I6hWZFO~rClW5?H`oewS-T8yLVi1d4Hlcs=u!eus2@8Mi&g6j<6B zv7bT>iWYDvO}c5I8yd@>JzOB2l$m$1D-^wVnn`I?M2KA$p@Ug)!T>KYi8#>nIp_kN zK5~;SQreRyEwt0lnb}lYLA)E1MCo zYOvWm2}lX1a)=YwoO+zX$%F--t-uk+M-%l0!?1I9kmC|&nSul;A58Rr@CX>K0j4V9 z*EA)Yv$ikOL*?Kz+AOk-c@XaXmydZ7GTRKd{+#HxJ7AmEa{EHe8wk+k=N7`?oNC7# z=)8W!* zD&~lta56BvYi~)`QTzXoq{tl_E^r*XUiWD65fiY^dY@pLw z=^M4UM4@RIUJodTZbvuBO1G)oifiK9tkbJ5CV^Ub&VF!FCi#!8BEJ}ewQolv+hVep>r4iE34Gag54+H-TI7n zX&9ws*AQCZr-c{YetUItP_Y*kC`M7Ll1*@cn^oTv)7S$E9<*k%xPME!q$<@!6;36a)yb&G(*z-^Q+hXVBCDbXDNDh?*tHdlVP8bEr^29bNB` ziULv8p&e4a(&SNEpJaQD!y~L^?Gt|S^U@h`Zz1U`Qs$QyYct}%+qMr}S?Z27CC^Wo5WIl&g|x+I z%k;LMVP-V#k})7g?o)Lsr#>FvAVn8otT?v;GN2no%{a!3fiRUzFyn($hyyezoRY~J zE7T{idXai7k?`^TCAPMDTLq=F?9P*jDU|`WYF%wx;$j3-biA zwE!7p0SMaTL~Cowk50Id%nSQ^8$E^u$VV#bO(0N&d#1KN;O+%q{*&CS)_QYi!zjD^fn;lDif~R-W_;Bhr zsO0abd36jY-eYn|?f8~(f0?U{MVS{m%ibn=;-Lj>^<`y=KN%OTIiRF8N0;jli1v%Pye7;O|cKIRSPLwDo2WoyWEwLa*n2CONH_&P(D z+fUg}=Pc_L#fypezNf78lpzqa|T{Aw(6OsYd-TnSnKDpvoREaySrVc}e* z-LIPX$qvq~6u+E_)3G@&d3dNG`B)mK`E6INKG~Pm- zC;PZMd+*Z02m{<#1R+(2;v3Wmd6a$!4*R-6DJ(M~j6y49WH4M54zF;V`*Kycq@~77 zZ2e=qfPL9NQKIG}KwFioesQplDEwZb)z)dc`dX3?Mt*r7KT&N8N6nzuym-bj10G|% z-m&7wL%b3Gxh~D64|tP09N>$Qq#OrhzD!-dw-K;oZ9z8=hn5V9w0g!sm zp$8`_e(^jtamWwpwqrSk=VSq<+riH>f!?fy0&$qd7P5!bOWJ(cKZa{SwlNUTt6wSh zHYK|ndi$u4DBwKrX>KME{fKt;-eCm6?9IOX;2}nwBVm!G-*JT7B@d*q19AXZ!aGOE z;Q?9bdCU|`HrS#Po?La4A+8WF zLEq03o}qWISzh3?HNqvFFzjv?98jNriW48R2YQLz&*fv+vd+17R^$93-SPl`DEx4z zz`36l#E}V)0aDel${+$`q+%uh3cv$9pKp3@%gAIC2eB&J1I&B|Nm^RDUS)Y)$9#e}8^Su@gQOAy z`)8W4!e5ghzZaH1dp;oV!0T~w9{YoPhOtgz_l>4f^v!xkfYzq3kslboBJL4O++1uA zMUNNQ`|RHNGQ>l;ev_erM}5rMgRl2)qX4w&ENnFPP9Y(d{+*f4v|O z9I+idHHE(f27La(6~@%>S})=@(l0CBhtwfh6yQ+D+tn?@*X`Q{i zWYhuG0+Z?Xr4w%PqDFc?3Am|ym`@F%fS$U*`d$Yq<-F36g}GqNO5tY*kleeso!PTS z8KeBnhCnqQ+>H@pQ$TaGh(Z+KC!QjriBZMi8jKd1@U<8+0ro0*1|$x4UtJsL9qeDI73!elzh|n0+9!QnWH*e(!7*Xr@x& z0|H>T{(-ophMB8syHx-&rbkz?GdQb`$trR@NW)c0N4{b%ajY_p^9Rg@Zg^kNOx`mc z5s*d_*6)w{eqlLTF@4%Zyj|mXzgAv?9eD#kQ>N)ms-q^|ljGh}=V42U7RTBHchr#3 zy<Z1l5Tp@ZZPCcNW5`yvp# zrqA~d@n3xeorQqQfN-Cty!C?iLEp7Ku(8aHvoD75=)riWxp^C5?r~xa_ZkLHnGKs1fbnmdY8w+_QLM_t z!v^(|ttI~^%;86htsM^3iIVjxL5(VdaVfO*F4Kef>}LpIYtizKC;vp99rWrMj8eZx zwfwOf249T7QRkm%Zx#ypg37Dn2)F^82tc)?#q0rUaJOOb23a~tgH=O2N3OGdQ;i@@ zf*Vb+$b5W8+TF7j&}_Z&_iOFP4Dpwn_L*tM`%Kt)nGOGE74h^F*4=&aj4AyMif*d^ zit*j%;XD1JR#|x0Te|0Vgz4YI(;mI0nstIo1@;t90c$*v4z@fMP{8YlZQr4gh}?Ab z;xJJw(b^>Uiwk9%W6@^Dl9YAr2;tpEign_F9rFg!c_~HV3ol3iKTN%2 zbf!=6CLG(gor!JRb~3T?#I|kQwr$(CJ(*au`R(q1-}lSi=RV!1POGZBtFFFUArD;x zqH&n;LU7=g0SAZ7*bWC~@^6@1<&04cv{?#f=MOv99aFE~v6-B&C!!wvQxdXU_mLd{ z_1GKSuEKGxRAqObb8jbbRq$eVGh=}YAv*X}iYVM>c|wHqbT6bql|%glknPfLG!+5T zXU9q~DjlM+ziGORpW4PX>&B4}=tuDYQ%0%&7x{Z)`0Aq)c1vK5nBWC9l;EsNc74+T zS(%_%#BKlyw*3#T6uF*Hc%~-W+n`wTH2ZwbI<3$&2iLvaZCAPfB|B7}m#ZGYf4mQ8 zG=f`rcV`Id5QmkJ9A8yG)VgW}KhY}hK>C-PO?>q%@>chD{9Lh!!8^T|0h0ro+ao$l zF?thV?QR166G;3ua@f0eEJ6qQO=p$=fL#GDAFrcji8~m;|D<(&YlVzEz z*$=O(Nnv6rc~*)2ES{Ku&S%jEhKVj4Xm>dghHd`@tVNwA1GFuIWTtEek~4y`zdK+{ zf8jsUV>6^P+npNS${tfLz<$f)4qzTX+V?Dp--Gwa+`DZ; z5jZutl`7qb!%yTZ-ABB(lD$@-Gt<52ZHD(2m-*c)*qRtHJ3#*{V;|&LU+-F?@|g}h zo~Qcu{?%a5VZ0dFwi|Q zMD~5)wGFX$yqf#<@`)($IbUTsJ)pI+i5xNX#lwI0NK=5+-X0)Vc;lxwuA~hM{z2dU4Lz7l%`#&0uLpMSVBmvC zi)fDT!f$Ft>ChXM%zVNl+F|`})mj)cq~6bf z$B;V1d-zF6U`W%$Ur}7REP+%2X7~sqPHy?Pt%1lowBv|IpP^t}*M)Ivu@&PF+kEow ziyaQcFj>A^c~wr9aNc<dw zQETM;`)^9LIOHy&MK#x(5a`RWUbN#$3Dm&Qqk&#%m?+q&3ill?N1qOJ5=kE^i9>FT z!Jw>Oths(pHm1US6>+iEnP;3U$T?al@Np<2yFvG0z;YMsV^FXm&v$L}!WqxnzbliG zP#K2DyJ22iG5Nasz;7K|&ov{4cJDqYOfPeJhW=0!ht+W)oskwd1hlYmJyis$u5ldj z?Z9>7H8U&iY%=_3#^z`J7U=GNyMjJ=IBg3D(6CkR?N|j^I=hkanlW??%Sw4!j6dnK zPoOQc)q$kAr$!y&CAcjOwm|*7PPi^M{`Z;f#)AEiUtbfbkE>dGm0CN2tqG6OtA@l2 zeSeU8%3{s;XZBBnth&Lp6xbJ8J^aG*M&IC>;pL7gD zPPyhd@}O(;ArG9a#0ae+-}b2?{?1LfAn_i)O8+qt)D4Iy+iw`9F^d?sfNsafVW(^z z*+PKFMeQ204GWcvz%Beq;3H}VT1AG;1ULOJ=H|=Ygk|CY#+iDTEVF76fPeV#C3QEM zW*cPr_RERe66e1sR5-|`f=7=FUPSMMHX3R&UGAOvkw_KMUO zWQLZ4{N(_)dOc*EoT4`@znHJDC<3XM_`d>i&Paw-1vWSg!`HqWp_!xECdY^<*J;}4 zJdmEHov=%^65UvQTmay3p8CV^%<0QrZ9wX}(kUb%>*3skJ9?sW`k5n+cMV;En=EmN z`Z)JBN(g5P)*o1;SU!=L zvKKchEZaQSdpwqTOXG$h%JhJ{MmZjLS0&ZwxE$_rNf61C{Ww)knayqQ(U z-DgAVZa^T?s3*8)2jYy9f}H<{y+ak=a!Fb_6N*GKp!(3ZTtTTCp-L$?CfFE~cvI7U zhtXfGU&+ zkO9>UWf^ zzql{bWm2l*b^=@V=BN`UzuSQ_>X#V!4sU^`r~uupsrzf@0tFAr=&wa#JzmEHv@Y8d zx!k)QVuyh>-E5S7R%M>25p$?%Jp;|JXFp)c-9L-n-bX&Yf6-dZ^#JAMUOlA@>Tbp@ zt@4QZH9ScG!_*)KwIeVgW81%oNJ@PSerNR3Z)k^As*rg|L~zPCfpw(pMa*`9ULVw! z7#E4sItQoO9sL9t;mi4VEqG281Zij=AbnxHrw%1JUQP&|-lzZo!PB(PZ$w5;1-X46 zuhCx27Jq!Z7L2nNe3S_>h=t`^087sLyAIiQG|e@OU>QPWs1`==q+;DvPRvUo%j> z)-+>ng?8;75==S@l8+SsOBc+5g4#}JD$YhNvnRl}qzPnKauD8B;f_lEj>La_rkJ-P zNDXY?w>1(iPe8jGG`=%iK%0GkkOcgYyKWNlejTLL?Jf>JO1U8aWjPMsTA3Jdb3llj z8cfmb_pmG{wV1tP(QcgoYupGu-7!hEGwrM^3#!~+YLHbn(v9ZS&iSJboe|_KQqYpZ zo3#hTHn8(d?>49WNI6@hM<>) z=qX9JJwe2Hk;6$=_jWpEq2ceCJ+h!lPL}&M%pRnKm2p=r^&0~EhF$#!7iMwhoJ<|S zi8s->8`9T27rmnW@#YUGqa>Wz|BtzHmpp1G(Cd-Sq^VHyB() zCmaX(SCpFfH>%Yjt$@{;PP1rt=plbzq){~?>Aib7yJFQjD2@Hat&_!62z$F#&uO0lr`gWS8)lc#hTMTee;Z1S|skwyY4ey zE;Yvd0}(_(8xt0=KK*b1@KWvEX`A2OTz34lxm4#ihlr|ImkMUI1We=VQ(si*nHzzl zoCq@|4t|8dV}lf!9a7T!3(ydu?^IqeGc-Q$0s4?$n`i{Pp{)y8vo(m$=Zzdy!kC-0 zO)?~bL^@Al=>m%M+dmX)syb~~0zv*a;@$UHN^+D&mF{wxD>Z{g!>;6 zcN=es-*^*RJ)g{jt#X4-WDfNkh^s8i_B1ft%x3RdQPGr+a0~v>(`6?jsU~nyLRx`RpzO8)TkwX2p zhywYS9(62=b%*o#G07S2^^jY`&F&MFKSqQn0K%=(3efo82 z{n7R{+n*UDAq26eqmSFaXcGPkWdIh{uSDg?_i1u={fA1pQR7Bkl;H!(suN`C!pZ(wlKM?aWal+~Ikv&+ zI$F>oSE+7404B?8nzvD`X}g&5WS)-3-(2L@M7IKA-#}xvowsO)ic*sgBnEmGEV0>r*4)!GYM(3v%b+qdExjdeqcz^uv5&os@U@2+{ zQ+oB3bLX!^ZHHX4yB%MlX7`2(M@#0@8z!AyUw;Pw<|;v+qOAp*9^U$jzsvQs{ZI;g zHD;*rMuWSCB-yU;Ey<-d6$d}h88Ol-9}>X+8?fr)!;a{XHC78X*CMG^c&pJn0JSrG zcS*W+!IH#|V{vd>YaGwHt;*LO1LWO4yt48TtewYUyUsL^L>DLlp+J(m-+DNa3G;5@ zqsQIPIVce_Ry?Hu%sw?eb2W#hy488vp3kX_+!a({;@SHG95B2qG&+SCr|88EcTo9o zN*tJs=x(|Xu{{uf2g2}#<+gDQJtG3vNm82(rpKPjY~UvkBGu;f)p6j8^IGhuiR4`b zjb~>e^rIDK|F$clVvB)h&bqGtfbFFU<{+(Ei~1;dWT%vGsZB9P40UH>L&n$(QCc~U z|Ix1SR~ERdoMwTXfki2xlBT#50Rf=pYQw^utdBtBt z4kdlz6=rcw1mBSXBQ}=tAJ@-K4OeyKx+DDVZW9sZ714!n8;X zlJT^0`G|gb=+Nl6Nxz0zac@e&Ii<5ge-@J2#<{l(RF2e}v8NZ#U$P+g~PzY67bH$ccJUDc)DU_=yVnye~z zuMCLNv6_!3`oZ}n`I65vw}!r{;-4`wJ|;+}HN_hdf^Fd&8ezokBl&U!__cftTmuj1 z-3icm`)onJ1(8?uh`p()^ZHqq`tE>yV_RN~e6`>*F+)026%ARWPWUcU;pi8ozD!1M zA)7U@65sNqMpe!q9;5tdd=8tE9O0`^8L$|V!@(&H+Ca9kF{v1^KV8xwre>-A`%Xgv z(%#Rdu=qJ~yOjq3j|p$y@}f528dW)745E9y+blf}97~DEPQw@&-c8bOyYwQEg%fvu zj%#G`wkCm+dnws;rVjUxa>O@815*Fojwx;6P?8nX!n*Zewj}<(oXv03HgtF?4Z5Op zhI1kLP9x0pdb4@Rft*6aSFFigk1OzSE+xOv=^G}KAAYwWC*aLNR=M-uG#?Y84ew<} z;2-JNzwTy+^x&4+dc-fAr{mNX3JlL&DDK&B`GNUY>)2>CtQF^I0~A>aE*0n$kcm3b zM$*=+-T81OxL<)bdZ)6g_*P?332SZY1egvS^v?RhR268}+MwI1LTk7LgrS;}nElZ3 zX!y5T2M%536RtGIeiPWMF-~4F!OZsE?}}3K1kN(Uvd86SYMSn1C(oR&_@D;d?T%Eb z@5Df&I}n%wC;vRj^PLH^$jPdi&+rIgQ(gm}2yBiO_awA(%jQq^(0fNBTa`cLmiJzB zrC~t`#}FZ?cFLvUN#t4G`9L-Yj_KWAU3=S%Z9O;)54y$y3n}y))VZ zHWFY?I2DI;PiW_S3|f2K&KG!`bBl%<$^v(!QIlMw&s*aPx8?J;iov%_#gEY6+Doyom;Hpp`0J_CUKALYz2IkB1pq zaUIyESH=)Iw#L5DbA~4R`xB>m23%iYVx{E^v(9CjwGKI?Wh$Z!svCUNGMzgu(g&5R5v8ZuXwjYPMrb_2S`Rveyia-=0SGB5c| z1XuIBm$nwC`uS<00ln?@)iKgkPF5i_F8d4=WDE94u6ID9mw zcD;jGx<1}F{-0*l)v(plUd2*zQK@z_2A> zMP=~CWDD375BKU%ibC^VhAGjdZ4jJ(HpPkYj>2ERYz}N*Br3Y-rgNb^DrT-lqM%0EdflF{RMH}d0%>z zr!DadWzB)NSxK`lWWUP$+6r3zKAXY0q}XLIKQ@H0g2#a1sbY};j{2X;^n|xSr7fPHaCA+ zSAAo_#6-*4DclhcGW*5xL`*M($J7Sk9GI#bAHd`~QCXoLc#qy9L=WG#xul{jc!gTI zo?T~D*YdsNZ81Fk4R3Bcm`(f=|4xL=G(^u-1up>lNA6v;+A$bzVu0SgA>*Y*fkIp6 zy@eZKirPU;+RH;n-jG&1O{e1o%{e5f2i280>zAZam;Vj*9KGP7WPmF&eQdG?rr}aL z$&FuN2C3=hNXG*8^0oJJ3X8+%{!H(n#lc@>QMzruz{-{~^D^6mW37mt?;NSszoeY- zeg9H`7CdZwGkIkDOI2pQ**G%&Zzpa4u58<{hF|A#x2Pn%np5=3DZy1+2@{2Zu2D!R zveb~8E3yEL5eim+;c}?QMkRCh0!CU%3kX=M0U=G6uU*}lA$pAK=kkn znFVm$MWswi?HbKEF1G3SY&uvr#J2oC(qE{AQ>=veIB!?sXurU#z}pUvsleAx;8Esl zE+|tGSf@@>((}XYTLWmH(@Cug8%TAodR`XV733i}w&|-w1qDBitX(b!Pwk-(vj<4i z+GZ)1q_q3gH%5qMIhcaRh5DCB(dA`K)Q=>p)vY+OGA}kBvw}n>BQ*Zvy74b`8SzNX zF3let*oE$5W7LWtRuB5!ZQVo~0m}LZ+GWE0OdVI(lhv+6e2Azl1Te)$0?}iw`tuv| z-#ELNK(Uj7j-69MSgCY7b-~lqy>8ur*>6!{KGK2R?J{HPYD4uJ{?)CwBzC`I@BF=w zlh0%5_O^oKqc;* zd1?IDWsH?^{-VGl9hw62-Hk&QA}Pe03g;AbVtlt`w1AN-f%jSjIn2l1rr|t1K~nbp zVx&;zJu&fzvfw;4%jEZ6pxz_|Wa28l-Y3mc#IbwHMX6KwrZXyg@1c#@ zt^3MGXl`+Hq|^APBAPO(>-AaJi{5yQuP3TcQQhuveo5bMqFmA3Zfx9?eVr53a8~Fq zg&sgQ#Cewg;T?in? z|1!j^gF%BAE=`@SMtvyDdw}Xja3flVUPw}OJ}g46PRPj}Qhx#Pn`gXD2d3MBgb#}4 zY8U?$8VX1CzQ%WicgsPZ7-U;LtfO7@)Up$!idJsjQ_Ur@O;b+q@m8%_o(n7An$y5W zMekt2^Q>F3RLU~PL7!r&ncmh}pRCHU-fhr|n)XM#t771Se3`z^B8xvS)$aMmR!fD2 z>;bnOWcnw9cPzIZUyX04l^VyOFu?zL`w$Y(=b6c8hx@B&OT(xUF z7dUlWZ3V8nefC1~DB34{MuqJulhF{f+o#EcRsdf^VjFQKsqb1WzW=A_^zLWsMVEcpn@#jI# zWILMV41ak@?FM8EQtOk@&hgJ*((XmjDzz!bF0))}B|?XNj-Q(MCgs;HGbI~Fv(D>| zse%=+F8`%lnot9v(QVR7=~uNRg?dt9`p<4t(FZTgiop{Y##3>26As2mSZ2R^rk;qt zHh{~Th0#U-IhGAUE(UvIl>U+vZM3S{aB{!TE=(?~Xl+)A341>Dpv6g07J(l0X_E_! zjL<9W8dQjhM2i!GILu*f))5rPN4xhL!^;lQ9laRA<4g{@E-*l3-otpjYJWf8;Wpd@ zy;*%BvQcF+Q0mjm*1?jP=Vbzd>x(5P%Oq%*-0ln^-N`CX!U=0x<+x@N4k$3MCzoFVJ->vSymi%SIBaf;DVUpP#` zm!*?e&^|Z~Q5z)%^uW6Q!NHT%uCiFN>nFJ!_&k+Csgb)L5Z<78{Y`93=;Od*f$Hnv zXb~=u-aJ%1ZA!I+ezn9NBgqpq3u!AT)1^IYZX~>EX7%fOr~cAD1yag(ZJ!8d z+3j)a!zG*jjex50zfb3?_En)>(%pdk?dlqgVd{&f>Rfh%5K#*5_AAcDUmXsgk_Nb6um>6T3pW(<^hQ#k)!&rU>9gIDAdyw? zgqjpu-Xuj3J$5?k{*|dVhfMF2@i%iy66^S}WYU^m#Bjc=)>YpL8#XekhebU|sGb;G zGiJ0}0OyJ%a;XP`^X$^6OH zO)pFYKJ~kQ`W?`kq($H)=e=APx<@4czrB;iwnBQG1pe3ceT1pAs>dqmClRml0q5_+ zP>{;HR}5lBjjR~hnKKPHWnGUGrvA}Fn;lcX>eC|(lvPd>v7IrLMrU{;DU5sjhkwQT z1mJ}P{?{*j{Yo3HWu41&;cpolWIk#}+MYo54-ZlU>W)00@`A(+j8v$EAiy+#zhKYb zZhe3dyj8O-j;MizbL3tTSYwZoYMaUHS1JqH)z^o)urS)&ez z(^eX88H!Ggy7w{OZZZAINd@A2S04)wJy-U%^XILLnij>>p!Mqvn~{iwmW6%6)U5w(Sn5d5Nnc~=huBOfs`lAf{pkva17h-CpA(*^)7%RG+>(S<@~G&Ii2T{Fi3t#ktCsF+(>El#BP3P zGkDGTdv%KMz3ZSVGGa*hRBn$$2VQ~QR$ZCV($ly`3o=Q2AYSR~qN%Hm03qt*`fvE7 zQ^x3}hBtpc1WlFyyNK%`>*=#-hRC3C{|mO+#3=;X;{{1E{Awpa|U*krxyIxp;M!mZI;?LeyFRyk*6brcP;+d2~C+21ab|FCgxq2XULS5H0~H zqB?THCixftFYy82eyMCKh$aN_=>^hfL`hb8&waK7fLQ*e1SZbtWQLAVg;A~ITLpc5 zOfG~vRp_>3+{~`{Zg1I)^$>;TcBuFPvv!X}&>8Fkqty#5D|TUfP#v+T>rkYveunh_ zZA1M9jJ8qEHN5uXKBvo^fsDS$01Ixq zsbtU%d>@`+di%muu0E=d=^ANNhl-XePDezD6fUNf(Rk%;kII&I!b_C-2r+QaOsr*x zN7}B*_fS5THhc((s10m-!y=B+inC`$q1x;Dz!q9k`f+d)6>)ZwSs6I0sO^3xLEQlf zVHdUFw#V$Q?J-j12o|+1azt-X-0OZk1x(IOBQO^xUv08&~@WOx5L(&iV0Qbt!Atz3>B5|Jlj zn-X%!Xla`UF1n$G^BTWh5lJjf!k0>!D-8;vD2e%;4}NK+8o83d+~K0E3~YyQ_jfpE1%;P#Fa9MXY>-t})$8QN2HyyZMTga8Uu4d5P^S^bxNpwwCfQ z8r~&ETL%vPjfN31Bh)u?BJ&aPBFy5-OdP1X>Y(sY`!bL~$16X-hvPGt`tmJ$^usim zU+7QB=m*O{ry1I&2*^aZqkP{^`2>g01rWkMH6j+%P0}UCH|3*Fj#a);6jzatjDr6t z%Ad37Cpb=Hn|vj^0Z=nRMn%-8y7Y1G>~=Ww58I>)$7LLLzsncDDd(|7wJ0Z62yO>R z1P77-sZ|=iA4g3-F5Mg0)pO!%muQT zMJ3-*^9)kMBB79;C@dYWjxsQ)kgdbr;SGjNG?t7es+^!#FLxKF&ZGhZ&)?*Q#QDpe0U!cc@_EO99kN zh^%Zo6tACJvQ>u_;!Rt!P1HLkth8;zYw~KL>uhhTaq#Ig#D3T)8!f!w`IbSb>s?(M zvVUy)O31P%c$KgadY@xHr72r>j!|FanGzGY z`(USJWUW_K8Sn$A%52|MEv=kKD&f7xiiIISAdxsgfJ~8DLV#}2tCp1@Ws*`yB@kJO zeeP2)NLl`aQBP{z9W$6fwJUzu=q8iQxm6b8rjp32CZznfgHILPd`nLw!S05cA>-Tz zwV=o7=EcG$WsXT~V&#_4iPGFvj_0wVXF`v>>l#_FhVg7>l~_wJ%zV~~JC$J76EL4( z*b}hmLL$w@fH_yT8wo6Bg=$6a^g7}NzV@(#CTWKxyFhgkR&3`*B(rm7%P$TvzPiLWMMFI3P{AYuN`RKWk| zfMoo0Kniw0|6G@Ik8NI$DUP*Sk7=ft@XW$E32`!L``Oo_f>0A8zI-CZxieWVrm-D@rq>oZgIjwf=O} z<~y3PtWEI2vDc08$+asd1jHv%XNk5W{$w?i+lhY`V@@QUHw4ee?KcE3B5Mdxg?rrD zr__H=dX6piA%YGt6X<#Mn&2iQ@VRqQZ{iV z*t}HhNA9)Nk6dLo*pR7%4k73&7Z|qxEmxVYDh>Wt^3;?ZaD3mm*p3l27hF%D*iiN3 z<*bDMb>xKAeQ)*Imq-y2%H2q+1%)S-@C%K;q)Td|!3BowKM_fW#LA12~<(ut)smD3E}SFv>jq&Ipk#`6JnRl)s?$oR3H(&KO{9m2mgpc{~z zpAj|4H7F@2tOiLP&o~wFsGW3GV`aJMnKew_amf3lPDU(CDK08Ws*9}(3S!~tei~wg z@zao_SJCh)9~_MTYJrN9;XD#?Jl=9x>Qt-=K<%`n^~(oyUkIkLJ(rRuoBahn%w}wP zRmy#{&Pi1VnR{0wm~;#PYWsnfl~?5{q4pM7HV@%etDOh7+Y!9H`AXbouf-urhSIDW zj=+#4l!IlZ`z#NIU!=*=p!9VI4}7~<--OH54~32XHoyI3 zG9slp*=5xoOo58lrPQ0^?;(|~rqZN$1%;isO!-Rzep~lNXXSry6;DD-Qffe(7`*+F z%y8U7rME!WgCJ>?hZH@3cF!%r!*_9O1giU^U&QB-75kQVgGQY>)$5?xAL)V#olr`WyBF1w|e070hU(tzx7Ra-g32qhrw! z_|y@VgY}i-5q3}_wraJh1Iy#rc|0x)322hM z5A1W7Fs#%;KIoaJ#+ImgSHlWMc~g*q_7Nm0=O-Pz!sOLcfeoI=@AzzEKiCUSAF+C= zwswNR-T51Ts<*cLQ2;jR{X^RuvWO<@lyDBTE%yjxa_0q|RUg?V_N)akwJbGn_V+>f za4`Do=K{YSL$0i6f#gWVGb(KzQ(yxx;cv-=Y*QkXp5Z~$eN^sTm8cyK%0kcZt_V?v z2j?iaC6EUJMZ`h>85|GaR>OySCB@ zsy$m0^v#ZrIYY7VjjT0Sni?n{mI)O$u?^EhxL+lCz-6e$gdYEZ1>4yxfRM|7HG6IQF4Q)I4KRyVVlN?fGPq(M!0cjIJmXRohePWxts@0X|(Z*|)p8h$|0J^B=Tq}?(F1RmY;|VoOK?hu*HjDLi2=WmL zxFg&|$Qn7`!*4Q=N=QpNAEn{+qejW0y}1PQMvT#jySNi>)?sOhA3*-~Nt{;V@_~sN z(iAf+@D<z!>8T^NZdHb$N2$QvGR2{=fj z#Fv}v^ri(n2A3A#x00Ok@D<~ z$x_1^9O5Zgl2ySk*2@G5e)IVgAqt8q6gcD`a!EJBP|h}K1mGcw{|N6P1xun|qW@H_ zT@dS5H33b|d&LHx3L1;8TP(k&Tk+S!Pub9s=qC$WE|;-~_dj-d1a6tV7-zB|{D(}s zaWtf6G4tVbYm3elz3kjsOH%A?5gPDfhyxj9v_A|(1hU`A^Re|a=PI%8XfIitm2nYi zFGXviO}fkL6E_9CHbrHW2by7O)Bm1ef>q35Fm|)_N@A2Jl?gjSe788x&%N*$v8Pag zit;2~4RuwC8z-pOOJb8LpH6iP36LgB&amSL%8GmeU9eagA59hvNPvc;g4z#Fs*Q7J z_k-&6Z+55;NsH;5p+aK>6{2(*pvlMg{i6$=Q2UFdexJ~;H|=IOGOG4nNQ$}%{We;J z`RY9r-{^ddri{a1nm&;=KkZNFFEjB$kTM5y!WXW8%1sLuAgbiSgU zHrCh0H*<#tEJNun9HF2gt`!V&s(pu+<4|^_E7jlX`X#;W;Vb9vGa4wUz&LFs!?l_aj|zrdk>BMz zUYPsP(aKKq8}P`t>Z4mH*kN40Z0v&hyK@VYL&>-}*Ii*w(K^w?gW?h_yl0nj-f(OO zAGE>&UKKtdMF&cqplJ@kQVWOP?j&$p2{CnmV;9Z5Wb&ZJrO0*PCd9yE5MA(jin^Sw zE8RqMyN=Hz1rgVob{TIpPnsCPTk!jm3Coelq*&4bE=AJwo?OKk@3Vy&W3Ofv-4+FTv07m#S=?99qqeOtJ zE-r`gk4JzmUX&Qn{J^SGBu>WvVgh*dt~Juijm{gSzc~^b0%Wl znE{#l(%AxQm^b26sM>tb=bo8jBqDrx?JsdxFo}}&X4l+j?Wa#vU4dVPVONf3~VTU$1T`X%kt zdW+PtV?{ofrl%a$yv-}&izJJLYd*4oqMZygrbkeGFOaGyAFnT<;3RU1U8l+X`?cpfs{K zPq(QBF~eQspcq{p)sefYJm$o6;wR$ldO^!MuQLQ=-%P=<5la%ZI%0IDOxC?q64=cy zWZ*Z~+}1VxAb#`XSo47nWnS?PL@}y&oZB9v*M{l>+XFF9G>^eK<{BT^jIhhg{hr~x z1?KG?KAUbYw=Hf3XJB03|9}#jb~^gNBAH}Gv2Y1tDNn25eUR|5lHYd$f;e1c4aDCCOMg|OQEso$ zyYlv~V4QcL^7`Npj2Kdb^YZ__vb4RW10*`bU@zh{nbP-30E4{?^qQUbNQ3NPD@Kc6 zPdgJExuzy75pqRSN$WI2ppUVsQC~_escUP~p`d=+eI_oY>&u}}@-rXV&&ik#-L_TE zq6vX$u8+ZX_;rc}kDpkMYEuH_^kG@-w6V`)VJ$}aXd}npD^wuSLlBKlHnDJ@me_mK z>jUb9>8I-8B{i-)9^YOeE`{+bpG>h$kizr~OmlR*!!kn}!kQd=q^C~<`(?fuHTK-^ z{lOMbh+=HyDfspB7RC=vP&iNfK}o$({|AdY56W>C1~r#0!)x%C{^K=IQHn_$)T2&|=-%0zrg+;qPc>N)ji(dv_%gu!2hwU&rhj*YmLx zJoDCMb>_R~zmGC10Bo}A{n+9f2edHT1ZYAtUh=I0w4fDr;aMEnQUA{sehD0Ao&$k) zXRmM9C%R^XhKq4e@UVI09=NEr;H1f@oSZ5Ow3>Mdpo;O1$oiM zA^;=7D4ev>8d5%sEs@nn)NY#0%&6{<|0h^M?6r-D;qLAW00!{s*=L zi{@Yzxk%rl1L5slk^%@H?p`10K$3LP;!3F?l@69ETE60j3lx9O?>Z0LQsUXQ0v~ih zOQsZI-tTVCZ}2()b9C@EB}P_tC*-Xi!>r-ahSP~!m)R2Q@c^uWIT|g9k0=Q2m^3P8 zI;m9YyrR#j5*8&d%TpI6uO@x&k-@g72b4rg$YB#-r-fuy)fW`{aGE23*YVhv{BnF@idfNE1V>k!Z+`GMVsKjI@z>V8)vBT}L`wae{Yy zvt_L*$U0=!0jjzsRNZF}wu!oq0tVsXuDbjjaKHm$&jkD&(GUaUC-dHRSXewfUN5@F zCMOb(jtFTq#2~ZBi(%aIumXu>)(66g&NV#}m@cqm3qrTg*j2%Nge#EReL^4?sz&14 zQmA>e$EGGJtkAj_L(#>FWdG0GEN!Tg2SYHGKFfFiLirMxV^=Ur@wO-6sso!(;pZ-N zTaPSw8}B(VY=~|316%>D2hm_A?izw?mJ`tMIg%_~9g?=CgX8z0@HxV2B6X?{N!Trr zIDVYr3xj(mE)vTZ&TG?}NX)djKE^&+-(a=#_KLK%GpHxuka$ZX*!{sgQwV)2&}d81 zpufhr(gh8|pw<7my=ra1!%wIFLv6f$WtbzDPaiMure{2|VA0gLRs0f|n7h#>hr=ML zS8CcOwT2Apg_*65@Dmg+^QA26)MxN5tJgkn3aJkv(4o?~s>|vP+2zJ=e`*oOA**KS z)l9p-?L=>pb6*kKq3FLPvL`gMHCv<@-yAO?p4Kj@Lz{87@OJu|#u$!O&ZH~XQz|ck za9Zf?H~Vj(hAiMTi+8OR2)pJlSGcwed0<>xP4>$-HWGuZqwPAz&I40;8HU464)Cfx zedb)(W0mvhusJJzTaWi~g12lT3)JZ5VgHM?Lk3hMZD#f>{c7ezl-QYnmemys2z`AU zsfy4~#+)b_saLg%Zl!QY#2SV z6F;QV_xeF#akpX`9>H+fbeaDzy51=~v!Gc6jcwbuZQGgHwr$(V#I`kY^2N4o+Y?Qa zlYgIc^Pgw$o4V+=p4DC5tE#)JyWTe}Ewi}udblIW7q6KdsqL_63z5GaOlzBmFmKuF zfKDOU%c*is!Cjk_bmEeyYo%_%-UcJSsH@hioo!FJ7(%xO?G{`sNe<5>fcq9+b6G^7 zU|w5O0@n;S#*);|4jLEhPeY(Rg8iiAd{#?>UdWs#LLZoL{xJmD5g4db+D_$DmY8|&zBc%aNp4yQ0G5l@n_^^?kTwG30)syOxHcv~_X zBvAIHcKE;!2XiFqS3cAoBpO%-Z$p^l-|if>p|#2=$CE6N58`?|7P@>Aw2fCX7j94A z+GndC9y|o}cE!cVrT3U1RGSz{G&yD95109V@x(6|uYbbM&w;wG*asrvYNJ?OheO>v z!7pfa30Ju^d(;gxEw3fT>WWZK;-`U?!{vM9cGd#LO9PtlYf(&+*C{?jYX*B>J= zB+ylYeXBvBrS-M0!{mTC#PNReuO_L8*y1fqu@X`>PMjeIt8=8eIEW-!V-2wjiI8@A zjKB8nVs>{#mH5UAUBEFFl2_S`^pSQ&M87sTjF4!ZKDeY%V>p5mAqe1;5^0{9#vwtW zJbCk?tkgF8Z9VZImi}C>+>ybJ>D`zPiZm7?Mbg}V9LOfRtJP3p>Q*eUH zul+}?YiDmi**UYeW3@lGOJp7MXA&(ZUO+^xNYr3Va5%Rlwqn*~3*(OSaI;0W%4AcX zInT>S7^g=*1$#92^GRuYmv*ch;*mAl^mnZr;>i7{?QkLeAtmmaVI78G4!?ihaQpyC z05*v%#pS+-y5N(4EiowX+9A1x{QyZYXl4HZNkshMy`B@_^PGc6t(<5jhc!+6kilAg zL`c~~*y$5-bGJ{6=eF|39xxFg0XE+`dF`{uI%2xz_qN1$1?+c%WwRT+ShK?`ywZe~ zFm8gU-`?3r;e^(n#D{I{MU9yX7-98Ya8W}-E;kO?+k^{W*LaVZXuy6Zv%v4K8T7Ck$9Eq*ZIZS-w@`_R9LhQ;PB{m=DTvtMA(FC0sM6Y^V$D4}Pe z2AohZJKQ@3Y8tHF_?-Xhh>H}&;yNYh|Y1ErrbtLD&fmc>8 zg_P|z(CxK9!22`*DgVz^4GoUxFwWmIFd)i#czPaxDj8{e<6tt2$x`q66dt|rkcp(J znsO$@-gP3$q(NAHy6QYx(^Fe+AcPIfj(Z`PFe-Tl&m?pmT1|A}p{eS_I8|M2|sTz`e4hdB@{-t6Y{y_JFt zneF|hVHz8pfX)YIdT1}rMrNNSD_n___O&8GY|FoVNz(9B-q(8;x zIDa>(r;;Wp88(>@;O)Kt19Af%Li8AYnE`Uh$Po*e>Ut#n70SivUh{1)8fltT`u&Gk z%I&QOUSCZL11q4_7);zMRd9Vzyq_@WUXpf1m-#NBq5ss(s+RBqN?G9IPOp-t^{*mS z2m;C3I1MFyoSSxk)xa!`BgJ{S`@)7QFW@wXCH! zr5*^gvVrkxblumof$1pJ<+7G14tN`QTtQpN)$*Lr5@FDRWz+05FBI4)kXC?rHEZUJyu_y zBpa+(m0!fKiuihKF}oWf9S1ZqE#>8=50jauqEH*2sb)G;Jv}vR@!2|kyzmR3OKloD z4RVgvmZ8xqb2NvgMXv$1!hwXju##fPZ-hTp%v*~BluMDi%a2u#Zrnm0UATcY84TxE zxWoFA8rR$1h!sf;aOH8XluFCJ9=oDC9t-epHNG0(;k|(>jHC$nbNQGKHEF1>fKRkQ zX^yK(nxe_ht6!8y#biA`H)0e;LuR@FV?l#?!4lk)+@`se_!BDFvB?urRU;p#oqf0# zk@{{nFsdj7p<1!eP?X1x^_C*QZ_ao#Vx#ePIugu@4XDm{RY{CEO)ool$%=y<-<$w| z+w#BQhb!wA+CSLJ?3B?blHOw*Lo z9*)sVfMs-2EeR8vJ4CDvkqqkqCPmi&*5qvE+ZR&@Iou^>0qphDR# zH;J?j$+x;{7^bMzfouY}g2)+Fj<`RJ#Cy^{MZJQ?pz6+-)I?1;aIzCDGZ##n5kmj$ z)8okV^IfmWm1ArYUk?jUU(7$L79Ae^7rJ)rr!)k9@F9y<%cNm}TBXg*wNxwlv`f9yS5(ZFh-U_mB znqB^$fB)FEc^ZTf;<&|`{w|yk;P@#mn}5H>`G{I)(BX_-`CeN4Fz>S6=HRVpB+R;Q za$C0iY##YqwoR`^j9n45x-yt@U-#bqcYuiVSpbqa%`5Rp$o_89tk+tXE%#M0UydGV zyTh6V{F(Igy_Qbe-s%I#^O{*`+{bN;szw4m?Xl; zrUtVf7WS@uje@2(aO0d8H7mlVqH4zo76m%WQ1>Vvo`p^X(x04QXxYNKCyX;iyyq~R zlFxoftmI1qhs%3K5Oi#vU@w$e>dDI7ReKe*gX2k=^ATc29mR9nvV$Cy021S-2Q=r zY_Gu#*wM=)VJP(RUqH340qwUJ3CGTtkKn|II>^d{s{R)iOT5RGy}%gMoN>nICpZ)W z6Xwr`cuGAm-mN94K6?;ddN<8 zbhW$?E)FiRhxr^zD3>6x@-)MSFrO*g(`o#{<-o^eXz(-z)<{Q!087oo$1rU0M;ATq zDnU=+nW5*4kt85j)Ov~bziER0-W5mvjz7eX4-=g{MRX$z*E84kQXc2ch|T3o1@3p_ z&s?Jd;6-{@2n!+wwGw3$eq?5>>vQa9U4QO8mJkS!{YjG2_JhjjP#IfB1*wWdb9M_q zvnCDGJtsP-%59w1GbCX@`d8?FG~}Lg*-Yh?d?7PK>tM6zH1z`}Y(gGYyz0x`plkD- z+6ggLPc@0pqE2S7Q*U8A02k6)))OO>#lOrqetghSE2~?!6{LFH)%NV}L?Jb~O5y0) zT$`KZs!*T2Y1vyGJs;&6N{Qg;-3j@jB+awGS=q?ey7^JjyYLhAzUJN~Li|C6!dw9O z@P$m`+??%>l8US$dswU1UVf8Hy>Zo4NaM<({DC}^_?nN;684Auy_AB(P@ zcycn0s!rDf)F#TW&esp;uF9&?Y&myu^?eO%FofufzWbKEcd!|3dZQms%mn--7u25! zcv39&G~v_(TMw|S+3rR+IN(jX7^$^8B04S-Yj~okY4Y>|-4~BCbM797=fKc8V#xC-NQxVYGX7Q1TkIi0;d1aCNTlzlH#+mK;Rvu0@ zmmET-!(Ue>c#jgkleV}r%8l=za21X44S0#~K{+&!roLlZy450u41W6j>#@R*3e&B@ zI^_*xg-Z2fbj(xb>gN-s8k#)?jSX1C1tG-_;*pmoKZA40C{=alYKKJmLB^K%6L399 zt;W^ZCzd@~C&~i{&pjws5KAm|0R*Y7_A2DeKIBFf`l|X0fMi4o*6R*{lnRjZ97Kb2 zh9ArYXGgbBM$>jcJH#)~nC-KFUXq>LCc*_*I2-KYa?A5d6Ep(3or&U;BSQKcL;c=M zq4c$T=&(~X3Ds;X#Y=KPyvMwRi0WFzztN~<1dx}DDpTsO2J3rDRKat$0#<4)j-X)C zZU(Xkyydgv>(+elw<9+k(eW-rwvK=DE`}P!=?`vN5E z5&S=Ehu@KJ{I|2t#3s_8#uVSrhAk*3FH}y*J_3uJ~3HP$= z8r*q1@=3EK+FdrHhM``+Zxtv(r>$J>)spEW zW=(i`;>)Z!7h7A+j4P)`2I#Bs$Pe2(hOel9VtAN0 zhZ@+vcXj0d;YWBu^w64lM{5v~&2RWz0`T!|T>)6DeZ))}-r|KKlOhXqQAJ)d5(f~YyAhZ3u*0SX8>h}i>^hXk>(oG7`$fCI4) z8I;Q{#ngN@!Xk@3H}aH52odT(d`s57;KF!d(oa6gcF6Lki+yDNGW6R&up|vtTD6H! z{6V%ps9&a>AUZA1u5t+hskBG3ZtenzrBnGz!!9h%B3o}yAU;HK)495hp5`I-9GFq{#| z`=TE(C|#%$kNrcsRlE@O&AbgU^79q-KWh?P(eo0W`48Ijv%lz9)eqV;Yx`2|Tdd&i zES&P$DgC+gRD)&k3-PnVG}zYWON(@9^r5z8LhVv**&+y3k#=!!zhtn-;0yseY7$%%3_Ia_z)J2bDw4C{{Nui+$ct z(zUb#TvCqb&r_;BTngI;gT&u9Xc0Z07%yG+OOn1;tbkuHCz8fCSUA1CfKW#=0sJ+h z{_cxb>4MU&*`HGnaBaWjXn6b8vtQfhu?JrJCz*#DZRw;p(6Mm*^{_M#lE7TCgk!Vf zzJV^G${ImZY7ydC&tXLbes4n7-a{wdb%Z#mZ=l>9ATD`tmg=8EGQzfZDES{YP}TO; zMMAr<3``e?8irVYRXTB0bD|GHIpE4UPlt{pvAIx7o%OTI!=))$?rsiN<1l=UQCLxZ zhDWFvfn-^#8X_^btJBnYgY>>+>K0eCdxu#j3tP@TbLJlzY{ht@TaB?G`5TbuceStih|dj5m8PgUIDTY-l!=rh zE9-)#auAKaiU{S4s-%DJp`>v6(v^pgU8*WND!n;)Ro>>vj+K|JyIRj62{s^WgQzM% zl?{KjwA`R6vuv$!HEMN_%x>(d9Dij?=U1%*M`Gc#mthcxFxyD9N_}GW4(h=Pd<&;>MrcNbnQ0vCw&8jS zeQ>T>*c6*o_Nzs;G$}ll1H%tBK^^hbBc`A&&wwX!0vVK^7(-;~-aXq<3opMxEh`eL z6dX{E#JbdSf-Zzg)Mb#H9LkV+HZ3U)@7H)Rx8du zhFP0BjdB8{rP!!VkDq<(vn55RI_;-e0BB|5Qx_>Llc;{O9YU3~^+L!md^90y`9>hh z86Y=Rk)nKyn*PM68owVigTys=FHU-811N8l!^9`tQqDD+2*Jai(Ru(Ij*3wKqU(<| zPgxIwAw{{|oLsD8U^55s@78`W+BxiW5ym^Hp@(W4^kYLtpT!l59*BX;491589l8?@ z-qUg>-h3mlQ*LOv^UcNe`sgH^sy|Gd{eR&_L`mX9H8S7>&YHdKOZ`ICF~@EDnxr5X zdXs2)Pa}+oo@(-4;78+i{W3F97x|DiTEhW=gy$SKI8=^>)+gTe4liGo2Mv|ylMv<6 z+bQNywKlJ5Xksxtt$BYygulRK$MyxYeb+?TUtbLaBD~|unfAtbp1k7n+&=34$uv1# zRM)qXv{1x?@`hY(Z;-gg*tS~hTHJSR4=JC6iNH?0UhhDt6QaRqjta2VU?%|@hosve z+{_qn%q4bFzjEikB@+n0Fl}Am-x~3l`G)tEJ#W$e3VqiCk{Hxo>c@IxN<31*NxNY) z11bB;NGwl(F2R%w{%zm+%Kw?<_%tnP=ir?YeI7E^6BMSo*edhh?e@nfvst2zI8m;; zy{#Xhbt1_Zc=xRLR4vzUmv?Ft^YXdr7_S{i=$4!u4e}b{-|)DXbbj^LjfG`38^yI{;ru z(F|WlPR^qdb=_*JdbRx9bKZtQLm~#I%a@6}_9R-`NtQ+`&%02Q7YgvxMeH$`o$dBriwA0oNVb`UMkyhRT^|8Zp**zJ+3)X>I@h+iBdG7$YA|5mq08w- zBvEIwc=jW>6C@2-u(1IY`85)96*h8Zfxi*Wk z7Z=>#RhLli(5FtAoviO$%)KIb(-+wc@-?7j4p!&OfB4j&H9N~Qc_MmAzfwsB! zGs+z<;S)_IjObwvKI45<78p(Tx&%t^WvK%(&F(~xsDOe^ixY>1FQ)>t$_HmFnND{TxLQJklu+9 zqn}5BqxBd9*)f6eQk8(dSccGfN)u}#MRQaLalo9zOrk9Sm!c)}YUP$6h1|2uDtnNY zVpuzWH8T$#P1a)T3`14RV>FrTh7j?=v>}aFXmAIVKB!)0$7QNChCp7nyh>w#8KePq zr!HB#zM>KmA*=Xrq;KgYYt@W5=yokD&jJ1iggI;5URExzCW*_^pNfy!C9EKmRr@44D`? zTTVc^_)D8r(a1xki6_q_g}jgO_30f%D+pm2?_mVnDGiRb<^& zX%A90uT)RvcjEV^V_&sJ_I|YmfYc@wH?Q+72Ar>sqgsTtQdSRG@!ZQTs19e_u5hZ} z)2}yW)I`Y@A`11cg(jym`+zx)ay;3$j_Nn@JBuk1fot+o^vL^grX>Bk3NC)PlCv;} z7TKz3<2Y991^_u^vEikLtxD|-d~1Uup2QeGere*>RNeloSLli29}Q&sAQ3f zwT%Nw?5tIR5gqi*W?*5ddqh9X`?`IntcJAS(W4Ln$GCSuIzb~0K2aFhAO;|~+IA&2 zW@B89TwQt_+ssWPx)rl!6BU{0=BBG`D;7-Rtw9 z^2H8I@b5Z8hY7ej?h=-&WG)$bv{qigZ^3e+c6^P&jA-o?`}AsRdL%Z3SjMKM1W5th zySBYkac;WLA<#8wByfc^f2ohj01QA+S9R1>oDM>FB>8~Y;c_K_jippVSUHq0AHLtl zO24s*2D?FHw|c4t9Pw>hC5mF%6(=Q!|8J$fK`VUI zy#fmG1vM}#bJz#bi`K4?OS&sh7^}N1c~*M4%V(+(s%KqCyt(+yY4J*x%mmlY*eX%J zQSg4o%hsFR3*KC|B6_XFq-)C^_ZvhY2>I6uBhs&Q$SVoC!o$g>twap63#{qo*-oh^ zUvEE`&hcSqH{7|>v$uSLG(75$#T3YV6Krl&QxZ%?b|KjfzFfqa(7q+GJS|B2+`2ql zg9J&6ua>J`h;d}yxWP@P=SIpu%4Q+7%8HczU=#z4vc=xL<<-G82}$84Te1!C%ySC+ z69!&D*imR>x|NYntg|K7I4(l%QwS(Jd~&}XH5XVenban{OK%)0{~`fX2vV{BLm2YF zb695@dQ7WxkE^Z+8&*4Ua%~{qRSXd(L%QRCZ}~T@!#6Jp+P({N6Cpl#FF8QV+AiE? z_UL8BSZ#vG-@UXas952d@b|F*cb=FCuyH&L0n5F<(_nu^!1OhvQTXZ_Bggm3{ky~8 z@s=33_Fj_w>kT19E6yS9wO~2}-DJ%FbNQ1O?vCv%9fi>NolzjksBA=#mia3S)xqRy z@O^*V2acItpZdPvZ{!~9yK1P{mp+Fu6^q~W)G@Zbe$a*`_~OF!;5@#;(rhu-47F8Dax91F3z)Y0G2rdP5Anbx9vu`V-R|E_y{q1D3waD ze!N_=>Z`muVi6$Xv=qh~)-B57pjmndw~zi4zz#D+zHR8H&?}>jP%{o2MBt#%`nY2x zjgZR=Uw+UqTJKVr3(u9%EK*}gd+X&Ov=uR5c)ekBh@-8Kv89tB{2({WLDA7GwnH|p z-H(x1#oY2s^)tz)hVR({8S$VNrB*bD!Y2}F_6gW~WG`~hYl%yN7bUE&em}EAteEmd z3I0PI@1J`!s)6+;=1cg$O$-CeTA}oR<*^0i?E8-gWZlgf?k=ZJT=&gqm5!W&CeL4d zo@YqvZpb@xF|6iHuWJ0yaVfVgJRvvSu_tWvsrP-I_M?xZA0O!*Ig9l|gyn*^k6rD3 zfc$`C&VA7A>;8Nfjtx8~M7UaE&9+oWtZ=K4MGt}yt{~4BVnRZugJ4b%A*fw_fCCgY#fq^C>sTMU2aPnX_ey_n0PM$*Zu`v(p+&y>HA@;C%+R!(yzmBJ|; z5b`*fY*y-XCEUU(?qKpbNNiTzb0y%cpguV^F@BV*Gi-%sf9V@^E-NrYdUJ>|sW;yfBS-h}BR3Z-G93PC8DG@@}5Jg%ukqJVwkm zU!cB3ll;lfq2z9>x2`?4TFm)8Dc>jD4Gze%9I9Los`1f&G@fBqGojtMMu$o(>Yv!&*C}jc{LuB-Kf#t4WSZEB=hsi0Ahif5&J(OvWKy1orH!vfz={ z4ED^2B&t4?447`xLq$G~8DNB1_>kymK84xpHbk2f^SbOsDbd@8jcc7@xH9n zITxzzou`7?ChiLSo^;p)|1)wn4alQ1WA50CpiTTmg+0Sqe^7=$tx<4On)n z*#vcxGyl_P6J5_k>FDr;AT}HX049cxl~EUyK}rJbH(7A<1em=##av#8Tbd~;?9>_O zfigm!jUN53gr^NPl(dfQ=hY*Kr3`p@lrd5J*i)%y)xLzM41-(D2jV^xvynXj<#({EN{%$H@^A;H6o!;R2=q4kEC zsa(q>PR-z5FpuAAmcY${>_ktWm!H63Y^5@31GQ$PD?w-$nz#7Mu~VC_+@d)lJ^wkB z#l?743MYH~c-_}uz+h)9Pf_rzczSAY0d@2Z;lIsJdZ}$Q`^O1G|2SlV|J@mTx|-R$ zSUK4Ln4F)2EJCml+_pPD8ZLu93Ot-ZRI*|JAqdUBNxVNmuX9ES zwtLc_tVK7Z*&DT+Q7YFMvb5T?Z-x3O=5Ji0eApweqYlvmTl0ecB!Q?IoyCSWYrftLh<&8{9oEC8--J{Xr${D@mtXdD<4eizMWA#i8$=vXePgDJInLG1Q-E)8=ehZAdn_QkK7xf8-LE=1U zXWbUVznxW>nqOhrh6Yqxd$)-m&iB_+P-u{phOE@#>~n&D=qcEwNL=g%j`KvA5h?T* z{r$b_I;kGI+uz&t9kS$FGuQ5jeJaHVrpF+bv463XmoubY$;*gYujRIJlf|~l$1CM| zvj6jz6y&`CXEc*(`WE9i@{zD*ozCkrvJQ-|q)%Sq=rI+W<2Z4*ssR8(`}PYb7S7jl zvgyVZa1VvfiE2TG%aO4uuSdTx+#Z#5;%H{_pLw7ZM=xQs{eHVQSc%|Q=SAvK zDI$a#kw;t4$(*lY^L5PZ+yaLkE3Il3mDwu%!!9o?8M#WbAH0H;ZA=dK45!6dT6w3n zHbq+9aI4-`_QjEY2Aj*KiepQ4D>ZNAir=jnwF<>^>yh?hf@;g9qts-`f!!*UXf^+; z3O-&X=S5CaesvSrLz4=%&t`PE1JbQ%9BH@Qx}U~j-)BeoYydTu9+vict4b$LSn*#Q zRX4YZo6rqxnn;$wR(W+ErNXvuj4=GL+uS*f2P(u-lrK<9gm;CdX~A$K*w>EgS%Nu- zljmID-xDHBx>5e)39knfIPD-NHqkC*! zb(XsKBf?ilv22@7JMB>Z9`4@xbQs==DL++PYWbkWB55Y{SrX3xAr|z@VfUdZASO3~ zd^O@333ZpHS(b9W>wVT0g&GQH)G33)I7%w?@8EDo`-zkDD>?wpugA5h-@5ANu8+F- z)S!Jdyup#K2P^HcLE0tWS90WQ!R@5d^_SnlD?`#~Awt1{eqtTTYMJT5CEi$JA-Sup zk_$Fpz-q5N%t39Z72H)B-O`e4mV@&&jjb^n&l<^)(kQ^g;)`oFd#b9NHO!TpJP-ZV z)4~B_u^#Nlg4YbC{o4T=6MKci@aUm$?U0)Sw0-q7rP4Oho{S74q19rcqyL+$rXEEc zF{ALcY$=T$HJIs;oK)pS{#3aN_bsgLAemx|%^_&1%m$o+7D0u23PrJrzX>6IakC0} z+$|6KZb4)Rq*J`t?Z`ttLL28-M`z^7S+>^Cr4DjWEy6d6KPbz7fHK02-Z2(Ac((ec z=dkqcoOpS2VfyM7kRZg2yY?aU5x&oY92F_@&7w$1_(3c*{P%L37abHCGrAR) zl4Lx@ZeEuYi=hDLdR6b3)g)t|4132tO!&*A7ifx!rRXRlJG%sHdOUDH6gqHAbNtas zQT=GUMT#HV5;S;w6p~Mnmd)8Gv?kD1N?L7;ZnT{(>)H(0 zI_TohE97ChId4=78N8w8y07D%qq{15AlSb=V5;Ch@IH;$F(Q3gx9*7-kFV+z`aZH` zc}z+@7=CHi{6hCB1shgJaKa2akoH01=!6q`t&r9CJBfuMY^O{>5zq5nh7&=AO_U$7 zF~30po;%Tc-?0Nt#4Q^5R7b zTS`R?hi~i!zgTg-qE|x3W^BWbv8M449V{(l7ds{vge8Qd@vG@HX^8TO`QHqXZ;Mr` zB#ph_9*$R$!yE`cce*hLz3u`{6VC>P(caaVgIgB zVgH%Qw7G3?M!y0>f0SUFFwz|0$0rtKLSR)`8KSN86X#}shh|#Bc>3W^h|QBj%A-st z_6N5Dzu;-SMN8|_uyXSIrSk-ppNEm&2hB8Rie!35fIZ zX0d~~Hlg3ccS*0yJEa6x4w7N;HV4L)*<%ib1DK^fU)Qh@!|ommr^o#4J^0^fY-jkbsq9C>Y=@;sUpv_3Kci9Tj#gUMt*oZd8Z)#+O!%T*CJsb0j)Z(XL8>I3 zU8w19+LS=ENP^&afAhpgQ;kntME%W0F7{=F!Nhn~e$ojVCC$|#+9i&$$8;3u4afRh zPtg)23(*B6kYai+E5z=MRm?AWh|@jiN}H7HK2?J!$z?glwjloKh-}9p&SH-T6y7 zr4^rW)r@@D_Z?t1`F*d(5vmy&z_2RyZ0qK6D;NyU*zJiRy5M$8@WnDqQUm zU(R4d{9){E2%(V)4U=7F9FqZ22u!YJLYGdas@BbxSoMfQMmt||kTG%S@asm?X2tPQ zc29K*^Sjtp3SiNmVPY%?7R%%SWS}|&Rv9BuL`cQ(;y+7euWjhVr#DviWip$@r00?y0*S>DR-9#rkd8vXk9J+rFCCR4r-{0j@_lbHgE)?A@};AX->#y)>D++q6JFaR+!9b!wbx^xahL#L29 zS$pI1hfAV5_# z_C_F-rg+r0kafEanaAH1&)^w*ME&+j^J@#2l8(#-`fp*+4l*wJz_0z?$h@vcPUy+j z`A0i~?PD-k`nZk{D}HW=yspf)#FH%Cp6!V+$em6uc6GUkKTmDIw5O$>5e*)$LgW6y4f$*S9*xxQ76o;T19PVl*;&mY*ZTo0f zv_t&$8(!8Gv3&+oSi-P8+x`KqeHsaDz!(r<;kVcg{U(J2+pR;<-u`n{X-#m>vRGVI zozhXf;(BR=a8h7$cBeZ71#3P+xK%UGxp_6MDA*e!;dV#of-~3Lba%xjz{8d-Je;k| zs@C69JJiyc2}}eF9{_o9Oj$nrJt{+mrB`bLO!I;Q0+S#E81$xacgTN(&KZW?im-A1 z_xF78!vKuOI)yI~KM=UOIAVF)La)-+!kiTmW%ivTm#%PXF%#Y76DiU*swTYd;H3Ho z4@w2AM-@`MDxv5|hXWKP=YnKTey#$E$oxb$$?OWyYM!_95{Lb5aBp5P}h?{ePJo6vIW8r}R#_}|NNjOr8Iwx2CkCfv`~ z>VI99+d5bnIGfpvQZVshNTynnA5Ex>96W z$z-kjARYvGklQUhx&O@(NTqmtsC6*YTaXz?rKvQ}%Evk=m!P>G&7P>akR7}X(fKII zENTlTKSOnJ3kI-dO=d-d*?oV$hi`QUxIEquo_avP>ks+{+gBh#^sc+wR+=MjB-!or zHr`&B0z=i0(5*xCFJ5m>cBT#3bf1SueY}obEKuVD=&$<mJUdUoCxAMF##5>>+H<#R zX{9ZzQE;A>B^@yn?zgeaFz{%{;{S&9`^`QnL7Ds>0#xy>AE=3oU;+tC$Ms=5((4r0 zE~;d3qb5?p1dSPxQyGRdS)T*5V2|^b(GcId=t?WsRkolzD2$H$^4%h%l@Cq*g>Kmx~hD^)~c~l-+ zk)K#N&^nGAnIPI`)YZx&`6Xe7)wMW9rSH{Vb13p#rE#}gM))uxlH{xwg^);Tp-5x% zg!3zlD{Hv`BlCd{5=@|qrKhZr^>rO{by{(p*QD-enWb-ibYj6TUurPiWzCQ^<<9A-!Sk zW}q1YI@ARjq3(zki|QTw8?)8$Ag0meUfu&XQ|-YQHhw>;R=O^=je=$Zo9EzRg%YRI zJF)2y*gsAjIgp7dy<94k8~uwfs2uRhs2G~n{kXlgW!UK$FB(0ba-RYYo1*s)Nh%c^hccT21V z)qZ8GrgXoUKbZ3jWZ}iViklgR-o*sS7o~oFg}7hM@NE=ulfD;4knttB9v+cXV{>y2wLi zmSZW2$1r$K)jm#->J=Y0v?|Lj>dSl@k~_2ux8kZt1Uc`U{h#3@B#mq0ziMt` z-^Nir5<>PGSfLiew0YSw+uI*vxRX0EPgElZUc-P>=Xn^xhd1}{XnuV?=VtZo_Nsla zmPd8<_WtvRzlY!Bo#%HqH=yQk_G$XIcQHd==e76CXGK+%_j*sj$C`e8-VLGsx39PF zm+Rx`wzF5c|GkY~Z0g&4_3iblxOzgGP5NPI>qdcjO__Q;e6B`W_OYk6%Z@@mUjP*@#j$Km7@IYnLtN@vqCw zbv6Fx>@3dA#BE!S07ia*{z)SO$mI(>T7Q| z&Fba9YwM_6`0*D-n}F^B9gj_o=h;FZKi}JQ!Q8U9Fg?cGRACsG$XX9+Gx3eEN> zH*m{Hf9JP99eNq_19}X;W*@6Cef9YyjxNvry6-!M} z=Xnux$d!e@fqqr_KTLOOFp-{~ROm!Rz_QShQhh3-;bcnGBFs^`RZ2=Ekl4s+Lc$OO zDBNR0x+Li=EKET%*wJ!FD&Zoi++&ezU@$C5Ib*^QMW|l)I{Rn?hek1?uqlD;2Lq&r zb4bWAXktWSNg*&pRL+S>!qHf+R5H@Qp;U6xL8)RnBoyROYAQtJk!mVHYp9G=B7+~r{v+xcjl_`QSx zd=#h?>8D2`Z`ND}z##}Hv=~BAk3WqedqiiVRt6XcrBeN9u&Vi^LI}!#oqr~wT9*wr$(C zZQHh8vuxY0nq}LzZQNS>o|kpv?1wQ%?-3*VL+dRvTmG5(<-Vrm6&cF!t?lpaQfOQ1 znC4PX@uDy5o@Pr_#MZ#9Nr+RfUv_tL^(CB78pHWfK z+<=Ql{*ScjX+u&&*0aucT9t`V8p?YRPDhnK+f`@2zTMRi@PFH{v)gOwy%=@!pQ2^cA3ZvSPuRs=r2%$H6;}?RR}GuwoY2EhG|9N}bwu%GZwE&ce_2{H{m;YcL>$rI7atFOo3+cmExF{be$g-U-{$om!X7SQ z?U^MWQ$*rsfe*i2-!K{8BH}uJav8+rxeaOgt?IeE?(BVPqS8&qo3l_CK<^YRW@lZ?*LYwgbJcA)=WmwEIq{WvfHfGK1E0L=fVU3WBaw)jtS zX-ZwoZi5xs_obFy9GBEiGS%8{Sg}fdBcFc`RwjT4BvevLc~XUtMRKD-xad)}!*Wo$TaCq@jJkSqlTM}U#?9fna>F|BWpsDU#ds@4 z7t`Yp9#^7@3e?JbuIz?(>8;s;W?H9Zz4~FwJ+3ZVE9aS7S|#Z2$>HH)u@6A&o7M?U zlh%@8zLZfjxQRd^2yxFuYaVx(5`2wS+6j51zJXoOsY;WNk#%P%mHSQA@s;S_FqA!p z8l6Wu>++(`-w5O0M)f=yjvSWt&U0C^YAcn0Vv4SVwT9+w$fKT+W_0YHEm(yfCfCyW z0ss1Mlx27N3vKmy>qg4eB^mk*_vN8DP>XDkDIZS|_eZKjMO$@@TmVrtfz=X~-c{Lf zKbKup04vDzHWF|ctf&{KokE)A@*7izAG1)S&5D)zZ>CBzUrQ>Wp!3LN`>ICm&% z%PG!;3kCLiU2lE`Dkr-?3>9%^$9@R zteVXo1nTOLSJ>N{s|?Cxxvo(i&)Gqm3m5}&Q2b{C|30edYA0o-JG#>b2`{gml~iqK zvUu&7J6e{GT{l7*yR2=ylhb(vXyW0_TQa(C4<`KN47iYkvmxUa;TlAMZy|!QVs5}K z>AyK6cug3&Z4y_>ol^u#)r(X_KbGl5EojUTlA}YCwB4>O<8LFgb{ZR1UN?Q!h%BUE zYO8pt8PxxK&6#OPG7r$fKy-lWEnF}uzQO1(h`BYf&cC6^)O5(`4viV-3u=UMf(xfd zWqIOcoD1k5rgl3(}ZSfgmCa%W1IK4Qv-6Al~(TNy)ZJdnYIFy>ea=pK>~0TCN6 znDInD1=lgcLp*^>dK8Zk%XHtR)IWvsRwMIir(IR4M?&Oq55R@F@73=AXSu&i@gDM5 za1h8v`hkao9F|)OmrTBn>6qQ|+>rww*E!^0LCR4;BCkI);Wd6eQij8~?}dR&6Q4vH zA|qI)ImoguE4Ps*QAv`(UszeWde*is?dVS*tyoNAdIEY6Xi!2j z7M_3m=yRQs^8Fdc-z4u)8^ELBRk$xEEMX>iA20M!P@Jos*|IHX;q@W0@nK7_L8TJaVczx2G=S=$*Nv z-8d7SX>K9OmPUmS%EqOk%I$pA?e}l((T19AmX|!S$8e+KHj*vpI<&4nvq>x})P?LR z5=iQc13-0U?;sSG>sG`$QohiN|I>-^YEyn4Zw^YV^HL7E^!Y+`+N}uNfGfwqE8>b* zJxFo&%!N!i=tBJ@Ff%!Amqx(w*o&N+Ffa~Zls`H0JU`8-WC-;C)M!!wCt_x}EwMA-KZ<`{tQJs7&vYY3nSL!1=K zRs_+RiIWem2mg!w$P-1F{L*1@qLVT(#?o;)zMazX@MskFJa7?JT4o6HLA`rJvCPiS zOB$~b_zwLNUq)@4zZ}KF>RNn7++)EMGxMScZ%(Oikh(<9Nm62$Pvnw2bV1jh_HN3` zX&hP}l9A)icsrtS?3oyuBVZ8_0cROrBwRODRpFA_zl4%)jBz&BfD{q1Grq^7aR<$c zqj&s|1aQ4}kclU>)jLiQ7M?i$s>8M>j{gZyj zb{;579!(``93Y4Z*qS#r4WiUtV*aH_x0MtBi#@96>1-IL8Z%fksU!v-W*wf%sqYUx z!+7|EKZFh(N?b&Vr~h)*v-$Y|$cksssWrpI!<3i}+Tbsl!vWvx^zJ<4+{z3UBIt!k zWXV}=+>n^9P!tf&`q`huR%|S}l}1DH+c7`qH&W28*qW(4uMv{#W=>?rc)lwyyPoAO zBw2Rmd!94PC{(C%wxZ#id1Tg$ft|Xf?4^kHjb~w39T>5_TXi65sy=0^LPJxoVIe+7 z?qgQeADul-@nyqICX&zuNWnpD2A0A~Q7Ym19?dMMR0yZ3C#$+(=_#LBOgt3OuU}1Eh@t(i^U>YBKo00YvLk_qbjA4&PAu58pz?qETuK*Xqyz; z?CawHrQ(hxCiYcsZ&4}V<8S?d;`umQ#oLLs~+t0zBI3dBmeZ|MsyKD2JM)fdrIkA_BY4e$|d4%%~ zq(U{}WL-4mO{@a}sWx-se*Y1|yI5LJOkTvR*k|8OQkJG8PM$8~obWf2Ef1a))kR_@f zpLm32R^K9oi!$ZRh&N?4A{4hSu-9LLPkpT9_T7^OEu`S3{EkiYeQDBQedIY05L31V z8FMEnD1H3=v{ZQG6T(nTu>w6Hk0~ch>D}~wft|39Wzt*qb%QyuDBnMet1)*0qILmR z0IyE!dPBZgs&4puf_!kE)#`GCEeXK2WFDX|5Hh^CyOkA>2s0-1L#exU{F2VHCb zGU5q&f>~y(bJN!YX$Lj*pIp}AwYz~Y$_`@zs{|0#L&A5$H|5#4A=|(Df&-%( zMYm!c8ytTiov9aHGJs>&IG3Yjq&?a7E}J4C5u~W>(URPtAcQDB1|`_bj>k{VObZE? z5)70dhX5t$r}_N{k#t9KT4sDhz;^H>bgMH^YF{cGOY36hAB5F1#6Q!}kVb+)ID1qD zyri}i7Y7>!ye-GVPb9zB1WJoSsdaH<7fT~0b#XEdcqbvjU1$QcBOVHPOo5$o82^2l zEKl_%O%IQw;4~#C@^=6C1-th^hnz<0^l8BM*vNVo(KBV%fEUiOo;ybN&VYUjd>Tfl z<8I@dcoZ2+-xxC(ZVZDn;Wq2l+oMJ^uzm7`K4=Ev0UsJa3SSC;0-rO>Ycl1&$Q|Vv zbJC>;q*Ip5|H-f!5?_tKCa@}?Do7i+eYz9|Xd%$z;p|@2!bU>+50GKNDn1rI8^3Ks z#&nlV7{DYK{mnoZ_=8mXi-9kwBi12wJQu#3z;%E(q$A!TRS&b5ye{ZG$2-F02z{=< zbs#su8juG>1MEG-A;TzAPi!IdmKl9-jZ8L;S8vE0HmOeiwLdqg2iQH!C>#DxAh+3s zI;Y&+TJlu+$?Ksf;4*tvRNX@zblr%4ZjcY|GwAAp^>)b%w-w?ta_4Eag?gI7R9|KY z51<#~GxDWWU8#XyC=ak#Dx8A)LmjF<&46ZLGmKQ2NncJ754;!PGvOu4>O^zI2B&q9 zF5V+ykPGOtin>+ZvVl&JNZJ-votlAOfDg(u=B3N(%BtfgqXB|CDmB(JSQS>C?LY_U zMzD;&R-Mf%R-Ij6599}G)ka;9zYF-Xj{1wf599?ebw^1r><9F!oBmFS5Bzgl-A!Y2 zPc!5NU=@uzyn)T2C&&du6`4zf-GDEE7xXV`dZP}n->tqRw^vBDZ!8ar7N^*{LN? z-zvYfF1Ow$X^8llHb z4Eqpe3W}_RtohdV@K2$svQ|^Xm^3ftQ)J{|8N(T(==SM5n65?3%MJ3yeFr@~n5Daa zf!21MP9Tn2EH+u>vpCb1syEG_;qQgVPV1YmN<)=Ma!E}JFqA`E84j6UpXGeu5|c1 zNEq&N!Fh*zbU6*(;Ce+Jpv(^A74vG@&zUH5^rSzE{HhsTsncJjXVu>ET8Ged%Q=B5+a?r6UkyWZpR_K=fp{F!UhNBteC2?!#aw{4pjSi!4(dV`o z{^pAui}+Im(_+9KaECrj1YRH|>r>MPP%}T(uO7?*ZAeH{+ztOl6}I9fTN?yd zi+6v)hkOrLD%`uT$GuB8nC|M{&g>(KGV&hmVq{5?`0 zxUld<5#Dx8y0gfCm_2Z}*wY)#xoDFqSfCRYa*%j=kNfo>HS)j8>ue7msrppPS`oCWD7m zG&AeF>G>bgDVOcsf~JLta>{a~q+(dO#9xhvwWylKSY$N$YQMT?NUxvCc8jmWI(1KV zY98u%N#);S1*#X7~6Wh#lGO`QiiK~IS427BYLb=n#!@^U_!)IhE_yr5rUjv#iuhtKN z){k@Hv2IU#4c_z$KsX9#fqmWBwg6}~scY!UqoC&d{*?VG3!g%Fr-~{yMa}z{Z8wrQ zA9WuYzmA?spw3_?!o4o>Hhe_d$Y3eLy$12JsNhiXHbTUj$Y3?%8-+p6v2J^>oh6Bd zG$|cM9wpwgt9XM9&PrdcG9g%J$VbQ?AFHFIcjJV5%^{C^&HlH#%;C4jOrjoh)xtI~ z4cI+QGtdKFOe%mC>IwK2poyeaMk)V~mj)=B17C$IR0rKEReRp5VFx}kt9_Bi%)u{1 z4VhhC=1PT4DSeh;FODkxO(`SLU0u?NxK&K4XsZm8zN^rqp)W5Dq~9l`b`L-svxGpK zvcy1Z`>_Og<^MhkwjPt@TkMicS49<|zPWp#avTv!Z{tfoAHz_nYB+)}XbGYQQWgKM zxFOJiE(XQl%HZ!qMMIZ;Er3+C7l}I1KCMQ`N|1`X%m4qwqh7t^4M6wZ5sdd8QqKo+x0KE2 z=^yFq8AhMj4Abq3-0L|8KEK`jg~T>rPkYv<2mI^#h^x}iKE(Z*pVIxxM{Mpr%5F8@ z!vc8B&;9L7*SF*~T=zpj8Ue?_!=LbxLW>%6Grq4!xKb1jwjy^v zl=am@BlR(~+^nsbblN!9%@#E}_tot`_RzR3t-=EvbVG=0WWKINW?Y~wcU8H0%Q3EL zMzbVgjFzly)ZkxT(IQ*#XYZ45nRu)e7VUa#TR_h@3zu6N&c0IkDLp%`6Y+l6sFJG= zI+4=sN2oa{t0<6n+Mv2OPXGMpHN%tq6*sy+7pDvZ}I~sYtwoB(* z>zdu-T1!#QCf#W*WiQK&-EQ#XlBwHOPL__XTs<hL_zIr3Q#fDG`qFaB;Lv(ex5;k?n3ti>~UkBeRvb^>E(J@dz38| zLFY$`qjd6z`AVvo-E?CDHcD%}e6_vY$B?#W1hHh)4VG44(i|s#FVFSsnSH(VV@8() zu+%ZUyv}zTu#U!FH8@gd2!=)CTVX52B8i9r6qkS}LSealUjbMW7dG*z_3AcjS`uHt z|6UXQbwur>-!;kqU)RLh!sdUI2R%#)X@lb%yif45=@jx#<-DV~@>cu8LtNLPx? ztrlA}YZ`3wz4`UaT>fOq(xC|&26ri08`iP8)5py&tu^9ZWZ4PO+9|8?D{a-A-?o7akV# z5erjSkBpci1x8!riE)Vso;xEuz5wD9MZy%a>s!~>rt8AQ5dQc8f%rwfy?&@$G>$C@ z-xup#iHxb;lHXL5zCj%f?|i!?ZAw(xa$ zPsX-6y?PSTbHNj<_g}WX|AKgcz<2xh?p#Qis>j=@aZ}|q*eqv7IgjPBNM0k4T+**S zdxo>c!runSta@bL>N1ZYTvI+jcu=NVGa7usju-jO8r>3w0W=lu=ZLfpplviR!nfNi z6N&F1URuu{I1C@r?}=fUDHZro3R7l#{NUxJy-Hns{1^u0I!83|k&~r~NztAVS)e>* z92w#qTJ?urx>CJ*hi6L)sGIV2qc=F^;pkSYF~GC~^%2-79PvQ*M5@-f%>;DViy%|$ zGwdrP560aYv`jhnSOd=7+e}hz@8+*$>HO99?gE;-iW%u%co-~fRJtiWJ6akUWV$(j zy#IQ{{(iOhaPa2Ll9|~7+Ktk^dEMW?2l=KpJ@8zdzjz8La06D|<~e4;FX)17BsC(~z=@U#YzgetPfy7qHcFktFf9A6;Pg!Xyy^GH;S^P(AUf zEC9C|9NFwIAOt;h2bO*6^abM}uij?Do&@GCF<_*{OHo5f7O-(Tu0Q-6zub=qavHZ@ z5dllEx2&}XmENlqS$HEs=gR>LpZ-@#)dz6P3lWiRQJItj*^4&5S}LgEImILLf`KKc zM*h8RLTsUkyI?1$FuKKxW1hm0&Z zIE;^8a@BHM-4cv{?9gAUa5@h9+(rA}*^z|GMjqz)DGzQg9I1ZL12iO8e|pXPEiJUw zcLgjEM$k?gq3Qpv-5s5swYxpuO=T@e*?E2+4^aI59lB?Sd&fS>T{j{}LQ#rmYdTlk z#g}{tCRBLgPSc?5E#3$rGY{3oG3kV`Rihw4*?XkBvd2guQUg4-jhFM+Bdv5qjiuw} zYi7=|JDG_3bBh_o{`1b!HQ%%b+anF2$s=tuTRbNqU?aDHx+5lLyD%!M5pe!#``$Y> z?4}Q_KS6r2Wd9q;bNt}uMW=fM#1%S;CatfC=W=Ti3?j#%_gZiVCnq=iFA$!27iV2# zo}TdyJwK;4W({_9M{G-SwfmodHo;k?(_0aUo_$`RnZsmQWAZ^L ze4Ud;04|xe;ki=yE-EcI>V%TKt#404d4&}2~HK~i1fyb0OYO}!D0H6m-l zQ3(iU=u6n3s+r7a1wtyG5>uNtKh9j_dBK%on1t`Y~D+2r0BwdFHrjYJ2Gs^G}s}fJ!l?M*A zU?CbU2E_^yC-MoPevblCO_d_UtR*!t<>R`NMo`_q`H2~DnQ7=-7Rp%ykY!}_a0aC1 zOj5wGZO7Hwfc?f7_`4VtcQ%>Bu`3mxLcm-6v7zBOLUbWT ziE%LPGG+s?IEmNrFb~V-olOY^2)z;e>M`y3JUqJoWB1{9;pzV*#xclU--Fud35E2b>61*Y!Fs{gy3iD4KiB8!7yJ?e7r^^0 zqokH6w470#ICBLcyeDo7hy|RAi0XQ9ED1JS9W+1*vdL@%1VgHayV%HK)4KJ{IC5yb zkr`#dOUR2ShfzqE3Rn$?RFK3Y6z*02I5tZR3c3U@HtTB!5{Xjm%i>wwDv49luc4;GI2>2XJ-p^m5Z#^jt?} z??j(uSY%-$L>69M*8su0V^fiAOuZ>^?#KNZKnZSwT!}?~c_xP*8n`h&M{cBO^}UVq z9J0m$b3grwryns zkf&pHIi8_N><`v=knvyR&j9*tofGz?5PagFvvK&-WxiMv289po4RD8J=#K?JKA#fa0TskK^6HUVBdbFytx=e_} znJQ6BnyWg1MQ$#b$qk2zX{Y@vJ?~1~wYht1|27Lwu=98FZXHewF;oVl*6Lybg1^|JW|Pb($6`kFVB{YRGorxv!lx*@W$I*)SPVO=Zto+B7l)gj9)X}K>L0S zi!-Za%s{gOFKy-*&;Pph;w}Rc6wuvr5gBDd@u&I~a{9sDMofjb=g`qVTeQb&P+KXfhkI@2g zG*F5HH+QZ~MipK%#bAN3GzqrEX5RQ3WrzYkFIL*HJBJ7Vg^rH<%ECiZ)J29u5;G19GD`XllLXy6h6&0X5tZSS1KRFwu_0T2-WmM?MX%c*}yXB!hy zaVKQkb890?IEIfN%$PB2+qgkHM4xur`#WTxZimxu|9(*AGF(1CFu(80hJM%vdXLzv zb?)?Xa?t+-|A>V6aaY{NEdlwLu4ec}Bk0T2`Yzw~Qr-c-L;Xk%^giD7@qW^NiiM5% z-NgU67v081h)4W*4d7XSvEFIjZXEX3-u?&jg9pKfZn{mHN9vpPsVDw2iz<3T?_H!t~|oGy#ncvqs&9p9md>t?v?){aYe=TvtaBoRcWwup<_8$ zxm~{Z|U$6#Lvv0v2?i#mS?9 zRO82;h|!smaGRd_wh{6o)~OvH3AUud(_a~h#pipy;5H4akP_0Zz6sd~0zCFCvAjZ? zz0H+p1>SAd0tv4+bZP785=q0!Xi!pdZrb=U%MCLgOAPDn zJw{_kyHc2j_$rYi&cLDqDLl?l1*0(!|A^(w5jPBh3LQsZoMW~;Fhk+_U zu#Y5967k?xp9*Mq94lHaurs5V%fFN=6kVVih@c8h*m8R7{M-l>^FS22UcCo;vJg8w zPbOKHS0iIY6fR8QRJ?l6y#@x5A#TwS^LL&?FxF5_o%>?xZJYBOBLP1;hVtTA4C5qW zd{g^Fm*jIj{d`bS0;eUz_r+e0-(la1sM$bTlOs1N28t>9E3nn4QY?BloSm!F9&MzV z3nixn_Fdvj1xvV9Xc_mi7=0VIvetY|UY0b{au?5BHjOoOiLH=T^>HVs{e2FGHJxHO zJ>{PS^mCyPA@nA3;? z5?FCK=^f_yN^n@f%E)N8kurW`s4U;f19of~e^l`)i+Cd?IjJDCTGUz8Z|IEAVm8t6 z3@1#0)IF#}lT>}ev4mQU4=2q^oy4thykR;PTNm4wp+nwEB0V}ON)y?>DY{ggQD9u_ z;#B8b^rl!g-F=QIM`O1Bo~Kk!TjgOi4%bUCLp1n`kPxM^TG1P}x&%io4=$QBS$y_9 zHCO6lQf*Wot3A8V)#G295#yeqCK?RFqD}Vh(N+!IFs27RtDbo$5?Kt-P~+f5c~!?E z;Izo*G+eaO2t|A2;)w!(GKk;s@W;UHqm0AikZFWFu=IlC;%hJspjJ&*2J}#TiTWRy zLfHSbKz{pOh~LioMBc=kseYo0Plz(sh{f?kSIh_Fa94sPcXY(YTm!CI#(jozX*FX=K2;cLIJ{Mt^vmV%`?v#NuYBaphplf@ABL% zQ{;OtKxW+nC7Ym0zOC%90vDSaa6en5nMGclh}I?#VmsW*51YycY8 z_e6i?oy6h%im0}^Z(GpP0kB&1JicaF$U+jPFc!`AP|;lDX%W>n|I;FG zOc|S?B^;zie2bg&!y;w${ob|3p1O{Lt@JpZ^}M*bob^z1rv50HhdY5|h|ghfYph3W zZ)axT_Bi_)Svb9z7dhKZnH?5sN!wcVbi)wCQiY5>RaWL5gBTaQx!NtCN49kNf)7N> z?vfj=)Sb_ah9^rm?PM{Dj(a0wL200J zHkq~Wh0-^zI?@Nqtx1f`sJF5G1(G}fjS$_q!;O?Ck%_a_BKr-RD?h{)7diLIBOfKA zEDAb(fRY_X6PVq);YBp}$bnbR1vw9AA)#8zL?{K=(2mi9?91y5)xVD;epa^y=LGMy z24O8X{Y^SIZB?$O)*Oe+AvWO|AU^5AF_pn~gnM*Kau^24HuF_tK`$11Y5OTCMc@m6iQ9BN7nL0u5k8u257*3eECe+Bi?Y84J{y+) z?dQMcQfXA5>@FYxfDrKijUe)?2pZeD{in96T3O3(fgag+rnW9{2+=|~2ojgHxFFhA zc^v9|+`Vb@(3pkT!I*1{a>(ywD0U%uE>hw(-(`Ag=WRM9tvNok?C-rJg=8Yb)O;WX zXrz7Rg-Fgx_l{q>-hGT(hP!-PfntF_m3~J;9xZp^$jg_k%)P9@YU*8JHFUWA1x90a z555%v6k-yUD!F}6C2aiSFiAzZ7IoxiwR~y-<8^g@Dr`}~pL+}ePdw;>1xGUkH;htG zwID`Bp~x@S_262Pq)y>Fm?D{g6Ph3e9s0k}8j0+r-@vugJFl#^UbkFSn%+b|eZ#Tw zWpNUSm{$Cses@~oP@d(++JG5Y!b}t)FrOi_!{~3%LUwUI$1cLH{!kbaIktqBc?x1u zX{xg$IW#4Bi5T5kbZUB~kUCSTY!9HiJ=A=9)3$aeQ5Or_&zR0?A6V2A;=YxQaxnGq zMUb0~&MPb-0X8lWXt+vc2>+C=##Um$DsfBPC9l=z)J4o8J?B(A)f*qhw1U8^SSn?i zDdM#X>K|)<;po9;>CkqH7zk3)=#9Tvl=y!{9+1#}E zNuJ|fu$Wc!2SbS9mx?ILT7amqk9C(^<`#Il-nZ8RW!i)C{1Rq>C^iP~wZVvm?3k+TZ+>{$`$g|>C%s_sE5@zt| zTw2}IzA#tj6|pr=&Fw!S;Zv0mGWg^mh^l2@xkCTH46S&aR` zdJ>D;q&c+3x~|90?HKHAgs1i>wo!J1y+?Xcz5H=rftV=DhZ)fOmSCq(m7nP2K?~is z`|n*}1XjYc^}FkLpa1}V(K!J27WQ;{uD|`bc8+w87DncDdjDtF|DPt^|H&5=t7^p+ z{BHjfwd~hmNU7{KHY7F&9M`ZaBBY_Geim5CIaB`z8=MipUK>EVs8$8sKjR!bN7=aa zrp%!AV-hU@iO0#1_MoPF)cvS1cRMK4$M=-#N0tV-jt1!U<6{!Gg>Km*$!pP*X{?$_ zmls5t3(*T8YWhB15GPp-2@Y1c`l*`o+mGZX2xEc)Z;-;VXcW`Jpi6}r`pjo@;*=D2 zfig8N=lp~8gxEp_6e-vuLFvLnliAh#=#9_ITSd~Dn)qt-t~wS-J>EfpQ}!DG{|R`~ zZeg7u9B$?-S7(DJ#OaJl~{&v1?QlBO~LuGhol7a{bGiFQ6UGhpjkY&@@if_=T)S{I_L0B%F zY#2MPt#_fh$tQ~*@@cbNgtN6BSD$=ZKNbXfkfJ~P9io0(yY9kRYd>!uJzyd-VSPhoJlgUOI$_^xL$kQyn1;B*r8AC z+!#}X!aQ~T9vurR#O3-Zr>5n0s|UlN>>Cf|ja&z(-Ey&&-8q%INFpfrwJce^pNG>V zUK49>@Ety{X9cbSp0@fU3{qhwmL}f6UBziY6~Q$}+FM!;d4WINQ7$2yCTv`Rm|el|S%QGrPIGMo@d-IrKxtQ>g!=3GF=rP~O78xz zJkiPNBdO4Dv!yib|JKps=4kMrX4Vi@sW@zwKRqwCb)4X)iDTqgy7S^l7Ldf$aeoqz z5E9D{uAV2^9X4b(x*L;_I-U3-90a-?fgB)#hM?H}|AgZ$BnWMZ{v2J zKd9-ctl=J#nkX=nYbQjJ8!}EwU!$+AvtJj@u|ibTYl8qcxh6@U8`!iT2v5HxLwp*u zDGnPy5&McoYN^Q#3sPvw?Z=5jZW-J`Oq$a|`2SlyguEE^+*&QlP%cObYrQNBhEPMp(#2{$N$pi&!7tVWBe^e3YpQ3)9HZy{iCxZ*WFc5)2J z<-FZ|Dbs_w*8_q%=M9K3!PaHu+<;Xue2Am~kh#$&sB6bkPKL@@CKLK`$*ATDW)kE$ zPuR(kCO>-uPurq|++mNja8VJe%sHSOsqNxJIWBt2<7y5A)UNA;pu7pW1E~u?o z2>|4?KE4tniYX zAm^5-ZY}Kktq(2Ab6BZX|8l5q+h4$lV<+SMpr=3L9SAFza2%U}eDG*aNur}yQybBLGcDls z6}13Apb8R*n(EP#%`)f?NV;lrZ*^ij6Tq{cRFv%$=oS6mPw6dG1jHI6hqGBb6+2ti z_jb9Q)%TeeQB^!+SrVJqWqJ<@pFU&`-2#18V$4n?Xaj}LR?U~}JPrl@a-`@7VoT&Vf#;@2EB8qnwuVG3H;xgw-%23apG(MRopjZYVOw>-b17f7i zm0-jsM^>r1wBk=OW+-Xzwar^Yg=qv+%Ai$Fs8?TE+%Dpgh^l;t4Nk-3xY+jxJd9S+ zm-pE%6zaw>)1?XYZXy?%Tj=l3UDYN7a9B>qgGV|*oMb57v$3o+G|9;bG(arX81C+5 zv~%01B&6rnxU6!wuVBA929bIWxX>N>xE{5fR+Jm6iulSDM?06S*5PunR#`FN}<~%(*BV? z8jSV_a^PlSE$__ITCqXx^hf>e0GoYT)!nP}kQGY%Tf_%agFixbovU|W4X zg7!6&*AqOi-HU7cHoaMKt+C|I7W5Hn6{2;L>vQcf{9@R~3@dhj&68r88Z`D*H|Q_@ zVcc<&c6tmdT^*y3rUn_|6n7*GpA8Vr;LC%S#Q97aX-ItM0Xc$ZvWPf;PkR{&4Wa z`&P~U{yE3@!~4AtF8Bj8`vd;pClfd;5rvrF(gn|7dtteJX!L7$e`$=e|LG(= zp;FyT6eq#^Qw~u!lmNVM%W)l=PO3YxP5Ay&^*8jkA{buba&7G|MkhRTz%|V3n38^5 z=MIX9fhZ0Uw+0h;{)W-)R(J}(i1aXp_1`D5d#o> z=1~w}zoC^C9W`2H}r6K8$W028LS^_Djr^BE>}Qx%DyV; z)uthN|5Q_Wab)!CB11S!@c-1O)S-53MCmdCRs z7Qg(P@pom~%5I4TWiQaBz+yb-w!(%}AQfx;Vhw6#sOIQtox1DuYAxvVF$}zvkH_<# zo+J(+At#NRL{6(eD>Iei4WoR{v1ImSqU2fx{17HW=|K?qv);zd-yqdbIWF$4IHU~y zsuhRnPu!BxKg)bT&z4~_;9EhSOp$sjnrmop_jao_>tVHg<|vGSIHL{+_0n?&7QW;< zAIY4?4tY%e%;PtXi`L@wsp~Xv9X?aT1!Q6-PY;|FYm$OwVX55&m)FXJiKOzf+&i|qcj9)Lh5DLlx99Xqdn{Fb6qkT|FC9B9I4>9wL8o84maPmb0j<2*j zjP<`!$}v7qEn2f?h>yQ)x2P~*@8S>SUyTK>kqX(sSzF7LukpMZ0LK?H6HG;hIW0H~ zQ%4o$Q=_Y40VTa~Y;`xtV97BBH(ECL;OhY`&hD=|tXf?5(mQ4`$?6?;SCB;AkuHt# zaT<_e^_%F0xbmsjm7VT!v=nY*aoatC&|}k5QHgoOjL=Fp_+pT}ElO zT9B*o(ZUyIrsm{>1=JHyx{e8Fj82@Zw2P6xd+`Ywjsv;MMmx7dDx z`77vxds5+WRE4o0)e#}?YC{K3gHoMRS)5Yga?tOg>#W`WQ5Lk_Ns60h+*HS&0)WKd z#(GB#BW{i+eTKmTuYA?`dy5%8+DtJ9g)NaQXmuzg5Hd8n;1zK%@Axa7nT9 zP5hOz9HLdXe+50uMwqiUop#G#G>3>;B_vo7HPbzs<6(;nMB!vAxwMxU*`DEeVLwJm z*(ewcfd0nlJoh_&+A!mO)?Q*HS(>ZF&!21A)!rXL`kgqKo6j%8MlC62JoN4(;54r| zxy!AfVAG=5|^$M%QL-kyWx_LRq+!o$ba7EFqv1!`?M;WGFwbHb%hkjB=lrJ z3akIaK)cy;>hNbTa8BD)PN@zCYJ6AkRq>ou36fD={(W>YO-mAvJsL{nr*pDdTa@C? zQ`X3Fpm)&5c>aCIs^*AAF>J*NQ-$mE!CRD!w`cRP0~kxCu7m{`Z%)SA80u-edm+Z= z@NCu2f=4AwvhQeI;2|LcN9F?;-m!X%cVTC&t01jwT@`r6G(=3g8|uo04C+A8vZ>S% zZk)4rz<)p%)uk%9p$dqx1H%ztf}b7Irf@CSZX*y1)k=xr-%xAvo60>V=M_wk7s7?Y zzb-o|bFM>0>mu1i`C^KCl{f({ri2%)^#=8VSho5{p+4rK(_71DS;xKneWOeKRg!6N z$F(4!WCUF4G%A~I+-0i{dS=vQ?t{+NrI?83@SJ7$;+7_;?@W!v(;F+*AQ{k!r`yuF z;@-@NMXRarth&cg8z8`*vC*x6qgFk{@U#?7W3!2|Qch*{#i4ooX&u;w2WBH08f6xU zf;j#Rl)0evRZUw;rk*1dq7K}%i?n?){K_`fza@aggsng*MaKGo!uFg$(ffm;>13oU z*s#4+ufj)X+P!iqGF0-kX89YN?Ls}Ak_+M1%-kXIZtuczLTJ8%h7Ns$HWJ)# z;vX^X?DGZME?g^2D-3Y?%8o<4Z%y6UlM2)Mj_x`ZLU7aE0z$Y#YxBwPj#aIY&6pLT~!)Kk%9G1>evM8xTQ!Tk$k zWn1OgmghWHN@bx_yddY@@ynvzEw1^nobEVIE3?%*N}o^HCM1|R*j1S7&a@13cnP zWWD^nicY{Hpmb~0PfQylS@h1&6l{gtj!xg;T2O9ou1+hNUbLsYgRmewuMcx@X)Wqc9eEq7y6EdN3a&Rz!vBH-!`nl_liGO+bWIhJ0KTe8qiP6-5k zKehMI-vWzKQssOFmLB-l>MEcp0ke`MRjuH_MEdaGTGVMI~3PzQl^Fz4{cW5HuX*Olm$+($a%#hF(9dBKIq5m4)Re&BJGqkgw$An^ z*Jxr5J7e-zdnD2zBu&Dziw;Vbrbc)Lon7g@u@nSaOzkvdy&YWRZ5m5U#o22cUtQa; zPMX$U6&J=rr`t)j&CV-=OZE^DM+w{#W97S|?P^?VB4)N}7zMxR?8)!{25Z2jJ40{y z6@ejtAv_rWVfuUHP=+*!Vthlh9MG)Ij)dA z%{sAgDoCX4`Bw8x{Y<^wvQw;k6RO-CzDOMf;^6+=-kuvB3E%o#b9JzB;LH7U`5IeS zQ(3dMN=o7nNz`ZVnOa9XTBpLzQTOyjjPHx4W5PDNckgzQR_@ldrMIuvL?_ik;R;-Y zs)_<6&mr|?8G6hnx^_=%U#w>ULgOb|t`|>VQlqsaEBLIwz19gRyeCZN>B~pg?$G6R z>8mdzR=0X6-^KM7Q#h{&;`~7lDtOfH#9o}6+ko-g!&cz1cfJ0=%nJEO&b_R%Mvg>@P!-uUqpsSTszkg(>y8 zm441zmNL5~{#2@L8hSu4=tKq4c_yP3J6m0$6yweaP4eoY5{npp=7xFzvz$6BaT<+* zaUiKzcjJSwZ1fDHq27Tz($I8?XvX1RGb>=2MF3(XOK@fBO0p3E0b|h_kjD)5M0ePf zcA2Ad9?zOcI?WT4RG~|2X`!g5gz|XcVM5jiSM$Y13(RQ2zd%lix_@gCm#S@nDidn7 zxGtd&{Br;|@Q4r5as%oafJgi1*`TJqTs1MXgtkC@ewG9tXA9&syo&-oCMR%j7_j@& zk15k`g1(#a@wE6Hfl@JJwFVmuI-TnyV$flK_+b`rg95tYc|d2xfBK-6E1Z)?=XT2^-YSbhkR@1mb>Dv6Y|Mljknx>dTEPmh>r?^BSZ`D>|}=^{H1 zC0%3D@_+K*(cAe{1EmlkzDGs=hG_?YFxBr{6p$#z?*jSGQXQ=3NM>OXch@JvFfe^O z7vz<@;qBiEOTZh%%`8Eqf4ugiW@^x;AH{G*=!pj zZ?lb#m)zw56Svr+8&FhaV)QSw(T;d8{>${@&U}@#1-4w%`pC)1Ul9@4<)- z>eyYufwwTA4D`pX6DMsUZzX~pJY?FpOx;GHl-M0jlR#qWR7ZyNP)eEZjx`(tKA{DT z9@kOmoimp<4i1EY@ed2Pfg^u*ngm0n`RCC)&$(w07o43+qb3xuq+e`77dUmovML?~ zYKlh!Giu9uxf>KZR*_TXHqYoI?ozvzNWW9E4`|q0xxvuRn{HM_&JG!}1q*5)OO(dq zhv15vg>uT83|RsCdP6aORmr;eYECST!L^^+?2h9qR+?ahpTsT6hHV z3}o5B$9%hO1o2VrRYn?05{Hj);63)^4Tya%yEcH{ePp0Gqe@`0usR8N8j$2WB5`9- z9EVmEHKOwKqp8XsT0dk`G3h{%b6P>DrK+RHnV;1%o))Cms zqIYlqTmOV1_vUDRAtW*Acm0wDsCs3dZZACR?Nno~x$0^CiviSogxSp*t~ivBq6d8D zjLQBADTm6X0|qFv#;z3|>zn%W2Uq#$iM0$1#65AeB~fN5ON2ZR0mE79mrb z$*HLon~4L(Kpo<_?^%%;&JkoH_LwQSb2?Cf5`pMk`qa39G1gD^_I8hD2lXlNnub9=)lf&H~r{Z`k zznXIR%8=A6Xu}WTs6ENZWXm04enC>4J*{U%grL$+ZtRyct}~LpoA9Jy2%$vlgbK1R zOu7cmqAVLuU@EXNzr#Q>`5v0Xl#NQP7PX14jiDW}MU{x^!P=^9==$z|tV}^x(2ns` zo^5HJ9$(8{qfoh~eVkc@rG;EeJm;%KAf6dW1u@CT06m21tL?T|Vsb!%`1!8x81yI= zH+@HVJz>67z|q=NtZ`B9%{T}UAre2FN~|egn8%gP8=PBx@A@FIGzzS0nJnU#5o(VWO(1Hv8@lH@E*~#)%P8sO0-GNYlzPufwG<(sL7En@~M0vZ&2+k~dMg_0S z<_Xw0uG*Y*`v=C(*g3O&z8)PNT)#i>8ip>tT^T#PJwTPx^0o~P<<-ZyCZ3RczV=HziP4Av3}D=61$Q?gH(Ty~I*5%unv zvp7~O#{+w&r`8%5x&u#W#}Z537i&|BS^GwQ^Al93kGdrGwQy8MG$quL0|k^_mYUdk zq#BEOj5wRNXbH?M+$ElB39@t7qOqP*%Inr@&fQ4N8(>`W^uw^>kNHVSb%kPhC?d!x z63kn9Z9>MRA=%o}fs(Vasn*H(im^Qn14i#bmODm!nDmdyyU@30N8030*~k{>H+I5p zH=J}Q0QD-Iu@cX?R>lp8NPnW+sVXjZded{iZ+l?G8Pw%xpAQjTbIYiwfceh!auUGe zdf7)-bFy>E3dtFNjI)TPX&bd-8I=?;GPBFC54u!}th3F7&yj27@2!G8E}o<7wwC2& z0)$_=LBS`+4}y>)$>SZUSu%Q}&|Q|uo^1~_=gR0%M*Ra?=$F_&Wwu!!bW0-9im+uu zfXwD*(sad=D6|?Yz{+s;>sYzbfwKGMGjgH4>mUvK7Y%vNJ^BZ!`yUfstOrK%r#!s} zF*hbm-ymzyW9A$^hw)_1QLR$$3T_Yp_M=$n;r(?(OC^Ez-*(zkU-(>S%dW(idC{E$ zs>LO(vhGlbF2;<_fhs>4JM>Lu{F^;U81SG>KCYS=xm|F@rX|Xvfv}K;vJSC8?8?d> zs`TjvB-aih`_8Wpj!-p>#L)%s#T2l>o7M47KP?wuC&jC9&8uvi#1N#Yg`jsVu*h#H zHJ9WTPaXdZp<7d@Ly>cUVxSp{SU!%)3JlEJP+0g z9%kdzq5&0J)%LC2SH>TQycUZ}%w>nclq?cY3nH|75pkL=ukB()Q z7d(_=&g(Fw=4)G5*JHMZ2IdYgw%7s6q>}^)GHL0*45^p5eL3A7K9xOR=lVCMVX!1| zT}F9stJUHp-y(rKmQBN}D-K@_(e>T#H}AScTC|L;q%K-8zKi5Y2?x3N`Y6M)G@<0v z3^0kaCmG2$Pp$Y8fNuE~5JbqX#NI{0>ZwfwBSgE9*tza?Y#_prNrX`XWN~W_ui@mf zQSNCE_%tVW^e2Am(>vg)6r|lzKX;D(T?&#Pn2g_696!lrwm7*dZKZ{wZMzHM2MozB zNb$Mz$Ae!(j^9T7G$!mS;Vt_Tg_nc)tNoY4!&h`0bk;eZcDvzIMAmMOru3LleU}Fe zk6bh)FCM=dNVM7RCSwvg5n)6Fh<9o0ANbG!ziS5je{2t=z{_gfe0#FTPM~&!Ba<#7 z1VtC?kS`;+$*U&*bpyFq6y-Xh80vBo<_#BmW?lxp&<(YJ4~UZST-nZ`)a4?^v%E2G zPdJ^|l+#X@jzC>J6m)bI)6$lXtR%aWguCO##V=jy?lQOu9G8#|(&7lG8%Fl0aU+xf z?}`-+895U2flh*D09?*ItdI67tCPK3{wBzJ&Af~Qa4BKmQp8ZN z%k`^!v%!!6sQ3Me9w5;e;tz)oZHD`PbCnXxoBFE_h9K!HAUQ@WUg3TOx<%bCR3>HX zb619`g^*%1u8+2ewBeB5 zoUrKsP#Ej6P4!ONa3BoDk;E+%Ms-J~W10~%33SlOIO9ZYYN8lyUL}ZHv>v2wn$R#} zFxg3vOfJ7ikOn!bprbSwYEVLhTIQYpjysKA8djvjfrJ;4k6;VHIOx7)~w+ExxzSq1wgJ zYa3GhY>x)aaF(Y83LMYN_XHFX{Q_FWG@aP2usnO0X>>h5o9Z1D1=|d2Ibsys56Q4A zHWk5k^m=(JWU73L2P!EGB%~zA$(!ds;PfKB2jmv5ERQjs62A34_3sM&`m1ky`uhv` zWp_I!XrOPeYoPCYJAio)3FkXJ(yl`m5mhb?Cs4BYN*O}Mqk68{rIrUHd0-2|S^g|= zL1fo(_=GqcY{@L4^SDc6!CAWs2W4K%@Zopkw3IPhT!ZsadmzTn*-}O5ugZ;@H z2R)fij(bd$und5C1#3+Rfe99Q42co7yL6usJ!k<6p_HK-`MM4xu^OmT335I_FmIT6 z?C}#LID3FVDj^z_pCk{)Xwrf~eq1zt3R}XG0Doyj#qv96>tA24S7lGr!cKVvWJ;j9 z@?=8Lk>t8Nndm*pyi#*LA5ws~`jmVA2U(gi!sAfF-KjdJGpBX%{qe zf;oXH#(RTByf%w01ehs-w)uPTMA#L#BYi|o)O`=Dvi?jb5!Ap`lR z9(KH$>BaJYc;48(GY!gMsXW4-dTsBcC{c*1X_1bpwsxshLs7R2$4&(*2cei1V7sji zR2qEg!A9Atdgp%C4VhnyTs`2Y5P!z&Oh7a2Skqp#hD^ZojwI9Qx6oop;;97F_+h+# zpq1rI^31)gjYw1A$*mAm5k<|q!CZgOx6G3ncfQzx)#l`c1&T0Xu5O8L21U)O>^3*r zH){Il;#!>qh7uY?sisS7dRuHy_SLZ?IIfrIbT&eV=u@L!(xP@~(ee3Yux;U=!CG2e zD|<1u=(>$P)LfQp`o6R(9PWmS-Ive8D}Kfm{V@d}Z>-?4I=vBB{b){ZXik1~>At_0 z0;g)LVIr3FGk&+*t6+0fgA_J+u$G(4<;g#ve_aer-t5?#baR_>3d|p8lKdU_g!W)j zHPb+V?jENzc{PGi`!?5mxL%jPxA&H>1z=N`O7!YoY+QR?+DUoWg+~6l&bhl*tJ+n|3jIX&E z@RlZjUL5TU(QfkkH@*XYE{NkJ;!B6gRsUxK^AL8-CWdBUH)Q~m0)HBT@IDPjzf4rm zd|g1hUAU-kdnkK%w%b3>e*;SwbfTSw#doX2TsN8)Rl6;1rVSa;rrPE+5s0wZhO>Wl zR|+R`tzV=;2k?v0Di8VNGua~i?Skw-l^U+zLpDg!T$80jMT1JM_ac@d{bl;6B2A`5 zG8s7o#u8JS?bE1WL3>fq zIVuf+idrm8=sgz>TfJG1E5*b#D>?hrge&L!(7P1RWJ)#A9onludH3lgtUixIC%{8u ze2=Y#LWiK6GpjedLY2F&^i~8!MB^zMZYD#5Exnn^@0E z*OZD`7^p}&b+mfU4xLT0vs0?y7ONB|&QU+9isyMI{!v~PFt*F0MDeeq*fhI1uI(`m;~!mZ}jqrk%?(W+%u3rtk%7 zE5*-iN3mms8P1A#es<4LgxRJ9xHBaQXx>IkT5;`iQCnqw z@H);vS!$n8y#!0ijkEjZ$mY^END`)S8GLUTLC1;iOuFw-h5DV#=(qC7D7nH&hL=&y z`^PV~r;EQW%(|1=$#g1Rla(T8IS;^|zW%r3x2^luAF5v^9O@Ta{6FHHjZCbq|5FeB zA8IkS$p57lJLTZ? zLOFPxLPtsp>{I!|{KL-OCAXiR)b){2fds5xBxyKd-Ep(M@Er`(*Z5K&Mr@$D4JC{t zSrzClrscs4mn@cJ`eL^yIq4P``J`yZ*>K44r5hg*Mbn{OfwM!Xq<1IEUhFovDQ z0v>51-bkPkga)q;8wLg8RyQSHi4A$IZotABM#AyU5djL-p1m0$gx`fiE<-;g6CPUM zS?g%*Fe#tiUf)>re%McS@i4lXU-pIemK%+Y7Rqz!SpBkV(NslmYU289i`)f&UQZkN^?5A{8Yh=Tf2&B0TK)6kw8SD$jcQt*t(?5>|Rj<^m=YW5~k5+G2rhNCtBXBB+x&iDoTPAaD8g=g{eHr!Q$t>R7fU9mP^kU5A?OfvhC2qAb#E}RPsc?ON5Xi@LcIUG|m+4s*}EN!V632#+x zjEa;pUL)^5T;h zSuoJ&GORM30@bQ)=j1EfSot3NmOuZ}H!@(=!cxH`@sHE2tCCjgLzp1e`xVCm^-W?( zG%iqdk^Hbzu_YDpQRwBP?f;$rvwmbSd~Oo7>;xE=;EpN!3pxHxa{_H6vyXS)LUE;h zexQ;1{vmNryaU`BH~!(w>vZa+2y27$4y+9vbT(Zt81ZVT!=Iw&RRK+cw%E`_vgt8e zIot}O^7(>Q0(D&D-bSh!syT+;|v$+v{I7&T>ItjpK7fm*z=REYL97d5YK zwLES7Q5v_4DxgYTL$!#L)g`==^!j}c1Gz8O-YgvWY;S!uUKE8qmDp}qGGwJ63$`u) zap5|3RDp0$xtmEF0unE#Rv&Gz4uvc?mLV z@w|_&Ky(;^3_0lwu!L2q7?LzX>UIM(p!9Rn<3fwJ0t5n%t#nh{%*RR+IMT~?A}qa2{%X zvDE#_e<`Yu9ty&a6D=V$5eh0rg`6oAV*i{Qm!I|~Ke7y2cZ}+FWforBu$6WDoQGVadiim`B^{T>^JRQHpG(5;_I=-D)FiM{C-`V zfzRD~gE_kUJbaxyTox+}dA6$6Tm^R?g$kvq_79xbqpO-%)gBoM4H`kf3$}M7-l;=^wE%9z-$^h)Yxg{>)i*w;j z=IQDAZq@GP*&EZ`!9p!eriJJ?0q- zMbU__=ksAm&$kV(n!d)@=k0tyZTJ0TLXTeSpZQUwFWn%UVOq$AjXPZ;%HofJDJ@{0 z(qawjBUS+1^GM;~n|h-rZ7~3&7_yt2gL>7xHTAL6-j>Li{Vw1%5!^%ek)P8jblX#k z$;OHB=0oR71j?Bt0J`BQZ{Q<<%HaoYHF?_pF#$`52l{cNd3`ga{VchE9X3B0NL%;& z#8JaaPiHsKXgmSw3UNt&GBslSdQk6-NvCBLIbUSwXu8m+as8@Ugt|v6!IoV3hD>i4 zuNNz6x(7a?b~K|lst&$ueKkRFVQ8{#BnxniFr*wJOV?t=Jsd*K%TGD+VOwFr@=zrk zJ+LN)yUX1LY2wcy)Ar!r{xTPO7aU)Z|Lvlh+=cWwNG|yK8^Hm47jSRw-_jdW?%2fx zR_%!*2tX#)_#r}JAmk_amI$b9`;rs0IZq{!%&2l`Q&Uqq`G>`uHv0js9z9Z7?q_hi z*25+~XEBtSuLS7j&Xk7tBm%x&TMmLJ6Xw*>WwrEM|^| ztn?;~jcqiVy|JmX4w>8Kf-4al;h&5y&x_NUU+U{W!?4qFj*qJ$<@ zFNcR!V5FgqOz0M=RRoI^al-`~F_hU3C1dpc#Vih|(o*_%DGdrXGRdyzx3;b#JHcec zl!$XUp?;SGHV|-wjnow_zb$)}4!rrGU`wC~+_}0X6AHig@Iu)sI z&ob3b#Fjlfb|j+A(%uyqd1EqEhogGZfiyk|dvr#j21!&CQv$DK_A05SrHh&&5E7l~ zw|^HWc}s!JcZ_9@3b}_MS#iKU_>IKIn4pkl20@Z##(l>}Q^NC1qhtoTVZ&sESePsw zq3VZ6=UzEu(wN2+b5$hL4LW7kq{%Q$EZ|B;=eZRBNu-{ZBOi~!ouS4Lz?82Y+8hR{ zWv*Xt+4gUQBm4oDrwZvQ)i$oHT-PvRBA#76?gOQq%Z}f|mx+y@&u4|camr+{nI~7H_hcp#@u=t>%P5CL2mY;8JE5-l&ZJG^<{Y(PQo|7jH9UJF~_< z8X^QJHO-aAqh)14px*7(%nfFHi`h&{7@nF)f&#BDYsS}5c`}fEGvsW_ZUL%jC&zR; zKPKF_U*_6py~F}Gnis}PRh+_H`b@2BGDj%EU?}&5pW&+v#PmAmMCB6RaR}#6z)NRQ z7ZnYSqmmWpC--M24b1YE0gQ%hRRLHuHHg0LPQn?_pBAe~lyWwyFD`edd0_ zd4x(b!DIsek|dzgxa<%Rr?%I>*MZE?#2Z6EcImr=Fs#qTW$+j@hCTR%VKYN^^#zN? zJuyt5D7$mPTil%A){i$$izEWeki>{Q*Wsu3e;r9zYi>k+H{rwJi4PdSYC940nuEyum0b!)p0j|M*<~;N~8b0*H5q* zX}-21=p|Z+wb@$Xzh@vG!P#i17s%VfJF_!LotU7JV*a^55L6V~IZv@II!~gT_vu8D z&bY-^~)0tmhGRfb_$+)DOzoLsQmP29ceQjCpu={N3B5$}IJO3&jJ9*~&^okPi zet`V^R_bB?-1H5*we|^`b(?VWIQe>ku=>p{1DpR$94#%Z*wJy(UOs#)H^0z2eBS%^ zCkj5br%*_>MJ7Uk(tdQVs_=}!Rnc+)xzOj7zPq#4Lma&F_fo7~K`Rt>x~478lNE}C z+6R=J?W`w5F9oqCPZb&WbS12{wP|@^lMZ>wUr~>KyHql`iV0IA0=>j{^;?e_;Q}78 zS00AhNz<%9i%7a8K*#7kkIyyxC!lcDq=#3c%h7&YRGi!Vb*S2I4okz)UE2nGJW=S5 z8W56|gg_tK#(*%_>+=q{suz6A$Q@lFkB2sL8oB>1&V+dSK;@~%x`4P0+!(!zc~%wb z`v`cWz`phy=Y`J0pK}JeQ0y4B^RuOfU&7z{sQLMXuNm-u6SkC%H1BZFeVxl(t1hqc zu^(w53e3inA4l8Z+xMzJ^vmb7M#|3~ZW)2i$&%9=hx zzKzkrQ*3st0=1X>#CK_du_}m;WJRN0F7<>27)Bddfk^GW7|Q3*Nbo4x&#D;yZh8Vm zf;3ANyBVfBUA@b-C;kq|2V5LND(b_PBAgTUgp%~>@M8T;v8t^a_X#}*oV>Lga2lfK zD@9`iTBO`$7^`ju)i=&C2k~Zblop;Vx-e8~r<(CfuoQX&P`A0k5VtYFOC~a@)%3q@@mV7#-tNY= zqLH-YQSY7cCO7JB&7>W^aCBV6o@CT|F}7f0!`_<`?p#zCrSIZwMs$PqjWlKLMMkV5yw{0 zl?E8uM|sO~He8esWqOgJmbP@>wg`sjqXaB2%*{pT$rPK-v-3AmG&e=E!WR%(?A~dj z?UVRjd=$3u=uV|i5lFN~=(FL_$WQ_I7WV;3^X_|gFK@#VOH?c@uj>^z08P=cyP#9K zRTkK+X2sFFmAd4 zAErn%$2G*oN|2s_bP&-^*GFY{3qND$$-5Dtic% zD1ZACL)21(0%I0Aic(MaXrI@scG&m|+_KupfyhYDMBkgSxLU7u@?Ve(?b~EON12-j zl8~lw7+ZlBac$k?Ao}BLZMm@y^Fz7O#roh6>4aNOj1dQ#QSD|k@8oMXk!sC$Rc z_-*@j2x=@=GSq;ib)njfF&tFymOq&D#co*nUK`g5VfRhBOK0XuWuuGqdfwzj?lOC+?|}n+QxVig(l}!jIMwNl$Ww9qHP!+1exp@1$dlnA1sB|A)kb-MoC%rP z+{hvMXBm#kf_;J|XMoe0Au!e4R~H>%ELG4PHuMusG)taphr^MNBQ9_jjbs|(aiut} zTql-QP=e#Menk)e;xgS}m2+ME`jIbiWsri?eiqkATKg13syURM*GbR|E<<1>BN#6` z{-1ua6XZ~}#%qd-Ry96Vvb;3*EpK$OkelC`t1!xVJt}H`UC@TX zueis;@>R|KYz=~eO7W*-yxcGBUg^ZjsPJ*N83BcdERo@YeH?n-W((WxVzqLW;AM!iQ%v=DRd*m{ZK zQJ3}kIBXc(3nf%l42NF|cEK;9P25=I^Z2(-+Kfk+kC+ z+*y#~&*fZ%0apC3T|xY-yAi>nWV)OO$7#rF?hK62azjjd*QHTIM@L(TxDJol*=F|e zLhz<`ksa_L6UV-TGHz)X{elPjQ!AWc%~lL@J#x{(Hg$mw`pPLYtVv>P&CV;>8h{jg z!0fwlhuKs4`dJ&_D1DRYf<{*yDeC>l;n&&?hliJY#c2vrP{$gDQrGF`e*yq}6QN<|`k3M-SD(n|MkTYy5nbpC z@#DB8@D;U_WYt+1rf{F9^Nlk9Cx@pct7r`k>Y^uLDW`2GJdHpQ;vM4dQB+N73<+f$ z|A&~VZUm2;HijOVza)ICNdXW6&2!6FXe(SPp3+&64{b-l_Ud{44@-Vuy3<@Ga-ZB$ z)pFiqErq!`RS=ji)+kKq7Z_)o_o*?2UaMgjO5HW8kCW7f1(Zon$w3CHRr=;Y5I>&J z;LHALOmy)pIV1L8*Sin+*Bl_g`Tl&5RH93R*qPJ`jYSjp&s z9|aIcB}1oA^J;Ksb8qFzz8Rx^INx#PUWL4>!-<8xdlI3SBDXaB6XE-Yc?*aQpscj3R$`btNBub-T54a zF{Pi)J&7g?@IU6M#~!tT=W1J|do`0C2g?pyyhB4E-583xPj#9?tLWGoxr+_FDA2bz zB{d%k+K0yW`dR}$SplIBam&aa=$kb&(NUp*hbL7#q28L2`c2Da8v`PMhShRL+xE+1 zlUb(HVlSa{XkQVb1pIFBKaRUVR>{L&3qYuo}#M<1f@2S70cW!F43YQG7=Vo@!5ZuF$w0{u&|2_zekuv>g z-e6qM+#5wm_DpbwLdt3zp6^68YaNO9H%QC+)%U;fIS<-oVJWrX-T`iPyQ(1z2#)zI zscWApWp-cfu6PhP`TWabwznZbKh+>M@BO} z>cc!o{wWSUcoBUiBcC{I4)}_}b z+vmDtV`xL6cL(GHIfT1k;LP!Lmm$sur0lSTzBZ_M_vlFtf_#?eon?~C*_3|Xs(H&d z_J6H+vJi%qP5kZf#rv(nB>bNmEsXx7e(5@Jc8n9dl;pwypzNrDa_A+Ps^O2Gl-zBm!n(D*h@Ynn+lKa@rQ6 zAyntc)m&O7bHv;r%}Ic^efnHVQrJOW0wAl$cb{~1lS6;S^Yv^(a>obis#DIO*y&(h z{`UQm`O`$0n@!3B6zX+XDyn(9YJB;+a%2u9v%y`|rIJ1u-+n${-{zr?LPQss1C)H| z8$7`+&yyGh@vq9RL$s&nFdy9D4NkrK4vJ;ts0l+e@&eUeXC}dlDbC|rE>szvp9+C7 zauy7#z3M$cib=uAlkUcjn8JKF^i`UUZ*RP2?C-4>gvci$`H$wxMf`SjT%} z8voDdlzM+lPg5Z;$2qQk$)Q?)eOO}Yp&OyWms!+F0~6_skJf$4TAM*J`;zSmEuG@S z4Y1ltNv$?`d?#hwftOus`G;Yxi6rlRJHyB}U(@D4K1aw3F!>7LB|(O-UMA)2v2N_? zcl}h<8eGANNFwoJ=z;qz`!0KzQdHww5D_sTMOlbS1#Wf@lBZ#9K7=0rj=ENo-|H@{*(FTlrbk%Ww({DNWL}@^~j@Tvg zSh`@DP^m~eZ}tPCioLP8!X!($O%g)mCK9rOEHni?tYUo;!nc`SGZ)i8ly3@z|By=? zBJ!c+Qdr&X588V%o;2cF4BouC=PD>o+!>ciMx@+rCf~)TiT_l&W-2Vlc z`}iv#Z*gK0okQqZ^K_!fN>Yp(oin-chQc5db-PKJBF~dxXA9kHFA5%U;O3Lk$DL_I zc^+;l(p^iGfXa+G^yH|L=>H+S%+M=!ummF)jFs(^8MTA-L=Io4w7}_>8f1VV!Ne5x54VBW$VevEEq!(-y3eOEsIZL(F_N0%t;F+7_@_dE9hFE3)6SswnS+BrtoirG&VFwW|-Wna{piS1A~EeG*tm^ z5`$Q`StKW}R%yo^_5S4})kQDk?u>MwOkn{Ge7FCFFj} zF_{|4h!|_FcUGUR`T;X6(>yt~oPsvF@kk!UO*;i1Vg$#u07Jq;LexIsYoQg9qC zfgl5HaQrwc<|lv$FesgS&MLZyILq|rhjF>WUhK(Y?ELB1HF375XNV{~QA7+=vp~zp zikjTJ>xS4TQfo>MV23$)WWjp!8Zk6S6gzTh9`7Vbs@S5rfP%4>Q-U2z=Tul5)t(Xz zHaHRcP0yD)CUyZ@F6Mo1S!%cFqXVZBP#@&0MVNveV2el-FVrj95=&W=4a`=aw(-#^<%H@t&U6m$Gb-6KD-7r1 zap{;qC0;CjHy`F@Wvf)L;!vlguWad(r~aLm1~R1G>=6!V+6)lV4Zv%>sQ}q|2zr*C zT8w2!ZE`>-3=ZbK8lts# zXrx|d9iBZ>-$~pxq#x``4UA4^uzLYc(=yRXtQx<_t#yk6BEr(z1*H%`G~soO4k*L+rl zume@5qmXAF7xM;NeMRBOjuE4bI`$^Ja{9<-7RJhz#+pE}hsF&QlYC4HSl@a1=SeU>ps9Fus^C}qufhYS zj8pA&5g;1mQ{8+6JJqR226mmo4$RuZd9*UY<&=6_`%B)=9cQ$`So?*ItQaUv`=%JX z?oub{yRru{SYCOPtnQROImmuC@;wzqKTnC+eIfh{#2s^`dL&?9X6Le&iySVuuS*Hp za7Q27BD{4q9!l^TGdh}R@<*Cmn;thP&qz%(*`gSO`eLo~L0|JE>9r+InO}&$Ga>Eh z9=-RenXA+a02Fr&;84G9Djrx-NF?Z|dcgQH8DS2W1xJ`|xIObR|9;eml%srKH*2Na z8IfbVoLape{IkkzS9NdFgzOwE(-?Zd2`hKWRYNH7=-%GXo_D=euA_aFN4SS(OM`tT zj}pbo>d3QYa;p)z${JHxMc}CJiNZhZ_^e}9(vy6oNA0|({#=Vtf^_f9kJ;RvkR!~u zBXtFGL%&?RwF(cF+4|Bnt>LVT1g&F|BT?F9&wweDwYm}=lD>rPmdWv_Qp29GVmvm?I zb=AZSnkxn`6fFssjZ|+^kNOk$PEFc+N*C!mjx8A}EZQpmiJ+A8@dYaEVL-6uidGG3PLi6emIx0$ znf4u%72V^5gzn^7`Q@ug8%36*g7oXs)I8kR235zT++vc!eS3EG@#mMY0WIGI8UAi* zd5L}X#ZwE?(;6Sn{!UU)*P4``chAc{-!pvoU$KrT?Du=3teJ)e57{1Fw4~7Pt4e{j zlbXo(xt-miY~Rl5)LE)8c6ptg+^W>}>AiZ&@esQA62+kG-(o?M9$V=fYg8OuU#|{% zm$M6!1sk%nF|okM{k-GyEimMlMk&sc@Xg(v9JN`xGEPwoVXtmR2!>}29IANu z28Xn2veHkZn@;t`5q^2lrf!PMNLloD`{R$Wxg_bqA%i+I%2YluD>=?7A8n=%<$WSK z{MEbai|a8}Nub5@^;5{!D{H35;tB=+BeAnFGH^(tr@9Zg(m7cHUs+r|Xg+HBojPx& z!#Z=WVq$vv=c{uPeTrevEn1vEBlp_G)z<3?%ohe(5a@fhxT4d-R+{nikMaaA1%Z|{ zU_Pb9q3wH>ITNVl@r#OYHH3B#Pru%0MQ-xMCazWF%;X2vjLeeJXR+SV34{DYtnYc+ zRE!SH$gPpM9}RK=lTv9s8PXr@v=Gf{N;+hn!=vq%4m-V^B62UWniqIiy<+m6o33po zf7F1Ruam5SzsO&Q!54Y_F2E1#&S>iW2tVjw4(t7yLhnvh&B5?mT0@g2wp^p+?qk}h zk+|BJy6?bW$}C!G51$*{Rw$H53k$n+4>^vD=00Dua~~bDHes)X1crHND( zkU$u9Y2tH>>oE3a@t8x})4y)}CM#_ZLt zaFn=aR|{08FD*ke5o&yIq%(7Bq7q@UDqF73R)ucQjyDf|qP=XdW1q$(rSe=$t5tvu z{3t5Q+97vgaF@5E$;G~m%=%@wg9lU<{ghgETbWInj)&Ky&Ch@GeK$TKxy0q~U?dAJ zqR}OM;vw=Tts9c%^A^>mCTJKSr=#_`@plK9`Finp_WocVbj zQ`fk-BAF^1^Ky2}fL&cppfig-f4hEjIX*t%ghDl?LhysV<+&AscH6n;6go@F9lZql z0XTR99WASU+hKx?v)i$oPNH5PJ3fAiz72kYUcPo8QGEN~jU}rO=H&-TTR~|ZV)S8J zZlNR@fSt7jYj zQmR+gRZ-{3x7ob5AoInfgu~BHqPVjLx5p20Y9%e{?nemXdqWH$b7hJGs-&;Bp{l7t z^3h-h8qANx^>>We{m$73-Xp7BL4cI6)CamAn}U=t2FJqj|V;=Rc@+I#foc=sa5@Zgh&|pc;sppSF0tcCiX{Od?V3!o#ni5&!J1wFzx-_< zfa~Ls=3RP1JB5H24)@bI)|&aC>Ej6zg8jxb(wL**5b?J8j4)A&DPfX)0KQ-R68M&@ zC0H8X@@YeJl`8_1SpI1uXae%B#+-tjG-Yyn3XAgebe(wms}ZWhJ~k!9sa0_J+~MJb zX_xcENc7=MW3&;e|7ND_VZ0@n@J%)vpANSE99)#KuIQ+kT)fEYrmt_~tiEek0XX{+ zt~i^EtWn*&NzU@*5nNe3f;EvDEP3a5Lw2lXN@FJ-q%o3sHKiRHFrYZrJyYM+dHMYg zs5_Tcc7B=dsBKuatppnbcQhJxjWTFp{c!8m5;Xg@qj}SJIMHDmWtul!U3 zCiRz@knE|uM|lk@`c20FNwSL?VQ0ckQK6g&yiof zDzv1CXtT=%md|;Z72p=M|`2H5K|+qpu#&*6qY6D#m8K& z)!9t#5dK1RFotz@&{E+Y{%7c8m|XL&cVjoa2sTq{c1)n$ch~CiwfhK8aW_8`(p{We zl*<)idwZ?-9^0c!#UN5eXJdUQKjJ5*1n4&jjf5+p?tHPjM6&D)1Ppn2-pPojn4$Ks zhYV~GDTH^X0Lx!;X2xH*O9@uUgjZSPaE+znJq@r8RYLG)+L@2@JlO%}v2*%gX!N1q zYR<V&MItm>SF1XnuITwm)0l~}PWE@4O_kR2^o&2rU@^pHB1vOn>y1gM)E z>q_2x!i!KH1DAGG$J9RF>T(BIyrWL{T3Q^P<>yLZ;h}{}O(^U%aE$|O(P`$_la%f% zO-F%czxyVubHi`dx^yahgi9Dx-Yx2ZK9hi@Db#x*ZN%_f>8-^bJlMF{p_^fz=i-2& zFzv|1-{p-*sz{y$#nHAEGq-g<^Si67%HS@^*_i^RgPz310s;+1_Ax8aE+7GUXzp)Q z3CvYJ>N((|6Rdk^RxMgu@KO~!o8JH}D!d*8`-rT%AycZ+`UR@$kv$15(N(Pgc5?X` z7exR&+B~FKT;x^J(1o6wYPid5-#sR8#Dx1wJ1x9;U9G3l>Cjg#f7z93}u zZR`I{SE3nnx#S^R5djUZHlR9?Kp%nKR{e-xE}9J}4h_B5Q(Fr@Bjjh^A!LCM9Eax4 zwiudN)rLIrg44cLyXJ@J%ZKh6WY{*A#%%oo@Fcc)lL|{KJ?n~?}$x9#V z?gbzxwRIEXdS|QI3!VJy;s!ggFRASw`Afs>?5;zbkeI3D(bD2`5zJ5OlYUgv=1}&ZYHGy?H zT425sB9<)$m{j8c?D`wkO8D$Eut6*J13eq!cTY?k^22;VxBl58$>wUR7Fh#Ejbt*q z0e7T=_hpaKUHPJz=ILZr)n!HeY)Cw0#~Pg~wDx+P+-(hW6K&vqlKJH^F|wE)GcNns zk1_rqOa@*GO^xM=r&RR^{#ck=>?FR1g2!vvgc-PFKN1r$%9{W{4HXBNj(gHnC$<|qJSE(Y%^GkTgKHPXR8nfGk8*W*$kCNS zdGD{$$XE?<#UQyj z!^v7)_COJ_h@@JW9+NH|p+xm95^Udy6)y974@#H?I#^LFv#`zDGJ=^pko9S+5iI6g z_0-&j0SFoyXmV&nu94@=iuqierR$}dRF~@j*4C?g+%2K!4yXq%Y@3};rIU&(DqU8b zax*-Is{f(I;CcAQMUB2 z;UQ)mc4FvKY{x@E8>5ulP7GVnQsFu0H12v-A_QvQ#nD%IZyaOF<`vlMuGZG)m zm;J{Xpc;KolgE!gT$!KPZLtkm!j~+NU=tJzU=Uj>q5Ou7cdY&i>mx2~+&Q}nLkk-D;D{bh{} z(iF_8Rp~UP24+I2?wyzAIo!sSiY$A80Co882M~l6M3t2FNOdh=eC+pL?w;&^bF}~B zKaSI*w+AQtulLfw?j0TPA0G6aD%>@7ru?6;|KEL(d9w+eevjcfGpzt8=;@(`?N0~* z{6`}Xov3WEZD@DKprJV0p$%Qdkiz~OL;-`BT;H#H2<|3y+u#3pklfIdDn0(&@yXt6 z;ZOy)RMV`Qwz@%KsqHWRxW=2RQD}+zQ=J^W-NUB29DDJ2rP#X>ovu=+r|H4&YjlFV zt+A+DHHv8HsF#8Eo*n~@IQ2$~BVE@0!Ci+3)CmS2cvVgm()uO}!DtQ-?Bza{O7JP0 zN@Mfd-i_5NmbsyNI<3LqbVvH0!n-yt9EK_Av%h6JQ{+)rH)D`-2BMyl8>jiTzT|&q zbcKuCNepKRqom{9_nig@B4e&2e&}BuCz%CfUMTnUM_z0dQEn zn#ap>3I^7~Dh*XAKxI&6LoJFrlC+EouZ0(@%d@;{JB}EbQ46#-TqV0&4};2($oO21 zhgw>^`ixjNW1nUr^!MUk&pj*nZ}C-UD>T~f+5ok0f#>t`Os%n2xO$^#Ef80e=uNv5 zY}^C9Ym_u=?R^=q!O_-6eIsm7)y_6)QrAUNNELd)zr=FdWAX>jW0D)wuH-=RfUWLs zjy^WNBdido!GcOP_c5Of%Llc;%|MQg8%-##pEA?#qeHronorPR17b^X2{yAMQ?Z+J zRauWpXN}|q?suoBc0)To9l~$ex=v4Fp{pNumpVNiC9m@ABRILin{3sTP!6P3^_37V z6a{59$&K%4()V3>#2Co6@9C6X4^5p3N5YsW;I&m+a)VE(MeFU^p}wTfuxxpszG#`n zxEi*0gG;XOMPa3x`}9OsQw%r{I>IF1)q%R4HRN&9)$noNU`g}=O?Zb*lqid;P;E)* zG(!%$rX9M}@3Xal0KK~~zgSI6MTxHuiRQ>K93=+bIN3VbaiHgZ9V{;B z$_8X%2rvMQ@bna%{S|cPdk}G`P@+Wlcre6GfB(=O3q5A7+?8r9cT8K^EA*-=;Ethm z8=xN97XGm+a&ss?w2geD9^@HHA+WF&e^G}=B_6Y3R9C018F;`j94C6ae$47NXm?2* ztJwyGeR$A<>u0}t6WYSu&NL87-`wiBgh~{oAS{>j8~kEW6Wnniq^`xWC{tpj>lfve zcHue6LJwMsO?H+-NPrN12S)Hg-9`uF?_2%@6P zOfKrV&udJ2@|z;niaG@5#`><4<1;~QFSU!f59^QTr{u)oK8HiVX(tV{&)FtJ*s1c_ z&Z*vwsp4syVhA@t45bu;W=C^+4O`DzAn8Yn!4&S!<}#3=ak-)1e0z8|1k}^R0=+JZ zv2J~>eFoaQ%$j0i3&ZiOqyG@{3InBWf?`$pT+;~DQ33`}sCskC8$-RWxg|tv+oU<* z9I{EY{Zj{=%4>L&@#(-}eG%3N!g^7FFGcZMq3165eb_NH4B9oQb5k>iY`PCzMtz+j zV$}Bu!y~;PwNBSHP{QqU@7@3NpYM}iWU4_}@q!dN{bMMyf*89a`?gb!EBjiGW_IE( zu4etX49m`Dd3sh}M;biJ0b7dA!)xv1g9w_Ii$^Bvm=ZNSdE8OgnW%()8?8xAn||!h z;0tFS&U5X5!q@N!CxeSNU43N0^UmH!{wsVv6g>=FrYN@>17}fQx&4mx`CVTd^**|SV2;?XiFN4dz|(y3v8c+$jt(hEtANd$%X-A`H@DP#ERFW;Aw?XGy;C_y zx5AUdP-xPIq%RvvrP$DFzU*B;^pvZ&95h;@i1@|%D6nB^A$zZ_VPxz!^FubJwO8Bl zJ7&WOVr&}_5IqHq{X;ZU522u3*#?B26`lA90feqlDxSqyq_uZn z+E*m6w2e#0ju7`=!n6Q3+OBtcHy8brffgeevY{@bQ1$-N@f!BTHMMyM(?Kn8?S|ng zae=^g(u?%Zq4%D*ub{fh3k}&9e9jLxwQd>kF3>V6$;Sn(I71JiYj)aJbv7@vCQ{Gx zKvOSZhHfo!o$-m<0m!%6GD|pdz^1vXrG#EI95$&2`O5$RMVzkJZJuO`jZF=!@+9MU zb5#aqoQpHnjH~Z(43M2yvTGjLAZ7y{8l#2=@ZoB(wpW+dbys&EuA2Hi9j}q2IQBwo zP}PtRNuUZ35#D>%=V@_XH2p!?Dfnn_U@+tIs>aM+eZv4BOiMsYA6stliFR~pf4B~0 zVNlC%R1uUmL{V(JHE1%P&k|2q^FCNIP@<7JJsLJ=;IZNLZUH{Qj+x)PFVnVwB#cTt zagB+m$KGwg=bdsMjP58aWGx+u-4~cb_S-boTG{Na%fLp>6Z4tkTwO0Le7Br=FYfBQ z7kTHxjxXq9mb5M64HmClxO%}RPhzN*Bj{Rq9g8it$O`Qx>vw+bf^rrUFCv#VtSWYF zMMjUrGy>enNKAfSpaSo8i##rFkl*`NJcYd%2*YeDrofsVECA;|2wE@D5EuTqZ%8vb zCP~)AA!&NYEGs*N?A)4kSjRc#yfLFWf?GfzKQ;hG4|#RVcl|Cqv?wU&p8lPD8O$QM zvYORTk4{^y%#G67-xl-> zpCOqFV)=!g;mhK-YL16dA z$^KvWdP4*huvs5gXJD{Md03avdU25?9F7cm>Y}a%^z(awhI39RtGi`92|yPz%+lZb zr>n~|^ENwJZD5fqJy0onio%}(ND7Nics6MO~V5WSf=s2YMh9@oKb;=faR5=!pII?I*>}lHF6Edr_{ZSm{m*@pG!+mj@_NOT9 z*N`j^yQ9&xH>zd@>$f68a4w4n%fg~7$w3HlGz73IRz#bEdBj9a)1#>9?{tnWpd2G2 zwCz$GIow#*(MTI@iX!fP)Sy)Yk=vWSaIWH8UbG4Sc)~_n-C@1t5d7o$x_T|c<93~* zKh4C=Yb{?2;)#=5}@&bHBv4b$*@N!fwv#Kdz zCH8wyJS~HF){|L0up0zv7&SJJ(u)Kr*n|`K!SIJ*>)KnO%9y=SsJOP+CL<1hCd`n+ zjm=@DpF%bk(GlT;-`)?h6pFRa=T;pz0Ns(vC}mwooi1ou#o?@Z(~ zxccjXfY*y>27oR96$;-vvL#rf;l(jN_G1b36^~iu!jNXFMlfmSH-k?5X-uHh2Z)0m zx4mRlV-PQ}=r&;qP2H%Sw6VE>yJm%=VxmsGwa&^h=c5GfT;=kztc^hz?OFmlgjVu^ zQ_8my^pSjJz?wq#F1f&qcLzIs&pp3M=zJ3QKo>DQ!q6SQY(C1COGPn#coJPN;BoF( z8o;?v5bZ?asj>tSC)pQJ2=UWG2U8b!Y7q+!hP6Fj8R3Nw3jIS=VtxJ5vyeUcSNeCO-Se%h zVYsmCnarnl_OK!3s)xxU}wc z9#Tz@Wx%`mu^uv%bUwh_fe+(dslF(GvY)m#k*4*Qb!_C3cRj`;(v0=G!;8Hu7vwIEswx0IPoP%%KMZT=^k43qv zecSWzFv{#)?NIeH&px0_z)iW*=HAjKc5OU93|iYz+-JF_hituW8bvF19o@GPK3jU9 z=;XfA93KtWS(z4aUHIszd!hB-KEF|ujCKu-vM%$>aJh&htc=FjIDrMn{MTdOmPq2W zf0RS$R305oBu%=R@VY6HEqIf=rkgT=p6-vC#d{NN81a$2{}uy0P77E)XzNGgC`qK4 zt`tqMXFR(ZIFXX?K>#Pt^mA;<>cM1S93EQ9p__9#2ua>e^LnBVTNn|hg@KVaTo27en2mX`6A=E4{$2qAdYgDLn_+^{^a2*OLG=fZ`Xzm6ixT)fE z6O5V5u_gjN$qEAr0Vbgmhsi!* zyFy{nWWFhyki0jwE^ySNZ8im;B;T&4=fphsr*lV7sJck=Pqz=nLd|)aUSjI^H0_b$ zjd?k;uVk`5r%Sy;H8C&F#C@vU=TCSJIoN>iRdRKq1O#=q%!*6omS^bP)7&UA86;6K ziB}sxl*|@2Iiu7uWQgk|iPJV6?I&*R1LzKWFAlj&kage!^e^8Y9=+HjW&)GBLF3kP z(b1^c0&u}PDKD35H>1#S!G-aQ!`E+iPxilgwMW`FF|E&pnu2MYDFx7G!Ae~C4My&Y zgXkU9+Vf~@_iD+%IuS)D&MMTpY1t$>3vF-N_~MSfr| z5bcmGOSS=`ce{|30=-=**XUI2@WM01whb%nrp-7P4Tj%~OFqeoscK*+;KXe4XAH(l z_1p_$dM3?nD16IbVGv&Y78)pcR+MlnQ#31*w)&agz^1TwWeKbk&n}bm%Bw{$sul^1GZgHsNki zHnY(fs&eWh&zeiUz_;#W_mXTJxj1vno19GJ=fj{6^a8s;0o9xmS_q>?^e?xJn251I zGt#K6Wn!S|U{-80?x^Tmi!9}n&GhOaUvKE9N1X)n>=G{E(&Lkt z>fh1ct~v-EzCC&K_C#D4(@r7F$SoHca;i_Hl&**&dnasve=?&PT4P`exMh%p2Jd~Z z1^0%6H?01y+9nGn6w>}N6nn`qIXuQM1H8a~QIaL|dzyeh-26Lc`fUo_!;1T17TlfI+n*%C9CG9&jDMpj`WaqHf_wlfsAZk6rsb1h zCLH5#IBb6TY%A!14x>=1Wzxd%#d39qA6;n5sURAyc*)cMH&v3_Z zWU{Ryf4>u8l9V(X7WX6p=Y z(#tMQv^y;=i1%}#wqf3lcXD6U+ej+Jm>!6BhlZGNJ;Zlr&W)lz$oaW0C+{&uBElziuG?-n+9Ba@;9|DG~Vn z_X_o8@Py|qys zBjiq$#Ry_7fhw%vV5;ybFpd*MuGOoKuP0#Vyn;Z@&CRly&}}I#P{=qr&%v?+gIQ6w z(hoUCZ&EUFIq%-MsW1IEbW7?)IiaINF(@AQl}PR^s*DyFTen7g*3fXN7FRbH7>Icpkl9^bdm`lTwU?roP(A` zix;xXEZnBouY6}2BmwPrZlkhpU#!#dl4yukPJc3IVjAJCOT zq^s?ueab}J5id*w^6p@twk#aXA2x@fZAlu%8wZ=)En?NNQY$Ji_kpvvREu&zfsZ#LeEs9IN zFR1f8;n43-n4@y3ffw})CnDNlx4=xurlrAe7HdI1%=V3U}pZ%e5Ufu zg&a@8SZ&efyv7B_Ymw3z)d|Bb#(IkB4jlImZ9}(2f2Kjl)MV&uo3r z^am}Nl}LO<%pabF%s;f62Z;v~M;BAcySvvp)QJdB>ahB;sEe~=UNkr61kLbbGcB~& zam96%RXbx<-v?2na=hU6o_SuMUIr>Qw8fZw8(?lvry&e-5TYfiz~DjIfKk*8%@j>+ z#X?8=6UK}AqNeoV8S3@;sHBAZd?s%d0k7gXz}b((%!k_IQD!_07NLNeX>*5~`UmAz z?>dQr$I}|zkn(V$H$Mkb=2Tw>aW-}1eGS*5HaIq7b#etEf#I0hI8u#suJm#tc95p) z74A8&ttVSSX@oP6Zf#E-(lzh`A7+9QoPY^T$3?S8@*CJnsT!KJuQC&X^Zv6FhqIxH zlVf+}48vW~G$UzKG{$KdzoY!s?m9$~L7TaM)oAbb39uOT4_O5_h^RuW*bW9VV=ZcZ zkUs)j9tE$bn0(%Vwxh>-VgSYMDPmX4*FZIecu7j>=HvWahcBG;3Kq6qbJ$wSKEFoB&BgEqWKxA7X?p(q3_bf4r@JzF&#f36f# zl-xKiaoJ8w?2Z`!F&t)04HQ?{lMQBnR-9{-Us_bP#so|NTsb*C9Cd+3w!sP*rUWrI z#dkAD??S0?AS}^UR$++h$$T|6m5hyEW6W*|2kO+TPL6Qth3HgBSk71H1>|DOo5{#B z9Ox6G*$ly@avl<;Cz;^h#JW^P)mLhx0L-#65?}*k5*X;h5suB|&vLXqRh2?^95I(h ztbowZ(ah1GKrYVqMfre@0-e5ahF#dyqT*D6ri2F(axUEKX(!Dz$097Ljt6`lKGQO% ztI_jSR%L2u=IX&JL}$H8vqEJabNMiJt-}0-hQY4JMhIUR4gFIiS7>u9L##iioJJfN z|9`lMM*EbfzYWqZ>+qKM$wu6oAeNHHg)Uwc;d?PPg3O~(^n2vXei03d$miUmNb!a7 zb?QucT8)Q4rxJLqjL2G~ZtY$||K;ZBHoASXSIs?P*oeX)oi5O@RbZ}$OBI$|J2!i$ z&3-WXWAUBmp7eugJ1!FhbH2*<3{YWW>&GHHqzK|5jl4pl66q@)g5u{+KG~5*w0i2Q z$GNv70qxZ0xj>U;vR@K`_ZAe`3wEnY?Y@=SEo>eqd#&tb5umIh&4oz*1f~?Hs1Tq=c@SZ~o?@A78%1J3M75}EB6_BY`i+S-O zr>rH~^BbrIlc17M-w+Bx!j~JaqnJ>>Fbiv5oK;!X?fJK6sc8K0)~q4>y$2ExsM}&! z>e?oh_LRnxb+0{llH+-T>b46#Nu&2)QX&2LIk0PbQ9Gj}bi&b7t}^o@)qNhfttKhb z=+ZWsaPn31+_y+SC@Bq$&E99OZCN~q0~_{qSwcLF0+L_muqmNxhJr9e#2>Mi(JfaG zUN6rh;il`6(m0_^$64LMU6X<1Q(-Z)5}C=>mCKEmxeVJ9N znCVKL5;BsQ-ee0%c8U2g>G&|MvMV@toRt-BXce0AWuE9xK@)${Nr2a(C|4}vhLwUG zHar!WSQ|!u*+4>xr%W>Bw80@-rn{4gYu99DVp5D8`QK!04iC3LRio_>nRSvGtp^|3Xh*;|V2{`rxW*HU|?J zQ{#{ywN>H7WNY$j>D*>(iiw|CM6lD;7D+&>-cK=QyF9;2kNO9`&n5Jo4w!qENnO*?m5Cv$v0@Ys=nz|#jH z_-hD*UJODOB;eRd0#No>2+h26{nFi@d15@MnUGZ&DTIoLA_0aS4xV<(Vu+%#gW8rt zIL*8HcXoZ%2-!z{YAfdW6kMMJd2WhWj1r$Ovf$Yx#`U1N<) z4j}AFBt{ESCJ?EIFenR=&Nv$L->`tj%~*fA$J7h*lPQTH-HVsD2r(d@VampE5#Z4L zDEAKNR$Gq<9=H=y93y0Vqsz>l8JsjldT zkuoAO8QzIAH3?CL%CX)=Ch)Yf%CUQVHVGH_UN>f9`K8Ik<4Srl4!NAGU#TNst`^N^3Zx&5x`2h?vV@&mKnUK-+#-}a@795cz=lx45YUrSiRcq~#nh^8XO-HHy;C0sy)%c7%!Jz_FS7%c)iDI%^jsDGW#O3?I(H}W6~Bh%4|Uzm{~iq5cEg!JLhDh zeh-6l0Whzz`WK!{cpfyA(T`=Z=tsn8_>cfij=i@3_Cj9YN9w)P6IV7ix8d<_Y}R7O zK`4x#tJYe&gdJ^HS&I{Kdm%Q6VGh|^%v#l0W197a^J*+9tmOhFJVUyBNr&|i5Yrkw zx6NG_*nlfW+K{WEjbPWbo#xj|h^4LGx0_&X+SVH-*fuxLFxuu};P)nGCL(bdo?~rq zCBt+2DLEBIOVS65mIT)Fh+-vkTQz2wMY5dQZ%{6udTS6WMV7v(`aV1|+n3_PV-=j2 z?e0f@Wt-nBH7P-QsBkatsu9Bln{9BIha|D$e)tfgT9uFt&ZB`-`A0;n(ayM8@@ zx?m#1_P7flEFd*{@8AP9F8vW87T+!?#CZtnd+^vP`K|Hs8sfP^%GHiI9lL7KCAz%i zp>Ntp{%AE9=YD)M#)ssCGvY&6$9rN(ogd@>URGZUKLWsI&=L0hA??v){<))L za>OZbe}U0Y7Ukjz0_98=)_r$PEEX)8lA|x5f?mk#(gv!mb8AQJg(+!ud1_4n?FYVN zdzF~1V{`TByVi7~-PqX}2AGn52rP-e3iOt%rj6q~Hs^jw0~MV1fe9qN@XQa-|Go(M zji=KSjOQmE(u27_BqKOK@|U@rR1B%SdNR*H=JVt#!&m|>(ZblEjjZ`i6P@{gklId@ zs}jO@FLAG=Q}R$Xk}c`R0riA<>!?qRkP-mgQ?1H{M-931u%tZfk+*DemeuMMNII_0 zkP55?@R-tCeSpg_l3rXv&&QZf3hM13CfUK3w=@=l4T=j=V z|Hzv~nZlwNyOy)?F;_J`wM&$hltvJ-RT%}yC%YgxEe7jzk?@;gb-#x72_t%~ZuDPd zrP2`?T!8C{3@(IUMHwv?+2HZM85*>GRf;)bS`E0v@TKJJ*cQ;UL&vLQm_gtIRSGnv z{7OLs`WEH97b0!>LgGzHm5XPGEHHJJs@2 zPZ=jBkmq3NsmaVlM6ccLYn_osKZpVebn}`YwchFL0+DD`s=8sIt@VYylV+hICHq0Q zWQyj*ON@&TWy0H*bGNGuG#MA$@6o+Ui5MK^5pB35!s^dj^QKNc{2KlHTIt?Zio&Ub zb9*~@ZSxY*7=uFUG*V9Tx^@sIzDNCHtxt~Qc(qz8c_U&b@pG7hQ92{V*!tQ+9$Lol zXj>8{>mie_!}P`Xy9eLxMUYHMn%X=v^l6Cy{t|N-@HOoS&)2Hj^UA$hg%2s1bQ%n< z#cHR>gt^X8{t91X^3$nFkGq7h{%gJO)h1UG4{tyE4n8set=7WuSwE6taDx$EUdT`U zO>oiZoqd8zsz|)&;Mmjav5JC+i(4`V24a1r!lfjj0XcM$8&~9#6+T}l&x7YJ@x>k5 zEO286mo$xh48uJLMvON5AUcG*yLQy@$#-Xz!B~d_qDudjP zY8>JkfDgqo{gB^8eXPbxVDVwW3C0%5TmiM8dt4*Sb zwsnAth_a|ItEP1XZAuBNgszjn93LKx5>}C8K*X~gg2)w9dex<^fGHIR1i(L^(kp$x z!fEdal&lN$oAlM7257E|pm^_u_%!nZ+*lj%PRG=M9K$xWEF)^rngfp-T7pqyh!qs8 zskSR>Z?_%*+YTv?D&8EwcGjJKH1Wlv8>@E-zC*EoW|aHQ%`#sbp-ob4tk;zFSda4er0$p)!3KG4r zW7Gi`u+w6K52_m^l+IZTu5y>fa+H2l{JgA2cx^@NkFIv1o6hl2FV0XpgEwx>99-$p zMha^++}Pl0D5}yr9Mhi%NV14Ay`IMATkIrdm&REB2#dO8K6ZbG#SPt#&9|@+)8IIW zVQU7Vr+sX`wVk`dJ)5-v!ng?Lr_CsgtjtXmoVW}!>*3_<6d?+dA~dx(fWIch3YHr` zOzrpj4X*4*hr%dUN zzw=lYKQA0{@CYA7?zZj~vnMX_yu|^CoHG~#IXN#Nh;=!e)%j0}J3|Kd(uUuy3*&-% z@Ymtu^a$k<>J?~)v8y(?4CWkPG!P@YJ(Q|!?>fvFbgjqeRQ2+C+=TUR+Ul8#F-Ig5 zIBR#_P(W3b?*RE))mqd#mAQ@3?gg^#Fpja2*gNBPndbYwUC|8lG3|5*v6w*)a%kMi z3VzQBFc>KV=QX-tUMmoAqInh}Fwu$^m4SOVZOQ!_f{<|>;&C^OUt$>brE7<|9ws-# zAQLK$_$Lm@0V*_8PX1pf6qw{*40qfXSqE!7v&=v^j1Ua0jps!pk0l(-D-xwhLDQMQ zo++^A`+62dW92Zf58_oElPS`xfo9CP4gl59Ae>}5T}>#XUo@MC#Q5o8V`h_ZB4@R9 z2M=XDoiKhmCM2fiH^GCL2jK#;d6xH5O!1yg2hU-!cWF^)ua z6BIla--jV7j`9CtoUF#?+pvu=#^U=hI=f^2#kZZ*Q!ut)rFo-)V~=_UCCsq@45{6U z2^k$37M@~=riwtO5aHiqjrL4M9)zyl*7+&)&yfnPASkz0fJ&`p9 zJ3Lt}RehvlWFIe!NkczT_Z>uZpbito$&>`$7IrLJ5dETE9)aN(oJ)x<_A9iR#|9{B zfvX4=Q%2Q+uuEV)H-!@Q0 zD)TYlOEJ$WHiUMD(L5lF+=D?Gp|1>?9%QF2Cq<^yQp<^<(RK@bM=NzmzT|MuTGYcC z)AI_Z{tLXvSa0kQhVYy#W|~;r ze9=Bh-qzd&wcW$MD@lxEofeP-8g@HR`+Rj#pjQ$03&evpZOIN3j%R7GSBjxN8G9G6 zoKZMv#ybe2cbjei<%mg{TKds%fQA;O_>Ii5<1G3KY>sne^=u4V&&w;wWYzeiuslt0 zAuQG(yrbd0Z|ybK8+je3hfbfloZEfFUgzcce+OIhf004B!rmGooubO5Vy6OeyGz)9 zRi2ZajVUS@p@Y!xhT6X&L+$@V0)?y@-Y;*({Hr-P-M1Td2}e#v->3(0o79-pXR7$Q zIeTF(+Wk&Xfs+nSPlIg=l6+E_(X~e?hgpP&)kAs?M^r6>sN)B(7Sz>{FzBVo?$R7R z$TD{$3ss>}`Q1ddMUf33X=b=Ci22Xx-47otJD?#QNDNHVW8OMz$QIUFVVF7Hh2x654n;)(8ePA8qlnY3^}i*LNmb}sV(fXjzp#4Ucn5jdJZ}u z1yNA`u8RalPCSjYo|MbHZwJM>e#gCc#d~_%^TY6X^b}c3lzQNt*J68kmUs{o0Y6>< zK*P~!Y>Y!e`wLI{Em6mT494(Z3qT^_u_ooVLPVlt^DQjsPKHZZzn($)zsTyj(~dnr z#XYQ#A87e}U-Q<7o3`H9tTke~5;JEtC#`ako>k?Ce334TWp1;M2L}N3|DUZEsFx5y z$}uNSmYjZrP~H@5Aaja2Z$SAl^)m;8eOEbAXLYKp+6B=CB9g4sxxi*(Qd|7$8qemJ z+2rteB%s*Lk>-4#>3*SlwjeJe#gQmF0H%e;*q)|>Rf39ihNyw9S7(%wr*V=GpXC?X z#{!~Kn5xHlo?JA|vfg?6bXrc-#&M&-EJkH@{`9k_oQ3ddU7W*N=AyZrf1+4z{-j(y zQO^M3NEy?-$%?iFzc}UpSQUBWJN!)Zj}UhZ?%8X#7INHp_~8(q9i~4V9Ui>;o26YS zuv%{SO{w}u?N!ZGA)U_brL^#-3%cW*TJ0Wt3Z?z$f^gj1t#-O`vei@RAY~xmwL*eN z2)RTifc<=QKGHXki~%)KP*V^Nh0 zVn@lh!q07S<^ z1iaw^=v&T@MV8n*Whl^{{TZ?2uKZ~}ci58j&%(*2Oow(A1i@&rG9G{J9j1QC!C$>a z9|7R;7fC=4=yn470T1AUdRRxmi~`7ZV;4JD~4dR@wPwwgcBk6Y$fDON@9`#MSgg z5ns1$MQiX&r~gCuv?Zogjxa8MuA@`<#2qep>_6-uygdBjIQ||!>iC_~!cHk`du?+c z#{EJBbnKd2yS*j&5F1sXL3(7Kia_9dyMGZk$F)08UH2JZx0{sLXSMmI$0skXp9~}eIlCC5eQzHz ze3(y-*V46zDlEPzLE%tVA}%QYPHWtU*OP;39rJ`~X|u{9wibcvQxX64<$t0h@9PyG zAYD*-JDInyWc~Rh*()%=Vut<}N;m=aeV$#yp6>3?sAvN-q{{5}qfXcy+;kIWwWg0+ z=sR1TJ3?Pk*Q@-qKYjV9(CaP^;9L!MbvBxmmrn`I(+U4YQ1#O8a9w*PA zZGWCTeVTmUO$ENB6Z?R!CgwH|5GXRVE5V=+EPS@OT|9)y)xpj$Ldm5A@jk8dmmG=jAss zCo~`J=Qza1Y`&^5TBtO3l(EO%aHfVVs|izCtxUzEuwwDCl-5)UlpGwm2t)b6>fu)- zsUpzswJn>5*%J81+1nGO=qWG6%tKFgqNPP$)_rOUtHX^6biGq_DABq!8r!yQ+qSb} z+bgzh+qP}nPF8H&{&VizK6jso9{t>NRDYUZRjot48yL{m;Dd9)i8I)uhey9|kiKPL z)u}2fD8kiJ7j)krf}GsD^%xw_+TZsR6zaI5-G-McM@|o^f1B6t6Zu|#N2zU4OmWMo z?W7B3AVI}!L|_>b{^>0Hq9#CLx4{t!T*#LI`IsqnVML8I@!Z`i=Gvvrlr{9Wn#?qh z17zC{@6j@KhIOf|7Q1ybL=54YOZ^%Q`^oMd(M#|Eo%&~i6Sh$alVAr}zdyEq{R(8$ zT8T(C)Xu^n(ZWZPAejTkX#0ZA(EFuu5p=_vF}6#?gr$ag`)Bk$aS$F^Qv^V}N~*(CS#Bz!v;o zYV81f;%}1dOEaPRyQF$-!sbkeEW}Mb;@{NTuR?Cn=ZMFt8m5)qgjr~H6iBD`KQWqt zNoHVz0Q}LfkkL!|$1D65Vc$)T~lXs)Lq z96E|7SJ0*2q8?)iMlXno-_Qw~I;aG`pIAR=xdO=y41ua}d>~U7o;MP5v;#ajqx0=Bi?YX#9vsinF${>*al2ppuM<2hMdyUImjJ=m=Ik5UVdg)0l3OYl2SK9 zluzBzu)V66#duiRuubiH4{tHJ<2us3J+R0ljxdUY!k%IGG@GQ4y$M2?jFUiv1#U{r z(7mAm-n1;GDA#dktW#2?| z*j;1i+QgKAvg(NH6M!Smj$tyq)m;EoOS#%smF}VmM+8@5WEe5NrI>cbC3PjA>w9 zz)T4Tyc&f`%_H751*K%GrRMaOXC}MtTz7i7B;}uDbZ_u4d!*!hc09Yu9|<#{6dNF; zo{#P^$?4(XW8n3!iv5NjHwFt=JIN`G!-Tlp$)qgzhlNEYQw70_kWycpLKNp60|WC^ zv=qlD)V%|~3>X)mndMfACR*G6WwDEJSvr*+Z!{-^{Uk+11sT+-``bhj?=R4_Qh#N` z>}|b!U*BHNt7$kW9yQwEto-S|@b-oVz3%bI@ct@O=9OabEB;%Nz5RO)BH-t$M_f9X zk15FqwW269fliC4>;BPX+lv!=z}6J`lWjrDOOxa!GZQq$Y_V%}N|jEA@rYYgiXKV9NC?t+G2uHV)JUopK)&f%&7FE!J-$FrnX zckWNz4Z#BUl`C%U<=xLJk7E3yn+RI_O?`z9=)8T+fENA&q#qLy>t$~Q6cAZJRD~~p z)|U^*V(!k;o(x`ToVLzZ+@uuD-ADm~B&-tlc+~KV!3RrJwq8AfaIYT~R0vi@!FlY} zJTu5nQPdg^Ht>GKvyV-Q$LHz|P!5-JCGj-Fsf4EgxifkCv@{PoANJQ>J8hdL%8&Yy z1>=>HkLZ);ai_tM6q&Mj{pvY(MLP;&ZyhQ7l0!4e;mUfMGe{>H_oA7{6_RUu_Q{L! z1Udq6pL?x35VIMwxMZy`qT4~L$t?WQ4A<0l`}|%dU1d17qPl@G(=ZTtYB+@z*XQ4xlScoWXjRy&QbUunuW70%UMuCYtbn#f!DtO~=A{L420&Te?(KAaw&z zpL|o64*?*j7x$-1GZNdmB=b?C-iBoE-?~$Zr6k$+FRtVFw0ii#t%a`;O-KOBSQLfqs!)H!~h5~}O z$!9=|j-8+b?Brr11pP!evw~%9M8|0efDHcII!UkZGkW0ZV)pm;y5Zl!!OOn23Fn}c zVQh#88rFpwDyN1?LO!2^x0xm(yQHNn^U3r*)Zn;X}+R8?cZ0cXioBbL^ z6^78wN|sgD9oZHzZx{*(Zx2d*-p|^2{nWS>YP~nP9brN4*>~xI*_a=5kn%ZiK~rHG zOX&Vux(MU{vz37JUJ7^piB*E>|01tb1hwiddQxsOe`Tph0}-53EvmrUeVq`9T3gKR z>jpFo4aPL<_j5b6+R;Stj`KC`uD>+kPw-$z5;oJIYsCD15#m&Y7T!X>%h=(8c9S4l?L z!9lDPpv4f}?{V6HfNA&^rv zeN5H;5Jt8YCWngp;8u=hJ|R)ymqpuR-6-CQFXo8xuVF{p)9_mydoG%8~{( z)kagF|49HA&ncFc36rB|XWPc;63<@Q#Fr*7*kyC$m*(Y8nXx|H^JgjF8BX3KVi-^q zwEEjoH!Hf~jHi}w!d=Kw!J#;>a}*EvYFkvIB>4K z`m>LUI+JC|M1^F*;7_^#h52|gUN&)$!f zk9GvCVw5gsgI2!iFW0$4Qjokh&jUYiSm$zo&K@xMMZHZ&=k3$0Ca%XNWku)X^s88M z%4n(lvj17+wN#RnFwPR5bd>9A@t+af$XT%stBfjo0i0T=xF&l$CDbPeJCB@I+%YR@ z7ra8iq>UdxAv}GNL}_rw-CzB7B4EF^5SUM9Nof-KFUfH(vz1O(rHQRXt;zeF6_%Gp zNXe|hPU=B(-TCb+h2-?$>+?kS`l7bN#_fuX7yfu+F`e8)Krr+xnR5St|<@*21R zqL+e*WZ~kGl+_N^u3*@o{@^y z5QOxjGRP1SXQT6bhL(!#ORsoV?!Q-{y&k_G-0VAo3XGR=h@&)+xYihk@22@KmlQ<; zN5xVWbVuIWI(}7DbCb~7iFZ_5lUy}c8{CDO)qKg`{}L>n*h{*0f4-)Hy6U57i~(GJ zlLs8A>UuQXRU1!ly05IZ$_zn>!7Kd(CJPH(;rPTSv{4ds$9ZmMXie3^y=U80|CG!H zo{WEQU(3Zm`M#m&#klm76V3NApqHqU2F7{K`?9SY8@xU4?abWrPD;;@JmA21m7;(C ztZ_|^3?boK0od1U zTd3ZiX=m@(=-%_Q-&;NQzYg*>m2$W7wVncZCm%2 z5;K3M^@$EE{|}F@MN0eZowi(jk#|%qpH&=28tb~pDnN`+*lDj zXEnI{fu44tq|AZx7b6|IiX#!&(pFxNW84pqBt{_Jl}hF@!OL8A&&jF@IxE%vKiN3w zm0p0w{5yE(Sm=+&AC26#hJdld2(R8C{M|PXZ(TS-O~-GK@P8TIKPWt#5_x(r1ckCp zmQNOdYneb-EU`IdD$WBUalH!JrjNzCJzlmw^NkyQ2NVVeynJ-XZ)5?*q zRoZuRTZMLyQAH_c;2!RPuQk#*VVD9`P@!ZI;=BaQlM(~%Tz`SoGwC<}H2#bN$ocbDc$9==Y9A(jjq)(5VXr^DF{BPi8 zhKZDte)sk9poGV(opaOMyG=I1bS@#ar&E0?@jY{AyHSlSP>6uFdqmRyrWL4I7HOqQ z#}%^e=zxkedf#!g-!Ag3-!UBsPjRK}Ed1bZVXw(oWYIB|u$+U{6s94ADSbGoeKxh^ z%nPnX^mW>DBf!!xAZM$es+GS{k3#Ty|1iQOqM|tC&&*t$F-zx)*?~YBE4e@QOczVN|EhDDs ziWV5*T?jQr&>-MZ%wxjrf5s`U24V}0E=4j2XA|uzo%$W`$&IV%_HU^DA?dzwN zDR&((GBtg-BJVXNXp@Y}WSb&%;U`F8A49tFCw2l+=p;@Aea6^zhS~f-m5qCvJ$hz^ zkzchVQYJg**S`On)M>5|r1{X%OvufeG+4jrmL7B0SbkamWmnBnUkUvG2@IG8BiG?y zQ23z!nrr+Yz;OD7g^9!eSTSs=@5FAf!T8MTTT%)DCWKFY>Z3%T16)GOzCNDI-y94v4L$y&X4x?XGwI?KLzj zLM(neQt}QpD7(#K=<|qoN&(Onb<1^IWML(Qgytm*JK5hMj*J2dj~SG?SsBkO<7?Z) z>kw8F$dPJ;z5-C~!79^dF@{-7unB0P^~ivu_Nt=k2Y(}Cm3R*Vvj+K_lFATSmSeJi zw*4>CI*{T>ov$f9e~6c8@beAdWc&flZb9*3nBh>6!HSW+m@U+cY1fT}F#Fjy@CYD@ zZT#{#8yTY4?5flcBdMg)U7T5~-h?7U7z*oL3JCS}*Du`6G$chs*W;4?pM%Dz?CrN8 zzWWuFxR${wm$sMJf?6bbdh))z-2xI|2G*t3e>ZF)|3x98P#A+77}>S8qM<1>Ezme2 zUjouH-?=mh%MpI1-SihOLo^|_*i_6_x}`T9>2uQe&t)Wk@?A4BsVACfB}ji!d9b8G z{t^UH{C9l$2BH#A|47XV&fj-{(d{4PXxAU~yk(_K@@S^T+!FX5hcF4T3UO~;RvvID zu;#2`!_}=SoaJ(LxOAO!9W}zyjD`~(_NnoNZBZs<9S%{q1DC1g1%|YYl!lavH(_kZ z?9&rPFnkmD{Zza$hx3ioYnNn0pQyubz1MV#16!YR$I*FelH9uW2Jo-2vT9(!7;8MY z)<-393z`$!F{ha+n&Ye?pw+C?5_YJ9r^nouR)GXrLpWh)u#$&MtkbH|w!jf`>r&Xv zTYJ0xrGQz;bR=ehQS(aEW^kK%s8W9Q)mA`R3|EGJ5i82Q9J}@!i1kBPz$u)5{2=$^ z9kO>^?Z`=jJp3@^++bnW5CKqv71-&Vf1vRET9rZj=;m&3Wv@~HV1)<2FHC0x;wL7B z!Y;Go-wL>Nn4KQZRQKfcSPgzxn=+L)~IBwOZ%7C*}7h4&f$iYJ!tlw+~Rs(qK zrr<#FqTh|gwlj;eSgs!}z}@UA=x;4hr7|QyWWE1uR9GdPkNJ->YWjsIyJ<%nB*itl zW*o0L2u7%`fo%b2gCySXrVdvA3+n9IL@&yEOLdY%?G)L8D@xb0t$Z*vtW{R)stuLV zgyu?E%axw8^3BJ4xv4*kd?_9~=h}B)0@!$xORi^b8rfslGX`f^E?(!ccgwJ~wyjFP z%E)BXtY<;hLU0*=ZL z*#wokJ8!)4S4V8W900`Dy=B26V3~&OhQl=j`Qukd%?F%*1-MXKgp0zt9kcJ63{~9E zEd{wOJA@QRuz`&R@r!fsk$c#{!Eda7E`r{+tw!9h;IS!r>k| zN@~hV0glmCW9_2G8PFdaM@d=S#9t#FZfDDqHgLVp{4kl>2|*&A&)I>w*`g6X3L2e? zKNyRSnq%$L&WdTb;Ge?|+eCar;^51Pj(9iY7995-qmI7yLR$k|EaE>0_OcN>+Cu<9dCTjY%Bi2<4dwUYHWk{fvN`pg(RM}CaBy-rgrE5(1GF&t#GZrJ&OmY>A^L)!(XJQM((^<6;B0^kb zDE$F(@>sFV-Z4IB)X#_=01^>N6z7*M8TGONkvnwH^k^}EDAAFOn+&sqcd6qxSfo-A z(%;tQ+4;`&-o9FYP5jW`Sz^w3OzE`6{GAL4(isj6lJ;KN!rk@gQy93duiI!ouh}GV2KPyzewvCxiyYI$_a<}BfmSGG0KP|nkRt08HT-9XjgnQZ7$-VAU!K8ebIx*gh z*t6m-eD^;JzjXMsa=-TE;bFPy!52%dqp@4$YDaD)eq5Mv@gd#@BkeNNbYSVe4!ASi zFbo|$mFI+|Ky{oA3|hRG2IadCwCG1~#I7>wW9-C6-B&ZUTW)UfcYNnBdU;|0y5sD6 zd=|=^8a*EDT{(Yn_VE2YmW;EKb(hP75i{XLeY$XN=Oh(w_SzeCZuE$5?|5(S?#SBm zJeeJC=?8@nH1=D!Aq$BynSxGyt-Ins4VChYF+^|+$~0C1FsH9HRN);{Ckv%wb0z4)5y5U&Oq&E6Lq!b zrcTUcDUmI0+5Ur2SCj}pP12LvJDT2CwRf(&5Ng+)w8fobJpO2WCO3ZV8(he7ton9A zF#9L;r$*e$jO;NgyaOj+et=o@b4q!pK{=f2&JW<($KUGUy-)2DWc5Oa!~gJB#>O4Y z0*_T5Q3!R2jZmeJicovaNmV;fY1Rp7qBoZ!OP?_rF-B1;3u%IjjTgOa2h92~ zsC>5;qcSo|vbLp*HpQ1Jb@C~k?+$OPuu%MhADfF8^@#`C5&_$zL{jAvJ}QXVGT>3k=x5urpb4K3 zj?X5oxXe!4UNx5bW|(*+2V$i}J(?u6;&V7O29Iv>oLj%)QNewaEDM!&%M^1;HBO3m zRj81+U@V%rGw1JOta>z>G)f9GN9=B=g8>f;3NP0{L%l3A$pm%4Vr#j z9m$6Y*ZI-6Y}G=(F81f8QZDN7#vVeYGxI{aRrAy`x}3g}B4*u|&bNjcoaw!qZ&Nj? z%F9bHt%GV>wpc1?t2#!OvLIEIwuSQud z*Agl1%$GXa!E~D*b#lZsP@vC`gvtPxuWi+dH)d0L_$& zgrCU}B(1)$o;bew)YQf4wS#F>&8_t@EpOfSEUoo3&}9MB!{?b-z3kHF&j`(Xn!%It zTmLSw%Wy}QZ~8b9YBi+G>NzPewsXLhTM~ky^D?wE)v1GMXPo|MNQ}X@KvQFh;yL1y zUKpt)e zS^uiOI~q@@xmxJbPp+HBl)7cE`wmz355Rx6ese$p@S}9S={@vr>`-KJ^5&$fT4+G~b*yJ(?%6L^2=K0+j7^?C}2JsQk^(t5@pQ z_Sf6n!BzC|PjQnB&aPdP;13{$-6QVc##SLVLCTC z25k7i!qaYWTW_EcCp<>6t?`VehU%hWK~KZV{KUZF?4=BTGa%MOleO-C34 zLBN%_dSP~3Tp|e#+`0n2ahx(oFYt5WJxp8e?b=N-(m1_$KWX^+HRNWyT>=Oxa0|o3 z*}w-MTv?`$exHIZ4E+#IdqT)PBR_0w!e231Hyopkc{G*%fWOhBWiD-zXNcg9>-A{2 zZh09|h_-c+tZJy^&JoQi$dytGByGaF9gY6Hp*eZ>|5_s)rZBddkV^gr5Y=2CtBL2B zDKHtPuQ6_IPw<>HVf6%OGFL4{u8T+!=33CdDG4i{N*LYw*IBZWa#f1*X@qM|0h_W) zwhD>;>a(&I!jlC5U6fLEE)j*n7p+!?jZorTL-MZY9|p45xyRf`TiIb2RqR7d+fF?A zT@7iRn76eKhpB*)Zl4=;w7KNQ?;_sl;Mn7e6?oGPBBd}44&*l+r-V06W9^&m@Q)-W z_n)02T}F96gLDWmd_q^@WWBTP4`Zbbv@}U%ufhV;MJmoClDnv^?7+#$ z%kZ)J7v)Cf4(eV|-rUD)au|iXYHvyLvn^}na)aGOCeP*L@L34LuPT9ieB{3LpqC_` zVvF`w#bc>XzZ3JPpB+ar1^!B{sXzQshSXqIUSxcH;gi5zE}(%cF$}hzwu>Bx(NGc2 zgkh6u5NuhT4LXY)p*q%{T9vM%9B$JJ8kb>zqn%q@TuQcAesJWv3p-1hxg$*kX8G6y zoE?RS<(K;^d=)%bs>o@8d{vZaRk41FELsSrmH~wa9I|4mjM>7`n|pC>sO-#xK7&G6 zgT-&6NE-;mFr5436q-%v2pn}%{6^=j|D~LBX2h!3DRHm9MJ>Lo;G*5?RKvtLt9B1{_L_B=YL~ej0v!x$|&; zfBN6SC1vS3f_p0voL^$(O>JT&bguGpys(8O5`|lxN^xEhRU4s)7G>EwoJEZ5%@czM zGu&=D8W)Wca#6P1q0DaIH6({Yn^JzN7`(@J%5M5NU#DC2pC4n&o9M~>(Zsg6HZB?A5K+pc1cw?! zc>O?1o;-^;e#r1CQMJFq0;ayahV9Cx2ptL?#Zl)65=Z6ik8r2FC86vyE#VX$i5{;Z zmlpoEIzd`LGN37$-sQxsmRZ5Lp^B(>9zZ0^ff6FcXJ{_2>KR{|!b|=sxOSqm`uHUh zg!hKpLBw&)Kt63z!Q9`Rh2%Qfg`DqBjJ8}JuP?}@>S0}cR@k`PIjhewNMWJ)l3?t! z6olBidS5j^L73j+m~V!{$!@M+?*mH{b?}&UC7>g^7^7MyVP9D7l`rkjJBIano=NNM zX*9x_u$rdn<@Xw3G!(+9O9Mzd1ax_9JO~zM=6ubD8UocS#vEe91K&-0rqr6n>%e>5 zgvyc+z$h>^B0ts7;xCRN`WqW)K4v~s{`pj{>aV?8;W`B(nYQg`o*GM}ZkMjq8r9%+ zC^s&cwuhBRm1^KROks>OvdVS-58@L0HB*pGxm0YEvGOyRP+v|jlV-+hT~1tr@d4r3 z%g^|Q+N{c0TkK=n1zYDTmSR<9&Pydv^HK>o=K_fvu}-D%nXR?R#$1uGsAsf?X!Jhc zHqE-kVP%Rz5RU@5zE@p)I34yq+O)o`@+gp+8J`T`o`L@c_X=eu)`lcDe-MwxeyVIM z3Dg~pB(ps(L@4pp$RH{OW=Foe*?Nl-YcegcD;J@x=cy|v-7D(Laz_a@dFlzrV2nlE z*CW!GD>rqu=)b}LGtKh5aHXvNj^6=)?Tc~#Ynrt%FtfFDH2Lkay_F3j3mFi;a`YID z`KyFx@fB|KE~M=1sa9x{4j?SBZ3K|R*HcW^e|+XMI{$6y@|kRRxf^fGxGhQ*3%Z2q z+1kiDQ>q3klp6!n+VMIV?h_=JzJ5axM@QC}cz*GYZ%EINXJ|P5g)~!Ol%3hUox#QA zEHYNFIw##i zx=sY27+^gAK=P1b6AkcIV=gnSh$M%k=SM=Sm$T9vVeH;9gk@5DrdhJRfr!6_p&}fET!LhYmHF(W2 zRj&PJ&R-PEf4O|I%{`4Z`ZW|=0(FNpc1tAG_X3E#pg;%F|AM~d1Nr#B0I>(U0Wb{= z0Kg9k0Ps6_`TyG=o7mV{TKu9RSal<2gAKv^MNMWcRH}^H`ki7a5(~R@y~rNQ3_I^H zItaBQ8*(^`#6Jy#`k!q=%JY3#rC#;J%^8^4sjw2&e*tGx1q&5`8_hy^0zns@y+50C zne3UFuB{t8skiyfLXv;z_vpj%rC){BYc#qcTGmgLH}*uEe6V9~h6CfeL-s;Lq_J7~ zLX1%U)f@+o;d%fbMZeRS=S$fZcs+a%Zfvw`KeU(*?;7}Ys?&(D%2Vh8dkx)<&PtU9l@t;7MdzD8|hbei8i=X zw7I5(Aq2%$1KEN8xah}D1sKE5DllMxFIuR2TK%pIR^_7*UWPY1=6iE)fz!swbjCUY zoZoUZ%3o|0!Kj-k z%m!FzG4adX*cv%oE&S!iVUmT6ZJvQbC{Zul}tL}_{Hyo!`FoMZgTf3Q}Q z%LeE@_?W5;tryHIl;3n*qT1k8_(&3rtxXI$?W%DaAcj_>qi{0V`Q#7tO4$aIgUdu< z=cYqFCQEF&eMCPN^k*}tsq62x!)wawE{myM07!pMTt7N3gGuHyBORE{K9fXgBM>N- zS+Hl)N%Ez)%HgWtp?w}h!fuAlSKii7JEjE#FhK=pxDNlNq_qk2_7k*U zlyInw8X#u8Q^2apru8_4ImF?sgf}#qky?p`xUSghN=2ULm*7qd|W?OdO&zk<$6$1!FlS;R2^Oz)hHP`o{ z#WG}|8pEpk)3t|oyZcfemJeiqsWS#2P(DJiLz8`Q>E~cqGRa>~<6qb>2j{1VS3o}x zIey$!u`mhh{OBi%_b-OQtY!(X%*WG#Ai-7ERLDOJM(=;+_ONu1kz4!c>X=K#HOhPI=@gdjRa3#ar7$Dkz41FPPp%pVT z`mwr0qp3)`GMdPyvIO1kxS}&|6d6~}u;Yxk31VFOw~nE#XN{3;v=v{Q6YeX@AIDLq zG9;ki=TqcD+s|91Q)z7-8Q{Kc=E^nWMEaHiN|b(23!peYFl{jZFkI-q`=xFONCCJT z4qEFsUUK-0gZ zJU&9+U`N$O1gs4{5RC92j0#!ue>mfD#zp;gzWAhXB}Gq>*{8R+w{b}vPEuM3R2EHK ze!R{?*8)MlH+WEMpI%**t9o`TJJ;8C&}}KDKt0e#i3ojdEQUjRi!WwXD$yPs&98=| zi?H70;pT=Dsz8q*PQ^uvv@w7ex6G0W6-Og|==1x9f9OkPD2~^z@%Zcm-SZ?CA489` z0pVZ)358pX^yNY@wJNud`%GZ5tn%v{z+yDjS@cmsVZt%(Nph-2z$TO=3?`YF*Vu-` zGz7U$rJ!@oMcHhkm*qLTegIyi4CfB;(8nhnsxB-^IKkce)pD*sPuuOVmZ)#q<%Qd> z7C9%J^Q!`%K-5`?CWS@uxvROBo>`VlMVsl*cF_Hs)pntuRAEr3gX0)m%?$)R^S7(+ ze!ZxhwNn}&?L$+vD#@uy`QvPo`pFC9HM5an5!VA4f{vJL?RNW4kF8Bn7G|PY{wmEQ zU=cJKjclEy~Ha9lV; zNjd6e$#oO{C?i$mEEP zmlv0;V4T`K7$|Irf63^+El1O%B?< zxl3`zlc==2yIvh&F8L4Oe*(FrlXsQ#xBP4R&G`Sd1pFT$J6d@BPYKwpYGe1C^uKHL z?C1EF*jUyj>){x%fbZtu0MS^~nJ!5oj5WE|gGd#LDO+uKe|or;>?q&!2N{U-Y47$N z?PhTY8N7B>%9AUY;;4UNRa{-=5;qAH{TW3T()=qNG6dsLEw!elm3idVljyQzeV~&3 z(7EU-mK!zfpqqRDy~hNB_YC1~M?BbskWpp~>Ov2jL}dj9(x@gIFIW*%W&uo?=pKVb zjm-i^hzbU)5{8M}4CSJpkA^1bSD&#(I?9SQ0L=zMRZ9B|%mKEqA0=prKHLW@OG*ps zMqi1tUPUJMPA}?AWTGF)&cm4P{TZYN(lf)c(Z+me@bRF}L=yl0LT(*hbO+17A;f<(t zM04IhDqbN5YC<81LVc*6+O~5(f2NnGwt|OmSYMWZVrmGweb2^>PB-%-{TTa?1%hdQ>dsfwSQrPo=xxgRvyxw8f`d?^ER9x0HS#P*!Xj%J2fPo3LWd+p>s z=f2T>+4+^%(@xOK>@pveqJh-?NmBs@CiQ(;<6xrYE~~+t!+w zz`$p*rP5M^Cx;OSq>wD#TSI7=o}|&(jfde2hN0JPRF?5lo`$|YoqEE$5RIWS%J$Kf zocI)nfCfyRpL?*IHD(G0Wo~#6?(zRdG*EG`peK|pS}3XhmU0524_DbhAVodcdj_mu z{wccM!~0INzqrl*+oe8ax90212&Wcd5!k!Z8DiFn`6vhqvI@Y0Toa0XCoQ1oA#{f; z$+fkxRqC-Npc9s)Brr0bTrf@nNJ2f2Qnem=)+g>v8knu1+0(M-)UkD!&L2@A=o|k~ z*f}!NMN%OL+{eDp?0{NZ+ zt{B30$CFtrU)$46_08scs@9KoXkq(B#}&W)mhb->?k;vl$_hgR0635W0O0?(0>k{b zowxpdoJ<^kqfR%Lm20NhbEofckdsv%h!8ygz(|>G3-4JD+nHn+xhGK*MtHnPfFBb@ zgJoy0_f7U5V?vxU`$n=22=mKV26tefJ5nj8t)^vMu*v?M`DO^@$#kXcIcHb>^7 zHQEOdnHH%a3vHhdocapMPecF*7t({6m|dgcyZ64RtOG2uxVSi9Hi9e8thk`aR+8LV zwZ}j&MI!{mLYVDAtFy>%A;knWpfnE>?J;pif}4;72$Bd%q(O*310m|*2;!)hc%vv5 zqaYZ+L}FLIG@xjTARDnRMoQCmPa&T|Wh(iCO@_ z_p&(i&3;`#qg5;3pqQCKcx8Zq!_y8NWIqUG$Nqlx%y#%3f*hIdn0H1K1qasD$G&%ej77!+?lc8I{oIKuc&w-vD1d*0DsfC`J991j+3nec zGsdV>o;*WIPwN7BnAbYI3dRx)D}7<1Mi~fNx=-a{I(SRxx(@B#k7uKs7F0uY{(nbneSz` zG3fg1>q?hsOBvTz6XUO_Pz(u^;_IdSb#xT$kv4T5euY?ADG?G>Vgjf8$^!Cnj1dl0 z)InG6t7fPZit2kYgw-Ez+uH2~OGuozGO>v&{7_JnaZc@nn3JOa_G6SwMHf8#dZ)W9 z3*0YE`IMv1##RhK|}N31TsN?$Tt#FMvdQZLB1jioRo%cF{-&D#}f3 zbPRU7JS=(5(G`!=>$c^!ESx;R7S}$-W@017M#q?R+d6I%ye%|> zmwW@cyW-;<+;>N6)2K!__?E^Li%?KI73;*7i@o4IYc|B6dK`c(nX$jmzv4xSa{C z*#eA??*G6NxM1|-ofGf8;H!$gLMeBx7cN>Hjc~$H2wQSbl86-D-2esv6tJC(1lRGo zm3VD3mAA;)uqevWmkHYF;{WkXZM zsAzS=0E2{1yTW)?rq4F7VC+eZ+Ya#6<#SAlvr8#_aW7-T5#G$|Bfve4HrTntj^l#} zifspW0RYNc`Du!E?QaappMra2v$NM;!-){0ogSJrZF%Vax34;E1B3l9d~qMt7%8ZU zii5$q;K|Co%Zu$Vjv416M_t8w;rHELz5T+80~Z$0=3pEPKx|9^|8kn!G4lOx42O)c zmgw2FnMMkOPq!Y^t4YQ(kZjvZuihDcuRZpxtxC1Uqn2-LPxt4>1AmVedk~pz=+XP_ z?2FybFD+A`sNo+!d2JVnhbYwwtnNTK`rF*;>zV)oL(O*`OCwo&zs%SM0oyZ@y1b9p z&|IIR6vSCiuMc?SAe^wBW~I=_?R)73{`QZ@(>Zuwk8;=oNd)qp)kJOjy+SLOx1oKL zuQQkS#)ETzyCYZ(Q~+#t=w1ss`vb>D@@Qf-PspF;k;xh!ACU}>j)zwf%1s4y*4L-Q z?Pyx0FdEr^PGQwzkhfXdZ$5E?rN_a>n5DVyz#;Js^V|>W?=ostBEefgO^WU(!}t@F zYcB>6$Bs02dGIJkq+$HjW%DhA3h4$U|s9 zx=_L5zRoJ1Nb@HD^gPTJXNU5|9L&aT=4#Q;(Esb+j=7QJTqI%L9Rn&%*%zFcT&fT`tH~;+~(0o*`J%Pt~Z(REP+v z?jA+Z-1pOO*jS*O@lrp>cE&L@zHWnY33D?oh<)5-SCm0yf4rjGvY&;R7{ox|QPMIF zyLV;N(%A-;l)QzTc4c_$Gj|QcS<*tdys-pdxBEAr#LCHIi`H={yi6_@Md2p3Agh0O z{T5GTK|UBKS!6EsSSbRMdDTcqLGlnj$*0DZZf4gqvOc;2A~-{+5Poa1cJ&k(j?O>Y z8>&!8Mfe6aV0E0g{3D$+iDax= zDE+y8+2X__>VRR}O0|kXI~+5vk-NPMp_qt?mabG^UoF1DLV-@Y5us?j*bt?nc-HNY zJtGMq_thf07N@g7l82xh^a$q_B7C%jPiQf|CJ34gF@5AD$LAUe>;q0L_1+|t?E2q< zE{yiz@RwoWiC7uyr-QG&{DbcTF-T}x%khTiTw_@uv~F?yYwwFk(fsJm$sj_tk~!H0 zQ3@UN@LF=yrW{y9L41s#^)QbF?A57vmC9==O6{;VSw@;?dI>{~UGNuAFCuir*Q<wr31IY_4%y}5g&|5#fFwHijLau(9Z04i6T>F1(EVp3rU6CRWVO8flfsdST^F+jVJbutUCWcx#x0~s?7xMcIQK@Ug2-fg9b+%9?Ej3TB zwFMOb3y*=+RPHJiXpdFd2JLY6WeXCfZ!h%xi7)y$?X4EK*@EjR`G49JCwi|SCV{1S zmJi>pEC8v6CJ}m|L<%V(-J+224)UqCZWyx7G}h6x%)bV4Q+>u%V`UsTJ3ls_ycgY& zz2He~BY9|f>P(dzZJy++uQ4^7+SvbP+eXV0J}Ko?D#{G_nFUHLo`crn%LK}FQ4NRN z5W0K-kXF9*=d*V3xm3UV9f3;`q-5uwvc3ARt$O5Dm9ML{6+oR@ty8lOp612=`-A!q zaebAW_QN;q`l5Fz(DAwV9{>N*bxv)9KuwY^+qP}nwr$(CZQHhO+h&(-bQ#;Tdo{E3 zU7de$p3I1NBl9{y-#+lupNFqzoUOp5% z#G~F+z-70PIqJw`m}_~LiRo$aXUh-m-EnucktFc#=nwe@%a!j9?Uf2}2e=9_zyXcm zft!+4ivt%qetTIwvN!Ps z-Z_7{oM@AbcDW>T$pPGXY)|vh3`uc2+hK@pTO=buu&bbG^F{gDIY9GXG;Rr|~76 z>As1Q=40|;6sDqrk*CG8yIOXlD&4HyQ%w1wte&lW-mx-2@j9?xm$ z!f2h@N6dq@Qh=1@c`8diM_KRwX{ka1w^hD0**u1B0!*3>q)ggR7*9FHi6>9a@D&v#m6e=pB97`j&YT*&i9>1* z+91w^If~M8va-pm)0w#wT1mQ#P>U`{CHNeuXLO+FyeB*^1|D7lY9i`6zwW&58w>SW zPxjEYdO1G>3L+vECs7<_$8tgsll+_`0RC1A4q%j1!h5`e2qS5D6JJN656+U!7pV$# zaaO3l@G4)M<}V6W%i!$RJh6W_gxU9U0RwL+(vqXwj>aKngq27qjUaLSii{I7+&)$Lqkni;1;cKW3n>lmKPwLsmyJ{Y1{&LxV-ru_6{}t)QBk4=a48 z;fOEoFY@NNlv{ppHV_N;{}zu^sG@Hfr}r01e?;2SJ2(wwEHH(Ic=g6_EHG||S$3e+ zp!xUj`~bc6T@bj$e6r(($w{Bmf)^F6{c)oBa68>IVt6!t_&A^_2wR7d=pF6v*tPT& z0lZ}eP4n@WB5@lwq|NK#@mepitoAPZ33^IvgjwdY&xE3c;TFg`OS*G}8$QD)9{lA; z0;zm|v2m#Kvy|W{_T-^;soD~x+hNRGVSS_`3K@f2zc}CZ_Uq}!m%888TA-V3L8Zy+C0cj@l%=hxc1@0!eETD2y{!L`ib++t}%X;S@R zH=i4saAL`RZ{j=~-Mu;dIJF}w3`>f1jP;xkE3?H4YmprZqj59p4E|Z&&~{lgNYO6e z1@E*)D3ZJ7C_|LZA|6eVDhCNep~|Eb z`Cu4;ZWQ?`q5A*Ej|>CZhjKQib^s(RC|V2habfZS1P)%O7zd z_|KO&I4!Y>5`N-Ykb;~T#5+NBk=JsVWST5_Wp8kf7pg?u`5BK(Vo`WkFZ1f+6XgBo zz0bxllR_7@lcGxxMJrLsqV3t4JwF?{eQclnttaF}+)l`O5D7n43O0)83^|Tc_vj1m zw?csQz?%=VY81au$2=mXC;k8-N~Kcb(G-nDNu4Qlb>G6VS1fA0^;Dy`0!=HZTz1TX zN&|)1h1y{iA0NShrqhu73l%jty?On0e6<=xXV(5SeU(hz)sZo4{_DE0-}lEy82;Ia zvA^i7e{W76%|ys&?{}G-4mCl_-Z|qf8+F}5Bb6o)V^aJPQYCGA_P}|@iZp~~Q0kt~#NMq}{FmIpj>+Q9{EZxf%j)3}Jpnev#z2FOH}gDbW5uwa7KM$9l! z=4vLtkAx|7{b>H&_0mu$?~JrUA(7s-b9Cl!x+PK|5qXK0<46PvcBo-;DxH(F6PAbs zY`jt(vGp89X#%2D=YG~wK@bmgty0XoI^p7d&COW`j@)D`%3SI@=D`G4hDIvkum#cZ z*S2FxflA9hD9;+vY#9>6Uie=+H9U^1`c zSbOB~n{rK2p^iC>fyohBF`af-kW4E%{o=e`*ST8|%WGQ;zRyW@nOn=WV#m3rYx3J4 zKOOtP4}bYxxKnQCEp}{2z1zd_XaE|n9m5qXkko`2aC~z^u2M2lo8Fr%{E=f6#V`y` zks-e1`O3bLsi%njca-C4S=WINSCG=f&O2|$wl-$*+9SqNcKJ2vsHJ-1;~wFm-eCDNs_8jaVzJSw4rj;3h+E@5LS>n@ zT35xA50Uocfw4Z1Oh^fa>3Kb<=Ud>g6_E4!&SYx5_HDYXYO#GUBKfB4 zfascLUv*tHo}nU}o?;q}DMBGXjc+<{v~+h_rlhDxbl=2(938O(4E1F$edAo~W9ce? z?Ie8uu~^KFW%m4?fsAP+D-e^dw$(@dgzM?qyi7$&?AHAJvW~AI>S;k*N$kP%5f;1W zD;uMPBcNdIJ5&OhYh5`*Qs0!J>|`eNBSfFMW?%LsF^s64g;H^L!H%n8z^G9HTJg-H zQGq>(iyhZ$MO@-atTwOY5IQf|a~w{6?F(R+;01l)Id=yK4Nm zBDdGqGuJ+MR@?321pSmjmkX`m7(BlpqCoS*8)u^)2uFRi=-MHbVvF&%+VC)%u&$~Q zoEvUM^W$yn#>E`hBM{2RZyk4{dTO(AfOYzM@bqxI z2Ibd}I@E}VTIt`s1bD*tSY<}m{m%8M1?c{X$P)as4-Eg@07%X&ByUxL&P_0~KT6KK zq6tkTD7m0M$~O!M${evP$U+?4n;Or<%H_I0Qv&A>c zy40ASCCdHYw^0Mdl@DgH`fCMGoU(4>+MOmb)bI_b!)oeMSQYPys{)ee9Fi~e0CZ6D zC4HvDCzL>Xsf_hoQOB08p#$WL@h%AU;(#k9BqVaE@gL!DCTLT{jz>-Z*>_W%?jB08 z%MjCJv~=ZzVoHD@=TvaoZ@1^>8cK$ySpgGdz48ip1_wn)q0I;)%MEr2$KldoYJb^- z@YyCt$uSfXX&@{mP|-B#2vG8la2yq0!0a5GU<<1E-i1AiRDrThFkMxK)l7pW(kr`? zM+;2Mzf@7WNGgCH=6FAfF9;T!uyP1~R&F(|4i(Q$;p$AvxP_7sMtub;m7^(H0G2jZ zplvxRJ>O)Br)Z|#Qh47+HO^a8UsfLeMOW;OWkjzafEM8eSeLp7vq~@2ySB`-o(A*0 zuMs=aY8XvJ-;?fO3GDXV{X-aW8<`fqPuG$DhJUz_3Cw0Q>lh}&3o+n{DPGf`OQo2; zq}yqd$Sn&U=!Gs>jylPDMDhkeSV8sZg^E|zR3nN(K4-GEp1Nt}o^nhePJ0q_-Wq;h zc4PR-6iMGx8BgQ_NMcX@PTz=O61+493Al=Jvd$?X31nj^?QEMpW~b03y! z2*lJUJQ|9SU06RurJ&e^uf!L?$^{ZkxnuE-m7OqMr<&@3j&;JjC9@1R)bz_qD**Z3qG-Kt90x?~GbH zq3(I*{O4|ii(6bJEK!--`#gsp*nIG*M+ad1s-15N8=R;JiDao~FU45TChk?w*+HW! zkhHB_OPEf3yO!iz^dgEE@Yf{*88MsT&Gz=7D#i+`2R0p_6zf1&oG)^SwKTYrK=b<< z|BqSW2mQ^5E>aHC1rzcSx_7WbQ-Gfu*CJr}jSH<(a;D0W-`0&ALd0#RU#cV&g&L=H zK_L=Ys03Y@_Jj1QXbiWbWTb9s@~xbqBDJXd;8_&H;fm1Q*BBg<=<^vhwo3JKbQ>RD zmVTuosBE4h73aP7dFlvA)!)}&`qiXiCIk?tkVA*XocLZY?@hMkBreP>@)xp0@Xl)bqDO#$_qtew8Lm;*x zF@%CM8OTW*H#ID8Vm8haqhKX~gfY@&vhf1`xW_u&U;~oOYTHmoKt!oE`a|Itnh2^Q zvoL&=$Us)EY_5R2fJsNg4+*oy-->a1BkraNlT$A|j!ro5J8KHW1s3>&Z-rP8G+mb4 zTY?|vIF$n@Idh0Fb^KIft=k7K5VJRVL|aR7$&qdn((`+~Gb_k->Y0l4!|z+G&9F4_ z+XiI5X&g|-vmmpXK}UWX3X$W)xq1@TPa*!rOOA`&0Qs*dqiAT zXhH%4a)eS7A{z%PPLMa2uYBccOQl26<601M7+lRkL7Q!{G9J#Zh)`+kIvrJ7fl+ip z87{B1^dz=(s%?&!xm?lz%w>`FCb$UScBQHO^{dBKO&L`Z=JEn&0gq{{1yxgc;hviTg)S#bnva7e0>b657Y*m)}>;dxr5zH~U za>njs!&Vd272S5M_fj&vR<8HpGFH~G#3+VpbjO*aVELQATjILW-Yx@v??+?6x-LE2 zUR5co!u5Uom`F)nJ9%@n17|O98_vx0$b$nP-g8EmX_=D*0nytHxB`0kQxTU@sl71@ zZ9Z3#1TK_*`%x9s)iVN|tNIKxB!V=sXWqy!y%Q@PRj# z&`=9sV9oWA@_{-wOHdG-&=V@@RLD#sM&RJ`HloBIra6rj>@S7YUexQH>GD2d#dQ~_ zU{jfQ#NKLs>h0IGz=QXbPV&y8PDYY48|N6B$%KtCxvVfockTTLdEu4)r8{a|^}DsIzi(jYn0@qEm@ z__=M0AyON213G(XVd2`>6?B4 z+f~yAv)?FGLNVXDi}R>qFC5?r#@jKFbNm_clX&H-`+%X&GG=U}0^}yQP{}HM^=Ctz z$S|S+%n{W@NH~XyVLN1za3t4F_AzMA%ZN#=(2^3ip~-i20=+mPxXeqWCdOS9oKT51ONOWyptqUSlK;^_o>kT*u(Jdk@9F+2yh76`?)#{iiDM z>0%|z=;qmQKat({&@gVJ=0J!D$B+qB(&{M|l;%}@B?YKUX?~sHw?Zc8D0E-vMDmo) zFP5*JIdf+S^?;@kmC?TR5Qd)anIO-HFzl2Qq|3jr z($+}SqFh^Nk#TZ>wxVu{T4b}Xr=D^dvo%ZqK*y(*D!0?nrnc#^9WBlQ(eYZ12(-4V z9xg8HYA(urs`c<15OtyGkus|slBq9;1RsYAJEf*nT4bge5nM>U_=?;pW9djQylvmFN zaL#hajhKyT&BY74)B9Tm!pI{PuPJjlpYz^TKJey4Wj81eHTn;za^4^+V2(P%EIvTq zpY*z-uhZdP;MLr{*=M&C9%+d!C#|XTXvUFX2|x7{t&?lI0p8B-TsZT0XePq1RaR=U zI&>V4`Bw}uW~0PROKcIfLI=eiP3l{J4P`_8(;NI2bC#hpmslNkMg^fQ3kynFb+V6|yRwNt zzx6PN4vV|xiS8)OT@-@-N-`hkV-8dlmOH|2{V!B2mVAo&nsaaC;U}dbCrg(mL#YDD zvbrrLA3uJkkDJ+gm4PSbJM`IxuGG-1W|kdq?e_NWk?lM>;a2`-e$e=4LFdZp%hVNw zlus3@Qn=}TYcX;KOKB+vmdVcDcZ$*-$eP^$9e{Z$PVhoNT|KA0aE2dk%)OW50XLe+gdcg+lOwD_g((}eSXg5;7JQp@p?lxf?JRzdjta+!u^ z>{HI79jrSHhw)mk3gMP-Cj9?LcyNQOKR5|CmTvzyIEbz5yxsAz+Ye+~ zhDy6gh1nVB_2)UhAvIR z9<;}5E4C6!b>1s3EtHaNo9(#dCJQaS=PKLvzCf=rw_AgdL*K1MXH6D1?DuIJ8xJu$ z{?_Pvj82pxXxFw<*&toFlVJVy=(@Cr^%yQ!IX>X$^n3Q<+iv#JYq_~S^JCYh>2XKR z)niu~=DPx8#`zH%C$)7z*{hBL;Ajku)EGR;fzEPIVUNZD)0UQOW;Hpi0}Vd&_fZg= z^w#9XA2-|n(9leEC%pHsI@^A&q#kSQa1y?%K~>ddqwUsLZr&f}9?o%esKfkkw{gqz zaR0>kezjNCVuH)dG_>3dHDTWX^`yj@FEMUC+NqBt+8Z@j?^o)RE44@h^XRxGv0`5& zd8>%w7tD(R`-Hz!=>v;^f%C`+g2Hu_7w2tYgmja-qwB|11jF(zdb){KglF9Qg@pXa z^!k3}5gY@cGosjGmnVk@BHML6nQwz?N&O^} zdep5U^+~~GE3CkFpkiEv_f^I0zPdv%tPSn$rn621TnOjVT|n3sSyAYsQvr!F`(gNr zAncrzEQLnW-9d^8FOLxeeCa+ydA|~KTVYas_rY&MdL~pAZ@|V<0Bn92#I%M$0LW%( za@QL05EmruHT2S5mf07k>&ub4m`68iHB@6XN%NSZOJJ2(*%))XSS#qq!?@SoO@|lK zk3?+~k)r4%3f?nfC!(-%!{Gz)=SBR|qfmpV7%SUvI}^JU@KcPgH&d)e)gq6$z^~#{ zdF}I`H%K`I6zvITO-2RZ+)H%;2I6-6y24yX*iN0^_1)NJm@UI3xLt{AosE--Z!(ub zk89bCZ%sFyx!UiU&t10G_J7!8HB>aAi*l?cWV>->zL_&fTTv9jLXl4Kx&TULDagyI zcL;Da%uLo_3anjav7q>%2NviPsEhH{OKv7o6PQNH3)8)ZRCWKnT^Aa1CgEy2QTYUo zA8Gb?g5|?f4Ohd42nCQqZ8^d6Mc*R6QFjyfP!HM$VMExAJIW6BI_f76055++4Xl$2 z=S!(mckLStH~cEWEa_gS3X7+!f?I^5cc+XV^N`te^TsK8ECdpX(h4X@b_;10mMnrN}p|danrCNy>&=o0lxgT+k_uF;vskghsG6bu|LSQw=_M}~oc;@CFMq|yRDuC}p}Zma~e z!q1&mUV&JVxQHW?#5T|Zog{)fv^&C+eRyRoej)6(y581S3Ycr2#>>5scW~r=AT5 z+6RuuyW~RgfyiT`r=Vha!$`#a&0*ZbycAgs=^9l8d(RLaM5q`7`&zYi8`W(E*?qAP zyhJq8!#JqmIp`UNr&t9QP*K;iChoD%+NZR!(Y!&4x%qB3i1Tj> zh+7?oT`qXg2YOP@kvES=VW}`U`i6O{82jsG1h&y=m#QZxjDZjpAUJIH8|31#p7d6R z-xbdyRfE2pM3_a8nu3N+*g+ zz)(y{UJN0vnBM3FKvR10< zERz%XrZZ%sAWHI$+A5tNSHE#*Oo(O(O$E~-Ajk$b#quHbI3Mv=^RxY5xol_(kyQwb z3K4cx3}HONtTx@SY|`X6QrB)N^i?BR{`L(J-g~eVOuA&=11h80qmxB`aXjWf55teknhd@~B0|Y@; zqMv(4xM`2H-$~1N%J{$qw$6bfosVh>jHEm(|JUg>Do0!fJ%Fogl}M5CqDG3BP62vA zkyJRUU}OgTGCoGu*orL*Bz{5z|AZ9PA>*14EE??-rP`L%u8_kJBW<`erm4sookAY^ z&RPvn?o^L`wQv`}Plxu4$_!*S2VrqVSSET`Cz7iOdQb( zjRF@RE-PvdoOmRAke9OVz4iH^1l|3E5@mIxM8?lblNA%Dr_Oi>XejFg-vz)6>+}Zi zTh4ek;~fdRbwmlkqe90Gq|gbAtp*PcV(((RgcU2q2H6^YyyM~+URZ7_t&_p#s;6L; z6XzmYn>fK@&7M7>!I15Oc*Yromox%|l1Lt0xtvTTcfrhH=17qNi@wnZTukXP1_ zZ&)@G-0fuSS5>^_-2ho%>Px_15rivvMM91XI#(75}sP%b9%U{2jZ4i?vrLDJ3j=HbryUt~vyt|~6FJ8q7%1dponBz}pvu3U-+ zmst`6Uo>AfL&ZZo@edm^xtMTVV#grmX-r(OGd1J}T9)f}j+J2A9>a+wcSa?0S@;vO zCg79jycn&@VCh|@s7V6idAwD}51I)+Ens2Xij4#IyqKl#!9@4FwmcHQnqb!hoE)%u znOByks?@7qT4;mMo@^iKvMm@DJ{StiikU5KAHM4jk%z8+A@@2ii`s?y!`ofN2IulY zj5w6lVe1P=si`sCT?@vK1R;*o06Yaa^gQoPWxgBg2w+SFhHc!Xn6|OV`MLb0u zL*R;3ngiBK%N_>Sw?MtQf@A1yq}tb$r^d12rahgz$_e}h;7EqLTR}K!r9o3JBBsmn zcbM&9A#_V37)0GJg;dp56`RLx+U%MbuJ61uKSY9uz7Iolfy!27SS&YYD}8hhNxmDGu_zzx%zpnzFy470o^ z{44#6K(yPM8)}wO+GeDxXl*W;&k;j5y)B~>ov-S8k>qxh3?i3=#^`S2RV(qGCl&I% zG@YG=VQTdf`^(GfiKDr{heWh}6RaWvh<2tmjcAg?A)xfzv7cb8vOLoiu-DEL+Oi3H z*J!QGxBA(9m1sKp_WjrGT+`|6Ez@0HjOZQuN5RY(eRH<}6HH@zSmN9t1@vUn3AURG z&fecR_&I}h?JM+N@hsb{Jw5E|9iz$2Gp5UOyY%g?(Y?SfHn%SkfTH$Q5}L3+AJ3Ft zi(R(uplt8U+fBEN@_9~_)0-zc9ipEx*&NBC!zVs=b#G7rbl7?9EsF3V#2wF|r5*2- z)B-&62+Ek@5k|Df*8}8ylzJtIUYL7r#qFxw%#iT=u)SxM!h(ktEU@#fB<_C*tDM0? zX(W|YkC==C-BD}PFY&ewJ~-6fG>W3Lt$`U30&X10v=ckH)|VRu^;r(al<*o86uKEI3{5WfGN4*h&PZGL@w zPX_<``1ek~qrX19UFUwj-S&d}d~JF2@IH}odH(+K_4!=x{PcKuCx3mo#{WV3@jF%I zd!W$&nFa3iIZOPwk%^!3p!3Ok`vpI7E5Gy(k|GrB*h> zzJxJn+)y=M42A{ao_FDJ<)|G$YO8|O!5t#VZ_Zk>^~&hSGS}N^M9dV7)7OB*F*`mv z2>A-_iIF3P=iJU#0fDeZ3QX>4v@p9c;LQZgDlqBe=OLjd>a@Oe*s@!K^c3@Z!_)YV z>+unYi^SCx7fLIIe0L<^e&lI;V`R%?D`zDU0-SnR?=n_UpM^U!_WPn3riQD^>sbuy z2f(6%OnGCwq}l4)W3ha!yy*rd9rp#NvuKniQugE^S5OwrKuiz73q5DVID|*#H4Q3- zk&+xE&+NCZd*RjweIE=P{ZXHSZ+$Qe$zl5=0qAyEjKO)-GP;$t$2%AQs9w#V#34F} zyjN(z4Iy4%tfHz73C`^4fM1w38=LIPQ zgecag&O(vE(x0yWKA#ArzY$%cf(R^G+@mRtbBUHzOQw zgG-I98!^#^DYoL))fJ#e{Mb2NL5k*Fk_^N4Csc?lF^#{OGK_z$%G3+=~kU*#q z@r%SCHKbgq>d!$JI;&BIbHT)nhT(^%F2|80%O<0lTP*AOfW6=0Qf0t3vx6)k_ylX{ zn-X!=c#BOcuDQHc=^r8TPXD2vWh$gdS!iLE(6e4T!odt=w22tv#jXXiO-SNw;DalB zHZ*Bdei(7b()vU*A6Ta6t5u$=OplBo&zQT7Xibs+mFc}ZPmWV2%gNfmWhJ5VQMQfj zsDps{3llgfKv^QFEJoyI}u&-<4%phsk8$m;%wJ@>HJ_ zQdcL?I1<}d^BTbwTqV7l^q`;<%=YG*4lfI441!vO(`{LK2XWO~7tB3q%$8qE#6$|y z$2B4!gOFT6oH(Um+Y}7c(JxEysInG$!(DP0ZptX_+4bBy*LZl*-6n(ooUv}B=DmY$ z?ys8{yYzy+Bhug5r98#vu5N|~Uz(R!P`@u~!Twr`-wNfANOgC6g_X0Xi zqfoG`8+vtIW4S8gTl1Vz+;A@;wm9AwGt^C+AIy3p|69%8>nG3RoZZXL<}AFG8-tgk zhbFAzq7u~!?9N&to3>)b&wVGOzh|fHg1VY#{wXRRShN&Q>~@-;Ui3^-M~H>UJ~9b~ z2y4oG+{2Xwzd}~-p8a#fLH+R>}-)PtFCTyjVHFsAm;U$MUvEfA71??nM6 zsPg5n+xF;p1QP7*%g#vQAZXpt2Cti=L7I)#8p4lO&688JgITJelF4Cgnu3yKT&vyZ zsU=lUwn}B3rpAwTTRMxXqe_Bp(pk27yOd4w_f%Y2w z=0G#_SW`*eIYAjUc4Nm*>n5t1$Hqa%l{KUIbY2M3|n zQ*;KqCUT)qev3B&1M>+Wi=tb$NeYipt&~`0>ux9buGw(rN6fURI0R=VsQW-;|vD#LKQx* z$Dby97n;c`T?9OPEVQb~0R8#OO+uB>ZRgyyx0JMigpO-g%2p=1?%OS-W6&oBka3p9 zt42Hh5lD2&wbcTns%F&;wlmnEF~mejS1kr@+mSM$q0(oonId*-B!iT^fLpKA;Z5S5 z#=XQ6d$VRFLG`cDV@gre6(D#_r!m0tcdAzENk8To34Zd?pR_j2E zlJ2E_lfFYX++8(=+geu$-vI@D{JALs?3Qjcr)9;VCb|ZIbWKrUIHkGH+e051MWC8& zh+Vmsdb>G*mlrWAOp^$G7hd?L(+Kl|uZHbw1Pbtq;(n{-0;%W9 zPjZ}-i~vw8)BvibgDOX74(x+SoR?$*Y;rD8Oge3a&i0U@Jl-Cd1t^uW1F+b})p2PR z5F!Q~i5AT4gQco7SD)O|rcq2z%WCzSnVJ$9GD38Wu@fr%3<1~8BX@9>JOtZ)!YAzr zpSn%t(2?;_NPBBwYxt?Q4Kl`x0dIh-d`w+ja$v58J&Wpq5r9F;(>j&Lh5?Wwg){Vl z3RuOjn4O%gr%TY$1agCu+gCkfnPrA_4ic(#_1i$PUld^(a7uU0qcFyV(CNK{(jr2Z zlTZ(qQFOZSuT-&>_LatSs4Fpq0CIlbAjmUxz*;78{)-a6?HID48bCL%!8MZxLNjM2 zZ+scfblS?D8%$1O$oiu*6hj7`i0YA)<^60n7PrAlGI|MGPWh;h(8AI4d78@Juv2vD zuJ|yE`D&!Evb)lesbbluyqoxIDF#Fk)fsG!&o*ws| z{k*(B=Qlt1ZvEU|?)>~s+I0L=^fdgs+w#}t^GxBp2N%CLHMZT`T|2t{pT1!Kr>E+Z z&F*DuZ@BYuXzH9NOqY1M9BHX_lg^NyZcRGjWST`E+mNRnD={uk76%t)6J`N3fU#P1 zCh9Rki@~sG@23jpRZKw&5Ty~><-KHgIEAdQ2TGukhQJ>?E_MO46Qebq8`sxU>LjAs z_~F)zn`3@qlU|s^u5&@+|T#gYq1!{g{s(-0zDjJ1k zq47~Hw5sj*r#FKUJ%8ALtmY;fbW%c#C5`~xb2EPNI5P^SIUDC50Uv6O6gLXn<*6H; z-3BWHQSf41H8(=bH&)VNG#sTuaU1=xK0%E1P8-8PdU@C6=>l7&9nIHuhVV+Fytj4) zb%+nL8n2jgK_BL_8pG9Z0Xz|+N#8nhcZt<^Knc@#xJgFwuwdaD=HVUyhG5{(EPbvI zW*fY?(&N1a%^eDIQ^tV_Sa>u{Hy!Z_VBwmbjymu|!NRr5hdb~ub_@N=a6T>AI7G;N z8{=(n5pqXIv9e``0s{zVaG~1?=h+Ab$FtsNQsz083|ZF+P>*fxEsUY~N=BTLIJ^b2 z4G6CS-j3FQ9>fy_>?%t&kX!|4jT}ekadGK%sGX#;+|reG|52)FG#nVaMB1+Gg<4L# z#-%Lw!)0)&^tR(VMkAyphVV8Hn(yUpc0~E_H3%H;w`_t=Y!~u6HO%9 zyu|_f^0z72$_8ENC&I4ua5hrd-iRu=+-P9L4lF1=v0`N*^g$W76Kf^NKwb+ogaf&W z(Xi!e5w2I4@gI}y3HS~SWT)+lcE?(vaaM1%Fnqiup49j^l021yy2@)7d>-dRS?$bs zaJcDA5*E;F?)Zow&<3|rk1B(@qULzLyheK8!6^{^+9R!h5Dt;C&mYAy>iAGyFdoJ< zeSZY-Bzg#YTFuF*0^XVxd4C9~T|9_&JpTTG*9XUMZ-HQ|l|Q@53`V zPGFgIZyOSy%oYT=AVwlyi)dXa2Onq$28z?mV@)3Z@;rz?IU_>KPw6Tt7-p|5j0?%K zkO^upV>$mdFiFp)j8+lncyw)jmc2x!FB(}}XypTxu)xvI^}z3?!}6yyJJpr5`hha< zcA#Ol)f-5>BG5_;Wp=6o!#E(5e--a0Al4X(N@h#j0Fa31YusBw9x||R(i(kO;A;`_ zXk}Vc|C8JMrlz;QZt}WeQ|-h*HmxLf61oNQQylZKt=%Jv{@UnWB~;cY;qG~f&6QW2 zqZuV~Tm-T|sQm{du5qHu?!L@Ee*m$ua-j6~VG90EZbZmcLpVkZOtpLSaNk$eZ#{wA z89gI~0p61`Bf^@LUoXo0#(9kDG*l02{7RENhvx(An&trxp%hYA+F@3C1lOr)H`#$3F zY~e2^m^%%;&gB>|f?)Qe@3Z_!-0uuRYlSz%Y?oPx?E41Js4wK&$51)M0q!?VclE>b zGjqSGCy=lXUna*r&)=U-W%H8F3+WDHM!d~igwDH5 z=G4r;qPrGc<2Vr9E!8abZ?hAuvr0Y32Zwqg6ZEOp9{x3NHY%e>zKc!^*e1Kjm4wEo z9ImTSe+6+EepP2vK#AcZ_2d@dv{WV8WSg;P%an=x zN5UP_@*cRha|Mm-UHT3=kp1(mJtqdxd)*m@V2F$P5AM57_b23_I`#Iy#2AtLrG6wd8Em>f7*kPcc z&O%VQ-_3JsJZ86Q-Zz?1af~g~z0wCPd%-S8i6q>(Va7=+G?eV#lmX#UYabldQCaGP zvKavj#p$^UP)u}=pU02V#g~tg@o72xwUHlO$N`I8v)Kn_cEFPY4jBRTL}BNSKE20P zdQE-RNh@dS-oYabOY1EE7|a8G0!>`MA6scg!ogOX^0$Wgz`DpCaoB_8)XYnB`(or{9_vadwr*bGH zPba42Q|TD>{dBKkLS&LyWIyW^_gYVTuUH88=_X@4GJ{2EM38YYfKb%keG_>!y~opY-WY(eeKPn9z~+5Mo4kndO*Ka}Yf+ zCkvb}4*t)e${(d>ad{{J0ARxZfHT+{I$66q{M%4_F}Izz*i4vsd@)=TM1a! zhH{Lj@0sLI7FoVtb=9~+-%GBwUtQv?&-B@~dAbjg_GQG1?YdWW)|de13{6?MIOgf( z_V%M7FBr1WtE;9_`;+Wf^3FefUtOUOx?Ybz9@m?f*Ox!sJv@(A8(aKX=bA3PYXe&T9cyv5eEOFz;iRe?~St=fa$HXdVVw8ZXA!o-iHJ6 ztj9uvSz|;PV74w*U6fb}qCjte#0fOx=7o!Dy*G;9t~|4WlfDeVth5zM=4~vG+bKR4 z(nWejDcKKt&X=JcVcvJGycLA+P@nrzcnV`!Yi8R5EdItEr)#vN&|<=MQQJvvr$TL} z{pix07n|(Nn}(9~Q<{~{yhXg8H}c|D-9Vxi1Jac?6e1tJX2U83L|rtKZDyRj<3vFI zgBuM@!x1RKc%wgVCnGEYP5~&=c!X_WRR*3mj#DJ<01Vk#f|%Xp@h1Ya3eW~{ZV8}S zsU2|2&O?pf_0F`1)Q12+W^@|~0otJ}snWthodB>Ajv6i%+KDL|;nDmtf5T)pcEP{S zw05K>?MZvpqPUvHD)hWK#XSiVz-oerUF!1~(Rf-DZVVi2j;+mtnX8ccCL~mp&tz5> zgHCJhq-)8q0b3AZA8o1l$;tOSfCVoWLo7CV?fj=trV#MZxQXq9ShWNT_0)TPU5~&d zF{;Q0?&k1E?}drnpB}-NWow%;FH0c8>O@;k3d>g7QihWctRHgs%eq&HH$$#G7uioV z=;q;?un8fPP+}9(((3C(y|ip)HVdB79CU9#-rV*wSZR5phJnAfiurN}^0$3FfY5Ir zL#DYKRTSrUUo-(kZJ)lEt^oJ|21F_25u3J&NK`XsjHZ`<%`>k7#l}STkYrp}ioHoJ zhUmtCMa35yD478$GM|faOzvaXj7nZxXhv;EaEVD{T5?MhTYIbY*rPO3`dN1^F~54~ ztsYM3!FYckNEUjxG6gs`S_i&j~(TBfL5b$AK7c5pHJmY9Z z@{i>V|AdeSRg6vp}^p;P6idTP3IT@SbpOJxZ{o(ik$r4z= zza}))C!_)pL!y1DLN&u_T|vLDQBJD_0|Jn^Qw?O>{^JhU4Ohm1!Hf zRMIgnPlnM91a{IYKIPva*(lD?E7WW6N`O3FT);I{ihGK|$P?&*TbGQLb=)KWHgOV_ zyjBF>GsMsFIrIo=FodFrr4Y@mG!@Z#G z#%!?oTqRcLG)?ZR)%hvs<1@g1$*ExF%7U|a5K)MdYX}OE)%VJTg>`kMc=0vp zdi5LJTT@?Z+Q)}rODeixW9-m3%0~I@Mbql$a$1_)G<bqKQ(oBdnI27KCkzQ6-DFa*L~m^>-i4Z&yqF( zx=HMigCgppQ5qG3&+WzZeWT{Sv8^XHvgUb$@m1q9Z1-i~ORRgAyXQ}zm!!iF%f`+n zBjG9a!?^$D zI}qwW(FYsVzzJuma19FQ!otooVEGu7EVlh^n~~`sssy(@m~xg@l*Rk&$=IUdg`>K< zpZ&dTz_K<_5A$g)cz>t$5~wdGrNeg*N)U=QUQ;S1Q_1hf=~KEofh!+|k2`7ql5UD+ zzI(9DQ*MIBhU~A&s=mc(zp=Sx-0pZXyj>|{>S4y~Y|G#J!~y;s9M*xJ>rUpFcg>gQ z7&RG>X!CQfiu$db_I5r{y6Vo&>%jp#T)iRt5jWK%hSKe?!H}dbq-P+8>B}u_LIxRY zuL~rCdJ;KAM5WrSU2}x-M1DdN9W1=JxIR4F>pMK(n#+HvS-c2OIV*L4+c2~EhJxNT z7pOi?;=8~ke{XFGU`C7KOPAdfz~`{ye}1AAK=st_j}DSY0Mk2M3N}UhfQDu(^4Dzm z`l!T$l82XP+nRNrbn{y*U$GJ_bCg^#!^&G`a(rj1XB8tVyT65P&B+ZRE=foVNhRTQ11id z4N5QltYJp6gTo(n_pl%Y_&8+Yvg`g%msuuYGvXIG_G$%Xd-tav)=N$}6ETm(rTzZ= zWmtOgdljb#MVKX19cb}1>3&*KnemKG>Cz9MG3dVhdD1=pD!nA_;i!cuW6U~H8pzZ<}sUSyRAk1 zt8GNj(*|_8yEmY?o?B>VJnz^1ACbgZRt5$TM!<)rPP1SP%0idKdn80Yu!a=IqLn%t z2DFL6tn~nsApLTM%0jbYsp|2~x@a!~lS9x?GXlHZHv)AD_s;$of&9y*TG zgffe-`hNxz))1HGb6msV_IpHef68+3&1qb5Oq#@&;h3}ozTIOn&g3x56ENaeAj{_L zf2qocfaH-u?EuokUj`n$jMAUNZt%)N!BmQD-eC#`6zDZmF-FE-r7=WaVA(+e1-UC! zWUz)_+h*A#Q}> zO)28b{RQ~$`iujoCo?H zI-PDlB&`;XgHEt~t8rhEeTAy{>5a#FPzfxop>e?WB$g6?lL2Or<4-f-@5t37_p7UK zo}pSM`ovO5tTn3AEIk+8!lhZCAUsz%R0<2J5IuGOm1XmtXpjD8LdY^?hWsDBKiDHI z`;?ZWM{=KMncTtHtl)g(LQZIDH4Vm+9bI)l&}?KaE6jQ`E2qCZE2KX^_$@01)z%UT29Ajk3)I?sQ00s(i4=aSnh&@cpWQSQ;SMj6_`0?p2 z)nFO1;oI_^bDl8k+;g^!AmQ+SS z;B91s8?r9zyN)nTLOTQDkOFNjMtZZLq4z|w8ii|!j)f-vhBKoCy2{DJXaEz?Tr(Nt zKzsuL#^TDd{0Lo1T|wfb$w>)0o&>tu@B>b5$zD><%Vmc8ZR!4*EW3*o%rf{E1_6Yb z1|w=JqSN87!Ohvmrm@eA(`NeTN&3fE7cT?Wkg`33bZJDJa!}mP0gdFFOt0t`<${%mopYFD0&C*hk;&+iW6#$Fm?rU0L@cK+`Fkq%~6|Ns^9CAjcZ^ zjuBaGN`Ua`;&#kwLrZQlSOitqvvM6&c%@qJ)FO$%3pllBPz*n_Zv1QV?`}MqAnj@| zkPUb_G4k;jgZa54F7y! z6(fhEOiHKbBDE;0v*@KS6h~G<@?ry%Ea1wArdDg7lT#%Lw}@ib=mOQCrk}@K{<^10 zHyPm0Ecm>&;l57EB;Z`8H*PDsq=fCyt(4_I6!(sU!^j|qf1a8>&CK3p1z3}JB7NMm zwhV&-?7RqbHeq8xMisf%saP$n{#@p;;&Bi&1O`U5Jh?55hO*`;{#r0ujs!%LDQT)! zy92?@(Ck(JC84Ip*3A8ot*jM2wEr8_A-+y1YP4v9oVg~e`A(5#@AEt<$%|E^q=k41Y24}>d20(V7$%_sdNMkyPt|>?i zqBIMty^fuF=2@C0tM+rASezhW4VlCY064qr5y46x3Muj^?&zFB|Drr)ji{}d{QOVz$$IJ z@{9x&#->|Vc96w=;*5I_UI-#Hg%uvoUzWQ8g1tri8WQoeouQ(pzlj4!#c1pkcU*i%zcoq1C76gtl3+ zhv=lZ1)pq&0%OSqn@zV(EA;b#P-ZeDKTx(zXiV`qt3}(Cdt;$MGnh-s(+Gb%)&MNSKZ}`GJ_X;BN#rY%q=+rJ_je5wspq1 z)=rQ)YS*AI&#EBMd(xvUEOg_oHCOLnbWi4&`~CTbH-9QiT6KK;iGa*=^#@{q#Ni#z;MLHe(O%6Y%*HTT3HFLX!g~eOi$Hr;T?UdJ7Ulun zkP?oAMZXtI_qGZLJXYHiA*QQ$FZvuO-swi{kB2$Frl{|P*FPk8}0x_vQ}QXq%K@y6c~|UkdfOeUDG)x zaxL))XBF2CIPr#lFSolzEhXSC)cM!oMwl&~-`$#1gKN2!buFXecnqNuAMmV~a5ZD3x_!oEcJ*Ys;_lSkq%doN8Gq#cbq%2N2Mk0UCXG|j}*;T1SHn1 z@#5>1s!|#5PQ99sb~JJN-nQMIV&me}QYMvDa}f#W^p2nQu&GA2$b%LqhiR#D3>>$S z?pN`wwJ*`@9U&q0)hAD^&*a3L;I{$Ikg#V4J{+EN>+QixUf2yk#)lJ)f zXv=>>7MLY;N`>UL?JG1e6lb=z5`h5M`mD4+5D@Dn)GZzE5}fr~Pu06~@K_xUM ziFsg15=T?}8C*;%Y4Rnc;2O4;Cj5RXritsz)>(q*FyISiB_>ry)vlLHfPc+EB}w#PO9h;%N~V z7@(xZ9Z4AXv{e`EXPU?x#-gUQpl`?fyfiW(GX3D;^SQ=|I&x#lb6s*DEaR#$`Xuwz>X>)%m49C-H^X0Xr(q^~ZXpB7g&WiU?%+ zphwcZ9HN2}x!Qnj?SEPw5aru4Z|NSSYII5`q%BKc1)8_Ly`K#3BdxpFg)2}BBfTke zu4$KG6J1h{2l7EH)cX<)^m@<1D?7H&Kz}ifXKzF*u>WkTVrN_@@oV(s@vm`=iH>9* zJ0bJ&>tBUP#$X_2z+cz@L@X{xR(@EVk$o$%2TiNJqC`0tUl|{lbSwTYHEFacE>Q%Gifk^{4E%ZL|=ZHp9heyqhRF7sYO7DvQbKWGY_ItAQ?D2vs+-Nsz;|8?ZDOY2ck>3XVh}+;~RZv`#8)V{j~u zd|w^Ln3@p9!IszQ3obTKkT4EEjoIkRk<$qz!YQ1^Qe*xXp{8c9^G^H{Whc+S@HCf* zG5q`Hn#)W*O2&KJ2!`hhNP8kO$!VV3+bp^Jsw^cG@r(9l+<_A3ITFoYFb!g+vI*s{ zP$GYyN5%mw{7FlKwQ>jTB8M^y>2RUF$E8>lmuqdO*63Z1lU3a`?bknRcH<+*zU1n* zai?pp!s7$94CptIKicI2Yu^i=Xf7QEj+|wp>nrKOXa3GKc*@x=Vh;5V8JL322ARza z7q+FCFRv+#Nf6EcNd9Zi`(WK)CxcT07mR^$8|1j}3rue=gq9?S-4;PtM33hnjpzftKP8*NqoN>3()PW;Pbs zDek~OffnBP(LL7&Eq>FwbFC~~BCI(utd)15;(YChxB9M?6lmD?erX$9&m6f=Q-zwcb(+EAUH5`w>lpdE0sUhFb z?uGVmbtTdmhQI$I?3+~2XA}F^*i51Nucwo(iS@r7?^;tYX|n~9pmqkKr6Z4cYJJxGZ9?4lyIspf1V!L?pc1P!nu#UjJw9~T$o(7*7NuAmiy;p}i zb?f;$V0=@SSxp+Jqb2R?;Fj-inq4oK-)GwGu3uIod^U=W(sI-=oJE=nO%0aRCl>yW zL%UsTiP!ed+Dsh2ucx1@Z)zjkbb&dZMmUk@_dfFh1N z3yzm9#m@OCu$}RYwBGuo>Ex%S&SQV{MaA`s(k=LR`eqgrAPkuN`~v(Jl!oR9{&V4V za_cjBU))>#WpC7GEH>7--N-z;eQu?mNF4%~*1xZ@yAgzDcw;I5 z$bEh#z>jLuqD9H*zyh1E-f=$1q@TAZ5_?QvDbHw1-%yRW__*-YMOJU(ZD=gFj+#ye z%rRA zk%>w+PpVQ=+I0Se*c~|@`PWGSnnnJ=8rESNFI!jXdXr)C_5qu@Z2FpB%Wh-yECx8W zT)f*pJ1x7=N3~G|9L`F)j<}(wql&h$k1ptM$WVs}msh8GH%R$pG_EuSNVjap+YQex zFVlc8vQ`Ok)$`QyBXRD3w(R#y7rXW@IdL;4SgPHLz&e1KWLW3Ly+#;u;jF?h8Q>r) z7_GKE*s@%m{nJ5%Z&yk;9~KV`{EM&;+)BehajbQ&tNAnsP5PMcVw=ci?~fEMM)HFa|Ei5`@M$?t z6i(zpSM%~%zzKaqOj_d^pJrT-q5aOF?uHzrMOfhIeOUsSx2zrq@i~oo07<@*m#B9b zVh>aKcgwKWpno0M{G+4-4<=QYf0hm>keX6#9!x#C)E~Xt$&GZbMxCF}JN|9nqo~k@ zkrZBkDL)WA=_xP?!j%l1X4R zt4nc06Uc;Pwju!bG3K)39B1p*~jSquMv|xayJr-lP zO#3-+7Jkj25afj(orm@L?sxD0ZttEC2_MO2L|i+(Z%}5i0&8leZ|0>^HrLp1Ypi9p zeW%X=e34f9Ob3RI9-P7B3OhJ^kRU`?cEfJfPROW)z34 z_xz*fu)E78BD_I55>Z?r#Qm^X2*#A{5Ueh;DxGs0m|X&0cg#G3?DawZIX6z{;>{S@ zFkKYpMfyVFgt9d=-bsET$*SF=b2B;7gsFkHeS?@=8vNUS1aZ2pww-iMb05D*>Svyq zLrR^IOJp&1)n_@Q$ygPk*|4~3MTm0}sxO{*7D!Kt_bgoSb|{^(^JaxYR_}wsc+}@Q z0HE$rcHp0P?zLZ^8(=pIc`Idg}#(mv5iOM{N zr$?FXzj4q56I|su)F54rT)}cL1Q||)WG^A6S)c^%31W2BYz9R9!@;#YlDlojsU;a8 zJ2=9#7GQv9^7a&ZHRQO?1~P;|6`Lcdr6t+52F79Iq*%x*&#W$mWz~^_RF4-XE;E23 z+K2ppIK@0W20F{P=97qHV&{HP!a@}-J@(W;O4OHS$cV&Rhv(vtkl-1TaOMHc9K7Lp zCCV{Mno1Ny2b*@YUQJDqG?6{0VI}8-#8)tf+fr{EWI^rh{SmI0RkxUbaTFBd?U@&_^0)Y86sM z#2q;ma$h5h3S8Z8j-AAe*xpo8pH`*M^Yv+>!#CqW#W`v(9M@ChPiUiI{Lyj$2@ z%G?EqnD7#(;aRXX1+3`yK^u?*=N63 z-2F3@{yZ?T2)yhzydnVp(ftkR#{(z1api@zc9x+E zdcZz50v2vRLD2G$bn{W`U61nA8e#LpuGI||7@~5Mar45CpMu^!k9^NaTz7`f!o%sL z8B(N?#MZiQ$+Z zVoV~2Oqs>xF4;NT(lhByUP9k5FAcC|YXrvCiGd)8`p0Ugcte}$_5`G1 z6h*66t@YIjECp1oI9U>dPGEYqBF<@Ghtb!4h5&eU;E!zI5wMoRl{mz#!z!CKa$Tc+ zFU4Iiy!(|r0TVJT0dWmVdpk3MK~67IMx`%XJ&XhOk^pp~a_=U=+QXyUr2S?NJY>v5 zHpfzvh|Z8Qrr2lBSoH)0nnVMvTgfllm&cuUopTuQRLM6OIo_lwQ>LEj)`;@ID&TLD8dANbf z3P+mpu!>ut1Y}WpNmq{SR#Rs-3X@q*D5g27v9#6p0%M<$g5^A&Lb%KhbF!fv4nW%_ zm1a_iB(p(UHTpZp#mB{^Ocf!wKehKk*P-W9NUVDR8)1~WXe5XfKQ+ha?R;8q*6Gu8 zl_=8hvV7ecYW_{;pv?Hr!SHUPReX*s?E}~7&bC>+=2g(~OVwHjKWKF}1d;wJ;h^2a z%|e+4U()obd=l;VKPbWUk1$6z|B|6(vHxYP&ff7~!Tmo5)N3BAq^*{O-BY!`C2*&M zdEweEj;!cQV-1JowFXH=N|)yK0uH9XI+8e!f{sm@*4KW$HzSqzd)&ktDH9pAwe0-B z<^VCi`GBdHGK(*UJv5a)Rh&ef@ zQ7s<5Ua**8AV@6IoJe27!l(}jlU(eZB6tMo1 z{yPZ*0$qp6neHE-d@1rTbH(F%8NQZFiEgmObd`U0BAWn7WLsNbzYC8m73@Z>j zs6VU$QC5^KO-nSEnX$8DZZW03YMI!M52|N|UajGj^B5oB2mXa4Da`nf=^`hPV1C9b z3RFGRj*nG9e+U0&aO&gyS|_3IWnG(&`v3g#`%&+qyNvijZR(+Sm`O9xy{P(>oqc=e1?*N}!Th7SA4I2=dj4QcBBAFWK%(>)I zb9~e#=^L=uYz6RwhK5!WYy_C$rWC9E++WQV(>)9FWp{c?Z znL&U?&u1Sh^=V5Qs)-25wVO5p5brU7uV|Y!>axUf@&s+V`jW#y;z(t>hQ%MEzdL}Y zULF$OU1&bQc`A!W@KPv>eFj_s&E#uj9=&aX`ufL$j0_YTmi1%#^EDd44oWus7AC9v zR=|yr)YWKmx>x=WR@#oJG+Q`QO3R_64HlsSnWoHQ8enu$rW$>d1%Q#jIZ3t9)+;qy z-s$PVNDyfz$l!vIcj7ncJ1Azp6`yFwlkX<`M3oqi=r(g9)y zk`ol;87EJrYQ#QdKpgDdu{JSo!4qH_x^z@?Vc}!778(?^&^`e@DJ=9Fc_Y+XgJq@} zXK1kEAPUlSr3c50=zQUw;@qM3k8U0k9dpSnrt<#20Rx~cg3}_~DYuc9Yz$T~q>4`N zdl%C!t;>NwE&UWWS=YxY)t*6=_%!e$GR#Q8MyLqIY>uuD6TbysAdrNmd(S+kf5 zgsPdxpOA!Yw$0Ku9W|U8{9S(VSTZMnBKLv2=7vG?Ipa;9j|t02;@5X7B44oyYG5!b z;^1hk6}4yct07Yq{yfH(MHxb(2o^zDdo7~n%>;_7wnW*aSS?$|4HSl^mupmr5RRnM^tuMp(jG*g-_7}KtF86m-qypKCUB(@$ zInY!zw0Qf;kp<`}jDv&(}`gHyO1;R~}xK32=WgXlfhi zhYJDRhR#L3Azl1pa$&Yd8@Z^dQJy-@lx7Ng+SniQh=(F_wGWz7yt2($UJ3?Ok~60z zSRwPPP&V4|P^m2SRA(=hlE1}~zZ8uM11>q& zW(SQ}c-{=Cs?a^Rkh0=0?hp&VWKe~~w3+5}I7KOp5C6ufJAWFEB9?=4Sx1GWA8JIH zZ~-b3y};~IU4%EZCD9r(bdlnoL10^1ixoexN((rpkwT}mRI>8sZ-D|t;LNA+q->!~ z>%nO*VnVK;=somBRa;f2hb|^<4X!rs2~pAV=u=U^NBL-9b{BN1LpIq;^7%^D>Do%{ zxVmedl z2>#>iv1cb5CBD2$suWbmJ4P@{ zkzk2k>+^sRC>8)s`qDRW^}+&%t+Ht$iJJ3R==|33ODptIo6g*OGj(gNO6Q8hm5Pue^<+>X&TJ@hum`w)jDw)H2@{o&3Abs?sr#_jWa>{6v{v6@x2%D73 zhB;k2l6ZMLCOCS{V5&+wt19hpNB9>UX}cI{rePliP<{n>Qeq_zG58G~lO0`Qm9_Ai z$XPsC#u`lDwjD`fZ*e!4>d|I4@7N^+$W5hZb#K`@6PCAxk18-e$8{G(<9dMhTa_G;UqsaXn< zbJQ3d07bfH(CIVOQk?~wGQp!6d%KPLKnCxGcgoB7#UR&Sai7kHvjL!`>SI&;J-sz@ z_X(GaBpN?un8d#f)6;86v$)ctkR*F_mQ&`KSQn{@;UJX~jV&<5W@yeQ3h(JOdfi*p z>{s^A4J~{)@;-y=Cu{;|ZW2Ub0h`xJ6}1`L z?3+4OI@YCmRL}Q6bIN)^rVsVF}*soZ&s59*JI%cG^CElg_&- z@}RHEbfQ4SgwEHN%>8@BG6c_%V7%@uxyY=*tMEVtJ%?S|gW&{N{O=0(oS-d`SQL(I zR6eBl@W>>Uzs8*~&i|D_COy{O9IMv<@)o21sP&HE9|GKSIl)Kr%Z;KhTM zYGpoe(ka&;?$Jq|9o%Ra?Ok{8)5IgsGxm#E`uH;5cq3MBZ5l@z&4gyIDhLbgHa|SV`QFACU@6Cp4kH%Bpj?sCDDhek;+FIJwgxnrrkTD4V^o+-P8Oq}CV@sHV`LzT z)Se^cWFU!CE~XYEpa#*7BV)t0VeXsK3Q@aElVzrVt=Yv0zvVQ*0L|)Y9S<>Ar)nB4 zC{3yAkJ9eUD~FH@magoD0SKRim`%jw9UWaz9dRfP_nAV5mWskVy@j_7qyL!k_J_if ze-35cBgkTs?i7XDFZ^*R-QF~7C<$kK{@Fps7G}gVMG0aPSx-H7QR@J<2-~!gtFFh? zOKF>W&Z{79jc0((MjekDwh?VUGbIIMJg!`bPm;ZhUaZ*-c+MQl0nu{Uw-+XlxNk@X z>=ea?ut+_ff&1vTPZuKcPT7(d$0=RAuZ}pDA0Z%@9rgr9iz$jHW@c2OOCuS9K2>SI z(;rFjwQ>ub?3E7?;48vg?$Sy&Sy@Usjkgzz`OYjr&E!Z4{f0wJxB(PF8ILy314px) z%to-<>Js*f*gq)f8pIIp_ikbgkjt7~Rc5{{J+z|6dwHyD{xud2RVqnu?X}PUQ6A+f z75`(z$WX+q(+HUBnpJTn5hiP*Oqm6v+5Y;6hKdX}YkKJqlR-E~K${aYIj3{#S-1eV zKs;7;7U-tY*)_=W9drS9dzS3I$VXfxgJSyHPA!t|YfOcAMPaY%dx71?Hv09o@YWVR zYr@}f**>2qhpF#8sz-fUWXGx1_kyv8}K zp^FrgQ6d5)hidSthIbihCXH1f%>G*hPN3?kn;}Fwb!@yWK{KIG#^ZH>ez7 zE<-M0mapV_FqDv;RuP5}fl`O@Pg5P*y6vrwosyAZ&?E`<9LREs^8NyyWOdO-3d{D6 z?r4!^XA$PGCwn?rc$@ZE6pBtxTy*rwhJ?+8uVEDpn#}^!8z}AUQ^;5q$NX-Al0}{R zaV-p-O@Vky%lr=x`h3;t;lU7%-7e4-0aggaa^7h-+vC{G>|2%S`gjrX;({}wzs!7J z0VwQDB#1IwfNN=XoQTS^C9Y*a(1t!{DYUiVp6rr?VK8jh>RPFJK;%Zvy zPc~7%xLjXzyKHLp?IQ9~{;~{^aoY)Z;R*Q#v`$XzyFej*KvtJ~3IH6A7hWPoGuXX` zHva87f1K!0d&f{8#>GTK`b(%42Bzbk4b_{O;nYMC0DglH{)NrE2#CrNFsxeui=N;M zp+7(=85|Dk>$nLn+~C+xJpLr3L|L-`L`knD!>}2P2;1sGrUx!P>+u4dW8Gh$JAMvE zvBVm~Jx1SS4`u8UlqF7j{Q)JHa{iYO>e}?Yi>2rVj{H(PK<|wTe6dv3gtZ`{7=6;5 z8wJ~HgJ0DIN7q{11P2`l&h}qc;DXBGS1`XOUK}$fI>=TL6Jegn&4aS}62DnDH%~1L zj)KE=J_HKX(2{8yZ!yb7Mi|YpcFl5x02~@dqOns?ncIO`g5^8mIf{7zsu1lWnOLu~ z5=9E~fCOmy2~?!z&9XV?sO~!4Rp$H`Saqkw{4;ysVCszV%8|b%Rr<|?HLY-@!eg%! zPKr!9&3ySt-NdF=*FF&mAObu=#ud9Na|={BFBYw6lqc5iF1mDfYoU ziAY?fLSTrZ0w}Za@FJF zWp2(O8Ak3{bUJf$Y$xe@aHl4x0s>A3lCrd6nUpv!f1UXK5uUU+i zO>>WFX*R-Ut8RY|Tx_)U$F{nAEM&Xbp$~ndeMY|PZ_&AYv6q%IS9Ew|D=t9N=$Fi* z3rS97DTm!q!L%ArrC=!PBy@ZDVNw&}0#)b7e+z`@S6 z!~~*SD{$3MZ1z#AxZ4U3W{r;1iT8~za*5qEG7BJ4D^uv57}O!~+Ub14 z^nCkZy;C!^hl8k>mr87l#MTP%&Ve019BMvA%xE2E`YE8+f@d4|8bBdzzouQWSTt5A zjxxGQYOH_DLt=cv#?8I9WZd#&Zo~%OpP0!ui4l!UbNig9VVF;Vf$iw94~KLgnQH4) zhdP4e)*lEiPSbX1%lU*nFaXNV*ntOk3lsoZ2}AFsL=}yKf+x>INahAms|krhRM&4TYa~ zN&4eV{r+}8p{ zRhn(}-WIGH#(#ytx8;b4a=HRNt8hmVyKUxSGka}t0{$S z5nUrsVr#8tHxS^H6tibxAGqSQxm5m}UGdv~x%9=Fj;wV@q<8br!Q~OW6ZLeW9UNd~ zMD}^w_ui4ZV2n9m`hDYcqR*P|)fO(F|IAPhqwnD?ukXD;J)U;)i25%L?G@m^5*VC< z<%2`BHzjg3~gQuTpmVOj^g;O)68HG z(T|u)+6Hz|XG3m*7H?*4Uif=~$Sse^;RwEF(4gmAW8;kvau>N*hiuaZUG@`^&B_u1cS6h~Y(n=MJ_?_%kXZkL z5d&w(Sb$e{0nM1#u9{(fI2TK~5d~ikxL1?VY#(FOhYBUQ`Zm58Yr3uL6{W8C`i)xO zUrkwg5O2|_9;H%R7v#k^ba|d70Gw*?zh&-2%PcsbMo~DGl|Eq4rt%>B=lC^E>V)_8 z9}!V1_O>IBD&ox~Jy`)eJM3MhCm{6qv-x!hReHJ%j$r%bJSRzK^!Vb;_{FU_#f>=S zwK#JsXAu2>9kB@Z@y6|xr*?C4F;IF!!ei@pGp(RGuHG-PZoqFAzFJ>pJ`t?UDk6Z>&S@NPp)(a7%) zI{En)$nbJLV_tyt;YF8|6^XC#MkO%bsh+^LLP?XIX}PWgbzgBQv;k@l@h;eAa`jhHJgW4Q>l;w8X|yHXdbw2OZ@C%HO&^rJ^LRt6__$>ghKoh*G^NBSD! zA47t~0tR`sknf0EOYX5H(0pk27vFONshIasZ++QwlA4_W1%lwp7h4DEj314AIvmkJs5`+1E@5Jt6l zQ=+m5{;nD07)u4sckpWB*SLq^?763Q>6i^gsiPq^q2-~^C1jKKII05AXZ!nqg;1O#C>4OY*YnJZ#vyusQqyjf8LM zR}JvA{E%$`MKtNAWs_qmEanvR3*)9B zTPN$M$c0Z%&rjhQE#!kk{NdPa9sZs!?X~W zjdE@kn3-t{W!Tz9)rnw(uKG^ehdJFJ+%MHxgA0MzUi+~k|0#tUj?<;YgMkdd-~2jn zjRHp0Iic}&YbkX1`JPr6nGYKM3|jMZsnWx>*cg}Uxm_6NEm|yKQd?sCB8W#n!B--M z#TI&*9I8HXyW%uUbD{!xg@|dTZ71#P9cTFWXSBw~T1BMgpyqL*lZ!|;a-%12P}|j{ zro*|a#n~Dq+PlnfAoFp09Z}wROA7n&SjY#2(W|uO%lxn#Gs%U2=N0`8!mD%edN2&7 z%A)Xxmf=>)xAgw*t&~&tVPMg1XY?aV?Dx_yiJCtQDj$mH2{o8%h$w^krZz2}`g|8p&6J}#?xd)ur-FZkX z7S4C=>@1D}_kNkkX}y;z6ce1efS^6!DtS{KpWbnPj1wbnOZXnq!r*0M@(@c`eV*Juawsc=gjh)AE z*u(5lJD2Ot6`3DxMFpat-G=3RNGra7Zb;YfUVhfwUH{;DP}mMx2EM>Wkl3P^?Zxyh z=|S(mhwM)`A0j;IKT8ca(BS>07WC*Jv?PxmppL5nWtEH6dBWZ^4FC5rcALZdfQU8; zG@7z6f-M6Kq%TsGov-XBH7#?i*xE-LU+}0K{%zfbgkTU;t4&h$)_Rk8>Z9ex@r<5^ z6`K`YE6RLLSf)(YTDn4xEFcER#a-Lg->sAH2#rY_trM1=0zl-86FuQi^4sfR+L8-> zd>Ri-mEpds{G7ibQlrHUYFYn>uXAb=1qjaQ+O}=mHtyQCZQHhO+qP}n)?F(%m8YbV z)Xc;Df~lVA)8Fa#k=C30X{G&a>_VzzBjNkaUApg@m(zC?fXLUrBw2R>x!(Qzs@s9F z>=Eb{`_A=?zWf9_OaBAbj%G*nM${4B*d^jfex7ck^daooX4+DLTK+XhNfx3f7wzru zaCfF6`M2CFUjmBqAgD!-XO^BkR5BU-b<}8fL07Nf(u2xxWjon@h<|r4FOUE01HSKb zC@8E?&q@|iFn&{t@$&M2>c}N*4_i>^0RY~v0040Q*LgNaJ2OWUC#U~x)B9LCVT&j3 zyZuDsanLQ#`y*J)-GYw}T4_9*a~f?xMKH&5f&p6t!8Xd|W8d0_4^lNFzEa=%ZHrnD z`|f;_ze>~LKaYE|;31u4Y!DBkb#+xX>S}0Y{98?(nj}XL)+@D_-aN9ABaM~+WR6pn zGn<7}SwXV3Z~u7j2Z`i+?VXeumJu2MdAciY;H{`=~z zgekqK1Gs)2p;g}L_jk1PQaal}8U17SaciU78g%^px^nCqpRLe1*{Qo}z!4NMUDr5q zgXztB0VL}g-+y;aU)PJx{|}4J{eJixh7SDkw^{pXs7*9uk5-auuU$xe&gX{F2iy!Pl|$z;~Y43b~`pt{sVn}jHzQXiA!(R;BV=K z4&akFCT2JLySHlwipirTY`G?x9&B8kpR|C;DPuDoJ$6K=Ivlm;>c%q>x8x)g!k3LM z{yhw=ORomwT-Ko;Aad=KD-R&ViuTN*e9uMo+?z{$cX`!{WBixFO7n>Icj79-zND_K z$2=_&j9uha7UvgyQSHE2)ORt{ceiG(Xej^v)zqO*f$D(0Za3@98(!|pnTd|hn#WRf z9h1^W%EyaM=>R)}ND1g~sGf^qS1Ye~5Pjh@?aQdEU$16zJ;Hs_EC8_GDj*O1xn7{X zeJX2P*<4bBSXJ|wo+ohnESkM=8wxUE)?j`!dEYC+UQ{agsqM^BejGPy6Opj>};5=}l_5_C79c|rB^6y_vaj%|TB~j$W)_*cGl$GXm zftf4g77?nn^8%9ob*5B5f>QEo7=jFc6%oOb$2w%r!+%5uSXFD@oHBva1|Df^Tewl1#=zKtdTEeje8BM_a zW_}i8hM7lEmDt%!mEAUAEMLbrmq%b_BW{Z|?Ht=)Moz$M+qW zPuoTywEf07moqwQO&ttzqi}rdOIUe00&3b5Y20(4^~y3`YzIjAC{q}0xLc>zxwj-( zd+_xMu;pc|J3Fz~YG}o1waQTkf=kZ71kXW(1LNy#BMFKz_EcrE%AAheYygM+L5A#n zp3!6e4jwgV2!xVybW6EyWaa`&TR&XjwH3uI;OE>zl4aNZ-6wZsM%ycL)4gu7B*!@K zNq4(4jvww02WakDGorriRp1{|K&dc6lNcJ%Xm^>~FLAxU+Nh+plfc(FjgD>GO<5s@mfZ5WHm6lnjGsSe}yyX3WD-0byd6ge%lxOzqM}KJVGaLQ>m?h*2XK_S{@{(M% zyT5t0T2?h=?j{{qR-Q`iU8PWpVORLqw5pL39znclbW@UMAX6XGpr%|7q zn3+nca2jcW%?{qH&p0jY`wx%SbyVDr&M=L2IFW@jFvjwj8WpdYyXGHT<{)To5bcHj zQBA}Y!Fj~`l5UYA>wgjirW#e#>dpl0Foqa!ATr6>CV@6i(4X|xKy`t`X8danE6{k+ zy#F5RgR#jE2uIV=O=8^Bt=z&}Q-|FV-%crsb*K7E^6tc@2Phtgx;>!0A3Dc7sp99K z-Bp8!b#KT>N=Z`+2tl+h1n{LzBE+9SwKz{s>L@#|mM$3F5pvyR&1#4JXMwuWtV&Uu zsU*Vnl5;4zSev#szeQeQ>2zweUpf-3q(C`NWG}E8gpXDV{S=;#B?0x+{*?W7d@y;6 zUlOqkr(KQ^^SINn5dBzym})RXh4qh0=~AL~XthHwpcDm3l~kEgc&lMJ%>sm#FWX#z zf~}onfVW8?chDBPCb?s@I-Eod2!TPR2!*SfF!aFyn;j6gYE&W7t$F<3F`d+UtGUOz z%@nz;Wo}M}K;jw!b7nb@d<`CDnVu*laEHBk)Q2k#S!BlV@;pYF(O=ZEAb_Ia0G4|! z<2=VpgG$19Lfx3x@*yJib_|?O%PI$ps~1ZqrNSaO;V2v2Ks>uT0A^xL5Oo<49wj^I ztrKNp=ugsSvj)xi;iG@(>F!@aZ`-@a?mzM*1yCrTE3a!O4f!gTIU&+V9Z~@}1c`Ns zYeI@<>@g6*>=LUSh;Pb7D)l^5;x>+2s&05_o1&kY>#Tyc+%LJu6+6V{qyU56CXKK~ zfp)v8M!}7ckhKK<1z5-15(YGLFY%)F+6SDGk=cnavojD7Sbh(95$#`(1#5l%bW%a&N#DIxBehN5THYA8rUFol`c)y`dXBCd`g{L)V6&(Zfwy z4R^hT+E;KcmJ4Ra_}_;9XLV1as`)R9DN|<~jRC7WJI5#LZ7CyQTJ7|sn&A_jkgh!V zRT&r}uT=@&m~UGB65qJNpEKh;8zM8sv44m3fjjU;T>%IvG8sqmG<%7k)gs`cPl^SZ zC&84AV=^^XQ!uU39s_?aT8?DFXb%y;ugKI3W+$Cw!5YxS4mW0w5&9CI$j(;IEp>zb zrma=T<6wux&TlLyM{$Z>S{OY9guE2`fPAUO8fPwZb8z8uWy3i$au-=o$)KhJxsGoUAgtAfgWvmv! z*mCWWK7k6Rn!mf8Da<@Y!wGl8E-<*IlQ3yr2Sz$Yqf%1mk$8ALPp2djE1P)Q;vGmQ z0)m<35*#}PiP@?h;)nUr5BLW%Mvp+cTUNV{m-`eUw9k_iQ! zE88^N5TK!Bb|u(2j;_+xLSH;CoUp1r>p;sCP;38ld+?jrg zUi!hb$XoeVi7x<*Q-cUc({(ZO(?cI5n`Rs4z-yP4m9JoshH~-XH8Ridd)T@_un{HZ z0xaj#V~g-9=hIxJ$@2D;lZM&fazD zyW!ij!C~RrCN?`*0%cLxQxE|rh89{05OLKepP3arx6 zr`K7{Y>M$wlLzMQIEqh-S;ze1)!|ie$*Q%n0bB;YOtf#-LSf7T;UHdI=I`+)F@83y zDTsPTJR%lFK<2PDN?FZh{A9-&gEE1MZRD(EGb&oIj=BNfMg{Y-Nzo0uJoWO8g2tkY z*^*!(O2^ZeJ={pr<>i_8Vjs*uiRAc z!3R3PYA#IjIYO?x70g@&9|V#TlVA&sHEL5-oO%i7=(ewCe#1Bru!{eB!AiqJi# z1L3K=1AgE$jC|>)e>q#>b*><&u&PlY<0`&I(<}-h{>b9irY+Ob69!PS1!wh81UmH? zbKm_tx@W2{GiN=WH-ORxdS02(eVQ|-1SBbIs@(mM1huM4AGYoy)zb%%Po1@wrb@9) zeZmbkN~vQGpH${CS$6>*KcB|A8=LA4v(gA1{P2TX+r5{(`!B$@zpNm_Av>>fJ$2fb zxJXXd;yYdfpWw~EH0E<}>mgr3aEX3(mq?0!U#QEZZ(>~VplQ1c-PHyB|01z)hmOaP zZtOLJcIFfR*gqTQv|H1vH%Y{hft?sXA$}uneR7jH(KQ3Nk*(+R*#fBs(T4gXs}3%V!fpfNAU5) zJ}}%1ZoK4Md&#$crzyAY5J#wL9R+>RdC2eamfyK5?rBIypUJUdr!9xKhr}~tXOs!n zM~Z(4k{~)UEAqt7%|mtM&A`Iyp@ z-Am|VN;4SrQkOC$WvT*tFol;&vUd?`_V`z z8PxeaJFb!`4!8qNOZy5bkj$oNFpar!sMS)~Dgz@y?)lyCQ%>2)8`T!Q?I;f$j;OwIy*g3RNohluIW6ugE>91wfGrNR>nJOzGaw4CL5t{MJTwNw6mu+hC>#X66}=+VDuh#xW1On4F|Vw7;?tT;JXm~a1PK1 zOOpOLHjYaEq}TNcZ=$IRY0{U0Tss-G8k%M$eX(8Nug#i=oII4-kFk9T=(q3j{|N2= z^gigB%_Wp1%)}p|txLbpyp2W?2k)(8Bw;oFYI-^;)#xjXslpWTAZv;a(Gs-e>lD(- z>@RPM_w6=LP^Ky-uBd@F_v%(Hm!pZ%0kj>|?yJ{|s-|_#qEETTSb?>8)Ae->tcmz@ zKZL@hX!Hm^x{u)oy(-#u+1HCtS4|v`J;tlV97jc8KPWuiVjXF~C^c0du3U4C9D}Ej z#wjmni8CyPAh8wA9%S1@zq}Nb2O=hp18RoMH`HstTWGe(*wG)X06hz6Eb+>w>Tf(T zIV1T9Lo%y}tL#9&ySt+x%1X*hxh&(U$qtch+DLL0@j`?*(_OZ3U);oQEiAA@Ibcl( zaHj)x%#<%;3NUE@`*9DB^`zjiEc+!VvqTj7gX33&yShfu+0QZ=%>q=`*aR#tCY`KA z@-Ez|za4?)!9>vN74F&oKvZR?Hnlu)JL*h1&n-snwjB+;xe!DlvMzT6I4tg zS)7FjxGzQVc?&WUJ@$=&IstLp1ZJ$)({dl7CGETrd^M>@K8$mLbI=&?lk_KT-}y6P zrSOHbQr^y1D6HAV40)SxaDC1QRXSQjpgOU^n!zs0G-YO|s2ZaU zYH!SK1O+}6ml!zA{#OL^o`${(QBtB%EM&-zeo ztvRFDiw*PO+PZBDBFwYPCY0S->zdg-#qR@5e{FgkZe#X%TX-{pT^4t`bN1TTo>>|P zYr^0?o2fk4XUYiMb4p1-oN$MrMhd$UU=H3&wxbS_b0Aec$9Ef1x=#no1G$&iM(W1R(F-Jv%>( zeZ8=d7dOf}YxbHK>n&-3~|rC5~2NX^5hHqiuoy3benMqG`9jzZTTdl6>m{W-dYmQanu#h zq`L$i*L>o4Zr_rwS$}#FquW>$_z7DT7kL}LZ10byJIm+&p7FWxmOo>CS7C1LY5#Vl zHbYMp6H<6}Tia%>X3JEHS;`PlQb@7-49T-$@aHD$tlA$#u78HRU=6$})B@H~H&P1+ z&K~MXte@ih1hEr(@LCB0^$kZ(@~dw3Ux$T{aLe!lvRRa4; zDX~M&&b~0Mx>S)BJ@y20<6*yT5=LC&hilWzW9S?i++T0uEYZL1vEalx(^&zkiJoTf z4>_4_zOnt|QFYCy@rwlZamcotGk+8IQk$-riw5FwqOO4LZ8f!3BCLtny{VxQHa=+^ zBX0aa-+(pLnlv6_hXHzx4clqR+Km3-n339>C*K-kK7uy1ho7mt-Ti*e9Tok4?R{MQ z{>1sU#r+yA{vPrFs@)CJ`gl7#lQ;yhQO4u-$as$ma2I)M;j~q7Hs4{x+%n>Bv-5lS9)0 zo{HsXxp8i9E>npr)NbMY*Y*7X6tmLo)=^e+29c6+`v^M5kE0n7Sr*Odjc<{{N5sdSVYc2WAy=+O7#&fi+z_JV>yJ)N8#V9fb?h* zIng}nkxtg%1W=U4TFb;}HndJEUu>+gV<29M$>}PpUPh*8>TP6nPF$S*sf@NEu$gZ@ z%JJ1##^%-dKp_+2vy6%@GnKSkd-~d&k#;dO9{By-=EcktO+H%~@8&K#9(a;sE-#w9 z1842|yX_>HzQoq)SX!ghvRha+QF7h$y1M?^1Mp%1RanZrjnDBeOke8PK33n`}DVWN~O_&9dB zCHUC*#x}7vK~Bk-Q^_0ZfiHbn>!iBTkf5|t*NK;F@-$&tYd#8uL17KFFbV;?VO79! ziCZurxQAGYGzU;O?=h~1e%(<#xb-XKu#xentT9fF?`E-W{^YJ(T=uBk4@i52pZxA)}7(XFFxTjQ46EyZhdL7^hu zi5p7sxwv22M!|p7gIokJCedg#@hAwvX{^{4)f6f~XwLMcMs87?&W8!3m)*rL-DjOd z+M@e8xcyBQ>6CHi1W8xPhHXh%fy&yHJye3CT~8xaLBX**wMmEd$6X)-UT!yQ5g)1M z{yGGqm}(jr+cDBq56V>(Jolt)VZu3e%{aO1$k(Mw)3~IA%b!=(tUQKXAIw@S0<+OR7}#dW!VF*s&N8LaCr$nnt>>7IH63-dbkjVs zZxYbbp)oWc#Ojp&i2(%ZH-g^{Ze@zK$<;-uSfZxU0{r zBiPC7R!cFEl7yu*f^?RZVggb+NI}}x5crJol9KvTX-NDqR-X>CZ4MbMuH8*U5t0SI zRM*x*_A*P1-Lu#(>~}@x6;tR=E5!?wp_CY~{`FAb$J>?F{Au2;euKm{=E$&X!gGU? zqK~V;UoKkVtdBg~CPLsg`n{lzbU{oDCZJFtJ4}h$sqV1sA#@oL79o9=)xGewTasR( zfP`2lFMkTjL(j>903k1uJ+2u)`Kra`^SDd^Al@8-czRxNjn$8lC(WN*$6+ihyx^>7 zj0ILXb!DH8heAVzM7b6Jc;?Vs`QEx2A;Z>VqT!g>w3tQ*80_00sqUFvRi4!CwOe*X zv&Hs`*VFoP+!Sc3v+9HBTGX^+%ssB@m>7AL3^;XT+-#Sexw2fd9TiOTXlctdA-}6K|pFr{Iz0d1AK%Tl<0CP{2cWWh{^m&uyJIOuslm1)cfsb(|Mib@1F=c5%hL zkLTu142_ibf2I_HoIN6Cd3jt+AIXTJ2aTR8!Uu83b;X3xR-LQ2g&!71&-$LP;o_P` z9V7tZ2Gvl`fEB|pe2?xC8Pz;Q>$M$qwQ~hJ~KJfh$SfvKOpphR~E=P9?LK) zxCb>ZRB&S9iLx?RMC}l;XbOBEGe$1slA?=dC|>$o_gxqaJ&dn{4x^FgiE&id1Tf|r zLJ?h;-dcGe5KoI_vSF0@hvy7y1af-}FNeHF+g76c(Fj)s>F9iY-M<-{8yVwl1`|K* z*!hF7O2xX`0q?X^d_>%lCC69gA#K?kAb+@creP*hLcB_Nt8xjAqgqKhsU?+r1d6Hl_CCJQ>o*K za^@I#OZbtIyIo~)QK&D>V>$&g3i65Wnw=bCkI_-QB00hDFq1udFlBP8}iKlX&9Avfqasr zq3Ne~QR(T9)D1h%OfN#Wf~_{_Z1E%2mgN`MUgpX}bK$cX<9TKrw@h`BEtxs^0_Fke z>(*ZN*A-Yn+rVN~Tc44ELu*{@u6?aUd9(wvX<@5aoojyxg8 z0;>HCE*a`GO#6pPsus_FtR%pgH8HMxIrBO<&j|0E*Gk;G%cWqz{SmKrLC1A<1{ajk z+8KqoTAM%&#fL{mql#uVzIT&%Szxe`|N2%cfW$3(Kz?-61X-5CNI6B1mCa{sdhNq+ zH+eS1z6fwiTDiomaCq_*u^NlJfbc77z@7l9_xJhASuH;DUJ~{^em2+b9wGCA_uDp7 zrkA3MMS_d>eD=|IgXqH2qezgb$i<&7&9CMQ9Ad)oxZBAvV2$o}V`qL@1Ea^rBx%?) z{6UZ90t{W{vE<2eN7nc2WH}m(g~)ISZ7-<_R=B=gnaE#*#P?)Uo802puY* zmM{lYb0Y8rMXc-JRD-GdJITa2-Nu>yO6Zw;)KTe3wroI{9sV#lvqD=Hq>MuA$}1@& z68lriHD3bqE=GMQ!M}LB$uxB!2k%e|S0j<{LrA;}fi`(D{SS!e(1@4h(B#fD0W4f} z0LJgWaG1HgS{W34TR*Sj9!|>Yp3Mka@s24G@B=(`4dnU8Nhhe~m>` zm(DVPo;^E$x#j9YHdrX2ld%)7F~l&m{iQg&Enk=C@U_01xA56J-^1;M?|H@8(0s6d zs84EdvRGWNkQuO987zW$Xs!_>LYpH*JWH1?dJc3rd5xLma1!+%+5~K=fZsS|y>WBR zYJ0M%&MBMQN#$d$v3{Ta!rOGqs$*}l#V6%}TBZTrHtu)TKIxbrzui@=uu{!dNb8-) zVfET8Ag$dZuoLEKnFzgLG}FOm;jv@r`E2J}g`JV^f)WWD)h;@%qaaDQmTlQy&$R65 zVQi#3^K{sdnlVS2Nq1(!l<2avF*f6$o2xd6be=r0>Ym#8#@^rS53qj-+O%I6=8#h8Q(sfF}30Du{=h(7(d)Ys;{~dk2IWD|1g4#j{u|1Qr#7${> zYa2Ns(vb?l!QA9J3ErDVs&QJTUVW zZY{3s#F|+Wt?QF&7@;<(%XK5{5j3+z0s;Q(+Tj}+` zAN`g3s!3Ns3T}NjNpb3PW#Q_nbO;EsPUjW-&wvpVxFTbtar;UCkV zu)2aayXv@I6?%7+_t;l@%)s3I4(}d(Y~lw>3Yy<9RBbkI$D<~?2IV+$7Gh$vUht{1 zE;Y~B3ENeX?C=e_L(gv#P0L?;Bjb-RLj3R#DvJ@IGMM-d_kTn2{&{`CRu*iId|hMY zwprMe?3qg#R!5Wlu5@zIOjTJrz!TL$dN)blA&Z2PQ=H35=)glUj(v?c6}A_+16LUn z@V0kpiQ{K@{1Wnwp8q-a`ZExo1Vz`e)q_MJZn3bIy6u|phV!;v+1v{lSZp*1A=0`= zh6$~cX@;nRDco!I^?Wqk_fac5XwAd#8GS& zyI#ccSZFiM?kH*Q)6s)ji3&eYxn`%K$eIk*+1%U5T!}Z5=dPeev!(9eujE za`(o5spYZ$K0fZ>K896nGo^U@xmpwX)o^ZI4Zep(TxUw)sSe>*MeLOO9dIx3Clc>? zOMbLgE$F1)GV6HX5={AM`_ds^Kk540D*ScQ3#6O>deRQ|#YY;atZb8Zu{i4Awv1gj zv1Kg_Z;Gjd@r-9L?iMu7BCzWBpT`PX^^3shQR3(IP5bp;edc_|`}3Lg zAv||b1t?9%ZaDKa^Gq?^*g&F->5{T%Y!_vzl2jNbA;M@^Aet6D1cr6^wH}BCSx;P% z%ZQ78@C@Y=*W72TE4M#k$zx^{`i3xx%d43en7+{!6!*yxbG$S}!YB{eF21TAUsNH% z96X-!d8HCTwV2m#p)-JVPcD8ePgOC^F@Nm(huYXNlgcvy z)XfXr9_B!{#e8XOR_rnJ@1gOBHA_rI55^Kmw4kXtr--8b2q7+3;Y0fonE;twRJHa2 z%Sk@NF}rNu)d}{V343K{`Iy6Zs+MLJ?qOFuC^sa-HZ4Nysmj^lRx@Xi-5JF;NOgn80vVO!2;AQEFyap``*zqPA23>M|v>r|VAa(4+d% z*KK(m+i#svB&72Lh_u|S$`pJkHQ#IiW7U-60bj8nA>Gyi(?!>;# zNzx>7p0aZzK|CMPAtMiXo^H(5^;?_iwhEQ&vq4n5`%~5=#3MCdfgC8(O#%Dj`R8o6 z7&H2jhMoP6tLY28mo#ix`YueYlf!D5u^b2wtf;><30|sBY(you88JYvZ%Z@5k^m)?nM@22w^%A3qChB z87ucO)CX4FBgZ6VJ4bp z;b-+s$3>q+nN|-1xpKCPj+b3o*lB%ldJB(*g%_358hcN%clJhn6&;J})TCY&H^ZP?5PJ8fqw;4Fe~p|`f%?dXa~ zKhmv2m@#jwEaMi|{uW+DM!YI+af|wpU(|4`6L%N2PxkMHxa4foqObqiuVkE6)Y;MS zeV%0Gjnw0vWR%IR49y}?S&)(4wGBYoBxNRCP?()HVI5TxbWuGw3w#EtPN-yGY3nU) z`IDa3&Yu#}rnXSn46kg}@gh<68Ol*o=dzkxSIG}<02!mrA~AH;nO+)~!-%o}EbN>e zj$VlW3QmXy(0mk*YwwZwR{dPfD;3w`@Md5;hdmH})|1b|pKIhqZhw&1J;z zcFQK4^HqT@WWLCzwwN>6R$!eyKI1gf_Zr(KIO8prG7ZYXo_7>rZ2FKT#S4gTUoHiSb=_W^#UMWu#_jC-u>yplFO z@obhkcC_yoeORnc^GJzjFta9kDU$dkyDYcRP|G^dCj=ZAJMX<5EA4ds^RS7DojbR* zz;QiCb0B>dblP(;Y9$)GdERK;k?ACm)_5OlQyvn|nO8l(F;ej2bne2ZaMx%9PnJAJ zi&wnT^0>&RTF3FpQJXgXs^|L^u#zE64&&>k&@2?3Tq<)=Dl%IkeHdD@PTc* zzku_Q$FMPMhR-vd96O2(&`&^TZ=|sV-$_oU$3?Z==QQ%07U2wF{)wO3rPQDqT$B)Sx%?uiJ zGpvl|{&i)@m!XaLIG{d6H~w-BlHNg-M77$uwbSNRiXyb5ViVogb&jmJupN=c!$r2I zsRo*gb+OdC$fV8{kl#7>A%AiF0HLwPdtyrqK zB26xFU~!LzN`b+#it1CIpUO)|t?@kf=ra97UR^U}+wOWvJ)HfV&D8mzA}V<*(Mr4v z!F#5}D8S{YyiLdYo`@a9!qToq#{LLi&~bPB_~i3@(xDI)UU*kW)uk4uY1OMKYlmRd z!xJbCo4_ITrHa$f@nB5hVrK({SDk+DKlX|FdcF$skN0l-$nGn{4{Y^qF4Su1QIKi* z+eFC1Cqb4d^km3L)lBaZmaG>&1CP9*rN8Gl_D&nLAS%L>rn-8J?m*JBNS*!)Rpd&9 z-qL#V^E0UwPN`#YP+-YXDv<(d58R#NPlPQrFSA&8a<1;*SY3^pj z4*3kHH`d{P@o@qsU@)SOa*R*DO0V6WvJo^^(>Jg1KluMWWd87az5xOf0O0Un>>a`X zN7L&W8aVzV>T5LaY>y=nfBEDV-kiC(uQ-xW4~8J>IAVF7&u=+w8if#u>c*CG8Qra` zwsx=W4}tFh?gHI$a)T>>_H5)5lfsiFuWM^7Yd=={a!)z_T9b@9@>E-{;!ET^Zqk&7uImm)u}Tdjr+F*U2(6o>@>*B<@ANhuInXO51{R$hh(=vA{!m=g(_$N0F!5 z^Gv^F4MTD zDed^^*`rxg*?OG))&Id;l>OUj+~AdJ+(dMbESk^^NKP67E}9*0Gr{zjyM()u3t?3$ zT)Nhnvi?T8LdO@j~p4G>uwH`$mwDVqV|or1LxT*&`$VbQb*f0X3CByvF*%P#2>!aFMa_R z747}zAL;uh(9euOpO<;$oDAdrB4I)b0iNg%jd&8_zGYxtZlbx?jOD|omsXz`KxI=^ zo{42$6diKvN5hHPe`e1|EL%v+2JmDY*(T)ULibkl(`oj-3`!O`Z_ti0Bct~Pg1M^0 z3<81Zxr3<0t}_Jh{Hn-Uvf&^Ws{8L*)~)O>Mtpw=eGN(<)&^)p$Yk=byy)q_3L-z2 zJzk8phk~>wcbC=1m2N^@Um^^w`T{vm_25`yq&0FDw^Bs0-)^8VgofN)t-$ZVMluKG z1R-|JnFY2H27#34r~-O{Lx&(Z4zMikO<@NqfVTpgtAJmQnF$s!5M);?;t;n(NX`|U zAH)j^cZNiS#x9OqV&>CrENu~KeBeo#Sf42&{vySu?P%$fBSKcC!`-K!AW4`idXq-F z=wSJ1oEBPoqxU`}V0-FchW@~iI-4MeJ|u;Y?s}|%9uZGfzfH%>iuO|R#BYY)Zug&@ zAfStv5u)4kXH0j2Ejk+JQWWnC9+dR`yYs;O;zk3;ulYNW#ZGnZ3mW2>Z_R_LaIYMI zbdrk}8iIlF$t7E(On8TH z?AnjKddw&7qj5Zq`Ba`JU;f+|MZnl=a$04k0cD894Kv~v2wsY!66O0f?>8K0=*s?y z#Xsj2o{mK4D3DXU+QwmctZ^#^W|20+yoo=0q!shQz!(`-s}LkAyP?m`)Tm93Kt?iF zRL&GIo(DkJsEo9?lc+A~Y(qpOTMIf>9KD-1ki;$y{fA?aE)Ow>CZuF_%(EK@%pcU$ zq9u8Poo~OS&?7&AH3TPv35M8ccYO^&7H84xY7pu+9<{HxL$crt`OQj$)VH0M+Vtj) zX+-G53`GmNWmQ^Ag?CID)QQ&quyvmO<7PfREd&UJ=Hg(6t^&yQDupilW?DN_x`gTV zWYPtDcp%ny&|Kf7tqe{Z3IAGn4x91x#BwSHm}T$i1g=HXjQtojmz7P6{yrKVKxqAI zb7FsyVo}m`HkP(raV#!=L1WG%K+*B*9+xx#6J3`>N_xc5?>1AYS1QrN<~|7E>6hg? z|0`lKdDe6OulH-Difpk_ADmF77d;0O@2t=n2&}R={=`^g4uzXyE&rjE)BDnC5_4(W z)3v`hIT}}96u+KOK>s#m26p}9vh@YoV;Wn$?q>v|85cw{h_GbhEA zh|YlZ^+^;K(y)Dxys!=A3cKi(iSnM>{yzp;myT0z7ji_ZV7MHN%0Q;F{EpcRQ@<8~ zz%WM|(|%2kX8qP@DRldeqK<&f{w!$ceJr%KOTUO=Vx75cb8i+KqHo3RKp(l=Kait! zyys8{hwYs516?6iJT45Zw1S|6e~9w9!Nws{`Wo>&R(6@g`ZUk-K3a@P_ z$=88U086@C_x(&FABW>xTyITVnPS`iA_s`;D=XOh)=n?6_P0lEnl1B+8k4CNl!q`; z)J9w4h9Q7;r9fUcb4Q+r1R;a%oveMdC1MD=ZeLL@mU4C;hEkPrTK|z^c*^-_a#OZ- zsDserqPJRBVCCjR{Pqz!S#+<3+^bZWzoknE{$w^7?(?+h9|FXw^{{Z?U&2D7MeM*}z=}A(yo+ZdAX>@wMYMvz>cP{>W@r#$Qyb zn4s}(ptEv*w{X40n;JOS=7@{o*V=$$%6cAL~wDry7&E zhhZ3kQzVnl5`X7Uef#7BnIK|PI`KVXxklJ~U&QO2sDH$cDpPs%f#^a5NRW${@x=29 zQFIF$eOkac!UiC8#H~k+YryT*J_WV_sz(mvlGEv+xtyf_2f3_oM$#2&jdvsZ1wq2T z9ZO{}se;eIn;&JwY+F*(mJGi)j#Sy7(plaoN1&v0cP5jLYQG=j7*L~XEEW+pya51` zuw!i$^OnMJwqS3tAgvDmRP1=L(>IBe82{TFCmV2=B!a83Pu%kOw7u$;>vX-kwMoEB zY7MW6YDDPg*9L#ph*ui4q{!nKCvP(|_kH)C-cWe6;ITWXWst27cErTHeyoV-cg3Cl zG2){~7GsUa;X@NRRJHhSsE-G+#dDn;$akN;6cr3`-r>_Gzn%{%98u_ zx;26hh?JPk)l+89lpsp;;)UJ?Z40uOV7r(6oSNJf8Wr1J{Yv>BvhpX{L(2DG2sLS4 zR_!rsjiTcSpKDs(f!ALBt8(%29&2@R@E((bgJyP)4Z_K^{#GO1l*i6v^kv6)R4<{QTY;z}g5Wb7*F;9lxT zy?|?dmhHy%pTKUEE!Brm{2nnwi(Qi~NRtQ^CUW#2TiVz`#d_F@#zwj>nkX$*8%1D_ zw$wl4ZuH~Sx=jH%LbEV4AsdHq7O}DQz$?&LO1%e(gT?=_qdoAjYKL#1Z>U zA_8#RmI$TYkv_#;rG_^1IGZPi#H_f+E}@ss;UVDu4GM$bCgY~ z9)v}db&>-|hAHtkH8tfgWl6Ydg4Aqi`oyMh6D2>oM9{4#%&=mv zKaSKD*%OU5T;TR$GN{Ah(3SQX7nrYnA2SV7BQ7et4>C1}MEy>$VU)yoG?JZCM?kW* zV`h`^n?6i(6|6;GTnCe+l|hWtseD7gT4JUfF)K{vygW28|6+1p78>!?d%v!)hWiUN z09^7;-sF^D{MdY~%bNDY-yqu4dvq{B8#^$oW0lX9?;rxS03~}a2(E$iSp&_LMZPhn zNackSB0|{?CXQ8Wwol7JdaJ=OY>WDFVVK7i5O}r#QGgr@nn2m#NDuudeRK-9d_E){ zxDlRZ!SZ3*zw&?djYvMQpwN7-m9yC|D=f+Dr~R=Y-xg9w=0Yl0zF~e3N1z)isa2P7 zH|09UU~KSo&I`wBjF2r`-$Q=(Vd5xXaK+z0p?%j@dL#>J7nV_Fj zU}PfnT?T>;1mHD=R>E>p+&k_kjaysoGAoTkuEO=%soK`J8Msqxs>8aJY2hn@oe{cI zkmBqmz))rC?Zpd@fcg}LF3oAYy<-`SOo%ewkw;!Vr^-mAB5dJJKQxZd9mVa^8T-$u z9^u!m9$WrQ{EEv2e#oLM> zF<&@iFC>}2kkenShsX*&K=x;ud)U4BYKjI_GZeuZ=Mlw@moGe}$qZ{WU4h?rKs$~I zK6w*M!`V$lVqZ7H1TR@^0>qviE8jko(N6UHB5{4gLtVCdLsg|g{(WUUF-9}B_J-Ye zkI2pC$mbe&Zt`wl9RbtJg#f40)f&rJaS6y6)uIgwkwL{tKGZt&kO_g>)56>A6XJ2^mZ0 zWIp&3hOOSkY74cAem5@mDX!+=TMjAY$EdW>5H1><4EK1fTCI@XqgWaECH z_vb1wDM=1s7!>x}7;2;n-upl3I>#W

12YZQHhO+qP}nwtKg2+xBkT#%|kuecr!w z>)urIGpVF1nJa6|vBnovbxRsFv>dXRC@?h3zr~jq?WAqgR5VwH6gwr2!P}@#u-8Y6 z!=zk_%N#1pydH$F9y&SlEMHr2KS+r0SC?6D|o?MpPJB(^20k6a7*lnDIujD$! zgOAPVAR1r}2wH`PA-$>~raGm=wZGgx{ICvb#r(V+I?i?M-MOPGsTJ{Y`l+ z%m2Lq!+8mB8sWSN_@u1q-Vh?UHFe&CW$63)_bpa?yA5X%@^6cof#*mn-TEc(j>}$_ zDJR8>-jIJ*Ze=na!!nP|@M2Ig8ctZ=fg#265{!=lx$9ks*`8qr@X#>$nIR9K&*o~} z&hejH!|7a~95NO~O1`oi=XiYI!Nvm(W*_(1CM+6jpcjQW>@Y6SOM~BY)mS{P_3qkNUr{mGcTp*7&zt6Q()H=p1rA6 zOnV^-qg*qYNUgF7ORrHv3C))&a@gg6f&*VNS3OTi@brD-f|U=g(KUm$mSu_p_VK0j z-yE1OhY25h0p7FTf>S=52$0=o26_zj_R_A(a)jQwCn(IWW387IT^D*0jfa{uA6UAZ zNy^nfe{aU)gq-FaXel|QfOrLHsa0>)$fl0=@&)=Me7?ug$(nhJuidTlty~|OO|}El z*j`@&(NZ18QkEKYhd@9*j+P5fHrfnqBgZO%eU#{v?hjd*S3q61vXm}$cny&MRT#pf zo*|d-GNd4As3Mz5xM{#Ac(HhqzIMb7Q>c_ZyFQcakCmweO!0~V|D?JzQ?>lkxxDFt zHq+P+0Y2`D>E4kg`^Lgd=`az}K*1OqE znJ4WAUKNfGsMAk$bu?$FMB{})sEbTHl+-l&DAg12H)_B58oyfwz#V~36>JNyHOVQx zkUZvbE`5f$vJ*NefzA)F;}{Lhd%RkG8uca?0R4GJ^x=eOd9#zxg_-Y-1ar^24BkHU zZ$Hjh;HwLQIxtfeH9o~3z>cO~$*ei@k{x6Elz495TZagP_H`9~o>`pCA0q6KDJjuk zqH^S~Sw0e^a#qvgtXxu@u3Ald%buv%WCja@0&qRy282MT0lQ@jU4rK1;J>QA@>{9Z z#=!UlOZb0aaN}F7IBz({x;W-RQ7k*U*!_Kpd0g#8^xeYg?i^u#CbsTqi8uN=gE0R< zYuO*`!xj-~$x=>EM|;1q7HZyJwVH^-pnieFJ^7!r#}E#W%lmxrM$XPVq}T1}c6+&d zy1soI*~A6T;+s+eW1>Uhawr5&JL{>In7q1oqBZZ~yx&;3KE}B`qD`oXk&Yke`Eo10 zqgFHSc|E$yO(1H?gnprLiBxvn9X&W{!JPD@~@Fo9=}!XICM@t)FqiO>#rTVr{F6AgcD6Ui`mRyMKz;V zQ>tx+J7#;9F#25r)k-UB(w!~gfEWizS_HT5FqDGj0h|RawVgozktUeVoLFbK^W2Ejc-|Fl+M_K<7Xf#}R}Q)p$Z$B2`UR zM0gUeyq^@l#+SWL`QtQZ-o_(qn-U-f?koSpRqgdr6#@Eze?a7Er6o6;#iEP4Cy- zdEiKiv=K~+%W?cTH-RbY6ohu$?T)KkCD?xq(bYrFKAZ|M!-dran9YtVGY1+v`UCv8 zp8qT11N^>m|9|`6@xGpPE}jmiCcyvWMBTyKRoCCsN`DWm-^0PufnMLu)Xv1-iQdW5 z*n-~4)ZEhE?)OaF!$HZajl5ueUf_l3Gi)4fY3$3KtV{ zkCm`Hw3WMR3KEs)A?x*A6U~1EsaLT}_8OX`_u-<5%|A&JVfYF8w~ELTG{KUT8Ke zahMV8dkQ>?-BeZABAAqa&|>otrBgGPC!*{u9C>Z zttdrhVESJS=Gb5)m~qoh@$kp$^#L33WY$FAVmHy zCwoseEo4m#Ok-hYb6{4{>chGbViLQ(WK)CIAqO7VD;beW^?6Vwq-W43sJfk{A|vqr zwe1d(I9zM+W+CQAy)3{d0ciAi!)O|`DmU8fX)F4YggAX>qXn_IZBSm53{@pzKf;&{ zV{H09stx+axdt3w4E&b#neKJs##wdpZ!<+GC8};0q5&Mu8X`Dqb{{z+IM`{32bI(PH8=o%g}<0yc_xv(YLY_VtX^> zi+$HRyNwn!Uli^oT_K;xsW))R&~aE5e(U%jDx)m9x&)m-9Fw{LHFIix;QdN{P*2eT z5wRnrxQ@L}eU0XgXI^dzGCPh4?M!MEv^xLzKQE{LA<4koe?HwC8weRsXH=&OVATdZ z-mz9*iN~VSSi1D_cXy|+@$hS}7stXs;1A+5)QSsuTzGu>rqJ8?KMq5O5!8<9< zPRJMH6hqY9ys*Z(|5CfLc)@12J=#;!8=M5;6c9%O`JRF|GHX5i!IL&?nuw)7BhU#- z$gVUq(G6Y#$Tn_v$k*0qZ6~mIOc4kpAN(AN@pG`yc3A@(xOg^-__;3CY|h_2)%5xFKib$3f#Lq@}WHWGxy^wd^b^k1H6?KeKu_Pa}DHm zkUT`*y=yz-OJMlL#m=zl+h8SRVE+XrIUeSVcOTzskI6%5Q*s-7y-u*YH>w8S9Q;RL z@)&+9Z)Uagwyc%*I(;cWzGYse3aa8S%l-=P0yZQ&@Hyg#P_(0EcPfb*>NojgRGEP% zK)(~55*QmxsYXhF_=p)sT4Cfu5=K~)1nP``x$0((xTSe89^m4GP=#gj?fs|Sxzb6y za1c%$GLN1MKv|AN+e?J+PNy#UhF%;5cgQ_G_-|dNl|wPM4jwHYvue|-%E-^ycOT$? z*U}_QU|Z4OTKfKf)>2oS|1idTG!*TRSP=YX>o5j|bBL!EUF4~QRB$E07Xnq_JUHYM z?GG=pOp^_~H@B-2UJ*Zq{2-0FN;{qpKp8xn( z+>L>b!cFo12Jy0=bo1d_>Y=8U&HvJ(OP-ragsKSbGlgKjjwH zMt}e+KE|Dl8n)>}!L|&1ENNc=3%hSqirgB$r3>Gg6Wp{h&9!j3fc5~lnuKuz)NcwS zl2@uLvt-<_ZBv>AW6c6+s6S%*H0^- zVh`=WjEYq612f2+(A7|A_ncu~ug(?TukcWY&j&RpjMtLM@Y#uqLsx#Cvr9d3kGZ zWm^&*KO_=~2=fF!^PCaRB_|=Fjn~u;&8d;a!5pOteyH2?KAN0NV^?lM#FClsb0eH2ibtKn!?txE?Xm``+t<<-47OtIbutJKG(>xXl#Ja8I1R9i{USez zzr2ilZSjEO#+0hc@u0N0W=fE6X5ZcH*+fcN3dhTdPuY5r20Rp;=l<$C%bm$oSjWb+Jfs8TAu(bP`C&gO`!#jF1!xO^d z1hcYMV|8OqYSCS3Bo2hj7hd%0+M@srh#w(kB8&W`&j?Sxlm?4}wk^ql8j= z-mMXbmgk|KmQ66Z{O}N~>A4eh1^J74`+)<&hjhC(c>^QWhOA+;L~HJGrHo}>JJu<& zke-MQf{hJ3S>s5L6`U9dc_J96Q*#sf`9lGz@J3=9Ht9Sbvpn_7|DFN}2Z`Ea=i9li zLRzGsGSaX8^Lxli9|A;mhAV!^naN`=cNY!hv3|he%Yxy3I!cLBmn_CC8K_FX~Wp>6Rf({IZZEu4k9G4_*91gzv{2U6~iV$}}G` zWRA0s?^WnVg|{i0E+cI}cfKjeTlb889jjqh#zkw#Y?2&sMaA7uwa~w3I0x?0O}Zcn^%` zZ%q;y(7SDoxt{yu%hQgITzGzFf$kyCq(%frk=YMj04Jj^?tB_4HefaHQpi;N4vdF> z9e@kLt*mO^I&LIS_x3~llQjY@fK^ur%WzJwg(T2gV7}=74aw{MdX#~U;@eM5ak(Y5 zaJY3EDgMQSk5I6_lpx9A-r2AF3p2VLv@wXnzS7o^yI&ATK!8YlL?I!(7V^*KBs_}K zIa>xH0{i`We_+Z@p#2ZT@MSo-4?rd1SDk>_F_QF+xuv8#TqXx7BsTI*si?P*aGBRF z#)+XK$F!d!X^iCra|h(BOLOYMs_)-Kfr-}=I2g>;u8Uu;RdhHi!R$1RPfm1f3p+G@ zci1qO$~VLEx!KR5v1&#Og@RNwH9uwaJr-H#CK<=^1WRErHEURaJ9n+0hbyFk;jQBV z^C5~eAyQ-LwjbE68vMWI1$xZzW0rGhW`zX7QQ6@#SFMh>`4~1WInN5BcU*Lf$JiA< z>Lje!=jy(HQsVBN$)wT@hjn73`)NJ%Q!n#9Q=6MB8P0h;(+90GfV>44DxLJJqKh!8 z&?RbgiIeMc8oK$8MYzRHFp->O4!UOZq_%Fz63mO?`9lrqn~|j45P@Va+{IN&O-aY> z;*~X=ZR=^CBa9_Py^FogJS9UpOo7p^2S()!`dM;b9M!$c2^0Tv#ZGBd)_9&g|4Aq$ z_|v(GdcJPBVt$w`AWTQBMr!ydY$nJb-$56+nmq6u>No`lA~kw)d-s;%-hEJ#WqBKF z{=T*7Ef#ACYnC^a$#KUfQGe3}X@H16Y`q@paR4~wZkHe+Cl-Bq19!o{tSQFCVGUlB z`>z2Oa|$-KkI{}@Zc`QN0;P7rfp*9hix2Fb8h@OeEF_3O1r2pQ){RPU z=IWD~8gif+=AM;IM(r2L0xgCW=I(VI;*m;_%!2PacI8_(Nz8hw(^Znm2G-K19puj8 zM{J-WrR;fI1%@7l*=D0U6hg#ZE!L`~e>DT+c;oc6|NiCW`ZW|DndfgT$=llm&rp!C z$}<@vN2uKk?S1NOl95~b@%Oc|de>Ba)jH&vN?W(CPk#pL^?!7@`B}efm41ZVn&QIAtsXL0PV(!zmFM~aoZ>?I7@xQWKtSIa67kdLn-b#OdFlVkM}r@Lqi zi^muFN?yf9g8PwUbjDrX9JFNTkjQ>a>r$g5`u49puf!sVosWjeGR=>$W! zKWy=ca>ZY~2I>;Sq$;BDoSbKq^eUG%tnd}8yEaPZ{jgf>DO_zMjh9xM(cBJJLHyW(gdOrr4G$kY zugNwBDaVV*-rjMJ6m!&9)*C_+8x5N!XarQlzKXJBtNv{)3)mjoh}!sqd&H?rDP%`x z4Vz78DHy6=6ml6^?w2n?7Hs^8R&XLORsR8zF^`k#VHK)y9GQfTTxe74+C@S+J1^=L z`P&vc6dL|QAjN+lrqcus1W6cDH$ecv zo>l77wtb)96f#D_5;5H-WaT9)BQNvUb#CqeO{EcLgij01f~ls8tV0s}*sZg9AZ)ZM zpM4Zjm8!K`O`#`GAM#c%TcOhix+Pd0nxmR@M0IzE@4nS@delLGqTrW4@`^Ch18?o0DTMql@Dx^!SdB&c8nI-LR-iUOf zPL0&ElOCI8;uz*nCyKvzqz~ODO?_3k()SY|`0M;{KqMmetf*PJ*>GWVoRt7OGGeRP zi{--B@>Y&V+U*#|*o<7K!#YQSB#Ei09(w5*;tx&*{~zZkh?7ZV#k*>5Zi0V%{SoXq z1X#cZt1~>&7g*lxs)>Zc!WBlsxvmTt*{E-NnkAmWh0rH3P(NgaaMw2m1WF;E*{1M< z$|IgRBe4*fL>xR_JcjLzFipaTzP>(QQ0144@kK+?(aA&h@kP;xRWIn~x8JZmKi8kz zjGwQ>z&UvMdi{0$4NN}n--KLV{*In;H{VlxRMb})#_l%M z_3*j$Ow_;z!`a~Y+4r}C(0A5Ga1AL)tFTTcQ_T|Z>5Bqvqg4b<~C%> zouFuD+_W>`;;5%klL7kNmkT6tkWtWvACNu7_9BieayhWM!eJgW;+8sPJF8WH!N71j zo!e zk)vjzAZ5(ud@5{MoPolvviX)XZ@EiBM7eQ)l+f+vnawgpwA}HJogfRL1lDL5kj$+s zfj;rNdj;B)Mr8W0qnUjC6n7dic!9OS5Go4lTJ%ywWt{=ZHe6^soXZ!~Dg3v+Iaen_ zW79pPWfE;z|3Ye2SpdTzBGo@JE#N5OMsxEUpa;5GidqiEz%O~h6pasrV>zWXcc>F# zrh1Gvc{`9HKtHv|anu?-5=^3K+wnn157K&X+bIc0R{;ya*hN;!Wu6?tagt* zlW$?DchqXxUk;av-tmZF1*Ngi_IjXb|6=nInM3QI$W*b+;w()v2lWrv79a`Xnt>lC zxMV}nl5xCJtAM#-kpX0wW}?<2&6;c**f`6n-6L1J#gZw{YA!tfYTsdz13YQu(fP7; z3|_?6+8I!{lHL6rDLl79m2mm0I}Xr7zloD%L^+KAMRxd@y8<~Znj}*GS>v*ax5u`l zO;3w2kkajO;P%*vt~F&W)51eoupsv2eq1z=*>ra9yOIqs3=Am4o+AbkTb+$bSpMDy zx)!oP5EM*Lr5dd|Gjep{pk~9+6G&KY=fQA+r_hyo$Lw4nwVEsl9;eE8buNrejLHF(zm z!D;1Ru=jju7nSk;ypI8A$?Yp*RFbYAq9ZV?`tub^z7GGIn!+Qp?s*fl5@ zctKZ(24iTk8gtMjJB*5_%KUu=ttih<2}1oW^mQvs?{#Fj)>GQQKqv5MjHqBvUOh6& zAw9M@-Rs18u!Lf3j7M-rs04{dN)Vm|H2jZi?J)E6CL!ag2+<->l5=}hjz{^b3`C^W zQckjq8we&N$qyriXx$P?f3yoA_SiyE&0b6Hr|#n^j~?XVnbd-yJi$qXsRX*&#shNS zs^~6DbV+`QU&(3(Wf&cz(}M}(eB+9>2wcVEJ(aHBykV1{9CT&wUCy)ei&ChQQIoSx!uk1J61j<|?D6 zQt6KjGNrYSJP8T`5m7xuc-0i^Kz1f%Vf*z|Vb=L!|FyGgl~lVRSbC&H2LD%JO>vZ8 zE_Ogx+o<9=0cEKQ-y3ILK*eZ3LKMc5B_>$fDU6}wd#KZi3M&;M9WDOlT15l*p~eT!O!g>%geK~kB%(Mu&>VjK zj>W?M+&3OObDu{BnQ=9Q#~%h?9LpOD20=#4qop@qxX{={j(8wz2|;TgjgN<~OLxy3 zCf-9Z%ss(2_LoBEP9MZrtCMG>j9fPP!T#^Stta4w#OxN>^~-EGXmJ&4T=dRfW)0O? zNF_GGrM(4xq{GJOfS+&^b`}Y^MOaTq0WVpl2;a~#ZfC6qZNOr;-9dKR_p^rCJAp_g z&aNpdUE?d7?jn=ji91Ds*6{M@b%P#M4hjuD8^P(5c!jRTeQmF1XTf?oG&qtE1Iq#H z`Qr3xPM}4Z!-K`w#waB8394P{M4e$R)c$k+@|wB{Q>bkXO1DY`VP0TJ;~tGgmDg-3 zf)*O=XV!vTI?a}0VAOqSC_*If1iVJ=@)-GRDBVV5j>9Ys(#S)9?3UDC~a~- zCKAoV#u77u5`;nrFkY}frpP?BW;6|Lfm>y4MjogDsG=67v8^zAywBgr_@;yi9#^U- zhk>wXxX(!gJjg+wv*m~v*x=hWy={f1vs&Rlw%;r|K8uwx4;2bMq_Gi6RTu?xAaaK?C8GW)hfs za3t~rAaHwqJJ){2qzAh3ZD_DrP!$b^+Gp?o4mAwp8`#=o|6!U;6>#rFhtkA@urYhu zl3K?~B&a@$n_Zc!-Bn+?2Y3FJUJD}F32KJrmUci|EPq4edix;&304Bwzy`jCNFok*I z#gPaY9JR_5UBK>|U!lM9CQ7OdfXj?Cxj=$ll#zUo!T&)m6cN#aX0&C22*cb8jIa)bMcJ*=jlqn9ZYk+m6+W_H{5aKw&`x!(y zHBY|nmZoOEj=VH^Tr0x=OmqvYAhqfOL?H0h$weKYE{6?%vkRphp>=uGH(tVRv&g3) z-bFP_8Bo}IRrn>b(|aznadC*A-Ulzot6UDm2zNU5SfviBrf5OMsBHq@EaAgnN7+cT zD5&whkYGiGoQK9RoUF3egE;Z!bF(ezMQ&QKw{=qw8yMnij`649S(a#wSq4%JMLBq$ zH3h*!lNK~rAIk5CnCI=L=BsDlBJ0pq9qwfN)_|MGw{nwfV*Z4^b6}iT&K%Xet3{JY zIrrRQw)ydIWpA{!VX=xdW6NsR3Rnl9;RPyAEP6=)MRorgRPj_6hVf+rdvhDTpCbk| zET31!(Xcb*3Hqj+_FP!;9x$l8j_+3F<8$0+4(2TV-?W*@C*_NpFul<{&o0cpy_ zVATN4tbN;T=d>1WN9Z|wo1`$9w#z$ zLG2w^9%_(k!_jeGa*-HR^WGpZu|;ZFyP5&U68advJINCL zG5W3!X{Fy|0VNySnkQwq)x>e=-Y~(5#_K1kKTg z7=RKawFM47x=o$FJ}d)|CBA(63tjtiAAFC{RYF?YSa&ZS!2v+8!Fw2d#+ zIr7Rob&TZ2o9CyeD=DEC&^JJwXZyUO$xZ!kvwFO5Vlv*+9f~&}A-}7$d&I6Z|8WEE zBVeC1{$?0p-U7%g{I2N)#637RbhLj>j{`t!VopST`8lWC--X*tKLNmUl>!E9tMGY} z@^h4LQqF!Dyvjga;X-Aet!4jLU*=KWRh0tm7T%r4%y$@S z+WY9HT5UBu3XMzli}a-TYd@s?2Mz4I)S)-331%6SF2JSjm}izD=Y~T2au>WS;(+r} zPyel!1(4>;qI$v2o?vdAV>B+8)%@>_ zUrKB-Pnf?!tNQE6%0E&ql#9AHt^ivDzVwC*oJ9;zhYOhI>CsM}9aGp=$UC+_<{_+X zn<|u^A@TA2KkLS==thzQX!eBtj&BCan_-E9vz+&q*hOPVzTw=a_809GZ{Q+GENF>x zpKL8xZ#ijy*R@^W7n7dy_S`|QSCL-o&3@WOu3uN^FgpfSGlpXc&cY*B75r%j1fzFs zRq)V``31c_4Eo+}n!ul(DHDd3{aA)?vf~LhI+s2q1NECW28(0^ZChJ3Dg=2O3*X7d z!$-f4qr>Nlha#B(>qm^xL_H9PLTU#))4G7Ye)(%Z7l^y93lIJQBFa?5N8+^LF(B9J zp}cu5bN`s_>h$ss@`5}AVg}$VE4Fu$6+3ECp|yZ*T^MLzbL;X}Li@>2y_5W;knh^% z%}%JxAlv>;5xI0JkJ(#pe8a=MVKD80g|YkFzL&1GhNsx>kM~v!`PXYmc(H4YxXw~; zUNde=LmP%XfeZ6#*|l#N$zBZGCaq;eEw(rVq&x8+1juOL-O$=a^~=Xx#h`Y@2K9Vh zvp+#ZsFObWhFo6Ub_MUbqVMnu1;Ja_h;r}B8v5GSK*axYxYF?-H-L3h;PDJRtV!3N zF`-^+yT?o!ztHhqk)vJzg$vf-JHdVWe@sgBLKeE_5B=*~KQ==lH<+Rts*NjbI>Rj&z&R{*eyyoT1@ z_b<*nxF9>DmbREErPDcq2pdF7llN>=DVVyOI6izByUGkGo`_y8Vfl^}3x0&EJ^qag zzSCk6#C^Qbsyit}Zecun`$(Ke5yc_spr_FCM73Vceq!lGn zck+@1Rr=6j!n;r`t7IEX5gt-__5oLWK12HX(1F*-RZ4O;-2r1OCjBii2p}dle!>;A z>;(U+z?2>+hNAV);i|ddO2GxJTCtolCfVaUynaEB7oYcmn{SNvZ<}^rnY>uKu!tf) z9Rr*o2CmQo(hE;C7;>jXMeXj2DR)j!?@rQTM}B*<8Am)XAY7ESRNL~4U8?R(fj>af zcg0<8v5s|5WhSj(-D93&VCF5&XpZZ=1rGV?U7!cBU}Eu$V+R8q;GinLiV4RDd|izZ zs@5Fz)*5p+DF5&*yzp<*h5F(yY?xIuBdC@h76k%0oAfL%~lnhRVKuf1=;ZOE_>vq~+=m^$2Kbgg!FxJ-RWiy{2YG*Vl9DE|q+L1tu^uV^lBfb+pR-^mE? z?g0!QsAi0WB8DiAqnQUJ;{#utD=cxweEtvke|G@UXR|5Ee$5wd2>+Lu>0oJRXZjy6 z+qAmkua^zx*MG6c1JlH{ntnYW0FI*TNPWG6yRkEb01}ot9_bKgBO&EIQ2)ax)o3~) z8D{GaKPgS4TwET1B;J{J1@~BRXawxD+M+bHc!O_Om8EZIzq7sFH@(NJ&K11NHLWd} z1;YpBGj1T7nmcV(l&cQ)1e$EcaQC`@{r&yC-;jQTq3S&Wc2;NCVJ!55&Ejj<{W?Jd z2KZ6^UrI!)v8?S_LS}lMrlyvG()=UU)?neE1ug*BC7N3a48+HL&u&w^2()tvz9IVIG!mVlfM5F0e zyhwab3c6`J0@XGXcw*mNO<CQ&^J8YkyCYmmv}SnRdzI1|wzsz?WLXpvl+<)^fX9 zW$d{+zmz(bEOwpwr1stu{vG%@3bek@I9!`jTeDyH%BVl}70(c1O1R-hrur_QxJ;EV zWL;Cg39B*+y0(f6ciUVxM>LQQfhE`sUYPLlKLaR{tRL=t(@ zJSGVhc{Ilk61mMQH1dj?{BPvu3xzkn-FpgmbpUzO0Z?5yU7c$Fn}I!>VjOOk3rTZ6 zr4#uKPOibgi7}pDKfke|JQOgr@1O;FC3vvmx0rl*3VTS>25!1CE)crlF@gtkL2i5F zZvV0m-U@UezMPu+B~Y$C#bt=;7#TDV0WJ-~D;yTtf`A+hV1^NW@cY;tSVH1DqL(6O z9)R5e6BlRq8#w{KJ!bj8)62sibIj5g{bsIHG{*}^S5sZwELG$ept`Je#xYhjAvvwa zY0!V%twSoVisJ-;Bw+TTAm9~}aGi>+F3L8&i9R`QE{5R9Ya{4aW?N-&adswY11I)sO zjUA&a{85@UQ7IqYV>~J$S3B^252+y*4{cI3|l1D5=?*dNG5TxtU3! zhbSMW8meX?Ra6v=E!2-`(UnqA0rmySzxD}GCCJu1bh5DloR^;|2A3$uUxl)Hc3 zc0muow9g2<<7eei7fn7%=yDb`O3IDynZc#U{g#V|Eb{z~z*E7z?3}K=N2yn}y)#(4#lt{Vq)S^>!^5^w6uvpg15B+H zFo2&rk0I8Qx8#d#>t+9OF6`<5cXFR@A4BhZN5tb84y54bYfDklYy@UiF84mLjXz-rakq^n zg<6%~SBKK9N!~ENIAVAv=38{JwxFUqFc8)}2*3+GY8^K5lBWtZ^^C_Tm_LCJVo7^| zk7|h|7+9Prne(|<5SRMnZ712-GW-onH*!!zevi!h-FEEK%5Lg^5CxqhaYx z3`@Dm2|>wr&(`vs3uFe~>aI(-K_YZo9N2By10ZCx-Op*~2R4twd<#EQHnEmRSCGL{ zNpC1BrZvDvG|O^PH~6gR_^`!H+dRao1erJbqVXoCY)((GudS_WB&2Ulw#clRm*qUT6+~t;xh$^h zHBBFd=&I9Jl&d)vR;mgyj+FSoT6{`_S{E{D|01<)C&A+moCCw1<9O(8EEaRhjLSFn z?YtcqGwK-`X(YK@%!a?CVY_x|82nap)!x$8mc>}4H{9(cckR74;F=x9vEVk0)CgKX zXW`T~rrNy$PgIFD0{^z_18HL|>=dCdp@Vr6uv9>Euk#|?b?1p3n{_)g3do}2C>oE; zah@`s4Jot$BnOb>SGS^}ftfoP$Aoox`eR{1ID0 zK+#gGG$La8@OBmMXK1WLm#2TKo^FRf!Mt+&RR6SCf&XVhBCu!AEVMW*cE7;+lX^eM zKk_*z{otUZE()Ih&OdB>rl3-J`wQJPMc}%KxRRTV|17-LV0*q(WT>exz&9e-Jlb#} z&UD_I6$Drhj8ze5vJh)81P1v3yIvLyQv39v0RY%p{$GYP7tjB12EO98w*Lhy|8~~7 zbO;E2S>y|8$I^yGyW`wfIckt4?s4Jb1med_Sr|Eoaxgbe&RqJw&gXB=JjVyFKnIY( zShjVQRkwAwpH9ymJJ(M{N&otK)>GZbYFssnrvAH7D&A_Ob9)eNY){C4(*d@B>hyp(vWJ3%BuWgo33?TjJDxN<1dc3 zqR|6>KC+@6J7A$L_&jWtdZ5va9~tq3Zn0;kh#MiItO6Eeo!2l?JPIY^)jYDEe3hn& zd7G7&RQ#(BQAsuPVoJ(x3@Flc+}+-*gaOsT3Nd5Sp$*I~+S#6A92^8_#!l(LUT1eS z8Z!)E_x*WrbvE*Ou)Myj*XQZT)%SW))z=e*M{x=b!pHGvm*jXl8(d{7dma}L;uZE} zDSQAUx3>0*d9XyiODau;#uQbpX7Li3*Ty6j22Knd+#liJGF}-Kbrp&BxKh7KMACVh zQ>qzd9Mck-(ovO^831Gqja|~E)`1Jo+y@6}Kjrj5S7Q(&j>6a8{obBIgWO-Gsh<=z z@~Iz#TcCvWXrk>x1l5j!>o4kCY9!H(TiV(MDN*ku08M8GL^TW+0McOUzV~C1mk23> zlKT*lo1AM3#Cf5&YbdqZ64LbA+Zss*@&oIkaL^Hb!YbXwJ8DITyJZ<1JdnLLVT|jW z8k+lY-D3CT!*qDtA+r}@KCkE=Aq`>O3dD}z8i7l@=hr<{Mu+A@cTmTR2C&} z6>_3Y+ggDz#L%-*jg+ntSVUPV$JDxX<3zOyE?o#sS~4KCKww(Cqh8 zor+;khR+E$r0F_jZTVqq+`348CsKQBov`M(91#S2gp#jTE|3F@`c0deaQdrw_c~%M zoECkJ*Ev{62OZCKnno+&Xz|J-Y4h@pa_M}V^Y45@$|3))z};gxVst}Y_Noi2p{bYK z{RrA5*+#B_oi4+e-+$7Z8)fA$6+TS?%c}tX#)PiqbAv!1jSKpN99Jmk3cV#N`+*#f z$-ObA#OK^IrsQ!PlPi3$Q2Ik3m&v_RrsQ!Rn@j8(LvZpuTP2Jcr%ww}1IcPmzN5`J5Tds0bwPu;O@h&)^JEHRV_xJwv^M!4iP5X3#IF4Mc^(yUJ ze{_S~dm_EUvl1Y@%3-8!$}un#=OmD%edU+t7)a@G@23Q~4K^q|-`KK;lSJnzXi;zj zwjj6xffdClDFs8KP=Sf9ZTcl%0cT)=_R>+daeM|dCE&>pe2^{-{Xu2~$zTc!<&=z!oh0Ga0f%eC6wj09%cy2Co{kd-!8Xt3&xNr&W zm%r%0R1OUgm&YO~W1SO6)NAQO9^{L3sPfIlf?kAZ`&(53yXqLCKV}ZOA0JO7)5NZ1 zeCU8>xbcd^DhG!zzQ$%JYWobA2b!&&0bMei%%eYN4D&^nM6sjQ?L&~1sp=QTKosrAN_q1hFWiwPTocKR#^#b_?*eRe&$;?#EB zWr<<<-GP+CzpfQVEm+(2n}G)>+WZlFd%Mt?y;(%u9hiiJWW_+GJWev`Ll+;)kNJRN zOqI?nZZ2rj2SXKGAZZ!?b1@U*+w=04!B3u1zr1}SeRN0kb7-WK1hpDyMGX=jEI2(> zhAP|R4tCIQh;gqW!GE^|Ke=U!>Rz?Mi31DTK+5J`D5{1=&9gz032wnUhKu0q`O!sg zM;F@OL$6S!yybi4xZTXtxnBsI6Onoo*nqgas*fl+Po?`qS!gB%w&eCgn9cvK?7M*r{+P z%!~s+`3+|jN{6fx`z^sncf}+tOUSzsPzGD)k=>^G`Hxp6BII=S5LS3ijn!-tFVPOGTY-$xqZqLitAvW=9Q-_YZd|V|p`R*AVkBZBbXyz=$E-Nv$x@zR)cyqi ze|(+uZzoXK?W?J6+qOBi`K@i+=G3-r+qUg?YTIt#d2VulxNq{@JV?V<#~7wY@9izgPdS zM$n7^!8vKRMaf%9gY!DFKn`|w9|cBu@f80k*ui^5y?=ZoE4cQtkBZACsMIubMV1Bj z-)Wka%CGB{IhK=0waa~A03X3t%_RAjy+@iytYs6Wz!2aMEVlY)f-gcYlbGKfx-K)A zZymlBaHBQ>7JSQpX_cF!<3yz*;n(ibxAZ8Df`Wi2>(`QLEt+oV@5yHI*i)G<<{Brr z*J$Gu(=ik)%7s z&nPRjPcrS?4_Pi;V;Gl$^YkJID}}#!0&{1x5U?$ps^H!(2c2_QfI8{hLX;26e!ayZ z8^?%UvEI^-#PzY6Q0Xgk1Xw@-yWks{pC%y*ivc?;doBr$i$Xl>rKZ5w;+3I0m0;=X=+|hx1FE_G~G}*d|a1%$$LSwycnh~Z{)ab7AUmc zlz3FgCmipROg1vjcj|m4aGW$3$BaFv#3INC>3Su8>^zUiTCt4GDhQ{@>{OCR(&ds7 zkpn6)u0Ms1$UTahO$p(Fjs+Q;^Lte+ex@2*lJ!yoA8Eq*?&_v30~|pcmb~}Sg1u?O zDcF|{mL1k{YXEY-tppr@xV;5Dh0jQMvyU-{Muxlyv;taYZUF(Y+#bM%ZbObxN_ZZY zI|!LglE2L=-dV0<{4R>&iS2@9mh}M@A7& zO`DNAY@t5^UJn$aVT6HiS)>jyC>{DI)Mxy(ci>PM6NQ9z-gTSewy)#w=IK%(+%L{^XH6TEak=_)p}Qq+wa1*4 zTdCkg_aMLS5>LCl-o0Tfh9cAA*3vs)J8uhrW}fOZy^>fs(%(4$g=LZ{4t%kIxadZ$ z%jI6>~Nm0Jfdw06Oj8=ZCnTo%4j`y+`f6c-@Ui(4O^glwH>ila0T&AiOb&N}y(0TWf2 zR+{~OVYIjr9B{Y5D!ossR)l} z1v;Bj=9ob$Juk`tht~nMO!hf%dxG0mEHA71AqZuCE6w@A4`tIR&H2C!U0yG#dD&uu zT-=~!y{%f1#fxQyH)E0aiDibrg10d?jz%t2MzAxX1k0kIQ9vbhJJkB#))gD{l7A*0 za?@BqtLCQ&jp-ZhdKI6KK9SY!9$`V`<%(OeerAQ&lgvU8H)J=0&*DyV+qMtK0M3JIb?d3Czi8Qx(y6&`qGikdLaKfAw=ujT)o52 zW|Omi50lFgs%%(F-Oo69@ZR{_7qfxI1kcFKQSdjRn#fc6$B$WgCkuHujGmJJ4IZ3BON^!gWbt}_Pwkt%V{Ir_9}gtO7_3$D4S2RIcqjUDfHc#bUj)bewX2%iNBolBkt+$%ri7 zT?d`xL8%Vs1wY7KiYC)7Xkjy|kU+@53udQNL=U4Z$aYF|Ee3dnpGGTLHI*J#}G_D3(swnT;xXahxYyJ4?8(Zlf<0DzTo2@TqA6Gs%nH zmP7O*VrHkk`yazY&#wNf9~WJ_oGM+S`EIjjaRLsmddyd%_KXK7=?A2TYVTG&F2j_+ z?5p2~ zJ^)7kG}lWJoU6RI!VtB8RQ|RQwgJEBbkx%+4R(vQ14ielYcovC_`GsIh93keEo63> zPSJj0VQVLBk(W1oNuW{)@h6~HwrU&e57qlURSN-S`f>`<2t3Z8Ex6ec1a99aPMmtE z-lBpb$d0dR%oTX}mYkqJ2DaBOZ!^5Q*nBI@E8ZVZKURF*d_2|Fq<&MIh!FZ>M1HQ;Slj7bNHHiU3cs?Tl`QIphHvgI&2Tb5 z>;^dbZ<$KDh%Vlx?Urm*;hk8}o@UC&G(7O%6fNsYi)~LnI4##3VhkC)IVrI`VT_P` zOHx(dPaa>gIhjHWzE3T+qBT)nmTqm*t+h${b7wF zQN)nI&X$B@^~Fl!Gs%+p=knz-56-*FNi3O$iF1^l@6sBa(NmLr|1cPgBO#+k8HG}N z3Qas9zqe)BH=z1`u2*(?oy!fZ4VU!gcA=lXH8$%O1nv%7z^e_iAEX7Twf z7~Wi@gQ+IFpN-K{yqzMJJi`xJm{UC<^Zqtbrq-?^kuiE|5!&ttdwa9A@!6<3_` zm14e1L;#|if_Ugo!RLY^aB|D)CX_A#ver|W0m+{cn0{WY)G}NAKKgx ztk$C|P;U(a&0PcrB#M22naK9HCDorl=mw)abSGO%M;YyZ)1RI*WJ5`ySWhB=SD7Nr ztG7*01!LDM94*DFgS--p&Q(W1`C2SdKVm5T-k2DaUDAd0#1v8y`Vt{Red(;=eSG=| zK4-+TirqSU^|lxinwPhQ1vvYe2A!cAeB)_sc=Nf9(ustH?9BjH_^CT=>&=V?isQtEuHtpCTzFp}&wi)IGU8Kv;Hsy2iRVxo$q~W0qm-E`JmMg&-59Hqh)ZFZ zUZa{Y^Ld%gA+l9LmTmWodlgDC4U|+?4}NIJhfS)svi%43;UoMF!|t1}<%>ZZrkmYc z8;P)4T7%U`0`3clTd3e@<1>IQ@$i}g(H`Wz__?v2vz^oH=KH1KGIvkQ$A^L5qZYv|(?NQ57$ zY8O~9pF94;xPWAZMwZzXUVLy+iaBAtHW!eW@<-IKLF9!N`%0BLgkh}?l{R%@6Gui< z_$ntjwedoNIwtIJ_~GHCu+ptH_|euWGU>YPJnn{unN9PbiK541m;kK&Hy6yiVcCk2 z;MC~R;>nrgKh(h>bg$QSQh0N&U(a&e^^(?X`(K2N6Ls~ zF=dbj32QBMMYI%Oq)K`TULAxM)&n>XS`2z91qV3}# zj|sy~EpO7)p>Y${)6-n?-Z#TOf1;KBpNhjuk)!m`87eLp+rsmt!%YI{q7w(a$^%{c zEQAYi*;2i<*$6NX23S0stxL)g&sJQ_K1+|_(%;79l&NwwLiJ=koneS;0QjZ_j% zq1pbU^k|a~`wZ~o-xxw(|E5ofmFy@nx-3#TDC!f-&KAzWS?IVj{$}`pXWn zKBdPhPHzJw)AgbX)|H2q?TW8@9m%0SUpaAB^Ux_HBm^JrxE*Yu?ykS*TO6CZ+ z5=g0Umd9Ns!7lkt5TK-+2(}%h;1Oh?EGgEchJAcgbfr!P7P^Qec9KMu_16_+L=yeF zAfYIT>?yxo7FO$NYvG7~M+7~z{SF51#z`vebP@qheHcv=kA|b`!V*h&?1M`D)VpHf zZXwe3k$wEAU30 zuQ8j%5tyHSqfI?}M*#tS5_57bt8F9uz!z>$Fd##cU*tBCqt48IC)j5OLtd`N8xxgE zico6c!`|rzcb;Fm$3Eine+eM_BI}Fagg`(jG5_r`c-T4{xc_?$SA18lTO%$%Z>W@y zg`Gs`30Xy@M^N5U(hb!j2`(ZXwv}~+Z9LKg10Xm+G?oXiitmU%#r%>tqf`1l{$wWW z<7ZIFk*{qmPA4t2T|{_ukzXZq;KCWn0#nEwK?Dw(kWDnH@ab2{#$^+vs1> zp4K597th%pSHq#-Ep#p7R#mNSnibIUz3vHpPOGiM4Lf1qB^peysv5~^(AR7&f&}kh zEmgJ4AM1)>s}|kzr^goUmv7e|3>*6u$e)h|mxmu}!(vr4Zdy-AnRL%3Wv^#4pB5D7 z#R~Ebaln2(I}@FDR+MSD)3KxjN9@x(k)F#aDJ{%-oRE2u@g5Hf zORu;bR-Dg~A+MDd*~wPDaLuNp1cGnE=T_NH>=CKISL|v901|ML&B_HcADBzRQE;52 z%^TYZUFS`ZP)GiNlNtt^kmJOP(+)M+ACtyPwE)Fmq;?A?$}gfCIG|4;IUPu+HuaiV zTkjbJC@v38V6@yhvMNFuYO;-hU3Y|_E!XbP4pcz#<}if*A59;t3bDow6mJRQ-5<~7 z)>Sp^lIx5Bf}C5U0$X=_XUWG8oz>KfFX@a}$wzQYq$`~HE9#K(m(Hsm0`-rV&)0@e z1!`~hf>S|P%COYWFqKrG>^!EqsqxtGjx*G>(SE3({&Y$Mg)YiCr#1m@VpYK~%7gU} zbP*ZkVhc|P=f~{_HTmARYgqn(FsW9+{Gj!Qhz9y_tI5~J?0#YCY!C0(^RS2S_fuo) zED-%)R+onw%7el}i21kZuoYPVTPtUiV+`uta%BNZWm$P)X3vf*1peuu&^jMEa z8K-SqdqqZNXl4Ou2OI-Zd_kz%w(zT&a-cDYX^5D7VRKtF`*ekNs&q=_XLg)AUTGX$zydLR`)fV!vVo3W9hTUPh%zMCd(RZ@Z)o+#32f|&G+X&tp#+7X57V^^$nKd7V{XO1X2Fk&x9GZu3t+)$h#g6R}H_lbax)x z$B}4H@Y=fjG|Fg5$e8*8N{c`q)blX0KW&PIIMCl7+ugc}(wJFO zlt2oFtEA8PT{jHjfcMg(c(C411?G$1TI&Yv4@@Msm3Ah{BZV7Zkjaw=s&+OIKJuOs z&-(`{rrrv9+Ns}{kLAW2{r#U8ku4mvx!&2iU!#=|i+*N>2-SlG`yf>hT>}*diRN|n z31Pie5zpE0{*HH}g=#xJpZn{Xji2Kj3_U(?)M~DW7mKCxxxMeu=bx9Sr{>`-wA`DZ zO#J>#?MN*4K_?W!uDGLm{#aN{uxUYxz^c^0#rOhCfb2!$e$LybUv0@&{$&2)C+0G2 zlvBANE%@l7m@hGT;nnn>Q85G~Mb-<)*CId2tZ$?LH{z)wQ4?D$Q?gM6+20l9+wt#@ zRxlJTL=;6Ru+h@Ci%2Z9Eiie&|J)7oX#;Vw-!5Pn+0K`f(T6z<|HF&~_a@&j51;s) z9KFYU9csYCA_nzM=XokgRs*BpDM%Y+|IBFU_Rv)|$v?ZyNi+lnfw^YaAK+=_afN{) z5}_t*qW}_F>Uf(vd@m+LbxzjzuDM0>23vu#~38M)elM^zJFs3T2IO*Z)H$jY6SNn0cBbhq*GZWYz5>m9gqwMk@f)%3>A)NXnU(hA>iHD zDT{i)MNfd!83#tjd{CJIa}h6RN23-DR_|@aP3XT-4sx)|!d*FK2$%Y0;@|5smw2`= zWb5&iag3$bCg7c?T==<~OMV$)zR#RrqeM<)$Ue|-*c=7ZS}_a00(<^Q zk555FVWmetXbNn+~=1zs290jhsgoS^zH>c!VN?yuw6#XIShTq zCOWwe@YX!372@~_9i}GH6nqt#_C6r&NAV`Av zzSOVRZh3SLeTZ93?f(r;;2B4ZvW@CH*)d=mx|a(hoseVD1Pvbj$zDXNX24@N6+VZ$ z<{On8uEp^uGnnr#bqi!-stWIvGP0->8_}C1k>EH6LVyLM7o5MuT)9*0nSPPDSxZw< zIi}mxA;8j;OzC>v!fP9@Z4cs*`gWp#!rg8rS|#W%;vs4!qp-IQW0Yogf*6Pzs{3~_ z#_!DM_q_@YR|F5V_dP<;^{ljbf{n3d#{pnjp)*?a8`#_cvfThv_w~y?P<`qwvPeV4 zWSw5~mB@V`MODmYEygL{=$r-?ao;B02%PsWWEyRWETRuBPX5YzeA3_T#Z>{|ygGI6 z69o~rE}R=Rx#Y1z@`%t}Fd?>GzwqVP1Bt{t#yc!JPQdsJ(+yO-ONJoSM3~aTx$K9~8gq})4QzydAZ3y%dqpMf|pK07Ke z%Pyw5a>qY`e}gaVC^9V$#+N?c{9>UNSIDaJo!bgOL5xU0>3To^bxit@g8zpE{<;fBxY)zk&f?yqp#q#-Uq}k zL5MDZXO9q^eEC|A=kv0EjSAv|Q>k z%W2AeznP(TXczpGX<9M&gdwkvd_f`H*rV;jypz)I52&{0uzNEGy=-^yc z&}y1%>&0rMUkqP-)k!NwCTPM@EqNM+aqV-Ek2l5e+fInRI^^V>n{~SM0e+kI(ZJ`K zbDDfhZ?(G0+g4gYjO$?rXav#8fUyDKGTjqgICqmJzqmDK>pNAVq27QY)7LA4ADhQP z`@99L74)k~XNOj`AT%Z%P?UH=fLxGP6P2z6taWZTT8NQpxIWAtle<(p%8L+sD^RFq zH@h!?x?we>^O9pSK6^apM}2}*tM?a}BId_Jj#Kx=WeCuFsrd~p$EBOQ#x#0i<}%|V zZ8w(gG}HjiMDoIw4}c}GiQsGaXc>Oxt#)^C&UxlcgC2;fHYMFRqvScUposv)Y(kq# z<(Zw2)b-6_fUBBRk`k`5G`TAoZNe|-D0pFg8!eG-t5PyPkjw0^X1^ly8O`G%7GnKK ziizr*@`LqB>>3Z+FcV)k?6IdK6Qw_7MU917x5);ga4U02x;L1<)2C;J<}~L<&E`&d zO8ssmPV@_nRZeLbCqyO2mNCLggz4dVdtTf4s?g@%6L1%1q{3*-33e?h( zD1ZYmKJ|pzW_?Hgsz&%_dPBzfq9PhLc0^X)S1U1+t4$xs?1E}UHcA5$)0{nwqEa=6h-1f{-*TZ(gSOO0!?_Q~r>W?*rG2UH@|vy* z(rz9*Na!PTzX(zS7`!hz%VY73W1ApcR#z%@`{zZt_`}M{6?0QA>>Bc9A&P zWhH?|oQ;v89*SvmReqerX&*3Pdzi}+FM)RC(_;QwR%y+r97O6iN2h%`}OXP`Mgr}6~NONu!XtD}MFf%gO4L#rGuO72Y z8@Aw;uRKNvtI^99C2+&ImRWt3JVnk6_smQH!`L3%rJ}FX-{Ega6dSOJ2)IZ6ai;z=sTYDz{D;p4RaGPiX+%oBZgQqC3hQ$VPYL0zX2 zMiFTZLHz<>p4m)jyk9M5Ma6u!WWZ=$NkWp{fS5e!YSw{*rfnx>F>9#@F&p|ui8%{S z-Gy!I_r#RMd;FEiF+FYi6-xrgcrocME zA76p9hrm{f$M0bxN0w`_> z3v}Ad7x-C%#c^KsB3lirvl=4sZECF!PA)vACTa`2S=6RxGq?TX-@i* zpHy~g*V;yJz{bd7dzM{t>HZW!X!aC^s0lZ`j$lc_3T$FfrJ!$Cm#MLAN<7QfINHnz z$fxj!>9W%?qql`8VK*=Msw%5}NYHQOC;n}!5ymUK%0k^&4FiOpon7d_^wF8BH{WlC z1!^a%D&$y)0E6nMXFL+wmj1!$84ttD+m-t#yRo#O$95AJE#L9L{d&|FyBEfrA{j=& z-yWoKGXTw55bpmpi!3v$@TZ{WG_@VKe)t`-T>%85P>klckxX}SD|;s=!thf2G7ks4 z$FC{U8mI%{+ovAoq4sQHY=MKs>`io!M=OXXuuw4ch0R>qIKNC&9{3uvV%FHkfeVx_ z(A;wDnwBGkn1xFFHR^@_Qy(*^8`JSzT&Ai@@CUu`R8=;3H0=YtkIO;PK52ZAV1?QP z^x!p2z~cOc({nIQdATr%Zm$7yYsmGOaXTzX9C#Ld6)9-vA>aTl_hFFOv&xLMmuT;u zata5bpwaD!eE_c*dQvCa3_f0|;J)8+3L1KRC;c?4QEV==h5M+{0=y7LDc1q#1leLR z`)NAmPfE+Hd<)v&!#w)qw)8^-XtS7sl!Q^GIIeA*^&Lj>9fJs-1}?n@5ACHsnnLwe%#;-&XSmwzm&P<=Xqk!K|p&e2i!b;#h9 zL+w5+_KRBaC+95m9zhL;Nr?-up&$F!7S49MYkqW=uhGrJ{Uz+JGv;YWoV;e zX-4DB=%|0$MzJj%bQMGJEEvq*G&+9i-ksE)Hh@b9aU^^3pV(~e4)n_YU+xC4ltLwjW z)YbL0JK7m4>s4e5Iz`=P73}8?NfL9a+cbV4xwdmO?0(pAlw)k zy-*}PGoeb+@=gy4@?cxgcWMera<|`*YO2WwJdYMWt`6;>j^ex$#m&D$6_hQ8CtsRP zkV-0l1_$G&&)Hx2N>9??JnJy9bIpN-A;Lo{x+Mpha*j(Z?J~jI2B!vAoN-CAg92*1 z0xCYPV#+)L13#m4;$E7{s(AC}59#8J=Ng?TTea<1;$EEczZo`5F793GK~C_r5Z*Rc zfE36n#G0w+XIbwb>J_rb=NMx>-h3g~15_aCQO2w(wJ$rVZe=i&GI_9ElhcJjwJC~4 zEKeL@;WSga7h+U5N>Kb7BHmp^Lo$cFa&k>Gp6=qFVSoIQ#!WT)dN^ZB_gp6U6uUDoKsO;T1xBj9-@kq-$wN|F)g=V(HkjSy_7q3jd1qHQh1euA)FU#~L-soNvUxQ* z@nxRYIFZ)IHfIvUVjQJ!;XzlVjLT$qpzYU^1QkZLrxIUBT$2<_rJ;OU{ZX%ke836N zz(-@O=+0~(?bvnY2dWVYOI$Z$HA5B%PMe9E1|lrG@L*&PuDh~rA`nG(DuHvy`RH@bKgicLqK(>iZK1tQ zzLANMhhEf1*OUow6Mf`NvpJf!MhF87THOd{tA~8#!<1?~YEQ;3#c>4!-5)2$f$kO$ zzncjQG^k>;JMXGNZe}N+8`s35n7^~~&=G^68Fue{sxVKLIa%h-${MJ~Ib?NHr(l#N8 zY08jG1LyzqeyWVuw$fCSp*4m0OU)0*>-Fz?`9LJvui_XghVW1hTu*V-rkP2VAGb}w zd}Mm&q93I%zV0vmtD;u2P4&AAsI5Rf_+2QmhCYqVyKkOkw0ZTo;i4ZlXsCjmO(BtZQIFGgafO`=;emB<)qa4!2S=}p= zIMePC8)Mrs(=})-1AUD6{Y}Vmbx&#Aq-35DhhCQV7!0T%+sTj&4`bs*e`$Lj4X4PH z`PG{Sq2Do>tp?P;g5RTF-IA zX5)3Nk`LNf4dV~}#3|1oyOeM`@%OOuQb{|9r)voT_qLQSG~c`h)*K;RIn~`;pdC*Y z?a4jnpS?d{0`c)49M~!dV+J(Tj-lpJNbIfJ;5^tg&584LM+zq{iRQDKf>css`s^}Y zi@Y(i@ysuW(Kev(N`G97BbLP}W&Id(JFIh*vL5R*?ysegk2Kdjxr)%mFT?w@NAWIL zK_*7#b$NMB9dOge!Nn(>N9s&n#CNMLR|NLCqD<=&2vKz{m5PUUmiyjM_5MH?k_QX-KiZQ{=gI< z&*AMTR1^3;5Budv%<9KKi&B=%cgX7P1 zf)J;nUyV_kN0Tqbtaqp=w>=LX()`-pDd>=%Db&GoGo~fwkH_QSHW1g0B*FdpV0VJN z8f=y!nQ(z<|B7qWN6+wIPA>|L|1IaHv9*5@1V82DfNhw!2S(Md6V>u-?tL*JibP6E zG1-0t=BNSvIVDgi_=>wZK7}K$+=!_PZlP-?->Lrz3Z^?AjJ5j=7AIE`Lhcd{+bB82 zlR{Yk@ETv94Q-+?)056a=>Eb^^r zG|Eui{W`JOls$POabI$wxzfXrWJxd6sQJ>xmW(K5qD(6di-QByx?(AwNGdb_VYI7#&2iVyj*UBAPD zAGFcN(VxMcmsK%%75*+RvcLein2cdjHi(;PVc@7d?^WQ^rzhK%$kud5N@PRCSsOp9 zla~FGyC&i7{ z?vdLy8Aa{*<}Eou%vqkI+Ygekdonhp0P5F&qh<3lbXysFXbaLjLJ^Cdvzi#IYxk2# zc!VZFDbH>hBpc4%+5-aF9+>5D9x(o~eKnuoohqSVbwW16d@-h{l=QPOd$Q`gacr8U zLGPI*=s*FPyVW{+$gsn25V#8?2)O>PG3k#{ufn`lzwPB zaqkn?)f``xmU;*67Hv}Ov4nqcF(At{RLzZ!0yc|oJSzk8kVAUVw)*CSXook{kNHqm zfq}>mC473oSXdE1>i#!!DLdL>waN?Q3UtgMw=Qk7RI(|AS08->F4V)euc8g%nvXo1 z0lkSDn*up`FFbQqz$B54MGcpSvP;&MCOY3O61*{T${B=n(+V@@9A6RoqLg(9ne0yiR&?+m_dCWRdijBKzw>Koy9-E!D3xGap|$Wi$XCCd^LdmTzk0`33D?>fP2DWh zIy=BpHv^gZ=0O5m_>)e#)~t#v*>SS&eQBp=%PzL} z2b$!!S!+hGRG+J4iEqthB&acocoj1~=&USm?nK;3X8nOgyVV|xkYZ1pnr{a_}SU@S^9r2 zteQ^O#HxvWZFZ9#H6JBAR~wEsHI0UvO4DRAoo1^ElPB|Nwm+RZ-Q6pFXN6!nt$tq* zmHWe~wYr}#YCE4qg=!2JM}4_H*cCNhmek+Rr5$QFy;K~_=U2X^(mmU7E}e8Z-_IrQ zn>`!!fOMdbTslFM*yGr=?2zNbimx~_z-qHjtyDybjavt%0LDefMJUJyyYVN8faR%9 zw|8m&os+|IOEmqZl)hZ*LaN~}y0i1jF9nlxS+(kCO_|7s^4ivp5jOzG(qw~23`1|t zpG?={zMh?%Ye7Nm+t|;ii+AB}0Agmv<%>=+QO|L0re!79PI6`PX@bDRs*Inz2BW6~mLekXab|u}=(MYtN7G*bm=-U|3p{kN3?NK&$PB*3XyK zqOIl8cR8wdryTfa;3@KTn`LqmXs?Z1 zBv=|{zy*E}*-n!dVFeYP^ng1o-S65xxb#YB5l+#)7F{?FNlm*@ATo>q#uN?{HF|@z z7dfN6->KTV#66SJL)zD&uF4BT7T1DUaLU0PPb~^V&E#AV^aClt`rYexs5}R-ReO^y z%e%@&LQkYrpBkU=E^&k}S1ZmKF&Ft;zg-Z42ClCYd=QX-Sy$F{k^PGpg)^eKs-)(+ zsCZg8Y2OSuygG>}bJx<~~q`nTy%1%cPp+Ubw!G=oNA&0Q~hrga`JB+_zaN4C$g z%eG%s4k(BTaSrL)c%UfVV3X-n^g+t0sV|4> zKsAv-w)as(mO-P0>L%SxcI2mi!KXZcE!`fG?RR&9;R4NXulSIi-@~?7XM!K|O^=i^ zqNRS6;8rXfCw^o;x3rZ@DPSX!?+8+viva$M>`KoX9bhN zc`P?lhPetnK1~2RAli%1IK={CYAg0yDq19eRW57`_29&zMl0x5`!?=q3v~u`R+en_ zJjA(i(k=dj9Ath$|JBpge5PmUK64<(7P{!vCNXz;aRyrj^l{>egRyP~_GD;W_5p;F z{W+SzXV(irMY5%ZXeiAA0{S@loJi-CcJwdtw6HNF^varf+0m);U$i`Dz>&J z(WUX!64+IkCdNO|a8ano;P#9J04n{`2CRv}d)oANv0K`4V6mVM6SDz*_C{SR&qug* zb((lk1q~k-qTtU=n#aiegT_q7Ltv*^_XSrHsiBj--3rdmJ(E_l=Y9~nrBZVd7hG%LMxQf$! zL_!o^=V{yxkhwyDIhfqK#y!TFVBM`Y44=;3XQq`IInyypV&hWuiz5Sk&$CWCCI-Y8 z=A_8m9+6BEL5x|TL1|i^!bCTwyKFs{AlSExW8_5-I?IO42m-`)Nr%}lXe zqs^AKtBGxmzz9rE;*biB0k_>OXZ_j!SJAd?=F@}5spP&RGNR6|rlqL;+=3VH)}VGH zK_R*fa9mOa|4mgNPEa>zphF7mJGIx9=K_C<(!(ea_mdvvQTzh^{1l6N@Z9>VYsaST z<0#+=po?qx&rMT4`J8X^bcaV{Q(>YeaM%x9X(ZI!cni;E?wQ}0n8FFb0Oy1{(}?NM z&)-O2S2b2{d1lwNFp&Blb9>`;vhZqtW#9@*(f3^0JyZJTu(#0F)|bxpp5|a~lsGZ= zM0>xSxJLFm%K4Z2{+J|mXf-_SmkgK}BgbGj-b$)PLq$+l3YyCEE*3?AHR}e+HG_g2 z(~B8U!aD1?UVbLb?lYL1{!1R5`qz)v?|B#I!w}%|&Vh>R(IH8DZw=lCqk(S8gAMoR z=dq-{J}Gfk_A$1#l6eU4!rD|KqoO>g<`-{hbotv#*bsW!YJTwwx%C>T@#X{Ja*s&`73dz7dT@7fS&|5wPf~cur+K)@>uHTX1$wdk^OZ~abYyKQv`|+kQ&*6C z7H3t^SLP-?*0F)vVeiKI+3t{tsvy7xQ#@c!vX!)q)mfVQn!nPP9sSUcTYxAtsn*NV z_dSy|^i9$nwbPhq4KXWeS1#h;4Y6`WnEL~Dyhj+zTxNounB64r4X2xGjN@HIo&Ccj z)%Ex<5jf`X-F|dLb41bJ0y?Aw%oM+P(Okz2EnnK8W4OB!qRZ2|V#;Ev`VOe0hrj_T z$Rm+)wJhSZv<28O6*+os_Br1Xf^{s}PELHp6BpAigIk8|kxr@{w(%~%ohr?>5m^}} zL)&Vj^-^&7_CYW?$W|?l>URS1e&_+eoG|{nDXF^A zrVfWp+aK|c@vr;JfC21*SO{~jRuE(2)kvp8oG+3{fs4$X57RkL^=&mnI}n&12l9aH zTyMA`*^jbL;>jXnm4M56N5X4>o_fa`WTjQW3uaA;*dPp{R4{2c^85s)TP?N8<+?1R zb%2)N5({==Qm(3VnktoQbO{=aB#^$f;!)|n2d5ZI%u7`9ZB*r1GWY0lE!+O zF=>sxDbfGH@!>{uJ2?C}8!&Jn6Z5>-A4(e>0a0>08{qc;LtgdY-C%&T$lTNCaa8=h z?-_Rr;l~Au*I`I2vv4*yozbepc3jOs8KhGCF-trkdeLj!9Y7xIF1L*EFpWkxq8NpK zG9P~mrCnI(`Z0?XbCbZbH+;F1WrOX4fy^0Nw4)3&zUuUBw6esEiZXSkP|{LloHa3N zXOX<5V&$7t8Hpb?Ixg!7`K> z)Hd&Y8S3ii3}*L;XIn*eruen$n?NyZxGb(8bj0M5k@dbk#Qqw_Iv1rLc#c&fDs)%u zvudC@v@)bUKOP1LJBSVv))a7INg1_Wz^!AWoMV6v?2};Rg0YS93IXD z0Xb&ab%*tg7qO19eQRARIrlJQ{1g>q$glqd(HH?x@A(~Us|5w-bTff zreNfoGizkYGjCd(h(vIcy#f6aR54)_+7;7@K$;ePe|0=uOJn@EeRzCnV!KXPaKRi{(S2A;`HtO|ixgSJ>5~#x1?&x- z#Ve%-4lu)WCz`5}iwPB9@>aWQ{gEDugcFaF{c8G7 zR9Mw?2CY#ICVh6teD=cVHa?A@+g~Rz-HXwrLtaHBIGpl1r1iepllVOd8p%>Gf(@^I zbF$l5{)GaMd4_|&_!px3nlaAeG3lE<_3sVg`tx?KpEslR#@~zyOoXa(?>^tO*eP8ZZ zLUp4rk?>x3#yIP|btv}#tVGog2y;Oe%jl0|k7inXV?{@~mUhR2F|})`n6rb;g7aBx z^PH@vsR2~hGb4er)^0te1yI}s13Z-%hZF`GbY;`Fm(GC~Kl=xl1T$NX+3a_W5!`}~ z1Q9Pgyl$J~z$lKxx7|{M*&7RF1t^(Ce(mLyl%QyIm`@n2-a=3Y5zv~CA|A1;kc49& z4eMTSu2RaaYCCF^MC6yDtl3ulWoHO^CCYiSRQv?|<)N0pALUA5+OLwC|5B7QX!C_Hj(~9d z?v`RwJNkPl(Rps?bqX<+zK?^zSq8Ecj^Zn>4IZvS1Y_wFUR(D-1r4ytC4E7enUn%8rAWPoOR6ST+?!SF~wgP%eZPK;Rf}Xe*ehrUzHn^RBO{ zsk@Q&h@uhY-m;(kEt(#SPLrKd`O{ctIPtIIE7%;rh+rr@XL7{6$&Zhf(Q}#G-;zR% zcuIRUtcQ-y{jliRK%iQOm9BERP2E=i#*lxgR|=8qfSD=a8~4QI6mVLn8_>cYIHh!+ z+28}G6|uhJMnZC+P8>yZiUxqOGpd*i3vS3+W9D_tpP1X1&RyYRv*hs806-|R8^Wq@ z#T2f&JK1(n^LQJCsE#&)AJzYdu5)S<1qjaQ+O~bywsF_CZQHhO+qP}nwr%g`CY6_@ zlB)R)(>>E)pOdDKWkErBd*%ZRrIKpMtcqLQm)#7UNnpJFnJ?UPV0JIfwO0QCwVVA% zw>q)YMRxzBXLuQ{SgibX5=n8k_NqJ-(bx<}gd2U(P{Ve`I8juU$Pfy@*!{gNF^9^) z4T1#*A()AR9Mss$WbNBZ)BL9Ld1rGt1(8?jf_K^d!P2MpscRJro-@pLKItxhfbi=L z=Z|wdw~T@~wL8}7cqRyIN$_AU8u>aK`*g*%5AbdXr4X9U{9}ka@4O9_Y^PL3vV45& zWMb!4Q0L8MjU@Rne0L7OF8c-swn!9s9BGe-HT{l($p_+KTI+XZIt1bEhXXm*k4BM zm$Ec-c=m!N0fPx@t!bcwodF3=!3uQUK_JShSSgDQEw3C;=voi!z(C^4?UoLf2o6*Y z4vN*Y??~8!_ksCDgWu8JcLq-;Sy?(X2jji3XuU_F;XdD{>BRJ|HYpHne`98ZY%Ts! zN8Z8;8xKj--_B<+I#G1tqF>!QLPO~cVpkM`OO(!wH2 z)8&O6tc<@XP8vJAq=?x~a&~!+3;s2zPEUcT5a|m08v7?j<}lh2V!S9RTz~2@_v_Ib zXfsSk)NWk5Z|r8%A6icX)Q3v}i5AmhGVsszy{J>>r1Zxhe%Q3b#8*vAd>o8R8k^3y zsSO$~Rf5Hn*2A0vA0H%IOe#7KCYQS4+0LE`!|*AIf=_+^Iw*)or!8#;20SbXc+0Ol zALS){3S2^_@Ava=Ks&~d=gpESzNicDn7G%3emJ zlO-+2PnQ>G6T#yAQ&p1*f3YQnoD2Mt9xV;m(29&?76l^^S2BVTXivRSqShYd6glu! zw*{SYT}+G!qlXTLV#@gtYC9Q%7VYu^>H>W!_7aM&h0GMt=KB!8SO^Nrt+jDpI#Dx) z?S@uPw{w{#Yf2(gDlJyXf&LYJ+7k|QAvw5k*=u7bSt5hfnS+gV+I0b@{c!7Tkr#Gb zRd76|$}1EKlYQ1#f9~EFSnzSgMHl7ZQJ^T+g`PHcFmiX#B;F8X&ED=$ z-29VtdqeQ@kSM~#=PHM~-~?H^{}#7k**KVU*l`}3A^?zSMBi96^6+`ruXS%PtTSfZ zZ_jB+tmZ_w>K<^`uB*)QbrX#}+5h#IbC~sAO*bBuE0(F|?anHu!q?<_HHsCC!%LcO z`I?4^7_1Ktv!_-ayd3P6W_0x(C_mq-?(_wPnaPZdO%5ez2_cio(M-}Yz4f&^BhNw( zSqSw@Ct1^ZU#gmRlBiQ^c3av#^@&Zp+ncRpGU|NsCx%fNxcpqu^DHeSS?eLoz-n47 zvS?fOAX5v`E0~6I2&IKlqg#HV05X_25sv@@ssJn;qW-wkbKx69mmpB!cn8p!F*s+%scOK%nq2}Vbl52SfMMO-M=z zat!a!eC?A=nKscBE~Hbu-q(QGM0EaT%b8FyM@uMK?h{y(?=C%WJo5T{;zmgTd&>=u zVJZMpye>XiL0<6S0tp5-#t$H_?PL|bW|)d;-Zn2BI-j=@C3dd6I<0L5(+5qy8K4>dUKd+rG_yWa(BET%sK&VZCJ!ex|I=gi_*v$dDL|FlM`&==FN;f2_Xoz^wEMB73Zd53IzrdbeT9e=T`xX zTT+gw=vgqvv`to=s1YJeLrs@+4fshraZ5zOI`)B1d;pu5d33vTgK*YfS$knWUjteY z$8j^a40hKfMVF(yK2{FgA;VnQ`@vGCUAq#~qSAmVEmA%KxjXTZlD{Nrb%2WaAgfU0 zUQGC-K82BzHQr6$*kvRR$xb(J4#{BEz#$36B`&czWNy3IiH((Xm2D35kCq3SRhNqk zcddJbk$6Q|cn}0i>npTlIp%mg0?94^{qx{FnaE5k#TzqgPHq+%P+&OsPr2ZKW z3R89=Br8HTrleG#Eu!qMQ|F&40fBMQhQIRa-uHzPB26b`w#}AW9RfbqnjS7k@}tA% zs*EleReNsX3wIZp8sh~oS?fUAS|8E`TI#0qrK)iXmQC)DOAe?wLQMR!)Nu$|=tWM_ zj{4x>q#YF4+dWRSit*x6D=x8kjA*5U&oS^=7ubC5yf2zKZ#db=#IfkPJFjl{@t#3H zCW%G2qCbb~9JwUDqup@JH({T+`_5AJk!^X#44Kr<&%Z$5rGK4;u^{bz3}Q*oaL+a= z*Hyffn|?5*y*CD5(qjrH^ztopFboa}E?5cqQ^KI9fT%%Z-#+VCXBnhwP7WxEiRAb${v9ly5f@hhdO zqbM9qdL2+snb{HaLZd45dn)QY+H9TOrf@mWuIL3iVO<_T_kB)?$)8WBNMs6C3)rR4 z$!7*l>&0C^+hyRz7{Y_js$K9TQ4h1j##MgdL?OIZeB<=Ci1utHPYUp^~+ z%0jzyE5l;tQQW8uZG7Z8oN29@4M)1tHyV&$H`s5@qdePVbb#;pF8;wW2d0R0EraP4 z6~Kaf%tw#LCMY9)rYVR*o|HMbr%m~3EWJs2c5b=NBSxria*}3pBc$_1S9ISuK@}2ibrBHJNgdJH-x#OruMW0ldwu8NAbeLs>?PQ0=~&ntX=lV-W!y#r}fl9F`8*j54`zaHb{wN)+{h_<5rV_!BvZ#ci?8+9n);AB-GZG-v~a3i zxM%4~4TS#|HkW+XV-{RH0A583MzsQ48p8y4ej1g$U=CNH6`YUes4V|irB2Wix3;*D z=Ih!fS@Vy)gq}7V8EmNI0qyv1^ICNc&nIM?S9S5q(z&xx#mmRA`DT?~G#kawUc=rCu{=)Z_8ia# zB6?WkImLuS*+biD^`Y{+hW1NR_anb>RH4<=SrXX=yp=MG7%B-U1YMt~{2owqJ@B=o zjfIXc$^qwEER?pM-cT1!ug?PPnOhSj3x2g=u=((^|I&d(_40-p3ppyy$8Bb3B_t5W zd>k|fviNF>;(<%n8j6!s->s7x$L?HKmsOb(tP^GyHeNu8t%tI(z(G$LgC=$QH6x^k zmu+oNcA($g#)>`xQ66iB*IBi#x`YgyfH+V#=|NAAklQI=9fomRjT#F_wRfl^nb)n^ zbuN+=1x0}BFLb4V$`BO$AQ5slfP@~1w`H#>@V;FR6LcWitUJ9P#JT~%d(znESx2?=M)LC`zPg({#KREq92&jR zIbc_@r$vooVSQ^ea?n!xj0jtlz-f#xw;OYU_FZ!Qd3^Qyv*UuNS25de*0lD%bh8rv z*krZr^6x*73AGn*p|LmsBweuV`e+T$i0Mm5!1|&pdwmx6n~7>rquNgLW_pi`K}pZK z8SM5R65NpA(G|^hu-=^2ge8W?u~o&ytzME(r_QQm)hU}2amP)C1y^LtO1pJT#z%t& z>8uRno9jm~ncODJ*Wym?eMz26c9*-Wt0wDhR&FNoTdw#0d*jv96UpZ=I$6xtVboL) z?QMc-F7mbRK5nknS8x)=G|i+W@k&Zp=W0eSTK8RinC|hlgK8* zggcIcq5Bc)oUy@^cwAhs;|T>V1i&|S*iL1MSzdTz3mPFSaarPslcL=x(}t+h8orHHTJpHBNy>H`d@Y&Yi$)% zz6$c6|0M$FBwp~eWe0n|S_#t;QNvWs|$GR-iC1_}2 z6}@W@?Mt=p;l*5=lZvSuL}Cl`L`t{U<A{pxv!?`=ojFugW_E}`jcH)9k<1kaiG99#1Fw-=A}-00yliq52t;({lf;} zlIdWT($_SgA58uygO8-a^JX?T!=o4OutTvjwqxF3B_F#?7G^~J(dMp-=FA0(8AOLf# zLx!ov=Y!XG{8sZ6THfju*T+rjZuKfOcHeD8ri>^x3>mS`C}~iUpP)V2#}1C;rOi3g z34>LL+mRc$4wFF07s92S_Tg(!G8n7r1*O^Cvgeh$)qr{#r_8C4gi4hf8QQ%|7C9X-b~mO zNjU550Xn$~5f48Q^Ko!Wi+CphC~0$@U&_2P=+$<1)^1iGhj(#b zOm=4pM!Wo$(6D~EnP6_ys(v@=rpoB5#D2`XikLQ@cNQL;?cCIE?`D=AePw*h{<+M} zrRn`THP!u@d`$JtTBt7F)ciS|?5cQptk|opolqY2S*qx-b<$APJt=Z9->f4=k>`Qic zTReK1c6QgUi8NNW0X1&yqNHm*xmWCRlXp^WCa`UxqzrZHQd1dr$!HdCEvjt!Vgoi; zw(Z0LU~Bnivsn`(MP z*6ktRP1ZE8r+9GLMJXAE?%6^?6VlW=NH)LApqn1NX=%9a8HuF$b@b?@y4j|p^SWRk zZ`d{NB<Jd?;O~@^g@1W^2HB z?eTbdUhMU9?D$&L)yd`k{m_+dh<_a*&onJ`wvWH9v@yc&{kUwj?fp4f-py-?>pIY@i&OKI?qx=Zo@#k&Sf4H2}y#w$AB?l4(TT z!K1l}7AY)UuL(FVO$PM=3Ylz7M3po5d;rtz9-pw@Jl<4h2wZu+`K~{Ms1C^msC$2e z@uw?EQJ$gxL5Iem2b|WqeYjp@SUn1glL1~on%*?XzILTgmh_9;ue*?rcczEC!QC7% z%eVo-b2(8C8gJdd>2MRZzE`i;9);aEnTs+z6(SB3>8YzlwC+E|Kk*ts6{3{LzF*yd<+9o@nS&W=9T{G|bG9KHA3$mZ1j%=j~{ zBZCN4%6*>+>;S7z32#tZgV4O2qSeqNkSk}b68W}x_DT{$U*uYwEzvBvZaHb!3Azzb zV5yO|3jps!m)|n~3ugsu_4A8Ws5|p>@ucAy@lP0zAwJpq>6QJ;?_G894KT_0esk!+*2yL(EwT}NiY+74_xR=pv= zzGjYUt9mD(xE3=qnk0UxTx@&DTZJ!Vn)VWec{n6Jn*?uGvt?nP^i z1>)QuR-J)Sie5LZdYf@qIH$ts&IPoSTe6N8C zyod^pCG6Doz*`uHld@_a%vX*l0?ympkTnPPqL2C{DWKSQ#B#b-Z!z0ymuKcCiHt~L zI+0k`JNt$wPug!%Yj9JSp8%}jR}M>+n^A#>F}6Ype`iHRB%DjzJk-)yL4Pmpi*oR9 zf*r=Y_a5tkN4YRlWG4e><|TMAjDYAe>`!npm8kh*n?VA?we?Bg^x z&O{~~ggHFb=Sg(gCKK?+dnfh=rPMt!3e0+}IxTToFPJ4pdK zjUaJO>{o{F2{>nfnjqlg9ssWQEUpUe3)X?~E(4Lf5_#Dmm$>jd?oQMM?>xXg*qvyL zT+jJ^UXhQ{g+y<0A=ud`{v0l8XF47u-)cct#6AH%pe$9MfJ~cKCB*mlIYVJduVW4N zrD4e$v-PJWikAg7l_8CpTPxq%j3x>NVp=&xzD&mcpbt2@S6_b7V$ z3ru;ZMyB>brWq*8NGg1sPbiB7#rvxqW#t|zsluTz+Fau;|FA*CK(xtRkt8%k5CHsJ zJyV_bPBG9MhqmHm^1L;k@Iq*bAy+(oxta5rt_^7;)^?z$rt{vLmv8gTo;VaYAE8iM zUhMQ3s956N5SPPf_{MmIjk0U>3^s1|HEix*f7B5eoN7b2%#urj-bsSbj0;)>$@SOz#`UG z*!e$+zC7UG@`|E`Dkv1#8x*Aoso z&^-((sIB#MRcs6avbdjdKcq?EjUy|>+KGxfJmk{Ut_zmS@NL**;=}otFWNkyWG)$x zk-|2V5%`;EJEy-bBMt|i$XO0#l8cjZmVT87olSYZmbPxKCyQfr=crUC?`?s>FY!`q z9fB}7&Oj<=e^DS5G2wrt#tG zw1aGn*kxqRTNA9aa1omsXi@sfQg~6-1N{0T2h3y&f9T(AYcmXge>%QAE!d9_!g3MC zP3Yw%_&%8>_VzUfx;lNyhv@$f@E0ZWh&*m$oILVgkTS~Zd>b4HX_Aj8g7fv9^P}3J}|Y^HL7tCiJ8dI zr$N5~9Hw&y&yEO@g!wy(_A4fiCTP-oXL5RepP)I^4BP(k`C;W@OfhG&dZn6;So#x_ zTR3?`NN=c&mAmaB5)cnmcf=cl8L$1PciQISx)gUq#qVWX1X8JIl0(Z6^R~jTkPOS! z_{F&XXZZObyb4Yjvroz99-e7Pw_A-@2Kq{YdB3)Y0M?p8nox2P{W9RmFo{=>VE*lI zJW6D~I22eqA%9Vn=RmvGBw$Mj*Dx4s4&F#lEa1YmI8G%;av8U%ERO1XuYj)M>dxs6 z;vTcAA46KE>6epd=EEW$f)MX~_AZdC?M(Wt|62t93+T@1b!wP&RCx#s#=Qg=7w84^ z38q^XTdF7XeT%xMF-*Th4~m;&OvkmIzc$-CFx?ZFZ++H>H1yZML(#-PsJy;rN=jFE z0?Mj(dWUZdPMlsL-%^c<#@d{n!5g~;L0>n2IN21Y+VEXhP%8F$TN~5yJ(!Uj&H#M) z_^`x5lAQx5wqxJqIf5->_N~m@j*Iy+3KGWCpQzJF-|}odZ9ba9+Lbo5nz0lW zW*iPb`j%^UtCVSSbV-=_R#!QC;qD%ZgzeVWkRgB&YK|*~gOlKm!4cNxY&ZpWUL?jNG)kW-*%Ga5vW z$)Bj-^dwBR4^Pqr(udKS99|YKu;Eg^hP#dPO#yd<%=be^B#&vUXtTz~bmL6=U?{0a zdqZB(h?DYJU?zr(z|u724d3dH>^N3a7UZkQb?Z)Y(EI>76m60r9544Rgyeb&ns(=? z#)0l^uXDWFDj6}nzmuk8rKXpAGGw4h&R`z`99C9BoV%#Qz`N^uWL>gnooPJu!)H6h zp7JN=kGV$P{-4;#72!0rXHJnC(H+lzJM;Wn!5xEfTcRD0pQ=E6dC42YoXnZ2gm2R3M_YZarAcJd)CUxcxn>6=3HDu^_$EIa7a z={FA;ZznDT9`DI>Tb<=8kaZ2cljhoZyxcopnI!huE3kDvlc!?el9p`Qq&qjiqhUGN zw`MSybd6$>Hqm)9unFLi{I!s-K^5=E{}PV@h;^r3srG_&TPQDKKOt|5$-M**WfT|W zk*~!BP^m9Zp2f}O<0+EgFbD5>P@N zP6}6#A|nONwn`X#sGxXwromFyWY7B@dGEFV`8ApWhXNVK73{bf`?`2LXX;Ty63i6s zJNlmTj%%$(`#NkrNpcVALbhxRmMarz2bI`4@)4n#epMZg6gOd}U?izE!7)b5#Hk{( zlzwm6b3}KHPQel8Yv!oOH+7r2+3lTZy{s_X_<@0vBpPNJ`OQFYVBl<+gNVLEcFy}et0=3$Dom(+HcPPL1jebV zaCmm%?Vyd!R9Ds2Q5k+y^f+A%ha~7hKJU@N@tRPQe4H(A@Fop3E7 zA3TF6E<#FtG2P*s`F+BQ6)~oA2=kV<@|j_Mr@3jVq@qqXx{pQh4CsYRm6h5s9 z0z!l8lX^C^0Kpi2c;hQ_bs`??#+JK|s{Py4%gzet>yz)V>NPyfu~v^8X+RbVZ`|1! z@x?p`wRri`dG)lcS}Vg2TOf33rR;*+ZGwzfa*$TrN&pjmCrGD&B34=%0s3HdB@MMVPoW<79@lveL#9pcATHxKMPh$@;r*1S=65OvZ+ z3N%Tb5S6KHGyFVO@@vXjv}wIb-vIlki#m!t(kdP!#X&q87fu109z4`NEKSHDRWd5* z1g@%Zg$iL8HT#vA_A#%Q+Kng8rj1%s;HuKB^3u=HHe7N z5Swb=uF1QF@)ai<UoZg3LHnzGbh{;gcz_k9As%e+Id_`_){JU=6p+3 zk2F-Ra`!1yS@&R<*uemswrI?uQphDgY5Fbm3P_?1z6!{3YL24pS9AhtM1d$uuh5Lg zL?Bi&n5M%5DK4l~dJUPkrcd3(p|RYjX@!7nQb!0MDMnmHZ1*NgvVSJSpDIG4aEo~d z`kbk~B0#bTLxwOr18R-OIkLyA{li>?6!gN^3Sj%L?Aj{56OuCx7c znqT*nEebH0ehYlHW16g-2$~QtZS?S{M&L|9*kNcF9F&tSud8UBqov(5*04XLn%@Z? zoG{1gJ|A%|L6f1B@`(i z5X=1ivk7Pi$fCl)erafAK^>E*z>44^GZaje1jeu&vwBr9LAUu%oWh28BEALCbn5H% zez9q)%j^9;6#y;UmtmW|g~Ru-zB0wp?Y*9^>&sADF}Pi)mE*Kk>`y98{z@1SQAgh1<9drX zL8~DVQu>J(hr*&59Rx`C*L|PGeSqm%7Vnn7(B@CY6th>F`?Jg4sY$OOZIJhp;gWT!Lybh@ruVzt~B| zQV)fc$J)_t3Q3Po2f!M67OLp4J7>b^3KPC31CNW_3s`biTG4>B12qH@h92Lr>*oBB zv3B|QXA5;jGl_9Vt4YF%W!+IQ!f+GS@u)B3hVt`dU_$!%V`@6NX@;J%aYrE>bz2_E zl)K_U_4oFgigf=9G97%hypTbl9`ZKV@^G1Cjo`Lw`}5}m_ndo|Cb3d9CEDE;0)i$&7DypWTEXx9Oc{VjD=|#6f;4i(m zqxPT2vZ419ZObRD zPfmf_CV*ztFYe~2A&YD;5NxhFn-beSPrI%R&|yzax*%-HiW&CHCn1>Ui`o2Xw;anH z{4%tMlTtbX*0ww_j~2~Yp?-W|?AfrNM-nxvQ=LfMfN_rpmHsNyRsN*R!D6xWM&9II z-k7z^^9-xr?Mb&@x61oPMcfc#|qSogLXDDpQu1Lb5r{$fUK}^#HXs>THl>!%J`FPCo-pm_EO))qjVMPE~ zj&eVma&5%d#&SMT6X1Pd$?wctL+Luw51)Y14|dM5I$V9?`Te*-0=qgwUlC%QxVu#+ z=gCuETG6SngnB)2%gkILQjUULQ8f_2RYIQeZ5Zk`etGv`1q$n_>BL831M0-7;>Ur< zk5Z;tYfT7)K7WZ9y%6XLcC49ZA8QakCzcYWTA(8<-&GPfYud`ptDWKN0>jurNFzJz zJLg3EBIfOGruaLje|O!vXv1gaQ$jeMgI(W}6V91_)N&Z}XF~d&=!eaYi(=_>MlAI> zBB8a%Npk5eMKNAvLxA4GEf)rgM4@dd=3iVnGcAc!z1gn4nLK%|+ON6nFz(w}%giPf ztkmACXZ=fnre}p$3^pDP5~YGv#wOl%@#t+QB0#;x3r|Ow=HP`eR?Le)sp~H|g*tsR z>LFBZ7CmH(N=|YlUE6s#F%@%Vu@{{Ofi&I|8#F|^@}o9_6yX-AMY&OT{$9VguPu^z zSXExx%r3pcURtcCbzmF^=Y&9?HlvUk)fXB1+URLyzxN-%Sx+Jke`b+gXJTZIEiyo$ z?Vhf&zlO522&X(Rxt;uP+$r7#ObK=`$s(1s8^x$5&ubH7^pO1h#2m{)ex8*Uy&|@L zR%nh(PKVlB#IXL);nM4A<0f`NcLjw$4NfKR@@S0N0eOl{4>i6=;x<@f<|>XurTPQ} zFU!Q|(`O{E|8!)*SzlYxjmTY}0EZqP0&nDQ1O!pAMXxMH=yKnW4wKHoUi7~hseQ6i zYk~88;$Q0se;pMI#~LPA zS6HS`T|JU^0A!5g8WwfMqD+)+>7w_?yo{noIJ4UIOpI_0=pI~;O?v156mFl65V0uE zz7byp$vw~fC=eV-fh8+5NG0ut{AGg><Ya|BRaj~~Xw`7*^L=*~Oy(<*j;Av^$FWpsf0=(fZ+x>WE zX89=vub6BJ@X&Y@{hi{7SR!MiaVo+pQA;C1Rkbn%n1JItgeW>M`cy^DyLZaJ+b#Cg zix|C%J_3n1gs?6JG5*mP7M4sK(}b+fIr)#c8q=GsXCbWC{>V;4SzmHIOxD zim!)k_a}`N*za5R8PR7DRN{PtieWt}WuC ze->0i3dENyj_$^z?wZ&rS0Yu+m@h-gova%o?5S-EFqZL?*Bpu%muTUKQzu5L8%byV z>{cY3uw8iQTz;$8Z-Bk-xRjtih~O)FBqpDMX28HhF&DKEetA-3ewXaS@p(}S*ZHQ- z2js8vFy{;TzenPT1&CYFT7o+ztx1?Dc)8)3z&#w3uDDUI(+@N?+h)xa1LK?u$3--g z1wf$4JC4%rJX?WIGS8VY3?(804u?l ztnDuNh}6VK-z6}jW6Q4&4*QJWX0R<-+`;*&#F`RrWqG3(GRU5?%<+nr)ISY9Vb!5TeCc`wi_wlX79`$3QX7!Yx{KdZrzCn z-}9QnJZZeYJMoVZ=Gi|oYAplyk|ov+_`0XhBQqJc0py8(G4}W+JxQF*>Y~T>vJC3) z0$x=|CCi)ew^+c=l6E!kDUs6dN^FN(zU3MIzWT})+VgVevDTv@MT)JIi&tK^GP6n` z0KGA5NC7hN#p-uHLs}9lptkfj_y=tw+UWPCTgu!A5W@qAUo3s9kUk$`E#ltJ9$`#y z_Cv8JL9zROc5e96_s^RK*e75nUaFuUWf`9;*9znNk@`H56tbhIdH*aPzsF5RGo6VL zTio)d(J~hD&CU8Tc^qeQ`M{20g<<4Mwafi{>`+}paeQn)xq-n+LJeC5-^T)-u~UI~ za~5V{+{)4kQkedbeuxPweMjbT4y8xd4gLA>YIzocwM?(r5h_cM9?^wG9sd^dpzVb0%@k?j*0q>2 z@vBJmMKSOXbsFWv3xezT5R^iD9T29u_szU#tiSBUf1u?08!?CG3#!VH_NZdVB2>9vFa=U=du9Mq=mjhKRjyj}+T9z~CD{_{woxsv>{lc8|fFXZZ7 zGxk`k7Jxi+T&^V@@)XIEsi! zrH^pbYFjx$^I4RvlJdt$Ga!G`d;9X6VCnHN_nNg#9eWi5!9n=Eyf&#pLJGgWDydGJ!p zk<))0+b3ey7Yy{yM&6Xn6)G+|e#B#@7SWFzcd3-@i-!66a3F8Sc$pY$l`-V-WSG28 zH@n{1_anBkPm=EHpt-1|f$R@vfYnjZ3`hbcz#wPx8RHi>24y>}C;nW@`DhI7I^{QA z_>>g68t@h)h^UsDV6o)Im+}S`k|xZ6t|*?5gX3||rXwh+hYdmA$cf}d*u(ujIoD{A z3?mo&aQo;b>!J?B{6&t7sQH^0vV~lJkd2~2J0hA`((C!1?hjFE8)4!Ohg)0dw!tIS z$Ky!+4;Xlrcwbk|z^5wcm8UPYrg_l)54Ai1z<|WIZ!3_-_~)b3?oe+i%RPHkKpbhU zf!Uu1&cI{vk?d;rN?&dq!q=!mnTNanP-^fs{(8_iE@&5B$YlrReG?@1JFS`CabKERvzjlS4?G znF&6(BNoNm9$zqi&YZLGwad8+yBIS*?6x2wf*jv7k`Hz?M@~LgZFmQ@NF!EZ7ta!c zJHvw4r%Z2jg0_c>(|&y3!|9!#Cr@APp`BVshpX(#!!0v9J7Z1ns#6h|o}4eX_en&= z7+T94H9T%@%?>T?>=3v(HSvDYNdBDxFvE`vZ=??Px>Zb?PhoL1GW^upjfcy9%uM^K z2#q@nyG!%qPO|51rC2B#`tyqar;qL#cFkY54e!x?EhiBZt%G<9M>YI%=9#_g3=eff zSqT;Az2-5Yf?orBdenzgSwc#$Z+^R{z+(5SSb+qrNAki~dfDroiLaE?P`)M?%<-+T z>c+DQU*GJ|vEEll7T>QvvzTk497t9lwybV15q!V!k>zhn-xISY*SL!KLnOKVG)Va= zuDx+c2r}-U6}t?=<=H^tOlYQ}XE-LJjJ&m^s(c|fnH)|}gyIR*5+)gDV>rEuI5SSY zewE&Y@l2*(u$msfoBTgOZ}*AMgQ%aJPy3HoL%#-GVK`m>GS2cDYGAF{pa>GIO_6CR^;2APRk>sL%`(mhZe-*{lt1TE|DZzxo6= zh@p{KSJNwU)AH7g6zpTwTh1bsTZfXA(l8`^Qj<|u#=SdkFG9cmmgwZswCn6PXH^-Q zU}{nUqwr%j%e*Rk6FKaDno-DoJ1tY<%Nn4GdxDDmnr3b1Mwz~n{nAS$`vs5C>E*ip zOh2a1;!MF$lx=KY8EBO8!tB*8wZKYlov}QCiU(`Cr(Qe@kXa2tW{_quxNDfs; zr}Uv+IwWed3fC_O|1AESeDvc+YqJ`@gH7fk$Tvdr))ZGzkVm!4n&xL3$nNs}_2DR* zz{SpuIj@gVcmtO1k%(}^CTF8jt}fVc!MQge8w}%oFqEc~ZpLz$viM+>Te1-Px?1)Z z3oC^Dq|sKa^(ga*dvO5Km%Lh4h?plS+KQlZKEJ|E{N{KGi8`;v7s>EFvOh`PUws&^ zr8aPl%uztSY{raMWC-91jQqr?9!sx%))~k*9X(4fxv9&Zh`Nc&mSxE2b9u;kD{V&j zq1JC+AdZW^%G;*A)}%|GL3!Nf9{y%Q+}9(=%%1_5FSpbRapSbL#r zu4$O%nJUvYuo-d?KTSGDLicLN$=(BRagp|EAD8um^b4vj9spkla6PtZ0kL+`W@Gvw z&8rU@GX)%m8Zf-cl60s7J$2o*-4kmcpU{Smxaz36lY+Kjf+;T@liG~5-(PzVeR-~0``P6n@Kd{0v0*;OwIHET;X&qxOz<2ei{(>IW z?GMYQTbK|3<9D9)Zj$j`SGwm>CDH~qU1+9K4B@*M=haw&$;e8%iR4KXcMOMR3hG1U z4QyE94m5{qlMI2xD%&U97#e@4C2qaRGK`umMI$cVQB(O{GkAfq%Dz}-rZ1_MtZYmV zg1iA-tCQlMs((F)LzUh)+>>rRD<)0(5+>3o(5-O{iWAka?4x>+`j5a*Y6{wnJ z-3)_Wb0G$Rt|E&E4I6uFyOTt58<8hR_4BXm7->)EYp7>G;x?dQzCxiV$)Q2V;4l3D z3^f++lHg7Jvj=v<{eSqg|4u?ztM2|+68crweom)I3UN*q7%zo(U5>yqV8k0^i{F@p z^Mo`WNW7IL>dAH&SNyvni2%C-{1SZpaNBj)l{>OSe&cWckqS4f6m|`|X0=6KsK}To zg3s5sG*oIq9fcNjV6SgONQh#ad6is(GITE`)qBb{RVKD)S(|yPuFkj5{k=!_ZuM_R zPY1N(c9P2oZg8 z1g;sg2AuU7ps7k^4ZWBQ!7RTu7xudeJ9ggZH>*t?$iO%CR!7@!qfo2eq^SotW|>v{ zhhW-?g9c-i54|Afl<|O36aJYYuHzggG7P?~sg0td#O)?Si%brEck6@miqiSiA+n2A zk;)KD&$ERSP;A8}$gJN073Wysl3(~6A?tP_8v=QCH9$>yciIhHgR`?VMD2}c{SBys z=+~#8#Hc;fu)CD+>L8rK_UIUtU1VDJj(6F4tGP0Josq#K5C9L553=cNoyk23{=V|| z6PMBnIFJfr4$!4fB_&c==xqqf(-87VELMwJXkI;LZy!)k$epp|d^3>yW&`6=Gu4H= zVBbc$$^@<~!T5YjEi;e2>_h}`vhpsmB%arPaN%Z^uSR*9kU{<7;;0 zL)9r3!J2*Ycy*6mY$`9zum$Ijvu^V7S4y)sFYH+Tor`8M5 z0!1S-9NV<*|Dfv}gGC40Y`tyUwr$%w+qP}nwvDrG+qP}n)|{I8_064|r2nN-sjlu+ zr{8C-rP#dixFj1eDU_mKcMAE-)XaZJ*=#Y04k?R_!$C{;#QH44{GGv$(fM41j1A0f>mxQDb8As0AE_t5h2IK)<2-Rc zv=qpNf8oqt8iRapb|^n>&l8)*f6(5ErL~dW+g^Ixtu?)K<#fgmGsaDGU7vZb5`VhjPV?~(+_M_ACW5zSUUVm`W8ZfxPX~? zdZe0s%KGCq`DhM#hs=`6yJ9Wr7XtMR`s?|UZ5^l3t5p=zR3Epi)@*$Lzamr>U0xK# z|Iys0|JwfB+A(@6MSBMqCzxl* z2za=NCkNOQDPU^aafxZ!ka7q>hqku1d@59HLL#g(F4lH{|NQ<^8;=~N;Q;`kMgsug z{-02}qk)l$p@EUrzc;w%)rs30bGZGaKAR8X=$Ow|O$!^`qtHrqb`x?=BpBxdzXTn| ze7SmX4aG^qxt@Up%I2_RLm&wc8VbjMxZg_?sLKI(2YS#$((2(krf;kG=v<%9SWZiL zobOq#G{MI8)n@)X4Ohx z+-i-*;^fpB>bF|;Iwq|KJOCS)0V$2&f0Fqn#iuZ9C(Y$|iVo=J{aa5?lV^wzARlY$ zx97U*0FllCpP`uz3ahhS@$`D9VcL*Yn|g&Y;?Aw=4fslz4Cu@llamTln@+@t^TG;M zCUC!hKjnXA0Rf(JknTz;cq`E^P1en^<|`*?vMl?pb=&)q#ZREkf<~mg0J<47PKr7- zYv1H^pZ!@cL-Z4fb2(YCz+&m6>yaS~`y3pcyZnFsX-yKquflVDsusoL8!BQz6kSqM zWD=hFdcvbkRjZZttb`a#STc5PS!nSNqNdi8ZCw94p4pK6bnCH#E{LJnB&fmkB#e(* zmkaO@q;+@y+fVEExLpiW3@kM6(ln-J_-2wyG`H7GzSY6Ky54SgJN(EAJ11Z5P1ViX!xI$%V|TE_ z(CPV0G5|Pz69hz_`sL)#L6{!YzZa*_*0;|{`TA{B%*0eU1%NfJ?ZLiKYWt`rvJjAjlOZ5 z4P|8mJ&9;GE3GXD5y7GeJsS|u7RG?&R;e_WxkzLe7b7&5#KK-9!N4gE9J1q=mlm+D zVdfnw6JJhv$(t+OxLgL2IBtQbn)cK*qncz61pAK7=J;R+VZI-5YZqTx1!K< z?{Bq2tzL*Vrlb^<>Q}rqHm3%MXw7q!QYZe1rD`tfi^Ye;rzFeC(Ps(1JB8(XX*~il zIH+jc9mjH#%H|9KDtJ3zc)@nsN)dHo=xS}QJxb7qR)zL(j7Pzd$c{;YsL?)eg00UB zz-UrO2E0HM_WHtsL>;WztNrF5Q7Iv0=p5fVX)^h51@n%hZZR&&m@59 z_+j7%qU%=7H$D@2?1>rSjYX5L;Lmmi_ZMaifF)DT>IFmsgg0n{HG;eljV6n0af#rr zo^vS*6}_@kpHvDedc#v^2FE)el>ixO*kHqUF*NvP?#pNll~nON58X^@4M0IlH$SjB9l3Gswjmj-Frey0dSz+v3s>@rTfvbN9Ua|d;R&yvbmZcVx1AX1!L&M5CF$vFNfj>7* zd~}&ljn9@rUUa-zXae&e3efr@MOyI>VL0^4&m1cBbI z&$`0#yy?Np0J^ElP(xmZG&n$-70do2T7O2yAj_#xw1`3w@HHfZOLL0%HpZJaNS{_` z=BP~z{We6Sm+2UNxvvi*6X*0wP1?OlF4A=R)IpFATXo8ar<3HQ>VVMmB*}-h`VrzJ z*(tR{nDqk($Z!6_Uq_}6Nma3ju?gLfJcQ*`yR3`+E{TTfq^cyvK8>vn#*I8ts%9z6 z7dW?+Wx7ls0KMSn?_0ja7D5xmH58e!^{Y6j@*@68$jtp~o(96^_W=XVMoVWXI==iT zS!=yXvvml}QwabN9ZF>8*wGSQ5}>y}2V_qkLn~k}t5H)*S5a$Ge-=b0hot4t`+W%v zs!4;cSQ=eUc7@t(^awZz^|^Q%|M&`5TR_*U4ml{0jgu-SW&ZIWRnk>=5ZG(T(z6M~ zCZ=wb!|w$hELTWEXWAe%H1#9~g68*^!F8Jrl*KL#l5LxM3w3MrB|-2xkwdU6wL)YD z`;9`{2xb}2Ax+~8lrTaz3IAEpIY$7^N@qDsCLlaiZd!Hh$_>oWJt~5ihPDez!}}EJ zeP{dUx*$McM;gJt0iFsgHmiEIW$&H36~wJcm4GEF#Sm!HVR{Y+XxeS*(`bjoMEf1s5x=Rrq7 z9u`NQlJZ5{x)dsw>wJ-1aQ!HF)5q1&B7NZ^hJTv5k;}SF1(v6CZJ()J@AaS-_ccra zDXtlG>aue@a{35Ue&_ZOn3>LT(2|?v-c17{nk?cR$S86w)q4`PjoNbx zu2igXoL~VJyF}1rj1L6wwSyU{2E_>tmB3Mydd?)tgRuzHDnY8oJTwmjp&2H9UM-t_ zUUXA~fm{p&>>v7hlK|ix8Bco!tacDif)c|!q~zkr>_k{36(JI+pdG@Koa^VRyUmcB5E0^fWYt*l9 z!OdbLi2CXkZRBvsCX?fKJl?-Uql&EGFw1{cbdE1EB}5kp@D^uWR`^<`d7Re>qD#yN zTwj}5u%Gj@2Ve#gtot|r$+VyAofv|8q2G8Wm9 zZehY-^>r%e-&z~0H-qa%NbqSsWa1T+!Yn-<&Q#xSdHT~)$)jQg^^;)bXH5!hwt^ilgC(_FTA5`Z zr!zkuS0tuDQcKUy8-Wu%5eCBk)bQKy#l?M35dTjxJA+rR3u$ciD_Dyo&>>=B8 z_0bFpDTWW4^*RVy4iZ;`#t}I=QNIW-G?=W=o>X*jO$1Pu17t*mDiRtKmosnm`e0in z2I9I&?J?&AvAohF%|+$Yd)w(OwN1>9&yd0R5-_wyf;xvGa$`F0ajGI0DhV;$)1Y+H z!F_{Zhrr>{a0pwq#F-2})#ePdHV4mIa!<}3AsLBnhRER3FrGFB0a{2!+~o*6=}1X3 z&H`w{H#AT#@Knl!!M$ikNIhA%Mx{?EAib9f4O@4U)sx5RG*#x2=rAHy5h({2QJZp!%_>9RcVAeRn+qWP`RhDZK zXtv=dvl6c#6%OjUOnxOiisN=^=R($cuCi3_t0_&0skRXKadTcMNDOfpulYT(5q#?s z^+F&&$*PA$?AOcE2_O4Cu@+{D*va=PV@}wOj)BPAtejiayzmoF22e zjoFL|k4U*T-;}!JvJwCHkWWND+*V2NCqWVC?f7G*?GthY>GYnBeqU=ks|$9n6|EYt z{M2{$e9Omky#iOqjZYZH?S}X$DmhRJCU-7(09} zCx*K{lt(|GBd!X1H@K1?#pX~5IprRq)nkwG&2atKw7A#Q(Zp8X0#7>!z?Pb%&6j6y zlPyW^iybFwQhT>qNNque#mPj~2o7Q4vdyuk8j`V^XJ%@Ur6hARc+`Bp)>cxQD=s>6 z*2v|~Ly9-_8}1jObormr2UuR7pGlvucsx>e-kyI}@80%s>d|Bq>kU5fiz!iM7W>2X zCY(H4*4cWZBF(;180ep{@hqB5>(1 zvQ#|kQEPI=4n-zV`im)J33cBlV;fRqbjU581+J!4&ksuLF*+QX_RdZPFue0+1t4rN zrkR}~dra+N7;x{HXOOXB9FXulnsCXb1AxchMG$5FMjLbqx=8#v{RpWNwKh;IB9V6( zuZsAZrxmJ7nbYH5bYKE!>rd(+XRx|I0M!9+1H*aVq1f1c{iMbw2L|KbltzvVLR`PS zaq)>NHaZU_Tk*CV=j10-Ug4H)t7nw#QUQHXwV4HhUKs{o%`Jr43zbLT z8n@72IduKe^?p*R-m5SABp}CnbH*I?QCHjD(nL|$*}a!+Rok-AJMfz620aIK%+(oT zW8l8w@s1NGBiCuU2tzh)yt#UvH67GjX13sL%E5oZf5dz{BH`4kIUtRrzPCHj*n@ z7E=uDj}^wDPe8SlDZfUhX(GDq`~)zNiZ3yW7lTpZRm1)f!T~=}7#RQlMSV2594v=c z!{>iNfuu`SA}T>&Y&$$NE}ONcM6Fj3sw5rT)HZpPq6ep;G>pjuv1mrXq3}ca3~S zf@Aor-edV_XjXtVjv|@|WN)spwvlU$2$FgpLip8ba8@o<`Y*!RTAkUK`M{xb?C6VLyljc#68M6_n#W+wG5Nn0u(>x3>U%J2o4j1o*v$ z{0BAapd&(k`P+R;m#JnZ;xrS~EBQ8fz@#`S!>0-hoX0x#mW73N4k z^8Z{dcjfYxeVrmmV#B`{+xv@y@+J_b4!+7WI2_W;@iIuJBqm3;wH??6^^_GfI6x?} z1=J2MCUt)PM;)(xwK?7YyD z0^oXLS{Je-wW#lxcgjbAgI`yYplkmi3&+Osqj+=!w5_IS zVQh0lv`9<^Ioe*b2pauU9-GW?KGFxiM7iR<2ZaE2&=h4Qz-}Am+Mn1T@N!g~EPUPQ z2(ZK-ou(o@iTOc%2+Mczz)&Y#+%KbzcuPO2k(wp}h6UR{@gsF*4ay~B=tY|`OEu}V zWi_lOHs4cvsYAL-+656WsRtFlJ(b|_TMHej&1yWyt6V*7!|RoC!J7Zi4=^sNGfX%% zbQSa)%YNYq!gkj4O=*7pKpyzFZL@?Ht@yDn!~0`>+LE`=>tTH&=wW>%>SPdCjn(Nn zebAHUuU3T{XDU1cU87N#UK>d4W1L|$JLoYXSNY>C8R8WPjMPN5Ab_wigjXnz{Cmrc z+K0ct7;)X@*S2fLY@>17W-Q+oZ+Pe&j%!@(oqsZ2F%rlPU$a(YP*CS9-Zq!Bc_4y6 zp6V{+w2f9w3RJ*Svm%gZvZ$WzUavJg%G`+ptU+eSLo^>$&hHye=a^RXmNCvO3qRXe z6y_JZn`ENibpEXgM|kY;35_+|i${%pXJWHHHf$`63{WU5pK&g+&cC&g2>U#3&(ie} zTEU1*^!whvr>92TMM$aRP@YXf6Jdtz^Cv2(x2~kp2aWBId|JBoOi|1;41_F0$7|=* z1#-S6!f?OaWY7V^pr6^F=!|m6@ckajFKasQp_+@#Djli}B6Fv1(==cTd*nEjFsgoIKuA*8{fh>^kW)^D)b+ zxNqLH5n%W%v=mgUU^%o=JO_qm1bkU*(EY^EW8LKI4xq8Qp8X3zrHp_U$==@kX=|>nz`<8yME76L2mFlgd0qeSj_c|PWPAX>B(4mn9=u2iMVD- zoAKvntHW9FZQ1VAmWujDALbu>4?hK*mG6+zjWh|}SV|h}@$NeMRZCUJdAEg5+8uu5 z?p>Bpx7h*lwy~udh}NP)mW;`(5efYBz zBmJthuZeiLK&?4wc~Td_N*{KZx^E%<$vzFiy)QB@Jrc?1@ji>s&^0uM@p_4{%P|=B z7!Qho-HSK37zCMj_t5hNB{r+EUt*w53xd|ehKZnHQpT(i6Vp)7Rb&e5J{4shoVez= zytGO(!sCgV!E%r~n72MdPKylT_=Fujx++pNx&Tu4@EQI(8U?oL|A18^g43V#t5mICM|&A2Hg+y#_Ob z;#jo&1@(*nYtOph_7Ck?x^$$rjjHS;nlOq#X+SMb^JKdPSr1ruD{&g1^@k*I|9Y(v zoec=q_0=)9P-K>A=)>e*x^iW_#UZzJlfB6&=W*ca)R=b+JI~H7WMKq|%)%t|>5S|W zoAFw@;x}E9J=KXP0!Rtc${WqtVFob;g}AtP$Kf5WuiJ;q8y5f^6@{b06KwCRdb8ec z8um_tnG?g^LU3hEApDbO_U8!B+08-`@2?@NR5m^Soy;n<8f9mTA(7lxd4JWvWN#Cv z`T_=(Av+WRXd50=mdYEt6~!|f8ePexTk~d?D_7v6*agz(kJXYjXihKPnB0{!fJ2CM z9KYH1tII8tx7OWG_<_Afx-O9}IsLN9nv{YXzS2_{M>g90u?(&`?MWIKZD zzQ-w91ohhx*cv@(gPFLNDcL;gSBb+HX1-tLc$f!Fwlc!-I>A4O$aKij)`oyYx4M~? z)2YmKR8m~(afft#e`Vq|RT+My?2g@L6x&C?Dpx2GVNS}|#~ST#=GKL`ob6 z2175q{;3<`DJT`DT!QPu7mT)^vq{?AdhW4>Wc=iY;LXB9pz<)5drLv4d8dh%X&8J@ z88t7zv%K01UZ=GANVd*X0~gk`1$5YD-?a(w(VPK~@FB!LrNK74Ox~ElmCM^`gX7%D z6h!w+t<6199>ZbHmn;e`Qp2`u#_4W;4S6hiD0S+PQ)zp!&gfpVP4|(t?WV$dz{Rc; zrMkL-_(D@ciCqMA1pXBNuFd!;CpC=@PPDZq^^QixwmVaQs3Cq&es=EHRwyLx*gmn- zl5N{;No_&Nvpu#W_$2K&WHfSaeC5`ir7s(ZEiT*6cB1=PhW4{#jkhj$bZbx3%g>W6 zMHl|jj!z(#Z)_-0Aaq&5v9qDNTD9iOMlX5ifVIBkZtn8p*7cf1B(8pP_VKF^pC*7hN*r_Y$j&rfG)KR(Fy&Y=`-0AV zvh@>rj{5z`LihXrTAls9R{Q-)LjV1WqR;(ZMCbqfiR$(KIS}{z%F6pXkMeupN1yfk z;@|yE`u#rN70&o~M<@F4-J{<3CI8RIY_8D_yzl!#8vjr4@7H`3{?D-8&tYlr`~0qu zhs5u}`>fvA-mJ`_T+Q(V>D^!$~>PL1oYD?v_z-STZ zhv!z^t=Xlhb9Xf+6>F{s*V_xxWR!`bIKJ7lq)MRU3H9@tJ8vmdX@=b-M_Ytq;l!D1 zF0PtfPtgS|(^nhbYq4Oqk#C-e_vMm<$g*0deV?r31F}9mWx|Y_h@hhRZR>wlw9~-p z(Tkw~04_=Xe>Q23CjV`%h&5@uHFnRZH(%gHu(~8b%)f%=4~C<4+3aRRPh#`JfXT2_ zXZBakI{;o9_$YprF%0CMNC1HV@B#dt#7~fqP-S`Bn0-7Uxk`A9+t^LTrMt4jYtuG(pu)^o1rtDw-QN-*_7SVpvIF`d-gT&L2k^WbETB+dD zSCR@#(6)(2D)}}rA3A=YZ=!KEKJH@;7-~I|FK;#bZ=Z=uviag3yGUI7QpxVrJiDRh zF%*%Bq6*5*;hnMBWV1|>VfMEYz?q}c+$uNRBD1&s$-G7`O`Qt2qnY41+F*AkkM;2M ze02hqmNLt^zt4Hc#!MOkiBzt-jyIW!?vIc`qYl|-Rn{&8D<0!Ss=zD0ldgzGZXw0ufv&c~wjl~lhG!;Y(E-vXmtZ;6__?zv1-`)oC z_vL-QRs1NsN>I2@tk6P z7;qV#Dh#2g8l;_bOJG;P^ye=6z|IP(&X(rD=LwOVBhRMrhVRK6+iHfRRthOlE?nb| zZv*Y!4qKNH>^Tihz@M+2T}Oz}MipAeaG18`I)8l&|nClABnb3)Z^G@!op1cVop^NSKoJZM$| zNB=BZZMaoY9VO0@!s-m;Z*VgpK}ZVFqrUST_I2SrykfFp7-Qxe`eZgmL;5Yn2l(EP zUL!psNGAwQXDSCu3N07GTO$8Kb~-5oo1c&U z<6=}1;ug)L&vq-uS5_CNN~v+njMgBY`XlGzxjwlBYRv)^!5#8y+g09j9h}_$i0zAN z=-uCSaZkCWUF)_N>TmR`^hdsMX?Lnela<9XpN#F&wk|7oA{?`nh73{}= z9VCTxpQ`)G5(p-wB2wVN-X?1GI9*uGJ+{D}$ycWn7Zp24uht)ZkB{D%3-}hJKs+@E zPHhytOG?9+VVN1VWdfv~Bb`Rao{xNSjUSU5mUR>Sb6)9%Q1^)9DRa0x2A2JlJg1u&B88(DN6??-*xD2I9Ft+#0^B=E#&VY?gg74@m z1rZ18@mE=uDAt@<6a5gvm|VAjeS{emN$3W&Am2JO8N0JxicUVo;Y1LuGdYdzo)mG2 zvf+}Ak<$BhNVt^58D^J&0bQzfO8o68iAchOL#dUxictjMET*t3z7<;dvy+s_1pQ*& zt5Mup>Co`9Dr|k{)i(KzV(*4s8_Sf(!6)aUwWaU#WOCrH$~W9$?o;3L!~$-i;8tu| zlu)q^u;Qni9((<_UitXk(vgZD|qsLwmA}PGMY}SoIXR$yIYX z{DTOCE=HA_n zMj{G%?%+60Xl~kacDEAxJ4YWUa`?tNle1^rczts_D$cKH-mBV@XdvkJk%>8CNoBpk zr*!LT$#AeVu)<(WmZYJ|lrM8*zlY0#X&{^kM#^KKML5e-Gmi915+;sp84xfdv=W5i z^o(o<8Da(Tvnk9@@Cg2m;(43~mbFJ-`UozSMj@2NJ6;YyT{*_oPq%9Nf;}{L|58N{ zNbI$$ZaS4+_I&??I^3kY-MvxRzGb?~qRSWGdPR zbq@D)q^KngPp~tV$V2-Sa@oxG8A^G9PaaogZfuT9on+3oUg+A1GKjmme>p$ibe2+H zP|PuG`U7L@;6IIDncZ5o!%z;&MHn2UY+1Moux*MbFmIss+NYp;^+m$?Khv>_ENhBs zSDj^5M~H9bWoOp!SB`F|q-k9u>3MkkTn}cA!oT^#4tdp$9 zJDfTs1U#@YJDF$L$bkr`c&RHUxoc`V$Ubi+-h2u-H$=jHHuaUQoExjZI%13Q$j>uw$yL;M*$ zA&4>K0}vfF9$F2k>whiZRVvFrskzMDe!gG%zoKaAFxoF3P~fl64M*8uG@K=uw%sza zE0d6M#2!0lykSk4wND|hG^Q?VChEE9AyC8roa3Yj)IasZKC=@Sqd8Bt3fI@B&R+1K zR`QMiHQ+k%bdDe>kw|`7$BC;WY06_3QQR1jc<@yEp*LUg|&4*ie5~sU{=fX)Ke5e z^dJ@TT4Lw}LSF*(72wij^lj-yj}zI`1pK)bzn~G6Xy8+wiIDv zR!%uL>}atEKF?*1U+L|0uo^MwfP{@>*n^vYnsQ}A1O}OUhcssJ(6#xPUzv{*v&<2p z501|fN4tgDTaX0};f;o&Y4>8#K@wi0F^HrgJact>9ga?_ikwK=v_%SRF5VR5%wm z7Ric0|K`titRbcxZKu#p_aL(w9<28Q)Cx7_OMzrbtK7rWQ^O zB?_BI7fAfHvvh!qfYi@CRAG@p(*w)j(EFdG6>dq;;OgHfRSRt$KPEwieEM zdjH5`oj5_OAOVDs+n>lVT}_GN`c?sWBv=h~);+Myq;w9+w6mIMD~n$r*75SRi~x__ zE_T2PpNID34;j<^67w+*pZOsxV5%LR&!7lY)e+x!|T7W z8InIdOMMzwleA)s2t^|!Sfd{-T$ACoGE1^z1*a-1+bt>~@Lg}!)mi;|dwf$ms2MV6 z*4R=Rw4b#}Us>*RD_e;CP`iUE@E{UUMMpGC{&sa-(sF-2>gmJ1lm)$l|7SM|#bkj1V*>!V{{z5r{?AFR zXK&!>Wa9X*m!^4b)HcN$cfYAy4uY;%I08uIweqBA2?aEF5e7gXntUL{6OLI`6G+t( z0n;Y^dLJ7!uP=t#BsZLV!64*Q}^FhlfFSy=>$i2l?fMhU|QPhT2J;@w|Shp*tDqbuy> z_&eQvT!;K-x+n76G_Iq%WR3b{(t2U_w;`;%;!*1oWZkO&Hf!F#pT>CKj?eb4?~css z$#>ihsI>Y;)Zzb?GtXWQ8It)JcV5MOX9gIOBG{o!03n0`TAm+YdF%0My$)m%JPaxU zE<013cBK3{pA(gPAdTpQc8w73QZd8`Y4XSHW1lk8NOqV|@uC=tn*&L8iaCskzC{y( z0(=CLWe*v8-~{0Ik>*60MEe}B=3tZ1auZA1vZOHo9?(Gu@006tfgS@H9%vy=D>)08*xTz} zefnlcC#=zc$wY&OONp|RA-qz85B zf;WxAlu@Lit)-zwjs{mQ=t?nw?+0e+K(Ih%F8&kHx20=bqZhXVni~M|r_OK=iSZsu z1a&u{r19pFLA@^9NOuqbB|)`j*R%CEi<^fNFV}w@H%BiYvF;`?fyF+=)6yzC{*~aH zr7h*X>t1B4n?$%D$bj9EGEp?xFF@f}+x-y4J2Gy9v~kmSpnOvl z5r2C^!aoBDtRbi@2QnYbcU*si6H8$j&$CRNK--Qi1e{|Dn1F6NF(mF{8QCH_G1r5g zAQFX_l#ZP-e3yBIYp1o3G*+5zP|4ftsne^&&()zP0N`~NK2-R1@8GHp0Brjk8giWL zhvghZ2hfuW2u1QhbhY8puyqslR|{x!{kumR+K~u&FB1fwKLFQXz~gh@kVf!mA_{nP zJO*HhxGsuC1Qh|Df;OI3pHc+clNnC11uqi(2&M&0jwHpxwv^-(WQtWuw}F+1kMG0d zcg?5UkB`TGmVTzM_9hSWfT9g;6AXW5bn5(K{+6##OyJ`U)16PuU$Te`PZuYre-;Y` zwrNG79xzcX5n2gur`OBP*|DAyvpVYaHg;QY_OfXZk%S&}|0WM7@c180i9UBxP(lX> zdHT#}T~k)^k0j>UXvA529C38yh5c!RG*jgHWtMClzTW*eJ%2az_^rw(VJjspMWhcq!7 zM{EYbk2agf|J#2KSwHN`^6G6NWP)`e9tu=y#~1hH6qk26!w?`l3X*9~kQdO0KP7@m zHLqY4`e0xM*<}T33(uodY_N$hm<{FXmS!+ds~!v-4dii*{Z)`hP$wQ;qRID_6FFG4 z*jNM{egvlz|IW7t5GEgcm~C_ig;>5Jgigtgq)u#yIPjCI9d%D6h|ZnrbQgP+X?~|o zCdea3A4=s7p*XCb7&lyvRk&<}1Vpgc_7^_MB2bE$>-S{<^mk)9`C42^DP6dJ7NZqS zK1>n=LjRxUDWpGr?wK=i6W@r#zh5$1iy7(01V>Cd5;?Nm{jY{6uRt$U0wNMj9|O8P zPf!d}YFMAXA=qF$6q6W|+1_+a2~sHxx&Vq_+ybC_b2TwWpghkQECx<9WuynlFb+Zp zDO1j9LgX+4p`cK57VtoAl*ST_R3cg7F$hu!0Tk2fwfV863CH<)Z@Ax@O@A)qRd?0J z1nQdB^Cl2*#7PuG{2W2mk2lP2U@jnB^yxWwiP#%pH>LY1e4wUYpHdMWXdMSau#ocx zV8K&-$qg2Vz7H{neq9)%3ZNN+gotB}!zn2ujp;@M-pTIEJ$e?p<_)`wRZ)1cu}O0F zkt)ro&%Ux^PUym6xJZ*Agw4F*jb|Zjb_G90g(a}~9eabZ43xoQ!|fB5IXv|0J@unf zNWop6;bphZXF095x?DPU>o3`?sjq#vppQ9hPc@BiAKHhrchgJrn}B^@K%8?;WbK`r zkIjT}Ka3T$xDCk%w=2Dj^==$G;wT#LeOK7SS>)|dtOW(b;=u1zEnJ|5C!d`n$3crx_{XNMD5T&T{~!_ti1q zQ^1%H%N+?M9e%94zaF0G=p+Kw=<^z_epXs&J%;wds*f1VZ)>mEa}jDouUPq&MP5zs ziu6S98obl~qWqeT12BY<-Il}lxHm!QExow(8hEXMhi8{nJ2H(WOf(SqLo9!%;U_sG z+}9OSRjw4Nnx`F^`3_XM@xd`@803{T5#Bf9cQl)KFg~DIcHRXLuId_%23lo^ckGAJ zgYpHZY5Akf)u~o%y}@DFBq7F|!k=3gj|bb{u3nAsDoEY+~Yz1fk;LAb_-)!3O#$Q;@kWju9N3 zkrIs!Xp#xu_>w2hx9!Y$GlG5@=xf+elqM4!+3J9~suRC{;le?toOOhPp}tE6R@fMNjn>Kj z8^egGJq86e*KDbnA7}@!Hc*mcuSgE_4fyAR@~~c8uN7?E5_G8$LiUGF`bvc)G7rTy z&0MDJ(HQi)2Z1G&Rc)n?6^PydRAwXL2!F4Ozkui*?g8v+k@BVl*Q0{q7!3d8b&YEPK7LxqGY@^d zH}TV79FOl}Ioi84GilG4KCs+g-n**aTh6@V`L4{&-i<8wP%{)*qw1a%%@yS$WFyhu zRLdZYzjRrj=Hau1sJO)UMsIDYf9@-H3~39f@3)uXnp=+9*7cZ}h4LUR5oQK` z(SxFkmLz)+^~tDi&)&hJ<634nv-5j;R!o7+*NXTjD%2v=lTsvXFX@=~;|Kuy+#0}0 z%HAg*Na&m)w#KBe4rQK%9oIg~iO%AOTD*9Y;_)UUwrE!_E)0AS+Hwiy=xQn1gu%Ad zAHF*bQQUyzHt`Vyqn_YfOh-Bzs-EiMP93X=M}`kg>3!0g5&oEzm5I=()IdG@8tusa zu-;WRd!UaAw(T_{989^}oM(2K!?`W!N?YSe;DbZlKzksYw{Ue27Ie97BDuhP9d?K!b}-PQDTv}{ z5j*_*bXL!r2q+r*WDS1GoC`fX$DvICsDM6ULNlX0K|Uoj5jHbSc!>je#a%*}#me?Q z0_h0A`r_UK>9mEsaYX_HUQJ&wgbn-9#Drr(rAe6)48d}Oxz=L+ar*E1pZ-5H^M=qwVD&)!`Jc%)dJFy~06mYUF}t zd`MOCZ(>6FUxNz`+Fn+g;|s-B5tl8>T>G%?@OM>6@<~p3D7o-X;k6bp>{}o0euaIY znaGZ!1*yt!rHZ0`l9CQcyLitNEBkXs`+)>Hsh)D$LRta8N1OY~(?d+C$gV%G@oQrt z&8pL3e?Mev0GGJB{H4Rkt8EI}L)tu<39tc6 zgqLY+b~;ZkCOa55;&}P)Lfc%Jv3Lq878>7Dy@ko zznbx^M)ejBJg>Ooy8qnT+K*6iwW-s*Y1uriKLqCJ_^YEnWE~HQ&AJEv_aN(tan@>C z*|eb5WKE7wjbCC^@IxHOJ^^6WDL+)#1sh$P(};HS#6?f^8=I*`Acb2YhzGy%Da;!$ z2$xo;gd|c-x-&{sT(VcK%G^oi$}(psRa(!~V20+IB64yf+t2Z(4r+DM3t6hptC_sf zGxhJ)`n--?2qh(C3EhMS=Oj$>G`%<-*9uYHqu#45G3Y1!C z0m7DUM)-zASG<5uOzi=<(cS0-eG)>Ow?Lf!r$W6<&0fdFwKiAv^xMseeba8?S{VgQ zZ<@4opQ)no@Kf-D7oVHuvU&$b4O^h2M%ji+1;!yDZef@Y#0wdO03N_-(bx@;o~le; zx=b3b<(Xxfkorn#rNy&i$g%w6wHGcmC%Jp}2OT66C6C~+M^YSEZMZHjQ6!1jlR8l zN?(N{f0v!50Wk2~W(UOr$o>3N>?8Jh@B{P6?^!VB6@7f^i>hG#(gK!;zklgzuA*eC zER7PVlKHpCTxE%=U7oKXns#P9O-sA(>x3x>reMoPg;=g7rsKYK2ESmMcqb6I@7T7y zX1;jJPtIbLS}_3hD~Mlm0?6$Af(gd7ib=DSc!x?_abHCKi@kRW?lt<}JY#%g+qP}n z#))k^Iq^wyV%xTD+t!I~JCpxRS9SNVySi%b=3*}P-Fvfk?RV9F*8Z$#jo>0Iljd;AkkaD1O4oKEm8K{^ zR46u8Q|46rId9RzYe3|caOf&Wcb}!88sBUNF@^h?6QzU-S{iT^+h!jLH4rhn;Yowk zt$j0q6;4A^687rj!l@73w~Wxn(psW!pUzhS5v%s%Ut1b{q}Aj@k*$fI8|Q! zP|FL8dL_6`lg>38Ly>x=UMRf;@C2z-#7P^RWif0O(z0W1jySa)KVXqzrWaFiV;WRQ z%epHTsJ9lS(GM)cII9dK28D|)SA7A?spp(7a?gk#Z|&s6^ho3RtIGkIs&lLi3ZiAb zt_+RX2jj!Pos7cveQr*bo}Qsu#YRoI8M{?niD%ft?}92Wu(ib7mUC{O+< zUy|~U<0zd=JR=XbR-;OAOPX2BVs-Z9ff}x+HfO(6*DQ0Sb&hQ?aGmjCj;#>?sY_`g z4DjW)tRW2|#1RZX@RR13P3ayjpSI3ujz^_5r17a#amBh)aetnz+qyTNt7gV9E4sE- z^JrL(CxJIx=~u~A_Z03M%jeg>QY)^s#6swr4QzKDQBLJ41};@yY8ceRp&Hc-C}NThXu%)r(aQk zZy(Gc^{Ej(3ccA~Zqr0OMI2*p9%aR(uv`@u)Z&;HpN7K4hfD<(L5MSklD~5s;m)j# zDtdvqKvPF?W64e0S(cxI&yE(@jIyD~ewq694RL8Eu62?O)n|gUQ5S-uzwAnOZvk!i zu}ZY?**Ios4^`F}mFj}!3f@qeZj&l^bO8eY3de255Q3b*v$pJ+9FwJpB_gWrnsoAT z1x$tLb3Rp9u85?YpW(5$iy??Y5z#O+EaSX;j}T@AQuAMAA#p+&12I`3?DI);Bq7&T*Q(9lFjv ziCG;}A1!@1jDhV~vg|yTQiC=Ku`^YFdLyhPkS)J(Y}y;*{Q5HLpd% zZ_sN5k2#J{87ZN#rXyHZ^SX5M-$>lCEJExWgS49BG~H+&a7+#fNJ)F!W-QDDD}gt< zLxbe*HI_q!^B(T973E56f2|*?%(fXas!Z1cBdX6bPlxfMXHKkGLpgVR&4doha1hgt zGjNqud{-4G(uXRoNID#=OyP!XK%J%5Hlp_%&#iQmEcI;o<;b$h!#TQErgv?~{v4G( zv8T$Q1q@3oH9}BDm6tuNv1k@tUgqW<*2d=y7mUgsMjK*|TUSJW`}eS`aYl5_IFR5P z_+CmI!KspgiytF;3!N$M*^(Ks(yc0v)2KG>Q1{nkCb(`6Vuw@CH{?E}x&N>BoL z%-`WvdMHUZ=XP)oGhI@Zaj-D|Tff2~&Z5|UoW$A5pmn*f?y68>nf9sU@*TziESUZ} zv)frG&&q0&$F*BuoA*4Ju!>s#wY3&gvna3fes;5U`rh#OGvP1rMYTsaa19&OiBA;J zKfuM#-DFYWujLUGIn?VucsvM>S}nPKk4zHpsA)~lW>$?bZOA7u3}Z6WB!A^0eCk@7 z6ef=A0xI}uECmz<^_UuRh@#SK8PD1Ya~v0B=hK1inCEHLuxWLaEV4xSDocaT3$z-E z^ihh6I0XlxW#ivV6Z)bidQW4m)IUCWYAmfnt;O3h9l6QLt^^*Y`G1PTE0d>Gj(7%n zn#SyI#tE~TdR(`P{x0<~N8xO~Km2M+vWU?_>aghbc!1n;Rc$}(GBz$>{QB!2a1*N3 zrWBl@0fWdUe*TKO#3+$GWUaC=GHlXf&Ll+g5cNYe>;wAtmzX8d3!k?Uii}Ecfcw&+UT)WEglGT`bdME?(~stu%;>&HMmK zAFzRnq@vhqyzM#l3ZX#Ao)QnlZf$^f-d_W9T(zAbi@>Dk(FVZvA>&f#-GtyA z+fnx5kLAp>#k4LNL5sim!`QxQ$2EFb|po@!(&fxF6)0OQiGx1cPR^9Kh#+{=6 z(htYI-JUYw^k~i@3eXXX0G85@;7drCJVF8ovv1@Vk3&o0D7u?flCf_m(0`}$-@#zV zA*kVja#JV&lRQMhV*Bvd{NrXLrK_uW4!g#_>cp>9l-8`LZriB z%M7K?Ga?j120jPh)KobE9?2+-WZ+!i}fs0xBV~k zxUXt`M~807GSX4I6bwVV;TB)Exnr6??{L#cIHFCHJYNL_YYo2&7*LwH?*a7sI z=eNxPl;@qRqka2rGC8P;aCasW+4)3dr2eI$)peGQV^$J#pC)vd?pWhHN)b%3ApS^W zab`eHM2$Wb3G9-L1WPQg-PLrS0Shryb8=!s=VIDWykt9RQmA%E(_+YxyErpe#t59bbZZ{%;jo-`t*BG>VN#AP zsuD5ogZWURX;!U_k-={$D%tzHr{9Jb>;)@NIhf!V~qxZ zcokvb3$%W9ETmei-VA{Dp&%t@{A-aXrpqOw{-m(U?McZH0sTO!!tU`pNV<9P0w?Lp z908xw8q49qL-U>A$Fd%hH!k&aIlc3?n4%QRhQhb9d>Ya=Gx;r&lwOg13>T|CB4p6Y z&QDfNX7Q{Gz9L|L7>|SEvX*8@MU)E7QJLS$z34MIvY5L_W2^CEY#;DCURdWw8@$T) zF}CN)KZx#wwdMEX!{OwJ;_dSKdhwvFw710GG?u?4kR2`YU22=2US6Ht=;8JJapB>X z%e48V#F@%|F7;c{>9Wc$7ebXlDo{1_>vk?~MIvD!oj9Q`xXjPXs^m$x&qU#CRW_@t zD%a^NWP+#nw5@l6l>%yG?AfuQ5=+VuYr+Ic3SSL$a5-L4$f+osybV<|>A4$=SLf3r zq7RXCt{aK1e5V`ys>`uz_@A%osRqKc|3VE-_w!U(Ym{a5z^+Utnh7b`*=}PTjB>>zi6Wgh2)IMfxCd|JkN?{oq>XNrc&LJB{Xz z(Mm+UaC|i_#aOj6vB!3jZA9gdQ+u^ovAdG|ab<;$U1y}8-39qBVFjDfm+p;G(nhq} z(nUJ=5|43|w#UsS03a~~+%cS|n?i_*u^LSclgp*MF9mmQ1J<{Ku`s*QQ5V@(?X)SM{Sv}oCI4&}|*hE+WE$*@7VJ`eJ>v03mD&z$D zv`gq8kMG3=v|#|tLLKIJO?ih99S!pDt*m=#N7q|*4IYg*I@?!HqXIrO*L(S)26d5E zNrn%$Vmmdt%r|mPW3b%CkTZBYBRel^#ooP;*=|);f2AF4feoSQ`7=vpevW3>!nzq@ z7XDOk(oe4B8sR%M8*XERwFW}(y|;@y;OlzMR>FAd)hwZ8B_GAWHX8TIaBabgJg)V`(NdZls-LA*U))__%YHeI< zQZd8%t)0#)uWfeTb7X))&!*krXwer1b{|-~3Jgq4=}sOJd(nhZer*P-BfUhEvqlmY zt;8O*MRYy{&omkihIsxIH+%FUVtOX1wx0rVjS0 zFmFt}dw{ccd|isN!oj2N|A?N33h3p(xQqYt-uqAgz5geA2T%I{ir+*<{YH*%-k8Oi}pk&%t%0OUVR_5Mdt>wmkW`tJWfs`dY)TK}IxwX8Yo_o9E!f7#C> z_*wr;2KYIz{{yT=7hMMkV#Ex7<{gTor<1hU;(-Fd6>>kgJG@!W2@^6At-rmgojT#- z{@Y>_$TA*AlUV!hlW7vVHJV`X1#ekzxasVv)W$8d<6kedg;=hPa#Bpd*k0|xaMsLN ztip)4+vIle8=uayplm}>PPkL$CXBt@)!;%z+4*MrF5g4S4IjBOhG=Tl&!j_s?>}&= z3{|Xd7HA+Krl0@r$JX+HABww^rOW>fRAp&dyYI21d`;KPItm!LYbH<4 zPnl*EruagSjI27%4zCU-OF

xQo}@Ot7ytzX}GLv8JE1kdR64p*dy}?rRC-{i$8z zmgjUVpgf{CcT9BS2EOxf#8g(OeAo;r!JOH8Oc!&HA93e8v=Ku?>e(17m%CAMy1Ps- zX2T*#c(L>b4VFJXS{Mmu@e{!MovN1^Pvm(VN_AQ5ZxJl?r*}qXJ!?LUoIWNYexU?k zr!8;KgQh3hWfs;&>EN_TPJC{e{8|%CH*4^XTUEjvq2Uc!7jWA4%ALie9;fKow)wVcIDYu9DI|9GAR zTD#)}T*bYa3!5XqEPoReqBzzLd=7-W%+o8suGsAxk(6h%r_VY+&LCzNR!>$ZkFUVz z;lSGK(BX)FO|`w>`)7=Rz$Zc2=YE2{-tYIVA5a%cKN`2d*i~FZqd);({AVtVNU{@@ zbu)a~5*NYeX{HeC+f5>=?R?olh zKFnVI7MKC@1Dbk=u6LJ9uf}1vc-^=IfR-qz^e6U$CNp?Ebbcc-ovuBZ25}oNhg7P! zgp_a|D{5|D zJ>AJYfSH{DLc$~^)lu>^Y9#P}>ki|%f}Ali*l2W@7=b>oYgDAu3`i)Zs&Mz~BxKh#xQ?`Kbp!W?1TWXTVw`jq`W%1HCk{qtgct@(i-RW=ns)(lTNvq9I9!G zwV)^|0zMf9uJQ-rWdKQDR#T3JTttP=CE>5+xY>l#jNJPeBCad5O`8;R`DNKjtnx2^ zr}|=EvqjP+6!#)jZ^>L_Kp-%g+F z)9i}NyR*2pvZvwu3L^J`6XvJfE-levtB6ym(-)Vh_j(?`VnceCy!ez?tFU|P%7|qj zORdu2iu6(67C)$f)S88KB(T61!-{*QIapOw*H(yBYGeaEp@5RWR5{1`Jp0uR;)}6? zlZzcCqp8v@5r^qptbd@{L_!oLc6%ajsblm^BG5cW{$yp=S*LWMnoxMW%44%=|2}(e1r>~>cMDe z5Fy=)2MB6Ys%`iHjA7@MULquwignDtkj)U9e+#hwLQg%*?LetQbT{NYT~?O zomrWhb|oAGcni!4@5<4DOoOaw_JAG_(QcmMwy++3sLY7)Qe3`!8+!`3efjSpVd>MY zTUn<+h3yDXSSyV+;dvx=#}aShF88 z*f6-O!!eLpPL_j0LEv<^h<218R(KIe7=d>DIn1fu*Nn;Y;0pZZxoF*&SPoV?QN6YJ z*@?CgK|6@x$TGLzmtcz(#tCSd?w2cFJ)+wJtHFAENA5*!)J@;HM;=dno1=)S_6%Q6 z+QAQWG;Cyw+93u(%-sgw`I)TA6ybUf#1LIU$o8?K_HT;v6y-KLx{} z1+E>|hIIUl{*I&dW8YdO0-~Iu64?205-`S5c-I`Z@avo<2A@uV{&Y$L!!U@*4xaIr z^1R%;e7Ud|in%=$Sf~AP1ByLOPuS2SWZ8C;e9siFNV}?3E9_MIceOE50Kb2T6aMwz z#}P8n!QQm4%_=g2uiOd8XV}8Y2^oJ`dY?+Ka#IblKN_tyobI_&9&>0-Ks1j1EL+nP zxMX;PFqeIgklAkE70c2#msm}ff>XkA@bd*CNWDk!zmP7E)Hr(_L9Oj7E!hV|Tv^tO zRAaiQU~f+1`O_TtGAR4%%_xFA8D2AsHhti@RykZoE6K5n@eHhlF#i3iCHzbO+YqtK z8r4=z&CpXSi*T0n>h%R79B8u`pBTgC)Xrc|&QYmRAVBJMgY0|`-|@C9v3l8uCOr?= zoe*(yzibI~Os%$;L~G*FQdTDSZG^n+esVqMQb6h|o`sE92%XogB3^NN+@6GF4Q zPzxlPnPI3RkOB9P-#+7=RG$RZztESXj!-BOd*p9%VL`XCU$_$i13JT#1;YB8ra0x< z8PX|ZN~9X}JN}RA>3>VF z|J)q^-|MF#1VF9tPooR}PovBKa*16SfQYRzLWuSIFnlbB$_-cA98tAi^5SWXHe zX1pE zWsYUuZFjz4mi4uQenM+6e2S&06pt}?3{3{w_d2`spJ4<)%#Wn}Ccg_@GC&U|%gf@$ zrvQ(6+m^=zQq?x?PuEM1MwdWHHx|U|#(TfwN>rrwwIg{v0usV?I`Fh#`eXNqkML)c zzjoDRvNdphsC0!!S~x6v=df2?uX=jZI%Y5QluQF?6Nui`P77@V*kF$Ik56Gy8g02Q z;9`t6 z+%%gi&aX1HBlnz`{43b(Ax;`MeFQi(xDfKE$chTvT`@=?n<~ywQOh` zdT{Rj3Ej;?M%8p@Ez;QAz@9LyqF6B&?2fjeOKru!51e1hBx+Jj%4*nArh!yVul{zX zbjUl}%Z;%~>SFyCSz(GS(0kI3#(8Q3DSvmMmNK+`5QWJ-qIEs8?2SlP3O8_3_^i?*E{rqE!0iH-B2Sj%mb?1c_}6LJk$H)_`&lFrz`tMZ&=6j+vow}b$17=l0$iAa5Pj# zu*2421#4*$sF{$6o*{^h*sc`m0G#Jr6*5~w9CK(yzLqHQukyu8K>lINwYGRT_lE`F`b5|D`<|e8#gz-%j5IgCADzRS;Vm z0vJK$L;Mf;E?(kBn7cYqu9ca_(*+qWweRQ*!ZPE8H;vK6~4VeQ$n$ z8eI1?3D9Pc@iFhZsq8g7&z1k2JaJ$dp%_-L2~8OD!Bu&Lr1p)kq5J6sja}u5`x>_xn}a4_uc7viHA5sV$(^9S1zQ?eVF## zL`%=gM@#hpZDm(UlK83B*Q)CJcGmb^$&tmp`b(f2AlKy^m}}xPRP3bv=a{gH=||c~ z5={6=FMmT0XtEb*ySw=X>cr)B6jZes*LuP}`RTU9D9kwtK?0uH5fZM9Ec2U*_?HH3See`LHPVW^vDxu2I0-&&Q82?M{e|jG zh~^~8a8_@UWTS9swid+Q3Q6PHiSmtlXqIxOgho$@o-R!nF7SLP~Xq1uxnYFt3IcY3+qxd=)>FW8NcG z#EwKQrM^VaB|&?H#Uwqa30CQN+pOWR>N}Ktps##UnZ<;>C0)TNSSL=1jaypWRdV+1 zSh0(2q&&VDl21~PwGAAC-nTnR^hK`_1voi5Sx^CY!EtHO^=rN;f0R)EJcAWsw!eGF zy8gBowGq`egKb0}Bh*B$El&>0^#sY6E_qdxRjE3}3@bj!CE`hqKQc3tM3AClx#?%p z`b(=OdH_bdYtZB|Da61TeF#lrBqf{_tpj~GDmkqg;j=6c!IHObyezB<+O(<3i0A_%-^N{(+45jr=KUk>0OMMMXLRHe@}klB6EARUEsAGmux92m~Y>Cnf6w z(EQk#mxH$Ceek60lqYb zO*c4u+5%-;;~GeF_R=sZI3=efpIVTQ^`goozO0R5<>t}|0)0pVSt%Be)vYg6YvXF?LE*0`sl|8g%uz%znO@{4Q6eYN-7abRZ|2LmQG zC4u}dnJ>PNplwzUqD6!bbFilx94}tzFL$C`qtUu}iUtM;1_j3P?bNHQkCUI<+o2gU z^Ciw=v1Wj#RGxO8F+}+i8jB%Pa)o*tky&dsqMhTg=$uW=-a^Z)f?gY=M^N@5B8Ttz zbI7dxhV$J0=b(w1@-!`%PZH?vWoX4gb>K$B<>z5qRcaB)i!Fzs!{wn&wxVugF7<$w zsyi&8jy=#XL>rX)(d`fO!*83Yi2XXFwRz5eiYq95qy$_MS_=ojpD`OYATVQbz%~QC(<5vXhU1#uPH{b4ZJTFovZxzy%>ngN zZ0tx%Q$%U>rrioNka4G6)(3gL&eeEODy6`}e??7Lbp42gW#dZk^Mfd%LTMT=rgcJp zMn_S+SrYaRCq+x8kWJ@~Ky7_5Y1Y7x!O_$A z^9G$9X}V+3<{|1GD9sb=IRID7f~&mhyZlYDXQw@M6O*=8s4w;`Uw#N^Qh!%%^yo?@ zD~=kJS%97=Ta-}N!7U=LE_!3B=0)SJ5oy-R_@!%r@TZI;yOFFVoaeIYFZd8CZ}^Jv zX{O!krbijuYSNJ~vY+^`Z=ob1-tTy+C(Jv2#swO~s z5SA8HTtL4gsB=jUI#_)ZA<1&niu-LFQe%dm>ddbD!r({0Sh zf`*M%4@0i!YDnlVRM@KySkO6M0?g~VRg|6k?mm8Fx!LJ0dwuKB-$MF9zxf_Vb~iPG zAjV_PHRY!eij`~j^GQ+4e}R%6mWQir^iW5u)AgGgOmTe)k}S(*#>X=aduch ziI!;?Vf5iIok60a=>(Y@(qB!+(=RLTcW@yatcX|P$fN1j#G)~bwsZ-v{zXc)L?M1r zR}o`TCG40*7?KfA;jQ3%$^XnCilJy^>=3P?W-dx!))D=Ez(|$|a?Rw1FwrHo?Yd88 zBS$@Xmg)gf36bCSnbv+fbvd(`#@-^p_OI{|zLL`Mr@BMn0;Z^`(b&9!9S_-jS%fKE z<*;GhyK~(LSG>)y_$W8X@muegERFN=mAm!^OAS55ZXk@d8FzCCr)VT<5pAyDdW4gu zJ>yJ9$I08n+4-s3$5%|oKYjKt#kz$9Ey(Lxrl|R@~X8euOl!>YE#TARk2vgDzAD@J&?_XlMG_TslxDWR4cmuEB zce>X_#n{;9n>UV1p^=X92Ewal!7S$=iVgBmH|#YH4i8YTWR4ocIxSlV{yzGmTC6%A zOd=5513h~F#>8pi_n86e4WcvAVCK{D9*ADWA^UJw4EO9bm$N@xlTVq>xY5bL#KFJ5T6Rd34tYF@g+&=-uv#AntY)ALf zE4g$7AsjbR_tB%^KS7upK=1T&DtA$4Md#%1!xp2kJD9_HQfe-BTknC{4h;dSK69|{ zqYhT?ijBu#nL_WNbt3c5rM*rW;cAgGc41(NnRtSYtChWN@r^>)+-@x(gY z$d`9mlN?UKBRbvbLnss-{OJX$s(*TNw>#!f7BHdQaKFhn`6)C`W)V z0P6dme9$iJAV1gqBTB<-a)hlXxyErswTBcw}y7JTU5)ZcK&bTm$jtz@=-corkRw$&WwcH+r$qa-ZW413}2AUs3$@z zbUQD%Z7r+X4dsh!NXamWSqPxvEVzM<>0vlO_gy^l{nWq1goTcB`9q>=s7OHPRh>!<)eO!;>+{X#QKnocLP9v8G#s*@OQ7tP8g} zTIADEfPgR*fq)4A54zCS(AfUJ-r2iwKUHu#Zr#5Cd@L##p2Mja>CD;l$%rS$(u6|? zU2e>28TVO{HJR7CQV^T0-`?(zuJgXHxt57FV_6jHIsNhKV{P3Q zE0ut7pbhSIgVSn*Au|E@U~9;{%E^-)eatbZ)AF^jB)Gd$*>NZn>2dg12>dZU9tj2l z_qb*ekJLqAVbtuMg}Z8LWm=*|1CvaE9%%UYhU5%R^z< zNRk>2KC^3v7!gT8ntUTDrz}2scWtBjJ0Xt?F>fG>GLqgi$_WvS(MIBjjgE;V3z&k< zAtGYb?%!O-0MW)lHK%D-U&gzS@ugK`NpT{vYMV%bwXz@F#7-^;@+#FsM9aXE>Zyp* zqb~|_d6=mN-ykT*g|ej2rv~c+M_;gZFx}ZZWtlJXm!fqaZf*z()d_)i(mPJd=TVh3 z0bLo!RuZ&=K0Y7l%(-@*tE!UL4ce+DvuILczJ0koOe1opX5eU~|R?Mp1 zAZnw?0n?>&W|I9FTIkNWS&!bdZUG$)$Z?AWt^S7ryVz5oJFx# z-(7o0WPKjgR^izo;4!7$d=Vj7CeAEsJPKDvw?BcGb#^_t>&h2P2p4HFAd-*VIH{-u zMvg7^M2*NSgGQg5o^qiUt~+v4v>lIC943Q=^qM*R!^vLT!62aaGgvtM&X|jnlBtMy z%-4)5E1=60((Uj2W}8-CFvI*!cE_HuFMok7sWYQ${va(Vf3Ft7J!?2S9m>v!W8Ej0 zen~$-LB%ke9m&$Rl8>8z%{;Qdr-$4qK$alnLT?C>;-G=ygs86m?G7Y3(kV}}y4Jb` zO|E-gm9jk7qGT|a(xO(UR13#UrszYE3*owKp4r~BU|XaDkL`S=z)`AJ`xlvTgp>4; zB|4qc(M3qgtAQ%SkP&OAv>Z%#AaO%gN^B64Jd4yie0MN@crA?F86y>4M^Q{^jzy~P zkgL2%QWykmcJVsNhJ3G!*I`v92fs_vraX|*NqhZ)o?|!m(tww(_3$5Ck>LYQV%*Xa zI1n4cyaw^lG{8vyQo_}l3QW;3X)}thb}dWZag1SmXxAr!WTT8Lx%?~4Ge&SQ6gSbB zFT~u~u_9D6f}vmhT&tnhOxYrAH&D_3$K{Hf1N1i#RD{Y)_`-sX^Ba^S>Dw`aD(xL6 zV|Q7ax6F5&JmzQWy(no+?t%|^8mZlZW*+^JojFEJENpOQa%2cUqW-!epsm!Q*^QYx zJ+erzQ55*F9hz;iHnyIATBy=dV>;~_w+-+4-j8hoLE%@@rL4%`8tYzQ*x6nJaGJVl zBTV&D>!OJftyvTHt+-tBXmpdNdX>=cZ?xZd%A0bd5Bd1;BDiEp%MR1=)}uCr141j9 zl1m`KhZ?LM7=Mwm^ibQt=YJ_7uXS&CMCGcXoi*kHyQbOPrE7C0F{{3IKCZq(tL@t2 zunsH8X|oNJjU8q}Beqo;opoVJtMNI27ZDRftO1D?2U|SMtw%&`pL(#$qNaIo5s;wBwts_{tEb zZ7bo|nW!ZIyJ$5>=5_3QIYjq+b0ZMxDnm|j5fqTZ)ZQ!-g_c({l6IxD$-cH^6E~7a zxkg?K%AxhpNvzzpQWBy4YpKzzNrQ;_yakBbv5kE`0#xOtCSL2v)|Z-=R50bttcBDp z=?{Y0e^E_(Tgk@@1>+Qt_0*!5R;&NKs(&6~Xu3;rrS+D|8t-Tpbf=9ozs$wlMHo+@ z^%rUv*iUL-2tP)P45&Ad{lmi+=l;5xkXf!Clz?i9I{z1Re@1VLWacOxlTYyDR5Aj z1E8DJE2HmJpH0EDAZTk_sAU?1MyFSv*DfE0mV( z2`ueFNBOo+Q&5Fufj-bq=gF~1ZvQhy|Kf#L-f-mfa2J-drFf31En`Oo@UfN1T)rJr zc}$D)EZAUd!`}4L>@Tu^Hheh~=Q<>6SeTIMr)QSm4j&71y`U;@+hX0_4joXfAi1Tb z(Ii?+bLx*bCGXzz7Nj31dA_zax2XC4Re_Q;mmcrgJ>rgxi^byek<@D7Jy965 zC>m~X>{LqYs%YjaTxI$(76y~oWLI0t7y(N;0cAp>Hw-F(icMH6y+npG2;G`d6i!i2 zl4sVRRu`yQuzQgJe+44Yq``#z020`as31xza(w!U9F!Z<1Z;0+4ULuuc;A4F?NN=y zvUd&dK;iSm${rAgae5|(JT4~Nr;`{j7794XZ8B{Ie_SB?pulP$84X;vQ_L)c z4_KDGjLS6>0QQD<$k+R^5y^5T63#?5>EOaZC}tVH;OmJH%SBxxXdduV(kx<+y`&*a zmsBJgEnH-R0(+m%calVuY;gy$lT3rUqr^}F2mF~Qs#tYAmTQGldLS)x7TO6o#tF#j z{5CYqyO~-v!t1y-71jk;(WswO^v%jp*FC{e@@QDzwVBH6>epNjMb%}S#QJnNG{}ow ziAW!3-a#lU?$TOlbSfKca}FAH5DDQ5T7mQ<_tWwbaWh{+BuvCPin<20JDf#0r?-VY zi#TE&#$sRYfN-_IUy54Y0kkRczpGKour28m_Y=0Ax~GXPH5eClMpp@J`<(M2@BYd$ z>!DM6%bp`6BSbFH5km=hd596dtP|FXcEVq)a;|W-bNtiJZ~o>sYUsZWYyyx};0J3KoK5UPOQF#7%g8*7Wwa~PwJ%V4 zwa6=?-eto#*3p#q0rKTHcAJ>;$>X=X#5R*0+em#Sq z_&CW_YvKK^YCcpLdIuu;bj31@1u$K<+}mVtiY%LQAH2tTWTzgS%0{&<4ax*?X-)GN znE5Jo#MOD%`Xgd^yB8IB;=cwtWiR;DP_$jXAgh2QlIsOiX~b--zsB9vgzI(YGV*!L90Ogs)du9vr z9V7zV$rNuyRonJDNC4_?Oyhx81S@NGX!EvHdqoTC%G+fQHlTX}H>kzOhxIE!Bt z?IWc}f65lsFx#zn1Rsy9|K6VcD)Mc|*M6$z(WMQqH+uFLsm|o%(OR=)(fy^YobObK zYu#0CQJ z+plEiZz~^K{2}iJO!jm%f%;J-tGTVmInz0?`VN(~atm~oPLx+WJBGi~Ca+pl?k{Ou zSo$OwRYz(a9y-i$O`|CU6+CnC7a?we!83Y5WqLTAcA9WPHQAJB+u@=n+K z+a#3*?@6hRGy&6{2^VXZ$p8crH-qnDUHO`P^=t89X4I0BH!HqjCB3>_z~(vH&^$iOB^?cdy}!Raf`!3?zGM$#0R8A=$A7B1`@ zy4{!DsqUr4$)*f(DWH&wwIT9o1D)@OHSaI$g~^Sh=+>&bdR$dhsE}@PMf22E6g3%0 zX+RjBMYlzIEd+g#Dy&TWAI4UW&uEB}$UYbLc`xy&UIeQsY8t)RLQmZo@)})F=sp8q zh621SZ}#X;PWozcrB78_cMqs01^*qMd$X}cUwIGau3o4V({Fo;T~Fdz##oHb2Qwod zuVpjZKd`s_<77A0AdvS-Y2xh>nB_y40hC{7gL`81FUL8Y<)$;cN(|r1I;Zou^IUHp z81p~2MT-*xzfYfH#>b;ogeK}Bbz6#Ry1!dRT8{9jvuyFiJB3F>v2xjl=eDF&N#)T} zOIDV*>ao5jvUKUyJpa{2UOt; z%0CuJ)JIo}p~_R!^xLBP%2hx{o@+gnGiDjnoM>ZrbRuLC1YtNXcf^r=#-xL_JoG3eW#*UzM((Pc=2$Cpzm=azi#CPC|LV)ymrWaLhg4_G55#3F~ z7j*nz&nNe2roQPWyNi_I-wFyTiEbGnE0yArD9w|`TYy}U05}|WXD=^MpCeY@yP#)Bu25w_{qD16tx z>Idw*bQhlMu7u;+7tr@*nj9_?U}wbPP^tNrwO<|>0r-OFf0?5FY0{c3Atma{e_?NE zw#q_|qAK+1A0Zfgn>6Gah4IM^ZZb$|;~M<3>FWTMU^YZOgyjKI?wM(#(tODy*Nmla zn@`$tIvI2$PUI=)rR@A|3t7o-gVs;`i$XooeZ)yGgqWJr!G}beRD|CV$w=R`nkWKH z{;LVUtd6pi{G9i!Qb6ojJmv2`cB=ff_>yJr`kGd1nIATQnf-PSAGyAyqaJHZr3wc5 zmf&29+DEP_ae1{wbz82f7x-+}8LXPVk+tAapXSU{FzIt^tFtG~02Z)|E~%>*b=v8p zRCqH@bAQ6vZv)CZcJ-|({8Rz2M$%Yf;9wdCa$l4fVv+!R#yO(o9DD3EoS>iS?W=Ca zufr`~;pE{tzdXDSPb96y17QlbBv}MI50*DoZBAn~eui0;8kd|LR8QPp`I%cj{GaWI zS@NN=m_Lk?%@1(?f5JWN9Zc<IN`T#Y zl%HurKBdpg_0#1BhPa{R35|)5xmZexOtGC~L8OhbeYx;!+Nd^Ir%m|Sb(xr^6|wYg zB<&mfxaY;GgIz!ulpSq3Q5=Fg#qmfNq@221vlgDWY?v}OXEYqZV}NIm!N}1(M-a)W zX+&Cwb*Uk8rVH+`MP4>@Uwl0Y`tQvAU@+#^MiBk9rnnCbBFS-7F!ADA`@9gn61GQQ zOAzoq-JT2)7I^O+hlvZcZHEgJjnevjWYLF<=aKM=szzye&F)8N_KvFN--v^$0Qa6t zpPV;B!`%n$1Br#uy8%9_=%Ijbt2W}ku__JL253w?Xyq6L`k^#tor#J+OCN|Xh~p}V zq#OxLQ$ESE#}n`LH0}xd$74?NSV|TR8#jPIRyW7{BPW4kL!|9~Z|{G8e}`ROms~>> z5JLHFCuv@!u%XyQQIFR72R{M2?a;`-TvF3oWOSTvtz3Cry-C9S?usxNV5!9)?>#8M z`F}mdI~U18X@#$`bS7I!s|q3zQdCyKs>ZACC|gh_R(4nsz2jFQS(m=BXpchZd8+lL z_YgK>WAbTg6aC7+qBP(RkpI^@g1o?%KFA}jr+90Wz&e=-R*hQk0~*TbZdp*CA~wSX z(vKAp4i8YCXAr)@vgkX5P*-47iNGajnBrbFAoBO}` zdZ!>!gD6Y4Y}>YN+qP}nwochq=ag;Rwr$(iRQE*3o$ebm|9igtk(oPk@3p?wI4wIC z8_T7HpSPOhm$GkD_o)h$Vj$hbxn!Mfza0 z)DEmjNiA;DfFT`^nngWZ&fIOJF3UEaeE&7QWEzs(aB9o%9f^y4)PX$wNBpGs;B>-bd>Hh z^HcX>VPnp^kXU^n3iGm6V?p3BClvRX^XlEdOgZge5D>I|UUYbeRS^30Cyta=#(^sN zmecpffDz~4P~B8#%MUSvjH12#_~RHrI~`;enTy^30s6M=)tMRk#U@+*-YpdWk8#28 zouY4SZ|Ce{Xy@`DV}lgs3A+OZn9d98i04@liBCYl`ZT@gTKa#{dQn30wp?@7GMGp? z%l`V~Zq`i_Zi)loSy)aS!sE?3@Gy*ArYAFm-G2A8np_mFu=-sUeaN-od_=DX@ToDu z;~5x)ULHcFFoLMF3_+%)Jfhf`ky`|yw;>?Sk{r_hwMMtT06!uQ?k`u%$Op_5V>7LRnw^Jy=|vllHFgdw~8bi5dM^`R9z_$;5Qer z$-Kax>)nCt(}vVWu-b@pXH}S~7IgK^vcZOrq?qigvBiCdvR7weq}a6QK_94)O7K zIOK<)($hx}N##rMe4PV-kj_~0Ly=Pwm*R)0w?8!EEfJr+Tg%($PAYPMJiqnT!u;%N zf5xYC;veyI74o8AA*J+-r@leP*6>ow>i}^T$Hhx3IG;lL*n(5711l1UxHo-U;jl+% z7xum|Ug>_UU^nOsx;58_DwIuBO)`|ky;A173p9as{tRpe^2VR~F-#g#YgN*m6?pv* zd!phuY#0Cn0Dz>}|GUJvTmJer-Tz|~Y~fhjZ;0J@_<`;LsGt3VaLd&59)5G+%5V!A zO_WPc0uvONT^uKpO5k!b)wF%zv40l5PErX%0apRVisEMGuF1*C(B)jaz6bJl%r$(B zSvbr~s%1CLh!XeNBwaH$*FDsx52G)Ad>#ED>ByDgxd9CnOw+qhKLT|Uco$7TFX?sT z#`8IDxN|w9e}9w?i1v+n0X5P;VAvKBZAIRBw#?;?qL=rqFAs-^5Ugoh}GMNIa^QO=b0x% z*8Xk52ZaWG>7irowf+5G533DR{`2TnZg-}L5N!C(hz#kHhJW(Q;c*zh3wI!7n}OR6 zW0e4;A&q5{r#~`!-Q{&~tw58tWCJ_p)8acUo9AP$HZLGw* znJY#i@C&9AG>A^{&D^*6SWh2lgIC4C0u-Si8|9w{aD6->z=2IphlCA;KtNw0V7?k~ z_*r17v!)b6SckK^-xe?h`0B5HTIEE3r}K$FG4vf6ot}sAe zFV_pum-`>77&R#5L?5?PN6qU38nFi+*?nW|^>YXPLgt80FMVfrGA;c8;vO~8)C3Z@bwC=pYkyzezaI|`)^{gZ?qgTk1X8<^!c2Ni z>*yVa^75clEUxrr1zpM2LNvt9d=&S>J8)@mrCwB$h2JWEVids={$d3_47BJn`%RoT zaf9M7ULwWZ93%e?^Z{=0iEK9J7uAN?sYcL;x6XUWD*XiRm$QY{ zENf>xWW2z7>km25#x!n>Oq?`@Vl2fHLKH1x8-p)>o#B&0_9+~FQfiW$1^D@4%rk=i z2x3Yk29F9guze*+54kmBggJWU&59An?_O%|;evVbIGB`Jj;~LQUB%mzB!E%?jC^Lv zKW8G2k>ezx79J-LPqGC{1H9PIYKAWKPiw#j7`NOI9{PGK7t2kvyGDY7<%>F8xv zJlO8b=#qBTFYvaq)gUJA2T5%(i*a&OE4=U;{Bl5aBQ> z;pQ5qY!|~A3hC?cX_Cj~+#2?eGovBch+ z?#ZH+z~0-tgtL9v_aF;~si`5Hc_3W<6HHq0R8EYlNLYnq2JPWLml0bt@V0R`v$x@i z@fz*^O@y;eztfw3O5ut>O$W9E|IOBl@d@zr1u=te-W6Av9r|O(hDA5hKv^L!5M|vy zra(#8njMQl6v*lCX9{>CXyC(LbT3P`=K_Wawy3_>u?IrZngL@EtXan2J~yHq_Hbj! zfQJ~}j|Z$U5ulV1`DsE3lr*y){<6@ru;y*xS4ynQ!a!%13m51Jd*cec{Q)YXtp{dp zQ6rZg*R#anZ#Bn|UW%lwd=tCGCBrO@zsL!EL9y^eAo-2%Vh+Nr3Z)QPjSRenVsNBY-jc!Q>3~cMKR*TL`gW4x z#H`r4D}A;uTmxwd=v2aOQ$WdSl?@s1rT8%ybA)cpwRJ@K$eLWWLabLYR(SeBm#b&p zSp;VhHFc}3n<1N1(#x!m7FXw`>nZB54LHCx&*)rMMiX2$i##JM6$|m^08qzB_!X8V zVQm?6Sk~?8vVbrX^iP(+4n)*mTh{W-|E}WMUn;lS=(nHZRvF$`yB~%&w7sw>j+>z`^vc=s> zq7UZ!)oTt6g7lemIWL`r#!fXN0x_L-Colgq{)fzD9lBs+V?;jwU2$U$E zdYhAzQ|EfN2b);xeMtt|X)My^D_PGgv8(o$_Zarz$O*717j7DJz#2+Q^ zaR{>kBrs|$G2cf*;ZjJp&-uub*pB`01l%=R4RVK3)I#aLsJhE|;br<`5@4lSMwbq`&TJb;T5-8*#G6b&7=9AO3|i1{fOf`4AOzXHw^U0RrHaxU6~Pl( ziCAaM>NliS&_Zr8*{ZCaPt~6l-nTsW+`5LSL`qcsiH<6t_K7?~`7W#j9WjyC*(u_H z(2oqpT90n8^dH5>XHXm=E};{qx`UV9YoOmvSTo_)ZZkFqiCgsL%14F!+y&QqIu?Gi z(P&6F)6HgU9{7unN^lQWXerxac^A|5;$vk1@Kb(FxJu20%4>uJ1ZSB9**S$tn4M%t35f7LC+qrz;WQgn=Pb^G6Y7MY z0`{Ji*D`R6htLe;`ra^2Z?qKr*>gdLG)N$y)cm~nYVdL&UHnH(7!Q|SKKZYIBH42e zDnCCA9*tbA`hmsnjpYy3LE)!b!0;#ZzWk;>1e9%YV!TdIljirPMg zxYDF#scjAO@OvbZZqi;^cQ1+h(g0AXw(F((RpM~LQSj7ez7D}@4ds2}M)4&iD;JsO z!IHTRTrNl8+;)V)5>LTJh3inovAJdeDor^}iv0!V?e5((w!4B(iQbL;WYTTlOvj`b zOs>(k)=y5ut+lC%dbdHSSgNt=Q7pl>{yh7YkSUdWoF=y$uFK<`6)1p{RTdN(&f8CwAoe{fX4HRTS-_mDk237dYZ0=$>&!_VZUyDDrhIr;8Cp8^Kfq zn6a*`%BSTf2%#ZC{pSKgF8U~iWT=#a^{SQ~ofrxQ=U5WXx}{p}Xh%l_e3D}`;2N?4 z26(LSj$w&WA3%!a3hp9HRFi)Qf@+1ym~fQ~tI>E}Q!2}Umkz=>k&Ov@fDh~wn`{v} zaZ73??8PP3ArW;565NSkh(XO%vCL%Yr4s?y*l zFLo%q6fD)@v@Rp7ib~QGXxaAJD|0EpV8UY36SItQUZHUOD7?1*97K+aKl zNhGwGemSj&A<63hQBZ7<70Urm!lz6;GWs|&dfES6y3hlr(_9{OvFg}{5r=gT;kyVv zANr?!aj9i|yxIn>qZC+FZ8mK!pp{u1>#K0@xd#e?IDj__hF1W>=FRZehQ7X~!ANjm za?ExGSn>|gQ-1wz7XXtcBpv%Teiv47<<{zAVS^;gCtRZ~YxhP9;!Y9KUJt27F{j|3 zZ)x}^0CtLo7)9bX_$i~2%`>Rqn9KNteXK#B=jYn@Q&tyx9QSO8KPN|F{FDa+4Exu= zEe`DD?Xj{11Ke9_;{Mlz;xT4O!4}~8O?Q_EVR2mnz*7{wvy3%Iu_9qy8q)Zx34Ll7 zx6DAETf^D{qw#MID~t5E&QY4q9>s{xq1ZFNM`uyXO82!*MOnooYPfdPr2n`uZM&k> z)KIzFK5LcxDhVU!$6m|H0dAyRpF8~Q{;-y&79o3Ufj!Q`ubzoVG%VV6#0;^CJfx&OiR_=UlEeZga_Px8c zqHH^z3Hb2|X2K=Y)1H`e&HExVl=;Xq9WpLw9<4QtnGP>vN=9*WMHBhFvz?Qa@=YOa z+=jN;;--j|W4T~-BO7;)|B`>FNiRO(N*HaIfi{Wrif>@Za0jE`a*I&Aa&1pOBSvs8 zar!PXB*Q0K;4)MI3l6{a7a&xLN(PF=w>DOCVxYvl)4ck>0a^d(V1{jVYW0a+XObSk z2JBI;7SX5$j0C+$t{>q4t~~wi9s&Fs694o2|Dj#}KS$z!d31sQ2gykB{HrwVcfIIu zC+dGLcXhI{u{2`-FB>kMi-(J@lC=GQT5;85IGU82qrJ4Qra+V{VI>dK>v4pQBGd`R znkn~pZe;#lxsj3_divCiNm-5B7>5~PNN=5;U*$#L&hqp>xV#^1JUn_r`B-$d30da5 z+bh7+ve-pzUr*1y-41G4e$Is%Yyq$dn0Kz}?(JR>X0io#v4d^mWmZ3fCkePjIEE(O z0itixExXkY09u9c>SD?b!x;u`j7VQiNoa)cVrdiOHCA)tPa#}L_;_z*0l?QWGn8Fp zCygW&vbxS(0xWvl_YDnC=MZ}!&k71-K(6MU&CptU*uOkm+`u&Q6(eB;(NvU>@ zx1|q+sK4ft)FyaoR>KJPz63Z zhfJAvD~uAU5v|DoM+#ldYk<{QLrf`#eu0;zF3G|e;!)j@;IX6dX- zrem9w!L<6PXpA;!K82VuyKAlH|Bj(6H%&;2Z5(atHxHsq`PSGPl_L3#p`(ZorBZ_| z_$BOM2s+TCv!g^|b?bnLpLSIbf)h-F&LC9eo7TVbeGYyD{r3~#vkV;`@tX%O{7VG- zzir|F!;rhB`C-2?iukSTKa?tHK$(&e9{o(9BAV0SeAibOt6}E|0c0ggN1B_a6WY;O zaB*ON!~U@=oIu~R!YQ%uWagH;GkGnl$kM)+5nI0cF|;2xW~BPyHG&7-U}&Zcor`Oo z3!PeCj#Ne|(5fnhw&XQ_F9gM7IpET;RlY8xSs*%f-;SV4=B_+k5tCAmRsiu4bFY;` zBY8i}(jTeS)nL_&f+^cqaXgr-~O#;7iv zB6^vyf@zBFJ{6fUQ_0^yHeWXf!p^!EH9xqzc>$Fyt}>%7vtgX=;!IiZJIBoN|uNuNY&iQCRu&XbP(okr&N51 zs!zkoaB2#f#K-ax_QSv-t_l&z07XQ_AZ zonTXG{S-e*u)sSf?seM3D*B5_hSF>mmzsT$BKB9r#Sv>;r)1&LwA-tnOqqUCQ)y{Q zyL655_Xk-Jg#+u0YfKfVh^!PmLuuy{dgs3tx<}0={3C4%if?&)C<;oA52~E9S(j|Q z&>v|D>auwU0X8WH<4?HPgwuv&itcvQS*>~{(X4Zk5U=GCmz@U|N!;Dd*%Nd;#y`!! zt*4_uv`)~O8G|L>S8l;%e2K}8+*ayxw;MXEuO0Geyh*p9A2JK1C$~C)Z5|H}+jT-i zVye87&qNRjhID@#0R4jVQv=NQnfEQymM^WyQo^WpuIFl4z{ib?Nf9>@tdCp({z3CW~Di3}5 zhj^#k^XmjZKX*V(vL8EHH5QH0e9kgu$!Nq*;oo^+Y@2UP%k$lh*MPtBA4k$j5}>~{ zN*;0?!|>?PTGoij*1n&GwuOxo(;0IurDwu;uzhVkUf$_>;BHq+@b~XXKtZ9b(IR_& z19BdRnyD7Rtmh%`D&(gCapCHkd64*t3Ymsqk`VA9zMC-C!i8`Zcn$*xd`iZ+ichhu zdeF|6uK47VL((ADNCR{`CL>*8+_?d^A({cc#x2q5DDXnl8j6@8jHCSA{@yRhZYCrC z)+=_fWEu0(Ux(}doe26=FCM^GEU%Uxh+=@%r(uyT+6o0MJU_jGgN)~8&iH`4s zmvYga34<0#CPquGUE z)DnFaB$Va-B$Az5bJ(v-Qt*1BclnEqQXG~Js-hhD@jyVeiH01`OR!})yavFr%{*P= zsa(FaAJC7A(*NvvW9?xmmosJTgDyp!S75udww8dWa+m z;f!30Q+f<#+Qx{a4mcvAl$^eFGgxMaon>}WVB6{`6uzOI%2KhWgiP6#WD>&w-j){z z3M__gnC!CMbB``yFO9|wN1-yThCS5%(=6+i2n;aZUAyIKc#~~tpQ8K(IKE(*5|E)( zT2(xq?_RM0RFy*hLt)IFR}hV2c9Mk);`}!1o>_&e>^ZI0!O%NW;6^Z;E>-Bj7Dqe+ zfdAZnn!8%Y?%!RC&6tM>r2quwNZdwPdEPvOqWLKRo|eM!2Pos3P*OfajYVh+x-JyC zyCU76fAKOh=Y_>Zp$Wd_AQ`((Eq&^Am5|SKd!{sL8xADxI~KH>S~c4t;Fu>5265lC{B+Vc}zCuNJrr^Ss!N7NGqx zSFg1uWqdc}nqlzUc4`pp@yOy{XjEnftRz<0rJHu@Q<3gFKw|d;`AQPopKq|SDpZB1 z06DV{h9y{xgQ+P5WvC3?egmsV8vK$5!pQ$m|1JZ}ZzLypD0yM3tAMcoX?o}Zn1xfR z%`>MQ&RdO^Y8A9x#a6dOmej|VN4i>x3y26YMQMLY>GM@x=m>%V{zkekMn7b7J3joM z6{V_HlL=FL-c;$+NMvA>wnuG%01&5TqIj@Glb}eR@EMC%5EaBp!-xX9!38bALncGP z8mT>Y3qtqgU6l`5;vItETV;-CKiD zg_h+aXu^rcwcZ=BXZ2JC{ryrCzK2J++V;xsPjFaPvp_p78~dll41=g;If|Psi}Thb zoqNT3`!fpW61w__E^T5r(4pA3;}oZ>7%+=5`^G5G_ujn_sXtSo|mnznR7 zID1Aejk!mYKF_UCNEf!gWaL=FS+V7{%mMJKrL30Us zu=l%9hitQ!5y)GxkEG(*PGYV^Y2_iRjmtJ{#l=l*yl0i7j#Y!4ozQGNoN&{z;#gJG zSQ$&ES@DT8MbkF=Vs6 zI(Ky4z)0-Ep%6j;Mi#gO54{+3nJ$}vx3eJ(bixma?Z|pj&jUfg;1o)%fT~iKVcH!I zG*OU7@rDvfcW6_E54mYjyiMa7egZIq=@>_-sTPx033XFfd}hhuVjP9%9Vz&7fBLjY z15o*OcXd1cx)!3{;Z_HcuZSfIp4)ZA_`Mi(dLIz2<^&C~3213*gAf)+J3H=LZM$b{oQ}v%Fgc&(k>Wz(MvgTE#DTy z$IfVxN+qs!p+pH2@y|ag1_i2{U2y70qN1m13L~=poKd{Mr#^ek&n4(xV{mz1q)NSR7*%7{T z^$q*Nf%cVjYs#w=O2JvhOW-lRScAHVLF)qK0Ck^xq+-a^%R#G)p zSDrsP^|>D;)m)ZFRQVS%CSPoXg1c)}#}2Oy`Hy%xHt0MX3{?f`V6Eh|uy^UvEA?}_ z8BQ%2S-240JVS*#GlqL47C}9O^M>(HQ^o;!c-#ZOpX%%7!amqPvvad!1!)`ykPq`g zVHaS&r_FTAZv|{&6$C+efn2;za@5RC5Kt7r!a(|?f6tJJR#xx)2G12&r|q(>E=tJ; zg5>OW@xc7R&<)A-bHHNidgtr1Vg8K)zhs`A0%qV(ij$l|x-+0*hD5$Z;}KJY@K2Ya zOAocjHe_G^aw{1+h zqkPeo(B3Nrv%HP;67YQ&+gFu(D5q-Nsb(Eg!yrGk{zCWtGK=vsg@JT`?Y za_WdGDb(>$@_hk?%fe5s&F+@Ls+yz*b3x7X4CY^kC5q?A`^w+-O^Ouh=G`On} zx8XY-C-vm#wThko`2Za@<`V{;zk90cJIwCP2#l*oML#4;?^y?OUp7hg(Pjc&VOYb6 z8+o~n4O@Fr)ji_jYb5FnAI=bqSVGPPmk?E6jCc7ofwNyd=mH&=(6!#Scx!>TGJy`? z0A0xD#2JRxF@&J9vN?O72j;yoqV|gvcLk^oDw>MFL{(nGs0t)Y^<%lF%6Ute=3q$D>IGOMh!VzhsI@uiC1DxV$lIu1icGp zP8w=CvrlctCi+lN3lj^6ptjAaWHGblC`Gi1N0caw*%d24*6JK>-wL=dSY`o@Rf4Fy z9xK3oJ)boTmbpAL{kt^)`tb%3%4ZQJrF{fKOmgQ)yAEYW@YBPT4-H;e18-p$^mB zVIxtLJqqEOd^DhjqSq)opgC_P@`u7kt=guwiCu;AVV+z|)_se)3T0!TSCbo8&s#i& zji(w{#DOdNf<@ovUSoagqd$82t{=H=?^h&5;2L2@>{H3lIdj~(S^>`>%X!zBqGRok z$qMQSG@6>c)tcZ+T9+4+jW%Xa%9Q}c1=w5M?#VnPqO@VlS8wh5!H>JD|8swQHS-f1 z*;O8RJ+V#s6BOMuHjRaJnmgOK4_eyhC-Di zQ@NxmPa7&0ZKP&ZDvO$v+sG}6Q&Yjg zk2Ra74jzvUB&qvpBvnQa+{WNV3!zZEVg{sU6fL`&gHK-hkn5|Nc-5+)NQna)khgoL z`n7GEST-iap zYdXFJ-G%<~sZ!DELis9;Da}A5Yo_iu(e$XQifa3oLRG%W*-k`;ax8@x_ejtV(Z;3( zFrbFd&?aoFl*g;8>7=SUy3!m!yal#UK-j6Es$1cLbh?Qd#DSVIqxfWsf(sHPfqe2K zrWL$Ufg~he$rnXU*Ec3QmPgIW#OUeke7<7&D1$nBx`evQgT#}$EDGLkfu?Fd?~RFT z%7}SzWg4xEXDp7(d~$Hy7397u(VFI{n4M4bmC;+C0}2c)MlXa{(g`ie{ZNA5(P!Z4 zPMUu%PJZYeKT5J>BT80xDv~jBxM(hMe%q5}Xch>P837Z;nK|DAE`mTNL0SeHQiITr zGL{n&$apdK1;Ry`BVZ|sj(Q>pd6ehFRT!wMde-g(gCNQ=7!r7@AzEbMMBCgkKRUYg z`rwjH+VAV8Qg!hrlhPRrq*<1d!DeUNLLQA8mBN(w^xH$=7$iSxLp5ZpDEp2}{=G&y{TpejHtPazrHAgRMx`fFZwxpy2$rdn z%F0%umT0rF94eiKb~jaybR=~wwvdCI6&zAuNybfDTr}|*7*gkSq} z&w)GvzCewNM#JX53pao5h|&;%TdFVKxdp{4F_=PQs)|YnDsBQTuH3vPJP@~p{Y1Jd zYMJ)@%t)yUk6@`>a2U+CfcK^yitp$Fsm+00>#SbowbQn}z88krBy`%?{A3;4+H| zf@+nf6X68`W$hE8sH5b5iHG%QYh<1$0vU7O9;82HCT|=qcMeABQBkhV8IcjPzsE=e zfQ7$WoHQ*NiLv^y(?dCk;e1_esunwbi6bcfPIgL;@596v_Vw|pCHJERO>Hh83&=BD zmHJ-J1x^ru4m*b|Z{cw&LV$7i+X0rV&rMFxwu3|FJ}pO?68zn&x%ys%b%-Nha&IEP z$#EvV-Wo;-**tkiO~fw`>HG~0iZ7sRv(xbv{Xh6{xuR z{mSY=Cc1H}ZQyxA7Pnkp8M^0Du%xxDO1@C48j1jZ`lw2b{6~H@Dq9O&Qz>%^85h2& z-$p{L&u_#!g#!jaX&IoGUHv{jMX$0dt;3~y+QF`zc0-*_&JgM zc}epr6`mLO^98{IxU!A-nOKS3Mw|iQH={~qNeJRY;~^fp(a8khO~4elY(zlipzcHs z2@HkH% zU7~W})DYUMvGk<9sd=#qv*q*)1=kG@+hUz))YU^m<9R1HK9Q~5tXoX9$;=}y5_uj6 zU*>aB&~2p|ZINF@wL^=C~4!9qcQ3LZ`GwxX;*qSucF#;ac49DPb8ds5pdWkr+ zsgWU6=t%)sRIna|BaPN3-gF`PKFvf+yjHw4Do$QvhS7Pdn)X5V7vy7B@C#p>bS-C~ z>nV~$wK(}g7oTr+oqw``f>{YDOqlA;e2dwObgaI$P_01UpyY;1s)VCBZv#aJrh~)wbiWYzfrJR#t zRf0^ERZ?Gqv<+bMsP5)O#dtM=gIzT)>DuftqG%*xJGaRC;m?Pr77`h(%qQ{*)YNV zuh93H$4~H2;CQccZ;O1*;~bq9HTbcx(n`@3lL`cvuNg= zIqNc6gy5~g?0<_|mGdzbiU~AC1Gb43p+b|0!t4=sOjY02m{mg@LG?o<(J)DkE@VtO zR*Y!Lp~4KVvn9rYz1i;fCb}&&f4H-;NA;V`w;25?)=apKj)hq!Tf*P@M@Bf^)&U6P z&{Hqq?>uE0yRGxRu&*~qwuUrD>ItEz>O%Fl-2?xXhhCxMxQ30Vp9*2(CgRBrjYWDK zYn$mtz;R45?Bw+cznPSjpH&{@23_a7jNFt`i68jtvq;1PxM_eJ0IKxyki)vcYeEWHbxs-^m+h=i|S9V3-9gj)&WQ&{{$^Del`jBbVG z&Hl_To3Fk1(HL@{q8y_(i-#M0R5*yK|z7q|X_#7xLGE=lfI0;Q=u zcEuAc%Ie=L^YrtjSV*2hyMK!hypn!`v4>$-g3gNvkpi}F||2{ z7B~7ikv)7L3kz))!o8czykmZr)B^z64qTM#|M2(9O-c=2-A%19D*g9Cj^5YHf_4v& z(89kL(Ga9$CzZI(oN)l5ZMg6UPK-7rlAE7a!WtKYCJ)*?Kv{4{u~MOP>UZmbazrC` z(cm(EWZI#` z1^BNnL(NZ`WDh4f%z_ewVb0Ghm{}vU(%7ITmE*-m+roN?>z8a%UKWkutGIfknzqz2 z$vubYp5K}{yfN62(I3{3_bmS9dotILlchdFD84V&iY<$0_`Yc6zZrN74YdHG4epm= z+5M=PhIwoOYuB^fy`iRp*Q9n*-+b(9--*7y09&`Jem%xER_6+P-*&3j4*mKJRSIF0 z{7f$t5C;h-GjiZfIciPXaF5E%Enr-DX(aEEINAt+B5^DFYx#DCV^8URRq)NUyTIDH z#p>nbWuKFR=^-wwy%GNM=SO6;gC^{lU@(aAo!AT$88Ho|))tUwl0!+4BAu7ClskJc z8aEHXTLx??4}DFJj&2(BUuFza`qtyEMPt&Kih;0I3t;kJgDy?{8vF_2U-TZ!pxUphpIGK zeblxPmFR<zHVZ8p8-19lm!%+xCHq!LlCbw^P4DrdE!FpYcw`)@g=i&tgwp zxKylu9WOCIGRWN8>N3UY&5vqt#9Y8tSB9mHKQr7C#A=XdpRsrHP4ajZN>w1QrXZm` zDJ1=cv|edqHN0R->LS*Vd9^)yqm>!ksg?vkz^uhIRt%5(=08g&l=tl`#Gy?MP)-}>tyG@` zAp66z<@A_IDN9xbH(iz`JI`_Q#2N1GWPa~9R%m*4!#YL=tTxe3vgFWSS6H6N!YpN5 z|D-Z2z_JmdPWDTY`yJ_%tC`_l1kUU^nF@2Fq_(Nh@?60nxrj7dj`##>o?zR@PRv^9 zRi4z(Tn+(kO|u5@+MQ#@A|SZZa}B@~f#%M*xt0R~HxjEpRIV#3Kkk<{vMH_7hRAfD;NeBP{`cY zBu}u2N}kT5{1b9e_|`W8jbHv6o6A|N%b*8njgjk1D?AWb&nAC-wSfs^?x4SNeKA2t zGQ(1_Q(;eJHLgsg8}T>VOm&^=oU5i8OJY;csj&f5BqMN29(F9n%(PbU{fh%Ev4Xqy3}W$CSv z*$riv#jAB2>47M|$y_{j#uWz~H&^$%CycXm6R>j?O4pGhI*uDE766kx$hlU} z$Dsg-nEJ{?-h+lqHWQeTjg^Gsi)z-Kz|LP=XzWM2tP-H9mzOB}k##evj0y%lqDp4S z5=)^Bk&wRi&IGu;@zna^AY!49=g%OExA)ISQr$7p!(nSCJFM@k)6+8;h%<}3Q~C$~ z8E`~q3{W)UlkMIj@$>}SrR)+eTdb+DksY8nt?kmB1IR5jx(3wbfkW#qbD)&XR z2Ng88HzYaiPwC=|I_p;40L+|eD;z-c;b$Vx-c>$M1GQ&dJFd+&S7T3IN9b^L`-3mN zNjvkR?wuans`7|12^#P~^vV9VwQf*H$@R#HPovqok5e0Ldv6qBqd!iv!W9C8U4Y`> zZwvI~JjCwI5W2Wi`lX+e2mJ6TGb64j*1aIYonk6DwTYX$lSIj#d9w`q>%-={MDFpXETLKP@b7}EJ zQT)l1bk^a!>gLlCM+u`3<2y7fPiW3zmzHGGM#b$6JbYf#Jd%}I>!iU*Z!xz4*u3cB zv<^R8^_^g|=zpfO#Z`cfU5j-WaK*9`L@*!9U5=E;zu8*kDruLoEaz*VwM~xxkcuFG z2nkBav|lx8OO?Ibhy)fzFPG`t&||(-(Flv8{%M(F`&n;K(_X#)F(9r2E`CbQME#xn zU~7ect6Ac%r}1X~v?O*akcOTQFV|XUx`E*jAa?aT|NICRpJw^BTLm^Oa2r}_Mk0ls z_vGroJY|P_a$qoG6n|m=cbO93Rp&5RKus8XSX5Nw3 zh8^}8qVI`1OFDSs`ra!cJs=?2td>({Z+mY(A`M8O%{0qUbNE71Tg3kL`;K!ty>p3) z{iQ(?DNK@$o4UHHdJdOvfo!>(P1`1lXF}9b;+Ss!eD)oO8s|(=R6}2HobRN{q{ndT zV;}5sxX3VkFl;2{JVl~4|DGjTHbG1zhe94k`fqufVy=Tx!HEty?1-Egl4n1ez^|F{ zb3z726*ZGPChO9rvD=2ii+Yp+Ys+a(NRUuTWhd=w4kUNAO%IH`-Yg_ylL70m07 zI@_t25J}exm)-tR_|xoZKLQ?nlqimG4_T{V8$eQ?QWQ|6j>w z;kjbitSN2tr=k$2lEVmppB-B17Tg^$y+P3W>8?Q;;|f(;N>(V*Y|yhdrp*(U*1nm2 zVT2Ge6$z($c+zY^PilY9&Y_?`A>6q{fgV$zqbBDL~^6_k5g~O zqY?@k{4n#s)0E_S3oWx2N2fCGG6!d0Xka_OS^tvg75hJ>`sFtADI?%v@P=0&JY>$z zX^MkHMSOKcgkLg)q>|-{D)%}nCE}TmLACL631u1_Nv~SGP^mYnn0OqPm)0RmG0o+A zgG^~WiTu&YeQt58M51t*+>a0&Rvh(_qV&P?T8%Nmr4XPlGka*KH*o{TqBxKyCH=)^ zNrET+cqB^oC}g>b5@1Y!;QTV$-i2w8Q>W88KTIuzOi$|w_rtd-f=<8Q%^V$lUAaGb zYTs%BFQqYBb>f&2Z9C@^^(y=PUoO?%M7OgqS|GE&RsBn4$T_>2&Ga&VF^X?UaZcf}NUUxpL#Cx-We$wP2G5vAUmQLIIHyKaCOi zrFM(Aqi}6Hx1n^sv|b{Wb+X6ii)t}sSaaXg61JkorEw2PaPdOucq<3LCZ_N}M*tIx zzBs*T+FpzwjwtI`tkX3OC>7Er5{@J^6i7JQH@LvR$ivqjI=7|c|6u=dysU{%1K|~f zU0ju}Uq)1$GSR~fJ(kjl1DOjF$fx8+)ed=hm5C^e3RpozYf3mu&Q<}WXH?CQ7T>fG znHk{ps+$z-kyA(&F+h<36Ek*Fi8^7?NJ0J2{h!zE*?!F zauy=B&H63qG#;~h5kiqjQRs`eldYh4TU8O$JBw}lVM&^VYWagiUY^?q{!@2$_Q`}? zj3t;6@LEV!AVDKn)tQLD4$BFuaZk?NCE6aX2AC}$&zKH3C8>wckSHmE57;X9rejkE zN%!Y|kiaX2MF zlzsf=Ns|R_90Y?sb^aq)8+Eu$wVO{D&W?!y>RsS+j&1dHI*v(oi{e&7cKgI1Da@WL zLq2P}Y6BE=jgV|ibCb32f&jJMW?4}!?`)Ta>!)#*WFte6*cGIcSIL?kAC9khvF;%B z9U8+$!2?tDuXkUOoV+LUJ-3klVfu+-7H|5oUZp;!lW2Mgd_Fu37H7<%iSJ)-wh)bw zs9uqqQ!Axgb=~XF3@5oe1RT%obhda*+JM2xk#Nj`@8}`~9>(jaoP*tNXVPWSq;>m} zFS6o_-00y*5=p#PWwo{T;z~V0d6#O{!>KmfAH~#8Y2S|GLc8&Re3MS~-Hx?Y%(&7> zX`%p2<1l>-&D2p@1Y2lxnoyRM%NI@gzld_%hW#OrzYO&vhCf4UTlxgf%@Wn>Ji&lw ztQoDH?`sE=F$SEu+{WpQlR^xld#hur+_cf0`&7oHp8(qDX2Q1u+v=#9m8~bZHCwKlZhez_(RP6LmM}Z+IcLi4;E`@Lp8y4olR{XCAwgotTV9p( zA&vn)%lsd9hYi+X=k~&vC?!5`n4m8SRIJ|Hx4>$mlVt8IDa1C^mnue0ZC_ulqs^?3 z*0$L))=~=MmYjh?ud&ouXdz#Pd-V@$Awz_9EbeYD8qxV$lYBp)<3?pQKc? zxK^t_L8J5x^s~*}6jL(6wF_pfDasNdi?inTWvdTEPpYO_i4{KxiJ%0Hn{@Ai!CVQj>O5iW$<8vC?vKay94~Q7q z_*5ni8YqvA=#6QPR3mYzN*zL4#K&>`5$Xge_j8r*Rc8iQX>it+`Z3npxu07g@c&2} z)cNb@PjA;ZbYl}Z*-Hku$50~|BI>-9E;2Hf5OS+wtk@P%`0C(5iLBuqoWc+E_~1hF zT`OKR8!a7+0|+~`BZ)h-)*FH_DJl}tLVye~xvs>XKljUaY|6M6f~ZLM`BMLy9a#6- zPGqGio@`X?1EULfqH5Nb0nDsoWC2RK?aixoiEpsH|C}Lry?{=w!`6_s$a>LlJ}Q?F ziMJ`sQ`79OD^I_Exj${)a(*IM+iab~nVXl`m&V^4Mde`=0sT(jG`eC?H*6^!iCX*# z*OB$~1lHDqz6lM%<`Ixc6>4GaCxl-NN^{|J7Hfzr1#~y@VqXT82|lW7U-)*g;vG86 za05JKi#bkp>Jr}fI{}7^%mpcB_ZxDd9`*X=x{o%q3s?4?X&r&*mH|pk`$>G$puB0X z;duMWatQbD0Tz96U3$&-b7B zr0>5kC;v}Y-_6v?`TyWeu1d1^YQ}ZYw?tCzV8lOoQ`mO|cOb6khyk;Qtq4HoqvSgZ5t?im?<3i0JO@>Sf6e6_1!$cUKg&`b43+8DqL0*mwoUDu zH?s}mD5=&N5XhHjw1jKv;5t$+Rm!n^9 zq{COll#Qk}j!`qy_X|*resJZgHWd_E=%KEsjE?LJTwILsv%{+HER3#{N^x}&7AO?e zQImiX0}GXAn^+a!CFtU9kD-tE=i>7A{+n{R!jDz~hxnG4n?+o4vEbuPP>Rjv7jGtt zMHFdgyL@aFV&bSVg<(maw8vL%kErQST1353(?Iv}UD}3x_fSR~&5U{YsPMgoEMg}3 zn{hGMXy~A@YRaX#66A-F0iBPn!bj&6C=1#gp_rg|DoV8j+_1NaTXxUe$~nE4xNJw@ zZ;^!`qs91O)QTFJ(Mne48&;-3dyPln3r9sQlyK`K*T@_AHo7 z!B`sPv=7k@PMR@KDKJhigPJPc$=V*n)OwgUXztS=SW3QY2}$jOvqo?L_U^Z<#{_>h zD*Y3dwigHHt*!+O6WB{Ez`0DE3vKWNT$f<^4+3QwG%-XQ-m|a3E!XC|oYqd%FPA=q zdY>oI6iS@hF7_e{c z-e@$&EdTzUUpvxY*R}xQIlWL}EqaIDQ>2~Y^`s0B*eT%GS1g(NXXa?>K9Yoxu|pr~ z|857N*aBXR>B@UjNP$2=jhxf@ouFWBq9Zt8r;`ToPmapKxdG$QLWeGzX>Hv`?GBgI z^ZWBuSK1Ki;*9WQks)uzy}vfU*@krxzXntD`|Ib&{rBf!zMjr*Al~QwIBQS&T2up6 z&R2fx-mmG~wJpD^$^IMf+pGKf1(mx$kLx$?_c!_oZojji_Ugt2MSUOoJLB zM3e@TppE)okw4*3n8^IPL^{;C6+)9`9s!^D%u7^GN{0PXkCrVmLlK+Xa5Xg*Mw)V> zq!^#e%am=1Z2gBEfj%gGUD}H`?4x}S_2OVG4q#PU5mYtj0(_%T0uqzB2}#uso=(Gz zoVooM%WNXdLqY9ZcLul7>6+7+MvWN4JJn~6m7kdr5w;OstHA^Jc3^7 zbpJ+HGuHya8!ij}L>l5h(E!8g;pd8%n%Bn5!T-cG)GX>4#`3<;*y;E zXpBR_2i*dD9|-g4n;2mR(6&>j5hkl}K*FORlcKCi+!Z25?-5Gh8XO-Fbwbvd=s*Jt zL!kyvEna44kp?DO(ZB-aBiC|F7{BHzH4y77Bn?6!KVI)WdiNmy|@po#G}grm=>vfz|JZ@V~w(UGOP zO7cb03m49~cE7Ey0SD-`pbTZQbpu{BSB38fA6FxyYC3Y=s?M!JuDvQ9eG_I3y{eP2ZFD}0x2 z-|uQKW!H$gt3L3us7A$HKHYu!Kl#t(=sZrKO3X?VeFKM7;V5^oz?PqQf98g&%mqt;obV z^cTKln%TkpZ6uhC#FieWQ^5|#F80|?_lIz^^`04dk?$??P_SNo6NdMdQ2fE)& zMDnhYs7PsPk{Q9QJHD;g37~M!pZ6gmNl-5N^`ZK1Ic736dq=~A^E7qxA54_ry^9he zPe=wquoxm8-@@48fI8eGSb2OKpW%1d3Q{551u+#l#?>75%6R zbOB5yFQ~NCCN6YH2)*D}>@Kt7Dw+58v#XaE2A7F@+TT1Tie)a$s*>4>2U#K7qfFDD z8ju-VZYE)}0AxN%t9|{`5yP@0pA4cZu;3S76t%=L8TIEXH3Y%iL`sXm7@}qVQ|tqr z+>OK_HNeIj&VhQV2`<5^OR0f8vPK}X2gz9RBO|*=tzbOhj}Yp|Fhs(K^~m{uLbNSx z3ODg{lgPkMf+%m`x-j;v@e}hyD3L#i+d%4AEsxkOYf9M>KUh&~m{U;)ZtV#UTE2pc zLL?Pq`~2gZWj0-X?xs;^Lz#9SNU#N{MFlu_<7Zcv`N)ock5_0K!~=0j^Ozp8XM!Sd z!P8kwsiLH9W)qTL=%~>l!9-RsQQ2fgP%M3YL$m zLmpBqd<_#W=+7}K(=96z=}2GV5a+GN+&C8Q{jz8t0Wb*(K1+a^|5S~~K2*pF`l1`@ zfk~K%(m&JKB!t)nD36dq-!~FZMtQGYEpEh1;)M2nKv96R%nb8hTY~SJJO}-1ym2kK zAkyST|9zZu%z)VgjT{Rg*z3w?fRY7UlShy_fe zXdm^ULhG@am5ai;9)vh1-Qd7Yl1)^ zvug#ss|=WP++NaUiSxn^1<)}J*bYBrxwh;xowOp^UBX9S?7_so-9?&AlL}C= zoK2Q5J)DX=O9_-X)D?#v#+_arSn#%J&4k1S3XJx~kE59~4P(Lufs@4r#UCi&2KMyJ zA&y9|seJM-22cT>mPr3Ljx=>F8>KKBPiKXNQWWNSZP6M5Yj+Kc9r2NaDMj-kTj;;xe;a;hvGCOd_e? zG}q3WjoNz^{C#I!+r$Cig{uqq{b=Wh^y9yw?c#^cMSx|sgGj%pyZRCV*qHlp9rtc} z&*u8RUKDRk8v+B$|LM|l{+%7{?!Mzb__}lD_rb?j7+#W84PC$c~fz`x-dbL(;!wwMxABLVh7Yp+Aj_ImB8$%Vch0+BlKVo zKDzV1aakcn>&UwkMbkxFt;)u3&$&5}QG7s)^+=>b{i|z#)j4dd zx2*IM@h>cuuLV|}g!<6T-9ULk#h+gMIBz@}Zv0MX$i4M{+}3+Ic;BhC@9})6mdw4C z9lkRCx_Xa3j~;jbWO&7WiztfS^!S@CqkqHu`La$M`D)%cUa4N&gR<*KlPmwCFH>?K z{f)6ZoQx5<4K7=(gR6B=ry1}e!jJcLn|!GJM3srF#BcY0D!8@*_GU?+^h#%8#n3;_ z&%@2j%hd&&t5Qfoo4~gXllSfYe(TBLf&8SM5a@gj(wi~ribL<`alP@!s{92oHlMY7 zJG{&)>mA%*w>-iOF|j_(RAoI_2h`NMEO;4t#B8CIc4!YOE;e>t)E5IYg8$!Upsb)< z(L+&T$a@kS7gA>)06&-a%=eHi-{)CAFCXF?TMCP|zs=jHvYLTfCK+$lGHDCJKipab z13nfk5G3|o$Pc6n$q7&03k3OX*Je&9Q4z+l7HEp4A3Xu8U|B+_n6QZMmdlw@$bdH7 z`j=7|#z+?!yC#O5Cm&rDZs?zox>{hsvdUyGH1Z`teHpj2-9Z!ZQFk>4c^3K$jIE|` zOJ%DPz*95Va%||yOl~nH(7YYBRq0Dt1Yg`AGQ1Mu4~s7eL&v1&`$7E>u%)-ArrJ*n zI|i7-gQlXV1gWpo1Hs~(YiLE=TZF`K1u~*)dt!jp^LQ!jHO5|Fgnc^m!)eEkCykWQ zY@`dz$kV({QcEl6otCHzIS#=4LiI_3gw#C6<9sN3zjudfv3U|tlSVLCB`EL!?Qax~ zpd1ml2PK+KBlif04wCt#htu|wvMp-L{z6ZoDi;G}x6PI!$_DtFE`wQY() zCjO5V-e7lZqpl8ZkiyOJtqq0K5$bvxvm?2N)Xjs+KXs#HMl7UkmTF-Q*%te8Bva?V za_x(RMPbqeVd(_Dco)92;gyIYRD#44WT^873iPN7m!Fy|OL47IkR`JsVzp8O&)HPD z+tNVYfUrE1ju85sHD>xe*|aa&?b(6|G|B3UI9zZ1RyRtzx($YXG-B{$^5pYv24ooh zsp#3*v^KmDWHP?JB{D0L#QznZcneRtN1z(~`SLA-J^ziqUFXMSyBu6FF2j4TvA^oi zqgm&%^0rtpZba1P^*g#5*p2x<_D_O+A!AqGay4=9NHOkKSQ4^=eS_0NWzyI&HUH(w zmAs8%4+5+j(jRmsF;v~*7^qWY&xAY%=;IF0(v|K{Hm;i2d6p2EOfm;>P>F>8Oo|W= zislKjsOZEDtk!J-;I0;oh||S<^W;S5 z7@T5?|JBuULe-@TCeTs^VW6XiB@pA+&o3EVZ<3Zbki~e%oWWoJy%r-L0e{X`2<=z% z&gCA6+Q76Hm0S7R*c#D~!abT;nTb8q>{XME2M))oHTs zAmmA!fZqb`p&p*UP4=)T3mRcqij8dg+`9}hhuX6&!L4~srA}joSqv~4K2lJAD5{;7 z`B>B;i^1GA30vd}J%oBnkZ2_IQ|6}W4;d_Zy4jBerbRJ~N`{^v6`3(o#-A^hcmfrX zWievL;_ zyki7U3Ci7Y?=)ZbHZ@1UZ9O7LKo}*DC^dATs%>-w^qAfbZ^s!MRE3`L--yD57x$on zxK%5ikx-$GMyV^gNi?XsE3vsn@AA!Fw=iuynGu%S(CCqji_#dP0o=Ma+Lez@?78x! zuq=OTFpXrYdJ-}dJlqNIi1Imb4(%a|4A3t<9dncxPdlf2;75bF!sXrZhO>4JcwMTch>6%v`Sx)f z8|6=#UhLcD3VgJbr{%?e=Z6O9Lq^GHjN)#h>xuEch*rMzC=<5?@mvX#xWa`<^ z5-vA?(X-Db4HgbK(zJ_PA!$#T>;Nm$=18$QyKaWwbg|cYZi>HA*q;R1;b<}yYT2>s z>9%eK@p-r{DBDqJJwPuX>cAP5pH8oxw(NXcadwHwn?$1c?ZB_xeodA5&sh^odfG0< zb#!l=x=E-ZvBkNve{gF9j)WQRaAa}=<4_8uip2ERm_~AmyseUTx*J}$_qjMpp_cXog6H>1E|6Oo!b6+XPp&%i^QzfCM^YdD4RgjWW{&=TDPbGq|zz=Tc#+4X8HjKdS6Z z21hZ`7I?(b2(TD&4JHCYA)&zW=v+M7sc|LXK|FANop`8>A5(m`CD&6m zT7es4Q9g;~6$=A`Njv`g`Ge9@XDRHQZio|GLBbcC9b&QjWdpxtzQW5=@2Go*SAu#L zK3rVNI*VuS2>TDXmEsXVB+2?0rhn3A`ko|tZ_?G%5^QhDBh_8=b{34Nbqji+O z&g00^adxOuEpWqi4mvI=M@GOQo}zO-Qqqi?%T5SJ!c%1WcsH0$`6ehOaTTG~-W}Gy z{swp%4}8A4?AcQ&1RF_(MXLW&$gO+iQmcuYJF%5f?>Nf28|nd3I!Z}tY7@q&Y-9_U z+D8QcUlQxGS)%nAY`Cat)`u-N&|kHdA@g%Kg`|}`*oZw8fpl>a(JFjG$Iu#d*Zf%d z%7j+alGd3P6b-AdKg;qt5+0T}niy0YpUsH@gmr*?Pj3OPWn`Fl(HuRb#36zZPK zn9?h}1M6hFk-S+`plrW7Lqft}&I0hTQDdNcNe7=~f73 z%3KAo53fZmjw5ret3_LB)+ej^mIW#tyzaEfpp-tBmKj2hjZJu>hO$}%SJpw5rYY3p z`M~5{Lbz3cTK(wEVyp_<(JwYuA+tGP5@2giZ3X=nj|)OW!9pj?l`Fbpe$#RNk4{-_ z6Y=2HTv?jl>vLvA$O~&D=c!$3Yh@c20*8Zz)WiF!?zqG;)={2biBt<` zn~sDCAF7ltJ|b2*kqjJhZPls2A2U_Q20CCV>c~>O(;o-tN97BgotRStbTjHUiWREF z@^5jB74s{utZi^4oKs-d*(*3@Oz)W-hROrzFN2|5UOG z5xCXl;6UQ2Q@EH!v%`((Vb`E)@RX6LdDm~5wMYksu}PN1Uo##N`EGD5+|qR+KpvEx zz_;CR;!9EXsL7U?G2Lhf2b<+C8178v%lR3+%i+QW0BvtcE`RcyE$sZwHAqwE(alB8mI6a1dPqXvrm5+dS!Z2p+X59{ zJ%^7?62F39h(JMS)J~z19MXpW6`W2b3x2)7ln4xn1oFGh5uqHTt!T1oKCkCzbz z@5H9EJKSb725nO3mh3d#=1teSPnLkSds)V&s`s5#<~(dwXK{+b(~vYnCtLr4LI#us z&4}cZ_}&GcU#XpB+-=}WyWU55tgVf6UFjQw4;lmqLLKC6-iU30*U-iEuV;==rMh*) zq3cn9uR^`HRS5w2lF_(FgRGRMu zfA_eaY`P|B*E?|e_Gj3Eo4dj2U8-L~h`LGsq0q1^btN^dYcu>c>*;i*Kr zEWq+BJ1mtK2dn+NyM zpGoSS?zl?QgB!hp< zvA2VrpiM6gQOZke)CUF|DjfbPH>Cr|-lnhw^@mHSVjhL3kaX%Sz>(kk+6*Dw?~$-s zjpVq}1WSr`XZu16isa(r|NECG=5jc^zaHrvG76)1qL!e(6MFx&YN`bd9T+-b8xJ3f z*6Cb}%*MrHtExxf?8T$Jb}~kr^X?JE=jVbzexmv6DPtMFmFfr#91Ekp+VX%*`9I8`c;*SmW9rK#C|HrhMtEQYFeOb<;`LzTB$*i_# zhNk`9A*g<^^4mPE_Z1B5<-{W5jL0ogo*s%aW1$Y3Ope}W-3{g6X%oDa+^p|GtyT^7 z23W!*_KSy0!vDADx}o+&*ZZDFV;G%=G;h==kqS%tmmpckb=~)&8h6{>;Ti9eiU-G5 zG9-@(w|-}+;LDQbgcWZ0vS39mo3JfpzA19;(M#~NtB8l~LbDW2=MJ43h{_rv0Y&v&Z0$IFT#Clco zZI9cV@%Er5-{OZP8jo?jG%~zDix+C=ffHSxUzCJEIb^HOAmrc&qUFb2quQ*>qpZ;!ex8G2I66;I%WqvyMLWpp=HF>^8azg>`fH&Ga2gxTsH& z^ls*ums;#8=Md*2V;3UoOGrj{rEjmZnRz|O0F;`On`Lv@`)g|Gyq;$`!8dEouOHIf zFIy#Pj|GJ-wkvE_n+!b0Nml!73l!XwfDH~ev{AO=!1WmI2}1}oMLZ71X#P#IR4e`# z7eD{M#pxWT%P70Lf6xK3->B!KJxva*8hKf(Ls@xd#yA}Mo5Q%m{cGm(XH}+{FjY|_ zk2TVWm`E>rc68KK-G9kzG#+yEGlC{mz{VSzoRj!%n>M}Uv{jJhs2I^gTpiHa=VF|c z(4^FvtCKvw)Tm`Xa?{KxlJ6~7$madBS4f5&V^iTooW7n8G`C%{oO0=;_Y-F#iScOw z%Ehy(3!WXiA#ZG%GmE+<_!^Qm)Ti_D3I7GQ2K%s7Y1(1q`@cl%yQ^VMU#erINV=vC z#gj%rdzbqHgin#*7c7eq4=K4R^JPLMYKqIAuG8YhEu{mmv|IzOVv0vNwU0P~U76?v zs7(OwyF2d$Y|=kiR%nm28s7D5ENy^|w%FBPF037k_EVFl+sz_r=pshF;svPoDBg9%rj-7%lzRkYd^=P-u% zq|$6h))d4opaMDw=5IFFdE>R~GeFB_%d#pz!MTzxM}|>U_9M;ZU|&NetnUhL&+KIYTk+~~Lk|Gk`ZWq#_4 z6YR@Ecj{NFQvZ524F9Oe%E>1x{?xpp!_hHaKEq1X(fM8Xp`~jz@OqwsjGR&){^7_R zDgaAI-wCV>lD>T?K#yWVS8WNukH_*~lwCfU>Kuv5GcXKM{8B}7n4JF6aUlCDoS!hC zbC} z<(`Mp^ht!gM4~G=9A%@P>qz5+#e5{F;}vU2{-jJRc(q&kF1`uO>DDWi*+#J~KQpQY z=|hr^IdXqdf}^_jlXuKWVKkALD8LtdQ5IN=NC>IPNF15C?8K=eaH-YYUoO1W=ne~s zzEEgAf46k8IbQdLFyQ`49aiz_OW^x8*y=F=g6Hh#pRAOYII@zJ_$AoNOhA}jCtQj5 zILMR9B1M=$&S+kQxxG*c<`v)4MCK(vD8)AJ|F&41)!P46%^H0OlP}LNdx*<0jDVqL z9`#t^=;?e-`5X$LO~S=T#ctYLjKf>l1;42=rjhySJD@vE#acLmQ?|-df+CK0o**A> z1w)u#LQyKTxjG$g2%)=^qvr7dj-k2~%BxY}9)T%uFA;1;Q*xwLW@UBf<)~Q9Y9r}Y`UMY|Op1xqQFfV>bB%B`??*|hv_xova-O|PD4&@U7PR9%bC0c?o zbthp2&aTvY??JMoMU3IvhoqmvPi{V)-EbBX@pmv%rl!BGpfM9P7Zxg=^P!>Q+(;^P zTg}1H^yIJFYyRZl#DKHC;sds&>YgsIjRKtsXOh>&Fl^Hv1Y_=NzwmjJ6KMqh#+^z> zns%PE=1ywoT@SNi4q7$}anEMjj0chh(siTkCR#B zC(*PdPXG0owb_{;(pT8~lxESfd9*y&Mz9M(&+_qdHxELxIzK$zsVUCJg*RX8+Rv@@ zE^976l58n(Dts|}`TBTJQMHC*&ccbK&IV)udanZfE0RJCN-ku;>enjrkr1Uv?(t?` zLN;#Ww%&yxs^I?_TH_Chl=x-F>Ng&Gs90~c_d z^v`Cj{Q1O35#9_8{vfXe*H|GZ;`S_*3_o~b5H#JQX|oi_^(L}DxoBHm=?3P;E?3k8 zuv?Pq)kioo0=X&;f%|j>&(tiO0WA&nE2`D%&ED6MPp%D6qa3CPjIhd;r+QIC?1*=r zY%Ke1z^ovHZVuqmzU@E?#JSw*`U+VF0)WNGz$(enWCQHRl&jPsLeJT_)bzc#t%Sy^ z>}pcj9(d5=oakU>YN2o_?C(yo@F{g#;QXrwM#lVE9n4uR$KNduXjbx$ub(YZ^HUSm|yUb9|(VLthaIh*n1=2G5} z6}M9saC-;{Ng;bGa&lBk#$U!XS!ofav zS$?YIf0aI!_y6p6=5#l{i>DGb0-d*pcjkC1Fv9g9U~t@XI{wJ! zPC1}(fPMis-+@tx2+Y@*BM)sepRo=ye(P`pn62@#`(2;13oj56jKAy=LF8J0VE!l0 zjmJ|T?Med#WL*vfME3t>iXH6j|92wy+Sk$&2{d^76Q$EbZbnzWXfnW8O~dxp}jyTFG5g zxnKVKMb3mHR^y7!0nwJX7byo@K)p(2dr)BGC`nJ}9+VztI!X<#+p3{G!}Kwm#-n2t zY+;<%de}ryJvHNyRb_vCS)W0UVzBV zQ5?z>5k}+Z zt~U$i@JmDE?JcWsp0^WOv#t@p6T#i6u;Q#yU6adwm=D(E*9&@=KxoP9+PdOfo7ReS zjh!Y@#wL`|$LmdzH)-Uno|0HisRdI;;rSl~Ox#*ImsYW$rWmpV@{z0KzU{T}d{@wP zDR~BeZ{l?S@^E!=b)Bua5M|duDaE9@Y8zPH0oQkcT@*m@ve`mMQCXF(FJEIQUTIT& z`m4mMTTf}Q=+Szm6$M=;*v<9*GW_{iIljDpx!8JJE9R8(a8KzN@rPrcqqyRyhYAo@ zcH&A;uDe1z+>(@BVW+04`K3GOfON1;p?y)^2wn!yKM8N-x@8H(^`s13g2#ke{ddWMq#Z;mxe} zhc8r=E4;Pt%P&v6F+Lu|;-@^Nx&R^yjCiBnJvZdr3AawHRzyAn~FB4DtGOwN6)MKLk2YM%jI1 z?E#fj=LWs)Nvf!;%o19AHxdOOMv0{q^Tw|mec2%6s9AvV9JY**9j6vpSl`a;TyQOh$5p;Ij&899A@)eLSlJ!hxr=?b|r%_^*QH8SQhpQ?zxE!@@w1 zaker>jWX%1%o@ZXRm~Hw!%zTt6AQ{CEIG0Z1M)b&lMtN^hv)mtboOGpI#g@K*>z3U zl@;;o4?sFE?HLa-833mSB#c}EX|z`w2xma!t4tRCou_biC{#`?%CF3Sn8%9vRr8(+ zP~;n|y|ZbvcZZmy_y?aD0?yl#RWqTL2lk;fd7=$VNq+r=_i3p`Vh;CBQT?IpEl;C*R)<0BB%>Poy0Xw zcuMFK@Y?}vVt(RHx$+N}K%Zgp8JzTg^@i zz4T!mlY2%!V2}j~Cnv%|y8fDr$W?(mWQo6bW^Z1h zBN3pZui&h}9_+pn1a71T z0!}gNy!^!Yuc8F$UZqsI-HGvTZ4Pp{L5?GB{-tCbVReqJsmUV5VVtJv-?o`(0MJ9367F0_y<~SzRSXCGZB5)x4Id_Tch1)!vF0@KAXW4a{d*7YTh!ZuJJyU2vD3Hg5 zAJc|KBn85ZWJ}MYeQ>D%*?Ny$)l3DROA>b|`X_n<=q>yk%m$VBfyaY7AxsV1v9?IS zpIdu*J%bRL+uIw(Qcg_6zb4#mO#NVma%p+c&K+Bh+)c%Sg%L;E+99Vj_ZOHj&eYlb;bCB_HRn_ zjM*@&WWauGvxRy@?}0+WvWypMlUvNF=xXQx)uV13WaL-ZH;O=6@=#4PDkA3+K3dHc z)Rx}bW$G=sY`Yhc!|FE12t3yddgg<@^c}GEk-~>8i8Eb}yJc2=n(1XnT}iav15F z(GGd}rhr-H^n;JL7tTw%F|M8BlQ)EaD?aQOHoN*QBYZZ=d=j8(wGnm~w}r^ns{Jw3 zUl#FHNSA@HKO)MySKJVlhOT)evXC}u;Bv9GEhsQ$txe`ema_}dD6Ao`_($5;K&ZU~ zWU`-4M8&{~Us-O?KJNcY7ay39lI96aOm7L(++v^aqq$o@(>9fbCBYcUliKvhf|(>q zAby+CFlYIl9Lb^&aP5}OP-UyllD<@C%8*h&N=f!y9EvMyI`S6Ii zUSj|R!axulS4`}{ghtkb_Flo@9bUrhL?hUbQUWi95p|6biKW<5+Ipj0^NwX`^P1~# zo;1-RPi6z50D1Iz%Ac+C6c@L%)jE|R!_H4NcsU&WyT)nCusmr?aL_ErbhI3yN3!Hr zKUrg;O~wwVH8fwa(X}Y$R}cRR4U|MA){lK_oByOc%=S%DGOdJ#fAqM9pgrrZsEJXM zGB+Qk5*!-+i7Jt>oZ_JI(a#`v(4v6PrTEENu zb|*w~AJR7Qw1ym0eGw0ngaw6MF&Acnj-CpR|77iL&SaE0V_zPwr9fJsKELIK5XR`1 zwn9N(8vC%13-XB))8%q*=tvEUVD6j!Ea`_c%7fRid2wa=!}7oAI>#$PZ6IfrX^J1JARv$Wv*Z4_oBU zYGGz_3QFF=G?rGa;>-kPT(9Y-5w6MA(H4SI;!vpMlad)>Rhzu1GqiYW04BBA=V*+u z#&k(9>^(&V!tOS>wmY(cpycY&tf1CJF*2mGjXwdRl)NMhfDOZORagfUqS4<*hH*pj zOpGK&FD}%Xu=&&kkWU#y9PGq%y43p@Yz~n)&Dex<7V;3|Qq>M*O=nkVR%<}Jl6&K@ ziLmLmAlRba7qP{5HICs}7sz5>RTp%YvqL09eT^Fn9CgeDyeZCl1q#&i1`m_Q!u!(A z8m1(%*!tOVduH791MrVYU~$hFR*@?3M*M4H7%HPQ0R*9y7>?8KlWgRWPy`~WbhY;i zw_09R{9%wm!kEFbY0hO4dSTNA0lE5hlEUI{y2xPP;jplwh_>exVSO-IMe-Pe`1grg z^1x2|-S7q!uN@fihf)hDlUB4drXLU}sy->lhRMbsAj+KhZ5Pe6kDPNs+U!7YvHDW$ zhu|IneHjn~gU2oRtqpr~3mXak?NqVJgg&&R4OL2gYQ4qqk8irkR+$Xu!Vef}kR(tH z+;TbpqR;HyX1_Cjx?T!>jKZ&^dSZapkWaghdg~c`scsSDU-s@EF|YI|$1|-zHn*`7 zj4a^k?Z^;|{{8t-)0fL!mysF@XxpYoEoE}0YOHuasQ~mc*3qw6^%iOoC+9vcFtDlQ z@{8FVGlv8UJw3|1IPe}ykgf~dcCY*Y{Ea*ZCVz?n8j1Ei^hBE?nK*<7z$|njn{Y9)TM=*Aa?>BatAqt6Q)lz5ZVhq67VaK_+zBvP&j6^6 zdD+kW^o(7E5|;-0Yy#aVSLw;q`j3dRa~x59`l(ms!DLO)58RTu+{t%bR?P9#?vK=d3wG6)pM*Z9ll=T$6Sl!j33fs2HpcT@TSZDF@S;NHBGji5#|gdHQ;Nzf5=DbNqjyE@{^{O>27 zOT{S5NX=RG^+v2p15jEhob&ue)KSMP=2XPL;lb}wHG<-_(~c)qUXu<-0hW11oQ~9} z9ZCiCEw>bS&Ex{}7V|HwiJ*xA&J1$B+&x&N=yvq?^rA%Jwz+UYrike|Y<2$5-F|Me zGn9@g@tNr^P-T*Pw=54-mrQ@`_=5zFoBc}+SU^3>D01QY`Ebwmnq6}J1ud(HW*Q`SY>yqju!JRccqX}$<(AJrhg`I+xHWzu93A~Tzb1I ztxa?cc&R-{NweTG$Mv4??qva~DF0K1QjA?ASV;WMrl3%%JGfJUHtAQB>wPC_@)vg)JJL<7aM z6~|s!6RlrV#^!JTS29!8vNbFNZAS{F-RavUK9;HI)*yZ&@O<&ViKD7D5{{n(2yM)+ zfUDKv(^PNl$C+t{x5r`kH0nBqi_W@baBhhabWsM3v?mzf{64S8F0&3s&p2b537@g@ z+ThjTJnx|7-Dpn2JoCf`egt9Wr*wdwRL?8w$4y42$*_#pU62MWi_pt1Pa?6R0*y zojUIiqgZf=8Qn)`H!QqB*avU9z&*L+qUjDmprB7uas=rA9?|TPK!__0Jdj)FasAMJ z-D*E;E;=gAnDp4sipWtKOem>os0Ci@0pw~sRctO@SyIFqd+idvcF;homGT0{CvEPx z0f7rpDT7xXaY^J%;FG@8X&~Ko@Ns19Z9dqF=pzqQRnwvpbqJ%9siF5k<3L1m~C&ZsGn{T3GwTIh`Q~pR~ zwfI1EYQFrg-As$s(PBQ*D-mXc^x=hjMqFyT%5p#)+)>dJb)D8F=E-!UyoSR(SJnVB zf8{h@2Ik$FrEB()u6mSIYwC3u+XDSS3v-k%1214t<(sarsDbTLp4!+4GhS6Ab2V2^ zesLWR7Slz{x>ne@q0kshD-b{hw6@AhsG+tKR!m}-Vk-ZOUH3$p|j~8DE z0-qoiD^UTfD?w{r9S9K!q&R{#={E$F`vj1W&jB0Y7Te1!v+1SpJ&YH8VvN4b;Bn;#M zAi4N`bMo-9@Pg07PL_VBr^hpDgh%j3DcarF&C|nEBueMr!z;$@WG+w*-Jyn;^ADN~ zW8b-=`rM^&D%$gXb#>aP-XEWr&qK4>*u3v|j!8x!$mHLb^77bby9Wi=Vk7IginT{ZqO4rS2245Wg)2w>Yxb<`YQTPdk(>NRcVp(XM%L9A>)c2$F#8_VEZ z7j`Wie`|lzxMXt#5~RccF$tO=3Ie^oXt}`DZz>3S0?(ja=A+;}q5h19QF5-6G}1>- zsMZNvIa^zAXCc*9?jw=>xi^~1^|3+?TUq{p*QQo1QY>V~_D0Aim;@KBWiQby2=E8J z;}4T`mmg^Qs_LycQ=UbxX(QKNhq!m=(W#(gTXU`7k@4uJT_q+dfCQ7@C&ty~jz)#e z*b8_>>=K#P{t6Vhat%oMds{uYST|H2%1Q7iL3lM z0bGtD{Nv?Ku?;HRGfjdESOgHc-KN)C1Q6sEQ$q|j0JnVlA6W=0%?+pcL^B(|c5W-G zsO|1||9k;DDS2^0n|66A?L_TqRQN#xhJc7lqQjYR#kt=QkDn9?Ub6YA3?mq z_)FyoBD4&8Yf~+vN;`<>_neq$x_o)?gsxH{dDMqZI0xe*S6E^;T_P|#!O32 z;Tl48#2&9r3x~2{-;_UKuxVyeB^GTpHUy`QO(aK_zASQdgx&iUs)Mqn^BW+5L^h;0 z6On3M7P%MD2rHH~lX>UW>^HV=Z*{oDOgfcNYBonapzw_)wGWzvePYj9k>19^d23+8 z&an15D!IALEKDv;-lSo#uL>~_qe~sD!7tZoJdkX-4v?Xz#j*%BGzgY#LzQ=Oan^75 zzl^zC|G?V9*RPJXZOz^*GD5zJB}37Q{6@Zk7A|z|$ss1G>V7hcXO2wm9wi1!!*7Dl z{fmU~1GR%7muv1pjK%eBj}O6TI~E>_^AI*xvPD8Qy4?R(ylw_`mby{6{iB+k-2_|_ zlHAo&1S;YZI1y+7GeI?RYK3jA2!j_=wBT z0}%w9t5oTY%3_eO1UgK>G_gKi?&NbWKo8E_)Am^btFNTGEj~bM1Z+YA8Ywx#K@cM= zv-@{ww7J!)N0Kpcq&7^sC62760eA(sInEmRH&KaaYAcdRYz#~w>%}rE$-uq(F-vN~ zj*jy8P)BjhMGy}kowB8_nEf@`FTpD^wehRvFzBlq zyb)l@Q})m7MwfsrL^wmm3giTa&BNDu6XMtVLeA-9+3fv!-rcO)5DVvUvXke*V`p7H zA?9eDQ5qCAU8x<-06cBHVyX%=@t^%Ca`drqLVx@GnkRLBT?mr8gpM`)F!9Zbntq0) z=m}hOPnj`saY-3_v+Tid>m4Sg4A7i2K0~vOA-P>FBLI&?NssaDNlMwEW~e7XEURFY zANWUp$G?yIvVp7|+_7?GnTO$=*YLzj5fTfd*9HkyX6g@qwpK z-uv4v3-M*vxFw|(t@~dTkSH(20k|cuxp92(t}leZzEaeeWrRVBcK%@V;fqZ^gb_k! z!_6m0Hm2;vEq2#`CVS1C-nb#G4WGlt$WfGG#E*Ic8!II0Nv+bLm#^2c7>WM{t`qel zY>CW0OHD}*DTOaf;m06%WM%10Oyc=On7y4N8cg{LLV{;XmP;O5{i(!RPsU=M<@uW~ zo3*r)IDjBuSi1!&KzMB_4nx&Ak(a~q@3K! zdAg)>PNp!~B_S}f!t>KXO_`l+Cu)rfEi)<$#~xW0WW&<3WEdBNK@#9=O>Y1AID)yg z?HZ_`g7IlR$_Yl`#Jvq;@VqCbv!N&zq%`l!$-BMuaM-Epb zZWhbCTyYIZ(?bn{XFOx(esD0A*%yD1wodR6xN^Y&EGL+hj1l9n%O7- zfta6iR_wSaxx8FCL4tv{r+z^(3cEwJh$Q3LH-p(kvFNK5uN>%4byrVe#YRl71M4}T ze>~nKoiNIZIFsaJ>?-UIw0d73!GP(_P1kEUwnS`Zv2vc6Y)Z(OKu7)uj%B{pTi z>{ZIN##(nvHKcH4Y{z+g8{QP-e4z_iWZPmzue2Jl%oNIpW&@21_wyEJHXde%FTt|p z`d1y7=IM6AK-6<$>T7a!x{LQ($lv=+3{RJ?9t=1Al|Y=~^qW*uNv&=MacONE!G(uQ1F2z8I65b|ud@aF2nvH`)SR*lNC2NU%qrqfH z^n1Cxp33*yH!Iu(p zE@Xn%kO^!wsZJH4KyvSJr3Y;UC;LL3hINJf8N*?Ln{!MEmz%@3#toD@B9g<>vn(;0 zKZ$mJpVamdS6FN>&;-lB387ALxO^xrtD-?9r!ymq3dQ9VaZ$k_x9KH++Of(pTXL_A z0@ulX=u=&XmVnVvlsQAqiazNZ&SMAT%W>U6)Y&d`F&cqzdK>6nhMlj&T=sM3Kdqw@ zNzhvk@tstcNFu-8RXTJ1Px!R~v$95(d49;V;Yga-G(E%6^qm?PLse&`D-c4McTJ0g z6SMgBq_qQ2?WE6wa}^HxOp}Q_$iE0SwAl#0JYv*e@lw2#Hj|o>)(+da3f5dHW4?tj z-MU7xl9jfJic}CKu_l%$Y&MjZx?WV%^c|5!4@R(c`iyBx75C>j&g;NByon;+BdP>? z9T?{y-i+{SU!w`*5t3o!?sMm_q8=yb08jrY4?JMu&y_J;IhXuD9MN;Pp9*+4x}N+b zpnZ+l-O3~*l6jFR^=!shUmwpo7dgxyHL{Oy4voIsgwUFWMmM+Gf!0kTtGp75*sJB| zk6CIs=Z#w)J94l8jHXC0=}(tlq5HP{6kyEIZjv3rBv?Dmyo!|n+;1PkMukLe#+9=# z`DK1&C=-2N$b5_kvUtAfqLbta3$NWRKDpz{w^p)SkvzuB2KmmyRDWDl6E)yEB-(EE z+d1<@%2$F8$^%CoRxm)Jo;&FEWqn$Mia!1liu$+$(E4^inda%Zqjzj;a3g^5`w7aDOIJL=$0;_NVFy~9#*8gAKY zIzy+UEEnRz@Oht8c@C|~FSLS?j?YS;RmqYer$EvQC9d@#_lZ^I*;>gjJ_J1!M6l{E9mnXItcJ4C8VzDf62C|og0CAvd=)R#cE*gIsTJza?TY@ z&%hJ{1b*#O9RDX8iSw(FGg%^{aunV55`LL5B_%(=*FFM&8)-Q^5ev-z#jbIDNgt+qYph_N(M z3!<(JMhATDDOilh0J(W~zv!hv=OBVOru=#JqJlO_ILVOX$HHLt z#Ihn8R>V0N!3l}kD1{)ti2I-49*;KTT@;mbm7)D&KZg4NnU-Bb7+7VI_WCI9RD%%5 zd%iG^JHf1@8gK6xdfajDr7u$aw$b>FeE3!I`rgiX>*q_4=#WeQT9&-b%tJTh8V2Z0 zv%FNH0CE!B$kA~At`-NLLOTL9nYi=G)$eTH^`GnCDzo;@A;~xFXW1o>@B1La`)BEr zkOewT3%PPuN&PDZE@S!AFAxrt!CL3mb~{h=#&#<0Klv|>0hozbkHzA6T zweIG=MT*<)?@KzqAX!U}EGY|(zeSWOY^OeZ3Lwh|E)b;Xlx!Kvt!&vF0I`3`B>h-6 zPL@42Ry0CWVM4}OE^T3qfXcb8=6L5nT*z0bdjYtZ?g^f}bI`!!84SpmDXs5%C_3p*vettmdl6aEZasty22 z?R#P=FzkH!{n+pRHb>=sB6U>txjZE^ZmZ5Il7fa0q26Y@I==aj@pZiLHBH;4>=4{W>gPo(DMN5J(mqjW0*G{`w@F%4LWB?WbUgz` zcqe0rTZ`h%DAvl%&!w6Z0~qD|T;V9KF#}6=czkEG*wH~4G#-K;;JbMxc{5X!d0nL) z8dnL&p4>6W)#rZ-kc4?L|J0zkgV{_0uMIpeevu9iU%|dp^BAAiL(E&H*sfB?KZs>9 z3j9cG0uml(yf?L~$6`pHS{vaPFs`*q=b76(zVvl1i*cRlYLG^$W(##bYPZLAo*K8e ze!o1vT6H-^!wD$QtT8uA@h*DLRm&rqZvaiwgBirajZ9iyV$C>V_N{~SHshnMzln4w z*;!w;-KH4c`9xas;-U%|!S}r=6BTn?@s~PWMkiCRFfz?^l|_FfLaQnr+F3Q$}G% zVJ0YIxZpJG3)BzhRcc@7DT!BZS9izen8tlZdE8y3yrS%}_e18eQS&iv_9E~Duyy#K zh5YIZMvtYTuSANA$4{y}S675u|youC^ti~Dy zO}o!1Xy=Jw~?3jw+4-ieAR%R^+sl@pLfY$u9;9-bv;?0z6a#TNKwVLT_rN`;0xr=OitaZVtTX z7h$FM!pxy(-XKLEtC%OFT14oK`MtJle(3a>>JF3?o5{#%Vk&SfOyUe8S>D?evdl4? zm&_>1+F+YTQGzuP=ROuV!qMe{4ekN~PV~9l61RHQ^eGb-=1EzU!#qK3RI>8>1txuw17P~9k&^W z6dPBQ>)=iPZLM-bA~zKEWnOE*VeA(mNv_er+XqI=(OI6g{7z%*ZF}t_xk)P5HG9Xq z)HVQ{Kt4AgS!}&lOij%xJwMzq<~Hk=c&pIdTKDfXcNXJ*D3co5DSzSUiAtkQYKoVa zWOptwiYR!NzEQN_O{iCDw3NMzeMPA>$CL!{xAi`oaU*Ae%_!ijJfm2;zB+h`6G!Iv zvN37Q4LVXZJri_WOyJprqdFu+0A0+t{ugbsW`ZBm@29e^Zb3y748>)#o^aOJe%1~- zLv7`UyY_-r{vg_lnWtSLWPaa?@})+RnH*Z5ZspZ(zYG zgs3Q|jZCoR)~|g9n>%I7J2w<_<|ntEX96)Sc4{;}Jszw1x&N4j%yAXwz9r$-{0Qh) zNzx0aOpfAT6SzV`z0HQ1k&De@IFZ&Sa*+>Um?J3(^U&dne*n|412u}*swb1#AZWG0b5Aakaz%bV9UL*n?Mj@+fVlcy3j*sgDEIHnsbqOetesFP69GaC#m z-z7T;MKN`xkIL~^l&BfFf7exwdw&@){d|s2>WPxW{DglqD2MLUkyhh1J)Iegok zE+|&e(AcHw4*V-%Xr?1c6K{Bz{dBD~P6T2$*Lz~4$=(l*k5j)egI|mb5lPw|C6OGC zAe2F3)#~x_IC)(>dkT{bzE(34nMBbxSy`ypE>Iy0siWS1lsQT7_TAh)*m{L7W><6P zba!DMPF|fHWacny1(5qbzTiL7974bG;J|@P)BeDcee&E{ZH)p3ndR}VW)^U6(_Mb! zZ5=CGoCs0w7oYWj@IsGZeoUN46j!JVl1vJ2ym#9Px8lqN&c|Yd)3_CI7>-;pzkHCp zRzU6lJ;YChqlB4>5ctx+sn{>@Tji;fEci4V(u^>d3^VOb_fbm|83g9RJ!*fjduAd z=Y6c^yHEiW4Ap8q!3G?MLKSp`#_P<`O|P?;E@5_r`h<7F!at-W0MhIK4f~dF-To2d z24LYmi(J1t(ASjiDBjbH0$OblHm6Qw0t{**UD7IVjz>D@^!w3!?cQYD>D9&N=batvrepmHa~le|Oa(Rge`0bO#)=v|>}+YJVujPhg+ ztfqH|s~TuX5N|Etdz&Sxi0bIw8^_H?rcBo3@HbF`&XDNB&1G5VzJH0tD8O(fd~3W+ z|4iYVQ#f;7ujLObVmyUss&iCTeit+^O-;AagbJDueU>OD!tLC{OwoSaO3S$9NWRSc z(|88dW-9C%WBUtz4rzb*i7U(yodBF#wb@EQqp92@pUTd)BA}P@MMc}L5Td1wS~0hd z=5sn&Jx@Uc&9(f}#S7VbE}lS<8dqB{ph`Q$2WWQy&B&|lflFKMY$tnBHjUVE6;Niy z2TDEo5(dE+{#{0u*_cAtq(oq&gZD?d6M z#FE-9K+%YVCTR&lD=8iO3*AArh6RGdVXKFN8njoD09=Uxja2{6`S~M{)6DAwo2)FS z9Kjvly!q^YYm&PS$&D^^DzLdRx5|WG*~omR9b2_XDqj#Wu+_N6zbrKXhgjV%MIc^it_eWq(CZB5>uySWQ$z68{EAe=#^mt;Ia>>MNz*2v0&;Pr6Z@+N%(>9 z*7tLc#+KxXb$c2f{k?X7E!Q?w+PGBDaI$6Rhfz;#=Dv}B&_wFIUOjOL(&h5x<=d zmDx<270sukD@%TBXPV?Td*DQZcilWWI^a+oy!1Eix5_~f%x`4`lJW;iAEUW-Q>3#=sWCLGD#pGtK3cj!$40+fPdcPCAl^{@ zwA)Z0%x>Xl06o?dN+Xazq+D2!fbjE76oATiF@Y~!186HUc0$g-M+7JLISaviFPt-f zhLVA@Dr-V7{@3=r3_19qvOYe?RVzO3K$P(h&t>c(fTuPTyqb1oD$?8PpVgfpez*Dr zG6FF!4&Cj7-G3&8dyacoAZF+;{mS*QhS)YcX0WXma@g=(D>4<*^ znkEi2POj18zz_gef*$5sB3?E3e<6lBw8mkp2OpKtOiZ{*^&D)vk92H*+J zjN!KXUJfA{TqC~BAGsajjU7)y@VFd07n6(o=Ml^Egt8nwmo>1&1DxEou)&q{0Jp}5 zWgOJXKM%|o?@U*Z-1u|ifmI@s4AhOn&zoNCrLtK&YwRKC$_*kOaA3Wh>+}quXZN<8 zECGetl{g?m?d(t6<)k?$O#lPrVx;y5vgt$0?LvEiVO@&m`Hf=q$kLL|NAJCva(pub znRu)6#qSKY9vwF@+6LB_jlb@FPCvwg-%>ITSxznTI&+610h||Xhd_E*W$aqR^_HfC z=jyv~kf+@>MN=}lVAQrZBwiZwO$Le23CzT7+p4p7-+N1_05m2@GiPOfyw@WhFbfZm zSxlPNhog#>M`BVl{Ran#`JtzuTc`b6L6sAT9eoh}gp5H7D&$p0;_3+^0QclOE*jTV zMrboXL#SnpPB3(jqK_!it^@%0CgW-3jJfPQl|>&(${;~1r%yy{LeQ*o4kZQVja z?c`n`bPbE14+LzE=1eb%P6;;v-5SJcW^39rzT7=)v%&b%o2OJ+Hd*c~10XD!1gqcB z0;2sDVo6)i7ut3qwtjd)o8hJQaJ@{mNtV_C(kf#^i8bIL+_K3Y*b5~Vo&&&$S&Sw3 zKIDuMhuIUuks1tB`PU|7&(5fh#98{3jv4~9c;3g(Lz@(kcDjR`N!Vk}_Cn{Yh4s>H ziV|?F*hIi&+q!!VZ)-bzwsfzm!n2-DwGG25R<2OD169?{oo$!zFj1 zF}?ST;Sq2>Y7Pdp7?_o3Bymto@i~`UzMqUsAjXv*&Fx;q3^x7e*VR_}{(< zAb&$EtW!iFflsU%&hE8dim#^|rQO~iLXEtbwW&%bnDctU`E0rs;6snc?Yrwc4F0Rb zQesuT1|^Vt%vRDe_ZLO8W&~$!NZN9;Y-yb!SNc*Bt)$q0ZG|B%C?q6LT|SIA1(+l$ ztg&%$tW&mcR&RWM7J&K8TJ}gI!o91H1JcqIQ!~A{Reirx%#DdmCFtuju>EY%wW@Cd zyr{{uY3!@{yPAMk89f3fC;2f)u?gQ_MRu$fZI*{7pgarVPNLS-wOc`!+mO6+a2D(S zfrx&5Dsz>Zl^?I}i5Io78eZYP+=A*sIE;25i@mbETnd&Xc%=db=lwX%q7zXxbZ-1fmU54)?jg2APm!YAPI31)S#XGzAJ_ zJ0A*NMvyN$0AkH2zX1Q83WV$cSndC%0vRd*0Nnr4<}uuz)>Vn<_!(g~W5#$wN%eqOs-S!s?}FG^A%46NC& zC%Ancqta+54MYa*Yj-l^gYo}PsDh*5WA|QinTRedm}PX0c_t`!u4xLMW(oC3o0Tcp zo>=BCEZF`r-)>H**=d=b+&?&eS2rgy;{#3mxc|BH;5dD%EnB7SdVK$QxvPyf5ip>P z)r}_f-86@ByqWdz}?x`8x}K238#m}b*n%mD*C=6Qn^DJ(MfCQ zCF_Q9`yRB@NFKUHcgWN(EyqCp5(_$xBauIxzP}$|+Ekh`5~({VNt5B!alccZF_GPD;DS!-&~uR4{POj2XQLdGB~0b3wM7*jbX?|EU5} zsq{Ngf>a$c12I0BKT(=k$$wIUk1Nt$HB&+NbYpTDnAs{Hbr&levl}B>)6f7_B?(Yh zTOA|;Ni!oFCn`tu>DC96GX2;WGvT-7=|(OBw)P6artIL4&3YU*tCt3IHjZrnq7agO z+?~8V48b2w9}jCi;4!4kF+~W%Fe3!Ry~4x4y!>{%)$@_n8+ZTh6mQ26Ked*?SM-OL zj%GK3lt`J9(ucV$v}Q<60QcuX(+7Ol5Oxrh$`I{22a$Crj~*yV@nUw$<(kv%l4NbC@0VakCU3fzZEu>ckMRv zGVNVkNY9%f$|`;@EZ$3#iAFW^=h4O3l$*Nw9U)1a^ky9J28`?i{Hb~bTZUm!gP^vO z;!MyeN!lSPY|=z27-N>B3H@=Gepjp>t4yyQ$YR>Tz^Awk+I;AWEp`luH$)28*|98O zAgC(=hl%1Ms_&nKQm?ui9X2!mkXW)r*lZ{ZFRYCYy!k;khZp1$y-J59L!F^)6i%ff zJ6vNi;$T^jX*&7RG5m=N)fkhJwRMK8S`>;%Q^PEl{5{wAlkDcZ!uK+Av?tM(+j~AE z?Zw0MoF!)eaUl);X;e*r*d*S+$rR~A5}ZQ0+_7k8CJ1U$PB|>@>b2Z+qf-pV4K;@J z&tndKp9sHck?1W80^MkNaS}_hb2r+b5XGM+12M0y+ldlhR0C z+V+$dCav)lx-uY4Npa-LKp$^i;qkVZ2;mZcRNu=4>{uhHH)_izR~yY7mtd58g5H}K+|+iT41a6X z(5yIhWGg;>qs#jNe=dl+H#NZO#MbSoH-e-i{n~R}h_UYC%@=t$Vi`aR$|td7UrP>55(p zR+TZDCYW$yx2Z-_q*0-2>^_d%5XHzJfgGS@3O=}J`}@S-lcsPmT{~MZyRczhyyBtV zcuvcplOZoYWQHfezy(Yr#HWy&AXD~I3)M2!kb`uHlQ!&d1l@C19_;Pvki|ixpYMJ@ z9cKAC7 zJj9>cbsed~ZhkMSP*&V4^bUc3v=vW|d@K`=igJ51|+=D%`%4aJcK8?u_A8Oz<6K6*Oiq5$ z+T+U&l|!Qy8~HX062YH^`owzMOZ$g~pZM~bsTPCA=X6bosV$Alq>~2;43X#(F~oDR z;gqrb%R1uxKfTMVc1Gjep`dvx`!*cVyX zNzFisD94ycDw53rnoZ8rwxfH<77W^pec)=9g870J3QD#4LPTz{D?KA{^fb5draMCc zujr0`5cFYpNFV}BIV1dSNR!-3w>eb-^v-!*`<$+Xt1BhXI47C#C?<&LtRpJUOQFFKdIbhFCh|>5_XDq5b@=7tT+=C8$@( zdMbw1DIq~a;g)mzsNCO)$Ou%pHEy82@LC*x1}#@`xdO6>6_&YBrj3y~!0B0UER%1M z7wI+UUZShq;2z>7ah@g4avOasKbkkWRW(@1iNgxZJ-ABF9s`mNXJA<^8|pO)+5A`) zD(OPMFf!lToK?=M3Uer1<(>k`zwZjY_e;bW?m>JnLQb&~)M=Y7i`_r` z#IrT`e zaK-`(`u{)GBS?^cvVj2rlp+83j-siBwTZo*lk>md_c1D)wp(lnKC5al$>J| zf&tJZF+eo>r;4M1P-cV*NG46C;wi;fP!b>4xQb~yHLIIfQK|=bQ~MdrL!#qo58dZ7 zb>_LiR@@aZ2!zFip%MkWb|0!t0?xy0U%KO&s-C_{lYGq1(p&B^BBqX_-nr5uvwn)AK`onPMhG8ofNmzx7FR3&8|6<-R;EFlEL{eZW!xTJSq zw;z4#{98#CBF$sYyu(=|rzt5m92DnMp@3tQ=NeP7C_7}~;*(JG3(pW5(g`|Be(hIa z0+uA|!plvtd45S@kZEAh$RWsETlG7rUFjzK%uSpbQvc{s9>Ou6Hw@4g|5dDR*2SM4 z#(;Xj`(^+l%hl?*;_4K^*uN|nYA{FAd32{(ll>v+Y?|0?5sFICk5 z5sIbn9v_Is<-j$Jey$J zsM?9mTr7F!tnF*s#;TjC>Eo=FqVcY!U1RsAA$&2S)#EdR z&f&gOxdx5-zGU5Pv1%w>q|}wHH3c{XHl7M4!;s0}f+$uOQKeFuGQjR?{x{~s2+%bF zo)F45*-(>k?)uq668oW0tKH8OyFgFj=w&%eC-yX`mmSIzp8bWgtCL5b&R2=47Hapn z`zFU%_cT6*__4C}_V|r>NN(JqG5Di;X8pH%OX&OLMP9&phcQ$Kr@kD=4Sn~r&@_S^ zLhV=-RF+fTQjmY@bB0W!m{*quB7E+1%~iV4_A#dff@A^C+|iMMc!E}oJG}^?V${Z4 zg$hXzr(nto5cdH-#vHUGk%RQ*x*4C+t4nT+v(fUF{_(fex)KI=2a^t&orGuj=bLF! zLNl)Yy=|SKHb2;wH#SkA2F-)dKfwQ;!N-nQAMmjL*>rRO0Eqra2LF#o$Hu_cz|6$) z-`PIqv9dc9P27E^#=^SN$V}m^+tMZC2cP1SWg6>daAjM2#6lr$u^vIGFiCo$=y<Q0&f;HzsY(KepUa&n)z-Rz`z5NVvY zB%Nk(f00T_1I9}zo~)!eO0;JZ^5x+BeG8gWZTw-=V?(}|pfg!V>B>vi&QUf=IxeZ6 z{?hzuN~x4!Z|ta5MH?aa{ff=I7?`Z2@t|eCGSczc0i60*yT)z;t$d@%S!2iFpAOE= zalt=0b8e7Ye$cdK!9;rZpllmJ69WeHv#TP_8QEPc)@a)*N9S(Cv^xFzSy!TWwc{drp^OwKDti4ndF`#X52>}zXW@pZ_VH0;SB zzF1Ac?`e8q7+&^CN8LoN0Z(oyKDzHi?pO?g;()0O2L>EZoL*5v*^xM{^+s{2keRv; z7VOA_k)6{cd%hnS7GZ&BP{x|M?I{1=5A@wCY;V8OCS7wu8HhcySzLSJ2!U_1j1h&DdZGa8ffJtQtxr3D6nb998AI*?mRe;EEpSVWyLi!&*UBC#4HND z#8;cUUdlr6Tq7^5BJAy|NXmX+!hAWoV?}8-@!mC%1TwDV785IQpjxHnWr=jtGL$kB zfYn_y9l$muQ0EmKd!iV3WDg4tF0THu^RE`l#+w%Hz-teQ0~;_}7uZZomk#;i2?Ws| zks+VRaC&wh?KmlcLX1MLdA|?z}@;;>BEnG;70;X`sMdlYsKK9v;oII2xb z&NOt*V_n(c`$wAD>VEd47%QKz&Mh6dk%KqBm_oRg2MO9H(ZEn*(x?x(6#14=a;(<5 zdPo)ot|~Xt8oD%s=W<5@1;39Q;qH%<%RXuU)M-{qCDoWcy*iKu(5D_0sk^pVCk_&O z+RQK2Mp53r)D{q8a`I}o@o&-lhGcmdSAik~(lsM!BYOuMBAALXO;b{@LR0hz_a?Ni zN>sOwPEqf)Rm^M(`nLGhbsIQM2SaQ4feEPkYSKhANIJPz3IOPI&b%a1nj9hSJgZ3Q zaRRSX5xHkL&`l}-xxil!H`>XcKl-LXMow1QXzpxd3e*P{(6@A}!nw1saKdNrI1;dW z0Ev-nwUkWq{R+5yp3piYjnI8BZ+q=ycE#mref}M+Y}r7FgHv~~xM95D_)!$EmXd)L zR#tOmb-W_Xaq#<2=!vKds=iWlS}P0$`~u~9KR79z?1Ocgu|sacgctrZ5@#9 zIP8i2b^&D%nyf6d)>bPbd;*BvW{M%OwD{q2gK1xml;TIik}zuEf70iR_L=qDFZDL@e0B17w>GODG+d zG^9&^6pgX47%`e+fGf8c^{bh%LN8(8&-5>UlF!(-_rnnE`8Lr+4fPzsAg{WqHa)LAxWJ|R@37Clj%KY$@E z;Yb92fWi?s3N6tJ-J2E2ElRJcZX)tDdNCuyStygBQPB3J1Lc&U91H?hD3PI&3SuQR zX3|J_5Ccj*Fz~>QraSBuC4|#sA0v$RdlHW%v_q(Np$9F)?}{bL|}J!P01jeC%e;x;N&Wkhg!_LyCss5aG2Gl$~_UND&#IdXNm0}9|1^D$st^uft0*b7%gFB&kr<$bKOXm6JQa3llh1OB=yxV0B#VjXMH;+`a-#RUV( z*J!v~LxnYpcaSIAkP&-oXOjUt;L436t5pNAN^py@gI69cq0AWMc=_ym*k}f&DQihy zEedA4rlCnAt5GMY>&>jG;BXGRMr^YEXmRKN>>CybJB%Qt8BhtMkfL#fFzw{WjO5?A zJTsqhdm6chb_aiK(u^09xj-f2u5qbaM~)?GZ~=up>NP~eKeOg&`Y~(}?BbB4xKg@` z=9068nJ0nGUxK;Nwn6Go>wz>Jnnwcat5*#?GzGmz9Y8YgYoGQsfKZoJdu0MJVO}iS z=SRANYmUJNC#o*ch@1#AE1@7iyc;$Lv0xTnLBcZ~gs&lQRGVlXWR5gVjzU9SFsA}p z$7WT;g5#drA(7p2=n(0IiIFN(@<-#Nb1QDUyqr9!XQur4`o8jobwa_5qWu!C&OL}CG5s1L4S;-ukT?!oAF3Y+PF?P z`pM3X(VnLd=>Lu*<~4neWfzo9lR}}NiGm1zAX7WV)il4>mCKw?fB59VCgi14noCl& zL_E(aD`&7$@!`N$T2ci$&Kph}VX5^6D~9y8LfR8H)-@djp)4LZ5BlzPE)(y9_#D`3 zvFc79a!oR#D;dqr1Els3qSbb9ks?h0Ll`Ew4+?!r9;A43Jy}@sUdPZp$#$aP$7e@q zC=tu)@#45fct`oOhKCFHh;e&G!*+;qh;AaJpOJfxA*G^qLB_K@`O4vL|0?MnfFM?H z`|J<`480+Y{{g~Bd;Gf1n7I^ezWcHw2xmBZy>Ovq=OSRhj-kVbduvvQasHm;g2A6F zB}Cl-vx&+eYChjubSw?yg{J_z*(F)7z`Ee+uG#G5?N^t3UOHB%*nhZYKfq6A&K=RASA-3{w zfN2vcl~m5%K(>dr3)LFa7Ot^FT8*`M{oKP87@bG^8Fe_a>WM8 zj0_kVfQa?({(@hT#8gKVjmN6C{3Zyo1F=3dpYI0Xfu?b*^a@gV_i^;Yx!I-y`4tEryW$Ubm7WcX{QYSBBkHA7xmmNgY5Xn+X zHvVr>_2nzlq($Fqbs@=zOz3DWZ+BeH(5ndnBda_oF;jv|8bK&R#NVdWNjmS6KD3sK zP`2H0leKX6JaRKbX<@D1N&S#8FXBt;{(dxk*>d29f9IqP@v$S+C2N_p0%OaMTwl}_ z#zBWm?a#uHhXbCF#>72pqHOkFUR-~~q0qMQjbUG%1B;KoqotPZF_XS9M=lKTHUeuH zWg_8oIoktY{HrW{RG`*qAf0j8ja^U(@fyhSyjhN#RHL)^DkJG&`E_)zKaPH>t9iFO@S;)pwfiK)Ic;WVW(wzy{$(Nm0wIo}1JY3~*E`#za zW`yJoXJ0ma;knAz(hB=Zv_Z)Nl&;R8u@VRcL`ZS=*iIDx&mXu`5dN4Tbr3Y`2633H zv0JGjrE&_YtDO19XcuPKFn_rr2CzvC9^@6s$b~403uL4=`egL+$Dth?yN zgna4wTuL>gH(}H}n0h`{8XRjR{hTITr2;@kAL(H>Jr*<=CM!G+7EJro;unn@Ec*Wx z`EA6ZiJJ?XQPb?QXn7u6`$toJN(A?ZuSPP$0jQxYde1D8s1)mFnzd|_BBd_`%m>>h z;!f*kAb$C89Z!}kLLX`ZrEpOGX^G4u39S=L;$bo0F^3+PKY2Bdhy%#j82skB&EVyt znz_Aou;n1GD*}7Upmj^A8`s7BO!Cip3gI+vs8DGAQK;FN;|Eue0xBjF&?#JS02yA6&y_pq(coA^BO#C8`7J z1@}@Ms*Qie%9U`$qFr8Tf&Isb{ZxWGisG^=#b#8V;F~HX_kR#~FMy7Dryc3ZNX4l%fnasnn%bl?9ZgtZf;DYYO!O`I7YZ>{e zocki|K#w6dwqCC_hP<`=rOuAB&bIOC+VYUXYsWI#j`?=@!6MJO3Ky@dxfTP(s_gQ} zS7o)8r=iJyW6^heejzWwDRf30fUmJJ+03PyQ6ZZRqoY=Xcb{`SaKb(>s3{cxh|bG5 z_@eZ|6;TDTZ-QXn zkZsmK7#Xl^nXYb~1h~jlo1@J(2Y681AwI@gri=7SA-(b8WFTzS+`yRW@XDKF9pIoW z;zpyksivw(CyID6&XuKfq&-y*%;I0Pi%J9uffEeZTUz_vYv-K^OyZE|ze|Qnzaium z8BQn->eNUm&mp#2aC@b5d4nkS9?5r*KJpF34^?AHYvVJbLy2}w4kXvs7&ziO2y33D z_eDRmI=AQR@MSVfXlKIcr7=tI{(Ftdh(9O%8KG<JZjcc{U_TiL4s0EM1%=gj#(^*$OWOYVal{6spxMOu=oL&4Q$>E(n>GkLbh>% zXXpy^>$ISCEi}v>NaKQiGxo4Zt8cxj=Ueia2!|fPf`O!5=I z43-{H&DYLNc6vRYya;C9Mvwd3arL`CfS6oPNu9I^@c|tYCzXAMsM_TdL2n+oc4ed7rATNozWsvTRtFbW+`YA?P6Q zd2y4lQ>2(&vqE9fEd+%U zj{s_&J9ic^L-w*(IngNLFBtK{JR+2%vw5=2{k}?v(=I$K(cL(cSTK)HkP<-jAyV5A z<5NBv5Kx|G9wfP~ryewK>fM|$ zr$5jiJ1*EO?Mpk^oa|=xm$&+ufReQh!4U$ESe`k?-c50>91=t5Tmmd$prDa;>_rtY zb&2)NL4?W(tOiqB?}l{ddmQd7dAnUe$XhszsgOf65&WT;rK*6f8*6^NA?X73vhIDf zJpG|U`c~=%+SN+hT-RvQ-6&?rL0f}6ke!hrvoN*@-N51j6i1bJY3Uq{!)Oy)M1YWt z(A3t3R2FtcKc6J`{#k?sw2O~dS2fo_k4#MgzO58z3!E^#{@y2ToD7jVZ~wN7_lwV( z$HY6YbD9O@Suuz8tpuxO83RDu7JuGT^vTHGVIX&Rw!i_K^U)i_;Hp0i%pc%xWmvK~ z9BJJA^?n@Qs7L+HkCB8}q@|U)Rmufs-x;@y*yM@6a{~(U&>|X-cy6Gr9jo0VeG{27 z!IF1(%5A!+)%`O$T5>p{?I2JOI!p$N>*+3^*BOCVhab?@Z$X6Rkte$@^;_`FlXTpM zph_y#{Z8>zS0e)g;%BfJ`d$LzK(O2AsQWL3_roY^WOcsAiQl?^l#mfw;Ol@wl%4e5 zNGvA0i{BT~q0!SS9wqF=S}JM(0s+R@jlJt{rHM1V%kL^v5NJ1gyyhW%XUK@ilU>2P z)b2mrjtI(%%Io>ycy%@`QQETl&~LY<`SbLkFS=W%^22I&nkjd;PwRz9j6^kKsLi?zfrz(8rSzf1f}NW#El)VG{*F|4Njb| z+5uJ9nJm!TgSY^m{t6SORkDa+Z4C`G7v1dkj^D2@g<4^X%P&n`&>_+I4VUG`Uf&3r z2eUD`+q{8NrzBv0$8}xNUz;z3p`b$^f*g?mcfQL!f?U~7h1`9kr+gIW_#u%{_jOjn z`_I(gy)Xd-Y8Sv;h5Nc82l}nvHu9d`@ z!*r}q-`wnnyq_+b=g`Q>oaF*(*CU9vBHPI2V00A=7+Yefy_=cT(+~>$GC9zaQ zZVcKY>hAE&kiGJvshqo4`{*(2b`Rn0Z}>#CrA)1q&t72x{Hi^<*40()g9qV^$=DgY zut&?j3QQiKH`mtzTyF}jM@LVl?%!G9K_Ph|H&$yM7=H#*Oy2pt^+}31=%-1?yMK)6tA6_o(QRz`+?apg7n`CfSI?GGH@(}-gEBj09?aonm55aj>L$62( zH@UADz*uUWasV?1wV63VAQ{Rp6} zv>K?urAZC_K@eRkY?ye%N%PDfRyh#ek>!X$XbmvU>GA$AA6mJ|LmVL^008*R|CX_x zOr0J6nb1uCNnO{zw(i(%4R`L}P$^uzrASt^6OLF_YFgS!$j=*T_>!JZ+WPoTl5{1p z6K0jROKlkD{8a zM6^+jl3Cp}7dg1^HaatA>lu0D;+_?~-%9DB64s3U^cVZp-5ul6*w0OLqqj|Bzgm_I z(^iJ4UD8!Reiv>2dB;ULlrPRYXtFO2fxAMlk-1ZgL_OnFbgr8$(Iz~TO@)fXe%-x( zk5pCG6e2lah*1D2m-ic$>6$$Oir}ux&b3p6%FmfTxv7(2RXX$0)_wqI*%N@|tNy;u zY#i_RS4aFa`o9j%#CyUCNdpu$O@J`91|ih>v-^x}K83qiS22}H3`B9mmyKg??bMN# z^)?UdGhP|M7sHRyi+zYj zuo2q06@Y8(%|=)1n5Z@_!0whl8$deiElql|VX|2A72z>>U~Kc|6L+86Xzpqu+{_C` z7B1RwNoUCvmR}m#%;wuLj74{2!pIo6cgkwNabU_kR@#Aa{Ei-UYMI&Afk!w{FkiTI z6HOXHMOgak#`y)Fjs+kyN8ZheO{D+PT@TGy*I&%C^@a_B|3m|pj)wf6BbMY*Vu)S5 zGOY(jv$Hl$1)eW!3d96uvG7~F9+}`n1-B!H%Le|Y%4z}N;CmswippbF+)bOrjJFF^ zaV5x9Vrj#iPGKc9B^6ue&;`=O1HiurFa*u$cj2@Kx$86qlUG{vdt8U%`rr!yv(MDt zSl|(8Y-;k!WsiKlK`9e@aR=eGpP zhsQsTnN_|X&f6Mo{kST-0x*NnDm$$WG?#~c}Iy69sZ>G_`X0g6?=_T~lZ&G^yVC}5; zO8`5x`bo*2O&9l?@RuFqYdN2?-*TJ6K~{8s+C zAv|LOf_9jN!X$c%1hY3d{8H7_+RoC${(|gYaV~pf-cE7_W8F8y2AhD-zQ2N(B%fUg zu`=o+4lmy=T|FW>=W(E+Y%?{(fb#vZwtF>3)tcX$oZFdNH+GMjVqSsTC9&tkKyAq) zOCDd>oz{w{d^0@H<>YWLKnOR3p>@%)kjSL+>8bs5a-CRRp@DJ-YYC8iyLdFvP?3S!V(5n~?f8q>Y z9)(gE?xeN^fP-kYT~V|oBm^Os?A=>6B1WUuZixpE3fuI6v=63Nk@b0Hv_M{Y>lt-u zqOOKsTPx8D9aK!uKXLK%wcKlr6rqCxo_EYZ5jDYbD9VUTvuB&$A@1^ufRf_u=L?gg zh`O9P8o;f3L8w5(IKrr6k0N4_=5Qp&lOAA=)ls6)E&e~+cWLBUOkBr# zCZs&$3Q9-RW$;o<3&NYn)c)sasqn$B-p4R$v9uzFWE&Y*ST?5zz$D-BpwP941`DuW zkAjqH$7E6^)*q7-gJ1Cv(cbL6@06xXpddj|pxUIsCyc!nIaQoa9h%Pw!rx6%Q6DiY zJ~yI<*5~wPlxXLeL`!iY=DHVj!OUAXnH0X(ScpG80I@$Y=}PJTgmU zBCnkMgeW5jskK@FZmQEFuJflt0__>iD|rzIjc5~t=UHC>{!1FHT2_y2G~l!p zFlPi*$+a`F^F7SFFrQ|djR?UY^Tn9O_vbEHKdlS`)tLLfR@|sFh%?kQD#>2^XeWMJ zwNITN-72N#BE&GI!Ad!j9-y|oGzrdaao+jgk&8&4$QBknPZ@1?n|}?%1gN8-f3KvJNYysH!Vonf zuazpxJZ#V)ale=TWeR^k@o6+p0&`pQZGKhF$}7x?N8DJ4F!ztLqIgE@>m2N&nhP9I zGg1r6O$4@-#;R;uqfANl1a-dCh_PEXDw& za!^kkPtyXM#Tq<}N;DLrj3uQ^)kT%z8%!wHL@y_5f!~nU<6z+d{_{h^D9%#=!-`rF z7G{xaE>+ItnHem?5c8{!KI8!&fl zBq>I=_j|a>Lca&;^`KF-2WD#P57BtJ1?3bDISocZIPAS8ijVymNz6Uq20MH~tjMk^ z630|CD8?h7uh0u1i27W@=@vmn&KgsH?&g)l+awQcNMt+@@DiYinEH_uecr=X0yebO zL1$vpXu8|?ALzI2#ksSwT_ zp6{e%HqyI>**!>K7SkZBR-!=|IhU8ygpm!TSJwef#If;Cy$d?>aRMpjd~9xTROAA3 z?<0U9tmRlLxV41m{EuwCze|RCYVt8h(;fk)GWP|}E!?J%I^16HB&btg!JmA>=td4y zYUl_YyLb}1D^V``bcXYOX^T$7D0Pkq9JZcw7W`y;nwjcpF?Z2KUmFyfR$2vn(o8%f z_4U7o2=i`ypr)zyXkOetf|*wHY}LtClji(2Qy?= zYQzRMCXXPLF31SY7xnb=Z2BzJf{kJab@^wW6)2ET5*kN47d)ol?_+iQ)qp)$az<7S z1xWE60$>HYQzsqmuzzT2P6nYQ0>33~H3ivmJi(-|Dr`U2Jz%tXa%h|A=aT(?0X~NK z7I#T^NxqL1;rC)5L35@gFA|m=WjJfg;y+zdLQ1>f&tcFB`Uk};z1OH->NW?;a&pfc zP&b1}ysf=m$Ku4|*&^@}whoQwF;#N_lDu~e4J@%^fdO3$5yEVn6A_NEXO&ktx_QKb zKKUnY{_v7(SD<0)oBq?@KmVL4P4%r6PSn>)Z)RB+x>_qmlk2{0R$#k0Wu*DEL*XQD zj+33DpY77+_Hf=3R*4Ggb#gmklh{$23tNSn_Cb-g-@jWCdAnp)(P`x(D4ziW=qKp| zc{38p>#{*fqEAAh6GH|%W3i)*H0cMh2?pP1|Fb?zb<$6z+UC#v!a1F);ORuxd4xKE zd(ng^S%5GhMAt5o-b7}~`;gMYEX#)V2A^%y@d`7!!C|IDA8`;cu{%NEtktq>ze78^ z$E6^DQg-TfAFqGmb8f+Vx{b!~^Z@r7h0*|Ig&%D9$3lSB4*db{;;+xWx)F#(i-aP~ zh~mHuylVCnkOFrD#RA6RWOCA;q>G~^BLPZSEk6=wev8Z{8ttKs|PQ>tq z9Lk(c9U-SgDUWVNksdepD5zor)seDpF z`C*wdqzByfIQf36Yo^a!1gQ7!|8$U2b4?hf-2sw1;k;)swEVPUiOp5l?CpE7wni5K;ai; z;oYtj#NMq1ppHDUu9K-UC2JLt9raZU-3AF0r1REIkAyM6w_L_O268`}-KV3d6Y~P% zc2Z+~*^9qsHGZCoUKD6F4QQVE{E4cVf4tMkNJa31*U$-^e5C=3%gvF@|01=NLQ}If zJCXm+6s6Z^Rt?yIPxx|`4mt}sif(QfBw7vLc?3M~q324X1{*iXalbYy98d#zv<86+Dyppk8I*OE zP&v{{H!nL)Hz!{WuDUc|<=4$ol*h+?@;;a!ApCiS`27U_dCh4~me2@pnw*TD92lQ8 zS66^Fi6osG*XAMetujUk6eX1mdJum75(1;e!XN6f6~ncK4WCbiV*sf{mm1v+m^+0q zXG0K=ae^3HyX#}pUvF2pw!A=fPOrebAHSMu=9w%X|WaV_8@QC|V3$*9(qpABX*x-AEc(+xJ#Q+L%kM!@Y2iM2;Py5^yU29L#qsM)y4 zI7WS5t(oYGhs%XHO^FLfk%e7e9Ssfnc*+~x!x~v(NaSOlC(h6jG{2!)CA)?Pi%tG zbgP*X{Wu$!w>0zX3`~jfIJ$bZMFMY1Aadoc-MvBy<*&(z`w%z99R!BEa~Bh;ihYO< zW`Jyfd+-XQ@|d>6o8Xj!H41<20ErRDP#{b=O(r)$aZxz%Xsv|tai(ZB@IT|TXebw5 zDrl-K&6>t0FmjG*zL%+GK*6W7#TM~t<%)B(tx+9gT}U8-<-TS^6mq{Mn2{wM^4)99 zG)9qAqY@he7j{*3He7{Ala-xe<>Wklz|v5{=<`P9gnSlSTI=eU%eT>Q7v5i84W=iA zYyVwdJ|Cjm=I=WCT%(c5kF)*3uCA`)%(z!Wy{ty5iHj4$uOa_kTt2@>YTK|+h11Xd z{u=|zxre+c#;20(=sq3Y?iDwWsNVrQ>2oA7$BJoBPWO}54F z+rO+5>*@y5Qsi;&rtNr!qcM)_pC;M>2$DIhvBi$qR`MR+t|C((Aue!a=Aq}_8HmTo zVMxs+C18s&v;wUe;JA{9vk&RWa>?5-X8RZhNo%eRBL_N z5iY7L>`zrUJ0}<+ZBY;qYikYqH`ji@x=2^MfnR8-BM7(xgqmEhDHw?}*xFkC`Ac=Z z7yg^kmB5IYLpy{s=L9X)#WioaS#UW}&E*<~^z4^(wx*+J$)~8PjTI$jJ`=5x#Am-7 z!f(|(u*GNZ^yf$Dg;AQNPLwS<#x|f9KqXPL;L5vnS(2Wwo&prxbLN5u$st^7wt+_y z=bBCNc2NBbDy)fA`rb*d%rR|}RjNMjTf=yPPBdkD)@Dow>)C8EhOIAx0pn3z_7Cuy z@TAOK3EzYJMZnOxNYi+v;byi>Pk~{0i*Vm`%@pAq?uyc?u0!uUd10|s9ouagEyFJr zU~$`ncKEgUxTbNP-${nTasKLeX;KuStRHILT<@})6E@96E=t07qB081JU#*(j;U|R zj+SXbDT`Vfnb)>0u=vcOW66`{hqb&@ubUf5%3WT_6?G`z@r~qG2$-Hq`6=}j4c45c zr+c|$EPzW{YR}4-0A>z+9c`H*8(WGwi{ocYu5$TV?M@c(?wkCjIj-`Of~=#)2bO%I zQQ@`zAPis-v83Jya3u6RCE&}1)m@>NnU@meoyl}A;G=>G~g*f_dDU+NY?XVyRI%kO3jTVAEvaxcL!IIl$oO4G3#ki z|Aek4q@|0BOJS^~F{9pz8E+%a+bE&vHr=90Y_YH?f-(2dG*5mmt$CaK_bz2qj1M3i zTHWzJro05i#9XybjbaL?wIV&iJi9}N%fdT3M)=N2YnnoI2t-X++Q-Jl1Ye%pEFM3B z7M&ZiIcuL|Jv$(#XY%4B{rIve|ExG zskCspRBnhm0cu%3!g~;LId`!|0#b})u)z6w@vP#6bt@u3J*Su@7OjX}U=`qfNtSu? zCwVCC_>&FDxH+icJaZh_R=IsXh^0X1Zo8iE zq}|+E8>}v-F-xR{2@;&8uH<^kxEePubH8Q8`daz}Al&fIcIvWsjvjm2I^Vm@Xfy;KA;<4Gcpjlkp>P{^#FWW z6^`b3z11elj-ScEa#>^6ZI91wQbe;97@;(L0hTt2(} zmM_uAh+9Gb3{eN)m$G>dyXai!EOkmp;>xX;>k>T*-PpfT`ATlSxSr3k>YP7r^5AVcoi zzmEEzP+gyk;f3@5HomXWh@m)>eJ3R)a)}OT#~gN%Z3;g>gc^PacRLE39h3CKhO%$J;3 z`-j=qa2x{G4&k(9F(_w<$Je}Q&dymB=()-NMEaTk{C5OmAz-^+^ zD=5CiATjl_)(F^Eg{b%p2|mEiXZYMy-?XY;tw9#qQfn)&mS7^_XM&e}xux7b&nQ<-Sc)Q(>zAdjwD))hx1S~WL= z$dEzrz@tewqNU@TfbDkSu#I)1EH+CGRk?s(g|q_djF_2n8D3ebu6vy!-YAI=7A$0- zCOba)XLj$;QL3wW%G`E|p49T!B4a z<+MuEF)Cy8U2e4>bBzcv3ChZLR=iRCO%~IZcYY!gPqpN)+dt6L$tUL%4`#SprZ_IS zOR!EiwvDxnDD+{}%GQw7@>msCBmgMI7q`Drq=D&E0vGo98l5KFifBaRP8Xyo!pMUR zNwny?abuq-J#&u$gL}ZB59y_*KDuvuAWOs~)Q%I@mTRB@tuc2Jgxhce^Q!6IbG^yn zvOdaZ81ufM zm2G6Thh2`znk#xiR3_EEAbyZFi1)Rb{1{1S+kbLlN-F;pp*u8$Bqa({6`5n_EMwB2 z2ur!`&rY4_hdF|9W=b(-6nBKXsal_ww5+tnb>(NG}#|4;b=b#B!V*XW1j|DH$iftgP*RK?0)gyOa^yE28MM=GL?!R znyJt#uT0CuU;lO;e3I63=?)qChLv%cV@zVL1O-f1$2|fVc6c4R+=-=hfG zco1;Ci23dO*}uE@?fsdnMNrh9Fi@)jD-dKS%msF@9}`7u-x47Tb)}nVonCH)Vt!q8 z;snK7NTylh^==OvrtT}uY4I5zj$uC8=UW8_PeDseou$ABpFfwE`xT~Ln?cev`bwSjwq8T0Z z_|FBU@6xJ9+oIg4LK_AF0q*gNT+lqOb?BcfH>0ZEjyaZtl0lHSgD-yl9Nfr9NijHM z_jO<%U*Ej5R_q*nz$p(e#R_CbM$;vyW!l_84}1#{{tY)19TM58cz7-9uslbmp! zdn^=`EN&J+iu&g~BbwGh%n3BAx(qz2a0`|)jyAiMq%mjof=5Q|C^cp-@zC5oLiXx} z@VeX_goF2PS0ZC5j%=|#jFqdD%H5RjxSXt?@5iHap!+{S%_HtFG=P#AY1Fk|MfD=l zNgYIrWV6>&)_eUHudc@mCbp8wY6XC8MW}>R_+hb9^TOA~h?woXZG3~-ZZuhgaTdE89s+5hPL{Lg)alrqUmN$yF?tc=xItm$oYzM-q;6{6_rX66kwq-DM zd^B89L_&%*&$IVwjAZeq#JV>Bn*1(mmX8IU;gVYs;#Ovxb251{G;CpG^(2JV^e!nz zLXz%7o@fKY$aW}8w}>f&y-k_sCcC7n zi!~Y2h5L6Ap5qOlGMpf6ZFGkx zi40f^q`bsR1Vg?af!i(A@c2H|x_rwg))V4fC%DFvO-t}HnXm9&PEro#e9=}3^0!C# zK<+*g7)>_6ivm8kA_9nmsEdxC$nXV2*qjmrGXv7|V9 z^C2OV%6BWcx~onT*Zh)X=dE{8L{2I&69>TdQNZXJ*JC_h$DwSho=@2^&K4xdW^Tl+ z04AsQ39VMfO9Fnp1n*g5udg#>M~tCZ*B%141!P=5@DDO^BCYh71G^beUFWhkV-IVq ze6zYy2%gg4*Ci#Uo`T4jEx2R(_KmniT1)Zrx2P>tdo#;m_RZVLrt14dkKXQ%2D-jr z$Vf)dT0bIHWbp)h>1e!__{tI=yh!NojN)pU?L?9Bk&p1S**=VVKgI~k;)PK&B{HEe zjh%vnW#=$b+A*>1V&hGSa^<-%$=VzKo5;c7pMo<$xF;$k!RZvMHHrMhk|m)dT$l=?Un!Kc6CkJGq}-Si-sE8JH*?)hD~VBo{zht~ z@CHhP`=UqS?jQ3V)vN#tqKZ;FamZInNN=yJ5xzU7!)4CPu z*vRYmpnSA$NVeNbAVL*Tw@;f|UIev3jsn7O*I+NtW4tCqVU`<*FO52dg>P5^r$ZiZ z(ga~bk zxwHTpD-%kR5#vKx^tPqvtg#UYN9HdGZ)t@%nqv>)ScJ4dPjfq)!X^S5$KX}e>bh*y zdvtMVT2D1cRe9>Q1SpMl8zp*haXq&Z@^yjrGz{E%=nqKat6eLOv4Z+IYHMe|8fS^P zQ_>LWgksro?S*TB-o;^YJ4b7K?QcU;Uc&Uymij(u@s+J}qFJ?35PQ^G5xm>L3fa9? zX~6aYc@nTNdw6Y|i67%;TC7veLYFB{NTl&@(lU`Pr^t<55!E3QrHUQCt;1k|Rn;dX ziiM_Ak(7Tz#VFQ2R;rE?jrq(y#k{By!?g8VcL6S@>yZJS8A7JR+PJP3@TJ;`mT8BQ zlv@$7^jELV#5PIvHnBhQzgjCCxwrQN&uoY@@)M`O@>Rt3(v)u<==9P07hRE&oW&@; zKPs)qa8A;0$4iOnn5}dNWnN9zO;o!2*?JmLw4SlYOrIE*FfXVv3-{K6?+7v04pRq# z^CIh`D6aA^L_hoXG@KIl2Vh#&qQ3&$VUcoZDf8cStbeUQ=pYKmK+ZLU@`A+7J3>cC z%6{;;4L@7vUU#7Ui?R$rP_18@)Ov1qlMq@&&9Q6MS3i{Yl_aaLf$xMUeLS|vZ_B$( zjsvT-D)s&i`Euv)WL||tZ=uUw`fyFD*r4^5qS_38yhGk}T@F(H(k1w>Famx$Hm;+5 zxEsNqsk-{K?RK=Kfb&xF8h(e7Sill)atau&I^BlG_O8`}%$n6!lk?cG(y?Ka`h2e| zbQd=3OPcYdTXO-vyj2>WN8hf+->_X+J9}zWUv&D2y|y*H<%@?E#$bC!@t&?~?(<6r zl56?)(%7lbe{PBBUv!h1QuqmhN57%?t@=Bi&FrgXK732~dJ~WIok#&9TO66k zw}nQVQ|;pzXqy%!ua-^@kvYkdDxkEH{fUK7R)N^!oenFoNxxbUucKu zV9*{nybqqCo$yuMNv$@%t@tyPy>7hw&gJ5nhy1eCB4Q}m2`aYH=l^+7g?n#Tj6g}Z zd|?KvRn>AUD73FD!^fo@+8Z6{@faq;2Bl!(X0(IlBm~70RTgs>U7H%(8=t*fbbsG8 z<^L8bse*Q>yt#7Eb`}WoV2v4W-q2|43%D)w!c6U- zeSBPYAoj)M)O%SHNxu%^#2uhx1sfjs0M;CYW-8sAI~`HLN_lwSiAxTRPS;v!!dwM4 zpE`}`{&<@l50fozkJXOzcLO^o$1lw0P%D?@HuJi5bEo_%+jWy|(zh;7zM$vn# ze|%K67l3g5l*$Z<;?sxQ{6MvzKDA6@gKW+mwyOoCNg1v*9;09PDX1&6-=?@+oEP#8`>&ffp|9Ny?eZos7@(p z+BF!Mqb<%`KV)e~f)oa3^uN zWsHe!b7I@JZ72WO$;9Twwry)-+qP|cb9c9D_uiL#yQ=%KtGXY4b-wc*T*c-cYUj46 z6&~8EWW{XpQzUUzA8U^BkBO2{q(m0P^~p4g>aOU2k9OVIm;tw!v0q^p z{eIBr2=o0uunopZQwc9%9c1`l{@g~$lNrkadDw0mC9c?+$NFtk)aIT<#VgQZx^5t{9u%ao(7UOj4wfH=WZ zQkz;hX<_W<%Z>6o29lo9zi!0jjp8jjZ>0333&kmHyVxN%1R3wFO=^0`%t!82k%J0S zOWp7>C|#7n{?lnaS7<^>c2(}w1Dk>(sC}FVEp>gqw5<+QjY_=DoPXD{^u@wy-YZ*{;XOHLXqYL1G`Yy+T-MHJ znVmDmo}YiRmozyP#SH}QU`WY*5}JgR1q=OXABaCWG~&McawQ2TF`ZJEP^5rX?QJII zaHg+|74f=mD!DaBEII40iqqgL~yad_Ctm{IiKquROva`+LLLXJD?zfHr#RpV3n za~`-BM@%Ay_13?YotC2Be6!y^IK%KxXPr+2!I5C+)(IK&bj1LbJWmO2J2g8sS1JZR zSrx3-2b(q|fe8FbO)|d^7-0x^{mJ``^&@KVU;S^y0%n?lDbO;v5$6c*lw7|7k@RYA z0Fys&%vam6?GS0Sz}vn6=<6*%%L(O(fpRcr#Kj_kJN-ppH1W6Qu#I)A)R+O8+_<2| zb6D}ZJSE52QqhnOui#bvb6oj-Rrneiu8nZWm1{@`o&ohrmhT-)0+(7>iY>b3r`l&H za_>ABv08pDq+Ju%YwHf_ZQuE#U%O>fL((*x|KMmw419gty+)BN-IN55t(Y`aN35iI z)SISDo*rFvRyQ7wRr-LQ|K%4-Mk^LVNd0BznrNMWLHAA{SmfqN&`QB`Y+cl=9gq<`btRi#*Szv`{Mu4ZjT>>2N1}AJbo^UpW7Z_Pp|K4YWvfqPVeGqZ4EGDrZ={;b#??8 z(d+92Yyr;t`adoU(Ekz({`kvwED{X}h+Gy3i1NRAjr|`xdsAB{C+q(cOy;yN=D7Vz zP427&Q!S}6_r?bA z-1d(cl9%^0J=+I%!L~*F+N3oCJYzJms-E(X!T98&5^2G#Ho6Io!F~&gD}fAwDDs;% zPYhGD0`t-h2U?x`ulUSO7y&}9SDjiKgm?xCVRZ3lK&u0QjOHHL!}^EILSs`ySp}-mGJKxny`H%L*6gaIhuG$vsx0{ zp>X0mh_A@LICI6#7rKNO$QVDCQ9B2@~9LR%ozR1bmU9d@%P& zW27hTsuXJ@aMs<4anTT(ssgX6X#IEbFGWbh;#0G<@lY0xDR!vluy~6)ty<&nq;Hp$ zNu@R*f9W1jrhF{LR4}>&Xd}x{!etQm3$8V2a4#Sue^0k0y4uO5dni^?fueweq-kZ~ zfGEFHo~_z8iCYI4#M;I9$v_Gd)FAAG*#scJGz|=|l07@>RIGqlpEznZIAoGvi3>uE zy2)4(=o3I-hwnFJsGaW`as=<*wMEujmW(g2<^~~&%b-{y(vkCH1p^quy?)80FvS8U zu`q0C0Q|}P-`?4grzDjd;CFkii#b*C0N=Zu3Kj@vuS0p$_>$R9JBN40JL-`DaY?$i zkaS9K>w~d1ocJxJp{RX>V+6%MbYQwcAIz89@na`?xA%25y4OninQx_;X9{E8gb73v(*kUGH zN(~52F)*jdvgxBgT@!Em-c5Qnc&eih{y@4;lm?rM{PAGn%}N41e%{qr{&j=uG2J2h zaYRkMk4+MrnbT^oRA`wvWnhxTPRQH}rNa-^_YTK(^cr275qy#O$O=nUAg8^BTQb%0 zH*!RD+BHJ=A0-98R!x;umiBxgm^;tmk4b^YxF-G~3c5Ta_l+14nu$;v?imB!7Ge+( z@42*1B9|>CJ8sdRBi2#9 zYRHd|(B9XW{_$%(Su7HTdZq?nv82nEaJ5J$dszdsl8ffeTELp_68iL?UtdxCj;^>z zKD}Gu(xO55rUE@pys$mZDF$`VJC7-X*fb(^b6d)YfmV0gI(DSCa-)2iVDlg7=+^;f z_uRQB?0d-IyCj7_)+W|2u5OR<-H+>zrI>I2tbcpg5c>qxTh7lb`>ur_AD8y_oL@2< zC-^#*^24SGnmjyyH zfq^Wurv1}`dCX6gt?Mev+enq;&2E^!iQci>MwxL~&`hkanI&jFAsQ+^tqFuJLbMfB zt--TUYHb)3*9TtyDUGa*PCSjLts#$ z;NnAlQ4c*{PDWPKVp0AhNO2Bo>bI>sr`Pir9zkb!SJ#hln33JGZk#ztA- zxmv~bCs+bj_>g)#7+Ga!bz~FwG@89Mu$PP0h9fNv{SG~`D|i~2EtbcipWUmISx&*S8BRkBP0Wb`Z+F<)pS zLcYAa)_~O@0~j!3O}{W+)B6s`cAt2hMya6VItifk z33k2-YGbStoMtVMctmqSuXm9}#mX2mBU+_yzvcCJm=aiz0|H;!KZ^GBIV!ykDq}q_ zn>}0N(A9!XT)iA<#;AO#YG8`&i(#V~bjoqP#ImJtGX1sw`-tI+riae{5pc5wy?$K06*drMj-`+SaVl#dT}s1k zRv6=`g{)|FvYw$E#ig{9q#XVfV{u9`6yj%8o~;WJ3mwr*z)W^#|Kpy7cr zOC2<>5p1&d5(|Oytzf~tVy6IqNgsy*8@kVR6T@uCGY-FU@K?$ILtJ)`m>?XLI~34h1t&GFwnVrhM&xdvoPj z7!N8YZy!~d(%2f-xH$B0ZYJrzJU99V4pi}C*tF7V-6#ibiMT;(7US}GwczVz_(IbY z1NUl_dvR!QIBhhDe?waHQXD{=+h@-c7c@wlk>KQHnZ_J`W*IN1yam;AcT)Ps0ZbYQ z$Lk*1Aft_br?g|1c!`v3u`2`9BWVm6ekJ!rM7wvt2A#jC;5x6HfZ2dHOQ-1@?B{B{ z!zl2Cq3|^8R#?dZ1rwr=dkJ$rRG>R~9@DA(RIMCjBv~^5>Tq2KVR7+pKRksWc_u~z zAd>hRkA&;6I3v%RsTAPx*aVMnq}}>x?5fpqxX493-EFI(_A-=Bkquud9Ijdt;W~$t zRw(#`U6A5UqviX{Ea^i6K&Wa4RKUsHZ}zXW1mzNbg`&1RR`RlwqCx8cmjm12@{VGx2okPhClfFuXM3&DoU30ik)%G@HZeKmy)#e zDQ_vpX+?V$11Fcxs_SLYhWNwtDIpDw|P^aQG|2CPt;pK5$lUAYL#ZmxcbXJ_Xm>Cb`ccC&2mE5;*x# zaXnVLTJcnNSr?WM`XRQBqkN2VrvL^!c!UtECo7Ub8135ZWEe(Q0oMXG;1)Shgkq7V z0poRZBV;g0><%@u3)NTLEbSU`#-a_zBOmCGL(8{VtWcAVdK0AWN$|fb0*h3RrPn! zOaw%q=u%m0`Syl$!)a#~5=Ty}0O`#N2~l0(xpa}(-6yCD{Rm^un0U(Le+G;wx0Nel z%G@0r%T%@KwdGlxZfhG;%r|`_Eb@V&kYNx(nWo;Z^rn^Pl0&!2<>Vpw-GrbB9PdT2 zh3ls!>3(DV5Fm(+hOInt;_<>VVLjqW6!RKJTjo|mVxb(^qLko`Fjb}uKP&-?7^1a#j}5N>hbz*9*$NI~2zLDd1%Aa1lbe-{}jli%Q z^)Hqau0EiS=&oWZ#C@ai2#p3VefU#vM(``Zs1@gN<6@+9_JCx;myoGL{sl;*?Uma3g$A)S}CbRfyHHs0O#H_LtuVK-uCo zdb>r@YxYlu)H5bl3}0<1=MNwSI8;mha%w9+HR?$HRZQKUY#ZCQO;`GUG{*UeXMmy61Cq>kg7)OVq<+SYcWQLGX z)Wl&qw0>LUWoX4)_3$AKge!6dln&kK&`=yn_=mUuq0imzdm5^X%iM+fAZ0 zgWqLUGw;QozzllB{M{GMx7};`r5X5J1D#ePzUaq6joUMDM062aW7olLC+LobYq=js z_l@OyDo2h~mz!2iGluy})ttq-Xkj|!=-T1Y>4Rvw+85P8JK^rJf53jhcWTkL0x^FU z!fV9`;s;V~3jJu6Extekh-q3@sF0G&B4#(;-eh&FJtoUHg0SlidO@@km6dB*O5Qq( z8Cla#RuiBTp4)pPm5FRL#z^~@$)E^iWdlhg%Vwl4h-qG@1IidKLqeXhVcsr&1;zZ@ zb@*!s+inM7VQI5*P~apiIJ7xNC|dyX_d9=npX~1_KcCK_Zuww6)PpuJVUnF&=Y>n+ zY){uyxzgp=oT%Q6Q%k9S-gK%mD$~oc8B*%x)9lTsJGmuk86)O_o$w_F+#-Q<>#|4<%Ds4fQfNVhF3-GS|JvZs z1Sy?`p#BqTx!-4%d8Lq4h5Z)j?qqIbh?q*E9wLr9?RZ0EPfoZzsAS6XPFgGQ-K-3x zy^Y*Pn{YsUv5^!U6sT=t0$oc?++P@ay|en{4!<;c(Z02`tZWNSTL>H?^dPsAa-QfY z3Ev&4YW=DK@#Yxv#qEi&JiFOI}=vr^1NnTH;whz9iO>Z{@hJS229mU7*D<_(6~IN9}dJ= z6jPn4r6Xtxb$g%v*2&_h>(nN522Zsu1tYrY$}dh_XWh!aN2)r2D!C_=YQ`oP(3qzQ zAs95P>D}Y*uu2Qj_J^N}mu#(&X>AK8&LBa{CaN#y6YjGGKdT&dKsVD_M)gvkR#+w^p(ZAAcmihsW3%EA-UDt=&x7Z8==(o%P)ZJ{fjZt8tD#i9Au z1y`7v`enk&KS~uxgGo;|7M;><#efA9je%AQFaF&lDTdN%nz9-h;GBm<54<87j4p)~ zsVF2!_|uOFFF(LAITN*Qg9DpmdpZ`0>IFTWuaGGH3tWP-t%}@f1jS`+X{LiBD75J{ zt4TIikIS;f_Amqo>4jMq`wlWo(?e}TH(s#Jk}p&Bw8tBl)Y^S>kU!y;xP<#X?v0uL zfx?iXq@#_)*Zbj(73Y*2da%Pr5s%2#+Zs4!i!z)EpZ1Yft_DQU0qhW}0Aw8%z!H{R ze>pd@bRrCs0Lu)??LGyFE{9k7ZPQe)+~^=ss$Pcet+I$$*JgH{bow6D6_b3>ycIJr ze)V!ayga#Hj#ytaE^LjbA-SzDRKqdy4z%5|+_$ziFqq@H^IWHPO=UxcP^iB~**>c@ zwGRKQ1J1r*(8y8#d6a)8yCu~Q=l-d~TVf2lT~G<1Hr9G_m}(q9K2fdMVj^kQa&56u zu7#_eTfPdY|EoqxDTJScx<=xX5G%0+6Dv{NipfHwL>q6DB#?<=ELUh$59>tzV@$HF z-fV@mOTtLn>20g);W;Bs`Uja2`nL_9a}PJ(1nzBW-)Xe zR>(C<*0oXnWu%>HRFGYW(UwOJySFD|7dkvHFSGdz**Nbf-eddUx~?~`lm{Kt7Sasr zXjtT72FIlM3aOI7r&G(vmDJKNO$L{iYrg7+HtEY0tkp*|@sv8{VQQ-DX*RzwYw5C0 zRYR_gOuxNH(f=9jMWTa`8917=CsPka4ipfi0Fk9pzM%Ul^{gz4R!SDB5U9)e=_oSJ zsNK^Tvky1@<)>fqXCP5E8yMIbI(OL4q0cb2D&ZtoF#yx zO^K(PV+C^hW0S-?Q-VXQO>MAWZCG+}4lsNRHXAxs*1ppfQ=G)|ta^|$e5;bS5|gaQ zejL450ut76+QD+h@X&KXQMq07I#S2SawCy9Z79sOo1uCaik4!t)kADZqAPK=k9Qzr zq3Q8=Ji2&g(HrEFh8IDn#=nJt@W@|5T2M|e>;Qe;sg1C(7BZ5N~xi`G5ao?=+H#Q zvW(FlfE6g>>V7Hxp^I=*fR6vnq(Jx=ChDk0?L!~XIn{vjt2d1oU3=%S{FTcwb5(0@ zJEBC&J^PUn3>HtCQNSQC>)9n8MpJpO8nC}av+@rbM4fBp0(N}c&dyGcwSxMs(-vds zZ&BhZ%RSu1Um*M03|S0m^TonS?Yif^nY;OPP=QrW`ktyJVSx|*iTHv5vutoga&e_Q zDQKG3@HvH5>%D&b4x{T^0n8x8q%N#>I%~5~Z$_xDhR*VcX z?+RVdA4K_U)oiQ8e zr8W>!CLPU8#QSv0N4YOS1=@ScdYhn8E+6B2E2~_eUa4EU^$i#Y*|jA?Gbym6Gx`?c z=SnJ(rZXBsT9w%08E$UNh~(Ucpnusa)`hvp3xKK_*8Jw`k@v|N6R(7} zwFAMEwGH5o+$uWDcU#teD4y7a>-IuYGsPAec;+$^On&y zvTIEr!7OlBKKg3gH3r>onuOd}Di0d#d$MNBl{*vjD$rT7H7nv#W3&5z>^QXk+4Clxb>rf#f z7LY{K1=ZKbt6dL=jHY|rx^OL{xEy<_nw;lwl+LK zydW`^cTMO?g3;%$q;r9vj$HTN`1qW_$mZhM^t$7X9y2G1 z&h%@bVS_tQyykD)&bxu+K-v*92P!k$#clG3 zJ>U30x5G4@JHFWq{zd)NVVsq|`9M4k8iso!;d^GX(qhchYG+K#_w>fTohKNGek zy_logX(!a5JB69uo82$USTLpfyBly z$}X%OjFec3S>=k)f|hKa^R?5OyR?l2pTz~apPG1|AgxM){|k6u@nnH0b=o6IoIoCz z=o2ifWlce_m2@sj)H~@=%8~^{Y%TC|BtKwcssxCVuMqqgRz2Nz@>dwyH;6 zY~+eH>-epVVJS~XET3gYkrtPuRNjjo#;I`)|u z5+&eYGv8@;yK=#NY*!Mq+XvzPa{DLbYfl|wFuecO_x$&9A5_QW-qJ45^}~{4sX5>s z)pg|d6FINdkMhg^HiFNal+D*LigEitBU#3l$qL#ZBnw0W1jO<`|NTFr2U}BPXMmmU z53=3-zsUAVUyy@ficW{MQy2FM_Qk#f;6dx!@*Dd(LR5kBFH1!5NPJ3R{7e1kHM?*G z@^3{sEdz%hEDP&+1OoWbdoebY#pFQ;wF)f(+y<|XiXfwZG}MEtdP$BpE%J+u&J))P67uI%%EjaJFuk}WpWnvr+fB6+fnUjcxS*IKs=fm><1clgeCQ0U z+qahIl3RK68Xv1XVZ?C9xhJ|6PsPpaI+F1kjK7Gti+stW5Y037erUQ{$u3>N*HO)r3WsqQS`cT3jph+i{&NoSiy45;qd=)^0>QScl*|o!}P&# z!0_a&=3MEzuXbWeBLz>HOPbCwRg)&#cgZu#*V8JKv)JoyYaNk(Osn#MaAhRx$nkkP z8mDRlMpGZ!36UY9e&v}(jrv2g+EEVn1eswfI=Hw2YfBYQ;%?GzS}0QHd|uuoYWhWR z(r%&}31*aC>@Gtp)=9ksQbM1)HBR6W2XQ8i8$Yu*xp&|s%_N*6_B_X!M@^^O{cv=| z)CC@A&RHn!s;UZZ`N&FNILMvV}4HQ%NQa?z!!BzOF&9i+1ggWMUyN^6Ia4cOES^1Tw( zkC)KO17m^%7qn5_6<FX6Q6-ptX}f%uGX4!oiu=@+7J$&T+8~#yeWWM^_Cbbf8B+M#|T==P0vZeukVmuRqDfK#iGaYaLA3Cx_0Z>Mb`XCPs26C$pS z@3YG8s$T3Mdm-V#?LFJCMq6@+`f^4wjO_!9Dqha7=3Xu^5sU=iK}5gpA@iH*(&^NM zWvixPe#-)GSn*A^^hQ>aSpsnOa5w9IZG{Y~OB<~70KI9|q^lG;R@UYUJGEh?cd(1% z%BvM-mM)N1m1%obRWg(Dwt>!z+AaaQkX3A(3{?=vD`<+`Uc&~#KCF~GE zF_kkg`JZClT&hUkbw`JS@L$zorC_Hs2EiVn@7y{EZDJ(AiO7+b={34ySMDI~-}u6w z*ug^f^=0E3K5CA_7zXwdqYkk`O$?6D@JT{SMK@4TQk7E)=x7)UdKI!jJm|n32J=O7 zZw4yDPGJn?&}3zMIkNgP$D0Qb^Wf4v)c>p>k}ce<`v7dZe2vUqGQ61JW3%DP1kx=b zLkTM|m;YW&3n>%w<%o25IJbfJX(}QET=ynRKvE0;*azIE97bXw*eJc+<%)U<6q1xw znW^^+xi0A&1b?IJmE5)^z21eUSJvGr{Z*~8$xzvoe~2Xx5a;j~{ptyt z_q+($PV5AbS+m_Din*tZFxez&FzJGggP9{WhPJj03_H%(fP&1eEN+1{ z@+d0>S9RUwQ;a_8WsMLj7)W5?a`eMp5Dzv57BhWBGWs=ewJ(pzURXyS0^^$8*&c$^ zd0lXIpMb&`r=Y+c6P9(~wA9HgXIXz28ckpCypquGa5M}{smmY3>J1~!rWERXM^f?p zX$f2iuI`S1gCRuQ)gW^R@;@0(Xtz{d#&N|>D6-de8@)y3`CQHXaTmMapL-(I@NqNv z7UA)C&mp>c@fK#R67=*~v<`p5FLdoH%Qco`Q&MbojJ}rAemlAy1TovF zS92i%#^^pC$NJzLKU`o6;iQF4f#{!0n?A5X_a{`wN`)uVPo(et3f~IFNny{A&P|I@ z5?$hRGnC)Xp);ugbn;nZ%g)JS0)R#vqw3z-EeALEn6MRbfP@lN9Yd*+u8GNsPOuOX zm2|8Gs;g`w5fYqs@3V?qc(MNSA^2`=vVxdflpI2~hw>5Rwn?UX#_EdIq}PiM^Bn_8 zMhX@UVqNA;vAk`+X|}ymZJVdzqF@(EIXCoyxT#hy+WD)8Ye0!CKxoYqTo>fy847Nn zk?8R5#y#_BPZ3J}pEoGeOhqTiHGGl3rk<((A#yzBt|;AFcq(dj$8xC`o8I;w#85`AK&U=Ygbu%};*DG{sS-fUA^jQeL&y!cM6-BolOYT_VZb%h-G-C;I>3#)b>l{wz9&cIh z-qTZjUW9@R>pkHLG3l?Xjtz0^wjoM|5@W;uJt1gtb+kwe{5_({-(Lk83c>*5cZ%A0jqRSSRQRp-bJZH;3iX`f|({0G{3Zfp^x6kDHzZ*vAa zIzqkCC=7?k5-3DlO2EfzBO`b zBX17z?M@tQbW)Hf^$e6meC~ep#4w^M8pSaVYP2WL-Fwx+e$=#m`xb7^Saa#t?*H*q zgrJ;8u+K)2{QfUQBJd()R3q3=oH#rXkl_Cue*HfntZ!!OY;2+LX6I=2(`9SvRHUx? z!!jcJEZ3w?Cj2e8T)PrB><6D)h@8wXgP{OMhYAQt7Hif@yNg%RA$j!O-X)4tqjOuP zFCJ}+u^U38YE_V7MIN%p0M^mT%9f*}>-ys4eC0@k+dVudZOxMT&aGg7vt-JUHP@$~ zo}!qqkZ$)nr>F4Ek?YdQmgS#+yq0Xl5mglRs84sAP|Uke zdp?nvEC<6@a_~=ZpG+M~g=P2?xWTrGv0{$12^47e9Bw$=eyp8A8CbcP{ZGHG8uEKP zM(LE5L$0eh&zZzEq18YmC22XBt>&VE5H{8zrGI<{f~?}nzE{Oe_Gm=i?p8|<7{AF! zh5FhCT!4zHYH$4JT%BGV3ht3yvlelv9o(Tb@pPUFgZZl49%7{q4O%VSI=123?e^cO zoBNU$oUNFuLqM=sUa}48U)M_*2E7F2T^37DkZ*vLe;bL4(K_R5t3?;q80%{Ys!)BN z3LQh)7Zch7lSRK!2ulqoJV^K!>R9kfx#=jz4RZajG^jp_kR!Tn;B!M$BYui$PM)XG zcJ^;@>Ze5iTDrXD8as*fg!63#$}D^-gezu#RUWpgj#6-l`AeC;@;ru)rNSIAbgX^+ zaqQdCR)Xf%tE^@gF+4Voxo1O;x7eBR4sqs)e{r4eT8s5*%tR|}@QCvmComKq2D;JN zFl7b!X%Z)H-XzX}92l%ZXQ*PKgY2~?7eU)OOwSo)7qx_i2=dt-bS@Fl;NVJuJZ#Qy zPOI2Xc3RyG`|UQ=hZPHOm(0~$U7U=D2t%n=$$}%8GL++gMDw?J`_g*2hjEF!(MaD) z?KWUdS@Na&@+_gc7<$#Zws{_A5B!U;aO3@yV?);C{qqGlP{Xt&knuJ#tL?NTMQI6} zi>ow$=hAVZD2vN;GiCVsgve#!`e$)f3=WbtM-ZHdaDr;8Uz|dbld+JF&ZBoJNnz_XgXa8i`x$I9(2=m<3U0P#7RIGtA z8)9aDb^tdKvG9neAE!ccS~(a<2rM4aR9ded_N1;yf9PxQU33S@9TDvZJ}_w!$u^v3 z1)@bf%u|sWDk>9|7L{fU#v9di`07d@LQqAa?5!sTmDzqiBExa>F5>{OZDe(IR5jAT zDd^i!s$+FY2sNIIl~Ut?=i zU72L>>HqUY%G2dC^DC=Q>#LFTfgV_Tqu(0p@ZabYqwBx`G_9#LBM`|uD36%hD?*IYRQ5VEvsIG3Qq8n)o$gX~=1ul=HF*k? zP>=u6+Km^=!D#%JFHZZBx&&D|y1QpAjX$!aqalP2(S*7!x(^l%1GwMp)6wSpLrEtQ z@?2C^B-I{WI=vDPjj7mY`@L?6M~~_45s0OiUafztts7-e6=|r4Me8q4m+Bl}H$T>o z$d}vjy}OW}nQDd0rknc3V-HOxa480!72#rf%GwXq)7%;9mQ9UPq3ssSs8Mrb!~o{1 z8#D@MX-4Z)ld;77i1aLzRU8#c5b8BR&wwohEf(uF%$*!ssx9k&k9p=UkO3*$8XS|v zEdiwjF@h*?$~q0X)*#3G_H#RJdHiishUg(UoC!(qCqih!67S4zvEU}loR?4a2kXw60W#G#<8{$d$) z$-4laNUe3~6O^Xp$Cy@qy7g#w0J=M_h%a=ikb_c8p;02Lglme?bI9nWDU!07njrZD zl{DpN^)hzzAOEPBBHw{wv<0YdC~T2xr7!RcJI9cswe zfrIchev8lwfC2)xP!6B~%|EpPj;MIFCaJ+or6DAJh$SR}$>TINxzQ>Z(va~FEgrqV2Us}qg-L)lY>c(5?NPHyr@H5o z`Z zEH2gjwMPiJ_}c^(9ZC^KG~k@Q^qY{uTc8QvtFijeJ}IR#Zg%2^8#yG9gf2SPRPVYU z#L5Al-`E=;atToU3oFs@fp4Q3NC!~izf2u)q1}57XT}7iV8qs!d+(AR+8kIGF@$B% zU!eG#wX$b6fWA_aVCSMwOwCdrNeTFJ3 z%s($@Xo9y#7YCsY73VKUOnl#`dv|9txRDHg#znXkElf3mNIO?=Df9CU=jW;1!ZEkw zN2{xcF)urdI~QkXcT`=RzMihH<8XX$TD)BU!Af;x+>gU}y-XS~q?$sXtZC$3R?I#TlyCPpKv#Ipexgoq-9}9rkDYoIZ{a5`+S@8)*@8)pupDwT>Ng9DNF{ zk@{o>zSR)ra`Z}sU`B(H$(u*s+$HRLFh-IM>E#j>G1$3(I1kgeq$vK_AZfC16&7c< z7L$cL6|RXU=DPeOUd1TLD$~DD-jtQ)l_Kr_tFJMvI)3u?@Yx=pH_%_8)rb#`qFJeT z+F5)2OU-mlZh)9NzTJCDe0yL?=*8druoh$Ih9he~P3gKn&8N$97h=i6cO?tLzJDP_U3-ebNx)uG5^=ESjmGX`T(U7f*#DQ!OeN1%p08G>>k(OzDzuTU~ z2rMbM>13}cn)xZo*obVK>za{8rl}|y(g=Z|q*RU9)dG~3BV2L%xQrxj9h<8<^TV zFurro5-1iT0yRg&EGp?fdp1b-5baYsD|YL;YO!dXENnCpw4-a;vaqsPO_CX)^Y9QG zDbM!XKbl-(ty$CMn@sy91k}@=K+7-nYNWX?%SRvn;#fb}Nkt63I`e+msfM>+HV8ZwZbZAM2e5*R{l&bKB6yg-t^y3{0pnkKhh07_dB< zE1S0D32TIyu9%egJWUV`l;0p!AXeD`B#B}gHp??(>wvZrLbr=IB*mb#pB3HAnasN;5|o%?DQA#OVgV{t#~0GbTzaf=ISbaYP*fa+TOC1bJJ5? zT>X4k-0VoIR(tsFi3WBF^@Zn4_ut3LsV@*n#20;ChDc)RZ=Qk3Hfk!3+yl55RsNem z%9M;+X}kxuS>}>25BmXMVRb8U)#ND?cNV5*hKs4Tl7)S9B$g@2p}Pn;2oeq;2BdDl z4xgt+jl7_qr6233CZ2}gNkge1V< z!3cMGlr5OR2#?T=EF8I7@_(ZCr@{$Nn`ATPIW(3dZ>+ut_V>EO_KT8*e9f8W{Cf-P3ES0I0?y^q}TkLEfd;x5Red z%7W9g{cHrD9D?#X2X+6pz5^sB#+8P)BBKz%~V z8{ir?tUbNzXr6q+vnZD0uv(oK z?Pm?|vBQ)+quffkUVcJ#6}IV-D1qiTLO3A&=CPMw;(s_5Va)i=-=dO=J`mu+_p#bo zw??=L0R(PIi^%_ILke<%fS|E-JB)~*pQSqyD9KFC|6)z4I2U_VM;$RJbgY(H8pckT zU&01TGS!d`1dZ60k85y#3o^(J5F~yXFR;_|eLv>c9Gku?GCbhK-(gX3%4F?iU2<)V zJ2q@y{tOh~dz?wc99FN(T|F$rB=P5*8*FA?0AWr8@vQ+?k!C{@h%&Meki{}QiU(Pk ztxt@^hi6PzM01b4xIlM-gaWr=_=JgIg-6k`=^UK_d5NLTfKM%hy z^{N&=Yj>BQaUxM~7Y9T=uo(qfdPH6t{(CV$BY6`EVoDk4niyKnJv11hDIo~sd|a?m8y!kpCyEH%+0YUH``x=aq&hXM;?)JZW_g5#i7^Z z^KqD*j29jZ#X|wN~mC%rn#tI z?L>7ZJSo=+2n^SJ?=v+a_tSt7CgUoPtz?Q|d#0}{{GHVMH<({i>QJ)W!fBw6HdRr5 z5;#b?>=&`Bf4=TFW?deqX5M8#zA=+}lOXM*-NhP3a8~?62CM%Rcne7q^lWBB(xSen z?2^p#?+4FlWXD-N{I$<(~65lU>B{wyRq!)P()t;>oZqGU zlREw#qoZk6QzH4FgLvfLuvi@{OAh%c@pN&xQ{EIMD;k2RKvNNIze4?t4O5oe;Apo7 zIq<;`gH@TQ%0AcQQ4+05xs@`rBKFbC|*TPRS zIPMGqD~J=oEFSDqP~N(}m(RJ&eH30jcAM3|2ZOpK*-tI*jgi%pE8J6A-;ayQ8E0+i z?4NhF#qd6oBfx-UFIRYiYxa!HdKw13;2a9^CtvAT+tG)YwD zRx&y?d>QW8K|Kzsa?98)q~&5aHQ64y>@ z*a{xw$3+=gl9WeSaE9t_anvv5O+4aoC*GzLx6vYSlm3_z3#`-yxV-<_6~3_6aEqhZ zu1H%dpOQ-Mgb$b6NWF~R&O0I_f3o}?_i>R(kB~u_*lGqj$=Y?XJ`qucjXP4N$G#WM+_?34q{^8!x zvDC;>nAh0V%*gEk;c)*s>i?u8aUpxoD_<-PqQE!zDdQ^k4tK2F+1l!|x<##+8W;Ie z+aVI`U#R6L=j#`oBtba9^;K!g+c&xtE6(PozEUAB$_% zZAXL2Qw|cM$_O8V{z((Mm_qRsFYiDudIF+D?(WlxKR zhI`FOUxaz6?^%#Q6MF3XLUF9bVzY5(#7*wO@s4cbDwV5dwe)x&2RjkCyA@7}Ke)Fz zSDN=D61|W7kec_lBCZkQyW2Sn6W#t}_XO@Mql*j{KZ;?GRm~w~fK4UH2T2=evG42p zQ%D#Ry8E{tU&`H2$CeyS2!@|#MOU0puX?dBPhwN<)x%Uwl5fzeP5>t*dF2GQcI)E! zwnt@`ynO$MYRvqx+ZM`s2wwp@;?RV{nT#x66QFqV8fKFvQNN_b*7ft`r?kurLSk-ipKv$=-KS#{M|s|6CU7;x-dg23YBCjU+8~Frhb$4BCt`rPl1YVWt_XLnbapiJ!R;H8}Mj zy+>i1<+u=0#&xl~t>oMyJMM#X&kFmn=}CL8M#5D*S{dbJ%nq;8C68BpG9j_&PuXQL z;;tDqasRDw(y92Ey4bpDJ^$xRdH)yACMB)LP%-VK|l_x1tPkXQZ+Rm_s zw=NqvNb}QCFCi(4C6Y0kX@kGS@ukr;qpenVr6%Q9wN066vsrbZ!P}m|dPZHu>ZyEg zlfyC`!K5$?+xVGHuuTyj>CDbZUJ0K{PKL9<6v)XGW{=I8r;U1|64 z>0y)XS6dFL857QWcw|m_M>sbLf>92K5i39|S}SlqrX+C?YRGD7pL8Y-JeWF!A*8CZ zmrMx6S9I!XQl+%I5m*vvE)fRHfwByh5?W5O;_=t??79rg$(3U%(Xwiy9XdWNO6M5=uteH!uTzRLP57iNnhpJDmFMV zOzilA0SJbZSo&Yc>LGLt8Wf9Wu^18m_8I|f=U7%is5{@$^CkF}2 zq@0s9d`yACI(z$m+9gPrpCx0#@ zW%4M}B3H_9(@(C#OE?kw?;0M_(K4gbv@gdjGH~18xDwIG`83D5=NS3Yw<=Xn1ldJz zJkQK9;z-M9(MBG|t{(JCi+#I86!2+g!CJyX$6d3ot0ubW@+OB;Tjxfd(=JX0>8OV1 z3RQZmkm5Z^THzC^F|XtlExI0Eue8cr4W*2$ zFE}x1dRViUOw4q!L3TvT)Ma94k$hOcO-Wx`a#BZfM|t^xt|o1J2WwJeI@o)for3zrWPm^!#K1HENr(dF)a% zq!h!9h3!h*jXJf41y`c4VvZ}cM>6BWb z)Tz6t7l%_xKnYAR^9q)Bc(SL7b;CJVR{^%1CbvLa$CbR;2YEjKKQ=*Aiks%dzZ^!k zU$3CwEav~#Cg^{!Zs{FO99&GCoPU=VF7f}1!sujepuiC&z?}+) z8s@HvYORrC?FE&=%|J&G7r1$`QWRL@g<*zO7>2Ngu{9!N2nIu9$f=@B;#dM0$GZ%O z?Jk~H`if+GV_CW=7m3>O*J}s;Po;fb^o;MEp~gnd!*0q1)(Mvyn`5352-*s`I3! zaC1qdDQ8OJcxn|k6AE{61<52Qaz$}lN4JmLJEak-R5+6duqhV3)`cB>Ot&@x6kld=CYFGB(y5qMMKSGN0th+MnB3*J$O#rKQHbbM7GFN zf$9rk=?^@=wO7{9VuRlf(uA-vQ!O&$^#t_H$LKj@>)++JiKl~$$9?N%>+ZBX1kW|m zIaI2=U}K<(CU$@_`gWED`%6AP4<{gWqNvrV@#NC$UCQzy3u+TUT6%VNw)bL|h@a;| zrVe&F35P7PU^Z(OGF>v>mW9m(r^chqHw7vM8lUgNt?KayLu)AE4;eK}im$;ka~!29 z!4PVj1oardrKSpjpLuFTg8ekx-mSKMN{JC~!LjMP>BcuuzXq*&PD@FSINMedy9?ha zZorqFbiY8>oBU4?`wWjES~_aIbadLbAhlhhs!4_xl#rZ(LI6+%9_z@%_@C8O9{0ue zC&RW^e-t)ooR~*ITVq>d3cVVYAmmst(65&CPe~lR7scY;?aa(Wt!5a>8 zexc8-Tbn@tzS7+40IZD}qu@&Q-NLhmA+BHF=nLZ+L94W*1NT{lF%@CMglKIqM-a^q zDrw9ND_!d%0t0P9Mk@XkuOxeLzf`XYNh>lmQ?ELN;-K_fg354PnRnP#bbuI@38T~I zA$Io#XLmbqb-9W8x0RrE`>BiF(E_G{P{XLp4yMm{`PAfh;wIF%HS3P;Vj7FP9&p?z zG$U?uCVdZJ?efnq&(zag*DA=<9a?-^-PFgKUnOt(tF3rXhi@>hRzlvoC*l@KL-nq7 zg>D1hnQ_gM14}R*K_5s)F9fV(&;s3&G$~*`cpY*5JWP`NWrFSSfscWEKkQBCVcU+K zbl#@xv#OYU7s^5KKYQWCh;6^B8E-BmbPM`41l*cFI`ifrAOk|io3hM~=M0WQwR|P8 z05v#`TDF7Sr%5OI35dEyS79J$#z;1gE%kG#i#he(L(C!5Mf7(Z6?yU2n#)30Q^3R3 zOz=`>T8mG}cEVUjmMPZe#%p0Xw?t;u@hvM095XIPGw2{IgR5~!lK-d_N(jPVPi0F+ zWD6?1!ILQQSUGB*g2(C1@Hc!3yl^Xs5hMCFG?W2YAdEO=Si}jM!LaM!+$Ew%Bv>LxJQ)wf_=cL-p@<-<) zYQhbmcmueCW%rfZ>1`+Q4mCYeL6;Y)*#0IG?7)Pyr;47LELda4Uc?&R- z+BOl87o1x+I0;Gl@ggo**D}6IC*35;%SkdjReH->6PVB0}>9_+$Jw zwuA!u=w9cL3ZJE@!+-)&f!h;2g)KZx!v3R>a*fbk)ia_uHXiPcXiYO=;3%T8rk5d0 zrlJw!!?YNj*n4Q%F^_YRcX$9=kb@HfQmCH&5IA)}^{nAal8MhH!@>bRiNEhCMdu3R zNYf#zl`M7G<*3H?uE{e%F!=x`kYzdM`lr9OIuu2zqtGvA)@-)q==>_9R#g3b+*(YR zhUWwQ$eRuN+?#_W3KUaEr^j=fd)OFn_o!;uAWfv1p2G$ED3Dn8xQ_3kbLexjsGMy| zHCdqxP}QUuLG9?Ou)cAIko=_#I8sGJKHQjF=iayvU#SCL(&GOw|T4LTe zppNdNuyaJ}|I3k7Tt{P`)A(r|o0bgX472y}pI~s|wND#N=UKTV6cFQpO*k>P3tN^Z zA=dA=et}h9Wyg1x#Xr5Eho!j=*!cd z0>N`Q<o#H2e(hbJe%pEm;+NZIH}I=G>iQ2k03|hCdg#}@@puUC>f0pa^!sw}-6ek}<2JH_n@>)DeqsC?>ODQx^YO9do?%XZbj;`g zN(Gr@l46Q4rWw=Y-|A`>R1_9UTELT+G#9f+cB)Y3)$3qKg~akY$GgIrD6z$C>8hLS zTg>-8zntdHY{nFH%A*c^{ zSE#SjAi^$X|K@c0?ByLt+3pXOK4sOCL7$&(bOg#|@%?nXz^lx}M|=9pAvbkuXnR%S z?(<<%#fZmh`FqBt!N3?&AGJ(;pyd*aUj}-zmdt4!+4yJH9HnL=w>BaVVgN zBJS3u5N?G2BlDA5aCXUzQ;#QU;Wpvnxd`o4 zKFsdT6^^FEXr~2Whz%d`(=^ zjTFR5^ypK9LhNn&*f>cxV_rx}U1-yc9DEIV~z`e8gVp8n78w`hEuV>0@ z?tKN-yr*`2&$PmLy^Oy-wF-)pB@?{Y<^s$jg2db)(3RSQB1GEbT;%SF`@jnfo$1(! zc&|og@WB>|?jmP}30JH?0`{@Plxz87SsD_aqYuxt=(Z0Is$q`!nq=KpQJrP#g^yb> zJt@wbX7Nosf0DL=V*a83XWyOdqKu&Ni*lyH004el@BbsxF?V*hXZo)Ktz~5$t4#(J zpViv7N4!LV(kfd$w6i>CZ0uw*8V_nwiWiqE*@S44Qb?m8pG1C3c9+!~hY|fMubFmy zE=AKPG>l0pH7sM8p_aK3Ks71un_$({cpCi+e-x_@(NU!v_o(gsdOQgTBW#W4F@nAiHe?Wk?Ug|ZG|!llsPboNjmoocj6>gwdQ$8uBI zWZjCOS=T~TBq7BqeS$-Gpj$rGbd8h`T5rS=E(u2&-@q|~xJ@(x^)&~|1*r7VDxF?) z#6ya>LP^vY8U8}NNX^lh#@B)4!?SF$BrZL77<9CKt>twyqb5xL;0gK*i z+-m9?&z%n;k25_3EREU$4>f!fr1zIQq zu(NHFp!R6H^XL9t@9g$|jIO@ocWuJ^!kyy(^Q!xy-Tk>f=-)LU4LW`+3OF4dOv3L7 zpV`Ij^78Zl;rxo*9d}zF4$Gaz{O4Xu&!^mraJz%YkQovIrBr`l(MA@4_{{e&qi$FZ zn$__0$1sXVp4NDSeQqMMeaRdZdsdt*l1o6o3e$ zD$_V3#c*V%>IPw@w4azE6r(4%!Fzn>4-Pub>;mp&uz)q@p@U4L$3#JMINfwd6P9oX zYLpY$iwHy#jZ~C+ona>`6A-OGr}l#cbU9GmyH$0o<-;AJuU>7Sb`4%db@-BSdvuS_ z)0t%5O4gHZi~QNEg;T^1;3L92jv45mOaSOWU9p(}Gy;gSatvXfvhwS@U%#H7bz*%m zBxX}8vsIv0Q7s*4%8{{-L}ZR6^#JwM_N(3Me2*46Wmy#Y#jnf~0+q+{t{i{py}WhU zd8yzs7hQtu)PCr_Y9z))g=_mt5yaC^Q!<*Xix`x>4<9tFCX0U$}PMwpx!Bf{>KX+H}_l#cOgX8JA{;V-0G_p+b zm=py2jR54k^ImYb0e*;SOn_!8wsSzde$oQ>;SSD^+%40n<23rIR6^?oG8S-h&~;FC zA(tYxe{Nw1E?t1Qw;#q5Y}(h>DQ7%5xxLxQs=#mY@%JDQ?yk?Io4!o}U)oCqAn63d zn-~)flO2oI-4n&rh9XxIfh+nIxd-*nqoi88_wy+3IM2`}kKCTak5_YE&D4iZ(4MZ~5K?+*{%29{w?2J{t zaE0iLF+e8sC|%c!!-6h=WWyTpq}s)~hx*_*EwB?<{zurv#44|wEF*y>ZdMRANmU@nI|Rys{* z#7Q|H0sZXLJ(kF+cF>7+8G<{k>)Ol8Y2M5uiZ55BP!2ml05`hkY@0;h(gSKq=K@&1# z!EX!_*_NU#kD+d#0K=a7?D``KLXYdyRR+mi1$M6-5*`qYA5zpb&;G7d)<-FChEyQB znV!XH)SZ<2pxK_R&k8z}Q)25RdY0KWn&97{Ip&w$FfM2U3I&M- z?}A4KbDdP4aSr!UNOmy+gYp3s>|gZj;LCx%ji#^IizZ}&ud?yhXqEKLyoeFq>Zxb^M{af{h9T=Zku{^fkF;%HbjhTFw9~13 zSZCT+cRHsPb{5+ujqxdzv^%%g5c<#V0WG{0DN0~lzv?}`=VX{Jbk)?|AnmFZexDdF z?V;wR57oWM*25U`2BJa1-QpSwy}$-igRHvW`QIPi0H3b(ba1MpfGWElkB53PnIfsJ z;BmpFs8aqVkaU+o+7D>Eg1n{;2zbL7@%Kjdi{OSElEN;A@h=DoG=za$rq&GrnOa{z zBrp_s88E>1MZWdQW+2wa9VjmrOp-jp-UG=A^zu3Y1Efz`Gh_2cjRFq>H=z9;u)9xX z!m<(bYl)k^p_}^kEOfiIb-!47dHCGFIO|MDQ*WsHf|)cq`r$1U2ODcP7TmPm0^`(6 zD>2^}a(tynpIZdLN@&}5a^Y6mZ~X_3pF_k2Q&lXQ%>XxP^Ww=Ia!z`u&SjmA}pnQj8WQ&u<=dp zSkhYo7^p8fpZCc((J@&k5ZDp}7uW`v^ai#uT>Lc=29~`Ujmibx>%_^t<**hq!g=|n zs4INbX#4%-P^krWK5Wheu0P`({=^DrV{BcRLAHNwEpK2Ctrj(x-^wwNT8dlX{KM)d zd?{Ga&kWMBWLbw}Yw)RrLrua~(7fsByw;i{Q3SShiwcJU6Bn9p=xTn_qsp`G(DR+c z#AXe73i-OOWBW;<`VhC@cjEYCb5wI-2`7*Ff;UbMPpW|`zz*IQXBHIC3qF9y;fiR( zwHv_?s1;EAA?4XU*7GabaoyP7AA>F4VCxUvXmt^8#KN+)Zh3g=NV^0CQ8bo{Rae

r7Ya@jiaU_Ky?r*B4McCEx@bmt3o>U4PYGo^vELuNo%p(PC z(|cafNd$9N15;t}Gv|BD7?8nd?I8=(=FS+XBoN>Hb9-gmnRrYcH#WYE?_=V*Ykm~M6 z0jHEu{p4xAtD15Wv(^*LZ`L$`nA5j2kQ1skz*5$Ekp}X^jZUmBNLwb2Y(L|F!C(X@ zjpf@(3D4|d*^}AqqEY|4av|sBzF~pRE|~B^Sqwy0vTFCY@5wAzAstNCN9h_K{^#{C zj&LN)DI+Cw*-G$@sJcpde)RV)5DC*=-5*es7(;+JC3%Cg=00YxCAG*rpAEr?+Hi1r zJnPyNTk5`EZ^&RGXp|AgMZ0F3nLO6p5@zU5%hU7%7mjnHtw3JqS;_hM&{=UEt)OU2 z;)j832(XuYAF2bK63pqs*bZP7aK%&e^VhhTSgIvNwXqqd3W30`KQ?Xv*lkrEBM6wh z61q&yD2}~+FauT&YEKQximSzW7bF^$+Z*`r6Sy02you{P9=h)CKaROKdY(gyRh39y zk($jTV!Sdn^K9`jy0=f_)y4Dvo#uaIt2XJf4{~!<>EE|cI_ao4!ncJFS-|1B?2Wxw zn_60ROYa2E!r~%nsVBOgpoyjINY!<;&J8U$)Ye~zZgh0V79u!aJs3+kFkjHOz}oM@ zBrY?>U2NqOEp_6`4fQ{7YE85?sHdu!53jh;Cy8X;+$~td*^BSla=Rt0HN6#1(XarH zi_ia=dbHS`iQ#LP&-7JisiKNDTgY=*njW+IBfDrJ&NijVLi%dW=uYwHdx{ru6)4v|c7q-D(w)W}d`k+p<6uoWZ6P zM0Z#^J-WYC!Cr2;8L>!c-NU#JWNeBJ_b`4pF&$8!>}O{JSFqSA^&6MIT4pKAbq)0j zhFg8;ilQID5s;0)ki^6E>ITMBG%P&g&7LbIck1__Kr_HpiuL{1u4d$S0ZH`V4ngc4 z?F>zR_q!>ovj49txBF5J;U=GL&oclA);WL-wxyrWHHcs{$^fE?r6GK*NLtY~#`WiO zCfXw6!#?W*DGY~irptpldm!_##A3lqa|jEnWh?s%bb0gr0(GHIVlbvf5czQOdY3*`qmOA#>N2*b00@#eM^$ z^qV{!=m2%KccvV!@~}+Tr_Ps+b6X~#rY-~3&hA^+8#H=JV~)yEzv2u^SR5O!kYSa|-4n z(CBMLCmQleo)dnVnAfJNZuEKGnXn~WN=fYN2v7+9}k>6+aXa7;9W=D@C? zB0O`VjiY<5j;C&dNDAvwJd_DI#~baLD-F+y%OeFv8(Xq&5?(XqOLoQ)p=rEeFyO3! z+M@fX9G$?$Cc5c8=tbWq#&eKIy&PvpBQT~0#<5E@`x6XUIFNMv4iRcj4%d@tln-ug zs~jjQ5Z5c zWFzAMk0h;#6y>?i%Og0UdS{EFe@n384{|%i_P))$Uv(Lb&j-vIPHd%x*S3zMwfv@F zjRa>AKi4M*krWERV4GAO^w22AwT=`HQR4uvE2spW5PGlifA$HI*<8t~|8Td*6ghN* zx<+8OgsOU6ui1;4mxku@FVY4ijUQ#;EfuU_s-b?D)S!PH_q3=(r#lr^E((1C?zm(U zs-}cJHhNo>;GiA!+;GCGJis2i>}CB?0XMWAn-}s}Yd@#KVo;PjZVos{5Arh9uy=N@ zgmBuhBF0=&bj!n<^}Av6ukhVJh^PhzSWN>mW=a(mP{#!gq z{x5~Y#o5C8zYb4rlKO227+^wgeImnk*vbzY9^s-HVPOSD*A2+2n{L7-vZf>ry1p0K zEGE_E?_as=AGy1YY9rTj%to0@x9Vh4GPUZ_71yMvSjv;e5+W3-8$#ECTdUa8nJd@u z)&U_){|HtX1BlvK2?69zyQ@%M!YQRhbYxqUR6sR?g^(EN`^P6OU^(T=zUdU!6SDf~ zk=?bVchj^uV3RbSE)OKJn3D1n;l!Uxl<@bPtKo?+L&0V!n<@`2ke+Rl-32l>^iKE; zZLw>ST1m8IZJYLJ6gy0&Qj+9m8Q04#s)%nH)=)+9w?wrwN}xgg@gcN8N;${^rxIVHyr@0IU%Z{*OpyDpzKI+#Sh(uD^)@r*HqVHG` zd?Pq7nI3O~_4u9=?QPT$&L49bd~}DHC7}^R1V~$m`8Te`iuuWOo|z3Z1LAmXo_CER zw5J7^Z^c4m7Xv%-vjX z2t(%^GwFo$3+O-Z*JlzZX!Lh7u8sJc_4VJ~?|%#+i`BL4HrY^oUuy}n!^Q$Cf8%C? z{NW^&+*mir#13IFA_YoFCr*T-fF##hTfSfa4o19 zQKyy!+fkLnO#7vrklxF-COdVAfSNtQ& zKGdFM9BBEM#*!37uP0K=#9?<5G+}agf41#3uHhfTUdS?fYeFMV9|!Rx>zneD$)O$@ zHQbGcIj+ZnCH$$eaK`mCR!euZ96;06@02Kx%7^Rw1)!D*dwh-s%-y)pvq4B{>p4%3yTcwFmsDY*1|CUDifkaKG< zQ5Gew5|*;@_8F2d*pvQCHvw)xIL}(x&3J7logD0j60H+s;WuUb#yDDGrs1-4N2&(< zK(EMt2Ly2go8;oV!?l_Z9LbM%fGYk8v`(E#O%s~$9JvSb_7s3|>`w?Hou$D1AR6xY z#;0fUb3Dnsa5MNo_x-xg;nPzPmQA8hoCRG78`7Jbc@THIU2l6E!3Mu3 zIw0Y02Xr@sRYMLulc(4$7nUzB9L@$X$@u#$lv@37hch4(DUSheYO|w!gXvT#ijkJQ zKZHlI$LEm`O?lXKFY^>jY!It;c5FNxm`~AZAtZsA*D5RF-2$PvD=;D`Vx37B5qYiZ z(!O=iV)Zf=+HpEA7CQj-#VnU=R$0XPsCo`GuHw%n)#J)nXS!Z^7BGZm&Y9Xc5GN6P zI9OuWp9~}M9ZY8P@u#G)2pb0e0_Y>8o1a>QqMX?m_s$5YgOB_QhkB<*L}!VRff-Gs z`Y|9+#_d?KIB(bI1ho5Gi0^FZKnJ);aX$8kb+FVrp8P*d?fE-11v2i1MP3pyCL?*#eeb#zFfN)C@Qhpe-|G$$aR;IkN|p1oAPC)%lfq@3CPlxp>p@dT8R~EOfrdlQ#5HXK zC&qG>)>X2U%AMk97EZAre55pG84(9)s@-p|dRU+C% zR@$260q{Ba?8Ei<+jF_VO{njEty{TGHUQPCLP^)A*7_X`3uAdF3n;YIR@|2=%<erhxqs?!@<~>DU8Mb0r7BQ>@I76x@$I z++kc5B_nzywr&T2f&DyuM2t&GWYvY@zJ6Oe?np-*ZT2qXY0yzv*KkmVON3ZkmJwyH z_Ac#!+-D@qi<5<2q%1QPXa|qygJH;WlkNrk#=$zHa@92L%S@f`x5dh|+8-nNtE7ty zk@i;E{@3Tz!hfMNoJ6#6mCqz!Q3baWpsj&B5%|Ww6eGADV8Q}x0`65Wuy$dR4?vMy zyZ`wWw$)Y19Q?LA-oNHXg#X=F_zRKTJ$@mQkJ6;=CIdp(B{kYaK3m=yFiabIzfB-o zYyw4C4#bMC28glZabZn>uXkEyScZ5Zbjb15&D2#x{RxN=OFwv&kU!V+h-bVeHhnkK zhRHg{W18-{Q7S8AF-%KV-)sx90yEIW$EYoFMW^iZweP1(3ZRd$R6D!oA)o4BMYol& zc4aa4NGLOK>%B-sG(S+2`G}QI-8TXB?ZC@tMp=Xq6>B&@11pw+%s3*!tM&&fn@7Ai z{~79O$B@ld_W@K6J3Zkv`%g??tVP&@2cFYM#BuKHycR&hjXA>tATrb=%B|&RxQeiA zSEc3PMlu|&5$0{CL(fWGO^?9S(c1{Qo(MgdEHYUsN5#MNIO&U+fWj>5sXQ{J+n9GjHQWa~p#8O=1M# zpr9dpH1vD0Is_qMq8QFe+l}IRIPez}QxC>_QCB#oM&x*cLURElyXK{gG0PDGg3$u5 zOB;elR~j3GTaVSab-KcM$H(}seo(yhd@9)$V)bUnS|u+-o+!1G2GK>8V>)7Ap- zk&%;TGBl}lLw@v959-cm`%HcT zbSnP;@E-j?G70`iFZ{n*($yNjl-)MOe>Hjm3-}beq+}V!Ot{l;Si`DxIgc8djSDXq z_X-G*8XO71u^`nH=u>dB1H9_>Q|GEQO{ILkkElD`B5?;fJx)3CYkpv zDw$U03tg*?w?$Nb$Ddta<*!;9d{3$rrsGccFS3+|?=LYD!l;mq6bnR@X=HbuX1bp} zZ#a>(*UEH$Qq1*97DH+E?zIKqB$LXfoI4YM)vW&jvNTrD;?cE~Av5+Y>M_F1 zWA{O1!M$kFfc5og_$ssq?d)YhFomGrXEC#+ULHx!?I*UwwEv&%wVw(+yb;5wkFzNJ-hFRhmG0b$=J~s zrRx}OUhhP0!4uSnwV_K_7uR>zaI=8|4)_Ng`a1(;)FQv#XFh7dua>cA=am0Jsx(ZC z#3mOf^&D{t?ShCxNr?y+6cC{ScAJ{fsQBF>e%_rNQzw!fXgeFzd9(>izQ0Pd2#(i; z#~sX$?Fe-}T~v3hyfLR6`5*Mbbu*0YK~WI#N7vSnr#+58yWj`y=IB<&Nc0EO2XqKB zG2MHtnskFN+;Ha_18{fy@ppgGrpwyZo~SKi=e0=QQ-U_`j4Q*#z1=cG|LXx`bxbI@ zB}8Sq7bkR-9R~=Ya_mRSU!|H@m(x!#sWClxR1Hpt?VDXkT0mI{6opz<1l*7IAV!dk zXGzUpn(9_450${ujd~KS6~8LBaw10N0iO+elju)H(oQ{CA-Dj1IQ!G*R72>N9;iIq zS6^1K3}t+^!lcd2u2)GEtKD+aXV46!A&uy0&q2K)Tj6Tqf+Y+$Ngx;ml^nteMrYj( zZbLw=Rd z_)70etQe?epcZgGJs55xxCX)~j06h7wP>BTKi3tYaXoXy|CF7$D zz9)bok@LVC;lbYLKmZT>AA~cZ1)qT6E14h8X#VXctFeW;KtZkYh=5Ci1JDIiV)geI zUP4?8&!OaEEUK+`HGs~k1|ftMaX2EovPEP<%>rUQOvG?A(Zeh9DQBQ%Z2J+L!OF9wicGwOHKBunIOW+}O7?5ULcOsMpau<7 zfeuaT6H@Tt$gxtJ=6)6}32NK+Akt$2;c0GrC_7J-`tAgU!LoQ!CFl5CBX1E}4k{jq z*ER5hTB7?`9@8Azc=?Kfn6MAZJU~jJa~dYKjW`QxrOaSk--M+>KSs>+w#kX2tn(jq zHvqg@$TU3Bu2;)KUFm^Fj?lBYD>qW5_~tF6bxC(wSF0f;!ZzqA5Fj9s$HL(4%^6z~ zDK!DIy7Yc1zPuh6R1+_iI$Uv@8EAi$9JQ&L)M$2^29DIpReIeIyT2>3G0qjl(!+g; z&_x1Y1Ai5B!Vyy|{sOgXXyvnw2Tj8JXGh)um0tlZGF+Mk2O$GAD- zuW73mEeB|EG+wW*F0{VUQdjSsVm0Bh?wxPCPPz8aqtyOMk5(d|Mf=$FC2$+s0>^_* zRTsjnT4LTTvRf?+GALFT3YKaNRco$2Ee)7byDtIS(?rXgWVs`;8OWXlBU?~(bR^`7 z;Y*GV{;TpvxcA!=hq-|`o74B>w)X~!rt4f?D_!@*OItWcp|-Tj8AQXOT|!)>zIK7} zpc0%8#Wh}PLj9~CP^(|P7rm0hHIO6S!+=-W8o#Gfkt#!IA{EmxG6T9fwiq|i z5;Ct0N&#utN|EM?<%DD_ENnQ&FZ~1zdPd}SWoCd)wWyM-{f%(xQ=6HrTs2$B%Qhp#o@J`E;I|Fvnr zjDp4iaJmD=WQ@M$JGbsWh59uF*iDd-^~M##aI$Dhum)zCb2lpX7g!48+h)Ji2w~)- z?cM$+(;JmU^%(ZN#Hb}o-NGL5(xexeDzydbWV!k9ON&w$6Wq9`H^geF4A%|D%`1sS zh(SVtxQsg1$q8=smvxs}*9#DC%j@4%nc1VzGUiquK&%o@l5?Ndo|#ec2`Pn%$YzxJrR$g&qCcTQBg7lk*%w8U0oah4E?2GYN(%>q#zB@4MEgv@ zv7eEZ%~83UpJ~8lQ7#F#4-Q!C`%xL)Pc}@u0=an8&}V)&JRu^wrMv*JSl6*+)vqSU z1X9HG;nxh{PQ!HAG=#%VP|;(Dq7#lVS2Cd^ApSIK-lq>y1mz`ixcuTFbWUf6PC)!v zQ>iyhhOnv`=N6>cxl+k?4554 zoFZVp;zOZKcT*&FG4(dW^AK&?TwSs_2<)&Qcz+dU6U^5l{BjulFd2b1R|$-MdL&tj z9=eFZZ_@m92tDl-(Bpw!_QZGZw!6DtrG`72UHeWJC(pwJ6Qz>I(H0jJP_P1i6L54N zyENFDA!J9fm({F6FgG~*NTbL31c&bhY_OM~9`e2eOo|>(4;p(i2SNngX-l@Tpuu(` zHU}gyYd8(0*GUWHzM*WofWbHjLS={DD3Jai!p^BX6JXJ{v2EM7ZQDl2{$ks<)3MEt z-LY-kc5-^Z-E$u9t{+jO#;mp06qH43;{I!c;FwcUA^X(X)x#BP0ROX(N7I}RB2-j( zgAXD8?`ASB#4cQd&(C}`x|a(UGM0FYPZCv!=M=r@Bt3e_pWqJ80=jfFaA3uflbn>&cF_(7bZv@&v<2O)R(lp&FhZ@@Ny!5_RRDpC>$ZQc3U97Dv#csUi`V3_iJ9 zFZM9d{LE-ABH_B+yKMsKE%w!TA==j$xX*kf-+Z9%NVd_qCmnUWG52#5jxzYy#Hr&-snx$}=_BKf@-Iyn-U zfVQesGv-1%jIO(kiEbE;MFETN&CZYQlO*E&@ijt7)ksGIHvFvOI zUT2pSS_l5nwxCPE90|zkd(XOSnOvJY9$3CvY*mP4d`VtyKg`r~!Src|?Eq|j$)I0R z!~>6YuxOW#gM8y8ia=x&+|*mEx|T7bBMp8UfZj#5R5N~{Y-%osp-x!|;=f)tU>>|- zJ7M%gA;4@8G0;;Q|9aBjFzcYwflb;TUSXu9SbDJU-kr1#jD#tOP75?{*Zk~Fej9n9 z3O3&tNOR_Cr-C=TP1eD@xtnnAT`1_bEQQbO$rRY=pT5mjf6gd0F} z25jUvr6|M(HO)rtSBhC^&ocGfCifp*T|L!V>Z))l{4UP7!gD#`oEVKS5q~4` zhSVnmg1&_;iD*bDIb3VyH(J4Ub3vX^IBFDv0U_pBJ~Tp8kigLd7F*&UancFj#upde zQ#tvVE`sKkOD92Iyp<*5)r>f%MXNuG0;e>Ti@~QMZb=!m6}Z9VW;Bx2iD~YqhR?u4G#4S` z%oRq@#V`oi5ZK#E<-sr$%>AmwbHEgXmTbZBp0CkQzx&Gkz3EvL%7TbALLEWU3``@j zX+%&?dX@`sTXH%T>O%%rtwDSM$?$GJNWg9$GR-y^5s&AMc!s}N&!eyst{1&q2d%MAPIWR*Xbd6TrlVGL2(d zAEVnU3W6WVI=0~xJO7eu&)X8wtH|mMQt(T&;~=oV z=d=Q8wP%>#3EB$BZ`_h)F&w;HVi|cpvhnMQBx7hQ zcrz=`M;}D4B7XV1^26sIE2@+c8V46vOR@U#!Tjms^5=~2%p=qr^F(ycFEW&QS^4Jp zMJ5kQlG{v}`zV2L=%BFnL;d3}BvVxXWF!Ud+SB{~H8>2iJ&#sUNyE0M5~;goRN~Io zH5%qZ{h49GS(B){SARoP1@w^|4%@4_cqCOq9ZzS^t(WTYb>ywu<$%xBRBJbAe*;bj0b7r=jbSvQ}JGww*@&K>P>xh!@`U2{8;4{fOPZr@1*qfbZw`KUJa`TYWL&p#ot-B7J@rB zPQw`PlQ`P!W|=EqgB0CqZJOE)o_NPHtgYqqEnQM8E3h6syU@}kH_HG;taH!7z<}Qe zjZ}vn+I`bz8RW^$~TRq7aV%6gPq;95vsc!K$ZEKjR)=q5tyPPO+gF@-w zS~PBhvZ(OmQ1fk2OoSH5rkblas>NmQT>XOP=sm{iM zP$3iFI*uKMNgS{+5@yjlvC;>{wpy>MwjV$DD<6G?;Mk^H_hpcjBMb0Rw=azdcopxW zhLw)rpt<2o9!;pou<>*nu|~RY%>yBb{rHoVT@7+i{{WEJ*#*YOQUi97IN99|=z-q- z%h72|tCPx9bbR(6g-AVLn%L<}YTv|%c_C983kHIApB5N-zfV|C567ulxCMH4C=sv- zBL26K0UBo(y;U04iC8?>-pmiNenZE8(H@El^hjBi1CWglL|$V|`kF+tmZ)7JY08mgdlY7u81HJvu{QI+{mLQ zJA_0BozT?>SaK4(Grqq)nmtd`9@m8T$4#1-Ah(>)p}iTPrJ7!8PC}Y{y7}0Q9+ld1K3)LsH)<~yF;A_XM)e7{jth)(d4sEGuajp|BVJCsh^6t!JUaoKfzTkh4s zr6{Tvy6BQQiI#j>zLJ47pSp3~2H9wDV}2M*H3bf-MmZ$tQ3Z4aKr}7W`;Y;9>>GFv zsJ`j8^%Ph~fxnQ@r-x<`c(s{pkv_|Jz0oGfWQV=GieBJdkcSu$?;J9)rQT!}(qa$I z3X$El!Vh1IvPnb(mbc4Ts5yfOEu14?$E=um1VSvDZ-QEs#93=%s$}8DVp$>yLWck6 zITfGcPRYwZLDe`8-B!V-eV}u%$g+T^7e*Nr_#=`sa5dAdPkO}48iNg*m{M;xizqBe zEfk4h(-6?a1mK3m_g88DP%+2>s?Gi=Z|S&uvNqZbrQ*o#1@^aBT<0SkE>{ zvN=dw26E4fti!INg^2X3(WtEvv%DrwV@5hoS%hu;z!B5IL>(wLnoZ+DoS6r(ghvr4 z3?C6+_0~6v5HjHH;rPz$l^D_5s%xN-8-gNOgxGvU{Ctt!G&w>QMK$vFz!?qN3yloL0wT z85!TPB2lMA#*jeDx#Gtv)0I#=77LMR(1OB=$6(S_-K^7fe+tVUMS+fSf3g;EFv}z_ zmThn_?)71fr*2#UvTKQvU7<@Qz~YgdpDphhe>u~d6*zaTH(<7a83#Y8y+BMmYJzZY z1_&*i`30kG2-ijriDtZqK3Pv!?og9Zp<=r}^<9kEngRkk2XOfV7V#B5bf+d>n0|lNrMwTUZ(* z5sdyeBuAxtaC~pwKaa&sb7fUo)_OLcxw%f*O1~$5bX7jaGa2Qp=`$||S5Fz&(h8++ z+xDT~a6oRa~NX{|N`^2~d(?cw_PxIaBI@oVKX#H07)GbH%klkvMQ;R6Zd zsY6EL4n3`IAELio;sOq*V_Z(=&VT%fRDjuDk)@qny@SY^X?VOyCE|()XY!s2Q zK;GyNpSt}36l>bQ-S6PB%qY&kAXKu}F>tO;4S{nh!;oS|+Ngt!;wyzcC+H9)|G*b9?l2a(cK&;-j02 z4&M5`b@bhUcNMlg~&g-&&bShDNCT7JwRr6I$e*Y zj_hM?DA&QxEQ`d=H4`C-3fO)F4uPrj#@@u0c{EzQ86^#QLP0UgdHdcjQ0k4nNXlTv z42K;X8m7M;r?PAka6NG)b$YcZ99vXv3u%VKSTOXLvciC?RQzUAue2!E{SE+#v63f! z6XEt`b{seknsbH}=unoyMCAFgJe}HN0C@(*FeUJ02wy<%K~FlCm0soyou_aoKSVTD z?u{B^pK{W{<-INhPdZ~*n)GBGyxUWoXM2co)6rZKk<5Y9m%`lY98j4&4?a4N;Sh{*# zc}2>lg5B|ot&8>!M)z%aR zq!0)FuGGje>_|L33Cs2)Dm?c>?0X8rXCYLuLH-s}sRDg}pN&41=atRe5J5{*UZCh# z(-IxE^LLai3V!qp%u!AZdvpdFclatZ^8v= zOkul>M!8`|ur2OLs#&mJX}^L#yIUnfgj~i+z)u32Xc!rjW4kOF!xQ{4I2#9I6oU&E zZE5^8i6Q+o*Pb&PI&~!la+xm(7|fa$2ja1*VVOWm17=OHWQ{O?B@W5_vbT9ZDaX>x zn1GTkw;G;T?9!R0Kf1PQOwvxRjBjzX4TO9+{u&49<;$ z^5M7$21-5ezEh407qM_Rh%J8}r1)aMKTdv0&j^I?pN$SuVwip6mOu*dd>KB^;*Gp*{}D#op80>?juypx!k)Kp>>gaoM> zn89WzUzRa*h20WtMP#JFHwgQmnjsN1Vx1Bv`6MJ@dS$dmHDpfL<~QTk7}! z(foSdI=sz(F&qf@7rbSHql;(onx6ec*zz>biaDg_g8y1bl6_&d4=X+1<{{>}JDqV# zfH(qDSVUWhbFtfVr9*6kJohdJu%Q#?#0nC`K=4CCDedSNIW>CdZc6a~au&h|)WlBe zzJwth7j9NKm@+$+@}Z1q0(`GFW0y@-lal+rakh5BjU`*BcC%>;-@JwBRR;E!q?MhG@IS095okyBiK;M=coC!|LQX7l?vsI)(tw`CXp+pII%=mBS7&E zyA|5HuCo{SYBb)eah zNVKva*H+SeIexK2iLKy~BzdsS!bGpE833weI!S;Y-3d5^upu`$wyY%-&!zqZtusqMG zh)6Xo{OExrRb1E!&xD7LEv-3#d}yq#?q$@HYu(8pbjAdpLN`x+d;1s-MMf^xLRyU(=2^y3C((>+G)1l*it3h)lTh>g%wP z+0EmQ(8U?_97fB+f+#zvA$7Jf^0JDmJd4JRqASh0N~_vIr?ekgOUu%KB(|ngTdzng z+10+&|LMUP=@h5A0TsOWB9h5V~w2YQigGcFGmE{{&;ky2yFH3U~cM*-W=w zyVCPdIA~EZEpF|#V52FR7Nyw&1OCI{@UdjN`EES2nn@VpY~h2&D{Gh>qRZ;|H2G+^ zc3N9RD7iaOKk>&d$33NR%S3u-DF8d#05)Upx+Z`X zjTSO{PfL9rPU0GbhdF|O|3j%*f8HnVv9e67-!VOI=(kIM7+2ZH_B#(sheNE}b!IT9 zRME@qZ&a-fbpD&)ZpZXzzLUFCTiauOxlgXD%J{?H!X0g;mxj`JxK*2A*#19@N~-7f z-b>M^r9hQSlPX7}60dME@AU04Wm!sJ9*lo|H|Q*a6R9=$a$|WINwdg_O*M#H)6kvT;H zZgIt^X)al@MO@$SpmK-~2C7x*Lf~nw=7&9}6Cy|xI6y4&OpiIFjc;x@g8$-R>(2_i z`;Ip3w|A!w0pCV&TJETR#Fo1trF2&*dCg=#Ipt=O4&CrKG2|jPJG$QS=O})shbm#d zC_|Y#B~_LJ^#f*508873eA%Z?oQlDArbVd)!i2hK8o(;?@||pe7eP!Eo+7#2L@x4@ z*M?yHO#tVE6yuI*(dM!4T+XoU+xPAif3>22GcsBVE_qO9n>6@aDUdJ{^{RMIU0_98u3eI%| z2`Xd{M52Z|$HcYoBjwNZyy|}qTaM?#G-q=kmnU;)61Vx{{`BS@%^&|sc$OOs?NPHu z6j*i35&H=jA`GXaC$znMak2$F3dZf}e+UL58JmPe9r1O+;S%rw-jt+2KIis-G90+0ZrQN?lAc-%04OT|M@=yCbpk5M4HfeeDx0jZ%8EVywR4PB9cs?(M7hRI%~F@TJjuA6nZ4#QCu{K8z;l?BKyY@yx2q z%;sBW{Ul@zFS=WMJsF0TYxYOJF+3C-H&D`Y&zoSE+!7q~>B#3dDBEJxFkbA)= z1s16EB7ji$dG?xqS0eb%MeubQ&oDj1So-baArMAP7^HQ(d^rC5%Z(XV5jdcon=f1b zYwc+GY4~*i62{)&sxFGe+w~H^t+!R@`^llH0nxFJ0?3}_%Mn;KN*?2ZQCa0t>n)xN z@D7n|Q2#)LTCL@T@o?Cx)!;G)(i&mk4%Aq7%P$)mam-vs`fEZSg@jr=tt?s|Y6K{m zw7`7#SitX<4gc+A5S#ADJGx&|grHs*K~MP*e;Ae@W2nuF0KLjJUTUFaZh}pdwHi2p z;lkyel7HENal5&bf7#O)4ATT1Z((U;<^KF|YQwE<G3h|1jIpdj0L}*$Ly%wHrwv2EUZz`(xF=;9sj%U z*a`>H641HTb4bJq-8s#fV4@mf*?+go4r1O9 zIgMcjP^#}F^9^trnf%(wr>AJcwvmu6=)=aS4Ci?0hQ{zqgH zG;k2wuK@-oGAjf!V#vvrKa?HNgVp8b3cJ~m>0LjeNmSFP?)$)rVlp^fm3-h%$#}|} z1hR|g=MVVw{W;v)=mE8Y_PMSRQU=rRxJ5DO8hA+k!Lv5{;{0-deYC zww)OKI}`1oclLUio0%=EP{EA%v6tf7bJ5@z@4GWhE~E@XDA^{R^}uNL_aR^Ep$;s3 z#M=>`mB$ly%k?&%?PUd72t>FQ^NWS+O$Q-*fUgFjK96>i7lBI%hske+Tp}6Ci1dr0 zF@gUUlKb|xyvmKp$hm&v#b*o^IETHwmXzI$`Xk@^GXxZ%f@f=W>zpqI6eUjsMx;R^ zRy}4z9XyUIxK@3_N0`9y^)gG&xT=)@nFp!s25_0bN!;!G_8@u{F%=S>F7%w9tE3C2 zk_b(B@V~7$BA$u1#10ki7bX%eN84osK1)?I{lg4=9Q<$+Vb~gZp!rplypkj_py>i; zUZJ#zDxQD|qIuQKxQo5Na!mv0cbJbWEG!XU&hTiOgz~)q`jmaM{WR*=ug`TJu8v&A)yjp4KEr}w9~y)s>7MiTeteqSI6ycZCdh66cD@krj~id>EpvhHnPMh1 zAz#{3yaFg$Ckb8u{Z=KGm7v~KJ7-Cfbez&Ra5fbv{t|bPUi~n5Hg|A`{Ef-biO%y5 zwnUjf-?&6w<$(?^4T|HN0HX#Spl6GD_{~y_bB~qz}fL>dI6k~aAM7Ch`oGh_=Ad0=Lias=wHEG6%^kB zUg2+#1QEaw3sQt?Ehjcn|8M%r?zjHO4Q0_qoHl$0O3vVfn!aVkG?OO`(}}7v_gD%vVb{=s5n%lJ`?DmUmAd zyB+d$JqORRd(SS9w;y0q&`m89qt*&5hmP8lw7h?;W)^TCOW zv0J!lGp@`55+0g>WJpZElTkNBwbd8N+cRsm+McNobtkm?3lM!B7q&G$9L$n=biMmt z?_$I`V2j+hQX@>kBGD)V=5}gy^%~!P-+uf7(S4t6!+Sv!UZ?_oO>FPtm|WmE6Sus@ zFZtDdgp862S-&h7wR03WN?)pWQ)06}x_76x)9+P$Q72F>kxBF%;`|)pN@SyN094kP ztl9A}Ut0|^I(@lU|rEZSYt{e?rW ztaYNa;`wQ|CPlZN$=BuDM+=Kyo)2yQ{A%CjLEB7Dk76k8upTbuRNDF@>++m5-ALU4 zU78D|AbDS(;d-YJV?yIwYabN2>x?Ek_y7&kdVp!x<~`p;zv!7!HEV*YtJrY$$sv_; zNNBuVYuI<(XmvhL7r3$1r4>s_zZna>bCeU9%urO7+ObIjxMzJSWC>I3xbdl%%%;ly zJD+!2Y-#3azX%8g=(8m{@v83Kh&Y%NbOIS1%3>%J*rO1{52(F!%%w@upkw@c9I+b` zh!$F(B7s;?Hknl!zx>r#BFfN|Mb3$VZl+bXNZE60`U4$;$hH-tl3;76L5{#}7wJ;s zB;`8|wPzG|e;j*z6|(C{fhRb;tp%~WNw4jO3#hgDm@kqfY;x`Amd=eLdYs8QifVp9 zVs`{&R@*_o2@)G?USVmGR{B-ELhBMck8Lv83sP@Ux{z91r0uNx?OT)GF7D46s|9qH zbY2LOpzy972Fjk<#`l=vFB*jIJX>#(ZQ11;?f&TyGRXw$rwLJ4=Xpt~pI2X*LDxX{oAo(P z8+5T2zqdsCgMHmQ{96%iVUn-M+NBP>9VMI`r+=t-+vW!5;hW^09eLxsfMOp!qI3wQfL zFgw=*oz?J!ZU;!U_$)X*csSvb6U;FY_3VUiD5rrBHLk@7f)1U!lkf2`lo2-39CAS$ z5C@zUaMA0{Qy{vDSvjXUVn)SC3YUcIaF9}n>PvzSmz=0-8qCNg0*Ch4$=v#^P&MqH z8$(uWNa7YMdxVk*AjY1R;$F{xmCMMeQH}wJ=eKbF-Ly$;N-|P}$z?9h`cA>ChQ4Vd zROa{l=Hwy{Ui?;75x@kK6%PmS0#$AJFhxBQM~L?Orv5yMVkgO#T>M%le>$U5P#4KQ zltA@5iBQvUau|?rh*g%;DAL1VoNH`=+oHJZ+)@o| zMqE_jb4LVJQ1#Xcpw6f-WlH|%ku%9o*mWc2k_^v6MSqx=@SBJG$K~44H*1Q4p>E^` z(dA4FYaxzsO3M`|rLqt1yK5gHPN)6l3_3}>1ws2w#5`0N5pozKe%6X5#R;D`5!=+Y z%xZ>_S`My|W-i7KqPdr$!bVbI>rUKmuf?1fP= zdXv9F#DZ*%$=AVEO45nU$+LtdDmT)t%8;-cbXzT(s;1$)7-Z?0!*)86cNhif(h-OZ z{;t3`1eZmD1VFy63fi?DR4zmqT%g}y*Dss;Rnhq-MYFh*Ir^u);Z$GIw9l0C%y-kj z;x_$xR>UiWz^JF-wci>h>8@*WS>>BaG+#?PFbP3{yW-qMYu61dMJrI{?v1KXtgU&% zQYp(xnsc?$%=6O@l{g8m#xnt`La=4Kc-*W#G++|lA5KIvgIQZoVZPr}l0q*hN=g+l z4hT1>e@RTZtl~A$bGhBL1^<* zeFesCjhacu7%63kGfl%dO2mGkO`s31Y}d^XskU&Jb1j>rYF#S9W>dy*o?Sb($ga=J zas-hIgZoLVT%j|k4@pT~jRRB8iXx^Fv6}{xY)d+75G*hqdVif2UkEY_lNm{F{7So8 zJK~pufDh%3Hje_7vMx3%Zh4!$8$nxt!!>g_8^uVPiv=@`e`BfPsZ0o$=j4I; z;7#y5?=j0`KU9~vykjU0oL6PaOZXGX7QA3HKf+Z-l)W`gqIjXWMYr{Qr$|Z`zCg&^ zwZR@pxJiyQqZW1EfX*-;e-Z2r=w+Ocb@o-cAS2Zpuno=nmGUvyz@?=AusJ0#LWXt9 zK0F5`^82KW3?eWrnFmNy=6Jao5h6P+PjA>}fg!8bD!EQBbf$9QuNqRMljeJZ8b8N~ zdUTqrgX#?w)Ol4n{!^Pq1)~PJ5t)}_i+^o!jV-dY$^@b@%N;!M?`*<^AppOJescn7 ziVYd}t~#QOAeWhBntn>CAl4)(vM~yy;?1ASq|oe)>u3zT;4}4vx`z1} zMGRo`*oD|~;Gcs<1}cr^GgB43X&^452xi;75g+qmpO)Aa{@;PM$wrK#+W*pzg0^5 z7gJx+_XCu3QJQ}#zlss2FuwR%RuebU39*jRjTeYa_8*v0^r6%B?b?VlGBTb)vdK1V zw~q~hf=l?m0P^@D{A14rCX!I;Z7;O|;{0;W8l$P$G&i}D5P>pGBC03)#eEOg5#gzU z0+D7AwN-f$?2{JTsSE93m(l#UHH6%Axhpinl<`K$a0hJOs02Axoy9axV| zQT#jt4!Moe9@oY{e<{-`T@#6Md`lurPeDxlXq)=8SFe+8M#M4a&TU%D1RG>c)r6#T z+?+8Uxn2gAGCmF#DnnD%qIHSx5Lz)i5xfxwt{1-un5>^iC-i-2J!c%xno0(PdbPck zd#LKrAB!RGE88y+Py?PMr&?eV)Mm`OjWg_=HP zp1AQ02&pn}C2HdI=dR{Td2@Bnnl%TqCB(_nM`~wUif1l&n|C><5L~uvJVx)XyiPuN zmyYUzlNV^2=Da!Nqpr>(o#pRBfOr%AX2FUZ9E{cvYgQ-x;iu>4#@etVA%(>ON5@IU ztp|Yc$ZZ{S8eC2?XPco23ps>YTdA6_KG#v`1^AEN5gQCEZ9wN11dV3F{DqYc;l|AQ zWAcoTPr2o>oa2QUP4bfUR~ZeB@MX$~RegRV@_V-ix!O|n?uSq};^~;+{P6%zNTTlk z9ba8FG5=Fn#a}f9sPbLS8sf~8`AOWgO>SF@?kc^C2CX9@r4(E>8OhGMXH4ZDSR$oq z$!%|-?)GFp95{?u*9J9&B|8FhTV&Y!MS)N3Qz=VTwH!R|oh zab|C>0^nJD4Jt^^TadGm696dioO--5UUnK~0X@qSlYZli?fN4fo)^MB1-@0H1O=gs zo(MYPlReGmhRLMLT@2(Z7dh?2)ZM&%JbZmwrB3&Y(#)9apgIzHCD$t7vP{M3y4nMi ztd>2^(GQF%4(~U1n=^ZEKB0a0PaN8A$HUYg{SMJ8x*l#DEjX)P#5qj?J;>dJGX{vx zU}4u*lMVHt95iJ$A3}O0=&rzaO;9-RSM@_-%KVC*O~-pNCl|}7k#o8=PzI`Br9z>) zSg@z&ptw2Y3K&vrJE_OI0JmK&r@*;c-zpTJPIgBrFncaMxPieuZ6$e-1)~zp(s$o>F4+~ z2gdRqesUTlHc}XQc^|XCn@LEhu2+?NJ$>7-^+YKrS%a0tUu2@?rdmD?njE%=k4Z?% zG(ib$Cyh`|$~Q?M$Xk=xVwonX_WPk@T3H=H%E$q#+Jm3Pptaf{RBcT~GZPi2*hT9L zB5vo$Ar<}#S?Y)8x|kd32p@~v>Ci8EHDNnV1)Z(=&*u}v=;9uusof`9~Kqe>{N)P%u1*@*y15p>H_k8_=fu86+wc8q3>tUd<#HM+NQFPbfj0 zBpotj#7ig&`^>BGs*qlki5?pH3?<8vsrqYVEOO$Aw$Lb~3(|*_TPp#hF*i$lqIhSx z%{lb1(o4|9cEt_Eq2gTEpH@KgMox?W)T@U>-ac1~6` z&EK{}{E$Vp+1Fx{q!CR+E52TZ2jA;4IPrLK9S9ej=$u<4pDK{OFIq*28h7FyZc##m z>c~KNzf!=X!Ix=x)a!JfUswF(j`$lIge2u%OYi1`6WN<0*3~GQK32+2cW-n{G44`| zsGGTTdnvoEAX2K2xYZb5S*DrnggA973Jw@DiU8NPQ=Xq#@yQGG zD1C;4f_6mf_-oI{`9(k(n*PNUu7anxu=1jG_VL6a7)N?`b>PF-|K_NAwl>O};VZx+ z400vbA)|lTlozy~r*iucJ>(}gb^i1GS^kVWzo zkddChNkCk&lkI;{Re&FoMTSyYM0I3uLh>M!{RMG5jX>j#n5W2?Tu}5YaR<`FPdYU2 zseC!WK~&XiDbm5_y}43p(95HI?~kgYP5w9T|8DEtur?&3LIVLUVf<_C{I?GTJ7X79 zOG8TsXBT^8yZ?;Tm1y~^l5(Pa?fe$u)J5Z9Hp$&`?5s7dqPnH1y#xm4sDRzmyN`)U z#kVOX!#1SBBkDIA`b@!#HNnNK-Y+BN@Zf%y?X{f3~F?G{U3w7#RxWl1LUYnNS1lQ33Eo&ijHwoEcZH?|GoEVIS$^IBesc0yEMp8`!i36Gr+ji+TG5Y}*YaZ&gQa%*s z&p+TqN)gM#peRy|*gE<^b>n))sBdD~y-VmluH*Su1BZrWPNO|DCqNDf24$5!Ta7+n z^y5;m__wx0SKZbAw1WgAmUDg9J0G9e7h--RZf`dG5~NRr0F)Xp542b1+qta32UmsP zp3@HAwP4}hm#akZCW$m@mr1+A-s#h(iEY#cex)*yT(1V(U%BJ@z@mjM3kMs#XIEe2 zB$#%7z(=39?wZ^!L&vaY@7;#pa=a}?Y?GeUjrI9;m7Ok1aSfZ=AZK0NWi||#$n-MG z&7nV-uRZ!B9%ySx{-=F5CP;6>f;=V<+o=u6ohUaxG5FY^Rywa)LC)Fige6)m1suhD z3JkEk0Ba`9aON>8Yko2e)1VaR$O4`#79NY%I-3yH{2P-gt<4x6X7hoHG|M#}SqSEO z?qbwXrm2~KNMWW{YcwFl7u2`p%)Dbo>TD^Zp(G@6qOp)L4aU+CAFbvP%U?01D2Vt7 zhV2$Fon!Z;sE7jk!XkFsA_>AUUG?ZN2;QS5xm<7xJ!ibukL%}kFC{nEkae%V;?eI3 zuMdp2Uu#wTdphE)za~ttF{{dDyCRrim^T-eR3%*hkB8N+Gc0p^#&{0;suhUDDO|tn z&fpf~!#c4YM!>>z5>`R4($U)126-hWd@WSsxOV2uI~c4(r)E_@kV_H!1WY>WOKTyH z630vg_8%(QiY9x&gM;6Pe5xQzeD%H%J&R+>W>+@f>DO2B2+RV+(H+1ikTL8OJ>Jb< zJ%fasYE?o2lk$%WLn+IIW7edE3v&L!7mayCPW;m#wjJ=6Y>}@njr+4TrY`o!Sx$Z%-A?y<(K1 zj}3!)3xVa`af*1Q(e5UYE0n1vBVlq)cbuFN4k;3}YZ4~>5=qh3K}IZbNbBKMV3ZLY zGXx&0#+%h9xqDp2*PGCJ{iJ!=c)!rIRle`<%TIs{z=!?Zm1Mh5f&j)dcG5uqBwL}R z^06{ThUe;UobhH){x8X|=(=lMa-T;avQVtVrhvFR@G2LniNPzVHwVbzbog6f?{9p| z$Bato+X`hJ5U(ws(N)6VLE=K6GT~{=$%|}Z*3A06XA>y&&F@^i%a1MAF{?Jq&1M*e zFhY5SR4x)o1cn~kPsf8E54-j2Q)}=ipK1ISR6O|D)lUP~)s;p%WXyOnbHb#q)PW4v zkUOe|8v1`>f$={P1o2O%Icx9x3s%Tct6(L`BPnse-~o_WMFZ_fHi%~Zcu|H51#^JV zpZSZO`34(OMvWu|bUx=3#!KDbX3#NG4OkLe_B4;Rrn`@H=>k+CMM6j9yPLL$l{spJ zv_np!)Ov2-xP4FHim6>_XOv1Z>NgZq$vA&?lcO<(4X_0^7&YN71s@Y|b1(lEK@X(+ zH6|;yQyODthF-kZ))VsRp)4Qv&CHjtWkqG1djA?BxCnxx8A9RiGs5v5V865Mc(y>U zr~<)s{#5u^2Mj|Pq=b*7+VpO*^XB_C-{t_}z!z~5grfInGLlSKv5BPYn&_hGY~HT8 z$gngI^sALlzn)$LY2LL{ndI{wgT|B%4@40whl_V502yp9Ml@{sz!Xhcc0B^?6+)qE zdL-PoO4_C@rRJG#5r9<`%?0|dYXmfDCh;V=#-|`{++8OP;Y;c!Z2!;aRDAz6woHsz z@DP1*_qKKi$)jm}UKW2aF=y4u9k80|s`s~tA+Rf^#x0*eTp4pug11^pP2{ZhsssRDVJn+LgSLG_7^p@l5rreQ@B;cp!gIWjp+S`d)y zh=ok*ah(E5jR%-LdisOLC%x-a`Tj+y-02N-;BqN96q*A0Ap4M_{h*VG5&;)hTU-`a z)y3H>vhIym#hpve@1Vmyl%$ z>wmT&#WhT>s$#0oPZ-P3aHtPqVK(e`#IBNz#|w^S1Z&K<3sX01{=98#qI$KVf!XCp z3hq0TAX#e2gA!I*A6NdfmDhb&2!*AS?#0!JLNN#E@Z&ldF$UN#cq$Uva{FHHQ03Qr zjUD(dZTG@8&J5i>+&!wrZ6ngJ@}p1|vd=U>c~c9LpWD+HjchmcyV-pVz($mYT=CI} ziJhRGGCimd!(8pg$*&^VK*2n~`3*MLBblWeC_iR7Lm^`&3swX}XK z`@d(u5pJ+O#Os_-P3TrrD9U@!P)R8rB7-lY7M)H_XvoGOb4n%}O7C3Jxk9Y@|DSos zy3)~MbQmC@_% zTV82{q()ZzgC!RdxOSIH00K}=dH46rhJFAUQBvGSdmaHD^6HKLCFE&~hHhHv#eAAh zG4(_nZwdW@3eALFZ80|7r%r99p@f+rtgc{Y;ky-Lr`|RqgiUc4*}f`;n^g`uJ__3Ot#Ncp0tt$! zQBIng#YJMj+O?o~Nsll?{qop|Q$~O?8)Fyu%x7j1$H^h`HsnaCi)wMZK9~lXe&bdT zrNK^n6;EmHbIY!89B8q-9=8D1%`EUc&L-Q!tl!nis08_<(P-DZm@-rgm@Bbrn8@p6 z(;g5h*nMgVXTd}$5@wg$K*exd33qpV995A!%Mg>ip7VI18%$%ai=LI%#Q`X94#c*eXW}9nrOKDUH`@&~V>2Gn9iZ<<80D8xI&@LSRhzHsX zHr~5%PHfok+!tx4C(vd~J!@T+MG_%F5jClrDJ9L+i1EYVd=--!EXc9RLkix^FDi;V z!`wJ;R-3mnl#|*8P0E_ov<#O7zTr4nvsBQ;;aZwr$(Ct=+b5+qP}nwyoW^jor3w+qPbx zcwgs6-1||#l@*l{nX^`{9K&?16$qf(^yhDUpmBg6AoVKrrM}|S&CL)cs-=zWnqoN+ z|4GMVeqO{c4~t;iC)Io&dZi**ct1|jg1+x@$aG!;BPQvPQAul%=TC}X(V&N~3lG+a zeMQqt1vV|%r6N`WXKEZm4yl>S9p^eri01c%L+w&UA!TH^c&!BW_u*=Qnb-_VF@LSu zrKmaks8;A*$^%erqIL%Cj|Opla&n4e3Yz4VXu#%}WHE~@O1=GgfR|)13WPdM7XPer zcDQ@+Q^bCDf0j>1uBysa47al|GGrp^c(_8ZR}Q*hMW_R<4Vm6e`rrUK3IV;EF4!uk z2$VX#Ue~*6f2wkUP~X0iVtuem)kaB{izJ?CArjrLqC)K8C|(yv-Abad&aIacP50>u zv_>NT8alvo3Us+hx@C2~Rqx1Fo~! zDF&e$K}a0lDb*{*LmjRGa@3ufdjACSDq#?{9MU4ysx>I=HAFEUlPw0X%&A?XgOS+4 z17UTcAO-D+;C(fj3~81AFe1#NCHbIi=nCGSlE6H0>4{_t{?E`w+`SyyVHyyz+e)Tq zgwFj4-*CpIyra;6MjL5+FYZt|mjeDaggZw2mt2Ed&5k^SckQ7?Z>M`-4Q~|ri`5X{ z3A)1hfRlv;ikDH^&#lbHUU@S!PLN4sODw%Az^Ew3p3g`9Q^aa3TQV{{GuBmGCL*y@ zb`jNXCiIz!*%Y%JP=X5LzqPSoZ@#=8kf~aR&s?x_)Qu=h*>X|%^vHr1uF_;hN%GT{ z;A2I8_-R67H*li5pu#`)@^_xSjx@-)JdGjr7Sm+OE{Cw6u25f~e1V8&pfUEQQ9^Fu z$JkDPE+K#oCUx`b^};;EZ8*L);QT(Mg=@pwixR?#BEBO1dS-j-6R>GWVHo=xBJb|# z%`NG5b@;%$=-&}pAUw>>SC^h>gEYX7p2}G0Cp~~Jwf6uP83q&kLCa~l-0yf4!nQ`4 zbGPe3acqOMUKj}uGP#fDgJIaE;IX-&}o0vGG z9`cH@6*Q}cIR{>Bug!VgfNV*A$_Sw*dPS3UwlJr56%KV^xh+Sv-afaAWt0&!ZUf#q zdNy$p06EX|3NXdDbFUHWjr8WWK)JDRX1IkGyC2plIE@;UwFMyOZVgr7pTzN4$1gZY zS`f?2{O9|Ax&l|~;lvf}8CHW4-XXP*|CebC&;k6nPB1yBmLQ=*IgA)Fm}mIT*>cLt zwq|Hg3~tEM+>pGA#0D%eg0P_FgKI1AzSZ`CLE~pz*nX;o?+hi{FL-yneWtsbgTM)l zj+^3WXVw+8zAW$o_e(wQl!Eis^_NK`wy-qc`6{97C__oP#$pmSy1vM^C8iQJ)ag3pMb3l%~W&jBehkUt#Wb~$?> z4v8%bB~{Yu=z05t2jTEXOC!rJgtF58Ph6g$U5)$Fi|_F*7%_wgPKc9u&hO6#{O${g z_<@bgl+pabQaEz8V~V%pm_-HKg6sS}bUnmDHkv6^sjuyWayIIgQfls8Lj^Fyoyj@W ze_k=lTN#Q}{z0YYEXYIwP(-M%Sa|F?)21tp&YnIJOIG4TuGLOt_Z6pbK zG=BkoA}ZO9zH1NjXVu$K_Sj#?I&+)w6DC50Nzg*TxV!qp@`v0rlX-w0<5sT$a6rHN zX#zN>%mtwco!cHOe9Qw8S9Y>RhVJ5`po~eWy~kD)r}bJ@ir2QB2Maw~C$G-950PQF zzk#xJS#^DUrsUzx$FFpIm36jK{B-p04-~9RR*5~W>J&`siG*HTF${>Fh(L`|Yt8qf`M+sEw628ezQSGnRDA1t0nJo206x4n?&GSKYoIB>F!7I3k7y?R< z_{!}j&T3LnX3i|}{4MpQ4SHXtunU)eh|L7Q|IWF~5Y&O{1p}5BPc5qs5Ilh02u#FmU z{(a}f`}`kX&4q}gG*K7;0I%O%`RD(Nmd+M7CU!3WNtH{QHg+4Mh`$2+`ewvz5b~y* z`A5xX@3ut;M*$}Xe|9yLFn-MhDhq7Ou|z2@OV6*XoD3f_k`YMF{3Ud$!|BUQrkh6H z=BL!DlShzh6O;(pmOtp$-?Fmg6F|p^2RIR<98?5qWF{&c8iXF}lsaM-vSC>0o z^A~R#XA0G>T4u*`FCXJy+4`$|cqpr*Rqa$HTU}3^^+pFMq^j%4<$G-{-3dCMuI}gC zQ02)R;xGP^u@*PVO!4mg^t7zZeWjiQk*C}H`S5Du0y2`FC7JBf^ADHnK&5V-tfTtMxK3~1k1CV?@zIO{pOB)xP*|%wj#y9#d_XL0N_+{W} zD5x9cbrCOnhrWF)cTealD~>%=89iU7jVw}(Zn=1QTY5AUDpRyyXx5}%g=?=mV^OsU z3-kdM0gG@L>W=vV?3Wi^Qm`wiflZ6u+o}NixXq?y?JP~UJzUrt#*WzpQ}}IMwp&$5 z(&G9BE2-J*d{Uk?RWnj7fsm*aP9N+V8ZoUv>1KMSrb`063tf=s{((XI?MK#%aMfqe zT}f4WC%51C$JA2R-=!gA(c4Q2+}~VZ%$yCZ@%L-$IOiikj@`zS18*a zm)0Of-GUhe8~DJc32j5v>@uYPBo|qj4V0TzyV0bYZPzol-yj0W(Ft!@Yqb$EL|Z~( z8l#;Oiv7NxD_ov3yqbo5jn3_4Pe!S)fSSEe$!OFVu8jSIG7N)+dK6+cdW{{FXsdo(MG`3dMwNh{vwonPIFU!2K9gL)n24yaDa+2*@0I zh`&)?Wi|72&T0!sjnkYuw$Np@ZKn?S2YV!@aHuCFZIcnScW2FR+6kK?DBkE{uIY)M zZIXUE#Hd=+!g#|LyNYa<1b!{jgDuOh$(-)Dr4A#h%T^p8Q zHKhynsSkp^t?|?M_&_DT7?d3Mhwi2ejbhF3oq5{=5yfc(R6&F=Ma4spTLwzI7?aGxDL;J)%Mcw|-wS$N>C1zxC~59mrADn!lns3MFAO7kJT>VDYM!-@N(Dd%6CfsujA>lHG7?lS^;I z@v@H3!MpwqCBL3fY%EVItlk{Fnk2);02v$Dxw!Ro11m;r=gF2{1W#ocfrmF@q)tuH zKMl=&@q|kO1KuBJK4uYrcig^`c|LPpCy@yo+b14Qp4kY9q|EJf7|zC3$@#BZ56=8S zIW`46y`cwR&BQIb&Iw4m!4%)Q)={w%RA+dsQFhn(WJ1~F3cBVHG=a<^Bp{*auepH| zyIfs95f?%=lBZ6f6i>asE9o}*NW;HMzLr$)@PT0-;}4tV&bYX9IGI2-^l#p9j80*h zB}hUNNa(hA?pun+y8?QflTm{eh#WvpzA-|V;8!EZfaX6-XulL}p3}9Y;Puz9*_+Y( zi9&5b#?84IGYpf%3zlYg(|?gu(^X}Qf8mL@j4V-uksZeZ(wRa#Mis1x9qt*!VfuCr z|3to!?%mD)J}u7#p3$EeWn=B-4Z&$!FI*8rChvgw0}$MKjKA?9Jqo(vqXRXF(D-3I zbf1s5*+L9nVT9VVFs4);aPRN5%KYtfQEST%ENe)D?7ku4YX$~ZLmE=iEzYUwQJAm6 z4sz4FRq4bbjwSEEU+M;kW&9Aq$_7}!nm~$n*~6bOb1TZ4(@%BJcHtn@Of;0I1tjXI z=Hs3qlMJ4KTy9L&5AZ?-C8D5aHRL&?(1s)^Z4p#MK{~Tp-FXP2zoOhk?4)B_NDDJb z=0FlWL=H%seG|IoEmwpIxN+qU?U9xWaY7xe!W>)Iiii=DID}PhaV6zgp8qVQ# ze1(0VfW&s>%y|B4v~w$0XOjxg*$z8rtH7)RH+8W*GICby=?GOXc$?TmZYP)2_%oXO`j(qJFbtq7c&$Z)NX}qN|>Zl$FWwNO?@% z(5X=T4L&_U8)LnX3h`-B7iOXL?cWL*?pEujENEx<-CUjh8=HSQGNqJ`nEnSt^b?24 z;NL3S`7{`z52B{?%qAIk7_$Ll_sG`6!0OQ3kmjz7a#n}J+vKkUhD$7pnlhdoCC*J# zM2H|`spe$CDy^h-zTIEDfsQwn7R%2mamM3E_Z^R9I>DddFHmfmr<4*d3gf&KLFOj8 zQ`hz@5Rav$WsWK~cvil@>mJ{qM@xCRT{urXlbfQi7D(4?8Q6F`WTGyUkmj158t~LM zI*sYL4R~gB5?cCRfwR9-F{(2P+gu$X@AO()M0wU%eH#c zDmA5h4mOz9tZB@FX46;>H?@~s=qTQFUI{EE{Z>&Ub3>_2=v}TVaVqYwYyF(o(kLet zqxEov`{Z3wM_F%8ro?;%*B#;X%j;`IIy?u_hH8Ts%`rnp+;eYum06-k@$0>=CiECL ziih^7U1m`vR6F?y`4Y7LX+ug%L`Ui9H=;F{`WY2E8fdO@r@}Pr!xG{Nzae4(;Nxjq zv!!yE{1r0Jw_o;gk3#fB8gwMb1^u^_2yQw9>~i)VPT6#|2Fz3_54SZ1->P{Jw8hYR z^o3vd7|yj_9yBtjw_PORgR9U3yO$rPo^6qm!>9bv9$mY-l3OC}tB=D;quVO!*a-52 z9R#h!d&^AB@+EG+yO~`z`q|R_s^mdLHw_-#5_F-XK^{W}$AT|*3Sv0~_`)@*KFF~>b1%HH<% zULb3sPm=m5Pm%QVem-$NzI{b-pUZfjo=%7X`Hk#UC9Ss%8j)EKjRb*{2w40Lr7_*; z0gC{+Ra&Uv6G>JLV$x#3p1mX{AK#O*lT5%l;K69g+?zwtsXnN!q7{vKH2P1R5{WWo zaTXK(BEz?B-@?Y$sD*KZa;EgWs4~x}4LM>=k(bD4Iq7f8GrRxJL%Hki8G3YZ6@2~$ z^l)w}^!p!Ber4x2FCJt7fOIYZfL|{E{|@DMakTzV#{id?-o|M2&xg`vq$3SU3qcoa zrB+(}F7YN(K3I!QFGB;*FlEEx67W92*X2t#6Vv=?qW|Y|59{i@$IPV1v}}R>Fj$a8 zW)UJjOgdXum_q+10R%GJT|a>>^I>CnrQMj}@0r_}VUPryEI<4^jy}rA0ej(5GFy}f zTa=K5U>W2YHGT>9@T9Uib%UQnYM4*ZPA6dR$w2zd_J1!yjm-B(t|z|~?re^#yht|of? zpF6hvj<~Bd!acXS$oE(|;unv!C zxwQk=T~wv9^FD{nBg{5=`8Z$gyLL?AUyXiVt#5AYmi$vNaI!!Dv9Pak2_+yt1zz5k zG{3o9XuV{`z1bBq{Jx2_V3u1Bby({#yVl#Qy|d#`PuS$^($9~=*O$HRtQ}h(%}}1c z?)3EAy27$%jDMHLiT;Yt4Sw_Yx<+tmUc+?BSmOp|{ zRi6|!xu%`ksm%F3iIx`5?Nk-lB5ze2wP=i47ly74N2PDowzA?~VAv`%ZdMtP+gQx5 zlw#PP!z@Kn%4$7j-_Iyzw?t--2@3!-*O3w&!~OwBMNtu>bst zOnQ92{@5RR&x)CdYx9yu!r2`S#^Vu zljeH#fez>+gZqbv?*b0~ft9lqa}}ln-HoNFjfOw_4li}R<5^v_wy|^LGqu=-g2Kq5 z2W=+-@AB_;bG`c#I7RnmVb>gfKm1y!M@LutSq=B`l4Q9S;LN)ArCbZO{0DkB zucw#&^X>(c-M?sSZ>0u1if%+rawYgKB``Er4=9q>OhNCRjgMKL%iP>==7=cR((bt# z2nwb&`>Au4woB+NZ(d#=>};Hu=|e#PCMOo({GY!JIZtYx#{=&JL)hxzh}XAGil0sT z7ZI;I>aq?Mj8VsYEN2W|mR)JZw2?~{5p$|{vp%m~D+7a+#}V=8a`=4QKIwPaJ@}Vy z@bLdo)G>NKkNh%Ap3Yq^{J4@g{V~AB@Z*^B8?520gf9U1+l=`0!Fc$r%0vtyp5T;* zSU|o;JX&9FaGs6qZWhp`cN)mBXa+Yyi$skMI~j_q6X>G<+*^K(=G@(BaH?fstik#h z*$vK!Jj3#p5Gv}#izc#{cyB(@5e!^wRg;*r$&}EA58r(GK8K z#G%oF<_cdwMT65JbkP0Ngq=Y2T0p2b*^$Y27cX!Q7D0Tw4WIcl`WggsTCNB(0h^UG z5`W*xkc^E8e(S&0;VUUFJdsht1b|Oe%smCJGctv z8lX7X31<391hHY^FE?!Ce_^(a`Q~6tNmvo28gLaQf_Q21nH02J;)w*{;*A8*3Lg&2 zqL1tU0Rz2GE+<&Fr2tL*0_58T=}-h3=$P)i>aZ^=5iL>zNv0R13S>yECj=hH=d9`2 z-kly!I6~Cmy`%6{jW4KSp@|v2spr5sGSZ?cuT2&)Um#+hP^@JB@%J0bZ=uP*#qTxPs z+IV7De305&+YM&iY}v0a+8S0imQaCF+o0sjwuJ{_IRK4}QjMx1SleNQ`DWVJqv_J$ zD>-oP_9mbr0Cxw{0?HRb00ALjk%L>Ul2_sVLjkc=Lm2A{J=z&MnnA>x$OO{PiEZ;Y z08#aJ1#P(Tf(qGV1i-){xW(n4g6@sszc1ee+Gt|Cgt@VXii7~ZOD|>sZL6ZyZ;P{@LSt=>(v+HXbM8g#P@IeoU}kO@(*@(c8%XdZ@jY8kyAjamtgGY2hASqK3^8^@_Pfqy*s3hwoRw&G+eK#V!H1Ors+pv?*rPO z4$1kwLtim0S;Ljd!kgvr<+-G|v&+(awM@90+FEQ!hoK~DJb`Q*R}0mVN@q^6*Lc@! zL9mE!*YGIjn%D_1uy57aft zG3W!cg#F)vXxR+8C|D)+7~u#GYU{|q1To-ShtJJh1=ALyvd;2rvu;7y>z22JFKde- zApL-U&Gu;Uwbs8ceBI3A{W#x{H^5#PkFN-=o3KX=3ar-1shM4PPqsJlHt+ReSd(*f z*Gg!B@&+u@=*noaFDN_e7D-?Stnwt|n=>xntU^_a7{dN!rJt}8X#D1)s$5ajhyvo1 z44CwtLbKlV(@8>&upn;MND8y9Fh#RNXyNS|qrU`B+thhePD|*BP4Y8H#?|{I?K>0! z*{v7E6SR;Gim8HpB77N|;`lWos`yMqQ|F5}Vn4>_0gL)>+Rs0wyBJ23rlr^3)4=r} zZ`QeGv$#yi&&!+=2B@DiOqgin_nJp)>Lo!bP`2VcYz_qAvf4OWC5b^SZu-pM(h3&X8Wcu>LfjB3k$S>^n5WpR+Aot4{5&K2<1;pTJ`*~#M7Y8@Ajilo-UH*qk93(HvA@EA;) z8^suds{jaDOb&Ot(F~<%7+P=i+~N6%_%H~2;Vyq z)&Kkp*aRw#oLV9sIPyOl(jXP}LV(hRkY?}zsYyT~H`-R@28;BQhAp-BHy=5pAJvlh z$AulMGb)>isJ!qv@-I}_%(g}-I77*0ZJs)kecoKY4Q7rZ z!TpL9=T96VcPctOlwqI?mr9_UBPl|KV)&Ghk;;60IIxcg;(QE|n}H-|z0QHb5^{SV z3mf6BV5qUFFio{_n0PQ)s@JFqL-_84H|pTK(&U)^E#g9O*DXO%U_)H@8M;0gf;}MI zH_M$_pG_9(a4!-6ELe`b(WJmspxLiGG^KmZJWKGcRE=#3QWYwg9Iv1;Jl%_?L1FSDt3Fnj*znRRhk ztI6w_L2kqV`wf|5DAL6k+WguJ(#3C-Cjavk)_5Rb90nf;O4Sldg}s+KKpNldpN}v% zMAslP9K@UjKXdREI7pc%uv(HljiCA4aVoPzGpdJ=6x$W)JN~_#JshIrrAWSUxCItF z-rP%&VnN6eh`*wk#eS&))z}bYUsn`w*M*$HMtA2EL0~q;HV*+mgbNk`bV<-crRP{PKSm?%V6__ z>FCq^=EI-nRc#!^c#^sSNBSO?@I8bm!ls7hZ1K3F@J+-LTlCR=U&NuGIj@n3u{vKy zpOQ$mnJA(uLL#FGmUyT&>gnGxVA0^Ja4gbeT<9Ipn1LD~&nvW^JA#oBPV{N)2n;r( zGV=*ijX11*4&tCme2Y6TFCaEbvVRH+r9T{NjFSFZbwiuu9Fs=z0l?7Etct%zbA-mS zI=()VZKP?FcR&_r zVVdj`dbSz@w9-NfQ>ewQRgaI0)IX3m*2olDIpBUp21J{uYVOW;dLm#A38SEN;oWKe zaqc*sM1>Rkd?qu4rdB>*YIXYT;Ae2Mmq;9p(3(_vck2v?gefhF&q$DJCdG1M)u7M4 z$pXg4cbl-2Y$k%Q0?puf{X~t>{jLD*J7pl?+en4GjJ>||7UZ6%&UY5g@gmdr8$%@v zwZXJ6nt3G;C84r#8ahX#FV*+vt?RBHOo`Sf@gnb*tM_f5bdbD}FZwE_KkC;riT6&_sY2Sx^!* z@G{TdDY)|0oY$Pozb-xFVUuf%Qe!N#!6|_YO^M%#Ri+A@EQpL;G8)?`s0pc?2QN?) zLxmVyOsSg{G*Q^ZBu=O$=RU{|rUXE$3_bN}Dy5C#p5vaslb4Z!>2T_fc_i;wm2+^9 z;1d3=^39M}nbKzRYFLoBBsDMA`WL!QAuD~BkM2= zROg}*zw2Kr4EPChr11jfcVULJfI6t3B{wjzNjAX9f&fbq)^9D=-Ge}t;jR70PWeB->W>eu1Y0nv8kh!OfnBMe_ z+VEzC=hoISE$YN$L%rVm+7+b6+_VQ|GUqB($g%snU&Rcnpj;a@6i*9Fn^~R~*eYFbd-5()0{&f) zcZxpiK_4|Jq^_u~DT+&u#*yweO>RlFn5(tKQX12?V)t;~g8{m@&jG$&F=PhE$)WOL z_9Rh=8mKw})1bpMRFR3jr&&y{4m-M2T9}7c&1Q}e?iPZOVK6vjc4{iYXmu7A@F%NS zNG{S;mr|!oB`-be(y2`mx-Cxv0@ol80{Ec#wo0Pk#O;`qQkSxkiUf`*d6do}olj&u zJyG%;SI*JuE6q|V&BW(FRt#X5CR~IW?2?3CSFT9?0!O2q7>O{F)q!hYKHZjMT_;Dk zdt}ERRr^Q5qfHAHa*$uChzj4Qg?24(a@_@@(?LaoC5`%07|a@?Es777Nc*(F|E8Bd z8XoF8At-T1tBIvgHZ5cSp09qy($H0$1pBtA62I?Lz8=}?o+DNzLs(ee>0f+s6s5+G zIxrWo+68=%o`bU-yNg1c?3_N#H9+}SQeU~mzErTfhaJ*f`pdUQl^tOskGZNOp=-Yc zvqL*voTIX^VX?yUA{-#mC|uIQ(G?37hl4oO2g>qsv=KDXR)LxRDQE}h!&Oxn(pz9`&gQ4%h2<# zvc~{3Vh@cqT{khw%t1_5QJZDIZ*uqUYWLnM--IJxi}MUp0~@(C)q0IHxW?xSnIR>^ z-1#3ib>lQ((0pOMdlB-^1;$+n=flx#@yK~~^Cw0xu zSe0Ucj=qx{%(BjwVWknt-ek+g%V8d0<9k9O&1Vc9nXpfpJ$l#E(<2IaQ}XjiG&@SS zQ+1Sy%-Gd2%?66aOJnRfU5%I@@c%x#lUjzN7X}Cb;Q8xICHOxpZ@+%{|MZk9$yg20 z!*qYBg#s#6i|9QdXc%`?Rr0gvV~c1R&V~uoLXCT< z8>nG(;CEy1s4ogaN3vDLj}SZwA96(%W8R@Iv8W>;z4mUm{gP;Nj@wgNHl8^o|NJF~ zjgFD5IhE#tNK(2iE4Fmxi@Y~8c)&C*lf)9$ein}lWxBq(I=*Ey)x&rJuB@#&(VN`f zy_v%E6mF#PJnyryWSnt+BFCNXM9TW!ssd*k!F!-|qcOD)g}|h2cmQ{H;M+s%-^ik! zOfo}JPTayjYQXk|*buJQ`N_@c0nc^h$IF2SwTsM+V}V31Zv%X&m$Yc#$dP_351{PL zc_9RDUK-w)cq)snaJ^HtTJ;G5T&^;O(dNcmx#L26ajuPa()6vBKXttA=XjiENMq{c;xAR9 z6RY%y*Hz)1E2~y@Q!~9+A@7Ws&3=We?~#PsgCMRiMt1~rPu`R%`Z*h0#cW%jswMG| zR`SKY&EC-^kQOiNp@hX}RH2f?ijsVdYVCFpq~!^i%DF6T0E%=J;DSx8wRYvIzKq)u zT#Ke!!U$Giv1i>_IE$9zBA1n(^$(VLK9Ik%{6dB>;=m8hr7c8r%TdMy>V>^|c(& z9leOoZV`Yh5Nc5V1iL>PUofqhMX&hKgjvMB4I}K<-Q{YvHQueAPa#MiP-os z$EB_kPDIB5g)1wrSGg^hYXhUSmCaJ=G`Ax8bHu>4C^#H$X9uixzr?ZZSqHd#m{K@| zc#|jeFkqSf8YH`_l@TT;_EsoDGhMKE%o_7d=U<(m+LQ{|+bZ(p?Z>&dc=ma&Abmis zdqvDK4;ws#I6Gtl2dC#$qbr`JM-~ zsO-V*PH-iL57F9>T<*#G2U6WYYatZ6Tu_&fj{vXh(+(c@B!N9gYiWJs9;jcSZ|gda ziKVkIHiEktMG^e<`zc=RM>rrlDeW_eP+o|6i5>DFaA{in3`lHLo+tr}}h?&%KiiZH9?Qg;5~r?Pg6OLc-wM zJ*46tk(X&2`{H&&-O6>&!z<|3ZN!#aF@{d%8NXDam4>y&QRieS5R~sk>WK#SeAxa^ zqtn&f+HJ0$^j6?D1W!ttZm#&C8$isp)hV%=ak7#_58sRe3T&YG_{R^Fp)t3lSo|$o z>{RKR8cllow1r`0zLDC?E_pX<^AsaE3*l8BJ*_HJNf&VmK$<;&S3<=o;Y`>ScZ~7G zX0z@ISIw)VWO1c=)@OlQ8k#t%QP`}KQPutgOa^|H7BEZNr>ANiYxbrh)!9f9OY#(!3u!@dh}PNw70}`|!TBp= zSX790($90avoRTu1X;QTv4ln?SY)je0SdMsJ{3GO+bK3-tOg5zBFj?_-@vt`6 z;V&gl_l&6Uiz`1J!D={ddbN`a5!If}LuR_2oqs+b$6IQY$CKL|a`+}1@~#(rOTH{; zn@K~(r7;3y?&U3lmxMAAg0%@8s>087Z8hn^jFP~U5RH*7VE1_8Z&-)aX6=qtYkrBq z0eGDUC+v@@yoFz=b%-}N@Ct;}>744xOkt=J)$e|&D#RE&xY7HO3m;@=q1-E?T!zL~kCdCa(3f*5v7}G?j z2VaPx(W{P7HM*r9NTQxs(;N0)aHMEAx3;v5Y`9f`58K??U;$>Pt0spQxz ztdxCPhTP4-JQL$2LZ?wD74ZE$!?R{E$7a0!Sthrzlr^P!EOPOVcbGkV zQMhQ|lxRsJjHZocXczxQ<XTfmp&3Ntra-?gfVEIftLZx;hx!8 z8R40G3d!955E6n=z|IW}^a2?e8+mJP^9FA(ot_GsF z=wsXt`=eW$vjQ6cNZ3Gz7U#;y0PCvyfm|fLzQjo{U)3+2YDNEysU1c! zP(R4=%82^8-l&a@qLfgcZx$7*&~qsfL8eI6`sl3A6BmkHQ#Q(&nVJYPa^m%ToI5|# z=4{6u7g}(3c6DQrnJWAoF8tzTB^Wi=p|x0Qn#RbPE*^>5YSv#4Ja`~ZY|5-pN8q!& z<)m9&QGxV$-ydx=9?GsB>^xl2va9DK;A@_<>ntw@4@;m;jk2Z*#&p&kax2es;AMPs zqM?*d&Zyg}%ds1e)GaC=bB@-I`a?rYozgaK!M&a59PyDyDg}-gGVI>d$ZZr#M{J7E zQd(qZ`jghyO+cE<8+J2vA_9pm9IfUb=5MUaLimc%ODerFhWFm^D>l2ZutctNCdwwq!|$q(nDty05`xSZ!x!|teW-1Bkm)9@NMLw1%zyi%Hu#!)<3ZXfK< z9~V>OY9e2*=O6Uz=O{1cT-Iug)zxoa!$cL^XH7BDe61}l8XVI{H>=R8?T50WwS2QS z)wV`LYO!u8v$jvGX1n$!v{rZvD7!ak9blP}%*e(TnGNV`!gn_2Rl^FWOA8&X)KO>l z!z8I%Z{S_dVq#{jZ@CWWkyI-z(K&oacnW>jCt1#HZh}=ll67AvM+^UTb$^^2M=u?k zcDI-lrPn7&fJdne_qc@RfT}&=oo!It0S}|ucRX&ZrKdNcQJQ{Er~6+E88Ix(s+L*L zm9(0#(a0?1mvN3L*27L|nU`jzH62~)Ss}m5bklAM_@LL|potxil%6%Xmd>Ge-8Pe^ zkV?(-NzK-mielz)kmH&dtI_k^>lg{qzlgXs{7i$dr>@5<};J z5M8acfe&@PE)BK~{YjdZ!W{M?;m^xE?TIj15i8uE6&8D$MxB?+_w`wtN5)Nq!fqp` zk4|v=_BfuTdQh1hdfLcMp|yEAXr}Wiw0Uia$F9IAiw_}G#m8SZqlRcyOxRtC&I|Dd z+emP~9Cqj9<{vO=R4HaQQ6&c7SM7L=AFWlqvRO;0;&3bg%(N*TQH5^q5e7(c@MibL ztHD|+$9Hh0c^OH4oJFhQYOFd(GQUQ_khRH*u~KfhL4gQ{`p9>dMni$GOW&(u>lz(l zTij>KoS9MmN4cXz%tpf%Yt1>@z|tcex+~uJv#8tk92h67D_ZUv5nSdAIQR~JcYI~a zz}rUOZXg}AnPjXcjFqR7E&ELOu3D=hd`+y6`L%dLdN8=vD%xqnO9+6Nh$4~1#FS?? zGl~1Y4AIbfXrL8BHFK3UMzs)8*%*=CM(5=e>Lpw#O(e131DMmCHr8h}+~?Z=Xl~#Z z#j~XmnEfCjtTV=;rUbJ$2FDpg?#uE>cjP0^EvIEr49VVy{o!A=YS>-&tO>l67eC^F z(`V{zu5m_qtZa*`5tK!iG^T>svx=$}mceqKe`HSsF&|dWzyX!e8)=@~4m+xg|Vl$oi(;0tgl zY8yXD%xM@nWO1LtSs$-R!%Fvfi77D8x;sqyH+smKjytmow|IQ|9v{1;D)-)Ymmv3! z!F$^w)Hoh!eCWI}kp-|f_EdbKFAdfG&X;WMiNuL*hUC%H97ie@D1YpD^hi@&T+FPc z*r8JNj5oo~6(KV<^FpROX}(qq)o17``~@HE$+A3hyq=uaP~c-j!JsDoYSge;$%{TLE^6;|aA5l@ZRm||aWa_Dv1A9*xmBCKS86sd77dh)J<{Znmqxcx zyBtS(fde5s`nxi@vWZchZ#k4gQ0vAa<(Og~ZIY_kYV=MOwu>i?CHTDLM!HRdJIMf| zvnb?F#l*#|Li>pTzJdCp613ILGFvQd3ekAzG{NgPkgWySf)A-6X;shmP7Z*VZxKir z>(!V@r-Kj-&Git3me3l${Go@}NN}xLvWYEyN#g#C+B8M((mGnWUw0>YUslrrrU5vh zl8h~=tT_+UuZ&Dc*N2VD0M-cIP z8I{BIw2@lUdi=%pzGg9N2)&;_PU(yi#m5OyT>57D2pM#c`o|6k@@B5}bv=hiFeZOTF6biOOx`5{$$Ea= z+LnL5?Si<6N8g|99oI05r~iGpFvElS9r|o>yPxhACxdH@Qp2}<{%KJz123ig7^nUs z%9P*>#7Sl`BAZ}Z$~6$UB~+~RdN77^EDR*wPrX<_`d10=k7VVNGvFkW*8MjxC|`N|2J`tw=sZ$1{|Qimbmi&pZ_A-Plz zp_($OZh2hPmD~S=t*S|n?zhz;Y)1|=ehK(7)=2ftdQVHa-n2L*jyDxkI{E2oX|7w% zvx^AVk^$A=;B}FGzvQAXXric(sw&UY-&(=r=ff_MY;_@Q#+~xaXsh_7n8$e>3{tat zU+U$y+XLo~pq;Ec?9cd0jd+kp)Xpt+t7;=n+`LQ0E%ry2TFpAs!3$brn`8Z(A?7Hf zXgb`@@e_Q(Y)Wd8U<_oIBpM=I=}DC4aKYD z`kubJXpQWqeAJt{5S#neHbm8du^Jw4d;Z4Iv{O0KKW#*6Tfh}oVYNu51%{rHZ87VG zU4HA;-ztuvje&5jQ0lT~I@lyJ2J{v-)($$zruxR(JbR?n7>Nj8iwH(bFrb9_IuC^d z8_Z$*SUN3Y50UZXHn?$k_U9&Z(4yd7w2aN(Mfi=rTM-GTQi_Dq@E zTQf66p~5@eaKdILBE@HnZI>}m6=zEwhFu}Bb}aig-Wm}-Q^E!a*0*M-MychR&P8?D zwf7hz1FVjDn@v(p&ijiE52lf5$>{c^C}LT%lLB6^^+=gQDlR$A~`wr}ZNAdBkp}8M zJTR||X4_;wNwqt#7_opOGd-~>uK=Z{S`|*Pd~f`5nb!-qoLH9N`?vlS(0i^_Ug z(=9R$q-;&eRme~e&tpv*CC^nf_aJ^c`RrEMt4=aGSyd5T%`}~X2|H&y^Z5Wz;|%Y6 zY`9-IM75N!1ngdg-B9P?Q+Dw>X^x@51r3RR;ZF5!y52j`%VlA{?rwZjbh-VID`e~F zXZ&<1H9Z6a?$3pB0aV6HNcs@8t8BA6h2l*1!?WLo@bWj+Uhu-NYo3sQ!17`xf_r|T z;}GA+X++ctBbO`C_lS_#h_M$C$>PDT97!(tCwDp%2dZ2A^2kRL$J8F~)EYk~?$(T* zIq|k;hSOTp&Zu!oS`l_^-u3xL&unGzO1pLC%_Ds_4Znzvhr@iiVST(VU3UQ-t^QOY1_7K+qP}nww<}twr$(CZQC#Z7jYuqIj?Zz+`=l& z!ipKA&oN@O{`JDAyoGHV3k1+rQfu^`-Z)0aLiGg~AA9UP0#nv|(6`c+qAcz`m&>l--9 zJ?K`>xu_%lw<)b;JOGrf<bSEpAe2VJ#|TXHA|g$eUf;ANabw=+A~Q;>tY7c`*WEk-tE6 zHu?Obc-^nJQ5+Lcg>jSw8vg)D|D!k0c%64yB8&D2!|5Ix7O~%sM{m>|`$jKem3Q9b z_3hl7WLOfhSfw5cC=bcw>&?c5D0mrKj`fj9W{c&~tCawKT8bYiZ7)?pM(F68XI%d` zw9IRdYWRt5Fv^QJec#NX7!1c@DZ>7eP6+cArf$H5LOr2u zq4_&xMfM$fvEX-J!v6;zGOL~KNwFheZWx`#D84LxEV!N6TQEHpwJ3$n_uNadLKSes zJAiWd_YN>^M9q<>Y;MDn@f}cUIkd`{rbgE;?RcwgS8z-q5!hh$ZyBNeJiVakBI9I` z&0&g*wNeyLp{?4aEaKFBb%WXG4el9EO^wt3@63%<+UIAY_C0ZOzl43n1GtLraJR#I z1IwE`-KQ?8ZnM25*)uPU;nWHXc(Q$uG@W_idiG1Lmoq`GXsxl{8(D=W<@ff;eW3yi zl4Zy{*N>nT*CyqwU}VV{!u_2>^r6I5pyz3i$JDIpaPpyg53b8i%0#O@H$A0< zc(u^tYR|WLmw1S{+d@XW{By`d(lnG;;V;YES1HvtIh9!VQ^blaQ2PLFqr2+ zK`c}SjSd1i5-hBoCfvT?W_~EzY?qQom7J-|fM(q`r{&oQbg=SVr1rZbJN#5M%hY2R z3x}2jRmqzzH?Y~S<6|ri64o*v1)j*k^+l+PR+Eq?rP_)LVJ(zyP26(CAN3QPG6GsP zvALHr5qTLrD1*%cY0`#No|APc^Hwa*%|lCVapba@yI4#YL!)52NNynICj?D*#x8^rh;arE)MK_VKdQQv&se-ovkxv$my*PW)50 z{;7$Jq&Xq-!b{rOSoh~xhsm7!lEktqXDm`(fSNSQe*i}gwoslzk(T~ZJQ2xjv z{d%sLPCqKT;mw@4?&|O1Nk0d8cQdV;5p9&^4jis;w$=WuH!7B(;`V1-8gLsA(zHf^ zYpHE1@<~SRD6HyTT(P%2UaCBDQS3xjuJNk@IFu3b}7Di8T}H%ixr&1!hz(}iv_o8`W6f&;D(GGSdGZLsd^477%ZphpVpE8@dl;X z+O;ei)Xexk?T@?3z%9AE$nuE$24suY4)XE3a=k-L36nDh9pmv!E9i{1b{yxxaQ~L(9WkV+X#V{9i~GXQi_=DPu-{U?EBr^hnkt_uijK-I79V`FIVrQ7<_X*= zwXA;l<%d}Ry&$zl_xt+e=ku#Z$LHmXR`>hv$X4f@M);9e_Zu`oxAXIBqJ{S7;>cCX zz%*T!=ZzrExiy>QZl>oowzV;RnmV3Jwo!Vy30M(LSB7TC*O}V`4Zjl1Xwgg<-jjDK z;OsmwzRk_9sc|eb!Sd+oK}j)#y`vga$21$U)ndHILKml3n9ket)=x7)_ziwU$Ka9+ zD&V62su?%-rPCY0mey8w+U5jYiIbb#?%mzWsz2xe47ef{A#~X)A%q`$hOi>I+1o0S zeJ?E|+VFC>%_l265^v=T?pnfXqDoWrQ^nWWqcr9Hx>nRRZ<#a)z*{#3@n}-RmBhTn zl&lJm>~q6O30v~{^T}2B;(g~w*f&tZTu-j7x2ic8X4l)MbN@Snpgbafpe;H*U4M&u zie&hq&8$onJ~FrxdxV!Qe}c=*kUh&jTDz<~r=_WXHj2Qoq}{aJHkKtHfYe>m%-!;x zR!}Z$$(7i4t9~v7gg|)II%p%Br)^gakX0&nkw%SQ+tUQpaBwwv*XykEH2wH(B{yQ< z*d$v|eqcrWtZj|+Cjum3c)e#S#%<+XF~4ZaX;>ta%?IWdML^!=ohxqfwV4V1GZNmVglA3P(yVA+eEjE3T9fE~&>R?0u~Q@qmYUM4qFUOAB|USB zN7l#0Al~u&J?nTTWOBCQ3|0pa?``%kOD4&1@P*M^34+a18p#OzZv z0zTDRhH;*6&X4{5Hpbn@OIu`!b9qvetI@Xey^rO~yHuP6UdqUrYmd^xZ=e|hpZ?=s60RQ(6 z6iA>7r9Th=fbcKl@_+6GNr?*z%P0!}rxT>DC~KQRht%^xp6y^koTAJr-NC-gviz?0Ml)i=)Aq{)LG(QVv@jzDGwej-6{$ zac5=#22=hG9R?3*gG;fo@r|Y|SAdxgMLqB43YKcY#J0(I)Ky^}>^0l^?j;bYjK}TZ zH!NV8ukJ25i9;Gctc1Oavj)|P+cy-lob^Xb*s!%+}tJC@V4o)tJi7TKME z+f#~<$B?aU80XZwSZ%<4M}22l-Z0$57pC>hyn%%~k8VVjHGoxH6bi*#R{iF>7+onG zgo0_4BHf9$iql&r02zDQFgBq$ZJ(pkO5xM`oR5mh$4>i%1`V3{V_1RUcPQ!9p`y!^ zSuy1Tb@ulNszEsg3i+toj`7mWd+7?V4$h-l*7OczOz4DlyF=-~-DEra!gY*!r-Uie zI;U2|5&{oSpd~mWpHvIKP>0g=&sh`sBSV&QfjvrG>jlayoIMQxqfDlgf`=UD91os7 zjCW78QApq$0=(}~hL32O7q29V*N2(B8>T5@S)G7PvnF69aATkbk%f4IAdZeCWgc(E zP@KD3Dv*M8v_O{HHkt~d{F;8^5mQbE{0WRISFM&Jt^B7TrAQA|pqiv)5wK3QODn|%1O>|Y9z_H2>-B6~>}WbV7}DCA+tKQ}7~2@xI?x*G8=4s#+Wt0LZLMhkKSgdF&oBE+bOqnM zA~l+ZK$6o#1$red2Z4Z!LeR6b3 zoSZS&K5FR~dDn`RA*&hzEuBhBz0^x)!_P zMn#|g83TYZYbBgD6{ZP*rtq}Gwp4@%iTPMacnA~f$^u>0Ud&(0cTr&OQJ$42AKe%^ zwJ~YXM?>(=m#VZi-D;tjRCzN{Pnw{_S3X~JLIUFIdbu3hy#~7qDwyZYyLbe+$kUXa zk90Z2;u2-KLh56&pUqa9!uQyIx|8MORoZ`S;Uky_Nvssok+Dlnc4t?vd3(11>Kw9c zUNahE(M?gatyM#Pd1KK>+`dgheNl`XB$PZ|c#GEtaF2>P7fKfLO<{e;Bw;IW zjgNF$Z|t%GulmBX9R$OA`xAQS#y@MZbmw0XQ}UjZCFK1-0yhzZC>eNu7jf$k008&@ zej$w=oXkzk|7#7c73F0&=-_-_YS_Xh0;`%dNr+NPn)0NugYm})o`bMX=G_YIjdV3u zYj)VFwc}8PBd$1iymwr6aU?Nw=Z@8D;G-(UH#q!4q9?5N=|idC^|Ya@0SZLbHBXR# z(=y=qw{S!V|2cR3OPAT}V-G;$w#P024}^=YON%~gFg%uZr~d{jPDPc?V5z7)(+xG3 zEP6-=N7uZ9iTg509S}v{t?Q7b`ixZU+5?>4wDs!NQwLkmRz+NT{ zWHu~UqADL{p~y8)o2n=mluMpUa;I^ju(THD0$dU$LV2`hg74*QLR1$HY+dFMcS*nU~b#Gf|W=r;1vZsdAx(- zTB}v~(6NMNGJ$&r?G)eTuj09;m`bR{cyU@fYtoZO5O;Bo_%3}?(8?Z#d;OBFp^+`z zo3|>#mTCwd831jr_2AKI*As+IShYsg27PF~JfC4FN+bAsv_6eX6IlRXZQ}EH4(u|p z8@x4lUqzyuK66L=D|KgOA(0V{tFU4f&%YZyL=(*ptcB$}23+d!h%H;I&I>#=ml*Glo zcbT|GIr+_4MZe{!>mn9po0YvaxxiEOJ#b@Ab;EJc_wo~rUdyzBD5ZjLLcBacO4=B0 z!m79sV&06J*2ZSK39II4iy@Qbo;j>2)vPOX0x!`AMaD!OttV^*fan1a^2vy#gJN2t z(|-QzTtk79*i^mw_2^(^$zmzHvfl+O3q|1_V#ge5P?0)U5bw!>L0*HjOe)(xoRoHA zS9nYuPFQaGd((PCD-8)@Kuywc0F)ZV98I=g7;a22T(gWg5X?7~mJ!_~jx9VzvFL~^ zY{emgZ_KW9vi~nt_JR=&qJnTsu$^K3$NKouY=wSj(4%_k5ruem1^*BYjjnQ}`rE2CtX3Ea@GLIV3OwcE!Vx`c&XbdqVD($}ifl{< z@m^;L8TtBuhJTHV1KKi4YvAID_Zu*%ls2<_Wz_{prqfn8r`@^!8crFZ5rAPy)f-jL zYhjiJwjo%u4U~sdi%W>tqjm?OSDwv#89B=A8xj9-s*}k(K489lg`kS{C=y~9>nswB z^S*?%N~hc{LM@HW_IMAN_1&~2J{}zi@cMEcE%BpNkeeihCB9n4lg#{6a3c;I*nz4s z_&NYtcQ_ znu-<$#ys9JFuNk7keW388%CGHMdwp5MJkcaBo%~JTPSKoGNWdoMtW9u5?5@6kSKT~ zIN865W~^W7WFk(5gHDQ$qHc7A5vCBRep`MkMCwr4`)KoO7gDF*TWMeTJ$;Y>{Q8@= z5k*5V&LuXmlVl>SbLU&XSj11KxPOo)sqW=L0d2lKdxB}AV((iUp={5e5WIQ6$J}$G zSoWE7f4IMBX20ESo-+{OL{7V&B@Hwf9mxoR^NPDy)7cZE|JmuSE~kTNodp;Ve+4~9 zz}H#y)kr>3y9-Nwx$l$3BJ;0tfyXvZrSiP6Nm(auf9ZM1X8vAY(9nIJeM)$xOg*^= znd{>5-{cWz@-pUNXdKFPz$(bq&<=#phdHZg)AR*gTh>-%mUm++^!jvPV^&C4GD_&I z&G{y~z=@3DiH!Ei#EbbwlC2r1DSIGxBeW-_&hO)O&o=!Vp7jZkD|!xHW;0sK_4_%R z^$U$^&!yW3kJ^$L)yqrOIG+MYUB zTKr7Bf!J1sjs&km(OI%x52t2$zLzS!Yk%=l}PS=&a7~ zAI9c(+03d~-tK>LuTO}8@C>V_Msum1G|8S!h`d)laQHRjx3qHvH8&)>U=Zws zd=vuEJ_gespPQsJUsWXI$3jYOg-kmBBq}I(=7Bk=f5+FK46M*nPYM}^&Z~|PXX&IH z0dQ7C8}PQniDQe)Y9uX1Eh%IXa>rkkDVY~tL&HNiu&zTfWCl-3Pg)K} zCqpk?Pn$&0Qk+8rreqI4Wxn^8#&e`2exy>Dzq3sK4PMUI9QbRHN<5deQ)$!CSBcx; zA49Fc5Jicsd0FMK8;qu})Q!m6J@WMjDifxpR4KtM+#=?)A)UDRG7p9SOq`~f*Nh%o z5y^|`T5sSFh>nIbvnIV;94SxB(dZqHxA}`_J?H7mW<2NV$Gyw0c*lmb*Ur_BxE7Si zOU%pC6ZYF+OURDMOW-#rbxt6U02+@mEO9IVaCncyz!$irDX;dIO^m_6V| zX}rR1-3`}>yVE-%Mr7T%iW03&*@m%lOJpL-vd_gLMFyG;7qspG`O<HlRlKc*h|>fc6!CzUx>t3QbYbv2Zm3fhdR27V<_2zyb*I4(Y-*9=Kw z4645&P*_#gs(o>U>-ARD8>LqUl4<5}2d?Iaqe;)GFv&&=r^xU8ZdVIOe&8u#=1#WQEW+Od{xOHc_vgqqrW9 z9WvcO!)u+~NPc(k-&lTs5AN{Zz07=i8`_`4caR?Ku=BbR2{~@idMhuWv=}HP1BVT5 zYFf7nTsjHwU6MEHMgop_wOc8AMrt6Fx*gzL(jboh423^`}NL8^+xQH!TL=}RKU6x=PYV5!NFLw#$q^U|JCfc1czNV$?+ zu?24>U$p*1hjZo2)_n z>lVs+Kh0~s=}h(ZX8zZPFsMg#rM8~s2=6d5`@$91DiyJ}CFC$&@A&i7ZOc<@HD?Pn z)yDmP8T%Zfdp|3Hw7q-EG4%7Chbu0m|7yo$ zlpLl3ZL32k7M&mW<=W?PU}R-@a@`2L6D8{De z;(1g=kIeVfN&6jiChp7Yq$m6KudC6FPvZ@i%l81lcC)ws0Ppw0K$tiEXv8Xhqq#bSg>Qq1QO;cy7n*ctJCGYV5kagsKUrz#DC)qre zqVlmRhRe9Ou~tGy6zS{~U7R9n(LeW6=a@h?*4GvS$vUsPO2B%&gc>8PNolmWBgL{v ztm1w11dD0nFgiy)AN>T4VJxy&0mSL@;0P7?tz8;F<$6bG)$h%eoRv)aU1>-lW_HvHG z>7S24(wYmac*WfI$UpuXRfb;k45&d9eu2=V2xAY7#>PNfInzbBcsoS2{*CknDQJke zi3D+5V86ziO-EBtZ%@ME7lW{S?Z>s@(poP#{}MCwWUTzy!wTc69eghy-JDwLbe~-? z)P^A4bv7YhrYSl}V+K4OIJXf;4!GBPJq-|VmbM-{7jLBx>x&zk$lbszcvWxaMF+N`P;=B7n!V;jwQ^&{-;E_OT>s#= zM!7cc2pbh=z4q(?T4qut43!boT`9>!JB?wSzP}x7z)Y19yg8#7Y(FZ5z#R1vWN=`z zqVlmCo#|^c+q1n>Aheu;ugLvlLkj)^q-L&H>IAKaIV}q}q+6cOPG>_iw7w}zYjXt{ zPUxUZIg5>KnTs+yo_etEVs5KyA$diD%t=^f_H4-xuW+3i+`djrlkA8_xyk2RAL|Rs za}vj6Exf{NI=nQh+zObOSmTG6p&j9XWQ2l}?LHxjNI(`Pe4^}(n;f8;2>d0v6Icpm zeB-O2w+1?mm4nr~3`HW>qe99vC{zlRiHa;<YvQ;Q#yGNX+qh0MxxPOZ2~D2NkcF`Te=SKXACw+wR9N-hoL6C#`Pzprt$zD9&v-~_ z57LWEpV2jgU6^{IzM=1Uh(87$mJ}B=%&T-8nOh&700GecUccWf>8law=nq;AklFvN zg*p#7pvqeJXwS#3*0X@4KuUPpMmE|omUq2cJ{d_kcZK&WuO6BFE6$zjD?wZD%mq6I1w2ol zhBqWoQnNS+6Z{e1F8k-rWF({l^E9?~yO;E*YV|7rT&X(^)`a1*lo$>^PfQP}aaoe5 z1lxgu5rf!#53RbOEDF1yWp`mnYJyTyCxhvJ!N%yLS!+AsVtWhCEM;Q9H5w2`Lo?!t z+TwBxT~7zIsQxvt%HN}iDrN_xw{kZ#wPpYXyB94+!|6LKg5tq53hp7Z59t9z^{Il* zNEAOdz6qmHr6;1`LRGy+Hxf}n#Jb$H=bGGf3h-sFi`A{YqlEBWH0zeEd~=H0l>?1- z=6+`>i5DwD)0fR?#-Dbyj)*3`v;$gY~A4BGKZ?Hk4galOavjaJk4(H(N)Sot)jQR;WD%QX)D{EzVw zm;=oqGuU5!jtT&P>;Fm$aj^X_C1gv(+7Yt_{ySUO-=SF1{8)B2edrxd}i`1;0@vhG(6rRn^ zFE`ril$HIZt9y^T+E(rD$dwk?{jD!);%l4j?Jb=iPhnlv&&8+x?>(ElFV6Q6U@v;q zmGY%7oZQR|UzEnQV8p4QjnQgEO=3^_-NL|nO;V$su=U4iU1ANxp;IN|%60XHC}!{9 zOz20ef-Su#i^7{=r~Eu>WkMBD`x*<{L&(t<6D`|8*8axV+`G)Ok*f1h!>%Z9`AU|K zz@>{Ryvc4=6+U9B#R2|N`&G1xpQ#UE_7fE-Om;A<_GSdg4`yDZOF6RK<$6R`s&}FA zx{^Qj&l02QMMBhiAY7P(Xk2hei{o!q`m=rM)d=(DuX%<=lpN6BoX^lHOC}x6-f>7c zNS@qQomf44TAeH@Ppi=`rf~FY40=n--CN);TFY0dLNwZx)uEZdO z7T_fdj{Ffn;naG+EpLaaQTN6g%nNC`N`#N-{eyvz&Kje&BID=ud~gLCCMNxt*68i{ zLY0=NBKfwT4gvQrOaCF@j9nz+TV%j zru#saXSyyf>K@oX@zOZXj0sefo}t8)8#7akw>4F6DU7?npV;U_DsLytJswv?U-vwVghp+{7xPf=B}@EX)ddZZtUA| zGUj?;|2(P4!tP*|=zlc3aHxM^TAa%LVmFq0;2=uMC%$)k0y&3c9txUFB5^OGFY}zG z;Dm&4PQ}sxMD(2XkEn?4O%3dqp8*C&6&Mm&yQCwG*E;O|vlIfF_NyTUrI~{y^?p3P z5{sGHsguFZCX!n5O8W>+2@mhkL73td(HEt?Rkt2@#PKdC3T}CbvSyj0PkB}&7P%2B&#;R6 z5_TNu7bwdn#GHWr{6tlIl*|eM!Nz!cq>%FBsL>)~(J04wKv=2RReswtvZDYasERfX1;H#VR*p&Pr?IWC5+KazJi`dlH zeB}65Wa{A%ZGo7J%gJyt>6{c4_{=M#w?VGF$~-eF2rCrPI>>Yk;Q{^YMyz(59!^?E z?jzI(#<}q~=ywk03bJ!x3k}0=gYug)D+TD-39gh^paDD?Yx0F!<7dt@tFdxKxOMt7 zA_V?RR^XnJ^2g_1F6sTEpB&hnCcCx@+4Fuuu^R=_Lm=aoNc-SP^7ILUXAU`;K{8)l z1U?+=%`CMov@1exk&h32k4IXc$!5sb9~9WU43ze~@B0`APgabIh3ets5XuTjAP9f) zXVcWN9)RKmGZCO{OF+~}LU40yET7X`MQq?*gDOs`bnV; zUd$|j?h`F=-g(#QTr}1Eu{Pwfa`3c69=2NhHPqn!+b@WKxV`^md6zkVO5>pz@2Jdw z1`SE2$hvSTPNQpf27artomLUee(~N;1E-X2@qve=7=|H%LvZZCX-8!7TJCYrI)iPD ziVjiHQVe=GnrrU6lL3|g`F#HY&PU^P8zI616JoCw2uX8eVDNvD-&DSK!EVYZ4qaFq z57OpuYEQ&?ex5-I4MbKKGv5lz;I3a`H)l3Awe;tyE0E_{?q;~7-6USuTd0tO2lUk= z3SWAtKLEbt>mGn!LOJ(LU{$8Esv}h$)L=!8O!>_5zy~eN|0g4Z{TfJh|NSbl5aw^tTHFB}fk@yFYZ-y; zhKX)}4u3sGi-1)emWF0gXR78x9_jrPx4}wF-L%fAr0+a@d^3r+IQNciZxx0p(JV!o z?eC!U&0%iB#ehBO9d_zm>q+_Q0;~-~axqWDyDRTv9g=_4l`LGUK)R8_ zMYo9|8Ler%qxPlMlHcD70$Umlw`-W(xx2lH=!Fn=Jc{vJE$j-oE#y9ff-qKP;Iv&h zY=`#XhBx>@bnh7a5MMZ+U#822dN8x)R=vZamS3c#u)w7}b3T-qU6Vhm_N+x-8r^xac^V~M zDEXrlW+z#X2fUu4rsNM<-bNIo62nRxQ1&=$Ge=W>lvd3@hv4nqsO0qmDSaS+m|0Fp zAnS(!7KPGG$Qe0I6Gl%Ye*s%vQn8$6Nkqso{+Q17cILn?uc1*7nTKoe2>=Mc5L?z)( zGHTc8AUUF*rqxlM|Msg#8%-O_9M&5*sc^E*g~!jdB#2W)HBlEjD|^SRmkJ?Bm!%tw zisz9;6YHeTm0~#j!v(vKO-MKYzUnYH@Uf!acqqw_$SBILmM$-T*AMOo5KXbdj8N61 znIIchnu@BXoh`(S1Y*fPsT@7N^_WiqO&Ksp`rQ$5Ia}{v73lUb{h^jK5a0a}C>KwyU zsVaJUkr?R`ZH0VA%%wws6RlOdJsqZVfXQ}1Wfd@bwaYs`lk6Oh(@f7G77MZ)^LS0$6zYt1ou5yF@2JgU9Kp;|91>Na&IFY7S2?2a2V5N13 zP%#b--gH%8f}Bqd0U4pTcw>sDC7tdnY(v5Gb#bOed11W!TKd}O!Fc)F-wWMvh28&J z+S*#W*SB}1wYeF$eA`&rw|Gl@{V;HcZZG(PzD1N4)#eE|(K3&qH=oAKP8<(Y1Z8To zqOb|OBp>Ym2OAm6%8Fds?Nz7N-K|OW@<4yd8y-Q(8a_8KmD`n0d_ z?s%h%+X}(3t+Umqf3vN%72a}ly}iA?^J;Nn3(488?)S}URsOc@Z)@VE$_9<Zy`FoPt_aGF2Jd)iZg= zo}PsA8@*G++0CUZcZ8hF`_=2=hW=W9pik-~RH7ZFu`i7RWJV?m(xu^waao~~s@#56 zO;WJQ^!7I8)^jW5Z}Og{L!W1Ow9FJM_JU$R;lIsi=f&y6!^`C%GY$%EoIk-ag&7(S z(4k^;j(7^EqwP4xa0Q1Z)dP?l$H57LzixH;;`dz=tagl3|`snmC8|;zfX^oT6?4sVM-t!{(n+gMZ)Rj8e^vMCM#(Q-uw0I_`R^%-ltCuuix_;7= zadD!pJVXA8xI8?FK8X}}q765XV*iJi=|v#g1U z8!@3vQ7|yCH;97=u>)t^b-9pXB>C|Du+66oWZ8*BBO}y5>M-=1z8A?0th?6}9~r1} zX{lZig1#}HL9WwcQuGR(-UHz@(Bq)lhPyw6UonFjQ!X`&LcwT z$soV(GQ9OQ65iT5xl#MidH*~1_aOH6P5DdM0RK88{qHFob0Zu5|GK}^SQ|AdOxbL( z!F4~7gK#tZoi~F&*L&s@ual^xXeC5k6cEfo1Byclaqw^Zn3|a$*i3thn@vr=ur@3L zZ+ee~J|j^jRW~TsMjd^hIlJ`W5PDtP>^^V2bkMf!*!+y{+Oi7F@o-}1W_g@`BALF} zMfku#4u=BHEBUQ~aPn^W^!=;vf;^!)DPa=PvI*Fgbu?W_1!Zk|pv3y(3W3tm^7_kL z^7D)!Zrlel4wW`!`>kFHPLBo$ z)FQ*X*&Y_`Hl_gw7b}~AznubJAMOF9_QX*P9@kn74EPCF)`}DMUC)wpPxUaM6i_-$K=&?AvbJrs)kS0cBoH0s*CqxD8capXDIWXi#2f{GRZuuy zR|zxdCZM*hWQ0CA?YnWYJjOU>9hTtAWpq3Mr6&ENO^HD3;%S7l5&BZqT4aiyUD@uW zBBs#6mV{!0YUL`lP;6C^W9c#EON^$9CV+Znv8+@r8{s-W7o)%Sv=o0l1}5%ZQ!g(Q z8g)H`iu@Grjmg8v+o%c=+VDAVYOoRoy^V(-WeyQ=(L(qbwXo|Ui&1zntojL%ye3vo zuO3Fkb`ih}#Oz4j3kFk|3}M>UEeNFz|5jeKi}73LT^rLp>dGy16fK#>;|J~uO~L^c z^fNruU{WiZ)iVf`nV1@BZ|(ZLpg~$3vS}1LT~MeG1z9-r$%&vB-ZHM*{`FBsGLwi< z{ELA&0j<@9j|*Z}%~dZ^DcOdiOjD|XIId%1AJ~ylY9$>f)NwMp_UiyisO0P;F||#@ zBAM~G4M=BGGQrz?c+1kgEfGn*yKS&b?|S-jdqPgz+EY^1VCW_?h;Tq|ZR%wZa ztr-&loK~W%GJzUO2QX6s3uW?}2_t_}hwSKK4)r|>h~w0`&v(g2H0fBG=vk877b2WX zc}L0Il>{pQ%Tb<<`gvmgUAydOEvPPFC8#slEc?b!P=bEiC>bD zd5>h6dE#06G!=HuBo(y-lRvwf>pZ11v|xvu6WkLcuM!~noakQ_h8~vEftX33&~Bf- z-WJuaG&aZ)*}BqY;DI78&*KxUtU?c}n4yGWHp*xOdv}qr3RV7?qswQVFV{XhH`e^; zzblAK*wxDiYnRFAw#;tADcxJfi5AGXMqBqFn$gbHzt7fe;HNKMuqVYr6k^qusfl@AUnZNQZuZy#H&d z^grvXZ)$F1`d_=Pwaf%WKOJ1>3FYyo;7{IiKtPzBFJ2vHeVhq?$I=dK*J)9UJ3Zsf zAVjhmt}ZxqjSv27%gLo6iIs64gyi3Xb_$|=LYqz(&h6+)S_+Bt{6?nMT^H<<53Z*H zLo`~%!tbO7uWNdVx^aERlzcjKYEaV6IVU*Dt?D!17T5prZnZ51IA_oR0NtejH_Yw- z@7-wl<@g1~gts&_f0MaUd}eBT%}h)$(M7~NuCANC6%0$1S(6zPy3%+Ah{*H>5vcey zmcQS*Q8&rPWS*V5)0XqY0|Oo3rd?qkCA`i|=O!F#20^vUr^{4nJKt!HvskiTUA~*) zdd6&$p2>bKyPi8tQLjSte(t6+2KMMu8>co`w=zOn9Bg&=`ad?FZZPZAw!&OpD>9D0 z?roZWy||Y5^&K_Co~}lowx$L+y|iXEStq8xJl-Du@ZbaPOb$htJC}gUO;72%Tbq0f zG44Irn+sJKk%F+D}wY3{_lG`w8Ko+E!_LBKCNobs0c;+=hRN@k|K$8GB z9`qnOw-6RbZkBYXdeVwu=E|?Lar400zay90z!MS+&BYH1pOO2yq1+RD&?oy{b%mn5 z>)U*TL=_^Tptw_=N$A)^;gsG}l2iO^K%1t0lBGe{uP*{nB1s6DF*okypQQDE$W@nz zGIF+@4n_Qk4zU{-IK)fsAePVLDP-^GA1%IZ z#aB@OLZNa0Mh9Z{o}d1)OH`&2`x~#hovIvM?~0n9@A>T=nF-oS058L~i3W6{`Q(AU z>0WG^o!#uFh#246w|ub%^|zhZbKW!BjjYP~EG{?RjyTYA&TS8 zWq5u-C&SvsHuyhFMA2A)txA9`UF zjA{Ht_#Z)-DJ&yP1mN0!4dnY#2Vnz`tUDPdYek+yr4>|!R|wV+*+%%fUyJS1xoxHw zAd{I7+HbP)Tt1PKKBA9_M>Yru5)+fhAMECsE2ERH(qWvxFz$)i$^=6KLao@fJy3hv z+b3oOu;g6)9d&=vYuf{DYTK1)TNS!Oqs-8!Tt_1UsSy&pKv{)ZbTsgq5#0uIF2H_% zOhp^C#1eo&b0Q%^D1K?wY>}~OmScQz?BWJ)+&jAG^lkwwj6CBC75WsBW^uk06yjGA zHfX(!Gml@*nh{U0pBTg zbUkDdkBBT}ypD6=UD5lG`QN_#{k`*&&g6cYi4Mxj2iQcd7;~K8G5{LtX>gSlSqu!y zin9>U@U*6`9?GGJ>X@8aNneo>{zu3DkOER2<<6gP;w%7o=fFtJ+$20|O7(b%wgOD0 z3kR^!UrCq>pLj{^2c!d+61O3Fw8^0W6+KESAFqLB9h%LCoumA|(NNOu%>0m4pi?P* zQIW3yu@WC=kF0v-$V>!uY(wG$J#U7@1&J)x!D9vfS&%G0cC;3i5Wdf%8OT#I{^VB@ z&h97u=tS+oV|mP-dx2*~i;G;>nG5$cS6m%` z!VfP8-Ans}3OBUskBw;Gi)cIp0dCSiHv9Loptj=j17t&b!GB?FJWN}ssXiX#a_Yt; z^bci1+-5sGE9a=rN#RmbRuk|eICk`W-t$qo?@@IgG)vY!GW;$qnz+$Zz8#T;ngxtlkfqKD@A?+bR8C`LKB1o4Z@}bOr4)~$hflo4o%Hi@d+e7bGfA^%g;)>7w6zq~F#qyTyWlA2f%{eZ2H?Er+VP-21|#xzJKEGL zycn2Dsx;lDMqMHV`~o@bGQe@VdhbVx#W3|7;Q3UcLpQ4tTWnvVcU7Q8g=WXgY%gK%PA+p3&Iim% z?+}ycYEM`;5G4ciYO!2z47mB$3fUIXdZDU4=BL`lho!H{o#uDSiS=g(0T z8_F5nMB@&GQmAGSGRqs^rJu{pw098;j+AxKDK8PJsD^LM|M5NutF&-Jf@pgI_n{En^##nBE?@qla9s#)egny{yQXpRG2&R_NH zl?A}0S?7LqsP2=o6XqRpffKf||BwdAn zW{|5lrsQrU#Ql1EKR;YSmA^4L^efqn?Hk~NLqSo|1M31C}(;|iNL+pnPo~6B6CYcy4=oai%pV*BHEq_ePU4Ns1WfV z+o7k0%cnHJOL;hOdz;&7ZUl!zx<^2?MD!J{_#}6^5 zf){*{d0g9|?cikqXrbQFD#BH6NkK2~J5*kb6n7azpc~M(8C-?S{C(HF`OV%9(68qv z8d#X1+N7J4F&H~&@#b1I9LBb8DZMxN3R?Y8o4OGb+mpgGyy^Ql;pw5_KV2ApOeUE4 zgmtBgZ>**s?*4%5UQ)IBu_C!w>ByCZQfM`FH&JlV$LcU?P#KGv;|BbUfE_R9Rym+m z1>c-V%&Su8e#s3DFQ9L57xrPIuyUK&&0d9*Xlj)Jz6Yeyr~tKxt!^?emQm==kwxBdlJdf;))=1nMxp;90G}w#rYwl*@9GP4?gZcd(8k9 zH9EAaH~$ZN?-ZqLpKN=kZJR4?+qP}nTxn~iZQHh;E3K8bZR_M$)xGzr>aj2C^hJ*z zi|oui1l1br^}>FrEi|9>BEQURY#N5Bb$7O*Bq%R=-xAq71-_E zdWHw6{J!n}_xhOErFjNq#}HYrtd@{$8VLMCyo|>S)w8|bk}f)fYnO(MzrXtubi;3` z$e@`gY#vfU(TQt2+(esNK{Vj+U;zbdH{&mT#~c*+?1_-HR?If%WI+3xE5A3KLt-ih z)PUwvfVFF`ZFxGpLxO+|$JHRk_1%kqp*!lD^P6Y3`ERmUH+z{yt8o9Z>}27!aUM%I z8cdDLIiBKT8d&r)w13#ma-V^U*}#BX&SF>;V0$^gW9?o4jSq){VY zSujc&g+=Xy-U8{<0)Y8GnABP4h`^2!Dn26z?w~7*Q#^jEFi&D}(bElxxgCYjy}mu< z1olpk{tL+pNRyC&?y^%nm{Tf3&a?1x-kGP1+UusBrgp~B4n|JEVveKDx+IP2x>*x3 z8(<+Wq@D^DKmUlKRIG=1D9e)T-BJQ8tWF~%w}XCdSS~NDrBh&8;BZ`x#vX41eM|4e zFSoAmc@d`;c~_MYEAl)IQue68uF+Y>6&s18r3WpKu-Z40KV3iZo}@UzRsku$L_z@# z%!f3RC!rcMhhc|fYmC*UQKrb!T+JPne($vZSbH@&mOS>%d?<0Mpy{M}LM|FGA&+Xr zG%2)n=w;pA^WK;k_c#nqoHfe$Ggib%6uW>Hr?;g7yRsss8|>+{=U*SnG4jx29p8Nr zeoz1aq5t;}Wm-Wc;Vi{}t|-4LabGM*lFz%Y%SJl{kOZXJ#2)Pr8cbc{<@aFVrwYns95!z_U{qSOUFAYUIpIJp;n{t7V!hSc$H@h0P z5HQ~o!pYP>FShkMSp_95x4Lk?thWt=xLY8ElD5Umpv~r9&BNQ;-X5M$?5%hZvp0Ho zYakc2adhe7*P_k2G=D7@OJz|9Wm{1cK#0hh)36^PJ# zvCJ@QVBUaE8?aCjXh(6H;~cEX>qeu@n&&@25H0F(Uo;`W)N^etK-v ziIwN+@Q}v%Q%@7Ykqm(v&2eLv!WNlhH6v~LrxaXfmTsQr(nN{v^@EF*o&zBqwkZ2z zH@3}&+||xV6zIMdvH6U#U|=#;LqP=apQ3oJxLcHDPkKyn((x{&vk89EyF@D3M)8|Q zdP!<3;+t*gMfMjGZ3NA8f4;;BD_BMU<-|6AdSSIj`hf4*h`w7&)FDnl5I;ez(IHU` zYbM6c>}vIp8fOYegGYr?$y6fys@O;yibV@JGiVaQrW~l) z*|f2^nErM@4fxHNr}FN0Jf>;gjhn-Cjs|*DdFM!QQ2|{vu zY4_Z#1#=lFu!v?-F__qFKwjwio%Rr+x~GQH(IdfG7<12q4xd`7@`M7}=P$_}Rc9TS z5zC3{I$sPES|t#ua!*u2R#HsYyUFzoK19~2 z$1S%IW4)x<8Sd_-*2ejv;O%z^T7Ek+Pmka`<(S!KNauv6Z7%ay56(4^{7?_C;EF6D zpm&Ntw$6K)mgesdNjs+Jaiq_*o2O&Dj?gX;-3~0b0%sX7h9l}?b7$-Nz+S()f>j>) zE4vdQtZaDvu>DQ#h+Es1-#Ge>g)+5;a3E<}2G-+4TW+>#FZ2BDS=*fOfjM%3NeOZw zwY|!u#n&8-6r2-@iL*%dwM46t>`wn0 zrh0{T3|Ng{^NJDNEqX=v#*T5?9=DjYEBynXh_`cKP4A=e_yhkA@_`93X*C^q3CI|< zNR^Hem7>x;_<_5YlR!O~k z2+J;%2|)^%MeG7OK_7S$3ToU%(5A8aZPP>%2dOocj6kMVk-yMbQ(T7k6icF~PPt^R zS43klbu*UApe)KEq)Hw5E+}*|DHvl)IZ)OmpsX7g+Dkc<`Y|~P z7}Ku}8S;wLsZ+bZO^5W_VHfglHlqu=KncDfDag0A~C%~FNSo*`+ zzqX!UjKNQ`_v>zvD4?oxX{Z=1Q=YrVO}^6ai0hf~?g!9KgK~a(uDrCV2_@*GFIHkzeQLA8+APSWaxQ*YE!o5kA=7dx##)t(j zMER)_2r0j)psTQWbwI>QHyGn5~diAerOd-lcqavw><6$mG$}p%HrnKho2otVBEf9$`V7b+8l(JZF zQ>5$hdvNdNbGVGF2j=l)dnYfe_x$E&ykuq18mt5T8XPzfbGrE9(K5H~IS^aa9U}@* z^GsVD)YFqWfg*2&SU8bEI(5ggoq}-A+4VkfL#NY)huIrEW!CS)z&Rz4<;K|T&D7n$ z3tQF*X!;L+FYL`3ZFZ)%*;BI(5I@kQ{L4FtNOFhUcqV?7v4t0MNY1Z zx7ol9M#$*cb4`#}&{Kq{{hJy^)fr4CZGjkYw?H^x%}Se<`34aYK-XO}3#97>gxDYy z!jrN0QwGux>zF8>G=o<*&{5}<-iq&a1s(atFLc13NkSW)m9*c795G zllmEZ&&dwj(g0m4G11ObsN{7s*p!(1IudnMOEwlfCCdn_>BSi?*COIUbCDy33 zihR?}X44|Dr1^aJtN1XPG2>VtJH$g6DA^-WXyIAoVG=19`#aSl44mIoNcoh>j@0zf zA-bjOq-@ed-AnF}8L_jdI{8hZzCQw}B&^0%1sI2OPuu3Sm(u$b!>A7{Q?>6B%k1PK zPzTCUrNl*9q6Q)SB@D37epb0pM5d%mXsD(Catt`z(5Ebo+cifUKsBk2unU50gUuxj zO!WrJ$lPgz`8ix@9>#BASk~PW;)Rh*YKNC+JRU%&kyby03TQHbnz3Ep3We@oICMa4 zhD#HQnn#H=-T|I5C<3GhF!_gjv|DF*k;=!Dl%bxvXNZS{@8A52*snoh@9&R;d83kdUs!GTcwC#}P6NQzI0u zQyT2qO5@jZDH5OU>>i1fu`(cm-LG!;uD$l_BQ`4I(*t+2Cgxs$h^cO+!r3WT0n?Ype8$0_GsCG{WBr+EfmuwlWm0h$$B)Z4KR^#k_7r&{Xx zgg{*oAF5?)hCqHN)GhBbbOKg^=ypZj71%qwF@94Q+2v}T0&@>5^;X>^GmSx(Fsg`d z!z+E%4fyq|3ZEE;b+B(SD9-Qf%+^|bz_ZPX%*`zKX3SR~f)mV{pA(t=Wf=F^j!f&w zVXJM1bcQ`(GX^oiKYpGQ`SxZK9>IEvLD;_3^Y*pO_LT6%Ow+uxhFtzIfa>dX5Y!bT z6p!M9dEQ-nW$=0FPaNZd&$Z4GopIHp_ui<&^JHqDV$+kI>#ZY~-4(H9mqadbCSQ#Q zU2yX$=knTHf9%pjq~et;SUx-={8c&JluzpOXUj{_yA)uNW-86MyMeT-(lsGvOua$c z(*V-4NVYTr;9{nmfLj1^uM0%iFoq1{v!eNplxXVMG*#4_Nj>M4Ft&?%$gW22HHMT! zAAkia>>e7Q|D!f(<^)NIH>HiaBZ#Ju0>UYe*#cNn%tXlP!P* zI0d)n&6Mwqi_`}1%24nE5F&GnQFF`P9C-ad{7w8}&iM8>_{{zWpZ|IBcQkQuF>(6u z;{P}B{2O@w4Ltt_o__<+zk%o9!1Hh5`8V+V8+iT=JpTrse*@3|{{zoEwSNy>?klSr zU;CcOwX4bhmL#bXJ0878fD-b=Jv3XXITp2A-CkObggqjTq1cN& zITtP=n1nGt%p{r94K7z=!KQ!h`@;Sc!?u7gi@1}kGjtlC&wH%*Go25nn@_+e+u?&V z#)eOhZ{(`P>Wr>JsMUwq_-wc$hZNr<4DfKw#J;x@raJFVY<;aea7xbM{*8k(%#5!O zCHkfa7Z+zBEC3tx&;cSL5FLNo&&>kfDX757@3jGY;}eVwB&>Q|A7h~5N;}lTW^hQL z1AaOh=d(K>einaSv6~srZK6eQV0#tO3;yCDKD8@DHE21)U!iD2VbTwK+45l&TD2FL z#oY&h5?Y*Sby?Daymbuppb3x?Bv(qwf`iF;#0E6orc|^`5ISTd(1bQUV0?0S_d(UZ zvb94XsnC?O=30D7+y1Q)C1qXGbOH*PpHe?YT9aM{>Lt`-lHa}^4MwsEGD%LqnfgfC zIIKd$mg&C7JC9dwt`;BGG!G0)b6!SpCbrTy+E`7&3We3uE6E~A=DtXk1;PZ0o;kz- zu!&j2!4|@baajds)|sd{erDZ~BmqmRsyLj#K584A)G0aAQbDUoVR>5_T?kCsDFI8x zXx@GSDGW2di(Yod3CSER4+m zo&DWWiE>;>ns=-k*}<`gtMrbtXB>+6LRLdW*IG1wbu;~VD-R0dX4~?)5mHFo(0V$2ucSWewRghiN5d*5S#PhUpXF z>FgVd!~?uUu;g0a0byY#N7*qxjvekWYW-8tw}WPRrDJ5ZANYr5eg!5EuF$Qq>*gAP z6ZqF@v^w_`QB~R7C>(#+6PmWo@j8k=GjC)wVKm11%)OEn-sV~t&sqmi-_bp<;M|xI z&@JY`O4FmbFVjf7bm-V z_Ihz8znh$nt|TgBqUYIj3)2{?29hQte5H{~1^2|3o-QS4vDg}ukzR5X3hPwx*Y%jp z+Hl?M0joBtX8>t))Vf-{)b>{354-6Xh93Ut?MD8%0><0?!=t^lcQrpxwUecSg7BG0!M!ts#7maNKaOZ%Tw3syJ$R=LE<|I(fWx zMuZ`()F7&&5UJxoBf7bgwo&5_v`MhN>WfB$Hb-V9j|14%6afR{DQMzthEWo=RDMSk z{DlR{RiRYer=UNA%GH5CBj8I}smH}B4YizWM)7~tuT#}+nlF!1AE;|PIu9pf_DC3% z{xBknAvEF8y2B)i6A@u{bpr2zEkQbAct@f!7GOZqFb|%_P@?<*+z5{t=}j#Ch9)F; z?D;N4f>S@jsGg&ORbjVi1BmZ8Ro?><6sH*f2~9$C@_qkR!aC|M0dC(CrvH{O*MBTw zXFD6~|4Me&Q5>`VPIm6PqXOd~@r!Ndcoda#7FNb4=d6yY7uK>inMEkWdU=}~m7PPO zC$LX$iE=6|W8e>3GwhX@EX^$KoCv;3;M>%_0TB0i=TxH|F^ksBfz z3-j`FKz9Gm;Xdbk63waiPR=>(y(FK3*HD`_iLv>u`6p^VA?TO=dPBPSAx!wL1>K{R>g|!=g-89MzA2zJ^OJUXoxCD z+R1kjc_XAO%8nf=3u&5$_wGvOGIswSOoEab!u-B@3_1PMpx!JgtPnX|eX5@UMTv+% zqE~665gXM?-PmsyM4RNJxA9x^F9=8x+eCR6rjXgHKugf77Dfdn0-N&>JumFyenUW} z!E%c<>TX!R`hS~Q`rq~ZpYLz|L(h6{|5cU$R`lPB{{LFhL-0_we~~-h?+X2&yHjUJ zmv64&Z0Bh5-=dzh{Rgz85Y5!2IIZ?r|BKnNh7*q@9$+8|bwV*jOy+lgOo6PHe-9c( z9=&CRpU|Mp@n33kfkDHob2BEt-mUFNdk2L+B4+#Y@(I}(!3SHt4a3ET zW;w+rLp}n}Cr~@k8{3!nJ+x8skD(2VyqoTP{w%92IlY9|UbvL+nItYF&KRl;)UQ=m z#n54RAB^{;{3f4s91^G=45sIW^AA2Qv$hTQd&Ga3kEw6-!57?(3HBGZlV6I8)Vy*a zjsFYVr2|g+q(5|zcnN+q`Ds>7BwGR2he%earG>+wbq;&P^{S>ftzz^-PD(WZHv#Eh zZnsc3fDGnH{%Qv+N~12p^vk_t_Br4FFbtv(6Qro$WKibXNZ^Hn4TP^y)|O1b*i* zhv0-8K=gImKd!X{fR;f#I+(JSX#t*jny3ZlL%+xUY=_i0PuB8 z^ktXW2_tcZEH2aM01KXWeM7@jS;X$hGXg>wkjr@|(=-gnE2RIB8!x+PC4w`m6r4hX=6eIAm~5TrjI=g>H%b>r#oFrVc0;cZVY8y)fa1fPUoLmMoQ%}96~osS zE@Ojq_M1OaxvH93^oHkhf`|FZu=$G5m3=HUIIz|pns7(F^~HMgYgP(S<$LVo+m1j< zs&xKtOC1POd(Qq*8|R@>$+8`^+qNlK2as*IlQMAx8Mak~qyidj=%`|3{DOG-=W;KT4!Zv?TYJAE|lvvm9%PEXB|(@DO<=p!r=DPbURCPLu&nJq1F!*C4%K zI-{KK&?c!rrS>iosRf!(E^5T)QmgS#LsD)Mmk`xB+SG3rK%4ZbzA-BKRS$v_On^=!ROFk~Kl8p1eggfg!-n?)X;Auh){5VM zSpSp5RudNyk%pcYmzkV}m7<}XnwV}-q+ej#c9ffxqLHK?qpMdGA0MMup#Q_f3}$782qDHivmR%>+JC0sOXgRP{k4O-$Eh@-ed-gzNe%9 zAOZm3{!c$eMnqXaSU_2zN=?CTjTOOXsfM676j192jm?t5@G4DH!Z3e2hC_Xx92`v+ z32S0$ys|a$$4v+EfqF!OCLS6=xXh;8)5guE`#VT-$@=ZJ-Hd3dW3R4=U4WEsub)aj zRP(r9!QQb7ebujkvj@M8{a(_uG06GY(tJP0;6#n0A6n#-!WPsiiiwy|E80nwyJI}l zy~2GGQP7-00njH8xrE96z~U--9FJm@kyTZ(q|8Kb6^>9uMGa4VEM8T?V8|X-z>l9B zXUESe`XHpU`Ss!~IOTJK76TbB!LsV=EAFV4MuE_A{1yb$S@=$cF=$x zy`tG*uSP2ij#}8P7`1vDqokTeE`n%=>#0)5+r!2Qg7%6fK)*pCSUv8`h&>A^<7PgU zY0l%Vj@5@A;G1G8A}CfsiGro?@^fo-uNf;Ca(`R}I{1-$dw7>}f3#5^yvpNbP4~s_ z4G`AAh2r1@9zRd|$2urT#~Vqcs8V6#0|491rokG;q?YrF0jB#ez+zuPZ|o|xkw@@5#ADK*LV-WQRz z4Mpn|3OhLqs;9WedsK!K3^a?P-R4BtvN!BhD*fHj1}N_;$N0VtG<$X zpYi)%Rv_aCzk2)x5kRT4D^(7H_i=w27WUVyHLhpBS3fDQZdd#%bnW?(eT-@2d3IaDr#zt5Z#akgl2%(JY z5=>mi4buI_L{!G+RhYLbi{1#5oH9hsK7in|S$L~=hA>Mf%Q6sUQ`5Gs~N zU^qxLCruCdaM~d6aH~n`Jhcti(dfSA3aj)f7H=TIbNB|!*g1e3lV%%>IX)lQ7eMs< zrm{{Eis*axV!Txwuc1^WW@B{Hc)C7ACiVlCSOd`2*}CvK48`RtGar z%-OJF*-SK9y+%KGFLn@G;7vdkLpih}cMX$M(4)h|q=2dzOqY&hrpBy}^U3DNbRNq% zeqFf(xNkT(><9C{c;^)CP67^aSrVl*GOm#&OyjVS0Ee8_59t7XW&b%7NJnH=?t+_# zS`nuKuz6%2-&`ufq2fS`DU^_iW?m>y-Dx&K;U&FPY6S|`(y5i^;oD1&`8-;H>$(C! z@uigZQVd(?b>CeY|Lpd)+A=So*c!T(^$lBXd?LGIG?*=(dw$6NOF4v0#rV?r-@`y) ze~?Ia+7y$RRlW)w2vheQcG|)(I9i>4?D`Y??BkrYhk!y=Kqa+`5hVL3DuY)4E;c)d z9O}^6_n5aX$=2dAVfqqYd(z8XBpMnE$xhqZ>zEe-zhYE;)|R+>lqXxI9YEL8aMFlK zu4LPnbj6>LaQ$tKA7Fbx-V%JypW(PZZ@;J7J}iR`iCtPUC)wQRW@m`x!+;2%y92yY zc6@~ut@8)d?#p7w?2DN>7F z)4*Fe@iZ`JtNY`FP0X4M>nmmzVQ=5bwS`|7PH`W7w@vvD!>V>rZT#5T)rA#XS0~yw zlbs(dkes4$W7k-7fp~K*M~xZcQ;8iI3xGdJ zm?}X#4+8U>DLZhG zM3VklG9c6A+Ito@S+-q)Fs~>fh5;q*Os{!z^SII5b!4pzn04`H``8;Oo33rm#RA4Jt-9;BPU2<`Jua zK{OMnsK?e*8r9^Va+9C&0bDQvn|?cr3w1e-OX&IYX65o3?TI`H7r)c(r4nmz?cZlP z-RE@Kk(dzs9Wupk;X+F7Cdk8X_k)*yb4a$U?RWEc0&YCrpty_&FtG>nXb(rza8HDW zkN)sm6CemMyy~o$`DKk6*mk^%Ufs26J3RT22DXH6olHc}L_^}HHpb3H<`94JM%`I> zu0opg=AU4#dF| z!Q6*1qSttJ0MCBzq|gk$+`r$GZY_Hl`p)3m3vo(@_DUYcQ*VNzOsPlfkUceF zd5e{@Tz5OMp*)&ZTGu-QNh#25ngGO5DVNqZ6oVr=KvtJuj|lUpSOCfmSkHlk;#-d~ zC8l2O6O~(BN{@9nh za8ig-4P(@~nUx&%ZWh_qg7zR3==y=Vxyi|zcHAJZggIC&YA19T89g$)`~%z_aj>}N z=tKvg^8z~@Y3!k27Dc4b%LWg@4-&bpNct_r1W+%%aDfyzZ0^X7H_({JgOC++{=@xd zp&F@N3E9H$udb1h=>CEij9 zD4Yb;(At8YREfEuTZ!}B>fGypvC95|Kg&y-9SZ|QgrpPr&{ru}tj3$O9}#qpK=pTF zUbJ1bWEX5C=7;+5^HFMRH+Cs*XS~bSo>Yty@-iL@byt8g{~p!md}D0}-v>0Vzy%`A zA$=QHnOvB!UGgpk%*v?hmpI&EGCT{T$v8 z0&aO$0h4fDvSQ0hgq>h>a zu=Ee|=F%%1=nnqu74JNSOg^Q~tvN)9whXvWe07mPnTDo*h9%|0fg|Xyl-bn*E@_ z*`V-Cbf9NpNJOQ#ga&|mg%G?n2S&px`jFF)4*s+mR{cG1FFn`OaQM?G5A2$*6_V%> zp4yu2@@OhkNr`PW_-uIwQ`^XEP5mw*1~T$fYLiPW{*uN%}1l{*OmmyODTQ}hm6}!5`G7)g^ zDWWtaOU`hC6n1mO`}Y2%KcHJKkbE!$ZR7B4oeRA5=!am6)fSCL$jesA4p7lPvTYr= zDG%^{lJl*T*yzzu11AzG%I8`H-k{S8qsjA(8RSCQMjiY16b*Zt6XPa7EeW3Y7~dU< zYoa-OOaZ&LWn6N|FcJ_7!_%-a?JR+!i;2ps3**H|)*QodLj?GKJI%^|EU`;jUV`Y~ z;VIC1!B1HIB%%d5B{&EZIbl&UQC;4W8{$U0JrwO;Yem1sS$Kecan1OtCPs_f!5Qb3 zBYC$T(k$sAad-u&S4K{ppp;zFKr<)|u`lLO@$1B8IOuBAG)m3S$=u4T`znu{9Cyf< z{4A|~5ZSkrI{7)5Mr6wi@{?xu9lqtwkg0jOZFGEm3_MJlSOv$4x%pa+qsEEa4!Jak zidS|m*7gAx&c{vROTXj?MuD1!XVC5bGp$Xc`@u{rF@4&YZr`PlYCmom3$io%>UnRNH$lvvU=4Xpk}%ZY`5 z$ju=eTxMGz<(qI(bNwXq@Nx}NF5yG4rxmV?qu=D^>sqK)OoLpM%$U+2@e?mK){}C- z1MjMwJyy>+a!Cm4GSX>;E{CTbT;8WSapX&xd8W)r=Bk$3;lXT@79W^18z4UHqc zV@ds98mC}UEJoYR9!MS}Ch?J4mWxO+hAq!5-$lHkRdH^1{$6M+AaHA+H>{jM>izzu zrsjDe@6;&^Ev0-->6skGHsrU@=xVa#2{1S-{?sWxGr@5XE)?PMo95TB+ykm zM5^z#M6TTaPz!FI(gynTMM5V7n^W0Gp3JU#ZnFWCaT)u4Zyr`7^!HNMV9^blnul3I ztwi!xat`S?HHC<3ba;ZR<2{df^FB6n6Aa*mTzTiJ(b}aHJbY^uI)2hA`JR|JUd3fyu!Wf|< zfYL-spiD{wM@+ad1~yT*|k&` z`zf*9;kBg+JnH~`1=5z##Tiv=Yo)2-hIdmv6kuFvCy<*2KYgEN=O1c=w0FTGU~3x1 zmG-JI|2XKb0&&vbFRUWo_yL_?7*UEh?;fKarR6#)#z>_FHIV;-+h1ZsBL6&6bX+m9 zrPyj$UsVcn8FhjQR+wPE32bJ4f0@dbFCEk944Yr~=w3mup0G}&d!8ZriJNQwYMXgR z^xk-SaG*H2v3jdOnaYhn^N7gV51Kq2skNx)i&#(}sMhb8<9ezC#TRuW4IiM!#nlv^ zRKROn)9xmC##kNaX+wiW?{{YnW1y-O#S`dNVaq5K@Rf1pPPuTVDFPxWi{{Pw9K+p% zue`G$-h?xFbfzHF<{s9r^kQz;<%#IJ-*bL5jv(Rbjq5K4Cgs?C6?=YGs)No~mWdKR zZ@=09sg39Yd#P3ulYd`75Nqe4)nHQeAjTw=GMR0pI+F5}@Vt0Uax&#F^cj_oN}*PXnRadr=Ru*n`vArWM>FjZ zh8egho5fZmFetpxUcd{8D7o z-Q5M7hmuW%wa_`=4L*$OjGWN!=-dM>z`35D&Le=Lpa zHT|1i2NN$n2Eeuu$D7CtQhO=ohBzqK1eRM2x9~r4A~hJ_KD?)To{0ga;lN^102McG z6}n87a_~Df@-Wp~Iq*y(l~?x!$IOr6f_qSLK4-S}WJbf39?KCLjb(Q>3fNr~FJ}~} zL}4u*s`szpZSF7QQY(%zz!+l%(7<){812Adk7!lc{w;YF%Uw0rKs;Ra}MsmO$h@@^v7w~sdzMVZ*r{2ZQj^8H0 zS6W64btyC}p7N6R2&g{^PP4>|`G8h}N0}H#OfFc6ZSz$RCrZz+F<_dRSQ7)F_=8+T zh2^}!3{%C1oQ;I;sCiv1+Fmc86?O)aBfW*c<8{uxjfLl#VkLSb-X$~91P$s%#wpit zZ;G8th{=id-r41M3JIL*0DtvW%kVtTR+s`GH49c-rpJ%_|2{D?+6@twvbYdTn-Jc) zG3B?%dZm4($XTBle0JiGL82~sA{k>61$Zu=Sq31zOc0TqQVFDRq+8uY9E&=zU-^K3 z>8kYD8i?jOa*x{|AwDW0*~t_sYm}WZRf-8)S~)tECn)gnEWX;3WzZenI`zWB?&#fk zGMz>yc|`$jCdHX1do@R{bP^pyf!V(UrG^aIwCQ-FJDwbT=zAXGuXzqboSU6arnVemSb0=kMK}?9o zl4NZK7<$%E<1KA!kIn@ofA-M3cAjo2RV!E$ww5>8;`goPL8q@IsATV$*e_d zp9<8DszZ~3&*{wNOw;gS`fQOHIB*X)$l4Q;o_e$h@!#v@W-rjhXB;~G{NvD#Q^=t~ zu1Dly3RE;m+>*wBl?+jlkCjy}@*1}fR#NQFmf}V)EpRpdDf}cM*E?#p)#n`KVT`XH zCnIX2++aVHEG!M%z(VN}tF7}jm+gp<$@UW3lO@iRHa$Pcev&{#Ygf>b6SZ;cA(|WY zXi;qk)E44uic8re2jP=`o!DuL&{u^8QsQEvjGa*i@__JjUkIl?WjGwL6qsdu zpK$V_((aCAN6zyp$cIvQ&t*}EO~EBdWg_yM(aU>>5fnpIu;%vb^8?!w-DX*e9XbSOseIZpjF*ewTGH^`^AuzHvo>(Kb04|U( zJkED|*%t0Mb6#%@Ob^B%haZ@}Wh?5C&dO?Qo$|pZc`z9?OYN!fx!(eXPD% zHTWG?H%;r81Q)F_)J&Lh!%VGQ0E8uiT=e;C`(-r4%qUU4b-`eU&~FCE8Ak8iGgkp4 zDgLIma--mi7}4kp-3m-_ZK~xsvQFs7-eJJ^GPkc9Ui@e+LcAOq(|a&d45Tu1K4mwM zG3l0LtO4Tn#e~B%Fp7HfCQ_a*QPZpEU??QnTujTSTu7g)XI~bTc37VC6p1zQcm$Lg zdnXX`f*KPUV*Naf(b-Eu8dqdzJ1%1lO)wvSgzu@;UhS-o@y#)dzYLZ(&H#brZ{vTzkm9?;M{)?i zH8cH)a5~Wd(IT^ux6E%xp{XfZYuMV|==m@O^TtQl>qoZms!b=$sl>ravEQs&a1qE{ zg)ZuZFV~eOtm8ZEaJJw+)Rrmq4 zL^0-ik74K)?sF6JT9T$epZ2hW4}9gUb48G$Fi&rIs10ONp{I<<+H)d{NAi%t9!e54 zGjSaW#CTr&UCZ#*GpK|k^%tEMU8K<-*z2)s@^1H*K9D$M(>~Sjm~~0kwMu7G&d;{zJyPX{N2n5%;T( z-3nNZ#`tdR7YW!sTiOT3PVQHQ5i#S%n#%1BTHD`ufnv2fO)@WQnDch`Orx2X^O?*w zC(Hx6_W0G4B)_Je&5h%K;@M*mE0t}!CL zv&e#Z8>^C}u9Q$-6g;Q`SjQFOrpoDp?S6&(-lP};GRRYf`8of}#jtSdj{EmJR{tdG z&hcHc*5>Hx%rZ#4O&i9mh8QbVBI-p2Nx#)>@{_ypGvFEeF^ZW$Y>?jyLDEJCW@@Ov zoq!)@(=;;WJ@|!f#EA>2-~D!sWjCW$4C3O2Iu*+%JIN;PyDXt7JLOkm1~iWLH`rytKD&9kQN9M$$SNQBzZ4LH#Xs~ zqhoKt?3qn2Y0vqk(B;-C@IgdC3}F|pT(=)0KCG}A0S}+1{<@R&sBzQ=6|2i-ls~!a zg{FUG%=_^lxSJ0bU`H!cKbkM8KJP;qBV<68juk5a zsc7ImHS9LQdmYF?0lu zxVb%pWVPjp>}W>bAuZ_DSTMuc&t9^L|M~Oosv-B2eYsi4kEr?vjwU&oCA(#4w2X9> z@VMm{K+o7!6C4{a9SJS^EaD6W2XLH_dz)Z01t=`72uK!c(Jx)DGhOLvqa-)X4pIDq zY#RJl-q%`ys+qG`sW3Uz6!&}BW6nM`j?TWGt{40{0}K!4RbG z%5~IkQTJsM!b*A$%4Z|*LR`$&=osa(A~4RH71Qq6r!Ei1hFumP`blH`lu*Fui9Y${ zUkqBV1AP~97jokd@l28GFK=C!>f3Pn-EKYH;WCV(ekjYadh=JHF9CP~Q; zQFWR>XSjzDTA47{rFbkS0lo18yw7gj4cQ)6`{!HgKkGR#FWOnvq6r_?w4({|{bgOr z2Lvf<$vdHrlX#`dkF5zQg=4Qgu0g)?eE1L&fpb!LhTBO+lUkQp!m5Sp6KzZ&`T!kS zelqPmVm|~m3os3oJ@d3GHu*_{e&6#w03(& zt{H-IW(XY7T$6_L`S>QfNYV31Fd-K`NcMJI4eAyZAO0 z-u-!BI03#oKI#F7E*pzLyVHrvpWdrlWR`=ll*L!{R!yqInw{>9(364XG`K)t!MH3n z;5s4=D2}mYiq7+_6gq z$UCk|T&ot|cyUw>HO1C0Qm>io=gaD;b^1_kLyh)(s2|_@a!%K)2lIkYv^*6f2+&`e zGi&-JEcYr%biB9ofF88976`1dA_>0)KR?VqOm?Y|sXe#bMYNV3kV=w70I?AQ=jnqc zfD=*IJL0imsf<4dg$Ul6zA*PThH02y838hCJbjrd38ZBm*xP=3n9y3gE&dF}ii`D%Ro&(B=UF=ULoK@zXdaW?LP@dqzlUc+-51J%rF;wLy=VA z*Eh<>X~UKLOmOw?@7c0=|B7Ak>6aawcSh5b?Q!P`32y%*5b0~4L^2lr(+?foN>Y|i zqgeB4K%}$O`bvchrvJ-CuBXP07nhib_@Tfy9Uwj4>5<<5%L>Yf4NuUG|8>xh%%~+&L!a>cM7UX)o~6z>kt8U?!<{AOGS_cvd#h&kXTT zyj=>8&yMYp{W<*fj;~hGw_-S(DMQOKj=>vg4>rdBNTD9ma<-upn^3{8U+|a-t*PCx zLQ#|U85=`2QWf@5;gL6;w+^J?MP$6 z)Dqm5@X***b*_9#QGTvn9R)M^rCYYhLa6ol6zA=FOM5S)e-6xv**Gq{)CCi{LD5S= zDc!?Ly56k4-orM~Sbn;~kW6mf+1|*zg-k_|fN4Xz%lZ`#lA*atGyHKsJYJV#nn`=> z8g-=yEFizfT=(W!okYu7(*jx`I0EdP{wTC(Pc(aF-~^@QQ926ej4v5mugH)RQg|l5 z>nS;&{$Grp2{@Ho_rQ-Sq6`_L%tA6%D6^21h)5|i9~_xFj(H|CQ9@)+O3IMT^OT_s zMdl%M<{?Ao|32MY|L>gp9{0Y_J=gc$=Q+Q#_S$Q$z1G_MeP5F@)35?Xv=yQ=u8YFr?7>BwC}Cya=u1K}<99?wJuvxl0LZJf?E{ooR-%(Fl8gHUMexlLmRiR#IP zr^huY5qo{m`Q%ou_~Dl^N30|Q zYT15rI9&R+ccpX8`VIjz|C?TiwG-CE>UU|jG&qdu6u3+&WUa25!dgUi6b54LX=K%8 zF5IUf`7l8n62Zm9n(gcL-TchlV|zHc`SmYrreofN->VqaFRUf(824Eicwh8juTame zv}@dcm}XE{lGgLZ3~%(aGHLPptEU|OiK7x){YOng67G?)Cr)mCiqS2JgwHv~A9|m< zOfaubYdBbPfD~Vsv}&o%QP{!b1S+nh!_t3Lbc4ZptN5L%aO_P&wXn0ASIm+QQtY7S zPYYSL99Xa`v>JL5*G!w%dy}sE`m)f+5U*zIpSyEIGV!W7$;N z-HVxFryf=kxfnrq6Tc&hE;&p~KCB)8`8)1#W~qRp^aR zsg}4{6LWh$#+Na)?vr-#>Txa6fyP<|G>mlF0lvHn~t z8{hrLd#-X}CQ+u%t4Kz%9>s#~0}ADR-l3aAxq}M*2Ru|9ejF7YJuCThy7`mPsy&LP z?Ss|BgcGH4V_YBNH(wyz6+NZ;RWh>ASF8qa7=#&Hs%bTn#Shb;%*p-YUrJBj8`vI? z^t!6hy57h{oPF`hp2lGhxU}G2dDMn+w`eaZm5Ou=YxZE=r;_w<8SX1bZndI*-V_aJ zO;{=(J*OJrdZJv+>xX>tXmNSiJ#(Q8RcsUnEy;!L_XVREUa{S|&N5niKP7TIN^qCW z{eI`MkgbPyVRSt!NkaW6xf>*GJLNybW^4rbgx~*CVtSVqp?#U~k_=_yp5u(x*@wn4 z#ERtdLEd!?Po_-^D`IZ#AqTpy8`ye!Cl4^pfByI|$%cO8!a#L(Qgivw^rWIsnsFtq z(nqWb*W&rMBJIdi@=j&CG_>3#BE3I`3M$BsNtJ#xDRb+=;Ka;=V3p?GlI+6^O;pmC z9m+K>$9GZQO|vkQ=0DHQaB}Cv4T+yVr+1>q-D0?DJf5+u29lU)@;N4*crBJLA9J#v zJ`Inzk|M8D%4W$cA%OAwOQsO^+GlX{wAqchJ<}}n%p}G=t0!Kcu1*r36J&$u%IMKD ze|KuPr{yg4X;8oQ5#bn)Dh;#u=nEbUXAz!Kj<_ux$67s?5s8R=#&HL)gD4x-YH{u= zh1ym5Aba^(Q(ux)X{3zw<0A_y5$0PtMz{#C8!>FB}_C$fm3wwIsL#lT3y3Zdnqugow$Yydm$dz9F z6ESnyd{MS6-LZ5M0hi|z`o)s1*WKAYD9=en7inqhzx;S<$$;&EUm^eE-F2MJHK^baeY%m&Bo`^Mb1F5XxJ16cK~XhphM`DXRe8H^6_c+) zN7yX<^-vG9^neocBSiI?@G8Xd+iWO)7U2_?61QN~OzhO8--KfOzKAb!Q*G=XYUJ_l z3oJ{f@)JMNUt&z3L`-Rtc`$P@_qlTPk;)T2l$-^VMs(H(e)?{g*x4{tXgM(QwGMl+ zx-5G&zPuT@6fj?}e0Zd+L7P?keDuVpL&Soy<;O#h{_NMhqAgi&AH*n-Erp-J{Q;#V zc7)r$)~4s|(1llDP-)$4-S4hlGdSq%&(@);y)h{FQ{1hd+HA%qg>E+>VZGkHf8 zk=|f_?)F%4!X&Y7@UX|rvJu9~$f;W{HOKv4Gx?UhQ2%f_ zV8=^x?&C}Ofv5wU2-S%D+r8O=lRT5+C?#FDVNatAZX|}+BYoKogdJ(G{fM`1;^<)Z zZGQW0O!eIBgCC}6mP&QsgwXoZko_1BwGHN6h&;u3YWlPJnuGqj+BfK>!l5|C%Hl?qq12snWqU`VbR6Y&a&Xv9LM2E)Da!+~Y<%ph6eXlA?5qkRQ`bh&gc&wq~ep_t7qO(OgCCBd^yQ4cFAeye%8TQj(EeY=QoyKFOdB7 zI8)nEpCw)8KG<_|p5dB6*}|ze9y6_0QgR0pkJ33`R=A?t&euAw=~4c5-JX1H{PCj8 zg~zS&mxzBN1wtb}$khi=UM$^IJD240CP65Kchi)~&+QyF^C$!gon~P1Qwk6lRH0S6n zm7LS`+J3xwipgx-J78Ap#B-)Y9%PQ?Un)3vIXNDOg@ZTjU9C0~4Q~)%JLTIX`)(nU z!}`Sy6r5J;iTeOmt-BwwrKEk`3{^kLI}NKdJT^Czzfgsd7b!NUaFK@_wO-Jw%a0Se zl}XY+yJ5_{EI3>4DD|+@F|RybW7D%lcHQQf^u;Zr4AEl3+RRXv_>|>&Sz=qHVinjc zHKM*a5Pdx2+Doeu3Lb8`EYg&xr|7;PLQ1_oFNu0LUkhJqTWDR89U5*Zv8Z^w7c4ML zTk^i{D10S$T8_Z;K|s?+wQj(8zY~wwurzsAdaHGL(#OoXO+MLD+TlGpnOCeuCw&TshT_=9Zt|VxG9jc`pH9g* znrYl~o$r;4MSckKn7h26AAVuovUA=hSnCSi z$Qp}y`LVg|N0$=qsh!Ivq5?%abz^FUNAMbk!d$qDC-CbA5~}Jc#>8(|sO z{Hb4E^y&e{*r0|nX+)t1%gm@xdjaDIB!j1Wrht;$huz|Io%dN}uGL4Li$^FD96OVT zWQ@4QL3YTPMQ*^xd%U7SE*gukQY1_tk1&5O zzr4=oCe(UV@L|@M!)ofq-igG-3ypO$-Desf=gsKxQlIB;du7zKwGsGG+du|oVW*4G zJQ_+;#!fzXaVAI-rqRRB8U9mtAnl}Mxx>$D%g6wsR#P)+L0^W&!`4r^3JUst=&tY# zW)I?XewULKu9IT1*$V8NR48$O`$C_0c>IaBo=p`c)yXL9C3QmCkzn-o z2+!4X8qT2e&vE-S@S&iXhw!$2UV7}U_sXZ^JI-;J4Vy|9YfPSg>>#>*bA99Lfb!N4 zwlu*xSJ}fqIUt@fg-2jOl~qqV8@fYZ56 z@A+)?w5a0vj0{?n7ES@P;~Y))_rngI(MT^DYyEQcXGHS0C5yBkRbkS&vJbhs*@<`G z`Q`D_V2f|=bBHZplQxc~sJzPH=anrlJH}o0^WG_Ga^zWS<#utqwpGK-T=Oqlr5{x_ zt4ub|!dRzTj+L7Sy@G3>y0)A2Aj?QtcF1D@X67LuP?OT7M430U(eWv7B1v0$K$=LpEeYG4k0Q;I&${YR^*w{j1J-rL44~7IHG})5~0F zE>mne)evnCbL=vF+am7xUg}_cHW}ZNLWoZ~vYO;W;K6`Of@d2R9uc0*N{7`(?Fqen zWM*p<@yey}@8A7M7j#4VwQq#uof4NS<>IN4zN5a{sOk9V2=eyMU7CLPxhe{Q+2{m! zoutU#>M#6FW%E<=g3t2!4CkGLX`-E;^mxkDe!IbQSoYzoQXknBZn7W#dv0!v#U;!F zjLOXvanJZ_@81<}E%v{BDEuVV_1El2^IGoslv>^vS!vn(k)N07aCeoTS!_`CJV&W; zdT2QQJXHtJt){?7cSyCigh+C~9=x&UaHU{nfpfxP?Ik%?=n{bvlDXSCz9pH!ZqerD zs5+^MYKWa)&}lJs#!9w+rrl=k(&6AVk36auWFb|(=hlD3R|VWp4tAnxjV6wMLl)1{ zEFH1XlRffay>wN%Y_ijOWzSG}+j6kgLDhZL(nB(kn)a=#uZX&rd{mYcb>>&9V-&s# zBc;v<`B%I}2pU*=O()rxDp;mv_O|l2#F1mAx83yUYVq)MIjlJjhsKI93|(2T`gk36 zFLM6IP<}R@-_W(M3BEDLo6Mc_5h)d~9eTB6M&aV9DuY5zUcUo(c;gC-lJPCPj+%~J zwX(7}w|iA|P-IY#7|ofjzX<AJjjJD~UD#e6sNK$fFk+Bk<$s;`cFT*$ zNGsPok(U0V7d@+@Q>~+REB?OjF0K=`5{TocBwa7JoskaWHa?Ued8s!KIUjxJ6mv?0 zP0!=wpRbyFR`6Ms%Cx%J*7s{m7T)dsx@5aD16sX9@e!dbqe|Xt}jvWrx=N8yfew8&f9o`eC@g16N(nMX!Xo@ zlGR~#m65MfoLEUvY^RsI6zw!?{JlGL5(mN$Ef5ggPhbrgr(V zD8py!N`s#H1r=|H?+e^9x<4MxcrF=vIR_tha2ObGZ>cFJ;cg5vX3?mts`6GzD66n( z)jKWg{&Y4mcX=vU?)$8+u)>$N@TPaso%BzqW_fy_Kj3JP){>_WW9^X%pFC6h%wU&n z_lH_rH2H9LI(Oa4ldeaC4q1GN@o;=^x|x2e+awxhb&vYin?%*>s7K$vQ}|8#D|VAD z$#DyZ_FZEG0abNStPcU~@n@v+T=yhB-=;ch0E7PSuowRo3lOS5wAO zDSpS6-PscT#p1sJvkL-y1{pbL`CGVSNqdMmKDMec*emut-p2D zY^DZ&d+3;vy1TWr=Q0U9WB#dmlMaW-aB%#;(=CPL{pPKyK%3g0}BvUQVm$6LN zST1+feJ9dB@OxL?jQmoN9MSC&0^j@Rhnzh%KoG$Dd zUrTl+$pp!9=M=L^7-M|tn@};!8+#3Klr%eQfV=7gnSO~qdR@xXJRJRbh`cuBA#d&Y zP10M--u|_r&%`Zbirycf%UJfc4BxAxmlc&7QrSep?_5E>otxscKbT_4Z2scZC3(}y zO}13la-xbGwo)ah`Xmz>t zgNOA;b>~NE&b{lSLs;Mb7ItSP@w&8lT=DA13yDJM(t062!8NsI-@C= z7%h##6VGsDzKhb!4kGFkE4`UB4Bz(EIgwuk&pZ>UoNr*p}USAudT+}q~LjoO#x-R@L>V zNLZg;ua$XQmn-qo%~EsR()w$*6yp$i(#j(JG62%7jQSQ zO$c}%JM6SGUDU99@-_FNflq6m;;q$-H=?LRh+4xU-i3x!tW2AwbjRbY~;`!+`S6tW3 znhVQ1t4ERgF_bhWj=>zhOnBvY(>CS#%U3i{+_LAgBYI2GU0xV^v?^Wm{!mNZr`fMp zE=XP(CF~WyIsy+~mcjFoDqoYM=_ulAxH42S*s-`SqN?`hSOz8cQS&_J+R@WuQ4RQP zv-8>OEek^p6f*oMFU5vd*Y5^TG;Zq{#tN~6{E&pFEobqtx~)j*mmK1i(h^14#99>D zy$V-}Z0@hrXEOQE9*piTe#>05axjsMf>@cb@-dYdqF>nNm<`!tGDYpA1Z&pF#^q@d z;iYR5j&IKnTD%QQGA}>z{-73BtbqUb*(;mZW5*}SHfo7S-kMQ$@43IqBf2$vJKQ=1 zyzqL+Gt?>Sz3fCb9(|ONMME&}y46Tf!K9d|m)o7r1@1?9wq#mEl{OroiggPQIAl!m zw)r-WPgJ{v9F+ThlS7$8^4998?vB^)^{-h2hJ@2s8j7=B4kM1|zI0}Od^(--+sRk8 z3NkZx)eCjTZ!(ya!xJCOI8842I=%``zjwL?k253XQG}afo5aw(27;NflKSzW*f({|orAe!gCWug#i1U`YjQBa;>&E0ymnD5IrPu15 z?(NJrb4mv0tK^^9&KKFe)*{>TH@l=tw%PdL!N3fg>sP{CT+5?T7gAMZ8)wXqpTA{1 zJYFR_J+9x961!%w5-|3Xj8lfb&GhopsmPbtvy={nzjLivP-s*`4PSGCA6GQ%M*1{~ z5KRa$+x1w}5jwY)cuq60ljkm#-qF%A&3soN8Kl}^KZ5zCFF8x-T-)$p$N;8SG&EgA}Jbe=EZiKrE*6hd+sE21&gdq<0zT=*< zknS<+xU{KtHbMvD6_Kc=TYY@07|u+%j3UkwPGujGDp`xD}lNo(T_!{}X- zT++Tn_ralsJ}rmp zotZUM5?K?R%Li8*#rJ|-^jgi0R`$~8l!|Y_qvp1E=!(K_+60iYv$DrmKTsGt|K;+J z8I~LI3p#nCrUQ2h20wj%D10_BBp{^QK<`eU&A7qg0C~=4AC?#{|GX2SMJl|YZM;~fM8*H%LKl(R|e2|DSor%9_DNBpx^j}zy% z;2E~oalcA4+|{Qeza#nh9$otQDi!q_KR$7*?}m<^<={aoX`3OxcuC>c-*hr~wRpG? z_b5xWk-b6No>$+g6G#WyFT(|^#KwUgM)x->!n3hzO$!Ddw zZc-kgB1`kQw0-P6<8kVq@AF!gLMayz;6_3>EDD z;(fK~RhsdL!ep08E-R+_2jawCj9H>=3HU5+a}iN8u0;gFMXAeD24{R)RtE(S6$f-N zi&AA=zubLS{OZHVxVgS#!6DSt>*Gs=x?Q`OS$q$)s1_7r6T=fU3k1s$$~T#Mj$hZ~ z^v&@J7hQcK@{}-z(_z?rL|;WK;&RRBu-dV3A2O5F_d4sV6}HFhF2>s4vY7VtLCIP% zv`fmGywMdJ{C+}3sA#s|Y}6)pN}F!i89^i{aUxMgspm@^6Km0x1CvWp$>G}$lltCwFwc+%Ae-lcpg0%H&{|+h4-io}8a?VA97< zZk5)X4=$m^>%n%bwp>htkk&i% z$)698>(~dKWp7L(DEG0}iC&0xcO$786s!~}W=~r6W{dI6jmCdV^Q1bM)bn+k*>Q>! zo4oJy!p<}d4v$)P`<@pb@Z#YQIlOs2uJl!>VFKY!>20ls(_3YgqJhsSKSx$wYI^9I zBV~Rz)Hk2Bz8=4hQ&Q8UsYs!0SLd~hUqR^ScWRr zSFIngt+mY}jINJ*dV7Md#dJKfRof^2P-jDnT(&m%TQZ$Y&lp(+R%y&`h3VDitmj=&MyJsR>g9SmP%;DAk+a}N6w5>14 zP*kp`3pQQR40OR8RuSzNlvrY3a4L(-w5L_dE}6jZ5-?;D%eXBhw&wC-lR9Tvm$YrA zIzm$EW(~9A%Z0uJLbvnJBPjjk-I~oVQOqR=89&bGw4B-}FATNpJh&cf zw|%d9cs)X$ypT0gE44C7-?w@}@HER)77E)|cT@H#wiK7t9DdK^p7w@U2%84zZ=lNP zK*#m*E3=b9U9>-JSJ}tzJ^E&sYkNSBG2n*id~An?qRZPE%S1EL%oL9fgn=^f>Z^AyCnbt*DzJx}C`)vMo(~LmD+0Ct21RNSR zhh^gJP2*>5#*?g#eOOk?DokEp7=FFMdadM6hHsNjKCuAN<%o}w3bs|3ew@2}Fm|M; z({yM1(PJX}bdHFAhR>FXb}#!JDb6}e#96`#4$ZpKmL27Fm8-ZB@Ypnt)?xG*2_K%h zTxdmnzLPxM<$C*+Cmp%k{X6m|mgCc;bvc|K^KPNOrymq7>Jv3f=dJtr3*QNLTwQfl zsq_zjFExN?^6VuYaVDkf_2)t(R~2PhPP(4ijGF6l9?fnZ95B!zdB`LZ`HuOsTh=>^ zfazmWtuDHEjNoE}+Va^1y18!~eO{$+`Za44<+AB(h}`SvolcNQr%G3Gw&8RWIL_U9 zl`LMl;YY@dNW~l8Wi}?QF)POTzSq$P8>GDbH>plhJ-HiSxMF(8qU7tuz>Iki-%fQ< z$K$Fzx{l28OS(NwoYo6>&%U;3U6h@02rY;T{9M$vF@DCBXi({)4As%W2lFB)pX*m` zHqJR-LDqi_y?(-ZfcR=;9=AiGOv7bYD(g_8)>~TmJ6}SA+E5Q(j9K+NO2^iTJ1C5k zb4rqsu~=P52?+%WT}EM4^Gi1h@a4Ihb*&kaxAdZT0CQs5FN>6eAIwV8+t z@LN^R@G_^{)||^H{MnL7#`uKbP5OH3Y)QM@r}siiqdv_=^PjnXL>XJT+n0$dJ^0k$ zc6D!iM}WK5@igmIUV#^>QpXsZdKF#j=V>T;-#@ac^fGD{tRBvbri(e%QG`J-?JUq7C#+r)s^NaRmU*XeAZ%pDRV0>{S8NA z)bP~e1*-Cvvxvp|=F_)_-2K7xePdF{e8_t4R5Ux)tyae*>U*fCYiggj)3`BMqN^(E zw?!2GRK2qV&%93M$!$p;-(^-2&IR2YQ7n|5O@SMa9{%K*^)@fyPw0<$6G!v0YiXsc zZ)#20fDb{sG|}KRNp&pZf`3T-!Ow%FcnQgRWP|qNCGFX7N6v>PZ#ghE2Kl@6s>2LI z9gnLAHO`!SSt%zSPe|f6v*Y~1&H8gw=o8g65~CYDr?qbRbXey3Je+HJF8V%GLop(- z?9SJNqk=#9Xck)=BDABrR&y&Pt?)LM^@-1?FHPW+*JmE-@|POXBfOno`~6`UlX%-x z@0O`Y1rAH5-w&>h5js(= zChAEt_qJx_FDaZQc)1WrJqTNCmZ7|3)5&*{XGe`}?!eoStIn6sl+kjVx#n&>*L80h zx6Tj_wJ;7m9Xj2X$JT!?yrd+GQd=n}u14VcW&eIMZA(er2EL@H^rt2sHWt+F`jptj z^=ROU;5}gx30TqkDSJ>tV`_(HCELc0zP))jiBruklIv>D;J0URovp5b#%#r=+@-<&w zY}Jfg+)xknmv{1Bq||;B;_H^C?UHYPa;zJ||(X z#z~%z3t7J1Q=f9^o6`tNBd#DOAH2LeqTD6ns+yTbfX_ebVM*g^Lv#Ixe$;?ZtboYz zm#c3MAcx<~U3`?vF7rK4DW`U>%?&}bO>BR?FPyEaYT)I-sA!$PxuOqa)Rqb?OMW-g z(23}9$O!VBJLgLqFIaTgP(|{`5l+c-ud?m#1$Q%RyHF%nYJavaul@QKlbgFy zU%fvX4}CbCJ;?L!RwFpe9<_=9-~0v>PscLhqv8U9!o4pNUO|cs{JDR3q(P z_`}H)+214=`-rO7rsQ+K(mpJMzZ$G6n~fOztj$;hzcJTbjO@Lv{>J4f{lz4?(-}`+ z6Tq~DP{$dqlWvT8%Vv^nFL;bz`H~WPkp0x#0^d8fv8Q@Im{I%RtutBY4e4K2JfvN1 z^Vy6hvt3`oqH`}N+hb4IE$hCVZ32zB8^isbzCO<*#=>es{k8)5!uW%s992SRa(zDP zp6-k4W^Xj9V56EevS{}>wISbcd+m*b4$Sc)%DT{|oasVv4OM}`c_k(}AFEesZw8A? zgJ+F5@z4B}*$u9+ikd|_1*5@ic&*i{|gx~{LDa6v_7D(#zYAhvFe!LG9C{gvJQ;Zh$Q(dW(Hx=SGnIogf zn6fgg8{p<+WV)PsBdg_Ze>A*BwzOt$w&%9b8P}d~?xZI(s@)Gt+nz1z8#bnEr3y9r z8lYFzDMIPJESEb#?fz!?l_!U=$gN6w5PEeK%TwvU%{P9lTT1a4k=3H zdl;P3QgtgDP6<6PmawvRsMevmwusNDE2(yXj44ws12+E2@aM2jR>1n=?BT7CvK~6G zMBX9DPK6{ZGH6&08K&DD>WP1IEHF5FU05^hTc>ENZSzvat1&l=rqx+ShURH878{Xg z-KnqdO2>VX7>-P8pLjkoJrFa)+QvHZh1+<;WY;rcG=9=`<4@1<+qk{E(g8OQL0Oo z74u^o>e^~~tm0q&X1O2rcJlBT=~l$OrLdNSHiSdw|Yf7ZmWv*~9>xVTBUcbwvlG(EjuL`a_`6n$Vt*1rYc zh0>??>>_`{4Sr2?=k+SDoLLK3&kA+dz>Zzyv8D#gyA+?U)F2$CQ;I@wk-`KgBJPeh z3AH*n9MF-a57`-)EEjoLf7$#vBTcY;#~jrSwug8U#kZQ;Xkag3i^(iKX3sw)TxenW ztmi2)1Gfph?N^(l&Y4;syiOu{bevQF>l4|MGh&Y17Do@CaF<|=ofYL?lDUCbIpZO_ z=e;K)REK|k{%B(EyH9#G?-IOK_*VjtNlsTCuFCzOz(UNdn4i*KqT{}9|6bJUOr=6) z!pWP7A{2T#9zWQ?8w=w&HyHMUNR&{sB}UC)(xk4l=zwu1(B zjnqG&mGG7okoyn^38v13Aw=}xThd@ zS8Q*q^!y$L!G&^;oqEUB3bvJ(J^d9toBkxvE7(?v4~Bz(PkuK9|DBshb?t*0TImecNdQUmWCUN?!a?Z8-K<;w39mPP>a?W+)zUvhn>;B?{XntV{q)!4E>|i)OH;SEdt&%PzO*H##QGtK=No0eVrN{~6 zuf>wuLUkXqP#n4Umm#_ z(cTH3KAQoah)MhVXTjf8FM5Fc>&xKZ{75@1D>xDo(Oh3CQVG7o41Vnp27>LtUkDo~ z0hE&s+!$N(!VZ2N!EMkSTL{o>LYv?e__jLGGv*}2jIcpyOMyUymG3#*gX#PT#)f`?>+dVoi_sVx zVdM1oi*g}2uQ~Hi-6e&=l38FdFtk5cs#lXaHpdojVWMYkhcY%m!HxBRzK!ld5KE_W zey{@KSq^NCBkZt=4rXw;h2Ae4fFmJTZ%&*#Xa;2R0Uz|UVSit#UUeSWEFah)N+ zp4IeHNZ4Ou0r7x)JE9=Oqj^{8_5r9bA3Va5{f}_y(Vi@aA|kAe;g0(Zw=5>hEe6Cm zS)jrH4K=A=0`*Wl9Bx2yXW~Twa04OW2CNuj?S8_A(X%l?+CrLJj-}G_D@quQ;2gGt z*S15^aDqO24rxb%(HS1W*4B$LND$K66uh#@R?iTK2BH1KjLJtVfMCiOv4`nA4aEbm z4&F!i@9@nenGeEX)xZ@ny~<$=ie_trKrc2>g6%lNu4)0jqreB#3EBwputFl*L2Xe6 zC_7sqn=u>;S4R^Tl1~VO6@zsX)5=VV{(<|;W^MO#`rS!d#4!+y@`1-=I@MiLoIG4h z$+nC6^-8cb*8(@dguSQ14Z{&7Q{$7^GJ%DB1%`_mcXN*7hV2)ROlGM^49Q?HC-Aaq z@Xwzs)hn54AL9N?o+ho?mmo0SFyNz@W4_FT6KV`Mv@?aUVkRcO%1>a-;vmt&oL!2u zxM9`~RuIwh;YY23}O8wt3qo{?Q;h zjI_MmANaQ#;ZVWp?yD5?mq3xDAaY^``0VukskUfUK*;Hw5nnA127UvCP)uS>_Wnd% z^JC-VZHJy@bP|9$*|fRX#9t9*zj-n8eXnOl4TDk2U^~fu955qm3kwietf4Z0Gcn$; z-?%{LpA3U>VoVBCJ+x>x21fS`OyPPaXi1@vLzQ3arh(B^uwnb%g?VVCt+gG}2r^NT zVj6XM2@^_yUyWUG87cj{yK##l_WIFZ#LPl5322cU4Q{9M98$gM{Y@fma z_ul+3V6?GA8Tw%ojdOb-)P4ndB~bC7E7i-*;Jy)M+4 z{R0aM8jF1$9I2q|i0-Ymfd~!)(4Q;SO9Fv|W&}C~2z0Xr!V`V`*Ob8O1j_~nkLf(` z%yHn15l9ei^}rjdAb5Kx)Y8=f>m~4P5O)7usa`P_ICv)3NJ|6Mubu(Y8j3j-o!(px zWIO9iapn>U0uta~? z1WDANQKKih%pM2W0$~N!_u?UnKKTiV$O#fyZVb|3I1UmLZUO(RD`bU&R^dv)Cjoh& zLIGekn7QIYBo3%8Xv|qcnGCVZkB}?CO)URWa#}^>V*Sct^}vE)14VpVLdxt3BpU)5 z3FeSD;&BquOFrm}>e(RSCQxq26>GfC41f_}dBt3|%9C(FQ3gm;I7-jP31tQu%%3r!0T2Ca<6_@cD405^@Cp#^07x@2CpKn3BCcNlPJLfKtIuzI>rqCb7|5fPUnKFbqJv-2R z-vw~T0apk^Xd9{j%+-S%BTxp07Esz=yb!dr1Xe2>unc0Z2a*^5^#^eIdV*j4`-?#8 z4?ybE7*ZqU{u^{Zk((*AHiZH8Ecjri(S!>7(EqOd_cM`dA)#Dfb|AMkc2?^BU&y%B z(OR$N_8qKc!~a;zu9;yA47LIGldxl1TjLH01b(-%gTZ|ZC=@6QL661`U9m$g+;g!% zb3if%>jkrqe$m(OE7gni0Tj*#Zgc*u5QLo`O?<5M1q|^DXi{S4^Lc(yAoOmBG28|Y z>V7LDCp}Z7wH;I=^}C7Q_7oT{j~ez`+Y*EeYl46@beYP{B~K7P;jY;0&vFVb6z-ne zlRLC(qF}s-z?5RuY_=Pvc3}}ztsJ`8@tC~<7iqt4AbJYHjQ+YX7a;Y~ zfAVatEq=A{_Om%Bs&bNTz>@`7*1y2N{+;R-wI2~jWsUyoZ}~9Gg0``Je+Q%Mb_;vR*#5r~V=f%ld;5U@CjLw1Uc z!WDT6khg#-#hg_k@EU2%1Q%LA;Dm-f0=jQ0-$fr;4`S*y@B^6e8nD0gU*LaLzmWFm z@IE;q8K_5)6+0*By8U0__w7Ju!4hr-*_^4a*7a-xrJNgBWih31)c>zP@SnU1Gu!@l z9~=HFW8cr`A0V7QcLDFA0|h)V#y?l87Yh;x%-jGZan^b`&P*sdipg|>bZ8yKcFYCw zJZPd~PTb$pSy)50T{Rvr-32`a*ds7em<7ruXK0XtjSXn`K$+^2cO_{nu%<7d9>c7K zkGMgzaQ5>^7)9(>fk+de62n}l8NK&IAq)`~2$Yi^%D@y#!ov2Z=vP2(#z1YDld2U6 zjYap!PzcDTN17hj(_=u!Az*^+f2I^2TBL$;z~G>q_^V?N5l%>nJ%o+`^>F|r!5nk+ zBOJUxZ8tqLu)_;|j)F)_=R*J(?=vtfm}6dygvP>6P4#eeqVhYfEH48?-Uj&-=9u$h zaKJ$S$;rkVoL+;PkhOG*p)nv>99R%R((~s6I!uJ-q0=U?kAQ+(La30#yWRF0nBN>= z(X4-9=qb@p$BjcDScDR8T|Hx%1WfQla_r=3_BAxk6s)39)wUvopWY%MWrKwd(=!Be zph@W6e@LN>Biuf}0pZ#N1U*cLyjR;}|Y*;-6c_F5@5K}m4PGI8-s&jfN7S(14 z1j_?9i<$pEU4}*>;lN%YOzV-%E|(3+qK|_3jcKWhtI#A{J43Maf=xas+fpxW9DWOM z+F*>BUbzM%f(+om;%)Rm578m7vESfD}n2qenRzykWru1S3gp(HRc6czSdPMmWDQ(?hrBqd<(nRMrPRD3qarvw;EB96sAi zNvH0~d_YI_pz(_t9cn<>#>@-QBeR4fjqH#J z1E@U~#xJ5jt-!Fz1h7q%R~3o{>>U&)I2xfL?H|_Vz_=8_kv`x-f38%o&bv^sze(s* zqtM$IO7a_>13bEx9$H1+Jmy)8Y!r*AbU|oK>%rs!akIa|CrJl0kp*n z!ZOI=|6HkF=DwJWefBgx-{whw244jyxv&Hw3BiQ?C655g@gIVG=)Z6m4!)1xivi>L zbESG62A#TJ)AsjZezn#A){3C=6?uhg8VXQE{;N(j{(vY9R(?$4`-l4w_ZjDgwW>-H zkgxF{G2ShFKO#6y3=y)x8^VxTSsND1nPX|)cf+~R@WAN1Az$#AH{u_**d(a<%z5%6l zb-mycm?v|92Qm83mFh+O<=@dr&}|3DrE##SAMl=)2J8V4KQPy|m<}v99En1hAbtlU z>=;|@d}Q}J5Dl~qu@W6hP!VH{|8LMfF-Va0?QjAB?fnCmfD?xEekdM+gbih&Ke3a9 zSZk$IH?(9xSwKbs8@MI*DC4&Yx*h>lAwjBxsV+Pg639^+S^w*<5@y2sksTU@)9WZY z;@<$Hs}aRkJTV6*34Qnl-TvEWIkBnfi$^a|_kl@ZrmKrW(6D`G@$QvzK_TE|Tglkz z*JBZA7|uRHeA!peY>-A@1e;l`z$kuSsa`MxXcW3fhU?%HTYupsdi(PIW$f%}-U6Ct zYlKADKvuR7l$?%CmjZdfkzh=VIQ;;cg%Ua|0C$9An^qi&Gu}06p!+6#EY)ks9>g%M z-}8t%C(Lhvw1k4`zzG;4J^`uHu%#OGAjJiP0=-tzNizUyat8NeU=HuKG8rTY-G+i# zw2tjY5}9CwE=EFw9H8~Yf03+rl^^KoF}9wbgWaD04K%;?& z53!~C>Tnnr3`$SrquLM5Kxrlgb^t+-stNX|a~$8@67NB!yG;r(-^dI@{>J17m@?HRH;NJz9o*g#=jRJNOwwC_9v`@Hre3Y2}?14*=6|0>r{JZcTRzjCf*c zYl;B}64BEm0Hg_;7nmzLohLMCAN!V&h;M%jU}6Bq_FLuPZ>pDw zH#BVDo0vJjDXu#K@6`o`J*J(rJ-~&7>V}+Ptb(5dTJm$p9^;oFXpRZEb;S^94Z=u= z=D(DBfH9$01xzDVNW+Bv>23awE!euxE_lv71wuhNr~)yI^SysV3COC+%3oH%CWfhz zDV6|}xByB4%n3M^_bX1)}E)0qh+=b`)a%j1!3Smftb@SC7fT@b_02s}$ z3p2~3l*Wa_l~O$p8|z{L3!vcxY^`0}hlOKL=AbkAPi}NO2(-a~2miTJyh69AM2%N%BOrhC61&;|kFEIE;k?4QA0yaU@# zm{~_r$v!YkaO?&uJfr9HcRa`%0y>%gI`M_eGeRFnGX4Pb`Vs_H)<0f`E;gR^;2`be6;|=Jl+%D>0JMim`!tA? zhSMYJja<3F-BYl9;JKIvyfTD?hCcdi4S5vUe(Cn@Z2+?e9)Y=ne;C050~s^)_843Q zIX()6;sT2<8-~($$8oWK-Gm2?yG81!6A0Ev+92%pk#!CS&I0r{p;E{3!g$L?p!_)k z>XaEhGM~bQLpebjttLmKuNP3hI*7WMD2+2X zP`?Tbh(S`&uJ%+agBvK%ni|z}47_{?=6@*21Z8g6<4&0%OONvtJYk(iZJA z`wre^cb4fmfG&a{feH1M{1+(h!7B#WUUUO75#61`T+7F0u%UlH&QH(G+WH>O-1O-& zSiCF<*|`9UDdlsy{ek-|#4PYLnP@kNs;eh^qXbCDSw%t94e;vg9Gk}QM&OaD|iw0TjnAtQ- zI)Q|^_#cxR5rYc^eY5wJ2+WTWOhGaDU@qX7z&!tNhwP7epif0WjgGw~(L)kMGxVca zFcaALG+Zd0Pxu%d>8=HKmH;-LG1Dj7*Em_$_Yjc%&-f){aZg|sIsZ7iPgjluw(o{T zdnBn0xGw<~2M#1+x>RQk4j%fzK7?~R+NEfl0nHBryT#Q0;|5$Lbf|_vjXnHnKn~2I z3FPRQ+81fUf%=tLL$RK++$1UjVzGfivSP#~k0l(e|10g>qhr3dI6g`}OS*(4t|AhI zgb?Z(q(KOsAd$wSVKQQpOkNYoL1| z6^~Y{FYfnDGGq47K0itOTWi+*_c`b6v-dvxy!NTuTH|PImIZ8I-4>^^vy`-HKS*d* zSL`|3*5NsZwXmUbbS8E4!<#qb74|8)BEy?%_q~di#=xMwNNYR1ASH_1tCHn*AK&Yt zXEBj3o~`WEBc2kT%>5kMvhCz~bi{4w2kq1|!<8u8-6p4lJ<464UT5?5XVJV?V9{oN z`?8d!;=r?)pNJKgIf?QOC{>m>BvSO_t(p zH~z#Js1{Vj-*1t)8Ps|(5=tH#TMe>)GAfNrkc^Aj*`T28D9GP|+=bM+Ph2&~I6Q^r z1wL~|g|X<)$SO2F+&I)&4YaDe?z(B}c5zBz)g!R)?2ub?ItB=->ndrm?qnS4WE8vggmX)JBXSvyKJX%K zJ?Fvlri&y{y2`v&3~%_^J?Gbg(*Sj(Zd>~T&og72h1alKM~=FQqy24AKN>T7x8hi0 z7d@3badjzg_lpyu8hf#jM^)oWYYv1o1CnH|Ztq`fxd+u*gZUeE)H8fJ60W2nZ#jkeC%i$xjP(8d)SRlrZYh zBq<~unSwPlV9XeL9G}&)JC(uc+1suoek&-S4aXUYkeAjaD~*FB8{@g<_g4Pb-NhB5 z1~580lKN+J82C%3MOO#cIWA)PLvT&BMeY`cf-LzAq+)AgOf)*{V;s+*kWKSBh>6>y zyKrysBVV+qAxxHvrOyfmB8E?H;EeLSnDi-fLwOHVV%Fqx7*jHv1=l#F@yM0v>DG`< zTSq^O(LDD(8AgYtb@6HiBcXS+5qDRiap%!lbWlpz%HuLq*auANJ&F!Aj@4-HE>fPn z?wQYmWahe9TRi+C8dx7zL49^lc=Za&q3V``LR_5tYa;GtmG6Te) zEb%(nc|!pNH5MvB1$Ea|!s0JL4(T<1j1NG;o=W$2yCnmfVu;gcCYyDYYtT#&22Jai zQwn+2f6`-`Dhvy()cbCRtA5A ztz`e=u)zqv(lG$gkm<7khLm88Pk^6H;J0HhhaFhp3kBVT;f}gW?EnTQNle`5$hhOk zT%pN_tE8&Abr46%#NG%y7|m!}+NJ^nQ9hQiY0sq%V?fFJY&`wLXuwyV1w~tMc|seg zY*x-I9LG3~i{)!A$w;{Ybv%L^QAuYSBoujYnm4w4XgUKD#|GKdV~@6a)JaCy@5878DKLcLkdiHlLFLMc9XjO@Z8lD=#S4bWryXg=P*blVdh*&XlnWHX4u|&a8v0* z0uQmA%J+MihLwMRW=DNEqH@#UgR zRs&mb9E0tI7o&vkr`L7r0O?G_T0S-U`u-fK^7$wR^vr~7{T@I-p%61|S$q!;WP3b{ z;cWQCZ`MIK+}tuM1)bZ6vv`yY!yS+;AM#bnLr;yy^$92R zRyfDWPBrVfxk%un1I>5CZA@LKY*tY^!;xiW?dM%`=po#^FMPBY%**~+Eg!AqFoyIL zBVKsanI(C|$E+E%Zarp=hxaK>>_HC8V;_`z_fosoCm`tk7^kUmoI1o&B$Wxz{Ao1i zSeiKeXrC1wlVP|Co8OeetGNg~n=esLM8XO<4%XTYk~>Jb^}4!SF_hhGr<6~dt1QaE zjr0@8WzNZh)pvu8sC<5@pcJzy1uv^r-3wQ4A2m4}tp6Ue=?A^06Rb^lIgH98^`NC| z>(qw5Plv4Om{D|(MM>|Mz;942Lg})REf^4T6sudS+*@7M&!@I zs$5A*&&25#WcM`4#O2a6WAk{hIzpwWgIn89QLD!+6^V7!AFnTFeXBbw>-M6LoTq1x zd|d3kXC%&cXxv9D!@phKbC~Nt}JPEMs2$Bw|=@U#-IOyD>V`cW65mb)nmrJ1XTM?g^1V=ZA z>2}+sTr`b(lZUBFuvPyZi!=T3&M&-id(tiM9ef%t&BV@`e7&AuSqcYp88U23kdv?T zNY$P4!6r>lk@YalS2@N{zt7`vqb`~4h(+yOAFe~J7zqbMJHoqG3o6yCd@dapGG)b`X=5wR2#MLH%vXT7>=Mrn9?&Z ze+o1$Tkh}wSi5n119a_7go5ovy{kT}B_>|Isu@V#$yx43pQH$pjw=pIBi>N3e^$%; zY3f8nN@ZRiL#mn_0`{DGzYA(CP6NGYhvVOB@lCHbU)8>AovXJrAA`X}Ohkf730r1X zyM)J$(Zw0eu?afy@DG$YF+&-U_y5=uABUj#@~g^x*av1;yEt1JjJN+R;(UTgK+_BQ z2=#V+R*Pv(wc%Cnn!#@y)~$O-I2v#GLE716Z`S}XwWL*!vtTT3 z9YoRUImc9(vR#@P(K&|=5MU0*85pEW;@5})RZr=)24&!|~r~nZiF!IdV+)O7D9GzM)p$VThZy_bK0 ze|LY8xT}jXHO|x(&oQKD>#B0PGudqO3szh?iiM?#(49_1eU`|Oj7uSAB9iWtMq zi0aOb^0UB&i|G}`=0rcFa`HY{|?y*rfDc9QOC*o^epuFk=sEt{q-1T!V8P41kt zYYre~`siz1rh5L(ZBA(*gGo_`V{2NJJ#n6jG@bL^^(V!hH2<069knL?a1 zD-0y%6>X?-dG;&z5{+@bN*Y4Sx@oO>S%}{f#k;|(mrb3oE7Inj+*H#d9XHk_&2zq8 z^Ac%Zy$@?%*3<6aIA0a$M@oBXZ;eY+xlG`^--B?*@mVdk_t&%>)g2+{f~cP?Irygv zlJ8?UFY>?SXpsnbHy*BWQID7IC3@k!vP%ci*+*+yntcJOswghfahX+T*BCS^0zbNI zWGIvrH#RgRM62{fp1*}1+lXlk609h8=#!>ZAIUhDH(nm2KpuLTygHU9_tFx`Lv literal 0 HcmV?d00001 diff --git a/Lib/enum.py b/Lib/enum.py index 025e973446d..f97a5193492 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -702,9 +702,9 @@ def __call__(cls, value, names=_not_given, *values, module=None, qualname=None, """ Either returns an existing member, or creates a new enum class. - This method is used both when an enum class is given a value to match - to an enumeration member (i.e. Color(3)) and for the functional API - (i.e. Color = Enum('Color', names='RED GREEN BLUE')). + This method is used both when an enum class is given a value to + match to an enumeration member (i.e. Color(3)) and for the + functional API (i.e. Color = Enum('Color', names='RED GREEN BLUE')). The value lookup branch is chosen if the enum is final. @@ -712,16 +712,17 @@ def __call__(cls, value, names=_not_given, *values, module=None, qualname=None, `value` will be the name of the new class. - `names` should be either a string of white-space/comma delimited names - (values will start at `start`), or an iterator/mapping of name, value pairs. + `names` should be either a string of white-space/comma delimited + names (values will start at `start`), or an iterator/mapping of + name, value pairs. `module` should be set to the module this class is being created in; - if it is not set, an attempt to find that module will be made, but if - it fails the class will not be picklable. + if it is not set, an attempt to find that module will be made, but + if it fails the class will not be picklable. - `qualname` should be set to the actual location this class can be found - at in its module; by default it is set to the global scope. If this is - not correct, unpickling will fail in some circumstances. + `qualname` should be set to the actual location this class can be + found at in its module; by default it is set to the global scope. + If this is not correct, unpickling will fail in some circumstances. `type`, if set, will be mixed in as the first base class. """ @@ -783,6 +784,8 @@ def __dir__(cls): '__class__', '__contains__', '__doc__', '__getitem__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__', + # Supported sunder names of Enum class + '_generate_next_value_', '_missing_', ] + members ) @@ -819,8 +822,8 @@ def __members__(cls): """ Returns a mapping of member name->value. - This mapping lists all enum members, including aliases. Note that this - is a read-only view of the internal mapping. + This mapping lists all enum members, including aliases. Note that + this is a read-only view of the internal mapping. """ return MappingProxyType(cls._member_map_) @@ -1296,7 +1299,8 @@ def __dir__(self): """ Returns public methods and other interesting attributes. """ - interesting = set() + # Initialize with supported sunder names + interesting = set(('_generate_next_value_', '_missing_', '_add_alias_', '_add_value_alias_')) if self.__class__._member_type_ is not object: interesting = set(object.__dir__(self)) for name in getattr(self, '__dict__', []): diff --git a/Lib/fractions.py b/Lib/fractions.py index c1b12e7a1c0..84e844cdd69 100644 --- a/Lib/fractions.py +++ b/Lib/fractions.py @@ -339,24 +339,24 @@ def from_float(cls, f): Beware that Fraction.from_float(0.3) != Fraction(3, 10). """ + if isinstance(f, float): + return cls._from_coprime_ints(*f.as_integer_ratio()) if isinstance(f, numbers.Integral): return cls(f) - elif not isinstance(f, float): - raise TypeError("%s.from_float() only takes floats, not %r (%s)" % - (cls.__name__, f, type(f).__name__)) - return cls._from_coprime_ints(*f.as_integer_ratio()) + raise TypeError("%s.from_float() only takes floats, not %r (%s)" % + (cls.__name__, f, type(f).__name__)) @classmethod def from_decimal(cls, dec): """Converts a finite Decimal instance to a rational number, exactly.""" from decimal import Decimal + if isinstance(dec, Decimal): + return cls._from_coprime_ints(*dec.as_integer_ratio()) if isinstance(dec, numbers.Integral): - dec = Decimal(int(dec)) - elif not isinstance(dec, Decimal): - raise TypeError( - "%s.from_decimal() only takes Decimals, not %r (%s)" % - (cls.__name__, dec, type(dec).__name__)) - return cls._from_coprime_ints(*dec.as_integer_ratio()) + dec = int(dec) + return cls._from_coprime_ints(*dec.as_integer_ratio()) + raise TypeError("%s.from_decimal() only takes Decimals, not %r (%s)" % + (cls.__name__, dec, type(dec).__name__)) @classmethod def _from_coprime_ints(cls, numerator, denominator, /): diff --git a/Lib/functools.py b/Lib/functools.py index 409b2c50478..8425f603001 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -563,16 +563,16 @@ def lru_cache(maxsize=128, typed=False): If *maxsize* is set to None, the LRU features are disabled and the cache can grow without bound. - If *typed* is True, arguments of different types will be cached separately. - For example, f(decimal.Decimal("3.0")) and f(3.0) will be treated as - distinct calls with distinct results. Some types such as str and int may - be cached separately even when typed is false. + If *typed* is True, arguments of different types will be cached + separately. For example, f(decimal.Decimal("3.0")) and f(3.0) will be + treated as distinct calls with distinct results. Some types such as + str and int may be cached separately even when typed is false. Arguments to the cached function must be hashable. View the cache statistics named tuple (hits, misses, maxsize, currsize) - with f.cache_info(). Clear the cache and statistics with f.cache_clear(). - Access the underlying function with f.__wrapped__. + with f.cache_info(). Clear the cache and statistics with + f.cache_clear(). Access the underlying function with f.__wrapped__. See: https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU) diff --git a/Lib/glob.py b/Lib/glob.py index 575e4bcba5b..5a8ff46137b 100644 --- a/Lib/glob.py +++ b/Lib/glob.py @@ -25,17 +25,17 @@ def glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, The order of the returned list is undefined. Sort it if you need a particular order. - If `root_dir` is not None, it should be a path-like object specifying the - root directory for searching. It has the same effect as changing the - current directory before calling it (without actually - changing it). If pathname is relative, the result will contain - paths relative to `root_dir`. + If `root_dir` is not None, it should be a path-like object specifying + the root directory for searching. It has the same effect as changing + the current directory before calling it (without actually changing it). + If pathname is relative, the result will contain paths relative to + `root_dir`. If `dir_fd` is not None, it should be a file descriptor referring to a directory, and paths will then be relative to that directory. - If `include_hidden` is true, the patterns '*', '?', '**' will match hidden - directories. + If `include_hidden` is true, the patterns '*', '?', '**' will match + hidden directories. If `recursive` is true, the pattern '**' will match any files and zero or more directories and subdirectories. @@ -56,16 +56,16 @@ def iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, particular order. If `root_dir` is not None, it should be a path-like object specifying - the root directory for searching. It has the same effect as changing - the current directory before calling it (without actually - changing it). If pathname is relative, the result will contain - paths relative to `root_dir`. + the root directory for searching. It has the same effect as changing + the current directory before calling it (without actually changing it). + If pathname is relative, the result will contain paths relative to + `root_dir`. If `dir_fd` is not None, it should be a file descriptor referring to a directory, and paths will then be relative to that directory. - If `include_hidden` is true, the patterns '*', '?', '**' will match hidden - directories. + If `include_hidden` is true, the patterns '*', '?', '**' will match + hidden directories. If `recursive` is true, the pattern '**' will match any files and zero or more directories and subdirectories. @@ -279,15 +279,15 @@ def escape(pathname): def translate(pat, *, recursive=False, include_hidden=False, seps=None): """Translate a pathname with shell wildcards to a regular expression. - If `recursive` is true, the pattern segment '**' will match any number of - path segments. + If `recursive` is true, the pattern segment '**' will match any number + of path segments. If `include_hidden` is true, wildcards can match path segments beginning with a dot ('.'). If a sequence of separator characters is given to `seps`, they will be - used to split the pattern into segments and match path separators. If not - given, os.path.sep and os.path.altsep (where available) are used. + used to split the pattern into segments and match path separators. If + not given, os.path.sep and os.path.altsep (where available) are used. """ if not seps: if os.path.altsep: diff --git a/Lib/gzip.py b/Lib/gzip.py index a89ebf806c8..247efc01527 100644 --- a/Lib/gzip.py +++ b/Lib/gzip.py @@ -31,19 +31,19 @@ def open(filename, mode="rb", compresslevel=_COMPRESS_LEVEL_TRADEOFF, - encoding=None, errors=None, newline=None): + encoding=None, errors=None, newline=None, *, mtime=None): """Open a gzip-compressed file in binary or text mode. - The filename argument can be an actual filename (a str or bytes object), or - an existing file object to read from or write to. + The filename argument can be an actual filename (a str or bytes object), + or an existing file object to read from or write to. - The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or "ab" for - binary mode, or "rt", "wt", "xt" or "at" for text mode. The default mode is - "rb", and the default compresslevel is 9. + The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or "ab" + for binary mode, or "rt", "wt", "xt" or "at" for text mode. The default + mode is "rb", and the default compresslevel is 9. - For binary mode, this function is equivalent to the GzipFile constructor: - GzipFile(filename, mode, compresslevel). In this case, the encoding, errors - and newline arguments must not be provided. + For binary mode, this function is equivalent to the GzipFile + constructor: GzipFile(filename, mode, compresslevel). In this case, + the encoding, errors and newline arguments must not be provided. For text mode, a GzipFile object is created, and wrapped in an io.TextIOWrapper instance with the specified encoding, error handling @@ -63,9 +63,10 @@ def open(filename, mode="rb", compresslevel=_COMPRESS_LEVEL_TRADEOFF, gz_mode = mode.replace("t", "") if isinstance(filename, (str, bytes, os.PathLike)): - binary_file = GzipFile(filename, gz_mode, compresslevel) + binary_file = GzipFile(filename, gz_mode, compresslevel, mtime=mtime) elif hasattr(filename, "read") or hasattr(filename, "write"): - binary_file = GzipFile(None, gz_mode, compresslevel, filename) + binary_file = GzipFile(None, gz_mode, compresslevel, filename, + mtime=mtime) else: raise TypeError("filename must be a str or bytes object, or a file") @@ -148,8 +149,8 @@ class GzipFile(_streams.BaseStream): """The GzipFile class simulates most of the methods of a file object with the exception of the truncate() method. - This class only supports opening files in binary mode. If you need to open a - compressed file in text mode, use the gzip.open() function. + This class only supports opening files in binary mode. If you need to + open a compressed file in text mode, use the gzip.open() function. """ @@ -165,31 +166,34 @@ def __init__(self, filename=None, mode=None, non-trivial value. The new class instance is based on fileobj, which can be a regular - file, an io.BytesIO object, or any other object which simulates a file. - It defaults to None, in which case filename is opened to provide - a file object. + file, an io.BytesIO object, or any other object which simulates + a file. It defaults to None, in which case filename is opened to + provide a file object. When fileobj is not None, the filename argument is only used to be included in the gzip file header, which may include the original filename of the uncompressed file. It defaults to the filename of fileobj, if discernible; otherwise, it defaults to the empty string, - and in this case the original filename is not included in the header. - - The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', or - 'xb' depending on whether the file will be read or written. The default - is the mode of fileobj if discernible; otherwise, the default is 'rb'. - A mode of 'r' is equivalent to one of 'rb', and similarly for 'w' and - 'wb', 'a' and 'ab', and 'x' and 'xb'. - - The compresslevel argument is an integer from 0 to 9 controlling the - level of compression; 1 is fastest and produces the least compression, - and 9 is slowest and produces the most compression. 0 is no compression - at all. The default is 9. - - The optional mtime argument is the timestamp requested by gzip. The time - is in Unix format, i.e., seconds since 00:00:00 UTC, January 1, 1970. - If mtime is omitted or None, the current time is used. Use mtime = 0 - to generate a compressed stream that does not depend on creation time. + and in this case the original filename is not included in the + header. + + The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', 'wb', + 'x', or 'xb' depending on whether the file will be read or written. + The default is the mode of fileobj if discernible; otherwise, the + default is 'rb'. A mode of 'r' is equivalent to one of 'rb', and + similarly for 'w' and 'wb', 'a' and 'ab', and 'x' and 'xb'. + + The compresslevel argument is an integer from 0 to 9 controlling + the level of compression; 1 is fastest and produces the least + compression, and 9 is slowest and produces the most compression. + 0 is no compression at all. The default is 9. + + The optional mtime argument is the timestamp requested by gzip. + The time is in Unix format, i.e., seconds since 00:00:00 UTC, + January 1, 1970. Set mtime to 0 to generate a compressed stream + that does not depend on creation time. If mtime is omitted or None, + the current time is used. If the resulting mtime is outside the + range 0 to 2**32-1, then the value 0 is used instead. """ @@ -295,6 +299,8 @@ def _write_gzip_header(self, compresslevel): mtime = self._write_mtime if mtime is None: mtime = time.time() + if not 0 <= mtime < 2**32: + mtime = 0 write32u(self.fileobj, int(mtime)) if compresslevel == _COMPRESS_LEVEL_BEST: xfl = b'\002' @@ -484,14 +490,22 @@ def _read_exact(fp, n): return data -def _read_until_null(fp, append_to): +def _read_until_null(fp, crc=None): '''Read until the first encountered null byte in fp. - Append to given byte array object''' - while True: - s = fp.read(1) - append_to += s - if not s or s == b'\000': - break + If crc is not None, update and return the CRC. + ''' + if crc is None: + while True: + s = fp.read(1) + if not s or s == b'\000': + break + else: + while True: + s = fp.read(1) + crc = zlib.crc32(s, crc) + if not s or s == b'\000': + break + return crc def _read_gzip_header(fp): @@ -517,30 +531,32 @@ def _read_gzip_header(fp): return last_mtime if flag == FNAME: # Read and discard a null-terminated string containing the filename - while True: - s = fp.read(1) - if not s or s==b'\000': - break + _read_until_null(fp) return last_mtime # Processing for more complex flags. Save header parts for FHCRC checking. - header = bytearray(magic + base_header) + if flag & FHCRC: + crc = zlib.crc32(magic + base_header) + else: + crc = None if flag & FEXTRA: extra_len_bytes = _read_exact(fp, 2) extra_len, = struct.unpack("' % (self.__class__.__name__, self.OutputString()) - def _js_output(self, attrs=None): """Internal implementation without deprecation warning.""" - import base64 + import urllib.parse # Print javascript output_string = self.OutputString(attrs) if _has_control_character(output_string): raise CookieError("Control characters are not allowed in cookies") # Base64-encode value to avoid template # injection in cookie values. - output_encoded = base64.b64encode(output_string.encode('utf-8')).decode("ascii") + output_encoded = urllib.parse.quote(output_string, safe='', encoding='utf-8') return """ """ % (output_encoded,) diff --git a/Lib/imaplib.py b/Lib/imaplib.py index 2fafd9322c6..497b5a60cec 100644 --- a/Lib/imaplib.py +++ b/Lib/imaplib.py @@ -712,7 +712,7 @@ def login(self, user, password): """ typ, dat = self._simple_command('LOGIN', user, self._quote(password)) if typ != 'OK': - raise self.error(dat[-1]) + raise self.error(dat[-1].decode('UTF-8', 'replace')) self.state = 'AUTH' return typ, dat diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py index 94c177cafa0..37a86831ff9 100644 --- a/Lib/json/__init__.py +++ b/Lib/json/__init__.py @@ -292,12 +292,13 @@ def load(fp, *, cls=None, object_hook=None, parse_float=None, ``object_hook`` is also defined, the ``object_pairs_hook`` takes priority. - ``array_hook`` is an optional function that will be called with the result - of any literal array decode (a ``list``). The return value of this function will - be used instead of the ``list``. This feature can be used along - ``object_pairs_hook`` to customize the resulting data structure - for example, - by setting that to ``frozendict`` and ``array_hook`` to ``tuple``, one can get - a deep immutable data structute from any JSON data. + ``array_hook`` is an optional function that will be called with the + result of any literal array decode (a ``list``). The return value of + this function will be used instead of the ``list``. This feature can + be used along ``object_pairs_hook`` to customize the resulting data + structure - for example, by setting that to ``frozendict`` and + ``array_hook`` to ``tuple``, one can get a deep immutable data structure + from any JSON data. To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` kwarg; otherwise ``JSONDecoder`` is used. @@ -306,7 +307,7 @@ def load(fp, *, cls=None, object_hook=None, parse_float=None, cls=cls, object_hook=object_hook, parse_float=parse_float, parse_int=parse_int, parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, - array_hook=None, **kw) + array_hook=array_hook, **kw) def loads(s, *, cls=None, object_hook=None, parse_float=None, @@ -327,12 +328,13 @@ def loads(s, *, cls=None, object_hook=None, parse_float=None, ``object_hook`` is also defined, the ``object_pairs_hook`` takes priority. - ``array_hook`` is an optional function that will be called with the result - of any literal array decode (a ``list``). The return value of this function will - be used instead of the ``list``. This feature can be used along - ``object_pairs_hook`` to customize the resulting data structure - for example, - by setting that to ``frozendict`` and ``array_hook`` to ``tuple``, one can get - a deep immutable data structute from any JSON data. + ``array_hook`` is an optional function that will be called with the + result of any literal array decode (a ``list``). The return value of + this function will be used instead of the ``list``. This feature can + be used along ``object_pairs_hook`` to customize the resulting data + structure - for example, by setting that to ``frozendict`` and + ``array_hook`` to ``tuple``, one can get a deep immutable data structure + from any JSON data. ``parse_float``, if specified, will be called with the string of every JSON float to be decoded. By default this is equivalent to diff --git a/Lib/logging/config.py b/Lib/logging/config.py index 9a8b7016886..e39dac432f6 100644 --- a/Lib/logging/config.py +++ b/Lib/logging/config.py @@ -36,6 +36,7 @@ import threading import traceback +from bisect import bisect_left from socketserver import ThreadingTCPServer, StreamRequestHandler @@ -186,9 +187,8 @@ def _handle_existing_loggers(existing, child_loggers, disable_existing): what was intended by the user. Also, allow existing loggers to NOT be disabled if disable_existing is false. """ - root = logging.root for log in existing: - logger = root.manager.loggerDict[log] + logger = logging.root.manager.loggerDict[log] if log in child_loggers: if not isinstance(logger, logging.PlaceHolder): logger.setLevel(logging.NOTSET) @@ -197,6 +197,20 @@ def _handle_existing_loggers(existing, child_loggers, disable_existing): else: logger.disabled = disable_existing +def _forget_existing_logger(name, existing, existing_set, child_loggers): + """Forget a configured logger and record its existing children.""" + prefixed = name + "." + i = bisect_left(existing, prefixed) + num_existing = len(existing) + while i < num_existing: + child = existing[i] + if not child.startswith(prefixed): + break + if child in existing_set: + child_loggers[child] = None + i += 1 + existing_set.remove(name) + def _install_loggers(cp, handlers, disable_existing): """Create and install loggers""" @@ -235,25 +249,18 @@ def _install_loggers(cp, handlers, disable_existing): #named loggers. With a sorted list it is easier #to find the child loggers. existing.sort() + existing_set = set(existing) #We'll keep the list of existing loggers #which are children of named loggers here... - child_loggers = [] + child_loggers = {} #now set up the new ones... for log in llist: section = cp["logger_%s" % log] qn = section["qualname"] propagate = section.getint("propagate", fallback=1) logger = logging.getLogger(qn) - if qn in existing: - i = existing.index(qn) + 1 # start with the entry after qn - prefixed = qn + "." - pflen = len(prefixed) - num_existing = len(existing) - while i < num_existing: - if existing[i][:pflen] == prefixed: - child_loggers.append(existing[i]) - i += 1 - existing.remove(qn) + if qn in existing_set: + _forget_existing_logger(qn, existing, existing_set, child_loggers) if "level" in section: level = section["level"] logger.setLevel(level) @@ -281,6 +288,7 @@ def _install_loggers(cp, handlers, disable_existing): # logger.propagate = 1 # elif disable_existing_loggers: # logger.disabled = 1 + existing = [name for name in existing if name in existing_set] _handle_existing_loggers(existing, child_loggers, disable_existing) @@ -638,22 +646,16 @@ def configure(self): #named loggers. With a sorted list it is easier #to find the child loggers. existing.sort() + existing_set = set(existing) #We'll keep the list of existing loggers #which are children of named loggers here... - child_loggers = [] + child_loggers = {} #now set up the new ones... loggers = config.get('loggers', EMPTY_DICT) for name in loggers: - if name in existing: - i = existing.index(name) + 1 # look after name - prefixed = name + "." - pflen = len(prefixed) - num_existing = len(existing) - while i < num_existing: - if existing[i][:pflen] == prefixed: - child_loggers.append(existing[i]) - i += 1 - existing.remove(name) + if name in existing_set: + _forget_existing_logger(name, existing, existing_set, + child_loggers) try: self.configure_logger(name, loggers[name]) except Exception as e: @@ -673,6 +675,7 @@ def configure(self): # logger.propagate = True # elif disable_existing: # logger.disabled = True + existing = [name for name in existing if name in existing_set] _handle_existing_loggers(existing, child_loggers, disable_existing) diff --git a/Lib/lzma.py b/Lib/lzma.py index 316066d024e..fb4bbf650f8 100644 --- a/Lib/lzma.py +++ b/Lib/lzma.py @@ -13,6 +13,7 @@ "CHECK_ID_MAX", "CHECK_UNKNOWN", "FILTER_LZMA1", "FILTER_LZMA2", "FILTER_DELTA", "FILTER_X86", "FILTER_IA64", "FILTER_ARM", "FILTER_ARMTHUMB", "FILTER_POWERPC", "FILTER_SPARC", + "FILTER_ARM64", "FILTER_RISCV", "FORMAT_AUTO", "FORMAT_XZ", "FORMAT_ALONE", "FORMAT_RAW", "MF_HC3", "MF_HC4", "MF_BT2", "MF_BT3", "MF_BT4", "MODE_FAST", "MODE_NORMAL", "PRESET_DEFAULT", "PRESET_EXTREME", diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py index e37ec07d722..be2fc3edf5d 100644 --- a/Lib/multiprocessing/connection.py +++ b/Lib/multiprocessing/connection.py @@ -50,7 +50,7 @@ default_family = 'AF_INET' families = ['AF_INET'] -if hasattr(socket, 'AF_UNIX'): +if hasattr(socket, 'AF_UNIX') and sys.platform != 'cygwin': default_family = 'AF_UNIX' families += ['AF_UNIX'] diff --git a/Lib/multiprocessing/context.py b/Lib/multiprocessing/context.py index e1d25145602..45c393798de 100644 --- a/Lib/multiprocessing/context.py +++ b/Lib/multiprocessing/context.py @@ -326,8 +326,10 @@ def _check_available(self): _concrete_contexts = { 'fork': ForkContext(), 'spawn': SpawnContext(), - 'forkserver': ForkServerContext(), } + if reduction.HAVE_SEND_HANDLE: + _concrete_contexts['forkserver'] = ForkServerContext() + # bpo-33725: running arbitrary code after fork() is no longer reliable # on macOS since macOS 10.14 (Mojave). Use spawn by default instead. # gh-84559: We changed everyones default to a thread safeish one in 3.14. diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 7d637325240..811e796f776 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -152,12 +152,14 @@ def splitdrive(p, /): It is always true that: result[0] + result[1] == p - If the path contained a drive letter, drive_or_unc will contain everything - up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") + If the path contained a drive letter, drive_or_unc will contain + everything up to and including the colon. e.g. splitdrive("c:/dir") + returns ("c:", "/dir") - If the path contained a UNC path, the drive_or_unc will contain the host name - and share up to but not including the fourth directory separator character. - e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") + If the path contained a UNC path, the drive_or_unc will contain the + host name and share up to but not including the fourth directory + separator character. e.g. splitdrive("//host/computer/dir") returns + ("//host/computer", "/dir") Paths cannot contain both a drive letter and a UNC path. @@ -222,8 +224,8 @@ def splitroot(p, /): def split(p, /): """Split a pathname. - Return tuple (head, tail) where tail is everything after the final slash. - Either part may be empty.""" + Return tuple (head, tail) where tail is everything after the final + slash. Either part may be empty.""" p = os.fspath(p) seps = _get_bothseps(p) d, r, p = splitroot(p) diff --git a/Lib/opcode.py b/Lib/opcode.py index 4e60fb5af34..750d83b2c87 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -44,7 +44,7 @@ builtins.set, # Append-only — must match CONSTANT_* in # Include/internal/pycore_opcode_utils.h. - None, "", True, False, -1] + None, "", True, False, -1, builtins.frozenset, ()] _nb_ops = _opcode.get_nb_ops() hascompare = [opmap["COMPARE_OP"]] diff --git a/Lib/os.py b/Lib/os.py index 52cbc5bc858..a5e1d805556 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -219,14 +219,17 @@ def _add(str, fn): # Super directory utilities. # (Inspired by Eric Raymond; the doc strings are mostly his) -def makedirs(name, mode=0o777, exist_ok=False): - """makedirs(name [, mode=0o777][, exist_ok=False]) - - Super-mkdir; create a leaf directory and all intermediate ones. Works like - mkdir, except that any intermediate path segment (not just the rightmost) - will be created if it does not exist. If the target directory already - exists, raise an OSError if exist_ok is False. Otherwise no exception is - raised. This is recursive. +def makedirs(name, mode=0o777, exist_ok=False, *, parent_mode=None): + """makedirs(name [, mode=0o777][, exist_ok=False][, parent_mode=None]) + + Super-mkdir; create a leaf directory and all intermediate ones. Works + like mkdir, except that any intermediate path segment (not just the + rightmost) will be created if it does not exist. If the target + directory already exists, raise an OSError if exist_ok is False. + Otherwise no exception is raised. If parent_mode is not None, it will + be used as the mode for any newly-created, intermediate-level + directories. Otherwise, intermediate directories are created with the + default permissions (respecting umask). This is recursive. """ head, tail = path.split(name) @@ -234,7 +237,11 @@ def makedirs(name, mode=0o777, exist_ok=False): head, tail = path.split(head) if head and tail and not path.exists(head): try: - makedirs(head, exist_ok=exist_ok) + if parent_mode is not None: + makedirs(head, mode=parent_mode, exist_ok=exist_ok, + parent_mode=parent_mode) + else: + makedirs(head, exist_ok=exist_ok) except FileExistsError: # Defeats race condition when another thread created the path pass @@ -314,12 +321,12 @@ def walk(top, topdown=True, onerror=None, followlinks=False): dirpath, dirnames, filenames dirpath is a string, the path to the directory. dirnames is a list of - the names of the subdirectories in dirpath (including symlinks to directories, - and excluding '.' and '..'). + the names of the subdirectories in dirpath (including symlinks to + directories, and excluding '.' and '..'). filenames is a list of the names of the non-directory files in dirpath. - Note that the names in the lists are just names, with no path components. - To get a full path (which begins with top) to a file or directory in - dirpath, do os.path.join(dirpath, name). + Note that the names in the lists are just names, with no path + components. To get a full path (which begins with top) to a file or + directory in dirpath, do os.path.join(dirpath, name). If optional arg 'topdown' is true or not specified, the triple for a directory is generated before the triples for any of its subdirectories @@ -329,13 +336,13 @@ def walk(top, topdown=True, onerror=None, followlinks=False): When topdown is true, the caller can modify the dirnames list in-place (e.g., via del or slice assignment), and walk will only recurse into the - subdirectories whose names remain in dirnames; this can be used to prune the - search, or to impose a specific order of visiting. Modifying dirnames when - topdown is false has no effect on the behavior of os.walk(), since the - directories in dirnames have already been generated by the time dirnames - itself is generated. No matter the value of topdown, the list of - subdirectories is retrieved before the tuples for the directory and its - subdirectories are generated. + subdirectories whose names remain in dirnames; this can be used to prune + the search, or to impose a specific order of visiting. Modifying + dirnames when topdown is false has no effect on the behavior of + os.walk(), since the directories in dirnames have already been generated + by the time dirnames itself is generated. No matter the value of + topdown, the list of subdirectories is retrieved before the tuples for + the directory and its subdirectories are generated. By default errors from the os.scandir() call are ignored. If optional arg 'onerror' is specified, it should be a function; it @@ -462,9 +469,9 @@ def fwalk(top=".", topdown=True, onerror=None, *, follow_symlinks=False, dir_fd= The advantage of fwalk() over walk() is that it's safe against symlink races (when follow_symlinks is False). - If dir_fd is not None, it should be a file descriptor open to a directory, - and top should be relative; top will then be relative to that directory. - (dir_fd is always supported for fwalk.) + If dir_fd is not None, it should be a file descriptor open to + a directory, and top should be relative; top will then be relative to + that directory. (dir_fd is always supported for fwalk.) Caution: Since fwalk() yields file descriptors, those are only valid until the diff --git a/Lib/pathlib/__init__.py b/Lib/pathlib/__init__.py index 295f633824a..ffec9c545ee 100644 --- a/Lib/pathlib/__init__.py +++ b/Lib/pathlib/__init__.py @@ -1204,7 +1204,7 @@ def touch(self, mode=0o666, exist_ok=True): fd = os.open(self, flags, mode) os.close(fd) - def mkdir(self, mode=0o777, parents=False, exist_ok=False): + def mkdir(self, mode=0o777, parents=False, exist_ok=False, *, parent_mode=None): """ Create a new directory at this given path. """ @@ -1213,7 +1213,11 @@ def mkdir(self, mode=0o777, parents=False, exist_ok=False): except FileNotFoundError: if not parents or self.parent == self: raise - self.parent.mkdir(parents=True, exist_ok=True) + if parent_mode is not None: + self.parent.mkdir(mode=parent_mode, parents=True, exist_ok=True, + parent_mode=parent_mode) + else: + self.parent.mkdir(parents=True, exist_ok=True) self.mkdir(mode, parents=False, exist_ok=exist_ok) except OSError: # Cannot rely on checking for EEXIST, since the operating system diff --git a/Lib/pprint.py b/Lib/pprint.py index 1fd7e3ec95a..73550219980 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -43,38 +43,23 @@ "PrettyPrinter", "pp"] -def pprint( - object, - stream=None, - indent=4, - width=88, - depth=None, - *, - compact=False, - sort_dicts=True, - underscore_numbers=False, -): +def pprint(object, stream=None, indent=1, width=80, depth=None, *, + compact=False, expand=False, sort_dicts=True, + underscore_numbers=False): """Pretty-print a Python object to a stream [default is sys.stdout].""" printer = PrettyPrinter( stream=stream, indent=indent, width=width, depth=depth, - compact=compact, sort_dicts=sort_dicts, + compact=compact, expand=expand, sort_dicts=sort_dicts, underscore_numbers=underscore_numbers) printer.pprint(object) -def pformat( - object, - indent=4, - width=88, - depth=None, - *, - compact=False, - sort_dicts=True, - underscore_numbers=False, -): +def pformat(object, indent=1, width=80, depth=None, *, + compact=False, expand=False, sort_dicts=True, + underscore_numbers=False): """Format a Python object into a pretty-printed representation.""" return PrettyPrinter(indent=indent, width=width, depth=depth, - compact=compact, sort_dicts=sort_dicts, + compact=compact, expand=expand, sort_dicts=sort_dicts, underscore_numbers=underscore_numbers).pformat(object) @@ -127,17 +112,9 @@ def _safe_tuple(t): class PrettyPrinter: - def __init__( - self, - indent=4, - width=88, - depth=None, - stream=None, - *, - compact=False, - sort_dicts=True, - underscore_numbers=False, - ): + def __init__(self, indent=1, width=80, depth=None, stream=None, *, + compact=False, expand=False, sort_dicts=True, + underscore_numbers=False): """Handle pretty printing operations onto a stream using a set of configured parameters. @@ -156,6 +133,12 @@ def __init__( compact If true, several items will be combined in one line. + Incompatible with expand mode. + + expand + If true, the output will be formatted similar to + pretty-printed json.dumps() when ``indent`` is supplied. + Incompatible with compact mode. sort_dicts If true, dict keys are sorted. @@ -172,6 +155,8 @@ def __init__( raise ValueError('depth must be > 0') if not width: raise ValueError('width must be != 0') + if compact and expand: + raise ValueError('compact and expand are incompatible') self._depth = depth self._indent_per_level = indent self._width = width @@ -180,6 +165,7 @@ def __init__( else: self._stream = _sys.stdout self._compact = bool(compact) + self._expand = bool(expand) self._sort_dicts = sort_dicts self._underscore_numbers = underscore_numbers @@ -232,36 +218,36 @@ def _format(self, object, stream, indent, allowance, context, level): stream.write(rep) def _format_block_start(self, start_str, indent): - if self._compact: - return start_str - return f"{start_str}\n{' ' * indent}" + if self._expand: + return f"{start_str}\n{' ' * indent}" + return start_str def _format_block_end(self, end_str, indent): - if self._compact: - return end_str - return f"\n{' ' * indent}{end_str}" + if self._expand: + return f"\n{' ' * indent}{end_str}" + return end_str def _child_indent(self, indent, prefix_len): - if self._compact: - return indent + prefix_len - return indent + if self._expand: + return indent + return indent + prefix_len def _write_indent_padding(self, write): - if self._compact: - if self._indent_per_level > 1: - write((self._indent_per_level - 1) * " ") - elif self._indent_per_level > 0: - write(self._indent_per_level * " ") + if self._expand: + if self._indent_per_level > 0: + write(self._indent_per_level * " ") + elif self._indent_per_level > 1: + write((self._indent_per_level - 1) * " ") def _pprint_dataclass(self, object, stream, indent, allowance, context, level): # Lazy import to improve module import time from dataclasses import fields as dataclass_fields cls_name = object.__class__.__name__ - if self._compact: - indent += len(cls_name) + 1 - else: + if self._expand: indent += self._indent_per_level + else: + indent += len(cls_name) + 1 items = [(f.name, getattr(object, f.name)) for f in dataclass_fields(object) if f.repr] stream.write(self._format_block_start(cls_name + '(', indent)) self._format_namespace_items(items, stream, indent, allowance, context, level) @@ -384,7 +370,7 @@ def _pprint_list(self, object, stream, indent, allowance, context, level): def _pprint_tuple(self, object, stream, indent, allowance, context, level): stream.write(self._format_block_start('(', indent)) - if len(object) == 1 and self._compact: + if len(object) == 1 and not self._expand: endchar = ',)' else: endchar = ')' @@ -405,7 +391,7 @@ def _pprint_set(self, object, stream, indent, allowance, context, level): else: stream.write(self._format_block_start(typ.__name__ + '({', indent)) endchar = '})' - if self._compact: + if not self._expand: indent += len(typ.__name__) + 1 object = sorted(object, key=_safe_key) self._format_items(object, stream, indent, allowance + len(endchar), @@ -423,10 +409,10 @@ def _pprint_str(self, object, stream, indent, allowance, context, level): chunks = [] lines = object.splitlines(True) if level == 1: - if self._compact: - indent += 1 - else: + if self._expand: indent += self._indent_per_level + else: + indent += 1 allowance += 1 max_width1 = max_width = self._width - indent for i, line in enumerate(lines): @@ -479,10 +465,10 @@ def _pprint_bytes(self, object, stream, indent, allowance, context, level): return parens = level == 1 if parens: - if self._compact: - indent += 1 - else: + if self._expand: indent += self._indent_per_level + else: + indent += 1 allowance += 1 write(self._format_block_start('(', indent)) delim = '' @@ -499,11 +485,11 @@ def _pprint_bytes(self, object, stream, indent, allowance, context, level): def _pprint_bytearray(self, object, stream, indent, allowance, context, level): write = stream.write write(self._format_block_start('bytearray(', indent)) - if self._compact: - recursive_indent = indent + 10 - else: + if self._expand: write(' ' * self._indent_per_level) recursive_indent = indent + self._indent_per_level + else: + recursive_indent = indent + 10 self._pprint_bytes(bytes(object), stream, recursive_indent, allowance + 1, context, level + 1) write(self._format_block_end(')', indent)) @@ -531,10 +517,10 @@ def _pprint_simplenamespace(self, object, stream, indent, allowance, context, le cls_name = 'namespace' else: cls_name = object.__class__.__name__ - if self._compact: - indent += len(cls_name) + 1 - else: + if self._expand: indent += self._indent_per_level + else: + indent += len(cls_name) + 1 items = object.__dict__.items() stream.write(self._format_block_start(cls_name + '(', indent)) self._format_namespace_items(items, stream, indent, allowance, context, @@ -564,7 +550,7 @@ def _format_dict_items(self, items, stream, indent, allowance, context, ) if not last: write(delimnl) - elif not self._compact: + elif self._expand: write(',') def _format_namespace_items(self, items, stream, indent, allowance, context, level): @@ -590,7 +576,7 @@ def _format_namespace_items(self, items, stream, indent, allowance, context, lev ) if not last: write(delimnl) - elif not self._compact: + elif self._expand: write(',') def _format_items(self, items, stream, indent, allowance, context, level): @@ -632,7 +618,7 @@ def _format_items(self, items, stream, indent, allowance, context, level): self._format(ent, stream, indent, allowance if last else 1, context, level) - if last and not self._compact: + if last and self._expand: write(',') def _repr(self, object, context, level): @@ -657,11 +643,11 @@ def _pprint_default_dict(self, object, stream, indent, allowance, context, level return rdf = self._repr(object.default_factory, context, level) cls = object.__class__ - if self._compact: + if self._expand: + stream.write('%s(%s, ' % (cls.__name__, rdf)) + else: indent += len(cls.__name__) + 1 stream.write('%s(%s,\n%s' % (cls.__name__, rdf, ' ' * indent)) - else: - stream.write('%s(%s, ' % (cls.__name__, rdf)) self._pprint_dict(object, stream, indent, allowance + 1, context, level) stream.write(')') @@ -695,14 +681,14 @@ def _pprint_chain_map(self, object, stream, indent, allowance, context, level): cls = object.__class__ stream.write(self._format_block_start(cls.__name__ + '(', indent + self._indent_per_level)) - if self._compact: - indent += len(cls.__name__) + 1 - else: + if self._expand: indent += self._indent_per_level + else: + indent += len(cls.__name__) + 1 for i, m in enumerate(object.maps): if i == len(object.maps) - 1: self._format(m, stream, indent, allowance + 1, context, level) - if not self._compact: + if self._expand: stream.write(',') stream.write(self._format_block_end(')', indent - self._indent_per_level)) else: @@ -717,7 +703,7 @@ def _pprint_deque(self, object, stream, indent, allowance, context, level): return cls = object.__class__ stream.write(self._format_block_start(cls.__name__ + '([', indent)) - if self._compact: + if not self._expand: indent += len(cls.__name__) + 1 if object.maxlen is None: self._format_items(object, stream, indent, allowance + 2, @@ -727,10 +713,10 @@ def _pprint_deque(self, object, stream, indent, allowance, context, level): self._format_items(object, stream, indent, 2, context, level) rml = self._repr(object.maxlen, context, level) - if self._compact: - stream.write('],\n%smaxlen=%s)' % (' ' * indent, rml)) - else: + if self._expand: stream.write('%s], maxlen=%s)' % ('\n' + ' ' * indent, rml)) + else: + stream.write('],\n%smaxlen=%s)' % (' ' * indent, rml)) _dispatch[_collections.deque.__repr__] = _pprint_deque @@ -751,10 +737,10 @@ def _pprint_user_string(self, object, stream, indent, allowance, context, level) def _pprint_template(self, object, stream, indent, allowance, context, level): cls_name = object.__class__.__name__ - if self._compact: - indent += len(cls_name) + 1 - else: + if self._expand: indent += self._indent_per_level + else: + indent += len(cls_name) + 1 items = ( ("strings", object.strings), @@ -770,20 +756,7 @@ def _pprint_template(self, object, stream, indent, allowance, context, level): def _pprint_interpolation(self, object, stream, indent, allowance, context, level): cls_name = object.__class__.__name__ - if self._compact: - indent += len(cls_name) - items = ( - object.value, - object.expression, - object.conversion, - object.format_spec, - ) - stream.write(cls_name + "(") - self._format_items( - items, stream, indent, allowance, context, level - ) - stream.write(")") - else: + if self._expand: indent += self._indent_per_level items = ( ("value", object.value), @@ -798,6 +771,19 @@ def _pprint_interpolation(self, object, stream, indent, allowance, context, leve stream.write( self._format_block_end(")", indent - self._indent_per_level) ) + else: + indent += len(cls_name) + items = ( + object.value, + object.expression, + object.conversion, + object.format_spec, + ) + stream.write(cls_name + "(") + self._format_items( + items, stream, indent, allowance, context, level + ) + stream.write(")") t = t"{0}" _dispatch[type(t).__repr__] = _pprint_template diff --git a/Lib/profiling/sampling/_flamegraph_assets/flamegraph.js b/Lib/profiling/sampling/_flamegraph_assets/flamegraph.js index 1611bf75442..840acf2c27d 100644 --- a/Lib/profiling/sampling/_flamegraph_assets/flamegraph.js +++ b/Lib/profiling/sampling/_flamegraph_assets/flamegraph.js @@ -7,6 +7,7 @@ let invertedData = null; let currentThreadFilter = 'all'; let isInverted = false; let useModuleNames = true; +let zoomedNodeValue = null; // Heat colors are now defined in CSS variables (--heat-1 through --heat-8) // and automatically switch with theme changes - no JS color arrays needed! @@ -316,6 +317,7 @@ function createPythonTooltip(data) { const selfSamples = d.data.self || 0; const selfMs = (selfSamples / 1000).toFixed(2); const percentage = ((d.data.value / data.value) * 100).toFixed(2); + const relativePercentage = Math.min(100, ((d.data.value / (zoomedNodeValue ?? data.value)) * 100)).toFixed(2); const calls = d.data.calls || 0; const childCount = d.children ? d.children.length : 0; const source = d.data.source; @@ -439,6 +441,11 @@ function createPythonTooltip(data) { Percentage: ${percentage}% + ${relativePercentage != percentage && relativePercentage != "100.00" ? ` + Relative Percentage: + ${relativePercentage}% + ` : ''} + ${calls > 0 ? ` Function Calls: ${calls.toLocaleString()} @@ -620,6 +627,9 @@ function createFlamegraph(tooltip, rootValue, data) { const percentage = d.data.value / rootValue; const level = getHeatLevel(percentage); return heatColors[level]; + }) + .onClick(function (d) { + zoomedNodeValue = d.data.value; }); return chart; @@ -629,6 +639,7 @@ function renderFlamegraph(chart, data) { d3.select("#chart").datum(data).call(chart); window.flamegraphChart = chart; window.flamegraphData = data; + zoomedNodeValue = null; populateStats(data); } @@ -1269,6 +1280,7 @@ function filterDataByThread(data, threadId) { function resetZoom() { if (window.flamegraphChart) { + zoomedNodeValue = null; window.flamegraphChart.resetZoom(); } } diff --git a/Lib/profiling/sampling/jsonl_collector.py b/Lib/profiling/sampling/jsonl_collector.py index 7d26129b80d..5aa42ef0902 100644 --- a/Lib/profiling/sampling/jsonl_collector.py +++ b/Lib/profiling/sampling/jsonl_collector.py @@ -164,6 +164,7 @@ def export(self, filename): self._iter_final_agg_entries(), ) self._write_message(output, self._build_end_record()) + print(f"JSONL profile written to {filename}") def _build_meta_record(self): record = { diff --git a/Lib/profiling/sampling/sample.py b/Lib/profiling/sampling/sample.py index b9e7e2625d0..2d379e1e16a 100644 --- a/Lib/profiling/sampling/sample.py +++ b/Lib/profiling/sampling/sample.py @@ -327,6 +327,33 @@ def _print_unwinder_stats(self): print(f" Hits: {code_hits:n} ({ANSIColors.GREEN}{fmt(code_hits_pct)}%{ANSIColors.RESET})") print(f" Misses: {code_misses:n} ({ANSIColors.RED}{fmt(code_misses_pct)}%{ANSIColors.RESET})") + batched_attempts = stats.get('batched_read_attempts', 0) + batched_successes = stats.get('batched_read_successes', 0) + batched_misses = stats.get('batched_read_misses', 0) + segments_requested = stats.get('batched_read_segments_requested', 0) + segments_completed = stats.get('batched_read_segments_completed', 0) + if batched_attempts > 0: + batched_success_rate = stats.get('batched_read_success_rate', 0.0) + batched_miss_rate = 100.0 - batched_success_rate + segment_completion_rate = stats.get( + 'batched_read_segment_completion_rate', 0.0 + ) + + print(f" {ANSIColors.CYAN}Batched Reads:{ANSIColors.RESET}") + print(f" Attempts: {batched_attempts:n}") + print( + f" Successes: {batched_successes:n} " + f"({ANSIColors.GREEN}{fmt(batched_success_rate)}%{ANSIColors.RESET})" + ) + print( + f" Misses: {batched_misses:n} " + f"({ANSIColors.RED}{fmt(batched_miss_rate)}%{ANSIColors.RESET})" + ) + print( + f" Segments read: {segments_completed:n}/{segments_requested:n} " + f"({ANSIColors.GREEN}{fmt(segment_completion_rate)}%{ANSIColors.RESET})" + ) + # Memory operations memory_reads = stats.get('memory_reads', 0) memory_bytes = stats.get('memory_bytes_read', 0) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index a1a6aad434d..497cc7d90a4 100644 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1845,6 +1845,7 @@ class Helper: 'in': ('in', 'SEQUENCEMETHODS'), 'is': 'COMPARISON', 'lambda': ('lambda', 'FUNCTIONS'), + 'lazy': ('lazy', 'MODULES'), 'nonlocal': ('nonlocal', 'global NAMESPACES'), 'not': 'BOOLEAN', 'or': 'BOOLEAN', diff --git a/Lib/shutil.py b/Lib/shutil.py index 45cbe4c855b..c8d02bbaeb8 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -885,10 +885,14 @@ def move(src, dst, copy_function=copy2): If dst already exists but is not a directory, it may be overwritten depending on os.rename() semantics. - If the destination is on our current filesystem, then rename() is used. - Otherwise, src is copied to the destination and then removed. Symlinks are - recreated under the new name if os.rename() fails because of cross - filesystem renames. + os.rename() is preferably used if the source and destination are on the + same filesystem. In case os.rename() fails due to OSError (e.g. the user + has write permission to *dst* file but not to its parent directory), + this method falls back to using *copy_function* silently. + Symlinks are also recreated under the new name if os.rename() fails + because of cross filesystem renames. + + It's recommended to use os.rename() if atomic move is strictly required. The optional `copy_function` argument is a callable that will be used to copy the source or it will be delegated to `copytree`. @@ -1638,15 +1642,3 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None): if _access_check(name, mode): return name return None - -def __getattr__(name): - if name == "ExecError": - import warnings - warnings._deprecated( - "shutil.ExecError", - f"{warnings._DEPRECATED_MSG}; it " - "isn't raised by any shutil function.", - remove=(3, 16) - ) - return RuntimeError - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/Lib/signal.py b/Lib/signal.py index c8cd3d4f597..6387e5c35db 100644 --- a/Lib/signal.py +++ b/Lib/signal.py @@ -15,7 +15,7 @@ 'Handlers', __name__, lambda name: name in ('SIG_DFL', 'SIG_IGN')) -if 'pthread_sigmask' in _globals: +if 'SIG_BLOCK' in _globals: _IntEnum._convert_( 'Sigmasks', __name__, lambda name: name in ('SIG_BLOCK', 'SIG_UNBLOCK', 'SIG_SETMASK')) diff --git a/Lib/site.py b/Lib/site.py index 6f38707bbe4..a1c875e0628 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -157,34 +157,24 @@ def _init_pathinfo(): # PEP 829 implementation notes. # # Startup information (.pth and .start file information) can be processed in -# implicit or explicit batches. Implicit batches are handled by the site.py -# machinery automatically, while explicit batches are driven by user code and -# processed on boundaries defined by that code. -# -# addsitedir() calls which use the default defer_processing_start_files=False -# are self-contained: they create a per-call _StartupState, populate it from -# the site directory's .pth/.start files, run process() on it, and then throw -# the state away. This is implicit batching and in that case the -# _startup_state global variable stays None. +# implicit or explicit batches. Implicit batches are self-contained +# site.addsitedir() calls: they create a per-call StartupState, populate it +# from the site directory's .pth and .start files, run process() on it, and +# then throw the state away. # # main() needs different semantics: it accumulates state across multiple -# addsitedir() calls (user-site plus all global site-packages) so that -# every sys.path extension is visible *before* any startup code (.pth -# import lines and .start entry points) runs. Callers opt into this by -# passing defer_processing_start_files=True, which preserves the _StartupState -# into the global _startup_state. Subsequent addsitedir() calls (with -# or without defer_processing_start_files=True) then write into that -# same shared state, and a later process_startup_files() call flushes -# all the state and resets the global to None. +# StartupState.addsitedir() calls (user-site plus all global site-packages) so +# that every sys.path extension is visible *before* any startup code (.start +# entry points and .pth import lines) runs. Callers can opt into the same +# behavior by creating a StartupState directly and calling its addsitedir(), +# addusersitepackages(), and addsitepackages() methods, then invoking +# process() once at the end of the batch. # -# Here's the CRITICAL reentrancy invariant: process_startup_files() must clear -# the global _startup_state *before* calling state.process(), so that any -# reentrant site.addsitedir() calls reached from an exec'd .pth import line or -# a .start entry point falls into the per-call branch and gets its own fresh -# state. Otherwise the recursive addsitedir() would mutate the very dicts -# that the outer state.process() is iterating. This is the bug reported in -# gh-149504. -_startup_state = None +# Here's the CRITICAL reentrancy invariant: recursive site.addsitedir() calls +# reached from a .start entry point or an exec'd .pth import line must not +# mutate the StartupState currently being processed. Reentrant calls reach +# the module-level site.addsitedir() shim, which always builds a fresh +# per-call state. def _read_pthstart_file(sitedir, name, suffix): @@ -238,45 +228,174 @@ def _read_pthstart_file(sitedir, name, suffix): return content.splitlines(), filename -class _StartupState: +class StartupState: """Per-batch accumulator for .pth and .start file processing. - A _StartupState collects sys.path extensions, deprecated .pth import - lines, and .start entry points read from one or more site-packages - directories. Calling process() applies them in PEP 829 order: paths - are added to sys.path first, then import lines from .pth files (skipping - any with a matching .start), then entry points from .start files. + A StartupState collects sys.path extensions, deprecated .pth import lines, + and .start entry points read from one or more site-packages directories. + Calling process() applies them in PEP 829 order: paths are added to + sys.path first, then import lines from .pth files (skipping any with a + matching .start), then entry points from .start files. State lives entirely on the instance; there is no module-level pending state. This is what makes the module reentrancy-safe: a site.addsitedir() call reached recursively from an exec'd import line or a .start entry - point operates on a different _StartupState than the one being processed - by the outer call. + point operates on a different StartupState than the one being processed by + the outer call. - The internal data is intentionally private; the public methods - (read_pth_file, read_start_file, process) are the only supported write - APIs. + The internal data is intentionally private. The lower-level write + methods (_record_sitedir(), _read_pth_file(), _read_start_file()) are + private to the site module; the public surface is addsitedir(), + addusersitepackages(), addsitepackages(), and process(). """ - __slots__ = ('_syspaths', '_importexecs', '_entrypoints') + __slots__ = ( + '_known_paths', + '_processed_sitedirs', + '_path_entries', + '_importexecs', + '_entrypoints', + ) + + def __init__(self, known_paths=None): + """Create an independent startup state. + + *known_paths* is a set of case-normalized paths already present + on sys.path, used to avoid duplicate path entries. When None + (the default), it is initialized from the current sys.path. - def __init__(self): - # All three dicts map "" -> list + A caller-supplied set is stored by reference and mutated in place + as new paths are recorded; pass a fresh set per StartupState if + isolation across instances is required. + """ + self._known_paths = ( + _init_pathinfo() + if known_paths is None + else known_paths) + self._processed_sitedirs = set() + # The sys.path append ledger. This is a list of 2-tuples of the form + # (pthfile, path) where `pthfile` is the .pth file which is extending + # the path, and `path` is the directory to add to sys.path. Note that + # to preserve the interleaving semantics (i.e. .pth file paths are + # added after the sitedir in which the .pth file is found), `path` + # could be a sitedir, in which case `pthfile` will always be None. + self._path_entries = [] + # Both dicts map "" -> list # of items collected from that file. Mapping by filename lets us # cross-reference a .pth and its matching .start (PEP 829 import # suppression rule) and lets _print_error report the source file # when an entry fails. - self._syspaths = {} self._importexecs = {} self._entrypoints = {} - def read_pth_file(self, sitedir, name, known_paths): + def addsitedir(self, sitedir): + """Add a site directory and accumulate its .pth and .start startup data. + + Read the .pth and .start files in *sitedir* and record their + sys.path extensions, deprecated .pth import lines, and .start entry + points on this state. The recorded data is not applied until + process() is called. + + Typically used to batch multiple site directories before a single + process() call, so that every sys.path extension is visible before + any startup code runs. Reentrant calls reached from a .start entry + point or an exec'd .pth import line must not mutate the state + currently being processed; for those cases, use site.addsitedir() + instead, which always creates a fresh per-call state. + """ + self._addsitedir(sitedir, process_known_sitedirs=True) + + def addusersitepackages(self): + """Add the per-user site-packages directory, if enabled. + + The user site directory is added only when user site-packages are + enabled and the directory exists. Its startup data is accumulated + for later processing by process(). + """ + _trace("Processing user site-packages") + user_site = getusersitepackages() + if ENABLE_USER_SITE and os.path.isdir(user_site): + self.addsitedir(user_site) + + def addsitepackages(self, prefixes=None): + """Add global site-packages directories, if they exist. + + Site-packages directories are computed from *prefixes*, or from the + global PREFIXES when *prefixes* is None. Each directory's startup + data is accumulated for later processing by process(). + """ + _trace("Processing global site-packages") + for sitedir in getsitepackages(prefixes): + if os.path.isdir(sitedir): + self.addsitedir(sitedir) + + def _addsitedir(self, sitedir, *, process_known_sitedirs): + """Internal addsitedir() implementation with full dedup control. + + The public addsitedir() always uses process_known_sitedirs=True + (gh-149819 semantics). The module-level legacy known_paths shim + uses process_known_sitedirs=False to preserve 3.14 idempotency + (gh-75723). + """ + sitedir = self._record_sitedir( + sitedir, process_known_sitedirs=process_known_sitedirs) + if sitedir is None: + return + try: + names = os.listdir(sitedir) + except OSError: + return + + # The following phases are defined by PEP 829. + # Phases 1-3: Read .pth files, accumulating paths and import lines. + pth_names = sorted( + name for name in names + if name.endswith(".pth") and not name.startswith(".") + ) + for name in pth_names: + self._read_pth_file(sitedir, name) + + # Phases 6-7: Discover .start files and accumulate their entry points. + # Import lines from .pth files with a matching .start file are + # discarded at flush time by _exec_imports(). + start_names = sorted( + name for name in names + if name.endswith(".start") and not name.startswith(".") + ) + for name in start_names: + self._read_start_file(sitedir, name) + + def _record_sitedir(self, sitedir, *, process_known_sitedirs=True): + sitedir, sitedircase = makepath(sitedir) + # Have we already processed this sitedir? + if sitedircase in self._processed_sitedirs: + return None + # In legacy known_paths mode, a known sitedir means its startup files + # were already processed by an earlier addsitedir() call, so skip it + # to preserve idempotency (gh-75723). In explicit StartupState mode, + # known_paths only tracks sys.path entries; a sitedir may already be + # on sys.path (for example from $PYTHONPATH, gh-149819) but still need + # its .pth and .start files processed once. The separate + # _processed_sitedirs set is what lets explicit batches distinguish + # "already on sys.path" from "startup files already read". + if not process_known_sitedirs and sitedircase in self._known_paths: + return None + # Record that we've processed this sitedir. + self._processed_sitedirs.add(sitedircase) + if sitedircase not in self._known_paths: + self._known_paths.add(sitedircase) + # Add the sitedir to the sys.path extension ledger. There is no + # .pth file to record. + self._path_entries.append((None, sitedir)) + return sitedir + + def _read_pth_file(self, sitedir, name): """Parse a .pth file, accumulating sys.path extensions and import lines. Errors on individual lines do not abort processing of the rest of - the file (PEP 829). ``known_paths`` is the per-batch dedup - ledger: any path already in it is skipped, and newly accepted - paths are added to it so that subsequent .pth files in the same - batch don't add them more than once. + the file (PEP 829). Per-batch deduplication is done against + self._known_paths: any path already in it is skipped, and newly + accepted paths are added to it so that subsequent .pth files in + the same batch don't add them more than once. """ lines, filename = _read_pthstart_file(sitedir, name, ".pth") if lines is None: @@ -308,18 +427,19 @@ def read_pth_file(self, sitedir, name, known_paths): _trace(f"Error in {filename!r}, line {n:d}: {line!r}", exc) continue - # PEP 829 dedup: skip paths already seen in this batch. See - # _startup_state docstring above for batch lifetimes. - if dircase in known_paths: + # PEP 829 dedup: skip paths already seen in this batch. + if dircase in self._known_paths: _trace( f"In {filename!r}, line {n:d}: " f"skipping duplicate sys.path entry: {dir_}" ) else: - self._syspaths.setdefault(filename, []).append(dir_) - known_paths.add(dircase) + # Add this directory to the sys.path extension ledger, while + # also recording the .pth file it was found in. + self._path_entries.append((filename, dir_)) + self._known_paths.add(dircase) - def read_start_file(self, sitedir, name): + def _read_start_file(self, sitedir, name): """Parse a .start file for a list of entry point strings.""" lines, filename = _read_pthstart_file(sitedir, name, ".start") if lines is None: @@ -353,20 +473,31 @@ def process(self): self._execute_start_entrypoints() def _extend_syspath(self): - # Duplicates have already been filtered (in existing sys.path or - # across .pth files via known_paths), and entries are already - # abspath/normpath'd, so all that remains is to confirm the path - # exists. - for filename, dirs in self._syspaths.items(): - for dir_ in dirs: - if os.path.exists(dir_): + # Duplicate path-extension specifications have already been filtered + # out upstream across .pth files within this batch (via known_paths), + # and ledger entries are already abspath/normpath'd. .pth-derived + # entries (filename is not None) are existence-checked and skipped + # with an error if missing. Sitedir entries (filename is None) are + # appended unconditionally: legacy addsitedir() added the sitedir to + # sys.path before attempting to list it, so an unreadable or + # non-existent sitedir still landed on sys.path. Deferring the + # append to here preserves that contract. + for filename, dir_ in self._path_entries: + # As a backstop, known_paths may not have been seeded from sys.path + # (callers can pass an empty set), and multiple StartupState + # instances against the same sys.path don't share state, so always + # do a final anti-duplication check. + if dir_ in sys.path: + continue + if filename is None or os.path.exists(dir_): + if filename is not None: _trace(f"Extending sys.path with {dir_} from {filename}") - sys.path.append(dir_) - else: - _print_error( - f"In {filename}: {dir_} does not exist; " - f"skipping sys.path append" - ) + sys.path.append(dir_) + else: + _print_error( + f"In {filename}: {dir_} does not exist; " + f"skipping sys.path append" + ) def _exec_imports(self): # For each `import` line we've seen in a .pth file, exec() it in @@ -435,26 +566,6 @@ def _execute_start_entrypoints(self): ) -def process_startup_files(): - """Flush any pending startup-file state accumulated during a batch. - - Used by main() (and any external caller that drove addsitedir() with - defer_processing_start_files=True) to apply the accumulated paths - and run the deferred import lines / entry points. - - Reentrancy: the active batch state is detached from _startup_state - *before* state.process() runs. This way, if an exec'd import line - or .start entry point itself calls site.addsitedir(), that call - creates its own per-call _StartupState rather than mutating the dicts - being iterated here. See gh-149504. - """ - global _startup_state - if _startup_state is None: - return - state, _startup_state = _startup_state, None - state.process() - - def addpackage(sitedir, name, known_paths): """Process a .pth file within the site-packages directory.""" if known_paths is None: @@ -463,100 +574,31 @@ def addpackage(sitedir, name, known_paths): else: reset = False - # If a batch is already in progress (for example, main() is still - # accumulating sitedirs), participate in the batch by writing into the - # shared _startup_state and letting the eventual process_startup_files() - # flush it. Otherwise this is a standalone call, so create a unique - # per-call state, populate it, and process it before returning. - if _startup_state is None: - state = _StartupState() - state.read_pth_file(sitedir, name, known_paths) - state.process() - else: - _startup_state.read_pth_file(sitedir, name, known_paths) + state = StartupState(known_paths) + state._read_pth_file(sitedir, name) + state.process() return None if reset else known_paths -def addsitedir(sitedir, known_paths=None, *, defer_processing_start_files=False): - """Add 'sitedir' argument to sys.path if missing and handle startup - files.""" - global _startup_state +def addsitedir(sitedir, known_paths=None): + """Add a site directory and process its startup files. + + For batched processing across multiple site directories, build a + StartupState explicitly and call StartupState.addsitedir() on it; that + defers .pth/.start processing until a single StartupState.process() call. + """ _trace(f"Adding directory: {sitedir!r}") if known_paths is None: - known_paths = _init_pathinfo() - reset = True + state = StartupState(_init_pathinfo()) + state.addsitedir(sitedir) else: - reset = False - sitedir, sitedircase = makepath(sitedir) - - # If the normcase'd new sitedir isn't already known, append it to - # sys.path, keep a record of it, and process all .pth and .start files - # found in that directory. If the new sitedir is known, be sure not - # to process all of those more than once! gh-75723 - if sitedircase not in known_paths: - sys.path.append(sitedir) - known_paths.add(sitedircase) - - try: - names = os.listdir(sitedir) - except OSError: - return None if reset else known_paths - - # Pick the _StartupState we'll write into. There are three cases: - # - # 1. A batch is already active (_startup_state is set, e.g. because - # main() previously called us with - # defer_processing_start_files=True). Participate in this batch by - # sharing the same state. Don't flush the state since the batch's - # eventual process_startup_files() will do that. - # - # 2. There is no active batch but the caller passed - # defer_processing_start_files=True. Preserve a fresh - # _StartupState into the global _startup_state so that subsequent - # addsitedir() calls participate in this batch, and so that the - # caller's later process_startup_files() finds it. - # - # 3. This is a standalone call (there is no active batch and - # defer_processing_start_files=False). Create a unique per-call - # state, populate it, process it, and then clear it. Per-call - # state is what makes reentrant addsitedir() safe; a recursive call - # from inside process() lands here too and gets its own independent - # state. - - if _startup_state is not None: - state = _startup_state - flush_now = False - elif defer_processing_start_files: - state = _startup_state = _StartupState() - flush_now = False - else: - state = _StartupState() - flush_now = True - - # The following phases are defined by PEP 829. - # Phases 1-3: Read .pth files, accumulating paths and import lines. - pth_names = sorted( - name for name in names - if name.endswith(".pth") and not name.startswith(".") - ) - for name in pth_names: - state.read_pth_file(sitedir, name, known_paths) - - # Phases 6-7: Discover .start files and accumulate their entry points. - # Import lines from .pth files with a matching .start file are - # discarded at flush time by _StartupState._exec_imports(). - start_names = sorted( - name for name in names - if name.endswith(".start") and not name.startswith(".") - ) - for name in start_names: - state.read_start_file(sitedir, name) - - if flush_now: - state.process() - - return None if reset else known_paths + # Preserve gh-75723 idempotency for legacy known_paths mode: a + # sitedir already present in known_paths is skipped, not reprocessed. + state = StartupState(known_paths) + state._addsitedir(sitedir, process_known_sitedirs=False) + state.process() + return known_paths def check_enableusersite(): @@ -668,21 +710,20 @@ def getusersitepackages(): return USER_SITE -def addusersitepackages(known_paths, *, defer_processing_start_files=False): - """Add a per user site-package to sys.path - Each user has its own python directory with site-packages in the - home directory. - """ - # get the per user site-package path - # this call will also make sure USER_BASE and USER_SITE are set - _trace("Processing user site-packages") - user_site = getusersitepackages() +def addusersitepackages(known_paths): + """Add the per-user site-packages directory, if enabled. - if ENABLE_USER_SITE and os.path.isdir(user_site): - addsitedir(user_site, known_paths, defer_processing_start_files=defer_processing_start_files) + The user site directory is added only when user site-packages are enabled + and the directory exists. Return *known_paths*, updated with any paths + added by addsitedir(). + """ + state = StartupState(known_paths) + state.addusersitepackages() + state.process() return known_paths + def getsitepackages(prefixes=None): """Returns a list containing all global site-packages directories. @@ -722,15 +763,20 @@ def getsitepackages(prefixes=None): sitepackages.append(os.path.join(prefix, "Lib", "site-packages")) return sitepackages -def addsitepackages(known_paths, prefixes=None, *, defer_processing_start_files=False): - """Add site-packages to sys.path""" - _trace("Processing global site-packages") - for sitedir in getsitepackages(prefixes): - if os.path.isdir(sitedir): - addsitedir(sitedir, known_paths, defer_processing_start_files=defer_processing_start_files) +def addsitepackages(known_paths, prefixes=None): + """Add global site-packages directories, if they exist. + + Site-packages directories are computed from *prefixes*, or from the global + prefixes when *prefixes* is None. Return *known_paths*, updated with any + paths added by addsitedir(). + """ + state = StartupState(known_paths) + state.addsitepackages(prefixes) + state.process() return known_paths + def setquit(): """Define new builtins 'quit' and 'exit'. @@ -897,6 +943,15 @@ def write_history(): def venv(known_paths): + """Process pyvenv.cfg and add the venv site-packages, if applicable.""" + state = StartupState(known_paths) + _venv(state) + state.process() + return known_paths + + +def _venv(state): + """State-driven implementation of venv(); used by main() for batching.""" global PREFIXES, ENABLE_USER_SITE env = os.environ @@ -936,20 +991,22 @@ def venv(known_paths): sys._home = value if sys.prefix != site_prefix: - _warn(f'Unexpected value in sys.prefix, expected {site_prefix}, got {sys.prefix}', RuntimeWarning) + _warn( + f'Unexpected value in sys.prefix, expected {site_prefix}, got {sys.prefix}', + RuntimeWarning) if sys.exec_prefix != site_prefix: - _warn(f'Unexpected value in sys.exec_prefix, expected {site_prefix}, got {sys.exec_prefix}', RuntimeWarning) + _warn( + f'Unexpected value in sys.exec_prefix, expected {site_prefix}, got {sys.exec_prefix}', + RuntimeWarning) - # Doing this here ensures venv takes precedence over user-site - addsitepackages(known_paths, [sys.prefix]) + # Doing this here ensures venv takes precedence over user-site. + state.addsitepackages([sys.prefix]) if system_site == "true": PREFIXES += [sys.base_prefix, sys.base_exec_prefix] else: ENABLE_USER_SITE = False - return known_paths - def execsitecustomize(): """Run custom site specific code, if available.""" @@ -1000,24 +1057,25 @@ def main(): global ENABLE_USER_SITE orig_path = sys.path[:] - known_paths = removeduppaths() + removeduppaths() if orig_path != sys.path: # removeduppaths() might make sys.path absolute. # Fix __file__ of already imported modules too. abs_paths() - known_paths = venv(known_paths) + state = StartupState(set()) + _venv(state) + if ENABLE_USER_SITE is None: ENABLE_USER_SITE = check_enableusersite() - known_paths = addusersitepackages(known_paths, defer_processing_start_files=True) - known_paths = addsitepackages(known_paths, defer_processing_start_files=True) + + state.addusersitepackages() + state.addsitepackages() # PEP 829: flush accumulated data from all .pth and .start files. # Paths are extended first, then deprecated import lines are exec'd, # and finally .start entry points are executed — ensuring sys.path is - # fully populated before any startup code runs. process_startup_files() - # also clears the pending state so a later addsitedir() call does - # not re-apply already-processed data. - process_startup_files() + # fully populated before any startup code runs. + state.process() setquit() setcopyright() sethelper() diff --git a/Lib/ssl.py b/Lib/ssl.py index 896db17baeb..f23bcbe75e7 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -1055,7 +1055,12 @@ def _create(cls, sock, server_side=False, do_handshake_on_connect=True, notconn_pre_handshake_data = self.recv(1) except OSError as e: # EINVAL occurs for recv(1) on non-connected on unix sockets. - if e.errno not in (errno.ENOTCONN, errno.EINVAL): + if e.errno in (errno.ENOTCONN, errno.EINVAL): + pass + elif sys.platform == 'cygwin' and e.errno == errno.EAGAIN: + # EAGAIN occurs on Cygwin. + pass + else: raise notconn_pre_handshake_data = b'' self.setblocking(blocking) diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py index 298256a5b23..719b306b02b 100644 --- a/Lib/sysconfig/__init__.py +++ b/Lib/sysconfig/__init__.py @@ -437,6 +437,7 @@ def parse_config_h(fp, vars=None): import re define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") + quoted_re = re.compile('^"(.*)"$') while True: line = fp.readline() @@ -445,6 +446,8 @@ def parse_config_h(fp, vars=None): m = define_rx.match(line) if m: n, v = m.group(1, 2) + if mq := quoted_re.match(v): + v = mq.group(1) try: if n in _ALWAYS_STR: raise ValueError diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 772b51295fc..a293a049247 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -380,7 +380,6 @@ def __init__(self, name, mode, comptype, fileobj, bufsize, except ImportError: raise CompressionError("bz2 module is not available") from None if mode == "r": - self.dbuf = b"" self.cmp = bz2.BZ2Decompressor() self.exception = OSError else: @@ -392,7 +391,6 @@ def __init__(self, name, mode, comptype, fileobj, bufsize, except ImportError: raise CompressionError("lzma module is not available") from None if mode == "r": - self.dbuf = b"" self.cmp = lzma.LZMADecompressor() self.exception = lzma.LZMAError else: @@ -403,7 +401,6 @@ def __init__(self, name, mode, comptype, fileobj, bufsize, except ImportError: raise CompressionError("compression.zstd module is not available") from None if mode == "r": - self.dbuf = b"" self.cmp = zstd.ZstdDecompressor() self.exception = zstd.ZstdError else: @@ -485,7 +482,6 @@ def _init_read_gz(self): """Initialize for reading a gzip compressed fileobj. """ self.cmp = self.zlib.decompressobj(-self.zlib.MAX_WBITS) - self.dbuf = b"" # taken from gzip.GzipFile with some alterations if self.__read(2) != b"\037\213": @@ -498,7 +494,7 @@ def _init_read_gz(self): if flag & 4: xlen = ord(self.__read(1)) + 256 * ord(self.__read(1)) - self.read(xlen) + self.__read(xlen) if flag & 8: while True: s = self.__read(1) @@ -543,26 +539,44 @@ def _read(self, size): if self.comptype == "tar": return self.__read(size) - c = len(self.dbuf) - t = [self.dbuf] + c = 0 + t = [] while c < size: - # Skip underlying buffer to avoid unaligned double buffering. - if self.buf: - buf = self.buf - self.buf = b"" + if self.comptype == "gz": + # zlib interface is different than others. + # It returns data in unconsumed_tail. + if self.buf: + cbuf = self.buf + self.buf = b"" + else: + cbuf = self.fileobj.read(self.bufsize) + if not cbuf: + break + + try: + dbuf = self.cmp.decompress(cbuf, size - c) + self.buf = self.cmp.unconsumed_tail + except self.exception as e: + raise ReadError("invalid compressed data") from e else: - buf = self.fileobj.read(self.bufsize) - if not buf: - break - try: - buf = self.cmp.decompress(buf) - except self.exception as e: - raise ReadError("invalid compressed data") from e - t.append(buf) - c += len(buf) - t = b"".join(t) - self.dbuf = t[size:] - return t[:size] + # Other decompressors have needs_input. + # decompress() can buffer data internally. + if self.cmp.needs_input: + cbuf = self.fileobj.read(self.bufsize) + if not cbuf: + break + else: + cbuf = b"" + + try: + dbuf = self.cmp.decompress(cbuf, size - c) + except self.exception as e: + raise ReadError("invalid compressed data") from e + + t.append(dbuf) + c += len(dbuf) + + return b"".join(t) def __read(self, size): """Return size bytes from stream. If internal buffer is empty, @@ -899,11 +913,14 @@ class TarInfo(object): size = 'Size in bytes.', mtime = 'Time of last modification.', chksum = 'Header checksum.', - type = ('File type. type is usually one of these constants: ' - 'REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, ' - 'CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.'), + type = ('File type. type is usually one of these constants: ' + 'REGTYPE,\n' + 'AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, ' + 'CONTTYPE, CHRTYPE,\n' + 'BLKTYPE, GNUTYPE_SPARSE.'), linkname = ('Name of the target file name, which is only present ' - 'in TarInfo objects of type LNKTYPE and SYMTYPE.'), + 'in TarInfo\n' + 'objects of type LNKTYPE and SYMTYPE.'), uname = 'User name.', gname = 'Group name.', devmajor = 'Device major number.', @@ -911,7 +928,8 @@ class TarInfo(object): offset = 'The tar header starts here.', offset_data = "The file's data starts here.", pax_headers = ('A dictionary containing key-value pairs of an ' - 'associated pax extended header.'), + 'associated pax\n' + 'extended header.'), sparse = 'Sparse member information.', _sparse_structs = None, _link_target = None, @@ -1425,7 +1443,7 @@ def _proc_gnulong(self, tarfile): # Remove redundant slashes from directories. This is to be consistent # with frombuf(). if next.isdir(): - next.name = next.name.removesuffix("/") + next.name = next.name.rstrip("/") return next @@ -2255,10 +2273,11 @@ def gettarinfo(self, name=None, arcname=None, fileobj=None): return tarinfo def list(self, verbose=True, *, members=None): - """Print a table of contents to sys.stdout. If 'verbose' is False, only - the names of the members are printed. If it is True, an 'ls -l'-like - output is produced. 'members' is optional and must be a subset of the - list returned by getmembers(). + """Print a table of contents to sys.stdout. + + If 'verbose' is False, only the names of the members are printed. + If it is True, an 'ls -l'-like output is produced. 'members' is + optional and must be a subset of the list returned by getmembers(). """ # Convert tarinfo type to stat type. type2mode = {REGTYPE: stat.S_IFREG, SYMTYPE: stat.S_IFLNK, @@ -2349,10 +2368,12 @@ def add(self, name, arcname=None, recursive=True, *, filter=None): self.addfile(tarinfo) def addfile(self, tarinfo, fileobj=None): - """Add the TarInfo object 'tarinfo' to the archive. If 'tarinfo' represents - a non zero-size regular file, the 'fileobj' argument should be a binary file, - and tarinfo.size bytes are read from it and added to the archive. - You can create TarInfo objects directly, or by using gettarinfo(). + """Add the TarInfo object 'tarinfo' to the archive. + + If 'tarinfo' represents a non zero-size regular file, the 'fileobj' + argument should be a binary file, and tarinfo.size bytes are read + from it and added to the archive. You can create TarInfo objects + directly, or by using gettarinfo(). """ self._check("awx") diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index 580d9f2b325..115a187a8a8 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -6143,7 +6143,10 @@ def test_preload_resources(self): @only_run_in_spawn_testsuite("avoids redundant testing.") def test_mixed_startmethod(self): # Fork-based locks cannot be used with spawned process - for process_method in ["spawn", "forkserver"]: + test_methods = ["spawn"] + if "forkserver" in multiprocessing.get_all_start_methods(): + test_methods.append("forkserver") + for process_method in test_methods: queue = multiprocessing.get_context("fork").Queue() process_ctx = multiprocessing.get_context(process_method) p = process_ctx.Process(target=close_queue, args=(queue,)) @@ -6152,7 +6155,7 @@ def test_mixed_startmethod(self): p.start() # non-fork-based locks can be used with all other start methods - for queue_method in ["spawn", "forkserver"]: + for queue_method in test_methods: for process_method in multiprocessing.get_all_start_methods(): queue = multiprocessing.get_context(queue_method).Queue() process_ctx = multiprocessing.get_context(process_method) @@ -6307,6 +6310,8 @@ def test_resource_tracker_sigint(self): # Catchable signal (ignored by semaphore tracker) self.check_resource_tracker_death(signal.SIGINT, False) + @unittest.skipUnless(hasattr(signal, 'pthread_sigmask'), + 'need signal.pthread_sigmask') def test_resource_tracker_sigterm(self): # Catchable signal (ignored by semaphore tracker) self.check_resource_tracker_death(signal.SIGTERM, False) diff --git a/Lib/test/decimaltestdata/and.decTest b/Lib/test/decimaltestdata/and.decTest index a0cc7865164..e912394877e 100644 --- a/Lib/test/decimaltestdata/and.decTest +++ b/Lib/test/decimaltestdata/and.decTest @@ -1,338 +1,338 @@ ------------------------------------------------------------------------- --- and.decTest -- digitwise logical AND -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check (truth table) -andx001 and 0 0 -> 0 -andx002 and 0 1 -> 0 -andx003 and 1 0 -> 0 -andx004 and 1 1 -> 1 -andx005 and 1100 1010 -> 1000 -andx006 and 1111 10 -> 10 -andx007 and 1111 1010 -> 1010 - --- and at msd and msd-1 -andx010 and 000000000 000000000 -> 0 -andx011 and 000000000 100000000 -> 0 -andx012 and 100000000 000000000 -> 0 -andx013 and 100000000 100000000 -> 100000000 -andx014 and 000000000 000000000 -> 0 -andx015 and 000000000 010000000 -> 0 -andx016 and 010000000 000000000 -> 0 -andx017 and 010000000 010000000 -> 10000000 - --- Various lengths --- 123456789 123456789 123456789 -andx021 and 111111111 111111111 -> 111111111 -andx022 and 111111111111 111111111 -> 111111111 -andx023 and 111111111111 11111111 -> 11111111 -andx024 and 111111111 11111111 -> 11111111 -andx025 and 111111111 1111111 -> 1111111 -andx026 and 111111111111 111111 -> 111111 -andx027 and 111111111111 11111 -> 11111 -andx028 and 111111111111 1111 -> 1111 -andx029 and 111111111111 111 -> 111 -andx031 and 111111111111 11 -> 11 -andx032 and 111111111111 1 -> 1 -andx033 and 111111111111 1111111111 -> 111111111 -andx034 and 11111111111 11111111111 -> 111111111 -andx035 and 1111111111 111111111111 -> 111111111 -andx036 and 111111111 1111111111111 -> 111111111 - -andx040 and 111111111 111111111111 -> 111111111 -andx041 and 11111111 111111111111 -> 11111111 -andx042 and 11111111 111111111 -> 11111111 -andx043 and 1111111 111111111 -> 1111111 -andx044 and 111111 111111111 -> 111111 -andx045 and 11111 111111111 -> 11111 -andx046 and 1111 111111111 -> 1111 -andx047 and 111 111111111 -> 111 -andx048 and 11 111111111 -> 11 -andx049 and 1 111111111 -> 1 - -andx050 and 1111111111 1 -> 1 -andx051 and 111111111 1 -> 1 -andx052 and 11111111 1 -> 1 -andx053 and 1111111 1 -> 1 -andx054 and 111111 1 -> 1 -andx055 and 11111 1 -> 1 -andx056 and 1111 1 -> 1 -andx057 and 111 1 -> 1 -andx058 and 11 1 -> 1 -andx059 and 1 1 -> 1 - -andx060 and 1111111111 0 -> 0 -andx061 and 111111111 0 -> 0 -andx062 and 11111111 0 -> 0 -andx063 and 1111111 0 -> 0 -andx064 and 111111 0 -> 0 -andx065 and 11111 0 -> 0 -andx066 and 1111 0 -> 0 -andx067 and 111 0 -> 0 -andx068 and 11 0 -> 0 -andx069 and 1 0 -> 0 - -andx070 and 1 1111111111 -> 1 -andx071 and 1 111111111 -> 1 -andx072 and 1 11111111 -> 1 -andx073 and 1 1111111 -> 1 -andx074 and 1 111111 -> 1 -andx075 and 1 11111 -> 1 -andx076 and 1 1111 -> 1 -andx077 and 1 111 -> 1 -andx078 and 1 11 -> 1 -andx079 and 1 1 -> 1 - -andx080 and 0 1111111111 -> 0 -andx081 and 0 111111111 -> 0 -andx082 and 0 11111111 -> 0 -andx083 and 0 1111111 -> 0 -andx084 and 0 111111 -> 0 -andx085 and 0 11111 -> 0 -andx086 and 0 1111 -> 0 -andx087 and 0 111 -> 0 -andx088 and 0 11 -> 0 -andx089 and 0 1 -> 0 - -andx090 and 011111111 111111111 -> 11111111 -andx091 and 101111111 111111111 -> 101111111 -andx092 and 110111111 111111111 -> 110111111 -andx093 and 111011111 111111111 -> 111011111 -andx094 and 111101111 111111111 -> 111101111 -andx095 and 111110111 111111111 -> 111110111 -andx096 and 111111011 111111111 -> 111111011 -andx097 and 111111101 111111111 -> 111111101 -andx098 and 111111110 111111111 -> 111111110 - -andx100 and 111111111 011111111 -> 11111111 -andx101 and 111111111 101111111 -> 101111111 -andx102 and 111111111 110111111 -> 110111111 -andx103 and 111111111 111011111 -> 111011111 -andx104 and 111111111 111101111 -> 111101111 -andx105 and 111111111 111110111 -> 111110111 -andx106 and 111111111 111111011 -> 111111011 -andx107 and 111111111 111111101 -> 111111101 -andx108 and 111111111 111111110 -> 111111110 - --- non-0/1 should not be accepted, nor should signs -andx220 and 111111112 111111111 -> NaN Invalid_operation -andx221 and 333333333 333333333 -> NaN Invalid_operation -andx222 and 555555555 555555555 -> NaN Invalid_operation -andx223 and 777777777 777777777 -> NaN Invalid_operation -andx224 and 999999999 999999999 -> NaN Invalid_operation -andx225 and 222222222 999999999 -> NaN Invalid_operation -andx226 and 444444444 999999999 -> NaN Invalid_operation -andx227 and 666666666 999999999 -> NaN Invalid_operation -andx228 and 888888888 999999999 -> NaN Invalid_operation -andx229 and 999999999 222222222 -> NaN Invalid_operation -andx230 and 999999999 444444444 -> NaN Invalid_operation -andx231 and 999999999 666666666 -> NaN Invalid_operation -andx232 and 999999999 888888888 -> NaN Invalid_operation --- a few randoms -andx240 and 567468689 -934981942 -> NaN Invalid_operation -andx241 and 567367689 934981942 -> NaN Invalid_operation -andx242 and -631917772 -706014634 -> NaN Invalid_operation -andx243 and -756253257 138579234 -> NaN Invalid_operation -andx244 and 835590149 567435400 -> NaN Invalid_operation --- test MSD -andx250 and 200000000 100000000 -> NaN Invalid_operation -andx251 and 700000000 100000000 -> NaN Invalid_operation -andx252 and 800000000 100000000 -> NaN Invalid_operation -andx253 and 900000000 100000000 -> NaN Invalid_operation -andx254 and 200000000 000000000 -> NaN Invalid_operation -andx255 and 700000000 000000000 -> NaN Invalid_operation -andx256 and 800000000 000000000 -> NaN Invalid_operation -andx257 and 900000000 000000000 -> NaN Invalid_operation -andx258 and 100000000 200000000 -> NaN Invalid_operation -andx259 and 100000000 700000000 -> NaN Invalid_operation -andx260 and 100000000 800000000 -> NaN Invalid_operation -andx261 and 100000000 900000000 -> NaN Invalid_operation -andx262 and 000000000 200000000 -> NaN Invalid_operation -andx263 and 000000000 700000000 -> NaN Invalid_operation -andx264 and 000000000 800000000 -> NaN Invalid_operation -andx265 and 000000000 900000000 -> NaN Invalid_operation --- test MSD-1 -andx270 and 020000000 100000000 -> NaN Invalid_operation -andx271 and 070100000 100000000 -> NaN Invalid_operation -andx272 and 080010000 100000001 -> NaN Invalid_operation -andx273 and 090001000 100000010 -> NaN Invalid_operation -andx274 and 100000100 020010100 -> NaN Invalid_operation -andx275 and 100000000 070001000 -> NaN Invalid_operation -andx276 and 100000010 080010100 -> NaN Invalid_operation -andx277 and 100000000 090000010 -> NaN Invalid_operation --- test LSD -andx280 and 001000002 100000000 -> NaN Invalid_operation -andx281 and 000000007 100000000 -> NaN Invalid_operation -andx282 and 000000008 100000000 -> NaN Invalid_operation -andx283 and 000000009 100000000 -> NaN Invalid_operation -andx284 and 100000000 000100002 -> NaN Invalid_operation -andx285 and 100100000 001000007 -> NaN Invalid_operation -andx286 and 100010000 010000008 -> NaN Invalid_operation -andx287 and 100001000 100000009 -> NaN Invalid_operation --- test Middie -andx288 and 001020000 100000000 -> NaN Invalid_operation -andx289 and 000070001 100000000 -> NaN Invalid_operation -andx290 and 000080000 100010000 -> NaN Invalid_operation -andx291 and 000090000 100001000 -> NaN Invalid_operation -andx292 and 100000010 000020100 -> NaN Invalid_operation -andx293 and 100100000 000070010 -> NaN Invalid_operation -andx294 and 100010100 000080001 -> NaN Invalid_operation -andx295 and 100001000 000090000 -> NaN Invalid_operation --- signs -andx296 and -100001000 -000000000 -> NaN Invalid_operation -andx297 and -100001000 000010000 -> NaN Invalid_operation -andx298 and 100001000 -000000000 -> NaN Invalid_operation -andx299 and 100001000 000011000 -> 1000 - --- Nmax, Nmin, Ntiny -andx331 and 2 9.99999999E+999 -> NaN Invalid_operation -andx332 and 3 1E-999 -> NaN Invalid_operation -andx333 and 4 1.00000000E-999 -> NaN Invalid_operation -andx334 and 5 1E-1007 -> NaN Invalid_operation -andx335 and 6 -1E-1007 -> NaN Invalid_operation -andx336 and 7 -1.00000000E-999 -> NaN Invalid_operation -andx337 and 8 -1E-999 -> NaN Invalid_operation -andx338 and 9 -9.99999999E+999 -> NaN Invalid_operation -andx341 and 9.99999999E+999 -18 -> NaN Invalid_operation -andx342 and 1E-999 01 -> NaN Invalid_operation -andx343 and 1.00000000E-999 -18 -> NaN Invalid_operation -andx344 and 1E-1007 18 -> NaN Invalid_operation -andx345 and -1E-1007 -10 -> NaN Invalid_operation -andx346 and -1.00000000E-999 18 -> NaN Invalid_operation -andx347 and -1E-999 10 -> NaN Invalid_operation -andx348 and -9.99999999E+999 -18 -> NaN Invalid_operation - --- A few other non-integers -andx361 and 1.0 1 -> NaN Invalid_operation -andx362 and 1E+1 1 -> NaN Invalid_operation -andx363 and 0.0 1 -> NaN Invalid_operation -andx364 and 0E+1 1 -> NaN Invalid_operation -andx365 and 9.9 1 -> NaN Invalid_operation -andx366 and 9E+1 1 -> NaN Invalid_operation -andx371 and 0 1.0 -> NaN Invalid_operation -andx372 and 0 1E+1 -> NaN Invalid_operation -andx373 and 0 0.0 -> NaN Invalid_operation -andx374 and 0 0E+1 -> NaN Invalid_operation -andx375 and 0 9.9 -> NaN Invalid_operation -andx376 and 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -andx780 and -Inf -Inf -> NaN Invalid_operation -andx781 and -Inf -1000 -> NaN Invalid_operation -andx782 and -Inf -1 -> NaN Invalid_operation -andx783 and -Inf -0 -> NaN Invalid_operation -andx784 and -Inf 0 -> NaN Invalid_operation -andx785 and -Inf 1 -> NaN Invalid_operation -andx786 and -Inf 1000 -> NaN Invalid_operation -andx787 and -1000 -Inf -> NaN Invalid_operation -andx788 and -Inf -Inf -> NaN Invalid_operation -andx789 and -1 -Inf -> NaN Invalid_operation -andx790 and -0 -Inf -> NaN Invalid_operation -andx791 and 0 -Inf -> NaN Invalid_operation -andx792 and 1 -Inf -> NaN Invalid_operation -andx793 and 1000 -Inf -> NaN Invalid_operation -andx794 and Inf -Inf -> NaN Invalid_operation - -andx800 and Inf -Inf -> NaN Invalid_operation -andx801 and Inf -1000 -> NaN Invalid_operation -andx802 and Inf -1 -> NaN Invalid_operation -andx803 and Inf -0 -> NaN Invalid_operation -andx804 and Inf 0 -> NaN Invalid_operation -andx805 and Inf 1 -> NaN Invalid_operation -andx806 and Inf 1000 -> NaN Invalid_operation -andx807 and Inf Inf -> NaN Invalid_operation -andx808 and -1000 Inf -> NaN Invalid_operation -andx809 and -Inf Inf -> NaN Invalid_operation -andx810 and -1 Inf -> NaN Invalid_operation -andx811 and -0 Inf -> NaN Invalid_operation -andx812 and 0 Inf -> NaN Invalid_operation -andx813 and 1 Inf -> NaN Invalid_operation -andx814 and 1000 Inf -> NaN Invalid_operation -andx815 and Inf Inf -> NaN Invalid_operation - -andx821 and NaN -Inf -> NaN Invalid_operation -andx822 and NaN -1000 -> NaN Invalid_operation -andx823 and NaN -1 -> NaN Invalid_operation -andx824 and NaN -0 -> NaN Invalid_operation -andx825 and NaN 0 -> NaN Invalid_operation -andx826 and NaN 1 -> NaN Invalid_operation -andx827 and NaN 1000 -> NaN Invalid_operation -andx828 and NaN Inf -> NaN Invalid_operation -andx829 and NaN NaN -> NaN Invalid_operation -andx830 and -Inf NaN -> NaN Invalid_operation -andx831 and -1000 NaN -> NaN Invalid_operation -andx832 and -1 NaN -> NaN Invalid_operation -andx833 and -0 NaN -> NaN Invalid_operation -andx834 and 0 NaN -> NaN Invalid_operation -andx835 and 1 NaN -> NaN Invalid_operation -andx836 and 1000 NaN -> NaN Invalid_operation -andx837 and Inf NaN -> NaN Invalid_operation - -andx841 and sNaN -Inf -> NaN Invalid_operation -andx842 and sNaN -1000 -> NaN Invalid_operation -andx843 and sNaN -1 -> NaN Invalid_operation -andx844 and sNaN -0 -> NaN Invalid_operation -andx845 and sNaN 0 -> NaN Invalid_operation -andx846 and sNaN 1 -> NaN Invalid_operation -andx847 and sNaN 1000 -> NaN Invalid_operation -andx848 and sNaN NaN -> NaN Invalid_operation -andx849 and sNaN sNaN -> NaN Invalid_operation -andx850 and NaN sNaN -> NaN Invalid_operation -andx851 and -Inf sNaN -> NaN Invalid_operation -andx852 and -1000 sNaN -> NaN Invalid_operation -andx853 and -1 sNaN -> NaN Invalid_operation -andx854 and -0 sNaN -> NaN Invalid_operation -andx855 and 0 sNaN -> NaN Invalid_operation -andx856 and 1 sNaN -> NaN Invalid_operation -andx857 and 1000 sNaN -> NaN Invalid_operation -andx858 and Inf sNaN -> NaN Invalid_operation -andx859 and NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -andx861 and NaN1 -Inf -> NaN Invalid_operation -andx862 and +NaN2 -1000 -> NaN Invalid_operation -andx863 and NaN3 1000 -> NaN Invalid_operation -andx864 and NaN4 Inf -> NaN Invalid_operation -andx865 and NaN5 +NaN6 -> NaN Invalid_operation -andx866 and -Inf NaN7 -> NaN Invalid_operation -andx867 and -1000 NaN8 -> NaN Invalid_operation -andx868 and 1000 NaN9 -> NaN Invalid_operation -andx869 and Inf +NaN10 -> NaN Invalid_operation -andx871 and sNaN11 -Inf -> NaN Invalid_operation -andx872 and sNaN12 -1000 -> NaN Invalid_operation -andx873 and sNaN13 1000 -> NaN Invalid_operation -andx874 and sNaN14 NaN17 -> NaN Invalid_operation -andx875 and sNaN15 sNaN18 -> NaN Invalid_operation -andx876 and NaN16 sNaN19 -> NaN Invalid_operation -andx877 and -Inf +sNaN20 -> NaN Invalid_operation -andx878 and -1000 sNaN21 -> NaN Invalid_operation -andx879 and 1000 sNaN22 -> NaN Invalid_operation -andx880 and Inf sNaN23 -> NaN Invalid_operation -andx881 and +NaN25 +sNaN24 -> NaN Invalid_operation -andx882 and -NaN26 NaN28 -> NaN Invalid_operation -andx883 and -sNaN27 sNaN29 -> NaN Invalid_operation -andx884 and 1000 -NaN30 -> NaN Invalid_operation -andx885 and 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- and.decTest -- digitwise logical AND -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check (truth table) +andx001 and 0 0 -> 0 +andx002 and 0 1 -> 0 +andx003 and 1 0 -> 0 +andx004 and 1 1 -> 1 +andx005 and 1100 1010 -> 1000 +andx006 and 1111 10 -> 10 +andx007 and 1111 1010 -> 1010 + +-- and at msd and msd-1 +andx010 and 000000000 000000000 -> 0 +andx011 and 000000000 100000000 -> 0 +andx012 and 100000000 000000000 -> 0 +andx013 and 100000000 100000000 -> 100000000 +andx014 and 000000000 000000000 -> 0 +andx015 and 000000000 010000000 -> 0 +andx016 and 010000000 000000000 -> 0 +andx017 and 010000000 010000000 -> 10000000 + +-- Various lengths +-- 123456789 123456789 123456789 +andx021 and 111111111 111111111 -> 111111111 +andx022 and 111111111111 111111111 -> 111111111 +andx023 and 111111111111 11111111 -> 11111111 +andx024 and 111111111 11111111 -> 11111111 +andx025 and 111111111 1111111 -> 1111111 +andx026 and 111111111111 111111 -> 111111 +andx027 and 111111111111 11111 -> 11111 +andx028 and 111111111111 1111 -> 1111 +andx029 and 111111111111 111 -> 111 +andx031 and 111111111111 11 -> 11 +andx032 and 111111111111 1 -> 1 +andx033 and 111111111111 1111111111 -> 111111111 +andx034 and 11111111111 11111111111 -> 111111111 +andx035 and 1111111111 111111111111 -> 111111111 +andx036 and 111111111 1111111111111 -> 111111111 + +andx040 and 111111111 111111111111 -> 111111111 +andx041 and 11111111 111111111111 -> 11111111 +andx042 and 11111111 111111111 -> 11111111 +andx043 and 1111111 111111111 -> 1111111 +andx044 and 111111 111111111 -> 111111 +andx045 and 11111 111111111 -> 11111 +andx046 and 1111 111111111 -> 1111 +andx047 and 111 111111111 -> 111 +andx048 and 11 111111111 -> 11 +andx049 and 1 111111111 -> 1 + +andx050 and 1111111111 1 -> 1 +andx051 and 111111111 1 -> 1 +andx052 and 11111111 1 -> 1 +andx053 and 1111111 1 -> 1 +andx054 and 111111 1 -> 1 +andx055 and 11111 1 -> 1 +andx056 and 1111 1 -> 1 +andx057 and 111 1 -> 1 +andx058 and 11 1 -> 1 +andx059 and 1 1 -> 1 + +andx060 and 1111111111 0 -> 0 +andx061 and 111111111 0 -> 0 +andx062 and 11111111 0 -> 0 +andx063 and 1111111 0 -> 0 +andx064 and 111111 0 -> 0 +andx065 and 11111 0 -> 0 +andx066 and 1111 0 -> 0 +andx067 and 111 0 -> 0 +andx068 and 11 0 -> 0 +andx069 and 1 0 -> 0 + +andx070 and 1 1111111111 -> 1 +andx071 and 1 111111111 -> 1 +andx072 and 1 11111111 -> 1 +andx073 and 1 1111111 -> 1 +andx074 and 1 111111 -> 1 +andx075 and 1 11111 -> 1 +andx076 and 1 1111 -> 1 +andx077 and 1 111 -> 1 +andx078 and 1 11 -> 1 +andx079 and 1 1 -> 1 + +andx080 and 0 1111111111 -> 0 +andx081 and 0 111111111 -> 0 +andx082 and 0 11111111 -> 0 +andx083 and 0 1111111 -> 0 +andx084 and 0 111111 -> 0 +andx085 and 0 11111 -> 0 +andx086 and 0 1111 -> 0 +andx087 and 0 111 -> 0 +andx088 and 0 11 -> 0 +andx089 and 0 1 -> 0 + +andx090 and 011111111 111111111 -> 11111111 +andx091 and 101111111 111111111 -> 101111111 +andx092 and 110111111 111111111 -> 110111111 +andx093 and 111011111 111111111 -> 111011111 +andx094 and 111101111 111111111 -> 111101111 +andx095 and 111110111 111111111 -> 111110111 +andx096 and 111111011 111111111 -> 111111011 +andx097 and 111111101 111111111 -> 111111101 +andx098 and 111111110 111111111 -> 111111110 + +andx100 and 111111111 011111111 -> 11111111 +andx101 and 111111111 101111111 -> 101111111 +andx102 and 111111111 110111111 -> 110111111 +andx103 and 111111111 111011111 -> 111011111 +andx104 and 111111111 111101111 -> 111101111 +andx105 and 111111111 111110111 -> 111110111 +andx106 and 111111111 111111011 -> 111111011 +andx107 and 111111111 111111101 -> 111111101 +andx108 and 111111111 111111110 -> 111111110 + +-- non-0/1 should not be accepted, nor should signs +andx220 and 111111112 111111111 -> NaN Invalid_operation +andx221 and 333333333 333333333 -> NaN Invalid_operation +andx222 and 555555555 555555555 -> NaN Invalid_operation +andx223 and 777777777 777777777 -> NaN Invalid_operation +andx224 and 999999999 999999999 -> NaN Invalid_operation +andx225 and 222222222 999999999 -> NaN Invalid_operation +andx226 and 444444444 999999999 -> NaN Invalid_operation +andx227 and 666666666 999999999 -> NaN Invalid_operation +andx228 and 888888888 999999999 -> NaN Invalid_operation +andx229 and 999999999 222222222 -> NaN Invalid_operation +andx230 and 999999999 444444444 -> NaN Invalid_operation +andx231 and 999999999 666666666 -> NaN Invalid_operation +andx232 and 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +andx240 and 567468689 -934981942 -> NaN Invalid_operation +andx241 and 567367689 934981942 -> NaN Invalid_operation +andx242 and -631917772 -706014634 -> NaN Invalid_operation +andx243 and -756253257 138579234 -> NaN Invalid_operation +andx244 and 835590149 567435400 -> NaN Invalid_operation +-- test MSD +andx250 and 200000000 100000000 -> NaN Invalid_operation +andx251 and 700000000 100000000 -> NaN Invalid_operation +andx252 and 800000000 100000000 -> NaN Invalid_operation +andx253 and 900000000 100000000 -> NaN Invalid_operation +andx254 and 200000000 000000000 -> NaN Invalid_operation +andx255 and 700000000 000000000 -> NaN Invalid_operation +andx256 and 800000000 000000000 -> NaN Invalid_operation +andx257 and 900000000 000000000 -> NaN Invalid_operation +andx258 and 100000000 200000000 -> NaN Invalid_operation +andx259 and 100000000 700000000 -> NaN Invalid_operation +andx260 and 100000000 800000000 -> NaN Invalid_operation +andx261 and 100000000 900000000 -> NaN Invalid_operation +andx262 and 000000000 200000000 -> NaN Invalid_operation +andx263 and 000000000 700000000 -> NaN Invalid_operation +andx264 and 000000000 800000000 -> NaN Invalid_operation +andx265 and 000000000 900000000 -> NaN Invalid_operation +-- test MSD-1 +andx270 and 020000000 100000000 -> NaN Invalid_operation +andx271 and 070100000 100000000 -> NaN Invalid_operation +andx272 and 080010000 100000001 -> NaN Invalid_operation +andx273 and 090001000 100000010 -> NaN Invalid_operation +andx274 and 100000100 020010100 -> NaN Invalid_operation +andx275 and 100000000 070001000 -> NaN Invalid_operation +andx276 and 100000010 080010100 -> NaN Invalid_operation +andx277 and 100000000 090000010 -> NaN Invalid_operation +-- test LSD +andx280 and 001000002 100000000 -> NaN Invalid_operation +andx281 and 000000007 100000000 -> NaN Invalid_operation +andx282 and 000000008 100000000 -> NaN Invalid_operation +andx283 and 000000009 100000000 -> NaN Invalid_operation +andx284 and 100000000 000100002 -> NaN Invalid_operation +andx285 and 100100000 001000007 -> NaN Invalid_operation +andx286 and 100010000 010000008 -> NaN Invalid_operation +andx287 and 100001000 100000009 -> NaN Invalid_operation +-- test Middie +andx288 and 001020000 100000000 -> NaN Invalid_operation +andx289 and 000070001 100000000 -> NaN Invalid_operation +andx290 and 000080000 100010000 -> NaN Invalid_operation +andx291 and 000090000 100001000 -> NaN Invalid_operation +andx292 and 100000010 000020100 -> NaN Invalid_operation +andx293 and 100100000 000070010 -> NaN Invalid_operation +andx294 and 100010100 000080001 -> NaN Invalid_operation +andx295 and 100001000 000090000 -> NaN Invalid_operation +-- signs +andx296 and -100001000 -000000000 -> NaN Invalid_operation +andx297 and -100001000 000010000 -> NaN Invalid_operation +andx298 and 100001000 -000000000 -> NaN Invalid_operation +andx299 and 100001000 000011000 -> 1000 + +-- Nmax, Nmin, Ntiny +andx331 and 2 9.99999999E+999 -> NaN Invalid_operation +andx332 and 3 1E-999 -> NaN Invalid_operation +andx333 and 4 1.00000000E-999 -> NaN Invalid_operation +andx334 and 5 1E-1007 -> NaN Invalid_operation +andx335 and 6 -1E-1007 -> NaN Invalid_operation +andx336 and 7 -1.00000000E-999 -> NaN Invalid_operation +andx337 and 8 -1E-999 -> NaN Invalid_operation +andx338 and 9 -9.99999999E+999 -> NaN Invalid_operation +andx341 and 9.99999999E+999 -18 -> NaN Invalid_operation +andx342 and 1E-999 01 -> NaN Invalid_operation +andx343 and 1.00000000E-999 -18 -> NaN Invalid_operation +andx344 and 1E-1007 18 -> NaN Invalid_operation +andx345 and -1E-1007 -10 -> NaN Invalid_operation +andx346 and -1.00000000E-999 18 -> NaN Invalid_operation +andx347 and -1E-999 10 -> NaN Invalid_operation +andx348 and -9.99999999E+999 -18 -> NaN Invalid_operation + +-- A few other non-integers +andx361 and 1.0 1 -> NaN Invalid_operation +andx362 and 1E+1 1 -> NaN Invalid_operation +andx363 and 0.0 1 -> NaN Invalid_operation +andx364 and 0E+1 1 -> NaN Invalid_operation +andx365 and 9.9 1 -> NaN Invalid_operation +andx366 and 9E+1 1 -> NaN Invalid_operation +andx371 and 0 1.0 -> NaN Invalid_operation +andx372 and 0 1E+1 -> NaN Invalid_operation +andx373 and 0 0.0 -> NaN Invalid_operation +andx374 and 0 0E+1 -> NaN Invalid_operation +andx375 and 0 9.9 -> NaN Invalid_operation +andx376 and 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +andx780 and -Inf -Inf -> NaN Invalid_operation +andx781 and -Inf -1000 -> NaN Invalid_operation +andx782 and -Inf -1 -> NaN Invalid_operation +andx783 and -Inf -0 -> NaN Invalid_operation +andx784 and -Inf 0 -> NaN Invalid_operation +andx785 and -Inf 1 -> NaN Invalid_operation +andx786 and -Inf 1000 -> NaN Invalid_operation +andx787 and -1000 -Inf -> NaN Invalid_operation +andx788 and -Inf -Inf -> NaN Invalid_operation +andx789 and -1 -Inf -> NaN Invalid_operation +andx790 and -0 -Inf -> NaN Invalid_operation +andx791 and 0 -Inf -> NaN Invalid_operation +andx792 and 1 -Inf -> NaN Invalid_operation +andx793 and 1000 -Inf -> NaN Invalid_operation +andx794 and Inf -Inf -> NaN Invalid_operation + +andx800 and Inf -Inf -> NaN Invalid_operation +andx801 and Inf -1000 -> NaN Invalid_operation +andx802 and Inf -1 -> NaN Invalid_operation +andx803 and Inf -0 -> NaN Invalid_operation +andx804 and Inf 0 -> NaN Invalid_operation +andx805 and Inf 1 -> NaN Invalid_operation +andx806 and Inf 1000 -> NaN Invalid_operation +andx807 and Inf Inf -> NaN Invalid_operation +andx808 and -1000 Inf -> NaN Invalid_operation +andx809 and -Inf Inf -> NaN Invalid_operation +andx810 and -1 Inf -> NaN Invalid_operation +andx811 and -0 Inf -> NaN Invalid_operation +andx812 and 0 Inf -> NaN Invalid_operation +andx813 and 1 Inf -> NaN Invalid_operation +andx814 and 1000 Inf -> NaN Invalid_operation +andx815 and Inf Inf -> NaN Invalid_operation + +andx821 and NaN -Inf -> NaN Invalid_operation +andx822 and NaN -1000 -> NaN Invalid_operation +andx823 and NaN -1 -> NaN Invalid_operation +andx824 and NaN -0 -> NaN Invalid_operation +andx825 and NaN 0 -> NaN Invalid_operation +andx826 and NaN 1 -> NaN Invalid_operation +andx827 and NaN 1000 -> NaN Invalid_operation +andx828 and NaN Inf -> NaN Invalid_operation +andx829 and NaN NaN -> NaN Invalid_operation +andx830 and -Inf NaN -> NaN Invalid_operation +andx831 and -1000 NaN -> NaN Invalid_operation +andx832 and -1 NaN -> NaN Invalid_operation +andx833 and -0 NaN -> NaN Invalid_operation +andx834 and 0 NaN -> NaN Invalid_operation +andx835 and 1 NaN -> NaN Invalid_operation +andx836 and 1000 NaN -> NaN Invalid_operation +andx837 and Inf NaN -> NaN Invalid_operation + +andx841 and sNaN -Inf -> NaN Invalid_operation +andx842 and sNaN -1000 -> NaN Invalid_operation +andx843 and sNaN -1 -> NaN Invalid_operation +andx844 and sNaN -0 -> NaN Invalid_operation +andx845 and sNaN 0 -> NaN Invalid_operation +andx846 and sNaN 1 -> NaN Invalid_operation +andx847 and sNaN 1000 -> NaN Invalid_operation +andx848 and sNaN NaN -> NaN Invalid_operation +andx849 and sNaN sNaN -> NaN Invalid_operation +andx850 and NaN sNaN -> NaN Invalid_operation +andx851 and -Inf sNaN -> NaN Invalid_operation +andx852 and -1000 sNaN -> NaN Invalid_operation +andx853 and -1 sNaN -> NaN Invalid_operation +andx854 and -0 sNaN -> NaN Invalid_operation +andx855 and 0 sNaN -> NaN Invalid_operation +andx856 and 1 sNaN -> NaN Invalid_operation +andx857 and 1000 sNaN -> NaN Invalid_operation +andx858 and Inf sNaN -> NaN Invalid_operation +andx859 and NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +andx861 and NaN1 -Inf -> NaN Invalid_operation +andx862 and +NaN2 -1000 -> NaN Invalid_operation +andx863 and NaN3 1000 -> NaN Invalid_operation +andx864 and NaN4 Inf -> NaN Invalid_operation +andx865 and NaN5 +NaN6 -> NaN Invalid_operation +andx866 and -Inf NaN7 -> NaN Invalid_operation +andx867 and -1000 NaN8 -> NaN Invalid_operation +andx868 and 1000 NaN9 -> NaN Invalid_operation +andx869 and Inf +NaN10 -> NaN Invalid_operation +andx871 and sNaN11 -Inf -> NaN Invalid_operation +andx872 and sNaN12 -1000 -> NaN Invalid_operation +andx873 and sNaN13 1000 -> NaN Invalid_operation +andx874 and sNaN14 NaN17 -> NaN Invalid_operation +andx875 and sNaN15 sNaN18 -> NaN Invalid_operation +andx876 and NaN16 sNaN19 -> NaN Invalid_operation +andx877 and -Inf +sNaN20 -> NaN Invalid_operation +andx878 and -1000 sNaN21 -> NaN Invalid_operation +andx879 and 1000 sNaN22 -> NaN Invalid_operation +andx880 and Inf sNaN23 -> NaN Invalid_operation +andx881 and +NaN25 +sNaN24 -> NaN Invalid_operation +andx882 and -NaN26 NaN28 -> NaN Invalid_operation +andx883 and -sNaN27 sNaN29 -> NaN Invalid_operation +andx884 and 1000 -NaN30 -> NaN Invalid_operation +andx885 and 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/class.decTest b/Lib/test/decimaltestdata/class.decTest index fa5bc3a12f0..62d2fa472f1 100644 --- a/Lib/test/decimaltestdata/class.decTest +++ b/Lib/test/decimaltestdata/class.decTest @@ -1,131 +1,131 @@ ------------------------------------------------------------------------- --- class.decTest -- Class operations -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- [New 2006.11.27] - -precision: 9 -maxExponent: 999 -minExponent: -999 -extended: 1 -clamp: 1 -rounding: half_even - -clasx001 class 0 -> +Zero -clasx002 class 0.00 -> +Zero -clasx003 class 0E+5 -> +Zero -clasx004 class 1E-1007 -> +Subnormal -clasx005 class 0.1E-999 -> +Subnormal -clasx006 class 0.99999999E-999 -> +Subnormal -clasx007 class 1.00000000E-999 -> +Normal -clasx008 class 1E-999 -> +Normal -clasx009 class 1E-100 -> +Normal -clasx010 class 1E-10 -> +Normal -clasx012 class 1E-1 -> +Normal -clasx013 class 1 -> +Normal -clasx014 class 2.50 -> +Normal -clasx015 class 100.100 -> +Normal -clasx016 class 1E+30 -> +Normal -clasx017 class 1E+999 -> +Normal -clasx018 class 9.99999999E+999 -> +Normal -clasx019 class Inf -> +Infinity - -clasx021 class -0 -> -Zero -clasx022 class -0.00 -> -Zero -clasx023 class -0E+5 -> -Zero -clasx024 class -1E-1007 -> -Subnormal -clasx025 class -0.1E-999 -> -Subnormal -clasx026 class -0.99999999E-999 -> -Subnormal -clasx027 class -1.00000000E-999 -> -Normal -clasx028 class -1E-999 -> -Normal -clasx029 class -1E-100 -> -Normal -clasx030 class -1E-10 -> -Normal -clasx032 class -1E-1 -> -Normal -clasx033 class -1 -> -Normal -clasx034 class -2.50 -> -Normal -clasx035 class -100.100 -> -Normal -clasx036 class -1E+30 -> -Normal -clasx037 class -1E+999 -> -Normal -clasx038 class -9.99999999E+999 -> -Normal -clasx039 class -Inf -> -Infinity - -clasx041 class NaN -> NaN -clasx042 class -NaN -> NaN -clasx043 class +NaN12345 -> NaN -clasx044 class sNaN -> sNaN -clasx045 class -sNaN -> sNaN -clasx046 class +sNaN12345 -> sNaN - - --- decimal64 bounds - -precision: 16 -maxExponent: 384 -minExponent: -383 -clamp: 1 -rounding: half_even - -clasx201 class 0 -> +Zero -clasx202 class 0.00 -> +Zero -clasx203 class 0E+5 -> +Zero -clasx204 class 1E-396 -> +Subnormal -clasx205 class 0.1E-383 -> +Subnormal -clasx206 class 0.999999999999999E-383 -> +Subnormal -clasx207 class 1.000000000000000E-383 -> +Normal -clasx208 class 1E-383 -> +Normal -clasx209 class 1E-100 -> +Normal -clasx210 class 1E-10 -> +Normal -clasx212 class 1E-1 -> +Normal -clasx213 class 1 -> +Normal -clasx214 class 2.50 -> +Normal -clasx215 class 100.100 -> +Normal -clasx216 class 1E+30 -> +Normal -clasx217 class 1E+384 -> +Normal -clasx218 class 9.999999999999999E+384 -> +Normal -clasx219 class Inf -> +Infinity - -clasx221 class -0 -> -Zero -clasx222 class -0.00 -> -Zero -clasx223 class -0E+5 -> -Zero -clasx224 class -1E-396 -> -Subnormal -clasx225 class -0.1E-383 -> -Subnormal -clasx226 class -0.999999999999999E-383 -> -Subnormal -clasx227 class -1.000000000000000E-383 -> -Normal -clasx228 class -1E-383 -> -Normal -clasx229 class -1E-100 -> -Normal -clasx230 class -1E-10 -> -Normal -clasx232 class -1E-1 -> -Normal -clasx233 class -1 -> -Normal -clasx234 class -2.50 -> -Normal -clasx235 class -100.100 -> -Normal -clasx236 class -1E+30 -> -Normal -clasx237 class -1E+384 -> -Normal -clasx238 class -9.999999999999999E+384 -> -Normal -clasx239 class -Inf -> -Infinity - -clasx241 class NaN -> NaN -clasx242 class -NaN -> NaN -clasx243 class +NaN12345 -> NaN -clasx244 class sNaN -> sNaN -clasx245 class -sNaN -> sNaN -clasx246 class +sNaN12345 -> sNaN - - - +------------------------------------------------------------------------ +-- class.decTest -- Class operations -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- [New 2006.11.27] + +precision: 9 +maxExponent: 999 +minExponent: -999 +extended: 1 +clamp: 1 +rounding: half_even + +clasx001 class 0 -> +Zero +clasx002 class 0.00 -> +Zero +clasx003 class 0E+5 -> +Zero +clasx004 class 1E-1007 -> +Subnormal +clasx005 class 0.1E-999 -> +Subnormal +clasx006 class 0.99999999E-999 -> +Subnormal +clasx007 class 1.00000000E-999 -> +Normal +clasx008 class 1E-999 -> +Normal +clasx009 class 1E-100 -> +Normal +clasx010 class 1E-10 -> +Normal +clasx012 class 1E-1 -> +Normal +clasx013 class 1 -> +Normal +clasx014 class 2.50 -> +Normal +clasx015 class 100.100 -> +Normal +clasx016 class 1E+30 -> +Normal +clasx017 class 1E+999 -> +Normal +clasx018 class 9.99999999E+999 -> +Normal +clasx019 class Inf -> +Infinity + +clasx021 class -0 -> -Zero +clasx022 class -0.00 -> -Zero +clasx023 class -0E+5 -> -Zero +clasx024 class -1E-1007 -> -Subnormal +clasx025 class -0.1E-999 -> -Subnormal +clasx026 class -0.99999999E-999 -> -Subnormal +clasx027 class -1.00000000E-999 -> -Normal +clasx028 class -1E-999 -> -Normal +clasx029 class -1E-100 -> -Normal +clasx030 class -1E-10 -> -Normal +clasx032 class -1E-1 -> -Normal +clasx033 class -1 -> -Normal +clasx034 class -2.50 -> -Normal +clasx035 class -100.100 -> -Normal +clasx036 class -1E+30 -> -Normal +clasx037 class -1E+999 -> -Normal +clasx038 class -9.99999999E+999 -> -Normal +clasx039 class -Inf -> -Infinity + +clasx041 class NaN -> NaN +clasx042 class -NaN -> NaN +clasx043 class +NaN12345 -> NaN +clasx044 class sNaN -> sNaN +clasx045 class -sNaN -> sNaN +clasx046 class +sNaN12345 -> sNaN + + +-- decimal64 bounds + +precision: 16 +maxExponent: 384 +minExponent: -383 +clamp: 1 +rounding: half_even + +clasx201 class 0 -> +Zero +clasx202 class 0.00 -> +Zero +clasx203 class 0E+5 -> +Zero +clasx204 class 1E-396 -> +Subnormal +clasx205 class 0.1E-383 -> +Subnormal +clasx206 class 0.999999999999999E-383 -> +Subnormal +clasx207 class 1.000000000000000E-383 -> +Normal +clasx208 class 1E-383 -> +Normal +clasx209 class 1E-100 -> +Normal +clasx210 class 1E-10 -> +Normal +clasx212 class 1E-1 -> +Normal +clasx213 class 1 -> +Normal +clasx214 class 2.50 -> +Normal +clasx215 class 100.100 -> +Normal +clasx216 class 1E+30 -> +Normal +clasx217 class 1E+384 -> +Normal +clasx218 class 9.999999999999999E+384 -> +Normal +clasx219 class Inf -> +Infinity + +clasx221 class -0 -> -Zero +clasx222 class -0.00 -> -Zero +clasx223 class -0E+5 -> -Zero +clasx224 class -1E-396 -> -Subnormal +clasx225 class -0.1E-383 -> -Subnormal +clasx226 class -0.999999999999999E-383 -> -Subnormal +clasx227 class -1.000000000000000E-383 -> -Normal +clasx228 class -1E-383 -> -Normal +clasx229 class -1E-100 -> -Normal +clasx230 class -1E-10 -> -Normal +clasx232 class -1E-1 -> -Normal +clasx233 class -1 -> -Normal +clasx234 class -2.50 -> -Normal +clasx235 class -100.100 -> -Normal +clasx236 class -1E+30 -> -Normal +clasx237 class -1E+384 -> -Normal +clasx238 class -9.999999999999999E+384 -> -Normal +clasx239 class -Inf -> -Infinity + +clasx241 class NaN -> NaN +clasx242 class -NaN -> NaN +clasx243 class +NaN12345 -> NaN +clasx244 class sNaN -> sNaN +clasx245 class -sNaN -> sNaN +clasx246 class +sNaN12345 -> sNaN + + + diff --git a/Lib/test/decimaltestdata/comparetotal.decTest b/Lib/test/decimaltestdata/comparetotal.decTest index 252c49fb61c..ad87b4ce29d 100644 --- a/Lib/test/decimaltestdata/comparetotal.decTest +++ b/Lib/test/decimaltestdata/comparetotal.decTest @@ -1,798 +1,798 @@ ------------------------------------------------------------------------- --- comparetotal.decTest -- decimal comparison using total ordering -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - -extended: 1 -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - --- sanity checks -cotx001 comparetotal -2 -2 -> 0 -cotx002 comparetotal -2 -1 -> -1 -cotx003 comparetotal -2 0 -> -1 -cotx004 comparetotal -2 1 -> -1 -cotx005 comparetotal -2 2 -> -1 -cotx006 comparetotal -1 -2 -> 1 -cotx007 comparetotal -1 -1 -> 0 -cotx008 comparetotal -1 0 -> -1 -cotx009 comparetotal -1 1 -> -1 -cotx010 comparetotal -1 2 -> -1 -cotx011 comparetotal 0 -2 -> 1 -cotx012 comparetotal 0 -1 -> 1 -cotx013 comparetotal 0 0 -> 0 -cotx014 comparetotal 0 1 -> -1 -cotx015 comparetotal 0 2 -> -1 -cotx016 comparetotal 1 -2 -> 1 -cotx017 comparetotal 1 -1 -> 1 -cotx018 comparetotal 1 0 -> 1 -cotx019 comparetotal 1 1 -> 0 -cotx020 comparetotal 1 2 -> -1 -cotx021 comparetotal 2 -2 -> 1 -cotx022 comparetotal 2 -1 -> 1 -cotx023 comparetotal 2 0 -> 1 -cotx025 comparetotal 2 1 -> 1 -cotx026 comparetotal 2 2 -> 0 - -cotx031 comparetotal -20 -20 -> 0 -cotx032 comparetotal -20 -10 -> -1 -cotx033 comparetotal -20 00 -> -1 -cotx034 comparetotal -20 10 -> -1 -cotx035 comparetotal -20 20 -> -1 -cotx036 comparetotal -10 -20 -> 1 -cotx037 comparetotal -10 -10 -> 0 -cotx038 comparetotal -10 00 -> -1 -cotx039 comparetotal -10 10 -> -1 -cotx040 comparetotal -10 20 -> -1 -cotx041 comparetotal 00 -20 -> 1 -cotx042 comparetotal 00 -10 -> 1 -cotx043 comparetotal 00 00 -> 0 -cotx044 comparetotal 00 10 -> -1 -cotx045 comparetotal 00 20 -> -1 -cotx046 comparetotal 10 -20 -> 1 -cotx047 comparetotal 10 -10 -> 1 -cotx048 comparetotal 10 00 -> 1 -cotx049 comparetotal 10 10 -> 0 -cotx050 comparetotal 10 20 -> -1 -cotx051 comparetotal 20 -20 -> 1 -cotx052 comparetotal 20 -10 -> 1 -cotx053 comparetotal 20 00 -> 1 -cotx055 comparetotal 20 10 -> 1 -cotx056 comparetotal 20 20 -> 0 - -cotx061 comparetotal -2.0 -2.0 -> 0 -cotx062 comparetotal -2.0 -1.0 -> -1 -cotx063 comparetotal -2.0 0.0 -> -1 -cotx064 comparetotal -2.0 1.0 -> -1 -cotx065 comparetotal -2.0 2.0 -> -1 -cotx066 comparetotal -1.0 -2.0 -> 1 -cotx067 comparetotal -1.0 -1.0 -> 0 -cotx068 comparetotal -1.0 0.0 -> -1 -cotx069 comparetotal -1.0 1.0 -> -1 -cotx070 comparetotal -1.0 2.0 -> -1 -cotx071 comparetotal 0.0 -2.0 -> 1 -cotx072 comparetotal 0.0 -1.0 -> 1 -cotx073 comparetotal 0.0 0.0 -> 0 -cotx074 comparetotal 0.0 1.0 -> -1 -cotx075 comparetotal 0.0 2.0 -> -1 -cotx076 comparetotal 1.0 -2.0 -> 1 -cotx077 comparetotal 1.0 -1.0 -> 1 -cotx078 comparetotal 1.0 0.0 -> 1 -cotx079 comparetotal 1.0 1.0 -> 0 -cotx080 comparetotal 1.0 2.0 -> -1 -cotx081 comparetotal 2.0 -2.0 -> 1 -cotx082 comparetotal 2.0 -1.0 -> 1 -cotx083 comparetotal 2.0 0.0 -> 1 -cotx085 comparetotal 2.0 1.0 -> 1 -cotx086 comparetotal 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -maxexponent: 999999999 -minexponent: -999999999 -cotx090 comparetotal 9.99999999E+999999999 9.99999999E+999999999 -> 0 -cotx091 comparetotal -9.99999999E+999999999 9.99999999E+999999999 -> -1 -cotx092 comparetotal 9.99999999E+999999999 -9.99999999E+999999999 -> 1 -cotx093 comparetotal -9.99999999E+999999999 -9.99999999E+999999999 -> 0 - --- Examples -cotx094 comparetotal 12.73 127.9 -> -1 -cotx095 comparetotal -127 12 -> -1 -cotx096 comparetotal 12.30 12.3 -> -1 -cotx097 comparetotal 12.30 12.30 -> 0 -cotx098 comparetotal 12.3 12.300 -> 1 -cotx099 comparetotal 12.3 NaN -> -1 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -cotx100 comparetotal 7.0 7.0 -> 0 -cotx101 comparetotal 7.0 7 -> -1 -cotx102 comparetotal 7 7.0 -> 1 -cotx103 comparetotal 7E+0 7.0 -> 1 -cotx104 comparetotal 70E-1 7.0 -> 0 -cotx105 comparetotal 0.7E+1 7 -> 0 -cotx106 comparetotal 70E-1 7 -> -1 -cotx107 comparetotal 7.0 7E+0 -> -1 -cotx108 comparetotal 7.0 70E-1 -> 0 -cotx109 comparetotal 7 0.7E+1 -> 0 -cotx110 comparetotal 7 70E-1 -> 1 - -cotx120 comparetotal 8.0 7.0 -> 1 -cotx121 comparetotal 8.0 7 -> 1 -cotx122 comparetotal 8 7.0 -> 1 -cotx123 comparetotal 8E+0 7.0 -> 1 -cotx124 comparetotal 80E-1 7.0 -> 1 -cotx125 comparetotal 0.8E+1 7 -> 1 -cotx126 comparetotal 80E-1 7 -> 1 -cotx127 comparetotal 8.0 7E+0 -> 1 -cotx128 comparetotal 8.0 70E-1 -> 1 -cotx129 comparetotal 8 0.7E+1 -> 1 -cotx130 comparetotal 8 70E-1 -> 1 - -cotx140 comparetotal 8.0 9.0 -> -1 -cotx141 comparetotal 8.0 9 -> -1 -cotx142 comparetotal 8 9.0 -> -1 -cotx143 comparetotal 8E+0 9.0 -> -1 -cotx144 comparetotal 80E-1 9.0 -> -1 -cotx145 comparetotal 0.8E+1 9 -> -1 -cotx146 comparetotal 80E-1 9 -> -1 -cotx147 comparetotal 8.0 9E+0 -> -1 -cotx148 comparetotal 8.0 90E-1 -> -1 -cotx149 comparetotal 8 0.9E+1 -> -1 -cotx150 comparetotal 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -cotx200 comparetotal -7.0 7.0 -> -1 -cotx201 comparetotal -7.0 7 -> -1 -cotx202 comparetotal -7 7.0 -> -1 -cotx203 comparetotal -7E+0 7.0 -> -1 -cotx204 comparetotal -70E-1 7.0 -> -1 -cotx205 comparetotal -0.7E+1 7 -> -1 -cotx206 comparetotal -70E-1 7 -> -1 -cotx207 comparetotal -7.0 7E+0 -> -1 -cotx208 comparetotal -7.0 70E-1 -> -1 -cotx209 comparetotal -7 0.7E+1 -> -1 -cotx210 comparetotal -7 70E-1 -> -1 - -cotx220 comparetotal -8.0 7.0 -> -1 -cotx221 comparetotal -8.0 7 -> -1 -cotx222 comparetotal -8 7.0 -> -1 -cotx223 comparetotal -8E+0 7.0 -> -1 -cotx224 comparetotal -80E-1 7.0 -> -1 -cotx225 comparetotal -0.8E+1 7 -> -1 -cotx226 comparetotal -80E-1 7 -> -1 -cotx227 comparetotal -8.0 7E+0 -> -1 -cotx228 comparetotal -8.0 70E-1 -> -1 -cotx229 comparetotal -8 0.7E+1 -> -1 -cotx230 comparetotal -8 70E-1 -> -1 - -cotx240 comparetotal -8.0 9.0 -> -1 -cotx241 comparetotal -8.0 9 -> -1 -cotx242 comparetotal -8 9.0 -> -1 -cotx243 comparetotal -8E+0 9.0 -> -1 -cotx244 comparetotal -80E-1 9.0 -> -1 -cotx245 comparetotal -0.8E+1 9 -> -1 -cotx246 comparetotal -80E-1 9 -> -1 -cotx247 comparetotal -8.0 9E+0 -> -1 -cotx248 comparetotal -8.0 90E-1 -> -1 -cotx249 comparetotal -8 0.9E+1 -> -1 -cotx250 comparetotal -8 90E-1 -> -1 - --- and again, with sign changes +- .. -cotx300 comparetotal 7.0 -7.0 -> 1 -cotx301 comparetotal 7.0 -7 -> 1 -cotx302 comparetotal 7 -7.0 -> 1 -cotx303 comparetotal 7E+0 -7.0 -> 1 -cotx304 comparetotal 70E-1 -7.0 -> 1 -cotx305 comparetotal .7E+1 -7 -> 1 -cotx306 comparetotal 70E-1 -7 -> 1 -cotx307 comparetotal 7.0 -7E+0 -> 1 -cotx308 comparetotal 7.0 -70E-1 -> 1 -cotx309 comparetotal 7 -.7E+1 -> 1 -cotx310 comparetotal 7 -70E-1 -> 1 - -cotx320 comparetotal 8.0 -7.0 -> 1 -cotx321 comparetotal 8.0 -7 -> 1 -cotx322 comparetotal 8 -7.0 -> 1 -cotx323 comparetotal 8E+0 -7.0 -> 1 -cotx324 comparetotal 80E-1 -7.0 -> 1 -cotx325 comparetotal .8E+1 -7 -> 1 -cotx326 comparetotal 80E-1 -7 -> 1 -cotx327 comparetotal 8.0 -7E+0 -> 1 -cotx328 comparetotal 8.0 -70E-1 -> 1 -cotx329 comparetotal 8 -.7E+1 -> 1 -cotx330 comparetotal 8 -70E-1 -> 1 - -cotx340 comparetotal 8.0 -9.0 -> 1 -cotx341 comparetotal 8.0 -9 -> 1 -cotx342 comparetotal 8 -9.0 -> 1 -cotx343 comparetotal 8E+0 -9.0 -> 1 -cotx344 comparetotal 80E-1 -9.0 -> 1 -cotx345 comparetotal .8E+1 -9 -> 1 -cotx346 comparetotal 80E-1 -9 -> 1 -cotx347 comparetotal 8.0 -9E+0 -> 1 -cotx348 comparetotal 8.0 -90E-1 -> 1 -cotx349 comparetotal 8 -.9E+1 -> 1 -cotx350 comparetotal 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -cotx400 comparetotal -7.0 -7.0 -> 0 -cotx401 comparetotal -7.0 -7 -> 1 -cotx402 comparetotal -7 -7.0 -> -1 -cotx403 comparetotal -7E+0 -7.0 -> -1 -cotx404 comparetotal -70E-1 -7.0 -> 0 -cotx405 comparetotal -.7E+1 -7 -> 0 -cotx406 comparetotal -70E-1 -7 -> 1 -cotx407 comparetotal -7.0 -7E+0 -> 1 -cotx408 comparetotal -7.0 -70E-1 -> 0 -cotx409 comparetotal -7 -.7E+1 -> 0 -cotx410 comparetotal -7 -70E-1 -> -1 - -cotx420 comparetotal -8.0 -7.0 -> -1 -cotx421 comparetotal -8.0 -7 -> -1 -cotx422 comparetotal -8 -7.0 -> -1 -cotx423 comparetotal -8E+0 -7.0 -> -1 -cotx424 comparetotal -80E-1 -7.0 -> -1 -cotx425 comparetotal -.8E+1 -7 -> -1 -cotx426 comparetotal -80E-1 -7 -> -1 -cotx427 comparetotal -8.0 -7E+0 -> -1 -cotx428 comparetotal -8.0 -70E-1 -> -1 -cotx429 comparetotal -8 -.7E+1 -> -1 -cotx430 comparetotal -8 -70E-1 -> -1 - -cotx440 comparetotal -8.0 -9.0 -> 1 -cotx441 comparetotal -8.0 -9 -> 1 -cotx442 comparetotal -8 -9.0 -> 1 -cotx443 comparetotal -8E+0 -9.0 -> 1 -cotx444 comparetotal -80E-1 -9.0 -> 1 -cotx445 comparetotal -.8E+1 -9 -> 1 -cotx446 comparetotal -80E-1 -9 -> 1 -cotx447 comparetotal -8.0 -9E+0 -> 1 -cotx448 comparetotal -8.0 -90E-1 -> 1 -cotx449 comparetotal -8 -.9E+1 -> 1 -cotx450 comparetotal -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -precision: 40 -cotx470 comparetotal 123.4560000000000000E789 123.456E789 -> -1 -cotx471 comparetotal 123.456000000000000E-89 123.456E-89 -> -1 -cotx472 comparetotal 123.45600000000000E789 123.456E789 -> -1 -cotx473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 -cotx474 comparetotal 123.456000000000E789 123.456E789 -> -1 -cotx475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 -cotx476 comparetotal 123.4560000000E789 123.456E789 -> -1 -cotx477 comparetotal 123.456000000E-89 123.456E-89 -> -1 -cotx478 comparetotal 123.45600000E789 123.456E789 -> -1 -cotx479 comparetotal 123.4560000E-89 123.456E-89 -> -1 -cotx480 comparetotal 123.456000E789 123.456E789 -> -1 -cotx481 comparetotal 123.45600E-89 123.456E-89 -> -1 -cotx482 comparetotal 123.4560E789 123.456E789 -> -1 -cotx483 comparetotal 123.456E-89 123.456E-89 -> 0 -cotx484 comparetotal 123.456E-89 123.4560000000000000E-89 -> 1 -cotx485 comparetotal 123.456E789 123.456000000000000E789 -> 1 -cotx486 comparetotal 123.456E-89 123.45600000000000E-89 -> 1 -cotx487 comparetotal 123.456E789 123.4560000000000E789 -> 1 -cotx488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 -cotx489 comparetotal 123.456E789 123.45600000000E789 -> 1 -cotx490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 -cotx491 comparetotal 123.456E789 123.456000000E789 -> 1 -cotx492 comparetotal 123.456E-89 123.45600000E-89 -> 1 -cotx493 comparetotal 123.456E789 123.4560000E789 -> 1 -cotx494 comparetotal 123.456E-89 123.456000E-89 -> 1 -cotx495 comparetotal 123.456E789 123.45600E789 -> 1 -cotx496 comparetotal 123.456E-89 123.4560E-89 -> 1 -cotx497 comparetotal 123.456E789 123.456E789 -> 0 - --- wide-ranging, around precision; signs equal -precision: 9 -cotx500 comparetotal 1 1E-15 -> 1 -cotx501 comparetotal 1 1E-14 -> 1 -cotx502 comparetotal 1 1E-13 -> 1 -cotx503 comparetotal 1 1E-12 -> 1 -cotx504 comparetotal 1 1E-11 -> 1 -cotx505 comparetotal 1 1E-10 -> 1 -cotx506 comparetotal 1 1E-9 -> 1 -cotx507 comparetotal 1 1E-8 -> 1 -cotx508 comparetotal 1 1E-7 -> 1 -cotx509 comparetotal 1 1E-6 -> 1 -cotx510 comparetotal 1 1E-5 -> 1 -cotx511 comparetotal 1 1E-4 -> 1 -cotx512 comparetotal 1 1E-3 -> 1 -cotx513 comparetotal 1 1E-2 -> 1 -cotx514 comparetotal 1 1E-1 -> 1 -cotx515 comparetotal 1 1E-0 -> 0 -cotx516 comparetotal 1 1E+1 -> -1 -cotx517 comparetotal 1 1E+2 -> -1 -cotx518 comparetotal 1 1E+3 -> -1 -cotx519 comparetotal 1 1E+4 -> -1 -cotx521 comparetotal 1 1E+5 -> -1 -cotx522 comparetotal 1 1E+6 -> -1 -cotx523 comparetotal 1 1E+7 -> -1 -cotx524 comparetotal 1 1E+8 -> -1 -cotx525 comparetotal 1 1E+9 -> -1 -cotx526 comparetotal 1 1E+10 -> -1 -cotx527 comparetotal 1 1E+11 -> -1 -cotx528 comparetotal 1 1E+12 -> -1 -cotx529 comparetotal 1 1E+13 -> -1 -cotx530 comparetotal 1 1E+14 -> -1 -cotx531 comparetotal 1 1E+15 -> -1 --- LR swap -cotx540 comparetotal 1E-15 1 -> -1 -cotx541 comparetotal 1E-14 1 -> -1 -cotx542 comparetotal 1E-13 1 -> -1 -cotx543 comparetotal 1E-12 1 -> -1 -cotx544 comparetotal 1E-11 1 -> -1 -cotx545 comparetotal 1E-10 1 -> -1 -cotx546 comparetotal 1E-9 1 -> -1 -cotx547 comparetotal 1E-8 1 -> -1 -cotx548 comparetotal 1E-7 1 -> -1 -cotx549 comparetotal 1E-6 1 -> -1 -cotx550 comparetotal 1E-5 1 -> -1 -cotx551 comparetotal 1E-4 1 -> -1 -cotx552 comparetotal 1E-3 1 -> -1 -cotx553 comparetotal 1E-2 1 -> -1 -cotx554 comparetotal 1E-1 1 -> -1 -cotx555 comparetotal 1E-0 1 -> 0 -cotx556 comparetotal 1E+1 1 -> 1 -cotx557 comparetotal 1E+2 1 -> 1 -cotx558 comparetotal 1E+3 1 -> 1 -cotx559 comparetotal 1E+4 1 -> 1 -cotx561 comparetotal 1E+5 1 -> 1 -cotx562 comparetotal 1E+6 1 -> 1 -cotx563 comparetotal 1E+7 1 -> 1 -cotx564 comparetotal 1E+8 1 -> 1 -cotx565 comparetotal 1E+9 1 -> 1 -cotx566 comparetotal 1E+10 1 -> 1 -cotx567 comparetotal 1E+11 1 -> 1 -cotx568 comparetotal 1E+12 1 -> 1 -cotx569 comparetotal 1E+13 1 -> 1 -cotx570 comparetotal 1E+14 1 -> 1 -cotx571 comparetotal 1E+15 1 -> 1 --- similar with an useful coefficient, one side only -cotx580 comparetotal 0.000000987654321 1E-15 -> 1 -cotx581 comparetotal 0.000000987654321 1E-14 -> 1 -cotx582 comparetotal 0.000000987654321 1E-13 -> 1 -cotx583 comparetotal 0.000000987654321 1E-12 -> 1 -cotx584 comparetotal 0.000000987654321 1E-11 -> 1 -cotx585 comparetotal 0.000000987654321 1E-10 -> 1 -cotx586 comparetotal 0.000000987654321 1E-9 -> 1 -cotx587 comparetotal 0.000000987654321 1E-8 -> 1 -cotx588 comparetotal 0.000000987654321 1E-7 -> 1 -cotx589 comparetotal 0.000000987654321 1E-6 -> -1 -cotx590 comparetotal 0.000000987654321 1E-5 -> -1 -cotx591 comparetotal 0.000000987654321 1E-4 -> -1 -cotx592 comparetotal 0.000000987654321 1E-3 -> -1 -cotx593 comparetotal 0.000000987654321 1E-2 -> -1 -cotx594 comparetotal 0.000000987654321 1E-1 -> -1 -cotx595 comparetotal 0.000000987654321 1E-0 -> -1 -cotx596 comparetotal 0.000000987654321 1E+1 -> -1 -cotx597 comparetotal 0.000000987654321 1E+2 -> -1 -cotx598 comparetotal 0.000000987654321 1E+3 -> -1 -cotx599 comparetotal 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -precision: 20 -cotx600 comparetotal 12 12.2345 -> -1 -cotx601 comparetotal 12.0 12.2345 -> -1 -cotx602 comparetotal 12.00 12.2345 -> -1 -cotx603 comparetotal 12.000 12.2345 -> -1 -cotx604 comparetotal 12.0000 12.2345 -> -1 -cotx605 comparetotal 12.00000 12.2345 -> -1 -cotx606 comparetotal 12.000000 12.2345 -> -1 -cotx607 comparetotal 12.0000000 12.2345 -> -1 -cotx608 comparetotal 12.00000000 12.2345 -> -1 -cotx609 comparetotal 12.000000000 12.2345 -> -1 -cotx610 comparetotal 12.1234 12 -> 1 -cotx611 comparetotal 12.1234 12.0 -> 1 -cotx612 comparetotal 12.1234 12.00 -> 1 -cotx613 comparetotal 12.1234 12.000 -> 1 -cotx614 comparetotal 12.1234 12.0000 -> 1 -cotx615 comparetotal 12.1234 12.00000 -> 1 -cotx616 comparetotal 12.1234 12.000000 -> 1 -cotx617 comparetotal 12.1234 12.0000000 -> 1 -cotx618 comparetotal 12.1234 12.00000000 -> 1 -cotx619 comparetotal 12.1234 12.000000000 -> 1 -cotx620 comparetotal -12 -12.2345 -> 1 -cotx621 comparetotal -12.0 -12.2345 -> 1 -cotx622 comparetotal -12.00 -12.2345 -> 1 -cotx623 comparetotal -12.000 -12.2345 -> 1 -cotx624 comparetotal -12.0000 -12.2345 -> 1 -cotx625 comparetotal -12.00000 -12.2345 -> 1 -cotx626 comparetotal -12.000000 -12.2345 -> 1 -cotx627 comparetotal -12.0000000 -12.2345 -> 1 -cotx628 comparetotal -12.00000000 -12.2345 -> 1 -cotx629 comparetotal -12.000000000 -12.2345 -> 1 -cotx630 comparetotal -12.1234 -12 -> -1 -cotx631 comparetotal -12.1234 -12.0 -> -1 -cotx632 comparetotal -12.1234 -12.00 -> -1 -cotx633 comparetotal -12.1234 -12.000 -> -1 -cotx634 comparetotal -12.1234 -12.0000 -> -1 -cotx635 comparetotal -12.1234 -12.00000 -> -1 -cotx636 comparetotal -12.1234 -12.000000 -> -1 -cotx637 comparetotal -12.1234 -12.0000000 -> -1 -cotx638 comparetotal -12.1234 -12.00000000 -> -1 -cotx639 comparetotal -12.1234 -12.000000000 -> -1 -precision: 9 - --- extended zeros -cotx640 comparetotal 0 0 -> 0 -cotx641 comparetotal 0 -0 -> 1 -cotx642 comparetotal 0 -0.0 -> 1 -cotx643 comparetotal 0 0.0 -> 1 -cotx644 comparetotal -0 0 -> -1 -cotx645 comparetotal -0 -0 -> 0 -cotx646 comparetotal -0 -0.0 -> -1 -cotx647 comparetotal -0 0.0 -> -1 -cotx648 comparetotal 0.0 0 -> -1 -cotx649 comparetotal 0.0 -0 -> 1 -cotx650 comparetotal 0.0 -0.0 -> 1 -cotx651 comparetotal 0.0 0.0 -> 0 -cotx652 comparetotal -0.0 0 -> -1 -cotx653 comparetotal -0.0 -0 -> 1 -cotx654 comparetotal -0.0 -0.0 -> 0 -cotx655 comparetotal -0.0 0.0 -> -1 - -cotx656 comparetotal -0E1 0.0 -> -1 -cotx657 comparetotal -0E2 0.0 -> -1 -cotx658 comparetotal 0E1 0.0 -> 1 -cotx659 comparetotal 0E2 0.0 -> 1 -cotx660 comparetotal -0E1 0 -> -1 -cotx661 comparetotal -0E2 0 -> -1 -cotx662 comparetotal 0E1 0 -> 1 -cotx663 comparetotal 0E2 0 -> 1 -cotx664 comparetotal -0E1 -0E1 -> 0 -cotx665 comparetotal -0E2 -0E1 -> -1 -cotx666 comparetotal 0E1 -0E1 -> 1 -cotx667 comparetotal 0E2 -0E1 -> 1 -cotx668 comparetotal -0E1 -0E2 -> 1 -cotx669 comparetotal -0E2 -0E2 -> 0 -cotx670 comparetotal 0E1 -0E2 -> 1 -cotx671 comparetotal 0E2 -0E2 -> 1 -cotx672 comparetotal -0E1 0E1 -> -1 -cotx673 comparetotal -0E2 0E1 -> -1 -cotx674 comparetotal 0E1 0E1 -> 0 -cotx675 comparetotal 0E2 0E1 -> 1 -cotx676 comparetotal -0E1 0E2 -> -1 -cotx677 comparetotal -0E2 0E2 -> -1 -cotx678 comparetotal 0E1 0E2 -> -1 -cotx679 comparetotal 0E2 0E2 -> 0 - --- trailing zeros; unit-y -precision: 20 -cotx680 comparetotal 12 12 -> 0 -cotx681 comparetotal 12 12.0 -> 1 -cotx682 comparetotal 12 12.00 -> 1 -cotx683 comparetotal 12 12.000 -> 1 -cotx684 comparetotal 12 12.0000 -> 1 -cotx685 comparetotal 12 12.00000 -> 1 -cotx686 comparetotal 12 12.000000 -> 1 -cotx687 comparetotal 12 12.0000000 -> 1 -cotx688 comparetotal 12 12.00000000 -> 1 -cotx689 comparetotal 12 12.000000000 -> 1 -cotx690 comparetotal 12 12 -> 0 -cotx691 comparetotal 12.0 12 -> -1 -cotx692 comparetotal 12.00 12 -> -1 -cotx693 comparetotal 12.000 12 -> -1 -cotx694 comparetotal 12.0000 12 -> -1 -cotx695 comparetotal 12.00000 12 -> -1 -cotx696 comparetotal 12.000000 12 -> -1 -cotx697 comparetotal 12.0000000 12 -> -1 -cotx698 comparetotal 12.00000000 12 -> -1 -cotx699 comparetotal 12.000000000 12 -> -1 - --- long operand checks -maxexponent: 999 -minexponent: -999 -precision: 9 -cotx701 comparetotal 12345678000 1 -> 1 -cotx702 comparetotal 1 12345678000 -> -1 -cotx703 comparetotal 1234567800 1 -> 1 -cotx704 comparetotal 1 1234567800 -> -1 -cotx705 comparetotal 1234567890 1 -> 1 -cotx706 comparetotal 1 1234567890 -> -1 -cotx707 comparetotal 1234567891 1 -> 1 -cotx708 comparetotal 1 1234567891 -> -1 -cotx709 comparetotal 12345678901 1 -> 1 -cotx710 comparetotal 1 12345678901 -> -1 -cotx711 comparetotal 1234567896 1 -> 1 -cotx712 comparetotal 1 1234567896 -> -1 -cotx713 comparetotal -1234567891 1 -> -1 -cotx714 comparetotal 1 -1234567891 -> 1 -cotx715 comparetotal -12345678901 1 -> -1 -cotx716 comparetotal 1 -12345678901 -> 1 -cotx717 comparetotal -1234567896 1 -> -1 -cotx718 comparetotal 1 -1234567896 -> 1 - -precision: 15 --- same with plenty of precision -cotx721 comparetotal 12345678000 1 -> 1 -cotx722 comparetotal 1 12345678000 -> -1 -cotx723 comparetotal 1234567800 1 -> 1 -cotx724 comparetotal 1 1234567800 -> -1 -cotx725 comparetotal 1234567890 1 -> 1 -cotx726 comparetotal 1 1234567890 -> -1 -cotx727 comparetotal 1234567891 1 -> 1 -cotx728 comparetotal 1 1234567891 -> -1 -cotx729 comparetotal 12345678901 1 -> 1 -cotx730 comparetotal 1 12345678901 -> -1 -cotx731 comparetotal 1234567896 1 -> 1 -cotx732 comparetotal 1 1234567896 -> -1 - --- residue cases -precision: 5 -cotx740 comparetotal 1 0.9999999 -> 1 -cotx741 comparetotal 1 0.999999 -> 1 -cotx742 comparetotal 1 0.99999 -> 1 -cotx743 comparetotal 1 1.0000 -> 1 -cotx744 comparetotal 1 1.00001 -> -1 -cotx745 comparetotal 1 1.000001 -> -1 -cotx746 comparetotal 1 1.0000001 -> -1 -cotx750 comparetotal 0.9999999 1 -> -1 -cotx751 comparetotal 0.999999 1 -> -1 -cotx752 comparetotal 0.99999 1 -> -1 -cotx753 comparetotal 1.0000 1 -> -1 -cotx754 comparetotal 1.00001 1 -> 1 -cotx755 comparetotal 1.000001 1 -> 1 -cotx756 comparetotal 1.0000001 1 -> 1 - --- a selection of longies -cotx760 comparetotal -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> -1 -cotx761 comparetotal -36852134.84194296250843579428931 -36852134.84194296250843579428931 -> 0 -cotx762 comparetotal -36852134.94194296250843579428931 -36852134.84194296250843579428931 -> -1 -cotx763 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 --- precisions above or below the difference should have no effect -precision: 11 -cotx764 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 10 -cotx765 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 9 -cotx766 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 8 -cotx767 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 7 -cotx768 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 6 -cotx769 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 5 -cotx770 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 4 -cotx771 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 3 -cotx772 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 2 -cotx773 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 -precision: 1 -cotx774 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 - --- Specials -precision: 9 -cotx780 comparetotal Inf -Inf -> 1 -cotx781 comparetotal Inf -1000 -> 1 -cotx782 comparetotal Inf -1 -> 1 -cotx783 comparetotal Inf -0 -> 1 -cotx784 comparetotal Inf 0 -> 1 -cotx785 comparetotal Inf 1 -> 1 -cotx786 comparetotal Inf 1000 -> 1 -cotx787 comparetotal Inf Inf -> 0 -cotx788 comparetotal -1000 Inf -> -1 -cotx789 comparetotal -Inf Inf -> -1 -cotx790 comparetotal -1 Inf -> -1 -cotx791 comparetotal -0 Inf -> -1 -cotx792 comparetotal 0 Inf -> -1 -cotx793 comparetotal 1 Inf -> -1 -cotx794 comparetotal 1000 Inf -> -1 -cotx795 comparetotal Inf Inf -> 0 - -cotx800 comparetotal -Inf -Inf -> 0 -cotx801 comparetotal -Inf -1000 -> -1 -cotx802 comparetotal -Inf -1 -> -1 -cotx803 comparetotal -Inf -0 -> -1 -cotx804 comparetotal -Inf 0 -> -1 -cotx805 comparetotal -Inf 1 -> -1 -cotx806 comparetotal -Inf 1000 -> -1 -cotx807 comparetotal -Inf Inf -> -1 -cotx808 comparetotal -Inf -Inf -> 0 -cotx809 comparetotal -1000 -Inf -> 1 -cotx810 comparetotal -1 -Inf -> 1 -cotx811 comparetotal -0 -Inf -> 1 -cotx812 comparetotal 0 -Inf -> 1 -cotx813 comparetotal 1 -Inf -> 1 -cotx814 comparetotal 1000 -Inf -> 1 -cotx815 comparetotal Inf -Inf -> 1 - -cotx821 comparetotal NaN -Inf -> 1 -cotx822 comparetotal NaN -1000 -> 1 -cotx823 comparetotal NaN -1 -> 1 -cotx824 comparetotal NaN -0 -> 1 -cotx825 comparetotal NaN 0 -> 1 -cotx826 comparetotal NaN 1 -> 1 -cotx827 comparetotal NaN 1000 -> 1 -cotx828 comparetotal NaN Inf -> 1 -cotx829 comparetotal NaN NaN -> 0 -cotx830 comparetotal -Inf NaN -> -1 -cotx831 comparetotal -1000 NaN -> -1 -cotx832 comparetotal -1 NaN -> -1 -cotx833 comparetotal -0 NaN -> -1 -cotx834 comparetotal 0 NaN -> -1 -cotx835 comparetotal 1 NaN -> -1 -cotx836 comparetotal 1000 NaN -> -1 -cotx837 comparetotal Inf NaN -> -1 -cotx838 comparetotal -NaN -NaN -> 0 -cotx839 comparetotal +NaN -NaN -> 1 -cotx840 comparetotal -NaN +NaN -> -1 - -cotx841 comparetotal sNaN -sNaN -> 1 -cotx842 comparetotal sNaN -NaN -> 1 -cotx843 comparetotal sNaN -Inf -> 1 -cotx844 comparetotal sNaN -1000 -> 1 -cotx845 comparetotal sNaN -1 -> 1 -cotx846 comparetotal sNaN -0 -> 1 -cotx847 comparetotal sNaN 0 -> 1 -cotx848 comparetotal sNaN 1 -> 1 -cotx849 comparetotal sNaN 1000 -> 1 -cotx850 comparetotal sNaN NaN -> -1 -cotx851 comparetotal sNaN sNaN -> 0 - -cotx852 comparetotal -sNaN sNaN -> -1 -cotx853 comparetotal -NaN sNaN -> -1 -cotx854 comparetotal -Inf sNaN -> -1 -cotx855 comparetotal -1000 sNaN -> -1 -cotx856 comparetotal -1 sNaN -> -1 -cotx857 comparetotal -0 sNaN -> -1 -cotx858 comparetotal 0 sNaN -> -1 -cotx859 comparetotal 1 sNaN -> -1 -cotx860 comparetotal 1000 sNaN -> -1 -cotx861 comparetotal Inf sNaN -> -1 -cotx862 comparetotal NaN sNaN -> 1 -cotx863 comparetotal sNaN sNaN -> 0 - -cotx871 comparetotal -sNaN -sNaN -> 0 -cotx872 comparetotal -sNaN -NaN -> 1 -cotx873 comparetotal -sNaN -Inf -> -1 -cotx874 comparetotal -sNaN -1000 -> -1 -cotx875 comparetotal -sNaN -1 -> -1 -cotx876 comparetotal -sNaN -0 -> -1 -cotx877 comparetotal -sNaN 0 -> -1 -cotx878 comparetotal -sNaN 1 -> -1 -cotx879 comparetotal -sNaN 1000 -> -1 -cotx880 comparetotal -sNaN NaN -> -1 -cotx881 comparetotal -sNaN sNaN -> -1 - -cotx882 comparetotal -sNaN -sNaN -> 0 -cotx883 comparetotal -NaN -sNaN -> -1 -cotx884 comparetotal -Inf -sNaN -> 1 -cotx885 comparetotal -1000 -sNaN -> 1 -cotx886 comparetotal -1 -sNaN -> 1 -cotx887 comparetotal -0 -sNaN -> 1 -cotx888 comparetotal 0 -sNaN -> 1 -cotx889 comparetotal 1 -sNaN -> 1 -cotx890 comparetotal 1000 -sNaN -> 1 -cotx891 comparetotal Inf -sNaN -> 1 -cotx892 comparetotal NaN -sNaN -> 1 -cotx893 comparetotal sNaN -sNaN -> 1 - --- NaNs with payload -cotx960 comparetotal NaN9 -Inf -> 1 -cotx961 comparetotal NaN8 999 -> 1 -cotx962 comparetotal NaN77 Inf -> 1 -cotx963 comparetotal -NaN67 NaN5 -> -1 -cotx964 comparetotal -Inf -NaN4 -> 1 -cotx965 comparetotal -999 -NaN33 -> 1 -cotx966 comparetotal Inf NaN2 -> -1 - -cotx970 comparetotal -NaN41 -NaN42 -> 1 -cotx971 comparetotal +NaN41 -NaN42 -> 1 -cotx972 comparetotal -NaN41 +NaN42 -> -1 -cotx973 comparetotal +NaN41 +NaN42 -> -1 -cotx974 comparetotal -NaN42 -NaN01 -> -1 -cotx975 comparetotal +NaN42 -NaN01 -> 1 -cotx976 comparetotal -NaN42 +NaN01 -> -1 -cotx977 comparetotal +NaN42 +NaN01 -> 1 - -cotx980 comparetotal -sNaN771 -sNaN772 -> 1 -cotx981 comparetotal +sNaN771 -sNaN772 -> 1 -cotx982 comparetotal -sNaN771 +sNaN772 -> -1 -cotx983 comparetotal +sNaN771 +sNaN772 -> -1 -cotx984 comparetotal -sNaN772 -sNaN771 -> -1 -cotx985 comparetotal +sNaN772 -sNaN771 -> 1 -cotx986 comparetotal -sNaN772 +sNaN771 -> -1 -cotx987 comparetotal +sNaN772 +sNaN771 -> 1 - -cotx991 comparetotal -sNaN99 -Inf -> -1 -cotx992 comparetotal sNaN98 -11 -> 1 -cotx993 comparetotal sNaN97 NaN -> -1 -cotx994 comparetotal sNaN16 sNaN94 -> -1 -cotx995 comparetotal NaN85 sNaN83 -> 1 -cotx996 comparetotal -Inf sNaN92 -> -1 -cotx997 comparetotal 088 sNaN81 -> -1 -cotx998 comparetotal Inf sNaN90 -> -1 -cotx999 comparetotal NaN -sNaN89 -> 1 - --- overflow and underflow tests .. subnormal results now allowed -maxExponent: 999999999 -minexponent: -999999999 -cotx1080 comparetotal +1.23456789012345E-0 9E+999999999 -> -1 -cotx1081 comparetotal 9E+999999999 +1.23456789012345E-0 -> 1 -cotx1082 comparetotal +0.100 9E-999999999 -> 1 -cotx1083 comparetotal 9E-999999999 +0.100 -> -1 -cotx1085 comparetotal -1.23456789012345E-0 9E+999999999 -> -1 -cotx1086 comparetotal 9E+999999999 -1.23456789012345E-0 -> 1 -cotx1087 comparetotal -0.100 9E-999999999 -> -1 -cotx1088 comparetotal 9E-999999999 -0.100 -> 1 - -cotx1089 comparetotal 1e-599999999 1e-400000001 -> -1 -cotx1090 comparetotal 1e-599999999 1e-400000000 -> -1 -cotx1091 comparetotal 1e-600000000 1e-400000000 -> -1 -cotx1092 comparetotal 9e-999999998 0.01 -> -1 -cotx1093 comparetotal 9e-999999998 0.1 -> -1 -cotx1094 comparetotal 0.01 9e-999999998 -> 1 -cotx1095 comparetotal 1e599999999 1e400000001 -> 1 -cotx1096 comparetotal 1e599999999 1e400000000 -> 1 -cotx1097 comparetotal 1e600000000 1e400000000 -> 1 -cotx1098 comparetotal 9e999999998 100 -> 1 -cotx1099 comparetotal 9e999999998 10 -> 1 -cotx1100 comparetotal 100 9e999999998 -> -1 --- signs -cotx1101 comparetotal 1e+777777777 1e+411111111 -> 1 -cotx1102 comparetotal 1e+777777777 -1e+411111111 -> 1 -cotx1103 comparetotal -1e+777777777 1e+411111111 -> -1 -cotx1104 comparetotal -1e+777777777 -1e+411111111 -> -1 -cotx1105 comparetotal 1e-777777777 1e-411111111 -> -1 -cotx1106 comparetotal 1e-777777777 -1e-411111111 -> 1 -cotx1107 comparetotal -1e-777777777 1e-411111111 -> -1 -cotx1108 comparetotal -1e-777777777 -1e-411111111 -> 1 - --- spread zeros -cotx1110 comparetotal 0E-383 0 -> -1 -cotx1111 comparetotal 0E-383 -0 -> 1 -cotx1112 comparetotal -0E-383 0 -> -1 -cotx1113 comparetotal -0E-383 -0 -> 1 -cotx1114 comparetotal 0E-383 0E+384 -> -1 -cotx1115 comparetotal 0E-383 -0E+384 -> 1 -cotx1116 comparetotal -0E-383 0E+384 -> -1 -cotx1117 comparetotal -0E-383 -0E+384 -> 1 -cotx1118 comparetotal 0 0E+384 -> -1 -cotx1119 comparetotal 0 -0E+384 -> 1 -cotx1120 comparetotal -0 0E+384 -> -1 -cotx1121 comparetotal -0 -0E+384 -> 1 - -cotx1130 comparetotal 0E+384 0 -> 1 -cotx1131 comparetotal 0E+384 -0 -> 1 -cotx1132 comparetotal -0E+384 0 -> -1 -cotx1133 comparetotal -0E+384 -0 -> -1 -cotx1134 comparetotal 0E+384 0E-383 -> 1 -cotx1135 comparetotal 0E+384 -0E-383 -> 1 -cotx1136 comparetotal -0E+384 0E-383 -> -1 -cotx1137 comparetotal -0E+384 -0E-383 -> -1 -cotx1138 comparetotal 0 0E-383 -> 1 -cotx1139 comparetotal 0 -0E-383 -> 1 -cotx1140 comparetotal -0 0E-383 -> -1 -cotx1141 comparetotal -0 -0E-383 -> -1 - --- Null tests -cotx9990 comparetotal 10 # -> NaN Invalid_operation -cotx9991 comparetotal # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- comparetotal.decTest -- decimal comparison using total ordering -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +extended: 1 +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +-- sanity checks +cotx001 comparetotal -2 -2 -> 0 +cotx002 comparetotal -2 -1 -> -1 +cotx003 comparetotal -2 0 -> -1 +cotx004 comparetotal -2 1 -> -1 +cotx005 comparetotal -2 2 -> -1 +cotx006 comparetotal -1 -2 -> 1 +cotx007 comparetotal -1 -1 -> 0 +cotx008 comparetotal -1 0 -> -1 +cotx009 comparetotal -1 1 -> -1 +cotx010 comparetotal -1 2 -> -1 +cotx011 comparetotal 0 -2 -> 1 +cotx012 comparetotal 0 -1 -> 1 +cotx013 comparetotal 0 0 -> 0 +cotx014 comparetotal 0 1 -> -1 +cotx015 comparetotal 0 2 -> -1 +cotx016 comparetotal 1 -2 -> 1 +cotx017 comparetotal 1 -1 -> 1 +cotx018 comparetotal 1 0 -> 1 +cotx019 comparetotal 1 1 -> 0 +cotx020 comparetotal 1 2 -> -1 +cotx021 comparetotal 2 -2 -> 1 +cotx022 comparetotal 2 -1 -> 1 +cotx023 comparetotal 2 0 -> 1 +cotx025 comparetotal 2 1 -> 1 +cotx026 comparetotal 2 2 -> 0 + +cotx031 comparetotal -20 -20 -> 0 +cotx032 comparetotal -20 -10 -> -1 +cotx033 comparetotal -20 00 -> -1 +cotx034 comparetotal -20 10 -> -1 +cotx035 comparetotal -20 20 -> -1 +cotx036 comparetotal -10 -20 -> 1 +cotx037 comparetotal -10 -10 -> 0 +cotx038 comparetotal -10 00 -> -1 +cotx039 comparetotal -10 10 -> -1 +cotx040 comparetotal -10 20 -> -1 +cotx041 comparetotal 00 -20 -> 1 +cotx042 comparetotal 00 -10 -> 1 +cotx043 comparetotal 00 00 -> 0 +cotx044 comparetotal 00 10 -> -1 +cotx045 comparetotal 00 20 -> -1 +cotx046 comparetotal 10 -20 -> 1 +cotx047 comparetotal 10 -10 -> 1 +cotx048 comparetotal 10 00 -> 1 +cotx049 comparetotal 10 10 -> 0 +cotx050 comparetotal 10 20 -> -1 +cotx051 comparetotal 20 -20 -> 1 +cotx052 comparetotal 20 -10 -> 1 +cotx053 comparetotal 20 00 -> 1 +cotx055 comparetotal 20 10 -> 1 +cotx056 comparetotal 20 20 -> 0 + +cotx061 comparetotal -2.0 -2.0 -> 0 +cotx062 comparetotal -2.0 -1.0 -> -1 +cotx063 comparetotal -2.0 0.0 -> -1 +cotx064 comparetotal -2.0 1.0 -> -1 +cotx065 comparetotal -2.0 2.0 -> -1 +cotx066 comparetotal -1.0 -2.0 -> 1 +cotx067 comparetotal -1.0 -1.0 -> 0 +cotx068 comparetotal -1.0 0.0 -> -1 +cotx069 comparetotal -1.0 1.0 -> -1 +cotx070 comparetotal -1.0 2.0 -> -1 +cotx071 comparetotal 0.0 -2.0 -> 1 +cotx072 comparetotal 0.0 -1.0 -> 1 +cotx073 comparetotal 0.0 0.0 -> 0 +cotx074 comparetotal 0.0 1.0 -> -1 +cotx075 comparetotal 0.0 2.0 -> -1 +cotx076 comparetotal 1.0 -2.0 -> 1 +cotx077 comparetotal 1.0 -1.0 -> 1 +cotx078 comparetotal 1.0 0.0 -> 1 +cotx079 comparetotal 1.0 1.0 -> 0 +cotx080 comparetotal 1.0 2.0 -> -1 +cotx081 comparetotal 2.0 -2.0 -> 1 +cotx082 comparetotal 2.0 -1.0 -> 1 +cotx083 comparetotal 2.0 0.0 -> 1 +cotx085 comparetotal 2.0 1.0 -> 1 +cotx086 comparetotal 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +maxexponent: 999999999 +minexponent: -999999999 +cotx090 comparetotal 9.99999999E+999999999 9.99999999E+999999999 -> 0 +cotx091 comparetotal -9.99999999E+999999999 9.99999999E+999999999 -> -1 +cotx092 comparetotal 9.99999999E+999999999 -9.99999999E+999999999 -> 1 +cotx093 comparetotal -9.99999999E+999999999 -9.99999999E+999999999 -> 0 + +-- Examples +cotx094 comparetotal 12.73 127.9 -> -1 +cotx095 comparetotal -127 12 -> -1 +cotx096 comparetotal 12.30 12.3 -> -1 +cotx097 comparetotal 12.30 12.30 -> 0 +cotx098 comparetotal 12.3 12.300 -> 1 +cotx099 comparetotal 12.3 NaN -> -1 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +cotx100 comparetotal 7.0 7.0 -> 0 +cotx101 comparetotal 7.0 7 -> -1 +cotx102 comparetotal 7 7.0 -> 1 +cotx103 comparetotal 7E+0 7.0 -> 1 +cotx104 comparetotal 70E-1 7.0 -> 0 +cotx105 comparetotal 0.7E+1 7 -> 0 +cotx106 comparetotal 70E-1 7 -> -1 +cotx107 comparetotal 7.0 7E+0 -> -1 +cotx108 comparetotal 7.0 70E-1 -> 0 +cotx109 comparetotal 7 0.7E+1 -> 0 +cotx110 comparetotal 7 70E-1 -> 1 + +cotx120 comparetotal 8.0 7.0 -> 1 +cotx121 comparetotal 8.0 7 -> 1 +cotx122 comparetotal 8 7.0 -> 1 +cotx123 comparetotal 8E+0 7.0 -> 1 +cotx124 comparetotal 80E-1 7.0 -> 1 +cotx125 comparetotal 0.8E+1 7 -> 1 +cotx126 comparetotal 80E-1 7 -> 1 +cotx127 comparetotal 8.0 7E+0 -> 1 +cotx128 comparetotal 8.0 70E-1 -> 1 +cotx129 comparetotal 8 0.7E+1 -> 1 +cotx130 comparetotal 8 70E-1 -> 1 + +cotx140 comparetotal 8.0 9.0 -> -1 +cotx141 comparetotal 8.0 9 -> -1 +cotx142 comparetotal 8 9.0 -> -1 +cotx143 comparetotal 8E+0 9.0 -> -1 +cotx144 comparetotal 80E-1 9.0 -> -1 +cotx145 comparetotal 0.8E+1 9 -> -1 +cotx146 comparetotal 80E-1 9 -> -1 +cotx147 comparetotal 8.0 9E+0 -> -1 +cotx148 comparetotal 8.0 90E-1 -> -1 +cotx149 comparetotal 8 0.9E+1 -> -1 +cotx150 comparetotal 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +cotx200 comparetotal -7.0 7.0 -> -1 +cotx201 comparetotal -7.0 7 -> -1 +cotx202 comparetotal -7 7.0 -> -1 +cotx203 comparetotal -7E+0 7.0 -> -1 +cotx204 comparetotal -70E-1 7.0 -> -1 +cotx205 comparetotal -0.7E+1 7 -> -1 +cotx206 comparetotal -70E-1 7 -> -1 +cotx207 comparetotal -7.0 7E+0 -> -1 +cotx208 comparetotal -7.0 70E-1 -> -1 +cotx209 comparetotal -7 0.7E+1 -> -1 +cotx210 comparetotal -7 70E-1 -> -1 + +cotx220 comparetotal -8.0 7.0 -> -1 +cotx221 comparetotal -8.0 7 -> -1 +cotx222 comparetotal -8 7.0 -> -1 +cotx223 comparetotal -8E+0 7.0 -> -1 +cotx224 comparetotal -80E-1 7.0 -> -1 +cotx225 comparetotal -0.8E+1 7 -> -1 +cotx226 comparetotal -80E-1 7 -> -1 +cotx227 comparetotal -8.0 7E+0 -> -1 +cotx228 comparetotal -8.0 70E-1 -> -1 +cotx229 comparetotal -8 0.7E+1 -> -1 +cotx230 comparetotal -8 70E-1 -> -1 + +cotx240 comparetotal -8.0 9.0 -> -1 +cotx241 comparetotal -8.0 9 -> -1 +cotx242 comparetotal -8 9.0 -> -1 +cotx243 comparetotal -8E+0 9.0 -> -1 +cotx244 comparetotal -80E-1 9.0 -> -1 +cotx245 comparetotal -0.8E+1 9 -> -1 +cotx246 comparetotal -80E-1 9 -> -1 +cotx247 comparetotal -8.0 9E+0 -> -1 +cotx248 comparetotal -8.0 90E-1 -> -1 +cotx249 comparetotal -8 0.9E+1 -> -1 +cotx250 comparetotal -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +cotx300 comparetotal 7.0 -7.0 -> 1 +cotx301 comparetotal 7.0 -7 -> 1 +cotx302 comparetotal 7 -7.0 -> 1 +cotx303 comparetotal 7E+0 -7.0 -> 1 +cotx304 comparetotal 70E-1 -7.0 -> 1 +cotx305 comparetotal .7E+1 -7 -> 1 +cotx306 comparetotal 70E-1 -7 -> 1 +cotx307 comparetotal 7.0 -7E+0 -> 1 +cotx308 comparetotal 7.0 -70E-1 -> 1 +cotx309 comparetotal 7 -.7E+1 -> 1 +cotx310 comparetotal 7 -70E-1 -> 1 + +cotx320 comparetotal 8.0 -7.0 -> 1 +cotx321 comparetotal 8.0 -7 -> 1 +cotx322 comparetotal 8 -7.0 -> 1 +cotx323 comparetotal 8E+0 -7.0 -> 1 +cotx324 comparetotal 80E-1 -7.0 -> 1 +cotx325 comparetotal .8E+1 -7 -> 1 +cotx326 comparetotal 80E-1 -7 -> 1 +cotx327 comparetotal 8.0 -7E+0 -> 1 +cotx328 comparetotal 8.0 -70E-1 -> 1 +cotx329 comparetotal 8 -.7E+1 -> 1 +cotx330 comparetotal 8 -70E-1 -> 1 + +cotx340 comparetotal 8.0 -9.0 -> 1 +cotx341 comparetotal 8.0 -9 -> 1 +cotx342 comparetotal 8 -9.0 -> 1 +cotx343 comparetotal 8E+0 -9.0 -> 1 +cotx344 comparetotal 80E-1 -9.0 -> 1 +cotx345 comparetotal .8E+1 -9 -> 1 +cotx346 comparetotal 80E-1 -9 -> 1 +cotx347 comparetotal 8.0 -9E+0 -> 1 +cotx348 comparetotal 8.0 -90E-1 -> 1 +cotx349 comparetotal 8 -.9E+1 -> 1 +cotx350 comparetotal 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +cotx400 comparetotal -7.0 -7.0 -> 0 +cotx401 comparetotal -7.0 -7 -> 1 +cotx402 comparetotal -7 -7.0 -> -1 +cotx403 comparetotal -7E+0 -7.0 -> -1 +cotx404 comparetotal -70E-1 -7.0 -> 0 +cotx405 comparetotal -.7E+1 -7 -> 0 +cotx406 comparetotal -70E-1 -7 -> 1 +cotx407 comparetotal -7.0 -7E+0 -> 1 +cotx408 comparetotal -7.0 -70E-1 -> 0 +cotx409 comparetotal -7 -.7E+1 -> 0 +cotx410 comparetotal -7 -70E-1 -> -1 + +cotx420 comparetotal -8.0 -7.0 -> -1 +cotx421 comparetotal -8.0 -7 -> -1 +cotx422 comparetotal -8 -7.0 -> -1 +cotx423 comparetotal -8E+0 -7.0 -> -1 +cotx424 comparetotal -80E-1 -7.0 -> -1 +cotx425 comparetotal -.8E+1 -7 -> -1 +cotx426 comparetotal -80E-1 -7 -> -1 +cotx427 comparetotal -8.0 -7E+0 -> -1 +cotx428 comparetotal -8.0 -70E-1 -> -1 +cotx429 comparetotal -8 -.7E+1 -> -1 +cotx430 comparetotal -8 -70E-1 -> -1 + +cotx440 comparetotal -8.0 -9.0 -> 1 +cotx441 comparetotal -8.0 -9 -> 1 +cotx442 comparetotal -8 -9.0 -> 1 +cotx443 comparetotal -8E+0 -9.0 -> 1 +cotx444 comparetotal -80E-1 -9.0 -> 1 +cotx445 comparetotal -.8E+1 -9 -> 1 +cotx446 comparetotal -80E-1 -9 -> 1 +cotx447 comparetotal -8.0 -9E+0 -> 1 +cotx448 comparetotal -8.0 -90E-1 -> 1 +cotx449 comparetotal -8 -.9E+1 -> 1 +cotx450 comparetotal -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +precision: 40 +cotx470 comparetotal 123.4560000000000000E789 123.456E789 -> -1 +cotx471 comparetotal 123.456000000000000E-89 123.456E-89 -> -1 +cotx472 comparetotal 123.45600000000000E789 123.456E789 -> -1 +cotx473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 +cotx474 comparetotal 123.456000000000E789 123.456E789 -> -1 +cotx475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 +cotx476 comparetotal 123.4560000000E789 123.456E789 -> -1 +cotx477 comparetotal 123.456000000E-89 123.456E-89 -> -1 +cotx478 comparetotal 123.45600000E789 123.456E789 -> -1 +cotx479 comparetotal 123.4560000E-89 123.456E-89 -> -1 +cotx480 comparetotal 123.456000E789 123.456E789 -> -1 +cotx481 comparetotal 123.45600E-89 123.456E-89 -> -1 +cotx482 comparetotal 123.4560E789 123.456E789 -> -1 +cotx483 comparetotal 123.456E-89 123.456E-89 -> 0 +cotx484 comparetotal 123.456E-89 123.4560000000000000E-89 -> 1 +cotx485 comparetotal 123.456E789 123.456000000000000E789 -> 1 +cotx486 comparetotal 123.456E-89 123.45600000000000E-89 -> 1 +cotx487 comparetotal 123.456E789 123.4560000000000E789 -> 1 +cotx488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 +cotx489 comparetotal 123.456E789 123.45600000000E789 -> 1 +cotx490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 +cotx491 comparetotal 123.456E789 123.456000000E789 -> 1 +cotx492 comparetotal 123.456E-89 123.45600000E-89 -> 1 +cotx493 comparetotal 123.456E789 123.4560000E789 -> 1 +cotx494 comparetotal 123.456E-89 123.456000E-89 -> 1 +cotx495 comparetotal 123.456E789 123.45600E789 -> 1 +cotx496 comparetotal 123.456E-89 123.4560E-89 -> 1 +cotx497 comparetotal 123.456E789 123.456E789 -> 0 + +-- wide-ranging, around precision; signs equal +precision: 9 +cotx500 comparetotal 1 1E-15 -> 1 +cotx501 comparetotal 1 1E-14 -> 1 +cotx502 comparetotal 1 1E-13 -> 1 +cotx503 comparetotal 1 1E-12 -> 1 +cotx504 comparetotal 1 1E-11 -> 1 +cotx505 comparetotal 1 1E-10 -> 1 +cotx506 comparetotal 1 1E-9 -> 1 +cotx507 comparetotal 1 1E-8 -> 1 +cotx508 comparetotal 1 1E-7 -> 1 +cotx509 comparetotal 1 1E-6 -> 1 +cotx510 comparetotal 1 1E-5 -> 1 +cotx511 comparetotal 1 1E-4 -> 1 +cotx512 comparetotal 1 1E-3 -> 1 +cotx513 comparetotal 1 1E-2 -> 1 +cotx514 comparetotal 1 1E-1 -> 1 +cotx515 comparetotal 1 1E-0 -> 0 +cotx516 comparetotal 1 1E+1 -> -1 +cotx517 comparetotal 1 1E+2 -> -1 +cotx518 comparetotal 1 1E+3 -> -1 +cotx519 comparetotal 1 1E+4 -> -1 +cotx521 comparetotal 1 1E+5 -> -1 +cotx522 comparetotal 1 1E+6 -> -1 +cotx523 comparetotal 1 1E+7 -> -1 +cotx524 comparetotal 1 1E+8 -> -1 +cotx525 comparetotal 1 1E+9 -> -1 +cotx526 comparetotal 1 1E+10 -> -1 +cotx527 comparetotal 1 1E+11 -> -1 +cotx528 comparetotal 1 1E+12 -> -1 +cotx529 comparetotal 1 1E+13 -> -1 +cotx530 comparetotal 1 1E+14 -> -1 +cotx531 comparetotal 1 1E+15 -> -1 +-- LR swap +cotx540 comparetotal 1E-15 1 -> -1 +cotx541 comparetotal 1E-14 1 -> -1 +cotx542 comparetotal 1E-13 1 -> -1 +cotx543 comparetotal 1E-12 1 -> -1 +cotx544 comparetotal 1E-11 1 -> -1 +cotx545 comparetotal 1E-10 1 -> -1 +cotx546 comparetotal 1E-9 1 -> -1 +cotx547 comparetotal 1E-8 1 -> -1 +cotx548 comparetotal 1E-7 1 -> -1 +cotx549 comparetotal 1E-6 1 -> -1 +cotx550 comparetotal 1E-5 1 -> -1 +cotx551 comparetotal 1E-4 1 -> -1 +cotx552 comparetotal 1E-3 1 -> -1 +cotx553 comparetotal 1E-2 1 -> -1 +cotx554 comparetotal 1E-1 1 -> -1 +cotx555 comparetotal 1E-0 1 -> 0 +cotx556 comparetotal 1E+1 1 -> 1 +cotx557 comparetotal 1E+2 1 -> 1 +cotx558 comparetotal 1E+3 1 -> 1 +cotx559 comparetotal 1E+4 1 -> 1 +cotx561 comparetotal 1E+5 1 -> 1 +cotx562 comparetotal 1E+6 1 -> 1 +cotx563 comparetotal 1E+7 1 -> 1 +cotx564 comparetotal 1E+8 1 -> 1 +cotx565 comparetotal 1E+9 1 -> 1 +cotx566 comparetotal 1E+10 1 -> 1 +cotx567 comparetotal 1E+11 1 -> 1 +cotx568 comparetotal 1E+12 1 -> 1 +cotx569 comparetotal 1E+13 1 -> 1 +cotx570 comparetotal 1E+14 1 -> 1 +cotx571 comparetotal 1E+15 1 -> 1 +-- similar with an useful coefficient, one side only +cotx580 comparetotal 0.000000987654321 1E-15 -> 1 +cotx581 comparetotal 0.000000987654321 1E-14 -> 1 +cotx582 comparetotal 0.000000987654321 1E-13 -> 1 +cotx583 comparetotal 0.000000987654321 1E-12 -> 1 +cotx584 comparetotal 0.000000987654321 1E-11 -> 1 +cotx585 comparetotal 0.000000987654321 1E-10 -> 1 +cotx586 comparetotal 0.000000987654321 1E-9 -> 1 +cotx587 comparetotal 0.000000987654321 1E-8 -> 1 +cotx588 comparetotal 0.000000987654321 1E-7 -> 1 +cotx589 comparetotal 0.000000987654321 1E-6 -> -1 +cotx590 comparetotal 0.000000987654321 1E-5 -> -1 +cotx591 comparetotal 0.000000987654321 1E-4 -> -1 +cotx592 comparetotal 0.000000987654321 1E-3 -> -1 +cotx593 comparetotal 0.000000987654321 1E-2 -> -1 +cotx594 comparetotal 0.000000987654321 1E-1 -> -1 +cotx595 comparetotal 0.000000987654321 1E-0 -> -1 +cotx596 comparetotal 0.000000987654321 1E+1 -> -1 +cotx597 comparetotal 0.000000987654321 1E+2 -> -1 +cotx598 comparetotal 0.000000987654321 1E+3 -> -1 +cotx599 comparetotal 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +precision: 20 +cotx600 comparetotal 12 12.2345 -> -1 +cotx601 comparetotal 12.0 12.2345 -> -1 +cotx602 comparetotal 12.00 12.2345 -> -1 +cotx603 comparetotal 12.000 12.2345 -> -1 +cotx604 comparetotal 12.0000 12.2345 -> -1 +cotx605 comparetotal 12.00000 12.2345 -> -1 +cotx606 comparetotal 12.000000 12.2345 -> -1 +cotx607 comparetotal 12.0000000 12.2345 -> -1 +cotx608 comparetotal 12.00000000 12.2345 -> -1 +cotx609 comparetotal 12.000000000 12.2345 -> -1 +cotx610 comparetotal 12.1234 12 -> 1 +cotx611 comparetotal 12.1234 12.0 -> 1 +cotx612 comparetotal 12.1234 12.00 -> 1 +cotx613 comparetotal 12.1234 12.000 -> 1 +cotx614 comparetotal 12.1234 12.0000 -> 1 +cotx615 comparetotal 12.1234 12.00000 -> 1 +cotx616 comparetotal 12.1234 12.000000 -> 1 +cotx617 comparetotal 12.1234 12.0000000 -> 1 +cotx618 comparetotal 12.1234 12.00000000 -> 1 +cotx619 comparetotal 12.1234 12.000000000 -> 1 +cotx620 comparetotal -12 -12.2345 -> 1 +cotx621 comparetotal -12.0 -12.2345 -> 1 +cotx622 comparetotal -12.00 -12.2345 -> 1 +cotx623 comparetotal -12.000 -12.2345 -> 1 +cotx624 comparetotal -12.0000 -12.2345 -> 1 +cotx625 comparetotal -12.00000 -12.2345 -> 1 +cotx626 comparetotal -12.000000 -12.2345 -> 1 +cotx627 comparetotal -12.0000000 -12.2345 -> 1 +cotx628 comparetotal -12.00000000 -12.2345 -> 1 +cotx629 comparetotal -12.000000000 -12.2345 -> 1 +cotx630 comparetotal -12.1234 -12 -> -1 +cotx631 comparetotal -12.1234 -12.0 -> -1 +cotx632 comparetotal -12.1234 -12.00 -> -1 +cotx633 comparetotal -12.1234 -12.000 -> -1 +cotx634 comparetotal -12.1234 -12.0000 -> -1 +cotx635 comparetotal -12.1234 -12.00000 -> -1 +cotx636 comparetotal -12.1234 -12.000000 -> -1 +cotx637 comparetotal -12.1234 -12.0000000 -> -1 +cotx638 comparetotal -12.1234 -12.00000000 -> -1 +cotx639 comparetotal -12.1234 -12.000000000 -> -1 +precision: 9 + +-- extended zeros +cotx640 comparetotal 0 0 -> 0 +cotx641 comparetotal 0 -0 -> 1 +cotx642 comparetotal 0 -0.0 -> 1 +cotx643 comparetotal 0 0.0 -> 1 +cotx644 comparetotal -0 0 -> -1 +cotx645 comparetotal -0 -0 -> 0 +cotx646 comparetotal -0 -0.0 -> -1 +cotx647 comparetotal -0 0.0 -> -1 +cotx648 comparetotal 0.0 0 -> -1 +cotx649 comparetotal 0.0 -0 -> 1 +cotx650 comparetotal 0.0 -0.0 -> 1 +cotx651 comparetotal 0.0 0.0 -> 0 +cotx652 comparetotal -0.0 0 -> -1 +cotx653 comparetotal -0.0 -0 -> 1 +cotx654 comparetotal -0.0 -0.0 -> 0 +cotx655 comparetotal -0.0 0.0 -> -1 + +cotx656 comparetotal -0E1 0.0 -> -1 +cotx657 comparetotal -0E2 0.0 -> -1 +cotx658 comparetotal 0E1 0.0 -> 1 +cotx659 comparetotal 0E2 0.0 -> 1 +cotx660 comparetotal -0E1 0 -> -1 +cotx661 comparetotal -0E2 0 -> -1 +cotx662 comparetotal 0E1 0 -> 1 +cotx663 comparetotal 0E2 0 -> 1 +cotx664 comparetotal -0E1 -0E1 -> 0 +cotx665 comparetotal -0E2 -0E1 -> -1 +cotx666 comparetotal 0E1 -0E1 -> 1 +cotx667 comparetotal 0E2 -0E1 -> 1 +cotx668 comparetotal -0E1 -0E2 -> 1 +cotx669 comparetotal -0E2 -0E2 -> 0 +cotx670 comparetotal 0E1 -0E2 -> 1 +cotx671 comparetotal 0E2 -0E2 -> 1 +cotx672 comparetotal -0E1 0E1 -> -1 +cotx673 comparetotal -0E2 0E1 -> -1 +cotx674 comparetotal 0E1 0E1 -> 0 +cotx675 comparetotal 0E2 0E1 -> 1 +cotx676 comparetotal -0E1 0E2 -> -1 +cotx677 comparetotal -0E2 0E2 -> -1 +cotx678 comparetotal 0E1 0E2 -> -1 +cotx679 comparetotal 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +precision: 20 +cotx680 comparetotal 12 12 -> 0 +cotx681 comparetotal 12 12.0 -> 1 +cotx682 comparetotal 12 12.00 -> 1 +cotx683 comparetotal 12 12.000 -> 1 +cotx684 comparetotal 12 12.0000 -> 1 +cotx685 comparetotal 12 12.00000 -> 1 +cotx686 comparetotal 12 12.000000 -> 1 +cotx687 comparetotal 12 12.0000000 -> 1 +cotx688 comparetotal 12 12.00000000 -> 1 +cotx689 comparetotal 12 12.000000000 -> 1 +cotx690 comparetotal 12 12 -> 0 +cotx691 comparetotal 12.0 12 -> -1 +cotx692 comparetotal 12.00 12 -> -1 +cotx693 comparetotal 12.000 12 -> -1 +cotx694 comparetotal 12.0000 12 -> -1 +cotx695 comparetotal 12.00000 12 -> -1 +cotx696 comparetotal 12.000000 12 -> -1 +cotx697 comparetotal 12.0000000 12 -> -1 +cotx698 comparetotal 12.00000000 12 -> -1 +cotx699 comparetotal 12.000000000 12 -> -1 + +-- long operand checks +maxexponent: 999 +minexponent: -999 +precision: 9 +cotx701 comparetotal 12345678000 1 -> 1 +cotx702 comparetotal 1 12345678000 -> -1 +cotx703 comparetotal 1234567800 1 -> 1 +cotx704 comparetotal 1 1234567800 -> -1 +cotx705 comparetotal 1234567890 1 -> 1 +cotx706 comparetotal 1 1234567890 -> -1 +cotx707 comparetotal 1234567891 1 -> 1 +cotx708 comparetotal 1 1234567891 -> -1 +cotx709 comparetotal 12345678901 1 -> 1 +cotx710 comparetotal 1 12345678901 -> -1 +cotx711 comparetotal 1234567896 1 -> 1 +cotx712 comparetotal 1 1234567896 -> -1 +cotx713 comparetotal -1234567891 1 -> -1 +cotx714 comparetotal 1 -1234567891 -> 1 +cotx715 comparetotal -12345678901 1 -> -1 +cotx716 comparetotal 1 -12345678901 -> 1 +cotx717 comparetotal -1234567896 1 -> -1 +cotx718 comparetotal 1 -1234567896 -> 1 + +precision: 15 +-- same with plenty of precision +cotx721 comparetotal 12345678000 1 -> 1 +cotx722 comparetotal 1 12345678000 -> -1 +cotx723 comparetotal 1234567800 1 -> 1 +cotx724 comparetotal 1 1234567800 -> -1 +cotx725 comparetotal 1234567890 1 -> 1 +cotx726 comparetotal 1 1234567890 -> -1 +cotx727 comparetotal 1234567891 1 -> 1 +cotx728 comparetotal 1 1234567891 -> -1 +cotx729 comparetotal 12345678901 1 -> 1 +cotx730 comparetotal 1 12345678901 -> -1 +cotx731 comparetotal 1234567896 1 -> 1 +cotx732 comparetotal 1 1234567896 -> -1 + +-- residue cases +precision: 5 +cotx740 comparetotal 1 0.9999999 -> 1 +cotx741 comparetotal 1 0.999999 -> 1 +cotx742 comparetotal 1 0.99999 -> 1 +cotx743 comparetotal 1 1.0000 -> 1 +cotx744 comparetotal 1 1.00001 -> -1 +cotx745 comparetotal 1 1.000001 -> -1 +cotx746 comparetotal 1 1.0000001 -> -1 +cotx750 comparetotal 0.9999999 1 -> -1 +cotx751 comparetotal 0.999999 1 -> -1 +cotx752 comparetotal 0.99999 1 -> -1 +cotx753 comparetotal 1.0000 1 -> -1 +cotx754 comparetotal 1.00001 1 -> 1 +cotx755 comparetotal 1.000001 1 -> 1 +cotx756 comparetotal 1.0000001 1 -> 1 + +-- a selection of longies +cotx760 comparetotal -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> -1 +cotx761 comparetotal -36852134.84194296250843579428931 -36852134.84194296250843579428931 -> 0 +cotx762 comparetotal -36852134.94194296250843579428931 -36852134.84194296250843579428931 -> -1 +cotx763 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +-- precisions above or below the difference should have no effect +precision: 11 +cotx764 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 10 +cotx765 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 9 +cotx766 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 8 +cotx767 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 7 +cotx768 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 6 +cotx769 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 5 +cotx770 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 4 +cotx771 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 3 +cotx772 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 2 +cotx773 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 +precision: 1 +cotx774 comparetotal -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> 1 + +-- Specials +precision: 9 +cotx780 comparetotal Inf -Inf -> 1 +cotx781 comparetotal Inf -1000 -> 1 +cotx782 comparetotal Inf -1 -> 1 +cotx783 comparetotal Inf -0 -> 1 +cotx784 comparetotal Inf 0 -> 1 +cotx785 comparetotal Inf 1 -> 1 +cotx786 comparetotal Inf 1000 -> 1 +cotx787 comparetotal Inf Inf -> 0 +cotx788 comparetotal -1000 Inf -> -1 +cotx789 comparetotal -Inf Inf -> -1 +cotx790 comparetotal -1 Inf -> -1 +cotx791 comparetotal -0 Inf -> -1 +cotx792 comparetotal 0 Inf -> -1 +cotx793 comparetotal 1 Inf -> -1 +cotx794 comparetotal 1000 Inf -> -1 +cotx795 comparetotal Inf Inf -> 0 + +cotx800 comparetotal -Inf -Inf -> 0 +cotx801 comparetotal -Inf -1000 -> -1 +cotx802 comparetotal -Inf -1 -> -1 +cotx803 comparetotal -Inf -0 -> -1 +cotx804 comparetotal -Inf 0 -> -1 +cotx805 comparetotal -Inf 1 -> -1 +cotx806 comparetotal -Inf 1000 -> -1 +cotx807 comparetotal -Inf Inf -> -1 +cotx808 comparetotal -Inf -Inf -> 0 +cotx809 comparetotal -1000 -Inf -> 1 +cotx810 comparetotal -1 -Inf -> 1 +cotx811 comparetotal -0 -Inf -> 1 +cotx812 comparetotal 0 -Inf -> 1 +cotx813 comparetotal 1 -Inf -> 1 +cotx814 comparetotal 1000 -Inf -> 1 +cotx815 comparetotal Inf -Inf -> 1 + +cotx821 comparetotal NaN -Inf -> 1 +cotx822 comparetotal NaN -1000 -> 1 +cotx823 comparetotal NaN -1 -> 1 +cotx824 comparetotal NaN -0 -> 1 +cotx825 comparetotal NaN 0 -> 1 +cotx826 comparetotal NaN 1 -> 1 +cotx827 comparetotal NaN 1000 -> 1 +cotx828 comparetotal NaN Inf -> 1 +cotx829 comparetotal NaN NaN -> 0 +cotx830 comparetotal -Inf NaN -> -1 +cotx831 comparetotal -1000 NaN -> -1 +cotx832 comparetotal -1 NaN -> -1 +cotx833 comparetotal -0 NaN -> -1 +cotx834 comparetotal 0 NaN -> -1 +cotx835 comparetotal 1 NaN -> -1 +cotx836 comparetotal 1000 NaN -> -1 +cotx837 comparetotal Inf NaN -> -1 +cotx838 comparetotal -NaN -NaN -> 0 +cotx839 comparetotal +NaN -NaN -> 1 +cotx840 comparetotal -NaN +NaN -> -1 + +cotx841 comparetotal sNaN -sNaN -> 1 +cotx842 comparetotal sNaN -NaN -> 1 +cotx843 comparetotal sNaN -Inf -> 1 +cotx844 comparetotal sNaN -1000 -> 1 +cotx845 comparetotal sNaN -1 -> 1 +cotx846 comparetotal sNaN -0 -> 1 +cotx847 comparetotal sNaN 0 -> 1 +cotx848 comparetotal sNaN 1 -> 1 +cotx849 comparetotal sNaN 1000 -> 1 +cotx850 comparetotal sNaN NaN -> -1 +cotx851 comparetotal sNaN sNaN -> 0 + +cotx852 comparetotal -sNaN sNaN -> -1 +cotx853 comparetotal -NaN sNaN -> -1 +cotx854 comparetotal -Inf sNaN -> -1 +cotx855 comparetotal -1000 sNaN -> -1 +cotx856 comparetotal -1 sNaN -> -1 +cotx857 comparetotal -0 sNaN -> -1 +cotx858 comparetotal 0 sNaN -> -1 +cotx859 comparetotal 1 sNaN -> -1 +cotx860 comparetotal 1000 sNaN -> -1 +cotx861 comparetotal Inf sNaN -> -1 +cotx862 comparetotal NaN sNaN -> 1 +cotx863 comparetotal sNaN sNaN -> 0 + +cotx871 comparetotal -sNaN -sNaN -> 0 +cotx872 comparetotal -sNaN -NaN -> 1 +cotx873 comparetotal -sNaN -Inf -> -1 +cotx874 comparetotal -sNaN -1000 -> -1 +cotx875 comparetotal -sNaN -1 -> -1 +cotx876 comparetotal -sNaN -0 -> -1 +cotx877 comparetotal -sNaN 0 -> -1 +cotx878 comparetotal -sNaN 1 -> -1 +cotx879 comparetotal -sNaN 1000 -> -1 +cotx880 comparetotal -sNaN NaN -> -1 +cotx881 comparetotal -sNaN sNaN -> -1 + +cotx882 comparetotal -sNaN -sNaN -> 0 +cotx883 comparetotal -NaN -sNaN -> -1 +cotx884 comparetotal -Inf -sNaN -> 1 +cotx885 comparetotal -1000 -sNaN -> 1 +cotx886 comparetotal -1 -sNaN -> 1 +cotx887 comparetotal -0 -sNaN -> 1 +cotx888 comparetotal 0 -sNaN -> 1 +cotx889 comparetotal 1 -sNaN -> 1 +cotx890 comparetotal 1000 -sNaN -> 1 +cotx891 comparetotal Inf -sNaN -> 1 +cotx892 comparetotal NaN -sNaN -> 1 +cotx893 comparetotal sNaN -sNaN -> 1 + +-- NaNs with payload +cotx960 comparetotal NaN9 -Inf -> 1 +cotx961 comparetotal NaN8 999 -> 1 +cotx962 comparetotal NaN77 Inf -> 1 +cotx963 comparetotal -NaN67 NaN5 -> -1 +cotx964 comparetotal -Inf -NaN4 -> 1 +cotx965 comparetotal -999 -NaN33 -> 1 +cotx966 comparetotal Inf NaN2 -> -1 + +cotx970 comparetotal -NaN41 -NaN42 -> 1 +cotx971 comparetotal +NaN41 -NaN42 -> 1 +cotx972 comparetotal -NaN41 +NaN42 -> -1 +cotx973 comparetotal +NaN41 +NaN42 -> -1 +cotx974 comparetotal -NaN42 -NaN01 -> -1 +cotx975 comparetotal +NaN42 -NaN01 -> 1 +cotx976 comparetotal -NaN42 +NaN01 -> -1 +cotx977 comparetotal +NaN42 +NaN01 -> 1 + +cotx980 comparetotal -sNaN771 -sNaN772 -> 1 +cotx981 comparetotal +sNaN771 -sNaN772 -> 1 +cotx982 comparetotal -sNaN771 +sNaN772 -> -1 +cotx983 comparetotal +sNaN771 +sNaN772 -> -1 +cotx984 comparetotal -sNaN772 -sNaN771 -> -1 +cotx985 comparetotal +sNaN772 -sNaN771 -> 1 +cotx986 comparetotal -sNaN772 +sNaN771 -> -1 +cotx987 comparetotal +sNaN772 +sNaN771 -> 1 + +cotx991 comparetotal -sNaN99 -Inf -> -1 +cotx992 comparetotal sNaN98 -11 -> 1 +cotx993 comparetotal sNaN97 NaN -> -1 +cotx994 comparetotal sNaN16 sNaN94 -> -1 +cotx995 comparetotal NaN85 sNaN83 -> 1 +cotx996 comparetotal -Inf sNaN92 -> -1 +cotx997 comparetotal 088 sNaN81 -> -1 +cotx998 comparetotal Inf sNaN90 -> -1 +cotx999 comparetotal NaN -sNaN89 -> 1 + +-- overflow and underflow tests .. subnormal results now allowed +maxExponent: 999999999 +minexponent: -999999999 +cotx1080 comparetotal +1.23456789012345E-0 9E+999999999 -> -1 +cotx1081 comparetotal 9E+999999999 +1.23456789012345E-0 -> 1 +cotx1082 comparetotal +0.100 9E-999999999 -> 1 +cotx1083 comparetotal 9E-999999999 +0.100 -> -1 +cotx1085 comparetotal -1.23456789012345E-0 9E+999999999 -> -1 +cotx1086 comparetotal 9E+999999999 -1.23456789012345E-0 -> 1 +cotx1087 comparetotal -0.100 9E-999999999 -> -1 +cotx1088 comparetotal 9E-999999999 -0.100 -> 1 + +cotx1089 comparetotal 1e-599999999 1e-400000001 -> -1 +cotx1090 comparetotal 1e-599999999 1e-400000000 -> -1 +cotx1091 comparetotal 1e-600000000 1e-400000000 -> -1 +cotx1092 comparetotal 9e-999999998 0.01 -> -1 +cotx1093 comparetotal 9e-999999998 0.1 -> -1 +cotx1094 comparetotal 0.01 9e-999999998 -> 1 +cotx1095 comparetotal 1e599999999 1e400000001 -> 1 +cotx1096 comparetotal 1e599999999 1e400000000 -> 1 +cotx1097 comparetotal 1e600000000 1e400000000 -> 1 +cotx1098 comparetotal 9e999999998 100 -> 1 +cotx1099 comparetotal 9e999999998 10 -> 1 +cotx1100 comparetotal 100 9e999999998 -> -1 +-- signs +cotx1101 comparetotal 1e+777777777 1e+411111111 -> 1 +cotx1102 comparetotal 1e+777777777 -1e+411111111 -> 1 +cotx1103 comparetotal -1e+777777777 1e+411111111 -> -1 +cotx1104 comparetotal -1e+777777777 -1e+411111111 -> -1 +cotx1105 comparetotal 1e-777777777 1e-411111111 -> -1 +cotx1106 comparetotal 1e-777777777 -1e-411111111 -> 1 +cotx1107 comparetotal -1e-777777777 1e-411111111 -> -1 +cotx1108 comparetotal -1e-777777777 -1e-411111111 -> 1 + +-- spread zeros +cotx1110 comparetotal 0E-383 0 -> -1 +cotx1111 comparetotal 0E-383 -0 -> 1 +cotx1112 comparetotal -0E-383 0 -> -1 +cotx1113 comparetotal -0E-383 -0 -> 1 +cotx1114 comparetotal 0E-383 0E+384 -> -1 +cotx1115 comparetotal 0E-383 -0E+384 -> 1 +cotx1116 comparetotal -0E-383 0E+384 -> -1 +cotx1117 comparetotal -0E-383 -0E+384 -> 1 +cotx1118 comparetotal 0 0E+384 -> -1 +cotx1119 comparetotal 0 -0E+384 -> 1 +cotx1120 comparetotal -0 0E+384 -> -1 +cotx1121 comparetotal -0 -0E+384 -> 1 + +cotx1130 comparetotal 0E+384 0 -> 1 +cotx1131 comparetotal 0E+384 -0 -> 1 +cotx1132 comparetotal -0E+384 0 -> -1 +cotx1133 comparetotal -0E+384 -0 -> -1 +cotx1134 comparetotal 0E+384 0E-383 -> 1 +cotx1135 comparetotal 0E+384 -0E-383 -> 1 +cotx1136 comparetotal -0E+384 0E-383 -> -1 +cotx1137 comparetotal -0E+384 -0E-383 -> -1 +cotx1138 comparetotal 0 0E-383 -> 1 +cotx1139 comparetotal 0 -0E-383 -> 1 +cotx1140 comparetotal -0 0E-383 -> -1 +cotx1141 comparetotal -0 -0E-383 -> -1 + +-- Null tests +cotx9990 comparetotal 10 # -> NaN Invalid_operation +cotx9991 comparetotal # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/comparetotmag.decTest b/Lib/test/decimaltestdata/comparetotmag.decTest index cedfdf8843a..e87c9f2dbf2 100644 --- a/Lib/test/decimaltestdata/comparetotmag.decTest +++ b/Lib/test/decimaltestdata/comparetotmag.decTest @@ -1,790 +1,790 @@ ------------------------------------------------------------------------- --- comparetotmag.decTest -- decimal comparison, abs. total ordering -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that it cannot be assumed that add/subtract tests cover paths --- for this operation adequately, here, because the code might be --- quite different (comparison cannot overflow or underflow, so --- actual subtractions are not necessary). Similarly, comparetotal --- will have some radically different paths than compare. - -extended: 1 -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - --- sanity checks -ctmx001 comparetotmag -2 -2 -> 0 -ctmx002 comparetotmag -2 -1 -> 1 -ctmx003 comparetotmag -2 0 -> 1 -ctmx004 comparetotmag -2 1 -> 1 -ctmx005 comparetotmag -2 2 -> 0 -ctmx006 comparetotmag -1 -2 -> -1 -ctmx007 comparetotmag -1 -1 -> 0 -ctmx008 comparetotmag -1 0 -> 1 -ctmx009 comparetotmag -1 1 -> 0 -ctmx010 comparetotmag -1 2 -> -1 -ctmx011 comparetotmag 0 -2 -> -1 -ctmx012 comparetotmag 0 -1 -> -1 -ctmx013 comparetotmag 0 0 -> 0 -ctmx014 comparetotmag 0 1 -> -1 -ctmx015 comparetotmag 0 2 -> -1 -ctmx016 comparetotmag 1 -2 -> -1 -ctmx017 comparetotmag 1 -1 -> 0 -ctmx018 comparetotmag 1 0 -> 1 -ctmx019 comparetotmag 1 1 -> 0 -ctmx020 comparetotmag 1 2 -> -1 -ctmx021 comparetotmag 2 -2 -> 0 -ctmx022 comparetotmag 2 -1 -> 1 -ctmx023 comparetotmag 2 0 -> 1 -ctmx025 comparetotmag 2 1 -> 1 -ctmx026 comparetotmag 2 2 -> 0 - -ctmx031 comparetotmag -20 -20 -> 0 -ctmx032 comparetotmag -20 -10 -> 1 -ctmx033 comparetotmag -20 00 -> 1 -ctmx034 comparetotmag -20 10 -> 1 -ctmx035 comparetotmag -20 20 -> 0 -ctmx036 comparetotmag -10 -20 -> -1 -ctmx037 comparetotmag -10 -10 -> 0 -ctmx038 comparetotmag -10 00 -> 1 -ctmx039 comparetotmag -10 10 -> 0 -ctmx040 comparetotmag -10 20 -> -1 -ctmx041 comparetotmag 00 -20 -> -1 -ctmx042 comparetotmag 00 -10 -> -1 -ctmx043 comparetotmag 00 00 -> 0 -ctmx044 comparetotmag 00 10 -> -1 -ctmx045 comparetotmag 00 20 -> -1 -ctmx046 comparetotmag 10 -20 -> -1 -ctmx047 comparetotmag 10 -10 -> 0 -ctmx048 comparetotmag 10 00 -> 1 -ctmx049 comparetotmag 10 10 -> 0 -ctmx050 comparetotmag 10 20 -> -1 -ctmx051 comparetotmag 20 -20 -> 0 -ctmx052 comparetotmag 20 -10 -> 1 -ctmx053 comparetotmag 20 00 -> 1 -ctmx055 comparetotmag 20 10 -> 1 -ctmx056 comparetotmag 20 20 -> 0 - -ctmx061 comparetotmag -2.0 -2.0 -> 0 -ctmx062 comparetotmag -2.0 -1.0 -> 1 -ctmx063 comparetotmag -2.0 0.0 -> 1 -ctmx064 comparetotmag -2.0 1.0 -> 1 -ctmx065 comparetotmag -2.0 2.0 -> 0 -ctmx066 comparetotmag -1.0 -2.0 -> -1 -ctmx067 comparetotmag -1.0 -1.0 -> 0 -ctmx068 comparetotmag -1.0 0.0 -> 1 -ctmx069 comparetotmag -1.0 1.0 -> 0 -ctmx070 comparetotmag -1.0 2.0 -> -1 -ctmx071 comparetotmag 0.0 -2.0 -> -1 -ctmx072 comparetotmag 0.0 -1.0 -> -1 -ctmx073 comparetotmag 0.0 0.0 -> 0 -ctmx074 comparetotmag 0.0 1.0 -> -1 -ctmx075 comparetotmag 0.0 2.0 -> -1 -ctmx076 comparetotmag 1.0 -2.0 -> -1 -ctmx077 comparetotmag 1.0 -1.0 -> 0 -ctmx078 comparetotmag 1.0 0.0 -> 1 -ctmx079 comparetotmag 1.0 1.0 -> 0 -ctmx080 comparetotmag 1.0 2.0 -> -1 -ctmx081 comparetotmag 2.0 -2.0 -> 0 -ctmx082 comparetotmag 2.0 -1.0 -> 1 -ctmx083 comparetotmag 2.0 0.0 -> 1 -ctmx085 comparetotmag 2.0 1.0 -> 1 -ctmx086 comparetotmag 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -maxexponent: 999999999 -minexponent: -999999999 -ctmx090 comparetotmag 9.99999999E+999999999 9.99999999E+999999999 -> 0 -ctmx091 comparetotmag -9.99999999E+999999999 9.99999999E+999999999 -> 0 -ctmx092 comparetotmag 9.99999999E+999999999 -9.99999999E+999999999 -> 0 -ctmx093 comparetotmag -9.99999999E+999999999 -9.99999999E+999999999 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -ctmx100 comparetotmag 7.0 7.0 -> 0 -ctmx101 comparetotmag 7.0 7 -> -1 -ctmx102 comparetotmag 7 7.0 -> 1 -ctmx103 comparetotmag 7E+0 7.0 -> 1 -ctmx104 comparetotmag 70E-1 7.0 -> 0 -ctmx105 comparetotmag 0.7E+1 7 -> 0 -ctmx106 comparetotmag 70E-1 7 -> -1 -ctmx107 comparetotmag 7.0 7E+0 -> -1 -ctmx108 comparetotmag 7.0 70E-1 -> 0 -ctmx109 comparetotmag 7 0.7E+1 -> 0 -ctmx110 comparetotmag 7 70E-1 -> 1 - -ctmx120 comparetotmag 8.0 7.0 -> 1 -ctmx121 comparetotmag 8.0 7 -> 1 -ctmx122 comparetotmag 8 7.0 -> 1 -ctmx123 comparetotmag 8E+0 7.0 -> 1 -ctmx124 comparetotmag 80E-1 7.0 -> 1 -ctmx125 comparetotmag 0.8E+1 7 -> 1 -ctmx126 comparetotmag 80E-1 7 -> 1 -ctmx127 comparetotmag 8.0 7E+0 -> 1 -ctmx128 comparetotmag 8.0 70E-1 -> 1 -ctmx129 comparetotmag 8 0.7E+1 -> 1 -ctmx130 comparetotmag 8 70E-1 -> 1 - -ctmx140 comparetotmag 8.0 9.0 -> -1 -ctmx141 comparetotmag 8.0 9 -> -1 -ctmx142 comparetotmag 8 9.0 -> -1 -ctmx143 comparetotmag 8E+0 9.0 -> -1 -ctmx144 comparetotmag 80E-1 9.0 -> -1 -ctmx145 comparetotmag 0.8E+1 9 -> -1 -ctmx146 comparetotmag 80E-1 9 -> -1 -ctmx147 comparetotmag 8.0 9E+0 -> -1 -ctmx148 comparetotmag 8.0 90E-1 -> -1 -ctmx149 comparetotmag 8 0.9E+1 -> -1 -ctmx150 comparetotmag 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ctmx200 comparetotmag -7.0 7.0 -> 0 -ctmx201 comparetotmag -7.0 7 -> -1 -ctmx202 comparetotmag -7 7.0 -> 1 -ctmx203 comparetotmag -7E+0 7.0 -> 1 -ctmx204 comparetotmag -70E-1 7.0 -> 0 -ctmx205 comparetotmag -0.7E+1 7 -> 0 -ctmx206 comparetotmag -70E-1 7 -> -1 -ctmx207 comparetotmag -7.0 7E+0 -> -1 -ctmx208 comparetotmag -7.0 70E-1 -> 0 -ctmx209 comparetotmag -7 0.7E+1 -> 0 -ctmx210 comparetotmag -7 70E-1 -> 1 - -ctmx220 comparetotmag -8.0 7.0 -> 1 -ctmx221 comparetotmag -8.0 7 -> 1 -ctmx222 comparetotmag -8 7.0 -> 1 -ctmx223 comparetotmag -8E+0 7.0 -> 1 -ctmx224 comparetotmag -80E-1 7.0 -> 1 -ctmx225 comparetotmag -0.8E+1 7 -> 1 -ctmx226 comparetotmag -80E-1 7 -> 1 -ctmx227 comparetotmag -8.0 7E+0 -> 1 -ctmx228 comparetotmag -8.0 70E-1 -> 1 -ctmx229 comparetotmag -8 0.7E+1 -> 1 -ctmx230 comparetotmag -8 70E-1 -> 1 - -ctmx240 comparetotmag -8.0 9.0 -> -1 -ctmx241 comparetotmag -8.0 9 -> -1 -ctmx242 comparetotmag -8 9.0 -> -1 -ctmx243 comparetotmag -8E+0 9.0 -> -1 -ctmx244 comparetotmag -80E-1 9.0 -> -1 -ctmx245 comparetotmag -0.8E+1 9 -> -1 -ctmx246 comparetotmag -80E-1 9 -> -1 -ctmx247 comparetotmag -8.0 9E+0 -> -1 -ctmx248 comparetotmag -8.0 90E-1 -> -1 -ctmx249 comparetotmag -8 0.9E+1 -> -1 -ctmx250 comparetotmag -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ctmx300 comparetotmag 7.0 -7.0 -> 0 -ctmx301 comparetotmag 7.0 -7 -> -1 -ctmx302 comparetotmag 7 -7.0 -> 1 -ctmx303 comparetotmag 7E+0 -7.0 -> 1 -ctmx304 comparetotmag 70E-1 -7.0 -> 0 -ctmx305 comparetotmag .7E+1 -7 -> 0 -ctmx306 comparetotmag 70E-1 -7 -> -1 -ctmx307 comparetotmag 7.0 -7E+0 -> -1 -ctmx308 comparetotmag 7.0 -70E-1 -> 0 -ctmx309 comparetotmag 7 -.7E+1 -> 0 -ctmx310 comparetotmag 7 -70E-1 -> 1 - -ctmx320 comparetotmag 8.0 -7.0 -> 1 -ctmx321 comparetotmag 8.0 -7 -> 1 -ctmx322 comparetotmag 8 -7.0 -> 1 -ctmx323 comparetotmag 8E+0 -7.0 -> 1 -ctmx324 comparetotmag 80E-1 -7.0 -> 1 -ctmx325 comparetotmag .8E+1 -7 -> 1 -ctmx326 comparetotmag 80E-1 -7 -> 1 -ctmx327 comparetotmag 8.0 -7E+0 -> 1 -ctmx328 comparetotmag 8.0 -70E-1 -> 1 -ctmx329 comparetotmag 8 -.7E+1 -> 1 -ctmx330 comparetotmag 8 -70E-1 -> 1 - -ctmx340 comparetotmag 8.0 -9.0 -> -1 -ctmx341 comparetotmag 8.0 -9 -> -1 -ctmx342 comparetotmag 8 -9.0 -> -1 -ctmx343 comparetotmag 8E+0 -9.0 -> -1 -ctmx344 comparetotmag 80E-1 -9.0 -> -1 -ctmx345 comparetotmag .8E+1 -9 -> -1 -ctmx346 comparetotmag 80E-1 -9 -> -1 -ctmx347 comparetotmag 8.0 -9E+0 -> -1 -ctmx348 comparetotmag 8.0 -90E-1 -> -1 -ctmx349 comparetotmag 8 -.9E+1 -> -1 -ctmx350 comparetotmag 8 -90E-1 -> -1 - --- and again, with sign changes -- .. -ctmx400 comparetotmag -7.0 -7.0 -> 0 -ctmx401 comparetotmag -7.0 -7 -> -1 -ctmx402 comparetotmag -7 -7.0 -> 1 -ctmx403 comparetotmag -7E+0 -7.0 -> 1 -ctmx404 comparetotmag -70E-1 -7.0 -> 0 -ctmx405 comparetotmag -.7E+1 -7 -> 0 -ctmx406 comparetotmag -70E-1 -7 -> -1 -ctmx407 comparetotmag -7.0 -7E+0 -> -1 -ctmx408 comparetotmag -7.0 -70E-1 -> 0 -ctmx409 comparetotmag -7 -.7E+1 -> 0 -ctmx410 comparetotmag -7 -70E-1 -> 1 - -ctmx420 comparetotmag -8.0 -7.0 -> 1 -ctmx421 comparetotmag -8.0 -7 -> 1 -ctmx422 comparetotmag -8 -7.0 -> 1 -ctmx423 comparetotmag -8E+0 -7.0 -> 1 -ctmx424 comparetotmag -80E-1 -7.0 -> 1 -ctmx425 comparetotmag -.8E+1 -7 -> 1 -ctmx426 comparetotmag -80E-1 -7 -> 1 -ctmx427 comparetotmag -8.0 -7E+0 -> 1 -ctmx428 comparetotmag -8.0 -70E-1 -> 1 -ctmx429 comparetotmag -8 -.7E+1 -> 1 -ctmx430 comparetotmag -8 -70E-1 -> 1 - -ctmx440 comparetotmag -8.0 -9.0 -> -1 -ctmx441 comparetotmag -8.0 -9 -> -1 -ctmx442 comparetotmag -8 -9.0 -> -1 -ctmx443 comparetotmag -8E+0 -9.0 -> -1 -ctmx444 comparetotmag -80E-1 -9.0 -> -1 -ctmx445 comparetotmag -.8E+1 -9 -> -1 -ctmx446 comparetotmag -80E-1 -9 -> -1 -ctmx447 comparetotmag -8.0 -9E+0 -> -1 -ctmx448 comparetotmag -8.0 -90E-1 -> -1 -ctmx449 comparetotmag -8 -.9E+1 -> -1 -ctmx450 comparetotmag -8 -90E-1 -> -1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -precision: 40 -ctmx470 comparetotmag 123.4560000000000000E789 123.456E789 -> -1 -ctmx471 comparetotmag 123.456000000000000E-89 123.456E-89 -> -1 -ctmx472 comparetotmag 123.45600000000000E789 123.456E789 -> -1 -ctmx473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 -ctmx474 comparetotmag 123.456000000000E789 123.456E789 -> -1 -ctmx475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 -ctmx476 comparetotmag 123.4560000000E789 123.456E789 -> -1 -ctmx477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 -ctmx478 comparetotmag 123.45600000E789 123.456E789 -> -1 -ctmx479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 -ctmx480 comparetotmag 123.456000E789 123.456E789 -> -1 -ctmx481 comparetotmag 123.45600E-89 123.456E-89 -> -1 -ctmx482 comparetotmag 123.4560E789 123.456E789 -> -1 -ctmx483 comparetotmag 123.456E-89 123.456E-89 -> 0 -ctmx484 comparetotmag 123.456E-89 123.4560000000000000E-89 -> 1 -ctmx485 comparetotmag 123.456E789 123.456000000000000E789 -> 1 -ctmx486 comparetotmag 123.456E-89 123.45600000000000E-89 -> 1 -ctmx487 comparetotmag 123.456E789 123.4560000000000E789 -> 1 -ctmx488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 -ctmx489 comparetotmag 123.456E789 123.45600000000E789 -> 1 -ctmx490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 -ctmx491 comparetotmag 123.456E789 123.456000000E789 -> 1 -ctmx492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 -ctmx493 comparetotmag 123.456E789 123.4560000E789 -> 1 -ctmx494 comparetotmag 123.456E-89 123.456000E-89 -> 1 -ctmx495 comparetotmag 123.456E789 123.45600E789 -> 1 -ctmx496 comparetotmag 123.456E-89 123.4560E-89 -> 1 -ctmx497 comparetotmag 123.456E789 123.456E789 -> 0 - --- wide-ranging, around precision; signs equal -precision: 9 -ctmx500 comparetotmag 1 1E-15 -> 1 -ctmx501 comparetotmag 1 1E-14 -> 1 -ctmx502 comparetotmag 1 1E-13 -> 1 -ctmx503 comparetotmag 1 1E-12 -> 1 -ctmx504 comparetotmag 1 1E-11 -> 1 -ctmx505 comparetotmag 1 1E-10 -> 1 -ctmx506 comparetotmag 1 1E-9 -> 1 -ctmx507 comparetotmag 1 1E-8 -> 1 -ctmx508 comparetotmag 1 1E-7 -> 1 -ctmx509 comparetotmag 1 1E-6 -> 1 -ctmx510 comparetotmag 1 1E-5 -> 1 -ctmx511 comparetotmag 1 1E-4 -> 1 -ctmx512 comparetotmag 1 1E-3 -> 1 -ctmx513 comparetotmag 1 1E-2 -> 1 -ctmx514 comparetotmag 1 1E-1 -> 1 -ctmx515 comparetotmag 1 1E-0 -> 0 -ctmx516 comparetotmag 1 1E+1 -> -1 -ctmx517 comparetotmag 1 1E+2 -> -1 -ctmx518 comparetotmag 1 1E+3 -> -1 -ctmx519 comparetotmag 1 1E+4 -> -1 -ctmx521 comparetotmag 1 1E+5 -> -1 -ctmx522 comparetotmag 1 1E+6 -> -1 -ctmx523 comparetotmag 1 1E+7 -> -1 -ctmx524 comparetotmag 1 1E+8 -> -1 -ctmx525 comparetotmag 1 1E+9 -> -1 -ctmx526 comparetotmag 1 1E+10 -> -1 -ctmx527 comparetotmag 1 1E+11 -> -1 -ctmx528 comparetotmag 1 1E+12 -> -1 -ctmx529 comparetotmag 1 1E+13 -> -1 -ctmx530 comparetotmag 1 1E+14 -> -1 -ctmx531 comparetotmag 1 1E+15 -> -1 --- LR swap -ctmx540 comparetotmag 1E-15 1 -> -1 -ctmx541 comparetotmag 1E-14 1 -> -1 -ctmx542 comparetotmag 1E-13 1 -> -1 -ctmx543 comparetotmag 1E-12 1 -> -1 -ctmx544 comparetotmag 1E-11 1 -> -1 -ctmx545 comparetotmag 1E-10 1 -> -1 -ctmx546 comparetotmag 1E-9 1 -> -1 -ctmx547 comparetotmag 1E-8 1 -> -1 -ctmx548 comparetotmag 1E-7 1 -> -1 -ctmx549 comparetotmag 1E-6 1 -> -1 -ctmx550 comparetotmag 1E-5 1 -> -1 -ctmx551 comparetotmag 1E-4 1 -> -1 -ctmx552 comparetotmag 1E-3 1 -> -1 -ctmx553 comparetotmag 1E-2 1 -> -1 -ctmx554 comparetotmag 1E-1 1 -> -1 -ctmx555 comparetotmag 1E-0 1 -> 0 -ctmx556 comparetotmag 1E+1 1 -> 1 -ctmx557 comparetotmag 1E+2 1 -> 1 -ctmx558 comparetotmag 1E+3 1 -> 1 -ctmx559 comparetotmag 1E+4 1 -> 1 -ctmx561 comparetotmag 1E+5 1 -> 1 -ctmx562 comparetotmag 1E+6 1 -> 1 -ctmx563 comparetotmag 1E+7 1 -> 1 -ctmx564 comparetotmag 1E+8 1 -> 1 -ctmx565 comparetotmag 1E+9 1 -> 1 -ctmx566 comparetotmag 1E+10 1 -> 1 -ctmx567 comparetotmag 1E+11 1 -> 1 -ctmx568 comparetotmag 1E+12 1 -> 1 -ctmx569 comparetotmag 1E+13 1 -> 1 -ctmx570 comparetotmag 1E+14 1 -> 1 -ctmx571 comparetotmag 1E+15 1 -> 1 --- similar with an useful coefficient, one side only -ctmx580 comparetotmag 0.000000987654321 1E-15 -> 1 -ctmx581 comparetotmag 0.000000987654321 1E-14 -> 1 -ctmx582 comparetotmag 0.000000987654321 1E-13 -> 1 -ctmx583 comparetotmag 0.000000987654321 1E-12 -> 1 -ctmx584 comparetotmag 0.000000987654321 1E-11 -> 1 -ctmx585 comparetotmag 0.000000987654321 1E-10 -> 1 -ctmx586 comparetotmag 0.000000987654321 1E-9 -> 1 -ctmx587 comparetotmag 0.000000987654321 1E-8 -> 1 -ctmx588 comparetotmag 0.000000987654321 1E-7 -> 1 -ctmx589 comparetotmag 0.000000987654321 1E-6 -> -1 -ctmx590 comparetotmag 0.000000987654321 1E-5 -> -1 -ctmx591 comparetotmag 0.000000987654321 1E-4 -> -1 -ctmx592 comparetotmag 0.000000987654321 1E-3 -> -1 -ctmx593 comparetotmag 0.000000987654321 1E-2 -> -1 -ctmx594 comparetotmag 0.000000987654321 1E-1 -> -1 -ctmx595 comparetotmag 0.000000987654321 1E-0 -> -1 -ctmx596 comparetotmag 0.000000987654321 1E+1 -> -1 -ctmx597 comparetotmag 0.000000987654321 1E+2 -> -1 -ctmx598 comparetotmag 0.000000987654321 1E+3 -> -1 -ctmx599 comparetotmag 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -precision: 20 -ctmx600 comparetotmag 12 12.2345 -> -1 -ctmx601 comparetotmag 12.0 12.2345 -> -1 -ctmx602 comparetotmag 12.00 12.2345 -> -1 -ctmx603 comparetotmag 12.000 12.2345 -> -1 -ctmx604 comparetotmag 12.0000 12.2345 -> -1 -ctmx605 comparetotmag 12.00000 12.2345 -> -1 -ctmx606 comparetotmag 12.000000 12.2345 -> -1 -ctmx607 comparetotmag 12.0000000 12.2345 -> -1 -ctmx608 comparetotmag 12.00000000 12.2345 -> -1 -ctmx609 comparetotmag 12.000000000 12.2345 -> -1 -ctmx610 comparetotmag 12.1234 12 -> 1 -ctmx611 comparetotmag 12.1234 12.0 -> 1 -ctmx612 comparetotmag 12.1234 12.00 -> 1 -ctmx613 comparetotmag 12.1234 12.000 -> 1 -ctmx614 comparetotmag 12.1234 12.0000 -> 1 -ctmx615 comparetotmag 12.1234 12.00000 -> 1 -ctmx616 comparetotmag 12.1234 12.000000 -> 1 -ctmx617 comparetotmag 12.1234 12.0000000 -> 1 -ctmx618 comparetotmag 12.1234 12.00000000 -> 1 -ctmx619 comparetotmag 12.1234 12.000000000 -> 1 -ctmx620 comparetotmag -12 -12.2345 -> -1 -ctmx621 comparetotmag -12.0 -12.2345 -> -1 -ctmx622 comparetotmag -12.00 -12.2345 -> -1 -ctmx623 comparetotmag -12.000 -12.2345 -> -1 -ctmx624 comparetotmag -12.0000 -12.2345 -> -1 -ctmx625 comparetotmag -12.00000 -12.2345 -> -1 -ctmx626 comparetotmag -12.000000 -12.2345 -> -1 -ctmx627 comparetotmag -12.0000000 -12.2345 -> -1 -ctmx628 comparetotmag -12.00000000 -12.2345 -> -1 -ctmx629 comparetotmag -12.000000000 -12.2345 -> -1 -ctmx630 comparetotmag -12.1234 -12 -> 1 -ctmx631 comparetotmag -12.1234 -12.0 -> 1 -ctmx632 comparetotmag -12.1234 -12.00 -> 1 -ctmx633 comparetotmag -12.1234 -12.000 -> 1 -ctmx634 comparetotmag -12.1234 -12.0000 -> 1 -ctmx635 comparetotmag -12.1234 -12.00000 -> 1 -ctmx636 comparetotmag -12.1234 -12.000000 -> 1 -ctmx637 comparetotmag -12.1234 -12.0000000 -> 1 -ctmx638 comparetotmag -12.1234 -12.00000000 -> 1 -ctmx639 comparetotmag -12.1234 -12.000000000 -> 1 -precision: 9 - --- extended zeros -ctmx640 comparetotmag 0 0 -> 0 -ctmx641 comparetotmag 0 -0 -> 0 -ctmx642 comparetotmag 0 -0.0 -> 1 -ctmx643 comparetotmag 0 0.0 -> 1 -ctmx644 comparetotmag -0 0 -> 0 -ctmx645 comparetotmag -0 -0 -> 0 -ctmx646 comparetotmag -0 -0.0 -> 1 -ctmx647 comparetotmag -0 0.0 -> 1 -ctmx648 comparetotmag 0.0 0 -> -1 -ctmx649 comparetotmag 0.0 -0 -> -1 -ctmx650 comparetotmag 0.0 -0.0 -> 0 -ctmx651 comparetotmag 0.0 0.0 -> 0 -ctmx652 comparetotmag -0.0 0 -> -1 -ctmx653 comparetotmag -0.0 -0 -> -1 -ctmx654 comparetotmag -0.0 -0.0 -> 0 -ctmx655 comparetotmag -0.0 0.0 -> 0 - -ctmx656 comparetotmag -0E1 0.0 -> 1 -ctmx657 comparetotmag -0E2 0.0 -> 1 -ctmx658 comparetotmag 0E1 0.0 -> 1 -ctmx659 comparetotmag 0E2 0.0 -> 1 -ctmx660 comparetotmag -0E1 0 -> 1 -ctmx661 comparetotmag -0E2 0 -> 1 -ctmx662 comparetotmag 0E1 0 -> 1 -ctmx663 comparetotmag 0E2 0 -> 1 -ctmx664 comparetotmag -0E1 -0E1 -> 0 -ctmx665 comparetotmag -0E2 -0E1 -> 1 -ctmx666 comparetotmag 0E1 -0E1 -> 0 -ctmx667 comparetotmag 0E2 -0E1 -> 1 -ctmx668 comparetotmag -0E1 -0E2 -> -1 -ctmx669 comparetotmag -0E2 -0E2 -> 0 -ctmx670 comparetotmag 0E1 -0E2 -> -1 -ctmx671 comparetotmag 0E2 -0E2 -> 0 -ctmx672 comparetotmag -0E1 0E1 -> 0 -ctmx673 comparetotmag -0E2 0E1 -> 1 -ctmx674 comparetotmag 0E1 0E1 -> 0 -ctmx675 comparetotmag 0E2 0E1 -> 1 -ctmx676 comparetotmag -0E1 0E2 -> -1 -ctmx677 comparetotmag -0E2 0E2 -> 0 -ctmx678 comparetotmag 0E1 0E2 -> -1 -ctmx679 comparetotmag 0E2 0E2 -> 0 - --- trailing zeros; unit-y -precision: 20 -ctmx680 comparetotmag 12 12 -> 0 -ctmx681 comparetotmag 12 12.0 -> 1 -ctmx682 comparetotmag 12 12.00 -> 1 -ctmx683 comparetotmag 12 12.000 -> 1 -ctmx684 comparetotmag 12 12.0000 -> 1 -ctmx685 comparetotmag 12 12.00000 -> 1 -ctmx686 comparetotmag 12 12.000000 -> 1 -ctmx687 comparetotmag 12 12.0000000 -> 1 -ctmx688 comparetotmag 12 12.00000000 -> 1 -ctmx689 comparetotmag 12 12.000000000 -> 1 -ctmx690 comparetotmag 12 12 -> 0 -ctmx691 comparetotmag 12.0 12 -> -1 -ctmx692 comparetotmag 12.00 12 -> -1 -ctmx693 comparetotmag 12.000 12 -> -1 -ctmx694 comparetotmag 12.0000 12 -> -1 -ctmx695 comparetotmag 12.00000 12 -> -1 -ctmx696 comparetotmag 12.000000 12 -> -1 -ctmx697 comparetotmag 12.0000000 12 -> -1 -ctmx698 comparetotmag 12.00000000 12 -> -1 -ctmx699 comparetotmag 12.000000000 12 -> -1 - --- long operand checks -maxexponent: 999 -minexponent: -999 -precision: 9 -ctmx701 comparetotmag 12345678000 1 -> 1 -ctmx702 comparetotmag 1 12345678000 -> -1 -ctmx703 comparetotmag 1234567800 1 -> 1 -ctmx704 comparetotmag 1 1234567800 -> -1 -ctmx705 comparetotmag 1234567890 1 -> 1 -ctmx706 comparetotmag 1 1234567890 -> -1 -ctmx707 comparetotmag 1234567891 1 -> 1 -ctmx708 comparetotmag 1 1234567891 -> -1 -ctmx709 comparetotmag 12345678901 1 -> 1 -ctmx710 comparetotmag 1 12345678901 -> -1 -ctmx711 comparetotmag 1234567896 1 -> 1 -ctmx712 comparetotmag 1 1234567896 -> -1 -ctmx713 comparetotmag -1234567891 1 -> 1 -ctmx714 comparetotmag 1 -1234567891 -> -1 -ctmx715 comparetotmag -12345678901 1 -> 1 -ctmx716 comparetotmag 1 -12345678901 -> -1 -ctmx717 comparetotmag -1234567896 1 -> 1 -ctmx718 comparetotmag 1 -1234567896 -> -1 - -precision: 15 --- same with plenty of precision -ctmx721 comparetotmag 12345678000 1 -> 1 -ctmx722 comparetotmag 1 12345678000 -> -1 -ctmx723 comparetotmag 1234567800 1 -> 1 -ctmx724 comparetotmag 1 1234567800 -> -1 -ctmx725 comparetotmag 1234567890 1 -> 1 -ctmx726 comparetotmag 1 1234567890 -> -1 -ctmx727 comparetotmag 1234567891 1 -> 1 -ctmx728 comparetotmag 1 1234567891 -> -1 -ctmx729 comparetotmag 12345678901 1 -> 1 -ctmx730 comparetotmag 1 12345678901 -> -1 -ctmx731 comparetotmag 1234567896 1 -> 1 -ctmx732 comparetotmag 1 1234567896 -> -1 - --- residue cases -precision: 5 -ctmx740 comparetotmag 1 0.9999999 -> 1 -ctmx741 comparetotmag 1 0.999999 -> 1 -ctmx742 comparetotmag 1 0.99999 -> 1 -ctmx743 comparetotmag 1 1.0000 -> 1 -ctmx744 comparetotmag 1 1.00001 -> -1 -ctmx745 comparetotmag 1 1.000001 -> -1 -ctmx746 comparetotmag 1 1.0000001 -> -1 -ctmx750 comparetotmag 0.9999999 1 -> -1 -ctmx751 comparetotmag 0.999999 1 -> -1 -ctmx752 comparetotmag 0.99999 1 -> -1 -ctmx753 comparetotmag 1.0000 1 -> -1 -ctmx754 comparetotmag 1.00001 1 -> 1 -ctmx755 comparetotmag 1.000001 1 -> 1 -ctmx756 comparetotmag 1.0000001 1 -> 1 - --- a selection of longies -ctmx760 comparetotmag -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> 1 -ctmx761 comparetotmag -36852134.84194296250843579428931 -36852134.84194296250843579428931 -> 0 -ctmx762 comparetotmag -36852134.94194296250843579428931 -36852134.84194296250843579428931 -> 1 -ctmx763 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 --- precisions above or below the difference should have no effect -precision: 11 -ctmx764 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 10 -ctmx765 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 9 -ctmx766 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 8 -ctmx767 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 7 -ctmx768 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 6 -ctmx769 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 5 -ctmx770 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 4 -ctmx771 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 3 -ctmx772 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 2 -ctmx773 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 -precision: 1 -ctmx774 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 - --- Specials -precision: 9 -ctmx780 comparetotmag Inf -Inf -> 0 -ctmx781 comparetotmag Inf -1000 -> 1 -ctmx782 comparetotmag Inf -1 -> 1 -ctmx783 comparetotmag Inf -0 -> 1 -ctmx784 comparetotmag Inf 0 -> 1 -ctmx785 comparetotmag Inf 1 -> 1 -ctmx786 comparetotmag Inf 1000 -> 1 -ctmx787 comparetotmag Inf Inf -> 0 -ctmx788 comparetotmag -1000 Inf -> -1 -ctmx789 comparetotmag -Inf Inf -> 0 -ctmx790 comparetotmag -1 Inf -> -1 -ctmx791 comparetotmag -0 Inf -> -1 -ctmx792 comparetotmag 0 Inf -> -1 -ctmx793 comparetotmag 1 Inf -> -1 -ctmx794 comparetotmag 1000 Inf -> -1 -ctmx795 comparetotmag Inf Inf -> 0 - -ctmx800 comparetotmag -Inf -Inf -> 0 -ctmx801 comparetotmag -Inf -1000 -> 1 -ctmx802 comparetotmag -Inf -1 -> 1 -ctmx803 comparetotmag -Inf -0 -> 1 -ctmx804 comparetotmag -Inf 0 -> 1 -ctmx805 comparetotmag -Inf 1 -> 1 -ctmx806 comparetotmag -Inf 1000 -> 1 -ctmx807 comparetotmag -Inf Inf -> 0 -ctmx808 comparetotmag -Inf -Inf -> 0 -ctmx809 comparetotmag -1000 -Inf -> -1 -ctmx810 comparetotmag -1 -Inf -> -1 -ctmx811 comparetotmag -0 -Inf -> -1 -ctmx812 comparetotmag 0 -Inf -> -1 -ctmx813 comparetotmag 1 -Inf -> -1 -ctmx814 comparetotmag 1000 -Inf -> -1 -ctmx815 comparetotmag Inf -Inf -> 0 - -ctmx821 comparetotmag NaN -Inf -> 1 -ctmx822 comparetotmag NaN -1000 -> 1 -ctmx823 comparetotmag NaN -1 -> 1 -ctmx824 comparetotmag NaN -0 -> 1 -ctmx825 comparetotmag NaN 0 -> 1 -ctmx826 comparetotmag NaN 1 -> 1 -ctmx827 comparetotmag NaN 1000 -> 1 -ctmx828 comparetotmag NaN Inf -> 1 -ctmx829 comparetotmag NaN NaN -> 0 -ctmx830 comparetotmag -Inf NaN -> -1 -ctmx831 comparetotmag -1000 NaN -> -1 -ctmx832 comparetotmag -1 NaN -> -1 -ctmx833 comparetotmag -0 NaN -> -1 -ctmx834 comparetotmag 0 NaN -> -1 -ctmx835 comparetotmag 1 NaN -> -1 -ctmx836 comparetotmag 1000 NaN -> -1 -ctmx837 comparetotmag Inf NaN -> -1 -ctmx838 comparetotmag -NaN -NaN -> 0 -ctmx839 comparetotmag +NaN -NaN -> 0 -ctmx840 comparetotmag -NaN +NaN -> 0 - -ctmx841 comparetotmag sNaN -sNaN -> 0 -ctmx842 comparetotmag sNaN -NaN -> -1 -ctmx843 comparetotmag sNaN -Inf -> 1 -ctmx844 comparetotmag sNaN -1000 -> 1 -ctmx845 comparetotmag sNaN -1 -> 1 -ctmx846 comparetotmag sNaN -0 -> 1 -ctmx847 comparetotmag sNaN 0 -> 1 -ctmx848 comparetotmag sNaN 1 -> 1 -ctmx849 comparetotmag sNaN 1000 -> 1 -ctmx850 comparetotmag sNaN NaN -> -1 -ctmx851 comparetotmag sNaN sNaN -> 0 - -ctmx852 comparetotmag -sNaN sNaN -> 0 -ctmx853 comparetotmag -NaN sNaN -> 1 -ctmx854 comparetotmag -Inf sNaN -> -1 -ctmx855 comparetotmag -1000 sNaN -> -1 -ctmx856 comparetotmag -1 sNaN -> -1 -ctmx857 comparetotmag -0 sNaN -> -1 -ctmx858 comparetotmag 0 sNaN -> -1 -ctmx859 comparetotmag 1 sNaN -> -1 -ctmx860 comparetotmag 1000 sNaN -> -1 -ctmx861 comparetotmag Inf sNaN -> -1 -ctmx862 comparetotmag NaN sNaN -> 1 -ctmx863 comparetotmag sNaN sNaN -> 0 - -ctmx871 comparetotmag -sNaN -sNaN -> 0 -ctmx872 comparetotmag -sNaN -NaN -> -1 -ctmx873 comparetotmag -sNaN -Inf -> 1 -ctmx874 comparetotmag -sNaN -1000 -> 1 -ctmx875 comparetotmag -sNaN -1 -> 1 -ctmx876 comparetotmag -sNaN -0 -> 1 -ctmx877 comparetotmag -sNaN 0 -> 1 -ctmx878 comparetotmag -sNaN 1 -> 1 -ctmx879 comparetotmag -sNaN 1000 -> 1 -ctmx880 comparetotmag -sNaN NaN -> -1 -ctmx881 comparetotmag -sNaN sNaN -> 0 - -ctmx882 comparetotmag -sNaN -sNaN -> 0 -ctmx883 comparetotmag -NaN -sNaN -> 1 -ctmx884 comparetotmag -Inf -sNaN -> -1 -ctmx885 comparetotmag -1000 -sNaN -> -1 -ctmx886 comparetotmag -1 -sNaN -> -1 -ctmx887 comparetotmag -0 -sNaN -> -1 -ctmx888 comparetotmag 0 -sNaN -> -1 -ctmx889 comparetotmag 1 -sNaN -> -1 -ctmx890 comparetotmag 1000 -sNaN -> -1 -ctmx891 comparetotmag Inf -sNaN -> -1 -ctmx892 comparetotmag NaN -sNaN -> 1 -ctmx893 comparetotmag sNaN -sNaN -> 0 - --- NaNs with payload -ctmx960 comparetotmag NaN9 -Inf -> 1 -ctmx961 comparetotmag NaN8 999 -> 1 -ctmx962 comparetotmag NaN77 Inf -> 1 -ctmx963 comparetotmag -NaN67 NaN5 -> 1 -ctmx964 comparetotmag -Inf -NaN4 -> -1 -ctmx965 comparetotmag -999 -NaN33 -> -1 -ctmx966 comparetotmag Inf NaN2 -> -1 - -ctmx970 comparetotmag -NaN41 -NaN42 -> -1 -ctmx971 comparetotmag +NaN41 -NaN42 -> -1 -ctmx972 comparetotmag -NaN41 +NaN42 -> -1 -ctmx973 comparetotmag +NaN41 +NaN42 -> -1 -ctmx974 comparetotmag -NaN42 -NaN01 -> 1 -ctmx975 comparetotmag +NaN42 -NaN01 -> 1 -ctmx976 comparetotmag -NaN42 +NaN01 -> 1 -ctmx977 comparetotmag +NaN42 +NaN01 -> 1 - -ctmx980 comparetotmag -sNaN771 -sNaN772 -> -1 -ctmx981 comparetotmag +sNaN771 -sNaN772 -> -1 -ctmx982 comparetotmag -sNaN771 +sNaN772 -> -1 -ctmx983 comparetotmag +sNaN771 +sNaN772 -> -1 -ctmx984 comparetotmag -sNaN772 -sNaN771 -> 1 -ctmx985 comparetotmag +sNaN772 -sNaN771 -> 1 -ctmx986 comparetotmag -sNaN772 +sNaN771 -> 1 -ctmx987 comparetotmag +sNaN772 +sNaN771 -> 1 - -ctmx991 comparetotmag -sNaN99 -Inf -> 1 -ctmx992 comparetotmag sNaN98 -11 -> 1 -ctmx993 comparetotmag sNaN97 NaN -> -1 -ctmx994 comparetotmag sNaN16 sNaN94 -> -1 -ctmx995 comparetotmag NaN85 sNaN83 -> 1 -ctmx996 comparetotmag -Inf sNaN92 -> -1 -ctmx997 comparetotmag 088 sNaN81 -> -1 -ctmx998 comparetotmag Inf sNaN90 -> -1 -ctmx999 comparetotmag NaN -sNaN89 -> 1 - --- overflow and underflow tests .. subnormal results now allowed -maxExponent: 999999999 -minexponent: -999999999 -ctmx1080 comparetotmag +1.23456789012345E-0 9E+999999999 -> -1 -ctmx1081 comparetotmag 9E+999999999 +1.23456789012345E-0 -> 1 -ctmx1082 comparetotmag +0.100 9E-999999999 -> 1 -ctmx1083 comparetotmag 9E-999999999 +0.100 -> -1 -ctmx1085 comparetotmag -1.23456789012345E-0 9E+999999999 -> -1 -ctmx1086 comparetotmag 9E+999999999 -1.23456789012345E-0 -> 1 -ctmx1087 comparetotmag -0.100 9E-999999999 -> 1 -ctmx1088 comparetotmag 9E-999999999 -0.100 -> -1 - -ctmx1089 comparetotmag 1e-599999999 1e-400000001 -> -1 -ctmx1090 comparetotmag 1e-599999999 1e-400000000 -> -1 -ctmx1091 comparetotmag 1e-600000000 1e-400000000 -> -1 -ctmx1092 comparetotmag 9e-999999998 0.01 -> -1 -ctmx1093 comparetotmag 9e-999999998 0.1 -> -1 -ctmx1094 comparetotmag 0.01 9e-999999998 -> 1 -ctmx1095 comparetotmag 1e599999999 1e400000001 -> 1 -ctmx1096 comparetotmag 1e599999999 1e400000000 -> 1 -ctmx1097 comparetotmag 1e600000000 1e400000000 -> 1 -ctmx1098 comparetotmag 9e999999998 100 -> 1 -ctmx1099 comparetotmag 9e999999998 10 -> 1 -ctmx1100 comparetotmag 100 9e999999998 -> -1 --- signs -ctmx1101 comparetotmag 1e+777777777 1e+411111111 -> 1 -ctmx1102 comparetotmag 1e+777777777 -1e+411111111 -> 1 -ctmx1103 comparetotmag -1e+777777777 1e+411111111 -> 1 -ctmx1104 comparetotmag -1e+777777777 -1e+411111111 -> 1 -ctmx1105 comparetotmag 1e-777777777 1e-411111111 -> -1 -ctmx1106 comparetotmag 1e-777777777 -1e-411111111 -> -1 -ctmx1107 comparetotmag -1e-777777777 1e-411111111 -> -1 -ctmx1108 comparetotmag -1e-777777777 -1e-411111111 -> -1 - --- spread zeros -ctmx1110 comparetotmag 0E-383 0 -> -1 -ctmx1111 comparetotmag 0E-383 -0 -> -1 -ctmx1112 comparetotmag -0E-383 0 -> -1 -ctmx1113 comparetotmag -0E-383 -0 -> -1 -ctmx1114 comparetotmag 0E-383 0E+384 -> -1 -ctmx1115 comparetotmag 0E-383 -0E+384 -> -1 -ctmx1116 comparetotmag -0E-383 0E+384 -> -1 -ctmx1117 comparetotmag -0E-383 -0E+384 -> -1 -ctmx1118 comparetotmag 0 0E+384 -> -1 -ctmx1119 comparetotmag 0 -0E+384 -> -1 -ctmx1120 comparetotmag -0 0E+384 -> -1 -ctmx1121 comparetotmag -0 -0E+384 -> -1 - -ctmx1130 comparetotmag 0E+384 0 -> 1 -ctmx1131 comparetotmag 0E+384 -0 -> 1 -ctmx1132 comparetotmag -0E+384 0 -> 1 -ctmx1133 comparetotmag -0E+384 -0 -> 1 -ctmx1134 comparetotmag 0E+384 0E-383 -> 1 -ctmx1135 comparetotmag 0E+384 -0E-383 -> 1 -ctmx1136 comparetotmag -0E+384 0E-383 -> 1 -ctmx1137 comparetotmag -0E+384 -0E-383 -> 1 -ctmx1138 comparetotmag 0 0E-383 -> 1 -ctmx1139 comparetotmag 0 -0E-383 -> 1 -ctmx1140 comparetotmag -0 0E-383 -> 1 -ctmx1141 comparetotmag -0 -0E-383 -> 1 - --- Null tests -ctmx9990 comparetotmag 10 # -> NaN Invalid_operation -ctmx9991 comparetotmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- comparetotmag.decTest -- decimal comparison, abs. total ordering -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that it cannot be assumed that add/subtract tests cover paths +-- for this operation adequately, here, because the code might be +-- quite different (comparison cannot overflow or underflow, so +-- actual subtractions are not necessary). Similarly, comparetotal +-- will have some radically different paths than compare. + +extended: 1 +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +-- sanity checks +ctmx001 comparetotmag -2 -2 -> 0 +ctmx002 comparetotmag -2 -1 -> 1 +ctmx003 comparetotmag -2 0 -> 1 +ctmx004 comparetotmag -2 1 -> 1 +ctmx005 comparetotmag -2 2 -> 0 +ctmx006 comparetotmag -1 -2 -> -1 +ctmx007 comparetotmag -1 -1 -> 0 +ctmx008 comparetotmag -1 0 -> 1 +ctmx009 comparetotmag -1 1 -> 0 +ctmx010 comparetotmag -1 2 -> -1 +ctmx011 comparetotmag 0 -2 -> -1 +ctmx012 comparetotmag 0 -1 -> -1 +ctmx013 comparetotmag 0 0 -> 0 +ctmx014 comparetotmag 0 1 -> -1 +ctmx015 comparetotmag 0 2 -> -1 +ctmx016 comparetotmag 1 -2 -> -1 +ctmx017 comparetotmag 1 -1 -> 0 +ctmx018 comparetotmag 1 0 -> 1 +ctmx019 comparetotmag 1 1 -> 0 +ctmx020 comparetotmag 1 2 -> -1 +ctmx021 comparetotmag 2 -2 -> 0 +ctmx022 comparetotmag 2 -1 -> 1 +ctmx023 comparetotmag 2 0 -> 1 +ctmx025 comparetotmag 2 1 -> 1 +ctmx026 comparetotmag 2 2 -> 0 + +ctmx031 comparetotmag -20 -20 -> 0 +ctmx032 comparetotmag -20 -10 -> 1 +ctmx033 comparetotmag -20 00 -> 1 +ctmx034 comparetotmag -20 10 -> 1 +ctmx035 comparetotmag -20 20 -> 0 +ctmx036 comparetotmag -10 -20 -> -1 +ctmx037 comparetotmag -10 -10 -> 0 +ctmx038 comparetotmag -10 00 -> 1 +ctmx039 comparetotmag -10 10 -> 0 +ctmx040 comparetotmag -10 20 -> -1 +ctmx041 comparetotmag 00 -20 -> -1 +ctmx042 comparetotmag 00 -10 -> -1 +ctmx043 comparetotmag 00 00 -> 0 +ctmx044 comparetotmag 00 10 -> -1 +ctmx045 comparetotmag 00 20 -> -1 +ctmx046 comparetotmag 10 -20 -> -1 +ctmx047 comparetotmag 10 -10 -> 0 +ctmx048 comparetotmag 10 00 -> 1 +ctmx049 comparetotmag 10 10 -> 0 +ctmx050 comparetotmag 10 20 -> -1 +ctmx051 comparetotmag 20 -20 -> 0 +ctmx052 comparetotmag 20 -10 -> 1 +ctmx053 comparetotmag 20 00 -> 1 +ctmx055 comparetotmag 20 10 -> 1 +ctmx056 comparetotmag 20 20 -> 0 + +ctmx061 comparetotmag -2.0 -2.0 -> 0 +ctmx062 comparetotmag -2.0 -1.0 -> 1 +ctmx063 comparetotmag -2.0 0.0 -> 1 +ctmx064 comparetotmag -2.0 1.0 -> 1 +ctmx065 comparetotmag -2.0 2.0 -> 0 +ctmx066 comparetotmag -1.0 -2.0 -> -1 +ctmx067 comparetotmag -1.0 -1.0 -> 0 +ctmx068 comparetotmag -1.0 0.0 -> 1 +ctmx069 comparetotmag -1.0 1.0 -> 0 +ctmx070 comparetotmag -1.0 2.0 -> -1 +ctmx071 comparetotmag 0.0 -2.0 -> -1 +ctmx072 comparetotmag 0.0 -1.0 -> -1 +ctmx073 comparetotmag 0.0 0.0 -> 0 +ctmx074 comparetotmag 0.0 1.0 -> -1 +ctmx075 comparetotmag 0.0 2.0 -> -1 +ctmx076 comparetotmag 1.0 -2.0 -> -1 +ctmx077 comparetotmag 1.0 -1.0 -> 0 +ctmx078 comparetotmag 1.0 0.0 -> 1 +ctmx079 comparetotmag 1.0 1.0 -> 0 +ctmx080 comparetotmag 1.0 2.0 -> -1 +ctmx081 comparetotmag 2.0 -2.0 -> 0 +ctmx082 comparetotmag 2.0 -1.0 -> 1 +ctmx083 comparetotmag 2.0 0.0 -> 1 +ctmx085 comparetotmag 2.0 1.0 -> 1 +ctmx086 comparetotmag 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +maxexponent: 999999999 +minexponent: -999999999 +ctmx090 comparetotmag 9.99999999E+999999999 9.99999999E+999999999 -> 0 +ctmx091 comparetotmag -9.99999999E+999999999 9.99999999E+999999999 -> 0 +ctmx092 comparetotmag 9.99999999E+999999999 -9.99999999E+999999999 -> 0 +ctmx093 comparetotmag -9.99999999E+999999999 -9.99999999E+999999999 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +ctmx100 comparetotmag 7.0 7.0 -> 0 +ctmx101 comparetotmag 7.0 7 -> -1 +ctmx102 comparetotmag 7 7.0 -> 1 +ctmx103 comparetotmag 7E+0 7.0 -> 1 +ctmx104 comparetotmag 70E-1 7.0 -> 0 +ctmx105 comparetotmag 0.7E+1 7 -> 0 +ctmx106 comparetotmag 70E-1 7 -> -1 +ctmx107 comparetotmag 7.0 7E+0 -> -1 +ctmx108 comparetotmag 7.0 70E-1 -> 0 +ctmx109 comparetotmag 7 0.7E+1 -> 0 +ctmx110 comparetotmag 7 70E-1 -> 1 + +ctmx120 comparetotmag 8.0 7.0 -> 1 +ctmx121 comparetotmag 8.0 7 -> 1 +ctmx122 comparetotmag 8 7.0 -> 1 +ctmx123 comparetotmag 8E+0 7.0 -> 1 +ctmx124 comparetotmag 80E-1 7.0 -> 1 +ctmx125 comparetotmag 0.8E+1 7 -> 1 +ctmx126 comparetotmag 80E-1 7 -> 1 +ctmx127 comparetotmag 8.0 7E+0 -> 1 +ctmx128 comparetotmag 8.0 70E-1 -> 1 +ctmx129 comparetotmag 8 0.7E+1 -> 1 +ctmx130 comparetotmag 8 70E-1 -> 1 + +ctmx140 comparetotmag 8.0 9.0 -> -1 +ctmx141 comparetotmag 8.0 9 -> -1 +ctmx142 comparetotmag 8 9.0 -> -1 +ctmx143 comparetotmag 8E+0 9.0 -> -1 +ctmx144 comparetotmag 80E-1 9.0 -> -1 +ctmx145 comparetotmag 0.8E+1 9 -> -1 +ctmx146 comparetotmag 80E-1 9 -> -1 +ctmx147 comparetotmag 8.0 9E+0 -> -1 +ctmx148 comparetotmag 8.0 90E-1 -> -1 +ctmx149 comparetotmag 8 0.9E+1 -> -1 +ctmx150 comparetotmag 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ctmx200 comparetotmag -7.0 7.0 -> 0 +ctmx201 comparetotmag -7.0 7 -> -1 +ctmx202 comparetotmag -7 7.0 -> 1 +ctmx203 comparetotmag -7E+0 7.0 -> 1 +ctmx204 comparetotmag -70E-1 7.0 -> 0 +ctmx205 comparetotmag -0.7E+1 7 -> 0 +ctmx206 comparetotmag -70E-1 7 -> -1 +ctmx207 comparetotmag -7.0 7E+0 -> -1 +ctmx208 comparetotmag -7.0 70E-1 -> 0 +ctmx209 comparetotmag -7 0.7E+1 -> 0 +ctmx210 comparetotmag -7 70E-1 -> 1 + +ctmx220 comparetotmag -8.0 7.0 -> 1 +ctmx221 comparetotmag -8.0 7 -> 1 +ctmx222 comparetotmag -8 7.0 -> 1 +ctmx223 comparetotmag -8E+0 7.0 -> 1 +ctmx224 comparetotmag -80E-1 7.0 -> 1 +ctmx225 comparetotmag -0.8E+1 7 -> 1 +ctmx226 comparetotmag -80E-1 7 -> 1 +ctmx227 comparetotmag -8.0 7E+0 -> 1 +ctmx228 comparetotmag -8.0 70E-1 -> 1 +ctmx229 comparetotmag -8 0.7E+1 -> 1 +ctmx230 comparetotmag -8 70E-1 -> 1 + +ctmx240 comparetotmag -8.0 9.0 -> -1 +ctmx241 comparetotmag -8.0 9 -> -1 +ctmx242 comparetotmag -8 9.0 -> -1 +ctmx243 comparetotmag -8E+0 9.0 -> -1 +ctmx244 comparetotmag -80E-1 9.0 -> -1 +ctmx245 comparetotmag -0.8E+1 9 -> -1 +ctmx246 comparetotmag -80E-1 9 -> -1 +ctmx247 comparetotmag -8.0 9E+0 -> -1 +ctmx248 comparetotmag -8.0 90E-1 -> -1 +ctmx249 comparetotmag -8 0.9E+1 -> -1 +ctmx250 comparetotmag -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ctmx300 comparetotmag 7.0 -7.0 -> 0 +ctmx301 comparetotmag 7.0 -7 -> -1 +ctmx302 comparetotmag 7 -7.0 -> 1 +ctmx303 comparetotmag 7E+0 -7.0 -> 1 +ctmx304 comparetotmag 70E-1 -7.0 -> 0 +ctmx305 comparetotmag .7E+1 -7 -> 0 +ctmx306 comparetotmag 70E-1 -7 -> -1 +ctmx307 comparetotmag 7.0 -7E+0 -> -1 +ctmx308 comparetotmag 7.0 -70E-1 -> 0 +ctmx309 comparetotmag 7 -.7E+1 -> 0 +ctmx310 comparetotmag 7 -70E-1 -> 1 + +ctmx320 comparetotmag 8.0 -7.0 -> 1 +ctmx321 comparetotmag 8.0 -7 -> 1 +ctmx322 comparetotmag 8 -7.0 -> 1 +ctmx323 comparetotmag 8E+0 -7.0 -> 1 +ctmx324 comparetotmag 80E-1 -7.0 -> 1 +ctmx325 comparetotmag .8E+1 -7 -> 1 +ctmx326 comparetotmag 80E-1 -7 -> 1 +ctmx327 comparetotmag 8.0 -7E+0 -> 1 +ctmx328 comparetotmag 8.0 -70E-1 -> 1 +ctmx329 comparetotmag 8 -.7E+1 -> 1 +ctmx330 comparetotmag 8 -70E-1 -> 1 + +ctmx340 comparetotmag 8.0 -9.0 -> -1 +ctmx341 comparetotmag 8.0 -9 -> -1 +ctmx342 comparetotmag 8 -9.0 -> -1 +ctmx343 comparetotmag 8E+0 -9.0 -> -1 +ctmx344 comparetotmag 80E-1 -9.0 -> -1 +ctmx345 comparetotmag .8E+1 -9 -> -1 +ctmx346 comparetotmag 80E-1 -9 -> -1 +ctmx347 comparetotmag 8.0 -9E+0 -> -1 +ctmx348 comparetotmag 8.0 -90E-1 -> -1 +ctmx349 comparetotmag 8 -.9E+1 -> -1 +ctmx350 comparetotmag 8 -90E-1 -> -1 + +-- and again, with sign changes -- .. +ctmx400 comparetotmag -7.0 -7.0 -> 0 +ctmx401 comparetotmag -7.0 -7 -> -1 +ctmx402 comparetotmag -7 -7.0 -> 1 +ctmx403 comparetotmag -7E+0 -7.0 -> 1 +ctmx404 comparetotmag -70E-1 -7.0 -> 0 +ctmx405 comparetotmag -.7E+1 -7 -> 0 +ctmx406 comparetotmag -70E-1 -7 -> -1 +ctmx407 comparetotmag -7.0 -7E+0 -> -1 +ctmx408 comparetotmag -7.0 -70E-1 -> 0 +ctmx409 comparetotmag -7 -.7E+1 -> 0 +ctmx410 comparetotmag -7 -70E-1 -> 1 + +ctmx420 comparetotmag -8.0 -7.0 -> 1 +ctmx421 comparetotmag -8.0 -7 -> 1 +ctmx422 comparetotmag -8 -7.0 -> 1 +ctmx423 comparetotmag -8E+0 -7.0 -> 1 +ctmx424 comparetotmag -80E-1 -7.0 -> 1 +ctmx425 comparetotmag -.8E+1 -7 -> 1 +ctmx426 comparetotmag -80E-1 -7 -> 1 +ctmx427 comparetotmag -8.0 -7E+0 -> 1 +ctmx428 comparetotmag -8.0 -70E-1 -> 1 +ctmx429 comparetotmag -8 -.7E+1 -> 1 +ctmx430 comparetotmag -8 -70E-1 -> 1 + +ctmx440 comparetotmag -8.0 -9.0 -> -1 +ctmx441 comparetotmag -8.0 -9 -> -1 +ctmx442 comparetotmag -8 -9.0 -> -1 +ctmx443 comparetotmag -8E+0 -9.0 -> -1 +ctmx444 comparetotmag -80E-1 -9.0 -> -1 +ctmx445 comparetotmag -.8E+1 -9 -> -1 +ctmx446 comparetotmag -80E-1 -9 -> -1 +ctmx447 comparetotmag -8.0 -9E+0 -> -1 +ctmx448 comparetotmag -8.0 -90E-1 -> -1 +ctmx449 comparetotmag -8 -.9E+1 -> -1 +ctmx450 comparetotmag -8 -90E-1 -> -1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +precision: 40 +ctmx470 comparetotmag 123.4560000000000000E789 123.456E789 -> -1 +ctmx471 comparetotmag 123.456000000000000E-89 123.456E-89 -> -1 +ctmx472 comparetotmag 123.45600000000000E789 123.456E789 -> -1 +ctmx473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 +ctmx474 comparetotmag 123.456000000000E789 123.456E789 -> -1 +ctmx475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 +ctmx476 comparetotmag 123.4560000000E789 123.456E789 -> -1 +ctmx477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 +ctmx478 comparetotmag 123.45600000E789 123.456E789 -> -1 +ctmx479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 +ctmx480 comparetotmag 123.456000E789 123.456E789 -> -1 +ctmx481 comparetotmag 123.45600E-89 123.456E-89 -> -1 +ctmx482 comparetotmag 123.4560E789 123.456E789 -> -1 +ctmx483 comparetotmag 123.456E-89 123.456E-89 -> 0 +ctmx484 comparetotmag 123.456E-89 123.4560000000000000E-89 -> 1 +ctmx485 comparetotmag 123.456E789 123.456000000000000E789 -> 1 +ctmx486 comparetotmag 123.456E-89 123.45600000000000E-89 -> 1 +ctmx487 comparetotmag 123.456E789 123.4560000000000E789 -> 1 +ctmx488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 +ctmx489 comparetotmag 123.456E789 123.45600000000E789 -> 1 +ctmx490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 +ctmx491 comparetotmag 123.456E789 123.456000000E789 -> 1 +ctmx492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 +ctmx493 comparetotmag 123.456E789 123.4560000E789 -> 1 +ctmx494 comparetotmag 123.456E-89 123.456000E-89 -> 1 +ctmx495 comparetotmag 123.456E789 123.45600E789 -> 1 +ctmx496 comparetotmag 123.456E-89 123.4560E-89 -> 1 +ctmx497 comparetotmag 123.456E789 123.456E789 -> 0 + +-- wide-ranging, around precision; signs equal +precision: 9 +ctmx500 comparetotmag 1 1E-15 -> 1 +ctmx501 comparetotmag 1 1E-14 -> 1 +ctmx502 comparetotmag 1 1E-13 -> 1 +ctmx503 comparetotmag 1 1E-12 -> 1 +ctmx504 comparetotmag 1 1E-11 -> 1 +ctmx505 comparetotmag 1 1E-10 -> 1 +ctmx506 comparetotmag 1 1E-9 -> 1 +ctmx507 comparetotmag 1 1E-8 -> 1 +ctmx508 comparetotmag 1 1E-7 -> 1 +ctmx509 comparetotmag 1 1E-6 -> 1 +ctmx510 comparetotmag 1 1E-5 -> 1 +ctmx511 comparetotmag 1 1E-4 -> 1 +ctmx512 comparetotmag 1 1E-3 -> 1 +ctmx513 comparetotmag 1 1E-2 -> 1 +ctmx514 comparetotmag 1 1E-1 -> 1 +ctmx515 comparetotmag 1 1E-0 -> 0 +ctmx516 comparetotmag 1 1E+1 -> -1 +ctmx517 comparetotmag 1 1E+2 -> -1 +ctmx518 comparetotmag 1 1E+3 -> -1 +ctmx519 comparetotmag 1 1E+4 -> -1 +ctmx521 comparetotmag 1 1E+5 -> -1 +ctmx522 comparetotmag 1 1E+6 -> -1 +ctmx523 comparetotmag 1 1E+7 -> -1 +ctmx524 comparetotmag 1 1E+8 -> -1 +ctmx525 comparetotmag 1 1E+9 -> -1 +ctmx526 comparetotmag 1 1E+10 -> -1 +ctmx527 comparetotmag 1 1E+11 -> -1 +ctmx528 comparetotmag 1 1E+12 -> -1 +ctmx529 comparetotmag 1 1E+13 -> -1 +ctmx530 comparetotmag 1 1E+14 -> -1 +ctmx531 comparetotmag 1 1E+15 -> -1 +-- LR swap +ctmx540 comparetotmag 1E-15 1 -> -1 +ctmx541 comparetotmag 1E-14 1 -> -1 +ctmx542 comparetotmag 1E-13 1 -> -1 +ctmx543 comparetotmag 1E-12 1 -> -1 +ctmx544 comparetotmag 1E-11 1 -> -1 +ctmx545 comparetotmag 1E-10 1 -> -1 +ctmx546 comparetotmag 1E-9 1 -> -1 +ctmx547 comparetotmag 1E-8 1 -> -1 +ctmx548 comparetotmag 1E-7 1 -> -1 +ctmx549 comparetotmag 1E-6 1 -> -1 +ctmx550 comparetotmag 1E-5 1 -> -1 +ctmx551 comparetotmag 1E-4 1 -> -1 +ctmx552 comparetotmag 1E-3 1 -> -1 +ctmx553 comparetotmag 1E-2 1 -> -1 +ctmx554 comparetotmag 1E-1 1 -> -1 +ctmx555 comparetotmag 1E-0 1 -> 0 +ctmx556 comparetotmag 1E+1 1 -> 1 +ctmx557 comparetotmag 1E+2 1 -> 1 +ctmx558 comparetotmag 1E+3 1 -> 1 +ctmx559 comparetotmag 1E+4 1 -> 1 +ctmx561 comparetotmag 1E+5 1 -> 1 +ctmx562 comparetotmag 1E+6 1 -> 1 +ctmx563 comparetotmag 1E+7 1 -> 1 +ctmx564 comparetotmag 1E+8 1 -> 1 +ctmx565 comparetotmag 1E+9 1 -> 1 +ctmx566 comparetotmag 1E+10 1 -> 1 +ctmx567 comparetotmag 1E+11 1 -> 1 +ctmx568 comparetotmag 1E+12 1 -> 1 +ctmx569 comparetotmag 1E+13 1 -> 1 +ctmx570 comparetotmag 1E+14 1 -> 1 +ctmx571 comparetotmag 1E+15 1 -> 1 +-- similar with an useful coefficient, one side only +ctmx580 comparetotmag 0.000000987654321 1E-15 -> 1 +ctmx581 comparetotmag 0.000000987654321 1E-14 -> 1 +ctmx582 comparetotmag 0.000000987654321 1E-13 -> 1 +ctmx583 comparetotmag 0.000000987654321 1E-12 -> 1 +ctmx584 comparetotmag 0.000000987654321 1E-11 -> 1 +ctmx585 comparetotmag 0.000000987654321 1E-10 -> 1 +ctmx586 comparetotmag 0.000000987654321 1E-9 -> 1 +ctmx587 comparetotmag 0.000000987654321 1E-8 -> 1 +ctmx588 comparetotmag 0.000000987654321 1E-7 -> 1 +ctmx589 comparetotmag 0.000000987654321 1E-6 -> -1 +ctmx590 comparetotmag 0.000000987654321 1E-5 -> -1 +ctmx591 comparetotmag 0.000000987654321 1E-4 -> -1 +ctmx592 comparetotmag 0.000000987654321 1E-3 -> -1 +ctmx593 comparetotmag 0.000000987654321 1E-2 -> -1 +ctmx594 comparetotmag 0.000000987654321 1E-1 -> -1 +ctmx595 comparetotmag 0.000000987654321 1E-0 -> -1 +ctmx596 comparetotmag 0.000000987654321 1E+1 -> -1 +ctmx597 comparetotmag 0.000000987654321 1E+2 -> -1 +ctmx598 comparetotmag 0.000000987654321 1E+3 -> -1 +ctmx599 comparetotmag 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +precision: 20 +ctmx600 comparetotmag 12 12.2345 -> -1 +ctmx601 comparetotmag 12.0 12.2345 -> -1 +ctmx602 comparetotmag 12.00 12.2345 -> -1 +ctmx603 comparetotmag 12.000 12.2345 -> -1 +ctmx604 comparetotmag 12.0000 12.2345 -> -1 +ctmx605 comparetotmag 12.00000 12.2345 -> -1 +ctmx606 comparetotmag 12.000000 12.2345 -> -1 +ctmx607 comparetotmag 12.0000000 12.2345 -> -1 +ctmx608 comparetotmag 12.00000000 12.2345 -> -1 +ctmx609 comparetotmag 12.000000000 12.2345 -> -1 +ctmx610 comparetotmag 12.1234 12 -> 1 +ctmx611 comparetotmag 12.1234 12.0 -> 1 +ctmx612 comparetotmag 12.1234 12.00 -> 1 +ctmx613 comparetotmag 12.1234 12.000 -> 1 +ctmx614 comparetotmag 12.1234 12.0000 -> 1 +ctmx615 comparetotmag 12.1234 12.00000 -> 1 +ctmx616 comparetotmag 12.1234 12.000000 -> 1 +ctmx617 comparetotmag 12.1234 12.0000000 -> 1 +ctmx618 comparetotmag 12.1234 12.00000000 -> 1 +ctmx619 comparetotmag 12.1234 12.000000000 -> 1 +ctmx620 comparetotmag -12 -12.2345 -> -1 +ctmx621 comparetotmag -12.0 -12.2345 -> -1 +ctmx622 comparetotmag -12.00 -12.2345 -> -1 +ctmx623 comparetotmag -12.000 -12.2345 -> -1 +ctmx624 comparetotmag -12.0000 -12.2345 -> -1 +ctmx625 comparetotmag -12.00000 -12.2345 -> -1 +ctmx626 comparetotmag -12.000000 -12.2345 -> -1 +ctmx627 comparetotmag -12.0000000 -12.2345 -> -1 +ctmx628 comparetotmag -12.00000000 -12.2345 -> -1 +ctmx629 comparetotmag -12.000000000 -12.2345 -> -1 +ctmx630 comparetotmag -12.1234 -12 -> 1 +ctmx631 comparetotmag -12.1234 -12.0 -> 1 +ctmx632 comparetotmag -12.1234 -12.00 -> 1 +ctmx633 comparetotmag -12.1234 -12.000 -> 1 +ctmx634 comparetotmag -12.1234 -12.0000 -> 1 +ctmx635 comparetotmag -12.1234 -12.00000 -> 1 +ctmx636 comparetotmag -12.1234 -12.000000 -> 1 +ctmx637 comparetotmag -12.1234 -12.0000000 -> 1 +ctmx638 comparetotmag -12.1234 -12.00000000 -> 1 +ctmx639 comparetotmag -12.1234 -12.000000000 -> 1 +precision: 9 + +-- extended zeros +ctmx640 comparetotmag 0 0 -> 0 +ctmx641 comparetotmag 0 -0 -> 0 +ctmx642 comparetotmag 0 -0.0 -> 1 +ctmx643 comparetotmag 0 0.0 -> 1 +ctmx644 comparetotmag -0 0 -> 0 +ctmx645 comparetotmag -0 -0 -> 0 +ctmx646 comparetotmag -0 -0.0 -> 1 +ctmx647 comparetotmag -0 0.0 -> 1 +ctmx648 comparetotmag 0.0 0 -> -1 +ctmx649 comparetotmag 0.0 -0 -> -1 +ctmx650 comparetotmag 0.0 -0.0 -> 0 +ctmx651 comparetotmag 0.0 0.0 -> 0 +ctmx652 comparetotmag -0.0 0 -> -1 +ctmx653 comparetotmag -0.0 -0 -> -1 +ctmx654 comparetotmag -0.0 -0.0 -> 0 +ctmx655 comparetotmag -0.0 0.0 -> 0 + +ctmx656 comparetotmag -0E1 0.0 -> 1 +ctmx657 comparetotmag -0E2 0.0 -> 1 +ctmx658 comparetotmag 0E1 0.0 -> 1 +ctmx659 comparetotmag 0E2 0.0 -> 1 +ctmx660 comparetotmag -0E1 0 -> 1 +ctmx661 comparetotmag -0E2 0 -> 1 +ctmx662 comparetotmag 0E1 0 -> 1 +ctmx663 comparetotmag 0E2 0 -> 1 +ctmx664 comparetotmag -0E1 -0E1 -> 0 +ctmx665 comparetotmag -0E2 -0E1 -> 1 +ctmx666 comparetotmag 0E1 -0E1 -> 0 +ctmx667 comparetotmag 0E2 -0E1 -> 1 +ctmx668 comparetotmag -0E1 -0E2 -> -1 +ctmx669 comparetotmag -0E2 -0E2 -> 0 +ctmx670 comparetotmag 0E1 -0E2 -> -1 +ctmx671 comparetotmag 0E2 -0E2 -> 0 +ctmx672 comparetotmag -0E1 0E1 -> 0 +ctmx673 comparetotmag -0E2 0E1 -> 1 +ctmx674 comparetotmag 0E1 0E1 -> 0 +ctmx675 comparetotmag 0E2 0E1 -> 1 +ctmx676 comparetotmag -0E1 0E2 -> -1 +ctmx677 comparetotmag -0E2 0E2 -> 0 +ctmx678 comparetotmag 0E1 0E2 -> -1 +ctmx679 comparetotmag 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +precision: 20 +ctmx680 comparetotmag 12 12 -> 0 +ctmx681 comparetotmag 12 12.0 -> 1 +ctmx682 comparetotmag 12 12.00 -> 1 +ctmx683 comparetotmag 12 12.000 -> 1 +ctmx684 comparetotmag 12 12.0000 -> 1 +ctmx685 comparetotmag 12 12.00000 -> 1 +ctmx686 comparetotmag 12 12.000000 -> 1 +ctmx687 comparetotmag 12 12.0000000 -> 1 +ctmx688 comparetotmag 12 12.00000000 -> 1 +ctmx689 comparetotmag 12 12.000000000 -> 1 +ctmx690 comparetotmag 12 12 -> 0 +ctmx691 comparetotmag 12.0 12 -> -1 +ctmx692 comparetotmag 12.00 12 -> -1 +ctmx693 comparetotmag 12.000 12 -> -1 +ctmx694 comparetotmag 12.0000 12 -> -1 +ctmx695 comparetotmag 12.00000 12 -> -1 +ctmx696 comparetotmag 12.000000 12 -> -1 +ctmx697 comparetotmag 12.0000000 12 -> -1 +ctmx698 comparetotmag 12.00000000 12 -> -1 +ctmx699 comparetotmag 12.000000000 12 -> -1 + +-- long operand checks +maxexponent: 999 +minexponent: -999 +precision: 9 +ctmx701 comparetotmag 12345678000 1 -> 1 +ctmx702 comparetotmag 1 12345678000 -> -1 +ctmx703 comparetotmag 1234567800 1 -> 1 +ctmx704 comparetotmag 1 1234567800 -> -1 +ctmx705 comparetotmag 1234567890 1 -> 1 +ctmx706 comparetotmag 1 1234567890 -> -1 +ctmx707 comparetotmag 1234567891 1 -> 1 +ctmx708 comparetotmag 1 1234567891 -> -1 +ctmx709 comparetotmag 12345678901 1 -> 1 +ctmx710 comparetotmag 1 12345678901 -> -1 +ctmx711 comparetotmag 1234567896 1 -> 1 +ctmx712 comparetotmag 1 1234567896 -> -1 +ctmx713 comparetotmag -1234567891 1 -> 1 +ctmx714 comparetotmag 1 -1234567891 -> -1 +ctmx715 comparetotmag -12345678901 1 -> 1 +ctmx716 comparetotmag 1 -12345678901 -> -1 +ctmx717 comparetotmag -1234567896 1 -> 1 +ctmx718 comparetotmag 1 -1234567896 -> -1 + +precision: 15 +-- same with plenty of precision +ctmx721 comparetotmag 12345678000 1 -> 1 +ctmx722 comparetotmag 1 12345678000 -> -1 +ctmx723 comparetotmag 1234567800 1 -> 1 +ctmx724 comparetotmag 1 1234567800 -> -1 +ctmx725 comparetotmag 1234567890 1 -> 1 +ctmx726 comparetotmag 1 1234567890 -> -1 +ctmx727 comparetotmag 1234567891 1 -> 1 +ctmx728 comparetotmag 1 1234567891 -> -1 +ctmx729 comparetotmag 12345678901 1 -> 1 +ctmx730 comparetotmag 1 12345678901 -> -1 +ctmx731 comparetotmag 1234567896 1 -> 1 +ctmx732 comparetotmag 1 1234567896 -> -1 + +-- residue cases +precision: 5 +ctmx740 comparetotmag 1 0.9999999 -> 1 +ctmx741 comparetotmag 1 0.999999 -> 1 +ctmx742 comparetotmag 1 0.99999 -> 1 +ctmx743 comparetotmag 1 1.0000 -> 1 +ctmx744 comparetotmag 1 1.00001 -> -1 +ctmx745 comparetotmag 1 1.000001 -> -1 +ctmx746 comparetotmag 1 1.0000001 -> -1 +ctmx750 comparetotmag 0.9999999 1 -> -1 +ctmx751 comparetotmag 0.999999 1 -> -1 +ctmx752 comparetotmag 0.99999 1 -> -1 +ctmx753 comparetotmag 1.0000 1 -> -1 +ctmx754 comparetotmag 1.00001 1 -> 1 +ctmx755 comparetotmag 1.000001 1 -> 1 +ctmx756 comparetotmag 1.0000001 1 -> 1 + +-- a selection of longies +ctmx760 comparetotmag -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> 1 +ctmx761 comparetotmag -36852134.84194296250843579428931 -36852134.84194296250843579428931 -> 0 +ctmx762 comparetotmag -36852134.94194296250843579428931 -36852134.84194296250843579428931 -> 1 +ctmx763 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +-- precisions above or below the difference should have no effect +precision: 11 +ctmx764 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 10 +ctmx765 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 9 +ctmx766 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 8 +ctmx767 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 7 +ctmx768 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 6 +ctmx769 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 5 +ctmx770 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 4 +ctmx771 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 3 +ctmx772 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 2 +ctmx773 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 +precision: 1 +ctmx774 comparetotmag -36852134.84194296250843579428931 -36852134.94194296250843579428931 -> -1 + +-- Specials +precision: 9 +ctmx780 comparetotmag Inf -Inf -> 0 +ctmx781 comparetotmag Inf -1000 -> 1 +ctmx782 comparetotmag Inf -1 -> 1 +ctmx783 comparetotmag Inf -0 -> 1 +ctmx784 comparetotmag Inf 0 -> 1 +ctmx785 comparetotmag Inf 1 -> 1 +ctmx786 comparetotmag Inf 1000 -> 1 +ctmx787 comparetotmag Inf Inf -> 0 +ctmx788 comparetotmag -1000 Inf -> -1 +ctmx789 comparetotmag -Inf Inf -> 0 +ctmx790 comparetotmag -1 Inf -> -1 +ctmx791 comparetotmag -0 Inf -> -1 +ctmx792 comparetotmag 0 Inf -> -1 +ctmx793 comparetotmag 1 Inf -> -1 +ctmx794 comparetotmag 1000 Inf -> -1 +ctmx795 comparetotmag Inf Inf -> 0 + +ctmx800 comparetotmag -Inf -Inf -> 0 +ctmx801 comparetotmag -Inf -1000 -> 1 +ctmx802 comparetotmag -Inf -1 -> 1 +ctmx803 comparetotmag -Inf -0 -> 1 +ctmx804 comparetotmag -Inf 0 -> 1 +ctmx805 comparetotmag -Inf 1 -> 1 +ctmx806 comparetotmag -Inf 1000 -> 1 +ctmx807 comparetotmag -Inf Inf -> 0 +ctmx808 comparetotmag -Inf -Inf -> 0 +ctmx809 comparetotmag -1000 -Inf -> -1 +ctmx810 comparetotmag -1 -Inf -> -1 +ctmx811 comparetotmag -0 -Inf -> -1 +ctmx812 comparetotmag 0 -Inf -> -1 +ctmx813 comparetotmag 1 -Inf -> -1 +ctmx814 comparetotmag 1000 -Inf -> -1 +ctmx815 comparetotmag Inf -Inf -> 0 + +ctmx821 comparetotmag NaN -Inf -> 1 +ctmx822 comparetotmag NaN -1000 -> 1 +ctmx823 comparetotmag NaN -1 -> 1 +ctmx824 comparetotmag NaN -0 -> 1 +ctmx825 comparetotmag NaN 0 -> 1 +ctmx826 comparetotmag NaN 1 -> 1 +ctmx827 comparetotmag NaN 1000 -> 1 +ctmx828 comparetotmag NaN Inf -> 1 +ctmx829 comparetotmag NaN NaN -> 0 +ctmx830 comparetotmag -Inf NaN -> -1 +ctmx831 comparetotmag -1000 NaN -> -1 +ctmx832 comparetotmag -1 NaN -> -1 +ctmx833 comparetotmag -0 NaN -> -1 +ctmx834 comparetotmag 0 NaN -> -1 +ctmx835 comparetotmag 1 NaN -> -1 +ctmx836 comparetotmag 1000 NaN -> -1 +ctmx837 comparetotmag Inf NaN -> -1 +ctmx838 comparetotmag -NaN -NaN -> 0 +ctmx839 comparetotmag +NaN -NaN -> 0 +ctmx840 comparetotmag -NaN +NaN -> 0 + +ctmx841 comparetotmag sNaN -sNaN -> 0 +ctmx842 comparetotmag sNaN -NaN -> -1 +ctmx843 comparetotmag sNaN -Inf -> 1 +ctmx844 comparetotmag sNaN -1000 -> 1 +ctmx845 comparetotmag sNaN -1 -> 1 +ctmx846 comparetotmag sNaN -0 -> 1 +ctmx847 comparetotmag sNaN 0 -> 1 +ctmx848 comparetotmag sNaN 1 -> 1 +ctmx849 comparetotmag sNaN 1000 -> 1 +ctmx850 comparetotmag sNaN NaN -> -1 +ctmx851 comparetotmag sNaN sNaN -> 0 + +ctmx852 comparetotmag -sNaN sNaN -> 0 +ctmx853 comparetotmag -NaN sNaN -> 1 +ctmx854 comparetotmag -Inf sNaN -> -1 +ctmx855 comparetotmag -1000 sNaN -> -1 +ctmx856 comparetotmag -1 sNaN -> -1 +ctmx857 comparetotmag -0 sNaN -> -1 +ctmx858 comparetotmag 0 sNaN -> -1 +ctmx859 comparetotmag 1 sNaN -> -1 +ctmx860 comparetotmag 1000 sNaN -> -1 +ctmx861 comparetotmag Inf sNaN -> -1 +ctmx862 comparetotmag NaN sNaN -> 1 +ctmx863 comparetotmag sNaN sNaN -> 0 + +ctmx871 comparetotmag -sNaN -sNaN -> 0 +ctmx872 comparetotmag -sNaN -NaN -> -1 +ctmx873 comparetotmag -sNaN -Inf -> 1 +ctmx874 comparetotmag -sNaN -1000 -> 1 +ctmx875 comparetotmag -sNaN -1 -> 1 +ctmx876 comparetotmag -sNaN -0 -> 1 +ctmx877 comparetotmag -sNaN 0 -> 1 +ctmx878 comparetotmag -sNaN 1 -> 1 +ctmx879 comparetotmag -sNaN 1000 -> 1 +ctmx880 comparetotmag -sNaN NaN -> -1 +ctmx881 comparetotmag -sNaN sNaN -> 0 + +ctmx882 comparetotmag -sNaN -sNaN -> 0 +ctmx883 comparetotmag -NaN -sNaN -> 1 +ctmx884 comparetotmag -Inf -sNaN -> -1 +ctmx885 comparetotmag -1000 -sNaN -> -1 +ctmx886 comparetotmag -1 -sNaN -> -1 +ctmx887 comparetotmag -0 -sNaN -> -1 +ctmx888 comparetotmag 0 -sNaN -> -1 +ctmx889 comparetotmag 1 -sNaN -> -1 +ctmx890 comparetotmag 1000 -sNaN -> -1 +ctmx891 comparetotmag Inf -sNaN -> -1 +ctmx892 comparetotmag NaN -sNaN -> 1 +ctmx893 comparetotmag sNaN -sNaN -> 0 + +-- NaNs with payload +ctmx960 comparetotmag NaN9 -Inf -> 1 +ctmx961 comparetotmag NaN8 999 -> 1 +ctmx962 comparetotmag NaN77 Inf -> 1 +ctmx963 comparetotmag -NaN67 NaN5 -> 1 +ctmx964 comparetotmag -Inf -NaN4 -> -1 +ctmx965 comparetotmag -999 -NaN33 -> -1 +ctmx966 comparetotmag Inf NaN2 -> -1 + +ctmx970 comparetotmag -NaN41 -NaN42 -> -1 +ctmx971 comparetotmag +NaN41 -NaN42 -> -1 +ctmx972 comparetotmag -NaN41 +NaN42 -> -1 +ctmx973 comparetotmag +NaN41 +NaN42 -> -1 +ctmx974 comparetotmag -NaN42 -NaN01 -> 1 +ctmx975 comparetotmag +NaN42 -NaN01 -> 1 +ctmx976 comparetotmag -NaN42 +NaN01 -> 1 +ctmx977 comparetotmag +NaN42 +NaN01 -> 1 + +ctmx980 comparetotmag -sNaN771 -sNaN772 -> -1 +ctmx981 comparetotmag +sNaN771 -sNaN772 -> -1 +ctmx982 comparetotmag -sNaN771 +sNaN772 -> -1 +ctmx983 comparetotmag +sNaN771 +sNaN772 -> -1 +ctmx984 comparetotmag -sNaN772 -sNaN771 -> 1 +ctmx985 comparetotmag +sNaN772 -sNaN771 -> 1 +ctmx986 comparetotmag -sNaN772 +sNaN771 -> 1 +ctmx987 comparetotmag +sNaN772 +sNaN771 -> 1 + +ctmx991 comparetotmag -sNaN99 -Inf -> 1 +ctmx992 comparetotmag sNaN98 -11 -> 1 +ctmx993 comparetotmag sNaN97 NaN -> -1 +ctmx994 comparetotmag sNaN16 sNaN94 -> -1 +ctmx995 comparetotmag NaN85 sNaN83 -> 1 +ctmx996 comparetotmag -Inf sNaN92 -> -1 +ctmx997 comparetotmag 088 sNaN81 -> -1 +ctmx998 comparetotmag Inf sNaN90 -> -1 +ctmx999 comparetotmag NaN -sNaN89 -> 1 + +-- overflow and underflow tests .. subnormal results now allowed +maxExponent: 999999999 +minexponent: -999999999 +ctmx1080 comparetotmag +1.23456789012345E-0 9E+999999999 -> -1 +ctmx1081 comparetotmag 9E+999999999 +1.23456789012345E-0 -> 1 +ctmx1082 comparetotmag +0.100 9E-999999999 -> 1 +ctmx1083 comparetotmag 9E-999999999 +0.100 -> -1 +ctmx1085 comparetotmag -1.23456789012345E-0 9E+999999999 -> -1 +ctmx1086 comparetotmag 9E+999999999 -1.23456789012345E-0 -> 1 +ctmx1087 comparetotmag -0.100 9E-999999999 -> 1 +ctmx1088 comparetotmag 9E-999999999 -0.100 -> -1 + +ctmx1089 comparetotmag 1e-599999999 1e-400000001 -> -1 +ctmx1090 comparetotmag 1e-599999999 1e-400000000 -> -1 +ctmx1091 comparetotmag 1e-600000000 1e-400000000 -> -1 +ctmx1092 comparetotmag 9e-999999998 0.01 -> -1 +ctmx1093 comparetotmag 9e-999999998 0.1 -> -1 +ctmx1094 comparetotmag 0.01 9e-999999998 -> 1 +ctmx1095 comparetotmag 1e599999999 1e400000001 -> 1 +ctmx1096 comparetotmag 1e599999999 1e400000000 -> 1 +ctmx1097 comparetotmag 1e600000000 1e400000000 -> 1 +ctmx1098 comparetotmag 9e999999998 100 -> 1 +ctmx1099 comparetotmag 9e999999998 10 -> 1 +ctmx1100 comparetotmag 100 9e999999998 -> -1 +-- signs +ctmx1101 comparetotmag 1e+777777777 1e+411111111 -> 1 +ctmx1102 comparetotmag 1e+777777777 -1e+411111111 -> 1 +ctmx1103 comparetotmag -1e+777777777 1e+411111111 -> 1 +ctmx1104 comparetotmag -1e+777777777 -1e+411111111 -> 1 +ctmx1105 comparetotmag 1e-777777777 1e-411111111 -> -1 +ctmx1106 comparetotmag 1e-777777777 -1e-411111111 -> -1 +ctmx1107 comparetotmag -1e-777777777 1e-411111111 -> -1 +ctmx1108 comparetotmag -1e-777777777 -1e-411111111 -> -1 + +-- spread zeros +ctmx1110 comparetotmag 0E-383 0 -> -1 +ctmx1111 comparetotmag 0E-383 -0 -> -1 +ctmx1112 comparetotmag -0E-383 0 -> -1 +ctmx1113 comparetotmag -0E-383 -0 -> -1 +ctmx1114 comparetotmag 0E-383 0E+384 -> -1 +ctmx1115 comparetotmag 0E-383 -0E+384 -> -1 +ctmx1116 comparetotmag -0E-383 0E+384 -> -1 +ctmx1117 comparetotmag -0E-383 -0E+384 -> -1 +ctmx1118 comparetotmag 0 0E+384 -> -1 +ctmx1119 comparetotmag 0 -0E+384 -> -1 +ctmx1120 comparetotmag -0 0E+384 -> -1 +ctmx1121 comparetotmag -0 -0E+384 -> -1 + +ctmx1130 comparetotmag 0E+384 0 -> 1 +ctmx1131 comparetotmag 0E+384 -0 -> 1 +ctmx1132 comparetotmag -0E+384 0 -> 1 +ctmx1133 comparetotmag -0E+384 -0 -> 1 +ctmx1134 comparetotmag 0E+384 0E-383 -> 1 +ctmx1135 comparetotmag 0E+384 -0E-383 -> 1 +ctmx1136 comparetotmag -0E+384 0E-383 -> 1 +ctmx1137 comparetotmag -0E+384 -0E-383 -> 1 +ctmx1138 comparetotmag 0 0E-383 -> 1 +ctmx1139 comparetotmag 0 -0E-383 -> 1 +ctmx1140 comparetotmag -0 0E-383 -> 1 +ctmx1141 comparetotmag -0 -0E-383 -> 1 + +-- Null tests +ctmx9990 comparetotmag 10 # -> NaN Invalid_operation +ctmx9991 comparetotmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/copy.decTest b/Lib/test/decimaltestdata/copy.decTest index d9f299e2273..b47e499a7bd 100644 --- a/Lib/test/decimaltestdata/copy.decTest +++ b/Lib/test/decimaltestdata/copy.decTest @@ -1,86 +1,86 @@ ------------------------------------------------------------------------- --- copy.decTest -- quiet copy -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -cpyx001 copy +7.50 -> 7.50 - --- Infinities -cpyx011 copy Infinity -> Infinity -cpyx012 copy -Infinity -> -Infinity - --- NaNs, 0 payload -cpyx021 copy NaN -> NaN -cpyx022 copy -NaN -> -NaN -cpyx023 copy sNaN -> sNaN -cpyx024 copy -sNaN -> -sNaN - --- NaNs, non-0 payload -cpyx031 copy NaN10 -> NaN10 -cpyx032 copy -NaN10 -> -NaN10 -cpyx033 copy sNaN10 -> sNaN10 -cpyx034 copy -sNaN10 -> -sNaN10 -cpyx035 copy NaN7 -> NaN7 -cpyx036 copy -NaN7 -> -NaN7 -cpyx037 copy sNaN101 -> sNaN101 -cpyx038 copy -sNaN101 -> -sNaN101 - --- finites -cpyx101 copy 7 -> 7 -cpyx102 copy -7 -> -7 -cpyx103 copy 75 -> 75 -cpyx104 copy -75 -> -75 -cpyx105 copy 7.50 -> 7.50 -cpyx106 copy -7.50 -> -7.50 -cpyx107 copy 7.500 -> 7.500 -cpyx108 copy -7.500 -> -7.500 - --- zeros -cpyx111 copy 0 -> 0 -cpyx112 copy -0 -> -0 -cpyx113 copy 0E+4 -> 0E+4 -cpyx114 copy -0E+4 -> -0E+4 -cpyx115 copy 0.0000 -> 0.0000 -cpyx116 copy -0.0000 -> -0.0000 -cpyx117 copy 0E-141 -> 0E-141 -cpyx118 copy -0E-141 -> -0E-141 - --- full coefficients, alternating bits -cpyx121 copy 268268268 -> 268268268 -cpyx122 copy -268268268 -> -268268268 -cpyx123 copy 134134134 -> 134134134 -cpyx124 copy -134134134 -> -134134134 - --- Nmax, Nmin, Ntiny -cpyx131 copy 9.99999999E+999 -> 9.99999999E+999 -cpyx132 copy 1E-999 -> 1E-999 -cpyx133 copy 1.00000000E-999 -> 1.00000000E-999 -cpyx134 copy 1E-1007 -> 1E-1007 - -cpyx135 copy -1E-1007 -> -1E-1007 -cpyx136 copy -1.00000000E-999 -> -1.00000000E-999 -cpyx137 copy -1E-999 -> -1E-999 -cpyx138 copy -9.99999999E+999 -> -9.99999999E+999 +------------------------------------------------------------------------ +-- copy.decTest -- quiet copy -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +cpyx001 copy +7.50 -> 7.50 + +-- Infinities +cpyx011 copy Infinity -> Infinity +cpyx012 copy -Infinity -> -Infinity + +-- NaNs, 0 payload +cpyx021 copy NaN -> NaN +cpyx022 copy -NaN -> -NaN +cpyx023 copy sNaN -> sNaN +cpyx024 copy -sNaN -> -sNaN + +-- NaNs, non-0 payload +cpyx031 copy NaN10 -> NaN10 +cpyx032 copy -NaN10 -> -NaN10 +cpyx033 copy sNaN10 -> sNaN10 +cpyx034 copy -sNaN10 -> -sNaN10 +cpyx035 copy NaN7 -> NaN7 +cpyx036 copy -NaN7 -> -NaN7 +cpyx037 copy sNaN101 -> sNaN101 +cpyx038 copy -sNaN101 -> -sNaN101 + +-- finites +cpyx101 copy 7 -> 7 +cpyx102 copy -7 -> -7 +cpyx103 copy 75 -> 75 +cpyx104 copy -75 -> -75 +cpyx105 copy 7.50 -> 7.50 +cpyx106 copy -7.50 -> -7.50 +cpyx107 copy 7.500 -> 7.500 +cpyx108 copy -7.500 -> -7.500 + +-- zeros +cpyx111 copy 0 -> 0 +cpyx112 copy -0 -> -0 +cpyx113 copy 0E+4 -> 0E+4 +cpyx114 copy -0E+4 -> -0E+4 +cpyx115 copy 0.0000 -> 0.0000 +cpyx116 copy -0.0000 -> -0.0000 +cpyx117 copy 0E-141 -> 0E-141 +cpyx118 copy -0E-141 -> -0E-141 + +-- full coefficients, alternating bits +cpyx121 copy 268268268 -> 268268268 +cpyx122 copy -268268268 -> -268268268 +cpyx123 copy 134134134 -> 134134134 +cpyx124 copy -134134134 -> -134134134 + +-- Nmax, Nmin, Ntiny +cpyx131 copy 9.99999999E+999 -> 9.99999999E+999 +cpyx132 copy 1E-999 -> 1E-999 +cpyx133 copy 1.00000000E-999 -> 1.00000000E-999 +cpyx134 copy 1E-1007 -> 1E-1007 + +cpyx135 copy -1E-1007 -> -1E-1007 +cpyx136 copy -1.00000000E-999 -> -1.00000000E-999 +cpyx137 copy -1E-999 -> -1E-999 +cpyx138 copy -9.99999999E+999 -> -9.99999999E+999 diff --git a/Lib/test/decimaltestdata/copyabs.decTest b/Lib/test/decimaltestdata/copyabs.decTest index 52002dc431a..f7d0f864581 100644 --- a/Lib/test/decimaltestdata/copyabs.decTest +++ b/Lib/test/decimaltestdata/copyabs.decTest @@ -1,86 +1,86 @@ ------------------------------------------------------------------------- --- copyAbs.decTest -- quiet copy and set sign to zero -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -cpax001 copyabs +7.50 -> 7.50 - --- Infinities -cpax011 copyabs Infinity -> Infinity -cpax012 copyabs -Infinity -> Infinity - --- NaNs, 0 payload -cpax021 copyabs NaN -> NaN -cpax022 copyabs -NaN -> NaN -cpax023 copyabs sNaN -> sNaN -cpax024 copyabs -sNaN -> sNaN - --- NaNs, non-0 payload -cpax031 copyabs NaN10 -> NaN10 -cpax032 copyabs -NaN15 -> NaN15 -cpax033 copyabs sNaN15 -> sNaN15 -cpax034 copyabs -sNaN10 -> sNaN10 -cpax035 copyabs NaN7 -> NaN7 -cpax036 copyabs -NaN7 -> NaN7 -cpax037 copyabs sNaN101 -> sNaN101 -cpax038 copyabs -sNaN101 -> sNaN101 - --- finites -cpax101 copyabs 7 -> 7 -cpax102 copyabs -7 -> 7 -cpax103 copyabs 75 -> 75 -cpax104 copyabs -75 -> 75 -cpax105 copyabs 7.10 -> 7.10 -cpax106 copyabs -7.10 -> 7.10 -cpax107 copyabs 7.500 -> 7.500 -cpax108 copyabs -7.500 -> 7.500 - --- zeros -cpax111 copyabs 0 -> 0 -cpax112 copyabs -0 -> 0 -cpax113 copyabs 0E+6 -> 0E+6 -cpax114 copyabs -0E+6 -> 0E+6 -cpax115 copyabs 0.0000 -> 0.0000 -cpax116 copyabs -0.0000 -> 0.0000 -cpax117 copyabs 0E-141 -> 0E-141 -cpax118 copyabs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -cpax121 copyabs 268268268 -> 268268268 -cpax122 copyabs -268268268 -> 268268268 -cpax123 copyabs 134134134 -> 134134134 -cpax124 copyabs -134134134 -> 134134134 - --- Nmax, Nmin, Ntiny -cpax131 copyabs 9.99999999E+999 -> 9.99999999E+999 -cpax132 copyabs 1E-999 -> 1E-999 -cpax133 copyabs 1.00000000E-999 -> 1.00000000E-999 -cpax134 copyabs 1E-1007 -> 1E-1007 - -cpax135 copyabs -1E-1007 -> 1E-1007 -cpax136 copyabs -1.00000000E-999 -> 1.00000000E-999 -cpax137 copyabs -1E-999 -> 1E-999 -cpax199 copyabs -9.99999999E+999 -> 9.99999999E+999 +------------------------------------------------------------------------ +-- copyAbs.decTest -- quiet copy and set sign to zero -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +cpax001 copyabs +7.50 -> 7.50 + +-- Infinities +cpax011 copyabs Infinity -> Infinity +cpax012 copyabs -Infinity -> Infinity + +-- NaNs, 0 payload +cpax021 copyabs NaN -> NaN +cpax022 copyabs -NaN -> NaN +cpax023 copyabs sNaN -> sNaN +cpax024 copyabs -sNaN -> sNaN + +-- NaNs, non-0 payload +cpax031 copyabs NaN10 -> NaN10 +cpax032 copyabs -NaN15 -> NaN15 +cpax033 copyabs sNaN15 -> sNaN15 +cpax034 copyabs -sNaN10 -> sNaN10 +cpax035 copyabs NaN7 -> NaN7 +cpax036 copyabs -NaN7 -> NaN7 +cpax037 copyabs sNaN101 -> sNaN101 +cpax038 copyabs -sNaN101 -> sNaN101 + +-- finites +cpax101 copyabs 7 -> 7 +cpax102 copyabs -7 -> 7 +cpax103 copyabs 75 -> 75 +cpax104 copyabs -75 -> 75 +cpax105 copyabs 7.10 -> 7.10 +cpax106 copyabs -7.10 -> 7.10 +cpax107 copyabs 7.500 -> 7.500 +cpax108 copyabs -7.500 -> 7.500 + +-- zeros +cpax111 copyabs 0 -> 0 +cpax112 copyabs -0 -> 0 +cpax113 copyabs 0E+6 -> 0E+6 +cpax114 copyabs -0E+6 -> 0E+6 +cpax115 copyabs 0.0000 -> 0.0000 +cpax116 copyabs -0.0000 -> 0.0000 +cpax117 copyabs 0E-141 -> 0E-141 +cpax118 copyabs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +cpax121 copyabs 268268268 -> 268268268 +cpax122 copyabs -268268268 -> 268268268 +cpax123 copyabs 134134134 -> 134134134 +cpax124 copyabs -134134134 -> 134134134 + +-- Nmax, Nmin, Ntiny +cpax131 copyabs 9.99999999E+999 -> 9.99999999E+999 +cpax132 copyabs 1E-999 -> 1E-999 +cpax133 copyabs 1.00000000E-999 -> 1.00000000E-999 +cpax134 copyabs 1E-1007 -> 1E-1007 + +cpax135 copyabs -1E-1007 -> 1E-1007 +cpax136 copyabs -1.00000000E-999 -> 1.00000000E-999 +cpax137 copyabs -1E-999 -> 1E-999 +cpax199 copyabs -9.99999999E+999 -> 9.99999999E+999 diff --git a/Lib/test/decimaltestdata/copynegate.decTest b/Lib/test/decimaltestdata/copynegate.decTest index 7f8de9d9321..38235b60f9f 100644 --- a/Lib/test/decimaltestdata/copynegate.decTest +++ b/Lib/test/decimaltestdata/copynegate.decTest @@ -1,86 +1,86 @@ ------------------------------------------------------------------------- --- copyNegate.decTest -- quiet copy and negate -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -cpnx001 copynegate +7.50 -> -7.50 - --- Infinities -cpnx011 copynegate Infinity -> -Infinity -cpnx012 copynegate -Infinity -> Infinity - --- NaNs, 0 payload -cpnx021 copynegate NaN -> -NaN -cpnx022 copynegate -NaN -> NaN -cpnx023 copynegate sNaN -> -sNaN -cpnx024 copynegate -sNaN -> sNaN - --- NaNs, non-0 payload -cpnx031 copynegate NaN13 -> -NaN13 -cpnx032 copynegate -NaN13 -> NaN13 -cpnx033 copynegate sNaN13 -> -sNaN13 -cpnx034 copynegate -sNaN13 -> sNaN13 -cpnx035 copynegate NaN70 -> -NaN70 -cpnx036 copynegate -NaN70 -> NaN70 -cpnx037 copynegate sNaN101 -> -sNaN101 -cpnx038 copynegate -sNaN101 -> sNaN101 - --- finites -cpnx101 copynegate 7 -> -7 -cpnx102 copynegate -7 -> 7 -cpnx103 copynegate 75 -> -75 -cpnx104 copynegate -75 -> 75 -cpnx105 copynegate 7.50 -> -7.50 -cpnx106 copynegate -7.50 -> 7.50 -cpnx107 copynegate 7.500 -> -7.500 -cpnx108 copynegate -7.500 -> 7.500 - --- zeros -cpnx111 copynegate 0 -> -0 -cpnx112 copynegate -0 -> 0 -cpnx113 copynegate 0E+4 -> -0E+4 -cpnx114 copynegate -0E+4 -> 0E+4 -cpnx115 copynegate 0.0000 -> -0.0000 -cpnx116 copynegate -0.0000 -> 0.0000 -cpnx117 copynegate 0E-141 -> -0E-141 -cpnx118 copynegate -0E-141 -> 0E-141 - --- full coefficients, alternating bits -cpnx121 copynegate 268268268 -> -268268268 -cpnx122 copynegate -268268268 -> 268268268 -cpnx123 copynegate 134134134 -> -134134134 -cpnx124 copynegate -134134134 -> 134134134 - --- Nmax, Nmin, Ntiny -cpnx131 copynegate 9.99999999E+999 -> -9.99999999E+999 -cpnx132 copynegate 1E-999 -> -1E-999 -cpnx133 copynegate 1.00000000E-999 -> -1.00000000E-999 -cpnx134 copynegate 1E-1007 -> -1E-1007 - -cpnx135 copynegate -1E-1007 -> 1E-1007 -cpnx136 copynegate -1.00000000E-999 -> 1.00000000E-999 -cpnx137 copynegate -1E-999 -> 1E-999 -cpnx138 copynegate -9.99999999E+999 -> 9.99999999E+999 +------------------------------------------------------------------------ +-- copyNegate.decTest -- quiet copy and negate -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +cpnx001 copynegate +7.50 -> -7.50 + +-- Infinities +cpnx011 copynegate Infinity -> -Infinity +cpnx012 copynegate -Infinity -> Infinity + +-- NaNs, 0 payload +cpnx021 copynegate NaN -> -NaN +cpnx022 copynegate -NaN -> NaN +cpnx023 copynegate sNaN -> -sNaN +cpnx024 copynegate -sNaN -> sNaN + +-- NaNs, non-0 payload +cpnx031 copynegate NaN13 -> -NaN13 +cpnx032 copynegate -NaN13 -> NaN13 +cpnx033 copynegate sNaN13 -> -sNaN13 +cpnx034 copynegate -sNaN13 -> sNaN13 +cpnx035 copynegate NaN70 -> -NaN70 +cpnx036 copynegate -NaN70 -> NaN70 +cpnx037 copynegate sNaN101 -> -sNaN101 +cpnx038 copynegate -sNaN101 -> sNaN101 + +-- finites +cpnx101 copynegate 7 -> -7 +cpnx102 copynegate -7 -> 7 +cpnx103 copynegate 75 -> -75 +cpnx104 copynegate -75 -> 75 +cpnx105 copynegate 7.50 -> -7.50 +cpnx106 copynegate -7.50 -> 7.50 +cpnx107 copynegate 7.500 -> -7.500 +cpnx108 copynegate -7.500 -> 7.500 + +-- zeros +cpnx111 copynegate 0 -> -0 +cpnx112 copynegate -0 -> 0 +cpnx113 copynegate 0E+4 -> -0E+4 +cpnx114 copynegate -0E+4 -> 0E+4 +cpnx115 copynegate 0.0000 -> -0.0000 +cpnx116 copynegate -0.0000 -> 0.0000 +cpnx117 copynegate 0E-141 -> -0E-141 +cpnx118 copynegate -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +cpnx121 copynegate 268268268 -> -268268268 +cpnx122 copynegate -268268268 -> 268268268 +cpnx123 copynegate 134134134 -> -134134134 +cpnx124 copynegate -134134134 -> 134134134 + +-- Nmax, Nmin, Ntiny +cpnx131 copynegate 9.99999999E+999 -> -9.99999999E+999 +cpnx132 copynegate 1E-999 -> -1E-999 +cpnx133 copynegate 1.00000000E-999 -> -1.00000000E-999 +cpnx134 copynegate 1E-1007 -> -1E-1007 + +cpnx135 copynegate -1E-1007 -> 1E-1007 +cpnx136 copynegate -1.00000000E-999 -> 1.00000000E-999 +cpnx137 copynegate -1E-999 -> 1E-999 +cpnx138 copynegate -9.99999999E+999 -> 9.99999999E+999 diff --git a/Lib/test/decimaltestdata/copysign.decTest b/Lib/test/decimaltestdata/copysign.decTest index afdd670d3c1..8061a4219cc 100644 --- a/Lib/test/decimaltestdata/copysign.decTest +++ b/Lib/test/decimaltestdata/copysign.decTest @@ -1,177 +1,177 @@ ------------------------------------------------------------------------- --- copysign.decTest -- quiet copy with sign from rhs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check, and examples from decArith -cpsx001 copysign +7.50 11 -> 7.50 -cpsx002 copysign '1.50' '7.33' -> 1.50 -cpsx003 copysign '-1.50' '7.33' -> 1.50 -cpsx004 copysign '1.50' '-7.33' -> -1.50 -cpsx005 copysign '-1.50' '-7.33' -> -1.50 - --- Infinities -cpsx011 copysign Infinity 11 -> Infinity -cpsx012 copysign -Infinity 11 -> Infinity - --- NaNs, 0 payload -cpsx021 copysign NaN 11 -> NaN -cpsx022 copysign -NaN 11 -> NaN -cpsx023 copysign sNaN 11 -> sNaN -cpsx024 copysign -sNaN 11 -> sNaN - --- NaNs, non-0 payload -cpsx031 copysign NaN10 11 -> NaN10 -cpsx032 copysign -NaN10 11 -> NaN10 -cpsx033 copysign sNaN10 11 -> sNaN10 -cpsx034 copysign -sNaN10 11 -> sNaN10 -cpsx035 copysign NaN7 11 -> NaN7 -cpsx036 copysign -NaN7 11 -> NaN7 -cpsx037 copysign sNaN101 11 -> sNaN101 -cpsx038 copysign -sNaN101 11 -> sNaN101 - --- finites -cpsx101 copysign 7 11 -> 7 -cpsx102 copysign -7 11 -> 7 -cpsx103 copysign 75 11 -> 75 -cpsx104 copysign -75 11 -> 75 -cpsx105 copysign 7.50 11 -> 7.50 -cpsx106 copysign -7.50 11 -> 7.50 -cpsx107 copysign 7.500 11 -> 7.500 -cpsx108 copysign -7.500 11 -> 7.500 - --- zeros -cpsx111 copysign 0 11 -> 0 -cpsx112 copysign -0 11 -> 0 -cpsx113 copysign 0E+4 11 -> 0E+4 -cpsx114 copysign -0E+4 11 -> 0E+4 -cpsx115 copysign 0.0000 11 -> 0.0000 -cpsx116 copysign -0.0000 11 -> 0.0000 -cpsx117 copysign 0E-141 11 -> 0E-141 -cpsx118 copysign -0E-141 11 -> 0E-141 - --- full coefficients, alternating bits -cpsx121 copysign 268268268 11 -> 268268268 -cpsx122 copysign -268268268 11 -> 268268268 -cpsx123 copysign 134134134 11 -> 134134134 -cpsx124 copysign -134134134 11 -> 134134134 - --- Nmax, Nmin, Ntiny -cpsx131 copysign 9.99999999E+999 11 -> 9.99999999E+999 -cpsx132 copysign 1E-999 11 -> 1E-999 -cpsx133 copysign 1.00000000E-999 11 -> 1.00000000E-999 -cpsx134 copysign 1E-1007 11 -> 1E-1007 - -cpsx135 copysign -1E-1007 11 -> 1E-1007 -cpsx136 copysign -1.00000000E-999 11 -> 1.00000000E-999 -cpsx137 copysign -1E-999 11 -> 1E-999 -cpsx138 copysign -9.99999999E+999 11 -> 9.99999999E+999 - --- repeat with negative RHS - --- Infinities -cpsx211 copysign Infinity -34 -> -Infinity -cpsx212 copysign -Infinity -34 -> -Infinity - --- NaNs, 0 payload -cpsx221 copysign NaN -34 -> -NaN -cpsx222 copysign -NaN -34 -> -NaN -cpsx223 copysign sNaN -34 -> -sNaN -cpsx224 copysign -sNaN -34 -> -sNaN - --- NaNs, non-0 payload -cpsx231 copysign NaN10 -34 -> -NaN10 -cpsx232 copysign -NaN10 -34 -> -NaN10 -cpsx233 copysign sNaN10 -34 -> -sNaN10 -cpsx234 copysign -sNaN10 -34 -> -sNaN10 -cpsx235 copysign NaN7 -34 -> -NaN7 -cpsx236 copysign -NaN7 -34 -> -NaN7 -cpsx237 copysign sNaN101 -34 -> -sNaN101 -cpsx238 copysign -sNaN101 -34 -> -sNaN101 - --- finites -cpsx301 copysign 7 -34 -> -7 -cpsx302 copysign -7 -34 -> -7 -cpsx303 copysign 75 -34 -> -75 -cpsx304 copysign -75 -34 -> -75 -cpsx305 copysign 7.50 -34 -> -7.50 -cpsx306 copysign -7.50 -34 -> -7.50 -cpsx307 copysign 7.500 -34 -> -7.500 -cpsx308 copysign -7.500 -34 -> -7.500 - --- zeros -cpsx311 copysign 0 -34 -> -0 -cpsx312 copysign -0 -34 -> -0 -cpsx313 copysign 0E+4 -34 -> -0E+4 -cpsx314 copysign -0E+4 -34 -> -0E+4 -cpsx315 copysign 0.0000 -34 -> -0.0000 -cpsx316 copysign -0.0000 -34 -> -0.0000 -cpsx317 copysign 0E-141 -34 -> -0E-141 -cpsx318 copysign -0E-141 -34 -> -0E-141 - --- full coefficients, alternating bits -cpsx321 copysign 268268268 -18 -> -268268268 -cpsx322 copysign -268268268 -18 -> -268268268 -cpsx323 copysign 134134134 -18 -> -134134134 -cpsx324 copysign -134134134 -18 -> -134134134 - --- Nmax, Nmin, Ntiny -cpsx331 copysign 9.99999999E+999 -18 -> -9.99999999E+999 -cpsx332 copysign 1E-999 -18 -> -1E-999 -cpsx333 copysign 1.00000000E-999 -18 -> -1.00000000E-999 -cpsx334 copysign 1E-1007 -18 -> -1E-1007 - -cpsx335 copysign -1E-1007 -18 -> -1E-1007 -cpsx336 copysign -1.00000000E-999 -18 -> -1.00000000E-999 -cpsx337 copysign -1E-999 -18 -> -1E-999 -cpsx338 copysign -9.99999999E+999 -18 -> -9.99999999E+999 - --- Other kinds of RHS -cpsx401 copysign 701 -34 -> -701 -cpsx402 copysign -720 -34 -> -720 -cpsx403 copysign 701 -0 -> -701 -cpsx404 copysign -720 -0 -> -720 -cpsx405 copysign 701 +0 -> 701 -cpsx406 copysign -720 +0 -> 720 -cpsx407 copysign 701 +34 -> 701 -cpsx408 copysign -720 +34 -> 720 - -cpsx413 copysign 701 -Inf -> -701 -cpsx414 copysign -720 -Inf -> -720 -cpsx415 copysign 701 +Inf -> 701 -cpsx416 copysign -720 +Inf -> 720 - -cpsx420 copysign 701 -NaN -> -701 -cpsx421 copysign -720 -NaN -> -720 -cpsx422 copysign 701 +NaN -> 701 -cpsx423 copysign -720 +NaN -> 720 -cpsx425 copysign -720 +NaN8 -> 720 - -cpsx426 copysign 701 -sNaN -> -701 -cpsx427 copysign -720 -sNaN -> -720 -cpsx428 copysign 701 +sNaN -> 701 -cpsx429 copysign -720 +sNaN -> 720 -cpsx430 copysign -720 +sNaN3 -> 720 - +------------------------------------------------------------------------ +-- copysign.decTest -- quiet copy with sign from rhs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check, and examples from decArith +cpsx001 copysign +7.50 11 -> 7.50 +cpsx002 copysign '1.50' '7.33' -> 1.50 +cpsx003 copysign '-1.50' '7.33' -> 1.50 +cpsx004 copysign '1.50' '-7.33' -> -1.50 +cpsx005 copysign '-1.50' '-7.33' -> -1.50 + +-- Infinities +cpsx011 copysign Infinity 11 -> Infinity +cpsx012 copysign -Infinity 11 -> Infinity + +-- NaNs, 0 payload +cpsx021 copysign NaN 11 -> NaN +cpsx022 copysign -NaN 11 -> NaN +cpsx023 copysign sNaN 11 -> sNaN +cpsx024 copysign -sNaN 11 -> sNaN + +-- NaNs, non-0 payload +cpsx031 copysign NaN10 11 -> NaN10 +cpsx032 copysign -NaN10 11 -> NaN10 +cpsx033 copysign sNaN10 11 -> sNaN10 +cpsx034 copysign -sNaN10 11 -> sNaN10 +cpsx035 copysign NaN7 11 -> NaN7 +cpsx036 copysign -NaN7 11 -> NaN7 +cpsx037 copysign sNaN101 11 -> sNaN101 +cpsx038 copysign -sNaN101 11 -> sNaN101 + +-- finites +cpsx101 copysign 7 11 -> 7 +cpsx102 copysign -7 11 -> 7 +cpsx103 copysign 75 11 -> 75 +cpsx104 copysign -75 11 -> 75 +cpsx105 copysign 7.50 11 -> 7.50 +cpsx106 copysign -7.50 11 -> 7.50 +cpsx107 copysign 7.500 11 -> 7.500 +cpsx108 copysign -7.500 11 -> 7.500 + +-- zeros +cpsx111 copysign 0 11 -> 0 +cpsx112 copysign -0 11 -> 0 +cpsx113 copysign 0E+4 11 -> 0E+4 +cpsx114 copysign -0E+4 11 -> 0E+4 +cpsx115 copysign 0.0000 11 -> 0.0000 +cpsx116 copysign -0.0000 11 -> 0.0000 +cpsx117 copysign 0E-141 11 -> 0E-141 +cpsx118 copysign -0E-141 11 -> 0E-141 + +-- full coefficients, alternating bits +cpsx121 copysign 268268268 11 -> 268268268 +cpsx122 copysign -268268268 11 -> 268268268 +cpsx123 copysign 134134134 11 -> 134134134 +cpsx124 copysign -134134134 11 -> 134134134 + +-- Nmax, Nmin, Ntiny +cpsx131 copysign 9.99999999E+999 11 -> 9.99999999E+999 +cpsx132 copysign 1E-999 11 -> 1E-999 +cpsx133 copysign 1.00000000E-999 11 -> 1.00000000E-999 +cpsx134 copysign 1E-1007 11 -> 1E-1007 + +cpsx135 copysign -1E-1007 11 -> 1E-1007 +cpsx136 copysign -1.00000000E-999 11 -> 1.00000000E-999 +cpsx137 copysign -1E-999 11 -> 1E-999 +cpsx138 copysign -9.99999999E+999 11 -> 9.99999999E+999 + +-- repeat with negative RHS + +-- Infinities +cpsx211 copysign Infinity -34 -> -Infinity +cpsx212 copysign -Infinity -34 -> -Infinity + +-- NaNs, 0 payload +cpsx221 copysign NaN -34 -> -NaN +cpsx222 copysign -NaN -34 -> -NaN +cpsx223 copysign sNaN -34 -> -sNaN +cpsx224 copysign -sNaN -34 -> -sNaN + +-- NaNs, non-0 payload +cpsx231 copysign NaN10 -34 -> -NaN10 +cpsx232 copysign -NaN10 -34 -> -NaN10 +cpsx233 copysign sNaN10 -34 -> -sNaN10 +cpsx234 copysign -sNaN10 -34 -> -sNaN10 +cpsx235 copysign NaN7 -34 -> -NaN7 +cpsx236 copysign -NaN7 -34 -> -NaN7 +cpsx237 copysign sNaN101 -34 -> -sNaN101 +cpsx238 copysign -sNaN101 -34 -> -sNaN101 + +-- finites +cpsx301 copysign 7 -34 -> -7 +cpsx302 copysign -7 -34 -> -7 +cpsx303 copysign 75 -34 -> -75 +cpsx304 copysign -75 -34 -> -75 +cpsx305 copysign 7.50 -34 -> -7.50 +cpsx306 copysign -7.50 -34 -> -7.50 +cpsx307 copysign 7.500 -34 -> -7.500 +cpsx308 copysign -7.500 -34 -> -7.500 + +-- zeros +cpsx311 copysign 0 -34 -> -0 +cpsx312 copysign -0 -34 -> -0 +cpsx313 copysign 0E+4 -34 -> -0E+4 +cpsx314 copysign -0E+4 -34 -> -0E+4 +cpsx315 copysign 0.0000 -34 -> -0.0000 +cpsx316 copysign -0.0000 -34 -> -0.0000 +cpsx317 copysign 0E-141 -34 -> -0E-141 +cpsx318 copysign -0E-141 -34 -> -0E-141 + +-- full coefficients, alternating bits +cpsx321 copysign 268268268 -18 -> -268268268 +cpsx322 copysign -268268268 -18 -> -268268268 +cpsx323 copysign 134134134 -18 -> -134134134 +cpsx324 copysign -134134134 -18 -> -134134134 + +-- Nmax, Nmin, Ntiny +cpsx331 copysign 9.99999999E+999 -18 -> -9.99999999E+999 +cpsx332 copysign 1E-999 -18 -> -1E-999 +cpsx333 copysign 1.00000000E-999 -18 -> -1.00000000E-999 +cpsx334 copysign 1E-1007 -18 -> -1E-1007 + +cpsx335 copysign -1E-1007 -18 -> -1E-1007 +cpsx336 copysign -1.00000000E-999 -18 -> -1.00000000E-999 +cpsx337 copysign -1E-999 -18 -> -1E-999 +cpsx338 copysign -9.99999999E+999 -18 -> -9.99999999E+999 + +-- Other kinds of RHS +cpsx401 copysign 701 -34 -> -701 +cpsx402 copysign -720 -34 -> -720 +cpsx403 copysign 701 -0 -> -701 +cpsx404 copysign -720 -0 -> -720 +cpsx405 copysign 701 +0 -> 701 +cpsx406 copysign -720 +0 -> 720 +cpsx407 copysign 701 +34 -> 701 +cpsx408 copysign -720 +34 -> 720 + +cpsx413 copysign 701 -Inf -> -701 +cpsx414 copysign -720 -Inf -> -720 +cpsx415 copysign 701 +Inf -> 701 +cpsx416 copysign -720 +Inf -> 720 + +cpsx420 copysign 701 -NaN -> -701 +cpsx421 copysign -720 -NaN -> -720 +cpsx422 copysign 701 +NaN -> 701 +cpsx423 copysign -720 +NaN -> 720 +cpsx425 copysign -720 +NaN8 -> 720 + +cpsx426 copysign 701 -sNaN -> -701 +cpsx427 copysign -720 -sNaN -> -720 +cpsx428 copysign 701 +sNaN -> 701 +cpsx429 copysign -720 +sNaN -> 720 +cpsx430 copysign -720 +sNaN3 -> 720 + diff --git a/Lib/test/decimaltestdata/ddAbs.decTest b/Lib/test/decimaltestdata/ddAbs.decTest index b98d64a11aa..c6f5a7cda39 100644 --- a/Lib/test/decimaltestdata/ddAbs.decTest +++ b/Lib/test/decimaltestdata/ddAbs.decTest @@ -1,126 +1,126 @@ ------------------------------------------------------------------------- --- ddAbs.decTest -- decDouble absolute value, heeding sNaN -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddabs001 abs '1' -> '1' -ddabs002 abs '-1' -> '1' -ddabs003 abs '1.00' -> '1.00' -ddabs004 abs '-1.00' -> '1.00' -ddabs005 abs '0' -> '0' -ddabs006 abs '0.00' -> '0.00' -ddabs007 abs '00.0' -> '0.0' -ddabs008 abs '00.00' -> '0.00' -ddabs009 abs '00' -> '0' - -ddabs010 abs '-2' -> '2' -ddabs011 abs '2' -> '2' -ddabs012 abs '-2.00' -> '2.00' -ddabs013 abs '2.00' -> '2.00' -ddabs014 abs '-0' -> '0' -ddabs015 abs '-0.00' -> '0.00' -ddabs016 abs '-00.0' -> '0.0' -ddabs017 abs '-00.00' -> '0.00' -ddabs018 abs '-00' -> '0' - -ddabs020 abs '-2000000' -> '2000000' -ddabs021 abs '2000000' -> '2000000' - -ddabs030 abs '+0.1' -> '0.1' -ddabs031 abs '-0.1' -> '0.1' -ddabs032 abs '+0.01' -> '0.01' -ddabs033 abs '-0.01' -> '0.01' -ddabs034 abs '+0.001' -> '0.001' -ddabs035 abs '-0.001' -> '0.001' -ddabs036 abs '+0.000001' -> '0.000001' -ddabs037 abs '-0.000001' -> '0.000001' -ddabs038 abs '+0.000000000001' -> '1E-12' -ddabs039 abs '-0.000000000001' -> '1E-12' - --- examples from decArith -ddabs040 abs '2.1' -> '2.1' -ddabs041 abs '-100' -> '100' -ddabs042 abs '101.5' -> '101.5' -ddabs043 abs '-101.5' -> '101.5' - --- more fixed, potential LHS swaps/overlays if done by subtract 0 -ddabs060 abs '-56267E-10' -> '0.0000056267' -ddabs061 abs '-56267E-5' -> '0.56267' -ddabs062 abs '-56267E-2' -> '562.67' -ddabs063 abs '-56267E-1' -> '5626.7' -ddabs065 abs '-56267E-0' -> '56267' - --- subnormals and underflow - --- long operand tests -ddabs321 abs 1234567890123456 -> 1234567890123456 -ddabs322 abs 12345678000 -> 12345678000 -ddabs323 abs 1234567800 -> 1234567800 -ddabs324 abs 1234567890 -> 1234567890 -ddabs325 abs 1234567891 -> 1234567891 -ddabs326 abs 12345678901 -> 12345678901 -ddabs327 abs 1234567896 -> 1234567896 - --- zeros -ddabs111 abs 0 -> 0 -ddabs112 abs -0 -> 0 -ddabs113 abs 0E+6 -> 0E+6 -ddabs114 abs -0E+6 -> 0E+6 -ddabs115 abs 0.0000 -> 0.0000 -ddabs116 abs -0.0000 -> 0.0000 -ddabs117 abs 0E-141 -> 0E-141 -ddabs118 abs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddabs121 abs 2682682682682682 -> 2682682682682682 -ddabs122 abs -2682682682682682 -> 2682682682682682 -ddabs123 abs 1341341341341341 -> 1341341341341341 -ddabs124 abs -1341341341341341 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddabs131 abs 9.999999999999999E+384 -> 9.999999999999999E+384 -ddabs132 abs 1E-383 -> 1E-383 -ddabs133 abs 1.000000000000000E-383 -> 1.000000000000000E-383 -ddabs134 abs 1E-398 -> 1E-398 Subnormal - -ddabs135 abs -1E-398 -> 1E-398 Subnormal -ddabs136 abs -1.000000000000000E-383 -> 1.000000000000000E-383 -ddabs137 abs -1E-383 -> 1E-383 -ddabs138 abs -9.999999999999999E+384 -> 9.999999999999999E+384 - --- specials -ddabs520 abs 'Inf' -> 'Infinity' -ddabs521 abs '-Inf' -> 'Infinity' -ddabs522 abs NaN -> NaN -ddabs523 abs sNaN -> NaN Invalid_operation -ddabs524 abs NaN22 -> NaN22 -ddabs525 abs sNaN33 -> NaN33 Invalid_operation -ddabs526 abs -NaN22 -> -NaN22 -ddabs527 abs -sNaN33 -> -NaN33 Invalid_operation - --- Null tests -ddabs900 abs # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddAbs.decTest -- decDouble absolute value, heeding sNaN -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddabs001 abs '1' -> '1' +ddabs002 abs '-1' -> '1' +ddabs003 abs '1.00' -> '1.00' +ddabs004 abs '-1.00' -> '1.00' +ddabs005 abs '0' -> '0' +ddabs006 abs '0.00' -> '0.00' +ddabs007 abs '00.0' -> '0.0' +ddabs008 abs '00.00' -> '0.00' +ddabs009 abs '00' -> '0' + +ddabs010 abs '-2' -> '2' +ddabs011 abs '2' -> '2' +ddabs012 abs '-2.00' -> '2.00' +ddabs013 abs '2.00' -> '2.00' +ddabs014 abs '-0' -> '0' +ddabs015 abs '-0.00' -> '0.00' +ddabs016 abs '-00.0' -> '0.0' +ddabs017 abs '-00.00' -> '0.00' +ddabs018 abs '-00' -> '0' + +ddabs020 abs '-2000000' -> '2000000' +ddabs021 abs '2000000' -> '2000000' + +ddabs030 abs '+0.1' -> '0.1' +ddabs031 abs '-0.1' -> '0.1' +ddabs032 abs '+0.01' -> '0.01' +ddabs033 abs '-0.01' -> '0.01' +ddabs034 abs '+0.001' -> '0.001' +ddabs035 abs '-0.001' -> '0.001' +ddabs036 abs '+0.000001' -> '0.000001' +ddabs037 abs '-0.000001' -> '0.000001' +ddabs038 abs '+0.000000000001' -> '1E-12' +ddabs039 abs '-0.000000000001' -> '1E-12' + +-- examples from decArith +ddabs040 abs '2.1' -> '2.1' +ddabs041 abs '-100' -> '100' +ddabs042 abs '101.5' -> '101.5' +ddabs043 abs '-101.5' -> '101.5' + +-- more fixed, potential LHS swaps/overlays if done by subtract 0 +ddabs060 abs '-56267E-10' -> '0.0000056267' +ddabs061 abs '-56267E-5' -> '0.56267' +ddabs062 abs '-56267E-2' -> '562.67' +ddabs063 abs '-56267E-1' -> '5626.7' +ddabs065 abs '-56267E-0' -> '56267' + +-- subnormals and underflow + +-- long operand tests +ddabs321 abs 1234567890123456 -> 1234567890123456 +ddabs322 abs 12345678000 -> 12345678000 +ddabs323 abs 1234567800 -> 1234567800 +ddabs324 abs 1234567890 -> 1234567890 +ddabs325 abs 1234567891 -> 1234567891 +ddabs326 abs 12345678901 -> 12345678901 +ddabs327 abs 1234567896 -> 1234567896 + +-- zeros +ddabs111 abs 0 -> 0 +ddabs112 abs -0 -> 0 +ddabs113 abs 0E+6 -> 0E+6 +ddabs114 abs -0E+6 -> 0E+6 +ddabs115 abs 0.0000 -> 0.0000 +ddabs116 abs -0.0000 -> 0.0000 +ddabs117 abs 0E-141 -> 0E-141 +ddabs118 abs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddabs121 abs 2682682682682682 -> 2682682682682682 +ddabs122 abs -2682682682682682 -> 2682682682682682 +ddabs123 abs 1341341341341341 -> 1341341341341341 +ddabs124 abs -1341341341341341 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddabs131 abs 9.999999999999999E+384 -> 9.999999999999999E+384 +ddabs132 abs 1E-383 -> 1E-383 +ddabs133 abs 1.000000000000000E-383 -> 1.000000000000000E-383 +ddabs134 abs 1E-398 -> 1E-398 Subnormal + +ddabs135 abs -1E-398 -> 1E-398 Subnormal +ddabs136 abs -1.000000000000000E-383 -> 1.000000000000000E-383 +ddabs137 abs -1E-383 -> 1E-383 +ddabs138 abs -9.999999999999999E+384 -> 9.999999999999999E+384 + +-- specials +ddabs520 abs 'Inf' -> 'Infinity' +ddabs521 abs '-Inf' -> 'Infinity' +ddabs522 abs NaN -> NaN +ddabs523 abs sNaN -> NaN Invalid_operation +ddabs524 abs NaN22 -> NaN22 +ddabs525 abs sNaN33 -> NaN33 Invalid_operation +ddabs526 abs -NaN22 -> -NaN22 +ddabs527 abs -sNaN33 -> -NaN33 Invalid_operation + +-- Null tests +ddabs900 abs # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddAdd.decTest b/Lib/test/decimaltestdata/ddAdd.decTest index 0f12ce44459..c0a25b34130 100644 --- a/Lib/test/decimaltestdata/ddAdd.decTest +++ b/Lib/test/decimaltestdata/ddAdd.decTest @@ -1,1328 +1,1328 @@ ------------------------------------------------------------------------- --- ddAdd.decTest -- decDouble addition -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decDoubles only; all arguments are --- representable in a decDouble -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- [first group are 'quick confidence check'] -ddadd001 add 1 1 -> 2 -ddadd002 add 2 3 -> 5 -ddadd003 add '5.75' '3.3' -> 9.05 -ddadd004 add '5' '-3' -> 2 -ddadd005 add '-5' '-3' -> -8 -ddadd006 add '-7' '2.5' -> -4.5 -ddadd007 add '0.7' '0.3' -> 1.0 -ddadd008 add '1.25' '1.25' -> 2.50 -ddadd009 add '1.23456789' '1.00000000' -> '2.23456789' -ddadd010 add '1.23456789' '1.00000011' -> '2.23456800' - --- 1234567890123456 1234567890123456 -ddadd011 add '0.4444444444444446' '0.5555555555555555' -> '1.000000000000000' Inexact Rounded -ddadd012 add '0.4444444444444445' '0.5555555555555555' -> '1.000000000000000' Rounded -ddadd013 add '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' -ddadd014 add '4444444444444444' '0.49' -> '4444444444444444' Inexact Rounded -ddadd015 add '4444444444444444' '0.499' -> '4444444444444444' Inexact Rounded -ddadd016 add '4444444444444444' '0.4999' -> '4444444444444444' Inexact Rounded -ddadd017 add '4444444444444444' '0.5000' -> '4444444444444444' Inexact Rounded -ddadd018 add '4444444444444444' '0.5001' -> '4444444444444445' Inexact Rounded -ddadd019 add '4444444444444444' '0.501' -> '4444444444444445' Inexact Rounded -ddadd020 add '4444444444444444' '0.51' -> '4444444444444445' Inexact Rounded - -ddadd021 add 0 1 -> 1 -ddadd022 add 1 1 -> 2 -ddadd023 add 2 1 -> 3 -ddadd024 add 3 1 -> 4 -ddadd025 add 4 1 -> 5 -ddadd026 add 5 1 -> 6 -ddadd027 add 6 1 -> 7 -ddadd028 add 7 1 -> 8 -ddadd029 add 8 1 -> 9 -ddadd030 add 9 1 -> 10 - --- some carrying effects -ddadd031 add '0.9998' '0.0000' -> '0.9998' -ddadd032 add '0.9998' '0.0001' -> '0.9999' -ddadd033 add '0.9998' '0.0002' -> '1.0000' -ddadd034 add '0.9998' '0.0003' -> '1.0001' - -ddadd035 add '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddadd036 add '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddadd037 add '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddadd038 add '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded -ddadd039 add '700000' '10000e+16' -> '1.000000000000007E+20' Rounded - --- symmetry: -ddadd040 add '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded -ddadd041 add '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded -ddadd042 add '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded -ddadd044 add '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded -ddadd045 add '10000e+16' '700000' -> '1.000000000000007E+20' Rounded - --- same, without rounding -ddadd046 add '10000e+9' '7' -> '10000000000007' -ddadd047 add '10000e+9' '70' -> '10000000000070' -ddadd048 add '10000e+9' '700' -> '10000000000700' -ddadd049 add '10000e+9' '7000' -> '10000000007000' -ddadd050 add '10000e+9' '70000' -> '10000000070000' -ddadd051 add '10000e+9' '700000' -> '10000000700000' -ddadd052 add '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -ddadd053 add '12' '7.00' -> '19.00' -ddadd054 add '1.3' '-1.07' -> '0.23' -ddadd055 add '1.3' '-1.30' -> '0.00' -ddadd056 add '1.3' '-2.07' -> '-0.77' -ddadd057 add '1E+2' '1E+4' -> '1.01E+4' - --- leading zero preservation -ddadd061 add 1 '0.0001' -> '1.0001' -ddadd062 add 1 '0.00001' -> '1.00001' -ddadd063 add 1 '0.000001' -> '1.000001' -ddadd064 add 1 '0.0000001' -> '1.0000001' -ddadd065 add 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -ddadd070 add 1 0 -> 1 -ddadd071 add 1 0. -> 1 -ddadd072 add 1 .0 -> 1.0 -ddadd073 add 1 0.0 -> 1.0 -ddadd074 add 1 0.00 -> 1.00 -ddadd075 add 0 1 -> 1 -ddadd076 add 0. 1 -> 1 -ddadd077 add .0 1 -> 1.0 -ddadd078 add 0.0 1 -> 1.0 -ddadd079 add 0.00 1 -> 1.00 - --- some carries -ddadd080 add 999999998 1 -> 999999999 -ddadd081 add 999999999 1 -> 1000000000 -ddadd082 add 99999999 1 -> 100000000 -ddadd083 add 9999999 1 -> 10000000 -ddadd084 add 999999 1 -> 1000000 -ddadd085 add 99999 1 -> 100000 -ddadd086 add 9999 1 -> 10000 -ddadd087 add 999 1 -> 1000 -ddadd088 add 99 1 -> 100 -ddadd089 add 9 1 -> 10 - - --- more LHS swaps -ddadd090 add '-56267E-10' 0 -> '-0.0000056267' -ddadd091 add '-56267E-6' 0 -> '-0.056267' -ddadd092 add '-56267E-5' 0 -> '-0.56267' -ddadd093 add '-56267E-4' 0 -> '-5.6267' -ddadd094 add '-56267E-3' 0 -> '-56.267' -ddadd095 add '-56267E-2' 0 -> '-562.67' -ddadd096 add '-56267E-1' 0 -> '-5626.7' -ddadd097 add '-56267E-0' 0 -> '-56267' -ddadd098 add '-5E-10' 0 -> '-5E-10' -ddadd099 add '-5E-7' 0 -> '-5E-7' -ddadd100 add '-5E-6' 0 -> '-0.000005' -ddadd101 add '-5E-5' 0 -> '-0.00005' -ddadd102 add '-5E-4' 0 -> '-0.0005' -ddadd103 add '-5E-1' 0 -> '-0.5' -ddadd104 add '-5E0' 0 -> '-5' -ddadd105 add '-5E1' 0 -> '-50' -ddadd106 add '-5E5' 0 -> '-500000' -ddadd107 add '-5E15' 0 -> '-5000000000000000' -ddadd108 add '-5E16' 0 -> '-5.000000000000000E+16' Rounded -ddadd109 add '-5E17' 0 -> '-5.000000000000000E+17' Rounded -ddadd110 add '-5E18' 0 -> '-5.000000000000000E+18' Rounded -ddadd111 add '-5E100' 0 -> '-5.000000000000000E+100' Rounded - --- more RHS swaps -ddadd113 add 0 '-56267E-10' -> '-0.0000056267' -ddadd114 add 0 '-56267E-6' -> '-0.056267' -ddadd116 add 0 '-56267E-5' -> '-0.56267' -ddadd117 add 0 '-56267E-4' -> '-5.6267' -ddadd119 add 0 '-56267E-3' -> '-56.267' -ddadd120 add 0 '-56267E-2' -> '-562.67' -ddadd121 add 0 '-56267E-1' -> '-5626.7' -ddadd122 add 0 '-56267E-0' -> '-56267' -ddadd123 add 0 '-5E-10' -> '-5E-10' -ddadd124 add 0 '-5E-7' -> '-5E-7' -ddadd125 add 0 '-5E-6' -> '-0.000005' -ddadd126 add 0 '-5E-5' -> '-0.00005' -ddadd127 add 0 '-5E-4' -> '-0.0005' -ddadd128 add 0 '-5E-1' -> '-0.5' -ddadd129 add 0 '-5E0' -> '-5' -ddadd130 add 0 '-5E1' -> '-50' -ddadd131 add 0 '-5E5' -> '-500000' -ddadd132 add 0 '-5E15' -> '-5000000000000000' -ddadd133 add 0 '-5E16' -> '-5.000000000000000E+16' Rounded -ddadd134 add 0 '-5E17' -> '-5.000000000000000E+17' Rounded -ddadd135 add 0 '-5E18' -> '-5.000000000000000E+18' Rounded -ddadd136 add 0 '-5E100' -> '-5.000000000000000E+100' Rounded - --- related -ddadd137 add 1 '0E-19' -> '1.000000000000000' Rounded -ddadd138 add -1 '0E-19' -> '-1.000000000000000' Rounded -ddadd139 add '0E-19' 1 -> '1.000000000000000' Rounded -ddadd140 add '0E-19' -1 -> '-1.000000000000000' Rounded -ddadd141 add 1E+11 0.0000 -> '100000000000.0000' -ddadd142 add 1E+11 0.00000 -> '100000000000.0000' Rounded -ddadd143 add 0.000 1E+12 -> '1000000000000.000' -ddadd144 add 0.0000 1E+12 -> '1000000000000.000' Rounded - --- [some of the next group are really constructor tests] -ddadd146 add '00.0' 0 -> '0.0' -ddadd147 add '0.00' 0 -> '0.00' -ddadd148 add 0 '0.00' -> '0.00' -ddadd149 add 0 '00.0' -> '0.0' -ddadd150 add '00.0' '0.00' -> '0.00' -ddadd151 add '0.00' '00.0' -> '0.00' -ddadd152 add '3' '.3' -> '3.3' -ddadd153 add '3.' '.3' -> '3.3' -ddadd154 add '3.0' '.3' -> '3.3' -ddadd155 add '3.00' '.3' -> '3.30' -ddadd156 add '3' '3' -> '6' -ddadd157 add '3' '+3' -> '6' -ddadd158 add '3' '-3' -> '0' -ddadd159 add '0.3' '-0.3' -> '0.0' -ddadd160 add '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -ddadd161 add '1E+12' '-1' -> '999999999999' -ddadd162 add '1E+12' '1.11' -> '1000000000001.11' -ddadd163 add '1.11' '1E+12' -> '1000000000001.11' -ddadd164 add '-1' '1E+12' -> '999999999999' -ddadd165 add '7E+12' '-1' -> '6999999999999' -ddadd166 add '7E+12' '1.11' -> '7000000000001.11' -ddadd167 add '1.11' '7E+12' -> '7000000000001.11' -ddadd168 add '-1' '7E+12' -> '6999999999999' - -rounding: half_up --- 1.234567890123456 1234567890123456 1 234567890123456 -ddadd170 add '4.444444444444444' '0.5555555555555567' -> '5.000000000000001' Inexact Rounded -ddadd171 add '4.444444444444444' '0.5555555555555566' -> '5.000000000000001' Inexact Rounded -ddadd172 add '4.444444444444444' '0.5555555555555565' -> '5.000000000000001' Inexact Rounded -ddadd173 add '4.444444444444444' '0.5555555555555564' -> '5.000000000000000' Inexact Rounded -ddadd174 add '4.444444444444444' '0.5555555555555553' -> '4.999999999999999' Inexact Rounded -ddadd175 add '4.444444444444444' '0.5555555555555552' -> '4.999999999999999' Inexact Rounded -ddadd176 add '4.444444444444444' '0.5555555555555551' -> '4.999999999999999' Inexact Rounded -ddadd177 add '4.444444444444444' '0.5555555555555550' -> '4.999999999999999' Rounded -ddadd178 add '4.444444444444444' '0.5555555555555545' -> '4.999999999999999' Inexact Rounded -ddadd179 add '4.444444444444444' '0.5555555555555544' -> '4.999999999999998' Inexact Rounded -ddadd180 add '4.444444444444444' '0.5555555555555543' -> '4.999999999999998' Inexact Rounded -ddadd181 add '4.444444444444444' '0.5555555555555542' -> '4.999999999999998' Inexact Rounded -ddadd182 add '4.444444444444444' '0.5555555555555541' -> '4.999999999999998' Inexact Rounded -ddadd183 add '4.444444444444444' '0.5555555555555540' -> '4.999999999999998' Rounded - --- and some more, including residue effects and different roundings -rounding: half_up -ddadd200 add '1234560123456789' 0 -> '1234560123456789' -ddadd201 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddadd202 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddadd203 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddadd204 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddadd205 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddadd206 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddadd207 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddadd208 add '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded -ddadd209 add '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded -ddadd210 add '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded -ddadd211 add '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded -ddadd212 add '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded -ddadd213 add '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded -ddadd214 add '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded -ddadd215 add '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded -ddadd216 add '1234560123456789' 1 -> '1234560123456790' -ddadd217 add '1234560123456789' 1.000000001 -> '1234560123456790' Inexact Rounded -ddadd218 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddadd219 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded - -rounding: half_even -ddadd220 add '1234560123456789' 0 -> '1234560123456789' -ddadd221 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddadd222 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddadd223 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddadd224 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddadd225 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddadd226 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddadd227 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddadd228 add '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded -ddadd229 add '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded -ddadd230 add '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded -ddadd231 add '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded -ddadd232 add '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded -ddadd233 add '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded -ddadd234 add '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded -ddadd235 add '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded -ddadd236 add '1234560123456789' 1 -> '1234560123456790' -ddadd237 add '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded -ddadd238 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddadd239 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded --- critical few with even bottom digit... -ddadd240 add '1234560123456788' 0.499999999 -> '1234560123456788' Inexact Rounded -ddadd241 add '1234560123456788' 0.5 -> '1234560123456788' Inexact Rounded -ddadd242 add '1234560123456788' 0.500000001 -> '1234560123456789' Inexact Rounded - -rounding: down -ddadd250 add '1234560123456789' 0 -> '1234560123456789' -ddadd251 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddadd252 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddadd253 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddadd254 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddadd255 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddadd256 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddadd257 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddadd258 add '1234560123456789' 0.5 -> '1234560123456789' Inexact Rounded -ddadd259 add '1234560123456789' 0.500000001 -> '1234560123456789' Inexact Rounded -ddadd260 add '1234560123456789' 0.500001 -> '1234560123456789' Inexact Rounded -ddadd261 add '1234560123456789' 0.51 -> '1234560123456789' Inexact Rounded -ddadd262 add '1234560123456789' 0.6 -> '1234560123456789' Inexact Rounded -ddadd263 add '1234560123456789' 0.9 -> '1234560123456789' Inexact Rounded -ddadd264 add '1234560123456789' 0.99999 -> '1234560123456789' Inexact Rounded -ddadd265 add '1234560123456789' 0.999999999 -> '1234560123456789' Inexact Rounded -ddadd266 add '1234560123456789' 1 -> '1234560123456790' -ddadd267 add '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded -ddadd268 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddadd269 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_up -ddadd301 add -1 1 -> 0 -ddadd302 add 0 1 -> 1 -ddadd303 add 1 1 -> 2 -ddadd304 add 12 1 -> 13 -ddadd305 add 98 1 -> 99 -ddadd306 add 99 1 -> 100 -ddadd307 add 100 1 -> 101 -ddadd308 add 101 1 -> 102 -ddadd309 add -1 -1 -> -2 -ddadd310 add 0 -1 -> -1 -ddadd311 add 1 -1 -> 0 -ddadd312 add 12 -1 -> 11 -ddadd313 add 98 -1 -> 97 -ddadd314 add 99 -1 -> 98 -ddadd315 add 100 -1 -> 99 -ddadd316 add 101 -1 -> 100 - -ddadd321 add -0.01 0.01 -> 0.00 -ddadd322 add 0.00 0.01 -> 0.01 -ddadd323 add 0.01 0.01 -> 0.02 -ddadd324 add 0.12 0.01 -> 0.13 -ddadd325 add 0.98 0.01 -> 0.99 -ddadd326 add 0.99 0.01 -> 1.00 -ddadd327 add 1.00 0.01 -> 1.01 -ddadd328 add 1.01 0.01 -> 1.02 -ddadd329 add -0.01 -0.01 -> -0.02 -ddadd330 add 0.00 -0.01 -> -0.01 -ddadd331 add 0.01 -0.01 -> 0.00 -ddadd332 add 0.12 -0.01 -> 0.11 -ddadd333 add 0.98 -0.01 -> 0.97 -ddadd334 add 0.99 -0.01 -> 0.98 -ddadd335 add 1.00 -0.01 -> 0.99 -ddadd336 add 1.01 -0.01 -> 1.00 - --- some more cases where adding 0 affects the coefficient -ddadd340 add 1E+3 0 -> 1000 -ddadd341 add 1E+15 0 -> 1000000000000000 -ddadd342 add 1E+16 0 -> 1.000000000000000E+16 Rounded -ddadd343 add 1E+20 0 -> 1.000000000000000E+20 Rounded --- which simply follow from these cases ... -ddadd344 add 1E+3 1 -> 1001 -ddadd345 add 1E+15 1 -> 1000000000000001 -ddadd346 add 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded -ddadd347 add 1E+20 1 -> 1.000000000000000E+20 Inexact Rounded -ddadd348 add 1E+3 7 -> 1007 -ddadd349 add 1E+15 7 -> 1000000000000007 -ddadd350 add 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded -ddadd351 add 1E+20 7 -> 1.000000000000000E+20 Inexact Rounded - --- tryzeros cases -rounding: half_up -ddadd360 add 0E+50 10000E+1 -> 1.0000E+5 -ddadd361 add 0E-50 10000E+1 -> 100000.0000000000 Rounded -ddadd362 add 10000E+1 0E-50 -> 100000.0000000000 Rounded -ddadd363 add 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact -ddadd364 add 9.999999999999999E+384 -9.999999999999999E+384 -> 0E+369 - --- a curiosity from JSR 13 testing -rounding: half_down -ddadd370 add 999999999999999 815 -> 1000000000000814 -ddadd371 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact -rounding: half_up -ddadd372 add 999999999999999 815 -> 1000000000000814 -ddadd373 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact -rounding: half_even -ddadd374 add 999999999999999 815 -> 1000000000000814 -ddadd375 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact - --- operands folded -ddadd380 add 1E+384 1E+384 -> 2.000000000000000E+384 Clamped -ddadd381 add 1E+380 1E+380 -> 2.00000000000E+380 Clamped -ddadd382 add 1E+376 1E+376 -> 2.0000000E+376 Clamped -ddadd383 add 1E+372 1E+372 -> 2.000E+372 Clamped -ddadd384 add 1E+370 1E+370 -> 2.0E+370 Clamped -ddadd385 add 1E+369 1E+369 -> 2E+369 -ddadd386 add 1E+368 1E+368 -> 2E+368 - --- ulp replacement tests -ddadd400 add 1 77e-14 -> 1.00000000000077 -ddadd401 add 1 77e-15 -> 1.000000000000077 -ddadd402 add 1 77e-16 -> 1.000000000000008 Inexact Rounded -ddadd403 add 1 77e-17 -> 1.000000000000001 Inexact Rounded -ddadd404 add 1 77e-18 -> 1.000000000000000 Inexact Rounded -ddadd405 add 1 77e-19 -> 1.000000000000000 Inexact Rounded -ddadd406 add 1 77e-299 -> 1.000000000000000 Inexact Rounded - -ddadd410 add 10 77e-14 -> 10.00000000000077 -ddadd411 add 10 77e-15 -> 10.00000000000008 Inexact Rounded -ddadd412 add 10 77e-16 -> 10.00000000000001 Inexact Rounded -ddadd413 add 10 77e-17 -> 10.00000000000000 Inexact Rounded -ddadd414 add 10 77e-18 -> 10.00000000000000 Inexact Rounded -ddadd415 add 10 77e-19 -> 10.00000000000000 Inexact Rounded -ddadd416 add 10 77e-299 -> 10.00000000000000 Inexact Rounded - -ddadd420 add 77e-14 1 -> 1.00000000000077 -ddadd421 add 77e-15 1 -> 1.000000000000077 -ddadd422 add 77e-16 1 -> 1.000000000000008 Inexact Rounded -ddadd423 add 77e-17 1 -> 1.000000000000001 Inexact Rounded -ddadd424 add 77e-18 1 -> 1.000000000000000 Inexact Rounded -ddadd425 add 77e-19 1 -> 1.000000000000000 Inexact Rounded -ddadd426 add 77e-299 1 -> 1.000000000000000 Inexact Rounded - -ddadd430 add 77e-14 10 -> 10.00000000000077 -ddadd431 add 77e-15 10 -> 10.00000000000008 Inexact Rounded -ddadd432 add 77e-16 10 -> 10.00000000000001 Inexact Rounded -ddadd433 add 77e-17 10 -> 10.00000000000000 Inexact Rounded -ddadd434 add 77e-18 10 -> 10.00000000000000 Inexact Rounded -ddadd435 add 77e-19 10 -> 10.00000000000000 Inexact Rounded -ddadd436 add 77e-299 10 -> 10.00000000000000 Inexact Rounded - --- fastpath boundary (more in dqadd) --- 1234567890123456 -ddadd539 add '4444444444444444' '3333333333333333' -> '7777777777777777' -ddadd540 add '4444444444444444' '4444444444444444' -> '8888888888888888' -ddadd541 add '4444444444444444' '5555555555555555' -> '9999999999999999' -ddadd542 add '3333333333333333' '4444444444444444' -> '7777777777777777' -ddadd543 add '4444444444444444' '4444444444444444' -> '8888888888888888' -ddadd544 add '5555555555555555' '4444444444444444' -> '9999999999999999' -ddadd545 add '3000004000000000' '3000000000000040' -> '6000004000000040' -ddadd546 add '3000000400000000' '4000000000000400' -> '7000000400000400' -ddadd547 add '3000000040000000' '5000000000004000' -> '8000000040004000' -ddadd548 add '4000000004000000' '3000000000040000' -> '7000000004040000' -ddadd549 add '4000000000400000' '4000000000400000' -> '8000000000800000' -ddadd550 add '4000000000040000' '5000000004000000' -> '9000000004040000' -ddadd551 add '5000000000004000' '3000000040000000' -> '8000000040004000' -ddadd552 add '5000000000000400' '4000000400000000' -> '9000000400000400' -ddadd553 add '5000000000000040' '5000004000000000' -> 1.000000400000004E+16 Rounded --- check propagation -ddadd554 add '8999999999999999' '0000000000000001' -> 9000000000000000 -ddadd555 add '0000000000000001' '8999999999999999' -> 9000000000000000 -ddadd556 add '0999999999999999' '0000000000000001' -> 1000000000000000 -ddadd557 add '0000000000000001' '0999999999999999' -> 1000000000000000 -ddadd558 add '4444444444444444' '4555555555555556' -> 9000000000000000 -ddadd559 add '4555555555555556' '4444444444444444' -> 9000000000000000 - --- negative ulps -ddadd6440 add 1 -77e-14 -> 0.99999999999923 -ddadd6441 add 1 -77e-15 -> 0.999999999999923 -ddadd6442 add 1 -77e-16 -> 0.9999999999999923 -ddadd6443 add 1 -77e-17 -> 0.9999999999999992 Inexact Rounded -ddadd6444 add 1 -77e-18 -> 0.9999999999999999 Inexact Rounded -ddadd6445 add 1 -77e-19 -> 1.000000000000000 Inexact Rounded -ddadd6446 add 1 -77e-99 -> 1.000000000000000 Inexact Rounded - -ddadd6450 add 10 -77e-14 -> 9.99999999999923 -ddadd6451 add 10 -77e-15 -> 9.999999999999923 -ddadd6452 add 10 -77e-16 -> 9.999999999999992 Inexact Rounded -ddadd6453 add 10 -77e-17 -> 9.999999999999999 Inexact Rounded -ddadd6454 add 10 -77e-18 -> 10.00000000000000 Inexact Rounded -ddadd6455 add 10 -77e-19 -> 10.00000000000000 Inexact Rounded -ddadd6456 add 10 -77e-99 -> 10.00000000000000 Inexact Rounded - -ddadd6460 add -77e-14 1 -> 0.99999999999923 -ddadd6461 add -77e-15 1 -> 0.999999999999923 -ddadd6462 add -77e-16 1 -> 0.9999999999999923 -ddadd6463 add -77e-17 1 -> 0.9999999999999992 Inexact Rounded -ddadd6464 add -77e-18 1 -> 0.9999999999999999 Inexact Rounded -ddadd6465 add -77e-19 1 -> 1.000000000000000 Inexact Rounded -ddadd6466 add -77e-99 1 -> 1.000000000000000 Inexact Rounded - -ddadd6470 add -77e-14 10 -> 9.99999999999923 -ddadd6471 add -77e-15 10 -> 9.999999999999923 -ddadd6472 add -77e-16 10 -> 9.999999999999992 Inexact Rounded -ddadd6473 add -77e-17 10 -> 9.999999999999999 Inexact Rounded -ddadd6474 add -77e-18 10 -> 10.00000000000000 Inexact Rounded -ddadd6475 add -77e-19 10 -> 10.00000000000000 Inexact Rounded -ddadd6476 add -77e-99 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -ddadd6480 add -1 77e-14 -> -0.99999999999923 -ddadd6481 add -1 77e-15 -> -0.999999999999923 -ddadd6482 add -1 77e-16 -> -0.9999999999999923 -ddadd6483 add -1 77e-17 -> -0.9999999999999992 Inexact Rounded -ddadd6484 add -1 77e-18 -> -0.9999999999999999 Inexact Rounded -ddadd6485 add -1 77e-19 -> -1.000000000000000 Inexact Rounded -ddadd6486 add -1 77e-99 -> -1.000000000000000 Inexact Rounded - -ddadd6490 add -10 77e-14 -> -9.99999999999923 -ddadd6491 add -10 77e-15 -> -9.999999999999923 -ddadd6492 add -10 77e-16 -> -9.999999999999992 Inexact Rounded -ddadd6493 add -10 77e-17 -> -9.999999999999999 Inexact Rounded -ddadd6494 add -10 77e-18 -> -10.00000000000000 Inexact Rounded -ddadd6495 add -10 77e-19 -> -10.00000000000000 Inexact Rounded -ddadd6496 add -10 77e-99 -> -10.00000000000000 Inexact Rounded - -ddadd6500 add 77e-14 -1 -> -0.99999999999923 -ddadd6501 add 77e-15 -1 -> -0.999999999999923 -ddadd6502 add 77e-16 -1 -> -0.9999999999999923 -ddadd6503 add 77e-17 -1 -> -0.9999999999999992 Inexact Rounded -ddadd6504 add 77e-18 -1 -> -0.9999999999999999 Inexact Rounded -ddadd6505 add 77e-19 -1 -> -1.000000000000000 Inexact Rounded -ddadd6506 add 77e-99 -1 -> -1.000000000000000 Inexact Rounded - -ddadd6510 add 77e-14 -10 -> -9.99999999999923 -ddadd6511 add 77e-15 -10 -> -9.999999999999923 -ddadd6512 add 77e-16 -10 -> -9.999999999999992 Inexact Rounded -ddadd6513 add 77e-17 -10 -> -9.999999999999999 Inexact Rounded -ddadd6514 add 77e-18 -10 -> -10.00000000000000 Inexact Rounded -ddadd6515 add 77e-19 -10 -> -10.00000000000000 Inexact Rounded -ddadd6516 add 77e-99 -10 -> -10.00000000000000 Inexact Rounded - --- and some more residue effects and different roundings -rounding: half_up -ddadd6540 add '6543210123456789' 0 -> '6543210123456789' -ddadd6541 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddadd6542 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddadd6543 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddadd6544 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddadd6545 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddadd6546 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddadd6547 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddadd6548 add '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -ddadd6549 add '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -ddadd6550 add '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -ddadd6551 add '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -ddadd6552 add '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -ddadd6553 add '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -ddadd6554 add '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -ddadd6555 add '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded -ddadd6556 add '6543210123456789' 1 -> '6543210123456790' -ddadd6557 add '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded -ddadd6558 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddadd6559 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - -rounding: half_even -ddadd6560 add '6543210123456789' 0 -> '6543210123456789' -ddadd6561 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddadd6562 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddadd6563 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddadd6564 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddadd6565 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddadd6566 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddadd6567 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddadd6568 add '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -ddadd6569 add '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -ddadd6570 add '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -ddadd6571 add '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -ddadd6572 add '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -ddadd6573 add '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -ddadd6574 add '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -ddadd6575 add '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded -ddadd6576 add '6543210123456789' 1 -> '6543210123456790' -ddadd6577 add '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -ddadd6578 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddadd6579 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - --- critical few with even bottom digit... -ddadd7540 add '6543210123456788' 0.499999999 -> '6543210123456788' Inexact Rounded -ddadd7541 add '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded -ddadd7542 add '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded - -rounding: down -ddadd7550 add '6543210123456789' 0 -> '6543210123456789' -ddadd7551 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddadd7552 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddadd7553 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddadd7554 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddadd7555 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddadd7556 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddadd7557 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddadd7558 add '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded -ddadd7559 add '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded -ddadd7560 add '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded -ddadd7561 add '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded -ddadd7562 add '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded -ddadd7563 add '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded -ddadd7564 add '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded -ddadd7565 add '6543210123456789' 0.999999999 -> '6543210123456789' Inexact Rounded -ddadd7566 add '6543210123456789' 1 -> '6543210123456790' -ddadd7567 add '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -ddadd7568 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddadd7569 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - --- verify a query -rounding: down -ddadd7661 add 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded -ddadd7662 add 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded -ddadd7663 add 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded -ddadd7664 add 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded - --- more zeros, etc. -rounding: half_even - -ddadd7701 add 5.00 1.00E-3 -> 5.00100 -ddadd7702 add 00.00 0.000 -> 0.000 -ddadd7703 add 00.00 0E-3 -> 0.000 -ddadd7704 add 0E-3 00.00 -> 0.000 - -ddadd7710 add 0E+3 00.00 -> 0.00 -ddadd7711 add 0E+3 00.0 -> 0.0 -ddadd7712 add 0E+3 00. -> 0 -ddadd7713 add 0E+3 00.E+1 -> 0E+1 -ddadd7714 add 0E+3 00.E+2 -> 0E+2 -ddadd7715 add 0E+3 00.E+3 -> 0E+3 -ddadd7716 add 0E+3 00.E+4 -> 0E+3 -ddadd7717 add 0E+3 00.E+5 -> 0E+3 -ddadd7718 add 0E+3 -00.0 -> 0.0 -ddadd7719 add 0E+3 -00. -> 0 -ddadd7731 add 0E+3 -00.E+1 -> 0E+1 - -ddadd7720 add 00.00 0E+3 -> 0.00 -ddadd7721 add 00.0 0E+3 -> 0.0 -ddadd7722 add 00. 0E+3 -> 0 -ddadd7723 add 00.E+1 0E+3 -> 0E+1 -ddadd7724 add 00.E+2 0E+3 -> 0E+2 -ddadd7725 add 00.E+3 0E+3 -> 0E+3 -ddadd7726 add 00.E+4 0E+3 -> 0E+3 -ddadd7727 add 00.E+5 0E+3 -> 0E+3 -ddadd7728 add -00.00 0E+3 -> 0.00 -ddadd7729 add -00.0 0E+3 -> 0.0 -ddadd7730 add -00. 0E+3 -> 0 - -ddadd7732 add 0 0 -> 0 -ddadd7733 add 0 -0 -> 0 -ddadd7734 add -0 0 -> 0 -ddadd7735 add -0 -0 -> -0 -- IEEE 854 special case - -ddadd7736 add 1 -1 -> 0 -ddadd7737 add -1 -1 -> -2 -ddadd7738 add 1 1 -> 2 -ddadd7739 add -1 1 -> 0 - -ddadd7741 add 0 -1 -> -1 -ddadd7742 add -0 -1 -> -1 -ddadd7743 add 0 1 -> 1 -ddadd7744 add -0 1 -> 1 -ddadd7745 add -1 0 -> -1 -ddadd7746 add -1 -0 -> -1 -ddadd7747 add 1 0 -> 1 -ddadd7748 add 1 -0 -> 1 - -ddadd7751 add 0.0 -1 -> -1.0 -ddadd7752 add -0.0 -1 -> -1.0 -ddadd7753 add 0.0 1 -> 1.0 -ddadd7754 add -0.0 1 -> 1.0 -ddadd7755 add -1.0 0 -> -1.0 -ddadd7756 add -1.0 -0 -> -1.0 -ddadd7757 add 1.0 0 -> 1.0 -ddadd7758 add 1.0 -0 -> 1.0 - -ddadd7761 add 0 -1.0 -> -1.0 -ddadd7762 add -0 -1.0 -> -1.0 -ddadd7763 add 0 1.0 -> 1.0 -ddadd7764 add -0 1.0 -> 1.0 -ddadd7765 add -1 0.0 -> -1.0 -ddadd7766 add -1 -0.0 -> -1.0 -ddadd7767 add 1 0.0 -> 1.0 -ddadd7768 add 1 -0.0 -> 1.0 - -ddadd7771 add 0.0 -1.0 -> -1.0 -ddadd7772 add -0.0 -1.0 -> -1.0 -ddadd7773 add 0.0 1.0 -> 1.0 -ddadd7774 add -0.0 1.0 -> 1.0 -ddadd7775 add -1.0 0.0 -> -1.0 -ddadd7776 add -1.0 -0.0 -> -1.0 -ddadd7777 add 1.0 0.0 -> 1.0 -ddadd7778 add 1.0 -0.0 -> 1.0 - --- Specials -ddadd7780 add -Inf -Inf -> -Infinity -ddadd7781 add -Inf -1000 -> -Infinity -ddadd7782 add -Inf -1 -> -Infinity -ddadd7783 add -Inf -0 -> -Infinity -ddadd7784 add -Inf 0 -> -Infinity -ddadd7785 add -Inf 1 -> -Infinity -ddadd7786 add -Inf 1000 -> -Infinity -ddadd7787 add -1000 -Inf -> -Infinity -ddadd7788 add -Inf -Inf -> -Infinity -ddadd7789 add -1 -Inf -> -Infinity -ddadd7790 add -0 -Inf -> -Infinity -ddadd7791 add 0 -Inf -> -Infinity -ddadd7792 add 1 -Inf -> -Infinity -ddadd7793 add 1000 -Inf -> -Infinity -ddadd7794 add Inf -Inf -> NaN Invalid_operation - -ddadd7800 add Inf -Inf -> NaN Invalid_operation -ddadd7801 add Inf -1000 -> Infinity -ddadd7802 add Inf -1 -> Infinity -ddadd7803 add Inf -0 -> Infinity -ddadd7804 add Inf 0 -> Infinity -ddadd7805 add Inf 1 -> Infinity -ddadd7806 add Inf 1000 -> Infinity -ddadd7807 add Inf Inf -> Infinity -ddadd7808 add -1000 Inf -> Infinity -ddadd7809 add -Inf Inf -> NaN Invalid_operation -ddadd7810 add -1 Inf -> Infinity -ddadd7811 add -0 Inf -> Infinity -ddadd7812 add 0 Inf -> Infinity -ddadd7813 add 1 Inf -> Infinity -ddadd7814 add 1000 Inf -> Infinity -ddadd7815 add Inf Inf -> Infinity - -ddadd7821 add NaN -Inf -> NaN -ddadd7822 add NaN -1000 -> NaN -ddadd7823 add NaN -1 -> NaN -ddadd7824 add NaN -0 -> NaN -ddadd7825 add NaN 0 -> NaN -ddadd7826 add NaN 1 -> NaN -ddadd7827 add NaN 1000 -> NaN -ddadd7828 add NaN Inf -> NaN -ddadd7829 add NaN NaN -> NaN -ddadd7830 add -Inf NaN -> NaN -ddadd7831 add -1000 NaN -> NaN -ddadd7832 add -1 NaN -> NaN -ddadd7833 add -0 NaN -> NaN -ddadd7834 add 0 NaN -> NaN -ddadd7835 add 1 NaN -> NaN -ddadd7836 add 1000 NaN -> NaN -ddadd7837 add Inf NaN -> NaN - -ddadd7841 add sNaN -Inf -> NaN Invalid_operation -ddadd7842 add sNaN -1000 -> NaN Invalid_operation -ddadd7843 add sNaN -1 -> NaN Invalid_operation -ddadd7844 add sNaN -0 -> NaN Invalid_operation -ddadd7845 add sNaN 0 -> NaN Invalid_operation -ddadd7846 add sNaN 1 -> NaN Invalid_operation -ddadd7847 add sNaN 1000 -> NaN Invalid_operation -ddadd7848 add sNaN NaN -> NaN Invalid_operation -ddadd7849 add sNaN sNaN -> NaN Invalid_operation -ddadd7850 add NaN sNaN -> NaN Invalid_operation -ddadd7851 add -Inf sNaN -> NaN Invalid_operation -ddadd7852 add -1000 sNaN -> NaN Invalid_operation -ddadd7853 add -1 sNaN -> NaN Invalid_operation -ddadd7854 add -0 sNaN -> NaN Invalid_operation -ddadd7855 add 0 sNaN -> NaN Invalid_operation -ddadd7856 add 1 sNaN -> NaN Invalid_operation -ddadd7857 add 1000 sNaN -> NaN Invalid_operation -ddadd7858 add Inf sNaN -> NaN Invalid_operation -ddadd7859 add NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddadd7861 add NaN1 -Inf -> NaN1 -ddadd7862 add +NaN2 -1000 -> NaN2 -ddadd7863 add NaN3 1000 -> NaN3 -ddadd7864 add NaN4 Inf -> NaN4 -ddadd7865 add NaN5 +NaN6 -> NaN5 -ddadd7866 add -Inf NaN7 -> NaN7 -ddadd7867 add -1000 NaN8 -> NaN8 -ddadd7868 add 1000 NaN9 -> NaN9 -ddadd7869 add Inf +NaN10 -> NaN10 -ddadd7871 add sNaN11 -Inf -> NaN11 Invalid_operation -ddadd7872 add sNaN12 -1000 -> NaN12 Invalid_operation -ddadd7873 add sNaN13 1000 -> NaN13 Invalid_operation -ddadd7874 add sNaN14 NaN17 -> NaN14 Invalid_operation -ddadd7875 add sNaN15 sNaN18 -> NaN15 Invalid_operation -ddadd7876 add NaN16 sNaN19 -> NaN19 Invalid_operation -ddadd7877 add -Inf +sNaN20 -> NaN20 Invalid_operation -ddadd7878 add -1000 sNaN21 -> NaN21 Invalid_operation -ddadd7879 add 1000 sNaN22 -> NaN22 Invalid_operation -ddadd7880 add Inf sNaN23 -> NaN23 Invalid_operation -ddadd7881 add +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddadd7882 add -NaN26 NaN28 -> -NaN26 -ddadd7883 add -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddadd7884 add 1000 -NaN30 -> -NaN30 -ddadd7885 add 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Here we explore near the boundary of rounding a subnormal to Nmin -ddadd7575 add 1E-383 -1E-398 -> 9.99999999999999E-384 Subnormal -ddadd7576 add -1E-383 +1E-398 -> -9.99999999999999E-384 Subnormal - --- and another curious case -ddadd7577 add 7.000000000000E-385 -1.00000E-391 -> 6.999999000000E-385 Subnormal - --- check overflow edge case --- 1234567890123456 -ddadd7972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 -ddadd7973 add 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded -ddadd7974 add 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded -ddadd7975 add 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded -ddadd7976 add 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded -ddadd7977 add 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded -ddadd7978 add 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded -ddadd7979 add 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded -ddadd7980 add 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded -ddadd7981 add 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded -ddadd7982 add 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded -ddadd7983 add 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded -ddadd7984 add 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded - -ddadd7985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 -ddadd7986 add -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded -ddadd7987 add -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded -ddadd7988 add -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded -ddadd7989 add -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded -ddadd7990 add -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded -ddadd7991 add -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded -ddadd7992 add -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded -ddadd7993 add -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded -ddadd7994 add -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded -ddadd7995 add -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded -ddadd7996 add -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded -ddadd7997 add -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -ddadd71100 add 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact -ddadd71101 add 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact -ddadd71103 add +1 -1e-383 -> 0.9999999999999999 Rounded Inexact -ddadd71104 add 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact -ddadd71105 add 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact -ddadd71106 add 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact -ddadd71107 add 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact -ddadd71108 add 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact -ddadd71109 add 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact - -rounding: ceiling -ddadd71110 add -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact -ddadd71111 add -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact -ddadd71113 add -1 +1e-383 -> -0.9999999999999999 Rounded Inexact -ddadd71114 add -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact -ddadd71115 add -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact -ddadd71116 add -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact -ddadd71117 add -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact -ddadd71118 add -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact -ddadd71119 add -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -ddadd71300 add 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded -ddadd71310 add 1E16 -0.51 -> 9999999999999999 Inexact Rounded -ddadd71311 add 1E16 -0.501 -> 9999999999999999 Inexact Rounded -ddadd71312 add 1E16 -0.5001 -> 9999999999999999 Inexact Rounded -ddadd71313 add 1E16 -0.50001 -> 9999999999999999 Inexact Rounded -ddadd71314 add 1E16 -0.500001 -> 9999999999999999 Inexact Rounded -ddadd71315 add 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded -ddadd71316 add 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded -ddadd71317 add 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded -ddadd71318 add 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded -ddadd71319 add 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded -ddadd71320 add 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded -ddadd71321 add 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded -ddadd71322 add 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded -ddadd71323 add 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded -ddadd71324 add 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded -ddadd71325 add 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71326 add 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71327 add 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71328 add 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71329 add 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71330 add 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71331 add 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71332 add 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71333 add 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71334 add 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71335 add 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71336 add 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71337 add 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71338 add 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded -ddadd71339 add 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded - -ddadd71340 add 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded -ddadd71341 add 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded - -ddadd71349 add 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded -ddadd71350 add 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded -ddadd71351 add 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded -ddadd71352 add 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded -ddadd71353 add 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded -ddadd71354 add 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded -ddadd71355 add 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded -ddadd71356 add 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded -ddadd71357 add 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded -ddadd71358 add 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded -ddadd71359 add 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded -ddadd71360 add 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded -ddadd71361 add 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded -ddadd71362 add 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded -ddadd71363 add 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded -ddadd71364 add 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded -ddadd71365 add 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71367 add 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71368 add 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71369 add 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71370 add 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71371 add 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71372 add 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71373 add 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71374 add 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71375 add 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71376 add 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71377 add 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71378 add 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded -ddadd71379 add 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded -ddadd71380 add 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded -ddadd71381 add 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded -ddadd71382 add 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71383 add 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71384 add 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71385 add 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71386 add 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71387 add 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71388 add 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71389 add 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71390 add 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71391 add 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71392 add 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71393 add 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71394 add 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded -ddadd71395 add 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded -ddadd71396 add 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -ddadd71420 add 0 1.123456789012345 -> 1.123456789012345 -ddadd71421 add 0 1.123456789012345E-1 -> 0.1123456789012345 -ddadd71422 add 0 1.123456789012345E-2 -> 0.01123456789012345 -ddadd71423 add 0 1.123456789012345E-3 -> 0.001123456789012345 -ddadd71424 add 0 1.123456789012345E-4 -> 0.0001123456789012345 -ddadd71425 add 0 1.123456789012345E-5 -> 0.00001123456789012345 -ddadd71426 add 0 1.123456789012345E-6 -> 0.000001123456789012345 -ddadd71427 add 0 1.123456789012345E-7 -> 1.123456789012345E-7 -ddadd71428 add 0 1.123456789012345E-8 -> 1.123456789012345E-8 -ddadd71429 add 0 1.123456789012345E-9 -> 1.123456789012345E-9 -ddadd71430 add 0 1.123456789012345E-10 -> 1.123456789012345E-10 -ddadd71431 add 0 1.123456789012345E-11 -> 1.123456789012345E-11 -ddadd71432 add 0 1.123456789012345E-12 -> 1.123456789012345E-12 -ddadd71433 add 0 1.123456789012345E-13 -> 1.123456789012345E-13 -ddadd71434 add 0 1.123456789012345E-14 -> 1.123456789012345E-14 -ddadd71435 add 0 1.123456789012345E-15 -> 1.123456789012345E-15 -ddadd71436 add 0 1.123456789012345E-16 -> 1.123456789012345E-16 -ddadd71437 add 0 1.123456789012345E-17 -> 1.123456789012345E-17 -ddadd71438 add 0 1.123456789012345E-18 -> 1.123456789012345E-18 -ddadd71439 add 0 1.123456789012345E-19 -> 1.123456789012345E-19 - --- same, reversed 0 -ddadd71440 add 1.123456789012345 0 -> 1.123456789012345 -ddadd71441 add 1.123456789012345E-1 0 -> 0.1123456789012345 -ddadd71442 add 1.123456789012345E-2 0 -> 0.01123456789012345 -ddadd71443 add 1.123456789012345E-3 0 -> 0.001123456789012345 -ddadd71444 add 1.123456789012345E-4 0 -> 0.0001123456789012345 -ddadd71445 add 1.123456789012345E-5 0 -> 0.00001123456789012345 -ddadd71446 add 1.123456789012345E-6 0 -> 0.000001123456789012345 -ddadd71447 add 1.123456789012345E-7 0 -> 1.123456789012345E-7 -ddadd71448 add 1.123456789012345E-8 0 -> 1.123456789012345E-8 -ddadd71449 add 1.123456789012345E-9 0 -> 1.123456789012345E-9 -ddadd71450 add 1.123456789012345E-10 0 -> 1.123456789012345E-10 -ddadd71451 add 1.123456789012345E-11 0 -> 1.123456789012345E-11 -ddadd71452 add 1.123456789012345E-12 0 -> 1.123456789012345E-12 -ddadd71453 add 1.123456789012345E-13 0 -> 1.123456789012345E-13 -ddadd71454 add 1.123456789012345E-14 0 -> 1.123456789012345E-14 -ddadd71455 add 1.123456789012345E-15 0 -> 1.123456789012345E-15 -ddadd71456 add 1.123456789012345E-16 0 -> 1.123456789012345E-16 -ddadd71457 add 1.123456789012345E-17 0 -> 1.123456789012345E-17 -ddadd71458 add 1.123456789012345E-18 0 -> 1.123456789012345E-18 -ddadd71459 add 1.123456789012345E-19 0 -> 1.123456789012345E-19 - --- same, Es on the 0 -ddadd71460 add 1.123456789012345 0E-0 -> 1.123456789012345 -ddadd71461 add 1.123456789012345 0E-1 -> 1.123456789012345 -ddadd71462 add 1.123456789012345 0E-2 -> 1.123456789012345 -ddadd71463 add 1.123456789012345 0E-3 -> 1.123456789012345 -ddadd71464 add 1.123456789012345 0E-4 -> 1.123456789012345 -ddadd71465 add 1.123456789012345 0E-5 -> 1.123456789012345 -ddadd71466 add 1.123456789012345 0E-6 -> 1.123456789012345 -ddadd71467 add 1.123456789012345 0E-7 -> 1.123456789012345 -ddadd71468 add 1.123456789012345 0E-8 -> 1.123456789012345 -ddadd71469 add 1.123456789012345 0E-9 -> 1.123456789012345 -ddadd71470 add 1.123456789012345 0E-10 -> 1.123456789012345 -ddadd71471 add 1.123456789012345 0E-11 -> 1.123456789012345 -ddadd71472 add 1.123456789012345 0E-12 -> 1.123456789012345 -ddadd71473 add 1.123456789012345 0E-13 -> 1.123456789012345 -ddadd71474 add 1.123456789012345 0E-14 -> 1.123456789012345 -ddadd71475 add 1.123456789012345 0E-15 -> 1.123456789012345 --- next four flag Rounded because the 0 extends the result -ddadd71476 add 1.123456789012345 0E-16 -> 1.123456789012345 Rounded -ddadd71477 add 1.123456789012345 0E-17 -> 1.123456789012345 Rounded -ddadd71478 add 1.123456789012345 0E-18 -> 1.123456789012345 Rounded -ddadd71479 add 1.123456789012345 0E-19 -> 1.123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -ddadd71500 add 0 0E-19 -> 0E-19 -ddadd71501 add -0 0E-19 -> 0E-19 -ddadd71502 add 0 -0E-19 -> 0E-19 -ddadd71503 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71511 add -11 11 -> 0 -ddadd71512 add 11 -11 -> 0 - -rounding: half_down --- exact zeros from zeros -ddadd71520 add 0 0E-19 -> 0E-19 -ddadd71521 add -0 0E-19 -> 0E-19 -ddadd71522 add 0 -0E-19 -> 0E-19 -ddadd71523 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71531 add -11 11 -> 0 -ddadd71532 add 11 -11 -> 0 - -rounding: half_even --- exact zeros from zeros -ddadd71540 add 0 0E-19 -> 0E-19 -ddadd71541 add -0 0E-19 -> 0E-19 -ddadd71542 add 0 -0E-19 -> 0E-19 -ddadd71543 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71551 add -11 11 -> 0 -ddadd71552 add 11 -11 -> 0 - -rounding: up --- exact zeros from zeros -ddadd71560 add 0 0E-19 -> 0E-19 -ddadd71561 add -0 0E-19 -> 0E-19 -ddadd71562 add 0 -0E-19 -> 0E-19 -ddadd71563 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71571 add -11 11 -> 0 -ddadd71572 add 11 -11 -> 0 - -rounding: down --- exact zeros from zeros -ddadd71580 add 0 0E-19 -> 0E-19 -ddadd71581 add -0 0E-19 -> 0E-19 -ddadd71582 add 0 -0E-19 -> 0E-19 -ddadd71583 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71591 add -11 11 -> 0 -ddadd71592 add 11 -11 -> 0 - -rounding: ceiling --- exact zeros from zeros -ddadd71600 add 0 0E-19 -> 0E-19 -ddadd71601 add -0 0E-19 -> 0E-19 -ddadd71602 add 0 -0E-19 -> 0E-19 -ddadd71603 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71611 add -11 11 -> 0 -ddadd71612 add 11 -11 -> 0 - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -ddadd71620 add 0 0E-19 -> 0E-19 -ddadd71621 add -0 0E-19 -> -0E-19 -- * -ddadd71622 add 0 -0E-19 -> -0E-19 -- * -ddadd71623 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddadd71631 add -11 11 -> -0 -- * -ddadd71632 add 11 -11 -> -0 -- * - --- Examples from SQL proposal (Krishna Kulkarni) -ddadd71701 add 130E-2 120E-2 -> 2.50 -ddadd71702 add 130E-2 12E-1 -> 2.50 -ddadd71703 add 130E-2 1E0 -> 2.30 -ddadd71704 add 1E2 1E4 -> 1.01E+4 -ddadd71705 add 130E-2 -120E-2 -> 0.10 -ddadd71706 add 130E-2 -12E-1 -> 0.10 -ddadd71707 add 130E-2 -1E0 -> 0.30 -ddadd71708 add 1E2 -1E4 -> -9.9E+3 - --- query from Vincent Kulandaisamy -rounding: ceiling -ddadd71801 add 7.8822773805862E+277 -5.1757503820663E-21 -> 7.882277380586200E+277 Inexact Rounded -ddadd71802 add 7.882277380586200E+277 12.341 -> 7.882277380586201E+277 Inexact Rounded -ddadd71803 add 7.882277380586201E+277 2.7270545046613E-31 -> 7.882277380586202E+277 Inexact Rounded - -ddadd71811 add 12.341 -5.1757503820663E-21 -> 12.34100000000000 Inexact Rounded -ddadd71812 add 12.34100000000000 2.7270545046613E-31 -> 12.34100000000001 Inexact Rounded -ddadd71813 add 12.34100000000001 7.8822773805862E+277 -> 7.882277380586201E+277 Inexact Rounded - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -ddadd75001 add 1234567890123456 1 -> 1234567890123457 -ddadd75002 add 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded -ddadd75003 add 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded -ddadd75004 add 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded -ddadd75005 add 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded -ddadd75006 add 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded -ddadd75007 add 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded -ddadd75008 add 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded -ddadd75009 add 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded -ddadd75010 add 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded -ddadd75011 add 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded -ddadd75012 add 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded -ddadd75013 add 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded -ddadd75014 add 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded -ddadd75015 add 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded -ddadd75016 add 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded -ddadd75017 add 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded -ddadd75018 add 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded -ddadd75019 add 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded -ddadd75020 add 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded -ddadd75021 add 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded - --- widening second argument at gap -ddadd75030 add 12345678 1 -> 12345679 -ddadd75031 add 12345678 0.1 -> 12345678.1 -ddadd75032 add 12345678 0.12 -> 12345678.12 -ddadd75033 add 12345678 0.123 -> 12345678.123 -ddadd75034 add 12345678 0.1234 -> 12345678.1234 -ddadd75035 add 12345678 0.12345 -> 12345678.12345 -ddadd75036 add 12345678 0.123456 -> 12345678.123456 -ddadd75037 add 12345678 0.1234567 -> 12345678.1234567 -ddadd75038 add 12345678 0.12345678 -> 12345678.12345678 -ddadd75039 add 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded -ddadd75040 add 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded -ddadd75041 add 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded -ddadd75042 add 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded -ddadd75043 add 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded -ddadd75044 add 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded -ddadd75045 add 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded -ddadd75046 add 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded -ddadd75047 add 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded -ddadd75048 add 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded -ddadd75049 add 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -ddadd75050 add 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded -ddadd75051 add 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded -ddadd75052 add 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded -ddadd75053 add 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded -ddadd75054 add 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded -ddadd75055 add 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded -ddadd75056 add 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded -ddadd75057 add 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded -ddadd75060 add 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded -ddadd75061 add 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded -ddadd75062 add 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded -ddadd75063 add 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded -ddadd75064 add 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded -ddadd75065 add 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded -ddadd75066 add 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded -ddadd75067 add 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -ddadd75070 add 12345678 1E-8 -> 12345678.00000001 -ddadd75071 add 12345678 1E-9 -> 12345678.00000001 Inexact Rounded -ddadd75072 add 12345678 1E-10 -> 12345678.00000001 Inexact Rounded -ddadd75073 add 12345678 1E-11 -> 12345678.00000001 Inexact Rounded -ddadd75074 add 12345678 1E-12 -> 12345678.00000001 Inexact Rounded -ddadd75075 add 12345678 1E-13 -> 12345678.00000001 Inexact Rounded -ddadd75076 add 12345678 1E-14 -> 12345678.00000001 Inexact Rounded -ddadd75077 add 12345678 1E-15 -> 12345678.00000001 Inexact Rounded -ddadd75078 add 12345678 1E-16 -> 12345678.00000001 Inexact Rounded -ddadd75079 add 12345678 1E-17 -> 12345678.00000001 Inexact Rounded -ddadd75080 add 12345678 1E-18 -> 12345678.00000001 Inexact Rounded -ddadd75081 add 12345678 1E-19 -> 12345678.00000001 Inexact Rounded -ddadd75082 add 12345678 1E-20 -> 12345678.00000001 Inexact Rounded -ddadd75083 add 12345678 1E-25 -> 12345678.00000001 Inexact Rounded -ddadd75084 add 12345678 1E-30 -> 12345678.00000001 Inexact Rounded -ddadd75085 add 12345678 1E-31 -> 12345678.00000001 Inexact Rounded -ddadd75086 add 12345678 1E-32 -> 12345678.00000001 Inexact Rounded -ddadd75087 add 12345678 1E-33 -> 12345678.00000001 Inexact Rounded -ddadd75088 add 12345678 1E-34 -> 12345678.00000001 Inexact Rounded -ddadd75089 add 12345678 1E-35 -> 12345678.00000001 Inexact Rounded - --- Punit's -ddadd75100 add 1.000 -200.000 -> -199.000 - --- Rounding swathe -rounding: half_even -ddadd81100 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81101 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81102 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81103 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81104 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81105 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81106 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81107 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81108 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81109 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81120 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81121 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: half_up -ddadd81200 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81201 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81202 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81203 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81204 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81205 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81206 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81207 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81208 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81209 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81220 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81221 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: half_down -ddadd81300 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81301 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81302 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81303 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81304 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81305 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81306 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81307 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81308 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81309 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81320 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81321 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: up -ddadd81400 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81401 add .2301 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81402 add .2310 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81403 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81404 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81405 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81406 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81407 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81408 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81409 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81411 add -.2399 -12345678901234.00 -> -12345678901234.24 Inexact Rounded -ddadd81420 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81421 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: down -ddadd81500 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81501 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81502 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81503 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81504 add .2351 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81505 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81506 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81507 add .2360 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81508 add .2370 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81509 add .2399 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81511 add -.2399 -12345678901234.00 -> -12345678901234.23 Inexact Rounded -ddadd81520 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded -ddadd81521 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded - -rounding: ceiling -ddadd81600 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81601 add .2301 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81602 add .2310 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81603 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81604 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81605 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81606 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded -ddadd81607 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81608 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81609 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81611 add -.2399 -12345678901234.00 -> -12345678901234.23 Inexact Rounded -ddadd81620 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded -ddadd81621 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded - -rounding: floor -ddadd81700 add .2300 12345678901234.00 -> 12345678901234.23 Rounded -ddadd81701 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81702 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81703 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81704 add .2351 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81705 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81706 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd81707 add .2360 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81708 add .2370 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81709 add .2399 12345678901234.00 -> 12345678901234.23 Inexact Rounded -ddadd81711 add -.2399 -12345678901234.00 -> -12345678901234.24 Inexact Rounded -ddadd81720 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded -ddadd81721 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded - -rounding: 05up -ddadd81800 add .2000 12345678901234.00 -> 12345678901234.20 Rounded -ddadd81801 add .2001 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81802 add .2010 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81803 add .2050 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81804 add .2051 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81807 add .2060 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81808 add .2070 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81809 add .2099 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81811 add -.2099 -12345678901234.00 -> -12345678901234.21 Inexact Rounded -ddadd81820 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded -ddadd81821 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded - -ddadd81900 add .2100 12345678901234.00 -> 12345678901234.21 Rounded -ddadd81901 add .2101 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81902 add .2110 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81903 add .2150 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81904 add .2151 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81907 add .2160 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81908 add .2170 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81909 add .2199 12345678901234.00 -> 12345678901234.21 Inexact Rounded -ddadd81911 add -.2199 -12345678901234.00 -> -12345678901234.21 Inexact Rounded - -ddadd82000 add .2400 12345678901234.00 -> 12345678901234.24 Rounded -ddadd82001 add .2401 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82002 add .2410 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82003 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82004 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82007 add .2460 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82008 add .2470 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82009 add .2499 12345678901234.00 -> 12345678901234.24 Inexact Rounded -ddadd82011 add -.2499 -12345678901234.00 -> -12345678901234.24 Inexact Rounded - -ddadd82100 add .2500 12345678901234.00 -> 12345678901234.25 Rounded -ddadd82101 add .2501 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82102 add .2510 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82103 add .2550 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82104 add .2551 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82107 add .2560 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82108 add .2570 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82109 add .2599 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82111 add -.2599 -12345678901234.00 -> -12345678901234.26 Inexact Rounded - -ddadd82200 add .2600 12345678901234.00 -> 12345678901234.26 Rounded -ddadd82201 add .2601 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82202 add .2610 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82203 add .2650 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82204 add .2651 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82207 add .2660 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82208 add .2670 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82209 add .2699 12345678901234.00 -> 12345678901234.26 Inexact Rounded -ddadd82211 add -.2699 -12345678901234.00 -> -12345678901234.26 Inexact Rounded - -ddadd82300 add .2900 12345678901234.00 -> 12345678901234.29 Rounded -ddadd82301 add .2901 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82302 add .2910 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82303 add .2950 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82304 add .2951 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82307 add .2960 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82308 add .2970 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82309 add .2999 12345678901234.00 -> 12345678901234.29 Inexact Rounded -ddadd82311 add -.2999 -12345678901234.00 -> -12345678901234.29 Inexact Rounded - --- Null tests -ddadd9990 add 10 # -> NaN Invalid_operation -ddadd9991 add # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddAdd.decTest -- decDouble addition -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decDoubles only; all arguments are +-- representable in a decDouble +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- [first group are 'quick confidence check'] +ddadd001 add 1 1 -> 2 +ddadd002 add 2 3 -> 5 +ddadd003 add '5.75' '3.3' -> 9.05 +ddadd004 add '5' '-3' -> 2 +ddadd005 add '-5' '-3' -> -8 +ddadd006 add '-7' '2.5' -> -4.5 +ddadd007 add '0.7' '0.3' -> 1.0 +ddadd008 add '1.25' '1.25' -> 2.50 +ddadd009 add '1.23456789' '1.00000000' -> '2.23456789' +ddadd010 add '1.23456789' '1.00000011' -> '2.23456800' + +-- 1234567890123456 1234567890123456 +ddadd011 add '0.4444444444444446' '0.5555555555555555' -> '1.000000000000000' Inexact Rounded +ddadd012 add '0.4444444444444445' '0.5555555555555555' -> '1.000000000000000' Rounded +ddadd013 add '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' +ddadd014 add '4444444444444444' '0.49' -> '4444444444444444' Inexact Rounded +ddadd015 add '4444444444444444' '0.499' -> '4444444444444444' Inexact Rounded +ddadd016 add '4444444444444444' '0.4999' -> '4444444444444444' Inexact Rounded +ddadd017 add '4444444444444444' '0.5000' -> '4444444444444444' Inexact Rounded +ddadd018 add '4444444444444444' '0.5001' -> '4444444444444445' Inexact Rounded +ddadd019 add '4444444444444444' '0.501' -> '4444444444444445' Inexact Rounded +ddadd020 add '4444444444444444' '0.51' -> '4444444444444445' Inexact Rounded + +ddadd021 add 0 1 -> 1 +ddadd022 add 1 1 -> 2 +ddadd023 add 2 1 -> 3 +ddadd024 add 3 1 -> 4 +ddadd025 add 4 1 -> 5 +ddadd026 add 5 1 -> 6 +ddadd027 add 6 1 -> 7 +ddadd028 add 7 1 -> 8 +ddadd029 add 8 1 -> 9 +ddadd030 add 9 1 -> 10 + +-- some carrying effects +ddadd031 add '0.9998' '0.0000' -> '0.9998' +ddadd032 add '0.9998' '0.0001' -> '0.9999' +ddadd033 add '0.9998' '0.0002' -> '1.0000' +ddadd034 add '0.9998' '0.0003' -> '1.0001' + +ddadd035 add '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddadd036 add '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddadd037 add '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddadd038 add '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded +ddadd039 add '700000' '10000e+16' -> '1.000000000000007E+20' Rounded + +-- symmetry: +ddadd040 add '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded +ddadd041 add '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded +ddadd042 add '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded +ddadd044 add '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded +ddadd045 add '10000e+16' '700000' -> '1.000000000000007E+20' Rounded + +-- same, without rounding +ddadd046 add '10000e+9' '7' -> '10000000000007' +ddadd047 add '10000e+9' '70' -> '10000000000070' +ddadd048 add '10000e+9' '700' -> '10000000000700' +ddadd049 add '10000e+9' '7000' -> '10000000007000' +ddadd050 add '10000e+9' '70000' -> '10000000070000' +ddadd051 add '10000e+9' '700000' -> '10000000700000' +ddadd052 add '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +ddadd053 add '12' '7.00' -> '19.00' +ddadd054 add '1.3' '-1.07' -> '0.23' +ddadd055 add '1.3' '-1.30' -> '0.00' +ddadd056 add '1.3' '-2.07' -> '-0.77' +ddadd057 add '1E+2' '1E+4' -> '1.01E+4' + +-- leading zero preservation +ddadd061 add 1 '0.0001' -> '1.0001' +ddadd062 add 1 '0.00001' -> '1.00001' +ddadd063 add 1 '0.000001' -> '1.000001' +ddadd064 add 1 '0.0000001' -> '1.0000001' +ddadd065 add 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +ddadd070 add 1 0 -> 1 +ddadd071 add 1 0. -> 1 +ddadd072 add 1 .0 -> 1.0 +ddadd073 add 1 0.0 -> 1.0 +ddadd074 add 1 0.00 -> 1.00 +ddadd075 add 0 1 -> 1 +ddadd076 add 0. 1 -> 1 +ddadd077 add .0 1 -> 1.0 +ddadd078 add 0.0 1 -> 1.0 +ddadd079 add 0.00 1 -> 1.00 + +-- some carries +ddadd080 add 999999998 1 -> 999999999 +ddadd081 add 999999999 1 -> 1000000000 +ddadd082 add 99999999 1 -> 100000000 +ddadd083 add 9999999 1 -> 10000000 +ddadd084 add 999999 1 -> 1000000 +ddadd085 add 99999 1 -> 100000 +ddadd086 add 9999 1 -> 10000 +ddadd087 add 999 1 -> 1000 +ddadd088 add 99 1 -> 100 +ddadd089 add 9 1 -> 10 + + +-- more LHS swaps +ddadd090 add '-56267E-10' 0 -> '-0.0000056267' +ddadd091 add '-56267E-6' 0 -> '-0.056267' +ddadd092 add '-56267E-5' 0 -> '-0.56267' +ddadd093 add '-56267E-4' 0 -> '-5.6267' +ddadd094 add '-56267E-3' 0 -> '-56.267' +ddadd095 add '-56267E-2' 0 -> '-562.67' +ddadd096 add '-56267E-1' 0 -> '-5626.7' +ddadd097 add '-56267E-0' 0 -> '-56267' +ddadd098 add '-5E-10' 0 -> '-5E-10' +ddadd099 add '-5E-7' 0 -> '-5E-7' +ddadd100 add '-5E-6' 0 -> '-0.000005' +ddadd101 add '-5E-5' 0 -> '-0.00005' +ddadd102 add '-5E-4' 0 -> '-0.0005' +ddadd103 add '-5E-1' 0 -> '-0.5' +ddadd104 add '-5E0' 0 -> '-5' +ddadd105 add '-5E1' 0 -> '-50' +ddadd106 add '-5E5' 0 -> '-500000' +ddadd107 add '-5E15' 0 -> '-5000000000000000' +ddadd108 add '-5E16' 0 -> '-5.000000000000000E+16' Rounded +ddadd109 add '-5E17' 0 -> '-5.000000000000000E+17' Rounded +ddadd110 add '-5E18' 0 -> '-5.000000000000000E+18' Rounded +ddadd111 add '-5E100' 0 -> '-5.000000000000000E+100' Rounded + +-- more RHS swaps +ddadd113 add 0 '-56267E-10' -> '-0.0000056267' +ddadd114 add 0 '-56267E-6' -> '-0.056267' +ddadd116 add 0 '-56267E-5' -> '-0.56267' +ddadd117 add 0 '-56267E-4' -> '-5.6267' +ddadd119 add 0 '-56267E-3' -> '-56.267' +ddadd120 add 0 '-56267E-2' -> '-562.67' +ddadd121 add 0 '-56267E-1' -> '-5626.7' +ddadd122 add 0 '-56267E-0' -> '-56267' +ddadd123 add 0 '-5E-10' -> '-5E-10' +ddadd124 add 0 '-5E-7' -> '-5E-7' +ddadd125 add 0 '-5E-6' -> '-0.000005' +ddadd126 add 0 '-5E-5' -> '-0.00005' +ddadd127 add 0 '-5E-4' -> '-0.0005' +ddadd128 add 0 '-5E-1' -> '-0.5' +ddadd129 add 0 '-5E0' -> '-5' +ddadd130 add 0 '-5E1' -> '-50' +ddadd131 add 0 '-5E5' -> '-500000' +ddadd132 add 0 '-5E15' -> '-5000000000000000' +ddadd133 add 0 '-5E16' -> '-5.000000000000000E+16' Rounded +ddadd134 add 0 '-5E17' -> '-5.000000000000000E+17' Rounded +ddadd135 add 0 '-5E18' -> '-5.000000000000000E+18' Rounded +ddadd136 add 0 '-5E100' -> '-5.000000000000000E+100' Rounded + +-- related +ddadd137 add 1 '0E-19' -> '1.000000000000000' Rounded +ddadd138 add -1 '0E-19' -> '-1.000000000000000' Rounded +ddadd139 add '0E-19' 1 -> '1.000000000000000' Rounded +ddadd140 add '0E-19' -1 -> '-1.000000000000000' Rounded +ddadd141 add 1E+11 0.0000 -> '100000000000.0000' +ddadd142 add 1E+11 0.00000 -> '100000000000.0000' Rounded +ddadd143 add 0.000 1E+12 -> '1000000000000.000' +ddadd144 add 0.0000 1E+12 -> '1000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +ddadd146 add '00.0' 0 -> '0.0' +ddadd147 add '0.00' 0 -> '0.00' +ddadd148 add 0 '0.00' -> '0.00' +ddadd149 add 0 '00.0' -> '0.0' +ddadd150 add '00.0' '0.00' -> '0.00' +ddadd151 add '0.00' '00.0' -> '0.00' +ddadd152 add '3' '.3' -> '3.3' +ddadd153 add '3.' '.3' -> '3.3' +ddadd154 add '3.0' '.3' -> '3.3' +ddadd155 add '3.00' '.3' -> '3.30' +ddadd156 add '3' '3' -> '6' +ddadd157 add '3' '+3' -> '6' +ddadd158 add '3' '-3' -> '0' +ddadd159 add '0.3' '-0.3' -> '0.0' +ddadd160 add '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +ddadd161 add '1E+12' '-1' -> '999999999999' +ddadd162 add '1E+12' '1.11' -> '1000000000001.11' +ddadd163 add '1.11' '1E+12' -> '1000000000001.11' +ddadd164 add '-1' '1E+12' -> '999999999999' +ddadd165 add '7E+12' '-1' -> '6999999999999' +ddadd166 add '7E+12' '1.11' -> '7000000000001.11' +ddadd167 add '1.11' '7E+12' -> '7000000000001.11' +ddadd168 add '-1' '7E+12' -> '6999999999999' + +rounding: half_up +-- 1.234567890123456 1234567890123456 1 234567890123456 +ddadd170 add '4.444444444444444' '0.5555555555555567' -> '5.000000000000001' Inexact Rounded +ddadd171 add '4.444444444444444' '0.5555555555555566' -> '5.000000000000001' Inexact Rounded +ddadd172 add '4.444444444444444' '0.5555555555555565' -> '5.000000000000001' Inexact Rounded +ddadd173 add '4.444444444444444' '0.5555555555555564' -> '5.000000000000000' Inexact Rounded +ddadd174 add '4.444444444444444' '0.5555555555555553' -> '4.999999999999999' Inexact Rounded +ddadd175 add '4.444444444444444' '0.5555555555555552' -> '4.999999999999999' Inexact Rounded +ddadd176 add '4.444444444444444' '0.5555555555555551' -> '4.999999999999999' Inexact Rounded +ddadd177 add '4.444444444444444' '0.5555555555555550' -> '4.999999999999999' Rounded +ddadd178 add '4.444444444444444' '0.5555555555555545' -> '4.999999999999999' Inexact Rounded +ddadd179 add '4.444444444444444' '0.5555555555555544' -> '4.999999999999998' Inexact Rounded +ddadd180 add '4.444444444444444' '0.5555555555555543' -> '4.999999999999998' Inexact Rounded +ddadd181 add '4.444444444444444' '0.5555555555555542' -> '4.999999999999998' Inexact Rounded +ddadd182 add '4.444444444444444' '0.5555555555555541' -> '4.999999999999998' Inexact Rounded +ddadd183 add '4.444444444444444' '0.5555555555555540' -> '4.999999999999998' Rounded + +-- and some more, including residue effects and different roundings +rounding: half_up +ddadd200 add '1234560123456789' 0 -> '1234560123456789' +ddadd201 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddadd202 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddadd203 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddadd204 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddadd205 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddadd206 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddadd207 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddadd208 add '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded +ddadd209 add '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded +ddadd210 add '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded +ddadd211 add '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded +ddadd212 add '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded +ddadd213 add '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded +ddadd214 add '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded +ddadd215 add '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded +ddadd216 add '1234560123456789' 1 -> '1234560123456790' +ddadd217 add '1234560123456789' 1.000000001 -> '1234560123456790' Inexact Rounded +ddadd218 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddadd219 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded + +rounding: half_even +ddadd220 add '1234560123456789' 0 -> '1234560123456789' +ddadd221 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddadd222 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddadd223 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddadd224 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddadd225 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddadd226 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddadd227 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddadd228 add '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded +ddadd229 add '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded +ddadd230 add '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded +ddadd231 add '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded +ddadd232 add '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded +ddadd233 add '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded +ddadd234 add '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded +ddadd235 add '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded +ddadd236 add '1234560123456789' 1 -> '1234560123456790' +ddadd237 add '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded +ddadd238 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddadd239 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded +-- critical few with even bottom digit... +ddadd240 add '1234560123456788' 0.499999999 -> '1234560123456788' Inexact Rounded +ddadd241 add '1234560123456788' 0.5 -> '1234560123456788' Inexact Rounded +ddadd242 add '1234560123456788' 0.500000001 -> '1234560123456789' Inexact Rounded + +rounding: down +ddadd250 add '1234560123456789' 0 -> '1234560123456789' +ddadd251 add '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddadd252 add '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddadd253 add '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddadd254 add '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddadd255 add '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddadd256 add '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddadd257 add '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddadd258 add '1234560123456789' 0.5 -> '1234560123456789' Inexact Rounded +ddadd259 add '1234560123456789' 0.500000001 -> '1234560123456789' Inexact Rounded +ddadd260 add '1234560123456789' 0.500001 -> '1234560123456789' Inexact Rounded +ddadd261 add '1234560123456789' 0.51 -> '1234560123456789' Inexact Rounded +ddadd262 add '1234560123456789' 0.6 -> '1234560123456789' Inexact Rounded +ddadd263 add '1234560123456789' 0.9 -> '1234560123456789' Inexact Rounded +ddadd264 add '1234560123456789' 0.99999 -> '1234560123456789' Inexact Rounded +ddadd265 add '1234560123456789' 0.999999999 -> '1234560123456789' Inexact Rounded +ddadd266 add '1234560123456789' 1 -> '1234560123456790' +ddadd267 add '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded +ddadd268 add '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddadd269 add '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +ddadd301 add -1 1 -> 0 +ddadd302 add 0 1 -> 1 +ddadd303 add 1 1 -> 2 +ddadd304 add 12 1 -> 13 +ddadd305 add 98 1 -> 99 +ddadd306 add 99 1 -> 100 +ddadd307 add 100 1 -> 101 +ddadd308 add 101 1 -> 102 +ddadd309 add -1 -1 -> -2 +ddadd310 add 0 -1 -> -1 +ddadd311 add 1 -1 -> 0 +ddadd312 add 12 -1 -> 11 +ddadd313 add 98 -1 -> 97 +ddadd314 add 99 -1 -> 98 +ddadd315 add 100 -1 -> 99 +ddadd316 add 101 -1 -> 100 + +ddadd321 add -0.01 0.01 -> 0.00 +ddadd322 add 0.00 0.01 -> 0.01 +ddadd323 add 0.01 0.01 -> 0.02 +ddadd324 add 0.12 0.01 -> 0.13 +ddadd325 add 0.98 0.01 -> 0.99 +ddadd326 add 0.99 0.01 -> 1.00 +ddadd327 add 1.00 0.01 -> 1.01 +ddadd328 add 1.01 0.01 -> 1.02 +ddadd329 add -0.01 -0.01 -> -0.02 +ddadd330 add 0.00 -0.01 -> -0.01 +ddadd331 add 0.01 -0.01 -> 0.00 +ddadd332 add 0.12 -0.01 -> 0.11 +ddadd333 add 0.98 -0.01 -> 0.97 +ddadd334 add 0.99 -0.01 -> 0.98 +ddadd335 add 1.00 -0.01 -> 0.99 +ddadd336 add 1.01 -0.01 -> 1.00 + +-- some more cases where adding 0 affects the coefficient +ddadd340 add 1E+3 0 -> 1000 +ddadd341 add 1E+15 0 -> 1000000000000000 +ddadd342 add 1E+16 0 -> 1.000000000000000E+16 Rounded +ddadd343 add 1E+20 0 -> 1.000000000000000E+20 Rounded +-- which simply follow from these cases ... +ddadd344 add 1E+3 1 -> 1001 +ddadd345 add 1E+15 1 -> 1000000000000001 +ddadd346 add 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded +ddadd347 add 1E+20 1 -> 1.000000000000000E+20 Inexact Rounded +ddadd348 add 1E+3 7 -> 1007 +ddadd349 add 1E+15 7 -> 1000000000000007 +ddadd350 add 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded +ddadd351 add 1E+20 7 -> 1.000000000000000E+20 Inexact Rounded + +-- tryzeros cases +rounding: half_up +ddadd360 add 0E+50 10000E+1 -> 1.0000E+5 +ddadd361 add 0E-50 10000E+1 -> 100000.0000000000 Rounded +ddadd362 add 10000E+1 0E-50 -> 100000.0000000000 Rounded +ddadd363 add 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact +ddadd364 add 9.999999999999999E+384 -9.999999999999999E+384 -> 0E+369 + +-- a curiosity from JSR 13 testing +rounding: half_down +ddadd370 add 999999999999999 815 -> 1000000000000814 +ddadd371 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact +rounding: half_up +ddadd372 add 999999999999999 815 -> 1000000000000814 +ddadd373 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact +rounding: half_even +ddadd374 add 999999999999999 815 -> 1000000000000814 +ddadd375 add 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact + +-- operands folded +ddadd380 add 1E+384 1E+384 -> 2.000000000000000E+384 Clamped +ddadd381 add 1E+380 1E+380 -> 2.00000000000E+380 Clamped +ddadd382 add 1E+376 1E+376 -> 2.0000000E+376 Clamped +ddadd383 add 1E+372 1E+372 -> 2.000E+372 Clamped +ddadd384 add 1E+370 1E+370 -> 2.0E+370 Clamped +ddadd385 add 1E+369 1E+369 -> 2E+369 +ddadd386 add 1E+368 1E+368 -> 2E+368 + +-- ulp replacement tests +ddadd400 add 1 77e-14 -> 1.00000000000077 +ddadd401 add 1 77e-15 -> 1.000000000000077 +ddadd402 add 1 77e-16 -> 1.000000000000008 Inexact Rounded +ddadd403 add 1 77e-17 -> 1.000000000000001 Inexact Rounded +ddadd404 add 1 77e-18 -> 1.000000000000000 Inexact Rounded +ddadd405 add 1 77e-19 -> 1.000000000000000 Inexact Rounded +ddadd406 add 1 77e-299 -> 1.000000000000000 Inexact Rounded + +ddadd410 add 10 77e-14 -> 10.00000000000077 +ddadd411 add 10 77e-15 -> 10.00000000000008 Inexact Rounded +ddadd412 add 10 77e-16 -> 10.00000000000001 Inexact Rounded +ddadd413 add 10 77e-17 -> 10.00000000000000 Inexact Rounded +ddadd414 add 10 77e-18 -> 10.00000000000000 Inexact Rounded +ddadd415 add 10 77e-19 -> 10.00000000000000 Inexact Rounded +ddadd416 add 10 77e-299 -> 10.00000000000000 Inexact Rounded + +ddadd420 add 77e-14 1 -> 1.00000000000077 +ddadd421 add 77e-15 1 -> 1.000000000000077 +ddadd422 add 77e-16 1 -> 1.000000000000008 Inexact Rounded +ddadd423 add 77e-17 1 -> 1.000000000000001 Inexact Rounded +ddadd424 add 77e-18 1 -> 1.000000000000000 Inexact Rounded +ddadd425 add 77e-19 1 -> 1.000000000000000 Inexact Rounded +ddadd426 add 77e-299 1 -> 1.000000000000000 Inexact Rounded + +ddadd430 add 77e-14 10 -> 10.00000000000077 +ddadd431 add 77e-15 10 -> 10.00000000000008 Inexact Rounded +ddadd432 add 77e-16 10 -> 10.00000000000001 Inexact Rounded +ddadd433 add 77e-17 10 -> 10.00000000000000 Inexact Rounded +ddadd434 add 77e-18 10 -> 10.00000000000000 Inexact Rounded +ddadd435 add 77e-19 10 -> 10.00000000000000 Inexact Rounded +ddadd436 add 77e-299 10 -> 10.00000000000000 Inexact Rounded + +-- fastpath boundary (more in dqadd) +-- 1234567890123456 +ddadd539 add '4444444444444444' '3333333333333333' -> '7777777777777777' +ddadd540 add '4444444444444444' '4444444444444444' -> '8888888888888888' +ddadd541 add '4444444444444444' '5555555555555555' -> '9999999999999999' +ddadd542 add '3333333333333333' '4444444444444444' -> '7777777777777777' +ddadd543 add '4444444444444444' '4444444444444444' -> '8888888888888888' +ddadd544 add '5555555555555555' '4444444444444444' -> '9999999999999999' +ddadd545 add '3000004000000000' '3000000000000040' -> '6000004000000040' +ddadd546 add '3000000400000000' '4000000000000400' -> '7000000400000400' +ddadd547 add '3000000040000000' '5000000000004000' -> '8000000040004000' +ddadd548 add '4000000004000000' '3000000000040000' -> '7000000004040000' +ddadd549 add '4000000000400000' '4000000000400000' -> '8000000000800000' +ddadd550 add '4000000000040000' '5000000004000000' -> '9000000004040000' +ddadd551 add '5000000000004000' '3000000040000000' -> '8000000040004000' +ddadd552 add '5000000000000400' '4000000400000000' -> '9000000400000400' +ddadd553 add '5000000000000040' '5000004000000000' -> 1.000000400000004E+16 Rounded +-- check propagation +ddadd554 add '8999999999999999' '0000000000000001' -> 9000000000000000 +ddadd555 add '0000000000000001' '8999999999999999' -> 9000000000000000 +ddadd556 add '0999999999999999' '0000000000000001' -> 1000000000000000 +ddadd557 add '0000000000000001' '0999999999999999' -> 1000000000000000 +ddadd558 add '4444444444444444' '4555555555555556' -> 9000000000000000 +ddadd559 add '4555555555555556' '4444444444444444' -> 9000000000000000 + +-- negative ulps +ddadd6440 add 1 -77e-14 -> 0.99999999999923 +ddadd6441 add 1 -77e-15 -> 0.999999999999923 +ddadd6442 add 1 -77e-16 -> 0.9999999999999923 +ddadd6443 add 1 -77e-17 -> 0.9999999999999992 Inexact Rounded +ddadd6444 add 1 -77e-18 -> 0.9999999999999999 Inexact Rounded +ddadd6445 add 1 -77e-19 -> 1.000000000000000 Inexact Rounded +ddadd6446 add 1 -77e-99 -> 1.000000000000000 Inexact Rounded + +ddadd6450 add 10 -77e-14 -> 9.99999999999923 +ddadd6451 add 10 -77e-15 -> 9.999999999999923 +ddadd6452 add 10 -77e-16 -> 9.999999999999992 Inexact Rounded +ddadd6453 add 10 -77e-17 -> 9.999999999999999 Inexact Rounded +ddadd6454 add 10 -77e-18 -> 10.00000000000000 Inexact Rounded +ddadd6455 add 10 -77e-19 -> 10.00000000000000 Inexact Rounded +ddadd6456 add 10 -77e-99 -> 10.00000000000000 Inexact Rounded + +ddadd6460 add -77e-14 1 -> 0.99999999999923 +ddadd6461 add -77e-15 1 -> 0.999999999999923 +ddadd6462 add -77e-16 1 -> 0.9999999999999923 +ddadd6463 add -77e-17 1 -> 0.9999999999999992 Inexact Rounded +ddadd6464 add -77e-18 1 -> 0.9999999999999999 Inexact Rounded +ddadd6465 add -77e-19 1 -> 1.000000000000000 Inexact Rounded +ddadd6466 add -77e-99 1 -> 1.000000000000000 Inexact Rounded + +ddadd6470 add -77e-14 10 -> 9.99999999999923 +ddadd6471 add -77e-15 10 -> 9.999999999999923 +ddadd6472 add -77e-16 10 -> 9.999999999999992 Inexact Rounded +ddadd6473 add -77e-17 10 -> 9.999999999999999 Inexact Rounded +ddadd6474 add -77e-18 10 -> 10.00000000000000 Inexact Rounded +ddadd6475 add -77e-19 10 -> 10.00000000000000 Inexact Rounded +ddadd6476 add -77e-99 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +ddadd6480 add -1 77e-14 -> -0.99999999999923 +ddadd6481 add -1 77e-15 -> -0.999999999999923 +ddadd6482 add -1 77e-16 -> -0.9999999999999923 +ddadd6483 add -1 77e-17 -> -0.9999999999999992 Inexact Rounded +ddadd6484 add -1 77e-18 -> -0.9999999999999999 Inexact Rounded +ddadd6485 add -1 77e-19 -> -1.000000000000000 Inexact Rounded +ddadd6486 add -1 77e-99 -> -1.000000000000000 Inexact Rounded + +ddadd6490 add -10 77e-14 -> -9.99999999999923 +ddadd6491 add -10 77e-15 -> -9.999999999999923 +ddadd6492 add -10 77e-16 -> -9.999999999999992 Inexact Rounded +ddadd6493 add -10 77e-17 -> -9.999999999999999 Inexact Rounded +ddadd6494 add -10 77e-18 -> -10.00000000000000 Inexact Rounded +ddadd6495 add -10 77e-19 -> -10.00000000000000 Inexact Rounded +ddadd6496 add -10 77e-99 -> -10.00000000000000 Inexact Rounded + +ddadd6500 add 77e-14 -1 -> -0.99999999999923 +ddadd6501 add 77e-15 -1 -> -0.999999999999923 +ddadd6502 add 77e-16 -1 -> -0.9999999999999923 +ddadd6503 add 77e-17 -1 -> -0.9999999999999992 Inexact Rounded +ddadd6504 add 77e-18 -1 -> -0.9999999999999999 Inexact Rounded +ddadd6505 add 77e-19 -1 -> -1.000000000000000 Inexact Rounded +ddadd6506 add 77e-99 -1 -> -1.000000000000000 Inexact Rounded + +ddadd6510 add 77e-14 -10 -> -9.99999999999923 +ddadd6511 add 77e-15 -10 -> -9.999999999999923 +ddadd6512 add 77e-16 -10 -> -9.999999999999992 Inexact Rounded +ddadd6513 add 77e-17 -10 -> -9.999999999999999 Inexact Rounded +ddadd6514 add 77e-18 -10 -> -10.00000000000000 Inexact Rounded +ddadd6515 add 77e-19 -10 -> -10.00000000000000 Inexact Rounded +ddadd6516 add 77e-99 -10 -> -10.00000000000000 Inexact Rounded + +-- and some more residue effects and different roundings +rounding: half_up +ddadd6540 add '6543210123456789' 0 -> '6543210123456789' +ddadd6541 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddadd6542 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddadd6543 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddadd6544 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddadd6545 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddadd6546 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddadd6547 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddadd6548 add '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +ddadd6549 add '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +ddadd6550 add '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +ddadd6551 add '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +ddadd6552 add '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +ddadd6553 add '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +ddadd6554 add '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +ddadd6555 add '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded +ddadd6556 add '6543210123456789' 1 -> '6543210123456790' +ddadd6557 add '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded +ddadd6558 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddadd6559 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +rounding: half_even +ddadd6560 add '6543210123456789' 0 -> '6543210123456789' +ddadd6561 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddadd6562 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddadd6563 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddadd6564 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddadd6565 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddadd6566 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddadd6567 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddadd6568 add '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +ddadd6569 add '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +ddadd6570 add '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +ddadd6571 add '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +ddadd6572 add '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +ddadd6573 add '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +ddadd6574 add '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +ddadd6575 add '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded +ddadd6576 add '6543210123456789' 1 -> '6543210123456790' +ddadd6577 add '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +ddadd6578 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddadd6579 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +-- critical few with even bottom digit... +ddadd7540 add '6543210123456788' 0.499999999 -> '6543210123456788' Inexact Rounded +ddadd7541 add '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded +ddadd7542 add '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded + +rounding: down +ddadd7550 add '6543210123456789' 0 -> '6543210123456789' +ddadd7551 add '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddadd7552 add '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddadd7553 add '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddadd7554 add '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddadd7555 add '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddadd7556 add '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddadd7557 add '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddadd7558 add '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded +ddadd7559 add '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded +ddadd7560 add '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded +ddadd7561 add '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded +ddadd7562 add '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded +ddadd7563 add '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded +ddadd7564 add '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded +ddadd7565 add '6543210123456789' 0.999999999 -> '6543210123456789' Inexact Rounded +ddadd7566 add '6543210123456789' 1 -> '6543210123456790' +ddadd7567 add '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +ddadd7568 add '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddadd7569 add '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +-- verify a query +rounding: down +ddadd7661 add 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded +ddadd7662 add 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded +ddadd7663 add 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded +ddadd7664 add 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded + +-- more zeros, etc. +rounding: half_even + +ddadd7701 add 5.00 1.00E-3 -> 5.00100 +ddadd7702 add 00.00 0.000 -> 0.000 +ddadd7703 add 00.00 0E-3 -> 0.000 +ddadd7704 add 0E-3 00.00 -> 0.000 + +ddadd7710 add 0E+3 00.00 -> 0.00 +ddadd7711 add 0E+3 00.0 -> 0.0 +ddadd7712 add 0E+3 00. -> 0 +ddadd7713 add 0E+3 00.E+1 -> 0E+1 +ddadd7714 add 0E+3 00.E+2 -> 0E+2 +ddadd7715 add 0E+3 00.E+3 -> 0E+3 +ddadd7716 add 0E+3 00.E+4 -> 0E+3 +ddadd7717 add 0E+3 00.E+5 -> 0E+3 +ddadd7718 add 0E+3 -00.0 -> 0.0 +ddadd7719 add 0E+3 -00. -> 0 +ddadd7731 add 0E+3 -00.E+1 -> 0E+1 + +ddadd7720 add 00.00 0E+3 -> 0.00 +ddadd7721 add 00.0 0E+3 -> 0.0 +ddadd7722 add 00. 0E+3 -> 0 +ddadd7723 add 00.E+1 0E+3 -> 0E+1 +ddadd7724 add 00.E+2 0E+3 -> 0E+2 +ddadd7725 add 00.E+3 0E+3 -> 0E+3 +ddadd7726 add 00.E+4 0E+3 -> 0E+3 +ddadd7727 add 00.E+5 0E+3 -> 0E+3 +ddadd7728 add -00.00 0E+3 -> 0.00 +ddadd7729 add -00.0 0E+3 -> 0.0 +ddadd7730 add -00. 0E+3 -> 0 + +ddadd7732 add 0 0 -> 0 +ddadd7733 add 0 -0 -> 0 +ddadd7734 add -0 0 -> 0 +ddadd7735 add -0 -0 -> -0 -- IEEE 854 special case + +ddadd7736 add 1 -1 -> 0 +ddadd7737 add -1 -1 -> -2 +ddadd7738 add 1 1 -> 2 +ddadd7739 add -1 1 -> 0 + +ddadd7741 add 0 -1 -> -1 +ddadd7742 add -0 -1 -> -1 +ddadd7743 add 0 1 -> 1 +ddadd7744 add -0 1 -> 1 +ddadd7745 add -1 0 -> -1 +ddadd7746 add -1 -0 -> -1 +ddadd7747 add 1 0 -> 1 +ddadd7748 add 1 -0 -> 1 + +ddadd7751 add 0.0 -1 -> -1.0 +ddadd7752 add -0.0 -1 -> -1.0 +ddadd7753 add 0.0 1 -> 1.0 +ddadd7754 add -0.0 1 -> 1.0 +ddadd7755 add -1.0 0 -> -1.0 +ddadd7756 add -1.0 -0 -> -1.0 +ddadd7757 add 1.0 0 -> 1.0 +ddadd7758 add 1.0 -0 -> 1.0 + +ddadd7761 add 0 -1.0 -> -1.0 +ddadd7762 add -0 -1.0 -> -1.0 +ddadd7763 add 0 1.0 -> 1.0 +ddadd7764 add -0 1.0 -> 1.0 +ddadd7765 add -1 0.0 -> -1.0 +ddadd7766 add -1 -0.0 -> -1.0 +ddadd7767 add 1 0.0 -> 1.0 +ddadd7768 add 1 -0.0 -> 1.0 + +ddadd7771 add 0.0 -1.0 -> -1.0 +ddadd7772 add -0.0 -1.0 -> -1.0 +ddadd7773 add 0.0 1.0 -> 1.0 +ddadd7774 add -0.0 1.0 -> 1.0 +ddadd7775 add -1.0 0.0 -> -1.0 +ddadd7776 add -1.0 -0.0 -> -1.0 +ddadd7777 add 1.0 0.0 -> 1.0 +ddadd7778 add 1.0 -0.0 -> 1.0 + +-- Specials +ddadd7780 add -Inf -Inf -> -Infinity +ddadd7781 add -Inf -1000 -> -Infinity +ddadd7782 add -Inf -1 -> -Infinity +ddadd7783 add -Inf -0 -> -Infinity +ddadd7784 add -Inf 0 -> -Infinity +ddadd7785 add -Inf 1 -> -Infinity +ddadd7786 add -Inf 1000 -> -Infinity +ddadd7787 add -1000 -Inf -> -Infinity +ddadd7788 add -Inf -Inf -> -Infinity +ddadd7789 add -1 -Inf -> -Infinity +ddadd7790 add -0 -Inf -> -Infinity +ddadd7791 add 0 -Inf -> -Infinity +ddadd7792 add 1 -Inf -> -Infinity +ddadd7793 add 1000 -Inf -> -Infinity +ddadd7794 add Inf -Inf -> NaN Invalid_operation + +ddadd7800 add Inf -Inf -> NaN Invalid_operation +ddadd7801 add Inf -1000 -> Infinity +ddadd7802 add Inf -1 -> Infinity +ddadd7803 add Inf -0 -> Infinity +ddadd7804 add Inf 0 -> Infinity +ddadd7805 add Inf 1 -> Infinity +ddadd7806 add Inf 1000 -> Infinity +ddadd7807 add Inf Inf -> Infinity +ddadd7808 add -1000 Inf -> Infinity +ddadd7809 add -Inf Inf -> NaN Invalid_operation +ddadd7810 add -1 Inf -> Infinity +ddadd7811 add -0 Inf -> Infinity +ddadd7812 add 0 Inf -> Infinity +ddadd7813 add 1 Inf -> Infinity +ddadd7814 add 1000 Inf -> Infinity +ddadd7815 add Inf Inf -> Infinity + +ddadd7821 add NaN -Inf -> NaN +ddadd7822 add NaN -1000 -> NaN +ddadd7823 add NaN -1 -> NaN +ddadd7824 add NaN -0 -> NaN +ddadd7825 add NaN 0 -> NaN +ddadd7826 add NaN 1 -> NaN +ddadd7827 add NaN 1000 -> NaN +ddadd7828 add NaN Inf -> NaN +ddadd7829 add NaN NaN -> NaN +ddadd7830 add -Inf NaN -> NaN +ddadd7831 add -1000 NaN -> NaN +ddadd7832 add -1 NaN -> NaN +ddadd7833 add -0 NaN -> NaN +ddadd7834 add 0 NaN -> NaN +ddadd7835 add 1 NaN -> NaN +ddadd7836 add 1000 NaN -> NaN +ddadd7837 add Inf NaN -> NaN + +ddadd7841 add sNaN -Inf -> NaN Invalid_operation +ddadd7842 add sNaN -1000 -> NaN Invalid_operation +ddadd7843 add sNaN -1 -> NaN Invalid_operation +ddadd7844 add sNaN -0 -> NaN Invalid_operation +ddadd7845 add sNaN 0 -> NaN Invalid_operation +ddadd7846 add sNaN 1 -> NaN Invalid_operation +ddadd7847 add sNaN 1000 -> NaN Invalid_operation +ddadd7848 add sNaN NaN -> NaN Invalid_operation +ddadd7849 add sNaN sNaN -> NaN Invalid_operation +ddadd7850 add NaN sNaN -> NaN Invalid_operation +ddadd7851 add -Inf sNaN -> NaN Invalid_operation +ddadd7852 add -1000 sNaN -> NaN Invalid_operation +ddadd7853 add -1 sNaN -> NaN Invalid_operation +ddadd7854 add -0 sNaN -> NaN Invalid_operation +ddadd7855 add 0 sNaN -> NaN Invalid_operation +ddadd7856 add 1 sNaN -> NaN Invalid_operation +ddadd7857 add 1000 sNaN -> NaN Invalid_operation +ddadd7858 add Inf sNaN -> NaN Invalid_operation +ddadd7859 add NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddadd7861 add NaN1 -Inf -> NaN1 +ddadd7862 add +NaN2 -1000 -> NaN2 +ddadd7863 add NaN3 1000 -> NaN3 +ddadd7864 add NaN4 Inf -> NaN4 +ddadd7865 add NaN5 +NaN6 -> NaN5 +ddadd7866 add -Inf NaN7 -> NaN7 +ddadd7867 add -1000 NaN8 -> NaN8 +ddadd7868 add 1000 NaN9 -> NaN9 +ddadd7869 add Inf +NaN10 -> NaN10 +ddadd7871 add sNaN11 -Inf -> NaN11 Invalid_operation +ddadd7872 add sNaN12 -1000 -> NaN12 Invalid_operation +ddadd7873 add sNaN13 1000 -> NaN13 Invalid_operation +ddadd7874 add sNaN14 NaN17 -> NaN14 Invalid_operation +ddadd7875 add sNaN15 sNaN18 -> NaN15 Invalid_operation +ddadd7876 add NaN16 sNaN19 -> NaN19 Invalid_operation +ddadd7877 add -Inf +sNaN20 -> NaN20 Invalid_operation +ddadd7878 add -1000 sNaN21 -> NaN21 Invalid_operation +ddadd7879 add 1000 sNaN22 -> NaN22 Invalid_operation +ddadd7880 add Inf sNaN23 -> NaN23 Invalid_operation +ddadd7881 add +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddadd7882 add -NaN26 NaN28 -> -NaN26 +ddadd7883 add -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddadd7884 add 1000 -NaN30 -> -NaN30 +ddadd7885 add 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Here we explore near the boundary of rounding a subnormal to Nmin +ddadd7575 add 1E-383 -1E-398 -> 9.99999999999999E-384 Subnormal +ddadd7576 add -1E-383 +1E-398 -> -9.99999999999999E-384 Subnormal + +-- and another curious case +ddadd7577 add 7.000000000000E-385 -1.00000E-391 -> 6.999999000000E-385 Subnormal + +-- check overflow edge case +-- 1234567890123456 +ddadd7972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 +ddadd7973 add 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded +ddadd7974 add 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded +ddadd7975 add 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded +ddadd7976 add 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded +ddadd7977 add 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded +ddadd7978 add 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded +ddadd7979 add 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded +ddadd7980 add 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded +ddadd7981 add 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded +ddadd7982 add 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded +ddadd7983 add 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded +ddadd7984 add 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded + +ddadd7985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 +ddadd7986 add -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded +ddadd7987 add -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded +ddadd7988 add -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded +ddadd7989 add -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded +ddadd7990 add -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded +ddadd7991 add -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded +ddadd7992 add -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded +ddadd7993 add -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded +ddadd7994 add -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded +ddadd7995 add -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded +ddadd7996 add -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded +ddadd7997 add -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +ddadd71100 add 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact +ddadd71101 add 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact +ddadd71103 add +1 -1e-383 -> 0.9999999999999999 Rounded Inexact +ddadd71104 add 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact +ddadd71105 add 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact +ddadd71106 add 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact +ddadd71107 add 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact +ddadd71108 add 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact +ddadd71109 add 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact + +rounding: ceiling +ddadd71110 add -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact +ddadd71111 add -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact +ddadd71113 add -1 +1e-383 -> -0.9999999999999999 Rounded Inexact +ddadd71114 add -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact +ddadd71115 add -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact +ddadd71116 add -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact +ddadd71117 add -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact +ddadd71118 add -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact +ddadd71119 add -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +ddadd71300 add 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded +ddadd71310 add 1E16 -0.51 -> 9999999999999999 Inexact Rounded +ddadd71311 add 1E16 -0.501 -> 9999999999999999 Inexact Rounded +ddadd71312 add 1E16 -0.5001 -> 9999999999999999 Inexact Rounded +ddadd71313 add 1E16 -0.50001 -> 9999999999999999 Inexact Rounded +ddadd71314 add 1E16 -0.500001 -> 9999999999999999 Inexact Rounded +ddadd71315 add 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded +ddadd71316 add 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded +ddadd71317 add 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded +ddadd71318 add 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded +ddadd71319 add 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded +ddadd71320 add 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded +ddadd71321 add 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded +ddadd71322 add 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded +ddadd71323 add 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded +ddadd71324 add 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded +ddadd71325 add 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71326 add 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71327 add 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71328 add 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71329 add 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71330 add 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71331 add 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71332 add 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71333 add 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71334 add 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71335 add 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71336 add 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71337 add 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71338 add 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded +ddadd71339 add 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded + +ddadd71340 add 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded +ddadd71341 add 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded + +ddadd71349 add 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded +ddadd71350 add 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded +ddadd71351 add 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded +ddadd71352 add 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded +ddadd71353 add 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded +ddadd71354 add 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded +ddadd71355 add 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded +ddadd71356 add 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded +ddadd71357 add 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded +ddadd71358 add 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded +ddadd71359 add 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded +ddadd71360 add 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded +ddadd71361 add 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded +ddadd71362 add 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded +ddadd71363 add 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded +ddadd71364 add 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded +ddadd71365 add 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71367 add 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71368 add 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71369 add 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71370 add 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71371 add 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71372 add 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71373 add 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71374 add 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71375 add 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71376 add 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71377 add 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71378 add 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded +ddadd71379 add 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded +ddadd71380 add 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded +ddadd71381 add 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded +ddadd71382 add 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71383 add 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71384 add 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71385 add 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71386 add 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71387 add 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71388 add 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71389 add 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71390 add 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71391 add 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71392 add 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71393 add 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71394 add 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded +ddadd71395 add 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded +ddadd71396 add 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +ddadd71420 add 0 1.123456789012345 -> 1.123456789012345 +ddadd71421 add 0 1.123456789012345E-1 -> 0.1123456789012345 +ddadd71422 add 0 1.123456789012345E-2 -> 0.01123456789012345 +ddadd71423 add 0 1.123456789012345E-3 -> 0.001123456789012345 +ddadd71424 add 0 1.123456789012345E-4 -> 0.0001123456789012345 +ddadd71425 add 0 1.123456789012345E-5 -> 0.00001123456789012345 +ddadd71426 add 0 1.123456789012345E-6 -> 0.000001123456789012345 +ddadd71427 add 0 1.123456789012345E-7 -> 1.123456789012345E-7 +ddadd71428 add 0 1.123456789012345E-8 -> 1.123456789012345E-8 +ddadd71429 add 0 1.123456789012345E-9 -> 1.123456789012345E-9 +ddadd71430 add 0 1.123456789012345E-10 -> 1.123456789012345E-10 +ddadd71431 add 0 1.123456789012345E-11 -> 1.123456789012345E-11 +ddadd71432 add 0 1.123456789012345E-12 -> 1.123456789012345E-12 +ddadd71433 add 0 1.123456789012345E-13 -> 1.123456789012345E-13 +ddadd71434 add 0 1.123456789012345E-14 -> 1.123456789012345E-14 +ddadd71435 add 0 1.123456789012345E-15 -> 1.123456789012345E-15 +ddadd71436 add 0 1.123456789012345E-16 -> 1.123456789012345E-16 +ddadd71437 add 0 1.123456789012345E-17 -> 1.123456789012345E-17 +ddadd71438 add 0 1.123456789012345E-18 -> 1.123456789012345E-18 +ddadd71439 add 0 1.123456789012345E-19 -> 1.123456789012345E-19 + +-- same, reversed 0 +ddadd71440 add 1.123456789012345 0 -> 1.123456789012345 +ddadd71441 add 1.123456789012345E-1 0 -> 0.1123456789012345 +ddadd71442 add 1.123456789012345E-2 0 -> 0.01123456789012345 +ddadd71443 add 1.123456789012345E-3 0 -> 0.001123456789012345 +ddadd71444 add 1.123456789012345E-4 0 -> 0.0001123456789012345 +ddadd71445 add 1.123456789012345E-5 0 -> 0.00001123456789012345 +ddadd71446 add 1.123456789012345E-6 0 -> 0.000001123456789012345 +ddadd71447 add 1.123456789012345E-7 0 -> 1.123456789012345E-7 +ddadd71448 add 1.123456789012345E-8 0 -> 1.123456789012345E-8 +ddadd71449 add 1.123456789012345E-9 0 -> 1.123456789012345E-9 +ddadd71450 add 1.123456789012345E-10 0 -> 1.123456789012345E-10 +ddadd71451 add 1.123456789012345E-11 0 -> 1.123456789012345E-11 +ddadd71452 add 1.123456789012345E-12 0 -> 1.123456789012345E-12 +ddadd71453 add 1.123456789012345E-13 0 -> 1.123456789012345E-13 +ddadd71454 add 1.123456789012345E-14 0 -> 1.123456789012345E-14 +ddadd71455 add 1.123456789012345E-15 0 -> 1.123456789012345E-15 +ddadd71456 add 1.123456789012345E-16 0 -> 1.123456789012345E-16 +ddadd71457 add 1.123456789012345E-17 0 -> 1.123456789012345E-17 +ddadd71458 add 1.123456789012345E-18 0 -> 1.123456789012345E-18 +ddadd71459 add 1.123456789012345E-19 0 -> 1.123456789012345E-19 + +-- same, Es on the 0 +ddadd71460 add 1.123456789012345 0E-0 -> 1.123456789012345 +ddadd71461 add 1.123456789012345 0E-1 -> 1.123456789012345 +ddadd71462 add 1.123456789012345 0E-2 -> 1.123456789012345 +ddadd71463 add 1.123456789012345 0E-3 -> 1.123456789012345 +ddadd71464 add 1.123456789012345 0E-4 -> 1.123456789012345 +ddadd71465 add 1.123456789012345 0E-5 -> 1.123456789012345 +ddadd71466 add 1.123456789012345 0E-6 -> 1.123456789012345 +ddadd71467 add 1.123456789012345 0E-7 -> 1.123456789012345 +ddadd71468 add 1.123456789012345 0E-8 -> 1.123456789012345 +ddadd71469 add 1.123456789012345 0E-9 -> 1.123456789012345 +ddadd71470 add 1.123456789012345 0E-10 -> 1.123456789012345 +ddadd71471 add 1.123456789012345 0E-11 -> 1.123456789012345 +ddadd71472 add 1.123456789012345 0E-12 -> 1.123456789012345 +ddadd71473 add 1.123456789012345 0E-13 -> 1.123456789012345 +ddadd71474 add 1.123456789012345 0E-14 -> 1.123456789012345 +ddadd71475 add 1.123456789012345 0E-15 -> 1.123456789012345 +-- next four flag Rounded because the 0 extends the result +ddadd71476 add 1.123456789012345 0E-16 -> 1.123456789012345 Rounded +ddadd71477 add 1.123456789012345 0E-17 -> 1.123456789012345 Rounded +ddadd71478 add 1.123456789012345 0E-18 -> 1.123456789012345 Rounded +ddadd71479 add 1.123456789012345 0E-19 -> 1.123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +ddadd71500 add 0 0E-19 -> 0E-19 +ddadd71501 add -0 0E-19 -> 0E-19 +ddadd71502 add 0 -0E-19 -> 0E-19 +ddadd71503 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71511 add -11 11 -> 0 +ddadd71512 add 11 -11 -> 0 + +rounding: half_down +-- exact zeros from zeros +ddadd71520 add 0 0E-19 -> 0E-19 +ddadd71521 add -0 0E-19 -> 0E-19 +ddadd71522 add 0 -0E-19 -> 0E-19 +ddadd71523 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71531 add -11 11 -> 0 +ddadd71532 add 11 -11 -> 0 + +rounding: half_even +-- exact zeros from zeros +ddadd71540 add 0 0E-19 -> 0E-19 +ddadd71541 add -0 0E-19 -> 0E-19 +ddadd71542 add 0 -0E-19 -> 0E-19 +ddadd71543 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71551 add -11 11 -> 0 +ddadd71552 add 11 -11 -> 0 + +rounding: up +-- exact zeros from zeros +ddadd71560 add 0 0E-19 -> 0E-19 +ddadd71561 add -0 0E-19 -> 0E-19 +ddadd71562 add 0 -0E-19 -> 0E-19 +ddadd71563 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71571 add -11 11 -> 0 +ddadd71572 add 11 -11 -> 0 + +rounding: down +-- exact zeros from zeros +ddadd71580 add 0 0E-19 -> 0E-19 +ddadd71581 add -0 0E-19 -> 0E-19 +ddadd71582 add 0 -0E-19 -> 0E-19 +ddadd71583 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71591 add -11 11 -> 0 +ddadd71592 add 11 -11 -> 0 + +rounding: ceiling +-- exact zeros from zeros +ddadd71600 add 0 0E-19 -> 0E-19 +ddadd71601 add -0 0E-19 -> 0E-19 +ddadd71602 add 0 -0E-19 -> 0E-19 +ddadd71603 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71611 add -11 11 -> 0 +ddadd71612 add 11 -11 -> 0 + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +ddadd71620 add 0 0E-19 -> 0E-19 +ddadd71621 add -0 0E-19 -> -0E-19 -- * +ddadd71622 add 0 -0E-19 -> -0E-19 -- * +ddadd71623 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddadd71631 add -11 11 -> -0 -- * +ddadd71632 add 11 -11 -> -0 -- * + +-- Examples from SQL proposal (Krishna Kulkarni) +ddadd71701 add 130E-2 120E-2 -> 2.50 +ddadd71702 add 130E-2 12E-1 -> 2.50 +ddadd71703 add 130E-2 1E0 -> 2.30 +ddadd71704 add 1E2 1E4 -> 1.01E+4 +ddadd71705 add 130E-2 -120E-2 -> 0.10 +ddadd71706 add 130E-2 -12E-1 -> 0.10 +ddadd71707 add 130E-2 -1E0 -> 0.30 +ddadd71708 add 1E2 -1E4 -> -9.9E+3 + +-- query from Vincent Kulandaisamy +rounding: ceiling +ddadd71801 add 7.8822773805862E+277 -5.1757503820663E-21 -> 7.882277380586200E+277 Inexact Rounded +ddadd71802 add 7.882277380586200E+277 12.341 -> 7.882277380586201E+277 Inexact Rounded +ddadd71803 add 7.882277380586201E+277 2.7270545046613E-31 -> 7.882277380586202E+277 Inexact Rounded + +ddadd71811 add 12.341 -5.1757503820663E-21 -> 12.34100000000000 Inexact Rounded +ddadd71812 add 12.34100000000000 2.7270545046613E-31 -> 12.34100000000001 Inexact Rounded +ddadd71813 add 12.34100000000001 7.8822773805862E+277 -> 7.882277380586201E+277 Inexact Rounded + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +ddadd75001 add 1234567890123456 1 -> 1234567890123457 +ddadd75002 add 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded +ddadd75003 add 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded +ddadd75004 add 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded +ddadd75005 add 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded +ddadd75006 add 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded +ddadd75007 add 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded +ddadd75008 add 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded +ddadd75009 add 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded +ddadd75010 add 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded +ddadd75011 add 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded +ddadd75012 add 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded +ddadd75013 add 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded +ddadd75014 add 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded +ddadd75015 add 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded +ddadd75016 add 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded +ddadd75017 add 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded +ddadd75018 add 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded +ddadd75019 add 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded +ddadd75020 add 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded +ddadd75021 add 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded + +-- widening second argument at gap +ddadd75030 add 12345678 1 -> 12345679 +ddadd75031 add 12345678 0.1 -> 12345678.1 +ddadd75032 add 12345678 0.12 -> 12345678.12 +ddadd75033 add 12345678 0.123 -> 12345678.123 +ddadd75034 add 12345678 0.1234 -> 12345678.1234 +ddadd75035 add 12345678 0.12345 -> 12345678.12345 +ddadd75036 add 12345678 0.123456 -> 12345678.123456 +ddadd75037 add 12345678 0.1234567 -> 12345678.1234567 +ddadd75038 add 12345678 0.12345678 -> 12345678.12345678 +ddadd75039 add 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded +ddadd75040 add 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded +ddadd75041 add 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded +ddadd75042 add 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded +ddadd75043 add 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded +ddadd75044 add 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded +ddadd75045 add 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded +ddadd75046 add 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded +ddadd75047 add 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded +ddadd75048 add 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded +ddadd75049 add 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +ddadd75050 add 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded +ddadd75051 add 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded +ddadd75052 add 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded +ddadd75053 add 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded +ddadd75054 add 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded +ddadd75055 add 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded +ddadd75056 add 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded +ddadd75057 add 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded +ddadd75060 add 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded +ddadd75061 add 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded +ddadd75062 add 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded +ddadd75063 add 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded +ddadd75064 add 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded +ddadd75065 add 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded +ddadd75066 add 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded +ddadd75067 add 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +ddadd75070 add 12345678 1E-8 -> 12345678.00000001 +ddadd75071 add 12345678 1E-9 -> 12345678.00000001 Inexact Rounded +ddadd75072 add 12345678 1E-10 -> 12345678.00000001 Inexact Rounded +ddadd75073 add 12345678 1E-11 -> 12345678.00000001 Inexact Rounded +ddadd75074 add 12345678 1E-12 -> 12345678.00000001 Inexact Rounded +ddadd75075 add 12345678 1E-13 -> 12345678.00000001 Inexact Rounded +ddadd75076 add 12345678 1E-14 -> 12345678.00000001 Inexact Rounded +ddadd75077 add 12345678 1E-15 -> 12345678.00000001 Inexact Rounded +ddadd75078 add 12345678 1E-16 -> 12345678.00000001 Inexact Rounded +ddadd75079 add 12345678 1E-17 -> 12345678.00000001 Inexact Rounded +ddadd75080 add 12345678 1E-18 -> 12345678.00000001 Inexact Rounded +ddadd75081 add 12345678 1E-19 -> 12345678.00000001 Inexact Rounded +ddadd75082 add 12345678 1E-20 -> 12345678.00000001 Inexact Rounded +ddadd75083 add 12345678 1E-25 -> 12345678.00000001 Inexact Rounded +ddadd75084 add 12345678 1E-30 -> 12345678.00000001 Inexact Rounded +ddadd75085 add 12345678 1E-31 -> 12345678.00000001 Inexact Rounded +ddadd75086 add 12345678 1E-32 -> 12345678.00000001 Inexact Rounded +ddadd75087 add 12345678 1E-33 -> 12345678.00000001 Inexact Rounded +ddadd75088 add 12345678 1E-34 -> 12345678.00000001 Inexact Rounded +ddadd75089 add 12345678 1E-35 -> 12345678.00000001 Inexact Rounded + +-- Punit's +ddadd75100 add 1.000 -200.000 -> -199.000 + +-- Rounding swathe +rounding: half_even +ddadd81100 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81101 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81102 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81103 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81104 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81105 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81106 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81107 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81108 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81109 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81120 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81121 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: half_up +ddadd81200 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81201 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81202 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81203 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81204 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81205 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81206 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81207 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81208 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81209 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81220 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81221 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: half_down +ddadd81300 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81301 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81302 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81303 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81304 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81305 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81306 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81307 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81308 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81309 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81320 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81321 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: up +ddadd81400 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81401 add .2301 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81402 add .2310 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81403 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81404 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81405 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81406 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81407 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81408 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81409 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81411 add -.2399 -12345678901234.00 -> -12345678901234.24 Inexact Rounded +ddadd81420 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81421 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: down +ddadd81500 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81501 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81502 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81503 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81504 add .2351 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81505 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81506 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81507 add .2360 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81508 add .2370 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81509 add .2399 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81511 add -.2399 -12345678901234.00 -> -12345678901234.23 Inexact Rounded +ddadd81520 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded +ddadd81521 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded + +rounding: ceiling +ddadd81600 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81601 add .2301 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81602 add .2310 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81603 add .2350 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81604 add .2351 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81605 add .2450 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81606 add .2451 12345678901234.00 -> 12345678901234.25 Inexact Rounded +ddadd81607 add .2360 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81608 add .2370 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81609 add .2399 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81611 add -.2399 -12345678901234.00 -> -12345678901234.23 Inexact Rounded +ddadd81620 add 9999999999999999E+369 9E+369 -> Infinity Overflow Inexact Rounded +ddadd81621 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded + +rounding: floor +ddadd81700 add .2300 12345678901234.00 -> 12345678901234.23 Rounded +ddadd81701 add .2301 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81702 add .2310 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81703 add .2350 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81704 add .2351 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81705 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81706 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd81707 add .2360 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81708 add .2370 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81709 add .2399 12345678901234.00 -> 12345678901234.23 Inexact Rounded +ddadd81711 add -.2399 -12345678901234.00 -> -12345678901234.24 Inexact Rounded +ddadd81720 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded +ddadd81721 add -9999999999999999E+369 -9E+369 -> -Infinity Overflow Inexact Rounded + +rounding: 05up +ddadd81800 add .2000 12345678901234.00 -> 12345678901234.20 Rounded +ddadd81801 add .2001 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81802 add .2010 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81803 add .2050 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81804 add .2051 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81807 add .2060 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81808 add .2070 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81809 add .2099 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81811 add -.2099 -12345678901234.00 -> -12345678901234.21 Inexact Rounded +ddadd81820 add 9999999999999999E+369 9E+369 -> 9.999999999999999E+384 Overflow Inexact Rounded +ddadd81821 add -9999999999999999E+369 -9E+369 -> -9.999999999999999E+384 Overflow Inexact Rounded + +ddadd81900 add .2100 12345678901234.00 -> 12345678901234.21 Rounded +ddadd81901 add .2101 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81902 add .2110 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81903 add .2150 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81904 add .2151 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81907 add .2160 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81908 add .2170 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81909 add .2199 12345678901234.00 -> 12345678901234.21 Inexact Rounded +ddadd81911 add -.2199 -12345678901234.00 -> -12345678901234.21 Inexact Rounded + +ddadd82000 add .2400 12345678901234.00 -> 12345678901234.24 Rounded +ddadd82001 add .2401 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82002 add .2410 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82003 add .2450 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82004 add .2451 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82007 add .2460 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82008 add .2470 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82009 add .2499 12345678901234.00 -> 12345678901234.24 Inexact Rounded +ddadd82011 add -.2499 -12345678901234.00 -> -12345678901234.24 Inexact Rounded + +ddadd82100 add .2500 12345678901234.00 -> 12345678901234.25 Rounded +ddadd82101 add .2501 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82102 add .2510 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82103 add .2550 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82104 add .2551 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82107 add .2560 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82108 add .2570 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82109 add .2599 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82111 add -.2599 -12345678901234.00 -> -12345678901234.26 Inexact Rounded + +ddadd82200 add .2600 12345678901234.00 -> 12345678901234.26 Rounded +ddadd82201 add .2601 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82202 add .2610 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82203 add .2650 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82204 add .2651 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82207 add .2660 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82208 add .2670 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82209 add .2699 12345678901234.00 -> 12345678901234.26 Inexact Rounded +ddadd82211 add -.2699 -12345678901234.00 -> -12345678901234.26 Inexact Rounded + +ddadd82300 add .2900 12345678901234.00 -> 12345678901234.29 Rounded +ddadd82301 add .2901 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82302 add .2910 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82303 add .2950 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82304 add .2951 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82307 add .2960 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82308 add .2970 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82309 add .2999 12345678901234.00 -> 12345678901234.29 Inexact Rounded +ddadd82311 add -.2999 -12345678901234.00 -> -12345678901234.29 Inexact Rounded + +-- Null tests +ddadd9990 add 10 # -> NaN Invalid_operation +ddadd9991 add # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddAnd.decTest b/Lib/test/decimaltestdata/ddAnd.decTest index 64a9f92df9a..676517548c6 100644 --- a/Lib/test/decimaltestdata/ddAnd.decTest +++ b/Lib/test/decimaltestdata/ddAnd.decTest @@ -1,347 +1,347 @@ ------------------------------------------------------------------------- --- ddAnd.decTest -- digitwise logical AND for decDoubles -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check (truth table) -ddand001 and 0 0 -> 0 -ddand002 and 0 1 -> 0 -ddand003 and 1 0 -> 0 -ddand004 and 1 1 -> 1 -ddand005 and 1100 1010 -> 1000 --- and at msd and msd-1 --- 1234567890123456 1234567890123456 1234567890123456 -ddand006 and 0000000000000000 0000000000000000 -> 0 -ddand007 and 0000000000000000 1000000000000000 -> 0 -ddand008 and 1000000000000000 0000000000000000 -> 0 -ddand009 and 1000000000000000 1000000000000000 -> 1000000000000000 -ddand010 and 0000000000000000 0000000000000000 -> 0 -ddand011 and 0000000000000000 0100000000000000 -> 0 -ddand012 and 0100000000000000 0000000000000000 -> 0 -ddand013 and 0100000000000000 0100000000000000 -> 100000000000000 - --- Various lengths --- 1234567890123456 1234567890123456 1234567890123456 -ddand021 and 1111111111111111 1111111111111111 -> 1111111111111111 -ddand024 and 1111111111111111 111111111111111 -> 111111111111111 -ddand025 and 1111111111111111 11111111111111 -> 11111111111111 -ddand026 and 1111111111111111 1111111111111 -> 1111111111111 -ddand027 and 1111111111111111 111111111111 -> 111111111111 -ddand028 and 1111111111111111 11111111111 -> 11111111111 -ddand029 and 1111111111111111 1111111111 -> 1111111111 -ddand030 and 1111111111111111 111111111 -> 111111111 -ddand031 and 1111111111111111 11111111 -> 11111111 -ddand032 and 1111111111111111 1111111 -> 1111111 -ddand033 and 1111111111111111 111111 -> 111111 -ddand034 and 1111111111111111 11111 -> 11111 -ddand035 and 1111111111111111 1111 -> 1111 -ddand036 and 1111111111111111 111 -> 111 -ddand037 and 1111111111111111 11 -> 11 -ddand038 and 1111111111111111 1 -> 1 -ddand039 and 1111111111111111 0 -> 0 - -ddand040 and 1111111111111111 1111111111111111 -> 1111111111111111 -ddand041 and 111111111111111 1111111111111111 -> 111111111111111 -ddand042 and 111111111111111 1111111111111111 -> 111111111111111 -ddand043 and 11111111111111 1111111111111111 -> 11111111111111 -ddand044 and 1111111111111 1111111111111111 -> 1111111111111 -ddand045 and 111111111111 1111111111111111 -> 111111111111 -ddand046 and 11111111111 1111111111111111 -> 11111111111 -ddand047 and 1111111111 1111111111111111 -> 1111111111 -ddand048 and 111111111 1111111111111111 -> 111111111 -ddand049 and 11111111 1111111111111111 -> 11111111 -ddand050 and 1111111 1111111111111111 -> 1111111 -ddand051 and 111111 1111111111111111 -> 111111 -ddand052 and 11111 1111111111111111 -> 11111 -ddand053 and 1111 1111111111111111 -> 1111 -ddand054 and 111 1111111111111111 -> 111 -ddand055 and 11 1111111111111111 -> 11 -ddand056 and 1 1111111111111111 -> 1 -ddand057 and 0 1111111111111111 -> 0 - -ddand150 and 1111111111 1 -> 1 -ddand151 and 111111111 1 -> 1 -ddand152 and 11111111 1 -> 1 -ddand153 and 1111111 1 -> 1 -ddand154 and 111111 1 -> 1 -ddand155 and 11111 1 -> 1 -ddand156 and 1111 1 -> 1 -ddand157 and 111 1 -> 1 -ddand158 and 11 1 -> 1 -ddand159 and 1 1 -> 1 - -ddand160 and 1111111111 0 -> 0 -ddand161 and 111111111 0 -> 0 -ddand162 and 11111111 0 -> 0 -ddand163 and 1111111 0 -> 0 -ddand164 and 111111 0 -> 0 -ddand165 and 11111 0 -> 0 -ddand166 and 1111 0 -> 0 -ddand167 and 111 0 -> 0 -ddand168 and 11 0 -> 0 -ddand169 and 1 0 -> 0 - -ddand170 and 1 1111111111 -> 1 -ddand171 and 1 111111111 -> 1 -ddand172 and 1 11111111 -> 1 -ddand173 and 1 1111111 -> 1 -ddand174 and 1 111111 -> 1 -ddand175 and 1 11111 -> 1 -ddand176 and 1 1111 -> 1 -ddand177 and 1 111 -> 1 -ddand178 and 1 11 -> 1 -ddand179 and 1 1 -> 1 - -ddand180 and 0 1111111111 -> 0 -ddand181 and 0 111111111 -> 0 -ddand182 and 0 11111111 -> 0 -ddand183 and 0 1111111 -> 0 -ddand184 and 0 111111 -> 0 -ddand185 and 0 11111 -> 0 -ddand186 and 0 1111 -> 0 -ddand187 and 0 111 -> 0 -ddand188 and 0 11 -> 0 -ddand189 and 0 1 -> 0 - -ddand090 and 011111111 111111111 -> 11111111 -ddand091 and 101111111 111111111 -> 101111111 -ddand092 and 110111111 111111111 -> 110111111 -ddand093 and 111011111 111111111 -> 111011111 -ddand094 and 111101111 111111111 -> 111101111 -ddand095 and 111110111 111111111 -> 111110111 -ddand096 and 111111011 111111111 -> 111111011 -ddand097 and 111111101 111111111 -> 111111101 -ddand098 and 111111110 111111111 -> 111111110 - -ddand100 and 111111111 011111111 -> 11111111 -ddand101 and 111111111 101111111 -> 101111111 -ddand102 and 111111111 110111111 -> 110111111 -ddand103 and 111111111 111011111 -> 111011111 -ddand104 and 111111111 111101111 -> 111101111 -ddand105 and 111111111 111110111 -> 111110111 -ddand106 and 111111111 111111011 -> 111111011 -ddand107 and 111111111 111111101 -> 111111101 -ddand108 and 111111111 111111110 -> 111111110 - --- non-0/1 should not be accepted, nor should signs -ddand220 and 111111112 111111111 -> NaN Invalid_operation -ddand221 and 333333333 333333333 -> NaN Invalid_operation -ddand222 and 555555555 555555555 -> NaN Invalid_operation -ddand223 and 777777777 777777777 -> NaN Invalid_operation -ddand224 and 999999999 999999999 -> NaN Invalid_operation -ddand225 and 222222222 999999999 -> NaN Invalid_operation -ddand226 and 444444444 999999999 -> NaN Invalid_operation -ddand227 and 666666666 999999999 -> NaN Invalid_operation -ddand228 and 888888888 999999999 -> NaN Invalid_operation -ddand229 and 999999999 222222222 -> NaN Invalid_operation -ddand230 and 999999999 444444444 -> NaN Invalid_operation -ddand231 and 999999999 666666666 -> NaN Invalid_operation -ddand232 and 999999999 888888888 -> NaN Invalid_operation --- a few randoms -ddand240 and 567468689 -934981942 -> NaN Invalid_operation -ddand241 and 567367689 934981942 -> NaN Invalid_operation -ddand242 and -631917772 -706014634 -> NaN Invalid_operation -ddand243 and -756253257 138579234 -> NaN Invalid_operation -ddand244 and 835590149 567435400 -> NaN Invalid_operation --- test MSD -ddand250 and 2000000000000000 1000000000000000 -> NaN Invalid_operation -ddand251 and 7000000000000000 1000000000000000 -> NaN Invalid_operation -ddand252 and 8000000000000000 1000000000000000 -> NaN Invalid_operation -ddand253 and 9000000000000000 1000000000000000 -> NaN Invalid_operation -ddand254 and 2000000000000000 0000000000000000 -> NaN Invalid_operation -ddand255 and 7000000000000000 0000000000000000 -> NaN Invalid_operation -ddand256 and 8000000000000000 0000000000000000 -> NaN Invalid_operation -ddand257 and 9000000000000000 0000000000000000 -> NaN Invalid_operation -ddand258 and 1000000000000000 2000000000000000 -> NaN Invalid_operation -ddand259 and 1000000000000000 7000000000000000 -> NaN Invalid_operation -ddand260 and 1000000000000000 8000000000000000 -> NaN Invalid_operation -ddand261 and 1000000000000000 9000000000000000 -> NaN Invalid_operation -ddand262 and 0000000000000000 2000000000000000 -> NaN Invalid_operation -ddand263 and 0000000000000000 7000000000000000 -> NaN Invalid_operation -ddand264 and 0000000000000000 8000000000000000 -> NaN Invalid_operation -ddand265 and 0000000000000000 9000000000000000 -> NaN Invalid_operation --- test MSD-1 -ddand270 and 0200001000000000 1000100000000010 -> NaN Invalid_operation -ddand271 and 0700000100000000 1000010000000100 -> NaN Invalid_operation -ddand272 and 0800000010000000 1000001000001000 -> NaN Invalid_operation -ddand273 and 0900000001000000 1000000100010000 -> NaN Invalid_operation -ddand274 and 1000000000100000 0200000010100000 -> NaN Invalid_operation -ddand275 and 1000000000010000 0700000001000000 -> NaN Invalid_operation -ddand276 and 1000000000001000 0800000010100000 -> NaN Invalid_operation -ddand277 and 1000000000000100 0900000000010000 -> NaN Invalid_operation --- test LSD -ddand280 and 0010000000000002 1000000100000001 -> NaN Invalid_operation -ddand281 and 0001000000000007 1000001000000011 -> NaN Invalid_operation -ddand282 and 0000100000000008 1000010000000001 -> NaN Invalid_operation -ddand283 and 0000010000000009 1000100000000001 -> NaN Invalid_operation -ddand284 and 1000001000000000 0001000000000002 -> NaN Invalid_operation -ddand285 and 1000000100000000 0010000000000007 -> NaN Invalid_operation -ddand286 and 1000000010000000 0100000000000008 -> NaN Invalid_operation -ddand287 and 1000000001000000 1000000000000009 -> NaN Invalid_operation --- test Middie -ddand288 and 0010000020000000 1000001000000000 -> NaN Invalid_operation -ddand289 and 0001000070000001 1000000100000000 -> NaN Invalid_operation -ddand290 and 0000100080000010 1000000010000000 -> NaN Invalid_operation -ddand291 and 0000010090000100 1000000001000000 -> NaN Invalid_operation -ddand292 and 1000001000001000 0000000020100000 -> NaN Invalid_operation -ddand293 and 1000000100010000 0000000070010000 -> NaN Invalid_operation -ddand294 and 1000000010100000 0000000080001000 -> NaN Invalid_operation -ddand295 and 1000000001000000 0000000090000100 -> NaN Invalid_operation --- signs -ddand296 and -1000000001000000 -0000010000000100 -> NaN Invalid_operation -ddand297 and -1000000001000000 0000000010000100 -> NaN Invalid_operation -ddand298 and 1000000001000000 -0000001000000100 -> NaN Invalid_operation -ddand299 and 1000000001000000 0000000011000100 -> 1000000 - --- Nmax, Nmin, Ntiny-like -ddand331 and 2 9.99999999E+199 -> NaN Invalid_operation -ddand332 and 3 1E-199 -> NaN Invalid_operation -ddand333 and 4 1.00000000E-199 -> NaN Invalid_operation -ddand334 and 5 1E-100 -> NaN Invalid_operation -ddand335 and 6 -1E-100 -> NaN Invalid_operation -ddand336 and 7 -1.00000000E-199 -> NaN Invalid_operation -ddand337 and 8 -1E-199 -> NaN Invalid_operation -ddand338 and 9 -9.99999999E+199 -> NaN Invalid_operation -ddand341 and 9.99999999E+199 -18 -> NaN Invalid_operation -ddand342 and 1E-199 01 -> NaN Invalid_operation -ddand343 and 1.00000000E-199 -18 -> NaN Invalid_operation -ddand344 and 1E-100 18 -> NaN Invalid_operation -ddand345 and -1E-100 -10 -> NaN Invalid_operation -ddand346 and -1.00000000E-199 18 -> NaN Invalid_operation -ddand347 and -1E-199 10 -> NaN Invalid_operation -ddand348 and -9.99999999E+199 -18 -> NaN Invalid_operation - --- A few other non-integers -ddand361 and 1.0 1 -> NaN Invalid_operation -ddand362 and 1E+1 1 -> NaN Invalid_operation -ddand363 and 0.0 1 -> NaN Invalid_operation -ddand364 and 0E+1 1 -> NaN Invalid_operation -ddand365 and 9.9 1 -> NaN Invalid_operation -ddand366 and 9E+1 1 -> NaN Invalid_operation -ddand371 and 0 1.0 -> NaN Invalid_operation -ddand372 and 0 1E+1 -> NaN Invalid_operation -ddand373 and 0 0.0 -> NaN Invalid_operation -ddand374 and 0 0E+1 -> NaN Invalid_operation -ddand375 and 0 9.9 -> NaN Invalid_operation -ddand376 and 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -ddand780 and -Inf -Inf -> NaN Invalid_operation -ddand781 and -Inf -1000 -> NaN Invalid_operation -ddand782 and -Inf -1 -> NaN Invalid_operation -ddand783 and -Inf -0 -> NaN Invalid_operation -ddand784 and -Inf 0 -> NaN Invalid_operation -ddand785 and -Inf 1 -> NaN Invalid_operation -ddand786 and -Inf 1000 -> NaN Invalid_operation -ddand787 and -1000 -Inf -> NaN Invalid_operation -ddand788 and -Inf -Inf -> NaN Invalid_operation -ddand789 and -1 -Inf -> NaN Invalid_operation -ddand790 and -0 -Inf -> NaN Invalid_operation -ddand791 and 0 -Inf -> NaN Invalid_operation -ddand792 and 1 -Inf -> NaN Invalid_operation -ddand793 and 1000 -Inf -> NaN Invalid_operation -ddand794 and Inf -Inf -> NaN Invalid_operation - -ddand800 and Inf -Inf -> NaN Invalid_operation -ddand801 and Inf -1000 -> NaN Invalid_operation -ddand802 and Inf -1 -> NaN Invalid_operation -ddand803 and Inf -0 -> NaN Invalid_operation -ddand804 and Inf 0 -> NaN Invalid_operation -ddand805 and Inf 1 -> NaN Invalid_operation -ddand806 and Inf 1000 -> NaN Invalid_operation -ddand807 and Inf Inf -> NaN Invalid_operation -ddand808 and -1000 Inf -> NaN Invalid_operation -ddand809 and -Inf Inf -> NaN Invalid_operation -ddand810 and -1 Inf -> NaN Invalid_operation -ddand811 and -0 Inf -> NaN Invalid_operation -ddand812 and 0 Inf -> NaN Invalid_operation -ddand813 and 1 Inf -> NaN Invalid_operation -ddand814 and 1000 Inf -> NaN Invalid_operation -ddand815 and Inf Inf -> NaN Invalid_operation - -ddand821 and NaN -Inf -> NaN Invalid_operation -ddand822 and NaN -1000 -> NaN Invalid_operation -ddand823 and NaN -1 -> NaN Invalid_operation -ddand824 and NaN -0 -> NaN Invalid_operation -ddand825 and NaN 0 -> NaN Invalid_operation -ddand826 and NaN 1 -> NaN Invalid_operation -ddand827 and NaN 1000 -> NaN Invalid_operation -ddand828 and NaN Inf -> NaN Invalid_operation -ddand829 and NaN NaN -> NaN Invalid_operation -ddand830 and -Inf NaN -> NaN Invalid_operation -ddand831 and -1000 NaN -> NaN Invalid_operation -ddand832 and -1 NaN -> NaN Invalid_operation -ddand833 and -0 NaN -> NaN Invalid_operation -ddand834 and 0 NaN -> NaN Invalid_operation -ddand835 and 1 NaN -> NaN Invalid_operation -ddand836 and 1000 NaN -> NaN Invalid_operation -ddand837 and Inf NaN -> NaN Invalid_operation - -ddand841 and sNaN -Inf -> NaN Invalid_operation -ddand842 and sNaN -1000 -> NaN Invalid_operation -ddand843 and sNaN -1 -> NaN Invalid_operation -ddand844 and sNaN -0 -> NaN Invalid_operation -ddand845 and sNaN 0 -> NaN Invalid_operation -ddand846 and sNaN 1 -> NaN Invalid_operation -ddand847 and sNaN 1000 -> NaN Invalid_operation -ddand848 and sNaN NaN -> NaN Invalid_operation -ddand849 and sNaN sNaN -> NaN Invalid_operation -ddand850 and NaN sNaN -> NaN Invalid_operation -ddand851 and -Inf sNaN -> NaN Invalid_operation -ddand852 and -1000 sNaN -> NaN Invalid_operation -ddand853 and -1 sNaN -> NaN Invalid_operation -ddand854 and -0 sNaN -> NaN Invalid_operation -ddand855 and 0 sNaN -> NaN Invalid_operation -ddand856 and 1 sNaN -> NaN Invalid_operation -ddand857 and 1000 sNaN -> NaN Invalid_operation -ddand858 and Inf sNaN -> NaN Invalid_operation -ddand859 and NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddand861 and NaN1 -Inf -> NaN Invalid_operation -ddand862 and +NaN2 -1000 -> NaN Invalid_operation -ddand863 and NaN3 1000 -> NaN Invalid_operation -ddand864 and NaN4 Inf -> NaN Invalid_operation -ddand865 and NaN5 +NaN6 -> NaN Invalid_operation -ddand866 and -Inf NaN7 -> NaN Invalid_operation -ddand867 and -1000 NaN8 -> NaN Invalid_operation -ddand868 and 1000 NaN9 -> NaN Invalid_operation -ddand869 and Inf +NaN10 -> NaN Invalid_operation -ddand871 and sNaN11 -Inf -> NaN Invalid_operation -ddand872 and sNaN12 -1000 -> NaN Invalid_operation -ddand873 and sNaN13 1000 -> NaN Invalid_operation -ddand874 and sNaN14 NaN17 -> NaN Invalid_operation -ddand875 and sNaN15 sNaN18 -> NaN Invalid_operation -ddand876 and NaN16 sNaN19 -> NaN Invalid_operation -ddand877 and -Inf +sNaN20 -> NaN Invalid_operation -ddand878 and -1000 sNaN21 -> NaN Invalid_operation -ddand879 and 1000 sNaN22 -> NaN Invalid_operation -ddand880 and Inf sNaN23 -> NaN Invalid_operation -ddand881 and +NaN25 +sNaN24 -> NaN Invalid_operation -ddand882 and -NaN26 NaN28 -> NaN Invalid_operation -ddand883 and -sNaN27 sNaN29 -> NaN Invalid_operation -ddand884 and 1000 -NaN30 -> NaN Invalid_operation -ddand885 and 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddAnd.decTest -- digitwise logical AND for decDoubles -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check (truth table) +ddand001 and 0 0 -> 0 +ddand002 and 0 1 -> 0 +ddand003 and 1 0 -> 0 +ddand004 and 1 1 -> 1 +ddand005 and 1100 1010 -> 1000 +-- and at msd and msd-1 +-- 1234567890123456 1234567890123456 1234567890123456 +ddand006 and 0000000000000000 0000000000000000 -> 0 +ddand007 and 0000000000000000 1000000000000000 -> 0 +ddand008 and 1000000000000000 0000000000000000 -> 0 +ddand009 and 1000000000000000 1000000000000000 -> 1000000000000000 +ddand010 and 0000000000000000 0000000000000000 -> 0 +ddand011 and 0000000000000000 0100000000000000 -> 0 +ddand012 and 0100000000000000 0000000000000000 -> 0 +ddand013 and 0100000000000000 0100000000000000 -> 100000000000000 + +-- Various lengths +-- 1234567890123456 1234567890123456 1234567890123456 +ddand021 and 1111111111111111 1111111111111111 -> 1111111111111111 +ddand024 and 1111111111111111 111111111111111 -> 111111111111111 +ddand025 and 1111111111111111 11111111111111 -> 11111111111111 +ddand026 and 1111111111111111 1111111111111 -> 1111111111111 +ddand027 and 1111111111111111 111111111111 -> 111111111111 +ddand028 and 1111111111111111 11111111111 -> 11111111111 +ddand029 and 1111111111111111 1111111111 -> 1111111111 +ddand030 and 1111111111111111 111111111 -> 111111111 +ddand031 and 1111111111111111 11111111 -> 11111111 +ddand032 and 1111111111111111 1111111 -> 1111111 +ddand033 and 1111111111111111 111111 -> 111111 +ddand034 and 1111111111111111 11111 -> 11111 +ddand035 and 1111111111111111 1111 -> 1111 +ddand036 and 1111111111111111 111 -> 111 +ddand037 and 1111111111111111 11 -> 11 +ddand038 and 1111111111111111 1 -> 1 +ddand039 and 1111111111111111 0 -> 0 + +ddand040 and 1111111111111111 1111111111111111 -> 1111111111111111 +ddand041 and 111111111111111 1111111111111111 -> 111111111111111 +ddand042 and 111111111111111 1111111111111111 -> 111111111111111 +ddand043 and 11111111111111 1111111111111111 -> 11111111111111 +ddand044 and 1111111111111 1111111111111111 -> 1111111111111 +ddand045 and 111111111111 1111111111111111 -> 111111111111 +ddand046 and 11111111111 1111111111111111 -> 11111111111 +ddand047 and 1111111111 1111111111111111 -> 1111111111 +ddand048 and 111111111 1111111111111111 -> 111111111 +ddand049 and 11111111 1111111111111111 -> 11111111 +ddand050 and 1111111 1111111111111111 -> 1111111 +ddand051 and 111111 1111111111111111 -> 111111 +ddand052 and 11111 1111111111111111 -> 11111 +ddand053 and 1111 1111111111111111 -> 1111 +ddand054 and 111 1111111111111111 -> 111 +ddand055 and 11 1111111111111111 -> 11 +ddand056 and 1 1111111111111111 -> 1 +ddand057 and 0 1111111111111111 -> 0 + +ddand150 and 1111111111 1 -> 1 +ddand151 and 111111111 1 -> 1 +ddand152 and 11111111 1 -> 1 +ddand153 and 1111111 1 -> 1 +ddand154 and 111111 1 -> 1 +ddand155 and 11111 1 -> 1 +ddand156 and 1111 1 -> 1 +ddand157 and 111 1 -> 1 +ddand158 and 11 1 -> 1 +ddand159 and 1 1 -> 1 + +ddand160 and 1111111111 0 -> 0 +ddand161 and 111111111 0 -> 0 +ddand162 and 11111111 0 -> 0 +ddand163 and 1111111 0 -> 0 +ddand164 and 111111 0 -> 0 +ddand165 and 11111 0 -> 0 +ddand166 and 1111 0 -> 0 +ddand167 and 111 0 -> 0 +ddand168 and 11 0 -> 0 +ddand169 and 1 0 -> 0 + +ddand170 and 1 1111111111 -> 1 +ddand171 and 1 111111111 -> 1 +ddand172 and 1 11111111 -> 1 +ddand173 and 1 1111111 -> 1 +ddand174 and 1 111111 -> 1 +ddand175 and 1 11111 -> 1 +ddand176 and 1 1111 -> 1 +ddand177 and 1 111 -> 1 +ddand178 and 1 11 -> 1 +ddand179 and 1 1 -> 1 + +ddand180 and 0 1111111111 -> 0 +ddand181 and 0 111111111 -> 0 +ddand182 and 0 11111111 -> 0 +ddand183 and 0 1111111 -> 0 +ddand184 and 0 111111 -> 0 +ddand185 and 0 11111 -> 0 +ddand186 and 0 1111 -> 0 +ddand187 and 0 111 -> 0 +ddand188 and 0 11 -> 0 +ddand189 and 0 1 -> 0 + +ddand090 and 011111111 111111111 -> 11111111 +ddand091 and 101111111 111111111 -> 101111111 +ddand092 and 110111111 111111111 -> 110111111 +ddand093 and 111011111 111111111 -> 111011111 +ddand094 and 111101111 111111111 -> 111101111 +ddand095 and 111110111 111111111 -> 111110111 +ddand096 and 111111011 111111111 -> 111111011 +ddand097 and 111111101 111111111 -> 111111101 +ddand098 and 111111110 111111111 -> 111111110 + +ddand100 and 111111111 011111111 -> 11111111 +ddand101 and 111111111 101111111 -> 101111111 +ddand102 and 111111111 110111111 -> 110111111 +ddand103 and 111111111 111011111 -> 111011111 +ddand104 and 111111111 111101111 -> 111101111 +ddand105 and 111111111 111110111 -> 111110111 +ddand106 and 111111111 111111011 -> 111111011 +ddand107 and 111111111 111111101 -> 111111101 +ddand108 and 111111111 111111110 -> 111111110 + +-- non-0/1 should not be accepted, nor should signs +ddand220 and 111111112 111111111 -> NaN Invalid_operation +ddand221 and 333333333 333333333 -> NaN Invalid_operation +ddand222 and 555555555 555555555 -> NaN Invalid_operation +ddand223 and 777777777 777777777 -> NaN Invalid_operation +ddand224 and 999999999 999999999 -> NaN Invalid_operation +ddand225 and 222222222 999999999 -> NaN Invalid_operation +ddand226 and 444444444 999999999 -> NaN Invalid_operation +ddand227 and 666666666 999999999 -> NaN Invalid_operation +ddand228 and 888888888 999999999 -> NaN Invalid_operation +ddand229 and 999999999 222222222 -> NaN Invalid_operation +ddand230 and 999999999 444444444 -> NaN Invalid_operation +ddand231 and 999999999 666666666 -> NaN Invalid_operation +ddand232 and 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +ddand240 and 567468689 -934981942 -> NaN Invalid_operation +ddand241 and 567367689 934981942 -> NaN Invalid_operation +ddand242 and -631917772 -706014634 -> NaN Invalid_operation +ddand243 and -756253257 138579234 -> NaN Invalid_operation +ddand244 and 835590149 567435400 -> NaN Invalid_operation +-- test MSD +ddand250 and 2000000000000000 1000000000000000 -> NaN Invalid_operation +ddand251 and 7000000000000000 1000000000000000 -> NaN Invalid_operation +ddand252 and 8000000000000000 1000000000000000 -> NaN Invalid_operation +ddand253 and 9000000000000000 1000000000000000 -> NaN Invalid_operation +ddand254 and 2000000000000000 0000000000000000 -> NaN Invalid_operation +ddand255 and 7000000000000000 0000000000000000 -> NaN Invalid_operation +ddand256 and 8000000000000000 0000000000000000 -> NaN Invalid_operation +ddand257 and 9000000000000000 0000000000000000 -> NaN Invalid_operation +ddand258 and 1000000000000000 2000000000000000 -> NaN Invalid_operation +ddand259 and 1000000000000000 7000000000000000 -> NaN Invalid_operation +ddand260 and 1000000000000000 8000000000000000 -> NaN Invalid_operation +ddand261 and 1000000000000000 9000000000000000 -> NaN Invalid_operation +ddand262 and 0000000000000000 2000000000000000 -> NaN Invalid_operation +ddand263 and 0000000000000000 7000000000000000 -> NaN Invalid_operation +ddand264 and 0000000000000000 8000000000000000 -> NaN Invalid_operation +ddand265 and 0000000000000000 9000000000000000 -> NaN Invalid_operation +-- test MSD-1 +ddand270 and 0200001000000000 1000100000000010 -> NaN Invalid_operation +ddand271 and 0700000100000000 1000010000000100 -> NaN Invalid_operation +ddand272 and 0800000010000000 1000001000001000 -> NaN Invalid_operation +ddand273 and 0900000001000000 1000000100010000 -> NaN Invalid_operation +ddand274 and 1000000000100000 0200000010100000 -> NaN Invalid_operation +ddand275 and 1000000000010000 0700000001000000 -> NaN Invalid_operation +ddand276 and 1000000000001000 0800000010100000 -> NaN Invalid_operation +ddand277 and 1000000000000100 0900000000010000 -> NaN Invalid_operation +-- test LSD +ddand280 and 0010000000000002 1000000100000001 -> NaN Invalid_operation +ddand281 and 0001000000000007 1000001000000011 -> NaN Invalid_operation +ddand282 and 0000100000000008 1000010000000001 -> NaN Invalid_operation +ddand283 and 0000010000000009 1000100000000001 -> NaN Invalid_operation +ddand284 and 1000001000000000 0001000000000002 -> NaN Invalid_operation +ddand285 and 1000000100000000 0010000000000007 -> NaN Invalid_operation +ddand286 and 1000000010000000 0100000000000008 -> NaN Invalid_operation +ddand287 and 1000000001000000 1000000000000009 -> NaN Invalid_operation +-- test Middie +ddand288 and 0010000020000000 1000001000000000 -> NaN Invalid_operation +ddand289 and 0001000070000001 1000000100000000 -> NaN Invalid_operation +ddand290 and 0000100080000010 1000000010000000 -> NaN Invalid_operation +ddand291 and 0000010090000100 1000000001000000 -> NaN Invalid_operation +ddand292 and 1000001000001000 0000000020100000 -> NaN Invalid_operation +ddand293 and 1000000100010000 0000000070010000 -> NaN Invalid_operation +ddand294 and 1000000010100000 0000000080001000 -> NaN Invalid_operation +ddand295 and 1000000001000000 0000000090000100 -> NaN Invalid_operation +-- signs +ddand296 and -1000000001000000 -0000010000000100 -> NaN Invalid_operation +ddand297 and -1000000001000000 0000000010000100 -> NaN Invalid_operation +ddand298 and 1000000001000000 -0000001000000100 -> NaN Invalid_operation +ddand299 and 1000000001000000 0000000011000100 -> 1000000 + +-- Nmax, Nmin, Ntiny-like +ddand331 and 2 9.99999999E+199 -> NaN Invalid_operation +ddand332 and 3 1E-199 -> NaN Invalid_operation +ddand333 and 4 1.00000000E-199 -> NaN Invalid_operation +ddand334 and 5 1E-100 -> NaN Invalid_operation +ddand335 and 6 -1E-100 -> NaN Invalid_operation +ddand336 and 7 -1.00000000E-199 -> NaN Invalid_operation +ddand337 and 8 -1E-199 -> NaN Invalid_operation +ddand338 and 9 -9.99999999E+199 -> NaN Invalid_operation +ddand341 and 9.99999999E+199 -18 -> NaN Invalid_operation +ddand342 and 1E-199 01 -> NaN Invalid_operation +ddand343 and 1.00000000E-199 -18 -> NaN Invalid_operation +ddand344 and 1E-100 18 -> NaN Invalid_operation +ddand345 and -1E-100 -10 -> NaN Invalid_operation +ddand346 and -1.00000000E-199 18 -> NaN Invalid_operation +ddand347 and -1E-199 10 -> NaN Invalid_operation +ddand348 and -9.99999999E+199 -18 -> NaN Invalid_operation + +-- A few other non-integers +ddand361 and 1.0 1 -> NaN Invalid_operation +ddand362 and 1E+1 1 -> NaN Invalid_operation +ddand363 and 0.0 1 -> NaN Invalid_operation +ddand364 and 0E+1 1 -> NaN Invalid_operation +ddand365 and 9.9 1 -> NaN Invalid_operation +ddand366 and 9E+1 1 -> NaN Invalid_operation +ddand371 and 0 1.0 -> NaN Invalid_operation +ddand372 and 0 1E+1 -> NaN Invalid_operation +ddand373 and 0 0.0 -> NaN Invalid_operation +ddand374 and 0 0E+1 -> NaN Invalid_operation +ddand375 and 0 9.9 -> NaN Invalid_operation +ddand376 and 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +ddand780 and -Inf -Inf -> NaN Invalid_operation +ddand781 and -Inf -1000 -> NaN Invalid_operation +ddand782 and -Inf -1 -> NaN Invalid_operation +ddand783 and -Inf -0 -> NaN Invalid_operation +ddand784 and -Inf 0 -> NaN Invalid_operation +ddand785 and -Inf 1 -> NaN Invalid_operation +ddand786 and -Inf 1000 -> NaN Invalid_operation +ddand787 and -1000 -Inf -> NaN Invalid_operation +ddand788 and -Inf -Inf -> NaN Invalid_operation +ddand789 and -1 -Inf -> NaN Invalid_operation +ddand790 and -0 -Inf -> NaN Invalid_operation +ddand791 and 0 -Inf -> NaN Invalid_operation +ddand792 and 1 -Inf -> NaN Invalid_operation +ddand793 and 1000 -Inf -> NaN Invalid_operation +ddand794 and Inf -Inf -> NaN Invalid_operation + +ddand800 and Inf -Inf -> NaN Invalid_operation +ddand801 and Inf -1000 -> NaN Invalid_operation +ddand802 and Inf -1 -> NaN Invalid_operation +ddand803 and Inf -0 -> NaN Invalid_operation +ddand804 and Inf 0 -> NaN Invalid_operation +ddand805 and Inf 1 -> NaN Invalid_operation +ddand806 and Inf 1000 -> NaN Invalid_operation +ddand807 and Inf Inf -> NaN Invalid_operation +ddand808 and -1000 Inf -> NaN Invalid_operation +ddand809 and -Inf Inf -> NaN Invalid_operation +ddand810 and -1 Inf -> NaN Invalid_operation +ddand811 and -0 Inf -> NaN Invalid_operation +ddand812 and 0 Inf -> NaN Invalid_operation +ddand813 and 1 Inf -> NaN Invalid_operation +ddand814 and 1000 Inf -> NaN Invalid_operation +ddand815 and Inf Inf -> NaN Invalid_operation + +ddand821 and NaN -Inf -> NaN Invalid_operation +ddand822 and NaN -1000 -> NaN Invalid_operation +ddand823 and NaN -1 -> NaN Invalid_operation +ddand824 and NaN -0 -> NaN Invalid_operation +ddand825 and NaN 0 -> NaN Invalid_operation +ddand826 and NaN 1 -> NaN Invalid_operation +ddand827 and NaN 1000 -> NaN Invalid_operation +ddand828 and NaN Inf -> NaN Invalid_operation +ddand829 and NaN NaN -> NaN Invalid_operation +ddand830 and -Inf NaN -> NaN Invalid_operation +ddand831 and -1000 NaN -> NaN Invalid_operation +ddand832 and -1 NaN -> NaN Invalid_operation +ddand833 and -0 NaN -> NaN Invalid_operation +ddand834 and 0 NaN -> NaN Invalid_operation +ddand835 and 1 NaN -> NaN Invalid_operation +ddand836 and 1000 NaN -> NaN Invalid_operation +ddand837 and Inf NaN -> NaN Invalid_operation + +ddand841 and sNaN -Inf -> NaN Invalid_operation +ddand842 and sNaN -1000 -> NaN Invalid_operation +ddand843 and sNaN -1 -> NaN Invalid_operation +ddand844 and sNaN -0 -> NaN Invalid_operation +ddand845 and sNaN 0 -> NaN Invalid_operation +ddand846 and sNaN 1 -> NaN Invalid_operation +ddand847 and sNaN 1000 -> NaN Invalid_operation +ddand848 and sNaN NaN -> NaN Invalid_operation +ddand849 and sNaN sNaN -> NaN Invalid_operation +ddand850 and NaN sNaN -> NaN Invalid_operation +ddand851 and -Inf sNaN -> NaN Invalid_operation +ddand852 and -1000 sNaN -> NaN Invalid_operation +ddand853 and -1 sNaN -> NaN Invalid_operation +ddand854 and -0 sNaN -> NaN Invalid_operation +ddand855 and 0 sNaN -> NaN Invalid_operation +ddand856 and 1 sNaN -> NaN Invalid_operation +ddand857 and 1000 sNaN -> NaN Invalid_operation +ddand858 and Inf sNaN -> NaN Invalid_operation +ddand859 and NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddand861 and NaN1 -Inf -> NaN Invalid_operation +ddand862 and +NaN2 -1000 -> NaN Invalid_operation +ddand863 and NaN3 1000 -> NaN Invalid_operation +ddand864 and NaN4 Inf -> NaN Invalid_operation +ddand865 and NaN5 +NaN6 -> NaN Invalid_operation +ddand866 and -Inf NaN7 -> NaN Invalid_operation +ddand867 and -1000 NaN8 -> NaN Invalid_operation +ddand868 and 1000 NaN9 -> NaN Invalid_operation +ddand869 and Inf +NaN10 -> NaN Invalid_operation +ddand871 and sNaN11 -Inf -> NaN Invalid_operation +ddand872 and sNaN12 -1000 -> NaN Invalid_operation +ddand873 and sNaN13 1000 -> NaN Invalid_operation +ddand874 and sNaN14 NaN17 -> NaN Invalid_operation +ddand875 and sNaN15 sNaN18 -> NaN Invalid_operation +ddand876 and NaN16 sNaN19 -> NaN Invalid_operation +ddand877 and -Inf +sNaN20 -> NaN Invalid_operation +ddand878 and -1000 sNaN21 -> NaN Invalid_operation +ddand879 and 1000 sNaN22 -> NaN Invalid_operation +ddand880 and Inf sNaN23 -> NaN Invalid_operation +ddand881 and +NaN25 +sNaN24 -> NaN Invalid_operation +ddand882 and -NaN26 NaN28 -> NaN Invalid_operation +ddand883 and -sNaN27 sNaN29 -> NaN Invalid_operation +ddand884 and 1000 -NaN30 -> NaN Invalid_operation +ddand885 and 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddBase.decTest b/Lib/test/decimaltestdata/ddBase.decTest index 40febf86c5e..fbd6ccd94de 100644 --- a/Lib/test/decimaltestdata/ddBase.decTest +++ b/Lib/test/decimaltestdata/ddBase.decTest @@ -1,1104 +1,1104 @@ ------------------------------------------------------------------------- --- ddBase.decTest -- base decDouble <--> string conversions -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests base conversions from string to a decimal number --- and back to a string (in Scientific form) - --- Note that unlike other operations the operand is subject to rounding --- to conform to emax and precision settings (that is, numbers will --- conform to rules and exponent will be in permitted range). The --- 'left hand side', therefore, may have numbers that cannot be --- represented in a decDouble. Some testcases go to the limit of the --- next-wider format, and hence these testcases may also be used to --- test narrowing and widening operations. - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddbas001 toSci 0 -> 0 -ddbas002 toSci 1 -> 1 -ddbas003 toSci 1.0 -> 1.0 -ddbas004 toSci 1.00 -> 1.00 -ddbas005 toSci 10 -> 10 -ddbas006 toSci 1000 -> 1000 -ddbas007 toSci 10.0 -> 10.0 -ddbas008 toSci 10.1 -> 10.1 -ddbas009 toSci 10.4 -> 10.4 -ddbas010 toSci 10.5 -> 10.5 -ddbas011 toSci 10.6 -> 10.6 -ddbas012 toSci 10.9 -> 10.9 -ddbas013 toSci 11.0 -> 11.0 -ddbas014 toSci 1.234 -> 1.234 -ddbas015 toSci 0.123 -> 0.123 -ddbas016 toSci 0.012 -> 0.012 -ddbas017 toSci -0 -> -0 -ddbas018 toSci -0.0 -> -0.0 -ddbas019 toSci -00.00 -> -0.00 - -ddbas021 toSci -1 -> -1 -ddbas022 toSci -1.0 -> -1.0 -ddbas023 toSci -0.1 -> -0.1 -ddbas024 toSci -9.1 -> -9.1 -ddbas025 toSci -9.11 -> -9.11 -ddbas026 toSci -9.119 -> -9.119 -ddbas027 toSci -9.999 -> -9.999 - -ddbas030 toSci '123456789.123456' -> '123456789.123456' -ddbas031 toSci '123456789.000000' -> '123456789.000000' -ddbas032 toSci '123456789123456' -> '123456789123456' -ddbas033 toSci '0.0000123456789' -> '0.0000123456789' -ddbas034 toSci '0.00000123456789' -> '0.00000123456789' -ddbas035 toSci '0.000000123456789' -> '1.23456789E-7' -ddbas036 toSci '0.0000000123456789' -> '1.23456789E-8' - -ddbas037 toSci '0.123456789012344' -> '0.123456789012344' -ddbas038 toSci '0.123456789012345' -> '0.123456789012345' - --- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) -ddbsn001 toSci -9.999999999999999E+384 -> -9.999999999999999E+384 -ddbsn002 toSci -1E-383 -> -1E-383 -ddbsn003 toSci -1E-398 -> -1E-398 Subnormal -ddbsn004 toSci -0 -> -0 -ddbsn005 toSci +0 -> 0 -ddbsn006 toSci +1E-398 -> 1E-398 Subnormal -ddbsn007 toSci +1E-383 -> 1E-383 -ddbsn008 toSci +9.999999999999999E+384 -> 9.999999999999999E+384 - --- String [many more examples are implicitly tested elsewhere] --- strings without E cannot generate E in result -ddbas040 toSci "12" -> '12' -ddbas041 toSci "-76" -> '-76' -ddbas042 toSci "12.76" -> '12.76' -ddbas043 toSci "+12.76" -> '12.76' -ddbas044 toSci "012.76" -> '12.76' -ddbas045 toSci "+0.003" -> '0.003' -ddbas046 toSci "17." -> '17' -ddbas047 toSci ".5" -> '0.5' -ddbas048 toSci "044" -> '44' -ddbas049 toSci "0044" -> '44' -ddbas050 toSci "0.0005" -> '0.0005' -ddbas051 toSci "00.00005" -> '0.00005' -ddbas052 toSci "0.000005" -> '0.000005' -ddbas053 toSci "0.0000050" -> '0.0000050' -ddbas054 toSci "0.0000005" -> '5E-7' -ddbas055 toSci "0.00000005" -> '5E-8' -ddbas056 toSci "12345678.543210" -> '12345678.543210' -ddbas057 toSci "2345678.543210" -> '2345678.543210' -ddbas058 toSci "345678.543210" -> '345678.543210' -ddbas059 toSci "0345678.54321" -> '345678.54321' -ddbas060 toSci "345678.5432" -> '345678.5432' -ddbas061 toSci "+345678.5432" -> '345678.5432' -ddbas062 toSci "+0345678.5432" -> '345678.5432' -ddbas063 toSci "+00345678.5432" -> '345678.5432' -ddbas064 toSci "-345678.5432" -> '-345678.5432' -ddbas065 toSci "-0345678.5432" -> '-345678.5432' -ddbas066 toSci "-00345678.5432" -> '-345678.5432' --- examples -ddbas067 toSci "5E-6" -> '0.000005' -ddbas068 toSci "50E-7" -> '0.0000050' -ddbas069 toSci "5E-7" -> '5E-7' - --- [No exotics as no Unicode] - --- rounded with dots in all (including edge) places -ddbas071 toSci .1234567890123456123 -> 0.1234567890123456 Inexact Rounded -ddbas072 toSci 1.234567890123456123 -> 1.234567890123456 Inexact Rounded -ddbas073 toSci 12.34567890123456123 -> 12.34567890123456 Inexact Rounded -ddbas074 toSci 123.4567890123456123 -> 123.4567890123456 Inexact Rounded -ddbas075 toSci 1234.567890123456123 -> 1234.567890123456 Inexact Rounded -ddbas076 toSci 12345.67890123456123 -> 12345.67890123456 Inexact Rounded -ddbas077 toSci 123456.7890123456123 -> 123456.7890123456 Inexact Rounded -ddbas078 toSci 1234567.890123456123 -> 1234567.890123456 Inexact Rounded -ddbas079 toSci 12345678.90123456123 -> 12345678.90123456 Inexact Rounded -ddbas080 toSci 123456789.0123456123 -> 123456789.0123456 Inexact Rounded -ddbas081 toSci 1234567890.123456123 -> 1234567890.123456 Inexact Rounded -ddbas082 toSci 12345678901.23456123 -> 12345678901.23456 Inexact Rounded -ddbas083 toSci 123456789012.3456123 -> 123456789012.3456 Inexact Rounded -ddbas084 toSci 1234567890123.456123 -> 1234567890123.456 Inexact Rounded -ddbas085 toSci 12345678901234.56123 -> 12345678901234.56 Inexact Rounded -ddbas086 toSci 123456789012345.6123 -> 123456789012345.6 Inexact Rounded -ddbas087 toSci 1234567890123456.123 -> 1234567890123456 Inexact Rounded -ddbas088 toSci 12345678901234561.23 -> 1.234567890123456E+16 Inexact Rounded -ddbas089 toSci 123456789012345612.3 -> 1.234567890123456E+17 Inexact Rounded -ddbas090 toSci 1234567890123456123. -> 1.234567890123456E+18 Inexact Rounded - - --- Numbers with E -ddbas130 toSci "0.000E-1" -> '0.0000' -ddbas131 toSci "0.000E-2" -> '0.00000' -ddbas132 toSci "0.000E-3" -> '0.000000' -ddbas133 toSci "0.000E-4" -> '0E-7' -ddbas134 toSci "0.00E-2" -> '0.0000' -ddbas135 toSci "0.00E-3" -> '0.00000' -ddbas136 toSci "0.00E-4" -> '0.000000' -ddbas137 toSci "0.00E-5" -> '0E-7' -ddbas138 toSci "+0E+9" -> '0E+9' -ddbas139 toSci "-0E+9" -> '-0E+9' -ddbas140 toSci "1E+9" -> '1E+9' -ddbas141 toSci "1e+09" -> '1E+9' -ddbas142 toSci "1E+90" -> '1E+90' -ddbas143 toSci "+1E+009" -> '1E+9' -ddbas144 toSci "0E+9" -> '0E+9' -ddbas145 toSci "1E+9" -> '1E+9' -ddbas146 toSci "1E+09" -> '1E+9' -ddbas147 toSci "1e+90" -> '1E+90' -ddbas148 toSci "1E+009" -> '1E+9' -ddbas149 toSci "000E+9" -> '0E+9' -ddbas150 toSci "1E9" -> '1E+9' -ddbas151 toSci "1e09" -> '1E+9' -ddbas152 toSci "1E90" -> '1E+90' -ddbas153 toSci "1E009" -> '1E+9' -ddbas154 toSci "0E9" -> '0E+9' -ddbas155 toSci "0.000e+0" -> '0.000' -ddbas156 toSci "0.000E-1" -> '0.0000' -ddbas157 toSci "4E+9" -> '4E+9' -ddbas158 toSci "44E+9" -> '4.4E+10' -ddbas159 toSci "0.73e-7" -> '7.3E-8' -ddbas160 toSci "00E+9" -> '0E+9' -ddbas161 toSci "00E-9" -> '0E-9' -ddbas162 toSci "10E+9" -> '1.0E+10' -ddbas163 toSci "10E+09" -> '1.0E+10' -ddbas164 toSci "10e+90" -> '1.0E+91' -ddbas165 toSci "10E+009" -> '1.0E+10' -ddbas166 toSci "100e+9" -> '1.00E+11' -ddbas167 toSci "100e+09" -> '1.00E+11' -ddbas168 toSci "100E+90" -> '1.00E+92' -ddbas169 toSci "100e+009" -> '1.00E+11' - -ddbas170 toSci "1.265" -> '1.265' -ddbas171 toSci "1.265E-20" -> '1.265E-20' -ddbas172 toSci "1.265E-8" -> '1.265E-8' -ddbas173 toSci "1.265E-4" -> '0.0001265' -ddbas174 toSci "1.265E-3" -> '0.001265' -ddbas175 toSci "1.265E-2" -> '0.01265' -ddbas176 toSci "1.265E-1" -> '0.1265' -ddbas177 toSci "1.265E-0" -> '1.265' -ddbas178 toSci "1.265E+1" -> '12.65' -ddbas179 toSci "1.265E+2" -> '126.5' -ddbas180 toSci "1.265E+3" -> '1265' -ddbas181 toSci "1.265E+4" -> '1.265E+4' -ddbas182 toSci "1.265E+8" -> '1.265E+8' -ddbas183 toSci "1.265E+20" -> '1.265E+20' - -ddbas190 toSci "12.65" -> '12.65' -ddbas191 toSci "12.65E-20" -> '1.265E-19' -ddbas192 toSci "12.65E-8" -> '1.265E-7' -ddbas193 toSci "12.65E-4" -> '0.001265' -ddbas194 toSci "12.65E-3" -> '0.01265' -ddbas195 toSci "12.65E-2" -> '0.1265' -ddbas196 toSci "12.65E-1" -> '1.265' -ddbas197 toSci "12.65E-0" -> '12.65' -ddbas198 toSci "12.65E+1" -> '126.5' -ddbas199 toSci "12.65E+2" -> '1265' -ddbas200 toSci "12.65E+3" -> '1.265E+4' -ddbas201 toSci "12.65E+4" -> '1.265E+5' -ddbas202 toSci "12.65E+8" -> '1.265E+9' -ddbas203 toSci "12.65E+20" -> '1.265E+21' - -ddbas210 toSci "126.5" -> '126.5' -ddbas211 toSci "126.5E-20" -> '1.265E-18' -ddbas212 toSci "126.5E-8" -> '0.000001265' -ddbas213 toSci "126.5E-4" -> '0.01265' -ddbas214 toSci "126.5E-3" -> '0.1265' -ddbas215 toSci "126.5E-2" -> '1.265' -ddbas216 toSci "126.5E-1" -> '12.65' -ddbas217 toSci "126.5E-0" -> '126.5' -ddbas218 toSci "126.5E+1" -> '1265' -ddbas219 toSci "126.5E+2" -> '1.265E+4' -ddbas220 toSci "126.5E+3" -> '1.265E+5' -ddbas221 toSci "126.5E+4" -> '1.265E+6' -ddbas222 toSci "126.5E+8" -> '1.265E+10' -ddbas223 toSci "126.5E+20" -> '1.265E+22' - -ddbas230 toSci "1265" -> '1265' -ddbas231 toSci "1265E-20" -> '1.265E-17' -ddbas232 toSci "1265E-8" -> '0.00001265' -ddbas233 toSci "1265E-4" -> '0.1265' -ddbas234 toSci "1265E-3" -> '1.265' -ddbas235 toSci "1265E-2" -> '12.65' -ddbas236 toSci "1265E-1" -> '126.5' -ddbas237 toSci "1265E-0" -> '1265' -ddbas238 toSci "1265E+1" -> '1.265E+4' -ddbas239 toSci "1265E+2" -> '1.265E+5' -ddbas240 toSci "1265E+3" -> '1.265E+6' -ddbas241 toSci "1265E+4" -> '1.265E+7' -ddbas242 toSci "1265E+8" -> '1.265E+11' -ddbas243 toSci "1265E+20" -> '1.265E+23' -ddbas244 toSci "1265E-9" -> '0.000001265' -ddbas245 toSci "1265E-10" -> '1.265E-7' -ddbas246 toSci "1265E-11" -> '1.265E-8' -ddbas247 toSci "1265E-12" -> '1.265E-9' - -ddbas250 toSci "0.1265" -> '0.1265' -ddbas251 toSci "0.1265E-20" -> '1.265E-21' -ddbas252 toSci "0.1265E-8" -> '1.265E-9' -ddbas253 toSci "0.1265E-4" -> '0.00001265' -ddbas254 toSci "0.1265E-3" -> '0.0001265' -ddbas255 toSci "0.1265E-2" -> '0.001265' -ddbas256 toSci "0.1265E-1" -> '0.01265' -ddbas257 toSci "0.1265E-0" -> '0.1265' -ddbas258 toSci "0.1265E+1" -> '1.265' -ddbas259 toSci "0.1265E+2" -> '12.65' -ddbas260 toSci "0.1265E+3" -> '126.5' -ddbas261 toSci "0.1265E+4" -> '1265' -ddbas262 toSci "0.1265E+8" -> '1.265E+7' -ddbas263 toSci "0.1265E+20" -> '1.265E+19' - --- some more negative zeros [systematic tests below] -ddbas290 toSci "-0.000E-1" -> '-0.0000' -ddbas291 toSci "-0.000E-2" -> '-0.00000' -ddbas292 toSci "-0.000E-3" -> '-0.000000' -ddbas293 toSci "-0.000E-4" -> '-0E-7' -ddbas294 toSci "-0.00E-2" -> '-0.0000' -ddbas295 toSci "-0.00E-3" -> '-0.00000' -ddbas296 toSci "-0.0E-2" -> '-0.000' -ddbas297 toSci "-0.0E-3" -> '-0.0000' -ddbas298 toSci "-0E-2" -> '-0.00' -ddbas299 toSci "-0E-3" -> '-0.000' - --- Engineering notation tests -ddbas301 toSci 10e12 -> 1.0E+13 -ddbas302 toEng 10e12 -> 10E+12 -ddbas303 toSci 10e11 -> 1.0E+12 -ddbas304 toEng 10e11 -> 1.0E+12 -ddbas305 toSci 10e10 -> 1.0E+11 -ddbas306 toEng 10e10 -> 100E+9 -ddbas307 toSci 10e9 -> 1.0E+10 -ddbas308 toEng 10e9 -> 10E+9 -ddbas309 toSci 10e8 -> 1.0E+9 -ddbas310 toEng 10e8 -> 1.0E+9 -ddbas311 toSci 10e7 -> 1.0E+8 -ddbas312 toEng 10e7 -> 100E+6 -ddbas313 toSci 10e6 -> 1.0E+7 -ddbas314 toEng 10e6 -> 10E+6 -ddbas315 toSci 10e5 -> 1.0E+6 -ddbas316 toEng 10e5 -> 1.0E+6 -ddbas317 toSci 10e4 -> 1.0E+5 -ddbas318 toEng 10e4 -> 100E+3 -ddbas319 toSci 10e3 -> 1.0E+4 -ddbas320 toEng 10e3 -> 10E+3 -ddbas321 toSci 10e2 -> 1.0E+3 -ddbas322 toEng 10e2 -> 1.0E+3 -ddbas323 toSci 10e1 -> 1.0E+2 -ddbas324 toEng 10e1 -> 100 -ddbas325 toSci 10e0 -> 10 -ddbas326 toEng 10e0 -> 10 -ddbas327 toSci 10e-1 -> 1.0 -ddbas328 toEng 10e-1 -> 1.0 -ddbas329 toSci 10e-2 -> 0.10 -ddbas330 toEng 10e-2 -> 0.10 -ddbas331 toSci 10e-3 -> 0.010 -ddbas332 toEng 10e-3 -> 0.010 -ddbas333 toSci 10e-4 -> 0.0010 -ddbas334 toEng 10e-4 -> 0.0010 -ddbas335 toSci 10e-5 -> 0.00010 -ddbas336 toEng 10e-5 -> 0.00010 -ddbas337 toSci 10e-6 -> 0.000010 -ddbas338 toEng 10e-6 -> 0.000010 -ddbas339 toSci 10e-7 -> 0.0000010 -ddbas340 toEng 10e-7 -> 0.0000010 -ddbas341 toSci 10e-8 -> 1.0E-7 -ddbas342 toEng 10e-8 -> 100E-9 -ddbas343 toSci 10e-9 -> 1.0E-8 -ddbas344 toEng 10e-9 -> 10E-9 -ddbas345 toSci 10e-10 -> 1.0E-9 -ddbas346 toEng 10e-10 -> 1.0E-9 -ddbas347 toSci 10e-11 -> 1.0E-10 -ddbas348 toEng 10e-11 -> 100E-12 -ddbas349 toSci 10e-12 -> 1.0E-11 -ddbas350 toEng 10e-12 -> 10E-12 -ddbas351 toSci 10e-13 -> 1.0E-12 -ddbas352 toEng 10e-13 -> 1.0E-12 - -ddbas361 toSci 7E12 -> 7E+12 -ddbas362 toEng 7E12 -> 7E+12 -ddbas363 toSci 7E11 -> 7E+11 -ddbas364 toEng 7E11 -> 700E+9 -ddbas365 toSci 7E10 -> 7E+10 -ddbas366 toEng 7E10 -> 70E+9 -ddbas367 toSci 7E9 -> 7E+9 -ddbas368 toEng 7E9 -> 7E+9 -ddbas369 toSci 7E8 -> 7E+8 -ddbas370 toEng 7E8 -> 700E+6 -ddbas371 toSci 7E7 -> 7E+7 -ddbas372 toEng 7E7 -> 70E+6 -ddbas373 toSci 7E6 -> 7E+6 -ddbas374 toEng 7E6 -> 7E+6 -ddbas375 toSci 7E5 -> 7E+5 -ddbas376 toEng 7E5 -> 700E+3 -ddbas377 toSci 7E4 -> 7E+4 -ddbas378 toEng 7E4 -> 70E+3 -ddbas379 toSci 7E3 -> 7E+3 -ddbas380 toEng 7E3 -> 7E+3 -ddbas381 toSci 7E2 -> 7E+2 -ddbas382 toEng 7E2 -> 700 -ddbas383 toSci 7E1 -> 7E+1 -ddbas384 toEng 7E1 -> 70 -ddbas385 toSci 7E0 -> 7 -ddbas386 toEng 7E0 -> 7 -ddbas387 toSci 7E-1 -> 0.7 -ddbas388 toEng 7E-1 -> 0.7 -ddbas389 toSci 7E-2 -> 0.07 -ddbas390 toEng 7E-2 -> 0.07 -ddbas391 toSci 7E-3 -> 0.007 -ddbas392 toEng 7E-3 -> 0.007 -ddbas393 toSci 7E-4 -> 0.0007 -ddbas394 toEng 7E-4 -> 0.0007 -ddbas395 toSci 7E-5 -> 0.00007 -ddbas396 toEng 7E-5 -> 0.00007 -ddbas397 toSci 7E-6 -> 0.000007 -ddbas398 toEng 7E-6 -> 0.000007 -ddbas399 toSci 7E-7 -> 7E-7 -ddbas400 toEng 7E-7 -> 700E-9 -ddbas401 toSci 7E-8 -> 7E-8 -ddbas402 toEng 7E-8 -> 70E-9 -ddbas403 toSci 7E-9 -> 7E-9 -ddbas404 toEng 7E-9 -> 7E-9 -ddbas405 toSci 7E-10 -> 7E-10 -ddbas406 toEng 7E-10 -> 700E-12 -ddbas407 toSci 7E-11 -> 7E-11 -ddbas408 toEng 7E-11 -> 70E-12 -ddbas409 toSci 7E-12 -> 7E-12 -ddbas410 toEng 7E-12 -> 7E-12 -ddbas411 toSci 7E-13 -> 7E-13 -ddbas412 toEng 7E-13 -> 700E-15 - --- Exacts remain exact up to precision .. -rounding: half_up -ddbas420 toSci 100 -> 100 -ddbas421 toEng 100 -> 100 -ddbas422 toSci 1000 -> 1000 -ddbas423 toEng 1000 -> 1000 -ddbas424 toSci 999.9 -> 999.9 -ddbas425 toEng 999.9 -> 999.9 -ddbas426 toSci 1000.0 -> 1000.0 -ddbas427 toEng 1000.0 -> 1000.0 -ddbas428 toSci 1000.1 -> 1000.1 -ddbas429 toEng 1000.1 -> 1000.1 -ddbas430 toSci 10000 -> 10000 -ddbas431 toEng 10000 -> 10000 -ddbas432 toSci 100000 -> 100000 -ddbas433 toEng 100000 -> 100000 -ddbas434 toSci 1000000 -> 1000000 -ddbas435 toEng 1000000 -> 1000000 -ddbas436 toSci 10000000 -> 10000000 -ddbas437 toEng 10000000 -> 10000000 -ddbas438 toSci 100000000 -> 100000000 -ddbas439 toEng 1000000000000000 -> 1000000000000000 -ddbas440 toSci 10000000000000000 -> 1.000000000000000E+16 Rounded -ddbas441 toEng 10000000000000000 -> 10.00000000000000E+15 Rounded -ddbas442 toSci 10000000000000001 -> 1.000000000000000E+16 Rounded Inexact -ddbas443 toEng 10000000000000001 -> 10.00000000000000E+15 Rounded Inexact -ddbas444 toSci 10000000000000003 -> 1.000000000000000E+16 Rounded Inexact -ddbas445 toEng 10000000000000003 -> 10.00000000000000E+15 Rounded Inexact -ddbas446 toSci 10000000000000005 -> 1.000000000000001E+16 Rounded Inexact -ddbas447 toEng 10000000000000005 -> 10.00000000000001E+15 Rounded Inexact -ddbas448 toSci 100000000000000050 -> 1.000000000000001E+17 Rounded Inexact -ddbas449 toEng 100000000000000050 -> 100.0000000000001E+15 Rounded Inexact -ddbas450 toSci 10000000000000009 -> 1.000000000000001E+16 Rounded Inexact -ddbas451 toEng 10000000000000009 -> 10.00000000000001E+15 Rounded Inexact -ddbas452 toSci 100000000000000000 -> 1.000000000000000E+17 Rounded -ddbas453 toEng 100000000000000000 -> 100.0000000000000E+15 Rounded -ddbas454 toSci 100000000000000003 -> 1.000000000000000E+17 Rounded Inexact -ddbas455 toEng 100000000000000003 -> 100.0000000000000E+15 Rounded Inexact -ddbas456 toSci 100000000000000005 -> 1.000000000000000E+17 Rounded Inexact -ddbas457 toEng 100000000000000005 -> 100.0000000000000E+15 Rounded Inexact -ddbas458 toSci 100000000000000009 -> 1.000000000000000E+17 Rounded Inexact -ddbas459 toEng 100000000000000009 -> 100.0000000000000E+15 Rounded Inexact -ddbas460 toSci 1000000000000000000 -> 1.000000000000000E+18 Rounded -ddbas461 toEng 1000000000000000000 -> 1.000000000000000E+18 Rounded -ddbas462 toSci 1000000000000000300 -> 1.000000000000000E+18 Rounded Inexact -ddbas463 toEng 1000000000000000300 -> 1.000000000000000E+18 Rounded Inexact -ddbas464 toSci 1000000000000000500 -> 1.000000000000001E+18 Rounded Inexact -ddbas465 toEng 1000000000000000500 -> 1.000000000000001E+18 Rounded Inexact -ddbas466 toSci 1000000000000000900 -> 1.000000000000001E+18 Rounded Inexact -ddbas467 toEng 1000000000000000900 -> 1.000000000000001E+18 Rounded Inexact -ddbas468 toSci 10000000000000000000 -> 1.000000000000000E+19 Rounded -ddbas469 toEng 10000000000000000000 -> 10.00000000000000E+18 Rounded -ddbas470 toSci 10000000000000003000 -> 1.000000000000000E+19 Rounded Inexact -ddbas471 toEng 10000000000000003000 -> 10.00000000000000E+18 Rounded Inexact -ddbas472 toSci 10000000000000005000 -> 1.000000000000001E+19 Rounded Inexact -ddbas473 toEng 10000000000000005000 -> 10.00000000000001E+18 Rounded Inexact -ddbas474 toSci 10000000000000009000 -> 1.000000000000001E+19 Rounded Inexact -ddbas475 toEng 10000000000000009000 -> 10.00000000000001E+18 Rounded Inexact - --- check rounding modes heeded -rounding: ceiling -ddbsr401 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr402 toSci 1.11111111111234549 -> 1.111111111112346 Rounded Inexact -ddbsr403 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact -ddbsr404 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact -rounding: up -ddbsr405 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr406 toSci 1.11111111111234549 -> 1.111111111112346 Rounded Inexact -ddbsr407 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact -ddbsr408 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact -rounding: floor -ddbsr410 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr411 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr412 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact -ddbsr413 toSci 1.11111111111234551 -> 1.111111111112345 Rounded Inexact -rounding: half_down -ddbsr415 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr416 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr417 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact -ddbsr418 toSci 1.11111111111234650 -> 1.111111111112346 Rounded Inexact -ddbsr419 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact -rounding: half_even -ddbsr421 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr422 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr423 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact -ddbsr424 toSci 1.11111111111234650 -> 1.111111111112346 Rounded Inexact -ddbsr425 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact -rounding: down -ddbsr426 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr427 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr428 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact -ddbsr429 toSci 1.11111111111234551 -> 1.111111111112345 Rounded Inexact -rounding: half_up -ddbsr431 toSci 1.1111111111123450 -> 1.111111111112345 Rounded -ddbsr432 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact -ddbsr433 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact -ddbsr434 toSci 1.11111111111234650 -> 1.111111111112347 Rounded Inexact -ddbsr435 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact --- negatives -rounding: ceiling -ddbsr501 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr502 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr503 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact -ddbsr504 toSci -1.11111111111234551 -> -1.111111111112345 Rounded Inexact -rounding: up -ddbsr505 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr506 toSci -1.11111111111234549 -> -1.111111111112346 Rounded Inexact -ddbsr507 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact -ddbsr508 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact -rounding: floor -ddbsr510 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr511 toSci -1.11111111111234549 -> -1.111111111112346 Rounded Inexact -ddbsr512 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact -ddbsr513 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact -rounding: half_down -ddbsr515 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr516 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr517 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact -ddbsr518 toSci -1.11111111111234650 -> -1.111111111112346 Rounded Inexact -ddbsr519 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact -rounding: half_even -ddbsr521 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr522 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr523 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact -ddbsr524 toSci -1.11111111111234650 -> -1.111111111112346 Rounded Inexact -ddbsr525 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact -rounding: down -ddbsr526 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr527 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr528 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact -ddbsr529 toSci -1.11111111111234551 -> -1.111111111112345 Rounded Inexact -rounding: half_up -ddbsr531 toSci -1.1111111111123450 -> -1.111111111112345 Rounded -ddbsr532 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact -ddbsr533 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact -ddbsr534 toSci -1.11111111111234650 -> -1.111111111112347 Rounded Inexact -ddbsr535 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact - -rounding: half_even - --- The 'baddies' tests from DiagBigDecimal, plus some new ones -ddbas500 toSci '1..2' -> NaN Conversion_syntax -ddbas501 toSci '.' -> NaN Conversion_syntax -ddbas502 toSci '..' -> NaN Conversion_syntax -ddbas503 toSci '++1' -> NaN Conversion_syntax -ddbas504 toSci '--1' -> NaN Conversion_syntax -ddbas505 toSci '-+1' -> NaN Conversion_syntax -ddbas506 toSci '+-1' -> NaN Conversion_syntax -ddbas507 toSci '12e' -> NaN Conversion_syntax -ddbas508 toSci '12e++' -> NaN Conversion_syntax -ddbas509 toSci '12f4' -> NaN Conversion_syntax -ddbas510 toSci ' +1' -> NaN Conversion_syntax -ddbas511 toSci '+ 1' -> NaN Conversion_syntax -ddbas512 toSci '12 ' -> NaN Conversion_syntax -ddbas513 toSci ' + 1' -> NaN Conversion_syntax -ddbas514 toSci ' - 1 ' -> NaN Conversion_syntax -ddbas515 toSci 'x' -> NaN Conversion_syntax -ddbas516 toSci '-1-' -> NaN Conversion_syntax -ddbas517 toSci '12-' -> NaN Conversion_syntax -ddbas518 toSci '3+' -> NaN Conversion_syntax -ddbas519 toSci '' -> NaN Conversion_syntax -ddbas520 toSci '1e-' -> NaN Conversion_syntax -ddbas521 toSci '7e99999a' -> NaN Conversion_syntax -ddbas522 toSci '7e123567890x' -> NaN Conversion_syntax -ddbas523 toSci '7e12356789012x' -> NaN Conversion_syntax -ddbas524 toSci '' -> NaN Conversion_syntax -ddbas525 toSci 'e100' -> NaN Conversion_syntax -ddbas526 toSci '\u0e5a' -> NaN Conversion_syntax -ddbas527 toSci '\u0b65' -> NaN Conversion_syntax -ddbas528 toSci '123,65' -> NaN Conversion_syntax -ddbas529 toSci '1.34.5' -> NaN Conversion_syntax -ddbas530 toSci '.123.5' -> NaN Conversion_syntax -ddbas531 toSci '01.35.' -> NaN Conversion_syntax -ddbas532 toSci '01.35-' -> NaN Conversion_syntax -ddbas533 toSci '0000..' -> NaN Conversion_syntax -ddbas534 toSci '.0000.' -> NaN Conversion_syntax -ddbas535 toSci '00..00' -> NaN Conversion_syntax -ddbas536 toSci '111e*123' -> NaN Conversion_syntax -ddbas537 toSci '111e123-' -> NaN Conversion_syntax -ddbas538 toSci '111e+12+' -> NaN Conversion_syntax -ddbas539 toSci '111e1-3-' -> NaN Conversion_syntax -ddbas540 toSci '111e1*23' -> NaN Conversion_syntax -ddbas541 toSci '111e1e+3' -> NaN Conversion_syntax -ddbas542 toSci '1e1.0' -> NaN Conversion_syntax -ddbas543 toSci '1e123e' -> NaN Conversion_syntax -ddbas544 toSci 'ten' -> NaN Conversion_syntax -ddbas545 toSci 'ONE' -> NaN Conversion_syntax -ddbas546 toSci '1e.1' -> NaN Conversion_syntax -ddbas547 toSci '1e1.' -> NaN Conversion_syntax -ddbas548 toSci '1ee' -> NaN Conversion_syntax -ddbas549 toSci 'e+1' -> NaN Conversion_syntax -ddbas550 toSci '1.23.4' -> NaN Conversion_syntax -ddbas551 toSci '1.2.1' -> NaN Conversion_syntax -ddbas552 toSci '1E+1.2' -> NaN Conversion_syntax -ddbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax -ddbas554 toSci '1E++1' -> NaN Conversion_syntax -ddbas555 toSci '1E--1' -> NaN Conversion_syntax -ddbas556 toSci '1E+-1' -> NaN Conversion_syntax -ddbas557 toSci '1E-+1' -> NaN Conversion_syntax -ddbas558 toSci '1E''1' -> NaN Conversion_syntax -ddbas559 toSci "1E""1" -> NaN Conversion_syntax -ddbas560 toSci "1E""""" -> NaN Conversion_syntax --- Near-specials -ddbas561 toSci "qNaN" -> NaN Conversion_syntax -ddbas562 toSci "NaNq" -> NaN Conversion_syntax -ddbas563 toSci "NaNs" -> NaN Conversion_syntax -ddbas564 toSci "Infi" -> NaN Conversion_syntax -ddbas565 toSci "Infin" -> NaN Conversion_syntax -ddbas566 toSci "Infini" -> NaN Conversion_syntax -ddbas567 toSci "Infinit" -> NaN Conversion_syntax -ddbas568 toSci "-Infinit" -> NaN Conversion_syntax -ddbas569 toSci "0Inf" -> NaN Conversion_syntax -ddbas570 toSci "9Inf" -> NaN Conversion_syntax -ddbas571 toSci "-0Inf" -> NaN Conversion_syntax -ddbas572 toSci "-9Inf" -> NaN Conversion_syntax -ddbas573 toSci "-sNa" -> NaN Conversion_syntax -ddbas574 toSci "xNaN" -> NaN Conversion_syntax -ddbas575 toSci "0sNaN" -> NaN Conversion_syntax - --- some baddies with dots and Es and dots and specials -ddbas576 toSci 'e+1' -> NaN Conversion_syntax -ddbas577 toSci '.e+1' -> NaN Conversion_syntax -ddbas578 toSci '+.e+1' -> NaN Conversion_syntax -ddbas579 toSci '-.e+' -> NaN Conversion_syntax -ddbas580 toSci '-.e' -> NaN Conversion_syntax -ddbas581 toSci 'E+1' -> NaN Conversion_syntax -ddbas582 toSci '.E+1' -> NaN Conversion_syntax -ddbas583 toSci '+.E+1' -> NaN Conversion_syntax -ddbas584 toSci '-.E+' -> NaN Conversion_syntax -ddbas585 toSci '-.E' -> NaN Conversion_syntax - -ddbas586 toSci '.NaN' -> NaN Conversion_syntax -ddbas587 toSci '-.NaN' -> NaN Conversion_syntax -ddbas588 toSci '+.sNaN' -> NaN Conversion_syntax -ddbas589 toSci '+.Inf' -> NaN Conversion_syntax -ddbas590 toSci '.Infinity' -> NaN Conversion_syntax - --- Zeros -ddbas601 toSci 0.000000000 -> 0E-9 -ddbas602 toSci 0.00000000 -> 0E-8 -ddbas603 toSci 0.0000000 -> 0E-7 -ddbas604 toSci 0.000000 -> 0.000000 -ddbas605 toSci 0.00000 -> 0.00000 -ddbas606 toSci 0.0000 -> 0.0000 -ddbas607 toSci 0.000 -> 0.000 -ddbas608 toSci 0.00 -> 0.00 -ddbas609 toSci 0.0 -> 0.0 -ddbas610 toSci .0 -> 0.0 -ddbas611 toSci 0. -> 0 -ddbas612 toSci -.0 -> -0.0 -ddbas613 toSci -0. -> -0 -ddbas614 toSci -0.0 -> -0.0 -ddbas615 toSci -0.00 -> -0.00 -ddbas616 toSci -0.000 -> -0.000 -ddbas617 toSci -0.0000 -> -0.0000 -ddbas618 toSci -0.00000 -> -0.00000 -ddbas619 toSci -0.000000 -> -0.000000 -ddbas620 toSci -0.0000000 -> -0E-7 -ddbas621 toSci -0.00000000 -> -0E-8 -ddbas622 toSci -0.000000000 -> -0E-9 - -ddbas630 toSci 0.00E+0 -> 0.00 -ddbas631 toSci 0.00E+1 -> 0.0 -ddbas632 toSci 0.00E+2 -> 0 -ddbas633 toSci 0.00E+3 -> 0E+1 -ddbas634 toSci 0.00E+4 -> 0E+2 -ddbas635 toSci 0.00E+5 -> 0E+3 -ddbas636 toSci 0.00E+6 -> 0E+4 -ddbas637 toSci 0.00E+7 -> 0E+5 -ddbas638 toSci 0.00E+8 -> 0E+6 -ddbas639 toSci 0.00E+9 -> 0E+7 - -ddbas640 toSci 0.0E+0 -> 0.0 -ddbas641 toSci 0.0E+1 -> 0 -ddbas642 toSci 0.0E+2 -> 0E+1 -ddbas643 toSci 0.0E+3 -> 0E+2 -ddbas644 toSci 0.0E+4 -> 0E+3 -ddbas645 toSci 0.0E+5 -> 0E+4 -ddbas646 toSci 0.0E+6 -> 0E+5 -ddbas647 toSci 0.0E+7 -> 0E+6 -ddbas648 toSci 0.0E+8 -> 0E+7 -ddbas649 toSci 0.0E+9 -> 0E+8 - -ddbas650 toSci 0E+0 -> 0 -ddbas651 toSci 0E+1 -> 0E+1 -ddbas652 toSci 0E+2 -> 0E+2 -ddbas653 toSci 0E+3 -> 0E+3 -ddbas654 toSci 0E+4 -> 0E+4 -ddbas655 toSci 0E+5 -> 0E+5 -ddbas656 toSci 0E+6 -> 0E+6 -ddbas657 toSci 0E+7 -> 0E+7 -ddbas658 toSci 0E+8 -> 0E+8 -ddbas659 toSci 0E+9 -> 0E+9 - -ddbas660 toSci 0.0E-0 -> 0.0 -ddbas661 toSci 0.0E-1 -> 0.00 -ddbas662 toSci 0.0E-2 -> 0.000 -ddbas663 toSci 0.0E-3 -> 0.0000 -ddbas664 toSci 0.0E-4 -> 0.00000 -ddbas665 toSci 0.0E-5 -> 0.000000 -ddbas666 toSci 0.0E-6 -> 0E-7 -ddbas667 toSci 0.0E-7 -> 0E-8 -ddbas668 toSci 0.0E-8 -> 0E-9 -ddbas669 toSci 0.0E-9 -> 0E-10 - -ddbas670 toSci 0.00E-0 -> 0.00 -ddbas671 toSci 0.00E-1 -> 0.000 -ddbas672 toSci 0.00E-2 -> 0.0000 -ddbas673 toSci 0.00E-3 -> 0.00000 -ddbas674 toSci 0.00E-4 -> 0.000000 -ddbas675 toSci 0.00E-5 -> 0E-7 -ddbas676 toSci 0.00E-6 -> 0E-8 -ddbas677 toSci 0.00E-7 -> 0E-9 -ddbas678 toSci 0.00E-8 -> 0E-10 -ddbas679 toSci 0.00E-9 -> 0E-11 - -ddbas680 toSci 000000. -> 0 -ddbas681 toSci 00000. -> 0 -ddbas682 toSci 0000. -> 0 -ddbas683 toSci 000. -> 0 -ddbas684 toSci 00. -> 0 -ddbas685 toSci 0. -> 0 -ddbas686 toSci +00000. -> 0 -ddbas687 toSci -00000. -> -0 -ddbas688 toSci +0. -> 0 -ddbas689 toSci -0. -> -0 - --- Specials -ddbas700 toSci "NaN" -> NaN -ddbas701 toSci "nan" -> NaN -ddbas702 toSci "nAn" -> NaN -ddbas703 toSci "NAN" -> NaN -ddbas704 toSci "+NaN" -> NaN -ddbas705 toSci "+nan" -> NaN -ddbas706 toSci "+nAn" -> NaN -ddbas707 toSci "+NAN" -> NaN -ddbas708 toSci "-NaN" -> -NaN -ddbas709 toSci "-nan" -> -NaN -ddbas710 toSci "-nAn" -> -NaN -ddbas711 toSci "-NAN" -> -NaN -ddbas712 toSci 'NaN0' -> NaN -ddbas713 toSci 'NaN1' -> NaN1 -ddbas714 toSci 'NaN12' -> NaN12 -ddbas715 toSci 'NaN123' -> NaN123 -ddbas716 toSci 'NaN1234' -> NaN1234 -ddbas717 toSci 'NaN01' -> NaN1 -ddbas718 toSci 'NaN012' -> NaN12 -ddbas719 toSci 'NaN0123' -> NaN123 -ddbas720 toSci 'NaN01234' -> NaN1234 -ddbas721 toSci 'NaN001' -> NaN1 -ddbas722 toSci 'NaN0012' -> NaN12 -ddbas723 toSci 'NaN00123' -> NaN123 -ddbas724 toSci 'NaN001234' -> NaN1234 -ddbas725 toSci 'NaN1234567890123456' -> NaN Conversion_syntax -ddbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax -ddbas727 toSci 'NaN12.45' -> NaN Conversion_syntax -ddbas728 toSci 'NaN-12' -> NaN Conversion_syntax -ddbas729 toSci 'NaN+12' -> NaN Conversion_syntax - -ddbas730 toSci "sNaN" -> sNaN -ddbas731 toSci "snan" -> sNaN -ddbas732 toSci "SnAn" -> sNaN -ddbas733 toSci "SNAN" -> sNaN -ddbas734 toSci "+sNaN" -> sNaN -ddbas735 toSci "+snan" -> sNaN -ddbas736 toSci "+SnAn" -> sNaN -ddbas737 toSci "+SNAN" -> sNaN -ddbas738 toSci "-sNaN" -> -sNaN -ddbas739 toSci "-snan" -> -sNaN -ddbas740 toSci "-SnAn" -> -sNaN -ddbas741 toSci "-SNAN" -> -sNaN -ddbas742 toSci 'sNaN0000' -> sNaN -ddbas743 toSci 'sNaN7' -> sNaN7 -ddbas744 toSci 'sNaN007234' -> sNaN7234 -ddbas745 toSci 'sNaN7234561234567890' -> NaN Conversion_syntax -ddbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax -ddbas747 toSci 'sNaN-72' -> NaN Conversion_syntax - -ddbas748 toSci "Inf" -> Infinity -ddbas749 toSci "inf" -> Infinity -ddbas750 toSci "iNf" -> Infinity -ddbas751 toSci "INF" -> Infinity -ddbas752 toSci "+Inf" -> Infinity -ddbas753 toSci "+inf" -> Infinity -ddbas754 toSci "+iNf" -> Infinity -ddbas755 toSci "+INF" -> Infinity -ddbas756 toSci "-Inf" -> -Infinity -ddbas757 toSci "-inf" -> -Infinity -ddbas758 toSci "-iNf" -> -Infinity -ddbas759 toSci "-INF" -> -Infinity - -ddbas760 toSci "Infinity" -> Infinity -ddbas761 toSci "infinity" -> Infinity -ddbas762 toSci "iNfInItY" -> Infinity -ddbas763 toSci "INFINITY" -> Infinity -ddbas764 toSci "+Infinity" -> Infinity -ddbas765 toSci "+infinity" -> Infinity -ddbas766 toSci "+iNfInItY" -> Infinity -ddbas767 toSci "+INFINITY" -> Infinity -ddbas768 toSci "-Infinity" -> -Infinity -ddbas769 toSci "-infinity" -> -Infinity -ddbas770 toSci "-iNfInItY" -> -Infinity -ddbas771 toSci "-INFINITY" -> -Infinity - --- Specials and zeros for toEng -ddbast772 toEng "NaN" -> NaN -ddbast773 toEng "-Infinity" -> -Infinity -ddbast774 toEng "-sNaN" -> -sNaN -ddbast775 toEng "-NaN" -> -NaN -ddbast776 toEng "+Infinity" -> Infinity -ddbast778 toEng "+sNaN" -> sNaN -ddbast779 toEng "+NaN" -> NaN -ddbast780 toEng "INFINITY" -> Infinity -ddbast781 toEng "SNAN" -> sNaN -ddbast782 toEng "NAN" -> NaN -ddbast783 toEng "infinity" -> Infinity -ddbast784 toEng "snan" -> sNaN -ddbast785 toEng "nan" -> NaN -ddbast786 toEng "InFINITY" -> Infinity -ddbast787 toEng "SnAN" -> sNaN -ddbast788 toEng "nAN" -> NaN -ddbast789 toEng "iNfinity" -> Infinity -ddbast790 toEng "sNan" -> sNaN -ddbast791 toEng "Nan" -> NaN -ddbast792 toEng "Infinity" -> Infinity -ddbast793 toEng "sNaN" -> sNaN - --- Zero toEng, etc. -ddbast800 toEng 0e+1 -> "0.00E+3" -- doc example - -ddbast801 toEng 0.000000000 -> 0E-9 -ddbast802 toEng 0.00000000 -> 0.00E-6 -ddbast803 toEng 0.0000000 -> 0.0E-6 -ddbast804 toEng 0.000000 -> 0.000000 -ddbast805 toEng 0.00000 -> 0.00000 -ddbast806 toEng 0.0000 -> 0.0000 -ddbast807 toEng 0.000 -> 0.000 -ddbast808 toEng 0.00 -> 0.00 -ddbast809 toEng 0.0 -> 0.0 -ddbast810 toEng .0 -> 0.0 -ddbast811 toEng 0. -> 0 -ddbast812 toEng -.0 -> -0.0 -ddbast813 toEng -0. -> -0 -ddbast814 toEng -0.0 -> -0.0 -ddbast815 toEng -0.00 -> -0.00 -ddbast816 toEng -0.000 -> -0.000 -ddbast817 toEng -0.0000 -> -0.0000 -ddbast818 toEng -0.00000 -> -0.00000 -ddbast819 toEng -0.000000 -> -0.000000 -ddbast820 toEng -0.0000000 -> -0.0E-6 -ddbast821 toEng -0.00000000 -> -0.00E-6 -ddbast822 toEng -0.000000000 -> -0E-9 - -ddbast830 toEng 0.00E+0 -> 0.00 -ddbast831 toEng 0.00E+1 -> 0.0 -ddbast832 toEng 0.00E+2 -> 0 -ddbast833 toEng 0.00E+3 -> 0.00E+3 -ddbast834 toEng 0.00E+4 -> 0.0E+3 -ddbast835 toEng 0.00E+5 -> 0E+3 -ddbast836 toEng 0.00E+6 -> 0.00E+6 -ddbast837 toEng 0.00E+7 -> 0.0E+6 -ddbast838 toEng 0.00E+8 -> 0E+6 -ddbast839 toEng 0.00E+9 -> 0.00E+9 - -ddbast840 toEng 0.0E+0 -> 0.0 -ddbast841 toEng 0.0E+1 -> 0 -ddbast842 toEng 0.0E+2 -> 0.00E+3 -ddbast843 toEng 0.0E+3 -> 0.0E+3 -ddbast844 toEng 0.0E+4 -> 0E+3 -ddbast845 toEng 0.0E+5 -> 0.00E+6 -ddbast846 toEng 0.0E+6 -> 0.0E+6 -ddbast847 toEng 0.0E+7 -> 0E+6 -ddbast848 toEng 0.0E+8 -> 0.00E+9 -ddbast849 toEng 0.0E+9 -> 0.0E+9 - -ddbast850 toEng 0E+0 -> 0 -ddbast851 toEng 0E+1 -> 0.00E+3 -ddbast852 toEng 0E+2 -> 0.0E+3 -ddbast853 toEng 0E+3 -> 0E+3 -ddbast854 toEng 0E+4 -> 0.00E+6 -ddbast855 toEng 0E+5 -> 0.0E+6 -ddbast856 toEng 0E+6 -> 0E+6 -ddbast857 toEng 0E+7 -> 0.00E+9 -ddbast858 toEng 0E+8 -> 0.0E+9 -ddbast859 toEng 0E+9 -> 0E+9 - -ddbast860 toEng 0.0E-0 -> 0.0 -ddbast861 toEng 0.0E-1 -> 0.00 -ddbast862 toEng 0.0E-2 -> 0.000 -ddbast863 toEng 0.0E-3 -> 0.0000 -ddbast864 toEng 0.0E-4 -> 0.00000 -ddbast865 toEng 0.0E-5 -> 0.000000 -ddbast866 toEng 0.0E-6 -> 0.0E-6 -ddbast867 toEng 0.0E-7 -> 0.00E-6 -ddbast868 toEng 0.0E-8 -> 0E-9 -ddbast869 toEng 0.0E-9 -> 0.0E-9 - -ddbast870 toEng 0.00E-0 -> 0.00 -ddbast871 toEng 0.00E-1 -> 0.000 -ddbast872 toEng 0.00E-2 -> 0.0000 -ddbast873 toEng 0.00E-3 -> 0.00000 -ddbast874 toEng 0.00E-4 -> 0.000000 -ddbast875 toEng 0.00E-5 -> 0.0E-6 -ddbast876 toEng 0.00E-6 -> 0.00E-6 -ddbast877 toEng 0.00E-7 -> 0E-9 -ddbast878 toEng 0.00E-8 -> 0.0E-9 -ddbast879 toEng 0.00E-9 -> 0.00E-9 - --- long input strings -ddbas801 tosci '01234567890123456' -> 1234567890123456 -ddbas802 tosci '001234567890123456' -> 1234567890123456 -ddbas803 tosci '0001234567890123456' -> 1234567890123456 -ddbas804 tosci '00001234567890123456' -> 1234567890123456 -ddbas805 tosci '000001234567890123456' -> 1234567890123456 -ddbas806 tosci '0000001234567890123456' -> 1234567890123456 -ddbas807 tosci '00000001234567890123456' -> 1234567890123456 -ddbas808 tosci '000000001234567890123456' -> 1234567890123456 -ddbas809 tosci '0000000001234567890123456' -> 1234567890123456 -ddbas810 tosci '00000000001234567890123456' -> 1234567890123456 - -ddbas811 tosci '0.1234567890123456' -> 0.1234567890123456 -ddbas812 tosci '0.01234567890123456' -> 0.01234567890123456 -ddbas813 tosci '0.001234567890123456' -> 0.001234567890123456 -ddbas814 tosci '0.0001234567890123456' -> 0.0001234567890123456 -ddbas815 tosci '0.00001234567890123456' -> 0.00001234567890123456 -ddbas816 tosci '0.000001234567890123456' -> 0.000001234567890123456 -ddbas817 tosci '0.0000001234567890123456' -> 1.234567890123456E-7 -ddbas818 tosci '0.00000001234567890123456' -> 1.234567890123456E-8 -ddbas819 tosci '0.000000001234567890123456' -> 1.234567890123456E-9 -ddbas820 tosci '0.0000000001234567890123456' -> 1.234567890123456E-10 - -ddbas821 tosci '12345678901234567890' -> 1.234567890123457E+19 Inexact Rounded -ddbas822 tosci '123456789012345678901' -> 1.234567890123457E+20 Inexact Rounded -ddbas823 tosci '1234567890123456789012' -> 1.234567890123457E+21 Inexact Rounded -ddbas824 tosci '12345678901234567890123' -> 1.234567890123457E+22 Inexact Rounded -ddbas825 tosci '123456789012345678901234' -> 1.234567890123457E+23 Inexact Rounded -ddbas826 tosci '1234567890123456789012345' -> 1.234567890123457E+24 Inexact Rounded -ddbas827 tosci '12345678901234567890123456' -> 1.234567890123457E+25 Inexact Rounded -ddbas828 tosci '123456789012345678901234567' -> 1.234567890123457E+26 Inexact Rounded -ddbas829 tosci '1234567890123456789012345678' -> 1.234567890123457E+27 Inexact Rounded - --- subnormals and overflows -ddbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded -ddbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded -ddbas908 toSci '0.9e-999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas909 toSci '0.09e-999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded -ddbas911 toSci '10e-1000000000' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded -ddbas913 toSci '99e-9999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded -ddbas915 toSci '1111e-9999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas916 toSci '1111e-99999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded --- negatives the same -ddbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded -ddbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded -ddbas920 toSci '-0.9e-999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas921 toSci '-0.09e-999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded -ddbas923 toSci '-10e-1000000000' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded -ddbas925 toSci '-99e-9999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded -ddbas927 toSci '-1111e-9999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas928 toSci '-1111e-99999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded - --- overflow results at different rounding modes -rounding: ceiling -ddbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas931 toSci '-7e10000' -> -9.999999999999999E+384 Overflow Inexact Rounded -rounding: up -ddbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: down -ddbas934 toSci '7e10000' -> 9.999999999999999E+384 Overflow Inexact Rounded -ddbas935 toSci '-7e10000' -> -9.999999999999999E+384 Overflow Inexact Rounded -rounding: floor -ddbas936 toSci '7e10000' -> 9.999999999999999E+384 Overflow Inexact Rounded -ddbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_up -ddbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_even -ddbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_down -ddbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded -ddbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_even - --- Now check 854/754r some subnormals and underflow to 0 -ddbem400 toSci 1.0000E-383 -> 1.0000E-383 -ddbem401 toSci 0.1E-394 -> 1E-395 Subnormal -ddbem402 toSci 0.1000E-394 -> 1.000E-395 Subnormal -ddbem403 toSci 0.0100E-394 -> 1.00E-396 Subnormal -ddbem404 toSci 0.0010E-394 -> 1.0E-397 Subnormal -ddbem405 toSci 0.0001E-394 -> 1E-398 Subnormal -ddbem406 toSci 0.00010E-394 -> 1E-398 Subnormal Rounded -ddbem407 toSci 0.00013E-394 -> 1E-398 Underflow Subnormal Inexact Rounded -ddbem408 toSci 0.00015E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem409 toSci 0.00017E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem410 toSci 0.00023E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem411 toSci 0.00025E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem412 toSci 0.00027E-394 -> 3E-398 Underflow Subnormal Inexact Rounded -ddbem413 toSci 0.000149E-394 -> 1E-398 Underflow Subnormal Inexact Rounded -ddbem414 toSci 0.000150E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem415 toSci 0.000151E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem416 toSci 0.000249E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem417 toSci 0.000250E-394 -> 2E-398 Underflow Subnormal Inexact Rounded -ddbem418 toSci 0.000251E-394 -> 3E-398 Underflow Subnormal Inexact Rounded -ddbem419 toSci 0.00009E-394 -> 1E-398 Underflow Subnormal Inexact Rounded -ddbem420 toSci 0.00005E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem421 toSci 0.00003E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem422 toSci 0.000009E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem423 toSci 0.000005E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem424 toSci 0.000003E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - -ddbem425 toSci 0.001049E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded -ddbem426 toSci 0.001050E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded -ddbem427 toSci 0.001051E-394 -> 1.1E-397 Underflow Subnormal Inexact Rounded -ddbem428 toSci 0.001149E-394 -> 1.1E-397 Underflow Subnormal Inexact Rounded -ddbem429 toSci 0.001150E-394 -> 1.2E-397 Underflow Subnormal Inexact Rounded -ddbem430 toSci 0.001151E-394 -> 1.2E-397 Underflow Subnormal Inexact Rounded - -ddbem432 toSci 0.010049E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded -ddbem433 toSci 0.010050E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded -ddbem434 toSci 0.010051E-394 -> 1.01E-396 Underflow Subnormal Inexact Rounded -ddbem435 toSci 0.010149E-394 -> 1.01E-396 Underflow Subnormal Inexact Rounded -ddbem436 toSci 0.010150E-394 -> 1.02E-396 Underflow Subnormal Inexact Rounded -ddbem437 toSci 0.010151E-394 -> 1.02E-396 Underflow Subnormal Inexact Rounded - -ddbem440 toSci 0.10103E-394 -> 1.010E-395 Underflow Subnormal Inexact Rounded -ddbem441 toSci 0.10105E-394 -> 1.010E-395 Underflow Subnormal Inexact Rounded -ddbem442 toSci 0.10107E-394 -> 1.011E-395 Underflow Subnormal Inexact Rounded -ddbem443 toSci 0.10113E-394 -> 1.011E-395 Underflow Subnormal Inexact Rounded -ddbem444 toSci 0.10115E-394 -> 1.012E-395 Underflow Subnormal Inexact Rounded -ddbem445 toSci 0.10117E-394 -> 1.012E-395 Underflow Subnormal Inexact Rounded - -ddbem450 toSci 1.10730E-395 -> 1.107E-395 Underflow Subnormal Inexact Rounded -ddbem451 toSci 1.10750E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded -ddbem452 toSci 1.10770E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded -ddbem453 toSci 1.10830E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded -ddbem454 toSci 1.10850E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded -ddbem455 toSci 1.10870E-395 -> 1.109E-395 Underflow Subnormal Inexact Rounded - --- make sure sign OK -ddbem456 toSci -0.10103E-394 -> -1.010E-395 Underflow Subnormal Inexact Rounded -ddbem457 toSci -0.10105E-394 -> -1.010E-395 Underflow Subnormal Inexact Rounded -ddbem458 toSci -0.10107E-394 -> -1.011E-395 Underflow Subnormal Inexact Rounded -ddbem459 toSci -0.10113E-394 -> -1.011E-395 Underflow Subnormal Inexact Rounded -ddbem460 toSci -0.10115E-394 -> -1.012E-395 Underflow Subnormal Inexact Rounded -ddbem461 toSci -0.10117E-394 -> -1.012E-395 Underflow Subnormal Inexact Rounded - --- '999s' cases -ddbem464 toSci 999999E-395 -> 9.99999E-390 Subnormal -ddbem465 toSci 99999.0E-394 -> 9.99990E-390 Subnormal -ddbem466 toSci 99999.E-394 -> 9.9999E-390 Subnormal -ddbem467 toSci 9999.9E-394 -> 9.9999E-391 Subnormal -ddbem468 toSci 999.99E-394 -> 9.9999E-392 Subnormal -ddbem469 toSci 99.999E-394 -> 9.9999E-393 Subnormal -ddbem470 toSci 9.9999E-394 -> 9.9999E-394 Subnormal -ddbem471 toSci 0.99999E-394 -> 1.0000E-394 Underflow Subnormal Inexact Rounded -ddbem472 toSci 0.099999E-394 -> 1.000E-395 Underflow Subnormal Inexact Rounded -ddbem473 toSci 0.0099999E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded -ddbem474 toSci 0.00099999E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded -ddbem475 toSci 0.000099999E-394 -> 1E-398 Underflow Subnormal Inexact Rounded -ddbem476 toSci 0.0000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem477 toSci 0.00000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbem478 toSci 0.000000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- Exponents with insignificant leading zeros -ddbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded -ddbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded -ddbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded -ddbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded -ddbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded -ddbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded -ddbas1007 toSci 1e-999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1008 toSci 1e-0999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1009 toSci 1e-00999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1010 toSci 1e-000999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1011 toSci 1e-000000000000999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddbas1012 toSci 1e-000000000001000000007 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- check for double-rounded subnormals -ddbas1041 toSci 1.1111111111152444E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow -ddbas1042 toSci 1.1111111111152445E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow -ddbas1043 toSci 1.1111111111152446E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow - --- clamped large normals -ddbas1070 toSci 1E+369 -> 1E+369 -ddbas1071 toSci 1E+370 -> 1.0E+370 Clamped -ddbas1072 toSci 1E+378 -> 1.000000000E+378 Clamped -ddbas1073 toSci 1E+384 -> 1.000000000000000E+384 Clamped -ddbas1074 toSci 1E+385 -> Infinity Overflow Inexact Rounded - - --- clamped zeros [see also clamp.decTest] -ddbas1075 toSci 0e+10000 -> 0E+369 Clamped -ddbas1076 toSci 0e-10000 -> 0E-398 Clamped -ddbas1077 toSci -0e+10000 -> -0E+369 Clamped -ddbas1078 toSci -0e-10000 -> -0E-398 Clamped - --- extreme values from next-wider -ddbas1101 toSci -9.99999999999999999999999999999999E+6144 -> -Infinity Overflow Inexact Rounded -ddbas1102 toSci -1E-6143 -> -0E-398 Inexact Rounded Subnormal Underflow Clamped -ddbas1103 toSci -1E-6176 -> -0E-398 Inexact Rounded Subnormal Underflow Clamped -ddbas1104 toSci -0 -> -0 -ddbas1105 toSci +0 -> 0 -ddbas1106 toSci +1E-6176 -> 0E-398 Inexact Rounded Subnormal Underflow Clamped -ddbas1107 toSci +1E-6173 -> 0E-398 Inexact Rounded Subnormal Underflow Clamped -ddbas1108 toSci +9.99999999999999999999999999999999E+6144 -> Infinity Overflow Inexact Rounded - +------------------------------------------------------------------------ +-- ddBase.decTest -- base decDouble <--> string conversions -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests base conversions from string to a decimal number +-- and back to a string (in Scientific form) + +-- Note that unlike other operations the operand is subject to rounding +-- to conform to emax and precision settings (that is, numbers will +-- conform to rules and exponent will be in permitted range). The +-- 'left hand side', therefore, may have numbers that cannot be +-- represented in a decDouble. Some testcases go to the limit of the +-- next-wider format, and hence these testcases may also be used to +-- test narrowing and widening operations. + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddbas001 toSci 0 -> 0 +ddbas002 toSci 1 -> 1 +ddbas003 toSci 1.0 -> 1.0 +ddbas004 toSci 1.00 -> 1.00 +ddbas005 toSci 10 -> 10 +ddbas006 toSci 1000 -> 1000 +ddbas007 toSci 10.0 -> 10.0 +ddbas008 toSci 10.1 -> 10.1 +ddbas009 toSci 10.4 -> 10.4 +ddbas010 toSci 10.5 -> 10.5 +ddbas011 toSci 10.6 -> 10.6 +ddbas012 toSci 10.9 -> 10.9 +ddbas013 toSci 11.0 -> 11.0 +ddbas014 toSci 1.234 -> 1.234 +ddbas015 toSci 0.123 -> 0.123 +ddbas016 toSci 0.012 -> 0.012 +ddbas017 toSci -0 -> -0 +ddbas018 toSci -0.0 -> -0.0 +ddbas019 toSci -00.00 -> -0.00 + +ddbas021 toSci -1 -> -1 +ddbas022 toSci -1.0 -> -1.0 +ddbas023 toSci -0.1 -> -0.1 +ddbas024 toSci -9.1 -> -9.1 +ddbas025 toSci -9.11 -> -9.11 +ddbas026 toSci -9.119 -> -9.119 +ddbas027 toSci -9.999 -> -9.999 + +ddbas030 toSci '123456789.123456' -> '123456789.123456' +ddbas031 toSci '123456789.000000' -> '123456789.000000' +ddbas032 toSci '123456789123456' -> '123456789123456' +ddbas033 toSci '0.0000123456789' -> '0.0000123456789' +ddbas034 toSci '0.00000123456789' -> '0.00000123456789' +ddbas035 toSci '0.000000123456789' -> '1.23456789E-7' +ddbas036 toSci '0.0000000123456789' -> '1.23456789E-8' + +ddbas037 toSci '0.123456789012344' -> '0.123456789012344' +ddbas038 toSci '0.123456789012345' -> '0.123456789012345' + +-- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) +ddbsn001 toSci -9.999999999999999E+384 -> -9.999999999999999E+384 +ddbsn002 toSci -1E-383 -> -1E-383 +ddbsn003 toSci -1E-398 -> -1E-398 Subnormal +ddbsn004 toSci -0 -> -0 +ddbsn005 toSci +0 -> 0 +ddbsn006 toSci +1E-398 -> 1E-398 Subnormal +ddbsn007 toSci +1E-383 -> 1E-383 +ddbsn008 toSci +9.999999999999999E+384 -> 9.999999999999999E+384 + +-- String [many more examples are implicitly tested elsewhere] +-- strings without E cannot generate E in result +ddbas040 toSci "12" -> '12' +ddbas041 toSci "-76" -> '-76' +ddbas042 toSci "12.76" -> '12.76' +ddbas043 toSci "+12.76" -> '12.76' +ddbas044 toSci "012.76" -> '12.76' +ddbas045 toSci "+0.003" -> '0.003' +ddbas046 toSci "17." -> '17' +ddbas047 toSci ".5" -> '0.5' +ddbas048 toSci "044" -> '44' +ddbas049 toSci "0044" -> '44' +ddbas050 toSci "0.0005" -> '0.0005' +ddbas051 toSci "00.00005" -> '0.00005' +ddbas052 toSci "0.000005" -> '0.000005' +ddbas053 toSci "0.0000050" -> '0.0000050' +ddbas054 toSci "0.0000005" -> '5E-7' +ddbas055 toSci "0.00000005" -> '5E-8' +ddbas056 toSci "12345678.543210" -> '12345678.543210' +ddbas057 toSci "2345678.543210" -> '2345678.543210' +ddbas058 toSci "345678.543210" -> '345678.543210' +ddbas059 toSci "0345678.54321" -> '345678.54321' +ddbas060 toSci "345678.5432" -> '345678.5432' +ddbas061 toSci "+345678.5432" -> '345678.5432' +ddbas062 toSci "+0345678.5432" -> '345678.5432' +ddbas063 toSci "+00345678.5432" -> '345678.5432' +ddbas064 toSci "-345678.5432" -> '-345678.5432' +ddbas065 toSci "-0345678.5432" -> '-345678.5432' +ddbas066 toSci "-00345678.5432" -> '-345678.5432' +-- examples +ddbas067 toSci "5E-6" -> '0.000005' +ddbas068 toSci "50E-7" -> '0.0000050' +ddbas069 toSci "5E-7" -> '5E-7' + +-- [No exotics as no Unicode] + +-- rounded with dots in all (including edge) places +ddbas071 toSci .1234567890123456123 -> 0.1234567890123456 Inexact Rounded +ddbas072 toSci 1.234567890123456123 -> 1.234567890123456 Inexact Rounded +ddbas073 toSci 12.34567890123456123 -> 12.34567890123456 Inexact Rounded +ddbas074 toSci 123.4567890123456123 -> 123.4567890123456 Inexact Rounded +ddbas075 toSci 1234.567890123456123 -> 1234.567890123456 Inexact Rounded +ddbas076 toSci 12345.67890123456123 -> 12345.67890123456 Inexact Rounded +ddbas077 toSci 123456.7890123456123 -> 123456.7890123456 Inexact Rounded +ddbas078 toSci 1234567.890123456123 -> 1234567.890123456 Inexact Rounded +ddbas079 toSci 12345678.90123456123 -> 12345678.90123456 Inexact Rounded +ddbas080 toSci 123456789.0123456123 -> 123456789.0123456 Inexact Rounded +ddbas081 toSci 1234567890.123456123 -> 1234567890.123456 Inexact Rounded +ddbas082 toSci 12345678901.23456123 -> 12345678901.23456 Inexact Rounded +ddbas083 toSci 123456789012.3456123 -> 123456789012.3456 Inexact Rounded +ddbas084 toSci 1234567890123.456123 -> 1234567890123.456 Inexact Rounded +ddbas085 toSci 12345678901234.56123 -> 12345678901234.56 Inexact Rounded +ddbas086 toSci 123456789012345.6123 -> 123456789012345.6 Inexact Rounded +ddbas087 toSci 1234567890123456.123 -> 1234567890123456 Inexact Rounded +ddbas088 toSci 12345678901234561.23 -> 1.234567890123456E+16 Inexact Rounded +ddbas089 toSci 123456789012345612.3 -> 1.234567890123456E+17 Inexact Rounded +ddbas090 toSci 1234567890123456123. -> 1.234567890123456E+18 Inexact Rounded + + +-- Numbers with E +ddbas130 toSci "0.000E-1" -> '0.0000' +ddbas131 toSci "0.000E-2" -> '0.00000' +ddbas132 toSci "0.000E-3" -> '0.000000' +ddbas133 toSci "0.000E-4" -> '0E-7' +ddbas134 toSci "0.00E-2" -> '0.0000' +ddbas135 toSci "0.00E-3" -> '0.00000' +ddbas136 toSci "0.00E-4" -> '0.000000' +ddbas137 toSci "0.00E-5" -> '0E-7' +ddbas138 toSci "+0E+9" -> '0E+9' +ddbas139 toSci "-0E+9" -> '-0E+9' +ddbas140 toSci "1E+9" -> '1E+9' +ddbas141 toSci "1e+09" -> '1E+9' +ddbas142 toSci "1E+90" -> '1E+90' +ddbas143 toSci "+1E+009" -> '1E+9' +ddbas144 toSci "0E+9" -> '0E+9' +ddbas145 toSci "1E+9" -> '1E+9' +ddbas146 toSci "1E+09" -> '1E+9' +ddbas147 toSci "1e+90" -> '1E+90' +ddbas148 toSci "1E+009" -> '1E+9' +ddbas149 toSci "000E+9" -> '0E+9' +ddbas150 toSci "1E9" -> '1E+9' +ddbas151 toSci "1e09" -> '1E+9' +ddbas152 toSci "1E90" -> '1E+90' +ddbas153 toSci "1E009" -> '1E+9' +ddbas154 toSci "0E9" -> '0E+9' +ddbas155 toSci "0.000e+0" -> '0.000' +ddbas156 toSci "0.000E-1" -> '0.0000' +ddbas157 toSci "4E+9" -> '4E+9' +ddbas158 toSci "44E+9" -> '4.4E+10' +ddbas159 toSci "0.73e-7" -> '7.3E-8' +ddbas160 toSci "00E+9" -> '0E+9' +ddbas161 toSci "00E-9" -> '0E-9' +ddbas162 toSci "10E+9" -> '1.0E+10' +ddbas163 toSci "10E+09" -> '1.0E+10' +ddbas164 toSci "10e+90" -> '1.0E+91' +ddbas165 toSci "10E+009" -> '1.0E+10' +ddbas166 toSci "100e+9" -> '1.00E+11' +ddbas167 toSci "100e+09" -> '1.00E+11' +ddbas168 toSci "100E+90" -> '1.00E+92' +ddbas169 toSci "100e+009" -> '1.00E+11' + +ddbas170 toSci "1.265" -> '1.265' +ddbas171 toSci "1.265E-20" -> '1.265E-20' +ddbas172 toSci "1.265E-8" -> '1.265E-8' +ddbas173 toSci "1.265E-4" -> '0.0001265' +ddbas174 toSci "1.265E-3" -> '0.001265' +ddbas175 toSci "1.265E-2" -> '0.01265' +ddbas176 toSci "1.265E-1" -> '0.1265' +ddbas177 toSci "1.265E-0" -> '1.265' +ddbas178 toSci "1.265E+1" -> '12.65' +ddbas179 toSci "1.265E+2" -> '126.5' +ddbas180 toSci "1.265E+3" -> '1265' +ddbas181 toSci "1.265E+4" -> '1.265E+4' +ddbas182 toSci "1.265E+8" -> '1.265E+8' +ddbas183 toSci "1.265E+20" -> '1.265E+20' + +ddbas190 toSci "12.65" -> '12.65' +ddbas191 toSci "12.65E-20" -> '1.265E-19' +ddbas192 toSci "12.65E-8" -> '1.265E-7' +ddbas193 toSci "12.65E-4" -> '0.001265' +ddbas194 toSci "12.65E-3" -> '0.01265' +ddbas195 toSci "12.65E-2" -> '0.1265' +ddbas196 toSci "12.65E-1" -> '1.265' +ddbas197 toSci "12.65E-0" -> '12.65' +ddbas198 toSci "12.65E+1" -> '126.5' +ddbas199 toSci "12.65E+2" -> '1265' +ddbas200 toSci "12.65E+3" -> '1.265E+4' +ddbas201 toSci "12.65E+4" -> '1.265E+5' +ddbas202 toSci "12.65E+8" -> '1.265E+9' +ddbas203 toSci "12.65E+20" -> '1.265E+21' + +ddbas210 toSci "126.5" -> '126.5' +ddbas211 toSci "126.5E-20" -> '1.265E-18' +ddbas212 toSci "126.5E-8" -> '0.000001265' +ddbas213 toSci "126.5E-4" -> '0.01265' +ddbas214 toSci "126.5E-3" -> '0.1265' +ddbas215 toSci "126.5E-2" -> '1.265' +ddbas216 toSci "126.5E-1" -> '12.65' +ddbas217 toSci "126.5E-0" -> '126.5' +ddbas218 toSci "126.5E+1" -> '1265' +ddbas219 toSci "126.5E+2" -> '1.265E+4' +ddbas220 toSci "126.5E+3" -> '1.265E+5' +ddbas221 toSci "126.5E+4" -> '1.265E+6' +ddbas222 toSci "126.5E+8" -> '1.265E+10' +ddbas223 toSci "126.5E+20" -> '1.265E+22' + +ddbas230 toSci "1265" -> '1265' +ddbas231 toSci "1265E-20" -> '1.265E-17' +ddbas232 toSci "1265E-8" -> '0.00001265' +ddbas233 toSci "1265E-4" -> '0.1265' +ddbas234 toSci "1265E-3" -> '1.265' +ddbas235 toSci "1265E-2" -> '12.65' +ddbas236 toSci "1265E-1" -> '126.5' +ddbas237 toSci "1265E-0" -> '1265' +ddbas238 toSci "1265E+1" -> '1.265E+4' +ddbas239 toSci "1265E+2" -> '1.265E+5' +ddbas240 toSci "1265E+3" -> '1.265E+6' +ddbas241 toSci "1265E+4" -> '1.265E+7' +ddbas242 toSci "1265E+8" -> '1.265E+11' +ddbas243 toSci "1265E+20" -> '1.265E+23' +ddbas244 toSci "1265E-9" -> '0.000001265' +ddbas245 toSci "1265E-10" -> '1.265E-7' +ddbas246 toSci "1265E-11" -> '1.265E-8' +ddbas247 toSci "1265E-12" -> '1.265E-9' + +ddbas250 toSci "0.1265" -> '0.1265' +ddbas251 toSci "0.1265E-20" -> '1.265E-21' +ddbas252 toSci "0.1265E-8" -> '1.265E-9' +ddbas253 toSci "0.1265E-4" -> '0.00001265' +ddbas254 toSci "0.1265E-3" -> '0.0001265' +ddbas255 toSci "0.1265E-2" -> '0.001265' +ddbas256 toSci "0.1265E-1" -> '0.01265' +ddbas257 toSci "0.1265E-0" -> '0.1265' +ddbas258 toSci "0.1265E+1" -> '1.265' +ddbas259 toSci "0.1265E+2" -> '12.65' +ddbas260 toSci "0.1265E+3" -> '126.5' +ddbas261 toSci "0.1265E+4" -> '1265' +ddbas262 toSci "0.1265E+8" -> '1.265E+7' +ddbas263 toSci "0.1265E+20" -> '1.265E+19' + +-- some more negative zeros [systematic tests below] +ddbas290 toSci "-0.000E-1" -> '-0.0000' +ddbas291 toSci "-0.000E-2" -> '-0.00000' +ddbas292 toSci "-0.000E-3" -> '-0.000000' +ddbas293 toSci "-0.000E-4" -> '-0E-7' +ddbas294 toSci "-0.00E-2" -> '-0.0000' +ddbas295 toSci "-0.00E-3" -> '-0.00000' +ddbas296 toSci "-0.0E-2" -> '-0.000' +ddbas297 toSci "-0.0E-3" -> '-0.0000' +ddbas298 toSci "-0E-2" -> '-0.00' +ddbas299 toSci "-0E-3" -> '-0.000' + +-- Engineering notation tests +ddbas301 toSci 10e12 -> 1.0E+13 +ddbas302 toEng 10e12 -> 10E+12 +ddbas303 toSci 10e11 -> 1.0E+12 +ddbas304 toEng 10e11 -> 1.0E+12 +ddbas305 toSci 10e10 -> 1.0E+11 +ddbas306 toEng 10e10 -> 100E+9 +ddbas307 toSci 10e9 -> 1.0E+10 +ddbas308 toEng 10e9 -> 10E+9 +ddbas309 toSci 10e8 -> 1.0E+9 +ddbas310 toEng 10e8 -> 1.0E+9 +ddbas311 toSci 10e7 -> 1.0E+8 +ddbas312 toEng 10e7 -> 100E+6 +ddbas313 toSci 10e6 -> 1.0E+7 +ddbas314 toEng 10e6 -> 10E+6 +ddbas315 toSci 10e5 -> 1.0E+6 +ddbas316 toEng 10e5 -> 1.0E+6 +ddbas317 toSci 10e4 -> 1.0E+5 +ddbas318 toEng 10e4 -> 100E+3 +ddbas319 toSci 10e3 -> 1.0E+4 +ddbas320 toEng 10e3 -> 10E+3 +ddbas321 toSci 10e2 -> 1.0E+3 +ddbas322 toEng 10e2 -> 1.0E+3 +ddbas323 toSci 10e1 -> 1.0E+2 +ddbas324 toEng 10e1 -> 100 +ddbas325 toSci 10e0 -> 10 +ddbas326 toEng 10e0 -> 10 +ddbas327 toSci 10e-1 -> 1.0 +ddbas328 toEng 10e-1 -> 1.0 +ddbas329 toSci 10e-2 -> 0.10 +ddbas330 toEng 10e-2 -> 0.10 +ddbas331 toSci 10e-3 -> 0.010 +ddbas332 toEng 10e-3 -> 0.010 +ddbas333 toSci 10e-4 -> 0.0010 +ddbas334 toEng 10e-4 -> 0.0010 +ddbas335 toSci 10e-5 -> 0.00010 +ddbas336 toEng 10e-5 -> 0.00010 +ddbas337 toSci 10e-6 -> 0.000010 +ddbas338 toEng 10e-6 -> 0.000010 +ddbas339 toSci 10e-7 -> 0.0000010 +ddbas340 toEng 10e-7 -> 0.0000010 +ddbas341 toSci 10e-8 -> 1.0E-7 +ddbas342 toEng 10e-8 -> 100E-9 +ddbas343 toSci 10e-9 -> 1.0E-8 +ddbas344 toEng 10e-9 -> 10E-9 +ddbas345 toSci 10e-10 -> 1.0E-9 +ddbas346 toEng 10e-10 -> 1.0E-9 +ddbas347 toSci 10e-11 -> 1.0E-10 +ddbas348 toEng 10e-11 -> 100E-12 +ddbas349 toSci 10e-12 -> 1.0E-11 +ddbas350 toEng 10e-12 -> 10E-12 +ddbas351 toSci 10e-13 -> 1.0E-12 +ddbas352 toEng 10e-13 -> 1.0E-12 + +ddbas361 toSci 7E12 -> 7E+12 +ddbas362 toEng 7E12 -> 7E+12 +ddbas363 toSci 7E11 -> 7E+11 +ddbas364 toEng 7E11 -> 700E+9 +ddbas365 toSci 7E10 -> 7E+10 +ddbas366 toEng 7E10 -> 70E+9 +ddbas367 toSci 7E9 -> 7E+9 +ddbas368 toEng 7E9 -> 7E+9 +ddbas369 toSci 7E8 -> 7E+8 +ddbas370 toEng 7E8 -> 700E+6 +ddbas371 toSci 7E7 -> 7E+7 +ddbas372 toEng 7E7 -> 70E+6 +ddbas373 toSci 7E6 -> 7E+6 +ddbas374 toEng 7E6 -> 7E+6 +ddbas375 toSci 7E5 -> 7E+5 +ddbas376 toEng 7E5 -> 700E+3 +ddbas377 toSci 7E4 -> 7E+4 +ddbas378 toEng 7E4 -> 70E+3 +ddbas379 toSci 7E3 -> 7E+3 +ddbas380 toEng 7E3 -> 7E+3 +ddbas381 toSci 7E2 -> 7E+2 +ddbas382 toEng 7E2 -> 700 +ddbas383 toSci 7E1 -> 7E+1 +ddbas384 toEng 7E1 -> 70 +ddbas385 toSci 7E0 -> 7 +ddbas386 toEng 7E0 -> 7 +ddbas387 toSci 7E-1 -> 0.7 +ddbas388 toEng 7E-1 -> 0.7 +ddbas389 toSci 7E-2 -> 0.07 +ddbas390 toEng 7E-2 -> 0.07 +ddbas391 toSci 7E-3 -> 0.007 +ddbas392 toEng 7E-3 -> 0.007 +ddbas393 toSci 7E-4 -> 0.0007 +ddbas394 toEng 7E-4 -> 0.0007 +ddbas395 toSci 7E-5 -> 0.00007 +ddbas396 toEng 7E-5 -> 0.00007 +ddbas397 toSci 7E-6 -> 0.000007 +ddbas398 toEng 7E-6 -> 0.000007 +ddbas399 toSci 7E-7 -> 7E-7 +ddbas400 toEng 7E-7 -> 700E-9 +ddbas401 toSci 7E-8 -> 7E-8 +ddbas402 toEng 7E-8 -> 70E-9 +ddbas403 toSci 7E-9 -> 7E-9 +ddbas404 toEng 7E-9 -> 7E-9 +ddbas405 toSci 7E-10 -> 7E-10 +ddbas406 toEng 7E-10 -> 700E-12 +ddbas407 toSci 7E-11 -> 7E-11 +ddbas408 toEng 7E-11 -> 70E-12 +ddbas409 toSci 7E-12 -> 7E-12 +ddbas410 toEng 7E-12 -> 7E-12 +ddbas411 toSci 7E-13 -> 7E-13 +ddbas412 toEng 7E-13 -> 700E-15 + +-- Exacts remain exact up to precision .. +rounding: half_up +ddbas420 toSci 100 -> 100 +ddbas421 toEng 100 -> 100 +ddbas422 toSci 1000 -> 1000 +ddbas423 toEng 1000 -> 1000 +ddbas424 toSci 999.9 -> 999.9 +ddbas425 toEng 999.9 -> 999.9 +ddbas426 toSci 1000.0 -> 1000.0 +ddbas427 toEng 1000.0 -> 1000.0 +ddbas428 toSci 1000.1 -> 1000.1 +ddbas429 toEng 1000.1 -> 1000.1 +ddbas430 toSci 10000 -> 10000 +ddbas431 toEng 10000 -> 10000 +ddbas432 toSci 100000 -> 100000 +ddbas433 toEng 100000 -> 100000 +ddbas434 toSci 1000000 -> 1000000 +ddbas435 toEng 1000000 -> 1000000 +ddbas436 toSci 10000000 -> 10000000 +ddbas437 toEng 10000000 -> 10000000 +ddbas438 toSci 100000000 -> 100000000 +ddbas439 toEng 1000000000000000 -> 1000000000000000 +ddbas440 toSci 10000000000000000 -> 1.000000000000000E+16 Rounded +ddbas441 toEng 10000000000000000 -> 10.00000000000000E+15 Rounded +ddbas442 toSci 10000000000000001 -> 1.000000000000000E+16 Rounded Inexact +ddbas443 toEng 10000000000000001 -> 10.00000000000000E+15 Rounded Inexact +ddbas444 toSci 10000000000000003 -> 1.000000000000000E+16 Rounded Inexact +ddbas445 toEng 10000000000000003 -> 10.00000000000000E+15 Rounded Inexact +ddbas446 toSci 10000000000000005 -> 1.000000000000001E+16 Rounded Inexact +ddbas447 toEng 10000000000000005 -> 10.00000000000001E+15 Rounded Inexact +ddbas448 toSci 100000000000000050 -> 1.000000000000001E+17 Rounded Inexact +ddbas449 toEng 100000000000000050 -> 100.0000000000001E+15 Rounded Inexact +ddbas450 toSci 10000000000000009 -> 1.000000000000001E+16 Rounded Inexact +ddbas451 toEng 10000000000000009 -> 10.00000000000001E+15 Rounded Inexact +ddbas452 toSci 100000000000000000 -> 1.000000000000000E+17 Rounded +ddbas453 toEng 100000000000000000 -> 100.0000000000000E+15 Rounded +ddbas454 toSci 100000000000000003 -> 1.000000000000000E+17 Rounded Inexact +ddbas455 toEng 100000000000000003 -> 100.0000000000000E+15 Rounded Inexact +ddbas456 toSci 100000000000000005 -> 1.000000000000000E+17 Rounded Inexact +ddbas457 toEng 100000000000000005 -> 100.0000000000000E+15 Rounded Inexact +ddbas458 toSci 100000000000000009 -> 1.000000000000000E+17 Rounded Inexact +ddbas459 toEng 100000000000000009 -> 100.0000000000000E+15 Rounded Inexact +ddbas460 toSci 1000000000000000000 -> 1.000000000000000E+18 Rounded +ddbas461 toEng 1000000000000000000 -> 1.000000000000000E+18 Rounded +ddbas462 toSci 1000000000000000300 -> 1.000000000000000E+18 Rounded Inexact +ddbas463 toEng 1000000000000000300 -> 1.000000000000000E+18 Rounded Inexact +ddbas464 toSci 1000000000000000500 -> 1.000000000000001E+18 Rounded Inexact +ddbas465 toEng 1000000000000000500 -> 1.000000000000001E+18 Rounded Inexact +ddbas466 toSci 1000000000000000900 -> 1.000000000000001E+18 Rounded Inexact +ddbas467 toEng 1000000000000000900 -> 1.000000000000001E+18 Rounded Inexact +ddbas468 toSci 10000000000000000000 -> 1.000000000000000E+19 Rounded +ddbas469 toEng 10000000000000000000 -> 10.00000000000000E+18 Rounded +ddbas470 toSci 10000000000000003000 -> 1.000000000000000E+19 Rounded Inexact +ddbas471 toEng 10000000000000003000 -> 10.00000000000000E+18 Rounded Inexact +ddbas472 toSci 10000000000000005000 -> 1.000000000000001E+19 Rounded Inexact +ddbas473 toEng 10000000000000005000 -> 10.00000000000001E+18 Rounded Inexact +ddbas474 toSci 10000000000000009000 -> 1.000000000000001E+19 Rounded Inexact +ddbas475 toEng 10000000000000009000 -> 10.00000000000001E+18 Rounded Inexact + +-- check rounding modes heeded +rounding: ceiling +ddbsr401 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr402 toSci 1.11111111111234549 -> 1.111111111112346 Rounded Inexact +ddbsr403 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact +ddbsr404 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +rounding: up +ddbsr405 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr406 toSci 1.11111111111234549 -> 1.111111111112346 Rounded Inexact +ddbsr407 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact +ddbsr408 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +rounding: floor +ddbsr410 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr411 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr412 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact +ddbsr413 toSci 1.11111111111234551 -> 1.111111111112345 Rounded Inexact +rounding: half_down +ddbsr415 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr416 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr417 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact +ddbsr418 toSci 1.11111111111234650 -> 1.111111111112346 Rounded Inexact +ddbsr419 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +rounding: half_even +ddbsr421 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr422 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr423 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact +ddbsr424 toSci 1.11111111111234650 -> 1.111111111112346 Rounded Inexact +ddbsr425 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +rounding: down +ddbsr426 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr427 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr428 toSci 1.11111111111234550 -> 1.111111111112345 Rounded Inexact +ddbsr429 toSci 1.11111111111234551 -> 1.111111111112345 Rounded Inexact +rounding: half_up +ddbsr431 toSci 1.1111111111123450 -> 1.111111111112345 Rounded +ddbsr432 toSci 1.11111111111234549 -> 1.111111111112345 Rounded Inexact +ddbsr433 toSci 1.11111111111234550 -> 1.111111111112346 Rounded Inexact +ddbsr434 toSci 1.11111111111234650 -> 1.111111111112347 Rounded Inexact +ddbsr435 toSci 1.11111111111234551 -> 1.111111111112346 Rounded Inexact +-- negatives +rounding: ceiling +ddbsr501 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr502 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr503 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact +ddbsr504 toSci -1.11111111111234551 -> -1.111111111112345 Rounded Inexact +rounding: up +ddbsr505 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr506 toSci -1.11111111111234549 -> -1.111111111112346 Rounded Inexact +ddbsr507 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact +ddbsr508 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact +rounding: floor +ddbsr510 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr511 toSci -1.11111111111234549 -> -1.111111111112346 Rounded Inexact +ddbsr512 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact +ddbsr513 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact +rounding: half_down +ddbsr515 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr516 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr517 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact +ddbsr518 toSci -1.11111111111234650 -> -1.111111111112346 Rounded Inexact +ddbsr519 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact +rounding: half_even +ddbsr521 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr522 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr523 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact +ddbsr524 toSci -1.11111111111234650 -> -1.111111111112346 Rounded Inexact +ddbsr525 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact +rounding: down +ddbsr526 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr527 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr528 toSci -1.11111111111234550 -> -1.111111111112345 Rounded Inexact +ddbsr529 toSci -1.11111111111234551 -> -1.111111111112345 Rounded Inexact +rounding: half_up +ddbsr531 toSci -1.1111111111123450 -> -1.111111111112345 Rounded +ddbsr532 toSci -1.11111111111234549 -> -1.111111111112345 Rounded Inexact +ddbsr533 toSci -1.11111111111234550 -> -1.111111111112346 Rounded Inexact +ddbsr534 toSci -1.11111111111234650 -> -1.111111111112347 Rounded Inexact +ddbsr535 toSci -1.11111111111234551 -> -1.111111111112346 Rounded Inexact + +rounding: half_even + +-- The 'baddies' tests from DiagBigDecimal, plus some new ones +ddbas500 toSci '1..2' -> NaN Conversion_syntax +ddbas501 toSci '.' -> NaN Conversion_syntax +ddbas502 toSci '..' -> NaN Conversion_syntax +ddbas503 toSci '++1' -> NaN Conversion_syntax +ddbas504 toSci '--1' -> NaN Conversion_syntax +ddbas505 toSci '-+1' -> NaN Conversion_syntax +ddbas506 toSci '+-1' -> NaN Conversion_syntax +ddbas507 toSci '12e' -> NaN Conversion_syntax +ddbas508 toSci '12e++' -> NaN Conversion_syntax +ddbas509 toSci '12f4' -> NaN Conversion_syntax +ddbas510 toSci ' +1' -> NaN Conversion_syntax +ddbas511 toSci '+ 1' -> NaN Conversion_syntax +ddbas512 toSci '12 ' -> NaN Conversion_syntax +ddbas513 toSci ' + 1' -> NaN Conversion_syntax +ddbas514 toSci ' - 1 ' -> NaN Conversion_syntax +ddbas515 toSci 'x' -> NaN Conversion_syntax +ddbas516 toSci '-1-' -> NaN Conversion_syntax +ddbas517 toSci '12-' -> NaN Conversion_syntax +ddbas518 toSci '3+' -> NaN Conversion_syntax +ddbas519 toSci '' -> NaN Conversion_syntax +ddbas520 toSci '1e-' -> NaN Conversion_syntax +ddbas521 toSci '7e99999a' -> NaN Conversion_syntax +ddbas522 toSci '7e123567890x' -> NaN Conversion_syntax +ddbas523 toSci '7e12356789012x' -> NaN Conversion_syntax +ddbas524 toSci '' -> NaN Conversion_syntax +ddbas525 toSci 'e100' -> NaN Conversion_syntax +ddbas526 toSci '\u0e5a' -> NaN Conversion_syntax +ddbas527 toSci '\u0b65' -> NaN Conversion_syntax +ddbas528 toSci '123,65' -> NaN Conversion_syntax +ddbas529 toSci '1.34.5' -> NaN Conversion_syntax +ddbas530 toSci '.123.5' -> NaN Conversion_syntax +ddbas531 toSci '01.35.' -> NaN Conversion_syntax +ddbas532 toSci '01.35-' -> NaN Conversion_syntax +ddbas533 toSci '0000..' -> NaN Conversion_syntax +ddbas534 toSci '.0000.' -> NaN Conversion_syntax +ddbas535 toSci '00..00' -> NaN Conversion_syntax +ddbas536 toSci '111e*123' -> NaN Conversion_syntax +ddbas537 toSci '111e123-' -> NaN Conversion_syntax +ddbas538 toSci '111e+12+' -> NaN Conversion_syntax +ddbas539 toSci '111e1-3-' -> NaN Conversion_syntax +ddbas540 toSci '111e1*23' -> NaN Conversion_syntax +ddbas541 toSci '111e1e+3' -> NaN Conversion_syntax +ddbas542 toSci '1e1.0' -> NaN Conversion_syntax +ddbas543 toSci '1e123e' -> NaN Conversion_syntax +ddbas544 toSci 'ten' -> NaN Conversion_syntax +ddbas545 toSci 'ONE' -> NaN Conversion_syntax +ddbas546 toSci '1e.1' -> NaN Conversion_syntax +ddbas547 toSci '1e1.' -> NaN Conversion_syntax +ddbas548 toSci '1ee' -> NaN Conversion_syntax +ddbas549 toSci 'e+1' -> NaN Conversion_syntax +ddbas550 toSci '1.23.4' -> NaN Conversion_syntax +ddbas551 toSci '1.2.1' -> NaN Conversion_syntax +ddbas552 toSci '1E+1.2' -> NaN Conversion_syntax +ddbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax +ddbas554 toSci '1E++1' -> NaN Conversion_syntax +ddbas555 toSci '1E--1' -> NaN Conversion_syntax +ddbas556 toSci '1E+-1' -> NaN Conversion_syntax +ddbas557 toSci '1E-+1' -> NaN Conversion_syntax +ddbas558 toSci '1E''1' -> NaN Conversion_syntax +ddbas559 toSci "1E""1" -> NaN Conversion_syntax +ddbas560 toSci "1E""""" -> NaN Conversion_syntax +-- Near-specials +ddbas561 toSci "qNaN" -> NaN Conversion_syntax +ddbas562 toSci "NaNq" -> NaN Conversion_syntax +ddbas563 toSci "NaNs" -> NaN Conversion_syntax +ddbas564 toSci "Infi" -> NaN Conversion_syntax +ddbas565 toSci "Infin" -> NaN Conversion_syntax +ddbas566 toSci "Infini" -> NaN Conversion_syntax +ddbas567 toSci "Infinit" -> NaN Conversion_syntax +ddbas568 toSci "-Infinit" -> NaN Conversion_syntax +ddbas569 toSci "0Inf" -> NaN Conversion_syntax +ddbas570 toSci "9Inf" -> NaN Conversion_syntax +ddbas571 toSci "-0Inf" -> NaN Conversion_syntax +ddbas572 toSci "-9Inf" -> NaN Conversion_syntax +ddbas573 toSci "-sNa" -> NaN Conversion_syntax +ddbas574 toSci "xNaN" -> NaN Conversion_syntax +ddbas575 toSci "0sNaN" -> NaN Conversion_syntax + +-- some baddies with dots and Es and dots and specials +ddbas576 toSci 'e+1' -> NaN Conversion_syntax +ddbas577 toSci '.e+1' -> NaN Conversion_syntax +ddbas578 toSci '+.e+1' -> NaN Conversion_syntax +ddbas579 toSci '-.e+' -> NaN Conversion_syntax +ddbas580 toSci '-.e' -> NaN Conversion_syntax +ddbas581 toSci 'E+1' -> NaN Conversion_syntax +ddbas582 toSci '.E+1' -> NaN Conversion_syntax +ddbas583 toSci '+.E+1' -> NaN Conversion_syntax +ddbas584 toSci '-.E+' -> NaN Conversion_syntax +ddbas585 toSci '-.E' -> NaN Conversion_syntax + +ddbas586 toSci '.NaN' -> NaN Conversion_syntax +ddbas587 toSci '-.NaN' -> NaN Conversion_syntax +ddbas588 toSci '+.sNaN' -> NaN Conversion_syntax +ddbas589 toSci '+.Inf' -> NaN Conversion_syntax +ddbas590 toSci '.Infinity' -> NaN Conversion_syntax + +-- Zeros +ddbas601 toSci 0.000000000 -> 0E-9 +ddbas602 toSci 0.00000000 -> 0E-8 +ddbas603 toSci 0.0000000 -> 0E-7 +ddbas604 toSci 0.000000 -> 0.000000 +ddbas605 toSci 0.00000 -> 0.00000 +ddbas606 toSci 0.0000 -> 0.0000 +ddbas607 toSci 0.000 -> 0.000 +ddbas608 toSci 0.00 -> 0.00 +ddbas609 toSci 0.0 -> 0.0 +ddbas610 toSci .0 -> 0.0 +ddbas611 toSci 0. -> 0 +ddbas612 toSci -.0 -> -0.0 +ddbas613 toSci -0. -> -0 +ddbas614 toSci -0.0 -> -0.0 +ddbas615 toSci -0.00 -> -0.00 +ddbas616 toSci -0.000 -> -0.000 +ddbas617 toSci -0.0000 -> -0.0000 +ddbas618 toSci -0.00000 -> -0.00000 +ddbas619 toSci -0.000000 -> -0.000000 +ddbas620 toSci -0.0000000 -> -0E-7 +ddbas621 toSci -0.00000000 -> -0E-8 +ddbas622 toSci -0.000000000 -> -0E-9 + +ddbas630 toSci 0.00E+0 -> 0.00 +ddbas631 toSci 0.00E+1 -> 0.0 +ddbas632 toSci 0.00E+2 -> 0 +ddbas633 toSci 0.00E+3 -> 0E+1 +ddbas634 toSci 0.00E+4 -> 0E+2 +ddbas635 toSci 0.00E+5 -> 0E+3 +ddbas636 toSci 0.00E+6 -> 0E+4 +ddbas637 toSci 0.00E+7 -> 0E+5 +ddbas638 toSci 0.00E+8 -> 0E+6 +ddbas639 toSci 0.00E+9 -> 0E+7 + +ddbas640 toSci 0.0E+0 -> 0.0 +ddbas641 toSci 0.0E+1 -> 0 +ddbas642 toSci 0.0E+2 -> 0E+1 +ddbas643 toSci 0.0E+3 -> 0E+2 +ddbas644 toSci 0.0E+4 -> 0E+3 +ddbas645 toSci 0.0E+5 -> 0E+4 +ddbas646 toSci 0.0E+6 -> 0E+5 +ddbas647 toSci 0.0E+7 -> 0E+6 +ddbas648 toSci 0.0E+8 -> 0E+7 +ddbas649 toSci 0.0E+9 -> 0E+8 + +ddbas650 toSci 0E+0 -> 0 +ddbas651 toSci 0E+1 -> 0E+1 +ddbas652 toSci 0E+2 -> 0E+2 +ddbas653 toSci 0E+3 -> 0E+3 +ddbas654 toSci 0E+4 -> 0E+4 +ddbas655 toSci 0E+5 -> 0E+5 +ddbas656 toSci 0E+6 -> 0E+6 +ddbas657 toSci 0E+7 -> 0E+7 +ddbas658 toSci 0E+8 -> 0E+8 +ddbas659 toSci 0E+9 -> 0E+9 + +ddbas660 toSci 0.0E-0 -> 0.0 +ddbas661 toSci 0.0E-1 -> 0.00 +ddbas662 toSci 0.0E-2 -> 0.000 +ddbas663 toSci 0.0E-3 -> 0.0000 +ddbas664 toSci 0.0E-4 -> 0.00000 +ddbas665 toSci 0.0E-5 -> 0.000000 +ddbas666 toSci 0.0E-6 -> 0E-7 +ddbas667 toSci 0.0E-7 -> 0E-8 +ddbas668 toSci 0.0E-8 -> 0E-9 +ddbas669 toSci 0.0E-9 -> 0E-10 + +ddbas670 toSci 0.00E-0 -> 0.00 +ddbas671 toSci 0.00E-1 -> 0.000 +ddbas672 toSci 0.00E-2 -> 0.0000 +ddbas673 toSci 0.00E-3 -> 0.00000 +ddbas674 toSci 0.00E-4 -> 0.000000 +ddbas675 toSci 0.00E-5 -> 0E-7 +ddbas676 toSci 0.00E-6 -> 0E-8 +ddbas677 toSci 0.00E-7 -> 0E-9 +ddbas678 toSci 0.00E-8 -> 0E-10 +ddbas679 toSci 0.00E-9 -> 0E-11 + +ddbas680 toSci 000000. -> 0 +ddbas681 toSci 00000. -> 0 +ddbas682 toSci 0000. -> 0 +ddbas683 toSci 000. -> 0 +ddbas684 toSci 00. -> 0 +ddbas685 toSci 0. -> 0 +ddbas686 toSci +00000. -> 0 +ddbas687 toSci -00000. -> -0 +ddbas688 toSci +0. -> 0 +ddbas689 toSci -0. -> -0 + +-- Specials +ddbas700 toSci "NaN" -> NaN +ddbas701 toSci "nan" -> NaN +ddbas702 toSci "nAn" -> NaN +ddbas703 toSci "NAN" -> NaN +ddbas704 toSci "+NaN" -> NaN +ddbas705 toSci "+nan" -> NaN +ddbas706 toSci "+nAn" -> NaN +ddbas707 toSci "+NAN" -> NaN +ddbas708 toSci "-NaN" -> -NaN +ddbas709 toSci "-nan" -> -NaN +ddbas710 toSci "-nAn" -> -NaN +ddbas711 toSci "-NAN" -> -NaN +ddbas712 toSci 'NaN0' -> NaN +ddbas713 toSci 'NaN1' -> NaN1 +ddbas714 toSci 'NaN12' -> NaN12 +ddbas715 toSci 'NaN123' -> NaN123 +ddbas716 toSci 'NaN1234' -> NaN1234 +ddbas717 toSci 'NaN01' -> NaN1 +ddbas718 toSci 'NaN012' -> NaN12 +ddbas719 toSci 'NaN0123' -> NaN123 +ddbas720 toSci 'NaN01234' -> NaN1234 +ddbas721 toSci 'NaN001' -> NaN1 +ddbas722 toSci 'NaN0012' -> NaN12 +ddbas723 toSci 'NaN00123' -> NaN123 +ddbas724 toSci 'NaN001234' -> NaN1234 +ddbas725 toSci 'NaN1234567890123456' -> NaN Conversion_syntax +ddbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax +ddbas727 toSci 'NaN12.45' -> NaN Conversion_syntax +ddbas728 toSci 'NaN-12' -> NaN Conversion_syntax +ddbas729 toSci 'NaN+12' -> NaN Conversion_syntax + +ddbas730 toSci "sNaN" -> sNaN +ddbas731 toSci "snan" -> sNaN +ddbas732 toSci "SnAn" -> sNaN +ddbas733 toSci "SNAN" -> sNaN +ddbas734 toSci "+sNaN" -> sNaN +ddbas735 toSci "+snan" -> sNaN +ddbas736 toSci "+SnAn" -> sNaN +ddbas737 toSci "+SNAN" -> sNaN +ddbas738 toSci "-sNaN" -> -sNaN +ddbas739 toSci "-snan" -> -sNaN +ddbas740 toSci "-SnAn" -> -sNaN +ddbas741 toSci "-SNAN" -> -sNaN +ddbas742 toSci 'sNaN0000' -> sNaN +ddbas743 toSci 'sNaN7' -> sNaN7 +ddbas744 toSci 'sNaN007234' -> sNaN7234 +ddbas745 toSci 'sNaN7234561234567890' -> NaN Conversion_syntax +ddbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax +ddbas747 toSci 'sNaN-72' -> NaN Conversion_syntax + +ddbas748 toSci "Inf" -> Infinity +ddbas749 toSci "inf" -> Infinity +ddbas750 toSci "iNf" -> Infinity +ddbas751 toSci "INF" -> Infinity +ddbas752 toSci "+Inf" -> Infinity +ddbas753 toSci "+inf" -> Infinity +ddbas754 toSci "+iNf" -> Infinity +ddbas755 toSci "+INF" -> Infinity +ddbas756 toSci "-Inf" -> -Infinity +ddbas757 toSci "-inf" -> -Infinity +ddbas758 toSci "-iNf" -> -Infinity +ddbas759 toSci "-INF" -> -Infinity + +ddbas760 toSci "Infinity" -> Infinity +ddbas761 toSci "infinity" -> Infinity +ddbas762 toSci "iNfInItY" -> Infinity +ddbas763 toSci "INFINITY" -> Infinity +ddbas764 toSci "+Infinity" -> Infinity +ddbas765 toSci "+infinity" -> Infinity +ddbas766 toSci "+iNfInItY" -> Infinity +ddbas767 toSci "+INFINITY" -> Infinity +ddbas768 toSci "-Infinity" -> -Infinity +ddbas769 toSci "-infinity" -> -Infinity +ddbas770 toSci "-iNfInItY" -> -Infinity +ddbas771 toSci "-INFINITY" -> -Infinity + +-- Specials and zeros for toEng +ddbast772 toEng "NaN" -> NaN +ddbast773 toEng "-Infinity" -> -Infinity +ddbast774 toEng "-sNaN" -> -sNaN +ddbast775 toEng "-NaN" -> -NaN +ddbast776 toEng "+Infinity" -> Infinity +ddbast778 toEng "+sNaN" -> sNaN +ddbast779 toEng "+NaN" -> NaN +ddbast780 toEng "INFINITY" -> Infinity +ddbast781 toEng "SNAN" -> sNaN +ddbast782 toEng "NAN" -> NaN +ddbast783 toEng "infinity" -> Infinity +ddbast784 toEng "snan" -> sNaN +ddbast785 toEng "nan" -> NaN +ddbast786 toEng "InFINITY" -> Infinity +ddbast787 toEng "SnAN" -> sNaN +ddbast788 toEng "nAN" -> NaN +ddbast789 toEng "iNfinity" -> Infinity +ddbast790 toEng "sNan" -> sNaN +ddbast791 toEng "Nan" -> NaN +ddbast792 toEng "Infinity" -> Infinity +ddbast793 toEng "sNaN" -> sNaN + +-- Zero toEng, etc. +ddbast800 toEng 0e+1 -> "0.00E+3" -- doc example + +ddbast801 toEng 0.000000000 -> 0E-9 +ddbast802 toEng 0.00000000 -> 0.00E-6 +ddbast803 toEng 0.0000000 -> 0.0E-6 +ddbast804 toEng 0.000000 -> 0.000000 +ddbast805 toEng 0.00000 -> 0.00000 +ddbast806 toEng 0.0000 -> 0.0000 +ddbast807 toEng 0.000 -> 0.000 +ddbast808 toEng 0.00 -> 0.00 +ddbast809 toEng 0.0 -> 0.0 +ddbast810 toEng .0 -> 0.0 +ddbast811 toEng 0. -> 0 +ddbast812 toEng -.0 -> -0.0 +ddbast813 toEng -0. -> -0 +ddbast814 toEng -0.0 -> -0.0 +ddbast815 toEng -0.00 -> -0.00 +ddbast816 toEng -0.000 -> -0.000 +ddbast817 toEng -0.0000 -> -0.0000 +ddbast818 toEng -0.00000 -> -0.00000 +ddbast819 toEng -0.000000 -> -0.000000 +ddbast820 toEng -0.0000000 -> -0.0E-6 +ddbast821 toEng -0.00000000 -> -0.00E-6 +ddbast822 toEng -0.000000000 -> -0E-9 + +ddbast830 toEng 0.00E+0 -> 0.00 +ddbast831 toEng 0.00E+1 -> 0.0 +ddbast832 toEng 0.00E+2 -> 0 +ddbast833 toEng 0.00E+3 -> 0.00E+3 +ddbast834 toEng 0.00E+4 -> 0.0E+3 +ddbast835 toEng 0.00E+5 -> 0E+3 +ddbast836 toEng 0.00E+6 -> 0.00E+6 +ddbast837 toEng 0.00E+7 -> 0.0E+6 +ddbast838 toEng 0.00E+8 -> 0E+6 +ddbast839 toEng 0.00E+9 -> 0.00E+9 + +ddbast840 toEng 0.0E+0 -> 0.0 +ddbast841 toEng 0.0E+1 -> 0 +ddbast842 toEng 0.0E+2 -> 0.00E+3 +ddbast843 toEng 0.0E+3 -> 0.0E+3 +ddbast844 toEng 0.0E+4 -> 0E+3 +ddbast845 toEng 0.0E+5 -> 0.00E+6 +ddbast846 toEng 0.0E+6 -> 0.0E+6 +ddbast847 toEng 0.0E+7 -> 0E+6 +ddbast848 toEng 0.0E+8 -> 0.00E+9 +ddbast849 toEng 0.0E+9 -> 0.0E+9 + +ddbast850 toEng 0E+0 -> 0 +ddbast851 toEng 0E+1 -> 0.00E+3 +ddbast852 toEng 0E+2 -> 0.0E+3 +ddbast853 toEng 0E+3 -> 0E+3 +ddbast854 toEng 0E+4 -> 0.00E+6 +ddbast855 toEng 0E+5 -> 0.0E+6 +ddbast856 toEng 0E+6 -> 0E+6 +ddbast857 toEng 0E+7 -> 0.00E+9 +ddbast858 toEng 0E+8 -> 0.0E+9 +ddbast859 toEng 0E+9 -> 0E+9 + +ddbast860 toEng 0.0E-0 -> 0.0 +ddbast861 toEng 0.0E-1 -> 0.00 +ddbast862 toEng 0.0E-2 -> 0.000 +ddbast863 toEng 0.0E-3 -> 0.0000 +ddbast864 toEng 0.0E-4 -> 0.00000 +ddbast865 toEng 0.0E-5 -> 0.000000 +ddbast866 toEng 0.0E-6 -> 0.0E-6 +ddbast867 toEng 0.0E-7 -> 0.00E-6 +ddbast868 toEng 0.0E-8 -> 0E-9 +ddbast869 toEng 0.0E-9 -> 0.0E-9 + +ddbast870 toEng 0.00E-0 -> 0.00 +ddbast871 toEng 0.00E-1 -> 0.000 +ddbast872 toEng 0.00E-2 -> 0.0000 +ddbast873 toEng 0.00E-3 -> 0.00000 +ddbast874 toEng 0.00E-4 -> 0.000000 +ddbast875 toEng 0.00E-5 -> 0.0E-6 +ddbast876 toEng 0.00E-6 -> 0.00E-6 +ddbast877 toEng 0.00E-7 -> 0E-9 +ddbast878 toEng 0.00E-8 -> 0.0E-9 +ddbast879 toEng 0.00E-9 -> 0.00E-9 + +-- long input strings +ddbas801 tosci '01234567890123456' -> 1234567890123456 +ddbas802 tosci '001234567890123456' -> 1234567890123456 +ddbas803 tosci '0001234567890123456' -> 1234567890123456 +ddbas804 tosci '00001234567890123456' -> 1234567890123456 +ddbas805 tosci '000001234567890123456' -> 1234567890123456 +ddbas806 tosci '0000001234567890123456' -> 1234567890123456 +ddbas807 tosci '00000001234567890123456' -> 1234567890123456 +ddbas808 tosci '000000001234567890123456' -> 1234567890123456 +ddbas809 tosci '0000000001234567890123456' -> 1234567890123456 +ddbas810 tosci '00000000001234567890123456' -> 1234567890123456 + +ddbas811 tosci '0.1234567890123456' -> 0.1234567890123456 +ddbas812 tosci '0.01234567890123456' -> 0.01234567890123456 +ddbas813 tosci '0.001234567890123456' -> 0.001234567890123456 +ddbas814 tosci '0.0001234567890123456' -> 0.0001234567890123456 +ddbas815 tosci '0.00001234567890123456' -> 0.00001234567890123456 +ddbas816 tosci '0.000001234567890123456' -> 0.000001234567890123456 +ddbas817 tosci '0.0000001234567890123456' -> 1.234567890123456E-7 +ddbas818 tosci '0.00000001234567890123456' -> 1.234567890123456E-8 +ddbas819 tosci '0.000000001234567890123456' -> 1.234567890123456E-9 +ddbas820 tosci '0.0000000001234567890123456' -> 1.234567890123456E-10 + +ddbas821 tosci '12345678901234567890' -> 1.234567890123457E+19 Inexact Rounded +ddbas822 tosci '123456789012345678901' -> 1.234567890123457E+20 Inexact Rounded +ddbas823 tosci '1234567890123456789012' -> 1.234567890123457E+21 Inexact Rounded +ddbas824 tosci '12345678901234567890123' -> 1.234567890123457E+22 Inexact Rounded +ddbas825 tosci '123456789012345678901234' -> 1.234567890123457E+23 Inexact Rounded +ddbas826 tosci '1234567890123456789012345' -> 1.234567890123457E+24 Inexact Rounded +ddbas827 tosci '12345678901234567890123456' -> 1.234567890123457E+25 Inexact Rounded +ddbas828 tosci '123456789012345678901234567' -> 1.234567890123457E+26 Inexact Rounded +ddbas829 tosci '1234567890123456789012345678' -> 1.234567890123457E+27 Inexact Rounded + +-- subnormals and overflows +ddbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded +ddbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded +ddbas908 toSci '0.9e-999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas909 toSci '0.09e-999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded +ddbas911 toSci '10e-1000000000' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded +ddbas913 toSci '99e-9999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded +ddbas915 toSci '1111e-9999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas916 toSci '1111e-99999999999' -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded +-- negatives the same +ddbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded +ddbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded +ddbas920 toSci '-0.9e-999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas921 toSci '-0.09e-999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded +ddbas923 toSci '-10e-1000000000' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded +ddbas925 toSci '-99e-9999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded +ddbas927 toSci '-1111e-9999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas928 toSci '-1111e-99999999999' -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded + +-- overflow results at different rounding modes +rounding: ceiling +ddbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas931 toSci '-7e10000' -> -9.999999999999999E+384 Overflow Inexact Rounded +rounding: up +ddbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: down +ddbas934 toSci '7e10000' -> 9.999999999999999E+384 Overflow Inexact Rounded +ddbas935 toSci '-7e10000' -> -9.999999999999999E+384 Overflow Inexact Rounded +rounding: floor +ddbas936 toSci '7e10000' -> 9.999999999999999E+384 Overflow Inexact Rounded +ddbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_up +ddbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_even +ddbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_down +ddbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded +ddbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_even + +-- Now check 854/754r some subnormals and underflow to 0 +ddbem400 toSci 1.0000E-383 -> 1.0000E-383 +ddbem401 toSci 0.1E-394 -> 1E-395 Subnormal +ddbem402 toSci 0.1000E-394 -> 1.000E-395 Subnormal +ddbem403 toSci 0.0100E-394 -> 1.00E-396 Subnormal +ddbem404 toSci 0.0010E-394 -> 1.0E-397 Subnormal +ddbem405 toSci 0.0001E-394 -> 1E-398 Subnormal +ddbem406 toSci 0.00010E-394 -> 1E-398 Subnormal Rounded +ddbem407 toSci 0.00013E-394 -> 1E-398 Underflow Subnormal Inexact Rounded +ddbem408 toSci 0.00015E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem409 toSci 0.00017E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem410 toSci 0.00023E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem411 toSci 0.00025E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem412 toSci 0.00027E-394 -> 3E-398 Underflow Subnormal Inexact Rounded +ddbem413 toSci 0.000149E-394 -> 1E-398 Underflow Subnormal Inexact Rounded +ddbem414 toSci 0.000150E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem415 toSci 0.000151E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem416 toSci 0.000249E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem417 toSci 0.000250E-394 -> 2E-398 Underflow Subnormal Inexact Rounded +ddbem418 toSci 0.000251E-394 -> 3E-398 Underflow Subnormal Inexact Rounded +ddbem419 toSci 0.00009E-394 -> 1E-398 Underflow Subnormal Inexact Rounded +ddbem420 toSci 0.00005E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem421 toSci 0.00003E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem422 toSci 0.000009E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem423 toSci 0.000005E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem424 toSci 0.000003E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +ddbem425 toSci 0.001049E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded +ddbem426 toSci 0.001050E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded +ddbem427 toSci 0.001051E-394 -> 1.1E-397 Underflow Subnormal Inexact Rounded +ddbem428 toSci 0.001149E-394 -> 1.1E-397 Underflow Subnormal Inexact Rounded +ddbem429 toSci 0.001150E-394 -> 1.2E-397 Underflow Subnormal Inexact Rounded +ddbem430 toSci 0.001151E-394 -> 1.2E-397 Underflow Subnormal Inexact Rounded + +ddbem432 toSci 0.010049E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded +ddbem433 toSci 0.010050E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded +ddbem434 toSci 0.010051E-394 -> 1.01E-396 Underflow Subnormal Inexact Rounded +ddbem435 toSci 0.010149E-394 -> 1.01E-396 Underflow Subnormal Inexact Rounded +ddbem436 toSci 0.010150E-394 -> 1.02E-396 Underflow Subnormal Inexact Rounded +ddbem437 toSci 0.010151E-394 -> 1.02E-396 Underflow Subnormal Inexact Rounded + +ddbem440 toSci 0.10103E-394 -> 1.010E-395 Underflow Subnormal Inexact Rounded +ddbem441 toSci 0.10105E-394 -> 1.010E-395 Underflow Subnormal Inexact Rounded +ddbem442 toSci 0.10107E-394 -> 1.011E-395 Underflow Subnormal Inexact Rounded +ddbem443 toSci 0.10113E-394 -> 1.011E-395 Underflow Subnormal Inexact Rounded +ddbem444 toSci 0.10115E-394 -> 1.012E-395 Underflow Subnormal Inexact Rounded +ddbem445 toSci 0.10117E-394 -> 1.012E-395 Underflow Subnormal Inexact Rounded + +ddbem450 toSci 1.10730E-395 -> 1.107E-395 Underflow Subnormal Inexact Rounded +ddbem451 toSci 1.10750E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded +ddbem452 toSci 1.10770E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded +ddbem453 toSci 1.10830E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded +ddbem454 toSci 1.10850E-395 -> 1.108E-395 Underflow Subnormal Inexact Rounded +ddbem455 toSci 1.10870E-395 -> 1.109E-395 Underflow Subnormal Inexact Rounded + +-- make sure sign OK +ddbem456 toSci -0.10103E-394 -> -1.010E-395 Underflow Subnormal Inexact Rounded +ddbem457 toSci -0.10105E-394 -> -1.010E-395 Underflow Subnormal Inexact Rounded +ddbem458 toSci -0.10107E-394 -> -1.011E-395 Underflow Subnormal Inexact Rounded +ddbem459 toSci -0.10113E-394 -> -1.011E-395 Underflow Subnormal Inexact Rounded +ddbem460 toSci -0.10115E-394 -> -1.012E-395 Underflow Subnormal Inexact Rounded +ddbem461 toSci -0.10117E-394 -> -1.012E-395 Underflow Subnormal Inexact Rounded + +-- '999s' cases +ddbem464 toSci 999999E-395 -> 9.99999E-390 Subnormal +ddbem465 toSci 99999.0E-394 -> 9.99990E-390 Subnormal +ddbem466 toSci 99999.E-394 -> 9.9999E-390 Subnormal +ddbem467 toSci 9999.9E-394 -> 9.9999E-391 Subnormal +ddbem468 toSci 999.99E-394 -> 9.9999E-392 Subnormal +ddbem469 toSci 99.999E-394 -> 9.9999E-393 Subnormal +ddbem470 toSci 9.9999E-394 -> 9.9999E-394 Subnormal +ddbem471 toSci 0.99999E-394 -> 1.0000E-394 Underflow Subnormal Inexact Rounded +ddbem472 toSci 0.099999E-394 -> 1.000E-395 Underflow Subnormal Inexact Rounded +ddbem473 toSci 0.0099999E-394 -> 1.00E-396 Underflow Subnormal Inexact Rounded +ddbem474 toSci 0.00099999E-394 -> 1.0E-397 Underflow Subnormal Inexact Rounded +ddbem475 toSci 0.000099999E-394 -> 1E-398 Underflow Subnormal Inexact Rounded +ddbem476 toSci 0.0000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem477 toSci 0.00000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbem478 toSci 0.000000099999E-394 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- Exponents with insignificant leading zeros +ddbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded +ddbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded +ddbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded +ddbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded +ddbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded +ddbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded +ddbas1007 toSci 1e-999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1008 toSci 1e-0999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1009 toSci 1e-00999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1010 toSci 1e-000999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1011 toSci 1e-000000000000999999999 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddbas1012 toSci 1e-000000000001000000007 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- check for double-rounded subnormals +ddbas1041 toSci 1.1111111111152444E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow +ddbas1042 toSci 1.1111111111152445E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow +ddbas1043 toSci 1.1111111111152446E-384 -> 1.11111111111524E-384 Inexact Rounded Subnormal Underflow + +-- clamped large normals +ddbas1070 toSci 1E+369 -> 1E+369 +ddbas1071 toSci 1E+370 -> 1.0E+370 Clamped +ddbas1072 toSci 1E+378 -> 1.000000000E+378 Clamped +ddbas1073 toSci 1E+384 -> 1.000000000000000E+384 Clamped +ddbas1074 toSci 1E+385 -> Infinity Overflow Inexact Rounded + + +-- clamped zeros [see also clamp.decTest] +ddbas1075 toSci 0e+10000 -> 0E+369 Clamped +ddbas1076 toSci 0e-10000 -> 0E-398 Clamped +ddbas1077 toSci -0e+10000 -> -0E+369 Clamped +ddbas1078 toSci -0e-10000 -> -0E-398 Clamped + +-- extreme values from next-wider +ddbas1101 toSci -9.99999999999999999999999999999999E+6144 -> -Infinity Overflow Inexact Rounded +ddbas1102 toSci -1E-6143 -> -0E-398 Inexact Rounded Subnormal Underflow Clamped +ddbas1103 toSci -1E-6176 -> -0E-398 Inexact Rounded Subnormal Underflow Clamped +ddbas1104 toSci -0 -> -0 +ddbas1105 toSci +0 -> 0 +ddbas1106 toSci +1E-6176 -> 0E-398 Inexact Rounded Subnormal Underflow Clamped +ddbas1107 toSci +1E-6173 -> 0E-398 Inexact Rounded Subnormal Underflow Clamped +ddbas1108 toSci +9.99999999999999999999999999999999E+6144 -> Infinity Overflow Inexact Rounded + diff --git a/Lib/test/decimaltestdata/ddCanonical.decTest b/Lib/test/decimaltestdata/ddCanonical.decTest index b4f9e32c986..824de83aba7 100644 --- a/Lib/test/decimaltestdata/ddCanonical.decTest +++ b/Lib/test/decimaltestdata/ddCanonical.decTest @@ -1,357 +1,357 @@ ------------------------------------------------------------------------- --- ddCanonical.decTest -- test decDouble canonical results -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests that copy operations leave uncanonical operands --- unchanged, and vice versa --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Uncanonical declets are: abc, where: --- a=1,2,3 --- b=6,7,e,f --- c=e,f - --- assert some standard (canonical) values; this tests that FromString --- produces canonical results (many more in decimalNN) -ddcan001 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff -ddcan002 apply 0 -> #2238000000000000 -ddcan003 apply 1 -> #2238000000000001 -ddcan004 apply -1 -> #a238000000000001 -ddcan005 apply Infinity -> #7800000000000000 -ddcan006 apply -Infinity -> #f800000000000000 -ddcan007 apply -NaN -> #fc00000000000000 -ddcan008 apply -sNaN -> #fe00000000000000 -ddcan009 apply NaN999999999999999 -> #7c00ff3fcff3fcff -ddcan010 apply sNaN999999999999999 -> #7e00ff3fcff3fcff -decan011 apply 9999999999999999 -> #6e38ff3fcff3fcff -ddcan012 apply 7.50 -> #22300000000003d0 -ddcan013 apply 9.99 -> #22300000000000ff - --- Base tests for canonical encodings (individual operator --- propagation is tested later) - --- Finites: declets in coefficient -ddcan021 canonical #77fcff3fcff3fcff -> #77fcff3fcff3fcff -ddcan022 canonical #77fcff3fcff3fcff -> #77fcff3fcff3fcff -ddcan023 canonical #77ffff3fcff3fcff -> #77fcff3fcff3fcff -ddcan024 canonical #77ffff3fcff3fcff -> #77fcff3fcff3fcff -ddcan025 canonical #77fcffffcff3fcff -> #77fcff3fcff3fcff -ddcan026 canonical #77fcffffcff3fcff -> #77fcff3fcff3fcff -ddcan027 canonical #77fcff3ffff3fcff -> #77fcff3fcff3fcff -ddcan028 canonical #77fcff3ffff3fcff -> #77fcff3fcff3fcff -ddcan030 canonical #77fcff3fcffffcff -> #77fcff3fcff3fcff -ddcan031 canonical #77fcff3fcffffcff -> #77fcff3fcff3fcff -ddcan032 canonical #77fcff3fcff3ffff -> #77fcff3fcff3fcff -ddcan033 canonical #77fcff3fcff3ffff -> #77fcff3fcff3fcff -ddcan035 canonical #77fcff3fdff3fcff -> #77fcff3fcff3fcff -ddcan036 canonical #77fcff3feff3fcff -> #77fcff3fcff3fcff - --- NaN: declets in payload -ddcan100 canonical NaN999999999999999 -> #7c00ff3fcff3fcff -ddcan101 canonical #7c00ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan102 canonical #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan103 canonical #7c00ffffcff3fcff -> #7c00ff3fcff3fcff -ddcan104 canonical #7c00ff3ffff3fcff -> #7c00ff3fcff3fcff -ddcan105 canonical #7c00ff3fcffffcff -> #7c00ff3fcff3fcff -ddcan106 canonical #7c00ff3fcff3ffff -> #7c00ff3fcff3fcff -ddcan107 canonical #7c00ff3fcff3ffff -> #7c00ff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -ddcan110 canonical #7c00ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan112 canonical #7d00ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan113 canonical #7c80ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan114 canonical #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan115 canonical #7c20ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan116 canonical #7c10ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan117 canonical #7c08ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan118 canonical #7c04ff3fcff3fcff -> #7c00ff3fcff3fcff - --- sNaN: declets in payload -ddcan120 canonical sNaN999999999999999 -> #7e00ff3fcff3fcff -ddcan121 canonical #7e00ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan122 canonical #7e03ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan123 canonical #7e00ffffcff3fcff -> #7e00ff3fcff3fcff -ddcan124 canonical #7e00ff3ffff3fcff -> #7e00ff3fcff3fcff -ddcan125 canonical #7e00ff3fcffffcff -> #7e00ff3fcff3fcff -ddcan126 canonical #7e00ff3fcff3ffff -> #7e00ff3fcff3fcff -ddcan127 canonical #7e00ff3fcff3ffff -> #7e00ff3fcff3fcff --- sNaN: exponent continuation bits [excluding sNaN selector] -ddcan130 canonical #7e00ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan132 canonical #7f00ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan133 canonical #7e80ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan134 canonical #7e40ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan135 canonical #7e20ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan136 canonical #7e10ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan137 canonical #7e08ff3fcff3fcff -> #7e00ff3fcff3fcff -ddcan138 canonical #7e04ff3fcff3fcff -> #7e00ff3fcff3fcff - --- Inf: exponent continuation bits -ddcan140 canonical #7800000000000000 -> #7800000000000000 -ddcan141 canonical #7900000000000000 -> #7800000000000000 -ddcan142 canonical #7a00000000000000 -> #7800000000000000 -ddcan143 canonical #7880000000000000 -> #7800000000000000 -ddcan144 canonical #7840000000000000 -> #7800000000000000 -ddcan145 canonical #7820000000000000 -> #7800000000000000 -ddcan146 canonical #7810000000000000 -> #7800000000000000 -ddcan147 canonical #7808000000000000 -> #7800000000000000 -ddcan148 canonical #7804000000000000 -> #7800000000000000 - --- Inf: coefficient continuation bits (first, last, and a few others) -ddcan150 canonical #7800000000000000 -> #7800000000000000 -ddcan151 canonical #7802000000000000 -> #7800000000000000 -ddcan152 canonical #7800000000000001 -> #7800000000000000 -ddcan153 canonical #7801000000000000 -> #7800000000000000 -ddcan154 canonical #7800200000000000 -> #7800000000000000 -ddcan155 canonical #7800080000000000 -> #7800000000000000 -ddcan156 canonical #7800002000000000 -> #7800000000000000 -ddcan157 canonical #7800000400000000 -> #7800000000000000 -ddcan158 canonical #7800000040000000 -> #7800000000000000 -ddcan159 canonical #7800000008000000 -> #7800000000000000 -ddcan160 canonical #7800000000400000 -> #7800000000000000 -ddcan161 canonical #7800000000020000 -> #7800000000000000 -ddcan162 canonical #7800000000008000 -> #7800000000000000 -ddcan163 canonical #7800000000000200 -> #7800000000000000 -ddcan164 canonical #7800000000000040 -> #7800000000000000 -ddcan165 canonical #7800000000000008 -> #7800000000000000 - - --- Now the operators -- trying to check paths that might fail to --- canonicalize propagated operands - ------ Add: --- Finites: neutral 0 -ddcan202 add 0E+384 #77ffff3fcff3fcff -> #77fcff3fcff3fcff -ddcan203 add #77fcffffcff3fcff 0E+384 -> #77fcff3fcff3fcff --- tiny zero -ddcan204 add 0E-398 #77ffff3fcff3fcff -> #77fcff3fcff3fcff Rounded -ddcan205 add #77fcffffcff3fcff 0E-398 -> #77fcff3fcff3fcff Rounded --- tiny non zero -ddcan206 add -1E-398 #77ffff3fcff3fcff -> #77fcff3fcff3fcff Inexact Rounded -ddcan207 add #77ffff3fcff3fcff -1E-398 -> #77fcff3fcff3fcff Inexact Rounded --- NaN: declets in payload -ddcan211 add 0 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan212 add #7c03ff3fcff3fcff 0 -> #7c00ff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -ddcan213 add 0 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan214 add #7c40ff3fcff3fcff 0 -> #7c00ff3fcff3fcff --- sNaN: declets in payload -ddcan215 add 0 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan216 add #7e00ffffcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -ddcan217 add 0 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan218 add #7e80ff3fcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -ddcan220 add 0 #7880000000000000 -> #7800000000000000 -ddcan221 add #7880000000000000 0 -> #7800000000000000 --- Inf: coefficient continuation bits -ddcan222 add 0 #7802000000000000 -> #7800000000000000 -ddcan223 add #7802000000000000 0 -> #7800000000000000 -ddcan224 add 0 #7800000000000001 -> #7800000000000000 -ddcan225 add #7800000000000001 0 -> #7800000000000000 -ddcan226 add 0 #7800002000000000 -> #7800000000000000 -ddcan227 add #7800002000000000 0 -> #7800000000000000 - ------ Class: [does not return encoded] - ------ Compare: -ddcan231 compare -Inf 1 -> #a238000000000001 -ddcan232 compare -Inf -Inf -> #2238000000000000 -ddcan233 compare 1 -Inf -> #2238000000000001 -ddcan234 compare #7c00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff -ddcan235 compare #7e00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation - ------ CompareSig: -ddcan241 comparesig -Inf 1 -> #a238000000000001 -ddcan242 comparesig -Inf -Inf -> #2238000000000000 -ddcan243 comparesig 1 -Inf -> #2238000000000001 -ddcan244 comparesig #7c00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation -ddcan245 comparesig #7e00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation - ------ Copy: [does not usually canonicalize] --- finites -ddcan250 copy #77ffff3fcff3fcff -> #77ffff3fcff3fcff -ddcan251 copy #77fcff3fdff3fcff -> #77fcff3fdff3fcff --- NaNs -ddcan252 copy #7c03ff3fcff3fcff -> #7c03ff3fcff3fcff -ddcan253 copy #7c00ff3fcff3ffff -> #7c00ff3fcff3ffff -ddcan254 copy #7d00ff3fcff3fcff -> #7d00ff3fcff3fcff -ddcan255 copy #7c04ff3fcff3fcff -> #7c04ff3fcff3fcff --- sNaN -ddcan256 copy #7e00ff3fcffffcff -> #7e00ff3fcffffcff -ddcan257 copy #7e40ff3fcff3fcff -> #7e40ff3fcff3fcff --- Inf -ddcan258 copy #7a00000000000000 -> #7a00000000000000 -ddcan259 copy #7800200000000000 -> #7800200000000000 - ------ CopyAbs: [does not usually canonicalize] --- finites -ddcan260 copyabs #f7ffff3fcff3fcff -> #77ffff3fcff3fcff -ddcan261 copyabs #f7fcff3fdff3fcff -> #77fcff3fdff3fcff --- NaNs -ddcan262 copyabs #fc03ff3fcff3fcff -> #7c03ff3fcff3fcff -ddcan263 copyabs #fc00ff3fcff3ffff -> #7c00ff3fcff3ffff -ddcan264 copyabs #fd00ff3fcff3fcff -> #7d00ff3fcff3fcff -ddcan265 copyabs #fc04ff3fcff3fcff -> #7c04ff3fcff3fcff --- sNaN -ddcan266 copyabs #fe00ff3fcffffcff -> #7e00ff3fcffffcff -ddcan267 copyabs #fe40ff3fcff3fcff -> #7e40ff3fcff3fcff --- Inf -ddcan268 copyabs #fa00000000000000 -> #7a00000000000000 -ddcan269 copyabs #f800200000000000 -> #7800200000000000 - ------ CopyNegate: [does not usually canonicalize] --- finites -ddcan270 copynegate #77ffff3fcff3fcff -> #f7ffff3fcff3fcff -ddcan271 copynegate #77fcff3fdff3fcff -> #f7fcff3fdff3fcff --- NaNs -ddcan272 copynegate #7c03ff3fcff3fcff -> #fc03ff3fcff3fcff -ddcan273 copynegate #7c00ff3fcff3ffff -> #fc00ff3fcff3ffff -ddcan274 copynegate #7d00ff3fcff3fcff -> #fd00ff3fcff3fcff -ddcan275 copynegate #7c04ff3fcff3fcff -> #fc04ff3fcff3fcff --- sNaN -ddcan276 copynegate #7e00ff3fcffffcff -> #fe00ff3fcffffcff -ddcan277 copynegate #7e40ff3fcff3fcff -> #fe40ff3fcff3fcff --- Inf -ddcan278 copynegate #7a00000000000000 -> #fa00000000000000 -ddcan279 copynegate #7800200000000000 -> #f800200000000000 - ------ CopySign: [does not usually canonicalize] --- finites -ddcan280 copysign #77ffff3fcff3fcff -1 -> #f7ffff3fcff3fcff -ddcan281 copysign #77fcff3fdff3fcff 1 -> #77fcff3fdff3fcff --- NaNs -ddcan282 copysign #7c03ff3fcff3fcff -1 -> #fc03ff3fcff3fcff -ddcan283 copysign #7c00ff3fcff3ffff 1 -> #7c00ff3fcff3ffff -ddcan284 copysign #7d00ff3fcff3fcff -1 -> #fd00ff3fcff3fcff -ddcan285 copysign #7c04ff3fcff3fcff 1 -> #7c04ff3fcff3fcff --- sNaN -ddcan286 copysign #7e00ff3fcffffcff -1 -> #fe00ff3fcffffcff -ddcan287 copysign #7e40ff3fcff3fcff 1 -> #7e40ff3fcff3fcff --- Inf -ddcan288 copysign #7a00000000000000 -1 -> #fa00000000000000 -ddcan289 copysign #7800200000000000 1 -> #7800200000000000 - ------ Multiply: --- Finites: neutral 0 -ddcan302 multiply 1 #77ffff3fcff3fcff -> #77fcff3fcff3fcff -ddcan303 multiply #77fcffffcff3fcff 1 -> #77fcff3fcff3fcff --- negative -ddcan306 multiply -1 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff -ddcan307 multiply #77fcffffcff3fcff -1 -> #f7fcff3fcff3fcff --- NaN: declets in payload -ddcan311 multiply 1 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan312 multiply #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -ddcan313 multiply 1 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan314 multiply #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff --- sNaN: declets in payload -ddcan315 multiply 1 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan316 multiply #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -ddcan317 multiply 1 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan318 multiply #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -ddcan320 multiply 1 #7880000000000000 -> #7800000000000000 -ddcan321 multiply #7880000000000000 1 -> #7800000000000000 --- Inf: coefficient continuation bits -ddcan322 multiply 1 #7802000000000000 -> #7800000000000000 -ddcan323 multiply #7802000000000000 1 -> #7800000000000000 -ddcan324 multiply 1 #7800000000000001 -> #7800000000000000 -ddcan325 multiply #7800000000000001 1 -> #7800000000000000 -ddcan326 multiply 1 #7800002000000000 -> #7800000000000000 -ddcan327 multiply #7800002000000000 1 -> #7800000000000000 - ------ Quantize: -ddcan401 quantize #6e38ff3ffff3fcff 1 -> #6e38ff3fcff3fcff -ddcan402 quantize #6e38ff3fcff3fdff 0 -> #6e38ff3fcff3fcff -ddcan403 quantize #7880000000000000 Inf -> #7800000000000000 -ddcan404 quantize #7802000000000000 -Inf -> #7800000000000000 -ddcan410 quantize #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff -ddcan411 quantize #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff -ddcan412 quantize #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff -ddcan413 quantize #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff -ddcan414 quantize #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation -ddcan415 quantize #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation -ddcan416 quantize #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation -ddcan417 quantize #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation - ------ Subtract: --- Finites: neutral 0 -ddcan502 subtract 0E+384 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff -ddcan503 subtract #77fcffffcff3fcff 0E+384 -> #77fcff3fcff3fcff --- tiny zero -ddcan504 subtract 0E-398 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff Rounded -ddcan505 subtract #77fcffffcff3fcff 0E-398 -> #77fcff3fcff3fcff Rounded --- tiny non zero -ddcan506 subtract -1E-398 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff Inexact Rounded -ddcan507 subtract #77ffff3fcff3fcff -1E-398 -> #77fcff3fcff3fcff Inexact Rounded --- NaN: declets in payload -ddcan511 subtract 0 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan512 subtract #7c03ff3fcff3fcff 0 -> #7c00ff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -ddcan513 subtract 0 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan514 subtract #7c40ff3fcff3fcff 0 -> #7c00ff3fcff3fcff --- sNaN: declets in payload -ddcan515 subtract 0 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan516 subtract #7e00ffffcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -ddcan517 subtract 0 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan518 subtract #7e80ff3fcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -ddcan520 subtract 0 #7880000000000000 -> #f800000000000000 -ddcan521 subtract #7880000000000000 0 -> #7800000000000000 --- Inf: coefficient continuation bits -ddcan522 subtract 0 #7802000000000000 -> #f800000000000000 -ddcan523 subtract #7802000000000000 0 -> #7800000000000000 -ddcan524 subtract 0 #7800000000000001 -> #f800000000000000 -ddcan525 subtract #7800000000000001 0 -> #7800000000000000 -ddcan526 subtract 0 #7800002000000000 -> #f800000000000000 -ddcan527 subtract #7800002000000000 0 -> #7800000000000000 - ------ ToIntegral: -ddcan601 tointegralx #6e38ff3ffff3fcff -> #6e38ff3fcff3fcff -ddcan602 tointegralx #6e38ff3fcff3fdff -> #6e38ff3fcff3fcff -ddcan603 tointegralx #7880000000000000 -> #7800000000000000 -ddcan604 tointegralx #7802000000000000 -> #7800000000000000 -ddcan610 tointegralx #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan611 tointegralx #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan612 tointegralx #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan613 tointegralx #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff -ddcan614 tointegralx #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan615 tointegralx #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan616 tointegralx #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation -ddcan617 tointegralx #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation --- uncanonical 3999, 39.99, 3.99, 0.399, and negatives -ddcan618 tointegralx #2238000000000fff -> #2238000000000cff -ddcan619 tointegralx #2230000000000fff -> #2238000000000040 Inexact Rounded -ddcan620 tointegralx #222c000000000fff -> #2238000000000004 Inexact Rounded -ddcan621 tointegralx #2228000000000fff -> #2238000000000000 Inexact Rounded -ddcan622 tointegralx #a238000000000fff -> #a238000000000cff -ddcan623 tointegralx #a230000000000fff -> #a238000000000040 Inexact Rounded -ddcan624 tointegralx #a22c000000000fff -> #a238000000000004 Inexact Rounded -ddcan625 tointegralx #a228000000000fff -> #a238000000000000 Inexact Rounded - - - +------------------------------------------------------------------------ +-- ddCanonical.decTest -- test decDouble canonical results -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests that copy operations leave uncanonical operands +-- unchanged, and vice versa +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Uncanonical declets are: abc, where: +-- a=1,2,3 +-- b=6,7,e,f +-- c=e,f + +-- assert some standard (canonical) values; this tests that FromString +-- produces canonical results (many more in decimalNN) +ddcan001 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff +ddcan002 apply 0 -> #2238000000000000 +ddcan003 apply 1 -> #2238000000000001 +ddcan004 apply -1 -> #a238000000000001 +ddcan005 apply Infinity -> #7800000000000000 +ddcan006 apply -Infinity -> #f800000000000000 +ddcan007 apply -NaN -> #fc00000000000000 +ddcan008 apply -sNaN -> #fe00000000000000 +ddcan009 apply NaN999999999999999 -> #7c00ff3fcff3fcff +ddcan010 apply sNaN999999999999999 -> #7e00ff3fcff3fcff +decan011 apply 9999999999999999 -> #6e38ff3fcff3fcff +ddcan012 apply 7.50 -> #22300000000003d0 +ddcan013 apply 9.99 -> #22300000000000ff + +-- Base tests for canonical encodings (individual operator +-- propagation is tested later) + +-- Finites: declets in coefficient +ddcan021 canonical #77fcff3fcff3fcff -> #77fcff3fcff3fcff +ddcan022 canonical #77fcff3fcff3fcff -> #77fcff3fcff3fcff +ddcan023 canonical #77ffff3fcff3fcff -> #77fcff3fcff3fcff +ddcan024 canonical #77ffff3fcff3fcff -> #77fcff3fcff3fcff +ddcan025 canonical #77fcffffcff3fcff -> #77fcff3fcff3fcff +ddcan026 canonical #77fcffffcff3fcff -> #77fcff3fcff3fcff +ddcan027 canonical #77fcff3ffff3fcff -> #77fcff3fcff3fcff +ddcan028 canonical #77fcff3ffff3fcff -> #77fcff3fcff3fcff +ddcan030 canonical #77fcff3fcffffcff -> #77fcff3fcff3fcff +ddcan031 canonical #77fcff3fcffffcff -> #77fcff3fcff3fcff +ddcan032 canonical #77fcff3fcff3ffff -> #77fcff3fcff3fcff +ddcan033 canonical #77fcff3fcff3ffff -> #77fcff3fcff3fcff +ddcan035 canonical #77fcff3fdff3fcff -> #77fcff3fcff3fcff +ddcan036 canonical #77fcff3feff3fcff -> #77fcff3fcff3fcff + +-- NaN: declets in payload +ddcan100 canonical NaN999999999999999 -> #7c00ff3fcff3fcff +ddcan101 canonical #7c00ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan102 canonical #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan103 canonical #7c00ffffcff3fcff -> #7c00ff3fcff3fcff +ddcan104 canonical #7c00ff3ffff3fcff -> #7c00ff3fcff3fcff +ddcan105 canonical #7c00ff3fcffffcff -> #7c00ff3fcff3fcff +ddcan106 canonical #7c00ff3fcff3ffff -> #7c00ff3fcff3fcff +ddcan107 canonical #7c00ff3fcff3ffff -> #7c00ff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +ddcan110 canonical #7c00ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan112 canonical #7d00ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan113 canonical #7c80ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan114 canonical #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan115 canonical #7c20ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan116 canonical #7c10ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan117 canonical #7c08ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan118 canonical #7c04ff3fcff3fcff -> #7c00ff3fcff3fcff + +-- sNaN: declets in payload +ddcan120 canonical sNaN999999999999999 -> #7e00ff3fcff3fcff +ddcan121 canonical #7e00ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan122 canonical #7e03ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan123 canonical #7e00ffffcff3fcff -> #7e00ff3fcff3fcff +ddcan124 canonical #7e00ff3ffff3fcff -> #7e00ff3fcff3fcff +ddcan125 canonical #7e00ff3fcffffcff -> #7e00ff3fcff3fcff +ddcan126 canonical #7e00ff3fcff3ffff -> #7e00ff3fcff3fcff +ddcan127 canonical #7e00ff3fcff3ffff -> #7e00ff3fcff3fcff +-- sNaN: exponent continuation bits [excluding sNaN selector] +ddcan130 canonical #7e00ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan132 canonical #7f00ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan133 canonical #7e80ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan134 canonical #7e40ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan135 canonical #7e20ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan136 canonical #7e10ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan137 canonical #7e08ff3fcff3fcff -> #7e00ff3fcff3fcff +ddcan138 canonical #7e04ff3fcff3fcff -> #7e00ff3fcff3fcff + +-- Inf: exponent continuation bits +ddcan140 canonical #7800000000000000 -> #7800000000000000 +ddcan141 canonical #7900000000000000 -> #7800000000000000 +ddcan142 canonical #7a00000000000000 -> #7800000000000000 +ddcan143 canonical #7880000000000000 -> #7800000000000000 +ddcan144 canonical #7840000000000000 -> #7800000000000000 +ddcan145 canonical #7820000000000000 -> #7800000000000000 +ddcan146 canonical #7810000000000000 -> #7800000000000000 +ddcan147 canonical #7808000000000000 -> #7800000000000000 +ddcan148 canonical #7804000000000000 -> #7800000000000000 + +-- Inf: coefficient continuation bits (first, last, and a few others) +ddcan150 canonical #7800000000000000 -> #7800000000000000 +ddcan151 canonical #7802000000000000 -> #7800000000000000 +ddcan152 canonical #7800000000000001 -> #7800000000000000 +ddcan153 canonical #7801000000000000 -> #7800000000000000 +ddcan154 canonical #7800200000000000 -> #7800000000000000 +ddcan155 canonical #7800080000000000 -> #7800000000000000 +ddcan156 canonical #7800002000000000 -> #7800000000000000 +ddcan157 canonical #7800000400000000 -> #7800000000000000 +ddcan158 canonical #7800000040000000 -> #7800000000000000 +ddcan159 canonical #7800000008000000 -> #7800000000000000 +ddcan160 canonical #7800000000400000 -> #7800000000000000 +ddcan161 canonical #7800000000020000 -> #7800000000000000 +ddcan162 canonical #7800000000008000 -> #7800000000000000 +ddcan163 canonical #7800000000000200 -> #7800000000000000 +ddcan164 canonical #7800000000000040 -> #7800000000000000 +ddcan165 canonical #7800000000000008 -> #7800000000000000 + + +-- Now the operators -- trying to check paths that might fail to +-- canonicalize propagated operands + +----- Add: +-- Finites: neutral 0 +ddcan202 add 0E+384 #77ffff3fcff3fcff -> #77fcff3fcff3fcff +ddcan203 add #77fcffffcff3fcff 0E+384 -> #77fcff3fcff3fcff +-- tiny zero +ddcan204 add 0E-398 #77ffff3fcff3fcff -> #77fcff3fcff3fcff Rounded +ddcan205 add #77fcffffcff3fcff 0E-398 -> #77fcff3fcff3fcff Rounded +-- tiny non zero +ddcan206 add -1E-398 #77ffff3fcff3fcff -> #77fcff3fcff3fcff Inexact Rounded +ddcan207 add #77ffff3fcff3fcff -1E-398 -> #77fcff3fcff3fcff Inexact Rounded +-- NaN: declets in payload +ddcan211 add 0 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan212 add #7c03ff3fcff3fcff 0 -> #7c00ff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +ddcan213 add 0 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan214 add #7c40ff3fcff3fcff 0 -> #7c00ff3fcff3fcff +-- sNaN: declets in payload +ddcan215 add 0 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan216 add #7e00ffffcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +ddcan217 add 0 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan218 add #7e80ff3fcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +ddcan220 add 0 #7880000000000000 -> #7800000000000000 +ddcan221 add #7880000000000000 0 -> #7800000000000000 +-- Inf: coefficient continuation bits +ddcan222 add 0 #7802000000000000 -> #7800000000000000 +ddcan223 add #7802000000000000 0 -> #7800000000000000 +ddcan224 add 0 #7800000000000001 -> #7800000000000000 +ddcan225 add #7800000000000001 0 -> #7800000000000000 +ddcan226 add 0 #7800002000000000 -> #7800000000000000 +ddcan227 add #7800002000000000 0 -> #7800000000000000 + +----- Class: [does not return encoded] + +----- Compare: +ddcan231 compare -Inf 1 -> #a238000000000001 +ddcan232 compare -Inf -Inf -> #2238000000000000 +ddcan233 compare 1 -Inf -> #2238000000000001 +ddcan234 compare #7c00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff +ddcan235 compare #7e00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation + +----- CompareSig: +ddcan241 comparesig -Inf 1 -> #a238000000000001 +ddcan242 comparesig -Inf -Inf -> #2238000000000000 +ddcan243 comparesig 1 -Inf -> #2238000000000001 +ddcan244 comparesig #7c00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation +ddcan245 comparesig #7e00ff3ffff3fcff -1000 -> #7c00ff3fcff3fcff Invalid_operation + +----- Copy: [does not usually canonicalize] +-- finites +ddcan250 copy #77ffff3fcff3fcff -> #77ffff3fcff3fcff +ddcan251 copy #77fcff3fdff3fcff -> #77fcff3fdff3fcff +-- NaNs +ddcan252 copy #7c03ff3fcff3fcff -> #7c03ff3fcff3fcff +ddcan253 copy #7c00ff3fcff3ffff -> #7c00ff3fcff3ffff +ddcan254 copy #7d00ff3fcff3fcff -> #7d00ff3fcff3fcff +ddcan255 copy #7c04ff3fcff3fcff -> #7c04ff3fcff3fcff +-- sNaN +ddcan256 copy #7e00ff3fcffffcff -> #7e00ff3fcffffcff +ddcan257 copy #7e40ff3fcff3fcff -> #7e40ff3fcff3fcff +-- Inf +ddcan258 copy #7a00000000000000 -> #7a00000000000000 +ddcan259 copy #7800200000000000 -> #7800200000000000 + +----- CopyAbs: [does not usually canonicalize] +-- finites +ddcan260 copyabs #f7ffff3fcff3fcff -> #77ffff3fcff3fcff +ddcan261 copyabs #f7fcff3fdff3fcff -> #77fcff3fdff3fcff +-- NaNs +ddcan262 copyabs #fc03ff3fcff3fcff -> #7c03ff3fcff3fcff +ddcan263 copyabs #fc00ff3fcff3ffff -> #7c00ff3fcff3ffff +ddcan264 copyabs #fd00ff3fcff3fcff -> #7d00ff3fcff3fcff +ddcan265 copyabs #fc04ff3fcff3fcff -> #7c04ff3fcff3fcff +-- sNaN +ddcan266 copyabs #fe00ff3fcffffcff -> #7e00ff3fcffffcff +ddcan267 copyabs #fe40ff3fcff3fcff -> #7e40ff3fcff3fcff +-- Inf +ddcan268 copyabs #fa00000000000000 -> #7a00000000000000 +ddcan269 copyabs #f800200000000000 -> #7800200000000000 + +----- CopyNegate: [does not usually canonicalize] +-- finites +ddcan270 copynegate #77ffff3fcff3fcff -> #f7ffff3fcff3fcff +ddcan271 copynegate #77fcff3fdff3fcff -> #f7fcff3fdff3fcff +-- NaNs +ddcan272 copynegate #7c03ff3fcff3fcff -> #fc03ff3fcff3fcff +ddcan273 copynegate #7c00ff3fcff3ffff -> #fc00ff3fcff3ffff +ddcan274 copynegate #7d00ff3fcff3fcff -> #fd00ff3fcff3fcff +ddcan275 copynegate #7c04ff3fcff3fcff -> #fc04ff3fcff3fcff +-- sNaN +ddcan276 copynegate #7e00ff3fcffffcff -> #fe00ff3fcffffcff +ddcan277 copynegate #7e40ff3fcff3fcff -> #fe40ff3fcff3fcff +-- Inf +ddcan278 copynegate #7a00000000000000 -> #fa00000000000000 +ddcan279 copynegate #7800200000000000 -> #f800200000000000 + +----- CopySign: [does not usually canonicalize] +-- finites +ddcan280 copysign #77ffff3fcff3fcff -1 -> #f7ffff3fcff3fcff +ddcan281 copysign #77fcff3fdff3fcff 1 -> #77fcff3fdff3fcff +-- NaNs +ddcan282 copysign #7c03ff3fcff3fcff -1 -> #fc03ff3fcff3fcff +ddcan283 copysign #7c00ff3fcff3ffff 1 -> #7c00ff3fcff3ffff +ddcan284 copysign #7d00ff3fcff3fcff -1 -> #fd00ff3fcff3fcff +ddcan285 copysign #7c04ff3fcff3fcff 1 -> #7c04ff3fcff3fcff +-- sNaN +ddcan286 copysign #7e00ff3fcffffcff -1 -> #fe00ff3fcffffcff +ddcan287 copysign #7e40ff3fcff3fcff 1 -> #7e40ff3fcff3fcff +-- Inf +ddcan288 copysign #7a00000000000000 -1 -> #fa00000000000000 +ddcan289 copysign #7800200000000000 1 -> #7800200000000000 + +----- Multiply: +-- Finites: neutral 0 +ddcan302 multiply 1 #77ffff3fcff3fcff -> #77fcff3fcff3fcff +ddcan303 multiply #77fcffffcff3fcff 1 -> #77fcff3fcff3fcff +-- negative +ddcan306 multiply -1 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff +ddcan307 multiply #77fcffffcff3fcff -1 -> #f7fcff3fcff3fcff +-- NaN: declets in payload +ddcan311 multiply 1 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan312 multiply #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +ddcan313 multiply 1 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan314 multiply #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +-- sNaN: declets in payload +ddcan315 multiply 1 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan316 multiply #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +ddcan317 multiply 1 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan318 multiply #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +ddcan320 multiply 1 #7880000000000000 -> #7800000000000000 +ddcan321 multiply #7880000000000000 1 -> #7800000000000000 +-- Inf: coefficient continuation bits +ddcan322 multiply 1 #7802000000000000 -> #7800000000000000 +ddcan323 multiply #7802000000000000 1 -> #7800000000000000 +ddcan324 multiply 1 #7800000000000001 -> #7800000000000000 +ddcan325 multiply #7800000000000001 1 -> #7800000000000000 +ddcan326 multiply 1 #7800002000000000 -> #7800000000000000 +ddcan327 multiply #7800002000000000 1 -> #7800000000000000 + +----- Quantize: +ddcan401 quantize #6e38ff3ffff3fcff 1 -> #6e38ff3fcff3fcff +ddcan402 quantize #6e38ff3fcff3fdff 0 -> #6e38ff3fcff3fcff +ddcan403 quantize #7880000000000000 Inf -> #7800000000000000 +ddcan404 quantize #7802000000000000 -Inf -> #7800000000000000 +ddcan410 quantize #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +ddcan411 quantize #7c03ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +ddcan412 quantize #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +ddcan413 quantize #7c40ff3fcff3fcff 1 -> #7c00ff3fcff3fcff +ddcan414 quantize #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +ddcan415 quantize #7e00ffffcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +ddcan416 quantize #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation +ddcan417 quantize #7e80ff3fcff3fcff 1 -> #7c00ff3fcff3fcff Invalid_operation + +----- Subtract: +-- Finites: neutral 0 +ddcan502 subtract 0E+384 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff +ddcan503 subtract #77fcffffcff3fcff 0E+384 -> #77fcff3fcff3fcff +-- tiny zero +ddcan504 subtract 0E-398 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff Rounded +ddcan505 subtract #77fcffffcff3fcff 0E-398 -> #77fcff3fcff3fcff Rounded +-- tiny non zero +ddcan506 subtract -1E-398 #77ffff3fcff3fcff -> #f7fcff3fcff3fcff Inexact Rounded +ddcan507 subtract #77ffff3fcff3fcff -1E-398 -> #77fcff3fcff3fcff Inexact Rounded +-- NaN: declets in payload +ddcan511 subtract 0 #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan512 subtract #7c03ff3fcff3fcff 0 -> #7c00ff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +ddcan513 subtract 0 #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan514 subtract #7c40ff3fcff3fcff 0 -> #7c00ff3fcff3fcff +-- sNaN: declets in payload +ddcan515 subtract 0 #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan516 subtract #7e00ffffcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +ddcan517 subtract 0 #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan518 subtract #7e80ff3fcff3fcff 0 -> #7c00ff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +ddcan520 subtract 0 #7880000000000000 -> #f800000000000000 +ddcan521 subtract #7880000000000000 0 -> #7800000000000000 +-- Inf: coefficient continuation bits +ddcan522 subtract 0 #7802000000000000 -> #f800000000000000 +ddcan523 subtract #7802000000000000 0 -> #7800000000000000 +ddcan524 subtract 0 #7800000000000001 -> #f800000000000000 +ddcan525 subtract #7800000000000001 0 -> #7800000000000000 +ddcan526 subtract 0 #7800002000000000 -> #f800000000000000 +ddcan527 subtract #7800002000000000 0 -> #7800000000000000 + +----- ToIntegral: +ddcan601 tointegralx #6e38ff3ffff3fcff -> #6e38ff3fcff3fcff +ddcan602 tointegralx #6e38ff3fcff3fdff -> #6e38ff3fcff3fcff +ddcan603 tointegralx #7880000000000000 -> #7800000000000000 +ddcan604 tointegralx #7802000000000000 -> #7800000000000000 +ddcan610 tointegralx #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan611 tointegralx #7c03ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan612 tointegralx #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan613 tointegralx #7c40ff3fcff3fcff -> #7c00ff3fcff3fcff +ddcan614 tointegralx #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan615 tointegralx #7e00ffffcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan616 tointegralx #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +ddcan617 tointegralx #7e80ff3fcff3fcff -> #7c00ff3fcff3fcff Invalid_operation +-- uncanonical 3999, 39.99, 3.99, 0.399, and negatives +ddcan618 tointegralx #2238000000000fff -> #2238000000000cff +ddcan619 tointegralx #2230000000000fff -> #2238000000000040 Inexact Rounded +ddcan620 tointegralx #222c000000000fff -> #2238000000000004 Inexact Rounded +ddcan621 tointegralx #2228000000000fff -> #2238000000000000 Inexact Rounded +ddcan622 tointegralx #a238000000000fff -> #a238000000000cff +ddcan623 tointegralx #a230000000000fff -> #a238000000000040 Inexact Rounded +ddcan624 tointegralx #a22c000000000fff -> #a238000000000004 Inexact Rounded +ddcan625 tointegralx #a228000000000fff -> #a238000000000000 Inexact Rounded + + + diff --git a/Lib/test/decimaltestdata/ddClass.decTest b/Lib/test/decimaltestdata/ddClass.decTest index bb34c42d4a6..a1d233b86d6 100644 --- a/Lib/test/decimaltestdata/ddClass.decTest +++ b/Lib/test/decimaltestdata/ddClass.decTest @@ -1,76 +1,76 @@ ------------------------------------------------------------------------- --- ddClass.decTest -- decDouble Class operations -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- [New 2006.11.27] -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddcla001 class 0 -> +Zero -ddcla002 class 0.00 -> +Zero -ddcla003 class 0E+5 -> +Zero -ddcla004 class 1E-396 -> +Subnormal -ddcla005 class 0.1E-383 -> +Subnormal -ddcla006 class 0.999999999999999E-383 -> +Subnormal -ddcla007 class 1.000000000000000E-383 -> +Normal -ddcla008 class 1E-383 -> +Normal -ddcla009 class 1E-100 -> +Normal -ddcla010 class 1E-10 -> +Normal -ddcla012 class 1E-1 -> +Normal -ddcla013 class 1 -> +Normal -ddcla014 class 2.50 -> +Normal -ddcla015 class 100.100 -> +Normal -ddcla016 class 1E+30 -> +Normal -ddcla017 class 1E+384 -> +Normal -ddcla018 class 9.999999999999999E+384 -> +Normal -ddcla019 class Inf -> +Infinity - -ddcla021 class -0 -> -Zero -ddcla022 class -0.00 -> -Zero -ddcla023 class -0E+5 -> -Zero -ddcla024 class -1E-396 -> -Subnormal -ddcla025 class -0.1E-383 -> -Subnormal -ddcla026 class -0.999999999999999E-383 -> -Subnormal -ddcla027 class -1.000000000000000E-383 -> -Normal -ddcla028 class -1E-383 -> -Normal -ddcla029 class -1E-100 -> -Normal -ddcla030 class -1E-10 -> -Normal -ddcla032 class -1E-1 -> -Normal -ddcla033 class -1 -> -Normal -ddcla034 class -2.50 -> -Normal -ddcla035 class -100.100 -> -Normal -ddcla036 class -1E+30 -> -Normal -ddcla037 class -1E+384 -> -Normal -ddcla038 class -9.999999999999999E+384 -> -Normal -ddcla039 class -Inf -> -Infinity - -ddcla041 class NaN -> NaN -ddcla042 class -NaN -> NaN -ddcla043 class +NaN12345 -> NaN -ddcla044 class sNaN -> sNaN -ddcla045 class -sNaN -> sNaN -ddcla046 class +sNaN12345 -> sNaN - - - +------------------------------------------------------------------------ +-- ddClass.decTest -- decDouble Class operations -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- [New 2006.11.27] +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddcla001 class 0 -> +Zero +ddcla002 class 0.00 -> +Zero +ddcla003 class 0E+5 -> +Zero +ddcla004 class 1E-396 -> +Subnormal +ddcla005 class 0.1E-383 -> +Subnormal +ddcla006 class 0.999999999999999E-383 -> +Subnormal +ddcla007 class 1.000000000000000E-383 -> +Normal +ddcla008 class 1E-383 -> +Normal +ddcla009 class 1E-100 -> +Normal +ddcla010 class 1E-10 -> +Normal +ddcla012 class 1E-1 -> +Normal +ddcla013 class 1 -> +Normal +ddcla014 class 2.50 -> +Normal +ddcla015 class 100.100 -> +Normal +ddcla016 class 1E+30 -> +Normal +ddcla017 class 1E+384 -> +Normal +ddcla018 class 9.999999999999999E+384 -> +Normal +ddcla019 class Inf -> +Infinity + +ddcla021 class -0 -> -Zero +ddcla022 class -0.00 -> -Zero +ddcla023 class -0E+5 -> -Zero +ddcla024 class -1E-396 -> -Subnormal +ddcla025 class -0.1E-383 -> -Subnormal +ddcla026 class -0.999999999999999E-383 -> -Subnormal +ddcla027 class -1.000000000000000E-383 -> -Normal +ddcla028 class -1E-383 -> -Normal +ddcla029 class -1E-100 -> -Normal +ddcla030 class -1E-10 -> -Normal +ddcla032 class -1E-1 -> -Normal +ddcla033 class -1 -> -Normal +ddcla034 class -2.50 -> -Normal +ddcla035 class -100.100 -> -Normal +ddcla036 class -1E+30 -> -Normal +ddcla037 class -1E+384 -> -Normal +ddcla038 class -9.999999999999999E+384 -> -Normal +ddcla039 class -Inf -> -Infinity + +ddcla041 class NaN -> NaN +ddcla042 class -NaN -> NaN +ddcla043 class +NaN12345 -> NaN +ddcla044 class sNaN -> sNaN +ddcla045 class -sNaN -> sNaN +ddcla046 class +sNaN12345 -> sNaN + + + diff --git a/Lib/test/decimaltestdata/ddCompare.decTest b/Lib/test/decimaltestdata/ddCompare.decTest index 6debfc7a138..a20ae210cc9 100644 --- a/Lib/test/decimaltestdata/ddCompare.decTest +++ b/Lib/test/decimaltestdata/ddCompare.decTest @@ -1,744 +1,744 @@ ------------------------------------------------------------------------- --- ddCompare.decTest -- decDouble comparison that allows quiet NaNs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddcom001 compare -2 -2 -> 0 -ddcom002 compare -2 -1 -> -1 -ddcom003 compare -2 0 -> -1 -ddcom004 compare -2 1 -> -1 -ddcom005 compare -2 2 -> -1 -ddcom006 compare -1 -2 -> 1 -ddcom007 compare -1 -1 -> 0 -ddcom008 compare -1 0 -> -1 -ddcom009 compare -1 1 -> -1 -ddcom010 compare -1 2 -> -1 -ddcom011 compare 0 -2 -> 1 -ddcom012 compare 0 -1 -> 1 -ddcom013 compare 0 0 -> 0 -ddcom014 compare 0 1 -> -1 -ddcom015 compare 0 2 -> -1 -ddcom016 compare 1 -2 -> 1 -ddcom017 compare 1 -1 -> 1 -ddcom018 compare 1 0 -> 1 -ddcom019 compare 1 1 -> 0 -ddcom020 compare 1 2 -> -1 -ddcom021 compare 2 -2 -> 1 -ddcom022 compare 2 -1 -> 1 -ddcom023 compare 2 0 -> 1 -ddcom025 compare 2 1 -> 1 -ddcom026 compare 2 2 -> 0 - -ddcom031 compare -20 -20 -> 0 -ddcom032 compare -20 -10 -> -1 -ddcom033 compare -20 00 -> -1 -ddcom034 compare -20 10 -> -1 -ddcom035 compare -20 20 -> -1 -ddcom036 compare -10 -20 -> 1 -ddcom037 compare -10 -10 -> 0 -ddcom038 compare -10 00 -> -1 -ddcom039 compare -10 10 -> -1 -ddcom040 compare -10 20 -> -1 -ddcom041 compare 00 -20 -> 1 -ddcom042 compare 00 -10 -> 1 -ddcom043 compare 00 00 -> 0 -ddcom044 compare 00 10 -> -1 -ddcom045 compare 00 20 -> -1 -ddcom046 compare 10 -20 -> 1 -ddcom047 compare 10 -10 -> 1 -ddcom048 compare 10 00 -> 1 -ddcom049 compare 10 10 -> 0 -ddcom050 compare 10 20 -> -1 -ddcom051 compare 20 -20 -> 1 -ddcom052 compare 20 -10 -> 1 -ddcom053 compare 20 00 -> 1 -ddcom055 compare 20 10 -> 1 -ddcom056 compare 20 20 -> 0 - -ddcom061 compare -2.0 -2.0 -> 0 -ddcom062 compare -2.0 -1.0 -> -1 -ddcom063 compare -2.0 0.0 -> -1 -ddcom064 compare -2.0 1.0 -> -1 -ddcom065 compare -2.0 2.0 -> -1 -ddcom066 compare -1.0 -2.0 -> 1 -ddcom067 compare -1.0 -1.0 -> 0 -ddcom068 compare -1.0 0.0 -> -1 -ddcom069 compare -1.0 1.0 -> -1 -ddcom070 compare -1.0 2.0 -> -1 -ddcom071 compare 0.0 -2.0 -> 1 -ddcom072 compare 0.0 -1.0 -> 1 -ddcom073 compare 0.0 0.0 -> 0 -ddcom074 compare 0.0 1.0 -> -1 -ddcom075 compare 0.0 2.0 -> -1 -ddcom076 compare 1.0 -2.0 -> 1 -ddcom077 compare 1.0 -1.0 -> 1 -ddcom078 compare 1.0 0.0 -> 1 -ddcom079 compare 1.0 1.0 -> 0 -ddcom080 compare 1.0 2.0 -> -1 -ddcom081 compare 2.0 -2.0 -> 1 -ddcom082 compare 2.0 -1.0 -> 1 -ddcom083 compare 2.0 0.0 -> 1 -ddcom085 compare 2.0 1.0 -> 1 -ddcom086 compare 2.0 2.0 -> 0 -ddcom087 compare 1.0 0.1 -> 1 -ddcom088 compare 0.1 1.0 -> -1 - --- now some cases which might overflow if subtract were used -ddcom095 compare 9.999999999999999E+384 9.999999999999999E+384 -> 0 -ddcom096 compare -9.999999999999999E+384 9.999999999999999E+384 -> -1 -ddcom097 compare 9.999999999999999E+384 -9.999999999999999E+384 -> 1 -ddcom098 compare -9.999999999999999E+384 -9.999999999999999E+384 -> 0 - --- some differing length/exponent cases -ddcom100 compare 7.0 7.0 -> 0 -ddcom101 compare 7.0 7 -> 0 -ddcom102 compare 7 7.0 -> 0 -ddcom103 compare 7E+0 7.0 -> 0 -ddcom104 compare 70E-1 7.0 -> 0 -ddcom105 compare 0.7E+1 7 -> 0 -ddcom106 compare 70E-1 7 -> 0 -ddcom107 compare 7.0 7E+0 -> 0 -ddcom108 compare 7.0 70E-1 -> 0 -ddcom109 compare 7 0.7E+1 -> 0 -ddcom110 compare 7 70E-1 -> 0 - -ddcom120 compare 8.0 7.0 -> 1 -ddcom121 compare 8.0 7 -> 1 -ddcom122 compare 8 7.0 -> 1 -ddcom123 compare 8E+0 7.0 -> 1 -ddcom124 compare 80E-1 7.0 -> 1 -ddcom125 compare 0.8E+1 7 -> 1 -ddcom126 compare 80E-1 7 -> 1 -ddcom127 compare 8.0 7E+0 -> 1 -ddcom128 compare 8.0 70E-1 -> 1 -ddcom129 compare 8 0.7E+1 -> 1 -ddcom130 compare 8 70E-1 -> 1 - -ddcom140 compare 8.0 9.0 -> -1 -ddcom141 compare 8.0 9 -> -1 -ddcom142 compare 8 9.0 -> -1 -ddcom143 compare 8E+0 9.0 -> -1 -ddcom144 compare 80E-1 9.0 -> -1 -ddcom145 compare 0.8E+1 9 -> -1 -ddcom146 compare 80E-1 9 -> -1 -ddcom147 compare 8.0 9E+0 -> -1 -ddcom148 compare 8.0 90E-1 -> -1 -ddcom149 compare 8 0.9E+1 -> -1 -ddcom150 compare 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ddcom200 compare -7.0 7.0 -> -1 -ddcom201 compare -7.0 7 -> -1 -ddcom202 compare -7 7.0 -> -1 -ddcom203 compare -7E+0 7.0 -> -1 -ddcom204 compare -70E-1 7.0 -> -1 -ddcom205 compare -0.7E+1 7 -> -1 -ddcom206 compare -70E-1 7 -> -1 -ddcom207 compare -7.0 7E+0 -> -1 -ddcom208 compare -7.0 70E-1 -> -1 -ddcom209 compare -7 0.7E+1 -> -1 -ddcom210 compare -7 70E-1 -> -1 - -ddcom220 compare -8.0 7.0 -> -1 -ddcom221 compare -8.0 7 -> -1 -ddcom222 compare -8 7.0 -> -1 -ddcom223 compare -8E+0 7.0 -> -1 -ddcom224 compare -80E-1 7.0 -> -1 -ddcom225 compare -0.8E+1 7 -> -1 -ddcom226 compare -80E-1 7 -> -1 -ddcom227 compare -8.0 7E+0 -> -1 -ddcom228 compare -8.0 70E-1 -> -1 -ddcom229 compare -8 0.7E+1 -> -1 -ddcom230 compare -8 70E-1 -> -1 - -ddcom240 compare -8.0 9.0 -> -1 -ddcom241 compare -8.0 9 -> -1 -ddcom242 compare -8 9.0 -> -1 -ddcom243 compare -8E+0 9.0 -> -1 -ddcom244 compare -80E-1 9.0 -> -1 -ddcom245 compare -0.8E+1 9 -> -1 -ddcom246 compare -80E-1 9 -> -1 -ddcom247 compare -8.0 9E+0 -> -1 -ddcom248 compare -8.0 90E-1 -> -1 -ddcom249 compare -8 0.9E+1 -> -1 -ddcom250 compare -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ddcom300 compare 7.0 -7.0 -> 1 -ddcom301 compare 7.0 -7 -> 1 -ddcom302 compare 7 -7.0 -> 1 -ddcom303 compare 7E+0 -7.0 -> 1 -ddcom304 compare 70E-1 -7.0 -> 1 -ddcom305 compare .7E+1 -7 -> 1 -ddcom306 compare 70E-1 -7 -> 1 -ddcom307 compare 7.0 -7E+0 -> 1 -ddcom308 compare 7.0 -70E-1 -> 1 -ddcom309 compare 7 -.7E+1 -> 1 -ddcom310 compare 7 -70E-1 -> 1 - -ddcom320 compare 8.0 -7.0 -> 1 -ddcom321 compare 8.0 -7 -> 1 -ddcom322 compare 8 -7.0 -> 1 -ddcom323 compare 8E+0 -7.0 -> 1 -ddcom324 compare 80E-1 -7.0 -> 1 -ddcom325 compare .8E+1 -7 -> 1 -ddcom326 compare 80E-1 -7 -> 1 -ddcom327 compare 8.0 -7E+0 -> 1 -ddcom328 compare 8.0 -70E-1 -> 1 -ddcom329 compare 8 -.7E+1 -> 1 -ddcom330 compare 8 -70E-1 -> 1 - -ddcom340 compare 8.0 -9.0 -> 1 -ddcom341 compare 8.0 -9 -> 1 -ddcom342 compare 8 -9.0 -> 1 -ddcom343 compare 8E+0 -9.0 -> 1 -ddcom344 compare 80E-1 -9.0 -> 1 -ddcom345 compare .8E+1 -9 -> 1 -ddcom346 compare 80E-1 -9 -> 1 -ddcom347 compare 8.0 -9E+0 -> 1 -ddcom348 compare 8.0 -90E-1 -> 1 -ddcom349 compare 8 -.9E+1 -> 1 -ddcom350 compare 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -ddcom400 compare -7.0 -7.0 -> 0 -ddcom401 compare -7.0 -7 -> 0 -ddcom402 compare -7 -7.0 -> 0 -ddcom403 compare -7E+0 -7.0 -> 0 -ddcom404 compare -70E-1 -7.0 -> 0 -ddcom405 compare -.7E+1 -7 -> 0 -ddcom406 compare -70E-1 -7 -> 0 -ddcom407 compare -7.0 -7E+0 -> 0 -ddcom408 compare -7.0 -70E-1 -> 0 -ddcom409 compare -7 -.7E+1 -> 0 -ddcom410 compare -7 -70E-1 -> 0 - -ddcom420 compare -8.0 -7.0 -> -1 -ddcom421 compare -8.0 -7 -> -1 -ddcom422 compare -8 -7.0 -> -1 -ddcom423 compare -8E+0 -7.0 -> -1 -ddcom424 compare -80E-1 -7.0 -> -1 -ddcom425 compare -.8E+1 -7 -> -1 -ddcom426 compare -80E-1 -7 -> -1 -ddcom427 compare -8.0 -7E+0 -> -1 -ddcom428 compare -8.0 -70E-1 -> -1 -ddcom429 compare -8 -.7E+1 -> -1 -ddcom430 compare -8 -70E-1 -> -1 - -ddcom440 compare -8.0 -9.0 -> 1 -ddcom441 compare -8.0 -9 -> 1 -ddcom442 compare -8 -9.0 -> 1 -ddcom443 compare -8E+0 -9.0 -> 1 -ddcom444 compare -80E-1 -9.0 -> 1 -ddcom445 compare -.8E+1 -9 -> 1 -ddcom446 compare -80E-1 -9 -> 1 -ddcom447 compare -8.0 -9E+0 -> 1 -ddcom448 compare -8.0 -90E-1 -> 1 -ddcom449 compare -8 -.9E+1 -> 1 -ddcom450 compare -8 -90E-1 -> 1 - --- misalignment traps for little-endian -ddcom451 compare 1.0 0.1 -> 1 -ddcom452 compare 0.1 1.0 -> -1 -ddcom453 compare 10.0 0.1 -> 1 -ddcom454 compare 0.1 10.0 -> -1 -ddcom455 compare 100 1.0 -> 1 -ddcom456 compare 1.0 100 -> -1 -ddcom457 compare 1000 10.0 -> 1 -ddcom458 compare 10.0 1000 -> -1 -ddcom459 compare 10000 100.0 -> 1 -ddcom460 compare 100.0 10000 -> -1 -ddcom461 compare 100000 1000.0 -> 1 -ddcom462 compare 1000.0 100000 -> -1 -ddcom463 compare 1000000 10000.0 -> 1 -ddcom464 compare 10000.0 1000000 -> -1 - --- testcases that subtract to lots of zeros at boundaries [pgr] -ddcom473 compare 123.4560000000000E-89 123.456E-89 -> 0 -ddcom474 compare 123.456000000000E+89 123.456E+89 -> 0 -ddcom475 compare 123.45600000000E-89 123.456E-89 -> 0 -ddcom476 compare 123.4560000000E+89 123.456E+89 -> 0 -ddcom477 compare 123.456000000E-89 123.456E-89 -> 0 -ddcom478 compare 123.45600000E+89 123.456E+89 -> 0 -ddcom479 compare 123.4560000E-89 123.456E-89 -> 0 -ddcom480 compare 123.456000E+89 123.456E+89 -> 0 -ddcom481 compare 123.45600E-89 123.456E-89 -> 0 -ddcom482 compare 123.4560E+89 123.456E+89 -> 0 -ddcom483 compare 123.456E-89 123.456E-89 -> 0 -ddcom487 compare 123.456E+89 123.4560000000000E+89 -> 0 -ddcom488 compare 123.456E-89 123.456000000000E-89 -> 0 -ddcom489 compare 123.456E+89 123.45600000000E+89 -> 0 -ddcom490 compare 123.456E-89 123.4560000000E-89 -> 0 -ddcom491 compare 123.456E+89 123.456000000E+89 -> 0 -ddcom492 compare 123.456E-89 123.45600000E-89 -> 0 -ddcom493 compare 123.456E+89 123.4560000E+89 -> 0 -ddcom494 compare 123.456E-89 123.456000E-89 -> 0 -ddcom495 compare 123.456E+89 123.45600E+89 -> 0 -ddcom496 compare 123.456E-89 123.4560E-89 -> 0 -ddcom497 compare 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -ddcom500 compare 1 1E-15 -> 1 -ddcom501 compare 1 1E-14 -> 1 -ddcom502 compare 1 1E-13 -> 1 -ddcom503 compare 1 1E-12 -> 1 -ddcom504 compare 1 1E-11 -> 1 -ddcom505 compare 1 1E-10 -> 1 -ddcom506 compare 1 1E-9 -> 1 -ddcom507 compare 1 1E-8 -> 1 -ddcom508 compare 1 1E-7 -> 1 -ddcom509 compare 1 1E-6 -> 1 -ddcom510 compare 1 1E-5 -> 1 -ddcom511 compare 1 1E-4 -> 1 -ddcom512 compare 1 1E-3 -> 1 -ddcom513 compare 1 1E-2 -> 1 -ddcom514 compare 1 1E-1 -> 1 -ddcom515 compare 1 1E-0 -> 0 -ddcom516 compare 1 1E+1 -> -1 -ddcom517 compare 1 1E+2 -> -1 -ddcom518 compare 1 1E+3 -> -1 -ddcom519 compare 1 1E+4 -> -1 -ddcom521 compare 1 1E+5 -> -1 -ddcom522 compare 1 1E+6 -> -1 -ddcom523 compare 1 1E+7 -> -1 -ddcom524 compare 1 1E+8 -> -1 -ddcom525 compare 1 1E+9 -> -1 -ddcom526 compare 1 1E+10 -> -1 -ddcom527 compare 1 1E+11 -> -1 -ddcom528 compare 1 1E+12 -> -1 -ddcom529 compare 1 1E+13 -> -1 -ddcom530 compare 1 1E+14 -> -1 -ddcom531 compare 1 1E+15 -> -1 --- LR swap -ddcom540 compare 1E-15 1 -> -1 -ddcom541 compare 1E-14 1 -> -1 -ddcom542 compare 1E-13 1 -> -1 -ddcom543 compare 1E-12 1 -> -1 -ddcom544 compare 1E-11 1 -> -1 -ddcom545 compare 1E-10 1 -> -1 -ddcom546 compare 1E-9 1 -> -1 -ddcom547 compare 1E-8 1 -> -1 -ddcom548 compare 1E-7 1 -> -1 -ddcom549 compare 1E-6 1 -> -1 -ddcom550 compare 1E-5 1 -> -1 -ddcom551 compare 1E-4 1 -> -1 -ddcom552 compare 1E-3 1 -> -1 -ddcom553 compare 1E-2 1 -> -1 -ddcom554 compare 1E-1 1 -> -1 -ddcom555 compare 1E-0 1 -> 0 -ddcom556 compare 1E+1 1 -> 1 -ddcom557 compare 1E+2 1 -> 1 -ddcom558 compare 1E+3 1 -> 1 -ddcom559 compare 1E+4 1 -> 1 -ddcom561 compare 1E+5 1 -> 1 -ddcom562 compare 1E+6 1 -> 1 -ddcom563 compare 1E+7 1 -> 1 -ddcom564 compare 1E+8 1 -> 1 -ddcom565 compare 1E+9 1 -> 1 -ddcom566 compare 1E+10 1 -> 1 -ddcom567 compare 1E+11 1 -> 1 -ddcom568 compare 1E+12 1 -> 1 -ddcom569 compare 1E+13 1 -> 1 -ddcom570 compare 1E+14 1 -> 1 -ddcom571 compare 1E+15 1 -> 1 --- similar with a useful coefficient, one side only -ddcom580 compare 0.000000987654321 1E-15 -> 1 -ddcom581 compare 0.000000987654321 1E-14 -> 1 -ddcom582 compare 0.000000987654321 1E-13 -> 1 -ddcom583 compare 0.000000987654321 1E-12 -> 1 -ddcom584 compare 0.000000987654321 1E-11 -> 1 -ddcom585 compare 0.000000987654321 1E-10 -> 1 -ddcom586 compare 0.000000987654321 1E-9 -> 1 -ddcom587 compare 0.000000987654321 1E-8 -> 1 -ddcom588 compare 0.000000987654321 1E-7 -> 1 -ddcom589 compare 0.000000987654321 1E-6 -> -1 -ddcom590 compare 0.000000987654321 1E-5 -> -1 -ddcom591 compare 0.000000987654321 1E-4 -> -1 -ddcom592 compare 0.000000987654321 1E-3 -> -1 -ddcom593 compare 0.000000987654321 1E-2 -> -1 -ddcom594 compare 0.000000987654321 1E-1 -> -1 -ddcom595 compare 0.000000987654321 1E-0 -> -1 -ddcom596 compare 0.000000987654321 1E+1 -> -1 -ddcom597 compare 0.000000987654321 1E+2 -> -1 -ddcom598 compare 0.000000987654321 1E+3 -> -1 -ddcom599 compare 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -ddcom600 compare 12 12.2345 -> -1 -ddcom601 compare 12.0 12.2345 -> -1 -ddcom602 compare 12.00 12.2345 -> -1 -ddcom603 compare 12.000 12.2345 -> -1 -ddcom604 compare 12.0000 12.2345 -> -1 -ddcom605 compare 12.00000 12.2345 -> -1 -ddcom606 compare 12.000000 12.2345 -> -1 -ddcom607 compare 12.0000000 12.2345 -> -1 -ddcom608 compare 12.00000000 12.2345 -> -1 -ddcom609 compare 12.000000000 12.2345 -> -1 -ddcom610 compare 12.1234 12 -> 1 -ddcom611 compare 12.1234 12.0 -> 1 -ddcom612 compare 12.1234 12.00 -> 1 -ddcom613 compare 12.1234 12.000 -> 1 -ddcom614 compare 12.1234 12.0000 -> 1 -ddcom615 compare 12.1234 12.00000 -> 1 -ddcom616 compare 12.1234 12.000000 -> 1 -ddcom617 compare 12.1234 12.0000000 -> 1 -ddcom618 compare 12.1234 12.00000000 -> 1 -ddcom619 compare 12.1234 12.000000000 -> 1 -ddcom620 compare -12 -12.2345 -> 1 -ddcom621 compare -12.0 -12.2345 -> 1 -ddcom622 compare -12.00 -12.2345 -> 1 -ddcom623 compare -12.000 -12.2345 -> 1 -ddcom624 compare -12.0000 -12.2345 -> 1 -ddcom625 compare -12.00000 -12.2345 -> 1 -ddcom626 compare -12.000000 -12.2345 -> 1 -ddcom627 compare -12.0000000 -12.2345 -> 1 -ddcom628 compare -12.00000000 -12.2345 -> 1 -ddcom629 compare -12.000000000 -12.2345 -> 1 -ddcom630 compare -12.1234 -12 -> -1 -ddcom631 compare -12.1234 -12.0 -> -1 -ddcom632 compare -12.1234 -12.00 -> -1 -ddcom633 compare -12.1234 -12.000 -> -1 -ddcom634 compare -12.1234 -12.0000 -> -1 -ddcom635 compare -12.1234 -12.00000 -> -1 -ddcom636 compare -12.1234 -12.000000 -> -1 -ddcom637 compare -12.1234 -12.0000000 -> -1 -ddcom638 compare -12.1234 -12.00000000 -> -1 -ddcom639 compare -12.1234 -12.000000000 -> -1 - --- extended zeros -ddcom640 compare 0 0 -> 0 -ddcom641 compare 0 -0 -> 0 -ddcom642 compare 0 -0.0 -> 0 -ddcom643 compare 0 0.0 -> 0 -ddcom644 compare -0 0 -> 0 -ddcom645 compare -0 -0 -> 0 -ddcom646 compare -0 -0.0 -> 0 -ddcom647 compare -0 0.0 -> 0 -ddcom648 compare 0.0 0 -> 0 -ddcom649 compare 0.0 -0 -> 0 -ddcom650 compare 0.0 -0.0 -> 0 -ddcom651 compare 0.0 0.0 -> 0 -ddcom652 compare -0.0 0 -> 0 -ddcom653 compare -0.0 -0 -> 0 -ddcom654 compare -0.0 -0.0 -> 0 -ddcom655 compare -0.0 0.0 -> 0 - -ddcom656 compare -0E1 0.0 -> 0 -ddcom657 compare -0E2 0.0 -> 0 -ddcom658 compare 0E1 0.0 -> 0 -ddcom659 compare 0E2 0.0 -> 0 -ddcom660 compare -0E1 0 -> 0 -ddcom661 compare -0E2 0 -> 0 -ddcom662 compare 0E1 0 -> 0 -ddcom663 compare 0E2 0 -> 0 -ddcom664 compare -0E1 -0E1 -> 0 -ddcom665 compare -0E2 -0E1 -> 0 -ddcom666 compare 0E1 -0E1 -> 0 -ddcom667 compare 0E2 -0E1 -> 0 -ddcom668 compare -0E1 -0E2 -> 0 -ddcom669 compare -0E2 -0E2 -> 0 -ddcom670 compare 0E1 -0E2 -> 0 -ddcom671 compare 0E2 -0E2 -> 0 -ddcom672 compare -0E1 0E1 -> 0 -ddcom673 compare -0E2 0E1 -> 0 -ddcom674 compare 0E1 0E1 -> 0 -ddcom675 compare 0E2 0E1 -> 0 -ddcom676 compare -0E1 0E2 -> 0 -ddcom677 compare -0E2 0E2 -> 0 -ddcom678 compare 0E1 0E2 -> 0 -ddcom679 compare 0E2 0E2 -> 0 - --- trailing zeros; unit-y -ddcom680 compare 12 12 -> 0 -ddcom681 compare 12 12.0 -> 0 -ddcom682 compare 12 12.00 -> 0 -ddcom683 compare 12 12.000 -> 0 -ddcom684 compare 12 12.0000 -> 0 -ddcom685 compare 12 12.00000 -> 0 -ddcom686 compare 12 12.000000 -> 0 -ddcom687 compare 12 12.0000000 -> 0 -ddcom688 compare 12 12.00000000 -> 0 -ddcom689 compare 12 12.000000000 -> 0 -ddcom690 compare 12 12 -> 0 -ddcom691 compare 12.0 12 -> 0 -ddcom692 compare 12.00 12 -> 0 -ddcom693 compare 12.000 12 -> 0 -ddcom694 compare 12.0000 12 -> 0 -ddcom695 compare 12.00000 12 -> 0 -ddcom696 compare 12.000000 12 -> 0 -ddcom697 compare 12.0000000 12 -> 0 -ddcom698 compare 12.00000000 12 -> 0 -ddcom699 compare 12.000000000 12 -> 0 - --- first, second, & last digit -ddcom700 compare 1234567890123456 1234567890123455 -> 1 -ddcom701 compare 1234567890123456 1234567890123456 -> 0 -ddcom702 compare 1234567890123456 1234567890123457 -> -1 -ddcom703 compare 1234567890123456 0234567890123456 -> 1 -ddcom704 compare 1234567890123456 1234567890123456 -> 0 -ddcom705 compare 1234567890123456 2234567890123456 -> -1 -ddcom706 compare 1134567890123456 1034567890123456 -> 1 -ddcom707 compare 1134567890123456 1134567890123456 -> 0 -ddcom708 compare 1134567890123456 1234567890123456 -> -1 - --- miscellaneous -ddcom721 compare 12345678000 1 -> 1 -ddcom722 compare 1 12345678000 -> -1 -ddcom723 compare 1234567800 1 -> 1 -ddcom724 compare 1 1234567800 -> -1 -ddcom725 compare 1234567890 1 -> 1 -ddcom726 compare 1 1234567890 -> -1 -ddcom727 compare 1234567891 1 -> 1 -ddcom728 compare 1 1234567891 -> -1 -ddcom729 compare 12345678901 1 -> 1 -ddcom730 compare 1 12345678901 -> -1 -ddcom731 compare 1234567896 1 -> 1 -ddcom732 compare 1 1234567896 -> -1 - --- residue cases at lower precision -ddcom740 compare 1 0.9999999 -> 1 -ddcom741 compare 1 0.999999 -> 1 -ddcom742 compare 1 0.99999 -> 1 -ddcom743 compare 1 1.0000 -> 0 -ddcom744 compare 1 1.00001 -> -1 -ddcom745 compare 1 1.000001 -> -1 -ddcom746 compare 1 1.0000001 -> -1 -ddcom750 compare 0.9999999 1 -> -1 -ddcom751 compare 0.999999 1 -> -1 -ddcom752 compare 0.99999 1 -> -1 -ddcom753 compare 1.0000 1 -> 0 -ddcom754 compare 1.00001 1 -> 1 -ddcom755 compare 1.000001 1 -> 1 -ddcom756 compare 1.0000001 1 -> 1 - --- Specials -ddcom780 compare Inf -Inf -> 1 -ddcom781 compare Inf -1000 -> 1 -ddcom782 compare Inf -1 -> 1 -ddcom783 compare Inf -0 -> 1 -ddcom784 compare Inf 0 -> 1 -ddcom785 compare Inf 1 -> 1 -ddcom786 compare Inf 1000 -> 1 -ddcom787 compare Inf Inf -> 0 -ddcom788 compare -1000 Inf -> -1 -ddcom789 compare -Inf Inf -> -1 -ddcom790 compare -1 Inf -> -1 -ddcom791 compare -0 Inf -> -1 -ddcom792 compare 0 Inf -> -1 -ddcom793 compare 1 Inf -> -1 -ddcom794 compare 1000 Inf -> -1 -ddcom795 compare Inf Inf -> 0 - -ddcom800 compare -Inf -Inf -> 0 -ddcom801 compare -Inf -1000 -> -1 -ddcom802 compare -Inf -1 -> -1 -ddcom803 compare -Inf -0 -> -1 -ddcom804 compare -Inf 0 -> -1 -ddcom805 compare -Inf 1 -> -1 -ddcom806 compare -Inf 1000 -> -1 -ddcom807 compare -Inf Inf -> -1 -ddcom808 compare -Inf -Inf -> 0 -ddcom809 compare -1000 -Inf -> 1 -ddcom810 compare -1 -Inf -> 1 -ddcom811 compare -0 -Inf -> 1 -ddcom812 compare 0 -Inf -> 1 -ddcom813 compare 1 -Inf -> 1 -ddcom814 compare 1000 -Inf -> 1 -ddcom815 compare Inf -Inf -> 1 - -ddcom821 compare NaN -Inf -> NaN -ddcom822 compare NaN -1000 -> NaN -ddcom823 compare NaN -1 -> NaN -ddcom824 compare NaN -0 -> NaN -ddcom825 compare NaN 0 -> NaN -ddcom826 compare NaN 1 -> NaN -ddcom827 compare NaN 1000 -> NaN -ddcom828 compare NaN Inf -> NaN -ddcom829 compare NaN NaN -> NaN -ddcom830 compare -Inf NaN -> NaN -ddcom831 compare -1000 NaN -> NaN -ddcom832 compare -1 NaN -> NaN -ddcom833 compare -0 NaN -> NaN -ddcom834 compare 0 NaN -> NaN -ddcom835 compare 1 NaN -> NaN -ddcom836 compare 1000 NaN -> NaN -ddcom837 compare Inf NaN -> NaN -ddcom838 compare -NaN -NaN -> -NaN -ddcom839 compare +NaN -NaN -> NaN -ddcom840 compare -NaN +NaN -> -NaN - -ddcom841 compare sNaN -Inf -> NaN Invalid_operation -ddcom842 compare sNaN -1000 -> NaN Invalid_operation -ddcom843 compare sNaN -1 -> NaN Invalid_operation -ddcom844 compare sNaN -0 -> NaN Invalid_operation -ddcom845 compare sNaN 0 -> NaN Invalid_operation -ddcom846 compare sNaN 1 -> NaN Invalid_operation -ddcom847 compare sNaN 1000 -> NaN Invalid_operation -ddcom848 compare sNaN NaN -> NaN Invalid_operation -ddcom849 compare sNaN sNaN -> NaN Invalid_operation -ddcom850 compare NaN sNaN -> NaN Invalid_operation -ddcom851 compare -Inf sNaN -> NaN Invalid_operation -ddcom852 compare -1000 sNaN -> NaN Invalid_operation -ddcom853 compare -1 sNaN -> NaN Invalid_operation -ddcom854 compare -0 sNaN -> NaN Invalid_operation -ddcom855 compare 0 sNaN -> NaN Invalid_operation -ddcom856 compare 1 sNaN -> NaN Invalid_operation -ddcom857 compare 1000 sNaN -> NaN Invalid_operation -ddcom858 compare Inf sNaN -> NaN Invalid_operation -ddcom859 compare NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddcom860 compare NaN9 -Inf -> NaN9 -ddcom861 compare NaN8 999 -> NaN8 -ddcom862 compare NaN77 Inf -> NaN77 -ddcom863 compare -NaN67 NaN5 -> -NaN67 -ddcom864 compare -Inf -NaN4 -> -NaN4 -ddcom865 compare -999 -NaN33 -> -NaN33 -ddcom866 compare Inf NaN2 -> NaN2 -ddcom867 compare -NaN41 -NaN42 -> -NaN41 -ddcom868 compare +NaN41 -NaN42 -> NaN41 -ddcom869 compare -NaN41 +NaN42 -> -NaN41 -ddcom870 compare +NaN41 +NaN42 -> NaN41 - -ddcom871 compare -sNaN99 -Inf -> -NaN99 Invalid_operation -ddcom872 compare sNaN98 -11 -> NaN98 Invalid_operation -ddcom873 compare sNaN97 NaN -> NaN97 Invalid_operation -ddcom874 compare sNaN16 sNaN94 -> NaN16 Invalid_operation -ddcom875 compare NaN85 sNaN83 -> NaN83 Invalid_operation -ddcom876 compare -Inf sNaN92 -> NaN92 Invalid_operation -ddcom877 compare 088 sNaN81 -> NaN81 Invalid_operation -ddcom878 compare Inf sNaN90 -> NaN90 Invalid_operation -ddcom879 compare NaN -sNaN89 -> -NaN89 Invalid_operation - --- wide range -ddcom880 compare +1.23456789012345E-0 9E+384 -> -1 -ddcom881 compare 9E+384 +1.23456789012345E-0 -> 1 -ddcom882 compare +0.100 9E-383 -> 1 -ddcom883 compare 9E-383 +0.100 -> -1 -ddcom885 compare -1.23456789012345E-0 9E+384 -> -1 -ddcom886 compare 9E+384 -1.23456789012345E-0 -> 1 -ddcom887 compare -0.100 9E-383 -> -1 -ddcom888 compare 9E-383 -0.100 -> 1 - --- spread zeros -ddcom900 compare 0E-383 0 -> 0 -ddcom901 compare 0E-383 -0 -> 0 -ddcom902 compare -0E-383 0 -> 0 -ddcom903 compare -0E-383 -0 -> 0 -ddcom904 compare 0E-383 0E+384 -> 0 -ddcom905 compare 0E-383 -0E+384 -> 0 -ddcom906 compare -0E-383 0E+384 -> 0 -ddcom907 compare -0E-383 -0E+384 -> 0 -ddcom908 compare 0 0E+384 -> 0 -ddcom909 compare 0 -0E+384 -> 0 -ddcom910 compare -0 0E+384 -> 0 -ddcom911 compare -0 -0E+384 -> 0 -ddcom930 compare 0E+384 0 -> 0 -ddcom931 compare 0E+384 -0 -> 0 -ddcom932 compare -0E+384 0 -> 0 -ddcom933 compare -0E+384 -0 -> 0 -ddcom934 compare 0E+384 0E-383 -> 0 -ddcom935 compare 0E+384 -0E-383 -> 0 -ddcom936 compare -0E+384 0E-383 -> 0 -ddcom937 compare -0E+384 -0E-383 -> 0 -ddcom938 compare 0 0E-383 -> 0 -ddcom939 compare 0 -0E-383 -> 0 -ddcom940 compare -0 0E-383 -> 0 -ddcom941 compare -0 -0E-383 -> 0 - --- signs -ddcom961 compare 1e+77 1e+11 -> 1 -ddcom962 compare 1e+77 -1e+11 -> 1 -ddcom963 compare -1e+77 1e+11 -> -1 -ddcom964 compare -1e+77 -1e+11 -> -1 -ddcom965 compare 1e-77 1e-11 -> -1 -ddcom966 compare 1e-77 -1e-11 -> 1 -ddcom967 compare -1e-77 1e-11 -> -1 -ddcom968 compare -1e-77 -1e-11 -> 1 - --- full alignment range, both ways -ddcomp1001 compare 1 1.000000000000000 -> 0 -ddcomp1002 compare 1 1.00000000000000 -> 0 -ddcomp1003 compare 1 1.0000000000000 -> 0 -ddcomp1004 compare 1 1.000000000000 -> 0 -ddcomp1005 compare 1 1.00000000000 -> 0 -ddcomp1006 compare 1 1.0000000000 -> 0 -ddcomp1007 compare 1 1.000000000 -> 0 -ddcomp1008 compare 1 1.00000000 -> 0 -ddcomp1009 compare 1 1.0000000 -> 0 -ddcomp1010 compare 1 1.000000 -> 0 -ddcomp1011 compare 1 1.00000 -> 0 -ddcomp1012 compare 1 1.0000 -> 0 -ddcomp1013 compare 1 1.000 -> 0 -ddcomp1014 compare 1 1.00 -> 0 -ddcomp1015 compare 1 1.0 -> 0 -ddcomp1021 compare 1.000000000000000 1 -> 0 -ddcomp1022 compare 1.00000000000000 1 -> 0 -ddcomp1023 compare 1.0000000000000 1 -> 0 -ddcomp1024 compare 1.000000000000 1 -> 0 -ddcomp1025 compare 1.00000000000 1 -> 0 -ddcomp1026 compare 1.0000000000 1 -> 0 -ddcomp1027 compare 1.000000000 1 -> 0 -ddcomp1028 compare 1.00000000 1 -> 0 -ddcomp1029 compare 1.0000000 1 -> 0 -ddcomp1030 compare 1.000000 1 -> 0 -ddcomp1031 compare 1.00000 1 -> 0 -ddcomp1032 compare 1.0000 1 -> 0 -ddcomp1033 compare 1.000 1 -> 0 -ddcomp1034 compare 1.00 1 -> 0 -ddcomp1035 compare 1.0 1 -> 0 - --- check MSD always detected non-zero -ddcomp1040 compare 0 0.000000000000000 -> 0 -ddcomp1041 compare 0 1.000000000000000 -> -1 -ddcomp1042 compare 0 2.000000000000000 -> -1 -ddcomp1043 compare 0 3.000000000000000 -> -1 -ddcomp1044 compare 0 4.000000000000000 -> -1 -ddcomp1045 compare 0 5.000000000000000 -> -1 -ddcomp1046 compare 0 6.000000000000000 -> -1 -ddcomp1047 compare 0 7.000000000000000 -> -1 -ddcomp1048 compare 0 8.000000000000000 -> -1 -ddcomp1049 compare 0 9.000000000000000 -> -1 -ddcomp1050 compare 0.000000000000000 0 -> 0 -ddcomp1051 compare 1.000000000000000 0 -> 1 -ddcomp1052 compare 2.000000000000000 0 -> 1 -ddcomp1053 compare 3.000000000000000 0 -> 1 -ddcomp1054 compare 4.000000000000000 0 -> 1 -ddcomp1055 compare 5.000000000000000 0 -> 1 -ddcomp1056 compare 6.000000000000000 0 -> 1 -ddcomp1057 compare 7.000000000000000 0 -> 1 -ddcomp1058 compare 8.000000000000000 0 -> 1 -ddcomp1059 compare 9.000000000000000 0 -> 1 - --- Null tests -ddcom9990 compare 10 # -> NaN Invalid_operation -ddcom9991 compare # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddCompare.decTest -- decDouble comparison that allows quiet NaNs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddcom001 compare -2 -2 -> 0 +ddcom002 compare -2 -1 -> -1 +ddcom003 compare -2 0 -> -1 +ddcom004 compare -2 1 -> -1 +ddcom005 compare -2 2 -> -1 +ddcom006 compare -1 -2 -> 1 +ddcom007 compare -1 -1 -> 0 +ddcom008 compare -1 0 -> -1 +ddcom009 compare -1 1 -> -1 +ddcom010 compare -1 2 -> -1 +ddcom011 compare 0 -2 -> 1 +ddcom012 compare 0 -1 -> 1 +ddcom013 compare 0 0 -> 0 +ddcom014 compare 0 1 -> -1 +ddcom015 compare 0 2 -> -1 +ddcom016 compare 1 -2 -> 1 +ddcom017 compare 1 -1 -> 1 +ddcom018 compare 1 0 -> 1 +ddcom019 compare 1 1 -> 0 +ddcom020 compare 1 2 -> -1 +ddcom021 compare 2 -2 -> 1 +ddcom022 compare 2 -1 -> 1 +ddcom023 compare 2 0 -> 1 +ddcom025 compare 2 1 -> 1 +ddcom026 compare 2 2 -> 0 + +ddcom031 compare -20 -20 -> 0 +ddcom032 compare -20 -10 -> -1 +ddcom033 compare -20 00 -> -1 +ddcom034 compare -20 10 -> -1 +ddcom035 compare -20 20 -> -1 +ddcom036 compare -10 -20 -> 1 +ddcom037 compare -10 -10 -> 0 +ddcom038 compare -10 00 -> -1 +ddcom039 compare -10 10 -> -1 +ddcom040 compare -10 20 -> -1 +ddcom041 compare 00 -20 -> 1 +ddcom042 compare 00 -10 -> 1 +ddcom043 compare 00 00 -> 0 +ddcom044 compare 00 10 -> -1 +ddcom045 compare 00 20 -> -1 +ddcom046 compare 10 -20 -> 1 +ddcom047 compare 10 -10 -> 1 +ddcom048 compare 10 00 -> 1 +ddcom049 compare 10 10 -> 0 +ddcom050 compare 10 20 -> -1 +ddcom051 compare 20 -20 -> 1 +ddcom052 compare 20 -10 -> 1 +ddcom053 compare 20 00 -> 1 +ddcom055 compare 20 10 -> 1 +ddcom056 compare 20 20 -> 0 + +ddcom061 compare -2.0 -2.0 -> 0 +ddcom062 compare -2.0 -1.0 -> -1 +ddcom063 compare -2.0 0.0 -> -1 +ddcom064 compare -2.0 1.0 -> -1 +ddcom065 compare -2.0 2.0 -> -1 +ddcom066 compare -1.0 -2.0 -> 1 +ddcom067 compare -1.0 -1.0 -> 0 +ddcom068 compare -1.0 0.0 -> -1 +ddcom069 compare -1.0 1.0 -> -1 +ddcom070 compare -1.0 2.0 -> -1 +ddcom071 compare 0.0 -2.0 -> 1 +ddcom072 compare 0.0 -1.0 -> 1 +ddcom073 compare 0.0 0.0 -> 0 +ddcom074 compare 0.0 1.0 -> -1 +ddcom075 compare 0.0 2.0 -> -1 +ddcom076 compare 1.0 -2.0 -> 1 +ddcom077 compare 1.0 -1.0 -> 1 +ddcom078 compare 1.0 0.0 -> 1 +ddcom079 compare 1.0 1.0 -> 0 +ddcom080 compare 1.0 2.0 -> -1 +ddcom081 compare 2.0 -2.0 -> 1 +ddcom082 compare 2.0 -1.0 -> 1 +ddcom083 compare 2.0 0.0 -> 1 +ddcom085 compare 2.0 1.0 -> 1 +ddcom086 compare 2.0 2.0 -> 0 +ddcom087 compare 1.0 0.1 -> 1 +ddcom088 compare 0.1 1.0 -> -1 + +-- now some cases which might overflow if subtract were used +ddcom095 compare 9.999999999999999E+384 9.999999999999999E+384 -> 0 +ddcom096 compare -9.999999999999999E+384 9.999999999999999E+384 -> -1 +ddcom097 compare 9.999999999999999E+384 -9.999999999999999E+384 -> 1 +ddcom098 compare -9.999999999999999E+384 -9.999999999999999E+384 -> 0 + +-- some differing length/exponent cases +ddcom100 compare 7.0 7.0 -> 0 +ddcom101 compare 7.0 7 -> 0 +ddcom102 compare 7 7.0 -> 0 +ddcom103 compare 7E+0 7.0 -> 0 +ddcom104 compare 70E-1 7.0 -> 0 +ddcom105 compare 0.7E+1 7 -> 0 +ddcom106 compare 70E-1 7 -> 0 +ddcom107 compare 7.0 7E+0 -> 0 +ddcom108 compare 7.0 70E-1 -> 0 +ddcom109 compare 7 0.7E+1 -> 0 +ddcom110 compare 7 70E-1 -> 0 + +ddcom120 compare 8.0 7.0 -> 1 +ddcom121 compare 8.0 7 -> 1 +ddcom122 compare 8 7.0 -> 1 +ddcom123 compare 8E+0 7.0 -> 1 +ddcom124 compare 80E-1 7.0 -> 1 +ddcom125 compare 0.8E+1 7 -> 1 +ddcom126 compare 80E-1 7 -> 1 +ddcom127 compare 8.0 7E+0 -> 1 +ddcom128 compare 8.0 70E-1 -> 1 +ddcom129 compare 8 0.7E+1 -> 1 +ddcom130 compare 8 70E-1 -> 1 + +ddcom140 compare 8.0 9.0 -> -1 +ddcom141 compare 8.0 9 -> -1 +ddcom142 compare 8 9.0 -> -1 +ddcom143 compare 8E+0 9.0 -> -1 +ddcom144 compare 80E-1 9.0 -> -1 +ddcom145 compare 0.8E+1 9 -> -1 +ddcom146 compare 80E-1 9 -> -1 +ddcom147 compare 8.0 9E+0 -> -1 +ddcom148 compare 8.0 90E-1 -> -1 +ddcom149 compare 8 0.9E+1 -> -1 +ddcom150 compare 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ddcom200 compare -7.0 7.0 -> -1 +ddcom201 compare -7.0 7 -> -1 +ddcom202 compare -7 7.0 -> -1 +ddcom203 compare -7E+0 7.0 -> -1 +ddcom204 compare -70E-1 7.0 -> -1 +ddcom205 compare -0.7E+1 7 -> -1 +ddcom206 compare -70E-1 7 -> -1 +ddcom207 compare -7.0 7E+0 -> -1 +ddcom208 compare -7.0 70E-1 -> -1 +ddcom209 compare -7 0.7E+1 -> -1 +ddcom210 compare -7 70E-1 -> -1 + +ddcom220 compare -8.0 7.0 -> -1 +ddcom221 compare -8.0 7 -> -1 +ddcom222 compare -8 7.0 -> -1 +ddcom223 compare -8E+0 7.0 -> -1 +ddcom224 compare -80E-1 7.0 -> -1 +ddcom225 compare -0.8E+1 7 -> -1 +ddcom226 compare -80E-1 7 -> -1 +ddcom227 compare -8.0 7E+0 -> -1 +ddcom228 compare -8.0 70E-1 -> -1 +ddcom229 compare -8 0.7E+1 -> -1 +ddcom230 compare -8 70E-1 -> -1 + +ddcom240 compare -8.0 9.0 -> -1 +ddcom241 compare -8.0 9 -> -1 +ddcom242 compare -8 9.0 -> -1 +ddcom243 compare -8E+0 9.0 -> -1 +ddcom244 compare -80E-1 9.0 -> -1 +ddcom245 compare -0.8E+1 9 -> -1 +ddcom246 compare -80E-1 9 -> -1 +ddcom247 compare -8.0 9E+0 -> -1 +ddcom248 compare -8.0 90E-1 -> -1 +ddcom249 compare -8 0.9E+1 -> -1 +ddcom250 compare -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ddcom300 compare 7.0 -7.0 -> 1 +ddcom301 compare 7.0 -7 -> 1 +ddcom302 compare 7 -7.0 -> 1 +ddcom303 compare 7E+0 -7.0 -> 1 +ddcom304 compare 70E-1 -7.0 -> 1 +ddcom305 compare .7E+1 -7 -> 1 +ddcom306 compare 70E-1 -7 -> 1 +ddcom307 compare 7.0 -7E+0 -> 1 +ddcom308 compare 7.0 -70E-1 -> 1 +ddcom309 compare 7 -.7E+1 -> 1 +ddcom310 compare 7 -70E-1 -> 1 + +ddcom320 compare 8.0 -7.0 -> 1 +ddcom321 compare 8.0 -7 -> 1 +ddcom322 compare 8 -7.0 -> 1 +ddcom323 compare 8E+0 -7.0 -> 1 +ddcom324 compare 80E-1 -7.0 -> 1 +ddcom325 compare .8E+1 -7 -> 1 +ddcom326 compare 80E-1 -7 -> 1 +ddcom327 compare 8.0 -7E+0 -> 1 +ddcom328 compare 8.0 -70E-1 -> 1 +ddcom329 compare 8 -.7E+1 -> 1 +ddcom330 compare 8 -70E-1 -> 1 + +ddcom340 compare 8.0 -9.0 -> 1 +ddcom341 compare 8.0 -9 -> 1 +ddcom342 compare 8 -9.0 -> 1 +ddcom343 compare 8E+0 -9.0 -> 1 +ddcom344 compare 80E-1 -9.0 -> 1 +ddcom345 compare .8E+1 -9 -> 1 +ddcom346 compare 80E-1 -9 -> 1 +ddcom347 compare 8.0 -9E+0 -> 1 +ddcom348 compare 8.0 -90E-1 -> 1 +ddcom349 compare 8 -.9E+1 -> 1 +ddcom350 compare 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +ddcom400 compare -7.0 -7.0 -> 0 +ddcom401 compare -7.0 -7 -> 0 +ddcom402 compare -7 -7.0 -> 0 +ddcom403 compare -7E+0 -7.0 -> 0 +ddcom404 compare -70E-1 -7.0 -> 0 +ddcom405 compare -.7E+1 -7 -> 0 +ddcom406 compare -70E-1 -7 -> 0 +ddcom407 compare -7.0 -7E+0 -> 0 +ddcom408 compare -7.0 -70E-1 -> 0 +ddcom409 compare -7 -.7E+1 -> 0 +ddcom410 compare -7 -70E-1 -> 0 + +ddcom420 compare -8.0 -7.0 -> -1 +ddcom421 compare -8.0 -7 -> -1 +ddcom422 compare -8 -7.0 -> -1 +ddcom423 compare -8E+0 -7.0 -> -1 +ddcom424 compare -80E-1 -7.0 -> -1 +ddcom425 compare -.8E+1 -7 -> -1 +ddcom426 compare -80E-1 -7 -> -1 +ddcom427 compare -8.0 -7E+0 -> -1 +ddcom428 compare -8.0 -70E-1 -> -1 +ddcom429 compare -8 -.7E+1 -> -1 +ddcom430 compare -8 -70E-1 -> -1 + +ddcom440 compare -8.0 -9.0 -> 1 +ddcom441 compare -8.0 -9 -> 1 +ddcom442 compare -8 -9.0 -> 1 +ddcom443 compare -8E+0 -9.0 -> 1 +ddcom444 compare -80E-1 -9.0 -> 1 +ddcom445 compare -.8E+1 -9 -> 1 +ddcom446 compare -80E-1 -9 -> 1 +ddcom447 compare -8.0 -9E+0 -> 1 +ddcom448 compare -8.0 -90E-1 -> 1 +ddcom449 compare -8 -.9E+1 -> 1 +ddcom450 compare -8 -90E-1 -> 1 + +-- misalignment traps for little-endian +ddcom451 compare 1.0 0.1 -> 1 +ddcom452 compare 0.1 1.0 -> -1 +ddcom453 compare 10.0 0.1 -> 1 +ddcom454 compare 0.1 10.0 -> -1 +ddcom455 compare 100 1.0 -> 1 +ddcom456 compare 1.0 100 -> -1 +ddcom457 compare 1000 10.0 -> 1 +ddcom458 compare 10.0 1000 -> -1 +ddcom459 compare 10000 100.0 -> 1 +ddcom460 compare 100.0 10000 -> -1 +ddcom461 compare 100000 1000.0 -> 1 +ddcom462 compare 1000.0 100000 -> -1 +ddcom463 compare 1000000 10000.0 -> 1 +ddcom464 compare 10000.0 1000000 -> -1 + +-- testcases that subtract to lots of zeros at boundaries [pgr] +ddcom473 compare 123.4560000000000E-89 123.456E-89 -> 0 +ddcom474 compare 123.456000000000E+89 123.456E+89 -> 0 +ddcom475 compare 123.45600000000E-89 123.456E-89 -> 0 +ddcom476 compare 123.4560000000E+89 123.456E+89 -> 0 +ddcom477 compare 123.456000000E-89 123.456E-89 -> 0 +ddcom478 compare 123.45600000E+89 123.456E+89 -> 0 +ddcom479 compare 123.4560000E-89 123.456E-89 -> 0 +ddcom480 compare 123.456000E+89 123.456E+89 -> 0 +ddcom481 compare 123.45600E-89 123.456E-89 -> 0 +ddcom482 compare 123.4560E+89 123.456E+89 -> 0 +ddcom483 compare 123.456E-89 123.456E-89 -> 0 +ddcom487 compare 123.456E+89 123.4560000000000E+89 -> 0 +ddcom488 compare 123.456E-89 123.456000000000E-89 -> 0 +ddcom489 compare 123.456E+89 123.45600000000E+89 -> 0 +ddcom490 compare 123.456E-89 123.4560000000E-89 -> 0 +ddcom491 compare 123.456E+89 123.456000000E+89 -> 0 +ddcom492 compare 123.456E-89 123.45600000E-89 -> 0 +ddcom493 compare 123.456E+89 123.4560000E+89 -> 0 +ddcom494 compare 123.456E-89 123.456000E-89 -> 0 +ddcom495 compare 123.456E+89 123.45600E+89 -> 0 +ddcom496 compare 123.456E-89 123.4560E-89 -> 0 +ddcom497 compare 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +ddcom500 compare 1 1E-15 -> 1 +ddcom501 compare 1 1E-14 -> 1 +ddcom502 compare 1 1E-13 -> 1 +ddcom503 compare 1 1E-12 -> 1 +ddcom504 compare 1 1E-11 -> 1 +ddcom505 compare 1 1E-10 -> 1 +ddcom506 compare 1 1E-9 -> 1 +ddcom507 compare 1 1E-8 -> 1 +ddcom508 compare 1 1E-7 -> 1 +ddcom509 compare 1 1E-6 -> 1 +ddcom510 compare 1 1E-5 -> 1 +ddcom511 compare 1 1E-4 -> 1 +ddcom512 compare 1 1E-3 -> 1 +ddcom513 compare 1 1E-2 -> 1 +ddcom514 compare 1 1E-1 -> 1 +ddcom515 compare 1 1E-0 -> 0 +ddcom516 compare 1 1E+1 -> -1 +ddcom517 compare 1 1E+2 -> -1 +ddcom518 compare 1 1E+3 -> -1 +ddcom519 compare 1 1E+4 -> -1 +ddcom521 compare 1 1E+5 -> -1 +ddcom522 compare 1 1E+6 -> -1 +ddcom523 compare 1 1E+7 -> -1 +ddcom524 compare 1 1E+8 -> -1 +ddcom525 compare 1 1E+9 -> -1 +ddcom526 compare 1 1E+10 -> -1 +ddcom527 compare 1 1E+11 -> -1 +ddcom528 compare 1 1E+12 -> -1 +ddcom529 compare 1 1E+13 -> -1 +ddcom530 compare 1 1E+14 -> -1 +ddcom531 compare 1 1E+15 -> -1 +-- LR swap +ddcom540 compare 1E-15 1 -> -1 +ddcom541 compare 1E-14 1 -> -1 +ddcom542 compare 1E-13 1 -> -1 +ddcom543 compare 1E-12 1 -> -1 +ddcom544 compare 1E-11 1 -> -1 +ddcom545 compare 1E-10 1 -> -1 +ddcom546 compare 1E-9 1 -> -1 +ddcom547 compare 1E-8 1 -> -1 +ddcom548 compare 1E-7 1 -> -1 +ddcom549 compare 1E-6 1 -> -1 +ddcom550 compare 1E-5 1 -> -1 +ddcom551 compare 1E-4 1 -> -1 +ddcom552 compare 1E-3 1 -> -1 +ddcom553 compare 1E-2 1 -> -1 +ddcom554 compare 1E-1 1 -> -1 +ddcom555 compare 1E-0 1 -> 0 +ddcom556 compare 1E+1 1 -> 1 +ddcom557 compare 1E+2 1 -> 1 +ddcom558 compare 1E+3 1 -> 1 +ddcom559 compare 1E+4 1 -> 1 +ddcom561 compare 1E+5 1 -> 1 +ddcom562 compare 1E+6 1 -> 1 +ddcom563 compare 1E+7 1 -> 1 +ddcom564 compare 1E+8 1 -> 1 +ddcom565 compare 1E+9 1 -> 1 +ddcom566 compare 1E+10 1 -> 1 +ddcom567 compare 1E+11 1 -> 1 +ddcom568 compare 1E+12 1 -> 1 +ddcom569 compare 1E+13 1 -> 1 +ddcom570 compare 1E+14 1 -> 1 +ddcom571 compare 1E+15 1 -> 1 +-- similar with a useful coefficient, one side only +ddcom580 compare 0.000000987654321 1E-15 -> 1 +ddcom581 compare 0.000000987654321 1E-14 -> 1 +ddcom582 compare 0.000000987654321 1E-13 -> 1 +ddcom583 compare 0.000000987654321 1E-12 -> 1 +ddcom584 compare 0.000000987654321 1E-11 -> 1 +ddcom585 compare 0.000000987654321 1E-10 -> 1 +ddcom586 compare 0.000000987654321 1E-9 -> 1 +ddcom587 compare 0.000000987654321 1E-8 -> 1 +ddcom588 compare 0.000000987654321 1E-7 -> 1 +ddcom589 compare 0.000000987654321 1E-6 -> -1 +ddcom590 compare 0.000000987654321 1E-5 -> -1 +ddcom591 compare 0.000000987654321 1E-4 -> -1 +ddcom592 compare 0.000000987654321 1E-3 -> -1 +ddcom593 compare 0.000000987654321 1E-2 -> -1 +ddcom594 compare 0.000000987654321 1E-1 -> -1 +ddcom595 compare 0.000000987654321 1E-0 -> -1 +ddcom596 compare 0.000000987654321 1E+1 -> -1 +ddcom597 compare 0.000000987654321 1E+2 -> -1 +ddcom598 compare 0.000000987654321 1E+3 -> -1 +ddcom599 compare 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +ddcom600 compare 12 12.2345 -> -1 +ddcom601 compare 12.0 12.2345 -> -1 +ddcom602 compare 12.00 12.2345 -> -1 +ddcom603 compare 12.000 12.2345 -> -1 +ddcom604 compare 12.0000 12.2345 -> -1 +ddcom605 compare 12.00000 12.2345 -> -1 +ddcom606 compare 12.000000 12.2345 -> -1 +ddcom607 compare 12.0000000 12.2345 -> -1 +ddcom608 compare 12.00000000 12.2345 -> -1 +ddcom609 compare 12.000000000 12.2345 -> -1 +ddcom610 compare 12.1234 12 -> 1 +ddcom611 compare 12.1234 12.0 -> 1 +ddcom612 compare 12.1234 12.00 -> 1 +ddcom613 compare 12.1234 12.000 -> 1 +ddcom614 compare 12.1234 12.0000 -> 1 +ddcom615 compare 12.1234 12.00000 -> 1 +ddcom616 compare 12.1234 12.000000 -> 1 +ddcom617 compare 12.1234 12.0000000 -> 1 +ddcom618 compare 12.1234 12.00000000 -> 1 +ddcom619 compare 12.1234 12.000000000 -> 1 +ddcom620 compare -12 -12.2345 -> 1 +ddcom621 compare -12.0 -12.2345 -> 1 +ddcom622 compare -12.00 -12.2345 -> 1 +ddcom623 compare -12.000 -12.2345 -> 1 +ddcom624 compare -12.0000 -12.2345 -> 1 +ddcom625 compare -12.00000 -12.2345 -> 1 +ddcom626 compare -12.000000 -12.2345 -> 1 +ddcom627 compare -12.0000000 -12.2345 -> 1 +ddcom628 compare -12.00000000 -12.2345 -> 1 +ddcom629 compare -12.000000000 -12.2345 -> 1 +ddcom630 compare -12.1234 -12 -> -1 +ddcom631 compare -12.1234 -12.0 -> -1 +ddcom632 compare -12.1234 -12.00 -> -1 +ddcom633 compare -12.1234 -12.000 -> -1 +ddcom634 compare -12.1234 -12.0000 -> -1 +ddcom635 compare -12.1234 -12.00000 -> -1 +ddcom636 compare -12.1234 -12.000000 -> -1 +ddcom637 compare -12.1234 -12.0000000 -> -1 +ddcom638 compare -12.1234 -12.00000000 -> -1 +ddcom639 compare -12.1234 -12.000000000 -> -1 + +-- extended zeros +ddcom640 compare 0 0 -> 0 +ddcom641 compare 0 -0 -> 0 +ddcom642 compare 0 -0.0 -> 0 +ddcom643 compare 0 0.0 -> 0 +ddcom644 compare -0 0 -> 0 +ddcom645 compare -0 -0 -> 0 +ddcom646 compare -0 -0.0 -> 0 +ddcom647 compare -0 0.0 -> 0 +ddcom648 compare 0.0 0 -> 0 +ddcom649 compare 0.0 -0 -> 0 +ddcom650 compare 0.0 -0.0 -> 0 +ddcom651 compare 0.0 0.0 -> 0 +ddcom652 compare -0.0 0 -> 0 +ddcom653 compare -0.0 -0 -> 0 +ddcom654 compare -0.0 -0.0 -> 0 +ddcom655 compare -0.0 0.0 -> 0 + +ddcom656 compare -0E1 0.0 -> 0 +ddcom657 compare -0E2 0.0 -> 0 +ddcom658 compare 0E1 0.0 -> 0 +ddcom659 compare 0E2 0.0 -> 0 +ddcom660 compare -0E1 0 -> 0 +ddcom661 compare -0E2 0 -> 0 +ddcom662 compare 0E1 0 -> 0 +ddcom663 compare 0E2 0 -> 0 +ddcom664 compare -0E1 -0E1 -> 0 +ddcom665 compare -0E2 -0E1 -> 0 +ddcom666 compare 0E1 -0E1 -> 0 +ddcom667 compare 0E2 -0E1 -> 0 +ddcom668 compare -0E1 -0E2 -> 0 +ddcom669 compare -0E2 -0E2 -> 0 +ddcom670 compare 0E1 -0E2 -> 0 +ddcom671 compare 0E2 -0E2 -> 0 +ddcom672 compare -0E1 0E1 -> 0 +ddcom673 compare -0E2 0E1 -> 0 +ddcom674 compare 0E1 0E1 -> 0 +ddcom675 compare 0E2 0E1 -> 0 +ddcom676 compare -0E1 0E2 -> 0 +ddcom677 compare -0E2 0E2 -> 0 +ddcom678 compare 0E1 0E2 -> 0 +ddcom679 compare 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +ddcom680 compare 12 12 -> 0 +ddcom681 compare 12 12.0 -> 0 +ddcom682 compare 12 12.00 -> 0 +ddcom683 compare 12 12.000 -> 0 +ddcom684 compare 12 12.0000 -> 0 +ddcom685 compare 12 12.00000 -> 0 +ddcom686 compare 12 12.000000 -> 0 +ddcom687 compare 12 12.0000000 -> 0 +ddcom688 compare 12 12.00000000 -> 0 +ddcom689 compare 12 12.000000000 -> 0 +ddcom690 compare 12 12 -> 0 +ddcom691 compare 12.0 12 -> 0 +ddcom692 compare 12.00 12 -> 0 +ddcom693 compare 12.000 12 -> 0 +ddcom694 compare 12.0000 12 -> 0 +ddcom695 compare 12.00000 12 -> 0 +ddcom696 compare 12.000000 12 -> 0 +ddcom697 compare 12.0000000 12 -> 0 +ddcom698 compare 12.00000000 12 -> 0 +ddcom699 compare 12.000000000 12 -> 0 + +-- first, second, & last digit +ddcom700 compare 1234567890123456 1234567890123455 -> 1 +ddcom701 compare 1234567890123456 1234567890123456 -> 0 +ddcom702 compare 1234567890123456 1234567890123457 -> -1 +ddcom703 compare 1234567890123456 0234567890123456 -> 1 +ddcom704 compare 1234567890123456 1234567890123456 -> 0 +ddcom705 compare 1234567890123456 2234567890123456 -> -1 +ddcom706 compare 1134567890123456 1034567890123456 -> 1 +ddcom707 compare 1134567890123456 1134567890123456 -> 0 +ddcom708 compare 1134567890123456 1234567890123456 -> -1 + +-- miscellaneous +ddcom721 compare 12345678000 1 -> 1 +ddcom722 compare 1 12345678000 -> -1 +ddcom723 compare 1234567800 1 -> 1 +ddcom724 compare 1 1234567800 -> -1 +ddcom725 compare 1234567890 1 -> 1 +ddcom726 compare 1 1234567890 -> -1 +ddcom727 compare 1234567891 1 -> 1 +ddcom728 compare 1 1234567891 -> -1 +ddcom729 compare 12345678901 1 -> 1 +ddcom730 compare 1 12345678901 -> -1 +ddcom731 compare 1234567896 1 -> 1 +ddcom732 compare 1 1234567896 -> -1 + +-- residue cases at lower precision +ddcom740 compare 1 0.9999999 -> 1 +ddcom741 compare 1 0.999999 -> 1 +ddcom742 compare 1 0.99999 -> 1 +ddcom743 compare 1 1.0000 -> 0 +ddcom744 compare 1 1.00001 -> -1 +ddcom745 compare 1 1.000001 -> -1 +ddcom746 compare 1 1.0000001 -> -1 +ddcom750 compare 0.9999999 1 -> -1 +ddcom751 compare 0.999999 1 -> -1 +ddcom752 compare 0.99999 1 -> -1 +ddcom753 compare 1.0000 1 -> 0 +ddcom754 compare 1.00001 1 -> 1 +ddcom755 compare 1.000001 1 -> 1 +ddcom756 compare 1.0000001 1 -> 1 + +-- Specials +ddcom780 compare Inf -Inf -> 1 +ddcom781 compare Inf -1000 -> 1 +ddcom782 compare Inf -1 -> 1 +ddcom783 compare Inf -0 -> 1 +ddcom784 compare Inf 0 -> 1 +ddcom785 compare Inf 1 -> 1 +ddcom786 compare Inf 1000 -> 1 +ddcom787 compare Inf Inf -> 0 +ddcom788 compare -1000 Inf -> -1 +ddcom789 compare -Inf Inf -> -1 +ddcom790 compare -1 Inf -> -1 +ddcom791 compare -0 Inf -> -1 +ddcom792 compare 0 Inf -> -1 +ddcom793 compare 1 Inf -> -1 +ddcom794 compare 1000 Inf -> -1 +ddcom795 compare Inf Inf -> 0 + +ddcom800 compare -Inf -Inf -> 0 +ddcom801 compare -Inf -1000 -> -1 +ddcom802 compare -Inf -1 -> -1 +ddcom803 compare -Inf -0 -> -1 +ddcom804 compare -Inf 0 -> -1 +ddcom805 compare -Inf 1 -> -1 +ddcom806 compare -Inf 1000 -> -1 +ddcom807 compare -Inf Inf -> -1 +ddcom808 compare -Inf -Inf -> 0 +ddcom809 compare -1000 -Inf -> 1 +ddcom810 compare -1 -Inf -> 1 +ddcom811 compare -0 -Inf -> 1 +ddcom812 compare 0 -Inf -> 1 +ddcom813 compare 1 -Inf -> 1 +ddcom814 compare 1000 -Inf -> 1 +ddcom815 compare Inf -Inf -> 1 + +ddcom821 compare NaN -Inf -> NaN +ddcom822 compare NaN -1000 -> NaN +ddcom823 compare NaN -1 -> NaN +ddcom824 compare NaN -0 -> NaN +ddcom825 compare NaN 0 -> NaN +ddcom826 compare NaN 1 -> NaN +ddcom827 compare NaN 1000 -> NaN +ddcom828 compare NaN Inf -> NaN +ddcom829 compare NaN NaN -> NaN +ddcom830 compare -Inf NaN -> NaN +ddcom831 compare -1000 NaN -> NaN +ddcom832 compare -1 NaN -> NaN +ddcom833 compare -0 NaN -> NaN +ddcom834 compare 0 NaN -> NaN +ddcom835 compare 1 NaN -> NaN +ddcom836 compare 1000 NaN -> NaN +ddcom837 compare Inf NaN -> NaN +ddcom838 compare -NaN -NaN -> -NaN +ddcom839 compare +NaN -NaN -> NaN +ddcom840 compare -NaN +NaN -> -NaN + +ddcom841 compare sNaN -Inf -> NaN Invalid_operation +ddcom842 compare sNaN -1000 -> NaN Invalid_operation +ddcom843 compare sNaN -1 -> NaN Invalid_operation +ddcom844 compare sNaN -0 -> NaN Invalid_operation +ddcom845 compare sNaN 0 -> NaN Invalid_operation +ddcom846 compare sNaN 1 -> NaN Invalid_operation +ddcom847 compare sNaN 1000 -> NaN Invalid_operation +ddcom848 compare sNaN NaN -> NaN Invalid_operation +ddcom849 compare sNaN sNaN -> NaN Invalid_operation +ddcom850 compare NaN sNaN -> NaN Invalid_operation +ddcom851 compare -Inf sNaN -> NaN Invalid_operation +ddcom852 compare -1000 sNaN -> NaN Invalid_operation +ddcom853 compare -1 sNaN -> NaN Invalid_operation +ddcom854 compare -0 sNaN -> NaN Invalid_operation +ddcom855 compare 0 sNaN -> NaN Invalid_operation +ddcom856 compare 1 sNaN -> NaN Invalid_operation +ddcom857 compare 1000 sNaN -> NaN Invalid_operation +ddcom858 compare Inf sNaN -> NaN Invalid_operation +ddcom859 compare NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddcom860 compare NaN9 -Inf -> NaN9 +ddcom861 compare NaN8 999 -> NaN8 +ddcom862 compare NaN77 Inf -> NaN77 +ddcom863 compare -NaN67 NaN5 -> -NaN67 +ddcom864 compare -Inf -NaN4 -> -NaN4 +ddcom865 compare -999 -NaN33 -> -NaN33 +ddcom866 compare Inf NaN2 -> NaN2 +ddcom867 compare -NaN41 -NaN42 -> -NaN41 +ddcom868 compare +NaN41 -NaN42 -> NaN41 +ddcom869 compare -NaN41 +NaN42 -> -NaN41 +ddcom870 compare +NaN41 +NaN42 -> NaN41 + +ddcom871 compare -sNaN99 -Inf -> -NaN99 Invalid_operation +ddcom872 compare sNaN98 -11 -> NaN98 Invalid_operation +ddcom873 compare sNaN97 NaN -> NaN97 Invalid_operation +ddcom874 compare sNaN16 sNaN94 -> NaN16 Invalid_operation +ddcom875 compare NaN85 sNaN83 -> NaN83 Invalid_operation +ddcom876 compare -Inf sNaN92 -> NaN92 Invalid_operation +ddcom877 compare 088 sNaN81 -> NaN81 Invalid_operation +ddcom878 compare Inf sNaN90 -> NaN90 Invalid_operation +ddcom879 compare NaN -sNaN89 -> -NaN89 Invalid_operation + +-- wide range +ddcom880 compare +1.23456789012345E-0 9E+384 -> -1 +ddcom881 compare 9E+384 +1.23456789012345E-0 -> 1 +ddcom882 compare +0.100 9E-383 -> 1 +ddcom883 compare 9E-383 +0.100 -> -1 +ddcom885 compare -1.23456789012345E-0 9E+384 -> -1 +ddcom886 compare 9E+384 -1.23456789012345E-0 -> 1 +ddcom887 compare -0.100 9E-383 -> -1 +ddcom888 compare 9E-383 -0.100 -> 1 + +-- spread zeros +ddcom900 compare 0E-383 0 -> 0 +ddcom901 compare 0E-383 -0 -> 0 +ddcom902 compare -0E-383 0 -> 0 +ddcom903 compare -0E-383 -0 -> 0 +ddcom904 compare 0E-383 0E+384 -> 0 +ddcom905 compare 0E-383 -0E+384 -> 0 +ddcom906 compare -0E-383 0E+384 -> 0 +ddcom907 compare -0E-383 -0E+384 -> 0 +ddcom908 compare 0 0E+384 -> 0 +ddcom909 compare 0 -0E+384 -> 0 +ddcom910 compare -0 0E+384 -> 0 +ddcom911 compare -0 -0E+384 -> 0 +ddcom930 compare 0E+384 0 -> 0 +ddcom931 compare 0E+384 -0 -> 0 +ddcom932 compare -0E+384 0 -> 0 +ddcom933 compare -0E+384 -0 -> 0 +ddcom934 compare 0E+384 0E-383 -> 0 +ddcom935 compare 0E+384 -0E-383 -> 0 +ddcom936 compare -0E+384 0E-383 -> 0 +ddcom937 compare -0E+384 -0E-383 -> 0 +ddcom938 compare 0 0E-383 -> 0 +ddcom939 compare 0 -0E-383 -> 0 +ddcom940 compare -0 0E-383 -> 0 +ddcom941 compare -0 -0E-383 -> 0 + +-- signs +ddcom961 compare 1e+77 1e+11 -> 1 +ddcom962 compare 1e+77 -1e+11 -> 1 +ddcom963 compare -1e+77 1e+11 -> -1 +ddcom964 compare -1e+77 -1e+11 -> -1 +ddcom965 compare 1e-77 1e-11 -> -1 +ddcom966 compare 1e-77 -1e-11 -> 1 +ddcom967 compare -1e-77 1e-11 -> -1 +ddcom968 compare -1e-77 -1e-11 -> 1 + +-- full alignment range, both ways +ddcomp1001 compare 1 1.000000000000000 -> 0 +ddcomp1002 compare 1 1.00000000000000 -> 0 +ddcomp1003 compare 1 1.0000000000000 -> 0 +ddcomp1004 compare 1 1.000000000000 -> 0 +ddcomp1005 compare 1 1.00000000000 -> 0 +ddcomp1006 compare 1 1.0000000000 -> 0 +ddcomp1007 compare 1 1.000000000 -> 0 +ddcomp1008 compare 1 1.00000000 -> 0 +ddcomp1009 compare 1 1.0000000 -> 0 +ddcomp1010 compare 1 1.000000 -> 0 +ddcomp1011 compare 1 1.00000 -> 0 +ddcomp1012 compare 1 1.0000 -> 0 +ddcomp1013 compare 1 1.000 -> 0 +ddcomp1014 compare 1 1.00 -> 0 +ddcomp1015 compare 1 1.0 -> 0 +ddcomp1021 compare 1.000000000000000 1 -> 0 +ddcomp1022 compare 1.00000000000000 1 -> 0 +ddcomp1023 compare 1.0000000000000 1 -> 0 +ddcomp1024 compare 1.000000000000 1 -> 0 +ddcomp1025 compare 1.00000000000 1 -> 0 +ddcomp1026 compare 1.0000000000 1 -> 0 +ddcomp1027 compare 1.000000000 1 -> 0 +ddcomp1028 compare 1.00000000 1 -> 0 +ddcomp1029 compare 1.0000000 1 -> 0 +ddcomp1030 compare 1.000000 1 -> 0 +ddcomp1031 compare 1.00000 1 -> 0 +ddcomp1032 compare 1.0000 1 -> 0 +ddcomp1033 compare 1.000 1 -> 0 +ddcomp1034 compare 1.00 1 -> 0 +ddcomp1035 compare 1.0 1 -> 0 + +-- check MSD always detected non-zero +ddcomp1040 compare 0 0.000000000000000 -> 0 +ddcomp1041 compare 0 1.000000000000000 -> -1 +ddcomp1042 compare 0 2.000000000000000 -> -1 +ddcomp1043 compare 0 3.000000000000000 -> -1 +ddcomp1044 compare 0 4.000000000000000 -> -1 +ddcomp1045 compare 0 5.000000000000000 -> -1 +ddcomp1046 compare 0 6.000000000000000 -> -1 +ddcomp1047 compare 0 7.000000000000000 -> -1 +ddcomp1048 compare 0 8.000000000000000 -> -1 +ddcomp1049 compare 0 9.000000000000000 -> -1 +ddcomp1050 compare 0.000000000000000 0 -> 0 +ddcomp1051 compare 1.000000000000000 0 -> 1 +ddcomp1052 compare 2.000000000000000 0 -> 1 +ddcomp1053 compare 3.000000000000000 0 -> 1 +ddcomp1054 compare 4.000000000000000 0 -> 1 +ddcomp1055 compare 5.000000000000000 0 -> 1 +ddcomp1056 compare 6.000000000000000 0 -> 1 +ddcomp1057 compare 7.000000000000000 0 -> 1 +ddcomp1058 compare 8.000000000000000 0 -> 1 +ddcomp1059 compare 9.000000000000000 0 -> 1 + +-- Null tests +ddcom9990 compare 10 # -> NaN Invalid_operation +ddcom9991 compare # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddCompareSig.decTest b/Lib/test/decimaltestdata/ddCompareSig.decTest index c82ec455170..8d3fce08c7c 100644 --- a/Lib/test/decimaltestdata/ddCompareSig.decTest +++ b/Lib/test/decimaltestdata/ddCompareSig.decTest @@ -1,647 +1,647 @@ ------------------------------------------------------------------------- --- ddCompareSig.decTest -- decDouble comparison; all NaNs signal -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddcms001 comparesig -2 -2 -> 0 -ddcms002 comparesig -2 -1 -> -1 -ddcms003 comparesig -2 0 -> -1 -ddcms004 comparesig -2 1 -> -1 -ddcms005 comparesig -2 2 -> -1 -ddcms006 comparesig -1 -2 -> 1 -ddcms007 comparesig -1 -1 -> 0 -ddcms008 comparesig -1 0 -> -1 -ddcms009 comparesig -1 1 -> -1 -ddcms010 comparesig -1 2 -> -1 -ddcms011 comparesig 0 -2 -> 1 -ddcms012 comparesig 0 -1 -> 1 -ddcms013 comparesig 0 0 -> 0 -ddcms014 comparesig 0 1 -> -1 -ddcms015 comparesig 0 2 -> -1 -ddcms016 comparesig 1 -2 -> 1 -ddcms017 comparesig 1 -1 -> 1 -ddcms018 comparesig 1 0 -> 1 -ddcms019 comparesig 1 1 -> 0 -ddcms020 comparesig 1 2 -> -1 -ddcms021 comparesig 2 -2 -> 1 -ddcms022 comparesig 2 -1 -> 1 -ddcms023 comparesig 2 0 -> 1 -ddcms025 comparesig 2 1 -> 1 -ddcms026 comparesig 2 2 -> 0 - -ddcms031 comparesig -20 -20 -> 0 -ddcms032 comparesig -20 -10 -> -1 -ddcms033 comparesig -20 00 -> -1 -ddcms034 comparesig -20 10 -> -1 -ddcms035 comparesig -20 20 -> -1 -ddcms036 comparesig -10 -20 -> 1 -ddcms037 comparesig -10 -10 -> 0 -ddcms038 comparesig -10 00 -> -1 -ddcms039 comparesig -10 10 -> -1 -ddcms040 comparesig -10 20 -> -1 -ddcms041 comparesig 00 -20 -> 1 -ddcms042 comparesig 00 -10 -> 1 -ddcms043 comparesig 00 00 -> 0 -ddcms044 comparesig 00 10 -> -1 -ddcms045 comparesig 00 20 -> -1 -ddcms046 comparesig 10 -20 -> 1 -ddcms047 comparesig 10 -10 -> 1 -ddcms048 comparesig 10 00 -> 1 -ddcms049 comparesig 10 10 -> 0 -ddcms050 comparesig 10 20 -> -1 -ddcms051 comparesig 20 -20 -> 1 -ddcms052 comparesig 20 -10 -> 1 -ddcms053 comparesig 20 00 -> 1 -ddcms055 comparesig 20 10 -> 1 -ddcms056 comparesig 20 20 -> 0 - -ddcms061 comparesig -2.0 -2.0 -> 0 -ddcms062 comparesig -2.0 -1.0 -> -1 -ddcms063 comparesig -2.0 0.0 -> -1 -ddcms064 comparesig -2.0 1.0 -> -1 -ddcms065 comparesig -2.0 2.0 -> -1 -ddcms066 comparesig -1.0 -2.0 -> 1 -ddcms067 comparesig -1.0 -1.0 -> 0 -ddcms068 comparesig -1.0 0.0 -> -1 -ddcms069 comparesig -1.0 1.0 -> -1 -ddcms070 comparesig -1.0 2.0 -> -1 -ddcms071 comparesig 0.0 -2.0 -> 1 -ddcms072 comparesig 0.0 -1.0 -> 1 -ddcms073 comparesig 0.0 0.0 -> 0 -ddcms074 comparesig 0.0 1.0 -> -1 -ddcms075 comparesig 0.0 2.0 -> -1 -ddcms076 comparesig 1.0 -2.0 -> 1 -ddcms077 comparesig 1.0 -1.0 -> 1 -ddcms078 comparesig 1.0 0.0 -> 1 -ddcms079 comparesig 1.0 1.0 -> 0 -ddcms080 comparesig 1.0 2.0 -> -1 -ddcms081 comparesig 2.0 -2.0 -> 1 -ddcms082 comparesig 2.0 -1.0 -> 1 -ddcms083 comparesig 2.0 0.0 -> 1 -ddcms085 comparesig 2.0 1.0 -> 1 -ddcms086 comparesig 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -ddcms090 comparesig 9.999999999999999E+384 9.999999999999999E+384 -> 0 -ddcms091 comparesig -9.999999999999999E+384 9.999999999999999E+384 -> -1 -ddcms092 comparesig 9.999999999999999E+384 -9.999999999999999E+384 -> 1 -ddcms093 comparesig -9.999999999999999E+384 -9.999999999999999E+384 -> 0 - --- some differing length/exponent cases -ddcms100 comparesig 7.0 7.0 -> 0 -ddcms101 comparesig 7.0 7 -> 0 -ddcms102 comparesig 7 7.0 -> 0 -ddcms103 comparesig 7E+0 7.0 -> 0 -ddcms104 comparesig 70E-1 7.0 -> 0 -ddcms105 comparesig 0.7E+1 7 -> 0 -ddcms106 comparesig 70E-1 7 -> 0 -ddcms107 comparesig 7.0 7E+0 -> 0 -ddcms108 comparesig 7.0 70E-1 -> 0 -ddcms109 comparesig 7 0.7E+1 -> 0 -ddcms110 comparesig 7 70E-1 -> 0 - -ddcms120 comparesig 8.0 7.0 -> 1 -ddcms121 comparesig 8.0 7 -> 1 -ddcms122 comparesig 8 7.0 -> 1 -ddcms123 comparesig 8E+0 7.0 -> 1 -ddcms124 comparesig 80E-1 7.0 -> 1 -ddcms125 comparesig 0.8E+1 7 -> 1 -ddcms126 comparesig 80E-1 7 -> 1 -ddcms127 comparesig 8.0 7E+0 -> 1 -ddcms128 comparesig 8.0 70E-1 -> 1 -ddcms129 comparesig 8 0.7E+1 -> 1 -ddcms130 comparesig 8 70E-1 -> 1 - -ddcms140 comparesig 8.0 9.0 -> -1 -ddcms141 comparesig 8.0 9 -> -1 -ddcms142 comparesig 8 9.0 -> -1 -ddcms143 comparesig 8E+0 9.0 -> -1 -ddcms144 comparesig 80E-1 9.0 -> -1 -ddcms145 comparesig 0.8E+1 9 -> -1 -ddcms146 comparesig 80E-1 9 -> -1 -ddcms147 comparesig 8.0 9E+0 -> -1 -ddcms148 comparesig 8.0 90E-1 -> -1 -ddcms149 comparesig 8 0.9E+1 -> -1 -ddcms150 comparesig 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ddcms200 comparesig -7.0 7.0 -> -1 -ddcms201 comparesig -7.0 7 -> -1 -ddcms202 comparesig -7 7.0 -> -1 -ddcms203 comparesig -7E+0 7.0 -> -1 -ddcms204 comparesig -70E-1 7.0 -> -1 -ddcms205 comparesig -0.7E+1 7 -> -1 -ddcms206 comparesig -70E-1 7 -> -1 -ddcms207 comparesig -7.0 7E+0 -> -1 -ddcms208 comparesig -7.0 70E-1 -> -1 -ddcms209 comparesig -7 0.7E+1 -> -1 -ddcms210 comparesig -7 70E-1 -> -1 - -ddcms220 comparesig -8.0 7.0 -> -1 -ddcms221 comparesig -8.0 7 -> -1 -ddcms222 comparesig -8 7.0 -> -1 -ddcms223 comparesig -8E+0 7.0 -> -1 -ddcms224 comparesig -80E-1 7.0 -> -1 -ddcms225 comparesig -0.8E+1 7 -> -1 -ddcms226 comparesig -80E-1 7 -> -1 -ddcms227 comparesig -8.0 7E+0 -> -1 -ddcms228 comparesig -8.0 70E-1 -> -1 -ddcms229 comparesig -8 0.7E+1 -> -1 -ddcms230 comparesig -8 70E-1 -> -1 - -ddcms240 comparesig -8.0 9.0 -> -1 -ddcms241 comparesig -8.0 9 -> -1 -ddcms242 comparesig -8 9.0 -> -1 -ddcms243 comparesig -8E+0 9.0 -> -1 -ddcms244 comparesig -80E-1 9.0 -> -1 -ddcms245 comparesig -0.8E+1 9 -> -1 -ddcms246 comparesig -80E-1 9 -> -1 -ddcms247 comparesig -8.0 9E+0 -> -1 -ddcms248 comparesig -8.0 90E-1 -> -1 -ddcms249 comparesig -8 0.9E+1 -> -1 -ddcms250 comparesig -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ddcms300 comparesig 7.0 -7.0 -> 1 -ddcms301 comparesig 7.0 -7 -> 1 -ddcms302 comparesig 7 -7.0 -> 1 -ddcms303 comparesig 7E+0 -7.0 -> 1 -ddcms304 comparesig 70E-1 -7.0 -> 1 -ddcms305 comparesig .7E+1 -7 -> 1 -ddcms306 comparesig 70E-1 -7 -> 1 -ddcms307 comparesig 7.0 -7E+0 -> 1 -ddcms308 comparesig 7.0 -70E-1 -> 1 -ddcms309 comparesig 7 -.7E+1 -> 1 -ddcms310 comparesig 7 -70E-1 -> 1 - -ddcms320 comparesig 8.0 -7.0 -> 1 -ddcms321 comparesig 8.0 -7 -> 1 -ddcms322 comparesig 8 -7.0 -> 1 -ddcms323 comparesig 8E+0 -7.0 -> 1 -ddcms324 comparesig 80E-1 -7.0 -> 1 -ddcms325 comparesig .8E+1 -7 -> 1 -ddcms326 comparesig 80E-1 -7 -> 1 -ddcms327 comparesig 8.0 -7E+0 -> 1 -ddcms328 comparesig 8.0 -70E-1 -> 1 -ddcms329 comparesig 8 -.7E+1 -> 1 -ddcms330 comparesig 8 -70E-1 -> 1 - -ddcms340 comparesig 8.0 -9.0 -> 1 -ddcms341 comparesig 8.0 -9 -> 1 -ddcms342 comparesig 8 -9.0 -> 1 -ddcms343 comparesig 8E+0 -9.0 -> 1 -ddcms344 comparesig 80E-1 -9.0 -> 1 -ddcms345 comparesig .8E+1 -9 -> 1 -ddcms346 comparesig 80E-1 -9 -> 1 -ddcms347 comparesig 8.0 -9E+0 -> 1 -ddcms348 comparesig 8.0 -90E-1 -> 1 -ddcms349 comparesig 8 -.9E+1 -> 1 -ddcms350 comparesig 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -ddcms400 comparesig -7.0 -7.0 -> 0 -ddcms401 comparesig -7.0 -7 -> 0 -ddcms402 comparesig -7 -7.0 -> 0 -ddcms403 comparesig -7E+0 -7.0 -> 0 -ddcms404 comparesig -70E-1 -7.0 -> 0 -ddcms405 comparesig -.7E+1 -7 -> 0 -ddcms406 comparesig -70E-1 -7 -> 0 -ddcms407 comparesig -7.0 -7E+0 -> 0 -ddcms408 comparesig -7.0 -70E-1 -> 0 -ddcms409 comparesig -7 -.7E+1 -> 0 -ddcms410 comparesig -7 -70E-1 -> 0 - -ddcms420 comparesig -8.0 -7.0 -> -1 -ddcms421 comparesig -8.0 -7 -> -1 -ddcms422 comparesig -8 -7.0 -> -1 -ddcms423 comparesig -8E+0 -7.0 -> -1 -ddcms424 comparesig -80E-1 -7.0 -> -1 -ddcms425 comparesig -.8E+1 -7 -> -1 -ddcms426 comparesig -80E-1 -7 -> -1 -ddcms427 comparesig -8.0 -7E+0 -> -1 -ddcms428 comparesig -8.0 -70E-1 -> -1 -ddcms429 comparesig -8 -.7E+1 -> -1 -ddcms430 comparesig -8 -70E-1 -> -1 - -ddcms440 comparesig -8.0 -9.0 -> 1 -ddcms441 comparesig -8.0 -9 -> 1 -ddcms442 comparesig -8 -9.0 -> 1 -ddcms443 comparesig -8E+0 -9.0 -> 1 -ddcms444 comparesig -80E-1 -9.0 -> 1 -ddcms445 comparesig -.8E+1 -9 -> 1 -ddcms446 comparesig -80E-1 -9 -> 1 -ddcms447 comparesig -8.0 -9E+0 -> 1 -ddcms448 comparesig -8.0 -90E-1 -> 1 -ddcms449 comparesig -8 -.9E+1 -> 1 -ddcms450 comparesig -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -ddcms473 comparesig 123.4560000000000E-89 123.456E-89 -> 0 -ddcms474 comparesig 123.456000000000E+89 123.456E+89 -> 0 -ddcms475 comparesig 123.45600000000E-89 123.456E-89 -> 0 -ddcms476 comparesig 123.4560000000E+89 123.456E+89 -> 0 -ddcms477 comparesig 123.456000000E-89 123.456E-89 -> 0 -ddcms478 comparesig 123.45600000E+89 123.456E+89 -> 0 -ddcms479 comparesig 123.4560000E-89 123.456E-89 -> 0 -ddcms480 comparesig 123.456000E+89 123.456E+89 -> 0 -ddcms481 comparesig 123.45600E-89 123.456E-89 -> 0 -ddcms482 comparesig 123.4560E+89 123.456E+89 -> 0 -ddcms483 comparesig 123.456E-89 123.456E-89 -> 0 -ddcms487 comparesig 123.456E+89 123.4560000000000E+89 -> 0 -ddcms488 comparesig 123.456E-89 123.456000000000E-89 -> 0 -ddcms489 comparesig 123.456E+89 123.45600000000E+89 -> 0 -ddcms490 comparesig 123.456E-89 123.4560000000E-89 -> 0 -ddcms491 comparesig 123.456E+89 123.456000000E+89 -> 0 -ddcms492 comparesig 123.456E-89 123.45600000E-89 -> 0 -ddcms493 comparesig 123.456E+89 123.4560000E+89 -> 0 -ddcms494 comparesig 123.456E-89 123.456000E-89 -> 0 -ddcms495 comparesig 123.456E+89 123.45600E+89 -> 0 -ddcms496 comparesig 123.456E-89 123.4560E-89 -> 0 -ddcms497 comparesig 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -ddcms500 comparesig 1 1E-15 -> 1 -ddcms501 comparesig 1 1E-14 -> 1 -ddcms502 comparesig 1 1E-13 -> 1 -ddcms503 comparesig 1 1E-12 -> 1 -ddcms504 comparesig 1 1E-11 -> 1 -ddcms505 comparesig 1 1E-10 -> 1 -ddcms506 comparesig 1 1E-9 -> 1 -ddcms507 comparesig 1 1E-8 -> 1 -ddcms508 comparesig 1 1E-7 -> 1 -ddcms509 comparesig 1 1E-6 -> 1 -ddcms510 comparesig 1 1E-5 -> 1 -ddcms511 comparesig 1 1E-4 -> 1 -ddcms512 comparesig 1 1E-3 -> 1 -ddcms513 comparesig 1 1E-2 -> 1 -ddcms514 comparesig 1 1E-1 -> 1 -ddcms515 comparesig 1 1E-0 -> 0 -ddcms516 comparesig 1 1E+1 -> -1 -ddcms517 comparesig 1 1E+2 -> -1 -ddcms518 comparesig 1 1E+3 -> -1 -ddcms519 comparesig 1 1E+4 -> -1 -ddcms521 comparesig 1 1E+5 -> -1 -ddcms522 comparesig 1 1E+6 -> -1 -ddcms523 comparesig 1 1E+7 -> -1 -ddcms524 comparesig 1 1E+8 -> -1 -ddcms525 comparesig 1 1E+9 -> -1 -ddcms526 comparesig 1 1E+10 -> -1 -ddcms527 comparesig 1 1E+11 -> -1 -ddcms528 comparesig 1 1E+12 -> -1 -ddcms529 comparesig 1 1E+13 -> -1 -ddcms530 comparesig 1 1E+14 -> -1 -ddcms531 comparesig 1 1E+15 -> -1 --- LR swap -ddcms540 comparesig 1E-15 1 -> -1 -ddcms541 comparesig 1E-14 1 -> -1 -ddcms542 comparesig 1E-13 1 -> -1 -ddcms543 comparesig 1E-12 1 -> -1 -ddcms544 comparesig 1E-11 1 -> -1 -ddcms545 comparesig 1E-10 1 -> -1 -ddcms546 comparesig 1E-9 1 -> -1 -ddcms547 comparesig 1E-8 1 -> -1 -ddcms548 comparesig 1E-7 1 -> -1 -ddcms549 comparesig 1E-6 1 -> -1 -ddcms550 comparesig 1E-5 1 -> -1 -ddcms551 comparesig 1E-4 1 -> -1 -ddcms552 comparesig 1E-3 1 -> -1 -ddcms553 comparesig 1E-2 1 -> -1 -ddcms554 comparesig 1E-1 1 -> -1 -ddcms555 comparesig 1E-0 1 -> 0 -ddcms556 comparesig 1E+1 1 -> 1 -ddcms557 comparesig 1E+2 1 -> 1 -ddcms558 comparesig 1E+3 1 -> 1 -ddcms559 comparesig 1E+4 1 -> 1 -ddcms561 comparesig 1E+5 1 -> 1 -ddcms562 comparesig 1E+6 1 -> 1 -ddcms563 comparesig 1E+7 1 -> 1 -ddcms564 comparesig 1E+8 1 -> 1 -ddcms565 comparesig 1E+9 1 -> 1 -ddcms566 comparesig 1E+10 1 -> 1 -ddcms567 comparesig 1E+11 1 -> 1 -ddcms568 comparesig 1E+12 1 -> 1 -ddcms569 comparesig 1E+13 1 -> 1 -ddcms570 comparesig 1E+14 1 -> 1 -ddcms571 comparesig 1E+15 1 -> 1 --- similar with a useful coefficient, one side only -ddcms580 comparesig 0.000000987654321 1E-15 -> 1 -ddcms581 comparesig 0.000000987654321 1E-14 -> 1 -ddcms582 comparesig 0.000000987654321 1E-13 -> 1 -ddcms583 comparesig 0.000000987654321 1E-12 -> 1 -ddcms584 comparesig 0.000000987654321 1E-11 -> 1 -ddcms585 comparesig 0.000000987654321 1E-10 -> 1 -ddcms586 comparesig 0.000000987654321 1E-9 -> 1 -ddcms587 comparesig 0.000000987654321 1E-8 -> 1 -ddcms588 comparesig 0.000000987654321 1E-7 -> 1 -ddcms589 comparesig 0.000000987654321 1E-6 -> -1 -ddcms590 comparesig 0.000000987654321 1E-5 -> -1 -ddcms591 comparesig 0.000000987654321 1E-4 -> -1 -ddcms592 comparesig 0.000000987654321 1E-3 -> -1 -ddcms593 comparesig 0.000000987654321 1E-2 -> -1 -ddcms594 comparesig 0.000000987654321 1E-1 -> -1 -ddcms595 comparesig 0.000000987654321 1E-0 -> -1 -ddcms596 comparesig 0.000000987654321 1E+1 -> -1 -ddcms597 comparesig 0.000000987654321 1E+2 -> -1 -ddcms598 comparesig 0.000000987654321 1E+3 -> -1 -ddcms599 comparesig 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -ddcms600 comparesig 12 12.2345 -> -1 -ddcms601 comparesig 12.0 12.2345 -> -1 -ddcms602 comparesig 12.00 12.2345 -> -1 -ddcms603 comparesig 12.000 12.2345 -> -1 -ddcms604 comparesig 12.0000 12.2345 -> -1 -ddcms605 comparesig 12.00000 12.2345 -> -1 -ddcms606 comparesig 12.000000 12.2345 -> -1 -ddcms607 comparesig 12.0000000 12.2345 -> -1 -ddcms608 comparesig 12.00000000 12.2345 -> -1 -ddcms609 comparesig 12.000000000 12.2345 -> -1 -ddcms610 comparesig 12.1234 12 -> 1 -ddcms611 comparesig 12.1234 12.0 -> 1 -ddcms612 comparesig 12.1234 12.00 -> 1 -ddcms613 comparesig 12.1234 12.000 -> 1 -ddcms614 comparesig 12.1234 12.0000 -> 1 -ddcms615 comparesig 12.1234 12.00000 -> 1 -ddcms616 comparesig 12.1234 12.000000 -> 1 -ddcms617 comparesig 12.1234 12.0000000 -> 1 -ddcms618 comparesig 12.1234 12.00000000 -> 1 -ddcms619 comparesig 12.1234 12.000000000 -> 1 -ddcms620 comparesig -12 -12.2345 -> 1 -ddcms621 comparesig -12.0 -12.2345 -> 1 -ddcms622 comparesig -12.00 -12.2345 -> 1 -ddcms623 comparesig -12.000 -12.2345 -> 1 -ddcms624 comparesig -12.0000 -12.2345 -> 1 -ddcms625 comparesig -12.00000 -12.2345 -> 1 -ddcms626 comparesig -12.000000 -12.2345 -> 1 -ddcms627 comparesig -12.0000000 -12.2345 -> 1 -ddcms628 comparesig -12.00000000 -12.2345 -> 1 -ddcms629 comparesig -12.000000000 -12.2345 -> 1 -ddcms630 comparesig -12.1234 -12 -> -1 -ddcms631 comparesig -12.1234 -12.0 -> -1 -ddcms632 comparesig -12.1234 -12.00 -> -1 -ddcms633 comparesig -12.1234 -12.000 -> -1 -ddcms634 comparesig -12.1234 -12.0000 -> -1 -ddcms635 comparesig -12.1234 -12.00000 -> -1 -ddcms636 comparesig -12.1234 -12.000000 -> -1 -ddcms637 comparesig -12.1234 -12.0000000 -> -1 -ddcms638 comparesig -12.1234 -12.00000000 -> -1 -ddcms639 comparesig -12.1234 -12.000000000 -> -1 - --- extended zeros -ddcms640 comparesig 0 0 -> 0 -ddcms641 comparesig 0 -0 -> 0 -ddcms642 comparesig 0 -0.0 -> 0 -ddcms643 comparesig 0 0.0 -> 0 -ddcms644 comparesig -0 0 -> 0 -ddcms645 comparesig -0 -0 -> 0 -ddcms646 comparesig -0 -0.0 -> 0 -ddcms647 comparesig -0 0.0 -> 0 -ddcms648 comparesig 0.0 0 -> 0 -ddcms649 comparesig 0.0 -0 -> 0 -ddcms650 comparesig 0.0 -0.0 -> 0 -ddcms651 comparesig 0.0 0.0 -> 0 -ddcms652 comparesig -0.0 0 -> 0 -ddcms653 comparesig -0.0 -0 -> 0 -ddcms654 comparesig -0.0 -0.0 -> 0 -ddcms655 comparesig -0.0 0.0 -> 0 - -ddcms656 comparesig -0E1 0.0 -> 0 -ddcms657 comparesig -0E2 0.0 -> 0 -ddcms658 comparesig 0E1 0.0 -> 0 -ddcms659 comparesig 0E2 0.0 -> 0 -ddcms660 comparesig -0E1 0 -> 0 -ddcms661 comparesig -0E2 0 -> 0 -ddcms662 comparesig 0E1 0 -> 0 -ddcms663 comparesig 0E2 0 -> 0 -ddcms664 comparesig -0E1 -0E1 -> 0 -ddcms665 comparesig -0E2 -0E1 -> 0 -ddcms666 comparesig 0E1 -0E1 -> 0 -ddcms667 comparesig 0E2 -0E1 -> 0 -ddcms668 comparesig -0E1 -0E2 -> 0 -ddcms669 comparesig -0E2 -0E2 -> 0 -ddcms670 comparesig 0E1 -0E2 -> 0 -ddcms671 comparesig 0E2 -0E2 -> 0 -ddcms672 comparesig -0E1 0E1 -> 0 -ddcms673 comparesig -0E2 0E1 -> 0 -ddcms674 comparesig 0E1 0E1 -> 0 -ddcms675 comparesig 0E2 0E1 -> 0 -ddcms676 comparesig -0E1 0E2 -> 0 -ddcms677 comparesig -0E2 0E2 -> 0 -ddcms678 comparesig 0E1 0E2 -> 0 -ddcms679 comparesig 0E2 0E2 -> 0 - --- trailing zeros; unit-y -ddcms680 comparesig 12 12 -> 0 -ddcms681 comparesig 12 12.0 -> 0 -ddcms682 comparesig 12 12.00 -> 0 -ddcms683 comparesig 12 12.000 -> 0 -ddcms684 comparesig 12 12.0000 -> 0 -ddcms685 comparesig 12 12.00000 -> 0 -ddcms686 comparesig 12 12.000000 -> 0 -ddcms687 comparesig 12 12.0000000 -> 0 -ddcms688 comparesig 12 12.00000000 -> 0 -ddcms689 comparesig 12 12.000000000 -> 0 -ddcms690 comparesig 12 12 -> 0 -ddcms691 comparesig 12.0 12 -> 0 -ddcms692 comparesig 12.00 12 -> 0 -ddcms693 comparesig 12.000 12 -> 0 -ddcms694 comparesig 12.0000 12 -> 0 -ddcms695 comparesig 12.00000 12 -> 0 -ddcms696 comparesig 12.000000 12 -> 0 -ddcms697 comparesig 12.0000000 12 -> 0 -ddcms698 comparesig 12.00000000 12 -> 0 -ddcms699 comparesig 12.000000000 12 -> 0 - --- first, second, & last digit -ddcms700 comparesig 1234567890123456 1234567890123455 -> 1 -ddcms701 comparesig 1234567890123456 1234567890123456 -> 0 -ddcms702 comparesig 1234567890123456 1234567890123457 -> -1 -ddcms703 comparesig 1234567890123456 0234567890123456 -> 1 -ddcms704 comparesig 1234567890123456 1234567890123456 -> 0 -ddcms705 comparesig 1234567890123456 2234567890123456 -> -1 -ddcms706 comparesig 1134567890123456 1034567890123456 -> 1 -ddcms707 comparesig 1134567890123456 1134567890123456 -> 0 -ddcms708 comparesig 1134567890123456 1234567890123456 -> -1 - --- miscellaneous -ddcms721 comparesig 12345678000 1 -> 1 -ddcms722 comparesig 1 12345678000 -> -1 -ddcms723 comparesig 1234567800 1 -> 1 -ddcms724 comparesig 1 1234567800 -> -1 -ddcms725 comparesig 1234567890 1 -> 1 -ddcms726 comparesig 1 1234567890 -> -1 -ddcms727 comparesig 1234567891 1 -> 1 -ddcms728 comparesig 1 1234567891 -> -1 -ddcms729 comparesig 12345678901 1 -> 1 -ddcms730 comparesig 1 12345678901 -> -1 -ddcms731 comparesig 1234567896 1 -> 1 -ddcms732 comparesig 1 1234567896 -> -1 - --- residue cases at lower precision -ddcms740 comparesig 1 0.9999999 -> 1 -ddcms741 comparesig 1 0.999999 -> 1 -ddcms742 comparesig 1 0.99999 -> 1 -ddcms743 comparesig 1 1.0000 -> 0 -ddcms744 comparesig 1 1.00001 -> -1 -ddcms745 comparesig 1 1.000001 -> -1 -ddcms746 comparesig 1 1.0000001 -> -1 -ddcms750 comparesig 0.9999999 1 -> -1 -ddcms751 comparesig 0.999999 1 -> -1 -ddcms752 comparesig 0.99999 1 -> -1 -ddcms753 comparesig 1.0000 1 -> 0 -ddcms754 comparesig 1.00001 1 -> 1 -ddcms755 comparesig 1.000001 1 -> 1 -ddcms756 comparesig 1.0000001 1 -> 1 - --- Specials -ddcms780 comparesig Inf -Inf -> 1 -ddcms781 comparesig Inf -1000 -> 1 -ddcms782 comparesig Inf -1 -> 1 -ddcms783 comparesig Inf -0 -> 1 -ddcms784 comparesig Inf 0 -> 1 -ddcms785 comparesig Inf 1 -> 1 -ddcms786 comparesig Inf 1000 -> 1 -ddcms787 comparesig Inf Inf -> 0 -ddcms788 comparesig -1000 Inf -> -1 -ddcms789 comparesig -Inf Inf -> -1 -ddcms790 comparesig -1 Inf -> -1 -ddcms791 comparesig -0 Inf -> -1 -ddcms792 comparesig 0 Inf -> -1 -ddcms793 comparesig 1 Inf -> -1 -ddcms794 comparesig 1000 Inf -> -1 -ddcms795 comparesig Inf Inf -> 0 - -ddcms800 comparesig -Inf -Inf -> 0 -ddcms801 comparesig -Inf -1000 -> -1 -ddcms802 comparesig -Inf -1 -> -1 -ddcms803 comparesig -Inf -0 -> -1 -ddcms804 comparesig -Inf 0 -> -1 -ddcms805 comparesig -Inf 1 -> -1 -ddcms806 comparesig -Inf 1000 -> -1 -ddcms807 comparesig -Inf Inf -> -1 -ddcms808 comparesig -Inf -Inf -> 0 -ddcms809 comparesig -1000 -Inf -> 1 -ddcms810 comparesig -1 -Inf -> 1 -ddcms811 comparesig -0 -Inf -> 1 -ddcms812 comparesig 0 -Inf -> 1 -ddcms813 comparesig 1 -Inf -> 1 -ddcms814 comparesig 1000 -Inf -> 1 -ddcms815 comparesig Inf -Inf -> 1 - -ddcms821 comparesig NaN -Inf -> NaN Invalid_operation -ddcms822 comparesig NaN -1000 -> NaN Invalid_operation -ddcms823 comparesig NaN -1 -> NaN Invalid_operation -ddcms824 comparesig NaN -0 -> NaN Invalid_operation -ddcms825 comparesig NaN 0 -> NaN Invalid_operation -ddcms826 comparesig NaN 1 -> NaN Invalid_operation -ddcms827 comparesig NaN 1000 -> NaN Invalid_operation -ddcms828 comparesig NaN Inf -> NaN Invalid_operation -ddcms829 comparesig NaN NaN -> NaN Invalid_operation -ddcms830 comparesig -Inf NaN -> NaN Invalid_operation -ddcms831 comparesig -1000 NaN -> NaN Invalid_operation -ddcms832 comparesig -1 NaN -> NaN Invalid_operation -ddcms833 comparesig -0 NaN -> NaN Invalid_operation -ddcms834 comparesig 0 NaN -> NaN Invalid_operation -ddcms835 comparesig 1 NaN -> NaN Invalid_operation -ddcms836 comparesig 1000 NaN -> NaN Invalid_operation -ddcms837 comparesig Inf NaN -> NaN Invalid_operation -ddcms838 comparesig -NaN -NaN -> -NaN Invalid_operation -ddcms839 comparesig +NaN -NaN -> NaN Invalid_operation -ddcms840 comparesig -NaN +NaN -> -NaN Invalid_operation - -ddcms841 comparesig sNaN -Inf -> NaN Invalid_operation -ddcms842 comparesig sNaN -1000 -> NaN Invalid_operation -ddcms843 comparesig sNaN -1 -> NaN Invalid_operation -ddcms844 comparesig sNaN -0 -> NaN Invalid_operation -ddcms845 comparesig sNaN 0 -> NaN Invalid_operation -ddcms846 comparesig sNaN 1 -> NaN Invalid_operation -ddcms847 comparesig sNaN 1000 -> NaN Invalid_operation -ddcms848 comparesig sNaN NaN -> NaN Invalid_operation -ddcms849 comparesig sNaN sNaN -> NaN Invalid_operation -ddcms850 comparesig NaN sNaN -> NaN Invalid_operation -ddcms851 comparesig -Inf sNaN -> NaN Invalid_operation -ddcms852 comparesig -1000 sNaN -> NaN Invalid_operation -ddcms853 comparesig -1 sNaN -> NaN Invalid_operation -ddcms854 comparesig -0 sNaN -> NaN Invalid_operation -ddcms855 comparesig 0 sNaN -> NaN Invalid_operation -ddcms856 comparesig 1 sNaN -> NaN Invalid_operation -ddcms857 comparesig 1000 sNaN -> NaN Invalid_operation -ddcms858 comparesig Inf sNaN -> NaN Invalid_operation -ddcms859 comparesig NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddcms860 comparesig NaN9 -Inf -> NaN9 Invalid_operation -ddcms861 comparesig NaN8 999 -> NaN8 Invalid_operation -ddcms862 comparesig NaN77 Inf -> NaN77 Invalid_operation -ddcms863 comparesig -NaN67 NaN5 -> -NaN67 Invalid_operation -ddcms864 comparesig -Inf -NaN4 -> -NaN4 Invalid_operation -ddcms865 comparesig -999 -NaN33 -> -NaN33 Invalid_operation -ddcms866 comparesig Inf NaN2 -> NaN2 Invalid_operation -ddcms867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation -ddcms868 comparesig +NaN41 -NaN42 -> NaN41 Invalid_operation -ddcms869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation -ddcms870 comparesig +NaN41 +NaN42 -> NaN41 Invalid_operation - -ddcms871 comparesig -sNaN99 -Inf -> -NaN99 Invalid_operation -ddcms872 comparesig sNaN98 -11 -> NaN98 Invalid_operation -ddcms873 comparesig sNaN97 NaN -> NaN97 Invalid_operation -ddcms874 comparesig sNaN16 sNaN94 -> NaN16 Invalid_operation -ddcms875 comparesig NaN85 sNaN83 -> NaN83 Invalid_operation -ddcms876 comparesig -Inf sNaN92 -> NaN92 Invalid_operation -ddcms877 comparesig 088 sNaN81 -> NaN81 Invalid_operation -ddcms878 comparesig Inf sNaN90 -> NaN90 Invalid_operation -ddcms879 comparesig NaN -sNaN89 -> -NaN89 Invalid_operation - --- wide range -ddcms880 comparesig +1.23456789012345E-0 9E+384 -> -1 -ddcms881 comparesig 9E+384 +1.23456789012345E-0 -> 1 -ddcms882 comparesig +0.100 9E-383 -> 1 -ddcms883 comparesig 9E-383 +0.100 -> -1 -ddcms885 comparesig -1.23456789012345E-0 9E+384 -> -1 -ddcms886 comparesig 9E+384 -1.23456789012345E-0 -> 1 -ddcms887 comparesig -0.100 9E-383 -> -1 -ddcms888 comparesig 9E-383 -0.100 -> 1 - --- signs -ddcms901 comparesig 1e+77 1e+11 -> 1 -ddcms902 comparesig 1e+77 -1e+11 -> 1 -ddcms903 comparesig -1e+77 1e+11 -> -1 -ddcms904 comparesig -1e+77 -1e+11 -> -1 -ddcms905 comparesig 1e-77 1e-11 -> -1 -ddcms906 comparesig 1e-77 -1e-11 -> 1 -ddcms907 comparesig -1e-77 1e-11 -> -1 -ddcms908 comparesig -1e-77 -1e-11 -> 1 - --- Null tests -ddcms990 comparesig 10 # -> NaN Invalid_operation -ddcms991 comparesig # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddCompareSig.decTest -- decDouble comparison; all NaNs signal -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddcms001 comparesig -2 -2 -> 0 +ddcms002 comparesig -2 -1 -> -1 +ddcms003 comparesig -2 0 -> -1 +ddcms004 comparesig -2 1 -> -1 +ddcms005 comparesig -2 2 -> -1 +ddcms006 comparesig -1 -2 -> 1 +ddcms007 comparesig -1 -1 -> 0 +ddcms008 comparesig -1 0 -> -1 +ddcms009 comparesig -1 1 -> -1 +ddcms010 comparesig -1 2 -> -1 +ddcms011 comparesig 0 -2 -> 1 +ddcms012 comparesig 0 -1 -> 1 +ddcms013 comparesig 0 0 -> 0 +ddcms014 comparesig 0 1 -> -1 +ddcms015 comparesig 0 2 -> -1 +ddcms016 comparesig 1 -2 -> 1 +ddcms017 comparesig 1 -1 -> 1 +ddcms018 comparesig 1 0 -> 1 +ddcms019 comparesig 1 1 -> 0 +ddcms020 comparesig 1 2 -> -1 +ddcms021 comparesig 2 -2 -> 1 +ddcms022 comparesig 2 -1 -> 1 +ddcms023 comparesig 2 0 -> 1 +ddcms025 comparesig 2 1 -> 1 +ddcms026 comparesig 2 2 -> 0 + +ddcms031 comparesig -20 -20 -> 0 +ddcms032 comparesig -20 -10 -> -1 +ddcms033 comparesig -20 00 -> -1 +ddcms034 comparesig -20 10 -> -1 +ddcms035 comparesig -20 20 -> -1 +ddcms036 comparesig -10 -20 -> 1 +ddcms037 comparesig -10 -10 -> 0 +ddcms038 comparesig -10 00 -> -1 +ddcms039 comparesig -10 10 -> -1 +ddcms040 comparesig -10 20 -> -1 +ddcms041 comparesig 00 -20 -> 1 +ddcms042 comparesig 00 -10 -> 1 +ddcms043 comparesig 00 00 -> 0 +ddcms044 comparesig 00 10 -> -1 +ddcms045 comparesig 00 20 -> -1 +ddcms046 comparesig 10 -20 -> 1 +ddcms047 comparesig 10 -10 -> 1 +ddcms048 comparesig 10 00 -> 1 +ddcms049 comparesig 10 10 -> 0 +ddcms050 comparesig 10 20 -> -1 +ddcms051 comparesig 20 -20 -> 1 +ddcms052 comparesig 20 -10 -> 1 +ddcms053 comparesig 20 00 -> 1 +ddcms055 comparesig 20 10 -> 1 +ddcms056 comparesig 20 20 -> 0 + +ddcms061 comparesig -2.0 -2.0 -> 0 +ddcms062 comparesig -2.0 -1.0 -> -1 +ddcms063 comparesig -2.0 0.0 -> -1 +ddcms064 comparesig -2.0 1.0 -> -1 +ddcms065 comparesig -2.0 2.0 -> -1 +ddcms066 comparesig -1.0 -2.0 -> 1 +ddcms067 comparesig -1.0 -1.0 -> 0 +ddcms068 comparesig -1.0 0.0 -> -1 +ddcms069 comparesig -1.0 1.0 -> -1 +ddcms070 comparesig -1.0 2.0 -> -1 +ddcms071 comparesig 0.0 -2.0 -> 1 +ddcms072 comparesig 0.0 -1.0 -> 1 +ddcms073 comparesig 0.0 0.0 -> 0 +ddcms074 comparesig 0.0 1.0 -> -1 +ddcms075 comparesig 0.0 2.0 -> -1 +ddcms076 comparesig 1.0 -2.0 -> 1 +ddcms077 comparesig 1.0 -1.0 -> 1 +ddcms078 comparesig 1.0 0.0 -> 1 +ddcms079 comparesig 1.0 1.0 -> 0 +ddcms080 comparesig 1.0 2.0 -> -1 +ddcms081 comparesig 2.0 -2.0 -> 1 +ddcms082 comparesig 2.0 -1.0 -> 1 +ddcms083 comparesig 2.0 0.0 -> 1 +ddcms085 comparesig 2.0 1.0 -> 1 +ddcms086 comparesig 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +ddcms090 comparesig 9.999999999999999E+384 9.999999999999999E+384 -> 0 +ddcms091 comparesig -9.999999999999999E+384 9.999999999999999E+384 -> -1 +ddcms092 comparesig 9.999999999999999E+384 -9.999999999999999E+384 -> 1 +ddcms093 comparesig -9.999999999999999E+384 -9.999999999999999E+384 -> 0 + +-- some differing length/exponent cases +ddcms100 comparesig 7.0 7.0 -> 0 +ddcms101 comparesig 7.0 7 -> 0 +ddcms102 comparesig 7 7.0 -> 0 +ddcms103 comparesig 7E+0 7.0 -> 0 +ddcms104 comparesig 70E-1 7.0 -> 0 +ddcms105 comparesig 0.7E+1 7 -> 0 +ddcms106 comparesig 70E-1 7 -> 0 +ddcms107 comparesig 7.0 7E+0 -> 0 +ddcms108 comparesig 7.0 70E-1 -> 0 +ddcms109 comparesig 7 0.7E+1 -> 0 +ddcms110 comparesig 7 70E-1 -> 0 + +ddcms120 comparesig 8.0 7.0 -> 1 +ddcms121 comparesig 8.0 7 -> 1 +ddcms122 comparesig 8 7.0 -> 1 +ddcms123 comparesig 8E+0 7.0 -> 1 +ddcms124 comparesig 80E-1 7.0 -> 1 +ddcms125 comparesig 0.8E+1 7 -> 1 +ddcms126 comparesig 80E-1 7 -> 1 +ddcms127 comparesig 8.0 7E+0 -> 1 +ddcms128 comparesig 8.0 70E-1 -> 1 +ddcms129 comparesig 8 0.7E+1 -> 1 +ddcms130 comparesig 8 70E-1 -> 1 + +ddcms140 comparesig 8.0 9.0 -> -1 +ddcms141 comparesig 8.0 9 -> -1 +ddcms142 comparesig 8 9.0 -> -1 +ddcms143 comparesig 8E+0 9.0 -> -1 +ddcms144 comparesig 80E-1 9.0 -> -1 +ddcms145 comparesig 0.8E+1 9 -> -1 +ddcms146 comparesig 80E-1 9 -> -1 +ddcms147 comparesig 8.0 9E+0 -> -1 +ddcms148 comparesig 8.0 90E-1 -> -1 +ddcms149 comparesig 8 0.9E+1 -> -1 +ddcms150 comparesig 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ddcms200 comparesig -7.0 7.0 -> -1 +ddcms201 comparesig -7.0 7 -> -1 +ddcms202 comparesig -7 7.0 -> -1 +ddcms203 comparesig -7E+0 7.0 -> -1 +ddcms204 comparesig -70E-1 7.0 -> -1 +ddcms205 comparesig -0.7E+1 7 -> -1 +ddcms206 comparesig -70E-1 7 -> -1 +ddcms207 comparesig -7.0 7E+0 -> -1 +ddcms208 comparesig -7.0 70E-1 -> -1 +ddcms209 comparesig -7 0.7E+1 -> -1 +ddcms210 comparesig -7 70E-1 -> -1 + +ddcms220 comparesig -8.0 7.0 -> -1 +ddcms221 comparesig -8.0 7 -> -1 +ddcms222 comparesig -8 7.0 -> -1 +ddcms223 comparesig -8E+0 7.0 -> -1 +ddcms224 comparesig -80E-1 7.0 -> -1 +ddcms225 comparesig -0.8E+1 7 -> -1 +ddcms226 comparesig -80E-1 7 -> -1 +ddcms227 comparesig -8.0 7E+0 -> -1 +ddcms228 comparesig -8.0 70E-1 -> -1 +ddcms229 comparesig -8 0.7E+1 -> -1 +ddcms230 comparesig -8 70E-1 -> -1 + +ddcms240 comparesig -8.0 9.0 -> -1 +ddcms241 comparesig -8.0 9 -> -1 +ddcms242 comparesig -8 9.0 -> -1 +ddcms243 comparesig -8E+0 9.0 -> -1 +ddcms244 comparesig -80E-1 9.0 -> -1 +ddcms245 comparesig -0.8E+1 9 -> -1 +ddcms246 comparesig -80E-1 9 -> -1 +ddcms247 comparesig -8.0 9E+0 -> -1 +ddcms248 comparesig -8.0 90E-1 -> -1 +ddcms249 comparesig -8 0.9E+1 -> -1 +ddcms250 comparesig -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ddcms300 comparesig 7.0 -7.0 -> 1 +ddcms301 comparesig 7.0 -7 -> 1 +ddcms302 comparesig 7 -7.0 -> 1 +ddcms303 comparesig 7E+0 -7.0 -> 1 +ddcms304 comparesig 70E-1 -7.0 -> 1 +ddcms305 comparesig .7E+1 -7 -> 1 +ddcms306 comparesig 70E-1 -7 -> 1 +ddcms307 comparesig 7.0 -7E+0 -> 1 +ddcms308 comparesig 7.0 -70E-1 -> 1 +ddcms309 comparesig 7 -.7E+1 -> 1 +ddcms310 comparesig 7 -70E-1 -> 1 + +ddcms320 comparesig 8.0 -7.0 -> 1 +ddcms321 comparesig 8.0 -7 -> 1 +ddcms322 comparesig 8 -7.0 -> 1 +ddcms323 comparesig 8E+0 -7.0 -> 1 +ddcms324 comparesig 80E-1 -7.0 -> 1 +ddcms325 comparesig .8E+1 -7 -> 1 +ddcms326 comparesig 80E-1 -7 -> 1 +ddcms327 comparesig 8.0 -7E+0 -> 1 +ddcms328 comparesig 8.0 -70E-1 -> 1 +ddcms329 comparesig 8 -.7E+1 -> 1 +ddcms330 comparesig 8 -70E-1 -> 1 + +ddcms340 comparesig 8.0 -9.0 -> 1 +ddcms341 comparesig 8.0 -9 -> 1 +ddcms342 comparesig 8 -9.0 -> 1 +ddcms343 comparesig 8E+0 -9.0 -> 1 +ddcms344 comparesig 80E-1 -9.0 -> 1 +ddcms345 comparesig .8E+1 -9 -> 1 +ddcms346 comparesig 80E-1 -9 -> 1 +ddcms347 comparesig 8.0 -9E+0 -> 1 +ddcms348 comparesig 8.0 -90E-1 -> 1 +ddcms349 comparesig 8 -.9E+1 -> 1 +ddcms350 comparesig 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +ddcms400 comparesig -7.0 -7.0 -> 0 +ddcms401 comparesig -7.0 -7 -> 0 +ddcms402 comparesig -7 -7.0 -> 0 +ddcms403 comparesig -7E+0 -7.0 -> 0 +ddcms404 comparesig -70E-1 -7.0 -> 0 +ddcms405 comparesig -.7E+1 -7 -> 0 +ddcms406 comparesig -70E-1 -7 -> 0 +ddcms407 comparesig -7.0 -7E+0 -> 0 +ddcms408 comparesig -7.0 -70E-1 -> 0 +ddcms409 comparesig -7 -.7E+1 -> 0 +ddcms410 comparesig -7 -70E-1 -> 0 + +ddcms420 comparesig -8.0 -7.0 -> -1 +ddcms421 comparesig -8.0 -7 -> -1 +ddcms422 comparesig -8 -7.0 -> -1 +ddcms423 comparesig -8E+0 -7.0 -> -1 +ddcms424 comparesig -80E-1 -7.0 -> -1 +ddcms425 comparesig -.8E+1 -7 -> -1 +ddcms426 comparesig -80E-1 -7 -> -1 +ddcms427 comparesig -8.0 -7E+0 -> -1 +ddcms428 comparesig -8.0 -70E-1 -> -1 +ddcms429 comparesig -8 -.7E+1 -> -1 +ddcms430 comparesig -8 -70E-1 -> -1 + +ddcms440 comparesig -8.0 -9.0 -> 1 +ddcms441 comparesig -8.0 -9 -> 1 +ddcms442 comparesig -8 -9.0 -> 1 +ddcms443 comparesig -8E+0 -9.0 -> 1 +ddcms444 comparesig -80E-1 -9.0 -> 1 +ddcms445 comparesig -.8E+1 -9 -> 1 +ddcms446 comparesig -80E-1 -9 -> 1 +ddcms447 comparesig -8.0 -9E+0 -> 1 +ddcms448 comparesig -8.0 -90E-1 -> 1 +ddcms449 comparesig -8 -.9E+1 -> 1 +ddcms450 comparesig -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +ddcms473 comparesig 123.4560000000000E-89 123.456E-89 -> 0 +ddcms474 comparesig 123.456000000000E+89 123.456E+89 -> 0 +ddcms475 comparesig 123.45600000000E-89 123.456E-89 -> 0 +ddcms476 comparesig 123.4560000000E+89 123.456E+89 -> 0 +ddcms477 comparesig 123.456000000E-89 123.456E-89 -> 0 +ddcms478 comparesig 123.45600000E+89 123.456E+89 -> 0 +ddcms479 comparesig 123.4560000E-89 123.456E-89 -> 0 +ddcms480 comparesig 123.456000E+89 123.456E+89 -> 0 +ddcms481 comparesig 123.45600E-89 123.456E-89 -> 0 +ddcms482 comparesig 123.4560E+89 123.456E+89 -> 0 +ddcms483 comparesig 123.456E-89 123.456E-89 -> 0 +ddcms487 comparesig 123.456E+89 123.4560000000000E+89 -> 0 +ddcms488 comparesig 123.456E-89 123.456000000000E-89 -> 0 +ddcms489 comparesig 123.456E+89 123.45600000000E+89 -> 0 +ddcms490 comparesig 123.456E-89 123.4560000000E-89 -> 0 +ddcms491 comparesig 123.456E+89 123.456000000E+89 -> 0 +ddcms492 comparesig 123.456E-89 123.45600000E-89 -> 0 +ddcms493 comparesig 123.456E+89 123.4560000E+89 -> 0 +ddcms494 comparesig 123.456E-89 123.456000E-89 -> 0 +ddcms495 comparesig 123.456E+89 123.45600E+89 -> 0 +ddcms496 comparesig 123.456E-89 123.4560E-89 -> 0 +ddcms497 comparesig 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +ddcms500 comparesig 1 1E-15 -> 1 +ddcms501 comparesig 1 1E-14 -> 1 +ddcms502 comparesig 1 1E-13 -> 1 +ddcms503 comparesig 1 1E-12 -> 1 +ddcms504 comparesig 1 1E-11 -> 1 +ddcms505 comparesig 1 1E-10 -> 1 +ddcms506 comparesig 1 1E-9 -> 1 +ddcms507 comparesig 1 1E-8 -> 1 +ddcms508 comparesig 1 1E-7 -> 1 +ddcms509 comparesig 1 1E-6 -> 1 +ddcms510 comparesig 1 1E-5 -> 1 +ddcms511 comparesig 1 1E-4 -> 1 +ddcms512 comparesig 1 1E-3 -> 1 +ddcms513 comparesig 1 1E-2 -> 1 +ddcms514 comparesig 1 1E-1 -> 1 +ddcms515 comparesig 1 1E-0 -> 0 +ddcms516 comparesig 1 1E+1 -> -1 +ddcms517 comparesig 1 1E+2 -> -1 +ddcms518 comparesig 1 1E+3 -> -1 +ddcms519 comparesig 1 1E+4 -> -1 +ddcms521 comparesig 1 1E+5 -> -1 +ddcms522 comparesig 1 1E+6 -> -1 +ddcms523 comparesig 1 1E+7 -> -1 +ddcms524 comparesig 1 1E+8 -> -1 +ddcms525 comparesig 1 1E+9 -> -1 +ddcms526 comparesig 1 1E+10 -> -1 +ddcms527 comparesig 1 1E+11 -> -1 +ddcms528 comparesig 1 1E+12 -> -1 +ddcms529 comparesig 1 1E+13 -> -1 +ddcms530 comparesig 1 1E+14 -> -1 +ddcms531 comparesig 1 1E+15 -> -1 +-- LR swap +ddcms540 comparesig 1E-15 1 -> -1 +ddcms541 comparesig 1E-14 1 -> -1 +ddcms542 comparesig 1E-13 1 -> -1 +ddcms543 comparesig 1E-12 1 -> -1 +ddcms544 comparesig 1E-11 1 -> -1 +ddcms545 comparesig 1E-10 1 -> -1 +ddcms546 comparesig 1E-9 1 -> -1 +ddcms547 comparesig 1E-8 1 -> -1 +ddcms548 comparesig 1E-7 1 -> -1 +ddcms549 comparesig 1E-6 1 -> -1 +ddcms550 comparesig 1E-5 1 -> -1 +ddcms551 comparesig 1E-4 1 -> -1 +ddcms552 comparesig 1E-3 1 -> -1 +ddcms553 comparesig 1E-2 1 -> -1 +ddcms554 comparesig 1E-1 1 -> -1 +ddcms555 comparesig 1E-0 1 -> 0 +ddcms556 comparesig 1E+1 1 -> 1 +ddcms557 comparesig 1E+2 1 -> 1 +ddcms558 comparesig 1E+3 1 -> 1 +ddcms559 comparesig 1E+4 1 -> 1 +ddcms561 comparesig 1E+5 1 -> 1 +ddcms562 comparesig 1E+6 1 -> 1 +ddcms563 comparesig 1E+7 1 -> 1 +ddcms564 comparesig 1E+8 1 -> 1 +ddcms565 comparesig 1E+9 1 -> 1 +ddcms566 comparesig 1E+10 1 -> 1 +ddcms567 comparesig 1E+11 1 -> 1 +ddcms568 comparesig 1E+12 1 -> 1 +ddcms569 comparesig 1E+13 1 -> 1 +ddcms570 comparesig 1E+14 1 -> 1 +ddcms571 comparesig 1E+15 1 -> 1 +-- similar with a useful coefficient, one side only +ddcms580 comparesig 0.000000987654321 1E-15 -> 1 +ddcms581 comparesig 0.000000987654321 1E-14 -> 1 +ddcms582 comparesig 0.000000987654321 1E-13 -> 1 +ddcms583 comparesig 0.000000987654321 1E-12 -> 1 +ddcms584 comparesig 0.000000987654321 1E-11 -> 1 +ddcms585 comparesig 0.000000987654321 1E-10 -> 1 +ddcms586 comparesig 0.000000987654321 1E-9 -> 1 +ddcms587 comparesig 0.000000987654321 1E-8 -> 1 +ddcms588 comparesig 0.000000987654321 1E-7 -> 1 +ddcms589 comparesig 0.000000987654321 1E-6 -> -1 +ddcms590 comparesig 0.000000987654321 1E-5 -> -1 +ddcms591 comparesig 0.000000987654321 1E-4 -> -1 +ddcms592 comparesig 0.000000987654321 1E-3 -> -1 +ddcms593 comparesig 0.000000987654321 1E-2 -> -1 +ddcms594 comparesig 0.000000987654321 1E-1 -> -1 +ddcms595 comparesig 0.000000987654321 1E-0 -> -1 +ddcms596 comparesig 0.000000987654321 1E+1 -> -1 +ddcms597 comparesig 0.000000987654321 1E+2 -> -1 +ddcms598 comparesig 0.000000987654321 1E+3 -> -1 +ddcms599 comparesig 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +ddcms600 comparesig 12 12.2345 -> -1 +ddcms601 comparesig 12.0 12.2345 -> -1 +ddcms602 comparesig 12.00 12.2345 -> -1 +ddcms603 comparesig 12.000 12.2345 -> -1 +ddcms604 comparesig 12.0000 12.2345 -> -1 +ddcms605 comparesig 12.00000 12.2345 -> -1 +ddcms606 comparesig 12.000000 12.2345 -> -1 +ddcms607 comparesig 12.0000000 12.2345 -> -1 +ddcms608 comparesig 12.00000000 12.2345 -> -1 +ddcms609 comparesig 12.000000000 12.2345 -> -1 +ddcms610 comparesig 12.1234 12 -> 1 +ddcms611 comparesig 12.1234 12.0 -> 1 +ddcms612 comparesig 12.1234 12.00 -> 1 +ddcms613 comparesig 12.1234 12.000 -> 1 +ddcms614 comparesig 12.1234 12.0000 -> 1 +ddcms615 comparesig 12.1234 12.00000 -> 1 +ddcms616 comparesig 12.1234 12.000000 -> 1 +ddcms617 comparesig 12.1234 12.0000000 -> 1 +ddcms618 comparesig 12.1234 12.00000000 -> 1 +ddcms619 comparesig 12.1234 12.000000000 -> 1 +ddcms620 comparesig -12 -12.2345 -> 1 +ddcms621 comparesig -12.0 -12.2345 -> 1 +ddcms622 comparesig -12.00 -12.2345 -> 1 +ddcms623 comparesig -12.000 -12.2345 -> 1 +ddcms624 comparesig -12.0000 -12.2345 -> 1 +ddcms625 comparesig -12.00000 -12.2345 -> 1 +ddcms626 comparesig -12.000000 -12.2345 -> 1 +ddcms627 comparesig -12.0000000 -12.2345 -> 1 +ddcms628 comparesig -12.00000000 -12.2345 -> 1 +ddcms629 comparesig -12.000000000 -12.2345 -> 1 +ddcms630 comparesig -12.1234 -12 -> -1 +ddcms631 comparesig -12.1234 -12.0 -> -1 +ddcms632 comparesig -12.1234 -12.00 -> -1 +ddcms633 comparesig -12.1234 -12.000 -> -1 +ddcms634 comparesig -12.1234 -12.0000 -> -1 +ddcms635 comparesig -12.1234 -12.00000 -> -1 +ddcms636 comparesig -12.1234 -12.000000 -> -1 +ddcms637 comparesig -12.1234 -12.0000000 -> -1 +ddcms638 comparesig -12.1234 -12.00000000 -> -1 +ddcms639 comparesig -12.1234 -12.000000000 -> -1 + +-- extended zeros +ddcms640 comparesig 0 0 -> 0 +ddcms641 comparesig 0 -0 -> 0 +ddcms642 comparesig 0 -0.0 -> 0 +ddcms643 comparesig 0 0.0 -> 0 +ddcms644 comparesig -0 0 -> 0 +ddcms645 comparesig -0 -0 -> 0 +ddcms646 comparesig -0 -0.0 -> 0 +ddcms647 comparesig -0 0.0 -> 0 +ddcms648 comparesig 0.0 0 -> 0 +ddcms649 comparesig 0.0 -0 -> 0 +ddcms650 comparesig 0.0 -0.0 -> 0 +ddcms651 comparesig 0.0 0.0 -> 0 +ddcms652 comparesig -0.0 0 -> 0 +ddcms653 comparesig -0.0 -0 -> 0 +ddcms654 comparesig -0.0 -0.0 -> 0 +ddcms655 comparesig -0.0 0.0 -> 0 + +ddcms656 comparesig -0E1 0.0 -> 0 +ddcms657 comparesig -0E2 0.0 -> 0 +ddcms658 comparesig 0E1 0.0 -> 0 +ddcms659 comparesig 0E2 0.0 -> 0 +ddcms660 comparesig -0E1 0 -> 0 +ddcms661 comparesig -0E2 0 -> 0 +ddcms662 comparesig 0E1 0 -> 0 +ddcms663 comparesig 0E2 0 -> 0 +ddcms664 comparesig -0E1 -0E1 -> 0 +ddcms665 comparesig -0E2 -0E1 -> 0 +ddcms666 comparesig 0E1 -0E1 -> 0 +ddcms667 comparesig 0E2 -0E1 -> 0 +ddcms668 comparesig -0E1 -0E2 -> 0 +ddcms669 comparesig -0E2 -0E2 -> 0 +ddcms670 comparesig 0E1 -0E2 -> 0 +ddcms671 comparesig 0E2 -0E2 -> 0 +ddcms672 comparesig -0E1 0E1 -> 0 +ddcms673 comparesig -0E2 0E1 -> 0 +ddcms674 comparesig 0E1 0E1 -> 0 +ddcms675 comparesig 0E2 0E1 -> 0 +ddcms676 comparesig -0E1 0E2 -> 0 +ddcms677 comparesig -0E2 0E2 -> 0 +ddcms678 comparesig 0E1 0E2 -> 0 +ddcms679 comparesig 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +ddcms680 comparesig 12 12 -> 0 +ddcms681 comparesig 12 12.0 -> 0 +ddcms682 comparesig 12 12.00 -> 0 +ddcms683 comparesig 12 12.000 -> 0 +ddcms684 comparesig 12 12.0000 -> 0 +ddcms685 comparesig 12 12.00000 -> 0 +ddcms686 comparesig 12 12.000000 -> 0 +ddcms687 comparesig 12 12.0000000 -> 0 +ddcms688 comparesig 12 12.00000000 -> 0 +ddcms689 comparesig 12 12.000000000 -> 0 +ddcms690 comparesig 12 12 -> 0 +ddcms691 comparesig 12.0 12 -> 0 +ddcms692 comparesig 12.00 12 -> 0 +ddcms693 comparesig 12.000 12 -> 0 +ddcms694 comparesig 12.0000 12 -> 0 +ddcms695 comparesig 12.00000 12 -> 0 +ddcms696 comparesig 12.000000 12 -> 0 +ddcms697 comparesig 12.0000000 12 -> 0 +ddcms698 comparesig 12.00000000 12 -> 0 +ddcms699 comparesig 12.000000000 12 -> 0 + +-- first, second, & last digit +ddcms700 comparesig 1234567890123456 1234567890123455 -> 1 +ddcms701 comparesig 1234567890123456 1234567890123456 -> 0 +ddcms702 comparesig 1234567890123456 1234567890123457 -> -1 +ddcms703 comparesig 1234567890123456 0234567890123456 -> 1 +ddcms704 comparesig 1234567890123456 1234567890123456 -> 0 +ddcms705 comparesig 1234567890123456 2234567890123456 -> -1 +ddcms706 comparesig 1134567890123456 1034567890123456 -> 1 +ddcms707 comparesig 1134567890123456 1134567890123456 -> 0 +ddcms708 comparesig 1134567890123456 1234567890123456 -> -1 + +-- miscellaneous +ddcms721 comparesig 12345678000 1 -> 1 +ddcms722 comparesig 1 12345678000 -> -1 +ddcms723 comparesig 1234567800 1 -> 1 +ddcms724 comparesig 1 1234567800 -> -1 +ddcms725 comparesig 1234567890 1 -> 1 +ddcms726 comparesig 1 1234567890 -> -1 +ddcms727 comparesig 1234567891 1 -> 1 +ddcms728 comparesig 1 1234567891 -> -1 +ddcms729 comparesig 12345678901 1 -> 1 +ddcms730 comparesig 1 12345678901 -> -1 +ddcms731 comparesig 1234567896 1 -> 1 +ddcms732 comparesig 1 1234567896 -> -1 + +-- residue cases at lower precision +ddcms740 comparesig 1 0.9999999 -> 1 +ddcms741 comparesig 1 0.999999 -> 1 +ddcms742 comparesig 1 0.99999 -> 1 +ddcms743 comparesig 1 1.0000 -> 0 +ddcms744 comparesig 1 1.00001 -> -1 +ddcms745 comparesig 1 1.000001 -> -1 +ddcms746 comparesig 1 1.0000001 -> -1 +ddcms750 comparesig 0.9999999 1 -> -1 +ddcms751 comparesig 0.999999 1 -> -1 +ddcms752 comparesig 0.99999 1 -> -1 +ddcms753 comparesig 1.0000 1 -> 0 +ddcms754 comparesig 1.00001 1 -> 1 +ddcms755 comparesig 1.000001 1 -> 1 +ddcms756 comparesig 1.0000001 1 -> 1 + +-- Specials +ddcms780 comparesig Inf -Inf -> 1 +ddcms781 comparesig Inf -1000 -> 1 +ddcms782 comparesig Inf -1 -> 1 +ddcms783 comparesig Inf -0 -> 1 +ddcms784 comparesig Inf 0 -> 1 +ddcms785 comparesig Inf 1 -> 1 +ddcms786 comparesig Inf 1000 -> 1 +ddcms787 comparesig Inf Inf -> 0 +ddcms788 comparesig -1000 Inf -> -1 +ddcms789 comparesig -Inf Inf -> -1 +ddcms790 comparesig -1 Inf -> -1 +ddcms791 comparesig -0 Inf -> -1 +ddcms792 comparesig 0 Inf -> -1 +ddcms793 comparesig 1 Inf -> -1 +ddcms794 comparesig 1000 Inf -> -1 +ddcms795 comparesig Inf Inf -> 0 + +ddcms800 comparesig -Inf -Inf -> 0 +ddcms801 comparesig -Inf -1000 -> -1 +ddcms802 comparesig -Inf -1 -> -1 +ddcms803 comparesig -Inf -0 -> -1 +ddcms804 comparesig -Inf 0 -> -1 +ddcms805 comparesig -Inf 1 -> -1 +ddcms806 comparesig -Inf 1000 -> -1 +ddcms807 comparesig -Inf Inf -> -1 +ddcms808 comparesig -Inf -Inf -> 0 +ddcms809 comparesig -1000 -Inf -> 1 +ddcms810 comparesig -1 -Inf -> 1 +ddcms811 comparesig -0 -Inf -> 1 +ddcms812 comparesig 0 -Inf -> 1 +ddcms813 comparesig 1 -Inf -> 1 +ddcms814 comparesig 1000 -Inf -> 1 +ddcms815 comparesig Inf -Inf -> 1 + +ddcms821 comparesig NaN -Inf -> NaN Invalid_operation +ddcms822 comparesig NaN -1000 -> NaN Invalid_operation +ddcms823 comparesig NaN -1 -> NaN Invalid_operation +ddcms824 comparesig NaN -0 -> NaN Invalid_operation +ddcms825 comparesig NaN 0 -> NaN Invalid_operation +ddcms826 comparesig NaN 1 -> NaN Invalid_operation +ddcms827 comparesig NaN 1000 -> NaN Invalid_operation +ddcms828 comparesig NaN Inf -> NaN Invalid_operation +ddcms829 comparesig NaN NaN -> NaN Invalid_operation +ddcms830 comparesig -Inf NaN -> NaN Invalid_operation +ddcms831 comparesig -1000 NaN -> NaN Invalid_operation +ddcms832 comparesig -1 NaN -> NaN Invalid_operation +ddcms833 comparesig -0 NaN -> NaN Invalid_operation +ddcms834 comparesig 0 NaN -> NaN Invalid_operation +ddcms835 comparesig 1 NaN -> NaN Invalid_operation +ddcms836 comparesig 1000 NaN -> NaN Invalid_operation +ddcms837 comparesig Inf NaN -> NaN Invalid_operation +ddcms838 comparesig -NaN -NaN -> -NaN Invalid_operation +ddcms839 comparesig +NaN -NaN -> NaN Invalid_operation +ddcms840 comparesig -NaN +NaN -> -NaN Invalid_operation + +ddcms841 comparesig sNaN -Inf -> NaN Invalid_operation +ddcms842 comparesig sNaN -1000 -> NaN Invalid_operation +ddcms843 comparesig sNaN -1 -> NaN Invalid_operation +ddcms844 comparesig sNaN -0 -> NaN Invalid_operation +ddcms845 comparesig sNaN 0 -> NaN Invalid_operation +ddcms846 comparesig sNaN 1 -> NaN Invalid_operation +ddcms847 comparesig sNaN 1000 -> NaN Invalid_operation +ddcms848 comparesig sNaN NaN -> NaN Invalid_operation +ddcms849 comparesig sNaN sNaN -> NaN Invalid_operation +ddcms850 comparesig NaN sNaN -> NaN Invalid_operation +ddcms851 comparesig -Inf sNaN -> NaN Invalid_operation +ddcms852 comparesig -1000 sNaN -> NaN Invalid_operation +ddcms853 comparesig -1 sNaN -> NaN Invalid_operation +ddcms854 comparesig -0 sNaN -> NaN Invalid_operation +ddcms855 comparesig 0 sNaN -> NaN Invalid_operation +ddcms856 comparesig 1 sNaN -> NaN Invalid_operation +ddcms857 comparesig 1000 sNaN -> NaN Invalid_operation +ddcms858 comparesig Inf sNaN -> NaN Invalid_operation +ddcms859 comparesig NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddcms860 comparesig NaN9 -Inf -> NaN9 Invalid_operation +ddcms861 comparesig NaN8 999 -> NaN8 Invalid_operation +ddcms862 comparesig NaN77 Inf -> NaN77 Invalid_operation +ddcms863 comparesig -NaN67 NaN5 -> -NaN67 Invalid_operation +ddcms864 comparesig -Inf -NaN4 -> -NaN4 Invalid_operation +ddcms865 comparesig -999 -NaN33 -> -NaN33 Invalid_operation +ddcms866 comparesig Inf NaN2 -> NaN2 Invalid_operation +ddcms867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation +ddcms868 comparesig +NaN41 -NaN42 -> NaN41 Invalid_operation +ddcms869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation +ddcms870 comparesig +NaN41 +NaN42 -> NaN41 Invalid_operation + +ddcms871 comparesig -sNaN99 -Inf -> -NaN99 Invalid_operation +ddcms872 comparesig sNaN98 -11 -> NaN98 Invalid_operation +ddcms873 comparesig sNaN97 NaN -> NaN97 Invalid_operation +ddcms874 comparesig sNaN16 sNaN94 -> NaN16 Invalid_operation +ddcms875 comparesig NaN85 sNaN83 -> NaN83 Invalid_operation +ddcms876 comparesig -Inf sNaN92 -> NaN92 Invalid_operation +ddcms877 comparesig 088 sNaN81 -> NaN81 Invalid_operation +ddcms878 comparesig Inf sNaN90 -> NaN90 Invalid_operation +ddcms879 comparesig NaN -sNaN89 -> -NaN89 Invalid_operation + +-- wide range +ddcms880 comparesig +1.23456789012345E-0 9E+384 -> -1 +ddcms881 comparesig 9E+384 +1.23456789012345E-0 -> 1 +ddcms882 comparesig +0.100 9E-383 -> 1 +ddcms883 comparesig 9E-383 +0.100 -> -1 +ddcms885 comparesig -1.23456789012345E-0 9E+384 -> -1 +ddcms886 comparesig 9E+384 -1.23456789012345E-0 -> 1 +ddcms887 comparesig -0.100 9E-383 -> -1 +ddcms888 comparesig 9E-383 -0.100 -> 1 + +-- signs +ddcms901 comparesig 1e+77 1e+11 -> 1 +ddcms902 comparesig 1e+77 -1e+11 -> 1 +ddcms903 comparesig -1e+77 1e+11 -> -1 +ddcms904 comparesig -1e+77 -1e+11 -> -1 +ddcms905 comparesig 1e-77 1e-11 -> -1 +ddcms906 comparesig 1e-77 -1e-11 -> 1 +ddcms907 comparesig -1e-77 1e-11 -> -1 +ddcms908 comparesig -1e-77 -1e-11 -> 1 + +-- Null tests +ddcms990 comparesig 10 # -> NaN Invalid_operation +ddcms991 comparesig # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddCompareTotal.decTest b/Lib/test/decimaltestdata/ddCompareTotal.decTest index 10c984c7ff5..76beed5681b 100644 --- a/Lib/test/decimaltestdata/ddCompareTotal.decTest +++ b/Lib/test/decimaltestdata/ddCompareTotal.decTest @@ -1,706 +1,706 @@ ------------------------------------------------------------------------- --- ddCompareTotal.decTest -- decDouble comparison using total ordering-- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddcot001 comparetotal -2 -2 -> 0 -ddcot002 comparetotal -2 -1 -> -1 -ddcot003 comparetotal -2 0 -> -1 -ddcot004 comparetotal -2 1 -> -1 -ddcot005 comparetotal -2 2 -> -1 -ddcot006 comparetotal -1 -2 -> 1 -ddcot007 comparetotal -1 -1 -> 0 -ddcot008 comparetotal -1 0 -> -1 -ddcot009 comparetotal -1 1 -> -1 -ddcot010 comparetotal -1 2 -> -1 -ddcot011 comparetotal 0 -2 -> 1 -ddcot012 comparetotal 0 -1 -> 1 -ddcot013 comparetotal 0 0 -> 0 -ddcot014 comparetotal 0 1 -> -1 -ddcot015 comparetotal 0 2 -> -1 -ddcot016 comparetotal 1 -2 -> 1 -ddcot017 comparetotal 1 -1 -> 1 -ddcot018 comparetotal 1 0 -> 1 -ddcot019 comparetotal 1 1 -> 0 -ddcot020 comparetotal 1 2 -> -1 -ddcot021 comparetotal 2 -2 -> 1 -ddcot022 comparetotal 2 -1 -> 1 -ddcot023 comparetotal 2 0 -> 1 -ddcot025 comparetotal 2 1 -> 1 -ddcot026 comparetotal 2 2 -> 0 - -ddcot031 comparetotal -20 -20 -> 0 -ddcot032 comparetotal -20 -10 -> -1 -ddcot033 comparetotal -20 00 -> -1 -ddcot034 comparetotal -20 10 -> -1 -ddcot035 comparetotal -20 20 -> -1 -ddcot036 comparetotal -10 -20 -> 1 -ddcot037 comparetotal -10 -10 -> 0 -ddcot038 comparetotal -10 00 -> -1 -ddcot039 comparetotal -10 10 -> -1 -ddcot040 comparetotal -10 20 -> -1 -ddcot041 comparetotal 00 -20 -> 1 -ddcot042 comparetotal 00 -10 -> 1 -ddcot043 comparetotal 00 00 -> 0 -ddcot044 comparetotal 00 10 -> -1 -ddcot045 comparetotal 00 20 -> -1 -ddcot046 comparetotal 10 -20 -> 1 -ddcot047 comparetotal 10 -10 -> 1 -ddcot048 comparetotal 10 00 -> 1 -ddcot049 comparetotal 10 10 -> 0 -ddcot050 comparetotal 10 20 -> -1 -ddcot051 comparetotal 20 -20 -> 1 -ddcot052 comparetotal 20 -10 -> 1 -ddcot053 comparetotal 20 00 -> 1 -ddcot055 comparetotal 20 10 -> 1 -ddcot056 comparetotal 20 20 -> 0 - -ddcot061 comparetotal -2.0 -2.0 -> 0 -ddcot062 comparetotal -2.0 -1.0 -> -1 -ddcot063 comparetotal -2.0 0.0 -> -1 -ddcot064 comparetotal -2.0 1.0 -> -1 -ddcot065 comparetotal -2.0 2.0 -> -1 -ddcot066 comparetotal -1.0 -2.0 -> 1 -ddcot067 comparetotal -1.0 -1.0 -> 0 -ddcot068 comparetotal -1.0 0.0 -> -1 -ddcot069 comparetotal -1.0 1.0 -> -1 -ddcot070 comparetotal -1.0 2.0 -> -1 -ddcot071 comparetotal 0.0 -2.0 -> 1 -ddcot072 comparetotal 0.0 -1.0 -> 1 -ddcot073 comparetotal 0.0 0.0 -> 0 -ddcot074 comparetotal 0.0 1.0 -> -1 -ddcot075 comparetotal 0.0 2.0 -> -1 -ddcot076 comparetotal 1.0 -2.0 -> 1 -ddcot077 comparetotal 1.0 -1.0 -> 1 -ddcot078 comparetotal 1.0 0.0 -> 1 -ddcot079 comparetotal 1.0 1.0 -> 0 -ddcot080 comparetotal 1.0 2.0 -> -1 -ddcot081 comparetotal 2.0 -2.0 -> 1 -ddcot082 comparetotal 2.0 -1.0 -> 1 -ddcot083 comparetotal 2.0 0.0 -> 1 -ddcot085 comparetotal 2.0 1.0 -> 1 -ddcot086 comparetotal 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -ddcot090 comparetotal 9.99999999E+384 9.99999999E+384 -> 0 -ddcot091 comparetotal -9.99999999E+384 9.99999999E+384 -> -1 -ddcot092 comparetotal 9.99999999E+384 -9.99999999E+384 -> 1 -ddcot093 comparetotal -9.99999999E+384 -9.99999999E+384 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -ddcot100 comparetotal 7.0 7.0 -> 0 -ddcot101 comparetotal 7.0 7 -> -1 -ddcot102 comparetotal 7 7.0 -> 1 -ddcot103 comparetotal 7E+0 7.0 -> 1 -ddcot104 comparetotal 70E-1 7.0 -> 0 -ddcot105 comparetotal 0.7E+1 7 -> 0 -ddcot106 comparetotal 70E-1 7 -> -1 -ddcot107 comparetotal 7.0 7E+0 -> -1 -ddcot108 comparetotal 7.0 70E-1 -> 0 -ddcot109 comparetotal 7 0.7E+1 -> 0 -ddcot110 comparetotal 7 70E-1 -> 1 - -ddcot120 comparetotal 8.0 7.0 -> 1 -ddcot121 comparetotal 8.0 7 -> 1 -ddcot122 comparetotal 8 7.0 -> 1 -ddcot123 comparetotal 8E+0 7.0 -> 1 -ddcot124 comparetotal 80E-1 7.0 -> 1 -ddcot125 comparetotal 0.8E+1 7 -> 1 -ddcot126 comparetotal 80E-1 7 -> 1 -ddcot127 comparetotal 8.0 7E+0 -> 1 -ddcot128 comparetotal 8.0 70E-1 -> 1 -ddcot129 comparetotal 8 0.7E+1 -> 1 -ddcot130 comparetotal 8 70E-1 -> 1 - -ddcot140 comparetotal 8.0 9.0 -> -1 -ddcot141 comparetotal 8.0 9 -> -1 -ddcot142 comparetotal 8 9.0 -> -1 -ddcot143 comparetotal 8E+0 9.0 -> -1 -ddcot144 comparetotal 80E-1 9.0 -> -1 -ddcot145 comparetotal 0.8E+1 9 -> -1 -ddcot146 comparetotal 80E-1 9 -> -1 -ddcot147 comparetotal 8.0 9E+0 -> -1 -ddcot148 comparetotal 8.0 90E-1 -> -1 -ddcot149 comparetotal 8 0.9E+1 -> -1 -ddcot150 comparetotal 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ddcot200 comparetotal -7.0 7.0 -> -1 -ddcot201 comparetotal -7.0 7 -> -1 -ddcot202 comparetotal -7 7.0 -> -1 -ddcot203 comparetotal -7E+0 7.0 -> -1 -ddcot204 comparetotal -70E-1 7.0 -> -1 -ddcot205 comparetotal -0.7E+1 7 -> -1 -ddcot206 comparetotal -70E-1 7 -> -1 -ddcot207 comparetotal -7.0 7E+0 -> -1 -ddcot208 comparetotal -7.0 70E-1 -> -1 -ddcot209 comparetotal -7 0.7E+1 -> -1 -ddcot210 comparetotal -7 70E-1 -> -1 - -ddcot220 comparetotal -8.0 7.0 -> -1 -ddcot221 comparetotal -8.0 7 -> -1 -ddcot222 comparetotal -8 7.0 -> -1 -ddcot223 comparetotal -8E+0 7.0 -> -1 -ddcot224 comparetotal -80E-1 7.0 -> -1 -ddcot225 comparetotal -0.8E+1 7 -> -1 -ddcot226 comparetotal -80E-1 7 -> -1 -ddcot227 comparetotal -8.0 7E+0 -> -1 -ddcot228 comparetotal -8.0 70E-1 -> -1 -ddcot229 comparetotal -8 0.7E+1 -> -1 -ddcot230 comparetotal -8 70E-1 -> -1 - -ddcot240 comparetotal -8.0 9.0 -> -1 -ddcot241 comparetotal -8.0 9 -> -1 -ddcot242 comparetotal -8 9.0 -> -1 -ddcot243 comparetotal -8E+0 9.0 -> -1 -ddcot244 comparetotal -80E-1 9.0 -> -1 -ddcot245 comparetotal -0.8E+1 9 -> -1 -ddcot246 comparetotal -80E-1 9 -> -1 -ddcot247 comparetotal -8.0 9E+0 -> -1 -ddcot248 comparetotal -8.0 90E-1 -> -1 -ddcot249 comparetotal -8 0.9E+1 -> -1 -ddcot250 comparetotal -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ddcot300 comparetotal 7.0 -7.0 -> 1 -ddcot301 comparetotal 7.0 -7 -> 1 -ddcot302 comparetotal 7 -7.0 -> 1 -ddcot303 comparetotal 7E+0 -7.0 -> 1 -ddcot304 comparetotal 70E-1 -7.0 -> 1 -ddcot305 comparetotal .7E+1 -7 -> 1 -ddcot306 comparetotal 70E-1 -7 -> 1 -ddcot307 comparetotal 7.0 -7E+0 -> 1 -ddcot308 comparetotal 7.0 -70E-1 -> 1 -ddcot309 comparetotal 7 -.7E+1 -> 1 -ddcot310 comparetotal 7 -70E-1 -> 1 - -ddcot320 comparetotal 8.0 -7.0 -> 1 -ddcot321 comparetotal 8.0 -7 -> 1 -ddcot322 comparetotal 8 -7.0 -> 1 -ddcot323 comparetotal 8E+0 -7.0 -> 1 -ddcot324 comparetotal 80E-1 -7.0 -> 1 -ddcot325 comparetotal .8E+1 -7 -> 1 -ddcot326 comparetotal 80E-1 -7 -> 1 -ddcot327 comparetotal 8.0 -7E+0 -> 1 -ddcot328 comparetotal 8.0 -70E-1 -> 1 -ddcot329 comparetotal 8 -.7E+1 -> 1 -ddcot330 comparetotal 8 -70E-1 -> 1 - -ddcot340 comparetotal 8.0 -9.0 -> 1 -ddcot341 comparetotal 8.0 -9 -> 1 -ddcot342 comparetotal 8 -9.0 -> 1 -ddcot343 comparetotal 8E+0 -9.0 -> 1 -ddcot344 comparetotal 80E-1 -9.0 -> 1 -ddcot345 comparetotal .8E+1 -9 -> 1 -ddcot346 comparetotal 80E-1 -9 -> 1 -ddcot347 comparetotal 8.0 -9E+0 -> 1 -ddcot348 comparetotal 8.0 -90E-1 -> 1 -ddcot349 comparetotal 8 -.9E+1 -> 1 -ddcot350 comparetotal 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -ddcot400 comparetotal -7.0 -7.0 -> 0 -ddcot401 comparetotal -7.0 -7 -> 1 -ddcot402 comparetotal -7 -7.0 -> -1 -ddcot403 comparetotal -7E+0 -7.0 -> -1 -ddcot404 comparetotal -70E-1 -7.0 -> 0 -ddcot405 comparetotal -.7E+1 -7 -> 0 -ddcot406 comparetotal -70E-1 -7 -> 1 -ddcot407 comparetotal -7.0 -7E+0 -> 1 -ddcot408 comparetotal -7.0 -70E-1 -> 0 -ddcot409 comparetotal -7 -.7E+1 -> 0 -ddcot410 comparetotal -7 -70E-1 -> -1 - -ddcot420 comparetotal -8.0 -7.0 -> -1 -ddcot421 comparetotal -8.0 -7 -> -1 -ddcot422 comparetotal -8 -7.0 -> -1 -ddcot423 comparetotal -8E+0 -7.0 -> -1 -ddcot424 comparetotal -80E-1 -7.0 -> -1 -ddcot425 comparetotal -.8E+1 -7 -> -1 -ddcot426 comparetotal -80E-1 -7 -> -1 -ddcot427 comparetotal -8.0 -7E+0 -> -1 -ddcot428 comparetotal -8.0 -70E-1 -> -1 -ddcot429 comparetotal -8 -.7E+1 -> -1 -ddcot430 comparetotal -8 -70E-1 -> -1 - -ddcot440 comparetotal -8.0 -9.0 -> 1 -ddcot441 comparetotal -8.0 -9 -> 1 -ddcot442 comparetotal -8 -9.0 -> 1 -ddcot443 comparetotal -8E+0 -9.0 -> 1 -ddcot444 comparetotal -80E-1 -9.0 -> 1 -ddcot445 comparetotal -.8E+1 -9 -> 1 -ddcot446 comparetotal -80E-1 -9 -> 1 -ddcot447 comparetotal -8.0 -9E+0 -> 1 -ddcot448 comparetotal -8.0 -90E-1 -> 1 -ddcot449 comparetotal -8 -.9E+1 -> 1 -ddcot450 comparetotal -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -ddcot473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 -ddcot474 comparetotal 123.456000000000E+89 123.456E+89 -> -1 -ddcot475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 -ddcot476 comparetotal 123.4560000000E+89 123.456E+89 -> -1 -ddcot477 comparetotal 123.456000000E-89 123.456E-89 -> -1 -ddcot478 comparetotal 123.45600000E+89 123.456E+89 -> -1 -ddcot479 comparetotal 123.4560000E-89 123.456E-89 -> -1 -ddcot480 comparetotal 123.456000E+89 123.456E+89 -> -1 -ddcot481 comparetotal 123.45600E-89 123.456E-89 -> -1 -ddcot482 comparetotal 123.4560E+89 123.456E+89 -> -1 -ddcot483 comparetotal 123.456E-89 123.456E-89 -> 0 -ddcot487 comparetotal 123.456E+89 123.4560000000000E+89 -> 1 -ddcot488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 -ddcot489 comparetotal 123.456E+89 123.45600000000E+89 -> 1 -ddcot490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 -ddcot491 comparetotal 123.456E+89 123.456000000E+89 -> 1 -ddcot492 comparetotal 123.456E-89 123.45600000E-89 -> 1 -ddcot493 comparetotal 123.456E+89 123.4560000E+89 -> 1 -ddcot494 comparetotal 123.456E-89 123.456000E-89 -> 1 -ddcot495 comparetotal 123.456E+89 123.45600E+89 -> 1 -ddcot496 comparetotal 123.456E-89 123.4560E-89 -> 1 -ddcot497 comparetotal 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -ddcot498 comparetotal 1 1E-17 -> 1 -ddcot499 comparetotal 1 1E-16 -> 1 -ddcot500 comparetotal 1 1E-15 -> 1 -ddcot501 comparetotal 1 1E-14 -> 1 -ddcot502 comparetotal 1 1E-13 -> 1 -ddcot503 comparetotal 1 1E-12 -> 1 -ddcot504 comparetotal 1 1E-11 -> 1 -ddcot505 comparetotal 1 1E-10 -> 1 -ddcot506 comparetotal 1 1E-9 -> 1 -ddcot507 comparetotal 1 1E-8 -> 1 -ddcot508 comparetotal 1 1E-7 -> 1 -ddcot509 comparetotal 1 1E-6 -> 1 -ddcot510 comparetotal 1 1E-5 -> 1 -ddcot511 comparetotal 1 1E-4 -> 1 -ddcot512 comparetotal 1 1E-3 -> 1 -ddcot513 comparetotal 1 1E-2 -> 1 -ddcot514 comparetotal 1 1E-1 -> 1 -ddcot515 comparetotal 1 1E-0 -> 0 -ddcot516 comparetotal 1 1E+1 -> -1 -ddcot517 comparetotal 1 1E+2 -> -1 -ddcot518 comparetotal 1 1E+3 -> -1 -ddcot519 comparetotal 1 1E+4 -> -1 -ddcot521 comparetotal 1 1E+5 -> -1 -ddcot522 comparetotal 1 1E+6 -> -1 -ddcot523 comparetotal 1 1E+7 -> -1 -ddcot524 comparetotal 1 1E+8 -> -1 -ddcot525 comparetotal 1 1E+9 -> -1 -ddcot526 comparetotal 1 1E+10 -> -1 -ddcot527 comparetotal 1 1E+11 -> -1 -ddcot528 comparetotal 1 1E+12 -> -1 -ddcot529 comparetotal 1 1E+13 -> -1 -ddcot530 comparetotal 1 1E+14 -> -1 -ddcot531 comparetotal 1 1E+15 -> -1 -ddcot532 comparetotal 1 1E+16 -> -1 -ddcot533 comparetotal 1 1E+17 -> -1 --- LR swap -ddcot538 comparetotal 1E-17 1 -> -1 -ddcot539 comparetotal 1E-16 1 -> -1 -ddcot540 comparetotal 1E-15 1 -> -1 -ddcot541 comparetotal 1E-14 1 -> -1 -ddcot542 comparetotal 1E-13 1 -> -1 -ddcot543 comparetotal 1E-12 1 -> -1 -ddcot544 comparetotal 1E-11 1 -> -1 -ddcot545 comparetotal 1E-10 1 -> -1 -ddcot546 comparetotal 1E-9 1 -> -1 -ddcot547 comparetotal 1E-8 1 -> -1 -ddcot548 comparetotal 1E-7 1 -> -1 -ddcot549 comparetotal 1E-6 1 -> -1 -ddcot550 comparetotal 1E-5 1 -> -1 -ddcot551 comparetotal 1E-4 1 -> -1 -ddcot552 comparetotal 1E-3 1 -> -1 -ddcot553 comparetotal 1E-2 1 -> -1 -ddcot554 comparetotal 1E-1 1 -> -1 -ddcot555 comparetotal 1E-0 1 -> 0 -ddcot556 comparetotal 1E+1 1 -> 1 -ddcot557 comparetotal 1E+2 1 -> 1 -ddcot558 comparetotal 1E+3 1 -> 1 -ddcot559 comparetotal 1E+4 1 -> 1 -ddcot561 comparetotal 1E+5 1 -> 1 -ddcot562 comparetotal 1E+6 1 -> 1 -ddcot563 comparetotal 1E+7 1 -> 1 -ddcot564 comparetotal 1E+8 1 -> 1 -ddcot565 comparetotal 1E+9 1 -> 1 -ddcot566 comparetotal 1E+10 1 -> 1 -ddcot567 comparetotal 1E+11 1 -> 1 -ddcot568 comparetotal 1E+12 1 -> 1 -ddcot569 comparetotal 1E+13 1 -> 1 -ddcot570 comparetotal 1E+14 1 -> 1 -ddcot571 comparetotal 1E+15 1 -> 1 -ddcot572 comparetotal 1E+16 1 -> 1 -ddcot573 comparetotal 1E+17 1 -> 1 --- similar with a useful coefficient, one side only -ddcot578 comparetotal 0.000000987654321 1E-17 -> 1 -ddcot579 comparetotal 0.000000987654321 1E-16 -> 1 -ddcot580 comparetotal 0.000000987654321 1E-15 -> 1 -ddcot581 comparetotal 0.000000987654321 1E-14 -> 1 -ddcot582 comparetotal 0.000000987654321 1E-13 -> 1 -ddcot583 comparetotal 0.000000987654321 1E-12 -> 1 -ddcot584 comparetotal 0.000000987654321 1E-11 -> 1 -ddcot585 comparetotal 0.000000987654321 1E-10 -> 1 -ddcot586 comparetotal 0.000000987654321 1E-9 -> 1 -ddcot587 comparetotal 0.000000987654321 1E-8 -> 1 -ddcot588 comparetotal 0.000000987654321 1E-7 -> 1 -ddcot589 comparetotal 0.000000987654321 1E-6 -> -1 -ddcot590 comparetotal 0.000000987654321 1E-5 -> -1 -ddcot591 comparetotal 0.000000987654321 1E-4 -> -1 -ddcot592 comparetotal 0.000000987654321 1E-3 -> -1 -ddcot593 comparetotal 0.000000987654321 1E-2 -> -1 -ddcot594 comparetotal 0.000000987654321 1E-1 -> -1 -ddcot595 comparetotal 0.000000987654321 1E-0 -> -1 -ddcot596 comparetotal 0.000000987654321 1E+1 -> -1 -ddcot597 comparetotal 0.000000987654321 1E+2 -> -1 -ddcot598 comparetotal 0.000000987654321 1E+3 -> -1 -ddcot599 comparetotal 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -ddcot600 comparetotal 12 12.2345 -> -1 -ddcot601 comparetotal 12.0 12.2345 -> -1 -ddcot602 comparetotal 12.00 12.2345 -> -1 -ddcot603 comparetotal 12.000 12.2345 -> -1 -ddcot604 comparetotal 12.0000 12.2345 -> -1 -ddcot605 comparetotal 12.00000 12.2345 -> -1 -ddcot606 comparetotal 12.000000 12.2345 -> -1 -ddcot607 comparetotal 12.0000000 12.2345 -> -1 -ddcot608 comparetotal 12.00000000 12.2345 -> -1 -ddcot609 comparetotal 12.000000000 12.2345 -> -1 -ddcot610 comparetotal 12.1234 12 -> 1 -ddcot611 comparetotal 12.1234 12.0 -> 1 -ddcot612 comparetotal 12.1234 12.00 -> 1 -ddcot613 comparetotal 12.1234 12.000 -> 1 -ddcot614 comparetotal 12.1234 12.0000 -> 1 -ddcot615 comparetotal 12.1234 12.00000 -> 1 -ddcot616 comparetotal 12.1234 12.000000 -> 1 -ddcot617 comparetotal 12.1234 12.0000000 -> 1 -ddcot618 comparetotal 12.1234 12.00000000 -> 1 -ddcot619 comparetotal 12.1234 12.000000000 -> 1 -ddcot620 comparetotal -12 -12.2345 -> 1 -ddcot621 comparetotal -12.0 -12.2345 -> 1 -ddcot622 comparetotal -12.00 -12.2345 -> 1 -ddcot623 comparetotal -12.000 -12.2345 -> 1 -ddcot624 comparetotal -12.0000 -12.2345 -> 1 -ddcot625 comparetotal -12.00000 -12.2345 -> 1 -ddcot626 comparetotal -12.000000 -12.2345 -> 1 -ddcot627 comparetotal -12.0000000 -12.2345 -> 1 -ddcot628 comparetotal -12.00000000 -12.2345 -> 1 -ddcot629 comparetotal -12.000000000 -12.2345 -> 1 -ddcot630 comparetotal -12.1234 -12 -> -1 -ddcot631 comparetotal -12.1234 -12.0 -> -1 -ddcot632 comparetotal -12.1234 -12.00 -> -1 -ddcot633 comparetotal -12.1234 -12.000 -> -1 -ddcot634 comparetotal -12.1234 -12.0000 -> -1 -ddcot635 comparetotal -12.1234 -12.00000 -> -1 -ddcot636 comparetotal -12.1234 -12.000000 -> -1 -ddcot637 comparetotal -12.1234 -12.0000000 -> -1 -ddcot638 comparetotal -12.1234 -12.00000000 -> -1 -ddcot639 comparetotal -12.1234 -12.000000000 -> -1 - --- extended zeros -ddcot640 comparetotal 0 0 -> 0 -ddcot641 comparetotal 0 -0 -> 1 -ddcot642 comparetotal 0 -0.0 -> 1 -ddcot643 comparetotal 0 0.0 -> 1 -ddcot644 comparetotal -0 0 -> -1 -ddcot645 comparetotal -0 -0 -> 0 -ddcot646 comparetotal -0 -0.0 -> -1 -ddcot647 comparetotal -0 0.0 -> -1 -ddcot648 comparetotal 0.0 0 -> -1 -ddcot649 comparetotal 0.0 -0 -> 1 -ddcot650 comparetotal 0.0 -0.0 -> 1 -ddcot651 comparetotal 0.0 0.0 -> 0 -ddcot652 comparetotal -0.0 0 -> -1 -ddcot653 comparetotal -0.0 -0 -> 1 -ddcot654 comparetotal -0.0 -0.0 -> 0 -ddcot655 comparetotal -0.0 0.0 -> -1 - -ddcot656 comparetotal -0E1 0.0 -> -1 -ddcot657 comparetotal -0E2 0.0 -> -1 -ddcot658 comparetotal 0E1 0.0 -> 1 -ddcot659 comparetotal 0E2 0.0 -> 1 -ddcot660 comparetotal -0E1 0 -> -1 -ddcot661 comparetotal -0E2 0 -> -1 -ddcot662 comparetotal 0E1 0 -> 1 -ddcot663 comparetotal 0E2 0 -> 1 -ddcot664 comparetotal -0E1 -0E1 -> 0 -ddcot665 comparetotal -0E2 -0E1 -> -1 -ddcot666 comparetotal 0E1 -0E1 -> 1 -ddcot667 comparetotal 0E2 -0E1 -> 1 -ddcot668 comparetotal -0E1 -0E2 -> 1 -ddcot669 comparetotal -0E2 -0E2 -> 0 -ddcot670 comparetotal 0E1 -0E2 -> 1 -ddcot671 comparetotal 0E2 -0E2 -> 1 -ddcot672 comparetotal -0E1 0E1 -> -1 -ddcot673 comparetotal -0E2 0E1 -> -1 -ddcot674 comparetotal 0E1 0E1 -> 0 -ddcot675 comparetotal 0E2 0E1 -> 1 -ddcot676 comparetotal -0E1 0E2 -> -1 -ddcot677 comparetotal -0E2 0E2 -> -1 -ddcot678 comparetotal 0E1 0E2 -> -1 -ddcot679 comparetotal 0E2 0E2 -> 0 - --- trailing zeros; unit-y -ddcot680 comparetotal 12 12 -> 0 -ddcot681 comparetotal 12 12.0 -> 1 -ddcot682 comparetotal 12 12.00 -> 1 -ddcot683 comparetotal 12 12.000 -> 1 -ddcot684 comparetotal 12 12.0000 -> 1 -ddcot685 comparetotal 12 12.00000 -> 1 -ddcot686 comparetotal 12 12.000000 -> 1 -ddcot687 comparetotal 12 12.0000000 -> 1 -ddcot688 comparetotal 12 12.00000000 -> 1 -ddcot689 comparetotal 12 12.000000000 -> 1 -ddcot690 comparetotal 12 12 -> 0 -ddcot691 comparetotal 12.0 12 -> -1 -ddcot692 comparetotal 12.00 12 -> -1 -ddcot693 comparetotal 12.000 12 -> -1 -ddcot694 comparetotal 12.0000 12 -> -1 -ddcot695 comparetotal 12.00000 12 -> -1 -ddcot696 comparetotal 12.000000 12 -> -1 -ddcot697 comparetotal 12.0000000 12 -> -1 -ddcot698 comparetotal 12.00000000 12 -> -1 -ddcot699 comparetotal 12.000000000 12 -> -1 - --- old long operand checks -ddcot701 comparetotal 12345678000 1 -> 1 -ddcot702 comparetotal 1 12345678000 -> -1 -ddcot703 comparetotal 1234567800 1 -> 1 -ddcot704 comparetotal 1 1234567800 -> -1 -ddcot705 comparetotal 1234567890 1 -> 1 -ddcot706 comparetotal 1 1234567890 -> -1 -ddcot707 comparetotal 1234567891 1 -> 1 -ddcot708 comparetotal 1 1234567891 -> -1 -ddcot709 comparetotal 12345678901 1 -> 1 -ddcot710 comparetotal 1 12345678901 -> -1 -ddcot711 comparetotal 1234567896 1 -> 1 -ddcot712 comparetotal 1 1234567896 -> -1 -ddcot713 comparetotal -1234567891 1 -> -1 -ddcot714 comparetotal 1 -1234567891 -> 1 -ddcot715 comparetotal -12345678901 1 -> -1 -ddcot716 comparetotal 1 -12345678901 -> 1 -ddcot717 comparetotal -1234567896 1 -> -1 -ddcot718 comparetotal 1 -1234567896 -> 1 - --- old residue cases -ddcot740 comparetotal 1 0.9999999 -> 1 -ddcot741 comparetotal 1 0.999999 -> 1 -ddcot742 comparetotal 1 0.99999 -> 1 -ddcot743 comparetotal 1 1.0000 -> 1 -ddcot744 comparetotal 1 1.00001 -> -1 -ddcot745 comparetotal 1 1.000001 -> -1 -ddcot746 comparetotal 1 1.0000001 -> -1 -ddcot750 comparetotal 0.9999999 1 -> -1 -ddcot751 comparetotal 0.999999 1 -> -1 -ddcot752 comparetotal 0.99999 1 -> -1 -ddcot753 comparetotal 1.0000 1 -> -1 -ddcot754 comparetotal 1.00001 1 -> 1 -ddcot755 comparetotal 1.000001 1 -> 1 -ddcot756 comparetotal 1.0000001 1 -> 1 - --- Specials -ddcot780 comparetotal Inf -Inf -> 1 -ddcot781 comparetotal Inf -1000 -> 1 -ddcot782 comparetotal Inf -1 -> 1 -ddcot783 comparetotal Inf -0 -> 1 -ddcot784 comparetotal Inf 0 -> 1 -ddcot785 comparetotal Inf 1 -> 1 -ddcot786 comparetotal Inf 1000 -> 1 -ddcot787 comparetotal Inf Inf -> 0 -ddcot788 comparetotal -1000 Inf -> -1 -ddcot789 comparetotal -Inf Inf -> -1 -ddcot790 comparetotal -1 Inf -> -1 -ddcot791 comparetotal -0 Inf -> -1 -ddcot792 comparetotal 0 Inf -> -1 -ddcot793 comparetotal 1 Inf -> -1 -ddcot794 comparetotal 1000 Inf -> -1 -ddcot795 comparetotal Inf Inf -> 0 - -ddcot800 comparetotal -Inf -Inf -> 0 -ddcot801 comparetotal -Inf -1000 -> -1 -ddcot802 comparetotal -Inf -1 -> -1 -ddcot803 comparetotal -Inf -0 -> -1 -ddcot804 comparetotal -Inf 0 -> -1 -ddcot805 comparetotal -Inf 1 -> -1 -ddcot806 comparetotal -Inf 1000 -> -1 -ddcot807 comparetotal -Inf Inf -> -1 -ddcot808 comparetotal -Inf -Inf -> 0 -ddcot809 comparetotal -1000 -Inf -> 1 -ddcot810 comparetotal -1 -Inf -> 1 -ddcot811 comparetotal -0 -Inf -> 1 -ddcot812 comparetotal 0 -Inf -> 1 -ddcot813 comparetotal 1 -Inf -> 1 -ddcot814 comparetotal 1000 -Inf -> 1 -ddcot815 comparetotal Inf -Inf -> 1 - -ddcot821 comparetotal NaN -Inf -> 1 -ddcot822 comparetotal NaN -1000 -> 1 -ddcot823 comparetotal NaN -1 -> 1 -ddcot824 comparetotal NaN -0 -> 1 -ddcot825 comparetotal NaN 0 -> 1 -ddcot826 comparetotal NaN 1 -> 1 -ddcot827 comparetotal NaN 1000 -> 1 -ddcot828 comparetotal NaN Inf -> 1 -ddcot829 comparetotal NaN NaN -> 0 -ddcot830 comparetotal -Inf NaN -> -1 -ddcot831 comparetotal -1000 NaN -> -1 -ddcot832 comparetotal -1 NaN -> -1 -ddcot833 comparetotal -0 NaN -> -1 -ddcot834 comparetotal 0 NaN -> -1 -ddcot835 comparetotal 1 NaN -> -1 -ddcot836 comparetotal 1000 NaN -> -1 -ddcot837 comparetotal Inf NaN -> -1 -ddcot838 comparetotal -NaN -NaN -> 0 -ddcot839 comparetotal +NaN -NaN -> 1 -ddcot840 comparetotal -NaN +NaN -> -1 - -ddcot841 comparetotal sNaN -sNaN -> 1 -ddcot842 comparetotal sNaN -NaN -> 1 -ddcot843 comparetotal sNaN -Inf -> 1 -ddcot844 comparetotal sNaN -1000 -> 1 -ddcot845 comparetotal sNaN -1 -> 1 -ddcot846 comparetotal sNaN -0 -> 1 -ddcot847 comparetotal sNaN 0 -> 1 -ddcot848 comparetotal sNaN 1 -> 1 -ddcot849 comparetotal sNaN 1000 -> 1 -ddcot850 comparetotal sNaN NaN -> -1 -ddcot851 comparetotal sNaN sNaN -> 0 - -ddcot852 comparetotal -sNaN sNaN -> -1 -ddcot853 comparetotal -NaN sNaN -> -1 -ddcot854 comparetotal -Inf sNaN -> -1 -ddcot855 comparetotal -1000 sNaN -> -1 -ddcot856 comparetotal -1 sNaN -> -1 -ddcot857 comparetotal -0 sNaN -> -1 -ddcot858 comparetotal 0 sNaN -> -1 -ddcot859 comparetotal 1 sNaN -> -1 -ddcot860 comparetotal 1000 sNaN -> -1 -ddcot861 comparetotal Inf sNaN -> -1 -ddcot862 comparetotal NaN sNaN -> 1 -ddcot863 comparetotal sNaN sNaN -> 0 - -ddcot871 comparetotal -sNaN -sNaN -> 0 -ddcot872 comparetotal -sNaN -NaN -> 1 -ddcot873 comparetotal -sNaN -Inf -> -1 -ddcot874 comparetotal -sNaN -1000 -> -1 -ddcot875 comparetotal -sNaN -1 -> -1 -ddcot876 comparetotal -sNaN -0 -> -1 -ddcot877 comparetotal -sNaN 0 -> -1 -ddcot878 comparetotal -sNaN 1 -> -1 -ddcot879 comparetotal -sNaN 1000 -> -1 -ddcot880 comparetotal -sNaN NaN -> -1 -ddcot881 comparetotal -sNaN sNaN -> -1 - -ddcot882 comparetotal -sNaN -sNaN -> 0 -ddcot883 comparetotal -NaN -sNaN -> -1 -ddcot884 comparetotal -Inf -sNaN -> 1 -ddcot885 comparetotal -1000 -sNaN -> 1 -ddcot886 comparetotal -1 -sNaN -> 1 -ddcot887 comparetotal -0 -sNaN -> 1 -ddcot888 comparetotal 0 -sNaN -> 1 -ddcot889 comparetotal 1 -sNaN -> 1 -ddcot890 comparetotal 1000 -sNaN -> 1 -ddcot891 comparetotal Inf -sNaN -> 1 -ddcot892 comparetotal NaN -sNaN -> 1 -ddcot893 comparetotal sNaN -sNaN -> 1 - --- NaNs with payload -ddcot960 comparetotal NaN9 -Inf -> 1 -ddcot961 comparetotal NaN8 999 -> 1 -ddcot962 comparetotal NaN77 Inf -> 1 -ddcot963 comparetotal -NaN67 NaN5 -> -1 -ddcot964 comparetotal -Inf -NaN4 -> 1 -ddcot965 comparetotal -999 -NaN33 -> 1 -ddcot966 comparetotal Inf NaN2 -> -1 - -ddcot970 comparetotal -NaN41 -NaN42 -> 1 -ddcot971 comparetotal +NaN41 -NaN42 -> 1 -ddcot972 comparetotal -NaN41 +NaN42 -> -1 -ddcot973 comparetotal +NaN41 +NaN42 -> -1 -ddcot974 comparetotal -NaN42 -NaN01 -> -1 -ddcot975 comparetotal +NaN42 -NaN01 -> 1 -ddcot976 comparetotal -NaN42 +NaN01 -> -1 -ddcot977 comparetotal +NaN42 +NaN01 -> 1 - -ddcot980 comparetotal -sNaN771 -sNaN772 -> 1 -ddcot981 comparetotal +sNaN771 -sNaN772 -> 1 -ddcot982 comparetotal -sNaN771 +sNaN772 -> -1 -ddcot983 comparetotal +sNaN771 +sNaN772 -> -1 -ddcot984 comparetotal -sNaN772 -sNaN771 -> -1 -ddcot985 comparetotal +sNaN772 -sNaN771 -> 1 -ddcot986 comparetotal -sNaN772 +sNaN771 -> -1 -ddcot987 comparetotal +sNaN772 +sNaN771 -> 1 - -ddcot991 comparetotal -sNaN99 -Inf -> -1 -ddcot992 comparetotal sNaN98 -11 -> 1 -ddcot993 comparetotal sNaN97 NaN -> -1 -ddcot994 comparetotal sNaN16 sNaN94 -> -1 -ddcot995 comparetotal NaN85 sNaN83 -> 1 -ddcot996 comparetotal -Inf sNaN92 -> -1 -ddcot997 comparetotal 088 sNaN81 -> -1 -ddcot998 comparetotal Inf sNaN90 -> -1 -ddcot999 comparetotal NaN -sNaN89 -> 1 - --- spread zeros -ddcot1110 comparetotal 0E-383 0 -> -1 -ddcot1111 comparetotal 0E-383 -0 -> 1 -ddcot1112 comparetotal -0E-383 0 -> -1 -ddcot1113 comparetotal -0E-383 -0 -> 1 -ddcot1114 comparetotal 0E-383 0E+384 -> -1 -ddcot1115 comparetotal 0E-383 -0E+384 -> 1 -ddcot1116 comparetotal -0E-383 0E+384 -> -1 -ddcot1117 comparetotal -0E-383 -0E+384 -> 1 -ddcot1118 comparetotal 0 0E+384 -> -1 -ddcot1119 comparetotal 0 -0E+384 -> 1 -ddcot1120 comparetotal -0 0E+384 -> -1 -ddcot1121 comparetotal -0 -0E+384 -> 1 - -ddcot1130 comparetotal 0E+384 0 -> 1 -ddcot1131 comparetotal 0E+384 -0 -> 1 -ddcot1132 comparetotal -0E+384 0 -> -1 -ddcot1133 comparetotal -0E+384 -0 -> -1 -ddcot1134 comparetotal 0E+384 0E-383 -> 1 -ddcot1135 comparetotal 0E+384 -0E-383 -> 1 -ddcot1136 comparetotal -0E+384 0E-383 -> -1 -ddcot1137 comparetotal -0E+384 -0E-383 -> -1 -ddcot1138 comparetotal 0 0E-383 -> 1 -ddcot1139 comparetotal 0 -0E-383 -> 1 -ddcot1140 comparetotal -0 0E-383 -> -1 -ddcot1141 comparetotal -0 -0E-383 -> -1 - --- Null tests -ddcot9990 comparetotal 10 # -> NaN Invalid_operation -ddcot9991 comparetotal # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddCompareTotal.decTest -- decDouble comparison using total ordering-- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddcot001 comparetotal -2 -2 -> 0 +ddcot002 comparetotal -2 -1 -> -1 +ddcot003 comparetotal -2 0 -> -1 +ddcot004 comparetotal -2 1 -> -1 +ddcot005 comparetotal -2 2 -> -1 +ddcot006 comparetotal -1 -2 -> 1 +ddcot007 comparetotal -1 -1 -> 0 +ddcot008 comparetotal -1 0 -> -1 +ddcot009 comparetotal -1 1 -> -1 +ddcot010 comparetotal -1 2 -> -1 +ddcot011 comparetotal 0 -2 -> 1 +ddcot012 comparetotal 0 -1 -> 1 +ddcot013 comparetotal 0 0 -> 0 +ddcot014 comparetotal 0 1 -> -1 +ddcot015 comparetotal 0 2 -> -1 +ddcot016 comparetotal 1 -2 -> 1 +ddcot017 comparetotal 1 -1 -> 1 +ddcot018 comparetotal 1 0 -> 1 +ddcot019 comparetotal 1 1 -> 0 +ddcot020 comparetotal 1 2 -> -1 +ddcot021 comparetotal 2 -2 -> 1 +ddcot022 comparetotal 2 -1 -> 1 +ddcot023 comparetotal 2 0 -> 1 +ddcot025 comparetotal 2 1 -> 1 +ddcot026 comparetotal 2 2 -> 0 + +ddcot031 comparetotal -20 -20 -> 0 +ddcot032 comparetotal -20 -10 -> -1 +ddcot033 comparetotal -20 00 -> -1 +ddcot034 comparetotal -20 10 -> -1 +ddcot035 comparetotal -20 20 -> -1 +ddcot036 comparetotal -10 -20 -> 1 +ddcot037 comparetotal -10 -10 -> 0 +ddcot038 comparetotal -10 00 -> -1 +ddcot039 comparetotal -10 10 -> -1 +ddcot040 comparetotal -10 20 -> -1 +ddcot041 comparetotal 00 -20 -> 1 +ddcot042 comparetotal 00 -10 -> 1 +ddcot043 comparetotal 00 00 -> 0 +ddcot044 comparetotal 00 10 -> -1 +ddcot045 comparetotal 00 20 -> -1 +ddcot046 comparetotal 10 -20 -> 1 +ddcot047 comparetotal 10 -10 -> 1 +ddcot048 comparetotal 10 00 -> 1 +ddcot049 comparetotal 10 10 -> 0 +ddcot050 comparetotal 10 20 -> -1 +ddcot051 comparetotal 20 -20 -> 1 +ddcot052 comparetotal 20 -10 -> 1 +ddcot053 comparetotal 20 00 -> 1 +ddcot055 comparetotal 20 10 -> 1 +ddcot056 comparetotal 20 20 -> 0 + +ddcot061 comparetotal -2.0 -2.0 -> 0 +ddcot062 comparetotal -2.0 -1.0 -> -1 +ddcot063 comparetotal -2.0 0.0 -> -1 +ddcot064 comparetotal -2.0 1.0 -> -1 +ddcot065 comparetotal -2.0 2.0 -> -1 +ddcot066 comparetotal -1.0 -2.0 -> 1 +ddcot067 comparetotal -1.0 -1.0 -> 0 +ddcot068 comparetotal -1.0 0.0 -> -1 +ddcot069 comparetotal -1.0 1.0 -> -1 +ddcot070 comparetotal -1.0 2.0 -> -1 +ddcot071 comparetotal 0.0 -2.0 -> 1 +ddcot072 comparetotal 0.0 -1.0 -> 1 +ddcot073 comparetotal 0.0 0.0 -> 0 +ddcot074 comparetotal 0.0 1.0 -> -1 +ddcot075 comparetotal 0.0 2.0 -> -1 +ddcot076 comparetotal 1.0 -2.0 -> 1 +ddcot077 comparetotal 1.0 -1.0 -> 1 +ddcot078 comparetotal 1.0 0.0 -> 1 +ddcot079 comparetotal 1.0 1.0 -> 0 +ddcot080 comparetotal 1.0 2.0 -> -1 +ddcot081 comparetotal 2.0 -2.0 -> 1 +ddcot082 comparetotal 2.0 -1.0 -> 1 +ddcot083 comparetotal 2.0 0.0 -> 1 +ddcot085 comparetotal 2.0 1.0 -> 1 +ddcot086 comparetotal 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +ddcot090 comparetotal 9.99999999E+384 9.99999999E+384 -> 0 +ddcot091 comparetotal -9.99999999E+384 9.99999999E+384 -> -1 +ddcot092 comparetotal 9.99999999E+384 -9.99999999E+384 -> 1 +ddcot093 comparetotal -9.99999999E+384 -9.99999999E+384 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +ddcot100 comparetotal 7.0 7.0 -> 0 +ddcot101 comparetotal 7.0 7 -> -1 +ddcot102 comparetotal 7 7.0 -> 1 +ddcot103 comparetotal 7E+0 7.0 -> 1 +ddcot104 comparetotal 70E-1 7.0 -> 0 +ddcot105 comparetotal 0.7E+1 7 -> 0 +ddcot106 comparetotal 70E-1 7 -> -1 +ddcot107 comparetotal 7.0 7E+0 -> -1 +ddcot108 comparetotal 7.0 70E-1 -> 0 +ddcot109 comparetotal 7 0.7E+1 -> 0 +ddcot110 comparetotal 7 70E-1 -> 1 + +ddcot120 comparetotal 8.0 7.0 -> 1 +ddcot121 comparetotal 8.0 7 -> 1 +ddcot122 comparetotal 8 7.0 -> 1 +ddcot123 comparetotal 8E+0 7.0 -> 1 +ddcot124 comparetotal 80E-1 7.0 -> 1 +ddcot125 comparetotal 0.8E+1 7 -> 1 +ddcot126 comparetotal 80E-1 7 -> 1 +ddcot127 comparetotal 8.0 7E+0 -> 1 +ddcot128 comparetotal 8.0 70E-1 -> 1 +ddcot129 comparetotal 8 0.7E+1 -> 1 +ddcot130 comparetotal 8 70E-1 -> 1 + +ddcot140 comparetotal 8.0 9.0 -> -1 +ddcot141 comparetotal 8.0 9 -> -1 +ddcot142 comparetotal 8 9.0 -> -1 +ddcot143 comparetotal 8E+0 9.0 -> -1 +ddcot144 comparetotal 80E-1 9.0 -> -1 +ddcot145 comparetotal 0.8E+1 9 -> -1 +ddcot146 comparetotal 80E-1 9 -> -1 +ddcot147 comparetotal 8.0 9E+0 -> -1 +ddcot148 comparetotal 8.0 90E-1 -> -1 +ddcot149 comparetotal 8 0.9E+1 -> -1 +ddcot150 comparetotal 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ddcot200 comparetotal -7.0 7.0 -> -1 +ddcot201 comparetotal -7.0 7 -> -1 +ddcot202 comparetotal -7 7.0 -> -1 +ddcot203 comparetotal -7E+0 7.0 -> -1 +ddcot204 comparetotal -70E-1 7.0 -> -1 +ddcot205 comparetotal -0.7E+1 7 -> -1 +ddcot206 comparetotal -70E-1 7 -> -1 +ddcot207 comparetotal -7.0 7E+0 -> -1 +ddcot208 comparetotal -7.0 70E-1 -> -1 +ddcot209 comparetotal -7 0.7E+1 -> -1 +ddcot210 comparetotal -7 70E-1 -> -1 + +ddcot220 comparetotal -8.0 7.0 -> -1 +ddcot221 comparetotal -8.0 7 -> -1 +ddcot222 comparetotal -8 7.0 -> -1 +ddcot223 comparetotal -8E+0 7.0 -> -1 +ddcot224 comparetotal -80E-1 7.0 -> -1 +ddcot225 comparetotal -0.8E+1 7 -> -1 +ddcot226 comparetotal -80E-1 7 -> -1 +ddcot227 comparetotal -8.0 7E+0 -> -1 +ddcot228 comparetotal -8.0 70E-1 -> -1 +ddcot229 comparetotal -8 0.7E+1 -> -1 +ddcot230 comparetotal -8 70E-1 -> -1 + +ddcot240 comparetotal -8.0 9.0 -> -1 +ddcot241 comparetotal -8.0 9 -> -1 +ddcot242 comparetotal -8 9.0 -> -1 +ddcot243 comparetotal -8E+0 9.0 -> -1 +ddcot244 comparetotal -80E-1 9.0 -> -1 +ddcot245 comparetotal -0.8E+1 9 -> -1 +ddcot246 comparetotal -80E-1 9 -> -1 +ddcot247 comparetotal -8.0 9E+0 -> -1 +ddcot248 comparetotal -8.0 90E-1 -> -1 +ddcot249 comparetotal -8 0.9E+1 -> -1 +ddcot250 comparetotal -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ddcot300 comparetotal 7.0 -7.0 -> 1 +ddcot301 comparetotal 7.0 -7 -> 1 +ddcot302 comparetotal 7 -7.0 -> 1 +ddcot303 comparetotal 7E+0 -7.0 -> 1 +ddcot304 comparetotal 70E-1 -7.0 -> 1 +ddcot305 comparetotal .7E+1 -7 -> 1 +ddcot306 comparetotal 70E-1 -7 -> 1 +ddcot307 comparetotal 7.0 -7E+0 -> 1 +ddcot308 comparetotal 7.0 -70E-1 -> 1 +ddcot309 comparetotal 7 -.7E+1 -> 1 +ddcot310 comparetotal 7 -70E-1 -> 1 + +ddcot320 comparetotal 8.0 -7.0 -> 1 +ddcot321 comparetotal 8.0 -7 -> 1 +ddcot322 comparetotal 8 -7.0 -> 1 +ddcot323 comparetotal 8E+0 -7.0 -> 1 +ddcot324 comparetotal 80E-1 -7.0 -> 1 +ddcot325 comparetotal .8E+1 -7 -> 1 +ddcot326 comparetotal 80E-1 -7 -> 1 +ddcot327 comparetotal 8.0 -7E+0 -> 1 +ddcot328 comparetotal 8.0 -70E-1 -> 1 +ddcot329 comparetotal 8 -.7E+1 -> 1 +ddcot330 comparetotal 8 -70E-1 -> 1 + +ddcot340 comparetotal 8.0 -9.0 -> 1 +ddcot341 comparetotal 8.0 -9 -> 1 +ddcot342 comparetotal 8 -9.0 -> 1 +ddcot343 comparetotal 8E+0 -9.0 -> 1 +ddcot344 comparetotal 80E-1 -9.0 -> 1 +ddcot345 comparetotal .8E+1 -9 -> 1 +ddcot346 comparetotal 80E-1 -9 -> 1 +ddcot347 comparetotal 8.0 -9E+0 -> 1 +ddcot348 comparetotal 8.0 -90E-1 -> 1 +ddcot349 comparetotal 8 -.9E+1 -> 1 +ddcot350 comparetotal 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +ddcot400 comparetotal -7.0 -7.0 -> 0 +ddcot401 comparetotal -7.0 -7 -> 1 +ddcot402 comparetotal -7 -7.0 -> -1 +ddcot403 comparetotal -7E+0 -7.0 -> -1 +ddcot404 comparetotal -70E-1 -7.0 -> 0 +ddcot405 comparetotal -.7E+1 -7 -> 0 +ddcot406 comparetotal -70E-1 -7 -> 1 +ddcot407 comparetotal -7.0 -7E+0 -> 1 +ddcot408 comparetotal -7.0 -70E-1 -> 0 +ddcot409 comparetotal -7 -.7E+1 -> 0 +ddcot410 comparetotal -7 -70E-1 -> -1 + +ddcot420 comparetotal -8.0 -7.0 -> -1 +ddcot421 comparetotal -8.0 -7 -> -1 +ddcot422 comparetotal -8 -7.0 -> -1 +ddcot423 comparetotal -8E+0 -7.0 -> -1 +ddcot424 comparetotal -80E-1 -7.0 -> -1 +ddcot425 comparetotal -.8E+1 -7 -> -1 +ddcot426 comparetotal -80E-1 -7 -> -1 +ddcot427 comparetotal -8.0 -7E+0 -> -1 +ddcot428 comparetotal -8.0 -70E-1 -> -1 +ddcot429 comparetotal -8 -.7E+1 -> -1 +ddcot430 comparetotal -8 -70E-1 -> -1 + +ddcot440 comparetotal -8.0 -9.0 -> 1 +ddcot441 comparetotal -8.0 -9 -> 1 +ddcot442 comparetotal -8 -9.0 -> 1 +ddcot443 comparetotal -8E+0 -9.0 -> 1 +ddcot444 comparetotal -80E-1 -9.0 -> 1 +ddcot445 comparetotal -.8E+1 -9 -> 1 +ddcot446 comparetotal -80E-1 -9 -> 1 +ddcot447 comparetotal -8.0 -9E+0 -> 1 +ddcot448 comparetotal -8.0 -90E-1 -> 1 +ddcot449 comparetotal -8 -.9E+1 -> 1 +ddcot450 comparetotal -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +ddcot473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 +ddcot474 comparetotal 123.456000000000E+89 123.456E+89 -> -1 +ddcot475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 +ddcot476 comparetotal 123.4560000000E+89 123.456E+89 -> -1 +ddcot477 comparetotal 123.456000000E-89 123.456E-89 -> -1 +ddcot478 comparetotal 123.45600000E+89 123.456E+89 -> -1 +ddcot479 comparetotal 123.4560000E-89 123.456E-89 -> -1 +ddcot480 comparetotal 123.456000E+89 123.456E+89 -> -1 +ddcot481 comparetotal 123.45600E-89 123.456E-89 -> -1 +ddcot482 comparetotal 123.4560E+89 123.456E+89 -> -1 +ddcot483 comparetotal 123.456E-89 123.456E-89 -> 0 +ddcot487 comparetotal 123.456E+89 123.4560000000000E+89 -> 1 +ddcot488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 +ddcot489 comparetotal 123.456E+89 123.45600000000E+89 -> 1 +ddcot490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 +ddcot491 comparetotal 123.456E+89 123.456000000E+89 -> 1 +ddcot492 comparetotal 123.456E-89 123.45600000E-89 -> 1 +ddcot493 comparetotal 123.456E+89 123.4560000E+89 -> 1 +ddcot494 comparetotal 123.456E-89 123.456000E-89 -> 1 +ddcot495 comparetotal 123.456E+89 123.45600E+89 -> 1 +ddcot496 comparetotal 123.456E-89 123.4560E-89 -> 1 +ddcot497 comparetotal 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +ddcot498 comparetotal 1 1E-17 -> 1 +ddcot499 comparetotal 1 1E-16 -> 1 +ddcot500 comparetotal 1 1E-15 -> 1 +ddcot501 comparetotal 1 1E-14 -> 1 +ddcot502 comparetotal 1 1E-13 -> 1 +ddcot503 comparetotal 1 1E-12 -> 1 +ddcot504 comparetotal 1 1E-11 -> 1 +ddcot505 comparetotal 1 1E-10 -> 1 +ddcot506 comparetotal 1 1E-9 -> 1 +ddcot507 comparetotal 1 1E-8 -> 1 +ddcot508 comparetotal 1 1E-7 -> 1 +ddcot509 comparetotal 1 1E-6 -> 1 +ddcot510 comparetotal 1 1E-5 -> 1 +ddcot511 comparetotal 1 1E-4 -> 1 +ddcot512 comparetotal 1 1E-3 -> 1 +ddcot513 comparetotal 1 1E-2 -> 1 +ddcot514 comparetotal 1 1E-1 -> 1 +ddcot515 comparetotal 1 1E-0 -> 0 +ddcot516 comparetotal 1 1E+1 -> -1 +ddcot517 comparetotal 1 1E+2 -> -1 +ddcot518 comparetotal 1 1E+3 -> -1 +ddcot519 comparetotal 1 1E+4 -> -1 +ddcot521 comparetotal 1 1E+5 -> -1 +ddcot522 comparetotal 1 1E+6 -> -1 +ddcot523 comparetotal 1 1E+7 -> -1 +ddcot524 comparetotal 1 1E+8 -> -1 +ddcot525 comparetotal 1 1E+9 -> -1 +ddcot526 comparetotal 1 1E+10 -> -1 +ddcot527 comparetotal 1 1E+11 -> -1 +ddcot528 comparetotal 1 1E+12 -> -1 +ddcot529 comparetotal 1 1E+13 -> -1 +ddcot530 comparetotal 1 1E+14 -> -1 +ddcot531 comparetotal 1 1E+15 -> -1 +ddcot532 comparetotal 1 1E+16 -> -1 +ddcot533 comparetotal 1 1E+17 -> -1 +-- LR swap +ddcot538 comparetotal 1E-17 1 -> -1 +ddcot539 comparetotal 1E-16 1 -> -1 +ddcot540 comparetotal 1E-15 1 -> -1 +ddcot541 comparetotal 1E-14 1 -> -1 +ddcot542 comparetotal 1E-13 1 -> -1 +ddcot543 comparetotal 1E-12 1 -> -1 +ddcot544 comparetotal 1E-11 1 -> -1 +ddcot545 comparetotal 1E-10 1 -> -1 +ddcot546 comparetotal 1E-9 1 -> -1 +ddcot547 comparetotal 1E-8 1 -> -1 +ddcot548 comparetotal 1E-7 1 -> -1 +ddcot549 comparetotal 1E-6 1 -> -1 +ddcot550 comparetotal 1E-5 1 -> -1 +ddcot551 comparetotal 1E-4 1 -> -1 +ddcot552 comparetotal 1E-3 1 -> -1 +ddcot553 comparetotal 1E-2 1 -> -1 +ddcot554 comparetotal 1E-1 1 -> -1 +ddcot555 comparetotal 1E-0 1 -> 0 +ddcot556 comparetotal 1E+1 1 -> 1 +ddcot557 comparetotal 1E+2 1 -> 1 +ddcot558 comparetotal 1E+3 1 -> 1 +ddcot559 comparetotal 1E+4 1 -> 1 +ddcot561 comparetotal 1E+5 1 -> 1 +ddcot562 comparetotal 1E+6 1 -> 1 +ddcot563 comparetotal 1E+7 1 -> 1 +ddcot564 comparetotal 1E+8 1 -> 1 +ddcot565 comparetotal 1E+9 1 -> 1 +ddcot566 comparetotal 1E+10 1 -> 1 +ddcot567 comparetotal 1E+11 1 -> 1 +ddcot568 comparetotal 1E+12 1 -> 1 +ddcot569 comparetotal 1E+13 1 -> 1 +ddcot570 comparetotal 1E+14 1 -> 1 +ddcot571 comparetotal 1E+15 1 -> 1 +ddcot572 comparetotal 1E+16 1 -> 1 +ddcot573 comparetotal 1E+17 1 -> 1 +-- similar with a useful coefficient, one side only +ddcot578 comparetotal 0.000000987654321 1E-17 -> 1 +ddcot579 comparetotal 0.000000987654321 1E-16 -> 1 +ddcot580 comparetotal 0.000000987654321 1E-15 -> 1 +ddcot581 comparetotal 0.000000987654321 1E-14 -> 1 +ddcot582 comparetotal 0.000000987654321 1E-13 -> 1 +ddcot583 comparetotal 0.000000987654321 1E-12 -> 1 +ddcot584 comparetotal 0.000000987654321 1E-11 -> 1 +ddcot585 comparetotal 0.000000987654321 1E-10 -> 1 +ddcot586 comparetotal 0.000000987654321 1E-9 -> 1 +ddcot587 comparetotal 0.000000987654321 1E-8 -> 1 +ddcot588 comparetotal 0.000000987654321 1E-7 -> 1 +ddcot589 comparetotal 0.000000987654321 1E-6 -> -1 +ddcot590 comparetotal 0.000000987654321 1E-5 -> -1 +ddcot591 comparetotal 0.000000987654321 1E-4 -> -1 +ddcot592 comparetotal 0.000000987654321 1E-3 -> -1 +ddcot593 comparetotal 0.000000987654321 1E-2 -> -1 +ddcot594 comparetotal 0.000000987654321 1E-1 -> -1 +ddcot595 comparetotal 0.000000987654321 1E-0 -> -1 +ddcot596 comparetotal 0.000000987654321 1E+1 -> -1 +ddcot597 comparetotal 0.000000987654321 1E+2 -> -1 +ddcot598 comparetotal 0.000000987654321 1E+3 -> -1 +ddcot599 comparetotal 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +ddcot600 comparetotal 12 12.2345 -> -1 +ddcot601 comparetotal 12.0 12.2345 -> -1 +ddcot602 comparetotal 12.00 12.2345 -> -1 +ddcot603 comparetotal 12.000 12.2345 -> -1 +ddcot604 comparetotal 12.0000 12.2345 -> -1 +ddcot605 comparetotal 12.00000 12.2345 -> -1 +ddcot606 comparetotal 12.000000 12.2345 -> -1 +ddcot607 comparetotal 12.0000000 12.2345 -> -1 +ddcot608 comparetotal 12.00000000 12.2345 -> -1 +ddcot609 comparetotal 12.000000000 12.2345 -> -1 +ddcot610 comparetotal 12.1234 12 -> 1 +ddcot611 comparetotal 12.1234 12.0 -> 1 +ddcot612 comparetotal 12.1234 12.00 -> 1 +ddcot613 comparetotal 12.1234 12.000 -> 1 +ddcot614 comparetotal 12.1234 12.0000 -> 1 +ddcot615 comparetotal 12.1234 12.00000 -> 1 +ddcot616 comparetotal 12.1234 12.000000 -> 1 +ddcot617 comparetotal 12.1234 12.0000000 -> 1 +ddcot618 comparetotal 12.1234 12.00000000 -> 1 +ddcot619 comparetotal 12.1234 12.000000000 -> 1 +ddcot620 comparetotal -12 -12.2345 -> 1 +ddcot621 comparetotal -12.0 -12.2345 -> 1 +ddcot622 comparetotal -12.00 -12.2345 -> 1 +ddcot623 comparetotal -12.000 -12.2345 -> 1 +ddcot624 comparetotal -12.0000 -12.2345 -> 1 +ddcot625 comparetotal -12.00000 -12.2345 -> 1 +ddcot626 comparetotal -12.000000 -12.2345 -> 1 +ddcot627 comparetotal -12.0000000 -12.2345 -> 1 +ddcot628 comparetotal -12.00000000 -12.2345 -> 1 +ddcot629 comparetotal -12.000000000 -12.2345 -> 1 +ddcot630 comparetotal -12.1234 -12 -> -1 +ddcot631 comparetotal -12.1234 -12.0 -> -1 +ddcot632 comparetotal -12.1234 -12.00 -> -1 +ddcot633 comparetotal -12.1234 -12.000 -> -1 +ddcot634 comparetotal -12.1234 -12.0000 -> -1 +ddcot635 comparetotal -12.1234 -12.00000 -> -1 +ddcot636 comparetotal -12.1234 -12.000000 -> -1 +ddcot637 comparetotal -12.1234 -12.0000000 -> -1 +ddcot638 comparetotal -12.1234 -12.00000000 -> -1 +ddcot639 comparetotal -12.1234 -12.000000000 -> -1 + +-- extended zeros +ddcot640 comparetotal 0 0 -> 0 +ddcot641 comparetotal 0 -0 -> 1 +ddcot642 comparetotal 0 -0.0 -> 1 +ddcot643 comparetotal 0 0.0 -> 1 +ddcot644 comparetotal -0 0 -> -1 +ddcot645 comparetotal -0 -0 -> 0 +ddcot646 comparetotal -0 -0.0 -> -1 +ddcot647 comparetotal -0 0.0 -> -1 +ddcot648 comparetotal 0.0 0 -> -1 +ddcot649 comparetotal 0.0 -0 -> 1 +ddcot650 comparetotal 0.0 -0.0 -> 1 +ddcot651 comparetotal 0.0 0.0 -> 0 +ddcot652 comparetotal -0.0 0 -> -1 +ddcot653 comparetotal -0.0 -0 -> 1 +ddcot654 comparetotal -0.0 -0.0 -> 0 +ddcot655 comparetotal -0.0 0.0 -> -1 + +ddcot656 comparetotal -0E1 0.0 -> -1 +ddcot657 comparetotal -0E2 0.0 -> -1 +ddcot658 comparetotal 0E1 0.0 -> 1 +ddcot659 comparetotal 0E2 0.0 -> 1 +ddcot660 comparetotal -0E1 0 -> -1 +ddcot661 comparetotal -0E2 0 -> -1 +ddcot662 comparetotal 0E1 0 -> 1 +ddcot663 comparetotal 0E2 0 -> 1 +ddcot664 comparetotal -0E1 -0E1 -> 0 +ddcot665 comparetotal -0E2 -0E1 -> -1 +ddcot666 comparetotal 0E1 -0E1 -> 1 +ddcot667 comparetotal 0E2 -0E1 -> 1 +ddcot668 comparetotal -0E1 -0E2 -> 1 +ddcot669 comparetotal -0E2 -0E2 -> 0 +ddcot670 comparetotal 0E1 -0E2 -> 1 +ddcot671 comparetotal 0E2 -0E2 -> 1 +ddcot672 comparetotal -0E1 0E1 -> -1 +ddcot673 comparetotal -0E2 0E1 -> -1 +ddcot674 comparetotal 0E1 0E1 -> 0 +ddcot675 comparetotal 0E2 0E1 -> 1 +ddcot676 comparetotal -0E1 0E2 -> -1 +ddcot677 comparetotal -0E2 0E2 -> -1 +ddcot678 comparetotal 0E1 0E2 -> -1 +ddcot679 comparetotal 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +ddcot680 comparetotal 12 12 -> 0 +ddcot681 comparetotal 12 12.0 -> 1 +ddcot682 comparetotal 12 12.00 -> 1 +ddcot683 comparetotal 12 12.000 -> 1 +ddcot684 comparetotal 12 12.0000 -> 1 +ddcot685 comparetotal 12 12.00000 -> 1 +ddcot686 comparetotal 12 12.000000 -> 1 +ddcot687 comparetotal 12 12.0000000 -> 1 +ddcot688 comparetotal 12 12.00000000 -> 1 +ddcot689 comparetotal 12 12.000000000 -> 1 +ddcot690 comparetotal 12 12 -> 0 +ddcot691 comparetotal 12.0 12 -> -1 +ddcot692 comparetotal 12.00 12 -> -1 +ddcot693 comparetotal 12.000 12 -> -1 +ddcot694 comparetotal 12.0000 12 -> -1 +ddcot695 comparetotal 12.00000 12 -> -1 +ddcot696 comparetotal 12.000000 12 -> -1 +ddcot697 comparetotal 12.0000000 12 -> -1 +ddcot698 comparetotal 12.00000000 12 -> -1 +ddcot699 comparetotal 12.000000000 12 -> -1 + +-- old long operand checks +ddcot701 comparetotal 12345678000 1 -> 1 +ddcot702 comparetotal 1 12345678000 -> -1 +ddcot703 comparetotal 1234567800 1 -> 1 +ddcot704 comparetotal 1 1234567800 -> -1 +ddcot705 comparetotal 1234567890 1 -> 1 +ddcot706 comparetotal 1 1234567890 -> -1 +ddcot707 comparetotal 1234567891 1 -> 1 +ddcot708 comparetotal 1 1234567891 -> -1 +ddcot709 comparetotal 12345678901 1 -> 1 +ddcot710 comparetotal 1 12345678901 -> -1 +ddcot711 comparetotal 1234567896 1 -> 1 +ddcot712 comparetotal 1 1234567896 -> -1 +ddcot713 comparetotal -1234567891 1 -> -1 +ddcot714 comparetotal 1 -1234567891 -> 1 +ddcot715 comparetotal -12345678901 1 -> -1 +ddcot716 comparetotal 1 -12345678901 -> 1 +ddcot717 comparetotal -1234567896 1 -> -1 +ddcot718 comparetotal 1 -1234567896 -> 1 + +-- old residue cases +ddcot740 comparetotal 1 0.9999999 -> 1 +ddcot741 comparetotal 1 0.999999 -> 1 +ddcot742 comparetotal 1 0.99999 -> 1 +ddcot743 comparetotal 1 1.0000 -> 1 +ddcot744 comparetotal 1 1.00001 -> -1 +ddcot745 comparetotal 1 1.000001 -> -1 +ddcot746 comparetotal 1 1.0000001 -> -1 +ddcot750 comparetotal 0.9999999 1 -> -1 +ddcot751 comparetotal 0.999999 1 -> -1 +ddcot752 comparetotal 0.99999 1 -> -1 +ddcot753 comparetotal 1.0000 1 -> -1 +ddcot754 comparetotal 1.00001 1 -> 1 +ddcot755 comparetotal 1.000001 1 -> 1 +ddcot756 comparetotal 1.0000001 1 -> 1 + +-- Specials +ddcot780 comparetotal Inf -Inf -> 1 +ddcot781 comparetotal Inf -1000 -> 1 +ddcot782 comparetotal Inf -1 -> 1 +ddcot783 comparetotal Inf -0 -> 1 +ddcot784 comparetotal Inf 0 -> 1 +ddcot785 comparetotal Inf 1 -> 1 +ddcot786 comparetotal Inf 1000 -> 1 +ddcot787 comparetotal Inf Inf -> 0 +ddcot788 comparetotal -1000 Inf -> -1 +ddcot789 comparetotal -Inf Inf -> -1 +ddcot790 comparetotal -1 Inf -> -1 +ddcot791 comparetotal -0 Inf -> -1 +ddcot792 comparetotal 0 Inf -> -1 +ddcot793 comparetotal 1 Inf -> -1 +ddcot794 comparetotal 1000 Inf -> -1 +ddcot795 comparetotal Inf Inf -> 0 + +ddcot800 comparetotal -Inf -Inf -> 0 +ddcot801 comparetotal -Inf -1000 -> -1 +ddcot802 comparetotal -Inf -1 -> -1 +ddcot803 comparetotal -Inf -0 -> -1 +ddcot804 comparetotal -Inf 0 -> -1 +ddcot805 comparetotal -Inf 1 -> -1 +ddcot806 comparetotal -Inf 1000 -> -1 +ddcot807 comparetotal -Inf Inf -> -1 +ddcot808 comparetotal -Inf -Inf -> 0 +ddcot809 comparetotal -1000 -Inf -> 1 +ddcot810 comparetotal -1 -Inf -> 1 +ddcot811 comparetotal -0 -Inf -> 1 +ddcot812 comparetotal 0 -Inf -> 1 +ddcot813 comparetotal 1 -Inf -> 1 +ddcot814 comparetotal 1000 -Inf -> 1 +ddcot815 comparetotal Inf -Inf -> 1 + +ddcot821 comparetotal NaN -Inf -> 1 +ddcot822 comparetotal NaN -1000 -> 1 +ddcot823 comparetotal NaN -1 -> 1 +ddcot824 comparetotal NaN -0 -> 1 +ddcot825 comparetotal NaN 0 -> 1 +ddcot826 comparetotal NaN 1 -> 1 +ddcot827 comparetotal NaN 1000 -> 1 +ddcot828 comparetotal NaN Inf -> 1 +ddcot829 comparetotal NaN NaN -> 0 +ddcot830 comparetotal -Inf NaN -> -1 +ddcot831 comparetotal -1000 NaN -> -1 +ddcot832 comparetotal -1 NaN -> -1 +ddcot833 comparetotal -0 NaN -> -1 +ddcot834 comparetotal 0 NaN -> -1 +ddcot835 comparetotal 1 NaN -> -1 +ddcot836 comparetotal 1000 NaN -> -1 +ddcot837 comparetotal Inf NaN -> -1 +ddcot838 comparetotal -NaN -NaN -> 0 +ddcot839 comparetotal +NaN -NaN -> 1 +ddcot840 comparetotal -NaN +NaN -> -1 + +ddcot841 comparetotal sNaN -sNaN -> 1 +ddcot842 comparetotal sNaN -NaN -> 1 +ddcot843 comparetotal sNaN -Inf -> 1 +ddcot844 comparetotal sNaN -1000 -> 1 +ddcot845 comparetotal sNaN -1 -> 1 +ddcot846 comparetotal sNaN -0 -> 1 +ddcot847 comparetotal sNaN 0 -> 1 +ddcot848 comparetotal sNaN 1 -> 1 +ddcot849 comparetotal sNaN 1000 -> 1 +ddcot850 comparetotal sNaN NaN -> -1 +ddcot851 comparetotal sNaN sNaN -> 0 + +ddcot852 comparetotal -sNaN sNaN -> -1 +ddcot853 comparetotal -NaN sNaN -> -1 +ddcot854 comparetotal -Inf sNaN -> -1 +ddcot855 comparetotal -1000 sNaN -> -1 +ddcot856 comparetotal -1 sNaN -> -1 +ddcot857 comparetotal -0 sNaN -> -1 +ddcot858 comparetotal 0 sNaN -> -1 +ddcot859 comparetotal 1 sNaN -> -1 +ddcot860 comparetotal 1000 sNaN -> -1 +ddcot861 comparetotal Inf sNaN -> -1 +ddcot862 comparetotal NaN sNaN -> 1 +ddcot863 comparetotal sNaN sNaN -> 0 + +ddcot871 comparetotal -sNaN -sNaN -> 0 +ddcot872 comparetotal -sNaN -NaN -> 1 +ddcot873 comparetotal -sNaN -Inf -> -1 +ddcot874 comparetotal -sNaN -1000 -> -1 +ddcot875 comparetotal -sNaN -1 -> -1 +ddcot876 comparetotal -sNaN -0 -> -1 +ddcot877 comparetotal -sNaN 0 -> -1 +ddcot878 comparetotal -sNaN 1 -> -1 +ddcot879 comparetotal -sNaN 1000 -> -1 +ddcot880 comparetotal -sNaN NaN -> -1 +ddcot881 comparetotal -sNaN sNaN -> -1 + +ddcot882 comparetotal -sNaN -sNaN -> 0 +ddcot883 comparetotal -NaN -sNaN -> -1 +ddcot884 comparetotal -Inf -sNaN -> 1 +ddcot885 comparetotal -1000 -sNaN -> 1 +ddcot886 comparetotal -1 -sNaN -> 1 +ddcot887 comparetotal -0 -sNaN -> 1 +ddcot888 comparetotal 0 -sNaN -> 1 +ddcot889 comparetotal 1 -sNaN -> 1 +ddcot890 comparetotal 1000 -sNaN -> 1 +ddcot891 comparetotal Inf -sNaN -> 1 +ddcot892 comparetotal NaN -sNaN -> 1 +ddcot893 comparetotal sNaN -sNaN -> 1 + +-- NaNs with payload +ddcot960 comparetotal NaN9 -Inf -> 1 +ddcot961 comparetotal NaN8 999 -> 1 +ddcot962 comparetotal NaN77 Inf -> 1 +ddcot963 comparetotal -NaN67 NaN5 -> -1 +ddcot964 comparetotal -Inf -NaN4 -> 1 +ddcot965 comparetotal -999 -NaN33 -> 1 +ddcot966 comparetotal Inf NaN2 -> -1 + +ddcot970 comparetotal -NaN41 -NaN42 -> 1 +ddcot971 comparetotal +NaN41 -NaN42 -> 1 +ddcot972 comparetotal -NaN41 +NaN42 -> -1 +ddcot973 comparetotal +NaN41 +NaN42 -> -1 +ddcot974 comparetotal -NaN42 -NaN01 -> -1 +ddcot975 comparetotal +NaN42 -NaN01 -> 1 +ddcot976 comparetotal -NaN42 +NaN01 -> -1 +ddcot977 comparetotal +NaN42 +NaN01 -> 1 + +ddcot980 comparetotal -sNaN771 -sNaN772 -> 1 +ddcot981 comparetotal +sNaN771 -sNaN772 -> 1 +ddcot982 comparetotal -sNaN771 +sNaN772 -> -1 +ddcot983 comparetotal +sNaN771 +sNaN772 -> -1 +ddcot984 comparetotal -sNaN772 -sNaN771 -> -1 +ddcot985 comparetotal +sNaN772 -sNaN771 -> 1 +ddcot986 comparetotal -sNaN772 +sNaN771 -> -1 +ddcot987 comparetotal +sNaN772 +sNaN771 -> 1 + +ddcot991 comparetotal -sNaN99 -Inf -> -1 +ddcot992 comparetotal sNaN98 -11 -> 1 +ddcot993 comparetotal sNaN97 NaN -> -1 +ddcot994 comparetotal sNaN16 sNaN94 -> -1 +ddcot995 comparetotal NaN85 sNaN83 -> 1 +ddcot996 comparetotal -Inf sNaN92 -> -1 +ddcot997 comparetotal 088 sNaN81 -> -1 +ddcot998 comparetotal Inf sNaN90 -> -1 +ddcot999 comparetotal NaN -sNaN89 -> 1 + +-- spread zeros +ddcot1110 comparetotal 0E-383 0 -> -1 +ddcot1111 comparetotal 0E-383 -0 -> 1 +ddcot1112 comparetotal -0E-383 0 -> -1 +ddcot1113 comparetotal -0E-383 -0 -> 1 +ddcot1114 comparetotal 0E-383 0E+384 -> -1 +ddcot1115 comparetotal 0E-383 -0E+384 -> 1 +ddcot1116 comparetotal -0E-383 0E+384 -> -1 +ddcot1117 comparetotal -0E-383 -0E+384 -> 1 +ddcot1118 comparetotal 0 0E+384 -> -1 +ddcot1119 comparetotal 0 -0E+384 -> 1 +ddcot1120 comparetotal -0 0E+384 -> -1 +ddcot1121 comparetotal -0 -0E+384 -> 1 + +ddcot1130 comparetotal 0E+384 0 -> 1 +ddcot1131 comparetotal 0E+384 -0 -> 1 +ddcot1132 comparetotal -0E+384 0 -> -1 +ddcot1133 comparetotal -0E+384 -0 -> -1 +ddcot1134 comparetotal 0E+384 0E-383 -> 1 +ddcot1135 comparetotal 0E+384 -0E-383 -> 1 +ddcot1136 comparetotal -0E+384 0E-383 -> -1 +ddcot1137 comparetotal -0E+384 -0E-383 -> -1 +ddcot1138 comparetotal 0 0E-383 -> 1 +ddcot1139 comparetotal 0 -0E-383 -> 1 +ddcot1140 comparetotal -0 0E-383 -> -1 +ddcot1141 comparetotal -0 -0E-383 -> -1 + +-- Null tests +ddcot9990 comparetotal 10 # -> NaN Invalid_operation +ddcot9991 comparetotal # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddCompareTotalMag.decTest b/Lib/test/decimaltestdata/ddCompareTotalMag.decTest index 087a092f0b0..f16537a35d7 100644 --- a/Lib/test/decimaltestdata/ddCompareTotalMag.decTest +++ b/Lib/test/decimaltestdata/ddCompareTotalMag.decTest @@ -1,706 +1,706 @@ ------------------------------------------------------------------------- --- ddCompareTotalMag.decTest -- decDouble comparison; abs. total order-- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddctm001 comparetotmag -2 -2 -> 0 -ddctm002 comparetotmag -2 -1 -> 1 -ddctm003 comparetotmag -2 0 -> 1 -ddctm004 comparetotmag -2 1 -> 1 -ddctm005 comparetotmag -2 2 -> 0 -ddctm006 comparetotmag -1 -2 -> -1 -ddctm007 comparetotmag -1 -1 -> 0 -ddctm008 comparetotmag -1 0 -> 1 -ddctm009 comparetotmag -1 1 -> 0 -ddctm010 comparetotmag -1 2 -> -1 -ddctm011 comparetotmag 0 -2 -> -1 -ddctm012 comparetotmag 0 -1 -> -1 -ddctm013 comparetotmag 0 0 -> 0 -ddctm014 comparetotmag 0 1 -> -1 -ddctm015 comparetotmag 0 2 -> -1 -ddctm016 comparetotmag 1 -2 -> -1 -ddctm017 comparetotmag 1 -1 -> 0 -ddctm018 comparetotmag 1 0 -> 1 -ddctm019 comparetotmag 1 1 -> 0 -ddctm020 comparetotmag 1 2 -> -1 -ddctm021 comparetotmag 2 -2 -> 0 -ddctm022 comparetotmag 2 -1 -> 1 -ddctm023 comparetotmag 2 0 -> 1 -ddctm025 comparetotmag 2 1 -> 1 -ddctm026 comparetotmag 2 2 -> 0 - -ddctm031 comparetotmag -20 -20 -> 0 -ddctm032 comparetotmag -20 -10 -> 1 -ddctm033 comparetotmag -20 00 -> 1 -ddctm034 comparetotmag -20 10 -> 1 -ddctm035 comparetotmag -20 20 -> 0 -ddctm036 comparetotmag -10 -20 -> -1 -ddctm037 comparetotmag -10 -10 -> 0 -ddctm038 comparetotmag -10 00 -> 1 -ddctm039 comparetotmag -10 10 -> 0 -ddctm040 comparetotmag -10 20 -> -1 -ddctm041 comparetotmag 00 -20 -> -1 -ddctm042 comparetotmag 00 -10 -> -1 -ddctm043 comparetotmag 00 00 -> 0 -ddctm044 comparetotmag 00 10 -> -1 -ddctm045 comparetotmag 00 20 -> -1 -ddctm046 comparetotmag 10 -20 -> -1 -ddctm047 comparetotmag 10 -10 -> 0 -ddctm048 comparetotmag 10 00 -> 1 -ddctm049 comparetotmag 10 10 -> 0 -ddctm050 comparetotmag 10 20 -> -1 -ddctm051 comparetotmag 20 -20 -> 0 -ddctm052 comparetotmag 20 -10 -> 1 -ddctm053 comparetotmag 20 00 -> 1 -ddctm055 comparetotmag 20 10 -> 1 -ddctm056 comparetotmag 20 20 -> 0 - -ddctm061 comparetotmag -2.0 -2.0 -> 0 -ddctm062 comparetotmag -2.0 -1.0 -> 1 -ddctm063 comparetotmag -2.0 0.0 -> 1 -ddctm064 comparetotmag -2.0 1.0 -> 1 -ddctm065 comparetotmag -2.0 2.0 -> 0 -ddctm066 comparetotmag -1.0 -2.0 -> -1 -ddctm067 comparetotmag -1.0 -1.0 -> 0 -ddctm068 comparetotmag -1.0 0.0 -> 1 -ddctm069 comparetotmag -1.0 1.0 -> 0 -ddctm070 comparetotmag -1.0 2.0 -> -1 -ddctm071 comparetotmag 0.0 -2.0 -> -1 -ddctm072 comparetotmag 0.0 -1.0 -> -1 -ddctm073 comparetotmag 0.0 0.0 -> 0 -ddctm074 comparetotmag 0.0 1.0 -> -1 -ddctm075 comparetotmag 0.0 2.0 -> -1 -ddctm076 comparetotmag 1.0 -2.0 -> -1 -ddctm077 comparetotmag 1.0 -1.0 -> 0 -ddctm078 comparetotmag 1.0 0.0 -> 1 -ddctm079 comparetotmag 1.0 1.0 -> 0 -ddctm080 comparetotmag 1.0 2.0 -> -1 -ddctm081 comparetotmag 2.0 -2.0 -> 0 -ddctm082 comparetotmag 2.0 -1.0 -> 1 -ddctm083 comparetotmag 2.0 0.0 -> 1 -ddctm085 comparetotmag 2.0 1.0 -> 1 -ddctm086 comparetotmag 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -ddctm090 comparetotmag 9.99999999E+384 9.99999999E+384 -> 0 -ddctm091 comparetotmag -9.99999999E+384 9.99999999E+384 -> 0 -ddctm092 comparetotmag 9.99999999E+384 -9.99999999E+384 -> 0 -ddctm093 comparetotmag -9.99999999E+384 -9.99999999E+384 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -ddctm100 comparetotmag 7.0 7.0 -> 0 -ddctm101 comparetotmag 7.0 7 -> -1 -ddctm102 comparetotmag 7 7.0 -> 1 -ddctm103 comparetotmag 7E+0 7.0 -> 1 -ddctm104 comparetotmag 70E-1 7.0 -> 0 -ddctm105 comparetotmag 0.7E+1 7 -> 0 -ddctm106 comparetotmag 70E-1 7 -> -1 -ddctm107 comparetotmag 7.0 7E+0 -> -1 -ddctm108 comparetotmag 7.0 70E-1 -> 0 -ddctm109 comparetotmag 7 0.7E+1 -> 0 -ddctm110 comparetotmag 7 70E-1 -> 1 - -ddctm120 comparetotmag 8.0 7.0 -> 1 -ddctm121 comparetotmag 8.0 7 -> 1 -ddctm122 comparetotmag 8 7.0 -> 1 -ddctm123 comparetotmag 8E+0 7.0 -> 1 -ddctm124 comparetotmag 80E-1 7.0 -> 1 -ddctm125 comparetotmag 0.8E+1 7 -> 1 -ddctm126 comparetotmag 80E-1 7 -> 1 -ddctm127 comparetotmag 8.0 7E+0 -> 1 -ddctm128 comparetotmag 8.0 70E-1 -> 1 -ddctm129 comparetotmag 8 0.7E+1 -> 1 -ddctm130 comparetotmag 8 70E-1 -> 1 - -ddctm140 comparetotmag 8.0 9.0 -> -1 -ddctm141 comparetotmag 8.0 9 -> -1 -ddctm142 comparetotmag 8 9.0 -> -1 -ddctm143 comparetotmag 8E+0 9.0 -> -1 -ddctm144 comparetotmag 80E-1 9.0 -> -1 -ddctm145 comparetotmag 0.8E+1 9 -> -1 -ddctm146 comparetotmag 80E-1 9 -> -1 -ddctm147 comparetotmag 8.0 9E+0 -> -1 -ddctm148 comparetotmag 8.0 90E-1 -> -1 -ddctm149 comparetotmag 8 0.9E+1 -> -1 -ddctm150 comparetotmag 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -ddctm200 comparetotmag -7.0 7.0 -> 0 -ddctm201 comparetotmag -7.0 7 -> -1 -ddctm202 comparetotmag -7 7.0 -> 1 -ddctm203 comparetotmag -7E+0 7.0 -> 1 -ddctm204 comparetotmag -70E-1 7.0 -> 0 -ddctm205 comparetotmag -0.7E+1 7 -> 0 -ddctm206 comparetotmag -70E-1 7 -> -1 -ddctm207 comparetotmag -7.0 7E+0 -> -1 -ddctm208 comparetotmag -7.0 70E-1 -> 0 -ddctm209 comparetotmag -7 0.7E+1 -> 0 -ddctm210 comparetotmag -7 70E-1 -> 1 - -ddctm220 comparetotmag -8.0 7.0 -> 1 -ddctm221 comparetotmag -8.0 7 -> 1 -ddctm222 comparetotmag -8 7.0 -> 1 -ddctm223 comparetotmag -8E+0 7.0 -> 1 -ddctm224 comparetotmag -80E-1 7.0 -> 1 -ddctm225 comparetotmag -0.8E+1 7 -> 1 -ddctm226 comparetotmag -80E-1 7 -> 1 -ddctm227 comparetotmag -8.0 7E+0 -> 1 -ddctm228 comparetotmag -8.0 70E-1 -> 1 -ddctm229 comparetotmag -8 0.7E+1 -> 1 -ddctm230 comparetotmag -8 70E-1 -> 1 - -ddctm240 comparetotmag -8.0 9.0 -> -1 -ddctm241 comparetotmag -8.0 9 -> -1 -ddctm242 comparetotmag -8 9.0 -> -1 -ddctm243 comparetotmag -8E+0 9.0 -> -1 -ddctm244 comparetotmag -80E-1 9.0 -> -1 -ddctm245 comparetotmag -0.8E+1 9 -> -1 -ddctm246 comparetotmag -80E-1 9 -> -1 -ddctm247 comparetotmag -8.0 9E+0 -> -1 -ddctm248 comparetotmag -8.0 90E-1 -> -1 -ddctm249 comparetotmag -8 0.9E+1 -> -1 -ddctm250 comparetotmag -8 90E-1 -> -1 - --- and again, with sign changes +- .. -ddctm300 comparetotmag 7.0 -7.0 -> 0 -ddctm301 comparetotmag 7.0 -7 -> -1 -ddctm302 comparetotmag 7 -7.0 -> 1 -ddctm303 comparetotmag 7E+0 -7.0 -> 1 -ddctm304 comparetotmag 70E-1 -7.0 -> 0 -ddctm305 comparetotmag .7E+1 -7 -> 0 -ddctm306 comparetotmag 70E-1 -7 -> -1 -ddctm307 comparetotmag 7.0 -7E+0 -> -1 -ddctm308 comparetotmag 7.0 -70E-1 -> 0 -ddctm309 comparetotmag 7 -.7E+1 -> 0 -ddctm310 comparetotmag 7 -70E-1 -> 1 - -ddctm320 comparetotmag 8.0 -7.0 -> 1 -ddctm321 comparetotmag 8.0 -7 -> 1 -ddctm322 comparetotmag 8 -7.0 -> 1 -ddctm323 comparetotmag 8E+0 -7.0 -> 1 -ddctm324 comparetotmag 80E-1 -7.0 -> 1 -ddctm325 comparetotmag .8E+1 -7 -> 1 -ddctm326 comparetotmag 80E-1 -7 -> 1 -ddctm327 comparetotmag 8.0 -7E+0 -> 1 -ddctm328 comparetotmag 8.0 -70E-1 -> 1 -ddctm329 comparetotmag 8 -.7E+1 -> 1 -ddctm330 comparetotmag 8 -70E-1 -> 1 - -ddctm340 comparetotmag 8.0 -9.0 -> -1 -ddctm341 comparetotmag 8.0 -9 -> -1 -ddctm342 comparetotmag 8 -9.0 -> -1 -ddctm343 comparetotmag 8E+0 -9.0 -> -1 -ddctm344 comparetotmag 80E-1 -9.0 -> -1 -ddctm345 comparetotmag .8E+1 -9 -> -1 -ddctm346 comparetotmag 80E-1 -9 -> -1 -ddctm347 comparetotmag 8.0 -9E+0 -> -1 -ddctm348 comparetotmag 8.0 -90E-1 -> -1 -ddctm349 comparetotmag 8 -.9E+1 -> -1 -ddctm350 comparetotmag 8 -90E-1 -> -1 - --- and again, with sign changes -- .. -ddctm400 comparetotmag -7.0 -7.0 -> 0 -ddctm401 comparetotmag -7.0 -7 -> -1 -ddctm402 comparetotmag -7 -7.0 -> 1 -ddctm403 comparetotmag -7E+0 -7.0 -> 1 -ddctm404 comparetotmag -70E-1 -7.0 -> 0 -ddctm405 comparetotmag -.7E+1 -7 -> 0 -ddctm406 comparetotmag -70E-1 -7 -> -1 -ddctm407 comparetotmag -7.0 -7E+0 -> -1 -ddctm408 comparetotmag -7.0 -70E-1 -> 0 -ddctm409 comparetotmag -7 -.7E+1 -> 0 -ddctm410 comparetotmag -7 -70E-1 -> 1 - -ddctm420 comparetotmag -8.0 -7.0 -> 1 -ddctm421 comparetotmag -8.0 -7 -> 1 -ddctm422 comparetotmag -8 -7.0 -> 1 -ddctm423 comparetotmag -8E+0 -7.0 -> 1 -ddctm424 comparetotmag -80E-1 -7.0 -> 1 -ddctm425 comparetotmag -.8E+1 -7 -> 1 -ddctm426 comparetotmag -80E-1 -7 -> 1 -ddctm427 comparetotmag -8.0 -7E+0 -> 1 -ddctm428 comparetotmag -8.0 -70E-1 -> 1 -ddctm429 comparetotmag -8 -.7E+1 -> 1 -ddctm430 comparetotmag -8 -70E-1 -> 1 - -ddctm440 comparetotmag -8.0 -9.0 -> -1 -ddctm441 comparetotmag -8.0 -9 -> -1 -ddctm442 comparetotmag -8 -9.0 -> -1 -ddctm443 comparetotmag -8E+0 -9.0 -> -1 -ddctm444 comparetotmag -80E-1 -9.0 -> -1 -ddctm445 comparetotmag -.8E+1 -9 -> -1 -ddctm446 comparetotmag -80E-1 -9 -> -1 -ddctm447 comparetotmag -8.0 -9E+0 -> -1 -ddctm448 comparetotmag -8.0 -90E-1 -> -1 -ddctm449 comparetotmag -8 -.9E+1 -> -1 -ddctm450 comparetotmag -8 -90E-1 -> -1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -ddctm473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 -ddctm474 comparetotmag 123.456000000000E+89 123.456E+89 -> -1 -ddctm475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 -ddctm476 comparetotmag 123.4560000000E+89 123.456E+89 -> -1 -ddctm477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 -ddctm478 comparetotmag 123.45600000E+89 123.456E+89 -> -1 -ddctm479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 -ddctm480 comparetotmag 123.456000E+89 123.456E+89 -> -1 -ddctm481 comparetotmag 123.45600E-89 123.456E-89 -> -1 -ddctm482 comparetotmag 123.4560E+89 123.456E+89 -> -1 -ddctm483 comparetotmag 123.456E-89 123.456E-89 -> 0 -ddctm487 comparetotmag 123.456E+89 123.4560000000000E+89 -> 1 -ddctm488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 -ddctm489 comparetotmag 123.456E+89 123.45600000000E+89 -> 1 -ddctm490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 -ddctm491 comparetotmag 123.456E+89 123.456000000E+89 -> 1 -ddctm492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 -ddctm493 comparetotmag 123.456E+89 123.4560000E+89 -> 1 -ddctm494 comparetotmag 123.456E-89 123.456000E-89 -> 1 -ddctm495 comparetotmag 123.456E+89 123.45600E+89 -> 1 -ddctm496 comparetotmag 123.456E-89 123.4560E-89 -> 1 -ddctm497 comparetotmag 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -ddctm498 comparetotmag 1 1E-17 -> 1 -ddctm499 comparetotmag 1 1E-16 -> 1 -ddctm500 comparetotmag 1 1E-15 -> 1 -ddctm501 comparetotmag 1 1E-14 -> 1 -ddctm502 comparetotmag 1 1E-13 -> 1 -ddctm503 comparetotmag 1 1E-12 -> 1 -ddctm504 comparetotmag 1 1E-11 -> 1 -ddctm505 comparetotmag 1 1E-10 -> 1 -ddctm506 comparetotmag 1 1E-9 -> 1 -ddctm507 comparetotmag 1 1E-8 -> 1 -ddctm508 comparetotmag 1 1E-7 -> 1 -ddctm509 comparetotmag 1 1E-6 -> 1 -ddctm510 comparetotmag 1 1E-5 -> 1 -ddctm511 comparetotmag 1 1E-4 -> 1 -ddctm512 comparetotmag 1 1E-3 -> 1 -ddctm513 comparetotmag 1 1E-2 -> 1 -ddctm514 comparetotmag 1 1E-1 -> 1 -ddctm515 comparetotmag 1 1E-0 -> 0 -ddctm516 comparetotmag 1 1E+1 -> -1 -ddctm517 comparetotmag 1 1E+2 -> -1 -ddctm518 comparetotmag 1 1E+3 -> -1 -ddctm519 comparetotmag 1 1E+4 -> -1 -ddctm521 comparetotmag 1 1E+5 -> -1 -ddctm522 comparetotmag 1 1E+6 -> -1 -ddctm523 comparetotmag 1 1E+7 -> -1 -ddctm524 comparetotmag 1 1E+8 -> -1 -ddctm525 comparetotmag 1 1E+9 -> -1 -ddctm526 comparetotmag 1 1E+10 -> -1 -ddctm527 comparetotmag 1 1E+11 -> -1 -ddctm528 comparetotmag 1 1E+12 -> -1 -ddctm529 comparetotmag 1 1E+13 -> -1 -ddctm530 comparetotmag 1 1E+14 -> -1 -ddctm531 comparetotmag 1 1E+15 -> -1 -ddctm532 comparetotmag 1 1E+16 -> -1 -ddctm533 comparetotmag 1 1E+17 -> -1 --- LR swap -ddctm538 comparetotmag 1E-17 1 -> -1 -ddctm539 comparetotmag 1E-16 1 -> -1 -ddctm540 comparetotmag 1E-15 1 -> -1 -ddctm541 comparetotmag 1E-14 1 -> -1 -ddctm542 comparetotmag 1E-13 1 -> -1 -ddctm543 comparetotmag 1E-12 1 -> -1 -ddctm544 comparetotmag 1E-11 1 -> -1 -ddctm545 comparetotmag 1E-10 1 -> -1 -ddctm546 comparetotmag 1E-9 1 -> -1 -ddctm547 comparetotmag 1E-8 1 -> -1 -ddctm548 comparetotmag 1E-7 1 -> -1 -ddctm549 comparetotmag 1E-6 1 -> -1 -ddctm550 comparetotmag 1E-5 1 -> -1 -ddctm551 comparetotmag 1E-4 1 -> -1 -ddctm552 comparetotmag 1E-3 1 -> -1 -ddctm553 comparetotmag 1E-2 1 -> -1 -ddctm554 comparetotmag 1E-1 1 -> -1 -ddctm555 comparetotmag 1E-0 1 -> 0 -ddctm556 comparetotmag 1E+1 1 -> 1 -ddctm557 comparetotmag 1E+2 1 -> 1 -ddctm558 comparetotmag 1E+3 1 -> 1 -ddctm559 comparetotmag 1E+4 1 -> 1 -ddctm561 comparetotmag 1E+5 1 -> 1 -ddctm562 comparetotmag 1E+6 1 -> 1 -ddctm563 comparetotmag 1E+7 1 -> 1 -ddctm564 comparetotmag 1E+8 1 -> 1 -ddctm565 comparetotmag 1E+9 1 -> 1 -ddctm566 comparetotmag 1E+10 1 -> 1 -ddctm567 comparetotmag 1E+11 1 -> 1 -ddctm568 comparetotmag 1E+12 1 -> 1 -ddctm569 comparetotmag 1E+13 1 -> 1 -ddctm570 comparetotmag 1E+14 1 -> 1 -ddctm571 comparetotmag 1E+15 1 -> 1 -ddctm572 comparetotmag 1E+16 1 -> 1 -ddctm573 comparetotmag 1E+17 1 -> 1 --- similar with a useful coefficient, one side only -ddctm578 comparetotmag 0.000000987654321 1E-17 -> 1 -ddctm579 comparetotmag 0.000000987654321 1E-16 -> 1 -ddctm580 comparetotmag 0.000000987654321 1E-15 -> 1 -ddctm581 comparetotmag 0.000000987654321 1E-14 -> 1 -ddctm582 comparetotmag 0.000000987654321 1E-13 -> 1 -ddctm583 comparetotmag 0.000000987654321 1E-12 -> 1 -ddctm584 comparetotmag 0.000000987654321 1E-11 -> 1 -ddctm585 comparetotmag 0.000000987654321 1E-10 -> 1 -ddctm586 comparetotmag 0.000000987654321 1E-9 -> 1 -ddctm587 comparetotmag 0.000000987654321 1E-8 -> 1 -ddctm588 comparetotmag 0.000000987654321 1E-7 -> 1 -ddctm589 comparetotmag 0.000000987654321 1E-6 -> -1 -ddctm590 comparetotmag 0.000000987654321 1E-5 -> -1 -ddctm591 comparetotmag 0.000000987654321 1E-4 -> -1 -ddctm592 comparetotmag 0.000000987654321 1E-3 -> -1 -ddctm593 comparetotmag 0.000000987654321 1E-2 -> -1 -ddctm594 comparetotmag 0.000000987654321 1E-1 -> -1 -ddctm595 comparetotmag 0.000000987654321 1E-0 -> -1 -ddctm596 comparetotmag 0.000000987654321 1E+1 -> -1 -ddctm597 comparetotmag 0.000000987654321 1E+2 -> -1 -ddctm598 comparetotmag 0.000000987654321 1E+3 -> -1 -ddctm599 comparetotmag 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -ddctm600 comparetotmag 12 12.2345 -> -1 -ddctm601 comparetotmag 12.0 12.2345 -> -1 -ddctm602 comparetotmag 12.00 12.2345 -> -1 -ddctm603 comparetotmag 12.000 12.2345 -> -1 -ddctm604 comparetotmag 12.0000 12.2345 -> -1 -ddctm605 comparetotmag 12.00000 12.2345 -> -1 -ddctm606 comparetotmag 12.000000 12.2345 -> -1 -ddctm607 comparetotmag 12.0000000 12.2345 -> -1 -ddctm608 comparetotmag 12.00000000 12.2345 -> -1 -ddctm609 comparetotmag 12.000000000 12.2345 -> -1 -ddctm610 comparetotmag 12.1234 12 -> 1 -ddctm611 comparetotmag 12.1234 12.0 -> 1 -ddctm612 comparetotmag 12.1234 12.00 -> 1 -ddctm613 comparetotmag 12.1234 12.000 -> 1 -ddctm614 comparetotmag 12.1234 12.0000 -> 1 -ddctm615 comparetotmag 12.1234 12.00000 -> 1 -ddctm616 comparetotmag 12.1234 12.000000 -> 1 -ddctm617 comparetotmag 12.1234 12.0000000 -> 1 -ddctm618 comparetotmag 12.1234 12.00000000 -> 1 -ddctm619 comparetotmag 12.1234 12.000000000 -> 1 -ddctm620 comparetotmag -12 -12.2345 -> -1 -ddctm621 comparetotmag -12.0 -12.2345 -> -1 -ddctm622 comparetotmag -12.00 -12.2345 -> -1 -ddctm623 comparetotmag -12.000 -12.2345 -> -1 -ddctm624 comparetotmag -12.0000 -12.2345 -> -1 -ddctm625 comparetotmag -12.00000 -12.2345 -> -1 -ddctm626 comparetotmag -12.000000 -12.2345 -> -1 -ddctm627 comparetotmag -12.0000000 -12.2345 -> -1 -ddctm628 comparetotmag -12.00000000 -12.2345 -> -1 -ddctm629 comparetotmag -12.000000000 -12.2345 -> -1 -ddctm630 comparetotmag -12.1234 -12 -> 1 -ddctm631 comparetotmag -12.1234 -12.0 -> 1 -ddctm632 comparetotmag -12.1234 -12.00 -> 1 -ddctm633 comparetotmag -12.1234 -12.000 -> 1 -ddctm634 comparetotmag -12.1234 -12.0000 -> 1 -ddctm635 comparetotmag -12.1234 -12.00000 -> 1 -ddctm636 comparetotmag -12.1234 -12.000000 -> 1 -ddctm637 comparetotmag -12.1234 -12.0000000 -> 1 -ddctm638 comparetotmag -12.1234 -12.00000000 -> 1 -ddctm639 comparetotmag -12.1234 -12.000000000 -> 1 - --- extended zeros -ddctm640 comparetotmag 0 0 -> 0 -ddctm641 comparetotmag 0 -0 -> 0 -ddctm642 comparetotmag 0 -0.0 -> 1 -ddctm643 comparetotmag 0 0.0 -> 1 -ddctm644 comparetotmag -0 0 -> 0 -ddctm645 comparetotmag -0 -0 -> 0 -ddctm646 comparetotmag -0 -0.0 -> 1 -ddctm647 comparetotmag -0 0.0 -> 1 -ddctm648 comparetotmag 0.0 0 -> -1 -ddctm649 comparetotmag 0.0 -0 -> -1 -ddctm650 comparetotmag 0.0 -0.0 -> 0 -ddctm651 comparetotmag 0.0 0.0 -> 0 -ddctm652 comparetotmag -0.0 0 -> -1 -ddctm653 comparetotmag -0.0 -0 -> -1 -ddctm654 comparetotmag -0.0 -0.0 -> 0 -ddctm655 comparetotmag -0.0 0.0 -> 0 - -ddctm656 comparetotmag -0E1 0.0 -> 1 -ddctm657 comparetotmag -0E2 0.0 -> 1 -ddctm658 comparetotmag 0E1 0.0 -> 1 -ddctm659 comparetotmag 0E2 0.0 -> 1 -ddctm660 comparetotmag -0E1 0 -> 1 -ddctm661 comparetotmag -0E2 0 -> 1 -ddctm662 comparetotmag 0E1 0 -> 1 -ddctm663 comparetotmag 0E2 0 -> 1 -ddctm664 comparetotmag -0E1 -0E1 -> 0 -ddctm665 comparetotmag -0E2 -0E1 -> 1 -ddctm666 comparetotmag 0E1 -0E1 -> 0 -ddctm667 comparetotmag 0E2 -0E1 -> 1 -ddctm668 comparetotmag -0E1 -0E2 -> -1 -ddctm669 comparetotmag -0E2 -0E2 -> 0 -ddctm670 comparetotmag 0E1 -0E2 -> -1 -ddctm671 comparetotmag 0E2 -0E2 -> 0 -ddctm672 comparetotmag -0E1 0E1 -> 0 -ddctm673 comparetotmag -0E2 0E1 -> 1 -ddctm674 comparetotmag 0E1 0E1 -> 0 -ddctm675 comparetotmag 0E2 0E1 -> 1 -ddctm676 comparetotmag -0E1 0E2 -> -1 -ddctm677 comparetotmag -0E2 0E2 -> 0 -ddctm678 comparetotmag 0E1 0E2 -> -1 -ddctm679 comparetotmag 0E2 0E2 -> 0 - --- trailing zeros; unit-y -ddctm680 comparetotmag 12 12 -> 0 -ddctm681 comparetotmag 12 12.0 -> 1 -ddctm682 comparetotmag 12 12.00 -> 1 -ddctm683 comparetotmag 12 12.000 -> 1 -ddctm684 comparetotmag 12 12.0000 -> 1 -ddctm685 comparetotmag 12 12.00000 -> 1 -ddctm686 comparetotmag 12 12.000000 -> 1 -ddctm687 comparetotmag 12 12.0000000 -> 1 -ddctm688 comparetotmag 12 12.00000000 -> 1 -ddctm689 comparetotmag 12 12.000000000 -> 1 -ddctm690 comparetotmag 12 12 -> 0 -ddctm691 comparetotmag 12.0 12 -> -1 -ddctm692 comparetotmag 12.00 12 -> -1 -ddctm693 comparetotmag 12.000 12 -> -1 -ddctm694 comparetotmag 12.0000 12 -> -1 -ddctm695 comparetotmag 12.00000 12 -> -1 -ddctm696 comparetotmag 12.000000 12 -> -1 -ddctm697 comparetotmag 12.0000000 12 -> -1 -ddctm698 comparetotmag 12.00000000 12 -> -1 -ddctm699 comparetotmag 12.000000000 12 -> -1 - --- old long operand checks -ddctm701 comparetotmag 12345678000 1 -> 1 -ddctm702 comparetotmag 1 12345678000 -> -1 -ddctm703 comparetotmag 1234567800 1 -> 1 -ddctm704 comparetotmag 1 1234567800 -> -1 -ddctm705 comparetotmag 1234567890 1 -> 1 -ddctm706 comparetotmag 1 1234567890 -> -1 -ddctm707 comparetotmag 1234567891 1 -> 1 -ddctm708 comparetotmag 1 1234567891 -> -1 -ddctm709 comparetotmag 12345678901 1 -> 1 -ddctm710 comparetotmag 1 12345678901 -> -1 -ddctm711 comparetotmag 1234567896 1 -> 1 -ddctm712 comparetotmag 1 1234567896 -> -1 -ddctm713 comparetotmag -1234567891 1 -> 1 -ddctm714 comparetotmag 1 -1234567891 -> -1 -ddctm715 comparetotmag -12345678901 1 -> 1 -ddctm716 comparetotmag 1 -12345678901 -> -1 -ddctm717 comparetotmag -1234567896 1 -> 1 -ddctm718 comparetotmag 1 -1234567896 -> -1 - --- old residue cases -ddctm740 comparetotmag 1 0.9999999 -> 1 -ddctm741 comparetotmag 1 0.999999 -> 1 -ddctm742 comparetotmag 1 0.99999 -> 1 -ddctm743 comparetotmag 1 1.0000 -> 1 -ddctm744 comparetotmag 1 1.00001 -> -1 -ddctm745 comparetotmag 1 1.000001 -> -1 -ddctm746 comparetotmag 1 1.0000001 -> -1 -ddctm750 comparetotmag 0.9999999 1 -> -1 -ddctm751 comparetotmag 0.999999 1 -> -1 -ddctm752 comparetotmag 0.99999 1 -> -1 -ddctm753 comparetotmag 1.0000 1 -> -1 -ddctm754 comparetotmag 1.00001 1 -> 1 -ddctm755 comparetotmag 1.000001 1 -> 1 -ddctm756 comparetotmag 1.0000001 1 -> 1 - --- Specials -ddctm780 comparetotmag Inf -Inf -> 0 -ddctm781 comparetotmag Inf -1000 -> 1 -ddctm782 comparetotmag Inf -1 -> 1 -ddctm783 comparetotmag Inf -0 -> 1 -ddctm784 comparetotmag Inf 0 -> 1 -ddctm785 comparetotmag Inf 1 -> 1 -ddctm786 comparetotmag Inf 1000 -> 1 -ddctm787 comparetotmag Inf Inf -> 0 -ddctm788 comparetotmag -1000 Inf -> -1 -ddctm789 comparetotmag -Inf Inf -> 0 -ddctm790 comparetotmag -1 Inf -> -1 -ddctm791 comparetotmag -0 Inf -> -1 -ddctm792 comparetotmag 0 Inf -> -1 -ddctm793 comparetotmag 1 Inf -> -1 -ddctm794 comparetotmag 1000 Inf -> -1 -ddctm795 comparetotmag Inf Inf -> 0 - -ddctm800 comparetotmag -Inf -Inf -> 0 -ddctm801 comparetotmag -Inf -1000 -> 1 -ddctm802 comparetotmag -Inf -1 -> 1 -ddctm803 comparetotmag -Inf -0 -> 1 -ddctm804 comparetotmag -Inf 0 -> 1 -ddctm805 comparetotmag -Inf 1 -> 1 -ddctm806 comparetotmag -Inf 1000 -> 1 -ddctm807 comparetotmag -Inf Inf -> 0 -ddctm808 comparetotmag -Inf -Inf -> 0 -ddctm809 comparetotmag -1000 -Inf -> -1 -ddctm810 comparetotmag -1 -Inf -> -1 -ddctm811 comparetotmag -0 -Inf -> -1 -ddctm812 comparetotmag 0 -Inf -> -1 -ddctm813 comparetotmag 1 -Inf -> -1 -ddctm814 comparetotmag 1000 -Inf -> -1 -ddctm815 comparetotmag Inf -Inf -> 0 - -ddctm821 comparetotmag NaN -Inf -> 1 -ddctm822 comparetotmag NaN -1000 -> 1 -ddctm823 comparetotmag NaN -1 -> 1 -ddctm824 comparetotmag NaN -0 -> 1 -ddctm825 comparetotmag NaN 0 -> 1 -ddctm826 comparetotmag NaN 1 -> 1 -ddctm827 comparetotmag NaN 1000 -> 1 -ddctm828 comparetotmag NaN Inf -> 1 -ddctm829 comparetotmag NaN NaN -> 0 -ddctm830 comparetotmag -Inf NaN -> -1 -ddctm831 comparetotmag -1000 NaN -> -1 -ddctm832 comparetotmag -1 NaN -> -1 -ddctm833 comparetotmag -0 NaN -> -1 -ddctm834 comparetotmag 0 NaN -> -1 -ddctm835 comparetotmag 1 NaN -> -1 -ddctm836 comparetotmag 1000 NaN -> -1 -ddctm837 comparetotmag Inf NaN -> -1 -ddctm838 comparetotmag -NaN -NaN -> 0 -ddctm839 comparetotmag +NaN -NaN -> 0 -ddctm840 comparetotmag -NaN +NaN -> 0 - -ddctm841 comparetotmag sNaN -sNaN -> 0 -ddctm842 comparetotmag sNaN -NaN -> -1 -ddctm843 comparetotmag sNaN -Inf -> 1 -ddctm844 comparetotmag sNaN -1000 -> 1 -ddctm845 comparetotmag sNaN -1 -> 1 -ddctm846 comparetotmag sNaN -0 -> 1 -ddctm847 comparetotmag sNaN 0 -> 1 -ddctm848 comparetotmag sNaN 1 -> 1 -ddctm849 comparetotmag sNaN 1000 -> 1 -ddctm850 comparetotmag sNaN NaN -> -1 -ddctm851 comparetotmag sNaN sNaN -> 0 - -ddctm852 comparetotmag -sNaN sNaN -> 0 -ddctm853 comparetotmag -NaN sNaN -> 1 -ddctm854 comparetotmag -Inf sNaN -> -1 -ddctm855 comparetotmag -1000 sNaN -> -1 -ddctm856 comparetotmag -1 sNaN -> -1 -ddctm857 comparetotmag -0 sNaN -> -1 -ddctm858 comparetotmag 0 sNaN -> -1 -ddctm859 comparetotmag 1 sNaN -> -1 -ddctm860 comparetotmag 1000 sNaN -> -1 -ddctm861 comparetotmag Inf sNaN -> -1 -ddctm862 comparetotmag NaN sNaN -> 1 -ddctm863 comparetotmag sNaN sNaN -> 0 - -ddctm871 comparetotmag -sNaN -sNaN -> 0 -ddctm872 comparetotmag -sNaN -NaN -> -1 -ddctm873 comparetotmag -sNaN -Inf -> 1 -ddctm874 comparetotmag -sNaN -1000 -> 1 -ddctm875 comparetotmag -sNaN -1 -> 1 -ddctm876 comparetotmag -sNaN -0 -> 1 -ddctm877 comparetotmag -sNaN 0 -> 1 -ddctm878 comparetotmag -sNaN 1 -> 1 -ddctm879 comparetotmag -sNaN 1000 -> 1 -ddctm880 comparetotmag -sNaN NaN -> -1 -ddctm881 comparetotmag -sNaN sNaN -> 0 - -ddctm882 comparetotmag -sNaN -sNaN -> 0 -ddctm883 comparetotmag -NaN -sNaN -> 1 -ddctm884 comparetotmag -Inf -sNaN -> -1 -ddctm885 comparetotmag -1000 -sNaN -> -1 -ddctm886 comparetotmag -1 -sNaN -> -1 -ddctm887 comparetotmag -0 -sNaN -> -1 -ddctm888 comparetotmag 0 -sNaN -> -1 -ddctm889 comparetotmag 1 -sNaN -> -1 -ddctm890 comparetotmag 1000 -sNaN -> -1 -ddctm891 comparetotmag Inf -sNaN -> -1 -ddctm892 comparetotmag NaN -sNaN -> 1 -ddctm893 comparetotmag sNaN -sNaN -> 0 - --- NaNs with payload -ddctm960 comparetotmag NaN9 -Inf -> 1 -ddctm961 comparetotmag NaN8 999 -> 1 -ddctm962 comparetotmag NaN77 Inf -> 1 -ddctm963 comparetotmag -NaN67 NaN5 -> 1 -ddctm964 comparetotmag -Inf -NaN4 -> -1 -ddctm965 comparetotmag -999 -NaN33 -> -1 -ddctm966 comparetotmag Inf NaN2 -> -1 - -ddctm970 comparetotmag -NaN41 -NaN42 -> -1 -ddctm971 comparetotmag +NaN41 -NaN42 -> -1 -ddctm972 comparetotmag -NaN41 +NaN42 -> -1 -ddctm973 comparetotmag +NaN41 +NaN42 -> -1 -ddctm974 comparetotmag -NaN42 -NaN01 -> 1 -ddctm975 comparetotmag +NaN42 -NaN01 -> 1 -ddctm976 comparetotmag -NaN42 +NaN01 -> 1 -ddctm977 comparetotmag +NaN42 +NaN01 -> 1 - -ddctm980 comparetotmag -sNaN771 -sNaN772 -> -1 -ddctm981 comparetotmag +sNaN771 -sNaN772 -> -1 -ddctm982 comparetotmag -sNaN771 +sNaN772 -> -1 -ddctm983 comparetotmag +sNaN771 +sNaN772 -> -1 -ddctm984 comparetotmag -sNaN772 -sNaN771 -> 1 -ddctm985 comparetotmag +sNaN772 -sNaN771 -> 1 -ddctm986 comparetotmag -sNaN772 +sNaN771 -> 1 -ddctm987 comparetotmag +sNaN772 +sNaN771 -> 1 - -ddctm991 comparetotmag -sNaN99 -Inf -> 1 -ddctm992 comparetotmag sNaN98 -11 -> 1 -ddctm993 comparetotmag sNaN97 NaN -> -1 -ddctm994 comparetotmag sNaN16 sNaN94 -> -1 -ddctm995 comparetotmag NaN85 sNaN83 -> 1 -ddctm996 comparetotmag -Inf sNaN92 -> -1 -ddctm997 comparetotmag 088 sNaN81 -> -1 -ddctm998 comparetotmag Inf sNaN90 -> -1 -ddctm999 comparetotmag NaN -sNaN89 -> 1 - --- spread zeros -ddctm1110 comparetotmag 0E-383 0 -> -1 -ddctm1111 comparetotmag 0E-383 -0 -> -1 -ddctm1112 comparetotmag -0E-383 0 -> -1 -ddctm1113 comparetotmag -0E-383 -0 -> -1 -ddctm1114 comparetotmag 0E-383 0E+384 -> -1 -ddctm1115 comparetotmag 0E-383 -0E+384 -> -1 -ddctm1116 comparetotmag -0E-383 0E+384 -> -1 -ddctm1117 comparetotmag -0E-383 -0E+384 -> -1 -ddctm1118 comparetotmag 0 0E+384 -> -1 -ddctm1119 comparetotmag 0 -0E+384 -> -1 -ddctm1120 comparetotmag -0 0E+384 -> -1 -ddctm1121 comparetotmag -0 -0E+384 -> -1 - -ddctm1130 comparetotmag 0E+384 0 -> 1 -ddctm1131 comparetotmag 0E+384 -0 -> 1 -ddctm1132 comparetotmag -0E+384 0 -> 1 -ddctm1133 comparetotmag -0E+384 -0 -> 1 -ddctm1134 comparetotmag 0E+384 0E-383 -> 1 -ddctm1135 comparetotmag 0E+384 -0E-383 -> 1 -ddctm1136 comparetotmag -0E+384 0E-383 -> 1 -ddctm1137 comparetotmag -0E+384 -0E-383 -> 1 -ddctm1138 comparetotmag 0 0E-383 -> 1 -ddctm1139 comparetotmag 0 -0E-383 -> 1 -ddctm1140 comparetotmag -0 0E-383 -> 1 -ddctm1141 comparetotmag -0 -0E-383 -> 1 - --- Null tests -ddctm9990 comparetotmag 10 # -> NaN Invalid_operation -ddctm9991 comparetotmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddCompareTotalMag.decTest -- decDouble comparison; abs. total order-- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddctm001 comparetotmag -2 -2 -> 0 +ddctm002 comparetotmag -2 -1 -> 1 +ddctm003 comparetotmag -2 0 -> 1 +ddctm004 comparetotmag -2 1 -> 1 +ddctm005 comparetotmag -2 2 -> 0 +ddctm006 comparetotmag -1 -2 -> -1 +ddctm007 comparetotmag -1 -1 -> 0 +ddctm008 comparetotmag -1 0 -> 1 +ddctm009 comparetotmag -1 1 -> 0 +ddctm010 comparetotmag -1 2 -> -1 +ddctm011 comparetotmag 0 -2 -> -1 +ddctm012 comparetotmag 0 -1 -> -1 +ddctm013 comparetotmag 0 0 -> 0 +ddctm014 comparetotmag 0 1 -> -1 +ddctm015 comparetotmag 0 2 -> -1 +ddctm016 comparetotmag 1 -2 -> -1 +ddctm017 comparetotmag 1 -1 -> 0 +ddctm018 comparetotmag 1 0 -> 1 +ddctm019 comparetotmag 1 1 -> 0 +ddctm020 comparetotmag 1 2 -> -1 +ddctm021 comparetotmag 2 -2 -> 0 +ddctm022 comparetotmag 2 -1 -> 1 +ddctm023 comparetotmag 2 0 -> 1 +ddctm025 comparetotmag 2 1 -> 1 +ddctm026 comparetotmag 2 2 -> 0 + +ddctm031 comparetotmag -20 -20 -> 0 +ddctm032 comparetotmag -20 -10 -> 1 +ddctm033 comparetotmag -20 00 -> 1 +ddctm034 comparetotmag -20 10 -> 1 +ddctm035 comparetotmag -20 20 -> 0 +ddctm036 comparetotmag -10 -20 -> -1 +ddctm037 comparetotmag -10 -10 -> 0 +ddctm038 comparetotmag -10 00 -> 1 +ddctm039 comparetotmag -10 10 -> 0 +ddctm040 comparetotmag -10 20 -> -1 +ddctm041 comparetotmag 00 -20 -> -1 +ddctm042 comparetotmag 00 -10 -> -1 +ddctm043 comparetotmag 00 00 -> 0 +ddctm044 comparetotmag 00 10 -> -1 +ddctm045 comparetotmag 00 20 -> -1 +ddctm046 comparetotmag 10 -20 -> -1 +ddctm047 comparetotmag 10 -10 -> 0 +ddctm048 comparetotmag 10 00 -> 1 +ddctm049 comparetotmag 10 10 -> 0 +ddctm050 comparetotmag 10 20 -> -1 +ddctm051 comparetotmag 20 -20 -> 0 +ddctm052 comparetotmag 20 -10 -> 1 +ddctm053 comparetotmag 20 00 -> 1 +ddctm055 comparetotmag 20 10 -> 1 +ddctm056 comparetotmag 20 20 -> 0 + +ddctm061 comparetotmag -2.0 -2.0 -> 0 +ddctm062 comparetotmag -2.0 -1.0 -> 1 +ddctm063 comparetotmag -2.0 0.0 -> 1 +ddctm064 comparetotmag -2.0 1.0 -> 1 +ddctm065 comparetotmag -2.0 2.0 -> 0 +ddctm066 comparetotmag -1.0 -2.0 -> -1 +ddctm067 comparetotmag -1.0 -1.0 -> 0 +ddctm068 comparetotmag -1.0 0.0 -> 1 +ddctm069 comparetotmag -1.0 1.0 -> 0 +ddctm070 comparetotmag -1.0 2.0 -> -1 +ddctm071 comparetotmag 0.0 -2.0 -> -1 +ddctm072 comparetotmag 0.0 -1.0 -> -1 +ddctm073 comparetotmag 0.0 0.0 -> 0 +ddctm074 comparetotmag 0.0 1.0 -> -1 +ddctm075 comparetotmag 0.0 2.0 -> -1 +ddctm076 comparetotmag 1.0 -2.0 -> -1 +ddctm077 comparetotmag 1.0 -1.0 -> 0 +ddctm078 comparetotmag 1.0 0.0 -> 1 +ddctm079 comparetotmag 1.0 1.0 -> 0 +ddctm080 comparetotmag 1.0 2.0 -> -1 +ddctm081 comparetotmag 2.0 -2.0 -> 0 +ddctm082 comparetotmag 2.0 -1.0 -> 1 +ddctm083 comparetotmag 2.0 0.0 -> 1 +ddctm085 comparetotmag 2.0 1.0 -> 1 +ddctm086 comparetotmag 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +ddctm090 comparetotmag 9.99999999E+384 9.99999999E+384 -> 0 +ddctm091 comparetotmag -9.99999999E+384 9.99999999E+384 -> 0 +ddctm092 comparetotmag 9.99999999E+384 -9.99999999E+384 -> 0 +ddctm093 comparetotmag -9.99999999E+384 -9.99999999E+384 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +ddctm100 comparetotmag 7.0 7.0 -> 0 +ddctm101 comparetotmag 7.0 7 -> -1 +ddctm102 comparetotmag 7 7.0 -> 1 +ddctm103 comparetotmag 7E+0 7.0 -> 1 +ddctm104 comparetotmag 70E-1 7.0 -> 0 +ddctm105 comparetotmag 0.7E+1 7 -> 0 +ddctm106 comparetotmag 70E-1 7 -> -1 +ddctm107 comparetotmag 7.0 7E+0 -> -1 +ddctm108 comparetotmag 7.0 70E-1 -> 0 +ddctm109 comparetotmag 7 0.7E+1 -> 0 +ddctm110 comparetotmag 7 70E-1 -> 1 + +ddctm120 comparetotmag 8.0 7.0 -> 1 +ddctm121 comparetotmag 8.0 7 -> 1 +ddctm122 comparetotmag 8 7.0 -> 1 +ddctm123 comparetotmag 8E+0 7.0 -> 1 +ddctm124 comparetotmag 80E-1 7.0 -> 1 +ddctm125 comparetotmag 0.8E+1 7 -> 1 +ddctm126 comparetotmag 80E-1 7 -> 1 +ddctm127 comparetotmag 8.0 7E+0 -> 1 +ddctm128 comparetotmag 8.0 70E-1 -> 1 +ddctm129 comparetotmag 8 0.7E+1 -> 1 +ddctm130 comparetotmag 8 70E-1 -> 1 + +ddctm140 comparetotmag 8.0 9.0 -> -1 +ddctm141 comparetotmag 8.0 9 -> -1 +ddctm142 comparetotmag 8 9.0 -> -1 +ddctm143 comparetotmag 8E+0 9.0 -> -1 +ddctm144 comparetotmag 80E-1 9.0 -> -1 +ddctm145 comparetotmag 0.8E+1 9 -> -1 +ddctm146 comparetotmag 80E-1 9 -> -1 +ddctm147 comparetotmag 8.0 9E+0 -> -1 +ddctm148 comparetotmag 8.0 90E-1 -> -1 +ddctm149 comparetotmag 8 0.9E+1 -> -1 +ddctm150 comparetotmag 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +ddctm200 comparetotmag -7.0 7.0 -> 0 +ddctm201 comparetotmag -7.0 7 -> -1 +ddctm202 comparetotmag -7 7.0 -> 1 +ddctm203 comparetotmag -7E+0 7.0 -> 1 +ddctm204 comparetotmag -70E-1 7.0 -> 0 +ddctm205 comparetotmag -0.7E+1 7 -> 0 +ddctm206 comparetotmag -70E-1 7 -> -1 +ddctm207 comparetotmag -7.0 7E+0 -> -1 +ddctm208 comparetotmag -7.0 70E-1 -> 0 +ddctm209 comparetotmag -7 0.7E+1 -> 0 +ddctm210 comparetotmag -7 70E-1 -> 1 + +ddctm220 comparetotmag -8.0 7.0 -> 1 +ddctm221 comparetotmag -8.0 7 -> 1 +ddctm222 comparetotmag -8 7.0 -> 1 +ddctm223 comparetotmag -8E+0 7.0 -> 1 +ddctm224 comparetotmag -80E-1 7.0 -> 1 +ddctm225 comparetotmag -0.8E+1 7 -> 1 +ddctm226 comparetotmag -80E-1 7 -> 1 +ddctm227 comparetotmag -8.0 7E+0 -> 1 +ddctm228 comparetotmag -8.0 70E-1 -> 1 +ddctm229 comparetotmag -8 0.7E+1 -> 1 +ddctm230 comparetotmag -8 70E-1 -> 1 + +ddctm240 comparetotmag -8.0 9.0 -> -1 +ddctm241 comparetotmag -8.0 9 -> -1 +ddctm242 comparetotmag -8 9.0 -> -1 +ddctm243 comparetotmag -8E+0 9.0 -> -1 +ddctm244 comparetotmag -80E-1 9.0 -> -1 +ddctm245 comparetotmag -0.8E+1 9 -> -1 +ddctm246 comparetotmag -80E-1 9 -> -1 +ddctm247 comparetotmag -8.0 9E+0 -> -1 +ddctm248 comparetotmag -8.0 90E-1 -> -1 +ddctm249 comparetotmag -8 0.9E+1 -> -1 +ddctm250 comparetotmag -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +ddctm300 comparetotmag 7.0 -7.0 -> 0 +ddctm301 comparetotmag 7.0 -7 -> -1 +ddctm302 comparetotmag 7 -7.0 -> 1 +ddctm303 comparetotmag 7E+0 -7.0 -> 1 +ddctm304 comparetotmag 70E-1 -7.0 -> 0 +ddctm305 comparetotmag .7E+1 -7 -> 0 +ddctm306 comparetotmag 70E-1 -7 -> -1 +ddctm307 comparetotmag 7.0 -7E+0 -> -1 +ddctm308 comparetotmag 7.0 -70E-1 -> 0 +ddctm309 comparetotmag 7 -.7E+1 -> 0 +ddctm310 comparetotmag 7 -70E-1 -> 1 + +ddctm320 comparetotmag 8.0 -7.0 -> 1 +ddctm321 comparetotmag 8.0 -7 -> 1 +ddctm322 comparetotmag 8 -7.0 -> 1 +ddctm323 comparetotmag 8E+0 -7.0 -> 1 +ddctm324 comparetotmag 80E-1 -7.0 -> 1 +ddctm325 comparetotmag .8E+1 -7 -> 1 +ddctm326 comparetotmag 80E-1 -7 -> 1 +ddctm327 comparetotmag 8.0 -7E+0 -> 1 +ddctm328 comparetotmag 8.0 -70E-1 -> 1 +ddctm329 comparetotmag 8 -.7E+1 -> 1 +ddctm330 comparetotmag 8 -70E-1 -> 1 + +ddctm340 comparetotmag 8.0 -9.0 -> -1 +ddctm341 comparetotmag 8.0 -9 -> -1 +ddctm342 comparetotmag 8 -9.0 -> -1 +ddctm343 comparetotmag 8E+0 -9.0 -> -1 +ddctm344 comparetotmag 80E-1 -9.0 -> -1 +ddctm345 comparetotmag .8E+1 -9 -> -1 +ddctm346 comparetotmag 80E-1 -9 -> -1 +ddctm347 comparetotmag 8.0 -9E+0 -> -1 +ddctm348 comparetotmag 8.0 -90E-1 -> -1 +ddctm349 comparetotmag 8 -.9E+1 -> -1 +ddctm350 comparetotmag 8 -90E-1 -> -1 + +-- and again, with sign changes -- .. +ddctm400 comparetotmag -7.0 -7.0 -> 0 +ddctm401 comparetotmag -7.0 -7 -> -1 +ddctm402 comparetotmag -7 -7.0 -> 1 +ddctm403 comparetotmag -7E+0 -7.0 -> 1 +ddctm404 comparetotmag -70E-1 -7.0 -> 0 +ddctm405 comparetotmag -.7E+1 -7 -> 0 +ddctm406 comparetotmag -70E-1 -7 -> -1 +ddctm407 comparetotmag -7.0 -7E+0 -> -1 +ddctm408 comparetotmag -7.0 -70E-1 -> 0 +ddctm409 comparetotmag -7 -.7E+1 -> 0 +ddctm410 comparetotmag -7 -70E-1 -> 1 + +ddctm420 comparetotmag -8.0 -7.0 -> 1 +ddctm421 comparetotmag -8.0 -7 -> 1 +ddctm422 comparetotmag -8 -7.0 -> 1 +ddctm423 comparetotmag -8E+0 -7.0 -> 1 +ddctm424 comparetotmag -80E-1 -7.0 -> 1 +ddctm425 comparetotmag -.8E+1 -7 -> 1 +ddctm426 comparetotmag -80E-1 -7 -> 1 +ddctm427 comparetotmag -8.0 -7E+0 -> 1 +ddctm428 comparetotmag -8.0 -70E-1 -> 1 +ddctm429 comparetotmag -8 -.7E+1 -> 1 +ddctm430 comparetotmag -8 -70E-1 -> 1 + +ddctm440 comparetotmag -8.0 -9.0 -> -1 +ddctm441 comparetotmag -8.0 -9 -> -1 +ddctm442 comparetotmag -8 -9.0 -> -1 +ddctm443 comparetotmag -8E+0 -9.0 -> -1 +ddctm444 comparetotmag -80E-1 -9.0 -> -1 +ddctm445 comparetotmag -.8E+1 -9 -> -1 +ddctm446 comparetotmag -80E-1 -9 -> -1 +ddctm447 comparetotmag -8.0 -9E+0 -> -1 +ddctm448 comparetotmag -8.0 -90E-1 -> -1 +ddctm449 comparetotmag -8 -.9E+1 -> -1 +ddctm450 comparetotmag -8 -90E-1 -> -1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +ddctm473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 +ddctm474 comparetotmag 123.456000000000E+89 123.456E+89 -> -1 +ddctm475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 +ddctm476 comparetotmag 123.4560000000E+89 123.456E+89 -> -1 +ddctm477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 +ddctm478 comparetotmag 123.45600000E+89 123.456E+89 -> -1 +ddctm479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 +ddctm480 comparetotmag 123.456000E+89 123.456E+89 -> -1 +ddctm481 comparetotmag 123.45600E-89 123.456E-89 -> -1 +ddctm482 comparetotmag 123.4560E+89 123.456E+89 -> -1 +ddctm483 comparetotmag 123.456E-89 123.456E-89 -> 0 +ddctm487 comparetotmag 123.456E+89 123.4560000000000E+89 -> 1 +ddctm488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 +ddctm489 comparetotmag 123.456E+89 123.45600000000E+89 -> 1 +ddctm490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 +ddctm491 comparetotmag 123.456E+89 123.456000000E+89 -> 1 +ddctm492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 +ddctm493 comparetotmag 123.456E+89 123.4560000E+89 -> 1 +ddctm494 comparetotmag 123.456E-89 123.456000E-89 -> 1 +ddctm495 comparetotmag 123.456E+89 123.45600E+89 -> 1 +ddctm496 comparetotmag 123.456E-89 123.4560E-89 -> 1 +ddctm497 comparetotmag 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +ddctm498 comparetotmag 1 1E-17 -> 1 +ddctm499 comparetotmag 1 1E-16 -> 1 +ddctm500 comparetotmag 1 1E-15 -> 1 +ddctm501 comparetotmag 1 1E-14 -> 1 +ddctm502 comparetotmag 1 1E-13 -> 1 +ddctm503 comparetotmag 1 1E-12 -> 1 +ddctm504 comparetotmag 1 1E-11 -> 1 +ddctm505 comparetotmag 1 1E-10 -> 1 +ddctm506 comparetotmag 1 1E-9 -> 1 +ddctm507 comparetotmag 1 1E-8 -> 1 +ddctm508 comparetotmag 1 1E-7 -> 1 +ddctm509 comparetotmag 1 1E-6 -> 1 +ddctm510 comparetotmag 1 1E-5 -> 1 +ddctm511 comparetotmag 1 1E-4 -> 1 +ddctm512 comparetotmag 1 1E-3 -> 1 +ddctm513 comparetotmag 1 1E-2 -> 1 +ddctm514 comparetotmag 1 1E-1 -> 1 +ddctm515 comparetotmag 1 1E-0 -> 0 +ddctm516 comparetotmag 1 1E+1 -> -1 +ddctm517 comparetotmag 1 1E+2 -> -1 +ddctm518 comparetotmag 1 1E+3 -> -1 +ddctm519 comparetotmag 1 1E+4 -> -1 +ddctm521 comparetotmag 1 1E+5 -> -1 +ddctm522 comparetotmag 1 1E+6 -> -1 +ddctm523 comparetotmag 1 1E+7 -> -1 +ddctm524 comparetotmag 1 1E+8 -> -1 +ddctm525 comparetotmag 1 1E+9 -> -1 +ddctm526 comparetotmag 1 1E+10 -> -1 +ddctm527 comparetotmag 1 1E+11 -> -1 +ddctm528 comparetotmag 1 1E+12 -> -1 +ddctm529 comparetotmag 1 1E+13 -> -1 +ddctm530 comparetotmag 1 1E+14 -> -1 +ddctm531 comparetotmag 1 1E+15 -> -1 +ddctm532 comparetotmag 1 1E+16 -> -1 +ddctm533 comparetotmag 1 1E+17 -> -1 +-- LR swap +ddctm538 comparetotmag 1E-17 1 -> -1 +ddctm539 comparetotmag 1E-16 1 -> -1 +ddctm540 comparetotmag 1E-15 1 -> -1 +ddctm541 comparetotmag 1E-14 1 -> -1 +ddctm542 comparetotmag 1E-13 1 -> -1 +ddctm543 comparetotmag 1E-12 1 -> -1 +ddctm544 comparetotmag 1E-11 1 -> -1 +ddctm545 comparetotmag 1E-10 1 -> -1 +ddctm546 comparetotmag 1E-9 1 -> -1 +ddctm547 comparetotmag 1E-8 1 -> -1 +ddctm548 comparetotmag 1E-7 1 -> -1 +ddctm549 comparetotmag 1E-6 1 -> -1 +ddctm550 comparetotmag 1E-5 1 -> -1 +ddctm551 comparetotmag 1E-4 1 -> -1 +ddctm552 comparetotmag 1E-3 1 -> -1 +ddctm553 comparetotmag 1E-2 1 -> -1 +ddctm554 comparetotmag 1E-1 1 -> -1 +ddctm555 comparetotmag 1E-0 1 -> 0 +ddctm556 comparetotmag 1E+1 1 -> 1 +ddctm557 comparetotmag 1E+2 1 -> 1 +ddctm558 comparetotmag 1E+3 1 -> 1 +ddctm559 comparetotmag 1E+4 1 -> 1 +ddctm561 comparetotmag 1E+5 1 -> 1 +ddctm562 comparetotmag 1E+6 1 -> 1 +ddctm563 comparetotmag 1E+7 1 -> 1 +ddctm564 comparetotmag 1E+8 1 -> 1 +ddctm565 comparetotmag 1E+9 1 -> 1 +ddctm566 comparetotmag 1E+10 1 -> 1 +ddctm567 comparetotmag 1E+11 1 -> 1 +ddctm568 comparetotmag 1E+12 1 -> 1 +ddctm569 comparetotmag 1E+13 1 -> 1 +ddctm570 comparetotmag 1E+14 1 -> 1 +ddctm571 comparetotmag 1E+15 1 -> 1 +ddctm572 comparetotmag 1E+16 1 -> 1 +ddctm573 comparetotmag 1E+17 1 -> 1 +-- similar with a useful coefficient, one side only +ddctm578 comparetotmag 0.000000987654321 1E-17 -> 1 +ddctm579 comparetotmag 0.000000987654321 1E-16 -> 1 +ddctm580 comparetotmag 0.000000987654321 1E-15 -> 1 +ddctm581 comparetotmag 0.000000987654321 1E-14 -> 1 +ddctm582 comparetotmag 0.000000987654321 1E-13 -> 1 +ddctm583 comparetotmag 0.000000987654321 1E-12 -> 1 +ddctm584 comparetotmag 0.000000987654321 1E-11 -> 1 +ddctm585 comparetotmag 0.000000987654321 1E-10 -> 1 +ddctm586 comparetotmag 0.000000987654321 1E-9 -> 1 +ddctm587 comparetotmag 0.000000987654321 1E-8 -> 1 +ddctm588 comparetotmag 0.000000987654321 1E-7 -> 1 +ddctm589 comparetotmag 0.000000987654321 1E-6 -> -1 +ddctm590 comparetotmag 0.000000987654321 1E-5 -> -1 +ddctm591 comparetotmag 0.000000987654321 1E-4 -> -1 +ddctm592 comparetotmag 0.000000987654321 1E-3 -> -1 +ddctm593 comparetotmag 0.000000987654321 1E-2 -> -1 +ddctm594 comparetotmag 0.000000987654321 1E-1 -> -1 +ddctm595 comparetotmag 0.000000987654321 1E-0 -> -1 +ddctm596 comparetotmag 0.000000987654321 1E+1 -> -1 +ddctm597 comparetotmag 0.000000987654321 1E+2 -> -1 +ddctm598 comparetotmag 0.000000987654321 1E+3 -> -1 +ddctm599 comparetotmag 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +ddctm600 comparetotmag 12 12.2345 -> -1 +ddctm601 comparetotmag 12.0 12.2345 -> -1 +ddctm602 comparetotmag 12.00 12.2345 -> -1 +ddctm603 comparetotmag 12.000 12.2345 -> -1 +ddctm604 comparetotmag 12.0000 12.2345 -> -1 +ddctm605 comparetotmag 12.00000 12.2345 -> -1 +ddctm606 comparetotmag 12.000000 12.2345 -> -1 +ddctm607 comparetotmag 12.0000000 12.2345 -> -1 +ddctm608 comparetotmag 12.00000000 12.2345 -> -1 +ddctm609 comparetotmag 12.000000000 12.2345 -> -1 +ddctm610 comparetotmag 12.1234 12 -> 1 +ddctm611 comparetotmag 12.1234 12.0 -> 1 +ddctm612 comparetotmag 12.1234 12.00 -> 1 +ddctm613 comparetotmag 12.1234 12.000 -> 1 +ddctm614 comparetotmag 12.1234 12.0000 -> 1 +ddctm615 comparetotmag 12.1234 12.00000 -> 1 +ddctm616 comparetotmag 12.1234 12.000000 -> 1 +ddctm617 comparetotmag 12.1234 12.0000000 -> 1 +ddctm618 comparetotmag 12.1234 12.00000000 -> 1 +ddctm619 comparetotmag 12.1234 12.000000000 -> 1 +ddctm620 comparetotmag -12 -12.2345 -> -1 +ddctm621 comparetotmag -12.0 -12.2345 -> -1 +ddctm622 comparetotmag -12.00 -12.2345 -> -1 +ddctm623 comparetotmag -12.000 -12.2345 -> -1 +ddctm624 comparetotmag -12.0000 -12.2345 -> -1 +ddctm625 comparetotmag -12.00000 -12.2345 -> -1 +ddctm626 comparetotmag -12.000000 -12.2345 -> -1 +ddctm627 comparetotmag -12.0000000 -12.2345 -> -1 +ddctm628 comparetotmag -12.00000000 -12.2345 -> -1 +ddctm629 comparetotmag -12.000000000 -12.2345 -> -1 +ddctm630 comparetotmag -12.1234 -12 -> 1 +ddctm631 comparetotmag -12.1234 -12.0 -> 1 +ddctm632 comparetotmag -12.1234 -12.00 -> 1 +ddctm633 comparetotmag -12.1234 -12.000 -> 1 +ddctm634 comparetotmag -12.1234 -12.0000 -> 1 +ddctm635 comparetotmag -12.1234 -12.00000 -> 1 +ddctm636 comparetotmag -12.1234 -12.000000 -> 1 +ddctm637 comparetotmag -12.1234 -12.0000000 -> 1 +ddctm638 comparetotmag -12.1234 -12.00000000 -> 1 +ddctm639 comparetotmag -12.1234 -12.000000000 -> 1 + +-- extended zeros +ddctm640 comparetotmag 0 0 -> 0 +ddctm641 comparetotmag 0 -0 -> 0 +ddctm642 comparetotmag 0 -0.0 -> 1 +ddctm643 comparetotmag 0 0.0 -> 1 +ddctm644 comparetotmag -0 0 -> 0 +ddctm645 comparetotmag -0 -0 -> 0 +ddctm646 comparetotmag -0 -0.0 -> 1 +ddctm647 comparetotmag -0 0.0 -> 1 +ddctm648 comparetotmag 0.0 0 -> -1 +ddctm649 comparetotmag 0.0 -0 -> -1 +ddctm650 comparetotmag 0.0 -0.0 -> 0 +ddctm651 comparetotmag 0.0 0.0 -> 0 +ddctm652 comparetotmag -0.0 0 -> -1 +ddctm653 comparetotmag -0.0 -0 -> -1 +ddctm654 comparetotmag -0.0 -0.0 -> 0 +ddctm655 comparetotmag -0.0 0.0 -> 0 + +ddctm656 comparetotmag -0E1 0.0 -> 1 +ddctm657 comparetotmag -0E2 0.0 -> 1 +ddctm658 comparetotmag 0E1 0.0 -> 1 +ddctm659 comparetotmag 0E2 0.0 -> 1 +ddctm660 comparetotmag -0E1 0 -> 1 +ddctm661 comparetotmag -0E2 0 -> 1 +ddctm662 comparetotmag 0E1 0 -> 1 +ddctm663 comparetotmag 0E2 0 -> 1 +ddctm664 comparetotmag -0E1 -0E1 -> 0 +ddctm665 comparetotmag -0E2 -0E1 -> 1 +ddctm666 comparetotmag 0E1 -0E1 -> 0 +ddctm667 comparetotmag 0E2 -0E1 -> 1 +ddctm668 comparetotmag -0E1 -0E2 -> -1 +ddctm669 comparetotmag -0E2 -0E2 -> 0 +ddctm670 comparetotmag 0E1 -0E2 -> -1 +ddctm671 comparetotmag 0E2 -0E2 -> 0 +ddctm672 comparetotmag -0E1 0E1 -> 0 +ddctm673 comparetotmag -0E2 0E1 -> 1 +ddctm674 comparetotmag 0E1 0E1 -> 0 +ddctm675 comparetotmag 0E2 0E1 -> 1 +ddctm676 comparetotmag -0E1 0E2 -> -1 +ddctm677 comparetotmag -0E2 0E2 -> 0 +ddctm678 comparetotmag 0E1 0E2 -> -1 +ddctm679 comparetotmag 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +ddctm680 comparetotmag 12 12 -> 0 +ddctm681 comparetotmag 12 12.0 -> 1 +ddctm682 comparetotmag 12 12.00 -> 1 +ddctm683 comparetotmag 12 12.000 -> 1 +ddctm684 comparetotmag 12 12.0000 -> 1 +ddctm685 comparetotmag 12 12.00000 -> 1 +ddctm686 comparetotmag 12 12.000000 -> 1 +ddctm687 comparetotmag 12 12.0000000 -> 1 +ddctm688 comparetotmag 12 12.00000000 -> 1 +ddctm689 comparetotmag 12 12.000000000 -> 1 +ddctm690 comparetotmag 12 12 -> 0 +ddctm691 comparetotmag 12.0 12 -> -1 +ddctm692 comparetotmag 12.00 12 -> -1 +ddctm693 comparetotmag 12.000 12 -> -1 +ddctm694 comparetotmag 12.0000 12 -> -1 +ddctm695 comparetotmag 12.00000 12 -> -1 +ddctm696 comparetotmag 12.000000 12 -> -1 +ddctm697 comparetotmag 12.0000000 12 -> -1 +ddctm698 comparetotmag 12.00000000 12 -> -1 +ddctm699 comparetotmag 12.000000000 12 -> -1 + +-- old long operand checks +ddctm701 comparetotmag 12345678000 1 -> 1 +ddctm702 comparetotmag 1 12345678000 -> -1 +ddctm703 comparetotmag 1234567800 1 -> 1 +ddctm704 comparetotmag 1 1234567800 -> -1 +ddctm705 comparetotmag 1234567890 1 -> 1 +ddctm706 comparetotmag 1 1234567890 -> -1 +ddctm707 comparetotmag 1234567891 1 -> 1 +ddctm708 comparetotmag 1 1234567891 -> -1 +ddctm709 comparetotmag 12345678901 1 -> 1 +ddctm710 comparetotmag 1 12345678901 -> -1 +ddctm711 comparetotmag 1234567896 1 -> 1 +ddctm712 comparetotmag 1 1234567896 -> -1 +ddctm713 comparetotmag -1234567891 1 -> 1 +ddctm714 comparetotmag 1 -1234567891 -> -1 +ddctm715 comparetotmag -12345678901 1 -> 1 +ddctm716 comparetotmag 1 -12345678901 -> -1 +ddctm717 comparetotmag -1234567896 1 -> 1 +ddctm718 comparetotmag 1 -1234567896 -> -1 + +-- old residue cases +ddctm740 comparetotmag 1 0.9999999 -> 1 +ddctm741 comparetotmag 1 0.999999 -> 1 +ddctm742 comparetotmag 1 0.99999 -> 1 +ddctm743 comparetotmag 1 1.0000 -> 1 +ddctm744 comparetotmag 1 1.00001 -> -1 +ddctm745 comparetotmag 1 1.000001 -> -1 +ddctm746 comparetotmag 1 1.0000001 -> -1 +ddctm750 comparetotmag 0.9999999 1 -> -1 +ddctm751 comparetotmag 0.999999 1 -> -1 +ddctm752 comparetotmag 0.99999 1 -> -1 +ddctm753 comparetotmag 1.0000 1 -> -1 +ddctm754 comparetotmag 1.00001 1 -> 1 +ddctm755 comparetotmag 1.000001 1 -> 1 +ddctm756 comparetotmag 1.0000001 1 -> 1 + +-- Specials +ddctm780 comparetotmag Inf -Inf -> 0 +ddctm781 comparetotmag Inf -1000 -> 1 +ddctm782 comparetotmag Inf -1 -> 1 +ddctm783 comparetotmag Inf -0 -> 1 +ddctm784 comparetotmag Inf 0 -> 1 +ddctm785 comparetotmag Inf 1 -> 1 +ddctm786 comparetotmag Inf 1000 -> 1 +ddctm787 comparetotmag Inf Inf -> 0 +ddctm788 comparetotmag -1000 Inf -> -1 +ddctm789 comparetotmag -Inf Inf -> 0 +ddctm790 comparetotmag -1 Inf -> -1 +ddctm791 comparetotmag -0 Inf -> -1 +ddctm792 comparetotmag 0 Inf -> -1 +ddctm793 comparetotmag 1 Inf -> -1 +ddctm794 comparetotmag 1000 Inf -> -1 +ddctm795 comparetotmag Inf Inf -> 0 + +ddctm800 comparetotmag -Inf -Inf -> 0 +ddctm801 comparetotmag -Inf -1000 -> 1 +ddctm802 comparetotmag -Inf -1 -> 1 +ddctm803 comparetotmag -Inf -0 -> 1 +ddctm804 comparetotmag -Inf 0 -> 1 +ddctm805 comparetotmag -Inf 1 -> 1 +ddctm806 comparetotmag -Inf 1000 -> 1 +ddctm807 comparetotmag -Inf Inf -> 0 +ddctm808 comparetotmag -Inf -Inf -> 0 +ddctm809 comparetotmag -1000 -Inf -> -1 +ddctm810 comparetotmag -1 -Inf -> -1 +ddctm811 comparetotmag -0 -Inf -> -1 +ddctm812 comparetotmag 0 -Inf -> -1 +ddctm813 comparetotmag 1 -Inf -> -1 +ddctm814 comparetotmag 1000 -Inf -> -1 +ddctm815 comparetotmag Inf -Inf -> 0 + +ddctm821 comparetotmag NaN -Inf -> 1 +ddctm822 comparetotmag NaN -1000 -> 1 +ddctm823 comparetotmag NaN -1 -> 1 +ddctm824 comparetotmag NaN -0 -> 1 +ddctm825 comparetotmag NaN 0 -> 1 +ddctm826 comparetotmag NaN 1 -> 1 +ddctm827 comparetotmag NaN 1000 -> 1 +ddctm828 comparetotmag NaN Inf -> 1 +ddctm829 comparetotmag NaN NaN -> 0 +ddctm830 comparetotmag -Inf NaN -> -1 +ddctm831 comparetotmag -1000 NaN -> -1 +ddctm832 comparetotmag -1 NaN -> -1 +ddctm833 comparetotmag -0 NaN -> -1 +ddctm834 comparetotmag 0 NaN -> -1 +ddctm835 comparetotmag 1 NaN -> -1 +ddctm836 comparetotmag 1000 NaN -> -1 +ddctm837 comparetotmag Inf NaN -> -1 +ddctm838 comparetotmag -NaN -NaN -> 0 +ddctm839 comparetotmag +NaN -NaN -> 0 +ddctm840 comparetotmag -NaN +NaN -> 0 + +ddctm841 comparetotmag sNaN -sNaN -> 0 +ddctm842 comparetotmag sNaN -NaN -> -1 +ddctm843 comparetotmag sNaN -Inf -> 1 +ddctm844 comparetotmag sNaN -1000 -> 1 +ddctm845 comparetotmag sNaN -1 -> 1 +ddctm846 comparetotmag sNaN -0 -> 1 +ddctm847 comparetotmag sNaN 0 -> 1 +ddctm848 comparetotmag sNaN 1 -> 1 +ddctm849 comparetotmag sNaN 1000 -> 1 +ddctm850 comparetotmag sNaN NaN -> -1 +ddctm851 comparetotmag sNaN sNaN -> 0 + +ddctm852 comparetotmag -sNaN sNaN -> 0 +ddctm853 comparetotmag -NaN sNaN -> 1 +ddctm854 comparetotmag -Inf sNaN -> -1 +ddctm855 comparetotmag -1000 sNaN -> -1 +ddctm856 comparetotmag -1 sNaN -> -1 +ddctm857 comparetotmag -0 sNaN -> -1 +ddctm858 comparetotmag 0 sNaN -> -1 +ddctm859 comparetotmag 1 sNaN -> -1 +ddctm860 comparetotmag 1000 sNaN -> -1 +ddctm861 comparetotmag Inf sNaN -> -1 +ddctm862 comparetotmag NaN sNaN -> 1 +ddctm863 comparetotmag sNaN sNaN -> 0 + +ddctm871 comparetotmag -sNaN -sNaN -> 0 +ddctm872 comparetotmag -sNaN -NaN -> -1 +ddctm873 comparetotmag -sNaN -Inf -> 1 +ddctm874 comparetotmag -sNaN -1000 -> 1 +ddctm875 comparetotmag -sNaN -1 -> 1 +ddctm876 comparetotmag -sNaN -0 -> 1 +ddctm877 comparetotmag -sNaN 0 -> 1 +ddctm878 comparetotmag -sNaN 1 -> 1 +ddctm879 comparetotmag -sNaN 1000 -> 1 +ddctm880 comparetotmag -sNaN NaN -> -1 +ddctm881 comparetotmag -sNaN sNaN -> 0 + +ddctm882 comparetotmag -sNaN -sNaN -> 0 +ddctm883 comparetotmag -NaN -sNaN -> 1 +ddctm884 comparetotmag -Inf -sNaN -> -1 +ddctm885 comparetotmag -1000 -sNaN -> -1 +ddctm886 comparetotmag -1 -sNaN -> -1 +ddctm887 comparetotmag -0 -sNaN -> -1 +ddctm888 comparetotmag 0 -sNaN -> -1 +ddctm889 comparetotmag 1 -sNaN -> -1 +ddctm890 comparetotmag 1000 -sNaN -> -1 +ddctm891 comparetotmag Inf -sNaN -> -1 +ddctm892 comparetotmag NaN -sNaN -> 1 +ddctm893 comparetotmag sNaN -sNaN -> 0 + +-- NaNs with payload +ddctm960 comparetotmag NaN9 -Inf -> 1 +ddctm961 comparetotmag NaN8 999 -> 1 +ddctm962 comparetotmag NaN77 Inf -> 1 +ddctm963 comparetotmag -NaN67 NaN5 -> 1 +ddctm964 comparetotmag -Inf -NaN4 -> -1 +ddctm965 comparetotmag -999 -NaN33 -> -1 +ddctm966 comparetotmag Inf NaN2 -> -1 + +ddctm970 comparetotmag -NaN41 -NaN42 -> -1 +ddctm971 comparetotmag +NaN41 -NaN42 -> -1 +ddctm972 comparetotmag -NaN41 +NaN42 -> -1 +ddctm973 comparetotmag +NaN41 +NaN42 -> -1 +ddctm974 comparetotmag -NaN42 -NaN01 -> 1 +ddctm975 comparetotmag +NaN42 -NaN01 -> 1 +ddctm976 comparetotmag -NaN42 +NaN01 -> 1 +ddctm977 comparetotmag +NaN42 +NaN01 -> 1 + +ddctm980 comparetotmag -sNaN771 -sNaN772 -> -1 +ddctm981 comparetotmag +sNaN771 -sNaN772 -> -1 +ddctm982 comparetotmag -sNaN771 +sNaN772 -> -1 +ddctm983 comparetotmag +sNaN771 +sNaN772 -> -1 +ddctm984 comparetotmag -sNaN772 -sNaN771 -> 1 +ddctm985 comparetotmag +sNaN772 -sNaN771 -> 1 +ddctm986 comparetotmag -sNaN772 +sNaN771 -> 1 +ddctm987 comparetotmag +sNaN772 +sNaN771 -> 1 + +ddctm991 comparetotmag -sNaN99 -Inf -> 1 +ddctm992 comparetotmag sNaN98 -11 -> 1 +ddctm993 comparetotmag sNaN97 NaN -> -1 +ddctm994 comparetotmag sNaN16 sNaN94 -> -1 +ddctm995 comparetotmag NaN85 sNaN83 -> 1 +ddctm996 comparetotmag -Inf sNaN92 -> -1 +ddctm997 comparetotmag 088 sNaN81 -> -1 +ddctm998 comparetotmag Inf sNaN90 -> -1 +ddctm999 comparetotmag NaN -sNaN89 -> 1 + +-- spread zeros +ddctm1110 comparetotmag 0E-383 0 -> -1 +ddctm1111 comparetotmag 0E-383 -0 -> -1 +ddctm1112 comparetotmag -0E-383 0 -> -1 +ddctm1113 comparetotmag -0E-383 -0 -> -1 +ddctm1114 comparetotmag 0E-383 0E+384 -> -1 +ddctm1115 comparetotmag 0E-383 -0E+384 -> -1 +ddctm1116 comparetotmag -0E-383 0E+384 -> -1 +ddctm1117 comparetotmag -0E-383 -0E+384 -> -1 +ddctm1118 comparetotmag 0 0E+384 -> -1 +ddctm1119 comparetotmag 0 -0E+384 -> -1 +ddctm1120 comparetotmag -0 0E+384 -> -1 +ddctm1121 comparetotmag -0 -0E+384 -> -1 + +ddctm1130 comparetotmag 0E+384 0 -> 1 +ddctm1131 comparetotmag 0E+384 -0 -> 1 +ddctm1132 comparetotmag -0E+384 0 -> 1 +ddctm1133 comparetotmag -0E+384 -0 -> 1 +ddctm1134 comparetotmag 0E+384 0E-383 -> 1 +ddctm1135 comparetotmag 0E+384 -0E-383 -> 1 +ddctm1136 comparetotmag -0E+384 0E-383 -> 1 +ddctm1137 comparetotmag -0E+384 -0E-383 -> 1 +ddctm1138 comparetotmag 0 0E-383 -> 1 +ddctm1139 comparetotmag 0 -0E-383 -> 1 +ddctm1140 comparetotmag -0 0E-383 -> 1 +ddctm1141 comparetotmag -0 -0E-383 -> 1 + +-- Null tests +ddctm9990 comparetotmag 10 # -> NaN Invalid_operation +ddctm9991 comparetotmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddCopy.decTest b/Lib/test/decimaltestdata/ddCopy.decTest index 9a175c5ea75..f99d86a4267 100644 --- a/Lib/test/decimaltestdata/ddCopy.decTest +++ b/Lib/test/decimaltestdata/ddCopy.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddCopy.decTest -- quiet decDouble copy -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddcpy001 copy +7.50 -> 7.50 - --- Infinities -ddcpy011 copy Infinity -> Infinity -ddcpy012 copy -Infinity -> -Infinity - --- NaNs, 0 payload -ddcpy021 copy NaN -> NaN -ddcpy022 copy -NaN -> -NaN -ddcpy023 copy sNaN -> sNaN -ddcpy024 copy -sNaN -> -sNaN - --- NaNs, non-0 payload -ddcpy031 copy NaN10 -> NaN10 -ddcpy032 copy -NaN10 -> -NaN10 -ddcpy033 copy sNaN10 -> sNaN10 -ddcpy034 copy -sNaN10 -> -sNaN10 -ddcpy035 copy NaN7 -> NaN7 -ddcpy036 copy -NaN7 -> -NaN7 -ddcpy037 copy sNaN101 -> sNaN101 -ddcpy038 copy -sNaN101 -> -sNaN101 - --- finites -ddcpy101 copy 7 -> 7 -ddcpy102 copy -7 -> -7 -ddcpy103 copy 75 -> 75 -ddcpy104 copy -75 -> -75 -ddcpy105 copy 7.50 -> 7.50 -ddcpy106 copy -7.50 -> -7.50 -ddcpy107 copy 7.500 -> 7.500 -ddcpy108 copy -7.500 -> -7.500 - --- zeros -ddcpy111 copy 0 -> 0 -ddcpy112 copy -0 -> -0 -ddcpy113 copy 0E+4 -> 0E+4 -ddcpy114 copy -0E+4 -> -0E+4 -ddcpy115 copy 0.0000 -> 0.0000 -ddcpy116 copy -0.0000 -> -0.0000 -ddcpy117 copy 0E-141 -> 0E-141 -ddcpy118 copy -0E-141 -> -0E-141 - --- full coefficients, alternating bits -ddcpy121 copy 2682682682682682 -> 2682682682682682 -ddcpy122 copy -2682682682682682 -> -2682682682682682 -ddcpy123 copy 1341341341341341 -> 1341341341341341 -ddcpy124 copy -1341341341341341 -> -1341341341341341 - --- Nmax, Nmin, Ntiny -ddcpy131 copy 9.999999999999999E+384 -> 9.999999999999999E+384 -ddcpy132 copy 1E-383 -> 1E-383 -ddcpy133 copy 1.000000000000000E-383 -> 1.000000000000000E-383 -ddcpy134 copy 1E-398 -> 1E-398 - -ddcpy135 copy -1E-398 -> -1E-398 -ddcpy136 copy -1.000000000000000E-383 -> -1.000000000000000E-383 -ddcpy137 copy -1E-383 -> -1E-383 -ddcpy138 copy -9.999999999999999E+384 -> -9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddCopy.decTest -- quiet decDouble copy -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddcpy001 copy +7.50 -> 7.50 + +-- Infinities +ddcpy011 copy Infinity -> Infinity +ddcpy012 copy -Infinity -> -Infinity + +-- NaNs, 0 payload +ddcpy021 copy NaN -> NaN +ddcpy022 copy -NaN -> -NaN +ddcpy023 copy sNaN -> sNaN +ddcpy024 copy -sNaN -> -sNaN + +-- NaNs, non-0 payload +ddcpy031 copy NaN10 -> NaN10 +ddcpy032 copy -NaN10 -> -NaN10 +ddcpy033 copy sNaN10 -> sNaN10 +ddcpy034 copy -sNaN10 -> -sNaN10 +ddcpy035 copy NaN7 -> NaN7 +ddcpy036 copy -NaN7 -> -NaN7 +ddcpy037 copy sNaN101 -> sNaN101 +ddcpy038 copy -sNaN101 -> -sNaN101 + +-- finites +ddcpy101 copy 7 -> 7 +ddcpy102 copy -7 -> -7 +ddcpy103 copy 75 -> 75 +ddcpy104 copy -75 -> -75 +ddcpy105 copy 7.50 -> 7.50 +ddcpy106 copy -7.50 -> -7.50 +ddcpy107 copy 7.500 -> 7.500 +ddcpy108 copy -7.500 -> -7.500 + +-- zeros +ddcpy111 copy 0 -> 0 +ddcpy112 copy -0 -> -0 +ddcpy113 copy 0E+4 -> 0E+4 +ddcpy114 copy -0E+4 -> -0E+4 +ddcpy115 copy 0.0000 -> 0.0000 +ddcpy116 copy -0.0000 -> -0.0000 +ddcpy117 copy 0E-141 -> 0E-141 +ddcpy118 copy -0E-141 -> -0E-141 + +-- full coefficients, alternating bits +ddcpy121 copy 2682682682682682 -> 2682682682682682 +ddcpy122 copy -2682682682682682 -> -2682682682682682 +ddcpy123 copy 1341341341341341 -> 1341341341341341 +ddcpy124 copy -1341341341341341 -> -1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcpy131 copy 9.999999999999999E+384 -> 9.999999999999999E+384 +ddcpy132 copy 1E-383 -> 1E-383 +ddcpy133 copy 1.000000000000000E-383 -> 1.000000000000000E-383 +ddcpy134 copy 1E-398 -> 1E-398 + +ddcpy135 copy -1E-398 -> -1E-398 +ddcpy136 copy -1.000000000000000E-383 -> -1.000000000000000E-383 +ddcpy137 copy -1E-383 -> -1E-383 +ddcpy138 copy -9.999999999999999E+384 -> -9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddCopyAbs.decTest b/Lib/test/decimaltestdata/ddCopyAbs.decTest index 4823cf2d771..d436a1940c1 100644 --- a/Lib/test/decimaltestdata/ddCopyAbs.decTest +++ b/Lib/test/decimaltestdata/ddCopyAbs.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddCopyAbs.decTest -- quiet decDouble copy and set sign to zero -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddcpa001 copyabs +7.50 -> 7.50 - --- Infinities -ddcpa011 copyabs Infinity -> Infinity -ddcpa012 copyabs -Infinity -> Infinity - --- NaNs, 0 payload -ddcpa021 copyabs NaN -> NaN -ddcpa022 copyabs -NaN -> NaN -ddcpa023 copyabs sNaN -> sNaN -ddcpa024 copyabs -sNaN -> sNaN - --- NaNs, non-0 payload -ddcpa031 copyabs NaN10 -> NaN10 -ddcpa032 copyabs -NaN15 -> NaN15 -ddcpa033 copyabs sNaN15 -> sNaN15 -ddcpa034 copyabs -sNaN10 -> sNaN10 -ddcpa035 copyabs NaN7 -> NaN7 -ddcpa036 copyabs -NaN7 -> NaN7 -ddcpa037 copyabs sNaN101 -> sNaN101 -ddcpa038 copyabs -sNaN101 -> sNaN101 - --- finites -ddcpa101 copyabs 7 -> 7 -ddcpa102 copyabs -7 -> 7 -ddcpa103 copyabs 75 -> 75 -ddcpa104 copyabs -75 -> 75 -ddcpa105 copyabs 7.10 -> 7.10 -ddcpa106 copyabs -7.10 -> 7.10 -ddcpa107 copyabs 7.500 -> 7.500 -ddcpa108 copyabs -7.500 -> 7.500 - --- zeros -ddcpa111 copyabs 0 -> 0 -ddcpa112 copyabs -0 -> 0 -ddcpa113 copyabs 0E+6 -> 0E+6 -ddcpa114 copyabs -0E+6 -> 0E+6 -ddcpa115 copyabs 0.0000 -> 0.0000 -ddcpa116 copyabs -0.0000 -> 0.0000 -ddcpa117 copyabs 0E-141 -> 0E-141 -ddcpa118 copyabs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddcpa121 copyabs 2682682682682682 -> 2682682682682682 -ddcpa122 copyabs -2682682682682682 -> 2682682682682682 -ddcpa123 copyabs 1341341341341341 -> 1341341341341341 -ddcpa124 copyabs -1341341341341341 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddcpa131 copyabs 9.999999999999999E+384 -> 9.999999999999999E+384 -ddcpa132 copyabs 1E-383 -> 1E-383 -ddcpa133 copyabs 1.000000000000000E-383 -> 1.000000000000000E-383 -ddcpa134 copyabs 1E-398 -> 1E-398 - -ddcpa135 copyabs -1E-398 -> 1E-398 -ddcpa136 copyabs -1.000000000000000E-383 -> 1.000000000000000E-383 -ddcpa137 copyabs -1E-383 -> 1E-383 -ddcpa138 copyabs -9.999999999999999E+384 -> 9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddCopyAbs.decTest -- quiet decDouble copy and set sign to zero -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddcpa001 copyabs +7.50 -> 7.50 + +-- Infinities +ddcpa011 copyabs Infinity -> Infinity +ddcpa012 copyabs -Infinity -> Infinity + +-- NaNs, 0 payload +ddcpa021 copyabs NaN -> NaN +ddcpa022 copyabs -NaN -> NaN +ddcpa023 copyabs sNaN -> sNaN +ddcpa024 copyabs -sNaN -> sNaN + +-- NaNs, non-0 payload +ddcpa031 copyabs NaN10 -> NaN10 +ddcpa032 copyabs -NaN15 -> NaN15 +ddcpa033 copyabs sNaN15 -> sNaN15 +ddcpa034 copyabs -sNaN10 -> sNaN10 +ddcpa035 copyabs NaN7 -> NaN7 +ddcpa036 copyabs -NaN7 -> NaN7 +ddcpa037 copyabs sNaN101 -> sNaN101 +ddcpa038 copyabs -sNaN101 -> sNaN101 + +-- finites +ddcpa101 copyabs 7 -> 7 +ddcpa102 copyabs -7 -> 7 +ddcpa103 copyabs 75 -> 75 +ddcpa104 copyabs -75 -> 75 +ddcpa105 copyabs 7.10 -> 7.10 +ddcpa106 copyabs -7.10 -> 7.10 +ddcpa107 copyabs 7.500 -> 7.500 +ddcpa108 copyabs -7.500 -> 7.500 + +-- zeros +ddcpa111 copyabs 0 -> 0 +ddcpa112 copyabs -0 -> 0 +ddcpa113 copyabs 0E+6 -> 0E+6 +ddcpa114 copyabs -0E+6 -> 0E+6 +ddcpa115 copyabs 0.0000 -> 0.0000 +ddcpa116 copyabs -0.0000 -> 0.0000 +ddcpa117 copyabs 0E-141 -> 0E-141 +ddcpa118 copyabs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddcpa121 copyabs 2682682682682682 -> 2682682682682682 +ddcpa122 copyabs -2682682682682682 -> 2682682682682682 +ddcpa123 copyabs 1341341341341341 -> 1341341341341341 +ddcpa124 copyabs -1341341341341341 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcpa131 copyabs 9.999999999999999E+384 -> 9.999999999999999E+384 +ddcpa132 copyabs 1E-383 -> 1E-383 +ddcpa133 copyabs 1.000000000000000E-383 -> 1.000000000000000E-383 +ddcpa134 copyabs 1E-398 -> 1E-398 + +ddcpa135 copyabs -1E-398 -> 1E-398 +ddcpa136 copyabs -1.000000000000000E-383 -> 1.000000000000000E-383 +ddcpa137 copyabs -1E-383 -> 1E-383 +ddcpa138 copyabs -9.999999999999999E+384 -> 9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddCopyNegate.decTest b/Lib/test/decimaltestdata/ddCopyNegate.decTest index 121945c755c..a4c42743729 100644 --- a/Lib/test/decimaltestdata/ddCopyNegate.decTest +++ b/Lib/test/decimaltestdata/ddCopyNegate.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddCopyNegate.decTest -- quiet decDouble copy and negate -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddcpn001 copynegate +7.50 -> -7.50 - --- Infinities -ddcpn011 copynegate Infinity -> -Infinity -ddcpn012 copynegate -Infinity -> Infinity - --- NaNs, 0 payload -ddcpn021 copynegate NaN -> -NaN -ddcpn022 copynegate -NaN -> NaN -ddcpn023 copynegate sNaN -> -sNaN -ddcpn024 copynegate -sNaN -> sNaN - --- NaNs, non-0 payload -ddcpn031 copynegate NaN13 -> -NaN13 -ddcpn032 copynegate -NaN13 -> NaN13 -ddcpn033 copynegate sNaN13 -> -sNaN13 -ddcpn034 copynegate -sNaN13 -> sNaN13 -ddcpn035 copynegate NaN70 -> -NaN70 -ddcpn036 copynegate -NaN70 -> NaN70 -ddcpn037 copynegate sNaN101 -> -sNaN101 -ddcpn038 copynegate -sNaN101 -> sNaN101 - --- finites -ddcpn101 copynegate 7 -> -7 -ddcpn102 copynegate -7 -> 7 -ddcpn103 copynegate 75 -> -75 -ddcpn104 copynegate -75 -> 75 -ddcpn105 copynegate 7.50 -> -7.50 -ddcpn106 copynegate -7.50 -> 7.50 -ddcpn107 copynegate 7.500 -> -7.500 -ddcpn108 copynegate -7.500 -> 7.500 - --- zeros -ddcpn111 copynegate 0 -> -0 -ddcpn112 copynegate -0 -> 0 -ddcpn113 copynegate 0E+4 -> -0E+4 -ddcpn114 copynegate -0E+4 -> 0E+4 -ddcpn115 copynegate 0.0000 -> -0.0000 -ddcpn116 copynegate -0.0000 -> 0.0000 -ddcpn117 copynegate 0E-141 -> -0E-141 -ddcpn118 copynegate -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddcpn121 copynegate 2682682682682682 -> -2682682682682682 -ddcpn122 copynegate -2682682682682682 -> 2682682682682682 -ddcpn123 copynegate 1341341341341341 -> -1341341341341341 -ddcpn124 copynegate -1341341341341341 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddcpn131 copynegate 9.999999999999999E+384 -> -9.999999999999999E+384 -ddcpn132 copynegate 1E-383 -> -1E-383 -ddcpn133 copynegate 1.000000000000000E-383 -> -1.000000000000000E-383 -ddcpn134 copynegate 1E-398 -> -1E-398 - -ddcpn135 copynegate -1E-398 -> 1E-398 -ddcpn136 copynegate -1.000000000000000E-383 -> 1.000000000000000E-383 -ddcpn137 copynegate -1E-383 -> 1E-383 -ddcpn138 copynegate -9.999999999999999E+384 -> 9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddCopyNegate.decTest -- quiet decDouble copy and negate -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddcpn001 copynegate +7.50 -> -7.50 + +-- Infinities +ddcpn011 copynegate Infinity -> -Infinity +ddcpn012 copynegate -Infinity -> Infinity + +-- NaNs, 0 payload +ddcpn021 copynegate NaN -> -NaN +ddcpn022 copynegate -NaN -> NaN +ddcpn023 copynegate sNaN -> -sNaN +ddcpn024 copynegate -sNaN -> sNaN + +-- NaNs, non-0 payload +ddcpn031 copynegate NaN13 -> -NaN13 +ddcpn032 copynegate -NaN13 -> NaN13 +ddcpn033 copynegate sNaN13 -> -sNaN13 +ddcpn034 copynegate -sNaN13 -> sNaN13 +ddcpn035 copynegate NaN70 -> -NaN70 +ddcpn036 copynegate -NaN70 -> NaN70 +ddcpn037 copynegate sNaN101 -> -sNaN101 +ddcpn038 copynegate -sNaN101 -> sNaN101 + +-- finites +ddcpn101 copynegate 7 -> -7 +ddcpn102 copynegate -7 -> 7 +ddcpn103 copynegate 75 -> -75 +ddcpn104 copynegate -75 -> 75 +ddcpn105 copynegate 7.50 -> -7.50 +ddcpn106 copynegate -7.50 -> 7.50 +ddcpn107 copynegate 7.500 -> -7.500 +ddcpn108 copynegate -7.500 -> 7.500 + +-- zeros +ddcpn111 copynegate 0 -> -0 +ddcpn112 copynegate -0 -> 0 +ddcpn113 copynegate 0E+4 -> -0E+4 +ddcpn114 copynegate -0E+4 -> 0E+4 +ddcpn115 copynegate 0.0000 -> -0.0000 +ddcpn116 copynegate -0.0000 -> 0.0000 +ddcpn117 copynegate 0E-141 -> -0E-141 +ddcpn118 copynegate -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddcpn121 copynegate 2682682682682682 -> -2682682682682682 +ddcpn122 copynegate -2682682682682682 -> 2682682682682682 +ddcpn123 copynegate 1341341341341341 -> -1341341341341341 +ddcpn124 copynegate -1341341341341341 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcpn131 copynegate 9.999999999999999E+384 -> -9.999999999999999E+384 +ddcpn132 copynegate 1E-383 -> -1E-383 +ddcpn133 copynegate 1.000000000000000E-383 -> -1.000000000000000E-383 +ddcpn134 copynegate 1E-398 -> -1E-398 + +ddcpn135 copynegate -1E-398 -> 1E-398 +ddcpn136 copynegate -1.000000000000000E-383 -> 1.000000000000000E-383 +ddcpn137 copynegate -1E-383 -> 1E-383 +ddcpn138 copynegate -9.999999999999999E+384 -> 9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddCopySign.decTest b/Lib/test/decimaltestdata/ddCopySign.decTest index c99544d9aba..6a78083ad55 100644 --- a/Lib/test/decimaltestdata/ddCopySign.decTest +++ b/Lib/test/decimaltestdata/ddCopySign.decTest @@ -1,175 +1,175 @@ ------------------------------------------------------------------------- --- ddCopySign.decTest -- quiet decDouble copy with sign from rhs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddcps001 copysign +7.50 11 -> 7.50 - --- Infinities -ddcps011 copysign Infinity 11 -> Infinity -ddcps012 copysign -Infinity 11 -> Infinity - --- NaNs, 0 payload -ddcps021 copysign NaN 11 -> NaN -ddcps022 copysign -NaN 11 -> NaN -ddcps023 copysign sNaN 11 -> sNaN -ddcps024 copysign -sNaN 11 -> sNaN - --- NaNs, non-0 payload -ddcps031 copysign NaN10 11 -> NaN10 -ddcps032 copysign -NaN10 11 -> NaN10 -ddcps033 copysign sNaN10 11 -> sNaN10 -ddcps034 copysign -sNaN10 11 -> sNaN10 -ddcps035 copysign NaN7 11 -> NaN7 -ddcps036 copysign -NaN7 11 -> NaN7 -ddcps037 copysign sNaN101 11 -> sNaN101 -ddcps038 copysign -sNaN101 11 -> sNaN101 - --- finites -ddcps101 copysign 7 11 -> 7 -ddcps102 copysign -7 11 -> 7 -ddcps103 copysign 75 11 -> 75 -ddcps104 copysign -75 11 -> 75 -ddcps105 copysign 7.50 11 -> 7.50 -ddcps106 copysign -7.50 11 -> 7.50 -ddcps107 copysign 7.500 11 -> 7.500 -ddcps108 copysign -7.500 11 -> 7.500 - --- zeros -ddcps111 copysign 0 11 -> 0 -ddcps112 copysign -0 11 -> 0 -ddcps113 copysign 0E+4 11 -> 0E+4 -ddcps114 copysign -0E+4 11 -> 0E+4 -ddcps115 copysign 0.0000 11 -> 0.0000 -ddcps116 copysign -0.0000 11 -> 0.0000 -ddcps117 copysign 0E-141 11 -> 0E-141 -ddcps118 copysign -0E-141 11 -> 0E-141 - --- full coefficients, alternating bits -ddcps121 copysign 2682682682682682 11 -> 2682682682682682 -ddcps122 copysign -2682682682682682 11 -> 2682682682682682 -ddcps123 copysign 1341341341341341 11 -> 1341341341341341 -ddcps124 copysign -1341341341341341 11 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddcps131 copysign 9.999999999999999E+384 11 -> 9.999999999999999E+384 -ddcps132 copysign 1E-383 11 -> 1E-383 -ddcps133 copysign 1.000000000000000E-383 11 -> 1.000000000000000E-383 -ddcps134 copysign 1E-398 11 -> 1E-398 - -ddcps135 copysign -1E-398 11 -> 1E-398 -ddcps136 copysign -1.000000000000000E-383 11 -> 1.000000000000000E-383 -ddcps137 copysign -1E-383 11 -> 1E-383 -ddcps138 copysign -9.999999999999999E+384 11 -> 9.999999999999999E+384 - --- repeat with negative RHS - --- Infinities -ddcps211 copysign Infinity -34 -> -Infinity -ddcps212 copysign -Infinity -34 -> -Infinity - --- NaNs, 0 payload -ddcps221 copysign NaN -34 -> -NaN -ddcps222 copysign -NaN -34 -> -NaN -ddcps223 copysign sNaN -34 -> -sNaN -ddcps224 copysign -sNaN -34 -> -sNaN - --- NaNs, non-0 payload -ddcps231 copysign NaN10 -34 -> -NaN10 -ddcps232 copysign -NaN10 -34 -> -NaN10 -ddcps233 copysign sNaN10 -34 -> -sNaN10 -ddcps234 copysign -sNaN10 -34 -> -sNaN10 -ddcps235 copysign NaN7 -34 -> -NaN7 -ddcps236 copysign -NaN7 -34 -> -NaN7 -ddcps237 copysign sNaN101 -34 -> -sNaN101 -ddcps238 copysign -sNaN101 -34 -> -sNaN101 - --- finites -ddcps301 copysign 7 -34 -> -7 -ddcps302 copysign -7 -34 -> -7 -ddcps303 copysign 75 -34 -> -75 -ddcps304 copysign -75 -34 -> -75 -ddcps305 copysign 7.50 -34 -> -7.50 -ddcps306 copysign -7.50 -34 -> -7.50 -ddcps307 copysign 7.500 -34 -> -7.500 -ddcps308 copysign -7.500 -34 -> -7.500 - --- zeros -ddcps311 copysign 0 -34 -> -0 -ddcps312 copysign -0 -34 -> -0 -ddcps313 copysign 0E+4 -34 -> -0E+4 -ddcps314 copysign -0E+4 -34 -> -0E+4 -ddcps315 copysign 0.0000 -34 -> -0.0000 -ddcps316 copysign -0.0000 -34 -> -0.0000 -ddcps317 copysign 0E-141 -34 -> -0E-141 -ddcps318 copysign -0E-141 -34 -> -0E-141 - --- full coefficients, alternating bits -ddcps321 copysign 2682682682682682 -34 -> -2682682682682682 -ddcps322 copysign -2682682682682682 -34 -> -2682682682682682 -ddcps323 copysign 1341341341341341 -34 -> -1341341341341341 -ddcps324 copysign -1341341341341341 -34 -> -1341341341341341 - --- Nmax, Nmin, Ntiny -ddcps331 copysign 9.999999999999999E+384 -34 -> -9.999999999999999E+384 -ddcps332 copysign 1E-383 -34 -> -1E-383 -ddcps333 copysign 1.000000000000000E-383 -34 -> -1.000000000000000E-383 -ddcps334 copysign 1E-398 -34 -> -1E-398 - -ddcps335 copysign -1E-398 -34 -> -1E-398 -ddcps336 copysign -1.000000000000000E-383 -34 -> -1.000000000000000E-383 -ddcps337 copysign -1E-383 -34 -> -1E-383 -ddcps338 copysign -9.999999999999999E+384 -34 -> -9.999999999999999E+384 - --- Other kinds of RHS -ddcps401 copysign 701 -34 -> -701 -ddcps402 copysign -720 -34 -> -720 -ddcps403 copysign 701 -0 -> -701 -ddcps404 copysign -720 -0 -> -720 -ddcps405 copysign 701 +0 -> 701 -ddcps406 copysign -720 +0 -> 720 -ddcps407 copysign 701 +34 -> 701 -ddcps408 copysign -720 +34 -> 720 - -ddcps413 copysign 701 -Inf -> -701 -ddcps414 copysign -720 -Inf -> -720 -ddcps415 copysign 701 +Inf -> 701 -ddcps416 copysign -720 +Inf -> 720 - -ddcps420 copysign 701 -NaN -> -701 -ddcps421 copysign -720 -NaN -> -720 -ddcps422 copysign 701 +NaN -> 701 -ddcps423 copysign -720 +NaN -> 720 -ddcps425 copysign -720 +NaN8 -> 720 - -ddcps426 copysign 701 -sNaN -> -701 -ddcps427 copysign -720 -sNaN -> -720 -ddcps428 copysign 701 +sNaN -> 701 -ddcps429 copysign -720 +sNaN -> 720 -ddcps430 copysign -720 +sNaN3 -> 720 - +------------------------------------------------------------------------ +-- ddCopySign.decTest -- quiet decDouble copy with sign from rhs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddcps001 copysign +7.50 11 -> 7.50 + +-- Infinities +ddcps011 copysign Infinity 11 -> Infinity +ddcps012 copysign -Infinity 11 -> Infinity + +-- NaNs, 0 payload +ddcps021 copysign NaN 11 -> NaN +ddcps022 copysign -NaN 11 -> NaN +ddcps023 copysign sNaN 11 -> sNaN +ddcps024 copysign -sNaN 11 -> sNaN + +-- NaNs, non-0 payload +ddcps031 copysign NaN10 11 -> NaN10 +ddcps032 copysign -NaN10 11 -> NaN10 +ddcps033 copysign sNaN10 11 -> sNaN10 +ddcps034 copysign -sNaN10 11 -> sNaN10 +ddcps035 copysign NaN7 11 -> NaN7 +ddcps036 copysign -NaN7 11 -> NaN7 +ddcps037 copysign sNaN101 11 -> sNaN101 +ddcps038 copysign -sNaN101 11 -> sNaN101 + +-- finites +ddcps101 copysign 7 11 -> 7 +ddcps102 copysign -7 11 -> 7 +ddcps103 copysign 75 11 -> 75 +ddcps104 copysign -75 11 -> 75 +ddcps105 copysign 7.50 11 -> 7.50 +ddcps106 copysign -7.50 11 -> 7.50 +ddcps107 copysign 7.500 11 -> 7.500 +ddcps108 copysign -7.500 11 -> 7.500 + +-- zeros +ddcps111 copysign 0 11 -> 0 +ddcps112 copysign -0 11 -> 0 +ddcps113 copysign 0E+4 11 -> 0E+4 +ddcps114 copysign -0E+4 11 -> 0E+4 +ddcps115 copysign 0.0000 11 -> 0.0000 +ddcps116 copysign -0.0000 11 -> 0.0000 +ddcps117 copysign 0E-141 11 -> 0E-141 +ddcps118 copysign -0E-141 11 -> 0E-141 + +-- full coefficients, alternating bits +ddcps121 copysign 2682682682682682 11 -> 2682682682682682 +ddcps122 copysign -2682682682682682 11 -> 2682682682682682 +ddcps123 copysign 1341341341341341 11 -> 1341341341341341 +ddcps124 copysign -1341341341341341 11 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcps131 copysign 9.999999999999999E+384 11 -> 9.999999999999999E+384 +ddcps132 copysign 1E-383 11 -> 1E-383 +ddcps133 copysign 1.000000000000000E-383 11 -> 1.000000000000000E-383 +ddcps134 copysign 1E-398 11 -> 1E-398 + +ddcps135 copysign -1E-398 11 -> 1E-398 +ddcps136 copysign -1.000000000000000E-383 11 -> 1.000000000000000E-383 +ddcps137 copysign -1E-383 11 -> 1E-383 +ddcps138 copysign -9.999999999999999E+384 11 -> 9.999999999999999E+384 + +-- repeat with negative RHS + +-- Infinities +ddcps211 copysign Infinity -34 -> -Infinity +ddcps212 copysign -Infinity -34 -> -Infinity + +-- NaNs, 0 payload +ddcps221 copysign NaN -34 -> -NaN +ddcps222 copysign -NaN -34 -> -NaN +ddcps223 copysign sNaN -34 -> -sNaN +ddcps224 copysign -sNaN -34 -> -sNaN + +-- NaNs, non-0 payload +ddcps231 copysign NaN10 -34 -> -NaN10 +ddcps232 copysign -NaN10 -34 -> -NaN10 +ddcps233 copysign sNaN10 -34 -> -sNaN10 +ddcps234 copysign -sNaN10 -34 -> -sNaN10 +ddcps235 copysign NaN7 -34 -> -NaN7 +ddcps236 copysign -NaN7 -34 -> -NaN7 +ddcps237 copysign sNaN101 -34 -> -sNaN101 +ddcps238 copysign -sNaN101 -34 -> -sNaN101 + +-- finites +ddcps301 copysign 7 -34 -> -7 +ddcps302 copysign -7 -34 -> -7 +ddcps303 copysign 75 -34 -> -75 +ddcps304 copysign -75 -34 -> -75 +ddcps305 copysign 7.50 -34 -> -7.50 +ddcps306 copysign -7.50 -34 -> -7.50 +ddcps307 copysign 7.500 -34 -> -7.500 +ddcps308 copysign -7.500 -34 -> -7.500 + +-- zeros +ddcps311 copysign 0 -34 -> -0 +ddcps312 copysign -0 -34 -> -0 +ddcps313 copysign 0E+4 -34 -> -0E+4 +ddcps314 copysign -0E+4 -34 -> -0E+4 +ddcps315 copysign 0.0000 -34 -> -0.0000 +ddcps316 copysign -0.0000 -34 -> -0.0000 +ddcps317 copysign 0E-141 -34 -> -0E-141 +ddcps318 copysign -0E-141 -34 -> -0E-141 + +-- full coefficients, alternating bits +ddcps321 copysign 2682682682682682 -34 -> -2682682682682682 +ddcps322 copysign -2682682682682682 -34 -> -2682682682682682 +ddcps323 copysign 1341341341341341 -34 -> -1341341341341341 +ddcps324 copysign -1341341341341341 -34 -> -1341341341341341 + +-- Nmax, Nmin, Ntiny +ddcps331 copysign 9.999999999999999E+384 -34 -> -9.999999999999999E+384 +ddcps332 copysign 1E-383 -34 -> -1E-383 +ddcps333 copysign 1.000000000000000E-383 -34 -> -1.000000000000000E-383 +ddcps334 copysign 1E-398 -34 -> -1E-398 + +ddcps335 copysign -1E-398 -34 -> -1E-398 +ddcps336 copysign -1.000000000000000E-383 -34 -> -1.000000000000000E-383 +ddcps337 copysign -1E-383 -34 -> -1E-383 +ddcps338 copysign -9.999999999999999E+384 -34 -> -9.999999999999999E+384 + +-- Other kinds of RHS +ddcps401 copysign 701 -34 -> -701 +ddcps402 copysign -720 -34 -> -720 +ddcps403 copysign 701 -0 -> -701 +ddcps404 copysign -720 -0 -> -720 +ddcps405 copysign 701 +0 -> 701 +ddcps406 copysign -720 +0 -> 720 +ddcps407 copysign 701 +34 -> 701 +ddcps408 copysign -720 +34 -> 720 + +ddcps413 copysign 701 -Inf -> -701 +ddcps414 copysign -720 -Inf -> -720 +ddcps415 copysign 701 +Inf -> 701 +ddcps416 copysign -720 +Inf -> 720 + +ddcps420 copysign 701 -NaN -> -701 +ddcps421 copysign -720 -NaN -> -720 +ddcps422 copysign 701 +NaN -> 701 +ddcps423 copysign -720 +NaN -> 720 +ddcps425 copysign -720 +NaN8 -> 720 + +ddcps426 copysign 701 -sNaN -> -701 +ddcps427 copysign -720 -sNaN -> -720 +ddcps428 copysign 701 +sNaN -> 701 +ddcps429 copysign -720 +sNaN -> 720 +ddcps430 copysign -720 +sNaN3 -> 720 + diff --git a/Lib/test/decimaltestdata/ddDivide.decTest b/Lib/test/decimaltestdata/ddDivide.decTest index 719c72b254d..5b2651b2b66 100644 --- a/Lib/test/decimaltestdata/ddDivide.decTest +++ b/Lib/test/decimaltestdata/ddDivide.decTest @@ -1,863 +1,863 @@ ------------------------------------------------------------------------- --- ddDivide.decTest -- decDouble division -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -dddiv001 divide 1 1 -> 1 -dddiv002 divide 2 1 -> 2 -dddiv003 divide 1 2 -> 0.5 -dddiv004 divide 2 2 -> 1 -dddiv005 divide 0 1 -> 0 -dddiv006 divide 0 2 -> 0 -dddiv007 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv008 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv009 divide 3 3 -> 1 - -dddiv010 divide 2.4 1 -> 2.4 -dddiv011 divide 2.4 -1 -> -2.4 -dddiv012 divide -2.4 1 -> -2.4 -dddiv013 divide -2.4 -1 -> 2.4 -dddiv014 divide 2.40 1 -> 2.40 -dddiv015 divide 2.400 1 -> 2.400 -dddiv016 divide 2.4 2 -> 1.2 -dddiv017 divide 2.400 2 -> 1.200 -dddiv018 divide 2. 2 -> 1 -dddiv019 divide 20 20 -> 1 - -dddiv020 divide 187 187 -> 1 -dddiv021 divide 5 2 -> 2.5 -dddiv022 divide 50 20 -> 2.5 -dddiv023 divide 500 200 -> 2.5 -dddiv024 divide 50.0 20.0 -> 2.5 -dddiv025 divide 5.00 2.00 -> 2.5 -dddiv026 divide 5 2.0 -> 2.5 -dddiv027 divide 5 2.000 -> 2.5 -dddiv028 divide 5 0.20 -> 25 -dddiv029 divide 5 0.200 -> 25 -dddiv030 divide 10 1 -> 10 -dddiv031 divide 100 1 -> 100 -dddiv032 divide 1000 1 -> 1000 -dddiv033 divide 1000 100 -> 10 - -dddiv035 divide 1 2 -> 0.5 -dddiv036 divide 1 4 -> 0.25 -dddiv037 divide 1 8 -> 0.125 -dddiv038 divide 1 16 -> 0.0625 -dddiv039 divide 1 32 -> 0.03125 -dddiv040 divide 1 64 -> 0.015625 -dddiv041 divide 1 -2 -> -0.5 -dddiv042 divide 1 -4 -> -0.25 -dddiv043 divide 1 -8 -> -0.125 -dddiv044 divide 1 -16 -> -0.0625 -dddiv045 divide 1 -32 -> -0.03125 -dddiv046 divide 1 -64 -> -0.015625 -dddiv047 divide -1 2 -> -0.5 -dddiv048 divide -1 4 -> -0.25 -dddiv049 divide -1 8 -> -0.125 -dddiv050 divide -1 16 -> -0.0625 -dddiv051 divide -1 32 -> -0.03125 -dddiv052 divide -1 64 -> -0.015625 -dddiv053 divide -1 -2 -> 0.5 -dddiv054 divide -1 -4 -> 0.25 -dddiv055 divide -1 -8 -> 0.125 -dddiv056 divide -1 -16 -> 0.0625 -dddiv057 divide -1 -32 -> 0.03125 -dddiv058 divide -1 -64 -> 0.015625 - --- bcdTime -dddiv060 divide 1 7 -> 0.1428571428571429 Inexact Rounded -dddiv061 divide 1.2345678 1.9876543 -> 0.6211179680490717 Inexact Rounded - --- 1234567890123456 -dddiv071 divide 9999999999999999 1 -> 9999999999999999 -dddiv072 divide 999999999999999 1 -> 999999999999999 -dddiv073 divide 99999999999999 1 -> 99999999999999 -dddiv074 divide 9999999999999 1 -> 9999999999999 -dddiv075 divide 999999999999 1 -> 999999999999 -dddiv076 divide 99999999999 1 -> 99999999999 -dddiv077 divide 9999999999 1 -> 9999999999 -dddiv078 divide 999999999 1 -> 999999999 -dddiv079 divide 99999999 1 -> 99999999 -dddiv080 divide 9999999 1 -> 9999999 -dddiv081 divide 999999 1 -> 999999 -dddiv082 divide 99999 1 -> 99999 -dddiv083 divide 9999 1 -> 9999 -dddiv084 divide 999 1 -> 999 -dddiv085 divide 99 1 -> 99 -dddiv086 divide 9 1 -> 9 - -dddiv090 divide 0. 1 -> 0 -dddiv091 divide .0 1 -> 0.0 -dddiv092 divide 0.00 1 -> 0.00 -dddiv093 divide 0.00E+9 1 -> 0E+7 -dddiv094 divide 0.0000E-50 1 -> 0E-54 - -dddiv095 divide 1 1E-8 -> 1E+8 -dddiv096 divide 1 1E-9 -> 1E+9 -dddiv097 divide 1 1E-10 -> 1E+10 -dddiv098 divide 1 1E-11 -> 1E+11 -dddiv099 divide 1 1E-12 -> 1E+12 - -dddiv100 divide 1 1 -> 1 -dddiv101 divide 1 2 -> 0.5 -dddiv102 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv103 divide 1 4 -> 0.25 -dddiv104 divide 1 5 -> 0.2 -dddiv105 divide 1 6 -> 0.1666666666666667 Inexact Rounded -dddiv106 divide 1 7 -> 0.1428571428571429 Inexact Rounded -dddiv107 divide 1 8 -> 0.125 -dddiv108 divide 1 9 -> 0.1111111111111111 Inexact Rounded -dddiv109 divide 1 10 -> 0.1 -dddiv110 divide 1 1 -> 1 -dddiv111 divide 2 1 -> 2 -dddiv112 divide 3 1 -> 3 -dddiv113 divide 4 1 -> 4 -dddiv114 divide 5 1 -> 5 -dddiv115 divide 6 1 -> 6 -dddiv116 divide 7 1 -> 7 -dddiv117 divide 8 1 -> 8 -dddiv118 divide 9 1 -> 9 -dddiv119 divide 10 1 -> 10 - -dddiv120 divide 3E+1 0.001 -> 3E+4 -dddiv121 divide 2.200 2 -> 1.100 - -dddiv130 divide 12345 4.999 -> 2469.493898779756 Inexact Rounded -dddiv131 divide 12345 4.99 -> 2473.947895791583 Inexact Rounded -dddiv132 divide 12345 4.9 -> 2519.387755102041 Inexact Rounded -dddiv133 divide 12345 5 -> 2469 -dddiv134 divide 12345 5.1 -> 2420.588235294118 Inexact Rounded -dddiv135 divide 12345 5.01 -> 2464.071856287425 Inexact Rounded -dddiv136 divide 12345 5.001 -> 2468.506298740252 Inexact Rounded - --- test possibly imprecise results -dddiv220 divide 391 597 -> 0.6549413735343384 Inexact Rounded -dddiv221 divide 391 -597 -> -0.6549413735343384 Inexact Rounded -dddiv222 divide -391 597 -> -0.6549413735343384 Inexact Rounded -dddiv223 divide -391 -597 -> 0.6549413735343384 Inexact Rounded - --- test some cases that are close to exponent overflow, some with coefficient padding -dddiv270 divide 1 1e384 -> 1E-384 Subnormal -dddiv271 divide 1 0.9e384 -> 1.11111111111111E-384 Rounded Inexact Subnormal Underflow -dddiv272 divide 1 0.99e384 -> 1.01010101010101E-384 Rounded Inexact Subnormal Underflow -dddiv273 divide 1 0.9999999999999999e384 -> 1.00000000000000E-384 Rounded Inexact Subnormal Underflow -dddiv274 divide 9e384 1 -> 9.000000000000000E+384 Clamped -dddiv275 divide 9.9e384 1 -> 9.900000000000000E+384 Clamped -dddiv276 divide 9.99e384 1 -> 9.990000000000000E+384 Clamped -dddiv277 divide 9.9999999999999e384 1 -> 9.999999999999900E+384 Clamped -dddiv278 divide 9.99999999999999e384 1 -> 9.999999999999990E+384 Clamped -dddiv279 divide 9.999999999999999e384 1 -> 9.999999999999999E+384 - -dddiv285 divide 9.9e384 1.1 -> 9.000000000000000E+384 Clamped -dddiv286 divide 9.99e384 1.1 -> 9.081818181818182E+384 Inexact Rounded -dddiv287 divide 9.9999999999999e384 1.1 -> 9.090909090909000E+384 Clamped -dddiv288 divide 9.99999999999999e384 1.1 -> 9.090909090909082E+384 Inexact Rounded -dddiv289 divide 9.999999999999999e384 1.1 -> 9.090909090909090E+384 Clamped - - --- Divide into 0 tests -dddiv301 divide 0 7 -> 0 -dddiv302 divide 0 7E-5 -> 0E+5 -dddiv303 divide 0 7E-1 -> 0E+1 -dddiv304 divide 0 7E+1 -> 0.0 -dddiv305 divide 0 7E+5 -> 0.00000 -dddiv306 divide 0 7E+6 -> 0.000000 -dddiv307 divide 0 7E+7 -> 0E-7 -dddiv308 divide 0 70E-5 -> 0E+5 -dddiv309 divide 0 70E-1 -> 0E+1 -dddiv310 divide 0 70E+0 -> 0 -dddiv311 divide 0 70E+1 -> 0.0 -dddiv312 divide 0 70E+5 -> 0.00000 -dddiv313 divide 0 70E+6 -> 0.000000 -dddiv314 divide 0 70E+7 -> 0E-7 -dddiv315 divide 0 700E-5 -> 0E+5 -dddiv316 divide 0 700E-1 -> 0E+1 -dddiv317 divide 0 700E+0 -> 0 -dddiv318 divide 0 700E+1 -> 0.0 -dddiv319 divide 0 700E+5 -> 0.00000 -dddiv320 divide 0 700E+6 -> 0.000000 -dddiv321 divide 0 700E+7 -> 0E-7 -dddiv322 divide 0 700E+77 -> 0E-77 - -dddiv331 divide 0E-3 7E-5 -> 0E+2 -dddiv332 divide 0E-3 7E-1 -> 0.00 -dddiv333 divide 0E-3 7E+1 -> 0.0000 -dddiv334 divide 0E-3 7E+5 -> 0E-8 -dddiv335 divide 0E-1 7E-5 -> 0E+4 -dddiv336 divide 0E-1 7E-1 -> 0 -dddiv337 divide 0E-1 7E+1 -> 0.00 -dddiv338 divide 0E-1 7E+5 -> 0.000000 -dddiv339 divide 0E+1 7E-5 -> 0E+6 -dddiv340 divide 0E+1 7E-1 -> 0E+2 -dddiv341 divide 0E+1 7E+1 -> 0 -dddiv342 divide 0E+1 7E+5 -> 0.0000 -dddiv343 divide 0E+3 7E-5 -> 0E+8 -dddiv344 divide 0E+3 7E-1 -> 0E+4 -dddiv345 divide 0E+3 7E+1 -> 0E+2 -dddiv346 divide 0E+3 7E+5 -> 0.00 - --- These were 'input rounding' -dddiv441 divide 12345678000 1 -> 12345678000 -dddiv442 divide 1 12345678000 -> 8.100000664200054E-11 Inexact Rounded -dddiv443 divide 1234567800 1 -> 1234567800 -dddiv444 divide 1 1234567800 -> 8.100000664200054E-10 Inexact Rounded -dddiv445 divide 1234567890 1 -> 1234567890 -dddiv446 divide 1 1234567890 -> 8.100000073710001E-10 Inexact Rounded -dddiv447 divide 1234567891 1 -> 1234567891 -dddiv448 divide 1 1234567891 -> 8.100000067149001E-10 Inexact Rounded -dddiv449 divide 12345678901 1 -> 12345678901 -dddiv450 divide 1 12345678901 -> 8.100000073053901E-11 Inexact Rounded -dddiv451 divide 1234567896 1 -> 1234567896 -dddiv452 divide 1 1234567896 -> 8.100000034344000E-10 Inexact Rounded - --- high-lows -dddiv453 divide 1e+1 1 -> 1E+1 -dddiv454 divide 1e+1 1.0 -> 1E+1 -dddiv455 divide 1e+1 1.00 -> 1E+1 -dddiv456 divide 1e+2 2 -> 5E+1 -dddiv457 divide 1e+2 2.0 -> 5E+1 -dddiv458 divide 1e+2 2.00 -> 5E+1 - --- some from IEEE discussions -dddiv460 divide 3e0 2e0 -> 1.5 -dddiv461 divide 30e-1 2e0 -> 1.5 -dddiv462 divide 300e-2 2e0 -> 1.50 -dddiv464 divide 3000e-3 2e0 -> 1.500 -dddiv465 divide 3e0 20e-1 -> 1.5 -dddiv466 divide 30e-1 20e-1 -> 1.5 -dddiv467 divide 300e-2 20e-1 -> 1.5 -dddiv468 divide 3000e-3 20e-1 -> 1.50 -dddiv469 divide 3e0 200e-2 -> 1.5 -dddiv470 divide 30e-1 200e-2 -> 1.5 -dddiv471 divide 300e-2 200e-2 -> 1.5 -dddiv472 divide 3000e-3 200e-2 -> 1.5 -dddiv473 divide 3e0 2000e-3 -> 1.5 -dddiv474 divide 30e-1 2000e-3 -> 1.5 -dddiv475 divide 300e-2 2000e-3 -> 1.5 -dddiv476 divide 3000e-3 2000e-3 -> 1.5 - --- some reciprocals -dddiv480 divide 1 1.0E+33 -> 1E-33 -dddiv481 divide 1 10E+33 -> 1E-34 -dddiv482 divide 1 1.0E-33 -> 1E+33 -dddiv483 divide 1 10E-33 -> 1E+32 - --- RMS discussion table -dddiv484 divide 0e5 1e3 -> 0E+2 -dddiv485 divide 0e5 2e3 -> 0E+2 -dddiv486 divide 0e5 10e2 -> 0E+3 -dddiv487 divide 0e5 20e2 -> 0E+3 -dddiv488 divide 0e5 100e1 -> 0E+4 -dddiv489 divide 0e5 200e1 -> 0E+4 - -dddiv491 divide 1e5 1e3 -> 1E+2 -dddiv492 divide 1e5 2e3 -> 5E+1 -dddiv493 divide 1e5 10e2 -> 1E+2 -dddiv494 divide 1e5 20e2 -> 5E+1 -dddiv495 divide 1e5 100e1 -> 1E+2 -dddiv496 divide 1e5 200e1 -> 5E+1 - --- tryzeros cases -rounding: half_up -dddiv497 divide 0E+380 1000E-13 -> 0E+369 Clamped -dddiv498 divide 0E-390 1000E+13 -> 0E-398 Clamped - -rounding: half_up - --- focus on trailing zeros issues -dddiv500 divide 1 9.9 -> 0.1010101010101010 Inexact Rounded -dddiv501 divide 1 9.09 -> 0.1100110011001100 Inexact Rounded -dddiv502 divide 1 9.009 -> 0.1110001110001110 Inexact Rounded - -dddiv511 divide 1 2 -> 0.5 -dddiv512 divide 1.0 2 -> 0.5 -dddiv513 divide 1.00 2 -> 0.50 -dddiv514 divide 1.000 2 -> 0.500 -dddiv515 divide 1.0000 2 -> 0.5000 -dddiv516 divide 1.00000 2 -> 0.50000 -dddiv517 divide 1.000000 2 -> 0.500000 -dddiv518 divide 1.0000000 2 -> 0.5000000 -dddiv519 divide 1.00 2.00 -> 0.5 - -dddiv521 divide 2 1 -> 2 -dddiv522 divide 2 1.0 -> 2 -dddiv523 divide 2 1.00 -> 2 -dddiv524 divide 2 1.000 -> 2 -dddiv525 divide 2 1.0000 -> 2 -dddiv526 divide 2 1.00000 -> 2 -dddiv527 divide 2 1.000000 -> 2 -dddiv528 divide 2 1.0000000 -> 2 -dddiv529 divide 2.00 1.00 -> 2 - -dddiv530 divide 2.40 2 -> 1.20 -dddiv531 divide 2.40 4 -> 0.60 -dddiv532 divide 2.40 10 -> 0.24 -dddiv533 divide 2.40 2.0 -> 1.2 -dddiv534 divide 2.40 4.0 -> 0.6 -dddiv535 divide 2.40 10.0 -> 0.24 -dddiv536 divide 2.40 2.00 -> 1.2 -dddiv537 divide 2.40 4.00 -> 0.6 -dddiv538 divide 2.40 10.00 -> 0.24 -dddiv539 divide 0.9 0.1 -> 9 -dddiv540 divide 0.9 0.01 -> 9E+1 -dddiv541 divide 0.9 0.001 -> 9E+2 -dddiv542 divide 5 2 -> 2.5 -dddiv543 divide 5 2.0 -> 2.5 -dddiv544 divide 5 2.00 -> 2.5 -dddiv545 divide 5 20 -> 0.25 -dddiv546 divide 5 20.0 -> 0.25 -dddiv547 divide 2.400 2 -> 1.200 -dddiv548 divide 2.400 2.0 -> 1.20 -dddiv549 divide 2.400 2.400 -> 1 - -dddiv550 divide 240 1 -> 240 -dddiv551 divide 240 10 -> 24 -dddiv552 divide 240 100 -> 2.4 -dddiv553 divide 240 1000 -> 0.24 -dddiv554 divide 2400 1 -> 2400 -dddiv555 divide 2400 10 -> 240 -dddiv556 divide 2400 100 -> 24 -dddiv557 divide 2400 1000 -> 2.4 - --- +ve exponent -dddiv600 divide 2.4E+9 2 -> 1.2E+9 -dddiv601 divide 2.40E+9 2 -> 1.20E+9 -dddiv602 divide 2.400E+9 2 -> 1.200E+9 -dddiv603 divide 2.4000E+9 2 -> 1.2000E+9 -dddiv604 divide 24E+8 2 -> 1.2E+9 -dddiv605 divide 240E+7 2 -> 1.20E+9 -dddiv606 divide 2400E+6 2 -> 1.200E+9 -dddiv607 divide 24000E+5 2 -> 1.2000E+9 - --- more zeros, etc. -dddiv731 divide 5.00 1E-3 -> 5.00E+3 -dddiv732 divide 00.00 0.000 -> NaN Division_undefined -dddiv733 divide 00.00 0E-3 -> NaN Division_undefined -dddiv734 divide 0 -0 -> NaN Division_undefined -dddiv735 divide -0 0 -> NaN Division_undefined -dddiv736 divide -0 -0 -> NaN Division_undefined - -dddiv741 divide 0 -1 -> -0 -dddiv742 divide -0 -1 -> 0 -dddiv743 divide 0 1 -> 0 -dddiv744 divide -0 1 -> -0 -dddiv745 divide -1 0 -> -Infinity Division_by_zero -dddiv746 divide -1 -0 -> Infinity Division_by_zero -dddiv747 divide 1 0 -> Infinity Division_by_zero -dddiv748 divide 1 -0 -> -Infinity Division_by_zero - -dddiv751 divide 0.0 -1 -> -0.0 -dddiv752 divide -0.0 -1 -> 0.0 -dddiv753 divide 0.0 1 -> 0.0 -dddiv754 divide -0.0 1 -> -0.0 -dddiv755 divide -1.0 0 -> -Infinity Division_by_zero -dddiv756 divide -1.0 -0 -> Infinity Division_by_zero -dddiv757 divide 1.0 0 -> Infinity Division_by_zero -dddiv758 divide 1.0 -0 -> -Infinity Division_by_zero - -dddiv761 divide 0 -1.0 -> -0E+1 -dddiv762 divide -0 -1.0 -> 0E+1 -dddiv763 divide 0 1.0 -> 0E+1 -dddiv764 divide -0 1.0 -> -0E+1 -dddiv765 divide -1 0.0 -> -Infinity Division_by_zero -dddiv766 divide -1 -0.0 -> Infinity Division_by_zero -dddiv767 divide 1 0.0 -> Infinity Division_by_zero -dddiv768 divide 1 -0.0 -> -Infinity Division_by_zero - -dddiv771 divide 0.0 -1.0 -> -0 -dddiv772 divide -0.0 -1.0 -> 0 -dddiv773 divide 0.0 1.0 -> 0 -dddiv774 divide -0.0 1.0 -> -0 -dddiv775 divide -1.0 0.0 -> -Infinity Division_by_zero -dddiv776 divide -1.0 -0.0 -> Infinity Division_by_zero -dddiv777 divide 1.0 0.0 -> Infinity Division_by_zero -dddiv778 divide 1.0 -0.0 -> -Infinity Division_by_zero - --- Specials -dddiv780 divide Inf -Inf -> NaN Invalid_operation -dddiv781 divide Inf -1000 -> -Infinity -dddiv782 divide Inf -1 -> -Infinity -dddiv783 divide Inf -0 -> -Infinity -dddiv784 divide Inf 0 -> Infinity -dddiv785 divide Inf 1 -> Infinity -dddiv786 divide Inf 1000 -> Infinity -dddiv787 divide Inf Inf -> NaN Invalid_operation -dddiv788 divide -1000 Inf -> -0E-398 Clamped -dddiv789 divide -Inf Inf -> NaN Invalid_operation -dddiv790 divide -1 Inf -> -0E-398 Clamped -dddiv791 divide -0 Inf -> -0E-398 Clamped -dddiv792 divide 0 Inf -> 0E-398 Clamped -dddiv793 divide 1 Inf -> 0E-398 Clamped -dddiv794 divide 1000 Inf -> 0E-398 Clamped -dddiv795 divide Inf Inf -> NaN Invalid_operation - -dddiv800 divide -Inf -Inf -> NaN Invalid_operation -dddiv801 divide -Inf -1000 -> Infinity -dddiv802 divide -Inf -1 -> Infinity -dddiv803 divide -Inf -0 -> Infinity -dddiv804 divide -Inf 0 -> -Infinity -dddiv805 divide -Inf 1 -> -Infinity -dddiv806 divide -Inf 1000 -> -Infinity -dddiv807 divide -Inf Inf -> NaN Invalid_operation -dddiv808 divide -1000 Inf -> -0E-398 Clamped -dddiv809 divide -Inf -Inf -> NaN Invalid_operation -dddiv810 divide -1 -Inf -> 0E-398 Clamped -dddiv811 divide -0 -Inf -> 0E-398 Clamped -dddiv812 divide 0 -Inf -> -0E-398 Clamped -dddiv813 divide 1 -Inf -> -0E-398 Clamped -dddiv814 divide 1000 -Inf -> -0E-398 Clamped -dddiv815 divide Inf -Inf -> NaN Invalid_operation - -dddiv821 divide NaN -Inf -> NaN -dddiv822 divide NaN -1000 -> NaN -dddiv823 divide NaN -1 -> NaN -dddiv824 divide NaN -0 -> NaN -dddiv825 divide NaN 0 -> NaN -dddiv826 divide NaN 1 -> NaN -dddiv827 divide NaN 1000 -> NaN -dddiv828 divide NaN Inf -> NaN -dddiv829 divide NaN NaN -> NaN -dddiv830 divide -Inf NaN -> NaN -dddiv831 divide -1000 NaN -> NaN -dddiv832 divide -1 NaN -> NaN -dddiv833 divide -0 NaN -> NaN -dddiv834 divide 0 NaN -> NaN -dddiv835 divide 1 NaN -> NaN -dddiv836 divide 1000 NaN -> NaN -dddiv837 divide Inf NaN -> NaN - -dddiv841 divide sNaN -Inf -> NaN Invalid_operation -dddiv842 divide sNaN -1000 -> NaN Invalid_operation -dddiv843 divide sNaN -1 -> NaN Invalid_operation -dddiv844 divide sNaN -0 -> NaN Invalid_operation -dddiv845 divide sNaN 0 -> NaN Invalid_operation -dddiv846 divide sNaN 1 -> NaN Invalid_operation -dddiv847 divide sNaN 1000 -> NaN Invalid_operation -dddiv848 divide sNaN NaN -> NaN Invalid_operation -dddiv849 divide sNaN sNaN -> NaN Invalid_operation -dddiv850 divide NaN sNaN -> NaN Invalid_operation -dddiv851 divide -Inf sNaN -> NaN Invalid_operation -dddiv852 divide -1000 sNaN -> NaN Invalid_operation -dddiv853 divide -1 sNaN -> NaN Invalid_operation -dddiv854 divide -0 sNaN -> NaN Invalid_operation -dddiv855 divide 0 sNaN -> NaN Invalid_operation -dddiv856 divide 1 sNaN -> NaN Invalid_operation -dddiv857 divide 1000 sNaN -> NaN Invalid_operation -dddiv858 divide Inf sNaN -> NaN Invalid_operation -dddiv859 divide NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dddiv861 divide NaN9 -Inf -> NaN9 -dddiv862 divide NaN8 1000 -> NaN8 -dddiv863 divide NaN7 Inf -> NaN7 -dddiv864 divide NaN6 NaN5 -> NaN6 -dddiv865 divide -Inf NaN4 -> NaN4 -dddiv866 divide -1000 NaN3 -> NaN3 -dddiv867 divide Inf NaN2 -> NaN2 - -dddiv871 divide sNaN99 -Inf -> NaN99 Invalid_operation -dddiv872 divide sNaN98 -1 -> NaN98 Invalid_operation -dddiv873 divide sNaN97 NaN -> NaN97 Invalid_operation -dddiv874 divide sNaN96 sNaN94 -> NaN96 Invalid_operation -dddiv875 divide NaN95 sNaN93 -> NaN93 Invalid_operation -dddiv876 divide -Inf sNaN92 -> NaN92 Invalid_operation -dddiv877 divide 0 sNaN91 -> NaN91 Invalid_operation -dddiv878 divide Inf sNaN90 -> NaN90 Invalid_operation -dddiv879 divide NaN sNaN89 -> NaN89 Invalid_operation - -dddiv881 divide -NaN9 -Inf -> -NaN9 -dddiv882 divide -NaN8 1000 -> -NaN8 -dddiv883 divide -NaN7 Inf -> -NaN7 -dddiv884 divide -NaN6 -NaN5 -> -NaN6 -dddiv885 divide -Inf -NaN4 -> -NaN4 -dddiv886 divide -1000 -NaN3 -> -NaN3 -dddiv887 divide Inf -NaN2 -> -NaN2 - -dddiv891 divide -sNaN99 -Inf -> -NaN99 Invalid_operation -dddiv892 divide -sNaN98 -1 -> -NaN98 Invalid_operation -dddiv893 divide -sNaN97 NaN -> -NaN97 Invalid_operation -dddiv894 divide -sNaN96 -sNaN94 -> -NaN96 Invalid_operation -dddiv895 divide -NaN95 -sNaN93 -> -NaN93 Invalid_operation -dddiv896 divide -Inf -sNaN92 -> -NaN92 Invalid_operation -dddiv897 divide 0 -sNaN91 -> -NaN91 Invalid_operation -dddiv898 divide Inf -sNaN90 -> -NaN90 Invalid_operation -dddiv899 divide -NaN -sNaN89 -> -NaN89 Invalid_operation - --- Various flavours of divide by 0 -dddiv901 divide 0 0 -> NaN Division_undefined -dddiv902 divide 0.0E5 0 -> NaN Division_undefined -dddiv903 divide 0.000 0 -> NaN Division_undefined -dddiv904 divide 0.0001 0 -> Infinity Division_by_zero -dddiv905 divide 0.01 0 -> Infinity Division_by_zero -dddiv906 divide 0.1 0 -> Infinity Division_by_zero -dddiv907 divide 1 0 -> Infinity Division_by_zero -dddiv908 divide 1 0.0 -> Infinity Division_by_zero -dddiv909 divide 10 0.0 -> Infinity Division_by_zero -dddiv910 divide 1E+100 0.0 -> Infinity Division_by_zero -dddiv911 divide 1E+100 0 -> Infinity Division_by_zero - -dddiv921 divide -0.0001 0 -> -Infinity Division_by_zero -dddiv922 divide -0.01 0 -> -Infinity Division_by_zero -dddiv923 divide -0.1 0 -> -Infinity Division_by_zero -dddiv924 divide -1 0 -> -Infinity Division_by_zero -dddiv925 divide -1 0.0 -> -Infinity Division_by_zero -dddiv926 divide -10 0.0 -> -Infinity Division_by_zero -dddiv927 divide -1E+100 0.0 -> -Infinity Division_by_zero -dddiv928 divide -1E+100 0 -> -Infinity Division_by_zero - -dddiv931 divide 0.0001 -0 -> -Infinity Division_by_zero -dddiv932 divide 0.01 -0 -> -Infinity Division_by_zero -dddiv933 divide 0.1 -0 -> -Infinity Division_by_zero -dddiv934 divide 1 -0 -> -Infinity Division_by_zero -dddiv935 divide 1 -0.0 -> -Infinity Division_by_zero -dddiv936 divide 10 -0.0 -> -Infinity Division_by_zero -dddiv937 divide 1E+100 -0.0 -> -Infinity Division_by_zero -dddiv938 divide 1E+100 -0 -> -Infinity Division_by_zero - -dddiv941 divide -0.0001 -0 -> Infinity Division_by_zero -dddiv942 divide -0.01 -0 -> Infinity Division_by_zero -dddiv943 divide -0.1 -0 -> Infinity Division_by_zero -dddiv944 divide -1 -0 -> Infinity Division_by_zero -dddiv945 divide -1 -0.0 -> Infinity Division_by_zero -dddiv946 divide -10 -0.0 -> Infinity Division_by_zero -dddiv947 divide -1E+100 -0.0 -> Infinity Division_by_zero -dddiv948 divide -1E+100 -0 -> Infinity Division_by_zero - --- Examples from SQL proposal (Krishna Kulkarni) -dddiv1021 divide 1E0 1E0 -> 1 -dddiv1022 divide 1E0 2E0 -> 0.5 -dddiv1023 divide 1E0 3E0 -> 0.3333333333333333 Inexact Rounded -dddiv1024 divide 100E-2 1000E-3 -> 1 -dddiv1025 divide 24E-1 2E0 -> 1.2 -dddiv1026 divide 2400E-3 2E0 -> 1.200 -dddiv1027 divide 5E0 2E0 -> 2.5 -dddiv1028 divide 5E0 20E-1 -> 2.5 -dddiv1029 divide 5E0 2000E-3 -> 2.5 -dddiv1030 divide 5E0 2E-1 -> 25 -dddiv1031 divide 5E0 20E-2 -> 25 -dddiv1032 divide 480E-2 3E0 -> 1.60 -dddiv1033 divide 47E-1 2E0 -> 2.35 - --- ECMAScript bad examples -rounding: half_down -dddiv1040 divide 5 9 -> 0.5555555555555556 Inexact Rounded -rounding: half_even -dddiv1041 divide 6 11 -> 0.5454545454545455 Inexact Rounded - --- overflow and underflow tests .. note subnormal results --- signs -dddiv1051 divide 1e+277 1e-311 -> Infinity Overflow Inexact Rounded -dddiv1052 divide 1e+277 -1e-311 -> -Infinity Overflow Inexact Rounded -dddiv1053 divide -1e+277 1e-311 -> -Infinity Overflow Inexact Rounded -dddiv1054 divide -1e+277 -1e-311 -> Infinity Overflow Inexact Rounded -dddiv1055 divide 1e-277 1e+311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1056 divide 1e-277 -1e+311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1057 divide -1e-277 1e+311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1058 divide -1e-277 -1e+311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dddiv1060 divide 1e-291 1e+101 -> 1E-392 Subnormal -dddiv1061 divide 1e-291 1e+102 -> 1E-393 Subnormal -dddiv1062 divide 1e-291 1e+103 -> 1E-394 Subnormal -dddiv1063 divide 1e-291 1e+104 -> 1E-395 Subnormal -dddiv1064 divide 1e-291 1e+105 -> 1E-396 Subnormal -dddiv1065 divide 1e-291 1e+106 -> 1E-397 Subnormal -dddiv1066 divide 1e-291 1e+107 -> 1E-398 Subnormal -dddiv1067 divide 1e-291 1e+108 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1068 divide 1e-291 1e+109 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1069 divide 1e-291 1e+110 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -dddiv1070 divide 1e+60 1e-321 -> 1.000000000000E+381 Clamped -dddiv1071 divide 1e+60 1e-322 -> 1.0000000000000E+382 Clamped -dddiv1072 divide 1e+60 1e-323 -> 1.00000000000000E+383 Clamped -dddiv1073 divide 1e+60 1e-324 -> 1.000000000000000E+384 Clamped -dddiv1074 divide 1e+60 1e-325 -> Infinity Overflow Inexact Rounded -dddiv1075 divide 1e+60 1e-326 -> Infinity Overflow Inexact Rounded -dddiv1076 divide 1e+60 1e-327 -> Infinity Overflow Inexact Rounded -dddiv1077 divide 1e+60 1e-328 -> Infinity Overflow Inexact Rounded -dddiv1078 divide 1e+60 1e-329 -> Infinity Overflow Inexact Rounded -dddiv1079 divide 1e+60 1e-330 -> Infinity Overflow Inexact Rounded - -dddiv1101 divide 1.0000E-394 1 -> 1.0000E-394 Subnormal -dddiv1102 divide 1.000E-394 1e+1 -> 1.000E-395 Subnormal -dddiv1103 divide 1.00E-394 1e+2 -> 1.00E-396 Subnormal -dddiv1104 divide 1.0E-394 1e+3 -> 1.0E-397 Subnormal -dddiv1105 divide 1.0E-394 1e+4 -> 1E-398 Subnormal Rounded -dddiv1106 divide 1.3E-394 1e+4 -> 1E-398 Underflow Subnormal Inexact Rounded -dddiv1107 divide 1.5E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1108 divide 1.7E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1109 divide 2.3E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1110 divide 2.5E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1111 divide 2.7E-394 1e+4 -> 3E-398 Underflow Subnormal Inexact Rounded -dddiv1112 divide 1.49E-394 1e+4 -> 1E-398 Underflow Subnormal Inexact Rounded -dddiv1113 divide 1.50E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1114 divide 1.51E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1115 divide 2.49E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1116 divide 2.50E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded -dddiv1117 divide 2.51E-394 1e+4 -> 3E-398 Underflow Subnormal Inexact Rounded - -dddiv1118 divide 1E-394 1e+4 -> 1E-398 Subnormal -dddiv1119 divide 3E-394 1e+5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1120 divide 5E-394 1e+5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1121 divide 7E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded -dddiv1122 divide 9E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded -dddiv1123 divide 9.9E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded - -dddiv1124 divide 1E-394 -1e+4 -> -1E-398 Subnormal -dddiv1125 divide 3E-394 -1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1126 divide -5E-394 1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1127 divide 7E-394 -1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded -dddiv1128 divide -9E-394 1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded -dddiv1129 divide 9.9E-394 -1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded -dddiv1130 divide 3.0E-394 -1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped - -dddiv1131 divide 1.0E-199 1e+200 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -dddiv1132 divide 1.0E-199 1e+199 -> 1E-398 Subnormal Rounded -dddiv1133 divide 1.0E-199 1e+198 -> 1.0E-397 Subnormal -dddiv1134 divide 2.0E-199 2e+198 -> 1.0E-397 Subnormal -dddiv1135 divide 4.0E-199 4e+198 -> 1.0E-397 Subnormal -dddiv1136 divide 10.0E-199 10e+198 -> 1.0E-397 Subnormal -dddiv1137 divide 30.0E-199 30e+198 -> 1.0E-397 Subnormal - --- randoms -dddiv2010 divide -3.303226714900711E-35 8.796578842713183E+73 -> -3.755126594058783E-109 Inexact Rounded -dddiv2011 divide 933153327821073.6 68782181090246.25 -> 13.56678885475763 Inexact Rounded -dddiv2012 divide 5.04752436057906E-72 -8.179481771238642E+64 -> -6.170958627632835E-137 Inexact Rounded -dddiv2013 divide -3707613309582318 3394911196503.048 -> -1092.109070010836 Inexact Rounded -dddiv2014 divide 99689.0555190461 -4.735208553891464 -> -21052.72753765411 Inexact Rounded -dddiv2015 divide -1447915775613329 269750797.8184875 -> -5367605.164925653 Inexact Rounded -dddiv2016 divide -9.394881304225258E-19 -830585.0252671636 -> 1.131116143251358E-24 Inexact Rounded -dddiv2017 divide -1.056283432738934 88.58754555124013 -> -0.01192361100159352 Inexact Rounded -dddiv2018 divide 5763220933343.081 689089567025052.1 -> 0.008363529516524456 Inexact Rounded -dddiv2019 divide 873819.122103216 9.740612494523300E-49 -> 8.970884763093948E+53 Inexact Rounded -dddiv2020 divide 8022914.838533576 6178.566801742713 -> 1298.507420243583 Inexact Rounded -dddiv2021 divide 203982.7605650363 -2158.283639053435 -> -94.51156320422168 Inexact Rounded -dddiv2022 divide 803.6310547013030 7101143795399.238 -> 1.131692411611166E-10 Inexact Rounded -dddiv2023 divide 9.251697842123399E-82 -1.342350220606119E-7 -> -6.892163982321936E-75 Inexact Rounded -dddiv2024 divide -1.980600645637992E-53 -5.474262753214457E+77 -> 3.618022617703168E-131 Inexact Rounded -dddiv2025 divide -210.0322996351690 -8.580951835872843E+80 -> 2.447657365434971E-79 Inexact Rounded -dddiv2026 divide -1.821980314020370E+85 -3.018915267138165 -> 6.035215144503042E+84 Inexact Rounded -dddiv2027 divide -772264503601.1047 5.158258271408988E-86 -> -1.497141986630614E+97 Inexact Rounded -dddiv2028 divide -767.0532415847106 2.700027228028939E-59 -> -2.840909282772941E+61 Inexact Rounded -dddiv2029 divide 496724.8548250093 7.32700588163100E+66 -> 6.779370220929013E-62 Inexact Rounded -dddiv2030 divide -304232651447703.9 -108.9730808657440 -> 2791814721862.565 Inexact Rounded -dddiv2031 divide -7.233817192699405E+42 -5711302004.149411 -> 1.266579352211430E+33 Inexact Rounded -dddiv2032 divide -9.999221444912745E+96 4010569406446197 -> -2.493217404202250E+81 Inexact Rounded -dddiv2033 divide -1837272.061937622 8.356322838066762 -> -219866.0939196882 Inexact Rounded -dddiv2034 divide 2168.517555606529 209.1910258615061 -> 10.36620737756784 Inexact Rounded -dddiv2035 divide -1.884389790576371E+88 2.95181953870583E+20 -> -6.383824505079828E+67 Inexact Rounded -dddiv2036 divide 732263.6037438196 961222.3634446889 -> 0.7618045850698269 Inexact Rounded -dddiv2037 divide -813461419.0348336 5.376293753809143E+84 -> -1.513052404285927E-76 Inexact Rounded -dddiv2038 divide -45562133508108.50 -9.776843494690107E+51 -> 4.660208945029519E-39 Inexact Rounded -dddiv2039 divide -6.489393172441016E+80 -9101965.097852113 -> 7.129661674897421E+73 Inexact Rounded -dddiv2040 divide 3.694576237117349E+93 6683512.012622003 -> 5.527896456443912E+86 Inexact Rounded -dddiv2041 divide -2.252877726403272E+19 -7451913256.181367 -> 3023220546.125531 Inexact Rounded -dddiv2042 divide 518303.1989111842 50.01587020474133 -> 10362.77479107123 Inexact Rounded -dddiv2043 divide 2.902087881880103E+24 33.32400992305702 -> 8.708699488989578E+22 Inexact Rounded -dddiv2044 divide 549619.4559510557 1660824845196338 -> 3.309316196351104E-10 Inexact Rounded -dddiv2045 divide -6775670774684043 8292152023.077262 -> -817118.4941891062 Inexact Rounded -dddiv2046 divide -77.50923921524079 -5.636882655425815E+74 -> 1.375037302588405E-73 Inexact Rounded -dddiv2047 divide -2.984889459605149E-10 -88106156784122.99 -> 3.387833005721384E-24 Inexact Rounded -dddiv2048 divide 0.949517293997085 44767115.96450998 -> 2.121015110175589E-8 Inexact Rounded -dddiv2049 divide -2760937211.084521 -1087015876975408 -> 0.000002539923537057024 Inexact Rounded -dddiv2050 divide 28438351.85030536 -4.209397904088624E-47 -> -6.755919135770688E+53 Inexact Rounded -dddiv2051 divide -85562731.6820956 -7.166045442530185E+45 -> 1.194002080621542E-38 Inexact Rounded -dddiv2052 divide 2533802852165.25 7154.119606235955 -> 354173957.3317501 Inexact Rounded -dddiv2053 divide -8858831346851.474 97.59734208801716 -> -90769186509.83577 Inexact Rounded -dddiv2054 divide 176783629801387.5 840073263.3109817 -> 210438.3480848206 Inexact Rounded -dddiv2055 divide -493506471796175.6 79733894790822.03 -> -6.189418854940746 Inexact Rounded -dddiv2056 divide 790.1682542103445 829.9449370367435 -> 0.9520731062371214 Inexact Rounded -dddiv2057 divide -8920459838.583164 -4767.889187899214 -> 1870945.294035581 Inexact Rounded -dddiv2058 divide 53536687164422.1 53137.5007032689 -> 1007512330.385698 Inexact Rounded -dddiv2059 divide 4.051532311146561E-74 -2.343089768972261E+94 -> -1.729140882606332E-168 Inexact Rounded -dddiv2060 divide -14847758778636.88 3.062543516383807E-43 -> -4.848178874587497E+55 Inexact Rounded - --- Division probably has pre-rounding, so need to test rounding --- explicitly rather than assume included through other tests; --- tests include simple rounding and also the tricky cases of sticky --- bits following two zeros --- --- 1/99999 gives 0.0000100001000010000100001000010000100001 --- 1234567890123456 --- --- 1/999999 gives 0.000001000001000001000001000001000001000001 --- 1234567890123456 - -rounding: ceiling -dddiv3001 divide 1 3 -> 0.3333333333333334 Inexact Rounded -dddiv3002 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3003 divide 1 99999 -> 0.00001000010000100002 Inexact Rounded -dddiv3004 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded - -rounding: floor -dddiv3011 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3012 divide 2 3 -> 0.6666666666666666 Inexact Rounded -dddiv3013 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3014 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: up -dddiv3021 divide 1 3 -> 0.3333333333333334 Inexact Rounded -dddiv3022 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3023 divide 1 99999 -> 0.00001000010000100002 Inexact Rounded -dddiv3024 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded - -rounding: down -dddiv3031 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3032 divide 2 3 -> 0.6666666666666666 Inexact Rounded -dddiv3033 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3034 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: half_up -dddiv3041 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3042 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3043 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3044 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: half_down -dddiv3051 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3052 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3053 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3054 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: half_even -dddiv3061 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3062 divide 2 3 -> 0.6666666666666667 Inexact Rounded -dddiv3063 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3064 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded - -rounding: 05up -dddiv3071 divide 1 3 -> 0.3333333333333333 Inexact Rounded -dddiv3072 divide 2 3 -> 0.6666666666666666 Inexact Rounded -dddiv3073 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded -dddiv3074 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded - --- random divide tests with result near 1 -rounding: half_even -dddiv4001 divide 3195385192916917 3195385192946695 -> 0.9999999999906809 Inexact Rounded -dddiv4002 divide 1393723067526993 1393723067519475 -> 1.000000000005394 Inexact Rounded -dddiv4003 divide 759985543702302 759985543674015 -> 1.000000000037220 Inexact Rounded -dddiv4004 divide 9579158456027302 9579158456036864 -> 0.9999999999990018 Inexact Rounded -dddiv4005 divide 7079398299143569 7079398299156904 -> 0.9999999999981164 Inexact Rounded -dddiv4006 divide 6636169255366598 6636169255336386 -> 1.000000000004553 Inexact Rounded -dddiv4007 divide 6964813971340090 6964813971321554 -> 1.000000000002661 Inexact Rounded -dddiv4008 divide 4182275225480784 4182275225454009 -> 1.000000000006402 Inexact Rounded -dddiv4009 divide 9228325124938029 9228325124918730 -> 1.000000000002091 Inexact Rounded -dddiv4010 divide 3428346338630192 3428346338609843 -> 1.000000000005936 Inexact Rounded -dddiv4011 divide 2143511550722893 2143511550751754 -> 0.9999999999865356 Inexact Rounded -dddiv4012 divide 1672732924396785 1672732924401811 -> 0.9999999999969953 Inexact Rounded -dddiv4013 divide 4190714611948216 4190714611948664 -> 0.9999999999998931 Inexact Rounded -dddiv4014 divide 3942254800848877 3942254800814556 -> 1.000000000008706 Inexact Rounded -dddiv4015 divide 2854459826952334 2854459826960762 -> 0.9999999999970474 Inexact Rounded -dddiv4016 divide 2853258953664731 2853258953684471 -> 0.9999999999930816 Inexact Rounded -dddiv4017 divide 9453512638125978 9453512638146425 -> 0.9999999999978371 Inexact Rounded -dddiv4018 divide 339476633940369 339476633912887 -> 1.000000000080954 Inexact Rounded -dddiv4019 divide 4542181492688467 4542181492697735 -> 0.9999999999979596 Inexact Rounded -dddiv4020 divide 7312600192399197 7312600192395424 -> 1.000000000000516 Inexact Rounded -dddiv4021 divide 1811674985570111 1811674985603935 -> 0.9999999999813300 Inexact Rounded -dddiv4022 divide 1706462639003481 1706462639017740 -> 0.9999999999916441 Inexact Rounded -dddiv4023 divide 6697052654940368 6697052654934110 -> 1.000000000000934 Inexact Rounded -dddiv4024 divide 5015283664277539 5015283664310719 -> 0.9999999999933842 Inexact Rounded -dddiv4025 divide 2359501561537464 2359501561502464 -> 1.000000000014834 Inexact Rounded -dddiv4026 divide 2669850227909157 2669850227901548 -> 1.000000000002850 Inexact Rounded -dddiv4027 divide 9329725546974648 9329725547002445 -> 0.9999999999970206 Inexact Rounded -dddiv4028 divide 3228562867071248 3228562867106206 -> 0.9999999999891723 Inexact Rounded -dddiv4029 divide 4862226644921175 4862226644909380 -> 1.000000000002426 Inexact Rounded -dddiv4030 divide 1022267997054529 1022267997071329 -> 0.9999999999835660 Inexact Rounded -dddiv4031 divide 1048777482023719 1048777482000948 -> 1.000000000021712 Inexact Rounded -dddiv4032 divide 9980113777337098 9980113777330539 -> 1.000000000000657 Inexact Rounded -dddiv4033 divide 7506839167963908 7506839167942901 -> 1.000000000002798 Inexact Rounded -dddiv4034 divide 231119751977860 231119751962453 -> 1.000000000066662 Inexact Rounded -dddiv4035 divide 4034903664762962 4034903664795526 -> 0.9999999999919294 Inexact Rounded -dddiv4036 divide 5700122152274696 5700122152251386 -> 1.000000000004089 Inexact Rounded -dddiv4037 divide 6869599590293110 6869599590293495 -> 0.9999999999999440 Inexact Rounded -dddiv4038 divide 5576281960092797 5576281960105579 -> 0.9999999999977078 Inexact Rounded -dddiv4039 divide 2304844888381318 2304844888353073 -> 1.000000000012255 Inexact Rounded -dddiv4040 divide 3265933651656452 3265933651682779 -> 0.9999999999919389 Inexact Rounded -dddiv4041 divide 5235714985079914 5235714985066131 -> 1.000000000002632 Inexact Rounded -dddiv4042 divide 5578481572827551 5578481572822945 -> 1.000000000000826 Inexact Rounded -dddiv4043 divide 4909616081396134 4909616081373076 -> 1.000000000004696 Inexact Rounded -dddiv4044 divide 636447224349537 636447224338757 -> 1.000000000016938 Inexact Rounded -dddiv4045 divide 1539373428396640 1539373428364727 -> 1.000000000020731 Inexact Rounded -dddiv4046 divide 2028786707377893 2028786707378866 -> 0.9999999999995204 Inexact Rounded -dddiv4047 divide 137643260486222 137643260487419 -> 0.9999999999913036 Inexact Rounded -dddiv4048 divide 247451519746765 247451519752267 -> 0.9999999999777653 Inexact Rounded -dddiv4049 divide 7877858475022054 7877858474999794 -> 1.000000000002826 Inexact Rounded -dddiv4050 divide 7333242694766258 7333242694744628 -> 1.000000000002950 Inexact Rounded -dddiv4051 divide 124051503698592 124051503699397 -> 0.9999999999935108 Inexact Rounded -dddiv4052 divide 8944737432385188 8944737432406860 -> 0.9999999999975771 Inexact Rounded -dddiv4053 divide 9883948923406874 9883948923424843 -> 0.9999999999981820 Inexact Rounded -dddiv4054 divide 6829178741654284 6829178741671973 -> 0.9999999999974098 Inexact Rounded -dddiv4055 divide 7342752479768122 7342752479793385 -> 0.9999999999965595 Inexact Rounded -dddiv4056 divide 8066426579008783 8066426578977563 -> 1.000000000003870 Inexact Rounded -dddiv4057 divide 8992775071383295 8992775071352712 -> 1.000000000003401 Inexact Rounded -dddiv4058 divide 5485011755545641 5485011755543611 -> 1.000000000000370 Inexact Rounded -dddiv4059 divide 5779983054353918 5779983054365300 -> 0.9999999999980308 Inexact Rounded -dddiv4060 divide 9502265102713774 9502265102735208 -> 0.9999999999977443 Inexact Rounded -dddiv4061 divide 2109558399130981 2109558399116281 -> 1.000000000006968 Inexact Rounded -dddiv4062 divide 5296182636350471 5296182636351521 -> 0.9999999999998017 Inexact Rounded -dddiv4063 divide 1440019225591883 1440019225601844 -> 0.9999999999930827 Inexact Rounded -dddiv4064 divide 8182110791881341 8182110791847174 -> 1.000000000004176 Inexact Rounded -dddiv4065 divide 489098235512060 489098235534516 -> 0.9999999999540869 Inexact Rounded -dddiv4066 divide 6475687084782038 6475687084756089 -> 1.000000000004007 Inexact Rounded -dddiv4067 divide 8094348555736948 8094348555759236 -> 0.9999999999972465 Inexact Rounded -dddiv4068 divide 1982766816291543 1982766816309463 -> 0.9999999999909621 Inexact Rounded -dddiv4069 divide 9277314300113251 9277314300084467 -> 1.000000000003103 Inexact Rounded -dddiv4070 divide 4335532959318934 4335532959293167 -> 1.000000000005943 Inexact Rounded -dddiv4071 divide 7767113032981348 7767113032968132 -> 1.000000000001702 Inexact Rounded -dddiv4072 divide 1578548053342868 1578548053370448 -> 0.9999999999825282 Inexact Rounded -dddiv4073 divide 3790420686666898 3790420686636315 -> 1.000000000008068 Inexact Rounded -dddiv4074 divide 871682421955147 871682421976441 -> 0.9999999999755714 Inexact Rounded -dddiv4075 divide 744141054479940 744141054512329 -> 0.9999999999564746 Inexact Rounded -dddiv4076 divide 8956824183670735 8956824183641741 -> 1.000000000003237 Inexact Rounded -dddiv4077 divide 8337291694485682 8337291694451193 -> 1.000000000004137 Inexact Rounded -dddiv4078 divide 4107775944683669 4107775944657097 -> 1.000000000006469 Inexact Rounded -dddiv4079 divide 8691900057964648 8691900057997555 -> 0.9999999999962141 Inexact Rounded -dddiv4080 divide 2229528520536462 2229528520502337 -> 1.000000000015306 Inexact Rounded -dddiv4081 divide 398442083774322 398442083746273 -> 1.000000000070397 Inexact Rounded -dddiv4082 divide 5319819776808759 5319819776838313 -> 0.9999999999944445 Inexact Rounded -dddiv4083 divide 7710491299066855 7710491299041858 -> 1.000000000003242 Inexact Rounded -dddiv4084 divide 9083231296087266 9083231296058160 -> 1.000000000003204 Inexact Rounded -dddiv4085 divide 3566873574904559 3566873574890328 -> 1.000000000003990 Inexact Rounded -dddiv4086 divide 596343290550525 596343290555614 -> 0.9999999999914663 Inexact Rounded -dddiv4087 divide 278227925093192 278227925068104 -> 1.000000000090171 Inexact Rounded -dddiv4088 divide 3292902958490649 3292902958519881 -> 0.9999999999911227 Inexact Rounded -dddiv4089 divide 5521871364245881 5521871364229536 -> 1.000000000002960 Inexact Rounded -dddiv4090 divide 2406505602883617 2406505602857997 -> 1.000000000010646 Inexact Rounded -dddiv4091 divide 7741146984869208 7741146984867255 -> 1.000000000000252 Inexact Rounded -dddiv4092 divide 4576041832414909 4576041832405102 -> 1.000000000002143 Inexact Rounded -dddiv4093 divide 9183756982878057 9183756982901934 -> 0.9999999999974001 Inexact Rounded -dddiv4094 divide 6215736513855159 6215736513870342 -> 0.9999999999975573 Inexact Rounded -dddiv4095 divide 248554968534533 248554968551417 -> 0.9999999999320714 Inexact Rounded -dddiv4096 divide 376314165668645 376314165659755 -> 1.000000000023624 Inexact Rounded -dddiv4097 divide 5513569249809718 5513569249808906 -> 1.000000000000147 Inexact Rounded -dddiv4098 divide 3367992242167904 3367992242156228 -> 1.000000000003467 Inexact Rounded -dddiv4099 divide 6134869538966967 6134869538985986 -> 0.9999999999968999 Inexact Rounded - --- Null tests -dddiv9998 divide 10 # -> NaN Invalid_operation -dddiv9999 divide # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddDivide.decTest -- decDouble division -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +dddiv001 divide 1 1 -> 1 +dddiv002 divide 2 1 -> 2 +dddiv003 divide 1 2 -> 0.5 +dddiv004 divide 2 2 -> 1 +dddiv005 divide 0 1 -> 0 +dddiv006 divide 0 2 -> 0 +dddiv007 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv008 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv009 divide 3 3 -> 1 + +dddiv010 divide 2.4 1 -> 2.4 +dddiv011 divide 2.4 -1 -> -2.4 +dddiv012 divide -2.4 1 -> -2.4 +dddiv013 divide -2.4 -1 -> 2.4 +dddiv014 divide 2.40 1 -> 2.40 +dddiv015 divide 2.400 1 -> 2.400 +dddiv016 divide 2.4 2 -> 1.2 +dddiv017 divide 2.400 2 -> 1.200 +dddiv018 divide 2. 2 -> 1 +dddiv019 divide 20 20 -> 1 + +dddiv020 divide 187 187 -> 1 +dddiv021 divide 5 2 -> 2.5 +dddiv022 divide 50 20 -> 2.5 +dddiv023 divide 500 200 -> 2.5 +dddiv024 divide 50.0 20.0 -> 2.5 +dddiv025 divide 5.00 2.00 -> 2.5 +dddiv026 divide 5 2.0 -> 2.5 +dddiv027 divide 5 2.000 -> 2.5 +dddiv028 divide 5 0.20 -> 25 +dddiv029 divide 5 0.200 -> 25 +dddiv030 divide 10 1 -> 10 +dddiv031 divide 100 1 -> 100 +dddiv032 divide 1000 1 -> 1000 +dddiv033 divide 1000 100 -> 10 + +dddiv035 divide 1 2 -> 0.5 +dddiv036 divide 1 4 -> 0.25 +dddiv037 divide 1 8 -> 0.125 +dddiv038 divide 1 16 -> 0.0625 +dddiv039 divide 1 32 -> 0.03125 +dddiv040 divide 1 64 -> 0.015625 +dddiv041 divide 1 -2 -> -0.5 +dddiv042 divide 1 -4 -> -0.25 +dddiv043 divide 1 -8 -> -0.125 +dddiv044 divide 1 -16 -> -0.0625 +dddiv045 divide 1 -32 -> -0.03125 +dddiv046 divide 1 -64 -> -0.015625 +dddiv047 divide -1 2 -> -0.5 +dddiv048 divide -1 4 -> -0.25 +dddiv049 divide -1 8 -> -0.125 +dddiv050 divide -1 16 -> -0.0625 +dddiv051 divide -1 32 -> -0.03125 +dddiv052 divide -1 64 -> -0.015625 +dddiv053 divide -1 -2 -> 0.5 +dddiv054 divide -1 -4 -> 0.25 +dddiv055 divide -1 -8 -> 0.125 +dddiv056 divide -1 -16 -> 0.0625 +dddiv057 divide -1 -32 -> 0.03125 +dddiv058 divide -1 -64 -> 0.015625 + +-- bcdTime +dddiv060 divide 1 7 -> 0.1428571428571429 Inexact Rounded +dddiv061 divide 1.2345678 1.9876543 -> 0.6211179680490717 Inexact Rounded + +-- 1234567890123456 +dddiv071 divide 9999999999999999 1 -> 9999999999999999 +dddiv072 divide 999999999999999 1 -> 999999999999999 +dddiv073 divide 99999999999999 1 -> 99999999999999 +dddiv074 divide 9999999999999 1 -> 9999999999999 +dddiv075 divide 999999999999 1 -> 999999999999 +dddiv076 divide 99999999999 1 -> 99999999999 +dddiv077 divide 9999999999 1 -> 9999999999 +dddiv078 divide 999999999 1 -> 999999999 +dddiv079 divide 99999999 1 -> 99999999 +dddiv080 divide 9999999 1 -> 9999999 +dddiv081 divide 999999 1 -> 999999 +dddiv082 divide 99999 1 -> 99999 +dddiv083 divide 9999 1 -> 9999 +dddiv084 divide 999 1 -> 999 +dddiv085 divide 99 1 -> 99 +dddiv086 divide 9 1 -> 9 + +dddiv090 divide 0. 1 -> 0 +dddiv091 divide .0 1 -> 0.0 +dddiv092 divide 0.00 1 -> 0.00 +dddiv093 divide 0.00E+9 1 -> 0E+7 +dddiv094 divide 0.0000E-50 1 -> 0E-54 + +dddiv095 divide 1 1E-8 -> 1E+8 +dddiv096 divide 1 1E-9 -> 1E+9 +dddiv097 divide 1 1E-10 -> 1E+10 +dddiv098 divide 1 1E-11 -> 1E+11 +dddiv099 divide 1 1E-12 -> 1E+12 + +dddiv100 divide 1 1 -> 1 +dddiv101 divide 1 2 -> 0.5 +dddiv102 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv103 divide 1 4 -> 0.25 +dddiv104 divide 1 5 -> 0.2 +dddiv105 divide 1 6 -> 0.1666666666666667 Inexact Rounded +dddiv106 divide 1 7 -> 0.1428571428571429 Inexact Rounded +dddiv107 divide 1 8 -> 0.125 +dddiv108 divide 1 9 -> 0.1111111111111111 Inexact Rounded +dddiv109 divide 1 10 -> 0.1 +dddiv110 divide 1 1 -> 1 +dddiv111 divide 2 1 -> 2 +dddiv112 divide 3 1 -> 3 +dddiv113 divide 4 1 -> 4 +dddiv114 divide 5 1 -> 5 +dddiv115 divide 6 1 -> 6 +dddiv116 divide 7 1 -> 7 +dddiv117 divide 8 1 -> 8 +dddiv118 divide 9 1 -> 9 +dddiv119 divide 10 1 -> 10 + +dddiv120 divide 3E+1 0.001 -> 3E+4 +dddiv121 divide 2.200 2 -> 1.100 + +dddiv130 divide 12345 4.999 -> 2469.493898779756 Inexact Rounded +dddiv131 divide 12345 4.99 -> 2473.947895791583 Inexact Rounded +dddiv132 divide 12345 4.9 -> 2519.387755102041 Inexact Rounded +dddiv133 divide 12345 5 -> 2469 +dddiv134 divide 12345 5.1 -> 2420.588235294118 Inexact Rounded +dddiv135 divide 12345 5.01 -> 2464.071856287425 Inexact Rounded +dddiv136 divide 12345 5.001 -> 2468.506298740252 Inexact Rounded + +-- test possibly imprecise results +dddiv220 divide 391 597 -> 0.6549413735343384 Inexact Rounded +dddiv221 divide 391 -597 -> -0.6549413735343384 Inexact Rounded +dddiv222 divide -391 597 -> -0.6549413735343384 Inexact Rounded +dddiv223 divide -391 -597 -> 0.6549413735343384 Inexact Rounded + +-- test some cases that are close to exponent overflow, some with coefficient padding +dddiv270 divide 1 1e384 -> 1E-384 Subnormal +dddiv271 divide 1 0.9e384 -> 1.11111111111111E-384 Rounded Inexact Subnormal Underflow +dddiv272 divide 1 0.99e384 -> 1.01010101010101E-384 Rounded Inexact Subnormal Underflow +dddiv273 divide 1 0.9999999999999999e384 -> 1.00000000000000E-384 Rounded Inexact Subnormal Underflow +dddiv274 divide 9e384 1 -> 9.000000000000000E+384 Clamped +dddiv275 divide 9.9e384 1 -> 9.900000000000000E+384 Clamped +dddiv276 divide 9.99e384 1 -> 9.990000000000000E+384 Clamped +dddiv277 divide 9.9999999999999e384 1 -> 9.999999999999900E+384 Clamped +dddiv278 divide 9.99999999999999e384 1 -> 9.999999999999990E+384 Clamped +dddiv279 divide 9.999999999999999e384 1 -> 9.999999999999999E+384 + +dddiv285 divide 9.9e384 1.1 -> 9.000000000000000E+384 Clamped +dddiv286 divide 9.99e384 1.1 -> 9.081818181818182E+384 Inexact Rounded +dddiv287 divide 9.9999999999999e384 1.1 -> 9.090909090909000E+384 Clamped +dddiv288 divide 9.99999999999999e384 1.1 -> 9.090909090909082E+384 Inexact Rounded +dddiv289 divide 9.999999999999999e384 1.1 -> 9.090909090909090E+384 Clamped + + +-- Divide into 0 tests +dddiv301 divide 0 7 -> 0 +dddiv302 divide 0 7E-5 -> 0E+5 +dddiv303 divide 0 7E-1 -> 0E+1 +dddiv304 divide 0 7E+1 -> 0.0 +dddiv305 divide 0 7E+5 -> 0.00000 +dddiv306 divide 0 7E+6 -> 0.000000 +dddiv307 divide 0 7E+7 -> 0E-7 +dddiv308 divide 0 70E-5 -> 0E+5 +dddiv309 divide 0 70E-1 -> 0E+1 +dddiv310 divide 0 70E+0 -> 0 +dddiv311 divide 0 70E+1 -> 0.0 +dddiv312 divide 0 70E+5 -> 0.00000 +dddiv313 divide 0 70E+6 -> 0.000000 +dddiv314 divide 0 70E+7 -> 0E-7 +dddiv315 divide 0 700E-5 -> 0E+5 +dddiv316 divide 0 700E-1 -> 0E+1 +dddiv317 divide 0 700E+0 -> 0 +dddiv318 divide 0 700E+1 -> 0.0 +dddiv319 divide 0 700E+5 -> 0.00000 +dddiv320 divide 0 700E+6 -> 0.000000 +dddiv321 divide 0 700E+7 -> 0E-7 +dddiv322 divide 0 700E+77 -> 0E-77 + +dddiv331 divide 0E-3 7E-5 -> 0E+2 +dddiv332 divide 0E-3 7E-1 -> 0.00 +dddiv333 divide 0E-3 7E+1 -> 0.0000 +dddiv334 divide 0E-3 7E+5 -> 0E-8 +dddiv335 divide 0E-1 7E-5 -> 0E+4 +dddiv336 divide 0E-1 7E-1 -> 0 +dddiv337 divide 0E-1 7E+1 -> 0.00 +dddiv338 divide 0E-1 7E+5 -> 0.000000 +dddiv339 divide 0E+1 7E-5 -> 0E+6 +dddiv340 divide 0E+1 7E-1 -> 0E+2 +dddiv341 divide 0E+1 7E+1 -> 0 +dddiv342 divide 0E+1 7E+5 -> 0.0000 +dddiv343 divide 0E+3 7E-5 -> 0E+8 +dddiv344 divide 0E+3 7E-1 -> 0E+4 +dddiv345 divide 0E+3 7E+1 -> 0E+2 +dddiv346 divide 0E+3 7E+5 -> 0.00 + +-- These were 'input rounding' +dddiv441 divide 12345678000 1 -> 12345678000 +dddiv442 divide 1 12345678000 -> 8.100000664200054E-11 Inexact Rounded +dddiv443 divide 1234567800 1 -> 1234567800 +dddiv444 divide 1 1234567800 -> 8.100000664200054E-10 Inexact Rounded +dddiv445 divide 1234567890 1 -> 1234567890 +dddiv446 divide 1 1234567890 -> 8.100000073710001E-10 Inexact Rounded +dddiv447 divide 1234567891 1 -> 1234567891 +dddiv448 divide 1 1234567891 -> 8.100000067149001E-10 Inexact Rounded +dddiv449 divide 12345678901 1 -> 12345678901 +dddiv450 divide 1 12345678901 -> 8.100000073053901E-11 Inexact Rounded +dddiv451 divide 1234567896 1 -> 1234567896 +dddiv452 divide 1 1234567896 -> 8.100000034344000E-10 Inexact Rounded + +-- high-lows +dddiv453 divide 1e+1 1 -> 1E+1 +dddiv454 divide 1e+1 1.0 -> 1E+1 +dddiv455 divide 1e+1 1.00 -> 1E+1 +dddiv456 divide 1e+2 2 -> 5E+1 +dddiv457 divide 1e+2 2.0 -> 5E+1 +dddiv458 divide 1e+2 2.00 -> 5E+1 + +-- some from IEEE discussions +dddiv460 divide 3e0 2e0 -> 1.5 +dddiv461 divide 30e-1 2e0 -> 1.5 +dddiv462 divide 300e-2 2e0 -> 1.50 +dddiv464 divide 3000e-3 2e0 -> 1.500 +dddiv465 divide 3e0 20e-1 -> 1.5 +dddiv466 divide 30e-1 20e-1 -> 1.5 +dddiv467 divide 300e-2 20e-1 -> 1.5 +dddiv468 divide 3000e-3 20e-1 -> 1.50 +dddiv469 divide 3e0 200e-2 -> 1.5 +dddiv470 divide 30e-1 200e-2 -> 1.5 +dddiv471 divide 300e-2 200e-2 -> 1.5 +dddiv472 divide 3000e-3 200e-2 -> 1.5 +dddiv473 divide 3e0 2000e-3 -> 1.5 +dddiv474 divide 30e-1 2000e-3 -> 1.5 +dddiv475 divide 300e-2 2000e-3 -> 1.5 +dddiv476 divide 3000e-3 2000e-3 -> 1.5 + +-- some reciprocals +dddiv480 divide 1 1.0E+33 -> 1E-33 +dddiv481 divide 1 10E+33 -> 1E-34 +dddiv482 divide 1 1.0E-33 -> 1E+33 +dddiv483 divide 1 10E-33 -> 1E+32 + +-- RMS discussion table +dddiv484 divide 0e5 1e3 -> 0E+2 +dddiv485 divide 0e5 2e3 -> 0E+2 +dddiv486 divide 0e5 10e2 -> 0E+3 +dddiv487 divide 0e5 20e2 -> 0E+3 +dddiv488 divide 0e5 100e1 -> 0E+4 +dddiv489 divide 0e5 200e1 -> 0E+4 + +dddiv491 divide 1e5 1e3 -> 1E+2 +dddiv492 divide 1e5 2e3 -> 5E+1 +dddiv493 divide 1e5 10e2 -> 1E+2 +dddiv494 divide 1e5 20e2 -> 5E+1 +dddiv495 divide 1e5 100e1 -> 1E+2 +dddiv496 divide 1e5 200e1 -> 5E+1 + +-- tryzeros cases +rounding: half_up +dddiv497 divide 0E+380 1000E-13 -> 0E+369 Clamped +dddiv498 divide 0E-390 1000E+13 -> 0E-398 Clamped + +rounding: half_up + +-- focus on trailing zeros issues +dddiv500 divide 1 9.9 -> 0.1010101010101010 Inexact Rounded +dddiv501 divide 1 9.09 -> 0.1100110011001100 Inexact Rounded +dddiv502 divide 1 9.009 -> 0.1110001110001110 Inexact Rounded + +dddiv511 divide 1 2 -> 0.5 +dddiv512 divide 1.0 2 -> 0.5 +dddiv513 divide 1.00 2 -> 0.50 +dddiv514 divide 1.000 2 -> 0.500 +dddiv515 divide 1.0000 2 -> 0.5000 +dddiv516 divide 1.00000 2 -> 0.50000 +dddiv517 divide 1.000000 2 -> 0.500000 +dddiv518 divide 1.0000000 2 -> 0.5000000 +dddiv519 divide 1.00 2.00 -> 0.5 + +dddiv521 divide 2 1 -> 2 +dddiv522 divide 2 1.0 -> 2 +dddiv523 divide 2 1.00 -> 2 +dddiv524 divide 2 1.000 -> 2 +dddiv525 divide 2 1.0000 -> 2 +dddiv526 divide 2 1.00000 -> 2 +dddiv527 divide 2 1.000000 -> 2 +dddiv528 divide 2 1.0000000 -> 2 +dddiv529 divide 2.00 1.00 -> 2 + +dddiv530 divide 2.40 2 -> 1.20 +dddiv531 divide 2.40 4 -> 0.60 +dddiv532 divide 2.40 10 -> 0.24 +dddiv533 divide 2.40 2.0 -> 1.2 +dddiv534 divide 2.40 4.0 -> 0.6 +dddiv535 divide 2.40 10.0 -> 0.24 +dddiv536 divide 2.40 2.00 -> 1.2 +dddiv537 divide 2.40 4.00 -> 0.6 +dddiv538 divide 2.40 10.00 -> 0.24 +dddiv539 divide 0.9 0.1 -> 9 +dddiv540 divide 0.9 0.01 -> 9E+1 +dddiv541 divide 0.9 0.001 -> 9E+2 +dddiv542 divide 5 2 -> 2.5 +dddiv543 divide 5 2.0 -> 2.5 +dddiv544 divide 5 2.00 -> 2.5 +dddiv545 divide 5 20 -> 0.25 +dddiv546 divide 5 20.0 -> 0.25 +dddiv547 divide 2.400 2 -> 1.200 +dddiv548 divide 2.400 2.0 -> 1.20 +dddiv549 divide 2.400 2.400 -> 1 + +dddiv550 divide 240 1 -> 240 +dddiv551 divide 240 10 -> 24 +dddiv552 divide 240 100 -> 2.4 +dddiv553 divide 240 1000 -> 0.24 +dddiv554 divide 2400 1 -> 2400 +dddiv555 divide 2400 10 -> 240 +dddiv556 divide 2400 100 -> 24 +dddiv557 divide 2400 1000 -> 2.4 + +-- +ve exponent +dddiv600 divide 2.4E+9 2 -> 1.2E+9 +dddiv601 divide 2.40E+9 2 -> 1.20E+9 +dddiv602 divide 2.400E+9 2 -> 1.200E+9 +dddiv603 divide 2.4000E+9 2 -> 1.2000E+9 +dddiv604 divide 24E+8 2 -> 1.2E+9 +dddiv605 divide 240E+7 2 -> 1.20E+9 +dddiv606 divide 2400E+6 2 -> 1.200E+9 +dddiv607 divide 24000E+5 2 -> 1.2000E+9 + +-- more zeros, etc. +dddiv731 divide 5.00 1E-3 -> 5.00E+3 +dddiv732 divide 00.00 0.000 -> NaN Division_undefined +dddiv733 divide 00.00 0E-3 -> NaN Division_undefined +dddiv734 divide 0 -0 -> NaN Division_undefined +dddiv735 divide -0 0 -> NaN Division_undefined +dddiv736 divide -0 -0 -> NaN Division_undefined + +dddiv741 divide 0 -1 -> -0 +dddiv742 divide -0 -1 -> 0 +dddiv743 divide 0 1 -> 0 +dddiv744 divide -0 1 -> -0 +dddiv745 divide -1 0 -> -Infinity Division_by_zero +dddiv746 divide -1 -0 -> Infinity Division_by_zero +dddiv747 divide 1 0 -> Infinity Division_by_zero +dddiv748 divide 1 -0 -> -Infinity Division_by_zero + +dddiv751 divide 0.0 -1 -> -0.0 +dddiv752 divide -0.0 -1 -> 0.0 +dddiv753 divide 0.0 1 -> 0.0 +dddiv754 divide -0.0 1 -> -0.0 +dddiv755 divide -1.0 0 -> -Infinity Division_by_zero +dddiv756 divide -1.0 -0 -> Infinity Division_by_zero +dddiv757 divide 1.0 0 -> Infinity Division_by_zero +dddiv758 divide 1.0 -0 -> -Infinity Division_by_zero + +dddiv761 divide 0 -1.0 -> -0E+1 +dddiv762 divide -0 -1.0 -> 0E+1 +dddiv763 divide 0 1.0 -> 0E+1 +dddiv764 divide -0 1.0 -> -0E+1 +dddiv765 divide -1 0.0 -> -Infinity Division_by_zero +dddiv766 divide -1 -0.0 -> Infinity Division_by_zero +dddiv767 divide 1 0.0 -> Infinity Division_by_zero +dddiv768 divide 1 -0.0 -> -Infinity Division_by_zero + +dddiv771 divide 0.0 -1.0 -> -0 +dddiv772 divide -0.0 -1.0 -> 0 +dddiv773 divide 0.0 1.0 -> 0 +dddiv774 divide -0.0 1.0 -> -0 +dddiv775 divide -1.0 0.0 -> -Infinity Division_by_zero +dddiv776 divide -1.0 -0.0 -> Infinity Division_by_zero +dddiv777 divide 1.0 0.0 -> Infinity Division_by_zero +dddiv778 divide 1.0 -0.0 -> -Infinity Division_by_zero + +-- Specials +dddiv780 divide Inf -Inf -> NaN Invalid_operation +dddiv781 divide Inf -1000 -> -Infinity +dddiv782 divide Inf -1 -> -Infinity +dddiv783 divide Inf -0 -> -Infinity +dddiv784 divide Inf 0 -> Infinity +dddiv785 divide Inf 1 -> Infinity +dddiv786 divide Inf 1000 -> Infinity +dddiv787 divide Inf Inf -> NaN Invalid_operation +dddiv788 divide -1000 Inf -> -0E-398 Clamped +dddiv789 divide -Inf Inf -> NaN Invalid_operation +dddiv790 divide -1 Inf -> -0E-398 Clamped +dddiv791 divide -0 Inf -> -0E-398 Clamped +dddiv792 divide 0 Inf -> 0E-398 Clamped +dddiv793 divide 1 Inf -> 0E-398 Clamped +dddiv794 divide 1000 Inf -> 0E-398 Clamped +dddiv795 divide Inf Inf -> NaN Invalid_operation + +dddiv800 divide -Inf -Inf -> NaN Invalid_operation +dddiv801 divide -Inf -1000 -> Infinity +dddiv802 divide -Inf -1 -> Infinity +dddiv803 divide -Inf -0 -> Infinity +dddiv804 divide -Inf 0 -> -Infinity +dddiv805 divide -Inf 1 -> -Infinity +dddiv806 divide -Inf 1000 -> -Infinity +dddiv807 divide -Inf Inf -> NaN Invalid_operation +dddiv808 divide -1000 Inf -> -0E-398 Clamped +dddiv809 divide -Inf -Inf -> NaN Invalid_operation +dddiv810 divide -1 -Inf -> 0E-398 Clamped +dddiv811 divide -0 -Inf -> 0E-398 Clamped +dddiv812 divide 0 -Inf -> -0E-398 Clamped +dddiv813 divide 1 -Inf -> -0E-398 Clamped +dddiv814 divide 1000 -Inf -> -0E-398 Clamped +dddiv815 divide Inf -Inf -> NaN Invalid_operation + +dddiv821 divide NaN -Inf -> NaN +dddiv822 divide NaN -1000 -> NaN +dddiv823 divide NaN -1 -> NaN +dddiv824 divide NaN -0 -> NaN +dddiv825 divide NaN 0 -> NaN +dddiv826 divide NaN 1 -> NaN +dddiv827 divide NaN 1000 -> NaN +dddiv828 divide NaN Inf -> NaN +dddiv829 divide NaN NaN -> NaN +dddiv830 divide -Inf NaN -> NaN +dddiv831 divide -1000 NaN -> NaN +dddiv832 divide -1 NaN -> NaN +dddiv833 divide -0 NaN -> NaN +dddiv834 divide 0 NaN -> NaN +dddiv835 divide 1 NaN -> NaN +dddiv836 divide 1000 NaN -> NaN +dddiv837 divide Inf NaN -> NaN + +dddiv841 divide sNaN -Inf -> NaN Invalid_operation +dddiv842 divide sNaN -1000 -> NaN Invalid_operation +dddiv843 divide sNaN -1 -> NaN Invalid_operation +dddiv844 divide sNaN -0 -> NaN Invalid_operation +dddiv845 divide sNaN 0 -> NaN Invalid_operation +dddiv846 divide sNaN 1 -> NaN Invalid_operation +dddiv847 divide sNaN 1000 -> NaN Invalid_operation +dddiv848 divide sNaN NaN -> NaN Invalid_operation +dddiv849 divide sNaN sNaN -> NaN Invalid_operation +dddiv850 divide NaN sNaN -> NaN Invalid_operation +dddiv851 divide -Inf sNaN -> NaN Invalid_operation +dddiv852 divide -1000 sNaN -> NaN Invalid_operation +dddiv853 divide -1 sNaN -> NaN Invalid_operation +dddiv854 divide -0 sNaN -> NaN Invalid_operation +dddiv855 divide 0 sNaN -> NaN Invalid_operation +dddiv856 divide 1 sNaN -> NaN Invalid_operation +dddiv857 divide 1000 sNaN -> NaN Invalid_operation +dddiv858 divide Inf sNaN -> NaN Invalid_operation +dddiv859 divide NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dddiv861 divide NaN9 -Inf -> NaN9 +dddiv862 divide NaN8 1000 -> NaN8 +dddiv863 divide NaN7 Inf -> NaN7 +dddiv864 divide NaN6 NaN5 -> NaN6 +dddiv865 divide -Inf NaN4 -> NaN4 +dddiv866 divide -1000 NaN3 -> NaN3 +dddiv867 divide Inf NaN2 -> NaN2 + +dddiv871 divide sNaN99 -Inf -> NaN99 Invalid_operation +dddiv872 divide sNaN98 -1 -> NaN98 Invalid_operation +dddiv873 divide sNaN97 NaN -> NaN97 Invalid_operation +dddiv874 divide sNaN96 sNaN94 -> NaN96 Invalid_operation +dddiv875 divide NaN95 sNaN93 -> NaN93 Invalid_operation +dddiv876 divide -Inf sNaN92 -> NaN92 Invalid_operation +dddiv877 divide 0 sNaN91 -> NaN91 Invalid_operation +dddiv878 divide Inf sNaN90 -> NaN90 Invalid_operation +dddiv879 divide NaN sNaN89 -> NaN89 Invalid_operation + +dddiv881 divide -NaN9 -Inf -> -NaN9 +dddiv882 divide -NaN8 1000 -> -NaN8 +dddiv883 divide -NaN7 Inf -> -NaN7 +dddiv884 divide -NaN6 -NaN5 -> -NaN6 +dddiv885 divide -Inf -NaN4 -> -NaN4 +dddiv886 divide -1000 -NaN3 -> -NaN3 +dddiv887 divide Inf -NaN2 -> -NaN2 + +dddiv891 divide -sNaN99 -Inf -> -NaN99 Invalid_operation +dddiv892 divide -sNaN98 -1 -> -NaN98 Invalid_operation +dddiv893 divide -sNaN97 NaN -> -NaN97 Invalid_operation +dddiv894 divide -sNaN96 -sNaN94 -> -NaN96 Invalid_operation +dddiv895 divide -NaN95 -sNaN93 -> -NaN93 Invalid_operation +dddiv896 divide -Inf -sNaN92 -> -NaN92 Invalid_operation +dddiv897 divide 0 -sNaN91 -> -NaN91 Invalid_operation +dddiv898 divide Inf -sNaN90 -> -NaN90 Invalid_operation +dddiv899 divide -NaN -sNaN89 -> -NaN89 Invalid_operation + +-- Various flavours of divide by 0 +dddiv901 divide 0 0 -> NaN Division_undefined +dddiv902 divide 0.0E5 0 -> NaN Division_undefined +dddiv903 divide 0.000 0 -> NaN Division_undefined +dddiv904 divide 0.0001 0 -> Infinity Division_by_zero +dddiv905 divide 0.01 0 -> Infinity Division_by_zero +dddiv906 divide 0.1 0 -> Infinity Division_by_zero +dddiv907 divide 1 0 -> Infinity Division_by_zero +dddiv908 divide 1 0.0 -> Infinity Division_by_zero +dddiv909 divide 10 0.0 -> Infinity Division_by_zero +dddiv910 divide 1E+100 0.0 -> Infinity Division_by_zero +dddiv911 divide 1E+100 0 -> Infinity Division_by_zero + +dddiv921 divide -0.0001 0 -> -Infinity Division_by_zero +dddiv922 divide -0.01 0 -> -Infinity Division_by_zero +dddiv923 divide -0.1 0 -> -Infinity Division_by_zero +dddiv924 divide -1 0 -> -Infinity Division_by_zero +dddiv925 divide -1 0.0 -> -Infinity Division_by_zero +dddiv926 divide -10 0.0 -> -Infinity Division_by_zero +dddiv927 divide -1E+100 0.0 -> -Infinity Division_by_zero +dddiv928 divide -1E+100 0 -> -Infinity Division_by_zero + +dddiv931 divide 0.0001 -0 -> -Infinity Division_by_zero +dddiv932 divide 0.01 -0 -> -Infinity Division_by_zero +dddiv933 divide 0.1 -0 -> -Infinity Division_by_zero +dddiv934 divide 1 -0 -> -Infinity Division_by_zero +dddiv935 divide 1 -0.0 -> -Infinity Division_by_zero +dddiv936 divide 10 -0.0 -> -Infinity Division_by_zero +dddiv937 divide 1E+100 -0.0 -> -Infinity Division_by_zero +dddiv938 divide 1E+100 -0 -> -Infinity Division_by_zero + +dddiv941 divide -0.0001 -0 -> Infinity Division_by_zero +dddiv942 divide -0.01 -0 -> Infinity Division_by_zero +dddiv943 divide -0.1 -0 -> Infinity Division_by_zero +dddiv944 divide -1 -0 -> Infinity Division_by_zero +dddiv945 divide -1 -0.0 -> Infinity Division_by_zero +dddiv946 divide -10 -0.0 -> Infinity Division_by_zero +dddiv947 divide -1E+100 -0.0 -> Infinity Division_by_zero +dddiv948 divide -1E+100 -0 -> Infinity Division_by_zero + +-- Examples from SQL proposal (Krishna Kulkarni) +dddiv1021 divide 1E0 1E0 -> 1 +dddiv1022 divide 1E0 2E0 -> 0.5 +dddiv1023 divide 1E0 3E0 -> 0.3333333333333333 Inexact Rounded +dddiv1024 divide 100E-2 1000E-3 -> 1 +dddiv1025 divide 24E-1 2E0 -> 1.2 +dddiv1026 divide 2400E-3 2E0 -> 1.200 +dddiv1027 divide 5E0 2E0 -> 2.5 +dddiv1028 divide 5E0 20E-1 -> 2.5 +dddiv1029 divide 5E0 2000E-3 -> 2.5 +dddiv1030 divide 5E0 2E-1 -> 25 +dddiv1031 divide 5E0 20E-2 -> 25 +dddiv1032 divide 480E-2 3E0 -> 1.60 +dddiv1033 divide 47E-1 2E0 -> 2.35 + +-- ECMAScript bad examples +rounding: half_down +dddiv1040 divide 5 9 -> 0.5555555555555556 Inexact Rounded +rounding: half_even +dddiv1041 divide 6 11 -> 0.5454545454545455 Inexact Rounded + +-- overflow and underflow tests .. note subnormal results +-- signs +dddiv1051 divide 1e+277 1e-311 -> Infinity Overflow Inexact Rounded +dddiv1052 divide 1e+277 -1e-311 -> -Infinity Overflow Inexact Rounded +dddiv1053 divide -1e+277 1e-311 -> -Infinity Overflow Inexact Rounded +dddiv1054 divide -1e+277 -1e-311 -> Infinity Overflow Inexact Rounded +dddiv1055 divide 1e-277 1e+311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1056 divide 1e-277 -1e+311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1057 divide -1e-277 1e+311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1058 divide -1e-277 -1e+311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dddiv1060 divide 1e-291 1e+101 -> 1E-392 Subnormal +dddiv1061 divide 1e-291 1e+102 -> 1E-393 Subnormal +dddiv1062 divide 1e-291 1e+103 -> 1E-394 Subnormal +dddiv1063 divide 1e-291 1e+104 -> 1E-395 Subnormal +dddiv1064 divide 1e-291 1e+105 -> 1E-396 Subnormal +dddiv1065 divide 1e-291 1e+106 -> 1E-397 Subnormal +dddiv1066 divide 1e-291 1e+107 -> 1E-398 Subnormal +dddiv1067 divide 1e-291 1e+108 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1068 divide 1e-291 1e+109 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1069 divide 1e-291 1e+110 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +dddiv1070 divide 1e+60 1e-321 -> 1.000000000000E+381 Clamped +dddiv1071 divide 1e+60 1e-322 -> 1.0000000000000E+382 Clamped +dddiv1072 divide 1e+60 1e-323 -> 1.00000000000000E+383 Clamped +dddiv1073 divide 1e+60 1e-324 -> 1.000000000000000E+384 Clamped +dddiv1074 divide 1e+60 1e-325 -> Infinity Overflow Inexact Rounded +dddiv1075 divide 1e+60 1e-326 -> Infinity Overflow Inexact Rounded +dddiv1076 divide 1e+60 1e-327 -> Infinity Overflow Inexact Rounded +dddiv1077 divide 1e+60 1e-328 -> Infinity Overflow Inexact Rounded +dddiv1078 divide 1e+60 1e-329 -> Infinity Overflow Inexact Rounded +dddiv1079 divide 1e+60 1e-330 -> Infinity Overflow Inexact Rounded + +dddiv1101 divide 1.0000E-394 1 -> 1.0000E-394 Subnormal +dddiv1102 divide 1.000E-394 1e+1 -> 1.000E-395 Subnormal +dddiv1103 divide 1.00E-394 1e+2 -> 1.00E-396 Subnormal +dddiv1104 divide 1.0E-394 1e+3 -> 1.0E-397 Subnormal +dddiv1105 divide 1.0E-394 1e+4 -> 1E-398 Subnormal Rounded +dddiv1106 divide 1.3E-394 1e+4 -> 1E-398 Underflow Subnormal Inexact Rounded +dddiv1107 divide 1.5E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1108 divide 1.7E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1109 divide 2.3E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1110 divide 2.5E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1111 divide 2.7E-394 1e+4 -> 3E-398 Underflow Subnormal Inexact Rounded +dddiv1112 divide 1.49E-394 1e+4 -> 1E-398 Underflow Subnormal Inexact Rounded +dddiv1113 divide 1.50E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1114 divide 1.51E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1115 divide 2.49E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1116 divide 2.50E-394 1e+4 -> 2E-398 Underflow Subnormal Inexact Rounded +dddiv1117 divide 2.51E-394 1e+4 -> 3E-398 Underflow Subnormal Inexact Rounded + +dddiv1118 divide 1E-394 1e+4 -> 1E-398 Subnormal +dddiv1119 divide 3E-394 1e+5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1120 divide 5E-394 1e+5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1121 divide 7E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded +dddiv1122 divide 9E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded +dddiv1123 divide 9.9E-394 1e+5 -> 1E-398 Underflow Subnormal Inexact Rounded + +dddiv1124 divide 1E-394 -1e+4 -> -1E-398 Subnormal +dddiv1125 divide 3E-394 -1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1126 divide -5E-394 1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1127 divide 7E-394 -1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded +dddiv1128 divide -9E-394 1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded +dddiv1129 divide 9.9E-394 -1e+5 -> -1E-398 Underflow Subnormal Inexact Rounded +dddiv1130 divide 3.0E-394 -1e+5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped + +dddiv1131 divide 1.0E-199 1e+200 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +dddiv1132 divide 1.0E-199 1e+199 -> 1E-398 Subnormal Rounded +dddiv1133 divide 1.0E-199 1e+198 -> 1.0E-397 Subnormal +dddiv1134 divide 2.0E-199 2e+198 -> 1.0E-397 Subnormal +dddiv1135 divide 4.0E-199 4e+198 -> 1.0E-397 Subnormal +dddiv1136 divide 10.0E-199 10e+198 -> 1.0E-397 Subnormal +dddiv1137 divide 30.0E-199 30e+198 -> 1.0E-397 Subnormal + +-- randoms +dddiv2010 divide -3.303226714900711E-35 8.796578842713183E+73 -> -3.755126594058783E-109 Inexact Rounded +dddiv2011 divide 933153327821073.6 68782181090246.25 -> 13.56678885475763 Inexact Rounded +dddiv2012 divide 5.04752436057906E-72 -8.179481771238642E+64 -> -6.170958627632835E-137 Inexact Rounded +dddiv2013 divide -3707613309582318 3394911196503.048 -> -1092.109070010836 Inexact Rounded +dddiv2014 divide 99689.0555190461 -4.735208553891464 -> -21052.72753765411 Inexact Rounded +dddiv2015 divide -1447915775613329 269750797.8184875 -> -5367605.164925653 Inexact Rounded +dddiv2016 divide -9.394881304225258E-19 -830585.0252671636 -> 1.131116143251358E-24 Inexact Rounded +dddiv2017 divide -1.056283432738934 88.58754555124013 -> -0.01192361100159352 Inexact Rounded +dddiv2018 divide 5763220933343.081 689089567025052.1 -> 0.008363529516524456 Inexact Rounded +dddiv2019 divide 873819.122103216 9.740612494523300E-49 -> 8.970884763093948E+53 Inexact Rounded +dddiv2020 divide 8022914.838533576 6178.566801742713 -> 1298.507420243583 Inexact Rounded +dddiv2021 divide 203982.7605650363 -2158.283639053435 -> -94.51156320422168 Inexact Rounded +dddiv2022 divide 803.6310547013030 7101143795399.238 -> 1.131692411611166E-10 Inexact Rounded +dddiv2023 divide 9.251697842123399E-82 -1.342350220606119E-7 -> -6.892163982321936E-75 Inexact Rounded +dddiv2024 divide -1.980600645637992E-53 -5.474262753214457E+77 -> 3.618022617703168E-131 Inexact Rounded +dddiv2025 divide -210.0322996351690 -8.580951835872843E+80 -> 2.447657365434971E-79 Inexact Rounded +dddiv2026 divide -1.821980314020370E+85 -3.018915267138165 -> 6.035215144503042E+84 Inexact Rounded +dddiv2027 divide -772264503601.1047 5.158258271408988E-86 -> -1.497141986630614E+97 Inexact Rounded +dddiv2028 divide -767.0532415847106 2.700027228028939E-59 -> -2.840909282772941E+61 Inexact Rounded +dddiv2029 divide 496724.8548250093 7.32700588163100E+66 -> 6.779370220929013E-62 Inexact Rounded +dddiv2030 divide -304232651447703.9 -108.9730808657440 -> 2791814721862.565 Inexact Rounded +dddiv2031 divide -7.233817192699405E+42 -5711302004.149411 -> 1.266579352211430E+33 Inexact Rounded +dddiv2032 divide -9.999221444912745E+96 4010569406446197 -> -2.493217404202250E+81 Inexact Rounded +dddiv2033 divide -1837272.061937622 8.356322838066762 -> -219866.0939196882 Inexact Rounded +dddiv2034 divide 2168.517555606529 209.1910258615061 -> 10.36620737756784 Inexact Rounded +dddiv2035 divide -1.884389790576371E+88 2.95181953870583E+20 -> -6.383824505079828E+67 Inexact Rounded +dddiv2036 divide 732263.6037438196 961222.3634446889 -> 0.7618045850698269 Inexact Rounded +dddiv2037 divide -813461419.0348336 5.376293753809143E+84 -> -1.513052404285927E-76 Inexact Rounded +dddiv2038 divide -45562133508108.50 -9.776843494690107E+51 -> 4.660208945029519E-39 Inexact Rounded +dddiv2039 divide -6.489393172441016E+80 -9101965.097852113 -> 7.129661674897421E+73 Inexact Rounded +dddiv2040 divide 3.694576237117349E+93 6683512.012622003 -> 5.527896456443912E+86 Inexact Rounded +dddiv2041 divide -2.252877726403272E+19 -7451913256.181367 -> 3023220546.125531 Inexact Rounded +dddiv2042 divide 518303.1989111842 50.01587020474133 -> 10362.77479107123 Inexact Rounded +dddiv2043 divide 2.902087881880103E+24 33.32400992305702 -> 8.708699488989578E+22 Inexact Rounded +dddiv2044 divide 549619.4559510557 1660824845196338 -> 3.309316196351104E-10 Inexact Rounded +dddiv2045 divide -6775670774684043 8292152023.077262 -> -817118.4941891062 Inexact Rounded +dddiv2046 divide -77.50923921524079 -5.636882655425815E+74 -> 1.375037302588405E-73 Inexact Rounded +dddiv2047 divide -2.984889459605149E-10 -88106156784122.99 -> 3.387833005721384E-24 Inexact Rounded +dddiv2048 divide 0.949517293997085 44767115.96450998 -> 2.121015110175589E-8 Inexact Rounded +dddiv2049 divide -2760937211.084521 -1087015876975408 -> 0.000002539923537057024 Inexact Rounded +dddiv2050 divide 28438351.85030536 -4.209397904088624E-47 -> -6.755919135770688E+53 Inexact Rounded +dddiv2051 divide -85562731.6820956 -7.166045442530185E+45 -> 1.194002080621542E-38 Inexact Rounded +dddiv2052 divide 2533802852165.25 7154.119606235955 -> 354173957.3317501 Inexact Rounded +dddiv2053 divide -8858831346851.474 97.59734208801716 -> -90769186509.83577 Inexact Rounded +dddiv2054 divide 176783629801387.5 840073263.3109817 -> 210438.3480848206 Inexact Rounded +dddiv2055 divide -493506471796175.6 79733894790822.03 -> -6.189418854940746 Inexact Rounded +dddiv2056 divide 790.1682542103445 829.9449370367435 -> 0.9520731062371214 Inexact Rounded +dddiv2057 divide -8920459838.583164 -4767.889187899214 -> 1870945.294035581 Inexact Rounded +dddiv2058 divide 53536687164422.1 53137.5007032689 -> 1007512330.385698 Inexact Rounded +dddiv2059 divide 4.051532311146561E-74 -2.343089768972261E+94 -> -1.729140882606332E-168 Inexact Rounded +dddiv2060 divide -14847758778636.88 3.062543516383807E-43 -> -4.848178874587497E+55 Inexact Rounded + +-- Division probably has pre-rounding, so need to test rounding +-- explicitly rather than assume included through other tests; +-- tests include simple rounding and also the tricky cases of sticky +-- bits following two zeros +-- +-- 1/99999 gives 0.0000100001000010000100001000010000100001 +-- 1234567890123456 +-- +-- 1/999999 gives 0.000001000001000001000001000001000001000001 +-- 1234567890123456 + +rounding: ceiling +dddiv3001 divide 1 3 -> 0.3333333333333334 Inexact Rounded +dddiv3002 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3003 divide 1 99999 -> 0.00001000010000100002 Inexact Rounded +dddiv3004 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded + +rounding: floor +dddiv3011 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3012 divide 2 3 -> 0.6666666666666666 Inexact Rounded +dddiv3013 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3014 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: up +dddiv3021 divide 1 3 -> 0.3333333333333334 Inexact Rounded +dddiv3022 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3023 divide 1 99999 -> 0.00001000010000100002 Inexact Rounded +dddiv3024 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded + +rounding: down +dddiv3031 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3032 divide 2 3 -> 0.6666666666666666 Inexact Rounded +dddiv3033 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3034 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: half_up +dddiv3041 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3042 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3043 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3044 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: half_down +dddiv3051 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3052 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3053 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3054 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: half_even +dddiv3061 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3062 divide 2 3 -> 0.6666666666666667 Inexact Rounded +dddiv3063 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3064 divide 1 999999 -> 0.000001000001000001000 Inexact Rounded + +rounding: 05up +dddiv3071 divide 1 3 -> 0.3333333333333333 Inexact Rounded +dddiv3072 divide 2 3 -> 0.6666666666666666 Inexact Rounded +dddiv3073 divide 1 99999 -> 0.00001000010000100001 Inexact Rounded +dddiv3074 divide 1 999999 -> 0.000001000001000001001 Inexact Rounded + +-- random divide tests with result near 1 +rounding: half_even +dddiv4001 divide 3195385192916917 3195385192946695 -> 0.9999999999906809 Inexact Rounded +dddiv4002 divide 1393723067526993 1393723067519475 -> 1.000000000005394 Inexact Rounded +dddiv4003 divide 759985543702302 759985543674015 -> 1.000000000037220 Inexact Rounded +dddiv4004 divide 9579158456027302 9579158456036864 -> 0.9999999999990018 Inexact Rounded +dddiv4005 divide 7079398299143569 7079398299156904 -> 0.9999999999981164 Inexact Rounded +dddiv4006 divide 6636169255366598 6636169255336386 -> 1.000000000004553 Inexact Rounded +dddiv4007 divide 6964813971340090 6964813971321554 -> 1.000000000002661 Inexact Rounded +dddiv4008 divide 4182275225480784 4182275225454009 -> 1.000000000006402 Inexact Rounded +dddiv4009 divide 9228325124938029 9228325124918730 -> 1.000000000002091 Inexact Rounded +dddiv4010 divide 3428346338630192 3428346338609843 -> 1.000000000005936 Inexact Rounded +dddiv4011 divide 2143511550722893 2143511550751754 -> 0.9999999999865356 Inexact Rounded +dddiv4012 divide 1672732924396785 1672732924401811 -> 0.9999999999969953 Inexact Rounded +dddiv4013 divide 4190714611948216 4190714611948664 -> 0.9999999999998931 Inexact Rounded +dddiv4014 divide 3942254800848877 3942254800814556 -> 1.000000000008706 Inexact Rounded +dddiv4015 divide 2854459826952334 2854459826960762 -> 0.9999999999970474 Inexact Rounded +dddiv4016 divide 2853258953664731 2853258953684471 -> 0.9999999999930816 Inexact Rounded +dddiv4017 divide 9453512638125978 9453512638146425 -> 0.9999999999978371 Inexact Rounded +dddiv4018 divide 339476633940369 339476633912887 -> 1.000000000080954 Inexact Rounded +dddiv4019 divide 4542181492688467 4542181492697735 -> 0.9999999999979596 Inexact Rounded +dddiv4020 divide 7312600192399197 7312600192395424 -> 1.000000000000516 Inexact Rounded +dddiv4021 divide 1811674985570111 1811674985603935 -> 0.9999999999813300 Inexact Rounded +dddiv4022 divide 1706462639003481 1706462639017740 -> 0.9999999999916441 Inexact Rounded +dddiv4023 divide 6697052654940368 6697052654934110 -> 1.000000000000934 Inexact Rounded +dddiv4024 divide 5015283664277539 5015283664310719 -> 0.9999999999933842 Inexact Rounded +dddiv4025 divide 2359501561537464 2359501561502464 -> 1.000000000014834 Inexact Rounded +dddiv4026 divide 2669850227909157 2669850227901548 -> 1.000000000002850 Inexact Rounded +dddiv4027 divide 9329725546974648 9329725547002445 -> 0.9999999999970206 Inexact Rounded +dddiv4028 divide 3228562867071248 3228562867106206 -> 0.9999999999891723 Inexact Rounded +dddiv4029 divide 4862226644921175 4862226644909380 -> 1.000000000002426 Inexact Rounded +dddiv4030 divide 1022267997054529 1022267997071329 -> 0.9999999999835660 Inexact Rounded +dddiv4031 divide 1048777482023719 1048777482000948 -> 1.000000000021712 Inexact Rounded +dddiv4032 divide 9980113777337098 9980113777330539 -> 1.000000000000657 Inexact Rounded +dddiv4033 divide 7506839167963908 7506839167942901 -> 1.000000000002798 Inexact Rounded +dddiv4034 divide 231119751977860 231119751962453 -> 1.000000000066662 Inexact Rounded +dddiv4035 divide 4034903664762962 4034903664795526 -> 0.9999999999919294 Inexact Rounded +dddiv4036 divide 5700122152274696 5700122152251386 -> 1.000000000004089 Inexact Rounded +dddiv4037 divide 6869599590293110 6869599590293495 -> 0.9999999999999440 Inexact Rounded +dddiv4038 divide 5576281960092797 5576281960105579 -> 0.9999999999977078 Inexact Rounded +dddiv4039 divide 2304844888381318 2304844888353073 -> 1.000000000012255 Inexact Rounded +dddiv4040 divide 3265933651656452 3265933651682779 -> 0.9999999999919389 Inexact Rounded +dddiv4041 divide 5235714985079914 5235714985066131 -> 1.000000000002632 Inexact Rounded +dddiv4042 divide 5578481572827551 5578481572822945 -> 1.000000000000826 Inexact Rounded +dddiv4043 divide 4909616081396134 4909616081373076 -> 1.000000000004696 Inexact Rounded +dddiv4044 divide 636447224349537 636447224338757 -> 1.000000000016938 Inexact Rounded +dddiv4045 divide 1539373428396640 1539373428364727 -> 1.000000000020731 Inexact Rounded +dddiv4046 divide 2028786707377893 2028786707378866 -> 0.9999999999995204 Inexact Rounded +dddiv4047 divide 137643260486222 137643260487419 -> 0.9999999999913036 Inexact Rounded +dddiv4048 divide 247451519746765 247451519752267 -> 0.9999999999777653 Inexact Rounded +dddiv4049 divide 7877858475022054 7877858474999794 -> 1.000000000002826 Inexact Rounded +dddiv4050 divide 7333242694766258 7333242694744628 -> 1.000000000002950 Inexact Rounded +dddiv4051 divide 124051503698592 124051503699397 -> 0.9999999999935108 Inexact Rounded +dddiv4052 divide 8944737432385188 8944737432406860 -> 0.9999999999975771 Inexact Rounded +dddiv4053 divide 9883948923406874 9883948923424843 -> 0.9999999999981820 Inexact Rounded +dddiv4054 divide 6829178741654284 6829178741671973 -> 0.9999999999974098 Inexact Rounded +dddiv4055 divide 7342752479768122 7342752479793385 -> 0.9999999999965595 Inexact Rounded +dddiv4056 divide 8066426579008783 8066426578977563 -> 1.000000000003870 Inexact Rounded +dddiv4057 divide 8992775071383295 8992775071352712 -> 1.000000000003401 Inexact Rounded +dddiv4058 divide 5485011755545641 5485011755543611 -> 1.000000000000370 Inexact Rounded +dddiv4059 divide 5779983054353918 5779983054365300 -> 0.9999999999980308 Inexact Rounded +dddiv4060 divide 9502265102713774 9502265102735208 -> 0.9999999999977443 Inexact Rounded +dddiv4061 divide 2109558399130981 2109558399116281 -> 1.000000000006968 Inexact Rounded +dddiv4062 divide 5296182636350471 5296182636351521 -> 0.9999999999998017 Inexact Rounded +dddiv4063 divide 1440019225591883 1440019225601844 -> 0.9999999999930827 Inexact Rounded +dddiv4064 divide 8182110791881341 8182110791847174 -> 1.000000000004176 Inexact Rounded +dddiv4065 divide 489098235512060 489098235534516 -> 0.9999999999540869 Inexact Rounded +dddiv4066 divide 6475687084782038 6475687084756089 -> 1.000000000004007 Inexact Rounded +dddiv4067 divide 8094348555736948 8094348555759236 -> 0.9999999999972465 Inexact Rounded +dddiv4068 divide 1982766816291543 1982766816309463 -> 0.9999999999909621 Inexact Rounded +dddiv4069 divide 9277314300113251 9277314300084467 -> 1.000000000003103 Inexact Rounded +dddiv4070 divide 4335532959318934 4335532959293167 -> 1.000000000005943 Inexact Rounded +dddiv4071 divide 7767113032981348 7767113032968132 -> 1.000000000001702 Inexact Rounded +dddiv4072 divide 1578548053342868 1578548053370448 -> 0.9999999999825282 Inexact Rounded +dddiv4073 divide 3790420686666898 3790420686636315 -> 1.000000000008068 Inexact Rounded +dddiv4074 divide 871682421955147 871682421976441 -> 0.9999999999755714 Inexact Rounded +dddiv4075 divide 744141054479940 744141054512329 -> 0.9999999999564746 Inexact Rounded +dddiv4076 divide 8956824183670735 8956824183641741 -> 1.000000000003237 Inexact Rounded +dddiv4077 divide 8337291694485682 8337291694451193 -> 1.000000000004137 Inexact Rounded +dddiv4078 divide 4107775944683669 4107775944657097 -> 1.000000000006469 Inexact Rounded +dddiv4079 divide 8691900057964648 8691900057997555 -> 0.9999999999962141 Inexact Rounded +dddiv4080 divide 2229528520536462 2229528520502337 -> 1.000000000015306 Inexact Rounded +dddiv4081 divide 398442083774322 398442083746273 -> 1.000000000070397 Inexact Rounded +dddiv4082 divide 5319819776808759 5319819776838313 -> 0.9999999999944445 Inexact Rounded +dddiv4083 divide 7710491299066855 7710491299041858 -> 1.000000000003242 Inexact Rounded +dddiv4084 divide 9083231296087266 9083231296058160 -> 1.000000000003204 Inexact Rounded +dddiv4085 divide 3566873574904559 3566873574890328 -> 1.000000000003990 Inexact Rounded +dddiv4086 divide 596343290550525 596343290555614 -> 0.9999999999914663 Inexact Rounded +dddiv4087 divide 278227925093192 278227925068104 -> 1.000000000090171 Inexact Rounded +dddiv4088 divide 3292902958490649 3292902958519881 -> 0.9999999999911227 Inexact Rounded +dddiv4089 divide 5521871364245881 5521871364229536 -> 1.000000000002960 Inexact Rounded +dddiv4090 divide 2406505602883617 2406505602857997 -> 1.000000000010646 Inexact Rounded +dddiv4091 divide 7741146984869208 7741146984867255 -> 1.000000000000252 Inexact Rounded +dddiv4092 divide 4576041832414909 4576041832405102 -> 1.000000000002143 Inexact Rounded +dddiv4093 divide 9183756982878057 9183756982901934 -> 0.9999999999974001 Inexact Rounded +dddiv4094 divide 6215736513855159 6215736513870342 -> 0.9999999999975573 Inexact Rounded +dddiv4095 divide 248554968534533 248554968551417 -> 0.9999999999320714 Inexact Rounded +dddiv4096 divide 376314165668645 376314165659755 -> 1.000000000023624 Inexact Rounded +dddiv4097 divide 5513569249809718 5513569249808906 -> 1.000000000000147 Inexact Rounded +dddiv4098 divide 3367992242167904 3367992242156228 -> 1.000000000003467 Inexact Rounded +dddiv4099 divide 6134869538966967 6134869538985986 -> 0.9999999999968999 Inexact Rounded + +-- Null tests +dddiv9998 divide 10 # -> NaN Invalid_operation +dddiv9999 divide # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddDivideInt.decTest b/Lib/test/decimaltestdata/ddDivideInt.decTest index 1c397ce1417..342d13041b1 100644 --- a/Lib/test/decimaltestdata/ddDivideInt.decTest +++ b/Lib/test/decimaltestdata/ddDivideInt.decTest @@ -1,449 +1,449 @@ ------------------------------------------------------------------------- --- ddDivideInt.decTest -- decDouble integer division -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -dddvi001 divideint 1 1 -> 1 -dddvi002 divideint 2 1 -> 2 -dddvi003 divideint 1 2 -> 0 -dddvi004 divideint 2 2 -> 1 -dddvi005 divideint 0 1 -> 0 -dddvi006 divideint 0 2 -> 0 -dddvi007 divideint 1 3 -> 0 -dddvi008 divideint 2 3 -> 0 -dddvi009 divideint 3 3 -> 1 - -dddvi010 divideint 2.4 1 -> 2 -dddvi011 divideint 2.4 -1 -> -2 -dddvi012 divideint -2.4 1 -> -2 -dddvi013 divideint -2.4 -1 -> 2 -dddvi014 divideint 2.40 1 -> 2 -dddvi015 divideint 2.400 1 -> 2 -dddvi016 divideint 2.4 2 -> 1 -dddvi017 divideint 2.400 2 -> 1 -dddvi018 divideint 2. 2 -> 1 -dddvi019 divideint 20 20 -> 1 - -dddvi020 divideint 187 187 -> 1 -dddvi021 divideint 5 2 -> 2 -dddvi022 divideint 5 2.0 -> 2 -dddvi023 divideint 5 2.000 -> 2 -dddvi024 divideint 5 0.200 -> 25 -dddvi025 divideint 5 0.200 -> 25 - -dddvi030 divideint 1 2 -> 0 -dddvi031 divideint 1 4 -> 0 -dddvi032 divideint 1 8 -> 0 -dddvi033 divideint 1 16 -> 0 -dddvi034 divideint 1 32 -> 0 -dddvi035 divideint 1 64 -> 0 -dddvi040 divideint 1 -2 -> -0 -dddvi041 divideint 1 -4 -> -0 -dddvi042 divideint 1 -8 -> -0 -dddvi043 divideint 1 -16 -> -0 -dddvi044 divideint 1 -32 -> -0 -dddvi045 divideint 1 -64 -> -0 -dddvi050 divideint -1 2 -> -0 -dddvi051 divideint -1 4 -> -0 -dddvi052 divideint -1 8 -> -0 -dddvi053 divideint -1 16 -> -0 -dddvi054 divideint -1 32 -> -0 -dddvi055 divideint -1 64 -> -0 -dddvi060 divideint -1 -2 -> 0 -dddvi061 divideint -1 -4 -> 0 -dddvi062 divideint -1 -8 -> 0 -dddvi063 divideint -1 -16 -> 0 -dddvi064 divideint -1 -32 -> 0 -dddvi065 divideint -1 -64 -> 0 - --- similar with powers of ten -dddvi160 divideint 1 1 -> 1 -dddvi161 divideint 1 10 -> 0 -dddvi162 divideint 1 100 -> 0 -dddvi163 divideint 1 1000 -> 0 -dddvi164 divideint 1 10000 -> 0 -dddvi165 divideint 1 100000 -> 0 -dddvi166 divideint 1 1000000 -> 0 -dddvi167 divideint 1 10000000 -> 0 -dddvi168 divideint 1 100000000 -> 0 -dddvi170 divideint 1 -1 -> -1 -dddvi171 divideint 1 -10 -> -0 -dddvi172 divideint 1 -100 -> -0 -dddvi173 divideint 1 -1000 -> -0 -dddvi174 divideint 1 -10000 -> -0 -dddvi175 divideint 1 -100000 -> -0 -dddvi176 divideint 1 -1000000 -> -0 -dddvi177 divideint 1 -10000000 -> -0 -dddvi178 divideint 1 -100000000 -> -0 -dddvi180 divideint -1 1 -> -1 -dddvi181 divideint -1 10 -> -0 -dddvi182 divideint -1 100 -> -0 -dddvi183 divideint -1 1000 -> -0 -dddvi184 divideint -1 10000 -> -0 -dddvi185 divideint -1 100000 -> -0 -dddvi186 divideint -1 1000000 -> -0 -dddvi187 divideint -1 10000000 -> -0 -dddvi188 divideint -1 100000000 -> -0 -dddvi190 divideint -1 -1 -> 1 -dddvi191 divideint -1 -10 -> 0 -dddvi192 divideint -1 -100 -> 0 -dddvi193 divideint -1 -1000 -> 0 -dddvi194 divideint -1 -10000 -> 0 -dddvi195 divideint -1 -100000 -> 0 -dddvi196 divideint -1 -1000000 -> 0 -dddvi197 divideint -1 -10000000 -> 0 -dddvi198 divideint -1 -100000000 -> 0 - --- some long operand (at p=9) cases -dddvi070 divideint 999999999 1 -> 999999999 -dddvi071 divideint 999999999.4 1 -> 999999999 -dddvi072 divideint 999999999.5 1 -> 999999999 -dddvi073 divideint 999999999.9 1 -> 999999999 -dddvi074 divideint 999999999.999 1 -> 999999999 - -dddvi090 divideint 0. 1 -> 0 -dddvi091 divideint .0 1 -> 0 -dddvi092 divideint 0.00 1 -> 0 -dddvi093 divideint 0.00E+9 1 -> 0 -dddvi094 divideint 0.0000E-50 1 -> 0 - -dddvi100 divideint 1 1 -> 1 -dddvi101 divideint 1 2 -> 0 -dddvi102 divideint 1 3 -> 0 -dddvi103 divideint 1 4 -> 0 -dddvi104 divideint 1 5 -> 0 -dddvi105 divideint 1 6 -> 0 -dddvi106 divideint 1 7 -> 0 -dddvi107 divideint 1 8 -> 0 -dddvi108 divideint 1 9 -> 0 -dddvi109 divideint 1 10 -> 0 -dddvi110 divideint 1 1 -> 1 -dddvi111 divideint 2 1 -> 2 -dddvi112 divideint 3 1 -> 3 -dddvi113 divideint 4 1 -> 4 -dddvi114 divideint 5 1 -> 5 -dddvi115 divideint 6 1 -> 6 -dddvi116 divideint 7 1 -> 7 -dddvi117 divideint 8 1 -> 8 -dddvi118 divideint 9 1 -> 9 -dddvi119 divideint 10 1 -> 10 - --- from DiagBigDecimal -dddvi131 divideint 101.3 1 -> 101 -dddvi132 divideint 101.0 1 -> 101 -dddvi133 divideint 101.3 3 -> 33 -dddvi134 divideint 101.0 3 -> 33 -dddvi135 divideint 2.4 1 -> 2 -dddvi136 divideint 2.400 1 -> 2 -dddvi137 divideint 18 18 -> 1 -dddvi138 divideint 1120 1000 -> 1 -dddvi139 divideint 2.4 2 -> 1 -dddvi140 divideint 2.400 2 -> 1 -dddvi141 divideint 0.5 2.000 -> 0 -dddvi142 divideint 8.005 7 -> 1 -dddvi143 divideint 5 2 -> 2 -dddvi144 divideint 0 2 -> 0 -dddvi145 divideint 0.00 2 -> 0 - --- Others -dddvi150 divideint 12345 4.999 -> 2469 -dddvi151 divideint 12345 4.99 -> 2473 -dddvi152 divideint 12345 4.9 -> 2519 -dddvi153 divideint 12345 5 -> 2469 -dddvi154 divideint 12345 5.1 -> 2420 -dddvi155 divideint 12345 5.01 -> 2464 -dddvi156 divideint 12345 5.001 -> 2468 -dddvi157 divideint 101 7.6 -> 13 - --- Various flavours of divideint by 0 -dddvi201 divideint 0 0 -> NaN Division_undefined -dddvi202 divideint 0.0E5 0 -> NaN Division_undefined -dddvi203 divideint 0.000 0 -> NaN Division_undefined -dddvi204 divideint 0.0001 0 -> Infinity Division_by_zero -dddvi205 divideint 0.01 0 -> Infinity Division_by_zero -dddvi206 divideint 0.1 0 -> Infinity Division_by_zero -dddvi207 divideint 1 0 -> Infinity Division_by_zero -dddvi208 divideint 1 0.0 -> Infinity Division_by_zero -dddvi209 divideint 10 0.0 -> Infinity Division_by_zero -dddvi210 divideint 1E+100 0.0 -> Infinity Division_by_zero -dddvi211 divideint 1E+380 0 -> Infinity Division_by_zero -dddvi214 divideint -0.0001 0 -> -Infinity Division_by_zero -dddvi215 divideint -0.01 0 -> -Infinity Division_by_zero -dddvi216 divideint -0.1 0 -> -Infinity Division_by_zero -dddvi217 divideint -1 0 -> -Infinity Division_by_zero -dddvi218 divideint -1 0.0 -> -Infinity Division_by_zero -dddvi219 divideint -10 0.0 -> -Infinity Division_by_zero -dddvi220 divideint -1E+100 0.0 -> -Infinity Division_by_zero -dddvi221 divideint -1E+380 0 -> -Infinity Division_by_zero - --- test some cases that are close to exponent overflow -dddvi270 divideint 1 1e384 -> 0 -dddvi271 divideint 1 0.9e384 -> 0 -dddvi272 divideint 1 0.99e384 -> 0 -dddvi273 divideint 1 0.9999999999999999e384 -> 0 -dddvi274 divideint 9e384 1 -> NaN Division_impossible -dddvi275 divideint 9.9e384 1 -> NaN Division_impossible -dddvi276 divideint 9.99e384 1 -> NaN Division_impossible -dddvi277 divideint 9.999999999999999e384 1 -> NaN Division_impossible - -dddvi280 divideint 0.1 9e-383 -> NaN Division_impossible -dddvi281 divideint 0.1 99e-383 -> NaN Division_impossible -dddvi282 divideint 0.1 999e-383 -> NaN Division_impossible -dddvi283 divideint 0.1 9e-382 -> NaN Division_impossible -dddvi284 divideint 0.1 99e-382 -> NaN Division_impossible - --- GD edge cases: lhs smaller than rhs but more digits -dddvi301 divideint 0.9 2 -> 0 -dddvi302 divideint 0.9 2.0 -> 0 -dddvi303 divideint 0.9 2.1 -> 0 -dddvi304 divideint 0.9 2.00 -> 0 -dddvi305 divideint 0.9 2.01 -> 0 -dddvi306 divideint 0.12 1 -> 0 -dddvi307 divideint 0.12 1.0 -> 0 -dddvi308 divideint 0.12 1.00 -> 0 -dddvi309 divideint 0.12 1.0 -> 0 -dddvi310 divideint 0.12 1.00 -> 0 -dddvi311 divideint 0.12 2 -> 0 -dddvi312 divideint 0.12 2.0 -> 0 -dddvi313 divideint 0.12 2.1 -> 0 -dddvi314 divideint 0.12 2.00 -> 0 -dddvi315 divideint 0.12 2.01 -> 0 - --- edge cases of impossible -dddvi330 divideint 1234567890123456 10 -> 123456789012345 -dddvi331 divideint 1234567890123456 1 -> 1234567890123456 -dddvi332 divideint 1234567890123456 0.1 -> NaN Division_impossible -dddvi333 divideint 1234567890123456 0.01 -> NaN Division_impossible - --- overflow and underflow tests [from divide] -dddvi1051 divideint 1e+277 1e-311 -> NaN Division_impossible -dddvi1052 divideint 1e+277 -1e-311 -> NaN Division_impossible -dddvi1053 divideint -1e+277 1e-311 -> NaN Division_impossible -dddvi1054 divideint -1e+277 -1e-311 -> NaN Division_impossible -dddvi1055 divideint 1e-277 1e+311 -> 0 -dddvi1056 divideint 1e-277 -1e+311 -> -0 -dddvi1057 divideint -1e-277 1e+311 -> -0 -dddvi1058 divideint -1e-277 -1e+311 -> 0 - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dddvi1060 divideint 1e-291 1e+101 -> 0 -dddvi1061 divideint 1e-291 1e+102 -> 0 -dddvi1062 divideint 1e-291 1e+103 -> 0 -dddvi1063 divideint 1e-291 1e+104 -> 0 -dddvi1064 divideint 1e-291 1e+105 -> 0 -dddvi1065 divideint 1e-291 1e+106 -> 0 -dddvi1066 divideint 1e-291 1e+107 -> 0 -dddvi1067 divideint 1e-291 1e+108 -> 0 -dddvi1068 divideint 1e-291 1e+109 -> 0 -dddvi1069 divideint 1e-291 1e+110 -> 0 - -dddvi1101 divideint 1.0000E-394 1 -> 0 -dddvi1102 divideint 1.000E-394 1e+1 -> 0 -dddvi1103 divideint 1.00E-394 1e+2 -> 0 - -dddvi1118 divideint 1E-394 1e+4 -> 0 -dddvi1119 divideint 3E-394 -1e+5 -> -0 -dddvi1120 divideint 5E-394 1e+5 -> 0 - -dddvi1124 divideint 1E-394 -1e+4 -> -0 -dddvi1130 divideint 3.0E-394 -1e+5 -> -0 - -dddvi1131 divideint 1.0E-199 1e+200 -> 0 -dddvi1132 divideint 1.0E-199 1e+199 -> 0 -dddvi1133 divideint 1.0E-199 1e+198 -> 0 -dddvi1134 divideint 2.0E-199 2e+198 -> 0 -dddvi1135 divideint 4.0E-199 4e+198 -> 0 - --- long operand checks -dddvi401 divideint 12345678000 100 -> 123456780 -dddvi402 divideint 1 12345678000 -> 0 -dddvi403 divideint 1234567800 10 -> 123456780 -dddvi404 divideint 1 1234567800 -> 0 -dddvi405 divideint 1234567890 10 -> 123456789 -dddvi406 divideint 1 1234567890 -> 0 -dddvi407 divideint 1234567891 10 -> 123456789 -dddvi408 divideint 1 1234567891 -> 0 -dddvi409 divideint 12345678901 100 -> 123456789 -dddvi410 divideint 1 12345678901 -> 0 -dddvi411 divideint 1234567896 10 -> 123456789 -dddvi412 divideint 1 1234567896 -> 0 -dddvi413 divideint 12345678948 100 -> 123456789 -dddvi414 divideint 12345678949 100 -> 123456789 -dddvi415 divideint 12345678950 100 -> 123456789 -dddvi416 divideint 12345678951 100 -> 123456789 -dddvi417 divideint 12345678999 100 -> 123456789 -dddvi441 divideint 12345678000 1 -> 12345678000 -dddvi442 divideint 1 12345678000 -> 0 -dddvi443 divideint 1234567800 1 -> 1234567800 -dddvi444 divideint 1 1234567800 -> 0 -dddvi445 divideint 1234567890 1 -> 1234567890 -dddvi446 divideint 1 1234567890 -> 0 -dddvi447 divideint 1234567891 1 -> 1234567891 -dddvi448 divideint 1 1234567891 -> 0 -dddvi449 divideint 12345678901 1 -> 12345678901 -dddvi450 divideint 1 12345678901 -> 0 -dddvi451 divideint 1234567896 1 -> 1234567896 -dddvi452 divideint 1 1234567896 -> 0 - --- more zeros, etc. -dddvi531 divideint 5.00 1E-3 -> 5000 -dddvi532 divideint 00.00 0.000 -> NaN Division_undefined -dddvi533 divideint 00.00 0E-3 -> NaN Division_undefined -dddvi534 divideint 0 -0 -> NaN Division_undefined -dddvi535 divideint -0 0 -> NaN Division_undefined -dddvi536 divideint -0 -0 -> NaN Division_undefined - -dddvi541 divideint 0 -1 -> -0 -dddvi542 divideint -0 -1 -> 0 -dddvi543 divideint 0 1 -> 0 -dddvi544 divideint -0 1 -> -0 -dddvi545 divideint -1 0 -> -Infinity Division_by_zero -dddvi546 divideint -1 -0 -> Infinity Division_by_zero -dddvi547 divideint 1 0 -> Infinity Division_by_zero -dddvi548 divideint 1 -0 -> -Infinity Division_by_zero - -dddvi551 divideint 0.0 -1 -> -0 -dddvi552 divideint -0.0 -1 -> 0 -dddvi553 divideint 0.0 1 -> 0 -dddvi554 divideint -0.0 1 -> -0 -dddvi555 divideint -1.0 0 -> -Infinity Division_by_zero -dddvi556 divideint -1.0 -0 -> Infinity Division_by_zero -dddvi557 divideint 1.0 0 -> Infinity Division_by_zero -dddvi558 divideint 1.0 -0 -> -Infinity Division_by_zero - -dddvi561 divideint 0 -1.0 -> -0 -dddvi562 divideint -0 -1.0 -> 0 -dddvi563 divideint 0 1.0 -> 0 -dddvi564 divideint -0 1.0 -> -0 -dddvi565 divideint -1 0.0 -> -Infinity Division_by_zero -dddvi566 divideint -1 -0.0 -> Infinity Division_by_zero -dddvi567 divideint 1 0.0 -> Infinity Division_by_zero -dddvi568 divideint 1 -0.0 -> -Infinity Division_by_zero - -dddvi571 divideint 0.0 -1.0 -> -0 -dddvi572 divideint -0.0 -1.0 -> 0 -dddvi573 divideint 0.0 1.0 -> 0 -dddvi574 divideint -0.0 1.0 -> -0 -dddvi575 divideint -1.0 0.0 -> -Infinity Division_by_zero -dddvi576 divideint -1.0 -0.0 -> Infinity Division_by_zero -dddvi577 divideint 1.0 0.0 -> Infinity Division_by_zero -dddvi578 divideint 1.0 -0.0 -> -Infinity Division_by_zero - --- Specials -dddvi580 divideint Inf -Inf -> NaN Invalid_operation -dddvi581 divideint Inf -1000 -> -Infinity -dddvi582 divideint Inf -1 -> -Infinity -dddvi583 divideint Inf -0 -> -Infinity -dddvi584 divideint Inf 0 -> Infinity -dddvi585 divideint Inf 1 -> Infinity -dddvi586 divideint Inf 1000 -> Infinity -dddvi587 divideint Inf Inf -> NaN Invalid_operation -dddvi588 divideint -1000 Inf -> -0 -dddvi589 divideint -Inf Inf -> NaN Invalid_operation -dddvi590 divideint -1 Inf -> -0 -dddvi591 divideint -0 Inf -> -0 -dddvi592 divideint 0 Inf -> 0 -dddvi593 divideint 1 Inf -> 0 -dddvi594 divideint 1000 Inf -> 0 -dddvi595 divideint Inf Inf -> NaN Invalid_operation - -dddvi600 divideint -Inf -Inf -> NaN Invalid_operation -dddvi601 divideint -Inf -1000 -> Infinity -dddvi602 divideint -Inf -1 -> Infinity -dddvi603 divideint -Inf -0 -> Infinity -dddvi604 divideint -Inf 0 -> -Infinity -dddvi605 divideint -Inf 1 -> -Infinity -dddvi606 divideint -Inf 1000 -> -Infinity -dddvi607 divideint -Inf Inf -> NaN Invalid_operation -dddvi608 divideint -1000 Inf -> -0 -dddvi609 divideint -Inf -Inf -> NaN Invalid_operation -dddvi610 divideint -1 -Inf -> 0 -dddvi611 divideint -0 -Inf -> 0 -dddvi612 divideint 0 -Inf -> -0 -dddvi613 divideint 1 -Inf -> -0 -dddvi614 divideint 1000 -Inf -> -0 -dddvi615 divideint Inf -Inf -> NaN Invalid_operation - -dddvi621 divideint NaN -Inf -> NaN -dddvi622 divideint NaN -1000 -> NaN -dddvi623 divideint NaN -1 -> NaN -dddvi624 divideint NaN -0 -> NaN -dddvi625 divideint NaN 0 -> NaN -dddvi626 divideint NaN 1 -> NaN -dddvi627 divideint NaN 1000 -> NaN -dddvi628 divideint NaN Inf -> NaN -dddvi629 divideint NaN NaN -> NaN -dddvi630 divideint -Inf NaN -> NaN -dddvi631 divideint -1000 NaN -> NaN -dddvi632 divideint -1 NaN -> NaN -dddvi633 divideint -0 NaN -> NaN -dddvi634 divideint 0 NaN -> NaN -dddvi635 divideint 1 NaN -> NaN -dddvi636 divideint 1000 NaN -> NaN -dddvi637 divideint Inf NaN -> NaN - -dddvi641 divideint sNaN -Inf -> NaN Invalid_operation -dddvi642 divideint sNaN -1000 -> NaN Invalid_operation -dddvi643 divideint sNaN -1 -> NaN Invalid_operation -dddvi644 divideint sNaN -0 -> NaN Invalid_operation -dddvi645 divideint sNaN 0 -> NaN Invalid_operation -dddvi646 divideint sNaN 1 -> NaN Invalid_operation -dddvi647 divideint sNaN 1000 -> NaN Invalid_operation -dddvi648 divideint sNaN NaN -> NaN Invalid_operation -dddvi649 divideint sNaN sNaN -> NaN Invalid_operation -dddvi650 divideint NaN sNaN -> NaN Invalid_operation -dddvi651 divideint -Inf sNaN -> NaN Invalid_operation -dddvi652 divideint -1000 sNaN -> NaN Invalid_operation -dddvi653 divideint -1 sNaN -> NaN Invalid_operation -dddvi654 divideint -0 sNaN -> NaN Invalid_operation -dddvi655 divideint 0 sNaN -> NaN Invalid_operation -dddvi656 divideint 1 sNaN -> NaN Invalid_operation -dddvi657 divideint 1000 sNaN -> NaN Invalid_operation -dddvi658 divideint Inf sNaN -> NaN Invalid_operation -dddvi659 divideint NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dddvi661 divideint NaN9 -Inf -> NaN9 -dddvi662 divideint NaN8 1000 -> NaN8 -dddvi663 divideint NaN7 Inf -> NaN7 -dddvi664 divideint -NaN6 NaN5 -> -NaN6 -dddvi665 divideint -Inf NaN4 -> NaN4 -dddvi666 divideint -1000 NaN3 -> NaN3 -dddvi667 divideint Inf -NaN2 -> -NaN2 - -dddvi671 divideint -sNaN99 -Inf -> -NaN99 Invalid_operation -dddvi672 divideint sNaN98 -1 -> NaN98 Invalid_operation -dddvi673 divideint sNaN97 NaN -> NaN97 Invalid_operation -dddvi674 divideint sNaN96 sNaN94 -> NaN96 Invalid_operation -dddvi675 divideint NaN95 sNaN93 -> NaN93 Invalid_operation -dddvi676 divideint -Inf sNaN92 -> NaN92 Invalid_operation -dddvi677 divideint 0 sNaN91 -> NaN91 Invalid_operation -dddvi678 divideint Inf -sNaN90 -> -NaN90 Invalid_operation -dddvi679 divideint NaN sNaN89 -> NaN89 Invalid_operation - --- Null tests -dddvi900 divideint 10 # -> NaN Invalid_operation -dddvi901 divideint # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddDivideInt.decTest -- decDouble integer division -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +dddvi001 divideint 1 1 -> 1 +dddvi002 divideint 2 1 -> 2 +dddvi003 divideint 1 2 -> 0 +dddvi004 divideint 2 2 -> 1 +dddvi005 divideint 0 1 -> 0 +dddvi006 divideint 0 2 -> 0 +dddvi007 divideint 1 3 -> 0 +dddvi008 divideint 2 3 -> 0 +dddvi009 divideint 3 3 -> 1 + +dddvi010 divideint 2.4 1 -> 2 +dddvi011 divideint 2.4 -1 -> -2 +dddvi012 divideint -2.4 1 -> -2 +dddvi013 divideint -2.4 -1 -> 2 +dddvi014 divideint 2.40 1 -> 2 +dddvi015 divideint 2.400 1 -> 2 +dddvi016 divideint 2.4 2 -> 1 +dddvi017 divideint 2.400 2 -> 1 +dddvi018 divideint 2. 2 -> 1 +dddvi019 divideint 20 20 -> 1 + +dddvi020 divideint 187 187 -> 1 +dddvi021 divideint 5 2 -> 2 +dddvi022 divideint 5 2.0 -> 2 +dddvi023 divideint 5 2.000 -> 2 +dddvi024 divideint 5 0.200 -> 25 +dddvi025 divideint 5 0.200 -> 25 + +dddvi030 divideint 1 2 -> 0 +dddvi031 divideint 1 4 -> 0 +dddvi032 divideint 1 8 -> 0 +dddvi033 divideint 1 16 -> 0 +dddvi034 divideint 1 32 -> 0 +dddvi035 divideint 1 64 -> 0 +dddvi040 divideint 1 -2 -> -0 +dddvi041 divideint 1 -4 -> -0 +dddvi042 divideint 1 -8 -> -0 +dddvi043 divideint 1 -16 -> -0 +dddvi044 divideint 1 -32 -> -0 +dddvi045 divideint 1 -64 -> -0 +dddvi050 divideint -1 2 -> -0 +dddvi051 divideint -1 4 -> -0 +dddvi052 divideint -1 8 -> -0 +dddvi053 divideint -1 16 -> -0 +dddvi054 divideint -1 32 -> -0 +dddvi055 divideint -1 64 -> -0 +dddvi060 divideint -1 -2 -> 0 +dddvi061 divideint -1 -4 -> 0 +dddvi062 divideint -1 -8 -> 0 +dddvi063 divideint -1 -16 -> 0 +dddvi064 divideint -1 -32 -> 0 +dddvi065 divideint -1 -64 -> 0 + +-- similar with powers of ten +dddvi160 divideint 1 1 -> 1 +dddvi161 divideint 1 10 -> 0 +dddvi162 divideint 1 100 -> 0 +dddvi163 divideint 1 1000 -> 0 +dddvi164 divideint 1 10000 -> 0 +dddvi165 divideint 1 100000 -> 0 +dddvi166 divideint 1 1000000 -> 0 +dddvi167 divideint 1 10000000 -> 0 +dddvi168 divideint 1 100000000 -> 0 +dddvi170 divideint 1 -1 -> -1 +dddvi171 divideint 1 -10 -> -0 +dddvi172 divideint 1 -100 -> -0 +dddvi173 divideint 1 -1000 -> -0 +dddvi174 divideint 1 -10000 -> -0 +dddvi175 divideint 1 -100000 -> -0 +dddvi176 divideint 1 -1000000 -> -0 +dddvi177 divideint 1 -10000000 -> -0 +dddvi178 divideint 1 -100000000 -> -0 +dddvi180 divideint -1 1 -> -1 +dddvi181 divideint -1 10 -> -0 +dddvi182 divideint -1 100 -> -0 +dddvi183 divideint -1 1000 -> -0 +dddvi184 divideint -1 10000 -> -0 +dddvi185 divideint -1 100000 -> -0 +dddvi186 divideint -1 1000000 -> -0 +dddvi187 divideint -1 10000000 -> -0 +dddvi188 divideint -1 100000000 -> -0 +dddvi190 divideint -1 -1 -> 1 +dddvi191 divideint -1 -10 -> 0 +dddvi192 divideint -1 -100 -> 0 +dddvi193 divideint -1 -1000 -> 0 +dddvi194 divideint -1 -10000 -> 0 +dddvi195 divideint -1 -100000 -> 0 +dddvi196 divideint -1 -1000000 -> 0 +dddvi197 divideint -1 -10000000 -> 0 +dddvi198 divideint -1 -100000000 -> 0 + +-- some long operand (at p=9) cases +dddvi070 divideint 999999999 1 -> 999999999 +dddvi071 divideint 999999999.4 1 -> 999999999 +dddvi072 divideint 999999999.5 1 -> 999999999 +dddvi073 divideint 999999999.9 1 -> 999999999 +dddvi074 divideint 999999999.999 1 -> 999999999 + +dddvi090 divideint 0. 1 -> 0 +dddvi091 divideint .0 1 -> 0 +dddvi092 divideint 0.00 1 -> 0 +dddvi093 divideint 0.00E+9 1 -> 0 +dddvi094 divideint 0.0000E-50 1 -> 0 + +dddvi100 divideint 1 1 -> 1 +dddvi101 divideint 1 2 -> 0 +dddvi102 divideint 1 3 -> 0 +dddvi103 divideint 1 4 -> 0 +dddvi104 divideint 1 5 -> 0 +dddvi105 divideint 1 6 -> 0 +dddvi106 divideint 1 7 -> 0 +dddvi107 divideint 1 8 -> 0 +dddvi108 divideint 1 9 -> 0 +dddvi109 divideint 1 10 -> 0 +dddvi110 divideint 1 1 -> 1 +dddvi111 divideint 2 1 -> 2 +dddvi112 divideint 3 1 -> 3 +dddvi113 divideint 4 1 -> 4 +dddvi114 divideint 5 1 -> 5 +dddvi115 divideint 6 1 -> 6 +dddvi116 divideint 7 1 -> 7 +dddvi117 divideint 8 1 -> 8 +dddvi118 divideint 9 1 -> 9 +dddvi119 divideint 10 1 -> 10 + +-- from DiagBigDecimal +dddvi131 divideint 101.3 1 -> 101 +dddvi132 divideint 101.0 1 -> 101 +dddvi133 divideint 101.3 3 -> 33 +dddvi134 divideint 101.0 3 -> 33 +dddvi135 divideint 2.4 1 -> 2 +dddvi136 divideint 2.400 1 -> 2 +dddvi137 divideint 18 18 -> 1 +dddvi138 divideint 1120 1000 -> 1 +dddvi139 divideint 2.4 2 -> 1 +dddvi140 divideint 2.400 2 -> 1 +dddvi141 divideint 0.5 2.000 -> 0 +dddvi142 divideint 8.005 7 -> 1 +dddvi143 divideint 5 2 -> 2 +dddvi144 divideint 0 2 -> 0 +dddvi145 divideint 0.00 2 -> 0 + +-- Others +dddvi150 divideint 12345 4.999 -> 2469 +dddvi151 divideint 12345 4.99 -> 2473 +dddvi152 divideint 12345 4.9 -> 2519 +dddvi153 divideint 12345 5 -> 2469 +dddvi154 divideint 12345 5.1 -> 2420 +dddvi155 divideint 12345 5.01 -> 2464 +dddvi156 divideint 12345 5.001 -> 2468 +dddvi157 divideint 101 7.6 -> 13 + +-- Various flavours of divideint by 0 +dddvi201 divideint 0 0 -> NaN Division_undefined +dddvi202 divideint 0.0E5 0 -> NaN Division_undefined +dddvi203 divideint 0.000 0 -> NaN Division_undefined +dddvi204 divideint 0.0001 0 -> Infinity Division_by_zero +dddvi205 divideint 0.01 0 -> Infinity Division_by_zero +dddvi206 divideint 0.1 0 -> Infinity Division_by_zero +dddvi207 divideint 1 0 -> Infinity Division_by_zero +dddvi208 divideint 1 0.0 -> Infinity Division_by_zero +dddvi209 divideint 10 0.0 -> Infinity Division_by_zero +dddvi210 divideint 1E+100 0.0 -> Infinity Division_by_zero +dddvi211 divideint 1E+380 0 -> Infinity Division_by_zero +dddvi214 divideint -0.0001 0 -> -Infinity Division_by_zero +dddvi215 divideint -0.01 0 -> -Infinity Division_by_zero +dddvi216 divideint -0.1 0 -> -Infinity Division_by_zero +dddvi217 divideint -1 0 -> -Infinity Division_by_zero +dddvi218 divideint -1 0.0 -> -Infinity Division_by_zero +dddvi219 divideint -10 0.0 -> -Infinity Division_by_zero +dddvi220 divideint -1E+100 0.0 -> -Infinity Division_by_zero +dddvi221 divideint -1E+380 0 -> -Infinity Division_by_zero + +-- test some cases that are close to exponent overflow +dddvi270 divideint 1 1e384 -> 0 +dddvi271 divideint 1 0.9e384 -> 0 +dddvi272 divideint 1 0.99e384 -> 0 +dddvi273 divideint 1 0.9999999999999999e384 -> 0 +dddvi274 divideint 9e384 1 -> NaN Division_impossible +dddvi275 divideint 9.9e384 1 -> NaN Division_impossible +dddvi276 divideint 9.99e384 1 -> NaN Division_impossible +dddvi277 divideint 9.999999999999999e384 1 -> NaN Division_impossible + +dddvi280 divideint 0.1 9e-383 -> NaN Division_impossible +dddvi281 divideint 0.1 99e-383 -> NaN Division_impossible +dddvi282 divideint 0.1 999e-383 -> NaN Division_impossible +dddvi283 divideint 0.1 9e-382 -> NaN Division_impossible +dddvi284 divideint 0.1 99e-382 -> NaN Division_impossible + +-- GD edge cases: lhs smaller than rhs but more digits +dddvi301 divideint 0.9 2 -> 0 +dddvi302 divideint 0.9 2.0 -> 0 +dddvi303 divideint 0.9 2.1 -> 0 +dddvi304 divideint 0.9 2.00 -> 0 +dddvi305 divideint 0.9 2.01 -> 0 +dddvi306 divideint 0.12 1 -> 0 +dddvi307 divideint 0.12 1.0 -> 0 +dddvi308 divideint 0.12 1.00 -> 0 +dddvi309 divideint 0.12 1.0 -> 0 +dddvi310 divideint 0.12 1.00 -> 0 +dddvi311 divideint 0.12 2 -> 0 +dddvi312 divideint 0.12 2.0 -> 0 +dddvi313 divideint 0.12 2.1 -> 0 +dddvi314 divideint 0.12 2.00 -> 0 +dddvi315 divideint 0.12 2.01 -> 0 + +-- edge cases of impossible +dddvi330 divideint 1234567890123456 10 -> 123456789012345 +dddvi331 divideint 1234567890123456 1 -> 1234567890123456 +dddvi332 divideint 1234567890123456 0.1 -> NaN Division_impossible +dddvi333 divideint 1234567890123456 0.01 -> NaN Division_impossible + +-- overflow and underflow tests [from divide] +dddvi1051 divideint 1e+277 1e-311 -> NaN Division_impossible +dddvi1052 divideint 1e+277 -1e-311 -> NaN Division_impossible +dddvi1053 divideint -1e+277 1e-311 -> NaN Division_impossible +dddvi1054 divideint -1e+277 -1e-311 -> NaN Division_impossible +dddvi1055 divideint 1e-277 1e+311 -> 0 +dddvi1056 divideint 1e-277 -1e+311 -> -0 +dddvi1057 divideint -1e-277 1e+311 -> -0 +dddvi1058 divideint -1e-277 -1e+311 -> 0 + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dddvi1060 divideint 1e-291 1e+101 -> 0 +dddvi1061 divideint 1e-291 1e+102 -> 0 +dddvi1062 divideint 1e-291 1e+103 -> 0 +dddvi1063 divideint 1e-291 1e+104 -> 0 +dddvi1064 divideint 1e-291 1e+105 -> 0 +dddvi1065 divideint 1e-291 1e+106 -> 0 +dddvi1066 divideint 1e-291 1e+107 -> 0 +dddvi1067 divideint 1e-291 1e+108 -> 0 +dddvi1068 divideint 1e-291 1e+109 -> 0 +dddvi1069 divideint 1e-291 1e+110 -> 0 + +dddvi1101 divideint 1.0000E-394 1 -> 0 +dddvi1102 divideint 1.000E-394 1e+1 -> 0 +dddvi1103 divideint 1.00E-394 1e+2 -> 0 + +dddvi1118 divideint 1E-394 1e+4 -> 0 +dddvi1119 divideint 3E-394 -1e+5 -> -0 +dddvi1120 divideint 5E-394 1e+5 -> 0 + +dddvi1124 divideint 1E-394 -1e+4 -> -0 +dddvi1130 divideint 3.0E-394 -1e+5 -> -0 + +dddvi1131 divideint 1.0E-199 1e+200 -> 0 +dddvi1132 divideint 1.0E-199 1e+199 -> 0 +dddvi1133 divideint 1.0E-199 1e+198 -> 0 +dddvi1134 divideint 2.0E-199 2e+198 -> 0 +dddvi1135 divideint 4.0E-199 4e+198 -> 0 + +-- long operand checks +dddvi401 divideint 12345678000 100 -> 123456780 +dddvi402 divideint 1 12345678000 -> 0 +dddvi403 divideint 1234567800 10 -> 123456780 +dddvi404 divideint 1 1234567800 -> 0 +dddvi405 divideint 1234567890 10 -> 123456789 +dddvi406 divideint 1 1234567890 -> 0 +dddvi407 divideint 1234567891 10 -> 123456789 +dddvi408 divideint 1 1234567891 -> 0 +dddvi409 divideint 12345678901 100 -> 123456789 +dddvi410 divideint 1 12345678901 -> 0 +dddvi411 divideint 1234567896 10 -> 123456789 +dddvi412 divideint 1 1234567896 -> 0 +dddvi413 divideint 12345678948 100 -> 123456789 +dddvi414 divideint 12345678949 100 -> 123456789 +dddvi415 divideint 12345678950 100 -> 123456789 +dddvi416 divideint 12345678951 100 -> 123456789 +dddvi417 divideint 12345678999 100 -> 123456789 +dddvi441 divideint 12345678000 1 -> 12345678000 +dddvi442 divideint 1 12345678000 -> 0 +dddvi443 divideint 1234567800 1 -> 1234567800 +dddvi444 divideint 1 1234567800 -> 0 +dddvi445 divideint 1234567890 1 -> 1234567890 +dddvi446 divideint 1 1234567890 -> 0 +dddvi447 divideint 1234567891 1 -> 1234567891 +dddvi448 divideint 1 1234567891 -> 0 +dddvi449 divideint 12345678901 1 -> 12345678901 +dddvi450 divideint 1 12345678901 -> 0 +dddvi451 divideint 1234567896 1 -> 1234567896 +dddvi452 divideint 1 1234567896 -> 0 + +-- more zeros, etc. +dddvi531 divideint 5.00 1E-3 -> 5000 +dddvi532 divideint 00.00 0.000 -> NaN Division_undefined +dddvi533 divideint 00.00 0E-3 -> NaN Division_undefined +dddvi534 divideint 0 -0 -> NaN Division_undefined +dddvi535 divideint -0 0 -> NaN Division_undefined +dddvi536 divideint -0 -0 -> NaN Division_undefined + +dddvi541 divideint 0 -1 -> -0 +dddvi542 divideint -0 -1 -> 0 +dddvi543 divideint 0 1 -> 0 +dddvi544 divideint -0 1 -> -0 +dddvi545 divideint -1 0 -> -Infinity Division_by_zero +dddvi546 divideint -1 -0 -> Infinity Division_by_zero +dddvi547 divideint 1 0 -> Infinity Division_by_zero +dddvi548 divideint 1 -0 -> -Infinity Division_by_zero + +dddvi551 divideint 0.0 -1 -> -0 +dddvi552 divideint -0.0 -1 -> 0 +dddvi553 divideint 0.0 1 -> 0 +dddvi554 divideint -0.0 1 -> -0 +dddvi555 divideint -1.0 0 -> -Infinity Division_by_zero +dddvi556 divideint -1.0 -0 -> Infinity Division_by_zero +dddvi557 divideint 1.0 0 -> Infinity Division_by_zero +dddvi558 divideint 1.0 -0 -> -Infinity Division_by_zero + +dddvi561 divideint 0 -1.0 -> -0 +dddvi562 divideint -0 -1.0 -> 0 +dddvi563 divideint 0 1.0 -> 0 +dddvi564 divideint -0 1.0 -> -0 +dddvi565 divideint -1 0.0 -> -Infinity Division_by_zero +dddvi566 divideint -1 -0.0 -> Infinity Division_by_zero +dddvi567 divideint 1 0.0 -> Infinity Division_by_zero +dddvi568 divideint 1 -0.0 -> -Infinity Division_by_zero + +dddvi571 divideint 0.0 -1.0 -> -0 +dddvi572 divideint -0.0 -1.0 -> 0 +dddvi573 divideint 0.0 1.0 -> 0 +dddvi574 divideint -0.0 1.0 -> -0 +dddvi575 divideint -1.0 0.0 -> -Infinity Division_by_zero +dddvi576 divideint -1.0 -0.0 -> Infinity Division_by_zero +dddvi577 divideint 1.0 0.0 -> Infinity Division_by_zero +dddvi578 divideint 1.0 -0.0 -> -Infinity Division_by_zero + +-- Specials +dddvi580 divideint Inf -Inf -> NaN Invalid_operation +dddvi581 divideint Inf -1000 -> -Infinity +dddvi582 divideint Inf -1 -> -Infinity +dddvi583 divideint Inf -0 -> -Infinity +dddvi584 divideint Inf 0 -> Infinity +dddvi585 divideint Inf 1 -> Infinity +dddvi586 divideint Inf 1000 -> Infinity +dddvi587 divideint Inf Inf -> NaN Invalid_operation +dddvi588 divideint -1000 Inf -> -0 +dddvi589 divideint -Inf Inf -> NaN Invalid_operation +dddvi590 divideint -1 Inf -> -0 +dddvi591 divideint -0 Inf -> -0 +dddvi592 divideint 0 Inf -> 0 +dddvi593 divideint 1 Inf -> 0 +dddvi594 divideint 1000 Inf -> 0 +dddvi595 divideint Inf Inf -> NaN Invalid_operation + +dddvi600 divideint -Inf -Inf -> NaN Invalid_operation +dddvi601 divideint -Inf -1000 -> Infinity +dddvi602 divideint -Inf -1 -> Infinity +dddvi603 divideint -Inf -0 -> Infinity +dddvi604 divideint -Inf 0 -> -Infinity +dddvi605 divideint -Inf 1 -> -Infinity +dddvi606 divideint -Inf 1000 -> -Infinity +dddvi607 divideint -Inf Inf -> NaN Invalid_operation +dddvi608 divideint -1000 Inf -> -0 +dddvi609 divideint -Inf -Inf -> NaN Invalid_operation +dddvi610 divideint -1 -Inf -> 0 +dddvi611 divideint -0 -Inf -> 0 +dddvi612 divideint 0 -Inf -> -0 +dddvi613 divideint 1 -Inf -> -0 +dddvi614 divideint 1000 -Inf -> -0 +dddvi615 divideint Inf -Inf -> NaN Invalid_operation + +dddvi621 divideint NaN -Inf -> NaN +dddvi622 divideint NaN -1000 -> NaN +dddvi623 divideint NaN -1 -> NaN +dddvi624 divideint NaN -0 -> NaN +dddvi625 divideint NaN 0 -> NaN +dddvi626 divideint NaN 1 -> NaN +dddvi627 divideint NaN 1000 -> NaN +dddvi628 divideint NaN Inf -> NaN +dddvi629 divideint NaN NaN -> NaN +dddvi630 divideint -Inf NaN -> NaN +dddvi631 divideint -1000 NaN -> NaN +dddvi632 divideint -1 NaN -> NaN +dddvi633 divideint -0 NaN -> NaN +dddvi634 divideint 0 NaN -> NaN +dddvi635 divideint 1 NaN -> NaN +dddvi636 divideint 1000 NaN -> NaN +dddvi637 divideint Inf NaN -> NaN + +dddvi641 divideint sNaN -Inf -> NaN Invalid_operation +dddvi642 divideint sNaN -1000 -> NaN Invalid_operation +dddvi643 divideint sNaN -1 -> NaN Invalid_operation +dddvi644 divideint sNaN -0 -> NaN Invalid_operation +dddvi645 divideint sNaN 0 -> NaN Invalid_operation +dddvi646 divideint sNaN 1 -> NaN Invalid_operation +dddvi647 divideint sNaN 1000 -> NaN Invalid_operation +dddvi648 divideint sNaN NaN -> NaN Invalid_operation +dddvi649 divideint sNaN sNaN -> NaN Invalid_operation +dddvi650 divideint NaN sNaN -> NaN Invalid_operation +dddvi651 divideint -Inf sNaN -> NaN Invalid_operation +dddvi652 divideint -1000 sNaN -> NaN Invalid_operation +dddvi653 divideint -1 sNaN -> NaN Invalid_operation +dddvi654 divideint -0 sNaN -> NaN Invalid_operation +dddvi655 divideint 0 sNaN -> NaN Invalid_operation +dddvi656 divideint 1 sNaN -> NaN Invalid_operation +dddvi657 divideint 1000 sNaN -> NaN Invalid_operation +dddvi658 divideint Inf sNaN -> NaN Invalid_operation +dddvi659 divideint NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dddvi661 divideint NaN9 -Inf -> NaN9 +dddvi662 divideint NaN8 1000 -> NaN8 +dddvi663 divideint NaN7 Inf -> NaN7 +dddvi664 divideint -NaN6 NaN5 -> -NaN6 +dddvi665 divideint -Inf NaN4 -> NaN4 +dddvi666 divideint -1000 NaN3 -> NaN3 +dddvi667 divideint Inf -NaN2 -> -NaN2 + +dddvi671 divideint -sNaN99 -Inf -> -NaN99 Invalid_operation +dddvi672 divideint sNaN98 -1 -> NaN98 Invalid_operation +dddvi673 divideint sNaN97 NaN -> NaN97 Invalid_operation +dddvi674 divideint sNaN96 sNaN94 -> NaN96 Invalid_operation +dddvi675 divideint NaN95 sNaN93 -> NaN93 Invalid_operation +dddvi676 divideint -Inf sNaN92 -> NaN92 Invalid_operation +dddvi677 divideint 0 sNaN91 -> NaN91 Invalid_operation +dddvi678 divideint Inf -sNaN90 -> -NaN90 Invalid_operation +dddvi679 divideint NaN sNaN89 -> NaN89 Invalid_operation + +-- Null tests +dddvi900 divideint 10 # -> NaN Invalid_operation +dddvi901 divideint # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddEncode.decTest b/Lib/test/decimaltestdata/ddEncode.decTest index de9d31c0a6a..e91ec6143c2 100644 --- a/Lib/test/decimaltestdata/ddEncode.decTest +++ b/Lib/test/decimaltestdata/ddEncode.decTest @@ -1,495 +1,495 @@ ------------------------------------------------------------------------- --- ddEncode.decTest -- decimal eight-byte format testcases -- --- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- --- [Previously called decimal64.decTest] -version: 2.59 - --- This set of tests is for the eight-byte concrete representation. --- Its characteristics are: --- --- 1 bit sign --- 5 bits combination field --- 8 bits exponent continuation --- 50 bits coefficient continuation --- --- Total exponent length 10 bits --- Total coefficient length 54 bits (16 digits) --- --- Elimit = 767 (maximum encoded exponent) --- Emax = 384 (largest exponent value) --- Emin = -383 (smallest exponent value) --- bias = 398 (subtracted from encoded exponent) = -Etiny - --- The testcases here have only exactly representable data on the --- 'left-hand-side'; rounding from strings is tested in 'base' --- testcase groups. - -extended: 1 -clamp: 1 -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - --- General testcases --- (mostly derived from the Strawman 4 document and examples) -dece001 apply #A2300000000003D0 -> -7.50 -dece002 apply -7.50 -> #A2300000000003D0 --- derivative canonical plain strings -dece003 apply #A23c0000000003D0 -> -7.50E+3 -dece004 apply -7.50E+3 -> #A23c0000000003D0 -dece005 apply #A2380000000003D0 -> -750 -dece006 apply -750 -> #A2380000000003D0 -dece007 apply #A2340000000003D0 -> -75.0 -dece008 apply -75.0 -> #A2340000000003D0 -dece009 apply #A22c0000000003D0 -> -0.750 -dece010 apply -0.750 -> #A22c0000000003D0 -dece011 apply #A2280000000003D0 -> -0.0750 -dece012 apply -0.0750 -> #A2280000000003D0 -dece013 apply #A2200000000003D0 -> -0.000750 -dece014 apply -0.000750 -> #A2200000000003D0 -dece015 apply #A2180000000003D0 -> -0.00000750 -dece016 apply -0.00000750 -> #A2180000000003D0 -dece017 apply #A2140000000003D0 -> -7.50E-7 -dece018 apply -7.50E-7 -> #A2140000000003D0 - --- Normality -dece020 apply 1234567890123456 -> #263934b9c1e28e56 -dece021 apply -1234567890123456 -> #a63934b9c1e28e56 -dece022 apply 1234.567890123456 -> #260934b9c1e28e56 -dece023 apply #260934b9c1e28e56 -> 1234.567890123456 -dece024 apply 1111111111111111 -> #2638912449124491 -dece025 apply 9999999999999999 -> #6e38ff3fcff3fcff - --- Nmax and similar -dece031 apply 9999999999999999E+369 -> #77fcff3fcff3fcff -dece032 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff -dece033 apply #77fcff3fcff3fcff -> 9.999999999999999E+384 -dece034 apply 1.234567890123456E+384 -> #47fd34b9c1e28e56 -dece035 apply #47fd34b9c1e28e56 -> 1.234567890123456E+384 --- fold-downs (more below) -dece036 apply 1.23E+384 -> #47fd300000000000 Clamped -dece037 apply #47fd300000000000 -> 1.230000000000000E+384 -decd038 apply 1E+384 -> #47fc000000000000 Clamped -decd039 apply #47fc000000000000 -> 1.000000000000000E+384 - -decd051 apply 12345 -> #22380000000049c5 -decd052 apply #22380000000049c5 -> 12345 -decd053 apply 1234 -> #2238000000000534 -decd054 apply #2238000000000534 -> 1234 -decd055 apply 123 -> #22380000000000a3 -decd056 apply #22380000000000a3 -> 123 -decd057 apply 12 -> #2238000000000012 -decd058 apply #2238000000000012 -> 12 -decd059 apply 1 -> #2238000000000001 -decd060 apply #2238000000000001 -> 1 -decd061 apply 1.23 -> #22300000000000a3 -decd062 apply #22300000000000a3 -> 1.23 -decd063 apply 123.45 -> #22300000000049c5 -decd064 apply #22300000000049c5 -> 123.45 - --- Nmin and below -decd071 apply 1E-383 -> #003c000000000001 -decd072 apply #003c000000000001 -> 1E-383 -decd073 apply 1.000000000000000E-383 -> #0400000000000000 -decd074 apply #0400000000000000 -> 1.000000000000000E-383 -decd075 apply 1.000000000000001E-383 -> #0400000000000001 -decd076 apply #0400000000000001 -> 1.000000000000001E-383 - -decd077 apply 0.100000000000000E-383 -> #0000800000000000 Subnormal -decd078 apply #0000800000000000 -> 1.00000000000000E-384 Subnormal -decd079 apply 0.000000000000010E-383 -> #0000000000000010 Subnormal -decd080 apply #0000000000000010 -> 1.0E-397 Subnormal -decd081 apply 0.00000000000001E-383 -> #0004000000000001 Subnormal -decd082 apply #0004000000000001 -> 1E-397 Subnormal -decd083 apply 0.000000000000001E-383 -> #0000000000000001 Subnormal -decd084 apply #0000000000000001 -> 1E-398 Subnormal --- next is smallest all-nines -decd085 apply 9999999999999999E-398 -> #6400ff3fcff3fcff -decd086 apply #6400ff3fcff3fcff -> 9.999999999999999E-383 --- and a problematic divide result -decd088 apply 1.111111111111111E-383 -> #0400912449124491 -decd089 apply #0400912449124491 -> 1.111111111111111E-383 - --- forties -decd090 apply 40 -> #2238000000000040 -decd091 apply 39.99 -> #2230000000000cff - --- underflows cannot be tested as all LHS exact - --- Same again, negatives --- Nmax and similar -decd122 apply -9.999999999999999E+384 -> #f7fcff3fcff3fcff -decd123 apply #f7fcff3fcff3fcff -> -9.999999999999999E+384 -decd124 apply -1.234567890123456E+384 -> #c7fd34b9c1e28e56 -decd125 apply #c7fd34b9c1e28e56 -> -1.234567890123456E+384 --- fold-downs (more below) -decd130 apply -1.23E+384 -> #c7fd300000000000 Clamped -decd131 apply #c7fd300000000000 -> -1.230000000000000E+384 -decd132 apply -1E+384 -> #c7fc000000000000 Clamped -decd133 apply #c7fc000000000000 -> -1.000000000000000E+384 - --- overflows -decd151 apply -12345 -> #a2380000000049c5 -decd152 apply #a2380000000049c5 -> -12345 -decd153 apply -1234 -> #a238000000000534 -decd154 apply #a238000000000534 -> -1234 -decd155 apply -123 -> #a2380000000000a3 -decd156 apply #a2380000000000a3 -> -123 -decd157 apply -12 -> #a238000000000012 -decd158 apply #a238000000000012 -> -12 -decd159 apply -1 -> #a238000000000001 -decd160 apply #a238000000000001 -> -1 -decd161 apply -1.23 -> #a2300000000000a3 -decd162 apply #a2300000000000a3 -> -1.23 -decd163 apply -123.45 -> #a2300000000049c5 -decd164 apply #a2300000000049c5 -> -123.45 - --- Nmin and below -decd171 apply -1E-383 -> #803c000000000001 -decd172 apply #803c000000000001 -> -1E-383 -decd173 apply -1.000000000000000E-383 -> #8400000000000000 -decd174 apply #8400000000000000 -> -1.000000000000000E-383 -decd175 apply -1.000000000000001E-383 -> #8400000000000001 -decd176 apply #8400000000000001 -> -1.000000000000001E-383 - -decd177 apply -0.100000000000000E-383 -> #8000800000000000 Subnormal -decd178 apply #8000800000000000 -> -1.00000000000000E-384 Subnormal -decd179 apply -0.000000000000010E-383 -> #8000000000000010 Subnormal -decd180 apply #8000000000000010 -> -1.0E-397 Subnormal -decd181 apply -0.00000000000001E-383 -> #8004000000000001 Subnormal -decd182 apply #8004000000000001 -> -1E-397 Subnormal -decd183 apply -0.000000000000001E-383 -> #8000000000000001 Subnormal -decd184 apply #8000000000000001 -> -1E-398 Subnormal --- next is smallest all-nines -decd185 apply -9999999999999999E-398 -> #e400ff3fcff3fcff -decd186 apply #e400ff3fcff3fcff -> -9.999999999999999E-383 --- and a tricky subnormal -decd187 apply 1.11111111111524E-384 -> #00009124491246a4 Subnormal -decd188 apply #00009124491246a4 -> 1.11111111111524E-384 Subnormal - --- near-underflows -decd189 apply -1e-398 -> #8000000000000001 Subnormal -decd190 apply -1.0e-398 -> #8000000000000001 Subnormal Rounded - --- zeros -decd401 apply 0E-500 -> #0000000000000000 Clamped -decd402 apply 0E-400 -> #0000000000000000 Clamped -decd403 apply 0E-398 -> #0000000000000000 -decd404 apply #0000000000000000 -> 0E-398 -decd405 apply 0.000000000000000E-383 -> #0000000000000000 -decd406 apply #0000000000000000 -> 0E-398 -decd407 apply 0E-2 -> #2230000000000000 -decd408 apply #2230000000000000 -> 0.00 -decd409 apply 0 -> #2238000000000000 -decd410 apply #2238000000000000 -> 0 -decd411 apply 0E+3 -> #2244000000000000 -decd412 apply #2244000000000000 -> 0E+3 -decd413 apply 0E+369 -> #43fc000000000000 -decd414 apply #43fc000000000000 -> 0E+369 --- clamped zeros... -decd415 apply 0E+370 -> #43fc000000000000 Clamped -decd416 apply #43fc000000000000 -> 0E+369 -decd417 apply 0E+384 -> #43fc000000000000 Clamped -decd418 apply #43fc000000000000 -> 0E+369 -decd419 apply 0E+400 -> #43fc000000000000 Clamped -decd420 apply #43fc000000000000 -> 0E+369 -decd421 apply 0E+500 -> #43fc000000000000 Clamped -decd422 apply #43fc000000000000 -> 0E+369 - --- negative zeros -decd431 apply -0E-400 -> #8000000000000000 Clamped -decd432 apply -0E-400 -> #8000000000000000 Clamped -decd433 apply -0E-398 -> #8000000000000000 -decd434 apply #8000000000000000 -> -0E-398 -decd435 apply -0.000000000000000E-383 -> #8000000000000000 -decd436 apply #8000000000000000 -> -0E-398 -decd437 apply -0E-2 -> #a230000000000000 -decd438 apply #a230000000000000 -> -0.00 -decd439 apply -0 -> #a238000000000000 -decd440 apply #a238000000000000 -> -0 -decd441 apply -0E+3 -> #a244000000000000 -decd442 apply #a244000000000000 -> -0E+3 -decd443 apply -0E+369 -> #c3fc000000000000 -decd444 apply #c3fc000000000000 -> -0E+369 --- clamped zeros... -decd445 apply -0E+370 -> #c3fc000000000000 Clamped -decd446 apply #c3fc000000000000 -> -0E+369 -decd447 apply -0E+384 -> #c3fc000000000000 Clamped -decd448 apply #c3fc000000000000 -> -0E+369 -decd449 apply -0E+400 -> #c3fc000000000000 Clamped -decd450 apply #c3fc000000000000 -> -0E+369 -decd451 apply -0E+500 -> #c3fc000000000000 Clamped -decd452 apply #c3fc000000000000 -> -0E+369 - --- exponents -decd460 apply #225c000000000007 -> 7E+9 -decd461 apply 7E+9 -> #225c000000000007 -decd462 apply #23c4000000000007 -> 7E+99 -decd463 apply 7E+99 -> #23c4000000000007 - --- Specials -decd500 apply Infinity -> #7800000000000000 -decd501 apply #7878787878787878 -> #7800000000000000 -decd502 apply #7800000000000000 -> Infinity -decd503 apply #7979797979797979 -> #7800000000000000 -decd504 apply #7900000000000000 -> Infinity -decd505 apply #7a7a7a7a7a7a7a7a -> #7800000000000000 -decd506 apply #7a00000000000000 -> Infinity -decd507 apply #7b7b7b7b7b7b7b7b -> #7800000000000000 -decd508 apply #7b00000000000000 -> Infinity - -decd509 apply NaN -> #7c00000000000000 -decd510 apply #7c7c7c7c7c7c7c7c -> #7c007c7c7c7c7c7c -decd511 apply #7c00000000000000 -> NaN -decd512 apply #7d7d7d7d7d7d7d7d -> #7c017d7d7d7d7d7d -decd513 apply #7d00000000000000 -> NaN -decd514 apply #7e7e7e7e7e7e7e7e -> #7e007e7e7e7e7c7e -decd515 apply #7e00000000000000 -> sNaN -decd516 apply #7f7f7f7f7f7f7f7f -> #7e007f7f7f7f7c7f -decd517 apply #7f00000000000000 -> sNaN -decd518 apply #7fffffffffffffff -> sNaN999999999999999 -decd519 apply #7fffffffffffffff -> #7e00ff3fcff3fcff - -decd520 apply -Infinity -> #f800000000000000 -decd521 apply #f878787878787878 -> #f800000000000000 -decd522 apply #f800000000000000 -> -Infinity -decd523 apply #f979797979797979 -> #f800000000000000 -decd524 apply #f900000000000000 -> -Infinity -decd525 apply #fa7a7a7a7a7a7a7a -> #f800000000000000 -decd526 apply #fa00000000000000 -> -Infinity -decd527 apply #fb7b7b7b7b7b7b7b -> #f800000000000000 -decd528 apply #fb00000000000000 -> -Infinity - -decd529 apply -NaN -> #fc00000000000000 -decd530 apply #fc7c7c7c7c7c7c7c -> #fc007c7c7c7c7c7c -decd531 apply #fc00000000000000 -> -NaN -decd532 apply #fd7d7d7d7d7d7d7d -> #fc017d7d7d7d7d7d -decd533 apply #fd00000000000000 -> -NaN -decd534 apply #fe7e7e7e7e7e7e7e -> #fe007e7e7e7e7c7e -decd535 apply #fe00000000000000 -> -sNaN -decd536 apply #ff7f7f7f7f7f7f7f -> #fe007f7f7f7f7c7f -decd537 apply #ff00000000000000 -> -sNaN -decd538 apply #ffffffffffffffff -> -sNaN999999999999999 -decd539 apply #ffffffffffffffff -> #fe00ff3fcff3fcff - --- diagnostic NaNs -decd540 apply NaN -> #7c00000000000000 -decd541 apply NaN0 -> #7c00000000000000 -decd542 apply NaN1 -> #7c00000000000001 -decd543 apply NaN12 -> #7c00000000000012 -decd544 apply NaN79 -> #7c00000000000079 -decd545 apply NaN12345 -> #7c000000000049c5 -decd546 apply NaN123456 -> #7c00000000028e56 -decd547 apply NaN799799 -> #7c000000000f7fdf -decd548 apply NaN799799799799799 -> #7c03dff7fdff7fdf -decd549 apply NaN999999999999999 -> #7c00ff3fcff3fcff --- too many digits - --- fold-down full sequence -decd601 apply 1E+384 -> #47fc000000000000 Clamped -decd602 apply #47fc000000000000 -> 1.000000000000000E+384 -decd603 apply 1E+383 -> #43fc800000000000 Clamped -decd604 apply #43fc800000000000 -> 1.00000000000000E+383 -decd605 apply 1E+382 -> #43fc100000000000 Clamped -decd606 apply #43fc100000000000 -> 1.0000000000000E+382 -decd607 apply 1E+381 -> #43fc010000000000 Clamped -decd608 apply #43fc010000000000 -> 1.000000000000E+381 -decd609 apply 1E+380 -> #43fc002000000000 Clamped -decd610 apply #43fc002000000000 -> 1.00000000000E+380 -decd611 apply 1E+379 -> #43fc000400000000 Clamped -decd612 apply #43fc000400000000 -> 1.0000000000E+379 -decd613 apply 1E+378 -> #43fc000040000000 Clamped -decd614 apply #43fc000040000000 -> 1.000000000E+378 -decd615 apply 1E+377 -> #43fc000008000000 Clamped -decd616 apply #43fc000008000000 -> 1.00000000E+377 -decd617 apply 1E+376 -> #43fc000001000000 Clamped -decd618 apply #43fc000001000000 -> 1.0000000E+376 -decd619 apply 1E+375 -> #43fc000000100000 Clamped -decd620 apply #43fc000000100000 -> 1.000000E+375 -decd621 apply 1E+374 -> #43fc000000020000 Clamped -decd622 apply #43fc000000020000 -> 1.00000E+374 -decd623 apply 1E+373 -> #43fc000000004000 Clamped -decd624 apply #43fc000000004000 -> 1.0000E+373 -decd625 apply 1E+372 -> #43fc000000000400 Clamped -decd626 apply #43fc000000000400 -> 1.000E+372 -decd627 apply 1E+371 -> #43fc000000000080 Clamped -decd628 apply #43fc000000000080 -> 1.00E+371 -decd629 apply 1E+370 -> #43fc000000000010 Clamped -decd630 apply #43fc000000000010 -> 1.0E+370 -decd631 apply 1E+369 -> #43fc000000000001 -decd632 apply #43fc000000000001 -> 1E+369 -decd633 apply 1E+368 -> #43f8000000000001 -decd634 apply #43f8000000000001 -> 1E+368 --- same with 9s -decd641 apply 9E+384 -> #77fc000000000000 Clamped -decd642 apply #77fc000000000000 -> 9.000000000000000E+384 -decd643 apply 9E+383 -> #43fc8c0000000000 Clamped -decd644 apply #43fc8c0000000000 -> 9.00000000000000E+383 -decd645 apply 9E+382 -> #43fc1a0000000000 Clamped -decd646 apply #43fc1a0000000000 -> 9.0000000000000E+382 -decd647 apply 9E+381 -> #43fc090000000000 Clamped -decd648 apply #43fc090000000000 -> 9.000000000000E+381 -decd649 apply 9E+380 -> #43fc002300000000 Clamped -decd650 apply #43fc002300000000 -> 9.00000000000E+380 -decd651 apply 9E+379 -> #43fc000680000000 Clamped -decd652 apply #43fc000680000000 -> 9.0000000000E+379 -decd653 apply 9E+378 -> #43fc000240000000 Clamped -decd654 apply #43fc000240000000 -> 9.000000000E+378 -decd655 apply 9E+377 -> #43fc000008c00000 Clamped -decd656 apply #43fc000008c00000 -> 9.00000000E+377 -decd657 apply 9E+376 -> #43fc000001a00000 Clamped -decd658 apply #43fc000001a00000 -> 9.0000000E+376 -decd659 apply 9E+375 -> #43fc000000900000 Clamped -decd660 apply #43fc000000900000 -> 9.000000E+375 -decd661 apply 9E+374 -> #43fc000000023000 Clamped -decd662 apply #43fc000000023000 -> 9.00000E+374 -decd663 apply 9E+373 -> #43fc000000006800 Clamped -decd664 apply #43fc000000006800 -> 9.0000E+373 -decd665 apply 9E+372 -> #43fc000000002400 Clamped -decd666 apply #43fc000000002400 -> 9.000E+372 -decd667 apply 9E+371 -> #43fc00000000008c Clamped -decd668 apply #43fc00000000008c -> 9.00E+371 -decd669 apply 9E+370 -> #43fc00000000001a Clamped -decd670 apply #43fc00000000001a -> 9.0E+370 -decd671 apply 9E+369 -> #43fc000000000009 -decd672 apply #43fc000000000009 -> 9E+369 -decd673 apply 9E+368 -> #43f8000000000009 -decd674 apply #43f8000000000009 -> 9E+368 - - --- Selected DPD codes -decd700 apply #2238000000000000 -> 0 -decd701 apply #2238000000000009 -> 9 -decd702 apply #2238000000000010 -> 10 -decd703 apply #2238000000000019 -> 19 -decd704 apply #2238000000000020 -> 20 -decd705 apply #2238000000000029 -> 29 -decd706 apply #2238000000000030 -> 30 -decd707 apply #2238000000000039 -> 39 -decd708 apply #2238000000000040 -> 40 -decd709 apply #2238000000000049 -> 49 -decd710 apply #2238000000000050 -> 50 -decd711 apply #2238000000000059 -> 59 -decd712 apply #2238000000000060 -> 60 -decd713 apply #2238000000000069 -> 69 -decd714 apply #2238000000000070 -> 70 -decd715 apply #2238000000000071 -> 71 -decd716 apply #2238000000000072 -> 72 -decd717 apply #2238000000000073 -> 73 -decd718 apply #2238000000000074 -> 74 -decd719 apply #2238000000000075 -> 75 -decd720 apply #2238000000000076 -> 76 -decd721 apply #2238000000000077 -> 77 -decd722 apply #2238000000000078 -> 78 -decd723 apply #2238000000000079 -> 79 - -decd725 apply #223800000000029e -> 994 -decd726 apply #223800000000029f -> 995 -decd727 apply #22380000000002a0 -> 520 -decd728 apply #22380000000002a1 -> 521 --- from telco test data -decd730 apply #2238000000000188 -> 308 -decd731 apply #22380000000001a3 -> 323 -decd732 apply #223800000000002a -> 82 -decd733 apply #22380000000001a9 -> 329 -decd734 apply #2238000000000081 -> 101 -decd735 apply #22380000000002a2 -> 522 - --- DPD: one of each of the huffman groups -decd740 apply #22380000000003f7 -> 777 -decd741 apply #22380000000003f8 -> 778 -decd742 apply #22380000000003eb -> 787 -decd743 apply #223800000000037d -> 877 -decd744 apply #223800000000039f -> 997 -decd745 apply #22380000000003bf -> 979 -decd746 apply #22380000000003df -> 799 -decd747 apply #223800000000006e -> 888 - --- DPD all-highs cases (includes the 24 redundant codes) -decd750 apply #223800000000006e -> 888 -decd751 apply #223800000000016e -> 888 -decd752 apply #223800000000026e -> 888 -decd753 apply #223800000000036e -> 888 -decd754 apply #223800000000006f -> 889 -decd755 apply #223800000000016f -> 889 -decd756 apply #223800000000026f -> 889 -decd757 apply #223800000000036f -> 889 - -decd760 apply #223800000000007e -> 898 -decd761 apply #223800000000017e -> 898 -decd762 apply #223800000000027e -> 898 -decd763 apply #223800000000037e -> 898 -decd764 apply #223800000000007f -> 899 -decd765 apply #223800000000017f -> 899 -decd766 apply #223800000000027f -> 899 -decd767 apply #223800000000037f -> 899 - -decd770 apply #22380000000000ee -> 988 -decd771 apply #22380000000001ee -> 988 -decd772 apply #22380000000002ee -> 988 -decd773 apply #22380000000003ee -> 988 -decd774 apply #22380000000000ef -> 989 -decd775 apply #22380000000001ef -> 989 -decd776 apply #22380000000002ef -> 989 -decd777 apply #22380000000003ef -> 989 - -decd780 apply #22380000000000fe -> 998 -decd781 apply #22380000000001fe -> 998 -decd782 apply #22380000000002fe -> 998 -decd783 apply #22380000000003fe -> 998 -decd784 apply #22380000000000ff -> 999 -decd785 apply #22380000000001ff -> 999 -decd786 apply #22380000000002ff -> 999 -decd787 apply #22380000000003ff -> 999 - --- values around [u]int32 edges (zeros done earlier) -decd800 apply -2147483646 -> #a23800008c78af46 -decd801 apply -2147483647 -> #a23800008c78af47 -decd802 apply -2147483648 -> #a23800008c78af48 -decd803 apply -2147483649 -> #a23800008c78af49 -decd804 apply 2147483646 -> #223800008c78af46 -decd805 apply 2147483647 -> #223800008c78af47 -decd806 apply 2147483648 -> #223800008c78af48 -decd807 apply 2147483649 -> #223800008c78af49 -decd808 apply 4294967294 -> #2238000115afb55a -decd809 apply 4294967295 -> #2238000115afb55b -decd810 apply 4294967296 -> #2238000115afb57a -decd811 apply 4294967297 -> #2238000115afb57b - -decd820 apply #a23800008c78af46 -> -2147483646 -decd821 apply #a23800008c78af47 -> -2147483647 -decd822 apply #a23800008c78af48 -> -2147483648 -decd823 apply #a23800008c78af49 -> -2147483649 -decd824 apply #223800008c78af46 -> 2147483646 -decd825 apply #223800008c78af47 -> 2147483647 -decd826 apply #223800008c78af48 -> 2147483648 -decd827 apply #223800008c78af49 -> 2147483649 -decd828 apply #2238000115afb55a -> 4294967294 -decd829 apply #2238000115afb55b -> 4294967295 -decd830 apply #2238000115afb57a -> 4294967296 -decd831 apply #2238000115afb57b -> 4294967297 - --- for narrowing -decd840 apply #2870000000000000 -> 2.000000000000000E-99 - --- some miscellaneous -decd850 apply #0004070000000000 -> 7.000000000000E-385 Subnormal -decd851 apply #0008000000020000 -> 1.00000E-391 Subnormal - +------------------------------------------------------------------------ +-- ddEncode.decTest -- decimal eight-byte format testcases -- +-- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +-- [Previously called decimal64.decTest] +version: 2.59 + +-- This set of tests is for the eight-byte concrete representation. +-- Its characteristics are: +-- +-- 1 bit sign +-- 5 bits combination field +-- 8 bits exponent continuation +-- 50 bits coefficient continuation +-- +-- Total exponent length 10 bits +-- Total coefficient length 54 bits (16 digits) +-- +-- Elimit = 767 (maximum encoded exponent) +-- Emax = 384 (largest exponent value) +-- Emin = -383 (smallest exponent value) +-- bias = 398 (subtracted from encoded exponent) = -Etiny + +-- The testcases here have only exactly representable data on the +-- 'left-hand-side'; rounding from strings is tested in 'base' +-- testcase groups. + +extended: 1 +clamp: 1 +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +-- General testcases +-- (mostly derived from the Strawman 4 document and examples) +dece001 apply #A2300000000003D0 -> -7.50 +dece002 apply -7.50 -> #A2300000000003D0 +-- derivative canonical plain strings +dece003 apply #A23c0000000003D0 -> -7.50E+3 +dece004 apply -7.50E+3 -> #A23c0000000003D0 +dece005 apply #A2380000000003D0 -> -750 +dece006 apply -750 -> #A2380000000003D0 +dece007 apply #A2340000000003D0 -> -75.0 +dece008 apply -75.0 -> #A2340000000003D0 +dece009 apply #A22c0000000003D0 -> -0.750 +dece010 apply -0.750 -> #A22c0000000003D0 +dece011 apply #A2280000000003D0 -> -0.0750 +dece012 apply -0.0750 -> #A2280000000003D0 +dece013 apply #A2200000000003D0 -> -0.000750 +dece014 apply -0.000750 -> #A2200000000003D0 +dece015 apply #A2180000000003D0 -> -0.00000750 +dece016 apply -0.00000750 -> #A2180000000003D0 +dece017 apply #A2140000000003D0 -> -7.50E-7 +dece018 apply -7.50E-7 -> #A2140000000003D0 + +-- Normality +dece020 apply 1234567890123456 -> #263934b9c1e28e56 +dece021 apply -1234567890123456 -> #a63934b9c1e28e56 +dece022 apply 1234.567890123456 -> #260934b9c1e28e56 +dece023 apply #260934b9c1e28e56 -> 1234.567890123456 +dece024 apply 1111111111111111 -> #2638912449124491 +dece025 apply 9999999999999999 -> #6e38ff3fcff3fcff + +-- Nmax and similar +dece031 apply 9999999999999999E+369 -> #77fcff3fcff3fcff +dece032 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff +dece033 apply #77fcff3fcff3fcff -> 9.999999999999999E+384 +dece034 apply 1.234567890123456E+384 -> #47fd34b9c1e28e56 +dece035 apply #47fd34b9c1e28e56 -> 1.234567890123456E+384 +-- fold-downs (more below) +dece036 apply 1.23E+384 -> #47fd300000000000 Clamped +dece037 apply #47fd300000000000 -> 1.230000000000000E+384 +decd038 apply 1E+384 -> #47fc000000000000 Clamped +decd039 apply #47fc000000000000 -> 1.000000000000000E+384 + +decd051 apply 12345 -> #22380000000049c5 +decd052 apply #22380000000049c5 -> 12345 +decd053 apply 1234 -> #2238000000000534 +decd054 apply #2238000000000534 -> 1234 +decd055 apply 123 -> #22380000000000a3 +decd056 apply #22380000000000a3 -> 123 +decd057 apply 12 -> #2238000000000012 +decd058 apply #2238000000000012 -> 12 +decd059 apply 1 -> #2238000000000001 +decd060 apply #2238000000000001 -> 1 +decd061 apply 1.23 -> #22300000000000a3 +decd062 apply #22300000000000a3 -> 1.23 +decd063 apply 123.45 -> #22300000000049c5 +decd064 apply #22300000000049c5 -> 123.45 + +-- Nmin and below +decd071 apply 1E-383 -> #003c000000000001 +decd072 apply #003c000000000001 -> 1E-383 +decd073 apply 1.000000000000000E-383 -> #0400000000000000 +decd074 apply #0400000000000000 -> 1.000000000000000E-383 +decd075 apply 1.000000000000001E-383 -> #0400000000000001 +decd076 apply #0400000000000001 -> 1.000000000000001E-383 + +decd077 apply 0.100000000000000E-383 -> #0000800000000000 Subnormal +decd078 apply #0000800000000000 -> 1.00000000000000E-384 Subnormal +decd079 apply 0.000000000000010E-383 -> #0000000000000010 Subnormal +decd080 apply #0000000000000010 -> 1.0E-397 Subnormal +decd081 apply 0.00000000000001E-383 -> #0004000000000001 Subnormal +decd082 apply #0004000000000001 -> 1E-397 Subnormal +decd083 apply 0.000000000000001E-383 -> #0000000000000001 Subnormal +decd084 apply #0000000000000001 -> 1E-398 Subnormal +-- next is smallest all-nines +decd085 apply 9999999999999999E-398 -> #6400ff3fcff3fcff +decd086 apply #6400ff3fcff3fcff -> 9.999999999999999E-383 +-- and a problematic divide result +decd088 apply 1.111111111111111E-383 -> #0400912449124491 +decd089 apply #0400912449124491 -> 1.111111111111111E-383 + +-- forties +decd090 apply 40 -> #2238000000000040 +decd091 apply 39.99 -> #2230000000000cff + +-- underflows cannot be tested as all LHS exact + +-- Same again, negatives +-- Nmax and similar +decd122 apply -9.999999999999999E+384 -> #f7fcff3fcff3fcff +decd123 apply #f7fcff3fcff3fcff -> -9.999999999999999E+384 +decd124 apply -1.234567890123456E+384 -> #c7fd34b9c1e28e56 +decd125 apply #c7fd34b9c1e28e56 -> -1.234567890123456E+384 +-- fold-downs (more below) +decd130 apply -1.23E+384 -> #c7fd300000000000 Clamped +decd131 apply #c7fd300000000000 -> -1.230000000000000E+384 +decd132 apply -1E+384 -> #c7fc000000000000 Clamped +decd133 apply #c7fc000000000000 -> -1.000000000000000E+384 + +-- overflows +decd151 apply -12345 -> #a2380000000049c5 +decd152 apply #a2380000000049c5 -> -12345 +decd153 apply -1234 -> #a238000000000534 +decd154 apply #a238000000000534 -> -1234 +decd155 apply -123 -> #a2380000000000a3 +decd156 apply #a2380000000000a3 -> -123 +decd157 apply -12 -> #a238000000000012 +decd158 apply #a238000000000012 -> -12 +decd159 apply -1 -> #a238000000000001 +decd160 apply #a238000000000001 -> -1 +decd161 apply -1.23 -> #a2300000000000a3 +decd162 apply #a2300000000000a3 -> -1.23 +decd163 apply -123.45 -> #a2300000000049c5 +decd164 apply #a2300000000049c5 -> -123.45 + +-- Nmin and below +decd171 apply -1E-383 -> #803c000000000001 +decd172 apply #803c000000000001 -> -1E-383 +decd173 apply -1.000000000000000E-383 -> #8400000000000000 +decd174 apply #8400000000000000 -> -1.000000000000000E-383 +decd175 apply -1.000000000000001E-383 -> #8400000000000001 +decd176 apply #8400000000000001 -> -1.000000000000001E-383 + +decd177 apply -0.100000000000000E-383 -> #8000800000000000 Subnormal +decd178 apply #8000800000000000 -> -1.00000000000000E-384 Subnormal +decd179 apply -0.000000000000010E-383 -> #8000000000000010 Subnormal +decd180 apply #8000000000000010 -> -1.0E-397 Subnormal +decd181 apply -0.00000000000001E-383 -> #8004000000000001 Subnormal +decd182 apply #8004000000000001 -> -1E-397 Subnormal +decd183 apply -0.000000000000001E-383 -> #8000000000000001 Subnormal +decd184 apply #8000000000000001 -> -1E-398 Subnormal +-- next is smallest all-nines +decd185 apply -9999999999999999E-398 -> #e400ff3fcff3fcff +decd186 apply #e400ff3fcff3fcff -> -9.999999999999999E-383 +-- and a tricky subnormal +decd187 apply 1.11111111111524E-384 -> #00009124491246a4 Subnormal +decd188 apply #00009124491246a4 -> 1.11111111111524E-384 Subnormal + +-- near-underflows +decd189 apply -1e-398 -> #8000000000000001 Subnormal +decd190 apply -1.0e-398 -> #8000000000000001 Subnormal Rounded + +-- zeros +decd401 apply 0E-500 -> #0000000000000000 Clamped +decd402 apply 0E-400 -> #0000000000000000 Clamped +decd403 apply 0E-398 -> #0000000000000000 +decd404 apply #0000000000000000 -> 0E-398 +decd405 apply 0.000000000000000E-383 -> #0000000000000000 +decd406 apply #0000000000000000 -> 0E-398 +decd407 apply 0E-2 -> #2230000000000000 +decd408 apply #2230000000000000 -> 0.00 +decd409 apply 0 -> #2238000000000000 +decd410 apply #2238000000000000 -> 0 +decd411 apply 0E+3 -> #2244000000000000 +decd412 apply #2244000000000000 -> 0E+3 +decd413 apply 0E+369 -> #43fc000000000000 +decd414 apply #43fc000000000000 -> 0E+369 +-- clamped zeros... +decd415 apply 0E+370 -> #43fc000000000000 Clamped +decd416 apply #43fc000000000000 -> 0E+369 +decd417 apply 0E+384 -> #43fc000000000000 Clamped +decd418 apply #43fc000000000000 -> 0E+369 +decd419 apply 0E+400 -> #43fc000000000000 Clamped +decd420 apply #43fc000000000000 -> 0E+369 +decd421 apply 0E+500 -> #43fc000000000000 Clamped +decd422 apply #43fc000000000000 -> 0E+369 + +-- negative zeros +decd431 apply -0E-400 -> #8000000000000000 Clamped +decd432 apply -0E-400 -> #8000000000000000 Clamped +decd433 apply -0E-398 -> #8000000000000000 +decd434 apply #8000000000000000 -> -0E-398 +decd435 apply -0.000000000000000E-383 -> #8000000000000000 +decd436 apply #8000000000000000 -> -0E-398 +decd437 apply -0E-2 -> #a230000000000000 +decd438 apply #a230000000000000 -> -0.00 +decd439 apply -0 -> #a238000000000000 +decd440 apply #a238000000000000 -> -0 +decd441 apply -0E+3 -> #a244000000000000 +decd442 apply #a244000000000000 -> -0E+3 +decd443 apply -0E+369 -> #c3fc000000000000 +decd444 apply #c3fc000000000000 -> -0E+369 +-- clamped zeros... +decd445 apply -0E+370 -> #c3fc000000000000 Clamped +decd446 apply #c3fc000000000000 -> -0E+369 +decd447 apply -0E+384 -> #c3fc000000000000 Clamped +decd448 apply #c3fc000000000000 -> -0E+369 +decd449 apply -0E+400 -> #c3fc000000000000 Clamped +decd450 apply #c3fc000000000000 -> -0E+369 +decd451 apply -0E+500 -> #c3fc000000000000 Clamped +decd452 apply #c3fc000000000000 -> -0E+369 + +-- exponents +decd460 apply #225c000000000007 -> 7E+9 +decd461 apply 7E+9 -> #225c000000000007 +decd462 apply #23c4000000000007 -> 7E+99 +decd463 apply 7E+99 -> #23c4000000000007 + +-- Specials +decd500 apply Infinity -> #7800000000000000 +decd501 apply #7878787878787878 -> #7800000000000000 +decd502 apply #7800000000000000 -> Infinity +decd503 apply #7979797979797979 -> #7800000000000000 +decd504 apply #7900000000000000 -> Infinity +decd505 apply #7a7a7a7a7a7a7a7a -> #7800000000000000 +decd506 apply #7a00000000000000 -> Infinity +decd507 apply #7b7b7b7b7b7b7b7b -> #7800000000000000 +decd508 apply #7b00000000000000 -> Infinity + +decd509 apply NaN -> #7c00000000000000 +decd510 apply #7c7c7c7c7c7c7c7c -> #7c007c7c7c7c7c7c +decd511 apply #7c00000000000000 -> NaN +decd512 apply #7d7d7d7d7d7d7d7d -> #7c017d7d7d7d7d7d +decd513 apply #7d00000000000000 -> NaN +decd514 apply #7e7e7e7e7e7e7e7e -> #7e007e7e7e7e7c7e +decd515 apply #7e00000000000000 -> sNaN +decd516 apply #7f7f7f7f7f7f7f7f -> #7e007f7f7f7f7c7f +decd517 apply #7f00000000000000 -> sNaN +decd518 apply #7fffffffffffffff -> sNaN999999999999999 +decd519 apply #7fffffffffffffff -> #7e00ff3fcff3fcff + +decd520 apply -Infinity -> #f800000000000000 +decd521 apply #f878787878787878 -> #f800000000000000 +decd522 apply #f800000000000000 -> -Infinity +decd523 apply #f979797979797979 -> #f800000000000000 +decd524 apply #f900000000000000 -> -Infinity +decd525 apply #fa7a7a7a7a7a7a7a -> #f800000000000000 +decd526 apply #fa00000000000000 -> -Infinity +decd527 apply #fb7b7b7b7b7b7b7b -> #f800000000000000 +decd528 apply #fb00000000000000 -> -Infinity + +decd529 apply -NaN -> #fc00000000000000 +decd530 apply #fc7c7c7c7c7c7c7c -> #fc007c7c7c7c7c7c +decd531 apply #fc00000000000000 -> -NaN +decd532 apply #fd7d7d7d7d7d7d7d -> #fc017d7d7d7d7d7d +decd533 apply #fd00000000000000 -> -NaN +decd534 apply #fe7e7e7e7e7e7e7e -> #fe007e7e7e7e7c7e +decd535 apply #fe00000000000000 -> -sNaN +decd536 apply #ff7f7f7f7f7f7f7f -> #fe007f7f7f7f7c7f +decd537 apply #ff00000000000000 -> -sNaN +decd538 apply #ffffffffffffffff -> -sNaN999999999999999 +decd539 apply #ffffffffffffffff -> #fe00ff3fcff3fcff + +-- diagnostic NaNs +decd540 apply NaN -> #7c00000000000000 +decd541 apply NaN0 -> #7c00000000000000 +decd542 apply NaN1 -> #7c00000000000001 +decd543 apply NaN12 -> #7c00000000000012 +decd544 apply NaN79 -> #7c00000000000079 +decd545 apply NaN12345 -> #7c000000000049c5 +decd546 apply NaN123456 -> #7c00000000028e56 +decd547 apply NaN799799 -> #7c000000000f7fdf +decd548 apply NaN799799799799799 -> #7c03dff7fdff7fdf +decd549 apply NaN999999999999999 -> #7c00ff3fcff3fcff +-- too many digits + +-- fold-down full sequence +decd601 apply 1E+384 -> #47fc000000000000 Clamped +decd602 apply #47fc000000000000 -> 1.000000000000000E+384 +decd603 apply 1E+383 -> #43fc800000000000 Clamped +decd604 apply #43fc800000000000 -> 1.00000000000000E+383 +decd605 apply 1E+382 -> #43fc100000000000 Clamped +decd606 apply #43fc100000000000 -> 1.0000000000000E+382 +decd607 apply 1E+381 -> #43fc010000000000 Clamped +decd608 apply #43fc010000000000 -> 1.000000000000E+381 +decd609 apply 1E+380 -> #43fc002000000000 Clamped +decd610 apply #43fc002000000000 -> 1.00000000000E+380 +decd611 apply 1E+379 -> #43fc000400000000 Clamped +decd612 apply #43fc000400000000 -> 1.0000000000E+379 +decd613 apply 1E+378 -> #43fc000040000000 Clamped +decd614 apply #43fc000040000000 -> 1.000000000E+378 +decd615 apply 1E+377 -> #43fc000008000000 Clamped +decd616 apply #43fc000008000000 -> 1.00000000E+377 +decd617 apply 1E+376 -> #43fc000001000000 Clamped +decd618 apply #43fc000001000000 -> 1.0000000E+376 +decd619 apply 1E+375 -> #43fc000000100000 Clamped +decd620 apply #43fc000000100000 -> 1.000000E+375 +decd621 apply 1E+374 -> #43fc000000020000 Clamped +decd622 apply #43fc000000020000 -> 1.00000E+374 +decd623 apply 1E+373 -> #43fc000000004000 Clamped +decd624 apply #43fc000000004000 -> 1.0000E+373 +decd625 apply 1E+372 -> #43fc000000000400 Clamped +decd626 apply #43fc000000000400 -> 1.000E+372 +decd627 apply 1E+371 -> #43fc000000000080 Clamped +decd628 apply #43fc000000000080 -> 1.00E+371 +decd629 apply 1E+370 -> #43fc000000000010 Clamped +decd630 apply #43fc000000000010 -> 1.0E+370 +decd631 apply 1E+369 -> #43fc000000000001 +decd632 apply #43fc000000000001 -> 1E+369 +decd633 apply 1E+368 -> #43f8000000000001 +decd634 apply #43f8000000000001 -> 1E+368 +-- same with 9s +decd641 apply 9E+384 -> #77fc000000000000 Clamped +decd642 apply #77fc000000000000 -> 9.000000000000000E+384 +decd643 apply 9E+383 -> #43fc8c0000000000 Clamped +decd644 apply #43fc8c0000000000 -> 9.00000000000000E+383 +decd645 apply 9E+382 -> #43fc1a0000000000 Clamped +decd646 apply #43fc1a0000000000 -> 9.0000000000000E+382 +decd647 apply 9E+381 -> #43fc090000000000 Clamped +decd648 apply #43fc090000000000 -> 9.000000000000E+381 +decd649 apply 9E+380 -> #43fc002300000000 Clamped +decd650 apply #43fc002300000000 -> 9.00000000000E+380 +decd651 apply 9E+379 -> #43fc000680000000 Clamped +decd652 apply #43fc000680000000 -> 9.0000000000E+379 +decd653 apply 9E+378 -> #43fc000240000000 Clamped +decd654 apply #43fc000240000000 -> 9.000000000E+378 +decd655 apply 9E+377 -> #43fc000008c00000 Clamped +decd656 apply #43fc000008c00000 -> 9.00000000E+377 +decd657 apply 9E+376 -> #43fc000001a00000 Clamped +decd658 apply #43fc000001a00000 -> 9.0000000E+376 +decd659 apply 9E+375 -> #43fc000000900000 Clamped +decd660 apply #43fc000000900000 -> 9.000000E+375 +decd661 apply 9E+374 -> #43fc000000023000 Clamped +decd662 apply #43fc000000023000 -> 9.00000E+374 +decd663 apply 9E+373 -> #43fc000000006800 Clamped +decd664 apply #43fc000000006800 -> 9.0000E+373 +decd665 apply 9E+372 -> #43fc000000002400 Clamped +decd666 apply #43fc000000002400 -> 9.000E+372 +decd667 apply 9E+371 -> #43fc00000000008c Clamped +decd668 apply #43fc00000000008c -> 9.00E+371 +decd669 apply 9E+370 -> #43fc00000000001a Clamped +decd670 apply #43fc00000000001a -> 9.0E+370 +decd671 apply 9E+369 -> #43fc000000000009 +decd672 apply #43fc000000000009 -> 9E+369 +decd673 apply 9E+368 -> #43f8000000000009 +decd674 apply #43f8000000000009 -> 9E+368 + + +-- Selected DPD codes +decd700 apply #2238000000000000 -> 0 +decd701 apply #2238000000000009 -> 9 +decd702 apply #2238000000000010 -> 10 +decd703 apply #2238000000000019 -> 19 +decd704 apply #2238000000000020 -> 20 +decd705 apply #2238000000000029 -> 29 +decd706 apply #2238000000000030 -> 30 +decd707 apply #2238000000000039 -> 39 +decd708 apply #2238000000000040 -> 40 +decd709 apply #2238000000000049 -> 49 +decd710 apply #2238000000000050 -> 50 +decd711 apply #2238000000000059 -> 59 +decd712 apply #2238000000000060 -> 60 +decd713 apply #2238000000000069 -> 69 +decd714 apply #2238000000000070 -> 70 +decd715 apply #2238000000000071 -> 71 +decd716 apply #2238000000000072 -> 72 +decd717 apply #2238000000000073 -> 73 +decd718 apply #2238000000000074 -> 74 +decd719 apply #2238000000000075 -> 75 +decd720 apply #2238000000000076 -> 76 +decd721 apply #2238000000000077 -> 77 +decd722 apply #2238000000000078 -> 78 +decd723 apply #2238000000000079 -> 79 + +decd725 apply #223800000000029e -> 994 +decd726 apply #223800000000029f -> 995 +decd727 apply #22380000000002a0 -> 520 +decd728 apply #22380000000002a1 -> 521 +-- from telco test data +decd730 apply #2238000000000188 -> 308 +decd731 apply #22380000000001a3 -> 323 +decd732 apply #223800000000002a -> 82 +decd733 apply #22380000000001a9 -> 329 +decd734 apply #2238000000000081 -> 101 +decd735 apply #22380000000002a2 -> 522 + +-- DPD: one of each of the huffman groups +decd740 apply #22380000000003f7 -> 777 +decd741 apply #22380000000003f8 -> 778 +decd742 apply #22380000000003eb -> 787 +decd743 apply #223800000000037d -> 877 +decd744 apply #223800000000039f -> 997 +decd745 apply #22380000000003bf -> 979 +decd746 apply #22380000000003df -> 799 +decd747 apply #223800000000006e -> 888 + +-- DPD all-highs cases (includes the 24 redundant codes) +decd750 apply #223800000000006e -> 888 +decd751 apply #223800000000016e -> 888 +decd752 apply #223800000000026e -> 888 +decd753 apply #223800000000036e -> 888 +decd754 apply #223800000000006f -> 889 +decd755 apply #223800000000016f -> 889 +decd756 apply #223800000000026f -> 889 +decd757 apply #223800000000036f -> 889 + +decd760 apply #223800000000007e -> 898 +decd761 apply #223800000000017e -> 898 +decd762 apply #223800000000027e -> 898 +decd763 apply #223800000000037e -> 898 +decd764 apply #223800000000007f -> 899 +decd765 apply #223800000000017f -> 899 +decd766 apply #223800000000027f -> 899 +decd767 apply #223800000000037f -> 899 + +decd770 apply #22380000000000ee -> 988 +decd771 apply #22380000000001ee -> 988 +decd772 apply #22380000000002ee -> 988 +decd773 apply #22380000000003ee -> 988 +decd774 apply #22380000000000ef -> 989 +decd775 apply #22380000000001ef -> 989 +decd776 apply #22380000000002ef -> 989 +decd777 apply #22380000000003ef -> 989 + +decd780 apply #22380000000000fe -> 998 +decd781 apply #22380000000001fe -> 998 +decd782 apply #22380000000002fe -> 998 +decd783 apply #22380000000003fe -> 998 +decd784 apply #22380000000000ff -> 999 +decd785 apply #22380000000001ff -> 999 +decd786 apply #22380000000002ff -> 999 +decd787 apply #22380000000003ff -> 999 + +-- values around [u]int32 edges (zeros done earlier) +decd800 apply -2147483646 -> #a23800008c78af46 +decd801 apply -2147483647 -> #a23800008c78af47 +decd802 apply -2147483648 -> #a23800008c78af48 +decd803 apply -2147483649 -> #a23800008c78af49 +decd804 apply 2147483646 -> #223800008c78af46 +decd805 apply 2147483647 -> #223800008c78af47 +decd806 apply 2147483648 -> #223800008c78af48 +decd807 apply 2147483649 -> #223800008c78af49 +decd808 apply 4294967294 -> #2238000115afb55a +decd809 apply 4294967295 -> #2238000115afb55b +decd810 apply 4294967296 -> #2238000115afb57a +decd811 apply 4294967297 -> #2238000115afb57b + +decd820 apply #a23800008c78af46 -> -2147483646 +decd821 apply #a23800008c78af47 -> -2147483647 +decd822 apply #a23800008c78af48 -> -2147483648 +decd823 apply #a23800008c78af49 -> -2147483649 +decd824 apply #223800008c78af46 -> 2147483646 +decd825 apply #223800008c78af47 -> 2147483647 +decd826 apply #223800008c78af48 -> 2147483648 +decd827 apply #223800008c78af49 -> 2147483649 +decd828 apply #2238000115afb55a -> 4294967294 +decd829 apply #2238000115afb55b -> 4294967295 +decd830 apply #2238000115afb57a -> 4294967296 +decd831 apply #2238000115afb57b -> 4294967297 + +-- for narrowing +decd840 apply #2870000000000000 -> 2.000000000000000E-99 + +-- some miscellaneous +decd850 apply #0004070000000000 -> 7.000000000000E-385 Subnormal +decd851 apply #0008000000020000 -> 1.00000E-391 Subnormal + diff --git a/Lib/test/decimaltestdata/ddFMA.decTest b/Lib/test/decimaltestdata/ddFMA.decTest index 1c23e0310e7..7f2e5230374 100644 --- a/Lib/test/decimaltestdata/ddFMA.decTest +++ b/Lib/test/decimaltestdata/ddFMA.decTest @@ -1,1698 +1,1698 @@ ------------------------------------------------------------------------- --- ddFMA.decTest -- decDouble Fused Multiply Add -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- These tests comprise three parts: --- 1. Sanity checks and other three-operand tests (especially those --- where the fused operation makes a difference) --- 2. Multiply tests (third operand is neutral zero [0E+emax]) --- 3. Addition tests (first operand is 1) --- The multiply and addition tests are extensive because FMA may have --- its own dedicated multiplication or addition routine(s), and they --- also inherently check the left-to-right properties. - --- Sanity checks -ddfma0001 fma 1 1 1 -> 2 -ddfma0002 fma 1 1 2 -> 3 -ddfma0003 fma 2 2 3 -> 7 -ddfma0004 fma 9 9 9 -> 90 -ddfma0005 fma -1 1 1 -> 0 -ddfma0006 fma -1 1 2 -> 1 -ddfma0007 fma -2 2 3 -> -1 -ddfma0008 fma -9 9 9 -> -72 -ddfma0011 fma 1 -1 1 -> 0 -ddfma0012 fma 1 -1 2 -> 1 -ddfma0013 fma 2 -2 3 -> -1 -ddfma0014 fma 9 -9 9 -> -72 -ddfma0015 fma 1 1 -1 -> 0 -ddfma0016 fma 1 1 -2 -> -1 -ddfma0017 fma 2 2 -3 -> 1 -ddfma0018 fma 9 9 -9 -> 72 - --- non-integer exacts -ddfma0100 fma 25.2 63.6 -438 -> 1164.72 -ddfma0101 fma 0.301 0.380 334 -> 334.114380 -ddfma0102 fma 49.2 -4.8 23.3 -> -212.86 -ddfma0103 fma 4.22 0.079 -94.6 -> -94.26662 -ddfma0104 fma 903 0.797 0.887 -> 720.578 -ddfma0105 fma 6.13 -161 65.9 -> -921.03 -ddfma0106 fma 28.2 727 5.45 -> 20506.85 -ddfma0107 fma 4 605 688 -> 3108 -ddfma0108 fma 93.3 0.19 0.226 -> 17.953 -ddfma0109 fma 0.169 -341 5.61 -> -52.019 -ddfma0110 fma -72.2 30 -51.2 -> -2217.2 -ddfma0111 fma -0.409 13 20.4 -> 15.083 -ddfma0112 fma 317 77.0 19.0 -> 24428.0 -ddfma0113 fma 47 6.58 1.62 -> 310.88 -ddfma0114 fma 1.36 0.984 0.493 -> 1.83124 -ddfma0115 fma 72.7 274 1.56 -> 19921.36 -ddfma0116 fma 335 847 83 -> 283828 -ddfma0117 fma 666 0.247 25.4 -> 189.902 -ddfma0118 fma -3.87 3.06 78.0 -> 66.1578 -ddfma0119 fma 0.742 192 35.6 -> 178.064 -ddfma0120 fma -91.6 5.29 0.153 -> -484.411 - --- cases where result is different from separate multiply + add; each --- is preceded by the result of unfused multiply and add --- [this is about 20% of all similar cases in general] --- -> 7.123356429257969E+16 -ddfma0201 fma 27583489.6645 2582471078.04 2593183.42371 -> 7.123356429257970E+16 Inexact Rounded --- -> 22813275328.80506 -ddfma0208 fma 24280.355566 939577.397653 2032.013252 -> 22813275328.80507 Inexact Rounded --- -> -2.030397734278062E+16 -ddfma0209 fma 7848976432 -2586831.2281 137903.517909 -> -2.030397734278061E+16 Inexact Rounded --- -> 2040774094814.077 -ddfma0217 fma 56890.388731 35872030.4255 339337.123410 -> 2040774094814.078 Inexact Rounded --- -> 2.714469575205049E+18 -ddfma0220 fma 7533543.57445 360317763928 5073392.31638 -> 2.714469575205050E+18 Inexact Rounded --- -> 1.011676297716716E+19 -ddfma0223 fma 739945255.563 13672312784.1 -994381.53572 -> 1.011676297716715E+19 Inexact Rounded --- -> -2.914135721455315E+23 -ddfma0224 fma -413510957218 704729988550 9234162614.0 -> -2.914135721455314E+23 Inexact Rounded --- -> 2.620119863365786E+17 -ddfma0226 fma 437484.00601 598906432790 894450638.442 -> 2.620119863365787E+17 Inexact Rounded --- -> 1.272647995808178E+19 -ddfma0253 fma 73287556929 173651305.784 -358312568.389 -> 1.272647995808177E+19 Inexact Rounded --- -> -1.753769320861851E+18 -ddfma0257 fma 203258304486 -8628278.8066 153127.446727 -> -1.753769320861850E+18 Inexact Rounded --- -> -1.550737835263346E+17 -ddfma0260 fma 42560533.1774 -3643605282.86 178277.96377 -> -1.550737835263347E+17 Inexact Rounded --- -> 2.897624620576005E+22 -ddfma0269 fma 142656587375 203118879670 604576103991 -> 2.897624620576004E+22 Inexact Rounded - --- Cases where multiply would overflow or underflow if separate -fma0300 fma 9e+384 10 0 -> Infinity Overflow Inexact Rounded -fma0301 fma 1e+384 10 0 -> Infinity Overflow Inexact Rounded -fma0302 fma 1e+384 10 -1e+384 -> 9.000000000000000E+384 Clamped -fma0303 fma 1e+384 10 -9e+384 -> 1.000000000000000E+384 Clamped --- subnormal etc. -fma0305 fma 1e-398 0.1 0 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -fma0306 fma 1e-398 0.1 1 -> 1.000000000000000 Inexact Rounded -fma0307 fma 1e-398 0.1 1e-398 -> 1E-398 Underflow Subnormal Inexact Rounded - --- Infinite combinations -ddfma0800 fma Inf Inf Inf -> Infinity -ddfma0801 fma Inf Inf -Inf -> NaN Invalid_operation -ddfma0802 fma Inf -Inf Inf -> NaN Invalid_operation -ddfma0803 fma Inf -Inf -Inf -> -Infinity -ddfma0804 fma -Inf Inf Inf -> NaN Invalid_operation -ddfma0805 fma -Inf Inf -Inf -> -Infinity -ddfma0806 fma -Inf -Inf Inf -> Infinity -ddfma0807 fma -Inf -Inf -Inf -> NaN Invalid_operation - --- Triple NaN propagation -ddfma0900 fma NaN2 NaN3 NaN5 -> NaN2 -ddfma0901 fma 0 NaN3 NaN5 -> NaN3 -ddfma0902 fma 0 0 NaN5 -> NaN5 --- first sNaN wins (consider qNaN from earlier sNaN being --- overridden by an sNaN in third operand) -ddfma0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -ddfma0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation -ddfma0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation -ddfma0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -ddfma0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation -ddfma0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation - --- MULTIPLICATION TESTS ------------------------------------------------ - --- sanity checks -ddfma2000 fma 2 2 0e+384 -> 4 -ddfma2001 fma 2 3 0e+384 -> 6 -ddfma2002 fma 5 1 0e+384 -> 5 -ddfma2003 fma 5 2 0e+384 -> 10 -ddfma2004 fma 1.20 2 0e+384 -> 2.40 -ddfma2005 fma 1.20 0 0e+384 -> 0.00 -ddfma2006 fma 1.20 -2 0e+384 -> -2.40 -ddfma2007 fma -1.20 2 0e+384 -> -2.40 -ddfma2008 fma -1.20 0 0e+384 -> 0.00 -ddfma2009 fma -1.20 -2 0e+384 -> 2.40 -ddfma2010 fma 5.09 7.1 0e+384 -> 36.139 -ddfma2011 fma 2.5 4 0e+384 -> 10.0 -ddfma2012 fma 2.50 4 0e+384 -> 10.00 -ddfma2013 fma 1.23456789 1.00000000 0e+384 -> 1.234567890000000 Rounded -ddfma2015 fma 2.50 4 0e+384 -> 10.00 -ddfma2016 fma 9.999999999 9.999999999 0e+384 -> 99.99999998000000 Inexact Rounded -ddfma2017 fma 9.999999999 -9.999999999 0e+384 -> -99.99999998000000 Inexact Rounded -ddfma2018 fma -9.999999999 9.999999999 0e+384 -> -99.99999998000000 Inexact Rounded -ddfma2019 fma -9.999999999 -9.999999999 0e+384 -> 99.99999998000000 Inexact Rounded - --- zeros, etc. -ddfma2021 fma 0 0 0e+384 -> 0 -ddfma2022 fma 0 -0 0e+384 -> 0 -ddfma2023 fma -0 0 0e+384 -> 0 -ddfma2024 fma -0 -0 0e+384 -> 0 -ddfma2025 fma -0.0 -0.0 0e+384 -> 0.00 -ddfma2026 fma -0.0 -0.0 0e+384 -> 0.00 -ddfma2027 fma -0.0 -0.0 0e+384 -> 0.00 -ddfma2028 fma -0.0 -0.0 0e+384 -> 0.00 -ddfma2030 fma 5.00 1E-3 0e+384 -> 0.00500 -ddfma2031 fma 00.00 0.000 0e+384 -> 0.00000 -ddfma2032 fma 00.00 0E-3 0e+384 -> 0.00000 -- rhs is 0 -ddfma2033 fma 0E-3 00.00 0e+384 -> 0.00000 -- lhs is 0 -ddfma2034 fma -5.00 1E-3 0e+384 -> -0.00500 -ddfma2035 fma -00.00 0.000 0e+384 -> 0.00000 -ddfma2036 fma -00.00 0E-3 0e+384 -> 0.00000 -- rhs is 0 -ddfma2037 fma -0E-3 00.00 0e+384 -> 0.00000 -- lhs is 0 -ddfma2038 fma 5.00 -1E-3 0e+384 -> -0.00500 -ddfma2039 fma 00.00 -0.000 0e+384 -> 0.00000 -ddfma2040 fma 00.00 -0E-3 0e+384 -> 0.00000 -- rhs is 0 -ddfma2041 fma 0E-3 -00.00 0e+384 -> 0.00000 -- lhs is 0 -ddfma2042 fma -5.00 -1E-3 0e+384 -> 0.00500 -ddfma2043 fma -00.00 -0.000 0e+384 -> 0.00000 -ddfma2044 fma -00.00 -0E-3 0e+384 -> 0.00000 -- rhs is 0 -ddfma2045 fma -0E-3 -00.00 -0e+384 -> 0.00000 -- lhs is 0 -ddfma2046 fma -0E-3 00.00 -0e+384 -> -0.00000 -ddfma2047 fma 0E-3 -00.00 -0e+384 -> -0.00000 -ddfma2048 fma 0E-3 00.00 -0e+384 -> 0.00000 - --- examples from decarith -ddfma2050 fma 1.20 3 0e+384 -> 3.60 -ddfma2051 fma 7 3 0e+384 -> 21 -ddfma2052 fma 0.9 0.8 0e+384 -> 0.72 -ddfma2053 fma 0.9 -0 0e+384 -> 0.0 -ddfma2054 fma 654321 654321 0e+384 -> 428135971041 - -ddfma2060 fma 123.45 1e7 0e+384 -> 1.2345E+9 -ddfma2061 fma 123.45 1e8 0e+384 -> 1.2345E+10 -ddfma2062 fma 123.45 1e+9 0e+384 -> 1.2345E+11 -ddfma2063 fma 123.45 1e10 0e+384 -> 1.2345E+12 -ddfma2064 fma 123.45 1e11 0e+384 -> 1.2345E+13 -ddfma2065 fma 123.45 1e12 0e+384 -> 1.2345E+14 -ddfma2066 fma 123.45 1e13 0e+384 -> 1.2345E+15 - - --- test some intermediate lengths --- 1234567890123456 -ddfma2080 fma 0.1 1230123456456789 0e+384 -> 123012345645678.9 -ddfma2084 fma 0.1 1230123456456789 0e+384 -> 123012345645678.9 -ddfma2090 fma 1230123456456789 0.1 0e+384 -> 123012345645678.9 -ddfma2094 fma 1230123456456789 0.1 0e+384 -> 123012345645678.9 - --- test some more edge cases and carries -ddfma2101 fma 9 9 0e+384 -> 81 -ddfma2102 fma 9 90 0e+384 -> 810 -ddfma2103 fma 9 900 0e+384 -> 8100 -ddfma2104 fma 9 9000 0e+384 -> 81000 -ddfma2105 fma 9 90000 0e+384 -> 810000 -ddfma2106 fma 9 900000 0e+384 -> 8100000 -ddfma2107 fma 9 9000000 0e+384 -> 81000000 -ddfma2108 fma 9 90000000 0e+384 -> 810000000 -ddfma2109 fma 9 900000000 0e+384 -> 8100000000 -ddfma2110 fma 9 9000000000 0e+384 -> 81000000000 -ddfma2111 fma 9 90000000000 0e+384 -> 810000000000 -ddfma2112 fma 9 900000000000 0e+384 -> 8100000000000 -ddfma2113 fma 9 9000000000000 0e+384 -> 81000000000000 -ddfma2114 fma 9 90000000000000 0e+384 -> 810000000000000 -ddfma2115 fma 9 900000000000000 0e+384 -> 8100000000000000 ---ddfma2116 fma 9 9000000000000000 0e+384 -> 81000000000000000 ---ddfma2117 fma 9 90000000000000000 0e+384 -> 810000000000000000 ---ddfma2118 fma 9 900000000000000000 0e+384 -> 8100000000000000000 ---ddfma2119 fma 9 9000000000000000000 0e+384 -> 81000000000000000000 ---ddfma2120 fma 9 90000000000000000000 0e+384 -> 810000000000000000000 ---ddfma2121 fma 9 900000000000000000000 0e+384 -> 8100000000000000000000 ---ddfma2122 fma 9 9000000000000000000000 0e+384 -> 81000000000000000000000 ---ddfma2123 fma 9 90000000000000000000000 0e+384 -> 810000000000000000000000 --- test some more edge cases without carries -ddfma2131 fma 3 3 0e+384 -> 9 -ddfma2132 fma 3 30 0e+384 -> 90 -ddfma2133 fma 3 300 0e+384 -> 900 -ddfma2134 fma 3 3000 0e+384 -> 9000 -ddfma2135 fma 3 30000 0e+384 -> 90000 -ddfma2136 fma 3 300000 0e+384 -> 900000 -ddfma2137 fma 3 3000000 0e+384 -> 9000000 -ddfma2138 fma 3 30000000 0e+384 -> 90000000 -ddfma2139 fma 3 300000000 0e+384 -> 900000000 -ddfma2140 fma 3 3000000000 0e+384 -> 9000000000 -ddfma2141 fma 3 30000000000 0e+384 -> 90000000000 -ddfma2142 fma 3 300000000000 0e+384 -> 900000000000 -ddfma2143 fma 3 3000000000000 0e+384 -> 9000000000000 -ddfma2144 fma 3 30000000000000 0e+384 -> 90000000000000 -ddfma2145 fma 3 300000000000000 0e+384 -> 900000000000000 - --- test some edge cases with exact rounding -ddfma2301 fma 9 9 0e+384 -> 81 -ddfma2302 fma 9 90 0e+384 -> 810 -ddfma2303 fma 9 900 0e+384 -> 8100 -ddfma2304 fma 9 9000 0e+384 -> 81000 -ddfma2305 fma 9 90000 0e+384 -> 810000 -ddfma2306 fma 9 900000 0e+384 -> 8100000 -ddfma2307 fma 9 9000000 0e+384 -> 81000000 -ddfma2308 fma 9 90000000 0e+384 -> 810000000 -ddfma2309 fma 9 900000000 0e+384 -> 8100000000 -ddfma2310 fma 9 9000000000 0e+384 -> 81000000000 -ddfma2311 fma 9 90000000000 0e+384 -> 810000000000 -ddfma2312 fma 9 900000000000 0e+384 -> 8100000000000 -ddfma2313 fma 9 9000000000000 0e+384 -> 81000000000000 -ddfma2314 fma 9 90000000000000 0e+384 -> 810000000000000 -ddfma2315 fma 9 900000000000000 0e+384 -> 8100000000000000 -ddfma2316 fma 9 9000000000000000 0e+384 -> 8.100000000000000E+16 Rounded -ddfma2317 fma 90 9000000000000000 0e+384 -> 8.100000000000000E+17 Rounded -ddfma2318 fma 900 9000000000000000 0e+384 -> 8.100000000000000E+18 Rounded -ddfma2319 fma 9000 9000000000000000 0e+384 -> 8.100000000000000E+19 Rounded -ddfma2320 fma 90000 9000000000000000 0e+384 -> 8.100000000000000E+20 Rounded -ddfma2321 fma 900000 9000000000000000 0e+384 -> 8.100000000000000E+21 Rounded -ddfma2322 fma 9000000 9000000000000000 0e+384 -> 8.100000000000000E+22 Rounded -ddfma2323 fma 90000000 9000000000000000 0e+384 -> 8.100000000000000E+23 Rounded - --- tryzeros cases -ddfma2504 fma 0E-260 1000E-260 0e+384 -> 0E-398 Clamped -ddfma2505 fma 100E+260 0E+260 0e+384 -> 0E+369 Clamped - --- mixed with zeros -ddfma2541 fma 0 -1 0e+384 -> 0 -ddfma2542 fma -0 -1 0e+384 -> 0 -ddfma2543 fma 0 1 0e+384 -> 0 -ddfma2544 fma -0 1 0e+384 -> 0 -ddfma2545 fma -1 0 0e+384 -> 0 -ddfma2546 fma -1 -0 0e+384 -> 0 -ddfma2547 fma 1 0 0e+384 -> 0 -ddfma2548 fma 1 -0 0e+384 -> 0 - -ddfma2551 fma 0.0 -1 0e+384 -> 0.0 -ddfma2552 fma -0.0 -1 0e+384 -> 0.0 -ddfma2553 fma 0.0 1 0e+384 -> 0.0 -ddfma2554 fma -0.0 1 0e+384 -> 0.0 -ddfma2555 fma -1.0 0 0e+384 -> 0.0 -ddfma2556 fma -1.0 -0 0e+384 -> 0.0 -ddfma2557 fma 1.0 0 0e+384 -> 0.0 -ddfma2558 fma 1.0 -0 0e+384 -> 0.0 - -ddfma2561 fma 0 -1.0 0e+384 -> 0.0 -ddfma2562 fma -0 -1.0 0e+384 -> 0.0 -ddfma2563 fma 0 1.0 0e+384 -> 0.0 -ddfma2564 fma -0 1.0 0e+384 -> 0.0 -ddfma2565 fma -1 0.0 0e+384 -> 0.0 -ddfma2566 fma -1 -0.0 0e+384 -> 0.0 -ddfma2567 fma 1 0.0 0e+384 -> 0.0 -ddfma2568 fma 1 -0.0 0e+384 -> 0.0 - -ddfma2571 fma 0.0 -1.0 0e+384 -> 0.00 -ddfma2572 fma -0.0 -1.0 0e+384 -> 0.00 -ddfma2573 fma 0.0 1.0 0e+384 -> 0.00 -ddfma2574 fma -0.0 1.0 0e+384 -> 0.00 -ddfma2575 fma -1.0 0.0 0e+384 -> 0.00 -ddfma2576 fma -1.0 -0.0 0e+384 -> 0.00 -ddfma2577 fma 1.0 0.0 0e+384 -> 0.00 -ddfma2578 fma 1.0 -0.0 0e+384 -> 0.00 - --- Specials -ddfma2580 fma Inf -Inf 0e+384 -> -Infinity -ddfma2581 fma Inf -1000 0e+384 -> -Infinity -ddfma2582 fma Inf -1 0e+384 -> -Infinity -ddfma2583 fma Inf -0 0e+384 -> NaN Invalid_operation -ddfma2584 fma Inf 0 0e+384 -> NaN Invalid_operation -ddfma2585 fma Inf 1 0e+384 -> Infinity -ddfma2586 fma Inf 1000 0e+384 -> Infinity -ddfma2587 fma Inf Inf 0e+384 -> Infinity -ddfma2588 fma -1000 Inf 0e+384 -> -Infinity -ddfma2589 fma -Inf Inf 0e+384 -> -Infinity -ddfma2590 fma -1 Inf 0e+384 -> -Infinity -ddfma2591 fma -0 Inf 0e+384 -> NaN Invalid_operation -ddfma2592 fma 0 Inf 0e+384 -> NaN Invalid_operation -ddfma2593 fma 1 Inf 0e+384 -> Infinity -ddfma2594 fma 1000 Inf 0e+384 -> Infinity -ddfma2595 fma Inf Inf 0e+384 -> Infinity - -ddfma2600 fma -Inf -Inf 0e+384 -> Infinity -ddfma2601 fma -Inf -1000 0e+384 -> Infinity -ddfma2602 fma -Inf -1 0e+384 -> Infinity -ddfma2603 fma -Inf -0 0e+384 -> NaN Invalid_operation -ddfma2604 fma -Inf 0 0e+384 -> NaN Invalid_operation -ddfma2605 fma -Inf 1 0e+384 -> -Infinity -ddfma2606 fma -Inf 1000 0e+384 -> -Infinity -ddfma2607 fma -Inf Inf 0e+384 -> -Infinity -ddfma2608 fma -1000 Inf 0e+384 -> -Infinity -ddfma2609 fma -Inf -Inf 0e+384 -> Infinity -ddfma2610 fma -1 -Inf 0e+384 -> Infinity -ddfma2611 fma -0 -Inf 0e+384 -> NaN Invalid_operation -ddfma2612 fma 0 -Inf 0e+384 -> NaN Invalid_operation -ddfma2613 fma 1 -Inf 0e+384 -> -Infinity -ddfma2614 fma 1000 -Inf 0e+384 -> -Infinity -ddfma2615 fma Inf -Inf 0e+384 -> -Infinity - -ddfma2621 fma NaN -Inf 0e+384 -> NaN -ddfma2622 fma NaN -1000 0e+384 -> NaN -ddfma2623 fma NaN -1 0e+384 -> NaN -ddfma2624 fma NaN -0 0e+384 -> NaN -ddfma2625 fma NaN 0 0e+384 -> NaN -ddfma2626 fma NaN 1 0e+384 -> NaN -ddfma2627 fma NaN 1000 0e+384 -> NaN -ddfma2628 fma NaN Inf 0e+384 -> NaN -ddfma2629 fma NaN NaN 0e+384 -> NaN -ddfma2630 fma -Inf NaN 0e+384 -> NaN -ddfma2631 fma -1000 NaN 0e+384 -> NaN -ddfma2632 fma -1 NaN 0e+384 -> NaN -ddfma2633 fma -0 NaN 0e+384 -> NaN -ddfma2634 fma 0 NaN 0e+384 -> NaN -ddfma2635 fma 1 NaN 0e+384 -> NaN -ddfma2636 fma 1000 NaN 0e+384 -> NaN -ddfma2637 fma Inf NaN 0e+384 -> NaN - -ddfma2641 fma sNaN -Inf 0e+384 -> NaN Invalid_operation -ddfma2642 fma sNaN -1000 0e+384 -> NaN Invalid_operation -ddfma2643 fma sNaN -1 0e+384 -> NaN Invalid_operation -ddfma2644 fma sNaN -0 0e+384 -> NaN Invalid_operation -ddfma2645 fma sNaN 0 0e+384 -> NaN Invalid_operation -ddfma2646 fma sNaN 1 0e+384 -> NaN Invalid_operation -ddfma2647 fma sNaN 1000 0e+384 -> NaN Invalid_operation -ddfma2648 fma sNaN NaN 0e+384 -> NaN Invalid_operation -ddfma2649 fma sNaN sNaN 0e+384 -> NaN Invalid_operation -ddfma2650 fma NaN sNaN 0e+384 -> NaN Invalid_operation -ddfma2651 fma -Inf sNaN 0e+384 -> NaN Invalid_operation -ddfma2652 fma -1000 sNaN 0e+384 -> NaN Invalid_operation -ddfma2653 fma -1 sNaN 0e+384 -> NaN Invalid_operation -ddfma2654 fma -0 sNaN 0e+384 -> NaN Invalid_operation -ddfma2655 fma 0 sNaN 0e+384 -> NaN Invalid_operation -ddfma2656 fma 1 sNaN 0e+384 -> NaN Invalid_operation -ddfma2657 fma 1000 sNaN 0e+384 -> NaN Invalid_operation -ddfma2658 fma Inf sNaN 0e+384 -> NaN Invalid_operation -ddfma2659 fma NaN sNaN 0e+384 -> NaN Invalid_operation - --- propagating NaNs -ddfma2661 fma NaN9 -Inf 0e+384 -> NaN9 -ddfma2662 fma NaN8 999 0e+384 -> NaN8 -ddfma2663 fma NaN71 Inf 0e+384 -> NaN71 -ddfma2664 fma NaN6 NaN5 0e+384 -> NaN6 -ddfma2665 fma -Inf NaN4 0e+384 -> NaN4 -ddfma2666 fma -999 NaN33 0e+384 -> NaN33 -ddfma2667 fma Inf NaN2 0e+384 -> NaN2 - -ddfma2671 fma sNaN99 -Inf 0e+384 -> NaN99 Invalid_operation -ddfma2672 fma sNaN98 -11 0e+384 -> NaN98 Invalid_operation -ddfma2673 fma sNaN97 NaN 0e+384 -> NaN97 Invalid_operation -ddfma2674 fma sNaN16 sNaN94 0e+384 -> NaN16 Invalid_operation -ddfma2675 fma NaN95 sNaN93 0e+384 -> NaN93 Invalid_operation -ddfma2676 fma -Inf sNaN92 0e+384 -> NaN92 Invalid_operation -ddfma2677 fma 088 sNaN91 0e+384 -> NaN91 Invalid_operation -ddfma2678 fma Inf sNaN90 0e+384 -> NaN90 Invalid_operation -ddfma2679 fma NaN sNaN89 0e+384 -> NaN89 Invalid_operation - -ddfma2681 fma -NaN9 -Inf 0e+384 -> -NaN9 -ddfma2682 fma -NaN8 999 0e+384 -> -NaN8 -ddfma2683 fma -NaN71 Inf 0e+384 -> -NaN71 -ddfma2684 fma -NaN6 -NaN5 0e+384 -> -NaN6 -ddfma2685 fma -Inf -NaN4 0e+384 -> -NaN4 -ddfma2686 fma -999 -NaN33 0e+384 -> -NaN33 -ddfma2687 fma Inf -NaN2 0e+384 -> -NaN2 - -ddfma2691 fma -sNaN99 -Inf 0e+384 -> -NaN99 Invalid_operation -ddfma2692 fma -sNaN98 -11 0e+384 -> -NaN98 Invalid_operation -ddfma2693 fma -sNaN97 NaN 0e+384 -> -NaN97 Invalid_operation -ddfma2694 fma -sNaN16 -sNaN94 0e+384 -> -NaN16 Invalid_operation -ddfma2695 fma -NaN95 -sNaN93 0e+384 -> -NaN93 Invalid_operation -ddfma2696 fma -Inf -sNaN92 0e+384 -> -NaN92 Invalid_operation -ddfma2697 fma 088 -sNaN91 0e+384 -> -NaN91 Invalid_operation -ddfma2698 fma Inf -sNaN90 0e+384 -> -NaN90 Invalid_operation -ddfma2699 fma -NaN -sNaN89 0e+384 -> -NaN89 Invalid_operation - -ddfma2701 fma -NaN -Inf 0e+384 -> -NaN -ddfma2702 fma -NaN 999 0e+384 -> -NaN -ddfma2703 fma -NaN Inf 0e+384 -> -NaN -ddfma2704 fma -NaN -NaN 0e+384 -> -NaN -ddfma2705 fma -Inf -NaN0 0e+384 -> -NaN -ddfma2706 fma -999 -NaN 0e+384 -> -NaN -ddfma2707 fma Inf -NaN 0e+384 -> -NaN - -ddfma2711 fma -sNaN -Inf 0e+384 -> -NaN Invalid_operation -ddfma2712 fma -sNaN -11 0e+384 -> -NaN Invalid_operation -ddfma2713 fma -sNaN00 NaN 0e+384 -> -NaN Invalid_operation -ddfma2714 fma -sNaN -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2715 fma -NaN -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2716 fma -Inf -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2717 fma 088 -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2718 fma Inf -sNaN 0e+384 -> -NaN Invalid_operation -ddfma2719 fma -NaN -sNaN 0e+384 -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results --- signs -ddfma2751 fma 1e+277 1e+311 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2752 fma 1e+277 -1e+311 0e+384 -> -Infinity Overflow Inexact Rounded -ddfma2753 fma -1e+277 1e+311 0e+384 -> -Infinity Overflow Inexact Rounded -ddfma2754 fma -1e+277 -1e+311 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2755 fma 1e-277 1e-311 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2756 fma 1e-277 -1e-311 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2757 fma -1e-277 1e-311 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2758 fma -1e-277 -1e-311 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -ddfma2760 fma 1e-291 1e-101 0e+384 -> 1E-392 Subnormal -ddfma2761 fma 1e-291 1e-102 0e+384 -> 1E-393 Subnormal -ddfma2762 fma 1e-291 1e-103 0e+384 -> 1E-394 Subnormal -ddfma2763 fma 1e-291 1e-104 0e+384 -> 1E-395 Subnormal -ddfma2764 fma 1e-291 1e-105 0e+384 -> 1E-396 Subnormal -ddfma2765 fma 1e-291 1e-106 0e+384 -> 1E-397 Subnormal -ddfma2766 fma 1e-291 1e-107 0e+384 -> 1E-398 Subnormal -ddfma2767 fma 1e-291 1e-108 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2768 fma 1e-291 1e-109 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2769 fma 1e-291 1e-110 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -ddfma2770 fma 1e+60 1e+321 0e+384 -> 1.000000000000E+381 Clamped -ddfma2771 fma 1e+60 1e+322 0e+384 -> 1.0000000000000E+382 Clamped -ddfma2772 fma 1e+60 1e+323 0e+384 -> 1.00000000000000E+383 Clamped -ddfma2773 fma 1e+60 1e+324 0e+384 -> 1.000000000000000E+384 Clamped -ddfma2774 fma 1e+60 1e+325 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2775 fma 1e+60 1e+326 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2776 fma 1e+60 1e+327 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2777 fma 1e+60 1e+328 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2778 fma 1e+60 1e+329 0e+384 -> Infinity Overflow Inexact Rounded -ddfma2779 fma 1e+60 1e+330 0e+384 -> Infinity Overflow Inexact Rounded - -ddfma2801 fma 1.0000E-394 1 0e+384 -> 1.0000E-394 Subnormal -ddfma2802 fma 1.000E-394 1e-1 0e+384 -> 1.000E-395 Subnormal -ddfma2803 fma 1.00E-394 1e-2 0e+384 -> 1.00E-396 Subnormal -ddfma2804 fma 1.0E-394 1e-3 0e+384 -> 1.0E-397 Subnormal -ddfma2805 fma 1.0E-394 1e-4 0e+384 -> 1E-398 Subnormal Rounded -ddfma2806 fma 1.3E-394 1e-4 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded -ddfma2807 fma 1.5E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2808 fma 1.7E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2809 fma 2.3E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2810 fma 2.5E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2811 fma 2.7E-394 1e-4 0e+384 -> 3E-398 Underflow Subnormal Inexact Rounded -ddfma2812 fma 1.49E-394 1e-4 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded -ddfma2813 fma 1.50E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2814 fma 1.51E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2815 fma 2.49E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2816 fma 2.50E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded -ddfma2817 fma 2.51E-394 1e-4 0e+384 -> 3E-398 Underflow Subnormal Inexact Rounded - -ddfma2818 fma 1E-394 1e-4 0e+384 -> 1E-398 Subnormal -ddfma2819 fma 3E-394 1e-5 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2820 fma 5E-394 1e-5 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2821 fma 7E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded -ddfma2822 fma 9E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded -ddfma2823 fma 9.9E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded - -ddfma2824 fma 1E-394 -1e-4 0e+384 -> -1E-398 Subnormal -ddfma2825 fma 3E-394 -1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2826 fma -5E-394 1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2827 fma 7E-394 -1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded -ddfma2828 fma -9E-394 1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded -ddfma2829 fma 9.9E-394 -1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded -ddfma2830 fma 3.0E-394 -1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped - -ddfma2831 fma 1.0E-199 1e-200 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddfma2832 fma 1.0E-199 1e-199 0e+384 -> 1E-398 Subnormal Rounded -ddfma2833 fma 1.0E-199 1e-198 0e+384 -> 1.0E-397 Subnormal -ddfma2834 fma 2.0E-199 2e-198 0e+384 -> 4.0E-397 Subnormal -ddfma2835 fma 4.0E-199 4e-198 0e+384 -> 1.60E-396 Subnormal -ddfma2836 fma 10.0E-199 10e-198 0e+384 -> 1.000E-395 Subnormal -ddfma2837 fma 30.0E-199 30e-198 0e+384 -> 9.000E-395 Subnormal -ddfma2838 fma 40.0E-199 40e-188 0e+384 -> 1.6000E-384 Subnormal -ddfma2839 fma 40.0E-199 40e-187 0e+384 -> 1.6000E-383 -ddfma2840 fma 40.0E-199 40e-186 0e+384 -> 1.6000E-382 - --- Long operand overflow may be a different path -ddfma2870 fma 100 9.999E+383 0e+384 -> Infinity Inexact Overflow Rounded -ddfma2871 fma 100 -9.999E+383 0e+384 -> -Infinity Inexact Overflow Rounded -ddfma2872 fma 9.999E+383 100 0e+384 -> Infinity Inexact Overflow Rounded -ddfma2873 fma -9.999E+383 100 0e+384 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -ddfma2881 fma 1.2347E-355 1.2347E-40 0e+384 -> 1.524E-395 Inexact Rounded Subnormal Underflow -ddfma2882 fma 1.234E-355 1.234E-40 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddfma2883 fma 1.23E-355 1.23E-40 0e+384 -> 1.513E-395 Inexact Rounded Subnormal Underflow -ddfma2884 fma 1.2E-355 1.2E-40 0e+384 -> 1.44E-395 Subnormal -ddfma2885 fma 1.2E-355 1.2E-41 0e+384 -> 1.44E-396 Subnormal -ddfma2886 fma 1.2E-355 1.2E-42 0e+384 -> 1.4E-397 Subnormal Inexact Rounded Underflow -ddfma2887 fma 1.2E-355 1.3E-42 0e+384 -> 1.6E-397 Subnormal Inexact Rounded Underflow -ddfma2888 fma 1.3E-355 1.3E-42 0e+384 -> 1.7E-397 Subnormal Inexact Rounded Underflow -ddfma2889 fma 1.3E-355 1.3E-43 0e+384 -> 2E-398 Subnormal Inexact Rounded Underflow -ddfma2890 fma 1.3E-356 1.3E-43 0e+384 -> 0E-398 Clamped Subnormal Inexact Rounded Underflow - -ddfma2891 fma 1.2345E-39 1.234E-355 0e+384 -> 1.5234E-394 Inexact Rounded Subnormal Underflow -ddfma2892 fma 1.23456E-39 1.234E-355 0e+384 -> 1.5234E-394 Inexact Rounded Subnormal Underflow -ddfma2893 fma 1.2345E-40 1.234E-355 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddfma2894 fma 1.23456E-40 1.234E-355 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddfma2895 fma 1.2345E-41 1.234E-355 0e+384 -> 1.52E-396 Inexact Rounded Subnormal Underflow -ddfma2896 fma 1.23456E-41 1.234E-355 0e+384 -> 1.52E-396 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow -ddfma2900 fma 0.3000000000E-191 0.3000000000E-191 0e+384 -> 9.00000000000000E-384 Subnormal Rounded -ddfma2901 fma 0.3000000001E-191 0.3000000001E-191 0e+384 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded -ddfma2902 fma 9.999999999999999E-383 0.0999999999999 0e+384 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded -ddfma2903 fma 9.999999999999999E-383 0.09999999999999 0e+384 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded -ddfma2904 fma 9.999999999999999E-383 0.099999999999999 0e+384 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded -ddfma2905 fma 9.999999999999999E-383 0.0999999999999999 0e+384 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded --- prove operands are exact -ddfma2906 fma 9.999999999999999E-383 1 0e+384 -> 9.999999999999999E-383 -ddfma2907 fma 1 0.09999999999999999 0e+384 -> 0.09999999999999999 --- the next rounds to Nmin -ddfma2908 fma 9.999999999999999E-383 0.09999999999999999 0e+384 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded - --- hugest -ddfma2909 fma 9999999999999999 9999999999999999 0e+384 -> 9.999999999999998E+31 Inexact Rounded - --- Null tests -ddfma2990 fma 10 # 0e+384 -> NaN Invalid_operation -ddfma2991 fma # 10 0e+384 -> NaN Invalid_operation - - --- ADDITION TESTS ------------------------------------------------------ - --- [first group are 'quick confidence check'] -ddfma3001 fma 1 1 1 -> 2 -ddfma3002 fma 1 2 3 -> 5 -ddfma3003 fma 1 '5.75' '3.3' -> 9.05 -ddfma3004 fma 1 '5' '-3' -> 2 -ddfma3005 fma 1 '-5' '-3' -> -8 -ddfma3006 fma 1 '-7' '2.5' -> -4.5 -ddfma3007 fma 1 '0.7' '0.3' -> 1.0 -ddfma3008 fma 1 '1.25' '1.25' -> 2.50 -ddfma3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' -ddfma3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' - --- 1234567890123456 1234567890123456 -ddfma3011 fma 1 '0.4444444444444446' '0.5555555555555555' -> '1.000000000000000' Inexact Rounded -ddfma3012 fma 1 '0.4444444444444445' '0.5555555555555555' -> '1.000000000000000' Rounded -ddfma3013 fma 1 '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' -ddfma3014 fma 1 '4444444444444444' '0.49' -> '4444444444444444' Inexact Rounded -ddfma3015 fma 1 '4444444444444444' '0.499' -> '4444444444444444' Inexact Rounded -ddfma3016 fma 1 '4444444444444444' '0.4999' -> '4444444444444444' Inexact Rounded -ddfma3017 fma 1 '4444444444444444' '0.5000' -> '4444444444444444' Inexact Rounded -ddfma3018 fma 1 '4444444444444444' '0.5001' -> '4444444444444445' Inexact Rounded -ddfma3019 fma 1 '4444444444444444' '0.501' -> '4444444444444445' Inexact Rounded -ddfma3020 fma 1 '4444444444444444' '0.51' -> '4444444444444445' Inexact Rounded - -ddfma3021 fma 1 0 1 -> 1 -ddfma3022 fma 1 1 1 -> 2 -ddfma3023 fma 1 2 1 -> 3 -ddfma3024 fma 1 3 1 -> 4 -ddfma3025 fma 1 4 1 -> 5 -ddfma3026 fma 1 5 1 -> 6 -ddfma3027 fma 1 6 1 -> 7 -ddfma3028 fma 1 7 1 -> 8 -ddfma3029 fma 1 8 1 -> 9 -ddfma3030 fma 1 9 1 -> 10 - --- some carrying effects -ddfma3031 fma 1 '0.9998' '0.0000' -> '0.9998' -ddfma3032 fma 1 '0.9998' '0.0001' -> '0.9999' -ddfma3033 fma 1 '0.9998' '0.0002' -> '1.0000' -ddfma3034 fma 1 '0.9998' '0.0003' -> '1.0001' - -ddfma3035 fma 1 '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddfma3036 fma 1 '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddfma3037 fma 1 '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -ddfma3038 fma 1 '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded -ddfma3039 fma 1 '700000' '10000e+16' -> '1.000000000000007E+20' Rounded - --- symmetry: -ddfma3040 fma 1 '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded -ddfma3041 fma 1 '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded -ddfma3042 fma 1 '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded -ddfma3044 fma 1 '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded -ddfma3045 fma 1 '10000e+16' '700000' -> '1.000000000000007E+20' Rounded - --- same, without rounding -ddfma3046 fma 1 '10000e+9' '7' -> '10000000000007' -ddfma3047 fma 1 '10000e+9' '70' -> '10000000000070' -ddfma3048 fma 1 '10000e+9' '700' -> '10000000000700' -ddfma3049 fma 1 '10000e+9' '7000' -> '10000000007000' -ddfma3050 fma 1 '10000e+9' '70000' -> '10000000070000' -ddfma3051 fma 1 '10000e+9' '700000' -> '10000000700000' -ddfma3052 fma 1 '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -ddfma3053 fma 1 '12' '7.00' -> '19.00' -ddfma3054 fma 1 '1.3' '-1.07' -> '0.23' -ddfma3055 fma 1 '1.3' '-1.30' -> '0.00' -ddfma3056 fma 1 '1.3' '-2.07' -> '-0.77' -ddfma3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' - --- leading zero preservation -ddfma3061 fma 1 1 '0.0001' -> '1.0001' -ddfma3062 fma 1 1 '0.00001' -> '1.00001' -ddfma3063 fma 1 1 '0.000001' -> '1.000001' -ddfma3064 fma 1 1 '0.0000001' -> '1.0000001' -ddfma3065 fma 1 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -ddfma3070 fma 1 1 0 -> 1 -ddfma3071 fma 1 1 0. -> 1 -ddfma3072 fma 1 1 .0 -> 1.0 -ddfma3073 fma 1 1 0.0 -> 1.0 -ddfma3074 fma 1 1 0.00 -> 1.00 -ddfma3075 fma 1 0 1 -> 1 -ddfma3076 fma 1 0. 1 -> 1 -ddfma3077 fma 1 .0 1 -> 1.0 -ddfma3078 fma 1 0.0 1 -> 1.0 -ddfma3079 fma 1 0.00 1 -> 1.00 - --- some carries -ddfma3080 fma 1 999999998 1 -> 999999999 -ddfma3081 fma 1 999999999 1 -> 1000000000 -ddfma3082 fma 1 99999999 1 -> 100000000 -ddfma3083 fma 1 9999999 1 -> 10000000 -ddfma3084 fma 1 999999 1 -> 1000000 -ddfma3085 fma 1 99999 1 -> 100000 -ddfma3086 fma 1 9999 1 -> 10000 -ddfma3087 fma 1 999 1 -> 1000 -ddfma3088 fma 1 99 1 -> 100 -ddfma3089 fma 1 9 1 -> 10 - - --- more LHS swaps -ddfma3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' -ddfma3091 fma 1 '-56267E-6' 0 -> '-0.056267' -ddfma3092 fma 1 '-56267E-5' 0 -> '-0.56267' -ddfma3093 fma 1 '-56267E-4' 0 -> '-5.6267' -ddfma3094 fma 1 '-56267E-3' 0 -> '-56.267' -ddfma3095 fma 1 '-56267E-2' 0 -> '-562.67' -ddfma3096 fma 1 '-56267E-1' 0 -> '-5626.7' -ddfma3097 fma 1 '-56267E-0' 0 -> '-56267' -ddfma3098 fma 1 '-5E-10' 0 -> '-5E-10' -ddfma3099 fma 1 '-5E-7' 0 -> '-5E-7' -ddfma3100 fma 1 '-5E-6' 0 -> '-0.000005' -ddfma3101 fma 1 '-5E-5' 0 -> '-0.00005' -ddfma3102 fma 1 '-5E-4' 0 -> '-0.0005' -ddfma3103 fma 1 '-5E-1' 0 -> '-0.5' -ddfma3104 fma 1 '-5E0' 0 -> '-5' -ddfma3105 fma 1 '-5E1' 0 -> '-50' -ddfma3106 fma 1 '-5E5' 0 -> '-500000' -ddfma3107 fma 1 '-5E15' 0 -> '-5000000000000000' -ddfma3108 fma 1 '-5E16' 0 -> '-5.000000000000000E+16' Rounded -ddfma3109 fma 1 '-5E17' 0 -> '-5.000000000000000E+17' Rounded -ddfma3110 fma 1 '-5E18' 0 -> '-5.000000000000000E+18' Rounded -ddfma3111 fma 1 '-5E100' 0 -> '-5.000000000000000E+100' Rounded - --- more RHS swaps -ddfma3113 fma 1 0 '-56267E-10' -> '-0.0000056267' -ddfma3114 fma 1 0 '-56267E-6' -> '-0.056267' -ddfma3116 fma 1 0 '-56267E-5' -> '-0.56267' -ddfma3117 fma 1 0 '-56267E-4' -> '-5.6267' -ddfma3119 fma 1 0 '-56267E-3' -> '-56.267' -ddfma3120 fma 1 0 '-56267E-2' -> '-562.67' -ddfma3121 fma 1 0 '-56267E-1' -> '-5626.7' -ddfma3122 fma 1 0 '-56267E-0' -> '-56267' -ddfma3123 fma 1 0 '-5E-10' -> '-5E-10' -ddfma3124 fma 1 0 '-5E-7' -> '-5E-7' -ddfma3125 fma 1 0 '-5E-6' -> '-0.000005' -ddfma3126 fma 1 0 '-5E-5' -> '-0.00005' -ddfma3127 fma 1 0 '-5E-4' -> '-0.0005' -ddfma3128 fma 1 0 '-5E-1' -> '-0.5' -ddfma3129 fma 1 0 '-5E0' -> '-5' -ddfma3130 fma 1 0 '-5E1' -> '-50' -ddfma3131 fma 1 0 '-5E5' -> '-500000' -ddfma3132 fma 1 0 '-5E15' -> '-5000000000000000' -ddfma3133 fma 1 0 '-5E16' -> '-5.000000000000000E+16' Rounded -ddfma3134 fma 1 0 '-5E17' -> '-5.000000000000000E+17' Rounded -ddfma3135 fma 1 0 '-5E18' -> '-5.000000000000000E+18' Rounded -ddfma3136 fma 1 0 '-5E100' -> '-5.000000000000000E+100' Rounded - --- related -ddfma3137 fma 1 1 '0E-19' -> '1.000000000000000' Rounded -ddfma3138 fma 1 -1 '0E-19' -> '-1.000000000000000' Rounded -ddfma3139 fma 1 '0E-19' 1 -> '1.000000000000000' Rounded -ddfma3140 fma 1 '0E-19' -1 -> '-1.000000000000000' Rounded -ddfma3141 fma 1 1E+11 0.0000 -> '100000000000.0000' -ddfma3142 fma 1 1E+11 0.00000 -> '100000000000.0000' Rounded -ddfma3143 fma 1 0.000 1E+12 -> '1000000000000.000' -ddfma3144 fma 1 0.0000 1E+12 -> '1000000000000.000' Rounded - --- [some of the next group are really constructor tests] -ddfma3146 fma 1 '00.0' 0 -> '0.0' -ddfma3147 fma 1 '0.00' 0 -> '0.00' -ddfma3148 fma 1 0 '0.00' -> '0.00' -ddfma3149 fma 1 0 '00.0' -> '0.0' -ddfma3150 fma 1 '00.0' '0.00' -> '0.00' -ddfma3151 fma 1 '0.00' '00.0' -> '0.00' -ddfma3152 fma 1 '3' '.3' -> '3.3' -ddfma3153 fma 1 '3.' '.3' -> '3.3' -ddfma3154 fma 1 '3.0' '.3' -> '3.3' -ddfma3155 fma 1 '3.00' '.3' -> '3.30' -ddfma3156 fma 1 '3' '3' -> '6' -ddfma3157 fma 1 '3' '+3' -> '6' -ddfma3158 fma 1 '3' '-3' -> '0' -ddfma3159 fma 1 '0.3' '-0.3' -> '0.0' -ddfma3160 fma 1 '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -ddfma3161 fma 1 '1E+12' '-1' -> '999999999999' -ddfma3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' -ddfma3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' -ddfma3164 fma 1 '-1' '1E+12' -> '999999999999' -ddfma3165 fma 1 '7E+12' '-1' -> '6999999999999' -ddfma3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' -ddfma3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' -ddfma3168 fma 1 '-1' '7E+12' -> '6999999999999' - -rounding: half_up --- 1.234567890123456 1234567890123456 1 234567890123456 -ddfma3170 fma 1 '4.444444444444444' '0.5555555555555567' -> '5.000000000000001' Inexact Rounded -ddfma3171 fma 1 '4.444444444444444' '0.5555555555555566' -> '5.000000000000001' Inexact Rounded -ddfma3172 fma 1 '4.444444444444444' '0.5555555555555565' -> '5.000000000000001' Inexact Rounded -ddfma3173 fma 1 '4.444444444444444' '0.5555555555555564' -> '5.000000000000000' Inexact Rounded -ddfma3174 fma 1 '4.444444444444444' '0.5555555555555553' -> '4.999999999999999' Inexact Rounded -ddfma3175 fma 1 '4.444444444444444' '0.5555555555555552' -> '4.999999999999999' Inexact Rounded -ddfma3176 fma 1 '4.444444444444444' '0.5555555555555551' -> '4.999999999999999' Inexact Rounded -ddfma3177 fma 1 '4.444444444444444' '0.5555555555555550' -> '4.999999999999999' Rounded -ddfma3178 fma 1 '4.444444444444444' '0.5555555555555545' -> '4.999999999999999' Inexact Rounded -ddfma3179 fma 1 '4.444444444444444' '0.5555555555555544' -> '4.999999999999998' Inexact Rounded -ddfma3180 fma 1 '4.444444444444444' '0.5555555555555543' -> '4.999999999999998' Inexact Rounded -ddfma3181 fma 1 '4.444444444444444' '0.5555555555555542' -> '4.999999999999998' Inexact Rounded -ddfma3182 fma 1 '4.444444444444444' '0.5555555555555541' -> '4.999999999999998' Inexact Rounded -ddfma3183 fma 1 '4.444444444444444' '0.5555555555555540' -> '4.999999999999998' Rounded - --- and some more, including residue effects and different roundings -rounding: half_up -ddfma3200 fma 1 '1234560123456789' 0 -> '1234560123456789' -ddfma3201 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddfma3202 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddfma3203 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddfma3204 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddfma3205 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddfma3206 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddfma3207 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddfma3208 fma 1 '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded -ddfma3209 fma 1 '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded -ddfma3210 fma 1 '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded -ddfma3211 fma 1 '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded -ddfma3212 fma 1 '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded -ddfma3213 fma 1 '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded -ddfma3214 fma 1 '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded -ddfma3215 fma 1 '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded -ddfma3216 fma 1 '1234560123456789' 1 -> '1234560123456790' -ddfma3217 fma 1 '1234560123456789' 1.000000001 -> '1234560123456790' Inexact Rounded -ddfma3218 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddfma3219 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded - -rounding: half_even -ddfma3220 fma 1 '1234560123456789' 0 -> '1234560123456789' -ddfma3221 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddfma3222 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddfma3223 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddfma3224 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddfma3225 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddfma3226 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddfma3227 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddfma3228 fma 1 '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded -ddfma3229 fma 1 '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded -ddfma3230 fma 1 '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded -ddfma3231 fma 1 '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded -ddfma3232 fma 1 '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded -ddfma3233 fma 1 '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded -ddfma3234 fma 1 '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded -ddfma3235 fma 1 '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded -ddfma3236 fma 1 '1234560123456789' 1 -> '1234560123456790' -ddfma3237 fma 1 '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded -ddfma3238 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddfma3239 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded --- critical few with even bottom digit... -ddfma3240 fma 1 '1234560123456788' 0.499999999 -> '1234560123456788' Inexact Rounded -ddfma3241 fma 1 '1234560123456788' 0.5 -> '1234560123456788' Inexact Rounded -ddfma3242 fma 1 '1234560123456788' 0.500000001 -> '1234560123456789' Inexact Rounded - -rounding: down -ddfma3250 fma 1 '1234560123456789' 0 -> '1234560123456789' -ddfma3251 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded -ddfma3252 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded -ddfma3253 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded -ddfma3254 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded -ddfma3255 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded -ddfma3256 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded -ddfma3257 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded -ddfma3258 fma 1 '1234560123456789' 0.5 -> '1234560123456789' Inexact Rounded -ddfma3259 fma 1 '1234560123456789' 0.500000001 -> '1234560123456789' Inexact Rounded -ddfma3260 fma 1 '1234560123456789' 0.500001 -> '1234560123456789' Inexact Rounded -ddfma3261 fma 1 '1234560123456789' 0.51 -> '1234560123456789' Inexact Rounded -ddfma3262 fma 1 '1234560123456789' 0.6 -> '1234560123456789' Inexact Rounded -ddfma3263 fma 1 '1234560123456789' 0.9 -> '1234560123456789' Inexact Rounded -ddfma3264 fma 1 '1234560123456789' 0.99999 -> '1234560123456789' Inexact Rounded -ddfma3265 fma 1 '1234560123456789' 0.999999999 -> '1234560123456789' Inexact Rounded -ddfma3266 fma 1 '1234560123456789' 1 -> '1234560123456790' -ddfma3267 fma 1 '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded -ddfma3268 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded -ddfma3269 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_up -ddfma3301 fma 1 -1 1 -> 0 -ddfma3302 fma 1 0 1 -> 1 -ddfma3303 fma 1 1 1 -> 2 -ddfma3304 fma 1 12 1 -> 13 -ddfma3305 fma 1 98 1 -> 99 -ddfma3306 fma 1 99 1 -> 100 -ddfma3307 fma 1 100 1 -> 101 -ddfma3308 fma 1 101 1 -> 102 -ddfma3309 fma 1 -1 -1 -> -2 -ddfma3310 fma 1 0 -1 -> -1 -ddfma3311 fma 1 1 -1 -> 0 -ddfma3312 fma 1 12 -1 -> 11 -ddfma3313 fma 1 98 -1 -> 97 -ddfma3314 fma 1 99 -1 -> 98 -ddfma3315 fma 1 100 -1 -> 99 -ddfma3316 fma 1 101 -1 -> 100 - -ddfma3321 fma 1 -0.01 0.01 -> 0.00 -ddfma3322 fma 1 0.00 0.01 -> 0.01 -ddfma3323 fma 1 0.01 0.01 -> 0.02 -ddfma3324 fma 1 0.12 0.01 -> 0.13 -ddfma3325 fma 1 0.98 0.01 -> 0.99 -ddfma3326 fma 1 0.99 0.01 -> 1.00 -ddfma3327 fma 1 1.00 0.01 -> 1.01 -ddfma3328 fma 1 1.01 0.01 -> 1.02 -ddfma3329 fma 1 -0.01 -0.01 -> -0.02 -ddfma3330 fma 1 0.00 -0.01 -> -0.01 -ddfma3331 fma 1 0.01 -0.01 -> 0.00 -ddfma3332 fma 1 0.12 -0.01 -> 0.11 -ddfma3333 fma 1 0.98 -0.01 -> 0.97 -ddfma3334 fma 1 0.99 -0.01 -> 0.98 -ddfma3335 fma 1 1.00 -0.01 -> 0.99 -ddfma3336 fma 1 1.01 -0.01 -> 1.00 - --- some more cases where adding 0 affects the coefficient -ddfma3340 fma 1 1E+3 0 -> 1000 -ddfma3341 fma 1 1E+15 0 -> 1000000000000000 -ddfma3342 fma 1 1E+16 0 -> 1.000000000000000E+16 Rounded -ddfma3343 fma 1 1E+20 0 -> 1.000000000000000E+20 Rounded --- which simply follow from these cases ... -ddfma3344 fma 1 1E+3 1 -> 1001 -ddfma3345 fma 1 1E+15 1 -> 1000000000000001 -ddfma3346 fma 1 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded -ddfma3347 fma 1 1E+20 1 -> 1.000000000000000E+20 Inexact Rounded -ddfma3348 fma 1 1E+3 7 -> 1007 -ddfma3349 fma 1 1E+15 7 -> 1000000000000007 -ddfma3350 fma 1 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded -ddfma3351 fma 1 1E+20 7 -> 1.000000000000000E+20 Inexact Rounded - --- tryzeros cases -rounding: half_up -ddfma3360 fma 1 0E+50 10000E+1 -> 1.0000E+5 -ddfma3361 fma 1 0E-50 10000E+1 -> 100000.0000000000 Rounded -ddfma3362 fma 1 10000E+1 0E-50 -> 100000.0000000000 Rounded -ddfma3363 fma 1 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact -ddfma3364 fma 1 9.999999999999999E+384 -9.999999999999999E+384 -> 0E+369 - --- a curiosity from JSR 13 testing -rounding: half_down -ddfma3370 fma 1 999999999999999 815 -> 1000000000000814 -ddfma3371 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact -rounding: half_up -ddfma3372 fma 1 999999999999999 815 -> 1000000000000814 -ddfma3373 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact -rounding: half_even -ddfma3374 fma 1 999999999999999 815 -> 1000000000000814 -ddfma3375 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact - --- ulp replacement tests -ddfma3400 fma 1 1 77e-14 -> 1.00000000000077 -ddfma3401 fma 1 1 77e-15 -> 1.000000000000077 -ddfma3402 fma 1 1 77e-16 -> 1.000000000000008 Inexact Rounded -ddfma3403 fma 1 1 77e-17 -> 1.000000000000001 Inexact Rounded -ddfma3404 fma 1 1 77e-18 -> 1.000000000000000 Inexact Rounded -ddfma3405 fma 1 1 77e-19 -> 1.000000000000000 Inexact Rounded -ddfma3406 fma 1 1 77e-299 -> 1.000000000000000 Inexact Rounded - -ddfma3410 fma 1 10 77e-14 -> 10.00000000000077 -ddfma3411 fma 1 10 77e-15 -> 10.00000000000008 Inexact Rounded -ddfma3412 fma 1 10 77e-16 -> 10.00000000000001 Inexact Rounded -ddfma3413 fma 1 10 77e-17 -> 10.00000000000000 Inexact Rounded -ddfma3414 fma 1 10 77e-18 -> 10.00000000000000 Inexact Rounded -ddfma3415 fma 1 10 77e-19 -> 10.00000000000000 Inexact Rounded -ddfma3416 fma 1 10 77e-299 -> 10.00000000000000 Inexact Rounded - -ddfma3420 fma 1 77e-14 1 -> 1.00000000000077 -ddfma3421 fma 1 77e-15 1 -> 1.000000000000077 -ddfma3422 fma 1 77e-16 1 -> 1.000000000000008 Inexact Rounded -ddfma3423 fma 1 77e-17 1 -> 1.000000000000001 Inexact Rounded -ddfma3424 fma 1 77e-18 1 -> 1.000000000000000 Inexact Rounded -ddfma3425 fma 1 77e-19 1 -> 1.000000000000000 Inexact Rounded -ddfma3426 fma 1 77e-299 1 -> 1.000000000000000 Inexact Rounded - -ddfma3430 fma 1 77e-14 10 -> 10.00000000000077 -ddfma3431 fma 1 77e-15 10 -> 10.00000000000008 Inexact Rounded -ddfma3432 fma 1 77e-16 10 -> 10.00000000000001 Inexact Rounded -ddfma3433 fma 1 77e-17 10 -> 10.00000000000000 Inexact Rounded -ddfma3434 fma 1 77e-18 10 -> 10.00000000000000 Inexact Rounded -ddfma3435 fma 1 77e-19 10 -> 10.00000000000000 Inexact Rounded -ddfma3436 fma 1 77e-299 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -ddfma36440 fma 1 1 -77e-14 -> 0.99999999999923 -ddfma36441 fma 1 1 -77e-15 -> 0.999999999999923 -ddfma36442 fma 1 1 -77e-16 -> 0.9999999999999923 -ddfma36443 fma 1 1 -77e-17 -> 0.9999999999999992 Inexact Rounded -ddfma36444 fma 1 1 -77e-18 -> 0.9999999999999999 Inexact Rounded -ddfma36445 fma 1 1 -77e-19 -> 1.000000000000000 Inexact Rounded -ddfma36446 fma 1 1 -77e-99 -> 1.000000000000000 Inexact Rounded - -ddfma36450 fma 1 10 -77e-14 -> 9.99999999999923 -ddfma36451 fma 1 10 -77e-15 -> 9.999999999999923 -ddfma36452 fma 1 10 -77e-16 -> 9.999999999999992 Inexact Rounded -ddfma36453 fma 1 10 -77e-17 -> 9.999999999999999 Inexact Rounded -ddfma36454 fma 1 10 -77e-18 -> 10.00000000000000 Inexact Rounded -ddfma36455 fma 1 10 -77e-19 -> 10.00000000000000 Inexact Rounded -ddfma36456 fma 1 10 -77e-99 -> 10.00000000000000 Inexact Rounded - -ddfma36460 fma 1 -77e-14 1 -> 0.99999999999923 -ddfma36461 fma 1 -77e-15 1 -> 0.999999999999923 -ddfma36462 fma 1 -77e-16 1 -> 0.9999999999999923 -ddfma36463 fma 1 -77e-17 1 -> 0.9999999999999992 Inexact Rounded -ddfma36464 fma 1 -77e-18 1 -> 0.9999999999999999 Inexact Rounded -ddfma36465 fma 1 -77e-19 1 -> 1.000000000000000 Inexact Rounded -ddfma36466 fma 1 -77e-99 1 -> 1.000000000000000 Inexact Rounded - -ddfma36470 fma 1 -77e-14 10 -> 9.99999999999923 -ddfma36471 fma 1 -77e-15 10 -> 9.999999999999923 -ddfma36472 fma 1 -77e-16 10 -> 9.999999999999992 Inexact Rounded -ddfma36473 fma 1 -77e-17 10 -> 9.999999999999999 Inexact Rounded -ddfma36474 fma 1 -77e-18 10 -> 10.00000000000000 Inexact Rounded -ddfma36475 fma 1 -77e-19 10 -> 10.00000000000000 Inexact Rounded -ddfma36476 fma 1 -77e-99 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -ddfma36480 fma 1 -1 77e-14 -> -0.99999999999923 -ddfma36481 fma 1 -1 77e-15 -> -0.999999999999923 -ddfma36482 fma 1 -1 77e-16 -> -0.9999999999999923 -ddfma36483 fma 1 -1 77e-17 -> -0.9999999999999992 Inexact Rounded -ddfma36484 fma 1 -1 77e-18 -> -0.9999999999999999 Inexact Rounded -ddfma36485 fma 1 -1 77e-19 -> -1.000000000000000 Inexact Rounded -ddfma36486 fma 1 -1 77e-99 -> -1.000000000000000 Inexact Rounded - -ddfma36490 fma 1 -10 77e-14 -> -9.99999999999923 -ddfma36491 fma 1 -10 77e-15 -> -9.999999999999923 -ddfma36492 fma 1 -10 77e-16 -> -9.999999999999992 Inexact Rounded -ddfma36493 fma 1 -10 77e-17 -> -9.999999999999999 Inexact Rounded -ddfma36494 fma 1 -10 77e-18 -> -10.00000000000000 Inexact Rounded -ddfma36495 fma 1 -10 77e-19 -> -10.00000000000000 Inexact Rounded -ddfma36496 fma 1 -10 77e-99 -> -10.00000000000000 Inexact Rounded - -ddfma36500 fma 1 77e-14 -1 -> -0.99999999999923 -ddfma36501 fma 1 77e-15 -1 -> -0.999999999999923 -ddfma36502 fma 1 77e-16 -1 -> -0.9999999999999923 -ddfma36503 fma 1 77e-17 -1 -> -0.9999999999999992 Inexact Rounded -ddfma36504 fma 1 77e-18 -1 -> -0.9999999999999999 Inexact Rounded -ddfma36505 fma 1 77e-19 -1 -> -1.000000000000000 Inexact Rounded -ddfma36506 fma 1 77e-99 -1 -> -1.000000000000000 Inexact Rounded - -ddfma36510 fma 1 77e-14 -10 -> -9.99999999999923 -ddfma36511 fma 1 77e-15 -10 -> -9.999999999999923 -ddfma36512 fma 1 77e-16 -10 -> -9.999999999999992 Inexact Rounded -ddfma36513 fma 1 77e-17 -10 -> -9.999999999999999 Inexact Rounded -ddfma36514 fma 1 77e-18 -10 -> -10.00000000000000 Inexact Rounded -ddfma36515 fma 1 77e-19 -10 -> -10.00000000000000 Inexact Rounded -ddfma36516 fma 1 77e-99 -10 -> -10.00000000000000 Inexact Rounded - --- and a couple more with longer RHS -ddfma36520 fma 1 1 -7777e-16 -> 0.9999999999992223 -ddfma36521 fma 1 1 -7777e-17 -> 0.9999999999999222 Inexact Rounded -ddfma36522 fma 1 1 -7777e-18 -> 0.9999999999999922 Inexact Rounded -ddfma36523 fma 1 1 -7777e-19 -> 0.9999999999999992 Inexact Rounded -ddfma36524 fma 1 1 -7777e-20 -> 0.9999999999999999 Inexact Rounded -ddfma36525 fma 1 1 -7777e-21 -> 1.000000000000000 Inexact Rounded -ddfma36526 fma 1 1 -7777e-22 -> 1.000000000000000 Inexact Rounded - - --- and some more residue effects and different roundings -rounding: half_up -ddfma36540 fma 1 '6543210123456789' 0 -> '6543210123456789' -ddfma36541 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddfma36542 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddfma36543 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddfma36544 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddfma36545 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddfma36546 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddfma36547 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddfma36548 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -ddfma36549 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -ddfma36550 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -ddfma36551 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -ddfma36552 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -ddfma36553 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -ddfma36554 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -ddfma36555 fma 1 '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded -ddfma36556 fma 1 '6543210123456789' 1 -> '6543210123456790' -ddfma36557 fma 1 '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded -ddfma36558 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddfma36559 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - -rounding: half_even -ddfma36560 fma 1 '6543210123456789' 0 -> '6543210123456789' -ddfma36561 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddfma36562 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddfma36563 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddfma36564 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddfma36565 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddfma36566 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddfma36567 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddfma36568 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -ddfma36569 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -ddfma36570 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -ddfma36571 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -ddfma36572 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -ddfma36573 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -ddfma36574 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -ddfma36575 fma 1 '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded -ddfma36576 fma 1 '6543210123456789' 1 -> '6543210123456790' -ddfma36577 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -ddfma36578 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddfma36579 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - --- critical few with even bottom digit... -ddfma37540 fma 1 '6543210123456788' 0.499999999 -> '6543210123456788' Inexact Rounded -ddfma37541 fma 1 '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded -ddfma37542 fma 1 '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded - -rounding: down -ddfma37550 fma 1 '6543210123456789' 0 -> '6543210123456789' -ddfma37551 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -ddfma37552 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -ddfma37553 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -ddfma37554 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -ddfma37555 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -ddfma37556 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -ddfma37557 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded -ddfma37558 fma 1 '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded -ddfma37559 fma 1 '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded -ddfma37560 fma 1 '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded -ddfma37561 fma 1 '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded -ddfma37562 fma 1 '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded -ddfma37563 fma 1 '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded -ddfma37564 fma 1 '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded -ddfma37565 fma 1 '6543210123456789' 0.999999999 -> '6543210123456789' Inexact Rounded -ddfma37566 fma 1 '6543210123456789' 1 -> '6543210123456790' -ddfma37567 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -ddfma37568 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -ddfma37569 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - - --- verify a query -rounding: down -ddfma37661 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded -ddfma37662 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded -ddfma37663 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded -ddfma37664 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded - --- more zeros, etc. -rounding: half_even - -ddfma37701 fma 1 5.00 1.00E-3 -> 5.00100 -ddfma37702 fma 1 00.00 0.000 -> 0.000 -ddfma37703 fma 1 00.00 0E-3 -> 0.000 -ddfma37704 fma 1 0E-3 00.00 -> 0.000 - -ddfma37710 fma 1 0E+3 00.00 -> 0.00 -ddfma37711 fma 1 0E+3 00.0 -> 0.0 -ddfma37712 fma 1 0E+3 00. -> 0 -ddfma37713 fma 1 0E+3 00.E+1 -> 0E+1 -ddfma37714 fma 1 0E+3 00.E+2 -> 0E+2 -ddfma37715 fma 1 0E+3 00.E+3 -> 0E+3 -ddfma37716 fma 1 0E+3 00.E+4 -> 0E+3 -ddfma37717 fma 1 0E+3 00.E+5 -> 0E+3 -ddfma37718 fma 1 0E+3 -00.0 -> 0.0 -ddfma37719 fma 1 0E+3 -00. -> 0 -ddfma37731 fma 1 0E+3 -00.E+1 -> 0E+1 - -ddfma37720 fma 1 00.00 0E+3 -> 0.00 -ddfma37721 fma 1 00.0 0E+3 -> 0.0 -ddfma37722 fma 1 00. 0E+3 -> 0 -ddfma37723 fma 1 00.E+1 0E+3 -> 0E+1 -ddfma37724 fma 1 00.E+2 0E+3 -> 0E+2 -ddfma37725 fma 1 00.E+3 0E+3 -> 0E+3 -ddfma37726 fma 1 00.E+4 0E+3 -> 0E+3 -ddfma37727 fma 1 00.E+5 0E+3 -> 0E+3 -ddfma37728 fma 1 -00.00 0E+3 -> 0.00 -ddfma37729 fma 1 -00.0 0E+3 -> 0.0 -ddfma37730 fma 1 -00. 0E+3 -> 0 - -ddfma37732 fma 1 0 0 -> 0 -ddfma37733 fma 1 0 -0 -> 0 -ddfma37734 fma 1 -0 0 -> 0 -ddfma37735 fma 1 -0 -0 -> -0 -- IEEE 854 special case - -ddfma37736 fma 1 1 -1 -> 0 -ddfma37737 fma 1 -1 -1 -> -2 -ddfma37738 fma 1 1 1 -> 2 -ddfma37739 fma 1 -1 1 -> 0 - -ddfma37741 fma 1 0 -1 -> -1 -ddfma37742 fma 1 -0 -1 -> -1 -ddfma37743 fma 1 0 1 -> 1 -ddfma37744 fma 1 -0 1 -> 1 -ddfma37745 fma 1 -1 0 -> -1 -ddfma37746 fma 1 -1 -0 -> -1 -ddfma37747 fma 1 1 0 -> 1 -ddfma37748 fma 1 1 -0 -> 1 - -ddfma37751 fma 1 0.0 -1 -> -1.0 -ddfma37752 fma 1 -0.0 -1 -> -1.0 -ddfma37753 fma 1 0.0 1 -> 1.0 -ddfma37754 fma 1 -0.0 1 -> 1.0 -ddfma37755 fma 1 -1.0 0 -> -1.0 -ddfma37756 fma 1 -1.0 -0 -> -1.0 -ddfma37757 fma 1 1.0 0 -> 1.0 -ddfma37758 fma 1 1.0 -0 -> 1.0 - -ddfma37761 fma 1 0 -1.0 -> -1.0 -ddfma37762 fma 1 -0 -1.0 -> -1.0 -ddfma37763 fma 1 0 1.0 -> 1.0 -ddfma37764 fma 1 -0 1.0 -> 1.0 -ddfma37765 fma 1 -1 0.0 -> -1.0 -ddfma37766 fma 1 -1 -0.0 -> -1.0 -ddfma37767 fma 1 1 0.0 -> 1.0 -ddfma37768 fma 1 1 -0.0 -> 1.0 - -ddfma37771 fma 1 0.0 -1.0 -> -1.0 -ddfma37772 fma 1 -0.0 -1.0 -> -1.0 -ddfma37773 fma 1 0.0 1.0 -> 1.0 -ddfma37774 fma 1 -0.0 1.0 -> 1.0 -ddfma37775 fma 1 -1.0 0.0 -> -1.0 -ddfma37776 fma 1 -1.0 -0.0 -> -1.0 -ddfma37777 fma 1 1.0 0.0 -> 1.0 -ddfma37778 fma 1 1.0 -0.0 -> 1.0 - --- Specials -ddfma37780 fma 1 -Inf -Inf -> -Infinity -ddfma37781 fma 1 -Inf -1000 -> -Infinity -ddfma37782 fma 1 -Inf -1 -> -Infinity -ddfma37783 fma 1 -Inf -0 -> -Infinity -ddfma37784 fma 1 -Inf 0 -> -Infinity -ddfma37785 fma 1 -Inf 1 -> -Infinity -ddfma37786 fma 1 -Inf 1000 -> -Infinity -ddfma37787 fma 1 -1000 -Inf -> -Infinity -ddfma37788 fma 1 -Inf -Inf -> -Infinity -ddfma37789 fma 1 -1 -Inf -> -Infinity -ddfma37790 fma 1 -0 -Inf -> -Infinity -ddfma37791 fma 1 0 -Inf -> -Infinity -ddfma37792 fma 1 1 -Inf -> -Infinity -ddfma37793 fma 1 1000 -Inf -> -Infinity -ddfma37794 fma 1 Inf -Inf -> NaN Invalid_operation - -ddfma37800 fma 1 Inf -Inf -> NaN Invalid_operation -ddfma37801 fma 1 Inf -1000 -> Infinity -ddfma37802 fma 1 Inf -1 -> Infinity -ddfma37803 fma 1 Inf -0 -> Infinity -ddfma37804 fma 1 Inf 0 -> Infinity -ddfma37805 fma 1 Inf 1 -> Infinity -ddfma37806 fma 1 Inf 1000 -> Infinity -ddfma37807 fma 1 Inf Inf -> Infinity -ddfma37808 fma 1 -1000 Inf -> Infinity -ddfma37809 fma 1 -Inf Inf -> NaN Invalid_operation -ddfma37810 fma 1 -1 Inf -> Infinity -ddfma37811 fma 1 -0 Inf -> Infinity -ddfma37812 fma 1 0 Inf -> Infinity -ddfma37813 fma 1 1 Inf -> Infinity -ddfma37814 fma 1 1000 Inf -> Infinity -ddfma37815 fma 1 Inf Inf -> Infinity - -ddfma37821 fma 1 NaN -Inf -> NaN -ddfma37822 fma 1 NaN -1000 -> NaN -ddfma37823 fma 1 NaN -1 -> NaN -ddfma37824 fma 1 NaN -0 -> NaN -ddfma37825 fma 1 NaN 0 -> NaN -ddfma37826 fma 1 NaN 1 -> NaN -ddfma37827 fma 1 NaN 1000 -> NaN -ddfma37828 fma 1 NaN Inf -> NaN -ddfma37829 fma 1 NaN NaN -> NaN -ddfma37830 fma 1 -Inf NaN -> NaN -ddfma37831 fma 1 -1000 NaN -> NaN -ddfma37832 fma 1 -1 NaN -> NaN -ddfma37833 fma 1 -0 NaN -> NaN -ddfma37834 fma 1 0 NaN -> NaN -ddfma37835 fma 1 1 NaN -> NaN -ddfma37836 fma 1 1000 NaN -> NaN -ddfma37837 fma 1 Inf NaN -> NaN - -ddfma37841 fma 1 sNaN -Inf -> NaN Invalid_operation -ddfma37842 fma 1 sNaN -1000 -> NaN Invalid_operation -ddfma37843 fma 1 sNaN -1 -> NaN Invalid_operation -ddfma37844 fma 1 sNaN -0 -> NaN Invalid_operation -ddfma37845 fma 1 sNaN 0 -> NaN Invalid_operation -ddfma37846 fma 1 sNaN 1 -> NaN Invalid_operation -ddfma37847 fma 1 sNaN 1000 -> NaN Invalid_operation -ddfma37848 fma 1 sNaN NaN -> NaN Invalid_operation -ddfma37849 fma 1 sNaN sNaN -> NaN Invalid_operation -ddfma37850 fma 1 NaN sNaN -> NaN Invalid_operation -ddfma37851 fma 1 -Inf sNaN -> NaN Invalid_operation -ddfma37852 fma 1 -1000 sNaN -> NaN Invalid_operation -ddfma37853 fma 1 -1 sNaN -> NaN Invalid_operation -ddfma37854 fma 1 -0 sNaN -> NaN Invalid_operation -ddfma37855 fma 1 0 sNaN -> NaN Invalid_operation -ddfma37856 fma 1 1 sNaN -> NaN Invalid_operation -ddfma37857 fma 1 1000 sNaN -> NaN Invalid_operation -ddfma37858 fma 1 Inf sNaN -> NaN Invalid_operation -ddfma37859 fma 1 NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddfma37861 fma 1 NaN1 -Inf -> NaN1 -ddfma37862 fma 1 +NaN2 -1000 -> NaN2 -ddfma37863 fma 1 NaN3 1000 -> NaN3 -ddfma37864 fma 1 NaN4 Inf -> NaN4 -ddfma37865 fma 1 NaN5 +NaN6 -> NaN5 -ddfma37866 fma 1 -Inf NaN7 -> NaN7 -ddfma37867 fma 1 -1000 NaN8 -> NaN8 -ddfma37868 fma 1 1000 NaN9 -> NaN9 -ddfma37869 fma 1 Inf +NaN10 -> NaN10 -ddfma37871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation -ddfma37872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation -ddfma37873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation -ddfma37874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation -ddfma37875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation -ddfma37876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation -ddfma37877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation -ddfma37878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation -ddfma37879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation -ddfma37880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation -ddfma37881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddfma37882 fma 1 -NaN26 NaN28 -> -NaN26 -ddfma37883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddfma37884 fma 1 1000 -NaN30 -> -NaN30 -ddfma37885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Here we explore near the boundary of rounding a subnormal to Nmin -ddfma37575 fma 1 1E-383 -1E-398 -> 9.99999999999999E-384 Subnormal -ddfma37576 fma 1 -1E-383 +1E-398 -> -9.99999999999999E-384 Subnormal - --- check overflow edge case --- 1234567890123456 -ddfma37972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 -ddfma37973 fma 1 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded -ddfma37974 fma 1 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded -ddfma37975 fma 1 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded -ddfma37976 fma 1 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded -ddfma37977 fma 1 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded -ddfma37978 fma 1 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded -ddfma37979 fma 1 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded -ddfma37980 fma 1 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded -ddfma37981 fma 1 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded -ddfma37982 fma 1 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded -ddfma37983 fma 1 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded -ddfma37984 fma 1 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded - -ddfma37985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 -ddfma37986 fma 1 -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded -ddfma37987 fma 1 -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded -ddfma37988 fma 1 -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded -ddfma37989 fma 1 -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded -ddfma37990 fma 1 -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded -ddfma37991 fma 1 -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded -ddfma37992 fma 1 -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded -ddfma37993 fma 1 -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded -ddfma37994 fma 1 -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded -ddfma37995 fma 1 -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded -ddfma37996 fma 1 -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded -ddfma37997 fma 1 -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -ddfma371100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact -ddfma371101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact -ddfma371103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact -ddfma371104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact -ddfma371105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact -ddfma371106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact -ddfma371107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact -ddfma371108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact -ddfma371109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact - -rounding: ceiling -ddfma371110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact -ddfma371111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact -ddfma371113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact -ddfma371114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact -ddfma371115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact -ddfma371116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact -ddfma371117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact -ddfma371118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact -ddfma371119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -ddfma371300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded -ddfma371310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded -ddfma371311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded -ddfma371312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded -ddfma371313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded -ddfma371314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded -ddfma371315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded -ddfma371316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded -ddfma371317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded -ddfma371318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded -ddfma371319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded -ddfma371320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded -ddfma371321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded -ddfma371322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded -ddfma371323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded -ddfma371324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded -ddfma371325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded -ddfma371339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded - -ddfma371340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded -ddfma371341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded - -ddfma371349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded -ddfma371350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded -ddfma371351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded -ddfma371352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded -ddfma371353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded -ddfma371354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded -ddfma371355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded -ddfma371356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded -ddfma371357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded -ddfma371358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded -ddfma371359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded -ddfma371360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded -ddfma371361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded -ddfma371362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded -ddfma371363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded -ddfma371364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded -ddfma371365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded -ddfma371379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded -ddfma371380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded -ddfma371381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded -ddfma371382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded -ddfma371395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded -ddfma371396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -ddfma371420 fma 1 0 1.123456789012345 -> 1.123456789012345 -ddfma371421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 -ddfma371422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 -ddfma371423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 -ddfma371424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 -ddfma371425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 -ddfma371426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 -ddfma371427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 -ddfma371428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 -ddfma371429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 -ddfma371430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 -ddfma371431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 -ddfma371432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 -ddfma371433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 -ddfma371434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 -ddfma371435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 -ddfma371436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 -ddfma371437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 -ddfma371438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 -ddfma371439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 - --- same, reversed 0 -ddfma371440 fma 1 1.123456789012345 0 -> 1.123456789012345 -ddfma371441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 -ddfma371442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 -ddfma371443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 -ddfma371444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 -ddfma371445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 -ddfma371446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 -ddfma371447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 -ddfma371448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 -ddfma371449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 -ddfma371450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 -ddfma371451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 -ddfma371452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 -ddfma371453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 -ddfma371454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 -ddfma371455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 -ddfma371456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 -ddfma371457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 -ddfma371458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 -ddfma371459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 - --- same, Es on the 0 -ddfma371460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 -ddfma371461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 -ddfma371462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 -ddfma371463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 -ddfma371464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 -ddfma371465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 -ddfma371466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 -ddfma371467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 -ddfma371468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 -ddfma371469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 -ddfma371470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 -ddfma371471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 -ddfma371472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 -ddfma371473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 -ddfma371474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 -ddfma371475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 --- next four flag Rounded because the 0 extends the result -ddfma371476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded -ddfma371477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded -ddfma371478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded -ddfma371479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -ddfma371500 fma 1 0 0E-19 -> 0E-19 -ddfma371501 fma 1 -0 0E-19 -> 0E-19 -ddfma371502 fma 1 0 -0E-19 -> 0E-19 -ddfma371503 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371511 fma 1 -11 11 -> 0 -ddfma371512 fma 1 11 -11 -> 0 - -rounding: half_down --- exact zeros from zeros -ddfma371520 fma 1 0 0E-19 -> 0E-19 -ddfma371521 fma 1 -0 0E-19 -> 0E-19 -ddfma371522 fma 1 0 -0E-19 -> 0E-19 -ddfma371523 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371531 fma 1 -11 11 -> 0 -ddfma371532 fma 1 11 -11 -> 0 - -rounding: half_even --- exact zeros from zeros -ddfma371540 fma 1 0 0E-19 -> 0E-19 -ddfma371541 fma 1 -0 0E-19 -> 0E-19 -ddfma371542 fma 1 0 -0E-19 -> 0E-19 -ddfma371543 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371551 fma 1 -11 11 -> 0 -ddfma371552 fma 1 11 -11 -> 0 - -rounding: up --- exact zeros from zeros -ddfma371560 fma 1 0 0E-19 -> 0E-19 -ddfma371561 fma 1 -0 0E-19 -> 0E-19 -ddfma371562 fma 1 0 -0E-19 -> 0E-19 -ddfma371563 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371571 fma 1 -11 11 -> 0 -ddfma371572 fma 1 11 -11 -> 0 - -rounding: down --- exact zeros from zeros -ddfma371580 fma 1 0 0E-19 -> 0E-19 -ddfma371581 fma 1 -0 0E-19 -> 0E-19 -ddfma371582 fma 1 0 -0E-19 -> 0E-19 -ddfma371583 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371591 fma 1 -11 11 -> 0 -ddfma371592 fma 1 11 -11 -> 0 - -rounding: ceiling --- exact zeros from zeros -ddfma371600 fma 1 0 0E-19 -> 0E-19 -ddfma371601 fma 1 -0 0E-19 -> 0E-19 -ddfma371602 fma 1 0 -0E-19 -> 0E-19 -ddfma371603 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371611 fma 1 -11 11 -> 0 -ddfma371612 fma 1 11 -11 -> 0 - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -ddfma371620 fma 1 0 0E-19 -> 0E-19 -ddfma371621 fma 1 -0 0E-19 -> -0E-19 -- * -ddfma371622 fma 1 0 -0E-19 -> -0E-19 -- * -ddfma371623 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -ddfma371631 fma 1 -11 11 -> -0 -- * -ddfma371632 fma 1 11 -11 -> -0 -- * - --- Examples from SQL proposal (Krishna Kulkarni) -ddfma371701 fma 1 130E-2 120E-2 -> 2.50 -ddfma371702 fma 1 130E-2 12E-1 -> 2.50 -ddfma371703 fma 1 130E-2 1E0 -> 2.30 -ddfma371704 fma 1 1E2 1E4 -> 1.01E+4 -ddfma371705 fma 1 130E-2 -120E-2 -> 0.10 -ddfma371706 fma 1 130E-2 -12E-1 -> 0.10 -ddfma371707 fma 1 130E-2 -1E0 -> 0.30 -ddfma371708 fma 1 1E2 -1E4 -> -9.9E+3 - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -ddfma375001 fma 1 1234567890123456 1 -> 1234567890123457 -ddfma375002 fma 1 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded -ddfma375003 fma 1 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded -ddfma375004 fma 1 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded -ddfma375005 fma 1 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded -ddfma375006 fma 1 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded -ddfma375007 fma 1 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded -ddfma375008 fma 1 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded -ddfma375009 fma 1 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded -ddfma375010 fma 1 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded -ddfma375011 fma 1 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded -ddfma375012 fma 1 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded -ddfma375013 fma 1 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded -ddfma375014 fma 1 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded -ddfma375015 fma 1 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded -ddfma375016 fma 1 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded -ddfma375017 fma 1 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded -ddfma375018 fma 1 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded -ddfma375019 fma 1 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded -ddfma375020 fma 1 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded -ddfma375021 fma 1 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded - --- widening second argument at gap -ddfma375030 fma 1 12345678 1 -> 12345679 -ddfma375031 fma 1 12345678 0.1 -> 12345678.1 -ddfma375032 fma 1 12345678 0.12 -> 12345678.12 -ddfma375033 fma 1 12345678 0.123 -> 12345678.123 -ddfma375034 fma 1 12345678 0.1234 -> 12345678.1234 -ddfma375035 fma 1 12345678 0.12345 -> 12345678.12345 -ddfma375036 fma 1 12345678 0.123456 -> 12345678.123456 -ddfma375037 fma 1 12345678 0.1234567 -> 12345678.1234567 -ddfma375038 fma 1 12345678 0.12345678 -> 12345678.12345678 -ddfma375039 fma 1 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded -ddfma375040 fma 1 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded -ddfma375041 fma 1 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded -ddfma375042 fma 1 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded -ddfma375043 fma 1 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded -ddfma375044 fma 1 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded -ddfma375045 fma 1 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded -ddfma375046 fma 1 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded -ddfma375047 fma 1 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded -ddfma375048 fma 1 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded -ddfma375049 fma 1 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -ddfma375050 fma 1 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded -ddfma375051 fma 1 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded -ddfma375052 fma 1 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded -ddfma375053 fma 1 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded -ddfma375054 fma 1 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded -ddfma375055 fma 1 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded -ddfma375056 fma 1 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded -ddfma375057 fma 1 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded -ddfma375060 fma 1 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded -ddfma375061 fma 1 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded -ddfma375062 fma 1 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded -ddfma375063 fma 1 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded -ddfma375064 fma 1 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded -ddfma375065 fma 1 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded -ddfma375066 fma 1 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded -ddfma375067 fma 1 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -ddfma375070 fma 1 12345678 1E-8 -> 12345678.00000001 -ddfma375071 fma 1 12345678 1E-9 -> 12345678.00000001 Inexact Rounded -ddfma375072 fma 1 12345678 1E-10 -> 12345678.00000001 Inexact Rounded -ddfma375073 fma 1 12345678 1E-11 -> 12345678.00000001 Inexact Rounded -ddfma375074 fma 1 12345678 1E-12 -> 12345678.00000001 Inexact Rounded -ddfma375075 fma 1 12345678 1E-13 -> 12345678.00000001 Inexact Rounded -ddfma375076 fma 1 12345678 1E-14 -> 12345678.00000001 Inexact Rounded -ddfma375077 fma 1 12345678 1E-15 -> 12345678.00000001 Inexact Rounded -ddfma375078 fma 1 12345678 1E-16 -> 12345678.00000001 Inexact Rounded -ddfma375079 fma 1 12345678 1E-17 -> 12345678.00000001 Inexact Rounded -ddfma375080 fma 1 12345678 1E-18 -> 12345678.00000001 Inexact Rounded -ddfma375081 fma 1 12345678 1E-19 -> 12345678.00000001 Inexact Rounded -ddfma375082 fma 1 12345678 1E-20 -> 12345678.00000001 Inexact Rounded -ddfma375083 fma 1 12345678 1E-25 -> 12345678.00000001 Inexact Rounded -ddfma375084 fma 1 12345678 1E-30 -> 12345678.00000001 Inexact Rounded -ddfma375085 fma 1 12345678 1E-31 -> 12345678.00000001 Inexact Rounded -ddfma375086 fma 1 12345678 1E-32 -> 12345678.00000001 Inexact Rounded -ddfma375087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexact Rounded -ddfma375088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded -ddfma375089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded - --- destructive subtraction (from remainder tests) - --- +++ some of these will be off-by-one remainder vs remainderNear - -ddfma4000 fma -1234567890123454 1.000000000000001 1234567890123456 -> 0.765432109876546 -ddfma4001 fma -1234567890123443 1.00000000000001 1234567890123456 -> 0.65432109876557 -ddfma4002 fma -1234567890123332 1.0000000000001 1234567890123456 -> 0.5432109876668 -ddfma4003 fma -308641972530863 4.000000000000001 1234567890123455 -> 2.691358027469137 -ddfma4004 fma -308641972530863 4.000000000000001 1234567890123456 -> 3.691358027469137 -ddfma4005 fma -246913578024696 4.9999999999999 1234567890123456 -> 0.6913578024696 -ddfma4006 fma -246913578024691 4.99999999999999 1234567890123456 -> 3.46913578024691 -ddfma4007 fma -246913578024691 4.999999999999999 1234567890123456 -> 1.246913578024691 -ddfma4008 fma -246913578024691 5.000000000000001 1234567890123456 -> 0.753086421975309 -ddfma4009 fma -246913578024690 5.00000000000001 1234567890123456 -> 3.53086421975310 -ddfma4010 fma -246913578024686 5.0000000000001 1234567890123456 -> 1.3086421975314 -ddfma4011 fma -1234567890123455 1.000000000000001 1234567890123456 -> -0.234567890123455 -ddfma4012 fma -1234567890123444 1.00000000000001 1234567890123456 -> -0.34567890123444 -ddfma4013 fma -1234567890123333 1.0000000000001 1234567890123456 -> -0.4567890123333 -ddfma4014 fma -308641972530864 4.000000000000001 1234567890123455 -> -1.308641972530864 -ddfma4015 fma -308641972530864 4.000000000000001 1234567890123456 -> -0.308641972530864 -ddfma4016 fma -246913578024696 4.9999999999999 1234567890123456 -> 0.6913578024696 -ddfma4017 fma -246913578024692 4.99999999999999 1234567890123456 -> -1.53086421975308 -ddfma4018 fma -246913578024691 4.999999999999999 1234567890123456 -> 1.246913578024691 -ddfma4019 fma -246913578024691 5.000000000000001 1234567890123456 -> 0.753086421975309 -ddfma4020 fma -246913578024691 5.00000000000001 1234567890123456 -> -1.46913578024691 -ddfma4021 fma -246913578024686 5.0000000000001 1234567890123456 -> 1.3086421975314 - - --- Null tests -ddfma39990 fma 1 10 # -> NaN Invalid_operation -ddfma39991 fma 1 # 10 -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- ddFMA.decTest -- decDouble Fused Multiply Add -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- These tests comprise three parts: +-- 1. Sanity checks and other three-operand tests (especially those +-- where the fused operation makes a difference) +-- 2. Multiply tests (third operand is neutral zero [0E+emax]) +-- 3. Addition tests (first operand is 1) +-- The multiply and addition tests are extensive because FMA may have +-- its own dedicated multiplication or addition routine(s), and they +-- also inherently check the left-to-right properties. + +-- Sanity checks +ddfma0001 fma 1 1 1 -> 2 +ddfma0002 fma 1 1 2 -> 3 +ddfma0003 fma 2 2 3 -> 7 +ddfma0004 fma 9 9 9 -> 90 +ddfma0005 fma -1 1 1 -> 0 +ddfma0006 fma -1 1 2 -> 1 +ddfma0007 fma -2 2 3 -> -1 +ddfma0008 fma -9 9 9 -> -72 +ddfma0011 fma 1 -1 1 -> 0 +ddfma0012 fma 1 -1 2 -> 1 +ddfma0013 fma 2 -2 3 -> -1 +ddfma0014 fma 9 -9 9 -> -72 +ddfma0015 fma 1 1 -1 -> 0 +ddfma0016 fma 1 1 -2 -> -1 +ddfma0017 fma 2 2 -3 -> 1 +ddfma0018 fma 9 9 -9 -> 72 + +-- non-integer exacts +ddfma0100 fma 25.2 63.6 -438 -> 1164.72 +ddfma0101 fma 0.301 0.380 334 -> 334.114380 +ddfma0102 fma 49.2 -4.8 23.3 -> -212.86 +ddfma0103 fma 4.22 0.079 -94.6 -> -94.26662 +ddfma0104 fma 903 0.797 0.887 -> 720.578 +ddfma0105 fma 6.13 -161 65.9 -> -921.03 +ddfma0106 fma 28.2 727 5.45 -> 20506.85 +ddfma0107 fma 4 605 688 -> 3108 +ddfma0108 fma 93.3 0.19 0.226 -> 17.953 +ddfma0109 fma 0.169 -341 5.61 -> -52.019 +ddfma0110 fma -72.2 30 -51.2 -> -2217.2 +ddfma0111 fma -0.409 13 20.4 -> 15.083 +ddfma0112 fma 317 77.0 19.0 -> 24428.0 +ddfma0113 fma 47 6.58 1.62 -> 310.88 +ddfma0114 fma 1.36 0.984 0.493 -> 1.83124 +ddfma0115 fma 72.7 274 1.56 -> 19921.36 +ddfma0116 fma 335 847 83 -> 283828 +ddfma0117 fma 666 0.247 25.4 -> 189.902 +ddfma0118 fma -3.87 3.06 78.0 -> 66.1578 +ddfma0119 fma 0.742 192 35.6 -> 178.064 +ddfma0120 fma -91.6 5.29 0.153 -> -484.411 + +-- cases where result is different from separate multiply + add; each +-- is preceded by the result of unfused multiply and add +-- [this is about 20% of all similar cases in general] +-- -> 7.123356429257969E+16 +ddfma0201 fma 27583489.6645 2582471078.04 2593183.42371 -> 7.123356429257970E+16 Inexact Rounded +-- -> 22813275328.80506 +ddfma0208 fma 24280.355566 939577.397653 2032.013252 -> 22813275328.80507 Inexact Rounded +-- -> -2.030397734278062E+16 +ddfma0209 fma 7848976432 -2586831.2281 137903.517909 -> -2.030397734278061E+16 Inexact Rounded +-- -> 2040774094814.077 +ddfma0217 fma 56890.388731 35872030.4255 339337.123410 -> 2040774094814.078 Inexact Rounded +-- -> 2.714469575205049E+18 +ddfma0220 fma 7533543.57445 360317763928 5073392.31638 -> 2.714469575205050E+18 Inexact Rounded +-- -> 1.011676297716716E+19 +ddfma0223 fma 739945255.563 13672312784.1 -994381.53572 -> 1.011676297716715E+19 Inexact Rounded +-- -> -2.914135721455315E+23 +ddfma0224 fma -413510957218 704729988550 9234162614.0 -> -2.914135721455314E+23 Inexact Rounded +-- -> 2.620119863365786E+17 +ddfma0226 fma 437484.00601 598906432790 894450638.442 -> 2.620119863365787E+17 Inexact Rounded +-- -> 1.272647995808178E+19 +ddfma0253 fma 73287556929 173651305.784 -358312568.389 -> 1.272647995808177E+19 Inexact Rounded +-- -> -1.753769320861851E+18 +ddfma0257 fma 203258304486 -8628278.8066 153127.446727 -> -1.753769320861850E+18 Inexact Rounded +-- -> -1.550737835263346E+17 +ddfma0260 fma 42560533.1774 -3643605282.86 178277.96377 -> -1.550737835263347E+17 Inexact Rounded +-- -> 2.897624620576005E+22 +ddfma0269 fma 142656587375 203118879670 604576103991 -> 2.897624620576004E+22 Inexact Rounded + +-- Cases where multiply would overflow or underflow if separate +fma0300 fma 9e+384 10 0 -> Infinity Overflow Inexact Rounded +fma0301 fma 1e+384 10 0 -> Infinity Overflow Inexact Rounded +fma0302 fma 1e+384 10 -1e+384 -> 9.000000000000000E+384 Clamped +fma0303 fma 1e+384 10 -9e+384 -> 1.000000000000000E+384 Clamped +-- subnormal etc. +fma0305 fma 1e-398 0.1 0 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +fma0306 fma 1e-398 0.1 1 -> 1.000000000000000 Inexact Rounded +fma0307 fma 1e-398 0.1 1e-398 -> 1E-398 Underflow Subnormal Inexact Rounded + +-- Infinite combinations +ddfma0800 fma Inf Inf Inf -> Infinity +ddfma0801 fma Inf Inf -Inf -> NaN Invalid_operation +ddfma0802 fma Inf -Inf Inf -> NaN Invalid_operation +ddfma0803 fma Inf -Inf -Inf -> -Infinity +ddfma0804 fma -Inf Inf Inf -> NaN Invalid_operation +ddfma0805 fma -Inf Inf -Inf -> -Infinity +ddfma0806 fma -Inf -Inf Inf -> Infinity +ddfma0807 fma -Inf -Inf -Inf -> NaN Invalid_operation + +-- Triple NaN propagation +ddfma0900 fma NaN2 NaN3 NaN5 -> NaN2 +ddfma0901 fma 0 NaN3 NaN5 -> NaN3 +ddfma0902 fma 0 0 NaN5 -> NaN5 +-- first sNaN wins (consider qNaN from earlier sNaN being +-- overridden by an sNaN in third operand) +ddfma0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +ddfma0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation +ddfma0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation +ddfma0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +ddfma0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation +ddfma0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation + +-- MULTIPLICATION TESTS ------------------------------------------------ + +-- sanity checks +ddfma2000 fma 2 2 0e+384 -> 4 +ddfma2001 fma 2 3 0e+384 -> 6 +ddfma2002 fma 5 1 0e+384 -> 5 +ddfma2003 fma 5 2 0e+384 -> 10 +ddfma2004 fma 1.20 2 0e+384 -> 2.40 +ddfma2005 fma 1.20 0 0e+384 -> 0.00 +ddfma2006 fma 1.20 -2 0e+384 -> -2.40 +ddfma2007 fma -1.20 2 0e+384 -> -2.40 +ddfma2008 fma -1.20 0 0e+384 -> 0.00 +ddfma2009 fma -1.20 -2 0e+384 -> 2.40 +ddfma2010 fma 5.09 7.1 0e+384 -> 36.139 +ddfma2011 fma 2.5 4 0e+384 -> 10.0 +ddfma2012 fma 2.50 4 0e+384 -> 10.00 +ddfma2013 fma 1.23456789 1.00000000 0e+384 -> 1.234567890000000 Rounded +ddfma2015 fma 2.50 4 0e+384 -> 10.00 +ddfma2016 fma 9.999999999 9.999999999 0e+384 -> 99.99999998000000 Inexact Rounded +ddfma2017 fma 9.999999999 -9.999999999 0e+384 -> -99.99999998000000 Inexact Rounded +ddfma2018 fma -9.999999999 9.999999999 0e+384 -> -99.99999998000000 Inexact Rounded +ddfma2019 fma -9.999999999 -9.999999999 0e+384 -> 99.99999998000000 Inexact Rounded + +-- zeros, etc. +ddfma2021 fma 0 0 0e+384 -> 0 +ddfma2022 fma 0 -0 0e+384 -> 0 +ddfma2023 fma -0 0 0e+384 -> 0 +ddfma2024 fma -0 -0 0e+384 -> 0 +ddfma2025 fma -0.0 -0.0 0e+384 -> 0.00 +ddfma2026 fma -0.0 -0.0 0e+384 -> 0.00 +ddfma2027 fma -0.0 -0.0 0e+384 -> 0.00 +ddfma2028 fma -0.0 -0.0 0e+384 -> 0.00 +ddfma2030 fma 5.00 1E-3 0e+384 -> 0.00500 +ddfma2031 fma 00.00 0.000 0e+384 -> 0.00000 +ddfma2032 fma 00.00 0E-3 0e+384 -> 0.00000 -- rhs is 0 +ddfma2033 fma 0E-3 00.00 0e+384 -> 0.00000 -- lhs is 0 +ddfma2034 fma -5.00 1E-3 0e+384 -> -0.00500 +ddfma2035 fma -00.00 0.000 0e+384 -> 0.00000 +ddfma2036 fma -00.00 0E-3 0e+384 -> 0.00000 -- rhs is 0 +ddfma2037 fma -0E-3 00.00 0e+384 -> 0.00000 -- lhs is 0 +ddfma2038 fma 5.00 -1E-3 0e+384 -> -0.00500 +ddfma2039 fma 00.00 -0.000 0e+384 -> 0.00000 +ddfma2040 fma 00.00 -0E-3 0e+384 -> 0.00000 -- rhs is 0 +ddfma2041 fma 0E-3 -00.00 0e+384 -> 0.00000 -- lhs is 0 +ddfma2042 fma -5.00 -1E-3 0e+384 -> 0.00500 +ddfma2043 fma -00.00 -0.000 0e+384 -> 0.00000 +ddfma2044 fma -00.00 -0E-3 0e+384 -> 0.00000 -- rhs is 0 +ddfma2045 fma -0E-3 -00.00 -0e+384 -> 0.00000 -- lhs is 0 +ddfma2046 fma -0E-3 00.00 -0e+384 -> -0.00000 +ddfma2047 fma 0E-3 -00.00 -0e+384 -> -0.00000 +ddfma2048 fma 0E-3 00.00 -0e+384 -> 0.00000 + +-- examples from decarith +ddfma2050 fma 1.20 3 0e+384 -> 3.60 +ddfma2051 fma 7 3 0e+384 -> 21 +ddfma2052 fma 0.9 0.8 0e+384 -> 0.72 +ddfma2053 fma 0.9 -0 0e+384 -> 0.0 +ddfma2054 fma 654321 654321 0e+384 -> 428135971041 + +ddfma2060 fma 123.45 1e7 0e+384 -> 1.2345E+9 +ddfma2061 fma 123.45 1e8 0e+384 -> 1.2345E+10 +ddfma2062 fma 123.45 1e+9 0e+384 -> 1.2345E+11 +ddfma2063 fma 123.45 1e10 0e+384 -> 1.2345E+12 +ddfma2064 fma 123.45 1e11 0e+384 -> 1.2345E+13 +ddfma2065 fma 123.45 1e12 0e+384 -> 1.2345E+14 +ddfma2066 fma 123.45 1e13 0e+384 -> 1.2345E+15 + + +-- test some intermediate lengths +-- 1234567890123456 +ddfma2080 fma 0.1 1230123456456789 0e+384 -> 123012345645678.9 +ddfma2084 fma 0.1 1230123456456789 0e+384 -> 123012345645678.9 +ddfma2090 fma 1230123456456789 0.1 0e+384 -> 123012345645678.9 +ddfma2094 fma 1230123456456789 0.1 0e+384 -> 123012345645678.9 + +-- test some more edge cases and carries +ddfma2101 fma 9 9 0e+384 -> 81 +ddfma2102 fma 9 90 0e+384 -> 810 +ddfma2103 fma 9 900 0e+384 -> 8100 +ddfma2104 fma 9 9000 0e+384 -> 81000 +ddfma2105 fma 9 90000 0e+384 -> 810000 +ddfma2106 fma 9 900000 0e+384 -> 8100000 +ddfma2107 fma 9 9000000 0e+384 -> 81000000 +ddfma2108 fma 9 90000000 0e+384 -> 810000000 +ddfma2109 fma 9 900000000 0e+384 -> 8100000000 +ddfma2110 fma 9 9000000000 0e+384 -> 81000000000 +ddfma2111 fma 9 90000000000 0e+384 -> 810000000000 +ddfma2112 fma 9 900000000000 0e+384 -> 8100000000000 +ddfma2113 fma 9 9000000000000 0e+384 -> 81000000000000 +ddfma2114 fma 9 90000000000000 0e+384 -> 810000000000000 +ddfma2115 fma 9 900000000000000 0e+384 -> 8100000000000000 +--ddfma2116 fma 9 9000000000000000 0e+384 -> 81000000000000000 +--ddfma2117 fma 9 90000000000000000 0e+384 -> 810000000000000000 +--ddfma2118 fma 9 900000000000000000 0e+384 -> 8100000000000000000 +--ddfma2119 fma 9 9000000000000000000 0e+384 -> 81000000000000000000 +--ddfma2120 fma 9 90000000000000000000 0e+384 -> 810000000000000000000 +--ddfma2121 fma 9 900000000000000000000 0e+384 -> 8100000000000000000000 +--ddfma2122 fma 9 9000000000000000000000 0e+384 -> 81000000000000000000000 +--ddfma2123 fma 9 90000000000000000000000 0e+384 -> 810000000000000000000000 +-- test some more edge cases without carries +ddfma2131 fma 3 3 0e+384 -> 9 +ddfma2132 fma 3 30 0e+384 -> 90 +ddfma2133 fma 3 300 0e+384 -> 900 +ddfma2134 fma 3 3000 0e+384 -> 9000 +ddfma2135 fma 3 30000 0e+384 -> 90000 +ddfma2136 fma 3 300000 0e+384 -> 900000 +ddfma2137 fma 3 3000000 0e+384 -> 9000000 +ddfma2138 fma 3 30000000 0e+384 -> 90000000 +ddfma2139 fma 3 300000000 0e+384 -> 900000000 +ddfma2140 fma 3 3000000000 0e+384 -> 9000000000 +ddfma2141 fma 3 30000000000 0e+384 -> 90000000000 +ddfma2142 fma 3 300000000000 0e+384 -> 900000000000 +ddfma2143 fma 3 3000000000000 0e+384 -> 9000000000000 +ddfma2144 fma 3 30000000000000 0e+384 -> 90000000000000 +ddfma2145 fma 3 300000000000000 0e+384 -> 900000000000000 + +-- test some edge cases with exact rounding +ddfma2301 fma 9 9 0e+384 -> 81 +ddfma2302 fma 9 90 0e+384 -> 810 +ddfma2303 fma 9 900 0e+384 -> 8100 +ddfma2304 fma 9 9000 0e+384 -> 81000 +ddfma2305 fma 9 90000 0e+384 -> 810000 +ddfma2306 fma 9 900000 0e+384 -> 8100000 +ddfma2307 fma 9 9000000 0e+384 -> 81000000 +ddfma2308 fma 9 90000000 0e+384 -> 810000000 +ddfma2309 fma 9 900000000 0e+384 -> 8100000000 +ddfma2310 fma 9 9000000000 0e+384 -> 81000000000 +ddfma2311 fma 9 90000000000 0e+384 -> 810000000000 +ddfma2312 fma 9 900000000000 0e+384 -> 8100000000000 +ddfma2313 fma 9 9000000000000 0e+384 -> 81000000000000 +ddfma2314 fma 9 90000000000000 0e+384 -> 810000000000000 +ddfma2315 fma 9 900000000000000 0e+384 -> 8100000000000000 +ddfma2316 fma 9 9000000000000000 0e+384 -> 8.100000000000000E+16 Rounded +ddfma2317 fma 90 9000000000000000 0e+384 -> 8.100000000000000E+17 Rounded +ddfma2318 fma 900 9000000000000000 0e+384 -> 8.100000000000000E+18 Rounded +ddfma2319 fma 9000 9000000000000000 0e+384 -> 8.100000000000000E+19 Rounded +ddfma2320 fma 90000 9000000000000000 0e+384 -> 8.100000000000000E+20 Rounded +ddfma2321 fma 900000 9000000000000000 0e+384 -> 8.100000000000000E+21 Rounded +ddfma2322 fma 9000000 9000000000000000 0e+384 -> 8.100000000000000E+22 Rounded +ddfma2323 fma 90000000 9000000000000000 0e+384 -> 8.100000000000000E+23 Rounded + +-- tryzeros cases +ddfma2504 fma 0E-260 1000E-260 0e+384 -> 0E-398 Clamped +ddfma2505 fma 100E+260 0E+260 0e+384 -> 0E+369 Clamped + +-- mixed with zeros +ddfma2541 fma 0 -1 0e+384 -> 0 +ddfma2542 fma -0 -1 0e+384 -> 0 +ddfma2543 fma 0 1 0e+384 -> 0 +ddfma2544 fma -0 1 0e+384 -> 0 +ddfma2545 fma -1 0 0e+384 -> 0 +ddfma2546 fma -1 -0 0e+384 -> 0 +ddfma2547 fma 1 0 0e+384 -> 0 +ddfma2548 fma 1 -0 0e+384 -> 0 + +ddfma2551 fma 0.0 -1 0e+384 -> 0.0 +ddfma2552 fma -0.0 -1 0e+384 -> 0.0 +ddfma2553 fma 0.0 1 0e+384 -> 0.0 +ddfma2554 fma -0.0 1 0e+384 -> 0.0 +ddfma2555 fma -1.0 0 0e+384 -> 0.0 +ddfma2556 fma -1.0 -0 0e+384 -> 0.0 +ddfma2557 fma 1.0 0 0e+384 -> 0.0 +ddfma2558 fma 1.0 -0 0e+384 -> 0.0 + +ddfma2561 fma 0 -1.0 0e+384 -> 0.0 +ddfma2562 fma -0 -1.0 0e+384 -> 0.0 +ddfma2563 fma 0 1.0 0e+384 -> 0.0 +ddfma2564 fma -0 1.0 0e+384 -> 0.0 +ddfma2565 fma -1 0.0 0e+384 -> 0.0 +ddfma2566 fma -1 -0.0 0e+384 -> 0.0 +ddfma2567 fma 1 0.0 0e+384 -> 0.0 +ddfma2568 fma 1 -0.0 0e+384 -> 0.0 + +ddfma2571 fma 0.0 -1.0 0e+384 -> 0.00 +ddfma2572 fma -0.0 -1.0 0e+384 -> 0.00 +ddfma2573 fma 0.0 1.0 0e+384 -> 0.00 +ddfma2574 fma -0.0 1.0 0e+384 -> 0.00 +ddfma2575 fma -1.0 0.0 0e+384 -> 0.00 +ddfma2576 fma -1.0 -0.0 0e+384 -> 0.00 +ddfma2577 fma 1.0 0.0 0e+384 -> 0.00 +ddfma2578 fma 1.0 -0.0 0e+384 -> 0.00 + +-- Specials +ddfma2580 fma Inf -Inf 0e+384 -> -Infinity +ddfma2581 fma Inf -1000 0e+384 -> -Infinity +ddfma2582 fma Inf -1 0e+384 -> -Infinity +ddfma2583 fma Inf -0 0e+384 -> NaN Invalid_operation +ddfma2584 fma Inf 0 0e+384 -> NaN Invalid_operation +ddfma2585 fma Inf 1 0e+384 -> Infinity +ddfma2586 fma Inf 1000 0e+384 -> Infinity +ddfma2587 fma Inf Inf 0e+384 -> Infinity +ddfma2588 fma -1000 Inf 0e+384 -> -Infinity +ddfma2589 fma -Inf Inf 0e+384 -> -Infinity +ddfma2590 fma -1 Inf 0e+384 -> -Infinity +ddfma2591 fma -0 Inf 0e+384 -> NaN Invalid_operation +ddfma2592 fma 0 Inf 0e+384 -> NaN Invalid_operation +ddfma2593 fma 1 Inf 0e+384 -> Infinity +ddfma2594 fma 1000 Inf 0e+384 -> Infinity +ddfma2595 fma Inf Inf 0e+384 -> Infinity + +ddfma2600 fma -Inf -Inf 0e+384 -> Infinity +ddfma2601 fma -Inf -1000 0e+384 -> Infinity +ddfma2602 fma -Inf -1 0e+384 -> Infinity +ddfma2603 fma -Inf -0 0e+384 -> NaN Invalid_operation +ddfma2604 fma -Inf 0 0e+384 -> NaN Invalid_operation +ddfma2605 fma -Inf 1 0e+384 -> -Infinity +ddfma2606 fma -Inf 1000 0e+384 -> -Infinity +ddfma2607 fma -Inf Inf 0e+384 -> -Infinity +ddfma2608 fma -1000 Inf 0e+384 -> -Infinity +ddfma2609 fma -Inf -Inf 0e+384 -> Infinity +ddfma2610 fma -1 -Inf 0e+384 -> Infinity +ddfma2611 fma -0 -Inf 0e+384 -> NaN Invalid_operation +ddfma2612 fma 0 -Inf 0e+384 -> NaN Invalid_operation +ddfma2613 fma 1 -Inf 0e+384 -> -Infinity +ddfma2614 fma 1000 -Inf 0e+384 -> -Infinity +ddfma2615 fma Inf -Inf 0e+384 -> -Infinity + +ddfma2621 fma NaN -Inf 0e+384 -> NaN +ddfma2622 fma NaN -1000 0e+384 -> NaN +ddfma2623 fma NaN -1 0e+384 -> NaN +ddfma2624 fma NaN -0 0e+384 -> NaN +ddfma2625 fma NaN 0 0e+384 -> NaN +ddfma2626 fma NaN 1 0e+384 -> NaN +ddfma2627 fma NaN 1000 0e+384 -> NaN +ddfma2628 fma NaN Inf 0e+384 -> NaN +ddfma2629 fma NaN NaN 0e+384 -> NaN +ddfma2630 fma -Inf NaN 0e+384 -> NaN +ddfma2631 fma -1000 NaN 0e+384 -> NaN +ddfma2632 fma -1 NaN 0e+384 -> NaN +ddfma2633 fma -0 NaN 0e+384 -> NaN +ddfma2634 fma 0 NaN 0e+384 -> NaN +ddfma2635 fma 1 NaN 0e+384 -> NaN +ddfma2636 fma 1000 NaN 0e+384 -> NaN +ddfma2637 fma Inf NaN 0e+384 -> NaN + +ddfma2641 fma sNaN -Inf 0e+384 -> NaN Invalid_operation +ddfma2642 fma sNaN -1000 0e+384 -> NaN Invalid_operation +ddfma2643 fma sNaN -1 0e+384 -> NaN Invalid_operation +ddfma2644 fma sNaN -0 0e+384 -> NaN Invalid_operation +ddfma2645 fma sNaN 0 0e+384 -> NaN Invalid_operation +ddfma2646 fma sNaN 1 0e+384 -> NaN Invalid_operation +ddfma2647 fma sNaN 1000 0e+384 -> NaN Invalid_operation +ddfma2648 fma sNaN NaN 0e+384 -> NaN Invalid_operation +ddfma2649 fma sNaN sNaN 0e+384 -> NaN Invalid_operation +ddfma2650 fma NaN sNaN 0e+384 -> NaN Invalid_operation +ddfma2651 fma -Inf sNaN 0e+384 -> NaN Invalid_operation +ddfma2652 fma -1000 sNaN 0e+384 -> NaN Invalid_operation +ddfma2653 fma -1 sNaN 0e+384 -> NaN Invalid_operation +ddfma2654 fma -0 sNaN 0e+384 -> NaN Invalid_operation +ddfma2655 fma 0 sNaN 0e+384 -> NaN Invalid_operation +ddfma2656 fma 1 sNaN 0e+384 -> NaN Invalid_operation +ddfma2657 fma 1000 sNaN 0e+384 -> NaN Invalid_operation +ddfma2658 fma Inf sNaN 0e+384 -> NaN Invalid_operation +ddfma2659 fma NaN sNaN 0e+384 -> NaN Invalid_operation + +-- propagating NaNs +ddfma2661 fma NaN9 -Inf 0e+384 -> NaN9 +ddfma2662 fma NaN8 999 0e+384 -> NaN8 +ddfma2663 fma NaN71 Inf 0e+384 -> NaN71 +ddfma2664 fma NaN6 NaN5 0e+384 -> NaN6 +ddfma2665 fma -Inf NaN4 0e+384 -> NaN4 +ddfma2666 fma -999 NaN33 0e+384 -> NaN33 +ddfma2667 fma Inf NaN2 0e+384 -> NaN2 + +ddfma2671 fma sNaN99 -Inf 0e+384 -> NaN99 Invalid_operation +ddfma2672 fma sNaN98 -11 0e+384 -> NaN98 Invalid_operation +ddfma2673 fma sNaN97 NaN 0e+384 -> NaN97 Invalid_operation +ddfma2674 fma sNaN16 sNaN94 0e+384 -> NaN16 Invalid_operation +ddfma2675 fma NaN95 sNaN93 0e+384 -> NaN93 Invalid_operation +ddfma2676 fma -Inf sNaN92 0e+384 -> NaN92 Invalid_operation +ddfma2677 fma 088 sNaN91 0e+384 -> NaN91 Invalid_operation +ddfma2678 fma Inf sNaN90 0e+384 -> NaN90 Invalid_operation +ddfma2679 fma NaN sNaN89 0e+384 -> NaN89 Invalid_operation + +ddfma2681 fma -NaN9 -Inf 0e+384 -> -NaN9 +ddfma2682 fma -NaN8 999 0e+384 -> -NaN8 +ddfma2683 fma -NaN71 Inf 0e+384 -> -NaN71 +ddfma2684 fma -NaN6 -NaN5 0e+384 -> -NaN6 +ddfma2685 fma -Inf -NaN4 0e+384 -> -NaN4 +ddfma2686 fma -999 -NaN33 0e+384 -> -NaN33 +ddfma2687 fma Inf -NaN2 0e+384 -> -NaN2 + +ddfma2691 fma -sNaN99 -Inf 0e+384 -> -NaN99 Invalid_operation +ddfma2692 fma -sNaN98 -11 0e+384 -> -NaN98 Invalid_operation +ddfma2693 fma -sNaN97 NaN 0e+384 -> -NaN97 Invalid_operation +ddfma2694 fma -sNaN16 -sNaN94 0e+384 -> -NaN16 Invalid_operation +ddfma2695 fma -NaN95 -sNaN93 0e+384 -> -NaN93 Invalid_operation +ddfma2696 fma -Inf -sNaN92 0e+384 -> -NaN92 Invalid_operation +ddfma2697 fma 088 -sNaN91 0e+384 -> -NaN91 Invalid_operation +ddfma2698 fma Inf -sNaN90 0e+384 -> -NaN90 Invalid_operation +ddfma2699 fma -NaN -sNaN89 0e+384 -> -NaN89 Invalid_operation + +ddfma2701 fma -NaN -Inf 0e+384 -> -NaN +ddfma2702 fma -NaN 999 0e+384 -> -NaN +ddfma2703 fma -NaN Inf 0e+384 -> -NaN +ddfma2704 fma -NaN -NaN 0e+384 -> -NaN +ddfma2705 fma -Inf -NaN0 0e+384 -> -NaN +ddfma2706 fma -999 -NaN 0e+384 -> -NaN +ddfma2707 fma Inf -NaN 0e+384 -> -NaN + +ddfma2711 fma -sNaN -Inf 0e+384 -> -NaN Invalid_operation +ddfma2712 fma -sNaN -11 0e+384 -> -NaN Invalid_operation +ddfma2713 fma -sNaN00 NaN 0e+384 -> -NaN Invalid_operation +ddfma2714 fma -sNaN -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2715 fma -NaN -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2716 fma -Inf -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2717 fma 088 -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2718 fma Inf -sNaN 0e+384 -> -NaN Invalid_operation +ddfma2719 fma -NaN -sNaN 0e+384 -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +-- signs +ddfma2751 fma 1e+277 1e+311 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2752 fma 1e+277 -1e+311 0e+384 -> -Infinity Overflow Inexact Rounded +ddfma2753 fma -1e+277 1e+311 0e+384 -> -Infinity Overflow Inexact Rounded +ddfma2754 fma -1e+277 -1e+311 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2755 fma 1e-277 1e-311 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2756 fma 1e-277 -1e-311 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2757 fma -1e-277 1e-311 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2758 fma -1e-277 -1e-311 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +ddfma2760 fma 1e-291 1e-101 0e+384 -> 1E-392 Subnormal +ddfma2761 fma 1e-291 1e-102 0e+384 -> 1E-393 Subnormal +ddfma2762 fma 1e-291 1e-103 0e+384 -> 1E-394 Subnormal +ddfma2763 fma 1e-291 1e-104 0e+384 -> 1E-395 Subnormal +ddfma2764 fma 1e-291 1e-105 0e+384 -> 1E-396 Subnormal +ddfma2765 fma 1e-291 1e-106 0e+384 -> 1E-397 Subnormal +ddfma2766 fma 1e-291 1e-107 0e+384 -> 1E-398 Subnormal +ddfma2767 fma 1e-291 1e-108 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2768 fma 1e-291 1e-109 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2769 fma 1e-291 1e-110 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +ddfma2770 fma 1e+60 1e+321 0e+384 -> 1.000000000000E+381 Clamped +ddfma2771 fma 1e+60 1e+322 0e+384 -> 1.0000000000000E+382 Clamped +ddfma2772 fma 1e+60 1e+323 0e+384 -> 1.00000000000000E+383 Clamped +ddfma2773 fma 1e+60 1e+324 0e+384 -> 1.000000000000000E+384 Clamped +ddfma2774 fma 1e+60 1e+325 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2775 fma 1e+60 1e+326 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2776 fma 1e+60 1e+327 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2777 fma 1e+60 1e+328 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2778 fma 1e+60 1e+329 0e+384 -> Infinity Overflow Inexact Rounded +ddfma2779 fma 1e+60 1e+330 0e+384 -> Infinity Overflow Inexact Rounded + +ddfma2801 fma 1.0000E-394 1 0e+384 -> 1.0000E-394 Subnormal +ddfma2802 fma 1.000E-394 1e-1 0e+384 -> 1.000E-395 Subnormal +ddfma2803 fma 1.00E-394 1e-2 0e+384 -> 1.00E-396 Subnormal +ddfma2804 fma 1.0E-394 1e-3 0e+384 -> 1.0E-397 Subnormal +ddfma2805 fma 1.0E-394 1e-4 0e+384 -> 1E-398 Subnormal Rounded +ddfma2806 fma 1.3E-394 1e-4 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded +ddfma2807 fma 1.5E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2808 fma 1.7E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2809 fma 2.3E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2810 fma 2.5E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2811 fma 2.7E-394 1e-4 0e+384 -> 3E-398 Underflow Subnormal Inexact Rounded +ddfma2812 fma 1.49E-394 1e-4 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded +ddfma2813 fma 1.50E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2814 fma 1.51E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2815 fma 2.49E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2816 fma 2.50E-394 1e-4 0e+384 -> 2E-398 Underflow Subnormal Inexact Rounded +ddfma2817 fma 2.51E-394 1e-4 0e+384 -> 3E-398 Underflow Subnormal Inexact Rounded + +ddfma2818 fma 1E-394 1e-4 0e+384 -> 1E-398 Subnormal +ddfma2819 fma 3E-394 1e-5 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2820 fma 5E-394 1e-5 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2821 fma 7E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded +ddfma2822 fma 9E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded +ddfma2823 fma 9.9E-394 1e-5 0e+384 -> 1E-398 Underflow Subnormal Inexact Rounded + +ddfma2824 fma 1E-394 -1e-4 0e+384 -> -1E-398 Subnormal +ddfma2825 fma 3E-394 -1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2826 fma -5E-394 1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2827 fma 7E-394 -1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded +ddfma2828 fma -9E-394 1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded +ddfma2829 fma 9.9E-394 -1e-5 0e+384 -> -1E-398 Underflow Subnormal Inexact Rounded +ddfma2830 fma 3.0E-394 -1e-5 0e+384 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped + +ddfma2831 fma 1.0E-199 1e-200 0e+384 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddfma2832 fma 1.0E-199 1e-199 0e+384 -> 1E-398 Subnormal Rounded +ddfma2833 fma 1.0E-199 1e-198 0e+384 -> 1.0E-397 Subnormal +ddfma2834 fma 2.0E-199 2e-198 0e+384 -> 4.0E-397 Subnormal +ddfma2835 fma 4.0E-199 4e-198 0e+384 -> 1.60E-396 Subnormal +ddfma2836 fma 10.0E-199 10e-198 0e+384 -> 1.000E-395 Subnormal +ddfma2837 fma 30.0E-199 30e-198 0e+384 -> 9.000E-395 Subnormal +ddfma2838 fma 40.0E-199 40e-188 0e+384 -> 1.6000E-384 Subnormal +ddfma2839 fma 40.0E-199 40e-187 0e+384 -> 1.6000E-383 +ddfma2840 fma 40.0E-199 40e-186 0e+384 -> 1.6000E-382 + +-- Long operand overflow may be a different path +ddfma2870 fma 100 9.999E+383 0e+384 -> Infinity Inexact Overflow Rounded +ddfma2871 fma 100 -9.999E+383 0e+384 -> -Infinity Inexact Overflow Rounded +ddfma2872 fma 9.999E+383 100 0e+384 -> Infinity Inexact Overflow Rounded +ddfma2873 fma -9.999E+383 100 0e+384 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +ddfma2881 fma 1.2347E-355 1.2347E-40 0e+384 -> 1.524E-395 Inexact Rounded Subnormal Underflow +ddfma2882 fma 1.234E-355 1.234E-40 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddfma2883 fma 1.23E-355 1.23E-40 0e+384 -> 1.513E-395 Inexact Rounded Subnormal Underflow +ddfma2884 fma 1.2E-355 1.2E-40 0e+384 -> 1.44E-395 Subnormal +ddfma2885 fma 1.2E-355 1.2E-41 0e+384 -> 1.44E-396 Subnormal +ddfma2886 fma 1.2E-355 1.2E-42 0e+384 -> 1.4E-397 Subnormal Inexact Rounded Underflow +ddfma2887 fma 1.2E-355 1.3E-42 0e+384 -> 1.6E-397 Subnormal Inexact Rounded Underflow +ddfma2888 fma 1.3E-355 1.3E-42 0e+384 -> 1.7E-397 Subnormal Inexact Rounded Underflow +ddfma2889 fma 1.3E-355 1.3E-43 0e+384 -> 2E-398 Subnormal Inexact Rounded Underflow +ddfma2890 fma 1.3E-356 1.3E-43 0e+384 -> 0E-398 Clamped Subnormal Inexact Rounded Underflow + +ddfma2891 fma 1.2345E-39 1.234E-355 0e+384 -> 1.5234E-394 Inexact Rounded Subnormal Underflow +ddfma2892 fma 1.23456E-39 1.234E-355 0e+384 -> 1.5234E-394 Inexact Rounded Subnormal Underflow +ddfma2893 fma 1.2345E-40 1.234E-355 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddfma2894 fma 1.23456E-40 1.234E-355 0e+384 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddfma2895 fma 1.2345E-41 1.234E-355 0e+384 -> 1.52E-396 Inexact Rounded Subnormal Underflow +ddfma2896 fma 1.23456E-41 1.234E-355 0e+384 -> 1.52E-396 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +ddfma2900 fma 0.3000000000E-191 0.3000000000E-191 0e+384 -> 9.00000000000000E-384 Subnormal Rounded +ddfma2901 fma 0.3000000001E-191 0.3000000001E-191 0e+384 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded +ddfma2902 fma 9.999999999999999E-383 0.0999999999999 0e+384 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded +ddfma2903 fma 9.999999999999999E-383 0.09999999999999 0e+384 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded +ddfma2904 fma 9.999999999999999E-383 0.099999999999999 0e+384 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded +ddfma2905 fma 9.999999999999999E-383 0.0999999999999999 0e+384 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded +-- prove operands are exact +ddfma2906 fma 9.999999999999999E-383 1 0e+384 -> 9.999999999999999E-383 +ddfma2907 fma 1 0.09999999999999999 0e+384 -> 0.09999999999999999 +-- the next rounds to Nmin +ddfma2908 fma 9.999999999999999E-383 0.09999999999999999 0e+384 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded + +-- hugest +ddfma2909 fma 9999999999999999 9999999999999999 0e+384 -> 9.999999999999998E+31 Inexact Rounded + +-- Null tests +ddfma2990 fma 10 # 0e+384 -> NaN Invalid_operation +ddfma2991 fma # 10 0e+384 -> NaN Invalid_operation + + +-- ADDITION TESTS ------------------------------------------------------ + +-- [first group are 'quick confidence check'] +ddfma3001 fma 1 1 1 -> 2 +ddfma3002 fma 1 2 3 -> 5 +ddfma3003 fma 1 '5.75' '3.3' -> 9.05 +ddfma3004 fma 1 '5' '-3' -> 2 +ddfma3005 fma 1 '-5' '-3' -> -8 +ddfma3006 fma 1 '-7' '2.5' -> -4.5 +ddfma3007 fma 1 '0.7' '0.3' -> 1.0 +ddfma3008 fma 1 '1.25' '1.25' -> 2.50 +ddfma3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' +ddfma3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' + +-- 1234567890123456 1234567890123456 +ddfma3011 fma 1 '0.4444444444444446' '0.5555555555555555' -> '1.000000000000000' Inexact Rounded +ddfma3012 fma 1 '0.4444444444444445' '0.5555555555555555' -> '1.000000000000000' Rounded +ddfma3013 fma 1 '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' +ddfma3014 fma 1 '4444444444444444' '0.49' -> '4444444444444444' Inexact Rounded +ddfma3015 fma 1 '4444444444444444' '0.499' -> '4444444444444444' Inexact Rounded +ddfma3016 fma 1 '4444444444444444' '0.4999' -> '4444444444444444' Inexact Rounded +ddfma3017 fma 1 '4444444444444444' '0.5000' -> '4444444444444444' Inexact Rounded +ddfma3018 fma 1 '4444444444444444' '0.5001' -> '4444444444444445' Inexact Rounded +ddfma3019 fma 1 '4444444444444444' '0.501' -> '4444444444444445' Inexact Rounded +ddfma3020 fma 1 '4444444444444444' '0.51' -> '4444444444444445' Inexact Rounded + +ddfma3021 fma 1 0 1 -> 1 +ddfma3022 fma 1 1 1 -> 2 +ddfma3023 fma 1 2 1 -> 3 +ddfma3024 fma 1 3 1 -> 4 +ddfma3025 fma 1 4 1 -> 5 +ddfma3026 fma 1 5 1 -> 6 +ddfma3027 fma 1 6 1 -> 7 +ddfma3028 fma 1 7 1 -> 8 +ddfma3029 fma 1 8 1 -> 9 +ddfma3030 fma 1 9 1 -> 10 + +-- some carrying effects +ddfma3031 fma 1 '0.9998' '0.0000' -> '0.9998' +ddfma3032 fma 1 '0.9998' '0.0001' -> '0.9999' +ddfma3033 fma 1 '0.9998' '0.0002' -> '1.0000' +ddfma3034 fma 1 '0.9998' '0.0003' -> '1.0001' + +ddfma3035 fma 1 '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddfma3036 fma 1 '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddfma3037 fma 1 '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +ddfma3038 fma 1 '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded +ddfma3039 fma 1 '700000' '10000e+16' -> '1.000000000000007E+20' Rounded + +-- symmetry: +ddfma3040 fma 1 '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded +ddfma3041 fma 1 '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded +ddfma3042 fma 1 '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded +ddfma3044 fma 1 '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded +ddfma3045 fma 1 '10000e+16' '700000' -> '1.000000000000007E+20' Rounded + +-- same, without rounding +ddfma3046 fma 1 '10000e+9' '7' -> '10000000000007' +ddfma3047 fma 1 '10000e+9' '70' -> '10000000000070' +ddfma3048 fma 1 '10000e+9' '700' -> '10000000000700' +ddfma3049 fma 1 '10000e+9' '7000' -> '10000000007000' +ddfma3050 fma 1 '10000e+9' '70000' -> '10000000070000' +ddfma3051 fma 1 '10000e+9' '700000' -> '10000000700000' +ddfma3052 fma 1 '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +ddfma3053 fma 1 '12' '7.00' -> '19.00' +ddfma3054 fma 1 '1.3' '-1.07' -> '0.23' +ddfma3055 fma 1 '1.3' '-1.30' -> '0.00' +ddfma3056 fma 1 '1.3' '-2.07' -> '-0.77' +ddfma3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' + +-- leading zero preservation +ddfma3061 fma 1 1 '0.0001' -> '1.0001' +ddfma3062 fma 1 1 '0.00001' -> '1.00001' +ddfma3063 fma 1 1 '0.000001' -> '1.000001' +ddfma3064 fma 1 1 '0.0000001' -> '1.0000001' +ddfma3065 fma 1 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +ddfma3070 fma 1 1 0 -> 1 +ddfma3071 fma 1 1 0. -> 1 +ddfma3072 fma 1 1 .0 -> 1.0 +ddfma3073 fma 1 1 0.0 -> 1.0 +ddfma3074 fma 1 1 0.00 -> 1.00 +ddfma3075 fma 1 0 1 -> 1 +ddfma3076 fma 1 0. 1 -> 1 +ddfma3077 fma 1 .0 1 -> 1.0 +ddfma3078 fma 1 0.0 1 -> 1.0 +ddfma3079 fma 1 0.00 1 -> 1.00 + +-- some carries +ddfma3080 fma 1 999999998 1 -> 999999999 +ddfma3081 fma 1 999999999 1 -> 1000000000 +ddfma3082 fma 1 99999999 1 -> 100000000 +ddfma3083 fma 1 9999999 1 -> 10000000 +ddfma3084 fma 1 999999 1 -> 1000000 +ddfma3085 fma 1 99999 1 -> 100000 +ddfma3086 fma 1 9999 1 -> 10000 +ddfma3087 fma 1 999 1 -> 1000 +ddfma3088 fma 1 99 1 -> 100 +ddfma3089 fma 1 9 1 -> 10 + + +-- more LHS swaps +ddfma3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' +ddfma3091 fma 1 '-56267E-6' 0 -> '-0.056267' +ddfma3092 fma 1 '-56267E-5' 0 -> '-0.56267' +ddfma3093 fma 1 '-56267E-4' 0 -> '-5.6267' +ddfma3094 fma 1 '-56267E-3' 0 -> '-56.267' +ddfma3095 fma 1 '-56267E-2' 0 -> '-562.67' +ddfma3096 fma 1 '-56267E-1' 0 -> '-5626.7' +ddfma3097 fma 1 '-56267E-0' 0 -> '-56267' +ddfma3098 fma 1 '-5E-10' 0 -> '-5E-10' +ddfma3099 fma 1 '-5E-7' 0 -> '-5E-7' +ddfma3100 fma 1 '-5E-6' 0 -> '-0.000005' +ddfma3101 fma 1 '-5E-5' 0 -> '-0.00005' +ddfma3102 fma 1 '-5E-4' 0 -> '-0.0005' +ddfma3103 fma 1 '-5E-1' 0 -> '-0.5' +ddfma3104 fma 1 '-5E0' 0 -> '-5' +ddfma3105 fma 1 '-5E1' 0 -> '-50' +ddfma3106 fma 1 '-5E5' 0 -> '-500000' +ddfma3107 fma 1 '-5E15' 0 -> '-5000000000000000' +ddfma3108 fma 1 '-5E16' 0 -> '-5.000000000000000E+16' Rounded +ddfma3109 fma 1 '-5E17' 0 -> '-5.000000000000000E+17' Rounded +ddfma3110 fma 1 '-5E18' 0 -> '-5.000000000000000E+18' Rounded +ddfma3111 fma 1 '-5E100' 0 -> '-5.000000000000000E+100' Rounded + +-- more RHS swaps +ddfma3113 fma 1 0 '-56267E-10' -> '-0.0000056267' +ddfma3114 fma 1 0 '-56267E-6' -> '-0.056267' +ddfma3116 fma 1 0 '-56267E-5' -> '-0.56267' +ddfma3117 fma 1 0 '-56267E-4' -> '-5.6267' +ddfma3119 fma 1 0 '-56267E-3' -> '-56.267' +ddfma3120 fma 1 0 '-56267E-2' -> '-562.67' +ddfma3121 fma 1 0 '-56267E-1' -> '-5626.7' +ddfma3122 fma 1 0 '-56267E-0' -> '-56267' +ddfma3123 fma 1 0 '-5E-10' -> '-5E-10' +ddfma3124 fma 1 0 '-5E-7' -> '-5E-7' +ddfma3125 fma 1 0 '-5E-6' -> '-0.000005' +ddfma3126 fma 1 0 '-5E-5' -> '-0.00005' +ddfma3127 fma 1 0 '-5E-4' -> '-0.0005' +ddfma3128 fma 1 0 '-5E-1' -> '-0.5' +ddfma3129 fma 1 0 '-5E0' -> '-5' +ddfma3130 fma 1 0 '-5E1' -> '-50' +ddfma3131 fma 1 0 '-5E5' -> '-500000' +ddfma3132 fma 1 0 '-5E15' -> '-5000000000000000' +ddfma3133 fma 1 0 '-5E16' -> '-5.000000000000000E+16' Rounded +ddfma3134 fma 1 0 '-5E17' -> '-5.000000000000000E+17' Rounded +ddfma3135 fma 1 0 '-5E18' -> '-5.000000000000000E+18' Rounded +ddfma3136 fma 1 0 '-5E100' -> '-5.000000000000000E+100' Rounded + +-- related +ddfma3137 fma 1 1 '0E-19' -> '1.000000000000000' Rounded +ddfma3138 fma 1 -1 '0E-19' -> '-1.000000000000000' Rounded +ddfma3139 fma 1 '0E-19' 1 -> '1.000000000000000' Rounded +ddfma3140 fma 1 '0E-19' -1 -> '-1.000000000000000' Rounded +ddfma3141 fma 1 1E+11 0.0000 -> '100000000000.0000' +ddfma3142 fma 1 1E+11 0.00000 -> '100000000000.0000' Rounded +ddfma3143 fma 1 0.000 1E+12 -> '1000000000000.000' +ddfma3144 fma 1 0.0000 1E+12 -> '1000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +ddfma3146 fma 1 '00.0' 0 -> '0.0' +ddfma3147 fma 1 '0.00' 0 -> '0.00' +ddfma3148 fma 1 0 '0.00' -> '0.00' +ddfma3149 fma 1 0 '00.0' -> '0.0' +ddfma3150 fma 1 '00.0' '0.00' -> '0.00' +ddfma3151 fma 1 '0.00' '00.0' -> '0.00' +ddfma3152 fma 1 '3' '.3' -> '3.3' +ddfma3153 fma 1 '3.' '.3' -> '3.3' +ddfma3154 fma 1 '3.0' '.3' -> '3.3' +ddfma3155 fma 1 '3.00' '.3' -> '3.30' +ddfma3156 fma 1 '3' '3' -> '6' +ddfma3157 fma 1 '3' '+3' -> '6' +ddfma3158 fma 1 '3' '-3' -> '0' +ddfma3159 fma 1 '0.3' '-0.3' -> '0.0' +ddfma3160 fma 1 '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +ddfma3161 fma 1 '1E+12' '-1' -> '999999999999' +ddfma3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' +ddfma3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' +ddfma3164 fma 1 '-1' '1E+12' -> '999999999999' +ddfma3165 fma 1 '7E+12' '-1' -> '6999999999999' +ddfma3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' +ddfma3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' +ddfma3168 fma 1 '-1' '7E+12' -> '6999999999999' + +rounding: half_up +-- 1.234567890123456 1234567890123456 1 234567890123456 +ddfma3170 fma 1 '4.444444444444444' '0.5555555555555567' -> '5.000000000000001' Inexact Rounded +ddfma3171 fma 1 '4.444444444444444' '0.5555555555555566' -> '5.000000000000001' Inexact Rounded +ddfma3172 fma 1 '4.444444444444444' '0.5555555555555565' -> '5.000000000000001' Inexact Rounded +ddfma3173 fma 1 '4.444444444444444' '0.5555555555555564' -> '5.000000000000000' Inexact Rounded +ddfma3174 fma 1 '4.444444444444444' '0.5555555555555553' -> '4.999999999999999' Inexact Rounded +ddfma3175 fma 1 '4.444444444444444' '0.5555555555555552' -> '4.999999999999999' Inexact Rounded +ddfma3176 fma 1 '4.444444444444444' '0.5555555555555551' -> '4.999999999999999' Inexact Rounded +ddfma3177 fma 1 '4.444444444444444' '0.5555555555555550' -> '4.999999999999999' Rounded +ddfma3178 fma 1 '4.444444444444444' '0.5555555555555545' -> '4.999999999999999' Inexact Rounded +ddfma3179 fma 1 '4.444444444444444' '0.5555555555555544' -> '4.999999999999998' Inexact Rounded +ddfma3180 fma 1 '4.444444444444444' '0.5555555555555543' -> '4.999999999999998' Inexact Rounded +ddfma3181 fma 1 '4.444444444444444' '0.5555555555555542' -> '4.999999999999998' Inexact Rounded +ddfma3182 fma 1 '4.444444444444444' '0.5555555555555541' -> '4.999999999999998' Inexact Rounded +ddfma3183 fma 1 '4.444444444444444' '0.5555555555555540' -> '4.999999999999998' Rounded + +-- and some more, including residue effects and different roundings +rounding: half_up +ddfma3200 fma 1 '1234560123456789' 0 -> '1234560123456789' +ddfma3201 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddfma3202 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddfma3203 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddfma3204 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddfma3205 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddfma3206 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddfma3207 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddfma3208 fma 1 '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded +ddfma3209 fma 1 '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded +ddfma3210 fma 1 '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded +ddfma3211 fma 1 '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded +ddfma3212 fma 1 '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded +ddfma3213 fma 1 '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded +ddfma3214 fma 1 '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded +ddfma3215 fma 1 '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded +ddfma3216 fma 1 '1234560123456789' 1 -> '1234560123456790' +ddfma3217 fma 1 '1234560123456789' 1.000000001 -> '1234560123456790' Inexact Rounded +ddfma3218 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddfma3219 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded + +rounding: half_even +ddfma3220 fma 1 '1234560123456789' 0 -> '1234560123456789' +ddfma3221 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddfma3222 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddfma3223 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddfma3224 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddfma3225 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddfma3226 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddfma3227 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddfma3228 fma 1 '1234560123456789' 0.5 -> '1234560123456790' Inexact Rounded +ddfma3229 fma 1 '1234560123456789' 0.500000001 -> '1234560123456790' Inexact Rounded +ddfma3230 fma 1 '1234560123456789' 0.500001 -> '1234560123456790' Inexact Rounded +ddfma3231 fma 1 '1234560123456789' 0.51 -> '1234560123456790' Inexact Rounded +ddfma3232 fma 1 '1234560123456789' 0.6 -> '1234560123456790' Inexact Rounded +ddfma3233 fma 1 '1234560123456789' 0.9 -> '1234560123456790' Inexact Rounded +ddfma3234 fma 1 '1234560123456789' 0.99999 -> '1234560123456790' Inexact Rounded +ddfma3235 fma 1 '1234560123456789' 0.999999999 -> '1234560123456790' Inexact Rounded +ddfma3236 fma 1 '1234560123456789' 1 -> '1234560123456790' +ddfma3237 fma 1 '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded +ddfma3238 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddfma3239 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded +-- critical few with even bottom digit... +ddfma3240 fma 1 '1234560123456788' 0.499999999 -> '1234560123456788' Inexact Rounded +ddfma3241 fma 1 '1234560123456788' 0.5 -> '1234560123456788' Inexact Rounded +ddfma3242 fma 1 '1234560123456788' 0.500000001 -> '1234560123456789' Inexact Rounded + +rounding: down +ddfma3250 fma 1 '1234560123456789' 0 -> '1234560123456789' +ddfma3251 fma 1 '1234560123456789' 0.000000001 -> '1234560123456789' Inexact Rounded +ddfma3252 fma 1 '1234560123456789' 0.000001 -> '1234560123456789' Inexact Rounded +ddfma3253 fma 1 '1234560123456789' 0.1 -> '1234560123456789' Inexact Rounded +ddfma3254 fma 1 '1234560123456789' 0.4 -> '1234560123456789' Inexact Rounded +ddfma3255 fma 1 '1234560123456789' 0.49 -> '1234560123456789' Inexact Rounded +ddfma3256 fma 1 '1234560123456789' 0.499999 -> '1234560123456789' Inexact Rounded +ddfma3257 fma 1 '1234560123456789' 0.499999999 -> '1234560123456789' Inexact Rounded +ddfma3258 fma 1 '1234560123456789' 0.5 -> '1234560123456789' Inexact Rounded +ddfma3259 fma 1 '1234560123456789' 0.500000001 -> '1234560123456789' Inexact Rounded +ddfma3260 fma 1 '1234560123456789' 0.500001 -> '1234560123456789' Inexact Rounded +ddfma3261 fma 1 '1234560123456789' 0.51 -> '1234560123456789' Inexact Rounded +ddfma3262 fma 1 '1234560123456789' 0.6 -> '1234560123456789' Inexact Rounded +ddfma3263 fma 1 '1234560123456789' 0.9 -> '1234560123456789' Inexact Rounded +ddfma3264 fma 1 '1234560123456789' 0.99999 -> '1234560123456789' Inexact Rounded +ddfma3265 fma 1 '1234560123456789' 0.999999999 -> '1234560123456789' Inexact Rounded +ddfma3266 fma 1 '1234560123456789' 1 -> '1234560123456790' +ddfma3267 fma 1 '1234560123456789' 1.00000001 -> '1234560123456790' Inexact Rounded +ddfma3268 fma 1 '1234560123456789' 1.00001 -> '1234560123456790' Inexact Rounded +ddfma3269 fma 1 '1234560123456789' 1.1 -> '1234560123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +ddfma3301 fma 1 -1 1 -> 0 +ddfma3302 fma 1 0 1 -> 1 +ddfma3303 fma 1 1 1 -> 2 +ddfma3304 fma 1 12 1 -> 13 +ddfma3305 fma 1 98 1 -> 99 +ddfma3306 fma 1 99 1 -> 100 +ddfma3307 fma 1 100 1 -> 101 +ddfma3308 fma 1 101 1 -> 102 +ddfma3309 fma 1 -1 -1 -> -2 +ddfma3310 fma 1 0 -1 -> -1 +ddfma3311 fma 1 1 -1 -> 0 +ddfma3312 fma 1 12 -1 -> 11 +ddfma3313 fma 1 98 -1 -> 97 +ddfma3314 fma 1 99 -1 -> 98 +ddfma3315 fma 1 100 -1 -> 99 +ddfma3316 fma 1 101 -1 -> 100 + +ddfma3321 fma 1 -0.01 0.01 -> 0.00 +ddfma3322 fma 1 0.00 0.01 -> 0.01 +ddfma3323 fma 1 0.01 0.01 -> 0.02 +ddfma3324 fma 1 0.12 0.01 -> 0.13 +ddfma3325 fma 1 0.98 0.01 -> 0.99 +ddfma3326 fma 1 0.99 0.01 -> 1.00 +ddfma3327 fma 1 1.00 0.01 -> 1.01 +ddfma3328 fma 1 1.01 0.01 -> 1.02 +ddfma3329 fma 1 -0.01 -0.01 -> -0.02 +ddfma3330 fma 1 0.00 -0.01 -> -0.01 +ddfma3331 fma 1 0.01 -0.01 -> 0.00 +ddfma3332 fma 1 0.12 -0.01 -> 0.11 +ddfma3333 fma 1 0.98 -0.01 -> 0.97 +ddfma3334 fma 1 0.99 -0.01 -> 0.98 +ddfma3335 fma 1 1.00 -0.01 -> 0.99 +ddfma3336 fma 1 1.01 -0.01 -> 1.00 + +-- some more cases where adding 0 affects the coefficient +ddfma3340 fma 1 1E+3 0 -> 1000 +ddfma3341 fma 1 1E+15 0 -> 1000000000000000 +ddfma3342 fma 1 1E+16 0 -> 1.000000000000000E+16 Rounded +ddfma3343 fma 1 1E+20 0 -> 1.000000000000000E+20 Rounded +-- which simply follow from these cases ... +ddfma3344 fma 1 1E+3 1 -> 1001 +ddfma3345 fma 1 1E+15 1 -> 1000000000000001 +ddfma3346 fma 1 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded +ddfma3347 fma 1 1E+20 1 -> 1.000000000000000E+20 Inexact Rounded +ddfma3348 fma 1 1E+3 7 -> 1007 +ddfma3349 fma 1 1E+15 7 -> 1000000000000007 +ddfma3350 fma 1 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded +ddfma3351 fma 1 1E+20 7 -> 1.000000000000000E+20 Inexact Rounded + +-- tryzeros cases +rounding: half_up +ddfma3360 fma 1 0E+50 10000E+1 -> 1.0000E+5 +ddfma3361 fma 1 0E-50 10000E+1 -> 100000.0000000000 Rounded +ddfma3362 fma 1 10000E+1 0E-50 -> 100000.0000000000 Rounded +ddfma3363 fma 1 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact +ddfma3364 fma 1 9.999999999999999E+384 -9.999999999999999E+384 -> 0E+369 + +-- a curiosity from JSR 13 testing +rounding: half_down +ddfma3370 fma 1 999999999999999 815 -> 1000000000000814 +ddfma3371 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact +rounding: half_up +ddfma3372 fma 1 999999999999999 815 -> 1000000000000814 +ddfma3373 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact +rounding: half_even +ddfma3374 fma 1 999999999999999 815 -> 1000000000000814 +ddfma3375 fma 1 9999999999999999 815 -> 1.000000000000081E+16 Rounded Inexact + +-- ulp replacement tests +ddfma3400 fma 1 1 77e-14 -> 1.00000000000077 +ddfma3401 fma 1 1 77e-15 -> 1.000000000000077 +ddfma3402 fma 1 1 77e-16 -> 1.000000000000008 Inexact Rounded +ddfma3403 fma 1 1 77e-17 -> 1.000000000000001 Inexact Rounded +ddfma3404 fma 1 1 77e-18 -> 1.000000000000000 Inexact Rounded +ddfma3405 fma 1 1 77e-19 -> 1.000000000000000 Inexact Rounded +ddfma3406 fma 1 1 77e-299 -> 1.000000000000000 Inexact Rounded + +ddfma3410 fma 1 10 77e-14 -> 10.00000000000077 +ddfma3411 fma 1 10 77e-15 -> 10.00000000000008 Inexact Rounded +ddfma3412 fma 1 10 77e-16 -> 10.00000000000001 Inexact Rounded +ddfma3413 fma 1 10 77e-17 -> 10.00000000000000 Inexact Rounded +ddfma3414 fma 1 10 77e-18 -> 10.00000000000000 Inexact Rounded +ddfma3415 fma 1 10 77e-19 -> 10.00000000000000 Inexact Rounded +ddfma3416 fma 1 10 77e-299 -> 10.00000000000000 Inexact Rounded + +ddfma3420 fma 1 77e-14 1 -> 1.00000000000077 +ddfma3421 fma 1 77e-15 1 -> 1.000000000000077 +ddfma3422 fma 1 77e-16 1 -> 1.000000000000008 Inexact Rounded +ddfma3423 fma 1 77e-17 1 -> 1.000000000000001 Inexact Rounded +ddfma3424 fma 1 77e-18 1 -> 1.000000000000000 Inexact Rounded +ddfma3425 fma 1 77e-19 1 -> 1.000000000000000 Inexact Rounded +ddfma3426 fma 1 77e-299 1 -> 1.000000000000000 Inexact Rounded + +ddfma3430 fma 1 77e-14 10 -> 10.00000000000077 +ddfma3431 fma 1 77e-15 10 -> 10.00000000000008 Inexact Rounded +ddfma3432 fma 1 77e-16 10 -> 10.00000000000001 Inexact Rounded +ddfma3433 fma 1 77e-17 10 -> 10.00000000000000 Inexact Rounded +ddfma3434 fma 1 77e-18 10 -> 10.00000000000000 Inexact Rounded +ddfma3435 fma 1 77e-19 10 -> 10.00000000000000 Inexact Rounded +ddfma3436 fma 1 77e-299 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +ddfma36440 fma 1 1 -77e-14 -> 0.99999999999923 +ddfma36441 fma 1 1 -77e-15 -> 0.999999999999923 +ddfma36442 fma 1 1 -77e-16 -> 0.9999999999999923 +ddfma36443 fma 1 1 -77e-17 -> 0.9999999999999992 Inexact Rounded +ddfma36444 fma 1 1 -77e-18 -> 0.9999999999999999 Inexact Rounded +ddfma36445 fma 1 1 -77e-19 -> 1.000000000000000 Inexact Rounded +ddfma36446 fma 1 1 -77e-99 -> 1.000000000000000 Inexact Rounded + +ddfma36450 fma 1 10 -77e-14 -> 9.99999999999923 +ddfma36451 fma 1 10 -77e-15 -> 9.999999999999923 +ddfma36452 fma 1 10 -77e-16 -> 9.999999999999992 Inexact Rounded +ddfma36453 fma 1 10 -77e-17 -> 9.999999999999999 Inexact Rounded +ddfma36454 fma 1 10 -77e-18 -> 10.00000000000000 Inexact Rounded +ddfma36455 fma 1 10 -77e-19 -> 10.00000000000000 Inexact Rounded +ddfma36456 fma 1 10 -77e-99 -> 10.00000000000000 Inexact Rounded + +ddfma36460 fma 1 -77e-14 1 -> 0.99999999999923 +ddfma36461 fma 1 -77e-15 1 -> 0.999999999999923 +ddfma36462 fma 1 -77e-16 1 -> 0.9999999999999923 +ddfma36463 fma 1 -77e-17 1 -> 0.9999999999999992 Inexact Rounded +ddfma36464 fma 1 -77e-18 1 -> 0.9999999999999999 Inexact Rounded +ddfma36465 fma 1 -77e-19 1 -> 1.000000000000000 Inexact Rounded +ddfma36466 fma 1 -77e-99 1 -> 1.000000000000000 Inexact Rounded + +ddfma36470 fma 1 -77e-14 10 -> 9.99999999999923 +ddfma36471 fma 1 -77e-15 10 -> 9.999999999999923 +ddfma36472 fma 1 -77e-16 10 -> 9.999999999999992 Inexact Rounded +ddfma36473 fma 1 -77e-17 10 -> 9.999999999999999 Inexact Rounded +ddfma36474 fma 1 -77e-18 10 -> 10.00000000000000 Inexact Rounded +ddfma36475 fma 1 -77e-19 10 -> 10.00000000000000 Inexact Rounded +ddfma36476 fma 1 -77e-99 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +ddfma36480 fma 1 -1 77e-14 -> -0.99999999999923 +ddfma36481 fma 1 -1 77e-15 -> -0.999999999999923 +ddfma36482 fma 1 -1 77e-16 -> -0.9999999999999923 +ddfma36483 fma 1 -1 77e-17 -> -0.9999999999999992 Inexact Rounded +ddfma36484 fma 1 -1 77e-18 -> -0.9999999999999999 Inexact Rounded +ddfma36485 fma 1 -1 77e-19 -> -1.000000000000000 Inexact Rounded +ddfma36486 fma 1 -1 77e-99 -> -1.000000000000000 Inexact Rounded + +ddfma36490 fma 1 -10 77e-14 -> -9.99999999999923 +ddfma36491 fma 1 -10 77e-15 -> -9.999999999999923 +ddfma36492 fma 1 -10 77e-16 -> -9.999999999999992 Inexact Rounded +ddfma36493 fma 1 -10 77e-17 -> -9.999999999999999 Inexact Rounded +ddfma36494 fma 1 -10 77e-18 -> -10.00000000000000 Inexact Rounded +ddfma36495 fma 1 -10 77e-19 -> -10.00000000000000 Inexact Rounded +ddfma36496 fma 1 -10 77e-99 -> -10.00000000000000 Inexact Rounded + +ddfma36500 fma 1 77e-14 -1 -> -0.99999999999923 +ddfma36501 fma 1 77e-15 -1 -> -0.999999999999923 +ddfma36502 fma 1 77e-16 -1 -> -0.9999999999999923 +ddfma36503 fma 1 77e-17 -1 -> -0.9999999999999992 Inexact Rounded +ddfma36504 fma 1 77e-18 -1 -> -0.9999999999999999 Inexact Rounded +ddfma36505 fma 1 77e-19 -1 -> -1.000000000000000 Inexact Rounded +ddfma36506 fma 1 77e-99 -1 -> -1.000000000000000 Inexact Rounded + +ddfma36510 fma 1 77e-14 -10 -> -9.99999999999923 +ddfma36511 fma 1 77e-15 -10 -> -9.999999999999923 +ddfma36512 fma 1 77e-16 -10 -> -9.999999999999992 Inexact Rounded +ddfma36513 fma 1 77e-17 -10 -> -9.999999999999999 Inexact Rounded +ddfma36514 fma 1 77e-18 -10 -> -10.00000000000000 Inexact Rounded +ddfma36515 fma 1 77e-19 -10 -> -10.00000000000000 Inexact Rounded +ddfma36516 fma 1 77e-99 -10 -> -10.00000000000000 Inexact Rounded + +-- and a couple more with longer RHS +ddfma36520 fma 1 1 -7777e-16 -> 0.9999999999992223 +ddfma36521 fma 1 1 -7777e-17 -> 0.9999999999999222 Inexact Rounded +ddfma36522 fma 1 1 -7777e-18 -> 0.9999999999999922 Inexact Rounded +ddfma36523 fma 1 1 -7777e-19 -> 0.9999999999999992 Inexact Rounded +ddfma36524 fma 1 1 -7777e-20 -> 0.9999999999999999 Inexact Rounded +ddfma36525 fma 1 1 -7777e-21 -> 1.000000000000000 Inexact Rounded +ddfma36526 fma 1 1 -7777e-22 -> 1.000000000000000 Inexact Rounded + + +-- and some more residue effects and different roundings +rounding: half_up +ddfma36540 fma 1 '6543210123456789' 0 -> '6543210123456789' +ddfma36541 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddfma36542 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddfma36543 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddfma36544 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddfma36545 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddfma36546 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddfma36547 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddfma36548 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +ddfma36549 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +ddfma36550 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +ddfma36551 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +ddfma36552 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +ddfma36553 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +ddfma36554 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +ddfma36555 fma 1 '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded +ddfma36556 fma 1 '6543210123456789' 1 -> '6543210123456790' +ddfma36557 fma 1 '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded +ddfma36558 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddfma36559 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +rounding: half_even +ddfma36560 fma 1 '6543210123456789' 0 -> '6543210123456789' +ddfma36561 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddfma36562 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddfma36563 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddfma36564 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddfma36565 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddfma36566 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddfma36567 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddfma36568 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +ddfma36569 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +ddfma36570 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +ddfma36571 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +ddfma36572 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +ddfma36573 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +ddfma36574 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +ddfma36575 fma 1 '6543210123456789' 0.999999999 -> '6543210123456790' Inexact Rounded +ddfma36576 fma 1 '6543210123456789' 1 -> '6543210123456790' +ddfma36577 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +ddfma36578 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddfma36579 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +-- critical few with even bottom digit... +ddfma37540 fma 1 '6543210123456788' 0.499999999 -> '6543210123456788' Inexact Rounded +ddfma37541 fma 1 '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded +ddfma37542 fma 1 '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded + +rounding: down +ddfma37550 fma 1 '6543210123456789' 0 -> '6543210123456789' +ddfma37551 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +ddfma37552 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +ddfma37553 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +ddfma37554 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +ddfma37555 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +ddfma37556 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +ddfma37557 fma 1 '6543210123456789' 0.499999999 -> '6543210123456789' Inexact Rounded +ddfma37558 fma 1 '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded +ddfma37559 fma 1 '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded +ddfma37560 fma 1 '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded +ddfma37561 fma 1 '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded +ddfma37562 fma 1 '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded +ddfma37563 fma 1 '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded +ddfma37564 fma 1 '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded +ddfma37565 fma 1 '6543210123456789' 0.999999999 -> '6543210123456789' Inexact Rounded +ddfma37566 fma 1 '6543210123456789' 1 -> '6543210123456790' +ddfma37567 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +ddfma37568 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +ddfma37569 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + + +-- verify a query +rounding: down +ddfma37661 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded +ddfma37662 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded +ddfma37663 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded +ddfma37664 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded + +-- more zeros, etc. +rounding: half_even + +ddfma37701 fma 1 5.00 1.00E-3 -> 5.00100 +ddfma37702 fma 1 00.00 0.000 -> 0.000 +ddfma37703 fma 1 00.00 0E-3 -> 0.000 +ddfma37704 fma 1 0E-3 00.00 -> 0.000 + +ddfma37710 fma 1 0E+3 00.00 -> 0.00 +ddfma37711 fma 1 0E+3 00.0 -> 0.0 +ddfma37712 fma 1 0E+3 00. -> 0 +ddfma37713 fma 1 0E+3 00.E+1 -> 0E+1 +ddfma37714 fma 1 0E+3 00.E+2 -> 0E+2 +ddfma37715 fma 1 0E+3 00.E+3 -> 0E+3 +ddfma37716 fma 1 0E+3 00.E+4 -> 0E+3 +ddfma37717 fma 1 0E+3 00.E+5 -> 0E+3 +ddfma37718 fma 1 0E+3 -00.0 -> 0.0 +ddfma37719 fma 1 0E+3 -00. -> 0 +ddfma37731 fma 1 0E+3 -00.E+1 -> 0E+1 + +ddfma37720 fma 1 00.00 0E+3 -> 0.00 +ddfma37721 fma 1 00.0 0E+3 -> 0.0 +ddfma37722 fma 1 00. 0E+3 -> 0 +ddfma37723 fma 1 00.E+1 0E+3 -> 0E+1 +ddfma37724 fma 1 00.E+2 0E+3 -> 0E+2 +ddfma37725 fma 1 00.E+3 0E+3 -> 0E+3 +ddfma37726 fma 1 00.E+4 0E+3 -> 0E+3 +ddfma37727 fma 1 00.E+5 0E+3 -> 0E+3 +ddfma37728 fma 1 -00.00 0E+3 -> 0.00 +ddfma37729 fma 1 -00.0 0E+3 -> 0.0 +ddfma37730 fma 1 -00. 0E+3 -> 0 + +ddfma37732 fma 1 0 0 -> 0 +ddfma37733 fma 1 0 -0 -> 0 +ddfma37734 fma 1 -0 0 -> 0 +ddfma37735 fma 1 -0 -0 -> -0 -- IEEE 854 special case + +ddfma37736 fma 1 1 -1 -> 0 +ddfma37737 fma 1 -1 -1 -> -2 +ddfma37738 fma 1 1 1 -> 2 +ddfma37739 fma 1 -1 1 -> 0 + +ddfma37741 fma 1 0 -1 -> -1 +ddfma37742 fma 1 -0 -1 -> -1 +ddfma37743 fma 1 0 1 -> 1 +ddfma37744 fma 1 -0 1 -> 1 +ddfma37745 fma 1 -1 0 -> -1 +ddfma37746 fma 1 -1 -0 -> -1 +ddfma37747 fma 1 1 0 -> 1 +ddfma37748 fma 1 1 -0 -> 1 + +ddfma37751 fma 1 0.0 -1 -> -1.0 +ddfma37752 fma 1 -0.0 -1 -> -1.0 +ddfma37753 fma 1 0.0 1 -> 1.0 +ddfma37754 fma 1 -0.0 1 -> 1.0 +ddfma37755 fma 1 -1.0 0 -> -1.0 +ddfma37756 fma 1 -1.0 -0 -> -1.0 +ddfma37757 fma 1 1.0 0 -> 1.0 +ddfma37758 fma 1 1.0 -0 -> 1.0 + +ddfma37761 fma 1 0 -1.0 -> -1.0 +ddfma37762 fma 1 -0 -1.0 -> -1.0 +ddfma37763 fma 1 0 1.0 -> 1.0 +ddfma37764 fma 1 -0 1.0 -> 1.0 +ddfma37765 fma 1 -1 0.0 -> -1.0 +ddfma37766 fma 1 -1 -0.0 -> -1.0 +ddfma37767 fma 1 1 0.0 -> 1.0 +ddfma37768 fma 1 1 -0.0 -> 1.0 + +ddfma37771 fma 1 0.0 -1.0 -> -1.0 +ddfma37772 fma 1 -0.0 -1.0 -> -1.0 +ddfma37773 fma 1 0.0 1.0 -> 1.0 +ddfma37774 fma 1 -0.0 1.0 -> 1.0 +ddfma37775 fma 1 -1.0 0.0 -> -1.0 +ddfma37776 fma 1 -1.0 -0.0 -> -1.0 +ddfma37777 fma 1 1.0 0.0 -> 1.0 +ddfma37778 fma 1 1.0 -0.0 -> 1.0 + +-- Specials +ddfma37780 fma 1 -Inf -Inf -> -Infinity +ddfma37781 fma 1 -Inf -1000 -> -Infinity +ddfma37782 fma 1 -Inf -1 -> -Infinity +ddfma37783 fma 1 -Inf -0 -> -Infinity +ddfma37784 fma 1 -Inf 0 -> -Infinity +ddfma37785 fma 1 -Inf 1 -> -Infinity +ddfma37786 fma 1 -Inf 1000 -> -Infinity +ddfma37787 fma 1 -1000 -Inf -> -Infinity +ddfma37788 fma 1 -Inf -Inf -> -Infinity +ddfma37789 fma 1 -1 -Inf -> -Infinity +ddfma37790 fma 1 -0 -Inf -> -Infinity +ddfma37791 fma 1 0 -Inf -> -Infinity +ddfma37792 fma 1 1 -Inf -> -Infinity +ddfma37793 fma 1 1000 -Inf -> -Infinity +ddfma37794 fma 1 Inf -Inf -> NaN Invalid_operation + +ddfma37800 fma 1 Inf -Inf -> NaN Invalid_operation +ddfma37801 fma 1 Inf -1000 -> Infinity +ddfma37802 fma 1 Inf -1 -> Infinity +ddfma37803 fma 1 Inf -0 -> Infinity +ddfma37804 fma 1 Inf 0 -> Infinity +ddfma37805 fma 1 Inf 1 -> Infinity +ddfma37806 fma 1 Inf 1000 -> Infinity +ddfma37807 fma 1 Inf Inf -> Infinity +ddfma37808 fma 1 -1000 Inf -> Infinity +ddfma37809 fma 1 -Inf Inf -> NaN Invalid_operation +ddfma37810 fma 1 -1 Inf -> Infinity +ddfma37811 fma 1 -0 Inf -> Infinity +ddfma37812 fma 1 0 Inf -> Infinity +ddfma37813 fma 1 1 Inf -> Infinity +ddfma37814 fma 1 1000 Inf -> Infinity +ddfma37815 fma 1 Inf Inf -> Infinity + +ddfma37821 fma 1 NaN -Inf -> NaN +ddfma37822 fma 1 NaN -1000 -> NaN +ddfma37823 fma 1 NaN -1 -> NaN +ddfma37824 fma 1 NaN -0 -> NaN +ddfma37825 fma 1 NaN 0 -> NaN +ddfma37826 fma 1 NaN 1 -> NaN +ddfma37827 fma 1 NaN 1000 -> NaN +ddfma37828 fma 1 NaN Inf -> NaN +ddfma37829 fma 1 NaN NaN -> NaN +ddfma37830 fma 1 -Inf NaN -> NaN +ddfma37831 fma 1 -1000 NaN -> NaN +ddfma37832 fma 1 -1 NaN -> NaN +ddfma37833 fma 1 -0 NaN -> NaN +ddfma37834 fma 1 0 NaN -> NaN +ddfma37835 fma 1 1 NaN -> NaN +ddfma37836 fma 1 1000 NaN -> NaN +ddfma37837 fma 1 Inf NaN -> NaN + +ddfma37841 fma 1 sNaN -Inf -> NaN Invalid_operation +ddfma37842 fma 1 sNaN -1000 -> NaN Invalid_operation +ddfma37843 fma 1 sNaN -1 -> NaN Invalid_operation +ddfma37844 fma 1 sNaN -0 -> NaN Invalid_operation +ddfma37845 fma 1 sNaN 0 -> NaN Invalid_operation +ddfma37846 fma 1 sNaN 1 -> NaN Invalid_operation +ddfma37847 fma 1 sNaN 1000 -> NaN Invalid_operation +ddfma37848 fma 1 sNaN NaN -> NaN Invalid_operation +ddfma37849 fma 1 sNaN sNaN -> NaN Invalid_operation +ddfma37850 fma 1 NaN sNaN -> NaN Invalid_operation +ddfma37851 fma 1 -Inf sNaN -> NaN Invalid_operation +ddfma37852 fma 1 -1000 sNaN -> NaN Invalid_operation +ddfma37853 fma 1 -1 sNaN -> NaN Invalid_operation +ddfma37854 fma 1 -0 sNaN -> NaN Invalid_operation +ddfma37855 fma 1 0 sNaN -> NaN Invalid_operation +ddfma37856 fma 1 1 sNaN -> NaN Invalid_operation +ddfma37857 fma 1 1000 sNaN -> NaN Invalid_operation +ddfma37858 fma 1 Inf sNaN -> NaN Invalid_operation +ddfma37859 fma 1 NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddfma37861 fma 1 NaN1 -Inf -> NaN1 +ddfma37862 fma 1 +NaN2 -1000 -> NaN2 +ddfma37863 fma 1 NaN3 1000 -> NaN3 +ddfma37864 fma 1 NaN4 Inf -> NaN4 +ddfma37865 fma 1 NaN5 +NaN6 -> NaN5 +ddfma37866 fma 1 -Inf NaN7 -> NaN7 +ddfma37867 fma 1 -1000 NaN8 -> NaN8 +ddfma37868 fma 1 1000 NaN9 -> NaN9 +ddfma37869 fma 1 Inf +NaN10 -> NaN10 +ddfma37871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation +ddfma37872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation +ddfma37873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation +ddfma37874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation +ddfma37875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation +ddfma37876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation +ddfma37877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation +ddfma37878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation +ddfma37879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation +ddfma37880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation +ddfma37881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddfma37882 fma 1 -NaN26 NaN28 -> -NaN26 +ddfma37883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddfma37884 fma 1 1000 -NaN30 -> -NaN30 +ddfma37885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Here we explore near the boundary of rounding a subnormal to Nmin +ddfma37575 fma 1 1E-383 -1E-398 -> 9.99999999999999E-384 Subnormal +ddfma37576 fma 1 -1E-383 +1E-398 -> -9.99999999999999E-384 Subnormal + +-- check overflow edge case +-- 1234567890123456 +ddfma37972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 +ddfma37973 fma 1 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded +ddfma37974 fma 1 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded +ddfma37975 fma 1 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded +ddfma37976 fma 1 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded +ddfma37977 fma 1 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded +ddfma37978 fma 1 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded +ddfma37979 fma 1 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded +ddfma37980 fma 1 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded +ddfma37981 fma 1 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded +ddfma37982 fma 1 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded +ddfma37983 fma 1 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded +ddfma37984 fma 1 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded + +ddfma37985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 +ddfma37986 fma 1 -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded +ddfma37987 fma 1 -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded +ddfma37988 fma 1 -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded +ddfma37989 fma 1 -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded +ddfma37990 fma 1 -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded +ddfma37991 fma 1 -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded +ddfma37992 fma 1 -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded +ddfma37993 fma 1 -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded +ddfma37994 fma 1 -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded +ddfma37995 fma 1 -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded +ddfma37996 fma 1 -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded +ddfma37997 fma 1 -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +ddfma371100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact +ddfma371101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact +ddfma371103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact +ddfma371104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact +ddfma371105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact +ddfma371106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact +ddfma371107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact +ddfma371108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact +ddfma371109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact + +rounding: ceiling +ddfma371110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact +ddfma371111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact +ddfma371113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact +ddfma371114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact +ddfma371115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact +ddfma371116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact +ddfma371117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact +ddfma371118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact +ddfma371119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +ddfma371300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded +ddfma371310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded +ddfma371311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded +ddfma371312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded +ddfma371313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded +ddfma371314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded +ddfma371315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded +ddfma371316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded +ddfma371317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded +ddfma371318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded +ddfma371319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded +ddfma371320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded +ddfma371321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded +ddfma371322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded +ddfma371323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded +ddfma371324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded +ddfma371325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded +ddfma371339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded + +ddfma371340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded +ddfma371341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded + +ddfma371349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded +ddfma371350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded +ddfma371351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded +ddfma371352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded +ddfma371353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded +ddfma371354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded +ddfma371355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded +ddfma371356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded +ddfma371357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded +ddfma371358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded +ddfma371359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded +ddfma371360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded +ddfma371361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded +ddfma371362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded +ddfma371363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded +ddfma371364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded +ddfma371365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded +ddfma371379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded +ddfma371380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded +ddfma371381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded +ddfma371382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded +ddfma371395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded +ddfma371396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +ddfma371420 fma 1 0 1.123456789012345 -> 1.123456789012345 +ddfma371421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 +ddfma371422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 +ddfma371423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 +ddfma371424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 +ddfma371425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 +ddfma371426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 +ddfma371427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 +ddfma371428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 +ddfma371429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 +ddfma371430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 +ddfma371431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 +ddfma371432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 +ddfma371433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 +ddfma371434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 +ddfma371435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 +ddfma371436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 +ddfma371437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 +ddfma371438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 +ddfma371439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 + +-- same, reversed 0 +ddfma371440 fma 1 1.123456789012345 0 -> 1.123456789012345 +ddfma371441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 +ddfma371442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 +ddfma371443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 +ddfma371444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 +ddfma371445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 +ddfma371446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 +ddfma371447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 +ddfma371448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 +ddfma371449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 +ddfma371450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 +ddfma371451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 +ddfma371452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 +ddfma371453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 +ddfma371454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 +ddfma371455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 +ddfma371456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 +ddfma371457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 +ddfma371458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 +ddfma371459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 + +-- same, Es on the 0 +ddfma371460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 +ddfma371461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 +ddfma371462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 +ddfma371463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 +ddfma371464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 +ddfma371465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 +ddfma371466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 +ddfma371467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 +ddfma371468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 +ddfma371469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 +ddfma371470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 +ddfma371471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 +ddfma371472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 +ddfma371473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 +ddfma371474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 +ddfma371475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 +-- next four flag Rounded because the 0 extends the result +ddfma371476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded +ddfma371477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded +ddfma371478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded +ddfma371479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +ddfma371500 fma 1 0 0E-19 -> 0E-19 +ddfma371501 fma 1 -0 0E-19 -> 0E-19 +ddfma371502 fma 1 0 -0E-19 -> 0E-19 +ddfma371503 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371511 fma 1 -11 11 -> 0 +ddfma371512 fma 1 11 -11 -> 0 + +rounding: half_down +-- exact zeros from zeros +ddfma371520 fma 1 0 0E-19 -> 0E-19 +ddfma371521 fma 1 -0 0E-19 -> 0E-19 +ddfma371522 fma 1 0 -0E-19 -> 0E-19 +ddfma371523 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371531 fma 1 -11 11 -> 0 +ddfma371532 fma 1 11 -11 -> 0 + +rounding: half_even +-- exact zeros from zeros +ddfma371540 fma 1 0 0E-19 -> 0E-19 +ddfma371541 fma 1 -0 0E-19 -> 0E-19 +ddfma371542 fma 1 0 -0E-19 -> 0E-19 +ddfma371543 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371551 fma 1 -11 11 -> 0 +ddfma371552 fma 1 11 -11 -> 0 + +rounding: up +-- exact zeros from zeros +ddfma371560 fma 1 0 0E-19 -> 0E-19 +ddfma371561 fma 1 -0 0E-19 -> 0E-19 +ddfma371562 fma 1 0 -0E-19 -> 0E-19 +ddfma371563 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371571 fma 1 -11 11 -> 0 +ddfma371572 fma 1 11 -11 -> 0 + +rounding: down +-- exact zeros from zeros +ddfma371580 fma 1 0 0E-19 -> 0E-19 +ddfma371581 fma 1 -0 0E-19 -> 0E-19 +ddfma371582 fma 1 0 -0E-19 -> 0E-19 +ddfma371583 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371591 fma 1 -11 11 -> 0 +ddfma371592 fma 1 11 -11 -> 0 + +rounding: ceiling +-- exact zeros from zeros +ddfma371600 fma 1 0 0E-19 -> 0E-19 +ddfma371601 fma 1 -0 0E-19 -> 0E-19 +ddfma371602 fma 1 0 -0E-19 -> 0E-19 +ddfma371603 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371611 fma 1 -11 11 -> 0 +ddfma371612 fma 1 11 -11 -> 0 + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +ddfma371620 fma 1 0 0E-19 -> 0E-19 +ddfma371621 fma 1 -0 0E-19 -> -0E-19 -- * +ddfma371622 fma 1 0 -0E-19 -> -0E-19 -- * +ddfma371623 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +ddfma371631 fma 1 -11 11 -> -0 -- * +ddfma371632 fma 1 11 -11 -> -0 -- * + +-- Examples from SQL proposal (Krishna Kulkarni) +ddfma371701 fma 1 130E-2 120E-2 -> 2.50 +ddfma371702 fma 1 130E-2 12E-1 -> 2.50 +ddfma371703 fma 1 130E-2 1E0 -> 2.30 +ddfma371704 fma 1 1E2 1E4 -> 1.01E+4 +ddfma371705 fma 1 130E-2 -120E-2 -> 0.10 +ddfma371706 fma 1 130E-2 -12E-1 -> 0.10 +ddfma371707 fma 1 130E-2 -1E0 -> 0.30 +ddfma371708 fma 1 1E2 -1E4 -> -9.9E+3 + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +ddfma375001 fma 1 1234567890123456 1 -> 1234567890123457 +ddfma375002 fma 1 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded +ddfma375003 fma 1 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded +ddfma375004 fma 1 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded +ddfma375005 fma 1 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded +ddfma375006 fma 1 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded +ddfma375007 fma 1 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded +ddfma375008 fma 1 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded +ddfma375009 fma 1 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded +ddfma375010 fma 1 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded +ddfma375011 fma 1 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded +ddfma375012 fma 1 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded +ddfma375013 fma 1 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded +ddfma375014 fma 1 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded +ddfma375015 fma 1 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded +ddfma375016 fma 1 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded +ddfma375017 fma 1 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded +ddfma375018 fma 1 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded +ddfma375019 fma 1 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded +ddfma375020 fma 1 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded +ddfma375021 fma 1 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded + +-- widening second argument at gap +ddfma375030 fma 1 12345678 1 -> 12345679 +ddfma375031 fma 1 12345678 0.1 -> 12345678.1 +ddfma375032 fma 1 12345678 0.12 -> 12345678.12 +ddfma375033 fma 1 12345678 0.123 -> 12345678.123 +ddfma375034 fma 1 12345678 0.1234 -> 12345678.1234 +ddfma375035 fma 1 12345678 0.12345 -> 12345678.12345 +ddfma375036 fma 1 12345678 0.123456 -> 12345678.123456 +ddfma375037 fma 1 12345678 0.1234567 -> 12345678.1234567 +ddfma375038 fma 1 12345678 0.12345678 -> 12345678.12345678 +ddfma375039 fma 1 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded +ddfma375040 fma 1 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded +ddfma375041 fma 1 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded +ddfma375042 fma 1 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded +ddfma375043 fma 1 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded +ddfma375044 fma 1 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded +ddfma375045 fma 1 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded +ddfma375046 fma 1 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded +ddfma375047 fma 1 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded +ddfma375048 fma 1 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded +ddfma375049 fma 1 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +ddfma375050 fma 1 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded +ddfma375051 fma 1 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded +ddfma375052 fma 1 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded +ddfma375053 fma 1 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded +ddfma375054 fma 1 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded +ddfma375055 fma 1 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded +ddfma375056 fma 1 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded +ddfma375057 fma 1 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded +ddfma375060 fma 1 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded +ddfma375061 fma 1 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded +ddfma375062 fma 1 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded +ddfma375063 fma 1 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded +ddfma375064 fma 1 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded +ddfma375065 fma 1 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded +ddfma375066 fma 1 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded +ddfma375067 fma 1 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +ddfma375070 fma 1 12345678 1E-8 -> 12345678.00000001 +ddfma375071 fma 1 12345678 1E-9 -> 12345678.00000001 Inexact Rounded +ddfma375072 fma 1 12345678 1E-10 -> 12345678.00000001 Inexact Rounded +ddfma375073 fma 1 12345678 1E-11 -> 12345678.00000001 Inexact Rounded +ddfma375074 fma 1 12345678 1E-12 -> 12345678.00000001 Inexact Rounded +ddfma375075 fma 1 12345678 1E-13 -> 12345678.00000001 Inexact Rounded +ddfma375076 fma 1 12345678 1E-14 -> 12345678.00000001 Inexact Rounded +ddfma375077 fma 1 12345678 1E-15 -> 12345678.00000001 Inexact Rounded +ddfma375078 fma 1 12345678 1E-16 -> 12345678.00000001 Inexact Rounded +ddfma375079 fma 1 12345678 1E-17 -> 12345678.00000001 Inexact Rounded +ddfma375080 fma 1 12345678 1E-18 -> 12345678.00000001 Inexact Rounded +ddfma375081 fma 1 12345678 1E-19 -> 12345678.00000001 Inexact Rounded +ddfma375082 fma 1 12345678 1E-20 -> 12345678.00000001 Inexact Rounded +ddfma375083 fma 1 12345678 1E-25 -> 12345678.00000001 Inexact Rounded +ddfma375084 fma 1 12345678 1E-30 -> 12345678.00000001 Inexact Rounded +ddfma375085 fma 1 12345678 1E-31 -> 12345678.00000001 Inexact Rounded +ddfma375086 fma 1 12345678 1E-32 -> 12345678.00000001 Inexact Rounded +ddfma375087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexact Rounded +ddfma375088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded +ddfma375089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded + +-- destructive subtraction (from remainder tests) + +-- +++ some of these will be off-by-one remainder vs remainderNear + +ddfma4000 fma -1234567890123454 1.000000000000001 1234567890123456 -> 0.765432109876546 +ddfma4001 fma -1234567890123443 1.00000000000001 1234567890123456 -> 0.65432109876557 +ddfma4002 fma -1234567890123332 1.0000000000001 1234567890123456 -> 0.5432109876668 +ddfma4003 fma -308641972530863 4.000000000000001 1234567890123455 -> 2.691358027469137 +ddfma4004 fma -308641972530863 4.000000000000001 1234567890123456 -> 3.691358027469137 +ddfma4005 fma -246913578024696 4.9999999999999 1234567890123456 -> 0.6913578024696 +ddfma4006 fma -246913578024691 4.99999999999999 1234567890123456 -> 3.46913578024691 +ddfma4007 fma -246913578024691 4.999999999999999 1234567890123456 -> 1.246913578024691 +ddfma4008 fma -246913578024691 5.000000000000001 1234567890123456 -> 0.753086421975309 +ddfma4009 fma -246913578024690 5.00000000000001 1234567890123456 -> 3.53086421975310 +ddfma4010 fma -246913578024686 5.0000000000001 1234567890123456 -> 1.3086421975314 +ddfma4011 fma -1234567890123455 1.000000000000001 1234567890123456 -> -0.234567890123455 +ddfma4012 fma -1234567890123444 1.00000000000001 1234567890123456 -> -0.34567890123444 +ddfma4013 fma -1234567890123333 1.0000000000001 1234567890123456 -> -0.4567890123333 +ddfma4014 fma -308641972530864 4.000000000000001 1234567890123455 -> -1.308641972530864 +ddfma4015 fma -308641972530864 4.000000000000001 1234567890123456 -> -0.308641972530864 +ddfma4016 fma -246913578024696 4.9999999999999 1234567890123456 -> 0.6913578024696 +ddfma4017 fma -246913578024692 4.99999999999999 1234567890123456 -> -1.53086421975308 +ddfma4018 fma -246913578024691 4.999999999999999 1234567890123456 -> 1.246913578024691 +ddfma4019 fma -246913578024691 5.000000000000001 1234567890123456 -> 0.753086421975309 +ddfma4020 fma -246913578024691 5.00000000000001 1234567890123456 -> -1.46913578024691 +ddfma4021 fma -246913578024686 5.0000000000001 1234567890123456 -> 1.3086421975314 + + +-- Null tests +ddfma39990 fma 1 10 # -> NaN Invalid_operation +ddfma39991 fma 1 # 10 -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/ddInvert.decTest b/Lib/test/decimaltestdata/ddInvert.decTest index 5d19fba829b..321e4e9ee97 100644 --- a/Lib/test/decimaltestdata/ddInvert.decTest +++ b/Lib/test/decimaltestdata/ddInvert.decTest @@ -1,202 +1,202 @@ ------------------------------------------------------------------------- --- ddInvert.decTest -- digitwise logical INVERT for decDoubles -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check (truth table) -ddinv001 invert 0 -> 1111111111111111 -ddinv002 invert 1 -> 1111111111111110 -ddinv003 invert 10 -> 1111111111111101 -ddinv004 invert 111111111 -> 1111111000000000 -ddinv005 invert 000000000 -> 1111111111111111 --- and at msd and msd-1 -ddinv007 invert 0000000000000000 -> 1111111111111111 -ddinv008 invert 1000000000000000 -> 111111111111111 -ddinv009 invert 0000000000000000 -> 1111111111111111 -ddinv010 invert 0100000000000000 -> 1011111111111111 -ddinv011 invert 0111111111111111 -> 1000000000000000 -ddinv012 invert 1111111111111111 -> 0 -ddinv013 invert 0011111111111111 -> 1100000000000000 -ddinv014 invert 0111111111111111 -> 1000000000000000 - --- Various lengths --- 123456789 1234567890123456 -ddinv021 invert 111111111 -> 1111111000000000 -ddinv022 invert 111111111111 -> 1111000000000000 -ddinv023 invert 11111111 -> 1111111100000000 -ddinv025 invert 1111111 -> 1111111110000000 -ddinv026 invert 111111 -> 1111111111000000 -ddinv027 invert 11111 -> 1111111111100000 -ddinv028 invert 1111 -> 1111111111110000 -ddinv029 invert 111 -> 1111111111111000 -ddinv031 invert 11 -> 1111111111111100 -ddinv032 invert 1 -> 1111111111111110 -ddinv033 invert 111111111111 -> 1111000000000000 -ddinv034 invert 11111111111 -> 1111100000000000 -ddinv035 invert 1111111111 -> 1111110000000000 -ddinv036 invert 111111111 -> 1111111000000000 - -ddinv040 invert 011111111 -> 1111111100000000 -ddinv041 invert 101111111 -> 1111111010000000 -ddinv042 invert 110111111 -> 1111111001000000 -ddinv043 invert 111011111 -> 1111111000100000 -ddinv044 invert 111101111 -> 1111111000010000 -ddinv045 invert 111110111 -> 1111111000001000 -ddinv046 invert 111111011 -> 1111111000000100 -ddinv047 invert 111111101 -> 1111111000000010 -ddinv048 invert 111111110 -> 1111111000000001 -ddinv049 invert 011111011 -> 1111111100000100 -ddinv050 invert 101111101 -> 1111111010000010 -ddinv051 invert 110111110 -> 1111111001000001 -ddinv052 invert 111011101 -> 1111111000100010 -ddinv053 invert 111101011 -> 1111111000010100 -ddinv054 invert 111110111 -> 1111111000001000 -ddinv055 invert 111101011 -> 1111111000010100 -ddinv056 invert 111011101 -> 1111111000100010 -ddinv057 invert 110111110 -> 1111111001000001 -ddinv058 invert 101111101 -> 1111111010000010 -ddinv059 invert 011111011 -> 1111111100000100 - -ddinv080 invert 1000000011111111 -> 111111100000000 -ddinv081 invert 0100000101111111 -> 1011111010000000 -ddinv082 invert 0010000110111111 -> 1101111001000000 -ddinv083 invert 0001000111011111 -> 1110111000100000 -ddinv084 invert 0000100111101111 -> 1111011000010000 -ddinv085 invert 0000010111110111 -> 1111101000001000 -ddinv086 invert 0000001111111011 -> 1111110000000100 -ddinv087 invert 0000010111111101 -> 1111101000000010 -ddinv088 invert 0000100111111110 -> 1111011000000001 -ddinv089 invert 0001000011111011 -> 1110111100000100 -ddinv090 invert 0010000101111101 -> 1101111010000010 -ddinv091 invert 0100000110111110 -> 1011111001000001 -ddinv092 invert 1000000111011101 -> 111111000100010 -ddinv093 invert 0100000111101011 -> 1011111000010100 -ddinv094 invert 0010000111110111 -> 1101111000001000 -ddinv095 invert 0001000111101011 -> 1110111000010100 -ddinv096 invert 0000100111011101 -> 1111011000100010 -ddinv097 invert 0000010110111110 -> 1111101001000001 -ddinv098 invert 0000001101111101 -> 1111110010000010 -ddinv099 invert 0000010011111011 -> 1111101100000100 - --- non-0/1 should not be accepted, nor should signs -ddinv220 invert 111111112 -> NaN Invalid_operation -ddinv221 invert 333333333 -> NaN Invalid_operation -ddinv222 invert 555555555 -> NaN Invalid_operation -ddinv223 invert 777777777 -> NaN Invalid_operation -ddinv224 invert 999999999 -> NaN Invalid_operation -ddinv225 invert 222222222 -> NaN Invalid_operation -ddinv226 invert 444444444 -> NaN Invalid_operation -ddinv227 invert 666666666 -> NaN Invalid_operation -ddinv228 invert 888888888 -> NaN Invalid_operation -ddinv229 invert 999999999 -> NaN Invalid_operation -ddinv230 invert 999999999 -> NaN Invalid_operation -ddinv231 invert 999999999 -> NaN Invalid_operation -ddinv232 invert 999999999 -> NaN Invalid_operation --- a few randoms -ddinv240 invert 567468689 -> NaN Invalid_operation -ddinv241 invert 567367689 -> NaN Invalid_operation -ddinv242 invert -631917772 -> NaN Invalid_operation -ddinv243 invert -756253257 -> NaN Invalid_operation -ddinv244 invert 835590149 -> NaN Invalid_operation --- test MSD -ddinv250 invert 2000000000000000 -> NaN Invalid_operation -ddinv251 invert 3000000000000000 -> NaN Invalid_operation -ddinv252 invert 4000000000000000 -> NaN Invalid_operation -ddinv253 invert 5000000000000000 -> NaN Invalid_operation -ddinv254 invert 6000000000000000 -> NaN Invalid_operation -ddinv255 invert 7000000000000000 -> NaN Invalid_operation -ddinv256 invert 8000000000000000 -> NaN Invalid_operation -ddinv257 invert 9000000000000000 -> NaN Invalid_operation --- test MSD-1 -ddinv270 invert 0200001000000000 -> NaN Invalid_operation -ddinv271 invert 0300000100000000 -> NaN Invalid_operation -ddinv272 invert 0400000010000000 -> NaN Invalid_operation -ddinv273 invert 0500000001000000 -> NaN Invalid_operation -ddinv274 invert 1600000000100000 -> NaN Invalid_operation -ddinv275 invert 1700000000010000 -> NaN Invalid_operation -ddinv276 invert 1800000000001000 -> NaN Invalid_operation -ddinv277 invert 1900000000000100 -> NaN Invalid_operation --- test LSD -ddinv280 invert 0010000000000002 -> NaN Invalid_operation -ddinv281 invert 0001000000000003 -> NaN Invalid_operation -ddinv282 invert 0000100000000004 -> NaN Invalid_operation -ddinv283 invert 0000010000000005 -> NaN Invalid_operation -ddinv284 invert 1000001000000006 -> NaN Invalid_operation -ddinv285 invert 1000000100000007 -> NaN Invalid_operation -ddinv286 invert 1000000010000008 -> NaN Invalid_operation -ddinv287 invert 1000000001000009 -> NaN Invalid_operation --- test Middie -ddinv288 invert 0010000020000000 -> NaN Invalid_operation -ddinv289 invert 0001000030000001 -> NaN Invalid_operation -ddinv290 invert 0000100040000010 -> NaN Invalid_operation -ddinv291 invert 0000010050000100 -> NaN Invalid_operation -ddinv292 invert 1000001060001000 -> NaN Invalid_operation -ddinv293 invert 1000000170010000 -> NaN Invalid_operation -ddinv294 invert 1000000080100000 -> NaN Invalid_operation -ddinv295 invert 1000000091000000 -> NaN Invalid_operation --- sign -ddinv296 invert -1000000001000000 -> NaN Invalid_operation -ddinv299 invert 1000000001000000 -> 111111110111111 - - --- Nmax, Nmin, Ntiny-like -ddinv341 invert 9.99999999E+299 -> NaN Invalid_operation -ddinv342 invert 1E-299 -> NaN Invalid_operation -ddinv343 invert 1.00000000E-299 -> NaN Invalid_operation -ddinv344 invert 1E-207 -> NaN Invalid_operation -ddinv345 invert -1E-207 -> NaN Invalid_operation -ddinv346 invert -1.00000000E-299 -> NaN Invalid_operation -ddinv347 invert -1E-299 -> NaN Invalid_operation -ddinv348 invert -9.99999999E+299 -> NaN Invalid_operation - --- A few other non-integers -ddinv361 invert 1.0 -> NaN Invalid_operation -ddinv362 invert 1E+1 -> NaN Invalid_operation -ddinv363 invert 0.0 -> NaN Invalid_operation -ddinv364 invert 0E+1 -> NaN Invalid_operation -ddinv365 invert 9.9 -> NaN Invalid_operation -ddinv366 invert 9E+1 -> NaN Invalid_operation - --- All Specials are in error -ddinv788 invert -Inf -> NaN Invalid_operation -ddinv794 invert Inf -> NaN Invalid_operation -ddinv821 invert NaN -> NaN Invalid_operation -ddinv841 invert sNaN -> NaN Invalid_operation --- propagating NaNs -ddinv861 invert NaN1 -> NaN Invalid_operation -ddinv862 invert +NaN2 -> NaN Invalid_operation -ddinv863 invert NaN3 -> NaN Invalid_operation -ddinv864 invert NaN4 -> NaN Invalid_operation -ddinv865 invert NaN5 -> NaN Invalid_operation -ddinv871 invert sNaN11 -> NaN Invalid_operation -ddinv872 invert sNaN12 -> NaN Invalid_operation -ddinv873 invert sNaN13 -> NaN Invalid_operation -ddinv874 invert sNaN14 -> NaN Invalid_operation -ddinv875 invert sNaN15 -> NaN Invalid_operation -ddinv876 invert NaN16 -> NaN Invalid_operation -ddinv881 invert +NaN25 -> NaN Invalid_operation -ddinv882 invert -NaN26 -> NaN Invalid_operation -ddinv883 invert -sNaN27 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddInvert.decTest -- digitwise logical INVERT for decDoubles -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check (truth table) +ddinv001 invert 0 -> 1111111111111111 +ddinv002 invert 1 -> 1111111111111110 +ddinv003 invert 10 -> 1111111111111101 +ddinv004 invert 111111111 -> 1111111000000000 +ddinv005 invert 000000000 -> 1111111111111111 +-- and at msd and msd-1 +ddinv007 invert 0000000000000000 -> 1111111111111111 +ddinv008 invert 1000000000000000 -> 111111111111111 +ddinv009 invert 0000000000000000 -> 1111111111111111 +ddinv010 invert 0100000000000000 -> 1011111111111111 +ddinv011 invert 0111111111111111 -> 1000000000000000 +ddinv012 invert 1111111111111111 -> 0 +ddinv013 invert 0011111111111111 -> 1100000000000000 +ddinv014 invert 0111111111111111 -> 1000000000000000 + +-- Various lengths +-- 123456789 1234567890123456 +ddinv021 invert 111111111 -> 1111111000000000 +ddinv022 invert 111111111111 -> 1111000000000000 +ddinv023 invert 11111111 -> 1111111100000000 +ddinv025 invert 1111111 -> 1111111110000000 +ddinv026 invert 111111 -> 1111111111000000 +ddinv027 invert 11111 -> 1111111111100000 +ddinv028 invert 1111 -> 1111111111110000 +ddinv029 invert 111 -> 1111111111111000 +ddinv031 invert 11 -> 1111111111111100 +ddinv032 invert 1 -> 1111111111111110 +ddinv033 invert 111111111111 -> 1111000000000000 +ddinv034 invert 11111111111 -> 1111100000000000 +ddinv035 invert 1111111111 -> 1111110000000000 +ddinv036 invert 111111111 -> 1111111000000000 + +ddinv040 invert 011111111 -> 1111111100000000 +ddinv041 invert 101111111 -> 1111111010000000 +ddinv042 invert 110111111 -> 1111111001000000 +ddinv043 invert 111011111 -> 1111111000100000 +ddinv044 invert 111101111 -> 1111111000010000 +ddinv045 invert 111110111 -> 1111111000001000 +ddinv046 invert 111111011 -> 1111111000000100 +ddinv047 invert 111111101 -> 1111111000000010 +ddinv048 invert 111111110 -> 1111111000000001 +ddinv049 invert 011111011 -> 1111111100000100 +ddinv050 invert 101111101 -> 1111111010000010 +ddinv051 invert 110111110 -> 1111111001000001 +ddinv052 invert 111011101 -> 1111111000100010 +ddinv053 invert 111101011 -> 1111111000010100 +ddinv054 invert 111110111 -> 1111111000001000 +ddinv055 invert 111101011 -> 1111111000010100 +ddinv056 invert 111011101 -> 1111111000100010 +ddinv057 invert 110111110 -> 1111111001000001 +ddinv058 invert 101111101 -> 1111111010000010 +ddinv059 invert 011111011 -> 1111111100000100 + +ddinv080 invert 1000000011111111 -> 111111100000000 +ddinv081 invert 0100000101111111 -> 1011111010000000 +ddinv082 invert 0010000110111111 -> 1101111001000000 +ddinv083 invert 0001000111011111 -> 1110111000100000 +ddinv084 invert 0000100111101111 -> 1111011000010000 +ddinv085 invert 0000010111110111 -> 1111101000001000 +ddinv086 invert 0000001111111011 -> 1111110000000100 +ddinv087 invert 0000010111111101 -> 1111101000000010 +ddinv088 invert 0000100111111110 -> 1111011000000001 +ddinv089 invert 0001000011111011 -> 1110111100000100 +ddinv090 invert 0010000101111101 -> 1101111010000010 +ddinv091 invert 0100000110111110 -> 1011111001000001 +ddinv092 invert 1000000111011101 -> 111111000100010 +ddinv093 invert 0100000111101011 -> 1011111000010100 +ddinv094 invert 0010000111110111 -> 1101111000001000 +ddinv095 invert 0001000111101011 -> 1110111000010100 +ddinv096 invert 0000100111011101 -> 1111011000100010 +ddinv097 invert 0000010110111110 -> 1111101001000001 +ddinv098 invert 0000001101111101 -> 1111110010000010 +ddinv099 invert 0000010011111011 -> 1111101100000100 + +-- non-0/1 should not be accepted, nor should signs +ddinv220 invert 111111112 -> NaN Invalid_operation +ddinv221 invert 333333333 -> NaN Invalid_operation +ddinv222 invert 555555555 -> NaN Invalid_operation +ddinv223 invert 777777777 -> NaN Invalid_operation +ddinv224 invert 999999999 -> NaN Invalid_operation +ddinv225 invert 222222222 -> NaN Invalid_operation +ddinv226 invert 444444444 -> NaN Invalid_operation +ddinv227 invert 666666666 -> NaN Invalid_operation +ddinv228 invert 888888888 -> NaN Invalid_operation +ddinv229 invert 999999999 -> NaN Invalid_operation +ddinv230 invert 999999999 -> NaN Invalid_operation +ddinv231 invert 999999999 -> NaN Invalid_operation +ddinv232 invert 999999999 -> NaN Invalid_operation +-- a few randoms +ddinv240 invert 567468689 -> NaN Invalid_operation +ddinv241 invert 567367689 -> NaN Invalid_operation +ddinv242 invert -631917772 -> NaN Invalid_operation +ddinv243 invert -756253257 -> NaN Invalid_operation +ddinv244 invert 835590149 -> NaN Invalid_operation +-- test MSD +ddinv250 invert 2000000000000000 -> NaN Invalid_operation +ddinv251 invert 3000000000000000 -> NaN Invalid_operation +ddinv252 invert 4000000000000000 -> NaN Invalid_operation +ddinv253 invert 5000000000000000 -> NaN Invalid_operation +ddinv254 invert 6000000000000000 -> NaN Invalid_operation +ddinv255 invert 7000000000000000 -> NaN Invalid_operation +ddinv256 invert 8000000000000000 -> NaN Invalid_operation +ddinv257 invert 9000000000000000 -> NaN Invalid_operation +-- test MSD-1 +ddinv270 invert 0200001000000000 -> NaN Invalid_operation +ddinv271 invert 0300000100000000 -> NaN Invalid_operation +ddinv272 invert 0400000010000000 -> NaN Invalid_operation +ddinv273 invert 0500000001000000 -> NaN Invalid_operation +ddinv274 invert 1600000000100000 -> NaN Invalid_operation +ddinv275 invert 1700000000010000 -> NaN Invalid_operation +ddinv276 invert 1800000000001000 -> NaN Invalid_operation +ddinv277 invert 1900000000000100 -> NaN Invalid_operation +-- test LSD +ddinv280 invert 0010000000000002 -> NaN Invalid_operation +ddinv281 invert 0001000000000003 -> NaN Invalid_operation +ddinv282 invert 0000100000000004 -> NaN Invalid_operation +ddinv283 invert 0000010000000005 -> NaN Invalid_operation +ddinv284 invert 1000001000000006 -> NaN Invalid_operation +ddinv285 invert 1000000100000007 -> NaN Invalid_operation +ddinv286 invert 1000000010000008 -> NaN Invalid_operation +ddinv287 invert 1000000001000009 -> NaN Invalid_operation +-- test Middie +ddinv288 invert 0010000020000000 -> NaN Invalid_operation +ddinv289 invert 0001000030000001 -> NaN Invalid_operation +ddinv290 invert 0000100040000010 -> NaN Invalid_operation +ddinv291 invert 0000010050000100 -> NaN Invalid_operation +ddinv292 invert 1000001060001000 -> NaN Invalid_operation +ddinv293 invert 1000000170010000 -> NaN Invalid_operation +ddinv294 invert 1000000080100000 -> NaN Invalid_operation +ddinv295 invert 1000000091000000 -> NaN Invalid_operation +-- sign +ddinv296 invert -1000000001000000 -> NaN Invalid_operation +ddinv299 invert 1000000001000000 -> 111111110111111 + + +-- Nmax, Nmin, Ntiny-like +ddinv341 invert 9.99999999E+299 -> NaN Invalid_operation +ddinv342 invert 1E-299 -> NaN Invalid_operation +ddinv343 invert 1.00000000E-299 -> NaN Invalid_operation +ddinv344 invert 1E-207 -> NaN Invalid_operation +ddinv345 invert -1E-207 -> NaN Invalid_operation +ddinv346 invert -1.00000000E-299 -> NaN Invalid_operation +ddinv347 invert -1E-299 -> NaN Invalid_operation +ddinv348 invert -9.99999999E+299 -> NaN Invalid_operation + +-- A few other non-integers +ddinv361 invert 1.0 -> NaN Invalid_operation +ddinv362 invert 1E+1 -> NaN Invalid_operation +ddinv363 invert 0.0 -> NaN Invalid_operation +ddinv364 invert 0E+1 -> NaN Invalid_operation +ddinv365 invert 9.9 -> NaN Invalid_operation +ddinv366 invert 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +ddinv788 invert -Inf -> NaN Invalid_operation +ddinv794 invert Inf -> NaN Invalid_operation +ddinv821 invert NaN -> NaN Invalid_operation +ddinv841 invert sNaN -> NaN Invalid_operation +-- propagating NaNs +ddinv861 invert NaN1 -> NaN Invalid_operation +ddinv862 invert +NaN2 -> NaN Invalid_operation +ddinv863 invert NaN3 -> NaN Invalid_operation +ddinv864 invert NaN4 -> NaN Invalid_operation +ddinv865 invert NaN5 -> NaN Invalid_operation +ddinv871 invert sNaN11 -> NaN Invalid_operation +ddinv872 invert sNaN12 -> NaN Invalid_operation +ddinv873 invert sNaN13 -> NaN Invalid_operation +ddinv874 invert sNaN14 -> NaN Invalid_operation +ddinv875 invert sNaN15 -> NaN Invalid_operation +ddinv876 invert NaN16 -> NaN Invalid_operation +ddinv881 invert +NaN25 -> NaN Invalid_operation +ddinv882 invert -NaN26 -> NaN Invalid_operation +ddinv883 invert -sNaN27 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddLogB.decTest b/Lib/test/decimaltestdata/ddLogB.decTest index de728e5968d..00589b60c35 100644 --- a/Lib/test/decimaltestdata/ddLogB.decTest +++ b/Lib/test/decimaltestdata/ddLogB.decTest @@ -1,159 +1,159 @@ ------------------------------------------------------------------------- --- ddLogB.decTest -- integral 754r adjusted exponent, for decDoubles -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- basics -ddlogb000 logb 0 -> -Infinity Division_by_zero -ddlogb001 logb 1E-398 -> -398 -ddlogb002 logb 1E-383 -> -383 -ddlogb003 logb 0.001 -> -3 -ddlogb004 logb 0.03 -> -2 -ddlogb005 logb 1 -> 0 -ddlogb006 logb 2 -> 0 -ddlogb007 logb 2.5 -> 0 -ddlogb008 logb 2.500 -> 0 -ddlogb009 logb 10 -> 1 -ddlogb010 logb 70 -> 1 -ddlogb011 logb 100 -> 2 -ddlogb012 logb 333 -> 2 -ddlogb013 logb 9E+384 -> 384 -ddlogb014 logb +Infinity -> Infinity - --- negatives appear to be treated as positives -ddlogb021 logb -0 -> -Infinity Division_by_zero -ddlogb022 logb -1E-398 -> -398 -ddlogb023 logb -9E-383 -> -383 -ddlogb024 logb -0.001 -> -3 -ddlogb025 logb -1 -> 0 -ddlogb026 logb -2 -> 0 -ddlogb027 logb -10 -> 1 -ddlogb028 logb -70 -> 1 -ddlogb029 logb -100 -> 2 -ddlogb030 logb -9E+384 -> 384 -ddlogb031 logb -Infinity -> Infinity - --- zeros -ddlogb111 logb 0 -> -Infinity Division_by_zero -ddlogb112 logb -0 -> -Infinity Division_by_zero -ddlogb113 logb 0E+4 -> -Infinity Division_by_zero -ddlogb114 logb -0E+4 -> -Infinity Division_by_zero -ddlogb115 logb 0.0000 -> -Infinity Division_by_zero -ddlogb116 logb -0.0000 -> -Infinity Division_by_zero -ddlogb117 logb 0E-141 -> -Infinity Division_by_zero -ddlogb118 logb -0E-141 -> -Infinity Division_by_zero - --- full coefficients, alternating bits -ddlogb121 logb 268268268 -> 8 -ddlogb122 logb -268268268 -> 8 -ddlogb123 logb 134134134 -> 8 -ddlogb124 logb -134134134 -> 8 - --- Nmax, Nmin, Ntiny -ddlogb131 logb 9.999999999999999E+384 -> 384 -ddlogb132 logb 1E-383 -> -383 -ddlogb133 logb 1.000000000000000E-383 -> -383 -ddlogb134 logb 1E-398 -> -398 - -ddlogb135 logb -1E-398 -> -398 -ddlogb136 logb -1.000000000000000E-383 -> -383 -ddlogb137 logb -1E-383 -> -383 -ddlogb138 logb -9.999999999999999E+384 -> 384 - --- ones -ddlogb0061 logb 1 -> 0 -ddlogb0062 logb 1.0 -> 0 -ddlogb0063 logb 1.000000000000000 -> 0 - --- notable cases -- exact powers of 10 -ddlogb1100 logb 1 -> 0 -ddlogb1101 logb 10 -> 1 -ddlogb1102 logb 100 -> 2 -ddlogb1103 logb 1000 -> 3 -ddlogb1104 logb 10000 -> 4 -ddlogb1105 logb 100000 -> 5 -ddlogb1106 logb 1000000 -> 6 -ddlogb1107 logb 10000000 -> 7 -ddlogb1108 logb 100000000 -> 8 -ddlogb1109 logb 1000000000 -> 9 -ddlogb1110 logb 10000000000 -> 10 -ddlogb1111 logb 100000000000 -> 11 -ddlogb1112 logb 1000000000000 -> 12 -ddlogb1113 logb 0.00000000001 -> -11 -ddlogb1114 logb 0.0000000001 -> -10 -ddlogb1115 logb 0.000000001 -> -9 -ddlogb1116 logb 0.00000001 -> -8 -ddlogb1117 logb 0.0000001 -> -7 -ddlogb1118 logb 0.000001 -> -6 -ddlogb1119 logb 0.00001 -> -5 -ddlogb1120 logb 0.0001 -> -4 -ddlogb1121 logb 0.001 -> -3 -ddlogb1122 logb 0.01 -> -2 -ddlogb1123 logb 0.1 -> -1 -ddlogb1124 logb 1E-99 -> -99 -ddlogb1125 logb 1E-100 -> -100 -ddlogb1127 logb 1E-299 -> -299 -ddlogb1126 logb 1E-383 -> -383 - --- suggestions from Ilan Nehama -ddlogb1400 logb 10E-3 -> -2 -ddlogb1401 logb 10E-2 -> -1 -ddlogb1402 logb 100E-2 -> 0 -ddlogb1403 logb 1000E-2 -> 1 -ddlogb1404 logb 10000E-2 -> 2 -ddlogb1405 logb 10E-1 -> 0 -ddlogb1406 logb 100E-1 -> 1 -ddlogb1407 logb 1000E-1 -> 2 -ddlogb1408 logb 10000E-1 -> 3 -ddlogb1409 logb 10E0 -> 1 -ddlogb1410 logb 100E0 -> 2 -ddlogb1411 logb 1000E0 -> 3 -ddlogb1412 logb 10000E0 -> 4 -ddlogb1413 logb 10E1 -> 2 -ddlogb1414 logb 100E1 -> 3 -ddlogb1415 logb 1000E1 -> 4 -ddlogb1416 logb 10000E1 -> 5 -ddlogb1417 logb 10E2 -> 3 -ddlogb1418 logb 100E2 -> 4 -ddlogb1419 logb 1000E2 -> 5 -ddlogb1420 logb 10000E2 -> 6 - --- special values -ddlogb820 logb Infinity -> Infinity -ddlogb821 logb 0 -> -Infinity Division_by_zero -ddlogb822 logb NaN -> NaN -ddlogb823 logb sNaN -> NaN Invalid_operation --- propagating NaNs -ddlogb824 logb sNaN123 -> NaN123 Invalid_operation -ddlogb825 logb -sNaN321 -> -NaN321 Invalid_operation -ddlogb826 logb NaN456 -> NaN456 -ddlogb827 logb -NaN654 -> -NaN654 -ddlogb828 logb NaN1 -> NaN1 - --- Null test -ddlogb900 logb # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- ddLogB.decTest -- integral 754r adjusted exponent, for decDoubles -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- basics +ddlogb000 logb 0 -> -Infinity Division_by_zero +ddlogb001 logb 1E-398 -> -398 +ddlogb002 logb 1E-383 -> -383 +ddlogb003 logb 0.001 -> -3 +ddlogb004 logb 0.03 -> -2 +ddlogb005 logb 1 -> 0 +ddlogb006 logb 2 -> 0 +ddlogb007 logb 2.5 -> 0 +ddlogb008 logb 2.500 -> 0 +ddlogb009 logb 10 -> 1 +ddlogb010 logb 70 -> 1 +ddlogb011 logb 100 -> 2 +ddlogb012 logb 333 -> 2 +ddlogb013 logb 9E+384 -> 384 +ddlogb014 logb +Infinity -> Infinity + +-- negatives appear to be treated as positives +ddlogb021 logb -0 -> -Infinity Division_by_zero +ddlogb022 logb -1E-398 -> -398 +ddlogb023 logb -9E-383 -> -383 +ddlogb024 logb -0.001 -> -3 +ddlogb025 logb -1 -> 0 +ddlogb026 logb -2 -> 0 +ddlogb027 logb -10 -> 1 +ddlogb028 logb -70 -> 1 +ddlogb029 logb -100 -> 2 +ddlogb030 logb -9E+384 -> 384 +ddlogb031 logb -Infinity -> Infinity + +-- zeros +ddlogb111 logb 0 -> -Infinity Division_by_zero +ddlogb112 logb -0 -> -Infinity Division_by_zero +ddlogb113 logb 0E+4 -> -Infinity Division_by_zero +ddlogb114 logb -0E+4 -> -Infinity Division_by_zero +ddlogb115 logb 0.0000 -> -Infinity Division_by_zero +ddlogb116 logb -0.0000 -> -Infinity Division_by_zero +ddlogb117 logb 0E-141 -> -Infinity Division_by_zero +ddlogb118 logb -0E-141 -> -Infinity Division_by_zero + +-- full coefficients, alternating bits +ddlogb121 logb 268268268 -> 8 +ddlogb122 logb -268268268 -> 8 +ddlogb123 logb 134134134 -> 8 +ddlogb124 logb -134134134 -> 8 + +-- Nmax, Nmin, Ntiny +ddlogb131 logb 9.999999999999999E+384 -> 384 +ddlogb132 logb 1E-383 -> -383 +ddlogb133 logb 1.000000000000000E-383 -> -383 +ddlogb134 logb 1E-398 -> -398 + +ddlogb135 logb -1E-398 -> -398 +ddlogb136 logb -1.000000000000000E-383 -> -383 +ddlogb137 logb -1E-383 -> -383 +ddlogb138 logb -9.999999999999999E+384 -> 384 + +-- ones +ddlogb0061 logb 1 -> 0 +ddlogb0062 logb 1.0 -> 0 +ddlogb0063 logb 1.000000000000000 -> 0 + +-- notable cases -- exact powers of 10 +ddlogb1100 logb 1 -> 0 +ddlogb1101 logb 10 -> 1 +ddlogb1102 logb 100 -> 2 +ddlogb1103 logb 1000 -> 3 +ddlogb1104 logb 10000 -> 4 +ddlogb1105 logb 100000 -> 5 +ddlogb1106 logb 1000000 -> 6 +ddlogb1107 logb 10000000 -> 7 +ddlogb1108 logb 100000000 -> 8 +ddlogb1109 logb 1000000000 -> 9 +ddlogb1110 logb 10000000000 -> 10 +ddlogb1111 logb 100000000000 -> 11 +ddlogb1112 logb 1000000000000 -> 12 +ddlogb1113 logb 0.00000000001 -> -11 +ddlogb1114 logb 0.0000000001 -> -10 +ddlogb1115 logb 0.000000001 -> -9 +ddlogb1116 logb 0.00000001 -> -8 +ddlogb1117 logb 0.0000001 -> -7 +ddlogb1118 logb 0.000001 -> -6 +ddlogb1119 logb 0.00001 -> -5 +ddlogb1120 logb 0.0001 -> -4 +ddlogb1121 logb 0.001 -> -3 +ddlogb1122 logb 0.01 -> -2 +ddlogb1123 logb 0.1 -> -1 +ddlogb1124 logb 1E-99 -> -99 +ddlogb1125 logb 1E-100 -> -100 +ddlogb1127 logb 1E-299 -> -299 +ddlogb1126 logb 1E-383 -> -383 + +-- suggestions from Ilan Nehama +ddlogb1400 logb 10E-3 -> -2 +ddlogb1401 logb 10E-2 -> -1 +ddlogb1402 logb 100E-2 -> 0 +ddlogb1403 logb 1000E-2 -> 1 +ddlogb1404 logb 10000E-2 -> 2 +ddlogb1405 logb 10E-1 -> 0 +ddlogb1406 logb 100E-1 -> 1 +ddlogb1407 logb 1000E-1 -> 2 +ddlogb1408 logb 10000E-1 -> 3 +ddlogb1409 logb 10E0 -> 1 +ddlogb1410 logb 100E0 -> 2 +ddlogb1411 logb 1000E0 -> 3 +ddlogb1412 logb 10000E0 -> 4 +ddlogb1413 logb 10E1 -> 2 +ddlogb1414 logb 100E1 -> 3 +ddlogb1415 logb 1000E1 -> 4 +ddlogb1416 logb 10000E1 -> 5 +ddlogb1417 logb 10E2 -> 3 +ddlogb1418 logb 100E2 -> 4 +ddlogb1419 logb 1000E2 -> 5 +ddlogb1420 logb 10000E2 -> 6 + +-- special values +ddlogb820 logb Infinity -> Infinity +ddlogb821 logb 0 -> -Infinity Division_by_zero +ddlogb822 logb NaN -> NaN +ddlogb823 logb sNaN -> NaN Invalid_operation +-- propagating NaNs +ddlogb824 logb sNaN123 -> NaN123 Invalid_operation +ddlogb825 logb -sNaN321 -> -NaN321 Invalid_operation +ddlogb826 logb NaN456 -> NaN456 +ddlogb827 logb -NaN654 -> -NaN654 +ddlogb828 logb NaN1 -> NaN1 + +-- Null test +ddlogb900 logb # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/ddMax.decTest b/Lib/test/decimaltestdata/ddMax.decTest index 1ac63958b87..45ea9b4c933 100644 --- a/Lib/test/decimaltestdata/ddMax.decTest +++ b/Lib/test/decimaltestdata/ddMax.decTest @@ -1,322 +1,322 @@ ------------------------------------------------------------------------- --- ddMax.decTest -- decDouble maxnum -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmax001 max -2 -2 -> -2 -ddmax002 max -2 -1 -> -1 -ddmax003 max -2 0 -> 0 -ddmax004 max -2 1 -> 1 -ddmax005 max -2 2 -> 2 -ddmax006 max -1 -2 -> -1 -ddmax007 max -1 -1 -> -1 -ddmax008 max -1 0 -> 0 -ddmax009 max -1 1 -> 1 -ddmax010 max -1 2 -> 2 -ddmax011 max 0 -2 -> 0 -ddmax012 max 0 -1 -> 0 -ddmax013 max 0 0 -> 0 -ddmax014 max 0 1 -> 1 -ddmax015 max 0 2 -> 2 -ddmax016 max 1 -2 -> 1 -ddmax017 max 1 -1 -> 1 -ddmax018 max 1 0 -> 1 -ddmax019 max 1 1 -> 1 -ddmax020 max 1 2 -> 2 -ddmax021 max 2 -2 -> 2 -ddmax022 max 2 -1 -> 2 -ddmax023 max 2 0 -> 2 -ddmax025 max 2 1 -> 2 -ddmax026 max 2 2 -> 2 - --- extended zeros -ddmax030 max 0 0 -> 0 -ddmax031 max 0 -0 -> 0 -ddmax032 max 0 -0.0 -> 0 -ddmax033 max 0 0.0 -> 0 -ddmax034 max -0 0 -> 0 -- note: -0 = 0, but 0 chosen -ddmax035 max -0 -0 -> -0 -ddmax036 max -0 -0.0 -> -0.0 -ddmax037 max -0 0.0 -> 0.0 -ddmax038 max 0.0 0 -> 0 -ddmax039 max 0.0 -0 -> 0.0 -ddmax040 max 0.0 -0.0 -> 0.0 -ddmax041 max 0.0 0.0 -> 0.0 -ddmax042 max -0.0 0 -> 0 -ddmax043 max -0.0 -0 -> -0.0 -ddmax044 max -0.0 -0.0 -> -0.0 -ddmax045 max -0.0 0.0 -> 0.0 - -ddmax050 max -0E1 0E1 -> 0E+1 -ddmax051 max -0E2 0E2 -> 0E+2 -ddmax052 max -0E2 0E1 -> 0E+1 -ddmax053 max -0E1 0E2 -> 0E+2 -ddmax054 max 0E1 -0E1 -> 0E+1 -ddmax055 max 0E2 -0E2 -> 0E+2 -ddmax056 max 0E2 -0E1 -> 0E+2 -ddmax057 max 0E1 -0E2 -> 0E+1 - -ddmax058 max 0E1 0E1 -> 0E+1 -ddmax059 max 0E2 0E2 -> 0E+2 -ddmax060 max 0E2 0E1 -> 0E+2 -ddmax061 max 0E1 0E2 -> 0E+2 -ddmax062 max -0E1 -0E1 -> -0E+1 -ddmax063 max -0E2 -0E2 -> -0E+2 -ddmax064 max -0E2 -0E1 -> -0E+1 -ddmax065 max -0E1 -0E2 -> -0E+1 - --- Specials -ddmax090 max Inf -Inf -> Infinity -ddmax091 max Inf -1000 -> Infinity -ddmax092 max Inf -1 -> Infinity -ddmax093 max Inf -0 -> Infinity -ddmax094 max Inf 0 -> Infinity -ddmax095 max Inf 1 -> Infinity -ddmax096 max Inf 1000 -> Infinity -ddmax097 max Inf Inf -> Infinity -ddmax098 max -1000 Inf -> Infinity -ddmax099 max -Inf Inf -> Infinity -ddmax100 max -1 Inf -> Infinity -ddmax101 max -0 Inf -> Infinity -ddmax102 max 0 Inf -> Infinity -ddmax103 max 1 Inf -> Infinity -ddmax104 max 1000 Inf -> Infinity -ddmax105 max Inf Inf -> Infinity - -ddmax120 max -Inf -Inf -> -Infinity -ddmax121 max -Inf -1000 -> -1000 -ddmax122 max -Inf -1 -> -1 -ddmax123 max -Inf -0 -> -0 -ddmax124 max -Inf 0 -> 0 -ddmax125 max -Inf 1 -> 1 -ddmax126 max -Inf 1000 -> 1000 -ddmax127 max -Inf Inf -> Infinity -ddmax128 max -Inf -Inf -> -Infinity -ddmax129 max -1000 -Inf -> -1000 -ddmax130 max -1 -Inf -> -1 -ddmax131 max -0 -Inf -> -0 -ddmax132 max 0 -Inf -> 0 -ddmax133 max 1 -Inf -> 1 -ddmax134 max 1000 -Inf -> 1000 -ddmax135 max Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -ddmax141 max NaN -Inf -> -Infinity -ddmax142 max NaN -1000 -> -1000 -ddmax143 max NaN -1 -> -1 -ddmax144 max NaN -0 -> -0 -ddmax145 max NaN 0 -> 0 -ddmax146 max NaN 1 -> 1 -ddmax147 max NaN 1000 -> 1000 -ddmax148 max NaN Inf -> Infinity -ddmax149 max NaN NaN -> NaN -ddmax150 max -Inf NaN -> -Infinity -ddmax151 max -1000 NaN -> -1000 -ddmax152 max -1 NaN -> -1 -ddmax153 max -0 NaN -> -0 -ddmax154 max 0 NaN -> 0 -ddmax155 max 1 NaN -> 1 -ddmax156 max 1000 NaN -> 1000 -ddmax157 max Inf NaN -> Infinity - -ddmax161 max sNaN -Inf -> NaN Invalid_operation -ddmax162 max sNaN -1000 -> NaN Invalid_operation -ddmax163 max sNaN -1 -> NaN Invalid_operation -ddmax164 max sNaN -0 -> NaN Invalid_operation -ddmax165 max sNaN 0 -> NaN Invalid_operation -ddmax166 max sNaN 1 -> NaN Invalid_operation -ddmax167 max sNaN 1000 -> NaN Invalid_operation -ddmax168 max sNaN NaN -> NaN Invalid_operation -ddmax169 max sNaN sNaN -> NaN Invalid_operation -ddmax170 max NaN sNaN -> NaN Invalid_operation -ddmax171 max -Inf sNaN -> NaN Invalid_operation -ddmax172 max -1000 sNaN -> NaN Invalid_operation -ddmax173 max -1 sNaN -> NaN Invalid_operation -ddmax174 max -0 sNaN -> NaN Invalid_operation -ddmax175 max 0 sNaN -> NaN Invalid_operation -ddmax176 max 1 sNaN -> NaN Invalid_operation -ddmax177 max 1000 sNaN -> NaN Invalid_operation -ddmax178 max Inf sNaN -> NaN Invalid_operation -ddmax179 max NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmax181 max NaN9 -Inf -> -Infinity -ddmax182 max NaN8 9 -> 9 -ddmax183 max -NaN7 Inf -> Infinity - -ddmax184 max -NaN1 NaN11 -> -NaN1 -ddmax185 max NaN2 NaN12 -> NaN2 -ddmax186 max -NaN13 -NaN7 -> -NaN13 -ddmax187 max NaN14 -NaN5 -> NaN14 - -ddmax188 max -Inf NaN4 -> -Infinity -ddmax189 max -9 -NaN3 -> -9 -ddmax190 max Inf NaN2 -> Infinity - -ddmax191 max sNaN99 -Inf -> NaN99 Invalid_operation -ddmax192 max sNaN98 -1 -> NaN98 Invalid_operation -ddmax193 max -sNaN97 NaN -> -NaN97 Invalid_operation -ddmax194 max sNaN96 sNaN94 -> NaN96 Invalid_operation -ddmax195 max NaN95 sNaN93 -> NaN93 Invalid_operation -ddmax196 max -Inf sNaN92 -> NaN92 Invalid_operation -ddmax197 max 0 sNaN91 -> NaN91 Invalid_operation -ddmax198 max Inf -sNaN90 -> -NaN90 Invalid_operation -ddmax199 max NaN sNaN89 -> NaN89 Invalid_operation - --- old rounding checks -ddmax221 max 12345678000 1 -> 12345678000 -ddmax222 max 1 12345678000 -> 12345678000 -ddmax223 max 1234567800 1 -> 1234567800 -ddmax224 max 1 1234567800 -> 1234567800 -ddmax225 max 1234567890 1 -> 1234567890 -ddmax226 max 1 1234567890 -> 1234567890 -ddmax227 max 1234567891 1 -> 1234567891 -ddmax228 max 1 1234567891 -> 1234567891 -ddmax229 max 12345678901 1 -> 12345678901 -ddmax230 max 1 12345678901 -> 12345678901 -ddmax231 max 1234567896 1 -> 1234567896 -ddmax232 max 1 1234567896 -> 1234567896 -ddmax233 max -1234567891 1 -> 1 -ddmax234 max 1 -1234567891 -> 1 -ddmax235 max -12345678901 1 -> 1 -ddmax236 max 1 -12345678901 -> 1 -ddmax237 max -1234567896 1 -> 1 -ddmax238 max 1 -1234567896 -> 1 - --- from examples -ddmax280 max '3' '2' -> '3' -ddmax281 max '-10' '3' -> '3' -ddmax282 max '1.0' '1' -> '1' -ddmax283 max '1' '1.0' -> '1' -ddmax284 max '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -ddmax401 max Inf 1.1 -> Infinity -ddmax402 max 1.1 1 -> 1.1 -ddmax403 max 1 1.0 -> 1 -ddmax404 max 1.0 0.1 -> 1.0 -ddmax405 max 0.1 0.10 -> 0.1 -ddmax406 max 0.10 0.100 -> 0.10 -ddmax407 max 0.10 0 -> 0.10 -ddmax408 max 0 0.0 -> 0 -ddmax409 max 0.0 -0 -> 0.0 -ddmax410 max 0.0 -0.0 -> 0.0 -ddmax411 max 0.00 -0.0 -> 0.00 -ddmax412 max 0.0 -0.00 -> 0.0 -ddmax413 max 0 -0.0 -> 0 -ddmax414 max 0 -0 -> 0 -ddmax415 max -0.0 -0 -> -0.0 -ddmax416 max -0 -0.100 -> -0 -ddmax417 max -0.100 -0.10 -> -0.100 -ddmax418 max -0.10 -0.1 -> -0.10 -ddmax419 max -0.1 -1.0 -> -0.1 -ddmax420 max -1.0 -1 -> -1.0 -ddmax421 max -1 -1.1 -> -1 -ddmax423 max -1.1 -Inf -> -1.1 --- same with operands reversed -ddmax431 max 1.1 Inf -> Infinity -ddmax432 max 1 1.1 -> 1.1 -ddmax433 max 1.0 1 -> 1 -ddmax434 max 0.1 1.0 -> 1.0 -ddmax435 max 0.10 0.1 -> 0.1 -ddmax436 max 0.100 0.10 -> 0.10 -ddmax437 max 0 0.10 -> 0.10 -ddmax438 max 0.0 0 -> 0 -ddmax439 max -0 0.0 -> 0.0 -ddmax440 max -0.0 0.0 -> 0.0 -ddmax441 max -0.0 0.00 -> 0.00 -ddmax442 max -0.00 0.0 -> 0.0 -ddmax443 max -0.0 0 -> 0 -ddmax444 max -0 0 -> 0 -ddmax445 max -0 -0.0 -> -0.0 -ddmax446 max -0.100 -0 -> -0 -ddmax447 max -0.10 -0.100 -> -0.100 -ddmax448 max -0.1 -0.10 -> -0.10 -ddmax449 max -1.0 -0.1 -> -0.1 -ddmax450 max -1 -1.0 -> -1.0 -ddmax451 max -1.1 -1 -> -1 -ddmax453 max -Inf -1.1 -> -1.1 --- largies -ddmax460 max 1000 1E+3 -> 1E+3 -ddmax461 max 1E+3 1000 -> 1E+3 -ddmax462 max 1000 -1E+3 -> 1000 -ddmax463 max 1E+3 -1000 -> 1E+3 -ddmax464 max -1000 1E+3 -> 1E+3 -ddmax465 max -1E+3 1000 -> 1000 -ddmax466 max -1000 -1E+3 -> -1000 -ddmax467 max -1E+3 -1000 -> -1000 - --- misalignment traps for little-endian -ddmax471 max 1.0 0.1 -> 1.0 -ddmax472 max 0.1 1.0 -> 1.0 -ddmax473 max 10.0 0.1 -> 10.0 -ddmax474 max 0.1 10.0 -> 10.0 -ddmax475 max 100 1.0 -> 100 -ddmax476 max 1.0 100 -> 100 -ddmax477 max 1000 10.0 -> 1000 -ddmax478 max 10.0 1000 -> 1000 -ddmax479 max 10000 100.0 -> 10000 -ddmax480 max 100.0 10000 -> 10000 -ddmax481 max 100000 1000.0 -> 100000 -ddmax482 max 1000.0 100000 -> 100000 -ddmax483 max 1000000 10000.0 -> 1000000 -ddmax484 max 10000.0 1000000 -> 1000000 - --- subnormals -ddmax510 max 1.00E-383 0 -> 1.00E-383 -ddmax511 max 0.1E-383 0 -> 1E-384 Subnormal -ddmax512 max 0.10E-383 0 -> 1.0E-384 Subnormal -ddmax513 max 0.100E-383 0 -> 1.00E-384 Subnormal -ddmax514 max 0.01E-383 0 -> 1E-385 Subnormal -ddmax515 max 0.999E-383 0 -> 9.99E-384 Subnormal -ddmax516 max 0.099E-383 0 -> 9.9E-385 Subnormal -ddmax517 max 0.009E-383 0 -> 9E-386 Subnormal -ddmax518 max 0.001E-383 0 -> 1E-386 Subnormal -ddmax519 max 0.0009E-383 0 -> 9E-387 Subnormal -ddmax520 max 0.0001E-383 0 -> 1E-387 Subnormal - -ddmax530 max -1.00E-383 0 -> 0 -ddmax531 max -0.1E-383 0 -> 0 -ddmax532 max -0.10E-383 0 -> 0 -ddmax533 max -0.100E-383 0 -> 0 -ddmax534 max -0.01E-383 0 -> 0 -ddmax535 max -0.999E-383 0 -> 0 -ddmax536 max -0.099E-383 0 -> 0 -ddmax537 max -0.009E-383 0 -> 0 -ddmax538 max -0.001E-383 0 -> 0 -ddmax539 max -0.0009E-383 0 -> 0 -ddmax540 max -0.0001E-383 0 -> 0 - --- Null tests -ddmax900 max 10 # -> NaN Invalid_operation -ddmax901 max # 10 -> NaN Invalid_operation - - - +------------------------------------------------------------------------ +-- ddMax.decTest -- decDouble maxnum -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmax001 max -2 -2 -> -2 +ddmax002 max -2 -1 -> -1 +ddmax003 max -2 0 -> 0 +ddmax004 max -2 1 -> 1 +ddmax005 max -2 2 -> 2 +ddmax006 max -1 -2 -> -1 +ddmax007 max -1 -1 -> -1 +ddmax008 max -1 0 -> 0 +ddmax009 max -1 1 -> 1 +ddmax010 max -1 2 -> 2 +ddmax011 max 0 -2 -> 0 +ddmax012 max 0 -1 -> 0 +ddmax013 max 0 0 -> 0 +ddmax014 max 0 1 -> 1 +ddmax015 max 0 2 -> 2 +ddmax016 max 1 -2 -> 1 +ddmax017 max 1 -1 -> 1 +ddmax018 max 1 0 -> 1 +ddmax019 max 1 1 -> 1 +ddmax020 max 1 2 -> 2 +ddmax021 max 2 -2 -> 2 +ddmax022 max 2 -1 -> 2 +ddmax023 max 2 0 -> 2 +ddmax025 max 2 1 -> 2 +ddmax026 max 2 2 -> 2 + +-- extended zeros +ddmax030 max 0 0 -> 0 +ddmax031 max 0 -0 -> 0 +ddmax032 max 0 -0.0 -> 0 +ddmax033 max 0 0.0 -> 0 +ddmax034 max -0 0 -> 0 -- note: -0 = 0, but 0 chosen +ddmax035 max -0 -0 -> -0 +ddmax036 max -0 -0.0 -> -0.0 +ddmax037 max -0 0.0 -> 0.0 +ddmax038 max 0.0 0 -> 0 +ddmax039 max 0.0 -0 -> 0.0 +ddmax040 max 0.0 -0.0 -> 0.0 +ddmax041 max 0.0 0.0 -> 0.0 +ddmax042 max -0.0 0 -> 0 +ddmax043 max -0.0 -0 -> -0.0 +ddmax044 max -0.0 -0.0 -> -0.0 +ddmax045 max -0.0 0.0 -> 0.0 + +ddmax050 max -0E1 0E1 -> 0E+1 +ddmax051 max -0E2 0E2 -> 0E+2 +ddmax052 max -0E2 0E1 -> 0E+1 +ddmax053 max -0E1 0E2 -> 0E+2 +ddmax054 max 0E1 -0E1 -> 0E+1 +ddmax055 max 0E2 -0E2 -> 0E+2 +ddmax056 max 0E2 -0E1 -> 0E+2 +ddmax057 max 0E1 -0E2 -> 0E+1 + +ddmax058 max 0E1 0E1 -> 0E+1 +ddmax059 max 0E2 0E2 -> 0E+2 +ddmax060 max 0E2 0E1 -> 0E+2 +ddmax061 max 0E1 0E2 -> 0E+2 +ddmax062 max -0E1 -0E1 -> -0E+1 +ddmax063 max -0E2 -0E2 -> -0E+2 +ddmax064 max -0E2 -0E1 -> -0E+1 +ddmax065 max -0E1 -0E2 -> -0E+1 + +-- Specials +ddmax090 max Inf -Inf -> Infinity +ddmax091 max Inf -1000 -> Infinity +ddmax092 max Inf -1 -> Infinity +ddmax093 max Inf -0 -> Infinity +ddmax094 max Inf 0 -> Infinity +ddmax095 max Inf 1 -> Infinity +ddmax096 max Inf 1000 -> Infinity +ddmax097 max Inf Inf -> Infinity +ddmax098 max -1000 Inf -> Infinity +ddmax099 max -Inf Inf -> Infinity +ddmax100 max -1 Inf -> Infinity +ddmax101 max -0 Inf -> Infinity +ddmax102 max 0 Inf -> Infinity +ddmax103 max 1 Inf -> Infinity +ddmax104 max 1000 Inf -> Infinity +ddmax105 max Inf Inf -> Infinity + +ddmax120 max -Inf -Inf -> -Infinity +ddmax121 max -Inf -1000 -> -1000 +ddmax122 max -Inf -1 -> -1 +ddmax123 max -Inf -0 -> -0 +ddmax124 max -Inf 0 -> 0 +ddmax125 max -Inf 1 -> 1 +ddmax126 max -Inf 1000 -> 1000 +ddmax127 max -Inf Inf -> Infinity +ddmax128 max -Inf -Inf -> -Infinity +ddmax129 max -1000 -Inf -> -1000 +ddmax130 max -1 -Inf -> -1 +ddmax131 max -0 -Inf -> -0 +ddmax132 max 0 -Inf -> 0 +ddmax133 max 1 -Inf -> 1 +ddmax134 max 1000 -Inf -> 1000 +ddmax135 max Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +ddmax141 max NaN -Inf -> -Infinity +ddmax142 max NaN -1000 -> -1000 +ddmax143 max NaN -1 -> -1 +ddmax144 max NaN -0 -> -0 +ddmax145 max NaN 0 -> 0 +ddmax146 max NaN 1 -> 1 +ddmax147 max NaN 1000 -> 1000 +ddmax148 max NaN Inf -> Infinity +ddmax149 max NaN NaN -> NaN +ddmax150 max -Inf NaN -> -Infinity +ddmax151 max -1000 NaN -> -1000 +ddmax152 max -1 NaN -> -1 +ddmax153 max -0 NaN -> -0 +ddmax154 max 0 NaN -> 0 +ddmax155 max 1 NaN -> 1 +ddmax156 max 1000 NaN -> 1000 +ddmax157 max Inf NaN -> Infinity + +ddmax161 max sNaN -Inf -> NaN Invalid_operation +ddmax162 max sNaN -1000 -> NaN Invalid_operation +ddmax163 max sNaN -1 -> NaN Invalid_operation +ddmax164 max sNaN -0 -> NaN Invalid_operation +ddmax165 max sNaN 0 -> NaN Invalid_operation +ddmax166 max sNaN 1 -> NaN Invalid_operation +ddmax167 max sNaN 1000 -> NaN Invalid_operation +ddmax168 max sNaN NaN -> NaN Invalid_operation +ddmax169 max sNaN sNaN -> NaN Invalid_operation +ddmax170 max NaN sNaN -> NaN Invalid_operation +ddmax171 max -Inf sNaN -> NaN Invalid_operation +ddmax172 max -1000 sNaN -> NaN Invalid_operation +ddmax173 max -1 sNaN -> NaN Invalid_operation +ddmax174 max -0 sNaN -> NaN Invalid_operation +ddmax175 max 0 sNaN -> NaN Invalid_operation +ddmax176 max 1 sNaN -> NaN Invalid_operation +ddmax177 max 1000 sNaN -> NaN Invalid_operation +ddmax178 max Inf sNaN -> NaN Invalid_operation +ddmax179 max NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmax181 max NaN9 -Inf -> -Infinity +ddmax182 max NaN8 9 -> 9 +ddmax183 max -NaN7 Inf -> Infinity + +ddmax184 max -NaN1 NaN11 -> -NaN1 +ddmax185 max NaN2 NaN12 -> NaN2 +ddmax186 max -NaN13 -NaN7 -> -NaN13 +ddmax187 max NaN14 -NaN5 -> NaN14 + +ddmax188 max -Inf NaN4 -> -Infinity +ddmax189 max -9 -NaN3 -> -9 +ddmax190 max Inf NaN2 -> Infinity + +ddmax191 max sNaN99 -Inf -> NaN99 Invalid_operation +ddmax192 max sNaN98 -1 -> NaN98 Invalid_operation +ddmax193 max -sNaN97 NaN -> -NaN97 Invalid_operation +ddmax194 max sNaN96 sNaN94 -> NaN96 Invalid_operation +ddmax195 max NaN95 sNaN93 -> NaN93 Invalid_operation +ddmax196 max -Inf sNaN92 -> NaN92 Invalid_operation +ddmax197 max 0 sNaN91 -> NaN91 Invalid_operation +ddmax198 max Inf -sNaN90 -> -NaN90 Invalid_operation +ddmax199 max NaN sNaN89 -> NaN89 Invalid_operation + +-- old rounding checks +ddmax221 max 12345678000 1 -> 12345678000 +ddmax222 max 1 12345678000 -> 12345678000 +ddmax223 max 1234567800 1 -> 1234567800 +ddmax224 max 1 1234567800 -> 1234567800 +ddmax225 max 1234567890 1 -> 1234567890 +ddmax226 max 1 1234567890 -> 1234567890 +ddmax227 max 1234567891 1 -> 1234567891 +ddmax228 max 1 1234567891 -> 1234567891 +ddmax229 max 12345678901 1 -> 12345678901 +ddmax230 max 1 12345678901 -> 12345678901 +ddmax231 max 1234567896 1 -> 1234567896 +ddmax232 max 1 1234567896 -> 1234567896 +ddmax233 max -1234567891 1 -> 1 +ddmax234 max 1 -1234567891 -> 1 +ddmax235 max -12345678901 1 -> 1 +ddmax236 max 1 -12345678901 -> 1 +ddmax237 max -1234567896 1 -> 1 +ddmax238 max 1 -1234567896 -> 1 + +-- from examples +ddmax280 max '3' '2' -> '3' +ddmax281 max '-10' '3' -> '3' +ddmax282 max '1.0' '1' -> '1' +ddmax283 max '1' '1.0' -> '1' +ddmax284 max '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +ddmax401 max Inf 1.1 -> Infinity +ddmax402 max 1.1 1 -> 1.1 +ddmax403 max 1 1.0 -> 1 +ddmax404 max 1.0 0.1 -> 1.0 +ddmax405 max 0.1 0.10 -> 0.1 +ddmax406 max 0.10 0.100 -> 0.10 +ddmax407 max 0.10 0 -> 0.10 +ddmax408 max 0 0.0 -> 0 +ddmax409 max 0.0 -0 -> 0.0 +ddmax410 max 0.0 -0.0 -> 0.0 +ddmax411 max 0.00 -0.0 -> 0.00 +ddmax412 max 0.0 -0.00 -> 0.0 +ddmax413 max 0 -0.0 -> 0 +ddmax414 max 0 -0 -> 0 +ddmax415 max -0.0 -0 -> -0.0 +ddmax416 max -0 -0.100 -> -0 +ddmax417 max -0.100 -0.10 -> -0.100 +ddmax418 max -0.10 -0.1 -> -0.10 +ddmax419 max -0.1 -1.0 -> -0.1 +ddmax420 max -1.0 -1 -> -1.0 +ddmax421 max -1 -1.1 -> -1 +ddmax423 max -1.1 -Inf -> -1.1 +-- same with operands reversed +ddmax431 max 1.1 Inf -> Infinity +ddmax432 max 1 1.1 -> 1.1 +ddmax433 max 1.0 1 -> 1 +ddmax434 max 0.1 1.0 -> 1.0 +ddmax435 max 0.10 0.1 -> 0.1 +ddmax436 max 0.100 0.10 -> 0.10 +ddmax437 max 0 0.10 -> 0.10 +ddmax438 max 0.0 0 -> 0 +ddmax439 max -0 0.0 -> 0.0 +ddmax440 max -0.0 0.0 -> 0.0 +ddmax441 max -0.0 0.00 -> 0.00 +ddmax442 max -0.00 0.0 -> 0.0 +ddmax443 max -0.0 0 -> 0 +ddmax444 max -0 0 -> 0 +ddmax445 max -0 -0.0 -> -0.0 +ddmax446 max -0.100 -0 -> -0 +ddmax447 max -0.10 -0.100 -> -0.100 +ddmax448 max -0.1 -0.10 -> -0.10 +ddmax449 max -1.0 -0.1 -> -0.1 +ddmax450 max -1 -1.0 -> -1.0 +ddmax451 max -1.1 -1 -> -1 +ddmax453 max -Inf -1.1 -> -1.1 +-- largies +ddmax460 max 1000 1E+3 -> 1E+3 +ddmax461 max 1E+3 1000 -> 1E+3 +ddmax462 max 1000 -1E+3 -> 1000 +ddmax463 max 1E+3 -1000 -> 1E+3 +ddmax464 max -1000 1E+3 -> 1E+3 +ddmax465 max -1E+3 1000 -> 1000 +ddmax466 max -1000 -1E+3 -> -1000 +ddmax467 max -1E+3 -1000 -> -1000 + +-- misalignment traps for little-endian +ddmax471 max 1.0 0.1 -> 1.0 +ddmax472 max 0.1 1.0 -> 1.0 +ddmax473 max 10.0 0.1 -> 10.0 +ddmax474 max 0.1 10.0 -> 10.0 +ddmax475 max 100 1.0 -> 100 +ddmax476 max 1.0 100 -> 100 +ddmax477 max 1000 10.0 -> 1000 +ddmax478 max 10.0 1000 -> 1000 +ddmax479 max 10000 100.0 -> 10000 +ddmax480 max 100.0 10000 -> 10000 +ddmax481 max 100000 1000.0 -> 100000 +ddmax482 max 1000.0 100000 -> 100000 +ddmax483 max 1000000 10000.0 -> 1000000 +ddmax484 max 10000.0 1000000 -> 1000000 + +-- subnormals +ddmax510 max 1.00E-383 0 -> 1.00E-383 +ddmax511 max 0.1E-383 0 -> 1E-384 Subnormal +ddmax512 max 0.10E-383 0 -> 1.0E-384 Subnormal +ddmax513 max 0.100E-383 0 -> 1.00E-384 Subnormal +ddmax514 max 0.01E-383 0 -> 1E-385 Subnormal +ddmax515 max 0.999E-383 0 -> 9.99E-384 Subnormal +ddmax516 max 0.099E-383 0 -> 9.9E-385 Subnormal +ddmax517 max 0.009E-383 0 -> 9E-386 Subnormal +ddmax518 max 0.001E-383 0 -> 1E-386 Subnormal +ddmax519 max 0.0009E-383 0 -> 9E-387 Subnormal +ddmax520 max 0.0001E-383 0 -> 1E-387 Subnormal + +ddmax530 max -1.00E-383 0 -> 0 +ddmax531 max -0.1E-383 0 -> 0 +ddmax532 max -0.10E-383 0 -> 0 +ddmax533 max -0.100E-383 0 -> 0 +ddmax534 max -0.01E-383 0 -> 0 +ddmax535 max -0.999E-383 0 -> 0 +ddmax536 max -0.099E-383 0 -> 0 +ddmax537 max -0.009E-383 0 -> 0 +ddmax538 max -0.001E-383 0 -> 0 +ddmax539 max -0.0009E-383 0 -> 0 +ddmax540 max -0.0001E-383 0 -> 0 + +-- Null tests +ddmax900 max 10 # -> NaN Invalid_operation +ddmax901 max # 10 -> NaN Invalid_operation + + + diff --git a/Lib/test/decimaltestdata/ddMaxMag.decTest b/Lib/test/decimaltestdata/ddMaxMag.decTest index 19c3e9085c2..ec2b8305411 100644 --- a/Lib/test/decimaltestdata/ddMaxMag.decTest +++ b/Lib/test/decimaltestdata/ddMaxMag.decTest @@ -1,304 +1,304 @@ ------------------------------------------------------------------------- --- ddMaxMag.decTest -- decDouble maxnummag -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmxg001 maxmag -2 -2 -> -2 -ddmxg002 maxmag -2 -1 -> -2 -ddmxg003 maxmag -2 0 -> -2 -ddmxg004 maxmag -2 1 -> -2 -ddmxg005 maxmag -2 2 -> 2 -ddmxg006 maxmag -1 -2 -> -2 -ddmxg007 maxmag -1 -1 -> -1 -ddmxg008 maxmag -1 0 -> -1 -ddmxg009 maxmag -1 1 -> 1 -ddmxg010 maxmag -1 2 -> 2 -ddmxg011 maxmag 0 -2 -> -2 -ddmxg012 maxmag 0 -1 -> -1 -ddmxg013 maxmag 0 0 -> 0 -ddmxg014 maxmag 0 1 -> 1 -ddmxg015 maxmag 0 2 -> 2 -ddmxg016 maxmag 1 -2 -> -2 -ddmxg017 maxmag 1 -1 -> 1 -ddmxg018 maxmag 1 0 -> 1 -ddmxg019 maxmag 1 1 -> 1 -ddmxg020 maxmag 1 2 -> 2 -ddmxg021 maxmag 2 -2 -> 2 -ddmxg022 maxmag 2 -1 -> 2 -ddmxg023 maxmag 2 0 -> 2 -ddmxg025 maxmag 2 1 -> 2 -ddmxg026 maxmag 2 2 -> 2 - --- extended zeros -ddmxg030 maxmag 0 0 -> 0 -ddmxg031 maxmag 0 -0 -> 0 -ddmxg032 maxmag 0 -0.0 -> 0 -ddmxg033 maxmag 0 0.0 -> 0 -ddmxg034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen -ddmxg035 maxmag -0 -0 -> -0 -ddmxg036 maxmag -0 -0.0 -> -0.0 -ddmxg037 maxmag -0 0.0 -> 0.0 -ddmxg038 maxmag 0.0 0 -> 0 -ddmxg039 maxmag 0.0 -0 -> 0.0 -ddmxg040 maxmag 0.0 -0.0 -> 0.0 -ddmxg041 maxmag 0.0 0.0 -> 0.0 -ddmxg042 maxmag -0.0 0 -> 0 -ddmxg043 maxmag -0.0 -0 -> -0.0 -ddmxg044 maxmag -0.0 -0.0 -> -0.0 -ddmxg045 maxmag -0.0 0.0 -> 0.0 - -ddmxg050 maxmag -0E1 0E1 -> 0E+1 -ddmxg051 maxmag -0E2 0E2 -> 0E+2 -ddmxg052 maxmag -0E2 0E1 -> 0E+1 -ddmxg053 maxmag -0E1 0E2 -> 0E+2 -ddmxg054 maxmag 0E1 -0E1 -> 0E+1 -ddmxg055 maxmag 0E2 -0E2 -> 0E+2 -ddmxg056 maxmag 0E2 -0E1 -> 0E+2 -ddmxg057 maxmag 0E1 -0E2 -> 0E+1 - -ddmxg058 maxmag 0E1 0E1 -> 0E+1 -ddmxg059 maxmag 0E2 0E2 -> 0E+2 -ddmxg060 maxmag 0E2 0E1 -> 0E+2 -ddmxg061 maxmag 0E1 0E2 -> 0E+2 -ddmxg062 maxmag -0E1 -0E1 -> -0E+1 -ddmxg063 maxmag -0E2 -0E2 -> -0E+2 -ddmxg064 maxmag -0E2 -0E1 -> -0E+1 -ddmxg065 maxmag -0E1 -0E2 -> -0E+1 - --- Specials -ddmxg090 maxmag Inf -Inf -> Infinity -ddmxg091 maxmag Inf -1000 -> Infinity -ddmxg092 maxmag Inf -1 -> Infinity -ddmxg093 maxmag Inf -0 -> Infinity -ddmxg094 maxmag Inf 0 -> Infinity -ddmxg095 maxmag Inf 1 -> Infinity -ddmxg096 maxmag Inf 1000 -> Infinity -ddmxg097 maxmag Inf Inf -> Infinity -ddmxg098 maxmag -1000 Inf -> Infinity -ddmxg099 maxmag -Inf Inf -> Infinity -ddmxg100 maxmag -1 Inf -> Infinity -ddmxg101 maxmag -0 Inf -> Infinity -ddmxg102 maxmag 0 Inf -> Infinity -ddmxg103 maxmag 1 Inf -> Infinity -ddmxg104 maxmag 1000 Inf -> Infinity -ddmxg105 maxmag Inf Inf -> Infinity - -ddmxg120 maxmag -Inf -Inf -> -Infinity -ddmxg121 maxmag -Inf -1000 -> -Infinity -ddmxg122 maxmag -Inf -1 -> -Infinity -ddmxg123 maxmag -Inf -0 -> -Infinity -ddmxg124 maxmag -Inf 0 -> -Infinity -ddmxg125 maxmag -Inf 1 -> -Infinity -ddmxg126 maxmag -Inf 1000 -> -Infinity -ddmxg127 maxmag -Inf Inf -> Infinity -ddmxg128 maxmag -Inf -Inf -> -Infinity -ddmxg129 maxmag -1000 -Inf -> -Infinity -ddmxg130 maxmag -1 -Inf -> -Infinity -ddmxg131 maxmag -0 -Inf -> -Infinity -ddmxg132 maxmag 0 -Inf -> -Infinity -ddmxg133 maxmag 1 -Inf -> -Infinity -ddmxg134 maxmag 1000 -Inf -> -Infinity -ddmxg135 maxmag Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -ddmxg141 maxmag NaN -Inf -> -Infinity -ddmxg142 maxmag NaN -1000 -> -1000 -ddmxg143 maxmag NaN -1 -> -1 -ddmxg144 maxmag NaN -0 -> -0 -ddmxg145 maxmag NaN 0 -> 0 -ddmxg146 maxmag NaN 1 -> 1 -ddmxg147 maxmag NaN 1000 -> 1000 -ddmxg148 maxmag NaN Inf -> Infinity -ddmxg149 maxmag NaN NaN -> NaN -ddmxg150 maxmag -Inf NaN -> -Infinity -ddmxg151 maxmag -1000 NaN -> -1000 -ddmxg152 maxmag -1 NaN -> -1 -ddmxg153 maxmag -0 NaN -> -0 -ddmxg154 maxmag 0 NaN -> 0 -ddmxg155 maxmag 1 NaN -> 1 -ddmxg156 maxmag 1000 NaN -> 1000 -ddmxg157 maxmag Inf NaN -> Infinity - -ddmxg161 maxmag sNaN -Inf -> NaN Invalid_operation -ddmxg162 maxmag sNaN -1000 -> NaN Invalid_operation -ddmxg163 maxmag sNaN -1 -> NaN Invalid_operation -ddmxg164 maxmag sNaN -0 -> NaN Invalid_operation -ddmxg165 maxmag sNaN 0 -> NaN Invalid_operation -ddmxg166 maxmag sNaN 1 -> NaN Invalid_operation -ddmxg167 maxmag sNaN 1000 -> NaN Invalid_operation -ddmxg168 maxmag sNaN NaN -> NaN Invalid_operation -ddmxg169 maxmag sNaN sNaN -> NaN Invalid_operation -ddmxg170 maxmag NaN sNaN -> NaN Invalid_operation -ddmxg171 maxmag -Inf sNaN -> NaN Invalid_operation -ddmxg172 maxmag -1000 sNaN -> NaN Invalid_operation -ddmxg173 maxmag -1 sNaN -> NaN Invalid_operation -ddmxg174 maxmag -0 sNaN -> NaN Invalid_operation -ddmxg175 maxmag 0 sNaN -> NaN Invalid_operation -ddmxg176 maxmag 1 sNaN -> NaN Invalid_operation -ddmxg177 maxmag 1000 sNaN -> NaN Invalid_operation -ddmxg178 maxmag Inf sNaN -> NaN Invalid_operation -ddmxg179 maxmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmxg181 maxmag NaN9 -Inf -> -Infinity -ddmxg182 maxmag NaN8 9 -> 9 -ddmxg183 maxmag -NaN7 Inf -> Infinity - -ddmxg184 maxmag -NaN1 NaN11 -> -NaN1 -ddmxg185 maxmag NaN2 NaN12 -> NaN2 -ddmxg186 maxmag -NaN13 -NaN7 -> -NaN13 -ddmxg187 maxmag NaN14 -NaN5 -> NaN14 - -ddmxg188 maxmag -Inf NaN4 -> -Infinity -ddmxg189 maxmag -9 -NaN3 -> -9 -ddmxg190 maxmag Inf NaN2 -> Infinity - -ddmxg191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation -ddmxg192 maxmag sNaN98 -1 -> NaN98 Invalid_operation -ddmxg193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation -ddmxg194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation -ddmxg195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation -ddmxg196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation -ddmxg197 maxmag 0 sNaN91 -> NaN91 Invalid_operation -ddmxg198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation -ddmxg199 maxmag NaN sNaN89 -> NaN89 Invalid_operation - --- old rounding checks -ddmxg221 maxmag 12345678000 1 -> 12345678000 -ddmxg222 maxmag 1 12345678000 -> 12345678000 -ddmxg223 maxmag 1234567800 1 -> 1234567800 -ddmxg224 maxmag 1 1234567800 -> 1234567800 -ddmxg225 maxmag 1234567890 1 -> 1234567890 -ddmxg226 maxmag 1 1234567890 -> 1234567890 -ddmxg227 maxmag 1234567891 1 -> 1234567891 -ddmxg228 maxmag 1 1234567891 -> 1234567891 -ddmxg229 maxmag 12345678901 1 -> 12345678901 -ddmxg230 maxmag 1 12345678901 -> 12345678901 -ddmxg231 maxmag 1234567896 1 -> 1234567896 -ddmxg232 maxmag 1 1234567896 -> 1234567896 -ddmxg233 maxmag -1234567891 1 -> -1234567891 -ddmxg234 maxmag 1 -1234567891 -> -1234567891 -ddmxg235 maxmag -12345678901 1 -> -12345678901 -ddmxg236 maxmag 1 -12345678901 -> -12345678901 -ddmxg237 maxmag -1234567896 1 -> -1234567896 -ddmxg238 maxmag 1 -1234567896 -> -1234567896 - --- from examples -ddmxg280 maxmag '3' '2' -> '3' -ddmxg281 maxmag '-10' '3' -> '-10' -ddmxg282 maxmag '1.0' '1' -> '1' -ddmxg283 maxmag '1' '1.0' -> '1' -ddmxg284 maxmag '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -ddmxg401 maxmag Inf 1.1 -> Infinity -ddmxg402 maxmag 1.1 1 -> 1.1 -ddmxg403 maxmag 1 1.0 -> 1 -ddmxg404 maxmag 1.0 0.1 -> 1.0 -ddmxg405 maxmag 0.1 0.10 -> 0.1 -ddmxg406 maxmag 0.10 0.100 -> 0.10 -ddmxg407 maxmag 0.10 0 -> 0.10 -ddmxg408 maxmag 0 0.0 -> 0 -ddmxg409 maxmag 0.0 -0 -> 0.0 -ddmxg410 maxmag 0.0 -0.0 -> 0.0 -ddmxg411 maxmag 0.00 -0.0 -> 0.00 -ddmxg412 maxmag 0.0 -0.00 -> 0.0 -ddmxg413 maxmag 0 -0.0 -> 0 -ddmxg414 maxmag 0 -0 -> 0 -ddmxg415 maxmag -0.0 -0 -> -0.0 -ddmxg416 maxmag -0 -0.100 -> -0.100 -ddmxg417 maxmag -0.100 -0.10 -> -0.100 -ddmxg418 maxmag -0.10 -0.1 -> -0.10 -ddmxg419 maxmag -0.1 -1.0 -> -1.0 -ddmxg420 maxmag -1.0 -1 -> -1.0 -ddmxg421 maxmag -1 -1.1 -> -1.1 -ddmxg423 maxmag -1.1 -Inf -> -Infinity --- same with operands reversed -ddmxg431 maxmag 1.1 Inf -> Infinity -ddmxg432 maxmag 1 1.1 -> 1.1 -ddmxg433 maxmag 1.0 1 -> 1 -ddmxg434 maxmag 0.1 1.0 -> 1.0 -ddmxg435 maxmag 0.10 0.1 -> 0.1 -ddmxg436 maxmag 0.100 0.10 -> 0.10 -ddmxg437 maxmag 0 0.10 -> 0.10 -ddmxg438 maxmag 0.0 0 -> 0 -ddmxg439 maxmag -0 0.0 -> 0.0 -ddmxg440 maxmag -0.0 0.0 -> 0.0 -ddmxg441 maxmag -0.0 0.00 -> 0.00 -ddmxg442 maxmag -0.00 0.0 -> 0.0 -ddmxg443 maxmag -0.0 0 -> 0 -ddmxg444 maxmag -0 0 -> 0 -ddmxg445 maxmag -0 -0.0 -> -0.0 -ddmxg446 maxmag -0.100 -0 -> -0.100 -ddmxg447 maxmag -0.10 -0.100 -> -0.100 -ddmxg448 maxmag -0.1 -0.10 -> -0.10 -ddmxg449 maxmag -1.0 -0.1 -> -1.0 -ddmxg450 maxmag -1 -1.0 -> -1.0 -ddmxg451 maxmag -1.1 -1 -> -1.1 -ddmxg453 maxmag -Inf -1.1 -> -Infinity --- largies -ddmxg460 maxmag 1000 1E+3 -> 1E+3 -ddmxg461 maxmag 1E+3 1000 -> 1E+3 -ddmxg462 maxmag 1000 -1E+3 -> 1000 -ddmxg463 maxmag 1E+3 -1000 -> 1E+3 -ddmxg464 maxmag -1000 1E+3 -> 1E+3 -ddmxg465 maxmag -1E+3 1000 -> 1000 -ddmxg466 maxmag -1000 -1E+3 -> -1000 -ddmxg467 maxmag -1E+3 -1000 -> -1000 - --- subnormals -ddmxg510 maxmag 1.00E-383 0 -> 1.00E-383 -ddmxg511 maxmag 0.1E-383 0 -> 1E-384 Subnormal -ddmxg512 maxmag 0.10E-383 0 -> 1.0E-384 Subnormal -ddmxg513 maxmag 0.100E-383 0 -> 1.00E-384 Subnormal -ddmxg514 maxmag 0.01E-383 0 -> 1E-385 Subnormal -ddmxg515 maxmag 0.999E-383 0 -> 9.99E-384 Subnormal -ddmxg516 maxmag 0.099E-383 0 -> 9.9E-385 Subnormal -ddmxg517 maxmag 0.009E-383 0 -> 9E-386 Subnormal -ddmxg518 maxmag 0.001E-383 0 -> 1E-386 Subnormal -ddmxg519 maxmag 0.0009E-383 0 -> 9E-387 Subnormal -ddmxg520 maxmag 0.0001E-383 0 -> 1E-387 Subnormal - -ddmxg530 maxmag -1.00E-383 0 -> -1.00E-383 -ddmxg531 maxmag -0.1E-383 0 -> -1E-384 Subnormal -ddmxg532 maxmag -0.10E-383 0 -> -1.0E-384 Subnormal -ddmxg533 maxmag -0.100E-383 0 -> -1.00E-384 Subnormal -ddmxg534 maxmag -0.01E-383 0 -> -1E-385 Subnormal -ddmxg535 maxmag -0.999E-383 0 -> -9.99E-384 Subnormal -ddmxg536 maxmag -0.099E-383 0 -> -9.9E-385 Subnormal -ddmxg537 maxmag -0.009E-383 0 -> -9E-386 Subnormal -ddmxg538 maxmag -0.001E-383 0 -> -1E-386 Subnormal -ddmxg539 maxmag -0.0009E-383 0 -> -9E-387 Subnormal -ddmxg540 maxmag -0.0001E-383 0 -> -1E-387 Subnormal - --- Null tests -ddmxg900 maxmag 10 # -> NaN Invalid_operation -ddmxg901 maxmag # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddMaxMag.decTest -- decDouble maxnummag -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmxg001 maxmag -2 -2 -> -2 +ddmxg002 maxmag -2 -1 -> -2 +ddmxg003 maxmag -2 0 -> -2 +ddmxg004 maxmag -2 1 -> -2 +ddmxg005 maxmag -2 2 -> 2 +ddmxg006 maxmag -1 -2 -> -2 +ddmxg007 maxmag -1 -1 -> -1 +ddmxg008 maxmag -1 0 -> -1 +ddmxg009 maxmag -1 1 -> 1 +ddmxg010 maxmag -1 2 -> 2 +ddmxg011 maxmag 0 -2 -> -2 +ddmxg012 maxmag 0 -1 -> -1 +ddmxg013 maxmag 0 0 -> 0 +ddmxg014 maxmag 0 1 -> 1 +ddmxg015 maxmag 0 2 -> 2 +ddmxg016 maxmag 1 -2 -> -2 +ddmxg017 maxmag 1 -1 -> 1 +ddmxg018 maxmag 1 0 -> 1 +ddmxg019 maxmag 1 1 -> 1 +ddmxg020 maxmag 1 2 -> 2 +ddmxg021 maxmag 2 -2 -> 2 +ddmxg022 maxmag 2 -1 -> 2 +ddmxg023 maxmag 2 0 -> 2 +ddmxg025 maxmag 2 1 -> 2 +ddmxg026 maxmag 2 2 -> 2 + +-- extended zeros +ddmxg030 maxmag 0 0 -> 0 +ddmxg031 maxmag 0 -0 -> 0 +ddmxg032 maxmag 0 -0.0 -> 0 +ddmxg033 maxmag 0 0.0 -> 0 +ddmxg034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen +ddmxg035 maxmag -0 -0 -> -0 +ddmxg036 maxmag -0 -0.0 -> -0.0 +ddmxg037 maxmag -0 0.0 -> 0.0 +ddmxg038 maxmag 0.0 0 -> 0 +ddmxg039 maxmag 0.0 -0 -> 0.0 +ddmxg040 maxmag 0.0 -0.0 -> 0.0 +ddmxg041 maxmag 0.0 0.0 -> 0.0 +ddmxg042 maxmag -0.0 0 -> 0 +ddmxg043 maxmag -0.0 -0 -> -0.0 +ddmxg044 maxmag -0.0 -0.0 -> -0.0 +ddmxg045 maxmag -0.0 0.0 -> 0.0 + +ddmxg050 maxmag -0E1 0E1 -> 0E+1 +ddmxg051 maxmag -0E2 0E2 -> 0E+2 +ddmxg052 maxmag -0E2 0E1 -> 0E+1 +ddmxg053 maxmag -0E1 0E2 -> 0E+2 +ddmxg054 maxmag 0E1 -0E1 -> 0E+1 +ddmxg055 maxmag 0E2 -0E2 -> 0E+2 +ddmxg056 maxmag 0E2 -0E1 -> 0E+2 +ddmxg057 maxmag 0E1 -0E2 -> 0E+1 + +ddmxg058 maxmag 0E1 0E1 -> 0E+1 +ddmxg059 maxmag 0E2 0E2 -> 0E+2 +ddmxg060 maxmag 0E2 0E1 -> 0E+2 +ddmxg061 maxmag 0E1 0E2 -> 0E+2 +ddmxg062 maxmag -0E1 -0E1 -> -0E+1 +ddmxg063 maxmag -0E2 -0E2 -> -0E+2 +ddmxg064 maxmag -0E2 -0E1 -> -0E+1 +ddmxg065 maxmag -0E1 -0E2 -> -0E+1 + +-- Specials +ddmxg090 maxmag Inf -Inf -> Infinity +ddmxg091 maxmag Inf -1000 -> Infinity +ddmxg092 maxmag Inf -1 -> Infinity +ddmxg093 maxmag Inf -0 -> Infinity +ddmxg094 maxmag Inf 0 -> Infinity +ddmxg095 maxmag Inf 1 -> Infinity +ddmxg096 maxmag Inf 1000 -> Infinity +ddmxg097 maxmag Inf Inf -> Infinity +ddmxg098 maxmag -1000 Inf -> Infinity +ddmxg099 maxmag -Inf Inf -> Infinity +ddmxg100 maxmag -1 Inf -> Infinity +ddmxg101 maxmag -0 Inf -> Infinity +ddmxg102 maxmag 0 Inf -> Infinity +ddmxg103 maxmag 1 Inf -> Infinity +ddmxg104 maxmag 1000 Inf -> Infinity +ddmxg105 maxmag Inf Inf -> Infinity + +ddmxg120 maxmag -Inf -Inf -> -Infinity +ddmxg121 maxmag -Inf -1000 -> -Infinity +ddmxg122 maxmag -Inf -1 -> -Infinity +ddmxg123 maxmag -Inf -0 -> -Infinity +ddmxg124 maxmag -Inf 0 -> -Infinity +ddmxg125 maxmag -Inf 1 -> -Infinity +ddmxg126 maxmag -Inf 1000 -> -Infinity +ddmxg127 maxmag -Inf Inf -> Infinity +ddmxg128 maxmag -Inf -Inf -> -Infinity +ddmxg129 maxmag -1000 -Inf -> -Infinity +ddmxg130 maxmag -1 -Inf -> -Infinity +ddmxg131 maxmag -0 -Inf -> -Infinity +ddmxg132 maxmag 0 -Inf -> -Infinity +ddmxg133 maxmag 1 -Inf -> -Infinity +ddmxg134 maxmag 1000 -Inf -> -Infinity +ddmxg135 maxmag Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +ddmxg141 maxmag NaN -Inf -> -Infinity +ddmxg142 maxmag NaN -1000 -> -1000 +ddmxg143 maxmag NaN -1 -> -1 +ddmxg144 maxmag NaN -0 -> -0 +ddmxg145 maxmag NaN 0 -> 0 +ddmxg146 maxmag NaN 1 -> 1 +ddmxg147 maxmag NaN 1000 -> 1000 +ddmxg148 maxmag NaN Inf -> Infinity +ddmxg149 maxmag NaN NaN -> NaN +ddmxg150 maxmag -Inf NaN -> -Infinity +ddmxg151 maxmag -1000 NaN -> -1000 +ddmxg152 maxmag -1 NaN -> -1 +ddmxg153 maxmag -0 NaN -> -0 +ddmxg154 maxmag 0 NaN -> 0 +ddmxg155 maxmag 1 NaN -> 1 +ddmxg156 maxmag 1000 NaN -> 1000 +ddmxg157 maxmag Inf NaN -> Infinity + +ddmxg161 maxmag sNaN -Inf -> NaN Invalid_operation +ddmxg162 maxmag sNaN -1000 -> NaN Invalid_operation +ddmxg163 maxmag sNaN -1 -> NaN Invalid_operation +ddmxg164 maxmag sNaN -0 -> NaN Invalid_operation +ddmxg165 maxmag sNaN 0 -> NaN Invalid_operation +ddmxg166 maxmag sNaN 1 -> NaN Invalid_operation +ddmxg167 maxmag sNaN 1000 -> NaN Invalid_operation +ddmxg168 maxmag sNaN NaN -> NaN Invalid_operation +ddmxg169 maxmag sNaN sNaN -> NaN Invalid_operation +ddmxg170 maxmag NaN sNaN -> NaN Invalid_operation +ddmxg171 maxmag -Inf sNaN -> NaN Invalid_operation +ddmxg172 maxmag -1000 sNaN -> NaN Invalid_operation +ddmxg173 maxmag -1 sNaN -> NaN Invalid_operation +ddmxg174 maxmag -0 sNaN -> NaN Invalid_operation +ddmxg175 maxmag 0 sNaN -> NaN Invalid_operation +ddmxg176 maxmag 1 sNaN -> NaN Invalid_operation +ddmxg177 maxmag 1000 sNaN -> NaN Invalid_operation +ddmxg178 maxmag Inf sNaN -> NaN Invalid_operation +ddmxg179 maxmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmxg181 maxmag NaN9 -Inf -> -Infinity +ddmxg182 maxmag NaN8 9 -> 9 +ddmxg183 maxmag -NaN7 Inf -> Infinity + +ddmxg184 maxmag -NaN1 NaN11 -> -NaN1 +ddmxg185 maxmag NaN2 NaN12 -> NaN2 +ddmxg186 maxmag -NaN13 -NaN7 -> -NaN13 +ddmxg187 maxmag NaN14 -NaN5 -> NaN14 + +ddmxg188 maxmag -Inf NaN4 -> -Infinity +ddmxg189 maxmag -9 -NaN3 -> -9 +ddmxg190 maxmag Inf NaN2 -> Infinity + +ddmxg191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation +ddmxg192 maxmag sNaN98 -1 -> NaN98 Invalid_operation +ddmxg193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation +ddmxg194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation +ddmxg195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation +ddmxg196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation +ddmxg197 maxmag 0 sNaN91 -> NaN91 Invalid_operation +ddmxg198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation +ddmxg199 maxmag NaN sNaN89 -> NaN89 Invalid_operation + +-- old rounding checks +ddmxg221 maxmag 12345678000 1 -> 12345678000 +ddmxg222 maxmag 1 12345678000 -> 12345678000 +ddmxg223 maxmag 1234567800 1 -> 1234567800 +ddmxg224 maxmag 1 1234567800 -> 1234567800 +ddmxg225 maxmag 1234567890 1 -> 1234567890 +ddmxg226 maxmag 1 1234567890 -> 1234567890 +ddmxg227 maxmag 1234567891 1 -> 1234567891 +ddmxg228 maxmag 1 1234567891 -> 1234567891 +ddmxg229 maxmag 12345678901 1 -> 12345678901 +ddmxg230 maxmag 1 12345678901 -> 12345678901 +ddmxg231 maxmag 1234567896 1 -> 1234567896 +ddmxg232 maxmag 1 1234567896 -> 1234567896 +ddmxg233 maxmag -1234567891 1 -> -1234567891 +ddmxg234 maxmag 1 -1234567891 -> -1234567891 +ddmxg235 maxmag -12345678901 1 -> -12345678901 +ddmxg236 maxmag 1 -12345678901 -> -12345678901 +ddmxg237 maxmag -1234567896 1 -> -1234567896 +ddmxg238 maxmag 1 -1234567896 -> -1234567896 + +-- from examples +ddmxg280 maxmag '3' '2' -> '3' +ddmxg281 maxmag '-10' '3' -> '-10' +ddmxg282 maxmag '1.0' '1' -> '1' +ddmxg283 maxmag '1' '1.0' -> '1' +ddmxg284 maxmag '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +ddmxg401 maxmag Inf 1.1 -> Infinity +ddmxg402 maxmag 1.1 1 -> 1.1 +ddmxg403 maxmag 1 1.0 -> 1 +ddmxg404 maxmag 1.0 0.1 -> 1.0 +ddmxg405 maxmag 0.1 0.10 -> 0.1 +ddmxg406 maxmag 0.10 0.100 -> 0.10 +ddmxg407 maxmag 0.10 0 -> 0.10 +ddmxg408 maxmag 0 0.0 -> 0 +ddmxg409 maxmag 0.0 -0 -> 0.0 +ddmxg410 maxmag 0.0 -0.0 -> 0.0 +ddmxg411 maxmag 0.00 -0.0 -> 0.00 +ddmxg412 maxmag 0.0 -0.00 -> 0.0 +ddmxg413 maxmag 0 -0.0 -> 0 +ddmxg414 maxmag 0 -0 -> 0 +ddmxg415 maxmag -0.0 -0 -> -0.0 +ddmxg416 maxmag -0 -0.100 -> -0.100 +ddmxg417 maxmag -0.100 -0.10 -> -0.100 +ddmxg418 maxmag -0.10 -0.1 -> -0.10 +ddmxg419 maxmag -0.1 -1.0 -> -1.0 +ddmxg420 maxmag -1.0 -1 -> -1.0 +ddmxg421 maxmag -1 -1.1 -> -1.1 +ddmxg423 maxmag -1.1 -Inf -> -Infinity +-- same with operands reversed +ddmxg431 maxmag 1.1 Inf -> Infinity +ddmxg432 maxmag 1 1.1 -> 1.1 +ddmxg433 maxmag 1.0 1 -> 1 +ddmxg434 maxmag 0.1 1.0 -> 1.0 +ddmxg435 maxmag 0.10 0.1 -> 0.1 +ddmxg436 maxmag 0.100 0.10 -> 0.10 +ddmxg437 maxmag 0 0.10 -> 0.10 +ddmxg438 maxmag 0.0 0 -> 0 +ddmxg439 maxmag -0 0.0 -> 0.0 +ddmxg440 maxmag -0.0 0.0 -> 0.0 +ddmxg441 maxmag -0.0 0.00 -> 0.00 +ddmxg442 maxmag -0.00 0.0 -> 0.0 +ddmxg443 maxmag -0.0 0 -> 0 +ddmxg444 maxmag -0 0 -> 0 +ddmxg445 maxmag -0 -0.0 -> -0.0 +ddmxg446 maxmag -0.100 -0 -> -0.100 +ddmxg447 maxmag -0.10 -0.100 -> -0.100 +ddmxg448 maxmag -0.1 -0.10 -> -0.10 +ddmxg449 maxmag -1.0 -0.1 -> -1.0 +ddmxg450 maxmag -1 -1.0 -> -1.0 +ddmxg451 maxmag -1.1 -1 -> -1.1 +ddmxg453 maxmag -Inf -1.1 -> -Infinity +-- largies +ddmxg460 maxmag 1000 1E+3 -> 1E+3 +ddmxg461 maxmag 1E+3 1000 -> 1E+3 +ddmxg462 maxmag 1000 -1E+3 -> 1000 +ddmxg463 maxmag 1E+3 -1000 -> 1E+3 +ddmxg464 maxmag -1000 1E+3 -> 1E+3 +ddmxg465 maxmag -1E+3 1000 -> 1000 +ddmxg466 maxmag -1000 -1E+3 -> -1000 +ddmxg467 maxmag -1E+3 -1000 -> -1000 + +-- subnormals +ddmxg510 maxmag 1.00E-383 0 -> 1.00E-383 +ddmxg511 maxmag 0.1E-383 0 -> 1E-384 Subnormal +ddmxg512 maxmag 0.10E-383 0 -> 1.0E-384 Subnormal +ddmxg513 maxmag 0.100E-383 0 -> 1.00E-384 Subnormal +ddmxg514 maxmag 0.01E-383 0 -> 1E-385 Subnormal +ddmxg515 maxmag 0.999E-383 0 -> 9.99E-384 Subnormal +ddmxg516 maxmag 0.099E-383 0 -> 9.9E-385 Subnormal +ddmxg517 maxmag 0.009E-383 0 -> 9E-386 Subnormal +ddmxg518 maxmag 0.001E-383 0 -> 1E-386 Subnormal +ddmxg519 maxmag 0.0009E-383 0 -> 9E-387 Subnormal +ddmxg520 maxmag 0.0001E-383 0 -> 1E-387 Subnormal + +ddmxg530 maxmag -1.00E-383 0 -> -1.00E-383 +ddmxg531 maxmag -0.1E-383 0 -> -1E-384 Subnormal +ddmxg532 maxmag -0.10E-383 0 -> -1.0E-384 Subnormal +ddmxg533 maxmag -0.100E-383 0 -> -1.00E-384 Subnormal +ddmxg534 maxmag -0.01E-383 0 -> -1E-385 Subnormal +ddmxg535 maxmag -0.999E-383 0 -> -9.99E-384 Subnormal +ddmxg536 maxmag -0.099E-383 0 -> -9.9E-385 Subnormal +ddmxg537 maxmag -0.009E-383 0 -> -9E-386 Subnormal +ddmxg538 maxmag -0.001E-383 0 -> -1E-386 Subnormal +ddmxg539 maxmag -0.0009E-383 0 -> -9E-387 Subnormal +ddmxg540 maxmag -0.0001E-383 0 -> -1E-387 Subnormal + +-- Null tests +ddmxg900 maxmag 10 # -> NaN Invalid_operation +ddmxg901 maxmag # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddMin.decTest b/Lib/test/decimaltestdata/ddMin.decTest index eb942ff1598..9ce42824638 100644 --- a/Lib/test/decimaltestdata/ddMin.decTest +++ b/Lib/test/decimaltestdata/ddMin.decTest @@ -1,309 +1,309 @@ ------------------------------------------------------------------------- --- ddMin.decTest -- decDouble minnum -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmin001 min -2 -2 -> -2 -ddmin002 min -2 -1 -> -2 -ddmin003 min -2 0 -> -2 -ddmin004 min -2 1 -> -2 -ddmin005 min -2 2 -> -2 -ddmin006 min -1 -2 -> -2 -ddmin007 min -1 -1 -> -1 -ddmin008 min -1 0 -> -1 -ddmin009 min -1 1 -> -1 -ddmin010 min -1 2 -> -1 -ddmin011 min 0 -2 -> -2 -ddmin012 min 0 -1 -> -1 -ddmin013 min 0 0 -> 0 -ddmin014 min 0 1 -> 0 -ddmin015 min 0 2 -> 0 -ddmin016 min 1 -2 -> -2 -ddmin017 min 1 -1 -> -1 -ddmin018 min 1 0 -> 0 -ddmin019 min 1 1 -> 1 -ddmin020 min 1 2 -> 1 -ddmin021 min 2 -2 -> -2 -ddmin022 min 2 -1 -> -1 -ddmin023 min 2 0 -> 0 -ddmin025 min 2 1 -> 1 -ddmin026 min 2 2 -> 2 - --- extended zeros -ddmin030 min 0 0 -> 0 -ddmin031 min 0 -0 -> -0 -ddmin032 min 0 -0.0 -> -0.0 -ddmin033 min 0 0.0 -> 0.0 -ddmin034 min -0 0 -> -0 -ddmin035 min -0 -0 -> -0 -ddmin036 min -0 -0.0 -> -0 -ddmin037 min -0 0.0 -> -0 -ddmin038 min 0.0 0 -> 0.0 -ddmin039 min 0.0 -0 -> -0 -ddmin040 min 0.0 -0.0 -> -0.0 -ddmin041 min 0.0 0.0 -> 0.0 -ddmin042 min -0.0 0 -> -0.0 -ddmin043 min -0.0 -0 -> -0 -ddmin044 min -0.0 -0.0 -> -0.0 -ddmin045 min -0.0 0.0 -> -0.0 - -ddmin046 min 0E1 -0E1 -> -0E+1 -ddmin047 min -0E1 0E2 -> -0E+1 -ddmin048 min 0E2 0E1 -> 0E+1 -ddmin049 min 0E1 0E2 -> 0E+1 -ddmin050 min -0E3 -0E2 -> -0E+3 -ddmin051 min -0E2 -0E3 -> -0E+3 - --- Specials -ddmin090 min Inf -Inf -> -Infinity -ddmin091 min Inf -1000 -> -1000 -ddmin092 min Inf -1 -> -1 -ddmin093 min Inf -0 -> -0 -ddmin094 min Inf 0 -> 0 -ddmin095 min Inf 1 -> 1 -ddmin096 min Inf 1000 -> 1000 -ddmin097 min Inf Inf -> Infinity -ddmin098 min -1000 Inf -> -1000 -ddmin099 min -Inf Inf -> -Infinity -ddmin100 min -1 Inf -> -1 -ddmin101 min -0 Inf -> -0 -ddmin102 min 0 Inf -> 0 -ddmin103 min 1 Inf -> 1 -ddmin104 min 1000 Inf -> 1000 -ddmin105 min Inf Inf -> Infinity - -ddmin120 min -Inf -Inf -> -Infinity -ddmin121 min -Inf -1000 -> -Infinity -ddmin122 min -Inf -1 -> -Infinity -ddmin123 min -Inf -0 -> -Infinity -ddmin124 min -Inf 0 -> -Infinity -ddmin125 min -Inf 1 -> -Infinity -ddmin126 min -Inf 1000 -> -Infinity -ddmin127 min -Inf Inf -> -Infinity -ddmin128 min -Inf -Inf -> -Infinity -ddmin129 min -1000 -Inf -> -Infinity -ddmin130 min -1 -Inf -> -Infinity -ddmin131 min -0 -Inf -> -Infinity -ddmin132 min 0 -Inf -> -Infinity -ddmin133 min 1 -Inf -> -Infinity -ddmin134 min 1000 -Inf -> -Infinity -ddmin135 min Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -ddmin141 min NaN -Inf -> -Infinity -ddmin142 min NaN -1000 -> -1000 -ddmin143 min NaN -1 -> -1 -ddmin144 min NaN -0 -> -0 -ddmin145 min NaN 0 -> 0 -ddmin146 min NaN 1 -> 1 -ddmin147 min NaN 1000 -> 1000 -ddmin148 min NaN Inf -> Infinity -ddmin149 min NaN NaN -> NaN -ddmin150 min -Inf NaN -> -Infinity -ddmin151 min -1000 NaN -> -1000 -ddmin152 min -1 -NaN -> -1 -ddmin153 min -0 NaN -> -0 -ddmin154 min 0 -NaN -> 0 -ddmin155 min 1 NaN -> 1 -ddmin156 min 1000 NaN -> 1000 -ddmin157 min Inf NaN -> Infinity - -ddmin161 min sNaN -Inf -> NaN Invalid_operation -ddmin162 min sNaN -1000 -> NaN Invalid_operation -ddmin163 min sNaN -1 -> NaN Invalid_operation -ddmin164 min sNaN -0 -> NaN Invalid_operation -ddmin165 min -sNaN 0 -> -NaN Invalid_operation -ddmin166 min -sNaN 1 -> -NaN Invalid_operation -ddmin167 min sNaN 1000 -> NaN Invalid_operation -ddmin168 min sNaN NaN -> NaN Invalid_operation -ddmin169 min sNaN sNaN -> NaN Invalid_operation -ddmin170 min NaN sNaN -> NaN Invalid_operation -ddmin171 min -Inf sNaN -> NaN Invalid_operation -ddmin172 min -1000 sNaN -> NaN Invalid_operation -ddmin173 min -1 sNaN -> NaN Invalid_operation -ddmin174 min -0 sNaN -> NaN Invalid_operation -ddmin175 min 0 sNaN -> NaN Invalid_operation -ddmin176 min 1 sNaN -> NaN Invalid_operation -ddmin177 min 1000 sNaN -> NaN Invalid_operation -ddmin178 min Inf sNaN -> NaN Invalid_operation -ddmin179 min NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmin181 min NaN9 -Inf -> -Infinity -ddmin182 min -NaN8 9990 -> 9990 -ddmin183 min NaN71 Inf -> Infinity - -ddmin184 min NaN1 NaN54 -> NaN1 -ddmin185 min NaN22 -NaN53 -> NaN22 -ddmin186 min -NaN3 NaN6 -> -NaN3 -ddmin187 min -NaN44 NaN7 -> -NaN44 - -ddmin188 min -Inf NaN41 -> -Infinity -ddmin189 min -9999 -NaN33 -> -9999 -ddmin190 min Inf NaN2 -> Infinity - -ddmin191 min sNaN99 -Inf -> NaN99 Invalid_operation -ddmin192 min sNaN98 -11 -> NaN98 Invalid_operation -ddmin193 min -sNaN97 NaN8 -> -NaN97 Invalid_operation -ddmin194 min sNaN69 sNaN94 -> NaN69 Invalid_operation -ddmin195 min NaN95 sNaN93 -> NaN93 Invalid_operation -ddmin196 min -Inf sNaN92 -> NaN92 Invalid_operation -ddmin197 min 088 sNaN91 -> NaN91 Invalid_operation -ddmin198 min Inf -sNaN90 -> -NaN90 Invalid_operation -ddmin199 min NaN sNaN86 -> NaN86 Invalid_operation - --- old rounding checks -ddmin221 min -12345678000 1 -> -12345678000 -ddmin222 min 1 -12345678000 -> -12345678000 -ddmin223 min -1234567800 1 -> -1234567800 -ddmin224 min 1 -1234567800 -> -1234567800 -ddmin225 min -1234567890 1 -> -1234567890 -ddmin226 min 1 -1234567890 -> -1234567890 -ddmin227 min -1234567891 1 -> -1234567891 -ddmin228 min 1 -1234567891 -> -1234567891 -ddmin229 min -12345678901 1 -> -12345678901 -ddmin230 min 1 -12345678901 -> -12345678901 -ddmin231 min -1234567896 1 -> -1234567896 -ddmin232 min 1 -1234567896 -> -1234567896 -ddmin233 min 1234567891 1 -> 1 -ddmin234 min 1 1234567891 -> 1 -ddmin235 min 12345678901 1 -> 1 -ddmin236 min 1 12345678901 -> 1 -ddmin237 min 1234567896 1 -> 1 -ddmin238 min 1 1234567896 -> 1 - --- from examples -ddmin280 min '3' '2' -> '2' -ddmin281 min '-10' '3' -> '-10' -ddmin282 min '1.0' '1' -> '1.0' -ddmin283 min '1' '1.0' -> '1.0' -ddmin284 min '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -ddmin401 min Inf 1.1 -> 1.1 -ddmin402 min 1.1 1 -> 1 -ddmin403 min 1 1.0 -> 1.0 -ddmin404 min 1.0 0.1 -> 0.1 -ddmin405 min 0.1 0.10 -> 0.10 -ddmin406 min 0.10 0.100 -> 0.100 -ddmin407 min 0.10 0 -> 0 -ddmin408 min 0 0.0 -> 0.0 -ddmin409 min 0.0 -0 -> -0 -ddmin410 min 0.0 -0.0 -> -0.0 -ddmin411 min 0.00 -0.0 -> -0.0 -ddmin412 min 0.0 -0.00 -> -0.00 -ddmin413 min 0 -0.0 -> -0.0 -ddmin414 min 0 -0 -> -0 -ddmin415 min -0.0 -0 -> -0 -ddmin416 min -0 -0.100 -> -0.100 -ddmin417 min -0.100 -0.10 -> -0.10 -ddmin418 min -0.10 -0.1 -> -0.1 -ddmin419 min -0.1 -1.0 -> -1.0 -ddmin420 min -1.0 -1 -> -1 -ddmin421 min -1 -1.1 -> -1.1 -ddmin423 min -1.1 -Inf -> -Infinity --- same with operands reversed -ddmin431 min 1.1 Inf -> 1.1 -ddmin432 min 1 1.1 -> 1 -ddmin433 min 1.0 1 -> 1.0 -ddmin434 min 0.1 1.0 -> 0.1 -ddmin435 min 0.10 0.1 -> 0.10 -ddmin436 min 0.100 0.10 -> 0.100 -ddmin437 min 0 0.10 -> 0 -ddmin438 min 0.0 0 -> 0.0 -ddmin439 min -0 0.0 -> -0 -ddmin440 min -0.0 0.0 -> -0.0 -ddmin441 min -0.0 0.00 -> -0.0 -ddmin442 min -0.00 0.0 -> -0.00 -ddmin443 min -0.0 0 -> -0.0 -ddmin444 min -0 0 -> -0 -ddmin445 min -0 -0.0 -> -0 -ddmin446 min -0.100 -0 -> -0.100 -ddmin447 min -0.10 -0.100 -> -0.10 -ddmin448 min -0.1 -0.10 -> -0.1 -ddmin449 min -1.0 -0.1 -> -1.0 -ddmin450 min -1 -1.0 -> -1 -ddmin451 min -1.1 -1 -> -1.1 -ddmin453 min -Inf -1.1 -> -Infinity --- largies -ddmin460 min 1000 1E+3 -> 1000 -ddmin461 min 1E+3 1000 -> 1000 -ddmin462 min 1000 -1E+3 -> -1E+3 -ddmin463 min 1E+3 -384 -> -384 -ddmin464 min -384 1E+3 -> -384 -ddmin465 min -1E+3 1000 -> -1E+3 -ddmin466 min -384 -1E+3 -> -1E+3 -ddmin467 min -1E+3 -384 -> -1E+3 - --- misalignment traps for little-endian -ddmin471 min 1.0 0.1 -> 0.1 -ddmin472 min 0.1 1.0 -> 0.1 -ddmin473 min 10.0 0.1 -> 0.1 -ddmin474 min 0.1 10.0 -> 0.1 -ddmin475 min 100 1.0 -> 1.0 -ddmin476 min 1.0 100 -> 1.0 -ddmin477 min 1000 10.0 -> 10.0 -ddmin478 min 10.0 1000 -> 10.0 -ddmin479 min 10000 100.0 -> 100.0 -ddmin480 min 100.0 10000 -> 100.0 -ddmin481 min 100000 1000.0 -> 1000.0 -ddmin482 min 1000.0 100000 -> 1000.0 -ddmin483 min 1000000 10000.0 -> 10000.0 -ddmin484 min 10000.0 1000000 -> 10000.0 - --- subnormals -ddmin510 min 1.00E-383 0 -> 0 -ddmin511 min 0.1E-383 0 -> 0 -ddmin512 min 0.10E-383 0 -> 0 -ddmin513 min 0.100E-383 0 -> 0 -ddmin514 min 0.01E-383 0 -> 0 -ddmin515 min 0.999E-383 0 -> 0 -ddmin516 min 0.099E-383 0 -> 0 -ddmin517 min 0.009E-383 0 -> 0 -ddmin518 min 0.001E-383 0 -> 0 -ddmin519 min 0.0009E-383 0 -> 0 -ddmin520 min 0.0001E-383 0 -> 0 - -ddmin530 min -1.00E-383 0 -> -1.00E-383 -ddmin531 min -0.1E-383 0 -> -1E-384 Subnormal -ddmin532 min -0.10E-383 0 -> -1.0E-384 Subnormal -ddmin533 min -0.100E-383 0 -> -1.00E-384 Subnormal -ddmin534 min -0.01E-383 0 -> -1E-385 Subnormal -ddmin535 min -0.999E-383 0 -> -9.99E-384 Subnormal -ddmin536 min -0.099E-383 0 -> -9.9E-385 Subnormal -ddmin537 min -0.009E-383 0 -> -9E-386 Subnormal -ddmin538 min -0.001E-383 0 -> -1E-386 Subnormal -ddmin539 min -0.0009E-383 0 -> -9E-387 Subnormal -ddmin540 min -0.0001E-383 0 -> -1E-387 Subnormal - - --- Null tests -ddmin900 min 10 # -> NaN Invalid_operation -ddmin901 min # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddMin.decTest -- decDouble minnum -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmin001 min -2 -2 -> -2 +ddmin002 min -2 -1 -> -2 +ddmin003 min -2 0 -> -2 +ddmin004 min -2 1 -> -2 +ddmin005 min -2 2 -> -2 +ddmin006 min -1 -2 -> -2 +ddmin007 min -1 -1 -> -1 +ddmin008 min -1 0 -> -1 +ddmin009 min -1 1 -> -1 +ddmin010 min -1 2 -> -1 +ddmin011 min 0 -2 -> -2 +ddmin012 min 0 -1 -> -1 +ddmin013 min 0 0 -> 0 +ddmin014 min 0 1 -> 0 +ddmin015 min 0 2 -> 0 +ddmin016 min 1 -2 -> -2 +ddmin017 min 1 -1 -> -1 +ddmin018 min 1 0 -> 0 +ddmin019 min 1 1 -> 1 +ddmin020 min 1 2 -> 1 +ddmin021 min 2 -2 -> -2 +ddmin022 min 2 -1 -> -1 +ddmin023 min 2 0 -> 0 +ddmin025 min 2 1 -> 1 +ddmin026 min 2 2 -> 2 + +-- extended zeros +ddmin030 min 0 0 -> 0 +ddmin031 min 0 -0 -> -0 +ddmin032 min 0 -0.0 -> -0.0 +ddmin033 min 0 0.0 -> 0.0 +ddmin034 min -0 0 -> -0 +ddmin035 min -0 -0 -> -0 +ddmin036 min -0 -0.0 -> -0 +ddmin037 min -0 0.0 -> -0 +ddmin038 min 0.0 0 -> 0.0 +ddmin039 min 0.0 -0 -> -0 +ddmin040 min 0.0 -0.0 -> -0.0 +ddmin041 min 0.0 0.0 -> 0.0 +ddmin042 min -0.0 0 -> -0.0 +ddmin043 min -0.0 -0 -> -0 +ddmin044 min -0.0 -0.0 -> -0.0 +ddmin045 min -0.0 0.0 -> -0.0 + +ddmin046 min 0E1 -0E1 -> -0E+1 +ddmin047 min -0E1 0E2 -> -0E+1 +ddmin048 min 0E2 0E1 -> 0E+1 +ddmin049 min 0E1 0E2 -> 0E+1 +ddmin050 min -0E3 -0E2 -> -0E+3 +ddmin051 min -0E2 -0E3 -> -0E+3 + +-- Specials +ddmin090 min Inf -Inf -> -Infinity +ddmin091 min Inf -1000 -> -1000 +ddmin092 min Inf -1 -> -1 +ddmin093 min Inf -0 -> -0 +ddmin094 min Inf 0 -> 0 +ddmin095 min Inf 1 -> 1 +ddmin096 min Inf 1000 -> 1000 +ddmin097 min Inf Inf -> Infinity +ddmin098 min -1000 Inf -> -1000 +ddmin099 min -Inf Inf -> -Infinity +ddmin100 min -1 Inf -> -1 +ddmin101 min -0 Inf -> -0 +ddmin102 min 0 Inf -> 0 +ddmin103 min 1 Inf -> 1 +ddmin104 min 1000 Inf -> 1000 +ddmin105 min Inf Inf -> Infinity + +ddmin120 min -Inf -Inf -> -Infinity +ddmin121 min -Inf -1000 -> -Infinity +ddmin122 min -Inf -1 -> -Infinity +ddmin123 min -Inf -0 -> -Infinity +ddmin124 min -Inf 0 -> -Infinity +ddmin125 min -Inf 1 -> -Infinity +ddmin126 min -Inf 1000 -> -Infinity +ddmin127 min -Inf Inf -> -Infinity +ddmin128 min -Inf -Inf -> -Infinity +ddmin129 min -1000 -Inf -> -Infinity +ddmin130 min -1 -Inf -> -Infinity +ddmin131 min -0 -Inf -> -Infinity +ddmin132 min 0 -Inf -> -Infinity +ddmin133 min 1 -Inf -> -Infinity +ddmin134 min 1000 -Inf -> -Infinity +ddmin135 min Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +ddmin141 min NaN -Inf -> -Infinity +ddmin142 min NaN -1000 -> -1000 +ddmin143 min NaN -1 -> -1 +ddmin144 min NaN -0 -> -0 +ddmin145 min NaN 0 -> 0 +ddmin146 min NaN 1 -> 1 +ddmin147 min NaN 1000 -> 1000 +ddmin148 min NaN Inf -> Infinity +ddmin149 min NaN NaN -> NaN +ddmin150 min -Inf NaN -> -Infinity +ddmin151 min -1000 NaN -> -1000 +ddmin152 min -1 -NaN -> -1 +ddmin153 min -0 NaN -> -0 +ddmin154 min 0 -NaN -> 0 +ddmin155 min 1 NaN -> 1 +ddmin156 min 1000 NaN -> 1000 +ddmin157 min Inf NaN -> Infinity + +ddmin161 min sNaN -Inf -> NaN Invalid_operation +ddmin162 min sNaN -1000 -> NaN Invalid_operation +ddmin163 min sNaN -1 -> NaN Invalid_operation +ddmin164 min sNaN -0 -> NaN Invalid_operation +ddmin165 min -sNaN 0 -> -NaN Invalid_operation +ddmin166 min -sNaN 1 -> -NaN Invalid_operation +ddmin167 min sNaN 1000 -> NaN Invalid_operation +ddmin168 min sNaN NaN -> NaN Invalid_operation +ddmin169 min sNaN sNaN -> NaN Invalid_operation +ddmin170 min NaN sNaN -> NaN Invalid_operation +ddmin171 min -Inf sNaN -> NaN Invalid_operation +ddmin172 min -1000 sNaN -> NaN Invalid_operation +ddmin173 min -1 sNaN -> NaN Invalid_operation +ddmin174 min -0 sNaN -> NaN Invalid_operation +ddmin175 min 0 sNaN -> NaN Invalid_operation +ddmin176 min 1 sNaN -> NaN Invalid_operation +ddmin177 min 1000 sNaN -> NaN Invalid_operation +ddmin178 min Inf sNaN -> NaN Invalid_operation +ddmin179 min NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmin181 min NaN9 -Inf -> -Infinity +ddmin182 min -NaN8 9990 -> 9990 +ddmin183 min NaN71 Inf -> Infinity + +ddmin184 min NaN1 NaN54 -> NaN1 +ddmin185 min NaN22 -NaN53 -> NaN22 +ddmin186 min -NaN3 NaN6 -> -NaN3 +ddmin187 min -NaN44 NaN7 -> -NaN44 + +ddmin188 min -Inf NaN41 -> -Infinity +ddmin189 min -9999 -NaN33 -> -9999 +ddmin190 min Inf NaN2 -> Infinity + +ddmin191 min sNaN99 -Inf -> NaN99 Invalid_operation +ddmin192 min sNaN98 -11 -> NaN98 Invalid_operation +ddmin193 min -sNaN97 NaN8 -> -NaN97 Invalid_operation +ddmin194 min sNaN69 sNaN94 -> NaN69 Invalid_operation +ddmin195 min NaN95 sNaN93 -> NaN93 Invalid_operation +ddmin196 min -Inf sNaN92 -> NaN92 Invalid_operation +ddmin197 min 088 sNaN91 -> NaN91 Invalid_operation +ddmin198 min Inf -sNaN90 -> -NaN90 Invalid_operation +ddmin199 min NaN sNaN86 -> NaN86 Invalid_operation + +-- old rounding checks +ddmin221 min -12345678000 1 -> -12345678000 +ddmin222 min 1 -12345678000 -> -12345678000 +ddmin223 min -1234567800 1 -> -1234567800 +ddmin224 min 1 -1234567800 -> -1234567800 +ddmin225 min -1234567890 1 -> -1234567890 +ddmin226 min 1 -1234567890 -> -1234567890 +ddmin227 min -1234567891 1 -> -1234567891 +ddmin228 min 1 -1234567891 -> -1234567891 +ddmin229 min -12345678901 1 -> -12345678901 +ddmin230 min 1 -12345678901 -> -12345678901 +ddmin231 min -1234567896 1 -> -1234567896 +ddmin232 min 1 -1234567896 -> -1234567896 +ddmin233 min 1234567891 1 -> 1 +ddmin234 min 1 1234567891 -> 1 +ddmin235 min 12345678901 1 -> 1 +ddmin236 min 1 12345678901 -> 1 +ddmin237 min 1234567896 1 -> 1 +ddmin238 min 1 1234567896 -> 1 + +-- from examples +ddmin280 min '3' '2' -> '2' +ddmin281 min '-10' '3' -> '-10' +ddmin282 min '1.0' '1' -> '1.0' +ddmin283 min '1' '1.0' -> '1.0' +ddmin284 min '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +ddmin401 min Inf 1.1 -> 1.1 +ddmin402 min 1.1 1 -> 1 +ddmin403 min 1 1.0 -> 1.0 +ddmin404 min 1.0 0.1 -> 0.1 +ddmin405 min 0.1 0.10 -> 0.10 +ddmin406 min 0.10 0.100 -> 0.100 +ddmin407 min 0.10 0 -> 0 +ddmin408 min 0 0.0 -> 0.0 +ddmin409 min 0.0 -0 -> -0 +ddmin410 min 0.0 -0.0 -> -0.0 +ddmin411 min 0.00 -0.0 -> -0.0 +ddmin412 min 0.0 -0.00 -> -0.00 +ddmin413 min 0 -0.0 -> -0.0 +ddmin414 min 0 -0 -> -0 +ddmin415 min -0.0 -0 -> -0 +ddmin416 min -0 -0.100 -> -0.100 +ddmin417 min -0.100 -0.10 -> -0.10 +ddmin418 min -0.10 -0.1 -> -0.1 +ddmin419 min -0.1 -1.0 -> -1.0 +ddmin420 min -1.0 -1 -> -1 +ddmin421 min -1 -1.1 -> -1.1 +ddmin423 min -1.1 -Inf -> -Infinity +-- same with operands reversed +ddmin431 min 1.1 Inf -> 1.1 +ddmin432 min 1 1.1 -> 1 +ddmin433 min 1.0 1 -> 1.0 +ddmin434 min 0.1 1.0 -> 0.1 +ddmin435 min 0.10 0.1 -> 0.10 +ddmin436 min 0.100 0.10 -> 0.100 +ddmin437 min 0 0.10 -> 0 +ddmin438 min 0.0 0 -> 0.0 +ddmin439 min -0 0.0 -> -0 +ddmin440 min -0.0 0.0 -> -0.0 +ddmin441 min -0.0 0.00 -> -0.0 +ddmin442 min -0.00 0.0 -> -0.00 +ddmin443 min -0.0 0 -> -0.0 +ddmin444 min -0 0 -> -0 +ddmin445 min -0 -0.0 -> -0 +ddmin446 min -0.100 -0 -> -0.100 +ddmin447 min -0.10 -0.100 -> -0.10 +ddmin448 min -0.1 -0.10 -> -0.1 +ddmin449 min -1.0 -0.1 -> -1.0 +ddmin450 min -1 -1.0 -> -1 +ddmin451 min -1.1 -1 -> -1.1 +ddmin453 min -Inf -1.1 -> -Infinity +-- largies +ddmin460 min 1000 1E+3 -> 1000 +ddmin461 min 1E+3 1000 -> 1000 +ddmin462 min 1000 -1E+3 -> -1E+3 +ddmin463 min 1E+3 -384 -> -384 +ddmin464 min -384 1E+3 -> -384 +ddmin465 min -1E+3 1000 -> -1E+3 +ddmin466 min -384 -1E+3 -> -1E+3 +ddmin467 min -1E+3 -384 -> -1E+3 + +-- misalignment traps for little-endian +ddmin471 min 1.0 0.1 -> 0.1 +ddmin472 min 0.1 1.0 -> 0.1 +ddmin473 min 10.0 0.1 -> 0.1 +ddmin474 min 0.1 10.0 -> 0.1 +ddmin475 min 100 1.0 -> 1.0 +ddmin476 min 1.0 100 -> 1.0 +ddmin477 min 1000 10.0 -> 10.0 +ddmin478 min 10.0 1000 -> 10.0 +ddmin479 min 10000 100.0 -> 100.0 +ddmin480 min 100.0 10000 -> 100.0 +ddmin481 min 100000 1000.0 -> 1000.0 +ddmin482 min 1000.0 100000 -> 1000.0 +ddmin483 min 1000000 10000.0 -> 10000.0 +ddmin484 min 10000.0 1000000 -> 10000.0 + +-- subnormals +ddmin510 min 1.00E-383 0 -> 0 +ddmin511 min 0.1E-383 0 -> 0 +ddmin512 min 0.10E-383 0 -> 0 +ddmin513 min 0.100E-383 0 -> 0 +ddmin514 min 0.01E-383 0 -> 0 +ddmin515 min 0.999E-383 0 -> 0 +ddmin516 min 0.099E-383 0 -> 0 +ddmin517 min 0.009E-383 0 -> 0 +ddmin518 min 0.001E-383 0 -> 0 +ddmin519 min 0.0009E-383 0 -> 0 +ddmin520 min 0.0001E-383 0 -> 0 + +ddmin530 min -1.00E-383 0 -> -1.00E-383 +ddmin531 min -0.1E-383 0 -> -1E-384 Subnormal +ddmin532 min -0.10E-383 0 -> -1.0E-384 Subnormal +ddmin533 min -0.100E-383 0 -> -1.00E-384 Subnormal +ddmin534 min -0.01E-383 0 -> -1E-385 Subnormal +ddmin535 min -0.999E-383 0 -> -9.99E-384 Subnormal +ddmin536 min -0.099E-383 0 -> -9.9E-385 Subnormal +ddmin537 min -0.009E-383 0 -> -9E-386 Subnormal +ddmin538 min -0.001E-383 0 -> -1E-386 Subnormal +ddmin539 min -0.0009E-383 0 -> -9E-387 Subnormal +ddmin540 min -0.0001E-383 0 -> -1E-387 Subnormal + + +-- Null tests +ddmin900 min 10 # -> NaN Invalid_operation +ddmin901 min # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddMinMag.decTest b/Lib/test/decimaltestdata/ddMinMag.decTest index 1012f1ec81e..5537cc8a7e4 100644 --- a/Lib/test/decimaltestdata/ddMinMag.decTest +++ b/Lib/test/decimaltestdata/ddMinMag.decTest @@ -1,293 +1,293 @@ ------------------------------------------------------------------------- --- ddMinMag.decTest -- decDouble minnummag -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmng001 minmag -2 -2 -> -2 -ddmng002 minmag -2 -1 -> -1 -ddmng003 minmag -2 0 -> 0 -ddmng004 minmag -2 1 -> 1 -ddmng005 minmag -2 2 -> -2 -ddmng006 minmag -1 -2 -> -1 -ddmng007 minmag -1 -1 -> -1 -ddmng008 minmag -1 0 -> 0 -ddmng009 minmag -1 1 -> -1 -ddmng010 minmag -1 2 -> -1 -ddmng011 minmag 0 -2 -> 0 -ddmng012 minmag 0 -1 -> 0 -ddmng013 minmag 0 0 -> 0 -ddmng014 minmag 0 1 -> 0 -ddmng015 minmag 0 2 -> 0 -ddmng016 minmag 1 -2 -> 1 -ddmng017 minmag 1 -1 -> -1 -ddmng018 minmag 1 0 -> 0 -ddmng019 minmag 1 1 -> 1 -ddmng020 minmag 1 2 -> 1 -ddmng021 minmag 2 -2 -> -2 -ddmng022 minmag 2 -1 -> -1 -ddmng023 minmag 2 0 -> 0 -ddmng025 minmag 2 1 -> 1 -ddmng026 minmag 2 2 -> 2 - --- extended zeros -ddmng030 minmag 0 0 -> 0 -ddmng031 minmag 0 -0 -> -0 -ddmng032 minmag 0 -0.0 -> -0.0 -ddmng033 minmag 0 0.0 -> 0.0 -ddmng034 minmag -0 0 -> -0 -ddmng035 minmag -0 -0 -> -0 -ddmng036 minmag -0 -0.0 -> -0 -ddmng037 minmag -0 0.0 -> -0 -ddmng038 minmag 0.0 0 -> 0.0 -ddmng039 minmag 0.0 -0 -> -0 -ddmng040 minmag 0.0 -0.0 -> -0.0 -ddmng041 minmag 0.0 0.0 -> 0.0 -ddmng042 minmag -0.0 0 -> -0.0 -ddmng043 minmag -0.0 -0 -> -0 -ddmng044 minmag -0.0 -0.0 -> -0.0 -ddmng045 minmag -0.0 0.0 -> -0.0 - -ddmng046 minmag 0E1 -0E1 -> -0E+1 -ddmng047 minmag -0E1 0E2 -> -0E+1 -ddmng048 minmag 0E2 0E1 -> 0E+1 -ddmng049 minmag 0E1 0E2 -> 0E+1 -ddmng050 minmag -0E3 -0E2 -> -0E+3 -ddmng051 minmag -0E2 -0E3 -> -0E+3 - --- Specials -ddmng090 minmag Inf -Inf -> -Infinity -ddmng091 minmag Inf -1000 -> -1000 -ddmng092 minmag Inf -1 -> -1 -ddmng093 minmag Inf -0 -> -0 -ddmng094 minmag Inf 0 -> 0 -ddmng095 minmag Inf 1 -> 1 -ddmng096 minmag Inf 1000 -> 1000 -ddmng097 minmag Inf Inf -> Infinity -ddmng098 minmag -1000 Inf -> -1000 -ddmng099 minmag -Inf Inf -> -Infinity -ddmng100 minmag -1 Inf -> -1 -ddmng101 minmag -0 Inf -> -0 -ddmng102 minmag 0 Inf -> 0 -ddmng103 minmag 1 Inf -> 1 -ddmng104 minmag 1000 Inf -> 1000 -ddmng105 minmag Inf Inf -> Infinity - -ddmng120 minmag -Inf -Inf -> -Infinity -ddmng121 minmag -Inf -1000 -> -1000 -ddmng122 minmag -Inf -1 -> -1 -ddmng123 minmag -Inf -0 -> -0 -ddmng124 minmag -Inf 0 -> 0 -ddmng125 minmag -Inf 1 -> 1 -ddmng126 minmag -Inf 1000 -> 1000 -ddmng127 minmag -Inf Inf -> -Infinity -ddmng128 minmag -Inf -Inf -> -Infinity -ddmng129 minmag -1000 -Inf -> -1000 -ddmng130 minmag -1 -Inf -> -1 -ddmng131 minmag -0 -Inf -> -0 -ddmng132 minmag 0 -Inf -> 0 -ddmng133 minmag 1 -Inf -> 1 -ddmng134 minmag 1000 -Inf -> 1000 -ddmng135 minmag Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -ddmng141 minmag NaN -Inf -> -Infinity -ddmng142 minmag NaN -1000 -> -1000 -ddmng143 minmag NaN -1 -> -1 -ddmng144 minmag NaN -0 -> -0 -ddmng145 minmag NaN 0 -> 0 -ddmng146 minmag NaN 1 -> 1 -ddmng147 minmag NaN 1000 -> 1000 -ddmng148 minmag NaN Inf -> Infinity -ddmng149 minmag NaN NaN -> NaN -ddmng150 minmag -Inf NaN -> -Infinity -ddmng151 minmag -1000 NaN -> -1000 -ddmng152 minmag -1 -NaN -> -1 -ddmng153 minmag -0 NaN -> -0 -ddmng154 minmag 0 -NaN -> 0 -ddmng155 minmag 1 NaN -> 1 -ddmng156 minmag 1000 NaN -> 1000 -ddmng157 minmag Inf NaN -> Infinity - -ddmng161 minmag sNaN -Inf -> NaN Invalid_operation -ddmng162 minmag sNaN -1000 -> NaN Invalid_operation -ddmng163 minmag sNaN -1 -> NaN Invalid_operation -ddmng164 minmag sNaN -0 -> NaN Invalid_operation -ddmng165 minmag -sNaN 0 -> -NaN Invalid_operation -ddmng166 minmag -sNaN 1 -> -NaN Invalid_operation -ddmng167 minmag sNaN 1000 -> NaN Invalid_operation -ddmng168 minmag sNaN NaN -> NaN Invalid_operation -ddmng169 minmag sNaN sNaN -> NaN Invalid_operation -ddmng170 minmag NaN sNaN -> NaN Invalid_operation -ddmng171 minmag -Inf sNaN -> NaN Invalid_operation -ddmng172 minmag -1000 sNaN -> NaN Invalid_operation -ddmng173 minmag -1 sNaN -> NaN Invalid_operation -ddmng174 minmag -0 sNaN -> NaN Invalid_operation -ddmng175 minmag 0 sNaN -> NaN Invalid_operation -ddmng176 minmag 1 sNaN -> NaN Invalid_operation -ddmng177 minmag 1000 sNaN -> NaN Invalid_operation -ddmng178 minmag Inf sNaN -> NaN Invalid_operation -ddmng179 minmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmng181 minmag NaN9 -Inf -> -Infinity -ddmng182 minmag -NaN8 9990 -> 9990 -ddmng183 minmag NaN71 Inf -> Infinity - -ddmng184 minmag NaN1 NaN54 -> NaN1 -ddmng185 minmag NaN22 -NaN53 -> NaN22 -ddmng186 minmag -NaN3 NaN6 -> -NaN3 -ddmng187 minmag -NaN44 NaN7 -> -NaN44 - -ddmng188 minmag -Inf NaN41 -> -Infinity -ddmng189 minmag -9999 -NaN33 -> -9999 -ddmng190 minmag Inf NaN2 -> Infinity - -ddmng191 minmag sNaN99 -Inf -> NaN99 Invalid_operation -ddmng192 minmag sNaN98 -11 -> NaN98 Invalid_operation -ddmng193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation -ddmng194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation -ddmng195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation -ddmng196 minmag -Inf sNaN92 -> NaN92 Invalid_operation -ddmng197 minmag 088 sNaN91 -> NaN91 Invalid_operation -ddmng198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation -ddmng199 minmag NaN sNaN86 -> NaN86 Invalid_operation - --- old rounding checks -ddmng221 minmag -12345678000 1 -> 1 -ddmng222 minmag 1 -12345678000 -> 1 -ddmng223 minmag -1234567800 1 -> 1 -ddmng224 minmag 1 -1234567800 -> 1 -ddmng225 minmag -1234567890 1 -> 1 -ddmng226 minmag 1 -1234567890 -> 1 -ddmng227 minmag -1234567891 1 -> 1 -ddmng228 minmag 1 -1234567891 -> 1 -ddmng229 minmag -12345678901 1 -> 1 -ddmng230 minmag 1 -12345678901 -> 1 -ddmng231 minmag -1234567896 1 -> 1 -ddmng232 minmag 1 -1234567896 -> 1 -ddmng233 minmag 1234567891 1 -> 1 -ddmng234 minmag 1 1234567891 -> 1 -ddmng235 minmag 12345678901 1 -> 1 -ddmng236 minmag 1 12345678901 -> 1 -ddmng237 minmag 1234567896 1 -> 1 -ddmng238 minmag 1 1234567896 -> 1 - --- from examples -ddmng280 minmag '3' '2' -> '2' -ddmng281 minmag '-10' '3' -> '3' -ddmng282 minmag '1.0' '1' -> '1.0' -ddmng283 minmag '1' '1.0' -> '1.0' -ddmng284 minmag '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -ddmng401 minmag Inf 1.1 -> 1.1 -ddmng402 minmag 1.1 1 -> 1 -ddmng403 minmag 1 1.0 -> 1.0 -ddmng404 minmag 1.0 0.1 -> 0.1 -ddmng405 minmag 0.1 0.10 -> 0.10 -ddmng406 minmag 0.10 0.100 -> 0.100 -ddmng407 minmag 0.10 0 -> 0 -ddmng408 minmag 0 0.0 -> 0.0 -ddmng409 minmag 0.0 -0 -> -0 -ddmng410 minmag 0.0 -0.0 -> -0.0 -ddmng411 minmag 0.00 -0.0 -> -0.0 -ddmng412 minmag 0.0 -0.00 -> -0.00 -ddmng413 minmag 0 -0.0 -> -0.0 -ddmng414 minmag 0 -0 -> -0 -ddmng415 minmag -0.0 -0 -> -0 -ddmng416 minmag -0 -0.100 -> -0 -ddmng417 minmag -0.100 -0.10 -> -0.10 -ddmng418 minmag -0.10 -0.1 -> -0.1 -ddmng419 minmag -0.1 -1.0 -> -0.1 -ddmng420 minmag -1.0 -1 -> -1 -ddmng421 minmag -1 -1.1 -> -1 -ddmng423 minmag -1.1 -Inf -> -1.1 --- same with operands reversed -ddmng431 minmag 1.1 Inf -> 1.1 -ddmng432 minmag 1 1.1 -> 1 -ddmng433 minmag 1.0 1 -> 1.0 -ddmng434 minmag 0.1 1.0 -> 0.1 -ddmng435 minmag 0.10 0.1 -> 0.10 -ddmng436 minmag 0.100 0.10 -> 0.100 -ddmng437 minmag 0 0.10 -> 0 -ddmng438 minmag 0.0 0 -> 0.0 -ddmng439 minmag -0 0.0 -> -0 -ddmng440 minmag -0.0 0.0 -> -0.0 -ddmng441 minmag -0.0 0.00 -> -0.0 -ddmng442 minmag -0.00 0.0 -> -0.00 -ddmng443 minmag -0.0 0 -> -0.0 -ddmng444 minmag -0 0 -> -0 -ddmng445 minmag -0 -0.0 -> -0 -ddmng446 minmag -0.100 -0 -> -0 -ddmng447 minmag -0.10 -0.100 -> -0.10 -ddmng448 minmag -0.1 -0.10 -> -0.1 -ddmng449 minmag -1.0 -0.1 -> -0.1 -ddmng450 minmag -1 -1.0 -> -1 -ddmng451 minmag -1.1 -1 -> -1 -ddmng453 minmag -Inf -1.1 -> -1.1 --- largies -ddmng460 minmag 1000 1E+3 -> 1000 -ddmng461 minmag 1E+3 1000 -> 1000 -ddmng462 minmag 1000 -1E+3 -> -1E+3 -ddmng463 minmag 1E+3 -384 -> -384 -ddmng464 minmag -384 1E+3 -> -384 -ddmng465 minmag -1E+3 1000 -> -1E+3 -ddmng466 minmag -384 -1E+3 -> -384 -ddmng467 minmag -1E+3 -384 -> -384 - --- subnormals -ddmng510 minmag 1.00E-383 0 -> 0 -ddmng511 minmag 0.1E-383 0 -> 0 -ddmng512 minmag 0.10E-383 0 -> 0 -ddmng513 minmag 0.100E-383 0 -> 0 -ddmng514 minmag 0.01E-383 0 -> 0 -ddmng515 minmag 0.999E-383 0 -> 0 -ddmng516 minmag 0.099E-383 0 -> 0 -ddmng517 minmag 0.009E-383 0 -> 0 -ddmng518 minmag 0.001E-383 0 -> 0 -ddmng519 minmag 0.0009E-383 0 -> 0 -ddmng520 minmag 0.0001E-383 0 -> 0 - -ddmng530 minmag -1.00E-383 0 -> 0 -ddmng531 minmag -0.1E-383 0 -> 0 -ddmng532 minmag -0.10E-383 0 -> 0 -ddmng533 minmag -0.100E-383 0 -> 0 -ddmng534 minmag -0.01E-383 0 -> 0 -ddmng535 minmag -0.999E-383 0 -> 0 -ddmng536 minmag -0.099E-383 0 -> 0 -ddmng537 minmag -0.009E-383 0 -> 0 -ddmng538 minmag -0.001E-383 0 -> 0 -ddmng539 minmag -0.0009E-383 0 -> 0 -ddmng540 minmag -0.0001E-383 0 -> 0 - - --- Null tests -ddmng900 minmag 10 # -> NaN Invalid_operation -ddmng901 minmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddMinMag.decTest -- decDouble minnummag -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmng001 minmag -2 -2 -> -2 +ddmng002 minmag -2 -1 -> -1 +ddmng003 minmag -2 0 -> 0 +ddmng004 minmag -2 1 -> 1 +ddmng005 minmag -2 2 -> -2 +ddmng006 minmag -1 -2 -> -1 +ddmng007 minmag -1 -1 -> -1 +ddmng008 minmag -1 0 -> 0 +ddmng009 minmag -1 1 -> -1 +ddmng010 minmag -1 2 -> -1 +ddmng011 minmag 0 -2 -> 0 +ddmng012 minmag 0 -1 -> 0 +ddmng013 minmag 0 0 -> 0 +ddmng014 minmag 0 1 -> 0 +ddmng015 minmag 0 2 -> 0 +ddmng016 minmag 1 -2 -> 1 +ddmng017 minmag 1 -1 -> -1 +ddmng018 minmag 1 0 -> 0 +ddmng019 minmag 1 1 -> 1 +ddmng020 minmag 1 2 -> 1 +ddmng021 minmag 2 -2 -> -2 +ddmng022 minmag 2 -1 -> -1 +ddmng023 minmag 2 0 -> 0 +ddmng025 minmag 2 1 -> 1 +ddmng026 minmag 2 2 -> 2 + +-- extended zeros +ddmng030 minmag 0 0 -> 0 +ddmng031 minmag 0 -0 -> -0 +ddmng032 minmag 0 -0.0 -> -0.0 +ddmng033 minmag 0 0.0 -> 0.0 +ddmng034 minmag -0 0 -> -0 +ddmng035 minmag -0 -0 -> -0 +ddmng036 minmag -0 -0.0 -> -0 +ddmng037 minmag -0 0.0 -> -0 +ddmng038 minmag 0.0 0 -> 0.0 +ddmng039 minmag 0.0 -0 -> -0 +ddmng040 minmag 0.0 -0.0 -> -0.0 +ddmng041 minmag 0.0 0.0 -> 0.0 +ddmng042 minmag -0.0 0 -> -0.0 +ddmng043 minmag -0.0 -0 -> -0 +ddmng044 minmag -0.0 -0.0 -> -0.0 +ddmng045 minmag -0.0 0.0 -> -0.0 + +ddmng046 minmag 0E1 -0E1 -> -0E+1 +ddmng047 minmag -0E1 0E2 -> -0E+1 +ddmng048 minmag 0E2 0E1 -> 0E+1 +ddmng049 minmag 0E1 0E2 -> 0E+1 +ddmng050 minmag -0E3 -0E2 -> -0E+3 +ddmng051 minmag -0E2 -0E3 -> -0E+3 + +-- Specials +ddmng090 minmag Inf -Inf -> -Infinity +ddmng091 minmag Inf -1000 -> -1000 +ddmng092 minmag Inf -1 -> -1 +ddmng093 minmag Inf -0 -> -0 +ddmng094 minmag Inf 0 -> 0 +ddmng095 minmag Inf 1 -> 1 +ddmng096 minmag Inf 1000 -> 1000 +ddmng097 minmag Inf Inf -> Infinity +ddmng098 minmag -1000 Inf -> -1000 +ddmng099 minmag -Inf Inf -> -Infinity +ddmng100 minmag -1 Inf -> -1 +ddmng101 minmag -0 Inf -> -0 +ddmng102 minmag 0 Inf -> 0 +ddmng103 minmag 1 Inf -> 1 +ddmng104 minmag 1000 Inf -> 1000 +ddmng105 minmag Inf Inf -> Infinity + +ddmng120 minmag -Inf -Inf -> -Infinity +ddmng121 minmag -Inf -1000 -> -1000 +ddmng122 minmag -Inf -1 -> -1 +ddmng123 minmag -Inf -0 -> -0 +ddmng124 minmag -Inf 0 -> 0 +ddmng125 minmag -Inf 1 -> 1 +ddmng126 minmag -Inf 1000 -> 1000 +ddmng127 minmag -Inf Inf -> -Infinity +ddmng128 minmag -Inf -Inf -> -Infinity +ddmng129 minmag -1000 -Inf -> -1000 +ddmng130 minmag -1 -Inf -> -1 +ddmng131 minmag -0 -Inf -> -0 +ddmng132 minmag 0 -Inf -> 0 +ddmng133 minmag 1 -Inf -> 1 +ddmng134 minmag 1000 -Inf -> 1000 +ddmng135 minmag Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +ddmng141 minmag NaN -Inf -> -Infinity +ddmng142 minmag NaN -1000 -> -1000 +ddmng143 minmag NaN -1 -> -1 +ddmng144 minmag NaN -0 -> -0 +ddmng145 minmag NaN 0 -> 0 +ddmng146 minmag NaN 1 -> 1 +ddmng147 minmag NaN 1000 -> 1000 +ddmng148 minmag NaN Inf -> Infinity +ddmng149 minmag NaN NaN -> NaN +ddmng150 minmag -Inf NaN -> -Infinity +ddmng151 minmag -1000 NaN -> -1000 +ddmng152 minmag -1 -NaN -> -1 +ddmng153 minmag -0 NaN -> -0 +ddmng154 minmag 0 -NaN -> 0 +ddmng155 minmag 1 NaN -> 1 +ddmng156 minmag 1000 NaN -> 1000 +ddmng157 minmag Inf NaN -> Infinity + +ddmng161 minmag sNaN -Inf -> NaN Invalid_operation +ddmng162 minmag sNaN -1000 -> NaN Invalid_operation +ddmng163 minmag sNaN -1 -> NaN Invalid_operation +ddmng164 minmag sNaN -0 -> NaN Invalid_operation +ddmng165 minmag -sNaN 0 -> -NaN Invalid_operation +ddmng166 minmag -sNaN 1 -> -NaN Invalid_operation +ddmng167 minmag sNaN 1000 -> NaN Invalid_operation +ddmng168 minmag sNaN NaN -> NaN Invalid_operation +ddmng169 minmag sNaN sNaN -> NaN Invalid_operation +ddmng170 minmag NaN sNaN -> NaN Invalid_operation +ddmng171 minmag -Inf sNaN -> NaN Invalid_operation +ddmng172 minmag -1000 sNaN -> NaN Invalid_operation +ddmng173 minmag -1 sNaN -> NaN Invalid_operation +ddmng174 minmag -0 sNaN -> NaN Invalid_operation +ddmng175 minmag 0 sNaN -> NaN Invalid_operation +ddmng176 minmag 1 sNaN -> NaN Invalid_operation +ddmng177 minmag 1000 sNaN -> NaN Invalid_operation +ddmng178 minmag Inf sNaN -> NaN Invalid_operation +ddmng179 minmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmng181 minmag NaN9 -Inf -> -Infinity +ddmng182 minmag -NaN8 9990 -> 9990 +ddmng183 minmag NaN71 Inf -> Infinity + +ddmng184 minmag NaN1 NaN54 -> NaN1 +ddmng185 minmag NaN22 -NaN53 -> NaN22 +ddmng186 minmag -NaN3 NaN6 -> -NaN3 +ddmng187 minmag -NaN44 NaN7 -> -NaN44 + +ddmng188 minmag -Inf NaN41 -> -Infinity +ddmng189 minmag -9999 -NaN33 -> -9999 +ddmng190 minmag Inf NaN2 -> Infinity + +ddmng191 minmag sNaN99 -Inf -> NaN99 Invalid_operation +ddmng192 minmag sNaN98 -11 -> NaN98 Invalid_operation +ddmng193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation +ddmng194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation +ddmng195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation +ddmng196 minmag -Inf sNaN92 -> NaN92 Invalid_operation +ddmng197 minmag 088 sNaN91 -> NaN91 Invalid_operation +ddmng198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation +ddmng199 minmag NaN sNaN86 -> NaN86 Invalid_operation + +-- old rounding checks +ddmng221 minmag -12345678000 1 -> 1 +ddmng222 minmag 1 -12345678000 -> 1 +ddmng223 minmag -1234567800 1 -> 1 +ddmng224 minmag 1 -1234567800 -> 1 +ddmng225 minmag -1234567890 1 -> 1 +ddmng226 minmag 1 -1234567890 -> 1 +ddmng227 minmag -1234567891 1 -> 1 +ddmng228 minmag 1 -1234567891 -> 1 +ddmng229 minmag -12345678901 1 -> 1 +ddmng230 minmag 1 -12345678901 -> 1 +ddmng231 minmag -1234567896 1 -> 1 +ddmng232 minmag 1 -1234567896 -> 1 +ddmng233 minmag 1234567891 1 -> 1 +ddmng234 minmag 1 1234567891 -> 1 +ddmng235 minmag 12345678901 1 -> 1 +ddmng236 minmag 1 12345678901 -> 1 +ddmng237 minmag 1234567896 1 -> 1 +ddmng238 minmag 1 1234567896 -> 1 + +-- from examples +ddmng280 minmag '3' '2' -> '2' +ddmng281 minmag '-10' '3' -> '3' +ddmng282 minmag '1.0' '1' -> '1.0' +ddmng283 minmag '1' '1.0' -> '1.0' +ddmng284 minmag '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +ddmng401 minmag Inf 1.1 -> 1.1 +ddmng402 minmag 1.1 1 -> 1 +ddmng403 minmag 1 1.0 -> 1.0 +ddmng404 minmag 1.0 0.1 -> 0.1 +ddmng405 minmag 0.1 0.10 -> 0.10 +ddmng406 minmag 0.10 0.100 -> 0.100 +ddmng407 minmag 0.10 0 -> 0 +ddmng408 minmag 0 0.0 -> 0.0 +ddmng409 minmag 0.0 -0 -> -0 +ddmng410 minmag 0.0 -0.0 -> -0.0 +ddmng411 minmag 0.00 -0.0 -> -0.0 +ddmng412 minmag 0.0 -0.00 -> -0.00 +ddmng413 minmag 0 -0.0 -> -0.0 +ddmng414 minmag 0 -0 -> -0 +ddmng415 minmag -0.0 -0 -> -0 +ddmng416 minmag -0 -0.100 -> -0 +ddmng417 minmag -0.100 -0.10 -> -0.10 +ddmng418 minmag -0.10 -0.1 -> -0.1 +ddmng419 minmag -0.1 -1.0 -> -0.1 +ddmng420 minmag -1.0 -1 -> -1 +ddmng421 minmag -1 -1.1 -> -1 +ddmng423 minmag -1.1 -Inf -> -1.1 +-- same with operands reversed +ddmng431 minmag 1.1 Inf -> 1.1 +ddmng432 minmag 1 1.1 -> 1 +ddmng433 minmag 1.0 1 -> 1.0 +ddmng434 minmag 0.1 1.0 -> 0.1 +ddmng435 minmag 0.10 0.1 -> 0.10 +ddmng436 minmag 0.100 0.10 -> 0.100 +ddmng437 minmag 0 0.10 -> 0 +ddmng438 minmag 0.0 0 -> 0.0 +ddmng439 minmag -0 0.0 -> -0 +ddmng440 minmag -0.0 0.0 -> -0.0 +ddmng441 minmag -0.0 0.00 -> -0.0 +ddmng442 minmag -0.00 0.0 -> -0.00 +ddmng443 minmag -0.0 0 -> -0.0 +ddmng444 minmag -0 0 -> -0 +ddmng445 minmag -0 -0.0 -> -0 +ddmng446 minmag -0.100 -0 -> -0 +ddmng447 minmag -0.10 -0.100 -> -0.10 +ddmng448 minmag -0.1 -0.10 -> -0.1 +ddmng449 minmag -1.0 -0.1 -> -0.1 +ddmng450 minmag -1 -1.0 -> -1 +ddmng451 minmag -1.1 -1 -> -1 +ddmng453 minmag -Inf -1.1 -> -1.1 +-- largies +ddmng460 minmag 1000 1E+3 -> 1000 +ddmng461 minmag 1E+3 1000 -> 1000 +ddmng462 minmag 1000 -1E+3 -> -1E+3 +ddmng463 minmag 1E+3 -384 -> -384 +ddmng464 minmag -384 1E+3 -> -384 +ddmng465 minmag -1E+3 1000 -> -1E+3 +ddmng466 minmag -384 -1E+3 -> -384 +ddmng467 minmag -1E+3 -384 -> -384 + +-- subnormals +ddmng510 minmag 1.00E-383 0 -> 0 +ddmng511 minmag 0.1E-383 0 -> 0 +ddmng512 minmag 0.10E-383 0 -> 0 +ddmng513 minmag 0.100E-383 0 -> 0 +ddmng514 minmag 0.01E-383 0 -> 0 +ddmng515 minmag 0.999E-383 0 -> 0 +ddmng516 minmag 0.099E-383 0 -> 0 +ddmng517 minmag 0.009E-383 0 -> 0 +ddmng518 minmag 0.001E-383 0 -> 0 +ddmng519 minmag 0.0009E-383 0 -> 0 +ddmng520 minmag 0.0001E-383 0 -> 0 + +ddmng530 minmag -1.00E-383 0 -> 0 +ddmng531 minmag -0.1E-383 0 -> 0 +ddmng532 minmag -0.10E-383 0 -> 0 +ddmng533 minmag -0.100E-383 0 -> 0 +ddmng534 minmag -0.01E-383 0 -> 0 +ddmng535 minmag -0.999E-383 0 -> 0 +ddmng536 minmag -0.099E-383 0 -> 0 +ddmng537 minmag -0.009E-383 0 -> 0 +ddmng538 minmag -0.001E-383 0 -> 0 +ddmng539 minmag -0.0009E-383 0 -> 0 +ddmng540 minmag -0.0001E-383 0 -> 0 + + +-- Null tests +ddmng900 minmag 10 # -> NaN Invalid_operation +ddmng901 minmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddMinus.decTest b/Lib/test/decimaltestdata/ddMinus.decTest index b7ffff7d897..2705e79ea25 100644 --- a/Lib/test/decimaltestdata/ddMinus.decTest +++ b/Lib/test/decimaltestdata/ddMinus.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddMinus.decTest -- decDouble 0-x -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddmns001 minus +7.50 -> -7.50 - --- Infinities -ddmns011 minus Infinity -> -Infinity -ddmns012 minus -Infinity -> Infinity - --- NaNs, 0 payload -ddmns021 minus NaN -> NaN -ddmns022 minus -NaN -> -NaN -ddmns023 minus sNaN -> NaN Invalid_operation -ddmns024 minus -sNaN -> -NaN Invalid_operation - --- NaNs, non-0 payload -ddmns031 minus NaN13 -> NaN13 -ddmns032 minus -NaN13 -> -NaN13 -ddmns033 minus sNaN13 -> NaN13 Invalid_operation -ddmns034 minus -sNaN13 -> -NaN13 Invalid_operation -ddmns035 minus NaN70 -> NaN70 -ddmns036 minus -NaN70 -> -NaN70 -ddmns037 minus sNaN101 -> NaN101 Invalid_operation -ddmns038 minus -sNaN101 -> -NaN101 Invalid_operation - --- finites -ddmns101 minus 7 -> -7 -ddmns102 minus -7 -> 7 -ddmns103 minus 75 -> -75 -ddmns104 minus -75 -> 75 -ddmns105 minus 7.50 -> -7.50 -ddmns106 minus -7.50 -> 7.50 -ddmns107 minus 7.500 -> -7.500 -ddmns108 minus -7.500 -> 7.500 - --- zeros -ddmns111 minus 0 -> 0 -ddmns112 minus -0 -> 0 -ddmns113 minus 0E+4 -> 0E+4 -ddmns114 minus -0E+4 -> 0E+4 -ddmns115 minus 0.0000 -> 0.0000 -ddmns116 minus -0.0000 -> 0.0000 -ddmns117 minus 0E-141 -> 0E-141 -ddmns118 minus -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddmns121 minus 2682682682682682 -> -2682682682682682 -ddmns122 minus -2682682682682682 -> 2682682682682682 -ddmns123 minus 1341341341341341 -> -1341341341341341 -ddmns124 minus -1341341341341341 -> 1341341341341341 - --- Nmax, Nmin, Ntiny -ddmns131 minus 9.999999999999999E+384 -> -9.999999999999999E+384 -ddmns132 minus 1E-383 -> -1E-383 -ddmns133 minus 1.000000000000000E-383 -> -1.000000000000000E-383 -ddmns134 minus 1E-398 -> -1E-398 Subnormal - -ddmns135 minus -1E-398 -> 1E-398 Subnormal -ddmns136 minus -1.000000000000000E-383 -> 1.000000000000000E-383 -ddmns137 minus -1E-383 -> 1E-383 -ddmns138 minus -9.999999999999999E+384 -> 9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddMinus.decTest -- decDouble 0-x -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddmns001 minus +7.50 -> -7.50 + +-- Infinities +ddmns011 minus Infinity -> -Infinity +ddmns012 minus -Infinity -> Infinity + +-- NaNs, 0 payload +ddmns021 minus NaN -> NaN +ddmns022 minus -NaN -> -NaN +ddmns023 minus sNaN -> NaN Invalid_operation +ddmns024 minus -sNaN -> -NaN Invalid_operation + +-- NaNs, non-0 payload +ddmns031 minus NaN13 -> NaN13 +ddmns032 minus -NaN13 -> -NaN13 +ddmns033 minus sNaN13 -> NaN13 Invalid_operation +ddmns034 minus -sNaN13 -> -NaN13 Invalid_operation +ddmns035 minus NaN70 -> NaN70 +ddmns036 minus -NaN70 -> -NaN70 +ddmns037 minus sNaN101 -> NaN101 Invalid_operation +ddmns038 minus -sNaN101 -> -NaN101 Invalid_operation + +-- finites +ddmns101 minus 7 -> -7 +ddmns102 minus -7 -> 7 +ddmns103 minus 75 -> -75 +ddmns104 minus -75 -> 75 +ddmns105 minus 7.50 -> -7.50 +ddmns106 minus -7.50 -> 7.50 +ddmns107 minus 7.500 -> -7.500 +ddmns108 minus -7.500 -> 7.500 + +-- zeros +ddmns111 minus 0 -> 0 +ddmns112 minus -0 -> 0 +ddmns113 minus 0E+4 -> 0E+4 +ddmns114 minus -0E+4 -> 0E+4 +ddmns115 minus 0.0000 -> 0.0000 +ddmns116 minus -0.0000 -> 0.0000 +ddmns117 minus 0E-141 -> 0E-141 +ddmns118 minus -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddmns121 minus 2682682682682682 -> -2682682682682682 +ddmns122 minus -2682682682682682 -> 2682682682682682 +ddmns123 minus 1341341341341341 -> -1341341341341341 +ddmns124 minus -1341341341341341 -> 1341341341341341 + +-- Nmax, Nmin, Ntiny +ddmns131 minus 9.999999999999999E+384 -> -9.999999999999999E+384 +ddmns132 minus 1E-383 -> -1E-383 +ddmns133 minus 1.000000000000000E-383 -> -1.000000000000000E-383 +ddmns134 minus 1E-398 -> -1E-398 Subnormal + +ddmns135 minus -1E-398 -> 1E-398 Subnormal +ddmns136 minus -1.000000000000000E-383 -> 1.000000000000000E-383 +ddmns137 minus -1E-383 -> 1E-383 +ddmns138 minus -9.999999999999999E+384 -> 9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddMultiply.decTest b/Lib/test/decimaltestdata/ddMultiply.decTest index fec0e12c637..b7342ac2fe7 100644 --- a/Lib/test/decimaltestdata/ddMultiply.decTest +++ b/Lib/test/decimaltestdata/ddMultiply.decTest @@ -1,553 +1,553 @@ ------------------------------------------------------------------------- --- ddMultiply.decTest -- decDouble multiplication -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decDoubles only; all arguments are --- representable in a decDouble -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddmul000 multiply 2 2 -> 4 -ddmul001 multiply 2 3 -> 6 -ddmul002 multiply 5 1 -> 5 -ddmul003 multiply 5 2 -> 10 -ddmul004 multiply 1.20 2 -> 2.40 -ddmul005 multiply 1.20 0 -> 0.00 -ddmul006 multiply 1.20 -2 -> -2.40 -ddmul007 multiply -1.20 2 -> -2.40 -ddmul008 multiply -1.20 0 -> -0.00 -ddmul009 multiply -1.20 -2 -> 2.40 -ddmul010 multiply 5.09 7.1 -> 36.139 -ddmul011 multiply 2.5 4 -> 10.0 -ddmul012 multiply 2.50 4 -> 10.00 -ddmul013 multiply 1.23456789 1.00000000 -> 1.234567890000000 Rounded -ddmul015 multiply 2.50 4 -> 10.00 -ddmul016 multiply 9.999999999 9.999999999 -> 99.99999998000000 Inexact Rounded -ddmul017 multiply 9.999999999 -9.999999999 -> -99.99999998000000 Inexact Rounded -ddmul018 multiply -9.999999999 9.999999999 -> -99.99999998000000 Inexact Rounded -ddmul019 multiply -9.999999999 -9.999999999 -> 99.99999998000000 Inexact Rounded - --- zeros, etc. -ddmul021 multiply 0 0 -> 0 -ddmul022 multiply 0 -0 -> -0 -ddmul023 multiply -0 0 -> -0 -ddmul024 multiply -0 -0 -> 0 -ddmul025 multiply -0.0 -0.0 -> 0.00 -ddmul026 multiply -0.0 -0.0 -> 0.00 -ddmul027 multiply -0.0 -0.0 -> 0.00 -ddmul028 multiply -0.0 -0.0 -> 0.00 -ddmul030 multiply 5.00 1E-3 -> 0.00500 -ddmul031 multiply 00.00 0.000 -> 0.00000 -ddmul032 multiply 00.00 0E-3 -> 0.00000 -- rhs is 0 -ddmul033 multiply 0E-3 00.00 -> 0.00000 -- lhs is 0 -ddmul034 multiply -5.00 1E-3 -> -0.00500 -ddmul035 multiply -00.00 0.000 -> -0.00000 -ddmul036 multiply -00.00 0E-3 -> -0.00000 -- rhs is 0 -ddmul037 multiply -0E-3 00.00 -> -0.00000 -- lhs is 0 -ddmul038 multiply 5.00 -1E-3 -> -0.00500 -ddmul039 multiply 00.00 -0.000 -> -0.00000 -ddmul040 multiply 00.00 -0E-3 -> -0.00000 -- rhs is 0 -ddmul041 multiply 0E-3 -00.00 -> -0.00000 -- lhs is 0 -ddmul042 multiply -5.00 -1E-3 -> 0.00500 -ddmul043 multiply -00.00 -0.000 -> 0.00000 -ddmul044 multiply -00.00 -0E-3 -> 0.00000 -- rhs is 0 -ddmul045 multiply -0E-3 -00.00 -> 0.00000 -- lhs is 0 - --- examples from decarith -ddmul050 multiply 1.20 3 -> 3.60 -ddmul051 multiply 7 3 -> 21 -ddmul052 multiply 0.9 0.8 -> 0.72 -ddmul053 multiply 0.9 -0 -> -0.0 -ddmul054 multiply 654321 654321 -> 428135971041 - -ddmul060 multiply 123.45 1e7 -> 1.2345E+9 -ddmul061 multiply 123.45 1e8 -> 1.2345E+10 -ddmul062 multiply 123.45 1e+9 -> 1.2345E+11 -ddmul063 multiply 123.45 1e10 -> 1.2345E+12 -ddmul064 multiply 123.45 1e11 -> 1.2345E+13 -ddmul065 multiply 123.45 1e12 -> 1.2345E+14 -ddmul066 multiply 123.45 1e13 -> 1.2345E+15 - - --- test some intermediate lengths --- 1234567890123456 -ddmul080 multiply 0.1 1230123456456789 -> 123012345645678.9 -ddmul084 multiply 0.1 1230123456456789 -> 123012345645678.9 -ddmul090 multiply 1230123456456789 0.1 -> 123012345645678.9 -ddmul094 multiply 1230123456456789 0.1 -> 123012345645678.9 - --- test some more edge cases and carries -ddmul101 multiply 9 9 -> 81 -ddmul102 multiply 9 90 -> 810 -ddmul103 multiply 9 900 -> 8100 -ddmul104 multiply 9 9000 -> 81000 -ddmul105 multiply 9 90000 -> 810000 -ddmul106 multiply 9 900000 -> 8100000 -ddmul107 multiply 9 9000000 -> 81000000 -ddmul108 multiply 9 90000000 -> 810000000 -ddmul109 multiply 9 900000000 -> 8100000000 -ddmul110 multiply 9 9000000000 -> 81000000000 -ddmul111 multiply 9 90000000000 -> 810000000000 -ddmul112 multiply 9 900000000000 -> 8100000000000 -ddmul113 multiply 9 9000000000000 -> 81000000000000 -ddmul114 multiply 9 90000000000000 -> 810000000000000 -ddmul115 multiply 9 900000000000000 -> 8100000000000000 ---ddmul116 multiply 9 9000000000000000 -> 81000000000000000 ---ddmul117 multiply 9 90000000000000000 -> 810000000000000000 ---ddmul118 multiply 9 900000000000000000 -> 8100000000000000000 ---ddmul119 multiply 9 9000000000000000000 -> 81000000000000000000 ---ddmul120 multiply 9 90000000000000000000 -> 810000000000000000000 ---ddmul121 multiply 9 900000000000000000000 -> 8100000000000000000000 ---ddmul122 multiply 9 9000000000000000000000 -> 81000000000000000000000 ---ddmul123 multiply 9 90000000000000000000000 -> 810000000000000000000000 --- test some more edge cases without carries -ddmul131 multiply 3 3 -> 9 -ddmul132 multiply 3 30 -> 90 -ddmul133 multiply 3 300 -> 900 -ddmul134 multiply 3 3000 -> 9000 -ddmul135 multiply 3 30000 -> 90000 -ddmul136 multiply 3 300000 -> 900000 -ddmul137 multiply 3 3000000 -> 9000000 -ddmul138 multiply 3 30000000 -> 90000000 -ddmul139 multiply 3 300000000 -> 900000000 -ddmul140 multiply 3 3000000000 -> 9000000000 -ddmul141 multiply 3 30000000000 -> 90000000000 -ddmul142 multiply 3 300000000000 -> 900000000000 -ddmul143 multiply 3 3000000000000 -> 9000000000000 -ddmul144 multiply 3 30000000000000 -> 90000000000000 -ddmul145 multiply 3 300000000000000 -> 900000000000000 - --- test some edge cases with exact rounding -ddmul301 multiply 9 9 -> 81 -ddmul302 multiply 9 90 -> 810 -ddmul303 multiply 9 900 -> 8100 -ddmul304 multiply 9 9000 -> 81000 -ddmul305 multiply 9 90000 -> 810000 -ddmul306 multiply 9 900000 -> 8100000 -ddmul307 multiply 9 9000000 -> 81000000 -ddmul308 multiply 9 90000000 -> 810000000 -ddmul309 multiply 9 900000000 -> 8100000000 -ddmul310 multiply 9 9000000000 -> 81000000000 -ddmul311 multiply 9 90000000000 -> 810000000000 -ddmul312 multiply 9 900000000000 -> 8100000000000 -ddmul313 multiply 9 9000000000000 -> 81000000000000 -ddmul314 multiply 9 90000000000000 -> 810000000000000 -ddmul315 multiply 9 900000000000000 -> 8100000000000000 -ddmul316 multiply 9 9000000000000000 -> 8.100000000000000E+16 Rounded -ddmul317 multiply 90 9000000000000000 -> 8.100000000000000E+17 Rounded -ddmul318 multiply 900 9000000000000000 -> 8.100000000000000E+18 Rounded -ddmul319 multiply 9000 9000000000000000 -> 8.100000000000000E+19 Rounded -ddmul320 multiply 90000 9000000000000000 -> 8.100000000000000E+20 Rounded -ddmul321 multiply 900000 9000000000000000 -> 8.100000000000000E+21 Rounded -ddmul322 multiply 9000000 9000000000000000 -> 8.100000000000000E+22 Rounded -ddmul323 multiply 90000000 9000000000000000 -> 8.100000000000000E+23 Rounded - --- tryzeros cases -ddmul504 multiply 0E-260 1000E-260 -> 0E-398 Clamped -ddmul505 multiply 100E+260 0E+260 -> 0E+369 Clamped --- 65K-1 case -ddmul506 multiply 77.1 850 -> 65535.0 - --- mixed with zeros -ddmul541 multiply 0 -1 -> -0 -ddmul542 multiply -0 -1 -> 0 -ddmul543 multiply 0 1 -> 0 -ddmul544 multiply -0 1 -> -0 -ddmul545 multiply -1 0 -> -0 -ddmul546 multiply -1 -0 -> 0 -ddmul547 multiply 1 0 -> 0 -ddmul548 multiply 1 -0 -> -0 - -ddmul551 multiply 0.0 -1 -> -0.0 -ddmul552 multiply -0.0 -1 -> 0.0 -ddmul553 multiply 0.0 1 -> 0.0 -ddmul554 multiply -0.0 1 -> -0.0 -ddmul555 multiply -1.0 0 -> -0.0 -ddmul556 multiply -1.0 -0 -> 0.0 -ddmul557 multiply 1.0 0 -> 0.0 -ddmul558 multiply 1.0 -0 -> -0.0 - -ddmul561 multiply 0 -1.0 -> -0.0 -ddmul562 multiply -0 -1.0 -> 0.0 -ddmul563 multiply 0 1.0 -> 0.0 -ddmul564 multiply -0 1.0 -> -0.0 -ddmul565 multiply -1 0.0 -> -0.0 -ddmul566 multiply -1 -0.0 -> 0.0 -ddmul567 multiply 1 0.0 -> 0.0 -ddmul568 multiply 1 -0.0 -> -0.0 - -ddmul571 multiply 0.0 -1.0 -> -0.00 -ddmul572 multiply -0.0 -1.0 -> 0.00 -ddmul573 multiply 0.0 1.0 -> 0.00 -ddmul574 multiply -0.0 1.0 -> -0.00 -ddmul575 multiply -1.0 0.0 -> -0.00 -ddmul576 multiply -1.0 -0.0 -> 0.00 -ddmul577 multiply 1.0 0.0 -> 0.00 -ddmul578 multiply 1.0 -0.0 -> -0.00 - - --- Specials -ddmul580 multiply Inf -Inf -> -Infinity -ddmul581 multiply Inf -1000 -> -Infinity -ddmul582 multiply Inf -1 -> -Infinity -ddmul583 multiply Inf -0 -> NaN Invalid_operation -ddmul584 multiply Inf 0 -> NaN Invalid_operation -ddmul585 multiply Inf 1 -> Infinity -ddmul586 multiply Inf 1000 -> Infinity -ddmul587 multiply Inf Inf -> Infinity -ddmul588 multiply -1000 Inf -> -Infinity -ddmul589 multiply -Inf Inf -> -Infinity -ddmul590 multiply -1 Inf -> -Infinity -ddmul591 multiply -0 Inf -> NaN Invalid_operation -ddmul592 multiply 0 Inf -> NaN Invalid_operation -ddmul593 multiply 1 Inf -> Infinity -ddmul594 multiply 1000 Inf -> Infinity -ddmul595 multiply Inf Inf -> Infinity - -ddmul600 multiply -Inf -Inf -> Infinity -ddmul601 multiply -Inf -1000 -> Infinity -ddmul602 multiply -Inf -1 -> Infinity -ddmul603 multiply -Inf -0 -> NaN Invalid_operation -ddmul604 multiply -Inf 0 -> NaN Invalid_operation -ddmul605 multiply -Inf 1 -> -Infinity -ddmul606 multiply -Inf 1000 -> -Infinity -ddmul607 multiply -Inf Inf -> -Infinity -ddmul608 multiply -1000 Inf -> -Infinity -ddmul609 multiply -Inf -Inf -> Infinity -ddmul610 multiply -1 -Inf -> Infinity -ddmul611 multiply -0 -Inf -> NaN Invalid_operation -ddmul612 multiply 0 -Inf -> NaN Invalid_operation -ddmul613 multiply 1 -Inf -> -Infinity -ddmul614 multiply 1000 -Inf -> -Infinity -ddmul615 multiply Inf -Inf -> -Infinity - -ddmul621 multiply NaN -Inf -> NaN -ddmul622 multiply NaN -1000 -> NaN -ddmul623 multiply NaN -1 -> NaN -ddmul624 multiply NaN -0 -> NaN -ddmul625 multiply NaN 0 -> NaN -ddmul626 multiply NaN 1 -> NaN -ddmul627 multiply NaN 1000 -> NaN -ddmul628 multiply NaN Inf -> NaN -ddmul629 multiply NaN NaN -> NaN -ddmul630 multiply -Inf NaN -> NaN -ddmul631 multiply -1000 NaN -> NaN -ddmul632 multiply -1 NaN -> NaN -ddmul633 multiply -0 NaN -> NaN -ddmul634 multiply 0 NaN -> NaN -ddmul635 multiply 1 NaN -> NaN -ddmul636 multiply 1000 NaN -> NaN -ddmul637 multiply Inf NaN -> NaN - -ddmul641 multiply sNaN -Inf -> NaN Invalid_operation -ddmul642 multiply sNaN -1000 -> NaN Invalid_operation -ddmul643 multiply sNaN -1 -> NaN Invalid_operation -ddmul644 multiply sNaN -0 -> NaN Invalid_operation -ddmul645 multiply sNaN 0 -> NaN Invalid_operation -ddmul646 multiply sNaN 1 -> NaN Invalid_operation -ddmul647 multiply sNaN 1000 -> NaN Invalid_operation -ddmul648 multiply sNaN NaN -> NaN Invalid_operation -ddmul649 multiply sNaN sNaN -> NaN Invalid_operation -ddmul650 multiply NaN sNaN -> NaN Invalid_operation -ddmul651 multiply -Inf sNaN -> NaN Invalid_operation -ddmul652 multiply -1000 sNaN -> NaN Invalid_operation -ddmul653 multiply -1 sNaN -> NaN Invalid_operation -ddmul654 multiply -0 sNaN -> NaN Invalid_operation -ddmul655 multiply 0 sNaN -> NaN Invalid_operation -ddmul656 multiply 1 sNaN -> NaN Invalid_operation -ddmul657 multiply 1000 sNaN -> NaN Invalid_operation -ddmul658 multiply Inf sNaN -> NaN Invalid_operation -ddmul659 multiply NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddmul661 multiply NaN9 -Inf -> NaN9 -ddmul662 multiply NaN8 999 -> NaN8 -ddmul663 multiply NaN71 Inf -> NaN71 -ddmul664 multiply NaN6 NaN5 -> NaN6 -ddmul665 multiply -Inf NaN4 -> NaN4 -ddmul666 multiply -999 NaN33 -> NaN33 -ddmul667 multiply Inf NaN2 -> NaN2 - -ddmul671 multiply sNaN99 -Inf -> NaN99 Invalid_operation -ddmul672 multiply sNaN98 -11 -> NaN98 Invalid_operation -ddmul673 multiply sNaN97 NaN -> NaN97 Invalid_operation -ddmul674 multiply sNaN16 sNaN94 -> NaN16 Invalid_operation -ddmul675 multiply NaN95 sNaN93 -> NaN93 Invalid_operation -ddmul676 multiply -Inf sNaN92 -> NaN92 Invalid_operation -ddmul677 multiply 088 sNaN91 -> NaN91 Invalid_operation -ddmul678 multiply Inf sNaN90 -> NaN90 Invalid_operation -ddmul679 multiply NaN sNaN89 -> NaN89 Invalid_operation - -ddmul681 multiply -NaN9 -Inf -> -NaN9 -ddmul682 multiply -NaN8 999 -> -NaN8 -ddmul683 multiply -NaN71 Inf -> -NaN71 -ddmul684 multiply -NaN6 -NaN5 -> -NaN6 -ddmul685 multiply -Inf -NaN4 -> -NaN4 -ddmul686 multiply -999 -NaN33 -> -NaN33 -ddmul687 multiply Inf -NaN2 -> -NaN2 - -ddmul691 multiply -sNaN99 -Inf -> -NaN99 Invalid_operation -ddmul692 multiply -sNaN98 -11 -> -NaN98 Invalid_operation -ddmul693 multiply -sNaN97 NaN -> -NaN97 Invalid_operation -ddmul694 multiply -sNaN16 -sNaN94 -> -NaN16 Invalid_operation -ddmul695 multiply -NaN95 -sNaN93 -> -NaN93 Invalid_operation -ddmul696 multiply -Inf -sNaN92 -> -NaN92 Invalid_operation -ddmul697 multiply 088 -sNaN91 -> -NaN91 Invalid_operation -ddmul698 multiply Inf -sNaN90 -> -NaN90 Invalid_operation -ddmul699 multiply -NaN -sNaN89 -> -NaN89 Invalid_operation - -ddmul701 multiply -NaN -Inf -> -NaN -ddmul702 multiply -NaN 999 -> -NaN -ddmul703 multiply -NaN Inf -> -NaN -ddmul704 multiply -NaN -NaN -> -NaN -ddmul705 multiply -Inf -NaN0 -> -NaN -ddmul706 multiply -999 -NaN -> -NaN -ddmul707 multiply Inf -NaN -> -NaN - -ddmul711 multiply -sNaN -Inf -> -NaN Invalid_operation -ddmul712 multiply -sNaN -11 -> -NaN Invalid_operation -ddmul713 multiply -sNaN00 NaN -> -NaN Invalid_operation -ddmul714 multiply -sNaN -sNaN -> -NaN Invalid_operation -ddmul715 multiply -NaN -sNaN -> -NaN Invalid_operation -ddmul716 multiply -Inf -sNaN -> -NaN Invalid_operation -ddmul717 multiply 088 -sNaN -> -NaN Invalid_operation -ddmul718 multiply Inf -sNaN -> -NaN Invalid_operation -ddmul719 multiply -NaN -sNaN -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results --- signs -ddmul751 multiply 1e+277 1e+311 -> Infinity Overflow Inexact Rounded -ddmul752 multiply 1e+277 -1e+311 -> -Infinity Overflow Inexact Rounded -ddmul753 multiply -1e+277 1e+311 -> -Infinity Overflow Inexact Rounded -ddmul754 multiply -1e+277 -1e+311 -> Infinity Overflow Inexact Rounded -ddmul755 multiply 1e-277 1e-311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul756 multiply 1e-277 -1e-311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul757 multiply -1e-277 1e-311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul758 multiply -1e-277 -1e-311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -ddmul760 multiply 1e-291 1e-101 -> 1E-392 Subnormal -ddmul761 multiply 1e-291 1e-102 -> 1E-393 Subnormal -ddmul762 multiply 1e-291 1e-103 -> 1E-394 Subnormal -ddmul763 multiply 1e-291 1e-104 -> 1E-395 Subnormal -ddmul764 multiply 1e-291 1e-105 -> 1E-396 Subnormal -ddmul765 multiply 1e-291 1e-106 -> 1E-397 Subnormal -ddmul766 multiply 1e-291 1e-107 -> 1E-398 Subnormal -ddmul767 multiply 1e-291 1e-108 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul768 multiply 1e-291 1e-109 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul769 multiply 1e-291 1e-110 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -ddmul770 multiply 1e+60 1e+321 -> 1.000000000000E+381 Clamped -ddmul771 multiply 1e+60 1e+322 -> 1.0000000000000E+382 Clamped -ddmul772 multiply 1e+60 1e+323 -> 1.00000000000000E+383 Clamped -ddmul773 multiply 1e+60 1e+324 -> 1.000000000000000E+384 Clamped -ddmul774 multiply 1e+60 1e+325 -> Infinity Overflow Inexact Rounded -ddmul775 multiply 1e+60 1e+326 -> Infinity Overflow Inexact Rounded -ddmul776 multiply 1e+60 1e+327 -> Infinity Overflow Inexact Rounded -ddmul777 multiply 1e+60 1e+328 -> Infinity Overflow Inexact Rounded -ddmul778 multiply 1e+60 1e+329 -> Infinity Overflow Inexact Rounded -ddmul779 multiply 1e+60 1e+330 -> Infinity Overflow Inexact Rounded - -ddmul801 multiply 1.0000E-394 1 -> 1.0000E-394 Subnormal -ddmul802 multiply 1.000E-394 1e-1 -> 1.000E-395 Subnormal -ddmul803 multiply 1.00E-394 1e-2 -> 1.00E-396 Subnormal -ddmul804 multiply 1.0E-394 1e-3 -> 1.0E-397 Subnormal -ddmul805 multiply 1.0E-394 1e-4 -> 1E-398 Subnormal Rounded -ddmul806 multiply 1.3E-394 1e-4 -> 1E-398 Underflow Subnormal Inexact Rounded -ddmul807 multiply 1.5E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul808 multiply 1.7E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul809 multiply 2.3E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul810 multiply 2.5E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul811 multiply 2.7E-394 1e-4 -> 3E-398 Underflow Subnormal Inexact Rounded -ddmul812 multiply 1.49E-394 1e-4 -> 1E-398 Underflow Subnormal Inexact Rounded -ddmul813 multiply 1.50E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul814 multiply 1.51E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul815 multiply 2.49E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul816 multiply 2.50E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded -ddmul817 multiply 2.51E-394 1e-4 -> 3E-398 Underflow Subnormal Inexact Rounded - -ddmul818 multiply 1E-394 1e-4 -> 1E-398 Subnormal -ddmul819 multiply 3E-394 1e-5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul820 multiply 5E-394 1e-5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul821 multiply 7E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded -ddmul822 multiply 9E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded -ddmul823 multiply 9.9E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded - -ddmul824 multiply 1E-394 -1e-4 -> -1E-398 Subnormal -ddmul825 multiply 3E-394 -1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul826 multiply -5E-394 1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul827 multiply 7E-394 -1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded -ddmul828 multiply -9E-394 1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded -ddmul829 multiply 9.9E-394 -1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded -ddmul830 multiply 3.0E-394 -1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped - -ddmul831 multiply 1.0E-199 1e-200 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddmul832 multiply 1.0E-199 1e-199 -> 1E-398 Subnormal Rounded -ddmul833 multiply 1.0E-199 1e-198 -> 1.0E-397 Subnormal -ddmul834 multiply 2.0E-199 2e-198 -> 4.0E-397 Subnormal -ddmul835 multiply 4.0E-199 4e-198 -> 1.60E-396 Subnormal -ddmul836 multiply 10.0E-199 10e-198 -> 1.000E-395 Subnormal -ddmul837 multiply 30.0E-199 30e-198 -> 9.000E-395 Subnormal -ddmul838 multiply 40.0E-199 40e-188 -> 1.6000E-384 Subnormal -ddmul839 multiply 40.0E-199 40e-187 -> 1.6000E-383 -ddmul840 multiply 40.0E-199 40e-186 -> 1.6000E-382 - --- Long operand overflow may be a different path -ddmul870 multiply 100 9.999E+383 -> Infinity Inexact Overflow Rounded -ddmul871 multiply 100 -9.999E+383 -> -Infinity Inexact Overflow Rounded -ddmul872 multiply 9.999E+383 100 -> Infinity Inexact Overflow Rounded -ddmul873 multiply -9.999E+383 100 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -ddmul881 multiply 1.2347E-355 1.2347E-40 -> 1.524E-395 Inexact Rounded Subnormal Underflow -ddmul882 multiply 1.234E-355 1.234E-40 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddmul883 multiply 1.23E-355 1.23E-40 -> 1.513E-395 Inexact Rounded Subnormal Underflow -ddmul884 multiply 1.2E-355 1.2E-40 -> 1.44E-395 Subnormal -ddmul885 multiply 1.2E-355 1.2E-41 -> 1.44E-396 Subnormal -ddmul886 multiply 1.2E-355 1.2E-42 -> 1.4E-397 Subnormal Inexact Rounded Underflow -ddmul887 multiply 1.2E-355 1.3E-42 -> 1.6E-397 Subnormal Inexact Rounded Underflow -ddmul888 multiply 1.3E-355 1.3E-42 -> 1.7E-397 Subnormal Inexact Rounded Underflow -ddmul889 multiply 1.3E-355 1.3E-43 -> 2E-398 Subnormal Inexact Rounded Underflow -ddmul890 multiply 1.3E-356 1.3E-43 -> 0E-398 Clamped Subnormal Inexact Rounded Underflow - -ddmul891 multiply 1.2345E-39 1.234E-355 -> 1.5234E-394 Inexact Rounded Subnormal Underflow -ddmul892 multiply 1.23456E-39 1.234E-355 -> 1.5234E-394 Inexact Rounded Subnormal Underflow -ddmul893 multiply 1.2345E-40 1.234E-355 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddmul894 multiply 1.23456E-40 1.234E-355 -> 1.523E-395 Inexact Rounded Subnormal Underflow -ddmul895 multiply 1.2345E-41 1.234E-355 -> 1.52E-396 Inexact Rounded Subnormal Underflow -ddmul896 multiply 1.23456E-41 1.234E-355 -> 1.52E-396 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow --- 1 234567890123456 -ddmul900 multiply 0.3000000000E-191 0.3000000000E-191 -> 9.00000000000000E-384 Subnormal Rounded -ddmul901 multiply 0.3000000001E-191 0.3000000001E-191 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded -ddmul902 multiply 9.999999999999999E-383 0.0999999999999 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded -ddmul903 multiply 9.999999999999999E-383 0.09999999999999 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded -ddmul904 multiply 9.999999999999999E-383 0.099999999999999 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded -ddmul905 multiply 9.999999999999999E-383 0.0999999999999999 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded --- The next rounds to Nmin (b**emin); this is the distinguishing case --- for detecting tininess (before or after rounding) -- if after --- rounding then the result would be the same, but the Underflow flag --- would not be set -ddmul906 multiply 9.999999999999999E-383 0.09999999999999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded --- prove those operands were exact -ddmul907 multiply 9.999999999999999E-383 1 -> 9.999999999999999E-383 -ddmul908 multiply 1 0.09999999999999999 -> 0.09999999999999999 - --- reducing tiniest -ddmul910 multiply 1e-398 0.99 -> 1E-398 Subnormal Inexact Rounded Underflow -ddmul911 multiply 1e-398 0.75 -> 1E-398 Subnormal Inexact Rounded Underflow -ddmul912 multiply 1e-398 0.5 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -ddmul913 multiply 1e-398 0.25 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -ddmul914 multiply 1e-398 0.01 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped - --- hugest -ddmul920 multiply 9999999999999999 9999999999999999 -> 9.999999999999998E+31 Inexact Rounded - --- power-of-ten edge cases -ddmul1001 multiply 1 10 -> 10 -ddmul1002 multiply 1 100 -> 100 -ddmul1003 multiply 1 1000 -> 1000 -ddmul1004 multiply 1 10000 -> 10000 -ddmul1005 multiply 1 100000 -> 100000 -ddmul1006 multiply 1 1000000 -> 1000000 -ddmul1007 multiply 1 10000000 -> 10000000 -ddmul1008 multiply 1 100000000 -> 100000000 -ddmul1009 multiply 1 1000000000 -> 1000000000 -ddmul1010 multiply 1 10000000000 -> 10000000000 -ddmul1011 multiply 1 100000000000 -> 100000000000 -ddmul1012 multiply 1 1000000000000 -> 1000000000000 -ddmul1013 multiply 1 10000000000000 -> 10000000000000 -ddmul1014 multiply 1 100000000000000 -> 100000000000000 -ddmul1015 multiply 1 1000000000000000 -> 1000000000000000 -ddmul1021 multiply 10 1 -> 10 -ddmul1022 multiply 10 10 -> 100 -ddmul1023 multiply 10 100 -> 1000 -ddmul1024 multiply 10 1000 -> 10000 -ddmul1025 multiply 10 10000 -> 100000 -ddmul1026 multiply 10 100000 -> 1000000 -ddmul1027 multiply 10 1000000 -> 10000000 -ddmul1028 multiply 10 10000000 -> 100000000 -ddmul1029 multiply 10 100000000 -> 1000000000 -ddmul1030 multiply 10 1000000000 -> 10000000000 -ddmul1031 multiply 10 10000000000 -> 100000000000 -ddmul1032 multiply 10 100000000000 -> 1000000000000 -ddmul1033 multiply 10 1000000000000 -> 10000000000000 -ddmul1034 multiply 10 10000000000000 -> 100000000000000 -ddmul1035 multiply 10 100000000000000 -> 1000000000000000 -ddmul1041 multiply 100 0.1 -> 10.0 -ddmul1042 multiply 100 1 -> 100 -ddmul1043 multiply 100 10 -> 1000 -ddmul1044 multiply 100 100 -> 10000 -ddmul1045 multiply 100 1000 -> 100000 -ddmul1046 multiply 100 10000 -> 1000000 -ddmul1047 multiply 100 100000 -> 10000000 -ddmul1048 multiply 100 1000000 -> 100000000 -ddmul1049 multiply 100 10000000 -> 1000000000 -ddmul1050 multiply 100 100000000 -> 10000000000 -ddmul1051 multiply 100 1000000000 -> 100000000000 -ddmul1052 multiply 100 10000000000 -> 1000000000000 -ddmul1053 multiply 100 100000000000 -> 10000000000000 -ddmul1054 multiply 100 1000000000000 -> 100000000000000 -ddmul1055 multiply 100 10000000000000 -> 1000000000000000 -ddmul1061 multiply 1000 0.01 -> 10.00 -ddmul1062 multiply 1000 0.1 -> 100.0 -ddmul1063 multiply 1000 1 -> 1000 -ddmul1064 multiply 1000 10 -> 10000 -ddmul1065 multiply 1000 100 -> 100000 -ddmul1066 multiply 1000 1000 -> 1000000 -ddmul1067 multiply 1000 10000 -> 10000000 -ddmul1068 multiply 1000 100000 -> 100000000 -ddmul1069 multiply 1000 1000000 -> 1000000000 -ddmul1070 multiply 1000 10000000 -> 10000000000 -ddmul1071 multiply 1000 100000000 -> 100000000000 -ddmul1072 multiply 1000 1000000000 -> 1000000000000 -ddmul1073 multiply 1000 10000000000 -> 10000000000000 -ddmul1074 multiply 1000 100000000000 -> 100000000000000 -ddmul1075 multiply 1000 1000000000000 -> 1000000000000000 -ddmul1081 multiply 10000 0.001 -> 10.000 -ddmul1082 multiply 10000 0.01 -> 100.00 -ddmul1083 multiply 10000 0.1 -> 1000.0 -ddmul1084 multiply 10000 1 -> 10000 -ddmul1085 multiply 10000 10 -> 100000 -ddmul1086 multiply 10000 100 -> 1000000 -ddmul1087 multiply 10000 1000 -> 10000000 -ddmul1088 multiply 10000 10000 -> 100000000 -ddmul1089 multiply 10000 100000 -> 1000000000 -ddmul1090 multiply 10000 1000000 -> 10000000000 -ddmul1091 multiply 10000 10000000 -> 100000000000 -ddmul1092 multiply 10000 100000000 -> 1000000000000 -ddmul1093 multiply 10000 1000000000 -> 10000000000000 -ddmul1094 multiply 10000 10000000000 -> 100000000000000 -ddmul1095 multiply 10000 100000000000 -> 1000000000000000 - -ddmul1097 multiply 10000 99999999999 -> 999999999990000 -ddmul1098 multiply 10000 99999999999 -> 999999999990000 - - --- Null tests -ddmul9990 multiply 10 # -> NaN Invalid_operation -ddmul9991 multiply # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddMultiply.decTest -- decDouble multiplication -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decDoubles only; all arguments are +-- representable in a decDouble +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddmul000 multiply 2 2 -> 4 +ddmul001 multiply 2 3 -> 6 +ddmul002 multiply 5 1 -> 5 +ddmul003 multiply 5 2 -> 10 +ddmul004 multiply 1.20 2 -> 2.40 +ddmul005 multiply 1.20 0 -> 0.00 +ddmul006 multiply 1.20 -2 -> -2.40 +ddmul007 multiply -1.20 2 -> -2.40 +ddmul008 multiply -1.20 0 -> -0.00 +ddmul009 multiply -1.20 -2 -> 2.40 +ddmul010 multiply 5.09 7.1 -> 36.139 +ddmul011 multiply 2.5 4 -> 10.0 +ddmul012 multiply 2.50 4 -> 10.00 +ddmul013 multiply 1.23456789 1.00000000 -> 1.234567890000000 Rounded +ddmul015 multiply 2.50 4 -> 10.00 +ddmul016 multiply 9.999999999 9.999999999 -> 99.99999998000000 Inexact Rounded +ddmul017 multiply 9.999999999 -9.999999999 -> -99.99999998000000 Inexact Rounded +ddmul018 multiply -9.999999999 9.999999999 -> -99.99999998000000 Inexact Rounded +ddmul019 multiply -9.999999999 -9.999999999 -> 99.99999998000000 Inexact Rounded + +-- zeros, etc. +ddmul021 multiply 0 0 -> 0 +ddmul022 multiply 0 -0 -> -0 +ddmul023 multiply -0 0 -> -0 +ddmul024 multiply -0 -0 -> 0 +ddmul025 multiply -0.0 -0.0 -> 0.00 +ddmul026 multiply -0.0 -0.0 -> 0.00 +ddmul027 multiply -0.0 -0.0 -> 0.00 +ddmul028 multiply -0.0 -0.0 -> 0.00 +ddmul030 multiply 5.00 1E-3 -> 0.00500 +ddmul031 multiply 00.00 0.000 -> 0.00000 +ddmul032 multiply 00.00 0E-3 -> 0.00000 -- rhs is 0 +ddmul033 multiply 0E-3 00.00 -> 0.00000 -- lhs is 0 +ddmul034 multiply -5.00 1E-3 -> -0.00500 +ddmul035 multiply -00.00 0.000 -> -0.00000 +ddmul036 multiply -00.00 0E-3 -> -0.00000 -- rhs is 0 +ddmul037 multiply -0E-3 00.00 -> -0.00000 -- lhs is 0 +ddmul038 multiply 5.00 -1E-3 -> -0.00500 +ddmul039 multiply 00.00 -0.000 -> -0.00000 +ddmul040 multiply 00.00 -0E-3 -> -0.00000 -- rhs is 0 +ddmul041 multiply 0E-3 -00.00 -> -0.00000 -- lhs is 0 +ddmul042 multiply -5.00 -1E-3 -> 0.00500 +ddmul043 multiply -00.00 -0.000 -> 0.00000 +ddmul044 multiply -00.00 -0E-3 -> 0.00000 -- rhs is 0 +ddmul045 multiply -0E-3 -00.00 -> 0.00000 -- lhs is 0 + +-- examples from decarith +ddmul050 multiply 1.20 3 -> 3.60 +ddmul051 multiply 7 3 -> 21 +ddmul052 multiply 0.9 0.8 -> 0.72 +ddmul053 multiply 0.9 -0 -> -0.0 +ddmul054 multiply 654321 654321 -> 428135971041 + +ddmul060 multiply 123.45 1e7 -> 1.2345E+9 +ddmul061 multiply 123.45 1e8 -> 1.2345E+10 +ddmul062 multiply 123.45 1e+9 -> 1.2345E+11 +ddmul063 multiply 123.45 1e10 -> 1.2345E+12 +ddmul064 multiply 123.45 1e11 -> 1.2345E+13 +ddmul065 multiply 123.45 1e12 -> 1.2345E+14 +ddmul066 multiply 123.45 1e13 -> 1.2345E+15 + + +-- test some intermediate lengths +-- 1234567890123456 +ddmul080 multiply 0.1 1230123456456789 -> 123012345645678.9 +ddmul084 multiply 0.1 1230123456456789 -> 123012345645678.9 +ddmul090 multiply 1230123456456789 0.1 -> 123012345645678.9 +ddmul094 multiply 1230123456456789 0.1 -> 123012345645678.9 + +-- test some more edge cases and carries +ddmul101 multiply 9 9 -> 81 +ddmul102 multiply 9 90 -> 810 +ddmul103 multiply 9 900 -> 8100 +ddmul104 multiply 9 9000 -> 81000 +ddmul105 multiply 9 90000 -> 810000 +ddmul106 multiply 9 900000 -> 8100000 +ddmul107 multiply 9 9000000 -> 81000000 +ddmul108 multiply 9 90000000 -> 810000000 +ddmul109 multiply 9 900000000 -> 8100000000 +ddmul110 multiply 9 9000000000 -> 81000000000 +ddmul111 multiply 9 90000000000 -> 810000000000 +ddmul112 multiply 9 900000000000 -> 8100000000000 +ddmul113 multiply 9 9000000000000 -> 81000000000000 +ddmul114 multiply 9 90000000000000 -> 810000000000000 +ddmul115 multiply 9 900000000000000 -> 8100000000000000 +--ddmul116 multiply 9 9000000000000000 -> 81000000000000000 +--ddmul117 multiply 9 90000000000000000 -> 810000000000000000 +--ddmul118 multiply 9 900000000000000000 -> 8100000000000000000 +--ddmul119 multiply 9 9000000000000000000 -> 81000000000000000000 +--ddmul120 multiply 9 90000000000000000000 -> 810000000000000000000 +--ddmul121 multiply 9 900000000000000000000 -> 8100000000000000000000 +--ddmul122 multiply 9 9000000000000000000000 -> 81000000000000000000000 +--ddmul123 multiply 9 90000000000000000000000 -> 810000000000000000000000 +-- test some more edge cases without carries +ddmul131 multiply 3 3 -> 9 +ddmul132 multiply 3 30 -> 90 +ddmul133 multiply 3 300 -> 900 +ddmul134 multiply 3 3000 -> 9000 +ddmul135 multiply 3 30000 -> 90000 +ddmul136 multiply 3 300000 -> 900000 +ddmul137 multiply 3 3000000 -> 9000000 +ddmul138 multiply 3 30000000 -> 90000000 +ddmul139 multiply 3 300000000 -> 900000000 +ddmul140 multiply 3 3000000000 -> 9000000000 +ddmul141 multiply 3 30000000000 -> 90000000000 +ddmul142 multiply 3 300000000000 -> 900000000000 +ddmul143 multiply 3 3000000000000 -> 9000000000000 +ddmul144 multiply 3 30000000000000 -> 90000000000000 +ddmul145 multiply 3 300000000000000 -> 900000000000000 + +-- test some edge cases with exact rounding +ddmul301 multiply 9 9 -> 81 +ddmul302 multiply 9 90 -> 810 +ddmul303 multiply 9 900 -> 8100 +ddmul304 multiply 9 9000 -> 81000 +ddmul305 multiply 9 90000 -> 810000 +ddmul306 multiply 9 900000 -> 8100000 +ddmul307 multiply 9 9000000 -> 81000000 +ddmul308 multiply 9 90000000 -> 810000000 +ddmul309 multiply 9 900000000 -> 8100000000 +ddmul310 multiply 9 9000000000 -> 81000000000 +ddmul311 multiply 9 90000000000 -> 810000000000 +ddmul312 multiply 9 900000000000 -> 8100000000000 +ddmul313 multiply 9 9000000000000 -> 81000000000000 +ddmul314 multiply 9 90000000000000 -> 810000000000000 +ddmul315 multiply 9 900000000000000 -> 8100000000000000 +ddmul316 multiply 9 9000000000000000 -> 8.100000000000000E+16 Rounded +ddmul317 multiply 90 9000000000000000 -> 8.100000000000000E+17 Rounded +ddmul318 multiply 900 9000000000000000 -> 8.100000000000000E+18 Rounded +ddmul319 multiply 9000 9000000000000000 -> 8.100000000000000E+19 Rounded +ddmul320 multiply 90000 9000000000000000 -> 8.100000000000000E+20 Rounded +ddmul321 multiply 900000 9000000000000000 -> 8.100000000000000E+21 Rounded +ddmul322 multiply 9000000 9000000000000000 -> 8.100000000000000E+22 Rounded +ddmul323 multiply 90000000 9000000000000000 -> 8.100000000000000E+23 Rounded + +-- tryzeros cases +ddmul504 multiply 0E-260 1000E-260 -> 0E-398 Clamped +ddmul505 multiply 100E+260 0E+260 -> 0E+369 Clamped +-- 65K-1 case +ddmul506 multiply 77.1 850 -> 65535.0 + +-- mixed with zeros +ddmul541 multiply 0 -1 -> -0 +ddmul542 multiply -0 -1 -> 0 +ddmul543 multiply 0 1 -> 0 +ddmul544 multiply -0 1 -> -0 +ddmul545 multiply -1 0 -> -0 +ddmul546 multiply -1 -0 -> 0 +ddmul547 multiply 1 0 -> 0 +ddmul548 multiply 1 -0 -> -0 + +ddmul551 multiply 0.0 -1 -> -0.0 +ddmul552 multiply -0.0 -1 -> 0.0 +ddmul553 multiply 0.0 1 -> 0.0 +ddmul554 multiply -0.0 1 -> -0.0 +ddmul555 multiply -1.0 0 -> -0.0 +ddmul556 multiply -1.0 -0 -> 0.0 +ddmul557 multiply 1.0 0 -> 0.0 +ddmul558 multiply 1.0 -0 -> -0.0 + +ddmul561 multiply 0 -1.0 -> -0.0 +ddmul562 multiply -0 -1.0 -> 0.0 +ddmul563 multiply 0 1.0 -> 0.0 +ddmul564 multiply -0 1.0 -> -0.0 +ddmul565 multiply -1 0.0 -> -0.0 +ddmul566 multiply -1 -0.0 -> 0.0 +ddmul567 multiply 1 0.0 -> 0.0 +ddmul568 multiply 1 -0.0 -> -0.0 + +ddmul571 multiply 0.0 -1.0 -> -0.00 +ddmul572 multiply -0.0 -1.0 -> 0.00 +ddmul573 multiply 0.0 1.0 -> 0.00 +ddmul574 multiply -0.0 1.0 -> -0.00 +ddmul575 multiply -1.0 0.0 -> -0.00 +ddmul576 multiply -1.0 -0.0 -> 0.00 +ddmul577 multiply 1.0 0.0 -> 0.00 +ddmul578 multiply 1.0 -0.0 -> -0.00 + + +-- Specials +ddmul580 multiply Inf -Inf -> -Infinity +ddmul581 multiply Inf -1000 -> -Infinity +ddmul582 multiply Inf -1 -> -Infinity +ddmul583 multiply Inf -0 -> NaN Invalid_operation +ddmul584 multiply Inf 0 -> NaN Invalid_operation +ddmul585 multiply Inf 1 -> Infinity +ddmul586 multiply Inf 1000 -> Infinity +ddmul587 multiply Inf Inf -> Infinity +ddmul588 multiply -1000 Inf -> -Infinity +ddmul589 multiply -Inf Inf -> -Infinity +ddmul590 multiply -1 Inf -> -Infinity +ddmul591 multiply -0 Inf -> NaN Invalid_operation +ddmul592 multiply 0 Inf -> NaN Invalid_operation +ddmul593 multiply 1 Inf -> Infinity +ddmul594 multiply 1000 Inf -> Infinity +ddmul595 multiply Inf Inf -> Infinity + +ddmul600 multiply -Inf -Inf -> Infinity +ddmul601 multiply -Inf -1000 -> Infinity +ddmul602 multiply -Inf -1 -> Infinity +ddmul603 multiply -Inf -0 -> NaN Invalid_operation +ddmul604 multiply -Inf 0 -> NaN Invalid_operation +ddmul605 multiply -Inf 1 -> -Infinity +ddmul606 multiply -Inf 1000 -> -Infinity +ddmul607 multiply -Inf Inf -> -Infinity +ddmul608 multiply -1000 Inf -> -Infinity +ddmul609 multiply -Inf -Inf -> Infinity +ddmul610 multiply -1 -Inf -> Infinity +ddmul611 multiply -0 -Inf -> NaN Invalid_operation +ddmul612 multiply 0 -Inf -> NaN Invalid_operation +ddmul613 multiply 1 -Inf -> -Infinity +ddmul614 multiply 1000 -Inf -> -Infinity +ddmul615 multiply Inf -Inf -> -Infinity + +ddmul621 multiply NaN -Inf -> NaN +ddmul622 multiply NaN -1000 -> NaN +ddmul623 multiply NaN -1 -> NaN +ddmul624 multiply NaN -0 -> NaN +ddmul625 multiply NaN 0 -> NaN +ddmul626 multiply NaN 1 -> NaN +ddmul627 multiply NaN 1000 -> NaN +ddmul628 multiply NaN Inf -> NaN +ddmul629 multiply NaN NaN -> NaN +ddmul630 multiply -Inf NaN -> NaN +ddmul631 multiply -1000 NaN -> NaN +ddmul632 multiply -1 NaN -> NaN +ddmul633 multiply -0 NaN -> NaN +ddmul634 multiply 0 NaN -> NaN +ddmul635 multiply 1 NaN -> NaN +ddmul636 multiply 1000 NaN -> NaN +ddmul637 multiply Inf NaN -> NaN + +ddmul641 multiply sNaN -Inf -> NaN Invalid_operation +ddmul642 multiply sNaN -1000 -> NaN Invalid_operation +ddmul643 multiply sNaN -1 -> NaN Invalid_operation +ddmul644 multiply sNaN -0 -> NaN Invalid_operation +ddmul645 multiply sNaN 0 -> NaN Invalid_operation +ddmul646 multiply sNaN 1 -> NaN Invalid_operation +ddmul647 multiply sNaN 1000 -> NaN Invalid_operation +ddmul648 multiply sNaN NaN -> NaN Invalid_operation +ddmul649 multiply sNaN sNaN -> NaN Invalid_operation +ddmul650 multiply NaN sNaN -> NaN Invalid_operation +ddmul651 multiply -Inf sNaN -> NaN Invalid_operation +ddmul652 multiply -1000 sNaN -> NaN Invalid_operation +ddmul653 multiply -1 sNaN -> NaN Invalid_operation +ddmul654 multiply -0 sNaN -> NaN Invalid_operation +ddmul655 multiply 0 sNaN -> NaN Invalid_operation +ddmul656 multiply 1 sNaN -> NaN Invalid_operation +ddmul657 multiply 1000 sNaN -> NaN Invalid_operation +ddmul658 multiply Inf sNaN -> NaN Invalid_operation +ddmul659 multiply NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddmul661 multiply NaN9 -Inf -> NaN9 +ddmul662 multiply NaN8 999 -> NaN8 +ddmul663 multiply NaN71 Inf -> NaN71 +ddmul664 multiply NaN6 NaN5 -> NaN6 +ddmul665 multiply -Inf NaN4 -> NaN4 +ddmul666 multiply -999 NaN33 -> NaN33 +ddmul667 multiply Inf NaN2 -> NaN2 + +ddmul671 multiply sNaN99 -Inf -> NaN99 Invalid_operation +ddmul672 multiply sNaN98 -11 -> NaN98 Invalid_operation +ddmul673 multiply sNaN97 NaN -> NaN97 Invalid_operation +ddmul674 multiply sNaN16 sNaN94 -> NaN16 Invalid_operation +ddmul675 multiply NaN95 sNaN93 -> NaN93 Invalid_operation +ddmul676 multiply -Inf sNaN92 -> NaN92 Invalid_operation +ddmul677 multiply 088 sNaN91 -> NaN91 Invalid_operation +ddmul678 multiply Inf sNaN90 -> NaN90 Invalid_operation +ddmul679 multiply NaN sNaN89 -> NaN89 Invalid_operation + +ddmul681 multiply -NaN9 -Inf -> -NaN9 +ddmul682 multiply -NaN8 999 -> -NaN8 +ddmul683 multiply -NaN71 Inf -> -NaN71 +ddmul684 multiply -NaN6 -NaN5 -> -NaN6 +ddmul685 multiply -Inf -NaN4 -> -NaN4 +ddmul686 multiply -999 -NaN33 -> -NaN33 +ddmul687 multiply Inf -NaN2 -> -NaN2 + +ddmul691 multiply -sNaN99 -Inf -> -NaN99 Invalid_operation +ddmul692 multiply -sNaN98 -11 -> -NaN98 Invalid_operation +ddmul693 multiply -sNaN97 NaN -> -NaN97 Invalid_operation +ddmul694 multiply -sNaN16 -sNaN94 -> -NaN16 Invalid_operation +ddmul695 multiply -NaN95 -sNaN93 -> -NaN93 Invalid_operation +ddmul696 multiply -Inf -sNaN92 -> -NaN92 Invalid_operation +ddmul697 multiply 088 -sNaN91 -> -NaN91 Invalid_operation +ddmul698 multiply Inf -sNaN90 -> -NaN90 Invalid_operation +ddmul699 multiply -NaN -sNaN89 -> -NaN89 Invalid_operation + +ddmul701 multiply -NaN -Inf -> -NaN +ddmul702 multiply -NaN 999 -> -NaN +ddmul703 multiply -NaN Inf -> -NaN +ddmul704 multiply -NaN -NaN -> -NaN +ddmul705 multiply -Inf -NaN0 -> -NaN +ddmul706 multiply -999 -NaN -> -NaN +ddmul707 multiply Inf -NaN -> -NaN + +ddmul711 multiply -sNaN -Inf -> -NaN Invalid_operation +ddmul712 multiply -sNaN -11 -> -NaN Invalid_operation +ddmul713 multiply -sNaN00 NaN -> -NaN Invalid_operation +ddmul714 multiply -sNaN -sNaN -> -NaN Invalid_operation +ddmul715 multiply -NaN -sNaN -> -NaN Invalid_operation +ddmul716 multiply -Inf -sNaN -> -NaN Invalid_operation +ddmul717 multiply 088 -sNaN -> -NaN Invalid_operation +ddmul718 multiply Inf -sNaN -> -NaN Invalid_operation +ddmul719 multiply -NaN -sNaN -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +-- signs +ddmul751 multiply 1e+277 1e+311 -> Infinity Overflow Inexact Rounded +ddmul752 multiply 1e+277 -1e+311 -> -Infinity Overflow Inexact Rounded +ddmul753 multiply -1e+277 1e+311 -> -Infinity Overflow Inexact Rounded +ddmul754 multiply -1e+277 -1e+311 -> Infinity Overflow Inexact Rounded +ddmul755 multiply 1e-277 1e-311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul756 multiply 1e-277 -1e-311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul757 multiply -1e-277 1e-311 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul758 multiply -1e-277 -1e-311 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +ddmul760 multiply 1e-291 1e-101 -> 1E-392 Subnormal +ddmul761 multiply 1e-291 1e-102 -> 1E-393 Subnormal +ddmul762 multiply 1e-291 1e-103 -> 1E-394 Subnormal +ddmul763 multiply 1e-291 1e-104 -> 1E-395 Subnormal +ddmul764 multiply 1e-291 1e-105 -> 1E-396 Subnormal +ddmul765 multiply 1e-291 1e-106 -> 1E-397 Subnormal +ddmul766 multiply 1e-291 1e-107 -> 1E-398 Subnormal +ddmul767 multiply 1e-291 1e-108 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul768 multiply 1e-291 1e-109 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul769 multiply 1e-291 1e-110 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +ddmul770 multiply 1e+60 1e+321 -> 1.000000000000E+381 Clamped +ddmul771 multiply 1e+60 1e+322 -> 1.0000000000000E+382 Clamped +ddmul772 multiply 1e+60 1e+323 -> 1.00000000000000E+383 Clamped +ddmul773 multiply 1e+60 1e+324 -> 1.000000000000000E+384 Clamped +ddmul774 multiply 1e+60 1e+325 -> Infinity Overflow Inexact Rounded +ddmul775 multiply 1e+60 1e+326 -> Infinity Overflow Inexact Rounded +ddmul776 multiply 1e+60 1e+327 -> Infinity Overflow Inexact Rounded +ddmul777 multiply 1e+60 1e+328 -> Infinity Overflow Inexact Rounded +ddmul778 multiply 1e+60 1e+329 -> Infinity Overflow Inexact Rounded +ddmul779 multiply 1e+60 1e+330 -> Infinity Overflow Inexact Rounded + +ddmul801 multiply 1.0000E-394 1 -> 1.0000E-394 Subnormal +ddmul802 multiply 1.000E-394 1e-1 -> 1.000E-395 Subnormal +ddmul803 multiply 1.00E-394 1e-2 -> 1.00E-396 Subnormal +ddmul804 multiply 1.0E-394 1e-3 -> 1.0E-397 Subnormal +ddmul805 multiply 1.0E-394 1e-4 -> 1E-398 Subnormal Rounded +ddmul806 multiply 1.3E-394 1e-4 -> 1E-398 Underflow Subnormal Inexact Rounded +ddmul807 multiply 1.5E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul808 multiply 1.7E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul809 multiply 2.3E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul810 multiply 2.5E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul811 multiply 2.7E-394 1e-4 -> 3E-398 Underflow Subnormal Inexact Rounded +ddmul812 multiply 1.49E-394 1e-4 -> 1E-398 Underflow Subnormal Inexact Rounded +ddmul813 multiply 1.50E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul814 multiply 1.51E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul815 multiply 2.49E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul816 multiply 2.50E-394 1e-4 -> 2E-398 Underflow Subnormal Inexact Rounded +ddmul817 multiply 2.51E-394 1e-4 -> 3E-398 Underflow Subnormal Inexact Rounded + +ddmul818 multiply 1E-394 1e-4 -> 1E-398 Subnormal +ddmul819 multiply 3E-394 1e-5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul820 multiply 5E-394 1e-5 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul821 multiply 7E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded +ddmul822 multiply 9E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded +ddmul823 multiply 9.9E-394 1e-5 -> 1E-398 Underflow Subnormal Inexact Rounded + +ddmul824 multiply 1E-394 -1e-4 -> -1E-398 Subnormal +ddmul825 multiply 3E-394 -1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul826 multiply -5E-394 1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul827 multiply 7E-394 -1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded +ddmul828 multiply -9E-394 1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded +ddmul829 multiply 9.9E-394 -1e-5 -> -1E-398 Underflow Subnormal Inexact Rounded +ddmul830 multiply 3.0E-394 -1e-5 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped + +ddmul831 multiply 1.0E-199 1e-200 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddmul832 multiply 1.0E-199 1e-199 -> 1E-398 Subnormal Rounded +ddmul833 multiply 1.0E-199 1e-198 -> 1.0E-397 Subnormal +ddmul834 multiply 2.0E-199 2e-198 -> 4.0E-397 Subnormal +ddmul835 multiply 4.0E-199 4e-198 -> 1.60E-396 Subnormal +ddmul836 multiply 10.0E-199 10e-198 -> 1.000E-395 Subnormal +ddmul837 multiply 30.0E-199 30e-198 -> 9.000E-395 Subnormal +ddmul838 multiply 40.0E-199 40e-188 -> 1.6000E-384 Subnormal +ddmul839 multiply 40.0E-199 40e-187 -> 1.6000E-383 +ddmul840 multiply 40.0E-199 40e-186 -> 1.6000E-382 + +-- Long operand overflow may be a different path +ddmul870 multiply 100 9.999E+383 -> Infinity Inexact Overflow Rounded +ddmul871 multiply 100 -9.999E+383 -> -Infinity Inexact Overflow Rounded +ddmul872 multiply 9.999E+383 100 -> Infinity Inexact Overflow Rounded +ddmul873 multiply -9.999E+383 100 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +ddmul881 multiply 1.2347E-355 1.2347E-40 -> 1.524E-395 Inexact Rounded Subnormal Underflow +ddmul882 multiply 1.234E-355 1.234E-40 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddmul883 multiply 1.23E-355 1.23E-40 -> 1.513E-395 Inexact Rounded Subnormal Underflow +ddmul884 multiply 1.2E-355 1.2E-40 -> 1.44E-395 Subnormal +ddmul885 multiply 1.2E-355 1.2E-41 -> 1.44E-396 Subnormal +ddmul886 multiply 1.2E-355 1.2E-42 -> 1.4E-397 Subnormal Inexact Rounded Underflow +ddmul887 multiply 1.2E-355 1.3E-42 -> 1.6E-397 Subnormal Inexact Rounded Underflow +ddmul888 multiply 1.3E-355 1.3E-42 -> 1.7E-397 Subnormal Inexact Rounded Underflow +ddmul889 multiply 1.3E-355 1.3E-43 -> 2E-398 Subnormal Inexact Rounded Underflow +ddmul890 multiply 1.3E-356 1.3E-43 -> 0E-398 Clamped Subnormal Inexact Rounded Underflow + +ddmul891 multiply 1.2345E-39 1.234E-355 -> 1.5234E-394 Inexact Rounded Subnormal Underflow +ddmul892 multiply 1.23456E-39 1.234E-355 -> 1.5234E-394 Inexact Rounded Subnormal Underflow +ddmul893 multiply 1.2345E-40 1.234E-355 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddmul894 multiply 1.23456E-40 1.234E-355 -> 1.523E-395 Inexact Rounded Subnormal Underflow +ddmul895 multiply 1.2345E-41 1.234E-355 -> 1.52E-396 Inexact Rounded Subnormal Underflow +ddmul896 multiply 1.23456E-41 1.234E-355 -> 1.52E-396 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +-- 1 234567890123456 +ddmul900 multiply 0.3000000000E-191 0.3000000000E-191 -> 9.00000000000000E-384 Subnormal Rounded +ddmul901 multiply 0.3000000001E-191 0.3000000001E-191 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded +ddmul902 multiply 9.999999999999999E-383 0.0999999999999 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded +ddmul903 multiply 9.999999999999999E-383 0.09999999999999 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded +ddmul904 multiply 9.999999999999999E-383 0.099999999999999 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded +ddmul905 multiply 9.999999999999999E-383 0.0999999999999999 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded +-- The next rounds to Nmin (b**emin); this is the distinguishing case +-- for detecting tininess (before or after rounding) -- if after +-- rounding then the result would be the same, but the Underflow flag +-- would not be set +ddmul906 multiply 9.999999999999999E-383 0.09999999999999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +-- prove those operands were exact +ddmul907 multiply 9.999999999999999E-383 1 -> 9.999999999999999E-383 +ddmul908 multiply 1 0.09999999999999999 -> 0.09999999999999999 + +-- reducing tiniest +ddmul910 multiply 1e-398 0.99 -> 1E-398 Subnormal Inexact Rounded Underflow +ddmul911 multiply 1e-398 0.75 -> 1E-398 Subnormal Inexact Rounded Underflow +ddmul912 multiply 1e-398 0.5 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +ddmul913 multiply 1e-398 0.25 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +ddmul914 multiply 1e-398 0.01 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped + +-- hugest +ddmul920 multiply 9999999999999999 9999999999999999 -> 9.999999999999998E+31 Inexact Rounded + +-- power-of-ten edge cases +ddmul1001 multiply 1 10 -> 10 +ddmul1002 multiply 1 100 -> 100 +ddmul1003 multiply 1 1000 -> 1000 +ddmul1004 multiply 1 10000 -> 10000 +ddmul1005 multiply 1 100000 -> 100000 +ddmul1006 multiply 1 1000000 -> 1000000 +ddmul1007 multiply 1 10000000 -> 10000000 +ddmul1008 multiply 1 100000000 -> 100000000 +ddmul1009 multiply 1 1000000000 -> 1000000000 +ddmul1010 multiply 1 10000000000 -> 10000000000 +ddmul1011 multiply 1 100000000000 -> 100000000000 +ddmul1012 multiply 1 1000000000000 -> 1000000000000 +ddmul1013 multiply 1 10000000000000 -> 10000000000000 +ddmul1014 multiply 1 100000000000000 -> 100000000000000 +ddmul1015 multiply 1 1000000000000000 -> 1000000000000000 +ddmul1021 multiply 10 1 -> 10 +ddmul1022 multiply 10 10 -> 100 +ddmul1023 multiply 10 100 -> 1000 +ddmul1024 multiply 10 1000 -> 10000 +ddmul1025 multiply 10 10000 -> 100000 +ddmul1026 multiply 10 100000 -> 1000000 +ddmul1027 multiply 10 1000000 -> 10000000 +ddmul1028 multiply 10 10000000 -> 100000000 +ddmul1029 multiply 10 100000000 -> 1000000000 +ddmul1030 multiply 10 1000000000 -> 10000000000 +ddmul1031 multiply 10 10000000000 -> 100000000000 +ddmul1032 multiply 10 100000000000 -> 1000000000000 +ddmul1033 multiply 10 1000000000000 -> 10000000000000 +ddmul1034 multiply 10 10000000000000 -> 100000000000000 +ddmul1035 multiply 10 100000000000000 -> 1000000000000000 +ddmul1041 multiply 100 0.1 -> 10.0 +ddmul1042 multiply 100 1 -> 100 +ddmul1043 multiply 100 10 -> 1000 +ddmul1044 multiply 100 100 -> 10000 +ddmul1045 multiply 100 1000 -> 100000 +ddmul1046 multiply 100 10000 -> 1000000 +ddmul1047 multiply 100 100000 -> 10000000 +ddmul1048 multiply 100 1000000 -> 100000000 +ddmul1049 multiply 100 10000000 -> 1000000000 +ddmul1050 multiply 100 100000000 -> 10000000000 +ddmul1051 multiply 100 1000000000 -> 100000000000 +ddmul1052 multiply 100 10000000000 -> 1000000000000 +ddmul1053 multiply 100 100000000000 -> 10000000000000 +ddmul1054 multiply 100 1000000000000 -> 100000000000000 +ddmul1055 multiply 100 10000000000000 -> 1000000000000000 +ddmul1061 multiply 1000 0.01 -> 10.00 +ddmul1062 multiply 1000 0.1 -> 100.0 +ddmul1063 multiply 1000 1 -> 1000 +ddmul1064 multiply 1000 10 -> 10000 +ddmul1065 multiply 1000 100 -> 100000 +ddmul1066 multiply 1000 1000 -> 1000000 +ddmul1067 multiply 1000 10000 -> 10000000 +ddmul1068 multiply 1000 100000 -> 100000000 +ddmul1069 multiply 1000 1000000 -> 1000000000 +ddmul1070 multiply 1000 10000000 -> 10000000000 +ddmul1071 multiply 1000 100000000 -> 100000000000 +ddmul1072 multiply 1000 1000000000 -> 1000000000000 +ddmul1073 multiply 1000 10000000000 -> 10000000000000 +ddmul1074 multiply 1000 100000000000 -> 100000000000000 +ddmul1075 multiply 1000 1000000000000 -> 1000000000000000 +ddmul1081 multiply 10000 0.001 -> 10.000 +ddmul1082 multiply 10000 0.01 -> 100.00 +ddmul1083 multiply 10000 0.1 -> 1000.0 +ddmul1084 multiply 10000 1 -> 10000 +ddmul1085 multiply 10000 10 -> 100000 +ddmul1086 multiply 10000 100 -> 1000000 +ddmul1087 multiply 10000 1000 -> 10000000 +ddmul1088 multiply 10000 10000 -> 100000000 +ddmul1089 multiply 10000 100000 -> 1000000000 +ddmul1090 multiply 10000 1000000 -> 10000000000 +ddmul1091 multiply 10000 10000000 -> 100000000000 +ddmul1092 multiply 10000 100000000 -> 1000000000000 +ddmul1093 multiply 10000 1000000000 -> 10000000000000 +ddmul1094 multiply 10000 10000000000 -> 100000000000000 +ddmul1095 multiply 10000 100000000000 -> 1000000000000000 + +ddmul1097 multiply 10000 99999999999 -> 999999999990000 +ddmul1098 multiply 10000 99999999999 -> 999999999990000 + + +-- Null tests +ddmul9990 multiply 10 # -> NaN Invalid_operation +ddmul9991 multiply # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddNextMinus.decTest b/Lib/test/decimaltestdata/ddNextMinus.decTest index 39f58c14a44..f8a3c0eb329 100644 --- a/Lib/test/decimaltestdata/ddNextMinus.decTest +++ b/Lib/test/decimaltestdata/ddNextMinus.decTest @@ -1,126 +1,126 @@ ------------------------------------------------------------------------- --- ddNextMinus.decTest -- decDouble next that is less [754r nextdown] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddnextm001 nextminus 0.9999999999999995 -> 0.9999999999999994 -ddnextm002 nextminus 0.9999999999999996 -> 0.9999999999999995 -ddnextm003 nextminus 0.9999999999999997 -> 0.9999999999999996 -ddnextm004 nextminus 0.9999999999999998 -> 0.9999999999999997 -ddnextm005 nextminus 0.9999999999999999 -> 0.9999999999999998 -ddnextm006 nextminus 1.000000000000000 -> 0.9999999999999999 -ddnextm007 nextminus 1.0 -> 0.9999999999999999 -ddnextm008 nextminus 1 -> 0.9999999999999999 -ddnextm009 nextminus 1.000000000000001 -> 1.000000000000000 -ddnextm010 nextminus 1.000000000000002 -> 1.000000000000001 -ddnextm011 nextminus 1.000000000000003 -> 1.000000000000002 -ddnextm012 nextminus 1.000000000000004 -> 1.000000000000003 -ddnextm013 nextminus 1.000000000000005 -> 1.000000000000004 -ddnextm014 nextminus 1.000000000000006 -> 1.000000000000005 -ddnextm015 nextminus 1.000000000000007 -> 1.000000000000006 -ddnextm016 nextminus 1.000000000000008 -> 1.000000000000007 -ddnextm017 nextminus 1.000000000000009 -> 1.000000000000008 -ddnextm018 nextminus 1.000000000000010 -> 1.000000000000009 -ddnextm019 nextminus 1.000000000000011 -> 1.000000000000010 -ddnextm020 nextminus 1.000000000000012 -> 1.000000000000011 - -ddnextm021 nextminus -0.9999999999999995 -> -0.9999999999999996 -ddnextm022 nextminus -0.9999999999999996 -> -0.9999999999999997 -ddnextm023 nextminus -0.9999999999999997 -> -0.9999999999999998 -ddnextm024 nextminus -0.9999999999999998 -> -0.9999999999999999 -ddnextm025 nextminus -0.9999999999999999 -> -1.000000000000000 -ddnextm026 nextminus -1.000000000000000 -> -1.000000000000001 -ddnextm027 nextminus -1.0 -> -1.000000000000001 -ddnextm028 nextminus -1 -> -1.000000000000001 -ddnextm029 nextminus -1.000000000000001 -> -1.000000000000002 -ddnextm030 nextminus -1.000000000000002 -> -1.000000000000003 -ddnextm031 nextminus -1.000000000000003 -> -1.000000000000004 -ddnextm032 nextminus -1.000000000000004 -> -1.000000000000005 -ddnextm033 nextminus -1.000000000000005 -> -1.000000000000006 -ddnextm034 nextminus -1.000000000000006 -> -1.000000000000007 -ddnextm035 nextminus -1.000000000000007 -> -1.000000000000008 -ddnextm036 nextminus -1.000000000000008 -> -1.000000000000009 -ddnextm037 nextminus -1.000000000000009 -> -1.000000000000010 -ddnextm038 nextminus -1.000000000000010 -> -1.000000000000011 -ddnextm039 nextminus -1.000000000000011 -> -1.000000000000012 - --- ultra-tiny inputs -ddnextm062 nextminus 1E-398 -> 0E-398 -ddnextm065 nextminus -1E-398 -> -2E-398 - --- Zeros -ddnextm100 nextminus -0 -> -1E-398 -ddnextm101 nextminus 0 -> -1E-398 -ddnextm102 nextminus 0.00 -> -1E-398 -ddnextm103 nextminus -0.00 -> -1E-398 -ddnextm104 nextminus 0E-300 -> -1E-398 -ddnextm105 nextminus 0E+300 -> -1E-398 -ddnextm106 nextminus 0E+30000 -> -1E-398 -ddnextm107 nextminus -0E+30000 -> -1E-398 - --- specials -ddnextm150 nextminus Inf -> 9.999999999999999E+384 -ddnextm151 nextminus -Inf -> -Infinity -ddnextm152 nextminus NaN -> NaN -ddnextm153 nextminus sNaN -> NaN Invalid_operation -ddnextm154 nextminus NaN77 -> NaN77 -ddnextm155 nextminus sNaN88 -> NaN88 Invalid_operation -ddnextm156 nextminus -NaN -> -NaN -ddnextm157 nextminus -sNaN -> -NaN Invalid_operation -ddnextm158 nextminus -NaN77 -> -NaN77 -ddnextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -ddnextm170 nextminus 9.999999999999999E+384 -> 9.999999999999998E+384 -ddnextm171 nextminus 9.999999999999998E+384 -> 9.999999999999997E+384 -ddnextm172 nextminus 1E-383 -> 9.99999999999999E-384 -ddnextm173 nextminus 1.000000000000000E-383 -> 9.99999999999999E-384 -ddnextm174 nextminus 9E-398 -> 8E-398 -ddnextm175 nextminus 9.9E-397 -> 9.8E-397 -ddnextm176 nextminus 9.99999999999E-387 -> 9.99999999998E-387 -ddnextm177 nextminus 9.99999999999999E-384 -> 9.99999999999998E-384 -ddnextm178 nextminus 9.99999999999998E-384 -> 9.99999999999997E-384 -ddnextm179 nextminus 9.99999999999997E-384 -> 9.99999999999996E-384 -ddnextm180 nextminus 0E-398 -> -1E-398 -ddnextm181 nextminus 1E-398 -> 0E-398 -ddnextm182 nextminus 2E-398 -> 1E-398 - -ddnextm183 nextminus -0E-398 -> -1E-398 -ddnextm184 nextminus -1E-398 -> -2E-398 -ddnextm185 nextminus -2E-398 -> -3E-398 -ddnextm186 nextminus -10E-398 -> -1.1E-397 -ddnextm187 nextminus -100E-398 -> -1.01E-396 -ddnextm188 nextminus -100000E-398 -> -1.00001E-393 -ddnextm189 nextminus -1.00000000000E-383 -> -1.000000000000001E-383 -ddnextm190 nextminus -1.000000000000000E-383 -> -1.000000000000001E-383 -ddnextm191 nextminus -1E-383 -> -1.000000000000001E-383 -ddnextm192 nextminus -9.999999999999998E+384 -> -9.999999999999999E+384 -ddnextm193 nextminus -9.999999999999999E+384 -> -Infinity - --- Null tests -ddnextm900 nextminus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddNextMinus.decTest -- decDouble next that is less [754r nextdown] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddnextm001 nextminus 0.9999999999999995 -> 0.9999999999999994 +ddnextm002 nextminus 0.9999999999999996 -> 0.9999999999999995 +ddnextm003 nextminus 0.9999999999999997 -> 0.9999999999999996 +ddnextm004 nextminus 0.9999999999999998 -> 0.9999999999999997 +ddnextm005 nextminus 0.9999999999999999 -> 0.9999999999999998 +ddnextm006 nextminus 1.000000000000000 -> 0.9999999999999999 +ddnextm007 nextminus 1.0 -> 0.9999999999999999 +ddnextm008 nextminus 1 -> 0.9999999999999999 +ddnextm009 nextminus 1.000000000000001 -> 1.000000000000000 +ddnextm010 nextminus 1.000000000000002 -> 1.000000000000001 +ddnextm011 nextminus 1.000000000000003 -> 1.000000000000002 +ddnextm012 nextminus 1.000000000000004 -> 1.000000000000003 +ddnextm013 nextminus 1.000000000000005 -> 1.000000000000004 +ddnextm014 nextminus 1.000000000000006 -> 1.000000000000005 +ddnextm015 nextminus 1.000000000000007 -> 1.000000000000006 +ddnextm016 nextminus 1.000000000000008 -> 1.000000000000007 +ddnextm017 nextminus 1.000000000000009 -> 1.000000000000008 +ddnextm018 nextminus 1.000000000000010 -> 1.000000000000009 +ddnextm019 nextminus 1.000000000000011 -> 1.000000000000010 +ddnextm020 nextminus 1.000000000000012 -> 1.000000000000011 + +ddnextm021 nextminus -0.9999999999999995 -> -0.9999999999999996 +ddnextm022 nextminus -0.9999999999999996 -> -0.9999999999999997 +ddnextm023 nextminus -0.9999999999999997 -> -0.9999999999999998 +ddnextm024 nextminus -0.9999999999999998 -> -0.9999999999999999 +ddnextm025 nextminus -0.9999999999999999 -> -1.000000000000000 +ddnextm026 nextminus -1.000000000000000 -> -1.000000000000001 +ddnextm027 nextminus -1.0 -> -1.000000000000001 +ddnextm028 nextminus -1 -> -1.000000000000001 +ddnextm029 nextminus -1.000000000000001 -> -1.000000000000002 +ddnextm030 nextminus -1.000000000000002 -> -1.000000000000003 +ddnextm031 nextminus -1.000000000000003 -> -1.000000000000004 +ddnextm032 nextminus -1.000000000000004 -> -1.000000000000005 +ddnextm033 nextminus -1.000000000000005 -> -1.000000000000006 +ddnextm034 nextminus -1.000000000000006 -> -1.000000000000007 +ddnextm035 nextminus -1.000000000000007 -> -1.000000000000008 +ddnextm036 nextminus -1.000000000000008 -> -1.000000000000009 +ddnextm037 nextminus -1.000000000000009 -> -1.000000000000010 +ddnextm038 nextminus -1.000000000000010 -> -1.000000000000011 +ddnextm039 nextminus -1.000000000000011 -> -1.000000000000012 + +-- ultra-tiny inputs +ddnextm062 nextminus 1E-398 -> 0E-398 +ddnextm065 nextminus -1E-398 -> -2E-398 + +-- Zeros +ddnextm100 nextminus -0 -> -1E-398 +ddnextm101 nextminus 0 -> -1E-398 +ddnextm102 nextminus 0.00 -> -1E-398 +ddnextm103 nextminus -0.00 -> -1E-398 +ddnextm104 nextminus 0E-300 -> -1E-398 +ddnextm105 nextminus 0E+300 -> -1E-398 +ddnextm106 nextminus 0E+30000 -> -1E-398 +ddnextm107 nextminus -0E+30000 -> -1E-398 + +-- specials +ddnextm150 nextminus Inf -> 9.999999999999999E+384 +ddnextm151 nextminus -Inf -> -Infinity +ddnextm152 nextminus NaN -> NaN +ddnextm153 nextminus sNaN -> NaN Invalid_operation +ddnextm154 nextminus NaN77 -> NaN77 +ddnextm155 nextminus sNaN88 -> NaN88 Invalid_operation +ddnextm156 nextminus -NaN -> -NaN +ddnextm157 nextminus -sNaN -> -NaN Invalid_operation +ddnextm158 nextminus -NaN77 -> -NaN77 +ddnextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +ddnextm170 nextminus 9.999999999999999E+384 -> 9.999999999999998E+384 +ddnextm171 nextminus 9.999999999999998E+384 -> 9.999999999999997E+384 +ddnextm172 nextminus 1E-383 -> 9.99999999999999E-384 +ddnextm173 nextminus 1.000000000000000E-383 -> 9.99999999999999E-384 +ddnextm174 nextminus 9E-398 -> 8E-398 +ddnextm175 nextminus 9.9E-397 -> 9.8E-397 +ddnextm176 nextminus 9.99999999999E-387 -> 9.99999999998E-387 +ddnextm177 nextminus 9.99999999999999E-384 -> 9.99999999999998E-384 +ddnextm178 nextminus 9.99999999999998E-384 -> 9.99999999999997E-384 +ddnextm179 nextminus 9.99999999999997E-384 -> 9.99999999999996E-384 +ddnextm180 nextminus 0E-398 -> -1E-398 +ddnextm181 nextminus 1E-398 -> 0E-398 +ddnextm182 nextminus 2E-398 -> 1E-398 + +ddnextm183 nextminus -0E-398 -> -1E-398 +ddnextm184 nextminus -1E-398 -> -2E-398 +ddnextm185 nextminus -2E-398 -> -3E-398 +ddnextm186 nextminus -10E-398 -> -1.1E-397 +ddnextm187 nextminus -100E-398 -> -1.01E-396 +ddnextm188 nextminus -100000E-398 -> -1.00001E-393 +ddnextm189 nextminus -1.00000000000E-383 -> -1.000000000000001E-383 +ddnextm190 nextminus -1.000000000000000E-383 -> -1.000000000000001E-383 +ddnextm191 nextminus -1E-383 -> -1.000000000000001E-383 +ddnextm192 nextminus -9.999999999999998E+384 -> -9.999999999999999E+384 +ddnextm193 nextminus -9.999999999999999E+384 -> -Infinity + +-- Null tests +ddnextm900 nextminus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddNextPlus.decTest b/Lib/test/decimaltestdata/ddNextPlus.decTest index d41dfbab3f7..4a749a18c9f 100644 --- a/Lib/test/decimaltestdata/ddNextPlus.decTest +++ b/Lib/test/decimaltestdata/ddNextPlus.decTest @@ -1,124 +1,124 @@ ------------------------------------------------------------------------- --- ddNextPlus.decTest -- decDouble next that is greater [754r nextup] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddnextp001 nextplus 0.9999999999999995 -> 0.9999999999999996 -ddnextp002 nextplus 0.9999999999999996 -> 0.9999999999999997 -ddnextp003 nextplus 0.9999999999999997 -> 0.9999999999999998 -ddnextp004 nextplus 0.9999999999999998 -> 0.9999999999999999 -ddnextp005 nextplus 0.9999999999999999 -> 1.000000000000000 -ddnextp006 nextplus 1.000000000000000 -> 1.000000000000001 -ddnextp007 nextplus 1.0 -> 1.000000000000001 -ddnextp008 nextplus 1 -> 1.000000000000001 -ddnextp009 nextplus 1.000000000000001 -> 1.000000000000002 -ddnextp010 nextplus 1.000000000000002 -> 1.000000000000003 -ddnextp011 nextplus 1.000000000000003 -> 1.000000000000004 -ddnextp012 nextplus 1.000000000000004 -> 1.000000000000005 -ddnextp013 nextplus 1.000000000000005 -> 1.000000000000006 -ddnextp014 nextplus 1.000000000000006 -> 1.000000000000007 -ddnextp015 nextplus 1.000000000000007 -> 1.000000000000008 -ddnextp016 nextplus 1.000000000000008 -> 1.000000000000009 -ddnextp017 nextplus 1.000000000000009 -> 1.000000000000010 -ddnextp018 nextplus 1.000000000000010 -> 1.000000000000011 -ddnextp019 nextplus 1.000000000000011 -> 1.000000000000012 - -ddnextp021 nextplus -0.9999999999999995 -> -0.9999999999999994 -ddnextp022 nextplus -0.9999999999999996 -> -0.9999999999999995 -ddnextp023 nextplus -0.9999999999999997 -> -0.9999999999999996 -ddnextp024 nextplus -0.9999999999999998 -> -0.9999999999999997 -ddnextp025 nextplus -0.9999999999999999 -> -0.9999999999999998 -ddnextp026 nextplus -1.000000000000000 -> -0.9999999999999999 -ddnextp027 nextplus -1.0 -> -0.9999999999999999 -ddnextp028 nextplus -1 -> -0.9999999999999999 -ddnextp029 nextplus -1.000000000000001 -> -1.000000000000000 -ddnextp030 nextplus -1.000000000000002 -> -1.000000000000001 -ddnextp031 nextplus -1.000000000000003 -> -1.000000000000002 -ddnextp032 nextplus -1.000000000000004 -> -1.000000000000003 -ddnextp033 nextplus -1.000000000000005 -> -1.000000000000004 -ddnextp034 nextplus -1.000000000000006 -> -1.000000000000005 -ddnextp035 nextplus -1.000000000000007 -> -1.000000000000006 -ddnextp036 nextplus -1.000000000000008 -> -1.000000000000007 -ddnextp037 nextplus -1.000000000000009 -> -1.000000000000008 -ddnextp038 nextplus -1.000000000000010 -> -1.000000000000009 -ddnextp039 nextplus -1.000000000000011 -> -1.000000000000010 -ddnextp040 nextplus -1.000000000000012 -> -1.000000000000011 - --- Zeros -ddnextp100 nextplus 0 -> 1E-398 -ddnextp101 nextplus 0.00 -> 1E-398 -ddnextp102 nextplus 0E-300 -> 1E-398 -ddnextp103 nextplus 0E+300 -> 1E-398 -ddnextp104 nextplus 0E+30000 -> 1E-398 -ddnextp105 nextplus -0 -> 1E-398 -ddnextp106 nextplus -0.00 -> 1E-398 -ddnextp107 nextplus -0E-300 -> 1E-398 -ddnextp108 nextplus -0E+300 -> 1E-398 -ddnextp109 nextplus -0E+30000 -> 1E-398 - --- specials -ddnextp150 nextplus Inf -> Infinity -ddnextp151 nextplus -Inf -> -9.999999999999999E+384 -ddnextp152 nextplus NaN -> NaN -ddnextp153 nextplus sNaN -> NaN Invalid_operation -ddnextp154 nextplus NaN77 -> NaN77 -ddnextp155 nextplus sNaN88 -> NaN88 Invalid_operation -ddnextp156 nextplus -NaN -> -NaN -ddnextp157 nextplus -sNaN -> -NaN Invalid_operation -ddnextp158 nextplus -NaN77 -> -NaN77 -ddnextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -ddnextp170 nextplus -9.999999999999999E+384 -> -9.999999999999998E+384 -ddnextp171 nextplus -9.999999999999998E+384 -> -9.999999999999997E+384 -ddnextp172 nextplus -1E-383 -> -9.99999999999999E-384 -ddnextp173 nextplus -1.000000000000000E-383 -> -9.99999999999999E-384 -ddnextp174 nextplus -9E-398 -> -8E-398 -ddnextp175 nextplus -9.9E-397 -> -9.8E-397 -ddnextp176 nextplus -9.99999999999E-387 -> -9.99999999998E-387 -ddnextp177 nextplus -9.99999999999999E-384 -> -9.99999999999998E-384 -ddnextp178 nextplus -9.99999999999998E-384 -> -9.99999999999997E-384 -ddnextp179 nextplus -9.99999999999997E-384 -> -9.99999999999996E-384 -ddnextp180 nextplus -0E-398 -> 1E-398 -ddnextp181 nextplus -1E-398 -> -0E-398 -ddnextp182 nextplus -2E-398 -> -1E-398 - -ddnextp183 nextplus 0E-398 -> 1E-398 -ddnextp184 nextplus 1E-398 -> 2E-398 -ddnextp185 nextplus 2E-398 -> 3E-398 -ddnextp186 nextplus 10E-398 -> 1.1E-397 -ddnextp187 nextplus 100E-398 -> 1.01E-396 -ddnextp188 nextplus 100000E-398 -> 1.00001E-393 -ddnextp189 nextplus 1.00000000000E-383 -> 1.000000000000001E-383 -ddnextp190 nextplus 1.000000000000000E-383 -> 1.000000000000001E-383 -ddnextp191 nextplus 1E-383 -> 1.000000000000001E-383 -ddnextp192 nextplus 9.999999999999998E+384 -> 9.999999999999999E+384 -ddnextp193 nextplus 9.999999999999999E+384 -> Infinity - --- Null tests -ddnextp900 nextplus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddNextPlus.decTest -- decDouble next that is greater [754r nextup] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddnextp001 nextplus 0.9999999999999995 -> 0.9999999999999996 +ddnextp002 nextplus 0.9999999999999996 -> 0.9999999999999997 +ddnextp003 nextplus 0.9999999999999997 -> 0.9999999999999998 +ddnextp004 nextplus 0.9999999999999998 -> 0.9999999999999999 +ddnextp005 nextplus 0.9999999999999999 -> 1.000000000000000 +ddnextp006 nextplus 1.000000000000000 -> 1.000000000000001 +ddnextp007 nextplus 1.0 -> 1.000000000000001 +ddnextp008 nextplus 1 -> 1.000000000000001 +ddnextp009 nextplus 1.000000000000001 -> 1.000000000000002 +ddnextp010 nextplus 1.000000000000002 -> 1.000000000000003 +ddnextp011 nextplus 1.000000000000003 -> 1.000000000000004 +ddnextp012 nextplus 1.000000000000004 -> 1.000000000000005 +ddnextp013 nextplus 1.000000000000005 -> 1.000000000000006 +ddnextp014 nextplus 1.000000000000006 -> 1.000000000000007 +ddnextp015 nextplus 1.000000000000007 -> 1.000000000000008 +ddnextp016 nextplus 1.000000000000008 -> 1.000000000000009 +ddnextp017 nextplus 1.000000000000009 -> 1.000000000000010 +ddnextp018 nextplus 1.000000000000010 -> 1.000000000000011 +ddnextp019 nextplus 1.000000000000011 -> 1.000000000000012 + +ddnextp021 nextplus -0.9999999999999995 -> -0.9999999999999994 +ddnextp022 nextplus -0.9999999999999996 -> -0.9999999999999995 +ddnextp023 nextplus -0.9999999999999997 -> -0.9999999999999996 +ddnextp024 nextplus -0.9999999999999998 -> -0.9999999999999997 +ddnextp025 nextplus -0.9999999999999999 -> -0.9999999999999998 +ddnextp026 nextplus -1.000000000000000 -> -0.9999999999999999 +ddnextp027 nextplus -1.0 -> -0.9999999999999999 +ddnextp028 nextplus -1 -> -0.9999999999999999 +ddnextp029 nextplus -1.000000000000001 -> -1.000000000000000 +ddnextp030 nextplus -1.000000000000002 -> -1.000000000000001 +ddnextp031 nextplus -1.000000000000003 -> -1.000000000000002 +ddnextp032 nextplus -1.000000000000004 -> -1.000000000000003 +ddnextp033 nextplus -1.000000000000005 -> -1.000000000000004 +ddnextp034 nextplus -1.000000000000006 -> -1.000000000000005 +ddnextp035 nextplus -1.000000000000007 -> -1.000000000000006 +ddnextp036 nextplus -1.000000000000008 -> -1.000000000000007 +ddnextp037 nextplus -1.000000000000009 -> -1.000000000000008 +ddnextp038 nextplus -1.000000000000010 -> -1.000000000000009 +ddnextp039 nextplus -1.000000000000011 -> -1.000000000000010 +ddnextp040 nextplus -1.000000000000012 -> -1.000000000000011 + +-- Zeros +ddnextp100 nextplus 0 -> 1E-398 +ddnextp101 nextplus 0.00 -> 1E-398 +ddnextp102 nextplus 0E-300 -> 1E-398 +ddnextp103 nextplus 0E+300 -> 1E-398 +ddnextp104 nextplus 0E+30000 -> 1E-398 +ddnextp105 nextplus -0 -> 1E-398 +ddnextp106 nextplus -0.00 -> 1E-398 +ddnextp107 nextplus -0E-300 -> 1E-398 +ddnextp108 nextplus -0E+300 -> 1E-398 +ddnextp109 nextplus -0E+30000 -> 1E-398 + +-- specials +ddnextp150 nextplus Inf -> Infinity +ddnextp151 nextplus -Inf -> -9.999999999999999E+384 +ddnextp152 nextplus NaN -> NaN +ddnextp153 nextplus sNaN -> NaN Invalid_operation +ddnextp154 nextplus NaN77 -> NaN77 +ddnextp155 nextplus sNaN88 -> NaN88 Invalid_operation +ddnextp156 nextplus -NaN -> -NaN +ddnextp157 nextplus -sNaN -> -NaN Invalid_operation +ddnextp158 nextplus -NaN77 -> -NaN77 +ddnextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +ddnextp170 nextplus -9.999999999999999E+384 -> -9.999999999999998E+384 +ddnextp171 nextplus -9.999999999999998E+384 -> -9.999999999999997E+384 +ddnextp172 nextplus -1E-383 -> -9.99999999999999E-384 +ddnextp173 nextplus -1.000000000000000E-383 -> -9.99999999999999E-384 +ddnextp174 nextplus -9E-398 -> -8E-398 +ddnextp175 nextplus -9.9E-397 -> -9.8E-397 +ddnextp176 nextplus -9.99999999999E-387 -> -9.99999999998E-387 +ddnextp177 nextplus -9.99999999999999E-384 -> -9.99999999999998E-384 +ddnextp178 nextplus -9.99999999999998E-384 -> -9.99999999999997E-384 +ddnextp179 nextplus -9.99999999999997E-384 -> -9.99999999999996E-384 +ddnextp180 nextplus -0E-398 -> 1E-398 +ddnextp181 nextplus -1E-398 -> -0E-398 +ddnextp182 nextplus -2E-398 -> -1E-398 + +ddnextp183 nextplus 0E-398 -> 1E-398 +ddnextp184 nextplus 1E-398 -> 2E-398 +ddnextp185 nextplus 2E-398 -> 3E-398 +ddnextp186 nextplus 10E-398 -> 1.1E-397 +ddnextp187 nextplus 100E-398 -> 1.01E-396 +ddnextp188 nextplus 100000E-398 -> 1.00001E-393 +ddnextp189 nextplus 1.00000000000E-383 -> 1.000000000000001E-383 +ddnextp190 nextplus 1.000000000000000E-383 -> 1.000000000000001E-383 +ddnextp191 nextplus 1E-383 -> 1.000000000000001E-383 +ddnextp192 nextplus 9.999999999999998E+384 -> 9.999999999999999E+384 +ddnextp193 nextplus 9.999999999999999E+384 -> Infinity + +-- Null tests +ddnextp900 nextplus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddNextToward.decTest b/Lib/test/decimaltestdata/ddNextToward.decTest index f9e474d70f4..75386add312 100644 --- a/Lib/test/decimaltestdata/ddNextToward.decTest +++ b/Lib/test/decimaltestdata/ddNextToward.decTest @@ -1,374 +1,374 @@ ------------------------------------------------------------------------- --- ddNextToward.decTest -- decDouble next toward rhs [754r nextafter] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check with a scattering of numerics -ddnextt001 nexttoward 10 10 -> 10 -ddnextt002 nexttoward -10 -10 -> -10 -ddnextt003 nexttoward 1 10 -> 1.000000000000001 -ddnextt004 nexttoward 1 -10 -> 0.9999999999999999 -ddnextt005 nexttoward -1 10 -> -0.9999999999999999 -ddnextt006 nexttoward -1 -10 -> -1.000000000000001 -ddnextt007 nexttoward 0 10 -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt008 nexttoward 0 -10 -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt009 nexttoward 9.999999999999999E+384 +Infinity -> Infinity Overflow Inexact Rounded -ddnextt010 nexttoward -9.999999999999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded -ddnextt011 nexttoward 9.999999999999999 10 -> 10.00000000000000 -ddnextt012 nexttoward 10 9.999999999999999 -> 9.999999999999999 -ddnextt013 nexttoward -9.999999999999999 -10 -> -10.00000000000000 -ddnextt014 nexttoward -10 -9.999999999999999 -> -9.999999999999999 -ddnextt015 nexttoward 9.999999999999998 10 -> 9.999999999999999 -ddnextt016 nexttoward 10 9.999999999999998 -> 9.999999999999999 -ddnextt017 nexttoward -9.999999999999998 -10 -> -9.999999999999999 -ddnextt018 nexttoward -10 -9.999999999999998 -> -9.999999999999999 - -------- lhs=rhs --- finites -ddnextt101 nexttoward 7 7 -> 7 -ddnextt102 nexttoward -7 -7 -> -7 -ddnextt103 nexttoward 75 75 -> 75 -ddnextt104 nexttoward -75 -75 -> -75 -ddnextt105 nexttoward 7.50 7.5 -> 7.50 -ddnextt106 nexttoward -7.50 -7.50 -> -7.50 -ddnextt107 nexttoward 7.500 7.5000 -> 7.500 -ddnextt108 nexttoward -7.500 -7.5 -> -7.500 - --- zeros -ddnextt111 nexttoward 0 0 -> 0 -ddnextt112 nexttoward -0 -0 -> -0 -ddnextt113 nexttoward 0E+4 0 -> 0E+4 -ddnextt114 nexttoward -0E+4 -0 -> -0E+4 -ddnextt115 nexttoward 0.00000000000 0.000000000000 -> 0E-11 -ddnextt116 nexttoward -0.00000000000 -0.00 -> -0E-11 -ddnextt117 nexttoward 0E-141 0 -> 0E-141 -ddnextt118 nexttoward -0E-141 -000 -> -0E-141 - --- full coefficients, alternating bits -ddnextt121 nexttoward 268268268 268268268 -> 268268268 -ddnextt122 nexttoward -268268268 -268268268 -> -268268268 -ddnextt123 nexttoward 134134134 134134134 -> 134134134 -ddnextt124 nexttoward -134134134 -134134134 -> -134134134 - --- Nmax, Nmin, Ntiny -ddnextt131 nexttoward 9.999999999999999E+384 9.999999999999999E+384 -> 9.999999999999999E+384 -ddnextt132 nexttoward 1E-383 1E-383 -> 1E-383 -ddnextt133 nexttoward 1.000000000000000E-383 1.000000000000000E-383 -> 1.000000000000000E-383 -ddnextt134 nexttoward 1E-398 1E-398 -> 1E-398 - -ddnextt135 nexttoward -1E-398 -1E-398 -> -1E-398 -ddnextt136 nexttoward -1.000000000000000E-383 -1.000000000000000E-383 -> -1.000000000000000E-383 -ddnextt137 nexttoward -1E-383 -1E-383 -> -1E-383 -ddnextt138 nexttoward -9.999999999999999E+384 -9.999999999999999E+384 -> -9.999999999999999E+384 - -------- lhs 0.9999999999999996 -ddnextt202 nexttoward 0.9999999999999996 Infinity -> 0.9999999999999997 -ddnextt203 nexttoward 0.9999999999999997 Infinity -> 0.9999999999999998 -ddnextt204 nexttoward 0.9999999999999998 Infinity -> 0.9999999999999999 -ddnextt205 nexttoward 0.9999999999999999 Infinity -> 1.000000000000000 -ddnextt206 nexttoward 1.000000000000000 Infinity -> 1.000000000000001 -ddnextt207 nexttoward 1.0 Infinity -> 1.000000000000001 -ddnextt208 nexttoward 1 Infinity -> 1.000000000000001 -ddnextt209 nexttoward 1.000000000000001 Infinity -> 1.000000000000002 -ddnextt210 nexttoward 1.000000000000002 Infinity -> 1.000000000000003 -ddnextt211 nexttoward 1.000000000000003 Infinity -> 1.000000000000004 -ddnextt212 nexttoward 1.000000000000004 Infinity -> 1.000000000000005 -ddnextt213 nexttoward 1.000000000000005 Infinity -> 1.000000000000006 -ddnextt214 nexttoward 1.000000000000006 Infinity -> 1.000000000000007 -ddnextt215 nexttoward 1.000000000000007 Infinity -> 1.000000000000008 -ddnextt216 nexttoward 1.000000000000008 Infinity -> 1.000000000000009 -ddnextt217 nexttoward 1.000000000000009 Infinity -> 1.000000000000010 -ddnextt218 nexttoward 1.000000000000010 Infinity -> 1.000000000000011 -ddnextt219 nexttoward 1.000000000000011 Infinity -> 1.000000000000012 - -ddnextt221 nexttoward -0.9999999999999995 Infinity -> -0.9999999999999994 -ddnextt222 nexttoward -0.9999999999999996 Infinity -> -0.9999999999999995 -ddnextt223 nexttoward -0.9999999999999997 Infinity -> -0.9999999999999996 -ddnextt224 nexttoward -0.9999999999999998 Infinity -> -0.9999999999999997 -ddnextt225 nexttoward -0.9999999999999999 Infinity -> -0.9999999999999998 -ddnextt226 nexttoward -1.000000000000000 Infinity -> -0.9999999999999999 -ddnextt227 nexttoward -1.0 Infinity -> -0.9999999999999999 -ddnextt228 nexttoward -1 Infinity -> -0.9999999999999999 -ddnextt229 nexttoward -1.000000000000001 Infinity -> -1.000000000000000 -ddnextt230 nexttoward -1.000000000000002 Infinity -> -1.000000000000001 -ddnextt231 nexttoward -1.000000000000003 Infinity -> -1.000000000000002 -ddnextt232 nexttoward -1.000000000000004 Infinity -> -1.000000000000003 -ddnextt233 nexttoward -1.000000000000005 Infinity -> -1.000000000000004 -ddnextt234 nexttoward -1.000000000000006 Infinity -> -1.000000000000005 -ddnextt235 nexttoward -1.000000000000007 Infinity -> -1.000000000000006 -ddnextt236 nexttoward -1.000000000000008 Infinity -> -1.000000000000007 -ddnextt237 nexttoward -1.000000000000009 Infinity -> -1.000000000000008 -ddnextt238 nexttoward -1.000000000000010 Infinity -> -1.000000000000009 -ddnextt239 nexttoward -1.000000000000011 Infinity -> -1.000000000000010 -ddnextt240 nexttoward -1.000000000000012 Infinity -> -1.000000000000011 - --- Zeros -ddnextt300 nexttoward 0 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt301 nexttoward 0.00 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt302 nexttoward 0E-300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt303 nexttoward 0E+300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt304 nexttoward 0E+30000 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt305 nexttoward -0 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt306 nexttoward -0.00 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt307 nexttoward -0E-300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt308 nexttoward -0E+300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt309 nexttoward -0E+30000 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded - --- specials -ddnextt350 nexttoward Inf Infinity -> Infinity -ddnextt351 nexttoward -Inf Infinity -> -9.999999999999999E+384 -ddnextt352 nexttoward NaN Infinity -> NaN -ddnextt353 nexttoward sNaN Infinity -> NaN Invalid_operation -ddnextt354 nexttoward NaN77 Infinity -> NaN77 -ddnextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation -ddnextt356 nexttoward -NaN Infinity -> -NaN -ddnextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation -ddnextt358 nexttoward -NaN77 Infinity -> -NaN77 -ddnextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -ddnextt370 nexttoward -9.999999999999999E+384 Infinity -> -9.999999999999998E+384 -ddnextt371 nexttoward -9.999999999999998E+384 Infinity -> -9.999999999999997E+384 -ddnextt372 nexttoward -1E-383 Infinity -> -9.99999999999999E-384 Underflow Subnormal Inexact Rounded -ddnextt373 nexttoward -1.000000000000000E-383 Infinity -> -9.99999999999999E-384 Underflow Subnormal Inexact Rounded -ddnextt374 nexttoward -9E-398 Infinity -> -8E-398 Underflow Subnormal Inexact Rounded -ddnextt375 nexttoward -9.9E-397 Infinity -> -9.8E-397 Underflow Subnormal Inexact Rounded -ddnextt376 nexttoward -9.99999999999E-387 Infinity -> -9.99999999998E-387 Underflow Subnormal Inexact Rounded -ddnextt377 nexttoward -9.99999999999999E-384 Infinity -> -9.99999999999998E-384 Underflow Subnormal Inexact Rounded -ddnextt378 nexttoward -9.99999999999998E-384 Infinity -> -9.99999999999997E-384 Underflow Subnormal Inexact Rounded -ddnextt379 nexttoward -9.99999999999997E-384 Infinity -> -9.99999999999996E-384 Underflow Subnormal Inexact Rounded -ddnextt380 nexttoward -0E-398 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt381 nexttoward -1E-398 Infinity -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddnextt382 nexttoward -2E-398 Infinity -> -1E-398 Underflow Subnormal Inexact Rounded - -ddnextt383 nexttoward 0E-398 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt384 nexttoward 1E-398 Infinity -> 2E-398 Underflow Subnormal Inexact Rounded -ddnextt385 nexttoward 2E-398 Infinity -> 3E-398 Underflow Subnormal Inexact Rounded -ddnextt386 nexttoward 10E-398 Infinity -> 1.1E-397 Underflow Subnormal Inexact Rounded -ddnextt387 nexttoward 100E-398 Infinity -> 1.01E-396 Underflow Subnormal Inexact Rounded -ddnextt388 nexttoward 100000E-398 Infinity -> 1.00001E-393 Underflow Subnormal Inexact Rounded -ddnextt389 nexttoward 1.00000000000E-383 Infinity -> 1.000000000000001E-383 -ddnextt390 nexttoward 1.000000000000000E-383 Infinity -> 1.000000000000001E-383 -ddnextt391 nexttoward 1E-383 Infinity -> 1.000000000000001E-383 -ddnextt392 nexttoward 9.999999999999997E+384 Infinity -> 9.999999999999998E+384 -ddnextt393 nexttoward 9.999999999999998E+384 Infinity -> 9.999999999999999E+384 -ddnextt394 nexttoward 9.999999999999999E+384 Infinity -> Infinity Overflow Inexact Rounded - -------- lhs>rhs -ddnextt401 nexttoward 0.9999999999999995 -Infinity -> 0.9999999999999994 -ddnextt402 nexttoward 0.9999999999999996 -Infinity -> 0.9999999999999995 -ddnextt403 nexttoward 0.9999999999999997 -Infinity -> 0.9999999999999996 -ddnextt404 nexttoward 0.9999999999999998 -Infinity -> 0.9999999999999997 -ddnextt405 nexttoward 0.9999999999999999 -Infinity -> 0.9999999999999998 -ddnextt406 nexttoward 1.000000000000000 -Infinity -> 0.9999999999999999 -ddnextt407 nexttoward 1.0 -Infinity -> 0.9999999999999999 -ddnextt408 nexttoward 1 -Infinity -> 0.9999999999999999 -ddnextt409 nexttoward 1.000000000000001 -Infinity -> 1.000000000000000 -ddnextt410 nexttoward 1.000000000000002 -Infinity -> 1.000000000000001 -ddnextt411 nexttoward 1.000000000000003 -Infinity -> 1.000000000000002 -ddnextt412 nexttoward 1.000000000000004 -Infinity -> 1.000000000000003 -ddnextt413 nexttoward 1.000000000000005 -Infinity -> 1.000000000000004 -ddnextt414 nexttoward 1.000000000000006 -Infinity -> 1.000000000000005 -ddnextt415 nexttoward 1.000000000000007 -Infinity -> 1.000000000000006 -ddnextt416 nexttoward 1.000000000000008 -Infinity -> 1.000000000000007 -ddnextt417 nexttoward 1.000000000000009 -Infinity -> 1.000000000000008 -ddnextt418 nexttoward 1.000000000000010 -Infinity -> 1.000000000000009 -ddnextt419 nexttoward 1.000000000000011 -Infinity -> 1.000000000000010 -ddnextt420 nexttoward 1.000000000000012 -Infinity -> 1.000000000000011 - -ddnextt421 nexttoward -0.9999999999999995 -Infinity -> -0.9999999999999996 -ddnextt422 nexttoward -0.9999999999999996 -Infinity -> -0.9999999999999997 -ddnextt423 nexttoward -0.9999999999999997 -Infinity -> -0.9999999999999998 -ddnextt424 nexttoward -0.9999999999999998 -Infinity -> -0.9999999999999999 -ddnextt425 nexttoward -0.9999999999999999 -Infinity -> -1.000000000000000 -ddnextt426 nexttoward -1.000000000000000 -Infinity -> -1.000000000000001 -ddnextt427 nexttoward -1.0 -Infinity -> -1.000000000000001 -ddnextt428 nexttoward -1 -Infinity -> -1.000000000000001 -ddnextt429 nexttoward -1.000000000000001 -Infinity -> -1.000000000000002 -ddnextt430 nexttoward -1.000000000000002 -Infinity -> -1.000000000000003 -ddnextt431 nexttoward -1.000000000000003 -Infinity -> -1.000000000000004 -ddnextt432 nexttoward -1.000000000000004 -Infinity -> -1.000000000000005 -ddnextt433 nexttoward -1.000000000000005 -Infinity -> -1.000000000000006 -ddnextt434 nexttoward -1.000000000000006 -Infinity -> -1.000000000000007 -ddnextt435 nexttoward -1.000000000000007 -Infinity -> -1.000000000000008 -ddnextt436 nexttoward -1.000000000000008 -Infinity -> -1.000000000000009 -ddnextt437 nexttoward -1.000000000000009 -Infinity -> -1.000000000000010 -ddnextt438 nexttoward -1.000000000000010 -Infinity -> -1.000000000000011 -ddnextt439 nexttoward -1.000000000000011 -Infinity -> -1.000000000000012 - --- Zeros -ddnextt500 nexttoward -0 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt501 nexttoward 0 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt502 nexttoward 0.00 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt503 nexttoward -0.00 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt504 nexttoward 0E-300 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt505 nexttoward 0E+300 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt506 nexttoward 0E+30000 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt507 nexttoward -0E+30000 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded - --- specials -ddnextt550 nexttoward Inf -Infinity -> 9.999999999999999E+384 -ddnextt551 nexttoward -Inf -Infinity -> -Infinity -ddnextt552 nexttoward NaN -Infinity -> NaN -ddnextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation -ddnextt554 nexttoward NaN77 -Infinity -> NaN77 -ddnextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation -ddnextt556 nexttoward -NaN -Infinity -> -NaN -ddnextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation -ddnextt558 nexttoward -NaN77 -Infinity -> -NaN77 -ddnextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -ddnextt670 nexttoward 9.999999999999999E+384 -Infinity -> 9.999999999999998E+384 -ddnextt671 nexttoward 9.999999999999998E+384 -Infinity -> 9.999999999999997E+384 -ddnextt672 nexttoward 1E-383 -Infinity -> 9.99999999999999E-384 Underflow Subnormal Inexact Rounded -ddnextt673 nexttoward 1.000000000000000E-383 -Infinity -> 9.99999999999999E-384 Underflow Subnormal Inexact Rounded -ddnextt674 nexttoward 9E-398 -Infinity -> 8E-398 Underflow Subnormal Inexact Rounded -ddnextt675 nexttoward 9.9E-397 -Infinity -> 9.8E-397 Underflow Subnormal Inexact Rounded -ddnextt676 nexttoward 9.99999999999E-387 -Infinity -> 9.99999999998E-387 Underflow Subnormal Inexact Rounded -ddnextt677 nexttoward 9.99999999999999E-384 -Infinity -> 9.99999999999998E-384 Underflow Subnormal Inexact Rounded -ddnextt678 nexttoward 9.99999999999998E-384 -Infinity -> 9.99999999999997E-384 Underflow Subnormal Inexact Rounded -ddnextt679 nexttoward 9.99999999999997E-384 -Infinity -> 9.99999999999996E-384 Underflow Subnormal Inexact Rounded -ddnextt680 nexttoward 0E-398 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt681 nexttoward 1E-398 -Infinity -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddnextt682 nexttoward 2E-398 -Infinity -> 1E-398 Underflow Subnormal Inexact Rounded - -ddnextt683 nexttoward -0E-398 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt684 nexttoward -1E-398 -Infinity -> -2E-398 Underflow Subnormal Inexact Rounded -ddnextt685 nexttoward -2E-398 -Infinity -> -3E-398 Underflow Subnormal Inexact Rounded -ddnextt686 nexttoward -10E-398 -Infinity -> -1.1E-397 Underflow Subnormal Inexact Rounded -ddnextt687 nexttoward -100E-398 -Infinity -> -1.01E-396 Underflow Subnormal Inexact Rounded -ddnextt688 nexttoward -100000E-398 -Infinity -> -1.00001E-393 Underflow Subnormal Inexact Rounded -ddnextt689 nexttoward -1.00000000000E-383 -Infinity -> -1.000000000000001E-383 -ddnextt690 nexttoward -1.000000000000000E-383 -Infinity -> -1.000000000000001E-383 -ddnextt691 nexttoward -1E-383 -Infinity -> -1.000000000000001E-383 -ddnextt692 nexttoward -9.999999999999998E+384 -Infinity -> -9.999999999999999E+384 -ddnextt693 nexttoward -9.999999999999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded - -------- Specials -ddnextt780 nexttoward -Inf -Inf -> -Infinity -ddnextt781 nexttoward -Inf -1000 -> -9.999999999999999E+384 -ddnextt782 nexttoward -Inf -1 -> -9.999999999999999E+384 -ddnextt783 nexttoward -Inf -0 -> -9.999999999999999E+384 -ddnextt784 nexttoward -Inf 0 -> -9.999999999999999E+384 -ddnextt785 nexttoward -Inf 1 -> -9.999999999999999E+384 -ddnextt786 nexttoward -Inf 1000 -> -9.999999999999999E+384 -ddnextt787 nexttoward -1000 -Inf -> -1000.000000000001 -ddnextt788 nexttoward -Inf -Inf -> -Infinity -ddnextt789 nexttoward -1 -Inf -> -1.000000000000001 -ddnextt790 nexttoward -0 -Inf -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt791 nexttoward 0 -Inf -> -1E-398 Underflow Subnormal Inexact Rounded -ddnextt792 nexttoward 1 -Inf -> 0.9999999999999999 -ddnextt793 nexttoward 1000 -Inf -> 999.9999999999999 -ddnextt794 nexttoward Inf -Inf -> 9.999999999999999E+384 - -ddnextt800 nexttoward Inf -Inf -> 9.999999999999999E+384 -ddnextt801 nexttoward Inf -1000 -> 9.999999999999999E+384 -ddnextt802 nexttoward Inf -1 -> 9.999999999999999E+384 -ddnextt803 nexttoward Inf -0 -> 9.999999999999999E+384 -ddnextt804 nexttoward Inf 0 -> 9.999999999999999E+384 -ddnextt805 nexttoward Inf 1 -> 9.999999999999999E+384 -ddnextt806 nexttoward Inf 1000 -> 9.999999999999999E+384 -ddnextt807 nexttoward Inf Inf -> Infinity -ddnextt808 nexttoward -1000 Inf -> -999.9999999999999 -ddnextt809 nexttoward -Inf Inf -> -9.999999999999999E+384 -ddnextt810 nexttoward -1 Inf -> -0.9999999999999999 -ddnextt811 nexttoward -0 Inf -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt812 nexttoward 0 Inf -> 1E-398 Underflow Subnormal Inexact Rounded -ddnextt813 nexttoward 1 Inf -> 1.000000000000001 -ddnextt814 nexttoward 1000 Inf -> 1000.000000000001 -ddnextt815 nexttoward Inf Inf -> Infinity - -ddnextt821 nexttoward NaN -Inf -> NaN -ddnextt822 nexttoward NaN -1000 -> NaN -ddnextt823 nexttoward NaN -1 -> NaN -ddnextt824 nexttoward NaN -0 -> NaN -ddnextt825 nexttoward NaN 0 -> NaN -ddnextt826 nexttoward NaN 1 -> NaN -ddnextt827 nexttoward NaN 1000 -> NaN -ddnextt828 nexttoward NaN Inf -> NaN -ddnextt829 nexttoward NaN NaN -> NaN -ddnextt830 nexttoward -Inf NaN -> NaN -ddnextt831 nexttoward -1000 NaN -> NaN -ddnextt832 nexttoward -1 NaN -> NaN -ddnextt833 nexttoward -0 NaN -> NaN -ddnextt834 nexttoward 0 NaN -> NaN -ddnextt835 nexttoward 1 NaN -> NaN -ddnextt836 nexttoward 1000 NaN -> NaN -ddnextt837 nexttoward Inf NaN -> NaN - -ddnextt841 nexttoward sNaN -Inf -> NaN Invalid_operation -ddnextt842 nexttoward sNaN -1000 -> NaN Invalid_operation -ddnextt843 nexttoward sNaN -1 -> NaN Invalid_operation -ddnextt844 nexttoward sNaN -0 -> NaN Invalid_operation -ddnextt845 nexttoward sNaN 0 -> NaN Invalid_operation -ddnextt846 nexttoward sNaN 1 -> NaN Invalid_operation -ddnextt847 nexttoward sNaN 1000 -> NaN Invalid_operation -ddnextt848 nexttoward sNaN NaN -> NaN Invalid_operation -ddnextt849 nexttoward sNaN sNaN -> NaN Invalid_operation -ddnextt850 nexttoward NaN sNaN -> NaN Invalid_operation -ddnextt851 nexttoward -Inf sNaN -> NaN Invalid_operation -ddnextt852 nexttoward -1000 sNaN -> NaN Invalid_operation -ddnextt853 nexttoward -1 sNaN -> NaN Invalid_operation -ddnextt854 nexttoward -0 sNaN -> NaN Invalid_operation -ddnextt855 nexttoward 0 sNaN -> NaN Invalid_operation -ddnextt856 nexttoward 1 sNaN -> NaN Invalid_operation -ddnextt857 nexttoward 1000 sNaN -> NaN Invalid_operation -ddnextt858 nexttoward Inf sNaN -> NaN Invalid_operation -ddnextt859 nexttoward NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddnextt861 nexttoward NaN1 -Inf -> NaN1 -ddnextt862 nexttoward +NaN2 -1000 -> NaN2 -ddnextt863 nexttoward NaN3 1000 -> NaN3 -ddnextt864 nexttoward NaN4 Inf -> NaN4 -ddnextt865 nexttoward NaN5 +NaN6 -> NaN5 -ddnextt866 nexttoward -Inf NaN7 -> NaN7 -ddnextt867 nexttoward -1000 NaN8 -> NaN8 -ddnextt868 nexttoward 1000 NaN9 -> NaN9 -ddnextt869 nexttoward Inf +NaN10 -> NaN10 -ddnextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation -ddnextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation -ddnextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation -ddnextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation -ddnextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation -ddnextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation -ddnextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation -ddnextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation -ddnextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation -ddnextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation -ddnextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddnextt882 nexttoward -NaN26 NaN28 -> -NaN26 -ddnextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddnextt884 nexttoward 1000 -NaN30 -> -NaN30 -ddnextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Null tests -ddnextt900 nexttoward 1 # -> NaN Invalid_operation -ddnextt901 nexttoward # 1 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddNextToward.decTest -- decDouble next toward rhs [754r nextafter] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check with a scattering of numerics +ddnextt001 nexttoward 10 10 -> 10 +ddnextt002 nexttoward -10 -10 -> -10 +ddnextt003 nexttoward 1 10 -> 1.000000000000001 +ddnextt004 nexttoward 1 -10 -> 0.9999999999999999 +ddnextt005 nexttoward -1 10 -> -0.9999999999999999 +ddnextt006 nexttoward -1 -10 -> -1.000000000000001 +ddnextt007 nexttoward 0 10 -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt008 nexttoward 0 -10 -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt009 nexttoward 9.999999999999999E+384 +Infinity -> Infinity Overflow Inexact Rounded +ddnextt010 nexttoward -9.999999999999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded +ddnextt011 nexttoward 9.999999999999999 10 -> 10.00000000000000 +ddnextt012 nexttoward 10 9.999999999999999 -> 9.999999999999999 +ddnextt013 nexttoward -9.999999999999999 -10 -> -10.00000000000000 +ddnextt014 nexttoward -10 -9.999999999999999 -> -9.999999999999999 +ddnextt015 nexttoward 9.999999999999998 10 -> 9.999999999999999 +ddnextt016 nexttoward 10 9.999999999999998 -> 9.999999999999999 +ddnextt017 nexttoward -9.999999999999998 -10 -> -9.999999999999999 +ddnextt018 nexttoward -10 -9.999999999999998 -> -9.999999999999999 + +------- lhs=rhs +-- finites +ddnextt101 nexttoward 7 7 -> 7 +ddnextt102 nexttoward -7 -7 -> -7 +ddnextt103 nexttoward 75 75 -> 75 +ddnextt104 nexttoward -75 -75 -> -75 +ddnextt105 nexttoward 7.50 7.5 -> 7.50 +ddnextt106 nexttoward -7.50 -7.50 -> -7.50 +ddnextt107 nexttoward 7.500 7.5000 -> 7.500 +ddnextt108 nexttoward -7.500 -7.5 -> -7.500 + +-- zeros +ddnextt111 nexttoward 0 0 -> 0 +ddnextt112 nexttoward -0 -0 -> -0 +ddnextt113 nexttoward 0E+4 0 -> 0E+4 +ddnextt114 nexttoward -0E+4 -0 -> -0E+4 +ddnextt115 nexttoward 0.00000000000 0.000000000000 -> 0E-11 +ddnextt116 nexttoward -0.00000000000 -0.00 -> -0E-11 +ddnextt117 nexttoward 0E-141 0 -> 0E-141 +ddnextt118 nexttoward -0E-141 -000 -> -0E-141 + +-- full coefficients, alternating bits +ddnextt121 nexttoward 268268268 268268268 -> 268268268 +ddnextt122 nexttoward -268268268 -268268268 -> -268268268 +ddnextt123 nexttoward 134134134 134134134 -> 134134134 +ddnextt124 nexttoward -134134134 -134134134 -> -134134134 + +-- Nmax, Nmin, Ntiny +ddnextt131 nexttoward 9.999999999999999E+384 9.999999999999999E+384 -> 9.999999999999999E+384 +ddnextt132 nexttoward 1E-383 1E-383 -> 1E-383 +ddnextt133 nexttoward 1.000000000000000E-383 1.000000000000000E-383 -> 1.000000000000000E-383 +ddnextt134 nexttoward 1E-398 1E-398 -> 1E-398 + +ddnextt135 nexttoward -1E-398 -1E-398 -> -1E-398 +ddnextt136 nexttoward -1.000000000000000E-383 -1.000000000000000E-383 -> -1.000000000000000E-383 +ddnextt137 nexttoward -1E-383 -1E-383 -> -1E-383 +ddnextt138 nexttoward -9.999999999999999E+384 -9.999999999999999E+384 -> -9.999999999999999E+384 + +------- lhs 0.9999999999999996 +ddnextt202 nexttoward 0.9999999999999996 Infinity -> 0.9999999999999997 +ddnextt203 nexttoward 0.9999999999999997 Infinity -> 0.9999999999999998 +ddnextt204 nexttoward 0.9999999999999998 Infinity -> 0.9999999999999999 +ddnextt205 nexttoward 0.9999999999999999 Infinity -> 1.000000000000000 +ddnextt206 nexttoward 1.000000000000000 Infinity -> 1.000000000000001 +ddnextt207 nexttoward 1.0 Infinity -> 1.000000000000001 +ddnextt208 nexttoward 1 Infinity -> 1.000000000000001 +ddnextt209 nexttoward 1.000000000000001 Infinity -> 1.000000000000002 +ddnextt210 nexttoward 1.000000000000002 Infinity -> 1.000000000000003 +ddnextt211 nexttoward 1.000000000000003 Infinity -> 1.000000000000004 +ddnextt212 nexttoward 1.000000000000004 Infinity -> 1.000000000000005 +ddnextt213 nexttoward 1.000000000000005 Infinity -> 1.000000000000006 +ddnextt214 nexttoward 1.000000000000006 Infinity -> 1.000000000000007 +ddnextt215 nexttoward 1.000000000000007 Infinity -> 1.000000000000008 +ddnextt216 nexttoward 1.000000000000008 Infinity -> 1.000000000000009 +ddnextt217 nexttoward 1.000000000000009 Infinity -> 1.000000000000010 +ddnextt218 nexttoward 1.000000000000010 Infinity -> 1.000000000000011 +ddnextt219 nexttoward 1.000000000000011 Infinity -> 1.000000000000012 + +ddnextt221 nexttoward -0.9999999999999995 Infinity -> -0.9999999999999994 +ddnextt222 nexttoward -0.9999999999999996 Infinity -> -0.9999999999999995 +ddnextt223 nexttoward -0.9999999999999997 Infinity -> -0.9999999999999996 +ddnextt224 nexttoward -0.9999999999999998 Infinity -> -0.9999999999999997 +ddnextt225 nexttoward -0.9999999999999999 Infinity -> -0.9999999999999998 +ddnextt226 nexttoward -1.000000000000000 Infinity -> -0.9999999999999999 +ddnextt227 nexttoward -1.0 Infinity -> -0.9999999999999999 +ddnextt228 nexttoward -1 Infinity -> -0.9999999999999999 +ddnextt229 nexttoward -1.000000000000001 Infinity -> -1.000000000000000 +ddnextt230 nexttoward -1.000000000000002 Infinity -> -1.000000000000001 +ddnextt231 nexttoward -1.000000000000003 Infinity -> -1.000000000000002 +ddnextt232 nexttoward -1.000000000000004 Infinity -> -1.000000000000003 +ddnextt233 nexttoward -1.000000000000005 Infinity -> -1.000000000000004 +ddnextt234 nexttoward -1.000000000000006 Infinity -> -1.000000000000005 +ddnextt235 nexttoward -1.000000000000007 Infinity -> -1.000000000000006 +ddnextt236 nexttoward -1.000000000000008 Infinity -> -1.000000000000007 +ddnextt237 nexttoward -1.000000000000009 Infinity -> -1.000000000000008 +ddnextt238 nexttoward -1.000000000000010 Infinity -> -1.000000000000009 +ddnextt239 nexttoward -1.000000000000011 Infinity -> -1.000000000000010 +ddnextt240 nexttoward -1.000000000000012 Infinity -> -1.000000000000011 + +-- Zeros +ddnextt300 nexttoward 0 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt301 nexttoward 0.00 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt302 nexttoward 0E-300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt303 nexttoward 0E+300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt304 nexttoward 0E+30000 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt305 nexttoward -0 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt306 nexttoward -0.00 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt307 nexttoward -0E-300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt308 nexttoward -0E+300 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt309 nexttoward -0E+30000 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded + +-- specials +ddnextt350 nexttoward Inf Infinity -> Infinity +ddnextt351 nexttoward -Inf Infinity -> -9.999999999999999E+384 +ddnextt352 nexttoward NaN Infinity -> NaN +ddnextt353 nexttoward sNaN Infinity -> NaN Invalid_operation +ddnextt354 nexttoward NaN77 Infinity -> NaN77 +ddnextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation +ddnextt356 nexttoward -NaN Infinity -> -NaN +ddnextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation +ddnextt358 nexttoward -NaN77 Infinity -> -NaN77 +ddnextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +ddnextt370 nexttoward -9.999999999999999E+384 Infinity -> -9.999999999999998E+384 +ddnextt371 nexttoward -9.999999999999998E+384 Infinity -> -9.999999999999997E+384 +ddnextt372 nexttoward -1E-383 Infinity -> -9.99999999999999E-384 Underflow Subnormal Inexact Rounded +ddnextt373 nexttoward -1.000000000000000E-383 Infinity -> -9.99999999999999E-384 Underflow Subnormal Inexact Rounded +ddnextt374 nexttoward -9E-398 Infinity -> -8E-398 Underflow Subnormal Inexact Rounded +ddnextt375 nexttoward -9.9E-397 Infinity -> -9.8E-397 Underflow Subnormal Inexact Rounded +ddnextt376 nexttoward -9.99999999999E-387 Infinity -> -9.99999999998E-387 Underflow Subnormal Inexact Rounded +ddnextt377 nexttoward -9.99999999999999E-384 Infinity -> -9.99999999999998E-384 Underflow Subnormal Inexact Rounded +ddnextt378 nexttoward -9.99999999999998E-384 Infinity -> -9.99999999999997E-384 Underflow Subnormal Inexact Rounded +ddnextt379 nexttoward -9.99999999999997E-384 Infinity -> -9.99999999999996E-384 Underflow Subnormal Inexact Rounded +ddnextt380 nexttoward -0E-398 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt381 nexttoward -1E-398 Infinity -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddnextt382 nexttoward -2E-398 Infinity -> -1E-398 Underflow Subnormal Inexact Rounded + +ddnextt383 nexttoward 0E-398 Infinity -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt384 nexttoward 1E-398 Infinity -> 2E-398 Underflow Subnormal Inexact Rounded +ddnextt385 nexttoward 2E-398 Infinity -> 3E-398 Underflow Subnormal Inexact Rounded +ddnextt386 nexttoward 10E-398 Infinity -> 1.1E-397 Underflow Subnormal Inexact Rounded +ddnextt387 nexttoward 100E-398 Infinity -> 1.01E-396 Underflow Subnormal Inexact Rounded +ddnextt388 nexttoward 100000E-398 Infinity -> 1.00001E-393 Underflow Subnormal Inexact Rounded +ddnextt389 nexttoward 1.00000000000E-383 Infinity -> 1.000000000000001E-383 +ddnextt390 nexttoward 1.000000000000000E-383 Infinity -> 1.000000000000001E-383 +ddnextt391 nexttoward 1E-383 Infinity -> 1.000000000000001E-383 +ddnextt392 nexttoward 9.999999999999997E+384 Infinity -> 9.999999999999998E+384 +ddnextt393 nexttoward 9.999999999999998E+384 Infinity -> 9.999999999999999E+384 +ddnextt394 nexttoward 9.999999999999999E+384 Infinity -> Infinity Overflow Inexact Rounded + +------- lhs>rhs +ddnextt401 nexttoward 0.9999999999999995 -Infinity -> 0.9999999999999994 +ddnextt402 nexttoward 0.9999999999999996 -Infinity -> 0.9999999999999995 +ddnextt403 nexttoward 0.9999999999999997 -Infinity -> 0.9999999999999996 +ddnextt404 nexttoward 0.9999999999999998 -Infinity -> 0.9999999999999997 +ddnextt405 nexttoward 0.9999999999999999 -Infinity -> 0.9999999999999998 +ddnextt406 nexttoward 1.000000000000000 -Infinity -> 0.9999999999999999 +ddnextt407 nexttoward 1.0 -Infinity -> 0.9999999999999999 +ddnextt408 nexttoward 1 -Infinity -> 0.9999999999999999 +ddnextt409 nexttoward 1.000000000000001 -Infinity -> 1.000000000000000 +ddnextt410 nexttoward 1.000000000000002 -Infinity -> 1.000000000000001 +ddnextt411 nexttoward 1.000000000000003 -Infinity -> 1.000000000000002 +ddnextt412 nexttoward 1.000000000000004 -Infinity -> 1.000000000000003 +ddnextt413 nexttoward 1.000000000000005 -Infinity -> 1.000000000000004 +ddnextt414 nexttoward 1.000000000000006 -Infinity -> 1.000000000000005 +ddnextt415 nexttoward 1.000000000000007 -Infinity -> 1.000000000000006 +ddnextt416 nexttoward 1.000000000000008 -Infinity -> 1.000000000000007 +ddnextt417 nexttoward 1.000000000000009 -Infinity -> 1.000000000000008 +ddnextt418 nexttoward 1.000000000000010 -Infinity -> 1.000000000000009 +ddnextt419 nexttoward 1.000000000000011 -Infinity -> 1.000000000000010 +ddnextt420 nexttoward 1.000000000000012 -Infinity -> 1.000000000000011 + +ddnextt421 nexttoward -0.9999999999999995 -Infinity -> -0.9999999999999996 +ddnextt422 nexttoward -0.9999999999999996 -Infinity -> -0.9999999999999997 +ddnextt423 nexttoward -0.9999999999999997 -Infinity -> -0.9999999999999998 +ddnextt424 nexttoward -0.9999999999999998 -Infinity -> -0.9999999999999999 +ddnextt425 nexttoward -0.9999999999999999 -Infinity -> -1.000000000000000 +ddnextt426 nexttoward -1.000000000000000 -Infinity -> -1.000000000000001 +ddnextt427 nexttoward -1.0 -Infinity -> -1.000000000000001 +ddnextt428 nexttoward -1 -Infinity -> -1.000000000000001 +ddnextt429 nexttoward -1.000000000000001 -Infinity -> -1.000000000000002 +ddnextt430 nexttoward -1.000000000000002 -Infinity -> -1.000000000000003 +ddnextt431 nexttoward -1.000000000000003 -Infinity -> -1.000000000000004 +ddnextt432 nexttoward -1.000000000000004 -Infinity -> -1.000000000000005 +ddnextt433 nexttoward -1.000000000000005 -Infinity -> -1.000000000000006 +ddnextt434 nexttoward -1.000000000000006 -Infinity -> -1.000000000000007 +ddnextt435 nexttoward -1.000000000000007 -Infinity -> -1.000000000000008 +ddnextt436 nexttoward -1.000000000000008 -Infinity -> -1.000000000000009 +ddnextt437 nexttoward -1.000000000000009 -Infinity -> -1.000000000000010 +ddnextt438 nexttoward -1.000000000000010 -Infinity -> -1.000000000000011 +ddnextt439 nexttoward -1.000000000000011 -Infinity -> -1.000000000000012 + +-- Zeros +ddnextt500 nexttoward -0 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt501 nexttoward 0 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt502 nexttoward 0.00 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt503 nexttoward -0.00 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt504 nexttoward 0E-300 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt505 nexttoward 0E+300 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt506 nexttoward 0E+30000 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt507 nexttoward -0E+30000 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded + +-- specials +ddnextt550 nexttoward Inf -Infinity -> 9.999999999999999E+384 +ddnextt551 nexttoward -Inf -Infinity -> -Infinity +ddnextt552 nexttoward NaN -Infinity -> NaN +ddnextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation +ddnextt554 nexttoward NaN77 -Infinity -> NaN77 +ddnextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation +ddnextt556 nexttoward -NaN -Infinity -> -NaN +ddnextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation +ddnextt558 nexttoward -NaN77 -Infinity -> -NaN77 +ddnextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +ddnextt670 nexttoward 9.999999999999999E+384 -Infinity -> 9.999999999999998E+384 +ddnextt671 nexttoward 9.999999999999998E+384 -Infinity -> 9.999999999999997E+384 +ddnextt672 nexttoward 1E-383 -Infinity -> 9.99999999999999E-384 Underflow Subnormal Inexact Rounded +ddnextt673 nexttoward 1.000000000000000E-383 -Infinity -> 9.99999999999999E-384 Underflow Subnormal Inexact Rounded +ddnextt674 nexttoward 9E-398 -Infinity -> 8E-398 Underflow Subnormal Inexact Rounded +ddnextt675 nexttoward 9.9E-397 -Infinity -> 9.8E-397 Underflow Subnormal Inexact Rounded +ddnextt676 nexttoward 9.99999999999E-387 -Infinity -> 9.99999999998E-387 Underflow Subnormal Inexact Rounded +ddnextt677 nexttoward 9.99999999999999E-384 -Infinity -> 9.99999999999998E-384 Underflow Subnormal Inexact Rounded +ddnextt678 nexttoward 9.99999999999998E-384 -Infinity -> 9.99999999999997E-384 Underflow Subnormal Inexact Rounded +ddnextt679 nexttoward 9.99999999999997E-384 -Infinity -> 9.99999999999996E-384 Underflow Subnormal Inexact Rounded +ddnextt680 nexttoward 0E-398 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt681 nexttoward 1E-398 -Infinity -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddnextt682 nexttoward 2E-398 -Infinity -> 1E-398 Underflow Subnormal Inexact Rounded + +ddnextt683 nexttoward -0E-398 -Infinity -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt684 nexttoward -1E-398 -Infinity -> -2E-398 Underflow Subnormal Inexact Rounded +ddnextt685 nexttoward -2E-398 -Infinity -> -3E-398 Underflow Subnormal Inexact Rounded +ddnextt686 nexttoward -10E-398 -Infinity -> -1.1E-397 Underflow Subnormal Inexact Rounded +ddnextt687 nexttoward -100E-398 -Infinity -> -1.01E-396 Underflow Subnormal Inexact Rounded +ddnextt688 nexttoward -100000E-398 -Infinity -> -1.00001E-393 Underflow Subnormal Inexact Rounded +ddnextt689 nexttoward -1.00000000000E-383 -Infinity -> -1.000000000000001E-383 +ddnextt690 nexttoward -1.000000000000000E-383 -Infinity -> -1.000000000000001E-383 +ddnextt691 nexttoward -1E-383 -Infinity -> -1.000000000000001E-383 +ddnextt692 nexttoward -9.999999999999998E+384 -Infinity -> -9.999999999999999E+384 +ddnextt693 nexttoward -9.999999999999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded + +------- Specials +ddnextt780 nexttoward -Inf -Inf -> -Infinity +ddnextt781 nexttoward -Inf -1000 -> -9.999999999999999E+384 +ddnextt782 nexttoward -Inf -1 -> -9.999999999999999E+384 +ddnextt783 nexttoward -Inf -0 -> -9.999999999999999E+384 +ddnextt784 nexttoward -Inf 0 -> -9.999999999999999E+384 +ddnextt785 nexttoward -Inf 1 -> -9.999999999999999E+384 +ddnextt786 nexttoward -Inf 1000 -> -9.999999999999999E+384 +ddnextt787 nexttoward -1000 -Inf -> -1000.000000000001 +ddnextt788 nexttoward -Inf -Inf -> -Infinity +ddnextt789 nexttoward -1 -Inf -> -1.000000000000001 +ddnextt790 nexttoward -0 -Inf -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt791 nexttoward 0 -Inf -> -1E-398 Underflow Subnormal Inexact Rounded +ddnextt792 nexttoward 1 -Inf -> 0.9999999999999999 +ddnextt793 nexttoward 1000 -Inf -> 999.9999999999999 +ddnextt794 nexttoward Inf -Inf -> 9.999999999999999E+384 + +ddnextt800 nexttoward Inf -Inf -> 9.999999999999999E+384 +ddnextt801 nexttoward Inf -1000 -> 9.999999999999999E+384 +ddnextt802 nexttoward Inf -1 -> 9.999999999999999E+384 +ddnextt803 nexttoward Inf -0 -> 9.999999999999999E+384 +ddnextt804 nexttoward Inf 0 -> 9.999999999999999E+384 +ddnextt805 nexttoward Inf 1 -> 9.999999999999999E+384 +ddnextt806 nexttoward Inf 1000 -> 9.999999999999999E+384 +ddnextt807 nexttoward Inf Inf -> Infinity +ddnextt808 nexttoward -1000 Inf -> -999.9999999999999 +ddnextt809 nexttoward -Inf Inf -> -9.999999999999999E+384 +ddnextt810 nexttoward -1 Inf -> -0.9999999999999999 +ddnextt811 nexttoward -0 Inf -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt812 nexttoward 0 Inf -> 1E-398 Underflow Subnormal Inexact Rounded +ddnextt813 nexttoward 1 Inf -> 1.000000000000001 +ddnextt814 nexttoward 1000 Inf -> 1000.000000000001 +ddnextt815 nexttoward Inf Inf -> Infinity + +ddnextt821 nexttoward NaN -Inf -> NaN +ddnextt822 nexttoward NaN -1000 -> NaN +ddnextt823 nexttoward NaN -1 -> NaN +ddnextt824 nexttoward NaN -0 -> NaN +ddnextt825 nexttoward NaN 0 -> NaN +ddnextt826 nexttoward NaN 1 -> NaN +ddnextt827 nexttoward NaN 1000 -> NaN +ddnextt828 nexttoward NaN Inf -> NaN +ddnextt829 nexttoward NaN NaN -> NaN +ddnextt830 nexttoward -Inf NaN -> NaN +ddnextt831 nexttoward -1000 NaN -> NaN +ddnextt832 nexttoward -1 NaN -> NaN +ddnextt833 nexttoward -0 NaN -> NaN +ddnextt834 nexttoward 0 NaN -> NaN +ddnextt835 nexttoward 1 NaN -> NaN +ddnextt836 nexttoward 1000 NaN -> NaN +ddnextt837 nexttoward Inf NaN -> NaN + +ddnextt841 nexttoward sNaN -Inf -> NaN Invalid_operation +ddnextt842 nexttoward sNaN -1000 -> NaN Invalid_operation +ddnextt843 nexttoward sNaN -1 -> NaN Invalid_operation +ddnextt844 nexttoward sNaN -0 -> NaN Invalid_operation +ddnextt845 nexttoward sNaN 0 -> NaN Invalid_operation +ddnextt846 nexttoward sNaN 1 -> NaN Invalid_operation +ddnextt847 nexttoward sNaN 1000 -> NaN Invalid_operation +ddnextt848 nexttoward sNaN NaN -> NaN Invalid_operation +ddnextt849 nexttoward sNaN sNaN -> NaN Invalid_operation +ddnextt850 nexttoward NaN sNaN -> NaN Invalid_operation +ddnextt851 nexttoward -Inf sNaN -> NaN Invalid_operation +ddnextt852 nexttoward -1000 sNaN -> NaN Invalid_operation +ddnextt853 nexttoward -1 sNaN -> NaN Invalid_operation +ddnextt854 nexttoward -0 sNaN -> NaN Invalid_operation +ddnextt855 nexttoward 0 sNaN -> NaN Invalid_operation +ddnextt856 nexttoward 1 sNaN -> NaN Invalid_operation +ddnextt857 nexttoward 1000 sNaN -> NaN Invalid_operation +ddnextt858 nexttoward Inf sNaN -> NaN Invalid_operation +ddnextt859 nexttoward NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddnextt861 nexttoward NaN1 -Inf -> NaN1 +ddnextt862 nexttoward +NaN2 -1000 -> NaN2 +ddnextt863 nexttoward NaN3 1000 -> NaN3 +ddnextt864 nexttoward NaN4 Inf -> NaN4 +ddnextt865 nexttoward NaN5 +NaN6 -> NaN5 +ddnextt866 nexttoward -Inf NaN7 -> NaN7 +ddnextt867 nexttoward -1000 NaN8 -> NaN8 +ddnextt868 nexttoward 1000 NaN9 -> NaN9 +ddnextt869 nexttoward Inf +NaN10 -> NaN10 +ddnextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation +ddnextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation +ddnextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation +ddnextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation +ddnextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation +ddnextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation +ddnextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation +ddnextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation +ddnextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation +ddnextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation +ddnextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddnextt882 nexttoward -NaN26 NaN28 -> -NaN26 +ddnextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddnextt884 nexttoward 1000 -NaN30 -> -NaN30 +ddnextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Null tests +ddnextt900 nexttoward 1 # -> NaN Invalid_operation +ddnextt901 nexttoward # 1 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddOr.decTest b/Lib/test/decimaltestdata/ddOr.decTest index f3a702b0ef6..d36580bf667 100644 --- a/Lib/test/decimaltestdata/ddOr.decTest +++ b/Lib/test/decimaltestdata/ddOr.decTest @@ -1,292 +1,292 @@ ------------------------------------------------------------------------- --- ddOr.decTest -- digitwise logical OR for decDoubles -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check (truth table) -ddor001 or 0 0 -> 0 -ddor002 or 0 1 -> 1 -ddor003 or 1 0 -> 1 -ddor004 or 1 1 -> 1 -ddor005 or 1100 1010 -> 1110 --- and at msd and msd-1 -ddor006 or 0000000000000000 0000000000000000 -> 0 -ddor007 or 0000000000000000 1000000000000000 -> 1000000000000000 -ddor008 or 1000000000000000 0000000000000000 -> 1000000000000000 -ddor009 or 1000000000000000 1000000000000000 -> 1000000000000000 -ddor010 or 0000000000000000 0000000000000000 -> 0 -ddor011 or 0000000000000000 0100000000000000 -> 100000000000000 -ddor012 or 0100000000000000 0000000000000000 -> 100000000000000 -ddor013 or 0100000000000000 0100000000000000 -> 100000000000000 - --- Various lengths --- 1234567890123456 1234567890123456 1234567890123456 -ddor020 or 1111111111111111 1111111111111111 -> 1111111111111111 -ddor021 or 111111111111111 111111111111111 -> 111111111111111 -ddor022 or 11111111111111 11111111111111 -> 11111111111111 -ddor023 or 1111111111111 1111111111111 -> 1111111111111 -ddor024 or 111111111111 111111111111 -> 111111111111 -ddor025 or 11111111111 11111111111 -> 11111111111 -ddor026 or 1111111111 1111111111 -> 1111111111 -ddor027 or 111111111 111111111 -> 111111111 -ddor028 or 11111111 11111111 -> 11111111 -ddor029 or 1111111 1111111 -> 1111111 -ddor030 or 111111 111111 -> 111111 -ddor031 or 11111 11111 -> 11111 -ddor032 or 1111 1111 -> 1111 -ddor033 or 111 111 -> 111 -ddor034 or 11 11 -> 11 -ddor035 or 1 1 -> 1 -ddor036 or 0 0 -> 0 - -ddor042 or 111111110000000 1111111110000000 -> 1111111110000000 -ddor043 or 11111110000000 1000000100000000 -> 1011111110000000 -ddor044 or 1111110000000 1000001000000000 -> 1001111110000000 -ddor045 or 111110000000 1000010000000000 -> 1000111110000000 -ddor046 or 11110000000 1000100000000000 -> 1000111110000000 -ddor047 or 1110000000 1001000000000000 -> 1001001110000000 -ddor048 or 110000000 1010000000000000 -> 1010000110000000 -ddor049 or 10000000 1100000000000000 -> 1100000010000000 - -ddor090 or 011111111 111101111 -> 111111111 -ddor091 or 101111111 111101111 -> 111111111 -ddor092 or 110111111 111101111 -> 111111111 -ddor093 or 111011111 111101111 -> 111111111 -ddor094 or 111101111 111101111 -> 111101111 -ddor095 or 111110111 111101111 -> 111111111 -ddor096 or 111111011 111101111 -> 111111111 -ddor097 or 111111101 111101111 -> 111111111 -ddor098 or 111111110 111101111 -> 111111111 - -ddor100 or 111101111 011111111 -> 111111111 -ddor101 or 111101111 101111111 -> 111111111 -ddor102 or 111101111 110111111 -> 111111111 -ddor103 or 111101111 111011111 -> 111111111 -ddor104 or 111101111 111101111 -> 111101111 -ddor105 or 111101111 111110111 -> 111111111 -ddor106 or 111101111 111111011 -> 111111111 -ddor107 or 111101111 111111101 -> 111111111 -ddor108 or 111101111 111111110 -> 111111111 - --- non-0/1 should not be accepted, nor should signs -ddor220 or 111111112 111111111 -> NaN Invalid_operation -ddor221 or 333333333 333333333 -> NaN Invalid_operation -ddor222 or 555555555 555555555 -> NaN Invalid_operation -ddor223 or 777777777 777777777 -> NaN Invalid_operation -ddor224 or 999999999 999999999 -> NaN Invalid_operation -ddor225 or 222222222 999999999 -> NaN Invalid_operation -ddor226 or 444444444 999999999 -> NaN Invalid_operation -ddor227 or 666666666 999999999 -> NaN Invalid_operation -ddor228 or 888888888 999999999 -> NaN Invalid_operation -ddor229 or 999999999 222222222 -> NaN Invalid_operation -ddor230 or 999999999 444444444 -> NaN Invalid_operation -ddor231 or 999999999 666666666 -> NaN Invalid_operation -ddor232 or 999999999 888888888 -> NaN Invalid_operation --- a few randoms -ddor240 or 567468689 -934981942 -> NaN Invalid_operation -ddor241 or 567367689 934981942 -> NaN Invalid_operation -ddor242 or -631917772 -706014634 -> NaN Invalid_operation -ddor243 or -756253257 138579234 -> NaN Invalid_operation -ddor244 or 835590149 567435400 -> NaN Invalid_operation --- test MSD -ddor250 or 2000000000000000 1000000000000000 -> NaN Invalid_operation -ddor251 or 7000000000000000 1000000000000000 -> NaN Invalid_operation -ddor252 or 8000000000000000 1000000000000000 -> NaN Invalid_operation -ddor253 or 9000000000000000 1000000000000000 -> NaN Invalid_operation -ddor254 or 2000000000000000 0000000000000000 -> NaN Invalid_operation -ddor255 or 7000000000000000 0000000000000000 -> NaN Invalid_operation -ddor256 or 8000000000000000 0000000000000000 -> NaN Invalid_operation -ddor257 or 9000000000000000 0000000000000000 -> NaN Invalid_operation -ddor258 or 1000000000000000 2000000000000000 -> NaN Invalid_operation -ddor259 or 1000000000000000 7000000000000000 -> NaN Invalid_operation -ddor260 or 1000000000000000 8000000000000000 -> NaN Invalid_operation -ddor261 or 1000000000000000 9000000000000000 -> NaN Invalid_operation -ddor262 or 0000000000000000 2000000000000000 -> NaN Invalid_operation -ddor263 or 0000000000000000 7000000000000000 -> NaN Invalid_operation -ddor264 or 0000000000000000 8000000000000000 -> NaN Invalid_operation -ddor265 or 0000000000000000 9000000000000000 -> NaN Invalid_operation --- test MSD-1 -ddor270 or 0200001000000000 1000100000000010 -> NaN Invalid_operation -ddor271 or 0700000100000000 1000010000000100 -> NaN Invalid_operation -ddor272 or 0800000010000000 1000001000001000 -> NaN Invalid_operation -ddor273 or 0900000001000000 1000000100010000 -> NaN Invalid_operation -ddor274 or 1000000000100000 0200000010100000 -> NaN Invalid_operation -ddor275 or 1000000000010000 0700000001000000 -> NaN Invalid_operation -ddor276 or 1000000000001000 0800000010100000 -> NaN Invalid_operation -ddor277 or 1000000000000100 0900000000010000 -> NaN Invalid_operation --- test LSD -ddor280 or 0010000000000002 1000000100000001 -> NaN Invalid_operation -ddor281 or 0001000000000007 1000001000000011 -> NaN Invalid_operation -ddor282 or 0000100000000008 1000010000000001 -> NaN Invalid_operation -ddor283 or 0000010000000009 1000100000000001 -> NaN Invalid_operation -ddor284 or 1000001000000000 0001000000000002 -> NaN Invalid_operation -ddor285 or 1000000100000000 0010000000000007 -> NaN Invalid_operation -ddor286 or 1000000010000000 0100000000000008 -> NaN Invalid_operation -ddor287 or 1000000001000000 1000000000000009 -> NaN Invalid_operation --- test Middie -ddor288 or 0010000020000000 1000001000000000 -> NaN Invalid_operation -ddor289 or 0001000070000001 1000000100000000 -> NaN Invalid_operation -ddor290 or 0000100080000010 1000000010000000 -> NaN Invalid_operation -ddor291 or 0000010090000100 1000000001000000 -> NaN Invalid_operation -ddor292 or 1000001000001000 0000000020100000 -> NaN Invalid_operation -ddor293 or 1000000100010000 0000000070010000 -> NaN Invalid_operation -ddor294 or 1000000010100000 0000000080001000 -> NaN Invalid_operation -ddor295 or 1000000001000000 0000000090000100 -> NaN Invalid_operation --- signs -ddor296 or -1000000001000000 -0000010000000100 -> NaN Invalid_operation -ddor297 or -1000000001000000 0000000010000100 -> NaN Invalid_operation -ddor298 or 1000000001000000 -0000001000000100 -> NaN Invalid_operation -ddor299 or 1000000001000000 0000000011000100 -> 1000000011000100 - --- Nmax, Nmin, Ntiny-like -ddor331 or 2 9.99999999E+199 -> NaN Invalid_operation -ddor332 or 3 1E-199 -> NaN Invalid_operation -ddor333 or 4 1.00000000E-199 -> NaN Invalid_operation -ddor334 or 5 1E-100 -> NaN Invalid_operation -ddor335 or 6 -1E-100 -> NaN Invalid_operation -ddor336 or 7 -1.00000000E-199 -> NaN Invalid_operation -ddor337 or 8 -1E-199 -> NaN Invalid_operation -ddor338 or 9 -9.99999999E+199 -> NaN Invalid_operation -ddor341 or 9.99999999E+299 -18 -> NaN Invalid_operation -ddor342 or 1E-299 01 -> NaN Invalid_operation -ddor343 or 1.00000000E-299 -18 -> NaN Invalid_operation -ddor344 or 1E-100 18 -> NaN Invalid_operation -ddor345 or -1E-100 -10 -> NaN Invalid_operation -ddor346 or -1.00000000E-299 18 -> NaN Invalid_operation -ddor347 or -1E-299 10 -> NaN Invalid_operation -ddor348 or -9.99999999E+299 -18 -> NaN Invalid_operation - --- A few other non-integers -ddor361 or 1.0 1 -> NaN Invalid_operation -ddor362 or 1E+1 1 -> NaN Invalid_operation -ddor363 or 0.0 1 -> NaN Invalid_operation -ddor364 or 0E+1 1 -> NaN Invalid_operation -ddor365 or 9.9 1 -> NaN Invalid_operation -ddor366 or 9E+1 1 -> NaN Invalid_operation -ddor371 or 0 1.0 -> NaN Invalid_operation -ddor372 or 0 1E+1 -> NaN Invalid_operation -ddor373 or 0 0.0 -> NaN Invalid_operation -ddor374 or 0 0E+1 -> NaN Invalid_operation -ddor375 or 0 9.9 -> NaN Invalid_operation -ddor376 or 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -ddor780 or -Inf -Inf -> NaN Invalid_operation -ddor781 or -Inf -1000 -> NaN Invalid_operation -ddor782 or -Inf -1 -> NaN Invalid_operation -ddor783 or -Inf -0 -> NaN Invalid_operation -ddor784 or -Inf 0 -> NaN Invalid_operation -ddor785 or -Inf 1 -> NaN Invalid_operation -ddor786 or -Inf 1000 -> NaN Invalid_operation -ddor787 or -1000 -Inf -> NaN Invalid_operation -ddor788 or -Inf -Inf -> NaN Invalid_operation -ddor789 or -1 -Inf -> NaN Invalid_operation -ddor790 or -0 -Inf -> NaN Invalid_operation -ddor791 or 0 -Inf -> NaN Invalid_operation -ddor792 or 1 -Inf -> NaN Invalid_operation -ddor793 or 1000 -Inf -> NaN Invalid_operation -ddor794 or Inf -Inf -> NaN Invalid_operation - -ddor800 or Inf -Inf -> NaN Invalid_operation -ddor801 or Inf -1000 -> NaN Invalid_operation -ddor802 or Inf -1 -> NaN Invalid_operation -ddor803 or Inf -0 -> NaN Invalid_operation -ddor804 or Inf 0 -> NaN Invalid_operation -ddor805 or Inf 1 -> NaN Invalid_operation -ddor806 or Inf 1000 -> NaN Invalid_operation -ddor807 or Inf Inf -> NaN Invalid_operation -ddor808 or -1000 Inf -> NaN Invalid_operation -ddor809 or -Inf Inf -> NaN Invalid_operation -ddor810 or -1 Inf -> NaN Invalid_operation -ddor811 or -0 Inf -> NaN Invalid_operation -ddor812 or 0 Inf -> NaN Invalid_operation -ddor813 or 1 Inf -> NaN Invalid_operation -ddor814 or 1000 Inf -> NaN Invalid_operation -ddor815 or Inf Inf -> NaN Invalid_operation - -ddor821 or NaN -Inf -> NaN Invalid_operation -ddor822 or NaN -1000 -> NaN Invalid_operation -ddor823 or NaN -1 -> NaN Invalid_operation -ddor824 or NaN -0 -> NaN Invalid_operation -ddor825 or NaN 0 -> NaN Invalid_operation -ddor826 or NaN 1 -> NaN Invalid_operation -ddor827 or NaN 1000 -> NaN Invalid_operation -ddor828 or NaN Inf -> NaN Invalid_operation -ddor829 or NaN NaN -> NaN Invalid_operation -ddor830 or -Inf NaN -> NaN Invalid_operation -ddor831 or -1000 NaN -> NaN Invalid_operation -ddor832 or -1 NaN -> NaN Invalid_operation -ddor833 or -0 NaN -> NaN Invalid_operation -ddor834 or 0 NaN -> NaN Invalid_operation -ddor835 or 1 NaN -> NaN Invalid_operation -ddor836 or 1000 NaN -> NaN Invalid_operation -ddor837 or Inf NaN -> NaN Invalid_operation - -ddor841 or sNaN -Inf -> NaN Invalid_operation -ddor842 or sNaN -1000 -> NaN Invalid_operation -ddor843 or sNaN -1 -> NaN Invalid_operation -ddor844 or sNaN -0 -> NaN Invalid_operation -ddor845 or sNaN 0 -> NaN Invalid_operation -ddor846 or sNaN 1 -> NaN Invalid_operation -ddor847 or sNaN 1000 -> NaN Invalid_operation -ddor848 or sNaN NaN -> NaN Invalid_operation -ddor849 or sNaN sNaN -> NaN Invalid_operation -ddor850 or NaN sNaN -> NaN Invalid_operation -ddor851 or -Inf sNaN -> NaN Invalid_operation -ddor852 or -1000 sNaN -> NaN Invalid_operation -ddor853 or -1 sNaN -> NaN Invalid_operation -ddor854 or -0 sNaN -> NaN Invalid_operation -ddor855 or 0 sNaN -> NaN Invalid_operation -ddor856 or 1 sNaN -> NaN Invalid_operation -ddor857 or 1000 sNaN -> NaN Invalid_operation -ddor858 or Inf sNaN -> NaN Invalid_operation -ddor859 or NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddor861 or NaN1 -Inf -> NaN Invalid_operation -ddor862 or +NaN2 -1000 -> NaN Invalid_operation -ddor863 or NaN3 1000 -> NaN Invalid_operation -ddor864 or NaN4 Inf -> NaN Invalid_operation -ddor865 or NaN5 +NaN6 -> NaN Invalid_operation -ddor866 or -Inf NaN7 -> NaN Invalid_operation -ddor867 or -1000 NaN8 -> NaN Invalid_operation -ddor868 or 1000 NaN9 -> NaN Invalid_operation -ddor869 or Inf +NaN10 -> NaN Invalid_operation -ddor871 or sNaN11 -Inf -> NaN Invalid_operation -ddor872 or sNaN12 -1000 -> NaN Invalid_operation -ddor873 or sNaN13 1000 -> NaN Invalid_operation -ddor874 or sNaN14 NaN17 -> NaN Invalid_operation -ddor875 or sNaN15 sNaN18 -> NaN Invalid_operation -ddor876 or NaN16 sNaN19 -> NaN Invalid_operation -ddor877 or -Inf +sNaN20 -> NaN Invalid_operation -ddor878 or -1000 sNaN21 -> NaN Invalid_operation -ddor879 or 1000 sNaN22 -> NaN Invalid_operation -ddor880 or Inf sNaN23 -> NaN Invalid_operation -ddor881 or +NaN25 +sNaN24 -> NaN Invalid_operation -ddor882 or -NaN26 NaN28 -> NaN Invalid_operation -ddor883 or -sNaN27 sNaN29 -> NaN Invalid_operation -ddor884 or 1000 -NaN30 -> NaN Invalid_operation -ddor885 or 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddOr.decTest -- digitwise logical OR for decDoubles -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check (truth table) +ddor001 or 0 0 -> 0 +ddor002 or 0 1 -> 1 +ddor003 or 1 0 -> 1 +ddor004 or 1 1 -> 1 +ddor005 or 1100 1010 -> 1110 +-- and at msd and msd-1 +ddor006 or 0000000000000000 0000000000000000 -> 0 +ddor007 or 0000000000000000 1000000000000000 -> 1000000000000000 +ddor008 or 1000000000000000 0000000000000000 -> 1000000000000000 +ddor009 or 1000000000000000 1000000000000000 -> 1000000000000000 +ddor010 or 0000000000000000 0000000000000000 -> 0 +ddor011 or 0000000000000000 0100000000000000 -> 100000000000000 +ddor012 or 0100000000000000 0000000000000000 -> 100000000000000 +ddor013 or 0100000000000000 0100000000000000 -> 100000000000000 + +-- Various lengths +-- 1234567890123456 1234567890123456 1234567890123456 +ddor020 or 1111111111111111 1111111111111111 -> 1111111111111111 +ddor021 or 111111111111111 111111111111111 -> 111111111111111 +ddor022 or 11111111111111 11111111111111 -> 11111111111111 +ddor023 or 1111111111111 1111111111111 -> 1111111111111 +ddor024 or 111111111111 111111111111 -> 111111111111 +ddor025 or 11111111111 11111111111 -> 11111111111 +ddor026 or 1111111111 1111111111 -> 1111111111 +ddor027 or 111111111 111111111 -> 111111111 +ddor028 or 11111111 11111111 -> 11111111 +ddor029 or 1111111 1111111 -> 1111111 +ddor030 or 111111 111111 -> 111111 +ddor031 or 11111 11111 -> 11111 +ddor032 or 1111 1111 -> 1111 +ddor033 or 111 111 -> 111 +ddor034 or 11 11 -> 11 +ddor035 or 1 1 -> 1 +ddor036 or 0 0 -> 0 + +ddor042 or 111111110000000 1111111110000000 -> 1111111110000000 +ddor043 or 11111110000000 1000000100000000 -> 1011111110000000 +ddor044 or 1111110000000 1000001000000000 -> 1001111110000000 +ddor045 or 111110000000 1000010000000000 -> 1000111110000000 +ddor046 or 11110000000 1000100000000000 -> 1000111110000000 +ddor047 or 1110000000 1001000000000000 -> 1001001110000000 +ddor048 or 110000000 1010000000000000 -> 1010000110000000 +ddor049 or 10000000 1100000000000000 -> 1100000010000000 + +ddor090 or 011111111 111101111 -> 111111111 +ddor091 or 101111111 111101111 -> 111111111 +ddor092 or 110111111 111101111 -> 111111111 +ddor093 or 111011111 111101111 -> 111111111 +ddor094 or 111101111 111101111 -> 111101111 +ddor095 or 111110111 111101111 -> 111111111 +ddor096 or 111111011 111101111 -> 111111111 +ddor097 or 111111101 111101111 -> 111111111 +ddor098 or 111111110 111101111 -> 111111111 + +ddor100 or 111101111 011111111 -> 111111111 +ddor101 or 111101111 101111111 -> 111111111 +ddor102 or 111101111 110111111 -> 111111111 +ddor103 or 111101111 111011111 -> 111111111 +ddor104 or 111101111 111101111 -> 111101111 +ddor105 or 111101111 111110111 -> 111111111 +ddor106 or 111101111 111111011 -> 111111111 +ddor107 or 111101111 111111101 -> 111111111 +ddor108 or 111101111 111111110 -> 111111111 + +-- non-0/1 should not be accepted, nor should signs +ddor220 or 111111112 111111111 -> NaN Invalid_operation +ddor221 or 333333333 333333333 -> NaN Invalid_operation +ddor222 or 555555555 555555555 -> NaN Invalid_operation +ddor223 or 777777777 777777777 -> NaN Invalid_operation +ddor224 or 999999999 999999999 -> NaN Invalid_operation +ddor225 or 222222222 999999999 -> NaN Invalid_operation +ddor226 or 444444444 999999999 -> NaN Invalid_operation +ddor227 or 666666666 999999999 -> NaN Invalid_operation +ddor228 or 888888888 999999999 -> NaN Invalid_operation +ddor229 or 999999999 222222222 -> NaN Invalid_operation +ddor230 or 999999999 444444444 -> NaN Invalid_operation +ddor231 or 999999999 666666666 -> NaN Invalid_operation +ddor232 or 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +ddor240 or 567468689 -934981942 -> NaN Invalid_operation +ddor241 or 567367689 934981942 -> NaN Invalid_operation +ddor242 or -631917772 -706014634 -> NaN Invalid_operation +ddor243 or -756253257 138579234 -> NaN Invalid_operation +ddor244 or 835590149 567435400 -> NaN Invalid_operation +-- test MSD +ddor250 or 2000000000000000 1000000000000000 -> NaN Invalid_operation +ddor251 or 7000000000000000 1000000000000000 -> NaN Invalid_operation +ddor252 or 8000000000000000 1000000000000000 -> NaN Invalid_operation +ddor253 or 9000000000000000 1000000000000000 -> NaN Invalid_operation +ddor254 or 2000000000000000 0000000000000000 -> NaN Invalid_operation +ddor255 or 7000000000000000 0000000000000000 -> NaN Invalid_operation +ddor256 or 8000000000000000 0000000000000000 -> NaN Invalid_operation +ddor257 or 9000000000000000 0000000000000000 -> NaN Invalid_operation +ddor258 or 1000000000000000 2000000000000000 -> NaN Invalid_operation +ddor259 or 1000000000000000 7000000000000000 -> NaN Invalid_operation +ddor260 or 1000000000000000 8000000000000000 -> NaN Invalid_operation +ddor261 or 1000000000000000 9000000000000000 -> NaN Invalid_operation +ddor262 or 0000000000000000 2000000000000000 -> NaN Invalid_operation +ddor263 or 0000000000000000 7000000000000000 -> NaN Invalid_operation +ddor264 or 0000000000000000 8000000000000000 -> NaN Invalid_operation +ddor265 or 0000000000000000 9000000000000000 -> NaN Invalid_operation +-- test MSD-1 +ddor270 or 0200001000000000 1000100000000010 -> NaN Invalid_operation +ddor271 or 0700000100000000 1000010000000100 -> NaN Invalid_operation +ddor272 or 0800000010000000 1000001000001000 -> NaN Invalid_operation +ddor273 or 0900000001000000 1000000100010000 -> NaN Invalid_operation +ddor274 or 1000000000100000 0200000010100000 -> NaN Invalid_operation +ddor275 or 1000000000010000 0700000001000000 -> NaN Invalid_operation +ddor276 or 1000000000001000 0800000010100000 -> NaN Invalid_operation +ddor277 or 1000000000000100 0900000000010000 -> NaN Invalid_operation +-- test LSD +ddor280 or 0010000000000002 1000000100000001 -> NaN Invalid_operation +ddor281 or 0001000000000007 1000001000000011 -> NaN Invalid_operation +ddor282 or 0000100000000008 1000010000000001 -> NaN Invalid_operation +ddor283 or 0000010000000009 1000100000000001 -> NaN Invalid_operation +ddor284 or 1000001000000000 0001000000000002 -> NaN Invalid_operation +ddor285 or 1000000100000000 0010000000000007 -> NaN Invalid_operation +ddor286 or 1000000010000000 0100000000000008 -> NaN Invalid_operation +ddor287 or 1000000001000000 1000000000000009 -> NaN Invalid_operation +-- test Middie +ddor288 or 0010000020000000 1000001000000000 -> NaN Invalid_operation +ddor289 or 0001000070000001 1000000100000000 -> NaN Invalid_operation +ddor290 or 0000100080000010 1000000010000000 -> NaN Invalid_operation +ddor291 or 0000010090000100 1000000001000000 -> NaN Invalid_operation +ddor292 or 1000001000001000 0000000020100000 -> NaN Invalid_operation +ddor293 or 1000000100010000 0000000070010000 -> NaN Invalid_operation +ddor294 or 1000000010100000 0000000080001000 -> NaN Invalid_operation +ddor295 or 1000000001000000 0000000090000100 -> NaN Invalid_operation +-- signs +ddor296 or -1000000001000000 -0000010000000100 -> NaN Invalid_operation +ddor297 or -1000000001000000 0000000010000100 -> NaN Invalid_operation +ddor298 or 1000000001000000 -0000001000000100 -> NaN Invalid_operation +ddor299 or 1000000001000000 0000000011000100 -> 1000000011000100 + +-- Nmax, Nmin, Ntiny-like +ddor331 or 2 9.99999999E+199 -> NaN Invalid_operation +ddor332 or 3 1E-199 -> NaN Invalid_operation +ddor333 or 4 1.00000000E-199 -> NaN Invalid_operation +ddor334 or 5 1E-100 -> NaN Invalid_operation +ddor335 or 6 -1E-100 -> NaN Invalid_operation +ddor336 or 7 -1.00000000E-199 -> NaN Invalid_operation +ddor337 or 8 -1E-199 -> NaN Invalid_operation +ddor338 or 9 -9.99999999E+199 -> NaN Invalid_operation +ddor341 or 9.99999999E+299 -18 -> NaN Invalid_operation +ddor342 or 1E-299 01 -> NaN Invalid_operation +ddor343 or 1.00000000E-299 -18 -> NaN Invalid_operation +ddor344 or 1E-100 18 -> NaN Invalid_operation +ddor345 or -1E-100 -10 -> NaN Invalid_operation +ddor346 or -1.00000000E-299 18 -> NaN Invalid_operation +ddor347 or -1E-299 10 -> NaN Invalid_operation +ddor348 or -9.99999999E+299 -18 -> NaN Invalid_operation + +-- A few other non-integers +ddor361 or 1.0 1 -> NaN Invalid_operation +ddor362 or 1E+1 1 -> NaN Invalid_operation +ddor363 or 0.0 1 -> NaN Invalid_operation +ddor364 or 0E+1 1 -> NaN Invalid_operation +ddor365 or 9.9 1 -> NaN Invalid_operation +ddor366 or 9E+1 1 -> NaN Invalid_operation +ddor371 or 0 1.0 -> NaN Invalid_operation +ddor372 or 0 1E+1 -> NaN Invalid_operation +ddor373 or 0 0.0 -> NaN Invalid_operation +ddor374 or 0 0E+1 -> NaN Invalid_operation +ddor375 or 0 9.9 -> NaN Invalid_operation +ddor376 or 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +ddor780 or -Inf -Inf -> NaN Invalid_operation +ddor781 or -Inf -1000 -> NaN Invalid_operation +ddor782 or -Inf -1 -> NaN Invalid_operation +ddor783 or -Inf -0 -> NaN Invalid_operation +ddor784 or -Inf 0 -> NaN Invalid_operation +ddor785 or -Inf 1 -> NaN Invalid_operation +ddor786 or -Inf 1000 -> NaN Invalid_operation +ddor787 or -1000 -Inf -> NaN Invalid_operation +ddor788 or -Inf -Inf -> NaN Invalid_operation +ddor789 or -1 -Inf -> NaN Invalid_operation +ddor790 or -0 -Inf -> NaN Invalid_operation +ddor791 or 0 -Inf -> NaN Invalid_operation +ddor792 or 1 -Inf -> NaN Invalid_operation +ddor793 or 1000 -Inf -> NaN Invalid_operation +ddor794 or Inf -Inf -> NaN Invalid_operation + +ddor800 or Inf -Inf -> NaN Invalid_operation +ddor801 or Inf -1000 -> NaN Invalid_operation +ddor802 or Inf -1 -> NaN Invalid_operation +ddor803 or Inf -0 -> NaN Invalid_operation +ddor804 or Inf 0 -> NaN Invalid_operation +ddor805 or Inf 1 -> NaN Invalid_operation +ddor806 or Inf 1000 -> NaN Invalid_operation +ddor807 or Inf Inf -> NaN Invalid_operation +ddor808 or -1000 Inf -> NaN Invalid_operation +ddor809 or -Inf Inf -> NaN Invalid_operation +ddor810 or -1 Inf -> NaN Invalid_operation +ddor811 or -0 Inf -> NaN Invalid_operation +ddor812 or 0 Inf -> NaN Invalid_operation +ddor813 or 1 Inf -> NaN Invalid_operation +ddor814 or 1000 Inf -> NaN Invalid_operation +ddor815 or Inf Inf -> NaN Invalid_operation + +ddor821 or NaN -Inf -> NaN Invalid_operation +ddor822 or NaN -1000 -> NaN Invalid_operation +ddor823 or NaN -1 -> NaN Invalid_operation +ddor824 or NaN -0 -> NaN Invalid_operation +ddor825 or NaN 0 -> NaN Invalid_operation +ddor826 or NaN 1 -> NaN Invalid_operation +ddor827 or NaN 1000 -> NaN Invalid_operation +ddor828 or NaN Inf -> NaN Invalid_operation +ddor829 or NaN NaN -> NaN Invalid_operation +ddor830 or -Inf NaN -> NaN Invalid_operation +ddor831 or -1000 NaN -> NaN Invalid_operation +ddor832 or -1 NaN -> NaN Invalid_operation +ddor833 or -0 NaN -> NaN Invalid_operation +ddor834 or 0 NaN -> NaN Invalid_operation +ddor835 or 1 NaN -> NaN Invalid_operation +ddor836 or 1000 NaN -> NaN Invalid_operation +ddor837 or Inf NaN -> NaN Invalid_operation + +ddor841 or sNaN -Inf -> NaN Invalid_operation +ddor842 or sNaN -1000 -> NaN Invalid_operation +ddor843 or sNaN -1 -> NaN Invalid_operation +ddor844 or sNaN -0 -> NaN Invalid_operation +ddor845 or sNaN 0 -> NaN Invalid_operation +ddor846 or sNaN 1 -> NaN Invalid_operation +ddor847 or sNaN 1000 -> NaN Invalid_operation +ddor848 or sNaN NaN -> NaN Invalid_operation +ddor849 or sNaN sNaN -> NaN Invalid_operation +ddor850 or NaN sNaN -> NaN Invalid_operation +ddor851 or -Inf sNaN -> NaN Invalid_operation +ddor852 or -1000 sNaN -> NaN Invalid_operation +ddor853 or -1 sNaN -> NaN Invalid_operation +ddor854 or -0 sNaN -> NaN Invalid_operation +ddor855 or 0 sNaN -> NaN Invalid_operation +ddor856 or 1 sNaN -> NaN Invalid_operation +ddor857 or 1000 sNaN -> NaN Invalid_operation +ddor858 or Inf sNaN -> NaN Invalid_operation +ddor859 or NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddor861 or NaN1 -Inf -> NaN Invalid_operation +ddor862 or +NaN2 -1000 -> NaN Invalid_operation +ddor863 or NaN3 1000 -> NaN Invalid_operation +ddor864 or NaN4 Inf -> NaN Invalid_operation +ddor865 or NaN5 +NaN6 -> NaN Invalid_operation +ddor866 or -Inf NaN7 -> NaN Invalid_operation +ddor867 or -1000 NaN8 -> NaN Invalid_operation +ddor868 or 1000 NaN9 -> NaN Invalid_operation +ddor869 or Inf +NaN10 -> NaN Invalid_operation +ddor871 or sNaN11 -Inf -> NaN Invalid_operation +ddor872 or sNaN12 -1000 -> NaN Invalid_operation +ddor873 or sNaN13 1000 -> NaN Invalid_operation +ddor874 or sNaN14 NaN17 -> NaN Invalid_operation +ddor875 or sNaN15 sNaN18 -> NaN Invalid_operation +ddor876 or NaN16 sNaN19 -> NaN Invalid_operation +ddor877 or -Inf +sNaN20 -> NaN Invalid_operation +ddor878 or -1000 sNaN21 -> NaN Invalid_operation +ddor879 or 1000 sNaN22 -> NaN Invalid_operation +ddor880 or Inf sNaN23 -> NaN Invalid_operation +ddor881 or +NaN25 +sNaN24 -> NaN Invalid_operation +ddor882 or -NaN26 NaN28 -> NaN Invalid_operation +ddor883 or -sNaN27 sNaN29 -> NaN Invalid_operation +ddor884 or 1000 -NaN30 -> NaN Invalid_operation +ddor885 or 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddPlus.decTest b/Lib/test/decimaltestdata/ddPlus.decTest index 17aa08af9f7..5191239bf71 100644 --- a/Lib/test/decimaltestdata/ddPlus.decTest +++ b/Lib/test/decimaltestdata/ddPlus.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- ddPlus.decTest -- decDouble 0+x -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddpls001 plus +7.50 -> 7.50 - --- Infinities -ddpls011 plus Infinity -> Infinity -ddpls012 plus -Infinity -> -Infinity - --- NaNs, 0 payload -ddpls021 plus NaN -> NaN -ddpls022 plus -NaN -> -NaN -ddpls023 plus sNaN -> NaN Invalid_operation -ddpls024 plus -sNaN -> -NaN Invalid_operation - --- NaNs, non-0 payload -ddpls031 plus NaN13 -> NaN13 -ddpls032 plus -NaN13 -> -NaN13 -ddpls033 plus sNaN13 -> NaN13 Invalid_operation -ddpls034 plus -sNaN13 -> -NaN13 Invalid_operation -ddpls035 plus NaN70 -> NaN70 -ddpls036 plus -NaN70 -> -NaN70 -ddpls037 plus sNaN101 -> NaN101 Invalid_operation -ddpls038 plus -sNaN101 -> -NaN101 Invalid_operation - --- finites -ddpls101 plus 7 -> 7 -ddpls102 plus -7 -> -7 -ddpls103 plus 75 -> 75 -ddpls104 plus -75 -> -75 -ddpls105 plus 7.50 -> 7.50 -ddpls106 plus -7.50 -> -7.50 -ddpls107 plus 7.500 -> 7.500 -ddpls108 plus -7.500 -> -7.500 - --- zeros -ddpls111 plus 0 -> 0 -ddpls112 plus -0 -> 0 -ddpls113 plus 0E+4 -> 0E+4 -ddpls114 plus -0E+4 -> 0E+4 -ddpls115 plus 0.0000 -> 0.0000 -ddpls116 plus -0.0000 -> 0.0000 -ddpls117 plus 0E-141 -> 0E-141 -ddpls118 plus -0E-141 -> 0E-141 - --- full coefficients, alternating bits -ddpls121 plus 2682682682682682 -> 2682682682682682 -ddpls122 plus -2682682682682682 -> -2682682682682682 -ddpls123 plus 1341341341341341 -> 1341341341341341 -ddpls124 plus -1341341341341341 -> -1341341341341341 - --- Nmax, Nmin, Ntiny -ddpls131 plus 9.999999999999999E+384 -> 9.999999999999999E+384 -ddpls132 plus 1E-383 -> 1E-383 -ddpls133 plus 1.000000000000000E-383 -> 1.000000000000000E-383 -ddpls134 plus 1E-398 -> 1E-398 Subnormal - -ddpls135 plus -1E-398 -> -1E-398 Subnormal -ddpls136 plus -1.000000000000000E-383 -> -1.000000000000000E-383 -ddpls137 plus -1E-383 -> -1E-383 -ddpls138 plus -9.999999999999999E+384 -> -9.999999999999999E+384 +------------------------------------------------------------------------ +-- ddPlus.decTest -- decDouble 0+x -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddpls001 plus +7.50 -> 7.50 + +-- Infinities +ddpls011 plus Infinity -> Infinity +ddpls012 plus -Infinity -> -Infinity + +-- NaNs, 0 payload +ddpls021 plus NaN -> NaN +ddpls022 plus -NaN -> -NaN +ddpls023 plus sNaN -> NaN Invalid_operation +ddpls024 plus -sNaN -> -NaN Invalid_operation + +-- NaNs, non-0 payload +ddpls031 plus NaN13 -> NaN13 +ddpls032 plus -NaN13 -> -NaN13 +ddpls033 plus sNaN13 -> NaN13 Invalid_operation +ddpls034 plus -sNaN13 -> -NaN13 Invalid_operation +ddpls035 plus NaN70 -> NaN70 +ddpls036 plus -NaN70 -> -NaN70 +ddpls037 plus sNaN101 -> NaN101 Invalid_operation +ddpls038 plus -sNaN101 -> -NaN101 Invalid_operation + +-- finites +ddpls101 plus 7 -> 7 +ddpls102 plus -7 -> -7 +ddpls103 plus 75 -> 75 +ddpls104 plus -75 -> -75 +ddpls105 plus 7.50 -> 7.50 +ddpls106 plus -7.50 -> -7.50 +ddpls107 plus 7.500 -> 7.500 +ddpls108 plus -7.500 -> -7.500 + +-- zeros +ddpls111 plus 0 -> 0 +ddpls112 plus -0 -> 0 +ddpls113 plus 0E+4 -> 0E+4 +ddpls114 plus -0E+4 -> 0E+4 +ddpls115 plus 0.0000 -> 0.0000 +ddpls116 plus -0.0000 -> 0.0000 +ddpls117 plus 0E-141 -> 0E-141 +ddpls118 plus -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +ddpls121 plus 2682682682682682 -> 2682682682682682 +ddpls122 plus -2682682682682682 -> -2682682682682682 +ddpls123 plus 1341341341341341 -> 1341341341341341 +ddpls124 plus -1341341341341341 -> -1341341341341341 + +-- Nmax, Nmin, Ntiny +ddpls131 plus 9.999999999999999E+384 -> 9.999999999999999E+384 +ddpls132 plus 1E-383 -> 1E-383 +ddpls133 plus 1.000000000000000E-383 -> 1.000000000000000E-383 +ddpls134 plus 1E-398 -> 1E-398 Subnormal + +ddpls135 plus -1E-398 -> -1E-398 Subnormal +ddpls136 plus -1.000000000000000E-383 -> -1.000000000000000E-383 +ddpls137 plus -1E-383 -> -1E-383 +ddpls138 plus -9.999999999999999E+384 -> -9.999999999999999E+384 diff --git a/Lib/test/decimaltestdata/ddQuantize.decTest b/Lib/test/decimaltestdata/ddQuantize.decTest index 4b2b0041144..e1c5674d9ac 100644 --- a/Lib/test/decimaltestdata/ddQuantize.decTest +++ b/Lib/test/decimaltestdata/ddQuantize.decTest @@ -1,833 +1,833 @@ ------------------------------------------------------------------------- --- ddQuantize.decTest -- decDouble quantize operation -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Most of the tests here assume a "regular pattern", where the --- sign and coefficient are +1. --- 2004.03.15 Underflow for quantize is suppressed --- 2005.06.08 More extensive tests for 'does not fit' -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks -ddqua001 quantize 0 1e0 -> 0 -ddqua002 quantize 1 1e0 -> 1 -ddqua003 quantize 0.1 1e+2 -> 0E+2 Inexact Rounded -ddqua005 quantize 0.1 1e+1 -> 0E+1 Inexact Rounded -ddqua006 quantize 0.1 1e0 -> 0 Inexact Rounded -ddqua007 quantize 0.1 1e-1 -> 0.1 -ddqua008 quantize 0.1 1e-2 -> 0.10 -ddqua009 quantize 0.1 1e-3 -> 0.100 -ddqua010 quantize 0.9 1e+2 -> 0E+2 Inexact Rounded -ddqua011 quantize 0.9 1e+1 -> 0E+1 Inexact Rounded -ddqua012 quantize 0.9 1e+0 -> 1 Inexact Rounded -ddqua013 quantize 0.9 1e-1 -> 0.9 -ddqua014 quantize 0.9 1e-2 -> 0.90 -ddqua015 quantize 0.9 1e-3 -> 0.900 --- negatives -ddqua021 quantize -0 1e0 -> -0 -ddqua022 quantize -1 1e0 -> -1 -ddqua023 quantize -0.1 1e+2 -> -0E+2 Inexact Rounded -ddqua025 quantize -0.1 1e+1 -> -0E+1 Inexact Rounded -ddqua026 quantize -0.1 1e0 -> -0 Inexact Rounded -ddqua027 quantize -0.1 1e-1 -> -0.1 -ddqua028 quantize -0.1 1e-2 -> -0.10 -ddqua029 quantize -0.1 1e-3 -> -0.100 -ddqua030 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded -ddqua031 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded -ddqua032 quantize -0.9 1e+0 -> -1 Inexact Rounded -ddqua033 quantize -0.9 1e-1 -> -0.9 -ddqua034 quantize -0.9 1e-2 -> -0.90 -ddqua035 quantize -0.9 1e-3 -> -0.900 -ddqua036 quantize -0.5 1e+2 -> -0E+2 Inexact Rounded -ddqua037 quantize -0.5 1e+1 -> -0E+1 Inexact Rounded -ddqua038 quantize -0.5 1e+0 -> -0 Inexact Rounded -ddqua039 quantize -0.5 1e-1 -> -0.5 -ddqua040 quantize -0.5 1e-2 -> -0.50 -ddqua041 quantize -0.5 1e-3 -> -0.500 -ddqua042 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded -ddqua043 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded -ddqua044 quantize -0.9 1e+0 -> -1 Inexact Rounded -ddqua045 quantize -0.9 1e-1 -> -0.9 -ddqua046 quantize -0.9 1e-2 -> -0.90 -ddqua047 quantize -0.9 1e-3 -> -0.900 - --- examples from Specification -ddqua060 quantize 2.17 0.001 -> 2.170 -ddqua061 quantize 2.17 0.01 -> 2.17 -ddqua062 quantize 2.17 0.1 -> 2.2 Inexact Rounded -ddqua063 quantize 2.17 1e+0 -> 2 Inexact Rounded -ddqua064 quantize 2.17 1e+1 -> 0E+1 Inexact Rounded -ddqua065 quantize -Inf Inf -> -Infinity -ddqua066 quantize 2 Inf -> NaN Invalid_operation -ddqua067 quantize -0.1 1 -> -0 Inexact Rounded -ddqua068 quantize -0 1e+5 -> -0E+5 -ddqua069 quantize +123456789012345.6 1e-2 -> NaN Invalid_operation -ddqua070 quantize -987654335236450.6 1e-2 -> NaN Invalid_operation -ddqua071 quantize 217 1e-1 -> 217.0 -ddqua072 quantize 217 1e+0 -> 217 -ddqua073 quantize 217 1e+1 -> 2.2E+2 Inexact Rounded -ddqua074 quantize 217 1e+2 -> 2E+2 Inexact Rounded - --- general tests .. -ddqua089 quantize 12 1e+4 -> 0E+4 Inexact Rounded -ddqua090 quantize 12 1e+3 -> 0E+3 Inexact Rounded -ddqua091 quantize 12 1e+2 -> 0E+2 Inexact Rounded -ddqua092 quantize 12 1e+1 -> 1E+1 Inexact Rounded -ddqua093 quantize 1.2345 1e-2 -> 1.23 Inexact Rounded -ddqua094 quantize 1.2355 1e-2 -> 1.24 Inexact Rounded -ddqua095 quantize 1.2345 1e-6 -> 1.234500 -ddqua096 quantize 9.9999 1e-2 -> 10.00 Inexact Rounded -ddqua097 quantize 0.0001 1e-2 -> 0.00 Inexact Rounded -ddqua098 quantize 0.001 1e-2 -> 0.00 Inexact Rounded -ddqua099 quantize 0.009 1e-2 -> 0.01 Inexact Rounded -ddqua100 quantize 92 1e+2 -> 1E+2 Inexact Rounded - -ddqua101 quantize -1 1e0 -> -1 -ddqua102 quantize -1 1e-1 -> -1.0 -ddqua103 quantize -1 1e-2 -> -1.00 -ddqua104 quantize 0 1e0 -> 0 -ddqua105 quantize 0 1e-1 -> 0.0 -ddqua106 quantize 0 1e-2 -> 0.00 -ddqua107 quantize 0.00 1e0 -> 0 -ddqua108 quantize 0 1e+1 -> 0E+1 -ddqua109 quantize 0 1e+2 -> 0E+2 -ddqua110 quantize +1 1e0 -> 1 -ddqua111 quantize +1 1e-1 -> 1.0 -ddqua112 quantize +1 1e-2 -> 1.00 - -ddqua120 quantize 1.04 1e-3 -> 1.040 -ddqua121 quantize 1.04 1e-2 -> 1.04 -ddqua122 quantize 1.04 1e-1 -> 1.0 Inexact Rounded -ddqua123 quantize 1.04 1e0 -> 1 Inexact Rounded -ddqua124 quantize 1.05 1e-3 -> 1.050 -ddqua125 quantize 1.05 1e-2 -> 1.05 -ddqua126 quantize 1.05 1e-1 -> 1.0 Inexact Rounded -ddqua131 quantize 1.05 1e0 -> 1 Inexact Rounded -ddqua132 quantize 1.06 1e-3 -> 1.060 -ddqua133 quantize 1.06 1e-2 -> 1.06 -ddqua134 quantize 1.06 1e-1 -> 1.1 Inexact Rounded -ddqua135 quantize 1.06 1e0 -> 1 Inexact Rounded - -ddqua140 quantize -10 1e-2 -> -10.00 -ddqua141 quantize +1 1e-2 -> 1.00 -ddqua142 quantize +10 1e-2 -> 10.00 -ddqua143 quantize 1E+17 1e-2 -> NaN Invalid_operation -ddqua144 quantize 1E-17 1e-2 -> 0.00 Inexact Rounded -ddqua145 quantize 1E-3 1e-2 -> 0.00 Inexact Rounded -ddqua146 quantize 1E-2 1e-2 -> 0.01 -ddqua147 quantize 1E-1 1e-2 -> 0.10 -ddqua148 quantize 0E-17 1e-2 -> 0.00 - -ddqua150 quantize 1.0600 1e-5 -> 1.06000 -ddqua151 quantize 1.0600 1e-4 -> 1.0600 -ddqua152 quantize 1.0600 1e-3 -> 1.060 Rounded -ddqua153 quantize 1.0600 1e-2 -> 1.06 Rounded -ddqua154 quantize 1.0600 1e-1 -> 1.1 Inexact Rounded -ddqua155 quantize 1.0600 1e0 -> 1 Inexact Rounded - --- a couple where rounding was different in base tests -rounding: half_up -ddqua157 quantize -0.5 1e+0 -> -1 Inexact Rounded -ddqua158 quantize 1.05 1e-1 -> 1.1 Inexact Rounded -ddqua159 quantize 1.06 1e0 -> 1 Inexact Rounded -rounding: half_even - --- base tests with non-1 coefficients -ddqua161 quantize 0 -9e0 -> 0 -ddqua162 quantize 1 -7e0 -> 1 -ddqua163 quantize 0.1 -1e+2 -> 0E+2 Inexact Rounded -ddqua165 quantize 0.1 0e+1 -> 0E+1 Inexact Rounded -ddqua166 quantize 0.1 2e0 -> 0 Inexact Rounded -ddqua167 quantize 0.1 3e-1 -> 0.1 -ddqua168 quantize 0.1 44e-2 -> 0.10 -ddqua169 quantize 0.1 555e-3 -> 0.100 -ddqua170 quantize 0.9 6666e+2 -> 0E+2 Inexact Rounded -ddqua171 quantize 0.9 -777e+1 -> 0E+1 Inexact Rounded -ddqua172 quantize 0.9 -88e+0 -> 1 Inexact Rounded -ddqua173 quantize 0.9 -9e-1 -> 0.9 -ddqua174 quantize 0.9 0e-2 -> 0.90 -ddqua175 quantize 0.9 1.1e-3 -> 0.9000 --- negatives -ddqua181 quantize -0 1.1e0 -> -0.0 -ddqua182 quantize -1 -1e0 -> -1 -ddqua183 quantize -0.1 11e+2 -> -0E+2 Inexact Rounded -ddqua185 quantize -0.1 111e+1 -> -0E+1 Inexact Rounded -ddqua186 quantize -0.1 71e0 -> -0 Inexact Rounded -ddqua187 quantize -0.1 -91e-1 -> -0.1 -ddqua188 quantize -0.1 -.1e-2 -> -0.100 -ddqua189 quantize -0.1 -1e-3 -> -0.100 -ddqua190 quantize -0.9 0e+2 -> -0E+2 Inexact Rounded -ddqua191 quantize -0.9 -0e+1 -> -0E+1 Inexact Rounded -ddqua192 quantize -0.9 -10e+0 -> -1 Inexact Rounded -ddqua193 quantize -0.9 100e-1 -> -0.9 -ddqua194 quantize -0.9 999e-2 -> -0.90 - --- +ve exponents .. -ddqua201 quantize -1 1e+0 -> -1 -ddqua202 quantize -1 1e+1 -> -0E+1 Inexact Rounded -ddqua203 quantize -1 1e+2 -> -0E+2 Inexact Rounded -ddqua204 quantize 0 1e+0 -> 0 -ddqua205 quantize 0 1e+1 -> 0E+1 -ddqua206 quantize 0 1e+2 -> 0E+2 -ddqua207 quantize +1 1e+0 -> 1 -ddqua208 quantize +1 1e+1 -> 0E+1 Inexact Rounded -ddqua209 quantize +1 1e+2 -> 0E+2 Inexact Rounded - -ddqua220 quantize 1.04 1e+3 -> 0E+3 Inexact Rounded -ddqua221 quantize 1.04 1e+2 -> 0E+2 Inexact Rounded -ddqua222 quantize 1.04 1e+1 -> 0E+1 Inexact Rounded -ddqua223 quantize 1.04 1e+0 -> 1 Inexact Rounded -ddqua224 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded -ddqua225 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded -ddqua226 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded -ddqua227 quantize 1.05 1e+0 -> 1 Inexact Rounded -ddqua228 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded -ddqua229 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded -ddqua230 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded -ddqua231 quantize 1.05 1e+0 -> 1 Inexact Rounded -ddqua232 quantize 1.06 1e+3 -> 0E+3 Inexact Rounded -ddqua233 quantize 1.06 1e+2 -> 0E+2 Inexact Rounded -ddqua234 quantize 1.06 1e+1 -> 0E+1 Inexact Rounded -ddqua235 quantize 1.06 1e+0 -> 1 Inexact Rounded - -ddqua240 quantize -10 1e+1 -> -1E+1 Rounded -ddqua241 quantize +1 1e+1 -> 0E+1 Inexact Rounded -ddqua242 quantize +10 1e+1 -> 1E+1 Rounded -ddqua243 quantize 1E+1 1e+1 -> 1E+1 -- underneath this is E+1 -ddqua244 quantize 1E+2 1e+1 -> 1.0E+2 -- underneath this is E+1 -ddqua245 quantize 1E+3 1e+1 -> 1.00E+3 -- underneath this is E+1 -ddqua246 quantize 1E+4 1e+1 -> 1.000E+4 -- underneath this is E+1 -ddqua247 quantize 1E+5 1e+1 -> 1.0000E+5 -- underneath this is E+1 -ddqua248 quantize 1E+6 1e+1 -> 1.00000E+6 -- underneath this is E+1 -ddqua249 quantize 1E+7 1e+1 -> 1.000000E+7 -- underneath this is E+1 -ddqua250 quantize 1E+8 1e+1 -> 1.0000000E+8 -- underneath this is E+1 -ddqua251 quantize 1E+9 1e+1 -> 1.00000000E+9 -- underneath this is E+1 --- next one tries to add 9 zeros -ddqua252 quantize 1E+17 1e+1 -> NaN Invalid_operation -ddqua253 quantize 1E-17 1e+1 -> 0E+1 Inexact Rounded -ddqua254 quantize 1E-2 1e+1 -> 0E+1 Inexact Rounded -ddqua255 quantize 0E-17 1e+1 -> 0E+1 -ddqua256 quantize -0E-17 1e+1 -> -0E+1 -ddqua257 quantize -0E-1 1e+1 -> -0E+1 -ddqua258 quantize -0 1e+1 -> -0E+1 -ddqua259 quantize -0E+1 1e+1 -> -0E+1 - -ddqua260 quantize -10 1e+2 -> -0E+2 Inexact Rounded -ddqua261 quantize +1 1e+2 -> 0E+2 Inexact Rounded -ddqua262 quantize +10 1e+2 -> 0E+2 Inexact Rounded -ddqua263 quantize 1E+1 1e+2 -> 0E+2 Inexact Rounded -ddqua264 quantize 1E+2 1e+2 -> 1E+2 -ddqua265 quantize 1E+3 1e+2 -> 1.0E+3 -ddqua266 quantize 1E+4 1e+2 -> 1.00E+4 -ddqua267 quantize 1E+5 1e+2 -> 1.000E+5 -ddqua268 quantize 1E+6 1e+2 -> 1.0000E+6 -ddqua269 quantize 1E+7 1e+2 -> 1.00000E+7 -ddqua270 quantize 1E+8 1e+2 -> 1.000000E+8 -ddqua271 quantize 1E+9 1e+2 -> 1.0000000E+9 -ddqua272 quantize 1E+10 1e+2 -> 1.00000000E+10 -ddqua273 quantize 1E-10 1e+2 -> 0E+2 Inexact Rounded -ddqua274 quantize 1E-2 1e+2 -> 0E+2 Inexact Rounded -ddqua275 quantize 0E-10 1e+2 -> 0E+2 - -ddqua280 quantize -10 1e+3 -> -0E+3 Inexact Rounded -ddqua281 quantize +1 1e+3 -> 0E+3 Inexact Rounded -ddqua282 quantize +10 1e+3 -> 0E+3 Inexact Rounded -ddqua283 quantize 1E+1 1e+3 -> 0E+3 Inexact Rounded -ddqua284 quantize 1E+2 1e+3 -> 0E+3 Inexact Rounded -ddqua285 quantize 1E+3 1e+3 -> 1E+3 -ddqua286 quantize 1E+4 1e+3 -> 1.0E+4 -ddqua287 quantize 1E+5 1e+3 -> 1.00E+5 -ddqua288 quantize 1E+6 1e+3 -> 1.000E+6 -ddqua289 quantize 1E+7 1e+3 -> 1.0000E+7 -ddqua290 quantize 1E+8 1e+3 -> 1.00000E+8 -ddqua291 quantize 1E+9 1e+3 -> 1.000000E+9 -ddqua292 quantize 1E+10 1e+3 -> 1.0000000E+10 -ddqua293 quantize 1E-10 1e+3 -> 0E+3 Inexact Rounded -ddqua294 quantize 1E-2 1e+3 -> 0E+3 Inexact Rounded -ddqua295 quantize 0E-10 1e+3 -> 0E+3 - --- round up from below [sign wrong in JIT compiler once] -ddqua300 quantize 0.0078 1e-5 -> 0.00780 -ddqua301 quantize 0.0078 1e-4 -> 0.0078 -ddqua302 quantize 0.0078 1e-3 -> 0.008 Inexact Rounded -ddqua303 quantize 0.0078 1e-2 -> 0.01 Inexact Rounded -ddqua304 quantize 0.0078 1e-1 -> 0.0 Inexact Rounded -ddqua305 quantize 0.0078 1e0 -> 0 Inexact Rounded -ddqua306 quantize 0.0078 1e+1 -> 0E+1 Inexact Rounded -ddqua307 quantize 0.0078 1e+2 -> 0E+2 Inexact Rounded - -ddqua310 quantize -0.0078 1e-5 -> -0.00780 -ddqua311 quantize -0.0078 1e-4 -> -0.0078 -ddqua312 quantize -0.0078 1e-3 -> -0.008 Inexact Rounded -ddqua313 quantize -0.0078 1e-2 -> -0.01 Inexact Rounded -ddqua314 quantize -0.0078 1e-1 -> -0.0 Inexact Rounded -ddqua315 quantize -0.0078 1e0 -> -0 Inexact Rounded -ddqua316 quantize -0.0078 1e+1 -> -0E+1 Inexact Rounded -ddqua317 quantize -0.0078 1e+2 -> -0E+2 Inexact Rounded - -ddqua320 quantize 0.078 1e-5 -> 0.07800 -ddqua321 quantize 0.078 1e-4 -> 0.0780 -ddqua322 quantize 0.078 1e-3 -> 0.078 -ddqua323 quantize 0.078 1e-2 -> 0.08 Inexact Rounded -ddqua324 quantize 0.078 1e-1 -> 0.1 Inexact Rounded -ddqua325 quantize 0.078 1e0 -> 0 Inexact Rounded -ddqua326 quantize 0.078 1e+1 -> 0E+1 Inexact Rounded -ddqua327 quantize 0.078 1e+2 -> 0E+2 Inexact Rounded - -ddqua330 quantize -0.078 1e-5 -> -0.07800 -ddqua331 quantize -0.078 1e-4 -> -0.0780 -ddqua332 quantize -0.078 1e-3 -> -0.078 -ddqua333 quantize -0.078 1e-2 -> -0.08 Inexact Rounded -ddqua334 quantize -0.078 1e-1 -> -0.1 Inexact Rounded -ddqua335 quantize -0.078 1e0 -> -0 Inexact Rounded -ddqua336 quantize -0.078 1e+1 -> -0E+1 Inexact Rounded -ddqua337 quantize -0.078 1e+2 -> -0E+2 Inexact Rounded - -ddqua340 quantize 0.78 1e-5 -> 0.78000 -ddqua341 quantize 0.78 1e-4 -> 0.7800 -ddqua342 quantize 0.78 1e-3 -> 0.780 -ddqua343 quantize 0.78 1e-2 -> 0.78 -ddqua344 quantize 0.78 1e-1 -> 0.8 Inexact Rounded -ddqua345 quantize 0.78 1e0 -> 1 Inexact Rounded -ddqua346 quantize 0.78 1e+1 -> 0E+1 Inexact Rounded -ddqua347 quantize 0.78 1e+2 -> 0E+2 Inexact Rounded - -ddqua350 quantize -0.78 1e-5 -> -0.78000 -ddqua351 quantize -0.78 1e-4 -> -0.7800 -ddqua352 quantize -0.78 1e-3 -> -0.780 -ddqua353 quantize -0.78 1e-2 -> -0.78 -ddqua354 quantize -0.78 1e-1 -> -0.8 Inexact Rounded -ddqua355 quantize -0.78 1e0 -> -1 Inexact Rounded -ddqua356 quantize -0.78 1e+1 -> -0E+1 Inexact Rounded -ddqua357 quantize -0.78 1e+2 -> -0E+2 Inexact Rounded - -ddqua360 quantize 7.8 1e-5 -> 7.80000 -ddqua361 quantize 7.8 1e-4 -> 7.8000 -ddqua362 quantize 7.8 1e-3 -> 7.800 -ddqua363 quantize 7.8 1e-2 -> 7.80 -ddqua364 quantize 7.8 1e-1 -> 7.8 -ddqua365 quantize 7.8 1e0 -> 8 Inexact Rounded -ddqua366 quantize 7.8 1e+1 -> 1E+1 Inexact Rounded -ddqua367 quantize 7.8 1e+2 -> 0E+2 Inexact Rounded -ddqua368 quantize 7.8 1e+3 -> 0E+3 Inexact Rounded - -ddqua370 quantize -7.8 1e-5 -> -7.80000 -ddqua371 quantize -7.8 1e-4 -> -7.8000 -ddqua372 quantize -7.8 1e-3 -> -7.800 -ddqua373 quantize -7.8 1e-2 -> -7.80 -ddqua374 quantize -7.8 1e-1 -> -7.8 -ddqua375 quantize -7.8 1e0 -> -8 Inexact Rounded -ddqua376 quantize -7.8 1e+1 -> -1E+1 Inexact Rounded -ddqua377 quantize -7.8 1e+2 -> -0E+2 Inexact Rounded -ddqua378 quantize -7.8 1e+3 -> -0E+3 Inexact Rounded - --- some individuals -ddqua380 quantize 1234567352364.506 1e-2 -> 1234567352364.51 Inexact Rounded -ddqua381 quantize 12345673523645.06 1e-2 -> 12345673523645.06 -ddqua382 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation -ddqua383 quantize 1234567352364506 1e-2 -> NaN Invalid_operation -ddqua384 quantize -1234567352364.506 1e-2 -> -1234567352364.51 Inexact Rounded -ddqua385 quantize -12345673523645.06 1e-2 -> -12345673523645.06 -ddqua386 quantize -123456735236450.6 1e-2 -> NaN Invalid_operation -ddqua387 quantize -1234567352364506 1e-2 -> NaN Invalid_operation - -rounding: down -ddqua389 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation --- ? should that one instead have been: --- ddqua389 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation -rounding: half_up - --- and a few more from e-mail discussions -ddqua391 quantize 12345678912.34567 1e-3 -> 12345678912.346 Inexact Rounded -ddqua392 quantize 123456789123.4567 1e-3 -> 123456789123.457 Inexact Rounded -ddqua393 quantize 1234567891234.567 1e-3 -> 1234567891234.567 -ddqua394 quantize 12345678912345.67 1e-3 -> NaN Invalid_operation -ddqua395 quantize 123456789123456.7 1e-3 -> NaN Invalid_operation -ddqua396 quantize 1234567891234567. 1e-3 -> NaN Invalid_operation - --- some 9999 round-up cases -ddqua400 quantize 9.999 1e-5 -> 9.99900 -ddqua401 quantize 9.999 1e-4 -> 9.9990 -ddqua402 quantize 9.999 1e-3 -> 9.999 -ddqua403 quantize 9.999 1e-2 -> 10.00 Inexact Rounded -ddqua404 quantize 9.999 1e-1 -> 10.0 Inexact Rounded -ddqua405 quantize 9.999 1e0 -> 10 Inexact Rounded -ddqua406 quantize 9.999 1e1 -> 1E+1 Inexact Rounded -ddqua407 quantize 9.999 1e2 -> 0E+2 Inexact Rounded - -ddqua410 quantize 0.999 1e-5 -> 0.99900 -ddqua411 quantize 0.999 1e-4 -> 0.9990 -ddqua412 quantize 0.999 1e-3 -> 0.999 -ddqua413 quantize 0.999 1e-2 -> 1.00 Inexact Rounded -ddqua414 quantize 0.999 1e-1 -> 1.0 Inexact Rounded -ddqua415 quantize 0.999 1e0 -> 1 Inexact Rounded -ddqua416 quantize 0.999 1e1 -> 0E+1 Inexact Rounded - -ddqua420 quantize 0.0999 1e-5 -> 0.09990 -ddqua421 quantize 0.0999 1e-4 -> 0.0999 -ddqua422 quantize 0.0999 1e-3 -> 0.100 Inexact Rounded -ddqua423 quantize 0.0999 1e-2 -> 0.10 Inexact Rounded -ddqua424 quantize 0.0999 1e-1 -> 0.1 Inexact Rounded -ddqua425 quantize 0.0999 1e0 -> 0 Inexact Rounded -ddqua426 quantize 0.0999 1e1 -> 0E+1 Inexact Rounded - -ddqua430 quantize 0.00999 1e-5 -> 0.00999 -ddqua431 quantize 0.00999 1e-4 -> 0.0100 Inexact Rounded -ddqua432 quantize 0.00999 1e-3 -> 0.010 Inexact Rounded -ddqua433 quantize 0.00999 1e-2 -> 0.01 Inexact Rounded -ddqua434 quantize 0.00999 1e-1 -> 0.0 Inexact Rounded -ddqua435 quantize 0.00999 1e0 -> 0 Inexact Rounded -ddqua436 quantize 0.00999 1e1 -> 0E+1 Inexact Rounded - -ddqua440 quantize 0.000999 1e-5 -> 0.00100 Inexact Rounded -ddqua441 quantize 0.000999 1e-4 -> 0.0010 Inexact Rounded -ddqua442 quantize 0.000999 1e-3 -> 0.001 Inexact Rounded -ddqua443 quantize 0.000999 1e-2 -> 0.00 Inexact Rounded -ddqua444 quantize 0.000999 1e-1 -> 0.0 Inexact Rounded -ddqua445 quantize 0.000999 1e0 -> 0 Inexact Rounded -ddqua446 quantize 0.000999 1e1 -> 0E+1 Inexact Rounded - -ddqua1001 quantize 0.000 0.001 -> 0.000 -ddqua1002 quantize 0.001 0.001 -> 0.001 -ddqua1003 quantize 0.0012 0.001 -> 0.001 Inexact Rounded -ddqua1004 quantize 0.0018 0.001 -> 0.002 Inexact Rounded -ddqua1005 quantize 0.501 0.001 -> 0.501 -ddqua1006 quantize 0.5012 0.001 -> 0.501 Inexact Rounded -ddqua1007 quantize 0.5018 0.001 -> 0.502 Inexact Rounded -ddqua1008 quantize 0.999 0.001 -> 0.999 - -ddqua481 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded -ddqua482 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded -ddqua483 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded -ddqua484 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded -ddqua485 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded -ddqua486 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded --- a potential double-round -ddqua487 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded -ddqua488 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded - -ddqua491 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded -ddqua492 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded -ddqua493 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded -ddqua494 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded -ddqua495 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded -ddqua496 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded -ddqua497 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded -ddqua498 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded - --- Zeros -ddqua500 quantize 0 1e1 -> 0E+1 -ddqua501 quantize 0 1e0 -> 0 -ddqua502 quantize 0 1e-1 -> 0.0 -ddqua503 quantize 0.0 1e-1 -> 0.0 -ddqua504 quantize 0.0 1e0 -> 0 -ddqua505 quantize 0.0 1e+1 -> 0E+1 -ddqua506 quantize 0E+1 1e-1 -> 0.0 -ddqua507 quantize 0E+1 1e0 -> 0 -ddqua508 quantize 0E+1 1e+1 -> 0E+1 -ddqua509 quantize -0 1e1 -> -0E+1 -ddqua510 quantize -0 1e0 -> -0 -ddqua511 quantize -0 1e-1 -> -0.0 -ddqua512 quantize -0.0 1e-1 -> -0.0 -ddqua513 quantize -0.0 1e0 -> -0 -ddqua514 quantize -0.0 1e+1 -> -0E+1 -ddqua515 quantize -0E+1 1e-1 -> -0.0 -ddqua516 quantize -0E+1 1e0 -> -0 -ddqua517 quantize -0E+1 1e+1 -> -0E+1 - --- Suspicious RHS values -ddqua520 quantize 1.234 1e359 -> 0E+359 Inexact Rounded -ddqua521 quantize 123.456 1e359 -> 0E+359 Inexact Rounded -ddqua522 quantize 1.234 1e359 -> 0E+359 Inexact Rounded -ddqua523 quantize 123.456 1e359 -> 0E+359 Inexact Rounded --- next four are "won't fit" overflow -ddqua526 quantize 1.234 1e-299 -> NaN Invalid_operation -ddqua527 quantize 123.456 1e-299 -> NaN Invalid_operation -ddqua528 quantize 1.234 1e-299 -> NaN Invalid_operation -ddqua529 quantize 123.456 1e-299 -> NaN Invalid_operation - -ddqua532 quantize 1.234E+299 1e299 -> 1E+299 Inexact Rounded -ddqua533 quantize 1.234E+298 1e299 -> 0E+299 Inexact Rounded -ddqua534 quantize 1.234 1e299 -> 0E+299 Inexact Rounded -ddqua537 quantize 0 1e-299 -> 0E-299 --- next two are "won't fit" overflows -ddqua538 quantize 1.234 1e-299 -> NaN Invalid_operation -ddqua539 quantize 1.234 1e-300 -> NaN Invalid_operation --- [more below] - --- Specials -ddqua580 quantize Inf -Inf -> Infinity -ddqua581 quantize Inf 1e-299 -> NaN Invalid_operation -ddqua582 quantize Inf 1e-1 -> NaN Invalid_operation -ddqua583 quantize Inf 1e0 -> NaN Invalid_operation -ddqua584 quantize Inf 1e1 -> NaN Invalid_operation -ddqua585 quantize Inf 1e299 -> NaN Invalid_operation -ddqua586 quantize Inf Inf -> Infinity -ddqua587 quantize -1000 Inf -> NaN Invalid_operation -ddqua588 quantize -Inf Inf -> -Infinity -ddqua589 quantize -1 Inf -> NaN Invalid_operation -ddqua590 quantize 0 Inf -> NaN Invalid_operation -ddqua591 quantize 1 Inf -> NaN Invalid_operation -ddqua592 quantize 1000 Inf -> NaN Invalid_operation -ddqua593 quantize Inf Inf -> Infinity -ddqua594 quantize Inf 1e-0 -> NaN Invalid_operation -ddqua595 quantize -0 Inf -> NaN Invalid_operation - -ddqua600 quantize -Inf -Inf -> -Infinity -ddqua601 quantize -Inf 1e-299 -> NaN Invalid_operation -ddqua602 quantize -Inf 1e-1 -> NaN Invalid_operation -ddqua603 quantize -Inf 1e0 -> NaN Invalid_operation -ddqua604 quantize -Inf 1e1 -> NaN Invalid_operation -ddqua605 quantize -Inf 1e299 -> NaN Invalid_operation -ddqua606 quantize -Inf Inf -> -Infinity -ddqua607 quantize -1000 Inf -> NaN Invalid_operation -ddqua608 quantize -Inf -Inf -> -Infinity -ddqua609 quantize -1 -Inf -> NaN Invalid_operation -ddqua610 quantize 0 -Inf -> NaN Invalid_operation -ddqua611 quantize 1 -Inf -> NaN Invalid_operation -ddqua612 quantize 1000 -Inf -> NaN Invalid_operation -ddqua613 quantize Inf -Inf -> Infinity -ddqua614 quantize -Inf 1e-0 -> NaN Invalid_operation -ddqua615 quantize -0 -Inf -> NaN Invalid_operation - -ddqua621 quantize NaN -Inf -> NaN -ddqua622 quantize NaN 1e-299 -> NaN -ddqua623 quantize NaN 1e-1 -> NaN -ddqua624 quantize NaN 1e0 -> NaN -ddqua625 quantize NaN 1e1 -> NaN -ddqua626 quantize NaN 1e299 -> NaN -ddqua627 quantize NaN Inf -> NaN -ddqua628 quantize NaN NaN -> NaN -ddqua629 quantize -Inf NaN -> NaN -ddqua630 quantize -1000 NaN -> NaN -ddqua631 quantize -1 NaN -> NaN -ddqua632 quantize 0 NaN -> NaN -ddqua633 quantize 1 NaN -> NaN -ddqua634 quantize 1000 NaN -> NaN -ddqua635 quantize Inf NaN -> NaN -ddqua636 quantize NaN 1e-0 -> NaN -ddqua637 quantize -0 NaN -> NaN - -ddqua641 quantize sNaN -Inf -> NaN Invalid_operation -ddqua642 quantize sNaN 1e-299 -> NaN Invalid_operation -ddqua643 quantize sNaN 1e-1 -> NaN Invalid_operation -ddqua644 quantize sNaN 1e0 -> NaN Invalid_operation -ddqua645 quantize sNaN 1e1 -> NaN Invalid_operation -ddqua646 quantize sNaN 1e299 -> NaN Invalid_operation -ddqua647 quantize sNaN NaN -> NaN Invalid_operation -ddqua648 quantize sNaN sNaN -> NaN Invalid_operation -ddqua649 quantize NaN sNaN -> NaN Invalid_operation -ddqua650 quantize -Inf sNaN -> NaN Invalid_operation -ddqua651 quantize -1000 sNaN -> NaN Invalid_operation -ddqua652 quantize -1 sNaN -> NaN Invalid_operation -ddqua653 quantize 0 sNaN -> NaN Invalid_operation -ddqua654 quantize 1 sNaN -> NaN Invalid_operation -ddqua655 quantize 1000 sNaN -> NaN Invalid_operation -ddqua656 quantize Inf sNaN -> NaN Invalid_operation -ddqua657 quantize NaN sNaN -> NaN Invalid_operation -ddqua658 quantize sNaN 1e-0 -> NaN Invalid_operation -ddqua659 quantize -0 sNaN -> NaN Invalid_operation - --- propagating NaNs -ddqua661 quantize NaN9 -Inf -> NaN9 -ddqua662 quantize NaN8 919 -> NaN8 -ddqua663 quantize NaN71 Inf -> NaN71 -ddqua664 quantize NaN6 NaN5 -> NaN6 -ddqua665 quantize -Inf NaN4 -> NaN4 -ddqua666 quantize -919 NaN31 -> NaN31 -ddqua667 quantize Inf NaN2 -> NaN2 - -ddqua671 quantize sNaN99 -Inf -> NaN99 Invalid_operation -ddqua672 quantize sNaN98 -11 -> NaN98 Invalid_operation -ddqua673 quantize sNaN97 NaN -> NaN97 Invalid_operation -ddqua674 quantize sNaN16 sNaN94 -> NaN16 Invalid_operation -ddqua675 quantize NaN95 sNaN93 -> NaN93 Invalid_operation -ddqua676 quantize -Inf sNaN92 -> NaN92 Invalid_operation -ddqua677 quantize 088 sNaN91 -> NaN91 Invalid_operation -ddqua678 quantize Inf sNaN90 -> NaN90 Invalid_operation -ddqua679 quantize NaN sNaN88 -> NaN88 Invalid_operation - -ddqua681 quantize -NaN9 -Inf -> -NaN9 -ddqua682 quantize -NaN8 919 -> -NaN8 -ddqua683 quantize -NaN71 Inf -> -NaN71 -ddqua684 quantize -NaN6 -NaN5 -> -NaN6 -ddqua685 quantize -Inf -NaN4 -> -NaN4 -ddqua686 quantize -919 -NaN31 -> -NaN31 -ddqua687 quantize Inf -NaN2 -> -NaN2 - -ddqua691 quantize -sNaN99 -Inf -> -NaN99 Invalid_operation -ddqua692 quantize -sNaN98 -11 -> -NaN98 Invalid_operation -ddqua693 quantize -sNaN97 NaN -> -NaN97 Invalid_operation -ddqua694 quantize -sNaN16 sNaN94 -> -NaN16 Invalid_operation -ddqua695 quantize -NaN95 -sNaN93 -> -NaN93 Invalid_operation -ddqua696 quantize -Inf -sNaN92 -> -NaN92 Invalid_operation -ddqua697 quantize 088 -sNaN91 -> -NaN91 Invalid_operation -ddqua698 quantize Inf -sNaN90 -> -NaN90 Invalid_operation -ddqua699 quantize NaN -sNaN88 -> -NaN88 Invalid_operation - --- subnormals and underflow -ddqua710 quantize 1.00E-383 1e-383 -> 1E-383 Rounded -ddqua711 quantize 0.1E-383 2e-384 -> 1E-384 Subnormal -ddqua712 quantize 0.10E-383 3e-384 -> 1E-384 Subnormal Rounded -ddqua713 quantize 0.100E-383 4e-384 -> 1E-384 Subnormal Rounded -ddqua714 quantize 0.01E-383 5e-385 -> 1E-385 Subnormal --- next is rounded to Emin -ddqua715 quantize 0.999E-383 1e-383 -> 1E-383 Inexact Rounded -ddqua716 quantize 0.099E-383 10e-384 -> 1E-384 Inexact Rounded Subnormal - -ddqua717 quantize 0.009E-383 1e-385 -> 1E-385 Inexact Rounded Subnormal -ddqua718 quantize 0.001E-383 1e-385 -> 0E-385 Inexact Rounded -ddqua719 quantize 0.0009E-383 1e-385 -> 0E-385 Inexact Rounded -ddqua720 quantize 0.0001E-383 1e-385 -> 0E-385 Inexact Rounded - -ddqua730 quantize -1.00E-383 1e-383 -> -1E-383 Rounded -ddqua731 quantize -0.1E-383 1e-383 -> -0E-383 Rounded Inexact -ddqua732 quantize -0.10E-383 1e-383 -> -0E-383 Rounded Inexact -ddqua733 quantize -0.100E-383 1e-383 -> -0E-383 Rounded Inexact -ddqua734 quantize -0.01E-383 1e-383 -> -0E-383 Inexact Rounded --- next is rounded to Emin -ddqua735 quantize -0.999E-383 90e-383 -> -1E-383 Inexact Rounded -ddqua736 quantize -0.099E-383 -1e-383 -> -0E-383 Inexact Rounded -ddqua737 quantize -0.009E-383 -1e-383 -> -0E-383 Inexact Rounded -ddqua738 quantize -0.001E-383 -0e-383 -> -0E-383 Inexact Rounded -ddqua739 quantize -0.0001E-383 0e-383 -> -0E-383 Inexact Rounded - -ddqua740 quantize -1.00E-383 1e-384 -> -1.0E-383 Rounded -ddqua741 quantize -0.1E-383 1e-384 -> -1E-384 Subnormal -ddqua742 quantize -0.10E-383 1e-384 -> -1E-384 Subnormal Rounded -ddqua743 quantize -0.100E-383 1e-384 -> -1E-384 Subnormal Rounded -ddqua744 quantize -0.01E-383 1e-384 -> -0E-384 Inexact Rounded --- next is rounded to Emin -ddqua745 quantize -0.999E-383 1e-384 -> -1.0E-383 Inexact Rounded -ddqua746 quantize -0.099E-383 1e-384 -> -1E-384 Inexact Rounded Subnormal -ddqua747 quantize -0.009E-383 1e-384 -> -0E-384 Inexact Rounded -ddqua748 quantize -0.001E-383 1e-384 -> -0E-384 Inexact Rounded -ddqua749 quantize -0.0001E-383 1e-384 -> -0E-384 Inexact Rounded - -ddqua750 quantize -1.00E-383 1e-385 -> -1.00E-383 -ddqua751 quantize -0.1E-383 1e-385 -> -1.0E-384 Subnormal -ddqua752 quantize -0.10E-383 1e-385 -> -1.0E-384 Subnormal -ddqua753 quantize -0.100E-383 1e-385 -> -1.0E-384 Subnormal Rounded -ddqua754 quantize -0.01E-383 1e-385 -> -1E-385 Subnormal --- next is rounded to Emin -ddqua755 quantize -0.999E-383 1e-385 -> -1.00E-383 Inexact Rounded -ddqua756 quantize -0.099E-383 1e-385 -> -1.0E-384 Inexact Rounded Subnormal -ddqua757 quantize -0.009E-383 1e-385 -> -1E-385 Inexact Rounded Subnormal -ddqua758 quantize -0.001E-383 1e-385 -> -0E-385 Inexact Rounded -ddqua759 quantize -0.0001E-383 1e-385 -> -0E-385 Inexact Rounded - -ddqua760 quantize -1.00E-383 1e-386 -> -1.000E-383 -ddqua761 quantize -0.1E-383 1e-386 -> -1.00E-384 Subnormal -ddqua762 quantize -0.10E-383 1e-386 -> -1.00E-384 Subnormal -ddqua763 quantize -0.100E-383 1e-386 -> -1.00E-384 Subnormal -ddqua764 quantize -0.01E-383 1e-386 -> -1.0E-385 Subnormal -ddqua765 quantize -0.999E-383 1e-386 -> -9.99E-384 Subnormal -ddqua766 quantize -0.099E-383 1e-386 -> -9.9E-385 Subnormal -ddqua767 quantize -0.009E-383 1e-386 -> -9E-386 Subnormal -ddqua768 quantize -0.001E-383 1e-386 -> -1E-386 Subnormal -ddqua769 quantize -0.0001E-383 1e-386 -> -0E-386 Inexact Rounded - --- More from Fung Lee -ddqua1021 quantize 8.666666666666000E+384 1.000000000000000E+384 -> 8.666666666666000E+384 -ddqua1022 quantize -8.666666666666000E+384 1.000000000000000E+384 -> -8.666666666666000E+384 -ddqua1027 quantize 8.666666666666000E+323 1E+31 -> NaN Invalid_operation -ddqua1029 quantize 8.66666666E+3 1E+3 -> 9E+3 Inexact Rounded - - ---ddqua1030 quantize 8.666666666666000E+384 1E+384 -> 9.000000000000000E+384 Rounded Inexact ---ddqua1031 quantize 8.666666666666000E+384 1E+384 -> 8.666666666666000E+384 Rounded ---ddqua1032 quantize 8.666666666666000E+384 1E+383 -> 8.666666666666000E+384 Rounded ---ddqua1033 quantize 8.666666666666000E+384 1E+382 -> 8.666666666666000E+384 Rounded ---ddqua1034 quantize 8.666666666666000E+384 1E+381 -> 8.666666666666000E+384 Rounded ---ddqua1035 quantize 8.666666666666000E+384 1E+380 -> 8.666666666666000E+384 Rounded - --- Int and uInt32 edge values for testing conversions -ddqua1040 quantize -2147483646 0 -> -2147483646 -ddqua1041 quantize -2147483647 0 -> -2147483647 -ddqua1042 quantize -2147483648 0 -> -2147483648 -ddqua1043 quantize -2147483649 0 -> -2147483649 -ddqua1044 quantize 2147483646 0 -> 2147483646 -ddqua1045 quantize 2147483647 0 -> 2147483647 -ddqua1046 quantize 2147483648 0 -> 2147483648 -ddqua1047 quantize 2147483649 0 -> 2147483649 -ddqua1048 quantize 4294967294 0 -> 4294967294 -ddqua1049 quantize 4294967295 0 -> 4294967295 -ddqua1050 quantize 4294967296 0 -> 4294967296 -ddqua1051 quantize 4294967297 0 -> 4294967297 - --- Rounding swathe -rounding: half_even -ddqua1100 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1101 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1102 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1103 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -ddqua1104 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1105 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua1106 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1107 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1108 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1109 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: half_up -ddqua1200 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1201 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1202 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1203 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -ddqua1204 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1205 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -ddqua1206 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1207 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1208 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1209 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: half_down -ddqua1300 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1301 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1302 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1303 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -ddqua1304 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1305 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua1306 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1307 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1308 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1309 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: up -ddqua1400 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1401 quantize 1.2301 1.00 -> 1.24 Inexact Rounded -ddqua1402 quantize 1.2310 1.00 -> 1.24 Inexact Rounded -ddqua1403 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -ddqua1404 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1405 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -ddqua1406 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1407 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1408 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1409 quantize 1.2399 1.00 -> 1.24 Inexact Rounded -ddqua1411 quantize -1.2399 1.00 -> -1.24 Inexact Rounded - -rounding: down -ddqua1500 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1501 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1502 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1503 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -ddqua1504 quantize 1.2351 1.00 -> 1.23 Inexact Rounded -ddqua1505 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua1506 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -ddqua1507 quantize 1.2360 1.00 -> 1.23 Inexact Rounded -ddqua1508 quantize 1.2370 1.00 -> 1.23 Inexact Rounded -ddqua1509 quantize 1.2399 1.00 -> 1.23 Inexact Rounded -ddqua1511 quantize -1.2399 1.00 -> -1.23 Inexact Rounded - -rounding: ceiling -ddqua1600 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1601 quantize 1.2301 1.00 -> 1.24 Inexact Rounded -ddqua1602 quantize 1.2310 1.00 -> 1.24 Inexact Rounded -ddqua1603 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -ddqua1604 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -ddqua1605 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -ddqua1606 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -ddqua1607 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -ddqua1608 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -ddqua1609 quantize 1.2399 1.00 -> 1.24 Inexact Rounded -ddqua1611 quantize -1.2399 1.00 -> -1.23 Inexact Rounded - -rounding: floor -ddqua1700 quantize 1.2300 1.00 -> 1.23 Rounded -ddqua1701 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -ddqua1702 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -ddqua1703 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -ddqua1704 quantize 1.2351 1.00 -> 1.23 Inexact Rounded -ddqua1705 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua1706 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -ddqua1707 quantize 1.2360 1.00 -> 1.23 Inexact Rounded -ddqua1708 quantize 1.2370 1.00 -> 1.23 Inexact Rounded -ddqua1709 quantize 1.2399 1.00 -> 1.23 Inexact Rounded -ddqua1711 quantize -1.2399 1.00 -> -1.24 Inexact Rounded - -rounding: 05up -ddqua1800 quantize 1.2000 1.00 -> 1.20 Rounded -ddqua1801 quantize 1.2001 1.00 -> 1.21 Inexact Rounded -ddqua1802 quantize 1.2010 1.00 -> 1.21 Inexact Rounded -ddqua1803 quantize 1.2050 1.00 -> 1.21 Inexact Rounded -ddqua1804 quantize 1.2051 1.00 -> 1.21 Inexact Rounded -ddqua1807 quantize 1.2060 1.00 -> 1.21 Inexact Rounded -ddqua1808 quantize 1.2070 1.00 -> 1.21 Inexact Rounded -ddqua1809 quantize 1.2099 1.00 -> 1.21 Inexact Rounded -ddqua1811 quantize -1.2099 1.00 -> -1.21 Inexact Rounded - -ddqua1900 quantize 1.2100 1.00 -> 1.21 Rounded -ddqua1901 quantize 1.2101 1.00 -> 1.21 Inexact Rounded -ddqua1902 quantize 1.2110 1.00 -> 1.21 Inexact Rounded -ddqua1903 quantize 1.2150 1.00 -> 1.21 Inexact Rounded -ddqua1904 quantize 1.2151 1.00 -> 1.21 Inexact Rounded -ddqua1907 quantize 1.2160 1.00 -> 1.21 Inexact Rounded -ddqua1908 quantize 1.2170 1.00 -> 1.21 Inexact Rounded -ddqua1909 quantize 1.2199 1.00 -> 1.21 Inexact Rounded -ddqua1911 quantize -1.2199 1.00 -> -1.21 Inexact Rounded - -ddqua2000 quantize 1.2400 1.00 -> 1.24 Rounded -ddqua2001 quantize 1.2401 1.00 -> 1.24 Inexact Rounded -ddqua2002 quantize 1.2410 1.00 -> 1.24 Inexact Rounded -ddqua2003 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -ddqua2004 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -ddqua2007 quantize 1.2460 1.00 -> 1.24 Inexact Rounded -ddqua2008 quantize 1.2470 1.00 -> 1.24 Inexact Rounded -ddqua2009 quantize 1.2499 1.00 -> 1.24 Inexact Rounded -ddqua2011 quantize -1.2499 1.00 -> -1.24 Inexact Rounded - -ddqua2100 quantize 1.2500 1.00 -> 1.25 Rounded -ddqua2101 quantize 1.2501 1.00 -> 1.26 Inexact Rounded -ddqua2102 quantize 1.2510 1.00 -> 1.26 Inexact Rounded -ddqua2103 quantize 1.2550 1.00 -> 1.26 Inexact Rounded -ddqua2104 quantize 1.2551 1.00 -> 1.26 Inexact Rounded -ddqua2107 quantize 1.2560 1.00 -> 1.26 Inexact Rounded -ddqua2108 quantize 1.2570 1.00 -> 1.26 Inexact Rounded -ddqua2109 quantize 1.2599 1.00 -> 1.26 Inexact Rounded -ddqua2111 quantize -1.2599 1.00 -> -1.26 Inexact Rounded - -ddqua2200 quantize 1.2600 1.00 -> 1.26 Rounded -ddqua2201 quantize 1.2601 1.00 -> 1.26 Inexact Rounded -ddqua2202 quantize 1.2610 1.00 -> 1.26 Inexact Rounded -ddqua2203 quantize 1.2650 1.00 -> 1.26 Inexact Rounded -ddqua2204 quantize 1.2651 1.00 -> 1.26 Inexact Rounded -ddqua2207 quantize 1.2660 1.00 -> 1.26 Inexact Rounded -ddqua2208 quantize 1.2670 1.00 -> 1.26 Inexact Rounded -ddqua2209 quantize 1.2699 1.00 -> 1.26 Inexact Rounded -ddqua2211 quantize -1.2699 1.00 -> -1.26 Inexact Rounded - -ddqua2300 quantize 1.2900 1.00 -> 1.29 Rounded -ddqua2301 quantize 1.2901 1.00 -> 1.29 Inexact Rounded -ddqua2302 quantize 1.2910 1.00 -> 1.29 Inexact Rounded -ddqua2303 quantize 1.2950 1.00 -> 1.29 Inexact Rounded -ddqua2304 quantize 1.2951 1.00 -> 1.29 Inexact Rounded -ddqua2307 quantize 1.2960 1.00 -> 1.29 Inexact Rounded -ddqua2308 quantize 1.2970 1.00 -> 1.29 Inexact Rounded -ddqua2309 quantize 1.2999 1.00 -> 1.29 Inexact Rounded -ddqua2311 quantize -1.2999 1.00 -> -1.29 Inexact Rounded - --- Null tests -rounding: half_even -ddqua998 quantize 10 # -> NaN Invalid_operation -ddqua999 quantize # 1e10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddQuantize.decTest -- decDouble quantize operation -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Most of the tests here assume a "regular pattern", where the +-- sign and coefficient are +1. +-- 2004.03.15 Underflow for quantize is suppressed +-- 2005.06.08 More extensive tests for 'does not fit' +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks +ddqua001 quantize 0 1e0 -> 0 +ddqua002 quantize 1 1e0 -> 1 +ddqua003 quantize 0.1 1e+2 -> 0E+2 Inexact Rounded +ddqua005 quantize 0.1 1e+1 -> 0E+1 Inexact Rounded +ddqua006 quantize 0.1 1e0 -> 0 Inexact Rounded +ddqua007 quantize 0.1 1e-1 -> 0.1 +ddqua008 quantize 0.1 1e-2 -> 0.10 +ddqua009 quantize 0.1 1e-3 -> 0.100 +ddqua010 quantize 0.9 1e+2 -> 0E+2 Inexact Rounded +ddqua011 quantize 0.9 1e+1 -> 0E+1 Inexact Rounded +ddqua012 quantize 0.9 1e+0 -> 1 Inexact Rounded +ddqua013 quantize 0.9 1e-1 -> 0.9 +ddqua014 quantize 0.9 1e-2 -> 0.90 +ddqua015 quantize 0.9 1e-3 -> 0.900 +-- negatives +ddqua021 quantize -0 1e0 -> -0 +ddqua022 quantize -1 1e0 -> -1 +ddqua023 quantize -0.1 1e+2 -> -0E+2 Inexact Rounded +ddqua025 quantize -0.1 1e+1 -> -0E+1 Inexact Rounded +ddqua026 quantize -0.1 1e0 -> -0 Inexact Rounded +ddqua027 quantize -0.1 1e-1 -> -0.1 +ddqua028 quantize -0.1 1e-2 -> -0.10 +ddqua029 quantize -0.1 1e-3 -> -0.100 +ddqua030 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded +ddqua031 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded +ddqua032 quantize -0.9 1e+0 -> -1 Inexact Rounded +ddqua033 quantize -0.9 1e-1 -> -0.9 +ddqua034 quantize -0.9 1e-2 -> -0.90 +ddqua035 quantize -0.9 1e-3 -> -0.900 +ddqua036 quantize -0.5 1e+2 -> -0E+2 Inexact Rounded +ddqua037 quantize -0.5 1e+1 -> -0E+1 Inexact Rounded +ddqua038 quantize -0.5 1e+0 -> -0 Inexact Rounded +ddqua039 quantize -0.5 1e-1 -> -0.5 +ddqua040 quantize -0.5 1e-2 -> -0.50 +ddqua041 quantize -0.5 1e-3 -> -0.500 +ddqua042 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded +ddqua043 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded +ddqua044 quantize -0.9 1e+0 -> -1 Inexact Rounded +ddqua045 quantize -0.9 1e-1 -> -0.9 +ddqua046 quantize -0.9 1e-2 -> -0.90 +ddqua047 quantize -0.9 1e-3 -> -0.900 + +-- examples from Specification +ddqua060 quantize 2.17 0.001 -> 2.170 +ddqua061 quantize 2.17 0.01 -> 2.17 +ddqua062 quantize 2.17 0.1 -> 2.2 Inexact Rounded +ddqua063 quantize 2.17 1e+0 -> 2 Inexact Rounded +ddqua064 quantize 2.17 1e+1 -> 0E+1 Inexact Rounded +ddqua065 quantize -Inf Inf -> -Infinity +ddqua066 quantize 2 Inf -> NaN Invalid_operation +ddqua067 quantize -0.1 1 -> -0 Inexact Rounded +ddqua068 quantize -0 1e+5 -> -0E+5 +ddqua069 quantize +123456789012345.6 1e-2 -> NaN Invalid_operation +ddqua070 quantize -987654335236450.6 1e-2 -> NaN Invalid_operation +ddqua071 quantize 217 1e-1 -> 217.0 +ddqua072 quantize 217 1e+0 -> 217 +ddqua073 quantize 217 1e+1 -> 2.2E+2 Inexact Rounded +ddqua074 quantize 217 1e+2 -> 2E+2 Inexact Rounded + +-- general tests .. +ddqua089 quantize 12 1e+4 -> 0E+4 Inexact Rounded +ddqua090 quantize 12 1e+3 -> 0E+3 Inexact Rounded +ddqua091 quantize 12 1e+2 -> 0E+2 Inexact Rounded +ddqua092 quantize 12 1e+1 -> 1E+1 Inexact Rounded +ddqua093 quantize 1.2345 1e-2 -> 1.23 Inexact Rounded +ddqua094 quantize 1.2355 1e-2 -> 1.24 Inexact Rounded +ddqua095 quantize 1.2345 1e-6 -> 1.234500 +ddqua096 quantize 9.9999 1e-2 -> 10.00 Inexact Rounded +ddqua097 quantize 0.0001 1e-2 -> 0.00 Inexact Rounded +ddqua098 quantize 0.001 1e-2 -> 0.00 Inexact Rounded +ddqua099 quantize 0.009 1e-2 -> 0.01 Inexact Rounded +ddqua100 quantize 92 1e+2 -> 1E+2 Inexact Rounded + +ddqua101 quantize -1 1e0 -> -1 +ddqua102 quantize -1 1e-1 -> -1.0 +ddqua103 quantize -1 1e-2 -> -1.00 +ddqua104 quantize 0 1e0 -> 0 +ddqua105 quantize 0 1e-1 -> 0.0 +ddqua106 quantize 0 1e-2 -> 0.00 +ddqua107 quantize 0.00 1e0 -> 0 +ddqua108 quantize 0 1e+1 -> 0E+1 +ddqua109 quantize 0 1e+2 -> 0E+2 +ddqua110 quantize +1 1e0 -> 1 +ddqua111 quantize +1 1e-1 -> 1.0 +ddqua112 quantize +1 1e-2 -> 1.00 + +ddqua120 quantize 1.04 1e-3 -> 1.040 +ddqua121 quantize 1.04 1e-2 -> 1.04 +ddqua122 quantize 1.04 1e-1 -> 1.0 Inexact Rounded +ddqua123 quantize 1.04 1e0 -> 1 Inexact Rounded +ddqua124 quantize 1.05 1e-3 -> 1.050 +ddqua125 quantize 1.05 1e-2 -> 1.05 +ddqua126 quantize 1.05 1e-1 -> 1.0 Inexact Rounded +ddqua131 quantize 1.05 1e0 -> 1 Inexact Rounded +ddqua132 quantize 1.06 1e-3 -> 1.060 +ddqua133 quantize 1.06 1e-2 -> 1.06 +ddqua134 quantize 1.06 1e-1 -> 1.1 Inexact Rounded +ddqua135 quantize 1.06 1e0 -> 1 Inexact Rounded + +ddqua140 quantize -10 1e-2 -> -10.00 +ddqua141 quantize +1 1e-2 -> 1.00 +ddqua142 quantize +10 1e-2 -> 10.00 +ddqua143 quantize 1E+17 1e-2 -> NaN Invalid_operation +ddqua144 quantize 1E-17 1e-2 -> 0.00 Inexact Rounded +ddqua145 quantize 1E-3 1e-2 -> 0.00 Inexact Rounded +ddqua146 quantize 1E-2 1e-2 -> 0.01 +ddqua147 quantize 1E-1 1e-2 -> 0.10 +ddqua148 quantize 0E-17 1e-2 -> 0.00 + +ddqua150 quantize 1.0600 1e-5 -> 1.06000 +ddqua151 quantize 1.0600 1e-4 -> 1.0600 +ddqua152 quantize 1.0600 1e-3 -> 1.060 Rounded +ddqua153 quantize 1.0600 1e-2 -> 1.06 Rounded +ddqua154 quantize 1.0600 1e-1 -> 1.1 Inexact Rounded +ddqua155 quantize 1.0600 1e0 -> 1 Inexact Rounded + +-- a couple where rounding was different in base tests +rounding: half_up +ddqua157 quantize -0.5 1e+0 -> -1 Inexact Rounded +ddqua158 quantize 1.05 1e-1 -> 1.1 Inexact Rounded +ddqua159 quantize 1.06 1e0 -> 1 Inexact Rounded +rounding: half_even + +-- base tests with non-1 coefficients +ddqua161 quantize 0 -9e0 -> 0 +ddqua162 quantize 1 -7e0 -> 1 +ddqua163 quantize 0.1 -1e+2 -> 0E+2 Inexact Rounded +ddqua165 quantize 0.1 0e+1 -> 0E+1 Inexact Rounded +ddqua166 quantize 0.1 2e0 -> 0 Inexact Rounded +ddqua167 quantize 0.1 3e-1 -> 0.1 +ddqua168 quantize 0.1 44e-2 -> 0.10 +ddqua169 quantize 0.1 555e-3 -> 0.100 +ddqua170 quantize 0.9 6666e+2 -> 0E+2 Inexact Rounded +ddqua171 quantize 0.9 -777e+1 -> 0E+1 Inexact Rounded +ddqua172 quantize 0.9 -88e+0 -> 1 Inexact Rounded +ddqua173 quantize 0.9 -9e-1 -> 0.9 +ddqua174 quantize 0.9 0e-2 -> 0.90 +ddqua175 quantize 0.9 1.1e-3 -> 0.9000 +-- negatives +ddqua181 quantize -0 1.1e0 -> -0.0 +ddqua182 quantize -1 -1e0 -> -1 +ddqua183 quantize -0.1 11e+2 -> -0E+2 Inexact Rounded +ddqua185 quantize -0.1 111e+1 -> -0E+1 Inexact Rounded +ddqua186 quantize -0.1 71e0 -> -0 Inexact Rounded +ddqua187 quantize -0.1 -91e-1 -> -0.1 +ddqua188 quantize -0.1 -.1e-2 -> -0.100 +ddqua189 quantize -0.1 -1e-3 -> -0.100 +ddqua190 quantize -0.9 0e+2 -> -0E+2 Inexact Rounded +ddqua191 quantize -0.9 -0e+1 -> -0E+1 Inexact Rounded +ddqua192 quantize -0.9 -10e+0 -> -1 Inexact Rounded +ddqua193 quantize -0.9 100e-1 -> -0.9 +ddqua194 quantize -0.9 999e-2 -> -0.90 + +-- +ve exponents .. +ddqua201 quantize -1 1e+0 -> -1 +ddqua202 quantize -1 1e+1 -> -0E+1 Inexact Rounded +ddqua203 quantize -1 1e+2 -> -0E+2 Inexact Rounded +ddqua204 quantize 0 1e+0 -> 0 +ddqua205 quantize 0 1e+1 -> 0E+1 +ddqua206 quantize 0 1e+2 -> 0E+2 +ddqua207 quantize +1 1e+0 -> 1 +ddqua208 quantize +1 1e+1 -> 0E+1 Inexact Rounded +ddqua209 quantize +1 1e+2 -> 0E+2 Inexact Rounded + +ddqua220 quantize 1.04 1e+3 -> 0E+3 Inexact Rounded +ddqua221 quantize 1.04 1e+2 -> 0E+2 Inexact Rounded +ddqua222 quantize 1.04 1e+1 -> 0E+1 Inexact Rounded +ddqua223 quantize 1.04 1e+0 -> 1 Inexact Rounded +ddqua224 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded +ddqua225 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded +ddqua226 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded +ddqua227 quantize 1.05 1e+0 -> 1 Inexact Rounded +ddqua228 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded +ddqua229 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded +ddqua230 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded +ddqua231 quantize 1.05 1e+0 -> 1 Inexact Rounded +ddqua232 quantize 1.06 1e+3 -> 0E+3 Inexact Rounded +ddqua233 quantize 1.06 1e+2 -> 0E+2 Inexact Rounded +ddqua234 quantize 1.06 1e+1 -> 0E+1 Inexact Rounded +ddqua235 quantize 1.06 1e+0 -> 1 Inexact Rounded + +ddqua240 quantize -10 1e+1 -> -1E+1 Rounded +ddqua241 quantize +1 1e+1 -> 0E+1 Inexact Rounded +ddqua242 quantize +10 1e+1 -> 1E+1 Rounded +ddqua243 quantize 1E+1 1e+1 -> 1E+1 -- underneath this is E+1 +ddqua244 quantize 1E+2 1e+1 -> 1.0E+2 -- underneath this is E+1 +ddqua245 quantize 1E+3 1e+1 -> 1.00E+3 -- underneath this is E+1 +ddqua246 quantize 1E+4 1e+1 -> 1.000E+4 -- underneath this is E+1 +ddqua247 quantize 1E+5 1e+1 -> 1.0000E+5 -- underneath this is E+1 +ddqua248 quantize 1E+6 1e+1 -> 1.00000E+6 -- underneath this is E+1 +ddqua249 quantize 1E+7 1e+1 -> 1.000000E+7 -- underneath this is E+1 +ddqua250 quantize 1E+8 1e+1 -> 1.0000000E+8 -- underneath this is E+1 +ddqua251 quantize 1E+9 1e+1 -> 1.00000000E+9 -- underneath this is E+1 +-- next one tries to add 9 zeros +ddqua252 quantize 1E+17 1e+1 -> NaN Invalid_operation +ddqua253 quantize 1E-17 1e+1 -> 0E+1 Inexact Rounded +ddqua254 quantize 1E-2 1e+1 -> 0E+1 Inexact Rounded +ddqua255 quantize 0E-17 1e+1 -> 0E+1 +ddqua256 quantize -0E-17 1e+1 -> -0E+1 +ddqua257 quantize -0E-1 1e+1 -> -0E+1 +ddqua258 quantize -0 1e+1 -> -0E+1 +ddqua259 quantize -0E+1 1e+1 -> -0E+1 + +ddqua260 quantize -10 1e+2 -> -0E+2 Inexact Rounded +ddqua261 quantize +1 1e+2 -> 0E+2 Inexact Rounded +ddqua262 quantize +10 1e+2 -> 0E+2 Inexact Rounded +ddqua263 quantize 1E+1 1e+2 -> 0E+2 Inexact Rounded +ddqua264 quantize 1E+2 1e+2 -> 1E+2 +ddqua265 quantize 1E+3 1e+2 -> 1.0E+3 +ddqua266 quantize 1E+4 1e+2 -> 1.00E+4 +ddqua267 quantize 1E+5 1e+2 -> 1.000E+5 +ddqua268 quantize 1E+6 1e+2 -> 1.0000E+6 +ddqua269 quantize 1E+7 1e+2 -> 1.00000E+7 +ddqua270 quantize 1E+8 1e+2 -> 1.000000E+8 +ddqua271 quantize 1E+9 1e+2 -> 1.0000000E+9 +ddqua272 quantize 1E+10 1e+2 -> 1.00000000E+10 +ddqua273 quantize 1E-10 1e+2 -> 0E+2 Inexact Rounded +ddqua274 quantize 1E-2 1e+2 -> 0E+2 Inexact Rounded +ddqua275 quantize 0E-10 1e+2 -> 0E+2 + +ddqua280 quantize -10 1e+3 -> -0E+3 Inexact Rounded +ddqua281 quantize +1 1e+3 -> 0E+3 Inexact Rounded +ddqua282 quantize +10 1e+3 -> 0E+3 Inexact Rounded +ddqua283 quantize 1E+1 1e+3 -> 0E+3 Inexact Rounded +ddqua284 quantize 1E+2 1e+3 -> 0E+3 Inexact Rounded +ddqua285 quantize 1E+3 1e+3 -> 1E+3 +ddqua286 quantize 1E+4 1e+3 -> 1.0E+4 +ddqua287 quantize 1E+5 1e+3 -> 1.00E+5 +ddqua288 quantize 1E+6 1e+3 -> 1.000E+6 +ddqua289 quantize 1E+7 1e+3 -> 1.0000E+7 +ddqua290 quantize 1E+8 1e+3 -> 1.00000E+8 +ddqua291 quantize 1E+9 1e+3 -> 1.000000E+9 +ddqua292 quantize 1E+10 1e+3 -> 1.0000000E+10 +ddqua293 quantize 1E-10 1e+3 -> 0E+3 Inexact Rounded +ddqua294 quantize 1E-2 1e+3 -> 0E+3 Inexact Rounded +ddqua295 quantize 0E-10 1e+3 -> 0E+3 + +-- round up from below [sign wrong in JIT compiler once] +ddqua300 quantize 0.0078 1e-5 -> 0.00780 +ddqua301 quantize 0.0078 1e-4 -> 0.0078 +ddqua302 quantize 0.0078 1e-3 -> 0.008 Inexact Rounded +ddqua303 quantize 0.0078 1e-2 -> 0.01 Inexact Rounded +ddqua304 quantize 0.0078 1e-1 -> 0.0 Inexact Rounded +ddqua305 quantize 0.0078 1e0 -> 0 Inexact Rounded +ddqua306 quantize 0.0078 1e+1 -> 0E+1 Inexact Rounded +ddqua307 quantize 0.0078 1e+2 -> 0E+2 Inexact Rounded + +ddqua310 quantize -0.0078 1e-5 -> -0.00780 +ddqua311 quantize -0.0078 1e-4 -> -0.0078 +ddqua312 quantize -0.0078 1e-3 -> -0.008 Inexact Rounded +ddqua313 quantize -0.0078 1e-2 -> -0.01 Inexact Rounded +ddqua314 quantize -0.0078 1e-1 -> -0.0 Inexact Rounded +ddqua315 quantize -0.0078 1e0 -> -0 Inexact Rounded +ddqua316 quantize -0.0078 1e+1 -> -0E+1 Inexact Rounded +ddqua317 quantize -0.0078 1e+2 -> -0E+2 Inexact Rounded + +ddqua320 quantize 0.078 1e-5 -> 0.07800 +ddqua321 quantize 0.078 1e-4 -> 0.0780 +ddqua322 quantize 0.078 1e-3 -> 0.078 +ddqua323 quantize 0.078 1e-2 -> 0.08 Inexact Rounded +ddqua324 quantize 0.078 1e-1 -> 0.1 Inexact Rounded +ddqua325 quantize 0.078 1e0 -> 0 Inexact Rounded +ddqua326 quantize 0.078 1e+1 -> 0E+1 Inexact Rounded +ddqua327 quantize 0.078 1e+2 -> 0E+2 Inexact Rounded + +ddqua330 quantize -0.078 1e-5 -> -0.07800 +ddqua331 quantize -0.078 1e-4 -> -0.0780 +ddqua332 quantize -0.078 1e-3 -> -0.078 +ddqua333 quantize -0.078 1e-2 -> -0.08 Inexact Rounded +ddqua334 quantize -0.078 1e-1 -> -0.1 Inexact Rounded +ddqua335 quantize -0.078 1e0 -> -0 Inexact Rounded +ddqua336 quantize -0.078 1e+1 -> -0E+1 Inexact Rounded +ddqua337 quantize -0.078 1e+2 -> -0E+2 Inexact Rounded + +ddqua340 quantize 0.78 1e-5 -> 0.78000 +ddqua341 quantize 0.78 1e-4 -> 0.7800 +ddqua342 quantize 0.78 1e-3 -> 0.780 +ddqua343 quantize 0.78 1e-2 -> 0.78 +ddqua344 quantize 0.78 1e-1 -> 0.8 Inexact Rounded +ddqua345 quantize 0.78 1e0 -> 1 Inexact Rounded +ddqua346 quantize 0.78 1e+1 -> 0E+1 Inexact Rounded +ddqua347 quantize 0.78 1e+2 -> 0E+2 Inexact Rounded + +ddqua350 quantize -0.78 1e-5 -> -0.78000 +ddqua351 quantize -0.78 1e-4 -> -0.7800 +ddqua352 quantize -0.78 1e-3 -> -0.780 +ddqua353 quantize -0.78 1e-2 -> -0.78 +ddqua354 quantize -0.78 1e-1 -> -0.8 Inexact Rounded +ddqua355 quantize -0.78 1e0 -> -1 Inexact Rounded +ddqua356 quantize -0.78 1e+1 -> -0E+1 Inexact Rounded +ddqua357 quantize -0.78 1e+2 -> -0E+2 Inexact Rounded + +ddqua360 quantize 7.8 1e-5 -> 7.80000 +ddqua361 quantize 7.8 1e-4 -> 7.8000 +ddqua362 quantize 7.8 1e-3 -> 7.800 +ddqua363 quantize 7.8 1e-2 -> 7.80 +ddqua364 quantize 7.8 1e-1 -> 7.8 +ddqua365 quantize 7.8 1e0 -> 8 Inexact Rounded +ddqua366 quantize 7.8 1e+1 -> 1E+1 Inexact Rounded +ddqua367 quantize 7.8 1e+2 -> 0E+2 Inexact Rounded +ddqua368 quantize 7.8 1e+3 -> 0E+3 Inexact Rounded + +ddqua370 quantize -7.8 1e-5 -> -7.80000 +ddqua371 quantize -7.8 1e-4 -> -7.8000 +ddqua372 quantize -7.8 1e-3 -> -7.800 +ddqua373 quantize -7.8 1e-2 -> -7.80 +ddqua374 quantize -7.8 1e-1 -> -7.8 +ddqua375 quantize -7.8 1e0 -> -8 Inexact Rounded +ddqua376 quantize -7.8 1e+1 -> -1E+1 Inexact Rounded +ddqua377 quantize -7.8 1e+2 -> -0E+2 Inexact Rounded +ddqua378 quantize -7.8 1e+3 -> -0E+3 Inexact Rounded + +-- some individuals +ddqua380 quantize 1234567352364.506 1e-2 -> 1234567352364.51 Inexact Rounded +ddqua381 quantize 12345673523645.06 1e-2 -> 12345673523645.06 +ddqua382 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation +ddqua383 quantize 1234567352364506 1e-2 -> NaN Invalid_operation +ddqua384 quantize -1234567352364.506 1e-2 -> -1234567352364.51 Inexact Rounded +ddqua385 quantize -12345673523645.06 1e-2 -> -12345673523645.06 +ddqua386 quantize -123456735236450.6 1e-2 -> NaN Invalid_operation +ddqua387 quantize -1234567352364506 1e-2 -> NaN Invalid_operation + +rounding: down +ddqua389 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation +-- ? should that one instead have been: +-- ddqua389 quantize 123456735236450.6 1e-2 -> NaN Invalid_operation +rounding: half_up + +-- and a few more from e-mail discussions +ddqua391 quantize 12345678912.34567 1e-3 -> 12345678912.346 Inexact Rounded +ddqua392 quantize 123456789123.4567 1e-3 -> 123456789123.457 Inexact Rounded +ddqua393 quantize 1234567891234.567 1e-3 -> 1234567891234.567 +ddqua394 quantize 12345678912345.67 1e-3 -> NaN Invalid_operation +ddqua395 quantize 123456789123456.7 1e-3 -> NaN Invalid_operation +ddqua396 quantize 1234567891234567. 1e-3 -> NaN Invalid_operation + +-- some 9999 round-up cases +ddqua400 quantize 9.999 1e-5 -> 9.99900 +ddqua401 quantize 9.999 1e-4 -> 9.9990 +ddqua402 quantize 9.999 1e-3 -> 9.999 +ddqua403 quantize 9.999 1e-2 -> 10.00 Inexact Rounded +ddqua404 quantize 9.999 1e-1 -> 10.0 Inexact Rounded +ddqua405 quantize 9.999 1e0 -> 10 Inexact Rounded +ddqua406 quantize 9.999 1e1 -> 1E+1 Inexact Rounded +ddqua407 quantize 9.999 1e2 -> 0E+2 Inexact Rounded + +ddqua410 quantize 0.999 1e-5 -> 0.99900 +ddqua411 quantize 0.999 1e-4 -> 0.9990 +ddqua412 quantize 0.999 1e-3 -> 0.999 +ddqua413 quantize 0.999 1e-2 -> 1.00 Inexact Rounded +ddqua414 quantize 0.999 1e-1 -> 1.0 Inexact Rounded +ddqua415 quantize 0.999 1e0 -> 1 Inexact Rounded +ddqua416 quantize 0.999 1e1 -> 0E+1 Inexact Rounded + +ddqua420 quantize 0.0999 1e-5 -> 0.09990 +ddqua421 quantize 0.0999 1e-4 -> 0.0999 +ddqua422 quantize 0.0999 1e-3 -> 0.100 Inexact Rounded +ddqua423 quantize 0.0999 1e-2 -> 0.10 Inexact Rounded +ddqua424 quantize 0.0999 1e-1 -> 0.1 Inexact Rounded +ddqua425 quantize 0.0999 1e0 -> 0 Inexact Rounded +ddqua426 quantize 0.0999 1e1 -> 0E+1 Inexact Rounded + +ddqua430 quantize 0.00999 1e-5 -> 0.00999 +ddqua431 quantize 0.00999 1e-4 -> 0.0100 Inexact Rounded +ddqua432 quantize 0.00999 1e-3 -> 0.010 Inexact Rounded +ddqua433 quantize 0.00999 1e-2 -> 0.01 Inexact Rounded +ddqua434 quantize 0.00999 1e-1 -> 0.0 Inexact Rounded +ddqua435 quantize 0.00999 1e0 -> 0 Inexact Rounded +ddqua436 quantize 0.00999 1e1 -> 0E+1 Inexact Rounded + +ddqua440 quantize 0.000999 1e-5 -> 0.00100 Inexact Rounded +ddqua441 quantize 0.000999 1e-4 -> 0.0010 Inexact Rounded +ddqua442 quantize 0.000999 1e-3 -> 0.001 Inexact Rounded +ddqua443 quantize 0.000999 1e-2 -> 0.00 Inexact Rounded +ddqua444 quantize 0.000999 1e-1 -> 0.0 Inexact Rounded +ddqua445 quantize 0.000999 1e0 -> 0 Inexact Rounded +ddqua446 quantize 0.000999 1e1 -> 0E+1 Inexact Rounded + +ddqua1001 quantize 0.000 0.001 -> 0.000 +ddqua1002 quantize 0.001 0.001 -> 0.001 +ddqua1003 quantize 0.0012 0.001 -> 0.001 Inexact Rounded +ddqua1004 quantize 0.0018 0.001 -> 0.002 Inexact Rounded +ddqua1005 quantize 0.501 0.001 -> 0.501 +ddqua1006 quantize 0.5012 0.001 -> 0.501 Inexact Rounded +ddqua1007 quantize 0.5018 0.001 -> 0.502 Inexact Rounded +ddqua1008 quantize 0.999 0.001 -> 0.999 + +ddqua481 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded +ddqua482 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded +ddqua483 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded +ddqua484 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded +ddqua485 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded +ddqua486 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded +-- a potential double-round +ddqua487 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded +ddqua488 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded + +ddqua491 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded +ddqua492 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded +ddqua493 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded +ddqua494 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded +ddqua495 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded +ddqua496 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded +ddqua497 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded +ddqua498 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded + +-- Zeros +ddqua500 quantize 0 1e1 -> 0E+1 +ddqua501 quantize 0 1e0 -> 0 +ddqua502 quantize 0 1e-1 -> 0.0 +ddqua503 quantize 0.0 1e-1 -> 0.0 +ddqua504 quantize 0.0 1e0 -> 0 +ddqua505 quantize 0.0 1e+1 -> 0E+1 +ddqua506 quantize 0E+1 1e-1 -> 0.0 +ddqua507 quantize 0E+1 1e0 -> 0 +ddqua508 quantize 0E+1 1e+1 -> 0E+1 +ddqua509 quantize -0 1e1 -> -0E+1 +ddqua510 quantize -0 1e0 -> -0 +ddqua511 quantize -0 1e-1 -> -0.0 +ddqua512 quantize -0.0 1e-1 -> -0.0 +ddqua513 quantize -0.0 1e0 -> -0 +ddqua514 quantize -0.0 1e+1 -> -0E+1 +ddqua515 quantize -0E+1 1e-1 -> -0.0 +ddqua516 quantize -0E+1 1e0 -> -0 +ddqua517 quantize -0E+1 1e+1 -> -0E+1 + +-- Suspicious RHS values +ddqua520 quantize 1.234 1e359 -> 0E+359 Inexact Rounded +ddqua521 quantize 123.456 1e359 -> 0E+359 Inexact Rounded +ddqua522 quantize 1.234 1e359 -> 0E+359 Inexact Rounded +ddqua523 quantize 123.456 1e359 -> 0E+359 Inexact Rounded +-- next four are "won't fit" overflow +ddqua526 quantize 1.234 1e-299 -> NaN Invalid_operation +ddqua527 quantize 123.456 1e-299 -> NaN Invalid_operation +ddqua528 quantize 1.234 1e-299 -> NaN Invalid_operation +ddqua529 quantize 123.456 1e-299 -> NaN Invalid_operation + +ddqua532 quantize 1.234E+299 1e299 -> 1E+299 Inexact Rounded +ddqua533 quantize 1.234E+298 1e299 -> 0E+299 Inexact Rounded +ddqua534 quantize 1.234 1e299 -> 0E+299 Inexact Rounded +ddqua537 quantize 0 1e-299 -> 0E-299 +-- next two are "won't fit" overflows +ddqua538 quantize 1.234 1e-299 -> NaN Invalid_operation +ddqua539 quantize 1.234 1e-300 -> NaN Invalid_operation +-- [more below] + +-- Specials +ddqua580 quantize Inf -Inf -> Infinity +ddqua581 quantize Inf 1e-299 -> NaN Invalid_operation +ddqua582 quantize Inf 1e-1 -> NaN Invalid_operation +ddqua583 quantize Inf 1e0 -> NaN Invalid_operation +ddqua584 quantize Inf 1e1 -> NaN Invalid_operation +ddqua585 quantize Inf 1e299 -> NaN Invalid_operation +ddqua586 quantize Inf Inf -> Infinity +ddqua587 quantize -1000 Inf -> NaN Invalid_operation +ddqua588 quantize -Inf Inf -> -Infinity +ddqua589 quantize -1 Inf -> NaN Invalid_operation +ddqua590 quantize 0 Inf -> NaN Invalid_operation +ddqua591 quantize 1 Inf -> NaN Invalid_operation +ddqua592 quantize 1000 Inf -> NaN Invalid_operation +ddqua593 quantize Inf Inf -> Infinity +ddqua594 quantize Inf 1e-0 -> NaN Invalid_operation +ddqua595 quantize -0 Inf -> NaN Invalid_operation + +ddqua600 quantize -Inf -Inf -> -Infinity +ddqua601 quantize -Inf 1e-299 -> NaN Invalid_operation +ddqua602 quantize -Inf 1e-1 -> NaN Invalid_operation +ddqua603 quantize -Inf 1e0 -> NaN Invalid_operation +ddqua604 quantize -Inf 1e1 -> NaN Invalid_operation +ddqua605 quantize -Inf 1e299 -> NaN Invalid_operation +ddqua606 quantize -Inf Inf -> -Infinity +ddqua607 quantize -1000 Inf -> NaN Invalid_operation +ddqua608 quantize -Inf -Inf -> -Infinity +ddqua609 quantize -1 -Inf -> NaN Invalid_operation +ddqua610 quantize 0 -Inf -> NaN Invalid_operation +ddqua611 quantize 1 -Inf -> NaN Invalid_operation +ddqua612 quantize 1000 -Inf -> NaN Invalid_operation +ddqua613 quantize Inf -Inf -> Infinity +ddqua614 quantize -Inf 1e-0 -> NaN Invalid_operation +ddqua615 quantize -0 -Inf -> NaN Invalid_operation + +ddqua621 quantize NaN -Inf -> NaN +ddqua622 quantize NaN 1e-299 -> NaN +ddqua623 quantize NaN 1e-1 -> NaN +ddqua624 quantize NaN 1e0 -> NaN +ddqua625 quantize NaN 1e1 -> NaN +ddqua626 quantize NaN 1e299 -> NaN +ddqua627 quantize NaN Inf -> NaN +ddqua628 quantize NaN NaN -> NaN +ddqua629 quantize -Inf NaN -> NaN +ddqua630 quantize -1000 NaN -> NaN +ddqua631 quantize -1 NaN -> NaN +ddqua632 quantize 0 NaN -> NaN +ddqua633 quantize 1 NaN -> NaN +ddqua634 quantize 1000 NaN -> NaN +ddqua635 quantize Inf NaN -> NaN +ddqua636 quantize NaN 1e-0 -> NaN +ddqua637 quantize -0 NaN -> NaN + +ddqua641 quantize sNaN -Inf -> NaN Invalid_operation +ddqua642 quantize sNaN 1e-299 -> NaN Invalid_operation +ddqua643 quantize sNaN 1e-1 -> NaN Invalid_operation +ddqua644 quantize sNaN 1e0 -> NaN Invalid_operation +ddqua645 quantize sNaN 1e1 -> NaN Invalid_operation +ddqua646 quantize sNaN 1e299 -> NaN Invalid_operation +ddqua647 quantize sNaN NaN -> NaN Invalid_operation +ddqua648 quantize sNaN sNaN -> NaN Invalid_operation +ddqua649 quantize NaN sNaN -> NaN Invalid_operation +ddqua650 quantize -Inf sNaN -> NaN Invalid_operation +ddqua651 quantize -1000 sNaN -> NaN Invalid_operation +ddqua652 quantize -1 sNaN -> NaN Invalid_operation +ddqua653 quantize 0 sNaN -> NaN Invalid_operation +ddqua654 quantize 1 sNaN -> NaN Invalid_operation +ddqua655 quantize 1000 sNaN -> NaN Invalid_operation +ddqua656 quantize Inf sNaN -> NaN Invalid_operation +ddqua657 quantize NaN sNaN -> NaN Invalid_operation +ddqua658 quantize sNaN 1e-0 -> NaN Invalid_operation +ddqua659 quantize -0 sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddqua661 quantize NaN9 -Inf -> NaN9 +ddqua662 quantize NaN8 919 -> NaN8 +ddqua663 quantize NaN71 Inf -> NaN71 +ddqua664 quantize NaN6 NaN5 -> NaN6 +ddqua665 quantize -Inf NaN4 -> NaN4 +ddqua666 quantize -919 NaN31 -> NaN31 +ddqua667 quantize Inf NaN2 -> NaN2 + +ddqua671 quantize sNaN99 -Inf -> NaN99 Invalid_operation +ddqua672 quantize sNaN98 -11 -> NaN98 Invalid_operation +ddqua673 quantize sNaN97 NaN -> NaN97 Invalid_operation +ddqua674 quantize sNaN16 sNaN94 -> NaN16 Invalid_operation +ddqua675 quantize NaN95 sNaN93 -> NaN93 Invalid_operation +ddqua676 quantize -Inf sNaN92 -> NaN92 Invalid_operation +ddqua677 quantize 088 sNaN91 -> NaN91 Invalid_operation +ddqua678 quantize Inf sNaN90 -> NaN90 Invalid_operation +ddqua679 quantize NaN sNaN88 -> NaN88 Invalid_operation + +ddqua681 quantize -NaN9 -Inf -> -NaN9 +ddqua682 quantize -NaN8 919 -> -NaN8 +ddqua683 quantize -NaN71 Inf -> -NaN71 +ddqua684 quantize -NaN6 -NaN5 -> -NaN6 +ddqua685 quantize -Inf -NaN4 -> -NaN4 +ddqua686 quantize -919 -NaN31 -> -NaN31 +ddqua687 quantize Inf -NaN2 -> -NaN2 + +ddqua691 quantize -sNaN99 -Inf -> -NaN99 Invalid_operation +ddqua692 quantize -sNaN98 -11 -> -NaN98 Invalid_operation +ddqua693 quantize -sNaN97 NaN -> -NaN97 Invalid_operation +ddqua694 quantize -sNaN16 sNaN94 -> -NaN16 Invalid_operation +ddqua695 quantize -NaN95 -sNaN93 -> -NaN93 Invalid_operation +ddqua696 quantize -Inf -sNaN92 -> -NaN92 Invalid_operation +ddqua697 quantize 088 -sNaN91 -> -NaN91 Invalid_operation +ddqua698 quantize Inf -sNaN90 -> -NaN90 Invalid_operation +ddqua699 quantize NaN -sNaN88 -> -NaN88 Invalid_operation + +-- subnormals and underflow +ddqua710 quantize 1.00E-383 1e-383 -> 1E-383 Rounded +ddqua711 quantize 0.1E-383 2e-384 -> 1E-384 Subnormal +ddqua712 quantize 0.10E-383 3e-384 -> 1E-384 Subnormal Rounded +ddqua713 quantize 0.100E-383 4e-384 -> 1E-384 Subnormal Rounded +ddqua714 quantize 0.01E-383 5e-385 -> 1E-385 Subnormal +-- next is rounded to Emin +ddqua715 quantize 0.999E-383 1e-383 -> 1E-383 Inexact Rounded +ddqua716 quantize 0.099E-383 10e-384 -> 1E-384 Inexact Rounded Subnormal + +ddqua717 quantize 0.009E-383 1e-385 -> 1E-385 Inexact Rounded Subnormal +ddqua718 quantize 0.001E-383 1e-385 -> 0E-385 Inexact Rounded +ddqua719 quantize 0.0009E-383 1e-385 -> 0E-385 Inexact Rounded +ddqua720 quantize 0.0001E-383 1e-385 -> 0E-385 Inexact Rounded + +ddqua730 quantize -1.00E-383 1e-383 -> -1E-383 Rounded +ddqua731 quantize -0.1E-383 1e-383 -> -0E-383 Rounded Inexact +ddqua732 quantize -0.10E-383 1e-383 -> -0E-383 Rounded Inexact +ddqua733 quantize -0.100E-383 1e-383 -> -0E-383 Rounded Inexact +ddqua734 quantize -0.01E-383 1e-383 -> -0E-383 Inexact Rounded +-- next is rounded to Emin +ddqua735 quantize -0.999E-383 90e-383 -> -1E-383 Inexact Rounded +ddqua736 quantize -0.099E-383 -1e-383 -> -0E-383 Inexact Rounded +ddqua737 quantize -0.009E-383 -1e-383 -> -0E-383 Inexact Rounded +ddqua738 quantize -0.001E-383 -0e-383 -> -0E-383 Inexact Rounded +ddqua739 quantize -0.0001E-383 0e-383 -> -0E-383 Inexact Rounded + +ddqua740 quantize -1.00E-383 1e-384 -> -1.0E-383 Rounded +ddqua741 quantize -0.1E-383 1e-384 -> -1E-384 Subnormal +ddqua742 quantize -0.10E-383 1e-384 -> -1E-384 Subnormal Rounded +ddqua743 quantize -0.100E-383 1e-384 -> -1E-384 Subnormal Rounded +ddqua744 quantize -0.01E-383 1e-384 -> -0E-384 Inexact Rounded +-- next is rounded to Emin +ddqua745 quantize -0.999E-383 1e-384 -> -1.0E-383 Inexact Rounded +ddqua746 quantize -0.099E-383 1e-384 -> -1E-384 Inexact Rounded Subnormal +ddqua747 quantize -0.009E-383 1e-384 -> -0E-384 Inexact Rounded +ddqua748 quantize -0.001E-383 1e-384 -> -0E-384 Inexact Rounded +ddqua749 quantize -0.0001E-383 1e-384 -> -0E-384 Inexact Rounded + +ddqua750 quantize -1.00E-383 1e-385 -> -1.00E-383 +ddqua751 quantize -0.1E-383 1e-385 -> -1.0E-384 Subnormal +ddqua752 quantize -0.10E-383 1e-385 -> -1.0E-384 Subnormal +ddqua753 quantize -0.100E-383 1e-385 -> -1.0E-384 Subnormal Rounded +ddqua754 quantize -0.01E-383 1e-385 -> -1E-385 Subnormal +-- next is rounded to Emin +ddqua755 quantize -0.999E-383 1e-385 -> -1.00E-383 Inexact Rounded +ddqua756 quantize -0.099E-383 1e-385 -> -1.0E-384 Inexact Rounded Subnormal +ddqua757 quantize -0.009E-383 1e-385 -> -1E-385 Inexact Rounded Subnormal +ddqua758 quantize -0.001E-383 1e-385 -> -0E-385 Inexact Rounded +ddqua759 quantize -0.0001E-383 1e-385 -> -0E-385 Inexact Rounded + +ddqua760 quantize -1.00E-383 1e-386 -> -1.000E-383 +ddqua761 quantize -0.1E-383 1e-386 -> -1.00E-384 Subnormal +ddqua762 quantize -0.10E-383 1e-386 -> -1.00E-384 Subnormal +ddqua763 quantize -0.100E-383 1e-386 -> -1.00E-384 Subnormal +ddqua764 quantize -0.01E-383 1e-386 -> -1.0E-385 Subnormal +ddqua765 quantize -0.999E-383 1e-386 -> -9.99E-384 Subnormal +ddqua766 quantize -0.099E-383 1e-386 -> -9.9E-385 Subnormal +ddqua767 quantize -0.009E-383 1e-386 -> -9E-386 Subnormal +ddqua768 quantize -0.001E-383 1e-386 -> -1E-386 Subnormal +ddqua769 quantize -0.0001E-383 1e-386 -> -0E-386 Inexact Rounded + +-- More from Fung Lee +ddqua1021 quantize 8.666666666666000E+384 1.000000000000000E+384 -> 8.666666666666000E+384 +ddqua1022 quantize -8.666666666666000E+384 1.000000000000000E+384 -> -8.666666666666000E+384 +ddqua1027 quantize 8.666666666666000E+323 1E+31 -> NaN Invalid_operation +ddqua1029 quantize 8.66666666E+3 1E+3 -> 9E+3 Inexact Rounded + + +--ddqua1030 quantize 8.666666666666000E+384 1E+384 -> 9.000000000000000E+384 Rounded Inexact +--ddqua1031 quantize 8.666666666666000E+384 1E+384 -> 8.666666666666000E+384 Rounded +--ddqua1032 quantize 8.666666666666000E+384 1E+383 -> 8.666666666666000E+384 Rounded +--ddqua1033 quantize 8.666666666666000E+384 1E+382 -> 8.666666666666000E+384 Rounded +--ddqua1034 quantize 8.666666666666000E+384 1E+381 -> 8.666666666666000E+384 Rounded +--ddqua1035 quantize 8.666666666666000E+384 1E+380 -> 8.666666666666000E+384 Rounded + +-- Int and uInt32 edge values for testing conversions +ddqua1040 quantize -2147483646 0 -> -2147483646 +ddqua1041 quantize -2147483647 0 -> -2147483647 +ddqua1042 quantize -2147483648 0 -> -2147483648 +ddqua1043 quantize -2147483649 0 -> -2147483649 +ddqua1044 quantize 2147483646 0 -> 2147483646 +ddqua1045 quantize 2147483647 0 -> 2147483647 +ddqua1046 quantize 2147483648 0 -> 2147483648 +ddqua1047 quantize 2147483649 0 -> 2147483649 +ddqua1048 quantize 4294967294 0 -> 4294967294 +ddqua1049 quantize 4294967295 0 -> 4294967295 +ddqua1050 quantize 4294967296 0 -> 4294967296 +ddqua1051 quantize 4294967297 0 -> 4294967297 + +-- Rounding swathe +rounding: half_even +ddqua1100 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1101 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1102 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1103 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +ddqua1104 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1105 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua1106 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1107 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1108 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1109 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: half_up +ddqua1200 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1201 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1202 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1203 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +ddqua1204 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1205 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +ddqua1206 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1207 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1208 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1209 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: half_down +ddqua1300 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1301 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1302 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1303 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +ddqua1304 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1305 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua1306 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1307 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1308 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1309 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: up +ddqua1400 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1401 quantize 1.2301 1.00 -> 1.24 Inexact Rounded +ddqua1402 quantize 1.2310 1.00 -> 1.24 Inexact Rounded +ddqua1403 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +ddqua1404 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1405 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +ddqua1406 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1407 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1408 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1409 quantize 1.2399 1.00 -> 1.24 Inexact Rounded +ddqua1411 quantize -1.2399 1.00 -> -1.24 Inexact Rounded + +rounding: down +ddqua1500 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1501 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1502 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1503 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +ddqua1504 quantize 1.2351 1.00 -> 1.23 Inexact Rounded +ddqua1505 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua1506 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +ddqua1507 quantize 1.2360 1.00 -> 1.23 Inexact Rounded +ddqua1508 quantize 1.2370 1.00 -> 1.23 Inexact Rounded +ddqua1509 quantize 1.2399 1.00 -> 1.23 Inexact Rounded +ddqua1511 quantize -1.2399 1.00 -> -1.23 Inexact Rounded + +rounding: ceiling +ddqua1600 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1601 quantize 1.2301 1.00 -> 1.24 Inexact Rounded +ddqua1602 quantize 1.2310 1.00 -> 1.24 Inexact Rounded +ddqua1603 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +ddqua1604 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +ddqua1605 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +ddqua1606 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +ddqua1607 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +ddqua1608 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +ddqua1609 quantize 1.2399 1.00 -> 1.24 Inexact Rounded +ddqua1611 quantize -1.2399 1.00 -> -1.23 Inexact Rounded + +rounding: floor +ddqua1700 quantize 1.2300 1.00 -> 1.23 Rounded +ddqua1701 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +ddqua1702 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +ddqua1703 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +ddqua1704 quantize 1.2351 1.00 -> 1.23 Inexact Rounded +ddqua1705 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua1706 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +ddqua1707 quantize 1.2360 1.00 -> 1.23 Inexact Rounded +ddqua1708 quantize 1.2370 1.00 -> 1.23 Inexact Rounded +ddqua1709 quantize 1.2399 1.00 -> 1.23 Inexact Rounded +ddqua1711 quantize -1.2399 1.00 -> -1.24 Inexact Rounded + +rounding: 05up +ddqua1800 quantize 1.2000 1.00 -> 1.20 Rounded +ddqua1801 quantize 1.2001 1.00 -> 1.21 Inexact Rounded +ddqua1802 quantize 1.2010 1.00 -> 1.21 Inexact Rounded +ddqua1803 quantize 1.2050 1.00 -> 1.21 Inexact Rounded +ddqua1804 quantize 1.2051 1.00 -> 1.21 Inexact Rounded +ddqua1807 quantize 1.2060 1.00 -> 1.21 Inexact Rounded +ddqua1808 quantize 1.2070 1.00 -> 1.21 Inexact Rounded +ddqua1809 quantize 1.2099 1.00 -> 1.21 Inexact Rounded +ddqua1811 quantize -1.2099 1.00 -> -1.21 Inexact Rounded + +ddqua1900 quantize 1.2100 1.00 -> 1.21 Rounded +ddqua1901 quantize 1.2101 1.00 -> 1.21 Inexact Rounded +ddqua1902 quantize 1.2110 1.00 -> 1.21 Inexact Rounded +ddqua1903 quantize 1.2150 1.00 -> 1.21 Inexact Rounded +ddqua1904 quantize 1.2151 1.00 -> 1.21 Inexact Rounded +ddqua1907 quantize 1.2160 1.00 -> 1.21 Inexact Rounded +ddqua1908 quantize 1.2170 1.00 -> 1.21 Inexact Rounded +ddqua1909 quantize 1.2199 1.00 -> 1.21 Inexact Rounded +ddqua1911 quantize -1.2199 1.00 -> -1.21 Inexact Rounded + +ddqua2000 quantize 1.2400 1.00 -> 1.24 Rounded +ddqua2001 quantize 1.2401 1.00 -> 1.24 Inexact Rounded +ddqua2002 quantize 1.2410 1.00 -> 1.24 Inexact Rounded +ddqua2003 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +ddqua2004 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +ddqua2007 quantize 1.2460 1.00 -> 1.24 Inexact Rounded +ddqua2008 quantize 1.2470 1.00 -> 1.24 Inexact Rounded +ddqua2009 quantize 1.2499 1.00 -> 1.24 Inexact Rounded +ddqua2011 quantize -1.2499 1.00 -> -1.24 Inexact Rounded + +ddqua2100 quantize 1.2500 1.00 -> 1.25 Rounded +ddqua2101 quantize 1.2501 1.00 -> 1.26 Inexact Rounded +ddqua2102 quantize 1.2510 1.00 -> 1.26 Inexact Rounded +ddqua2103 quantize 1.2550 1.00 -> 1.26 Inexact Rounded +ddqua2104 quantize 1.2551 1.00 -> 1.26 Inexact Rounded +ddqua2107 quantize 1.2560 1.00 -> 1.26 Inexact Rounded +ddqua2108 quantize 1.2570 1.00 -> 1.26 Inexact Rounded +ddqua2109 quantize 1.2599 1.00 -> 1.26 Inexact Rounded +ddqua2111 quantize -1.2599 1.00 -> -1.26 Inexact Rounded + +ddqua2200 quantize 1.2600 1.00 -> 1.26 Rounded +ddqua2201 quantize 1.2601 1.00 -> 1.26 Inexact Rounded +ddqua2202 quantize 1.2610 1.00 -> 1.26 Inexact Rounded +ddqua2203 quantize 1.2650 1.00 -> 1.26 Inexact Rounded +ddqua2204 quantize 1.2651 1.00 -> 1.26 Inexact Rounded +ddqua2207 quantize 1.2660 1.00 -> 1.26 Inexact Rounded +ddqua2208 quantize 1.2670 1.00 -> 1.26 Inexact Rounded +ddqua2209 quantize 1.2699 1.00 -> 1.26 Inexact Rounded +ddqua2211 quantize -1.2699 1.00 -> -1.26 Inexact Rounded + +ddqua2300 quantize 1.2900 1.00 -> 1.29 Rounded +ddqua2301 quantize 1.2901 1.00 -> 1.29 Inexact Rounded +ddqua2302 quantize 1.2910 1.00 -> 1.29 Inexact Rounded +ddqua2303 quantize 1.2950 1.00 -> 1.29 Inexact Rounded +ddqua2304 quantize 1.2951 1.00 -> 1.29 Inexact Rounded +ddqua2307 quantize 1.2960 1.00 -> 1.29 Inexact Rounded +ddqua2308 quantize 1.2970 1.00 -> 1.29 Inexact Rounded +ddqua2309 quantize 1.2999 1.00 -> 1.29 Inexact Rounded +ddqua2311 quantize -1.2999 1.00 -> -1.29 Inexact Rounded + +-- Null tests +rounding: half_even +ddqua998 quantize 10 # -> NaN Invalid_operation +ddqua999 quantize # 1e10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddReduce.decTest b/Lib/test/decimaltestdata/ddReduce.decTest index 9529e50a752..bdfd0604926 100644 --- a/Lib/test/decimaltestdata/ddReduce.decTest +++ b/Lib/test/decimaltestdata/ddReduce.decTest @@ -1,182 +1,182 @@ ------------------------------------------------------------------------- --- ddReduce.decTest -- remove trailing zeros from a decDouble -- --- Copyright (c) IBM Corporation, 2003, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddred001 reduce '1' -> '1' -ddred002 reduce '-1' -> '-1' -ddred003 reduce '1.00' -> '1' -ddred004 reduce '-1.00' -> '-1' -ddred005 reduce '0' -> '0' -ddred006 reduce '0.00' -> '0' -ddred007 reduce '00.0' -> '0' -ddred008 reduce '00.00' -> '0' -ddred009 reduce '00' -> '0' -ddred010 reduce '0E+1' -> '0' -ddred011 reduce '0E+5' -> '0' - -ddred012 reduce '-2' -> '-2' -ddred013 reduce '2' -> '2' -ddred014 reduce '-2.00' -> '-2' -ddred015 reduce '2.00' -> '2' -ddred016 reduce '-0' -> '-0' -ddred017 reduce '-0.00' -> '-0' -ddred018 reduce '-00.0' -> '-0' -ddred019 reduce '-00.00' -> '-0' -ddred020 reduce '-00' -> '-0' -ddred021 reduce '-0E+5' -> '-0' -ddred022 reduce '-0E+1' -> '-0' - -ddred030 reduce '+0.1' -> '0.1' -ddred031 reduce '-0.1' -> '-0.1' -ddred032 reduce '+0.01' -> '0.01' -ddred033 reduce '-0.01' -> '-0.01' -ddred034 reduce '+0.001' -> '0.001' -ddred035 reduce '-0.001' -> '-0.001' -ddred036 reduce '+0.000001' -> '0.000001' -ddred037 reduce '-0.000001' -> '-0.000001' -ddred038 reduce '+0.000000000001' -> '1E-12' -ddred039 reduce '-0.000000000001' -> '-1E-12' - -ddred041 reduce 1.1 -> 1.1 -ddred042 reduce 1.10 -> 1.1 -ddred043 reduce 1.100 -> 1.1 -ddred044 reduce 1.110 -> 1.11 -ddred045 reduce -1.1 -> -1.1 -ddred046 reduce -1.10 -> -1.1 -ddred047 reduce -1.100 -> -1.1 -ddred048 reduce -1.110 -> -1.11 -ddred049 reduce 9.9 -> 9.9 -ddred050 reduce 9.90 -> 9.9 -ddred051 reduce 9.900 -> 9.9 -ddred052 reduce 9.990 -> 9.99 -ddred053 reduce -9.9 -> -9.9 -ddred054 reduce -9.90 -> -9.9 -ddred055 reduce -9.900 -> -9.9 -ddred056 reduce -9.990 -> -9.99 - --- some trailing fractional zeros with zeros in units -ddred060 reduce 10.0 -> 1E+1 -ddred061 reduce 10.00 -> 1E+1 -ddred062 reduce 100.0 -> 1E+2 -ddred063 reduce 100.00 -> 1E+2 -ddred064 reduce 1.1000E+3 -> 1.1E+3 -ddred065 reduce 1.10000E+3 -> 1.1E+3 -ddred066 reduce -10.0 -> -1E+1 -ddred067 reduce -10.00 -> -1E+1 -ddred068 reduce -100.0 -> -1E+2 -ddred069 reduce -100.00 -> -1E+2 -ddred070 reduce -1.1000E+3 -> -1.1E+3 -ddred071 reduce -1.10000E+3 -> -1.1E+3 - --- some insignificant trailing zeros with positive exponent -ddred080 reduce 10E+1 -> 1E+2 -ddred081 reduce 100E+1 -> 1E+3 -ddred082 reduce 1.0E+2 -> 1E+2 -ddred083 reduce 1.0E+3 -> 1E+3 -ddred084 reduce 1.1E+3 -> 1.1E+3 -ddred085 reduce 1.00E+3 -> 1E+3 -ddred086 reduce 1.10E+3 -> 1.1E+3 -ddred087 reduce -10E+1 -> -1E+2 -ddred088 reduce -100E+1 -> -1E+3 -ddred089 reduce -1.0E+2 -> -1E+2 -ddred090 reduce -1.0E+3 -> -1E+3 -ddred091 reduce -1.1E+3 -> -1.1E+3 -ddred092 reduce -1.00E+3 -> -1E+3 -ddred093 reduce -1.10E+3 -> -1.1E+3 - --- some significant trailing zeros, were we to be trimming -ddred100 reduce 11 -> 11 -ddred101 reduce 10 -> 1E+1 -ddred102 reduce 10. -> 1E+1 -ddred103 reduce 1.1E+1 -> 11 -ddred104 reduce 1.0E+1 -> 1E+1 -ddred105 reduce 1.10E+2 -> 1.1E+2 -ddred106 reduce 1.00E+2 -> 1E+2 -ddred107 reduce 1.100E+3 -> 1.1E+3 -ddred108 reduce 1.000E+3 -> 1E+3 -ddred109 reduce 1.000000E+6 -> 1E+6 -ddred110 reduce -11 -> -11 -ddred111 reduce -10 -> -1E+1 -ddred112 reduce -10. -> -1E+1 -ddred113 reduce -1.1E+1 -> -11 -ddred114 reduce -1.0E+1 -> -1E+1 -ddred115 reduce -1.10E+2 -> -1.1E+2 -ddred116 reduce -1.00E+2 -> -1E+2 -ddred117 reduce -1.100E+3 -> -1.1E+3 -ddred118 reduce -1.000E+3 -> -1E+3 -ddred119 reduce -1.00000E+5 -> -1E+5 -ddred120 reduce -1.000000E+6 -> -1E+6 -ddred121 reduce -10.00000E+6 -> -1E+7 -ddred122 reduce -100.0000E+6 -> -1E+8 -ddred123 reduce -1000.000E+6 -> -1E+9 -ddred124 reduce -10000.00E+6 -> -1E+10 -ddred125 reduce -100000.0E+6 -> -1E+11 -ddred126 reduce -1000000.E+6 -> -1E+12 - --- examples from decArith -ddred140 reduce '2.1' -> '2.1' -ddred141 reduce '-2.0' -> '-2' -ddred142 reduce '1.200' -> '1.2' -ddred143 reduce '-120' -> '-1.2E+2' -ddred144 reduce '120.00' -> '1.2E+2' -ddred145 reduce '0.00' -> '0' - --- Nmax, Nmin, Ntiny --- note origami effect on some of these -ddred151 reduce 9.999999999999999E+384 -> 9.999999999999999E+384 -ddred152 reduce 9.999999000000000E+380 -> 9.99999900000E+380 -ddred153 reduce 9.999999999990000E+384 -> 9.999999999990000E+384 -ddred154 reduce 1E-383 -> 1E-383 -ddred155 reduce 1.000000000000000E-383 -> 1E-383 -ddred156 reduce 2.000E-395 -> 2E-395 Subnormal -ddred157 reduce 1E-398 -> 1E-398 Subnormal - -ddred161 reduce -1E-398 -> -1E-398 Subnormal -ddred162 reduce -2.000E-395 -> -2E-395 Subnormal -ddred163 reduce -1.000000000000000E-383 -> -1E-383 -ddred164 reduce -1E-383 -> -1E-383 -ddred165 reduce -9.999999000000000E+380 -> -9.99999900000E+380 -ddred166 reduce -9.999999999990000E+384 -> -9.999999999990000E+384 -ddred167 reduce -9.999999999999990E+384 -> -9.999999999999990E+384 -ddred168 reduce -9.999999999999999E+384 -> -9.999999999999999E+384 -ddred169 reduce -9.999999999999990E+384 -> -9.999999999999990E+384 - - --- specials (reduce does not affect payload) -ddred820 reduce 'Inf' -> 'Infinity' -ddred821 reduce '-Inf' -> '-Infinity' -ddred822 reduce NaN -> NaN -ddred823 reduce sNaN -> NaN Invalid_operation -ddred824 reduce NaN101 -> NaN101 -ddred825 reduce sNaN010 -> NaN10 Invalid_operation -ddred827 reduce -NaN -> -NaN -ddred828 reduce -sNaN -> -NaN Invalid_operation -ddred829 reduce -NaN101 -> -NaN101 -ddred830 reduce -sNaN010 -> -NaN10 Invalid_operation - --- Null test -ddred900 reduce # -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddReduce.decTest -- remove trailing zeros from a decDouble -- +-- Copyright (c) IBM Corporation, 2003, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddred001 reduce '1' -> '1' +ddred002 reduce '-1' -> '-1' +ddred003 reduce '1.00' -> '1' +ddred004 reduce '-1.00' -> '-1' +ddred005 reduce '0' -> '0' +ddred006 reduce '0.00' -> '0' +ddred007 reduce '00.0' -> '0' +ddred008 reduce '00.00' -> '0' +ddred009 reduce '00' -> '0' +ddred010 reduce '0E+1' -> '0' +ddred011 reduce '0E+5' -> '0' + +ddred012 reduce '-2' -> '-2' +ddred013 reduce '2' -> '2' +ddred014 reduce '-2.00' -> '-2' +ddred015 reduce '2.00' -> '2' +ddred016 reduce '-0' -> '-0' +ddred017 reduce '-0.00' -> '-0' +ddred018 reduce '-00.0' -> '-0' +ddred019 reduce '-00.00' -> '-0' +ddred020 reduce '-00' -> '-0' +ddred021 reduce '-0E+5' -> '-0' +ddred022 reduce '-0E+1' -> '-0' + +ddred030 reduce '+0.1' -> '0.1' +ddred031 reduce '-0.1' -> '-0.1' +ddred032 reduce '+0.01' -> '0.01' +ddred033 reduce '-0.01' -> '-0.01' +ddred034 reduce '+0.001' -> '0.001' +ddred035 reduce '-0.001' -> '-0.001' +ddred036 reduce '+0.000001' -> '0.000001' +ddred037 reduce '-0.000001' -> '-0.000001' +ddred038 reduce '+0.000000000001' -> '1E-12' +ddred039 reduce '-0.000000000001' -> '-1E-12' + +ddred041 reduce 1.1 -> 1.1 +ddred042 reduce 1.10 -> 1.1 +ddred043 reduce 1.100 -> 1.1 +ddred044 reduce 1.110 -> 1.11 +ddred045 reduce -1.1 -> -1.1 +ddred046 reduce -1.10 -> -1.1 +ddred047 reduce -1.100 -> -1.1 +ddred048 reduce -1.110 -> -1.11 +ddred049 reduce 9.9 -> 9.9 +ddred050 reduce 9.90 -> 9.9 +ddred051 reduce 9.900 -> 9.9 +ddred052 reduce 9.990 -> 9.99 +ddred053 reduce -9.9 -> -9.9 +ddred054 reduce -9.90 -> -9.9 +ddred055 reduce -9.900 -> -9.9 +ddred056 reduce -9.990 -> -9.99 + +-- some trailing fractional zeros with zeros in units +ddred060 reduce 10.0 -> 1E+1 +ddred061 reduce 10.00 -> 1E+1 +ddred062 reduce 100.0 -> 1E+2 +ddred063 reduce 100.00 -> 1E+2 +ddred064 reduce 1.1000E+3 -> 1.1E+3 +ddred065 reduce 1.10000E+3 -> 1.1E+3 +ddred066 reduce -10.0 -> -1E+1 +ddred067 reduce -10.00 -> -1E+1 +ddred068 reduce -100.0 -> -1E+2 +ddred069 reduce -100.00 -> -1E+2 +ddred070 reduce -1.1000E+3 -> -1.1E+3 +ddred071 reduce -1.10000E+3 -> -1.1E+3 + +-- some insignificant trailing zeros with positive exponent +ddred080 reduce 10E+1 -> 1E+2 +ddred081 reduce 100E+1 -> 1E+3 +ddred082 reduce 1.0E+2 -> 1E+2 +ddred083 reduce 1.0E+3 -> 1E+3 +ddred084 reduce 1.1E+3 -> 1.1E+3 +ddred085 reduce 1.00E+3 -> 1E+3 +ddred086 reduce 1.10E+3 -> 1.1E+3 +ddred087 reduce -10E+1 -> -1E+2 +ddred088 reduce -100E+1 -> -1E+3 +ddred089 reduce -1.0E+2 -> -1E+2 +ddred090 reduce -1.0E+3 -> -1E+3 +ddred091 reduce -1.1E+3 -> -1.1E+3 +ddred092 reduce -1.00E+3 -> -1E+3 +ddred093 reduce -1.10E+3 -> -1.1E+3 + +-- some significant trailing zeros, were we to be trimming +ddred100 reduce 11 -> 11 +ddred101 reduce 10 -> 1E+1 +ddred102 reduce 10. -> 1E+1 +ddred103 reduce 1.1E+1 -> 11 +ddred104 reduce 1.0E+1 -> 1E+1 +ddred105 reduce 1.10E+2 -> 1.1E+2 +ddred106 reduce 1.00E+2 -> 1E+2 +ddred107 reduce 1.100E+3 -> 1.1E+3 +ddred108 reduce 1.000E+3 -> 1E+3 +ddred109 reduce 1.000000E+6 -> 1E+6 +ddred110 reduce -11 -> -11 +ddred111 reduce -10 -> -1E+1 +ddred112 reduce -10. -> -1E+1 +ddred113 reduce -1.1E+1 -> -11 +ddred114 reduce -1.0E+1 -> -1E+1 +ddred115 reduce -1.10E+2 -> -1.1E+2 +ddred116 reduce -1.00E+2 -> -1E+2 +ddred117 reduce -1.100E+3 -> -1.1E+3 +ddred118 reduce -1.000E+3 -> -1E+3 +ddred119 reduce -1.00000E+5 -> -1E+5 +ddred120 reduce -1.000000E+6 -> -1E+6 +ddred121 reduce -10.00000E+6 -> -1E+7 +ddred122 reduce -100.0000E+6 -> -1E+8 +ddred123 reduce -1000.000E+6 -> -1E+9 +ddred124 reduce -10000.00E+6 -> -1E+10 +ddred125 reduce -100000.0E+6 -> -1E+11 +ddred126 reduce -1000000.E+6 -> -1E+12 + +-- examples from decArith +ddred140 reduce '2.1' -> '2.1' +ddred141 reduce '-2.0' -> '-2' +ddred142 reduce '1.200' -> '1.2' +ddred143 reduce '-120' -> '-1.2E+2' +ddred144 reduce '120.00' -> '1.2E+2' +ddred145 reduce '0.00' -> '0' + +-- Nmax, Nmin, Ntiny +-- note origami effect on some of these +ddred151 reduce 9.999999999999999E+384 -> 9.999999999999999E+384 +ddred152 reduce 9.999999000000000E+380 -> 9.99999900000E+380 +ddred153 reduce 9.999999999990000E+384 -> 9.999999999990000E+384 +ddred154 reduce 1E-383 -> 1E-383 +ddred155 reduce 1.000000000000000E-383 -> 1E-383 +ddred156 reduce 2.000E-395 -> 2E-395 Subnormal +ddred157 reduce 1E-398 -> 1E-398 Subnormal + +ddred161 reduce -1E-398 -> -1E-398 Subnormal +ddred162 reduce -2.000E-395 -> -2E-395 Subnormal +ddred163 reduce -1.000000000000000E-383 -> -1E-383 +ddred164 reduce -1E-383 -> -1E-383 +ddred165 reduce -9.999999000000000E+380 -> -9.99999900000E+380 +ddred166 reduce -9.999999999990000E+384 -> -9.999999999990000E+384 +ddred167 reduce -9.999999999999990E+384 -> -9.999999999999990E+384 +ddred168 reduce -9.999999999999999E+384 -> -9.999999999999999E+384 +ddred169 reduce -9.999999999999990E+384 -> -9.999999999999990E+384 + + +-- specials (reduce does not affect payload) +ddred820 reduce 'Inf' -> 'Infinity' +ddred821 reduce '-Inf' -> '-Infinity' +ddred822 reduce NaN -> NaN +ddred823 reduce sNaN -> NaN Invalid_operation +ddred824 reduce NaN101 -> NaN101 +ddred825 reduce sNaN010 -> NaN10 Invalid_operation +ddred827 reduce -NaN -> -NaN +ddred828 reduce -sNaN -> -NaN Invalid_operation +ddred829 reduce -NaN101 -> -NaN101 +ddred830 reduce -sNaN010 -> -NaN10 Invalid_operation + +-- Null test +ddred900 reduce # -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddRemainder.decTest b/Lib/test/decimaltestdata/ddRemainder.decTest index c16773761d0..b1866d39a28 100644 --- a/Lib/test/decimaltestdata/ddRemainder.decTest +++ b/Lib/test/decimaltestdata/ddRemainder.decTest @@ -1,600 +1,600 @@ ------------------------------------------------------------------------- --- ddRemainder.decTest -- decDouble remainder -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks (as base, above) -ddrem001 remainder 1 1 -> 0 -ddrem002 remainder 2 1 -> 0 -ddrem003 remainder 1 2 -> 1 -ddrem004 remainder 2 2 -> 0 -ddrem005 remainder 0 1 -> 0 -ddrem006 remainder 0 2 -> 0 -ddrem007 remainder 1 3 -> 1 -ddrem008 remainder 2 3 -> 2 -ddrem009 remainder 3 3 -> 0 - -ddrem010 remainder 2.4 1 -> 0.4 -ddrem011 remainder 2.4 -1 -> 0.4 -ddrem012 remainder -2.4 1 -> -0.4 -ddrem013 remainder -2.4 -1 -> -0.4 -ddrem014 remainder 2.40 1 -> 0.40 -ddrem015 remainder 2.400 1 -> 0.400 -ddrem016 remainder 2.4 2 -> 0.4 -ddrem017 remainder 2.400 2 -> 0.400 -ddrem018 remainder 2. 2 -> 0 -ddrem019 remainder 20 20 -> 0 - -ddrem020 remainder 187 187 -> 0 -ddrem021 remainder 5 2 -> 1 -ddrem022 remainder 5 2.0 -> 1.0 -ddrem023 remainder 5 2.000 -> 1.000 -ddrem024 remainder 5 0.200 -> 0.000 -ddrem025 remainder 5 0.200 -> 0.000 - -ddrem030 remainder 1 2 -> 1 -ddrem031 remainder 1 4 -> 1 -ddrem032 remainder 1 8 -> 1 - -ddrem033 remainder 1 16 -> 1 -ddrem034 remainder 1 32 -> 1 -ddrem035 remainder 1 64 -> 1 -ddrem040 remainder 1 -2 -> 1 -ddrem041 remainder 1 -4 -> 1 -ddrem042 remainder 1 -8 -> 1 -ddrem043 remainder 1 -16 -> 1 -ddrem044 remainder 1 -32 -> 1 -ddrem045 remainder 1 -64 -> 1 -ddrem050 remainder -1 2 -> -1 -ddrem051 remainder -1 4 -> -1 -ddrem052 remainder -1 8 -> -1 -ddrem053 remainder -1 16 -> -1 -ddrem054 remainder -1 32 -> -1 -ddrem055 remainder -1 64 -> -1 -ddrem060 remainder -1 -2 -> -1 -ddrem061 remainder -1 -4 -> -1 -ddrem062 remainder -1 -8 -> -1 -ddrem063 remainder -1 -16 -> -1 -ddrem064 remainder -1 -32 -> -1 -ddrem065 remainder -1 -64 -> -1 - -ddrem066 remainder 999999999 1 -> 0 -ddrem067 remainder 999999999.4 1 -> 0.4 -ddrem068 remainder 999999999.5 1 -> 0.5 -ddrem069 remainder 999999999.9 1 -> 0.9 -ddrem070 remainder 999999999.999 1 -> 0.999 -ddrem071 remainder 999999.999999 1 -> 0.999999 -ddrem072 remainder 9 1 -> 0 -ddrem073 remainder 9999999999999999 1 -> 0 -ddrem074 remainder 9999999999999999 2 -> 1 -ddrem075 remainder 9999999999999999 3 -> 0 -ddrem076 remainder 9999999999999999 4 -> 3 - -ddrem080 remainder 0. 1 -> 0 -ddrem081 remainder .0 1 -> 0.0 -ddrem082 remainder 0.00 1 -> 0.00 -ddrem083 remainder 0.00E+9 1 -> 0 -ddrem084 remainder 0.00E+3 1 -> 0 -ddrem085 remainder 0.00E+2 1 -> 0 -ddrem086 remainder 0.00E+1 1 -> 0.0 -ddrem087 remainder 0.00E+0 1 -> 0.00 -ddrem088 remainder 0.00E-0 1 -> 0.00 -ddrem089 remainder 0.00E-1 1 -> 0.000 -ddrem090 remainder 0.00E-2 1 -> 0.0000 -ddrem091 remainder 0.00E-3 1 -> 0.00000 -ddrem092 remainder 0.00E-4 1 -> 0.000000 -ddrem093 remainder 0.00E-5 1 -> 0E-7 -ddrem094 remainder 0.00E-6 1 -> 0E-8 -ddrem095 remainder 0.0000E-50 1 -> 0E-54 - --- Various flavours of remainder by 0 -ddrem101 remainder 0 0 -> NaN Division_undefined -ddrem102 remainder 0 -0 -> NaN Division_undefined -ddrem103 remainder -0 0 -> NaN Division_undefined -ddrem104 remainder -0 -0 -> NaN Division_undefined -ddrem105 remainder 0.0E5 0 -> NaN Division_undefined -ddrem106 remainder 0.000 0 -> NaN Division_undefined --- [Some think this next group should be Division_by_zero exception, but --- IEEE 854 is explicit that it is Invalid operation .. for --- remainder-near, anyway] -ddrem107 remainder 0.0001 0 -> NaN Invalid_operation -ddrem108 remainder 0.01 0 -> NaN Invalid_operation -ddrem109 remainder 0.1 0 -> NaN Invalid_operation -ddrem110 remainder 1 0 -> NaN Invalid_operation -ddrem111 remainder 1 0.0 -> NaN Invalid_operation -ddrem112 remainder 10 0.0 -> NaN Invalid_operation -ddrem113 remainder 1E+100 0.0 -> NaN Invalid_operation -ddrem114 remainder 1E+380 0 -> NaN Invalid_operation -ddrem115 remainder 0.0001 -0 -> NaN Invalid_operation -ddrem116 remainder 0.01 -0 -> NaN Invalid_operation -ddrem119 remainder 0.1 -0 -> NaN Invalid_operation -ddrem120 remainder 1 -0 -> NaN Invalid_operation -ddrem121 remainder 1 -0.0 -> NaN Invalid_operation -ddrem122 remainder 10 -0.0 -> NaN Invalid_operation -ddrem123 remainder 1E+100 -0.0 -> NaN Invalid_operation -ddrem124 remainder 1E+384 -0 -> NaN Invalid_operation --- and zeros on left -ddrem130 remainder 0 1 -> 0 -ddrem131 remainder 0 -1 -> 0 -ddrem132 remainder 0.0 1 -> 0.0 -ddrem133 remainder 0.0 -1 -> 0.0 -ddrem134 remainder -0 1 -> -0 -ddrem135 remainder -0 -1 -> -0 -ddrem136 remainder -0.0 1 -> -0.0 -ddrem137 remainder -0.0 -1 -> -0.0 - --- 0.5ers -ddrem143 remainder 0.5 2 -> 0.5 -ddrem144 remainder 0.5 2.1 -> 0.5 -ddrem145 remainder 0.5 2.01 -> 0.50 -ddrem146 remainder 0.5 2.001 -> 0.500 -ddrem147 remainder 0.50 2 -> 0.50 -ddrem148 remainder 0.50 2.01 -> 0.50 -ddrem149 remainder 0.50 2.001 -> 0.500 - --- steadies -ddrem150 remainder 1 1 -> 0 -ddrem151 remainder 1 2 -> 1 -ddrem152 remainder 1 3 -> 1 -ddrem153 remainder 1 4 -> 1 -ddrem154 remainder 1 5 -> 1 -ddrem155 remainder 1 6 -> 1 -ddrem156 remainder 1 7 -> 1 -ddrem157 remainder 1 8 -> 1 -ddrem158 remainder 1 9 -> 1 -ddrem159 remainder 1 10 -> 1 -ddrem160 remainder 1 1 -> 0 -ddrem161 remainder 2 1 -> 0 -ddrem162 remainder 3 1 -> 0 -ddrem163 remainder 4 1 -> 0 -ddrem164 remainder 5 1 -> 0 -ddrem165 remainder 6 1 -> 0 -ddrem166 remainder 7 1 -> 0 -ddrem167 remainder 8 1 -> 0 -ddrem168 remainder 9 1 -> 0 -ddrem169 remainder 10 1 -> 0 - --- some differences from remainderNear -ddrem171 remainder 0.4 1.020 -> 0.400 -ddrem172 remainder 0.50 1.020 -> 0.500 -ddrem173 remainder 0.51 1.020 -> 0.510 -ddrem174 remainder 0.52 1.020 -> 0.520 -ddrem175 remainder 0.6 1.020 -> 0.600 - --- More flavours of remainder by 0 -ddrem201 remainder 0 0 -> NaN Division_undefined -ddrem202 remainder 0.0E5 0 -> NaN Division_undefined -ddrem203 remainder 0.000 0 -> NaN Division_undefined -ddrem204 remainder 0.0001 0 -> NaN Invalid_operation -ddrem205 remainder 0.01 0 -> NaN Invalid_operation -ddrem206 remainder 0.1 0 -> NaN Invalid_operation -ddrem207 remainder 1 0 -> NaN Invalid_operation -ddrem208 remainder 1 0.0 -> NaN Invalid_operation -ddrem209 remainder 10 0.0 -> NaN Invalid_operation -ddrem210 remainder 1E+100 0.0 -> NaN Invalid_operation -ddrem211 remainder 1E+380 0 -> NaN Invalid_operation - --- some differences from remainderNear -ddrem231 remainder -0.4 1.020 -> -0.400 -ddrem232 remainder -0.50 1.020 -> -0.500 -ddrem233 remainder -0.51 1.020 -> -0.510 -ddrem234 remainder -0.52 1.020 -> -0.520 -ddrem235 remainder -0.6 1.020 -> -0.600 - --- high Xs -ddrem240 remainder 1E+2 1.00 -> 0.00 - --- ddrem3xx are from DiagBigDecimal -ddrem301 remainder 1 3 -> 1 -ddrem302 remainder 5 5 -> 0 -ddrem303 remainder 13 10 -> 3 -ddrem304 remainder 13 50 -> 13 -ddrem305 remainder 13 100 -> 13 -ddrem306 remainder 13 1000 -> 13 -ddrem307 remainder .13 1 -> 0.13 -ddrem308 remainder 0.133 1 -> 0.133 -ddrem309 remainder 0.1033 1 -> 0.1033 -ddrem310 remainder 1.033 1 -> 0.033 -ddrem311 remainder 10.33 1 -> 0.33 -ddrem312 remainder 10.33 10 -> 0.33 -ddrem313 remainder 103.3 1 -> 0.3 -ddrem314 remainder 133 10 -> 3 -ddrem315 remainder 1033 10 -> 3 -ddrem316 remainder 1033 50 -> 33 -ddrem317 remainder 101.0 3 -> 2.0 -ddrem318 remainder 102.0 3 -> 0.0 -ddrem319 remainder 103.0 3 -> 1.0 -ddrem320 remainder 2.40 1 -> 0.40 -ddrem321 remainder 2.400 1 -> 0.400 -ddrem322 remainder 2.4 1 -> 0.4 -ddrem323 remainder 2.4 2 -> 0.4 -ddrem324 remainder 2.400 2 -> 0.400 -ddrem325 remainder 1 0.3 -> 0.1 -ddrem326 remainder 1 0.30 -> 0.10 -ddrem327 remainder 1 0.300 -> 0.100 -ddrem328 remainder 1 0.3000 -> 0.1000 -ddrem329 remainder 1.0 0.3 -> 0.1 -ddrem330 remainder 1.00 0.3 -> 0.10 -ddrem331 remainder 1.000 0.3 -> 0.100 -ddrem332 remainder 1.0000 0.3 -> 0.1000 -ddrem333 remainder 0.5 2 -> 0.5 -ddrem334 remainder 0.5 2.1 -> 0.5 -ddrem335 remainder 0.5 2.01 -> 0.50 -ddrem336 remainder 0.5 2.001 -> 0.500 -ddrem337 remainder 0.50 2 -> 0.50 -ddrem338 remainder 0.50 2.01 -> 0.50 -ddrem339 remainder 0.50 2.001 -> 0.500 - -ddrem340 remainder 0.5 0.5000001 -> 0.5000000 -ddrem341 remainder 0.5 0.50000001 -> 0.50000000 -ddrem342 remainder 0.5 0.500000001 -> 0.500000000 -ddrem343 remainder 0.5 0.5000000001 -> 0.5000000000 -ddrem344 remainder 0.5 0.50000000001 -> 0.50000000000 -ddrem345 remainder 0.5 0.4999999 -> 1E-7 -ddrem346 remainder 0.5 0.49999999 -> 1E-8 -ddrem347 remainder 0.5 0.499999999 -> 1E-9 -ddrem348 remainder 0.5 0.4999999999 -> 1E-10 -ddrem349 remainder 0.5 0.49999999999 -> 1E-11 -ddrem350 remainder 0.5 0.499999999999 -> 1E-12 - -ddrem351 remainder 0.03 7 -> 0.03 -ddrem352 remainder 5 2 -> 1 -ddrem353 remainder 4.1 2 -> 0.1 -ddrem354 remainder 4.01 2 -> 0.01 -ddrem355 remainder 4.001 2 -> 0.001 -ddrem356 remainder 4.0001 2 -> 0.0001 -ddrem357 remainder 4.00001 2 -> 0.00001 -ddrem358 remainder 4.000001 2 -> 0.000001 -ddrem359 remainder 4.0000001 2 -> 1E-7 - -ddrem360 remainder 1.2 0.7345 -> 0.4655 -ddrem361 remainder 0.8 12 -> 0.8 -ddrem362 remainder 0.8 0.2 -> 0.0 -ddrem363 remainder 0.8 0.3 -> 0.2 -ddrem364 remainder 0.800 12 -> 0.800 -ddrem365 remainder 0.800 1.7 -> 0.800 -ddrem366 remainder 2.400 2 -> 0.400 - -ddrem371 remainder 2.400 2 -> 0.400 - -ddrem381 remainder 12345 1 -> 0 -ddrem382 remainder 12345 1.0001 -> 0.7657 -ddrem383 remainder 12345 1.001 -> 0.668 -ddrem384 remainder 12345 1.01 -> 0.78 -ddrem385 remainder 12345 1.1 -> 0.8 -ddrem386 remainder 12355 4 -> 3 -ddrem387 remainder 12345 4 -> 1 -ddrem388 remainder 12355 4.0001 -> 2.6912 -ddrem389 remainder 12345 4.0001 -> 0.6914 -ddrem390 remainder 12345 4.9 -> 1.9 -ddrem391 remainder 12345 4.99 -> 4.73 -ddrem392 remainder 12345 4.999 -> 2.469 -ddrem393 remainder 12345 4.9999 -> 0.2469 -ddrem394 remainder 12345 5 -> 0 -ddrem395 remainder 12345 5.0001 -> 4.7532 -ddrem396 remainder 12345 5.001 -> 2.532 -ddrem397 remainder 12345 5.01 -> 0.36 -ddrem398 remainder 12345 5.1 -> 3.0 - --- the nasty division-by-1 cases -ddrem401 remainder 0.5 1 -> 0.5 -ddrem402 remainder 0.55 1 -> 0.55 -ddrem403 remainder 0.555 1 -> 0.555 -ddrem404 remainder 0.5555 1 -> 0.5555 -ddrem405 remainder 0.55555 1 -> 0.55555 -ddrem406 remainder 0.555555 1 -> 0.555555 -ddrem407 remainder 0.5555555 1 -> 0.5555555 -ddrem408 remainder 0.55555555 1 -> 0.55555555 -ddrem409 remainder 0.555555555 1 -> 0.555555555 - --- folddowns -ddrem421 remainder 1E+384 1 -> NaN Division_impossible -ddrem422 remainder 1E+384 1E+383 -> 0E+369 Clamped -ddrem423 remainder 1E+384 2E+383 -> 0E+369 Clamped -ddrem424 remainder 1E+384 3E+383 -> 1.00000000000000E+383 Clamped -ddrem425 remainder 1E+384 4E+383 -> 2.00000000000000E+383 Clamped -ddrem426 remainder 1E+384 5E+383 -> 0E+369 Clamped -ddrem427 remainder 1E+384 6E+383 -> 4.00000000000000E+383 Clamped -ddrem428 remainder 1E+384 7E+383 -> 3.00000000000000E+383 Clamped -ddrem429 remainder 1E+384 8E+383 -> 2.00000000000000E+383 Clamped -ddrem430 remainder 1E+384 9E+383 -> 1.00000000000000E+383 Clamped --- tinies -ddrem431 remainder 1E-397 1E-398 -> 0E-398 -ddrem432 remainder 1E-397 2E-398 -> 0E-398 -ddrem433 remainder 1E-397 3E-398 -> 1E-398 Subnormal -ddrem434 remainder 1E-397 4E-398 -> 2E-398 Subnormal -ddrem435 remainder 1E-397 5E-398 -> 0E-398 -ddrem436 remainder 1E-397 6E-398 -> 4E-398 Subnormal -ddrem437 remainder 1E-397 7E-398 -> 3E-398 Subnormal -ddrem438 remainder 1E-397 8E-398 -> 2E-398 Subnormal -ddrem439 remainder 1E-397 9E-398 -> 1E-398 Subnormal -ddrem440 remainder 1E-397 10E-398 -> 0E-398 -ddrem441 remainder 1E-397 11E-398 -> 1.0E-397 Subnormal -ddrem442 remainder 100E-397 11E-398 -> 1.0E-397 Subnormal -ddrem443 remainder 100E-397 20E-398 -> 0E-398 -ddrem444 remainder 100E-397 21E-398 -> 1.3E-397 Subnormal -ddrem445 remainder 100E-397 30E-398 -> 1.0E-397 Subnormal - --- zero signs -ddrem650 remainder 1 1 -> 0 -ddrem651 remainder -1 1 -> -0 -ddrem652 remainder 1 -1 -> 0 -ddrem653 remainder -1 -1 -> -0 -ddrem654 remainder 0 1 -> 0 -ddrem655 remainder -0 1 -> -0 -ddrem656 remainder 0 -1 -> 0 -ddrem657 remainder -0 -1 -> -0 -ddrem658 remainder 0.00 1 -> 0.00 -ddrem659 remainder -0.00 1 -> -0.00 - --- Specials -ddrem680 remainder Inf -Inf -> NaN Invalid_operation -ddrem681 remainder Inf -1000 -> NaN Invalid_operation -ddrem682 remainder Inf -1 -> NaN Invalid_operation -ddrem683 remainder Inf 0 -> NaN Invalid_operation -ddrem684 remainder Inf -0 -> NaN Invalid_operation -ddrem685 remainder Inf 1 -> NaN Invalid_operation -ddrem686 remainder Inf 1000 -> NaN Invalid_operation -ddrem687 remainder Inf Inf -> NaN Invalid_operation -ddrem688 remainder -1000 Inf -> -1000 -ddrem689 remainder -Inf Inf -> NaN Invalid_operation -ddrem691 remainder -1 Inf -> -1 -ddrem692 remainder 0 Inf -> 0 -ddrem693 remainder -0 Inf -> -0 -ddrem694 remainder 1 Inf -> 1 -ddrem695 remainder 1000 Inf -> 1000 -ddrem696 remainder Inf Inf -> NaN Invalid_operation - -ddrem700 remainder -Inf -Inf -> NaN Invalid_operation -ddrem701 remainder -Inf -1000 -> NaN Invalid_operation -ddrem702 remainder -Inf -1 -> NaN Invalid_operation -ddrem703 remainder -Inf -0 -> NaN Invalid_operation -ddrem704 remainder -Inf 0 -> NaN Invalid_operation -ddrem705 remainder -Inf 1 -> NaN Invalid_operation -ddrem706 remainder -Inf 1000 -> NaN Invalid_operation -ddrem707 remainder -Inf Inf -> NaN Invalid_operation -ddrem708 remainder -Inf -Inf -> NaN Invalid_operation -ddrem709 remainder -1000 Inf -> -1000 -ddrem710 remainder -1 -Inf -> -1 -ddrem711 remainder -0 -Inf -> -0 -ddrem712 remainder 0 -Inf -> 0 -ddrem713 remainder 1 -Inf -> 1 -ddrem714 remainder 1000 -Inf -> 1000 -ddrem715 remainder Inf -Inf -> NaN Invalid_operation - -ddrem721 remainder NaN -Inf -> NaN -ddrem722 remainder NaN -1000 -> NaN -ddrem723 remainder NaN -1 -> NaN -ddrem724 remainder NaN -0 -> NaN -ddrem725 remainder -NaN 0 -> -NaN -ddrem726 remainder NaN 1 -> NaN -ddrem727 remainder NaN 1000 -> NaN -ddrem728 remainder NaN Inf -> NaN -ddrem729 remainder NaN -NaN -> NaN -ddrem730 remainder -Inf NaN -> NaN -ddrem731 remainder -1000 NaN -> NaN -ddrem732 remainder -1 NaN -> NaN -ddrem733 remainder -0 -NaN -> -NaN -ddrem734 remainder 0 NaN -> NaN -ddrem735 remainder 1 -NaN -> -NaN -ddrem736 remainder 1000 NaN -> NaN -ddrem737 remainder Inf NaN -> NaN - -ddrem741 remainder sNaN -Inf -> NaN Invalid_operation -ddrem742 remainder sNaN -1000 -> NaN Invalid_operation -ddrem743 remainder -sNaN -1 -> -NaN Invalid_operation -ddrem744 remainder sNaN -0 -> NaN Invalid_operation -ddrem745 remainder sNaN 0 -> NaN Invalid_operation -ddrem746 remainder sNaN 1 -> NaN Invalid_operation -ddrem747 remainder sNaN 1000 -> NaN Invalid_operation -ddrem749 remainder sNaN NaN -> NaN Invalid_operation -ddrem750 remainder sNaN sNaN -> NaN Invalid_operation -ddrem751 remainder NaN sNaN -> NaN Invalid_operation -ddrem752 remainder -Inf sNaN -> NaN Invalid_operation -ddrem753 remainder -1000 sNaN -> NaN Invalid_operation -ddrem754 remainder -1 sNaN -> NaN Invalid_operation -ddrem755 remainder -0 sNaN -> NaN Invalid_operation -ddrem756 remainder 0 sNaN -> NaN Invalid_operation -ddrem757 remainder 1 sNaN -> NaN Invalid_operation -ddrem758 remainder 1000 sNaN -> NaN Invalid_operation -ddrem759 remainder Inf -sNaN -> -NaN Invalid_operation - --- propagating NaNs -ddrem760 remainder NaN1 NaN7 -> NaN1 -ddrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation -ddrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation -ddrem763 remainder sNaN4 sNaN10 -> NaN4 Invalid_operation -ddrem764 remainder 15 NaN11 -> NaN11 -ddrem765 remainder NaN6 NaN12 -> NaN6 -ddrem766 remainder Inf NaN13 -> NaN13 -ddrem767 remainder NaN14 -Inf -> NaN14 -ddrem768 remainder 0 NaN15 -> NaN15 -ddrem769 remainder NaN16 -0 -> NaN16 - --- edge cases of impossible -ddrem770 remainder 1234567890123456 10 -> 6 -ddrem771 remainder 1234567890123456 1 -> 0 -ddrem772 remainder 1234567890123456 0.1 -> NaN Division_impossible -ddrem773 remainder 1234567890123456 0.01 -> NaN Division_impossible - --- long operand checks -ddrem801 remainder 12345678000 100 -> 0 -ddrem802 remainder 1 12345678000 -> 1 -ddrem803 remainder 1234567800 10 -> 0 -ddrem804 remainder 1 1234567800 -> 1 -ddrem805 remainder 1234567890 10 -> 0 -ddrem806 remainder 1 1234567890 -> 1 -ddrem807 remainder 1234567891 10 -> 1 -ddrem808 remainder 1 1234567891 -> 1 -ddrem809 remainder 12345678901 100 -> 1 -ddrem810 remainder 1 12345678901 -> 1 -ddrem811 remainder 1234567896 10 -> 6 -ddrem812 remainder 1 1234567896 -> 1 - -ddrem821 remainder 12345678000 100 -> 0 -ddrem822 remainder 1 12345678000 -> 1 -ddrem823 remainder 1234567800 10 -> 0 -ddrem824 remainder 1 1234567800 -> 1 -ddrem825 remainder 1234567890 10 -> 0 -ddrem826 remainder 1 1234567890 -> 1 -ddrem827 remainder 1234567891 10 -> 1 -ddrem828 remainder 1 1234567891 -> 1 -ddrem829 remainder 12345678901 100 -> 1 -ddrem830 remainder 1 12345678901 -> 1 -ddrem831 remainder 1234567896 10 -> 6 -ddrem832 remainder 1 1234567896 -> 1 - --- from divideint -ddrem840 remainder 100000000.0 1 -> 0.0 -ddrem841 remainder 100000000.4 1 -> 0.4 -ddrem842 remainder 100000000.5 1 -> 0.5 -ddrem843 remainder 100000000.9 1 -> 0.9 -ddrem844 remainder 100000000.999 1 -> 0.999 -ddrem850 remainder 100000003 5 -> 3 -ddrem851 remainder 10000003 5 -> 3 -ddrem852 remainder 1000003 5 -> 3 -ddrem853 remainder 100003 5 -> 3 -ddrem854 remainder 10003 5 -> 3 -ddrem855 remainder 1003 5 -> 3 -ddrem856 remainder 103 5 -> 3 -ddrem857 remainder 13 5 -> 3 -ddrem858 remainder 1 5 -> 1 - --- Vladimir's cases 1234567890123456 -ddrem860 remainder 123.0e1 1000000000000000 -> 1230 -ddrem861 remainder 1230 1000000000000000 -> 1230 -ddrem862 remainder 12.3e2 1000000000000000 -> 1230 -ddrem863 remainder 1.23e3 1000000000000000 -> 1230 -ddrem864 remainder 123e1 1000000000000000 -> 1230 -ddrem870 remainder 123e1 1000000000000000 -> 1230 -ddrem871 remainder 123e1 100000000000000 -> 1230 -ddrem872 remainder 123e1 10000000000000 -> 1230 -ddrem873 remainder 123e1 1000000000000 -> 1230 -ddrem874 remainder 123e1 100000000000 -> 1230 -ddrem875 remainder 123e1 10000000000 -> 1230 -ddrem876 remainder 123e1 1000000000 -> 1230 -ddrem877 remainder 123e1 100000000 -> 1230 -ddrem878 remainder 1230 100000000 -> 1230 -ddrem879 remainder 123e1 10000000 -> 1230 -ddrem880 remainder 123e1 1000000 -> 1230 -ddrem881 remainder 123e1 100000 -> 1230 -ddrem882 remainder 123e1 10000 -> 1230 -ddrem883 remainder 123e1 1000 -> 230 -ddrem884 remainder 123e1 100 -> 30 -ddrem885 remainder 123e1 10 -> 0 -ddrem886 remainder 123e1 1 -> 0 - -ddrem890 remainder 123e1 2000000000000000 -> 1230 -ddrem891 remainder 123e1 200000000000000 -> 1230 -ddrem892 remainder 123e1 20000000000000 -> 1230 -ddrem893 remainder 123e1 2000000000000 -> 1230 -ddrem894 remainder 123e1 200000000000 -> 1230 -ddrem895 remainder 123e1 20000000000 -> 1230 -ddrem896 remainder 123e1 2000000000 -> 1230 -ddrem897 remainder 123e1 200000000 -> 1230 -ddrem899 remainder 123e1 20000000 -> 1230 -ddrem900 remainder 123e1 2000000 -> 1230 -ddrem901 remainder 123e1 200000 -> 1230 -ddrem902 remainder 123e1 20000 -> 1230 -ddrem903 remainder 123e1 2000 -> 1230 -ddrem904 remainder 123e1 200 -> 30 -ddrem905 remainder 123e1 20 -> 10 -ddrem906 remainder 123e1 2 -> 0 - -ddrem910 remainder 123e1 5000000000000000 -> 1230 -ddrem911 remainder 123e1 500000000000000 -> 1230 -ddrem912 remainder 123e1 50000000000000 -> 1230 -ddrem913 remainder 123e1 5000000000000 -> 1230 -ddrem914 remainder 123e1 500000000000 -> 1230 -ddrem915 remainder 123e1 50000000000 -> 1230 -ddrem916 remainder 123e1 5000000000 -> 1230 -ddrem917 remainder 123e1 500000000 -> 1230 -ddrem919 remainder 123e1 50000000 -> 1230 -ddrem920 remainder 123e1 5000000 -> 1230 -ddrem921 remainder 123e1 500000 -> 1230 -ddrem922 remainder 123e1 50000 -> 1230 -ddrem923 remainder 123e1 5000 -> 1230 -ddrem924 remainder 123e1 500 -> 230 -ddrem925 remainder 123e1 50 -> 30 -ddrem926 remainder 123e1 5 -> 0 - -ddrem930 remainder 123e1 9000000000000000 -> 1230 -ddrem931 remainder 123e1 900000000000000 -> 1230 -ddrem932 remainder 123e1 90000000000000 -> 1230 -ddrem933 remainder 123e1 9000000000000 -> 1230 -ddrem934 remainder 123e1 900000000000 -> 1230 -ddrem935 remainder 123e1 90000000000 -> 1230 -ddrem936 remainder 123e1 9000000000 -> 1230 -ddrem937 remainder 123e1 900000000 -> 1230 -ddrem939 remainder 123e1 90000000 -> 1230 -ddrem940 remainder 123e1 9000000 -> 1230 -ddrem941 remainder 123e1 900000 -> 1230 -ddrem942 remainder 123e1 90000 -> 1230 -ddrem943 remainder 123e1 9000 -> 1230 -ddrem944 remainder 123e1 900 -> 330 -ddrem945 remainder 123e1 90 -> 60 -ddrem946 remainder 123e1 9 -> 6 - -ddrem950 remainder 123e1 1000000000000000 -> 1230 -ddrem961 remainder 123e1 2999999999999999 -> 1230 -ddrem962 remainder 123e1 3999999999999999 -> 1230 -ddrem963 remainder 123e1 4999999999999999 -> 1230 -ddrem964 remainder 123e1 5999999999999999 -> 1230 -ddrem965 remainder 123e1 6999999999999999 -> 1230 -ddrem966 remainder 123e1 7999999999999999 -> 1230 -ddrem967 remainder 123e1 8999999999999999 -> 1230 -ddrem968 remainder 123e1 9999999999999999 -> 1230 -ddrem969 remainder 123e1 9876543210987654 -> 1230 - -ddrem980 remainder 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally - --- overflow and underflow tests [from divide] -ddrem1051 remainder 1e+277 1e-311 -> NaN Division_impossible -ddrem1052 remainder 1e+277 -1e-311 -> NaN Division_impossible -ddrem1053 remainder -1e+277 1e-311 -> NaN Division_impossible -ddrem1054 remainder -1e+277 -1e-311 -> NaN Division_impossible -ddrem1055 remainder 1e-277 1e+311 -> 1E-277 -ddrem1056 remainder 1e-277 -1e+311 -> 1E-277 -ddrem1057 remainder -1e-277 1e+311 -> -1E-277 -ddrem1058 remainder -1e-277 -1e+311 -> -1E-277 - --- destructive subtract -ddrem1101 remainder 1234567890123456 1.000000000000001 -> 0.765432109876546 -ddrem1102 remainder 1234567890123456 1.00000000000001 -> 0.65432109876557 -ddrem1103 remainder 1234567890123456 1.0000000000001 -> 0.5432109876668 -ddrem1104 remainder 1234567890123455 4.000000000000001 -> 2.691358027469137 -ddrem1105 remainder 1234567890123456 4.000000000000001 -> 3.691358027469137 -ddrem1106 remainder 1234567890123456 4.9999999999999 -> 0.6913578024696 -ddrem1107 remainder 1234567890123456 4.99999999999999 -> 3.46913578024691 -ddrem1108 remainder 1234567890123456 4.999999999999999 -> 1.246913578024691 -ddrem1109 remainder 1234567890123456 5.000000000000001 -> 0.753086421975309 -ddrem1110 remainder 1234567890123456 5.00000000000001 -> 3.53086421975310 -ddrem1111 remainder 1234567890123456 5.0000000000001 -> 1.3086421975314 - --- Null tests -ddrem1000 remainder 10 # -> NaN Invalid_operation -ddrem1001 remainder # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddRemainder.decTest -- decDouble remainder -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks (as base, above) +ddrem001 remainder 1 1 -> 0 +ddrem002 remainder 2 1 -> 0 +ddrem003 remainder 1 2 -> 1 +ddrem004 remainder 2 2 -> 0 +ddrem005 remainder 0 1 -> 0 +ddrem006 remainder 0 2 -> 0 +ddrem007 remainder 1 3 -> 1 +ddrem008 remainder 2 3 -> 2 +ddrem009 remainder 3 3 -> 0 + +ddrem010 remainder 2.4 1 -> 0.4 +ddrem011 remainder 2.4 -1 -> 0.4 +ddrem012 remainder -2.4 1 -> -0.4 +ddrem013 remainder -2.4 -1 -> -0.4 +ddrem014 remainder 2.40 1 -> 0.40 +ddrem015 remainder 2.400 1 -> 0.400 +ddrem016 remainder 2.4 2 -> 0.4 +ddrem017 remainder 2.400 2 -> 0.400 +ddrem018 remainder 2. 2 -> 0 +ddrem019 remainder 20 20 -> 0 + +ddrem020 remainder 187 187 -> 0 +ddrem021 remainder 5 2 -> 1 +ddrem022 remainder 5 2.0 -> 1.0 +ddrem023 remainder 5 2.000 -> 1.000 +ddrem024 remainder 5 0.200 -> 0.000 +ddrem025 remainder 5 0.200 -> 0.000 + +ddrem030 remainder 1 2 -> 1 +ddrem031 remainder 1 4 -> 1 +ddrem032 remainder 1 8 -> 1 + +ddrem033 remainder 1 16 -> 1 +ddrem034 remainder 1 32 -> 1 +ddrem035 remainder 1 64 -> 1 +ddrem040 remainder 1 -2 -> 1 +ddrem041 remainder 1 -4 -> 1 +ddrem042 remainder 1 -8 -> 1 +ddrem043 remainder 1 -16 -> 1 +ddrem044 remainder 1 -32 -> 1 +ddrem045 remainder 1 -64 -> 1 +ddrem050 remainder -1 2 -> -1 +ddrem051 remainder -1 4 -> -1 +ddrem052 remainder -1 8 -> -1 +ddrem053 remainder -1 16 -> -1 +ddrem054 remainder -1 32 -> -1 +ddrem055 remainder -1 64 -> -1 +ddrem060 remainder -1 -2 -> -1 +ddrem061 remainder -1 -4 -> -1 +ddrem062 remainder -1 -8 -> -1 +ddrem063 remainder -1 -16 -> -1 +ddrem064 remainder -1 -32 -> -1 +ddrem065 remainder -1 -64 -> -1 + +ddrem066 remainder 999999999 1 -> 0 +ddrem067 remainder 999999999.4 1 -> 0.4 +ddrem068 remainder 999999999.5 1 -> 0.5 +ddrem069 remainder 999999999.9 1 -> 0.9 +ddrem070 remainder 999999999.999 1 -> 0.999 +ddrem071 remainder 999999.999999 1 -> 0.999999 +ddrem072 remainder 9 1 -> 0 +ddrem073 remainder 9999999999999999 1 -> 0 +ddrem074 remainder 9999999999999999 2 -> 1 +ddrem075 remainder 9999999999999999 3 -> 0 +ddrem076 remainder 9999999999999999 4 -> 3 + +ddrem080 remainder 0. 1 -> 0 +ddrem081 remainder .0 1 -> 0.0 +ddrem082 remainder 0.00 1 -> 0.00 +ddrem083 remainder 0.00E+9 1 -> 0 +ddrem084 remainder 0.00E+3 1 -> 0 +ddrem085 remainder 0.00E+2 1 -> 0 +ddrem086 remainder 0.00E+1 1 -> 0.0 +ddrem087 remainder 0.00E+0 1 -> 0.00 +ddrem088 remainder 0.00E-0 1 -> 0.00 +ddrem089 remainder 0.00E-1 1 -> 0.000 +ddrem090 remainder 0.00E-2 1 -> 0.0000 +ddrem091 remainder 0.00E-3 1 -> 0.00000 +ddrem092 remainder 0.00E-4 1 -> 0.000000 +ddrem093 remainder 0.00E-5 1 -> 0E-7 +ddrem094 remainder 0.00E-6 1 -> 0E-8 +ddrem095 remainder 0.0000E-50 1 -> 0E-54 + +-- Various flavours of remainder by 0 +ddrem101 remainder 0 0 -> NaN Division_undefined +ddrem102 remainder 0 -0 -> NaN Division_undefined +ddrem103 remainder -0 0 -> NaN Division_undefined +ddrem104 remainder -0 -0 -> NaN Division_undefined +ddrem105 remainder 0.0E5 0 -> NaN Division_undefined +ddrem106 remainder 0.000 0 -> NaN Division_undefined +-- [Some think this next group should be Division_by_zero exception, but +-- IEEE 854 is explicit that it is Invalid operation .. for +-- remainder-near, anyway] +ddrem107 remainder 0.0001 0 -> NaN Invalid_operation +ddrem108 remainder 0.01 0 -> NaN Invalid_operation +ddrem109 remainder 0.1 0 -> NaN Invalid_operation +ddrem110 remainder 1 0 -> NaN Invalid_operation +ddrem111 remainder 1 0.0 -> NaN Invalid_operation +ddrem112 remainder 10 0.0 -> NaN Invalid_operation +ddrem113 remainder 1E+100 0.0 -> NaN Invalid_operation +ddrem114 remainder 1E+380 0 -> NaN Invalid_operation +ddrem115 remainder 0.0001 -0 -> NaN Invalid_operation +ddrem116 remainder 0.01 -0 -> NaN Invalid_operation +ddrem119 remainder 0.1 -0 -> NaN Invalid_operation +ddrem120 remainder 1 -0 -> NaN Invalid_operation +ddrem121 remainder 1 -0.0 -> NaN Invalid_operation +ddrem122 remainder 10 -0.0 -> NaN Invalid_operation +ddrem123 remainder 1E+100 -0.0 -> NaN Invalid_operation +ddrem124 remainder 1E+384 -0 -> NaN Invalid_operation +-- and zeros on left +ddrem130 remainder 0 1 -> 0 +ddrem131 remainder 0 -1 -> 0 +ddrem132 remainder 0.0 1 -> 0.0 +ddrem133 remainder 0.0 -1 -> 0.0 +ddrem134 remainder -0 1 -> -0 +ddrem135 remainder -0 -1 -> -0 +ddrem136 remainder -0.0 1 -> -0.0 +ddrem137 remainder -0.0 -1 -> -0.0 + +-- 0.5ers +ddrem143 remainder 0.5 2 -> 0.5 +ddrem144 remainder 0.5 2.1 -> 0.5 +ddrem145 remainder 0.5 2.01 -> 0.50 +ddrem146 remainder 0.5 2.001 -> 0.500 +ddrem147 remainder 0.50 2 -> 0.50 +ddrem148 remainder 0.50 2.01 -> 0.50 +ddrem149 remainder 0.50 2.001 -> 0.500 + +-- steadies +ddrem150 remainder 1 1 -> 0 +ddrem151 remainder 1 2 -> 1 +ddrem152 remainder 1 3 -> 1 +ddrem153 remainder 1 4 -> 1 +ddrem154 remainder 1 5 -> 1 +ddrem155 remainder 1 6 -> 1 +ddrem156 remainder 1 7 -> 1 +ddrem157 remainder 1 8 -> 1 +ddrem158 remainder 1 9 -> 1 +ddrem159 remainder 1 10 -> 1 +ddrem160 remainder 1 1 -> 0 +ddrem161 remainder 2 1 -> 0 +ddrem162 remainder 3 1 -> 0 +ddrem163 remainder 4 1 -> 0 +ddrem164 remainder 5 1 -> 0 +ddrem165 remainder 6 1 -> 0 +ddrem166 remainder 7 1 -> 0 +ddrem167 remainder 8 1 -> 0 +ddrem168 remainder 9 1 -> 0 +ddrem169 remainder 10 1 -> 0 + +-- some differences from remainderNear +ddrem171 remainder 0.4 1.020 -> 0.400 +ddrem172 remainder 0.50 1.020 -> 0.500 +ddrem173 remainder 0.51 1.020 -> 0.510 +ddrem174 remainder 0.52 1.020 -> 0.520 +ddrem175 remainder 0.6 1.020 -> 0.600 + +-- More flavours of remainder by 0 +ddrem201 remainder 0 0 -> NaN Division_undefined +ddrem202 remainder 0.0E5 0 -> NaN Division_undefined +ddrem203 remainder 0.000 0 -> NaN Division_undefined +ddrem204 remainder 0.0001 0 -> NaN Invalid_operation +ddrem205 remainder 0.01 0 -> NaN Invalid_operation +ddrem206 remainder 0.1 0 -> NaN Invalid_operation +ddrem207 remainder 1 0 -> NaN Invalid_operation +ddrem208 remainder 1 0.0 -> NaN Invalid_operation +ddrem209 remainder 10 0.0 -> NaN Invalid_operation +ddrem210 remainder 1E+100 0.0 -> NaN Invalid_operation +ddrem211 remainder 1E+380 0 -> NaN Invalid_operation + +-- some differences from remainderNear +ddrem231 remainder -0.4 1.020 -> -0.400 +ddrem232 remainder -0.50 1.020 -> -0.500 +ddrem233 remainder -0.51 1.020 -> -0.510 +ddrem234 remainder -0.52 1.020 -> -0.520 +ddrem235 remainder -0.6 1.020 -> -0.600 + +-- high Xs +ddrem240 remainder 1E+2 1.00 -> 0.00 + +-- ddrem3xx are from DiagBigDecimal +ddrem301 remainder 1 3 -> 1 +ddrem302 remainder 5 5 -> 0 +ddrem303 remainder 13 10 -> 3 +ddrem304 remainder 13 50 -> 13 +ddrem305 remainder 13 100 -> 13 +ddrem306 remainder 13 1000 -> 13 +ddrem307 remainder .13 1 -> 0.13 +ddrem308 remainder 0.133 1 -> 0.133 +ddrem309 remainder 0.1033 1 -> 0.1033 +ddrem310 remainder 1.033 1 -> 0.033 +ddrem311 remainder 10.33 1 -> 0.33 +ddrem312 remainder 10.33 10 -> 0.33 +ddrem313 remainder 103.3 1 -> 0.3 +ddrem314 remainder 133 10 -> 3 +ddrem315 remainder 1033 10 -> 3 +ddrem316 remainder 1033 50 -> 33 +ddrem317 remainder 101.0 3 -> 2.0 +ddrem318 remainder 102.0 3 -> 0.0 +ddrem319 remainder 103.0 3 -> 1.0 +ddrem320 remainder 2.40 1 -> 0.40 +ddrem321 remainder 2.400 1 -> 0.400 +ddrem322 remainder 2.4 1 -> 0.4 +ddrem323 remainder 2.4 2 -> 0.4 +ddrem324 remainder 2.400 2 -> 0.400 +ddrem325 remainder 1 0.3 -> 0.1 +ddrem326 remainder 1 0.30 -> 0.10 +ddrem327 remainder 1 0.300 -> 0.100 +ddrem328 remainder 1 0.3000 -> 0.1000 +ddrem329 remainder 1.0 0.3 -> 0.1 +ddrem330 remainder 1.00 0.3 -> 0.10 +ddrem331 remainder 1.000 0.3 -> 0.100 +ddrem332 remainder 1.0000 0.3 -> 0.1000 +ddrem333 remainder 0.5 2 -> 0.5 +ddrem334 remainder 0.5 2.1 -> 0.5 +ddrem335 remainder 0.5 2.01 -> 0.50 +ddrem336 remainder 0.5 2.001 -> 0.500 +ddrem337 remainder 0.50 2 -> 0.50 +ddrem338 remainder 0.50 2.01 -> 0.50 +ddrem339 remainder 0.50 2.001 -> 0.500 + +ddrem340 remainder 0.5 0.5000001 -> 0.5000000 +ddrem341 remainder 0.5 0.50000001 -> 0.50000000 +ddrem342 remainder 0.5 0.500000001 -> 0.500000000 +ddrem343 remainder 0.5 0.5000000001 -> 0.5000000000 +ddrem344 remainder 0.5 0.50000000001 -> 0.50000000000 +ddrem345 remainder 0.5 0.4999999 -> 1E-7 +ddrem346 remainder 0.5 0.49999999 -> 1E-8 +ddrem347 remainder 0.5 0.499999999 -> 1E-9 +ddrem348 remainder 0.5 0.4999999999 -> 1E-10 +ddrem349 remainder 0.5 0.49999999999 -> 1E-11 +ddrem350 remainder 0.5 0.499999999999 -> 1E-12 + +ddrem351 remainder 0.03 7 -> 0.03 +ddrem352 remainder 5 2 -> 1 +ddrem353 remainder 4.1 2 -> 0.1 +ddrem354 remainder 4.01 2 -> 0.01 +ddrem355 remainder 4.001 2 -> 0.001 +ddrem356 remainder 4.0001 2 -> 0.0001 +ddrem357 remainder 4.00001 2 -> 0.00001 +ddrem358 remainder 4.000001 2 -> 0.000001 +ddrem359 remainder 4.0000001 2 -> 1E-7 + +ddrem360 remainder 1.2 0.7345 -> 0.4655 +ddrem361 remainder 0.8 12 -> 0.8 +ddrem362 remainder 0.8 0.2 -> 0.0 +ddrem363 remainder 0.8 0.3 -> 0.2 +ddrem364 remainder 0.800 12 -> 0.800 +ddrem365 remainder 0.800 1.7 -> 0.800 +ddrem366 remainder 2.400 2 -> 0.400 + +ddrem371 remainder 2.400 2 -> 0.400 + +ddrem381 remainder 12345 1 -> 0 +ddrem382 remainder 12345 1.0001 -> 0.7657 +ddrem383 remainder 12345 1.001 -> 0.668 +ddrem384 remainder 12345 1.01 -> 0.78 +ddrem385 remainder 12345 1.1 -> 0.8 +ddrem386 remainder 12355 4 -> 3 +ddrem387 remainder 12345 4 -> 1 +ddrem388 remainder 12355 4.0001 -> 2.6912 +ddrem389 remainder 12345 4.0001 -> 0.6914 +ddrem390 remainder 12345 4.9 -> 1.9 +ddrem391 remainder 12345 4.99 -> 4.73 +ddrem392 remainder 12345 4.999 -> 2.469 +ddrem393 remainder 12345 4.9999 -> 0.2469 +ddrem394 remainder 12345 5 -> 0 +ddrem395 remainder 12345 5.0001 -> 4.7532 +ddrem396 remainder 12345 5.001 -> 2.532 +ddrem397 remainder 12345 5.01 -> 0.36 +ddrem398 remainder 12345 5.1 -> 3.0 + +-- the nasty division-by-1 cases +ddrem401 remainder 0.5 1 -> 0.5 +ddrem402 remainder 0.55 1 -> 0.55 +ddrem403 remainder 0.555 1 -> 0.555 +ddrem404 remainder 0.5555 1 -> 0.5555 +ddrem405 remainder 0.55555 1 -> 0.55555 +ddrem406 remainder 0.555555 1 -> 0.555555 +ddrem407 remainder 0.5555555 1 -> 0.5555555 +ddrem408 remainder 0.55555555 1 -> 0.55555555 +ddrem409 remainder 0.555555555 1 -> 0.555555555 + +-- folddowns +ddrem421 remainder 1E+384 1 -> NaN Division_impossible +ddrem422 remainder 1E+384 1E+383 -> 0E+369 Clamped +ddrem423 remainder 1E+384 2E+383 -> 0E+369 Clamped +ddrem424 remainder 1E+384 3E+383 -> 1.00000000000000E+383 Clamped +ddrem425 remainder 1E+384 4E+383 -> 2.00000000000000E+383 Clamped +ddrem426 remainder 1E+384 5E+383 -> 0E+369 Clamped +ddrem427 remainder 1E+384 6E+383 -> 4.00000000000000E+383 Clamped +ddrem428 remainder 1E+384 7E+383 -> 3.00000000000000E+383 Clamped +ddrem429 remainder 1E+384 8E+383 -> 2.00000000000000E+383 Clamped +ddrem430 remainder 1E+384 9E+383 -> 1.00000000000000E+383 Clamped +-- tinies +ddrem431 remainder 1E-397 1E-398 -> 0E-398 +ddrem432 remainder 1E-397 2E-398 -> 0E-398 +ddrem433 remainder 1E-397 3E-398 -> 1E-398 Subnormal +ddrem434 remainder 1E-397 4E-398 -> 2E-398 Subnormal +ddrem435 remainder 1E-397 5E-398 -> 0E-398 +ddrem436 remainder 1E-397 6E-398 -> 4E-398 Subnormal +ddrem437 remainder 1E-397 7E-398 -> 3E-398 Subnormal +ddrem438 remainder 1E-397 8E-398 -> 2E-398 Subnormal +ddrem439 remainder 1E-397 9E-398 -> 1E-398 Subnormal +ddrem440 remainder 1E-397 10E-398 -> 0E-398 +ddrem441 remainder 1E-397 11E-398 -> 1.0E-397 Subnormal +ddrem442 remainder 100E-397 11E-398 -> 1.0E-397 Subnormal +ddrem443 remainder 100E-397 20E-398 -> 0E-398 +ddrem444 remainder 100E-397 21E-398 -> 1.3E-397 Subnormal +ddrem445 remainder 100E-397 30E-398 -> 1.0E-397 Subnormal + +-- zero signs +ddrem650 remainder 1 1 -> 0 +ddrem651 remainder -1 1 -> -0 +ddrem652 remainder 1 -1 -> 0 +ddrem653 remainder -1 -1 -> -0 +ddrem654 remainder 0 1 -> 0 +ddrem655 remainder -0 1 -> -0 +ddrem656 remainder 0 -1 -> 0 +ddrem657 remainder -0 -1 -> -0 +ddrem658 remainder 0.00 1 -> 0.00 +ddrem659 remainder -0.00 1 -> -0.00 + +-- Specials +ddrem680 remainder Inf -Inf -> NaN Invalid_operation +ddrem681 remainder Inf -1000 -> NaN Invalid_operation +ddrem682 remainder Inf -1 -> NaN Invalid_operation +ddrem683 remainder Inf 0 -> NaN Invalid_operation +ddrem684 remainder Inf -0 -> NaN Invalid_operation +ddrem685 remainder Inf 1 -> NaN Invalid_operation +ddrem686 remainder Inf 1000 -> NaN Invalid_operation +ddrem687 remainder Inf Inf -> NaN Invalid_operation +ddrem688 remainder -1000 Inf -> -1000 +ddrem689 remainder -Inf Inf -> NaN Invalid_operation +ddrem691 remainder -1 Inf -> -1 +ddrem692 remainder 0 Inf -> 0 +ddrem693 remainder -0 Inf -> -0 +ddrem694 remainder 1 Inf -> 1 +ddrem695 remainder 1000 Inf -> 1000 +ddrem696 remainder Inf Inf -> NaN Invalid_operation + +ddrem700 remainder -Inf -Inf -> NaN Invalid_operation +ddrem701 remainder -Inf -1000 -> NaN Invalid_operation +ddrem702 remainder -Inf -1 -> NaN Invalid_operation +ddrem703 remainder -Inf -0 -> NaN Invalid_operation +ddrem704 remainder -Inf 0 -> NaN Invalid_operation +ddrem705 remainder -Inf 1 -> NaN Invalid_operation +ddrem706 remainder -Inf 1000 -> NaN Invalid_operation +ddrem707 remainder -Inf Inf -> NaN Invalid_operation +ddrem708 remainder -Inf -Inf -> NaN Invalid_operation +ddrem709 remainder -1000 Inf -> -1000 +ddrem710 remainder -1 -Inf -> -1 +ddrem711 remainder -0 -Inf -> -0 +ddrem712 remainder 0 -Inf -> 0 +ddrem713 remainder 1 -Inf -> 1 +ddrem714 remainder 1000 -Inf -> 1000 +ddrem715 remainder Inf -Inf -> NaN Invalid_operation + +ddrem721 remainder NaN -Inf -> NaN +ddrem722 remainder NaN -1000 -> NaN +ddrem723 remainder NaN -1 -> NaN +ddrem724 remainder NaN -0 -> NaN +ddrem725 remainder -NaN 0 -> -NaN +ddrem726 remainder NaN 1 -> NaN +ddrem727 remainder NaN 1000 -> NaN +ddrem728 remainder NaN Inf -> NaN +ddrem729 remainder NaN -NaN -> NaN +ddrem730 remainder -Inf NaN -> NaN +ddrem731 remainder -1000 NaN -> NaN +ddrem732 remainder -1 NaN -> NaN +ddrem733 remainder -0 -NaN -> -NaN +ddrem734 remainder 0 NaN -> NaN +ddrem735 remainder 1 -NaN -> -NaN +ddrem736 remainder 1000 NaN -> NaN +ddrem737 remainder Inf NaN -> NaN + +ddrem741 remainder sNaN -Inf -> NaN Invalid_operation +ddrem742 remainder sNaN -1000 -> NaN Invalid_operation +ddrem743 remainder -sNaN -1 -> -NaN Invalid_operation +ddrem744 remainder sNaN -0 -> NaN Invalid_operation +ddrem745 remainder sNaN 0 -> NaN Invalid_operation +ddrem746 remainder sNaN 1 -> NaN Invalid_operation +ddrem747 remainder sNaN 1000 -> NaN Invalid_operation +ddrem749 remainder sNaN NaN -> NaN Invalid_operation +ddrem750 remainder sNaN sNaN -> NaN Invalid_operation +ddrem751 remainder NaN sNaN -> NaN Invalid_operation +ddrem752 remainder -Inf sNaN -> NaN Invalid_operation +ddrem753 remainder -1000 sNaN -> NaN Invalid_operation +ddrem754 remainder -1 sNaN -> NaN Invalid_operation +ddrem755 remainder -0 sNaN -> NaN Invalid_operation +ddrem756 remainder 0 sNaN -> NaN Invalid_operation +ddrem757 remainder 1 sNaN -> NaN Invalid_operation +ddrem758 remainder 1000 sNaN -> NaN Invalid_operation +ddrem759 remainder Inf -sNaN -> -NaN Invalid_operation + +-- propagating NaNs +ddrem760 remainder NaN1 NaN7 -> NaN1 +ddrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation +ddrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation +ddrem763 remainder sNaN4 sNaN10 -> NaN4 Invalid_operation +ddrem764 remainder 15 NaN11 -> NaN11 +ddrem765 remainder NaN6 NaN12 -> NaN6 +ddrem766 remainder Inf NaN13 -> NaN13 +ddrem767 remainder NaN14 -Inf -> NaN14 +ddrem768 remainder 0 NaN15 -> NaN15 +ddrem769 remainder NaN16 -0 -> NaN16 + +-- edge cases of impossible +ddrem770 remainder 1234567890123456 10 -> 6 +ddrem771 remainder 1234567890123456 1 -> 0 +ddrem772 remainder 1234567890123456 0.1 -> NaN Division_impossible +ddrem773 remainder 1234567890123456 0.01 -> NaN Division_impossible + +-- long operand checks +ddrem801 remainder 12345678000 100 -> 0 +ddrem802 remainder 1 12345678000 -> 1 +ddrem803 remainder 1234567800 10 -> 0 +ddrem804 remainder 1 1234567800 -> 1 +ddrem805 remainder 1234567890 10 -> 0 +ddrem806 remainder 1 1234567890 -> 1 +ddrem807 remainder 1234567891 10 -> 1 +ddrem808 remainder 1 1234567891 -> 1 +ddrem809 remainder 12345678901 100 -> 1 +ddrem810 remainder 1 12345678901 -> 1 +ddrem811 remainder 1234567896 10 -> 6 +ddrem812 remainder 1 1234567896 -> 1 + +ddrem821 remainder 12345678000 100 -> 0 +ddrem822 remainder 1 12345678000 -> 1 +ddrem823 remainder 1234567800 10 -> 0 +ddrem824 remainder 1 1234567800 -> 1 +ddrem825 remainder 1234567890 10 -> 0 +ddrem826 remainder 1 1234567890 -> 1 +ddrem827 remainder 1234567891 10 -> 1 +ddrem828 remainder 1 1234567891 -> 1 +ddrem829 remainder 12345678901 100 -> 1 +ddrem830 remainder 1 12345678901 -> 1 +ddrem831 remainder 1234567896 10 -> 6 +ddrem832 remainder 1 1234567896 -> 1 + +-- from divideint +ddrem840 remainder 100000000.0 1 -> 0.0 +ddrem841 remainder 100000000.4 1 -> 0.4 +ddrem842 remainder 100000000.5 1 -> 0.5 +ddrem843 remainder 100000000.9 1 -> 0.9 +ddrem844 remainder 100000000.999 1 -> 0.999 +ddrem850 remainder 100000003 5 -> 3 +ddrem851 remainder 10000003 5 -> 3 +ddrem852 remainder 1000003 5 -> 3 +ddrem853 remainder 100003 5 -> 3 +ddrem854 remainder 10003 5 -> 3 +ddrem855 remainder 1003 5 -> 3 +ddrem856 remainder 103 5 -> 3 +ddrem857 remainder 13 5 -> 3 +ddrem858 remainder 1 5 -> 1 + +-- Vladimir's cases 1234567890123456 +ddrem860 remainder 123.0e1 1000000000000000 -> 1230 +ddrem861 remainder 1230 1000000000000000 -> 1230 +ddrem862 remainder 12.3e2 1000000000000000 -> 1230 +ddrem863 remainder 1.23e3 1000000000000000 -> 1230 +ddrem864 remainder 123e1 1000000000000000 -> 1230 +ddrem870 remainder 123e1 1000000000000000 -> 1230 +ddrem871 remainder 123e1 100000000000000 -> 1230 +ddrem872 remainder 123e1 10000000000000 -> 1230 +ddrem873 remainder 123e1 1000000000000 -> 1230 +ddrem874 remainder 123e1 100000000000 -> 1230 +ddrem875 remainder 123e1 10000000000 -> 1230 +ddrem876 remainder 123e1 1000000000 -> 1230 +ddrem877 remainder 123e1 100000000 -> 1230 +ddrem878 remainder 1230 100000000 -> 1230 +ddrem879 remainder 123e1 10000000 -> 1230 +ddrem880 remainder 123e1 1000000 -> 1230 +ddrem881 remainder 123e1 100000 -> 1230 +ddrem882 remainder 123e1 10000 -> 1230 +ddrem883 remainder 123e1 1000 -> 230 +ddrem884 remainder 123e1 100 -> 30 +ddrem885 remainder 123e1 10 -> 0 +ddrem886 remainder 123e1 1 -> 0 + +ddrem890 remainder 123e1 2000000000000000 -> 1230 +ddrem891 remainder 123e1 200000000000000 -> 1230 +ddrem892 remainder 123e1 20000000000000 -> 1230 +ddrem893 remainder 123e1 2000000000000 -> 1230 +ddrem894 remainder 123e1 200000000000 -> 1230 +ddrem895 remainder 123e1 20000000000 -> 1230 +ddrem896 remainder 123e1 2000000000 -> 1230 +ddrem897 remainder 123e1 200000000 -> 1230 +ddrem899 remainder 123e1 20000000 -> 1230 +ddrem900 remainder 123e1 2000000 -> 1230 +ddrem901 remainder 123e1 200000 -> 1230 +ddrem902 remainder 123e1 20000 -> 1230 +ddrem903 remainder 123e1 2000 -> 1230 +ddrem904 remainder 123e1 200 -> 30 +ddrem905 remainder 123e1 20 -> 10 +ddrem906 remainder 123e1 2 -> 0 + +ddrem910 remainder 123e1 5000000000000000 -> 1230 +ddrem911 remainder 123e1 500000000000000 -> 1230 +ddrem912 remainder 123e1 50000000000000 -> 1230 +ddrem913 remainder 123e1 5000000000000 -> 1230 +ddrem914 remainder 123e1 500000000000 -> 1230 +ddrem915 remainder 123e1 50000000000 -> 1230 +ddrem916 remainder 123e1 5000000000 -> 1230 +ddrem917 remainder 123e1 500000000 -> 1230 +ddrem919 remainder 123e1 50000000 -> 1230 +ddrem920 remainder 123e1 5000000 -> 1230 +ddrem921 remainder 123e1 500000 -> 1230 +ddrem922 remainder 123e1 50000 -> 1230 +ddrem923 remainder 123e1 5000 -> 1230 +ddrem924 remainder 123e1 500 -> 230 +ddrem925 remainder 123e1 50 -> 30 +ddrem926 remainder 123e1 5 -> 0 + +ddrem930 remainder 123e1 9000000000000000 -> 1230 +ddrem931 remainder 123e1 900000000000000 -> 1230 +ddrem932 remainder 123e1 90000000000000 -> 1230 +ddrem933 remainder 123e1 9000000000000 -> 1230 +ddrem934 remainder 123e1 900000000000 -> 1230 +ddrem935 remainder 123e1 90000000000 -> 1230 +ddrem936 remainder 123e1 9000000000 -> 1230 +ddrem937 remainder 123e1 900000000 -> 1230 +ddrem939 remainder 123e1 90000000 -> 1230 +ddrem940 remainder 123e1 9000000 -> 1230 +ddrem941 remainder 123e1 900000 -> 1230 +ddrem942 remainder 123e1 90000 -> 1230 +ddrem943 remainder 123e1 9000 -> 1230 +ddrem944 remainder 123e1 900 -> 330 +ddrem945 remainder 123e1 90 -> 60 +ddrem946 remainder 123e1 9 -> 6 + +ddrem950 remainder 123e1 1000000000000000 -> 1230 +ddrem961 remainder 123e1 2999999999999999 -> 1230 +ddrem962 remainder 123e1 3999999999999999 -> 1230 +ddrem963 remainder 123e1 4999999999999999 -> 1230 +ddrem964 remainder 123e1 5999999999999999 -> 1230 +ddrem965 remainder 123e1 6999999999999999 -> 1230 +ddrem966 remainder 123e1 7999999999999999 -> 1230 +ddrem967 remainder 123e1 8999999999999999 -> 1230 +ddrem968 remainder 123e1 9999999999999999 -> 1230 +ddrem969 remainder 123e1 9876543210987654 -> 1230 + +ddrem980 remainder 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally + +-- overflow and underflow tests [from divide] +ddrem1051 remainder 1e+277 1e-311 -> NaN Division_impossible +ddrem1052 remainder 1e+277 -1e-311 -> NaN Division_impossible +ddrem1053 remainder -1e+277 1e-311 -> NaN Division_impossible +ddrem1054 remainder -1e+277 -1e-311 -> NaN Division_impossible +ddrem1055 remainder 1e-277 1e+311 -> 1E-277 +ddrem1056 remainder 1e-277 -1e+311 -> 1E-277 +ddrem1057 remainder -1e-277 1e+311 -> -1E-277 +ddrem1058 remainder -1e-277 -1e+311 -> -1E-277 + +-- destructive subtract +ddrem1101 remainder 1234567890123456 1.000000000000001 -> 0.765432109876546 +ddrem1102 remainder 1234567890123456 1.00000000000001 -> 0.65432109876557 +ddrem1103 remainder 1234567890123456 1.0000000000001 -> 0.5432109876668 +ddrem1104 remainder 1234567890123455 4.000000000000001 -> 2.691358027469137 +ddrem1105 remainder 1234567890123456 4.000000000000001 -> 3.691358027469137 +ddrem1106 remainder 1234567890123456 4.9999999999999 -> 0.6913578024696 +ddrem1107 remainder 1234567890123456 4.99999999999999 -> 3.46913578024691 +ddrem1108 remainder 1234567890123456 4.999999999999999 -> 1.246913578024691 +ddrem1109 remainder 1234567890123456 5.000000000000001 -> 0.753086421975309 +ddrem1110 remainder 1234567890123456 5.00000000000001 -> 3.53086421975310 +ddrem1111 remainder 1234567890123456 5.0000000000001 -> 1.3086421975314 + +-- Null tests +ddrem1000 remainder 10 # -> NaN Invalid_operation +ddrem1001 remainder # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddRemainderNear.decTest b/Lib/test/decimaltestdata/ddRemainderNear.decTest index 8368ac4801e..bbe82ea3747 100644 --- a/Lib/test/decimaltestdata/ddRemainderNear.decTest +++ b/Lib/test/decimaltestdata/ddRemainderNear.decTest @@ -1,629 +1,629 @@ ------------------------------------------------------------------------- --- ddRemainderNear.decTest -- decDouble remainder-near -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- sanity checks (as base, above) -ddrmn001 remaindernear 1 1 -> 0 -ddrmn002 remaindernear 2 1 -> 0 -ddrmn003 remaindernear 1 2 -> 1 -ddrmn004 remaindernear 2 2 -> 0 -ddrmn005 remaindernear 0 1 -> 0 -ddrmn006 remaindernear 0 2 -> 0 -ddrmn007 remaindernear 1 3 -> 1 -ddrmn008 remaindernear 2 3 -> -1 -ddrmn009 remaindernear 3 3 -> 0 - -ddrmn010 remaindernear 2.4 1 -> 0.4 -ddrmn011 remaindernear 2.4 -1 -> 0.4 -ddrmn012 remaindernear -2.4 1 -> -0.4 -ddrmn013 remaindernear -2.4 -1 -> -0.4 -ddrmn014 remaindernear 2.40 1 -> 0.40 -ddrmn015 remaindernear 2.400 1 -> 0.400 -ddrmn016 remaindernear 2.4 2 -> 0.4 -ddrmn017 remaindernear 2.400 2 -> 0.400 -ddrmn018 remaindernear 2. 2 -> 0 -ddrmn019 remaindernear 20 20 -> 0 - -ddrmn020 remaindernear 187 187 -> 0 -ddrmn021 remaindernear 5 2 -> 1 -ddrmn022 remaindernear 5 2.0 -> 1.0 -ddrmn023 remaindernear 5 2.000 -> 1.000 -ddrmn024 remaindernear 5 0.200 -> 0.000 -ddrmn025 remaindernear 5 0.200 -> 0.000 - -ddrmn030 remaindernear 1 2 -> 1 -ddrmn031 remaindernear 1 4 -> 1 -ddrmn032 remaindernear 1 8 -> 1 - -ddrmn033 remaindernear 1 16 -> 1 -ddrmn034 remaindernear 1 32 -> 1 -ddrmn035 remaindernear 1 64 -> 1 -ddrmn040 remaindernear 1 -2 -> 1 -ddrmn041 remaindernear 1 -4 -> 1 -ddrmn042 remaindernear 1 -8 -> 1 -ddrmn043 remaindernear 1 -16 -> 1 -ddrmn044 remaindernear 1 -32 -> 1 -ddrmn045 remaindernear 1 -64 -> 1 -ddrmn050 remaindernear -1 2 -> -1 -ddrmn051 remaindernear -1 4 -> -1 -ddrmn052 remaindernear -1 8 -> -1 -ddrmn053 remaindernear -1 16 -> -1 -ddrmn054 remaindernear -1 32 -> -1 -ddrmn055 remaindernear -1 64 -> -1 -ddrmn060 remaindernear -1 -2 -> -1 -ddrmn061 remaindernear -1 -4 -> -1 -ddrmn062 remaindernear -1 -8 -> -1 -ddrmn063 remaindernear -1 -16 -> -1 -ddrmn064 remaindernear -1 -32 -> -1 -ddrmn065 remaindernear -1 -64 -> -1 - -ddrmn066 remaindernear 9.9 1 -> -0.1 -ddrmn067 remaindernear 99.7 1 -> -0.3 -ddrmn068 remaindernear 999999999 1 -> 0 -ddrmn069 remaindernear 999999999.4 1 -> 0.4 -ddrmn070 remaindernear 999999999.5 1 -> -0.5 -ddrmn071 remaindernear 999999999.9 1 -> -0.1 -ddrmn072 remaindernear 999999999.999 1 -> -0.001 -ddrmn073 remaindernear 999999.999999 1 -> -0.000001 -ddrmn074 remaindernear 9 1 -> 0 -ddrmn075 remaindernear 9999999999999999 1 -> 0 -ddrmn076 remaindernear 9999999999999999 2 -> -1 -ddrmn077 remaindernear 9999999999999999 3 -> 0 -ddrmn078 remaindernear 9999999999999999 4 -> -1 - -ddrmn080 remaindernear 0. 1 -> 0 -ddrmn081 remaindernear .0 1 -> 0.0 -ddrmn082 remaindernear 0.00 1 -> 0.00 -ddrmn083 remaindernear 0.00E+9 1 -> 0 -ddrmn084 remaindernear 0.00E+3 1 -> 0 -ddrmn085 remaindernear 0.00E+2 1 -> 0 -ddrmn086 remaindernear 0.00E+1 1 -> 0.0 -ddrmn087 remaindernear 0.00E+0 1 -> 0.00 -ddrmn088 remaindernear 0.00E-0 1 -> 0.00 -ddrmn089 remaindernear 0.00E-1 1 -> 0.000 -ddrmn090 remaindernear 0.00E-2 1 -> 0.0000 -ddrmn091 remaindernear 0.00E-3 1 -> 0.00000 -ddrmn092 remaindernear 0.00E-4 1 -> 0.000000 -ddrmn093 remaindernear 0.00E-5 1 -> 0E-7 -ddrmn094 remaindernear 0.00E-6 1 -> 0E-8 -ddrmn095 remaindernear 0.0000E-50 1 -> 0E-54 - --- Various flavours of remaindernear by 0 -ddrmn101 remaindernear 0 0 -> NaN Division_undefined -ddrmn102 remaindernear 0 -0 -> NaN Division_undefined -ddrmn103 remaindernear -0 0 -> NaN Division_undefined -ddrmn104 remaindernear -0 -0 -> NaN Division_undefined -ddrmn105 remaindernear 0.0E5 0 -> NaN Division_undefined -ddrmn106 remaindernear 0.000 0 -> NaN Division_undefined --- [Some think this next group should be Division_by_zero exception, but --- IEEE 854 is explicit that it is Invalid operation .. for --- remainder-near, anyway] -ddrmn107 remaindernear 0.0001 0 -> NaN Invalid_operation -ddrmn108 remaindernear 0.01 0 -> NaN Invalid_operation -ddrmn109 remaindernear 0.1 0 -> NaN Invalid_operation -ddrmn110 remaindernear 1 0 -> NaN Invalid_operation -ddrmn111 remaindernear 1 0.0 -> NaN Invalid_operation -ddrmn112 remaindernear 10 0.0 -> NaN Invalid_operation -ddrmn113 remaindernear 1E+100 0.0 -> NaN Invalid_operation -ddrmn114 remaindernear 1E+380 0 -> NaN Invalid_operation -ddrmn115 remaindernear 0.0001 -0 -> NaN Invalid_operation -ddrmn116 remaindernear 0.01 -0 -> NaN Invalid_operation -ddrmn119 remaindernear 0.1 -0 -> NaN Invalid_operation -ddrmn120 remaindernear 1 -0 -> NaN Invalid_operation -ddrmn121 remaindernear 1 -0.0 -> NaN Invalid_operation -ddrmn122 remaindernear 10 -0.0 -> NaN Invalid_operation -ddrmn123 remaindernear 1E+100 -0.0 -> NaN Invalid_operation -ddrmn124 remaindernear 1E+384 -0 -> NaN Invalid_operation --- and zeros on left -ddrmn130 remaindernear 0 1 -> 0 -ddrmn131 remaindernear 0 -1 -> 0 -ddrmn132 remaindernear 0.0 1 -> 0.0 -ddrmn133 remaindernear 0.0 -1 -> 0.0 -ddrmn134 remaindernear -0 1 -> -0 -ddrmn135 remaindernear -0 -1 -> -0 -ddrmn136 remaindernear -0.0 1 -> -0.0 -ddrmn137 remaindernear -0.0 -1 -> -0.0 - --- 0.5ers -ddrmn143 remaindernear 0.5 2 -> 0.5 -ddrmn144 remaindernear 0.5 2.1 -> 0.5 -ddrmn145 remaindernear 0.5 2.01 -> 0.50 -ddrmn146 remaindernear 0.5 2.001 -> 0.500 -ddrmn147 remaindernear 0.50 2 -> 0.50 -ddrmn148 remaindernear 0.50 2.01 -> 0.50 -ddrmn149 remaindernear 0.50 2.001 -> 0.500 - --- steadies -ddrmn150 remaindernear 1 1 -> 0 -ddrmn151 remaindernear 1 2 -> 1 -ddrmn152 remaindernear 1 3 -> 1 -ddrmn153 remaindernear 1 4 -> 1 -ddrmn154 remaindernear 1 5 -> 1 -ddrmn155 remaindernear 1 6 -> 1 -ddrmn156 remaindernear 1 7 -> 1 -ddrmn157 remaindernear 1 8 -> 1 -ddrmn158 remaindernear 1 9 -> 1 -ddrmn159 remaindernear 1 10 -> 1 -ddrmn160 remaindernear 1 1 -> 0 -ddrmn161 remaindernear 2 1 -> 0 -ddrmn162 remaindernear 3 1 -> 0 -ddrmn163 remaindernear 4 1 -> 0 -ddrmn164 remaindernear 5 1 -> 0 -ddrmn165 remaindernear 6 1 -> 0 -ddrmn166 remaindernear 7 1 -> 0 -ddrmn167 remaindernear 8 1 -> 0 -ddrmn168 remaindernear 9 1 -> 0 -ddrmn169 remaindernear 10 1 -> 0 - --- some differences from remainder -ddrmn171 remaindernear 0.4 1.020 -> 0.400 -ddrmn172 remaindernear 0.50 1.020 -> 0.500 -ddrmn173 remaindernear 0.51 1.020 -> 0.510 -ddrmn174 remaindernear 0.52 1.020 -> -0.500 -ddrmn175 remaindernear 0.6 1.020 -> -0.420 - --- More flavours of remaindernear by 0 -ddrmn201 remaindernear 0 0 -> NaN Division_undefined -ddrmn202 remaindernear 0.0E5 0 -> NaN Division_undefined -ddrmn203 remaindernear 0.000 0 -> NaN Division_undefined -ddrmn204 remaindernear 0.0001 0 -> NaN Invalid_operation -ddrmn205 remaindernear 0.01 0 -> NaN Invalid_operation -ddrmn206 remaindernear 0.1 0 -> NaN Invalid_operation -ddrmn207 remaindernear 1 0 -> NaN Invalid_operation -ddrmn208 remaindernear 1 0.0 -> NaN Invalid_operation -ddrmn209 remaindernear 10 0.0 -> NaN Invalid_operation -ddrmn210 remaindernear 1E+100 0.0 -> NaN Invalid_operation -ddrmn211 remaindernear 1E+380 0 -> NaN Invalid_operation - --- tests from the extended specification -ddrmn221 remaindernear 2.1 3 -> -0.9 -ddrmn222 remaindernear 10 6 -> -2 -ddrmn223 remaindernear 10 3 -> 1 -ddrmn224 remaindernear -10 3 -> -1 -ddrmn225 remaindernear 10.2 1 -> 0.2 -ddrmn226 remaindernear 10 0.3 -> 0.1 -ddrmn227 remaindernear 3.6 1.3 -> -0.3 - --- some differences from remainder -ddrmn231 remaindernear -0.4 1.020 -> -0.400 -ddrmn232 remaindernear -0.50 1.020 -> -0.500 -ddrmn233 remaindernear -0.51 1.020 -> -0.510 -ddrmn234 remaindernear -0.52 1.020 -> 0.500 -ddrmn235 remaindernear -0.6 1.020 -> 0.420 - --- high Xs -ddrmn240 remaindernear 1E+2 1.00 -> 0.00 - --- ddrmn3xx are from DiagBigDecimal -ddrmn301 remaindernear 1 3 -> 1 -ddrmn302 remaindernear 5 5 -> 0 -ddrmn303 remaindernear 13 10 -> 3 -ddrmn304 remaindernear 13 50 -> 13 -ddrmn305 remaindernear 13 100 -> 13 -ddrmn306 remaindernear 13 1000 -> 13 -ddrmn307 remaindernear .13 1 -> 0.13 -ddrmn308 remaindernear 0.133 1 -> 0.133 -ddrmn309 remaindernear 0.1033 1 -> 0.1033 -ddrmn310 remaindernear 1.033 1 -> 0.033 -ddrmn311 remaindernear 10.33 1 -> 0.33 -ddrmn312 remaindernear 10.33 10 -> 0.33 -ddrmn313 remaindernear 103.3 1 -> 0.3 -ddrmn314 remaindernear 133 10 -> 3 -ddrmn315 remaindernear 1033 10 -> 3 -ddrmn316 remaindernear 1033 50 -> -17 -ddrmn317 remaindernear 101.0 3 -> -1.0 -ddrmn318 remaindernear 102.0 3 -> 0.0 -ddrmn319 remaindernear 103.0 3 -> 1.0 -ddrmn320 remaindernear 2.40 1 -> 0.40 -ddrmn321 remaindernear 2.400 1 -> 0.400 -ddrmn322 remaindernear 2.4 1 -> 0.4 -ddrmn323 remaindernear 2.4 2 -> 0.4 -ddrmn324 remaindernear 2.400 2 -> 0.400 -ddrmn325 remaindernear 1 0.3 -> 0.1 -ddrmn326 remaindernear 1 0.30 -> 0.10 -ddrmn327 remaindernear 1 0.300 -> 0.100 -ddrmn328 remaindernear 1 0.3000 -> 0.1000 -ddrmn329 remaindernear 1.0 0.3 -> 0.1 -ddrmn330 remaindernear 1.00 0.3 -> 0.10 -ddrmn331 remaindernear 1.000 0.3 -> 0.100 -ddrmn332 remaindernear 1.0000 0.3 -> 0.1000 -ddrmn333 remaindernear 0.5 2 -> 0.5 -ddrmn334 remaindernear 0.5 2.1 -> 0.5 -ddrmn335 remaindernear 0.5 2.01 -> 0.50 -ddrmn336 remaindernear 0.5 2.001 -> 0.500 -ddrmn337 remaindernear 0.50 2 -> 0.50 -ddrmn338 remaindernear 0.50 2.01 -> 0.50 -ddrmn339 remaindernear 0.50 2.001 -> 0.500 - -ddrmn340 remaindernear 0.5 0.5000001 -> -1E-7 -ddrmn341 remaindernear 0.5 0.50000001 -> -1E-8 -ddrmn342 remaindernear 0.5 0.500000001 -> -1E-9 -ddrmn343 remaindernear 0.5 0.5000000001 -> -1E-10 -ddrmn344 remaindernear 0.5 0.50000000001 -> -1E-11 -ddrmn345 remaindernear 0.5 0.4999999 -> 1E-7 -ddrmn346 remaindernear 0.5 0.49999999 -> 1E-8 -ddrmn347 remaindernear 0.5 0.499999999 -> 1E-9 -ddrmn348 remaindernear 0.5 0.4999999999 -> 1E-10 -ddrmn349 remaindernear 0.5 0.49999999999 -> 1E-11 -ddrmn350 remaindernear 0.5 0.499999999999 -> 1E-12 - -ddrmn351 remaindernear 0.03 7 -> 0.03 -ddrmn352 remaindernear 5 2 -> 1 -ddrmn353 remaindernear 4.1 2 -> 0.1 -ddrmn354 remaindernear 4.01 2 -> 0.01 -ddrmn355 remaindernear 4.001 2 -> 0.001 -ddrmn356 remaindernear 4.0001 2 -> 0.0001 -ddrmn357 remaindernear 4.00001 2 -> 0.00001 -ddrmn358 remaindernear 4.000001 2 -> 0.000001 -ddrmn359 remaindernear 4.0000001 2 -> 1E-7 - -ddrmn360 remaindernear 1.2 0.7345 -> -0.2690 -ddrmn361 remaindernear 0.8 12 -> 0.8 -ddrmn362 remaindernear 0.8 0.2 -> 0.0 -ddrmn363 remaindernear 0.8 0.3 -> -0.1 -ddrmn364 remaindernear 0.800 12 -> 0.800 -ddrmn365 remaindernear 0.800 1.7 -> 0.800 -ddrmn366 remaindernear 2.400 2 -> 0.400 - --- round to even -ddrmn371 remaindernear 121 2 -> 1 -ddrmn372 remaindernear 122 2 -> 0 -ddrmn373 remaindernear 123 2 -> -1 -ddrmn374 remaindernear 124 2 -> 0 -ddrmn375 remaindernear 125 2 -> 1 -ddrmn376 remaindernear 126 2 -> 0 -ddrmn377 remaindernear 127 2 -> -1 - -ddrmn381 remaindernear 12345 1 -> 0 -ddrmn382 remaindernear 12345 1.0001 -> -0.2344 -ddrmn383 remaindernear 12345 1.001 -> -0.333 -ddrmn384 remaindernear 12345 1.01 -> -0.23 -ddrmn385 remaindernear 12345 1.1 -> -0.3 -ddrmn386 remaindernear 12355 4 -> -1 -ddrmn387 remaindernear 12345 4 -> 1 -ddrmn388 remaindernear 12355 4.0001 -> -1.3089 -ddrmn389 remaindernear 12345 4.0001 -> 0.6914 -ddrmn390 remaindernear 12345 4.9 -> 1.9 -ddrmn391 remaindernear 12345 4.99 -> -0.26 -ddrmn392 remaindernear 12345 4.999 -> 2.469 -ddrmn393 remaindernear 12345 4.9999 -> 0.2469 -ddrmn394 remaindernear 12345 5 -> 0 -ddrmn395 remaindernear 12345 5.0001 -> -0.2469 -ddrmn396 remaindernear 12345 5.001 -> -2.469 -ddrmn397 remaindernear 12345 5.01 -> 0.36 -ddrmn398 remaindernear 12345 5.1 -> -2.1 - --- the nasty division-by-1 cases -ddrmn401 remaindernear 0.4 1 -> 0.4 -ddrmn402 remaindernear 0.45 1 -> 0.45 -ddrmn403 remaindernear 0.455 1 -> 0.455 -ddrmn404 remaindernear 0.4555 1 -> 0.4555 -ddrmn405 remaindernear 0.45555 1 -> 0.45555 -ddrmn406 remaindernear 0.455555 1 -> 0.455555 -ddrmn407 remaindernear 0.4555555 1 -> 0.4555555 -ddrmn408 remaindernear 0.45555555 1 -> 0.45555555 -ddrmn409 remaindernear 0.455555555 1 -> 0.455555555 --- with spill... [412 exercises sticktab loop] -ddrmn411 remaindernear 0.5 1 -> 0.5 -ddrmn412 remaindernear 0.55 1 -> -0.45 -ddrmn413 remaindernear 0.555 1 -> -0.445 -ddrmn414 remaindernear 0.5555 1 -> -0.4445 -ddrmn415 remaindernear 0.55555 1 -> -0.44445 -ddrmn416 remaindernear 0.555555 1 -> -0.444445 -ddrmn417 remaindernear 0.5555555 1 -> -0.4444445 -ddrmn418 remaindernear 0.55555555 1 -> -0.44444445 -ddrmn419 remaindernear 0.555555555 1 -> -0.444444445 - --- folddowns -ddrmn421 remaindernear 1E+384 1 -> NaN Division_impossible -ddrmn422 remaindernear 1E+384 1E+383 -> 0E+369 Clamped -ddrmn423 remaindernear 1E+384 2E+383 -> 0E+369 Clamped -ddrmn424 remaindernear 1E+384 3E+383 -> 1.00000000000000E+383 Clamped -ddrmn425 remaindernear 1E+384 4E+383 -> 2.00000000000000E+383 Clamped -ddrmn426 remaindernear 1E+384 5E+383 -> 0E+369 Clamped -ddrmn427 remaindernear 1E+384 6E+383 -> -2.00000000000000E+383 Clamped -ddrmn428 remaindernear 1E+384 7E+383 -> 3.00000000000000E+383 Clamped -ddrmn429 remaindernear 1E+384 8E+383 -> 2.00000000000000E+383 Clamped -ddrmn430 remaindernear 1E+384 9E+383 -> 1.00000000000000E+383 Clamped --- tinies -ddrmn431 remaindernear 1E-397 1E-398 -> 0E-398 -ddrmn432 remaindernear 1E-397 2E-398 -> 0E-398 -ddrmn433 remaindernear 1E-397 3E-398 -> 1E-398 Subnormal -ddrmn434 remaindernear 1E-397 4E-398 -> 2E-398 Subnormal -ddrmn435 remaindernear 1E-397 5E-398 -> 0E-398 -ddrmn436 remaindernear 1E-397 6E-398 -> -2E-398 Subnormal -ddrmn437 remaindernear 1E-397 7E-398 -> 3E-398 Subnormal -ddrmn438 remaindernear 1E-397 8E-398 -> 2E-398 Subnormal -ddrmn439 remaindernear 1E-397 9E-398 -> 1E-398 Subnormal -ddrmn440 remaindernear 1E-397 10E-398 -> 0E-398 -ddrmn441 remaindernear 1E-397 11E-398 -> -1E-398 Subnormal -ddrmn442 remaindernear 100E-397 11E-398 -> -1E-398 Subnormal -ddrmn443 remaindernear 100E-397 20E-398 -> 0E-398 -ddrmn444 remaindernear 100E-397 21E-398 -> -8E-398 Subnormal -ddrmn445 remaindernear 100E-397 30E-398 -> 1.0E-397 Subnormal - --- zero signs -ddrmn650 remaindernear 1 1 -> 0 -ddrmn651 remaindernear -1 1 -> -0 -ddrmn652 remaindernear 1 -1 -> 0 -ddrmn653 remaindernear -1 -1 -> -0 -ddrmn654 remaindernear 0 1 -> 0 -ddrmn655 remaindernear -0 1 -> -0 -ddrmn656 remaindernear 0 -1 -> 0 -ddrmn657 remaindernear -0 -1 -> -0 -ddrmn658 remaindernear 0.00 1 -> 0.00 -ddrmn659 remaindernear -0.00 1 -> -0.00 - --- Specials -ddrmn680 remaindernear Inf -Inf -> NaN Invalid_operation -ddrmn681 remaindernear Inf -1000 -> NaN Invalid_operation -ddrmn682 remaindernear Inf -1 -> NaN Invalid_operation -ddrmn683 remaindernear Inf 0 -> NaN Invalid_operation -ddrmn684 remaindernear Inf -0 -> NaN Invalid_operation -ddrmn685 remaindernear Inf 1 -> NaN Invalid_operation -ddrmn686 remaindernear Inf 1000 -> NaN Invalid_operation -ddrmn687 remaindernear Inf Inf -> NaN Invalid_operation -ddrmn688 remaindernear -1000 Inf -> -1000 -ddrmn689 remaindernear -Inf Inf -> NaN Invalid_operation -ddrmn691 remaindernear -1 Inf -> -1 -ddrmn692 remaindernear 0 Inf -> 0 -ddrmn693 remaindernear -0 Inf -> -0 -ddrmn694 remaindernear 1 Inf -> 1 -ddrmn695 remaindernear 1000 Inf -> 1000 -ddrmn696 remaindernear Inf Inf -> NaN Invalid_operation - -ddrmn700 remaindernear -Inf -Inf -> NaN Invalid_operation -ddrmn701 remaindernear -Inf -1000 -> NaN Invalid_operation -ddrmn702 remaindernear -Inf -1 -> NaN Invalid_operation -ddrmn703 remaindernear -Inf -0 -> NaN Invalid_operation -ddrmn704 remaindernear -Inf 0 -> NaN Invalid_operation -ddrmn705 remaindernear -Inf 1 -> NaN Invalid_operation -ddrmn706 remaindernear -Inf 1000 -> NaN Invalid_operation -ddrmn707 remaindernear -Inf Inf -> NaN Invalid_operation -ddrmn708 remaindernear -Inf -Inf -> NaN Invalid_operation -ddrmn709 remaindernear -1000 Inf -> -1000 -ddrmn710 remaindernear -1 -Inf -> -1 -ddrmn711 remaindernear -0 -Inf -> -0 -ddrmn712 remaindernear 0 -Inf -> 0 -ddrmn713 remaindernear 1 -Inf -> 1 -ddrmn714 remaindernear 1000 -Inf -> 1000 -ddrmn715 remaindernear Inf -Inf -> NaN Invalid_operation - -ddrmn721 remaindernear NaN -Inf -> NaN -ddrmn722 remaindernear NaN -1000 -> NaN -ddrmn723 remaindernear NaN -1 -> NaN -ddrmn724 remaindernear NaN -0 -> NaN -ddrmn725 remaindernear -NaN 0 -> -NaN -ddrmn726 remaindernear NaN 1 -> NaN -ddrmn727 remaindernear NaN 1000 -> NaN -ddrmn728 remaindernear NaN Inf -> NaN -ddrmn729 remaindernear NaN -NaN -> NaN -ddrmn730 remaindernear -Inf NaN -> NaN -ddrmn731 remaindernear -1000 NaN -> NaN -ddrmn732 remaindernear -1 NaN -> NaN -ddrmn733 remaindernear -0 -NaN -> -NaN -ddrmn734 remaindernear 0 NaN -> NaN -ddrmn735 remaindernear 1 -NaN -> -NaN -ddrmn736 remaindernear 1000 NaN -> NaN -ddrmn737 remaindernear Inf NaN -> NaN - -ddrmn741 remaindernear sNaN -Inf -> NaN Invalid_operation -ddrmn742 remaindernear sNaN -1000 -> NaN Invalid_operation -ddrmn743 remaindernear -sNaN -1 -> -NaN Invalid_operation -ddrmn744 remaindernear sNaN -0 -> NaN Invalid_operation -ddrmn745 remaindernear sNaN 0 -> NaN Invalid_operation -ddrmn746 remaindernear sNaN 1 -> NaN Invalid_operation -ddrmn747 remaindernear sNaN 1000 -> NaN Invalid_operation -ddrmn749 remaindernear sNaN NaN -> NaN Invalid_operation -ddrmn750 remaindernear sNaN sNaN -> NaN Invalid_operation -ddrmn751 remaindernear NaN sNaN -> NaN Invalid_operation -ddrmn752 remaindernear -Inf sNaN -> NaN Invalid_operation -ddrmn753 remaindernear -1000 sNaN -> NaN Invalid_operation -ddrmn754 remaindernear -1 sNaN -> NaN Invalid_operation -ddrmn755 remaindernear -0 sNaN -> NaN Invalid_operation -ddrmn756 remaindernear 0 sNaN -> NaN Invalid_operation -ddrmn757 remaindernear 1 sNaN -> NaN Invalid_operation -ddrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation -ddrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation - --- propagating NaNs -ddrmn760 remaindernear NaN1 NaN7 -> NaN1 -ddrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation -ddrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation -ddrmn763 remaindernear sNaN4 sNaN10 -> NaN4 Invalid_operation -ddrmn764 remaindernear 15 NaN11 -> NaN11 -ddrmn765 remaindernear NaN6 NaN12 -> NaN6 -ddrmn766 remaindernear Inf NaN13 -> NaN13 -ddrmn767 remaindernear NaN14 -Inf -> NaN14 -ddrmn768 remaindernear 0 NaN15 -> NaN15 -ddrmn769 remaindernear NaN16 -0 -> NaN16 - --- edge cases of impossible -ddrmn770 remaindernear 1234567890123456 10 -> -4 -ddrmn771 remaindernear 1234567890123456 1 -> 0 -ddrmn772 remaindernear 1234567890123456 0.1 -> NaN Division_impossible -ddrmn773 remaindernear 1234567890123456 0.01 -> NaN Division_impossible - --- long operand checks -ddrmn801 remaindernear 12345678000 100 -> 0 -ddrmn802 remaindernear 1 12345678000 -> 1 -ddrmn803 remaindernear 1234567800 10 -> 0 -ddrmn804 remaindernear 1 1234567800 -> 1 -ddrmn805 remaindernear 1234567890 10 -> 0 -ddrmn806 remaindernear 1 1234567890 -> 1 -ddrmn807 remaindernear 1234567891 10 -> 1 -ddrmn808 remaindernear 1 1234567891 -> 1 -ddrmn809 remaindernear 12345678901 100 -> 1 -ddrmn810 remaindernear 1 12345678901 -> 1 -ddrmn811 remaindernear 1234567896 10 -> -4 -ddrmn812 remaindernear 1 1234567896 -> 1 - -ddrmn821 remaindernear 12345678000 100 -> 0 -ddrmn822 remaindernear 1 12345678000 -> 1 -ddrmn823 remaindernear 1234567800 10 -> 0 -ddrmn824 remaindernear 1 1234567800 -> 1 -ddrmn825 remaindernear 1234567890 10 -> 0 -ddrmn826 remaindernear 1 1234567890 -> 1 -ddrmn827 remaindernear 1234567891 10 -> 1 -ddrmn828 remaindernear 1 1234567891 -> 1 -ddrmn829 remaindernear 12345678901 100 -> 1 -ddrmn830 remaindernear 1 12345678901 -> 1 -ddrmn831 remaindernear 1234567896 10 -> -4 -ddrmn832 remaindernear 1 1234567896 -> 1 - --- from divideint -ddrmn840 remaindernear 100000000.0 1 -> 0.0 -ddrmn841 remaindernear 100000000.4 1 -> 0.4 -ddrmn842 remaindernear 100000000.5 1 -> 0.5 -ddrmn843 remaindernear 100000000.9 1 -> -0.1 -ddrmn844 remaindernear 100000000.999 1 -> -0.001 -ddrmn850 remaindernear 100000003 5 -> -2 -ddrmn851 remaindernear 10000003 5 -> -2 -ddrmn852 remaindernear 1000003 5 -> -2 -ddrmn853 remaindernear 100003 5 -> -2 -ddrmn854 remaindernear 10003 5 -> -2 -ddrmn855 remaindernear 1003 5 -> -2 -ddrmn856 remaindernear 103 5 -> -2 -ddrmn857 remaindernear 13 5 -> -2 -ddrmn858 remaindernear 1 5 -> 1 - --- Vladimir's cases 1234567890123456 -ddrmn860 remaindernear 123.0e1 1000000000000000 -> 1230 -ddrmn861 remaindernear 1230 1000000000000000 -> 1230 -ddrmn862 remaindernear 12.3e2 1000000000000000 -> 1230 -ddrmn863 remaindernear 1.23e3 1000000000000000 -> 1230 -ddrmn864 remaindernear 123e1 1000000000000000 -> 1230 -ddrmn870 remaindernear 123e1 1000000000000000 -> 1230 -ddrmn871 remaindernear 123e1 100000000000000 -> 1230 -ddrmn872 remaindernear 123e1 10000000000000 -> 1230 -ddrmn873 remaindernear 123e1 1000000000000 -> 1230 -ddrmn874 remaindernear 123e1 100000000000 -> 1230 -ddrmn875 remaindernear 123e1 10000000000 -> 1230 -ddrmn876 remaindernear 123e1 1000000000 -> 1230 -ddrmn877 remaindernear 123e1 100000000 -> 1230 -ddrmn878 remaindernear 1230 100000000 -> 1230 -ddrmn879 remaindernear 123e1 10000000 -> 1230 -ddrmn880 remaindernear 123e1 1000000 -> 1230 -ddrmn881 remaindernear 123e1 100000 -> 1230 -ddrmn882 remaindernear 123e1 10000 -> 1230 -ddrmn883 remaindernear 123e1 1000 -> 230 -ddrmn884 remaindernear 123e1 100 -> 30 -ddrmn885 remaindernear 123e1 10 -> 0 -ddrmn886 remaindernear 123e1 1 -> 0 - -ddrmn890 remaindernear 123e1 2000000000000000 -> 1230 -ddrmn891 remaindernear 123e1 200000000000000 -> 1230 -ddrmn892 remaindernear 123e1 20000000000000 -> 1230 -ddrmn893 remaindernear 123e1 2000000000000 -> 1230 -ddrmn894 remaindernear 123e1 200000000000 -> 1230 -ddrmn895 remaindernear 123e1 20000000000 -> 1230 -ddrmn896 remaindernear 123e1 2000000000 -> 1230 -ddrmn897 remaindernear 123e1 200000000 -> 1230 -ddrmn899 remaindernear 123e1 20000000 -> 1230 -ddrmn900 remaindernear 123e1 2000000 -> 1230 -ddrmn901 remaindernear 123e1 200000 -> 1230 -ddrmn902 remaindernear 123e1 20000 -> 1230 -ddrmn903 remaindernear 123e1 2000 -> -770 -ddrmn904 remaindernear 123e1 200 -> 30 -ddrmn905 remaindernear 123e1 20 -> -10 -ddrmn906 remaindernear 123e1 2 -> 0 - -ddrmn910 remaindernear 123e1 5000000000000000 -> 1230 -ddrmn911 remaindernear 123e1 500000000000000 -> 1230 -ddrmn912 remaindernear 123e1 50000000000000 -> 1230 -ddrmn913 remaindernear 123e1 5000000000000 -> 1230 -ddrmn914 remaindernear 123e1 500000000000 -> 1230 -ddrmn915 remaindernear 123e1 50000000000 -> 1230 -ddrmn916 remaindernear 123e1 5000000000 -> 1230 -ddrmn917 remaindernear 123e1 500000000 -> 1230 -ddrmn919 remaindernear 123e1 50000000 -> 1230 -ddrmn920 remaindernear 123e1 5000000 -> 1230 -ddrmn921 remaindernear 123e1 500000 -> 1230 -ddrmn922 remaindernear 123e1 50000 -> 1230 -ddrmn923 remaindernear 123e1 5000 -> 1230 -ddrmn924 remaindernear 123e1 500 -> 230 -ddrmn925 remaindernear 123e1 50 -> -20 -ddrmn926 remaindernear 123e1 5 -> 0 - -ddrmn930 remaindernear 123e1 9000000000000000 -> 1230 -ddrmn931 remaindernear 123e1 900000000000000 -> 1230 -ddrmn932 remaindernear 123e1 90000000000000 -> 1230 -ddrmn933 remaindernear 123e1 9000000000000 -> 1230 -ddrmn934 remaindernear 123e1 900000000000 -> 1230 -ddrmn935 remaindernear 123e1 90000000000 -> 1230 -ddrmn936 remaindernear 123e1 9000000000 -> 1230 -ddrmn937 remaindernear 123e1 900000000 -> 1230 -ddrmn939 remaindernear 123e1 90000000 -> 1230 -ddrmn940 remaindernear 123e1 9000000 -> 1230 -ddrmn941 remaindernear 123e1 900000 -> 1230 -ddrmn942 remaindernear 123e1 90000 -> 1230 -ddrmn943 remaindernear 123e1 9000 -> 1230 -ddrmn944 remaindernear 123e1 900 -> 330 -ddrmn945 remaindernear 123e1 90 -> -30 -ddrmn946 remaindernear 123e1 9 -> -3 - -ddrmn950 remaindernear 123e1 1000000000000000 -> 1230 -ddrmn961 remaindernear 123e1 2999999999999999 -> 1230 -ddrmn962 remaindernear 123e1 3999999999999999 -> 1230 -ddrmn963 remaindernear 123e1 4999999999999999 -> 1230 -ddrmn964 remaindernear 123e1 5999999999999999 -> 1230 -ddrmn965 remaindernear 123e1 6999999999999999 -> 1230 -ddrmn966 remaindernear 123e1 7999999999999999 -> 1230 -ddrmn967 remaindernear 123e1 8999999999999999 -> 1230 -ddrmn968 remaindernear 123e1 9999999999999999 -> 1230 -ddrmn969 remaindernear 123e1 9876543210987654 -> 1230 - -ddrmn980 remaindernear 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally - - --- overflow and underflow tests [from divide] -ddrmn1051 remaindernear 1e+277 1e-311 -> NaN Division_impossible -ddrmn1052 remaindernear 1e+277 -1e-311 -> NaN Division_impossible -ddrmn1053 remaindernear -1e+277 1e-311 -> NaN Division_impossible -ddrmn1054 remaindernear -1e+277 -1e-311 -> NaN Division_impossible -ddrmn1055 remaindernear 1e-277 1e+311 -> 1E-277 -ddrmn1056 remaindernear 1e-277 -1e+311 -> 1E-277 -ddrmn1057 remaindernear -1e-277 1e+311 -> -1E-277 -ddrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277 - --- destructive subtract -ddrmn1100 remainderNear 1234567890123456 1.000000000000001 -> -0.234567890123455 -ddrmn1101 remainderNear 1234567890123456 1.00000000000001 -> -0.34567890123444 -ddrmn1102 remainderNear 1234567890123456 1.0000000000001 -> -0.4567890123333 -ddrmn1103 remainderNear 1234567890123455 4.000000000000001 -> -1.308641972530864 -ddrmn1104 remainderNear 1234567890123456 4.000000000000001 -> -0.308641972530864 -ddrmn1115 remainderNear 1234567890123456 4.9999999999999 -> 0.6913578024696 -ddrmn1116 remainderNear 1234567890123456 4.99999999999999 -> -1.53086421975308 -ddrmn1117 remainderNear 1234567890123456 4.999999999999999 -> 1.246913578024691 -ddrmn1118 remainderNear 1234567890123456 5.000000000000001 -> 0.753086421975309 -ddrmn1119 remainderNear 1234567890123456 5.00000000000001 -> -1.46913578024691 -ddrmn1110 remainderNear 1234567890123456 5.0000000000001 -> 1.3086421975314 - --- Null tests -ddrmn1000 remaindernear 10 # -> NaN Invalid_operation -ddrmn1001 remaindernear # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- ddRemainderNear.decTest -- decDouble remainder-near -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- sanity checks (as base, above) +ddrmn001 remaindernear 1 1 -> 0 +ddrmn002 remaindernear 2 1 -> 0 +ddrmn003 remaindernear 1 2 -> 1 +ddrmn004 remaindernear 2 2 -> 0 +ddrmn005 remaindernear 0 1 -> 0 +ddrmn006 remaindernear 0 2 -> 0 +ddrmn007 remaindernear 1 3 -> 1 +ddrmn008 remaindernear 2 3 -> -1 +ddrmn009 remaindernear 3 3 -> 0 + +ddrmn010 remaindernear 2.4 1 -> 0.4 +ddrmn011 remaindernear 2.4 -1 -> 0.4 +ddrmn012 remaindernear -2.4 1 -> -0.4 +ddrmn013 remaindernear -2.4 -1 -> -0.4 +ddrmn014 remaindernear 2.40 1 -> 0.40 +ddrmn015 remaindernear 2.400 1 -> 0.400 +ddrmn016 remaindernear 2.4 2 -> 0.4 +ddrmn017 remaindernear 2.400 2 -> 0.400 +ddrmn018 remaindernear 2. 2 -> 0 +ddrmn019 remaindernear 20 20 -> 0 + +ddrmn020 remaindernear 187 187 -> 0 +ddrmn021 remaindernear 5 2 -> 1 +ddrmn022 remaindernear 5 2.0 -> 1.0 +ddrmn023 remaindernear 5 2.000 -> 1.000 +ddrmn024 remaindernear 5 0.200 -> 0.000 +ddrmn025 remaindernear 5 0.200 -> 0.000 + +ddrmn030 remaindernear 1 2 -> 1 +ddrmn031 remaindernear 1 4 -> 1 +ddrmn032 remaindernear 1 8 -> 1 + +ddrmn033 remaindernear 1 16 -> 1 +ddrmn034 remaindernear 1 32 -> 1 +ddrmn035 remaindernear 1 64 -> 1 +ddrmn040 remaindernear 1 -2 -> 1 +ddrmn041 remaindernear 1 -4 -> 1 +ddrmn042 remaindernear 1 -8 -> 1 +ddrmn043 remaindernear 1 -16 -> 1 +ddrmn044 remaindernear 1 -32 -> 1 +ddrmn045 remaindernear 1 -64 -> 1 +ddrmn050 remaindernear -1 2 -> -1 +ddrmn051 remaindernear -1 4 -> -1 +ddrmn052 remaindernear -1 8 -> -1 +ddrmn053 remaindernear -1 16 -> -1 +ddrmn054 remaindernear -1 32 -> -1 +ddrmn055 remaindernear -1 64 -> -1 +ddrmn060 remaindernear -1 -2 -> -1 +ddrmn061 remaindernear -1 -4 -> -1 +ddrmn062 remaindernear -1 -8 -> -1 +ddrmn063 remaindernear -1 -16 -> -1 +ddrmn064 remaindernear -1 -32 -> -1 +ddrmn065 remaindernear -1 -64 -> -1 + +ddrmn066 remaindernear 9.9 1 -> -0.1 +ddrmn067 remaindernear 99.7 1 -> -0.3 +ddrmn068 remaindernear 999999999 1 -> 0 +ddrmn069 remaindernear 999999999.4 1 -> 0.4 +ddrmn070 remaindernear 999999999.5 1 -> -0.5 +ddrmn071 remaindernear 999999999.9 1 -> -0.1 +ddrmn072 remaindernear 999999999.999 1 -> -0.001 +ddrmn073 remaindernear 999999.999999 1 -> -0.000001 +ddrmn074 remaindernear 9 1 -> 0 +ddrmn075 remaindernear 9999999999999999 1 -> 0 +ddrmn076 remaindernear 9999999999999999 2 -> -1 +ddrmn077 remaindernear 9999999999999999 3 -> 0 +ddrmn078 remaindernear 9999999999999999 4 -> -1 + +ddrmn080 remaindernear 0. 1 -> 0 +ddrmn081 remaindernear .0 1 -> 0.0 +ddrmn082 remaindernear 0.00 1 -> 0.00 +ddrmn083 remaindernear 0.00E+9 1 -> 0 +ddrmn084 remaindernear 0.00E+3 1 -> 0 +ddrmn085 remaindernear 0.00E+2 1 -> 0 +ddrmn086 remaindernear 0.00E+1 1 -> 0.0 +ddrmn087 remaindernear 0.00E+0 1 -> 0.00 +ddrmn088 remaindernear 0.00E-0 1 -> 0.00 +ddrmn089 remaindernear 0.00E-1 1 -> 0.000 +ddrmn090 remaindernear 0.00E-2 1 -> 0.0000 +ddrmn091 remaindernear 0.00E-3 1 -> 0.00000 +ddrmn092 remaindernear 0.00E-4 1 -> 0.000000 +ddrmn093 remaindernear 0.00E-5 1 -> 0E-7 +ddrmn094 remaindernear 0.00E-6 1 -> 0E-8 +ddrmn095 remaindernear 0.0000E-50 1 -> 0E-54 + +-- Various flavours of remaindernear by 0 +ddrmn101 remaindernear 0 0 -> NaN Division_undefined +ddrmn102 remaindernear 0 -0 -> NaN Division_undefined +ddrmn103 remaindernear -0 0 -> NaN Division_undefined +ddrmn104 remaindernear -0 -0 -> NaN Division_undefined +ddrmn105 remaindernear 0.0E5 0 -> NaN Division_undefined +ddrmn106 remaindernear 0.000 0 -> NaN Division_undefined +-- [Some think this next group should be Division_by_zero exception, but +-- IEEE 854 is explicit that it is Invalid operation .. for +-- remainder-near, anyway] +ddrmn107 remaindernear 0.0001 0 -> NaN Invalid_operation +ddrmn108 remaindernear 0.01 0 -> NaN Invalid_operation +ddrmn109 remaindernear 0.1 0 -> NaN Invalid_operation +ddrmn110 remaindernear 1 0 -> NaN Invalid_operation +ddrmn111 remaindernear 1 0.0 -> NaN Invalid_operation +ddrmn112 remaindernear 10 0.0 -> NaN Invalid_operation +ddrmn113 remaindernear 1E+100 0.0 -> NaN Invalid_operation +ddrmn114 remaindernear 1E+380 0 -> NaN Invalid_operation +ddrmn115 remaindernear 0.0001 -0 -> NaN Invalid_operation +ddrmn116 remaindernear 0.01 -0 -> NaN Invalid_operation +ddrmn119 remaindernear 0.1 -0 -> NaN Invalid_operation +ddrmn120 remaindernear 1 -0 -> NaN Invalid_operation +ddrmn121 remaindernear 1 -0.0 -> NaN Invalid_operation +ddrmn122 remaindernear 10 -0.0 -> NaN Invalid_operation +ddrmn123 remaindernear 1E+100 -0.0 -> NaN Invalid_operation +ddrmn124 remaindernear 1E+384 -0 -> NaN Invalid_operation +-- and zeros on left +ddrmn130 remaindernear 0 1 -> 0 +ddrmn131 remaindernear 0 -1 -> 0 +ddrmn132 remaindernear 0.0 1 -> 0.0 +ddrmn133 remaindernear 0.0 -1 -> 0.0 +ddrmn134 remaindernear -0 1 -> -0 +ddrmn135 remaindernear -0 -1 -> -0 +ddrmn136 remaindernear -0.0 1 -> -0.0 +ddrmn137 remaindernear -0.0 -1 -> -0.0 + +-- 0.5ers +ddrmn143 remaindernear 0.5 2 -> 0.5 +ddrmn144 remaindernear 0.5 2.1 -> 0.5 +ddrmn145 remaindernear 0.5 2.01 -> 0.50 +ddrmn146 remaindernear 0.5 2.001 -> 0.500 +ddrmn147 remaindernear 0.50 2 -> 0.50 +ddrmn148 remaindernear 0.50 2.01 -> 0.50 +ddrmn149 remaindernear 0.50 2.001 -> 0.500 + +-- steadies +ddrmn150 remaindernear 1 1 -> 0 +ddrmn151 remaindernear 1 2 -> 1 +ddrmn152 remaindernear 1 3 -> 1 +ddrmn153 remaindernear 1 4 -> 1 +ddrmn154 remaindernear 1 5 -> 1 +ddrmn155 remaindernear 1 6 -> 1 +ddrmn156 remaindernear 1 7 -> 1 +ddrmn157 remaindernear 1 8 -> 1 +ddrmn158 remaindernear 1 9 -> 1 +ddrmn159 remaindernear 1 10 -> 1 +ddrmn160 remaindernear 1 1 -> 0 +ddrmn161 remaindernear 2 1 -> 0 +ddrmn162 remaindernear 3 1 -> 0 +ddrmn163 remaindernear 4 1 -> 0 +ddrmn164 remaindernear 5 1 -> 0 +ddrmn165 remaindernear 6 1 -> 0 +ddrmn166 remaindernear 7 1 -> 0 +ddrmn167 remaindernear 8 1 -> 0 +ddrmn168 remaindernear 9 1 -> 0 +ddrmn169 remaindernear 10 1 -> 0 + +-- some differences from remainder +ddrmn171 remaindernear 0.4 1.020 -> 0.400 +ddrmn172 remaindernear 0.50 1.020 -> 0.500 +ddrmn173 remaindernear 0.51 1.020 -> 0.510 +ddrmn174 remaindernear 0.52 1.020 -> -0.500 +ddrmn175 remaindernear 0.6 1.020 -> -0.420 + +-- More flavours of remaindernear by 0 +ddrmn201 remaindernear 0 0 -> NaN Division_undefined +ddrmn202 remaindernear 0.0E5 0 -> NaN Division_undefined +ddrmn203 remaindernear 0.000 0 -> NaN Division_undefined +ddrmn204 remaindernear 0.0001 0 -> NaN Invalid_operation +ddrmn205 remaindernear 0.01 0 -> NaN Invalid_operation +ddrmn206 remaindernear 0.1 0 -> NaN Invalid_operation +ddrmn207 remaindernear 1 0 -> NaN Invalid_operation +ddrmn208 remaindernear 1 0.0 -> NaN Invalid_operation +ddrmn209 remaindernear 10 0.0 -> NaN Invalid_operation +ddrmn210 remaindernear 1E+100 0.0 -> NaN Invalid_operation +ddrmn211 remaindernear 1E+380 0 -> NaN Invalid_operation + +-- tests from the extended specification +ddrmn221 remaindernear 2.1 3 -> -0.9 +ddrmn222 remaindernear 10 6 -> -2 +ddrmn223 remaindernear 10 3 -> 1 +ddrmn224 remaindernear -10 3 -> -1 +ddrmn225 remaindernear 10.2 1 -> 0.2 +ddrmn226 remaindernear 10 0.3 -> 0.1 +ddrmn227 remaindernear 3.6 1.3 -> -0.3 + +-- some differences from remainder +ddrmn231 remaindernear -0.4 1.020 -> -0.400 +ddrmn232 remaindernear -0.50 1.020 -> -0.500 +ddrmn233 remaindernear -0.51 1.020 -> -0.510 +ddrmn234 remaindernear -0.52 1.020 -> 0.500 +ddrmn235 remaindernear -0.6 1.020 -> 0.420 + +-- high Xs +ddrmn240 remaindernear 1E+2 1.00 -> 0.00 + +-- ddrmn3xx are from DiagBigDecimal +ddrmn301 remaindernear 1 3 -> 1 +ddrmn302 remaindernear 5 5 -> 0 +ddrmn303 remaindernear 13 10 -> 3 +ddrmn304 remaindernear 13 50 -> 13 +ddrmn305 remaindernear 13 100 -> 13 +ddrmn306 remaindernear 13 1000 -> 13 +ddrmn307 remaindernear .13 1 -> 0.13 +ddrmn308 remaindernear 0.133 1 -> 0.133 +ddrmn309 remaindernear 0.1033 1 -> 0.1033 +ddrmn310 remaindernear 1.033 1 -> 0.033 +ddrmn311 remaindernear 10.33 1 -> 0.33 +ddrmn312 remaindernear 10.33 10 -> 0.33 +ddrmn313 remaindernear 103.3 1 -> 0.3 +ddrmn314 remaindernear 133 10 -> 3 +ddrmn315 remaindernear 1033 10 -> 3 +ddrmn316 remaindernear 1033 50 -> -17 +ddrmn317 remaindernear 101.0 3 -> -1.0 +ddrmn318 remaindernear 102.0 3 -> 0.0 +ddrmn319 remaindernear 103.0 3 -> 1.0 +ddrmn320 remaindernear 2.40 1 -> 0.40 +ddrmn321 remaindernear 2.400 1 -> 0.400 +ddrmn322 remaindernear 2.4 1 -> 0.4 +ddrmn323 remaindernear 2.4 2 -> 0.4 +ddrmn324 remaindernear 2.400 2 -> 0.400 +ddrmn325 remaindernear 1 0.3 -> 0.1 +ddrmn326 remaindernear 1 0.30 -> 0.10 +ddrmn327 remaindernear 1 0.300 -> 0.100 +ddrmn328 remaindernear 1 0.3000 -> 0.1000 +ddrmn329 remaindernear 1.0 0.3 -> 0.1 +ddrmn330 remaindernear 1.00 0.3 -> 0.10 +ddrmn331 remaindernear 1.000 0.3 -> 0.100 +ddrmn332 remaindernear 1.0000 0.3 -> 0.1000 +ddrmn333 remaindernear 0.5 2 -> 0.5 +ddrmn334 remaindernear 0.5 2.1 -> 0.5 +ddrmn335 remaindernear 0.5 2.01 -> 0.50 +ddrmn336 remaindernear 0.5 2.001 -> 0.500 +ddrmn337 remaindernear 0.50 2 -> 0.50 +ddrmn338 remaindernear 0.50 2.01 -> 0.50 +ddrmn339 remaindernear 0.50 2.001 -> 0.500 + +ddrmn340 remaindernear 0.5 0.5000001 -> -1E-7 +ddrmn341 remaindernear 0.5 0.50000001 -> -1E-8 +ddrmn342 remaindernear 0.5 0.500000001 -> -1E-9 +ddrmn343 remaindernear 0.5 0.5000000001 -> -1E-10 +ddrmn344 remaindernear 0.5 0.50000000001 -> -1E-11 +ddrmn345 remaindernear 0.5 0.4999999 -> 1E-7 +ddrmn346 remaindernear 0.5 0.49999999 -> 1E-8 +ddrmn347 remaindernear 0.5 0.499999999 -> 1E-9 +ddrmn348 remaindernear 0.5 0.4999999999 -> 1E-10 +ddrmn349 remaindernear 0.5 0.49999999999 -> 1E-11 +ddrmn350 remaindernear 0.5 0.499999999999 -> 1E-12 + +ddrmn351 remaindernear 0.03 7 -> 0.03 +ddrmn352 remaindernear 5 2 -> 1 +ddrmn353 remaindernear 4.1 2 -> 0.1 +ddrmn354 remaindernear 4.01 2 -> 0.01 +ddrmn355 remaindernear 4.001 2 -> 0.001 +ddrmn356 remaindernear 4.0001 2 -> 0.0001 +ddrmn357 remaindernear 4.00001 2 -> 0.00001 +ddrmn358 remaindernear 4.000001 2 -> 0.000001 +ddrmn359 remaindernear 4.0000001 2 -> 1E-7 + +ddrmn360 remaindernear 1.2 0.7345 -> -0.2690 +ddrmn361 remaindernear 0.8 12 -> 0.8 +ddrmn362 remaindernear 0.8 0.2 -> 0.0 +ddrmn363 remaindernear 0.8 0.3 -> -0.1 +ddrmn364 remaindernear 0.800 12 -> 0.800 +ddrmn365 remaindernear 0.800 1.7 -> 0.800 +ddrmn366 remaindernear 2.400 2 -> 0.400 + +-- round to even +ddrmn371 remaindernear 121 2 -> 1 +ddrmn372 remaindernear 122 2 -> 0 +ddrmn373 remaindernear 123 2 -> -1 +ddrmn374 remaindernear 124 2 -> 0 +ddrmn375 remaindernear 125 2 -> 1 +ddrmn376 remaindernear 126 2 -> 0 +ddrmn377 remaindernear 127 2 -> -1 + +ddrmn381 remaindernear 12345 1 -> 0 +ddrmn382 remaindernear 12345 1.0001 -> -0.2344 +ddrmn383 remaindernear 12345 1.001 -> -0.333 +ddrmn384 remaindernear 12345 1.01 -> -0.23 +ddrmn385 remaindernear 12345 1.1 -> -0.3 +ddrmn386 remaindernear 12355 4 -> -1 +ddrmn387 remaindernear 12345 4 -> 1 +ddrmn388 remaindernear 12355 4.0001 -> -1.3089 +ddrmn389 remaindernear 12345 4.0001 -> 0.6914 +ddrmn390 remaindernear 12345 4.9 -> 1.9 +ddrmn391 remaindernear 12345 4.99 -> -0.26 +ddrmn392 remaindernear 12345 4.999 -> 2.469 +ddrmn393 remaindernear 12345 4.9999 -> 0.2469 +ddrmn394 remaindernear 12345 5 -> 0 +ddrmn395 remaindernear 12345 5.0001 -> -0.2469 +ddrmn396 remaindernear 12345 5.001 -> -2.469 +ddrmn397 remaindernear 12345 5.01 -> 0.36 +ddrmn398 remaindernear 12345 5.1 -> -2.1 + +-- the nasty division-by-1 cases +ddrmn401 remaindernear 0.4 1 -> 0.4 +ddrmn402 remaindernear 0.45 1 -> 0.45 +ddrmn403 remaindernear 0.455 1 -> 0.455 +ddrmn404 remaindernear 0.4555 1 -> 0.4555 +ddrmn405 remaindernear 0.45555 1 -> 0.45555 +ddrmn406 remaindernear 0.455555 1 -> 0.455555 +ddrmn407 remaindernear 0.4555555 1 -> 0.4555555 +ddrmn408 remaindernear 0.45555555 1 -> 0.45555555 +ddrmn409 remaindernear 0.455555555 1 -> 0.455555555 +-- with spill... [412 exercises sticktab loop] +ddrmn411 remaindernear 0.5 1 -> 0.5 +ddrmn412 remaindernear 0.55 1 -> -0.45 +ddrmn413 remaindernear 0.555 1 -> -0.445 +ddrmn414 remaindernear 0.5555 1 -> -0.4445 +ddrmn415 remaindernear 0.55555 1 -> -0.44445 +ddrmn416 remaindernear 0.555555 1 -> -0.444445 +ddrmn417 remaindernear 0.5555555 1 -> -0.4444445 +ddrmn418 remaindernear 0.55555555 1 -> -0.44444445 +ddrmn419 remaindernear 0.555555555 1 -> -0.444444445 + +-- folddowns +ddrmn421 remaindernear 1E+384 1 -> NaN Division_impossible +ddrmn422 remaindernear 1E+384 1E+383 -> 0E+369 Clamped +ddrmn423 remaindernear 1E+384 2E+383 -> 0E+369 Clamped +ddrmn424 remaindernear 1E+384 3E+383 -> 1.00000000000000E+383 Clamped +ddrmn425 remaindernear 1E+384 4E+383 -> 2.00000000000000E+383 Clamped +ddrmn426 remaindernear 1E+384 5E+383 -> 0E+369 Clamped +ddrmn427 remaindernear 1E+384 6E+383 -> -2.00000000000000E+383 Clamped +ddrmn428 remaindernear 1E+384 7E+383 -> 3.00000000000000E+383 Clamped +ddrmn429 remaindernear 1E+384 8E+383 -> 2.00000000000000E+383 Clamped +ddrmn430 remaindernear 1E+384 9E+383 -> 1.00000000000000E+383 Clamped +-- tinies +ddrmn431 remaindernear 1E-397 1E-398 -> 0E-398 +ddrmn432 remaindernear 1E-397 2E-398 -> 0E-398 +ddrmn433 remaindernear 1E-397 3E-398 -> 1E-398 Subnormal +ddrmn434 remaindernear 1E-397 4E-398 -> 2E-398 Subnormal +ddrmn435 remaindernear 1E-397 5E-398 -> 0E-398 +ddrmn436 remaindernear 1E-397 6E-398 -> -2E-398 Subnormal +ddrmn437 remaindernear 1E-397 7E-398 -> 3E-398 Subnormal +ddrmn438 remaindernear 1E-397 8E-398 -> 2E-398 Subnormal +ddrmn439 remaindernear 1E-397 9E-398 -> 1E-398 Subnormal +ddrmn440 remaindernear 1E-397 10E-398 -> 0E-398 +ddrmn441 remaindernear 1E-397 11E-398 -> -1E-398 Subnormal +ddrmn442 remaindernear 100E-397 11E-398 -> -1E-398 Subnormal +ddrmn443 remaindernear 100E-397 20E-398 -> 0E-398 +ddrmn444 remaindernear 100E-397 21E-398 -> -8E-398 Subnormal +ddrmn445 remaindernear 100E-397 30E-398 -> 1.0E-397 Subnormal + +-- zero signs +ddrmn650 remaindernear 1 1 -> 0 +ddrmn651 remaindernear -1 1 -> -0 +ddrmn652 remaindernear 1 -1 -> 0 +ddrmn653 remaindernear -1 -1 -> -0 +ddrmn654 remaindernear 0 1 -> 0 +ddrmn655 remaindernear -0 1 -> -0 +ddrmn656 remaindernear 0 -1 -> 0 +ddrmn657 remaindernear -0 -1 -> -0 +ddrmn658 remaindernear 0.00 1 -> 0.00 +ddrmn659 remaindernear -0.00 1 -> -0.00 + +-- Specials +ddrmn680 remaindernear Inf -Inf -> NaN Invalid_operation +ddrmn681 remaindernear Inf -1000 -> NaN Invalid_operation +ddrmn682 remaindernear Inf -1 -> NaN Invalid_operation +ddrmn683 remaindernear Inf 0 -> NaN Invalid_operation +ddrmn684 remaindernear Inf -0 -> NaN Invalid_operation +ddrmn685 remaindernear Inf 1 -> NaN Invalid_operation +ddrmn686 remaindernear Inf 1000 -> NaN Invalid_operation +ddrmn687 remaindernear Inf Inf -> NaN Invalid_operation +ddrmn688 remaindernear -1000 Inf -> -1000 +ddrmn689 remaindernear -Inf Inf -> NaN Invalid_operation +ddrmn691 remaindernear -1 Inf -> -1 +ddrmn692 remaindernear 0 Inf -> 0 +ddrmn693 remaindernear -0 Inf -> -0 +ddrmn694 remaindernear 1 Inf -> 1 +ddrmn695 remaindernear 1000 Inf -> 1000 +ddrmn696 remaindernear Inf Inf -> NaN Invalid_operation + +ddrmn700 remaindernear -Inf -Inf -> NaN Invalid_operation +ddrmn701 remaindernear -Inf -1000 -> NaN Invalid_operation +ddrmn702 remaindernear -Inf -1 -> NaN Invalid_operation +ddrmn703 remaindernear -Inf -0 -> NaN Invalid_operation +ddrmn704 remaindernear -Inf 0 -> NaN Invalid_operation +ddrmn705 remaindernear -Inf 1 -> NaN Invalid_operation +ddrmn706 remaindernear -Inf 1000 -> NaN Invalid_operation +ddrmn707 remaindernear -Inf Inf -> NaN Invalid_operation +ddrmn708 remaindernear -Inf -Inf -> NaN Invalid_operation +ddrmn709 remaindernear -1000 Inf -> -1000 +ddrmn710 remaindernear -1 -Inf -> -1 +ddrmn711 remaindernear -0 -Inf -> -0 +ddrmn712 remaindernear 0 -Inf -> 0 +ddrmn713 remaindernear 1 -Inf -> 1 +ddrmn714 remaindernear 1000 -Inf -> 1000 +ddrmn715 remaindernear Inf -Inf -> NaN Invalid_operation + +ddrmn721 remaindernear NaN -Inf -> NaN +ddrmn722 remaindernear NaN -1000 -> NaN +ddrmn723 remaindernear NaN -1 -> NaN +ddrmn724 remaindernear NaN -0 -> NaN +ddrmn725 remaindernear -NaN 0 -> -NaN +ddrmn726 remaindernear NaN 1 -> NaN +ddrmn727 remaindernear NaN 1000 -> NaN +ddrmn728 remaindernear NaN Inf -> NaN +ddrmn729 remaindernear NaN -NaN -> NaN +ddrmn730 remaindernear -Inf NaN -> NaN +ddrmn731 remaindernear -1000 NaN -> NaN +ddrmn732 remaindernear -1 NaN -> NaN +ddrmn733 remaindernear -0 -NaN -> -NaN +ddrmn734 remaindernear 0 NaN -> NaN +ddrmn735 remaindernear 1 -NaN -> -NaN +ddrmn736 remaindernear 1000 NaN -> NaN +ddrmn737 remaindernear Inf NaN -> NaN + +ddrmn741 remaindernear sNaN -Inf -> NaN Invalid_operation +ddrmn742 remaindernear sNaN -1000 -> NaN Invalid_operation +ddrmn743 remaindernear -sNaN -1 -> -NaN Invalid_operation +ddrmn744 remaindernear sNaN -0 -> NaN Invalid_operation +ddrmn745 remaindernear sNaN 0 -> NaN Invalid_operation +ddrmn746 remaindernear sNaN 1 -> NaN Invalid_operation +ddrmn747 remaindernear sNaN 1000 -> NaN Invalid_operation +ddrmn749 remaindernear sNaN NaN -> NaN Invalid_operation +ddrmn750 remaindernear sNaN sNaN -> NaN Invalid_operation +ddrmn751 remaindernear NaN sNaN -> NaN Invalid_operation +ddrmn752 remaindernear -Inf sNaN -> NaN Invalid_operation +ddrmn753 remaindernear -1000 sNaN -> NaN Invalid_operation +ddrmn754 remaindernear -1 sNaN -> NaN Invalid_operation +ddrmn755 remaindernear -0 sNaN -> NaN Invalid_operation +ddrmn756 remaindernear 0 sNaN -> NaN Invalid_operation +ddrmn757 remaindernear 1 sNaN -> NaN Invalid_operation +ddrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation +ddrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation + +-- propagating NaNs +ddrmn760 remaindernear NaN1 NaN7 -> NaN1 +ddrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation +ddrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation +ddrmn763 remaindernear sNaN4 sNaN10 -> NaN4 Invalid_operation +ddrmn764 remaindernear 15 NaN11 -> NaN11 +ddrmn765 remaindernear NaN6 NaN12 -> NaN6 +ddrmn766 remaindernear Inf NaN13 -> NaN13 +ddrmn767 remaindernear NaN14 -Inf -> NaN14 +ddrmn768 remaindernear 0 NaN15 -> NaN15 +ddrmn769 remaindernear NaN16 -0 -> NaN16 + +-- edge cases of impossible +ddrmn770 remaindernear 1234567890123456 10 -> -4 +ddrmn771 remaindernear 1234567890123456 1 -> 0 +ddrmn772 remaindernear 1234567890123456 0.1 -> NaN Division_impossible +ddrmn773 remaindernear 1234567890123456 0.01 -> NaN Division_impossible + +-- long operand checks +ddrmn801 remaindernear 12345678000 100 -> 0 +ddrmn802 remaindernear 1 12345678000 -> 1 +ddrmn803 remaindernear 1234567800 10 -> 0 +ddrmn804 remaindernear 1 1234567800 -> 1 +ddrmn805 remaindernear 1234567890 10 -> 0 +ddrmn806 remaindernear 1 1234567890 -> 1 +ddrmn807 remaindernear 1234567891 10 -> 1 +ddrmn808 remaindernear 1 1234567891 -> 1 +ddrmn809 remaindernear 12345678901 100 -> 1 +ddrmn810 remaindernear 1 12345678901 -> 1 +ddrmn811 remaindernear 1234567896 10 -> -4 +ddrmn812 remaindernear 1 1234567896 -> 1 + +ddrmn821 remaindernear 12345678000 100 -> 0 +ddrmn822 remaindernear 1 12345678000 -> 1 +ddrmn823 remaindernear 1234567800 10 -> 0 +ddrmn824 remaindernear 1 1234567800 -> 1 +ddrmn825 remaindernear 1234567890 10 -> 0 +ddrmn826 remaindernear 1 1234567890 -> 1 +ddrmn827 remaindernear 1234567891 10 -> 1 +ddrmn828 remaindernear 1 1234567891 -> 1 +ddrmn829 remaindernear 12345678901 100 -> 1 +ddrmn830 remaindernear 1 12345678901 -> 1 +ddrmn831 remaindernear 1234567896 10 -> -4 +ddrmn832 remaindernear 1 1234567896 -> 1 + +-- from divideint +ddrmn840 remaindernear 100000000.0 1 -> 0.0 +ddrmn841 remaindernear 100000000.4 1 -> 0.4 +ddrmn842 remaindernear 100000000.5 1 -> 0.5 +ddrmn843 remaindernear 100000000.9 1 -> -0.1 +ddrmn844 remaindernear 100000000.999 1 -> -0.001 +ddrmn850 remaindernear 100000003 5 -> -2 +ddrmn851 remaindernear 10000003 5 -> -2 +ddrmn852 remaindernear 1000003 5 -> -2 +ddrmn853 remaindernear 100003 5 -> -2 +ddrmn854 remaindernear 10003 5 -> -2 +ddrmn855 remaindernear 1003 5 -> -2 +ddrmn856 remaindernear 103 5 -> -2 +ddrmn857 remaindernear 13 5 -> -2 +ddrmn858 remaindernear 1 5 -> 1 + +-- Vladimir's cases 1234567890123456 +ddrmn860 remaindernear 123.0e1 1000000000000000 -> 1230 +ddrmn861 remaindernear 1230 1000000000000000 -> 1230 +ddrmn862 remaindernear 12.3e2 1000000000000000 -> 1230 +ddrmn863 remaindernear 1.23e3 1000000000000000 -> 1230 +ddrmn864 remaindernear 123e1 1000000000000000 -> 1230 +ddrmn870 remaindernear 123e1 1000000000000000 -> 1230 +ddrmn871 remaindernear 123e1 100000000000000 -> 1230 +ddrmn872 remaindernear 123e1 10000000000000 -> 1230 +ddrmn873 remaindernear 123e1 1000000000000 -> 1230 +ddrmn874 remaindernear 123e1 100000000000 -> 1230 +ddrmn875 remaindernear 123e1 10000000000 -> 1230 +ddrmn876 remaindernear 123e1 1000000000 -> 1230 +ddrmn877 remaindernear 123e1 100000000 -> 1230 +ddrmn878 remaindernear 1230 100000000 -> 1230 +ddrmn879 remaindernear 123e1 10000000 -> 1230 +ddrmn880 remaindernear 123e1 1000000 -> 1230 +ddrmn881 remaindernear 123e1 100000 -> 1230 +ddrmn882 remaindernear 123e1 10000 -> 1230 +ddrmn883 remaindernear 123e1 1000 -> 230 +ddrmn884 remaindernear 123e1 100 -> 30 +ddrmn885 remaindernear 123e1 10 -> 0 +ddrmn886 remaindernear 123e1 1 -> 0 + +ddrmn890 remaindernear 123e1 2000000000000000 -> 1230 +ddrmn891 remaindernear 123e1 200000000000000 -> 1230 +ddrmn892 remaindernear 123e1 20000000000000 -> 1230 +ddrmn893 remaindernear 123e1 2000000000000 -> 1230 +ddrmn894 remaindernear 123e1 200000000000 -> 1230 +ddrmn895 remaindernear 123e1 20000000000 -> 1230 +ddrmn896 remaindernear 123e1 2000000000 -> 1230 +ddrmn897 remaindernear 123e1 200000000 -> 1230 +ddrmn899 remaindernear 123e1 20000000 -> 1230 +ddrmn900 remaindernear 123e1 2000000 -> 1230 +ddrmn901 remaindernear 123e1 200000 -> 1230 +ddrmn902 remaindernear 123e1 20000 -> 1230 +ddrmn903 remaindernear 123e1 2000 -> -770 +ddrmn904 remaindernear 123e1 200 -> 30 +ddrmn905 remaindernear 123e1 20 -> -10 +ddrmn906 remaindernear 123e1 2 -> 0 + +ddrmn910 remaindernear 123e1 5000000000000000 -> 1230 +ddrmn911 remaindernear 123e1 500000000000000 -> 1230 +ddrmn912 remaindernear 123e1 50000000000000 -> 1230 +ddrmn913 remaindernear 123e1 5000000000000 -> 1230 +ddrmn914 remaindernear 123e1 500000000000 -> 1230 +ddrmn915 remaindernear 123e1 50000000000 -> 1230 +ddrmn916 remaindernear 123e1 5000000000 -> 1230 +ddrmn917 remaindernear 123e1 500000000 -> 1230 +ddrmn919 remaindernear 123e1 50000000 -> 1230 +ddrmn920 remaindernear 123e1 5000000 -> 1230 +ddrmn921 remaindernear 123e1 500000 -> 1230 +ddrmn922 remaindernear 123e1 50000 -> 1230 +ddrmn923 remaindernear 123e1 5000 -> 1230 +ddrmn924 remaindernear 123e1 500 -> 230 +ddrmn925 remaindernear 123e1 50 -> -20 +ddrmn926 remaindernear 123e1 5 -> 0 + +ddrmn930 remaindernear 123e1 9000000000000000 -> 1230 +ddrmn931 remaindernear 123e1 900000000000000 -> 1230 +ddrmn932 remaindernear 123e1 90000000000000 -> 1230 +ddrmn933 remaindernear 123e1 9000000000000 -> 1230 +ddrmn934 remaindernear 123e1 900000000000 -> 1230 +ddrmn935 remaindernear 123e1 90000000000 -> 1230 +ddrmn936 remaindernear 123e1 9000000000 -> 1230 +ddrmn937 remaindernear 123e1 900000000 -> 1230 +ddrmn939 remaindernear 123e1 90000000 -> 1230 +ddrmn940 remaindernear 123e1 9000000 -> 1230 +ddrmn941 remaindernear 123e1 900000 -> 1230 +ddrmn942 remaindernear 123e1 90000 -> 1230 +ddrmn943 remaindernear 123e1 9000 -> 1230 +ddrmn944 remaindernear 123e1 900 -> 330 +ddrmn945 remaindernear 123e1 90 -> -30 +ddrmn946 remaindernear 123e1 9 -> -3 + +ddrmn950 remaindernear 123e1 1000000000000000 -> 1230 +ddrmn961 remaindernear 123e1 2999999999999999 -> 1230 +ddrmn962 remaindernear 123e1 3999999999999999 -> 1230 +ddrmn963 remaindernear 123e1 4999999999999999 -> 1230 +ddrmn964 remaindernear 123e1 5999999999999999 -> 1230 +ddrmn965 remaindernear 123e1 6999999999999999 -> 1230 +ddrmn966 remaindernear 123e1 7999999999999999 -> 1230 +ddrmn967 remaindernear 123e1 8999999999999999 -> 1230 +ddrmn968 remaindernear 123e1 9999999999999999 -> 1230 +ddrmn969 remaindernear 123e1 9876543210987654 -> 1230 + +ddrmn980 remaindernear 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally + + +-- overflow and underflow tests [from divide] +ddrmn1051 remaindernear 1e+277 1e-311 -> NaN Division_impossible +ddrmn1052 remaindernear 1e+277 -1e-311 -> NaN Division_impossible +ddrmn1053 remaindernear -1e+277 1e-311 -> NaN Division_impossible +ddrmn1054 remaindernear -1e+277 -1e-311 -> NaN Division_impossible +ddrmn1055 remaindernear 1e-277 1e+311 -> 1E-277 +ddrmn1056 remaindernear 1e-277 -1e+311 -> 1E-277 +ddrmn1057 remaindernear -1e-277 1e+311 -> -1E-277 +ddrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277 + +-- destructive subtract +ddrmn1100 remainderNear 1234567890123456 1.000000000000001 -> -0.234567890123455 +ddrmn1101 remainderNear 1234567890123456 1.00000000000001 -> -0.34567890123444 +ddrmn1102 remainderNear 1234567890123456 1.0000000000001 -> -0.4567890123333 +ddrmn1103 remainderNear 1234567890123455 4.000000000000001 -> -1.308641972530864 +ddrmn1104 remainderNear 1234567890123456 4.000000000000001 -> -0.308641972530864 +ddrmn1115 remainderNear 1234567890123456 4.9999999999999 -> 0.6913578024696 +ddrmn1116 remainderNear 1234567890123456 4.99999999999999 -> -1.53086421975308 +ddrmn1117 remainderNear 1234567890123456 4.999999999999999 -> 1.246913578024691 +ddrmn1118 remainderNear 1234567890123456 5.000000000000001 -> 0.753086421975309 +ddrmn1119 remainderNear 1234567890123456 5.00000000000001 -> -1.46913578024691 +ddrmn1110 remainderNear 1234567890123456 5.0000000000001 -> 1.3086421975314 + +-- Null tests +ddrmn1000 remaindernear 10 # -> NaN Invalid_operation +ddrmn1001 remaindernear # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/ddRotate.decTest b/Lib/test/decimaltestdata/ddRotate.decTest index 8b0fe2620de..87eeb1c0f1b 100644 --- a/Lib/test/decimaltestdata/ddRotate.decTest +++ b/Lib/test/decimaltestdata/ddRotate.decTest @@ -1,262 +1,262 @@ ------------------------------------------------------------------------- --- ddRotate.decTest -- rotate a decDouble coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddrot001 rotate 0 0 -> 0 -ddrot002 rotate 0 2 -> 0 -ddrot003 rotate 1 2 -> 100 -ddrot004 rotate 1 15 -> 1000000000000000 -ddrot005 rotate 1 16 -> 1 -ddrot006 rotate 1 -1 -> 1000000000000000 -ddrot007 rotate 0 -2 -> 0 -ddrot008 rotate 1234567890123456 -1 -> 6123456789012345 -ddrot009 rotate 1234567890123456 -15 -> 2345678901234561 -ddrot010 rotate 1234567890123456 -16 -> 1234567890123456 -ddrot011 rotate 9934567890123456 -15 -> 9345678901234569 -ddrot012 rotate 9934567890123456 -16 -> 9934567890123456 - --- rhs must be an integer -ddrot015 rotate 1 1.5 -> NaN Invalid_operation -ddrot016 rotate 1 1.0 -> NaN Invalid_operation -ddrot017 rotate 1 0.1 -> NaN Invalid_operation -ddrot018 rotate 1 0.0 -> NaN Invalid_operation -ddrot019 rotate 1 1E+1 -> NaN Invalid_operation -ddrot020 rotate 1 1E+99 -> NaN Invalid_operation -ddrot021 rotate 1 Inf -> NaN Invalid_operation -ddrot022 rotate 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -ddrot025 rotate 1 -1000 -> NaN Invalid_operation -ddrot026 rotate 1 -17 -> NaN Invalid_operation -ddrot027 rotate 1 17 -> NaN Invalid_operation -ddrot028 rotate 1 1000 -> NaN Invalid_operation - --- full pattern -ddrot030 rotate 1234567890123456 -16 -> 1234567890123456 -ddrot031 rotate 1234567890123456 -15 -> 2345678901234561 -ddrot032 rotate 1234567890123456 -14 -> 3456789012345612 -ddrot033 rotate 1234567890123456 -13 -> 4567890123456123 -ddrot034 rotate 1234567890123456 -12 -> 5678901234561234 -ddrot035 rotate 1234567890123456 -11 -> 6789012345612345 -ddrot036 rotate 1234567890123456 -10 -> 7890123456123456 -ddrot037 rotate 1234567890123456 -9 -> 8901234561234567 -ddrot038 rotate 1234567890123456 -8 -> 9012345612345678 -ddrot039 rotate 1234567890123456 -7 -> 123456123456789 -ddrot040 rotate 1234567890123456 -6 -> 1234561234567890 -ddrot041 rotate 1234567890123456 -5 -> 2345612345678901 -ddrot042 rotate 1234567890123456 -4 -> 3456123456789012 -ddrot043 rotate 1234567890123456 -3 -> 4561234567890123 -ddrot044 rotate 1234567890123456 -2 -> 5612345678901234 -ddrot045 rotate 1234567890123456 -1 -> 6123456789012345 -ddrot046 rotate 1234567890123456 -0 -> 1234567890123456 - -ddrot047 rotate 1234567890123456 +0 -> 1234567890123456 -ddrot048 rotate 1234567890123456 +1 -> 2345678901234561 -ddrot049 rotate 1234567890123456 +2 -> 3456789012345612 -ddrot050 rotate 1234567890123456 +3 -> 4567890123456123 -ddrot051 rotate 1234567890123456 +4 -> 5678901234561234 -ddrot052 rotate 1234567890123456 +5 -> 6789012345612345 -ddrot053 rotate 1234567890123456 +6 -> 7890123456123456 -ddrot054 rotate 1234567890123456 +7 -> 8901234561234567 -ddrot055 rotate 1234567890123456 +8 -> 9012345612345678 -ddrot056 rotate 1234567890123456 +9 -> 123456123456789 -ddrot057 rotate 1234567890123456 +10 -> 1234561234567890 -ddrot058 rotate 1234567890123456 +11 -> 2345612345678901 -ddrot059 rotate 1234567890123456 +12 -> 3456123456789012 -ddrot060 rotate 1234567890123456 +13 -> 4561234567890123 -ddrot061 rotate 1234567890123456 +14 -> 5612345678901234 -ddrot062 rotate 1234567890123456 +15 -> 6123456789012345 -ddrot063 rotate 1234567890123456 +16 -> 1234567890123456 - --- zeros -ddrot070 rotate 0E-10 +9 -> 0E-10 -ddrot071 rotate 0E-10 -9 -> 0E-10 -ddrot072 rotate 0.000 +9 -> 0.000 -ddrot073 rotate 0.000 -9 -> 0.000 -ddrot074 rotate 0E+10 +9 -> 0E+10 -ddrot075 rotate 0E+10 -9 -> 0E+10 -ddrot076 rotate -0E-10 +9 -> -0E-10 -ddrot077 rotate -0E-10 -9 -> -0E-10 -ddrot078 rotate -0.000 +9 -> -0.000 -ddrot079 rotate -0.000 -9 -> -0.000 -ddrot080 rotate -0E+10 +9 -> -0E+10 -ddrot081 rotate -0E+10 -9 -> -0E+10 - --- Nmax, Nmin, Ntiny -ddrot141 rotate 9.999999999999999E+384 -1 -> 9.999999999999999E+384 -ddrot142 rotate 9.999999999999999E+384 -15 -> 9.999999999999999E+384 -ddrot143 rotate 9.999999999999999E+384 1 -> 9.999999999999999E+384 -ddrot144 rotate 9.999999999999999E+384 15 -> 9.999999999999999E+384 -ddrot145 rotate 1E-383 -1 -> 1.000000000000000E-368 -ddrot146 rotate 1E-383 -15 -> 1.0E-382 -ddrot147 rotate 1E-383 1 -> 1.0E-382 -ddrot148 rotate 1E-383 15 -> 1.000000000000000E-368 -ddrot151 rotate 1.000000000000000E-383 -1 -> 1.00000000000000E-384 -ddrot152 rotate 1.000000000000000E-383 -15 -> 1E-398 -ddrot153 rotate 1.000000000000000E-383 1 -> 1E-398 -ddrot154 rotate 1.000000000000000E-383 15 -> 1.00000000000000E-384 -ddrot155 rotate 9.000000000000000E-383 -1 -> 9.00000000000000E-384 -ddrot156 rotate 9.000000000000000E-383 -15 -> 9E-398 -ddrot157 rotate 9.000000000000000E-383 1 -> 9E-398 -ddrot158 rotate 9.000000000000000E-383 15 -> 9.00000000000000E-384 -ddrot160 rotate 1E-398 -1 -> 1.000000000000000E-383 -ddrot161 rotate 1E-398 -15 -> 1.0E-397 -ddrot162 rotate 1E-398 1 -> 1.0E-397 -ddrot163 rotate 1E-398 15 -> 1.000000000000000E-383 --- negatives -ddrot171 rotate -9.999999999999999E+384 -1 -> -9.999999999999999E+384 -ddrot172 rotate -9.999999999999999E+384 -15 -> -9.999999999999999E+384 -ddrot173 rotate -9.999999999999999E+384 1 -> -9.999999999999999E+384 -ddrot174 rotate -9.999999999999999E+384 15 -> -9.999999999999999E+384 -ddrot175 rotate -1E-383 -1 -> -1.000000000000000E-368 -ddrot176 rotate -1E-383 -15 -> -1.0E-382 -ddrot177 rotate -1E-383 1 -> -1.0E-382 -ddrot178 rotate -1E-383 15 -> -1.000000000000000E-368 -ddrot181 rotate -1.000000000000000E-383 -1 -> -1.00000000000000E-384 -ddrot182 rotate -1.000000000000000E-383 -15 -> -1E-398 -ddrot183 rotate -1.000000000000000E-383 1 -> -1E-398 -ddrot184 rotate -1.000000000000000E-383 15 -> -1.00000000000000E-384 -ddrot185 rotate -9.000000000000000E-383 -1 -> -9.00000000000000E-384 -ddrot186 rotate -9.000000000000000E-383 -15 -> -9E-398 -ddrot187 rotate -9.000000000000000E-383 1 -> -9E-398 -ddrot188 rotate -9.000000000000000E-383 15 -> -9.00000000000000E-384 -ddrot190 rotate -1E-398 -1 -> -1.000000000000000E-383 -ddrot191 rotate -1E-398 -15 -> -1.0E-397 -ddrot192 rotate -1E-398 1 -> -1.0E-397 -ddrot193 rotate -1E-398 15 -> -1.000000000000000E-383 - --- more negatives (of sanities) -ddrot201 rotate -0 0 -> -0 -ddrot202 rotate -0 2 -> -0 -ddrot203 rotate -1 2 -> -100 -ddrot204 rotate -1 15 -> -1000000000000000 -ddrot205 rotate -1 16 -> -1 -ddrot206 rotate -1 -1 -> -1000000000000000 -ddrot207 rotate -0 -2 -> -0 -ddrot208 rotate -1234567890123456 -1 -> -6123456789012345 -ddrot209 rotate -1234567890123456 -15 -> -2345678901234561 -ddrot210 rotate -1234567890123456 -16 -> -1234567890123456 -ddrot211 rotate -9934567890123456 -15 -> -9345678901234569 -ddrot212 rotate -9934567890123456 -16 -> -9934567890123456 - - --- Specials; NaNs are handled as usual -ddrot781 rotate -Inf -8 -> -Infinity -ddrot782 rotate -Inf -1 -> -Infinity -ddrot783 rotate -Inf -0 -> -Infinity -ddrot784 rotate -Inf 0 -> -Infinity -ddrot785 rotate -Inf 1 -> -Infinity -ddrot786 rotate -Inf 8 -> -Infinity -ddrot787 rotate -1000 -Inf -> NaN Invalid_operation -ddrot788 rotate -Inf -Inf -> NaN Invalid_operation -ddrot789 rotate -1 -Inf -> NaN Invalid_operation -ddrot790 rotate -0 -Inf -> NaN Invalid_operation -ddrot791 rotate 0 -Inf -> NaN Invalid_operation -ddrot792 rotate 1 -Inf -> NaN Invalid_operation -ddrot793 rotate 1000 -Inf -> NaN Invalid_operation -ddrot794 rotate Inf -Inf -> NaN Invalid_operation - -ddrot800 rotate Inf -Inf -> NaN Invalid_operation -ddrot801 rotate Inf -8 -> Infinity -ddrot802 rotate Inf -1 -> Infinity -ddrot803 rotate Inf -0 -> Infinity -ddrot804 rotate Inf 0 -> Infinity -ddrot805 rotate Inf 1 -> Infinity -ddrot806 rotate Inf 8 -> Infinity -ddrot807 rotate Inf Inf -> NaN Invalid_operation -ddrot808 rotate -1000 Inf -> NaN Invalid_operation -ddrot809 rotate -Inf Inf -> NaN Invalid_operation -ddrot810 rotate -1 Inf -> NaN Invalid_operation -ddrot811 rotate -0 Inf -> NaN Invalid_operation -ddrot812 rotate 0 Inf -> NaN Invalid_operation -ddrot813 rotate 1 Inf -> NaN Invalid_operation -ddrot814 rotate 1000 Inf -> NaN Invalid_operation -ddrot815 rotate Inf Inf -> NaN Invalid_operation - -ddrot821 rotate NaN -Inf -> NaN -ddrot822 rotate NaN -1000 -> NaN -ddrot823 rotate NaN -1 -> NaN -ddrot824 rotate NaN -0 -> NaN -ddrot825 rotate NaN 0 -> NaN -ddrot826 rotate NaN 1 -> NaN -ddrot827 rotate NaN 1000 -> NaN -ddrot828 rotate NaN Inf -> NaN -ddrot829 rotate NaN NaN -> NaN -ddrot830 rotate -Inf NaN -> NaN -ddrot831 rotate -1000 NaN -> NaN -ddrot832 rotate -1 NaN -> NaN -ddrot833 rotate -0 NaN -> NaN -ddrot834 rotate 0 NaN -> NaN -ddrot835 rotate 1 NaN -> NaN -ddrot836 rotate 1000 NaN -> NaN -ddrot837 rotate Inf NaN -> NaN - -ddrot841 rotate sNaN -Inf -> NaN Invalid_operation -ddrot842 rotate sNaN -1000 -> NaN Invalid_operation -ddrot843 rotate sNaN -1 -> NaN Invalid_operation -ddrot844 rotate sNaN -0 -> NaN Invalid_operation -ddrot845 rotate sNaN 0 -> NaN Invalid_operation -ddrot846 rotate sNaN 1 -> NaN Invalid_operation -ddrot847 rotate sNaN 1000 -> NaN Invalid_operation -ddrot848 rotate sNaN NaN -> NaN Invalid_operation -ddrot849 rotate sNaN sNaN -> NaN Invalid_operation -ddrot850 rotate NaN sNaN -> NaN Invalid_operation -ddrot851 rotate -Inf sNaN -> NaN Invalid_operation -ddrot852 rotate -1000 sNaN -> NaN Invalid_operation -ddrot853 rotate -1 sNaN -> NaN Invalid_operation -ddrot854 rotate -0 sNaN -> NaN Invalid_operation -ddrot855 rotate 0 sNaN -> NaN Invalid_operation -ddrot856 rotate 1 sNaN -> NaN Invalid_operation -ddrot857 rotate 1000 sNaN -> NaN Invalid_operation -ddrot858 rotate Inf sNaN -> NaN Invalid_operation -ddrot859 rotate NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddrot861 rotate NaN1 -Inf -> NaN1 -ddrot862 rotate +NaN2 -1000 -> NaN2 -ddrot863 rotate NaN3 1000 -> NaN3 -ddrot864 rotate NaN4 Inf -> NaN4 -ddrot865 rotate NaN5 +NaN6 -> NaN5 -ddrot866 rotate -Inf NaN7 -> NaN7 -ddrot867 rotate -1000 NaN8 -> NaN8 -ddrot868 rotate 1000 NaN9 -> NaN9 -ddrot869 rotate Inf +NaN10 -> NaN10 -ddrot871 rotate sNaN11 -Inf -> NaN11 Invalid_operation -ddrot872 rotate sNaN12 -1000 -> NaN12 Invalid_operation -ddrot873 rotate sNaN13 1000 -> NaN13 Invalid_operation -ddrot874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation -ddrot875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation -ddrot876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation -ddrot877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation -ddrot878 rotate -1000 sNaN21 -> NaN21 Invalid_operation -ddrot879 rotate 1000 sNaN22 -> NaN22 Invalid_operation -ddrot880 rotate Inf sNaN23 -> NaN23 Invalid_operation -ddrot881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddrot882 rotate -NaN26 NaN28 -> -NaN26 -ddrot883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddrot884 rotate 1000 -NaN30 -> -NaN30 -ddrot885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- ddRotate.decTest -- rotate a decDouble coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddrot001 rotate 0 0 -> 0 +ddrot002 rotate 0 2 -> 0 +ddrot003 rotate 1 2 -> 100 +ddrot004 rotate 1 15 -> 1000000000000000 +ddrot005 rotate 1 16 -> 1 +ddrot006 rotate 1 -1 -> 1000000000000000 +ddrot007 rotate 0 -2 -> 0 +ddrot008 rotate 1234567890123456 -1 -> 6123456789012345 +ddrot009 rotate 1234567890123456 -15 -> 2345678901234561 +ddrot010 rotate 1234567890123456 -16 -> 1234567890123456 +ddrot011 rotate 9934567890123456 -15 -> 9345678901234569 +ddrot012 rotate 9934567890123456 -16 -> 9934567890123456 + +-- rhs must be an integer +ddrot015 rotate 1 1.5 -> NaN Invalid_operation +ddrot016 rotate 1 1.0 -> NaN Invalid_operation +ddrot017 rotate 1 0.1 -> NaN Invalid_operation +ddrot018 rotate 1 0.0 -> NaN Invalid_operation +ddrot019 rotate 1 1E+1 -> NaN Invalid_operation +ddrot020 rotate 1 1E+99 -> NaN Invalid_operation +ddrot021 rotate 1 Inf -> NaN Invalid_operation +ddrot022 rotate 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +ddrot025 rotate 1 -1000 -> NaN Invalid_operation +ddrot026 rotate 1 -17 -> NaN Invalid_operation +ddrot027 rotate 1 17 -> NaN Invalid_operation +ddrot028 rotate 1 1000 -> NaN Invalid_operation + +-- full pattern +ddrot030 rotate 1234567890123456 -16 -> 1234567890123456 +ddrot031 rotate 1234567890123456 -15 -> 2345678901234561 +ddrot032 rotate 1234567890123456 -14 -> 3456789012345612 +ddrot033 rotate 1234567890123456 -13 -> 4567890123456123 +ddrot034 rotate 1234567890123456 -12 -> 5678901234561234 +ddrot035 rotate 1234567890123456 -11 -> 6789012345612345 +ddrot036 rotate 1234567890123456 -10 -> 7890123456123456 +ddrot037 rotate 1234567890123456 -9 -> 8901234561234567 +ddrot038 rotate 1234567890123456 -8 -> 9012345612345678 +ddrot039 rotate 1234567890123456 -7 -> 123456123456789 +ddrot040 rotate 1234567890123456 -6 -> 1234561234567890 +ddrot041 rotate 1234567890123456 -5 -> 2345612345678901 +ddrot042 rotate 1234567890123456 -4 -> 3456123456789012 +ddrot043 rotate 1234567890123456 -3 -> 4561234567890123 +ddrot044 rotate 1234567890123456 -2 -> 5612345678901234 +ddrot045 rotate 1234567890123456 -1 -> 6123456789012345 +ddrot046 rotate 1234567890123456 -0 -> 1234567890123456 + +ddrot047 rotate 1234567890123456 +0 -> 1234567890123456 +ddrot048 rotate 1234567890123456 +1 -> 2345678901234561 +ddrot049 rotate 1234567890123456 +2 -> 3456789012345612 +ddrot050 rotate 1234567890123456 +3 -> 4567890123456123 +ddrot051 rotate 1234567890123456 +4 -> 5678901234561234 +ddrot052 rotate 1234567890123456 +5 -> 6789012345612345 +ddrot053 rotate 1234567890123456 +6 -> 7890123456123456 +ddrot054 rotate 1234567890123456 +7 -> 8901234561234567 +ddrot055 rotate 1234567890123456 +8 -> 9012345612345678 +ddrot056 rotate 1234567890123456 +9 -> 123456123456789 +ddrot057 rotate 1234567890123456 +10 -> 1234561234567890 +ddrot058 rotate 1234567890123456 +11 -> 2345612345678901 +ddrot059 rotate 1234567890123456 +12 -> 3456123456789012 +ddrot060 rotate 1234567890123456 +13 -> 4561234567890123 +ddrot061 rotate 1234567890123456 +14 -> 5612345678901234 +ddrot062 rotate 1234567890123456 +15 -> 6123456789012345 +ddrot063 rotate 1234567890123456 +16 -> 1234567890123456 + +-- zeros +ddrot070 rotate 0E-10 +9 -> 0E-10 +ddrot071 rotate 0E-10 -9 -> 0E-10 +ddrot072 rotate 0.000 +9 -> 0.000 +ddrot073 rotate 0.000 -9 -> 0.000 +ddrot074 rotate 0E+10 +9 -> 0E+10 +ddrot075 rotate 0E+10 -9 -> 0E+10 +ddrot076 rotate -0E-10 +9 -> -0E-10 +ddrot077 rotate -0E-10 -9 -> -0E-10 +ddrot078 rotate -0.000 +9 -> -0.000 +ddrot079 rotate -0.000 -9 -> -0.000 +ddrot080 rotate -0E+10 +9 -> -0E+10 +ddrot081 rotate -0E+10 -9 -> -0E+10 + +-- Nmax, Nmin, Ntiny +ddrot141 rotate 9.999999999999999E+384 -1 -> 9.999999999999999E+384 +ddrot142 rotate 9.999999999999999E+384 -15 -> 9.999999999999999E+384 +ddrot143 rotate 9.999999999999999E+384 1 -> 9.999999999999999E+384 +ddrot144 rotate 9.999999999999999E+384 15 -> 9.999999999999999E+384 +ddrot145 rotate 1E-383 -1 -> 1.000000000000000E-368 +ddrot146 rotate 1E-383 -15 -> 1.0E-382 +ddrot147 rotate 1E-383 1 -> 1.0E-382 +ddrot148 rotate 1E-383 15 -> 1.000000000000000E-368 +ddrot151 rotate 1.000000000000000E-383 -1 -> 1.00000000000000E-384 +ddrot152 rotate 1.000000000000000E-383 -15 -> 1E-398 +ddrot153 rotate 1.000000000000000E-383 1 -> 1E-398 +ddrot154 rotate 1.000000000000000E-383 15 -> 1.00000000000000E-384 +ddrot155 rotate 9.000000000000000E-383 -1 -> 9.00000000000000E-384 +ddrot156 rotate 9.000000000000000E-383 -15 -> 9E-398 +ddrot157 rotate 9.000000000000000E-383 1 -> 9E-398 +ddrot158 rotate 9.000000000000000E-383 15 -> 9.00000000000000E-384 +ddrot160 rotate 1E-398 -1 -> 1.000000000000000E-383 +ddrot161 rotate 1E-398 -15 -> 1.0E-397 +ddrot162 rotate 1E-398 1 -> 1.0E-397 +ddrot163 rotate 1E-398 15 -> 1.000000000000000E-383 +-- negatives +ddrot171 rotate -9.999999999999999E+384 -1 -> -9.999999999999999E+384 +ddrot172 rotate -9.999999999999999E+384 -15 -> -9.999999999999999E+384 +ddrot173 rotate -9.999999999999999E+384 1 -> -9.999999999999999E+384 +ddrot174 rotate -9.999999999999999E+384 15 -> -9.999999999999999E+384 +ddrot175 rotate -1E-383 -1 -> -1.000000000000000E-368 +ddrot176 rotate -1E-383 -15 -> -1.0E-382 +ddrot177 rotate -1E-383 1 -> -1.0E-382 +ddrot178 rotate -1E-383 15 -> -1.000000000000000E-368 +ddrot181 rotate -1.000000000000000E-383 -1 -> -1.00000000000000E-384 +ddrot182 rotate -1.000000000000000E-383 -15 -> -1E-398 +ddrot183 rotate -1.000000000000000E-383 1 -> -1E-398 +ddrot184 rotate -1.000000000000000E-383 15 -> -1.00000000000000E-384 +ddrot185 rotate -9.000000000000000E-383 -1 -> -9.00000000000000E-384 +ddrot186 rotate -9.000000000000000E-383 -15 -> -9E-398 +ddrot187 rotate -9.000000000000000E-383 1 -> -9E-398 +ddrot188 rotate -9.000000000000000E-383 15 -> -9.00000000000000E-384 +ddrot190 rotate -1E-398 -1 -> -1.000000000000000E-383 +ddrot191 rotate -1E-398 -15 -> -1.0E-397 +ddrot192 rotate -1E-398 1 -> -1.0E-397 +ddrot193 rotate -1E-398 15 -> -1.000000000000000E-383 + +-- more negatives (of sanities) +ddrot201 rotate -0 0 -> -0 +ddrot202 rotate -0 2 -> -0 +ddrot203 rotate -1 2 -> -100 +ddrot204 rotate -1 15 -> -1000000000000000 +ddrot205 rotate -1 16 -> -1 +ddrot206 rotate -1 -1 -> -1000000000000000 +ddrot207 rotate -0 -2 -> -0 +ddrot208 rotate -1234567890123456 -1 -> -6123456789012345 +ddrot209 rotate -1234567890123456 -15 -> -2345678901234561 +ddrot210 rotate -1234567890123456 -16 -> -1234567890123456 +ddrot211 rotate -9934567890123456 -15 -> -9345678901234569 +ddrot212 rotate -9934567890123456 -16 -> -9934567890123456 + + +-- Specials; NaNs are handled as usual +ddrot781 rotate -Inf -8 -> -Infinity +ddrot782 rotate -Inf -1 -> -Infinity +ddrot783 rotate -Inf -0 -> -Infinity +ddrot784 rotate -Inf 0 -> -Infinity +ddrot785 rotate -Inf 1 -> -Infinity +ddrot786 rotate -Inf 8 -> -Infinity +ddrot787 rotate -1000 -Inf -> NaN Invalid_operation +ddrot788 rotate -Inf -Inf -> NaN Invalid_operation +ddrot789 rotate -1 -Inf -> NaN Invalid_operation +ddrot790 rotate -0 -Inf -> NaN Invalid_operation +ddrot791 rotate 0 -Inf -> NaN Invalid_operation +ddrot792 rotate 1 -Inf -> NaN Invalid_operation +ddrot793 rotate 1000 -Inf -> NaN Invalid_operation +ddrot794 rotate Inf -Inf -> NaN Invalid_operation + +ddrot800 rotate Inf -Inf -> NaN Invalid_operation +ddrot801 rotate Inf -8 -> Infinity +ddrot802 rotate Inf -1 -> Infinity +ddrot803 rotate Inf -0 -> Infinity +ddrot804 rotate Inf 0 -> Infinity +ddrot805 rotate Inf 1 -> Infinity +ddrot806 rotate Inf 8 -> Infinity +ddrot807 rotate Inf Inf -> NaN Invalid_operation +ddrot808 rotate -1000 Inf -> NaN Invalid_operation +ddrot809 rotate -Inf Inf -> NaN Invalid_operation +ddrot810 rotate -1 Inf -> NaN Invalid_operation +ddrot811 rotate -0 Inf -> NaN Invalid_operation +ddrot812 rotate 0 Inf -> NaN Invalid_operation +ddrot813 rotate 1 Inf -> NaN Invalid_operation +ddrot814 rotate 1000 Inf -> NaN Invalid_operation +ddrot815 rotate Inf Inf -> NaN Invalid_operation + +ddrot821 rotate NaN -Inf -> NaN +ddrot822 rotate NaN -1000 -> NaN +ddrot823 rotate NaN -1 -> NaN +ddrot824 rotate NaN -0 -> NaN +ddrot825 rotate NaN 0 -> NaN +ddrot826 rotate NaN 1 -> NaN +ddrot827 rotate NaN 1000 -> NaN +ddrot828 rotate NaN Inf -> NaN +ddrot829 rotate NaN NaN -> NaN +ddrot830 rotate -Inf NaN -> NaN +ddrot831 rotate -1000 NaN -> NaN +ddrot832 rotate -1 NaN -> NaN +ddrot833 rotate -0 NaN -> NaN +ddrot834 rotate 0 NaN -> NaN +ddrot835 rotate 1 NaN -> NaN +ddrot836 rotate 1000 NaN -> NaN +ddrot837 rotate Inf NaN -> NaN + +ddrot841 rotate sNaN -Inf -> NaN Invalid_operation +ddrot842 rotate sNaN -1000 -> NaN Invalid_operation +ddrot843 rotate sNaN -1 -> NaN Invalid_operation +ddrot844 rotate sNaN -0 -> NaN Invalid_operation +ddrot845 rotate sNaN 0 -> NaN Invalid_operation +ddrot846 rotate sNaN 1 -> NaN Invalid_operation +ddrot847 rotate sNaN 1000 -> NaN Invalid_operation +ddrot848 rotate sNaN NaN -> NaN Invalid_operation +ddrot849 rotate sNaN sNaN -> NaN Invalid_operation +ddrot850 rotate NaN sNaN -> NaN Invalid_operation +ddrot851 rotate -Inf sNaN -> NaN Invalid_operation +ddrot852 rotate -1000 sNaN -> NaN Invalid_operation +ddrot853 rotate -1 sNaN -> NaN Invalid_operation +ddrot854 rotate -0 sNaN -> NaN Invalid_operation +ddrot855 rotate 0 sNaN -> NaN Invalid_operation +ddrot856 rotate 1 sNaN -> NaN Invalid_operation +ddrot857 rotate 1000 sNaN -> NaN Invalid_operation +ddrot858 rotate Inf sNaN -> NaN Invalid_operation +ddrot859 rotate NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddrot861 rotate NaN1 -Inf -> NaN1 +ddrot862 rotate +NaN2 -1000 -> NaN2 +ddrot863 rotate NaN3 1000 -> NaN3 +ddrot864 rotate NaN4 Inf -> NaN4 +ddrot865 rotate NaN5 +NaN6 -> NaN5 +ddrot866 rotate -Inf NaN7 -> NaN7 +ddrot867 rotate -1000 NaN8 -> NaN8 +ddrot868 rotate 1000 NaN9 -> NaN9 +ddrot869 rotate Inf +NaN10 -> NaN10 +ddrot871 rotate sNaN11 -Inf -> NaN11 Invalid_operation +ddrot872 rotate sNaN12 -1000 -> NaN12 Invalid_operation +ddrot873 rotate sNaN13 1000 -> NaN13 Invalid_operation +ddrot874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation +ddrot875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation +ddrot876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation +ddrot877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation +ddrot878 rotate -1000 sNaN21 -> NaN21 Invalid_operation +ddrot879 rotate 1000 sNaN22 -> NaN22 Invalid_operation +ddrot880 rotate Inf sNaN23 -> NaN23 Invalid_operation +ddrot881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddrot882 rotate -NaN26 NaN28 -> -NaN26 +ddrot883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddrot884 rotate 1000 -NaN30 -> -NaN30 +ddrot885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/ddSameQuantum.decTest b/Lib/test/decimaltestdata/ddSameQuantum.decTest index 465b36a8581..54a763cccf3 100644 --- a/Lib/test/decimaltestdata/ddSameQuantum.decTest +++ b/Lib/test/decimaltestdata/ddSameQuantum.decTest @@ -1,389 +1,389 @@ ------------------------------------------------------------------------- --- ddSameQuantum.decTest -- check decDouble quantums match -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decDoubles. -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddsamq001 samequantum 0 0 -> 1 -ddsamq002 samequantum 0 1 -> 1 -ddsamq003 samequantum 1 0 -> 1 -ddsamq004 samequantum 1 1 -> 1 - -ddsamq011 samequantum 10 1E+1 -> 0 -ddsamq012 samequantum 10E+1 10E+1 -> 1 -ddsamq013 samequantum 100 10E+1 -> 0 -ddsamq014 samequantum 100 1E+2 -> 0 -ddsamq015 samequantum 0.1 1E-2 -> 0 -ddsamq016 samequantum 0.1 1E-1 -> 1 -ddsamq017 samequantum 0.1 1E-0 -> 0 -ddsamq018 samequantum 999 999 -> 1 -ddsamq019 samequantum 999E-1 99.9 -> 1 -ddsamq020 samequantum 111E-1 22.2 -> 1 -ddsamq021 samequantum 111E-1 1234.2 -> 1 - --- zeros -ddsamq030 samequantum 0.0 1.1 -> 1 -ddsamq031 samequantum 0.0 1.11 -> 0 -ddsamq032 samequantum 0.0 0 -> 0 -ddsamq033 samequantum 0.0 0.0 -> 1 -ddsamq034 samequantum 0.0 0.00 -> 0 -ddsamq035 samequantum 0E+1 0E+0 -> 0 -ddsamq036 samequantum 0E+1 0E+1 -> 1 -ddsamq037 samequantum 0E+1 0E+2 -> 0 -ddsamq038 samequantum 0E-17 0E-16 -> 0 -ddsamq039 samequantum 0E-17 0E-17 -> 1 -ddsamq040 samequantum 0E-17 0E-18 -> 0 -ddsamq041 samequantum 0E-17 0.0E-15 -> 0 -ddsamq042 samequantum 0E-17 0.0E-16 -> 1 -ddsamq043 samequantum 0E-17 0.0E-17 -> 0 -ddsamq044 samequantum -0E-17 0.0E-16 -> 1 -ddsamq045 samequantum 0E-17 -0.0E-17 -> 0 -ddsamq046 samequantum 0E-17 -0.0E-16 -> 1 -ddsamq047 samequantum -0E-17 0.0E-17 -> 0 -ddsamq048 samequantum -0E-17 -0.0E-16 -> 1 -ddsamq049 samequantum -0E-17 -0.0E-17 -> 0 - --- Nmax, Nmin, Ntiny -ddsamq051 samequantum 9.999999999999999E+384 9.999999999999999E+384 -> 1 -ddsamq052 samequantum 1E-383 1E-383 -> 1 -ddsamq053 samequantum 1.000000000000000E-383 1.000000000000000E-383 -> 1 -ddsamq054 samequantum 1E-398 1E-398 -> 1 -ddsamq055 samequantum 9.999999999999999E+384 9.999999999999999E+384 -> 1 -ddsamq056 samequantum 1E-383 1E-383 -> 1 -ddsamq057 samequantum 1.000000000000000E-383 1.000000000000000E-383 -> 1 -ddsamq058 samequantum 1E-398 1E-398 -> 1 - -ddsamq061 samequantum -1E-398 -1E-398 -> 1 -ddsamq062 samequantum -1.000000000000000E-383 -1.000000000000000E-383 -> 1 -ddsamq063 samequantum -1E-383 -1E-383 -> 1 -ddsamq064 samequantum -9.999999999999999E+384 -9.999999999999999E+384 -> 1 -ddsamq065 samequantum -1E-398 -1E-398 -> 1 -ddsamq066 samequantum -1.000000000000000E-383 -1.000000000000000E-383 -> 1 -ddsamq067 samequantum -1E-383 -1E-383 -> 1 -ddsamq068 samequantum -9.999999999999999E+384 -9.999999999999999E+384 -> 1 - -ddsamq071 samequantum -4E-398 -1E-398 -> 1 -ddsamq072 samequantum -4.000000000000000E-383 -1.000040000000000E-383 -> 1 -ddsamq073 samequantum -4E-383 -1E-383 -> 1 -ddsamq074 samequantum -4.999999999999999E+384 -9.999999999949999E+384 -> 1 -ddsamq075 samequantum -4E-398 -1E-398 -> 1 -ddsamq076 samequantum -4.000000000000000E-383 -1.004000000000000E-383 -> 1 -ddsamq077 samequantum -4E-383 -1E-383 -> 1 -ddsamq078 samequantum -4.999999999999999E+384 -9.949999999999999E+384 -> 1 - -ddsamq081 samequantum -4E-397 -1E-398 -> 0 -ddsamq082 samequantum -4.000000000000000E-383 -1.000040000000000E-336 -> 0 -ddsamq083 samequantum -4E-346 -1E-383 -> 0 -ddsamq084 samequantum -4.999999999999999E+384 -9.999499999999999E+336 -> 0 -ddsamq085 samequantum -4E-397 -1E-398 -> 0 -ddsamq086 samequantum -4.000000000000000E-383 -1.004000000000000E-336 -> 0 -ddsamq087 samequantum -4E-346 -1E-383 -> 0 -ddsamq088 samequantum -4.999999999999999E+384 -9.949999999999999E+336 -> 0 - --- specials & combinations -ddsamq0110 samequantum -Inf -Inf -> 1 -ddsamq0111 samequantum -Inf Inf -> 1 -ddsamq0112 samequantum -Inf NaN -> 0 -ddsamq0113 samequantum -Inf -7E+3 -> 0 -ddsamq0114 samequantum -Inf -7 -> 0 -ddsamq0115 samequantum -Inf -7E-3 -> 0 -ddsamq0116 samequantum -Inf -0E-3 -> 0 -ddsamq0117 samequantum -Inf -0 -> 0 -ddsamq0118 samequantum -Inf -0E+3 -> 0 -ddsamq0119 samequantum -Inf 0E-3 -> 0 -ddsamq0120 samequantum -Inf 0 -> 0 -ddsamq0121 samequantum -Inf 0E+3 -> 0 -ddsamq0122 samequantum -Inf 7E-3 -> 0 -ddsamq0123 samequantum -Inf 7 -> 0 -ddsamq0124 samequantum -Inf 7E+3 -> 0 -ddsamq0125 samequantum -Inf sNaN -> 0 - -ddsamq0210 samequantum Inf -Inf -> 1 -ddsamq0211 samequantum Inf Inf -> 1 -ddsamq0212 samequantum Inf NaN -> 0 -ddsamq0213 samequantum Inf -7E+3 -> 0 -ddsamq0214 samequantum Inf -7 -> 0 -ddsamq0215 samequantum Inf -7E-3 -> 0 -ddsamq0216 samequantum Inf -0E-3 -> 0 -ddsamq0217 samequantum Inf -0 -> 0 -ddsamq0218 samequantum Inf -0E+3 -> 0 -ddsamq0219 samequantum Inf 0E-3 -> 0 -ddsamq0220 samequantum Inf 0 -> 0 -ddsamq0221 samequantum Inf 0E+3 -> 0 -ddsamq0222 samequantum Inf 7E-3 -> 0 -ddsamq0223 samequantum Inf 7 -> 0 -ddsamq0224 samequantum Inf 7E+3 -> 0 -ddsamq0225 samequantum Inf sNaN -> 0 - -ddsamq0310 samequantum NaN -Inf -> 0 -ddsamq0311 samequantum NaN Inf -> 0 -ddsamq0312 samequantum NaN NaN -> 1 -ddsamq0313 samequantum NaN -7E+3 -> 0 -ddsamq0314 samequantum NaN -7 -> 0 -ddsamq0315 samequantum NaN -7E-3 -> 0 -ddsamq0316 samequantum NaN -0E-3 -> 0 -ddsamq0317 samequantum NaN -0 -> 0 -ddsamq0318 samequantum NaN -0E+3 -> 0 -ddsamq0319 samequantum NaN 0E-3 -> 0 -ddsamq0320 samequantum NaN 0 -> 0 -ddsamq0321 samequantum NaN 0E+3 -> 0 -ddsamq0322 samequantum NaN 7E-3 -> 0 -ddsamq0323 samequantum NaN 7 -> 0 -ddsamq0324 samequantum NaN 7E+3 -> 0 -ddsamq0325 samequantum NaN sNaN -> 1 - -ddsamq0410 samequantum -7E+3 -Inf -> 0 -ddsamq0411 samequantum -7E+3 Inf -> 0 -ddsamq0412 samequantum -7E+3 NaN -> 0 -ddsamq0413 samequantum -7E+3 -7E+3 -> 1 -ddsamq0414 samequantum -7E+3 -7 -> 0 -ddsamq0415 samequantum -7E+3 -7E-3 -> 0 -ddsamq0416 samequantum -7E+3 -0E-3 -> 0 -ddsamq0417 samequantum -7E+3 -0 -> 0 -ddsamq0418 samequantum -7E+3 -0E+3 -> 1 -ddsamq0419 samequantum -7E+3 0E-3 -> 0 -ddsamq0420 samequantum -7E+3 0 -> 0 -ddsamq0421 samequantum -7E+3 0E+3 -> 1 -ddsamq0422 samequantum -7E+3 7E-3 -> 0 -ddsamq0423 samequantum -7E+3 7 -> 0 -ddsamq0424 samequantum -7E+3 7E+3 -> 1 -ddsamq0425 samequantum -7E+3 sNaN -> 0 - -ddsamq0510 samequantum -7 -Inf -> 0 -ddsamq0511 samequantum -7 Inf -> 0 -ddsamq0512 samequantum -7 NaN -> 0 -ddsamq0513 samequantum -7 -7E+3 -> 0 -ddsamq0514 samequantum -7 -7 -> 1 -ddsamq0515 samequantum -7 -7E-3 -> 0 -ddsamq0516 samequantum -7 -0E-3 -> 0 -ddsamq0517 samequantum -7 -0 -> 1 -ddsamq0518 samequantum -7 -0E+3 -> 0 -ddsamq0519 samequantum -7 0E-3 -> 0 -ddsamq0520 samequantum -7 0 -> 1 -ddsamq0521 samequantum -7 0E+3 -> 0 -ddsamq0522 samequantum -7 7E-3 -> 0 -ddsamq0523 samequantum -7 7 -> 1 -ddsamq0524 samequantum -7 7E+3 -> 0 -ddsamq0525 samequantum -7 sNaN -> 0 - -ddsamq0610 samequantum -7E-3 -Inf -> 0 -ddsamq0611 samequantum -7E-3 Inf -> 0 -ddsamq0612 samequantum -7E-3 NaN -> 0 -ddsamq0613 samequantum -7E-3 -7E+3 -> 0 -ddsamq0614 samequantum -7E-3 -7 -> 0 -ddsamq0615 samequantum -7E-3 -7E-3 -> 1 -ddsamq0616 samequantum -7E-3 -0E-3 -> 1 -ddsamq0617 samequantum -7E-3 -0 -> 0 -ddsamq0618 samequantum -7E-3 -0E+3 -> 0 -ddsamq0619 samequantum -7E-3 0E-3 -> 1 -ddsamq0620 samequantum -7E-3 0 -> 0 -ddsamq0621 samequantum -7E-3 0E+3 -> 0 -ddsamq0622 samequantum -7E-3 7E-3 -> 1 -ddsamq0623 samequantum -7E-3 7 -> 0 -ddsamq0624 samequantum -7E-3 7E+3 -> 0 -ddsamq0625 samequantum -7E-3 sNaN -> 0 - -ddsamq0710 samequantum -0E-3 -Inf -> 0 -ddsamq0711 samequantum -0E-3 Inf -> 0 -ddsamq0712 samequantum -0E-3 NaN -> 0 -ddsamq0713 samequantum -0E-3 -7E+3 -> 0 -ddsamq0714 samequantum -0E-3 -7 -> 0 -ddsamq0715 samequantum -0E-3 -7E-3 -> 1 -ddsamq0716 samequantum -0E-3 -0E-3 -> 1 -ddsamq0717 samequantum -0E-3 -0 -> 0 -ddsamq0718 samequantum -0E-3 -0E+3 -> 0 -ddsamq0719 samequantum -0E-3 0E-3 -> 1 -ddsamq0720 samequantum -0E-3 0 -> 0 -ddsamq0721 samequantum -0E-3 0E+3 -> 0 -ddsamq0722 samequantum -0E-3 7E-3 -> 1 -ddsamq0723 samequantum -0E-3 7 -> 0 -ddsamq0724 samequantum -0E-3 7E+3 -> 0 -ddsamq0725 samequantum -0E-3 sNaN -> 0 - -ddsamq0810 samequantum -0 -Inf -> 0 -ddsamq0811 samequantum -0 Inf -> 0 -ddsamq0812 samequantum -0 NaN -> 0 -ddsamq0813 samequantum -0 -7E+3 -> 0 -ddsamq0814 samequantum -0 -7 -> 1 -ddsamq0815 samequantum -0 -7E-3 -> 0 -ddsamq0816 samequantum -0 -0E-3 -> 0 -ddsamq0817 samequantum -0 -0 -> 1 -ddsamq0818 samequantum -0 -0E+3 -> 0 -ddsamq0819 samequantum -0 0E-3 -> 0 -ddsamq0820 samequantum -0 0 -> 1 -ddsamq0821 samequantum -0 0E+3 -> 0 -ddsamq0822 samequantum -0 7E-3 -> 0 -ddsamq0823 samequantum -0 7 -> 1 -ddsamq0824 samequantum -0 7E+3 -> 0 -ddsamq0825 samequantum -0 sNaN -> 0 - -ddsamq0910 samequantum -0E+3 -Inf -> 0 -ddsamq0911 samequantum -0E+3 Inf -> 0 -ddsamq0912 samequantum -0E+3 NaN -> 0 -ddsamq0913 samequantum -0E+3 -7E+3 -> 1 -ddsamq0914 samequantum -0E+3 -7 -> 0 -ddsamq0915 samequantum -0E+3 -7E-3 -> 0 -ddsamq0916 samequantum -0E+3 -0E-3 -> 0 -ddsamq0917 samequantum -0E+3 -0 -> 0 -ddsamq0918 samequantum -0E+3 -0E+3 -> 1 -ddsamq0919 samequantum -0E+3 0E-3 -> 0 -ddsamq0920 samequantum -0E+3 0 -> 0 -ddsamq0921 samequantum -0E+3 0E+3 -> 1 -ddsamq0922 samequantum -0E+3 7E-3 -> 0 -ddsamq0923 samequantum -0E+3 7 -> 0 -ddsamq0924 samequantum -0E+3 7E+3 -> 1 -ddsamq0925 samequantum -0E+3 sNaN -> 0 - -ddsamq1110 samequantum 0E-3 -Inf -> 0 -ddsamq1111 samequantum 0E-3 Inf -> 0 -ddsamq1112 samequantum 0E-3 NaN -> 0 -ddsamq1113 samequantum 0E-3 -7E+3 -> 0 -ddsamq1114 samequantum 0E-3 -7 -> 0 -ddsamq1115 samequantum 0E-3 -7E-3 -> 1 -ddsamq1116 samequantum 0E-3 -0E-3 -> 1 -ddsamq1117 samequantum 0E-3 -0 -> 0 -ddsamq1118 samequantum 0E-3 -0E+3 -> 0 -ddsamq1119 samequantum 0E-3 0E-3 -> 1 -ddsamq1120 samequantum 0E-3 0 -> 0 -ddsamq1121 samequantum 0E-3 0E+3 -> 0 -ddsamq1122 samequantum 0E-3 7E-3 -> 1 -ddsamq1123 samequantum 0E-3 7 -> 0 -ddsamq1124 samequantum 0E-3 7E+3 -> 0 -ddsamq1125 samequantum 0E-3 sNaN -> 0 - -ddsamq1210 samequantum 0 -Inf -> 0 -ddsamq1211 samequantum 0 Inf -> 0 -ddsamq1212 samequantum 0 NaN -> 0 -ddsamq1213 samequantum 0 -7E+3 -> 0 -ddsamq1214 samequantum 0 -7 -> 1 -ddsamq1215 samequantum 0 -7E-3 -> 0 -ddsamq1216 samequantum 0 -0E-3 -> 0 -ddsamq1217 samequantum 0 -0 -> 1 -ddsamq1218 samequantum 0 -0E+3 -> 0 -ddsamq1219 samequantum 0 0E-3 -> 0 -ddsamq1220 samequantum 0 0 -> 1 -ddsamq1221 samequantum 0 0E+3 -> 0 -ddsamq1222 samequantum 0 7E-3 -> 0 -ddsamq1223 samequantum 0 7 -> 1 -ddsamq1224 samequantum 0 7E+3 -> 0 -ddsamq1225 samequantum 0 sNaN -> 0 - -ddsamq1310 samequantum 0E+3 -Inf -> 0 -ddsamq1311 samequantum 0E+3 Inf -> 0 -ddsamq1312 samequantum 0E+3 NaN -> 0 -ddsamq1313 samequantum 0E+3 -7E+3 -> 1 -ddsamq1314 samequantum 0E+3 -7 -> 0 -ddsamq1315 samequantum 0E+3 -7E-3 -> 0 -ddsamq1316 samequantum 0E+3 -0E-3 -> 0 -ddsamq1317 samequantum 0E+3 -0 -> 0 -ddsamq1318 samequantum 0E+3 -0E+3 -> 1 -ddsamq1319 samequantum 0E+3 0E-3 -> 0 -ddsamq1320 samequantum 0E+3 0 -> 0 -ddsamq1321 samequantum 0E+3 0E+3 -> 1 -ddsamq1322 samequantum 0E+3 7E-3 -> 0 -ddsamq1323 samequantum 0E+3 7 -> 0 -ddsamq1324 samequantum 0E+3 7E+3 -> 1 -ddsamq1325 samequantum 0E+3 sNaN -> 0 - -ddsamq1410 samequantum 7E-3 -Inf -> 0 -ddsamq1411 samequantum 7E-3 Inf -> 0 -ddsamq1412 samequantum 7E-3 NaN -> 0 -ddsamq1413 samequantum 7E-3 -7E+3 -> 0 -ddsamq1414 samequantum 7E-3 -7 -> 0 -ddsamq1415 samequantum 7E-3 -7E-3 -> 1 -ddsamq1416 samequantum 7E-3 -0E-3 -> 1 -ddsamq1417 samequantum 7E-3 -0 -> 0 -ddsamq1418 samequantum 7E-3 -0E+3 -> 0 -ddsamq1419 samequantum 7E-3 0E-3 -> 1 -ddsamq1420 samequantum 7E-3 0 -> 0 -ddsamq1421 samequantum 7E-3 0E+3 -> 0 -ddsamq1422 samequantum 7E-3 7E-3 -> 1 -ddsamq1423 samequantum 7E-3 7 -> 0 -ddsamq1424 samequantum 7E-3 7E+3 -> 0 -ddsamq1425 samequantum 7E-3 sNaN -> 0 - -ddsamq1510 samequantum 7 -Inf -> 0 -ddsamq1511 samequantum 7 Inf -> 0 -ddsamq1512 samequantum 7 NaN -> 0 -ddsamq1513 samequantum 7 -7E+3 -> 0 -ddsamq1514 samequantum 7 -7 -> 1 -ddsamq1515 samequantum 7 -7E-3 -> 0 -ddsamq1516 samequantum 7 -0E-3 -> 0 -ddsamq1517 samequantum 7 -0 -> 1 -ddsamq1518 samequantum 7 -0E+3 -> 0 -ddsamq1519 samequantum 7 0E-3 -> 0 -ddsamq1520 samequantum 7 0 -> 1 -ddsamq1521 samequantum 7 0E+3 -> 0 -ddsamq1522 samequantum 7 7E-3 -> 0 -ddsamq1523 samequantum 7 7 -> 1 -ddsamq1524 samequantum 7 7E+3 -> 0 -ddsamq1525 samequantum 7 sNaN -> 0 - -ddsamq1610 samequantum 7E+3 -Inf -> 0 -ddsamq1611 samequantum 7E+3 Inf -> 0 -ddsamq1612 samequantum 7E+3 NaN -> 0 -ddsamq1613 samequantum 7E+3 -7E+3 -> 1 -ddsamq1614 samequantum 7E+3 -7 -> 0 -ddsamq1615 samequantum 7E+3 -7E-3 -> 0 -ddsamq1616 samequantum 7E+3 -0E-3 -> 0 -ddsamq1617 samequantum 7E+3 -0 -> 0 -ddsamq1618 samequantum 7E+3 -0E+3 -> 1 -ddsamq1619 samequantum 7E+3 0E-3 -> 0 -ddsamq1620 samequantum 7E+3 0 -> 0 -ddsamq1621 samequantum 7E+3 0E+3 -> 1 -ddsamq1622 samequantum 7E+3 7E-3 -> 0 -ddsamq1623 samequantum 7E+3 7 -> 0 -ddsamq1624 samequantum 7E+3 7E+3 -> 1 -ddsamq1625 samequantum 7E+3 sNaN -> 0 - -ddsamq1710 samequantum sNaN -Inf -> 0 -ddsamq1711 samequantum sNaN Inf -> 0 -ddsamq1712 samequantum sNaN NaN -> 1 -ddsamq1713 samequantum sNaN -7E+3 -> 0 -ddsamq1714 samequantum sNaN -7 -> 0 -ddsamq1715 samequantum sNaN -7E-3 -> 0 -ddsamq1716 samequantum sNaN -0E-3 -> 0 -ddsamq1717 samequantum sNaN -0 -> 0 -ddsamq1718 samequantum sNaN -0E+3 -> 0 -ddsamq1719 samequantum sNaN 0E-3 -> 0 -ddsamq1720 samequantum sNaN 0 -> 0 -ddsamq1721 samequantum sNaN 0E+3 -> 0 -ddsamq1722 samequantum sNaN 7E-3 -> 0 -ddsamq1723 samequantum sNaN 7 -> 0 -ddsamq1724 samequantum sNaN 7E+3 -> 0 -ddsamq1725 samequantum sNaN sNaN -> 1 --- noisy NaNs -ddsamq1730 samequantum sNaN3 sNaN3 -> 1 -ddsamq1731 samequantum sNaN3 sNaN4 -> 1 -ddsamq1732 samequantum NaN3 NaN3 -> 1 -ddsamq1733 samequantum NaN3 NaN4 -> 1 -ddsamq1734 samequantum sNaN3 3 -> 0 -ddsamq1735 samequantum NaN3 3 -> 0 -ddsamq1736 samequantum 4 sNaN4 -> 0 -ddsamq1737 samequantum 3 NaN3 -> 0 -ddsamq1738 samequantum Inf sNaN4 -> 0 -ddsamq1739 samequantum -Inf NaN3 -> 0 - +------------------------------------------------------------------------ +-- ddSameQuantum.decTest -- check decDouble quantums match -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decDoubles. +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddsamq001 samequantum 0 0 -> 1 +ddsamq002 samequantum 0 1 -> 1 +ddsamq003 samequantum 1 0 -> 1 +ddsamq004 samequantum 1 1 -> 1 + +ddsamq011 samequantum 10 1E+1 -> 0 +ddsamq012 samequantum 10E+1 10E+1 -> 1 +ddsamq013 samequantum 100 10E+1 -> 0 +ddsamq014 samequantum 100 1E+2 -> 0 +ddsamq015 samequantum 0.1 1E-2 -> 0 +ddsamq016 samequantum 0.1 1E-1 -> 1 +ddsamq017 samequantum 0.1 1E-0 -> 0 +ddsamq018 samequantum 999 999 -> 1 +ddsamq019 samequantum 999E-1 99.9 -> 1 +ddsamq020 samequantum 111E-1 22.2 -> 1 +ddsamq021 samequantum 111E-1 1234.2 -> 1 + +-- zeros +ddsamq030 samequantum 0.0 1.1 -> 1 +ddsamq031 samequantum 0.0 1.11 -> 0 +ddsamq032 samequantum 0.0 0 -> 0 +ddsamq033 samequantum 0.0 0.0 -> 1 +ddsamq034 samequantum 0.0 0.00 -> 0 +ddsamq035 samequantum 0E+1 0E+0 -> 0 +ddsamq036 samequantum 0E+1 0E+1 -> 1 +ddsamq037 samequantum 0E+1 0E+2 -> 0 +ddsamq038 samequantum 0E-17 0E-16 -> 0 +ddsamq039 samequantum 0E-17 0E-17 -> 1 +ddsamq040 samequantum 0E-17 0E-18 -> 0 +ddsamq041 samequantum 0E-17 0.0E-15 -> 0 +ddsamq042 samequantum 0E-17 0.0E-16 -> 1 +ddsamq043 samequantum 0E-17 0.0E-17 -> 0 +ddsamq044 samequantum -0E-17 0.0E-16 -> 1 +ddsamq045 samequantum 0E-17 -0.0E-17 -> 0 +ddsamq046 samequantum 0E-17 -0.0E-16 -> 1 +ddsamq047 samequantum -0E-17 0.0E-17 -> 0 +ddsamq048 samequantum -0E-17 -0.0E-16 -> 1 +ddsamq049 samequantum -0E-17 -0.0E-17 -> 0 + +-- Nmax, Nmin, Ntiny +ddsamq051 samequantum 9.999999999999999E+384 9.999999999999999E+384 -> 1 +ddsamq052 samequantum 1E-383 1E-383 -> 1 +ddsamq053 samequantum 1.000000000000000E-383 1.000000000000000E-383 -> 1 +ddsamq054 samequantum 1E-398 1E-398 -> 1 +ddsamq055 samequantum 9.999999999999999E+384 9.999999999999999E+384 -> 1 +ddsamq056 samequantum 1E-383 1E-383 -> 1 +ddsamq057 samequantum 1.000000000000000E-383 1.000000000000000E-383 -> 1 +ddsamq058 samequantum 1E-398 1E-398 -> 1 + +ddsamq061 samequantum -1E-398 -1E-398 -> 1 +ddsamq062 samequantum -1.000000000000000E-383 -1.000000000000000E-383 -> 1 +ddsamq063 samequantum -1E-383 -1E-383 -> 1 +ddsamq064 samequantum -9.999999999999999E+384 -9.999999999999999E+384 -> 1 +ddsamq065 samequantum -1E-398 -1E-398 -> 1 +ddsamq066 samequantum -1.000000000000000E-383 -1.000000000000000E-383 -> 1 +ddsamq067 samequantum -1E-383 -1E-383 -> 1 +ddsamq068 samequantum -9.999999999999999E+384 -9.999999999999999E+384 -> 1 + +ddsamq071 samequantum -4E-398 -1E-398 -> 1 +ddsamq072 samequantum -4.000000000000000E-383 -1.000040000000000E-383 -> 1 +ddsamq073 samequantum -4E-383 -1E-383 -> 1 +ddsamq074 samequantum -4.999999999999999E+384 -9.999999999949999E+384 -> 1 +ddsamq075 samequantum -4E-398 -1E-398 -> 1 +ddsamq076 samequantum -4.000000000000000E-383 -1.004000000000000E-383 -> 1 +ddsamq077 samequantum -4E-383 -1E-383 -> 1 +ddsamq078 samequantum -4.999999999999999E+384 -9.949999999999999E+384 -> 1 + +ddsamq081 samequantum -4E-397 -1E-398 -> 0 +ddsamq082 samequantum -4.000000000000000E-383 -1.000040000000000E-336 -> 0 +ddsamq083 samequantum -4E-346 -1E-383 -> 0 +ddsamq084 samequantum -4.999999999999999E+384 -9.999499999999999E+336 -> 0 +ddsamq085 samequantum -4E-397 -1E-398 -> 0 +ddsamq086 samequantum -4.000000000000000E-383 -1.004000000000000E-336 -> 0 +ddsamq087 samequantum -4E-346 -1E-383 -> 0 +ddsamq088 samequantum -4.999999999999999E+384 -9.949999999999999E+336 -> 0 + +-- specials & combinations +ddsamq0110 samequantum -Inf -Inf -> 1 +ddsamq0111 samequantum -Inf Inf -> 1 +ddsamq0112 samequantum -Inf NaN -> 0 +ddsamq0113 samequantum -Inf -7E+3 -> 0 +ddsamq0114 samequantum -Inf -7 -> 0 +ddsamq0115 samequantum -Inf -7E-3 -> 0 +ddsamq0116 samequantum -Inf -0E-3 -> 0 +ddsamq0117 samequantum -Inf -0 -> 0 +ddsamq0118 samequantum -Inf -0E+3 -> 0 +ddsamq0119 samequantum -Inf 0E-3 -> 0 +ddsamq0120 samequantum -Inf 0 -> 0 +ddsamq0121 samequantum -Inf 0E+3 -> 0 +ddsamq0122 samequantum -Inf 7E-3 -> 0 +ddsamq0123 samequantum -Inf 7 -> 0 +ddsamq0124 samequantum -Inf 7E+3 -> 0 +ddsamq0125 samequantum -Inf sNaN -> 0 + +ddsamq0210 samequantum Inf -Inf -> 1 +ddsamq0211 samequantum Inf Inf -> 1 +ddsamq0212 samequantum Inf NaN -> 0 +ddsamq0213 samequantum Inf -7E+3 -> 0 +ddsamq0214 samequantum Inf -7 -> 0 +ddsamq0215 samequantum Inf -7E-3 -> 0 +ddsamq0216 samequantum Inf -0E-3 -> 0 +ddsamq0217 samequantum Inf -0 -> 0 +ddsamq0218 samequantum Inf -0E+3 -> 0 +ddsamq0219 samequantum Inf 0E-3 -> 0 +ddsamq0220 samequantum Inf 0 -> 0 +ddsamq0221 samequantum Inf 0E+3 -> 0 +ddsamq0222 samequantum Inf 7E-3 -> 0 +ddsamq0223 samequantum Inf 7 -> 0 +ddsamq0224 samequantum Inf 7E+3 -> 0 +ddsamq0225 samequantum Inf sNaN -> 0 + +ddsamq0310 samequantum NaN -Inf -> 0 +ddsamq0311 samequantum NaN Inf -> 0 +ddsamq0312 samequantum NaN NaN -> 1 +ddsamq0313 samequantum NaN -7E+3 -> 0 +ddsamq0314 samequantum NaN -7 -> 0 +ddsamq0315 samequantum NaN -7E-3 -> 0 +ddsamq0316 samequantum NaN -0E-3 -> 0 +ddsamq0317 samequantum NaN -0 -> 0 +ddsamq0318 samequantum NaN -0E+3 -> 0 +ddsamq0319 samequantum NaN 0E-3 -> 0 +ddsamq0320 samequantum NaN 0 -> 0 +ddsamq0321 samequantum NaN 0E+3 -> 0 +ddsamq0322 samequantum NaN 7E-3 -> 0 +ddsamq0323 samequantum NaN 7 -> 0 +ddsamq0324 samequantum NaN 7E+3 -> 0 +ddsamq0325 samequantum NaN sNaN -> 1 + +ddsamq0410 samequantum -7E+3 -Inf -> 0 +ddsamq0411 samequantum -7E+3 Inf -> 0 +ddsamq0412 samequantum -7E+3 NaN -> 0 +ddsamq0413 samequantum -7E+3 -7E+3 -> 1 +ddsamq0414 samequantum -7E+3 -7 -> 0 +ddsamq0415 samequantum -7E+3 -7E-3 -> 0 +ddsamq0416 samequantum -7E+3 -0E-3 -> 0 +ddsamq0417 samequantum -7E+3 -0 -> 0 +ddsamq0418 samequantum -7E+3 -0E+3 -> 1 +ddsamq0419 samequantum -7E+3 0E-3 -> 0 +ddsamq0420 samequantum -7E+3 0 -> 0 +ddsamq0421 samequantum -7E+3 0E+3 -> 1 +ddsamq0422 samequantum -7E+3 7E-3 -> 0 +ddsamq0423 samequantum -7E+3 7 -> 0 +ddsamq0424 samequantum -7E+3 7E+3 -> 1 +ddsamq0425 samequantum -7E+3 sNaN -> 0 + +ddsamq0510 samequantum -7 -Inf -> 0 +ddsamq0511 samequantum -7 Inf -> 0 +ddsamq0512 samequantum -7 NaN -> 0 +ddsamq0513 samequantum -7 -7E+3 -> 0 +ddsamq0514 samequantum -7 -7 -> 1 +ddsamq0515 samequantum -7 -7E-3 -> 0 +ddsamq0516 samequantum -7 -0E-3 -> 0 +ddsamq0517 samequantum -7 -0 -> 1 +ddsamq0518 samequantum -7 -0E+3 -> 0 +ddsamq0519 samequantum -7 0E-3 -> 0 +ddsamq0520 samequantum -7 0 -> 1 +ddsamq0521 samequantum -7 0E+3 -> 0 +ddsamq0522 samequantum -7 7E-3 -> 0 +ddsamq0523 samequantum -7 7 -> 1 +ddsamq0524 samequantum -7 7E+3 -> 0 +ddsamq0525 samequantum -7 sNaN -> 0 + +ddsamq0610 samequantum -7E-3 -Inf -> 0 +ddsamq0611 samequantum -7E-3 Inf -> 0 +ddsamq0612 samequantum -7E-3 NaN -> 0 +ddsamq0613 samequantum -7E-3 -7E+3 -> 0 +ddsamq0614 samequantum -7E-3 -7 -> 0 +ddsamq0615 samequantum -7E-3 -7E-3 -> 1 +ddsamq0616 samequantum -7E-3 -0E-3 -> 1 +ddsamq0617 samequantum -7E-3 -0 -> 0 +ddsamq0618 samequantum -7E-3 -0E+3 -> 0 +ddsamq0619 samequantum -7E-3 0E-3 -> 1 +ddsamq0620 samequantum -7E-3 0 -> 0 +ddsamq0621 samequantum -7E-3 0E+3 -> 0 +ddsamq0622 samequantum -7E-3 7E-3 -> 1 +ddsamq0623 samequantum -7E-3 7 -> 0 +ddsamq0624 samequantum -7E-3 7E+3 -> 0 +ddsamq0625 samequantum -7E-3 sNaN -> 0 + +ddsamq0710 samequantum -0E-3 -Inf -> 0 +ddsamq0711 samequantum -0E-3 Inf -> 0 +ddsamq0712 samequantum -0E-3 NaN -> 0 +ddsamq0713 samequantum -0E-3 -7E+3 -> 0 +ddsamq0714 samequantum -0E-3 -7 -> 0 +ddsamq0715 samequantum -0E-3 -7E-3 -> 1 +ddsamq0716 samequantum -0E-3 -0E-3 -> 1 +ddsamq0717 samequantum -0E-3 -0 -> 0 +ddsamq0718 samequantum -0E-3 -0E+3 -> 0 +ddsamq0719 samequantum -0E-3 0E-3 -> 1 +ddsamq0720 samequantum -0E-3 0 -> 0 +ddsamq0721 samequantum -0E-3 0E+3 -> 0 +ddsamq0722 samequantum -0E-3 7E-3 -> 1 +ddsamq0723 samequantum -0E-3 7 -> 0 +ddsamq0724 samequantum -0E-3 7E+3 -> 0 +ddsamq0725 samequantum -0E-3 sNaN -> 0 + +ddsamq0810 samequantum -0 -Inf -> 0 +ddsamq0811 samequantum -0 Inf -> 0 +ddsamq0812 samequantum -0 NaN -> 0 +ddsamq0813 samequantum -0 -7E+3 -> 0 +ddsamq0814 samequantum -0 -7 -> 1 +ddsamq0815 samequantum -0 -7E-3 -> 0 +ddsamq0816 samequantum -0 -0E-3 -> 0 +ddsamq0817 samequantum -0 -0 -> 1 +ddsamq0818 samequantum -0 -0E+3 -> 0 +ddsamq0819 samequantum -0 0E-3 -> 0 +ddsamq0820 samequantum -0 0 -> 1 +ddsamq0821 samequantum -0 0E+3 -> 0 +ddsamq0822 samequantum -0 7E-3 -> 0 +ddsamq0823 samequantum -0 7 -> 1 +ddsamq0824 samequantum -0 7E+3 -> 0 +ddsamq0825 samequantum -0 sNaN -> 0 + +ddsamq0910 samequantum -0E+3 -Inf -> 0 +ddsamq0911 samequantum -0E+3 Inf -> 0 +ddsamq0912 samequantum -0E+3 NaN -> 0 +ddsamq0913 samequantum -0E+3 -7E+3 -> 1 +ddsamq0914 samequantum -0E+3 -7 -> 0 +ddsamq0915 samequantum -0E+3 -7E-3 -> 0 +ddsamq0916 samequantum -0E+3 -0E-3 -> 0 +ddsamq0917 samequantum -0E+3 -0 -> 0 +ddsamq0918 samequantum -0E+3 -0E+3 -> 1 +ddsamq0919 samequantum -0E+3 0E-3 -> 0 +ddsamq0920 samequantum -0E+3 0 -> 0 +ddsamq0921 samequantum -0E+3 0E+3 -> 1 +ddsamq0922 samequantum -0E+3 7E-3 -> 0 +ddsamq0923 samequantum -0E+3 7 -> 0 +ddsamq0924 samequantum -0E+3 7E+3 -> 1 +ddsamq0925 samequantum -0E+3 sNaN -> 0 + +ddsamq1110 samequantum 0E-3 -Inf -> 0 +ddsamq1111 samequantum 0E-3 Inf -> 0 +ddsamq1112 samequantum 0E-3 NaN -> 0 +ddsamq1113 samequantum 0E-3 -7E+3 -> 0 +ddsamq1114 samequantum 0E-3 -7 -> 0 +ddsamq1115 samequantum 0E-3 -7E-3 -> 1 +ddsamq1116 samequantum 0E-3 -0E-3 -> 1 +ddsamq1117 samequantum 0E-3 -0 -> 0 +ddsamq1118 samequantum 0E-3 -0E+3 -> 0 +ddsamq1119 samequantum 0E-3 0E-3 -> 1 +ddsamq1120 samequantum 0E-3 0 -> 0 +ddsamq1121 samequantum 0E-3 0E+3 -> 0 +ddsamq1122 samequantum 0E-3 7E-3 -> 1 +ddsamq1123 samequantum 0E-3 7 -> 0 +ddsamq1124 samequantum 0E-3 7E+3 -> 0 +ddsamq1125 samequantum 0E-3 sNaN -> 0 + +ddsamq1210 samequantum 0 -Inf -> 0 +ddsamq1211 samequantum 0 Inf -> 0 +ddsamq1212 samequantum 0 NaN -> 0 +ddsamq1213 samequantum 0 -7E+3 -> 0 +ddsamq1214 samequantum 0 -7 -> 1 +ddsamq1215 samequantum 0 -7E-3 -> 0 +ddsamq1216 samequantum 0 -0E-3 -> 0 +ddsamq1217 samequantum 0 -0 -> 1 +ddsamq1218 samequantum 0 -0E+3 -> 0 +ddsamq1219 samequantum 0 0E-3 -> 0 +ddsamq1220 samequantum 0 0 -> 1 +ddsamq1221 samequantum 0 0E+3 -> 0 +ddsamq1222 samequantum 0 7E-3 -> 0 +ddsamq1223 samequantum 0 7 -> 1 +ddsamq1224 samequantum 0 7E+3 -> 0 +ddsamq1225 samequantum 0 sNaN -> 0 + +ddsamq1310 samequantum 0E+3 -Inf -> 0 +ddsamq1311 samequantum 0E+3 Inf -> 0 +ddsamq1312 samequantum 0E+3 NaN -> 0 +ddsamq1313 samequantum 0E+3 -7E+3 -> 1 +ddsamq1314 samequantum 0E+3 -7 -> 0 +ddsamq1315 samequantum 0E+3 -7E-3 -> 0 +ddsamq1316 samequantum 0E+3 -0E-3 -> 0 +ddsamq1317 samequantum 0E+3 -0 -> 0 +ddsamq1318 samequantum 0E+3 -0E+3 -> 1 +ddsamq1319 samequantum 0E+3 0E-3 -> 0 +ddsamq1320 samequantum 0E+3 0 -> 0 +ddsamq1321 samequantum 0E+3 0E+3 -> 1 +ddsamq1322 samequantum 0E+3 7E-3 -> 0 +ddsamq1323 samequantum 0E+3 7 -> 0 +ddsamq1324 samequantum 0E+3 7E+3 -> 1 +ddsamq1325 samequantum 0E+3 sNaN -> 0 + +ddsamq1410 samequantum 7E-3 -Inf -> 0 +ddsamq1411 samequantum 7E-3 Inf -> 0 +ddsamq1412 samequantum 7E-3 NaN -> 0 +ddsamq1413 samequantum 7E-3 -7E+3 -> 0 +ddsamq1414 samequantum 7E-3 -7 -> 0 +ddsamq1415 samequantum 7E-3 -7E-3 -> 1 +ddsamq1416 samequantum 7E-3 -0E-3 -> 1 +ddsamq1417 samequantum 7E-3 -0 -> 0 +ddsamq1418 samequantum 7E-3 -0E+3 -> 0 +ddsamq1419 samequantum 7E-3 0E-3 -> 1 +ddsamq1420 samequantum 7E-3 0 -> 0 +ddsamq1421 samequantum 7E-3 0E+3 -> 0 +ddsamq1422 samequantum 7E-3 7E-3 -> 1 +ddsamq1423 samequantum 7E-3 7 -> 0 +ddsamq1424 samequantum 7E-3 7E+3 -> 0 +ddsamq1425 samequantum 7E-3 sNaN -> 0 + +ddsamq1510 samequantum 7 -Inf -> 0 +ddsamq1511 samequantum 7 Inf -> 0 +ddsamq1512 samequantum 7 NaN -> 0 +ddsamq1513 samequantum 7 -7E+3 -> 0 +ddsamq1514 samequantum 7 -7 -> 1 +ddsamq1515 samequantum 7 -7E-3 -> 0 +ddsamq1516 samequantum 7 -0E-3 -> 0 +ddsamq1517 samequantum 7 -0 -> 1 +ddsamq1518 samequantum 7 -0E+3 -> 0 +ddsamq1519 samequantum 7 0E-3 -> 0 +ddsamq1520 samequantum 7 0 -> 1 +ddsamq1521 samequantum 7 0E+3 -> 0 +ddsamq1522 samequantum 7 7E-3 -> 0 +ddsamq1523 samequantum 7 7 -> 1 +ddsamq1524 samequantum 7 7E+3 -> 0 +ddsamq1525 samequantum 7 sNaN -> 0 + +ddsamq1610 samequantum 7E+3 -Inf -> 0 +ddsamq1611 samequantum 7E+3 Inf -> 0 +ddsamq1612 samequantum 7E+3 NaN -> 0 +ddsamq1613 samequantum 7E+3 -7E+3 -> 1 +ddsamq1614 samequantum 7E+3 -7 -> 0 +ddsamq1615 samequantum 7E+3 -7E-3 -> 0 +ddsamq1616 samequantum 7E+3 -0E-3 -> 0 +ddsamq1617 samequantum 7E+3 -0 -> 0 +ddsamq1618 samequantum 7E+3 -0E+3 -> 1 +ddsamq1619 samequantum 7E+3 0E-3 -> 0 +ddsamq1620 samequantum 7E+3 0 -> 0 +ddsamq1621 samequantum 7E+3 0E+3 -> 1 +ddsamq1622 samequantum 7E+3 7E-3 -> 0 +ddsamq1623 samequantum 7E+3 7 -> 0 +ddsamq1624 samequantum 7E+3 7E+3 -> 1 +ddsamq1625 samequantum 7E+3 sNaN -> 0 + +ddsamq1710 samequantum sNaN -Inf -> 0 +ddsamq1711 samequantum sNaN Inf -> 0 +ddsamq1712 samequantum sNaN NaN -> 1 +ddsamq1713 samequantum sNaN -7E+3 -> 0 +ddsamq1714 samequantum sNaN -7 -> 0 +ddsamq1715 samequantum sNaN -7E-3 -> 0 +ddsamq1716 samequantum sNaN -0E-3 -> 0 +ddsamq1717 samequantum sNaN -0 -> 0 +ddsamq1718 samequantum sNaN -0E+3 -> 0 +ddsamq1719 samequantum sNaN 0E-3 -> 0 +ddsamq1720 samequantum sNaN 0 -> 0 +ddsamq1721 samequantum sNaN 0E+3 -> 0 +ddsamq1722 samequantum sNaN 7E-3 -> 0 +ddsamq1723 samequantum sNaN 7 -> 0 +ddsamq1724 samequantum sNaN 7E+3 -> 0 +ddsamq1725 samequantum sNaN sNaN -> 1 +-- noisy NaNs +ddsamq1730 samequantum sNaN3 sNaN3 -> 1 +ddsamq1731 samequantum sNaN3 sNaN4 -> 1 +ddsamq1732 samequantum NaN3 NaN3 -> 1 +ddsamq1733 samequantum NaN3 NaN4 -> 1 +ddsamq1734 samequantum sNaN3 3 -> 0 +ddsamq1735 samequantum NaN3 3 -> 0 +ddsamq1736 samequantum 4 sNaN4 -> 0 +ddsamq1737 samequantum 3 NaN3 -> 0 +ddsamq1738 samequantum Inf sNaN4 -> 0 +ddsamq1739 samequantum -Inf NaN3 -> 0 + diff --git a/Lib/test/decimaltestdata/ddScaleB.decTest b/Lib/test/decimaltestdata/ddScaleB.decTest index edee11bccc9..6ba3e3976f8 100644 --- a/Lib/test/decimaltestdata/ddScaleB.decTest +++ b/Lib/test/decimaltestdata/ddScaleB.decTest @@ -1,243 +1,243 @@ ------------------------------------------------------------------------- --- ddScalebB.decTest -- scale a decDouble by powers of 10 -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Max |rhs| is 2*(384+16) = 800 - --- Sanity checks -ddscb001 scaleb 7.50 10 -> 7.50E+10 -ddscb002 scaleb 7.50 3 -> 7.50E+3 -ddscb003 scaleb 7.50 2 -> 750 -ddscb004 scaleb 7.50 1 -> 75.0 -ddscb005 scaleb 7.50 0 -> 7.50 -ddscb006 scaleb 7.50 -1 -> 0.750 -ddscb007 scaleb 7.50 -2 -> 0.0750 -ddscb008 scaleb 7.50 -10 -> 7.50E-10 -ddscb009 scaleb -7.50 3 -> -7.50E+3 -ddscb010 scaleb -7.50 2 -> -750 -ddscb011 scaleb -7.50 1 -> -75.0 -ddscb012 scaleb -7.50 0 -> -7.50 -ddscb013 scaleb -7.50 -1 -> -0.750 - --- Infinities -ddscb014 scaleb Infinity 1 -> Infinity -ddscb015 scaleb -Infinity 2 -> -Infinity -ddscb016 scaleb Infinity -1 -> Infinity -ddscb017 scaleb -Infinity -2 -> -Infinity - --- Next two are somewhat undefined in 754r; treat as non-integer -ddscb018 scaleb 10 Infinity -> NaN Invalid_operation -ddscb019 scaleb 10 -Infinity -> NaN Invalid_operation - --- NaNs are undefined in 754r; assume usual processing --- NaNs, 0 payload -ddscb021 scaleb NaN 1 -> NaN -ddscb022 scaleb -NaN -1 -> -NaN -ddscb023 scaleb sNaN 1 -> NaN Invalid_operation -ddscb024 scaleb -sNaN 1 -> -NaN Invalid_operation -ddscb025 scaleb 4 NaN -> NaN -ddscb026 scaleb -Inf -NaN -> -NaN -ddscb027 scaleb 4 sNaN -> NaN Invalid_operation -ddscb028 scaleb Inf -sNaN -> -NaN Invalid_operation - --- non-integer RHS -ddscb030 scaleb 1.23 1 -> 12.3 -ddscb031 scaleb 1.23 1.00 -> NaN Invalid_operation -ddscb032 scaleb 1.23 1.1 -> NaN Invalid_operation -ddscb033 scaleb 1.23 1.01 -> NaN Invalid_operation -ddscb034 scaleb 1.23 0.01 -> NaN Invalid_operation -ddscb035 scaleb 1.23 0.11 -> NaN Invalid_operation -ddscb036 scaleb 1.23 0.999999999 -> NaN Invalid_operation -ddscb037 scaleb 1.23 -1 -> 0.123 -ddscb038 scaleb 1.23 -1.00 -> NaN Invalid_operation -ddscb039 scaleb 1.23 -1.1 -> NaN Invalid_operation -ddscb040 scaleb 1.23 -1.01 -> NaN Invalid_operation -ddscb041 scaleb 1.23 -0.01 -> NaN Invalid_operation -ddscb042 scaleb 1.23 -0.11 -> NaN Invalid_operation -ddscb043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation -ddscb044 scaleb 1.23 0.1 -> NaN Invalid_operation -ddscb045 scaleb 1.23 1E+1 -> NaN Invalid_operation -ddscb046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation -ddscb047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation - --- out-of range RHS -ddscb120 scaleb 1.23 799 -> Infinity Overflow Inexact Rounded -ddscb121 scaleb 1.23 800 -> Infinity Overflow Inexact Rounded -ddscb122 scaleb 1.23 801 -> NaN Invalid_operation -ddscb123 scaleb 1.23 802 -> NaN Invalid_operation -ddscb124 scaleb 1.23 -799 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddscb125 scaleb 1.23 -800 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddscb126 scaleb 1.23 -801 -> NaN Invalid_operation -ddscb127 scaleb 1.23 -802 -> NaN Invalid_operation - --- NaNs, non-0 payload --- propagating NaNs -ddscb861 scaleb NaN01 -Inf -> NaN1 -ddscb862 scaleb -NaN02 -1000 -> -NaN2 -ddscb863 scaleb NaN03 1000 -> NaN3 -ddscb864 scaleb NaN04 Inf -> NaN4 -ddscb865 scaleb NaN05 NaN61 -> NaN5 -ddscb866 scaleb -Inf -NaN71 -> -NaN71 -ddscb867 scaleb -1000 NaN81 -> NaN81 -ddscb868 scaleb 1000 NaN91 -> NaN91 -ddscb869 scaleb Inf NaN101 -> NaN101 -ddscb871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation -ddscb872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation -ddscb873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation -ddscb874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation -ddscb875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation -ddscb876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation -ddscb877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation -ddscb878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation -ddscb879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation -ddscb880 scaleb Inf sNaN231 -> NaN231 Invalid_operation -ddscb881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation - --- finites -ddscb051 scaleb 7 -2 -> 0.07 -ddscb052 scaleb -7 -2 -> -0.07 -ddscb053 scaleb 75 -2 -> 0.75 -ddscb054 scaleb -75 -2 -> -0.75 -ddscb055 scaleb 7.50 -2 -> 0.0750 -ddscb056 scaleb -7.50 -2 -> -0.0750 -ddscb057 scaleb 7.500 -2 -> 0.07500 -ddscb058 scaleb -7.500 -2 -> -0.07500 -ddscb061 scaleb 7 -1 -> 0.7 -ddscb062 scaleb -7 -1 -> -0.7 -ddscb063 scaleb 75 -1 -> 7.5 -ddscb064 scaleb -75 -1 -> -7.5 -ddscb065 scaleb 7.50 -1 -> 0.750 -ddscb066 scaleb -7.50 -1 -> -0.750 -ddscb067 scaleb 7.500 -1 -> 0.7500 -ddscb068 scaleb -7.500 -1 -> -0.7500 -ddscb071 scaleb 7 0 -> 7 -ddscb072 scaleb -7 0 -> -7 -ddscb073 scaleb 75 0 -> 75 -ddscb074 scaleb -75 0 -> -75 -ddscb075 scaleb 7.50 0 -> 7.50 -ddscb076 scaleb -7.50 0 -> -7.50 -ddscb077 scaleb 7.500 0 -> 7.500 -ddscb078 scaleb -7.500 0 -> -7.500 -ddscb081 scaleb 7 1 -> 7E+1 -ddscb082 scaleb -7 1 -> -7E+1 -ddscb083 scaleb 75 1 -> 7.5E+2 -ddscb084 scaleb -75 1 -> -7.5E+2 -ddscb085 scaleb 7.50 1 -> 75.0 -ddscb086 scaleb -7.50 1 -> -75.0 -ddscb087 scaleb 7.500 1 -> 75.00 -ddscb088 scaleb -7.500 1 -> -75.00 -ddscb091 scaleb 7 2 -> 7E+2 -ddscb092 scaleb -7 2 -> -7E+2 -ddscb093 scaleb 75 2 -> 7.5E+3 -ddscb094 scaleb -75 2 -> -7.5E+3 -ddscb095 scaleb 7.50 2 -> 750 -ddscb096 scaleb -7.50 2 -> -750 -ddscb097 scaleb 7.500 2 -> 750.0 -ddscb098 scaleb -7.500 2 -> -750.0 - --- zeros -ddscb111 scaleb 0 1 -> 0E+1 -ddscb112 scaleb -0 2 -> -0E+2 -ddscb113 scaleb 0E+4 3 -> 0E+7 -ddscb114 scaleb -0E+4 4 -> -0E+8 -ddscb115 scaleb 0.0000 5 -> 0E+1 -ddscb116 scaleb -0.0000 6 -> -0E+2 -ddscb117 scaleb 0E-141 7 -> 0E-134 -ddscb118 scaleb -0E-141 8 -> -0E-133 - --- Nmax, Nmin, Ntiny -ddscb132 scaleb 9.999999999999999E+384 +384 -> Infinity Overflow Inexact Rounded -ddscb133 scaleb 9.999999999999999E+384 +10 -> Infinity Overflow Inexact Rounded -ddscb134 scaleb 9.999999999999999E+384 +1 -> Infinity Overflow Inexact Rounded -ddscb135 scaleb 9.999999999999999E+384 0 -> 9.999999999999999E+384 -ddscb136 scaleb 9.999999999999999E+384 -1 -> 9.999999999999999E+383 -ddscb137 scaleb 1E-383 +1 -> 1E-382 -ddscb138 scaleb 1E-383 -0 -> 1E-383 -ddscb139 scaleb 1E-383 -1 -> 1E-384 Subnormal -ddscb140 scaleb 1.000000000000000E-383 +1 -> 1.000000000000000E-382 -ddscb141 scaleb 1.000000000000000E-383 0 -> 1.000000000000000E-383 -ddscb142 scaleb 1.000000000000000E-383 -1 -> 1.00000000000000E-384 Subnormal Rounded -ddscb143 scaleb 1E-398 +1 -> 1E-397 Subnormal -ddscb144 scaleb 1E-398 -0 -> 1E-398 Subnormal -ddscb145 scaleb 1E-398 -1 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - -ddscb150 scaleb -1E-398 +1 -> -1E-397 Subnormal -ddscb151 scaleb -1E-398 -0 -> -1E-398 Subnormal -ddscb152 scaleb -1E-398 -1 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped -ddscb153 scaleb -1.000000000000000E-383 +1 -> -1.000000000000000E-382 -ddscb154 scaleb -1.000000000000000E-383 +0 -> -1.000000000000000E-383 -ddscb155 scaleb -1.000000000000000E-383 -1 -> -1.00000000000000E-384 Subnormal Rounded -ddscb156 scaleb -1E-383 +1 -> -1E-382 -ddscb157 scaleb -1E-383 -0 -> -1E-383 -ddscb158 scaleb -1E-383 -1 -> -1E-384 Subnormal -ddscb159 scaleb -9.999999999999999E+384 +1 -> -Infinity Overflow Inexact Rounded -ddscb160 scaleb -9.999999999999999E+384 +0 -> -9.999999999999999E+384 -ddscb161 scaleb -9.999999999999999E+384 -1 -> -9.999999999999999E+383 -ddscb162 scaleb -9E+384 +1 -> -Infinity Overflow Inexact Rounded -ddscb163 scaleb -1E+384 +1 -> -Infinity Overflow Inexact Rounded - --- some Origami --- (these check that overflow is being done correctly) -ddscb171 scaleb 1000E+365 +1 -> 1.000E+369 -ddscb172 scaleb 1000E+366 +1 -> 1.000E+370 -ddscb173 scaleb 1000E+367 +1 -> 1.000E+371 -ddscb174 scaleb 1000E+368 +1 -> 1.000E+372 -ddscb175 scaleb 1000E+369 +1 -> 1.0000E+373 Clamped -ddscb176 scaleb 1000E+370 +1 -> 1.00000E+374 Clamped -ddscb177 scaleb 1000E+371 +1 -> 1.000000E+375 Clamped -ddscb178 scaleb 1000E+372 +1 -> 1.0000000E+376 Clamped -ddscb179 scaleb 1000E+373 +1 -> 1.00000000E+377 Clamped -ddscb180 scaleb 1000E+374 +1 -> 1.000000000E+378 Clamped -ddscb181 scaleb 1000E+375 +1 -> 1.0000000000E+379 Clamped -ddscb182 scaleb 1000E+376 +1 -> 1.00000000000E+380 Clamped -ddscb183 scaleb 1000E+377 +1 -> 1.000000000000E+381 Clamped -ddscb184 scaleb 1000E+378 +1 -> 1.0000000000000E+382 Clamped -ddscb185 scaleb 1000E+379 +1 -> 1.00000000000000E+383 Clamped -ddscb186 scaleb 1000E+380 +1 -> 1.000000000000000E+384 Clamped -ddscb187 scaleb 1000E+381 +1 -> Infinity Overflow Inexact Rounded - --- and a few more subnormal truncations --- (these check that underflow is being done correctly) -ddscb201 scaleb 1.000000000000000E-383 0 -> 1.000000000000000E-383 -ddscb202 scaleb 1.000000000000000E-383 -1 -> 1.00000000000000E-384 Subnormal Rounded -ddscb203 scaleb 1.000000000000000E-383 -2 -> 1.0000000000000E-385 Subnormal Rounded -ddscb204 scaleb 1.000000000000000E-383 -3 -> 1.000000000000E-386 Subnormal Rounded -ddscb205 scaleb 1.000000000000000E-383 -4 -> 1.00000000000E-387 Subnormal Rounded -ddscb206 scaleb 1.000000000000000E-383 -5 -> 1.0000000000E-388 Subnormal Rounded -ddscb207 scaleb 1.000000000000000E-383 -6 -> 1.000000000E-389 Subnormal Rounded -ddscb208 scaleb 1.000000000000000E-383 -7 -> 1.00000000E-390 Subnormal Rounded -ddscb209 scaleb 1.000000000000000E-383 -8 -> 1.0000000E-391 Subnormal Rounded -ddscb210 scaleb 1.000000000000000E-383 -9 -> 1.000000E-392 Subnormal Rounded -ddscb211 scaleb 1.000000000000000E-383 -10 -> 1.00000E-393 Subnormal Rounded -ddscb212 scaleb 1.000000000000000E-383 -11 -> 1.0000E-394 Subnormal Rounded -ddscb213 scaleb 1.000000000000000E-383 -12 -> 1.000E-395 Subnormal Rounded -ddscb214 scaleb 1.000000000000000E-383 -13 -> 1.00E-396 Subnormal Rounded -ddscb215 scaleb 1.000000000000000E-383 -14 -> 1.0E-397 Subnormal Rounded -ddscb216 scaleb 1.000000000000000E-383 -15 -> 1E-398 Subnormal Rounded -ddscb217 scaleb 1.000000000000000E-383 -16 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped -ddscb218 scaleb 1.000000000000000E-383 -17 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped - +------------------------------------------------------------------------ +-- ddScalebB.decTest -- scale a decDouble by powers of 10 -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Max |rhs| is 2*(384+16) = 800 + +-- Sanity checks +ddscb001 scaleb 7.50 10 -> 7.50E+10 +ddscb002 scaleb 7.50 3 -> 7.50E+3 +ddscb003 scaleb 7.50 2 -> 750 +ddscb004 scaleb 7.50 1 -> 75.0 +ddscb005 scaleb 7.50 0 -> 7.50 +ddscb006 scaleb 7.50 -1 -> 0.750 +ddscb007 scaleb 7.50 -2 -> 0.0750 +ddscb008 scaleb 7.50 -10 -> 7.50E-10 +ddscb009 scaleb -7.50 3 -> -7.50E+3 +ddscb010 scaleb -7.50 2 -> -750 +ddscb011 scaleb -7.50 1 -> -75.0 +ddscb012 scaleb -7.50 0 -> -7.50 +ddscb013 scaleb -7.50 -1 -> -0.750 + +-- Infinities +ddscb014 scaleb Infinity 1 -> Infinity +ddscb015 scaleb -Infinity 2 -> -Infinity +ddscb016 scaleb Infinity -1 -> Infinity +ddscb017 scaleb -Infinity -2 -> -Infinity + +-- Next two are somewhat undefined in 754r; treat as non-integer +ddscb018 scaleb 10 Infinity -> NaN Invalid_operation +ddscb019 scaleb 10 -Infinity -> NaN Invalid_operation + +-- NaNs are undefined in 754r; assume usual processing +-- NaNs, 0 payload +ddscb021 scaleb NaN 1 -> NaN +ddscb022 scaleb -NaN -1 -> -NaN +ddscb023 scaleb sNaN 1 -> NaN Invalid_operation +ddscb024 scaleb -sNaN 1 -> -NaN Invalid_operation +ddscb025 scaleb 4 NaN -> NaN +ddscb026 scaleb -Inf -NaN -> -NaN +ddscb027 scaleb 4 sNaN -> NaN Invalid_operation +ddscb028 scaleb Inf -sNaN -> -NaN Invalid_operation + +-- non-integer RHS +ddscb030 scaleb 1.23 1 -> 12.3 +ddscb031 scaleb 1.23 1.00 -> NaN Invalid_operation +ddscb032 scaleb 1.23 1.1 -> NaN Invalid_operation +ddscb033 scaleb 1.23 1.01 -> NaN Invalid_operation +ddscb034 scaleb 1.23 0.01 -> NaN Invalid_operation +ddscb035 scaleb 1.23 0.11 -> NaN Invalid_operation +ddscb036 scaleb 1.23 0.999999999 -> NaN Invalid_operation +ddscb037 scaleb 1.23 -1 -> 0.123 +ddscb038 scaleb 1.23 -1.00 -> NaN Invalid_operation +ddscb039 scaleb 1.23 -1.1 -> NaN Invalid_operation +ddscb040 scaleb 1.23 -1.01 -> NaN Invalid_operation +ddscb041 scaleb 1.23 -0.01 -> NaN Invalid_operation +ddscb042 scaleb 1.23 -0.11 -> NaN Invalid_operation +ddscb043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation +ddscb044 scaleb 1.23 0.1 -> NaN Invalid_operation +ddscb045 scaleb 1.23 1E+1 -> NaN Invalid_operation +ddscb046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation +ddscb047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation + +-- out-of range RHS +ddscb120 scaleb 1.23 799 -> Infinity Overflow Inexact Rounded +ddscb121 scaleb 1.23 800 -> Infinity Overflow Inexact Rounded +ddscb122 scaleb 1.23 801 -> NaN Invalid_operation +ddscb123 scaleb 1.23 802 -> NaN Invalid_operation +ddscb124 scaleb 1.23 -799 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddscb125 scaleb 1.23 -800 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddscb126 scaleb 1.23 -801 -> NaN Invalid_operation +ddscb127 scaleb 1.23 -802 -> NaN Invalid_operation + +-- NaNs, non-0 payload +-- propagating NaNs +ddscb861 scaleb NaN01 -Inf -> NaN1 +ddscb862 scaleb -NaN02 -1000 -> -NaN2 +ddscb863 scaleb NaN03 1000 -> NaN3 +ddscb864 scaleb NaN04 Inf -> NaN4 +ddscb865 scaleb NaN05 NaN61 -> NaN5 +ddscb866 scaleb -Inf -NaN71 -> -NaN71 +ddscb867 scaleb -1000 NaN81 -> NaN81 +ddscb868 scaleb 1000 NaN91 -> NaN91 +ddscb869 scaleb Inf NaN101 -> NaN101 +ddscb871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation +ddscb872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation +ddscb873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation +ddscb874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation +ddscb875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation +ddscb876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation +ddscb877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation +ddscb878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation +ddscb879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation +ddscb880 scaleb Inf sNaN231 -> NaN231 Invalid_operation +ddscb881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation + +-- finites +ddscb051 scaleb 7 -2 -> 0.07 +ddscb052 scaleb -7 -2 -> -0.07 +ddscb053 scaleb 75 -2 -> 0.75 +ddscb054 scaleb -75 -2 -> -0.75 +ddscb055 scaleb 7.50 -2 -> 0.0750 +ddscb056 scaleb -7.50 -2 -> -0.0750 +ddscb057 scaleb 7.500 -2 -> 0.07500 +ddscb058 scaleb -7.500 -2 -> -0.07500 +ddscb061 scaleb 7 -1 -> 0.7 +ddscb062 scaleb -7 -1 -> -0.7 +ddscb063 scaleb 75 -1 -> 7.5 +ddscb064 scaleb -75 -1 -> -7.5 +ddscb065 scaleb 7.50 -1 -> 0.750 +ddscb066 scaleb -7.50 -1 -> -0.750 +ddscb067 scaleb 7.500 -1 -> 0.7500 +ddscb068 scaleb -7.500 -1 -> -0.7500 +ddscb071 scaleb 7 0 -> 7 +ddscb072 scaleb -7 0 -> -7 +ddscb073 scaleb 75 0 -> 75 +ddscb074 scaleb -75 0 -> -75 +ddscb075 scaleb 7.50 0 -> 7.50 +ddscb076 scaleb -7.50 0 -> -7.50 +ddscb077 scaleb 7.500 0 -> 7.500 +ddscb078 scaleb -7.500 0 -> -7.500 +ddscb081 scaleb 7 1 -> 7E+1 +ddscb082 scaleb -7 1 -> -7E+1 +ddscb083 scaleb 75 1 -> 7.5E+2 +ddscb084 scaleb -75 1 -> -7.5E+2 +ddscb085 scaleb 7.50 1 -> 75.0 +ddscb086 scaleb -7.50 1 -> -75.0 +ddscb087 scaleb 7.500 1 -> 75.00 +ddscb088 scaleb -7.500 1 -> -75.00 +ddscb091 scaleb 7 2 -> 7E+2 +ddscb092 scaleb -7 2 -> -7E+2 +ddscb093 scaleb 75 2 -> 7.5E+3 +ddscb094 scaleb -75 2 -> -7.5E+3 +ddscb095 scaleb 7.50 2 -> 750 +ddscb096 scaleb -7.50 2 -> -750 +ddscb097 scaleb 7.500 2 -> 750.0 +ddscb098 scaleb -7.500 2 -> -750.0 + +-- zeros +ddscb111 scaleb 0 1 -> 0E+1 +ddscb112 scaleb -0 2 -> -0E+2 +ddscb113 scaleb 0E+4 3 -> 0E+7 +ddscb114 scaleb -0E+4 4 -> -0E+8 +ddscb115 scaleb 0.0000 5 -> 0E+1 +ddscb116 scaleb -0.0000 6 -> -0E+2 +ddscb117 scaleb 0E-141 7 -> 0E-134 +ddscb118 scaleb -0E-141 8 -> -0E-133 + +-- Nmax, Nmin, Ntiny +ddscb132 scaleb 9.999999999999999E+384 +384 -> Infinity Overflow Inexact Rounded +ddscb133 scaleb 9.999999999999999E+384 +10 -> Infinity Overflow Inexact Rounded +ddscb134 scaleb 9.999999999999999E+384 +1 -> Infinity Overflow Inexact Rounded +ddscb135 scaleb 9.999999999999999E+384 0 -> 9.999999999999999E+384 +ddscb136 scaleb 9.999999999999999E+384 -1 -> 9.999999999999999E+383 +ddscb137 scaleb 1E-383 +1 -> 1E-382 +ddscb138 scaleb 1E-383 -0 -> 1E-383 +ddscb139 scaleb 1E-383 -1 -> 1E-384 Subnormal +ddscb140 scaleb 1.000000000000000E-383 +1 -> 1.000000000000000E-382 +ddscb141 scaleb 1.000000000000000E-383 0 -> 1.000000000000000E-383 +ddscb142 scaleb 1.000000000000000E-383 -1 -> 1.00000000000000E-384 Subnormal Rounded +ddscb143 scaleb 1E-398 +1 -> 1E-397 Subnormal +ddscb144 scaleb 1E-398 -0 -> 1E-398 Subnormal +ddscb145 scaleb 1E-398 -1 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + +ddscb150 scaleb -1E-398 +1 -> -1E-397 Subnormal +ddscb151 scaleb -1E-398 -0 -> -1E-398 Subnormal +ddscb152 scaleb -1E-398 -1 -> -0E-398 Underflow Subnormal Inexact Rounded Clamped +ddscb153 scaleb -1.000000000000000E-383 +1 -> -1.000000000000000E-382 +ddscb154 scaleb -1.000000000000000E-383 +0 -> -1.000000000000000E-383 +ddscb155 scaleb -1.000000000000000E-383 -1 -> -1.00000000000000E-384 Subnormal Rounded +ddscb156 scaleb -1E-383 +1 -> -1E-382 +ddscb157 scaleb -1E-383 -0 -> -1E-383 +ddscb158 scaleb -1E-383 -1 -> -1E-384 Subnormal +ddscb159 scaleb -9.999999999999999E+384 +1 -> -Infinity Overflow Inexact Rounded +ddscb160 scaleb -9.999999999999999E+384 +0 -> -9.999999999999999E+384 +ddscb161 scaleb -9.999999999999999E+384 -1 -> -9.999999999999999E+383 +ddscb162 scaleb -9E+384 +1 -> -Infinity Overflow Inexact Rounded +ddscb163 scaleb -1E+384 +1 -> -Infinity Overflow Inexact Rounded + +-- some Origami +-- (these check that overflow is being done correctly) +ddscb171 scaleb 1000E+365 +1 -> 1.000E+369 +ddscb172 scaleb 1000E+366 +1 -> 1.000E+370 +ddscb173 scaleb 1000E+367 +1 -> 1.000E+371 +ddscb174 scaleb 1000E+368 +1 -> 1.000E+372 +ddscb175 scaleb 1000E+369 +1 -> 1.0000E+373 Clamped +ddscb176 scaleb 1000E+370 +1 -> 1.00000E+374 Clamped +ddscb177 scaleb 1000E+371 +1 -> 1.000000E+375 Clamped +ddscb178 scaleb 1000E+372 +1 -> 1.0000000E+376 Clamped +ddscb179 scaleb 1000E+373 +1 -> 1.00000000E+377 Clamped +ddscb180 scaleb 1000E+374 +1 -> 1.000000000E+378 Clamped +ddscb181 scaleb 1000E+375 +1 -> 1.0000000000E+379 Clamped +ddscb182 scaleb 1000E+376 +1 -> 1.00000000000E+380 Clamped +ddscb183 scaleb 1000E+377 +1 -> 1.000000000000E+381 Clamped +ddscb184 scaleb 1000E+378 +1 -> 1.0000000000000E+382 Clamped +ddscb185 scaleb 1000E+379 +1 -> 1.00000000000000E+383 Clamped +ddscb186 scaleb 1000E+380 +1 -> 1.000000000000000E+384 Clamped +ddscb187 scaleb 1000E+381 +1 -> Infinity Overflow Inexact Rounded + +-- and a few more subnormal truncations +-- (these check that underflow is being done correctly) +ddscb201 scaleb 1.000000000000000E-383 0 -> 1.000000000000000E-383 +ddscb202 scaleb 1.000000000000000E-383 -1 -> 1.00000000000000E-384 Subnormal Rounded +ddscb203 scaleb 1.000000000000000E-383 -2 -> 1.0000000000000E-385 Subnormal Rounded +ddscb204 scaleb 1.000000000000000E-383 -3 -> 1.000000000000E-386 Subnormal Rounded +ddscb205 scaleb 1.000000000000000E-383 -4 -> 1.00000000000E-387 Subnormal Rounded +ddscb206 scaleb 1.000000000000000E-383 -5 -> 1.0000000000E-388 Subnormal Rounded +ddscb207 scaleb 1.000000000000000E-383 -6 -> 1.000000000E-389 Subnormal Rounded +ddscb208 scaleb 1.000000000000000E-383 -7 -> 1.00000000E-390 Subnormal Rounded +ddscb209 scaleb 1.000000000000000E-383 -8 -> 1.0000000E-391 Subnormal Rounded +ddscb210 scaleb 1.000000000000000E-383 -9 -> 1.000000E-392 Subnormal Rounded +ddscb211 scaleb 1.000000000000000E-383 -10 -> 1.00000E-393 Subnormal Rounded +ddscb212 scaleb 1.000000000000000E-383 -11 -> 1.0000E-394 Subnormal Rounded +ddscb213 scaleb 1.000000000000000E-383 -12 -> 1.000E-395 Subnormal Rounded +ddscb214 scaleb 1.000000000000000E-383 -13 -> 1.00E-396 Subnormal Rounded +ddscb215 scaleb 1.000000000000000E-383 -14 -> 1.0E-397 Subnormal Rounded +ddscb216 scaleb 1.000000000000000E-383 -15 -> 1E-398 Subnormal Rounded +ddscb217 scaleb 1.000000000000000E-383 -16 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped +ddscb218 scaleb 1.000000000000000E-383 -17 -> 0E-398 Underflow Subnormal Inexact Rounded Clamped + diff --git a/Lib/test/decimaltestdata/ddShift.decTest b/Lib/test/decimaltestdata/ddShift.decTest index f62a236b2ed..ec472403e6b 100644 --- a/Lib/test/decimaltestdata/ddShift.decTest +++ b/Lib/test/decimaltestdata/ddShift.decTest @@ -1,262 +1,262 @@ ------------------------------------------------------------------------- --- ddShift.decTest -- shift decDouble coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check -ddshi001 shift 0 0 -> 0 -ddshi002 shift 0 2 -> 0 -ddshi003 shift 1 2 -> 100 -ddshi004 shift 1 15 -> 1000000000000000 -ddshi005 shift 1 16 -> 0 -ddshi006 shift 1 -1 -> 0 -ddshi007 shift 0 -2 -> 0 -ddshi008 shift 1234567890123456 -1 -> 123456789012345 -ddshi009 shift 1234567890123456 -15 -> 1 -ddshi010 shift 1234567890123456 -16 -> 0 -ddshi011 shift 9934567890123456 -15 -> 9 -ddshi012 shift 9934567890123456 -16 -> 0 - --- rhs must be an integer -ddshi015 shift 1 1.5 -> NaN Invalid_operation -ddshi016 shift 1 1.0 -> NaN Invalid_operation -ddshi017 shift 1 0.1 -> NaN Invalid_operation -ddshi018 shift 1 0.0 -> NaN Invalid_operation -ddshi019 shift 1 1E+1 -> NaN Invalid_operation -ddshi020 shift 1 1E+99 -> NaN Invalid_operation -ddshi021 shift 1 Inf -> NaN Invalid_operation -ddshi022 shift 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -ddshi025 shift 1 -1000 -> NaN Invalid_operation -ddshi026 shift 1 -17 -> NaN Invalid_operation -ddshi027 shift 1 17 -> NaN Invalid_operation -ddshi028 shift 1 1000 -> NaN Invalid_operation - --- full shifting pattern -ddshi030 shift 1234567890123456 -16 -> 0 -ddshi031 shift 1234567890123456 -15 -> 1 -ddshi032 shift 1234567890123456 -14 -> 12 -ddshi033 shift 1234567890123456 -13 -> 123 -ddshi034 shift 1234567890123456 -12 -> 1234 -ddshi035 shift 1234567890123456 -11 -> 12345 -ddshi036 shift 1234567890123456 -10 -> 123456 -ddshi037 shift 1234567890123456 -9 -> 1234567 -ddshi038 shift 1234567890123456 -8 -> 12345678 -ddshi039 shift 1234567890123456 -7 -> 123456789 -ddshi040 shift 1234567890123456 -6 -> 1234567890 -ddshi041 shift 1234567890123456 -5 -> 12345678901 -ddshi042 shift 1234567890123456 -4 -> 123456789012 -ddshi043 shift 1234567890123456 -3 -> 1234567890123 -ddshi044 shift 1234567890123456 -2 -> 12345678901234 -ddshi045 shift 1234567890123456 -1 -> 123456789012345 -ddshi046 shift 1234567890123456 -0 -> 1234567890123456 - -ddshi047 shift 1234567890123456 +0 -> 1234567890123456 -ddshi048 shift 1234567890123456 +1 -> 2345678901234560 -ddshi049 shift 1234567890123456 +2 -> 3456789012345600 -ddshi050 shift 1234567890123456 +3 -> 4567890123456000 -ddshi051 shift 1234567890123456 +4 -> 5678901234560000 -ddshi052 shift 1234567890123456 +5 -> 6789012345600000 -ddshi053 shift 1234567890123456 +6 -> 7890123456000000 -ddshi054 shift 1234567890123456 +7 -> 8901234560000000 -ddshi055 shift 1234567890123456 +8 -> 9012345600000000 -ddshi056 shift 1234567890123456 +9 -> 123456000000000 -ddshi057 shift 1234567890123456 +10 -> 1234560000000000 -ddshi058 shift 1234567890123456 +11 -> 2345600000000000 -ddshi059 shift 1234567890123456 +12 -> 3456000000000000 -ddshi060 shift 1234567890123456 +13 -> 4560000000000000 -ddshi061 shift 1234567890123456 +14 -> 5600000000000000 -ddshi062 shift 1234567890123456 +15 -> 6000000000000000 -ddshi063 shift 1234567890123456 +16 -> 0 - --- zeros -ddshi070 shift 0E-10 +9 -> 0E-10 -ddshi071 shift 0E-10 -9 -> 0E-10 -ddshi072 shift 0.000 +9 -> 0.000 -ddshi073 shift 0.000 -9 -> 0.000 -ddshi074 shift 0E+10 +9 -> 0E+10 -ddshi075 shift 0E+10 -9 -> 0E+10 -ddshi076 shift -0E-10 +9 -> -0E-10 -ddshi077 shift -0E-10 -9 -> -0E-10 -ddshi078 shift -0.000 +9 -> -0.000 -ddshi079 shift -0.000 -9 -> -0.000 -ddshi080 shift -0E+10 +9 -> -0E+10 -ddshi081 shift -0E+10 -9 -> -0E+10 - --- Nmax, Nmin, Ntiny -ddshi141 shift 9.999999999999999E+384 -1 -> 9.99999999999999E+383 -ddshi142 shift 9.999999999999999E+384 -15 -> 9E+369 -ddshi143 shift 9.999999999999999E+384 1 -> 9.999999999999990E+384 -ddshi144 shift 9.999999999999999E+384 15 -> 9.000000000000000E+384 -ddshi145 shift 1E-383 -1 -> 0E-383 -ddshi146 shift 1E-383 -15 -> 0E-383 -ddshi147 shift 1E-383 1 -> 1.0E-382 -ddshi148 shift 1E-383 15 -> 1.000000000000000E-368 -ddshi151 shift 1.000000000000000E-383 -1 -> 1.00000000000000E-384 -ddshi152 shift 1.000000000000000E-383 -15 -> 1E-398 -ddshi153 shift 1.000000000000000E-383 1 -> 0E-398 -ddshi154 shift 1.000000000000000E-383 15 -> 0E-398 -ddshi155 shift 9.000000000000000E-383 -1 -> 9.00000000000000E-384 -ddshi156 shift 9.000000000000000E-383 -15 -> 9E-398 -ddshi157 shift 9.000000000000000E-383 1 -> 0E-398 -ddshi158 shift 9.000000000000000E-383 15 -> 0E-398 -ddshi160 shift 1E-398 -1 -> 0E-398 -ddshi161 shift 1E-398 -15 -> 0E-398 -ddshi162 shift 1E-398 1 -> 1.0E-397 -ddshi163 shift 1E-398 15 -> 1.000000000000000E-383 --- negatives -ddshi171 shift -9.999999999999999E+384 -1 -> -9.99999999999999E+383 -ddshi172 shift -9.999999999999999E+384 -15 -> -9E+369 -ddshi173 shift -9.999999999999999E+384 1 -> -9.999999999999990E+384 -ddshi174 shift -9.999999999999999E+384 15 -> -9.000000000000000E+384 -ddshi175 shift -1E-383 -1 -> -0E-383 -ddshi176 shift -1E-383 -15 -> -0E-383 -ddshi177 shift -1E-383 1 -> -1.0E-382 -ddshi178 shift -1E-383 15 -> -1.000000000000000E-368 -ddshi181 shift -1.000000000000000E-383 -1 -> -1.00000000000000E-384 -ddshi182 shift -1.000000000000000E-383 -15 -> -1E-398 -ddshi183 shift -1.000000000000000E-383 1 -> -0E-398 -ddshi184 shift -1.000000000000000E-383 15 -> -0E-398 -ddshi185 shift -9.000000000000000E-383 -1 -> -9.00000000000000E-384 -ddshi186 shift -9.000000000000000E-383 -15 -> -9E-398 -ddshi187 shift -9.000000000000000E-383 1 -> -0E-398 -ddshi188 shift -9.000000000000000E-383 15 -> -0E-398 -ddshi190 shift -1E-398 -1 -> -0E-398 -ddshi191 shift -1E-398 -15 -> -0E-398 -ddshi192 shift -1E-398 1 -> -1.0E-397 -ddshi193 shift -1E-398 15 -> -1.000000000000000E-383 - --- more negatives (of sanities) -ddshi201 shift -0 0 -> -0 -ddshi202 shift -0 2 -> -0 -ddshi203 shift -1 2 -> -100 -ddshi204 shift -1 15 -> -1000000000000000 -ddshi205 shift -1 16 -> -0 -ddshi206 shift -1 -1 -> -0 -ddshi207 shift -0 -2 -> -0 -ddshi208 shift -1234567890123456 -1 -> -123456789012345 -ddshi209 shift -1234567890123456 -15 -> -1 -ddshi210 shift -1234567890123456 -16 -> -0 -ddshi211 shift -9934567890123456 -15 -> -9 -ddshi212 shift -9934567890123456 -16 -> -0 - - --- Specials; NaNs are handled as usual -ddshi781 shift -Inf -8 -> -Infinity -ddshi782 shift -Inf -1 -> -Infinity -ddshi783 shift -Inf -0 -> -Infinity -ddshi784 shift -Inf 0 -> -Infinity -ddshi785 shift -Inf 1 -> -Infinity -ddshi786 shift -Inf 8 -> -Infinity -ddshi787 shift -1000 -Inf -> NaN Invalid_operation -ddshi788 shift -Inf -Inf -> NaN Invalid_operation -ddshi789 shift -1 -Inf -> NaN Invalid_operation -ddshi790 shift -0 -Inf -> NaN Invalid_operation -ddshi791 shift 0 -Inf -> NaN Invalid_operation -ddshi792 shift 1 -Inf -> NaN Invalid_operation -ddshi793 shift 1000 -Inf -> NaN Invalid_operation -ddshi794 shift Inf -Inf -> NaN Invalid_operation - -ddshi800 shift Inf -Inf -> NaN Invalid_operation -ddshi801 shift Inf -8 -> Infinity -ddshi802 shift Inf -1 -> Infinity -ddshi803 shift Inf -0 -> Infinity -ddshi804 shift Inf 0 -> Infinity -ddshi805 shift Inf 1 -> Infinity -ddshi806 shift Inf 8 -> Infinity -ddshi807 shift Inf Inf -> NaN Invalid_operation -ddshi808 shift -1000 Inf -> NaN Invalid_operation -ddshi809 shift -Inf Inf -> NaN Invalid_operation -ddshi810 shift -1 Inf -> NaN Invalid_operation -ddshi811 shift -0 Inf -> NaN Invalid_operation -ddshi812 shift 0 Inf -> NaN Invalid_operation -ddshi813 shift 1 Inf -> NaN Invalid_operation -ddshi814 shift 1000 Inf -> NaN Invalid_operation -ddshi815 shift Inf Inf -> NaN Invalid_operation - -ddshi821 shift NaN -Inf -> NaN -ddshi822 shift NaN -1000 -> NaN -ddshi823 shift NaN -1 -> NaN -ddshi824 shift NaN -0 -> NaN -ddshi825 shift NaN 0 -> NaN -ddshi826 shift NaN 1 -> NaN -ddshi827 shift NaN 1000 -> NaN -ddshi828 shift NaN Inf -> NaN -ddshi829 shift NaN NaN -> NaN -ddshi830 shift -Inf NaN -> NaN -ddshi831 shift -1000 NaN -> NaN -ddshi832 shift -1 NaN -> NaN -ddshi833 shift -0 NaN -> NaN -ddshi834 shift 0 NaN -> NaN -ddshi835 shift 1 NaN -> NaN -ddshi836 shift 1000 NaN -> NaN -ddshi837 shift Inf NaN -> NaN - -ddshi841 shift sNaN -Inf -> NaN Invalid_operation -ddshi842 shift sNaN -1000 -> NaN Invalid_operation -ddshi843 shift sNaN -1 -> NaN Invalid_operation -ddshi844 shift sNaN -0 -> NaN Invalid_operation -ddshi845 shift sNaN 0 -> NaN Invalid_operation -ddshi846 shift sNaN 1 -> NaN Invalid_operation -ddshi847 shift sNaN 1000 -> NaN Invalid_operation -ddshi848 shift sNaN NaN -> NaN Invalid_operation -ddshi849 shift sNaN sNaN -> NaN Invalid_operation -ddshi850 shift NaN sNaN -> NaN Invalid_operation -ddshi851 shift -Inf sNaN -> NaN Invalid_operation -ddshi852 shift -1000 sNaN -> NaN Invalid_operation -ddshi853 shift -1 sNaN -> NaN Invalid_operation -ddshi854 shift -0 sNaN -> NaN Invalid_operation -ddshi855 shift 0 sNaN -> NaN Invalid_operation -ddshi856 shift 1 sNaN -> NaN Invalid_operation -ddshi857 shift 1000 sNaN -> NaN Invalid_operation -ddshi858 shift Inf sNaN -> NaN Invalid_operation -ddshi859 shift NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddshi861 shift NaN1 -Inf -> NaN1 -ddshi862 shift +NaN2 -1000 -> NaN2 -ddshi863 shift NaN3 1000 -> NaN3 -ddshi864 shift NaN4 Inf -> NaN4 -ddshi865 shift NaN5 +NaN6 -> NaN5 -ddshi866 shift -Inf NaN7 -> NaN7 -ddshi867 shift -1000 NaN8 -> NaN8 -ddshi868 shift 1000 NaN9 -> NaN9 -ddshi869 shift Inf +NaN10 -> NaN10 -ddshi871 shift sNaN11 -Inf -> NaN11 Invalid_operation -ddshi872 shift sNaN12 -1000 -> NaN12 Invalid_operation -ddshi873 shift sNaN13 1000 -> NaN13 Invalid_operation -ddshi874 shift sNaN14 NaN17 -> NaN14 Invalid_operation -ddshi875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation -ddshi876 shift NaN16 sNaN19 -> NaN19 Invalid_operation -ddshi877 shift -Inf +sNaN20 -> NaN20 Invalid_operation -ddshi878 shift -1000 sNaN21 -> NaN21 Invalid_operation -ddshi879 shift 1000 sNaN22 -> NaN22 Invalid_operation -ddshi880 shift Inf sNaN23 -> NaN23 Invalid_operation -ddshi881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation -ddshi882 shift -NaN26 NaN28 -> -NaN26 -ddshi883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation -ddshi884 shift 1000 -NaN30 -> -NaN30 -ddshi885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- ddShift.decTest -- shift decDouble coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check +ddshi001 shift 0 0 -> 0 +ddshi002 shift 0 2 -> 0 +ddshi003 shift 1 2 -> 100 +ddshi004 shift 1 15 -> 1000000000000000 +ddshi005 shift 1 16 -> 0 +ddshi006 shift 1 -1 -> 0 +ddshi007 shift 0 -2 -> 0 +ddshi008 shift 1234567890123456 -1 -> 123456789012345 +ddshi009 shift 1234567890123456 -15 -> 1 +ddshi010 shift 1234567890123456 -16 -> 0 +ddshi011 shift 9934567890123456 -15 -> 9 +ddshi012 shift 9934567890123456 -16 -> 0 + +-- rhs must be an integer +ddshi015 shift 1 1.5 -> NaN Invalid_operation +ddshi016 shift 1 1.0 -> NaN Invalid_operation +ddshi017 shift 1 0.1 -> NaN Invalid_operation +ddshi018 shift 1 0.0 -> NaN Invalid_operation +ddshi019 shift 1 1E+1 -> NaN Invalid_operation +ddshi020 shift 1 1E+99 -> NaN Invalid_operation +ddshi021 shift 1 Inf -> NaN Invalid_operation +ddshi022 shift 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +ddshi025 shift 1 -1000 -> NaN Invalid_operation +ddshi026 shift 1 -17 -> NaN Invalid_operation +ddshi027 shift 1 17 -> NaN Invalid_operation +ddshi028 shift 1 1000 -> NaN Invalid_operation + +-- full shifting pattern +ddshi030 shift 1234567890123456 -16 -> 0 +ddshi031 shift 1234567890123456 -15 -> 1 +ddshi032 shift 1234567890123456 -14 -> 12 +ddshi033 shift 1234567890123456 -13 -> 123 +ddshi034 shift 1234567890123456 -12 -> 1234 +ddshi035 shift 1234567890123456 -11 -> 12345 +ddshi036 shift 1234567890123456 -10 -> 123456 +ddshi037 shift 1234567890123456 -9 -> 1234567 +ddshi038 shift 1234567890123456 -8 -> 12345678 +ddshi039 shift 1234567890123456 -7 -> 123456789 +ddshi040 shift 1234567890123456 -6 -> 1234567890 +ddshi041 shift 1234567890123456 -5 -> 12345678901 +ddshi042 shift 1234567890123456 -4 -> 123456789012 +ddshi043 shift 1234567890123456 -3 -> 1234567890123 +ddshi044 shift 1234567890123456 -2 -> 12345678901234 +ddshi045 shift 1234567890123456 -1 -> 123456789012345 +ddshi046 shift 1234567890123456 -0 -> 1234567890123456 + +ddshi047 shift 1234567890123456 +0 -> 1234567890123456 +ddshi048 shift 1234567890123456 +1 -> 2345678901234560 +ddshi049 shift 1234567890123456 +2 -> 3456789012345600 +ddshi050 shift 1234567890123456 +3 -> 4567890123456000 +ddshi051 shift 1234567890123456 +4 -> 5678901234560000 +ddshi052 shift 1234567890123456 +5 -> 6789012345600000 +ddshi053 shift 1234567890123456 +6 -> 7890123456000000 +ddshi054 shift 1234567890123456 +7 -> 8901234560000000 +ddshi055 shift 1234567890123456 +8 -> 9012345600000000 +ddshi056 shift 1234567890123456 +9 -> 123456000000000 +ddshi057 shift 1234567890123456 +10 -> 1234560000000000 +ddshi058 shift 1234567890123456 +11 -> 2345600000000000 +ddshi059 shift 1234567890123456 +12 -> 3456000000000000 +ddshi060 shift 1234567890123456 +13 -> 4560000000000000 +ddshi061 shift 1234567890123456 +14 -> 5600000000000000 +ddshi062 shift 1234567890123456 +15 -> 6000000000000000 +ddshi063 shift 1234567890123456 +16 -> 0 + +-- zeros +ddshi070 shift 0E-10 +9 -> 0E-10 +ddshi071 shift 0E-10 -9 -> 0E-10 +ddshi072 shift 0.000 +9 -> 0.000 +ddshi073 shift 0.000 -9 -> 0.000 +ddshi074 shift 0E+10 +9 -> 0E+10 +ddshi075 shift 0E+10 -9 -> 0E+10 +ddshi076 shift -0E-10 +9 -> -0E-10 +ddshi077 shift -0E-10 -9 -> -0E-10 +ddshi078 shift -0.000 +9 -> -0.000 +ddshi079 shift -0.000 -9 -> -0.000 +ddshi080 shift -0E+10 +9 -> -0E+10 +ddshi081 shift -0E+10 -9 -> -0E+10 + +-- Nmax, Nmin, Ntiny +ddshi141 shift 9.999999999999999E+384 -1 -> 9.99999999999999E+383 +ddshi142 shift 9.999999999999999E+384 -15 -> 9E+369 +ddshi143 shift 9.999999999999999E+384 1 -> 9.999999999999990E+384 +ddshi144 shift 9.999999999999999E+384 15 -> 9.000000000000000E+384 +ddshi145 shift 1E-383 -1 -> 0E-383 +ddshi146 shift 1E-383 -15 -> 0E-383 +ddshi147 shift 1E-383 1 -> 1.0E-382 +ddshi148 shift 1E-383 15 -> 1.000000000000000E-368 +ddshi151 shift 1.000000000000000E-383 -1 -> 1.00000000000000E-384 +ddshi152 shift 1.000000000000000E-383 -15 -> 1E-398 +ddshi153 shift 1.000000000000000E-383 1 -> 0E-398 +ddshi154 shift 1.000000000000000E-383 15 -> 0E-398 +ddshi155 shift 9.000000000000000E-383 -1 -> 9.00000000000000E-384 +ddshi156 shift 9.000000000000000E-383 -15 -> 9E-398 +ddshi157 shift 9.000000000000000E-383 1 -> 0E-398 +ddshi158 shift 9.000000000000000E-383 15 -> 0E-398 +ddshi160 shift 1E-398 -1 -> 0E-398 +ddshi161 shift 1E-398 -15 -> 0E-398 +ddshi162 shift 1E-398 1 -> 1.0E-397 +ddshi163 shift 1E-398 15 -> 1.000000000000000E-383 +-- negatives +ddshi171 shift -9.999999999999999E+384 -1 -> -9.99999999999999E+383 +ddshi172 shift -9.999999999999999E+384 -15 -> -9E+369 +ddshi173 shift -9.999999999999999E+384 1 -> -9.999999999999990E+384 +ddshi174 shift -9.999999999999999E+384 15 -> -9.000000000000000E+384 +ddshi175 shift -1E-383 -1 -> -0E-383 +ddshi176 shift -1E-383 -15 -> -0E-383 +ddshi177 shift -1E-383 1 -> -1.0E-382 +ddshi178 shift -1E-383 15 -> -1.000000000000000E-368 +ddshi181 shift -1.000000000000000E-383 -1 -> -1.00000000000000E-384 +ddshi182 shift -1.000000000000000E-383 -15 -> -1E-398 +ddshi183 shift -1.000000000000000E-383 1 -> -0E-398 +ddshi184 shift -1.000000000000000E-383 15 -> -0E-398 +ddshi185 shift -9.000000000000000E-383 -1 -> -9.00000000000000E-384 +ddshi186 shift -9.000000000000000E-383 -15 -> -9E-398 +ddshi187 shift -9.000000000000000E-383 1 -> -0E-398 +ddshi188 shift -9.000000000000000E-383 15 -> -0E-398 +ddshi190 shift -1E-398 -1 -> -0E-398 +ddshi191 shift -1E-398 -15 -> -0E-398 +ddshi192 shift -1E-398 1 -> -1.0E-397 +ddshi193 shift -1E-398 15 -> -1.000000000000000E-383 + +-- more negatives (of sanities) +ddshi201 shift -0 0 -> -0 +ddshi202 shift -0 2 -> -0 +ddshi203 shift -1 2 -> -100 +ddshi204 shift -1 15 -> -1000000000000000 +ddshi205 shift -1 16 -> -0 +ddshi206 shift -1 -1 -> -0 +ddshi207 shift -0 -2 -> -0 +ddshi208 shift -1234567890123456 -1 -> -123456789012345 +ddshi209 shift -1234567890123456 -15 -> -1 +ddshi210 shift -1234567890123456 -16 -> -0 +ddshi211 shift -9934567890123456 -15 -> -9 +ddshi212 shift -9934567890123456 -16 -> -0 + + +-- Specials; NaNs are handled as usual +ddshi781 shift -Inf -8 -> -Infinity +ddshi782 shift -Inf -1 -> -Infinity +ddshi783 shift -Inf -0 -> -Infinity +ddshi784 shift -Inf 0 -> -Infinity +ddshi785 shift -Inf 1 -> -Infinity +ddshi786 shift -Inf 8 -> -Infinity +ddshi787 shift -1000 -Inf -> NaN Invalid_operation +ddshi788 shift -Inf -Inf -> NaN Invalid_operation +ddshi789 shift -1 -Inf -> NaN Invalid_operation +ddshi790 shift -0 -Inf -> NaN Invalid_operation +ddshi791 shift 0 -Inf -> NaN Invalid_operation +ddshi792 shift 1 -Inf -> NaN Invalid_operation +ddshi793 shift 1000 -Inf -> NaN Invalid_operation +ddshi794 shift Inf -Inf -> NaN Invalid_operation + +ddshi800 shift Inf -Inf -> NaN Invalid_operation +ddshi801 shift Inf -8 -> Infinity +ddshi802 shift Inf -1 -> Infinity +ddshi803 shift Inf -0 -> Infinity +ddshi804 shift Inf 0 -> Infinity +ddshi805 shift Inf 1 -> Infinity +ddshi806 shift Inf 8 -> Infinity +ddshi807 shift Inf Inf -> NaN Invalid_operation +ddshi808 shift -1000 Inf -> NaN Invalid_operation +ddshi809 shift -Inf Inf -> NaN Invalid_operation +ddshi810 shift -1 Inf -> NaN Invalid_operation +ddshi811 shift -0 Inf -> NaN Invalid_operation +ddshi812 shift 0 Inf -> NaN Invalid_operation +ddshi813 shift 1 Inf -> NaN Invalid_operation +ddshi814 shift 1000 Inf -> NaN Invalid_operation +ddshi815 shift Inf Inf -> NaN Invalid_operation + +ddshi821 shift NaN -Inf -> NaN +ddshi822 shift NaN -1000 -> NaN +ddshi823 shift NaN -1 -> NaN +ddshi824 shift NaN -0 -> NaN +ddshi825 shift NaN 0 -> NaN +ddshi826 shift NaN 1 -> NaN +ddshi827 shift NaN 1000 -> NaN +ddshi828 shift NaN Inf -> NaN +ddshi829 shift NaN NaN -> NaN +ddshi830 shift -Inf NaN -> NaN +ddshi831 shift -1000 NaN -> NaN +ddshi832 shift -1 NaN -> NaN +ddshi833 shift -0 NaN -> NaN +ddshi834 shift 0 NaN -> NaN +ddshi835 shift 1 NaN -> NaN +ddshi836 shift 1000 NaN -> NaN +ddshi837 shift Inf NaN -> NaN + +ddshi841 shift sNaN -Inf -> NaN Invalid_operation +ddshi842 shift sNaN -1000 -> NaN Invalid_operation +ddshi843 shift sNaN -1 -> NaN Invalid_operation +ddshi844 shift sNaN -0 -> NaN Invalid_operation +ddshi845 shift sNaN 0 -> NaN Invalid_operation +ddshi846 shift sNaN 1 -> NaN Invalid_operation +ddshi847 shift sNaN 1000 -> NaN Invalid_operation +ddshi848 shift sNaN NaN -> NaN Invalid_operation +ddshi849 shift sNaN sNaN -> NaN Invalid_operation +ddshi850 shift NaN sNaN -> NaN Invalid_operation +ddshi851 shift -Inf sNaN -> NaN Invalid_operation +ddshi852 shift -1000 sNaN -> NaN Invalid_operation +ddshi853 shift -1 sNaN -> NaN Invalid_operation +ddshi854 shift -0 sNaN -> NaN Invalid_operation +ddshi855 shift 0 sNaN -> NaN Invalid_operation +ddshi856 shift 1 sNaN -> NaN Invalid_operation +ddshi857 shift 1000 sNaN -> NaN Invalid_operation +ddshi858 shift Inf sNaN -> NaN Invalid_operation +ddshi859 shift NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddshi861 shift NaN1 -Inf -> NaN1 +ddshi862 shift +NaN2 -1000 -> NaN2 +ddshi863 shift NaN3 1000 -> NaN3 +ddshi864 shift NaN4 Inf -> NaN4 +ddshi865 shift NaN5 +NaN6 -> NaN5 +ddshi866 shift -Inf NaN7 -> NaN7 +ddshi867 shift -1000 NaN8 -> NaN8 +ddshi868 shift 1000 NaN9 -> NaN9 +ddshi869 shift Inf +NaN10 -> NaN10 +ddshi871 shift sNaN11 -Inf -> NaN11 Invalid_operation +ddshi872 shift sNaN12 -1000 -> NaN12 Invalid_operation +ddshi873 shift sNaN13 1000 -> NaN13 Invalid_operation +ddshi874 shift sNaN14 NaN17 -> NaN14 Invalid_operation +ddshi875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation +ddshi876 shift NaN16 sNaN19 -> NaN19 Invalid_operation +ddshi877 shift -Inf +sNaN20 -> NaN20 Invalid_operation +ddshi878 shift -1000 sNaN21 -> NaN21 Invalid_operation +ddshi879 shift 1000 sNaN22 -> NaN22 Invalid_operation +ddshi880 shift Inf sNaN23 -> NaN23 Invalid_operation +ddshi881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation +ddshi882 shift -NaN26 NaN28 -> -NaN26 +ddshi883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation +ddshi884 shift 1000 -NaN30 -> -NaN30 +ddshi885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/ddSubtract.decTest b/Lib/test/decimaltestdata/ddSubtract.decTest index 5ebc4878f01..15d47779eb6 100644 --- a/Lib/test/decimaltestdata/ddSubtract.decTest +++ b/Lib/test/decimaltestdata/ddSubtract.decTest @@ -1,629 +1,629 @@ ------------------------------------------------------------------------- --- ddSubtract.decTest -- decDouble subtraction -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decDoubles only; all arguments are --- representable in a decDouble -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- [first group are 'quick confidence check'] -ddsub001 subtract 0 0 -> '0' -ddsub002 subtract 1 1 -> '0' -ddsub003 subtract 1 2 -> '-1' -ddsub004 subtract 2 1 -> '1' -ddsub005 subtract 2 2 -> '0' -ddsub006 subtract 3 2 -> '1' -ddsub007 subtract 2 3 -> '-1' - -ddsub011 subtract -0 0 -> '-0' -ddsub012 subtract -1 1 -> '-2' -ddsub013 subtract -1 2 -> '-3' -ddsub014 subtract -2 1 -> '-3' -ddsub015 subtract -2 2 -> '-4' -ddsub016 subtract -3 2 -> '-5' -ddsub017 subtract -2 3 -> '-5' - -ddsub021 subtract 0 -0 -> '0' -ddsub022 subtract 1 -1 -> '2' -ddsub023 subtract 1 -2 -> '3' -ddsub024 subtract 2 -1 -> '3' -ddsub025 subtract 2 -2 -> '4' -ddsub026 subtract 3 -2 -> '5' -ddsub027 subtract 2 -3 -> '5' - -ddsub030 subtract 11 1 -> 10 -ddsub031 subtract 10 1 -> 9 -ddsub032 subtract 9 1 -> 8 -ddsub033 subtract 1 1 -> 0 -ddsub034 subtract 0 1 -> -1 -ddsub035 subtract -1 1 -> -2 -ddsub036 subtract -9 1 -> -10 -ddsub037 subtract -10 1 -> -11 -ddsub038 subtract -11 1 -> -12 - -ddsub040 subtract '5.75' '3.3' -> '2.45' -ddsub041 subtract '5' '-3' -> '8' -ddsub042 subtract '-5' '-3' -> '-2' -ddsub043 subtract '-7' '2.5' -> '-9.5' -ddsub044 subtract '0.7' '0.3' -> '0.4' -ddsub045 subtract '1.3' '0.3' -> '1.0' -ddsub046 subtract '1.25' '1.25' -> '0.00' - -ddsub050 subtract '1.23456789' '1.00000000' -> '0.23456789' -ddsub051 subtract '1.23456789' '1.00000089' -> '0.23456700' - -ddsub060 subtract '70' '10000e+16' -> '-1.000000000000000E+20' Inexact Rounded -ddsub061 subtract '700' '10000e+16' -> '-1.000000000000000E+20' Inexact Rounded -ddsub062 subtract '7000' '10000e+16' -> '-9.999999999999999E+19' Inexact Rounded -ddsub063 subtract '70000' '10000e+16' -> '-9.999999999999993E+19' Rounded -ddsub064 subtract '700000' '10000e+16' -> '-9.999999999999930E+19' Rounded - -- symmetry: -ddsub065 subtract '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded -ddsub066 subtract '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded -ddsub067 subtract '10000e+16' '7000' -> '9.999999999999999E+19' Inexact Rounded -ddsub068 subtract '10000e+16' '70000' -> '9.999999999999993E+19' Rounded -ddsub069 subtract '10000e+16' '700000' -> '9.999999999999930E+19' Rounded - - -- some of the next group are really constructor tests -ddsub090 subtract '00.0' '0.0' -> '0.0' -ddsub091 subtract '00.0' '0.00' -> '0.00' -ddsub092 subtract '0.00' '00.0' -> '0.00' -ddsub093 subtract '00.0' '0.00' -> '0.00' -ddsub094 subtract '0.00' '00.0' -> '0.00' -ddsub095 subtract '3' '.3' -> '2.7' -ddsub096 subtract '3.' '.3' -> '2.7' -ddsub097 subtract '3.0' '.3' -> '2.7' -ddsub098 subtract '3.00' '.3' -> '2.70' -ddsub099 subtract '3' '3' -> '0' -ddsub100 subtract '3' '+3' -> '0' -ddsub101 subtract '3' '-3' -> '6' -ddsub102 subtract '3' '0.3' -> '2.7' -ddsub103 subtract '3.' '0.3' -> '2.7' -ddsub104 subtract '3.0' '0.3' -> '2.7' -ddsub105 subtract '3.00' '0.3' -> '2.70' -ddsub106 subtract '3' '3.0' -> '0.0' -ddsub107 subtract '3' '+3.0' -> '0.0' -ddsub108 subtract '3' '-3.0' -> '6.0' - --- the above all from add; massaged and extended. Now some new ones... --- [particularly important for comparisons] --- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7 --- with input rounding. -ddsub120 subtract '10.23456784' '10.23456789' -> '-5E-8' -ddsub121 subtract '10.23456785' '10.23456789' -> '-4E-8' -ddsub122 subtract '10.23456786' '10.23456789' -> '-3E-8' -ddsub123 subtract '10.23456787' '10.23456789' -> '-2E-8' -ddsub124 subtract '10.23456788' '10.23456789' -> '-1E-8' -ddsub125 subtract '10.23456789' '10.23456789' -> '0E-8' -ddsub126 subtract '10.23456790' '10.23456789' -> '1E-8' -ddsub127 subtract '10.23456791' '10.23456789' -> '2E-8' -ddsub128 subtract '10.23456792' '10.23456789' -> '3E-8' -ddsub129 subtract '10.23456793' '10.23456789' -> '4E-8' -ddsub130 subtract '10.23456794' '10.23456789' -> '5E-8' -ddsub131 subtract '10.23456781' '10.23456786' -> '-5E-8' -ddsub132 subtract '10.23456782' '10.23456786' -> '-4E-8' -ddsub133 subtract '10.23456783' '10.23456786' -> '-3E-8' -ddsub134 subtract '10.23456784' '10.23456786' -> '-2E-8' -ddsub135 subtract '10.23456785' '10.23456786' -> '-1E-8' -ddsub136 subtract '10.23456786' '10.23456786' -> '0E-8' -ddsub137 subtract '10.23456787' '10.23456786' -> '1E-8' -ddsub138 subtract '10.23456788' '10.23456786' -> '2E-8' -ddsub139 subtract '10.23456789' '10.23456786' -> '3E-8' -ddsub140 subtract '10.23456790' '10.23456786' -> '4E-8' -ddsub141 subtract '10.23456791' '10.23456786' -> '5E-8' -ddsub142 subtract '1' '0.999999999' -> '1E-9' -ddsub143 subtract '0.999999999' '1' -> '-1E-9' -ddsub144 subtract '-10.23456780' '-10.23456786' -> '6E-8' -ddsub145 subtract '-10.23456790' '-10.23456786' -> '-4E-8' -ddsub146 subtract '-10.23456791' '-10.23456786' -> '-5E-8' - --- additional scaled arithmetic tests [0.97 problem] -ddsub160 subtract '0' '.1' -> '-0.1' -ddsub161 subtract '00' '.97983' -> '-0.97983' -ddsub162 subtract '0' '.9' -> '-0.9' -ddsub163 subtract '0' '0.102' -> '-0.102' -ddsub164 subtract '0' '.4' -> '-0.4' -ddsub165 subtract '0' '.307' -> '-0.307' -ddsub166 subtract '0' '.43822' -> '-0.43822' -ddsub167 subtract '0' '.911' -> '-0.911' -ddsub168 subtract '.0' '.02' -> '-0.02' -ddsub169 subtract '00' '.392' -> '-0.392' -ddsub170 subtract '0' '.26' -> '-0.26' -ddsub171 subtract '0' '0.51' -> '-0.51' -ddsub172 subtract '0' '.2234' -> '-0.2234' -ddsub173 subtract '0' '.2' -> '-0.2' -ddsub174 subtract '.0' '.0008' -> '-0.0008' --- 0. on left -ddsub180 subtract '0.0' '-.1' -> '0.1' -ddsub181 subtract '0.00' '-.97983' -> '0.97983' -ddsub182 subtract '0.0' '-.9' -> '0.9' -ddsub183 subtract '0.0' '-0.102' -> '0.102' -ddsub184 subtract '0.0' '-.4' -> '0.4' -ddsub185 subtract '0.0' '-.307' -> '0.307' -ddsub186 subtract '0.0' '-.43822' -> '0.43822' -ddsub187 subtract '0.0' '-.911' -> '0.911' -ddsub188 subtract '0.0' '-.02' -> '0.02' -ddsub189 subtract '0.00' '-.392' -> '0.392' -ddsub190 subtract '0.0' '-.26' -> '0.26' -ddsub191 subtract '0.0' '-0.51' -> '0.51' -ddsub192 subtract '0.0' '-.2234' -> '0.2234' -ddsub193 subtract '0.0' '-.2' -> '0.2' -ddsub194 subtract '0.0' '-.0008' -> '0.0008' --- negatives of same -ddsub200 subtract '0' '-.1' -> '0.1' -ddsub201 subtract '00' '-.97983' -> '0.97983' -ddsub202 subtract '0' '-.9' -> '0.9' -ddsub203 subtract '0' '-0.102' -> '0.102' -ddsub204 subtract '0' '-.4' -> '0.4' -ddsub205 subtract '0' '-.307' -> '0.307' -ddsub206 subtract '0' '-.43822' -> '0.43822' -ddsub207 subtract '0' '-.911' -> '0.911' -ddsub208 subtract '.0' '-.02' -> '0.02' -ddsub209 subtract '00' '-.392' -> '0.392' -ddsub210 subtract '0' '-.26' -> '0.26' -ddsub211 subtract '0' '-0.51' -> '0.51' -ddsub212 subtract '0' '-.2234' -> '0.2234' -ddsub213 subtract '0' '-.2' -> '0.2' -ddsub214 subtract '.0' '-.0008' -> '0.0008' - --- more fixed, LHS swaps [really the same as testcases under add] -ddsub220 subtract '-56267E-12' 0 -> '-5.6267E-8' -ddsub221 subtract '-56267E-11' 0 -> '-5.6267E-7' -ddsub222 subtract '-56267E-10' 0 -> '-0.0000056267' -ddsub223 subtract '-56267E-9' 0 -> '-0.000056267' -ddsub224 subtract '-56267E-8' 0 -> '-0.00056267' -ddsub225 subtract '-56267E-7' 0 -> '-0.0056267' -ddsub226 subtract '-56267E-6' 0 -> '-0.056267' -ddsub227 subtract '-56267E-5' 0 -> '-0.56267' -ddsub228 subtract '-56267E-2' 0 -> '-562.67' -ddsub229 subtract '-56267E-1' 0 -> '-5626.7' -ddsub230 subtract '-56267E-0' 0 -> '-56267' --- symmetry ... -ddsub240 subtract 0 '-56267E-12' -> '5.6267E-8' -ddsub241 subtract 0 '-56267E-11' -> '5.6267E-7' -ddsub242 subtract 0 '-56267E-10' -> '0.0000056267' -ddsub243 subtract 0 '-56267E-9' -> '0.000056267' -ddsub244 subtract 0 '-56267E-8' -> '0.00056267' -ddsub245 subtract 0 '-56267E-7' -> '0.0056267' -ddsub246 subtract 0 '-56267E-6' -> '0.056267' -ddsub247 subtract 0 '-56267E-5' -> '0.56267' -ddsub248 subtract 0 '-56267E-2' -> '562.67' -ddsub249 subtract 0 '-56267E-1' -> '5626.7' -ddsub250 subtract 0 '-56267E-0' -> '56267' - --- now some more from the 'new' add -ddsub301 subtract '1.23456789' '1.00000000' -> '0.23456789' -ddsub302 subtract '1.23456789' '1.00000011' -> '0.23456778' - --- some carrying effects -ddsub321 subtract '0.9998' '0.0000' -> '0.9998' -ddsub322 subtract '0.9998' '0.0001' -> '0.9997' -ddsub323 subtract '0.9998' '0.0002' -> '0.9996' -ddsub324 subtract '0.9998' '0.0003' -> '0.9995' -ddsub325 subtract '0.9998' '-0.0000' -> '0.9998' -ddsub326 subtract '0.9998' '-0.0001' -> '0.9999' -ddsub327 subtract '0.9998' '-0.0002' -> '1.0000' -ddsub328 subtract '0.9998' '-0.0003' -> '1.0001' - --- internal boundaries -ddsub346 subtract '10000e+9' '7' -> '9999999999993' -ddsub347 subtract '10000e+9' '70' -> '9999999999930' -ddsub348 subtract '10000e+9' '700' -> '9999999999300' -ddsub349 subtract '10000e+9' '7000' -> '9999999993000' -ddsub350 subtract '10000e+9' '70000' -> '9999999930000' -ddsub351 subtract '10000e+9' '700000' -> '9999999300000' -ddsub352 subtract '7' '10000e+9' -> '-9999999999993' -ddsub353 subtract '70' '10000e+9' -> '-9999999999930' -ddsub354 subtract '700' '10000e+9' -> '-9999999999300' -ddsub355 subtract '7000' '10000e+9' -> '-9999999993000' -ddsub356 subtract '70000' '10000e+9' -> '-9999999930000' -ddsub357 subtract '700000' '10000e+9' -> '-9999999300000' - --- zero preservation -ddsub361 subtract 1 '0.0001' -> '0.9999' -ddsub362 subtract 1 '0.00001' -> '0.99999' -ddsub363 subtract 1 '0.000001' -> '0.999999' -ddsub364 subtract 1 '0.0000000000000001' -> '0.9999999999999999' -ddsub365 subtract 1 '0.00000000000000001' -> '1.000000000000000' Inexact Rounded -ddsub366 subtract 1 '0.000000000000000001' -> '1.000000000000000' Inexact Rounded - --- some funny zeros [in case of bad signum] -ddsub370 subtract 1 0 -> 1 -ddsub371 subtract 1 0. -> 1 -ddsub372 subtract 1 .0 -> 1.0 -ddsub373 subtract 1 0.0 -> 1.0 -ddsub374 subtract 0 1 -> -1 -ddsub375 subtract 0. 1 -> -1 -ddsub376 subtract .0 1 -> -1.0 -ddsub377 subtract 0.0 1 -> -1.0 - --- leading 0 digit before round -ddsub910 subtract -103519362 -51897955.3 -> -51621406.7 -ddsub911 subtract 159579.444 89827.5229 -> 69751.9211 - -ddsub920 subtract 333.0000000123456 33.00000001234566 -> 299.9999999999999 Inexact Rounded -ddsub921 subtract 333.0000000123456 33.00000001234565 -> 300.0000000000000 Inexact Rounded -ddsub922 subtract 133.0000000123456 33.00000001234565 -> 99.99999999999995 -ddsub923 subtract 133.0000000123456 33.00000001234564 -> 99.99999999999996 -ddsub924 subtract 133.0000000123456 33.00000001234540 -> 100.0000000000002 Rounded -ddsub925 subtract 133.0000000123456 43.00000001234560 -> 90.00000000000000 -ddsub926 subtract 133.0000000123456 43.00000001234561 -> 89.99999999999999 -ddsub927 subtract 133.0000000123456 43.00000001234566 -> 89.99999999999994 -ddsub928 subtract 101.0000000123456 91.00000001234566 -> 9.99999999999994 -ddsub929 subtract 101.0000000123456 99.00000001234566 -> 1.99999999999994 - --- more LHS swaps [were fixed] -ddsub390 subtract '-56267E-10' 0 -> '-0.0000056267' -ddsub391 subtract '-56267E-6' 0 -> '-0.056267' -ddsub392 subtract '-56267E-5' 0 -> '-0.56267' -ddsub393 subtract '-56267E-4' 0 -> '-5.6267' -ddsub394 subtract '-56267E-3' 0 -> '-56.267' -ddsub395 subtract '-56267E-2' 0 -> '-562.67' -ddsub396 subtract '-56267E-1' 0 -> '-5626.7' -ddsub397 subtract '-56267E-0' 0 -> '-56267' -ddsub398 subtract '-5E-10' 0 -> '-5E-10' -ddsub399 subtract '-5E-7' 0 -> '-5E-7' -ddsub400 subtract '-5E-6' 0 -> '-0.000005' -ddsub401 subtract '-5E-5' 0 -> '-0.00005' -ddsub402 subtract '-5E-4' 0 -> '-0.0005' -ddsub403 subtract '-5E-1' 0 -> '-0.5' -ddsub404 subtract '-5E0' 0 -> '-5' -ddsub405 subtract '-5E1' 0 -> '-50' -ddsub406 subtract '-5E5' 0 -> '-500000' -ddsub407 subtract '-5E15' 0 -> '-5000000000000000' -ddsub408 subtract '-5E16' 0 -> '-5.000000000000000E+16' Rounded -ddsub409 subtract '-5E17' 0 -> '-5.000000000000000E+17' Rounded -ddsub410 subtract '-5E18' 0 -> '-5.000000000000000E+18' Rounded -ddsub411 subtract '-5E100' 0 -> '-5.000000000000000E+100' Rounded - --- more RHS swaps [were fixed] -ddsub420 subtract 0 '-56267E-10' -> '0.0000056267' -ddsub421 subtract 0 '-56267E-6' -> '0.056267' -ddsub422 subtract 0 '-56267E-5' -> '0.56267' -ddsub423 subtract 0 '-56267E-4' -> '5.6267' -ddsub424 subtract 0 '-56267E-3' -> '56.267' -ddsub425 subtract 0 '-56267E-2' -> '562.67' -ddsub426 subtract 0 '-56267E-1' -> '5626.7' -ddsub427 subtract 0 '-56267E-0' -> '56267' -ddsub428 subtract 0 '-5E-10' -> '5E-10' -ddsub429 subtract 0 '-5E-7' -> '5E-7' -ddsub430 subtract 0 '-5E-6' -> '0.000005' -ddsub431 subtract 0 '-5E-5' -> '0.00005' -ddsub432 subtract 0 '-5E-4' -> '0.0005' -ddsub433 subtract 0 '-5E-1' -> '0.5' -ddsub434 subtract 0 '-5E0' -> '5' -ddsub435 subtract 0 '-5E1' -> '50' -ddsub436 subtract 0 '-5E5' -> '500000' -ddsub437 subtract 0 '-5E15' -> '5000000000000000' -ddsub438 subtract 0 '-5E16' -> '5.000000000000000E+16' Rounded -ddsub439 subtract 0 '-5E17' -> '5.000000000000000E+17' Rounded -ddsub440 subtract 0 '-5E18' -> '5.000000000000000E+18' Rounded -ddsub441 subtract 0 '-5E100' -> '5.000000000000000E+100' Rounded - - --- try borderline precision, with carries, etc. -ddsub461 subtract '1E+16' '1' -> '9999999999999999' -ddsub462 subtract '1E+12' '-1.111' -> '1000000000001.111' -ddsub463 subtract '1.111' '-1E+12' -> '1000000000001.111' -ddsub464 subtract '-1' '-1E+16' -> '9999999999999999' -ddsub465 subtract '7E+15' '1' -> '6999999999999999' -ddsub466 subtract '7E+12' '-1.111' -> '7000000000001.111' -ddsub467 subtract '1.111' '-7E+12' -> '7000000000001.111' -ddsub468 subtract '-1' '-7E+15' -> '6999999999999999' - --- 1234567890123456 1234567890123456 1 23456789012345 -ddsub470 subtract '0.4444444444444444' '-0.5555555555555563' -> '1.000000000000001' Inexact Rounded -ddsub471 subtract '0.4444444444444444' '-0.5555555555555562' -> '1.000000000000001' Inexact Rounded -ddsub472 subtract '0.4444444444444444' '-0.5555555555555561' -> '1.000000000000000' Inexact Rounded -ddsub473 subtract '0.4444444444444444' '-0.5555555555555560' -> '1.000000000000000' Inexact Rounded -ddsub474 subtract '0.4444444444444444' '-0.5555555555555559' -> '1.000000000000000' Inexact Rounded -ddsub475 subtract '0.4444444444444444' '-0.5555555555555558' -> '1.000000000000000' Inexact Rounded -ddsub476 subtract '0.4444444444444444' '-0.5555555555555557' -> '1.000000000000000' Inexact Rounded -ddsub477 subtract '0.4444444444444444' '-0.5555555555555556' -> '1.000000000000000' Rounded -ddsub478 subtract '0.4444444444444444' '-0.5555555555555555' -> '0.9999999999999999' -ddsub479 subtract '0.4444444444444444' '-0.5555555555555554' -> '0.9999999999999998' -ddsub480 subtract '0.4444444444444444' '-0.5555555555555553' -> '0.9999999999999997' -ddsub481 subtract '0.4444444444444444' '-0.5555555555555552' -> '0.9999999999999996' -ddsub482 subtract '0.4444444444444444' '-0.5555555555555551' -> '0.9999999999999995' -ddsub483 subtract '0.4444444444444444' '-0.5555555555555550' -> '0.9999999999999994' - --- and some more, including residue effects and different roundings -rounding: half_up -ddsub500 subtract '1231234567456789' 0 -> '1231234567456789' -ddsub501 subtract '1231234567456789' 0.000000001 -> '1231234567456789' Inexact Rounded -ddsub502 subtract '1231234567456789' 0.000001 -> '1231234567456789' Inexact Rounded -ddsub503 subtract '1231234567456789' 0.1 -> '1231234567456789' Inexact Rounded -ddsub504 subtract '1231234567456789' 0.4 -> '1231234567456789' Inexact Rounded -ddsub505 subtract '1231234567456789' 0.49 -> '1231234567456789' Inexact Rounded -ddsub506 subtract '1231234567456789' 0.499999 -> '1231234567456789' Inexact Rounded -ddsub507 subtract '1231234567456789' 0.499999999 -> '1231234567456789' Inexact Rounded -ddsub508 subtract '1231234567456789' 0.5 -> '1231234567456789' Inexact Rounded -ddsub509 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded -ddsub510 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded -ddsub511 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded -ddsub512 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded -ddsub513 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded -ddsub514 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded -ddsub515 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded -ddsub516 subtract '1231234567456789' 1 -> '1231234567456788' -ddsub517 subtract '1231234567456789' 1.000000001 -> '1231234567456788' Inexact Rounded -ddsub518 subtract '1231234567456789' 1.00001 -> '1231234567456788' Inexact Rounded -ddsub519 subtract '1231234567456789' 1.1 -> '1231234567456788' Inexact Rounded - -rounding: half_even -ddsub520 subtract '1231234567456789' 0 -> '1231234567456789' -ddsub521 subtract '1231234567456789' 0.000000001 -> '1231234567456789' Inexact Rounded -ddsub522 subtract '1231234567456789' 0.000001 -> '1231234567456789' Inexact Rounded -ddsub523 subtract '1231234567456789' 0.1 -> '1231234567456789' Inexact Rounded -ddsub524 subtract '1231234567456789' 0.4 -> '1231234567456789' Inexact Rounded -ddsub525 subtract '1231234567456789' 0.49 -> '1231234567456789' Inexact Rounded -ddsub526 subtract '1231234567456789' 0.499999 -> '1231234567456789' Inexact Rounded -ddsub527 subtract '1231234567456789' 0.499999999 -> '1231234567456789' Inexact Rounded -ddsub528 subtract '1231234567456789' 0.5 -> '1231234567456788' Inexact Rounded -ddsub529 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded -ddsub530 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded -ddsub531 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded -ddsub532 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded -ddsub533 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded -ddsub534 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded -ddsub535 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded -ddsub536 subtract '1231234567456789' 1 -> '1231234567456788' -ddsub537 subtract '1231234567456789' 1.00000001 -> '1231234567456788' Inexact Rounded -ddsub538 subtract '1231234567456789' 1.00001 -> '1231234567456788' Inexact Rounded -ddsub539 subtract '1231234567456789' 1.1 -> '1231234567456788' Inexact Rounded --- critical few with even bottom digit... -ddsub540 subtract '1231234567456788' 0.499999999 -> '1231234567456788' Inexact Rounded -ddsub541 subtract '1231234567456788' 0.5 -> '1231234567456788' Inexact Rounded -ddsub542 subtract '1231234567456788' 0.500000001 -> '1231234567456787' Inexact Rounded - -rounding: down -ddsub550 subtract '1231234567456789' 0 -> '1231234567456789' -ddsub551 subtract '1231234567456789' 0.000000001 -> '1231234567456788' Inexact Rounded -ddsub552 subtract '1231234567456789' 0.000001 -> '1231234567456788' Inexact Rounded -ddsub553 subtract '1231234567456789' 0.1 -> '1231234567456788' Inexact Rounded -ddsub554 subtract '1231234567456789' 0.4 -> '1231234567456788' Inexact Rounded -ddsub555 subtract '1231234567456789' 0.49 -> '1231234567456788' Inexact Rounded -ddsub556 subtract '1231234567456789' 0.499999 -> '1231234567456788' Inexact Rounded -ddsub557 subtract '1231234567456789' 0.499999999 -> '1231234567456788' Inexact Rounded -ddsub558 subtract '1231234567456789' 0.5 -> '1231234567456788' Inexact Rounded -ddsub559 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded -ddsub560 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded -ddsub561 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded -ddsub562 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded -ddsub563 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded -ddsub564 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded -ddsub565 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded -ddsub566 subtract '1231234567456789' 1 -> '1231234567456788' -ddsub567 subtract '1231234567456789' 1.00000001 -> '1231234567456787' Inexact Rounded -ddsub568 subtract '1231234567456789' 1.00001 -> '1231234567456787' Inexact Rounded -ddsub569 subtract '1231234567456789' 1.1 -> '1231234567456787' Inexact Rounded - --- symmetry... -rounding: half_up -ddsub600 subtract 0 '1231234567456789' -> '-1231234567456789' -ddsub601 subtract 0.000000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub602 subtract 0.000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub603 subtract 0.1 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub604 subtract 0.4 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub605 subtract 0.49 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub606 subtract 0.499999 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub607 subtract 0.499999999 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub608 subtract 0.5 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub609 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub610 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub611 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub612 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub613 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub614 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub615 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub616 subtract 1 '1231234567456789' -> '-1231234567456788' -ddsub617 subtract 1.000000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub618 subtract 1.00001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub619 subtract 1.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded - -rounding: half_even -ddsub620 subtract 0 '1231234567456789' -> '-1231234567456789' -ddsub621 subtract 0.000000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub622 subtract 0.000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub623 subtract 0.1 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub624 subtract 0.4 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub625 subtract 0.49 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub626 subtract 0.499999 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub627 subtract 0.499999999 '1231234567456789' -> '-1231234567456789' Inexact Rounded -ddsub628 subtract 0.5 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub629 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub630 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub631 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub632 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub633 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub634 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub635 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub636 subtract 1 '1231234567456789' -> '-1231234567456788' -ddsub637 subtract 1.00000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub638 subtract 1.00001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub639 subtract 1.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded --- critical few with even bottom digit... -ddsub640 subtract 0.499999999 '1231234567456788' -> '-1231234567456788' Inexact Rounded -ddsub641 subtract 0.5 '1231234567456788' -> '-1231234567456788' Inexact Rounded -ddsub642 subtract 0.500000001 '1231234567456788' -> '-1231234567456787' Inexact Rounded - -rounding: down -ddsub650 subtract 0 '1231234567456789' -> '-1231234567456789' -ddsub651 subtract 0.000000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub652 subtract 0.000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub653 subtract 0.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub654 subtract 0.4 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub655 subtract 0.49 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub656 subtract 0.499999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub657 subtract 0.499999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub658 subtract 0.5 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub659 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub660 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub661 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub662 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub663 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub664 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub665 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded -ddsub666 subtract 1 '1231234567456789' -> '-1231234567456788' -ddsub667 subtract 1.00000001 '1231234567456789' -> '-1231234567456787' Inexact Rounded -ddsub668 subtract 1.00001 '1231234567456789' -> '-1231234567456787' Inexact Rounded -ddsub669 subtract 1.1 '1231234567456789' -> '-1231234567456787' Inexact Rounded - - --- lots of leading zeros in intermediate result, and showing effects of --- input rounding would have affected the following -rounding: half_up -ddsub670 subtract '1234567456789' '1234567456788.1' -> 0.9 -ddsub671 subtract '1234567456789' '1234567456788.9' -> 0.1 -ddsub672 subtract '1234567456789' '1234567456789.1' -> -0.1 -ddsub673 subtract '1234567456789' '1234567456789.5' -> -0.5 -ddsub674 subtract '1234567456789' '1234567456789.9' -> -0.9 - -rounding: half_even -ddsub680 subtract '1234567456789' '1234567456788.1' -> 0.9 -ddsub681 subtract '1234567456789' '1234567456788.9' -> 0.1 -ddsub682 subtract '1234567456789' '1234567456789.1' -> -0.1 -ddsub683 subtract '1234567456789' '1234567456789.5' -> -0.5 -ddsub684 subtract '1234567456789' '1234567456789.9' -> -0.9 - -ddsub685 subtract '1234567456788' '1234567456787.1' -> 0.9 -ddsub686 subtract '1234567456788' '1234567456787.9' -> 0.1 -ddsub687 subtract '1234567456788' '1234567456788.1' -> -0.1 -ddsub688 subtract '1234567456788' '1234567456788.5' -> -0.5 -ddsub689 subtract '1234567456788' '1234567456788.9' -> -0.9 - -rounding: down -ddsub690 subtract '1234567456789' '1234567456788.1' -> 0.9 -ddsub691 subtract '1234567456789' '1234567456788.9' -> 0.1 -ddsub692 subtract '1234567456789' '1234567456789.1' -> -0.1 -ddsub693 subtract '1234567456789' '1234567456789.5' -> -0.5 -ddsub694 subtract '1234567456789' '1234567456789.9' -> -0.9 - --- Specials -ddsub780 subtract -Inf Inf -> -Infinity -ddsub781 subtract -Inf 1000 -> -Infinity -ddsub782 subtract -Inf 1 -> -Infinity -ddsub783 subtract -Inf -0 -> -Infinity -ddsub784 subtract -Inf -1 -> -Infinity -ddsub785 subtract -Inf -1000 -> -Infinity -ddsub787 subtract -1000 Inf -> -Infinity -ddsub788 subtract -Inf Inf -> -Infinity -ddsub789 subtract -1 Inf -> -Infinity -ddsub790 subtract 0 Inf -> -Infinity -ddsub791 subtract 1 Inf -> -Infinity -ddsub792 subtract 1000 Inf -> -Infinity - -ddsub800 subtract Inf Inf -> NaN Invalid_operation -ddsub801 subtract Inf 1000 -> Infinity -ddsub802 subtract Inf 1 -> Infinity -ddsub803 subtract Inf 0 -> Infinity -ddsub804 subtract Inf -0 -> Infinity -ddsub805 subtract Inf -1 -> Infinity -ddsub806 subtract Inf -1000 -> Infinity -ddsub807 subtract Inf -Inf -> Infinity -ddsub808 subtract -1000 -Inf -> Infinity -ddsub809 subtract -Inf -Inf -> NaN Invalid_operation -ddsub810 subtract -1 -Inf -> Infinity -ddsub811 subtract -0 -Inf -> Infinity -ddsub812 subtract 0 -Inf -> Infinity -ddsub813 subtract 1 -Inf -> Infinity -ddsub814 subtract 1000 -Inf -> Infinity -ddsub815 subtract Inf -Inf -> Infinity - -ddsub821 subtract NaN Inf -> NaN -ddsub822 subtract -NaN 1000 -> -NaN -ddsub823 subtract NaN 1 -> NaN -ddsub824 subtract NaN 0 -> NaN -ddsub825 subtract NaN -0 -> NaN -ddsub826 subtract NaN -1 -> NaN -ddsub827 subtract NaN -1000 -> NaN -ddsub828 subtract NaN -Inf -> NaN -ddsub829 subtract -NaN NaN -> -NaN -ddsub830 subtract -Inf NaN -> NaN -ddsub831 subtract -1000 NaN -> NaN -ddsub832 subtract -1 NaN -> NaN -ddsub833 subtract -0 NaN -> NaN -ddsub834 subtract 0 NaN -> NaN -ddsub835 subtract 1 NaN -> NaN -ddsub836 subtract 1000 -NaN -> -NaN -ddsub837 subtract Inf NaN -> NaN - -ddsub841 subtract sNaN Inf -> NaN Invalid_operation -ddsub842 subtract -sNaN 1000 -> -NaN Invalid_operation -ddsub843 subtract sNaN 1 -> NaN Invalid_operation -ddsub844 subtract sNaN 0 -> NaN Invalid_operation -ddsub845 subtract sNaN -0 -> NaN Invalid_operation -ddsub846 subtract sNaN -1 -> NaN Invalid_operation -ddsub847 subtract sNaN -1000 -> NaN Invalid_operation -ddsub848 subtract sNaN NaN -> NaN Invalid_operation -ddsub849 subtract sNaN sNaN -> NaN Invalid_operation -ddsub850 subtract NaN sNaN -> NaN Invalid_operation -ddsub851 subtract -Inf -sNaN -> -NaN Invalid_operation -ddsub852 subtract -1000 sNaN -> NaN Invalid_operation -ddsub853 subtract -1 sNaN -> NaN Invalid_operation -ddsub854 subtract -0 sNaN -> NaN Invalid_operation -ddsub855 subtract 0 sNaN -> NaN Invalid_operation -ddsub856 subtract 1 sNaN -> NaN Invalid_operation -ddsub857 subtract 1000 sNaN -> NaN Invalid_operation -ddsub858 subtract Inf sNaN -> NaN Invalid_operation -ddsub859 subtract NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddsub861 subtract NaN01 -Inf -> NaN1 -ddsub862 subtract -NaN02 -1000 -> -NaN2 -ddsub863 subtract NaN03 1000 -> NaN3 -ddsub864 subtract NaN04 Inf -> NaN4 -ddsub865 subtract NaN05 NaN61 -> NaN5 -ddsub866 subtract -Inf -NaN71 -> -NaN71 -ddsub867 subtract -1000 NaN81 -> NaN81 -ddsub868 subtract 1000 NaN91 -> NaN91 -ddsub869 subtract Inf NaN101 -> NaN101 -ddsub871 subtract sNaN011 -Inf -> NaN11 Invalid_operation -ddsub872 subtract sNaN012 -1000 -> NaN12 Invalid_operation -ddsub873 subtract -sNaN013 1000 -> -NaN13 Invalid_operation -ddsub874 subtract sNaN014 NaN171 -> NaN14 Invalid_operation -ddsub875 subtract sNaN015 sNaN181 -> NaN15 Invalid_operation -ddsub876 subtract NaN016 sNaN191 -> NaN191 Invalid_operation -ddsub877 subtract -Inf sNaN201 -> NaN201 Invalid_operation -ddsub878 subtract -1000 sNaN211 -> NaN211 Invalid_operation -ddsub879 subtract 1000 -sNaN221 -> -NaN221 Invalid_operation -ddsub880 subtract Inf sNaN231 -> NaN231 Invalid_operation -ddsub881 subtract NaN025 sNaN241 -> NaN241 Invalid_operation - --- edge case spills -ddsub901 subtract 2.E-3 1.002 -> -1.000 -ddsub902 subtract 2.0E-3 1.002 -> -1.0000 -ddsub903 subtract 2.00E-3 1.0020 -> -1.00000 -ddsub904 subtract 2.000E-3 1.00200 -> -1.000000 -ddsub905 subtract 2.0000E-3 1.002000 -> -1.0000000 -ddsub906 subtract 2.00000E-3 1.0020000 -> -1.00000000 -ddsub907 subtract 2.000000E-3 1.00200000 -> -1.000000000 -ddsub908 subtract 2.0000000E-3 1.002000000 -> -1.0000000000 - --- subnormals and overflows covered under Add - --- Null tests -ddsub9990 subtract 10 # -> NaN Invalid_operation -ddsub9991 subtract # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddSubtract.decTest -- decDouble subtraction -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decDoubles only; all arguments are +-- representable in a decDouble +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- [first group are 'quick confidence check'] +ddsub001 subtract 0 0 -> '0' +ddsub002 subtract 1 1 -> '0' +ddsub003 subtract 1 2 -> '-1' +ddsub004 subtract 2 1 -> '1' +ddsub005 subtract 2 2 -> '0' +ddsub006 subtract 3 2 -> '1' +ddsub007 subtract 2 3 -> '-1' + +ddsub011 subtract -0 0 -> '-0' +ddsub012 subtract -1 1 -> '-2' +ddsub013 subtract -1 2 -> '-3' +ddsub014 subtract -2 1 -> '-3' +ddsub015 subtract -2 2 -> '-4' +ddsub016 subtract -3 2 -> '-5' +ddsub017 subtract -2 3 -> '-5' + +ddsub021 subtract 0 -0 -> '0' +ddsub022 subtract 1 -1 -> '2' +ddsub023 subtract 1 -2 -> '3' +ddsub024 subtract 2 -1 -> '3' +ddsub025 subtract 2 -2 -> '4' +ddsub026 subtract 3 -2 -> '5' +ddsub027 subtract 2 -3 -> '5' + +ddsub030 subtract 11 1 -> 10 +ddsub031 subtract 10 1 -> 9 +ddsub032 subtract 9 1 -> 8 +ddsub033 subtract 1 1 -> 0 +ddsub034 subtract 0 1 -> -1 +ddsub035 subtract -1 1 -> -2 +ddsub036 subtract -9 1 -> -10 +ddsub037 subtract -10 1 -> -11 +ddsub038 subtract -11 1 -> -12 + +ddsub040 subtract '5.75' '3.3' -> '2.45' +ddsub041 subtract '5' '-3' -> '8' +ddsub042 subtract '-5' '-3' -> '-2' +ddsub043 subtract '-7' '2.5' -> '-9.5' +ddsub044 subtract '0.7' '0.3' -> '0.4' +ddsub045 subtract '1.3' '0.3' -> '1.0' +ddsub046 subtract '1.25' '1.25' -> '0.00' + +ddsub050 subtract '1.23456789' '1.00000000' -> '0.23456789' +ddsub051 subtract '1.23456789' '1.00000089' -> '0.23456700' + +ddsub060 subtract '70' '10000e+16' -> '-1.000000000000000E+20' Inexact Rounded +ddsub061 subtract '700' '10000e+16' -> '-1.000000000000000E+20' Inexact Rounded +ddsub062 subtract '7000' '10000e+16' -> '-9.999999999999999E+19' Inexact Rounded +ddsub063 subtract '70000' '10000e+16' -> '-9.999999999999993E+19' Rounded +ddsub064 subtract '700000' '10000e+16' -> '-9.999999999999930E+19' Rounded + -- symmetry: +ddsub065 subtract '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded +ddsub066 subtract '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded +ddsub067 subtract '10000e+16' '7000' -> '9.999999999999999E+19' Inexact Rounded +ddsub068 subtract '10000e+16' '70000' -> '9.999999999999993E+19' Rounded +ddsub069 subtract '10000e+16' '700000' -> '9.999999999999930E+19' Rounded + + -- some of the next group are really constructor tests +ddsub090 subtract '00.0' '0.0' -> '0.0' +ddsub091 subtract '00.0' '0.00' -> '0.00' +ddsub092 subtract '0.00' '00.0' -> '0.00' +ddsub093 subtract '00.0' '0.00' -> '0.00' +ddsub094 subtract '0.00' '00.0' -> '0.00' +ddsub095 subtract '3' '.3' -> '2.7' +ddsub096 subtract '3.' '.3' -> '2.7' +ddsub097 subtract '3.0' '.3' -> '2.7' +ddsub098 subtract '3.00' '.3' -> '2.70' +ddsub099 subtract '3' '3' -> '0' +ddsub100 subtract '3' '+3' -> '0' +ddsub101 subtract '3' '-3' -> '6' +ddsub102 subtract '3' '0.3' -> '2.7' +ddsub103 subtract '3.' '0.3' -> '2.7' +ddsub104 subtract '3.0' '0.3' -> '2.7' +ddsub105 subtract '3.00' '0.3' -> '2.70' +ddsub106 subtract '3' '3.0' -> '0.0' +ddsub107 subtract '3' '+3.0' -> '0.0' +ddsub108 subtract '3' '-3.0' -> '6.0' + +-- the above all from add; massaged and extended. Now some new ones... +-- [particularly important for comparisons] +-- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7 +-- with input rounding. +ddsub120 subtract '10.23456784' '10.23456789' -> '-5E-8' +ddsub121 subtract '10.23456785' '10.23456789' -> '-4E-8' +ddsub122 subtract '10.23456786' '10.23456789' -> '-3E-8' +ddsub123 subtract '10.23456787' '10.23456789' -> '-2E-8' +ddsub124 subtract '10.23456788' '10.23456789' -> '-1E-8' +ddsub125 subtract '10.23456789' '10.23456789' -> '0E-8' +ddsub126 subtract '10.23456790' '10.23456789' -> '1E-8' +ddsub127 subtract '10.23456791' '10.23456789' -> '2E-8' +ddsub128 subtract '10.23456792' '10.23456789' -> '3E-8' +ddsub129 subtract '10.23456793' '10.23456789' -> '4E-8' +ddsub130 subtract '10.23456794' '10.23456789' -> '5E-8' +ddsub131 subtract '10.23456781' '10.23456786' -> '-5E-8' +ddsub132 subtract '10.23456782' '10.23456786' -> '-4E-8' +ddsub133 subtract '10.23456783' '10.23456786' -> '-3E-8' +ddsub134 subtract '10.23456784' '10.23456786' -> '-2E-8' +ddsub135 subtract '10.23456785' '10.23456786' -> '-1E-8' +ddsub136 subtract '10.23456786' '10.23456786' -> '0E-8' +ddsub137 subtract '10.23456787' '10.23456786' -> '1E-8' +ddsub138 subtract '10.23456788' '10.23456786' -> '2E-8' +ddsub139 subtract '10.23456789' '10.23456786' -> '3E-8' +ddsub140 subtract '10.23456790' '10.23456786' -> '4E-8' +ddsub141 subtract '10.23456791' '10.23456786' -> '5E-8' +ddsub142 subtract '1' '0.999999999' -> '1E-9' +ddsub143 subtract '0.999999999' '1' -> '-1E-9' +ddsub144 subtract '-10.23456780' '-10.23456786' -> '6E-8' +ddsub145 subtract '-10.23456790' '-10.23456786' -> '-4E-8' +ddsub146 subtract '-10.23456791' '-10.23456786' -> '-5E-8' + +-- additional scaled arithmetic tests [0.97 problem] +ddsub160 subtract '0' '.1' -> '-0.1' +ddsub161 subtract '00' '.97983' -> '-0.97983' +ddsub162 subtract '0' '.9' -> '-0.9' +ddsub163 subtract '0' '0.102' -> '-0.102' +ddsub164 subtract '0' '.4' -> '-0.4' +ddsub165 subtract '0' '.307' -> '-0.307' +ddsub166 subtract '0' '.43822' -> '-0.43822' +ddsub167 subtract '0' '.911' -> '-0.911' +ddsub168 subtract '.0' '.02' -> '-0.02' +ddsub169 subtract '00' '.392' -> '-0.392' +ddsub170 subtract '0' '.26' -> '-0.26' +ddsub171 subtract '0' '0.51' -> '-0.51' +ddsub172 subtract '0' '.2234' -> '-0.2234' +ddsub173 subtract '0' '.2' -> '-0.2' +ddsub174 subtract '.0' '.0008' -> '-0.0008' +-- 0. on left +ddsub180 subtract '0.0' '-.1' -> '0.1' +ddsub181 subtract '0.00' '-.97983' -> '0.97983' +ddsub182 subtract '0.0' '-.9' -> '0.9' +ddsub183 subtract '0.0' '-0.102' -> '0.102' +ddsub184 subtract '0.0' '-.4' -> '0.4' +ddsub185 subtract '0.0' '-.307' -> '0.307' +ddsub186 subtract '0.0' '-.43822' -> '0.43822' +ddsub187 subtract '0.0' '-.911' -> '0.911' +ddsub188 subtract '0.0' '-.02' -> '0.02' +ddsub189 subtract '0.00' '-.392' -> '0.392' +ddsub190 subtract '0.0' '-.26' -> '0.26' +ddsub191 subtract '0.0' '-0.51' -> '0.51' +ddsub192 subtract '0.0' '-.2234' -> '0.2234' +ddsub193 subtract '0.0' '-.2' -> '0.2' +ddsub194 subtract '0.0' '-.0008' -> '0.0008' +-- negatives of same +ddsub200 subtract '0' '-.1' -> '0.1' +ddsub201 subtract '00' '-.97983' -> '0.97983' +ddsub202 subtract '0' '-.9' -> '0.9' +ddsub203 subtract '0' '-0.102' -> '0.102' +ddsub204 subtract '0' '-.4' -> '0.4' +ddsub205 subtract '0' '-.307' -> '0.307' +ddsub206 subtract '0' '-.43822' -> '0.43822' +ddsub207 subtract '0' '-.911' -> '0.911' +ddsub208 subtract '.0' '-.02' -> '0.02' +ddsub209 subtract '00' '-.392' -> '0.392' +ddsub210 subtract '0' '-.26' -> '0.26' +ddsub211 subtract '0' '-0.51' -> '0.51' +ddsub212 subtract '0' '-.2234' -> '0.2234' +ddsub213 subtract '0' '-.2' -> '0.2' +ddsub214 subtract '.0' '-.0008' -> '0.0008' + +-- more fixed, LHS swaps [really the same as testcases under add] +ddsub220 subtract '-56267E-12' 0 -> '-5.6267E-8' +ddsub221 subtract '-56267E-11' 0 -> '-5.6267E-7' +ddsub222 subtract '-56267E-10' 0 -> '-0.0000056267' +ddsub223 subtract '-56267E-9' 0 -> '-0.000056267' +ddsub224 subtract '-56267E-8' 0 -> '-0.00056267' +ddsub225 subtract '-56267E-7' 0 -> '-0.0056267' +ddsub226 subtract '-56267E-6' 0 -> '-0.056267' +ddsub227 subtract '-56267E-5' 0 -> '-0.56267' +ddsub228 subtract '-56267E-2' 0 -> '-562.67' +ddsub229 subtract '-56267E-1' 0 -> '-5626.7' +ddsub230 subtract '-56267E-0' 0 -> '-56267' +-- symmetry ... +ddsub240 subtract 0 '-56267E-12' -> '5.6267E-8' +ddsub241 subtract 0 '-56267E-11' -> '5.6267E-7' +ddsub242 subtract 0 '-56267E-10' -> '0.0000056267' +ddsub243 subtract 0 '-56267E-9' -> '0.000056267' +ddsub244 subtract 0 '-56267E-8' -> '0.00056267' +ddsub245 subtract 0 '-56267E-7' -> '0.0056267' +ddsub246 subtract 0 '-56267E-6' -> '0.056267' +ddsub247 subtract 0 '-56267E-5' -> '0.56267' +ddsub248 subtract 0 '-56267E-2' -> '562.67' +ddsub249 subtract 0 '-56267E-1' -> '5626.7' +ddsub250 subtract 0 '-56267E-0' -> '56267' + +-- now some more from the 'new' add +ddsub301 subtract '1.23456789' '1.00000000' -> '0.23456789' +ddsub302 subtract '1.23456789' '1.00000011' -> '0.23456778' + +-- some carrying effects +ddsub321 subtract '0.9998' '0.0000' -> '0.9998' +ddsub322 subtract '0.9998' '0.0001' -> '0.9997' +ddsub323 subtract '0.9998' '0.0002' -> '0.9996' +ddsub324 subtract '0.9998' '0.0003' -> '0.9995' +ddsub325 subtract '0.9998' '-0.0000' -> '0.9998' +ddsub326 subtract '0.9998' '-0.0001' -> '0.9999' +ddsub327 subtract '0.9998' '-0.0002' -> '1.0000' +ddsub328 subtract '0.9998' '-0.0003' -> '1.0001' + +-- internal boundaries +ddsub346 subtract '10000e+9' '7' -> '9999999999993' +ddsub347 subtract '10000e+9' '70' -> '9999999999930' +ddsub348 subtract '10000e+9' '700' -> '9999999999300' +ddsub349 subtract '10000e+9' '7000' -> '9999999993000' +ddsub350 subtract '10000e+9' '70000' -> '9999999930000' +ddsub351 subtract '10000e+9' '700000' -> '9999999300000' +ddsub352 subtract '7' '10000e+9' -> '-9999999999993' +ddsub353 subtract '70' '10000e+9' -> '-9999999999930' +ddsub354 subtract '700' '10000e+9' -> '-9999999999300' +ddsub355 subtract '7000' '10000e+9' -> '-9999999993000' +ddsub356 subtract '70000' '10000e+9' -> '-9999999930000' +ddsub357 subtract '700000' '10000e+9' -> '-9999999300000' + +-- zero preservation +ddsub361 subtract 1 '0.0001' -> '0.9999' +ddsub362 subtract 1 '0.00001' -> '0.99999' +ddsub363 subtract 1 '0.000001' -> '0.999999' +ddsub364 subtract 1 '0.0000000000000001' -> '0.9999999999999999' +ddsub365 subtract 1 '0.00000000000000001' -> '1.000000000000000' Inexact Rounded +ddsub366 subtract 1 '0.000000000000000001' -> '1.000000000000000' Inexact Rounded + +-- some funny zeros [in case of bad signum] +ddsub370 subtract 1 0 -> 1 +ddsub371 subtract 1 0. -> 1 +ddsub372 subtract 1 .0 -> 1.0 +ddsub373 subtract 1 0.0 -> 1.0 +ddsub374 subtract 0 1 -> -1 +ddsub375 subtract 0. 1 -> -1 +ddsub376 subtract .0 1 -> -1.0 +ddsub377 subtract 0.0 1 -> -1.0 + +-- leading 0 digit before round +ddsub910 subtract -103519362 -51897955.3 -> -51621406.7 +ddsub911 subtract 159579.444 89827.5229 -> 69751.9211 + +ddsub920 subtract 333.0000000123456 33.00000001234566 -> 299.9999999999999 Inexact Rounded +ddsub921 subtract 333.0000000123456 33.00000001234565 -> 300.0000000000000 Inexact Rounded +ddsub922 subtract 133.0000000123456 33.00000001234565 -> 99.99999999999995 +ddsub923 subtract 133.0000000123456 33.00000001234564 -> 99.99999999999996 +ddsub924 subtract 133.0000000123456 33.00000001234540 -> 100.0000000000002 Rounded +ddsub925 subtract 133.0000000123456 43.00000001234560 -> 90.00000000000000 +ddsub926 subtract 133.0000000123456 43.00000001234561 -> 89.99999999999999 +ddsub927 subtract 133.0000000123456 43.00000001234566 -> 89.99999999999994 +ddsub928 subtract 101.0000000123456 91.00000001234566 -> 9.99999999999994 +ddsub929 subtract 101.0000000123456 99.00000001234566 -> 1.99999999999994 + +-- more LHS swaps [were fixed] +ddsub390 subtract '-56267E-10' 0 -> '-0.0000056267' +ddsub391 subtract '-56267E-6' 0 -> '-0.056267' +ddsub392 subtract '-56267E-5' 0 -> '-0.56267' +ddsub393 subtract '-56267E-4' 0 -> '-5.6267' +ddsub394 subtract '-56267E-3' 0 -> '-56.267' +ddsub395 subtract '-56267E-2' 0 -> '-562.67' +ddsub396 subtract '-56267E-1' 0 -> '-5626.7' +ddsub397 subtract '-56267E-0' 0 -> '-56267' +ddsub398 subtract '-5E-10' 0 -> '-5E-10' +ddsub399 subtract '-5E-7' 0 -> '-5E-7' +ddsub400 subtract '-5E-6' 0 -> '-0.000005' +ddsub401 subtract '-5E-5' 0 -> '-0.00005' +ddsub402 subtract '-5E-4' 0 -> '-0.0005' +ddsub403 subtract '-5E-1' 0 -> '-0.5' +ddsub404 subtract '-5E0' 0 -> '-5' +ddsub405 subtract '-5E1' 0 -> '-50' +ddsub406 subtract '-5E5' 0 -> '-500000' +ddsub407 subtract '-5E15' 0 -> '-5000000000000000' +ddsub408 subtract '-5E16' 0 -> '-5.000000000000000E+16' Rounded +ddsub409 subtract '-5E17' 0 -> '-5.000000000000000E+17' Rounded +ddsub410 subtract '-5E18' 0 -> '-5.000000000000000E+18' Rounded +ddsub411 subtract '-5E100' 0 -> '-5.000000000000000E+100' Rounded + +-- more RHS swaps [were fixed] +ddsub420 subtract 0 '-56267E-10' -> '0.0000056267' +ddsub421 subtract 0 '-56267E-6' -> '0.056267' +ddsub422 subtract 0 '-56267E-5' -> '0.56267' +ddsub423 subtract 0 '-56267E-4' -> '5.6267' +ddsub424 subtract 0 '-56267E-3' -> '56.267' +ddsub425 subtract 0 '-56267E-2' -> '562.67' +ddsub426 subtract 0 '-56267E-1' -> '5626.7' +ddsub427 subtract 0 '-56267E-0' -> '56267' +ddsub428 subtract 0 '-5E-10' -> '5E-10' +ddsub429 subtract 0 '-5E-7' -> '5E-7' +ddsub430 subtract 0 '-5E-6' -> '0.000005' +ddsub431 subtract 0 '-5E-5' -> '0.00005' +ddsub432 subtract 0 '-5E-4' -> '0.0005' +ddsub433 subtract 0 '-5E-1' -> '0.5' +ddsub434 subtract 0 '-5E0' -> '5' +ddsub435 subtract 0 '-5E1' -> '50' +ddsub436 subtract 0 '-5E5' -> '500000' +ddsub437 subtract 0 '-5E15' -> '5000000000000000' +ddsub438 subtract 0 '-5E16' -> '5.000000000000000E+16' Rounded +ddsub439 subtract 0 '-5E17' -> '5.000000000000000E+17' Rounded +ddsub440 subtract 0 '-5E18' -> '5.000000000000000E+18' Rounded +ddsub441 subtract 0 '-5E100' -> '5.000000000000000E+100' Rounded + + +-- try borderline precision, with carries, etc. +ddsub461 subtract '1E+16' '1' -> '9999999999999999' +ddsub462 subtract '1E+12' '-1.111' -> '1000000000001.111' +ddsub463 subtract '1.111' '-1E+12' -> '1000000000001.111' +ddsub464 subtract '-1' '-1E+16' -> '9999999999999999' +ddsub465 subtract '7E+15' '1' -> '6999999999999999' +ddsub466 subtract '7E+12' '-1.111' -> '7000000000001.111' +ddsub467 subtract '1.111' '-7E+12' -> '7000000000001.111' +ddsub468 subtract '-1' '-7E+15' -> '6999999999999999' + +-- 1234567890123456 1234567890123456 1 23456789012345 +ddsub470 subtract '0.4444444444444444' '-0.5555555555555563' -> '1.000000000000001' Inexact Rounded +ddsub471 subtract '0.4444444444444444' '-0.5555555555555562' -> '1.000000000000001' Inexact Rounded +ddsub472 subtract '0.4444444444444444' '-0.5555555555555561' -> '1.000000000000000' Inexact Rounded +ddsub473 subtract '0.4444444444444444' '-0.5555555555555560' -> '1.000000000000000' Inexact Rounded +ddsub474 subtract '0.4444444444444444' '-0.5555555555555559' -> '1.000000000000000' Inexact Rounded +ddsub475 subtract '0.4444444444444444' '-0.5555555555555558' -> '1.000000000000000' Inexact Rounded +ddsub476 subtract '0.4444444444444444' '-0.5555555555555557' -> '1.000000000000000' Inexact Rounded +ddsub477 subtract '0.4444444444444444' '-0.5555555555555556' -> '1.000000000000000' Rounded +ddsub478 subtract '0.4444444444444444' '-0.5555555555555555' -> '0.9999999999999999' +ddsub479 subtract '0.4444444444444444' '-0.5555555555555554' -> '0.9999999999999998' +ddsub480 subtract '0.4444444444444444' '-0.5555555555555553' -> '0.9999999999999997' +ddsub481 subtract '0.4444444444444444' '-0.5555555555555552' -> '0.9999999999999996' +ddsub482 subtract '0.4444444444444444' '-0.5555555555555551' -> '0.9999999999999995' +ddsub483 subtract '0.4444444444444444' '-0.5555555555555550' -> '0.9999999999999994' + +-- and some more, including residue effects and different roundings +rounding: half_up +ddsub500 subtract '1231234567456789' 0 -> '1231234567456789' +ddsub501 subtract '1231234567456789' 0.000000001 -> '1231234567456789' Inexact Rounded +ddsub502 subtract '1231234567456789' 0.000001 -> '1231234567456789' Inexact Rounded +ddsub503 subtract '1231234567456789' 0.1 -> '1231234567456789' Inexact Rounded +ddsub504 subtract '1231234567456789' 0.4 -> '1231234567456789' Inexact Rounded +ddsub505 subtract '1231234567456789' 0.49 -> '1231234567456789' Inexact Rounded +ddsub506 subtract '1231234567456789' 0.499999 -> '1231234567456789' Inexact Rounded +ddsub507 subtract '1231234567456789' 0.499999999 -> '1231234567456789' Inexact Rounded +ddsub508 subtract '1231234567456789' 0.5 -> '1231234567456789' Inexact Rounded +ddsub509 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded +ddsub510 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded +ddsub511 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded +ddsub512 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded +ddsub513 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded +ddsub514 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded +ddsub515 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded +ddsub516 subtract '1231234567456789' 1 -> '1231234567456788' +ddsub517 subtract '1231234567456789' 1.000000001 -> '1231234567456788' Inexact Rounded +ddsub518 subtract '1231234567456789' 1.00001 -> '1231234567456788' Inexact Rounded +ddsub519 subtract '1231234567456789' 1.1 -> '1231234567456788' Inexact Rounded + +rounding: half_even +ddsub520 subtract '1231234567456789' 0 -> '1231234567456789' +ddsub521 subtract '1231234567456789' 0.000000001 -> '1231234567456789' Inexact Rounded +ddsub522 subtract '1231234567456789' 0.000001 -> '1231234567456789' Inexact Rounded +ddsub523 subtract '1231234567456789' 0.1 -> '1231234567456789' Inexact Rounded +ddsub524 subtract '1231234567456789' 0.4 -> '1231234567456789' Inexact Rounded +ddsub525 subtract '1231234567456789' 0.49 -> '1231234567456789' Inexact Rounded +ddsub526 subtract '1231234567456789' 0.499999 -> '1231234567456789' Inexact Rounded +ddsub527 subtract '1231234567456789' 0.499999999 -> '1231234567456789' Inexact Rounded +ddsub528 subtract '1231234567456789' 0.5 -> '1231234567456788' Inexact Rounded +ddsub529 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded +ddsub530 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded +ddsub531 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded +ddsub532 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded +ddsub533 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded +ddsub534 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded +ddsub535 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded +ddsub536 subtract '1231234567456789' 1 -> '1231234567456788' +ddsub537 subtract '1231234567456789' 1.00000001 -> '1231234567456788' Inexact Rounded +ddsub538 subtract '1231234567456789' 1.00001 -> '1231234567456788' Inexact Rounded +ddsub539 subtract '1231234567456789' 1.1 -> '1231234567456788' Inexact Rounded +-- critical few with even bottom digit... +ddsub540 subtract '1231234567456788' 0.499999999 -> '1231234567456788' Inexact Rounded +ddsub541 subtract '1231234567456788' 0.5 -> '1231234567456788' Inexact Rounded +ddsub542 subtract '1231234567456788' 0.500000001 -> '1231234567456787' Inexact Rounded + +rounding: down +ddsub550 subtract '1231234567456789' 0 -> '1231234567456789' +ddsub551 subtract '1231234567456789' 0.000000001 -> '1231234567456788' Inexact Rounded +ddsub552 subtract '1231234567456789' 0.000001 -> '1231234567456788' Inexact Rounded +ddsub553 subtract '1231234567456789' 0.1 -> '1231234567456788' Inexact Rounded +ddsub554 subtract '1231234567456789' 0.4 -> '1231234567456788' Inexact Rounded +ddsub555 subtract '1231234567456789' 0.49 -> '1231234567456788' Inexact Rounded +ddsub556 subtract '1231234567456789' 0.499999 -> '1231234567456788' Inexact Rounded +ddsub557 subtract '1231234567456789' 0.499999999 -> '1231234567456788' Inexact Rounded +ddsub558 subtract '1231234567456789' 0.5 -> '1231234567456788' Inexact Rounded +ddsub559 subtract '1231234567456789' 0.500000001 -> '1231234567456788' Inexact Rounded +ddsub560 subtract '1231234567456789' 0.500001 -> '1231234567456788' Inexact Rounded +ddsub561 subtract '1231234567456789' 0.51 -> '1231234567456788' Inexact Rounded +ddsub562 subtract '1231234567456789' 0.6 -> '1231234567456788' Inexact Rounded +ddsub563 subtract '1231234567456789' 0.9 -> '1231234567456788' Inexact Rounded +ddsub564 subtract '1231234567456789' 0.99999 -> '1231234567456788' Inexact Rounded +ddsub565 subtract '1231234567456789' 0.999999999 -> '1231234567456788' Inexact Rounded +ddsub566 subtract '1231234567456789' 1 -> '1231234567456788' +ddsub567 subtract '1231234567456789' 1.00000001 -> '1231234567456787' Inexact Rounded +ddsub568 subtract '1231234567456789' 1.00001 -> '1231234567456787' Inexact Rounded +ddsub569 subtract '1231234567456789' 1.1 -> '1231234567456787' Inexact Rounded + +-- symmetry... +rounding: half_up +ddsub600 subtract 0 '1231234567456789' -> '-1231234567456789' +ddsub601 subtract 0.000000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub602 subtract 0.000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub603 subtract 0.1 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub604 subtract 0.4 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub605 subtract 0.49 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub606 subtract 0.499999 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub607 subtract 0.499999999 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub608 subtract 0.5 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub609 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub610 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub611 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub612 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub613 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub614 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub615 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub616 subtract 1 '1231234567456789' -> '-1231234567456788' +ddsub617 subtract 1.000000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub618 subtract 1.00001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub619 subtract 1.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded + +rounding: half_even +ddsub620 subtract 0 '1231234567456789' -> '-1231234567456789' +ddsub621 subtract 0.000000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub622 subtract 0.000001 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub623 subtract 0.1 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub624 subtract 0.4 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub625 subtract 0.49 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub626 subtract 0.499999 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub627 subtract 0.499999999 '1231234567456789' -> '-1231234567456789' Inexact Rounded +ddsub628 subtract 0.5 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub629 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub630 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub631 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub632 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub633 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub634 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub635 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub636 subtract 1 '1231234567456789' -> '-1231234567456788' +ddsub637 subtract 1.00000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub638 subtract 1.00001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub639 subtract 1.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded +-- critical few with even bottom digit... +ddsub640 subtract 0.499999999 '1231234567456788' -> '-1231234567456788' Inexact Rounded +ddsub641 subtract 0.5 '1231234567456788' -> '-1231234567456788' Inexact Rounded +ddsub642 subtract 0.500000001 '1231234567456788' -> '-1231234567456787' Inexact Rounded + +rounding: down +ddsub650 subtract 0 '1231234567456789' -> '-1231234567456789' +ddsub651 subtract 0.000000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub652 subtract 0.000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub653 subtract 0.1 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub654 subtract 0.4 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub655 subtract 0.49 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub656 subtract 0.499999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub657 subtract 0.499999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub658 subtract 0.5 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub659 subtract 0.500000001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub660 subtract 0.500001 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub661 subtract 0.51 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub662 subtract 0.6 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub663 subtract 0.9 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub664 subtract 0.99999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub665 subtract 0.999999999 '1231234567456789' -> '-1231234567456788' Inexact Rounded +ddsub666 subtract 1 '1231234567456789' -> '-1231234567456788' +ddsub667 subtract 1.00000001 '1231234567456789' -> '-1231234567456787' Inexact Rounded +ddsub668 subtract 1.00001 '1231234567456789' -> '-1231234567456787' Inexact Rounded +ddsub669 subtract 1.1 '1231234567456789' -> '-1231234567456787' Inexact Rounded + + +-- lots of leading zeros in intermediate result, and showing effects of +-- input rounding would have affected the following +rounding: half_up +ddsub670 subtract '1234567456789' '1234567456788.1' -> 0.9 +ddsub671 subtract '1234567456789' '1234567456788.9' -> 0.1 +ddsub672 subtract '1234567456789' '1234567456789.1' -> -0.1 +ddsub673 subtract '1234567456789' '1234567456789.5' -> -0.5 +ddsub674 subtract '1234567456789' '1234567456789.9' -> -0.9 + +rounding: half_even +ddsub680 subtract '1234567456789' '1234567456788.1' -> 0.9 +ddsub681 subtract '1234567456789' '1234567456788.9' -> 0.1 +ddsub682 subtract '1234567456789' '1234567456789.1' -> -0.1 +ddsub683 subtract '1234567456789' '1234567456789.5' -> -0.5 +ddsub684 subtract '1234567456789' '1234567456789.9' -> -0.9 + +ddsub685 subtract '1234567456788' '1234567456787.1' -> 0.9 +ddsub686 subtract '1234567456788' '1234567456787.9' -> 0.1 +ddsub687 subtract '1234567456788' '1234567456788.1' -> -0.1 +ddsub688 subtract '1234567456788' '1234567456788.5' -> -0.5 +ddsub689 subtract '1234567456788' '1234567456788.9' -> -0.9 + +rounding: down +ddsub690 subtract '1234567456789' '1234567456788.1' -> 0.9 +ddsub691 subtract '1234567456789' '1234567456788.9' -> 0.1 +ddsub692 subtract '1234567456789' '1234567456789.1' -> -0.1 +ddsub693 subtract '1234567456789' '1234567456789.5' -> -0.5 +ddsub694 subtract '1234567456789' '1234567456789.9' -> -0.9 + +-- Specials +ddsub780 subtract -Inf Inf -> -Infinity +ddsub781 subtract -Inf 1000 -> -Infinity +ddsub782 subtract -Inf 1 -> -Infinity +ddsub783 subtract -Inf -0 -> -Infinity +ddsub784 subtract -Inf -1 -> -Infinity +ddsub785 subtract -Inf -1000 -> -Infinity +ddsub787 subtract -1000 Inf -> -Infinity +ddsub788 subtract -Inf Inf -> -Infinity +ddsub789 subtract -1 Inf -> -Infinity +ddsub790 subtract 0 Inf -> -Infinity +ddsub791 subtract 1 Inf -> -Infinity +ddsub792 subtract 1000 Inf -> -Infinity + +ddsub800 subtract Inf Inf -> NaN Invalid_operation +ddsub801 subtract Inf 1000 -> Infinity +ddsub802 subtract Inf 1 -> Infinity +ddsub803 subtract Inf 0 -> Infinity +ddsub804 subtract Inf -0 -> Infinity +ddsub805 subtract Inf -1 -> Infinity +ddsub806 subtract Inf -1000 -> Infinity +ddsub807 subtract Inf -Inf -> Infinity +ddsub808 subtract -1000 -Inf -> Infinity +ddsub809 subtract -Inf -Inf -> NaN Invalid_operation +ddsub810 subtract -1 -Inf -> Infinity +ddsub811 subtract -0 -Inf -> Infinity +ddsub812 subtract 0 -Inf -> Infinity +ddsub813 subtract 1 -Inf -> Infinity +ddsub814 subtract 1000 -Inf -> Infinity +ddsub815 subtract Inf -Inf -> Infinity + +ddsub821 subtract NaN Inf -> NaN +ddsub822 subtract -NaN 1000 -> -NaN +ddsub823 subtract NaN 1 -> NaN +ddsub824 subtract NaN 0 -> NaN +ddsub825 subtract NaN -0 -> NaN +ddsub826 subtract NaN -1 -> NaN +ddsub827 subtract NaN -1000 -> NaN +ddsub828 subtract NaN -Inf -> NaN +ddsub829 subtract -NaN NaN -> -NaN +ddsub830 subtract -Inf NaN -> NaN +ddsub831 subtract -1000 NaN -> NaN +ddsub832 subtract -1 NaN -> NaN +ddsub833 subtract -0 NaN -> NaN +ddsub834 subtract 0 NaN -> NaN +ddsub835 subtract 1 NaN -> NaN +ddsub836 subtract 1000 -NaN -> -NaN +ddsub837 subtract Inf NaN -> NaN + +ddsub841 subtract sNaN Inf -> NaN Invalid_operation +ddsub842 subtract -sNaN 1000 -> -NaN Invalid_operation +ddsub843 subtract sNaN 1 -> NaN Invalid_operation +ddsub844 subtract sNaN 0 -> NaN Invalid_operation +ddsub845 subtract sNaN -0 -> NaN Invalid_operation +ddsub846 subtract sNaN -1 -> NaN Invalid_operation +ddsub847 subtract sNaN -1000 -> NaN Invalid_operation +ddsub848 subtract sNaN NaN -> NaN Invalid_operation +ddsub849 subtract sNaN sNaN -> NaN Invalid_operation +ddsub850 subtract NaN sNaN -> NaN Invalid_operation +ddsub851 subtract -Inf -sNaN -> -NaN Invalid_operation +ddsub852 subtract -1000 sNaN -> NaN Invalid_operation +ddsub853 subtract -1 sNaN -> NaN Invalid_operation +ddsub854 subtract -0 sNaN -> NaN Invalid_operation +ddsub855 subtract 0 sNaN -> NaN Invalid_operation +ddsub856 subtract 1 sNaN -> NaN Invalid_operation +ddsub857 subtract 1000 sNaN -> NaN Invalid_operation +ddsub858 subtract Inf sNaN -> NaN Invalid_operation +ddsub859 subtract NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddsub861 subtract NaN01 -Inf -> NaN1 +ddsub862 subtract -NaN02 -1000 -> -NaN2 +ddsub863 subtract NaN03 1000 -> NaN3 +ddsub864 subtract NaN04 Inf -> NaN4 +ddsub865 subtract NaN05 NaN61 -> NaN5 +ddsub866 subtract -Inf -NaN71 -> -NaN71 +ddsub867 subtract -1000 NaN81 -> NaN81 +ddsub868 subtract 1000 NaN91 -> NaN91 +ddsub869 subtract Inf NaN101 -> NaN101 +ddsub871 subtract sNaN011 -Inf -> NaN11 Invalid_operation +ddsub872 subtract sNaN012 -1000 -> NaN12 Invalid_operation +ddsub873 subtract -sNaN013 1000 -> -NaN13 Invalid_operation +ddsub874 subtract sNaN014 NaN171 -> NaN14 Invalid_operation +ddsub875 subtract sNaN015 sNaN181 -> NaN15 Invalid_operation +ddsub876 subtract NaN016 sNaN191 -> NaN191 Invalid_operation +ddsub877 subtract -Inf sNaN201 -> NaN201 Invalid_operation +ddsub878 subtract -1000 sNaN211 -> NaN211 Invalid_operation +ddsub879 subtract 1000 -sNaN221 -> -NaN221 Invalid_operation +ddsub880 subtract Inf sNaN231 -> NaN231 Invalid_operation +ddsub881 subtract NaN025 sNaN241 -> NaN241 Invalid_operation + +-- edge case spills +ddsub901 subtract 2.E-3 1.002 -> -1.000 +ddsub902 subtract 2.0E-3 1.002 -> -1.0000 +ddsub903 subtract 2.00E-3 1.0020 -> -1.00000 +ddsub904 subtract 2.000E-3 1.00200 -> -1.000000 +ddsub905 subtract 2.0000E-3 1.002000 -> -1.0000000 +ddsub906 subtract 2.00000E-3 1.0020000 -> -1.00000000 +ddsub907 subtract 2.000000E-3 1.00200000 -> -1.000000000 +ddsub908 subtract 2.0000000E-3 1.002000000 -> -1.0000000000 + +-- subnormals and overflows covered under Add + +-- Null tests +ddsub9990 subtract 10 # -> NaN Invalid_operation +ddsub9991 subtract # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ddToIntegral.decTest b/Lib/test/decimaltestdata/ddToIntegral.decTest index bf6d61fa563..900bd4ac3a8 100644 --- a/Lib/test/decimaltestdata/ddToIntegral.decTest +++ b/Lib/test/decimaltestdata/ddToIntegral.decTest @@ -1,257 +1,257 @@ ------------------------------------------------------------------------- --- ddToIntegral.decTest -- round Double to integral value -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests tests the extended specification 'round-to-integral --- value-exact' operations (from IEEE 854, later modified in 754r). --- All non-zero results are defined as being those from either copy or --- quantize, so those are assumed to have been tested extensively --- elsewhere; the tests here are for integrity, rounding mode, etc. --- Also, it is assumed the test harness will use these tests for both --- ToIntegralExact (which does set Inexact) and the fixed-name --- functions (which do not set Inexact). - --- Note that decNumber implements an earlier definition of toIntegral --- which never sets Inexact; the decTest operator for that is called --- 'tointegral' instead of 'tointegralx'. - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - -ddintx001 tointegralx 0 -> 0 -ddintx002 tointegralx 0.0 -> 0 -ddintx003 tointegralx 0.1 -> 0 Inexact Rounded -ddintx004 tointegralx 0.2 -> 0 Inexact Rounded -ddintx005 tointegralx 0.3 -> 0 Inexact Rounded -ddintx006 tointegralx 0.4 -> 0 Inexact Rounded -ddintx007 tointegralx 0.5 -> 0 Inexact Rounded -ddintx008 tointegralx 0.6 -> 1 Inexact Rounded -ddintx009 tointegralx 0.7 -> 1 Inexact Rounded -ddintx010 tointegralx 0.8 -> 1 Inexact Rounded -ddintx011 tointegralx 0.9 -> 1 Inexact Rounded -ddintx012 tointegralx 1 -> 1 -ddintx013 tointegralx 1.0 -> 1 Rounded -ddintx014 tointegralx 1.1 -> 1 Inexact Rounded -ddintx015 tointegralx 1.2 -> 1 Inexact Rounded -ddintx016 tointegralx 1.3 -> 1 Inexact Rounded -ddintx017 tointegralx 1.4 -> 1 Inexact Rounded -ddintx018 tointegralx 1.5 -> 2 Inexact Rounded -ddintx019 tointegralx 1.6 -> 2 Inexact Rounded -ddintx020 tointegralx 1.7 -> 2 Inexact Rounded -ddintx021 tointegralx 1.8 -> 2 Inexact Rounded -ddintx022 tointegralx 1.9 -> 2 Inexact Rounded --- negatives -ddintx031 tointegralx -0 -> -0 -ddintx032 tointegralx -0.0 -> -0 -ddintx033 tointegralx -0.1 -> -0 Inexact Rounded -ddintx034 tointegralx -0.2 -> -0 Inexact Rounded -ddintx035 tointegralx -0.3 -> -0 Inexact Rounded -ddintx036 tointegralx -0.4 -> -0 Inexact Rounded -ddintx037 tointegralx -0.5 -> -0 Inexact Rounded -ddintx038 tointegralx -0.6 -> -1 Inexact Rounded -ddintx039 tointegralx -0.7 -> -1 Inexact Rounded -ddintx040 tointegralx -0.8 -> -1 Inexact Rounded -ddintx041 tointegralx -0.9 -> -1 Inexact Rounded -ddintx042 tointegralx -1 -> -1 -ddintx043 tointegralx -1.0 -> -1 Rounded -ddintx044 tointegralx -1.1 -> -1 Inexact Rounded -ddintx045 tointegralx -1.2 -> -1 Inexact Rounded -ddintx046 tointegralx -1.3 -> -1 Inexact Rounded -ddintx047 tointegralx -1.4 -> -1 Inexact Rounded -ddintx048 tointegralx -1.5 -> -2 Inexact Rounded -ddintx049 tointegralx -1.6 -> -2 Inexact Rounded -ddintx050 tointegralx -1.7 -> -2 Inexact Rounded -ddintx051 tointegralx -1.8 -> -2 Inexact Rounded -ddintx052 tointegralx -1.9 -> -2 Inexact Rounded --- next two would be NaN using quantize(x, 0) -ddintx053 tointegralx 10E+60 -> 1.0E+61 -ddintx054 tointegralx -10E+60 -> -1.0E+61 - --- numbers around precision -ddintx060 tointegralx '56267E-17' -> '0' Inexact Rounded -ddintx061 tointegralx '56267E-5' -> '1' Inexact Rounded -ddintx062 tointegralx '56267E-2' -> '563' Inexact Rounded -ddintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded -ddintx065 tointegralx '56267E-0' -> '56267' -ddintx066 tointegralx '56267E+0' -> '56267' -ddintx067 tointegralx '56267E+1' -> '5.6267E+5' -ddintx068 tointegralx '56267E+9' -> '5.6267E+13' -ddintx069 tointegralx '56267E+10' -> '5.6267E+14' -ddintx070 tointegralx '56267E+11' -> '5.6267E+15' -ddintx071 tointegralx '56267E+12' -> '5.6267E+16' -ddintx072 tointegralx '56267E+13' -> '5.6267E+17' -ddintx073 tointegralx '1.23E+96' -> '1.23E+96' -ddintx074 tointegralx '1.23E+384' -> #47fd300000000000 Clamped - -ddintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded -ddintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded -ddintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded -ddintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded -ddintx085 tointegralx '-56267E-0' -> '-56267' -ddintx086 tointegralx '-56267E+0' -> '-56267' -ddintx087 tointegralx '-56267E+1' -> '-5.6267E+5' -ddintx088 tointegralx '-56267E+9' -> '-5.6267E+13' -ddintx089 tointegralx '-56267E+10' -> '-5.6267E+14' -ddintx090 tointegralx '-56267E+11' -> '-5.6267E+15' -ddintx091 tointegralx '-56267E+12' -> '-5.6267E+16' -ddintx092 tointegralx '-56267E+13' -> '-5.6267E+17' -ddintx093 tointegralx '-1.23E+96' -> '-1.23E+96' -ddintx094 tointegralx '-1.23E+384' -> #c7fd300000000000 Clamped - --- subnormal inputs -ddintx100 tointegralx 1E-299 -> 0 Inexact Rounded -ddintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded -ddintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded -ddintx103 tointegralx 0E-299 -> 0 - --- specials and zeros -ddintx120 tointegralx 'Inf' -> Infinity -ddintx121 tointegralx '-Inf' -> -Infinity -ddintx122 tointegralx NaN -> NaN -ddintx123 tointegralx sNaN -> NaN Invalid_operation -ddintx124 tointegralx 0 -> 0 -ddintx125 tointegralx -0 -> -0 -ddintx126 tointegralx 0.000 -> 0 -ddintx127 tointegralx 0.00 -> 0 -ddintx128 tointegralx 0.0 -> 0 -ddintx129 tointegralx 0 -> 0 -ddintx130 tointegralx 0E-3 -> 0 -ddintx131 tointegralx 0E-2 -> 0 -ddintx132 tointegralx 0E-1 -> 0 -ddintx133 tointegralx 0E-0 -> 0 -ddintx134 tointegralx 0E+1 -> 0E+1 -ddintx135 tointegralx 0E+2 -> 0E+2 -ddintx136 tointegralx 0E+3 -> 0E+3 -ddintx137 tointegralx 0E+4 -> 0E+4 -ddintx138 tointegralx 0E+5 -> 0E+5 -ddintx139 tointegralx -0.000 -> -0 -ddintx140 tointegralx -0.00 -> -0 -ddintx141 tointegralx -0.0 -> -0 -ddintx142 tointegralx -0 -> -0 -ddintx143 tointegralx -0E-3 -> -0 -ddintx144 tointegralx -0E-2 -> -0 -ddintx145 tointegralx -0E-1 -> -0 -ddintx146 tointegralx -0E-0 -> -0 -ddintx147 tointegralx -0E+1 -> -0E+1 -ddintx148 tointegralx -0E+2 -> -0E+2 -ddintx149 tointegralx -0E+3 -> -0E+3 -ddintx150 tointegralx -0E+4 -> -0E+4 -ddintx151 tointegralx -0E+5 -> -0E+5 --- propagating NaNs -ddintx152 tointegralx NaN808 -> NaN808 -ddintx153 tointegralx sNaN080 -> NaN80 Invalid_operation -ddintx154 tointegralx -NaN808 -> -NaN808 -ddintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation -ddintx156 tointegralx -NaN -> -NaN -ddintx157 tointegralx -sNaN -> -NaN Invalid_operation - --- examples -rounding: half_up -ddintx200 tointegralx 2.1 -> 2 Inexact Rounded -ddintx201 tointegralx 100 -> 100 -ddintx202 tointegralx 100.0 -> 100 Rounded -ddintx203 tointegralx 101.5 -> 102 Inexact Rounded -ddintx204 tointegralx -101.5 -> -102 Inexact Rounded -ddintx205 tointegralx 10E+5 -> 1.0E+6 -ddintx206 tointegralx 7.89E+77 -> 7.89E+77 -ddintx207 tointegralx -Inf -> -Infinity - - --- all rounding modes -rounding: half_even -ddintx210 tointegralx 55.5 -> 56 Inexact Rounded -ddintx211 tointegralx 56.5 -> 56 Inexact Rounded -ddintx212 tointegralx 57.5 -> 58 Inexact Rounded -ddintx213 tointegralx -55.5 -> -56 Inexact Rounded -ddintx214 tointegralx -56.5 -> -56 Inexact Rounded -ddintx215 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_up - -ddintx220 tointegralx 55.5 -> 56 Inexact Rounded -ddintx221 tointegralx 56.5 -> 57 Inexact Rounded -ddintx222 tointegralx 57.5 -> 58 Inexact Rounded -ddintx223 tointegralx -55.5 -> -56 Inexact Rounded -ddintx224 tointegralx -56.5 -> -57 Inexact Rounded -ddintx225 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_down - -ddintx230 tointegralx 55.5 -> 55 Inexact Rounded -ddintx231 tointegralx 56.5 -> 56 Inexact Rounded -ddintx232 tointegralx 57.5 -> 57 Inexact Rounded -ddintx233 tointegralx -55.5 -> -55 Inexact Rounded -ddintx234 tointegralx -56.5 -> -56 Inexact Rounded -ddintx235 tointegralx -57.5 -> -57 Inexact Rounded - -rounding: up - -ddintx240 tointegralx 55.3 -> 56 Inexact Rounded -ddintx241 tointegralx 56.3 -> 57 Inexact Rounded -ddintx242 tointegralx 57.3 -> 58 Inexact Rounded -ddintx243 tointegralx -55.3 -> -56 Inexact Rounded -ddintx244 tointegralx -56.3 -> -57 Inexact Rounded -ddintx245 tointegralx -57.3 -> -58 Inexact Rounded - -rounding: down - -ddintx250 tointegralx 55.7 -> 55 Inexact Rounded -ddintx251 tointegralx 56.7 -> 56 Inexact Rounded -ddintx252 tointegralx 57.7 -> 57 Inexact Rounded -ddintx253 tointegralx -55.7 -> -55 Inexact Rounded -ddintx254 tointegralx -56.7 -> -56 Inexact Rounded -ddintx255 tointegralx -57.7 -> -57 Inexact Rounded - -rounding: ceiling - -ddintx260 tointegralx 55.3 -> 56 Inexact Rounded -ddintx261 tointegralx 56.3 -> 57 Inexact Rounded -ddintx262 tointegralx 57.3 -> 58 Inexact Rounded -ddintx263 tointegralx -55.3 -> -55 Inexact Rounded -ddintx264 tointegralx -56.3 -> -56 Inexact Rounded -ddintx265 tointegralx -57.3 -> -57 Inexact Rounded - -rounding: floor - -ddintx270 tointegralx 55.7 -> 55 Inexact Rounded -ddintx271 tointegralx 56.7 -> 56 Inexact Rounded -ddintx272 tointegralx 57.7 -> 57 Inexact Rounded -ddintx273 tointegralx -55.7 -> -56 Inexact Rounded -ddintx274 tointegralx -56.7 -> -57 Inexact Rounded -ddintx275 tointegralx -57.7 -> -58 Inexact Rounded - --- Int and uInt32 edge values for testing conversions -ddintx300 tointegralx -2147483646 -> -2147483646 -ddintx301 tointegralx -2147483647 -> -2147483647 -ddintx302 tointegralx -2147483648 -> -2147483648 -ddintx303 tointegralx -2147483649 -> -2147483649 -ddintx304 tointegralx 2147483646 -> 2147483646 -ddintx305 tointegralx 2147483647 -> 2147483647 -ddintx306 tointegralx 2147483648 -> 2147483648 -ddintx307 tointegralx 2147483649 -> 2147483649 -ddintx308 tointegralx 4294967294 -> 4294967294 -ddintx309 tointegralx 4294967295 -> 4294967295 -ddintx310 tointegralx 4294967296 -> 4294967296 -ddintx311 tointegralx 4294967297 -> 4294967297 - +------------------------------------------------------------------------ +-- ddToIntegral.decTest -- round Double to integral value -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests tests the extended specification 'round-to-integral +-- value-exact' operations (from IEEE 854, later modified in 754r). +-- All non-zero results are defined as being those from either copy or +-- quantize, so those are assumed to have been tested extensively +-- elsewhere; the tests here are for integrity, rounding mode, etc. +-- Also, it is assumed the test harness will use these tests for both +-- ToIntegralExact (which does set Inexact) and the fixed-name +-- functions (which do not set Inexact). + +-- Note that decNumber implements an earlier definition of toIntegral +-- which never sets Inexact; the decTest operator for that is called +-- 'tointegral' instead of 'tointegralx'. + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +ddintx001 tointegralx 0 -> 0 +ddintx002 tointegralx 0.0 -> 0 +ddintx003 tointegralx 0.1 -> 0 Inexact Rounded +ddintx004 tointegralx 0.2 -> 0 Inexact Rounded +ddintx005 tointegralx 0.3 -> 0 Inexact Rounded +ddintx006 tointegralx 0.4 -> 0 Inexact Rounded +ddintx007 tointegralx 0.5 -> 0 Inexact Rounded +ddintx008 tointegralx 0.6 -> 1 Inexact Rounded +ddintx009 tointegralx 0.7 -> 1 Inexact Rounded +ddintx010 tointegralx 0.8 -> 1 Inexact Rounded +ddintx011 tointegralx 0.9 -> 1 Inexact Rounded +ddintx012 tointegralx 1 -> 1 +ddintx013 tointegralx 1.0 -> 1 Rounded +ddintx014 tointegralx 1.1 -> 1 Inexact Rounded +ddintx015 tointegralx 1.2 -> 1 Inexact Rounded +ddintx016 tointegralx 1.3 -> 1 Inexact Rounded +ddintx017 tointegralx 1.4 -> 1 Inexact Rounded +ddintx018 tointegralx 1.5 -> 2 Inexact Rounded +ddintx019 tointegralx 1.6 -> 2 Inexact Rounded +ddintx020 tointegralx 1.7 -> 2 Inexact Rounded +ddintx021 tointegralx 1.8 -> 2 Inexact Rounded +ddintx022 tointegralx 1.9 -> 2 Inexact Rounded +-- negatives +ddintx031 tointegralx -0 -> -0 +ddintx032 tointegralx -0.0 -> -0 +ddintx033 tointegralx -0.1 -> -0 Inexact Rounded +ddintx034 tointegralx -0.2 -> -0 Inexact Rounded +ddintx035 tointegralx -0.3 -> -0 Inexact Rounded +ddintx036 tointegralx -0.4 -> -0 Inexact Rounded +ddintx037 tointegralx -0.5 -> -0 Inexact Rounded +ddintx038 tointegralx -0.6 -> -1 Inexact Rounded +ddintx039 tointegralx -0.7 -> -1 Inexact Rounded +ddintx040 tointegralx -0.8 -> -1 Inexact Rounded +ddintx041 tointegralx -0.9 -> -1 Inexact Rounded +ddintx042 tointegralx -1 -> -1 +ddintx043 tointegralx -1.0 -> -1 Rounded +ddintx044 tointegralx -1.1 -> -1 Inexact Rounded +ddintx045 tointegralx -1.2 -> -1 Inexact Rounded +ddintx046 tointegralx -1.3 -> -1 Inexact Rounded +ddintx047 tointegralx -1.4 -> -1 Inexact Rounded +ddintx048 tointegralx -1.5 -> -2 Inexact Rounded +ddintx049 tointegralx -1.6 -> -2 Inexact Rounded +ddintx050 tointegralx -1.7 -> -2 Inexact Rounded +ddintx051 tointegralx -1.8 -> -2 Inexact Rounded +ddintx052 tointegralx -1.9 -> -2 Inexact Rounded +-- next two would be NaN using quantize(x, 0) +ddintx053 tointegralx 10E+60 -> 1.0E+61 +ddintx054 tointegralx -10E+60 -> -1.0E+61 + +-- numbers around precision +ddintx060 tointegralx '56267E-17' -> '0' Inexact Rounded +ddintx061 tointegralx '56267E-5' -> '1' Inexact Rounded +ddintx062 tointegralx '56267E-2' -> '563' Inexact Rounded +ddintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded +ddintx065 tointegralx '56267E-0' -> '56267' +ddintx066 tointegralx '56267E+0' -> '56267' +ddintx067 tointegralx '56267E+1' -> '5.6267E+5' +ddintx068 tointegralx '56267E+9' -> '5.6267E+13' +ddintx069 tointegralx '56267E+10' -> '5.6267E+14' +ddintx070 tointegralx '56267E+11' -> '5.6267E+15' +ddintx071 tointegralx '56267E+12' -> '5.6267E+16' +ddintx072 tointegralx '56267E+13' -> '5.6267E+17' +ddintx073 tointegralx '1.23E+96' -> '1.23E+96' +ddintx074 tointegralx '1.23E+384' -> #47fd300000000000 Clamped + +ddintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded +ddintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded +ddintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded +ddintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded +ddintx085 tointegralx '-56267E-0' -> '-56267' +ddintx086 tointegralx '-56267E+0' -> '-56267' +ddintx087 tointegralx '-56267E+1' -> '-5.6267E+5' +ddintx088 tointegralx '-56267E+9' -> '-5.6267E+13' +ddintx089 tointegralx '-56267E+10' -> '-5.6267E+14' +ddintx090 tointegralx '-56267E+11' -> '-5.6267E+15' +ddintx091 tointegralx '-56267E+12' -> '-5.6267E+16' +ddintx092 tointegralx '-56267E+13' -> '-5.6267E+17' +ddintx093 tointegralx '-1.23E+96' -> '-1.23E+96' +ddintx094 tointegralx '-1.23E+384' -> #c7fd300000000000 Clamped + +-- subnormal inputs +ddintx100 tointegralx 1E-299 -> 0 Inexact Rounded +ddintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded +ddintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded +ddintx103 tointegralx 0E-299 -> 0 + +-- specials and zeros +ddintx120 tointegralx 'Inf' -> Infinity +ddintx121 tointegralx '-Inf' -> -Infinity +ddintx122 tointegralx NaN -> NaN +ddintx123 tointegralx sNaN -> NaN Invalid_operation +ddintx124 tointegralx 0 -> 0 +ddintx125 tointegralx -0 -> -0 +ddintx126 tointegralx 0.000 -> 0 +ddintx127 tointegralx 0.00 -> 0 +ddintx128 tointegralx 0.0 -> 0 +ddintx129 tointegralx 0 -> 0 +ddintx130 tointegralx 0E-3 -> 0 +ddintx131 tointegralx 0E-2 -> 0 +ddintx132 tointegralx 0E-1 -> 0 +ddintx133 tointegralx 0E-0 -> 0 +ddintx134 tointegralx 0E+1 -> 0E+1 +ddintx135 tointegralx 0E+2 -> 0E+2 +ddintx136 tointegralx 0E+3 -> 0E+3 +ddintx137 tointegralx 0E+4 -> 0E+4 +ddintx138 tointegralx 0E+5 -> 0E+5 +ddintx139 tointegralx -0.000 -> -0 +ddintx140 tointegralx -0.00 -> -0 +ddintx141 tointegralx -0.0 -> -0 +ddintx142 tointegralx -0 -> -0 +ddintx143 tointegralx -0E-3 -> -0 +ddintx144 tointegralx -0E-2 -> -0 +ddintx145 tointegralx -0E-1 -> -0 +ddintx146 tointegralx -0E-0 -> -0 +ddintx147 tointegralx -0E+1 -> -0E+1 +ddintx148 tointegralx -0E+2 -> -0E+2 +ddintx149 tointegralx -0E+3 -> -0E+3 +ddintx150 tointegralx -0E+4 -> -0E+4 +ddintx151 tointegralx -0E+5 -> -0E+5 +-- propagating NaNs +ddintx152 tointegralx NaN808 -> NaN808 +ddintx153 tointegralx sNaN080 -> NaN80 Invalid_operation +ddintx154 tointegralx -NaN808 -> -NaN808 +ddintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation +ddintx156 tointegralx -NaN -> -NaN +ddintx157 tointegralx -sNaN -> -NaN Invalid_operation + +-- examples +rounding: half_up +ddintx200 tointegralx 2.1 -> 2 Inexact Rounded +ddintx201 tointegralx 100 -> 100 +ddintx202 tointegralx 100.0 -> 100 Rounded +ddintx203 tointegralx 101.5 -> 102 Inexact Rounded +ddintx204 tointegralx -101.5 -> -102 Inexact Rounded +ddintx205 tointegralx 10E+5 -> 1.0E+6 +ddintx206 tointegralx 7.89E+77 -> 7.89E+77 +ddintx207 tointegralx -Inf -> -Infinity + + +-- all rounding modes +rounding: half_even +ddintx210 tointegralx 55.5 -> 56 Inexact Rounded +ddintx211 tointegralx 56.5 -> 56 Inexact Rounded +ddintx212 tointegralx 57.5 -> 58 Inexact Rounded +ddintx213 tointegralx -55.5 -> -56 Inexact Rounded +ddintx214 tointegralx -56.5 -> -56 Inexact Rounded +ddintx215 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_up + +ddintx220 tointegralx 55.5 -> 56 Inexact Rounded +ddintx221 tointegralx 56.5 -> 57 Inexact Rounded +ddintx222 tointegralx 57.5 -> 58 Inexact Rounded +ddintx223 tointegralx -55.5 -> -56 Inexact Rounded +ddintx224 tointegralx -56.5 -> -57 Inexact Rounded +ddintx225 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_down + +ddintx230 tointegralx 55.5 -> 55 Inexact Rounded +ddintx231 tointegralx 56.5 -> 56 Inexact Rounded +ddintx232 tointegralx 57.5 -> 57 Inexact Rounded +ddintx233 tointegralx -55.5 -> -55 Inexact Rounded +ddintx234 tointegralx -56.5 -> -56 Inexact Rounded +ddintx235 tointegralx -57.5 -> -57 Inexact Rounded + +rounding: up + +ddintx240 tointegralx 55.3 -> 56 Inexact Rounded +ddintx241 tointegralx 56.3 -> 57 Inexact Rounded +ddintx242 tointegralx 57.3 -> 58 Inexact Rounded +ddintx243 tointegralx -55.3 -> -56 Inexact Rounded +ddintx244 tointegralx -56.3 -> -57 Inexact Rounded +ddintx245 tointegralx -57.3 -> -58 Inexact Rounded + +rounding: down + +ddintx250 tointegralx 55.7 -> 55 Inexact Rounded +ddintx251 tointegralx 56.7 -> 56 Inexact Rounded +ddintx252 tointegralx 57.7 -> 57 Inexact Rounded +ddintx253 tointegralx -55.7 -> -55 Inexact Rounded +ddintx254 tointegralx -56.7 -> -56 Inexact Rounded +ddintx255 tointegralx -57.7 -> -57 Inexact Rounded + +rounding: ceiling + +ddintx260 tointegralx 55.3 -> 56 Inexact Rounded +ddintx261 tointegralx 56.3 -> 57 Inexact Rounded +ddintx262 tointegralx 57.3 -> 58 Inexact Rounded +ddintx263 tointegralx -55.3 -> -55 Inexact Rounded +ddintx264 tointegralx -56.3 -> -56 Inexact Rounded +ddintx265 tointegralx -57.3 -> -57 Inexact Rounded + +rounding: floor + +ddintx270 tointegralx 55.7 -> 55 Inexact Rounded +ddintx271 tointegralx 56.7 -> 56 Inexact Rounded +ddintx272 tointegralx 57.7 -> 57 Inexact Rounded +ddintx273 tointegralx -55.7 -> -56 Inexact Rounded +ddintx274 tointegralx -56.7 -> -57 Inexact Rounded +ddintx275 tointegralx -57.7 -> -58 Inexact Rounded + +-- Int and uInt32 edge values for testing conversions +ddintx300 tointegralx -2147483646 -> -2147483646 +ddintx301 tointegralx -2147483647 -> -2147483647 +ddintx302 tointegralx -2147483648 -> -2147483648 +ddintx303 tointegralx -2147483649 -> -2147483649 +ddintx304 tointegralx 2147483646 -> 2147483646 +ddintx305 tointegralx 2147483647 -> 2147483647 +ddintx306 tointegralx 2147483648 -> 2147483648 +ddintx307 tointegralx 2147483649 -> 2147483649 +ddintx308 tointegralx 4294967294 -> 4294967294 +ddintx309 tointegralx 4294967295 -> 4294967295 +ddintx310 tointegralx 4294967296 -> 4294967296 +ddintx311 tointegralx 4294967297 -> 4294967297 + diff --git a/Lib/test/decimaltestdata/ddXor.decTest b/Lib/test/decimaltestdata/ddXor.decTest index 131c7eb4b0b..3c55548e5ec 100644 --- a/Lib/test/decimaltestdata/ddXor.decTest +++ b/Lib/test/decimaltestdata/ddXor.decTest @@ -1,337 +1,337 @@ ------------------------------------------------------------------------- --- ddXor.decTest -- digitwise logical XOR for decDoubles -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -precision: 16 -maxExponent: 384 -minExponent: -383 -extended: 1 -clamp: 1 -rounding: half_even - --- Sanity check (truth table) -ddxor001 xor 0 0 -> 0 -ddxor002 xor 0 1 -> 1 -ddxor003 xor 1 0 -> 1 -ddxor004 xor 1 1 -> 0 -ddxor005 xor 1100 1010 -> 110 --- and at msd and msd-1 -ddxor006 xor 0000000000000000 0000000000000000 -> 0 -ddxor007 xor 0000000000000000 1000000000000000 -> 1000000000000000 -ddxor008 xor 1000000000000000 0000000000000000 -> 1000000000000000 -ddxor009 xor 1000000000000000 1000000000000000 -> 0 -ddxor010 xor 0000000000000000 0000000000000000 -> 0 -ddxor011 xor 0000000000000000 0100000000000000 -> 100000000000000 -ddxor012 xor 0100000000000000 0000000000000000 -> 100000000000000 -ddxor013 xor 0100000000000000 0100000000000000 -> 0 - --- Various lengths --- 1234567890123456 1234567890123456 1234567890123456 -ddxor021 xor 1111111110000000 1111111110000000 -> 0 -ddxor022 xor 111111110000000 111111110000000 -> 0 -ddxor023 xor 11111110000000 11111110000000 -> 0 -ddxor024 xor 1111110000000 1111110000000 -> 0 -ddxor025 xor 111110000000 111110000000 -> 0 -ddxor026 xor 11110000000 11110000000 -> 0 -ddxor027 xor 1110000000 1110000000 -> 0 -ddxor028 xor 110000000 110000000 -> 0 -ddxor029 xor 10000000 10000000 -> 0 -ddxor030 xor 1000000 1000000 -> 0 -ddxor031 xor 100000 100000 -> 0 -ddxor032 xor 10000 10000 -> 0 -ddxor033 xor 1000 1000 -> 0 -ddxor034 xor 100 100 -> 0 -ddxor035 xor 10 10 -> 0 -ddxor036 xor 1 1 -> 0 - -ddxor040 xor 111111111 111111111111 -> 111000000000 -ddxor041 xor 11111111 111111111111 -> 111100000000 -ddxor042 xor 11111111 111111111 -> 100000000 -ddxor043 xor 1111111 100000010 -> 101111101 -ddxor044 xor 111111 100000100 -> 100111011 -ddxor045 xor 11111 100001000 -> 100010111 -ddxor046 xor 1111 100010000 -> 100011111 -ddxor047 xor 111 100100000 -> 100100111 -ddxor048 xor 11 101000000 -> 101000011 -ddxor049 xor 1 110000000 -> 110000001 - -ddxor050 xor 1111111111 1 -> 1111111110 -ddxor051 xor 111111111 1 -> 111111110 -ddxor052 xor 11111111 1 -> 11111110 -ddxor053 xor 1111111 1 -> 1111110 -ddxor054 xor 111111 1 -> 111110 -ddxor055 xor 11111 1 -> 11110 -ddxor056 xor 1111 1 -> 1110 -ddxor057 xor 111 1 -> 110 -ddxor058 xor 11 1 -> 10 -ddxor059 xor 1 1 -> 0 - -ddxor060 xor 1111111111 0 -> 1111111111 -ddxor061 xor 111111111 0 -> 111111111 -ddxor062 xor 11111111 0 -> 11111111 -ddxor063 xor 1111111 0 -> 1111111 -ddxor064 xor 111111 0 -> 111111 -ddxor065 xor 11111 0 -> 11111 -ddxor066 xor 1111 0 -> 1111 -ddxor067 xor 111 0 -> 111 -ddxor068 xor 11 0 -> 11 -ddxor069 xor 1 0 -> 1 - -ddxor070 xor 1 1111111111 -> 1111111110 -ddxor071 xor 1 111111111 -> 111111110 -ddxor072 xor 1 11111111 -> 11111110 -ddxor073 xor 1 1111111 -> 1111110 -ddxor074 xor 1 111111 -> 111110 -ddxor075 xor 1 11111 -> 11110 -ddxor076 xor 1 1111 -> 1110 -ddxor077 xor 1 111 -> 110 -ddxor078 xor 1 11 -> 10 -ddxor079 xor 1 1 -> 0 - -ddxor080 xor 0 1111111111 -> 1111111111 -ddxor081 xor 0 111111111 -> 111111111 -ddxor082 xor 0 11111111 -> 11111111 -ddxor083 xor 0 1111111 -> 1111111 -ddxor084 xor 0 111111 -> 111111 -ddxor085 xor 0 11111 -> 11111 -ddxor086 xor 0 1111 -> 1111 -ddxor087 xor 0 111 -> 111 -ddxor088 xor 0 11 -> 11 -ddxor089 xor 0 1 -> 1 - -ddxor090 xor 011111111 111101111 -> 100010000 -ddxor091 xor 101111111 111101111 -> 10010000 -ddxor092 xor 110111111 111101111 -> 1010000 -ddxor093 xor 111011111 111101111 -> 110000 -ddxor094 xor 111101111 111101111 -> 0 -ddxor095 xor 111110111 111101111 -> 11000 -ddxor096 xor 111111011 111101111 -> 10100 -ddxor097 xor 111111101 111101111 -> 10010 -ddxor098 xor 111111110 111101111 -> 10001 - -ddxor100 xor 111101111 011111111 -> 100010000 -ddxor101 xor 111101111 101111111 -> 10010000 -ddxor102 xor 111101111 110111111 -> 1010000 -ddxor103 xor 111101111 111011111 -> 110000 -ddxor104 xor 111101111 111101111 -> 0 -ddxor105 xor 111101111 111110111 -> 11000 -ddxor106 xor 111101111 111111011 -> 10100 -ddxor107 xor 111101111 111111101 -> 10010 -ddxor108 xor 111101111 111111110 -> 10001 - --- non-0/1 should not be accepted, nor should signs -ddxor220 xor 111111112 111111111 -> NaN Invalid_operation -ddxor221 xor 333333333 333333333 -> NaN Invalid_operation -ddxor222 xor 555555555 555555555 -> NaN Invalid_operation -ddxor223 xor 777777777 777777777 -> NaN Invalid_operation -ddxor224 xor 999999999 999999999 -> NaN Invalid_operation -ddxor225 xor 222222222 999999999 -> NaN Invalid_operation -ddxor226 xor 444444444 999999999 -> NaN Invalid_operation -ddxor227 xor 666666666 999999999 -> NaN Invalid_operation -ddxor228 xor 888888888 999999999 -> NaN Invalid_operation -ddxor229 xor 999999999 222222222 -> NaN Invalid_operation -ddxor230 xor 999999999 444444444 -> NaN Invalid_operation -ddxor231 xor 999999999 666666666 -> NaN Invalid_operation -ddxor232 xor 999999999 888888888 -> NaN Invalid_operation --- a few randoms -ddxor240 xor 567468689 -934981942 -> NaN Invalid_operation -ddxor241 xor 567367689 934981942 -> NaN Invalid_operation -ddxor242 xor -631917772 -706014634 -> NaN Invalid_operation -ddxor243 xor -756253257 138579234 -> NaN Invalid_operation -ddxor244 xor 835590149 567435400 -> NaN Invalid_operation --- test MSD -ddxor250 xor 2000000000000000 1000000000000000 -> NaN Invalid_operation -ddxor251 xor 7000000000000000 1000000000000000 -> NaN Invalid_operation -ddxor252 xor 8000000000000000 1000000000000000 -> NaN Invalid_operation -ddxor253 xor 9000000000000000 1000000000000000 -> NaN Invalid_operation -ddxor254 xor 2000000000000000 0000000000000000 -> NaN Invalid_operation -ddxor255 xor 7000000000000000 0000000000000000 -> NaN Invalid_operation -ddxor256 xor 8000000000000000 0000000000000000 -> NaN Invalid_operation -ddxor257 xor 9000000000000000 0000000000000000 -> NaN Invalid_operation -ddxor258 xor 1000000000000000 2000000000000000 -> NaN Invalid_operation -ddxor259 xor 1000000000000000 7000000000000000 -> NaN Invalid_operation -ddxor260 xor 1000000000000000 8000000000000000 -> NaN Invalid_operation -ddxor261 xor 1000000000000000 9000000000000000 -> NaN Invalid_operation -ddxor262 xor 0000000000000000 2000000000000000 -> NaN Invalid_operation -ddxor263 xor 0000000000000000 7000000000000000 -> NaN Invalid_operation -ddxor264 xor 0000000000000000 8000000000000000 -> NaN Invalid_operation -ddxor265 xor 0000000000000000 9000000000000000 -> NaN Invalid_operation --- test MSD-1 -ddxor270 xor 0200001000000000 1000100000000010 -> NaN Invalid_operation -ddxor271 xor 0700000100000000 1000010000000100 -> NaN Invalid_operation -ddxor272 xor 0800000010000000 1000001000001000 -> NaN Invalid_operation -ddxor273 xor 0900000001000000 1000000100010000 -> NaN Invalid_operation -ddxor274 xor 1000000000100000 0200000010100000 -> NaN Invalid_operation -ddxor275 xor 1000000000010000 0700000001000000 -> NaN Invalid_operation -ddxor276 xor 1000000000001000 0800000010100000 -> NaN Invalid_operation -ddxor277 xor 1000000000000100 0900000000010000 -> NaN Invalid_operation --- test LSD -ddxor280 xor 0010000000000002 1000000100000001 -> NaN Invalid_operation -ddxor281 xor 0001000000000007 1000001000000011 -> NaN Invalid_operation -ddxor282 xor 0000100000000008 1000010000000001 -> NaN Invalid_operation -ddxor283 xor 0000010000000009 1000100000000001 -> NaN Invalid_operation -ddxor284 xor 1000001000000000 0001000000000002 -> NaN Invalid_operation -ddxor285 xor 1000000100000000 0010000000000007 -> NaN Invalid_operation -ddxor286 xor 1000000010000000 0100000000000008 -> NaN Invalid_operation -ddxor287 xor 1000000001000000 1000000000000009 -> NaN Invalid_operation --- test Middie -ddxor288 xor 0010000020000000 1000001000000000 -> NaN Invalid_operation -ddxor289 xor 0001000070000001 1000000100000000 -> NaN Invalid_operation -ddxor290 xor 0000100080000010 1000000010000000 -> NaN Invalid_operation -ddxor291 xor 0000010090000100 1000000001000000 -> NaN Invalid_operation -ddxor292 xor 1000001000001000 0000000020100000 -> NaN Invalid_operation -ddxor293 xor 1000000100010000 0000000070010000 -> NaN Invalid_operation -ddxor294 xor 1000000010100000 0000000080001000 -> NaN Invalid_operation -ddxor295 xor 1000000001000000 0000000090000100 -> NaN Invalid_operation --- signs -ddxor296 xor -1000000001000000 -0000010000000100 -> NaN Invalid_operation -ddxor297 xor -1000000001000000 0000000010000100 -> NaN Invalid_operation -ddxor298 xor 1000000001000000 -0000001000000100 -> NaN Invalid_operation -ddxor299 xor 1000000001000000 0000000011000100 -> 1000000010000100 - --- Nmax, Nmin, Ntiny-like -ddxor331 xor 2 9.99999999E+299 -> NaN Invalid_operation -ddxor332 xor 3 1E-299 -> NaN Invalid_operation -ddxor333 xor 4 1.00000000E-299 -> NaN Invalid_operation -ddxor334 xor 5 1E-200 -> NaN Invalid_operation -ddxor335 xor 6 -1E-200 -> NaN Invalid_operation -ddxor336 xor 7 -1.00000000E-299 -> NaN Invalid_operation -ddxor337 xor 8 -1E-299 -> NaN Invalid_operation -ddxor338 xor 9 -9.99999999E+299 -> NaN Invalid_operation -ddxor341 xor 9.99999999E+299 -18 -> NaN Invalid_operation -ddxor342 xor 1E-299 01 -> NaN Invalid_operation -ddxor343 xor 1.00000000E-299 -18 -> NaN Invalid_operation -ddxor344 xor 1E-208 18 -> NaN Invalid_operation -ddxor345 xor -1E-207 -10 -> NaN Invalid_operation -ddxor346 xor -1.00000000E-299 18 -> NaN Invalid_operation -ddxor347 xor -1E-299 10 -> NaN Invalid_operation -ddxor348 xor -9.99999999E+299 -18 -> NaN Invalid_operation - --- A few other non-integers -ddxor361 xor 1.0 1 -> NaN Invalid_operation -ddxor362 xor 1E+1 1 -> NaN Invalid_operation -ddxor363 xor 0.0 1 -> NaN Invalid_operation -ddxor364 xor 0E+1 1 -> NaN Invalid_operation -ddxor365 xor 9.9 1 -> NaN Invalid_operation -ddxor366 xor 9E+1 1 -> NaN Invalid_operation -ddxor371 xor 0 1.0 -> NaN Invalid_operation -ddxor372 xor 0 1E+1 -> NaN Invalid_operation -ddxor373 xor 0 0.0 -> NaN Invalid_operation -ddxor374 xor 0 0E+1 -> NaN Invalid_operation -ddxor375 xor 0 9.9 -> NaN Invalid_operation -ddxor376 xor 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -ddxor780 xor -Inf -Inf -> NaN Invalid_operation -ddxor781 xor -Inf -1000 -> NaN Invalid_operation -ddxor782 xor -Inf -1 -> NaN Invalid_operation -ddxor783 xor -Inf -0 -> NaN Invalid_operation -ddxor784 xor -Inf 0 -> NaN Invalid_operation -ddxor785 xor -Inf 1 -> NaN Invalid_operation -ddxor786 xor -Inf 1000 -> NaN Invalid_operation -ddxor787 xor -1000 -Inf -> NaN Invalid_operation -ddxor788 xor -Inf -Inf -> NaN Invalid_operation -ddxor789 xor -1 -Inf -> NaN Invalid_operation -ddxor790 xor -0 -Inf -> NaN Invalid_operation -ddxor791 xor 0 -Inf -> NaN Invalid_operation -ddxor792 xor 1 -Inf -> NaN Invalid_operation -ddxor793 xor 1000 -Inf -> NaN Invalid_operation -ddxor794 xor Inf -Inf -> NaN Invalid_operation - -ddxor800 xor Inf -Inf -> NaN Invalid_operation -ddxor801 xor Inf -1000 -> NaN Invalid_operation -ddxor802 xor Inf -1 -> NaN Invalid_operation -ddxor803 xor Inf -0 -> NaN Invalid_operation -ddxor804 xor Inf 0 -> NaN Invalid_operation -ddxor805 xor Inf 1 -> NaN Invalid_operation -ddxor806 xor Inf 1000 -> NaN Invalid_operation -ddxor807 xor Inf Inf -> NaN Invalid_operation -ddxor808 xor -1000 Inf -> NaN Invalid_operation -ddxor809 xor -Inf Inf -> NaN Invalid_operation -ddxor810 xor -1 Inf -> NaN Invalid_operation -ddxor811 xor -0 Inf -> NaN Invalid_operation -ddxor812 xor 0 Inf -> NaN Invalid_operation -ddxor813 xor 1 Inf -> NaN Invalid_operation -ddxor814 xor 1000 Inf -> NaN Invalid_operation -ddxor815 xor Inf Inf -> NaN Invalid_operation - -ddxor821 xor NaN -Inf -> NaN Invalid_operation -ddxor822 xor NaN -1000 -> NaN Invalid_operation -ddxor823 xor NaN -1 -> NaN Invalid_operation -ddxor824 xor NaN -0 -> NaN Invalid_operation -ddxor825 xor NaN 0 -> NaN Invalid_operation -ddxor826 xor NaN 1 -> NaN Invalid_operation -ddxor827 xor NaN 1000 -> NaN Invalid_operation -ddxor828 xor NaN Inf -> NaN Invalid_operation -ddxor829 xor NaN NaN -> NaN Invalid_operation -ddxor830 xor -Inf NaN -> NaN Invalid_operation -ddxor831 xor -1000 NaN -> NaN Invalid_operation -ddxor832 xor -1 NaN -> NaN Invalid_operation -ddxor833 xor -0 NaN -> NaN Invalid_operation -ddxor834 xor 0 NaN -> NaN Invalid_operation -ddxor835 xor 1 NaN -> NaN Invalid_operation -ddxor836 xor 1000 NaN -> NaN Invalid_operation -ddxor837 xor Inf NaN -> NaN Invalid_operation - -ddxor841 xor sNaN -Inf -> NaN Invalid_operation -ddxor842 xor sNaN -1000 -> NaN Invalid_operation -ddxor843 xor sNaN -1 -> NaN Invalid_operation -ddxor844 xor sNaN -0 -> NaN Invalid_operation -ddxor845 xor sNaN 0 -> NaN Invalid_operation -ddxor846 xor sNaN 1 -> NaN Invalid_operation -ddxor847 xor sNaN 1000 -> NaN Invalid_operation -ddxor848 xor sNaN NaN -> NaN Invalid_operation -ddxor849 xor sNaN sNaN -> NaN Invalid_operation -ddxor850 xor NaN sNaN -> NaN Invalid_operation -ddxor851 xor -Inf sNaN -> NaN Invalid_operation -ddxor852 xor -1000 sNaN -> NaN Invalid_operation -ddxor853 xor -1 sNaN -> NaN Invalid_operation -ddxor854 xor -0 sNaN -> NaN Invalid_operation -ddxor855 xor 0 sNaN -> NaN Invalid_operation -ddxor856 xor 1 sNaN -> NaN Invalid_operation -ddxor857 xor 1000 sNaN -> NaN Invalid_operation -ddxor858 xor Inf sNaN -> NaN Invalid_operation -ddxor859 xor NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -ddxor861 xor NaN1 -Inf -> NaN Invalid_operation -ddxor862 xor +NaN2 -1000 -> NaN Invalid_operation -ddxor863 xor NaN3 1000 -> NaN Invalid_operation -ddxor864 xor NaN4 Inf -> NaN Invalid_operation -ddxor865 xor NaN5 +NaN6 -> NaN Invalid_operation -ddxor866 xor -Inf NaN7 -> NaN Invalid_operation -ddxor867 xor -1000 NaN8 -> NaN Invalid_operation -ddxor868 xor 1000 NaN9 -> NaN Invalid_operation -ddxor869 xor Inf +NaN10 -> NaN Invalid_operation -ddxor871 xor sNaN11 -Inf -> NaN Invalid_operation -ddxor872 xor sNaN12 -1000 -> NaN Invalid_operation -ddxor873 xor sNaN13 1000 -> NaN Invalid_operation -ddxor874 xor sNaN14 NaN17 -> NaN Invalid_operation -ddxor875 xor sNaN15 sNaN18 -> NaN Invalid_operation -ddxor876 xor NaN16 sNaN19 -> NaN Invalid_operation -ddxor877 xor -Inf +sNaN20 -> NaN Invalid_operation -ddxor878 xor -1000 sNaN21 -> NaN Invalid_operation -ddxor879 xor 1000 sNaN22 -> NaN Invalid_operation -ddxor880 xor Inf sNaN23 -> NaN Invalid_operation -ddxor881 xor +NaN25 +sNaN24 -> NaN Invalid_operation -ddxor882 xor -NaN26 NaN28 -> NaN Invalid_operation -ddxor883 xor -sNaN27 sNaN29 -> NaN Invalid_operation -ddxor884 xor 1000 -NaN30 -> NaN Invalid_operation -ddxor885 xor 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- ddXor.decTest -- digitwise logical XOR for decDoubles -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +precision: 16 +maxExponent: 384 +minExponent: -383 +extended: 1 +clamp: 1 +rounding: half_even + +-- Sanity check (truth table) +ddxor001 xor 0 0 -> 0 +ddxor002 xor 0 1 -> 1 +ddxor003 xor 1 0 -> 1 +ddxor004 xor 1 1 -> 0 +ddxor005 xor 1100 1010 -> 110 +-- and at msd and msd-1 +ddxor006 xor 0000000000000000 0000000000000000 -> 0 +ddxor007 xor 0000000000000000 1000000000000000 -> 1000000000000000 +ddxor008 xor 1000000000000000 0000000000000000 -> 1000000000000000 +ddxor009 xor 1000000000000000 1000000000000000 -> 0 +ddxor010 xor 0000000000000000 0000000000000000 -> 0 +ddxor011 xor 0000000000000000 0100000000000000 -> 100000000000000 +ddxor012 xor 0100000000000000 0000000000000000 -> 100000000000000 +ddxor013 xor 0100000000000000 0100000000000000 -> 0 + +-- Various lengths +-- 1234567890123456 1234567890123456 1234567890123456 +ddxor021 xor 1111111110000000 1111111110000000 -> 0 +ddxor022 xor 111111110000000 111111110000000 -> 0 +ddxor023 xor 11111110000000 11111110000000 -> 0 +ddxor024 xor 1111110000000 1111110000000 -> 0 +ddxor025 xor 111110000000 111110000000 -> 0 +ddxor026 xor 11110000000 11110000000 -> 0 +ddxor027 xor 1110000000 1110000000 -> 0 +ddxor028 xor 110000000 110000000 -> 0 +ddxor029 xor 10000000 10000000 -> 0 +ddxor030 xor 1000000 1000000 -> 0 +ddxor031 xor 100000 100000 -> 0 +ddxor032 xor 10000 10000 -> 0 +ddxor033 xor 1000 1000 -> 0 +ddxor034 xor 100 100 -> 0 +ddxor035 xor 10 10 -> 0 +ddxor036 xor 1 1 -> 0 + +ddxor040 xor 111111111 111111111111 -> 111000000000 +ddxor041 xor 11111111 111111111111 -> 111100000000 +ddxor042 xor 11111111 111111111 -> 100000000 +ddxor043 xor 1111111 100000010 -> 101111101 +ddxor044 xor 111111 100000100 -> 100111011 +ddxor045 xor 11111 100001000 -> 100010111 +ddxor046 xor 1111 100010000 -> 100011111 +ddxor047 xor 111 100100000 -> 100100111 +ddxor048 xor 11 101000000 -> 101000011 +ddxor049 xor 1 110000000 -> 110000001 + +ddxor050 xor 1111111111 1 -> 1111111110 +ddxor051 xor 111111111 1 -> 111111110 +ddxor052 xor 11111111 1 -> 11111110 +ddxor053 xor 1111111 1 -> 1111110 +ddxor054 xor 111111 1 -> 111110 +ddxor055 xor 11111 1 -> 11110 +ddxor056 xor 1111 1 -> 1110 +ddxor057 xor 111 1 -> 110 +ddxor058 xor 11 1 -> 10 +ddxor059 xor 1 1 -> 0 + +ddxor060 xor 1111111111 0 -> 1111111111 +ddxor061 xor 111111111 0 -> 111111111 +ddxor062 xor 11111111 0 -> 11111111 +ddxor063 xor 1111111 0 -> 1111111 +ddxor064 xor 111111 0 -> 111111 +ddxor065 xor 11111 0 -> 11111 +ddxor066 xor 1111 0 -> 1111 +ddxor067 xor 111 0 -> 111 +ddxor068 xor 11 0 -> 11 +ddxor069 xor 1 0 -> 1 + +ddxor070 xor 1 1111111111 -> 1111111110 +ddxor071 xor 1 111111111 -> 111111110 +ddxor072 xor 1 11111111 -> 11111110 +ddxor073 xor 1 1111111 -> 1111110 +ddxor074 xor 1 111111 -> 111110 +ddxor075 xor 1 11111 -> 11110 +ddxor076 xor 1 1111 -> 1110 +ddxor077 xor 1 111 -> 110 +ddxor078 xor 1 11 -> 10 +ddxor079 xor 1 1 -> 0 + +ddxor080 xor 0 1111111111 -> 1111111111 +ddxor081 xor 0 111111111 -> 111111111 +ddxor082 xor 0 11111111 -> 11111111 +ddxor083 xor 0 1111111 -> 1111111 +ddxor084 xor 0 111111 -> 111111 +ddxor085 xor 0 11111 -> 11111 +ddxor086 xor 0 1111 -> 1111 +ddxor087 xor 0 111 -> 111 +ddxor088 xor 0 11 -> 11 +ddxor089 xor 0 1 -> 1 + +ddxor090 xor 011111111 111101111 -> 100010000 +ddxor091 xor 101111111 111101111 -> 10010000 +ddxor092 xor 110111111 111101111 -> 1010000 +ddxor093 xor 111011111 111101111 -> 110000 +ddxor094 xor 111101111 111101111 -> 0 +ddxor095 xor 111110111 111101111 -> 11000 +ddxor096 xor 111111011 111101111 -> 10100 +ddxor097 xor 111111101 111101111 -> 10010 +ddxor098 xor 111111110 111101111 -> 10001 + +ddxor100 xor 111101111 011111111 -> 100010000 +ddxor101 xor 111101111 101111111 -> 10010000 +ddxor102 xor 111101111 110111111 -> 1010000 +ddxor103 xor 111101111 111011111 -> 110000 +ddxor104 xor 111101111 111101111 -> 0 +ddxor105 xor 111101111 111110111 -> 11000 +ddxor106 xor 111101111 111111011 -> 10100 +ddxor107 xor 111101111 111111101 -> 10010 +ddxor108 xor 111101111 111111110 -> 10001 + +-- non-0/1 should not be accepted, nor should signs +ddxor220 xor 111111112 111111111 -> NaN Invalid_operation +ddxor221 xor 333333333 333333333 -> NaN Invalid_operation +ddxor222 xor 555555555 555555555 -> NaN Invalid_operation +ddxor223 xor 777777777 777777777 -> NaN Invalid_operation +ddxor224 xor 999999999 999999999 -> NaN Invalid_operation +ddxor225 xor 222222222 999999999 -> NaN Invalid_operation +ddxor226 xor 444444444 999999999 -> NaN Invalid_operation +ddxor227 xor 666666666 999999999 -> NaN Invalid_operation +ddxor228 xor 888888888 999999999 -> NaN Invalid_operation +ddxor229 xor 999999999 222222222 -> NaN Invalid_operation +ddxor230 xor 999999999 444444444 -> NaN Invalid_operation +ddxor231 xor 999999999 666666666 -> NaN Invalid_operation +ddxor232 xor 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +ddxor240 xor 567468689 -934981942 -> NaN Invalid_operation +ddxor241 xor 567367689 934981942 -> NaN Invalid_operation +ddxor242 xor -631917772 -706014634 -> NaN Invalid_operation +ddxor243 xor -756253257 138579234 -> NaN Invalid_operation +ddxor244 xor 835590149 567435400 -> NaN Invalid_operation +-- test MSD +ddxor250 xor 2000000000000000 1000000000000000 -> NaN Invalid_operation +ddxor251 xor 7000000000000000 1000000000000000 -> NaN Invalid_operation +ddxor252 xor 8000000000000000 1000000000000000 -> NaN Invalid_operation +ddxor253 xor 9000000000000000 1000000000000000 -> NaN Invalid_operation +ddxor254 xor 2000000000000000 0000000000000000 -> NaN Invalid_operation +ddxor255 xor 7000000000000000 0000000000000000 -> NaN Invalid_operation +ddxor256 xor 8000000000000000 0000000000000000 -> NaN Invalid_operation +ddxor257 xor 9000000000000000 0000000000000000 -> NaN Invalid_operation +ddxor258 xor 1000000000000000 2000000000000000 -> NaN Invalid_operation +ddxor259 xor 1000000000000000 7000000000000000 -> NaN Invalid_operation +ddxor260 xor 1000000000000000 8000000000000000 -> NaN Invalid_operation +ddxor261 xor 1000000000000000 9000000000000000 -> NaN Invalid_operation +ddxor262 xor 0000000000000000 2000000000000000 -> NaN Invalid_operation +ddxor263 xor 0000000000000000 7000000000000000 -> NaN Invalid_operation +ddxor264 xor 0000000000000000 8000000000000000 -> NaN Invalid_operation +ddxor265 xor 0000000000000000 9000000000000000 -> NaN Invalid_operation +-- test MSD-1 +ddxor270 xor 0200001000000000 1000100000000010 -> NaN Invalid_operation +ddxor271 xor 0700000100000000 1000010000000100 -> NaN Invalid_operation +ddxor272 xor 0800000010000000 1000001000001000 -> NaN Invalid_operation +ddxor273 xor 0900000001000000 1000000100010000 -> NaN Invalid_operation +ddxor274 xor 1000000000100000 0200000010100000 -> NaN Invalid_operation +ddxor275 xor 1000000000010000 0700000001000000 -> NaN Invalid_operation +ddxor276 xor 1000000000001000 0800000010100000 -> NaN Invalid_operation +ddxor277 xor 1000000000000100 0900000000010000 -> NaN Invalid_operation +-- test LSD +ddxor280 xor 0010000000000002 1000000100000001 -> NaN Invalid_operation +ddxor281 xor 0001000000000007 1000001000000011 -> NaN Invalid_operation +ddxor282 xor 0000100000000008 1000010000000001 -> NaN Invalid_operation +ddxor283 xor 0000010000000009 1000100000000001 -> NaN Invalid_operation +ddxor284 xor 1000001000000000 0001000000000002 -> NaN Invalid_operation +ddxor285 xor 1000000100000000 0010000000000007 -> NaN Invalid_operation +ddxor286 xor 1000000010000000 0100000000000008 -> NaN Invalid_operation +ddxor287 xor 1000000001000000 1000000000000009 -> NaN Invalid_operation +-- test Middie +ddxor288 xor 0010000020000000 1000001000000000 -> NaN Invalid_operation +ddxor289 xor 0001000070000001 1000000100000000 -> NaN Invalid_operation +ddxor290 xor 0000100080000010 1000000010000000 -> NaN Invalid_operation +ddxor291 xor 0000010090000100 1000000001000000 -> NaN Invalid_operation +ddxor292 xor 1000001000001000 0000000020100000 -> NaN Invalid_operation +ddxor293 xor 1000000100010000 0000000070010000 -> NaN Invalid_operation +ddxor294 xor 1000000010100000 0000000080001000 -> NaN Invalid_operation +ddxor295 xor 1000000001000000 0000000090000100 -> NaN Invalid_operation +-- signs +ddxor296 xor -1000000001000000 -0000010000000100 -> NaN Invalid_operation +ddxor297 xor -1000000001000000 0000000010000100 -> NaN Invalid_operation +ddxor298 xor 1000000001000000 -0000001000000100 -> NaN Invalid_operation +ddxor299 xor 1000000001000000 0000000011000100 -> 1000000010000100 + +-- Nmax, Nmin, Ntiny-like +ddxor331 xor 2 9.99999999E+299 -> NaN Invalid_operation +ddxor332 xor 3 1E-299 -> NaN Invalid_operation +ddxor333 xor 4 1.00000000E-299 -> NaN Invalid_operation +ddxor334 xor 5 1E-200 -> NaN Invalid_operation +ddxor335 xor 6 -1E-200 -> NaN Invalid_operation +ddxor336 xor 7 -1.00000000E-299 -> NaN Invalid_operation +ddxor337 xor 8 -1E-299 -> NaN Invalid_operation +ddxor338 xor 9 -9.99999999E+299 -> NaN Invalid_operation +ddxor341 xor 9.99999999E+299 -18 -> NaN Invalid_operation +ddxor342 xor 1E-299 01 -> NaN Invalid_operation +ddxor343 xor 1.00000000E-299 -18 -> NaN Invalid_operation +ddxor344 xor 1E-208 18 -> NaN Invalid_operation +ddxor345 xor -1E-207 -10 -> NaN Invalid_operation +ddxor346 xor -1.00000000E-299 18 -> NaN Invalid_operation +ddxor347 xor -1E-299 10 -> NaN Invalid_operation +ddxor348 xor -9.99999999E+299 -18 -> NaN Invalid_operation + +-- A few other non-integers +ddxor361 xor 1.0 1 -> NaN Invalid_operation +ddxor362 xor 1E+1 1 -> NaN Invalid_operation +ddxor363 xor 0.0 1 -> NaN Invalid_operation +ddxor364 xor 0E+1 1 -> NaN Invalid_operation +ddxor365 xor 9.9 1 -> NaN Invalid_operation +ddxor366 xor 9E+1 1 -> NaN Invalid_operation +ddxor371 xor 0 1.0 -> NaN Invalid_operation +ddxor372 xor 0 1E+1 -> NaN Invalid_operation +ddxor373 xor 0 0.0 -> NaN Invalid_operation +ddxor374 xor 0 0E+1 -> NaN Invalid_operation +ddxor375 xor 0 9.9 -> NaN Invalid_operation +ddxor376 xor 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +ddxor780 xor -Inf -Inf -> NaN Invalid_operation +ddxor781 xor -Inf -1000 -> NaN Invalid_operation +ddxor782 xor -Inf -1 -> NaN Invalid_operation +ddxor783 xor -Inf -0 -> NaN Invalid_operation +ddxor784 xor -Inf 0 -> NaN Invalid_operation +ddxor785 xor -Inf 1 -> NaN Invalid_operation +ddxor786 xor -Inf 1000 -> NaN Invalid_operation +ddxor787 xor -1000 -Inf -> NaN Invalid_operation +ddxor788 xor -Inf -Inf -> NaN Invalid_operation +ddxor789 xor -1 -Inf -> NaN Invalid_operation +ddxor790 xor -0 -Inf -> NaN Invalid_operation +ddxor791 xor 0 -Inf -> NaN Invalid_operation +ddxor792 xor 1 -Inf -> NaN Invalid_operation +ddxor793 xor 1000 -Inf -> NaN Invalid_operation +ddxor794 xor Inf -Inf -> NaN Invalid_operation + +ddxor800 xor Inf -Inf -> NaN Invalid_operation +ddxor801 xor Inf -1000 -> NaN Invalid_operation +ddxor802 xor Inf -1 -> NaN Invalid_operation +ddxor803 xor Inf -0 -> NaN Invalid_operation +ddxor804 xor Inf 0 -> NaN Invalid_operation +ddxor805 xor Inf 1 -> NaN Invalid_operation +ddxor806 xor Inf 1000 -> NaN Invalid_operation +ddxor807 xor Inf Inf -> NaN Invalid_operation +ddxor808 xor -1000 Inf -> NaN Invalid_operation +ddxor809 xor -Inf Inf -> NaN Invalid_operation +ddxor810 xor -1 Inf -> NaN Invalid_operation +ddxor811 xor -0 Inf -> NaN Invalid_operation +ddxor812 xor 0 Inf -> NaN Invalid_operation +ddxor813 xor 1 Inf -> NaN Invalid_operation +ddxor814 xor 1000 Inf -> NaN Invalid_operation +ddxor815 xor Inf Inf -> NaN Invalid_operation + +ddxor821 xor NaN -Inf -> NaN Invalid_operation +ddxor822 xor NaN -1000 -> NaN Invalid_operation +ddxor823 xor NaN -1 -> NaN Invalid_operation +ddxor824 xor NaN -0 -> NaN Invalid_operation +ddxor825 xor NaN 0 -> NaN Invalid_operation +ddxor826 xor NaN 1 -> NaN Invalid_operation +ddxor827 xor NaN 1000 -> NaN Invalid_operation +ddxor828 xor NaN Inf -> NaN Invalid_operation +ddxor829 xor NaN NaN -> NaN Invalid_operation +ddxor830 xor -Inf NaN -> NaN Invalid_operation +ddxor831 xor -1000 NaN -> NaN Invalid_operation +ddxor832 xor -1 NaN -> NaN Invalid_operation +ddxor833 xor -0 NaN -> NaN Invalid_operation +ddxor834 xor 0 NaN -> NaN Invalid_operation +ddxor835 xor 1 NaN -> NaN Invalid_operation +ddxor836 xor 1000 NaN -> NaN Invalid_operation +ddxor837 xor Inf NaN -> NaN Invalid_operation + +ddxor841 xor sNaN -Inf -> NaN Invalid_operation +ddxor842 xor sNaN -1000 -> NaN Invalid_operation +ddxor843 xor sNaN -1 -> NaN Invalid_operation +ddxor844 xor sNaN -0 -> NaN Invalid_operation +ddxor845 xor sNaN 0 -> NaN Invalid_operation +ddxor846 xor sNaN 1 -> NaN Invalid_operation +ddxor847 xor sNaN 1000 -> NaN Invalid_operation +ddxor848 xor sNaN NaN -> NaN Invalid_operation +ddxor849 xor sNaN sNaN -> NaN Invalid_operation +ddxor850 xor NaN sNaN -> NaN Invalid_operation +ddxor851 xor -Inf sNaN -> NaN Invalid_operation +ddxor852 xor -1000 sNaN -> NaN Invalid_operation +ddxor853 xor -1 sNaN -> NaN Invalid_operation +ddxor854 xor -0 sNaN -> NaN Invalid_operation +ddxor855 xor 0 sNaN -> NaN Invalid_operation +ddxor856 xor 1 sNaN -> NaN Invalid_operation +ddxor857 xor 1000 sNaN -> NaN Invalid_operation +ddxor858 xor Inf sNaN -> NaN Invalid_operation +ddxor859 xor NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +ddxor861 xor NaN1 -Inf -> NaN Invalid_operation +ddxor862 xor +NaN2 -1000 -> NaN Invalid_operation +ddxor863 xor NaN3 1000 -> NaN Invalid_operation +ddxor864 xor NaN4 Inf -> NaN Invalid_operation +ddxor865 xor NaN5 +NaN6 -> NaN Invalid_operation +ddxor866 xor -Inf NaN7 -> NaN Invalid_operation +ddxor867 xor -1000 NaN8 -> NaN Invalid_operation +ddxor868 xor 1000 NaN9 -> NaN Invalid_operation +ddxor869 xor Inf +NaN10 -> NaN Invalid_operation +ddxor871 xor sNaN11 -Inf -> NaN Invalid_operation +ddxor872 xor sNaN12 -1000 -> NaN Invalid_operation +ddxor873 xor sNaN13 1000 -> NaN Invalid_operation +ddxor874 xor sNaN14 NaN17 -> NaN Invalid_operation +ddxor875 xor sNaN15 sNaN18 -> NaN Invalid_operation +ddxor876 xor NaN16 sNaN19 -> NaN Invalid_operation +ddxor877 xor -Inf +sNaN20 -> NaN Invalid_operation +ddxor878 xor -1000 sNaN21 -> NaN Invalid_operation +ddxor879 xor 1000 sNaN22 -> NaN Invalid_operation +ddxor880 xor Inf sNaN23 -> NaN Invalid_operation +ddxor881 xor +NaN25 +sNaN24 -> NaN Invalid_operation +ddxor882 xor -NaN26 NaN28 -> NaN Invalid_operation +ddxor883 xor -sNaN27 sNaN29 -> NaN Invalid_operation +ddxor884 xor 1000 -NaN30 -> NaN Invalid_operation +ddxor885 xor 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqAbs.decTest b/Lib/test/decimaltestdata/dqAbs.decTest index baaa063bbc8..f9119a9e79c 100644 --- a/Lib/test/decimaltestdata/dqAbs.decTest +++ b/Lib/test/decimaltestdata/dqAbs.decTest @@ -1,126 +1,126 @@ ------------------------------------------------------------------------- --- dqAbs.decTest -- decQuad absolute value, heeding sNaN -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqabs001 abs '1' -> '1' -dqabs002 abs '-1' -> '1' -dqabs003 abs '1.00' -> '1.00' -dqabs004 abs '-1.00' -> '1.00' -dqabs005 abs '0' -> '0' -dqabs006 abs '0.00' -> '0.00' -dqabs007 abs '00.0' -> '0.0' -dqabs008 abs '00.00' -> '0.00' -dqabs009 abs '00' -> '0' - -dqabs010 abs '-2' -> '2' -dqabs011 abs '2' -> '2' -dqabs012 abs '-2.00' -> '2.00' -dqabs013 abs '2.00' -> '2.00' -dqabs014 abs '-0' -> '0' -dqabs015 abs '-0.00' -> '0.00' -dqabs016 abs '-00.0' -> '0.0' -dqabs017 abs '-00.00' -> '0.00' -dqabs018 abs '-00' -> '0' - -dqabs020 abs '-2000000' -> '2000000' -dqabs021 abs '2000000' -> '2000000' - -dqabs030 abs '+0.1' -> '0.1' -dqabs031 abs '-0.1' -> '0.1' -dqabs032 abs '+0.01' -> '0.01' -dqabs033 abs '-0.01' -> '0.01' -dqabs034 abs '+0.001' -> '0.001' -dqabs035 abs '-0.001' -> '0.001' -dqabs036 abs '+0.000001' -> '0.000001' -dqabs037 abs '-0.000001' -> '0.000001' -dqabs038 abs '+0.000000000001' -> '1E-12' -dqabs039 abs '-0.000000000001' -> '1E-12' - --- examples from decArith -dqabs040 abs '2.1' -> '2.1' -dqabs041 abs '-100' -> '100' -dqabs042 abs '101.5' -> '101.5' -dqabs043 abs '-101.5' -> '101.5' - --- more fixed, potential LHS swaps/overlays if done by subtract 0 -dqabs060 abs '-56267E-10' -> '0.0000056267' -dqabs061 abs '-56267E-5' -> '0.56267' -dqabs062 abs '-56267E-2' -> '562.67' -dqabs063 abs '-56267E-1' -> '5626.7' -dqabs065 abs '-56267E-0' -> '56267' - --- subnormals and underflow - --- long operand tests -dqabs321 abs 1234567890123456 -> 1234567890123456 -dqabs322 abs 12345678000 -> 12345678000 -dqabs323 abs 1234567800 -> 1234567800 -dqabs324 abs 1234567890 -> 1234567890 -dqabs325 abs 1234567891 -> 1234567891 -dqabs326 abs 12345678901 -> 12345678901 -dqabs327 abs 1234567896 -> 1234567896 - --- zeros -dqabs111 abs 0 -> 0 -dqabs112 abs -0 -> 0 -dqabs113 abs 0E+6 -> 0E+6 -dqabs114 abs -0E+6 -> 0E+6 -dqabs115 abs 0.0000 -> 0.0000 -dqabs116 abs -0.0000 -> 0.0000 -dqabs117 abs 0E-141 -> 0E-141 -dqabs118 abs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqabs121 abs 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqabs122 abs -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqabs123 abs 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 -dqabs124 abs -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqabs131 abs 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqabs132 abs 1E-6143 -> 1E-6143 -dqabs133 abs 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqabs134 abs 1E-6176 -> 1E-6176 Subnormal - -dqabs135 abs -1E-6176 -> 1E-6176 Subnormal -dqabs136 abs -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqabs137 abs -1E-6143 -> 1E-6143 -dqabs138 abs -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 - --- specials -dqabs520 abs 'Inf' -> 'Infinity' -dqabs521 abs '-Inf' -> 'Infinity' -dqabs522 abs NaN -> NaN -dqabs523 abs sNaN -> NaN Invalid_operation -dqabs524 abs NaN22 -> NaN22 -dqabs525 abs sNaN33 -> NaN33 Invalid_operation -dqabs526 abs -NaN22 -> -NaN22 -dqabs527 abs -sNaN33 -> -NaN33 Invalid_operation - --- Null tests -dqabs900 abs # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqAbs.decTest -- decQuad absolute value, heeding sNaN -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqabs001 abs '1' -> '1' +dqabs002 abs '-1' -> '1' +dqabs003 abs '1.00' -> '1.00' +dqabs004 abs '-1.00' -> '1.00' +dqabs005 abs '0' -> '0' +dqabs006 abs '0.00' -> '0.00' +dqabs007 abs '00.0' -> '0.0' +dqabs008 abs '00.00' -> '0.00' +dqabs009 abs '00' -> '0' + +dqabs010 abs '-2' -> '2' +dqabs011 abs '2' -> '2' +dqabs012 abs '-2.00' -> '2.00' +dqabs013 abs '2.00' -> '2.00' +dqabs014 abs '-0' -> '0' +dqabs015 abs '-0.00' -> '0.00' +dqabs016 abs '-00.0' -> '0.0' +dqabs017 abs '-00.00' -> '0.00' +dqabs018 abs '-00' -> '0' + +dqabs020 abs '-2000000' -> '2000000' +dqabs021 abs '2000000' -> '2000000' + +dqabs030 abs '+0.1' -> '0.1' +dqabs031 abs '-0.1' -> '0.1' +dqabs032 abs '+0.01' -> '0.01' +dqabs033 abs '-0.01' -> '0.01' +dqabs034 abs '+0.001' -> '0.001' +dqabs035 abs '-0.001' -> '0.001' +dqabs036 abs '+0.000001' -> '0.000001' +dqabs037 abs '-0.000001' -> '0.000001' +dqabs038 abs '+0.000000000001' -> '1E-12' +dqabs039 abs '-0.000000000001' -> '1E-12' + +-- examples from decArith +dqabs040 abs '2.1' -> '2.1' +dqabs041 abs '-100' -> '100' +dqabs042 abs '101.5' -> '101.5' +dqabs043 abs '-101.5' -> '101.5' + +-- more fixed, potential LHS swaps/overlays if done by subtract 0 +dqabs060 abs '-56267E-10' -> '0.0000056267' +dqabs061 abs '-56267E-5' -> '0.56267' +dqabs062 abs '-56267E-2' -> '562.67' +dqabs063 abs '-56267E-1' -> '5626.7' +dqabs065 abs '-56267E-0' -> '56267' + +-- subnormals and underflow + +-- long operand tests +dqabs321 abs 1234567890123456 -> 1234567890123456 +dqabs322 abs 12345678000 -> 12345678000 +dqabs323 abs 1234567800 -> 1234567800 +dqabs324 abs 1234567890 -> 1234567890 +dqabs325 abs 1234567891 -> 1234567891 +dqabs326 abs 12345678901 -> 12345678901 +dqabs327 abs 1234567896 -> 1234567896 + +-- zeros +dqabs111 abs 0 -> 0 +dqabs112 abs -0 -> 0 +dqabs113 abs 0E+6 -> 0E+6 +dqabs114 abs -0E+6 -> 0E+6 +dqabs115 abs 0.0000 -> 0.0000 +dqabs116 abs -0.0000 -> 0.0000 +dqabs117 abs 0E-141 -> 0E-141 +dqabs118 abs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqabs121 abs 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqabs122 abs -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqabs123 abs 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 +dqabs124 abs -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqabs131 abs 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqabs132 abs 1E-6143 -> 1E-6143 +dqabs133 abs 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqabs134 abs 1E-6176 -> 1E-6176 Subnormal + +dqabs135 abs -1E-6176 -> 1E-6176 Subnormal +dqabs136 abs -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqabs137 abs -1E-6143 -> 1E-6143 +dqabs138 abs -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 + +-- specials +dqabs520 abs 'Inf' -> 'Infinity' +dqabs521 abs '-Inf' -> 'Infinity' +dqabs522 abs NaN -> NaN +dqabs523 abs sNaN -> NaN Invalid_operation +dqabs524 abs NaN22 -> NaN22 +dqabs525 abs sNaN33 -> NaN33 Invalid_operation +dqabs526 abs -NaN22 -> -NaN22 +dqabs527 abs -sNaN33 -> -NaN33 Invalid_operation + +-- Null tests +dqabs900 abs # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqAdd.decTest b/Lib/test/decimaltestdata/dqAdd.decTest index b1df77abc67..b3ad892bc1d 100644 --- a/Lib/test/decimaltestdata/dqAdd.decTest +++ b/Lib/test/decimaltestdata/dqAdd.decTest @@ -1,1215 +1,1215 @@ ------------------------------------------------------------------------- --- dqAdd.decTest -- decQuad addition -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decQuads only; all arguments are --- representable in a decQuad -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- [first group are 'quick confidence check'] -dqadd001 add 1 1 -> 2 -dqadd002 add 2 3 -> 5 -dqadd003 add '5.75' '3.3' -> 9.05 -dqadd004 add '5' '-3' -> 2 -dqadd005 add '-5' '-3' -> -8 -dqadd006 add '-7' '2.5' -> -4.5 -dqadd007 add '0.7' '0.3' -> 1.0 -dqadd008 add '1.25' '1.25' -> 2.50 -dqadd009 add '1.23456789' '1.00000000' -> '2.23456789' -dqadd010 add '1.23456789' '1.00000011' -> '2.23456800' - --- 1234567890123456 1234567890123456 -dqadd011 add '0.4444444444444444444444444444444446' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Inexact Rounded -dqadd012 add '0.4444444444444444444444444444444445' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Rounded -dqadd013 add '0.4444444444444444444444444444444444' '0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' -dqadd014 add '4444444444444444444444444444444444' '0.49' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd015 add '4444444444444444444444444444444444' '0.499' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd016 add '4444444444444444444444444444444444' '0.4999' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd017 add '4444444444444444444444444444444444' '0.5000' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd018 add '4444444444444444444444444444444444' '0.5001' -> '4444444444444444444444444444444445' Inexact Rounded -dqadd019 add '4444444444444444444444444444444444' '0.501' -> '4444444444444444444444444444444445' Inexact Rounded -dqadd020 add '4444444444444444444444444444444444' '0.51' -> '4444444444444444444444444444444445' Inexact Rounded - -dqadd021 add 0 1 -> 1 -dqadd022 add 1 1 -> 2 -dqadd023 add 2 1 -> 3 -dqadd024 add 3 1 -> 4 -dqadd025 add 4 1 -> 5 -dqadd026 add 5 1 -> 6 -dqadd027 add 6 1 -> 7 -dqadd028 add 7 1 -> 8 -dqadd029 add 8 1 -> 9 -dqadd030 add 9 1 -> 10 - --- some carrying effects -dqadd031 add '0.9998' '0.0000' -> '0.9998' -dqadd032 add '0.9998' '0.0001' -> '0.9999' -dqadd033 add '0.9998' '0.0002' -> '1.0000' -dqadd034 add '0.9998' '0.0003' -> '1.0001' - -dqadd035 add '70' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd036 add '700' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd037 add '7000' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd038 add '70000' '10000e+34' -> '1.000000000000000000000000000000001E+38' Inexact Rounded -dqadd039 add '700000' '10000e+34' -> '1.000000000000000000000000000000007E+38' Rounded - --- symmetry: -dqadd040 add '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd041 add '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd042 add '10000e+34' '7000' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd044 add '10000e+34' '70000' -> '1.000000000000000000000000000000001E+38' Inexact Rounded -dqadd045 add '10000e+34' '700000' -> '1.000000000000000000000000000000007E+38' Rounded - --- same, without rounding -dqadd046 add '10000e+9' '7' -> '10000000000007' -dqadd047 add '10000e+9' '70' -> '10000000000070' -dqadd048 add '10000e+9' '700' -> '10000000000700' -dqadd049 add '10000e+9' '7000' -> '10000000007000' -dqadd050 add '10000e+9' '70000' -> '10000000070000' -dqadd051 add '10000e+9' '700000' -> '10000000700000' -dqadd052 add '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -dqadd053 add '12' '7.00' -> '19.00' -dqadd054 add '1.3' '-1.07' -> '0.23' -dqadd055 add '1.3' '-1.30' -> '0.00' -dqadd056 add '1.3' '-2.07' -> '-0.77' -dqadd057 add '1E+2' '1E+4' -> '1.01E+4' - --- leading zero preservation -dqadd061 add 1 '0.0001' -> '1.0001' -dqadd062 add 1 '0.00001' -> '1.00001' -dqadd063 add 1 '0.000001' -> '1.000001' -dqadd064 add 1 '0.0000001' -> '1.0000001' -dqadd065 add 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -dqadd070 add 1 0 -> 1 -dqadd071 add 1 0. -> 1 -dqadd072 add 1 .0 -> 1.0 -dqadd073 add 1 0.0 -> 1.0 -dqadd074 add 1 0.00 -> 1.00 -dqadd075 add 0 1 -> 1 -dqadd076 add 0. 1 -> 1 -dqadd077 add .0 1 -> 1.0 -dqadd078 add 0.0 1 -> 1.0 -dqadd079 add 0.00 1 -> 1.00 - --- some carries -dqadd080 add 999999998 1 -> 999999999 -dqadd081 add 999999999 1 -> 1000000000 -dqadd082 add 99999999 1 -> 100000000 -dqadd083 add 9999999 1 -> 10000000 -dqadd084 add 999999 1 -> 1000000 -dqadd085 add 99999 1 -> 100000 -dqadd086 add 9999 1 -> 10000 -dqadd087 add 999 1 -> 1000 -dqadd088 add 99 1 -> 100 -dqadd089 add 9 1 -> 10 - - --- more LHS swaps -dqadd090 add '-56267E-10' 0 -> '-0.0000056267' -dqadd091 add '-56267E-6' 0 -> '-0.056267' -dqadd092 add '-56267E-5' 0 -> '-0.56267' -dqadd093 add '-56267E-4' 0 -> '-5.6267' -dqadd094 add '-56267E-3' 0 -> '-56.267' -dqadd095 add '-56267E-2' 0 -> '-562.67' -dqadd096 add '-56267E-1' 0 -> '-5626.7' -dqadd097 add '-56267E-0' 0 -> '-56267' -dqadd098 add '-5E-10' 0 -> '-5E-10' -dqadd099 add '-5E-7' 0 -> '-5E-7' -dqadd100 add '-5E-6' 0 -> '-0.000005' -dqadd101 add '-5E-5' 0 -> '-0.00005' -dqadd102 add '-5E-4' 0 -> '-0.0005' -dqadd103 add '-5E-1' 0 -> '-0.5' -dqadd104 add '-5E0' 0 -> '-5' -dqadd105 add '-5E1' 0 -> '-50' -dqadd106 add '-5E5' 0 -> '-500000' -dqadd107 add '-5E33' 0 -> '-5000000000000000000000000000000000' -dqadd108 add '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded -dqadd109 add '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded -dqadd110 add '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded -dqadd111 add '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded - --- more RHS swaps -dqadd113 add 0 '-56267E-10' -> '-0.0000056267' -dqadd114 add 0 '-56267E-6' -> '-0.056267' -dqadd116 add 0 '-56267E-5' -> '-0.56267' -dqadd117 add 0 '-56267E-4' -> '-5.6267' -dqadd119 add 0 '-56267E-3' -> '-56.267' -dqadd120 add 0 '-56267E-2' -> '-562.67' -dqadd121 add 0 '-56267E-1' -> '-5626.7' -dqadd122 add 0 '-56267E-0' -> '-56267' -dqadd123 add 0 '-5E-10' -> '-5E-10' -dqadd124 add 0 '-5E-7' -> '-5E-7' -dqadd125 add 0 '-5E-6' -> '-0.000005' -dqadd126 add 0 '-5E-5' -> '-0.00005' -dqadd127 add 0 '-5E-4' -> '-0.0005' -dqadd128 add 0 '-5E-1' -> '-0.5' -dqadd129 add 0 '-5E0' -> '-5' -dqadd130 add 0 '-5E1' -> '-50' -dqadd131 add 0 '-5E5' -> '-500000' -dqadd132 add 0 '-5E33' -> '-5000000000000000000000000000000000' -dqadd133 add 0 '-5E34' -> '-5.000000000000000000000000000000000E+34' Rounded -dqadd134 add 0 '-5E35' -> '-5.000000000000000000000000000000000E+35' Rounded -dqadd135 add 0 '-5E36' -> '-5.000000000000000000000000000000000E+36' Rounded -dqadd136 add 0 '-5E100' -> '-5.000000000000000000000000000000000E+100' Rounded - --- related -dqadd137 add 1 '0E-39' -> '1.000000000000000000000000000000000' Rounded -dqadd138 add -1 '0E-39' -> '-1.000000000000000000000000000000000' Rounded -dqadd139 add '0E-39' 1 -> '1.000000000000000000000000000000000' Rounded -dqadd140 add '0E-39' -1 -> '-1.000000000000000000000000000000000' Rounded -dqadd141 add 1E+29 0.0000 -> '100000000000000000000000000000.0000' -dqadd142 add 1E+29 0.00000 -> '100000000000000000000000000000.0000' Rounded -dqadd143 add 0.000 1E+30 -> '1000000000000000000000000000000.000' -dqadd144 add 0.0000 1E+30 -> '1000000000000000000000000000000.000' Rounded - --- [some of the next group are really constructor tests] -dqadd146 add '00.0' 0 -> '0.0' -dqadd147 add '0.00' 0 -> '0.00' -dqadd148 add 0 '0.00' -> '0.00' -dqadd149 add 0 '00.0' -> '0.0' -dqadd150 add '00.0' '0.00' -> '0.00' -dqadd151 add '0.00' '00.0' -> '0.00' -dqadd152 add '3' '.3' -> '3.3' -dqadd153 add '3.' '.3' -> '3.3' -dqadd154 add '3.0' '.3' -> '3.3' -dqadd155 add '3.00' '.3' -> '3.30' -dqadd156 add '3' '3' -> '6' -dqadd157 add '3' '+3' -> '6' -dqadd158 add '3' '-3' -> '0' -dqadd159 add '0.3' '-0.3' -> '0.0' -dqadd160 add '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -dqadd161 add '1E+12' '-1' -> '999999999999' -dqadd162 add '1E+12' '1.11' -> '1000000000001.11' -dqadd163 add '1.11' '1E+12' -> '1000000000001.11' -dqadd164 add '-1' '1E+12' -> '999999999999' -dqadd165 add '7E+12' '-1' -> '6999999999999' -dqadd166 add '7E+12' '1.11' -> '7000000000001.11' -dqadd167 add '1.11' '7E+12' -> '7000000000001.11' -dqadd168 add '-1' '7E+12' -> '6999999999999' - -rounding: half_up -dqadd170 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555567' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd171 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555566' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd172 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555565' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd173 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555564' -> '5.000000000000000000000000000000000' Inexact Rounded -dqadd174 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555553' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd175 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555552' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd176 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555551' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd177 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555550' -> '4.999999999999999999999999999999999' Rounded -dqadd178 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555545' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd179 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555544' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd180 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555543' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd181 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555542' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd182 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555541' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd183 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555540' -> '4.999999999999999999999999999999998' Rounded - --- and some more, including residue effects and different roundings -rounding: half_up -dqadd200 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd201 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd202 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd203 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd204 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd205 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd206 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd207 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd208 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd209 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd210 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd211 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd212 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd213 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd214 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd215 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd216 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd217 add '1231234567890123456784560123456789' 1.000000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd218 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd219 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded - -rounding: half_even -dqadd220 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd221 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd222 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd223 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd224 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd225 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd226 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd227 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd228 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd229 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd230 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd231 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd232 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd233 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd234 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd235 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd236 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd237 add '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd238 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd239 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded --- critical few with even bottom digit... -dqadd240 add '1231234567890123456784560123456788' 0.499999999 -> '1231234567890123456784560123456788' Inexact Rounded -dqadd241 add '1231234567890123456784560123456788' 0.5 -> '1231234567890123456784560123456788' Inexact Rounded -dqadd242 add '1231234567890123456784560123456788' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded - -rounding: down -dqadd250 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd251 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd252 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd253 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd254 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd255 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd256 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd257 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd258 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd259 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd260 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd261 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd262 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd263 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd264 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd265 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd266 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd267 add '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd268 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd269 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_up -dqadd301 add -1 1 -> 0 -dqadd302 add 0 1 -> 1 -dqadd303 add 1 1 -> 2 -dqadd304 add 12 1 -> 13 -dqadd305 add 98 1 -> 99 -dqadd306 add 99 1 -> 100 -dqadd307 add 100 1 -> 101 -dqadd308 add 101 1 -> 102 -dqadd309 add -1 -1 -> -2 -dqadd310 add 0 -1 -> -1 -dqadd311 add 1 -1 -> 0 -dqadd312 add 12 -1 -> 11 -dqadd313 add 98 -1 -> 97 -dqadd314 add 99 -1 -> 98 -dqadd315 add 100 -1 -> 99 -dqadd316 add 101 -1 -> 100 - -dqadd321 add -0.01 0.01 -> 0.00 -dqadd322 add 0.00 0.01 -> 0.01 -dqadd323 add 0.01 0.01 -> 0.02 -dqadd324 add 0.12 0.01 -> 0.13 -dqadd325 add 0.98 0.01 -> 0.99 -dqadd326 add 0.99 0.01 -> 1.00 -dqadd327 add 1.00 0.01 -> 1.01 -dqadd328 add 1.01 0.01 -> 1.02 -dqadd329 add -0.01 -0.01 -> -0.02 -dqadd330 add 0.00 -0.01 -> -0.01 -dqadd331 add 0.01 -0.01 -> 0.00 -dqadd332 add 0.12 -0.01 -> 0.11 -dqadd333 add 0.98 -0.01 -> 0.97 -dqadd334 add 0.99 -0.01 -> 0.98 -dqadd335 add 1.00 -0.01 -> 0.99 -dqadd336 add 1.01 -0.01 -> 1.00 - --- some more cases where adding 0 affects the coefficient -dqadd340 add 1E+3 0 -> 1000 -dqadd341 add 1E+33 0 -> 1000000000000000000000000000000000 -dqadd342 add 1E+34 0 -> 1.000000000000000000000000000000000E+34 Rounded -dqadd343 add 1E+35 0 -> 1.000000000000000000000000000000000E+35 Rounded --- which simply follow from these cases ... -dqadd344 add 1E+3 1 -> 1001 -dqadd345 add 1E+33 1 -> 1000000000000000000000000000000001 -dqadd346 add 1E+34 1 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd347 add 1E+35 1 -> 1.000000000000000000000000000000000E+35 Inexact Rounded -dqadd348 add 1E+3 7 -> 1007 -dqadd349 add 1E+33 7 -> 1000000000000000000000000000000007 -dqadd350 add 1E+34 7 -> 1.000000000000000000000000000000001E+34 Inexact Rounded -dqadd351 add 1E+35 7 -> 1.000000000000000000000000000000000E+35 Inexact Rounded - --- tryzeros cases -rounding: half_up -dqadd360 add 0E+50 10000E+1 -> 1.0000E+5 -dqadd361 add 0E-50 10000E+1 -> 100000.0000000000000000000000000000 Rounded -dqadd362 add 10000E+1 0E-50 -> 100000.0000000000000000000000000000 Rounded -dqadd363 add 10000E+1 10000E-50 -> 100000.0000000000000000000000000000 Rounded Inexact -dqadd364 add 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0E+6111 --- 1 234567890123456789012345678901234 - --- a curiosity from JSR 13 testing -rounding: half_down -dqadd370 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd371 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact -rounding: half_up -dqadd372 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd373 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact -rounding: half_even -dqadd374 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd375 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact - --- ulp replacement tests -dqadd400 add 1 77e-32 -> 1.00000000000000000000000000000077 -dqadd401 add 1 77e-33 -> 1.000000000000000000000000000000077 -dqadd402 add 1 77e-34 -> 1.000000000000000000000000000000008 Inexact Rounded -dqadd403 add 1 77e-35 -> 1.000000000000000000000000000000001 Inexact Rounded -dqadd404 add 1 77e-36 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd405 add 1 77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd406 add 1 77e-299 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd410 add 10 77e-32 -> 10.00000000000000000000000000000077 -dqadd411 add 10 77e-33 -> 10.00000000000000000000000000000008 Inexact Rounded -dqadd412 add 10 77e-34 -> 10.00000000000000000000000000000001 Inexact Rounded -dqadd413 add 10 77e-35 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd414 add 10 77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd415 add 10 77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd416 add 10 77e-299 -> 10.00000000000000000000000000000000 Inexact Rounded - -dqadd420 add 77e-32 1 -> 1.00000000000000000000000000000077 -dqadd421 add 77e-33 1 -> 1.000000000000000000000000000000077 -dqadd422 add 77e-34 1 -> 1.000000000000000000000000000000008 Inexact Rounded -dqadd423 add 77e-35 1 -> 1.000000000000000000000000000000001 Inexact Rounded -dqadd424 add 77e-36 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd425 add 77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd426 add 77e-299 1 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd430 add 77e-32 10 -> 10.00000000000000000000000000000077 -dqadd431 add 77e-33 10 -> 10.00000000000000000000000000000008 Inexact Rounded -dqadd432 add 77e-34 10 -> 10.00000000000000000000000000000001 Inexact Rounded -dqadd433 add 77e-35 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd434 add 77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd435 add 77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd436 add 77e-299 10 -> 10.00000000000000000000000000000000 Inexact Rounded - --- fastpath boundaries --- 1234567890123456789012345678901234 -dqadd501 add '4444444444444444444444444444444444' '5555555555555555555555555555555555' -> '9999999999999999999999999999999999' -dqadd502 add '4444444444444444444444444444444444' '4555555555555555555555555555555555' -> '8999999999999999999999999999999999' -dqadd503 add '4444444444444444444444444444444444' '3555555555555555555055555555555555' -> '7999999999999999999499999999999999' -dqadd504 add '4444444444444444444444444444444444' '3955555555555555555555555555555555' -> '8399999999999999999999999999999999' -dqadd505 add '4444444444444444444444444444444444' '4955555555555555555555555555555555' -> '9399999999999999999999999999999999' -dqadd506 add '4444444444444444444444444444444444' '5955555555555555555555555555555555' -> 1.040000000000000000000000000000000E+34 Inexact Rounded -dqadd511 add '344444444444444444444444444444444' '555555555555555555555555555555555' -> '899999999999999999999999999999999' -dqadd512 add '34444444444444444444444444444444' '55555555555555555555555555555555' -> '89999999999999999999999999999999' -dqadd513 add '3444444444444444444444444444444' '5555555555555555555555555555555' -> '8999999999999999999999999999999' -dqadd514 add '344444444444444444444444444444' '555555555555555555555555555555' -> '899999999999999999999999999999' -dqadd515 add '34444444444444444444444444444' '55555555555555555555555555555' -> '89999999999999999999999999999' -dqadd516 add '3444444444444444444444444444' '5555555555555555555555555555' -> '8999999999999999999999999999' -dqadd517 add '344444444444444444444444444' '555555555555555555555555555' -> '899999999999999999999999999' -dqadd518 add '34444444444444444444444444' '55555555555555555555555555' -> '89999999999999999999999999' -dqadd519 add '3444444444444444444444444' '5555555555555555555555555' -> '8999999999999999999999999' -dqadd520 add '344444444444444444444444' '555555555555555555555555' -> '899999999999999999999999' -dqadd521 add '34444444444444444444444' '55555555555555555555555' -> '89999999999999999999999' -dqadd522 add '3444444444444444444444' '5555555555555555555555' -> '8999999999999999999999' -dqadd523 add '4444444444444444444444' '3333333333333333333333' -> '7777777777777777777777' -dqadd524 add '344444444444444444444' '555555555555555555555' -> '899999999999999999999' -dqadd525 add '34444444444444444444' '55555555555555555555' -> '89999999999999999999' -dqadd526 add '3444444444444444444' '5555555555555555555' -> '8999999999999999999' -dqadd527 add '344444444444444444' '555555555555555555' -> '899999999999999999' -dqadd528 add '34444444444444444' '55555555555555555' -> '89999999999999999' -dqadd529 add '3444444444444444' '5555555555555555' -> '8999999999999999' -dqadd530 add '344444444444444' '555555555555555' -> '899999999999999' -dqadd531 add '34444444444444' '55555555555555' -> '89999999999999' -dqadd532 add '3444444444444' '5555555555555' -> '8999999999999' -dqadd533 add '344444444444' '555555555555' -> '899999999999' -dqadd534 add '34444444444' '55555555555' -> '89999999999' -dqadd535 add '3444444444' '5555555555' -> '8999999999' -dqadd536 add '344444444' '555555555' -> '899999999' -dqadd537 add '34444444' '55555555' -> '89999999' -dqadd538 add '3444444' '5555555' -> '8999999' -dqadd539 add '344444' '555555' -> '899999' -dqadd540 add '34444' '55555' -> '89999' -dqadd541 add '3444' '5555' -> '8999' -dqadd542 add '344' '555' -> '899' -dqadd543 add '34' '55' -> '89' -dqadd544 add '3' '5' -> '8' - -dqadd545 add '3000004000000000000000000000000000' '3000000000000040000000000000000000' -> '6000004000000040000000000000000000' -dqadd546 add '3000000400000000000000000000000000' '4000000000000400000000000000000000' -> '7000000400000400000000000000000000' -dqadd547 add '3000000040000000000000000000000000' '5000000000004000000000000000000000' -> '8000000040004000000000000000000000' -dqadd548 add '4000000004000000000000000000000000' '3000000000040000000000000000000000' -> '7000000004040000000000000000000000' -dqadd549 add '4000000000400000000000000000000000' '4000000000400000000000000000000000' -> '8000000000800000000000000000000000' -dqadd550 add '4000000000040000000000000000000000' '5000000004000000000000000000000000' -> '9000000004040000000000000000000000' -dqadd551 add '5000000000004000000000000000000000' '3000000040000000000000000000000000' -> '8000000040004000000000000000000000' -dqadd552 add '5000000000000400000000000000000000' '4000000400000000000000000000000000' -> '9000000400000400000000000000000000' -dqadd553 add '5000000000000040000000000000000000' '5000004000000000000000000000000000' -> 1.000000400000004000000000000000000E+34 Rounded --- check propagation -dqadd554 add '8999999999999999999999999999999999' '0000000000000000000000000000000001' -> 9000000000000000000000000000000000 -dqadd555 add '0000000000000000000000000000000001' '8999999999999999999999999999999999' -> 9000000000000000000000000000000000 -dqadd556 add '4444444444444444444444444444444444' '4555555555555555555555555555555556' -> 9000000000000000000000000000000000 -dqadd557 add '4555555555555555555555555555555556' '4444444444444444444444444444444444' -> 9000000000000000000000000000000000 - --- negative ulps -dqadd6440 add 1 -77e-32 -> 0.99999999999999999999999999999923 -dqadd6441 add 1 -77e-33 -> 0.999999999999999999999999999999923 -dqadd6442 add 1 -77e-34 -> 0.9999999999999999999999999999999923 -dqadd6443 add 1 -77e-35 -> 0.9999999999999999999999999999999992 Inexact Rounded -dqadd6444 add 1 -77e-36 -> 0.9999999999999999999999999999999999 Inexact Rounded -dqadd6445 add 1 -77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd6446 add 1 -77e-99 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd6450 add 10 -77e-32 -> 9.99999999999999999999999999999923 -dqadd6451 add 10 -77e-33 -> 9.999999999999999999999999999999923 -dqadd6452 add 10 -77e-34 -> 9.999999999999999999999999999999992 Inexact Rounded -dqadd6453 add 10 -77e-35 -> 9.999999999999999999999999999999999 Inexact Rounded -dqadd6454 add 10 -77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd6455 add 10 -77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd6456 add 10 -77e-99 -> 10.00000000000000000000000000000000 Inexact Rounded - -dqadd6460 add -77e-32 1 -> 0.99999999999999999999999999999923 -dqadd6461 add -77e-33 1 -> 0.999999999999999999999999999999923 -dqadd6462 add -77e-34 1 -> 0.9999999999999999999999999999999923 -dqadd6463 add -77e-35 1 -> 0.9999999999999999999999999999999992 Inexact Rounded -dqadd6464 add -77e-36 1 -> 0.9999999999999999999999999999999999 Inexact Rounded -dqadd6465 add -77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd6466 add -77e-99 1 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd6470 add -77e-32 10 -> 9.99999999999999999999999999999923 -dqadd6471 add -77e-33 10 -> 9.999999999999999999999999999999923 -dqadd6472 add -77e-34 10 -> 9.999999999999999999999999999999992 Inexact Rounded -dqadd6473 add -77e-35 10 -> 9.999999999999999999999999999999999 Inexact Rounded -dqadd6474 add -77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd6475 add -77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd6476 add -77e-99 10 -> 10.00000000000000000000000000000000 Inexact Rounded - --- negative ulps -dqadd6480 add -1 77e-32 -> -0.99999999999999999999999999999923 -dqadd6481 add -1 77e-33 -> -0.999999999999999999999999999999923 -dqadd6482 add -1 77e-34 -> -0.9999999999999999999999999999999923 -dqadd6483 add -1 77e-35 -> -0.9999999999999999999999999999999992 Inexact Rounded -dqadd6484 add -1 77e-36 -> -0.9999999999999999999999999999999999 Inexact Rounded -dqadd6485 add -1 77e-37 -> -1.000000000000000000000000000000000 Inexact Rounded -dqadd6486 add -1 77e-99 -> -1.000000000000000000000000000000000 Inexact Rounded - -dqadd6490 add -10 77e-32 -> -9.99999999999999999999999999999923 -dqadd6491 add -10 77e-33 -> -9.999999999999999999999999999999923 -dqadd6492 add -10 77e-34 -> -9.999999999999999999999999999999992 Inexact Rounded -dqadd6493 add -10 77e-35 -> -9.999999999999999999999999999999999 Inexact Rounded -dqadd6494 add -10 77e-36 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd6495 add -10 77e-37 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd6496 add -10 77e-99 -> -10.00000000000000000000000000000000 Inexact Rounded - -dqadd6500 add 77e-32 -1 -> -0.99999999999999999999999999999923 -dqadd6501 add 77e-33 -1 -> -0.999999999999999999999999999999923 -dqadd6502 add 77e-34 -1 -> -0.9999999999999999999999999999999923 -dqadd6503 add 77e-35 -1 -> -0.9999999999999999999999999999999992 Inexact Rounded -dqadd6504 add 77e-36 -1 -> -0.9999999999999999999999999999999999 Inexact Rounded -dqadd6505 add 77e-37 -1 -> -1.000000000000000000000000000000000 Inexact Rounded -dqadd6506 add 77e-99 -1 -> -1.000000000000000000000000000000000 Inexact Rounded - -dqadd6510 add 77e-32 -10 -> -9.99999999999999999999999999999923 -dqadd6511 add 77e-33 -10 -> -9.999999999999999999999999999999923 -dqadd6512 add 77e-34 -10 -> -9.999999999999999999999999999999992 Inexact Rounded -dqadd6513 add 77e-35 -10 -> -9.999999999999999999999999999999999 Inexact Rounded -dqadd6514 add 77e-36 -10 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd6515 add 77e-37 -10 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd6516 add 77e-99 -10 -> -10.00000000000000000000000000000000 Inexact Rounded - --- and some more residue effects and different roundings -rounding: half_up -dqadd6540 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd6541 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6542 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6543 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6544 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6545 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6546 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6547 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6548 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6549 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6550 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6551 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6552 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6553 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6554 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6555 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6556 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd6557 add '9876543219876543216543210123456789' 1.000000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6558 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6559 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - -rounding: half_even -dqadd6560 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd6561 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6562 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6563 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6564 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6565 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6566 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6567 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd6568 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6569 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6570 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6571 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6572 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6573 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6574 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6575 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6576 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd6577 add '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6578 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd6579 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - --- critical few with even bottom digit... -dqadd7540 add '9876543219876543216543210123456788' 0.499999999 -> '9876543219876543216543210123456788' Inexact Rounded -dqadd7541 add '9876543219876543216543210123456788' 0.5 -> '9876543219876543216543210123456788' Inexact Rounded -dqadd7542 add '9876543219876543216543210123456788' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded - -rounding: down -dqadd7550 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd7551 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7552 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7553 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7554 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7555 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7556 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7557 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7558 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7559 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7560 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7561 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7562 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7563 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7564 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7565 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd7566 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd7567 add '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd7568 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd7569 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - --- more zeros, etc. -rounding: half_even - -dqadd7701 add 5.00 1.00E-3 -> 5.00100 -dqadd7702 add 00.00 0.000 -> 0.000 -dqadd7703 add 00.00 0E-3 -> 0.000 -dqadd7704 add 0E-3 00.00 -> 0.000 - -dqadd7710 add 0E+3 00.00 -> 0.00 -dqadd7711 add 0E+3 00.0 -> 0.0 -dqadd7712 add 0E+3 00. -> 0 -dqadd7713 add 0E+3 00.E+1 -> 0E+1 -dqadd7714 add 0E+3 00.E+2 -> 0E+2 -dqadd7715 add 0E+3 00.E+3 -> 0E+3 -dqadd7716 add 0E+3 00.E+4 -> 0E+3 -dqadd7717 add 0E+3 00.E+5 -> 0E+3 -dqadd7718 add 0E+3 -00.0 -> 0.0 -dqadd7719 add 0E+3 -00. -> 0 -dqadd7731 add 0E+3 -00.E+1 -> 0E+1 - -dqadd7720 add 00.00 0E+3 -> 0.00 -dqadd7721 add 00.0 0E+3 -> 0.0 -dqadd7722 add 00. 0E+3 -> 0 -dqadd7723 add 00.E+1 0E+3 -> 0E+1 -dqadd7724 add 00.E+2 0E+3 -> 0E+2 -dqadd7725 add 00.E+3 0E+3 -> 0E+3 -dqadd7726 add 00.E+4 0E+3 -> 0E+3 -dqadd7727 add 00.E+5 0E+3 -> 0E+3 -dqadd7728 add -00.00 0E+3 -> 0.00 -dqadd7729 add -00.0 0E+3 -> 0.0 -dqadd7730 add -00. 0E+3 -> 0 - -dqadd7732 add 0 0 -> 0 -dqadd7733 add 0 -0 -> 0 -dqadd7734 add -0 0 -> 0 -dqadd7735 add -0 -0 -> -0 -- IEEE 754 special case - -dqadd7736 add 1 -1 -> 0 -dqadd7737 add -1 -1 -> -2 -dqadd7738 add 1 1 -> 2 -dqadd7739 add -1 1 -> 0 - -dqadd7741 add 0 -1 -> -1 -dqadd7742 add -0 -1 -> -1 -dqadd7743 add 0 1 -> 1 -dqadd7744 add -0 1 -> 1 -dqadd7745 add -1 0 -> -1 -dqadd7746 add -1 -0 -> -1 -dqadd7747 add 1 0 -> 1 -dqadd7748 add 1 -0 -> 1 - -dqadd7751 add 0.0 -1 -> -1.0 -dqadd7752 add -0.0 -1 -> -1.0 -dqadd7753 add 0.0 1 -> 1.0 -dqadd7754 add -0.0 1 -> 1.0 -dqadd7755 add -1.0 0 -> -1.0 -dqadd7756 add -1.0 -0 -> -1.0 -dqadd7757 add 1.0 0 -> 1.0 -dqadd7758 add 1.0 -0 -> 1.0 - -dqadd7761 add 0 -1.0 -> -1.0 -dqadd7762 add -0 -1.0 -> -1.0 -dqadd7763 add 0 1.0 -> 1.0 -dqadd7764 add -0 1.0 -> 1.0 -dqadd7765 add -1 0.0 -> -1.0 -dqadd7766 add -1 -0.0 -> -1.0 -dqadd7767 add 1 0.0 -> 1.0 -dqadd7768 add 1 -0.0 -> 1.0 - -dqadd7771 add 0.0 -1.0 -> -1.0 -dqadd7772 add -0.0 -1.0 -> -1.0 -dqadd7773 add 0.0 1.0 -> 1.0 -dqadd7774 add -0.0 1.0 -> 1.0 -dqadd7775 add -1.0 0.0 -> -1.0 -dqadd7776 add -1.0 -0.0 -> -1.0 -dqadd7777 add 1.0 0.0 -> 1.0 -dqadd7778 add 1.0 -0.0 -> 1.0 - --- Specials -dqadd7780 add -Inf -Inf -> -Infinity -dqadd7781 add -Inf -1000 -> -Infinity -dqadd7782 add -Inf -1 -> -Infinity -dqadd7783 add -Inf -0 -> -Infinity -dqadd7784 add -Inf 0 -> -Infinity -dqadd7785 add -Inf 1 -> -Infinity -dqadd7786 add -Inf 1000 -> -Infinity -dqadd7787 add -1000 -Inf -> -Infinity -dqadd7788 add -Inf -Inf -> -Infinity -dqadd7789 add -1 -Inf -> -Infinity -dqadd7790 add -0 -Inf -> -Infinity -dqadd7791 add 0 -Inf -> -Infinity -dqadd7792 add 1 -Inf -> -Infinity -dqadd7793 add 1000 -Inf -> -Infinity -dqadd7794 add Inf -Inf -> NaN Invalid_operation - -dqadd7800 add Inf -Inf -> NaN Invalid_operation -dqadd7801 add Inf -1000 -> Infinity -dqadd7802 add Inf -1 -> Infinity -dqadd7803 add Inf -0 -> Infinity -dqadd7804 add Inf 0 -> Infinity -dqadd7805 add Inf 1 -> Infinity -dqadd7806 add Inf 1000 -> Infinity -dqadd7807 add Inf Inf -> Infinity -dqadd7808 add -1000 Inf -> Infinity -dqadd7809 add -Inf Inf -> NaN Invalid_operation -dqadd7810 add -1 Inf -> Infinity -dqadd7811 add -0 Inf -> Infinity -dqadd7812 add 0 Inf -> Infinity -dqadd7813 add 1 Inf -> Infinity -dqadd7814 add 1000 Inf -> Infinity -dqadd7815 add Inf Inf -> Infinity - -dqadd7821 add NaN -Inf -> NaN -dqadd7822 add NaN -1000 -> NaN -dqadd7823 add NaN -1 -> NaN -dqadd7824 add NaN -0 -> NaN -dqadd7825 add NaN 0 -> NaN -dqadd7826 add NaN 1 -> NaN -dqadd7827 add NaN 1000 -> NaN -dqadd7828 add NaN Inf -> NaN -dqadd7829 add NaN NaN -> NaN -dqadd7830 add -Inf NaN -> NaN -dqadd7831 add -1000 NaN -> NaN -dqadd7832 add -1 NaN -> NaN -dqadd7833 add -0 NaN -> NaN -dqadd7834 add 0 NaN -> NaN -dqadd7835 add 1 NaN -> NaN -dqadd7836 add 1000 NaN -> NaN -dqadd7837 add Inf NaN -> NaN - -dqadd7841 add sNaN -Inf -> NaN Invalid_operation -dqadd7842 add sNaN -1000 -> NaN Invalid_operation -dqadd7843 add sNaN -1 -> NaN Invalid_operation -dqadd7844 add sNaN -0 -> NaN Invalid_operation -dqadd7845 add sNaN 0 -> NaN Invalid_operation -dqadd7846 add sNaN 1 -> NaN Invalid_operation -dqadd7847 add sNaN 1000 -> NaN Invalid_operation -dqadd7848 add sNaN NaN -> NaN Invalid_operation -dqadd7849 add sNaN sNaN -> NaN Invalid_operation -dqadd7850 add NaN sNaN -> NaN Invalid_operation -dqadd7851 add -Inf sNaN -> NaN Invalid_operation -dqadd7852 add -1000 sNaN -> NaN Invalid_operation -dqadd7853 add -1 sNaN -> NaN Invalid_operation -dqadd7854 add -0 sNaN -> NaN Invalid_operation -dqadd7855 add 0 sNaN -> NaN Invalid_operation -dqadd7856 add 1 sNaN -> NaN Invalid_operation -dqadd7857 add 1000 sNaN -> NaN Invalid_operation -dqadd7858 add Inf sNaN -> NaN Invalid_operation -dqadd7859 add NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqadd7861 add NaN1 -Inf -> NaN1 -dqadd7862 add +NaN2 -1000 -> NaN2 -dqadd7863 add NaN3 1000 -> NaN3 -dqadd7864 add NaN4 Inf -> NaN4 -dqadd7865 add NaN5 +NaN6 -> NaN5 -dqadd7866 add -Inf NaN7 -> NaN7 -dqadd7867 add -1000 NaN8 -> NaN8 -dqadd7868 add 1000 NaN9 -> NaN9 -dqadd7869 add Inf +NaN10 -> NaN10 -dqadd7871 add sNaN11 -Inf -> NaN11 Invalid_operation -dqadd7872 add sNaN12 -1000 -> NaN12 Invalid_operation -dqadd7873 add sNaN13 1000 -> NaN13 Invalid_operation -dqadd7874 add sNaN14 NaN17 -> NaN14 Invalid_operation -dqadd7875 add sNaN15 sNaN18 -> NaN15 Invalid_operation -dqadd7876 add NaN16 sNaN19 -> NaN19 Invalid_operation -dqadd7877 add -Inf +sNaN20 -> NaN20 Invalid_operation -dqadd7878 add -1000 sNaN21 -> NaN21 Invalid_operation -dqadd7879 add 1000 sNaN22 -> NaN22 Invalid_operation -dqadd7880 add Inf sNaN23 -> NaN23 Invalid_operation -dqadd7881 add +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqadd7882 add -NaN26 NaN28 -> -NaN26 -dqadd7883 add -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqadd7884 add 1000 -NaN30 -> -NaN30 -dqadd7885 add 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Here we explore near the boundary of rounding a subnormal to Nmin -dqadd7575 add 1E-6143 -1E-6176 -> 9.99999999999999999999999999999999E-6144 Subnormal -dqadd7576 add -1E-6143 +1E-6176 -> -9.99999999999999999999999999999999E-6144 Subnormal - --- check overflow edge case --- 1234567890123456 -dqadd7972 apply 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqadd7973 add 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7974 add 9999999999999999999999999999999999E+6111 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7975 add 9999999999999999999999999999999999E+6111 1E+6111 -> Infinity Overflow Inexact Rounded -dqadd7976 add 9999999999999999999999999999999999E+6111 9E+6110 -> Infinity Overflow Inexact Rounded -dqadd7977 add 9999999999999999999999999999999999E+6111 8E+6110 -> Infinity Overflow Inexact Rounded -dqadd7978 add 9999999999999999999999999999999999E+6111 7E+6110 -> Infinity Overflow Inexact Rounded -dqadd7979 add 9999999999999999999999999999999999E+6111 6E+6110 -> Infinity Overflow Inexact Rounded -dqadd7980 add 9999999999999999999999999999999999E+6111 5E+6110 -> Infinity Overflow Inexact Rounded -dqadd7981 add 9999999999999999999999999999999999E+6111 4E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7982 add 9999999999999999999999999999999999E+6111 3E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7983 add 9999999999999999999999999999999999E+6111 2E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7984 add 9999999999999999999999999999999999E+6111 1E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded - -dqadd7985 apply -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqadd7986 add -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7987 add -9999999999999999999999999999999999E+6111 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7988 add -9999999999999999999999999999999999E+6111 -1E+6111 -> -Infinity Overflow Inexact Rounded -dqadd7989 add -9999999999999999999999999999999999E+6111 -9E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7990 add -9999999999999999999999999999999999E+6111 -8E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7991 add -9999999999999999999999999999999999E+6111 -7E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7992 add -9999999999999999999999999999999999E+6111 -6E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7993 add -9999999999999999999999999999999999E+6111 -5E+6110 -> -Infinity Overflow Inexact Rounded -dqadd7994 add -9999999999999999999999999999999999E+6111 -4E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7995 add -9999999999999999999999999999999999E+6111 -3E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7996 add -9999999999999999999999999999999999E+6111 -2E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd7997 add -9999999999999999999999999999999999E+6111 -1E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -dqadd71100 add 1e+2 -1e-6143 -> 99.99999999999999999999999999999999 Rounded Inexact -dqadd71101 add 1e+1 -1e-6143 -> 9.999999999999999999999999999999999 Rounded Inexact -dqadd71103 add +1 -1e-6143 -> 0.9999999999999999999999999999999999 Rounded Inexact -dqadd71104 add 1e-1 -1e-6143 -> 0.09999999999999999999999999999999999 Rounded Inexact -dqadd71105 add 1e-2 -1e-6143 -> 0.009999999999999999999999999999999999 Rounded Inexact -dqadd71106 add 1e-3 -1e-6143 -> 0.0009999999999999999999999999999999999 Rounded Inexact -dqadd71107 add 1e-4 -1e-6143 -> 0.00009999999999999999999999999999999999 Rounded Inexact -dqadd71108 add 1e-5 -1e-6143 -> 0.000009999999999999999999999999999999999 Rounded Inexact -dqadd71109 add 1e-6 -1e-6143 -> 9.999999999999999999999999999999999E-7 Rounded Inexact - -rounding: ceiling -dqadd71110 add -1e+2 +1e-6143 -> -99.99999999999999999999999999999999 Rounded Inexact -dqadd71111 add -1e+1 +1e-6143 -> -9.999999999999999999999999999999999 Rounded Inexact -dqadd71113 add -1 +1e-6143 -> -0.9999999999999999999999999999999999 Rounded Inexact -dqadd71114 add -1e-1 +1e-6143 -> -0.09999999999999999999999999999999999 Rounded Inexact -dqadd71115 add -1e-2 +1e-6143 -> -0.009999999999999999999999999999999999 Rounded Inexact -dqadd71116 add -1e-3 +1e-6143 -> -0.0009999999999999999999999999999999999 Rounded Inexact -dqadd71117 add -1e-4 +1e-6143 -> -0.00009999999999999999999999999999999999 Rounded Inexact -dqadd71118 add -1e-5 +1e-6143 -> -0.000009999999999999999999999999999999999 Rounded Inexact -dqadd71119 add -1e-6 +1e-6143 -> -9.999999999999999999999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -dqadd71300 add 1E34 -0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71310 add 1E34 -0.51 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71311 add 1E34 -0.501 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71312 add 1E34 -0.5001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71313 add 1E34 -0.50001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71314 add 1E34 -0.500001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71315 add 1E34 -0.5000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71316 add 1E34 -0.50000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71317 add 1E34 -0.500000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71318 add 1E34 -0.5000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71319 add 1E34 -0.50000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71320 add 1E34 -0.500000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71321 add 1E34 -0.5000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71322 add 1E34 -0.50000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71323 add 1E34 -0.500000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71324 add 1E34 -0.5000000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71325 add 1E34 -0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71326 add 1E34 -0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71327 add 1E34 -0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71328 add 1E34 -0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71329 add 1E34 -0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71330 add 1E34 -0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71331 add 1E34 -0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71332 add 1E34 -0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71333 add 1E34 -0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71334 add 1E34 -0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71335 add 1E34 -0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71336 add 1E34 -0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71337 add 1E34 -0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71338 add 1E34 -0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71339 add 1E34 -0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded - -dqadd71340 add 1E34 -5000000.000010001 -> 9999999999999999999999999995000000 Inexact Rounded -dqadd71341 add 1E34 -5000000.000000001 -> 9999999999999999999999999995000000 Inexact Rounded - -dqadd71349 add 9999999999999999999999999999999999 0.4 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71350 add 9999999999999999999999999999999999 0.49 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71351 add 9999999999999999999999999999999999 0.499 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71352 add 9999999999999999999999999999999999 0.4999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71353 add 9999999999999999999999999999999999 0.49999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71354 add 9999999999999999999999999999999999 0.499999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71355 add 9999999999999999999999999999999999 0.4999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71356 add 9999999999999999999999999999999999 0.49999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71357 add 9999999999999999999999999999999999 0.499999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71358 add 9999999999999999999999999999999999 0.4999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71359 add 9999999999999999999999999999999999 0.49999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71360 add 9999999999999999999999999999999999 0.499999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71361 add 9999999999999999999999999999999999 0.4999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71362 add 9999999999999999999999999999999999 0.49999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71363 add 9999999999999999999999999999999999 0.499999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71364 add 9999999999999999999999999999999999 0.4999999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd71365 add 9999999999999999999999999999999999 0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71367 add 9999999999999999999999999999999999 0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71368 add 9999999999999999999999999999999999 0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71369 add 9999999999999999999999999999999999 0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71370 add 9999999999999999999999999999999999 0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71371 add 9999999999999999999999999999999999 0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71372 add 9999999999999999999999999999999999 0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71373 add 9999999999999999999999999999999999 0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71374 add 9999999999999999999999999999999999 0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71375 add 9999999999999999999999999999999999 0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71376 add 9999999999999999999999999999999999 0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71377 add 9999999999999999999999999999999999 0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71378 add 9999999999999999999999999999999999 0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71379 add 9999999999999999999999999999999999 0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71380 add 9999999999999999999999999999999999 0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71381 add 9999999999999999999999999999999999 0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71382 add 9999999999999999999999999999999999 0.5000000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71383 add 9999999999999999999999999999999999 0.500000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71384 add 9999999999999999999999999999999999 0.50000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71385 add 9999999999999999999999999999999999 0.5000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71386 add 9999999999999999999999999999999999 0.500000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71387 add 9999999999999999999999999999999999 0.50000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71388 add 9999999999999999999999999999999999 0.5000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71389 add 9999999999999999999999999999999999 0.500000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71390 add 9999999999999999999999999999999999 0.50000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71391 add 9999999999999999999999999999999999 0.5000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71392 add 9999999999999999999999999999999999 0.500001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71393 add 9999999999999999999999999999999999 0.50001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71394 add 9999999999999999999999999999999999 0.5001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71395 add 9999999999999999999999999999999999 0.501 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd71396 add 9999999999999999999999999999999999 0.51 -> 1.000000000000000000000000000000000E+34 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -dqadd71420 add 0 1.123456789987654321123456789012345 -> 1.123456789987654321123456789012345 -dqadd71421 add 0 1.123456789987654321123456789012345E-1 -> 0.1123456789987654321123456789012345 -dqadd71422 add 0 1.123456789987654321123456789012345E-2 -> 0.01123456789987654321123456789012345 -dqadd71423 add 0 1.123456789987654321123456789012345E-3 -> 0.001123456789987654321123456789012345 -dqadd71424 add 0 1.123456789987654321123456789012345E-4 -> 0.0001123456789987654321123456789012345 -dqadd71425 add 0 1.123456789987654321123456789012345E-5 -> 0.00001123456789987654321123456789012345 -dqadd71426 add 0 1.123456789987654321123456789012345E-6 -> 0.000001123456789987654321123456789012345 -dqadd71427 add 0 1.123456789987654321123456789012345E-7 -> 1.123456789987654321123456789012345E-7 -dqadd71428 add 0 1.123456789987654321123456789012345E-8 -> 1.123456789987654321123456789012345E-8 -dqadd71429 add 0 1.123456789987654321123456789012345E-9 -> 1.123456789987654321123456789012345E-9 -dqadd71430 add 0 1.123456789987654321123456789012345E-10 -> 1.123456789987654321123456789012345E-10 -dqadd71431 add 0 1.123456789987654321123456789012345E-11 -> 1.123456789987654321123456789012345E-11 -dqadd71432 add 0 1.123456789987654321123456789012345E-12 -> 1.123456789987654321123456789012345E-12 -dqadd71433 add 0 1.123456789987654321123456789012345E-13 -> 1.123456789987654321123456789012345E-13 -dqadd71434 add 0 1.123456789987654321123456789012345E-14 -> 1.123456789987654321123456789012345E-14 -dqadd71435 add 0 1.123456789987654321123456789012345E-15 -> 1.123456789987654321123456789012345E-15 -dqadd71436 add 0 1.123456789987654321123456789012345E-16 -> 1.123456789987654321123456789012345E-16 -dqadd71437 add 0 1.123456789987654321123456789012345E-17 -> 1.123456789987654321123456789012345E-17 -dqadd71438 add 0 1.123456789987654321123456789012345E-18 -> 1.123456789987654321123456789012345E-18 -dqadd71439 add 0 1.123456789987654321123456789012345E-19 -> 1.123456789987654321123456789012345E-19 -dqadd71440 add 0 1.123456789987654321123456789012345E-20 -> 1.123456789987654321123456789012345E-20 -dqadd71441 add 0 1.123456789987654321123456789012345E-21 -> 1.123456789987654321123456789012345E-21 -dqadd71442 add 0 1.123456789987654321123456789012345E-22 -> 1.123456789987654321123456789012345E-22 -dqadd71443 add 0 1.123456789987654321123456789012345E-23 -> 1.123456789987654321123456789012345E-23 -dqadd71444 add 0 1.123456789987654321123456789012345E-24 -> 1.123456789987654321123456789012345E-24 -dqadd71445 add 0 1.123456789987654321123456789012345E-25 -> 1.123456789987654321123456789012345E-25 -dqadd71446 add 0 1.123456789987654321123456789012345E-26 -> 1.123456789987654321123456789012345E-26 -dqadd71447 add 0 1.123456789987654321123456789012345E-27 -> 1.123456789987654321123456789012345E-27 -dqadd71448 add 0 1.123456789987654321123456789012345E-28 -> 1.123456789987654321123456789012345E-28 -dqadd71449 add 0 1.123456789987654321123456789012345E-29 -> 1.123456789987654321123456789012345E-29 -dqadd71450 add 0 1.123456789987654321123456789012345E-30 -> 1.123456789987654321123456789012345E-30 -dqadd71451 add 0 1.123456789987654321123456789012345E-31 -> 1.123456789987654321123456789012345E-31 -dqadd71452 add 0 1.123456789987654321123456789012345E-32 -> 1.123456789987654321123456789012345E-32 -dqadd71453 add 0 1.123456789987654321123456789012345E-33 -> 1.123456789987654321123456789012345E-33 -dqadd71454 add 0 1.123456789987654321123456789012345E-34 -> 1.123456789987654321123456789012345E-34 -dqadd71455 add 0 1.123456789987654321123456789012345E-35 -> 1.123456789987654321123456789012345E-35 -dqadd71456 add 0 1.123456789987654321123456789012345E-36 -> 1.123456789987654321123456789012345E-36 - --- same, reversed 0 -dqadd71460 add 1.123456789987654321123456789012345 0 -> 1.123456789987654321123456789012345 -dqadd71461 add 1.123456789987654321123456789012345E-1 0 -> 0.1123456789987654321123456789012345 -dqadd71462 add 1.123456789987654321123456789012345E-2 0 -> 0.01123456789987654321123456789012345 -dqadd71463 add 1.123456789987654321123456789012345E-3 0 -> 0.001123456789987654321123456789012345 -dqadd71464 add 1.123456789987654321123456789012345E-4 0 -> 0.0001123456789987654321123456789012345 -dqadd71465 add 1.123456789987654321123456789012345E-5 0 -> 0.00001123456789987654321123456789012345 -dqadd71466 add 1.123456789987654321123456789012345E-6 0 -> 0.000001123456789987654321123456789012345 -dqadd71467 add 1.123456789987654321123456789012345E-7 0 -> 1.123456789987654321123456789012345E-7 -dqadd71468 add 1.123456789987654321123456789012345E-8 0 -> 1.123456789987654321123456789012345E-8 -dqadd71469 add 1.123456789987654321123456789012345E-9 0 -> 1.123456789987654321123456789012345E-9 -dqadd71470 add 1.123456789987654321123456789012345E-10 0 -> 1.123456789987654321123456789012345E-10 -dqadd71471 add 1.123456789987654321123456789012345E-11 0 -> 1.123456789987654321123456789012345E-11 -dqadd71472 add 1.123456789987654321123456789012345E-12 0 -> 1.123456789987654321123456789012345E-12 -dqadd71473 add 1.123456789987654321123456789012345E-13 0 -> 1.123456789987654321123456789012345E-13 -dqadd71474 add 1.123456789987654321123456789012345E-14 0 -> 1.123456789987654321123456789012345E-14 -dqadd71475 add 1.123456789987654321123456789012345E-15 0 -> 1.123456789987654321123456789012345E-15 -dqadd71476 add 1.123456789987654321123456789012345E-16 0 -> 1.123456789987654321123456789012345E-16 -dqadd71477 add 1.123456789987654321123456789012345E-17 0 -> 1.123456789987654321123456789012345E-17 -dqadd71478 add 1.123456789987654321123456789012345E-18 0 -> 1.123456789987654321123456789012345E-18 -dqadd71479 add 1.123456789987654321123456789012345E-19 0 -> 1.123456789987654321123456789012345E-19 -dqadd71480 add 1.123456789987654321123456789012345E-20 0 -> 1.123456789987654321123456789012345E-20 -dqadd71481 add 1.123456789987654321123456789012345E-21 0 -> 1.123456789987654321123456789012345E-21 -dqadd71482 add 1.123456789987654321123456789012345E-22 0 -> 1.123456789987654321123456789012345E-22 -dqadd71483 add 1.123456789987654321123456789012345E-23 0 -> 1.123456789987654321123456789012345E-23 -dqadd71484 add 1.123456789987654321123456789012345E-24 0 -> 1.123456789987654321123456789012345E-24 -dqadd71485 add 1.123456789987654321123456789012345E-25 0 -> 1.123456789987654321123456789012345E-25 -dqadd71486 add 1.123456789987654321123456789012345E-26 0 -> 1.123456789987654321123456789012345E-26 -dqadd71487 add 1.123456789987654321123456789012345E-27 0 -> 1.123456789987654321123456789012345E-27 -dqadd71488 add 1.123456789987654321123456789012345E-28 0 -> 1.123456789987654321123456789012345E-28 -dqadd71489 add 1.123456789987654321123456789012345E-29 0 -> 1.123456789987654321123456789012345E-29 -dqadd71490 add 1.123456789987654321123456789012345E-30 0 -> 1.123456789987654321123456789012345E-30 -dqadd71491 add 1.123456789987654321123456789012345E-31 0 -> 1.123456789987654321123456789012345E-31 -dqadd71492 add 1.123456789987654321123456789012345E-32 0 -> 1.123456789987654321123456789012345E-32 -dqadd71493 add 1.123456789987654321123456789012345E-33 0 -> 1.123456789987654321123456789012345E-33 -dqadd71494 add 1.123456789987654321123456789012345E-34 0 -> 1.123456789987654321123456789012345E-34 -dqadd71495 add 1.123456789987654321123456789012345E-35 0 -> 1.123456789987654321123456789012345E-35 -dqadd71496 add 1.123456789987654321123456789012345E-36 0 -> 1.123456789987654321123456789012345E-36 - --- same, Es on the 0 -dqadd71500 add 1.123456789987654321123456789012345 0E-0 -> 1.123456789987654321123456789012345 -dqadd71501 add 1.123456789987654321123456789012345 0E-1 -> 1.123456789987654321123456789012345 -dqadd71502 add 1.123456789987654321123456789012345 0E-2 -> 1.123456789987654321123456789012345 -dqadd71503 add 1.123456789987654321123456789012345 0E-3 -> 1.123456789987654321123456789012345 -dqadd71504 add 1.123456789987654321123456789012345 0E-4 -> 1.123456789987654321123456789012345 -dqadd71505 add 1.123456789987654321123456789012345 0E-5 -> 1.123456789987654321123456789012345 -dqadd71506 add 1.123456789987654321123456789012345 0E-6 -> 1.123456789987654321123456789012345 -dqadd71507 add 1.123456789987654321123456789012345 0E-7 -> 1.123456789987654321123456789012345 -dqadd71508 add 1.123456789987654321123456789012345 0E-8 -> 1.123456789987654321123456789012345 -dqadd71509 add 1.123456789987654321123456789012345 0E-9 -> 1.123456789987654321123456789012345 -dqadd71510 add 1.123456789987654321123456789012345 0E-10 -> 1.123456789987654321123456789012345 -dqadd71511 add 1.123456789987654321123456789012345 0E-11 -> 1.123456789987654321123456789012345 -dqadd71512 add 1.123456789987654321123456789012345 0E-12 -> 1.123456789987654321123456789012345 -dqadd71513 add 1.123456789987654321123456789012345 0E-13 -> 1.123456789987654321123456789012345 -dqadd71514 add 1.123456789987654321123456789012345 0E-14 -> 1.123456789987654321123456789012345 -dqadd71515 add 1.123456789987654321123456789012345 0E-15 -> 1.123456789987654321123456789012345 -dqadd71516 add 1.123456789987654321123456789012345 0E-16 -> 1.123456789987654321123456789012345 -dqadd71517 add 1.123456789987654321123456789012345 0E-17 -> 1.123456789987654321123456789012345 -dqadd71518 add 1.123456789987654321123456789012345 0E-18 -> 1.123456789987654321123456789012345 -dqadd71519 add 1.123456789987654321123456789012345 0E-19 -> 1.123456789987654321123456789012345 -dqadd71520 add 1.123456789987654321123456789012345 0E-20 -> 1.123456789987654321123456789012345 -dqadd71521 add 1.123456789987654321123456789012345 0E-21 -> 1.123456789987654321123456789012345 -dqadd71522 add 1.123456789987654321123456789012345 0E-22 -> 1.123456789987654321123456789012345 -dqadd71523 add 1.123456789987654321123456789012345 0E-23 -> 1.123456789987654321123456789012345 -dqadd71524 add 1.123456789987654321123456789012345 0E-24 -> 1.123456789987654321123456789012345 -dqadd71525 add 1.123456789987654321123456789012345 0E-25 -> 1.123456789987654321123456789012345 -dqadd71526 add 1.123456789987654321123456789012345 0E-26 -> 1.123456789987654321123456789012345 -dqadd71527 add 1.123456789987654321123456789012345 0E-27 -> 1.123456789987654321123456789012345 -dqadd71528 add 1.123456789987654321123456789012345 0E-28 -> 1.123456789987654321123456789012345 -dqadd71529 add 1.123456789987654321123456789012345 0E-29 -> 1.123456789987654321123456789012345 -dqadd71530 add 1.123456789987654321123456789012345 0E-30 -> 1.123456789987654321123456789012345 -dqadd71531 add 1.123456789987654321123456789012345 0E-31 -> 1.123456789987654321123456789012345 -dqadd71532 add 1.123456789987654321123456789012345 0E-32 -> 1.123456789987654321123456789012345 -dqadd71533 add 1.123456789987654321123456789012345 0E-33 -> 1.123456789987654321123456789012345 --- next four flag Rounded because the 0 extends the result -dqadd71534 add 1.123456789987654321123456789012345 0E-34 -> 1.123456789987654321123456789012345 Rounded -dqadd71535 add 1.123456789987654321123456789012345 0E-35 -> 1.123456789987654321123456789012345 Rounded -dqadd71536 add 1.123456789987654321123456789012345 0E-36 -> 1.123456789987654321123456789012345 Rounded -dqadd71537 add 1.123456789987654321123456789012345 0E-37 -> 1.123456789987654321123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -dqadd71600 add 0 0E-19 -> 0E-19 -dqadd71601 add -0 0E-19 -> 0E-19 -dqadd71602 add 0 -0E-19 -> 0E-19 -dqadd71603 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71611 add -11 11 -> 0 -dqadd71612 add 11 -11 -> 0 - -rounding: half_down --- exact zeros from zeros -dqadd71620 add 0 0E-19 -> 0E-19 -dqadd71621 add -0 0E-19 -> 0E-19 -dqadd71622 add 0 -0E-19 -> 0E-19 -dqadd71623 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71631 add -11 11 -> 0 -dqadd71632 add 11 -11 -> 0 - -rounding: half_even --- exact zeros from zeros -dqadd71640 add 0 0E-19 -> 0E-19 -dqadd71641 add -0 0E-19 -> 0E-19 -dqadd71642 add 0 -0E-19 -> 0E-19 -dqadd71643 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71651 add -11 11 -> 0 -dqadd71652 add 11 -11 -> 0 - -rounding: up --- exact zeros from zeros -dqadd71660 add 0 0E-19 -> 0E-19 -dqadd71661 add -0 0E-19 -> 0E-19 -dqadd71662 add 0 -0E-19 -> 0E-19 -dqadd71663 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71671 add -11 11 -> 0 -dqadd71672 add 11 -11 -> 0 - -rounding: down --- exact zeros from zeros -dqadd71680 add 0 0E-19 -> 0E-19 -dqadd71681 add -0 0E-19 -> 0E-19 -dqadd71682 add 0 -0E-19 -> 0E-19 -dqadd71683 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71691 add -11 11 -> 0 -dqadd71692 add 11 -11 -> 0 - -rounding: ceiling --- exact zeros from zeros -dqadd71700 add 0 0E-19 -> 0E-19 -dqadd71701 add -0 0E-19 -> 0E-19 -dqadd71702 add 0 -0E-19 -> 0E-19 -dqadd71703 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71711 add -11 11 -> 0 -dqadd71712 add 11 -11 -> 0 - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -dqadd71720 add 0 0E-19 -> 0E-19 -dqadd71721 add -0 0E-19 -> -0E-19 -- * -dqadd71722 add 0 -0E-19 -> -0E-19 -- * -dqadd71723 add -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd71731 add -11 11 -> -0 -- * -dqadd71732 add 11 -11 -> -0 -- * - --- Examples from SQL proposal (Krishna Kulkarni) -dqadd71741 add 130E-2 120E-2 -> 2.50 -dqadd71742 add 130E-2 12E-1 -> 2.50 -dqadd71743 add 130E-2 1E0 -> 2.30 -dqadd71744 add 1E2 1E4 -> 1.01E+4 -dqadd71745 add 130E-2 -120E-2 -> 0.10 -dqadd71746 add 130E-2 -12E-1 -> 0.10 -dqadd71747 add 130E-2 -1E0 -> 0.30 -dqadd71748 add 1E2 -1E4 -> -9.9E+3 - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -dqadd75001 add 1239876543211234567894567890123456 1 -> 1239876543211234567894567890123457 -dqadd75002 add 1239876543211234567894567890123456 0.6 -> 1239876543211234567894567890123457 Inexact Rounded -dqadd75003 add 1239876543211234567894567890123456 0.06 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75004 add 1239876543211234567894567890123456 6E-3 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75005 add 1239876543211234567894567890123456 6E-4 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75006 add 1239876543211234567894567890123456 6E-5 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75007 add 1239876543211234567894567890123456 6E-6 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75008 add 1239876543211234567894567890123456 6E-7 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75009 add 1239876543211234567894567890123456 6E-8 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75010 add 1239876543211234567894567890123456 6E-9 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75011 add 1239876543211234567894567890123456 6E-10 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75012 add 1239876543211234567894567890123456 6E-11 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75013 add 1239876543211234567894567890123456 6E-12 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75014 add 1239876543211234567894567890123456 6E-13 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75015 add 1239876543211234567894567890123456 6E-14 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75016 add 1239876543211234567894567890123456 6E-15 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75017 add 1239876543211234567894567890123456 6E-16 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75018 add 1239876543211234567894567890123456 6E-17 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75019 add 1239876543211234567894567890123456 6E-18 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75020 add 1239876543211234567894567890123456 6E-19 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd75021 add 1239876543211234567894567890123456 6E-20 -> 1239876543211234567894567890123456 Inexact Rounded - --- widening second argument at gap -dqadd75030 add 12398765432112345678945678 1 -> 12398765432112345678945679 -dqadd75031 add 12398765432112345678945678 0.1 -> 12398765432112345678945678.1 -dqadd75032 add 12398765432112345678945678 0.12 -> 12398765432112345678945678.12 -dqadd75033 add 12398765432112345678945678 0.123 -> 12398765432112345678945678.123 -dqadd75034 add 12398765432112345678945678 0.1234 -> 12398765432112345678945678.1234 -dqadd75035 add 12398765432112345678945678 0.12345 -> 12398765432112345678945678.12345 -dqadd75036 add 12398765432112345678945678 0.123456 -> 12398765432112345678945678.123456 -dqadd75037 add 12398765432112345678945678 0.1234567 -> 12398765432112345678945678.1234567 -dqadd75038 add 12398765432112345678945678 0.12345678 -> 12398765432112345678945678.12345678 -dqadd75039 add 12398765432112345678945678 0.123456789 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75040 add 12398765432112345678945678 0.123456785 -> 12398765432112345678945678.12345678 Inexact Rounded -dqadd75041 add 12398765432112345678945678 0.1234567850 -> 12398765432112345678945678.12345678 Inexact Rounded -dqadd75042 add 12398765432112345678945678 0.1234567851 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75043 add 12398765432112345678945678 0.12345678501 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75044 add 12398765432112345678945678 0.123456785001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75045 add 12398765432112345678945678 0.1234567850001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75046 add 12398765432112345678945678 0.12345678500001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75047 add 12398765432112345678945678 0.123456785000001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75048 add 12398765432112345678945678 0.1234567850000001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd75049 add 12398765432112345678945678 0.1234567850000000 -> 12398765432112345678945678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -dqadd75050 add 12398765432112345678945678 0.0234567750000000 -> 12398765432112345678945678.02345678 Inexact Rounded -dqadd75051 add 12398765432112345678945678 0.0034567750000000 -> 12398765432112345678945678.00345678 Inexact Rounded -dqadd75052 add 12398765432112345678945678 0.0004567750000000 -> 12398765432112345678945678.00045678 Inexact Rounded -dqadd75053 add 12398765432112345678945678 0.0000567750000000 -> 12398765432112345678945678.00005678 Inexact Rounded -dqadd75054 add 12398765432112345678945678 0.0000067750000000 -> 12398765432112345678945678.00000678 Inexact Rounded -dqadd75055 add 12398765432112345678945678 0.0000007750000000 -> 12398765432112345678945678.00000078 Inexact Rounded -dqadd75056 add 12398765432112345678945678 0.0000000750000000 -> 12398765432112345678945678.00000008 Inexact Rounded -dqadd75057 add 12398765432112345678945678 0.0000000050000000 -> 12398765432112345678945678.00000000 Inexact Rounded -dqadd75060 add 12398765432112345678945678 0.0234567750000001 -> 12398765432112345678945678.02345678 Inexact Rounded -dqadd75061 add 12398765432112345678945678 0.0034567750000001 -> 12398765432112345678945678.00345678 Inexact Rounded -dqadd75062 add 12398765432112345678945678 0.0004567750000001 -> 12398765432112345678945678.00045678 Inexact Rounded -dqadd75063 add 12398765432112345678945678 0.0000567750000001 -> 12398765432112345678945678.00005678 Inexact Rounded -dqadd75064 add 12398765432112345678945678 0.0000067750000001 -> 12398765432112345678945678.00000678 Inexact Rounded -dqadd75065 add 12398765432112345678945678 0.0000007750000001 -> 12398765432112345678945678.00000078 Inexact Rounded -dqadd75066 add 12398765432112345678945678 0.0000000750000001 -> 12398765432112345678945678.00000008 Inexact Rounded -dqadd75067 add 12398765432112345678945678 0.0000000050000001 -> 12398765432112345678945678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -dqadd75070 add 12398765432112345678945678 1E-8 -> 12398765432112345678945678.00000001 -dqadd75071 add 12398765432112345678945678 1E-9 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75072 add 12398765432112345678945678 1E-10 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75073 add 12398765432112345678945678 1E-11 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75074 add 12398765432112345678945678 1E-12 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75075 add 12398765432112345678945678 1E-13 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75076 add 12398765432112345678945678 1E-14 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75077 add 12398765432112345678945678 1E-15 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75078 add 12398765432112345678945678 1E-16 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75079 add 12398765432112345678945678 1E-17 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75080 add 12398765432112345678945678 1E-18 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75081 add 12398765432112345678945678 1E-19 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75082 add 12398765432112345678945678 1E-20 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75083 add 12398765432112345678945678 1E-25 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75084 add 12398765432112345678945678 1E-30 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75085 add 12398765432112345678945678 1E-31 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75086 add 12398765432112345678945678 1E-32 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75087 add 12398765432112345678945678 1E-33 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75088 add 12398765432112345678945678 1E-34 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd75089 add 12398765432112345678945678 1E-35 -> 12398765432112345678945678.00000001 Inexact Rounded - --- Null tests -dqadd9990 add 10 # -> NaN Invalid_operation -dqadd9991 add # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqAdd.decTest -- decQuad addition -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decQuads only; all arguments are +-- representable in a decQuad +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- [first group are 'quick confidence check'] +dqadd001 add 1 1 -> 2 +dqadd002 add 2 3 -> 5 +dqadd003 add '5.75' '3.3' -> 9.05 +dqadd004 add '5' '-3' -> 2 +dqadd005 add '-5' '-3' -> -8 +dqadd006 add '-7' '2.5' -> -4.5 +dqadd007 add '0.7' '0.3' -> 1.0 +dqadd008 add '1.25' '1.25' -> 2.50 +dqadd009 add '1.23456789' '1.00000000' -> '2.23456789' +dqadd010 add '1.23456789' '1.00000011' -> '2.23456800' + +-- 1234567890123456 1234567890123456 +dqadd011 add '0.4444444444444444444444444444444446' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Inexact Rounded +dqadd012 add '0.4444444444444444444444444444444445' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Rounded +dqadd013 add '0.4444444444444444444444444444444444' '0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' +dqadd014 add '4444444444444444444444444444444444' '0.49' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd015 add '4444444444444444444444444444444444' '0.499' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd016 add '4444444444444444444444444444444444' '0.4999' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd017 add '4444444444444444444444444444444444' '0.5000' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd018 add '4444444444444444444444444444444444' '0.5001' -> '4444444444444444444444444444444445' Inexact Rounded +dqadd019 add '4444444444444444444444444444444444' '0.501' -> '4444444444444444444444444444444445' Inexact Rounded +dqadd020 add '4444444444444444444444444444444444' '0.51' -> '4444444444444444444444444444444445' Inexact Rounded + +dqadd021 add 0 1 -> 1 +dqadd022 add 1 1 -> 2 +dqadd023 add 2 1 -> 3 +dqadd024 add 3 1 -> 4 +dqadd025 add 4 1 -> 5 +dqadd026 add 5 1 -> 6 +dqadd027 add 6 1 -> 7 +dqadd028 add 7 1 -> 8 +dqadd029 add 8 1 -> 9 +dqadd030 add 9 1 -> 10 + +-- some carrying effects +dqadd031 add '0.9998' '0.0000' -> '0.9998' +dqadd032 add '0.9998' '0.0001' -> '0.9999' +dqadd033 add '0.9998' '0.0002' -> '1.0000' +dqadd034 add '0.9998' '0.0003' -> '1.0001' + +dqadd035 add '70' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd036 add '700' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd037 add '7000' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd038 add '70000' '10000e+34' -> '1.000000000000000000000000000000001E+38' Inexact Rounded +dqadd039 add '700000' '10000e+34' -> '1.000000000000000000000000000000007E+38' Rounded + +-- symmetry: +dqadd040 add '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd041 add '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd042 add '10000e+34' '7000' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd044 add '10000e+34' '70000' -> '1.000000000000000000000000000000001E+38' Inexact Rounded +dqadd045 add '10000e+34' '700000' -> '1.000000000000000000000000000000007E+38' Rounded + +-- same, without rounding +dqadd046 add '10000e+9' '7' -> '10000000000007' +dqadd047 add '10000e+9' '70' -> '10000000000070' +dqadd048 add '10000e+9' '700' -> '10000000000700' +dqadd049 add '10000e+9' '7000' -> '10000000007000' +dqadd050 add '10000e+9' '70000' -> '10000000070000' +dqadd051 add '10000e+9' '700000' -> '10000000700000' +dqadd052 add '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +dqadd053 add '12' '7.00' -> '19.00' +dqadd054 add '1.3' '-1.07' -> '0.23' +dqadd055 add '1.3' '-1.30' -> '0.00' +dqadd056 add '1.3' '-2.07' -> '-0.77' +dqadd057 add '1E+2' '1E+4' -> '1.01E+4' + +-- leading zero preservation +dqadd061 add 1 '0.0001' -> '1.0001' +dqadd062 add 1 '0.00001' -> '1.00001' +dqadd063 add 1 '0.000001' -> '1.000001' +dqadd064 add 1 '0.0000001' -> '1.0000001' +dqadd065 add 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +dqadd070 add 1 0 -> 1 +dqadd071 add 1 0. -> 1 +dqadd072 add 1 .0 -> 1.0 +dqadd073 add 1 0.0 -> 1.0 +dqadd074 add 1 0.00 -> 1.00 +dqadd075 add 0 1 -> 1 +dqadd076 add 0. 1 -> 1 +dqadd077 add .0 1 -> 1.0 +dqadd078 add 0.0 1 -> 1.0 +dqadd079 add 0.00 1 -> 1.00 + +-- some carries +dqadd080 add 999999998 1 -> 999999999 +dqadd081 add 999999999 1 -> 1000000000 +dqadd082 add 99999999 1 -> 100000000 +dqadd083 add 9999999 1 -> 10000000 +dqadd084 add 999999 1 -> 1000000 +dqadd085 add 99999 1 -> 100000 +dqadd086 add 9999 1 -> 10000 +dqadd087 add 999 1 -> 1000 +dqadd088 add 99 1 -> 100 +dqadd089 add 9 1 -> 10 + + +-- more LHS swaps +dqadd090 add '-56267E-10' 0 -> '-0.0000056267' +dqadd091 add '-56267E-6' 0 -> '-0.056267' +dqadd092 add '-56267E-5' 0 -> '-0.56267' +dqadd093 add '-56267E-4' 0 -> '-5.6267' +dqadd094 add '-56267E-3' 0 -> '-56.267' +dqadd095 add '-56267E-2' 0 -> '-562.67' +dqadd096 add '-56267E-1' 0 -> '-5626.7' +dqadd097 add '-56267E-0' 0 -> '-56267' +dqadd098 add '-5E-10' 0 -> '-5E-10' +dqadd099 add '-5E-7' 0 -> '-5E-7' +dqadd100 add '-5E-6' 0 -> '-0.000005' +dqadd101 add '-5E-5' 0 -> '-0.00005' +dqadd102 add '-5E-4' 0 -> '-0.0005' +dqadd103 add '-5E-1' 0 -> '-0.5' +dqadd104 add '-5E0' 0 -> '-5' +dqadd105 add '-5E1' 0 -> '-50' +dqadd106 add '-5E5' 0 -> '-500000' +dqadd107 add '-5E33' 0 -> '-5000000000000000000000000000000000' +dqadd108 add '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded +dqadd109 add '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded +dqadd110 add '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded +dqadd111 add '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded + +-- more RHS swaps +dqadd113 add 0 '-56267E-10' -> '-0.0000056267' +dqadd114 add 0 '-56267E-6' -> '-0.056267' +dqadd116 add 0 '-56267E-5' -> '-0.56267' +dqadd117 add 0 '-56267E-4' -> '-5.6267' +dqadd119 add 0 '-56267E-3' -> '-56.267' +dqadd120 add 0 '-56267E-2' -> '-562.67' +dqadd121 add 0 '-56267E-1' -> '-5626.7' +dqadd122 add 0 '-56267E-0' -> '-56267' +dqadd123 add 0 '-5E-10' -> '-5E-10' +dqadd124 add 0 '-5E-7' -> '-5E-7' +dqadd125 add 0 '-5E-6' -> '-0.000005' +dqadd126 add 0 '-5E-5' -> '-0.00005' +dqadd127 add 0 '-5E-4' -> '-0.0005' +dqadd128 add 0 '-5E-1' -> '-0.5' +dqadd129 add 0 '-5E0' -> '-5' +dqadd130 add 0 '-5E1' -> '-50' +dqadd131 add 0 '-5E5' -> '-500000' +dqadd132 add 0 '-5E33' -> '-5000000000000000000000000000000000' +dqadd133 add 0 '-5E34' -> '-5.000000000000000000000000000000000E+34' Rounded +dqadd134 add 0 '-5E35' -> '-5.000000000000000000000000000000000E+35' Rounded +dqadd135 add 0 '-5E36' -> '-5.000000000000000000000000000000000E+36' Rounded +dqadd136 add 0 '-5E100' -> '-5.000000000000000000000000000000000E+100' Rounded + +-- related +dqadd137 add 1 '0E-39' -> '1.000000000000000000000000000000000' Rounded +dqadd138 add -1 '0E-39' -> '-1.000000000000000000000000000000000' Rounded +dqadd139 add '0E-39' 1 -> '1.000000000000000000000000000000000' Rounded +dqadd140 add '0E-39' -1 -> '-1.000000000000000000000000000000000' Rounded +dqadd141 add 1E+29 0.0000 -> '100000000000000000000000000000.0000' +dqadd142 add 1E+29 0.00000 -> '100000000000000000000000000000.0000' Rounded +dqadd143 add 0.000 1E+30 -> '1000000000000000000000000000000.000' +dqadd144 add 0.0000 1E+30 -> '1000000000000000000000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +dqadd146 add '00.0' 0 -> '0.0' +dqadd147 add '0.00' 0 -> '0.00' +dqadd148 add 0 '0.00' -> '0.00' +dqadd149 add 0 '00.0' -> '0.0' +dqadd150 add '00.0' '0.00' -> '0.00' +dqadd151 add '0.00' '00.0' -> '0.00' +dqadd152 add '3' '.3' -> '3.3' +dqadd153 add '3.' '.3' -> '3.3' +dqadd154 add '3.0' '.3' -> '3.3' +dqadd155 add '3.00' '.3' -> '3.30' +dqadd156 add '3' '3' -> '6' +dqadd157 add '3' '+3' -> '6' +dqadd158 add '3' '-3' -> '0' +dqadd159 add '0.3' '-0.3' -> '0.0' +dqadd160 add '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +dqadd161 add '1E+12' '-1' -> '999999999999' +dqadd162 add '1E+12' '1.11' -> '1000000000001.11' +dqadd163 add '1.11' '1E+12' -> '1000000000001.11' +dqadd164 add '-1' '1E+12' -> '999999999999' +dqadd165 add '7E+12' '-1' -> '6999999999999' +dqadd166 add '7E+12' '1.11' -> '7000000000001.11' +dqadd167 add '1.11' '7E+12' -> '7000000000001.11' +dqadd168 add '-1' '7E+12' -> '6999999999999' + +rounding: half_up +dqadd170 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555567' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd171 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555566' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd172 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555565' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd173 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555564' -> '5.000000000000000000000000000000000' Inexact Rounded +dqadd174 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555553' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd175 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555552' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd176 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555551' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd177 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555550' -> '4.999999999999999999999999999999999' Rounded +dqadd178 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555545' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd179 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555544' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd180 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555543' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd181 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555542' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd182 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555541' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd183 add '4.444444444444444444444444444444444' '0.5555555555555555555555555555555540' -> '4.999999999999999999999999999999998' Rounded + +-- and some more, including residue effects and different roundings +rounding: half_up +dqadd200 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd201 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd202 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd203 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd204 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd205 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd206 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd207 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd208 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd209 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd210 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd211 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd212 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd213 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd214 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd215 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd216 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd217 add '1231234567890123456784560123456789' 1.000000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd218 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd219 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded + +rounding: half_even +dqadd220 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd221 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd222 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd223 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd224 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd225 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd226 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd227 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd228 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd229 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd230 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd231 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd232 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd233 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd234 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd235 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd236 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd237 add '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd238 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd239 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded +-- critical few with even bottom digit... +dqadd240 add '1231234567890123456784560123456788' 0.499999999 -> '1231234567890123456784560123456788' Inexact Rounded +dqadd241 add '1231234567890123456784560123456788' 0.5 -> '1231234567890123456784560123456788' Inexact Rounded +dqadd242 add '1231234567890123456784560123456788' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded + +rounding: down +dqadd250 add '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd251 add '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd252 add '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd253 add '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd254 add '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd255 add '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd256 add '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd257 add '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd258 add '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd259 add '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd260 add '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd261 add '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd262 add '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd263 add '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd264 add '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd265 add '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd266 add '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd267 add '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd268 add '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd269 add '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +dqadd301 add -1 1 -> 0 +dqadd302 add 0 1 -> 1 +dqadd303 add 1 1 -> 2 +dqadd304 add 12 1 -> 13 +dqadd305 add 98 1 -> 99 +dqadd306 add 99 1 -> 100 +dqadd307 add 100 1 -> 101 +dqadd308 add 101 1 -> 102 +dqadd309 add -1 -1 -> -2 +dqadd310 add 0 -1 -> -1 +dqadd311 add 1 -1 -> 0 +dqadd312 add 12 -1 -> 11 +dqadd313 add 98 -1 -> 97 +dqadd314 add 99 -1 -> 98 +dqadd315 add 100 -1 -> 99 +dqadd316 add 101 -1 -> 100 + +dqadd321 add -0.01 0.01 -> 0.00 +dqadd322 add 0.00 0.01 -> 0.01 +dqadd323 add 0.01 0.01 -> 0.02 +dqadd324 add 0.12 0.01 -> 0.13 +dqadd325 add 0.98 0.01 -> 0.99 +dqadd326 add 0.99 0.01 -> 1.00 +dqadd327 add 1.00 0.01 -> 1.01 +dqadd328 add 1.01 0.01 -> 1.02 +dqadd329 add -0.01 -0.01 -> -0.02 +dqadd330 add 0.00 -0.01 -> -0.01 +dqadd331 add 0.01 -0.01 -> 0.00 +dqadd332 add 0.12 -0.01 -> 0.11 +dqadd333 add 0.98 -0.01 -> 0.97 +dqadd334 add 0.99 -0.01 -> 0.98 +dqadd335 add 1.00 -0.01 -> 0.99 +dqadd336 add 1.01 -0.01 -> 1.00 + +-- some more cases where adding 0 affects the coefficient +dqadd340 add 1E+3 0 -> 1000 +dqadd341 add 1E+33 0 -> 1000000000000000000000000000000000 +dqadd342 add 1E+34 0 -> 1.000000000000000000000000000000000E+34 Rounded +dqadd343 add 1E+35 0 -> 1.000000000000000000000000000000000E+35 Rounded +-- which simply follow from these cases ... +dqadd344 add 1E+3 1 -> 1001 +dqadd345 add 1E+33 1 -> 1000000000000000000000000000000001 +dqadd346 add 1E+34 1 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd347 add 1E+35 1 -> 1.000000000000000000000000000000000E+35 Inexact Rounded +dqadd348 add 1E+3 7 -> 1007 +dqadd349 add 1E+33 7 -> 1000000000000000000000000000000007 +dqadd350 add 1E+34 7 -> 1.000000000000000000000000000000001E+34 Inexact Rounded +dqadd351 add 1E+35 7 -> 1.000000000000000000000000000000000E+35 Inexact Rounded + +-- tryzeros cases +rounding: half_up +dqadd360 add 0E+50 10000E+1 -> 1.0000E+5 +dqadd361 add 0E-50 10000E+1 -> 100000.0000000000000000000000000000 Rounded +dqadd362 add 10000E+1 0E-50 -> 100000.0000000000000000000000000000 Rounded +dqadd363 add 10000E+1 10000E-50 -> 100000.0000000000000000000000000000 Rounded Inexact +dqadd364 add 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0E+6111 +-- 1 234567890123456789012345678901234 + +-- a curiosity from JSR 13 testing +rounding: half_down +dqadd370 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd371 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact +rounding: half_up +dqadd372 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd373 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact +rounding: half_even +dqadd374 add 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd375 add 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact + +-- ulp replacement tests +dqadd400 add 1 77e-32 -> 1.00000000000000000000000000000077 +dqadd401 add 1 77e-33 -> 1.000000000000000000000000000000077 +dqadd402 add 1 77e-34 -> 1.000000000000000000000000000000008 Inexact Rounded +dqadd403 add 1 77e-35 -> 1.000000000000000000000000000000001 Inexact Rounded +dqadd404 add 1 77e-36 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd405 add 1 77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd406 add 1 77e-299 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd410 add 10 77e-32 -> 10.00000000000000000000000000000077 +dqadd411 add 10 77e-33 -> 10.00000000000000000000000000000008 Inexact Rounded +dqadd412 add 10 77e-34 -> 10.00000000000000000000000000000001 Inexact Rounded +dqadd413 add 10 77e-35 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd414 add 10 77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd415 add 10 77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd416 add 10 77e-299 -> 10.00000000000000000000000000000000 Inexact Rounded + +dqadd420 add 77e-32 1 -> 1.00000000000000000000000000000077 +dqadd421 add 77e-33 1 -> 1.000000000000000000000000000000077 +dqadd422 add 77e-34 1 -> 1.000000000000000000000000000000008 Inexact Rounded +dqadd423 add 77e-35 1 -> 1.000000000000000000000000000000001 Inexact Rounded +dqadd424 add 77e-36 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd425 add 77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd426 add 77e-299 1 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd430 add 77e-32 10 -> 10.00000000000000000000000000000077 +dqadd431 add 77e-33 10 -> 10.00000000000000000000000000000008 Inexact Rounded +dqadd432 add 77e-34 10 -> 10.00000000000000000000000000000001 Inexact Rounded +dqadd433 add 77e-35 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd434 add 77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd435 add 77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd436 add 77e-299 10 -> 10.00000000000000000000000000000000 Inexact Rounded + +-- fastpath boundaries +-- 1234567890123456789012345678901234 +dqadd501 add '4444444444444444444444444444444444' '5555555555555555555555555555555555' -> '9999999999999999999999999999999999' +dqadd502 add '4444444444444444444444444444444444' '4555555555555555555555555555555555' -> '8999999999999999999999999999999999' +dqadd503 add '4444444444444444444444444444444444' '3555555555555555555055555555555555' -> '7999999999999999999499999999999999' +dqadd504 add '4444444444444444444444444444444444' '3955555555555555555555555555555555' -> '8399999999999999999999999999999999' +dqadd505 add '4444444444444444444444444444444444' '4955555555555555555555555555555555' -> '9399999999999999999999999999999999' +dqadd506 add '4444444444444444444444444444444444' '5955555555555555555555555555555555' -> 1.040000000000000000000000000000000E+34 Inexact Rounded +dqadd511 add '344444444444444444444444444444444' '555555555555555555555555555555555' -> '899999999999999999999999999999999' +dqadd512 add '34444444444444444444444444444444' '55555555555555555555555555555555' -> '89999999999999999999999999999999' +dqadd513 add '3444444444444444444444444444444' '5555555555555555555555555555555' -> '8999999999999999999999999999999' +dqadd514 add '344444444444444444444444444444' '555555555555555555555555555555' -> '899999999999999999999999999999' +dqadd515 add '34444444444444444444444444444' '55555555555555555555555555555' -> '89999999999999999999999999999' +dqadd516 add '3444444444444444444444444444' '5555555555555555555555555555' -> '8999999999999999999999999999' +dqadd517 add '344444444444444444444444444' '555555555555555555555555555' -> '899999999999999999999999999' +dqadd518 add '34444444444444444444444444' '55555555555555555555555555' -> '89999999999999999999999999' +dqadd519 add '3444444444444444444444444' '5555555555555555555555555' -> '8999999999999999999999999' +dqadd520 add '344444444444444444444444' '555555555555555555555555' -> '899999999999999999999999' +dqadd521 add '34444444444444444444444' '55555555555555555555555' -> '89999999999999999999999' +dqadd522 add '3444444444444444444444' '5555555555555555555555' -> '8999999999999999999999' +dqadd523 add '4444444444444444444444' '3333333333333333333333' -> '7777777777777777777777' +dqadd524 add '344444444444444444444' '555555555555555555555' -> '899999999999999999999' +dqadd525 add '34444444444444444444' '55555555555555555555' -> '89999999999999999999' +dqadd526 add '3444444444444444444' '5555555555555555555' -> '8999999999999999999' +dqadd527 add '344444444444444444' '555555555555555555' -> '899999999999999999' +dqadd528 add '34444444444444444' '55555555555555555' -> '89999999999999999' +dqadd529 add '3444444444444444' '5555555555555555' -> '8999999999999999' +dqadd530 add '344444444444444' '555555555555555' -> '899999999999999' +dqadd531 add '34444444444444' '55555555555555' -> '89999999999999' +dqadd532 add '3444444444444' '5555555555555' -> '8999999999999' +dqadd533 add '344444444444' '555555555555' -> '899999999999' +dqadd534 add '34444444444' '55555555555' -> '89999999999' +dqadd535 add '3444444444' '5555555555' -> '8999999999' +dqadd536 add '344444444' '555555555' -> '899999999' +dqadd537 add '34444444' '55555555' -> '89999999' +dqadd538 add '3444444' '5555555' -> '8999999' +dqadd539 add '344444' '555555' -> '899999' +dqadd540 add '34444' '55555' -> '89999' +dqadd541 add '3444' '5555' -> '8999' +dqadd542 add '344' '555' -> '899' +dqadd543 add '34' '55' -> '89' +dqadd544 add '3' '5' -> '8' + +dqadd545 add '3000004000000000000000000000000000' '3000000000000040000000000000000000' -> '6000004000000040000000000000000000' +dqadd546 add '3000000400000000000000000000000000' '4000000000000400000000000000000000' -> '7000000400000400000000000000000000' +dqadd547 add '3000000040000000000000000000000000' '5000000000004000000000000000000000' -> '8000000040004000000000000000000000' +dqadd548 add '4000000004000000000000000000000000' '3000000000040000000000000000000000' -> '7000000004040000000000000000000000' +dqadd549 add '4000000000400000000000000000000000' '4000000000400000000000000000000000' -> '8000000000800000000000000000000000' +dqadd550 add '4000000000040000000000000000000000' '5000000004000000000000000000000000' -> '9000000004040000000000000000000000' +dqadd551 add '5000000000004000000000000000000000' '3000000040000000000000000000000000' -> '8000000040004000000000000000000000' +dqadd552 add '5000000000000400000000000000000000' '4000000400000000000000000000000000' -> '9000000400000400000000000000000000' +dqadd553 add '5000000000000040000000000000000000' '5000004000000000000000000000000000' -> 1.000000400000004000000000000000000E+34 Rounded +-- check propagation +dqadd554 add '8999999999999999999999999999999999' '0000000000000000000000000000000001' -> 9000000000000000000000000000000000 +dqadd555 add '0000000000000000000000000000000001' '8999999999999999999999999999999999' -> 9000000000000000000000000000000000 +dqadd556 add '4444444444444444444444444444444444' '4555555555555555555555555555555556' -> 9000000000000000000000000000000000 +dqadd557 add '4555555555555555555555555555555556' '4444444444444444444444444444444444' -> 9000000000000000000000000000000000 + +-- negative ulps +dqadd6440 add 1 -77e-32 -> 0.99999999999999999999999999999923 +dqadd6441 add 1 -77e-33 -> 0.999999999999999999999999999999923 +dqadd6442 add 1 -77e-34 -> 0.9999999999999999999999999999999923 +dqadd6443 add 1 -77e-35 -> 0.9999999999999999999999999999999992 Inexact Rounded +dqadd6444 add 1 -77e-36 -> 0.9999999999999999999999999999999999 Inexact Rounded +dqadd6445 add 1 -77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd6446 add 1 -77e-99 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd6450 add 10 -77e-32 -> 9.99999999999999999999999999999923 +dqadd6451 add 10 -77e-33 -> 9.999999999999999999999999999999923 +dqadd6452 add 10 -77e-34 -> 9.999999999999999999999999999999992 Inexact Rounded +dqadd6453 add 10 -77e-35 -> 9.999999999999999999999999999999999 Inexact Rounded +dqadd6454 add 10 -77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd6455 add 10 -77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd6456 add 10 -77e-99 -> 10.00000000000000000000000000000000 Inexact Rounded + +dqadd6460 add -77e-32 1 -> 0.99999999999999999999999999999923 +dqadd6461 add -77e-33 1 -> 0.999999999999999999999999999999923 +dqadd6462 add -77e-34 1 -> 0.9999999999999999999999999999999923 +dqadd6463 add -77e-35 1 -> 0.9999999999999999999999999999999992 Inexact Rounded +dqadd6464 add -77e-36 1 -> 0.9999999999999999999999999999999999 Inexact Rounded +dqadd6465 add -77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd6466 add -77e-99 1 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd6470 add -77e-32 10 -> 9.99999999999999999999999999999923 +dqadd6471 add -77e-33 10 -> 9.999999999999999999999999999999923 +dqadd6472 add -77e-34 10 -> 9.999999999999999999999999999999992 Inexact Rounded +dqadd6473 add -77e-35 10 -> 9.999999999999999999999999999999999 Inexact Rounded +dqadd6474 add -77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd6475 add -77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd6476 add -77e-99 10 -> 10.00000000000000000000000000000000 Inexact Rounded + +-- negative ulps +dqadd6480 add -1 77e-32 -> -0.99999999999999999999999999999923 +dqadd6481 add -1 77e-33 -> -0.999999999999999999999999999999923 +dqadd6482 add -1 77e-34 -> -0.9999999999999999999999999999999923 +dqadd6483 add -1 77e-35 -> -0.9999999999999999999999999999999992 Inexact Rounded +dqadd6484 add -1 77e-36 -> -0.9999999999999999999999999999999999 Inexact Rounded +dqadd6485 add -1 77e-37 -> -1.000000000000000000000000000000000 Inexact Rounded +dqadd6486 add -1 77e-99 -> -1.000000000000000000000000000000000 Inexact Rounded + +dqadd6490 add -10 77e-32 -> -9.99999999999999999999999999999923 +dqadd6491 add -10 77e-33 -> -9.999999999999999999999999999999923 +dqadd6492 add -10 77e-34 -> -9.999999999999999999999999999999992 Inexact Rounded +dqadd6493 add -10 77e-35 -> -9.999999999999999999999999999999999 Inexact Rounded +dqadd6494 add -10 77e-36 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd6495 add -10 77e-37 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd6496 add -10 77e-99 -> -10.00000000000000000000000000000000 Inexact Rounded + +dqadd6500 add 77e-32 -1 -> -0.99999999999999999999999999999923 +dqadd6501 add 77e-33 -1 -> -0.999999999999999999999999999999923 +dqadd6502 add 77e-34 -1 -> -0.9999999999999999999999999999999923 +dqadd6503 add 77e-35 -1 -> -0.9999999999999999999999999999999992 Inexact Rounded +dqadd6504 add 77e-36 -1 -> -0.9999999999999999999999999999999999 Inexact Rounded +dqadd6505 add 77e-37 -1 -> -1.000000000000000000000000000000000 Inexact Rounded +dqadd6506 add 77e-99 -1 -> -1.000000000000000000000000000000000 Inexact Rounded + +dqadd6510 add 77e-32 -10 -> -9.99999999999999999999999999999923 +dqadd6511 add 77e-33 -10 -> -9.999999999999999999999999999999923 +dqadd6512 add 77e-34 -10 -> -9.999999999999999999999999999999992 Inexact Rounded +dqadd6513 add 77e-35 -10 -> -9.999999999999999999999999999999999 Inexact Rounded +dqadd6514 add 77e-36 -10 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd6515 add 77e-37 -10 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd6516 add 77e-99 -10 -> -10.00000000000000000000000000000000 Inexact Rounded + +-- and some more residue effects and different roundings +rounding: half_up +dqadd6540 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd6541 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6542 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6543 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6544 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6545 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6546 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6547 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6548 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6549 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6550 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6551 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6552 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6553 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6554 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6555 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6556 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd6557 add '9876543219876543216543210123456789' 1.000000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6558 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6559 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +rounding: half_even +dqadd6560 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd6561 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6562 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6563 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6564 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6565 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6566 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6567 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd6568 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6569 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6570 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6571 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6572 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6573 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6574 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6575 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6576 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd6577 add '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6578 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd6579 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +-- critical few with even bottom digit... +dqadd7540 add '9876543219876543216543210123456788' 0.499999999 -> '9876543219876543216543210123456788' Inexact Rounded +dqadd7541 add '9876543219876543216543210123456788' 0.5 -> '9876543219876543216543210123456788' Inexact Rounded +dqadd7542 add '9876543219876543216543210123456788' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded + +rounding: down +dqadd7550 add '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd7551 add '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7552 add '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7553 add '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7554 add '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7555 add '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7556 add '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7557 add '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7558 add '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7559 add '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7560 add '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7561 add '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7562 add '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7563 add '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7564 add '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7565 add '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd7566 add '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd7567 add '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd7568 add '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd7569 add '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +-- more zeros, etc. +rounding: half_even + +dqadd7701 add 5.00 1.00E-3 -> 5.00100 +dqadd7702 add 00.00 0.000 -> 0.000 +dqadd7703 add 00.00 0E-3 -> 0.000 +dqadd7704 add 0E-3 00.00 -> 0.000 + +dqadd7710 add 0E+3 00.00 -> 0.00 +dqadd7711 add 0E+3 00.0 -> 0.0 +dqadd7712 add 0E+3 00. -> 0 +dqadd7713 add 0E+3 00.E+1 -> 0E+1 +dqadd7714 add 0E+3 00.E+2 -> 0E+2 +dqadd7715 add 0E+3 00.E+3 -> 0E+3 +dqadd7716 add 0E+3 00.E+4 -> 0E+3 +dqadd7717 add 0E+3 00.E+5 -> 0E+3 +dqadd7718 add 0E+3 -00.0 -> 0.0 +dqadd7719 add 0E+3 -00. -> 0 +dqadd7731 add 0E+3 -00.E+1 -> 0E+1 + +dqadd7720 add 00.00 0E+3 -> 0.00 +dqadd7721 add 00.0 0E+3 -> 0.0 +dqadd7722 add 00. 0E+3 -> 0 +dqadd7723 add 00.E+1 0E+3 -> 0E+1 +dqadd7724 add 00.E+2 0E+3 -> 0E+2 +dqadd7725 add 00.E+3 0E+3 -> 0E+3 +dqadd7726 add 00.E+4 0E+3 -> 0E+3 +dqadd7727 add 00.E+5 0E+3 -> 0E+3 +dqadd7728 add -00.00 0E+3 -> 0.00 +dqadd7729 add -00.0 0E+3 -> 0.0 +dqadd7730 add -00. 0E+3 -> 0 + +dqadd7732 add 0 0 -> 0 +dqadd7733 add 0 -0 -> 0 +dqadd7734 add -0 0 -> 0 +dqadd7735 add -0 -0 -> -0 -- IEEE 754 special case + +dqadd7736 add 1 -1 -> 0 +dqadd7737 add -1 -1 -> -2 +dqadd7738 add 1 1 -> 2 +dqadd7739 add -1 1 -> 0 + +dqadd7741 add 0 -1 -> -1 +dqadd7742 add -0 -1 -> -1 +dqadd7743 add 0 1 -> 1 +dqadd7744 add -0 1 -> 1 +dqadd7745 add -1 0 -> -1 +dqadd7746 add -1 -0 -> -1 +dqadd7747 add 1 0 -> 1 +dqadd7748 add 1 -0 -> 1 + +dqadd7751 add 0.0 -1 -> -1.0 +dqadd7752 add -0.0 -1 -> -1.0 +dqadd7753 add 0.0 1 -> 1.0 +dqadd7754 add -0.0 1 -> 1.0 +dqadd7755 add -1.0 0 -> -1.0 +dqadd7756 add -1.0 -0 -> -1.0 +dqadd7757 add 1.0 0 -> 1.0 +dqadd7758 add 1.0 -0 -> 1.0 + +dqadd7761 add 0 -1.0 -> -1.0 +dqadd7762 add -0 -1.0 -> -1.0 +dqadd7763 add 0 1.0 -> 1.0 +dqadd7764 add -0 1.0 -> 1.0 +dqadd7765 add -1 0.0 -> -1.0 +dqadd7766 add -1 -0.0 -> -1.0 +dqadd7767 add 1 0.0 -> 1.0 +dqadd7768 add 1 -0.0 -> 1.0 + +dqadd7771 add 0.0 -1.0 -> -1.0 +dqadd7772 add -0.0 -1.0 -> -1.0 +dqadd7773 add 0.0 1.0 -> 1.0 +dqadd7774 add -0.0 1.0 -> 1.0 +dqadd7775 add -1.0 0.0 -> -1.0 +dqadd7776 add -1.0 -0.0 -> -1.0 +dqadd7777 add 1.0 0.0 -> 1.0 +dqadd7778 add 1.0 -0.0 -> 1.0 + +-- Specials +dqadd7780 add -Inf -Inf -> -Infinity +dqadd7781 add -Inf -1000 -> -Infinity +dqadd7782 add -Inf -1 -> -Infinity +dqadd7783 add -Inf -0 -> -Infinity +dqadd7784 add -Inf 0 -> -Infinity +dqadd7785 add -Inf 1 -> -Infinity +dqadd7786 add -Inf 1000 -> -Infinity +dqadd7787 add -1000 -Inf -> -Infinity +dqadd7788 add -Inf -Inf -> -Infinity +dqadd7789 add -1 -Inf -> -Infinity +dqadd7790 add -0 -Inf -> -Infinity +dqadd7791 add 0 -Inf -> -Infinity +dqadd7792 add 1 -Inf -> -Infinity +dqadd7793 add 1000 -Inf -> -Infinity +dqadd7794 add Inf -Inf -> NaN Invalid_operation + +dqadd7800 add Inf -Inf -> NaN Invalid_operation +dqadd7801 add Inf -1000 -> Infinity +dqadd7802 add Inf -1 -> Infinity +dqadd7803 add Inf -0 -> Infinity +dqadd7804 add Inf 0 -> Infinity +dqadd7805 add Inf 1 -> Infinity +dqadd7806 add Inf 1000 -> Infinity +dqadd7807 add Inf Inf -> Infinity +dqadd7808 add -1000 Inf -> Infinity +dqadd7809 add -Inf Inf -> NaN Invalid_operation +dqadd7810 add -1 Inf -> Infinity +dqadd7811 add -0 Inf -> Infinity +dqadd7812 add 0 Inf -> Infinity +dqadd7813 add 1 Inf -> Infinity +dqadd7814 add 1000 Inf -> Infinity +dqadd7815 add Inf Inf -> Infinity + +dqadd7821 add NaN -Inf -> NaN +dqadd7822 add NaN -1000 -> NaN +dqadd7823 add NaN -1 -> NaN +dqadd7824 add NaN -0 -> NaN +dqadd7825 add NaN 0 -> NaN +dqadd7826 add NaN 1 -> NaN +dqadd7827 add NaN 1000 -> NaN +dqadd7828 add NaN Inf -> NaN +dqadd7829 add NaN NaN -> NaN +dqadd7830 add -Inf NaN -> NaN +dqadd7831 add -1000 NaN -> NaN +dqadd7832 add -1 NaN -> NaN +dqadd7833 add -0 NaN -> NaN +dqadd7834 add 0 NaN -> NaN +dqadd7835 add 1 NaN -> NaN +dqadd7836 add 1000 NaN -> NaN +dqadd7837 add Inf NaN -> NaN + +dqadd7841 add sNaN -Inf -> NaN Invalid_operation +dqadd7842 add sNaN -1000 -> NaN Invalid_operation +dqadd7843 add sNaN -1 -> NaN Invalid_operation +dqadd7844 add sNaN -0 -> NaN Invalid_operation +dqadd7845 add sNaN 0 -> NaN Invalid_operation +dqadd7846 add sNaN 1 -> NaN Invalid_operation +dqadd7847 add sNaN 1000 -> NaN Invalid_operation +dqadd7848 add sNaN NaN -> NaN Invalid_operation +dqadd7849 add sNaN sNaN -> NaN Invalid_operation +dqadd7850 add NaN sNaN -> NaN Invalid_operation +dqadd7851 add -Inf sNaN -> NaN Invalid_operation +dqadd7852 add -1000 sNaN -> NaN Invalid_operation +dqadd7853 add -1 sNaN -> NaN Invalid_operation +dqadd7854 add -0 sNaN -> NaN Invalid_operation +dqadd7855 add 0 sNaN -> NaN Invalid_operation +dqadd7856 add 1 sNaN -> NaN Invalid_operation +dqadd7857 add 1000 sNaN -> NaN Invalid_operation +dqadd7858 add Inf sNaN -> NaN Invalid_operation +dqadd7859 add NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqadd7861 add NaN1 -Inf -> NaN1 +dqadd7862 add +NaN2 -1000 -> NaN2 +dqadd7863 add NaN3 1000 -> NaN3 +dqadd7864 add NaN4 Inf -> NaN4 +dqadd7865 add NaN5 +NaN6 -> NaN5 +dqadd7866 add -Inf NaN7 -> NaN7 +dqadd7867 add -1000 NaN8 -> NaN8 +dqadd7868 add 1000 NaN9 -> NaN9 +dqadd7869 add Inf +NaN10 -> NaN10 +dqadd7871 add sNaN11 -Inf -> NaN11 Invalid_operation +dqadd7872 add sNaN12 -1000 -> NaN12 Invalid_operation +dqadd7873 add sNaN13 1000 -> NaN13 Invalid_operation +dqadd7874 add sNaN14 NaN17 -> NaN14 Invalid_operation +dqadd7875 add sNaN15 sNaN18 -> NaN15 Invalid_operation +dqadd7876 add NaN16 sNaN19 -> NaN19 Invalid_operation +dqadd7877 add -Inf +sNaN20 -> NaN20 Invalid_operation +dqadd7878 add -1000 sNaN21 -> NaN21 Invalid_operation +dqadd7879 add 1000 sNaN22 -> NaN22 Invalid_operation +dqadd7880 add Inf sNaN23 -> NaN23 Invalid_operation +dqadd7881 add +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqadd7882 add -NaN26 NaN28 -> -NaN26 +dqadd7883 add -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqadd7884 add 1000 -NaN30 -> -NaN30 +dqadd7885 add 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Here we explore near the boundary of rounding a subnormal to Nmin +dqadd7575 add 1E-6143 -1E-6176 -> 9.99999999999999999999999999999999E-6144 Subnormal +dqadd7576 add -1E-6143 +1E-6176 -> -9.99999999999999999999999999999999E-6144 Subnormal + +-- check overflow edge case +-- 1234567890123456 +dqadd7972 apply 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqadd7973 add 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7974 add 9999999999999999999999999999999999E+6111 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7975 add 9999999999999999999999999999999999E+6111 1E+6111 -> Infinity Overflow Inexact Rounded +dqadd7976 add 9999999999999999999999999999999999E+6111 9E+6110 -> Infinity Overflow Inexact Rounded +dqadd7977 add 9999999999999999999999999999999999E+6111 8E+6110 -> Infinity Overflow Inexact Rounded +dqadd7978 add 9999999999999999999999999999999999E+6111 7E+6110 -> Infinity Overflow Inexact Rounded +dqadd7979 add 9999999999999999999999999999999999E+6111 6E+6110 -> Infinity Overflow Inexact Rounded +dqadd7980 add 9999999999999999999999999999999999E+6111 5E+6110 -> Infinity Overflow Inexact Rounded +dqadd7981 add 9999999999999999999999999999999999E+6111 4E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7982 add 9999999999999999999999999999999999E+6111 3E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7983 add 9999999999999999999999999999999999E+6111 2E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7984 add 9999999999999999999999999999999999E+6111 1E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded + +dqadd7985 apply -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqadd7986 add -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7987 add -9999999999999999999999999999999999E+6111 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7988 add -9999999999999999999999999999999999E+6111 -1E+6111 -> -Infinity Overflow Inexact Rounded +dqadd7989 add -9999999999999999999999999999999999E+6111 -9E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7990 add -9999999999999999999999999999999999E+6111 -8E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7991 add -9999999999999999999999999999999999E+6111 -7E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7992 add -9999999999999999999999999999999999E+6111 -6E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7993 add -9999999999999999999999999999999999E+6111 -5E+6110 -> -Infinity Overflow Inexact Rounded +dqadd7994 add -9999999999999999999999999999999999E+6111 -4E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7995 add -9999999999999999999999999999999999E+6111 -3E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7996 add -9999999999999999999999999999999999E+6111 -2E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd7997 add -9999999999999999999999999999999999E+6111 -1E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +dqadd71100 add 1e+2 -1e-6143 -> 99.99999999999999999999999999999999 Rounded Inexact +dqadd71101 add 1e+1 -1e-6143 -> 9.999999999999999999999999999999999 Rounded Inexact +dqadd71103 add +1 -1e-6143 -> 0.9999999999999999999999999999999999 Rounded Inexact +dqadd71104 add 1e-1 -1e-6143 -> 0.09999999999999999999999999999999999 Rounded Inexact +dqadd71105 add 1e-2 -1e-6143 -> 0.009999999999999999999999999999999999 Rounded Inexact +dqadd71106 add 1e-3 -1e-6143 -> 0.0009999999999999999999999999999999999 Rounded Inexact +dqadd71107 add 1e-4 -1e-6143 -> 0.00009999999999999999999999999999999999 Rounded Inexact +dqadd71108 add 1e-5 -1e-6143 -> 0.000009999999999999999999999999999999999 Rounded Inexact +dqadd71109 add 1e-6 -1e-6143 -> 9.999999999999999999999999999999999E-7 Rounded Inexact + +rounding: ceiling +dqadd71110 add -1e+2 +1e-6143 -> -99.99999999999999999999999999999999 Rounded Inexact +dqadd71111 add -1e+1 +1e-6143 -> -9.999999999999999999999999999999999 Rounded Inexact +dqadd71113 add -1 +1e-6143 -> -0.9999999999999999999999999999999999 Rounded Inexact +dqadd71114 add -1e-1 +1e-6143 -> -0.09999999999999999999999999999999999 Rounded Inexact +dqadd71115 add -1e-2 +1e-6143 -> -0.009999999999999999999999999999999999 Rounded Inexact +dqadd71116 add -1e-3 +1e-6143 -> -0.0009999999999999999999999999999999999 Rounded Inexact +dqadd71117 add -1e-4 +1e-6143 -> -0.00009999999999999999999999999999999999 Rounded Inexact +dqadd71118 add -1e-5 +1e-6143 -> -0.000009999999999999999999999999999999999 Rounded Inexact +dqadd71119 add -1e-6 +1e-6143 -> -9.999999999999999999999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +dqadd71300 add 1E34 -0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71310 add 1E34 -0.51 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71311 add 1E34 -0.501 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71312 add 1E34 -0.5001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71313 add 1E34 -0.50001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71314 add 1E34 -0.500001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71315 add 1E34 -0.5000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71316 add 1E34 -0.50000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71317 add 1E34 -0.500000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71318 add 1E34 -0.5000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71319 add 1E34 -0.50000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71320 add 1E34 -0.500000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71321 add 1E34 -0.5000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71322 add 1E34 -0.50000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71323 add 1E34 -0.500000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71324 add 1E34 -0.5000000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71325 add 1E34 -0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71326 add 1E34 -0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71327 add 1E34 -0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71328 add 1E34 -0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71329 add 1E34 -0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71330 add 1E34 -0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71331 add 1E34 -0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71332 add 1E34 -0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71333 add 1E34 -0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71334 add 1E34 -0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71335 add 1E34 -0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71336 add 1E34 -0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71337 add 1E34 -0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71338 add 1E34 -0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71339 add 1E34 -0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded + +dqadd71340 add 1E34 -5000000.000010001 -> 9999999999999999999999999995000000 Inexact Rounded +dqadd71341 add 1E34 -5000000.000000001 -> 9999999999999999999999999995000000 Inexact Rounded + +dqadd71349 add 9999999999999999999999999999999999 0.4 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71350 add 9999999999999999999999999999999999 0.49 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71351 add 9999999999999999999999999999999999 0.499 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71352 add 9999999999999999999999999999999999 0.4999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71353 add 9999999999999999999999999999999999 0.49999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71354 add 9999999999999999999999999999999999 0.499999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71355 add 9999999999999999999999999999999999 0.4999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71356 add 9999999999999999999999999999999999 0.49999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71357 add 9999999999999999999999999999999999 0.499999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71358 add 9999999999999999999999999999999999 0.4999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71359 add 9999999999999999999999999999999999 0.49999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71360 add 9999999999999999999999999999999999 0.499999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71361 add 9999999999999999999999999999999999 0.4999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71362 add 9999999999999999999999999999999999 0.49999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71363 add 9999999999999999999999999999999999 0.499999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71364 add 9999999999999999999999999999999999 0.4999999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd71365 add 9999999999999999999999999999999999 0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71367 add 9999999999999999999999999999999999 0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71368 add 9999999999999999999999999999999999 0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71369 add 9999999999999999999999999999999999 0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71370 add 9999999999999999999999999999999999 0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71371 add 9999999999999999999999999999999999 0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71372 add 9999999999999999999999999999999999 0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71373 add 9999999999999999999999999999999999 0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71374 add 9999999999999999999999999999999999 0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71375 add 9999999999999999999999999999999999 0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71376 add 9999999999999999999999999999999999 0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71377 add 9999999999999999999999999999999999 0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71378 add 9999999999999999999999999999999999 0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71379 add 9999999999999999999999999999999999 0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71380 add 9999999999999999999999999999999999 0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71381 add 9999999999999999999999999999999999 0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71382 add 9999999999999999999999999999999999 0.5000000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71383 add 9999999999999999999999999999999999 0.500000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71384 add 9999999999999999999999999999999999 0.50000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71385 add 9999999999999999999999999999999999 0.5000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71386 add 9999999999999999999999999999999999 0.500000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71387 add 9999999999999999999999999999999999 0.50000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71388 add 9999999999999999999999999999999999 0.5000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71389 add 9999999999999999999999999999999999 0.500000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71390 add 9999999999999999999999999999999999 0.50000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71391 add 9999999999999999999999999999999999 0.5000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71392 add 9999999999999999999999999999999999 0.500001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71393 add 9999999999999999999999999999999999 0.50001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71394 add 9999999999999999999999999999999999 0.5001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71395 add 9999999999999999999999999999999999 0.501 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd71396 add 9999999999999999999999999999999999 0.51 -> 1.000000000000000000000000000000000E+34 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +dqadd71420 add 0 1.123456789987654321123456789012345 -> 1.123456789987654321123456789012345 +dqadd71421 add 0 1.123456789987654321123456789012345E-1 -> 0.1123456789987654321123456789012345 +dqadd71422 add 0 1.123456789987654321123456789012345E-2 -> 0.01123456789987654321123456789012345 +dqadd71423 add 0 1.123456789987654321123456789012345E-3 -> 0.001123456789987654321123456789012345 +dqadd71424 add 0 1.123456789987654321123456789012345E-4 -> 0.0001123456789987654321123456789012345 +dqadd71425 add 0 1.123456789987654321123456789012345E-5 -> 0.00001123456789987654321123456789012345 +dqadd71426 add 0 1.123456789987654321123456789012345E-6 -> 0.000001123456789987654321123456789012345 +dqadd71427 add 0 1.123456789987654321123456789012345E-7 -> 1.123456789987654321123456789012345E-7 +dqadd71428 add 0 1.123456789987654321123456789012345E-8 -> 1.123456789987654321123456789012345E-8 +dqadd71429 add 0 1.123456789987654321123456789012345E-9 -> 1.123456789987654321123456789012345E-9 +dqadd71430 add 0 1.123456789987654321123456789012345E-10 -> 1.123456789987654321123456789012345E-10 +dqadd71431 add 0 1.123456789987654321123456789012345E-11 -> 1.123456789987654321123456789012345E-11 +dqadd71432 add 0 1.123456789987654321123456789012345E-12 -> 1.123456789987654321123456789012345E-12 +dqadd71433 add 0 1.123456789987654321123456789012345E-13 -> 1.123456789987654321123456789012345E-13 +dqadd71434 add 0 1.123456789987654321123456789012345E-14 -> 1.123456789987654321123456789012345E-14 +dqadd71435 add 0 1.123456789987654321123456789012345E-15 -> 1.123456789987654321123456789012345E-15 +dqadd71436 add 0 1.123456789987654321123456789012345E-16 -> 1.123456789987654321123456789012345E-16 +dqadd71437 add 0 1.123456789987654321123456789012345E-17 -> 1.123456789987654321123456789012345E-17 +dqadd71438 add 0 1.123456789987654321123456789012345E-18 -> 1.123456789987654321123456789012345E-18 +dqadd71439 add 0 1.123456789987654321123456789012345E-19 -> 1.123456789987654321123456789012345E-19 +dqadd71440 add 0 1.123456789987654321123456789012345E-20 -> 1.123456789987654321123456789012345E-20 +dqadd71441 add 0 1.123456789987654321123456789012345E-21 -> 1.123456789987654321123456789012345E-21 +dqadd71442 add 0 1.123456789987654321123456789012345E-22 -> 1.123456789987654321123456789012345E-22 +dqadd71443 add 0 1.123456789987654321123456789012345E-23 -> 1.123456789987654321123456789012345E-23 +dqadd71444 add 0 1.123456789987654321123456789012345E-24 -> 1.123456789987654321123456789012345E-24 +dqadd71445 add 0 1.123456789987654321123456789012345E-25 -> 1.123456789987654321123456789012345E-25 +dqadd71446 add 0 1.123456789987654321123456789012345E-26 -> 1.123456789987654321123456789012345E-26 +dqadd71447 add 0 1.123456789987654321123456789012345E-27 -> 1.123456789987654321123456789012345E-27 +dqadd71448 add 0 1.123456789987654321123456789012345E-28 -> 1.123456789987654321123456789012345E-28 +dqadd71449 add 0 1.123456789987654321123456789012345E-29 -> 1.123456789987654321123456789012345E-29 +dqadd71450 add 0 1.123456789987654321123456789012345E-30 -> 1.123456789987654321123456789012345E-30 +dqadd71451 add 0 1.123456789987654321123456789012345E-31 -> 1.123456789987654321123456789012345E-31 +dqadd71452 add 0 1.123456789987654321123456789012345E-32 -> 1.123456789987654321123456789012345E-32 +dqadd71453 add 0 1.123456789987654321123456789012345E-33 -> 1.123456789987654321123456789012345E-33 +dqadd71454 add 0 1.123456789987654321123456789012345E-34 -> 1.123456789987654321123456789012345E-34 +dqadd71455 add 0 1.123456789987654321123456789012345E-35 -> 1.123456789987654321123456789012345E-35 +dqadd71456 add 0 1.123456789987654321123456789012345E-36 -> 1.123456789987654321123456789012345E-36 + +-- same, reversed 0 +dqadd71460 add 1.123456789987654321123456789012345 0 -> 1.123456789987654321123456789012345 +dqadd71461 add 1.123456789987654321123456789012345E-1 0 -> 0.1123456789987654321123456789012345 +dqadd71462 add 1.123456789987654321123456789012345E-2 0 -> 0.01123456789987654321123456789012345 +dqadd71463 add 1.123456789987654321123456789012345E-3 0 -> 0.001123456789987654321123456789012345 +dqadd71464 add 1.123456789987654321123456789012345E-4 0 -> 0.0001123456789987654321123456789012345 +dqadd71465 add 1.123456789987654321123456789012345E-5 0 -> 0.00001123456789987654321123456789012345 +dqadd71466 add 1.123456789987654321123456789012345E-6 0 -> 0.000001123456789987654321123456789012345 +dqadd71467 add 1.123456789987654321123456789012345E-7 0 -> 1.123456789987654321123456789012345E-7 +dqadd71468 add 1.123456789987654321123456789012345E-8 0 -> 1.123456789987654321123456789012345E-8 +dqadd71469 add 1.123456789987654321123456789012345E-9 0 -> 1.123456789987654321123456789012345E-9 +dqadd71470 add 1.123456789987654321123456789012345E-10 0 -> 1.123456789987654321123456789012345E-10 +dqadd71471 add 1.123456789987654321123456789012345E-11 0 -> 1.123456789987654321123456789012345E-11 +dqadd71472 add 1.123456789987654321123456789012345E-12 0 -> 1.123456789987654321123456789012345E-12 +dqadd71473 add 1.123456789987654321123456789012345E-13 0 -> 1.123456789987654321123456789012345E-13 +dqadd71474 add 1.123456789987654321123456789012345E-14 0 -> 1.123456789987654321123456789012345E-14 +dqadd71475 add 1.123456789987654321123456789012345E-15 0 -> 1.123456789987654321123456789012345E-15 +dqadd71476 add 1.123456789987654321123456789012345E-16 0 -> 1.123456789987654321123456789012345E-16 +dqadd71477 add 1.123456789987654321123456789012345E-17 0 -> 1.123456789987654321123456789012345E-17 +dqadd71478 add 1.123456789987654321123456789012345E-18 0 -> 1.123456789987654321123456789012345E-18 +dqadd71479 add 1.123456789987654321123456789012345E-19 0 -> 1.123456789987654321123456789012345E-19 +dqadd71480 add 1.123456789987654321123456789012345E-20 0 -> 1.123456789987654321123456789012345E-20 +dqadd71481 add 1.123456789987654321123456789012345E-21 0 -> 1.123456789987654321123456789012345E-21 +dqadd71482 add 1.123456789987654321123456789012345E-22 0 -> 1.123456789987654321123456789012345E-22 +dqadd71483 add 1.123456789987654321123456789012345E-23 0 -> 1.123456789987654321123456789012345E-23 +dqadd71484 add 1.123456789987654321123456789012345E-24 0 -> 1.123456789987654321123456789012345E-24 +dqadd71485 add 1.123456789987654321123456789012345E-25 0 -> 1.123456789987654321123456789012345E-25 +dqadd71486 add 1.123456789987654321123456789012345E-26 0 -> 1.123456789987654321123456789012345E-26 +dqadd71487 add 1.123456789987654321123456789012345E-27 0 -> 1.123456789987654321123456789012345E-27 +dqadd71488 add 1.123456789987654321123456789012345E-28 0 -> 1.123456789987654321123456789012345E-28 +dqadd71489 add 1.123456789987654321123456789012345E-29 0 -> 1.123456789987654321123456789012345E-29 +dqadd71490 add 1.123456789987654321123456789012345E-30 0 -> 1.123456789987654321123456789012345E-30 +dqadd71491 add 1.123456789987654321123456789012345E-31 0 -> 1.123456789987654321123456789012345E-31 +dqadd71492 add 1.123456789987654321123456789012345E-32 0 -> 1.123456789987654321123456789012345E-32 +dqadd71493 add 1.123456789987654321123456789012345E-33 0 -> 1.123456789987654321123456789012345E-33 +dqadd71494 add 1.123456789987654321123456789012345E-34 0 -> 1.123456789987654321123456789012345E-34 +dqadd71495 add 1.123456789987654321123456789012345E-35 0 -> 1.123456789987654321123456789012345E-35 +dqadd71496 add 1.123456789987654321123456789012345E-36 0 -> 1.123456789987654321123456789012345E-36 + +-- same, Es on the 0 +dqadd71500 add 1.123456789987654321123456789012345 0E-0 -> 1.123456789987654321123456789012345 +dqadd71501 add 1.123456789987654321123456789012345 0E-1 -> 1.123456789987654321123456789012345 +dqadd71502 add 1.123456789987654321123456789012345 0E-2 -> 1.123456789987654321123456789012345 +dqadd71503 add 1.123456789987654321123456789012345 0E-3 -> 1.123456789987654321123456789012345 +dqadd71504 add 1.123456789987654321123456789012345 0E-4 -> 1.123456789987654321123456789012345 +dqadd71505 add 1.123456789987654321123456789012345 0E-5 -> 1.123456789987654321123456789012345 +dqadd71506 add 1.123456789987654321123456789012345 0E-6 -> 1.123456789987654321123456789012345 +dqadd71507 add 1.123456789987654321123456789012345 0E-7 -> 1.123456789987654321123456789012345 +dqadd71508 add 1.123456789987654321123456789012345 0E-8 -> 1.123456789987654321123456789012345 +dqadd71509 add 1.123456789987654321123456789012345 0E-9 -> 1.123456789987654321123456789012345 +dqadd71510 add 1.123456789987654321123456789012345 0E-10 -> 1.123456789987654321123456789012345 +dqadd71511 add 1.123456789987654321123456789012345 0E-11 -> 1.123456789987654321123456789012345 +dqadd71512 add 1.123456789987654321123456789012345 0E-12 -> 1.123456789987654321123456789012345 +dqadd71513 add 1.123456789987654321123456789012345 0E-13 -> 1.123456789987654321123456789012345 +dqadd71514 add 1.123456789987654321123456789012345 0E-14 -> 1.123456789987654321123456789012345 +dqadd71515 add 1.123456789987654321123456789012345 0E-15 -> 1.123456789987654321123456789012345 +dqadd71516 add 1.123456789987654321123456789012345 0E-16 -> 1.123456789987654321123456789012345 +dqadd71517 add 1.123456789987654321123456789012345 0E-17 -> 1.123456789987654321123456789012345 +dqadd71518 add 1.123456789987654321123456789012345 0E-18 -> 1.123456789987654321123456789012345 +dqadd71519 add 1.123456789987654321123456789012345 0E-19 -> 1.123456789987654321123456789012345 +dqadd71520 add 1.123456789987654321123456789012345 0E-20 -> 1.123456789987654321123456789012345 +dqadd71521 add 1.123456789987654321123456789012345 0E-21 -> 1.123456789987654321123456789012345 +dqadd71522 add 1.123456789987654321123456789012345 0E-22 -> 1.123456789987654321123456789012345 +dqadd71523 add 1.123456789987654321123456789012345 0E-23 -> 1.123456789987654321123456789012345 +dqadd71524 add 1.123456789987654321123456789012345 0E-24 -> 1.123456789987654321123456789012345 +dqadd71525 add 1.123456789987654321123456789012345 0E-25 -> 1.123456789987654321123456789012345 +dqadd71526 add 1.123456789987654321123456789012345 0E-26 -> 1.123456789987654321123456789012345 +dqadd71527 add 1.123456789987654321123456789012345 0E-27 -> 1.123456789987654321123456789012345 +dqadd71528 add 1.123456789987654321123456789012345 0E-28 -> 1.123456789987654321123456789012345 +dqadd71529 add 1.123456789987654321123456789012345 0E-29 -> 1.123456789987654321123456789012345 +dqadd71530 add 1.123456789987654321123456789012345 0E-30 -> 1.123456789987654321123456789012345 +dqadd71531 add 1.123456789987654321123456789012345 0E-31 -> 1.123456789987654321123456789012345 +dqadd71532 add 1.123456789987654321123456789012345 0E-32 -> 1.123456789987654321123456789012345 +dqadd71533 add 1.123456789987654321123456789012345 0E-33 -> 1.123456789987654321123456789012345 +-- next four flag Rounded because the 0 extends the result +dqadd71534 add 1.123456789987654321123456789012345 0E-34 -> 1.123456789987654321123456789012345 Rounded +dqadd71535 add 1.123456789987654321123456789012345 0E-35 -> 1.123456789987654321123456789012345 Rounded +dqadd71536 add 1.123456789987654321123456789012345 0E-36 -> 1.123456789987654321123456789012345 Rounded +dqadd71537 add 1.123456789987654321123456789012345 0E-37 -> 1.123456789987654321123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +dqadd71600 add 0 0E-19 -> 0E-19 +dqadd71601 add -0 0E-19 -> 0E-19 +dqadd71602 add 0 -0E-19 -> 0E-19 +dqadd71603 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71611 add -11 11 -> 0 +dqadd71612 add 11 -11 -> 0 + +rounding: half_down +-- exact zeros from zeros +dqadd71620 add 0 0E-19 -> 0E-19 +dqadd71621 add -0 0E-19 -> 0E-19 +dqadd71622 add 0 -0E-19 -> 0E-19 +dqadd71623 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71631 add -11 11 -> 0 +dqadd71632 add 11 -11 -> 0 + +rounding: half_even +-- exact zeros from zeros +dqadd71640 add 0 0E-19 -> 0E-19 +dqadd71641 add -0 0E-19 -> 0E-19 +dqadd71642 add 0 -0E-19 -> 0E-19 +dqadd71643 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71651 add -11 11 -> 0 +dqadd71652 add 11 -11 -> 0 + +rounding: up +-- exact zeros from zeros +dqadd71660 add 0 0E-19 -> 0E-19 +dqadd71661 add -0 0E-19 -> 0E-19 +dqadd71662 add 0 -0E-19 -> 0E-19 +dqadd71663 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71671 add -11 11 -> 0 +dqadd71672 add 11 -11 -> 0 + +rounding: down +-- exact zeros from zeros +dqadd71680 add 0 0E-19 -> 0E-19 +dqadd71681 add -0 0E-19 -> 0E-19 +dqadd71682 add 0 -0E-19 -> 0E-19 +dqadd71683 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71691 add -11 11 -> 0 +dqadd71692 add 11 -11 -> 0 + +rounding: ceiling +-- exact zeros from zeros +dqadd71700 add 0 0E-19 -> 0E-19 +dqadd71701 add -0 0E-19 -> 0E-19 +dqadd71702 add 0 -0E-19 -> 0E-19 +dqadd71703 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71711 add -11 11 -> 0 +dqadd71712 add 11 -11 -> 0 + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +dqadd71720 add 0 0E-19 -> 0E-19 +dqadd71721 add -0 0E-19 -> -0E-19 -- * +dqadd71722 add 0 -0E-19 -> -0E-19 -- * +dqadd71723 add -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd71731 add -11 11 -> -0 -- * +dqadd71732 add 11 -11 -> -0 -- * + +-- Examples from SQL proposal (Krishna Kulkarni) +dqadd71741 add 130E-2 120E-2 -> 2.50 +dqadd71742 add 130E-2 12E-1 -> 2.50 +dqadd71743 add 130E-2 1E0 -> 2.30 +dqadd71744 add 1E2 1E4 -> 1.01E+4 +dqadd71745 add 130E-2 -120E-2 -> 0.10 +dqadd71746 add 130E-2 -12E-1 -> 0.10 +dqadd71747 add 130E-2 -1E0 -> 0.30 +dqadd71748 add 1E2 -1E4 -> -9.9E+3 + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +dqadd75001 add 1239876543211234567894567890123456 1 -> 1239876543211234567894567890123457 +dqadd75002 add 1239876543211234567894567890123456 0.6 -> 1239876543211234567894567890123457 Inexact Rounded +dqadd75003 add 1239876543211234567894567890123456 0.06 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75004 add 1239876543211234567894567890123456 6E-3 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75005 add 1239876543211234567894567890123456 6E-4 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75006 add 1239876543211234567894567890123456 6E-5 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75007 add 1239876543211234567894567890123456 6E-6 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75008 add 1239876543211234567894567890123456 6E-7 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75009 add 1239876543211234567894567890123456 6E-8 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75010 add 1239876543211234567894567890123456 6E-9 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75011 add 1239876543211234567894567890123456 6E-10 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75012 add 1239876543211234567894567890123456 6E-11 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75013 add 1239876543211234567894567890123456 6E-12 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75014 add 1239876543211234567894567890123456 6E-13 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75015 add 1239876543211234567894567890123456 6E-14 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75016 add 1239876543211234567894567890123456 6E-15 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75017 add 1239876543211234567894567890123456 6E-16 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75018 add 1239876543211234567894567890123456 6E-17 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75019 add 1239876543211234567894567890123456 6E-18 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75020 add 1239876543211234567894567890123456 6E-19 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd75021 add 1239876543211234567894567890123456 6E-20 -> 1239876543211234567894567890123456 Inexact Rounded + +-- widening second argument at gap +dqadd75030 add 12398765432112345678945678 1 -> 12398765432112345678945679 +dqadd75031 add 12398765432112345678945678 0.1 -> 12398765432112345678945678.1 +dqadd75032 add 12398765432112345678945678 0.12 -> 12398765432112345678945678.12 +dqadd75033 add 12398765432112345678945678 0.123 -> 12398765432112345678945678.123 +dqadd75034 add 12398765432112345678945678 0.1234 -> 12398765432112345678945678.1234 +dqadd75035 add 12398765432112345678945678 0.12345 -> 12398765432112345678945678.12345 +dqadd75036 add 12398765432112345678945678 0.123456 -> 12398765432112345678945678.123456 +dqadd75037 add 12398765432112345678945678 0.1234567 -> 12398765432112345678945678.1234567 +dqadd75038 add 12398765432112345678945678 0.12345678 -> 12398765432112345678945678.12345678 +dqadd75039 add 12398765432112345678945678 0.123456789 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75040 add 12398765432112345678945678 0.123456785 -> 12398765432112345678945678.12345678 Inexact Rounded +dqadd75041 add 12398765432112345678945678 0.1234567850 -> 12398765432112345678945678.12345678 Inexact Rounded +dqadd75042 add 12398765432112345678945678 0.1234567851 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75043 add 12398765432112345678945678 0.12345678501 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75044 add 12398765432112345678945678 0.123456785001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75045 add 12398765432112345678945678 0.1234567850001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75046 add 12398765432112345678945678 0.12345678500001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75047 add 12398765432112345678945678 0.123456785000001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75048 add 12398765432112345678945678 0.1234567850000001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd75049 add 12398765432112345678945678 0.1234567850000000 -> 12398765432112345678945678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +dqadd75050 add 12398765432112345678945678 0.0234567750000000 -> 12398765432112345678945678.02345678 Inexact Rounded +dqadd75051 add 12398765432112345678945678 0.0034567750000000 -> 12398765432112345678945678.00345678 Inexact Rounded +dqadd75052 add 12398765432112345678945678 0.0004567750000000 -> 12398765432112345678945678.00045678 Inexact Rounded +dqadd75053 add 12398765432112345678945678 0.0000567750000000 -> 12398765432112345678945678.00005678 Inexact Rounded +dqadd75054 add 12398765432112345678945678 0.0000067750000000 -> 12398765432112345678945678.00000678 Inexact Rounded +dqadd75055 add 12398765432112345678945678 0.0000007750000000 -> 12398765432112345678945678.00000078 Inexact Rounded +dqadd75056 add 12398765432112345678945678 0.0000000750000000 -> 12398765432112345678945678.00000008 Inexact Rounded +dqadd75057 add 12398765432112345678945678 0.0000000050000000 -> 12398765432112345678945678.00000000 Inexact Rounded +dqadd75060 add 12398765432112345678945678 0.0234567750000001 -> 12398765432112345678945678.02345678 Inexact Rounded +dqadd75061 add 12398765432112345678945678 0.0034567750000001 -> 12398765432112345678945678.00345678 Inexact Rounded +dqadd75062 add 12398765432112345678945678 0.0004567750000001 -> 12398765432112345678945678.00045678 Inexact Rounded +dqadd75063 add 12398765432112345678945678 0.0000567750000001 -> 12398765432112345678945678.00005678 Inexact Rounded +dqadd75064 add 12398765432112345678945678 0.0000067750000001 -> 12398765432112345678945678.00000678 Inexact Rounded +dqadd75065 add 12398765432112345678945678 0.0000007750000001 -> 12398765432112345678945678.00000078 Inexact Rounded +dqadd75066 add 12398765432112345678945678 0.0000000750000001 -> 12398765432112345678945678.00000008 Inexact Rounded +dqadd75067 add 12398765432112345678945678 0.0000000050000001 -> 12398765432112345678945678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +dqadd75070 add 12398765432112345678945678 1E-8 -> 12398765432112345678945678.00000001 +dqadd75071 add 12398765432112345678945678 1E-9 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75072 add 12398765432112345678945678 1E-10 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75073 add 12398765432112345678945678 1E-11 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75074 add 12398765432112345678945678 1E-12 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75075 add 12398765432112345678945678 1E-13 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75076 add 12398765432112345678945678 1E-14 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75077 add 12398765432112345678945678 1E-15 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75078 add 12398765432112345678945678 1E-16 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75079 add 12398765432112345678945678 1E-17 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75080 add 12398765432112345678945678 1E-18 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75081 add 12398765432112345678945678 1E-19 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75082 add 12398765432112345678945678 1E-20 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75083 add 12398765432112345678945678 1E-25 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75084 add 12398765432112345678945678 1E-30 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75085 add 12398765432112345678945678 1E-31 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75086 add 12398765432112345678945678 1E-32 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75087 add 12398765432112345678945678 1E-33 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75088 add 12398765432112345678945678 1E-34 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd75089 add 12398765432112345678945678 1E-35 -> 12398765432112345678945678.00000001 Inexact Rounded + +-- Null tests +dqadd9990 add 10 # -> NaN Invalid_operation +dqadd9991 add # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqAnd.decTest b/Lib/test/decimaltestdata/dqAnd.decTest index d609bc1c3bb..57c416b48ca 100644 --- a/Lib/test/decimaltestdata/dqAnd.decTest +++ b/Lib/test/decimaltestdata/dqAnd.decTest @@ -1,420 +1,420 @@ ------------------------------------------------------------------------- --- dqAnd.decTest -- digitwise logical AND for decQuads -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check (truth table) -dqand001 and 0 0 -> 0 -dqand002 and 0 1 -> 0 -dqand003 and 1 0 -> 0 -dqand004 and 1 1 -> 1 -dqand005 and 1100 1010 -> 1000 --- and at msd and msd-1 --- 1234567890123456789012345678901234 -dqand006 and 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqand007 and 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 0 -dqand008 and 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqand009 and 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqand010 and 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqand011 and 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 0 -dqand012 and 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqand013 and 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 - --- Various lengths --- 1234567890123456789012345678901234 - -dqand601 and 0111111111111111111111111111111111 1111111111111111111111111111111111 -> 111111111111111111111111111111111 -dqand602 and 1011111111111111111111111111111111 1111111111111111111111111111111111 -> 1011111111111111111111111111111111 -dqand603 and 1101111111111111111111111111111111 1111111111111111111111111111111111 -> 1101111111111111111111111111111111 -dqand604 and 1110111111111111111111111111111111 1111111111111111111111111111111111 -> 1110111111111111111111111111111111 -dqand605 and 1111011111111111111111111111111111 1111111111111111111111111111111111 -> 1111011111111111111111111111111111 -dqand606 and 1111101111111111111111111111111111 1111111111111111111111111111111111 -> 1111101111111111111111111111111111 -dqand607 and 1111110111111111111111111111111111 1111111111111111111111111111111111 -> 1111110111111111111111111111111111 -dqand608 and 1111111011111111111111111111111111 1111111111111111111111111111111111 -> 1111111011111111111111111111111111 -dqand609 and 1111111101111111111111111111111111 1111111111111111111111111111111111 -> 1111111101111111111111111111111111 -dqand610 and 1111111110111111111111111111111111 1111111111111111111111111111111111 -> 1111111110111111111111111111111111 -dqand611 and 1111111111011111111111111111111111 1111111111111111111111111111111111 -> 1111111111011111111111111111111111 -dqand612 and 1111111111101111111111111111111111 1111111111111111111111111111111111 -> 1111111111101111111111111111111111 -dqand613 and 1111111111110111111111111111111111 1111111111111111111111111111111111 -> 1111111111110111111111111111111111 -dqand614 and 1111111111111011111111111111111111 1111111111111111111111111111111111 -> 1111111111111011111111111111111111 -dqand615 and 1111111111111101111111111111111111 1111111111111111111111111111111111 -> 1111111111111101111111111111111111 -dqand616 and 1111111111111110111111111111111111 1111111111111111111111111111111111 -> 1111111111111110111111111111111111 -dqand617 and 1111111111111111011111111111111111 1111111111111111111111111111111111 -> 1111111111111111011111111111111111 -dqand618 and 1111111111111111101111111111111111 1111111111111111111111111111111111 -> 1111111111111111101111111111111111 -dqand619 and 1111111111111111110111111111111111 1111111111111111111111111111111111 -> 1111111111111111110111111111111111 -dqand620 and 1111111111111111111011111111111111 1111111111111111111111111111111111 -> 1111111111111111111011111111111111 -dqand621 and 1111111111111111111101111111111111 1111111111111111111111111111111111 -> 1111111111111111111101111111111111 -dqand622 and 1111111111111111111110111111111111 1111111111111111111111111111111111 -> 1111111111111111111110111111111111 -dqand623 and 1111111111111111111111011111111111 1111111111111111111111111111111111 -> 1111111111111111111111011111111111 -dqand624 and 1111111111111111111111101111111111 1111111111111111111111111111111111 -> 1111111111111111111111101111111111 -dqand625 and 1111111111111111111111110111111111 1111111111111111111111111111111111 -> 1111111111111111111111110111111111 -dqand626 and 1111111111111111111111111011111111 1111111111111111111111111111111111 -> 1111111111111111111111111011111111 -dqand627 and 1111111111111111111111111101111111 1111111111111111111111111111111111 -> 1111111111111111111111111101111111 -dqand628 and 1111111111111111111111111110111111 1111111111111111111111111111111111 -> 1111111111111111111111111110111111 -dqand629 and 1111111111111111111111111111011111 1111111111111111111111111111111111 -> 1111111111111111111111111111011111 -dqand630 and 1111111111111111111111111111101111 1111111111111111111111111111111111 -> 1111111111111111111111111111101111 -dqand631 and 1111111111111111111111111111110111 1111111111111111111111111111111111 -> 1111111111111111111111111111110111 -dqand632 and 1111111111111111111111111111111011 1111111111111111111111111111111111 -> 1111111111111111111111111111111011 -dqand633 and 1111111111111111111111111111111101 1111111111111111111111111111111111 -> 1111111111111111111111111111111101 -dqand634 and 1111111111111111111111111111111110 1111111111111111111111111111111111 -> 1111111111111111111111111111111110 - -dqand641 and 1111111111111111111111111111111111 0111111111111111111111111111111111 -> 111111111111111111111111111111111 -dqand642 and 1111111111111111111111111111111111 1011111111111111111111111111111111 -> 1011111111111111111111111111111111 -dqand643 and 1111111111111111111111111111111111 1101111111111111111111111111111111 -> 1101111111111111111111111111111111 -dqand644 and 1111111111111111111111111111111111 1110111111111111111111111111111111 -> 1110111111111111111111111111111111 -dqand645 and 1111111111111111111111111111111111 1111011111111111111111111111111111 -> 1111011111111111111111111111111111 -dqand646 and 1111111111111111111111111111111111 1111101111111111111111111111111111 -> 1111101111111111111111111111111111 -dqand647 and 1111111111111111111111111111111111 1111110111111111111111111111111111 -> 1111110111111111111111111111111111 -dqand648 and 1111111111111111111111111111111111 1111111011111111111111111111111111 -> 1111111011111111111111111111111111 -dqand649 and 1111111111111111111111111111111111 1111111101111111111111111111111111 -> 1111111101111111111111111111111111 -dqand650 and 1111111111111111111111111111111111 1111111110111111111111111111111111 -> 1111111110111111111111111111111111 -dqand651 and 1111111111111111111111111111111111 1111111111011111111111111111111111 -> 1111111111011111111111111111111111 -dqand652 and 1111111111111111111111111111111111 1111111111101111111111111111111111 -> 1111111111101111111111111111111111 -dqand653 and 1111111111111111111111111111111111 1111111111110111111111111111111111 -> 1111111111110111111111111111111111 -dqand654 and 1111111111111111111111111111111111 1111111111111011111111111111111111 -> 1111111111111011111111111111111111 -dqand655 and 1111111111111111111111111111111111 1111111111111101111111111111111111 -> 1111111111111101111111111111111111 -dqand656 and 1111111111111111111111111111111111 1111111111111110111111111111111111 -> 1111111111111110111111111111111111 -dqand657 and 1111111111111111111111111111111111 1111111111111111011111111111111111 -> 1111111111111111011111111111111111 -dqand658 and 1111111111111111111111111111111111 1111111111111111101111111111111111 -> 1111111111111111101111111111111111 -dqand659 and 1111111111111111111111111111111111 1111111111111111110111111111111111 -> 1111111111111111110111111111111111 -dqand660 and 1111111111111111111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111011111111111111 -dqand661 and 1111111111111111111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111101111111111111 -dqand662 and 1111111111111111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111110111111111111 -dqand663 and 1111111111111111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111011111111111 -dqand664 and 1111111111111111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111101111111111 -dqand665 and 1111111111111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111110111111111 -dqand666 and 1111111111111111111111111111111111 1111111111111111111111111011111111 -> 1111111111111111111111111011111111 -dqand667 and 1111111111111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111101111111 -dqand668 and 1111111111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111110111111 -dqand669 and 1111111111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111011111 -dqand670 and 1111111111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111101111 -dqand671 and 1111111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111110111 -dqand672 and 1111111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111011 -dqand673 and 1111111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111101 -dqand674 and 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 -dqand675 and 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 111111111111111111111111111111110 -dqand676 and 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 - -dqand021 and 1111111111111111 1111111111111111 -> 1111111111111111 -dqand024 and 1111111111111111 111111111111111 -> 111111111111111 -dqand025 and 1111111111111111 11111111111111 -> 11111111111111 -dqand026 and 1111111111111111 1111111111111 -> 1111111111111 -dqand027 and 1111111111111111 111111111111 -> 111111111111 -dqand028 and 1111111111111111 11111111111 -> 11111111111 -dqand029 and 1111111111111111 1111111111 -> 1111111111 -dqand030 and 1111111111111111 111111111 -> 111111111 -dqand031 and 1111111111111111 11111111 -> 11111111 -dqand032 and 1111111111111111 1111111 -> 1111111 -dqand033 and 1111111111111111 111111 -> 111111 -dqand034 and 1111111111111111 11111 -> 11111 -dqand035 and 1111111111111111 1111 -> 1111 -dqand036 and 1111111111111111 111 -> 111 -dqand037 and 1111111111111111 11 -> 11 -dqand038 and 1111111111111111 1 -> 1 -dqand039 and 1111111111111111 0 -> 0 - -dqand040 and 1111111111111111 1111111111111111 -> 1111111111111111 -dqand041 and 111111111111111 1111111111111111 -> 111111111111111 -dqand042 and 111111111111111 1111111111111111 -> 111111111111111 -dqand043 and 11111111111111 1111111111111111 -> 11111111111111 -dqand044 and 1111111111111 1111111111111111 -> 1111111111111 -dqand045 and 111111111111 1111111111111111 -> 111111111111 -dqand046 and 11111111111 1111111111111111 -> 11111111111 -dqand047 and 1111111111 1111111111111111 -> 1111111111 -dqand048 and 111111111 1111111111111111 -> 111111111 -dqand049 and 11111111 1111111111111111 -> 11111111 -dqand050 and 1111111 1111111111111111 -> 1111111 -dqand051 and 111111 1111111111111111 -> 111111 -dqand052 and 11111 1111111111111111 -> 11111 -dqand053 and 1111 1111111111111111 -> 1111 -dqand054 and 111 1111111111111111 -> 111 -dqand055 and 11 1111111111111111 -> 11 -dqand056 and 1 1111111111111111 -> 1 -dqand057 and 0 1111111111111111 -> 0 - -dqand150 and 1111111111 1 -> 1 -dqand151 and 111111111 1 -> 1 -dqand152 and 11111111 1 -> 1 -dqand153 and 1111111 1 -> 1 -dqand154 and 111111 1 -> 1 -dqand155 and 11111 1 -> 1 -dqand156 and 1111 1 -> 1 -dqand157 and 111 1 -> 1 -dqand158 and 11 1 -> 1 -dqand159 and 1 1 -> 1 - -dqand160 and 1111111111 0 -> 0 -dqand161 and 111111111 0 -> 0 -dqand162 and 11111111 0 -> 0 -dqand163 and 1111111 0 -> 0 -dqand164 and 111111 0 -> 0 -dqand165 and 11111 0 -> 0 -dqand166 and 1111 0 -> 0 -dqand167 and 111 0 -> 0 -dqand168 and 11 0 -> 0 -dqand169 and 1 0 -> 0 - -dqand170 and 1 1111111111 -> 1 -dqand171 and 1 111111111 -> 1 -dqand172 and 1 11111111 -> 1 -dqand173 and 1 1111111 -> 1 -dqand174 and 1 111111 -> 1 -dqand175 and 1 11111 -> 1 -dqand176 and 1 1111 -> 1 -dqand177 and 1 111 -> 1 -dqand178 and 1 11 -> 1 -dqand179 and 1 1 -> 1 - -dqand180 and 0 1111111111 -> 0 -dqand181 and 0 111111111 -> 0 -dqand182 and 0 11111111 -> 0 -dqand183 and 0 1111111 -> 0 -dqand184 and 0 111111 -> 0 -dqand185 and 0 11111 -> 0 -dqand186 and 0 1111 -> 0 -dqand187 and 0 111 -> 0 -dqand188 and 0 11 -> 0 -dqand189 and 0 1 -> 0 - -dqand090 and 011111111 111111111 -> 11111111 -dqand091 and 101111111 111111111 -> 101111111 -dqand092 and 110111111 111111111 -> 110111111 -dqand093 and 111011111 111111111 -> 111011111 -dqand094 and 111101111 111111111 -> 111101111 -dqand095 and 111110111 111111111 -> 111110111 -dqand096 and 111111011 111111111 -> 111111011 -dqand097 and 111111101 111111111 -> 111111101 -dqand098 and 111111110 111111111 -> 111111110 - -dqand100 and 111111111 011111111 -> 11111111 -dqand101 and 111111111 101111111 -> 101111111 -dqand102 and 111111111 110111111 -> 110111111 -dqand103 and 111111111 111011111 -> 111011111 -dqand104 and 111111111 111101111 -> 111101111 -dqand105 and 111111111 111110111 -> 111110111 -dqand106 and 111111111 111111011 -> 111111011 -dqand107 and 111111111 111111101 -> 111111101 -dqand108 and 111111111 111111110 -> 111111110 - --- non-0/1 should not be accepted, nor should signs -dqand220 and 111111112 111111111 -> NaN Invalid_operation -dqand221 and 333333333 333333333 -> NaN Invalid_operation -dqand222 and 555555555 555555555 -> NaN Invalid_operation -dqand223 and 777777777 777777777 -> NaN Invalid_operation -dqand224 and 999999999 999999999 -> NaN Invalid_operation -dqand225 and 222222222 999999999 -> NaN Invalid_operation -dqand226 and 444444444 999999999 -> NaN Invalid_operation -dqand227 and 666666666 999999999 -> NaN Invalid_operation -dqand228 and 888888888 999999999 -> NaN Invalid_operation -dqand229 and 999999999 222222222 -> NaN Invalid_operation -dqand230 and 999999999 444444444 -> NaN Invalid_operation -dqand231 and 999999999 666666666 -> NaN Invalid_operation -dqand232 and 999999999 888888888 -> NaN Invalid_operation --- a few randoms -dqand240 and 567468689 -934981942 -> NaN Invalid_operation -dqand241 and 567367689 934981942 -> NaN Invalid_operation -dqand242 and -631917772 -706014634 -> NaN Invalid_operation -dqand243 and -756253257 138579234 -> NaN Invalid_operation -dqand244 and 835590149 567435400 -> NaN Invalid_operation --- test MSD -dqand250 and 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqand251 and 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqand252 and 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqand253 and 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqand254 and 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqand255 and 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqand256 and 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqand257 and 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqand258 and 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqand259 and 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqand260 and 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqand261 and 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation -dqand262 and 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqand263 and 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqand264 and 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqand265 and 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation --- test MSD-1 -dqand270 and 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation -dqand271 and 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation -dqand272 and 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation -dqand273 and 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation -dqand274 and 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation -dqand275 and 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation -dqand276 and 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation -dqand277 and 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation --- test LSD -dqand280 and 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation -dqand281 and 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation -dqand282 and 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation -dqand283 and 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation -dqand284 and 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation -dqand285 and 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation -dqand286 and 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation -dqand287 and 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation --- test Middie -dqand288 and 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation -dqand289 and 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation -dqand290 and 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation -dqand291 and 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation -dqand292 and 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation -dqand293 and 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation -dqand294 and 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation -dqand295 and 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation --- signs -dqand296 and -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation -dqand297 and -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation -dqand298 and 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation -dqand299 and 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 110000110000110000001000000 - --- Nmax, Nmin, Ntiny-like -dqand331 and 2 9.99999999E+999 -> NaN Invalid_operation -dqand332 and 3 1E-999 -> NaN Invalid_operation -dqand333 and 4 1.00000000E-999 -> NaN Invalid_operation -dqand334 and 5 1E-900 -> NaN Invalid_operation -dqand335 and 6 -1E-900 -> NaN Invalid_operation -dqand336 and 7 -1.00000000E-999 -> NaN Invalid_operation -dqand337 and 8 -1E-999 -> NaN Invalid_operation -dqand338 and 9 -9.99999999E+999 -> NaN Invalid_operation -dqand341 and 9.99999999E+999 -18 -> NaN Invalid_operation -dqand342 and 1E-999 01 -> NaN Invalid_operation -dqand343 and 1.00000000E-999 -18 -> NaN Invalid_operation -dqand344 and 1E-900 18 -> NaN Invalid_operation -dqand345 and -1E-900 -10 -> NaN Invalid_operation -dqand346 and -1.00000000E-999 18 -> NaN Invalid_operation -dqand347 and -1E-999 10 -> NaN Invalid_operation -dqand348 and -9.99999999E+999 -18 -> NaN Invalid_operation - --- A few other non-integers -dqand361 and 1.0 1 -> NaN Invalid_operation -dqand362 and 1E+1 1 -> NaN Invalid_operation -dqand363 and 0.0 1 -> NaN Invalid_operation -dqand364 and 0E+1 1 -> NaN Invalid_operation -dqand365 and 9.9 1 -> NaN Invalid_operation -dqand366 and 9E+1 1 -> NaN Invalid_operation -dqand371 and 0 1.0 -> NaN Invalid_operation -dqand372 and 0 1E+1 -> NaN Invalid_operation -dqand373 and 0 0.0 -> NaN Invalid_operation -dqand374 and 0 0E+1 -> NaN Invalid_operation -dqand375 and 0 9.9 -> NaN Invalid_operation -dqand376 and 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -dqand780 and -Inf -Inf -> NaN Invalid_operation -dqand781 and -Inf -1000 -> NaN Invalid_operation -dqand782 and -Inf -1 -> NaN Invalid_operation -dqand783 and -Inf -0 -> NaN Invalid_operation -dqand784 and -Inf 0 -> NaN Invalid_operation -dqand785 and -Inf 1 -> NaN Invalid_operation -dqand786 and -Inf 1000 -> NaN Invalid_operation -dqand787 and -1000 -Inf -> NaN Invalid_operation -dqand788 and -Inf -Inf -> NaN Invalid_operation -dqand789 and -1 -Inf -> NaN Invalid_operation -dqand790 and -0 -Inf -> NaN Invalid_operation -dqand791 and 0 -Inf -> NaN Invalid_operation -dqand792 and 1 -Inf -> NaN Invalid_operation -dqand793 and 1000 -Inf -> NaN Invalid_operation -dqand794 and Inf -Inf -> NaN Invalid_operation - -dqand800 and Inf -Inf -> NaN Invalid_operation -dqand801 and Inf -1000 -> NaN Invalid_operation -dqand802 and Inf -1 -> NaN Invalid_operation -dqand803 and Inf -0 -> NaN Invalid_operation -dqand804 and Inf 0 -> NaN Invalid_operation -dqand805 and Inf 1 -> NaN Invalid_operation -dqand806 and Inf 1000 -> NaN Invalid_operation -dqand807 and Inf Inf -> NaN Invalid_operation -dqand808 and -1000 Inf -> NaN Invalid_operation -dqand809 and -Inf Inf -> NaN Invalid_operation -dqand810 and -1 Inf -> NaN Invalid_operation -dqand811 and -0 Inf -> NaN Invalid_operation -dqand812 and 0 Inf -> NaN Invalid_operation -dqand813 and 1 Inf -> NaN Invalid_operation -dqand814 and 1000 Inf -> NaN Invalid_operation -dqand815 and Inf Inf -> NaN Invalid_operation - -dqand821 and NaN -Inf -> NaN Invalid_operation -dqand822 and NaN -1000 -> NaN Invalid_operation -dqand823 and NaN -1 -> NaN Invalid_operation -dqand824 and NaN -0 -> NaN Invalid_operation -dqand825 and NaN 0 -> NaN Invalid_operation -dqand826 and NaN 1 -> NaN Invalid_operation -dqand827 and NaN 1000 -> NaN Invalid_operation -dqand828 and NaN Inf -> NaN Invalid_operation -dqand829 and NaN NaN -> NaN Invalid_operation -dqand830 and -Inf NaN -> NaN Invalid_operation -dqand831 and -1000 NaN -> NaN Invalid_operation -dqand832 and -1 NaN -> NaN Invalid_operation -dqand833 and -0 NaN -> NaN Invalid_operation -dqand834 and 0 NaN -> NaN Invalid_operation -dqand835 and 1 NaN -> NaN Invalid_operation -dqand836 and 1000 NaN -> NaN Invalid_operation -dqand837 and Inf NaN -> NaN Invalid_operation - -dqand841 and sNaN -Inf -> NaN Invalid_operation -dqand842 and sNaN -1000 -> NaN Invalid_operation -dqand843 and sNaN -1 -> NaN Invalid_operation -dqand844 and sNaN -0 -> NaN Invalid_operation -dqand845 and sNaN 0 -> NaN Invalid_operation -dqand846 and sNaN 1 -> NaN Invalid_operation -dqand847 and sNaN 1000 -> NaN Invalid_operation -dqand848 and sNaN NaN -> NaN Invalid_operation -dqand849 and sNaN sNaN -> NaN Invalid_operation -dqand850 and NaN sNaN -> NaN Invalid_operation -dqand851 and -Inf sNaN -> NaN Invalid_operation -dqand852 and -1000 sNaN -> NaN Invalid_operation -dqand853 and -1 sNaN -> NaN Invalid_operation -dqand854 and -0 sNaN -> NaN Invalid_operation -dqand855 and 0 sNaN -> NaN Invalid_operation -dqand856 and 1 sNaN -> NaN Invalid_operation -dqand857 and 1000 sNaN -> NaN Invalid_operation -dqand858 and Inf sNaN -> NaN Invalid_operation -dqand859 and NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqand861 and NaN1 -Inf -> NaN Invalid_operation -dqand862 and +NaN2 -1000 -> NaN Invalid_operation -dqand863 and NaN3 1000 -> NaN Invalid_operation -dqand864 and NaN4 Inf -> NaN Invalid_operation -dqand865 and NaN5 +NaN6 -> NaN Invalid_operation -dqand866 and -Inf NaN7 -> NaN Invalid_operation -dqand867 and -1000 NaN8 -> NaN Invalid_operation -dqand868 and 1000 NaN9 -> NaN Invalid_operation -dqand869 and Inf +NaN10 -> NaN Invalid_operation -dqand871 and sNaN11 -Inf -> NaN Invalid_operation -dqand872 and sNaN12 -1000 -> NaN Invalid_operation -dqand873 and sNaN13 1000 -> NaN Invalid_operation -dqand874 and sNaN14 NaN17 -> NaN Invalid_operation -dqand875 and sNaN15 sNaN18 -> NaN Invalid_operation -dqand876 and NaN16 sNaN19 -> NaN Invalid_operation -dqand877 and -Inf +sNaN20 -> NaN Invalid_operation -dqand878 and -1000 sNaN21 -> NaN Invalid_operation -dqand879 and 1000 sNaN22 -> NaN Invalid_operation -dqand880 and Inf sNaN23 -> NaN Invalid_operation -dqand881 and +NaN25 +sNaN24 -> NaN Invalid_operation -dqand882 and -NaN26 NaN28 -> NaN Invalid_operation -dqand883 and -sNaN27 sNaN29 -> NaN Invalid_operation -dqand884 and 1000 -NaN30 -> NaN Invalid_operation -dqand885 and 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqAnd.decTest -- digitwise logical AND for decQuads -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check (truth table) +dqand001 and 0 0 -> 0 +dqand002 and 0 1 -> 0 +dqand003 and 1 0 -> 0 +dqand004 and 1 1 -> 1 +dqand005 and 1100 1010 -> 1000 +-- and at msd and msd-1 +-- 1234567890123456789012345678901234 +dqand006 and 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqand007 and 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 0 +dqand008 and 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqand009 and 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqand010 and 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqand011 and 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 0 +dqand012 and 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqand013 and 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 + +-- Various lengths +-- 1234567890123456789012345678901234 + +dqand601 and 0111111111111111111111111111111111 1111111111111111111111111111111111 -> 111111111111111111111111111111111 +dqand602 and 1011111111111111111111111111111111 1111111111111111111111111111111111 -> 1011111111111111111111111111111111 +dqand603 and 1101111111111111111111111111111111 1111111111111111111111111111111111 -> 1101111111111111111111111111111111 +dqand604 and 1110111111111111111111111111111111 1111111111111111111111111111111111 -> 1110111111111111111111111111111111 +dqand605 and 1111011111111111111111111111111111 1111111111111111111111111111111111 -> 1111011111111111111111111111111111 +dqand606 and 1111101111111111111111111111111111 1111111111111111111111111111111111 -> 1111101111111111111111111111111111 +dqand607 and 1111110111111111111111111111111111 1111111111111111111111111111111111 -> 1111110111111111111111111111111111 +dqand608 and 1111111011111111111111111111111111 1111111111111111111111111111111111 -> 1111111011111111111111111111111111 +dqand609 and 1111111101111111111111111111111111 1111111111111111111111111111111111 -> 1111111101111111111111111111111111 +dqand610 and 1111111110111111111111111111111111 1111111111111111111111111111111111 -> 1111111110111111111111111111111111 +dqand611 and 1111111111011111111111111111111111 1111111111111111111111111111111111 -> 1111111111011111111111111111111111 +dqand612 and 1111111111101111111111111111111111 1111111111111111111111111111111111 -> 1111111111101111111111111111111111 +dqand613 and 1111111111110111111111111111111111 1111111111111111111111111111111111 -> 1111111111110111111111111111111111 +dqand614 and 1111111111111011111111111111111111 1111111111111111111111111111111111 -> 1111111111111011111111111111111111 +dqand615 and 1111111111111101111111111111111111 1111111111111111111111111111111111 -> 1111111111111101111111111111111111 +dqand616 and 1111111111111110111111111111111111 1111111111111111111111111111111111 -> 1111111111111110111111111111111111 +dqand617 and 1111111111111111011111111111111111 1111111111111111111111111111111111 -> 1111111111111111011111111111111111 +dqand618 and 1111111111111111101111111111111111 1111111111111111111111111111111111 -> 1111111111111111101111111111111111 +dqand619 and 1111111111111111110111111111111111 1111111111111111111111111111111111 -> 1111111111111111110111111111111111 +dqand620 and 1111111111111111111011111111111111 1111111111111111111111111111111111 -> 1111111111111111111011111111111111 +dqand621 and 1111111111111111111101111111111111 1111111111111111111111111111111111 -> 1111111111111111111101111111111111 +dqand622 and 1111111111111111111110111111111111 1111111111111111111111111111111111 -> 1111111111111111111110111111111111 +dqand623 and 1111111111111111111111011111111111 1111111111111111111111111111111111 -> 1111111111111111111111011111111111 +dqand624 and 1111111111111111111111101111111111 1111111111111111111111111111111111 -> 1111111111111111111111101111111111 +dqand625 and 1111111111111111111111110111111111 1111111111111111111111111111111111 -> 1111111111111111111111110111111111 +dqand626 and 1111111111111111111111111011111111 1111111111111111111111111111111111 -> 1111111111111111111111111011111111 +dqand627 and 1111111111111111111111111101111111 1111111111111111111111111111111111 -> 1111111111111111111111111101111111 +dqand628 and 1111111111111111111111111110111111 1111111111111111111111111111111111 -> 1111111111111111111111111110111111 +dqand629 and 1111111111111111111111111111011111 1111111111111111111111111111111111 -> 1111111111111111111111111111011111 +dqand630 and 1111111111111111111111111111101111 1111111111111111111111111111111111 -> 1111111111111111111111111111101111 +dqand631 and 1111111111111111111111111111110111 1111111111111111111111111111111111 -> 1111111111111111111111111111110111 +dqand632 and 1111111111111111111111111111111011 1111111111111111111111111111111111 -> 1111111111111111111111111111111011 +dqand633 and 1111111111111111111111111111111101 1111111111111111111111111111111111 -> 1111111111111111111111111111111101 +dqand634 and 1111111111111111111111111111111110 1111111111111111111111111111111111 -> 1111111111111111111111111111111110 + +dqand641 and 1111111111111111111111111111111111 0111111111111111111111111111111111 -> 111111111111111111111111111111111 +dqand642 and 1111111111111111111111111111111111 1011111111111111111111111111111111 -> 1011111111111111111111111111111111 +dqand643 and 1111111111111111111111111111111111 1101111111111111111111111111111111 -> 1101111111111111111111111111111111 +dqand644 and 1111111111111111111111111111111111 1110111111111111111111111111111111 -> 1110111111111111111111111111111111 +dqand645 and 1111111111111111111111111111111111 1111011111111111111111111111111111 -> 1111011111111111111111111111111111 +dqand646 and 1111111111111111111111111111111111 1111101111111111111111111111111111 -> 1111101111111111111111111111111111 +dqand647 and 1111111111111111111111111111111111 1111110111111111111111111111111111 -> 1111110111111111111111111111111111 +dqand648 and 1111111111111111111111111111111111 1111111011111111111111111111111111 -> 1111111011111111111111111111111111 +dqand649 and 1111111111111111111111111111111111 1111111101111111111111111111111111 -> 1111111101111111111111111111111111 +dqand650 and 1111111111111111111111111111111111 1111111110111111111111111111111111 -> 1111111110111111111111111111111111 +dqand651 and 1111111111111111111111111111111111 1111111111011111111111111111111111 -> 1111111111011111111111111111111111 +dqand652 and 1111111111111111111111111111111111 1111111111101111111111111111111111 -> 1111111111101111111111111111111111 +dqand653 and 1111111111111111111111111111111111 1111111111110111111111111111111111 -> 1111111111110111111111111111111111 +dqand654 and 1111111111111111111111111111111111 1111111111111011111111111111111111 -> 1111111111111011111111111111111111 +dqand655 and 1111111111111111111111111111111111 1111111111111101111111111111111111 -> 1111111111111101111111111111111111 +dqand656 and 1111111111111111111111111111111111 1111111111111110111111111111111111 -> 1111111111111110111111111111111111 +dqand657 and 1111111111111111111111111111111111 1111111111111111011111111111111111 -> 1111111111111111011111111111111111 +dqand658 and 1111111111111111111111111111111111 1111111111111111101111111111111111 -> 1111111111111111101111111111111111 +dqand659 and 1111111111111111111111111111111111 1111111111111111110111111111111111 -> 1111111111111111110111111111111111 +dqand660 and 1111111111111111111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111011111111111111 +dqand661 and 1111111111111111111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111101111111111111 +dqand662 and 1111111111111111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111110111111111111 +dqand663 and 1111111111111111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111011111111111 +dqand664 and 1111111111111111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111101111111111 +dqand665 and 1111111111111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111110111111111 +dqand666 and 1111111111111111111111111111111111 1111111111111111111111111011111111 -> 1111111111111111111111111011111111 +dqand667 and 1111111111111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111101111111 +dqand668 and 1111111111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111110111111 +dqand669 and 1111111111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111011111 +dqand670 and 1111111111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111101111 +dqand671 and 1111111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111110111 +dqand672 and 1111111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111011 +dqand673 and 1111111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111101 +dqand674 and 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 +dqand675 and 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 111111111111111111111111111111110 +dqand676 and 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 + +dqand021 and 1111111111111111 1111111111111111 -> 1111111111111111 +dqand024 and 1111111111111111 111111111111111 -> 111111111111111 +dqand025 and 1111111111111111 11111111111111 -> 11111111111111 +dqand026 and 1111111111111111 1111111111111 -> 1111111111111 +dqand027 and 1111111111111111 111111111111 -> 111111111111 +dqand028 and 1111111111111111 11111111111 -> 11111111111 +dqand029 and 1111111111111111 1111111111 -> 1111111111 +dqand030 and 1111111111111111 111111111 -> 111111111 +dqand031 and 1111111111111111 11111111 -> 11111111 +dqand032 and 1111111111111111 1111111 -> 1111111 +dqand033 and 1111111111111111 111111 -> 111111 +dqand034 and 1111111111111111 11111 -> 11111 +dqand035 and 1111111111111111 1111 -> 1111 +dqand036 and 1111111111111111 111 -> 111 +dqand037 and 1111111111111111 11 -> 11 +dqand038 and 1111111111111111 1 -> 1 +dqand039 and 1111111111111111 0 -> 0 + +dqand040 and 1111111111111111 1111111111111111 -> 1111111111111111 +dqand041 and 111111111111111 1111111111111111 -> 111111111111111 +dqand042 and 111111111111111 1111111111111111 -> 111111111111111 +dqand043 and 11111111111111 1111111111111111 -> 11111111111111 +dqand044 and 1111111111111 1111111111111111 -> 1111111111111 +dqand045 and 111111111111 1111111111111111 -> 111111111111 +dqand046 and 11111111111 1111111111111111 -> 11111111111 +dqand047 and 1111111111 1111111111111111 -> 1111111111 +dqand048 and 111111111 1111111111111111 -> 111111111 +dqand049 and 11111111 1111111111111111 -> 11111111 +dqand050 and 1111111 1111111111111111 -> 1111111 +dqand051 and 111111 1111111111111111 -> 111111 +dqand052 and 11111 1111111111111111 -> 11111 +dqand053 and 1111 1111111111111111 -> 1111 +dqand054 and 111 1111111111111111 -> 111 +dqand055 and 11 1111111111111111 -> 11 +dqand056 and 1 1111111111111111 -> 1 +dqand057 and 0 1111111111111111 -> 0 + +dqand150 and 1111111111 1 -> 1 +dqand151 and 111111111 1 -> 1 +dqand152 and 11111111 1 -> 1 +dqand153 and 1111111 1 -> 1 +dqand154 and 111111 1 -> 1 +dqand155 and 11111 1 -> 1 +dqand156 and 1111 1 -> 1 +dqand157 and 111 1 -> 1 +dqand158 and 11 1 -> 1 +dqand159 and 1 1 -> 1 + +dqand160 and 1111111111 0 -> 0 +dqand161 and 111111111 0 -> 0 +dqand162 and 11111111 0 -> 0 +dqand163 and 1111111 0 -> 0 +dqand164 and 111111 0 -> 0 +dqand165 and 11111 0 -> 0 +dqand166 and 1111 0 -> 0 +dqand167 and 111 0 -> 0 +dqand168 and 11 0 -> 0 +dqand169 and 1 0 -> 0 + +dqand170 and 1 1111111111 -> 1 +dqand171 and 1 111111111 -> 1 +dqand172 and 1 11111111 -> 1 +dqand173 and 1 1111111 -> 1 +dqand174 and 1 111111 -> 1 +dqand175 and 1 11111 -> 1 +dqand176 and 1 1111 -> 1 +dqand177 and 1 111 -> 1 +dqand178 and 1 11 -> 1 +dqand179 and 1 1 -> 1 + +dqand180 and 0 1111111111 -> 0 +dqand181 and 0 111111111 -> 0 +dqand182 and 0 11111111 -> 0 +dqand183 and 0 1111111 -> 0 +dqand184 and 0 111111 -> 0 +dqand185 and 0 11111 -> 0 +dqand186 and 0 1111 -> 0 +dqand187 and 0 111 -> 0 +dqand188 and 0 11 -> 0 +dqand189 and 0 1 -> 0 + +dqand090 and 011111111 111111111 -> 11111111 +dqand091 and 101111111 111111111 -> 101111111 +dqand092 and 110111111 111111111 -> 110111111 +dqand093 and 111011111 111111111 -> 111011111 +dqand094 and 111101111 111111111 -> 111101111 +dqand095 and 111110111 111111111 -> 111110111 +dqand096 and 111111011 111111111 -> 111111011 +dqand097 and 111111101 111111111 -> 111111101 +dqand098 and 111111110 111111111 -> 111111110 + +dqand100 and 111111111 011111111 -> 11111111 +dqand101 and 111111111 101111111 -> 101111111 +dqand102 and 111111111 110111111 -> 110111111 +dqand103 and 111111111 111011111 -> 111011111 +dqand104 and 111111111 111101111 -> 111101111 +dqand105 and 111111111 111110111 -> 111110111 +dqand106 and 111111111 111111011 -> 111111011 +dqand107 and 111111111 111111101 -> 111111101 +dqand108 and 111111111 111111110 -> 111111110 + +-- non-0/1 should not be accepted, nor should signs +dqand220 and 111111112 111111111 -> NaN Invalid_operation +dqand221 and 333333333 333333333 -> NaN Invalid_operation +dqand222 and 555555555 555555555 -> NaN Invalid_operation +dqand223 and 777777777 777777777 -> NaN Invalid_operation +dqand224 and 999999999 999999999 -> NaN Invalid_operation +dqand225 and 222222222 999999999 -> NaN Invalid_operation +dqand226 and 444444444 999999999 -> NaN Invalid_operation +dqand227 and 666666666 999999999 -> NaN Invalid_operation +dqand228 and 888888888 999999999 -> NaN Invalid_operation +dqand229 and 999999999 222222222 -> NaN Invalid_operation +dqand230 and 999999999 444444444 -> NaN Invalid_operation +dqand231 and 999999999 666666666 -> NaN Invalid_operation +dqand232 and 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +dqand240 and 567468689 -934981942 -> NaN Invalid_operation +dqand241 and 567367689 934981942 -> NaN Invalid_operation +dqand242 and -631917772 -706014634 -> NaN Invalid_operation +dqand243 and -756253257 138579234 -> NaN Invalid_operation +dqand244 and 835590149 567435400 -> NaN Invalid_operation +-- test MSD +dqand250 and 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqand251 and 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqand252 and 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqand253 and 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqand254 and 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqand255 and 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqand256 and 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqand257 and 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqand258 and 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqand259 and 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqand260 and 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqand261 and 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +dqand262 and 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqand263 and 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqand264 and 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqand265 and 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +-- test MSD-1 +dqand270 and 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation +dqand271 and 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation +dqand272 and 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation +dqand273 and 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation +dqand274 and 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation +dqand275 and 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation +dqand276 and 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation +dqand277 and 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation +-- test LSD +dqand280 and 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation +dqand281 and 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation +dqand282 and 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation +dqand283 and 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation +dqand284 and 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation +dqand285 and 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation +dqand286 and 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation +dqand287 and 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation +-- test Middie +dqand288 and 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation +dqand289 and 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation +dqand290 and 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation +dqand291 and 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation +dqand292 and 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation +dqand293 and 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation +dqand294 and 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation +dqand295 and 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation +-- signs +dqand296 and -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation +dqand297 and -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation +dqand298 and 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation +dqand299 and 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 110000110000110000001000000 + +-- Nmax, Nmin, Ntiny-like +dqand331 and 2 9.99999999E+999 -> NaN Invalid_operation +dqand332 and 3 1E-999 -> NaN Invalid_operation +dqand333 and 4 1.00000000E-999 -> NaN Invalid_operation +dqand334 and 5 1E-900 -> NaN Invalid_operation +dqand335 and 6 -1E-900 -> NaN Invalid_operation +dqand336 and 7 -1.00000000E-999 -> NaN Invalid_operation +dqand337 and 8 -1E-999 -> NaN Invalid_operation +dqand338 and 9 -9.99999999E+999 -> NaN Invalid_operation +dqand341 and 9.99999999E+999 -18 -> NaN Invalid_operation +dqand342 and 1E-999 01 -> NaN Invalid_operation +dqand343 and 1.00000000E-999 -18 -> NaN Invalid_operation +dqand344 and 1E-900 18 -> NaN Invalid_operation +dqand345 and -1E-900 -10 -> NaN Invalid_operation +dqand346 and -1.00000000E-999 18 -> NaN Invalid_operation +dqand347 and -1E-999 10 -> NaN Invalid_operation +dqand348 and -9.99999999E+999 -18 -> NaN Invalid_operation + +-- A few other non-integers +dqand361 and 1.0 1 -> NaN Invalid_operation +dqand362 and 1E+1 1 -> NaN Invalid_operation +dqand363 and 0.0 1 -> NaN Invalid_operation +dqand364 and 0E+1 1 -> NaN Invalid_operation +dqand365 and 9.9 1 -> NaN Invalid_operation +dqand366 and 9E+1 1 -> NaN Invalid_operation +dqand371 and 0 1.0 -> NaN Invalid_operation +dqand372 and 0 1E+1 -> NaN Invalid_operation +dqand373 and 0 0.0 -> NaN Invalid_operation +dqand374 and 0 0E+1 -> NaN Invalid_operation +dqand375 and 0 9.9 -> NaN Invalid_operation +dqand376 and 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +dqand780 and -Inf -Inf -> NaN Invalid_operation +dqand781 and -Inf -1000 -> NaN Invalid_operation +dqand782 and -Inf -1 -> NaN Invalid_operation +dqand783 and -Inf -0 -> NaN Invalid_operation +dqand784 and -Inf 0 -> NaN Invalid_operation +dqand785 and -Inf 1 -> NaN Invalid_operation +dqand786 and -Inf 1000 -> NaN Invalid_operation +dqand787 and -1000 -Inf -> NaN Invalid_operation +dqand788 and -Inf -Inf -> NaN Invalid_operation +dqand789 and -1 -Inf -> NaN Invalid_operation +dqand790 and -0 -Inf -> NaN Invalid_operation +dqand791 and 0 -Inf -> NaN Invalid_operation +dqand792 and 1 -Inf -> NaN Invalid_operation +dqand793 and 1000 -Inf -> NaN Invalid_operation +dqand794 and Inf -Inf -> NaN Invalid_operation + +dqand800 and Inf -Inf -> NaN Invalid_operation +dqand801 and Inf -1000 -> NaN Invalid_operation +dqand802 and Inf -1 -> NaN Invalid_operation +dqand803 and Inf -0 -> NaN Invalid_operation +dqand804 and Inf 0 -> NaN Invalid_operation +dqand805 and Inf 1 -> NaN Invalid_operation +dqand806 and Inf 1000 -> NaN Invalid_operation +dqand807 and Inf Inf -> NaN Invalid_operation +dqand808 and -1000 Inf -> NaN Invalid_operation +dqand809 and -Inf Inf -> NaN Invalid_operation +dqand810 and -1 Inf -> NaN Invalid_operation +dqand811 and -0 Inf -> NaN Invalid_operation +dqand812 and 0 Inf -> NaN Invalid_operation +dqand813 and 1 Inf -> NaN Invalid_operation +dqand814 and 1000 Inf -> NaN Invalid_operation +dqand815 and Inf Inf -> NaN Invalid_operation + +dqand821 and NaN -Inf -> NaN Invalid_operation +dqand822 and NaN -1000 -> NaN Invalid_operation +dqand823 and NaN -1 -> NaN Invalid_operation +dqand824 and NaN -0 -> NaN Invalid_operation +dqand825 and NaN 0 -> NaN Invalid_operation +dqand826 and NaN 1 -> NaN Invalid_operation +dqand827 and NaN 1000 -> NaN Invalid_operation +dqand828 and NaN Inf -> NaN Invalid_operation +dqand829 and NaN NaN -> NaN Invalid_operation +dqand830 and -Inf NaN -> NaN Invalid_operation +dqand831 and -1000 NaN -> NaN Invalid_operation +dqand832 and -1 NaN -> NaN Invalid_operation +dqand833 and -0 NaN -> NaN Invalid_operation +dqand834 and 0 NaN -> NaN Invalid_operation +dqand835 and 1 NaN -> NaN Invalid_operation +dqand836 and 1000 NaN -> NaN Invalid_operation +dqand837 and Inf NaN -> NaN Invalid_operation + +dqand841 and sNaN -Inf -> NaN Invalid_operation +dqand842 and sNaN -1000 -> NaN Invalid_operation +dqand843 and sNaN -1 -> NaN Invalid_operation +dqand844 and sNaN -0 -> NaN Invalid_operation +dqand845 and sNaN 0 -> NaN Invalid_operation +dqand846 and sNaN 1 -> NaN Invalid_operation +dqand847 and sNaN 1000 -> NaN Invalid_operation +dqand848 and sNaN NaN -> NaN Invalid_operation +dqand849 and sNaN sNaN -> NaN Invalid_operation +dqand850 and NaN sNaN -> NaN Invalid_operation +dqand851 and -Inf sNaN -> NaN Invalid_operation +dqand852 and -1000 sNaN -> NaN Invalid_operation +dqand853 and -1 sNaN -> NaN Invalid_operation +dqand854 and -0 sNaN -> NaN Invalid_operation +dqand855 and 0 sNaN -> NaN Invalid_operation +dqand856 and 1 sNaN -> NaN Invalid_operation +dqand857 and 1000 sNaN -> NaN Invalid_operation +dqand858 and Inf sNaN -> NaN Invalid_operation +dqand859 and NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqand861 and NaN1 -Inf -> NaN Invalid_operation +dqand862 and +NaN2 -1000 -> NaN Invalid_operation +dqand863 and NaN3 1000 -> NaN Invalid_operation +dqand864 and NaN4 Inf -> NaN Invalid_operation +dqand865 and NaN5 +NaN6 -> NaN Invalid_operation +dqand866 and -Inf NaN7 -> NaN Invalid_operation +dqand867 and -1000 NaN8 -> NaN Invalid_operation +dqand868 and 1000 NaN9 -> NaN Invalid_operation +dqand869 and Inf +NaN10 -> NaN Invalid_operation +dqand871 and sNaN11 -Inf -> NaN Invalid_operation +dqand872 and sNaN12 -1000 -> NaN Invalid_operation +dqand873 and sNaN13 1000 -> NaN Invalid_operation +dqand874 and sNaN14 NaN17 -> NaN Invalid_operation +dqand875 and sNaN15 sNaN18 -> NaN Invalid_operation +dqand876 and NaN16 sNaN19 -> NaN Invalid_operation +dqand877 and -Inf +sNaN20 -> NaN Invalid_operation +dqand878 and -1000 sNaN21 -> NaN Invalid_operation +dqand879 and 1000 sNaN22 -> NaN Invalid_operation +dqand880 and Inf sNaN23 -> NaN Invalid_operation +dqand881 and +NaN25 +sNaN24 -> NaN Invalid_operation +dqand882 and -NaN26 NaN28 -> NaN Invalid_operation +dqand883 and -sNaN27 sNaN29 -> NaN Invalid_operation +dqand884 and 1000 -NaN30 -> NaN Invalid_operation +dqand885 and 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqBase.decTest b/Lib/test/decimaltestdata/dqBase.decTest index d09c6bf02cc..6bb463388e1 100644 --- a/Lib/test/decimaltestdata/dqBase.decTest +++ b/Lib/test/decimaltestdata/dqBase.decTest @@ -1,1081 +1,1081 @@ ------------------------------------------------------------------------- --- dqBase.decTest -- base decQuad <--> string conversions -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests base conversions from string to a decimal number --- and back to a string (in Scientific form) - --- Note that unlike other operations the operand is subject to rounding --- to conform to emax and precision settings (that is, numbers will --- conform to rules and exponent will be in permitted range). The --- 'left hand side', therefore, may have numbers that cannot be --- represented in a decQuad. Some testcases go to the limit of the --- next-wider format, and hence these testcases may also be used to --- test narrowing and widening operations. - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqbas001 toSci 0 -> 0 -dqbas002 toSci 1 -> 1 -dqbas003 toSci 1.0 -> 1.0 -dqbas004 toSci 1.00 -> 1.00 -dqbas005 toSci 10 -> 10 -dqbas006 toSci 1000 -> 1000 -dqbas007 toSci 10.0 -> 10.0 -dqbas008 toSci 10.1 -> 10.1 -dqbas009 toSci 10.4 -> 10.4 -dqbas010 toSci 10.5 -> 10.5 -dqbas011 toSci 10.6 -> 10.6 -dqbas012 toSci 10.9 -> 10.9 -dqbas013 toSci 11.0 -> 11.0 -dqbas014 toSci 1.234 -> 1.234 -dqbas015 toSci 0.123 -> 0.123 -dqbas016 toSci 0.012 -> 0.012 -dqbas017 toSci -0 -> -0 -dqbas018 toSci -0.0 -> -0.0 -dqbas019 toSci -00.00 -> -0.00 - -dqbas021 toSci -1 -> -1 -dqbas022 toSci -1.0 -> -1.0 -dqbas023 toSci -0.1 -> -0.1 -dqbas024 toSci -9.1 -> -9.1 -dqbas025 toSci -9.11 -> -9.11 -dqbas026 toSci -9.119 -> -9.119 -dqbas027 toSci -9.999 -> -9.999 - -dqbas030 toSci '123456789.123456' -> '123456789.123456' -dqbas031 toSci '123456789.000000' -> '123456789.000000' -dqbas032 toSci '123456789123456' -> '123456789123456' -dqbas033 toSci '0.0000123456789' -> '0.0000123456789' -dqbas034 toSci '0.00000123456789' -> '0.00000123456789' -dqbas035 toSci '0.000000123456789' -> '1.23456789E-7' -dqbas036 toSci '0.0000000123456789' -> '1.23456789E-8' - -dqbas037 toSci '0.123456789012344' -> '0.123456789012344' -dqbas038 toSci '0.123456789012345' -> '0.123456789012345' - --- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) -dqbsn001 toSci -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqbsn002 toSci -1E-6143 -> -1E-6143 -dqbsn003 toSci -1E-6176 -> -1E-6176 Subnormal -dqbsn004 toSci -0 -> -0 -dqbsn005 toSci +0 -> 0 -dqbsn006 toSci +1E-6176 -> 1E-6176 Subnormal -dqbsn007 toSci +1E-6143 -> 1E-6143 -dqbsn008 toSci +9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 - --- String [many more examples are implicitly tested elsewhere] --- strings without E cannot generate E in result -dqbas040 toSci "12" -> '12' -dqbas041 toSci "-76" -> '-76' -dqbas042 toSci "12.76" -> '12.76' -dqbas043 toSci "+12.76" -> '12.76' -dqbas044 toSci "012.76" -> '12.76' -dqbas045 toSci "+0.003" -> '0.003' -dqbas046 toSci "17." -> '17' -dqbas047 toSci ".5" -> '0.5' -dqbas048 toSci "044" -> '44' -dqbas049 toSci "0044" -> '44' -dqbas050 toSci "0.0005" -> '0.0005' -dqbas051 toSci "00.00005" -> '0.00005' -dqbas052 toSci "0.000005" -> '0.000005' -dqbas053 toSci "0.0000050" -> '0.0000050' -dqbas054 toSci "0.0000005" -> '5E-7' -dqbas055 toSci "0.00000005" -> '5E-8' -dqbas056 toSci "12345678.543210" -> '12345678.543210' -dqbas057 toSci "2345678.543210" -> '2345678.543210' -dqbas058 toSci "345678.543210" -> '345678.543210' -dqbas059 toSci "0345678.54321" -> '345678.54321' -dqbas060 toSci "345678.5432" -> '345678.5432' -dqbas061 toSci "+345678.5432" -> '345678.5432' -dqbas062 toSci "+0345678.5432" -> '345678.5432' -dqbas063 toSci "+00345678.5432" -> '345678.5432' -dqbas064 toSci "-345678.5432" -> '-345678.5432' -dqbas065 toSci "-0345678.5432" -> '-345678.5432' -dqbas066 toSci "-00345678.5432" -> '-345678.5432' --- examples -dqbas067 toSci "5E-6" -> '0.000005' -dqbas068 toSci "50E-7" -> '0.0000050' -dqbas069 toSci "5E-7" -> '5E-7' - --- [No exotics as no Unicode] - --- rounded with dots in all (including edge) places -dqbas071 toSci .1234567891234567890123456780123456123 -> 0.1234567891234567890123456780123456 Inexact Rounded -dqbas072 toSci 1.234567891234567890123456780123456123 -> 1.234567891234567890123456780123456 Inexact Rounded -dqbas073 toSci 12.34567891234567890123456780123456123 -> 12.34567891234567890123456780123456 Inexact Rounded -dqbas074 toSci 123.4567891234567890123456780123456123 -> 123.4567891234567890123456780123456 Inexact Rounded -dqbas075 toSci 1234.567891234567890123456780123456123 -> 1234.567891234567890123456780123456 Inexact Rounded -dqbas076 toSci 12345.67891234567890123456780123456123 -> 12345.67891234567890123456780123456 Inexact Rounded -dqbas077 toSci 123456.7891234567890123456780123456123 -> 123456.7891234567890123456780123456 Inexact Rounded -dqbas078 toSci 1234567.891234567890123456780123456123 -> 1234567.891234567890123456780123456 Inexact Rounded -dqbas079 toSci 12345678.91234567890123456780123456123 -> 12345678.91234567890123456780123456 Inexact Rounded -dqbas080 toSci 123456789.1234567890123456780123456123 -> 123456789.1234567890123456780123456 Inexact Rounded -dqbas081 toSci 1234567891.234567890123456780123456123 -> 1234567891.234567890123456780123456 Inexact Rounded -dqbas082 toSci 12345678912.34567890123456780123456123 -> 12345678912.34567890123456780123456 Inexact Rounded -dqbas083 toSci 123456789123.4567890123456780123456123 -> 123456789123.4567890123456780123456 Inexact Rounded -dqbas084 toSci 1234567891234.567890123456780123456123 -> 1234567891234.567890123456780123456 Inexact Rounded -dqbas085 toSci 12345678912345.67890123456780123456123 -> 12345678912345.67890123456780123456 Inexact Rounded -dqbas086 toSci 123456789123456.7890123456780123456123 -> 123456789123456.7890123456780123456 Inexact Rounded -dqbas087 toSci 1234567891234567.890123456780123456123 -> 1234567891234567.890123456780123456 Inexact Rounded -dqbas088 toSci 12345678912345678.90123456780123456123 -> 12345678912345678.90123456780123456 Inexact Rounded -dqbas089 toSci 123456789123456789.0123456780123456123 -> 123456789123456789.0123456780123456 Inexact Rounded -dqbas090 toSci 1234567891234567890.123456780123456123 -> 1234567891234567890.123456780123456 Inexact Rounded -dqbas091 toSci 12345678912345678901.23456780123456123 -> 12345678912345678901.23456780123456 Inexact Rounded -dqbas092 toSci 123456789123456789012.3456780123456123 -> 123456789123456789012.3456780123456 Inexact Rounded -dqbas093 toSci 1234567891234567890123.456780123456123 -> 1234567891234567890123.456780123456 Inexact Rounded -dqbas094 toSci 12345678912345678901234.56780123456123 -> 12345678912345678901234.56780123456 Inexact Rounded -dqbas095 toSci 123456789123456789012345.6780123456123 -> 123456789123456789012345.6780123456 Inexact Rounded -dqbas096 toSci 1234567891234567890123456.780123456123 -> 1234567891234567890123456.780123456 Inexact Rounded -dqbas097 toSci 12345678912345678901234567.80123456123 -> 12345678912345678901234567.80123456 Inexact Rounded -dqbas098 toSci 123456789123456789012345678.0123456123 -> 123456789123456789012345678.0123456 Inexact Rounded -dqbas099 toSci 1234567891234567890123456780.123456123 -> 1234567891234567890123456780.123456 Inexact Rounded -dqbas100 toSci 12345678912345678901234567801.23456123 -> 12345678912345678901234567801.23456 Inexact Rounded -dqbas101 toSci 123456789123456789012345678012.3456123 -> 123456789123456789012345678012.3456 Inexact Rounded -dqbas102 toSci 1234567891234567890123456780123.456123 -> 1234567891234567890123456780123.456 Inexact Rounded -dqbas103 toSci 12345678912345678901234567801234.56123 -> 12345678912345678901234567801234.56 Inexact Rounded -dqbas104 toSci 123456789123456789012345678012345.6123 -> 123456789123456789012345678012345.6 Inexact Rounded -dqbas105 toSci 1234567891234567890123456780123456.123 -> 1234567891234567890123456780123456 Inexact Rounded -dqbas106 toSci 12345678912345678901234567801234561.23 -> 1.234567891234567890123456780123456E+34 Inexact Rounded -dqbas107 toSci 123456789123456789012345678012345612.3 -> 1.234567891234567890123456780123456E+35 Inexact Rounded -dqbas108 toSci 1234567891234567890123456780123456123. -> 1.234567891234567890123456780123456E+36 Inexact Rounded --- 123456789012345678 - --- Numbers with E -dqbas130 toSci "0.000E-1" -> '0.0000' -dqbas131 toSci "0.000E-2" -> '0.00000' -dqbas132 toSci "0.000E-3" -> '0.000000' -dqbas133 toSci "0.000E-4" -> '0E-7' -dqbas134 toSci "0.00E-2" -> '0.0000' -dqbas135 toSci "0.00E-3" -> '0.00000' -dqbas136 toSci "0.00E-4" -> '0.000000' -dqbas137 toSci "0.00E-5" -> '0E-7' -dqbas138 toSci "+0E+9" -> '0E+9' -dqbas139 toSci "-0E+9" -> '-0E+9' -dqbas140 toSci "1E+9" -> '1E+9' -dqbas141 toSci "1e+09" -> '1E+9' -dqbas142 toSci "1E+90" -> '1E+90' -dqbas143 toSci "+1E+009" -> '1E+9' -dqbas144 toSci "0E+9" -> '0E+9' -dqbas145 toSci "1E+9" -> '1E+9' -dqbas146 toSci "1E+09" -> '1E+9' -dqbas147 toSci "1e+90" -> '1E+90' -dqbas148 toSci "1E+009" -> '1E+9' -dqbas149 toSci "000E+9" -> '0E+9' -dqbas150 toSci "1E9" -> '1E+9' -dqbas151 toSci "1e09" -> '1E+9' -dqbas152 toSci "1E90" -> '1E+90' -dqbas153 toSci "1E009" -> '1E+9' -dqbas154 toSci "0E9" -> '0E+9' -dqbas155 toSci "0.000e+0" -> '0.000' -dqbas156 toSci "0.000E-1" -> '0.0000' -dqbas157 toSci "4E+9" -> '4E+9' -dqbas158 toSci "44E+9" -> '4.4E+10' -dqbas159 toSci "0.73e-7" -> '7.3E-8' -dqbas160 toSci "00E+9" -> '0E+9' -dqbas161 toSci "00E-9" -> '0E-9' -dqbas162 toSci "10E+9" -> '1.0E+10' -dqbas163 toSci "10E+09" -> '1.0E+10' -dqbas164 toSci "10e+90" -> '1.0E+91' -dqbas165 toSci "10E+009" -> '1.0E+10' -dqbas166 toSci "100e+9" -> '1.00E+11' -dqbas167 toSci "100e+09" -> '1.00E+11' -dqbas168 toSci "100E+90" -> '1.00E+92' -dqbas169 toSci "100e+009" -> '1.00E+11' - -dqbas170 toSci "1.265" -> '1.265' -dqbas171 toSci "1.265E-20" -> '1.265E-20' -dqbas172 toSci "1.265E-8" -> '1.265E-8' -dqbas173 toSci "1.265E-4" -> '0.0001265' -dqbas174 toSci "1.265E-3" -> '0.001265' -dqbas175 toSci "1.265E-2" -> '0.01265' -dqbas176 toSci "1.265E-1" -> '0.1265' -dqbas177 toSci "1.265E-0" -> '1.265' -dqbas178 toSci "1.265E+1" -> '12.65' -dqbas179 toSci "1.265E+2" -> '126.5' -dqbas180 toSci "1.265E+3" -> '1265' -dqbas181 toSci "1.265E+4" -> '1.265E+4' -dqbas182 toSci "1.265E+8" -> '1.265E+8' -dqbas183 toSci "1.265E+20" -> '1.265E+20' - -dqbas190 toSci "12.65" -> '12.65' -dqbas191 toSci "12.65E-20" -> '1.265E-19' -dqbas192 toSci "12.65E-8" -> '1.265E-7' -dqbas193 toSci "12.65E-4" -> '0.001265' -dqbas194 toSci "12.65E-3" -> '0.01265' -dqbas195 toSci "12.65E-2" -> '0.1265' -dqbas196 toSci "12.65E-1" -> '1.265' -dqbas197 toSci "12.65E-0" -> '12.65' -dqbas198 toSci "12.65E+1" -> '126.5' -dqbas199 toSci "12.65E+2" -> '1265' -dqbas200 toSci "12.65E+3" -> '1.265E+4' -dqbas201 toSci "12.65E+4" -> '1.265E+5' -dqbas202 toSci "12.65E+8" -> '1.265E+9' -dqbas203 toSci "12.65E+20" -> '1.265E+21' - -dqbas210 toSci "126.5" -> '126.5' -dqbas211 toSci "126.5E-20" -> '1.265E-18' -dqbas212 toSci "126.5E-8" -> '0.000001265' -dqbas213 toSci "126.5E-4" -> '0.01265' -dqbas214 toSci "126.5E-3" -> '0.1265' -dqbas215 toSci "126.5E-2" -> '1.265' -dqbas216 toSci "126.5E-1" -> '12.65' -dqbas217 toSci "126.5E-0" -> '126.5' -dqbas218 toSci "126.5E+1" -> '1265' -dqbas219 toSci "126.5E+2" -> '1.265E+4' -dqbas220 toSci "126.5E+3" -> '1.265E+5' -dqbas221 toSci "126.5E+4" -> '1.265E+6' -dqbas222 toSci "126.5E+8" -> '1.265E+10' -dqbas223 toSci "126.5E+20" -> '1.265E+22' - -dqbas230 toSci "1265" -> '1265' -dqbas231 toSci "1265E-20" -> '1.265E-17' -dqbas232 toSci "1265E-8" -> '0.00001265' -dqbas233 toSci "1265E-4" -> '0.1265' -dqbas234 toSci "1265E-3" -> '1.265' -dqbas235 toSci "1265E-2" -> '12.65' -dqbas236 toSci "1265E-1" -> '126.5' -dqbas237 toSci "1265E-0" -> '1265' -dqbas238 toSci "1265E+1" -> '1.265E+4' -dqbas239 toSci "1265E+2" -> '1.265E+5' -dqbas240 toSci "1265E+3" -> '1.265E+6' -dqbas241 toSci "1265E+4" -> '1.265E+7' -dqbas242 toSci "1265E+8" -> '1.265E+11' -dqbas243 toSci "1265E+20" -> '1.265E+23' - -dqbas250 toSci "0.1265" -> '0.1265' -dqbas251 toSci "0.1265E-20" -> '1.265E-21' -dqbas252 toSci "0.1265E-8" -> '1.265E-9' -dqbas253 toSci "0.1265E-4" -> '0.00001265' -dqbas254 toSci "0.1265E-3" -> '0.0001265' -dqbas255 toSci "0.1265E-2" -> '0.001265' -dqbas256 toSci "0.1265E-1" -> '0.01265' -dqbas257 toSci "0.1265E-0" -> '0.1265' -dqbas258 toSci "0.1265E+1" -> '1.265' -dqbas259 toSci "0.1265E+2" -> '12.65' -dqbas260 toSci "0.1265E+3" -> '126.5' -dqbas261 toSci "0.1265E+4" -> '1265' -dqbas262 toSci "0.1265E+8" -> '1.265E+7' -dqbas263 toSci "0.1265E+20" -> '1.265E+19' - --- some more negative zeros [systematic tests below] -dqbas290 toSci "-0.000E-1" -> '-0.0000' -dqbas291 toSci "-0.000E-2" -> '-0.00000' -dqbas292 toSci "-0.000E-3" -> '-0.000000' -dqbas293 toSci "-0.000E-4" -> '-0E-7' -dqbas294 toSci "-0.00E-2" -> '-0.0000' -dqbas295 toSci "-0.00E-3" -> '-0.00000' -dqbas296 toSci "-0.0E-2" -> '-0.000' -dqbas297 toSci "-0.0E-3" -> '-0.0000' -dqbas298 toSci "-0E-2" -> '-0.00' -dqbas299 toSci "-0E-3" -> '-0.000' - --- Engineering notation tests -dqbas301 toSci 10e12 -> 1.0E+13 -dqbas302 toEng 10e12 -> 10E+12 -dqbas303 toSci 10e11 -> 1.0E+12 -dqbas304 toEng 10e11 -> 1.0E+12 -dqbas305 toSci 10e10 -> 1.0E+11 -dqbas306 toEng 10e10 -> 100E+9 -dqbas307 toSci 10e9 -> 1.0E+10 -dqbas308 toEng 10e9 -> 10E+9 -dqbas309 toSci 10e8 -> 1.0E+9 -dqbas310 toEng 10e8 -> 1.0E+9 -dqbas311 toSci 10e7 -> 1.0E+8 -dqbas312 toEng 10e7 -> 100E+6 -dqbas313 toSci 10e6 -> 1.0E+7 -dqbas314 toEng 10e6 -> 10E+6 -dqbas315 toSci 10e5 -> 1.0E+6 -dqbas316 toEng 10e5 -> 1.0E+6 -dqbas317 toSci 10e4 -> 1.0E+5 -dqbas318 toEng 10e4 -> 100E+3 -dqbas319 toSci 10e3 -> 1.0E+4 -dqbas320 toEng 10e3 -> 10E+3 -dqbas321 toSci 10e2 -> 1.0E+3 -dqbas322 toEng 10e2 -> 1.0E+3 -dqbas323 toSci 10e1 -> 1.0E+2 -dqbas324 toEng 10e1 -> 100 -dqbas325 toSci 10e0 -> 10 -dqbas326 toEng 10e0 -> 10 -dqbas327 toSci 10e-1 -> 1.0 -dqbas328 toEng 10e-1 -> 1.0 -dqbas329 toSci 10e-2 -> 0.10 -dqbas330 toEng 10e-2 -> 0.10 -dqbas331 toSci 10e-3 -> 0.010 -dqbas332 toEng 10e-3 -> 0.010 -dqbas333 toSci 10e-4 -> 0.0010 -dqbas334 toEng 10e-4 -> 0.0010 -dqbas335 toSci 10e-5 -> 0.00010 -dqbas336 toEng 10e-5 -> 0.00010 -dqbas337 toSci 10e-6 -> 0.000010 -dqbas338 toEng 10e-6 -> 0.000010 -dqbas339 toSci 10e-7 -> 0.0000010 -dqbas340 toEng 10e-7 -> 0.0000010 -dqbas341 toSci 10e-8 -> 1.0E-7 -dqbas342 toEng 10e-8 -> 100E-9 -dqbas343 toSci 10e-9 -> 1.0E-8 -dqbas344 toEng 10e-9 -> 10E-9 -dqbas345 toSci 10e-10 -> 1.0E-9 -dqbas346 toEng 10e-10 -> 1.0E-9 -dqbas347 toSci 10e-11 -> 1.0E-10 -dqbas348 toEng 10e-11 -> 100E-12 -dqbas349 toSci 10e-12 -> 1.0E-11 -dqbas350 toEng 10e-12 -> 10E-12 -dqbas351 toSci 10e-13 -> 1.0E-12 -dqbas352 toEng 10e-13 -> 1.0E-12 - -dqbas361 toSci 7E12 -> 7E+12 -dqbas362 toEng 7E12 -> 7E+12 -dqbas363 toSci 7E11 -> 7E+11 -dqbas364 toEng 7E11 -> 700E+9 -dqbas365 toSci 7E10 -> 7E+10 -dqbas366 toEng 7E10 -> 70E+9 -dqbas367 toSci 7E9 -> 7E+9 -dqbas368 toEng 7E9 -> 7E+9 -dqbas369 toSci 7E8 -> 7E+8 -dqbas370 toEng 7E8 -> 700E+6 -dqbas371 toSci 7E7 -> 7E+7 -dqbas372 toEng 7E7 -> 70E+6 -dqbas373 toSci 7E6 -> 7E+6 -dqbas374 toEng 7E6 -> 7E+6 -dqbas375 toSci 7E5 -> 7E+5 -dqbas376 toEng 7E5 -> 700E+3 -dqbas377 toSci 7E4 -> 7E+4 -dqbas378 toEng 7E4 -> 70E+3 -dqbas379 toSci 7E3 -> 7E+3 -dqbas380 toEng 7E3 -> 7E+3 -dqbas381 toSci 7E2 -> 7E+2 -dqbas382 toEng 7E2 -> 700 -dqbas383 toSci 7E1 -> 7E+1 -dqbas384 toEng 7E1 -> 70 -dqbas385 toSci 7E0 -> 7 -dqbas386 toEng 7E0 -> 7 -dqbas387 toSci 7E-1 -> 0.7 -dqbas388 toEng 7E-1 -> 0.7 -dqbas389 toSci 7E-2 -> 0.07 -dqbas390 toEng 7E-2 -> 0.07 -dqbas391 toSci 7E-3 -> 0.007 -dqbas392 toEng 7E-3 -> 0.007 -dqbas393 toSci 7E-4 -> 0.0007 -dqbas394 toEng 7E-4 -> 0.0007 -dqbas395 toSci 7E-5 -> 0.00007 -dqbas396 toEng 7E-5 -> 0.00007 -dqbas397 toSci 7E-6 -> 0.000007 -dqbas398 toEng 7E-6 -> 0.000007 -dqbas399 toSci 7E-7 -> 7E-7 -dqbas400 toEng 7E-7 -> 700E-9 -dqbas401 toSci 7E-8 -> 7E-8 -dqbas402 toEng 7E-8 -> 70E-9 -dqbas403 toSci 7E-9 -> 7E-9 -dqbas404 toEng 7E-9 -> 7E-9 -dqbas405 toSci 7E-10 -> 7E-10 -dqbas406 toEng 7E-10 -> 700E-12 -dqbas407 toSci 7E-11 -> 7E-11 -dqbas408 toEng 7E-11 -> 70E-12 -dqbas409 toSci 7E-12 -> 7E-12 -dqbas410 toEng 7E-12 -> 7E-12 -dqbas411 toSci 7E-13 -> 7E-13 -dqbas412 toEng 7E-13 -> 700E-15 - --- Exacts remain exact up to precision .. -dqbas420 toSci 100 -> 100 -dqbas422 toSci 1000 -> 1000 -dqbas424 toSci 999.9 -> 999.9 -dqbas426 toSci 1000.0 -> 1000.0 -dqbas428 toSci 1000.1 -> 1000.1 -dqbas430 toSci 10000 -> 10000 -dqbas432 toSci 1000000000000000000000000000000 -> 1000000000000000000000000000000 -dqbas434 toSci 10000000000000000000000000000000 -> 10000000000000000000000000000000 -dqbas436 toSci 100000000000000000000000000000000 -> 100000000000000000000000000000000 -dqbas438 toSci 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqbas440 toSci 10000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+34 Rounded -dqbas442 toSci 10000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+34 Rounded -dqbas444 toSci 10000000000000000000000000000000003 -> 1.000000000000000000000000000000000E+34 Rounded Inexact -dqbas446 toSci 10000000000000000000000000000000005 -> 1.000000000000000000000000000000000E+34 Rounded Inexact -dqbas448 toSci 100000000000000000000000000000000050 -> 1.000000000000000000000000000000000E+35 Rounded Inexact -dqbas450 toSci 10000000000000000000000000000000009 -> 1.000000000000000000000000000000001E+34 Rounded Inexact -dqbas452 toSci 100000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+35 Rounded -dqbas454 toSci 100000000000000000000000000000000003 -> 1.000000000000000000000000000000000E+35 Rounded Inexact -dqbas456 toSci 100000000000000000000000000000000005 -> 1.000000000000000000000000000000000E+35 Rounded Inexact -dqbas458 toSci 100000000000000000000000000000000009 -> 1.000000000000000000000000000000000E+35 Rounded Inexact -dqbas460 toSci 1000000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+36 Rounded -dqbas462 toSci 1000000000000000000000000000000000300 -> 1.000000000000000000000000000000000E+36 Rounded Inexact -dqbas464 toSci 1000000000000000000000000000000000500 -> 1.000000000000000000000000000000000E+36 Rounded Inexact -dqbas466 toSci 1000000000000000000000000000000000900 -> 1.000000000000000000000000000000001E+36 Rounded Inexact -dqbas468 toSci 10000000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+37 Rounded -dqbas470 toSci 10000000000000000000000000000000003000 -> 1.000000000000000000000000000000000E+37 Rounded Inexact -dqbas472 toSci 10000000000000000000000000000000005000 -> 1.000000000000000000000000000000000E+37 Rounded Inexact -dqbas474 toSci 10000000000000000000000000000000009000 -> 1.000000000000000000000000000000001E+37 Rounded Inexact - --- check rounding modes heeded -rounding: ceiling -dqbsr401 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr402 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr403 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr404 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact -rounding: up -dqbsr405 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr406 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr407 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr408 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact -rounding: floor -dqbsr410 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr411 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr412 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr413 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112345 Rounded Inexact -rounding: half_down -dqbsr415 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr416 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr417 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr418 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr419 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact -rounding: half_even -dqbsr421 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr422 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr423 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr424 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr425 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact -rounding: down -dqbsr426 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr427 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr428 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr429 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112345 Rounded Inexact -rounding: half_up -dqbsr431 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded -dqbsr432 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact -dqbsr433 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact -dqbsr434 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112347 Rounded Inexact -dqbsr435 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact --- negatives -rounding: ceiling -dqbsr501 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr502 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr503 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr504 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112345 Rounded Inexact -rounding: up -dqbsr505 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr506 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr507 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr508 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact -rounding: floor -dqbsr510 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr511 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr512 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr513 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact -rounding: half_down -dqbsr515 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr516 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr517 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr518 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr519 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact -rounding: half_even -dqbsr521 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr522 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr523 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr524 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr525 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact -rounding: down -dqbsr526 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr527 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr528 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr529 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112345 Rounded Inexact -rounding: half_up -dqbsr531 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded -dqbsr532 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact -dqbsr533 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact -dqbsr534 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112347 Rounded Inexact -dqbsr535 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact - -rounding: half_even - --- The 'baddies' tests from DiagBigDecimal, plus some new ones -dqbas500 toSci '1..2' -> NaN Conversion_syntax -dqbas501 toSci '.' -> NaN Conversion_syntax -dqbas502 toSci '..' -> NaN Conversion_syntax -dqbas503 toSci '++1' -> NaN Conversion_syntax -dqbas504 toSci '--1' -> NaN Conversion_syntax -dqbas505 toSci '-+1' -> NaN Conversion_syntax -dqbas506 toSci '+-1' -> NaN Conversion_syntax -dqbas507 toSci '12e' -> NaN Conversion_syntax -dqbas508 toSci '12e++' -> NaN Conversion_syntax -dqbas509 toSci '12f4' -> NaN Conversion_syntax -dqbas510 toSci ' +1' -> NaN Conversion_syntax -dqbas511 toSci '+ 1' -> NaN Conversion_syntax -dqbas512 toSci '12 ' -> NaN Conversion_syntax -dqbas513 toSci ' + 1' -> NaN Conversion_syntax -dqbas514 toSci ' - 1 ' -> NaN Conversion_syntax -dqbas515 toSci 'x' -> NaN Conversion_syntax -dqbas516 toSci '-1-' -> NaN Conversion_syntax -dqbas517 toSci '12-' -> NaN Conversion_syntax -dqbas518 toSci '3+' -> NaN Conversion_syntax -dqbas519 toSci '' -> NaN Conversion_syntax -dqbas520 toSci '1e-' -> NaN Conversion_syntax -dqbas521 toSci '7e99999a' -> NaN Conversion_syntax -dqbas522 toSci '7e123567890x' -> NaN Conversion_syntax -dqbas523 toSci '7e12356789012x' -> NaN Conversion_syntax -dqbas524 toSci '' -> NaN Conversion_syntax -dqbas525 toSci 'e100' -> NaN Conversion_syntax -dqbas526 toSci '\u0e5a' -> NaN Conversion_syntax -dqbas527 toSci '\u0b65' -> NaN Conversion_syntax -dqbas528 toSci '123,65' -> NaN Conversion_syntax -dqbas529 toSci '1.34.5' -> NaN Conversion_syntax -dqbas530 toSci '.123.5' -> NaN Conversion_syntax -dqbas531 toSci '01.35.' -> NaN Conversion_syntax -dqbas532 toSci '01.35-' -> NaN Conversion_syntax -dqbas533 toSci '0000..' -> NaN Conversion_syntax -dqbas534 toSci '.0000.' -> NaN Conversion_syntax -dqbas535 toSci '00..00' -> NaN Conversion_syntax -dqbas536 toSci '111e*123' -> NaN Conversion_syntax -dqbas537 toSci '111e123-' -> NaN Conversion_syntax -dqbas538 toSci '111e+12+' -> NaN Conversion_syntax -dqbas539 toSci '111e1-3-' -> NaN Conversion_syntax -dqbas540 toSci '111e1*23' -> NaN Conversion_syntax -dqbas541 toSci '111e1e+3' -> NaN Conversion_syntax -dqbas542 toSci '1e1.0' -> NaN Conversion_syntax -dqbas543 toSci '1e123e' -> NaN Conversion_syntax -dqbas544 toSci 'ten' -> NaN Conversion_syntax -dqbas545 toSci 'ONE' -> NaN Conversion_syntax -dqbas546 toSci '1e.1' -> NaN Conversion_syntax -dqbas547 toSci '1e1.' -> NaN Conversion_syntax -dqbas548 toSci '1ee' -> NaN Conversion_syntax -dqbas549 toSci 'e+1' -> NaN Conversion_syntax -dqbas550 toSci '1.23.4' -> NaN Conversion_syntax -dqbas551 toSci '1.2.1' -> NaN Conversion_syntax -dqbas552 toSci '1E+1.2' -> NaN Conversion_syntax -dqbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax -dqbas554 toSci '1E++1' -> NaN Conversion_syntax -dqbas555 toSci '1E--1' -> NaN Conversion_syntax -dqbas556 toSci '1E+-1' -> NaN Conversion_syntax -dqbas557 toSci '1E-+1' -> NaN Conversion_syntax -dqbas558 toSci '1E''1' -> NaN Conversion_syntax -dqbas559 toSci "1E""1" -> NaN Conversion_syntax -dqbas560 toSci "1E""""" -> NaN Conversion_syntax --- Near-specials -dqbas561 toSci "qNaN" -> NaN Conversion_syntax -dqbas562 toSci "NaNq" -> NaN Conversion_syntax -dqbas563 toSci "NaNs" -> NaN Conversion_syntax -dqbas564 toSci "Infi" -> NaN Conversion_syntax -dqbas565 toSci "Infin" -> NaN Conversion_syntax -dqbas566 toSci "Infini" -> NaN Conversion_syntax -dqbas567 toSci "Infinit" -> NaN Conversion_syntax -dqbas568 toSci "-Infinit" -> NaN Conversion_syntax -dqbas569 toSci "0Inf" -> NaN Conversion_syntax -dqbas570 toSci "9Inf" -> NaN Conversion_syntax -dqbas571 toSci "-0Inf" -> NaN Conversion_syntax -dqbas572 toSci "-9Inf" -> NaN Conversion_syntax -dqbas573 toSci "-sNa" -> NaN Conversion_syntax -dqbas574 toSci "xNaN" -> NaN Conversion_syntax -dqbas575 toSci "0sNaN" -> NaN Conversion_syntax - --- some baddies with dots and Es and dots and specials -dqbas576 toSci 'e+1' -> NaN Conversion_syntax -dqbas577 toSci '.e+1' -> NaN Conversion_syntax -dqbas578 toSci '+.e+1' -> NaN Conversion_syntax -dqbas579 toSci '-.e+' -> NaN Conversion_syntax -dqbas580 toSci '-.e' -> NaN Conversion_syntax -dqbas581 toSci 'E+1' -> NaN Conversion_syntax -dqbas582 toSci '.E+1' -> NaN Conversion_syntax -dqbas583 toSci '+.E+1' -> NaN Conversion_syntax -dqbas584 toSci '-.E+' -> NaN Conversion_syntax -dqbas585 toSci '-.E' -> NaN Conversion_syntax - -dqbas586 toSci '.NaN' -> NaN Conversion_syntax -dqbas587 toSci '-.NaN' -> NaN Conversion_syntax -dqbas588 toSci '+.sNaN' -> NaN Conversion_syntax -dqbas589 toSci '+.Inf' -> NaN Conversion_syntax -dqbas590 toSci '.Infinity' -> NaN Conversion_syntax - --- Zeros -dqbas601 toSci 0.000000000 -> 0E-9 -dqbas602 toSci 0.00000000 -> 0E-8 -dqbas603 toSci 0.0000000 -> 0E-7 -dqbas604 toSci 0.000000 -> 0.000000 -dqbas605 toSci 0.00000 -> 0.00000 -dqbas606 toSci 0.0000 -> 0.0000 -dqbas607 toSci 0.000 -> 0.000 -dqbas608 toSci 0.00 -> 0.00 -dqbas609 toSci 0.0 -> 0.0 -dqbas610 toSci .0 -> 0.0 -dqbas611 toSci 0. -> 0 -dqbas612 toSci -.0 -> -0.0 -dqbas613 toSci -0. -> -0 -dqbas614 toSci -0.0 -> -0.0 -dqbas615 toSci -0.00 -> -0.00 -dqbas616 toSci -0.000 -> -0.000 -dqbas617 toSci -0.0000 -> -0.0000 -dqbas618 toSci -0.00000 -> -0.00000 -dqbas619 toSci -0.000000 -> -0.000000 -dqbas620 toSci -0.0000000 -> -0E-7 -dqbas621 toSci -0.00000000 -> -0E-8 -dqbas622 toSci -0.000000000 -> -0E-9 - -dqbas630 toSci 0.00E+0 -> 0.00 -dqbas631 toSci 0.00E+1 -> 0.0 -dqbas632 toSci 0.00E+2 -> 0 -dqbas633 toSci 0.00E+3 -> 0E+1 -dqbas634 toSci 0.00E+4 -> 0E+2 -dqbas635 toSci 0.00E+5 -> 0E+3 -dqbas636 toSci 0.00E+6 -> 0E+4 -dqbas637 toSci 0.00E+7 -> 0E+5 -dqbas638 toSci 0.00E+8 -> 0E+6 -dqbas639 toSci 0.00E+9 -> 0E+7 - -dqbas640 toSci 0.0E+0 -> 0.0 -dqbas641 toSci 0.0E+1 -> 0 -dqbas642 toSci 0.0E+2 -> 0E+1 -dqbas643 toSci 0.0E+3 -> 0E+2 -dqbas644 toSci 0.0E+4 -> 0E+3 -dqbas645 toSci 0.0E+5 -> 0E+4 -dqbas646 toSci 0.0E+6 -> 0E+5 -dqbas647 toSci 0.0E+7 -> 0E+6 -dqbas648 toSci 0.0E+8 -> 0E+7 -dqbas649 toSci 0.0E+9 -> 0E+8 - -dqbas650 toSci 0E+0 -> 0 -dqbas651 toSci 0E+1 -> 0E+1 -dqbas652 toSci 0E+2 -> 0E+2 -dqbas653 toSci 0E+3 -> 0E+3 -dqbas654 toSci 0E+4 -> 0E+4 -dqbas655 toSci 0E+5 -> 0E+5 -dqbas656 toSci 0E+6 -> 0E+6 -dqbas657 toSci 0E+7 -> 0E+7 -dqbas658 toSci 0E+8 -> 0E+8 -dqbas659 toSci 0E+9 -> 0E+9 - -dqbas660 toSci 0.0E-0 -> 0.0 -dqbas661 toSci 0.0E-1 -> 0.00 -dqbas662 toSci 0.0E-2 -> 0.000 -dqbas663 toSci 0.0E-3 -> 0.0000 -dqbas664 toSci 0.0E-4 -> 0.00000 -dqbas665 toSci 0.0E-5 -> 0.000000 -dqbas666 toSci 0.0E-6 -> 0E-7 -dqbas667 toSci 0.0E-7 -> 0E-8 -dqbas668 toSci 0.0E-8 -> 0E-9 -dqbas669 toSci 0.0E-9 -> 0E-10 - -dqbas670 toSci 0.00E-0 -> 0.00 -dqbas671 toSci 0.00E-1 -> 0.000 -dqbas672 toSci 0.00E-2 -> 0.0000 -dqbas673 toSci 0.00E-3 -> 0.00000 -dqbas674 toSci 0.00E-4 -> 0.000000 -dqbas675 toSci 0.00E-5 -> 0E-7 -dqbas676 toSci 0.00E-6 -> 0E-8 -dqbas677 toSci 0.00E-7 -> 0E-9 -dqbas678 toSci 0.00E-8 -> 0E-10 -dqbas679 toSci 0.00E-9 -> 0E-11 - -dqbas680 toSci 000000. -> 0 -dqbas681 toSci 00000. -> 0 -dqbas682 toSci 0000. -> 0 -dqbas683 toSci 000. -> 0 -dqbas684 toSci 00. -> 0 -dqbas685 toSci 0. -> 0 -dqbas686 toSci +00000. -> 0 -dqbas687 toSci -00000. -> -0 -dqbas688 toSci +0. -> 0 -dqbas689 toSci -0. -> -0 - --- Specials -dqbas700 toSci "NaN" -> NaN -dqbas701 toSci "nan" -> NaN -dqbas702 toSci "nAn" -> NaN -dqbas703 toSci "NAN" -> NaN -dqbas704 toSci "+NaN" -> NaN -dqbas705 toSci "+nan" -> NaN -dqbas706 toSci "+nAn" -> NaN -dqbas707 toSci "+NAN" -> NaN -dqbas708 toSci "-NaN" -> -NaN -dqbas709 toSci "-nan" -> -NaN -dqbas710 toSci "-nAn" -> -NaN -dqbas711 toSci "-NAN" -> -NaN -dqbas712 toSci 'NaN0' -> NaN -dqbas713 toSci 'NaN1' -> NaN1 -dqbas714 toSci 'NaN12' -> NaN12 -dqbas715 toSci 'NaN123' -> NaN123 -dqbas716 toSci 'NaN1234' -> NaN1234 -dqbas717 toSci 'NaN01' -> NaN1 -dqbas718 toSci 'NaN012' -> NaN12 -dqbas719 toSci 'NaN0123' -> NaN123 -dqbas720 toSci 'NaN01234' -> NaN1234 -dqbas721 toSci 'NaN001' -> NaN1 -dqbas722 toSci 'NaN0012' -> NaN12 -dqbas723 toSci 'NaN00123' -> NaN123 -dqbas724 toSci 'NaN001234' -> NaN1234 -dqbas725 toSci 'NaN1234567890123456781234567890123456' -> NaN Conversion_syntax -dqbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax -dqbas727 toSci 'NaN12.45' -> NaN Conversion_syntax -dqbas728 toSci 'NaN-12' -> NaN Conversion_syntax -dqbas729 toSci 'NaN+12' -> NaN Conversion_syntax - -dqbas730 toSci "sNaN" -> sNaN -dqbas731 toSci "snan" -> sNaN -dqbas732 toSci "SnAn" -> sNaN -dqbas733 toSci "SNAN" -> sNaN -dqbas734 toSci "+sNaN" -> sNaN -dqbas735 toSci "+snan" -> sNaN -dqbas736 toSci "+SnAn" -> sNaN -dqbas737 toSci "+SNAN" -> sNaN -dqbas738 toSci "-sNaN" -> -sNaN -dqbas739 toSci "-snan" -> -sNaN -dqbas740 toSci "-SnAn" -> -sNaN -dqbas741 toSci "-SNAN" -> -sNaN -dqbas742 toSci 'sNaN0000' -> sNaN -dqbas743 toSci 'sNaN7' -> sNaN7 -dqbas744 toSci 'sNaN007234' -> sNaN7234 -dqbas745 toSci 'sNaN1234567890123456787234561234567890' -> NaN Conversion_syntax -dqbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax -dqbas747 toSci 'sNaN-72' -> NaN Conversion_syntax - -dqbas748 toSci "Inf" -> Infinity -dqbas749 toSci "inf" -> Infinity -dqbas750 toSci "iNf" -> Infinity -dqbas751 toSci "INF" -> Infinity -dqbas752 toSci "+Inf" -> Infinity -dqbas753 toSci "+inf" -> Infinity -dqbas754 toSci "+iNf" -> Infinity -dqbas755 toSci "+INF" -> Infinity -dqbas756 toSci "-Inf" -> -Infinity -dqbas757 toSci "-inf" -> -Infinity -dqbas758 toSci "-iNf" -> -Infinity -dqbas759 toSci "-INF" -> -Infinity - -dqbas760 toSci "Infinity" -> Infinity -dqbas761 toSci "infinity" -> Infinity -dqbas762 toSci "iNfInItY" -> Infinity -dqbas763 toSci "INFINITY" -> Infinity -dqbas764 toSci "+Infinity" -> Infinity -dqbas765 toSci "+infinity" -> Infinity -dqbas766 toSci "+iNfInItY" -> Infinity -dqbas767 toSci "+INFINITY" -> Infinity -dqbas768 toSci "-Infinity" -> -Infinity -dqbas769 toSci "-infinity" -> -Infinity -dqbas770 toSci "-iNfInItY" -> -Infinity -dqbas771 toSci "-INFINITY" -> -Infinity - --- Specials and zeros for toEng -dqbast772 toEng "NaN" -> NaN -dqbast773 toEng "-Infinity" -> -Infinity -dqbast774 toEng "-sNaN" -> -sNaN -dqbast775 toEng "-NaN" -> -NaN -dqbast776 toEng "+Infinity" -> Infinity -dqbast778 toEng "+sNaN" -> sNaN -dqbast779 toEng "+NaN" -> NaN -dqbast780 toEng "INFINITY" -> Infinity -dqbast781 toEng "SNAN" -> sNaN -dqbast782 toEng "NAN" -> NaN -dqbast783 toEng "infinity" -> Infinity -dqbast784 toEng "snan" -> sNaN -dqbast785 toEng "nan" -> NaN -dqbast786 toEng "InFINITY" -> Infinity -dqbast787 toEng "SnAN" -> sNaN -dqbast788 toEng "nAN" -> NaN -dqbast789 toEng "iNfinity" -> Infinity -dqbast790 toEng "sNan" -> sNaN -dqbast791 toEng "Nan" -> NaN -dqbast792 toEng "Infinity" -> Infinity -dqbast793 toEng "sNaN" -> sNaN - --- Zero toEng, etc. -dqbast800 toEng 0e+1 -> "0.00E+3" -- doc example - -dqbast801 toEng 0.000000000 -> 0E-9 -dqbast802 toEng 0.00000000 -> 0.00E-6 -dqbast803 toEng 0.0000000 -> 0.0E-6 -dqbast804 toEng 0.000000 -> 0.000000 -dqbast805 toEng 0.00000 -> 0.00000 -dqbast806 toEng 0.0000 -> 0.0000 -dqbast807 toEng 0.000 -> 0.000 -dqbast808 toEng 0.00 -> 0.00 -dqbast809 toEng 0.0 -> 0.0 -dqbast810 toEng .0 -> 0.0 -dqbast811 toEng 0. -> 0 -dqbast812 toEng -.0 -> -0.0 -dqbast813 toEng -0. -> -0 -dqbast814 toEng -0.0 -> -0.0 -dqbast815 toEng -0.00 -> -0.00 -dqbast816 toEng -0.000 -> -0.000 -dqbast817 toEng -0.0000 -> -0.0000 -dqbast818 toEng -0.00000 -> -0.00000 -dqbast819 toEng -0.000000 -> -0.000000 -dqbast820 toEng -0.0000000 -> -0.0E-6 -dqbast821 toEng -0.00000000 -> -0.00E-6 -dqbast822 toEng -0.000000000 -> -0E-9 - -dqbast830 toEng 0.00E+0 -> 0.00 -dqbast831 toEng 0.00E+1 -> 0.0 -dqbast832 toEng 0.00E+2 -> 0 -dqbast833 toEng 0.00E+3 -> 0.00E+3 -dqbast834 toEng 0.00E+4 -> 0.0E+3 -dqbast835 toEng 0.00E+5 -> 0E+3 -dqbast836 toEng 0.00E+6 -> 0.00E+6 -dqbast837 toEng 0.00E+7 -> 0.0E+6 -dqbast838 toEng 0.00E+8 -> 0E+6 -dqbast839 toEng 0.00E+9 -> 0.00E+9 - -dqbast840 toEng 0.0E+0 -> 0.0 -dqbast841 toEng 0.0E+1 -> 0 -dqbast842 toEng 0.0E+2 -> 0.00E+3 -dqbast843 toEng 0.0E+3 -> 0.0E+3 -dqbast844 toEng 0.0E+4 -> 0E+3 -dqbast845 toEng 0.0E+5 -> 0.00E+6 -dqbast846 toEng 0.0E+6 -> 0.0E+6 -dqbast847 toEng 0.0E+7 -> 0E+6 -dqbast848 toEng 0.0E+8 -> 0.00E+9 -dqbast849 toEng 0.0E+9 -> 0.0E+9 - -dqbast850 toEng 0E+0 -> 0 -dqbast851 toEng 0E+1 -> 0.00E+3 -dqbast852 toEng 0E+2 -> 0.0E+3 -dqbast853 toEng 0E+3 -> 0E+3 -dqbast854 toEng 0E+4 -> 0.00E+6 -dqbast855 toEng 0E+5 -> 0.0E+6 -dqbast856 toEng 0E+6 -> 0E+6 -dqbast857 toEng 0E+7 -> 0.00E+9 -dqbast858 toEng 0E+8 -> 0.0E+9 -dqbast859 toEng 0E+9 -> 0E+9 - -dqbast860 toEng 0.0E-0 -> 0.0 -dqbast861 toEng 0.0E-1 -> 0.00 -dqbast862 toEng 0.0E-2 -> 0.000 -dqbast863 toEng 0.0E-3 -> 0.0000 -dqbast864 toEng 0.0E-4 -> 0.00000 -dqbast865 toEng 0.0E-5 -> 0.000000 -dqbast866 toEng 0.0E-6 -> 0.0E-6 -dqbast867 toEng 0.0E-7 -> 0.00E-6 -dqbast868 toEng 0.0E-8 -> 0E-9 -dqbast869 toEng 0.0E-9 -> 0.0E-9 - -dqbast870 toEng 0.00E-0 -> 0.00 -dqbast871 toEng 0.00E-1 -> 0.000 -dqbast872 toEng 0.00E-2 -> 0.0000 -dqbast873 toEng 0.00E-3 -> 0.00000 -dqbast874 toEng 0.00E-4 -> 0.000000 -dqbast875 toEng 0.00E-5 -> 0.0E-6 -dqbast876 toEng 0.00E-6 -> 0.00E-6 -dqbast877 toEng 0.00E-7 -> 0E-9 -dqbast878 toEng 0.00E-8 -> 0.0E-9 -dqbast879 toEng 0.00E-9 -> 0.00E-9 - --- long input strings -dqbas801 tosci '01234567890123456' -> 1234567890123456 -dqbas802 tosci '001234567890123456' -> 1234567890123456 -dqbas803 tosci '0001234567890123456' -> 1234567890123456 -dqbas804 tosci '00001234567890123456' -> 1234567890123456 -dqbas805 tosci '000001234567890123456' -> 1234567890123456 -dqbas806 tosci '0000001234567890123456' -> 1234567890123456 -dqbas807 tosci '00000001234567890123456' -> 1234567890123456 -dqbas808 tosci '000000001234567890123456' -> 1234567890123456 -dqbas809 tosci '0000000001234567890123456' -> 1234567890123456 -dqbas810 tosci '00000000001234567890123456' -> 1234567890123456 - -dqbas811 tosci '0.1234567890123456' -> 0.1234567890123456 -dqbas812 tosci '0.01234567890123456' -> 0.01234567890123456 -dqbas813 tosci '0.001234567890123456' -> 0.001234567890123456 -dqbas814 tosci '0.0001234567890123456' -> 0.0001234567890123456 -dqbas815 tosci '0.00001234567890123456' -> 0.00001234567890123456 -dqbas816 tosci '0.000001234567890123456' -> 0.000001234567890123456 -dqbas817 tosci '0.0000001234567890123456' -> 1.234567890123456E-7 -dqbas818 tosci '0.00000001234567890123456' -> 1.234567890123456E-8 -dqbas819 tosci '0.000000001234567890123456' -> 1.234567890123456E-9 -dqbas820 tosci '0.0000000001234567890123456' -> 1.234567890123456E-10 - -dqbas821 tosci '12345678912345678901234567801234567890' -> 1.234567891234567890123456780123457E+37 Inexact Rounded -dqbas822 tosci '123456789123456789012345678012345678901' -> 1.234567891234567890123456780123457E+38 Inexact Rounded -dqbas823 tosci '1234567891234567890123456780123456789012' -> 1.234567891234567890123456780123457E+39 Inexact Rounded -dqbas824 tosci '12345678912345678901234567801234567890123' -> 1.234567891234567890123456780123457E+40 Inexact Rounded -dqbas825 tosci '123456789123456789012345678012345678901234' -> 1.234567891234567890123456780123457E+41 Inexact Rounded -dqbas826 tosci '1234567891234567890123456780123456789012345' -> 1.234567891234567890123456780123457E+42 Inexact Rounded -dqbas827 tosci '12345678912345678901234567801234567890123456' -> 1.234567891234567890123456780123457E+43 Inexact Rounded -dqbas828 tosci '123456789123456789012345678012345678901234567' -> 1.234567891234567890123456780123457E+44 Inexact Rounded -dqbas829 tosci '1234567891234567890123456780123456789012345678' -> 1.234567891234567890123456780123457E+45 Inexact Rounded - --- subnormals and overflows -dqbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded -dqbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded -dqbas908 toSci '0.9e-999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas909 toSci '0.09e-999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded -dqbas911 toSci '10e-1000000000' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded -dqbas913 toSci '99e-9999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded -dqbas915 toSci '1111e-9999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas916 toSci '1111e-99999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded --- negatives the same -dqbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded -dqbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded -dqbas920 toSci '-0.9e-999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas921 toSci '-0.09e-999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded -dqbas923 toSci '-10e-1000000000' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded -dqbas925 toSci '-99e-9999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded -dqbas927 toSci '-1111e-9999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas928 toSci '-1111e-99999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded - --- overflow results at different rounding modes -rounding: ceiling -dqbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas931 toSci '-7e10000' -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -rounding: up -dqbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: down -dqbas934 toSci '7e10000' -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqbas935 toSci '-7e10000' -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -rounding: floor -dqbas936 toSci '7e10000' -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_up -dqbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_even -dqbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_down -dqbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dqbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_even - --- Now check 854/754r some subnormals and underflow to 0 -dqbem400 toSci 1.0000E-383 -> 1.0000E-383 -dqbem401 toSci 0.1E-6172 -> 1E-6173 Subnormal -dqbem402 toSci 0.1000E-6172 -> 1.000E-6173 Subnormal -dqbem403 toSci 0.0100E-6172 -> 1.00E-6174 Subnormal -dqbem404 toSci 0.0010E-6172 -> 1.0E-6175 Subnormal -dqbem405 toSci 0.0001E-6172 -> 1E-6176 Subnormal -dqbem406 toSci 0.00010E-6172 -> 1E-6176 Subnormal Rounded -dqbem407 toSci 0.00013E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqbem408 toSci 0.00015E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem409 toSci 0.00017E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem410 toSci 0.00023E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem411 toSci 0.00025E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem412 toSci 0.00027E-6172 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqbem413 toSci 0.000149E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqbem414 toSci 0.000150E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem415 toSci 0.000151E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem416 toSci 0.000249E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem417 toSci 0.000250E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqbem418 toSci 0.000251E-6172 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqbem419 toSci 0.00009E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqbem420 toSci 0.00005E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem421 toSci 0.00003E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem422 toSci 0.000009E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem423 toSci 0.000005E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem424 toSci 0.000003E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqbem425 toSci 0.001049E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded -dqbem426 toSci 0.001050E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded -dqbem427 toSci 0.001051E-6172 -> 1.1E-6175 Underflow Subnormal Inexact Rounded -dqbem428 toSci 0.001149E-6172 -> 1.1E-6175 Underflow Subnormal Inexact Rounded -dqbem429 toSci 0.001150E-6172 -> 1.2E-6175 Underflow Subnormal Inexact Rounded -dqbem430 toSci 0.001151E-6172 -> 1.2E-6175 Underflow Subnormal Inexact Rounded - -dqbem432 toSci 0.010049E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded -dqbem433 toSci 0.010050E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded -dqbem434 toSci 0.010051E-6172 -> 1.01E-6174 Underflow Subnormal Inexact Rounded -dqbem435 toSci 0.010149E-6172 -> 1.01E-6174 Underflow Subnormal Inexact Rounded -dqbem436 toSci 0.010150E-6172 -> 1.02E-6174 Underflow Subnormal Inexact Rounded -dqbem437 toSci 0.010151E-6172 -> 1.02E-6174 Underflow Subnormal Inexact Rounded - -dqbem440 toSci 0.10103E-6172 -> 1.010E-6173 Underflow Subnormal Inexact Rounded -dqbem441 toSci 0.10105E-6172 -> 1.010E-6173 Underflow Subnormal Inexact Rounded -dqbem442 toSci 0.10107E-6172 -> 1.011E-6173 Underflow Subnormal Inexact Rounded -dqbem443 toSci 0.10113E-6172 -> 1.011E-6173 Underflow Subnormal Inexact Rounded -dqbem444 toSci 0.10115E-6172 -> 1.012E-6173 Underflow Subnormal Inexact Rounded -dqbem445 toSci 0.10117E-6172 -> 1.012E-6173 Underflow Subnormal Inexact Rounded - -dqbem450 toSci 1.10730E-6173 -> 1.107E-6173 Underflow Subnormal Inexact Rounded -dqbem451 toSci 1.10750E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded -dqbem452 toSci 1.10770E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded -dqbem453 toSci 1.10830E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded -dqbem454 toSci 1.10850E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded -dqbem455 toSci 1.10870E-6173 -> 1.109E-6173 Underflow Subnormal Inexact Rounded - --- make sure sign OK -dqbem456 toSci -0.10103E-6172 -> -1.010E-6173 Underflow Subnormal Inexact Rounded -dqbem457 toSci -0.10105E-6172 -> -1.010E-6173 Underflow Subnormal Inexact Rounded -dqbem458 toSci -0.10107E-6172 -> -1.011E-6173 Underflow Subnormal Inexact Rounded -dqbem459 toSci -0.10113E-6172 -> -1.011E-6173 Underflow Subnormal Inexact Rounded -dqbem460 toSci -0.10115E-6172 -> -1.012E-6173 Underflow Subnormal Inexact Rounded -dqbem461 toSci -0.10117E-6172 -> -1.012E-6173 Underflow Subnormal Inexact Rounded - --- '999s' cases -dqbem464 toSci 999999E-6173 -> 9.99999E-6168 Subnormal -dqbem465 toSci 99999.0E-6172 -> 9.99990E-6168 Subnormal -dqbem466 toSci 99999.E-6172 -> 9.9999E-6168 Subnormal -dqbem467 toSci 9999.9E-6172 -> 9.9999E-6169 Subnormal -dqbem468 toSci 999.99E-6172 -> 9.9999E-6170 Subnormal -dqbem469 toSci 99.999E-6172 -> 9.9999E-6171 Subnormal -dqbem470 toSci 9.9999E-6172 -> 9.9999E-6172 Subnormal -dqbem471 toSci 0.99999E-6172 -> 1.0000E-6172 Underflow Subnormal Inexact Rounded -dqbem472 toSci 0.099999E-6172 -> 1.000E-6173 Underflow Subnormal Inexact Rounded -dqbem473 toSci 0.0099999E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded -dqbem474 toSci 0.00099999E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded -dqbem475 toSci 0.000099999E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqbem476 toSci 0.0000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem477 toSci 0.00000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbem478 toSci 0.000000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- Exponents with insignificant leading zeros -dqbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded -dqbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded -dqbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded -dqbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded -dqbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded -dqbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded -dqbas1007 toSci 1e-999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1008 toSci 1e-0999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1009 toSci 1e-00999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1010 toSci 1e-000999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1011 toSci 1e-000000000000999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqbas1012 toSci 1e-000000000001000000007 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- check for double-rounded subnormals -dqbas1041 toSci 1.1111111111111111111111111111152444E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow -dqbas1042 toSci 1.1111111111111111111111111111152445E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow -dqbas1043 toSci 1.1111111111111111111111111111152446E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow - --- clamped zeros [see also clamp.decTest] -dqbas1075 toSci 0e+10000 -> 0E+6111 Clamped -dqbas1076 toSci 0e-10000 -> 0E-6176 Clamped -dqbas1077 toSci -0e+10000 -> -0E+6111 Clamped -dqbas1078 toSci -0e-10000 -> -0E-6176 Clamped - --- extreme values from next-wider -dqbas1101 toSci -9.9999999999999999999999999999999999999999999999999999999999999999999E+1572864 -> -Infinity Overflow Inexact Rounded -dqbas1102 toSci -1E-1572863 -> -0E-6176 Inexact Rounded Subnormal Underflow Clamped -dqbas1103 toSci -1E-1572932 -> -0E-6176 Inexact Rounded Subnormal Underflow Clamped -dqbas1104 toSci -0 -> -0 -dqbas1105 toSci +0 -> 0 -dqbas1106 toSci +1E-1572932 -> 0E-6176 Inexact Rounded Subnormal Underflow Clamped -dqbas1107 toSci +1E-1572863 -> 0E-6176 Inexact Rounded Subnormal Underflow Clamped -dqbas1108 toSci +9.9999999999999999999999999999999999999999999999999999999999999999999E+1572864 -> Infinity Overflow Inexact Rounded - +------------------------------------------------------------------------ +-- dqBase.decTest -- base decQuad <--> string conversions -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests base conversions from string to a decimal number +-- and back to a string (in Scientific form) + +-- Note that unlike other operations the operand is subject to rounding +-- to conform to emax and precision settings (that is, numbers will +-- conform to rules and exponent will be in permitted range). The +-- 'left hand side', therefore, may have numbers that cannot be +-- represented in a decQuad. Some testcases go to the limit of the +-- next-wider format, and hence these testcases may also be used to +-- test narrowing and widening operations. + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqbas001 toSci 0 -> 0 +dqbas002 toSci 1 -> 1 +dqbas003 toSci 1.0 -> 1.0 +dqbas004 toSci 1.00 -> 1.00 +dqbas005 toSci 10 -> 10 +dqbas006 toSci 1000 -> 1000 +dqbas007 toSci 10.0 -> 10.0 +dqbas008 toSci 10.1 -> 10.1 +dqbas009 toSci 10.4 -> 10.4 +dqbas010 toSci 10.5 -> 10.5 +dqbas011 toSci 10.6 -> 10.6 +dqbas012 toSci 10.9 -> 10.9 +dqbas013 toSci 11.0 -> 11.0 +dqbas014 toSci 1.234 -> 1.234 +dqbas015 toSci 0.123 -> 0.123 +dqbas016 toSci 0.012 -> 0.012 +dqbas017 toSci -0 -> -0 +dqbas018 toSci -0.0 -> -0.0 +dqbas019 toSci -00.00 -> -0.00 + +dqbas021 toSci -1 -> -1 +dqbas022 toSci -1.0 -> -1.0 +dqbas023 toSci -0.1 -> -0.1 +dqbas024 toSci -9.1 -> -9.1 +dqbas025 toSci -9.11 -> -9.11 +dqbas026 toSci -9.119 -> -9.119 +dqbas027 toSci -9.999 -> -9.999 + +dqbas030 toSci '123456789.123456' -> '123456789.123456' +dqbas031 toSci '123456789.000000' -> '123456789.000000' +dqbas032 toSci '123456789123456' -> '123456789123456' +dqbas033 toSci '0.0000123456789' -> '0.0000123456789' +dqbas034 toSci '0.00000123456789' -> '0.00000123456789' +dqbas035 toSci '0.000000123456789' -> '1.23456789E-7' +dqbas036 toSci '0.0000000123456789' -> '1.23456789E-8' + +dqbas037 toSci '0.123456789012344' -> '0.123456789012344' +dqbas038 toSci '0.123456789012345' -> '0.123456789012345' + +-- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) +dqbsn001 toSci -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqbsn002 toSci -1E-6143 -> -1E-6143 +dqbsn003 toSci -1E-6176 -> -1E-6176 Subnormal +dqbsn004 toSci -0 -> -0 +dqbsn005 toSci +0 -> 0 +dqbsn006 toSci +1E-6176 -> 1E-6176 Subnormal +dqbsn007 toSci +1E-6143 -> 1E-6143 +dqbsn008 toSci +9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 + +-- String [many more examples are implicitly tested elsewhere] +-- strings without E cannot generate E in result +dqbas040 toSci "12" -> '12' +dqbas041 toSci "-76" -> '-76' +dqbas042 toSci "12.76" -> '12.76' +dqbas043 toSci "+12.76" -> '12.76' +dqbas044 toSci "012.76" -> '12.76' +dqbas045 toSci "+0.003" -> '0.003' +dqbas046 toSci "17." -> '17' +dqbas047 toSci ".5" -> '0.5' +dqbas048 toSci "044" -> '44' +dqbas049 toSci "0044" -> '44' +dqbas050 toSci "0.0005" -> '0.0005' +dqbas051 toSci "00.00005" -> '0.00005' +dqbas052 toSci "0.000005" -> '0.000005' +dqbas053 toSci "0.0000050" -> '0.0000050' +dqbas054 toSci "0.0000005" -> '5E-7' +dqbas055 toSci "0.00000005" -> '5E-8' +dqbas056 toSci "12345678.543210" -> '12345678.543210' +dqbas057 toSci "2345678.543210" -> '2345678.543210' +dqbas058 toSci "345678.543210" -> '345678.543210' +dqbas059 toSci "0345678.54321" -> '345678.54321' +dqbas060 toSci "345678.5432" -> '345678.5432' +dqbas061 toSci "+345678.5432" -> '345678.5432' +dqbas062 toSci "+0345678.5432" -> '345678.5432' +dqbas063 toSci "+00345678.5432" -> '345678.5432' +dqbas064 toSci "-345678.5432" -> '-345678.5432' +dqbas065 toSci "-0345678.5432" -> '-345678.5432' +dqbas066 toSci "-00345678.5432" -> '-345678.5432' +-- examples +dqbas067 toSci "5E-6" -> '0.000005' +dqbas068 toSci "50E-7" -> '0.0000050' +dqbas069 toSci "5E-7" -> '5E-7' + +-- [No exotics as no Unicode] + +-- rounded with dots in all (including edge) places +dqbas071 toSci .1234567891234567890123456780123456123 -> 0.1234567891234567890123456780123456 Inexact Rounded +dqbas072 toSci 1.234567891234567890123456780123456123 -> 1.234567891234567890123456780123456 Inexact Rounded +dqbas073 toSci 12.34567891234567890123456780123456123 -> 12.34567891234567890123456780123456 Inexact Rounded +dqbas074 toSci 123.4567891234567890123456780123456123 -> 123.4567891234567890123456780123456 Inexact Rounded +dqbas075 toSci 1234.567891234567890123456780123456123 -> 1234.567891234567890123456780123456 Inexact Rounded +dqbas076 toSci 12345.67891234567890123456780123456123 -> 12345.67891234567890123456780123456 Inexact Rounded +dqbas077 toSci 123456.7891234567890123456780123456123 -> 123456.7891234567890123456780123456 Inexact Rounded +dqbas078 toSci 1234567.891234567890123456780123456123 -> 1234567.891234567890123456780123456 Inexact Rounded +dqbas079 toSci 12345678.91234567890123456780123456123 -> 12345678.91234567890123456780123456 Inexact Rounded +dqbas080 toSci 123456789.1234567890123456780123456123 -> 123456789.1234567890123456780123456 Inexact Rounded +dqbas081 toSci 1234567891.234567890123456780123456123 -> 1234567891.234567890123456780123456 Inexact Rounded +dqbas082 toSci 12345678912.34567890123456780123456123 -> 12345678912.34567890123456780123456 Inexact Rounded +dqbas083 toSci 123456789123.4567890123456780123456123 -> 123456789123.4567890123456780123456 Inexact Rounded +dqbas084 toSci 1234567891234.567890123456780123456123 -> 1234567891234.567890123456780123456 Inexact Rounded +dqbas085 toSci 12345678912345.67890123456780123456123 -> 12345678912345.67890123456780123456 Inexact Rounded +dqbas086 toSci 123456789123456.7890123456780123456123 -> 123456789123456.7890123456780123456 Inexact Rounded +dqbas087 toSci 1234567891234567.890123456780123456123 -> 1234567891234567.890123456780123456 Inexact Rounded +dqbas088 toSci 12345678912345678.90123456780123456123 -> 12345678912345678.90123456780123456 Inexact Rounded +dqbas089 toSci 123456789123456789.0123456780123456123 -> 123456789123456789.0123456780123456 Inexact Rounded +dqbas090 toSci 1234567891234567890.123456780123456123 -> 1234567891234567890.123456780123456 Inexact Rounded +dqbas091 toSci 12345678912345678901.23456780123456123 -> 12345678912345678901.23456780123456 Inexact Rounded +dqbas092 toSci 123456789123456789012.3456780123456123 -> 123456789123456789012.3456780123456 Inexact Rounded +dqbas093 toSci 1234567891234567890123.456780123456123 -> 1234567891234567890123.456780123456 Inexact Rounded +dqbas094 toSci 12345678912345678901234.56780123456123 -> 12345678912345678901234.56780123456 Inexact Rounded +dqbas095 toSci 123456789123456789012345.6780123456123 -> 123456789123456789012345.6780123456 Inexact Rounded +dqbas096 toSci 1234567891234567890123456.780123456123 -> 1234567891234567890123456.780123456 Inexact Rounded +dqbas097 toSci 12345678912345678901234567.80123456123 -> 12345678912345678901234567.80123456 Inexact Rounded +dqbas098 toSci 123456789123456789012345678.0123456123 -> 123456789123456789012345678.0123456 Inexact Rounded +dqbas099 toSci 1234567891234567890123456780.123456123 -> 1234567891234567890123456780.123456 Inexact Rounded +dqbas100 toSci 12345678912345678901234567801.23456123 -> 12345678912345678901234567801.23456 Inexact Rounded +dqbas101 toSci 123456789123456789012345678012.3456123 -> 123456789123456789012345678012.3456 Inexact Rounded +dqbas102 toSci 1234567891234567890123456780123.456123 -> 1234567891234567890123456780123.456 Inexact Rounded +dqbas103 toSci 12345678912345678901234567801234.56123 -> 12345678912345678901234567801234.56 Inexact Rounded +dqbas104 toSci 123456789123456789012345678012345.6123 -> 123456789123456789012345678012345.6 Inexact Rounded +dqbas105 toSci 1234567891234567890123456780123456.123 -> 1234567891234567890123456780123456 Inexact Rounded +dqbas106 toSci 12345678912345678901234567801234561.23 -> 1.234567891234567890123456780123456E+34 Inexact Rounded +dqbas107 toSci 123456789123456789012345678012345612.3 -> 1.234567891234567890123456780123456E+35 Inexact Rounded +dqbas108 toSci 1234567891234567890123456780123456123. -> 1.234567891234567890123456780123456E+36 Inexact Rounded +-- 123456789012345678 + +-- Numbers with E +dqbas130 toSci "0.000E-1" -> '0.0000' +dqbas131 toSci "0.000E-2" -> '0.00000' +dqbas132 toSci "0.000E-3" -> '0.000000' +dqbas133 toSci "0.000E-4" -> '0E-7' +dqbas134 toSci "0.00E-2" -> '0.0000' +dqbas135 toSci "0.00E-3" -> '0.00000' +dqbas136 toSci "0.00E-4" -> '0.000000' +dqbas137 toSci "0.00E-5" -> '0E-7' +dqbas138 toSci "+0E+9" -> '0E+9' +dqbas139 toSci "-0E+9" -> '-0E+9' +dqbas140 toSci "1E+9" -> '1E+9' +dqbas141 toSci "1e+09" -> '1E+9' +dqbas142 toSci "1E+90" -> '1E+90' +dqbas143 toSci "+1E+009" -> '1E+9' +dqbas144 toSci "0E+9" -> '0E+9' +dqbas145 toSci "1E+9" -> '1E+9' +dqbas146 toSci "1E+09" -> '1E+9' +dqbas147 toSci "1e+90" -> '1E+90' +dqbas148 toSci "1E+009" -> '1E+9' +dqbas149 toSci "000E+9" -> '0E+9' +dqbas150 toSci "1E9" -> '1E+9' +dqbas151 toSci "1e09" -> '1E+9' +dqbas152 toSci "1E90" -> '1E+90' +dqbas153 toSci "1E009" -> '1E+9' +dqbas154 toSci "0E9" -> '0E+9' +dqbas155 toSci "0.000e+0" -> '0.000' +dqbas156 toSci "0.000E-1" -> '0.0000' +dqbas157 toSci "4E+9" -> '4E+9' +dqbas158 toSci "44E+9" -> '4.4E+10' +dqbas159 toSci "0.73e-7" -> '7.3E-8' +dqbas160 toSci "00E+9" -> '0E+9' +dqbas161 toSci "00E-9" -> '0E-9' +dqbas162 toSci "10E+9" -> '1.0E+10' +dqbas163 toSci "10E+09" -> '1.0E+10' +dqbas164 toSci "10e+90" -> '1.0E+91' +dqbas165 toSci "10E+009" -> '1.0E+10' +dqbas166 toSci "100e+9" -> '1.00E+11' +dqbas167 toSci "100e+09" -> '1.00E+11' +dqbas168 toSci "100E+90" -> '1.00E+92' +dqbas169 toSci "100e+009" -> '1.00E+11' + +dqbas170 toSci "1.265" -> '1.265' +dqbas171 toSci "1.265E-20" -> '1.265E-20' +dqbas172 toSci "1.265E-8" -> '1.265E-8' +dqbas173 toSci "1.265E-4" -> '0.0001265' +dqbas174 toSci "1.265E-3" -> '0.001265' +dqbas175 toSci "1.265E-2" -> '0.01265' +dqbas176 toSci "1.265E-1" -> '0.1265' +dqbas177 toSci "1.265E-0" -> '1.265' +dqbas178 toSci "1.265E+1" -> '12.65' +dqbas179 toSci "1.265E+2" -> '126.5' +dqbas180 toSci "1.265E+3" -> '1265' +dqbas181 toSci "1.265E+4" -> '1.265E+4' +dqbas182 toSci "1.265E+8" -> '1.265E+8' +dqbas183 toSci "1.265E+20" -> '1.265E+20' + +dqbas190 toSci "12.65" -> '12.65' +dqbas191 toSci "12.65E-20" -> '1.265E-19' +dqbas192 toSci "12.65E-8" -> '1.265E-7' +dqbas193 toSci "12.65E-4" -> '0.001265' +dqbas194 toSci "12.65E-3" -> '0.01265' +dqbas195 toSci "12.65E-2" -> '0.1265' +dqbas196 toSci "12.65E-1" -> '1.265' +dqbas197 toSci "12.65E-0" -> '12.65' +dqbas198 toSci "12.65E+1" -> '126.5' +dqbas199 toSci "12.65E+2" -> '1265' +dqbas200 toSci "12.65E+3" -> '1.265E+4' +dqbas201 toSci "12.65E+4" -> '1.265E+5' +dqbas202 toSci "12.65E+8" -> '1.265E+9' +dqbas203 toSci "12.65E+20" -> '1.265E+21' + +dqbas210 toSci "126.5" -> '126.5' +dqbas211 toSci "126.5E-20" -> '1.265E-18' +dqbas212 toSci "126.5E-8" -> '0.000001265' +dqbas213 toSci "126.5E-4" -> '0.01265' +dqbas214 toSci "126.5E-3" -> '0.1265' +dqbas215 toSci "126.5E-2" -> '1.265' +dqbas216 toSci "126.5E-1" -> '12.65' +dqbas217 toSci "126.5E-0" -> '126.5' +dqbas218 toSci "126.5E+1" -> '1265' +dqbas219 toSci "126.5E+2" -> '1.265E+4' +dqbas220 toSci "126.5E+3" -> '1.265E+5' +dqbas221 toSci "126.5E+4" -> '1.265E+6' +dqbas222 toSci "126.5E+8" -> '1.265E+10' +dqbas223 toSci "126.5E+20" -> '1.265E+22' + +dqbas230 toSci "1265" -> '1265' +dqbas231 toSci "1265E-20" -> '1.265E-17' +dqbas232 toSci "1265E-8" -> '0.00001265' +dqbas233 toSci "1265E-4" -> '0.1265' +dqbas234 toSci "1265E-3" -> '1.265' +dqbas235 toSci "1265E-2" -> '12.65' +dqbas236 toSci "1265E-1" -> '126.5' +dqbas237 toSci "1265E-0" -> '1265' +dqbas238 toSci "1265E+1" -> '1.265E+4' +dqbas239 toSci "1265E+2" -> '1.265E+5' +dqbas240 toSci "1265E+3" -> '1.265E+6' +dqbas241 toSci "1265E+4" -> '1.265E+7' +dqbas242 toSci "1265E+8" -> '1.265E+11' +dqbas243 toSci "1265E+20" -> '1.265E+23' + +dqbas250 toSci "0.1265" -> '0.1265' +dqbas251 toSci "0.1265E-20" -> '1.265E-21' +dqbas252 toSci "0.1265E-8" -> '1.265E-9' +dqbas253 toSci "0.1265E-4" -> '0.00001265' +dqbas254 toSci "0.1265E-3" -> '0.0001265' +dqbas255 toSci "0.1265E-2" -> '0.001265' +dqbas256 toSci "0.1265E-1" -> '0.01265' +dqbas257 toSci "0.1265E-0" -> '0.1265' +dqbas258 toSci "0.1265E+1" -> '1.265' +dqbas259 toSci "0.1265E+2" -> '12.65' +dqbas260 toSci "0.1265E+3" -> '126.5' +dqbas261 toSci "0.1265E+4" -> '1265' +dqbas262 toSci "0.1265E+8" -> '1.265E+7' +dqbas263 toSci "0.1265E+20" -> '1.265E+19' + +-- some more negative zeros [systematic tests below] +dqbas290 toSci "-0.000E-1" -> '-0.0000' +dqbas291 toSci "-0.000E-2" -> '-0.00000' +dqbas292 toSci "-0.000E-3" -> '-0.000000' +dqbas293 toSci "-0.000E-4" -> '-0E-7' +dqbas294 toSci "-0.00E-2" -> '-0.0000' +dqbas295 toSci "-0.00E-3" -> '-0.00000' +dqbas296 toSci "-0.0E-2" -> '-0.000' +dqbas297 toSci "-0.0E-3" -> '-0.0000' +dqbas298 toSci "-0E-2" -> '-0.00' +dqbas299 toSci "-0E-3" -> '-0.000' + +-- Engineering notation tests +dqbas301 toSci 10e12 -> 1.0E+13 +dqbas302 toEng 10e12 -> 10E+12 +dqbas303 toSci 10e11 -> 1.0E+12 +dqbas304 toEng 10e11 -> 1.0E+12 +dqbas305 toSci 10e10 -> 1.0E+11 +dqbas306 toEng 10e10 -> 100E+9 +dqbas307 toSci 10e9 -> 1.0E+10 +dqbas308 toEng 10e9 -> 10E+9 +dqbas309 toSci 10e8 -> 1.0E+9 +dqbas310 toEng 10e8 -> 1.0E+9 +dqbas311 toSci 10e7 -> 1.0E+8 +dqbas312 toEng 10e7 -> 100E+6 +dqbas313 toSci 10e6 -> 1.0E+7 +dqbas314 toEng 10e6 -> 10E+6 +dqbas315 toSci 10e5 -> 1.0E+6 +dqbas316 toEng 10e5 -> 1.0E+6 +dqbas317 toSci 10e4 -> 1.0E+5 +dqbas318 toEng 10e4 -> 100E+3 +dqbas319 toSci 10e3 -> 1.0E+4 +dqbas320 toEng 10e3 -> 10E+3 +dqbas321 toSci 10e2 -> 1.0E+3 +dqbas322 toEng 10e2 -> 1.0E+3 +dqbas323 toSci 10e1 -> 1.0E+2 +dqbas324 toEng 10e1 -> 100 +dqbas325 toSci 10e0 -> 10 +dqbas326 toEng 10e0 -> 10 +dqbas327 toSci 10e-1 -> 1.0 +dqbas328 toEng 10e-1 -> 1.0 +dqbas329 toSci 10e-2 -> 0.10 +dqbas330 toEng 10e-2 -> 0.10 +dqbas331 toSci 10e-3 -> 0.010 +dqbas332 toEng 10e-3 -> 0.010 +dqbas333 toSci 10e-4 -> 0.0010 +dqbas334 toEng 10e-4 -> 0.0010 +dqbas335 toSci 10e-5 -> 0.00010 +dqbas336 toEng 10e-5 -> 0.00010 +dqbas337 toSci 10e-6 -> 0.000010 +dqbas338 toEng 10e-6 -> 0.000010 +dqbas339 toSci 10e-7 -> 0.0000010 +dqbas340 toEng 10e-7 -> 0.0000010 +dqbas341 toSci 10e-8 -> 1.0E-7 +dqbas342 toEng 10e-8 -> 100E-9 +dqbas343 toSci 10e-9 -> 1.0E-8 +dqbas344 toEng 10e-9 -> 10E-9 +dqbas345 toSci 10e-10 -> 1.0E-9 +dqbas346 toEng 10e-10 -> 1.0E-9 +dqbas347 toSci 10e-11 -> 1.0E-10 +dqbas348 toEng 10e-11 -> 100E-12 +dqbas349 toSci 10e-12 -> 1.0E-11 +dqbas350 toEng 10e-12 -> 10E-12 +dqbas351 toSci 10e-13 -> 1.0E-12 +dqbas352 toEng 10e-13 -> 1.0E-12 + +dqbas361 toSci 7E12 -> 7E+12 +dqbas362 toEng 7E12 -> 7E+12 +dqbas363 toSci 7E11 -> 7E+11 +dqbas364 toEng 7E11 -> 700E+9 +dqbas365 toSci 7E10 -> 7E+10 +dqbas366 toEng 7E10 -> 70E+9 +dqbas367 toSci 7E9 -> 7E+9 +dqbas368 toEng 7E9 -> 7E+9 +dqbas369 toSci 7E8 -> 7E+8 +dqbas370 toEng 7E8 -> 700E+6 +dqbas371 toSci 7E7 -> 7E+7 +dqbas372 toEng 7E7 -> 70E+6 +dqbas373 toSci 7E6 -> 7E+6 +dqbas374 toEng 7E6 -> 7E+6 +dqbas375 toSci 7E5 -> 7E+5 +dqbas376 toEng 7E5 -> 700E+3 +dqbas377 toSci 7E4 -> 7E+4 +dqbas378 toEng 7E4 -> 70E+3 +dqbas379 toSci 7E3 -> 7E+3 +dqbas380 toEng 7E3 -> 7E+3 +dqbas381 toSci 7E2 -> 7E+2 +dqbas382 toEng 7E2 -> 700 +dqbas383 toSci 7E1 -> 7E+1 +dqbas384 toEng 7E1 -> 70 +dqbas385 toSci 7E0 -> 7 +dqbas386 toEng 7E0 -> 7 +dqbas387 toSci 7E-1 -> 0.7 +dqbas388 toEng 7E-1 -> 0.7 +dqbas389 toSci 7E-2 -> 0.07 +dqbas390 toEng 7E-2 -> 0.07 +dqbas391 toSci 7E-3 -> 0.007 +dqbas392 toEng 7E-3 -> 0.007 +dqbas393 toSci 7E-4 -> 0.0007 +dqbas394 toEng 7E-4 -> 0.0007 +dqbas395 toSci 7E-5 -> 0.00007 +dqbas396 toEng 7E-5 -> 0.00007 +dqbas397 toSci 7E-6 -> 0.000007 +dqbas398 toEng 7E-6 -> 0.000007 +dqbas399 toSci 7E-7 -> 7E-7 +dqbas400 toEng 7E-7 -> 700E-9 +dqbas401 toSci 7E-8 -> 7E-8 +dqbas402 toEng 7E-8 -> 70E-9 +dqbas403 toSci 7E-9 -> 7E-9 +dqbas404 toEng 7E-9 -> 7E-9 +dqbas405 toSci 7E-10 -> 7E-10 +dqbas406 toEng 7E-10 -> 700E-12 +dqbas407 toSci 7E-11 -> 7E-11 +dqbas408 toEng 7E-11 -> 70E-12 +dqbas409 toSci 7E-12 -> 7E-12 +dqbas410 toEng 7E-12 -> 7E-12 +dqbas411 toSci 7E-13 -> 7E-13 +dqbas412 toEng 7E-13 -> 700E-15 + +-- Exacts remain exact up to precision .. +dqbas420 toSci 100 -> 100 +dqbas422 toSci 1000 -> 1000 +dqbas424 toSci 999.9 -> 999.9 +dqbas426 toSci 1000.0 -> 1000.0 +dqbas428 toSci 1000.1 -> 1000.1 +dqbas430 toSci 10000 -> 10000 +dqbas432 toSci 1000000000000000000000000000000 -> 1000000000000000000000000000000 +dqbas434 toSci 10000000000000000000000000000000 -> 10000000000000000000000000000000 +dqbas436 toSci 100000000000000000000000000000000 -> 100000000000000000000000000000000 +dqbas438 toSci 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqbas440 toSci 10000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+34 Rounded +dqbas442 toSci 10000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+34 Rounded +dqbas444 toSci 10000000000000000000000000000000003 -> 1.000000000000000000000000000000000E+34 Rounded Inexact +dqbas446 toSci 10000000000000000000000000000000005 -> 1.000000000000000000000000000000000E+34 Rounded Inexact +dqbas448 toSci 100000000000000000000000000000000050 -> 1.000000000000000000000000000000000E+35 Rounded Inexact +dqbas450 toSci 10000000000000000000000000000000009 -> 1.000000000000000000000000000000001E+34 Rounded Inexact +dqbas452 toSci 100000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+35 Rounded +dqbas454 toSci 100000000000000000000000000000000003 -> 1.000000000000000000000000000000000E+35 Rounded Inexact +dqbas456 toSci 100000000000000000000000000000000005 -> 1.000000000000000000000000000000000E+35 Rounded Inexact +dqbas458 toSci 100000000000000000000000000000000009 -> 1.000000000000000000000000000000000E+35 Rounded Inexact +dqbas460 toSci 1000000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+36 Rounded +dqbas462 toSci 1000000000000000000000000000000000300 -> 1.000000000000000000000000000000000E+36 Rounded Inexact +dqbas464 toSci 1000000000000000000000000000000000500 -> 1.000000000000000000000000000000000E+36 Rounded Inexact +dqbas466 toSci 1000000000000000000000000000000000900 -> 1.000000000000000000000000000000001E+36 Rounded Inexact +dqbas468 toSci 10000000000000000000000000000000000000 -> 1.000000000000000000000000000000000E+37 Rounded +dqbas470 toSci 10000000000000000000000000000000003000 -> 1.000000000000000000000000000000000E+37 Rounded Inexact +dqbas472 toSci 10000000000000000000000000000000005000 -> 1.000000000000000000000000000000000E+37 Rounded Inexact +dqbas474 toSci 10000000000000000000000000000000009000 -> 1.000000000000000000000000000000001E+37 Rounded Inexact + +-- check rounding modes heeded +rounding: ceiling +dqbsr401 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr402 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr403 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr404 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +rounding: up +dqbsr405 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr406 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr407 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr408 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +rounding: floor +dqbsr410 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr411 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr412 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr413 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112345 Rounded Inexact +rounding: half_down +dqbsr415 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr416 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr417 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr418 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr419 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +rounding: half_even +dqbsr421 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr422 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr423 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr424 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr425 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +rounding: down +dqbsr426 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr427 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr428 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr429 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112345 Rounded Inexact +rounding: half_up +dqbsr431 toSci 1.1111111111111111111111111111123450 -> 1.111111111111111111111111111112345 Rounded +dqbsr432 toSci 1.11111111111111111111111111111234549 -> 1.111111111111111111111111111112345 Rounded Inexact +dqbsr433 toSci 1.11111111111111111111111111111234550 -> 1.111111111111111111111111111112346 Rounded Inexact +dqbsr434 toSci 1.11111111111111111111111111111234650 -> 1.111111111111111111111111111112347 Rounded Inexact +dqbsr435 toSci 1.11111111111111111111111111111234551 -> 1.111111111111111111111111111112346 Rounded Inexact +-- negatives +rounding: ceiling +dqbsr501 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr502 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr503 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr504 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112345 Rounded Inexact +rounding: up +dqbsr505 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr506 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr507 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr508 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact +rounding: floor +dqbsr510 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr511 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr512 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr513 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact +rounding: half_down +dqbsr515 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr516 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr517 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr518 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr519 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact +rounding: half_even +dqbsr521 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr522 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr523 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr524 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr525 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact +rounding: down +dqbsr526 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr527 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr528 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr529 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112345 Rounded Inexact +rounding: half_up +dqbsr531 toSci -1.1111111111111111111111111111123450 -> -1.111111111111111111111111111112345 Rounded +dqbsr532 toSci -1.11111111111111111111111111111234549 -> -1.111111111111111111111111111112345 Rounded Inexact +dqbsr533 toSci -1.11111111111111111111111111111234550 -> -1.111111111111111111111111111112346 Rounded Inexact +dqbsr534 toSci -1.11111111111111111111111111111234650 -> -1.111111111111111111111111111112347 Rounded Inexact +dqbsr535 toSci -1.11111111111111111111111111111234551 -> -1.111111111111111111111111111112346 Rounded Inexact + +rounding: half_even + +-- The 'baddies' tests from DiagBigDecimal, plus some new ones +dqbas500 toSci '1..2' -> NaN Conversion_syntax +dqbas501 toSci '.' -> NaN Conversion_syntax +dqbas502 toSci '..' -> NaN Conversion_syntax +dqbas503 toSci '++1' -> NaN Conversion_syntax +dqbas504 toSci '--1' -> NaN Conversion_syntax +dqbas505 toSci '-+1' -> NaN Conversion_syntax +dqbas506 toSci '+-1' -> NaN Conversion_syntax +dqbas507 toSci '12e' -> NaN Conversion_syntax +dqbas508 toSci '12e++' -> NaN Conversion_syntax +dqbas509 toSci '12f4' -> NaN Conversion_syntax +dqbas510 toSci ' +1' -> NaN Conversion_syntax +dqbas511 toSci '+ 1' -> NaN Conversion_syntax +dqbas512 toSci '12 ' -> NaN Conversion_syntax +dqbas513 toSci ' + 1' -> NaN Conversion_syntax +dqbas514 toSci ' - 1 ' -> NaN Conversion_syntax +dqbas515 toSci 'x' -> NaN Conversion_syntax +dqbas516 toSci '-1-' -> NaN Conversion_syntax +dqbas517 toSci '12-' -> NaN Conversion_syntax +dqbas518 toSci '3+' -> NaN Conversion_syntax +dqbas519 toSci '' -> NaN Conversion_syntax +dqbas520 toSci '1e-' -> NaN Conversion_syntax +dqbas521 toSci '7e99999a' -> NaN Conversion_syntax +dqbas522 toSci '7e123567890x' -> NaN Conversion_syntax +dqbas523 toSci '7e12356789012x' -> NaN Conversion_syntax +dqbas524 toSci '' -> NaN Conversion_syntax +dqbas525 toSci 'e100' -> NaN Conversion_syntax +dqbas526 toSci '\u0e5a' -> NaN Conversion_syntax +dqbas527 toSci '\u0b65' -> NaN Conversion_syntax +dqbas528 toSci '123,65' -> NaN Conversion_syntax +dqbas529 toSci '1.34.5' -> NaN Conversion_syntax +dqbas530 toSci '.123.5' -> NaN Conversion_syntax +dqbas531 toSci '01.35.' -> NaN Conversion_syntax +dqbas532 toSci '01.35-' -> NaN Conversion_syntax +dqbas533 toSci '0000..' -> NaN Conversion_syntax +dqbas534 toSci '.0000.' -> NaN Conversion_syntax +dqbas535 toSci '00..00' -> NaN Conversion_syntax +dqbas536 toSci '111e*123' -> NaN Conversion_syntax +dqbas537 toSci '111e123-' -> NaN Conversion_syntax +dqbas538 toSci '111e+12+' -> NaN Conversion_syntax +dqbas539 toSci '111e1-3-' -> NaN Conversion_syntax +dqbas540 toSci '111e1*23' -> NaN Conversion_syntax +dqbas541 toSci '111e1e+3' -> NaN Conversion_syntax +dqbas542 toSci '1e1.0' -> NaN Conversion_syntax +dqbas543 toSci '1e123e' -> NaN Conversion_syntax +dqbas544 toSci 'ten' -> NaN Conversion_syntax +dqbas545 toSci 'ONE' -> NaN Conversion_syntax +dqbas546 toSci '1e.1' -> NaN Conversion_syntax +dqbas547 toSci '1e1.' -> NaN Conversion_syntax +dqbas548 toSci '1ee' -> NaN Conversion_syntax +dqbas549 toSci 'e+1' -> NaN Conversion_syntax +dqbas550 toSci '1.23.4' -> NaN Conversion_syntax +dqbas551 toSci '1.2.1' -> NaN Conversion_syntax +dqbas552 toSci '1E+1.2' -> NaN Conversion_syntax +dqbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax +dqbas554 toSci '1E++1' -> NaN Conversion_syntax +dqbas555 toSci '1E--1' -> NaN Conversion_syntax +dqbas556 toSci '1E+-1' -> NaN Conversion_syntax +dqbas557 toSci '1E-+1' -> NaN Conversion_syntax +dqbas558 toSci '1E''1' -> NaN Conversion_syntax +dqbas559 toSci "1E""1" -> NaN Conversion_syntax +dqbas560 toSci "1E""""" -> NaN Conversion_syntax +-- Near-specials +dqbas561 toSci "qNaN" -> NaN Conversion_syntax +dqbas562 toSci "NaNq" -> NaN Conversion_syntax +dqbas563 toSci "NaNs" -> NaN Conversion_syntax +dqbas564 toSci "Infi" -> NaN Conversion_syntax +dqbas565 toSci "Infin" -> NaN Conversion_syntax +dqbas566 toSci "Infini" -> NaN Conversion_syntax +dqbas567 toSci "Infinit" -> NaN Conversion_syntax +dqbas568 toSci "-Infinit" -> NaN Conversion_syntax +dqbas569 toSci "0Inf" -> NaN Conversion_syntax +dqbas570 toSci "9Inf" -> NaN Conversion_syntax +dqbas571 toSci "-0Inf" -> NaN Conversion_syntax +dqbas572 toSci "-9Inf" -> NaN Conversion_syntax +dqbas573 toSci "-sNa" -> NaN Conversion_syntax +dqbas574 toSci "xNaN" -> NaN Conversion_syntax +dqbas575 toSci "0sNaN" -> NaN Conversion_syntax + +-- some baddies with dots and Es and dots and specials +dqbas576 toSci 'e+1' -> NaN Conversion_syntax +dqbas577 toSci '.e+1' -> NaN Conversion_syntax +dqbas578 toSci '+.e+1' -> NaN Conversion_syntax +dqbas579 toSci '-.e+' -> NaN Conversion_syntax +dqbas580 toSci '-.e' -> NaN Conversion_syntax +dqbas581 toSci 'E+1' -> NaN Conversion_syntax +dqbas582 toSci '.E+1' -> NaN Conversion_syntax +dqbas583 toSci '+.E+1' -> NaN Conversion_syntax +dqbas584 toSci '-.E+' -> NaN Conversion_syntax +dqbas585 toSci '-.E' -> NaN Conversion_syntax + +dqbas586 toSci '.NaN' -> NaN Conversion_syntax +dqbas587 toSci '-.NaN' -> NaN Conversion_syntax +dqbas588 toSci '+.sNaN' -> NaN Conversion_syntax +dqbas589 toSci '+.Inf' -> NaN Conversion_syntax +dqbas590 toSci '.Infinity' -> NaN Conversion_syntax + +-- Zeros +dqbas601 toSci 0.000000000 -> 0E-9 +dqbas602 toSci 0.00000000 -> 0E-8 +dqbas603 toSci 0.0000000 -> 0E-7 +dqbas604 toSci 0.000000 -> 0.000000 +dqbas605 toSci 0.00000 -> 0.00000 +dqbas606 toSci 0.0000 -> 0.0000 +dqbas607 toSci 0.000 -> 0.000 +dqbas608 toSci 0.00 -> 0.00 +dqbas609 toSci 0.0 -> 0.0 +dqbas610 toSci .0 -> 0.0 +dqbas611 toSci 0. -> 0 +dqbas612 toSci -.0 -> -0.0 +dqbas613 toSci -0. -> -0 +dqbas614 toSci -0.0 -> -0.0 +dqbas615 toSci -0.00 -> -0.00 +dqbas616 toSci -0.000 -> -0.000 +dqbas617 toSci -0.0000 -> -0.0000 +dqbas618 toSci -0.00000 -> -0.00000 +dqbas619 toSci -0.000000 -> -0.000000 +dqbas620 toSci -0.0000000 -> -0E-7 +dqbas621 toSci -0.00000000 -> -0E-8 +dqbas622 toSci -0.000000000 -> -0E-9 + +dqbas630 toSci 0.00E+0 -> 0.00 +dqbas631 toSci 0.00E+1 -> 0.0 +dqbas632 toSci 0.00E+2 -> 0 +dqbas633 toSci 0.00E+3 -> 0E+1 +dqbas634 toSci 0.00E+4 -> 0E+2 +dqbas635 toSci 0.00E+5 -> 0E+3 +dqbas636 toSci 0.00E+6 -> 0E+4 +dqbas637 toSci 0.00E+7 -> 0E+5 +dqbas638 toSci 0.00E+8 -> 0E+6 +dqbas639 toSci 0.00E+9 -> 0E+7 + +dqbas640 toSci 0.0E+0 -> 0.0 +dqbas641 toSci 0.0E+1 -> 0 +dqbas642 toSci 0.0E+2 -> 0E+1 +dqbas643 toSci 0.0E+3 -> 0E+2 +dqbas644 toSci 0.0E+4 -> 0E+3 +dqbas645 toSci 0.0E+5 -> 0E+4 +dqbas646 toSci 0.0E+6 -> 0E+5 +dqbas647 toSci 0.0E+7 -> 0E+6 +dqbas648 toSci 0.0E+8 -> 0E+7 +dqbas649 toSci 0.0E+9 -> 0E+8 + +dqbas650 toSci 0E+0 -> 0 +dqbas651 toSci 0E+1 -> 0E+1 +dqbas652 toSci 0E+2 -> 0E+2 +dqbas653 toSci 0E+3 -> 0E+3 +dqbas654 toSci 0E+4 -> 0E+4 +dqbas655 toSci 0E+5 -> 0E+5 +dqbas656 toSci 0E+6 -> 0E+6 +dqbas657 toSci 0E+7 -> 0E+7 +dqbas658 toSci 0E+8 -> 0E+8 +dqbas659 toSci 0E+9 -> 0E+9 + +dqbas660 toSci 0.0E-0 -> 0.0 +dqbas661 toSci 0.0E-1 -> 0.00 +dqbas662 toSci 0.0E-2 -> 0.000 +dqbas663 toSci 0.0E-3 -> 0.0000 +dqbas664 toSci 0.0E-4 -> 0.00000 +dqbas665 toSci 0.0E-5 -> 0.000000 +dqbas666 toSci 0.0E-6 -> 0E-7 +dqbas667 toSci 0.0E-7 -> 0E-8 +dqbas668 toSci 0.0E-8 -> 0E-9 +dqbas669 toSci 0.0E-9 -> 0E-10 + +dqbas670 toSci 0.00E-0 -> 0.00 +dqbas671 toSci 0.00E-1 -> 0.000 +dqbas672 toSci 0.00E-2 -> 0.0000 +dqbas673 toSci 0.00E-3 -> 0.00000 +dqbas674 toSci 0.00E-4 -> 0.000000 +dqbas675 toSci 0.00E-5 -> 0E-7 +dqbas676 toSci 0.00E-6 -> 0E-8 +dqbas677 toSci 0.00E-7 -> 0E-9 +dqbas678 toSci 0.00E-8 -> 0E-10 +dqbas679 toSci 0.00E-9 -> 0E-11 + +dqbas680 toSci 000000. -> 0 +dqbas681 toSci 00000. -> 0 +dqbas682 toSci 0000. -> 0 +dqbas683 toSci 000. -> 0 +dqbas684 toSci 00. -> 0 +dqbas685 toSci 0. -> 0 +dqbas686 toSci +00000. -> 0 +dqbas687 toSci -00000. -> -0 +dqbas688 toSci +0. -> 0 +dqbas689 toSci -0. -> -0 + +-- Specials +dqbas700 toSci "NaN" -> NaN +dqbas701 toSci "nan" -> NaN +dqbas702 toSci "nAn" -> NaN +dqbas703 toSci "NAN" -> NaN +dqbas704 toSci "+NaN" -> NaN +dqbas705 toSci "+nan" -> NaN +dqbas706 toSci "+nAn" -> NaN +dqbas707 toSci "+NAN" -> NaN +dqbas708 toSci "-NaN" -> -NaN +dqbas709 toSci "-nan" -> -NaN +dqbas710 toSci "-nAn" -> -NaN +dqbas711 toSci "-NAN" -> -NaN +dqbas712 toSci 'NaN0' -> NaN +dqbas713 toSci 'NaN1' -> NaN1 +dqbas714 toSci 'NaN12' -> NaN12 +dqbas715 toSci 'NaN123' -> NaN123 +dqbas716 toSci 'NaN1234' -> NaN1234 +dqbas717 toSci 'NaN01' -> NaN1 +dqbas718 toSci 'NaN012' -> NaN12 +dqbas719 toSci 'NaN0123' -> NaN123 +dqbas720 toSci 'NaN01234' -> NaN1234 +dqbas721 toSci 'NaN001' -> NaN1 +dqbas722 toSci 'NaN0012' -> NaN12 +dqbas723 toSci 'NaN00123' -> NaN123 +dqbas724 toSci 'NaN001234' -> NaN1234 +dqbas725 toSci 'NaN1234567890123456781234567890123456' -> NaN Conversion_syntax +dqbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax +dqbas727 toSci 'NaN12.45' -> NaN Conversion_syntax +dqbas728 toSci 'NaN-12' -> NaN Conversion_syntax +dqbas729 toSci 'NaN+12' -> NaN Conversion_syntax + +dqbas730 toSci "sNaN" -> sNaN +dqbas731 toSci "snan" -> sNaN +dqbas732 toSci "SnAn" -> sNaN +dqbas733 toSci "SNAN" -> sNaN +dqbas734 toSci "+sNaN" -> sNaN +dqbas735 toSci "+snan" -> sNaN +dqbas736 toSci "+SnAn" -> sNaN +dqbas737 toSci "+SNAN" -> sNaN +dqbas738 toSci "-sNaN" -> -sNaN +dqbas739 toSci "-snan" -> -sNaN +dqbas740 toSci "-SnAn" -> -sNaN +dqbas741 toSci "-SNAN" -> -sNaN +dqbas742 toSci 'sNaN0000' -> sNaN +dqbas743 toSci 'sNaN7' -> sNaN7 +dqbas744 toSci 'sNaN007234' -> sNaN7234 +dqbas745 toSci 'sNaN1234567890123456787234561234567890' -> NaN Conversion_syntax +dqbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax +dqbas747 toSci 'sNaN-72' -> NaN Conversion_syntax + +dqbas748 toSci "Inf" -> Infinity +dqbas749 toSci "inf" -> Infinity +dqbas750 toSci "iNf" -> Infinity +dqbas751 toSci "INF" -> Infinity +dqbas752 toSci "+Inf" -> Infinity +dqbas753 toSci "+inf" -> Infinity +dqbas754 toSci "+iNf" -> Infinity +dqbas755 toSci "+INF" -> Infinity +dqbas756 toSci "-Inf" -> -Infinity +dqbas757 toSci "-inf" -> -Infinity +dqbas758 toSci "-iNf" -> -Infinity +dqbas759 toSci "-INF" -> -Infinity + +dqbas760 toSci "Infinity" -> Infinity +dqbas761 toSci "infinity" -> Infinity +dqbas762 toSci "iNfInItY" -> Infinity +dqbas763 toSci "INFINITY" -> Infinity +dqbas764 toSci "+Infinity" -> Infinity +dqbas765 toSci "+infinity" -> Infinity +dqbas766 toSci "+iNfInItY" -> Infinity +dqbas767 toSci "+INFINITY" -> Infinity +dqbas768 toSci "-Infinity" -> -Infinity +dqbas769 toSci "-infinity" -> -Infinity +dqbas770 toSci "-iNfInItY" -> -Infinity +dqbas771 toSci "-INFINITY" -> -Infinity + +-- Specials and zeros for toEng +dqbast772 toEng "NaN" -> NaN +dqbast773 toEng "-Infinity" -> -Infinity +dqbast774 toEng "-sNaN" -> -sNaN +dqbast775 toEng "-NaN" -> -NaN +dqbast776 toEng "+Infinity" -> Infinity +dqbast778 toEng "+sNaN" -> sNaN +dqbast779 toEng "+NaN" -> NaN +dqbast780 toEng "INFINITY" -> Infinity +dqbast781 toEng "SNAN" -> sNaN +dqbast782 toEng "NAN" -> NaN +dqbast783 toEng "infinity" -> Infinity +dqbast784 toEng "snan" -> sNaN +dqbast785 toEng "nan" -> NaN +dqbast786 toEng "InFINITY" -> Infinity +dqbast787 toEng "SnAN" -> sNaN +dqbast788 toEng "nAN" -> NaN +dqbast789 toEng "iNfinity" -> Infinity +dqbast790 toEng "sNan" -> sNaN +dqbast791 toEng "Nan" -> NaN +dqbast792 toEng "Infinity" -> Infinity +dqbast793 toEng "sNaN" -> sNaN + +-- Zero toEng, etc. +dqbast800 toEng 0e+1 -> "0.00E+3" -- doc example + +dqbast801 toEng 0.000000000 -> 0E-9 +dqbast802 toEng 0.00000000 -> 0.00E-6 +dqbast803 toEng 0.0000000 -> 0.0E-6 +dqbast804 toEng 0.000000 -> 0.000000 +dqbast805 toEng 0.00000 -> 0.00000 +dqbast806 toEng 0.0000 -> 0.0000 +dqbast807 toEng 0.000 -> 0.000 +dqbast808 toEng 0.00 -> 0.00 +dqbast809 toEng 0.0 -> 0.0 +dqbast810 toEng .0 -> 0.0 +dqbast811 toEng 0. -> 0 +dqbast812 toEng -.0 -> -0.0 +dqbast813 toEng -0. -> -0 +dqbast814 toEng -0.0 -> -0.0 +dqbast815 toEng -0.00 -> -0.00 +dqbast816 toEng -0.000 -> -0.000 +dqbast817 toEng -0.0000 -> -0.0000 +dqbast818 toEng -0.00000 -> -0.00000 +dqbast819 toEng -0.000000 -> -0.000000 +dqbast820 toEng -0.0000000 -> -0.0E-6 +dqbast821 toEng -0.00000000 -> -0.00E-6 +dqbast822 toEng -0.000000000 -> -0E-9 + +dqbast830 toEng 0.00E+0 -> 0.00 +dqbast831 toEng 0.00E+1 -> 0.0 +dqbast832 toEng 0.00E+2 -> 0 +dqbast833 toEng 0.00E+3 -> 0.00E+3 +dqbast834 toEng 0.00E+4 -> 0.0E+3 +dqbast835 toEng 0.00E+5 -> 0E+3 +dqbast836 toEng 0.00E+6 -> 0.00E+6 +dqbast837 toEng 0.00E+7 -> 0.0E+6 +dqbast838 toEng 0.00E+8 -> 0E+6 +dqbast839 toEng 0.00E+9 -> 0.00E+9 + +dqbast840 toEng 0.0E+0 -> 0.0 +dqbast841 toEng 0.0E+1 -> 0 +dqbast842 toEng 0.0E+2 -> 0.00E+3 +dqbast843 toEng 0.0E+3 -> 0.0E+3 +dqbast844 toEng 0.0E+4 -> 0E+3 +dqbast845 toEng 0.0E+5 -> 0.00E+6 +dqbast846 toEng 0.0E+6 -> 0.0E+6 +dqbast847 toEng 0.0E+7 -> 0E+6 +dqbast848 toEng 0.0E+8 -> 0.00E+9 +dqbast849 toEng 0.0E+9 -> 0.0E+9 + +dqbast850 toEng 0E+0 -> 0 +dqbast851 toEng 0E+1 -> 0.00E+3 +dqbast852 toEng 0E+2 -> 0.0E+3 +dqbast853 toEng 0E+3 -> 0E+3 +dqbast854 toEng 0E+4 -> 0.00E+6 +dqbast855 toEng 0E+5 -> 0.0E+6 +dqbast856 toEng 0E+6 -> 0E+6 +dqbast857 toEng 0E+7 -> 0.00E+9 +dqbast858 toEng 0E+8 -> 0.0E+9 +dqbast859 toEng 0E+9 -> 0E+9 + +dqbast860 toEng 0.0E-0 -> 0.0 +dqbast861 toEng 0.0E-1 -> 0.00 +dqbast862 toEng 0.0E-2 -> 0.000 +dqbast863 toEng 0.0E-3 -> 0.0000 +dqbast864 toEng 0.0E-4 -> 0.00000 +dqbast865 toEng 0.0E-5 -> 0.000000 +dqbast866 toEng 0.0E-6 -> 0.0E-6 +dqbast867 toEng 0.0E-7 -> 0.00E-6 +dqbast868 toEng 0.0E-8 -> 0E-9 +dqbast869 toEng 0.0E-9 -> 0.0E-9 + +dqbast870 toEng 0.00E-0 -> 0.00 +dqbast871 toEng 0.00E-1 -> 0.000 +dqbast872 toEng 0.00E-2 -> 0.0000 +dqbast873 toEng 0.00E-3 -> 0.00000 +dqbast874 toEng 0.00E-4 -> 0.000000 +dqbast875 toEng 0.00E-5 -> 0.0E-6 +dqbast876 toEng 0.00E-6 -> 0.00E-6 +dqbast877 toEng 0.00E-7 -> 0E-9 +dqbast878 toEng 0.00E-8 -> 0.0E-9 +dqbast879 toEng 0.00E-9 -> 0.00E-9 + +-- long input strings +dqbas801 tosci '01234567890123456' -> 1234567890123456 +dqbas802 tosci '001234567890123456' -> 1234567890123456 +dqbas803 tosci '0001234567890123456' -> 1234567890123456 +dqbas804 tosci '00001234567890123456' -> 1234567890123456 +dqbas805 tosci '000001234567890123456' -> 1234567890123456 +dqbas806 tosci '0000001234567890123456' -> 1234567890123456 +dqbas807 tosci '00000001234567890123456' -> 1234567890123456 +dqbas808 tosci '000000001234567890123456' -> 1234567890123456 +dqbas809 tosci '0000000001234567890123456' -> 1234567890123456 +dqbas810 tosci '00000000001234567890123456' -> 1234567890123456 + +dqbas811 tosci '0.1234567890123456' -> 0.1234567890123456 +dqbas812 tosci '0.01234567890123456' -> 0.01234567890123456 +dqbas813 tosci '0.001234567890123456' -> 0.001234567890123456 +dqbas814 tosci '0.0001234567890123456' -> 0.0001234567890123456 +dqbas815 tosci '0.00001234567890123456' -> 0.00001234567890123456 +dqbas816 tosci '0.000001234567890123456' -> 0.000001234567890123456 +dqbas817 tosci '0.0000001234567890123456' -> 1.234567890123456E-7 +dqbas818 tosci '0.00000001234567890123456' -> 1.234567890123456E-8 +dqbas819 tosci '0.000000001234567890123456' -> 1.234567890123456E-9 +dqbas820 tosci '0.0000000001234567890123456' -> 1.234567890123456E-10 + +dqbas821 tosci '12345678912345678901234567801234567890' -> 1.234567891234567890123456780123457E+37 Inexact Rounded +dqbas822 tosci '123456789123456789012345678012345678901' -> 1.234567891234567890123456780123457E+38 Inexact Rounded +dqbas823 tosci '1234567891234567890123456780123456789012' -> 1.234567891234567890123456780123457E+39 Inexact Rounded +dqbas824 tosci '12345678912345678901234567801234567890123' -> 1.234567891234567890123456780123457E+40 Inexact Rounded +dqbas825 tosci '123456789123456789012345678012345678901234' -> 1.234567891234567890123456780123457E+41 Inexact Rounded +dqbas826 tosci '1234567891234567890123456780123456789012345' -> 1.234567891234567890123456780123457E+42 Inexact Rounded +dqbas827 tosci '12345678912345678901234567801234567890123456' -> 1.234567891234567890123456780123457E+43 Inexact Rounded +dqbas828 tosci '123456789123456789012345678012345678901234567' -> 1.234567891234567890123456780123457E+44 Inexact Rounded +dqbas829 tosci '1234567891234567890123456780123456789012345678' -> 1.234567891234567890123456780123457E+45 Inexact Rounded + +-- subnormals and overflows +dqbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded +dqbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded +dqbas908 toSci '0.9e-999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas909 toSci '0.09e-999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded +dqbas911 toSci '10e-1000000000' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded +dqbas913 toSci '99e-9999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded +dqbas915 toSci '1111e-9999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas916 toSci '1111e-99999999999' -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded +-- negatives the same +dqbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded +dqbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded +dqbas920 toSci '-0.9e-999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas921 toSci '-0.09e-999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded +dqbas923 toSci '-10e-1000000000' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded +dqbas925 toSci '-99e-9999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded +dqbas927 toSci '-1111e-9999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas928 toSci '-1111e-99999999999' -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded + +-- overflow results at different rounding modes +rounding: ceiling +dqbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas931 toSci '-7e10000' -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +rounding: up +dqbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: down +dqbas934 toSci '7e10000' -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqbas935 toSci '-7e10000' -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +rounding: floor +dqbas936 toSci '7e10000' -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_up +dqbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_even +dqbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_down +dqbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dqbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_even + +-- Now check 854/754r some subnormals and underflow to 0 +dqbem400 toSci 1.0000E-383 -> 1.0000E-383 +dqbem401 toSci 0.1E-6172 -> 1E-6173 Subnormal +dqbem402 toSci 0.1000E-6172 -> 1.000E-6173 Subnormal +dqbem403 toSci 0.0100E-6172 -> 1.00E-6174 Subnormal +dqbem404 toSci 0.0010E-6172 -> 1.0E-6175 Subnormal +dqbem405 toSci 0.0001E-6172 -> 1E-6176 Subnormal +dqbem406 toSci 0.00010E-6172 -> 1E-6176 Subnormal Rounded +dqbem407 toSci 0.00013E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqbem408 toSci 0.00015E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem409 toSci 0.00017E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem410 toSci 0.00023E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem411 toSci 0.00025E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem412 toSci 0.00027E-6172 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqbem413 toSci 0.000149E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqbem414 toSci 0.000150E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem415 toSci 0.000151E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem416 toSci 0.000249E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem417 toSci 0.000250E-6172 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqbem418 toSci 0.000251E-6172 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqbem419 toSci 0.00009E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqbem420 toSci 0.00005E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem421 toSci 0.00003E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem422 toSci 0.000009E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem423 toSci 0.000005E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem424 toSci 0.000003E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqbem425 toSci 0.001049E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded +dqbem426 toSci 0.001050E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded +dqbem427 toSci 0.001051E-6172 -> 1.1E-6175 Underflow Subnormal Inexact Rounded +dqbem428 toSci 0.001149E-6172 -> 1.1E-6175 Underflow Subnormal Inexact Rounded +dqbem429 toSci 0.001150E-6172 -> 1.2E-6175 Underflow Subnormal Inexact Rounded +dqbem430 toSci 0.001151E-6172 -> 1.2E-6175 Underflow Subnormal Inexact Rounded + +dqbem432 toSci 0.010049E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded +dqbem433 toSci 0.010050E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded +dqbem434 toSci 0.010051E-6172 -> 1.01E-6174 Underflow Subnormal Inexact Rounded +dqbem435 toSci 0.010149E-6172 -> 1.01E-6174 Underflow Subnormal Inexact Rounded +dqbem436 toSci 0.010150E-6172 -> 1.02E-6174 Underflow Subnormal Inexact Rounded +dqbem437 toSci 0.010151E-6172 -> 1.02E-6174 Underflow Subnormal Inexact Rounded + +dqbem440 toSci 0.10103E-6172 -> 1.010E-6173 Underflow Subnormal Inexact Rounded +dqbem441 toSci 0.10105E-6172 -> 1.010E-6173 Underflow Subnormal Inexact Rounded +dqbem442 toSci 0.10107E-6172 -> 1.011E-6173 Underflow Subnormal Inexact Rounded +dqbem443 toSci 0.10113E-6172 -> 1.011E-6173 Underflow Subnormal Inexact Rounded +dqbem444 toSci 0.10115E-6172 -> 1.012E-6173 Underflow Subnormal Inexact Rounded +dqbem445 toSci 0.10117E-6172 -> 1.012E-6173 Underflow Subnormal Inexact Rounded + +dqbem450 toSci 1.10730E-6173 -> 1.107E-6173 Underflow Subnormal Inexact Rounded +dqbem451 toSci 1.10750E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded +dqbem452 toSci 1.10770E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded +dqbem453 toSci 1.10830E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded +dqbem454 toSci 1.10850E-6173 -> 1.108E-6173 Underflow Subnormal Inexact Rounded +dqbem455 toSci 1.10870E-6173 -> 1.109E-6173 Underflow Subnormal Inexact Rounded + +-- make sure sign OK +dqbem456 toSci -0.10103E-6172 -> -1.010E-6173 Underflow Subnormal Inexact Rounded +dqbem457 toSci -0.10105E-6172 -> -1.010E-6173 Underflow Subnormal Inexact Rounded +dqbem458 toSci -0.10107E-6172 -> -1.011E-6173 Underflow Subnormal Inexact Rounded +dqbem459 toSci -0.10113E-6172 -> -1.011E-6173 Underflow Subnormal Inexact Rounded +dqbem460 toSci -0.10115E-6172 -> -1.012E-6173 Underflow Subnormal Inexact Rounded +dqbem461 toSci -0.10117E-6172 -> -1.012E-6173 Underflow Subnormal Inexact Rounded + +-- '999s' cases +dqbem464 toSci 999999E-6173 -> 9.99999E-6168 Subnormal +dqbem465 toSci 99999.0E-6172 -> 9.99990E-6168 Subnormal +dqbem466 toSci 99999.E-6172 -> 9.9999E-6168 Subnormal +dqbem467 toSci 9999.9E-6172 -> 9.9999E-6169 Subnormal +dqbem468 toSci 999.99E-6172 -> 9.9999E-6170 Subnormal +dqbem469 toSci 99.999E-6172 -> 9.9999E-6171 Subnormal +dqbem470 toSci 9.9999E-6172 -> 9.9999E-6172 Subnormal +dqbem471 toSci 0.99999E-6172 -> 1.0000E-6172 Underflow Subnormal Inexact Rounded +dqbem472 toSci 0.099999E-6172 -> 1.000E-6173 Underflow Subnormal Inexact Rounded +dqbem473 toSci 0.0099999E-6172 -> 1.00E-6174 Underflow Subnormal Inexact Rounded +dqbem474 toSci 0.00099999E-6172 -> 1.0E-6175 Underflow Subnormal Inexact Rounded +dqbem475 toSci 0.000099999E-6172 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqbem476 toSci 0.0000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem477 toSci 0.00000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbem478 toSci 0.000000099999E-6172 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- Exponents with insignificant leading zeros +dqbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded +dqbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded +dqbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded +dqbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded +dqbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded +dqbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded +dqbas1007 toSci 1e-999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1008 toSci 1e-0999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1009 toSci 1e-00999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1010 toSci 1e-000999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1011 toSci 1e-000000000000999999999 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqbas1012 toSci 1e-000000000001000000007 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- check for double-rounded subnormals +dqbas1041 toSci 1.1111111111111111111111111111152444E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow +dqbas1042 toSci 1.1111111111111111111111111111152445E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow +dqbas1043 toSci 1.1111111111111111111111111111152446E-6144 -> 1.11111111111111111111111111111524E-6144 Inexact Rounded Subnormal Underflow + +-- clamped zeros [see also clamp.decTest] +dqbas1075 toSci 0e+10000 -> 0E+6111 Clamped +dqbas1076 toSci 0e-10000 -> 0E-6176 Clamped +dqbas1077 toSci -0e+10000 -> -0E+6111 Clamped +dqbas1078 toSci -0e-10000 -> -0E-6176 Clamped + +-- extreme values from next-wider +dqbas1101 toSci -9.9999999999999999999999999999999999999999999999999999999999999999999E+1572864 -> -Infinity Overflow Inexact Rounded +dqbas1102 toSci -1E-1572863 -> -0E-6176 Inexact Rounded Subnormal Underflow Clamped +dqbas1103 toSci -1E-1572932 -> -0E-6176 Inexact Rounded Subnormal Underflow Clamped +dqbas1104 toSci -0 -> -0 +dqbas1105 toSci +0 -> 0 +dqbas1106 toSci +1E-1572932 -> 0E-6176 Inexact Rounded Subnormal Underflow Clamped +dqbas1107 toSci +1E-1572863 -> 0E-6176 Inexact Rounded Subnormal Underflow Clamped +dqbas1108 toSci +9.9999999999999999999999999999999999999999999999999999999999999999999E+1572864 -> Infinity Overflow Inexact Rounded + diff --git a/Lib/test/decimaltestdata/dqCanonical.decTest b/Lib/test/decimaltestdata/dqCanonical.decTest index 006db8595ca..3ddf6eab2da 100644 --- a/Lib/test/decimaltestdata/dqCanonical.decTest +++ b/Lib/test/decimaltestdata/dqCanonical.decTest @@ -1,372 +1,372 @@ ------------------------------------------------------------------------- --- dqCanonical.decTest -- test decQuad canonical results -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests that copy operations leave uncanonical operands --- unchanged, and vice versa - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Uncanonical declets are: abc, where: --- a=1,2,3 --- b=6,7,e,f --- c=e,f - --- assert some standard (canonical) values; this tests that FromString --- produces canonical results (many more in decimalNN) -dqcan001 apply 9.999999999999999999999999999999999E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan002 apply 0 -> #22080000000000000000000000000000 -dqcan003 apply 1 -> #22080000000000000000000000000001 -dqcan004 apply -1 -> #a2080000000000000000000000000001 -dqcan005 apply Infinity -> #78000000000000000000000000000000 -dqcan006 apply -Infinity -> #f8000000000000000000000000000000 -dqcan007 apply -NaN -> #fc000000000000000000000000000000 -dqcan008 apply -sNaN -> #fe000000000000000000000000000000 -dqcan009 apply NaN999999999999999999999999999999999 -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan010 apply sNaN999999999999999999999999999999999 -> #7e000ff3fcff3fcff3fcff3fcff3fcff -decan011 apply 9999999999999999999999999999999999 -> #6e080ff3fcff3fcff3fcff3fcff3fcff -dqcan012 apply 7.50 -> #220780000000000000000000000003d0 -dqcan013 apply 9.99 -> #220780000000000000000000000000ff - --- Base tests for canonical encodings (individual operator --- propagation is tested later) - --- Finites: declets in coefficient -dqcan021 canonical #77ffcff3fcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan022 canonical #77fffff3fcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan023 canonical #77ffcffffcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan024 canonical #77ffcff3ffff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan025 canonical #77ffcff3fcffffcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan026 canonical #77ffcff3fcff3ffff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan027 canonical #77ffcff3fcff3fcffffcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan028 canonical #77ffcff3fcff3fcff3ffff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan029 canonical #77ffcff3fcff3fcff3fcffffcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan030 canonical #77ffcff3fcff3fcff3fcff3ffff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan031 canonical #77ffcff3fcff3fcff3fcff3fcffffcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan032 canonical #77ffcff3fcff3fcff3fcff3fcff3ffff -> #77ffcff3fcff3fcff3fcff3fcff3fcff - --- NaN: declets in payload -dqcan061 canonical #7c000ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan062 canonical #7c000ffffcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan063 canonical #7c000ff3ffff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan064 canonical #7c000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan065 canonical #7c000ff3fcff3ffff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan066 canonical #7c000ff3fcff3fcffffcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan067 canonical #7c000ff3fcff3fcff3ffff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan068 canonical #7c000ff3fcff3fcff3fcffffcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan069 canonical #7c000ff3fcff3fcff3fcff3ffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan070 canonical #7c000ff3fcff3fcff3fcff3fcffffcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan071 canonical #7c000ff3fcff3fcff3fcff3fcff3ffff -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -dqcan081 canonical #7d000ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan082 canonical #7c800ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan083 canonical #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan084 canonical #7c200ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan085 canonical #7c100ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan086 canonical #7c080ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan087 canonical #7c040ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan088 canonical #7c020ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan089 canonical #7c010ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan090 canonical #7c008ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan091 canonical #7c004ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff - --- sNaN: declets in payload -dqcan101 canonical #7e000ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan102 canonical #7e000ffffcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan103 canonical #7e000ff3ffff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan104 canonical #7e000ff3fcffffcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan105 canonical #7e000ff3fcff3ffff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan106 canonical #7e000ff3fcff3fcffffcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan107 canonical #7e000ff3fcff3fcff3ffff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan108 canonical #7e000ff3fcff3fcff3fcffffcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan109 canonical #7e000ff3fcff3fcff3fcff3ffff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan100 canonical #7e000ff3fcff3fcff3fcff3fcffffcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan111 canonical #7e000ff3fcff3fcff3fcff3fcff3ffff -> #7e000ff3fcff3fcff3fcff3fcff3fcff --- sNaN: exponent continuation bits [excluding sNaN selector] -dqcan121 canonical #7f000ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan122 canonical #7e800ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan123 canonical #7e400ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan124 canonical #7e200ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan125 canonical #7e100ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan126 canonical #7e080ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan127 canonical #7e040ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan128 canonical #7e020ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan129 canonical #7e010ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan130 canonical #7e008ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff -dqcan131 canonical #7e004ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff - --- Inf: exponent continuation bits -dqcan137 canonical #78000000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan138 canonical #79000000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan139 canonical #7a000000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan140 canonical #78800000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan141 canonical #78400000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan142 canonical #78200000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan143 canonical #78100000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan144 canonical #78080000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan145 canonical #78040000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan146 canonical #78020000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan147 canonical #78010000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan148 canonical #78008000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan149 canonical #78004000000000000000000000000000 -> #78000000000000000000000000000000 - --- Inf: coefficient continuation bits (first, last, and a few others) -dqcan150 canonical #78000000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan151 canonical #78020000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan152 canonical #78000000000000000000000000000001 -> #78000000000000000000000000000000 -dqcan153 canonical #78010000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan154 canonical #78002000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan155 canonical #78000800000000000000000000000000 -> #78000000000000000000000000000000 -dqcan156 canonical #78000020000000000000000000000000 -> #78000000000000000000000000000000 -dqcan157 canonical #78000004000000000000000000000000 -> #78000000000000000000000000000000 -dqcan158 canonical #78000000400000000000000000000000 -> #78000000000000000000000000000000 -dqcan159 canonical #78000000080000000000000000000000 -> #78000000000000000000000000000000 -dqcan160 canonical #78000000004000000000000000000000 -> #78000000000000000000000000000000 -dqcan161 canonical #78000000000200000000000000000000 -> #78000000000000000000000000000000 -dqcan162 canonical #78000000000080000000000000000000 -> #78000000000000000000000000000000 -dqcan163 canonical #78000000000002000000000000000000 -> #78000000000000000000000000000000 -dqcan164 canonical #78000000000000400000000000000000 -> #78000000000000000000000000000000 -dqcan165 canonical #78000000000000080000000000000000 -> #78000000000000000000000000000000 -dqcan166 canonical #78000000000000001000000000000000 -> #78000000000000000000000000000000 -dqcan167 canonical #78000000000000000200000000000000 -> #78000000000000000000000000000000 -dqcan168 canonical #78000000000000000080000000000000 -> #78000000000000000000000000000000 -dqcan169 canonical #78000000000000000004000000000000 -> #78000000000000000000000000000000 -dqcan170 canonical #78000000000000000000400000000000 -> #78000000000000000000000000000000 -dqcan171 canonical #78000000000000000000010000000000 -> #78000000000000000000000000000000 -dqcan172 canonical #78000000000000000000002000000000 -> #78000000000000000000000000000000 -dqcan173 canonical #78000000000000000000000400000000 -> #78000000000000000000000000000000 -dqcan174 canonical #78000000000000000000000080000000 -> #78000000000000000000000000000000 -dqcan175 canonical #78000000000000000000000002000000 -> #78000000000000000000000000000000 -dqcan176 canonical #78000000000000000000000000400000 -> #78000000000000000000000000000000 -dqcan177 canonical #78000000000000000000000000020000 -> #78000000000000000000000000000000 -dqcan178 canonical #78000000000000000000000000001000 -> #78000000000000000000000000000000 -dqcan179 canonical #78000000000000000000000000000400 -> #78000000000000000000000000000000 -dqcan180 canonical #78000000000000000000000000000020 -> #78000000000000000000000000000000 -dqcan181 canonical #78000000000000000000000000000008 -> #78000000000000000000000000000000 - - --- Now the operators -- trying to check paths that might fail to --- canonicalize propagated operands - ------ Add: --- Finites: neutral 0 -dqcan202 add 0E+6144 #77ffcff3fcff3fcffffcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff -dqcan203 add #77ffcff3fcff3fcff3fcff3ffff3fcff 0E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff --- tiny zero -dqcan204 add 0E-6176 #77ffcff3ffff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded -dqcan205 add #77ffcff3fcff3fcff3fcff3fcff3ffff 0E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded --- tiny non zero -dqcan206 add -1E-6176 #77ffcff3fcff3fcff3fcff3fcfffffff -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded -dqcan207 add #77ffcffffffffffffffffffffff3fcff -1E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded --- NaN: declets in payload -dqcan211 add 0 #7c000ff3fcff3fcff3fcfffffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan212 add #7c000ff3fcff3fcfffffff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -dqcan213 add 0 #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan214 add #7c020ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- sNaN: declets in payload -dqcan215 add 0 #7e000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan216 add #7e003ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -dqcan217 add 0 #7e500ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan218 add #7e0e0ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -dqcan220 add 0 #78010000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan221 add #78680000000000000000000000000000 0 -> #78000000000000000000000000000000 --- Inf: coefficient continuation bits -dqcan222 add 0 #78002000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan223 add #78000000000000000000000000000001 0 -> #78000000000000000000000000000000 -dqcan224 add 0 #78000002000000000000000000000000 -> #78000000000000000000000000000000 -dqcan225 add #780000000000f0000000000000000000 0 -> #78000000000000000000000000000000 -dqcan226 add 0 #78000000000000000005000000000000 -> #78000000000000000000000000000000 -dqcan227 add #780000000000000000000000000a0000 0 -> #78000000000000000000000000000000 - ------ Class: [does not return encoded] - ------ Compare: -dqcan231 compare -Inf 1 -> #a2080000000000000000000000000001 -dqcan232 compare -Inf -Inf -> #22080000000000000000000000000000 -dqcan233 compare 1 -Inf -> #22080000000000000000000000000001 -dqcan234 compare #7c010ff3fcff3fcff3fcff3ffffffcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan235 compare #7e004ff3fcff3fcff3ffffffcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation - ------ CompareSig: -dqcan241 comparesig -Inf 1 -> #a2080000000000000000000000000001 -dqcan242 comparesig -Inf -Inf -> #22080000000000000000000000000000 -dqcan243 comparesig 1 -Inf -> #22080000000000000000000000000001 -dqcan244 comparesig #7c400ff3ffff3fcff3fcff3fcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan245 comparesig #7e050ff3fcfffffff3fcff3fcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation - ------ Copy: [does not usually canonicalize] --- finites -dqcan250 copy #6e080ff3fcff3fcfffffff3fcfffffff -> #6e080ff3fcff3fcfffffff3fcfffffff -dqcan251 copy #ee080ff3fcff3ffff3fcff3ffff3fcff -> #ee080ff3fcff3ffff3fcff3ffff3fcff --- NaNs -dqcan252 copy #7c000ff3fcffffffffffffffcff3fcff -> #7c000ff3fcffffffffffffffcff3fcff -dqcan253 copy #7c080ff3fcff3fcff3fcff3fcff3fcff -> #7c080ff3fcff3fcff3fcff3fcff3fcff --- sNaN -dqcan254 copy #7e003ff3fcffffffffffffffcff3fcff -> #7e003ff3fcffffffffffffffcff3fcff -dqcan255 copy #7e100ff3fcff3fcff3fcff3fcff3fcff -> #7e100ff3fcff3fcff3fcff3fcff3fcff --- Inf -dqcan258 copy #78002000000000000000000000000000 -> #78002000000000000000000000000000 -dqcan259 copy #78000000000010000000000000100000 -> #78000000000010000000000000100000 - ------ CopyAbs: [does not usually canonicalize] --- finites -dqcan260 copyabs #6e080ff3fcff3fcfffffff3fcfffffff -> #6e080ff3fcff3fcfffffff3fcfffffff -dqcan261 copyabs #ee080ff3fcff3ffff3fcff3ffff3fcff -> #6e080ff3fcff3ffff3fcff3ffff3fcff --- NaNs -dqcan262 copyabs #fc000ff3fcffffffffffffffcff3fcff -> #7c000ff3fcffffffffffffffcff3fcff -dqcan263 copyabs #fc080ff3fcff3fcff3fcff3fcff3fcff -> #7c080ff3fcff3fcff3fcff3fcff3fcff --- sNaN -dqcan264 copyabs #fe003ff3fcffffffffffffffcff3fcff -> #7e003ff3fcffffffffffffffcff3fcff -dqcan265 copyabs #fe100ff3fcff3fcff3fcff3fcff3fcff -> #7e100ff3fcff3fcff3fcff3fcff3fcff --- Inf -dqcan268 copyabs #f8002000000000000000000000000000 -> #78002000000000000000000000000000 -dqcan269 copyabs #f8000000000000700700700000000000 -> #78000000000000700700700000000000 - ------ CopyNegate: [does not usually canonicalize] --- finites -dqcan270 copynegate #6e080ff3fcff3fcfffffff3fcfffffff -> #ee080ff3fcff3fcfffffff3fcfffffff -dqcan271 copynegate #ee080ff3fcff3ffff3fcff3ffff3fcff -> #6e080ff3fcff3ffff3fcff3ffff3fcff --- NaNs -dqcan272 copynegate #7c000ff3fcffffffffffff3fcff3fcff -> #fc000ff3fcffffffffffff3fcff3fcff -dqcan273 copynegate #7c080ff3fcff3fcff3fcff3fcff3fcff -> #fc080ff3fcff3fcff3fcff3fcff3fcff --- sNaN -dqcan274 copynegate #7e003ff3fcffffffffffffffcff3fcff -> #fe003ff3fcffffffffffffffcff3fcff -dqcan275 copynegate #7e100ff3fcff3fcff3fcff3fcff3fcff -> #fe100ff3fcff3fcff3fcff3fcff3fcff --- Inf -dqcan278 copynegate #78002000000000000000000000000000 -> #f8002000000000000000000000000000 -dqcan279 copynegate #78000000000010000000000000100000 -> #f8000000000010000000000000100000 - ------ CopySign: [does not usually canonicalize] --- finites -dqcan280 copysign #6e080ff3fcff3fcfffffff3fcfffffff -1 -> #ee080ff3fcff3fcfffffff3fcfffffff -dqcan281 copysign #ee080ff3fcff3ffff3fcff3ffff3fcff 1 -> #6e080ff3fcff3ffff3fcff3ffff3fcff --- NaNs -dqcan282 copysign #7c000ff3fcffffffffffffffcff3fcff -1 -> #fc000ff3fcffffffffffffffcff3fcff -dqcan283 copysign #7c080ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c080ff3fcff3fcff3fcff3fcff3fcff --- sNaN -dqcan284 copysign #7e003ff3fcffffffffffffffcff3fcff -1 -> #fe003ff3fcffffffffffffffcff3fcff -dqcan285 copysign #7e100ff3fcff3fcff3fcff3fcff3fcff 1 -> #7e100ff3fcff3fcff3fcff3fcff3fcff --- Inf -dqcan288 copysign #78002000000000000000000000000000 -1 -> #f8002000000000000000000000000000 -dqcan289 copysign #78000000000010000000000000100000 1 -> #78000000000010000000000000100000 - ------ Multiply: --- Finites: neutral 0 -dqcan302 multiply 1 #77ffff3fcff3fcff0000000000000000 -> #77ffff3fcff3fcff0000000000000000 -dqcan303 multiply #77fcffffcff3fcff0000000000000000 1 -> #77fccfffcff3fcff0000000000000000 --- negative -dqcan306 multiply -1 #77ffff3fcff3fcff0000000000000000 -> #f7ffff3fcff3fcff0000000000000000 -dqcan307 multiply #77fcffffcff3fcff0000000000000000 -1 -> #f7fccfffcff3fcff0000000000000000 --- NaN: declets in payload -dqcan311 multiply 1 #7c03ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 -dqcan312 multiply #7c03ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 --- NaN: exponent continuation bits [excluding sNaN selector] -dqcan313 multiply 1 #7c40ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 -dqcan314 multiply #7c40ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 --- sNaN: declets in payload -dqcan315 multiply 1 #7e00ffffcff3fcff0000000000000000 -> #7c000fffcff3fcff0000000000000000 Invalid_operation -dqcan316 multiply #7e00ffffcff3fcff0000000000000000 1 -> #7c000fffcff3fcff0000000000000000 Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -dqcan317 multiply 1 #7e80ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 Invalid_operation -dqcan318 multiply #7e80ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 Invalid_operation --- Inf: exponent continuation bits -dqcan320 multiply 1 #78800000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan321 multiply #78800000000000000000000000000000 1 -> #78000000000000000000000000000000 --- Inf: coefficient continuation bits -dqcan322 multiply 1 #78020000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan323 multiply #78020000000000000000000000000000 1 -> #78000000000000000000000000000000 -dqcan324 multiply 1 #78000000000000010000000000000000 -> #78000000000000000000000000000000 -dqcan325 multiply #78000000000000010000000000000000 1 -> #78000000000000000000000000000000 -dqcan326 multiply 1 #78000020000000000000000000000000 -> #78000000000000000000000000000000 -dqcan327 multiply #78000020000000000000000000000000 1 -> #78000000000000000000000000000000 - ------ Quantize: -dqcan401 quantize #ee080ff3fcff3fcff3fffffffff3fcff 0 -> #ee080ff3fcff3fcff3fcff3fcff3fcff -dqcan402 quantize #ee080ff3fffffffffffcff3fcff3fcff 0 -> #ee080ff3fcff3fcff3fcff3fcff3fcff -dqcan403 quantize #78800000000000000000000000000000 Inf -> #78000000000000000000000000000000 -dqcan404 quantize #78020000000000000000000000000000 -Inf -> #78000000000000000000000000000000 -dqcan410 quantize #7c080ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan411 quantize #fc000ff3fcfffffff3fcff3fcff3fcff 1 -> #fc000ff3fcff3fcff3fcff3fcff3fcff -dqcan412 quantize #7e100ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan413 quantize #fe000ff3fcff3fcff3ffffffcff3fcff 1 -> #fc000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation - ------ Subtract: --- Finites: neutral 0 -dqcan502 subtract 0E+6144 #77ffcff3fcff3fcffffcff3fcff3fcff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff -dqcan503 subtract #77ffcff3fcff3fcff3fcff3ffff3fcff 0E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff --- tiny zero -dqcan504 subtract 0E-6176 #77ffcff3ffff3fcff3fcff3fcff3fcff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff Rounded -dqcan505 subtract #77ffcff3fcff3fcff3fcff3fcff3ffff 0E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded --- tiny non zero -dqcan506 subtract -1E-6176 #77ffcff3fcff3fcff3fcff3fcfffffff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded -dqcan507 subtract #77ffcffffffffffffffffffffff3fcff -1E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded --- NaN: declets in payload -dqcan511 subtract 0 #7c000ff3fcff3fcff3fcfffffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan512 subtract #7c000ff3fcff3fcfffffff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- NaN: exponent continuation bits [excluding sNaN selector] -dqcan513 subtract 0 #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan514 subtract #7c020ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff --- sNaN: declets in payload -dqcan515 subtract 0 #7e000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan516 subtract #7e003ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- sNaN: exponent continuation bits [excluding sNaN selector] -dqcan517 subtract 0 #7e500ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan518 subtract #7e0e0ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- Inf: exponent continuation bits -dqcan520 subtract 0 #78010000000000000000000000000000 -> #f8000000000000000000000000000000 -dqcan521 subtract #78680000000000000000000000000000 0 -> #78000000000000000000000000000000 --- Inf: coefficient continuation bits -dqcan522 subtract 0 #78002000000000000000000000000000 -> #f8000000000000000000000000000000 -dqcan523 subtract #78000000000000000000000000000001 0 -> #78000000000000000000000000000000 -dqcan524 subtract 0 #78000002000000000000000000000000 -> #f8000000000000000000000000000000 -dqcan525 subtract #780000000000f0000000000000000000 0 -> #78000000000000000000000000000000 -dqcan526 subtract 0 #78000000000000000005000000000000 -> #f8000000000000000000000000000000 -dqcan527 subtract #780000000000000000000000000a0000 0 -> #78000000000000000000000000000000 - ------ ToIntegral: -dqcan601 tointegralx #6e080ff3fdff3fcff3fcff3fcff3fcff -> #6e080ff3fcff3fcff3fcff3fcff3fcff -dqcan602 tointegralx #ee080ff3fcff3ffff3fcff3fcff3fcff -> #ee080ff3fcff3fcff3fcff3fcff3fcff -dqcan603 tointegralx #78800000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan604 tointegralx #78020000000000000000000000000000 -> #78000000000000000000000000000000 -dqcan614 tointegralx #7c100ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff -dqcan615 tointegralx #fc000ff3fcff3fcff3fcffffcff3fcff -> #fc000ff3fcff3fcff3fcff3fcff3fcff -dqcan616 tointegralx #7e010ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation -dqcan617 tointegralx #fe000ff3fcff3fcff3fdff3fcff3fcff -> #fc000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation --- uncanonical 3999, 39.99, 3.99, 0.399, and negatives -dqcan618 tointegralx #22080000000000000000000000000fff -> #22080000000000000000000000000cff -dqcan619 tointegralx #22078000000000000000000000000fff -> #22080000000000000000000000000040 Inexact Rounded -dqcan620 tointegralx #22074000000000000000000000000fff -> #22080000000000000000000000000004 Inexact Rounded -dqcan621 tointegralx #22070000000000000000000000000fff -> #22080000000000000000000000000000 Inexact Rounded -dqcan622 tointegralx #a2080000000000000000000000000fff -> #a2080000000000000000000000000cff -dqcan623 tointegralx #a2078000000000000000000000000fff -> #a2080000000000000000000000000040 Inexact Rounded -dqcan624 tointegralx #a2074000000000000000000000000fff -> #a2080000000000000000000000000004 Inexact Rounded -dqcan625 tointegralx #a2070000000000000000000000000fff -> #a2080000000000000000000000000000 Inexact Rounded - - - +------------------------------------------------------------------------ +-- dqCanonical.decTest -- test decQuad canonical results -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests that copy operations leave uncanonical operands +-- unchanged, and vice versa + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Uncanonical declets are: abc, where: +-- a=1,2,3 +-- b=6,7,e,f +-- c=e,f + +-- assert some standard (canonical) values; this tests that FromString +-- produces canonical results (many more in decimalNN) +dqcan001 apply 9.999999999999999999999999999999999E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan002 apply 0 -> #22080000000000000000000000000000 +dqcan003 apply 1 -> #22080000000000000000000000000001 +dqcan004 apply -1 -> #a2080000000000000000000000000001 +dqcan005 apply Infinity -> #78000000000000000000000000000000 +dqcan006 apply -Infinity -> #f8000000000000000000000000000000 +dqcan007 apply -NaN -> #fc000000000000000000000000000000 +dqcan008 apply -sNaN -> #fe000000000000000000000000000000 +dqcan009 apply NaN999999999999999999999999999999999 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan010 apply sNaN999999999999999999999999999999999 -> #7e000ff3fcff3fcff3fcff3fcff3fcff +decan011 apply 9999999999999999999999999999999999 -> #6e080ff3fcff3fcff3fcff3fcff3fcff +dqcan012 apply 7.50 -> #220780000000000000000000000003d0 +dqcan013 apply 9.99 -> #220780000000000000000000000000ff + +-- Base tests for canonical encodings (individual operator +-- propagation is tested later) + +-- Finites: declets in coefficient +dqcan021 canonical #77ffcff3fcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan022 canonical #77fffff3fcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan023 canonical #77ffcffffcff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan024 canonical #77ffcff3ffff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan025 canonical #77ffcff3fcffffcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan026 canonical #77ffcff3fcff3ffff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan027 canonical #77ffcff3fcff3fcffffcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan028 canonical #77ffcff3fcff3fcff3ffff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan029 canonical #77ffcff3fcff3fcff3fcffffcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan030 canonical #77ffcff3fcff3fcff3fcff3ffff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan031 canonical #77ffcff3fcff3fcff3fcff3fcffffcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan032 canonical #77ffcff3fcff3fcff3fcff3fcff3ffff -> #77ffcff3fcff3fcff3fcff3fcff3fcff + +-- NaN: declets in payload +dqcan061 canonical #7c000ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan062 canonical #7c000ffffcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan063 canonical #7c000ff3ffff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan064 canonical #7c000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan065 canonical #7c000ff3fcff3ffff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan066 canonical #7c000ff3fcff3fcffffcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan067 canonical #7c000ff3fcff3fcff3ffff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan068 canonical #7c000ff3fcff3fcff3fcffffcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan069 canonical #7c000ff3fcff3fcff3fcff3ffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan070 canonical #7c000ff3fcff3fcff3fcff3fcffffcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan071 canonical #7c000ff3fcff3fcff3fcff3fcff3ffff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +dqcan081 canonical #7d000ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan082 canonical #7c800ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan083 canonical #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan084 canonical #7c200ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan085 canonical #7c100ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan086 canonical #7c080ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan087 canonical #7c040ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan088 canonical #7c020ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan089 canonical #7c010ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan090 canonical #7c008ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan091 canonical #7c004ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff + +-- sNaN: declets in payload +dqcan101 canonical #7e000ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan102 canonical #7e000ffffcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan103 canonical #7e000ff3ffff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan104 canonical #7e000ff3fcffffcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan105 canonical #7e000ff3fcff3ffff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan106 canonical #7e000ff3fcff3fcffffcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan107 canonical #7e000ff3fcff3fcff3ffff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan108 canonical #7e000ff3fcff3fcff3fcffffcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan109 canonical #7e000ff3fcff3fcff3fcff3ffff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan100 canonical #7e000ff3fcff3fcff3fcff3fcffffcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan111 canonical #7e000ff3fcff3fcff3fcff3fcff3ffff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +-- sNaN: exponent continuation bits [excluding sNaN selector] +dqcan121 canonical #7f000ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan122 canonical #7e800ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan123 canonical #7e400ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan124 canonical #7e200ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan125 canonical #7e100ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan126 canonical #7e080ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan127 canonical #7e040ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan128 canonical #7e020ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan129 canonical #7e010ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan130 canonical #7e008ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff +dqcan131 canonical #7e004ff3fcff3fcff3fcff3fcff3fcff -> #7e000ff3fcff3fcff3fcff3fcff3fcff + +-- Inf: exponent continuation bits +dqcan137 canonical #78000000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan138 canonical #79000000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan139 canonical #7a000000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan140 canonical #78800000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan141 canonical #78400000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan142 canonical #78200000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan143 canonical #78100000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan144 canonical #78080000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan145 canonical #78040000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan146 canonical #78020000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan147 canonical #78010000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan148 canonical #78008000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan149 canonical #78004000000000000000000000000000 -> #78000000000000000000000000000000 + +-- Inf: coefficient continuation bits (first, last, and a few others) +dqcan150 canonical #78000000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan151 canonical #78020000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan152 canonical #78000000000000000000000000000001 -> #78000000000000000000000000000000 +dqcan153 canonical #78010000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan154 canonical #78002000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan155 canonical #78000800000000000000000000000000 -> #78000000000000000000000000000000 +dqcan156 canonical #78000020000000000000000000000000 -> #78000000000000000000000000000000 +dqcan157 canonical #78000004000000000000000000000000 -> #78000000000000000000000000000000 +dqcan158 canonical #78000000400000000000000000000000 -> #78000000000000000000000000000000 +dqcan159 canonical #78000000080000000000000000000000 -> #78000000000000000000000000000000 +dqcan160 canonical #78000000004000000000000000000000 -> #78000000000000000000000000000000 +dqcan161 canonical #78000000000200000000000000000000 -> #78000000000000000000000000000000 +dqcan162 canonical #78000000000080000000000000000000 -> #78000000000000000000000000000000 +dqcan163 canonical #78000000000002000000000000000000 -> #78000000000000000000000000000000 +dqcan164 canonical #78000000000000400000000000000000 -> #78000000000000000000000000000000 +dqcan165 canonical #78000000000000080000000000000000 -> #78000000000000000000000000000000 +dqcan166 canonical #78000000000000001000000000000000 -> #78000000000000000000000000000000 +dqcan167 canonical #78000000000000000200000000000000 -> #78000000000000000000000000000000 +dqcan168 canonical #78000000000000000080000000000000 -> #78000000000000000000000000000000 +dqcan169 canonical #78000000000000000004000000000000 -> #78000000000000000000000000000000 +dqcan170 canonical #78000000000000000000400000000000 -> #78000000000000000000000000000000 +dqcan171 canonical #78000000000000000000010000000000 -> #78000000000000000000000000000000 +dqcan172 canonical #78000000000000000000002000000000 -> #78000000000000000000000000000000 +dqcan173 canonical #78000000000000000000000400000000 -> #78000000000000000000000000000000 +dqcan174 canonical #78000000000000000000000080000000 -> #78000000000000000000000000000000 +dqcan175 canonical #78000000000000000000000002000000 -> #78000000000000000000000000000000 +dqcan176 canonical #78000000000000000000000000400000 -> #78000000000000000000000000000000 +dqcan177 canonical #78000000000000000000000000020000 -> #78000000000000000000000000000000 +dqcan178 canonical #78000000000000000000000000001000 -> #78000000000000000000000000000000 +dqcan179 canonical #78000000000000000000000000000400 -> #78000000000000000000000000000000 +dqcan180 canonical #78000000000000000000000000000020 -> #78000000000000000000000000000000 +dqcan181 canonical #78000000000000000000000000000008 -> #78000000000000000000000000000000 + + +-- Now the operators -- trying to check paths that might fail to +-- canonicalize propagated operands + +----- Add: +-- Finites: neutral 0 +dqcan202 add 0E+6144 #77ffcff3fcff3fcffffcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff +dqcan203 add #77ffcff3fcff3fcff3fcff3ffff3fcff 0E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff +-- tiny zero +dqcan204 add 0E-6176 #77ffcff3ffff3fcff3fcff3fcff3fcff -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded +dqcan205 add #77ffcff3fcff3fcff3fcff3fcff3ffff 0E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded +-- tiny non zero +dqcan206 add -1E-6176 #77ffcff3fcff3fcff3fcff3fcfffffff -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded +dqcan207 add #77ffcffffffffffffffffffffff3fcff -1E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded +-- NaN: declets in payload +dqcan211 add 0 #7c000ff3fcff3fcff3fcfffffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan212 add #7c000ff3fcff3fcfffffff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +dqcan213 add 0 #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan214 add #7c020ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- sNaN: declets in payload +dqcan215 add 0 #7e000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan216 add #7e003ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +dqcan217 add 0 #7e500ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan218 add #7e0e0ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +dqcan220 add 0 #78010000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan221 add #78680000000000000000000000000000 0 -> #78000000000000000000000000000000 +-- Inf: coefficient continuation bits +dqcan222 add 0 #78002000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan223 add #78000000000000000000000000000001 0 -> #78000000000000000000000000000000 +dqcan224 add 0 #78000002000000000000000000000000 -> #78000000000000000000000000000000 +dqcan225 add #780000000000f0000000000000000000 0 -> #78000000000000000000000000000000 +dqcan226 add 0 #78000000000000000005000000000000 -> #78000000000000000000000000000000 +dqcan227 add #780000000000000000000000000a0000 0 -> #78000000000000000000000000000000 + +----- Class: [does not return encoded] + +----- Compare: +dqcan231 compare -Inf 1 -> #a2080000000000000000000000000001 +dqcan232 compare -Inf -Inf -> #22080000000000000000000000000000 +dqcan233 compare 1 -Inf -> #22080000000000000000000000000001 +dqcan234 compare #7c010ff3fcff3fcff3fcff3ffffffcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan235 compare #7e004ff3fcff3fcff3ffffffcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation + +----- CompareSig: +dqcan241 comparesig -Inf 1 -> #a2080000000000000000000000000001 +dqcan242 comparesig -Inf -Inf -> #22080000000000000000000000000000 +dqcan243 comparesig 1 -Inf -> #22080000000000000000000000000001 +dqcan244 comparesig #7c400ff3ffff3fcff3fcff3fcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan245 comparesig #7e050ff3fcfffffff3fcff3fcff3fcff -1000 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation + +----- Copy: [does not usually canonicalize] +-- finites +dqcan250 copy #6e080ff3fcff3fcfffffff3fcfffffff -> #6e080ff3fcff3fcfffffff3fcfffffff +dqcan251 copy #ee080ff3fcff3ffff3fcff3ffff3fcff -> #ee080ff3fcff3ffff3fcff3ffff3fcff +-- NaNs +dqcan252 copy #7c000ff3fcffffffffffffffcff3fcff -> #7c000ff3fcffffffffffffffcff3fcff +dqcan253 copy #7c080ff3fcff3fcff3fcff3fcff3fcff -> #7c080ff3fcff3fcff3fcff3fcff3fcff +-- sNaN +dqcan254 copy #7e003ff3fcffffffffffffffcff3fcff -> #7e003ff3fcffffffffffffffcff3fcff +dqcan255 copy #7e100ff3fcff3fcff3fcff3fcff3fcff -> #7e100ff3fcff3fcff3fcff3fcff3fcff +-- Inf +dqcan258 copy #78002000000000000000000000000000 -> #78002000000000000000000000000000 +dqcan259 copy #78000000000010000000000000100000 -> #78000000000010000000000000100000 + +----- CopyAbs: [does not usually canonicalize] +-- finites +dqcan260 copyabs #6e080ff3fcff3fcfffffff3fcfffffff -> #6e080ff3fcff3fcfffffff3fcfffffff +dqcan261 copyabs #ee080ff3fcff3ffff3fcff3ffff3fcff -> #6e080ff3fcff3ffff3fcff3ffff3fcff +-- NaNs +dqcan262 copyabs #fc000ff3fcffffffffffffffcff3fcff -> #7c000ff3fcffffffffffffffcff3fcff +dqcan263 copyabs #fc080ff3fcff3fcff3fcff3fcff3fcff -> #7c080ff3fcff3fcff3fcff3fcff3fcff +-- sNaN +dqcan264 copyabs #fe003ff3fcffffffffffffffcff3fcff -> #7e003ff3fcffffffffffffffcff3fcff +dqcan265 copyabs #fe100ff3fcff3fcff3fcff3fcff3fcff -> #7e100ff3fcff3fcff3fcff3fcff3fcff +-- Inf +dqcan268 copyabs #f8002000000000000000000000000000 -> #78002000000000000000000000000000 +dqcan269 copyabs #f8000000000000700700700000000000 -> #78000000000000700700700000000000 + +----- CopyNegate: [does not usually canonicalize] +-- finites +dqcan270 copynegate #6e080ff3fcff3fcfffffff3fcfffffff -> #ee080ff3fcff3fcfffffff3fcfffffff +dqcan271 copynegate #ee080ff3fcff3ffff3fcff3ffff3fcff -> #6e080ff3fcff3ffff3fcff3ffff3fcff +-- NaNs +dqcan272 copynegate #7c000ff3fcffffffffffff3fcff3fcff -> #fc000ff3fcffffffffffff3fcff3fcff +dqcan273 copynegate #7c080ff3fcff3fcff3fcff3fcff3fcff -> #fc080ff3fcff3fcff3fcff3fcff3fcff +-- sNaN +dqcan274 copynegate #7e003ff3fcffffffffffffffcff3fcff -> #fe003ff3fcffffffffffffffcff3fcff +dqcan275 copynegate #7e100ff3fcff3fcff3fcff3fcff3fcff -> #fe100ff3fcff3fcff3fcff3fcff3fcff +-- Inf +dqcan278 copynegate #78002000000000000000000000000000 -> #f8002000000000000000000000000000 +dqcan279 copynegate #78000000000010000000000000100000 -> #f8000000000010000000000000100000 + +----- CopySign: [does not usually canonicalize] +-- finites +dqcan280 copysign #6e080ff3fcff3fcfffffff3fcfffffff -1 -> #ee080ff3fcff3fcfffffff3fcfffffff +dqcan281 copysign #ee080ff3fcff3ffff3fcff3ffff3fcff 1 -> #6e080ff3fcff3ffff3fcff3ffff3fcff +-- NaNs +dqcan282 copysign #7c000ff3fcffffffffffffffcff3fcff -1 -> #fc000ff3fcffffffffffffffcff3fcff +dqcan283 copysign #7c080ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c080ff3fcff3fcff3fcff3fcff3fcff +-- sNaN +dqcan284 copysign #7e003ff3fcffffffffffffffcff3fcff -1 -> #fe003ff3fcffffffffffffffcff3fcff +dqcan285 copysign #7e100ff3fcff3fcff3fcff3fcff3fcff 1 -> #7e100ff3fcff3fcff3fcff3fcff3fcff +-- Inf +dqcan288 copysign #78002000000000000000000000000000 -1 -> #f8002000000000000000000000000000 +dqcan289 copysign #78000000000010000000000000100000 1 -> #78000000000010000000000000100000 + +----- Multiply: +-- Finites: neutral 0 +dqcan302 multiply 1 #77ffff3fcff3fcff0000000000000000 -> #77ffff3fcff3fcff0000000000000000 +dqcan303 multiply #77fcffffcff3fcff0000000000000000 1 -> #77fccfffcff3fcff0000000000000000 +-- negative +dqcan306 multiply -1 #77ffff3fcff3fcff0000000000000000 -> #f7ffff3fcff3fcff0000000000000000 +dqcan307 multiply #77fcffffcff3fcff0000000000000000 -1 -> #f7fccfffcff3fcff0000000000000000 +-- NaN: declets in payload +dqcan311 multiply 1 #7c03ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 +dqcan312 multiply #7c03ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 +-- NaN: exponent continuation bits [excluding sNaN selector] +dqcan313 multiply 1 #7c40ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 +dqcan314 multiply #7c40ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 +-- sNaN: declets in payload +dqcan315 multiply 1 #7e00ffffcff3fcff0000000000000000 -> #7c000fffcff3fcff0000000000000000 Invalid_operation +dqcan316 multiply #7e00ffffcff3fcff0000000000000000 1 -> #7c000fffcff3fcff0000000000000000 Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +dqcan317 multiply 1 #7e80ff3fcff3fcff0000000000000000 -> #7c003f3fcff3fcff0000000000000000 Invalid_operation +dqcan318 multiply #7e80ff3fcff3fcff0000000000000000 1 -> #7c003f3fcff3fcff0000000000000000 Invalid_operation +-- Inf: exponent continuation bits +dqcan320 multiply 1 #78800000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan321 multiply #78800000000000000000000000000000 1 -> #78000000000000000000000000000000 +-- Inf: coefficient continuation bits +dqcan322 multiply 1 #78020000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan323 multiply #78020000000000000000000000000000 1 -> #78000000000000000000000000000000 +dqcan324 multiply 1 #78000000000000010000000000000000 -> #78000000000000000000000000000000 +dqcan325 multiply #78000000000000010000000000000000 1 -> #78000000000000000000000000000000 +dqcan326 multiply 1 #78000020000000000000000000000000 -> #78000000000000000000000000000000 +dqcan327 multiply #78000020000000000000000000000000 1 -> #78000000000000000000000000000000 + +----- Quantize: +dqcan401 quantize #ee080ff3fcff3fcff3fffffffff3fcff 0 -> #ee080ff3fcff3fcff3fcff3fcff3fcff +dqcan402 quantize #ee080ff3fffffffffffcff3fcff3fcff 0 -> #ee080ff3fcff3fcff3fcff3fcff3fcff +dqcan403 quantize #78800000000000000000000000000000 Inf -> #78000000000000000000000000000000 +dqcan404 quantize #78020000000000000000000000000000 -Inf -> #78000000000000000000000000000000 +dqcan410 quantize #7c080ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan411 quantize #fc000ff3fcfffffff3fcff3fcff3fcff 1 -> #fc000ff3fcff3fcff3fcff3fcff3fcff +dqcan412 quantize #7e100ff3fcff3fcff3fcff3fcff3fcff 1 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan413 quantize #fe000ff3fcff3fcff3ffffffcff3fcff 1 -> #fc000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation + +----- Subtract: +-- Finites: neutral 0 +dqcan502 subtract 0E+6144 #77ffcff3fcff3fcffffcff3fcff3fcff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff +dqcan503 subtract #77ffcff3fcff3fcff3fcff3ffff3fcff 0E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff +-- tiny zero +dqcan504 subtract 0E-6176 #77ffcff3ffff3fcff3fcff3fcff3fcff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff Rounded +dqcan505 subtract #77ffcff3fcff3fcff3fcff3fcff3ffff 0E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Rounded +-- tiny non zero +dqcan506 subtract -1E-6176 #77ffcff3fcff3fcff3fcff3fcfffffff -> #f7ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded +dqcan507 subtract #77ffcffffffffffffffffffffff3fcff -1E-6176 -> #77ffcff3fcff3fcff3fcff3fcff3fcff Inexact Rounded +-- NaN: declets in payload +dqcan511 subtract 0 #7c000ff3fcff3fcff3fcfffffff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan512 subtract #7c000ff3fcff3fcfffffff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- NaN: exponent continuation bits [excluding sNaN selector] +dqcan513 subtract 0 #7c400ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan514 subtract #7c020ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +-- sNaN: declets in payload +dqcan515 subtract 0 #7e000ff3fcffffcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan516 subtract #7e003ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- sNaN: exponent continuation bits [excluding sNaN selector] +dqcan517 subtract 0 #7e500ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan518 subtract #7e0e0ff3fcff3fcff3fcff3fcff3fcff 0 -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- Inf: exponent continuation bits +dqcan520 subtract 0 #78010000000000000000000000000000 -> #f8000000000000000000000000000000 +dqcan521 subtract #78680000000000000000000000000000 0 -> #78000000000000000000000000000000 +-- Inf: coefficient continuation bits +dqcan522 subtract 0 #78002000000000000000000000000000 -> #f8000000000000000000000000000000 +dqcan523 subtract #78000000000000000000000000000001 0 -> #78000000000000000000000000000000 +dqcan524 subtract 0 #78000002000000000000000000000000 -> #f8000000000000000000000000000000 +dqcan525 subtract #780000000000f0000000000000000000 0 -> #78000000000000000000000000000000 +dqcan526 subtract 0 #78000000000000000005000000000000 -> #f8000000000000000000000000000000 +dqcan527 subtract #780000000000000000000000000a0000 0 -> #78000000000000000000000000000000 + +----- ToIntegral: +dqcan601 tointegralx #6e080ff3fdff3fcff3fcff3fcff3fcff -> #6e080ff3fcff3fcff3fcff3fcff3fcff +dqcan602 tointegralx #ee080ff3fcff3ffff3fcff3fcff3fcff -> #ee080ff3fcff3fcff3fcff3fcff3fcff +dqcan603 tointegralx #78800000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan604 tointegralx #78020000000000000000000000000000 -> #78000000000000000000000000000000 +dqcan614 tointegralx #7c100ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff +dqcan615 tointegralx #fc000ff3fcff3fcff3fcffffcff3fcff -> #fc000ff3fcff3fcff3fcff3fcff3fcff +dqcan616 tointegralx #7e010ff3fcff3fcff3fcff3fcff3fcff -> #7c000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +dqcan617 tointegralx #fe000ff3fcff3fcff3fdff3fcff3fcff -> #fc000ff3fcff3fcff3fcff3fcff3fcff Invalid_operation +-- uncanonical 3999, 39.99, 3.99, 0.399, and negatives +dqcan618 tointegralx #22080000000000000000000000000fff -> #22080000000000000000000000000cff +dqcan619 tointegralx #22078000000000000000000000000fff -> #22080000000000000000000000000040 Inexact Rounded +dqcan620 tointegralx #22074000000000000000000000000fff -> #22080000000000000000000000000004 Inexact Rounded +dqcan621 tointegralx #22070000000000000000000000000fff -> #22080000000000000000000000000000 Inexact Rounded +dqcan622 tointegralx #a2080000000000000000000000000fff -> #a2080000000000000000000000000cff +dqcan623 tointegralx #a2078000000000000000000000000fff -> #a2080000000000000000000000000040 Inexact Rounded +dqcan624 tointegralx #a2074000000000000000000000000fff -> #a2080000000000000000000000000004 Inexact Rounded +dqcan625 tointegralx #a2070000000000000000000000000fff -> #a2080000000000000000000000000000 Inexact Rounded + + + diff --git a/Lib/test/decimaltestdata/dqClass.decTest b/Lib/test/decimaltestdata/dqClass.decTest index d7e19b3829a..f341933878e 100644 --- a/Lib/test/decimaltestdata/dqClass.decTest +++ b/Lib/test/decimaltestdata/dqClass.decTest @@ -1,77 +1,77 @@ ------------------------------------------------------------------------- --- dqClass.decTest -- decQuad Class operations -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- [New 2006.11.27] - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqcla001 class 0 -> +Zero -dqcla002 class 0.00 -> +Zero -dqcla003 class 0E+5 -> +Zero -dqcla004 class 1E-6176 -> +Subnormal -dqcla005 class 0.1E-6143 -> +Subnormal -dqcla006 class 0.99999999999999999999999999999999E-6143 -> +Subnormal -dqcla007 class 1.00000000000000000000000000000000E-6143 -> +Normal -dqcla008 class 1E-6143 -> +Normal -dqcla009 class 1E-100 -> +Normal -dqcla010 class 1E-10 -> +Normal -dqcla012 class 1E-1 -> +Normal -dqcla013 class 1 -> +Normal -dqcla014 class 2.50 -> +Normal -dqcla015 class 100.100 -> +Normal -dqcla016 class 1E+30 -> +Normal -dqcla017 class 1E+6144 -> +Normal -dqcla018 class 9.99999999999999999999999999999999E+6144 -> +Normal -dqcla019 class Inf -> +Infinity - -dqcla021 class -0 -> -Zero -dqcla022 class -0.00 -> -Zero -dqcla023 class -0E+5 -> -Zero -dqcla024 class -1E-6176 -> -Subnormal -dqcla025 class -0.1E-6143 -> -Subnormal -dqcla026 class -0.99999999999999999999999999999999E-6143 -> -Subnormal -dqcla027 class -1.00000000000000000000000000000000E-6143 -> -Normal -dqcla028 class -1E-6143 -> -Normal -dqcla029 class -1E-100 -> -Normal -dqcla030 class -1E-10 -> -Normal -dqcla032 class -1E-1 -> -Normal -dqcla033 class -1 -> -Normal -dqcla034 class -2.50 -> -Normal -dqcla035 class -100.100 -> -Normal -dqcla036 class -1E+30 -> -Normal -dqcla037 class -1E+6144 -> -Normal -dqcla0614 class -9.99999999999999999999999999999999E+6144 -> -Normal -dqcla039 class -Inf -> -Infinity - -dqcla041 class NaN -> NaN -dqcla042 class -NaN -> NaN -dqcla043 class +NaN12345 -> NaN -dqcla044 class sNaN -> sNaN -dqcla045 class -sNaN -> sNaN -dqcla046 class +sNaN12345 -> sNaN - - - +------------------------------------------------------------------------ +-- dqClass.decTest -- decQuad Class operations -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- [New 2006.11.27] + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqcla001 class 0 -> +Zero +dqcla002 class 0.00 -> +Zero +dqcla003 class 0E+5 -> +Zero +dqcla004 class 1E-6176 -> +Subnormal +dqcla005 class 0.1E-6143 -> +Subnormal +dqcla006 class 0.99999999999999999999999999999999E-6143 -> +Subnormal +dqcla007 class 1.00000000000000000000000000000000E-6143 -> +Normal +dqcla008 class 1E-6143 -> +Normal +dqcla009 class 1E-100 -> +Normal +dqcla010 class 1E-10 -> +Normal +dqcla012 class 1E-1 -> +Normal +dqcla013 class 1 -> +Normal +dqcla014 class 2.50 -> +Normal +dqcla015 class 100.100 -> +Normal +dqcla016 class 1E+30 -> +Normal +dqcla017 class 1E+6144 -> +Normal +dqcla018 class 9.99999999999999999999999999999999E+6144 -> +Normal +dqcla019 class Inf -> +Infinity + +dqcla021 class -0 -> -Zero +dqcla022 class -0.00 -> -Zero +dqcla023 class -0E+5 -> -Zero +dqcla024 class -1E-6176 -> -Subnormal +dqcla025 class -0.1E-6143 -> -Subnormal +dqcla026 class -0.99999999999999999999999999999999E-6143 -> -Subnormal +dqcla027 class -1.00000000000000000000000000000000E-6143 -> -Normal +dqcla028 class -1E-6143 -> -Normal +dqcla029 class -1E-100 -> -Normal +dqcla030 class -1E-10 -> -Normal +dqcla032 class -1E-1 -> -Normal +dqcla033 class -1 -> -Normal +dqcla034 class -2.50 -> -Normal +dqcla035 class -100.100 -> -Normal +dqcla036 class -1E+30 -> -Normal +dqcla037 class -1E+6144 -> -Normal +dqcla0614 class -9.99999999999999999999999999999999E+6144 -> -Normal +dqcla039 class -Inf -> -Infinity + +dqcla041 class NaN -> NaN +dqcla042 class -NaN -> NaN +dqcla043 class +NaN12345 -> NaN +dqcla044 class sNaN -> sNaN +dqcla045 class -sNaN -> sNaN +dqcla046 class +sNaN12345 -> sNaN + + + diff --git a/Lib/test/decimaltestdata/dqCompare.decTest b/Lib/test/decimaltestdata/dqCompare.decTest index b7b5ee6b8e5..a617ad110a4 100644 --- a/Lib/test/decimaltestdata/dqCompare.decTest +++ b/Lib/test/decimaltestdata/dqCompare.decTest @@ -1,753 +1,753 @@ ------------------------------------------------------------------------- --- dqCompare.decTest -- decQuad comparison that allows quiet NaNs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqcom001 compare -2 -2 -> 0 -dqcom002 compare -2 -1 -> -1 -dqcom003 compare -2 0 -> -1 -dqcom004 compare -2 1 -> -1 -dqcom005 compare -2 2 -> -1 -dqcom006 compare -1 -2 -> 1 -dqcom007 compare -1 -1 -> 0 -dqcom008 compare -1 0 -> -1 -dqcom009 compare -1 1 -> -1 -dqcom010 compare -1 2 -> -1 -dqcom011 compare 0 -2 -> 1 -dqcom012 compare 0 -1 -> 1 -dqcom013 compare 0 0 -> 0 -dqcom014 compare 0 1 -> -1 -dqcom015 compare 0 2 -> -1 -dqcom016 compare 1 -2 -> 1 -dqcom017 compare 1 -1 -> 1 -dqcom018 compare 1 0 -> 1 -dqcom019 compare 1 1 -> 0 -dqcom020 compare 1 2 -> -1 -dqcom021 compare 2 -2 -> 1 -dqcom022 compare 2 -1 -> 1 -dqcom023 compare 2 0 -> 1 -dqcom025 compare 2 1 -> 1 -dqcom026 compare 2 2 -> 0 - -dqcom031 compare -20 -20 -> 0 -dqcom032 compare -20 -10 -> -1 -dqcom033 compare -20 00 -> -1 -dqcom034 compare -20 10 -> -1 -dqcom035 compare -20 20 -> -1 -dqcom036 compare -10 -20 -> 1 -dqcom037 compare -10 -10 -> 0 -dqcom038 compare -10 00 -> -1 -dqcom039 compare -10 10 -> -1 -dqcom040 compare -10 20 -> -1 -dqcom041 compare 00 -20 -> 1 -dqcom042 compare 00 -10 -> 1 -dqcom043 compare 00 00 -> 0 -dqcom044 compare 00 10 -> -1 -dqcom045 compare 00 20 -> -1 -dqcom046 compare 10 -20 -> 1 -dqcom047 compare 10 -10 -> 1 -dqcom048 compare 10 00 -> 1 -dqcom049 compare 10 10 -> 0 -dqcom050 compare 10 20 -> -1 -dqcom051 compare 20 -20 -> 1 -dqcom052 compare 20 -10 -> 1 -dqcom053 compare 20 00 -> 1 -dqcom055 compare 20 10 -> 1 -dqcom056 compare 20 20 -> 0 - -dqcom061 compare -2.0 -2.0 -> 0 -dqcom062 compare -2.0 -1.0 -> -1 -dqcom063 compare -2.0 0.0 -> -1 -dqcom064 compare -2.0 1.0 -> -1 -dqcom065 compare -2.0 2.0 -> -1 -dqcom066 compare -1.0 -2.0 -> 1 -dqcom067 compare -1.0 -1.0 -> 0 -dqcom068 compare -1.0 0.0 -> -1 -dqcom069 compare -1.0 1.0 -> -1 -dqcom070 compare -1.0 2.0 -> -1 -dqcom071 compare 0.0 -2.0 -> 1 -dqcom072 compare 0.0 -1.0 -> 1 -dqcom073 compare 0.0 0.0 -> 0 -dqcom074 compare 0.0 1.0 -> -1 -dqcom075 compare 0.0 2.0 -> -1 -dqcom076 compare 1.0 -2.0 -> 1 -dqcom077 compare 1.0 -1.0 -> 1 -dqcom078 compare 1.0 0.0 -> 1 -dqcom079 compare 1.0 1.0 -> 0 -dqcom080 compare 1.0 2.0 -> -1 -dqcom081 compare 2.0 -2.0 -> 1 -dqcom082 compare 2.0 -1.0 -> 1 -dqcom083 compare 2.0 0.0 -> 1 -dqcom085 compare 2.0 1.0 -> 1 -dqcom086 compare 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -dqcom090 compare 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 0 -dqcom091 compare -9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> -1 -dqcom092 compare 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 1 -dqcom093 compare -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0 - --- some differing length/exponent cases -dqcom100 compare 7.0 7.0 -> 0 -dqcom101 compare 7.0 7 -> 0 -dqcom102 compare 7 7.0 -> 0 -dqcom103 compare 7E+0 7.0 -> 0 -dqcom104 compare 70E-1 7.0 -> 0 -dqcom105 compare 0.7E+1 7 -> 0 -dqcom106 compare 70E-1 7 -> 0 -dqcom107 compare 7.0 7E+0 -> 0 -dqcom108 compare 7.0 70E-1 -> 0 -dqcom109 compare 7 0.7E+1 -> 0 -dqcom110 compare 7 70E-1 -> 0 - -dqcom120 compare 8.0 7.0 -> 1 -dqcom121 compare 8.0 7 -> 1 -dqcom122 compare 8 7.0 -> 1 -dqcom123 compare 8E+0 7.0 -> 1 -dqcom124 compare 80E-1 7.0 -> 1 -dqcom125 compare 0.8E+1 7 -> 1 -dqcom126 compare 80E-1 7 -> 1 -dqcom127 compare 8.0 7E+0 -> 1 -dqcom128 compare 8.0 70E-1 -> 1 -dqcom129 compare 8 0.7E+1 -> 1 -dqcom130 compare 8 70E-1 -> 1 - -dqcom140 compare 8.0 9.0 -> -1 -dqcom141 compare 8.0 9 -> -1 -dqcom142 compare 8 9.0 -> -1 -dqcom143 compare 8E+0 9.0 -> -1 -dqcom144 compare 80E-1 9.0 -> -1 -dqcom145 compare 0.8E+1 9 -> -1 -dqcom146 compare 80E-1 9 -> -1 -dqcom147 compare 8.0 9E+0 -> -1 -dqcom148 compare 8.0 90E-1 -> -1 -dqcom149 compare 8 0.9E+1 -> -1 -dqcom150 compare 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -dqcom200 compare -7.0 7.0 -> -1 -dqcom201 compare -7.0 7 -> -1 -dqcom202 compare -7 7.0 -> -1 -dqcom203 compare -7E+0 7.0 -> -1 -dqcom204 compare -70E-1 7.0 -> -1 -dqcom205 compare -0.7E+1 7 -> -1 -dqcom206 compare -70E-1 7 -> -1 -dqcom207 compare -7.0 7E+0 -> -1 -dqcom208 compare -7.0 70E-1 -> -1 -dqcom209 compare -7 0.7E+1 -> -1 -dqcom210 compare -7 70E-1 -> -1 - -dqcom220 compare -8.0 7.0 -> -1 -dqcom221 compare -8.0 7 -> -1 -dqcom222 compare -8 7.0 -> -1 -dqcom223 compare -8E+0 7.0 -> -1 -dqcom224 compare -80E-1 7.0 -> -1 -dqcom225 compare -0.8E+1 7 -> -1 -dqcom226 compare -80E-1 7 -> -1 -dqcom227 compare -8.0 7E+0 -> -1 -dqcom228 compare -8.0 70E-1 -> -1 -dqcom229 compare -8 0.7E+1 -> -1 -dqcom230 compare -8 70E-1 -> -1 - -dqcom240 compare -8.0 9.0 -> -1 -dqcom241 compare -8.0 9 -> -1 -dqcom242 compare -8 9.0 -> -1 -dqcom243 compare -8E+0 9.0 -> -1 -dqcom244 compare -80E-1 9.0 -> -1 -dqcom245 compare -0.8E+1 9 -> -1 -dqcom246 compare -80E-1 9 -> -1 -dqcom247 compare -8.0 9E+0 -> -1 -dqcom248 compare -8.0 90E-1 -> -1 -dqcom249 compare -8 0.9E+1 -> -1 -dqcom250 compare -8 90E-1 -> -1 - --- and again, with sign changes +- .. -dqcom300 compare 7.0 -7.0 -> 1 -dqcom301 compare 7.0 -7 -> 1 -dqcom302 compare 7 -7.0 -> 1 -dqcom303 compare 7E+0 -7.0 -> 1 -dqcom304 compare 70E-1 -7.0 -> 1 -dqcom305 compare .7E+1 -7 -> 1 -dqcom306 compare 70E-1 -7 -> 1 -dqcom307 compare 7.0 -7E+0 -> 1 -dqcom308 compare 7.0 -70E-1 -> 1 -dqcom309 compare 7 -.7E+1 -> 1 -dqcom310 compare 7 -70E-1 -> 1 - -dqcom320 compare 8.0 -7.0 -> 1 -dqcom321 compare 8.0 -7 -> 1 -dqcom322 compare 8 -7.0 -> 1 -dqcom323 compare 8E+0 -7.0 -> 1 -dqcom324 compare 80E-1 -7.0 -> 1 -dqcom325 compare .8E+1 -7 -> 1 -dqcom326 compare 80E-1 -7 -> 1 -dqcom327 compare 8.0 -7E+0 -> 1 -dqcom328 compare 8.0 -70E-1 -> 1 -dqcom329 compare 8 -.7E+1 -> 1 -dqcom330 compare 8 -70E-1 -> 1 - -dqcom340 compare 8.0 -9.0 -> 1 -dqcom341 compare 8.0 -9 -> 1 -dqcom342 compare 8 -9.0 -> 1 -dqcom343 compare 8E+0 -9.0 -> 1 -dqcom344 compare 80E-1 -9.0 -> 1 -dqcom345 compare .8E+1 -9 -> 1 -dqcom346 compare 80E-1 -9 -> 1 -dqcom347 compare 8.0 -9E+0 -> 1 -dqcom348 compare 8.0 -90E-1 -> 1 -dqcom349 compare 8 -.9E+1 -> 1 -dqcom350 compare 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -dqcom400 compare -7.0 -7.0 -> 0 -dqcom401 compare -7.0 -7 -> 0 -dqcom402 compare -7 -7.0 -> 0 -dqcom403 compare -7E+0 -7.0 -> 0 -dqcom404 compare -70E-1 -7.0 -> 0 -dqcom405 compare -.7E+1 -7 -> 0 -dqcom406 compare -70E-1 -7 -> 0 -dqcom407 compare -7.0 -7E+0 -> 0 -dqcom408 compare -7.0 -70E-1 -> 0 -dqcom409 compare -7 -.7E+1 -> 0 -dqcom410 compare -7 -70E-1 -> 0 - -dqcom420 compare -8.0 -7.0 -> -1 -dqcom421 compare -8.0 -7 -> -1 -dqcom422 compare -8 -7.0 -> -1 -dqcom423 compare -8E+0 -7.0 -> -1 -dqcom424 compare -80E-1 -7.0 -> -1 -dqcom425 compare -.8E+1 -7 -> -1 -dqcom426 compare -80E-1 -7 -> -1 -dqcom427 compare -8.0 -7E+0 -> -1 -dqcom428 compare -8.0 -70E-1 -> -1 -dqcom429 compare -8 -.7E+1 -> -1 -dqcom430 compare -8 -70E-1 -> -1 - -dqcom440 compare -8.0 -9.0 -> 1 -dqcom441 compare -8.0 -9 -> 1 -dqcom442 compare -8 -9.0 -> 1 -dqcom443 compare -8E+0 -9.0 -> 1 -dqcom444 compare -80E-1 -9.0 -> 1 -dqcom445 compare -.8E+1 -9 -> 1 -dqcom446 compare -80E-1 -9 -> 1 -dqcom447 compare -8.0 -9E+0 -> 1 -dqcom448 compare -8.0 -90E-1 -> 1 -dqcom449 compare -8 -.9E+1 -> 1 -dqcom450 compare -8 -90E-1 -> 1 - --- misalignment traps for little-endian -dqcom451 compare 1.0 0.1 -> 1 -dqcom452 compare 0.1 1.0 -> -1 -dqcom453 compare 10.0 0.1 -> 1 -dqcom454 compare 0.1 10.0 -> -1 -dqcom455 compare 100 1.0 -> 1 -dqcom456 compare 1.0 100 -> -1 -dqcom457 compare 1000 10.0 -> 1 -dqcom458 compare 10.0 1000 -> -1 -dqcom459 compare 10000 100.0 -> 1 -dqcom460 compare 100.0 10000 -> -1 -dqcom461 compare 100000 1000.0 -> 1 -dqcom462 compare 1000.0 100000 -> -1 -dqcom463 compare 1000000 10000.0 -> 1 -dqcom464 compare 10000.0 1000000 -> -1 - --- testcases that subtract to lots of zeros at boundaries [pgr] -dqcom473 compare 123.9999999999999999994560000000000E-89 123.999999999999999999456E-89 -> 0 -dqcom474 compare 123.999999999999999999456000000000E+89 123.999999999999999999456E+89 -> 0 -dqcom475 compare 123.99999999999999999945600000000E-89 123.999999999999999999456E-89 -> 0 -dqcom476 compare 123.9999999999999999994560000000E+89 123.999999999999999999456E+89 -> 0 -dqcom477 compare 123.999999999999999999456000000E-89 123.999999999999999999456E-89 -> 0 -dqcom478 compare 123.99999999999999999945600000E+89 123.999999999999999999456E+89 -> 0 -dqcom479 compare 123.9999999999999999994560000E-89 123.999999999999999999456E-89 -> 0 -dqcom480 compare 123.999999999999999999456000E+89 123.999999999999999999456E+89 -> 0 -dqcom481 compare 123.99999999999999999945600E-89 123.999999999999999999456E-89 -> 0 -dqcom482 compare 123.9999999999999999994560E+89 123.999999999999999999456E+89 -> 0 -dqcom483 compare 123.999999999999999999456E-89 123.999999999999999999456E-89 -> 0 -dqcom487 compare 123.999999999999999999456E+89 123.9999999999999999994560000000000E+89 -> 0 -dqcom488 compare 123.999999999999999999456E-89 123.999999999999999999456000000000E-89 -> 0 -dqcom489 compare 123.999999999999999999456E+89 123.99999999999999999945600000000E+89 -> 0 -dqcom490 compare 123.999999999999999999456E-89 123.9999999999999999994560000000E-89 -> 0 -dqcom491 compare 123.999999999999999999456E+89 123.999999999999999999456000000E+89 -> 0 -dqcom492 compare 123.999999999999999999456E-89 123.99999999999999999945600000E-89 -> 0 -dqcom493 compare 123.999999999999999999456E+89 123.9999999999999999994560000E+89 -> 0 -dqcom494 compare 123.999999999999999999456E-89 123.999999999999999999456000E-89 -> 0 -dqcom495 compare 123.999999999999999999456E+89 123.99999999999999999945600E+89 -> 0 -dqcom496 compare 123.999999999999999999456E-89 123.9999999999999999994560E-89 -> 0 -dqcom497 compare 123.999999999999999999456E+89 123.999999999999999999456E+89 -> 0 - --- wide-ranging, around precision; signs equal -dqcom500 compare 1 1E-15 -> 1 -dqcom501 compare 1 1E-14 -> 1 -dqcom502 compare 1 1E-13 -> 1 -dqcom503 compare 1 1E-12 -> 1 -dqcom504 compare 1 1E-11 -> 1 -dqcom505 compare 1 1E-10 -> 1 -dqcom506 compare 1 1E-9 -> 1 -dqcom507 compare 1 1E-8 -> 1 -dqcom508 compare 1 1E-7 -> 1 -dqcom509 compare 1 1E-6 -> 1 -dqcom510 compare 1 1E-5 -> 1 -dqcom511 compare 1 1E-4 -> 1 -dqcom512 compare 1 1E-3 -> 1 -dqcom513 compare 1 1E-2 -> 1 -dqcom514 compare 1 1E-1 -> 1 -dqcom515 compare 1 1E-0 -> 0 -dqcom516 compare 1 1E+1 -> -1 -dqcom517 compare 1 1E+2 -> -1 -dqcom518 compare 1 1E+3 -> -1 -dqcom519 compare 1 1E+4 -> -1 -dqcom521 compare 1 1E+5 -> -1 -dqcom522 compare 1 1E+6 -> -1 -dqcom523 compare 1 1E+7 -> -1 -dqcom524 compare 1 1E+8 -> -1 -dqcom525 compare 1 1E+9 -> -1 -dqcom526 compare 1 1E+10 -> -1 -dqcom527 compare 1 1E+11 -> -1 -dqcom528 compare 1 1E+12 -> -1 -dqcom529 compare 1 1E+13 -> -1 -dqcom530 compare 1 1E+14 -> -1 -dqcom531 compare 1 1E+15 -> -1 --- LR swap -dqcom540 compare 1E-15 1 -> -1 -dqcom541 compare 1E-14 1 -> -1 -dqcom542 compare 1E-13 1 -> -1 -dqcom543 compare 1E-12 1 -> -1 -dqcom544 compare 1E-11 1 -> -1 -dqcom545 compare 1E-10 1 -> -1 -dqcom546 compare 1E-9 1 -> -1 -dqcom547 compare 1E-8 1 -> -1 -dqcom548 compare 1E-7 1 -> -1 -dqcom549 compare 1E-6 1 -> -1 -dqcom550 compare 1E-5 1 -> -1 -dqcom551 compare 1E-4 1 -> -1 -dqcom552 compare 1E-3 1 -> -1 -dqcom553 compare 1E-2 1 -> -1 -dqcom554 compare 1E-1 1 -> -1 -dqcom555 compare 1E-0 1 -> 0 -dqcom556 compare 1E+1 1 -> 1 -dqcom557 compare 1E+2 1 -> 1 -dqcom558 compare 1E+3 1 -> 1 -dqcom559 compare 1E+4 1 -> 1 -dqcom561 compare 1E+5 1 -> 1 -dqcom562 compare 1E+6 1 -> 1 -dqcom563 compare 1E+7 1 -> 1 -dqcom564 compare 1E+8 1 -> 1 -dqcom565 compare 1E+9 1 -> 1 -dqcom566 compare 1E+10 1 -> 1 -dqcom567 compare 1E+11 1 -> 1 -dqcom568 compare 1E+12 1 -> 1 -dqcom569 compare 1E+13 1 -> 1 -dqcom570 compare 1E+14 1 -> 1 -dqcom571 compare 1E+15 1 -> 1 --- similar with a useful coefficient, one side only -dqcom580 compare 0.000000987654321 1E-15 -> 1 -dqcom581 compare 0.000000987654321 1E-14 -> 1 -dqcom582 compare 0.000000987654321 1E-13 -> 1 -dqcom583 compare 0.000000987654321 1E-12 -> 1 -dqcom584 compare 0.000000987654321 1E-11 -> 1 -dqcom585 compare 0.000000987654321 1E-10 -> 1 -dqcom586 compare 0.000000987654321 1E-9 -> 1 -dqcom587 compare 0.000000987654321 1E-8 -> 1 -dqcom588 compare 0.000000987654321 1E-7 -> 1 -dqcom589 compare 0.000000987654321 1E-6 -> -1 -dqcom590 compare 0.000000987654321 1E-5 -> -1 -dqcom591 compare 0.000000987654321 1E-4 -> -1 -dqcom592 compare 0.000000987654321 1E-3 -> -1 -dqcom593 compare 0.000000987654321 1E-2 -> -1 -dqcom594 compare 0.000000987654321 1E-1 -> -1 -dqcom595 compare 0.000000987654321 1E-0 -> -1 -dqcom596 compare 0.000000987654321 1E+1 -> -1 -dqcom597 compare 0.000000987654321 1E+2 -> -1 -dqcom598 compare 0.000000987654321 1E+3 -> -1 -dqcom599 compare 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -dqcom600 compare 12 12.2345 -> -1 -dqcom601 compare 12.0 12.2345 -> -1 -dqcom602 compare 12.00 12.2345 -> -1 -dqcom603 compare 12.000 12.2345 -> -1 -dqcom604 compare 12.0000 12.2345 -> -1 -dqcom605 compare 12.00000 12.2345 -> -1 -dqcom606 compare 12.000000 12.2345 -> -1 -dqcom607 compare 12.0000000 12.2345 -> -1 -dqcom608 compare 12.00000000 12.2345 -> -1 -dqcom609 compare 12.000000000 12.2345 -> -1 -dqcom610 compare 12.1234 12 -> 1 -dqcom611 compare 12.1234 12.0 -> 1 -dqcom612 compare 12.1234 12.00 -> 1 -dqcom613 compare 12.1234 12.000 -> 1 -dqcom614 compare 12.1234 12.0000 -> 1 -dqcom615 compare 12.1234 12.00000 -> 1 -dqcom616 compare 12.1234 12.000000 -> 1 -dqcom617 compare 12.1234 12.0000000 -> 1 -dqcom618 compare 12.1234 12.00000000 -> 1 -dqcom619 compare 12.1234 12.000000000 -> 1 -dqcom620 compare -12 -12.2345 -> 1 -dqcom621 compare -12.0 -12.2345 -> 1 -dqcom622 compare -12.00 -12.2345 -> 1 -dqcom623 compare -12.000 -12.2345 -> 1 -dqcom624 compare -12.0000 -12.2345 -> 1 -dqcom625 compare -12.00000 -12.2345 -> 1 -dqcom626 compare -12.000000 -12.2345 -> 1 -dqcom627 compare -12.0000000 -12.2345 -> 1 -dqcom628 compare -12.00000000 -12.2345 -> 1 -dqcom629 compare -12.000000000 -12.2345 -> 1 -dqcom630 compare -12.1234 -12 -> -1 -dqcom631 compare -12.1234 -12.0 -> -1 -dqcom632 compare -12.1234 -12.00 -> -1 -dqcom633 compare -12.1234 -12.000 -> -1 -dqcom634 compare -12.1234 -12.0000 -> -1 -dqcom635 compare -12.1234 -12.00000 -> -1 -dqcom636 compare -12.1234 -12.000000 -> -1 -dqcom637 compare -12.1234 -12.0000000 -> -1 -dqcom638 compare -12.1234 -12.00000000 -> -1 -dqcom639 compare -12.1234 -12.000000000 -> -1 - --- extended zeros -dqcom640 compare 0 0 -> 0 -dqcom641 compare 0 -0 -> 0 -dqcom642 compare 0 -0.0 -> 0 -dqcom643 compare 0 0.0 -> 0 -dqcom644 compare -0 0 -> 0 -dqcom645 compare -0 -0 -> 0 -dqcom646 compare -0 -0.0 -> 0 -dqcom647 compare -0 0.0 -> 0 -dqcom648 compare 0.0 0 -> 0 -dqcom649 compare 0.0 -0 -> 0 -dqcom650 compare 0.0 -0.0 -> 0 -dqcom651 compare 0.0 0.0 -> 0 -dqcom652 compare -0.0 0 -> 0 -dqcom653 compare -0.0 -0 -> 0 -dqcom654 compare -0.0 -0.0 -> 0 -dqcom655 compare -0.0 0.0 -> 0 - -dqcom656 compare -0E1 0.0 -> 0 -dqcom657 compare -0E2 0.0 -> 0 -dqcom658 compare 0E1 0.0 -> 0 -dqcom659 compare 0E2 0.0 -> 0 -dqcom660 compare -0E1 0 -> 0 -dqcom661 compare -0E2 0 -> 0 -dqcom662 compare 0E1 0 -> 0 -dqcom663 compare 0E2 0 -> 0 -dqcom664 compare -0E1 -0E1 -> 0 -dqcom665 compare -0E2 -0E1 -> 0 -dqcom666 compare 0E1 -0E1 -> 0 -dqcom667 compare 0E2 -0E1 -> 0 -dqcom668 compare -0E1 -0E2 -> 0 -dqcom669 compare -0E2 -0E2 -> 0 -dqcom670 compare 0E1 -0E2 -> 0 -dqcom671 compare 0E2 -0E2 -> 0 -dqcom672 compare -0E1 0E1 -> 0 -dqcom673 compare -0E2 0E1 -> 0 -dqcom674 compare 0E1 0E1 -> 0 -dqcom675 compare 0E2 0E1 -> 0 -dqcom676 compare -0E1 0E2 -> 0 -dqcom677 compare -0E2 0E2 -> 0 -dqcom678 compare 0E1 0E2 -> 0 -dqcom679 compare 0E2 0E2 -> 0 - --- trailing zeros; unit-y -dqcom680 compare 12 12 -> 0 -dqcom681 compare 12 12.0 -> 0 -dqcom682 compare 12 12.00 -> 0 -dqcom683 compare 12 12.000 -> 0 -dqcom684 compare 12 12.0000 -> 0 -dqcom685 compare 12 12.00000 -> 0 -dqcom686 compare 12 12.000000 -> 0 -dqcom687 compare 12 12.0000000 -> 0 -dqcom688 compare 12 12.00000000 -> 0 -dqcom689 compare 12 12.000000000 -> 0 -dqcom690 compare 12 12 -> 0 -dqcom691 compare 12.0 12 -> 0 -dqcom692 compare 12.00 12 -> 0 -dqcom693 compare 12.000 12 -> 0 -dqcom694 compare 12.0000 12 -> 0 -dqcom695 compare 12.00000 12 -> 0 -dqcom696 compare 12.000000 12 -> 0 -dqcom697 compare 12.0000000 12 -> 0 -dqcom698 compare 12.00000000 12 -> 0 -dqcom699 compare 12.000000000 12 -> 0 - --- first, second, & last digit -dqcom700 compare 1234567899999999999999999990123456 1234567899999999999999999990123455 -> 1 -dqcom701 compare 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 -dqcom702 compare 1234567899999999999999999990123456 1234567899999999999999999990123457 -> -1 -dqcom703 compare 1234567899999999999999999990123456 0234567899999999999999999990123456 -> 1 -dqcom704 compare 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 -dqcom705 compare 1234567899999999999999999990123456 2234567899999999999999999990123456 -> -1 -dqcom706 compare 1134567899999999999999999990123456 1034567899999999999999999990123456 -> 1 -dqcom707 compare 1134567899999999999999999990123456 1134567899999999999999999990123456 -> 0 -dqcom708 compare 1134567899999999999999999990123456 1234567899999999999999999990123456 -> -1 - --- miscellaneous -dqcom721 compare 12345678000 1 -> 1 -dqcom722 compare 1 12345678000 -> -1 -dqcom723 compare 1234567800 1 -> 1 -dqcom724 compare 1 1234567800 -> -1 -dqcom725 compare 1234567890 1 -> 1 -dqcom726 compare 1 1234567890 -> -1 -dqcom727 compare 1234567891 1 -> 1 -dqcom728 compare 1 1234567891 -> -1 -dqcom729 compare 12345678901 1 -> 1 -dqcom730 compare 1 12345678901 -> -1 -dqcom731 compare 1234567896 1 -> 1 -dqcom732 compare 1 1234567896 -> -1 - --- residue cases at lower precision -dqcom740 compare 1 0.9999999 -> 1 -dqcom741 compare 1 0.999999 -> 1 -dqcom742 compare 1 0.99999 -> 1 -dqcom743 compare 1 1.0000 -> 0 -dqcom744 compare 1 1.00001 -> -1 -dqcom745 compare 1 1.000001 -> -1 -dqcom746 compare 1 1.0000001 -> -1 -dqcom750 compare 0.9999999 1 -> -1 -dqcom751 compare 0.999999 1 -> -1 -dqcom752 compare 0.99999 1 -> -1 -dqcom753 compare 1.0000 1 -> 0 -dqcom754 compare 1.00001 1 -> 1 -dqcom755 compare 1.000001 1 -> 1 -dqcom756 compare 1.0000001 1 -> 1 - --- Specials -dqcom780 compare Inf -Inf -> 1 -dqcom781 compare Inf -1000 -> 1 -dqcom782 compare Inf -1 -> 1 -dqcom783 compare Inf -0 -> 1 -dqcom784 compare Inf 0 -> 1 -dqcom785 compare Inf 1 -> 1 -dqcom786 compare Inf 1000 -> 1 -dqcom787 compare Inf Inf -> 0 -dqcom788 compare -1000 Inf -> -1 -dqcom789 compare -Inf Inf -> -1 -dqcom790 compare -1 Inf -> -1 -dqcom791 compare -0 Inf -> -1 -dqcom792 compare 0 Inf -> -1 -dqcom793 compare 1 Inf -> -1 -dqcom794 compare 1000 Inf -> -1 -dqcom795 compare Inf Inf -> 0 - -dqcom800 compare -Inf -Inf -> 0 -dqcom801 compare -Inf -1000 -> -1 -dqcom802 compare -Inf -1 -> -1 -dqcom803 compare -Inf -0 -> -1 -dqcom804 compare -Inf 0 -> -1 -dqcom805 compare -Inf 1 -> -1 -dqcom806 compare -Inf 1000 -> -1 -dqcom807 compare -Inf Inf -> -1 -dqcom808 compare -Inf -Inf -> 0 -dqcom809 compare -1000 -Inf -> 1 -dqcom810 compare -1 -Inf -> 1 -dqcom811 compare -0 -Inf -> 1 -dqcom812 compare 0 -Inf -> 1 -dqcom813 compare 1 -Inf -> 1 -dqcom814 compare 1000 -Inf -> 1 -dqcom815 compare Inf -Inf -> 1 - -dqcom821 compare NaN -Inf -> NaN -dqcom822 compare NaN -1000 -> NaN -dqcom823 compare NaN -1 -> NaN -dqcom824 compare NaN -0 -> NaN -dqcom825 compare NaN 0 -> NaN -dqcom826 compare NaN 1 -> NaN -dqcom827 compare NaN 1000 -> NaN -dqcom828 compare NaN Inf -> NaN -dqcom829 compare NaN NaN -> NaN -dqcom830 compare -Inf NaN -> NaN -dqcom831 compare -1000 NaN -> NaN -dqcom832 compare -1 NaN -> NaN -dqcom833 compare -0 NaN -> NaN -dqcom834 compare 0 NaN -> NaN -dqcom835 compare 1 NaN -> NaN -dqcom836 compare 1000 NaN -> NaN -dqcom837 compare Inf NaN -> NaN -dqcom838 compare -NaN -NaN -> -NaN -dqcom839 compare +NaN -NaN -> NaN -dqcom840 compare -NaN +NaN -> -NaN - -dqcom841 compare sNaN -Inf -> NaN Invalid_operation -dqcom842 compare sNaN -1000 -> NaN Invalid_operation -dqcom843 compare sNaN -1 -> NaN Invalid_operation -dqcom844 compare sNaN -0 -> NaN Invalid_operation -dqcom845 compare sNaN 0 -> NaN Invalid_operation -dqcom846 compare sNaN 1 -> NaN Invalid_operation -dqcom847 compare sNaN 1000 -> NaN Invalid_operation -dqcom848 compare sNaN NaN -> NaN Invalid_operation -dqcom849 compare sNaN sNaN -> NaN Invalid_operation -dqcom850 compare NaN sNaN -> NaN Invalid_operation -dqcom851 compare -Inf sNaN -> NaN Invalid_operation -dqcom852 compare -1000 sNaN -> NaN Invalid_operation -dqcom853 compare -1 sNaN -> NaN Invalid_operation -dqcom854 compare -0 sNaN -> NaN Invalid_operation -dqcom855 compare 0 sNaN -> NaN Invalid_operation -dqcom856 compare 1 sNaN -> NaN Invalid_operation -dqcom857 compare 1000 sNaN -> NaN Invalid_operation -dqcom858 compare Inf sNaN -> NaN Invalid_operation -dqcom859 compare NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqcom860 compare NaN9 -Inf -> NaN9 -dqcom861 compare NaN8 999 -> NaN8 -dqcom862 compare NaN77 Inf -> NaN77 -dqcom863 compare -NaN67 NaN5 -> -NaN67 -dqcom864 compare -Inf -NaN4 -> -NaN4 -dqcom865 compare -999 -NaN33 -> -NaN33 -dqcom866 compare Inf NaN2 -> NaN2 -dqcom867 compare -NaN41 -NaN42 -> -NaN41 -dqcom868 compare +NaN41 -NaN42 -> NaN41 -dqcom869 compare -NaN41 +NaN42 -> -NaN41 -dqcom870 compare +NaN41 +NaN42 -> NaN41 - -dqcom871 compare -sNaN99 -Inf -> -NaN99 Invalid_operation -dqcom872 compare sNaN98 -11 -> NaN98 Invalid_operation -dqcom873 compare sNaN97 NaN -> NaN97 Invalid_operation -dqcom874 compare sNaN16 sNaN94 -> NaN16 Invalid_operation -dqcom875 compare NaN85 sNaN83 -> NaN83 Invalid_operation -dqcom876 compare -Inf sNaN92 -> NaN92 Invalid_operation -dqcom877 compare 088 sNaN81 -> NaN81 Invalid_operation -dqcom878 compare Inf sNaN90 -> NaN90 Invalid_operation -dqcom879 compare NaN -sNaN89 -> -NaN89 Invalid_operation - --- wide range -dqcom880 compare +1.23456789012345E-0 9E+6144 -> -1 -dqcom881 compare 9E+6144 +1.23456789012345E-0 -> 1 -dqcom882 compare +0.100 9E-6143 -> 1 -dqcom883 compare 9E-6143 +0.100 -> -1 -dqcom885 compare -1.23456789012345E-0 9E+6144 -> -1 -dqcom886 compare 9E+6144 -1.23456789012345E-0 -> 1 -dqcom887 compare -0.100 9E-6143 -> -1 -dqcom888 compare 9E-6143 -0.100 -> 1 - --- signs -dqcom901 compare 1e+77 1e+11 -> 1 -dqcom902 compare 1e+77 -1e+11 -> 1 -dqcom903 compare -1e+77 1e+11 -> -1 -dqcom904 compare -1e+77 -1e+11 -> -1 -dqcom905 compare 1e-77 1e-11 -> -1 -dqcom906 compare 1e-77 -1e-11 -> 1 -dqcom907 compare -1e-77 1e-11 -> -1 -dqcom908 compare -1e-77 -1e-11 -> 1 - --- full alignment range, both ways -dqcomp1001 compare 1 1.000000000000000000000000000000000 -> 0 -dqcomp1002 compare 1 1.00000000000000000000000000000000 -> 0 -dqcomp1003 compare 1 1.0000000000000000000000000000000 -> 0 -dqcomp1004 compare 1 1.000000000000000000000000000000 -> 0 -dqcomp1005 compare 1 1.00000000000000000000000000000 -> 0 -dqcomp1006 compare 1 1.0000000000000000000000000000 -> 0 -dqcomp1007 compare 1 1.000000000000000000000000000 -> 0 -dqcomp1008 compare 1 1.00000000000000000000000000 -> 0 -dqcomp1009 compare 1 1.0000000000000000000000000 -> 0 -dqcomp1010 compare 1 1.000000000000000000000000 -> 0 -dqcomp1011 compare 1 1.00000000000000000000000 -> 0 -dqcomp1012 compare 1 1.0000000000000000000000 -> 0 -dqcomp1013 compare 1 1.000000000000000000000 -> 0 -dqcomp1014 compare 1 1.00000000000000000000 -> 0 -dqcomp1015 compare 1 1.0000000000000000000 -> 0 -dqcomp1016 compare 1 1.000000000000000000 -> 0 -dqcomp1017 compare 1 1.00000000000000000 -> 0 -dqcomp1018 compare 1 1.0000000000000000 -> 0 -dqcomp1019 compare 1 1.000000000000000 -> 0 -dqcomp1020 compare 1 1.00000000000000 -> 0 -dqcomp1021 compare 1 1.0000000000000 -> 0 -dqcomp1022 compare 1 1.000000000000 -> 0 -dqcomp1023 compare 1 1.00000000000 -> 0 -dqcomp1024 compare 1 1.0000000000 -> 0 -dqcomp1025 compare 1 1.000000000 -> 0 -dqcomp1026 compare 1 1.00000000 -> 0 -dqcomp1027 compare 1 1.0000000 -> 0 -dqcomp1028 compare 1 1.000000 -> 0 -dqcomp1029 compare 1 1.00000 -> 0 -dqcomp1030 compare 1 1.0000 -> 0 -dqcomp1031 compare 1 1.000 -> 0 -dqcomp1032 compare 1 1.00 -> 0 -dqcomp1033 compare 1 1.0 -> 0 - -dqcomp1041 compare 1.000000000000000000000000000000000 1 -> 0 -dqcomp1042 compare 1.00000000000000000000000000000000 1 -> 0 -dqcomp1043 compare 1.0000000000000000000000000000000 1 -> 0 -dqcomp1044 compare 1.000000000000000000000000000000 1 -> 0 -dqcomp1045 compare 1.00000000000000000000000000000 1 -> 0 -dqcomp1046 compare 1.0000000000000000000000000000 1 -> 0 -dqcomp1047 compare 1.000000000000000000000000000 1 -> 0 -dqcomp1048 compare 1.00000000000000000000000000 1 -> 0 -dqcomp1049 compare 1.0000000000000000000000000 1 -> 0 -dqcomp1050 compare 1.000000000000000000000000 1 -> 0 -dqcomp1051 compare 1.00000000000000000000000 1 -> 0 -dqcomp1052 compare 1.0000000000000000000000 1 -> 0 -dqcomp1053 compare 1.000000000000000000000 1 -> 0 -dqcomp1054 compare 1.00000000000000000000 1 -> 0 -dqcomp1055 compare 1.0000000000000000000 1 -> 0 -dqcomp1056 compare 1.000000000000000000 1 -> 0 -dqcomp1057 compare 1.00000000000000000 1 -> 0 -dqcomp1058 compare 1.0000000000000000 1 -> 0 -dqcomp1059 compare 1.000000000000000 1 -> 0 -dqcomp1060 compare 1.00000000000000 1 -> 0 -dqcomp1061 compare 1.0000000000000 1 -> 0 -dqcomp1062 compare 1.000000000000 1 -> 0 -dqcomp1063 compare 1.00000000000 1 -> 0 -dqcomp1064 compare 1.0000000000 1 -> 0 -dqcomp1065 compare 1.000000000 1 -> 0 -dqcomp1066 compare 1.00000000 1 -> 0 -dqcomp1067 compare 1.0000000 1 -> 0 -dqcomp1068 compare 1.000000 1 -> 0 -dqcomp1069 compare 1.00000 1 -> 0 -dqcomp1070 compare 1.0000 1 -> 0 -dqcomp1071 compare 1.000 1 -> 0 -dqcomp1072 compare 1.00 1 -> 0 -dqcomp1073 compare 1.0 1 -> 0 - --- check MSD always detected non-zero -dqcomp1080 compare 0 0.000000000000000000000000000000000 -> 0 -dqcomp1081 compare 0 1.000000000000000000000000000000000 -> -1 -dqcomp1082 compare 0 2.000000000000000000000000000000000 -> -1 -dqcomp1083 compare 0 3.000000000000000000000000000000000 -> -1 -dqcomp1084 compare 0 4.000000000000000000000000000000000 -> -1 -dqcomp1085 compare 0 5.000000000000000000000000000000000 -> -1 -dqcomp1086 compare 0 6.000000000000000000000000000000000 -> -1 -dqcomp1087 compare 0 7.000000000000000000000000000000000 -> -1 -dqcomp1088 compare 0 8.000000000000000000000000000000000 -> -1 -dqcomp1089 compare 0 9.000000000000000000000000000000000 -> -1 -dqcomp1090 compare 0.000000000000000000000000000000000 0 -> 0 -dqcomp1091 compare 1.000000000000000000000000000000000 0 -> 1 -dqcomp1092 compare 2.000000000000000000000000000000000 0 -> 1 -dqcomp1093 compare 3.000000000000000000000000000000000 0 -> 1 -dqcomp1094 compare 4.000000000000000000000000000000000 0 -> 1 -dqcomp1095 compare 5.000000000000000000000000000000000 0 -> 1 -dqcomp1096 compare 6.000000000000000000000000000000000 0 -> 1 -dqcomp1097 compare 7.000000000000000000000000000000000 0 -> 1 -dqcomp1098 compare 8.000000000000000000000000000000000 0 -> 1 -dqcomp1099 compare 9.000000000000000000000000000000000 0 -> 1 - --- Null tests -dqcom990 compare 10 # -> NaN Invalid_operation -dqcom991 compare # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqCompare.decTest -- decQuad comparison that allows quiet NaNs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqcom001 compare -2 -2 -> 0 +dqcom002 compare -2 -1 -> -1 +dqcom003 compare -2 0 -> -1 +dqcom004 compare -2 1 -> -1 +dqcom005 compare -2 2 -> -1 +dqcom006 compare -1 -2 -> 1 +dqcom007 compare -1 -1 -> 0 +dqcom008 compare -1 0 -> -1 +dqcom009 compare -1 1 -> -1 +dqcom010 compare -1 2 -> -1 +dqcom011 compare 0 -2 -> 1 +dqcom012 compare 0 -1 -> 1 +dqcom013 compare 0 0 -> 0 +dqcom014 compare 0 1 -> -1 +dqcom015 compare 0 2 -> -1 +dqcom016 compare 1 -2 -> 1 +dqcom017 compare 1 -1 -> 1 +dqcom018 compare 1 0 -> 1 +dqcom019 compare 1 1 -> 0 +dqcom020 compare 1 2 -> -1 +dqcom021 compare 2 -2 -> 1 +dqcom022 compare 2 -1 -> 1 +dqcom023 compare 2 0 -> 1 +dqcom025 compare 2 1 -> 1 +dqcom026 compare 2 2 -> 0 + +dqcom031 compare -20 -20 -> 0 +dqcom032 compare -20 -10 -> -1 +dqcom033 compare -20 00 -> -1 +dqcom034 compare -20 10 -> -1 +dqcom035 compare -20 20 -> -1 +dqcom036 compare -10 -20 -> 1 +dqcom037 compare -10 -10 -> 0 +dqcom038 compare -10 00 -> -1 +dqcom039 compare -10 10 -> -1 +dqcom040 compare -10 20 -> -1 +dqcom041 compare 00 -20 -> 1 +dqcom042 compare 00 -10 -> 1 +dqcom043 compare 00 00 -> 0 +dqcom044 compare 00 10 -> -1 +dqcom045 compare 00 20 -> -1 +dqcom046 compare 10 -20 -> 1 +dqcom047 compare 10 -10 -> 1 +dqcom048 compare 10 00 -> 1 +dqcom049 compare 10 10 -> 0 +dqcom050 compare 10 20 -> -1 +dqcom051 compare 20 -20 -> 1 +dqcom052 compare 20 -10 -> 1 +dqcom053 compare 20 00 -> 1 +dqcom055 compare 20 10 -> 1 +dqcom056 compare 20 20 -> 0 + +dqcom061 compare -2.0 -2.0 -> 0 +dqcom062 compare -2.0 -1.0 -> -1 +dqcom063 compare -2.0 0.0 -> -1 +dqcom064 compare -2.0 1.0 -> -1 +dqcom065 compare -2.0 2.0 -> -1 +dqcom066 compare -1.0 -2.0 -> 1 +dqcom067 compare -1.0 -1.0 -> 0 +dqcom068 compare -1.0 0.0 -> -1 +dqcom069 compare -1.0 1.0 -> -1 +dqcom070 compare -1.0 2.0 -> -1 +dqcom071 compare 0.0 -2.0 -> 1 +dqcom072 compare 0.0 -1.0 -> 1 +dqcom073 compare 0.0 0.0 -> 0 +dqcom074 compare 0.0 1.0 -> -1 +dqcom075 compare 0.0 2.0 -> -1 +dqcom076 compare 1.0 -2.0 -> 1 +dqcom077 compare 1.0 -1.0 -> 1 +dqcom078 compare 1.0 0.0 -> 1 +dqcom079 compare 1.0 1.0 -> 0 +dqcom080 compare 1.0 2.0 -> -1 +dqcom081 compare 2.0 -2.0 -> 1 +dqcom082 compare 2.0 -1.0 -> 1 +dqcom083 compare 2.0 0.0 -> 1 +dqcom085 compare 2.0 1.0 -> 1 +dqcom086 compare 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +dqcom090 compare 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 0 +dqcom091 compare -9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> -1 +dqcom092 compare 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 1 +dqcom093 compare -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0 + +-- some differing length/exponent cases +dqcom100 compare 7.0 7.0 -> 0 +dqcom101 compare 7.0 7 -> 0 +dqcom102 compare 7 7.0 -> 0 +dqcom103 compare 7E+0 7.0 -> 0 +dqcom104 compare 70E-1 7.0 -> 0 +dqcom105 compare 0.7E+1 7 -> 0 +dqcom106 compare 70E-1 7 -> 0 +dqcom107 compare 7.0 7E+0 -> 0 +dqcom108 compare 7.0 70E-1 -> 0 +dqcom109 compare 7 0.7E+1 -> 0 +dqcom110 compare 7 70E-1 -> 0 + +dqcom120 compare 8.0 7.0 -> 1 +dqcom121 compare 8.0 7 -> 1 +dqcom122 compare 8 7.0 -> 1 +dqcom123 compare 8E+0 7.0 -> 1 +dqcom124 compare 80E-1 7.0 -> 1 +dqcom125 compare 0.8E+1 7 -> 1 +dqcom126 compare 80E-1 7 -> 1 +dqcom127 compare 8.0 7E+0 -> 1 +dqcom128 compare 8.0 70E-1 -> 1 +dqcom129 compare 8 0.7E+1 -> 1 +dqcom130 compare 8 70E-1 -> 1 + +dqcom140 compare 8.0 9.0 -> -1 +dqcom141 compare 8.0 9 -> -1 +dqcom142 compare 8 9.0 -> -1 +dqcom143 compare 8E+0 9.0 -> -1 +dqcom144 compare 80E-1 9.0 -> -1 +dqcom145 compare 0.8E+1 9 -> -1 +dqcom146 compare 80E-1 9 -> -1 +dqcom147 compare 8.0 9E+0 -> -1 +dqcom148 compare 8.0 90E-1 -> -1 +dqcom149 compare 8 0.9E+1 -> -1 +dqcom150 compare 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +dqcom200 compare -7.0 7.0 -> -1 +dqcom201 compare -7.0 7 -> -1 +dqcom202 compare -7 7.0 -> -1 +dqcom203 compare -7E+0 7.0 -> -1 +dqcom204 compare -70E-1 7.0 -> -1 +dqcom205 compare -0.7E+1 7 -> -1 +dqcom206 compare -70E-1 7 -> -1 +dqcom207 compare -7.0 7E+0 -> -1 +dqcom208 compare -7.0 70E-1 -> -1 +dqcom209 compare -7 0.7E+1 -> -1 +dqcom210 compare -7 70E-1 -> -1 + +dqcom220 compare -8.0 7.0 -> -1 +dqcom221 compare -8.0 7 -> -1 +dqcom222 compare -8 7.0 -> -1 +dqcom223 compare -8E+0 7.0 -> -1 +dqcom224 compare -80E-1 7.0 -> -1 +dqcom225 compare -0.8E+1 7 -> -1 +dqcom226 compare -80E-1 7 -> -1 +dqcom227 compare -8.0 7E+0 -> -1 +dqcom228 compare -8.0 70E-1 -> -1 +dqcom229 compare -8 0.7E+1 -> -1 +dqcom230 compare -8 70E-1 -> -1 + +dqcom240 compare -8.0 9.0 -> -1 +dqcom241 compare -8.0 9 -> -1 +dqcom242 compare -8 9.0 -> -1 +dqcom243 compare -8E+0 9.0 -> -1 +dqcom244 compare -80E-1 9.0 -> -1 +dqcom245 compare -0.8E+1 9 -> -1 +dqcom246 compare -80E-1 9 -> -1 +dqcom247 compare -8.0 9E+0 -> -1 +dqcom248 compare -8.0 90E-1 -> -1 +dqcom249 compare -8 0.9E+1 -> -1 +dqcom250 compare -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +dqcom300 compare 7.0 -7.0 -> 1 +dqcom301 compare 7.0 -7 -> 1 +dqcom302 compare 7 -7.0 -> 1 +dqcom303 compare 7E+0 -7.0 -> 1 +dqcom304 compare 70E-1 -7.0 -> 1 +dqcom305 compare .7E+1 -7 -> 1 +dqcom306 compare 70E-1 -7 -> 1 +dqcom307 compare 7.0 -7E+0 -> 1 +dqcom308 compare 7.0 -70E-1 -> 1 +dqcom309 compare 7 -.7E+1 -> 1 +dqcom310 compare 7 -70E-1 -> 1 + +dqcom320 compare 8.0 -7.0 -> 1 +dqcom321 compare 8.0 -7 -> 1 +dqcom322 compare 8 -7.0 -> 1 +dqcom323 compare 8E+0 -7.0 -> 1 +dqcom324 compare 80E-1 -7.0 -> 1 +dqcom325 compare .8E+1 -7 -> 1 +dqcom326 compare 80E-1 -7 -> 1 +dqcom327 compare 8.0 -7E+0 -> 1 +dqcom328 compare 8.0 -70E-1 -> 1 +dqcom329 compare 8 -.7E+1 -> 1 +dqcom330 compare 8 -70E-1 -> 1 + +dqcom340 compare 8.0 -9.0 -> 1 +dqcom341 compare 8.0 -9 -> 1 +dqcom342 compare 8 -9.0 -> 1 +dqcom343 compare 8E+0 -9.0 -> 1 +dqcom344 compare 80E-1 -9.0 -> 1 +dqcom345 compare .8E+1 -9 -> 1 +dqcom346 compare 80E-1 -9 -> 1 +dqcom347 compare 8.0 -9E+0 -> 1 +dqcom348 compare 8.0 -90E-1 -> 1 +dqcom349 compare 8 -.9E+1 -> 1 +dqcom350 compare 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +dqcom400 compare -7.0 -7.0 -> 0 +dqcom401 compare -7.0 -7 -> 0 +dqcom402 compare -7 -7.0 -> 0 +dqcom403 compare -7E+0 -7.0 -> 0 +dqcom404 compare -70E-1 -7.0 -> 0 +dqcom405 compare -.7E+1 -7 -> 0 +dqcom406 compare -70E-1 -7 -> 0 +dqcom407 compare -7.0 -7E+0 -> 0 +dqcom408 compare -7.0 -70E-1 -> 0 +dqcom409 compare -7 -.7E+1 -> 0 +dqcom410 compare -7 -70E-1 -> 0 + +dqcom420 compare -8.0 -7.0 -> -1 +dqcom421 compare -8.0 -7 -> -1 +dqcom422 compare -8 -7.0 -> -1 +dqcom423 compare -8E+0 -7.0 -> -1 +dqcom424 compare -80E-1 -7.0 -> -1 +dqcom425 compare -.8E+1 -7 -> -1 +dqcom426 compare -80E-1 -7 -> -1 +dqcom427 compare -8.0 -7E+0 -> -1 +dqcom428 compare -8.0 -70E-1 -> -1 +dqcom429 compare -8 -.7E+1 -> -1 +dqcom430 compare -8 -70E-1 -> -1 + +dqcom440 compare -8.0 -9.0 -> 1 +dqcom441 compare -8.0 -9 -> 1 +dqcom442 compare -8 -9.0 -> 1 +dqcom443 compare -8E+0 -9.0 -> 1 +dqcom444 compare -80E-1 -9.0 -> 1 +dqcom445 compare -.8E+1 -9 -> 1 +dqcom446 compare -80E-1 -9 -> 1 +dqcom447 compare -8.0 -9E+0 -> 1 +dqcom448 compare -8.0 -90E-1 -> 1 +dqcom449 compare -8 -.9E+1 -> 1 +dqcom450 compare -8 -90E-1 -> 1 + +-- misalignment traps for little-endian +dqcom451 compare 1.0 0.1 -> 1 +dqcom452 compare 0.1 1.0 -> -1 +dqcom453 compare 10.0 0.1 -> 1 +dqcom454 compare 0.1 10.0 -> -1 +dqcom455 compare 100 1.0 -> 1 +dqcom456 compare 1.0 100 -> -1 +dqcom457 compare 1000 10.0 -> 1 +dqcom458 compare 10.0 1000 -> -1 +dqcom459 compare 10000 100.0 -> 1 +dqcom460 compare 100.0 10000 -> -1 +dqcom461 compare 100000 1000.0 -> 1 +dqcom462 compare 1000.0 100000 -> -1 +dqcom463 compare 1000000 10000.0 -> 1 +dqcom464 compare 10000.0 1000000 -> -1 + +-- testcases that subtract to lots of zeros at boundaries [pgr] +dqcom473 compare 123.9999999999999999994560000000000E-89 123.999999999999999999456E-89 -> 0 +dqcom474 compare 123.999999999999999999456000000000E+89 123.999999999999999999456E+89 -> 0 +dqcom475 compare 123.99999999999999999945600000000E-89 123.999999999999999999456E-89 -> 0 +dqcom476 compare 123.9999999999999999994560000000E+89 123.999999999999999999456E+89 -> 0 +dqcom477 compare 123.999999999999999999456000000E-89 123.999999999999999999456E-89 -> 0 +dqcom478 compare 123.99999999999999999945600000E+89 123.999999999999999999456E+89 -> 0 +dqcom479 compare 123.9999999999999999994560000E-89 123.999999999999999999456E-89 -> 0 +dqcom480 compare 123.999999999999999999456000E+89 123.999999999999999999456E+89 -> 0 +dqcom481 compare 123.99999999999999999945600E-89 123.999999999999999999456E-89 -> 0 +dqcom482 compare 123.9999999999999999994560E+89 123.999999999999999999456E+89 -> 0 +dqcom483 compare 123.999999999999999999456E-89 123.999999999999999999456E-89 -> 0 +dqcom487 compare 123.999999999999999999456E+89 123.9999999999999999994560000000000E+89 -> 0 +dqcom488 compare 123.999999999999999999456E-89 123.999999999999999999456000000000E-89 -> 0 +dqcom489 compare 123.999999999999999999456E+89 123.99999999999999999945600000000E+89 -> 0 +dqcom490 compare 123.999999999999999999456E-89 123.9999999999999999994560000000E-89 -> 0 +dqcom491 compare 123.999999999999999999456E+89 123.999999999999999999456000000E+89 -> 0 +dqcom492 compare 123.999999999999999999456E-89 123.99999999999999999945600000E-89 -> 0 +dqcom493 compare 123.999999999999999999456E+89 123.9999999999999999994560000E+89 -> 0 +dqcom494 compare 123.999999999999999999456E-89 123.999999999999999999456000E-89 -> 0 +dqcom495 compare 123.999999999999999999456E+89 123.99999999999999999945600E+89 -> 0 +dqcom496 compare 123.999999999999999999456E-89 123.9999999999999999994560E-89 -> 0 +dqcom497 compare 123.999999999999999999456E+89 123.999999999999999999456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +dqcom500 compare 1 1E-15 -> 1 +dqcom501 compare 1 1E-14 -> 1 +dqcom502 compare 1 1E-13 -> 1 +dqcom503 compare 1 1E-12 -> 1 +dqcom504 compare 1 1E-11 -> 1 +dqcom505 compare 1 1E-10 -> 1 +dqcom506 compare 1 1E-9 -> 1 +dqcom507 compare 1 1E-8 -> 1 +dqcom508 compare 1 1E-7 -> 1 +dqcom509 compare 1 1E-6 -> 1 +dqcom510 compare 1 1E-5 -> 1 +dqcom511 compare 1 1E-4 -> 1 +dqcom512 compare 1 1E-3 -> 1 +dqcom513 compare 1 1E-2 -> 1 +dqcom514 compare 1 1E-1 -> 1 +dqcom515 compare 1 1E-0 -> 0 +dqcom516 compare 1 1E+1 -> -1 +dqcom517 compare 1 1E+2 -> -1 +dqcom518 compare 1 1E+3 -> -1 +dqcom519 compare 1 1E+4 -> -1 +dqcom521 compare 1 1E+5 -> -1 +dqcom522 compare 1 1E+6 -> -1 +dqcom523 compare 1 1E+7 -> -1 +dqcom524 compare 1 1E+8 -> -1 +dqcom525 compare 1 1E+9 -> -1 +dqcom526 compare 1 1E+10 -> -1 +dqcom527 compare 1 1E+11 -> -1 +dqcom528 compare 1 1E+12 -> -1 +dqcom529 compare 1 1E+13 -> -1 +dqcom530 compare 1 1E+14 -> -1 +dqcom531 compare 1 1E+15 -> -1 +-- LR swap +dqcom540 compare 1E-15 1 -> -1 +dqcom541 compare 1E-14 1 -> -1 +dqcom542 compare 1E-13 1 -> -1 +dqcom543 compare 1E-12 1 -> -1 +dqcom544 compare 1E-11 1 -> -1 +dqcom545 compare 1E-10 1 -> -1 +dqcom546 compare 1E-9 1 -> -1 +dqcom547 compare 1E-8 1 -> -1 +dqcom548 compare 1E-7 1 -> -1 +dqcom549 compare 1E-6 1 -> -1 +dqcom550 compare 1E-5 1 -> -1 +dqcom551 compare 1E-4 1 -> -1 +dqcom552 compare 1E-3 1 -> -1 +dqcom553 compare 1E-2 1 -> -1 +dqcom554 compare 1E-1 1 -> -1 +dqcom555 compare 1E-0 1 -> 0 +dqcom556 compare 1E+1 1 -> 1 +dqcom557 compare 1E+2 1 -> 1 +dqcom558 compare 1E+3 1 -> 1 +dqcom559 compare 1E+4 1 -> 1 +dqcom561 compare 1E+5 1 -> 1 +dqcom562 compare 1E+6 1 -> 1 +dqcom563 compare 1E+7 1 -> 1 +dqcom564 compare 1E+8 1 -> 1 +dqcom565 compare 1E+9 1 -> 1 +dqcom566 compare 1E+10 1 -> 1 +dqcom567 compare 1E+11 1 -> 1 +dqcom568 compare 1E+12 1 -> 1 +dqcom569 compare 1E+13 1 -> 1 +dqcom570 compare 1E+14 1 -> 1 +dqcom571 compare 1E+15 1 -> 1 +-- similar with a useful coefficient, one side only +dqcom580 compare 0.000000987654321 1E-15 -> 1 +dqcom581 compare 0.000000987654321 1E-14 -> 1 +dqcom582 compare 0.000000987654321 1E-13 -> 1 +dqcom583 compare 0.000000987654321 1E-12 -> 1 +dqcom584 compare 0.000000987654321 1E-11 -> 1 +dqcom585 compare 0.000000987654321 1E-10 -> 1 +dqcom586 compare 0.000000987654321 1E-9 -> 1 +dqcom587 compare 0.000000987654321 1E-8 -> 1 +dqcom588 compare 0.000000987654321 1E-7 -> 1 +dqcom589 compare 0.000000987654321 1E-6 -> -1 +dqcom590 compare 0.000000987654321 1E-5 -> -1 +dqcom591 compare 0.000000987654321 1E-4 -> -1 +dqcom592 compare 0.000000987654321 1E-3 -> -1 +dqcom593 compare 0.000000987654321 1E-2 -> -1 +dqcom594 compare 0.000000987654321 1E-1 -> -1 +dqcom595 compare 0.000000987654321 1E-0 -> -1 +dqcom596 compare 0.000000987654321 1E+1 -> -1 +dqcom597 compare 0.000000987654321 1E+2 -> -1 +dqcom598 compare 0.000000987654321 1E+3 -> -1 +dqcom599 compare 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +dqcom600 compare 12 12.2345 -> -1 +dqcom601 compare 12.0 12.2345 -> -1 +dqcom602 compare 12.00 12.2345 -> -1 +dqcom603 compare 12.000 12.2345 -> -1 +dqcom604 compare 12.0000 12.2345 -> -1 +dqcom605 compare 12.00000 12.2345 -> -1 +dqcom606 compare 12.000000 12.2345 -> -1 +dqcom607 compare 12.0000000 12.2345 -> -1 +dqcom608 compare 12.00000000 12.2345 -> -1 +dqcom609 compare 12.000000000 12.2345 -> -1 +dqcom610 compare 12.1234 12 -> 1 +dqcom611 compare 12.1234 12.0 -> 1 +dqcom612 compare 12.1234 12.00 -> 1 +dqcom613 compare 12.1234 12.000 -> 1 +dqcom614 compare 12.1234 12.0000 -> 1 +dqcom615 compare 12.1234 12.00000 -> 1 +dqcom616 compare 12.1234 12.000000 -> 1 +dqcom617 compare 12.1234 12.0000000 -> 1 +dqcom618 compare 12.1234 12.00000000 -> 1 +dqcom619 compare 12.1234 12.000000000 -> 1 +dqcom620 compare -12 -12.2345 -> 1 +dqcom621 compare -12.0 -12.2345 -> 1 +dqcom622 compare -12.00 -12.2345 -> 1 +dqcom623 compare -12.000 -12.2345 -> 1 +dqcom624 compare -12.0000 -12.2345 -> 1 +dqcom625 compare -12.00000 -12.2345 -> 1 +dqcom626 compare -12.000000 -12.2345 -> 1 +dqcom627 compare -12.0000000 -12.2345 -> 1 +dqcom628 compare -12.00000000 -12.2345 -> 1 +dqcom629 compare -12.000000000 -12.2345 -> 1 +dqcom630 compare -12.1234 -12 -> -1 +dqcom631 compare -12.1234 -12.0 -> -1 +dqcom632 compare -12.1234 -12.00 -> -1 +dqcom633 compare -12.1234 -12.000 -> -1 +dqcom634 compare -12.1234 -12.0000 -> -1 +dqcom635 compare -12.1234 -12.00000 -> -1 +dqcom636 compare -12.1234 -12.000000 -> -1 +dqcom637 compare -12.1234 -12.0000000 -> -1 +dqcom638 compare -12.1234 -12.00000000 -> -1 +dqcom639 compare -12.1234 -12.000000000 -> -1 + +-- extended zeros +dqcom640 compare 0 0 -> 0 +dqcom641 compare 0 -0 -> 0 +dqcom642 compare 0 -0.0 -> 0 +dqcom643 compare 0 0.0 -> 0 +dqcom644 compare -0 0 -> 0 +dqcom645 compare -0 -0 -> 0 +dqcom646 compare -0 -0.0 -> 0 +dqcom647 compare -0 0.0 -> 0 +dqcom648 compare 0.0 0 -> 0 +dqcom649 compare 0.0 -0 -> 0 +dqcom650 compare 0.0 -0.0 -> 0 +dqcom651 compare 0.0 0.0 -> 0 +dqcom652 compare -0.0 0 -> 0 +dqcom653 compare -0.0 -0 -> 0 +dqcom654 compare -0.0 -0.0 -> 0 +dqcom655 compare -0.0 0.0 -> 0 + +dqcom656 compare -0E1 0.0 -> 0 +dqcom657 compare -0E2 0.0 -> 0 +dqcom658 compare 0E1 0.0 -> 0 +dqcom659 compare 0E2 0.0 -> 0 +dqcom660 compare -0E1 0 -> 0 +dqcom661 compare -0E2 0 -> 0 +dqcom662 compare 0E1 0 -> 0 +dqcom663 compare 0E2 0 -> 0 +dqcom664 compare -0E1 -0E1 -> 0 +dqcom665 compare -0E2 -0E1 -> 0 +dqcom666 compare 0E1 -0E1 -> 0 +dqcom667 compare 0E2 -0E1 -> 0 +dqcom668 compare -0E1 -0E2 -> 0 +dqcom669 compare -0E2 -0E2 -> 0 +dqcom670 compare 0E1 -0E2 -> 0 +dqcom671 compare 0E2 -0E2 -> 0 +dqcom672 compare -0E1 0E1 -> 0 +dqcom673 compare -0E2 0E1 -> 0 +dqcom674 compare 0E1 0E1 -> 0 +dqcom675 compare 0E2 0E1 -> 0 +dqcom676 compare -0E1 0E2 -> 0 +dqcom677 compare -0E2 0E2 -> 0 +dqcom678 compare 0E1 0E2 -> 0 +dqcom679 compare 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +dqcom680 compare 12 12 -> 0 +dqcom681 compare 12 12.0 -> 0 +dqcom682 compare 12 12.00 -> 0 +dqcom683 compare 12 12.000 -> 0 +dqcom684 compare 12 12.0000 -> 0 +dqcom685 compare 12 12.00000 -> 0 +dqcom686 compare 12 12.000000 -> 0 +dqcom687 compare 12 12.0000000 -> 0 +dqcom688 compare 12 12.00000000 -> 0 +dqcom689 compare 12 12.000000000 -> 0 +dqcom690 compare 12 12 -> 0 +dqcom691 compare 12.0 12 -> 0 +dqcom692 compare 12.00 12 -> 0 +dqcom693 compare 12.000 12 -> 0 +dqcom694 compare 12.0000 12 -> 0 +dqcom695 compare 12.00000 12 -> 0 +dqcom696 compare 12.000000 12 -> 0 +dqcom697 compare 12.0000000 12 -> 0 +dqcom698 compare 12.00000000 12 -> 0 +dqcom699 compare 12.000000000 12 -> 0 + +-- first, second, & last digit +dqcom700 compare 1234567899999999999999999990123456 1234567899999999999999999990123455 -> 1 +dqcom701 compare 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 +dqcom702 compare 1234567899999999999999999990123456 1234567899999999999999999990123457 -> -1 +dqcom703 compare 1234567899999999999999999990123456 0234567899999999999999999990123456 -> 1 +dqcom704 compare 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 +dqcom705 compare 1234567899999999999999999990123456 2234567899999999999999999990123456 -> -1 +dqcom706 compare 1134567899999999999999999990123456 1034567899999999999999999990123456 -> 1 +dqcom707 compare 1134567899999999999999999990123456 1134567899999999999999999990123456 -> 0 +dqcom708 compare 1134567899999999999999999990123456 1234567899999999999999999990123456 -> -1 + +-- miscellaneous +dqcom721 compare 12345678000 1 -> 1 +dqcom722 compare 1 12345678000 -> -1 +dqcom723 compare 1234567800 1 -> 1 +dqcom724 compare 1 1234567800 -> -1 +dqcom725 compare 1234567890 1 -> 1 +dqcom726 compare 1 1234567890 -> -1 +dqcom727 compare 1234567891 1 -> 1 +dqcom728 compare 1 1234567891 -> -1 +dqcom729 compare 12345678901 1 -> 1 +dqcom730 compare 1 12345678901 -> -1 +dqcom731 compare 1234567896 1 -> 1 +dqcom732 compare 1 1234567896 -> -1 + +-- residue cases at lower precision +dqcom740 compare 1 0.9999999 -> 1 +dqcom741 compare 1 0.999999 -> 1 +dqcom742 compare 1 0.99999 -> 1 +dqcom743 compare 1 1.0000 -> 0 +dqcom744 compare 1 1.00001 -> -1 +dqcom745 compare 1 1.000001 -> -1 +dqcom746 compare 1 1.0000001 -> -1 +dqcom750 compare 0.9999999 1 -> -1 +dqcom751 compare 0.999999 1 -> -1 +dqcom752 compare 0.99999 1 -> -1 +dqcom753 compare 1.0000 1 -> 0 +dqcom754 compare 1.00001 1 -> 1 +dqcom755 compare 1.000001 1 -> 1 +dqcom756 compare 1.0000001 1 -> 1 + +-- Specials +dqcom780 compare Inf -Inf -> 1 +dqcom781 compare Inf -1000 -> 1 +dqcom782 compare Inf -1 -> 1 +dqcom783 compare Inf -0 -> 1 +dqcom784 compare Inf 0 -> 1 +dqcom785 compare Inf 1 -> 1 +dqcom786 compare Inf 1000 -> 1 +dqcom787 compare Inf Inf -> 0 +dqcom788 compare -1000 Inf -> -1 +dqcom789 compare -Inf Inf -> -1 +dqcom790 compare -1 Inf -> -1 +dqcom791 compare -0 Inf -> -1 +dqcom792 compare 0 Inf -> -1 +dqcom793 compare 1 Inf -> -1 +dqcom794 compare 1000 Inf -> -1 +dqcom795 compare Inf Inf -> 0 + +dqcom800 compare -Inf -Inf -> 0 +dqcom801 compare -Inf -1000 -> -1 +dqcom802 compare -Inf -1 -> -1 +dqcom803 compare -Inf -0 -> -1 +dqcom804 compare -Inf 0 -> -1 +dqcom805 compare -Inf 1 -> -1 +dqcom806 compare -Inf 1000 -> -1 +dqcom807 compare -Inf Inf -> -1 +dqcom808 compare -Inf -Inf -> 0 +dqcom809 compare -1000 -Inf -> 1 +dqcom810 compare -1 -Inf -> 1 +dqcom811 compare -0 -Inf -> 1 +dqcom812 compare 0 -Inf -> 1 +dqcom813 compare 1 -Inf -> 1 +dqcom814 compare 1000 -Inf -> 1 +dqcom815 compare Inf -Inf -> 1 + +dqcom821 compare NaN -Inf -> NaN +dqcom822 compare NaN -1000 -> NaN +dqcom823 compare NaN -1 -> NaN +dqcom824 compare NaN -0 -> NaN +dqcom825 compare NaN 0 -> NaN +dqcom826 compare NaN 1 -> NaN +dqcom827 compare NaN 1000 -> NaN +dqcom828 compare NaN Inf -> NaN +dqcom829 compare NaN NaN -> NaN +dqcom830 compare -Inf NaN -> NaN +dqcom831 compare -1000 NaN -> NaN +dqcom832 compare -1 NaN -> NaN +dqcom833 compare -0 NaN -> NaN +dqcom834 compare 0 NaN -> NaN +dqcom835 compare 1 NaN -> NaN +dqcom836 compare 1000 NaN -> NaN +dqcom837 compare Inf NaN -> NaN +dqcom838 compare -NaN -NaN -> -NaN +dqcom839 compare +NaN -NaN -> NaN +dqcom840 compare -NaN +NaN -> -NaN + +dqcom841 compare sNaN -Inf -> NaN Invalid_operation +dqcom842 compare sNaN -1000 -> NaN Invalid_operation +dqcom843 compare sNaN -1 -> NaN Invalid_operation +dqcom844 compare sNaN -0 -> NaN Invalid_operation +dqcom845 compare sNaN 0 -> NaN Invalid_operation +dqcom846 compare sNaN 1 -> NaN Invalid_operation +dqcom847 compare sNaN 1000 -> NaN Invalid_operation +dqcom848 compare sNaN NaN -> NaN Invalid_operation +dqcom849 compare sNaN sNaN -> NaN Invalid_operation +dqcom850 compare NaN sNaN -> NaN Invalid_operation +dqcom851 compare -Inf sNaN -> NaN Invalid_operation +dqcom852 compare -1000 sNaN -> NaN Invalid_operation +dqcom853 compare -1 sNaN -> NaN Invalid_operation +dqcom854 compare -0 sNaN -> NaN Invalid_operation +dqcom855 compare 0 sNaN -> NaN Invalid_operation +dqcom856 compare 1 sNaN -> NaN Invalid_operation +dqcom857 compare 1000 sNaN -> NaN Invalid_operation +dqcom858 compare Inf sNaN -> NaN Invalid_operation +dqcom859 compare NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqcom860 compare NaN9 -Inf -> NaN9 +dqcom861 compare NaN8 999 -> NaN8 +dqcom862 compare NaN77 Inf -> NaN77 +dqcom863 compare -NaN67 NaN5 -> -NaN67 +dqcom864 compare -Inf -NaN4 -> -NaN4 +dqcom865 compare -999 -NaN33 -> -NaN33 +dqcom866 compare Inf NaN2 -> NaN2 +dqcom867 compare -NaN41 -NaN42 -> -NaN41 +dqcom868 compare +NaN41 -NaN42 -> NaN41 +dqcom869 compare -NaN41 +NaN42 -> -NaN41 +dqcom870 compare +NaN41 +NaN42 -> NaN41 + +dqcom871 compare -sNaN99 -Inf -> -NaN99 Invalid_operation +dqcom872 compare sNaN98 -11 -> NaN98 Invalid_operation +dqcom873 compare sNaN97 NaN -> NaN97 Invalid_operation +dqcom874 compare sNaN16 sNaN94 -> NaN16 Invalid_operation +dqcom875 compare NaN85 sNaN83 -> NaN83 Invalid_operation +dqcom876 compare -Inf sNaN92 -> NaN92 Invalid_operation +dqcom877 compare 088 sNaN81 -> NaN81 Invalid_operation +dqcom878 compare Inf sNaN90 -> NaN90 Invalid_operation +dqcom879 compare NaN -sNaN89 -> -NaN89 Invalid_operation + +-- wide range +dqcom880 compare +1.23456789012345E-0 9E+6144 -> -1 +dqcom881 compare 9E+6144 +1.23456789012345E-0 -> 1 +dqcom882 compare +0.100 9E-6143 -> 1 +dqcom883 compare 9E-6143 +0.100 -> -1 +dqcom885 compare -1.23456789012345E-0 9E+6144 -> -1 +dqcom886 compare 9E+6144 -1.23456789012345E-0 -> 1 +dqcom887 compare -0.100 9E-6143 -> -1 +dqcom888 compare 9E-6143 -0.100 -> 1 + +-- signs +dqcom901 compare 1e+77 1e+11 -> 1 +dqcom902 compare 1e+77 -1e+11 -> 1 +dqcom903 compare -1e+77 1e+11 -> -1 +dqcom904 compare -1e+77 -1e+11 -> -1 +dqcom905 compare 1e-77 1e-11 -> -1 +dqcom906 compare 1e-77 -1e-11 -> 1 +dqcom907 compare -1e-77 1e-11 -> -1 +dqcom908 compare -1e-77 -1e-11 -> 1 + +-- full alignment range, both ways +dqcomp1001 compare 1 1.000000000000000000000000000000000 -> 0 +dqcomp1002 compare 1 1.00000000000000000000000000000000 -> 0 +dqcomp1003 compare 1 1.0000000000000000000000000000000 -> 0 +dqcomp1004 compare 1 1.000000000000000000000000000000 -> 0 +dqcomp1005 compare 1 1.00000000000000000000000000000 -> 0 +dqcomp1006 compare 1 1.0000000000000000000000000000 -> 0 +dqcomp1007 compare 1 1.000000000000000000000000000 -> 0 +dqcomp1008 compare 1 1.00000000000000000000000000 -> 0 +dqcomp1009 compare 1 1.0000000000000000000000000 -> 0 +dqcomp1010 compare 1 1.000000000000000000000000 -> 0 +dqcomp1011 compare 1 1.00000000000000000000000 -> 0 +dqcomp1012 compare 1 1.0000000000000000000000 -> 0 +dqcomp1013 compare 1 1.000000000000000000000 -> 0 +dqcomp1014 compare 1 1.00000000000000000000 -> 0 +dqcomp1015 compare 1 1.0000000000000000000 -> 0 +dqcomp1016 compare 1 1.000000000000000000 -> 0 +dqcomp1017 compare 1 1.00000000000000000 -> 0 +dqcomp1018 compare 1 1.0000000000000000 -> 0 +dqcomp1019 compare 1 1.000000000000000 -> 0 +dqcomp1020 compare 1 1.00000000000000 -> 0 +dqcomp1021 compare 1 1.0000000000000 -> 0 +dqcomp1022 compare 1 1.000000000000 -> 0 +dqcomp1023 compare 1 1.00000000000 -> 0 +dqcomp1024 compare 1 1.0000000000 -> 0 +dqcomp1025 compare 1 1.000000000 -> 0 +dqcomp1026 compare 1 1.00000000 -> 0 +dqcomp1027 compare 1 1.0000000 -> 0 +dqcomp1028 compare 1 1.000000 -> 0 +dqcomp1029 compare 1 1.00000 -> 0 +dqcomp1030 compare 1 1.0000 -> 0 +dqcomp1031 compare 1 1.000 -> 0 +dqcomp1032 compare 1 1.00 -> 0 +dqcomp1033 compare 1 1.0 -> 0 + +dqcomp1041 compare 1.000000000000000000000000000000000 1 -> 0 +dqcomp1042 compare 1.00000000000000000000000000000000 1 -> 0 +dqcomp1043 compare 1.0000000000000000000000000000000 1 -> 0 +dqcomp1044 compare 1.000000000000000000000000000000 1 -> 0 +dqcomp1045 compare 1.00000000000000000000000000000 1 -> 0 +dqcomp1046 compare 1.0000000000000000000000000000 1 -> 0 +dqcomp1047 compare 1.000000000000000000000000000 1 -> 0 +dqcomp1048 compare 1.00000000000000000000000000 1 -> 0 +dqcomp1049 compare 1.0000000000000000000000000 1 -> 0 +dqcomp1050 compare 1.000000000000000000000000 1 -> 0 +dqcomp1051 compare 1.00000000000000000000000 1 -> 0 +dqcomp1052 compare 1.0000000000000000000000 1 -> 0 +dqcomp1053 compare 1.000000000000000000000 1 -> 0 +dqcomp1054 compare 1.00000000000000000000 1 -> 0 +dqcomp1055 compare 1.0000000000000000000 1 -> 0 +dqcomp1056 compare 1.000000000000000000 1 -> 0 +dqcomp1057 compare 1.00000000000000000 1 -> 0 +dqcomp1058 compare 1.0000000000000000 1 -> 0 +dqcomp1059 compare 1.000000000000000 1 -> 0 +dqcomp1060 compare 1.00000000000000 1 -> 0 +dqcomp1061 compare 1.0000000000000 1 -> 0 +dqcomp1062 compare 1.000000000000 1 -> 0 +dqcomp1063 compare 1.00000000000 1 -> 0 +dqcomp1064 compare 1.0000000000 1 -> 0 +dqcomp1065 compare 1.000000000 1 -> 0 +dqcomp1066 compare 1.00000000 1 -> 0 +dqcomp1067 compare 1.0000000 1 -> 0 +dqcomp1068 compare 1.000000 1 -> 0 +dqcomp1069 compare 1.00000 1 -> 0 +dqcomp1070 compare 1.0000 1 -> 0 +dqcomp1071 compare 1.000 1 -> 0 +dqcomp1072 compare 1.00 1 -> 0 +dqcomp1073 compare 1.0 1 -> 0 + +-- check MSD always detected non-zero +dqcomp1080 compare 0 0.000000000000000000000000000000000 -> 0 +dqcomp1081 compare 0 1.000000000000000000000000000000000 -> -1 +dqcomp1082 compare 0 2.000000000000000000000000000000000 -> -1 +dqcomp1083 compare 0 3.000000000000000000000000000000000 -> -1 +dqcomp1084 compare 0 4.000000000000000000000000000000000 -> -1 +dqcomp1085 compare 0 5.000000000000000000000000000000000 -> -1 +dqcomp1086 compare 0 6.000000000000000000000000000000000 -> -1 +dqcomp1087 compare 0 7.000000000000000000000000000000000 -> -1 +dqcomp1088 compare 0 8.000000000000000000000000000000000 -> -1 +dqcomp1089 compare 0 9.000000000000000000000000000000000 -> -1 +dqcomp1090 compare 0.000000000000000000000000000000000 0 -> 0 +dqcomp1091 compare 1.000000000000000000000000000000000 0 -> 1 +dqcomp1092 compare 2.000000000000000000000000000000000 0 -> 1 +dqcomp1093 compare 3.000000000000000000000000000000000 0 -> 1 +dqcomp1094 compare 4.000000000000000000000000000000000 0 -> 1 +dqcomp1095 compare 5.000000000000000000000000000000000 0 -> 1 +dqcomp1096 compare 6.000000000000000000000000000000000 0 -> 1 +dqcomp1097 compare 7.000000000000000000000000000000000 0 -> 1 +dqcomp1098 compare 8.000000000000000000000000000000000 0 -> 1 +dqcomp1099 compare 9.000000000000000000000000000000000 0 -> 1 + +-- Null tests +dqcom990 compare 10 # -> NaN Invalid_operation +dqcom991 compare # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqCompareSig.decTest b/Lib/test/decimaltestdata/dqCompareSig.decTest index 795f0916dde..c068d471c1b 100644 --- a/Lib/test/decimaltestdata/dqCompareSig.decTest +++ b/Lib/test/decimaltestdata/dqCompareSig.decTest @@ -1,647 +1,647 @@ ------------------------------------------------------------------------- --- dqCompareSig.decTest -- decQuad comparison; all NaNs signal -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqcms001 comparesig -2 -2 -> 0 -dqcms002 comparesig -2 -1 -> -1 -dqcms003 comparesig -2 0 -> -1 -dqcms004 comparesig -2 1 -> -1 -dqcms005 comparesig -2 2 -> -1 -dqcms006 comparesig -1 -2 -> 1 -dqcms007 comparesig -1 -1 -> 0 -dqcms008 comparesig -1 0 -> -1 -dqcms009 comparesig -1 1 -> -1 -dqcms010 comparesig -1 2 -> -1 -dqcms011 comparesig 0 -2 -> 1 -dqcms012 comparesig 0 -1 -> 1 -dqcms013 comparesig 0 0 -> 0 -dqcms014 comparesig 0 1 -> -1 -dqcms015 comparesig 0 2 -> -1 -dqcms016 comparesig 1 -2 -> 1 -dqcms017 comparesig 1 -1 -> 1 -dqcms018 comparesig 1 0 -> 1 -dqcms019 comparesig 1 1 -> 0 -dqcms020 comparesig 1 2 -> -1 -dqcms021 comparesig 2 -2 -> 1 -dqcms022 comparesig 2 -1 -> 1 -dqcms023 comparesig 2 0 -> 1 -dqcms025 comparesig 2 1 -> 1 -dqcms026 comparesig 2 2 -> 0 - -dqcms031 comparesig -20 -20 -> 0 -dqcms032 comparesig -20 -10 -> -1 -dqcms033 comparesig -20 00 -> -1 -dqcms034 comparesig -20 10 -> -1 -dqcms035 comparesig -20 20 -> -1 -dqcms036 comparesig -10 -20 -> 1 -dqcms037 comparesig -10 -10 -> 0 -dqcms038 comparesig -10 00 -> -1 -dqcms039 comparesig -10 10 -> -1 -dqcms040 comparesig -10 20 -> -1 -dqcms041 comparesig 00 -20 -> 1 -dqcms042 comparesig 00 -10 -> 1 -dqcms043 comparesig 00 00 -> 0 -dqcms044 comparesig 00 10 -> -1 -dqcms045 comparesig 00 20 -> -1 -dqcms046 comparesig 10 -20 -> 1 -dqcms047 comparesig 10 -10 -> 1 -dqcms048 comparesig 10 00 -> 1 -dqcms049 comparesig 10 10 -> 0 -dqcms050 comparesig 10 20 -> -1 -dqcms051 comparesig 20 -20 -> 1 -dqcms052 comparesig 20 -10 -> 1 -dqcms053 comparesig 20 00 -> 1 -dqcms055 comparesig 20 10 -> 1 -dqcms056 comparesig 20 20 -> 0 - -dqcms061 comparesig -2.0 -2.0 -> 0 -dqcms062 comparesig -2.0 -1.0 -> -1 -dqcms063 comparesig -2.0 0.0 -> -1 -dqcms064 comparesig -2.0 1.0 -> -1 -dqcms065 comparesig -2.0 2.0 -> -1 -dqcms066 comparesig -1.0 -2.0 -> 1 -dqcms067 comparesig -1.0 -1.0 -> 0 -dqcms068 comparesig -1.0 0.0 -> -1 -dqcms069 comparesig -1.0 1.0 -> -1 -dqcms070 comparesig -1.0 2.0 -> -1 -dqcms071 comparesig 0.0 -2.0 -> 1 -dqcms072 comparesig 0.0 -1.0 -> 1 -dqcms073 comparesig 0.0 0.0 -> 0 -dqcms074 comparesig 0.0 1.0 -> -1 -dqcms075 comparesig 0.0 2.0 -> -1 -dqcms076 comparesig 1.0 -2.0 -> 1 -dqcms077 comparesig 1.0 -1.0 -> 1 -dqcms078 comparesig 1.0 0.0 -> 1 -dqcms079 comparesig 1.0 1.0 -> 0 -dqcms080 comparesig 1.0 2.0 -> -1 -dqcms081 comparesig 2.0 -2.0 -> 1 -dqcms082 comparesig 2.0 -1.0 -> 1 -dqcms083 comparesig 2.0 0.0 -> 1 -dqcms085 comparesig 2.0 1.0 -> 1 -dqcms086 comparesig 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -dqcms090 comparesig 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 0 -dqcms091 comparesig -9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> -1 -dqcms092 comparesig 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 1 -dqcms093 comparesig -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0 - --- some differing length/exponent cases -dqcms100 comparesig 7.0 7.0 -> 0 -dqcms101 comparesig 7.0 7 -> 0 -dqcms102 comparesig 7 7.0 -> 0 -dqcms103 comparesig 7E+0 7.0 -> 0 -dqcms104 comparesig 70E-1 7.0 -> 0 -dqcms105 comparesig 0.7E+1 7 -> 0 -dqcms106 comparesig 70E-1 7 -> 0 -dqcms107 comparesig 7.0 7E+0 -> 0 -dqcms108 comparesig 7.0 70E-1 -> 0 -dqcms109 comparesig 7 0.7E+1 -> 0 -dqcms110 comparesig 7 70E-1 -> 0 - -dqcms120 comparesig 8.0 7.0 -> 1 -dqcms121 comparesig 8.0 7 -> 1 -dqcms122 comparesig 8 7.0 -> 1 -dqcms123 comparesig 8E+0 7.0 -> 1 -dqcms124 comparesig 80E-1 7.0 -> 1 -dqcms125 comparesig 0.8E+1 7 -> 1 -dqcms126 comparesig 80E-1 7 -> 1 -dqcms127 comparesig 8.0 7E+0 -> 1 -dqcms128 comparesig 8.0 70E-1 -> 1 -dqcms129 comparesig 8 0.7E+1 -> 1 -dqcms130 comparesig 8 70E-1 -> 1 - -dqcms140 comparesig 8.0 9.0 -> -1 -dqcms141 comparesig 8.0 9 -> -1 -dqcms142 comparesig 8 9.0 -> -1 -dqcms143 comparesig 8E+0 9.0 -> -1 -dqcms144 comparesig 80E-1 9.0 -> -1 -dqcms145 comparesig 0.8E+1 9 -> -1 -dqcms146 comparesig 80E-1 9 -> -1 -dqcms147 comparesig 8.0 9E+0 -> -1 -dqcms148 comparesig 8.0 90E-1 -> -1 -dqcms149 comparesig 8 0.9E+1 -> -1 -dqcms150 comparesig 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -dqcms200 comparesig -7.0 7.0 -> -1 -dqcms201 comparesig -7.0 7 -> -1 -dqcms202 comparesig -7 7.0 -> -1 -dqcms203 comparesig -7E+0 7.0 -> -1 -dqcms204 comparesig -70E-1 7.0 -> -1 -dqcms205 comparesig -0.7E+1 7 -> -1 -dqcms206 comparesig -70E-1 7 -> -1 -dqcms207 comparesig -7.0 7E+0 -> -1 -dqcms208 comparesig -7.0 70E-1 -> -1 -dqcms209 comparesig -7 0.7E+1 -> -1 -dqcms210 comparesig -7 70E-1 -> -1 - -dqcms220 comparesig -8.0 7.0 -> -1 -dqcms221 comparesig -8.0 7 -> -1 -dqcms222 comparesig -8 7.0 -> -1 -dqcms223 comparesig -8E+0 7.0 -> -1 -dqcms224 comparesig -80E-1 7.0 -> -1 -dqcms225 comparesig -0.8E+1 7 -> -1 -dqcms226 comparesig -80E-1 7 -> -1 -dqcms227 comparesig -8.0 7E+0 -> -1 -dqcms228 comparesig -8.0 70E-1 -> -1 -dqcms229 comparesig -8 0.7E+1 -> -1 -dqcms230 comparesig -8 70E-1 -> -1 - -dqcms240 comparesig -8.0 9.0 -> -1 -dqcms241 comparesig -8.0 9 -> -1 -dqcms242 comparesig -8 9.0 -> -1 -dqcms243 comparesig -8E+0 9.0 -> -1 -dqcms244 comparesig -80E-1 9.0 -> -1 -dqcms245 comparesig -0.8E+1 9 -> -1 -dqcms246 comparesig -80E-1 9 -> -1 -dqcms247 comparesig -8.0 9E+0 -> -1 -dqcms248 comparesig -8.0 90E-1 -> -1 -dqcms249 comparesig -8 0.9E+1 -> -1 -dqcms250 comparesig -8 90E-1 -> -1 - --- and again, with sign changes +- .. -dqcms300 comparesig 7.0 -7.0 -> 1 -dqcms301 comparesig 7.0 -7 -> 1 -dqcms302 comparesig 7 -7.0 -> 1 -dqcms303 comparesig 7E+0 -7.0 -> 1 -dqcms304 comparesig 70E-1 -7.0 -> 1 -dqcms305 comparesig .7E+1 -7 -> 1 -dqcms306 comparesig 70E-1 -7 -> 1 -dqcms307 comparesig 7.0 -7E+0 -> 1 -dqcms308 comparesig 7.0 -70E-1 -> 1 -dqcms309 comparesig 7 -.7E+1 -> 1 -dqcms310 comparesig 7 -70E-1 -> 1 - -dqcms320 comparesig 8.0 -7.0 -> 1 -dqcms321 comparesig 8.0 -7 -> 1 -dqcms322 comparesig 8 -7.0 -> 1 -dqcms323 comparesig 8E+0 -7.0 -> 1 -dqcms324 comparesig 80E-1 -7.0 -> 1 -dqcms325 comparesig .8E+1 -7 -> 1 -dqcms326 comparesig 80E-1 -7 -> 1 -dqcms327 comparesig 8.0 -7E+0 -> 1 -dqcms328 comparesig 8.0 -70E-1 -> 1 -dqcms329 comparesig 8 -.7E+1 -> 1 -dqcms330 comparesig 8 -70E-1 -> 1 - -dqcms340 comparesig 8.0 -9.0 -> 1 -dqcms341 comparesig 8.0 -9 -> 1 -dqcms342 comparesig 8 -9.0 -> 1 -dqcms343 comparesig 8E+0 -9.0 -> 1 -dqcms344 comparesig 80E-1 -9.0 -> 1 -dqcms345 comparesig .8E+1 -9 -> 1 -dqcms346 comparesig 80E-1 -9 -> 1 -dqcms347 comparesig 8.0 -9E+0 -> 1 -dqcms348 comparesig 8.0 -90E-1 -> 1 -dqcms349 comparesig 8 -.9E+1 -> 1 -dqcms350 comparesig 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -dqcms400 comparesig -7.0 -7.0 -> 0 -dqcms401 comparesig -7.0 -7 -> 0 -dqcms402 comparesig -7 -7.0 -> 0 -dqcms403 comparesig -7E+0 -7.0 -> 0 -dqcms404 comparesig -70E-1 -7.0 -> 0 -dqcms405 comparesig -.7E+1 -7 -> 0 -dqcms406 comparesig -70E-1 -7 -> 0 -dqcms407 comparesig -7.0 -7E+0 -> 0 -dqcms408 comparesig -7.0 -70E-1 -> 0 -dqcms409 comparesig -7 -.7E+1 -> 0 -dqcms410 comparesig -7 -70E-1 -> 0 - -dqcms420 comparesig -8.0 -7.0 -> -1 -dqcms421 comparesig -8.0 -7 -> -1 -dqcms422 comparesig -8 -7.0 -> -1 -dqcms423 comparesig -8E+0 -7.0 -> -1 -dqcms424 comparesig -80E-1 -7.0 -> -1 -dqcms425 comparesig -.8E+1 -7 -> -1 -dqcms426 comparesig -80E-1 -7 -> -1 -dqcms427 comparesig -8.0 -7E+0 -> -1 -dqcms428 comparesig -8.0 -70E-1 -> -1 -dqcms429 comparesig -8 -.7E+1 -> -1 -dqcms430 comparesig -8 -70E-1 -> -1 - -dqcms440 comparesig -8.0 -9.0 -> 1 -dqcms441 comparesig -8.0 -9 -> 1 -dqcms442 comparesig -8 -9.0 -> 1 -dqcms443 comparesig -8E+0 -9.0 -> 1 -dqcms444 comparesig -80E-1 -9.0 -> 1 -dqcms445 comparesig -.8E+1 -9 -> 1 -dqcms446 comparesig -80E-1 -9 -> 1 -dqcms447 comparesig -8.0 -9E+0 -> 1 -dqcms448 comparesig -8.0 -90E-1 -> 1 -dqcms449 comparesig -8 -.9E+1 -> 1 -dqcms450 comparesig -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -dqcms473 comparesig 123.9999999999999999994560000000000E-89 123.999999999999999999456E-89 -> 0 -dqcms474 comparesig 123.999999999999999999456000000000E+89 123.999999999999999999456E+89 -> 0 -dqcms475 comparesig 123.99999999999999999945600000000E-89 123.999999999999999999456E-89 -> 0 -dqcms476 comparesig 123.9999999999999999994560000000E+89 123.999999999999999999456E+89 -> 0 -dqcms477 comparesig 123.999999999999999999456000000E-89 123.999999999999999999456E-89 -> 0 -dqcms478 comparesig 123.99999999999999999945600000E+89 123.999999999999999999456E+89 -> 0 -dqcms479 comparesig 123.9999999999999999994560000E-89 123.999999999999999999456E-89 -> 0 -dqcms480 comparesig 123.999999999999999999456000E+89 123.999999999999999999456E+89 -> 0 -dqcms481 comparesig 123.99999999999999999945600E-89 123.999999999999999999456E-89 -> 0 -dqcms482 comparesig 123.9999999999999999994560E+89 123.999999999999999999456E+89 -> 0 -dqcms483 comparesig 123.999999999999999999456E-89 123.999999999999999999456E-89 -> 0 -dqcms487 comparesig 123.999999999999999999456E+89 123.9999999999999999994560000000000E+89 -> 0 -dqcms488 comparesig 123.999999999999999999456E-89 123.999999999999999999456000000000E-89 -> 0 -dqcms489 comparesig 123.999999999999999999456E+89 123.99999999999999999945600000000E+89 -> 0 -dqcms490 comparesig 123.999999999999999999456E-89 123.9999999999999999994560000000E-89 -> 0 -dqcms491 comparesig 123.999999999999999999456E+89 123.999999999999999999456000000E+89 -> 0 -dqcms492 comparesig 123.999999999999999999456E-89 123.99999999999999999945600000E-89 -> 0 -dqcms493 comparesig 123.999999999999999999456E+89 123.9999999999999999994560000E+89 -> 0 -dqcms494 comparesig 123.999999999999999999456E-89 123.999999999999999999456000E-89 -> 0 -dqcms495 comparesig 123.999999999999999999456E+89 123.99999999999999999945600E+89 -> 0 -dqcms496 comparesig 123.999999999999999999456E-89 123.9999999999999999994560E-89 -> 0 -dqcms497 comparesig 123.999999999999999999456E+89 123.999999999999999999456E+89 -> 0 - --- wide-ranging, around precision; signs equal -dqcms500 comparesig 1 1E-15 -> 1 -dqcms501 comparesig 1 1E-14 -> 1 -dqcms502 comparesig 1 1E-13 -> 1 -dqcms503 comparesig 1 1E-12 -> 1 -dqcms504 comparesig 1 1E-11 -> 1 -dqcms505 comparesig 1 1E-10 -> 1 -dqcms506 comparesig 1 1E-9 -> 1 -dqcms507 comparesig 1 1E-8 -> 1 -dqcms508 comparesig 1 1E-7 -> 1 -dqcms509 comparesig 1 1E-6 -> 1 -dqcms510 comparesig 1 1E-5 -> 1 -dqcms511 comparesig 1 1E-4 -> 1 -dqcms512 comparesig 1 1E-3 -> 1 -dqcms513 comparesig 1 1E-2 -> 1 -dqcms514 comparesig 1 1E-1 -> 1 -dqcms515 comparesig 1 1E-0 -> 0 -dqcms516 comparesig 1 1E+1 -> -1 -dqcms517 comparesig 1 1E+2 -> -1 -dqcms518 comparesig 1 1E+3 -> -1 -dqcms519 comparesig 1 1E+4 -> -1 -dqcms521 comparesig 1 1E+5 -> -1 -dqcms522 comparesig 1 1E+6 -> -1 -dqcms523 comparesig 1 1E+7 -> -1 -dqcms524 comparesig 1 1E+8 -> -1 -dqcms525 comparesig 1 1E+9 -> -1 -dqcms526 comparesig 1 1E+10 -> -1 -dqcms527 comparesig 1 1E+11 -> -1 -dqcms528 comparesig 1 1E+12 -> -1 -dqcms529 comparesig 1 1E+13 -> -1 -dqcms530 comparesig 1 1E+14 -> -1 -dqcms531 comparesig 1 1E+15 -> -1 --- LR swap -dqcms540 comparesig 1E-15 1 -> -1 -dqcms541 comparesig 1E-14 1 -> -1 -dqcms542 comparesig 1E-13 1 -> -1 -dqcms543 comparesig 1E-12 1 -> -1 -dqcms544 comparesig 1E-11 1 -> -1 -dqcms545 comparesig 1E-10 1 -> -1 -dqcms546 comparesig 1E-9 1 -> -1 -dqcms547 comparesig 1E-8 1 -> -1 -dqcms548 comparesig 1E-7 1 -> -1 -dqcms549 comparesig 1E-6 1 -> -1 -dqcms550 comparesig 1E-5 1 -> -1 -dqcms551 comparesig 1E-4 1 -> -1 -dqcms552 comparesig 1E-3 1 -> -1 -dqcms553 comparesig 1E-2 1 -> -1 -dqcms554 comparesig 1E-1 1 -> -1 -dqcms555 comparesig 1E-0 1 -> 0 -dqcms556 comparesig 1E+1 1 -> 1 -dqcms557 comparesig 1E+2 1 -> 1 -dqcms558 comparesig 1E+3 1 -> 1 -dqcms559 comparesig 1E+4 1 -> 1 -dqcms561 comparesig 1E+5 1 -> 1 -dqcms562 comparesig 1E+6 1 -> 1 -dqcms563 comparesig 1E+7 1 -> 1 -dqcms564 comparesig 1E+8 1 -> 1 -dqcms565 comparesig 1E+9 1 -> 1 -dqcms566 comparesig 1E+10 1 -> 1 -dqcms567 comparesig 1E+11 1 -> 1 -dqcms568 comparesig 1E+12 1 -> 1 -dqcms569 comparesig 1E+13 1 -> 1 -dqcms570 comparesig 1E+14 1 -> 1 -dqcms571 comparesig 1E+15 1 -> 1 --- similar with a useful coefficient, one side only -dqcms580 comparesig 0.000000987654321 1E-15 -> 1 -dqcms581 comparesig 0.000000987654321 1E-14 -> 1 -dqcms582 comparesig 0.000000987654321 1E-13 -> 1 -dqcms583 comparesig 0.000000987654321 1E-12 -> 1 -dqcms584 comparesig 0.000000987654321 1E-11 -> 1 -dqcms585 comparesig 0.000000987654321 1E-10 -> 1 -dqcms586 comparesig 0.000000987654321 1E-9 -> 1 -dqcms587 comparesig 0.000000987654321 1E-8 -> 1 -dqcms588 comparesig 0.000000987654321 1E-7 -> 1 -dqcms589 comparesig 0.000000987654321 1E-6 -> -1 -dqcms590 comparesig 0.000000987654321 1E-5 -> -1 -dqcms591 comparesig 0.000000987654321 1E-4 -> -1 -dqcms592 comparesig 0.000000987654321 1E-3 -> -1 -dqcms593 comparesig 0.000000987654321 1E-2 -> -1 -dqcms594 comparesig 0.000000987654321 1E-1 -> -1 -dqcms595 comparesig 0.000000987654321 1E-0 -> -1 -dqcms596 comparesig 0.000000987654321 1E+1 -> -1 -dqcms597 comparesig 0.000000987654321 1E+2 -> -1 -dqcms598 comparesig 0.000000987654321 1E+3 -> -1 -dqcms599 comparesig 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -dqcms600 comparesig 12 12.2345 -> -1 -dqcms601 comparesig 12.0 12.2345 -> -1 -dqcms602 comparesig 12.00 12.2345 -> -1 -dqcms603 comparesig 12.000 12.2345 -> -1 -dqcms604 comparesig 12.0000 12.2345 -> -1 -dqcms605 comparesig 12.00000 12.2345 -> -1 -dqcms606 comparesig 12.000000 12.2345 -> -1 -dqcms607 comparesig 12.0000000 12.2345 -> -1 -dqcms608 comparesig 12.00000000 12.2345 -> -1 -dqcms609 comparesig 12.000000000 12.2345 -> -1 -dqcms610 comparesig 12.1234 12 -> 1 -dqcms611 comparesig 12.1234 12.0 -> 1 -dqcms612 comparesig 12.1234 12.00 -> 1 -dqcms613 comparesig 12.1234 12.000 -> 1 -dqcms614 comparesig 12.1234 12.0000 -> 1 -dqcms615 comparesig 12.1234 12.00000 -> 1 -dqcms616 comparesig 12.1234 12.000000 -> 1 -dqcms617 comparesig 12.1234 12.0000000 -> 1 -dqcms618 comparesig 12.1234 12.00000000 -> 1 -dqcms619 comparesig 12.1234 12.000000000 -> 1 -dqcms620 comparesig -12 -12.2345 -> 1 -dqcms621 comparesig -12.0 -12.2345 -> 1 -dqcms622 comparesig -12.00 -12.2345 -> 1 -dqcms623 comparesig -12.000 -12.2345 -> 1 -dqcms624 comparesig -12.0000 -12.2345 -> 1 -dqcms625 comparesig -12.00000 -12.2345 -> 1 -dqcms626 comparesig -12.000000 -12.2345 -> 1 -dqcms627 comparesig -12.0000000 -12.2345 -> 1 -dqcms628 comparesig -12.00000000 -12.2345 -> 1 -dqcms629 comparesig -12.000000000 -12.2345 -> 1 -dqcms630 comparesig -12.1234 -12 -> -1 -dqcms631 comparesig -12.1234 -12.0 -> -1 -dqcms632 comparesig -12.1234 -12.00 -> -1 -dqcms633 comparesig -12.1234 -12.000 -> -1 -dqcms634 comparesig -12.1234 -12.0000 -> -1 -dqcms635 comparesig -12.1234 -12.00000 -> -1 -dqcms636 comparesig -12.1234 -12.000000 -> -1 -dqcms637 comparesig -12.1234 -12.0000000 -> -1 -dqcms638 comparesig -12.1234 -12.00000000 -> -1 -dqcms639 comparesig -12.1234 -12.000000000 -> -1 - --- extended zeros -dqcms640 comparesig 0 0 -> 0 -dqcms641 comparesig 0 -0 -> 0 -dqcms642 comparesig 0 -0.0 -> 0 -dqcms643 comparesig 0 0.0 -> 0 -dqcms644 comparesig -0 0 -> 0 -dqcms645 comparesig -0 -0 -> 0 -dqcms646 comparesig -0 -0.0 -> 0 -dqcms647 comparesig -0 0.0 -> 0 -dqcms648 comparesig 0.0 0 -> 0 -dqcms649 comparesig 0.0 -0 -> 0 -dqcms650 comparesig 0.0 -0.0 -> 0 -dqcms651 comparesig 0.0 0.0 -> 0 -dqcms652 comparesig -0.0 0 -> 0 -dqcms653 comparesig -0.0 -0 -> 0 -dqcms654 comparesig -0.0 -0.0 -> 0 -dqcms655 comparesig -0.0 0.0 -> 0 - -dqcms656 comparesig -0E1 0.0 -> 0 -dqcms657 comparesig -0E2 0.0 -> 0 -dqcms658 comparesig 0E1 0.0 -> 0 -dqcms659 comparesig 0E2 0.0 -> 0 -dqcms660 comparesig -0E1 0 -> 0 -dqcms661 comparesig -0E2 0 -> 0 -dqcms662 comparesig 0E1 0 -> 0 -dqcms663 comparesig 0E2 0 -> 0 -dqcms664 comparesig -0E1 -0E1 -> 0 -dqcms665 comparesig -0E2 -0E1 -> 0 -dqcms666 comparesig 0E1 -0E1 -> 0 -dqcms667 comparesig 0E2 -0E1 -> 0 -dqcms668 comparesig -0E1 -0E2 -> 0 -dqcms669 comparesig -0E2 -0E2 -> 0 -dqcms670 comparesig 0E1 -0E2 -> 0 -dqcms671 comparesig 0E2 -0E2 -> 0 -dqcms672 comparesig -0E1 0E1 -> 0 -dqcms673 comparesig -0E2 0E1 -> 0 -dqcms674 comparesig 0E1 0E1 -> 0 -dqcms675 comparesig 0E2 0E1 -> 0 -dqcms676 comparesig -0E1 0E2 -> 0 -dqcms677 comparesig -0E2 0E2 -> 0 -dqcms678 comparesig 0E1 0E2 -> 0 -dqcms679 comparesig 0E2 0E2 -> 0 - --- trailing zeros; unit-y -dqcms680 comparesig 12 12 -> 0 -dqcms681 comparesig 12 12.0 -> 0 -dqcms682 comparesig 12 12.00 -> 0 -dqcms683 comparesig 12 12.000 -> 0 -dqcms684 comparesig 12 12.0000 -> 0 -dqcms685 comparesig 12 12.00000 -> 0 -dqcms686 comparesig 12 12.000000 -> 0 -dqcms687 comparesig 12 12.0000000 -> 0 -dqcms688 comparesig 12 12.00000000 -> 0 -dqcms689 comparesig 12 12.000000000 -> 0 -dqcms690 comparesig 12 12 -> 0 -dqcms691 comparesig 12.0 12 -> 0 -dqcms692 comparesig 12.00 12 -> 0 -dqcms693 comparesig 12.000 12 -> 0 -dqcms694 comparesig 12.0000 12 -> 0 -dqcms695 comparesig 12.00000 12 -> 0 -dqcms696 comparesig 12.000000 12 -> 0 -dqcms697 comparesig 12.0000000 12 -> 0 -dqcms698 comparesig 12.00000000 12 -> 0 -dqcms699 comparesig 12.000000000 12 -> 0 - --- first, second, & last digit -dqcms700 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123455 -> 1 -dqcms701 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 -dqcms702 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123457 -> -1 -dqcms703 comparesig 1234567899999999999999999990123456 0234567899999999999999999990123456 -> 1 -dqcms704 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 -dqcms705 comparesig 1234567899999999999999999990123456 2234567899999999999999999990123456 -> -1 -dqcms706 comparesig 1134567899999999999999999990123456 1034567899999999999999999990123456 -> 1 -dqcms707 comparesig 1134567899999999999999999990123456 1134567899999999999999999990123456 -> 0 -dqcms708 comparesig 1134567899999999999999999990123456 1234567899999999999999999990123456 -> -1 - --- miscellaneous -dqcms721 comparesig 12345678000 1 -> 1 -dqcms722 comparesig 1 12345678000 -> -1 -dqcms723 comparesig 1234567800 1 -> 1 -dqcms724 comparesig 1 1234567800 -> -1 -dqcms725 comparesig 1234567890 1 -> 1 -dqcms726 comparesig 1 1234567890 -> -1 -dqcms727 comparesig 1234567891 1 -> 1 -dqcms728 comparesig 1 1234567891 -> -1 -dqcms729 comparesig 12345678901 1 -> 1 -dqcms730 comparesig 1 12345678901 -> -1 -dqcms731 comparesig 1234567896 1 -> 1 -dqcms732 comparesig 1 1234567896 -> -1 - --- residue cases at lower precision -dqcms740 comparesig 1 0.9999999 -> 1 -dqcms741 comparesig 1 0.999999 -> 1 -dqcms742 comparesig 1 0.99999 -> 1 -dqcms743 comparesig 1 1.0000 -> 0 -dqcms744 comparesig 1 1.00001 -> -1 -dqcms745 comparesig 1 1.000001 -> -1 -dqcms746 comparesig 1 1.0000001 -> -1 -dqcms750 comparesig 0.9999999 1 -> -1 -dqcms751 comparesig 0.999999 1 -> -1 -dqcms752 comparesig 0.99999 1 -> -1 -dqcms753 comparesig 1.0000 1 -> 0 -dqcms754 comparesig 1.00001 1 -> 1 -dqcms755 comparesig 1.000001 1 -> 1 -dqcms756 comparesig 1.0000001 1 -> 1 - --- Specials -dqcms780 comparesig Inf -Inf -> 1 -dqcms781 comparesig Inf -1000 -> 1 -dqcms782 comparesig Inf -1 -> 1 -dqcms783 comparesig Inf -0 -> 1 -dqcms784 comparesig Inf 0 -> 1 -dqcms785 comparesig Inf 1 -> 1 -dqcms786 comparesig Inf 1000 -> 1 -dqcms787 comparesig Inf Inf -> 0 -dqcms788 comparesig -1000 Inf -> -1 -dqcms789 comparesig -Inf Inf -> -1 -dqcms790 comparesig -1 Inf -> -1 -dqcms791 comparesig -0 Inf -> -1 -dqcms792 comparesig 0 Inf -> -1 -dqcms793 comparesig 1 Inf -> -1 -dqcms794 comparesig 1000 Inf -> -1 -dqcms795 comparesig Inf Inf -> 0 - -dqcms800 comparesig -Inf -Inf -> 0 -dqcms801 comparesig -Inf -1000 -> -1 -dqcms802 comparesig -Inf -1 -> -1 -dqcms803 comparesig -Inf -0 -> -1 -dqcms804 comparesig -Inf 0 -> -1 -dqcms805 comparesig -Inf 1 -> -1 -dqcms806 comparesig -Inf 1000 -> -1 -dqcms807 comparesig -Inf Inf -> -1 -dqcms808 comparesig -Inf -Inf -> 0 -dqcms809 comparesig -1000 -Inf -> 1 -dqcms810 comparesig -1 -Inf -> 1 -dqcms811 comparesig -0 -Inf -> 1 -dqcms812 comparesig 0 -Inf -> 1 -dqcms813 comparesig 1 -Inf -> 1 -dqcms814 comparesig 1000 -Inf -> 1 -dqcms815 comparesig Inf -Inf -> 1 - -dqcms821 comparesig NaN -Inf -> NaN Invalid_operation -dqcms822 comparesig NaN -1000 -> NaN Invalid_operation -dqcms823 comparesig NaN -1 -> NaN Invalid_operation -dqcms824 comparesig NaN -0 -> NaN Invalid_operation -dqcms825 comparesig NaN 0 -> NaN Invalid_operation -dqcms826 comparesig NaN 1 -> NaN Invalid_operation -dqcms827 comparesig NaN 1000 -> NaN Invalid_operation -dqcms828 comparesig NaN Inf -> NaN Invalid_operation -dqcms829 comparesig NaN NaN -> NaN Invalid_operation -dqcms830 comparesig -Inf NaN -> NaN Invalid_operation -dqcms831 comparesig -1000 NaN -> NaN Invalid_operation -dqcms832 comparesig -1 NaN -> NaN Invalid_operation -dqcms833 comparesig -0 NaN -> NaN Invalid_operation -dqcms834 comparesig 0 NaN -> NaN Invalid_operation -dqcms835 comparesig 1 NaN -> NaN Invalid_operation -dqcms836 comparesig 1000 NaN -> NaN Invalid_operation -dqcms837 comparesig Inf NaN -> NaN Invalid_operation -dqcms838 comparesig -NaN -NaN -> -NaN Invalid_operation -dqcms839 comparesig +NaN -NaN -> NaN Invalid_operation -dqcms840 comparesig -NaN +NaN -> -NaN Invalid_operation - -dqcms841 comparesig sNaN -Inf -> NaN Invalid_operation -dqcms842 comparesig sNaN -1000 -> NaN Invalid_operation -dqcms843 comparesig sNaN -1 -> NaN Invalid_operation -dqcms844 comparesig sNaN -0 -> NaN Invalid_operation -dqcms845 comparesig sNaN 0 -> NaN Invalid_operation -dqcms846 comparesig sNaN 1 -> NaN Invalid_operation -dqcms847 comparesig sNaN 1000 -> NaN Invalid_operation -dqcms848 comparesig sNaN NaN -> NaN Invalid_operation -dqcms849 comparesig sNaN sNaN -> NaN Invalid_operation -dqcms850 comparesig NaN sNaN -> NaN Invalid_operation -dqcms851 comparesig -Inf sNaN -> NaN Invalid_operation -dqcms852 comparesig -1000 sNaN -> NaN Invalid_operation -dqcms853 comparesig -1 sNaN -> NaN Invalid_operation -dqcms854 comparesig -0 sNaN -> NaN Invalid_operation -dqcms855 comparesig 0 sNaN -> NaN Invalid_operation -dqcms856 comparesig 1 sNaN -> NaN Invalid_operation -dqcms857 comparesig 1000 sNaN -> NaN Invalid_operation -dqcms858 comparesig Inf sNaN -> NaN Invalid_operation -dqcms859 comparesig NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqcms860 comparesig NaN9 -Inf -> NaN9 Invalid_operation -dqcms861 comparesig NaN8 999 -> NaN8 Invalid_operation -dqcms862 comparesig NaN77 Inf -> NaN77 Invalid_operation -dqcms863 comparesig -NaN67 NaN5 -> -NaN67 Invalid_operation -dqcms864 comparesig -Inf -NaN4 -> -NaN4 Invalid_operation -dqcms865 comparesig -999 -NaN33 -> -NaN33 Invalid_operation -dqcms866 comparesig Inf NaN2 -> NaN2 Invalid_operation -dqcms867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation -dqcms868 comparesig +NaN41 -NaN42 -> NaN41 Invalid_operation -dqcms869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation -dqcms870 comparesig +NaN41 +NaN42 -> NaN41 Invalid_operation - -dqcms871 comparesig -sNaN99 -Inf -> -NaN99 Invalid_operation -dqcms872 comparesig sNaN98 -11 -> NaN98 Invalid_operation -dqcms873 comparesig sNaN97 NaN -> NaN97 Invalid_operation -dqcms874 comparesig sNaN16 sNaN94 -> NaN16 Invalid_operation -dqcms875 comparesig NaN85 sNaN83 -> NaN83 Invalid_operation -dqcms876 comparesig -Inf sNaN92 -> NaN92 Invalid_operation -dqcms877 comparesig 088 sNaN81 -> NaN81 Invalid_operation -dqcms878 comparesig Inf sNaN90 -> NaN90 Invalid_operation -dqcms879 comparesig NaN -sNaN89 -> -NaN89 Invalid_operation - --- wide range -dqcms880 comparesig +1.23456789012345E-0 9E+6144 -> -1 -dqcms881 comparesig 9E+6144 +1.23456789012345E-0 -> 1 -dqcms882 comparesig +0.100 9E-6143 -> 1 -dqcms883 comparesig 9E-6143 +0.100 -> -1 -dqcms885 comparesig -1.23456789012345E-0 9E+6144 -> -1 -dqcms886 comparesig 9E+6144 -1.23456789012345E-0 -> 1 -dqcms887 comparesig -0.100 9E-6143 -> -1 -dqcms888 comparesig 9E-6143 -0.100 -> 1 - --- signs -dqcms901 comparesig 1e+77 1e+11 -> 1 -dqcms902 comparesig 1e+77 -1e+11 -> 1 -dqcms903 comparesig -1e+77 1e+11 -> -1 -dqcms904 comparesig -1e+77 -1e+11 -> -1 -dqcms905 comparesig 1e-77 1e-11 -> -1 -dqcms906 comparesig 1e-77 -1e-11 -> 1 -dqcms907 comparesig -1e-77 1e-11 -> -1 -dqcms908 comparesig -1e-77 -1e-11 -> 1 - --- Null tests -dqcms990 comparesig 10 # -> NaN Invalid_operation -dqcms991 comparesig # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqCompareSig.decTest -- decQuad comparison; all NaNs signal -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqcms001 comparesig -2 -2 -> 0 +dqcms002 comparesig -2 -1 -> -1 +dqcms003 comparesig -2 0 -> -1 +dqcms004 comparesig -2 1 -> -1 +dqcms005 comparesig -2 2 -> -1 +dqcms006 comparesig -1 -2 -> 1 +dqcms007 comparesig -1 -1 -> 0 +dqcms008 comparesig -1 0 -> -1 +dqcms009 comparesig -1 1 -> -1 +dqcms010 comparesig -1 2 -> -1 +dqcms011 comparesig 0 -2 -> 1 +dqcms012 comparesig 0 -1 -> 1 +dqcms013 comparesig 0 0 -> 0 +dqcms014 comparesig 0 1 -> -1 +dqcms015 comparesig 0 2 -> -1 +dqcms016 comparesig 1 -2 -> 1 +dqcms017 comparesig 1 -1 -> 1 +dqcms018 comparesig 1 0 -> 1 +dqcms019 comparesig 1 1 -> 0 +dqcms020 comparesig 1 2 -> -1 +dqcms021 comparesig 2 -2 -> 1 +dqcms022 comparesig 2 -1 -> 1 +dqcms023 comparesig 2 0 -> 1 +dqcms025 comparesig 2 1 -> 1 +dqcms026 comparesig 2 2 -> 0 + +dqcms031 comparesig -20 -20 -> 0 +dqcms032 comparesig -20 -10 -> -1 +dqcms033 comparesig -20 00 -> -1 +dqcms034 comparesig -20 10 -> -1 +dqcms035 comparesig -20 20 -> -1 +dqcms036 comparesig -10 -20 -> 1 +dqcms037 comparesig -10 -10 -> 0 +dqcms038 comparesig -10 00 -> -1 +dqcms039 comparesig -10 10 -> -1 +dqcms040 comparesig -10 20 -> -1 +dqcms041 comparesig 00 -20 -> 1 +dqcms042 comparesig 00 -10 -> 1 +dqcms043 comparesig 00 00 -> 0 +dqcms044 comparesig 00 10 -> -1 +dqcms045 comparesig 00 20 -> -1 +dqcms046 comparesig 10 -20 -> 1 +dqcms047 comparesig 10 -10 -> 1 +dqcms048 comparesig 10 00 -> 1 +dqcms049 comparesig 10 10 -> 0 +dqcms050 comparesig 10 20 -> -1 +dqcms051 comparesig 20 -20 -> 1 +dqcms052 comparesig 20 -10 -> 1 +dqcms053 comparesig 20 00 -> 1 +dqcms055 comparesig 20 10 -> 1 +dqcms056 comparesig 20 20 -> 0 + +dqcms061 comparesig -2.0 -2.0 -> 0 +dqcms062 comparesig -2.0 -1.0 -> -1 +dqcms063 comparesig -2.0 0.0 -> -1 +dqcms064 comparesig -2.0 1.0 -> -1 +dqcms065 comparesig -2.0 2.0 -> -1 +dqcms066 comparesig -1.0 -2.0 -> 1 +dqcms067 comparesig -1.0 -1.0 -> 0 +dqcms068 comparesig -1.0 0.0 -> -1 +dqcms069 comparesig -1.0 1.0 -> -1 +dqcms070 comparesig -1.0 2.0 -> -1 +dqcms071 comparesig 0.0 -2.0 -> 1 +dqcms072 comparesig 0.0 -1.0 -> 1 +dqcms073 comparesig 0.0 0.0 -> 0 +dqcms074 comparesig 0.0 1.0 -> -1 +dqcms075 comparesig 0.0 2.0 -> -1 +dqcms076 comparesig 1.0 -2.0 -> 1 +dqcms077 comparesig 1.0 -1.0 -> 1 +dqcms078 comparesig 1.0 0.0 -> 1 +dqcms079 comparesig 1.0 1.0 -> 0 +dqcms080 comparesig 1.0 2.0 -> -1 +dqcms081 comparesig 2.0 -2.0 -> 1 +dqcms082 comparesig 2.0 -1.0 -> 1 +dqcms083 comparesig 2.0 0.0 -> 1 +dqcms085 comparesig 2.0 1.0 -> 1 +dqcms086 comparesig 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +dqcms090 comparesig 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 0 +dqcms091 comparesig -9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> -1 +dqcms092 comparesig 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 1 +dqcms093 comparesig -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0 + +-- some differing length/exponent cases +dqcms100 comparesig 7.0 7.0 -> 0 +dqcms101 comparesig 7.0 7 -> 0 +dqcms102 comparesig 7 7.0 -> 0 +dqcms103 comparesig 7E+0 7.0 -> 0 +dqcms104 comparesig 70E-1 7.0 -> 0 +dqcms105 comparesig 0.7E+1 7 -> 0 +dqcms106 comparesig 70E-1 7 -> 0 +dqcms107 comparesig 7.0 7E+0 -> 0 +dqcms108 comparesig 7.0 70E-1 -> 0 +dqcms109 comparesig 7 0.7E+1 -> 0 +dqcms110 comparesig 7 70E-1 -> 0 + +dqcms120 comparesig 8.0 7.0 -> 1 +dqcms121 comparesig 8.0 7 -> 1 +dqcms122 comparesig 8 7.0 -> 1 +dqcms123 comparesig 8E+0 7.0 -> 1 +dqcms124 comparesig 80E-1 7.0 -> 1 +dqcms125 comparesig 0.8E+1 7 -> 1 +dqcms126 comparesig 80E-1 7 -> 1 +dqcms127 comparesig 8.0 7E+0 -> 1 +dqcms128 comparesig 8.0 70E-1 -> 1 +dqcms129 comparesig 8 0.7E+1 -> 1 +dqcms130 comparesig 8 70E-1 -> 1 + +dqcms140 comparesig 8.0 9.0 -> -1 +dqcms141 comparesig 8.0 9 -> -1 +dqcms142 comparesig 8 9.0 -> -1 +dqcms143 comparesig 8E+0 9.0 -> -1 +dqcms144 comparesig 80E-1 9.0 -> -1 +dqcms145 comparesig 0.8E+1 9 -> -1 +dqcms146 comparesig 80E-1 9 -> -1 +dqcms147 comparesig 8.0 9E+0 -> -1 +dqcms148 comparesig 8.0 90E-1 -> -1 +dqcms149 comparesig 8 0.9E+1 -> -1 +dqcms150 comparesig 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +dqcms200 comparesig -7.0 7.0 -> -1 +dqcms201 comparesig -7.0 7 -> -1 +dqcms202 comparesig -7 7.0 -> -1 +dqcms203 comparesig -7E+0 7.0 -> -1 +dqcms204 comparesig -70E-1 7.0 -> -1 +dqcms205 comparesig -0.7E+1 7 -> -1 +dqcms206 comparesig -70E-1 7 -> -1 +dqcms207 comparesig -7.0 7E+0 -> -1 +dqcms208 comparesig -7.0 70E-1 -> -1 +dqcms209 comparesig -7 0.7E+1 -> -1 +dqcms210 comparesig -7 70E-1 -> -1 + +dqcms220 comparesig -8.0 7.0 -> -1 +dqcms221 comparesig -8.0 7 -> -1 +dqcms222 comparesig -8 7.0 -> -1 +dqcms223 comparesig -8E+0 7.0 -> -1 +dqcms224 comparesig -80E-1 7.0 -> -1 +dqcms225 comparesig -0.8E+1 7 -> -1 +dqcms226 comparesig -80E-1 7 -> -1 +dqcms227 comparesig -8.0 7E+0 -> -1 +dqcms228 comparesig -8.0 70E-1 -> -1 +dqcms229 comparesig -8 0.7E+1 -> -1 +dqcms230 comparesig -8 70E-1 -> -1 + +dqcms240 comparesig -8.0 9.0 -> -1 +dqcms241 comparesig -8.0 9 -> -1 +dqcms242 comparesig -8 9.0 -> -1 +dqcms243 comparesig -8E+0 9.0 -> -1 +dqcms244 comparesig -80E-1 9.0 -> -1 +dqcms245 comparesig -0.8E+1 9 -> -1 +dqcms246 comparesig -80E-1 9 -> -1 +dqcms247 comparesig -8.0 9E+0 -> -1 +dqcms248 comparesig -8.0 90E-1 -> -1 +dqcms249 comparesig -8 0.9E+1 -> -1 +dqcms250 comparesig -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +dqcms300 comparesig 7.0 -7.0 -> 1 +dqcms301 comparesig 7.0 -7 -> 1 +dqcms302 comparesig 7 -7.0 -> 1 +dqcms303 comparesig 7E+0 -7.0 -> 1 +dqcms304 comparesig 70E-1 -7.0 -> 1 +dqcms305 comparesig .7E+1 -7 -> 1 +dqcms306 comparesig 70E-1 -7 -> 1 +dqcms307 comparesig 7.0 -7E+0 -> 1 +dqcms308 comparesig 7.0 -70E-1 -> 1 +dqcms309 comparesig 7 -.7E+1 -> 1 +dqcms310 comparesig 7 -70E-1 -> 1 + +dqcms320 comparesig 8.0 -7.0 -> 1 +dqcms321 comparesig 8.0 -7 -> 1 +dqcms322 comparesig 8 -7.0 -> 1 +dqcms323 comparesig 8E+0 -7.0 -> 1 +dqcms324 comparesig 80E-1 -7.0 -> 1 +dqcms325 comparesig .8E+1 -7 -> 1 +dqcms326 comparesig 80E-1 -7 -> 1 +dqcms327 comparesig 8.0 -7E+0 -> 1 +dqcms328 comparesig 8.0 -70E-1 -> 1 +dqcms329 comparesig 8 -.7E+1 -> 1 +dqcms330 comparesig 8 -70E-1 -> 1 + +dqcms340 comparesig 8.0 -9.0 -> 1 +dqcms341 comparesig 8.0 -9 -> 1 +dqcms342 comparesig 8 -9.0 -> 1 +dqcms343 comparesig 8E+0 -9.0 -> 1 +dqcms344 comparesig 80E-1 -9.0 -> 1 +dqcms345 comparesig .8E+1 -9 -> 1 +dqcms346 comparesig 80E-1 -9 -> 1 +dqcms347 comparesig 8.0 -9E+0 -> 1 +dqcms348 comparesig 8.0 -90E-1 -> 1 +dqcms349 comparesig 8 -.9E+1 -> 1 +dqcms350 comparesig 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +dqcms400 comparesig -7.0 -7.0 -> 0 +dqcms401 comparesig -7.0 -7 -> 0 +dqcms402 comparesig -7 -7.0 -> 0 +dqcms403 comparesig -7E+0 -7.0 -> 0 +dqcms404 comparesig -70E-1 -7.0 -> 0 +dqcms405 comparesig -.7E+1 -7 -> 0 +dqcms406 comparesig -70E-1 -7 -> 0 +dqcms407 comparesig -7.0 -7E+0 -> 0 +dqcms408 comparesig -7.0 -70E-1 -> 0 +dqcms409 comparesig -7 -.7E+1 -> 0 +dqcms410 comparesig -7 -70E-1 -> 0 + +dqcms420 comparesig -8.0 -7.0 -> -1 +dqcms421 comparesig -8.0 -7 -> -1 +dqcms422 comparesig -8 -7.0 -> -1 +dqcms423 comparesig -8E+0 -7.0 -> -1 +dqcms424 comparesig -80E-1 -7.0 -> -1 +dqcms425 comparesig -.8E+1 -7 -> -1 +dqcms426 comparesig -80E-1 -7 -> -1 +dqcms427 comparesig -8.0 -7E+0 -> -1 +dqcms428 comparesig -8.0 -70E-1 -> -1 +dqcms429 comparesig -8 -.7E+1 -> -1 +dqcms430 comparesig -8 -70E-1 -> -1 + +dqcms440 comparesig -8.0 -9.0 -> 1 +dqcms441 comparesig -8.0 -9 -> 1 +dqcms442 comparesig -8 -9.0 -> 1 +dqcms443 comparesig -8E+0 -9.0 -> 1 +dqcms444 comparesig -80E-1 -9.0 -> 1 +dqcms445 comparesig -.8E+1 -9 -> 1 +dqcms446 comparesig -80E-1 -9 -> 1 +dqcms447 comparesig -8.0 -9E+0 -> 1 +dqcms448 comparesig -8.0 -90E-1 -> 1 +dqcms449 comparesig -8 -.9E+1 -> 1 +dqcms450 comparesig -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +dqcms473 comparesig 123.9999999999999999994560000000000E-89 123.999999999999999999456E-89 -> 0 +dqcms474 comparesig 123.999999999999999999456000000000E+89 123.999999999999999999456E+89 -> 0 +dqcms475 comparesig 123.99999999999999999945600000000E-89 123.999999999999999999456E-89 -> 0 +dqcms476 comparesig 123.9999999999999999994560000000E+89 123.999999999999999999456E+89 -> 0 +dqcms477 comparesig 123.999999999999999999456000000E-89 123.999999999999999999456E-89 -> 0 +dqcms478 comparesig 123.99999999999999999945600000E+89 123.999999999999999999456E+89 -> 0 +dqcms479 comparesig 123.9999999999999999994560000E-89 123.999999999999999999456E-89 -> 0 +dqcms480 comparesig 123.999999999999999999456000E+89 123.999999999999999999456E+89 -> 0 +dqcms481 comparesig 123.99999999999999999945600E-89 123.999999999999999999456E-89 -> 0 +dqcms482 comparesig 123.9999999999999999994560E+89 123.999999999999999999456E+89 -> 0 +dqcms483 comparesig 123.999999999999999999456E-89 123.999999999999999999456E-89 -> 0 +dqcms487 comparesig 123.999999999999999999456E+89 123.9999999999999999994560000000000E+89 -> 0 +dqcms488 comparesig 123.999999999999999999456E-89 123.999999999999999999456000000000E-89 -> 0 +dqcms489 comparesig 123.999999999999999999456E+89 123.99999999999999999945600000000E+89 -> 0 +dqcms490 comparesig 123.999999999999999999456E-89 123.9999999999999999994560000000E-89 -> 0 +dqcms491 comparesig 123.999999999999999999456E+89 123.999999999999999999456000000E+89 -> 0 +dqcms492 comparesig 123.999999999999999999456E-89 123.99999999999999999945600000E-89 -> 0 +dqcms493 comparesig 123.999999999999999999456E+89 123.9999999999999999994560000E+89 -> 0 +dqcms494 comparesig 123.999999999999999999456E-89 123.999999999999999999456000E-89 -> 0 +dqcms495 comparesig 123.999999999999999999456E+89 123.99999999999999999945600E+89 -> 0 +dqcms496 comparesig 123.999999999999999999456E-89 123.9999999999999999994560E-89 -> 0 +dqcms497 comparesig 123.999999999999999999456E+89 123.999999999999999999456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +dqcms500 comparesig 1 1E-15 -> 1 +dqcms501 comparesig 1 1E-14 -> 1 +dqcms502 comparesig 1 1E-13 -> 1 +dqcms503 comparesig 1 1E-12 -> 1 +dqcms504 comparesig 1 1E-11 -> 1 +dqcms505 comparesig 1 1E-10 -> 1 +dqcms506 comparesig 1 1E-9 -> 1 +dqcms507 comparesig 1 1E-8 -> 1 +dqcms508 comparesig 1 1E-7 -> 1 +dqcms509 comparesig 1 1E-6 -> 1 +dqcms510 comparesig 1 1E-5 -> 1 +dqcms511 comparesig 1 1E-4 -> 1 +dqcms512 comparesig 1 1E-3 -> 1 +dqcms513 comparesig 1 1E-2 -> 1 +dqcms514 comparesig 1 1E-1 -> 1 +dqcms515 comparesig 1 1E-0 -> 0 +dqcms516 comparesig 1 1E+1 -> -1 +dqcms517 comparesig 1 1E+2 -> -1 +dqcms518 comparesig 1 1E+3 -> -1 +dqcms519 comparesig 1 1E+4 -> -1 +dqcms521 comparesig 1 1E+5 -> -1 +dqcms522 comparesig 1 1E+6 -> -1 +dqcms523 comparesig 1 1E+7 -> -1 +dqcms524 comparesig 1 1E+8 -> -1 +dqcms525 comparesig 1 1E+9 -> -1 +dqcms526 comparesig 1 1E+10 -> -1 +dqcms527 comparesig 1 1E+11 -> -1 +dqcms528 comparesig 1 1E+12 -> -1 +dqcms529 comparesig 1 1E+13 -> -1 +dqcms530 comparesig 1 1E+14 -> -1 +dqcms531 comparesig 1 1E+15 -> -1 +-- LR swap +dqcms540 comparesig 1E-15 1 -> -1 +dqcms541 comparesig 1E-14 1 -> -1 +dqcms542 comparesig 1E-13 1 -> -1 +dqcms543 comparesig 1E-12 1 -> -1 +dqcms544 comparesig 1E-11 1 -> -1 +dqcms545 comparesig 1E-10 1 -> -1 +dqcms546 comparesig 1E-9 1 -> -1 +dqcms547 comparesig 1E-8 1 -> -1 +dqcms548 comparesig 1E-7 1 -> -1 +dqcms549 comparesig 1E-6 1 -> -1 +dqcms550 comparesig 1E-5 1 -> -1 +dqcms551 comparesig 1E-4 1 -> -1 +dqcms552 comparesig 1E-3 1 -> -1 +dqcms553 comparesig 1E-2 1 -> -1 +dqcms554 comparesig 1E-1 1 -> -1 +dqcms555 comparesig 1E-0 1 -> 0 +dqcms556 comparesig 1E+1 1 -> 1 +dqcms557 comparesig 1E+2 1 -> 1 +dqcms558 comparesig 1E+3 1 -> 1 +dqcms559 comparesig 1E+4 1 -> 1 +dqcms561 comparesig 1E+5 1 -> 1 +dqcms562 comparesig 1E+6 1 -> 1 +dqcms563 comparesig 1E+7 1 -> 1 +dqcms564 comparesig 1E+8 1 -> 1 +dqcms565 comparesig 1E+9 1 -> 1 +dqcms566 comparesig 1E+10 1 -> 1 +dqcms567 comparesig 1E+11 1 -> 1 +dqcms568 comparesig 1E+12 1 -> 1 +dqcms569 comparesig 1E+13 1 -> 1 +dqcms570 comparesig 1E+14 1 -> 1 +dqcms571 comparesig 1E+15 1 -> 1 +-- similar with a useful coefficient, one side only +dqcms580 comparesig 0.000000987654321 1E-15 -> 1 +dqcms581 comparesig 0.000000987654321 1E-14 -> 1 +dqcms582 comparesig 0.000000987654321 1E-13 -> 1 +dqcms583 comparesig 0.000000987654321 1E-12 -> 1 +dqcms584 comparesig 0.000000987654321 1E-11 -> 1 +dqcms585 comparesig 0.000000987654321 1E-10 -> 1 +dqcms586 comparesig 0.000000987654321 1E-9 -> 1 +dqcms587 comparesig 0.000000987654321 1E-8 -> 1 +dqcms588 comparesig 0.000000987654321 1E-7 -> 1 +dqcms589 comparesig 0.000000987654321 1E-6 -> -1 +dqcms590 comparesig 0.000000987654321 1E-5 -> -1 +dqcms591 comparesig 0.000000987654321 1E-4 -> -1 +dqcms592 comparesig 0.000000987654321 1E-3 -> -1 +dqcms593 comparesig 0.000000987654321 1E-2 -> -1 +dqcms594 comparesig 0.000000987654321 1E-1 -> -1 +dqcms595 comparesig 0.000000987654321 1E-0 -> -1 +dqcms596 comparesig 0.000000987654321 1E+1 -> -1 +dqcms597 comparesig 0.000000987654321 1E+2 -> -1 +dqcms598 comparesig 0.000000987654321 1E+3 -> -1 +dqcms599 comparesig 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +dqcms600 comparesig 12 12.2345 -> -1 +dqcms601 comparesig 12.0 12.2345 -> -1 +dqcms602 comparesig 12.00 12.2345 -> -1 +dqcms603 comparesig 12.000 12.2345 -> -1 +dqcms604 comparesig 12.0000 12.2345 -> -1 +dqcms605 comparesig 12.00000 12.2345 -> -1 +dqcms606 comparesig 12.000000 12.2345 -> -1 +dqcms607 comparesig 12.0000000 12.2345 -> -1 +dqcms608 comparesig 12.00000000 12.2345 -> -1 +dqcms609 comparesig 12.000000000 12.2345 -> -1 +dqcms610 comparesig 12.1234 12 -> 1 +dqcms611 comparesig 12.1234 12.0 -> 1 +dqcms612 comparesig 12.1234 12.00 -> 1 +dqcms613 comparesig 12.1234 12.000 -> 1 +dqcms614 comparesig 12.1234 12.0000 -> 1 +dqcms615 comparesig 12.1234 12.00000 -> 1 +dqcms616 comparesig 12.1234 12.000000 -> 1 +dqcms617 comparesig 12.1234 12.0000000 -> 1 +dqcms618 comparesig 12.1234 12.00000000 -> 1 +dqcms619 comparesig 12.1234 12.000000000 -> 1 +dqcms620 comparesig -12 -12.2345 -> 1 +dqcms621 comparesig -12.0 -12.2345 -> 1 +dqcms622 comparesig -12.00 -12.2345 -> 1 +dqcms623 comparesig -12.000 -12.2345 -> 1 +dqcms624 comparesig -12.0000 -12.2345 -> 1 +dqcms625 comparesig -12.00000 -12.2345 -> 1 +dqcms626 comparesig -12.000000 -12.2345 -> 1 +dqcms627 comparesig -12.0000000 -12.2345 -> 1 +dqcms628 comparesig -12.00000000 -12.2345 -> 1 +dqcms629 comparesig -12.000000000 -12.2345 -> 1 +dqcms630 comparesig -12.1234 -12 -> -1 +dqcms631 comparesig -12.1234 -12.0 -> -1 +dqcms632 comparesig -12.1234 -12.00 -> -1 +dqcms633 comparesig -12.1234 -12.000 -> -1 +dqcms634 comparesig -12.1234 -12.0000 -> -1 +dqcms635 comparesig -12.1234 -12.00000 -> -1 +dqcms636 comparesig -12.1234 -12.000000 -> -1 +dqcms637 comparesig -12.1234 -12.0000000 -> -1 +dqcms638 comparesig -12.1234 -12.00000000 -> -1 +dqcms639 comparesig -12.1234 -12.000000000 -> -1 + +-- extended zeros +dqcms640 comparesig 0 0 -> 0 +dqcms641 comparesig 0 -0 -> 0 +dqcms642 comparesig 0 -0.0 -> 0 +dqcms643 comparesig 0 0.0 -> 0 +dqcms644 comparesig -0 0 -> 0 +dqcms645 comparesig -0 -0 -> 0 +dqcms646 comparesig -0 -0.0 -> 0 +dqcms647 comparesig -0 0.0 -> 0 +dqcms648 comparesig 0.0 0 -> 0 +dqcms649 comparesig 0.0 -0 -> 0 +dqcms650 comparesig 0.0 -0.0 -> 0 +dqcms651 comparesig 0.0 0.0 -> 0 +dqcms652 comparesig -0.0 0 -> 0 +dqcms653 comparesig -0.0 -0 -> 0 +dqcms654 comparesig -0.0 -0.0 -> 0 +dqcms655 comparesig -0.0 0.0 -> 0 + +dqcms656 comparesig -0E1 0.0 -> 0 +dqcms657 comparesig -0E2 0.0 -> 0 +dqcms658 comparesig 0E1 0.0 -> 0 +dqcms659 comparesig 0E2 0.0 -> 0 +dqcms660 comparesig -0E1 0 -> 0 +dqcms661 comparesig -0E2 0 -> 0 +dqcms662 comparesig 0E1 0 -> 0 +dqcms663 comparesig 0E2 0 -> 0 +dqcms664 comparesig -0E1 -0E1 -> 0 +dqcms665 comparesig -0E2 -0E1 -> 0 +dqcms666 comparesig 0E1 -0E1 -> 0 +dqcms667 comparesig 0E2 -0E1 -> 0 +dqcms668 comparesig -0E1 -0E2 -> 0 +dqcms669 comparesig -0E2 -0E2 -> 0 +dqcms670 comparesig 0E1 -0E2 -> 0 +dqcms671 comparesig 0E2 -0E2 -> 0 +dqcms672 comparesig -0E1 0E1 -> 0 +dqcms673 comparesig -0E2 0E1 -> 0 +dqcms674 comparesig 0E1 0E1 -> 0 +dqcms675 comparesig 0E2 0E1 -> 0 +dqcms676 comparesig -0E1 0E2 -> 0 +dqcms677 comparesig -0E2 0E2 -> 0 +dqcms678 comparesig 0E1 0E2 -> 0 +dqcms679 comparesig 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +dqcms680 comparesig 12 12 -> 0 +dqcms681 comparesig 12 12.0 -> 0 +dqcms682 comparesig 12 12.00 -> 0 +dqcms683 comparesig 12 12.000 -> 0 +dqcms684 comparesig 12 12.0000 -> 0 +dqcms685 comparesig 12 12.00000 -> 0 +dqcms686 comparesig 12 12.000000 -> 0 +dqcms687 comparesig 12 12.0000000 -> 0 +dqcms688 comparesig 12 12.00000000 -> 0 +dqcms689 comparesig 12 12.000000000 -> 0 +dqcms690 comparesig 12 12 -> 0 +dqcms691 comparesig 12.0 12 -> 0 +dqcms692 comparesig 12.00 12 -> 0 +dqcms693 comparesig 12.000 12 -> 0 +dqcms694 comparesig 12.0000 12 -> 0 +dqcms695 comparesig 12.00000 12 -> 0 +dqcms696 comparesig 12.000000 12 -> 0 +dqcms697 comparesig 12.0000000 12 -> 0 +dqcms698 comparesig 12.00000000 12 -> 0 +dqcms699 comparesig 12.000000000 12 -> 0 + +-- first, second, & last digit +dqcms700 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123455 -> 1 +dqcms701 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 +dqcms702 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123457 -> -1 +dqcms703 comparesig 1234567899999999999999999990123456 0234567899999999999999999990123456 -> 1 +dqcms704 comparesig 1234567899999999999999999990123456 1234567899999999999999999990123456 -> 0 +dqcms705 comparesig 1234567899999999999999999990123456 2234567899999999999999999990123456 -> -1 +dqcms706 comparesig 1134567899999999999999999990123456 1034567899999999999999999990123456 -> 1 +dqcms707 comparesig 1134567899999999999999999990123456 1134567899999999999999999990123456 -> 0 +dqcms708 comparesig 1134567899999999999999999990123456 1234567899999999999999999990123456 -> -1 + +-- miscellaneous +dqcms721 comparesig 12345678000 1 -> 1 +dqcms722 comparesig 1 12345678000 -> -1 +dqcms723 comparesig 1234567800 1 -> 1 +dqcms724 comparesig 1 1234567800 -> -1 +dqcms725 comparesig 1234567890 1 -> 1 +dqcms726 comparesig 1 1234567890 -> -1 +dqcms727 comparesig 1234567891 1 -> 1 +dqcms728 comparesig 1 1234567891 -> -1 +dqcms729 comparesig 12345678901 1 -> 1 +dqcms730 comparesig 1 12345678901 -> -1 +dqcms731 comparesig 1234567896 1 -> 1 +dqcms732 comparesig 1 1234567896 -> -1 + +-- residue cases at lower precision +dqcms740 comparesig 1 0.9999999 -> 1 +dqcms741 comparesig 1 0.999999 -> 1 +dqcms742 comparesig 1 0.99999 -> 1 +dqcms743 comparesig 1 1.0000 -> 0 +dqcms744 comparesig 1 1.00001 -> -1 +dqcms745 comparesig 1 1.000001 -> -1 +dqcms746 comparesig 1 1.0000001 -> -1 +dqcms750 comparesig 0.9999999 1 -> -1 +dqcms751 comparesig 0.999999 1 -> -1 +dqcms752 comparesig 0.99999 1 -> -1 +dqcms753 comparesig 1.0000 1 -> 0 +dqcms754 comparesig 1.00001 1 -> 1 +dqcms755 comparesig 1.000001 1 -> 1 +dqcms756 comparesig 1.0000001 1 -> 1 + +-- Specials +dqcms780 comparesig Inf -Inf -> 1 +dqcms781 comparesig Inf -1000 -> 1 +dqcms782 comparesig Inf -1 -> 1 +dqcms783 comparesig Inf -0 -> 1 +dqcms784 comparesig Inf 0 -> 1 +dqcms785 comparesig Inf 1 -> 1 +dqcms786 comparesig Inf 1000 -> 1 +dqcms787 comparesig Inf Inf -> 0 +dqcms788 comparesig -1000 Inf -> -1 +dqcms789 comparesig -Inf Inf -> -1 +dqcms790 comparesig -1 Inf -> -1 +dqcms791 comparesig -0 Inf -> -1 +dqcms792 comparesig 0 Inf -> -1 +dqcms793 comparesig 1 Inf -> -1 +dqcms794 comparesig 1000 Inf -> -1 +dqcms795 comparesig Inf Inf -> 0 + +dqcms800 comparesig -Inf -Inf -> 0 +dqcms801 comparesig -Inf -1000 -> -1 +dqcms802 comparesig -Inf -1 -> -1 +dqcms803 comparesig -Inf -0 -> -1 +dqcms804 comparesig -Inf 0 -> -1 +dqcms805 comparesig -Inf 1 -> -1 +dqcms806 comparesig -Inf 1000 -> -1 +dqcms807 comparesig -Inf Inf -> -1 +dqcms808 comparesig -Inf -Inf -> 0 +dqcms809 comparesig -1000 -Inf -> 1 +dqcms810 comparesig -1 -Inf -> 1 +dqcms811 comparesig -0 -Inf -> 1 +dqcms812 comparesig 0 -Inf -> 1 +dqcms813 comparesig 1 -Inf -> 1 +dqcms814 comparesig 1000 -Inf -> 1 +dqcms815 comparesig Inf -Inf -> 1 + +dqcms821 comparesig NaN -Inf -> NaN Invalid_operation +dqcms822 comparesig NaN -1000 -> NaN Invalid_operation +dqcms823 comparesig NaN -1 -> NaN Invalid_operation +dqcms824 comparesig NaN -0 -> NaN Invalid_operation +dqcms825 comparesig NaN 0 -> NaN Invalid_operation +dqcms826 comparesig NaN 1 -> NaN Invalid_operation +dqcms827 comparesig NaN 1000 -> NaN Invalid_operation +dqcms828 comparesig NaN Inf -> NaN Invalid_operation +dqcms829 comparesig NaN NaN -> NaN Invalid_operation +dqcms830 comparesig -Inf NaN -> NaN Invalid_operation +dqcms831 comparesig -1000 NaN -> NaN Invalid_operation +dqcms832 comparesig -1 NaN -> NaN Invalid_operation +dqcms833 comparesig -0 NaN -> NaN Invalid_operation +dqcms834 comparesig 0 NaN -> NaN Invalid_operation +dqcms835 comparesig 1 NaN -> NaN Invalid_operation +dqcms836 comparesig 1000 NaN -> NaN Invalid_operation +dqcms837 comparesig Inf NaN -> NaN Invalid_operation +dqcms838 comparesig -NaN -NaN -> -NaN Invalid_operation +dqcms839 comparesig +NaN -NaN -> NaN Invalid_operation +dqcms840 comparesig -NaN +NaN -> -NaN Invalid_operation + +dqcms841 comparesig sNaN -Inf -> NaN Invalid_operation +dqcms842 comparesig sNaN -1000 -> NaN Invalid_operation +dqcms843 comparesig sNaN -1 -> NaN Invalid_operation +dqcms844 comparesig sNaN -0 -> NaN Invalid_operation +dqcms845 comparesig sNaN 0 -> NaN Invalid_operation +dqcms846 comparesig sNaN 1 -> NaN Invalid_operation +dqcms847 comparesig sNaN 1000 -> NaN Invalid_operation +dqcms848 comparesig sNaN NaN -> NaN Invalid_operation +dqcms849 comparesig sNaN sNaN -> NaN Invalid_operation +dqcms850 comparesig NaN sNaN -> NaN Invalid_operation +dqcms851 comparesig -Inf sNaN -> NaN Invalid_operation +dqcms852 comparesig -1000 sNaN -> NaN Invalid_operation +dqcms853 comparesig -1 sNaN -> NaN Invalid_operation +dqcms854 comparesig -0 sNaN -> NaN Invalid_operation +dqcms855 comparesig 0 sNaN -> NaN Invalid_operation +dqcms856 comparesig 1 sNaN -> NaN Invalid_operation +dqcms857 comparesig 1000 sNaN -> NaN Invalid_operation +dqcms858 comparesig Inf sNaN -> NaN Invalid_operation +dqcms859 comparesig NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqcms860 comparesig NaN9 -Inf -> NaN9 Invalid_operation +dqcms861 comparesig NaN8 999 -> NaN8 Invalid_operation +dqcms862 comparesig NaN77 Inf -> NaN77 Invalid_operation +dqcms863 comparesig -NaN67 NaN5 -> -NaN67 Invalid_operation +dqcms864 comparesig -Inf -NaN4 -> -NaN4 Invalid_operation +dqcms865 comparesig -999 -NaN33 -> -NaN33 Invalid_operation +dqcms866 comparesig Inf NaN2 -> NaN2 Invalid_operation +dqcms867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation +dqcms868 comparesig +NaN41 -NaN42 -> NaN41 Invalid_operation +dqcms869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation +dqcms870 comparesig +NaN41 +NaN42 -> NaN41 Invalid_operation + +dqcms871 comparesig -sNaN99 -Inf -> -NaN99 Invalid_operation +dqcms872 comparesig sNaN98 -11 -> NaN98 Invalid_operation +dqcms873 comparesig sNaN97 NaN -> NaN97 Invalid_operation +dqcms874 comparesig sNaN16 sNaN94 -> NaN16 Invalid_operation +dqcms875 comparesig NaN85 sNaN83 -> NaN83 Invalid_operation +dqcms876 comparesig -Inf sNaN92 -> NaN92 Invalid_operation +dqcms877 comparesig 088 sNaN81 -> NaN81 Invalid_operation +dqcms878 comparesig Inf sNaN90 -> NaN90 Invalid_operation +dqcms879 comparesig NaN -sNaN89 -> -NaN89 Invalid_operation + +-- wide range +dqcms880 comparesig +1.23456789012345E-0 9E+6144 -> -1 +dqcms881 comparesig 9E+6144 +1.23456789012345E-0 -> 1 +dqcms882 comparesig +0.100 9E-6143 -> 1 +dqcms883 comparesig 9E-6143 +0.100 -> -1 +dqcms885 comparesig -1.23456789012345E-0 9E+6144 -> -1 +dqcms886 comparesig 9E+6144 -1.23456789012345E-0 -> 1 +dqcms887 comparesig -0.100 9E-6143 -> -1 +dqcms888 comparesig 9E-6143 -0.100 -> 1 + +-- signs +dqcms901 comparesig 1e+77 1e+11 -> 1 +dqcms902 comparesig 1e+77 -1e+11 -> 1 +dqcms903 comparesig -1e+77 1e+11 -> -1 +dqcms904 comparesig -1e+77 -1e+11 -> -1 +dqcms905 comparesig 1e-77 1e-11 -> -1 +dqcms906 comparesig 1e-77 -1e-11 -> 1 +dqcms907 comparesig -1e-77 1e-11 -> -1 +dqcms908 comparesig -1e-77 -1e-11 -> 1 + +-- Null tests +dqcms990 comparesig 10 # -> NaN Invalid_operation +dqcms991 comparesig # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqCompareTotal.decTest b/Lib/test/decimaltestdata/dqCompareTotal.decTest index 13701ccb577..bae3761909a 100644 --- a/Lib/test/decimaltestdata/dqCompareTotal.decTest +++ b/Lib/test/decimaltestdata/dqCompareTotal.decTest @@ -1,706 +1,706 @@ ------------------------------------------------------------------------- --- dqCompareTotal.decTest -- decQuad comparison using total ordering -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqcot001 comparetotal -2 -2 -> 0 -dqcot002 comparetotal -2 -1 -> -1 -dqcot003 comparetotal -2 0 -> -1 -dqcot004 comparetotal -2 1 -> -1 -dqcot005 comparetotal -2 2 -> -1 -dqcot006 comparetotal -1 -2 -> 1 -dqcot007 comparetotal -1 -1 -> 0 -dqcot008 comparetotal -1 0 -> -1 -dqcot009 comparetotal -1 1 -> -1 -dqcot010 comparetotal -1 2 -> -1 -dqcot011 comparetotal 0 -2 -> 1 -dqcot012 comparetotal 0 -1 -> 1 -dqcot013 comparetotal 0 0 -> 0 -dqcot014 comparetotal 0 1 -> -1 -dqcot015 comparetotal 0 2 -> -1 -dqcot016 comparetotal 1 -2 -> 1 -dqcot017 comparetotal 1 -1 -> 1 -dqcot018 comparetotal 1 0 -> 1 -dqcot019 comparetotal 1 1 -> 0 -dqcot020 comparetotal 1 2 -> -1 -dqcot021 comparetotal 2 -2 -> 1 -dqcot022 comparetotal 2 -1 -> 1 -dqcot023 comparetotal 2 0 -> 1 -dqcot025 comparetotal 2 1 -> 1 -dqcot026 comparetotal 2 2 -> 0 - -dqcot031 comparetotal -20 -20 -> 0 -dqcot032 comparetotal -20 -10 -> -1 -dqcot033 comparetotal -20 00 -> -1 -dqcot034 comparetotal -20 10 -> -1 -dqcot035 comparetotal -20 20 -> -1 -dqcot036 comparetotal -10 -20 -> 1 -dqcot037 comparetotal -10 -10 -> 0 -dqcot038 comparetotal -10 00 -> -1 -dqcot039 comparetotal -10 10 -> -1 -dqcot040 comparetotal -10 20 -> -1 -dqcot041 comparetotal 00 -20 -> 1 -dqcot042 comparetotal 00 -10 -> 1 -dqcot043 comparetotal 00 00 -> 0 -dqcot044 comparetotal 00 10 -> -1 -dqcot045 comparetotal 00 20 -> -1 -dqcot046 comparetotal 10 -20 -> 1 -dqcot047 comparetotal 10 -10 -> 1 -dqcot048 comparetotal 10 00 -> 1 -dqcot049 comparetotal 10 10 -> 0 -dqcot050 comparetotal 10 20 -> -1 -dqcot051 comparetotal 20 -20 -> 1 -dqcot052 comparetotal 20 -10 -> 1 -dqcot053 comparetotal 20 00 -> 1 -dqcot055 comparetotal 20 10 -> 1 -dqcot056 comparetotal 20 20 -> 0 - -dqcot061 comparetotal -2.0 -2.0 -> 0 -dqcot062 comparetotal -2.0 -1.0 -> -1 -dqcot063 comparetotal -2.0 0.0 -> -1 -dqcot064 comparetotal -2.0 1.0 -> -1 -dqcot065 comparetotal -2.0 2.0 -> -1 -dqcot066 comparetotal -1.0 -2.0 -> 1 -dqcot067 comparetotal -1.0 -1.0 -> 0 -dqcot068 comparetotal -1.0 0.0 -> -1 -dqcot069 comparetotal -1.0 1.0 -> -1 -dqcot070 comparetotal -1.0 2.0 -> -1 -dqcot071 comparetotal 0.0 -2.0 -> 1 -dqcot072 comparetotal 0.0 -1.0 -> 1 -dqcot073 comparetotal 0.0 0.0 -> 0 -dqcot074 comparetotal 0.0 1.0 -> -1 -dqcot075 comparetotal 0.0 2.0 -> -1 -dqcot076 comparetotal 1.0 -2.0 -> 1 -dqcot077 comparetotal 1.0 -1.0 -> 1 -dqcot078 comparetotal 1.0 0.0 -> 1 -dqcot079 comparetotal 1.0 1.0 -> 0 -dqcot080 comparetotal 1.0 2.0 -> -1 -dqcot081 comparetotal 2.0 -2.0 -> 1 -dqcot082 comparetotal 2.0 -1.0 -> 1 -dqcot083 comparetotal 2.0 0.0 -> 1 -dqcot085 comparetotal 2.0 1.0 -> 1 -dqcot086 comparetotal 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -dqcot090 comparetotal 9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 -dqcot091 comparetotal -9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> -1 -dqcot092 comparetotal 9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 1 -dqcot093 comparetotal -9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -dqcot100 comparetotal 7.0 7.0 -> 0 -dqcot101 comparetotal 7.0 7 -> -1 -dqcot102 comparetotal 7 7.0 -> 1 -dqcot103 comparetotal 7E+0 7.0 -> 1 -dqcot104 comparetotal 70E-1 7.0 -> 0 -dqcot105 comparetotal 0.7E+1 7 -> 0 -dqcot106 comparetotal 70E-1 7 -> -1 -dqcot107 comparetotal 7.0 7E+0 -> -1 -dqcot108 comparetotal 7.0 70E-1 -> 0 -dqcot109 comparetotal 7 0.7E+1 -> 0 -dqcot110 comparetotal 7 70E-1 -> 1 - -dqcot120 comparetotal 8.0 7.0 -> 1 -dqcot121 comparetotal 8.0 7 -> 1 -dqcot122 comparetotal 8 7.0 -> 1 -dqcot123 comparetotal 8E+0 7.0 -> 1 -dqcot124 comparetotal 80E-1 7.0 -> 1 -dqcot125 comparetotal 0.8E+1 7 -> 1 -dqcot126 comparetotal 80E-1 7 -> 1 -dqcot127 comparetotal 8.0 7E+0 -> 1 -dqcot128 comparetotal 8.0 70E-1 -> 1 -dqcot129 comparetotal 8 0.7E+1 -> 1 -dqcot130 comparetotal 8 70E-1 -> 1 - -dqcot140 comparetotal 8.0 9.0 -> -1 -dqcot141 comparetotal 8.0 9 -> -1 -dqcot142 comparetotal 8 9.0 -> -1 -dqcot143 comparetotal 8E+0 9.0 -> -1 -dqcot144 comparetotal 80E-1 9.0 -> -1 -dqcot145 comparetotal 0.8E+1 9 -> -1 -dqcot146 comparetotal 80E-1 9 -> -1 -dqcot147 comparetotal 8.0 9E+0 -> -1 -dqcot148 comparetotal 8.0 90E-1 -> -1 -dqcot149 comparetotal 8 0.9E+1 -> -1 -dqcot150 comparetotal 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -dqcot200 comparetotal -7.0 7.0 -> -1 -dqcot201 comparetotal -7.0 7 -> -1 -dqcot202 comparetotal -7 7.0 -> -1 -dqcot203 comparetotal -7E+0 7.0 -> -1 -dqcot204 comparetotal -70E-1 7.0 -> -1 -dqcot205 comparetotal -0.7E+1 7 -> -1 -dqcot206 comparetotal -70E-1 7 -> -1 -dqcot207 comparetotal -7.0 7E+0 -> -1 -dqcot208 comparetotal -7.0 70E-1 -> -1 -dqcot209 comparetotal -7 0.7E+1 -> -1 -dqcot210 comparetotal -7 70E-1 -> -1 - -dqcot220 comparetotal -8.0 7.0 -> -1 -dqcot221 comparetotal -8.0 7 -> -1 -dqcot222 comparetotal -8 7.0 -> -1 -dqcot223 comparetotal -8E+0 7.0 -> -1 -dqcot224 comparetotal -80E-1 7.0 -> -1 -dqcot225 comparetotal -0.8E+1 7 -> -1 -dqcot226 comparetotal -80E-1 7 -> -1 -dqcot227 comparetotal -8.0 7E+0 -> -1 -dqcot228 comparetotal -8.0 70E-1 -> -1 -dqcot229 comparetotal -8 0.7E+1 -> -1 -dqcot230 comparetotal -8 70E-1 -> -1 - -dqcot240 comparetotal -8.0 9.0 -> -1 -dqcot241 comparetotal -8.0 9 -> -1 -dqcot242 comparetotal -8 9.0 -> -1 -dqcot243 comparetotal -8E+0 9.0 -> -1 -dqcot244 comparetotal -80E-1 9.0 -> -1 -dqcot245 comparetotal -0.8E+1 9 -> -1 -dqcot246 comparetotal -80E-1 9 -> -1 -dqcot247 comparetotal -8.0 9E+0 -> -1 -dqcot248 comparetotal -8.0 90E-1 -> -1 -dqcot249 comparetotal -8 0.9E+1 -> -1 -dqcot250 comparetotal -8 90E-1 -> -1 - --- and again, with sign changes +- .. -dqcot300 comparetotal 7.0 -7.0 -> 1 -dqcot301 comparetotal 7.0 -7 -> 1 -dqcot302 comparetotal 7 -7.0 -> 1 -dqcot303 comparetotal 7E+0 -7.0 -> 1 -dqcot304 comparetotal 70E-1 -7.0 -> 1 -dqcot305 comparetotal .7E+1 -7 -> 1 -dqcot306 comparetotal 70E-1 -7 -> 1 -dqcot307 comparetotal 7.0 -7E+0 -> 1 -dqcot308 comparetotal 7.0 -70E-1 -> 1 -dqcot309 comparetotal 7 -.7E+1 -> 1 -dqcot310 comparetotal 7 -70E-1 -> 1 - -dqcot320 comparetotal 8.0 -7.0 -> 1 -dqcot321 comparetotal 8.0 -7 -> 1 -dqcot322 comparetotal 8 -7.0 -> 1 -dqcot323 comparetotal 8E+0 -7.0 -> 1 -dqcot324 comparetotal 80E-1 -7.0 -> 1 -dqcot325 comparetotal .8E+1 -7 -> 1 -dqcot326 comparetotal 80E-1 -7 -> 1 -dqcot327 comparetotal 8.0 -7E+0 -> 1 -dqcot328 comparetotal 8.0 -70E-1 -> 1 -dqcot329 comparetotal 8 -.7E+1 -> 1 -dqcot330 comparetotal 8 -70E-1 -> 1 - -dqcot340 comparetotal 8.0 -9.0 -> 1 -dqcot341 comparetotal 8.0 -9 -> 1 -dqcot342 comparetotal 8 -9.0 -> 1 -dqcot343 comparetotal 8E+0 -9.0 -> 1 -dqcot344 comparetotal 80E-1 -9.0 -> 1 -dqcot345 comparetotal .8E+1 -9 -> 1 -dqcot346 comparetotal 80E-1 -9 -> 1 -dqcot347 comparetotal 8.0 -9E+0 -> 1 -dqcot348 comparetotal 8.0 -90E-1 -> 1 -dqcot349 comparetotal 8 -.9E+1 -> 1 -dqcot350 comparetotal 8 -90E-1 -> 1 - --- and again, with sign changes -- .. -dqcot400 comparetotal -7.0 -7.0 -> 0 -dqcot401 comparetotal -7.0 -7 -> 1 -dqcot402 comparetotal -7 -7.0 -> -1 -dqcot403 comparetotal -7E+0 -7.0 -> -1 -dqcot404 comparetotal -70E-1 -7.0 -> 0 -dqcot405 comparetotal -.7E+1 -7 -> 0 -dqcot406 comparetotal -70E-1 -7 -> 1 -dqcot407 comparetotal -7.0 -7E+0 -> 1 -dqcot408 comparetotal -7.0 -70E-1 -> 0 -dqcot409 comparetotal -7 -.7E+1 -> 0 -dqcot410 comparetotal -7 -70E-1 -> -1 - -dqcot420 comparetotal -8.0 -7.0 -> -1 -dqcot421 comparetotal -8.0 -7 -> -1 -dqcot422 comparetotal -8 -7.0 -> -1 -dqcot423 comparetotal -8E+0 -7.0 -> -1 -dqcot424 comparetotal -80E-1 -7.0 -> -1 -dqcot425 comparetotal -.8E+1 -7 -> -1 -dqcot426 comparetotal -80E-1 -7 -> -1 -dqcot427 comparetotal -8.0 -7E+0 -> -1 -dqcot428 comparetotal -8.0 -70E-1 -> -1 -dqcot429 comparetotal -8 -.7E+1 -> -1 -dqcot430 comparetotal -8 -70E-1 -> -1 - -dqcot440 comparetotal -8.0 -9.0 -> 1 -dqcot441 comparetotal -8.0 -9 -> 1 -dqcot442 comparetotal -8 -9.0 -> 1 -dqcot443 comparetotal -8E+0 -9.0 -> 1 -dqcot444 comparetotal -80E-1 -9.0 -> 1 -dqcot445 comparetotal -.8E+1 -9 -> 1 -dqcot446 comparetotal -80E-1 -9 -> 1 -dqcot447 comparetotal -8.0 -9E+0 -> 1 -dqcot448 comparetotal -8.0 -90E-1 -> 1 -dqcot449 comparetotal -8 -.9E+1 -> 1 -dqcot450 comparetotal -8 -90E-1 -> 1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -dqcot473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 -dqcot474 comparetotal 123.456000000000E+89 123.456E+89 -> -1 -dqcot475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 -dqcot476 comparetotal 123.4560000000E+89 123.456E+89 -> -1 -dqcot477 comparetotal 123.456000000E-89 123.456E-89 -> -1 -dqcot478 comparetotal 123.45600000E+89 123.456E+89 -> -1 -dqcot479 comparetotal 123.4560000E-89 123.456E-89 -> -1 -dqcot480 comparetotal 123.456000E+89 123.456E+89 -> -1 -dqcot481 comparetotal 123.45600E-89 123.456E-89 -> -1 -dqcot482 comparetotal 123.4560E+89 123.456E+89 -> -1 -dqcot483 comparetotal 123.456E-89 123.456E-89 -> 0 -dqcot487 comparetotal 123.456E+89 123.4560000000000E+89 -> 1 -dqcot488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 -dqcot489 comparetotal 123.456E+89 123.45600000000E+89 -> 1 -dqcot490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 -dqcot491 comparetotal 123.456E+89 123.456000000E+89 -> 1 -dqcot492 comparetotal 123.456E-89 123.45600000E-89 -> 1 -dqcot493 comparetotal 123.456E+89 123.4560000E+89 -> 1 -dqcot494 comparetotal 123.456E-89 123.456000E-89 -> 1 -dqcot495 comparetotal 123.456E+89 123.45600E+89 -> 1 -dqcot496 comparetotal 123.456E-89 123.4560E-89 -> 1 -dqcot497 comparetotal 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -dqcot498 comparetotal 1 1E-17 -> 1 -dqcot499 comparetotal 1 1E-16 -> 1 -dqcot500 comparetotal 1 1E-15 -> 1 -dqcot501 comparetotal 1 1E-14 -> 1 -dqcot502 comparetotal 1 1E-13 -> 1 -dqcot503 comparetotal 1 1E-12 -> 1 -dqcot504 comparetotal 1 1E-11 -> 1 -dqcot505 comparetotal 1 1E-10 -> 1 -dqcot506 comparetotal 1 1E-9 -> 1 -dqcot507 comparetotal 1 1E-8 -> 1 -dqcot508 comparetotal 1 1E-7 -> 1 -dqcot509 comparetotal 1 1E-6 -> 1 -dqcot510 comparetotal 1 1E-5 -> 1 -dqcot511 comparetotal 1 1E-4 -> 1 -dqcot512 comparetotal 1 1E-3 -> 1 -dqcot513 comparetotal 1 1E-2 -> 1 -dqcot514 comparetotal 1 1E-1 -> 1 -dqcot515 comparetotal 1 1E-0 -> 0 -dqcot516 comparetotal 1 1E+1 -> -1 -dqcot517 comparetotal 1 1E+2 -> -1 -dqcot518 comparetotal 1 1E+3 -> -1 -dqcot519 comparetotal 1 1E+4 -> -1 -dqcot521 comparetotal 1 1E+5 -> -1 -dqcot522 comparetotal 1 1E+6 -> -1 -dqcot523 comparetotal 1 1E+7 -> -1 -dqcot524 comparetotal 1 1E+8 -> -1 -dqcot525 comparetotal 1 1E+9 -> -1 -dqcot526 comparetotal 1 1E+10 -> -1 -dqcot527 comparetotal 1 1E+11 -> -1 -dqcot528 comparetotal 1 1E+12 -> -1 -dqcot529 comparetotal 1 1E+13 -> -1 -dqcot530 comparetotal 1 1E+14 -> -1 -dqcot531 comparetotal 1 1E+15 -> -1 -dqcot532 comparetotal 1 1E+16 -> -1 -dqcot533 comparetotal 1 1E+17 -> -1 --- LR swap -dqcot538 comparetotal 1E-17 1 -> -1 -dqcot539 comparetotal 1E-16 1 -> -1 -dqcot540 comparetotal 1E-15 1 -> -1 -dqcot541 comparetotal 1E-14 1 -> -1 -dqcot542 comparetotal 1E-13 1 -> -1 -dqcot543 comparetotal 1E-12 1 -> -1 -dqcot544 comparetotal 1E-11 1 -> -1 -dqcot545 comparetotal 1E-10 1 -> -1 -dqcot546 comparetotal 1E-9 1 -> -1 -dqcot547 comparetotal 1E-8 1 -> -1 -dqcot548 comparetotal 1E-7 1 -> -1 -dqcot549 comparetotal 1E-6 1 -> -1 -dqcot550 comparetotal 1E-5 1 -> -1 -dqcot551 comparetotal 1E-4 1 -> -1 -dqcot552 comparetotal 1E-3 1 -> -1 -dqcot553 comparetotal 1E-2 1 -> -1 -dqcot554 comparetotal 1E-1 1 -> -1 -dqcot555 comparetotal 1E-0 1 -> 0 -dqcot556 comparetotal 1E+1 1 -> 1 -dqcot557 comparetotal 1E+2 1 -> 1 -dqcot558 comparetotal 1E+3 1 -> 1 -dqcot559 comparetotal 1E+4 1 -> 1 -dqcot561 comparetotal 1E+5 1 -> 1 -dqcot562 comparetotal 1E+6 1 -> 1 -dqcot563 comparetotal 1E+7 1 -> 1 -dqcot564 comparetotal 1E+8 1 -> 1 -dqcot565 comparetotal 1E+9 1 -> 1 -dqcot566 comparetotal 1E+10 1 -> 1 -dqcot567 comparetotal 1E+11 1 -> 1 -dqcot568 comparetotal 1E+12 1 -> 1 -dqcot569 comparetotal 1E+13 1 -> 1 -dqcot570 comparetotal 1E+14 1 -> 1 -dqcot571 comparetotal 1E+15 1 -> 1 -dqcot572 comparetotal 1E+16 1 -> 1 -dqcot573 comparetotal 1E+17 1 -> 1 --- similar with a useful coefficient, one side only -dqcot578 comparetotal 0.000000987654321 1E-17 -> 1 -dqcot579 comparetotal 0.000000987654321 1E-16 -> 1 -dqcot580 comparetotal 0.000000987654321 1E-15 -> 1 -dqcot581 comparetotal 0.000000987654321 1E-14 -> 1 -dqcot582 comparetotal 0.000000987654321 1E-13 -> 1 -dqcot583 comparetotal 0.000000987654321 1E-12 -> 1 -dqcot584 comparetotal 0.000000987654321 1E-11 -> 1 -dqcot585 comparetotal 0.000000987654321 1E-10 -> 1 -dqcot586 comparetotal 0.000000987654321 1E-9 -> 1 -dqcot587 comparetotal 0.000000987654321 1E-8 -> 1 -dqcot588 comparetotal 0.000000987654321 1E-7 -> 1 -dqcot589 comparetotal 0.000000987654321 1E-6 -> -1 -dqcot590 comparetotal 0.000000987654321 1E-5 -> -1 -dqcot591 comparetotal 0.000000987654321 1E-4 -> -1 -dqcot592 comparetotal 0.000000987654321 1E-3 -> -1 -dqcot593 comparetotal 0.000000987654321 1E-2 -> -1 -dqcot594 comparetotal 0.000000987654321 1E-1 -> -1 -dqcot595 comparetotal 0.000000987654321 1E-0 -> -1 -dqcot596 comparetotal 0.000000987654321 1E+1 -> -1 -dqcot597 comparetotal 0.000000987654321 1E+2 -> -1 -dqcot598 comparetotal 0.000000987654321 1E+3 -> -1 -dqcot599 comparetotal 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -dqcot600 comparetotal 12 12.2345 -> -1 -dqcot601 comparetotal 12.0 12.2345 -> -1 -dqcot602 comparetotal 12.00 12.2345 -> -1 -dqcot603 comparetotal 12.000 12.2345 -> -1 -dqcot604 comparetotal 12.0000 12.2345 -> -1 -dqcot605 comparetotal 12.00000 12.2345 -> -1 -dqcot606 comparetotal 12.000000 12.2345 -> -1 -dqcot607 comparetotal 12.0000000 12.2345 -> -1 -dqcot608 comparetotal 12.00000000 12.2345 -> -1 -dqcot609 comparetotal 12.000000000 12.2345 -> -1 -dqcot610 comparetotal 12.1234 12 -> 1 -dqcot611 comparetotal 12.1234 12.0 -> 1 -dqcot612 comparetotal 12.1234 12.00 -> 1 -dqcot613 comparetotal 12.1234 12.000 -> 1 -dqcot614 comparetotal 12.1234 12.0000 -> 1 -dqcot615 comparetotal 12.1234 12.00000 -> 1 -dqcot616 comparetotal 12.1234 12.000000 -> 1 -dqcot617 comparetotal 12.1234 12.0000000 -> 1 -dqcot618 comparetotal 12.1234 12.00000000 -> 1 -dqcot619 comparetotal 12.1234 12.000000000 -> 1 -dqcot620 comparetotal -12 -12.2345 -> 1 -dqcot621 comparetotal -12.0 -12.2345 -> 1 -dqcot622 comparetotal -12.00 -12.2345 -> 1 -dqcot623 comparetotal -12.000 -12.2345 -> 1 -dqcot624 comparetotal -12.0000 -12.2345 -> 1 -dqcot625 comparetotal -12.00000 -12.2345 -> 1 -dqcot626 comparetotal -12.000000 -12.2345 -> 1 -dqcot627 comparetotal -12.0000000 -12.2345 -> 1 -dqcot628 comparetotal -12.00000000 -12.2345 -> 1 -dqcot629 comparetotal -12.000000000 -12.2345 -> 1 -dqcot630 comparetotal -12.1234 -12 -> -1 -dqcot631 comparetotal -12.1234 -12.0 -> -1 -dqcot632 comparetotal -12.1234 -12.00 -> -1 -dqcot633 comparetotal -12.1234 -12.000 -> -1 -dqcot634 comparetotal -12.1234 -12.0000 -> -1 -dqcot635 comparetotal -12.1234 -12.00000 -> -1 -dqcot636 comparetotal -12.1234 -12.000000 -> -1 -dqcot637 comparetotal -12.1234 -12.0000000 -> -1 -dqcot638 comparetotal -12.1234 -12.00000000 -> -1 -dqcot639 comparetotal -12.1234 -12.000000000 -> -1 - --- extended zeros -dqcot640 comparetotal 0 0 -> 0 -dqcot641 comparetotal 0 -0 -> 1 -dqcot642 comparetotal 0 -0.0 -> 1 -dqcot643 comparetotal 0 0.0 -> 1 -dqcot644 comparetotal -0 0 -> -1 -dqcot645 comparetotal -0 -0 -> 0 -dqcot646 comparetotal -0 -0.0 -> -1 -dqcot647 comparetotal -0 0.0 -> -1 -dqcot648 comparetotal 0.0 0 -> -1 -dqcot649 comparetotal 0.0 -0 -> 1 -dqcot650 comparetotal 0.0 -0.0 -> 1 -dqcot651 comparetotal 0.0 0.0 -> 0 -dqcot652 comparetotal -0.0 0 -> -1 -dqcot653 comparetotal -0.0 -0 -> 1 -dqcot654 comparetotal -0.0 -0.0 -> 0 -dqcot655 comparetotal -0.0 0.0 -> -1 - -dqcot656 comparetotal -0E1 0.0 -> -1 -dqcot657 comparetotal -0E2 0.0 -> -1 -dqcot658 comparetotal 0E1 0.0 -> 1 -dqcot659 comparetotal 0E2 0.0 -> 1 -dqcot660 comparetotal -0E1 0 -> -1 -dqcot661 comparetotal -0E2 0 -> -1 -dqcot662 comparetotal 0E1 0 -> 1 -dqcot663 comparetotal 0E2 0 -> 1 -dqcot664 comparetotal -0E1 -0E1 -> 0 -dqcot665 comparetotal -0E2 -0E1 -> -1 -dqcot666 comparetotal 0E1 -0E1 -> 1 -dqcot667 comparetotal 0E2 -0E1 -> 1 -dqcot668 comparetotal -0E1 -0E2 -> 1 -dqcot669 comparetotal -0E2 -0E2 -> 0 -dqcot670 comparetotal 0E1 -0E2 -> 1 -dqcot671 comparetotal 0E2 -0E2 -> 1 -dqcot672 comparetotal -0E1 0E1 -> -1 -dqcot673 comparetotal -0E2 0E1 -> -1 -dqcot674 comparetotal 0E1 0E1 -> 0 -dqcot675 comparetotal 0E2 0E1 -> 1 -dqcot676 comparetotal -0E1 0E2 -> -1 -dqcot677 comparetotal -0E2 0E2 -> -1 -dqcot678 comparetotal 0E1 0E2 -> -1 -dqcot679 comparetotal 0E2 0E2 -> 0 - --- trailing zeros; unit-y -dqcot680 comparetotal 12 12 -> 0 -dqcot681 comparetotal 12 12.0 -> 1 -dqcot682 comparetotal 12 12.00 -> 1 -dqcot683 comparetotal 12 12.000 -> 1 -dqcot684 comparetotal 12 12.0000 -> 1 -dqcot685 comparetotal 12 12.00000 -> 1 -dqcot686 comparetotal 12 12.000000 -> 1 -dqcot687 comparetotal 12 12.0000000 -> 1 -dqcot688 comparetotal 12 12.00000000 -> 1 -dqcot689 comparetotal 12 12.000000000 -> 1 -dqcot690 comparetotal 12 12 -> 0 -dqcot691 comparetotal 12.0 12 -> -1 -dqcot692 comparetotal 12.00 12 -> -1 -dqcot693 comparetotal 12.000 12 -> -1 -dqcot694 comparetotal 12.0000 12 -> -1 -dqcot695 comparetotal 12.00000 12 -> -1 -dqcot696 comparetotal 12.000000 12 -> -1 -dqcot697 comparetotal 12.0000000 12 -> -1 -dqcot698 comparetotal 12.00000000 12 -> -1 -dqcot699 comparetotal 12.000000000 12 -> -1 - --- old long operand checks -dqcot701 comparetotal 12345678000 1 -> 1 -dqcot702 comparetotal 1 12345678000 -> -1 -dqcot703 comparetotal 1234567800 1 -> 1 -dqcot704 comparetotal 1 1234567800 -> -1 -dqcot705 comparetotal 1234567890 1 -> 1 -dqcot706 comparetotal 1 1234567890 -> -1 -dqcot707 comparetotal 1234567891 1 -> 1 -dqcot708 comparetotal 1 1234567891 -> -1 -dqcot709 comparetotal 12345678901 1 -> 1 -dqcot710 comparetotal 1 12345678901 -> -1 -dqcot711 comparetotal 1234567896 1 -> 1 -dqcot712 comparetotal 1 1234567896 -> -1 -dqcot713 comparetotal -1234567891 1 -> -1 -dqcot714 comparetotal 1 -1234567891 -> 1 -dqcot715 comparetotal -12345678901 1 -> -1 -dqcot716 comparetotal 1 -12345678901 -> 1 -dqcot717 comparetotal -1234567896 1 -> -1 -dqcot718 comparetotal 1 -1234567896 -> 1 - --- old residue cases -dqcot740 comparetotal 1 0.9999999 -> 1 -dqcot741 comparetotal 1 0.999999 -> 1 -dqcot742 comparetotal 1 0.99999 -> 1 -dqcot743 comparetotal 1 1.0000 -> 1 -dqcot744 comparetotal 1 1.00001 -> -1 -dqcot745 comparetotal 1 1.000001 -> -1 -dqcot746 comparetotal 1 1.0000001 -> -1 -dqcot750 comparetotal 0.9999999 1 -> -1 -dqcot751 comparetotal 0.999999 1 -> -1 -dqcot752 comparetotal 0.99999 1 -> -1 -dqcot753 comparetotal 1.0000 1 -> -1 -dqcot754 comparetotal 1.00001 1 -> 1 -dqcot755 comparetotal 1.000001 1 -> 1 -dqcot756 comparetotal 1.0000001 1 -> 1 - --- Specials -dqcot780 comparetotal Inf -Inf -> 1 -dqcot781 comparetotal Inf -1000 -> 1 -dqcot782 comparetotal Inf -1 -> 1 -dqcot783 comparetotal Inf -0 -> 1 -dqcot784 comparetotal Inf 0 -> 1 -dqcot785 comparetotal Inf 1 -> 1 -dqcot786 comparetotal Inf 1000 -> 1 -dqcot787 comparetotal Inf Inf -> 0 -dqcot788 comparetotal -1000 Inf -> -1 -dqcot789 comparetotal -Inf Inf -> -1 -dqcot790 comparetotal -1 Inf -> -1 -dqcot791 comparetotal -0 Inf -> -1 -dqcot792 comparetotal 0 Inf -> -1 -dqcot793 comparetotal 1 Inf -> -1 -dqcot794 comparetotal 1000 Inf -> -1 -dqcot795 comparetotal Inf Inf -> 0 - -dqcot800 comparetotal -Inf -Inf -> 0 -dqcot801 comparetotal -Inf -1000 -> -1 -dqcot802 comparetotal -Inf -1 -> -1 -dqcot803 comparetotal -Inf -0 -> -1 -dqcot804 comparetotal -Inf 0 -> -1 -dqcot805 comparetotal -Inf 1 -> -1 -dqcot806 comparetotal -Inf 1000 -> -1 -dqcot807 comparetotal -Inf Inf -> -1 -dqcot808 comparetotal -Inf -Inf -> 0 -dqcot809 comparetotal -1000 -Inf -> 1 -dqcot810 comparetotal -1 -Inf -> 1 -dqcot811 comparetotal -0 -Inf -> 1 -dqcot812 comparetotal 0 -Inf -> 1 -dqcot813 comparetotal 1 -Inf -> 1 -dqcot814 comparetotal 1000 -Inf -> 1 -dqcot815 comparetotal Inf -Inf -> 1 - -dqcot821 comparetotal NaN -Inf -> 1 -dqcot822 comparetotal NaN -1000 -> 1 -dqcot823 comparetotal NaN -1 -> 1 -dqcot824 comparetotal NaN -0 -> 1 -dqcot825 comparetotal NaN 0 -> 1 -dqcot826 comparetotal NaN 1 -> 1 -dqcot827 comparetotal NaN 1000 -> 1 -dqcot828 comparetotal NaN Inf -> 1 -dqcot829 comparetotal NaN NaN -> 0 -dqcot830 comparetotal -Inf NaN -> -1 -dqcot831 comparetotal -1000 NaN -> -1 -dqcot832 comparetotal -1 NaN -> -1 -dqcot833 comparetotal -0 NaN -> -1 -dqcot834 comparetotal 0 NaN -> -1 -dqcot835 comparetotal 1 NaN -> -1 -dqcot836 comparetotal 1000 NaN -> -1 -dqcot837 comparetotal Inf NaN -> -1 -dqcot838 comparetotal -NaN -NaN -> 0 -dqcot839 comparetotal +NaN -NaN -> 1 -dqcot840 comparetotal -NaN +NaN -> -1 - -dqcot841 comparetotal sNaN -sNaN -> 1 -dqcot842 comparetotal sNaN -NaN -> 1 -dqcot843 comparetotal sNaN -Inf -> 1 -dqcot844 comparetotal sNaN -1000 -> 1 -dqcot845 comparetotal sNaN -1 -> 1 -dqcot846 comparetotal sNaN -0 -> 1 -dqcot847 comparetotal sNaN 0 -> 1 -dqcot848 comparetotal sNaN 1 -> 1 -dqcot849 comparetotal sNaN 1000 -> 1 -dqcot850 comparetotal sNaN NaN -> -1 -dqcot851 comparetotal sNaN sNaN -> 0 - -dqcot852 comparetotal -sNaN sNaN -> -1 -dqcot853 comparetotal -NaN sNaN -> -1 -dqcot854 comparetotal -Inf sNaN -> -1 -dqcot855 comparetotal -1000 sNaN -> -1 -dqcot856 comparetotal -1 sNaN -> -1 -dqcot857 comparetotal -0 sNaN -> -1 -dqcot858 comparetotal 0 sNaN -> -1 -dqcot859 comparetotal 1 sNaN -> -1 -dqcot860 comparetotal 1000 sNaN -> -1 -dqcot861 comparetotal Inf sNaN -> -1 -dqcot862 comparetotal NaN sNaN -> 1 -dqcot863 comparetotal sNaN sNaN -> 0 - -dqcot871 comparetotal -sNaN -sNaN -> 0 -dqcot872 comparetotal -sNaN -NaN -> 1 -dqcot873 comparetotal -sNaN -Inf -> -1 -dqcot874 comparetotal -sNaN -1000 -> -1 -dqcot875 comparetotal -sNaN -1 -> -1 -dqcot876 comparetotal -sNaN -0 -> -1 -dqcot877 comparetotal -sNaN 0 -> -1 -dqcot878 comparetotal -sNaN 1 -> -1 -dqcot879 comparetotal -sNaN 1000 -> -1 -dqcot880 comparetotal -sNaN NaN -> -1 -dqcot881 comparetotal -sNaN sNaN -> -1 - -dqcot882 comparetotal -sNaN -sNaN -> 0 -dqcot883 comparetotal -NaN -sNaN -> -1 -dqcot884 comparetotal -Inf -sNaN -> 1 -dqcot885 comparetotal -1000 -sNaN -> 1 -dqcot886 comparetotal -1 -sNaN -> 1 -dqcot887 comparetotal -0 -sNaN -> 1 -dqcot888 comparetotal 0 -sNaN -> 1 -dqcot889 comparetotal 1 -sNaN -> 1 -dqcot890 comparetotal 1000 -sNaN -> 1 -dqcot891 comparetotal Inf -sNaN -> 1 -dqcot892 comparetotal NaN -sNaN -> 1 -dqcot893 comparetotal sNaN -sNaN -> 1 - --- NaNs with payload -dqcot960 comparetotal NaN9 -Inf -> 1 -dqcot961 comparetotal NaN8 999 -> 1 -dqcot962 comparetotal NaN77 Inf -> 1 -dqcot963 comparetotal -NaN67 NaN5 -> -1 -dqcot964 comparetotal -Inf -NaN4 -> 1 -dqcot965 comparetotal -999 -NaN33 -> 1 -dqcot966 comparetotal Inf NaN2 -> -1 - -dqcot970 comparetotal -NaN41 -NaN42 -> 1 -dqcot971 comparetotal +NaN41 -NaN42 -> 1 -dqcot972 comparetotal -NaN41 +NaN42 -> -1 -dqcot973 comparetotal +NaN41 +NaN42 -> -1 -dqcot974 comparetotal -NaN42 -NaN01 -> -1 -dqcot975 comparetotal +NaN42 -NaN01 -> 1 -dqcot976 comparetotal -NaN42 +NaN01 -> -1 -dqcot977 comparetotal +NaN42 +NaN01 -> 1 - -dqcot980 comparetotal -sNaN771 -sNaN772 -> 1 -dqcot981 comparetotal +sNaN771 -sNaN772 -> 1 -dqcot982 comparetotal -sNaN771 +sNaN772 -> -1 -dqcot983 comparetotal +sNaN771 +sNaN772 -> -1 -dqcot984 comparetotal -sNaN772 -sNaN771 -> -1 -dqcot985 comparetotal +sNaN772 -sNaN771 -> 1 -dqcot986 comparetotal -sNaN772 +sNaN771 -> -1 -dqcot987 comparetotal +sNaN772 +sNaN771 -> 1 - -dqcot991 comparetotal -sNaN99 -Inf -> -1 -dqcot992 comparetotal sNaN98 -11 -> 1 -dqcot993 comparetotal sNaN97 NaN -> -1 -dqcot994 comparetotal sNaN16 sNaN94 -> -1 -dqcot995 comparetotal NaN85 sNaN83 -> 1 -dqcot996 comparetotal -Inf sNaN92 -> -1 -dqcot997 comparetotal 088 sNaN81 -> -1 -dqcot998 comparetotal Inf sNaN90 -> -1 -dqcot999 comparetotal NaN -sNaN89 -> 1 - --- spread zeros -dqcot1110 comparetotal 0E-6143 0 -> -1 -dqcot1111 comparetotal 0E-6143 -0 -> 1 -dqcot1112 comparetotal -0E-6143 0 -> -1 -dqcot1113 comparetotal -0E-6143 -0 -> 1 -dqcot1114 comparetotal 0E-6143 0E+6144 -> -1 -dqcot1115 comparetotal 0E-6143 -0E+6144 -> 1 -dqcot1116 comparetotal -0E-6143 0E+6144 -> -1 -dqcot1117 comparetotal -0E-6143 -0E+6144 -> 1 -dqcot1118 comparetotal 0 0E+6144 -> -1 -dqcot1119 comparetotal 0 -0E+6144 -> 1 -dqcot1120 comparetotal -0 0E+6144 -> -1 -dqcot1121 comparetotal -0 -0E+6144 -> 1 - -dqcot1130 comparetotal 0E+6144 0 -> 1 -dqcot1131 comparetotal 0E+6144 -0 -> 1 -dqcot1132 comparetotal -0E+6144 0 -> -1 -dqcot1133 comparetotal -0E+6144 -0 -> -1 -dqcot1134 comparetotal 0E+6144 0E-6143 -> 1 -dqcot1135 comparetotal 0E+6144 -0E-6143 -> 1 -dqcot1136 comparetotal -0E+6144 0E-6143 -> -1 -dqcot1137 comparetotal -0E+6144 -0E-6143 -> -1 -dqcot1138 comparetotal 0 0E-6143 -> 1 -dqcot1139 comparetotal 0 -0E-6143 -> 1 -dqcot1140 comparetotal -0 0E-6143 -> -1 -dqcot1141 comparetotal -0 -0E-6143 -> -1 - --- Null tests -dqcot9990 comparetotal 10 # -> NaN Invalid_operation -dqcot9991 comparetotal # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqCompareTotal.decTest -- decQuad comparison using total ordering -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqcot001 comparetotal -2 -2 -> 0 +dqcot002 comparetotal -2 -1 -> -1 +dqcot003 comparetotal -2 0 -> -1 +dqcot004 comparetotal -2 1 -> -1 +dqcot005 comparetotal -2 2 -> -1 +dqcot006 comparetotal -1 -2 -> 1 +dqcot007 comparetotal -1 -1 -> 0 +dqcot008 comparetotal -1 0 -> -1 +dqcot009 comparetotal -1 1 -> -1 +dqcot010 comparetotal -1 2 -> -1 +dqcot011 comparetotal 0 -2 -> 1 +dqcot012 comparetotal 0 -1 -> 1 +dqcot013 comparetotal 0 0 -> 0 +dqcot014 comparetotal 0 1 -> -1 +dqcot015 comparetotal 0 2 -> -1 +dqcot016 comparetotal 1 -2 -> 1 +dqcot017 comparetotal 1 -1 -> 1 +dqcot018 comparetotal 1 0 -> 1 +dqcot019 comparetotal 1 1 -> 0 +dqcot020 comparetotal 1 2 -> -1 +dqcot021 comparetotal 2 -2 -> 1 +dqcot022 comparetotal 2 -1 -> 1 +dqcot023 comparetotal 2 0 -> 1 +dqcot025 comparetotal 2 1 -> 1 +dqcot026 comparetotal 2 2 -> 0 + +dqcot031 comparetotal -20 -20 -> 0 +dqcot032 comparetotal -20 -10 -> -1 +dqcot033 comparetotal -20 00 -> -1 +dqcot034 comparetotal -20 10 -> -1 +dqcot035 comparetotal -20 20 -> -1 +dqcot036 comparetotal -10 -20 -> 1 +dqcot037 comparetotal -10 -10 -> 0 +dqcot038 comparetotal -10 00 -> -1 +dqcot039 comparetotal -10 10 -> -1 +dqcot040 comparetotal -10 20 -> -1 +dqcot041 comparetotal 00 -20 -> 1 +dqcot042 comparetotal 00 -10 -> 1 +dqcot043 comparetotal 00 00 -> 0 +dqcot044 comparetotal 00 10 -> -1 +dqcot045 comparetotal 00 20 -> -1 +dqcot046 comparetotal 10 -20 -> 1 +dqcot047 comparetotal 10 -10 -> 1 +dqcot048 comparetotal 10 00 -> 1 +dqcot049 comparetotal 10 10 -> 0 +dqcot050 comparetotal 10 20 -> -1 +dqcot051 comparetotal 20 -20 -> 1 +dqcot052 comparetotal 20 -10 -> 1 +dqcot053 comparetotal 20 00 -> 1 +dqcot055 comparetotal 20 10 -> 1 +dqcot056 comparetotal 20 20 -> 0 + +dqcot061 comparetotal -2.0 -2.0 -> 0 +dqcot062 comparetotal -2.0 -1.0 -> -1 +dqcot063 comparetotal -2.0 0.0 -> -1 +dqcot064 comparetotal -2.0 1.0 -> -1 +dqcot065 comparetotal -2.0 2.0 -> -1 +dqcot066 comparetotal -1.0 -2.0 -> 1 +dqcot067 comparetotal -1.0 -1.0 -> 0 +dqcot068 comparetotal -1.0 0.0 -> -1 +dqcot069 comparetotal -1.0 1.0 -> -1 +dqcot070 comparetotal -1.0 2.0 -> -1 +dqcot071 comparetotal 0.0 -2.0 -> 1 +dqcot072 comparetotal 0.0 -1.0 -> 1 +dqcot073 comparetotal 0.0 0.0 -> 0 +dqcot074 comparetotal 0.0 1.0 -> -1 +dqcot075 comparetotal 0.0 2.0 -> -1 +dqcot076 comparetotal 1.0 -2.0 -> 1 +dqcot077 comparetotal 1.0 -1.0 -> 1 +dqcot078 comparetotal 1.0 0.0 -> 1 +dqcot079 comparetotal 1.0 1.0 -> 0 +dqcot080 comparetotal 1.0 2.0 -> -1 +dqcot081 comparetotal 2.0 -2.0 -> 1 +dqcot082 comparetotal 2.0 -1.0 -> 1 +dqcot083 comparetotal 2.0 0.0 -> 1 +dqcot085 comparetotal 2.0 1.0 -> 1 +dqcot086 comparetotal 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +dqcot090 comparetotal 9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 +dqcot091 comparetotal -9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> -1 +dqcot092 comparetotal 9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 1 +dqcot093 comparetotal -9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +dqcot100 comparetotal 7.0 7.0 -> 0 +dqcot101 comparetotal 7.0 7 -> -1 +dqcot102 comparetotal 7 7.0 -> 1 +dqcot103 comparetotal 7E+0 7.0 -> 1 +dqcot104 comparetotal 70E-1 7.0 -> 0 +dqcot105 comparetotal 0.7E+1 7 -> 0 +dqcot106 comparetotal 70E-1 7 -> -1 +dqcot107 comparetotal 7.0 7E+0 -> -1 +dqcot108 comparetotal 7.0 70E-1 -> 0 +dqcot109 comparetotal 7 0.7E+1 -> 0 +dqcot110 comparetotal 7 70E-1 -> 1 + +dqcot120 comparetotal 8.0 7.0 -> 1 +dqcot121 comparetotal 8.0 7 -> 1 +dqcot122 comparetotal 8 7.0 -> 1 +dqcot123 comparetotal 8E+0 7.0 -> 1 +dqcot124 comparetotal 80E-1 7.0 -> 1 +dqcot125 comparetotal 0.8E+1 7 -> 1 +dqcot126 comparetotal 80E-1 7 -> 1 +dqcot127 comparetotal 8.0 7E+0 -> 1 +dqcot128 comparetotal 8.0 70E-1 -> 1 +dqcot129 comparetotal 8 0.7E+1 -> 1 +dqcot130 comparetotal 8 70E-1 -> 1 + +dqcot140 comparetotal 8.0 9.0 -> -1 +dqcot141 comparetotal 8.0 9 -> -1 +dqcot142 comparetotal 8 9.0 -> -1 +dqcot143 comparetotal 8E+0 9.0 -> -1 +dqcot144 comparetotal 80E-1 9.0 -> -1 +dqcot145 comparetotal 0.8E+1 9 -> -1 +dqcot146 comparetotal 80E-1 9 -> -1 +dqcot147 comparetotal 8.0 9E+0 -> -1 +dqcot148 comparetotal 8.0 90E-1 -> -1 +dqcot149 comparetotal 8 0.9E+1 -> -1 +dqcot150 comparetotal 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +dqcot200 comparetotal -7.0 7.0 -> -1 +dqcot201 comparetotal -7.0 7 -> -1 +dqcot202 comparetotal -7 7.0 -> -1 +dqcot203 comparetotal -7E+0 7.0 -> -1 +dqcot204 comparetotal -70E-1 7.0 -> -1 +dqcot205 comparetotal -0.7E+1 7 -> -1 +dqcot206 comparetotal -70E-1 7 -> -1 +dqcot207 comparetotal -7.0 7E+0 -> -1 +dqcot208 comparetotal -7.0 70E-1 -> -1 +dqcot209 comparetotal -7 0.7E+1 -> -1 +dqcot210 comparetotal -7 70E-1 -> -1 + +dqcot220 comparetotal -8.0 7.0 -> -1 +dqcot221 comparetotal -8.0 7 -> -1 +dqcot222 comparetotal -8 7.0 -> -1 +dqcot223 comparetotal -8E+0 7.0 -> -1 +dqcot224 comparetotal -80E-1 7.0 -> -1 +dqcot225 comparetotal -0.8E+1 7 -> -1 +dqcot226 comparetotal -80E-1 7 -> -1 +dqcot227 comparetotal -8.0 7E+0 -> -1 +dqcot228 comparetotal -8.0 70E-1 -> -1 +dqcot229 comparetotal -8 0.7E+1 -> -1 +dqcot230 comparetotal -8 70E-1 -> -1 + +dqcot240 comparetotal -8.0 9.0 -> -1 +dqcot241 comparetotal -8.0 9 -> -1 +dqcot242 comparetotal -8 9.0 -> -1 +dqcot243 comparetotal -8E+0 9.0 -> -1 +dqcot244 comparetotal -80E-1 9.0 -> -1 +dqcot245 comparetotal -0.8E+1 9 -> -1 +dqcot246 comparetotal -80E-1 9 -> -1 +dqcot247 comparetotal -8.0 9E+0 -> -1 +dqcot248 comparetotal -8.0 90E-1 -> -1 +dqcot249 comparetotal -8 0.9E+1 -> -1 +dqcot250 comparetotal -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +dqcot300 comparetotal 7.0 -7.0 -> 1 +dqcot301 comparetotal 7.0 -7 -> 1 +dqcot302 comparetotal 7 -7.0 -> 1 +dqcot303 comparetotal 7E+0 -7.0 -> 1 +dqcot304 comparetotal 70E-1 -7.0 -> 1 +dqcot305 comparetotal .7E+1 -7 -> 1 +dqcot306 comparetotal 70E-1 -7 -> 1 +dqcot307 comparetotal 7.0 -7E+0 -> 1 +dqcot308 comparetotal 7.0 -70E-1 -> 1 +dqcot309 comparetotal 7 -.7E+1 -> 1 +dqcot310 comparetotal 7 -70E-1 -> 1 + +dqcot320 comparetotal 8.0 -7.0 -> 1 +dqcot321 comparetotal 8.0 -7 -> 1 +dqcot322 comparetotal 8 -7.0 -> 1 +dqcot323 comparetotal 8E+0 -7.0 -> 1 +dqcot324 comparetotal 80E-1 -7.0 -> 1 +dqcot325 comparetotal .8E+1 -7 -> 1 +dqcot326 comparetotal 80E-1 -7 -> 1 +dqcot327 comparetotal 8.0 -7E+0 -> 1 +dqcot328 comparetotal 8.0 -70E-1 -> 1 +dqcot329 comparetotal 8 -.7E+1 -> 1 +dqcot330 comparetotal 8 -70E-1 -> 1 + +dqcot340 comparetotal 8.0 -9.0 -> 1 +dqcot341 comparetotal 8.0 -9 -> 1 +dqcot342 comparetotal 8 -9.0 -> 1 +dqcot343 comparetotal 8E+0 -9.0 -> 1 +dqcot344 comparetotal 80E-1 -9.0 -> 1 +dqcot345 comparetotal .8E+1 -9 -> 1 +dqcot346 comparetotal 80E-1 -9 -> 1 +dqcot347 comparetotal 8.0 -9E+0 -> 1 +dqcot348 comparetotal 8.0 -90E-1 -> 1 +dqcot349 comparetotal 8 -.9E+1 -> 1 +dqcot350 comparetotal 8 -90E-1 -> 1 + +-- and again, with sign changes -- .. +dqcot400 comparetotal -7.0 -7.0 -> 0 +dqcot401 comparetotal -7.0 -7 -> 1 +dqcot402 comparetotal -7 -7.0 -> -1 +dqcot403 comparetotal -7E+0 -7.0 -> -1 +dqcot404 comparetotal -70E-1 -7.0 -> 0 +dqcot405 comparetotal -.7E+1 -7 -> 0 +dqcot406 comparetotal -70E-1 -7 -> 1 +dqcot407 comparetotal -7.0 -7E+0 -> 1 +dqcot408 comparetotal -7.0 -70E-1 -> 0 +dqcot409 comparetotal -7 -.7E+1 -> 0 +dqcot410 comparetotal -7 -70E-1 -> -1 + +dqcot420 comparetotal -8.0 -7.0 -> -1 +dqcot421 comparetotal -8.0 -7 -> -1 +dqcot422 comparetotal -8 -7.0 -> -1 +dqcot423 comparetotal -8E+0 -7.0 -> -1 +dqcot424 comparetotal -80E-1 -7.0 -> -1 +dqcot425 comparetotal -.8E+1 -7 -> -1 +dqcot426 comparetotal -80E-1 -7 -> -1 +dqcot427 comparetotal -8.0 -7E+0 -> -1 +dqcot428 comparetotal -8.0 -70E-1 -> -1 +dqcot429 comparetotal -8 -.7E+1 -> -1 +dqcot430 comparetotal -8 -70E-1 -> -1 + +dqcot440 comparetotal -8.0 -9.0 -> 1 +dqcot441 comparetotal -8.0 -9 -> 1 +dqcot442 comparetotal -8 -9.0 -> 1 +dqcot443 comparetotal -8E+0 -9.0 -> 1 +dqcot444 comparetotal -80E-1 -9.0 -> 1 +dqcot445 comparetotal -.8E+1 -9 -> 1 +dqcot446 comparetotal -80E-1 -9 -> 1 +dqcot447 comparetotal -8.0 -9E+0 -> 1 +dqcot448 comparetotal -8.0 -90E-1 -> 1 +dqcot449 comparetotal -8 -.9E+1 -> 1 +dqcot450 comparetotal -8 -90E-1 -> 1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +dqcot473 comparetotal 123.4560000000000E-89 123.456E-89 -> -1 +dqcot474 comparetotal 123.456000000000E+89 123.456E+89 -> -1 +dqcot475 comparetotal 123.45600000000E-89 123.456E-89 -> -1 +dqcot476 comparetotal 123.4560000000E+89 123.456E+89 -> -1 +dqcot477 comparetotal 123.456000000E-89 123.456E-89 -> -1 +dqcot478 comparetotal 123.45600000E+89 123.456E+89 -> -1 +dqcot479 comparetotal 123.4560000E-89 123.456E-89 -> -1 +dqcot480 comparetotal 123.456000E+89 123.456E+89 -> -1 +dqcot481 comparetotal 123.45600E-89 123.456E-89 -> -1 +dqcot482 comparetotal 123.4560E+89 123.456E+89 -> -1 +dqcot483 comparetotal 123.456E-89 123.456E-89 -> 0 +dqcot487 comparetotal 123.456E+89 123.4560000000000E+89 -> 1 +dqcot488 comparetotal 123.456E-89 123.456000000000E-89 -> 1 +dqcot489 comparetotal 123.456E+89 123.45600000000E+89 -> 1 +dqcot490 comparetotal 123.456E-89 123.4560000000E-89 -> 1 +dqcot491 comparetotal 123.456E+89 123.456000000E+89 -> 1 +dqcot492 comparetotal 123.456E-89 123.45600000E-89 -> 1 +dqcot493 comparetotal 123.456E+89 123.4560000E+89 -> 1 +dqcot494 comparetotal 123.456E-89 123.456000E-89 -> 1 +dqcot495 comparetotal 123.456E+89 123.45600E+89 -> 1 +dqcot496 comparetotal 123.456E-89 123.4560E-89 -> 1 +dqcot497 comparetotal 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +dqcot498 comparetotal 1 1E-17 -> 1 +dqcot499 comparetotal 1 1E-16 -> 1 +dqcot500 comparetotal 1 1E-15 -> 1 +dqcot501 comparetotal 1 1E-14 -> 1 +dqcot502 comparetotal 1 1E-13 -> 1 +dqcot503 comparetotal 1 1E-12 -> 1 +dqcot504 comparetotal 1 1E-11 -> 1 +dqcot505 comparetotal 1 1E-10 -> 1 +dqcot506 comparetotal 1 1E-9 -> 1 +dqcot507 comparetotal 1 1E-8 -> 1 +dqcot508 comparetotal 1 1E-7 -> 1 +dqcot509 comparetotal 1 1E-6 -> 1 +dqcot510 comparetotal 1 1E-5 -> 1 +dqcot511 comparetotal 1 1E-4 -> 1 +dqcot512 comparetotal 1 1E-3 -> 1 +dqcot513 comparetotal 1 1E-2 -> 1 +dqcot514 comparetotal 1 1E-1 -> 1 +dqcot515 comparetotal 1 1E-0 -> 0 +dqcot516 comparetotal 1 1E+1 -> -1 +dqcot517 comparetotal 1 1E+2 -> -1 +dqcot518 comparetotal 1 1E+3 -> -1 +dqcot519 comparetotal 1 1E+4 -> -1 +dqcot521 comparetotal 1 1E+5 -> -1 +dqcot522 comparetotal 1 1E+6 -> -1 +dqcot523 comparetotal 1 1E+7 -> -1 +dqcot524 comparetotal 1 1E+8 -> -1 +dqcot525 comparetotal 1 1E+9 -> -1 +dqcot526 comparetotal 1 1E+10 -> -1 +dqcot527 comparetotal 1 1E+11 -> -1 +dqcot528 comparetotal 1 1E+12 -> -1 +dqcot529 comparetotal 1 1E+13 -> -1 +dqcot530 comparetotal 1 1E+14 -> -1 +dqcot531 comparetotal 1 1E+15 -> -1 +dqcot532 comparetotal 1 1E+16 -> -1 +dqcot533 comparetotal 1 1E+17 -> -1 +-- LR swap +dqcot538 comparetotal 1E-17 1 -> -1 +dqcot539 comparetotal 1E-16 1 -> -1 +dqcot540 comparetotal 1E-15 1 -> -1 +dqcot541 comparetotal 1E-14 1 -> -1 +dqcot542 comparetotal 1E-13 1 -> -1 +dqcot543 comparetotal 1E-12 1 -> -1 +dqcot544 comparetotal 1E-11 1 -> -1 +dqcot545 comparetotal 1E-10 1 -> -1 +dqcot546 comparetotal 1E-9 1 -> -1 +dqcot547 comparetotal 1E-8 1 -> -1 +dqcot548 comparetotal 1E-7 1 -> -1 +dqcot549 comparetotal 1E-6 1 -> -1 +dqcot550 comparetotal 1E-5 1 -> -1 +dqcot551 comparetotal 1E-4 1 -> -1 +dqcot552 comparetotal 1E-3 1 -> -1 +dqcot553 comparetotal 1E-2 1 -> -1 +dqcot554 comparetotal 1E-1 1 -> -1 +dqcot555 comparetotal 1E-0 1 -> 0 +dqcot556 comparetotal 1E+1 1 -> 1 +dqcot557 comparetotal 1E+2 1 -> 1 +dqcot558 comparetotal 1E+3 1 -> 1 +dqcot559 comparetotal 1E+4 1 -> 1 +dqcot561 comparetotal 1E+5 1 -> 1 +dqcot562 comparetotal 1E+6 1 -> 1 +dqcot563 comparetotal 1E+7 1 -> 1 +dqcot564 comparetotal 1E+8 1 -> 1 +dqcot565 comparetotal 1E+9 1 -> 1 +dqcot566 comparetotal 1E+10 1 -> 1 +dqcot567 comparetotal 1E+11 1 -> 1 +dqcot568 comparetotal 1E+12 1 -> 1 +dqcot569 comparetotal 1E+13 1 -> 1 +dqcot570 comparetotal 1E+14 1 -> 1 +dqcot571 comparetotal 1E+15 1 -> 1 +dqcot572 comparetotal 1E+16 1 -> 1 +dqcot573 comparetotal 1E+17 1 -> 1 +-- similar with a useful coefficient, one side only +dqcot578 comparetotal 0.000000987654321 1E-17 -> 1 +dqcot579 comparetotal 0.000000987654321 1E-16 -> 1 +dqcot580 comparetotal 0.000000987654321 1E-15 -> 1 +dqcot581 comparetotal 0.000000987654321 1E-14 -> 1 +dqcot582 comparetotal 0.000000987654321 1E-13 -> 1 +dqcot583 comparetotal 0.000000987654321 1E-12 -> 1 +dqcot584 comparetotal 0.000000987654321 1E-11 -> 1 +dqcot585 comparetotal 0.000000987654321 1E-10 -> 1 +dqcot586 comparetotal 0.000000987654321 1E-9 -> 1 +dqcot587 comparetotal 0.000000987654321 1E-8 -> 1 +dqcot588 comparetotal 0.000000987654321 1E-7 -> 1 +dqcot589 comparetotal 0.000000987654321 1E-6 -> -1 +dqcot590 comparetotal 0.000000987654321 1E-5 -> -1 +dqcot591 comparetotal 0.000000987654321 1E-4 -> -1 +dqcot592 comparetotal 0.000000987654321 1E-3 -> -1 +dqcot593 comparetotal 0.000000987654321 1E-2 -> -1 +dqcot594 comparetotal 0.000000987654321 1E-1 -> -1 +dqcot595 comparetotal 0.000000987654321 1E-0 -> -1 +dqcot596 comparetotal 0.000000987654321 1E+1 -> -1 +dqcot597 comparetotal 0.000000987654321 1E+2 -> -1 +dqcot598 comparetotal 0.000000987654321 1E+3 -> -1 +dqcot599 comparetotal 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +dqcot600 comparetotal 12 12.2345 -> -1 +dqcot601 comparetotal 12.0 12.2345 -> -1 +dqcot602 comparetotal 12.00 12.2345 -> -1 +dqcot603 comparetotal 12.000 12.2345 -> -1 +dqcot604 comparetotal 12.0000 12.2345 -> -1 +dqcot605 comparetotal 12.00000 12.2345 -> -1 +dqcot606 comparetotal 12.000000 12.2345 -> -1 +dqcot607 comparetotal 12.0000000 12.2345 -> -1 +dqcot608 comparetotal 12.00000000 12.2345 -> -1 +dqcot609 comparetotal 12.000000000 12.2345 -> -1 +dqcot610 comparetotal 12.1234 12 -> 1 +dqcot611 comparetotal 12.1234 12.0 -> 1 +dqcot612 comparetotal 12.1234 12.00 -> 1 +dqcot613 comparetotal 12.1234 12.000 -> 1 +dqcot614 comparetotal 12.1234 12.0000 -> 1 +dqcot615 comparetotal 12.1234 12.00000 -> 1 +dqcot616 comparetotal 12.1234 12.000000 -> 1 +dqcot617 comparetotal 12.1234 12.0000000 -> 1 +dqcot618 comparetotal 12.1234 12.00000000 -> 1 +dqcot619 comparetotal 12.1234 12.000000000 -> 1 +dqcot620 comparetotal -12 -12.2345 -> 1 +dqcot621 comparetotal -12.0 -12.2345 -> 1 +dqcot622 comparetotal -12.00 -12.2345 -> 1 +dqcot623 comparetotal -12.000 -12.2345 -> 1 +dqcot624 comparetotal -12.0000 -12.2345 -> 1 +dqcot625 comparetotal -12.00000 -12.2345 -> 1 +dqcot626 comparetotal -12.000000 -12.2345 -> 1 +dqcot627 comparetotal -12.0000000 -12.2345 -> 1 +dqcot628 comparetotal -12.00000000 -12.2345 -> 1 +dqcot629 comparetotal -12.000000000 -12.2345 -> 1 +dqcot630 comparetotal -12.1234 -12 -> -1 +dqcot631 comparetotal -12.1234 -12.0 -> -1 +dqcot632 comparetotal -12.1234 -12.00 -> -1 +dqcot633 comparetotal -12.1234 -12.000 -> -1 +dqcot634 comparetotal -12.1234 -12.0000 -> -1 +dqcot635 comparetotal -12.1234 -12.00000 -> -1 +dqcot636 comparetotal -12.1234 -12.000000 -> -1 +dqcot637 comparetotal -12.1234 -12.0000000 -> -1 +dqcot638 comparetotal -12.1234 -12.00000000 -> -1 +dqcot639 comparetotal -12.1234 -12.000000000 -> -1 + +-- extended zeros +dqcot640 comparetotal 0 0 -> 0 +dqcot641 comparetotal 0 -0 -> 1 +dqcot642 comparetotal 0 -0.0 -> 1 +dqcot643 comparetotal 0 0.0 -> 1 +dqcot644 comparetotal -0 0 -> -1 +dqcot645 comparetotal -0 -0 -> 0 +dqcot646 comparetotal -0 -0.0 -> -1 +dqcot647 comparetotal -0 0.0 -> -1 +dqcot648 comparetotal 0.0 0 -> -1 +dqcot649 comparetotal 0.0 -0 -> 1 +dqcot650 comparetotal 0.0 -0.0 -> 1 +dqcot651 comparetotal 0.0 0.0 -> 0 +dqcot652 comparetotal -0.0 0 -> -1 +dqcot653 comparetotal -0.0 -0 -> 1 +dqcot654 comparetotal -0.0 -0.0 -> 0 +dqcot655 comparetotal -0.0 0.0 -> -1 + +dqcot656 comparetotal -0E1 0.0 -> -1 +dqcot657 comparetotal -0E2 0.0 -> -1 +dqcot658 comparetotal 0E1 0.0 -> 1 +dqcot659 comparetotal 0E2 0.0 -> 1 +dqcot660 comparetotal -0E1 0 -> -1 +dqcot661 comparetotal -0E2 0 -> -1 +dqcot662 comparetotal 0E1 0 -> 1 +dqcot663 comparetotal 0E2 0 -> 1 +dqcot664 comparetotal -0E1 -0E1 -> 0 +dqcot665 comparetotal -0E2 -0E1 -> -1 +dqcot666 comparetotal 0E1 -0E1 -> 1 +dqcot667 comparetotal 0E2 -0E1 -> 1 +dqcot668 comparetotal -0E1 -0E2 -> 1 +dqcot669 comparetotal -0E2 -0E2 -> 0 +dqcot670 comparetotal 0E1 -0E2 -> 1 +dqcot671 comparetotal 0E2 -0E2 -> 1 +dqcot672 comparetotal -0E1 0E1 -> -1 +dqcot673 comparetotal -0E2 0E1 -> -1 +dqcot674 comparetotal 0E1 0E1 -> 0 +dqcot675 comparetotal 0E2 0E1 -> 1 +dqcot676 comparetotal -0E1 0E2 -> -1 +dqcot677 comparetotal -0E2 0E2 -> -1 +dqcot678 comparetotal 0E1 0E2 -> -1 +dqcot679 comparetotal 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +dqcot680 comparetotal 12 12 -> 0 +dqcot681 comparetotal 12 12.0 -> 1 +dqcot682 comparetotal 12 12.00 -> 1 +dqcot683 comparetotal 12 12.000 -> 1 +dqcot684 comparetotal 12 12.0000 -> 1 +dqcot685 comparetotal 12 12.00000 -> 1 +dqcot686 comparetotal 12 12.000000 -> 1 +dqcot687 comparetotal 12 12.0000000 -> 1 +dqcot688 comparetotal 12 12.00000000 -> 1 +dqcot689 comparetotal 12 12.000000000 -> 1 +dqcot690 comparetotal 12 12 -> 0 +dqcot691 comparetotal 12.0 12 -> -1 +dqcot692 comparetotal 12.00 12 -> -1 +dqcot693 comparetotal 12.000 12 -> -1 +dqcot694 comparetotal 12.0000 12 -> -1 +dqcot695 comparetotal 12.00000 12 -> -1 +dqcot696 comparetotal 12.000000 12 -> -1 +dqcot697 comparetotal 12.0000000 12 -> -1 +dqcot698 comparetotal 12.00000000 12 -> -1 +dqcot699 comparetotal 12.000000000 12 -> -1 + +-- old long operand checks +dqcot701 comparetotal 12345678000 1 -> 1 +dqcot702 comparetotal 1 12345678000 -> -1 +dqcot703 comparetotal 1234567800 1 -> 1 +dqcot704 comparetotal 1 1234567800 -> -1 +dqcot705 comparetotal 1234567890 1 -> 1 +dqcot706 comparetotal 1 1234567890 -> -1 +dqcot707 comparetotal 1234567891 1 -> 1 +dqcot708 comparetotal 1 1234567891 -> -1 +dqcot709 comparetotal 12345678901 1 -> 1 +dqcot710 comparetotal 1 12345678901 -> -1 +dqcot711 comparetotal 1234567896 1 -> 1 +dqcot712 comparetotal 1 1234567896 -> -1 +dqcot713 comparetotal -1234567891 1 -> -1 +dqcot714 comparetotal 1 -1234567891 -> 1 +dqcot715 comparetotal -12345678901 1 -> -1 +dqcot716 comparetotal 1 -12345678901 -> 1 +dqcot717 comparetotal -1234567896 1 -> -1 +dqcot718 comparetotal 1 -1234567896 -> 1 + +-- old residue cases +dqcot740 comparetotal 1 0.9999999 -> 1 +dqcot741 comparetotal 1 0.999999 -> 1 +dqcot742 comparetotal 1 0.99999 -> 1 +dqcot743 comparetotal 1 1.0000 -> 1 +dqcot744 comparetotal 1 1.00001 -> -1 +dqcot745 comparetotal 1 1.000001 -> -1 +dqcot746 comparetotal 1 1.0000001 -> -1 +dqcot750 comparetotal 0.9999999 1 -> -1 +dqcot751 comparetotal 0.999999 1 -> -1 +dqcot752 comparetotal 0.99999 1 -> -1 +dqcot753 comparetotal 1.0000 1 -> -1 +dqcot754 comparetotal 1.00001 1 -> 1 +dqcot755 comparetotal 1.000001 1 -> 1 +dqcot756 comparetotal 1.0000001 1 -> 1 + +-- Specials +dqcot780 comparetotal Inf -Inf -> 1 +dqcot781 comparetotal Inf -1000 -> 1 +dqcot782 comparetotal Inf -1 -> 1 +dqcot783 comparetotal Inf -0 -> 1 +dqcot784 comparetotal Inf 0 -> 1 +dqcot785 comparetotal Inf 1 -> 1 +dqcot786 comparetotal Inf 1000 -> 1 +dqcot787 comparetotal Inf Inf -> 0 +dqcot788 comparetotal -1000 Inf -> -1 +dqcot789 comparetotal -Inf Inf -> -1 +dqcot790 comparetotal -1 Inf -> -1 +dqcot791 comparetotal -0 Inf -> -1 +dqcot792 comparetotal 0 Inf -> -1 +dqcot793 comparetotal 1 Inf -> -1 +dqcot794 comparetotal 1000 Inf -> -1 +dqcot795 comparetotal Inf Inf -> 0 + +dqcot800 comparetotal -Inf -Inf -> 0 +dqcot801 comparetotal -Inf -1000 -> -1 +dqcot802 comparetotal -Inf -1 -> -1 +dqcot803 comparetotal -Inf -0 -> -1 +dqcot804 comparetotal -Inf 0 -> -1 +dqcot805 comparetotal -Inf 1 -> -1 +dqcot806 comparetotal -Inf 1000 -> -1 +dqcot807 comparetotal -Inf Inf -> -1 +dqcot808 comparetotal -Inf -Inf -> 0 +dqcot809 comparetotal -1000 -Inf -> 1 +dqcot810 comparetotal -1 -Inf -> 1 +dqcot811 comparetotal -0 -Inf -> 1 +dqcot812 comparetotal 0 -Inf -> 1 +dqcot813 comparetotal 1 -Inf -> 1 +dqcot814 comparetotal 1000 -Inf -> 1 +dqcot815 comparetotal Inf -Inf -> 1 + +dqcot821 comparetotal NaN -Inf -> 1 +dqcot822 comparetotal NaN -1000 -> 1 +dqcot823 comparetotal NaN -1 -> 1 +dqcot824 comparetotal NaN -0 -> 1 +dqcot825 comparetotal NaN 0 -> 1 +dqcot826 comparetotal NaN 1 -> 1 +dqcot827 comparetotal NaN 1000 -> 1 +dqcot828 comparetotal NaN Inf -> 1 +dqcot829 comparetotal NaN NaN -> 0 +dqcot830 comparetotal -Inf NaN -> -1 +dqcot831 comparetotal -1000 NaN -> -1 +dqcot832 comparetotal -1 NaN -> -1 +dqcot833 comparetotal -0 NaN -> -1 +dqcot834 comparetotal 0 NaN -> -1 +dqcot835 comparetotal 1 NaN -> -1 +dqcot836 comparetotal 1000 NaN -> -1 +dqcot837 comparetotal Inf NaN -> -1 +dqcot838 comparetotal -NaN -NaN -> 0 +dqcot839 comparetotal +NaN -NaN -> 1 +dqcot840 comparetotal -NaN +NaN -> -1 + +dqcot841 comparetotal sNaN -sNaN -> 1 +dqcot842 comparetotal sNaN -NaN -> 1 +dqcot843 comparetotal sNaN -Inf -> 1 +dqcot844 comparetotal sNaN -1000 -> 1 +dqcot845 comparetotal sNaN -1 -> 1 +dqcot846 comparetotal sNaN -0 -> 1 +dqcot847 comparetotal sNaN 0 -> 1 +dqcot848 comparetotal sNaN 1 -> 1 +dqcot849 comparetotal sNaN 1000 -> 1 +dqcot850 comparetotal sNaN NaN -> -1 +dqcot851 comparetotal sNaN sNaN -> 0 + +dqcot852 comparetotal -sNaN sNaN -> -1 +dqcot853 comparetotal -NaN sNaN -> -1 +dqcot854 comparetotal -Inf sNaN -> -1 +dqcot855 comparetotal -1000 sNaN -> -1 +dqcot856 comparetotal -1 sNaN -> -1 +dqcot857 comparetotal -0 sNaN -> -1 +dqcot858 comparetotal 0 sNaN -> -1 +dqcot859 comparetotal 1 sNaN -> -1 +dqcot860 comparetotal 1000 sNaN -> -1 +dqcot861 comparetotal Inf sNaN -> -1 +dqcot862 comparetotal NaN sNaN -> 1 +dqcot863 comparetotal sNaN sNaN -> 0 + +dqcot871 comparetotal -sNaN -sNaN -> 0 +dqcot872 comparetotal -sNaN -NaN -> 1 +dqcot873 comparetotal -sNaN -Inf -> -1 +dqcot874 comparetotal -sNaN -1000 -> -1 +dqcot875 comparetotal -sNaN -1 -> -1 +dqcot876 comparetotal -sNaN -0 -> -1 +dqcot877 comparetotal -sNaN 0 -> -1 +dqcot878 comparetotal -sNaN 1 -> -1 +dqcot879 comparetotal -sNaN 1000 -> -1 +dqcot880 comparetotal -sNaN NaN -> -1 +dqcot881 comparetotal -sNaN sNaN -> -1 + +dqcot882 comparetotal -sNaN -sNaN -> 0 +dqcot883 comparetotal -NaN -sNaN -> -1 +dqcot884 comparetotal -Inf -sNaN -> 1 +dqcot885 comparetotal -1000 -sNaN -> 1 +dqcot886 comparetotal -1 -sNaN -> 1 +dqcot887 comparetotal -0 -sNaN -> 1 +dqcot888 comparetotal 0 -sNaN -> 1 +dqcot889 comparetotal 1 -sNaN -> 1 +dqcot890 comparetotal 1000 -sNaN -> 1 +dqcot891 comparetotal Inf -sNaN -> 1 +dqcot892 comparetotal NaN -sNaN -> 1 +dqcot893 comparetotal sNaN -sNaN -> 1 + +-- NaNs with payload +dqcot960 comparetotal NaN9 -Inf -> 1 +dqcot961 comparetotal NaN8 999 -> 1 +dqcot962 comparetotal NaN77 Inf -> 1 +dqcot963 comparetotal -NaN67 NaN5 -> -1 +dqcot964 comparetotal -Inf -NaN4 -> 1 +dqcot965 comparetotal -999 -NaN33 -> 1 +dqcot966 comparetotal Inf NaN2 -> -1 + +dqcot970 comparetotal -NaN41 -NaN42 -> 1 +dqcot971 comparetotal +NaN41 -NaN42 -> 1 +dqcot972 comparetotal -NaN41 +NaN42 -> -1 +dqcot973 comparetotal +NaN41 +NaN42 -> -1 +dqcot974 comparetotal -NaN42 -NaN01 -> -1 +dqcot975 comparetotal +NaN42 -NaN01 -> 1 +dqcot976 comparetotal -NaN42 +NaN01 -> -1 +dqcot977 comparetotal +NaN42 +NaN01 -> 1 + +dqcot980 comparetotal -sNaN771 -sNaN772 -> 1 +dqcot981 comparetotal +sNaN771 -sNaN772 -> 1 +dqcot982 comparetotal -sNaN771 +sNaN772 -> -1 +dqcot983 comparetotal +sNaN771 +sNaN772 -> -1 +dqcot984 comparetotal -sNaN772 -sNaN771 -> -1 +dqcot985 comparetotal +sNaN772 -sNaN771 -> 1 +dqcot986 comparetotal -sNaN772 +sNaN771 -> -1 +dqcot987 comparetotal +sNaN772 +sNaN771 -> 1 + +dqcot991 comparetotal -sNaN99 -Inf -> -1 +dqcot992 comparetotal sNaN98 -11 -> 1 +dqcot993 comparetotal sNaN97 NaN -> -1 +dqcot994 comparetotal sNaN16 sNaN94 -> -1 +dqcot995 comparetotal NaN85 sNaN83 -> 1 +dqcot996 comparetotal -Inf sNaN92 -> -1 +dqcot997 comparetotal 088 sNaN81 -> -1 +dqcot998 comparetotal Inf sNaN90 -> -1 +dqcot999 comparetotal NaN -sNaN89 -> 1 + +-- spread zeros +dqcot1110 comparetotal 0E-6143 0 -> -1 +dqcot1111 comparetotal 0E-6143 -0 -> 1 +dqcot1112 comparetotal -0E-6143 0 -> -1 +dqcot1113 comparetotal -0E-6143 -0 -> 1 +dqcot1114 comparetotal 0E-6143 0E+6144 -> -1 +dqcot1115 comparetotal 0E-6143 -0E+6144 -> 1 +dqcot1116 comparetotal -0E-6143 0E+6144 -> -1 +dqcot1117 comparetotal -0E-6143 -0E+6144 -> 1 +dqcot1118 comparetotal 0 0E+6144 -> -1 +dqcot1119 comparetotal 0 -0E+6144 -> 1 +dqcot1120 comparetotal -0 0E+6144 -> -1 +dqcot1121 comparetotal -0 -0E+6144 -> 1 + +dqcot1130 comparetotal 0E+6144 0 -> 1 +dqcot1131 comparetotal 0E+6144 -0 -> 1 +dqcot1132 comparetotal -0E+6144 0 -> -1 +dqcot1133 comparetotal -0E+6144 -0 -> -1 +dqcot1134 comparetotal 0E+6144 0E-6143 -> 1 +dqcot1135 comparetotal 0E+6144 -0E-6143 -> 1 +dqcot1136 comparetotal -0E+6144 0E-6143 -> -1 +dqcot1137 comparetotal -0E+6144 -0E-6143 -> -1 +dqcot1138 comparetotal 0 0E-6143 -> 1 +dqcot1139 comparetotal 0 -0E-6143 -> 1 +dqcot1140 comparetotal -0 0E-6143 -> -1 +dqcot1141 comparetotal -0 -0E-6143 -> -1 + +-- Null tests +dqcot9990 comparetotal 10 # -> NaN Invalid_operation +dqcot9991 comparetotal # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqCompareTotalMag.decTest b/Lib/test/decimaltestdata/dqCompareTotalMag.decTest index 0b81bfbc242..48b3e086b1b 100644 --- a/Lib/test/decimaltestdata/dqCompareTotalMag.decTest +++ b/Lib/test/decimaltestdata/dqCompareTotalMag.decTest @@ -1,706 +1,706 @@ ------------------------------------------------------------------------- --- dqCompareTotalMag.decTest -- decQuad comparison; abs. total order -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Note that we cannot assume add/subtract tests cover paths adequately, --- here, because the code might be quite different (comparison cannot --- overflow or underflow, so actual subtractions are not necessary). --- Similarly, comparetotal will have some radically different paths --- than compare. - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqctm001 comparetotmag -2 -2 -> 0 -dqctm002 comparetotmag -2 -1 -> 1 -dqctm003 comparetotmag -2 0 -> 1 -dqctm004 comparetotmag -2 1 -> 1 -dqctm005 comparetotmag -2 2 -> 0 -dqctm006 comparetotmag -1 -2 -> -1 -dqctm007 comparetotmag -1 -1 -> 0 -dqctm008 comparetotmag -1 0 -> 1 -dqctm009 comparetotmag -1 1 -> 0 -dqctm010 comparetotmag -1 2 -> -1 -dqctm011 comparetotmag 0 -2 -> -1 -dqctm012 comparetotmag 0 -1 -> -1 -dqctm013 comparetotmag 0 0 -> 0 -dqctm014 comparetotmag 0 1 -> -1 -dqctm015 comparetotmag 0 2 -> -1 -dqctm016 comparetotmag 1 -2 -> -1 -dqctm017 comparetotmag 1 -1 -> 0 -dqctm018 comparetotmag 1 0 -> 1 -dqctm019 comparetotmag 1 1 -> 0 -dqctm020 comparetotmag 1 2 -> -1 -dqctm021 comparetotmag 2 -2 -> 0 -dqctm022 comparetotmag 2 -1 -> 1 -dqctm023 comparetotmag 2 0 -> 1 -dqctm025 comparetotmag 2 1 -> 1 -dqctm026 comparetotmag 2 2 -> 0 - -dqctm031 comparetotmag -20 -20 -> 0 -dqctm032 comparetotmag -20 -10 -> 1 -dqctm033 comparetotmag -20 00 -> 1 -dqctm034 comparetotmag -20 10 -> 1 -dqctm035 comparetotmag -20 20 -> 0 -dqctm036 comparetotmag -10 -20 -> -1 -dqctm037 comparetotmag -10 -10 -> 0 -dqctm038 comparetotmag -10 00 -> 1 -dqctm039 comparetotmag -10 10 -> 0 -dqctm040 comparetotmag -10 20 -> -1 -dqctm041 comparetotmag 00 -20 -> -1 -dqctm042 comparetotmag 00 -10 -> -1 -dqctm043 comparetotmag 00 00 -> 0 -dqctm044 comparetotmag 00 10 -> -1 -dqctm045 comparetotmag 00 20 -> -1 -dqctm046 comparetotmag 10 -20 -> -1 -dqctm047 comparetotmag 10 -10 -> 0 -dqctm048 comparetotmag 10 00 -> 1 -dqctm049 comparetotmag 10 10 -> 0 -dqctm050 comparetotmag 10 20 -> -1 -dqctm051 comparetotmag 20 -20 -> 0 -dqctm052 comparetotmag 20 -10 -> 1 -dqctm053 comparetotmag 20 00 -> 1 -dqctm055 comparetotmag 20 10 -> 1 -dqctm056 comparetotmag 20 20 -> 0 - -dqctm061 comparetotmag -2.0 -2.0 -> 0 -dqctm062 comparetotmag -2.0 -1.0 -> 1 -dqctm063 comparetotmag -2.0 0.0 -> 1 -dqctm064 comparetotmag -2.0 1.0 -> 1 -dqctm065 comparetotmag -2.0 2.0 -> 0 -dqctm066 comparetotmag -1.0 -2.0 -> -1 -dqctm067 comparetotmag -1.0 -1.0 -> 0 -dqctm068 comparetotmag -1.0 0.0 -> 1 -dqctm069 comparetotmag -1.0 1.0 -> 0 -dqctm070 comparetotmag -1.0 2.0 -> -1 -dqctm071 comparetotmag 0.0 -2.0 -> -1 -dqctm072 comparetotmag 0.0 -1.0 -> -1 -dqctm073 comparetotmag 0.0 0.0 -> 0 -dqctm074 comparetotmag 0.0 1.0 -> -1 -dqctm075 comparetotmag 0.0 2.0 -> -1 -dqctm076 comparetotmag 1.0 -2.0 -> -1 -dqctm077 comparetotmag 1.0 -1.0 -> 0 -dqctm078 comparetotmag 1.0 0.0 -> 1 -dqctm079 comparetotmag 1.0 1.0 -> 0 -dqctm080 comparetotmag 1.0 2.0 -> -1 -dqctm081 comparetotmag 2.0 -2.0 -> 0 -dqctm082 comparetotmag 2.0 -1.0 -> 1 -dqctm083 comparetotmag 2.0 0.0 -> 1 -dqctm085 comparetotmag 2.0 1.0 -> 1 -dqctm086 comparetotmag 2.0 2.0 -> 0 - --- now some cases which might overflow if subtract were used -dqctm090 comparetotmag 9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 -dqctm091 comparetotmag -9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 -dqctm092 comparetotmag 9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 -dqctm093 comparetotmag -9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 - --- some differing length/exponent cases --- in this first group, compare would compare all equal -dqctm100 comparetotmag 7.0 7.0 -> 0 -dqctm101 comparetotmag 7.0 7 -> -1 -dqctm102 comparetotmag 7 7.0 -> 1 -dqctm103 comparetotmag 7E+0 7.0 -> 1 -dqctm104 comparetotmag 70E-1 7.0 -> 0 -dqctm105 comparetotmag 0.7E+1 7 -> 0 -dqctm106 comparetotmag 70E-1 7 -> -1 -dqctm107 comparetotmag 7.0 7E+0 -> -1 -dqctm108 comparetotmag 7.0 70E-1 -> 0 -dqctm109 comparetotmag 7 0.7E+1 -> 0 -dqctm110 comparetotmag 7 70E-1 -> 1 - -dqctm120 comparetotmag 8.0 7.0 -> 1 -dqctm121 comparetotmag 8.0 7 -> 1 -dqctm122 comparetotmag 8 7.0 -> 1 -dqctm123 comparetotmag 8E+0 7.0 -> 1 -dqctm124 comparetotmag 80E-1 7.0 -> 1 -dqctm125 comparetotmag 0.8E+1 7 -> 1 -dqctm126 comparetotmag 80E-1 7 -> 1 -dqctm127 comparetotmag 8.0 7E+0 -> 1 -dqctm128 comparetotmag 8.0 70E-1 -> 1 -dqctm129 comparetotmag 8 0.7E+1 -> 1 -dqctm130 comparetotmag 8 70E-1 -> 1 - -dqctm140 comparetotmag 8.0 9.0 -> -1 -dqctm141 comparetotmag 8.0 9 -> -1 -dqctm142 comparetotmag 8 9.0 -> -1 -dqctm143 comparetotmag 8E+0 9.0 -> -1 -dqctm144 comparetotmag 80E-1 9.0 -> -1 -dqctm145 comparetotmag 0.8E+1 9 -> -1 -dqctm146 comparetotmag 80E-1 9 -> -1 -dqctm147 comparetotmag 8.0 9E+0 -> -1 -dqctm148 comparetotmag 8.0 90E-1 -> -1 -dqctm149 comparetotmag 8 0.9E+1 -> -1 -dqctm150 comparetotmag 8 90E-1 -> -1 - --- and again, with sign changes -+ .. -dqctm200 comparetotmag -7.0 7.0 -> 0 -dqctm201 comparetotmag -7.0 7 -> -1 -dqctm202 comparetotmag -7 7.0 -> 1 -dqctm203 comparetotmag -7E+0 7.0 -> 1 -dqctm204 comparetotmag -70E-1 7.0 -> 0 -dqctm205 comparetotmag -0.7E+1 7 -> 0 -dqctm206 comparetotmag -70E-1 7 -> -1 -dqctm207 comparetotmag -7.0 7E+0 -> -1 -dqctm208 comparetotmag -7.0 70E-1 -> 0 -dqctm209 comparetotmag -7 0.7E+1 -> 0 -dqctm210 comparetotmag -7 70E-1 -> 1 - -dqctm220 comparetotmag -8.0 7.0 -> 1 -dqctm221 comparetotmag -8.0 7 -> 1 -dqctm222 comparetotmag -8 7.0 -> 1 -dqctm223 comparetotmag -8E+0 7.0 -> 1 -dqctm224 comparetotmag -80E-1 7.0 -> 1 -dqctm225 comparetotmag -0.8E+1 7 -> 1 -dqctm226 comparetotmag -80E-1 7 -> 1 -dqctm227 comparetotmag -8.0 7E+0 -> 1 -dqctm228 comparetotmag -8.0 70E-1 -> 1 -dqctm229 comparetotmag -8 0.7E+1 -> 1 -dqctm230 comparetotmag -8 70E-1 -> 1 - -dqctm240 comparetotmag -8.0 9.0 -> -1 -dqctm241 comparetotmag -8.0 9 -> -1 -dqctm242 comparetotmag -8 9.0 -> -1 -dqctm243 comparetotmag -8E+0 9.0 -> -1 -dqctm244 comparetotmag -80E-1 9.0 -> -1 -dqctm245 comparetotmag -0.8E+1 9 -> -1 -dqctm246 comparetotmag -80E-1 9 -> -1 -dqctm247 comparetotmag -8.0 9E+0 -> -1 -dqctm248 comparetotmag -8.0 90E-1 -> -1 -dqctm249 comparetotmag -8 0.9E+1 -> -1 -dqctm250 comparetotmag -8 90E-1 -> -1 - --- and again, with sign changes +- .. -dqctm300 comparetotmag 7.0 -7.0 -> 0 -dqctm301 comparetotmag 7.0 -7 -> -1 -dqctm302 comparetotmag 7 -7.0 -> 1 -dqctm303 comparetotmag 7E+0 -7.0 -> 1 -dqctm304 comparetotmag 70E-1 -7.0 -> 0 -dqctm305 comparetotmag .7E+1 -7 -> 0 -dqctm306 comparetotmag 70E-1 -7 -> -1 -dqctm307 comparetotmag 7.0 -7E+0 -> -1 -dqctm308 comparetotmag 7.0 -70E-1 -> 0 -dqctm309 comparetotmag 7 -.7E+1 -> 0 -dqctm310 comparetotmag 7 -70E-1 -> 1 - -dqctm320 comparetotmag 8.0 -7.0 -> 1 -dqctm321 comparetotmag 8.0 -7 -> 1 -dqctm322 comparetotmag 8 -7.0 -> 1 -dqctm323 comparetotmag 8E+0 -7.0 -> 1 -dqctm324 comparetotmag 80E-1 -7.0 -> 1 -dqctm325 comparetotmag .8E+1 -7 -> 1 -dqctm326 comparetotmag 80E-1 -7 -> 1 -dqctm327 comparetotmag 8.0 -7E+0 -> 1 -dqctm328 comparetotmag 8.0 -70E-1 -> 1 -dqctm329 comparetotmag 8 -.7E+1 -> 1 -dqctm330 comparetotmag 8 -70E-1 -> 1 - -dqctm340 comparetotmag 8.0 -9.0 -> -1 -dqctm341 comparetotmag 8.0 -9 -> -1 -dqctm342 comparetotmag 8 -9.0 -> -1 -dqctm343 comparetotmag 8E+0 -9.0 -> -1 -dqctm344 comparetotmag 80E-1 -9.0 -> -1 -dqctm345 comparetotmag .8E+1 -9 -> -1 -dqctm346 comparetotmag 80E-1 -9 -> -1 -dqctm347 comparetotmag 8.0 -9E+0 -> -1 -dqctm348 comparetotmag 8.0 -90E-1 -> -1 -dqctm349 comparetotmag 8 -.9E+1 -> -1 -dqctm350 comparetotmag 8 -90E-1 -> -1 - --- and again, with sign changes -- .. -dqctm400 comparetotmag -7.0 -7.0 -> 0 -dqctm401 comparetotmag -7.0 -7 -> -1 -dqctm402 comparetotmag -7 -7.0 -> 1 -dqctm403 comparetotmag -7E+0 -7.0 -> 1 -dqctm404 comparetotmag -70E-1 -7.0 -> 0 -dqctm405 comparetotmag -.7E+1 -7 -> 0 -dqctm406 comparetotmag -70E-1 -7 -> -1 -dqctm407 comparetotmag -7.0 -7E+0 -> -1 -dqctm408 comparetotmag -7.0 -70E-1 -> 0 -dqctm409 comparetotmag -7 -.7E+1 -> 0 -dqctm410 comparetotmag -7 -70E-1 -> 1 - -dqctm420 comparetotmag -8.0 -7.0 -> 1 -dqctm421 comparetotmag -8.0 -7 -> 1 -dqctm422 comparetotmag -8 -7.0 -> 1 -dqctm423 comparetotmag -8E+0 -7.0 -> 1 -dqctm424 comparetotmag -80E-1 -7.0 -> 1 -dqctm425 comparetotmag -.8E+1 -7 -> 1 -dqctm426 comparetotmag -80E-1 -7 -> 1 -dqctm427 comparetotmag -8.0 -7E+0 -> 1 -dqctm428 comparetotmag -8.0 -70E-1 -> 1 -dqctm429 comparetotmag -8 -.7E+1 -> 1 -dqctm430 comparetotmag -8 -70E-1 -> 1 - -dqctm440 comparetotmag -8.0 -9.0 -> -1 -dqctm441 comparetotmag -8.0 -9 -> -1 -dqctm442 comparetotmag -8 -9.0 -> -1 -dqctm443 comparetotmag -8E+0 -9.0 -> -1 -dqctm444 comparetotmag -80E-1 -9.0 -> -1 -dqctm445 comparetotmag -.8E+1 -9 -> -1 -dqctm446 comparetotmag -80E-1 -9 -> -1 -dqctm447 comparetotmag -8.0 -9E+0 -> -1 -dqctm448 comparetotmag -8.0 -90E-1 -> -1 -dqctm449 comparetotmag -8 -.9E+1 -> -1 -dqctm450 comparetotmag -8 -90E-1 -> -1 - - --- testcases that subtract to lots of zeros at boundaries [pgr] -dqctm473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 -dqctm474 comparetotmag 123.456000000000E+89 123.456E+89 -> -1 -dqctm475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 -dqctm476 comparetotmag 123.4560000000E+89 123.456E+89 -> -1 -dqctm477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 -dqctm478 comparetotmag 123.45600000E+89 123.456E+89 -> -1 -dqctm479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 -dqctm480 comparetotmag 123.456000E+89 123.456E+89 -> -1 -dqctm481 comparetotmag 123.45600E-89 123.456E-89 -> -1 -dqctm482 comparetotmag 123.4560E+89 123.456E+89 -> -1 -dqctm483 comparetotmag 123.456E-89 123.456E-89 -> 0 -dqctm487 comparetotmag 123.456E+89 123.4560000000000E+89 -> 1 -dqctm488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 -dqctm489 comparetotmag 123.456E+89 123.45600000000E+89 -> 1 -dqctm490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 -dqctm491 comparetotmag 123.456E+89 123.456000000E+89 -> 1 -dqctm492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 -dqctm493 comparetotmag 123.456E+89 123.4560000E+89 -> 1 -dqctm494 comparetotmag 123.456E-89 123.456000E-89 -> 1 -dqctm495 comparetotmag 123.456E+89 123.45600E+89 -> 1 -dqctm496 comparetotmag 123.456E-89 123.4560E-89 -> 1 -dqctm497 comparetotmag 123.456E+89 123.456E+89 -> 0 - --- wide-ranging, around precision; signs equal -dqctm498 comparetotmag 1 1E-17 -> 1 -dqctm499 comparetotmag 1 1E-16 -> 1 -dqctm500 comparetotmag 1 1E-15 -> 1 -dqctm501 comparetotmag 1 1E-14 -> 1 -dqctm502 comparetotmag 1 1E-13 -> 1 -dqctm503 comparetotmag 1 1E-12 -> 1 -dqctm504 comparetotmag 1 1E-11 -> 1 -dqctm505 comparetotmag 1 1E-10 -> 1 -dqctm506 comparetotmag 1 1E-9 -> 1 -dqctm507 comparetotmag 1 1E-8 -> 1 -dqctm508 comparetotmag 1 1E-7 -> 1 -dqctm509 comparetotmag 1 1E-6 -> 1 -dqctm510 comparetotmag 1 1E-5 -> 1 -dqctm511 comparetotmag 1 1E-4 -> 1 -dqctm512 comparetotmag 1 1E-3 -> 1 -dqctm513 comparetotmag 1 1E-2 -> 1 -dqctm514 comparetotmag 1 1E-1 -> 1 -dqctm515 comparetotmag 1 1E-0 -> 0 -dqctm516 comparetotmag 1 1E+1 -> -1 -dqctm517 comparetotmag 1 1E+2 -> -1 -dqctm518 comparetotmag 1 1E+3 -> -1 -dqctm519 comparetotmag 1 1E+4 -> -1 -dqctm521 comparetotmag 1 1E+5 -> -1 -dqctm522 comparetotmag 1 1E+6 -> -1 -dqctm523 comparetotmag 1 1E+7 -> -1 -dqctm524 comparetotmag 1 1E+8 -> -1 -dqctm525 comparetotmag 1 1E+9 -> -1 -dqctm526 comparetotmag 1 1E+10 -> -1 -dqctm527 comparetotmag 1 1E+11 -> -1 -dqctm528 comparetotmag 1 1E+12 -> -1 -dqctm529 comparetotmag 1 1E+13 -> -1 -dqctm530 comparetotmag 1 1E+14 -> -1 -dqctm531 comparetotmag 1 1E+15 -> -1 -dqctm532 comparetotmag 1 1E+16 -> -1 -dqctm533 comparetotmag 1 1E+17 -> -1 --- LR swap -dqctm538 comparetotmag 1E-17 1 -> -1 -dqctm539 comparetotmag 1E-16 1 -> -1 -dqctm540 comparetotmag 1E-15 1 -> -1 -dqctm541 comparetotmag 1E-14 1 -> -1 -dqctm542 comparetotmag 1E-13 1 -> -1 -dqctm543 comparetotmag 1E-12 1 -> -1 -dqctm544 comparetotmag 1E-11 1 -> -1 -dqctm545 comparetotmag 1E-10 1 -> -1 -dqctm546 comparetotmag 1E-9 1 -> -1 -dqctm547 comparetotmag 1E-8 1 -> -1 -dqctm548 comparetotmag 1E-7 1 -> -1 -dqctm549 comparetotmag 1E-6 1 -> -1 -dqctm550 comparetotmag 1E-5 1 -> -1 -dqctm551 comparetotmag 1E-4 1 -> -1 -dqctm552 comparetotmag 1E-3 1 -> -1 -dqctm553 comparetotmag 1E-2 1 -> -1 -dqctm554 comparetotmag 1E-1 1 -> -1 -dqctm555 comparetotmag 1E-0 1 -> 0 -dqctm556 comparetotmag 1E+1 1 -> 1 -dqctm557 comparetotmag 1E+2 1 -> 1 -dqctm558 comparetotmag 1E+3 1 -> 1 -dqctm559 comparetotmag 1E+4 1 -> 1 -dqctm561 comparetotmag 1E+5 1 -> 1 -dqctm562 comparetotmag 1E+6 1 -> 1 -dqctm563 comparetotmag 1E+7 1 -> 1 -dqctm564 comparetotmag 1E+8 1 -> 1 -dqctm565 comparetotmag 1E+9 1 -> 1 -dqctm566 comparetotmag 1E+10 1 -> 1 -dqctm567 comparetotmag 1E+11 1 -> 1 -dqctm568 comparetotmag 1E+12 1 -> 1 -dqctm569 comparetotmag 1E+13 1 -> 1 -dqctm570 comparetotmag 1E+14 1 -> 1 -dqctm571 comparetotmag 1E+15 1 -> 1 -dqctm572 comparetotmag 1E+16 1 -> 1 -dqctm573 comparetotmag 1E+17 1 -> 1 --- similar with a useful coefficient, one side only -dqctm578 comparetotmag 0.000000987654321 1E-17 -> 1 -dqctm579 comparetotmag 0.000000987654321 1E-16 -> 1 -dqctm580 comparetotmag 0.000000987654321 1E-15 -> 1 -dqctm581 comparetotmag 0.000000987654321 1E-14 -> 1 -dqctm582 comparetotmag 0.000000987654321 1E-13 -> 1 -dqctm583 comparetotmag 0.000000987654321 1E-12 -> 1 -dqctm584 comparetotmag 0.000000987654321 1E-11 -> 1 -dqctm585 comparetotmag 0.000000987654321 1E-10 -> 1 -dqctm586 comparetotmag 0.000000987654321 1E-9 -> 1 -dqctm587 comparetotmag 0.000000987654321 1E-8 -> 1 -dqctm588 comparetotmag 0.000000987654321 1E-7 -> 1 -dqctm589 comparetotmag 0.000000987654321 1E-6 -> -1 -dqctm590 comparetotmag 0.000000987654321 1E-5 -> -1 -dqctm591 comparetotmag 0.000000987654321 1E-4 -> -1 -dqctm592 comparetotmag 0.000000987654321 1E-3 -> -1 -dqctm593 comparetotmag 0.000000987654321 1E-2 -> -1 -dqctm594 comparetotmag 0.000000987654321 1E-1 -> -1 -dqctm595 comparetotmag 0.000000987654321 1E-0 -> -1 -dqctm596 comparetotmag 0.000000987654321 1E+1 -> -1 -dqctm597 comparetotmag 0.000000987654321 1E+2 -> -1 -dqctm598 comparetotmag 0.000000987654321 1E+3 -> -1 -dqctm599 comparetotmag 0.000000987654321 1E+4 -> -1 - --- check some unit-y traps -dqctm600 comparetotmag 12 12.2345 -> -1 -dqctm601 comparetotmag 12.0 12.2345 -> -1 -dqctm602 comparetotmag 12.00 12.2345 -> -1 -dqctm603 comparetotmag 12.000 12.2345 -> -1 -dqctm604 comparetotmag 12.0000 12.2345 -> -1 -dqctm605 comparetotmag 12.00000 12.2345 -> -1 -dqctm606 comparetotmag 12.000000 12.2345 -> -1 -dqctm607 comparetotmag 12.0000000 12.2345 -> -1 -dqctm608 comparetotmag 12.00000000 12.2345 -> -1 -dqctm609 comparetotmag 12.000000000 12.2345 -> -1 -dqctm610 comparetotmag 12.1234 12 -> 1 -dqctm611 comparetotmag 12.1234 12.0 -> 1 -dqctm612 comparetotmag 12.1234 12.00 -> 1 -dqctm613 comparetotmag 12.1234 12.000 -> 1 -dqctm614 comparetotmag 12.1234 12.0000 -> 1 -dqctm615 comparetotmag 12.1234 12.00000 -> 1 -dqctm616 comparetotmag 12.1234 12.000000 -> 1 -dqctm617 comparetotmag 12.1234 12.0000000 -> 1 -dqctm618 comparetotmag 12.1234 12.00000000 -> 1 -dqctm619 comparetotmag 12.1234 12.000000000 -> 1 -dqctm620 comparetotmag -12 -12.2345 -> -1 -dqctm621 comparetotmag -12.0 -12.2345 -> -1 -dqctm622 comparetotmag -12.00 -12.2345 -> -1 -dqctm623 comparetotmag -12.000 -12.2345 -> -1 -dqctm624 comparetotmag -12.0000 -12.2345 -> -1 -dqctm625 comparetotmag -12.00000 -12.2345 -> -1 -dqctm626 comparetotmag -12.000000 -12.2345 -> -1 -dqctm627 comparetotmag -12.0000000 -12.2345 -> -1 -dqctm628 comparetotmag -12.00000000 -12.2345 -> -1 -dqctm629 comparetotmag -12.000000000 -12.2345 -> -1 -dqctm630 comparetotmag -12.1234 -12 -> 1 -dqctm631 comparetotmag -12.1234 -12.0 -> 1 -dqctm632 comparetotmag -12.1234 -12.00 -> 1 -dqctm633 comparetotmag -12.1234 -12.000 -> 1 -dqctm634 comparetotmag -12.1234 -12.0000 -> 1 -dqctm635 comparetotmag -12.1234 -12.00000 -> 1 -dqctm636 comparetotmag -12.1234 -12.000000 -> 1 -dqctm637 comparetotmag -12.1234 -12.0000000 -> 1 -dqctm638 comparetotmag -12.1234 -12.00000000 -> 1 -dqctm639 comparetotmag -12.1234 -12.000000000 -> 1 - --- extended zeros -dqctm640 comparetotmag 0 0 -> 0 -dqctm641 comparetotmag 0 -0 -> 0 -dqctm642 comparetotmag 0 -0.0 -> 1 -dqctm643 comparetotmag 0 0.0 -> 1 -dqctm644 comparetotmag -0 0 -> 0 -dqctm645 comparetotmag -0 -0 -> 0 -dqctm646 comparetotmag -0 -0.0 -> 1 -dqctm647 comparetotmag -0 0.0 -> 1 -dqctm648 comparetotmag 0.0 0 -> -1 -dqctm649 comparetotmag 0.0 -0 -> -1 -dqctm650 comparetotmag 0.0 -0.0 -> 0 -dqctm651 comparetotmag 0.0 0.0 -> 0 -dqctm652 comparetotmag -0.0 0 -> -1 -dqctm653 comparetotmag -0.0 -0 -> -1 -dqctm654 comparetotmag -0.0 -0.0 -> 0 -dqctm655 comparetotmag -0.0 0.0 -> 0 - -dqctm656 comparetotmag -0E1 0.0 -> 1 -dqctm657 comparetotmag -0E2 0.0 -> 1 -dqctm658 comparetotmag 0E1 0.0 -> 1 -dqctm659 comparetotmag 0E2 0.0 -> 1 -dqctm660 comparetotmag -0E1 0 -> 1 -dqctm661 comparetotmag -0E2 0 -> 1 -dqctm662 comparetotmag 0E1 0 -> 1 -dqctm663 comparetotmag 0E2 0 -> 1 -dqctm664 comparetotmag -0E1 -0E1 -> 0 -dqctm665 comparetotmag -0E2 -0E1 -> 1 -dqctm666 comparetotmag 0E1 -0E1 -> 0 -dqctm667 comparetotmag 0E2 -0E1 -> 1 -dqctm668 comparetotmag -0E1 -0E2 -> -1 -dqctm669 comparetotmag -0E2 -0E2 -> 0 -dqctm670 comparetotmag 0E1 -0E2 -> -1 -dqctm671 comparetotmag 0E2 -0E2 -> 0 -dqctm672 comparetotmag -0E1 0E1 -> 0 -dqctm673 comparetotmag -0E2 0E1 -> 1 -dqctm674 comparetotmag 0E1 0E1 -> 0 -dqctm675 comparetotmag 0E2 0E1 -> 1 -dqctm676 comparetotmag -0E1 0E2 -> -1 -dqctm677 comparetotmag -0E2 0E2 -> 0 -dqctm678 comparetotmag 0E1 0E2 -> -1 -dqctm679 comparetotmag 0E2 0E2 -> 0 - --- trailing zeros; unit-y -dqctm680 comparetotmag 12 12 -> 0 -dqctm681 comparetotmag 12 12.0 -> 1 -dqctm682 comparetotmag 12 12.00 -> 1 -dqctm683 comparetotmag 12 12.000 -> 1 -dqctm684 comparetotmag 12 12.0000 -> 1 -dqctm685 comparetotmag 12 12.00000 -> 1 -dqctm686 comparetotmag 12 12.000000 -> 1 -dqctm687 comparetotmag 12 12.0000000 -> 1 -dqctm688 comparetotmag 12 12.00000000 -> 1 -dqctm689 comparetotmag 12 12.000000000 -> 1 -dqctm690 comparetotmag 12 12 -> 0 -dqctm691 comparetotmag 12.0 12 -> -1 -dqctm692 comparetotmag 12.00 12 -> -1 -dqctm693 comparetotmag 12.000 12 -> -1 -dqctm694 comparetotmag 12.0000 12 -> -1 -dqctm695 comparetotmag 12.00000 12 -> -1 -dqctm696 comparetotmag 12.000000 12 -> -1 -dqctm697 comparetotmag 12.0000000 12 -> -1 -dqctm698 comparetotmag 12.00000000 12 -> -1 -dqctm699 comparetotmag 12.000000000 12 -> -1 - --- old long operand checks -dqctm701 comparetotmag 12345678000 1 -> 1 -dqctm702 comparetotmag 1 12345678000 -> -1 -dqctm703 comparetotmag 1234567800 1 -> 1 -dqctm704 comparetotmag 1 1234567800 -> -1 -dqctm705 comparetotmag 1234567890 1 -> 1 -dqctm706 comparetotmag 1 1234567890 -> -1 -dqctm707 comparetotmag 1234567891 1 -> 1 -dqctm708 comparetotmag 1 1234567891 -> -1 -dqctm709 comparetotmag 12345678901 1 -> 1 -dqctm710 comparetotmag 1 12345678901 -> -1 -dqctm711 comparetotmag 1234567896 1 -> 1 -dqctm712 comparetotmag 1 1234567896 -> -1 -dqctm713 comparetotmag -1234567891 1 -> 1 -dqctm714 comparetotmag 1 -1234567891 -> -1 -dqctm715 comparetotmag -12345678901 1 -> 1 -dqctm716 comparetotmag 1 -12345678901 -> -1 -dqctm717 comparetotmag -1234567896 1 -> 1 -dqctm718 comparetotmag 1 -1234567896 -> -1 - --- old residue cases -dqctm740 comparetotmag 1 0.9999999 -> 1 -dqctm741 comparetotmag 1 0.999999 -> 1 -dqctm742 comparetotmag 1 0.99999 -> 1 -dqctm743 comparetotmag 1 1.0000 -> 1 -dqctm744 comparetotmag 1 1.00001 -> -1 -dqctm745 comparetotmag 1 1.000001 -> -1 -dqctm746 comparetotmag 1 1.0000001 -> -1 -dqctm750 comparetotmag 0.9999999 1 -> -1 -dqctm751 comparetotmag 0.999999 1 -> -1 -dqctm752 comparetotmag 0.99999 1 -> -1 -dqctm753 comparetotmag 1.0000 1 -> -1 -dqctm754 comparetotmag 1.00001 1 -> 1 -dqctm755 comparetotmag 1.000001 1 -> 1 -dqctm756 comparetotmag 1.0000001 1 -> 1 - --- Specials -dqctm780 comparetotmag Inf -Inf -> 0 -dqctm781 comparetotmag Inf -1000 -> 1 -dqctm782 comparetotmag Inf -1 -> 1 -dqctm783 comparetotmag Inf -0 -> 1 -dqctm784 comparetotmag Inf 0 -> 1 -dqctm785 comparetotmag Inf 1 -> 1 -dqctm786 comparetotmag Inf 1000 -> 1 -dqctm787 comparetotmag Inf Inf -> 0 -dqctm788 comparetotmag -1000 Inf -> -1 -dqctm789 comparetotmag -Inf Inf -> 0 -dqctm790 comparetotmag -1 Inf -> -1 -dqctm791 comparetotmag -0 Inf -> -1 -dqctm792 comparetotmag 0 Inf -> -1 -dqctm793 comparetotmag 1 Inf -> -1 -dqctm794 comparetotmag 1000 Inf -> -1 -dqctm795 comparetotmag Inf Inf -> 0 - -dqctm800 comparetotmag -Inf -Inf -> 0 -dqctm801 comparetotmag -Inf -1000 -> 1 -dqctm802 comparetotmag -Inf -1 -> 1 -dqctm803 comparetotmag -Inf -0 -> 1 -dqctm804 comparetotmag -Inf 0 -> 1 -dqctm805 comparetotmag -Inf 1 -> 1 -dqctm806 comparetotmag -Inf 1000 -> 1 -dqctm807 comparetotmag -Inf Inf -> 0 -dqctm808 comparetotmag -Inf -Inf -> 0 -dqctm809 comparetotmag -1000 -Inf -> -1 -dqctm810 comparetotmag -1 -Inf -> -1 -dqctm811 comparetotmag -0 -Inf -> -1 -dqctm812 comparetotmag 0 -Inf -> -1 -dqctm813 comparetotmag 1 -Inf -> -1 -dqctm814 comparetotmag 1000 -Inf -> -1 -dqctm815 comparetotmag Inf -Inf -> 0 - -dqctm821 comparetotmag NaN -Inf -> 1 -dqctm822 comparetotmag NaN -1000 -> 1 -dqctm823 comparetotmag NaN -1 -> 1 -dqctm824 comparetotmag NaN -0 -> 1 -dqctm825 comparetotmag NaN 0 -> 1 -dqctm826 comparetotmag NaN 1 -> 1 -dqctm827 comparetotmag NaN 1000 -> 1 -dqctm828 comparetotmag NaN Inf -> 1 -dqctm829 comparetotmag NaN NaN -> 0 -dqctm830 comparetotmag -Inf NaN -> -1 -dqctm831 comparetotmag -1000 NaN -> -1 -dqctm832 comparetotmag -1 NaN -> -1 -dqctm833 comparetotmag -0 NaN -> -1 -dqctm834 comparetotmag 0 NaN -> -1 -dqctm835 comparetotmag 1 NaN -> -1 -dqctm836 comparetotmag 1000 NaN -> -1 -dqctm837 comparetotmag Inf NaN -> -1 -dqctm838 comparetotmag -NaN -NaN -> 0 -dqctm839 comparetotmag +NaN -NaN -> 0 -dqctm840 comparetotmag -NaN +NaN -> 0 - -dqctm841 comparetotmag sNaN -sNaN -> 0 -dqctm842 comparetotmag sNaN -NaN -> -1 -dqctm843 comparetotmag sNaN -Inf -> 1 -dqctm844 comparetotmag sNaN -1000 -> 1 -dqctm845 comparetotmag sNaN -1 -> 1 -dqctm846 comparetotmag sNaN -0 -> 1 -dqctm847 comparetotmag sNaN 0 -> 1 -dqctm848 comparetotmag sNaN 1 -> 1 -dqctm849 comparetotmag sNaN 1000 -> 1 -dqctm850 comparetotmag sNaN NaN -> -1 -dqctm851 comparetotmag sNaN sNaN -> 0 - -dqctm852 comparetotmag -sNaN sNaN -> 0 -dqctm853 comparetotmag -NaN sNaN -> 1 -dqctm854 comparetotmag -Inf sNaN -> -1 -dqctm855 comparetotmag -1000 sNaN -> -1 -dqctm856 comparetotmag -1 sNaN -> -1 -dqctm857 comparetotmag -0 sNaN -> -1 -dqctm858 comparetotmag 0 sNaN -> -1 -dqctm859 comparetotmag 1 sNaN -> -1 -dqctm860 comparetotmag 1000 sNaN -> -1 -dqctm861 comparetotmag Inf sNaN -> -1 -dqctm862 comparetotmag NaN sNaN -> 1 -dqctm863 comparetotmag sNaN sNaN -> 0 - -dqctm871 comparetotmag -sNaN -sNaN -> 0 -dqctm872 comparetotmag -sNaN -NaN -> -1 -dqctm873 comparetotmag -sNaN -Inf -> 1 -dqctm874 comparetotmag -sNaN -1000 -> 1 -dqctm875 comparetotmag -sNaN -1 -> 1 -dqctm876 comparetotmag -sNaN -0 -> 1 -dqctm877 comparetotmag -sNaN 0 -> 1 -dqctm878 comparetotmag -sNaN 1 -> 1 -dqctm879 comparetotmag -sNaN 1000 -> 1 -dqctm880 comparetotmag -sNaN NaN -> -1 -dqctm881 comparetotmag -sNaN sNaN -> 0 - -dqctm882 comparetotmag -sNaN -sNaN -> 0 -dqctm883 comparetotmag -NaN -sNaN -> 1 -dqctm884 comparetotmag -Inf -sNaN -> -1 -dqctm885 comparetotmag -1000 -sNaN -> -1 -dqctm886 comparetotmag -1 -sNaN -> -1 -dqctm887 comparetotmag -0 -sNaN -> -1 -dqctm888 comparetotmag 0 -sNaN -> -1 -dqctm889 comparetotmag 1 -sNaN -> -1 -dqctm890 comparetotmag 1000 -sNaN -> -1 -dqctm891 comparetotmag Inf -sNaN -> -1 -dqctm892 comparetotmag NaN -sNaN -> 1 -dqctm893 comparetotmag sNaN -sNaN -> 0 - --- NaNs with payload -dqctm960 comparetotmag NaN9 -Inf -> 1 -dqctm961 comparetotmag NaN8 999 -> 1 -dqctm962 comparetotmag NaN77 Inf -> 1 -dqctm963 comparetotmag -NaN67 NaN5 -> 1 -dqctm964 comparetotmag -Inf -NaN4 -> -1 -dqctm965 comparetotmag -999 -NaN33 -> -1 -dqctm966 comparetotmag Inf NaN2 -> -1 - -dqctm970 comparetotmag -NaN41 -NaN42 -> -1 -dqctm971 comparetotmag +NaN41 -NaN42 -> -1 -dqctm972 comparetotmag -NaN41 +NaN42 -> -1 -dqctm973 comparetotmag +NaN41 +NaN42 -> -1 -dqctm974 comparetotmag -NaN42 -NaN01 -> 1 -dqctm975 comparetotmag +NaN42 -NaN01 -> 1 -dqctm976 comparetotmag -NaN42 +NaN01 -> 1 -dqctm977 comparetotmag +NaN42 +NaN01 -> 1 - -dqctm980 comparetotmag -sNaN771 -sNaN772 -> -1 -dqctm981 comparetotmag +sNaN771 -sNaN772 -> -1 -dqctm982 comparetotmag -sNaN771 +sNaN772 -> -1 -dqctm983 comparetotmag +sNaN771 +sNaN772 -> -1 -dqctm984 comparetotmag -sNaN772 -sNaN771 -> 1 -dqctm985 comparetotmag +sNaN772 -sNaN771 -> 1 -dqctm986 comparetotmag -sNaN772 +sNaN771 -> 1 -dqctm987 comparetotmag +sNaN772 +sNaN771 -> 1 - -dqctm991 comparetotmag -sNaN99 -Inf -> 1 -dqctm992 comparetotmag sNaN98 -11 -> 1 -dqctm993 comparetotmag sNaN97 NaN -> -1 -dqctm994 comparetotmag sNaN16 sNaN94 -> -1 -dqctm995 comparetotmag NaN85 sNaN83 -> 1 -dqctm996 comparetotmag -Inf sNaN92 -> -1 -dqctm997 comparetotmag 088 sNaN81 -> -1 -dqctm998 comparetotmag Inf sNaN90 -> -1 -dqctm999 comparetotmag NaN -sNaN89 -> 1 - --- spread zeros -dqctm1110 comparetotmag 0E-6143 0 -> -1 -dqctm1111 comparetotmag 0E-6143 -0 -> -1 -dqctm1112 comparetotmag -0E-6143 0 -> -1 -dqctm1113 comparetotmag -0E-6143 -0 -> -1 -dqctm1114 comparetotmag 0E-6143 0E+6144 -> -1 -dqctm1115 comparetotmag 0E-6143 -0E+6144 -> -1 -dqctm1116 comparetotmag -0E-6143 0E+6144 -> -1 -dqctm1117 comparetotmag -0E-6143 -0E+6144 -> -1 -dqctm1118 comparetotmag 0 0E+6144 -> -1 -dqctm1119 comparetotmag 0 -0E+6144 -> -1 -dqctm1120 comparetotmag -0 0E+6144 -> -1 -dqctm1121 comparetotmag -0 -0E+6144 -> -1 - -dqctm1130 comparetotmag 0E+6144 0 -> 1 -dqctm1131 comparetotmag 0E+6144 -0 -> 1 -dqctm1132 comparetotmag -0E+6144 0 -> 1 -dqctm1133 comparetotmag -0E+6144 -0 -> 1 -dqctm1134 comparetotmag 0E+6144 0E-6143 -> 1 -dqctm1135 comparetotmag 0E+6144 -0E-6143 -> 1 -dqctm1136 comparetotmag -0E+6144 0E-6143 -> 1 -dqctm1137 comparetotmag -0E+6144 -0E-6143 -> 1 -dqctm1138 comparetotmag 0 0E-6143 -> 1 -dqctm1139 comparetotmag 0 -0E-6143 -> 1 -dqctm1140 comparetotmag -0 0E-6143 -> 1 -dqctm1141 comparetotmag -0 -0E-6143 -> 1 - --- Null tests -dqctm9990 comparetotmag 10 # -> NaN Invalid_operation -dqctm9991 comparetotmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqCompareTotalMag.decTest -- decQuad comparison; abs. total order -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Note that we cannot assume add/subtract tests cover paths adequately, +-- here, because the code might be quite different (comparison cannot +-- overflow or underflow, so actual subtractions are not necessary). +-- Similarly, comparetotal will have some radically different paths +-- than compare. + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqctm001 comparetotmag -2 -2 -> 0 +dqctm002 comparetotmag -2 -1 -> 1 +dqctm003 comparetotmag -2 0 -> 1 +dqctm004 comparetotmag -2 1 -> 1 +dqctm005 comparetotmag -2 2 -> 0 +dqctm006 comparetotmag -1 -2 -> -1 +dqctm007 comparetotmag -1 -1 -> 0 +dqctm008 comparetotmag -1 0 -> 1 +dqctm009 comparetotmag -1 1 -> 0 +dqctm010 comparetotmag -1 2 -> -1 +dqctm011 comparetotmag 0 -2 -> -1 +dqctm012 comparetotmag 0 -1 -> -1 +dqctm013 comparetotmag 0 0 -> 0 +dqctm014 comparetotmag 0 1 -> -1 +dqctm015 comparetotmag 0 2 -> -1 +dqctm016 comparetotmag 1 -2 -> -1 +dqctm017 comparetotmag 1 -1 -> 0 +dqctm018 comparetotmag 1 0 -> 1 +dqctm019 comparetotmag 1 1 -> 0 +dqctm020 comparetotmag 1 2 -> -1 +dqctm021 comparetotmag 2 -2 -> 0 +dqctm022 comparetotmag 2 -1 -> 1 +dqctm023 comparetotmag 2 0 -> 1 +dqctm025 comparetotmag 2 1 -> 1 +dqctm026 comparetotmag 2 2 -> 0 + +dqctm031 comparetotmag -20 -20 -> 0 +dqctm032 comparetotmag -20 -10 -> 1 +dqctm033 comparetotmag -20 00 -> 1 +dqctm034 comparetotmag -20 10 -> 1 +dqctm035 comparetotmag -20 20 -> 0 +dqctm036 comparetotmag -10 -20 -> -1 +dqctm037 comparetotmag -10 -10 -> 0 +dqctm038 comparetotmag -10 00 -> 1 +dqctm039 comparetotmag -10 10 -> 0 +dqctm040 comparetotmag -10 20 -> -1 +dqctm041 comparetotmag 00 -20 -> -1 +dqctm042 comparetotmag 00 -10 -> -1 +dqctm043 comparetotmag 00 00 -> 0 +dqctm044 comparetotmag 00 10 -> -1 +dqctm045 comparetotmag 00 20 -> -1 +dqctm046 comparetotmag 10 -20 -> -1 +dqctm047 comparetotmag 10 -10 -> 0 +dqctm048 comparetotmag 10 00 -> 1 +dqctm049 comparetotmag 10 10 -> 0 +dqctm050 comparetotmag 10 20 -> -1 +dqctm051 comparetotmag 20 -20 -> 0 +dqctm052 comparetotmag 20 -10 -> 1 +dqctm053 comparetotmag 20 00 -> 1 +dqctm055 comparetotmag 20 10 -> 1 +dqctm056 comparetotmag 20 20 -> 0 + +dqctm061 comparetotmag -2.0 -2.0 -> 0 +dqctm062 comparetotmag -2.0 -1.0 -> 1 +dqctm063 comparetotmag -2.0 0.0 -> 1 +dqctm064 comparetotmag -2.0 1.0 -> 1 +dqctm065 comparetotmag -2.0 2.0 -> 0 +dqctm066 comparetotmag -1.0 -2.0 -> -1 +dqctm067 comparetotmag -1.0 -1.0 -> 0 +dqctm068 comparetotmag -1.0 0.0 -> 1 +dqctm069 comparetotmag -1.0 1.0 -> 0 +dqctm070 comparetotmag -1.0 2.0 -> -1 +dqctm071 comparetotmag 0.0 -2.0 -> -1 +dqctm072 comparetotmag 0.0 -1.0 -> -1 +dqctm073 comparetotmag 0.0 0.0 -> 0 +dqctm074 comparetotmag 0.0 1.0 -> -1 +dqctm075 comparetotmag 0.0 2.0 -> -1 +dqctm076 comparetotmag 1.0 -2.0 -> -1 +dqctm077 comparetotmag 1.0 -1.0 -> 0 +dqctm078 comparetotmag 1.0 0.0 -> 1 +dqctm079 comparetotmag 1.0 1.0 -> 0 +dqctm080 comparetotmag 1.0 2.0 -> -1 +dqctm081 comparetotmag 2.0 -2.0 -> 0 +dqctm082 comparetotmag 2.0 -1.0 -> 1 +dqctm083 comparetotmag 2.0 0.0 -> 1 +dqctm085 comparetotmag 2.0 1.0 -> 1 +dqctm086 comparetotmag 2.0 2.0 -> 0 + +-- now some cases which might overflow if subtract were used +dqctm090 comparetotmag 9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 +dqctm091 comparetotmag -9.99999999999999999999999999999E+6144 9.99999999999999999999999999999E+6144 -> 0 +dqctm092 comparetotmag 9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 +dqctm093 comparetotmag -9.99999999999999999999999999999E+6144 -9.99999999999999999999999999999E+6144 -> 0 + +-- some differing length/exponent cases +-- in this first group, compare would compare all equal +dqctm100 comparetotmag 7.0 7.0 -> 0 +dqctm101 comparetotmag 7.0 7 -> -1 +dqctm102 comparetotmag 7 7.0 -> 1 +dqctm103 comparetotmag 7E+0 7.0 -> 1 +dqctm104 comparetotmag 70E-1 7.0 -> 0 +dqctm105 comparetotmag 0.7E+1 7 -> 0 +dqctm106 comparetotmag 70E-1 7 -> -1 +dqctm107 comparetotmag 7.0 7E+0 -> -1 +dqctm108 comparetotmag 7.0 70E-1 -> 0 +dqctm109 comparetotmag 7 0.7E+1 -> 0 +dqctm110 comparetotmag 7 70E-1 -> 1 + +dqctm120 comparetotmag 8.0 7.0 -> 1 +dqctm121 comparetotmag 8.0 7 -> 1 +dqctm122 comparetotmag 8 7.0 -> 1 +dqctm123 comparetotmag 8E+0 7.0 -> 1 +dqctm124 comparetotmag 80E-1 7.0 -> 1 +dqctm125 comparetotmag 0.8E+1 7 -> 1 +dqctm126 comparetotmag 80E-1 7 -> 1 +dqctm127 comparetotmag 8.0 7E+0 -> 1 +dqctm128 comparetotmag 8.0 70E-1 -> 1 +dqctm129 comparetotmag 8 0.7E+1 -> 1 +dqctm130 comparetotmag 8 70E-1 -> 1 + +dqctm140 comparetotmag 8.0 9.0 -> -1 +dqctm141 comparetotmag 8.0 9 -> -1 +dqctm142 comparetotmag 8 9.0 -> -1 +dqctm143 comparetotmag 8E+0 9.0 -> -1 +dqctm144 comparetotmag 80E-1 9.0 -> -1 +dqctm145 comparetotmag 0.8E+1 9 -> -1 +dqctm146 comparetotmag 80E-1 9 -> -1 +dqctm147 comparetotmag 8.0 9E+0 -> -1 +dqctm148 comparetotmag 8.0 90E-1 -> -1 +dqctm149 comparetotmag 8 0.9E+1 -> -1 +dqctm150 comparetotmag 8 90E-1 -> -1 + +-- and again, with sign changes -+ .. +dqctm200 comparetotmag -7.0 7.0 -> 0 +dqctm201 comparetotmag -7.0 7 -> -1 +dqctm202 comparetotmag -7 7.0 -> 1 +dqctm203 comparetotmag -7E+0 7.0 -> 1 +dqctm204 comparetotmag -70E-1 7.0 -> 0 +dqctm205 comparetotmag -0.7E+1 7 -> 0 +dqctm206 comparetotmag -70E-1 7 -> -1 +dqctm207 comparetotmag -7.0 7E+0 -> -1 +dqctm208 comparetotmag -7.0 70E-1 -> 0 +dqctm209 comparetotmag -7 0.7E+1 -> 0 +dqctm210 comparetotmag -7 70E-1 -> 1 + +dqctm220 comparetotmag -8.0 7.0 -> 1 +dqctm221 comparetotmag -8.0 7 -> 1 +dqctm222 comparetotmag -8 7.0 -> 1 +dqctm223 comparetotmag -8E+0 7.0 -> 1 +dqctm224 comparetotmag -80E-1 7.0 -> 1 +dqctm225 comparetotmag -0.8E+1 7 -> 1 +dqctm226 comparetotmag -80E-1 7 -> 1 +dqctm227 comparetotmag -8.0 7E+0 -> 1 +dqctm228 comparetotmag -8.0 70E-1 -> 1 +dqctm229 comparetotmag -8 0.7E+1 -> 1 +dqctm230 comparetotmag -8 70E-1 -> 1 + +dqctm240 comparetotmag -8.0 9.0 -> -1 +dqctm241 comparetotmag -8.0 9 -> -1 +dqctm242 comparetotmag -8 9.0 -> -1 +dqctm243 comparetotmag -8E+0 9.0 -> -1 +dqctm244 comparetotmag -80E-1 9.0 -> -1 +dqctm245 comparetotmag -0.8E+1 9 -> -1 +dqctm246 comparetotmag -80E-1 9 -> -1 +dqctm247 comparetotmag -8.0 9E+0 -> -1 +dqctm248 comparetotmag -8.0 90E-1 -> -1 +dqctm249 comparetotmag -8 0.9E+1 -> -1 +dqctm250 comparetotmag -8 90E-1 -> -1 + +-- and again, with sign changes +- .. +dqctm300 comparetotmag 7.0 -7.0 -> 0 +dqctm301 comparetotmag 7.0 -7 -> -1 +dqctm302 comparetotmag 7 -7.0 -> 1 +dqctm303 comparetotmag 7E+0 -7.0 -> 1 +dqctm304 comparetotmag 70E-1 -7.0 -> 0 +dqctm305 comparetotmag .7E+1 -7 -> 0 +dqctm306 comparetotmag 70E-1 -7 -> -1 +dqctm307 comparetotmag 7.0 -7E+0 -> -1 +dqctm308 comparetotmag 7.0 -70E-1 -> 0 +dqctm309 comparetotmag 7 -.7E+1 -> 0 +dqctm310 comparetotmag 7 -70E-1 -> 1 + +dqctm320 comparetotmag 8.0 -7.0 -> 1 +dqctm321 comparetotmag 8.0 -7 -> 1 +dqctm322 comparetotmag 8 -7.0 -> 1 +dqctm323 comparetotmag 8E+0 -7.0 -> 1 +dqctm324 comparetotmag 80E-1 -7.0 -> 1 +dqctm325 comparetotmag .8E+1 -7 -> 1 +dqctm326 comparetotmag 80E-1 -7 -> 1 +dqctm327 comparetotmag 8.0 -7E+0 -> 1 +dqctm328 comparetotmag 8.0 -70E-1 -> 1 +dqctm329 comparetotmag 8 -.7E+1 -> 1 +dqctm330 comparetotmag 8 -70E-1 -> 1 + +dqctm340 comparetotmag 8.0 -9.0 -> -1 +dqctm341 comparetotmag 8.0 -9 -> -1 +dqctm342 comparetotmag 8 -9.0 -> -1 +dqctm343 comparetotmag 8E+0 -9.0 -> -1 +dqctm344 comparetotmag 80E-1 -9.0 -> -1 +dqctm345 comparetotmag .8E+1 -9 -> -1 +dqctm346 comparetotmag 80E-1 -9 -> -1 +dqctm347 comparetotmag 8.0 -9E+0 -> -1 +dqctm348 comparetotmag 8.0 -90E-1 -> -1 +dqctm349 comparetotmag 8 -.9E+1 -> -1 +dqctm350 comparetotmag 8 -90E-1 -> -1 + +-- and again, with sign changes -- .. +dqctm400 comparetotmag -7.0 -7.0 -> 0 +dqctm401 comparetotmag -7.0 -7 -> -1 +dqctm402 comparetotmag -7 -7.0 -> 1 +dqctm403 comparetotmag -7E+0 -7.0 -> 1 +dqctm404 comparetotmag -70E-1 -7.0 -> 0 +dqctm405 comparetotmag -.7E+1 -7 -> 0 +dqctm406 comparetotmag -70E-1 -7 -> -1 +dqctm407 comparetotmag -7.0 -7E+0 -> -1 +dqctm408 comparetotmag -7.0 -70E-1 -> 0 +dqctm409 comparetotmag -7 -.7E+1 -> 0 +dqctm410 comparetotmag -7 -70E-1 -> 1 + +dqctm420 comparetotmag -8.0 -7.0 -> 1 +dqctm421 comparetotmag -8.0 -7 -> 1 +dqctm422 comparetotmag -8 -7.0 -> 1 +dqctm423 comparetotmag -8E+0 -7.0 -> 1 +dqctm424 comparetotmag -80E-1 -7.0 -> 1 +dqctm425 comparetotmag -.8E+1 -7 -> 1 +dqctm426 comparetotmag -80E-1 -7 -> 1 +dqctm427 comparetotmag -8.0 -7E+0 -> 1 +dqctm428 comparetotmag -8.0 -70E-1 -> 1 +dqctm429 comparetotmag -8 -.7E+1 -> 1 +dqctm430 comparetotmag -8 -70E-1 -> 1 + +dqctm440 comparetotmag -8.0 -9.0 -> -1 +dqctm441 comparetotmag -8.0 -9 -> -1 +dqctm442 comparetotmag -8 -9.0 -> -1 +dqctm443 comparetotmag -8E+0 -9.0 -> -1 +dqctm444 comparetotmag -80E-1 -9.0 -> -1 +dqctm445 comparetotmag -.8E+1 -9 -> -1 +dqctm446 comparetotmag -80E-1 -9 -> -1 +dqctm447 comparetotmag -8.0 -9E+0 -> -1 +dqctm448 comparetotmag -8.0 -90E-1 -> -1 +dqctm449 comparetotmag -8 -.9E+1 -> -1 +dqctm450 comparetotmag -8 -90E-1 -> -1 + + +-- testcases that subtract to lots of zeros at boundaries [pgr] +dqctm473 comparetotmag 123.4560000000000E-89 123.456E-89 -> -1 +dqctm474 comparetotmag 123.456000000000E+89 123.456E+89 -> -1 +dqctm475 comparetotmag 123.45600000000E-89 123.456E-89 -> -1 +dqctm476 comparetotmag 123.4560000000E+89 123.456E+89 -> -1 +dqctm477 comparetotmag 123.456000000E-89 123.456E-89 -> -1 +dqctm478 comparetotmag 123.45600000E+89 123.456E+89 -> -1 +dqctm479 comparetotmag 123.4560000E-89 123.456E-89 -> -1 +dqctm480 comparetotmag 123.456000E+89 123.456E+89 -> -1 +dqctm481 comparetotmag 123.45600E-89 123.456E-89 -> -1 +dqctm482 comparetotmag 123.4560E+89 123.456E+89 -> -1 +dqctm483 comparetotmag 123.456E-89 123.456E-89 -> 0 +dqctm487 comparetotmag 123.456E+89 123.4560000000000E+89 -> 1 +dqctm488 comparetotmag 123.456E-89 123.456000000000E-89 -> 1 +dqctm489 comparetotmag 123.456E+89 123.45600000000E+89 -> 1 +dqctm490 comparetotmag 123.456E-89 123.4560000000E-89 -> 1 +dqctm491 comparetotmag 123.456E+89 123.456000000E+89 -> 1 +dqctm492 comparetotmag 123.456E-89 123.45600000E-89 -> 1 +dqctm493 comparetotmag 123.456E+89 123.4560000E+89 -> 1 +dqctm494 comparetotmag 123.456E-89 123.456000E-89 -> 1 +dqctm495 comparetotmag 123.456E+89 123.45600E+89 -> 1 +dqctm496 comparetotmag 123.456E-89 123.4560E-89 -> 1 +dqctm497 comparetotmag 123.456E+89 123.456E+89 -> 0 + +-- wide-ranging, around precision; signs equal +dqctm498 comparetotmag 1 1E-17 -> 1 +dqctm499 comparetotmag 1 1E-16 -> 1 +dqctm500 comparetotmag 1 1E-15 -> 1 +dqctm501 comparetotmag 1 1E-14 -> 1 +dqctm502 comparetotmag 1 1E-13 -> 1 +dqctm503 comparetotmag 1 1E-12 -> 1 +dqctm504 comparetotmag 1 1E-11 -> 1 +dqctm505 comparetotmag 1 1E-10 -> 1 +dqctm506 comparetotmag 1 1E-9 -> 1 +dqctm507 comparetotmag 1 1E-8 -> 1 +dqctm508 comparetotmag 1 1E-7 -> 1 +dqctm509 comparetotmag 1 1E-6 -> 1 +dqctm510 comparetotmag 1 1E-5 -> 1 +dqctm511 comparetotmag 1 1E-4 -> 1 +dqctm512 comparetotmag 1 1E-3 -> 1 +dqctm513 comparetotmag 1 1E-2 -> 1 +dqctm514 comparetotmag 1 1E-1 -> 1 +dqctm515 comparetotmag 1 1E-0 -> 0 +dqctm516 comparetotmag 1 1E+1 -> -1 +dqctm517 comparetotmag 1 1E+2 -> -1 +dqctm518 comparetotmag 1 1E+3 -> -1 +dqctm519 comparetotmag 1 1E+4 -> -1 +dqctm521 comparetotmag 1 1E+5 -> -1 +dqctm522 comparetotmag 1 1E+6 -> -1 +dqctm523 comparetotmag 1 1E+7 -> -1 +dqctm524 comparetotmag 1 1E+8 -> -1 +dqctm525 comparetotmag 1 1E+9 -> -1 +dqctm526 comparetotmag 1 1E+10 -> -1 +dqctm527 comparetotmag 1 1E+11 -> -1 +dqctm528 comparetotmag 1 1E+12 -> -1 +dqctm529 comparetotmag 1 1E+13 -> -1 +dqctm530 comparetotmag 1 1E+14 -> -1 +dqctm531 comparetotmag 1 1E+15 -> -1 +dqctm532 comparetotmag 1 1E+16 -> -1 +dqctm533 comparetotmag 1 1E+17 -> -1 +-- LR swap +dqctm538 comparetotmag 1E-17 1 -> -1 +dqctm539 comparetotmag 1E-16 1 -> -1 +dqctm540 comparetotmag 1E-15 1 -> -1 +dqctm541 comparetotmag 1E-14 1 -> -1 +dqctm542 comparetotmag 1E-13 1 -> -1 +dqctm543 comparetotmag 1E-12 1 -> -1 +dqctm544 comparetotmag 1E-11 1 -> -1 +dqctm545 comparetotmag 1E-10 1 -> -1 +dqctm546 comparetotmag 1E-9 1 -> -1 +dqctm547 comparetotmag 1E-8 1 -> -1 +dqctm548 comparetotmag 1E-7 1 -> -1 +dqctm549 comparetotmag 1E-6 1 -> -1 +dqctm550 comparetotmag 1E-5 1 -> -1 +dqctm551 comparetotmag 1E-4 1 -> -1 +dqctm552 comparetotmag 1E-3 1 -> -1 +dqctm553 comparetotmag 1E-2 1 -> -1 +dqctm554 comparetotmag 1E-1 1 -> -1 +dqctm555 comparetotmag 1E-0 1 -> 0 +dqctm556 comparetotmag 1E+1 1 -> 1 +dqctm557 comparetotmag 1E+2 1 -> 1 +dqctm558 comparetotmag 1E+3 1 -> 1 +dqctm559 comparetotmag 1E+4 1 -> 1 +dqctm561 comparetotmag 1E+5 1 -> 1 +dqctm562 comparetotmag 1E+6 1 -> 1 +dqctm563 comparetotmag 1E+7 1 -> 1 +dqctm564 comparetotmag 1E+8 1 -> 1 +dqctm565 comparetotmag 1E+9 1 -> 1 +dqctm566 comparetotmag 1E+10 1 -> 1 +dqctm567 comparetotmag 1E+11 1 -> 1 +dqctm568 comparetotmag 1E+12 1 -> 1 +dqctm569 comparetotmag 1E+13 1 -> 1 +dqctm570 comparetotmag 1E+14 1 -> 1 +dqctm571 comparetotmag 1E+15 1 -> 1 +dqctm572 comparetotmag 1E+16 1 -> 1 +dqctm573 comparetotmag 1E+17 1 -> 1 +-- similar with a useful coefficient, one side only +dqctm578 comparetotmag 0.000000987654321 1E-17 -> 1 +dqctm579 comparetotmag 0.000000987654321 1E-16 -> 1 +dqctm580 comparetotmag 0.000000987654321 1E-15 -> 1 +dqctm581 comparetotmag 0.000000987654321 1E-14 -> 1 +dqctm582 comparetotmag 0.000000987654321 1E-13 -> 1 +dqctm583 comparetotmag 0.000000987654321 1E-12 -> 1 +dqctm584 comparetotmag 0.000000987654321 1E-11 -> 1 +dqctm585 comparetotmag 0.000000987654321 1E-10 -> 1 +dqctm586 comparetotmag 0.000000987654321 1E-9 -> 1 +dqctm587 comparetotmag 0.000000987654321 1E-8 -> 1 +dqctm588 comparetotmag 0.000000987654321 1E-7 -> 1 +dqctm589 comparetotmag 0.000000987654321 1E-6 -> -1 +dqctm590 comparetotmag 0.000000987654321 1E-5 -> -1 +dqctm591 comparetotmag 0.000000987654321 1E-4 -> -1 +dqctm592 comparetotmag 0.000000987654321 1E-3 -> -1 +dqctm593 comparetotmag 0.000000987654321 1E-2 -> -1 +dqctm594 comparetotmag 0.000000987654321 1E-1 -> -1 +dqctm595 comparetotmag 0.000000987654321 1E-0 -> -1 +dqctm596 comparetotmag 0.000000987654321 1E+1 -> -1 +dqctm597 comparetotmag 0.000000987654321 1E+2 -> -1 +dqctm598 comparetotmag 0.000000987654321 1E+3 -> -1 +dqctm599 comparetotmag 0.000000987654321 1E+4 -> -1 + +-- check some unit-y traps +dqctm600 comparetotmag 12 12.2345 -> -1 +dqctm601 comparetotmag 12.0 12.2345 -> -1 +dqctm602 comparetotmag 12.00 12.2345 -> -1 +dqctm603 comparetotmag 12.000 12.2345 -> -1 +dqctm604 comparetotmag 12.0000 12.2345 -> -1 +dqctm605 comparetotmag 12.00000 12.2345 -> -1 +dqctm606 comparetotmag 12.000000 12.2345 -> -1 +dqctm607 comparetotmag 12.0000000 12.2345 -> -1 +dqctm608 comparetotmag 12.00000000 12.2345 -> -1 +dqctm609 comparetotmag 12.000000000 12.2345 -> -1 +dqctm610 comparetotmag 12.1234 12 -> 1 +dqctm611 comparetotmag 12.1234 12.0 -> 1 +dqctm612 comparetotmag 12.1234 12.00 -> 1 +dqctm613 comparetotmag 12.1234 12.000 -> 1 +dqctm614 comparetotmag 12.1234 12.0000 -> 1 +dqctm615 comparetotmag 12.1234 12.00000 -> 1 +dqctm616 comparetotmag 12.1234 12.000000 -> 1 +dqctm617 comparetotmag 12.1234 12.0000000 -> 1 +dqctm618 comparetotmag 12.1234 12.00000000 -> 1 +dqctm619 comparetotmag 12.1234 12.000000000 -> 1 +dqctm620 comparetotmag -12 -12.2345 -> -1 +dqctm621 comparetotmag -12.0 -12.2345 -> -1 +dqctm622 comparetotmag -12.00 -12.2345 -> -1 +dqctm623 comparetotmag -12.000 -12.2345 -> -1 +dqctm624 comparetotmag -12.0000 -12.2345 -> -1 +dqctm625 comparetotmag -12.00000 -12.2345 -> -1 +dqctm626 comparetotmag -12.000000 -12.2345 -> -1 +dqctm627 comparetotmag -12.0000000 -12.2345 -> -1 +dqctm628 comparetotmag -12.00000000 -12.2345 -> -1 +dqctm629 comparetotmag -12.000000000 -12.2345 -> -1 +dqctm630 comparetotmag -12.1234 -12 -> 1 +dqctm631 comparetotmag -12.1234 -12.0 -> 1 +dqctm632 comparetotmag -12.1234 -12.00 -> 1 +dqctm633 comparetotmag -12.1234 -12.000 -> 1 +dqctm634 comparetotmag -12.1234 -12.0000 -> 1 +dqctm635 comparetotmag -12.1234 -12.00000 -> 1 +dqctm636 comparetotmag -12.1234 -12.000000 -> 1 +dqctm637 comparetotmag -12.1234 -12.0000000 -> 1 +dqctm638 comparetotmag -12.1234 -12.00000000 -> 1 +dqctm639 comparetotmag -12.1234 -12.000000000 -> 1 + +-- extended zeros +dqctm640 comparetotmag 0 0 -> 0 +dqctm641 comparetotmag 0 -0 -> 0 +dqctm642 comparetotmag 0 -0.0 -> 1 +dqctm643 comparetotmag 0 0.0 -> 1 +dqctm644 comparetotmag -0 0 -> 0 +dqctm645 comparetotmag -0 -0 -> 0 +dqctm646 comparetotmag -0 -0.0 -> 1 +dqctm647 comparetotmag -0 0.0 -> 1 +dqctm648 comparetotmag 0.0 0 -> -1 +dqctm649 comparetotmag 0.0 -0 -> -1 +dqctm650 comparetotmag 0.0 -0.0 -> 0 +dqctm651 comparetotmag 0.0 0.0 -> 0 +dqctm652 comparetotmag -0.0 0 -> -1 +dqctm653 comparetotmag -0.0 -0 -> -1 +dqctm654 comparetotmag -0.0 -0.0 -> 0 +dqctm655 comparetotmag -0.0 0.0 -> 0 + +dqctm656 comparetotmag -0E1 0.0 -> 1 +dqctm657 comparetotmag -0E2 0.0 -> 1 +dqctm658 comparetotmag 0E1 0.0 -> 1 +dqctm659 comparetotmag 0E2 0.0 -> 1 +dqctm660 comparetotmag -0E1 0 -> 1 +dqctm661 comparetotmag -0E2 0 -> 1 +dqctm662 comparetotmag 0E1 0 -> 1 +dqctm663 comparetotmag 0E2 0 -> 1 +dqctm664 comparetotmag -0E1 -0E1 -> 0 +dqctm665 comparetotmag -0E2 -0E1 -> 1 +dqctm666 comparetotmag 0E1 -0E1 -> 0 +dqctm667 comparetotmag 0E2 -0E1 -> 1 +dqctm668 comparetotmag -0E1 -0E2 -> -1 +dqctm669 comparetotmag -0E2 -0E2 -> 0 +dqctm670 comparetotmag 0E1 -0E2 -> -1 +dqctm671 comparetotmag 0E2 -0E2 -> 0 +dqctm672 comparetotmag -0E1 0E1 -> 0 +dqctm673 comparetotmag -0E2 0E1 -> 1 +dqctm674 comparetotmag 0E1 0E1 -> 0 +dqctm675 comparetotmag 0E2 0E1 -> 1 +dqctm676 comparetotmag -0E1 0E2 -> -1 +dqctm677 comparetotmag -0E2 0E2 -> 0 +dqctm678 comparetotmag 0E1 0E2 -> -1 +dqctm679 comparetotmag 0E2 0E2 -> 0 + +-- trailing zeros; unit-y +dqctm680 comparetotmag 12 12 -> 0 +dqctm681 comparetotmag 12 12.0 -> 1 +dqctm682 comparetotmag 12 12.00 -> 1 +dqctm683 comparetotmag 12 12.000 -> 1 +dqctm684 comparetotmag 12 12.0000 -> 1 +dqctm685 comparetotmag 12 12.00000 -> 1 +dqctm686 comparetotmag 12 12.000000 -> 1 +dqctm687 comparetotmag 12 12.0000000 -> 1 +dqctm688 comparetotmag 12 12.00000000 -> 1 +dqctm689 comparetotmag 12 12.000000000 -> 1 +dqctm690 comparetotmag 12 12 -> 0 +dqctm691 comparetotmag 12.0 12 -> -1 +dqctm692 comparetotmag 12.00 12 -> -1 +dqctm693 comparetotmag 12.000 12 -> -1 +dqctm694 comparetotmag 12.0000 12 -> -1 +dqctm695 comparetotmag 12.00000 12 -> -1 +dqctm696 comparetotmag 12.000000 12 -> -1 +dqctm697 comparetotmag 12.0000000 12 -> -1 +dqctm698 comparetotmag 12.00000000 12 -> -1 +dqctm699 comparetotmag 12.000000000 12 -> -1 + +-- old long operand checks +dqctm701 comparetotmag 12345678000 1 -> 1 +dqctm702 comparetotmag 1 12345678000 -> -1 +dqctm703 comparetotmag 1234567800 1 -> 1 +dqctm704 comparetotmag 1 1234567800 -> -1 +dqctm705 comparetotmag 1234567890 1 -> 1 +dqctm706 comparetotmag 1 1234567890 -> -1 +dqctm707 comparetotmag 1234567891 1 -> 1 +dqctm708 comparetotmag 1 1234567891 -> -1 +dqctm709 comparetotmag 12345678901 1 -> 1 +dqctm710 comparetotmag 1 12345678901 -> -1 +dqctm711 comparetotmag 1234567896 1 -> 1 +dqctm712 comparetotmag 1 1234567896 -> -1 +dqctm713 comparetotmag -1234567891 1 -> 1 +dqctm714 comparetotmag 1 -1234567891 -> -1 +dqctm715 comparetotmag -12345678901 1 -> 1 +dqctm716 comparetotmag 1 -12345678901 -> -1 +dqctm717 comparetotmag -1234567896 1 -> 1 +dqctm718 comparetotmag 1 -1234567896 -> -1 + +-- old residue cases +dqctm740 comparetotmag 1 0.9999999 -> 1 +dqctm741 comparetotmag 1 0.999999 -> 1 +dqctm742 comparetotmag 1 0.99999 -> 1 +dqctm743 comparetotmag 1 1.0000 -> 1 +dqctm744 comparetotmag 1 1.00001 -> -1 +dqctm745 comparetotmag 1 1.000001 -> -1 +dqctm746 comparetotmag 1 1.0000001 -> -1 +dqctm750 comparetotmag 0.9999999 1 -> -1 +dqctm751 comparetotmag 0.999999 1 -> -1 +dqctm752 comparetotmag 0.99999 1 -> -1 +dqctm753 comparetotmag 1.0000 1 -> -1 +dqctm754 comparetotmag 1.00001 1 -> 1 +dqctm755 comparetotmag 1.000001 1 -> 1 +dqctm756 comparetotmag 1.0000001 1 -> 1 + +-- Specials +dqctm780 comparetotmag Inf -Inf -> 0 +dqctm781 comparetotmag Inf -1000 -> 1 +dqctm782 comparetotmag Inf -1 -> 1 +dqctm783 comparetotmag Inf -0 -> 1 +dqctm784 comparetotmag Inf 0 -> 1 +dqctm785 comparetotmag Inf 1 -> 1 +dqctm786 comparetotmag Inf 1000 -> 1 +dqctm787 comparetotmag Inf Inf -> 0 +dqctm788 comparetotmag -1000 Inf -> -1 +dqctm789 comparetotmag -Inf Inf -> 0 +dqctm790 comparetotmag -1 Inf -> -1 +dqctm791 comparetotmag -0 Inf -> -1 +dqctm792 comparetotmag 0 Inf -> -1 +dqctm793 comparetotmag 1 Inf -> -1 +dqctm794 comparetotmag 1000 Inf -> -1 +dqctm795 comparetotmag Inf Inf -> 0 + +dqctm800 comparetotmag -Inf -Inf -> 0 +dqctm801 comparetotmag -Inf -1000 -> 1 +dqctm802 comparetotmag -Inf -1 -> 1 +dqctm803 comparetotmag -Inf -0 -> 1 +dqctm804 comparetotmag -Inf 0 -> 1 +dqctm805 comparetotmag -Inf 1 -> 1 +dqctm806 comparetotmag -Inf 1000 -> 1 +dqctm807 comparetotmag -Inf Inf -> 0 +dqctm808 comparetotmag -Inf -Inf -> 0 +dqctm809 comparetotmag -1000 -Inf -> -1 +dqctm810 comparetotmag -1 -Inf -> -1 +dqctm811 comparetotmag -0 -Inf -> -1 +dqctm812 comparetotmag 0 -Inf -> -1 +dqctm813 comparetotmag 1 -Inf -> -1 +dqctm814 comparetotmag 1000 -Inf -> -1 +dqctm815 comparetotmag Inf -Inf -> 0 + +dqctm821 comparetotmag NaN -Inf -> 1 +dqctm822 comparetotmag NaN -1000 -> 1 +dqctm823 comparetotmag NaN -1 -> 1 +dqctm824 comparetotmag NaN -0 -> 1 +dqctm825 comparetotmag NaN 0 -> 1 +dqctm826 comparetotmag NaN 1 -> 1 +dqctm827 comparetotmag NaN 1000 -> 1 +dqctm828 comparetotmag NaN Inf -> 1 +dqctm829 comparetotmag NaN NaN -> 0 +dqctm830 comparetotmag -Inf NaN -> -1 +dqctm831 comparetotmag -1000 NaN -> -1 +dqctm832 comparetotmag -1 NaN -> -1 +dqctm833 comparetotmag -0 NaN -> -1 +dqctm834 comparetotmag 0 NaN -> -1 +dqctm835 comparetotmag 1 NaN -> -1 +dqctm836 comparetotmag 1000 NaN -> -1 +dqctm837 comparetotmag Inf NaN -> -1 +dqctm838 comparetotmag -NaN -NaN -> 0 +dqctm839 comparetotmag +NaN -NaN -> 0 +dqctm840 comparetotmag -NaN +NaN -> 0 + +dqctm841 comparetotmag sNaN -sNaN -> 0 +dqctm842 comparetotmag sNaN -NaN -> -1 +dqctm843 comparetotmag sNaN -Inf -> 1 +dqctm844 comparetotmag sNaN -1000 -> 1 +dqctm845 comparetotmag sNaN -1 -> 1 +dqctm846 comparetotmag sNaN -0 -> 1 +dqctm847 comparetotmag sNaN 0 -> 1 +dqctm848 comparetotmag sNaN 1 -> 1 +dqctm849 comparetotmag sNaN 1000 -> 1 +dqctm850 comparetotmag sNaN NaN -> -1 +dqctm851 comparetotmag sNaN sNaN -> 0 + +dqctm852 comparetotmag -sNaN sNaN -> 0 +dqctm853 comparetotmag -NaN sNaN -> 1 +dqctm854 comparetotmag -Inf sNaN -> -1 +dqctm855 comparetotmag -1000 sNaN -> -1 +dqctm856 comparetotmag -1 sNaN -> -1 +dqctm857 comparetotmag -0 sNaN -> -1 +dqctm858 comparetotmag 0 sNaN -> -1 +dqctm859 comparetotmag 1 sNaN -> -1 +dqctm860 comparetotmag 1000 sNaN -> -1 +dqctm861 comparetotmag Inf sNaN -> -1 +dqctm862 comparetotmag NaN sNaN -> 1 +dqctm863 comparetotmag sNaN sNaN -> 0 + +dqctm871 comparetotmag -sNaN -sNaN -> 0 +dqctm872 comparetotmag -sNaN -NaN -> -1 +dqctm873 comparetotmag -sNaN -Inf -> 1 +dqctm874 comparetotmag -sNaN -1000 -> 1 +dqctm875 comparetotmag -sNaN -1 -> 1 +dqctm876 comparetotmag -sNaN -0 -> 1 +dqctm877 comparetotmag -sNaN 0 -> 1 +dqctm878 comparetotmag -sNaN 1 -> 1 +dqctm879 comparetotmag -sNaN 1000 -> 1 +dqctm880 comparetotmag -sNaN NaN -> -1 +dqctm881 comparetotmag -sNaN sNaN -> 0 + +dqctm882 comparetotmag -sNaN -sNaN -> 0 +dqctm883 comparetotmag -NaN -sNaN -> 1 +dqctm884 comparetotmag -Inf -sNaN -> -1 +dqctm885 comparetotmag -1000 -sNaN -> -1 +dqctm886 comparetotmag -1 -sNaN -> -1 +dqctm887 comparetotmag -0 -sNaN -> -1 +dqctm888 comparetotmag 0 -sNaN -> -1 +dqctm889 comparetotmag 1 -sNaN -> -1 +dqctm890 comparetotmag 1000 -sNaN -> -1 +dqctm891 comparetotmag Inf -sNaN -> -1 +dqctm892 comparetotmag NaN -sNaN -> 1 +dqctm893 comparetotmag sNaN -sNaN -> 0 + +-- NaNs with payload +dqctm960 comparetotmag NaN9 -Inf -> 1 +dqctm961 comparetotmag NaN8 999 -> 1 +dqctm962 comparetotmag NaN77 Inf -> 1 +dqctm963 comparetotmag -NaN67 NaN5 -> 1 +dqctm964 comparetotmag -Inf -NaN4 -> -1 +dqctm965 comparetotmag -999 -NaN33 -> -1 +dqctm966 comparetotmag Inf NaN2 -> -1 + +dqctm970 comparetotmag -NaN41 -NaN42 -> -1 +dqctm971 comparetotmag +NaN41 -NaN42 -> -1 +dqctm972 comparetotmag -NaN41 +NaN42 -> -1 +dqctm973 comparetotmag +NaN41 +NaN42 -> -1 +dqctm974 comparetotmag -NaN42 -NaN01 -> 1 +dqctm975 comparetotmag +NaN42 -NaN01 -> 1 +dqctm976 comparetotmag -NaN42 +NaN01 -> 1 +dqctm977 comparetotmag +NaN42 +NaN01 -> 1 + +dqctm980 comparetotmag -sNaN771 -sNaN772 -> -1 +dqctm981 comparetotmag +sNaN771 -sNaN772 -> -1 +dqctm982 comparetotmag -sNaN771 +sNaN772 -> -1 +dqctm983 comparetotmag +sNaN771 +sNaN772 -> -1 +dqctm984 comparetotmag -sNaN772 -sNaN771 -> 1 +dqctm985 comparetotmag +sNaN772 -sNaN771 -> 1 +dqctm986 comparetotmag -sNaN772 +sNaN771 -> 1 +dqctm987 comparetotmag +sNaN772 +sNaN771 -> 1 + +dqctm991 comparetotmag -sNaN99 -Inf -> 1 +dqctm992 comparetotmag sNaN98 -11 -> 1 +dqctm993 comparetotmag sNaN97 NaN -> -1 +dqctm994 comparetotmag sNaN16 sNaN94 -> -1 +dqctm995 comparetotmag NaN85 sNaN83 -> 1 +dqctm996 comparetotmag -Inf sNaN92 -> -1 +dqctm997 comparetotmag 088 sNaN81 -> -1 +dqctm998 comparetotmag Inf sNaN90 -> -1 +dqctm999 comparetotmag NaN -sNaN89 -> 1 + +-- spread zeros +dqctm1110 comparetotmag 0E-6143 0 -> -1 +dqctm1111 comparetotmag 0E-6143 -0 -> -1 +dqctm1112 comparetotmag -0E-6143 0 -> -1 +dqctm1113 comparetotmag -0E-6143 -0 -> -1 +dqctm1114 comparetotmag 0E-6143 0E+6144 -> -1 +dqctm1115 comparetotmag 0E-6143 -0E+6144 -> -1 +dqctm1116 comparetotmag -0E-6143 0E+6144 -> -1 +dqctm1117 comparetotmag -0E-6143 -0E+6144 -> -1 +dqctm1118 comparetotmag 0 0E+6144 -> -1 +dqctm1119 comparetotmag 0 -0E+6144 -> -1 +dqctm1120 comparetotmag -0 0E+6144 -> -1 +dqctm1121 comparetotmag -0 -0E+6144 -> -1 + +dqctm1130 comparetotmag 0E+6144 0 -> 1 +dqctm1131 comparetotmag 0E+6144 -0 -> 1 +dqctm1132 comparetotmag -0E+6144 0 -> 1 +dqctm1133 comparetotmag -0E+6144 -0 -> 1 +dqctm1134 comparetotmag 0E+6144 0E-6143 -> 1 +dqctm1135 comparetotmag 0E+6144 -0E-6143 -> 1 +dqctm1136 comparetotmag -0E+6144 0E-6143 -> 1 +dqctm1137 comparetotmag -0E+6144 -0E-6143 -> 1 +dqctm1138 comparetotmag 0 0E-6143 -> 1 +dqctm1139 comparetotmag 0 -0E-6143 -> 1 +dqctm1140 comparetotmag -0 0E-6143 -> 1 +dqctm1141 comparetotmag -0 -0E-6143 -> 1 + +-- Null tests +dqctm9990 comparetotmag 10 # -> NaN Invalid_operation +dqctm9991 comparetotmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqCopy.decTest b/Lib/test/decimaltestdata/dqCopy.decTest index 0c6243158f2..7254d68bb7e 100644 --- a/Lib/test/decimaltestdata/dqCopy.decTest +++ b/Lib/test/decimaltestdata/dqCopy.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqCopy.decTest -- quiet decQuad copy -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqcpy001 copy +7.50 -> 7.50 - --- Infinities -dqcpy011 copy Infinity -> Infinity -dqcpy012 copy -Infinity -> -Infinity - --- NaNs, 0 payload -dqcpy021 copy NaN -> NaN -dqcpy022 copy -NaN -> -NaN -dqcpy023 copy sNaN -> sNaN -dqcpy024 copy -sNaN -> -sNaN - --- NaNs, non-0 payload -dqcpy031 copy NaN10 -> NaN10 -dqcpy032 copy -NaN10 -> -NaN10 -dqcpy033 copy sNaN10 -> sNaN10 -dqcpy034 copy -sNaN10 -> -sNaN10 -dqcpy035 copy NaN7 -> NaN7 -dqcpy036 copy -NaN7 -> -NaN7 -dqcpy037 copy sNaN101 -> sNaN101 -dqcpy038 copy -sNaN101 -> -sNaN101 - --- finites -dqcpy101 copy 7 -> 7 -dqcpy102 copy -7 -> -7 -dqcpy103 copy 75 -> 75 -dqcpy104 copy -75 -> -75 -dqcpy105 copy 7.50 -> 7.50 -dqcpy106 copy -7.50 -> -7.50 -dqcpy107 copy 7.500 -> 7.500 -dqcpy108 copy -7.500 -> -7.500 - --- zeros -dqcpy111 copy 0 -> 0 -dqcpy112 copy -0 -> -0 -dqcpy113 copy 0E+4 -> 0E+4 -dqcpy114 copy -0E+4 -> -0E+4 -dqcpy115 copy 0.0000 -> 0.0000 -dqcpy116 copy -0.0000 -> -0.0000 -dqcpy117 copy 0E-141 -> 0E-141 -dqcpy118 copy -0E-141 -> -0E-141 - --- full coefficients, alternating bits -dqcpy121 copy 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqcpy122 copy -2682682682682682682682682682682682 -> -2682682682682682682682682682682682 -dqcpy123 copy 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 -dqcpy124 copy -1341341341341341341341341341341341 -> -1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcpy131 copy 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqcpy132 copy 1E-6143 -> 1E-6143 -dqcpy133 copy 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqcpy134 copy 1E-6176 -> 1E-6176 - -dqcpy135 copy -1E-6176 -> -1E-6176 -dqcpy136 copy -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqcpy137 copy -1E-6143 -> -1E-6143 -dqcpy138 copy -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqCopy.decTest -- quiet decQuad copy -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqcpy001 copy +7.50 -> 7.50 + +-- Infinities +dqcpy011 copy Infinity -> Infinity +dqcpy012 copy -Infinity -> -Infinity + +-- NaNs, 0 payload +dqcpy021 copy NaN -> NaN +dqcpy022 copy -NaN -> -NaN +dqcpy023 copy sNaN -> sNaN +dqcpy024 copy -sNaN -> -sNaN + +-- NaNs, non-0 payload +dqcpy031 copy NaN10 -> NaN10 +dqcpy032 copy -NaN10 -> -NaN10 +dqcpy033 copy sNaN10 -> sNaN10 +dqcpy034 copy -sNaN10 -> -sNaN10 +dqcpy035 copy NaN7 -> NaN7 +dqcpy036 copy -NaN7 -> -NaN7 +dqcpy037 copy sNaN101 -> sNaN101 +dqcpy038 copy -sNaN101 -> -sNaN101 + +-- finites +dqcpy101 copy 7 -> 7 +dqcpy102 copy -7 -> -7 +dqcpy103 copy 75 -> 75 +dqcpy104 copy -75 -> -75 +dqcpy105 copy 7.50 -> 7.50 +dqcpy106 copy -7.50 -> -7.50 +dqcpy107 copy 7.500 -> 7.500 +dqcpy108 copy -7.500 -> -7.500 + +-- zeros +dqcpy111 copy 0 -> 0 +dqcpy112 copy -0 -> -0 +dqcpy113 copy 0E+4 -> 0E+4 +dqcpy114 copy -0E+4 -> -0E+4 +dqcpy115 copy 0.0000 -> 0.0000 +dqcpy116 copy -0.0000 -> -0.0000 +dqcpy117 copy 0E-141 -> 0E-141 +dqcpy118 copy -0E-141 -> -0E-141 + +-- full coefficients, alternating bits +dqcpy121 copy 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqcpy122 copy -2682682682682682682682682682682682 -> -2682682682682682682682682682682682 +dqcpy123 copy 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 +dqcpy124 copy -1341341341341341341341341341341341 -> -1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcpy131 copy 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqcpy132 copy 1E-6143 -> 1E-6143 +dqcpy133 copy 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqcpy134 copy 1E-6176 -> 1E-6176 + +dqcpy135 copy -1E-6176 -> -1E-6176 +dqcpy136 copy -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqcpy137 copy -1E-6143 -> -1E-6143 +dqcpy138 copy -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqCopyAbs.decTest b/Lib/test/decimaltestdata/dqCopyAbs.decTest index 16bcb4eaedb..bdec0206dee 100644 --- a/Lib/test/decimaltestdata/dqCopyAbs.decTest +++ b/Lib/test/decimaltestdata/dqCopyAbs.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqCopyAbs.decTest -- quiet decQuad copy and set sign to zero -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqcpa001 copyabs +7.50 -> 7.50 - --- Infinities -dqcpa011 copyabs Infinity -> Infinity -dqcpa012 copyabs -Infinity -> Infinity - --- NaNs, 0 payload -dqcpa021 copyabs NaN -> NaN -dqcpa022 copyabs -NaN -> NaN -dqcpa023 copyabs sNaN -> sNaN -dqcpa024 copyabs -sNaN -> sNaN - --- NaNs, non-0 payload -dqcpa031 copyabs NaN10 -> NaN10 -dqcpa032 copyabs -NaN15 -> NaN15 -dqcpa033 copyabs sNaN15 -> sNaN15 -dqcpa034 copyabs -sNaN10 -> sNaN10 -dqcpa035 copyabs NaN7 -> NaN7 -dqcpa036 copyabs -NaN7 -> NaN7 -dqcpa037 copyabs sNaN101 -> sNaN101 -dqcpa038 copyabs -sNaN101 -> sNaN101 - --- finites -dqcpa101 copyabs 7 -> 7 -dqcpa102 copyabs -7 -> 7 -dqcpa103 copyabs 75 -> 75 -dqcpa104 copyabs -75 -> 75 -dqcpa105 copyabs 7.10 -> 7.10 -dqcpa106 copyabs -7.10 -> 7.10 -dqcpa107 copyabs 7.500 -> 7.500 -dqcpa108 copyabs -7.500 -> 7.500 - --- zeros -dqcpa111 copyabs 0 -> 0 -dqcpa112 copyabs -0 -> 0 -dqcpa113 copyabs 0E+6 -> 0E+6 -dqcpa114 copyabs -0E+6 -> 0E+6 -dqcpa115 copyabs 0.0000 -> 0.0000 -dqcpa116 copyabs -0.0000 -> 0.0000 -dqcpa117 copyabs 0E-141 -> 0E-141 -dqcpa118 copyabs -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqcpa121 copyabs 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqcpa122 copyabs -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqcpa123 copyabs 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 -dqcpa124 copyabs -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcpa131 copyabs 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqcpa132 copyabs 1E-6143 -> 1E-6143 -dqcpa133 copyabs 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqcpa134 copyabs 1E-6176 -> 1E-6176 - -dqcpa135 copyabs -1E-6176 -> 1E-6176 -dqcpa136 copyabs -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqcpa137 copyabs -1E-6143 -> 1E-6143 -dqcpa138 copyabs -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqCopyAbs.decTest -- quiet decQuad copy and set sign to zero -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqcpa001 copyabs +7.50 -> 7.50 + +-- Infinities +dqcpa011 copyabs Infinity -> Infinity +dqcpa012 copyabs -Infinity -> Infinity + +-- NaNs, 0 payload +dqcpa021 copyabs NaN -> NaN +dqcpa022 copyabs -NaN -> NaN +dqcpa023 copyabs sNaN -> sNaN +dqcpa024 copyabs -sNaN -> sNaN + +-- NaNs, non-0 payload +dqcpa031 copyabs NaN10 -> NaN10 +dqcpa032 copyabs -NaN15 -> NaN15 +dqcpa033 copyabs sNaN15 -> sNaN15 +dqcpa034 copyabs -sNaN10 -> sNaN10 +dqcpa035 copyabs NaN7 -> NaN7 +dqcpa036 copyabs -NaN7 -> NaN7 +dqcpa037 copyabs sNaN101 -> sNaN101 +dqcpa038 copyabs -sNaN101 -> sNaN101 + +-- finites +dqcpa101 copyabs 7 -> 7 +dqcpa102 copyabs -7 -> 7 +dqcpa103 copyabs 75 -> 75 +dqcpa104 copyabs -75 -> 75 +dqcpa105 copyabs 7.10 -> 7.10 +dqcpa106 copyabs -7.10 -> 7.10 +dqcpa107 copyabs 7.500 -> 7.500 +dqcpa108 copyabs -7.500 -> 7.500 + +-- zeros +dqcpa111 copyabs 0 -> 0 +dqcpa112 copyabs -0 -> 0 +dqcpa113 copyabs 0E+6 -> 0E+6 +dqcpa114 copyabs -0E+6 -> 0E+6 +dqcpa115 copyabs 0.0000 -> 0.0000 +dqcpa116 copyabs -0.0000 -> 0.0000 +dqcpa117 copyabs 0E-141 -> 0E-141 +dqcpa118 copyabs -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqcpa121 copyabs 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqcpa122 copyabs -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqcpa123 copyabs 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 +dqcpa124 copyabs -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcpa131 copyabs 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqcpa132 copyabs 1E-6143 -> 1E-6143 +dqcpa133 copyabs 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqcpa134 copyabs 1E-6176 -> 1E-6176 + +dqcpa135 copyabs -1E-6176 -> 1E-6176 +dqcpa136 copyabs -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqcpa137 copyabs -1E-6143 -> 1E-6143 +dqcpa138 copyabs -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqCopyNegate.decTest b/Lib/test/decimaltestdata/dqCopyNegate.decTest index 6253f5a3558..ea008557724 100644 --- a/Lib/test/decimaltestdata/dqCopyNegate.decTest +++ b/Lib/test/decimaltestdata/dqCopyNegate.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqCopyNegate.decTest -- quiet decQuad copy and negate -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqcpn001 copynegate +7.50 -> -7.50 - --- Infinities -dqcpn011 copynegate Infinity -> -Infinity -dqcpn012 copynegate -Infinity -> Infinity - --- NaNs, 0 payload -dqcpn021 copynegate NaN -> -NaN -dqcpn022 copynegate -NaN -> NaN -dqcpn023 copynegate sNaN -> -sNaN -dqcpn024 copynegate -sNaN -> sNaN - --- NaNs, non-0 payload -dqcpn031 copynegate NaN13 -> -NaN13 -dqcpn032 copynegate -NaN13 -> NaN13 -dqcpn033 copynegate sNaN13 -> -sNaN13 -dqcpn034 copynegate -sNaN13 -> sNaN13 -dqcpn035 copynegate NaN70 -> -NaN70 -dqcpn036 copynegate -NaN70 -> NaN70 -dqcpn037 copynegate sNaN101 -> -sNaN101 -dqcpn038 copynegate -sNaN101 -> sNaN101 - --- finites -dqcpn101 copynegate 7 -> -7 -dqcpn102 copynegate -7 -> 7 -dqcpn103 copynegate 75 -> -75 -dqcpn104 copynegate -75 -> 75 -dqcpn105 copynegate 7.50 -> -7.50 -dqcpn106 copynegate -7.50 -> 7.50 -dqcpn107 copynegate 7.500 -> -7.500 -dqcpn108 copynegate -7.500 -> 7.500 - --- zeros -dqcpn111 copynegate 0 -> -0 -dqcpn112 copynegate -0 -> 0 -dqcpn113 copynegate 0E+4 -> -0E+4 -dqcpn114 copynegate -0E+4 -> 0E+4 -dqcpn115 copynegate 0.0000 -> -0.0000 -dqcpn116 copynegate -0.0000 -> 0.0000 -dqcpn117 copynegate 0E-141 -> -0E-141 -dqcpn118 copynegate -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqcpn121 copynegate 2682682682682682682682682682682682 -> -2682682682682682682682682682682682 -dqcpn122 copynegate -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqcpn123 copynegate 1341341341341341341341341341341341 -> -1341341341341341341341341341341341 -dqcpn124 copynegate -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcpn131 copynegate 9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqcpn132 copynegate 1E-6143 -> -1E-6143 -dqcpn133 copynegate 1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqcpn134 copynegate 1E-6176 -> -1E-6176 - -dqcpn135 copynegate -1E-6176 -> 1E-6176 -dqcpn136 copynegate -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqcpn137 copynegate -1E-6143 -> 1E-6143 -dqcpn138 copynegate -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqCopyNegate.decTest -- quiet decQuad copy and negate -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqcpn001 copynegate +7.50 -> -7.50 + +-- Infinities +dqcpn011 copynegate Infinity -> -Infinity +dqcpn012 copynegate -Infinity -> Infinity + +-- NaNs, 0 payload +dqcpn021 copynegate NaN -> -NaN +dqcpn022 copynegate -NaN -> NaN +dqcpn023 copynegate sNaN -> -sNaN +dqcpn024 copynegate -sNaN -> sNaN + +-- NaNs, non-0 payload +dqcpn031 copynegate NaN13 -> -NaN13 +dqcpn032 copynegate -NaN13 -> NaN13 +dqcpn033 copynegate sNaN13 -> -sNaN13 +dqcpn034 copynegate -sNaN13 -> sNaN13 +dqcpn035 copynegate NaN70 -> -NaN70 +dqcpn036 copynegate -NaN70 -> NaN70 +dqcpn037 copynegate sNaN101 -> -sNaN101 +dqcpn038 copynegate -sNaN101 -> sNaN101 + +-- finites +dqcpn101 copynegate 7 -> -7 +dqcpn102 copynegate -7 -> 7 +dqcpn103 copynegate 75 -> -75 +dqcpn104 copynegate -75 -> 75 +dqcpn105 copynegate 7.50 -> -7.50 +dqcpn106 copynegate -7.50 -> 7.50 +dqcpn107 copynegate 7.500 -> -7.500 +dqcpn108 copynegate -7.500 -> 7.500 + +-- zeros +dqcpn111 copynegate 0 -> -0 +dqcpn112 copynegate -0 -> 0 +dqcpn113 copynegate 0E+4 -> -0E+4 +dqcpn114 copynegate -0E+4 -> 0E+4 +dqcpn115 copynegate 0.0000 -> -0.0000 +dqcpn116 copynegate -0.0000 -> 0.0000 +dqcpn117 copynegate 0E-141 -> -0E-141 +dqcpn118 copynegate -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqcpn121 copynegate 2682682682682682682682682682682682 -> -2682682682682682682682682682682682 +dqcpn122 copynegate -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqcpn123 copynegate 1341341341341341341341341341341341 -> -1341341341341341341341341341341341 +dqcpn124 copynegate -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcpn131 copynegate 9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqcpn132 copynegate 1E-6143 -> -1E-6143 +dqcpn133 copynegate 1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqcpn134 copynegate 1E-6176 -> -1E-6176 + +dqcpn135 copynegate -1E-6176 -> 1E-6176 +dqcpn136 copynegate -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqcpn137 copynegate -1E-6143 -> 1E-6143 +dqcpn138 copynegate -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqCopySign.decTest b/Lib/test/decimaltestdata/dqCopySign.decTest index 97b5e6e955e..ce794b7c35c 100644 --- a/Lib/test/decimaltestdata/dqCopySign.decTest +++ b/Lib/test/decimaltestdata/dqCopySign.decTest @@ -1,175 +1,175 @@ ------------------------------------------------------------------------- --- dqCopySign.decTest -- quiet decQuad copy with sign from rhs -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqcps001 copysign +7.50 11 -> 7.50 - --- Infinities -dqcps011 copysign Infinity 11 -> Infinity -dqcps012 copysign -Infinity 11 -> Infinity - --- NaNs, 0 payload -dqcps021 copysign NaN 11 -> NaN -dqcps022 copysign -NaN 11 -> NaN -dqcps023 copysign sNaN 11 -> sNaN -dqcps024 copysign -sNaN 11 -> sNaN - --- NaNs, non-0 payload -dqcps031 copysign NaN10 11 -> NaN10 -dqcps032 copysign -NaN10 11 -> NaN10 -dqcps033 copysign sNaN10 11 -> sNaN10 -dqcps034 copysign -sNaN10 11 -> sNaN10 -dqcps035 copysign NaN7 11 -> NaN7 -dqcps036 copysign -NaN7 11 -> NaN7 -dqcps037 copysign sNaN101 11 -> sNaN101 -dqcps038 copysign -sNaN101 11 -> sNaN101 - --- finites -dqcps101 copysign 7 11 -> 7 -dqcps102 copysign -7 11 -> 7 -dqcps103 copysign 75 11 -> 75 -dqcps104 copysign -75 11 -> 75 -dqcps105 copysign 7.50 11 -> 7.50 -dqcps106 copysign -7.50 11 -> 7.50 -dqcps107 copysign 7.500 11 -> 7.500 -dqcps108 copysign -7.500 11 -> 7.500 - --- zeros -dqcps111 copysign 0 11 -> 0 -dqcps112 copysign -0 11 -> 0 -dqcps113 copysign 0E+4 11 -> 0E+4 -dqcps114 copysign -0E+4 11 -> 0E+4 -dqcps115 copysign 0.0000 11 -> 0.0000 -dqcps116 copysign -0.0000 11 -> 0.0000 -dqcps117 copysign 0E-141 11 -> 0E-141 -dqcps118 copysign -0E-141 11 -> 0E-141 - --- full coefficients, alternating bits -dqcps121 copysign 2682682682682682682682682682682682 8 -> 2682682682682682682682682682682682 -dqcps122 copysign -2682682682682682682682682682682682 8 -> 2682682682682682682682682682682682 -dqcps123 copysign 1341341341341341341341341341341341 8 -> 1341341341341341341341341341341341 -dqcps124 copysign -1341341341341341341341341341341341 8 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcps131 copysign 9.999999999999999999999999999999999E+6144 8 -> 9.999999999999999999999999999999999E+6144 -dqcps132 copysign 1E-6143 8 -> 1E-6143 -dqcps133 copysign 1.000000000000000000000000000000000E-6143 8 -> 1.000000000000000000000000000000000E-6143 -dqcps134 copysign 1E-6176 8 -> 1E-6176 - -dqcps135 copysign -1E-6176 8 -> 1E-6176 -dqcps136 copysign -1.000000000000000000000000000000000E-6143 8 -> 1.000000000000000000000000000000000E-6143 -dqcps137 copysign -1E-6143 8 -> 1E-6143 -dqcps138 copysign -9.999999999999999999999999999999999E+6144 8 -> 9.999999999999999999999999999999999E+6144 - --- repeat with negative RHS - --- Infinities -dqcps211 copysign Infinity -34 -> -Infinity -dqcps212 copysign -Infinity -34 -> -Infinity - --- NaNs, 0 payload -dqcps221 copysign NaN -34 -> -NaN -dqcps222 copysign -NaN -34 -> -NaN -dqcps223 copysign sNaN -34 -> -sNaN -dqcps224 copysign -sNaN -34 -> -sNaN - --- NaNs, non-0 payload -dqcps231 copysign NaN10 -34 -> -NaN10 -dqcps232 copysign -NaN10 -34 -> -NaN10 -dqcps233 copysign sNaN10 -34 -> -sNaN10 -dqcps234 copysign -sNaN10 -34 -> -sNaN10 -dqcps235 copysign NaN7 -34 -> -NaN7 -dqcps236 copysign -NaN7 -34 -> -NaN7 -dqcps237 copysign sNaN101 -34 -> -sNaN101 -dqcps238 copysign -sNaN101 -34 -> -sNaN101 - --- finites -dqcps301 copysign 7 -34 -> -7 -dqcps302 copysign -7 -34 -> -7 -dqcps303 copysign 75 -34 -> -75 -dqcps304 copysign -75 -34 -> -75 -dqcps305 copysign 7.50 -34 -> -7.50 -dqcps306 copysign -7.50 -34 -> -7.50 -dqcps307 copysign 7.500 -34 -> -7.500 -dqcps308 copysign -7.500 -34 -> -7.500 - --- zeros -dqcps311 copysign 0 -34 -> -0 -dqcps312 copysign -0 -34 -> -0 -dqcps313 copysign 0E+4 -34 -> -0E+4 -dqcps314 copysign -0E+4 -34 -> -0E+4 -dqcps315 copysign 0.0000 -34 -> -0.0000 -dqcps316 copysign -0.0000 -34 -> -0.0000 -dqcps317 copysign 0E-141 -34 -> -0E-141 -dqcps318 copysign -0E-141 -34 -> -0E-141 - --- full coefficients, alternating bits -dqcps321 copysign 2682682682682682682682682682682682 -9 -> -2682682682682682682682682682682682 -dqcps322 copysign -2682682682682682682682682682682682 -9 -> -2682682682682682682682682682682682 -dqcps323 copysign 1341341341341341341341341341341341 -9 -> -1341341341341341341341341341341341 -dqcps324 copysign -1341341341341341341341341341341341 -9 -> -1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqcps331 copysign 9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 -dqcps332 copysign 1E-6143 -1 -> -1E-6143 -dqcps333 copysign 1.000000000000000000000000000000000E-6143 -1 -> -1.000000000000000000000000000000000E-6143 -dqcps334 copysign 1E-6176 -1 -> -1E-6176 - -dqcps335 copysign -1E-6176 -3 -> -1E-6176 -dqcps336 copysign -1.000000000000000000000000000000000E-6143 -3 -> -1.000000000000000000000000000000000E-6143 -dqcps337 copysign -1E-6143 -3 -> -1E-6143 -dqcps338 copysign -9.999999999999999999999999999999999E+6144 -3 -> -9.999999999999999999999999999999999E+6144 - --- Other kinds of RHS -dqcps401 copysign 701 -34 -> -701 -dqcps402 copysign -720 -34 -> -720 -dqcps403 copysign 701 -0 -> -701 -dqcps404 copysign -720 -0 -> -720 -dqcps405 copysign 701 +0 -> 701 -dqcps406 copysign -720 +0 -> 720 -dqcps407 copysign 701 +34 -> 701 -dqcps408 copysign -720 +34 -> 720 - -dqcps413 copysign 701 -Inf -> -701 -dqcps414 copysign -720 -Inf -> -720 -dqcps415 copysign 701 +Inf -> 701 -dqcps416 copysign -720 +Inf -> 720 - -dqcps420 copysign 701 -NaN -> -701 -dqcps421 copysign -720 -NaN -> -720 -dqcps422 copysign 701 +NaN -> 701 -dqcps423 copysign -720 +NaN -> 720 -dqcps425 copysign -720 +NaN8 -> 720 - -dqcps426 copysign 701 -sNaN -> -701 -dqcps427 copysign -720 -sNaN -> -720 -dqcps428 copysign 701 +sNaN -> 701 -dqcps429 copysign -720 +sNaN -> 720 -dqcps430 copysign -720 +sNaN3 -> 720 - +------------------------------------------------------------------------ +-- dqCopySign.decTest -- quiet decQuad copy with sign from rhs -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqcps001 copysign +7.50 11 -> 7.50 + +-- Infinities +dqcps011 copysign Infinity 11 -> Infinity +dqcps012 copysign -Infinity 11 -> Infinity + +-- NaNs, 0 payload +dqcps021 copysign NaN 11 -> NaN +dqcps022 copysign -NaN 11 -> NaN +dqcps023 copysign sNaN 11 -> sNaN +dqcps024 copysign -sNaN 11 -> sNaN + +-- NaNs, non-0 payload +dqcps031 copysign NaN10 11 -> NaN10 +dqcps032 copysign -NaN10 11 -> NaN10 +dqcps033 copysign sNaN10 11 -> sNaN10 +dqcps034 copysign -sNaN10 11 -> sNaN10 +dqcps035 copysign NaN7 11 -> NaN7 +dqcps036 copysign -NaN7 11 -> NaN7 +dqcps037 copysign sNaN101 11 -> sNaN101 +dqcps038 copysign -sNaN101 11 -> sNaN101 + +-- finites +dqcps101 copysign 7 11 -> 7 +dqcps102 copysign -7 11 -> 7 +dqcps103 copysign 75 11 -> 75 +dqcps104 copysign -75 11 -> 75 +dqcps105 copysign 7.50 11 -> 7.50 +dqcps106 copysign -7.50 11 -> 7.50 +dqcps107 copysign 7.500 11 -> 7.500 +dqcps108 copysign -7.500 11 -> 7.500 + +-- zeros +dqcps111 copysign 0 11 -> 0 +dqcps112 copysign -0 11 -> 0 +dqcps113 copysign 0E+4 11 -> 0E+4 +dqcps114 copysign -0E+4 11 -> 0E+4 +dqcps115 copysign 0.0000 11 -> 0.0000 +dqcps116 copysign -0.0000 11 -> 0.0000 +dqcps117 copysign 0E-141 11 -> 0E-141 +dqcps118 copysign -0E-141 11 -> 0E-141 + +-- full coefficients, alternating bits +dqcps121 copysign 2682682682682682682682682682682682 8 -> 2682682682682682682682682682682682 +dqcps122 copysign -2682682682682682682682682682682682 8 -> 2682682682682682682682682682682682 +dqcps123 copysign 1341341341341341341341341341341341 8 -> 1341341341341341341341341341341341 +dqcps124 copysign -1341341341341341341341341341341341 8 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcps131 copysign 9.999999999999999999999999999999999E+6144 8 -> 9.999999999999999999999999999999999E+6144 +dqcps132 copysign 1E-6143 8 -> 1E-6143 +dqcps133 copysign 1.000000000000000000000000000000000E-6143 8 -> 1.000000000000000000000000000000000E-6143 +dqcps134 copysign 1E-6176 8 -> 1E-6176 + +dqcps135 copysign -1E-6176 8 -> 1E-6176 +dqcps136 copysign -1.000000000000000000000000000000000E-6143 8 -> 1.000000000000000000000000000000000E-6143 +dqcps137 copysign -1E-6143 8 -> 1E-6143 +dqcps138 copysign -9.999999999999999999999999999999999E+6144 8 -> 9.999999999999999999999999999999999E+6144 + +-- repeat with negative RHS + +-- Infinities +dqcps211 copysign Infinity -34 -> -Infinity +dqcps212 copysign -Infinity -34 -> -Infinity + +-- NaNs, 0 payload +dqcps221 copysign NaN -34 -> -NaN +dqcps222 copysign -NaN -34 -> -NaN +dqcps223 copysign sNaN -34 -> -sNaN +dqcps224 copysign -sNaN -34 -> -sNaN + +-- NaNs, non-0 payload +dqcps231 copysign NaN10 -34 -> -NaN10 +dqcps232 copysign -NaN10 -34 -> -NaN10 +dqcps233 copysign sNaN10 -34 -> -sNaN10 +dqcps234 copysign -sNaN10 -34 -> -sNaN10 +dqcps235 copysign NaN7 -34 -> -NaN7 +dqcps236 copysign -NaN7 -34 -> -NaN7 +dqcps237 copysign sNaN101 -34 -> -sNaN101 +dqcps238 copysign -sNaN101 -34 -> -sNaN101 + +-- finites +dqcps301 copysign 7 -34 -> -7 +dqcps302 copysign -7 -34 -> -7 +dqcps303 copysign 75 -34 -> -75 +dqcps304 copysign -75 -34 -> -75 +dqcps305 copysign 7.50 -34 -> -7.50 +dqcps306 copysign -7.50 -34 -> -7.50 +dqcps307 copysign 7.500 -34 -> -7.500 +dqcps308 copysign -7.500 -34 -> -7.500 + +-- zeros +dqcps311 copysign 0 -34 -> -0 +dqcps312 copysign -0 -34 -> -0 +dqcps313 copysign 0E+4 -34 -> -0E+4 +dqcps314 copysign -0E+4 -34 -> -0E+4 +dqcps315 copysign 0.0000 -34 -> -0.0000 +dqcps316 copysign -0.0000 -34 -> -0.0000 +dqcps317 copysign 0E-141 -34 -> -0E-141 +dqcps318 copysign -0E-141 -34 -> -0E-141 + +-- full coefficients, alternating bits +dqcps321 copysign 2682682682682682682682682682682682 -9 -> -2682682682682682682682682682682682 +dqcps322 copysign -2682682682682682682682682682682682 -9 -> -2682682682682682682682682682682682 +dqcps323 copysign 1341341341341341341341341341341341 -9 -> -1341341341341341341341341341341341 +dqcps324 copysign -1341341341341341341341341341341341 -9 -> -1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqcps331 copysign 9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 +dqcps332 copysign 1E-6143 -1 -> -1E-6143 +dqcps333 copysign 1.000000000000000000000000000000000E-6143 -1 -> -1.000000000000000000000000000000000E-6143 +dqcps334 copysign 1E-6176 -1 -> -1E-6176 + +dqcps335 copysign -1E-6176 -3 -> -1E-6176 +dqcps336 copysign -1.000000000000000000000000000000000E-6143 -3 -> -1.000000000000000000000000000000000E-6143 +dqcps337 copysign -1E-6143 -3 -> -1E-6143 +dqcps338 copysign -9.999999999999999999999999999999999E+6144 -3 -> -9.999999999999999999999999999999999E+6144 + +-- Other kinds of RHS +dqcps401 copysign 701 -34 -> -701 +dqcps402 copysign -720 -34 -> -720 +dqcps403 copysign 701 -0 -> -701 +dqcps404 copysign -720 -0 -> -720 +dqcps405 copysign 701 +0 -> 701 +dqcps406 copysign -720 +0 -> 720 +dqcps407 copysign 701 +34 -> 701 +dqcps408 copysign -720 +34 -> 720 + +dqcps413 copysign 701 -Inf -> -701 +dqcps414 copysign -720 -Inf -> -720 +dqcps415 copysign 701 +Inf -> 701 +dqcps416 copysign -720 +Inf -> 720 + +dqcps420 copysign 701 -NaN -> -701 +dqcps421 copysign -720 -NaN -> -720 +dqcps422 copysign 701 +NaN -> 701 +dqcps423 copysign -720 +NaN -> 720 +dqcps425 copysign -720 +NaN8 -> 720 + +dqcps426 copysign 701 -sNaN -> -701 +dqcps427 copysign -720 -sNaN -> -720 +dqcps428 copysign 701 +sNaN -> 701 +dqcps429 copysign -720 +sNaN -> 720 +dqcps430 copysign -720 +sNaN3 -> 720 + diff --git a/Lib/test/decimaltestdata/dqDivide.decTest b/Lib/test/decimaltestdata/dqDivide.decTest index 1e9b29b82ed..1d623ff4123 100644 --- a/Lib/test/decimaltestdata/dqDivide.decTest +++ b/Lib/test/decimaltestdata/dqDivide.decTest @@ -1,808 +1,808 @@ ------------------------------------------------------------------------- --- dqDivide.decTest -- decQuad division -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqdiv001 divide 1 1 -> 1 -dqdiv002 divide 2 1 -> 2 -dqdiv003 divide 1 2 -> 0.5 -dqdiv004 divide 2 2 -> 1 -dqdiv005 divide 0 1 -> 0 -dqdiv006 divide 0 2 -> 0 -dqdiv007 divide 1 3 -> 0.3333333333333333333333333333333333 Inexact Rounded -dqdiv008 divide 2 3 -> 0.6666666666666666666666666666666667 Inexact Rounded -dqdiv009 divide 3 3 -> 1 - -dqdiv010 divide 2.4 1 -> 2.4 -dqdiv011 divide 2.4 -1 -> -2.4 -dqdiv012 divide -2.4 1 -> -2.4 -dqdiv013 divide -2.4 -1 -> 2.4 -dqdiv014 divide 2.40 1 -> 2.40 -dqdiv015 divide 2.400 1 -> 2.400 -dqdiv016 divide 2.4 2 -> 1.2 -dqdiv017 divide 2.400 2 -> 1.200 -dqdiv018 divide 2. 2 -> 1 -dqdiv019 divide 20 20 -> 1 - -dqdiv020 divide 187 187 -> 1 -dqdiv021 divide 5 2 -> 2.5 -dqdiv022 divide 50 20 -> 2.5 -dqdiv023 divide 500 200 -> 2.5 -dqdiv024 divide 50.0 20.0 -> 2.5 -dqdiv025 divide 5.00 2.00 -> 2.5 -dqdiv026 divide 5 2.0 -> 2.5 -dqdiv027 divide 5 2.000 -> 2.5 -dqdiv028 divide 5 0.20 -> 25 -dqdiv029 divide 5 0.200 -> 25 -dqdiv030 divide 10 1 -> 10 -dqdiv031 divide 100 1 -> 100 -dqdiv032 divide 1000 1 -> 1000 -dqdiv033 divide 1000 100 -> 10 - -dqdiv035 divide 1 2 -> 0.5 -dqdiv036 divide 1 4 -> 0.25 -dqdiv037 divide 1 8 -> 0.125 -dqdiv038 divide 1 16 -> 0.0625 -dqdiv039 divide 1 32 -> 0.03125 -dqdiv040 divide 1 64 -> 0.015625 -dqdiv041 divide 1 -2 -> -0.5 -dqdiv042 divide 1 -4 -> -0.25 -dqdiv043 divide 1 -8 -> -0.125 -dqdiv044 divide 1 -16 -> -0.0625 -dqdiv045 divide 1 -32 -> -0.03125 -dqdiv046 divide 1 -64 -> -0.015625 -dqdiv047 divide -1 2 -> -0.5 -dqdiv048 divide -1 4 -> -0.25 -dqdiv049 divide -1 8 -> -0.125 -dqdiv050 divide -1 16 -> -0.0625 -dqdiv051 divide -1 32 -> -0.03125 -dqdiv052 divide -1 64 -> -0.015625 -dqdiv053 divide -1 -2 -> 0.5 -dqdiv054 divide -1 -4 -> 0.25 -dqdiv055 divide -1 -8 -> 0.125 -dqdiv056 divide -1 -16 -> 0.0625 -dqdiv057 divide -1 -32 -> 0.03125 -dqdiv058 divide -1 -64 -> 0.015625 - --- bcdTime -dqdiv060 divide 1 7 -> 0.1428571428571428571428571428571429 Inexact Rounded -dqdiv061 divide 1.2345678 1.9876543 -> 0.6211179680490717123193907511985359 Inexact Rounded - --- 1234567890123456 -dqdiv067 divide 9999999999999999999999999999999999 1 -> 9999999999999999999999999999999999 -dqdiv068 divide 999999999999999999999999999999999 1 -> 999999999999999999999999999999999 -dqdiv069 divide 99999999999999999999999999999999 1 -> 99999999999999999999999999999999 -dqdiv070 divide 99999999999999999 1 -> 99999999999999999 -dqdiv071 divide 9999999999999999 1 -> 9999999999999999 -dqdiv072 divide 999999999999999 1 -> 999999999999999 -dqdiv073 divide 99999999999999 1 -> 99999999999999 -dqdiv074 divide 9999999999999 1 -> 9999999999999 -dqdiv075 divide 999999999999 1 -> 999999999999 -dqdiv076 divide 99999999999 1 -> 99999999999 -dqdiv077 divide 9999999999 1 -> 9999999999 -dqdiv078 divide 999999999 1 -> 999999999 -dqdiv079 divide 99999999 1 -> 99999999 -dqdiv080 divide 9999999 1 -> 9999999 -dqdiv081 divide 999999 1 -> 999999 -dqdiv082 divide 99999 1 -> 99999 -dqdiv083 divide 9999 1 -> 9999 -dqdiv084 divide 999 1 -> 999 -dqdiv085 divide 99 1 -> 99 -dqdiv086 divide 9 1 -> 9 - -dqdiv090 divide 0. 1 -> 0 -dqdiv091 divide .0 1 -> 0.0 -dqdiv092 divide 0.00 1 -> 0.00 -dqdiv093 divide 0.00E+9 1 -> 0E+7 -dqdiv094 divide 0.0000E-50 1 -> 0E-54 - -dqdiv095 divide 1 1E-8 -> 1E+8 -dqdiv096 divide 1 1E-9 -> 1E+9 -dqdiv097 divide 1 1E-10 -> 1E+10 -dqdiv098 divide 1 1E-11 -> 1E+11 -dqdiv099 divide 1 1E-12 -> 1E+12 - -dqdiv100 divide 1 1 -> 1 -dqdiv101 divide 1 2 -> 0.5 -dqdiv102 divide 1 3 -> 0.3333333333333333333333333333333333 Inexact Rounded -dqdiv103 divide 1 4 -> 0.25 -dqdiv104 divide 1 5 -> 0.2 -dqdiv105 divide 1 6 -> 0.1666666666666666666666666666666667 Inexact Rounded -dqdiv106 divide 1 7 -> 0.1428571428571428571428571428571429 Inexact Rounded -dqdiv107 divide 1 8 -> 0.125 -dqdiv108 divide 1 9 -> 0.1111111111111111111111111111111111 Inexact Rounded -dqdiv109 divide 1 10 -> 0.1 -dqdiv110 divide 1 1 -> 1 -dqdiv111 divide 2 1 -> 2 -dqdiv112 divide 3 1 -> 3 -dqdiv113 divide 4 1 -> 4 -dqdiv114 divide 5 1 -> 5 -dqdiv115 divide 6 1 -> 6 -dqdiv116 divide 7 1 -> 7 -dqdiv117 divide 8 1 -> 8 -dqdiv118 divide 9 1 -> 9 -dqdiv119 divide 10 1 -> 10 - -dqdiv120 divide 3E+1 0.001 -> 3E+4 -dqdiv121 divide 2.200 2 -> 1.100 - -dqdiv130 divide 12345 4.999 -> 2469.493898779755951190238047609522 Inexact Rounded -dqdiv131 divide 12345 4.99 -> 2473.947895791583166332665330661323 Inexact Rounded -dqdiv132 divide 12345 4.9 -> 2519.387755102040816326530612244898 Inexact Rounded -dqdiv133 divide 12345 5 -> 2469 -dqdiv134 divide 12345 5.1 -> 2420.588235294117647058823529411765 Inexact Rounded -dqdiv135 divide 12345 5.01 -> 2464.071856287425149700598802395210 Inexact Rounded -dqdiv136 divide 12345 5.001 -> 2468.506298740251949610077984403119 Inexact Rounded - --- test possibly imprecise results -dqdiv220 divide 391 597 -> 0.6549413735343383584589614740368509 Inexact Rounded -dqdiv221 divide 391 -597 -> -0.6549413735343383584589614740368509 Inexact Rounded -dqdiv222 divide -391 597 -> -0.6549413735343383584589614740368509 Inexact Rounded -dqdiv223 divide -391 -597 -> 0.6549413735343383584589614740368509 Inexact Rounded - --- test some cases that are close to exponent overflow -dqdiv270 divide 1 1e6144 -> 1E-6144 Subnormal -dqdiv271 divide 1 0.9e6144 -> 1.11111111111111111111111111111111E-6144 Rounded Inexact Subnormal Underflow -dqdiv272 divide 1 0.99e6144 -> 1.01010101010101010101010101010101E-6144 Rounded Inexact Subnormal Underflow -dqdiv273 divide 1 0.9999999999999999e6144 -> 1.00000000000000010000000000000001E-6144 Rounded Inexact Subnormal Underflow -dqdiv274 divide 9e6144 1 -> 9.000000000000000000000000000000000E+6144 Clamped -dqdiv275 divide 9.9e6144 1 -> 9.900000000000000000000000000000000E+6144 Clamped -dqdiv276 divide 9.99e6144 1 -> 9.990000000000000000000000000000000E+6144 Clamped -dqdiv277 divide 9.999999999999999e6144 1 -> 9.999999999999999000000000000000000E+6144 Clamped - -dqdiv278 divide 1 0.9999999999999999999999999999999999e6144 -> 1.00000000000000000000000000000000E-6144 Rounded Inexact Subnormal Underflow -dqdiv279 divide 9.999999999999999999999999999999999e6144 1 -> 9.999999999999999999999999999999999E+6144 - --- Divide into 0 tests -dqdiv301 divide 0 7 -> 0 -dqdiv302 divide 0 7E-5 -> 0E+5 -dqdiv303 divide 0 7E-1 -> 0E+1 -dqdiv304 divide 0 7E+1 -> 0.0 -dqdiv305 divide 0 7E+5 -> 0.00000 -dqdiv306 divide 0 7E+6 -> 0.000000 -dqdiv307 divide 0 7E+7 -> 0E-7 -dqdiv308 divide 0 70E-5 -> 0E+5 -dqdiv309 divide 0 70E-1 -> 0E+1 -dqdiv310 divide 0 70E+0 -> 0 -dqdiv311 divide 0 70E+1 -> 0.0 -dqdiv312 divide 0 70E+5 -> 0.00000 -dqdiv313 divide 0 70E+6 -> 0.000000 -dqdiv314 divide 0 70E+7 -> 0E-7 -dqdiv315 divide 0 700E-5 -> 0E+5 -dqdiv316 divide 0 700E-1 -> 0E+1 -dqdiv317 divide 0 700E+0 -> 0 -dqdiv318 divide 0 700E+1 -> 0.0 -dqdiv319 divide 0 700E+5 -> 0.00000 -dqdiv320 divide 0 700E+6 -> 0.000000 -dqdiv321 divide 0 700E+7 -> 0E-7 -dqdiv322 divide 0 700E+77 -> 0E-77 - -dqdiv331 divide 0E-3 7E-5 -> 0E+2 -dqdiv332 divide 0E-3 7E-1 -> 0.00 -dqdiv333 divide 0E-3 7E+1 -> 0.0000 -dqdiv334 divide 0E-3 7E+5 -> 0E-8 -dqdiv335 divide 0E-1 7E-5 -> 0E+4 -dqdiv336 divide 0E-1 7E-1 -> 0 -dqdiv337 divide 0E-1 7E+1 -> 0.00 -dqdiv338 divide 0E-1 7E+5 -> 0.000000 -dqdiv339 divide 0E+1 7E-5 -> 0E+6 -dqdiv340 divide 0E+1 7E-1 -> 0E+2 -dqdiv341 divide 0E+1 7E+1 -> 0 -dqdiv342 divide 0E+1 7E+5 -> 0.0000 -dqdiv343 divide 0E+3 7E-5 -> 0E+8 -dqdiv344 divide 0E+3 7E-1 -> 0E+4 -dqdiv345 divide 0E+3 7E+1 -> 0E+2 -dqdiv346 divide 0E+3 7E+5 -> 0.00 - --- These were 'input rounding' -dqdiv441 divide 12345678000 1 -> 12345678000 -dqdiv442 divide 1 12345678000 -> 8.100000664200054464404466081166219E-11 Inexact Rounded -dqdiv443 divide 1234567800 1 -> 1234567800 -dqdiv444 divide 1 1234567800 -> 8.100000664200054464404466081166219E-10 Inexact Rounded -dqdiv445 divide 1234567890 1 -> 1234567890 -dqdiv446 divide 1 1234567890 -> 8.100000073710000670761006103925156E-10 Inexact Rounded -dqdiv447 divide 1234567891 1 -> 1234567891 -dqdiv448 divide 1 1234567891 -> 8.100000067149000556665214614754629E-10 Inexact Rounded -dqdiv449 divide 12345678901 1 -> 12345678901 -dqdiv450 divide 1 12345678901 -> 8.100000073053900658873130042376760E-11 Inexact Rounded -dqdiv451 divide 1234567896 1 -> 1234567896 -dqdiv452 divide 1 1234567896 -> 8.100000034344000145618560617422697E-10 Inexact Rounded - --- high-lows -dqdiv453 divide 1e+1 1 -> 1E+1 -dqdiv454 divide 1e+1 1.0 -> 1E+1 -dqdiv455 divide 1e+1 1.00 -> 1E+1 -dqdiv456 divide 1e+2 2 -> 5E+1 -dqdiv457 divide 1e+2 2.0 -> 5E+1 -dqdiv458 divide 1e+2 2.00 -> 5E+1 - --- some from IEEE discussions -dqdiv460 divide 3e0 2e0 -> 1.5 -dqdiv461 divide 30e-1 2e0 -> 1.5 -dqdiv462 divide 300e-2 2e0 -> 1.50 -dqdiv464 divide 3000e-3 2e0 -> 1.500 -dqdiv465 divide 3e0 20e-1 -> 1.5 -dqdiv466 divide 30e-1 20e-1 -> 1.5 -dqdiv467 divide 300e-2 20e-1 -> 1.5 -dqdiv468 divide 3000e-3 20e-1 -> 1.50 -dqdiv469 divide 3e0 200e-2 -> 1.5 -dqdiv470 divide 30e-1 200e-2 -> 1.5 -dqdiv471 divide 300e-2 200e-2 -> 1.5 -dqdiv472 divide 3000e-3 200e-2 -> 1.5 -dqdiv473 divide 3e0 2000e-3 -> 1.5 -dqdiv474 divide 30e-1 2000e-3 -> 1.5 -dqdiv475 divide 300e-2 2000e-3 -> 1.5 -dqdiv476 divide 3000e-3 2000e-3 -> 1.5 - --- some reciprocals -dqdiv480 divide 1 1.0E+33 -> 1E-33 -dqdiv481 divide 1 10E+33 -> 1E-34 -dqdiv482 divide 1 1.0E-33 -> 1E+33 -dqdiv483 divide 1 10E-33 -> 1E+32 - --- RMS discussion table -dqdiv484 divide 0e5 1e3 -> 0E+2 -dqdiv485 divide 0e5 2e3 -> 0E+2 -dqdiv486 divide 0e5 10e2 -> 0E+3 -dqdiv487 divide 0e5 20e2 -> 0E+3 -dqdiv488 divide 0e5 100e1 -> 0E+4 -dqdiv489 divide 0e5 200e1 -> 0E+4 - -dqdiv491 divide 1e5 1e3 -> 1E+2 -dqdiv492 divide 1e5 2e3 -> 5E+1 -dqdiv493 divide 1e5 10e2 -> 1E+2 -dqdiv494 divide 1e5 20e2 -> 5E+1 -dqdiv495 divide 1e5 100e1 -> 1E+2 -dqdiv496 divide 1e5 200e1 -> 5E+1 - --- tryzeros cases -rounding: half_up -dqdiv497 divide 0E+6108 1000E-33 -> 0E+6111 Clamped -dqdiv498 divide 0E-6170 1000E+33 -> 0E-6176 Clamped - -rounding: half_up - --- focus on trailing zeros issues -dqdiv500 divide 1 9.9 -> 0.1010101010101010101010101010101010 Inexact Rounded -dqdiv501 divide 1 9.09 -> 0.1100110011001100110011001100110011 Inexact Rounded -dqdiv502 divide 1 9.009 -> 0.1110001110001110001110001110001110 Inexact Rounded - -dqdiv511 divide 1 2 -> 0.5 -dqdiv512 divide 1.0 2 -> 0.5 -dqdiv513 divide 1.00 2 -> 0.50 -dqdiv514 divide 1.000 2 -> 0.500 -dqdiv515 divide 1.0000 2 -> 0.5000 -dqdiv516 divide 1.00000 2 -> 0.50000 -dqdiv517 divide 1.000000 2 -> 0.500000 -dqdiv518 divide 1.0000000 2 -> 0.5000000 -dqdiv519 divide 1.00 2.00 -> 0.5 - -dqdiv521 divide 2 1 -> 2 -dqdiv522 divide 2 1.0 -> 2 -dqdiv523 divide 2 1.00 -> 2 -dqdiv524 divide 2 1.000 -> 2 -dqdiv525 divide 2 1.0000 -> 2 -dqdiv526 divide 2 1.00000 -> 2 -dqdiv527 divide 2 1.000000 -> 2 -dqdiv528 divide 2 1.0000000 -> 2 -dqdiv529 divide 2.00 1.00 -> 2 - -dqdiv530 divide 2.40 2 -> 1.20 -dqdiv531 divide 2.40 4 -> 0.60 -dqdiv532 divide 2.40 10 -> 0.24 -dqdiv533 divide 2.40 2.0 -> 1.2 -dqdiv534 divide 2.40 4.0 -> 0.6 -dqdiv535 divide 2.40 10.0 -> 0.24 -dqdiv536 divide 2.40 2.00 -> 1.2 -dqdiv537 divide 2.40 4.00 -> 0.6 -dqdiv538 divide 2.40 10.00 -> 0.24 -dqdiv539 divide 0.9 0.1 -> 9 -dqdiv540 divide 0.9 0.01 -> 9E+1 -dqdiv541 divide 0.9 0.001 -> 9E+2 -dqdiv542 divide 5 2 -> 2.5 -dqdiv543 divide 5 2.0 -> 2.5 -dqdiv544 divide 5 2.00 -> 2.5 -dqdiv545 divide 5 20 -> 0.25 -dqdiv546 divide 5 20.0 -> 0.25 -dqdiv547 divide 2.400 2 -> 1.200 -dqdiv548 divide 2.400 2.0 -> 1.20 -dqdiv549 divide 2.400 2.400 -> 1 - -dqdiv550 divide 240 1 -> 240 -dqdiv551 divide 240 10 -> 24 -dqdiv552 divide 240 100 -> 2.4 -dqdiv553 divide 240 1000 -> 0.24 -dqdiv554 divide 2400 1 -> 2400 -dqdiv555 divide 2400 10 -> 240 -dqdiv556 divide 2400 100 -> 24 -dqdiv557 divide 2400 1000 -> 2.4 - --- +ve exponent -dqdiv600 divide 2.4E+9 2 -> 1.2E+9 -dqdiv601 divide 2.40E+9 2 -> 1.20E+9 -dqdiv602 divide 2.400E+9 2 -> 1.200E+9 -dqdiv603 divide 2.4000E+9 2 -> 1.2000E+9 -dqdiv604 divide 24E+8 2 -> 1.2E+9 -dqdiv605 divide 240E+7 2 -> 1.20E+9 -dqdiv606 divide 2400E+6 2 -> 1.200E+9 -dqdiv607 divide 24000E+5 2 -> 1.2000E+9 - --- more zeros, etc. -dqdiv731 divide 5.00 1E-3 -> 5.00E+3 -dqdiv732 divide 00.00 0.000 -> NaN Division_undefined -dqdiv733 divide 00.00 0E-3 -> NaN Division_undefined -dqdiv734 divide 0 -0 -> NaN Division_undefined -dqdiv735 divide -0 0 -> NaN Division_undefined -dqdiv736 divide -0 -0 -> NaN Division_undefined - -dqdiv741 divide 0 -1 -> -0 -dqdiv742 divide -0 -1 -> 0 -dqdiv743 divide 0 1 -> 0 -dqdiv744 divide -0 1 -> -0 -dqdiv745 divide -1 0 -> -Infinity Division_by_zero -dqdiv746 divide -1 -0 -> Infinity Division_by_zero -dqdiv747 divide 1 0 -> Infinity Division_by_zero -dqdiv748 divide 1 -0 -> -Infinity Division_by_zero - -dqdiv751 divide 0.0 -1 -> -0.0 -dqdiv752 divide -0.0 -1 -> 0.0 -dqdiv753 divide 0.0 1 -> 0.0 -dqdiv754 divide -0.0 1 -> -0.0 -dqdiv755 divide -1.0 0 -> -Infinity Division_by_zero -dqdiv756 divide -1.0 -0 -> Infinity Division_by_zero -dqdiv757 divide 1.0 0 -> Infinity Division_by_zero -dqdiv758 divide 1.0 -0 -> -Infinity Division_by_zero - -dqdiv761 divide 0 -1.0 -> -0E+1 -dqdiv762 divide -0 -1.0 -> 0E+1 -dqdiv763 divide 0 1.0 -> 0E+1 -dqdiv764 divide -0 1.0 -> -0E+1 -dqdiv765 divide -1 0.0 -> -Infinity Division_by_zero -dqdiv766 divide -1 -0.0 -> Infinity Division_by_zero -dqdiv767 divide 1 0.0 -> Infinity Division_by_zero -dqdiv768 divide 1 -0.0 -> -Infinity Division_by_zero - -dqdiv771 divide 0.0 -1.0 -> -0 -dqdiv772 divide -0.0 -1.0 -> 0 -dqdiv773 divide 0.0 1.0 -> 0 -dqdiv774 divide -0.0 1.0 -> -0 -dqdiv775 divide -1.0 0.0 -> -Infinity Division_by_zero -dqdiv776 divide -1.0 -0.0 -> Infinity Division_by_zero -dqdiv777 divide 1.0 0.0 -> Infinity Division_by_zero -dqdiv778 divide 1.0 -0.0 -> -Infinity Division_by_zero - --- Specials -dqdiv780 divide Inf -Inf -> NaN Invalid_operation -dqdiv781 divide Inf -1000 -> -Infinity -dqdiv782 divide Inf -1 -> -Infinity -dqdiv783 divide Inf -0 -> -Infinity -dqdiv784 divide Inf 0 -> Infinity -dqdiv785 divide Inf 1 -> Infinity -dqdiv786 divide Inf 1000 -> Infinity -dqdiv787 divide Inf Inf -> NaN Invalid_operation -dqdiv788 divide -1000 Inf -> -0E-6176 Clamped -dqdiv789 divide -Inf Inf -> NaN Invalid_operation -dqdiv790 divide -1 Inf -> -0E-6176 Clamped -dqdiv791 divide -0 Inf -> -0E-6176 Clamped -dqdiv792 divide 0 Inf -> 0E-6176 Clamped -dqdiv793 divide 1 Inf -> 0E-6176 Clamped -dqdiv794 divide 1000 Inf -> 0E-6176 Clamped -dqdiv795 divide Inf Inf -> NaN Invalid_operation - -dqdiv800 divide -Inf -Inf -> NaN Invalid_operation -dqdiv801 divide -Inf -1000 -> Infinity -dqdiv802 divide -Inf -1 -> Infinity -dqdiv803 divide -Inf -0 -> Infinity -dqdiv804 divide -Inf 0 -> -Infinity -dqdiv805 divide -Inf 1 -> -Infinity -dqdiv806 divide -Inf 1000 -> -Infinity -dqdiv807 divide -Inf Inf -> NaN Invalid_operation -dqdiv808 divide -1000 Inf -> -0E-6176 Clamped -dqdiv809 divide -Inf -Inf -> NaN Invalid_operation -dqdiv810 divide -1 -Inf -> 0E-6176 Clamped -dqdiv811 divide -0 -Inf -> 0E-6176 Clamped -dqdiv812 divide 0 -Inf -> -0E-6176 Clamped -dqdiv813 divide 1 -Inf -> -0E-6176 Clamped -dqdiv814 divide 1000 -Inf -> -0E-6176 Clamped -dqdiv815 divide Inf -Inf -> NaN Invalid_operation - -dqdiv821 divide NaN -Inf -> NaN -dqdiv822 divide NaN -1000 -> NaN -dqdiv823 divide NaN -1 -> NaN -dqdiv824 divide NaN -0 -> NaN -dqdiv825 divide NaN 0 -> NaN -dqdiv826 divide NaN 1 -> NaN -dqdiv827 divide NaN 1000 -> NaN -dqdiv828 divide NaN Inf -> NaN -dqdiv829 divide NaN NaN -> NaN -dqdiv830 divide -Inf NaN -> NaN -dqdiv831 divide -1000 NaN -> NaN -dqdiv832 divide -1 NaN -> NaN -dqdiv833 divide -0 NaN -> NaN -dqdiv834 divide 0 NaN -> NaN -dqdiv835 divide 1 NaN -> NaN -dqdiv836 divide 1000 NaN -> NaN -dqdiv837 divide Inf NaN -> NaN - -dqdiv841 divide sNaN -Inf -> NaN Invalid_operation -dqdiv842 divide sNaN -1000 -> NaN Invalid_operation -dqdiv843 divide sNaN -1 -> NaN Invalid_operation -dqdiv844 divide sNaN -0 -> NaN Invalid_operation -dqdiv845 divide sNaN 0 -> NaN Invalid_operation -dqdiv846 divide sNaN 1 -> NaN Invalid_operation -dqdiv847 divide sNaN 1000 -> NaN Invalid_operation -dqdiv848 divide sNaN NaN -> NaN Invalid_operation -dqdiv849 divide sNaN sNaN -> NaN Invalid_operation -dqdiv850 divide NaN sNaN -> NaN Invalid_operation -dqdiv851 divide -Inf sNaN -> NaN Invalid_operation -dqdiv852 divide -1000 sNaN -> NaN Invalid_operation -dqdiv853 divide -1 sNaN -> NaN Invalid_operation -dqdiv854 divide -0 sNaN -> NaN Invalid_operation -dqdiv855 divide 0 sNaN -> NaN Invalid_operation -dqdiv856 divide 1 sNaN -> NaN Invalid_operation -dqdiv857 divide 1000 sNaN -> NaN Invalid_operation -dqdiv858 divide Inf sNaN -> NaN Invalid_operation -dqdiv859 divide NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqdiv861 divide NaN9 -Inf -> NaN9 -dqdiv862 divide NaN8 1000 -> NaN8 -dqdiv863 divide NaN7 Inf -> NaN7 -dqdiv864 divide NaN6 NaN5 -> NaN6 -dqdiv865 divide -Inf NaN4 -> NaN4 -dqdiv866 divide -1000 NaN3 -> NaN3 -dqdiv867 divide Inf NaN2 -> NaN2 - -dqdiv871 divide sNaN99 -Inf -> NaN99 Invalid_operation -dqdiv872 divide sNaN98 -1 -> NaN98 Invalid_operation -dqdiv873 divide sNaN97 NaN -> NaN97 Invalid_operation -dqdiv874 divide sNaN96 sNaN94 -> NaN96 Invalid_operation -dqdiv875 divide NaN95 sNaN93 -> NaN93 Invalid_operation -dqdiv876 divide -Inf sNaN92 -> NaN92 Invalid_operation -dqdiv877 divide 0 sNaN91 -> NaN91 Invalid_operation -dqdiv878 divide Inf sNaN90 -> NaN90 Invalid_operation -dqdiv879 divide NaN sNaN89 -> NaN89 Invalid_operation - -dqdiv881 divide -NaN9 -Inf -> -NaN9 -dqdiv882 divide -NaN8 1000 -> -NaN8 -dqdiv883 divide -NaN7 Inf -> -NaN7 -dqdiv884 divide -NaN6 -NaN5 -> -NaN6 -dqdiv885 divide -Inf -NaN4 -> -NaN4 -dqdiv886 divide -1000 -NaN3 -> -NaN3 -dqdiv887 divide Inf -NaN2 -> -NaN2 - -dqdiv891 divide -sNaN99 -Inf -> -NaN99 Invalid_operation -dqdiv892 divide -sNaN98 -1 -> -NaN98 Invalid_operation -dqdiv893 divide -sNaN97 NaN -> -NaN97 Invalid_operation -dqdiv894 divide -sNaN96 -sNaN94 -> -NaN96 Invalid_operation -dqdiv895 divide -NaN95 -sNaN93 -> -NaN93 Invalid_operation -dqdiv896 divide -Inf -sNaN92 -> -NaN92 Invalid_operation -dqdiv897 divide 0 -sNaN91 -> -NaN91 Invalid_operation -dqdiv898 divide Inf -sNaN90 -> -NaN90 Invalid_operation -dqdiv899 divide -NaN -sNaN89 -> -NaN89 Invalid_operation - --- Various flavours of divide by 0 -dqdiv901 divide 0 0 -> NaN Division_undefined -dqdiv902 divide 0.0E5 0 -> NaN Division_undefined -dqdiv903 divide 0.000 0 -> NaN Division_undefined -dqdiv904 divide 0.0001 0 -> Infinity Division_by_zero -dqdiv905 divide 0.01 0 -> Infinity Division_by_zero -dqdiv906 divide 0.1 0 -> Infinity Division_by_zero -dqdiv907 divide 1 0 -> Infinity Division_by_zero -dqdiv908 divide 1 0.0 -> Infinity Division_by_zero -dqdiv909 divide 10 0.0 -> Infinity Division_by_zero -dqdiv910 divide 1E+100 0.0 -> Infinity Division_by_zero -dqdiv911 divide 1E+100 0 -> Infinity Division_by_zero - -dqdiv921 divide -0.0001 0 -> -Infinity Division_by_zero -dqdiv922 divide -0.01 0 -> -Infinity Division_by_zero -dqdiv923 divide -0.1 0 -> -Infinity Division_by_zero -dqdiv924 divide -1 0 -> -Infinity Division_by_zero -dqdiv925 divide -1 0.0 -> -Infinity Division_by_zero -dqdiv926 divide -10 0.0 -> -Infinity Division_by_zero -dqdiv927 divide -1E+100 0.0 -> -Infinity Division_by_zero -dqdiv928 divide -1E+100 0 -> -Infinity Division_by_zero - -dqdiv931 divide 0.0001 -0 -> -Infinity Division_by_zero -dqdiv932 divide 0.01 -0 -> -Infinity Division_by_zero -dqdiv933 divide 0.1 -0 -> -Infinity Division_by_zero -dqdiv934 divide 1 -0 -> -Infinity Division_by_zero -dqdiv935 divide 1 -0.0 -> -Infinity Division_by_zero -dqdiv936 divide 10 -0.0 -> -Infinity Division_by_zero -dqdiv937 divide 1E+100 -0.0 -> -Infinity Division_by_zero -dqdiv938 divide 1E+100 -0 -> -Infinity Division_by_zero - -dqdiv941 divide -0.0001 -0 -> Infinity Division_by_zero -dqdiv942 divide -0.01 -0 -> Infinity Division_by_zero -dqdiv943 divide -0.1 -0 -> Infinity Division_by_zero -dqdiv944 divide -1 -0 -> Infinity Division_by_zero -dqdiv945 divide -1 -0.0 -> Infinity Division_by_zero -dqdiv946 divide -10 -0.0 -> Infinity Division_by_zero -dqdiv947 divide -1E+100 -0.0 -> Infinity Division_by_zero -dqdiv948 divide -1E+100 -0 -> Infinity Division_by_zero - --- Examples from SQL proposal (Krishna Kulkarni) -dqdiv1021 divide 1E0 1E0 -> 1 -dqdiv1022 divide 1E0 2E0 -> 0.5 -dqdiv1023 divide 1E0 3E0 -> 0.3333333333333333333333333333333333 Inexact Rounded -dqdiv1024 divide 100E-2 1000E-3 -> 1 -dqdiv1025 divide 24E-1 2E0 -> 1.2 -dqdiv1026 divide 2400E-3 2E0 -> 1.200 -dqdiv1027 divide 5E0 2E0 -> 2.5 -dqdiv1028 divide 5E0 20E-1 -> 2.5 -dqdiv1029 divide 5E0 2000E-3 -> 2.5 -dqdiv1030 divide 5E0 2E-1 -> 25 -dqdiv1031 divide 5E0 20E-2 -> 25 -dqdiv1032 divide 480E-2 3E0 -> 1.60 -dqdiv1033 divide 47E-1 2E0 -> 2.35 - --- ECMAScript bad examples -rounding: half_down -dqdiv1040 divide 5 9 -> 0.5555555555555555555555555555555556 Inexact Rounded -rounding: half_even -dqdiv1041 divide 6 11 -> 0.5454545454545454545454545454545455 Inexact Rounded - --- Gyuris example -dqdiv1050 divide 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 0.9999999999999999999999999999991254 Inexact Rounded - --- overflow and underflow tests .. note subnormal results --- signs -dqdiv1751 divide 1e+4277 1e-3311 -> Infinity Overflow Inexact Rounded -dqdiv1752 divide 1e+4277 -1e-3311 -> -Infinity Overflow Inexact Rounded -dqdiv1753 divide -1e+4277 1e-3311 -> -Infinity Overflow Inexact Rounded -dqdiv1754 divide -1e+4277 -1e-3311 -> Infinity Overflow Inexact Rounded -dqdiv1755 divide 1e-4277 1e+3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1756 divide 1e-4277 -1e+3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1757 divide -1e-4277 1e+3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1758 divide -1e-4277 -1e+3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dqdiv1760 divide 1e-6069 1e+101 -> 1E-6170 Subnormal -dqdiv1761 divide 1e-6069 1e+102 -> 1E-6171 Subnormal -dqdiv1762 divide 1e-6069 1e+103 -> 1E-6172 Subnormal -dqdiv1763 divide 1e-6069 1e+104 -> 1E-6173 Subnormal -dqdiv1764 divide 1e-6069 1e+105 -> 1E-6174 Subnormal -dqdiv1765 divide 1e-6069 1e+106 -> 1E-6175 Subnormal -dqdiv1766 divide 1e-6069 1e+107 -> 1E-6176 Subnormal -dqdiv1767 divide 1e-6069 1e+108 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1768 divide 1e-6069 1e+109 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1769 divide 1e-6069 1e+110 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -dqdiv1770 divide 1e+40 1e-6101 -> 1.000000000000000000000000000000E+6141 Clamped -dqdiv1771 divide 1e+40 1e-6102 -> 1.0000000000000000000000000000000E+6142 Clamped -dqdiv1772 divide 1e+40 1e-6103 -> 1.00000000000000000000000000000000E+6143 Clamped -dqdiv1773 divide 1e+40 1e-6104 -> 1.000000000000000000000000000000000E+6144 Clamped -dqdiv1774 divide 1e+40 1e-6105 -> Infinity Overflow Inexact Rounded -dqdiv1775 divide 1e+40 1e-6106 -> Infinity Overflow Inexact Rounded -dqdiv1776 divide 1e+40 1e-6107 -> Infinity Overflow Inexact Rounded -dqdiv1777 divide 1e+40 1e-6108 -> Infinity Overflow Inexact Rounded -dqdiv1778 divide 1e+40 1e-6109 -> Infinity Overflow Inexact Rounded -dqdiv1779 divide 1e+40 1e-6110 -> Infinity Overflow Inexact Rounded - -dqdiv1801 divide 1.0000E-6172 1 -> 1.0000E-6172 Subnormal -dqdiv1802 divide 1.000E-6172 1e+1 -> 1.000E-6173 Subnormal -dqdiv1803 divide 1.00E-6172 1e+2 -> 1.00E-6174 Subnormal -dqdiv1804 divide 1.0E-6172 1e+3 -> 1.0E-6175 Subnormal -dqdiv1805 divide 1.0E-6172 1e+4 -> 1E-6176 Subnormal Rounded -dqdiv1806 divide 1.3E-6172 1e+4 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1807 divide 1.5E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1808 divide 1.7E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1809 divide 2.3E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1810 divide 2.5E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1811 divide 2.7E-6172 1e+4 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqdiv1812 divide 1.49E-6172 1e+4 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1813 divide 1.50E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1814 divide 1.51E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1815 divide 2.49E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1816 divide 2.50E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqdiv1817 divide 2.51E-6172 1e+4 -> 3E-6176 Underflow Subnormal Inexact Rounded - -dqdiv1818 divide 1E-6172 1e+4 -> 1E-6176 Subnormal -dqdiv1819 divide 3E-6172 1e+5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1820 divide 5E-6172 1e+5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1821 divide 7E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1822 divide 9E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1823 divide 9.9E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded - -dqdiv1824 divide 1E-6172 -1e+4 -> -1E-6176 Subnormal -dqdiv1825 divide 3E-6172 -1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1826 divide -5E-6172 1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1827 divide 7E-6172 -1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1828 divide -9E-6172 1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1829 divide 9.9E-6172 -1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqdiv1830 divide 3.0E-6172 -1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqdiv1831 divide 1.0E-5977 1e+200 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqdiv1832 divide 1.0E-5977 1e+199 -> 1E-6176 Subnormal Rounded -dqdiv1833 divide 1.0E-5977 1e+198 -> 1.0E-6175 Subnormal -dqdiv1834 divide 2.0E-5977 2e+198 -> 1.0E-6175 Subnormal -dqdiv1835 divide 4.0E-5977 4e+198 -> 1.0E-6175 Subnormal -dqdiv1836 divide 10.0E-5977 10e+198 -> 1.0E-6175 Subnormal -dqdiv1837 divide 30.0E-5977 30e+198 -> 1.0E-6175 Subnormal -dqdiv1838 divide 40.0E-5982 40e+166 -> 1.0E-6148 Subnormal -dqdiv1839 divide 40.0E-5982 40e+165 -> 1.0E-6147 Subnormal -dqdiv1840 divide 40.0E-5982 40e+164 -> 1.0E-6146 Subnormal - --- randoms -rounding: half_even -dqdiv2010 divide -5231195652931651968034356117118850 -7243718664422548573203260970.34995 -> 722169.9095831284624736051460550680 Inexact Rounded -dqdiv2011 divide -89584669773927.82711237350022515352 -42077943728529635884.21142627532985 -> 0.000002129017291146471565928125887527266 Inexact Rounded -dqdiv2012 divide -2.828201693360723203806974891946180E-232 812596541221823960386384403089240.9 -> -3.480450075640521320040055759125120E-265 Inexact Rounded -dqdiv2013 divide -6442775372761069267502937539408720 24904085056.69185465145182606089196 -> -258703556388226463687701.4884719589 Inexact Rounded -dqdiv2014 divide 5.535520011272625629610079879714705 -44343664650.57203052003068113531208 -> -1.248322630728089308975940533493562E-10 Inexact Rounded -dqdiv2015 divide 65919273712517865964325.99419625010 -314733354141381737378622515.7789054 -> -0.0002094448295521490616379784758911632 Inexact Rounded -dqdiv2016 divide -7.779172568193197107115275140431129E+759 -140453015639.3988987652895178782143 -> 5.538629792161641534962774244238115E+748 Inexact Rounded -dqdiv2017 divide 644314832597569.0181226067518178797 -115024585257425.1635759521565201075 -> -5.601540150356479257367687450922795 Inexact Rounded -dqdiv2018 divide 6.898640941579611450676592553286870E-47 -11272429881407851485163914999.25943 -> -6.119923578285338689371137648319280E-75 Inexact Rounded -dqdiv2019 divide -3591344544888727133.30819750163254 5329395.423792795661446561090331037 -> -673874662941.1968525589460533725290 Inexact Rounded -dqdiv2020 divide -7.682356781384631313156462724425838E+747 -6.60375855512219057281922141809940E+703 -> 1.163330960279556016678379128875149E+44 Inexact Rounded -dqdiv2021 divide -4511495596596941820863224.274679699 3365395017.263329795449661616090724 -> -1340554548115304.904166888018346299 Inexact Rounded -dqdiv2022 divide 5.211164127840931517263639608151299 164.5566381356276567012533847006453 -> 0.03166790587655228864478260157156510 Inexact Rounded -dqdiv2023 divide -49891.2243893458830384077684620383 -47179.9312961860747554053371171530 -> 1.057467084386767291602189656430268 Inexact Rounded -dqdiv2024 divide 15065477.47214268488077415462413353 4366211.120892953261309529740552596 -> 3.450469309661227984244545513441359 Inexact Rounded -dqdiv2025 divide 1.575670269440761846109602429612644E+370 653199649324740300.006185482643439 -> 2.412233795700359170904588548041481E+352 Inexact Rounded -dqdiv2026 divide -2112422311733448924573432192.620145 -80067206.03590693153848215848613406 -> 26383115089417660175.20102646756574 Inexact Rounded -dqdiv2027 divide -67096536051279809.32218611548721839 -869685412881941081664251990181.1049 -> 7.715035236584805921278566365231168E-14 Inexact Rounded -dqdiv2028 divide -58612908548962047.21866913425488972 -978449597531.3873665583475633831644 -> 59903.86085991703091236507859837023 Inexact Rounded -dqdiv2029 divide -133032412010942.1476864138213319796 -7.882059293498670705446528648201359E-428 -> 1.687787506504433064549515681693715E+441 Inexact Rounded -dqdiv2030 divide 1.83746698338966029492299716360513E+977 -9.897926608979649951672839879128603E+154 -> -1.856416051542212552042390218062458E+822 Inexact Rounded -dqdiv2031 divide -113742475841399236307128962.1507063 8298602.203049834732657567965262989 -> -13706221006665137826.16557393919929 Inexact Rounded -dqdiv2032 divide 196.4787574650754152995941808331862 929.6553388472318094427422117172394 -> 0.2113458066176526651006917922814018 Inexact Rounded -dqdiv2033 divide 71931221465.43867996282803628130350 3838685934206426257090718.402248853 -> 1.873850132527423413607199513324021E-14 Inexact Rounded -dqdiv2034 divide 488.4282502289651653783596246312885 -80.68940956806634280078706577953188 -> -6.053189047280693318844801899473272 Inexact Rounded -dqdiv2035 divide 9.001764344963921754981762913247394E-162 -8.585540973667205753734967645386919E-729 -> -1.048479574271827326396012573232934E+567 Inexact Rounded -dqdiv2036 divide -7.404133959409894743706402857145471E-828 -51.38159929460289711134684843086265 -> 1.441008855516029461032061785219773E-829 Inexact Rounded -dqdiv2037 divide 2.967520235574419794048994436040717E-613 -6252513855.91394894949879262731889 -> -4.746123405656409127572998751885338E-623 Inexact Rounded -dqdiv2038 divide -18826852654824040505.83920366765051 -6336924877942437992590557460147340 -> 2.970976146546494669807886278519194E-15 Inexact Rounded -dqdiv2039 divide -8.101406784809197604949584001735949E+561 4.823300306948942821076681658771635E+361 -> -1.679639721610839204738445747238987E+200 Inexact Rounded -dqdiv2040 divide -6.11981977773094052331062585191723E+295 1.507610253755339328302779005586534E+238 -> -4.059285058911577244044418416044763E+57 Inexact Rounded -dqdiv2041 divide 6.472638850046815880599220534274055E-596 -4.475233712083047516933911786159972 -> -1.446324207062261745520496475778879E-596 Inexact Rounded -dqdiv2042 divide -84438593330.71277839631144509397112 -586684596204401664208947.4054879633 -> 1.439250218550041228759983937772504E-13 Inexact Rounded -dqdiv2043 divide 9.354533233294022616695815656704369E-24 405.500390626135304252144163591746 -> 2.306911028827774549740571229736198E-26 Inexact Rounded -dqdiv2044 divide 985606423350210.7374876650149957881 -36811563697.41925681866694859828794 -> -26774.36990864119445335813354717711 Inexact Rounded -dqdiv2045 divide -8.187280774177715706278002247766311E-123 -38784124393.91212870828430001300068 -> 2.110987653356139147357240727794365E-133 Inexact Rounded -dqdiv2046 divide -4.612203126350070903459245798371657E+912 7.971562182727956290901984736800519E+64 -> -5.785820922708683237098826662769748E+847 Inexact Rounded -dqdiv2047 divide 4.661015909421485298247928967977089E+888 -6.360911253323922338737311563845581E+388 -> -7.327591478321365980156654539638836E+499 Inexact Rounded -dqdiv2048 divide 9156078172903.257500003260710833030 7.189796653262147139071634237964074E-90 -> 1.273482215766000994365201545096026E+102 Inexact Rounded -dqdiv2049 divide -1.710722303327476586373477781276586E-311 -3167561628260156837329323.729380695 -> 5.400754599578613984875752958645655E-336 Inexact Rounded -dqdiv2050 divide -4.647935210881806238321616345413021E-878 209388.5431867744648177308460639582 -> -2.219765771394593733140494297388140E-883 Inexact Rounded -dqdiv2051 divide 5958.694728395760992719084781582700 4.541510156564315632536353171846096E-746 -> 1.312051393253638664947852693005480E+749 Inexact Rounded -dqdiv2052 divide -7.935732544649702175256699886872093E-489 -7.433329073664793138998765647467971E+360 -> 1.067587949626076917672271619664656E-849 Inexact Rounded -dqdiv2053 divide -2746650864601157.863589959939901350 7.016684945507647528907184694359598E+548 -> -3.914456593009309529351254950429932E-534 Inexact Rounded -dqdiv2054 divide 3605149408631197365447953.994569178 -75614025825649082.78264864428237833 -> -47678315.88472693507060063188020532 Inexact Rounded -dqdiv2055 divide 788194320921798404906375214.196349 -6.222718148433247384932573401976337E-418 -> -1.266639918634671803982222244977287E+444 Inexact Rounded -dqdiv2056 divide 5620722730534752.758208943447603211 6.843552841168538319123000917657759E-139 -> 8.213164800485434666629970443739554E+153 Inexact Rounded -dqdiv2057 divide 7304534676713703938102.403949019402 -576169.3685010935108153023803590835 -> -12677756014201995.31969237144394772 Inexact Rounded -dqdiv2058 divide 8067918762.134621639254916786945547 -8.774771480055536009105596163864758E+954 -> -9.194448858836332156766764605125245E-946 Inexact Rounded -dqdiv2059 divide 8.702093454123046507578256899537563E-324 -5.875399733016018404580201176576293E-401 -> -1.481106622452052581470443526957335E+77 Inexact Rounded -dqdiv2060 divide -41426.01662518451861386352415092356 90.00146621684478300510769802013464 -> -460.2815750287318692732067709176200 Inexact Rounded - --- random divide tests with result near 1 -dqdiv4001 divide 2003100352770753969878925664524900 2003100352770753969878925664497824 -> 1.000000000000000000000000000013517 Inexact Rounded -dqdiv4002 divide 4817785793916490652579552318371645 4817785793916490652579552318362097 -> 1.000000000000000000000000000001982 Inexact Rounded -dqdiv4003 divide 8299187410920067325648068439560282 8299187410920067325648068439591159 -> 0.9999999999999999999999999999962795 Inexact Rounded -dqdiv4004 divide 5641088455897407044544461785365899 5641088455897407044544461785389965 -> 0.9999999999999999999999999999957338 Inexact Rounded -dqdiv4005 divide 5752274694706545359326361313490424 5752274694706545359326361313502723 -> 0.9999999999999999999999999999978619 Inexact Rounded -dqdiv4006 divide 6762079477373670594829319346099665 6762079477373670594829319346132579 -> 0.9999999999999999999999999999951326 Inexact Rounded -dqdiv4007 divide 7286425153691890341633023222602916 7286425153691890341633023222606556 -> 0.9999999999999999999999999999995004 Inexact Rounded -dqdiv4008 divide 9481233991901305727648306421946655 9481233991901305727648306421919124 -> 1.000000000000000000000000000002904 Inexact Rounded -dqdiv4009 divide 4282053941893951742029444065614311 4282053941893951742029444065583077 -> 1.000000000000000000000000000007294 Inexact Rounded -dqdiv4010 divide 626888225441250639741781850338695 626888225441250639741781850327299 -> 1.000000000000000000000000000018179 Inexact Rounded -dqdiv4011 divide 3860973649222028009456598604468547 3860973649222028009456598604476849 -> 0.9999999999999999999999999999978498 Inexact Rounded -dqdiv4012 divide 4753157080127468127908060607821839 4753157080127468127908060607788379 -> 1.000000000000000000000000000007040 Inexact Rounded -dqdiv4013 divide 552448546203754062805706277880419 552448546203754062805706277881903 -> 0.9999999999999999999999999999973138 Inexact Rounded -dqdiv4014 divide 8405954527952158455323713728917395 8405954527952158455323713728933866 -> 0.9999999999999999999999999999980406 Inexact Rounded -dqdiv4015 divide 7554096502235321142555802238016116 7554096502235321142555802238026546 -> 0.9999999999999999999999999999986193 Inexact Rounded -dqdiv4016 divide 4053257674127518606871054934746782 4053257674127518606871054934767355 -> 0.9999999999999999999999999999949243 Inexact Rounded -dqdiv4017 divide 7112419420755090454716888844011582 7112419420755090454716888844038105 -> 0.9999999999999999999999999999962709 Inexact Rounded -dqdiv4018 divide 3132302137520072728164549730911846 3132302137520072728164549730908416 -> 1.000000000000000000000000000001095 Inexact Rounded -dqdiv4019 divide 4788374045841416355706715048161013 4788374045841416355706715048190077 -> 0.9999999999999999999999999999939303 Inexact Rounded -dqdiv4020 divide 9466021636047630218238075099510597 9466021636047630218238075099484053 -> 1.000000000000000000000000000002804 Inexact Rounded -dqdiv4021 divide 912742745646765625597399692138650 912742745646765625597399692139042 -> 0.9999999999999999999999999999995705 Inexact Rounded -dqdiv4022 divide 9508402742933643208806264897188504 9508402742933643208806264897195973 -> 0.9999999999999999999999999999992145 Inexact Rounded -dqdiv4023 divide 1186956795727233704962361914360895 1186956795727233704962361914329577 -> 1.000000000000000000000000000026385 Inexact Rounded -dqdiv4024 divide 5972210268839014812696916170967938 5972210268839014812696916170954974 -> 1.000000000000000000000000000002171 Inexact Rounded -dqdiv4025 divide 2303801625521619930894460139793140 2303801625521619930894460139799643 -> 0.9999999999999999999999999999971773 Inexact Rounded -dqdiv4026 divide 6022231560002898264777393473966595 6022231560002898264777393473947198 -> 1.000000000000000000000000000003221 Inexact Rounded -dqdiv4027 divide 8426148335801396199969346032210893 8426148335801396199969346032203179 -> 1.000000000000000000000000000000915 Inexact Rounded -dqdiv4028 divide 8812278947028784637382847098411749 8812278947028784637382847098385317 -> 1.000000000000000000000000000002999 Inexact Rounded -dqdiv4029 divide 8145282002348367383264197170116146 8145282002348367383264197170083988 -> 1.000000000000000000000000000003948 Inexact Rounded -dqdiv4030 divide 6821577571876840153123510107387026 6821577571876840153123510107418008 -> 0.9999999999999999999999999999954582 Inexact Rounded -dqdiv4031 divide 9018555319518966970480565482023720 9018555319518966970480565482013346 -> 1.000000000000000000000000000001150 Inexact Rounded -dqdiv4032 divide 4602155712998228449640717252788864 4602155712998228449640717252818502 -> 0.9999999999999999999999999999935600 Inexact Rounded -dqdiv4033 divide 6675607481522785614506828292264472 6675607481522785614506828292277100 -> 0.9999999999999999999999999999981083 Inexact Rounded -dqdiv4034 divide 4015881516871833897766945836264472 4015881516871833897766945836262645 -> 1.000000000000000000000000000000455 Inexact Rounded -dqdiv4035 divide 1415580205933411837595459716910365 1415580205933411837595459716880139 -> 1.000000000000000000000000000021352 Inexact Rounded -dqdiv4036 divide 9432968297069542816752035276361552 9432968297069542816752035276353054 -> 1.000000000000000000000000000000901 Inexact Rounded -dqdiv4037 divide 4799319591303848500532766682140658 4799319591303848500532766682172655 -> 0.9999999999999999999999999999933330 Inexact Rounded -dqdiv4038 divide 316854270732839529790584284987472 316854270732839529790584285004832 -> 0.9999999999999999999999999999452114 Inexact Rounded -dqdiv4039 divide 3598981300592490427826027975697415 3598981300592490427826027975686712 -> 1.000000000000000000000000000002974 Inexact Rounded -dqdiv4040 divide 1664315435694461371155800682196520 1664315435694461371155800682195617 -> 1.000000000000000000000000000000543 Inexact Rounded -dqdiv4041 divide 1680872316531128890102855316510581 1680872316531128890102855316495545 -> 1.000000000000000000000000000008945 Inexact Rounded -dqdiv4042 divide 9881274879566405475755499281644730 9881274879566405475755499281615743 -> 1.000000000000000000000000000002934 Inexact Rounded -dqdiv4043 divide 4737225957717466960447204232279216 4737225957717466960447204232277452 -> 1.000000000000000000000000000000372 Inexact Rounded -dqdiv4044 divide 2482097379414867061213319346418288 2482097379414867061213319346387936 -> 1.000000000000000000000000000012228 Inexact Rounded -dqdiv4045 divide 7406977595233762723576434122161868 7406977595233762723576434122189042 -> 0.9999999999999999999999999999963313 Inexact Rounded -dqdiv4046 divide 228782057757566047086593281773577 228782057757566047086593281769727 -> 1.000000000000000000000000000016828 Inexact Rounded -dqdiv4047 divide 2956594270240579648823270540367653 2956594270240579648823270540368556 -> 0.9999999999999999999999999999996946 Inexact Rounded -dqdiv4048 divide 6326964098897620620534136767634340 6326964098897620620534136767619339 -> 1.000000000000000000000000000002371 Inexact Rounded -dqdiv4049 divide 414586440456590215247002678327800 414586440456590215247002678316922 -> 1.000000000000000000000000000026238 Inexact Rounded -dqdiv4050 divide 7364552208570039386220505636779125 7364552208570039386220505636803548 -> 0.9999999999999999999999999999966837 Inexact Rounded -dqdiv4051 divide 5626266749902369710022824950590056 5626266749902369710022824950591008 -> 0.9999999999999999999999999999998308 Inexact Rounded -dqdiv4052 divide 4863278293916197454987481343460484 4863278293916197454987481343442522 -> 1.000000000000000000000000000003693 Inexact Rounded -dqdiv4053 divide 1170713582030637359713249796835483 1170713582030637359713249796823345 -> 1.000000000000000000000000000010368 Inexact Rounded -dqdiv4054 divide 9838062494725965667776326556052931 9838062494725965667776326556061002 -> 0.9999999999999999999999999999991796 Inexact Rounded -dqdiv4055 divide 4071388731298861093005687091498922 4071388731298861093005687091498278 -> 1.000000000000000000000000000000158 Inexact Rounded -dqdiv4056 divide 8753155722324706795855038590272526 8753155722324706795855038590276656 -> 0.9999999999999999999999999999995282 Inexact Rounded -dqdiv4057 divide 4399941911533273418844742658240485 4399941911533273418844742658219891 -> 1.000000000000000000000000000004681 Inexact Rounded -dqdiv4058 divide 4127884159949503677776430620050269 4127884159949503677776430620026091 -> 1.000000000000000000000000000005857 Inexact Rounded -dqdiv4059 divide 5536160822360800067042528317438808 5536160822360800067042528317450687 -> 0.9999999999999999999999999999978543 Inexact Rounded -dqdiv4060 divide 3973234998468664936671088237710246 3973234998468664936671088237741886 -> 0.9999999999999999999999999999920367 Inexact Rounded -dqdiv4061 divide 9824855935638263593410444142327358 9824855935638263593410444142328576 -> 0.9999999999999999999999999999998760 Inexact Rounded -dqdiv4062 divide 5917078517340218131867327300814867 5917078517340218131867327300788701 -> 1.000000000000000000000000000004422 Inexact Rounded -dqdiv4063 divide 4354236601830544882286139612521362 4354236601830544882286139612543223 -> 0.9999999999999999999999999999949794 Inexact Rounded -dqdiv4064 divide 8058474772375259017342110013891294 8058474772375259017342110013906792 -> 0.9999999999999999999999999999980768 Inexact Rounded -dqdiv4065 divide 5519604020981748170517093746166328 5519604020981748170517093746181763 -> 0.9999999999999999999999999999972036 Inexact Rounded -dqdiv4066 divide 1502130966879805458831323782443139 1502130966879805458831323782412213 -> 1.000000000000000000000000000020588 Inexact Rounded -dqdiv4067 divide 562795633719481212915159787980270 562795633719481212915159788007066 -> 0.9999999999999999999999999999523877 Inexact Rounded -dqdiv4068 divide 6584743324494664273941281557268878 6584743324494664273941281557258945 -> 1.000000000000000000000000000001508 Inexact Rounded -dqdiv4069 divide 3632000327285743997976431109416500 3632000327285743997976431109408107 -> 1.000000000000000000000000000002311 Inexact Rounded -dqdiv4070 divide 1145827237315430089388953838561450 1145827237315430089388953838527332 -> 1.000000000000000000000000000029776 Inexact Rounded -dqdiv4071 divide 8874431010357691869725372317350380 8874431010357691869725372317316472 -> 1.000000000000000000000000000003821 Inexact Rounded -dqdiv4072 divide 992948718902804648119753141202196 992948718902804648119753141235222 -> 0.9999999999999999999999999999667395 Inexact Rounded -dqdiv4073 divide 2522735183374218505142417265439989 2522735183374218505142417265453779 -> 0.9999999999999999999999999999945337 Inexact Rounded -dqdiv4074 divide 2668419161912936508006872303501052 2668419161912936508006872303471036 -> 1.000000000000000000000000000011249 Inexact Rounded -dqdiv4075 divide 3036169085665186712590941111775092 3036169085665186712590941111808846 -> 0.9999999999999999999999999999888827 Inexact Rounded -dqdiv4076 divide 9441634604917231638508898934006147 9441634604917231638508898934000288 -> 1.000000000000000000000000000000621 Inexact Rounded -dqdiv4077 divide 2677301353164377091111458811839190 2677301353164377091111458811867722 -> 0.9999999999999999999999999999893430 Inexact Rounded -dqdiv4078 divide 6844979203112066166583765857171426 6844979203112066166583765857189682 -> 0.9999999999999999999999999999973329 Inexact Rounded -dqdiv4079 divide 2220337435141796724323783960231661 2220337435141796724323783960208778 -> 1.000000000000000000000000000010306 Inexact Rounded -dqdiv4080 divide 6447424700019783931569996989561380 6447424700019783931569996989572454 -> 0.9999999999999999999999999999982824 Inexact Rounded -dqdiv4081 divide 7512856762696607119847092195587180 7512856762696607119847092195557346 -> 1.000000000000000000000000000003971 Inexact Rounded -dqdiv4082 divide 7395261981193960399087819077237482 7395261981193960399087819077242487 -> 0.9999999999999999999999999999993232 Inexact Rounded -dqdiv4083 divide 2253442467682584035792724884376735 2253442467682584035792724884407178 -> 0.9999999999999999999999999999864904 Inexact Rounded -dqdiv4084 divide 8153138680300213135577336466190997 8153138680300213135577336466220607 -> 0.9999999999999999999999999999963683 Inexact Rounded -dqdiv4085 divide 4668731252254148074041022681801390 4668731252254148074041022681778101 -> 1.000000000000000000000000000004988 Inexact Rounded -dqdiv4086 divide 6078404557993669696040425501815056 6078404557993669696040425501797612 -> 1.000000000000000000000000000002870 Inexact Rounded -dqdiv4087 divide 2306352359874261623223356878316278 2306352359874261623223356878335612 -> 0.9999999999999999999999999999916171 Inexact Rounded -dqdiv4088 divide 3264842186668480362900909564091908 3264842186668480362900909564058658 -> 1.000000000000000000000000000010184 Inexact Rounded -dqdiv4089 divide 6971985047279636878957959608612204 6971985047279636878957959608615088 -> 0.9999999999999999999999999999995863 Inexact Rounded -dqdiv4090 divide 5262810889952721235466445973816257 5262810889952721235466445973783077 -> 1.000000000000000000000000000006305 Inexact Rounded -dqdiv4091 divide 7947944731035267178548357070080288 7947944731035267178548357070061339 -> 1.000000000000000000000000000002384 Inexact Rounded -dqdiv4092 divide 5071808908395375108383035800443229 5071808908395375108383035800412429 -> 1.000000000000000000000000000006073 Inexact Rounded -dqdiv4093 divide 2043146542084503655511507209262969 2043146542084503655511507209249263 -> 1.000000000000000000000000000006708 Inexact Rounded -dqdiv4094 divide 4097632735384534181661959731264802 4097632735384534181661959731234499 -> 1.000000000000000000000000000007395 Inexact Rounded -dqdiv4095 divide 3061477642831387489729464587044430 3061477642831387489729464587059452 -> 0.9999999999999999999999999999950932 Inexact Rounded -dqdiv4096 divide 3429854941039776159498802936252638 3429854941039776159498802936246415 -> 1.000000000000000000000000000001814 Inexact Rounded -dqdiv4097 divide 4874324979578599700024133278284545 4874324979578599700024133278262131 -> 1.000000000000000000000000000004598 Inexact Rounded -dqdiv4098 divide 5701652369691833541455978515820882 5701652369691833541455978515834854 -> 0.9999999999999999999999999999975495 Inexact Rounded -dqdiv4099 divide 2928205728402945266953255632343113 2928205728402945266953255632373794 -> 0.9999999999999999999999999999895223 Inexact Rounded - --- Null tests -dqdiv9998 divide 10 # -> NaN Invalid_operation -dqdiv9999 divide # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqDivide.decTest -- decQuad division -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqdiv001 divide 1 1 -> 1 +dqdiv002 divide 2 1 -> 2 +dqdiv003 divide 1 2 -> 0.5 +dqdiv004 divide 2 2 -> 1 +dqdiv005 divide 0 1 -> 0 +dqdiv006 divide 0 2 -> 0 +dqdiv007 divide 1 3 -> 0.3333333333333333333333333333333333 Inexact Rounded +dqdiv008 divide 2 3 -> 0.6666666666666666666666666666666667 Inexact Rounded +dqdiv009 divide 3 3 -> 1 + +dqdiv010 divide 2.4 1 -> 2.4 +dqdiv011 divide 2.4 -1 -> -2.4 +dqdiv012 divide -2.4 1 -> -2.4 +dqdiv013 divide -2.4 -1 -> 2.4 +dqdiv014 divide 2.40 1 -> 2.40 +dqdiv015 divide 2.400 1 -> 2.400 +dqdiv016 divide 2.4 2 -> 1.2 +dqdiv017 divide 2.400 2 -> 1.200 +dqdiv018 divide 2. 2 -> 1 +dqdiv019 divide 20 20 -> 1 + +dqdiv020 divide 187 187 -> 1 +dqdiv021 divide 5 2 -> 2.5 +dqdiv022 divide 50 20 -> 2.5 +dqdiv023 divide 500 200 -> 2.5 +dqdiv024 divide 50.0 20.0 -> 2.5 +dqdiv025 divide 5.00 2.00 -> 2.5 +dqdiv026 divide 5 2.0 -> 2.5 +dqdiv027 divide 5 2.000 -> 2.5 +dqdiv028 divide 5 0.20 -> 25 +dqdiv029 divide 5 0.200 -> 25 +dqdiv030 divide 10 1 -> 10 +dqdiv031 divide 100 1 -> 100 +dqdiv032 divide 1000 1 -> 1000 +dqdiv033 divide 1000 100 -> 10 + +dqdiv035 divide 1 2 -> 0.5 +dqdiv036 divide 1 4 -> 0.25 +dqdiv037 divide 1 8 -> 0.125 +dqdiv038 divide 1 16 -> 0.0625 +dqdiv039 divide 1 32 -> 0.03125 +dqdiv040 divide 1 64 -> 0.015625 +dqdiv041 divide 1 -2 -> -0.5 +dqdiv042 divide 1 -4 -> -0.25 +dqdiv043 divide 1 -8 -> -0.125 +dqdiv044 divide 1 -16 -> -0.0625 +dqdiv045 divide 1 -32 -> -0.03125 +dqdiv046 divide 1 -64 -> -0.015625 +dqdiv047 divide -1 2 -> -0.5 +dqdiv048 divide -1 4 -> -0.25 +dqdiv049 divide -1 8 -> -0.125 +dqdiv050 divide -1 16 -> -0.0625 +dqdiv051 divide -1 32 -> -0.03125 +dqdiv052 divide -1 64 -> -0.015625 +dqdiv053 divide -1 -2 -> 0.5 +dqdiv054 divide -1 -4 -> 0.25 +dqdiv055 divide -1 -8 -> 0.125 +dqdiv056 divide -1 -16 -> 0.0625 +dqdiv057 divide -1 -32 -> 0.03125 +dqdiv058 divide -1 -64 -> 0.015625 + +-- bcdTime +dqdiv060 divide 1 7 -> 0.1428571428571428571428571428571429 Inexact Rounded +dqdiv061 divide 1.2345678 1.9876543 -> 0.6211179680490717123193907511985359 Inexact Rounded + +-- 1234567890123456 +dqdiv067 divide 9999999999999999999999999999999999 1 -> 9999999999999999999999999999999999 +dqdiv068 divide 999999999999999999999999999999999 1 -> 999999999999999999999999999999999 +dqdiv069 divide 99999999999999999999999999999999 1 -> 99999999999999999999999999999999 +dqdiv070 divide 99999999999999999 1 -> 99999999999999999 +dqdiv071 divide 9999999999999999 1 -> 9999999999999999 +dqdiv072 divide 999999999999999 1 -> 999999999999999 +dqdiv073 divide 99999999999999 1 -> 99999999999999 +dqdiv074 divide 9999999999999 1 -> 9999999999999 +dqdiv075 divide 999999999999 1 -> 999999999999 +dqdiv076 divide 99999999999 1 -> 99999999999 +dqdiv077 divide 9999999999 1 -> 9999999999 +dqdiv078 divide 999999999 1 -> 999999999 +dqdiv079 divide 99999999 1 -> 99999999 +dqdiv080 divide 9999999 1 -> 9999999 +dqdiv081 divide 999999 1 -> 999999 +dqdiv082 divide 99999 1 -> 99999 +dqdiv083 divide 9999 1 -> 9999 +dqdiv084 divide 999 1 -> 999 +dqdiv085 divide 99 1 -> 99 +dqdiv086 divide 9 1 -> 9 + +dqdiv090 divide 0. 1 -> 0 +dqdiv091 divide .0 1 -> 0.0 +dqdiv092 divide 0.00 1 -> 0.00 +dqdiv093 divide 0.00E+9 1 -> 0E+7 +dqdiv094 divide 0.0000E-50 1 -> 0E-54 + +dqdiv095 divide 1 1E-8 -> 1E+8 +dqdiv096 divide 1 1E-9 -> 1E+9 +dqdiv097 divide 1 1E-10 -> 1E+10 +dqdiv098 divide 1 1E-11 -> 1E+11 +dqdiv099 divide 1 1E-12 -> 1E+12 + +dqdiv100 divide 1 1 -> 1 +dqdiv101 divide 1 2 -> 0.5 +dqdiv102 divide 1 3 -> 0.3333333333333333333333333333333333 Inexact Rounded +dqdiv103 divide 1 4 -> 0.25 +dqdiv104 divide 1 5 -> 0.2 +dqdiv105 divide 1 6 -> 0.1666666666666666666666666666666667 Inexact Rounded +dqdiv106 divide 1 7 -> 0.1428571428571428571428571428571429 Inexact Rounded +dqdiv107 divide 1 8 -> 0.125 +dqdiv108 divide 1 9 -> 0.1111111111111111111111111111111111 Inexact Rounded +dqdiv109 divide 1 10 -> 0.1 +dqdiv110 divide 1 1 -> 1 +dqdiv111 divide 2 1 -> 2 +dqdiv112 divide 3 1 -> 3 +dqdiv113 divide 4 1 -> 4 +dqdiv114 divide 5 1 -> 5 +dqdiv115 divide 6 1 -> 6 +dqdiv116 divide 7 1 -> 7 +dqdiv117 divide 8 1 -> 8 +dqdiv118 divide 9 1 -> 9 +dqdiv119 divide 10 1 -> 10 + +dqdiv120 divide 3E+1 0.001 -> 3E+4 +dqdiv121 divide 2.200 2 -> 1.100 + +dqdiv130 divide 12345 4.999 -> 2469.493898779755951190238047609522 Inexact Rounded +dqdiv131 divide 12345 4.99 -> 2473.947895791583166332665330661323 Inexact Rounded +dqdiv132 divide 12345 4.9 -> 2519.387755102040816326530612244898 Inexact Rounded +dqdiv133 divide 12345 5 -> 2469 +dqdiv134 divide 12345 5.1 -> 2420.588235294117647058823529411765 Inexact Rounded +dqdiv135 divide 12345 5.01 -> 2464.071856287425149700598802395210 Inexact Rounded +dqdiv136 divide 12345 5.001 -> 2468.506298740251949610077984403119 Inexact Rounded + +-- test possibly imprecise results +dqdiv220 divide 391 597 -> 0.6549413735343383584589614740368509 Inexact Rounded +dqdiv221 divide 391 -597 -> -0.6549413735343383584589614740368509 Inexact Rounded +dqdiv222 divide -391 597 -> -0.6549413735343383584589614740368509 Inexact Rounded +dqdiv223 divide -391 -597 -> 0.6549413735343383584589614740368509 Inexact Rounded + +-- test some cases that are close to exponent overflow +dqdiv270 divide 1 1e6144 -> 1E-6144 Subnormal +dqdiv271 divide 1 0.9e6144 -> 1.11111111111111111111111111111111E-6144 Rounded Inexact Subnormal Underflow +dqdiv272 divide 1 0.99e6144 -> 1.01010101010101010101010101010101E-6144 Rounded Inexact Subnormal Underflow +dqdiv273 divide 1 0.9999999999999999e6144 -> 1.00000000000000010000000000000001E-6144 Rounded Inexact Subnormal Underflow +dqdiv274 divide 9e6144 1 -> 9.000000000000000000000000000000000E+6144 Clamped +dqdiv275 divide 9.9e6144 1 -> 9.900000000000000000000000000000000E+6144 Clamped +dqdiv276 divide 9.99e6144 1 -> 9.990000000000000000000000000000000E+6144 Clamped +dqdiv277 divide 9.999999999999999e6144 1 -> 9.999999999999999000000000000000000E+6144 Clamped + +dqdiv278 divide 1 0.9999999999999999999999999999999999e6144 -> 1.00000000000000000000000000000000E-6144 Rounded Inexact Subnormal Underflow +dqdiv279 divide 9.999999999999999999999999999999999e6144 1 -> 9.999999999999999999999999999999999E+6144 + +-- Divide into 0 tests +dqdiv301 divide 0 7 -> 0 +dqdiv302 divide 0 7E-5 -> 0E+5 +dqdiv303 divide 0 7E-1 -> 0E+1 +dqdiv304 divide 0 7E+1 -> 0.0 +dqdiv305 divide 0 7E+5 -> 0.00000 +dqdiv306 divide 0 7E+6 -> 0.000000 +dqdiv307 divide 0 7E+7 -> 0E-7 +dqdiv308 divide 0 70E-5 -> 0E+5 +dqdiv309 divide 0 70E-1 -> 0E+1 +dqdiv310 divide 0 70E+0 -> 0 +dqdiv311 divide 0 70E+1 -> 0.0 +dqdiv312 divide 0 70E+5 -> 0.00000 +dqdiv313 divide 0 70E+6 -> 0.000000 +dqdiv314 divide 0 70E+7 -> 0E-7 +dqdiv315 divide 0 700E-5 -> 0E+5 +dqdiv316 divide 0 700E-1 -> 0E+1 +dqdiv317 divide 0 700E+0 -> 0 +dqdiv318 divide 0 700E+1 -> 0.0 +dqdiv319 divide 0 700E+5 -> 0.00000 +dqdiv320 divide 0 700E+6 -> 0.000000 +dqdiv321 divide 0 700E+7 -> 0E-7 +dqdiv322 divide 0 700E+77 -> 0E-77 + +dqdiv331 divide 0E-3 7E-5 -> 0E+2 +dqdiv332 divide 0E-3 7E-1 -> 0.00 +dqdiv333 divide 0E-3 7E+1 -> 0.0000 +dqdiv334 divide 0E-3 7E+5 -> 0E-8 +dqdiv335 divide 0E-1 7E-5 -> 0E+4 +dqdiv336 divide 0E-1 7E-1 -> 0 +dqdiv337 divide 0E-1 7E+1 -> 0.00 +dqdiv338 divide 0E-1 7E+5 -> 0.000000 +dqdiv339 divide 0E+1 7E-5 -> 0E+6 +dqdiv340 divide 0E+1 7E-1 -> 0E+2 +dqdiv341 divide 0E+1 7E+1 -> 0 +dqdiv342 divide 0E+1 7E+5 -> 0.0000 +dqdiv343 divide 0E+3 7E-5 -> 0E+8 +dqdiv344 divide 0E+3 7E-1 -> 0E+4 +dqdiv345 divide 0E+3 7E+1 -> 0E+2 +dqdiv346 divide 0E+3 7E+5 -> 0.00 + +-- These were 'input rounding' +dqdiv441 divide 12345678000 1 -> 12345678000 +dqdiv442 divide 1 12345678000 -> 8.100000664200054464404466081166219E-11 Inexact Rounded +dqdiv443 divide 1234567800 1 -> 1234567800 +dqdiv444 divide 1 1234567800 -> 8.100000664200054464404466081166219E-10 Inexact Rounded +dqdiv445 divide 1234567890 1 -> 1234567890 +dqdiv446 divide 1 1234567890 -> 8.100000073710000670761006103925156E-10 Inexact Rounded +dqdiv447 divide 1234567891 1 -> 1234567891 +dqdiv448 divide 1 1234567891 -> 8.100000067149000556665214614754629E-10 Inexact Rounded +dqdiv449 divide 12345678901 1 -> 12345678901 +dqdiv450 divide 1 12345678901 -> 8.100000073053900658873130042376760E-11 Inexact Rounded +dqdiv451 divide 1234567896 1 -> 1234567896 +dqdiv452 divide 1 1234567896 -> 8.100000034344000145618560617422697E-10 Inexact Rounded + +-- high-lows +dqdiv453 divide 1e+1 1 -> 1E+1 +dqdiv454 divide 1e+1 1.0 -> 1E+1 +dqdiv455 divide 1e+1 1.00 -> 1E+1 +dqdiv456 divide 1e+2 2 -> 5E+1 +dqdiv457 divide 1e+2 2.0 -> 5E+1 +dqdiv458 divide 1e+2 2.00 -> 5E+1 + +-- some from IEEE discussions +dqdiv460 divide 3e0 2e0 -> 1.5 +dqdiv461 divide 30e-1 2e0 -> 1.5 +dqdiv462 divide 300e-2 2e0 -> 1.50 +dqdiv464 divide 3000e-3 2e0 -> 1.500 +dqdiv465 divide 3e0 20e-1 -> 1.5 +dqdiv466 divide 30e-1 20e-1 -> 1.5 +dqdiv467 divide 300e-2 20e-1 -> 1.5 +dqdiv468 divide 3000e-3 20e-1 -> 1.50 +dqdiv469 divide 3e0 200e-2 -> 1.5 +dqdiv470 divide 30e-1 200e-2 -> 1.5 +dqdiv471 divide 300e-2 200e-2 -> 1.5 +dqdiv472 divide 3000e-3 200e-2 -> 1.5 +dqdiv473 divide 3e0 2000e-3 -> 1.5 +dqdiv474 divide 30e-1 2000e-3 -> 1.5 +dqdiv475 divide 300e-2 2000e-3 -> 1.5 +dqdiv476 divide 3000e-3 2000e-3 -> 1.5 + +-- some reciprocals +dqdiv480 divide 1 1.0E+33 -> 1E-33 +dqdiv481 divide 1 10E+33 -> 1E-34 +dqdiv482 divide 1 1.0E-33 -> 1E+33 +dqdiv483 divide 1 10E-33 -> 1E+32 + +-- RMS discussion table +dqdiv484 divide 0e5 1e3 -> 0E+2 +dqdiv485 divide 0e5 2e3 -> 0E+2 +dqdiv486 divide 0e5 10e2 -> 0E+3 +dqdiv487 divide 0e5 20e2 -> 0E+3 +dqdiv488 divide 0e5 100e1 -> 0E+4 +dqdiv489 divide 0e5 200e1 -> 0E+4 + +dqdiv491 divide 1e5 1e3 -> 1E+2 +dqdiv492 divide 1e5 2e3 -> 5E+1 +dqdiv493 divide 1e5 10e2 -> 1E+2 +dqdiv494 divide 1e5 20e2 -> 5E+1 +dqdiv495 divide 1e5 100e1 -> 1E+2 +dqdiv496 divide 1e5 200e1 -> 5E+1 + +-- tryzeros cases +rounding: half_up +dqdiv497 divide 0E+6108 1000E-33 -> 0E+6111 Clamped +dqdiv498 divide 0E-6170 1000E+33 -> 0E-6176 Clamped + +rounding: half_up + +-- focus on trailing zeros issues +dqdiv500 divide 1 9.9 -> 0.1010101010101010101010101010101010 Inexact Rounded +dqdiv501 divide 1 9.09 -> 0.1100110011001100110011001100110011 Inexact Rounded +dqdiv502 divide 1 9.009 -> 0.1110001110001110001110001110001110 Inexact Rounded + +dqdiv511 divide 1 2 -> 0.5 +dqdiv512 divide 1.0 2 -> 0.5 +dqdiv513 divide 1.00 2 -> 0.50 +dqdiv514 divide 1.000 2 -> 0.500 +dqdiv515 divide 1.0000 2 -> 0.5000 +dqdiv516 divide 1.00000 2 -> 0.50000 +dqdiv517 divide 1.000000 2 -> 0.500000 +dqdiv518 divide 1.0000000 2 -> 0.5000000 +dqdiv519 divide 1.00 2.00 -> 0.5 + +dqdiv521 divide 2 1 -> 2 +dqdiv522 divide 2 1.0 -> 2 +dqdiv523 divide 2 1.00 -> 2 +dqdiv524 divide 2 1.000 -> 2 +dqdiv525 divide 2 1.0000 -> 2 +dqdiv526 divide 2 1.00000 -> 2 +dqdiv527 divide 2 1.000000 -> 2 +dqdiv528 divide 2 1.0000000 -> 2 +dqdiv529 divide 2.00 1.00 -> 2 + +dqdiv530 divide 2.40 2 -> 1.20 +dqdiv531 divide 2.40 4 -> 0.60 +dqdiv532 divide 2.40 10 -> 0.24 +dqdiv533 divide 2.40 2.0 -> 1.2 +dqdiv534 divide 2.40 4.0 -> 0.6 +dqdiv535 divide 2.40 10.0 -> 0.24 +dqdiv536 divide 2.40 2.00 -> 1.2 +dqdiv537 divide 2.40 4.00 -> 0.6 +dqdiv538 divide 2.40 10.00 -> 0.24 +dqdiv539 divide 0.9 0.1 -> 9 +dqdiv540 divide 0.9 0.01 -> 9E+1 +dqdiv541 divide 0.9 0.001 -> 9E+2 +dqdiv542 divide 5 2 -> 2.5 +dqdiv543 divide 5 2.0 -> 2.5 +dqdiv544 divide 5 2.00 -> 2.5 +dqdiv545 divide 5 20 -> 0.25 +dqdiv546 divide 5 20.0 -> 0.25 +dqdiv547 divide 2.400 2 -> 1.200 +dqdiv548 divide 2.400 2.0 -> 1.20 +dqdiv549 divide 2.400 2.400 -> 1 + +dqdiv550 divide 240 1 -> 240 +dqdiv551 divide 240 10 -> 24 +dqdiv552 divide 240 100 -> 2.4 +dqdiv553 divide 240 1000 -> 0.24 +dqdiv554 divide 2400 1 -> 2400 +dqdiv555 divide 2400 10 -> 240 +dqdiv556 divide 2400 100 -> 24 +dqdiv557 divide 2400 1000 -> 2.4 + +-- +ve exponent +dqdiv600 divide 2.4E+9 2 -> 1.2E+9 +dqdiv601 divide 2.40E+9 2 -> 1.20E+9 +dqdiv602 divide 2.400E+9 2 -> 1.200E+9 +dqdiv603 divide 2.4000E+9 2 -> 1.2000E+9 +dqdiv604 divide 24E+8 2 -> 1.2E+9 +dqdiv605 divide 240E+7 2 -> 1.20E+9 +dqdiv606 divide 2400E+6 2 -> 1.200E+9 +dqdiv607 divide 24000E+5 2 -> 1.2000E+9 + +-- more zeros, etc. +dqdiv731 divide 5.00 1E-3 -> 5.00E+3 +dqdiv732 divide 00.00 0.000 -> NaN Division_undefined +dqdiv733 divide 00.00 0E-3 -> NaN Division_undefined +dqdiv734 divide 0 -0 -> NaN Division_undefined +dqdiv735 divide -0 0 -> NaN Division_undefined +dqdiv736 divide -0 -0 -> NaN Division_undefined + +dqdiv741 divide 0 -1 -> -0 +dqdiv742 divide -0 -1 -> 0 +dqdiv743 divide 0 1 -> 0 +dqdiv744 divide -0 1 -> -0 +dqdiv745 divide -1 0 -> -Infinity Division_by_zero +dqdiv746 divide -1 -0 -> Infinity Division_by_zero +dqdiv747 divide 1 0 -> Infinity Division_by_zero +dqdiv748 divide 1 -0 -> -Infinity Division_by_zero + +dqdiv751 divide 0.0 -1 -> -0.0 +dqdiv752 divide -0.0 -1 -> 0.0 +dqdiv753 divide 0.0 1 -> 0.0 +dqdiv754 divide -0.0 1 -> -0.0 +dqdiv755 divide -1.0 0 -> -Infinity Division_by_zero +dqdiv756 divide -1.0 -0 -> Infinity Division_by_zero +dqdiv757 divide 1.0 0 -> Infinity Division_by_zero +dqdiv758 divide 1.0 -0 -> -Infinity Division_by_zero + +dqdiv761 divide 0 -1.0 -> -0E+1 +dqdiv762 divide -0 -1.0 -> 0E+1 +dqdiv763 divide 0 1.0 -> 0E+1 +dqdiv764 divide -0 1.0 -> -0E+1 +dqdiv765 divide -1 0.0 -> -Infinity Division_by_zero +dqdiv766 divide -1 -0.0 -> Infinity Division_by_zero +dqdiv767 divide 1 0.0 -> Infinity Division_by_zero +dqdiv768 divide 1 -0.0 -> -Infinity Division_by_zero + +dqdiv771 divide 0.0 -1.0 -> -0 +dqdiv772 divide -0.0 -1.0 -> 0 +dqdiv773 divide 0.0 1.0 -> 0 +dqdiv774 divide -0.0 1.0 -> -0 +dqdiv775 divide -1.0 0.0 -> -Infinity Division_by_zero +dqdiv776 divide -1.0 -0.0 -> Infinity Division_by_zero +dqdiv777 divide 1.0 0.0 -> Infinity Division_by_zero +dqdiv778 divide 1.0 -0.0 -> -Infinity Division_by_zero + +-- Specials +dqdiv780 divide Inf -Inf -> NaN Invalid_operation +dqdiv781 divide Inf -1000 -> -Infinity +dqdiv782 divide Inf -1 -> -Infinity +dqdiv783 divide Inf -0 -> -Infinity +dqdiv784 divide Inf 0 -> Infinity +dqdiv785 divide Inf 1 -> Infinity +dqdiv786 divide Inf 1000 -> Infinity +dqdiv787 divide Inf Inf -> NaN Invalid_operation +dqdiv788 divide -1000 Inf -> -0E-6176 Clamped +dqdiv789 divide -Inf Inf -> NaN Invalid_operation +dqdiv790 divide -1 Inf -> -0E-6176 Clamped +dqdiv791 divide -0 Inf -> -0E-6176 Clamped +dqdiv792 divide 0 Inf -> 0E-6176 Clamped +dqdiv793 divide 1 Inf -> 0E-6176 Clamped +dqdiv794 divide 1000 Inf -> 0E-6176 Clamped +dqdiv795 divide Inf Inf -> NaN Invalid_operation + +dqdiv800 divide -Inf -Inf -> NaN Invalid_operation +dqdiv801 divide -Inf -1000 -> Infinity +dqdiv802 divide -Inf -1 -> Infinity +dqdiv803 divide -Inf -0 -> Infinity +dqdiv804 divide -Inf 0 -> -Infinity +dqdiv805 divide -Inf 1 -> -Infinity +dqdiv806 divide -Inf 1000 -> -Infinity +dqdiv807 divide -Inf Inf -> NaN Invalid_operation +dqdiv808 divide -1000 Inf -> -0E-6176 Clamped +dqdiv809 divide -Inf -Inf -> NaN Invalid_operation +dqdiv810 divide -1 -Inf -> 0E-6176 Clamped +dqdiv811 divide -0 -Inf -> 0E-6176 Clamped +dqdiv812 divide 0 -Inf -> -0E-6176 Clamped +dqdiv813 divide 1 -Inf -> -0E-6176 Clamped +dqdiv814 divide 1000 -Inf -> -0E-6176 Clamped +dqdiv815 divide Inf -Inf -> NaN Invalid_operation + +dqdiv821 divide NaN -Inf -> NaN +dqdiv822 divide NaN -1000 -> NaN +dqdiv823 divide NaN -1 -> NaN +dqdiv824 divide NaN -0 -> NaN +dqdiv825 divide NaN 0 -> NaN +dqdiv826 divide NaN 1 -> NaN +dqdiv827 divide NaN 1000 -> NaN +dqdiv828 divide NaN Inf -> NaN +dqdiv829 divide NaN NaN -> NaN +dqdiv830 divide -Inf NaN -> NaN +dqdiv831 divide -1000 NaN -> NaN +dqdiv832 divide -1 NaN -> NaN +dqdiv833 divide -0 NaN -> NaN +dqdiv834 divide 0 NaN -> NaN +dqdiv835 divide 1 NaN -> NaN +dqdiv836 divide 1000 NaN -> NaN +dqdiv837 divide Inf NaN -> NaN + +dqdiv841 divide sNaN -Inf -> NaN Invalid_operation +dqdiv842 divide sNaN -1000 -> NaN Invalid_operation +dqdiv843 divide sNaN -1 -> NaN Invalid_operation +dqdiv844 divide sNaN -0 -> NaN Invalid_operation +dqdiv845 divide sNaN 0 -> NaN Invalid_operation +dqdiv846 divide sNaN 1 -> NaN Invalid_operation +dqdiv847 divide sNaN 1000 -> NaN Invalid_operation +dqdiv848 divide sNaN NaN -> NaN Invalid_operation +dqdiv849 divide sNaN sNaN -> NaN Invalid_operation +dqdiv850 divide NaN sNaN -> NaN Invalid_operation +dqdiv851 divide -Inf sNaN -> NaN Invalid_operation +dqdiv852 divide -1000 sNaN -> NaN Invalid_operation +dqdiv853 divide -1 sNaN -> NaN Invalid_operation +dqdiv854 divide -0 sNaN -> NaN Invalid_operation +dqdiv855 divide 0 sNaN -> NaN Invalid_operation +dqdiv856 divide 1 sNaN -> NaN Invalid_operation +dqdiv857 divide 1000 sNaN -> NaN Invalid_operation +dqdiv858 divide Inf sNaN -> NaN Invalid_operation +dqdiv859 divide NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqdiv861 divide NaN9 -Inf -> NaN9 +dqdiv862 divide NaN8 1000 -> NaN8 +dqdiv863 divide NaN7 Inf -> NaN7 +dqdiv864 divide NaN6 NaN5 -> NaN6 +dqdiv865 divide -Inf NaN4 -> NaN4 +dqdiv866 divide -1000 NaN3 -> NaN3 +dqdiv867 divide Inf NaN2 -> NaN2 + +dqdiv871 divide sNaN99 -Inf -> NaN99 Invalid_operation +dqdiv872 divide sNaN98 -1 -> NaN98 Invalid_operation +dqdiv873 divide sNaN97 NaN -> NaN97 Invalid_operation +dqdiv874 divide sNaN96 sNaN94 -> NaN96 Invalid_operation +dqdiv875 divide NaN95 sNaN93 -> NaN93 Invalid_operation +dqdiv876 divide -Inf sNaN92 -> NaN92 Invalid_operation +dqdiv877 divide 0 sNaN91 -> NaN91 Invalid_operation +dqdiv878 divide Inf sNaN90 -> NaN90 Invalid_operation +dqdiv879 divide NaN sNaN89 -> NaN89 Invalid_operation + +dqdiv881 divide -NaN9 -Inf -> -NaN9 +dqdiv882 divide -NaN8 1000 -> -NaN8 +dqdiv883 divide -NaN7 Inf -> -NaN7 +dqdiv884 divide -NaN6 -NaN5 -> -NaN6 +dqdiv885 divide -Inf -NaN4 -> -NaN4 +dqdiv886 divide -1000 -NaN3 -> -NaN3 +dqdiv887 divide Inf -NaN2 -> -NaN2 + +dqdiv891 divide -sNaN99 -Inf -> -NaN99 Invalid_operation +dqdiv892 divide -sNaN98 -1 -> -NaN98 Invalid_operation +dqdiv893 divide -sNaN97 NaN -> -NaN97 Invalid_operation +dqdiv894 divide -sNaN96 -sNaN94 -> -NaN96 Invalid_operation +dqdiv895 divide -NaN95 -sNaN93 -> -NaN93 Invalid_operation +dqdiv896 divide -Inf -sNaN92 -> -NaN92 Invalid_operation +dqdiv897 divide 0 -sNaN91 -> -NaN91 Invalid_operation +dqdiv898 divide Inf -sNaN90 -> -NaN90 Invalid_operation +dqdiv899 divide -NaN -sNaN89 -> -NaN89 Invalid_operation + +-- Various flavours of divide by 0 +dqdiv901 divide 0 0 -> NaN Division_undefined +dqdiv902 divide 0.0E5 0 -> NaN Division_undefined +dqdiv903 divide 0.000 0 -> NaN Division_undefined +dqdiv904 divide 0.0001 0 -> Infinity Division_by_zero +dqdiv905 divide 0.01 0 -> Infinity Division_by_zero +dqdiv906 divide 0.1 0 -> Infinity Division_by_zero +dqdiv907 divide 1 0 -> Infinity Division_by_zero +dqdiv908 divide 1 0.0 -> Infinity Division_by_zero +dqdiv909 divide 10 0.0 -> Infinity Division_by_zero +dqdiv910 divide 1E+100 0.0 -> Infinity Division_by_zero +dqdiv911 divide 1E+100 0 -> Infinity Division_by_zero + +dqdiv921 divide -0.0001 0 -> -Infinity Division_by_zero +dqdiv922 divide -0.01 0 -> -Infinity Division_by_zero +dqdiv923 divide -0.1 0 -> -Infinity Division_by_zero +dqdiv924 divide -1 0 -> -Infinity Division_by_zero +dqdiv925 divide -1 0.0 -> -Infinity Division_by_zero +dqdiv926 divide -10 0.0 -> -Infinity Division_by_zero +dqdiv927 divide -1E+100 0.0 -> -Infinity Division_by_zero +dqdiv928 divide -1E+100 0 -> -Infinity Division_by_zero + +dqdiv931 divide 0.0001 -0 -> -Infinity Division_by_zero +dqdiv932 divide 0.01 -0 -> -Infinity Division_by_zero +dqdiv933 divide 0.1 -0 -> -Infinity Division_by_zero +dqdiv934 divide 1 -0 -> -Infinity Division_by_zero +dqdiv935 divide 1 -0.0 -> -Infinity Division_by_zero +dqdiv936 divide 10 -0.0 -> -Infinity Division_by_zero +dqdiv937 divide 1E+100 -0.0 -> -Infinity Division_by_zero +dqdiv938 divide 1E+100 -0 -> -Infinity Division_by_zero + +dqdiv941 divide -0.0001 -0 -> Infinity Division_by_zero +dqdiv942 divide -0.01 -0 -> Infinity Division_by_zero +dqdiv943 divide -0.1 -0 -> Infinity Division_by_zero +dqdiv944 divide -1 -0 -> Infinity Division_by_zero +dqdiv945 divide -1 -0.0 -> Infinity Division_by_zero +dqdiv946 divide -10 -0.0 -> Infinity Division_by_zero +dqdiv947 divide -1E+100 -0.0 -> Infinity Division_by_zero +dqdiv948 divide -1E+100 -0 -> Infinity Division_by_zero + +-- Examples from SQL proposal (Krishna Kulkarni) +dqdiv1021 divide 1E0 1E0 -> 1 +dqdiv1022 divide 1E0 2E0 -> 0.5 +dqdiv1023 divide 1E0 3E0 -> 0.3333333333333333333333333333333333 Inexact Rounded +dqdiv1024 divide 100E-2 1000E-3 -> 1 +dqdiv1025 divide 24E-1 2E0 -> 1.2 +dqdiv1026 divide 2400E-3 2E0 -> 1.200 +dqdiv1027 divide 5E0 2E0 -> 2.5 +dqdiv1028 divide 5E0 20E-1 -> 2.5 +dqdiv1029 divide 5E0 2000E-3 -> 2.5 +dqdiv1030 divide 5E0 2E-1 -> 25 +dqdiv1031 divide 5E0 20E-2 -> 25 +dqdiv1032 divide 480E-2 3E0 -> 1.60 +dqdiv1033 divide 47E-1 2E0 -> 2.35 + +-- ECMAScript bad examples +rounding: half_down +dqdiv1040 divide 5 9 -> 0.5555555555555555555555555555555556 Inexact Rounded +rounding: half_even +dqdiv1041 divide 6 11 -> 0.5454545454545454545454545454545455 Inexact Rounded + +-- Gyuris example +dqdiv1050 divide 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 0.9999999999999999999999999999991254 Inexact Rounded + +-- overflow and underflow tests .. note subnormal results +-- signs +dqdiv1751 divide 1e+4277 1e-3311 -> Infinity Overflow Inexact Rounded +dqdiv1752 divide 1e+4277 -1e-3311 -> -Infinity Overflow Inexact Rounded +dqdiv1753 divide -1e+4277 1e-3311 -> -Infinity Overflow Inexact Rounded +dqdiv1754 divide -1e+4277 -1e-3311 -> Infinity Overflow Inexact Rounded +dqdiv1755 divide 1e-4277 1e+3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1756 divide 1e-4277 -1e+3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1757 divide -1e-4277 1e+3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1758 divide -1e-4277 -1e+3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dqdiv1760 divide 1e-6069 1e+101 -> 1E-6170 Subnormal +dqdiv1761 divide 1e-6069 1e+102 -> 1E-6171 Subnormal +dqdiv1762 divide 1e-6069 1e+103 -> 1E-6172 Subnormal +dqdiv1763 divide 1e-6069 1e+104 -> 1E-6173 Subnormal +dqdiv1764 divide 1e-6069 1e+105 -> 1E-6174 Subnormal +dqdiv1765 divide 1e-6069 1e+106 -> 1E-6175 Subnormal +dqdiv1766 divide 1e-6069 1e+107 -> 1E-6176 Subnormal +dqdiv1767 divide 1e-6069 1e+108 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1768 divide 1e-6069 1e+109 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1769 divide 1e-6069 1e+110 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +dqdiv1770 divide 1e+40 1e-6101 -> 1.000000000000000000000000000000E+6141 Clamped +dqdiv1771 divide 1e+40 1e-6102 -> 1.0000000000000000000000000000000E+6142 Clamped +dqdiv1772 divide 1e+40 1e-6103 -> 1.00000000000000000000000000000000E+6143 Clamped +dqdiv1773 divide 1e+40 1e-6104 -> 1.000000000000000000000000000000000E+6144 Clamped +dqdiv1774 divide 1e+40 1e-6105 -> Infinity Overflow Inexact Rounded +dqdiv1775 divide 1e+40 1e-6106 -> Infinity Overflow Inexact Rounded +dqdiv1776 divide 1e+40 1e-6107 -> Infinity Overflow Inexact Rounded +dqdiv1777 divide 1e+40 1e-6108 -> Infinity Overflow Inexact Rounded +dqdiv1778 divide 1e+40 1e-6109 -> Infinity Overflow Inexact Rounded +dqdiv1779 divide 1e+40 1e-6110 -> Infinity Overflow Inexact Rounded + +dqdiv1801 divide 1.0000E-6172 1 -> 1.0000E-6172 Subnormal +dqdiv1802 divide 1.000E-6172 1e+1 -> 1.000E-6173 Subnormal +dqdiv1803 divide 1.00E-6172 1e+2 -> 1.00E-6174 Subnormal +dqdiv1804 divide 1.0E-6172 1e+3 -> 1.0E-6175 Subnormal +dqdiv1805 divide 1.0E-6172 1e+4 -> 1E-6176 Subnormal Rounded +dqdiv1806 divide 1.3E-6172 1e+4 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1807 divide 1.5E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1808 divide 1.7E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1809 divide 2.3E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1810 divide 2.5E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1811 divide 2.7E-6172 1e+4 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqdiv1812 divide 1.49E-6172 1e+4 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1813 divide 1.50E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1814 divide 1.51E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1815 divide 2.49E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1816 divide 2.50E-6172 1e+4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqdiv1817 divide 2.51E-6172 1e+4 -> 3E-6176 Underflow Subnormal Inexact Rounded + +dqdiv1818 divide 1E-6172 1e+4 -> 1E-6176 Subnormal +dqdiv1819 divide 3E-6172 1e+5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1820 divide 5E-6172 1e+5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1821 divide 7E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1822 divide 9E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1823 divide 9.9E-6172 1e+5 -> 1E-6176 Underflow Subnormal Inexact Rounded + +dqdiv1824 divide 1E-6172 -1e+4 -> -1E-6176 Subnormal +dqdiv1825 divide 3E-6172 -1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1826 divide -5E-6172 1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1827 divide 7E-6172 -1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1828 divide -9E-6172 1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1829 divide 9.9E-6172 -1e+5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqdiv1830 divide 3.0E-6172 -1e+5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqdiv1831 divide 1.0E-5977 1e+200 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqdiv1832 divide 1.0E-5977 1e+199 -> 1E-6176 Subnormal Rounded +dqdiv1833 divide 1.0E-5977 1e+198 -> 1.0E-6175 Subnormal +dqdiv1834 divide 2.0E-5977 2e+198 -> 1.0E-6175 Subnormal +dqdiv1835 divide 4.0E-5977 4e+198 -> 1.0E-6175 Subnormal +dqdiv1836 divide 10.0E-5977 10e+198 -> 1.0E-6175 Subnormal +dqdiv1837 divide 30.0E-5977 30e+198 -> 1.0E-6175 Subnormal +dqdiv1838 divide 40.0E-5982 40e+166 -> 1.0E-6148 Subnormal +dqdiv1839 divide 40.0E-5982 40e+165 -> 1.0E-6147 Subnormal +dqdiv1840 divide 40.0E-5982 40e+164 -> 1.0E-6146 Subnormal + +-- randoms +rounding: half_even +dqdiv2010 divide -5231195652931651968034356117118850 -7243718664422548573203260970.34995 -> 722169.9095831284624736051460550680 Inexact Rounded +dqdiv2011 divide -89584669773927.82711237350022515352 -42077943728529635884.21142627532985 -> 0.000002129017291146471565928125887527266 Inexact Rounded +dqdiv2012 divide -2.828201693360723203806974891946180E-232 812596541221823960386384403089240.9 -> -3.480450075640521320040055759125120E-265 Inexact Rounded +dqdiv2013 divide -6442775372761069267502937539408720 24904085056.69185465145182606089196 -> -258703556388226463687701.4884719589 Inexact Rounded +dqdiv2014 divide 5.535520011272625629610079879714705 -44343664650.57203052003068113531208 -> -1.248322630728089308975940533493562E-10 Inexact Rounded +dqdiv2015 divide 65919273712517865964325.99419625010 -314733354141381737378622515.7789054 -> -0.0002094448295521490616379784758911632 Inexact Rounded +dqdiv2016 divide -7.779172568193197107115275140431129E+759 -140453015639.3988987652895178782143 -> 5.538629792161641534962774244238115E+748 Inexact Rounded +dqdiv2017 divide 644314832597569.0181226067518178797 -115024585257425.1635759521565201075 -> -5.601540150356479257367687450922795 Inexact Rounded +dqdiv2018 divide 6.898640941579611450676592553286870E-47 -11272429881407851485163914999.25943 -> -6.119923578285338689371137648319280E-75 Inexact Rounded +dqdiv2019 divide -3591344544888727133.30819750163254 5329395.423792795661446561090331037 -> -673874662941.1968525589460533725290 Inexact Rounded +dqdiv2020 divide -7.682356781384631313156462724425838E+747 -6.60375855512219057281922141809940E+703 -> 1.163330960279556016678379128875149E+44 Inexact Rounded +dqdiv2021 divide -4511495596596941820863224.274679699 3365395017.263329795449661616090724 -> -1340554548115304.904166888018346299 Inexact Rounded +dqdiv2022 divide 5.211164127840931517263639608151299 164.5566381356276567012533847006453 -> 0.03166790587655228864478260157156510 Inexact Rounded +dqdiv2023 divide -49891.2243893458830384077684620383 -47179.9312961860747554053371171530 -> 1.057467084386767291602189656430268 Inexact Rounded +dqdiv2024 divide 15065477.47214268488077415462413353 4366211.120892953261309529740552596 -> 3.450469309661227984244545513441359 Inexact Rounded +dqdiv2025 divide 1.575670269440761846109602429612644E+370 653199649324740300.006185482643439 -> 2.412233795700359170904588548041481E+352 Inexact Rounded +dqdiv2026 divide -2112422311733448924573432192.620145 -80067206.03590693153848215848613406 -> 26383115089417660175.20102646756574 Inexact Rounded +dqdiv2027 divide -67096536051279809.32218611548721839 -869685412881941081664251990181.1049 -> 7.715035236584805921278566365231168E-14 Inexact Rounded +dqdiv2028 divide -58612908548962047.21866913425488972 -978449597531.3873665583475633831644 -> 59903.86085991703091236507859837023 Inexact Rounded +dqdiv2029 divide -133032412010942.1476864138213319796 -7.882059293498670705446528648201359E-428 -> 1.687787506504433064549515681693715E+441 Inexact Rounded +dqdiv2030 divide 1.83746698338966029492299716360513E+977 -9.897926608979649951672839879128603E+154 -> -1.856416051542212552042390218062458E+822 Inexact Rounded +dqdiv2031 divide -113742475841399236307128962.1507063 8298602.203049834732657567965262989 -> -13706221006665137826.16557393919929 Inexact Rounded +dqdiv2032 divide 196.4787574650754152995941808331862 929.6553388472318094427422117172394 -> 0.2113458066176526651006917922814018 Inexact Rounded +dqdiv2033 divide 71931221465.43867996282803628130350 3838685934206426257090718.402248853 -> 1.873850132527423413607199513324021E-14 Inexact Rounded +dqdiv2034 divide 488.4282502289651653783596246312885 -80.68940956806634280078706577953188 -> -6.053189047280693318844801899473272 Inexact Rounded +dqdiv2035 divide 9.001764344963921754981762913247394E-162 -8.585540973667205753734967645386919E-729 -> -1.048479574271827326396012573232934E+567 Inexact Rounded +dqdiv2036 divide -7.404133959409894743706402857145471E-828 -51.38159929460289711134684843086265 -> 1.441008855516029461032061785219773E-829 Inexact Rounded +dqdiv2037 divide 2.967520235574419794048994436040717E-613 -6252513855.91394894949879262731889 -> -4.746123405656409127572998751885338E-623 Inexact Rounded +dqdiv2038 divide -18826852654824040505.83920366765051 -6336924877942437992590557460147340 -> 2.970976146546494669807886278519194E-15 Inexact Rounded +dqdiv2039 divide -8.101406784809197604949584001735949E+561 4.823300306948942821076681658771635E+361 -> -1.679639721610839204738445747238987E+200 Inexact Rounded +dqdiv2040 divide -6.11981977773094052331062585191723E+295 1.507610253755339328302779005586534E+238 -> -4.059285058911577244044418416044763E+57 Inexact Rounded +dqdiv2041 divide 6.472638850046815880599220534274055E-596 -4.475233712083047516933911786159972 -> -1.446324207062261745520496475778879E-596 Inexact Rounded +dqdiv2042 divide -84438593330.71277839631144509397112 -586684596204401664208947.4054879633 -> 1.439250218550041228759983937772504E-13 Inexact Rounded +dqdiv2043 divide 9.354533233294022616695815656704369E-24 405.500390626135304252144163591746 -> 2.306911028827774549740571229736198E-26 Inexact Rounded +dqdiv2044 divide 985606423350210.7374876650149957881 -36811563697.41925681866694859828794 -> -26774.36990864119445335813354717711 Inexact Rounded +dqdiv2045 divide -8.187280774177715706278002247766311E-123 -38784124393.91212870828430001300068 -> 2.110987653356139147357240727794365E-133 Inexact Rounded +dqdiv2046 divide -4.612203126350070903459245798371657E+912 7.971562182727956290901984736800519E+64 -> -5.785820922708683237098826662769748E+847 Inexact Rounded +dqdiv2047 divide 4.661015909421485298247928967977089E+888 -6.360911253323922338737311563845581E+388 -> -7.327591478321365980156654539638836E+499 Inexact Rounded +dqdiv2048 divide 9156078172903.257500003260710833030 7.189796653262147139071634237964074E-90 -> 1.273482215766000994365201545096026E+102 Inexact Rounded +dqdiv2049 divide -1.710722303327476586373477781276586E-311 -3167561628260156837329323.729380695 -> 5.400754599578613984875752958645655E-336 Inexact Rounded +dqdiv2050 divide -4.647935210881806238321616345413021E-878 209388.5431867744648177308460639582 -> -2.219765771394593733140494297388140E-883 Inexact Rounded +dqdiv2051 divide 5958.694728395760992719084781582700 4.541510156564315632536353171846096E-746 -> 1.312051393253638664947852693005480E+749 Inexact Rounded +dqdiv2052 divide -7.935732544649702175256699886872093E-489 -7.433329073664793138998765647467971E+360 -> 1.067587949626076917672271619664656E-849 Inexact Rounded +dqdiv2053 divide -2746650864601157.863589959939901350 7.016684945507647528907184694359598E+548 -> -3.914456593009309529351254950429932E-534 Inexact Rounded +dqdiv2054 divide 3605149408631197365447953.994569178 -75614025825649082.78264864428237833 -> -47678315.88472693507060063188020532 Inexact Rounded +dqdiv2055 divide 788194320921798404906375214.196349 -6.222718148433247384932573401976337E-418 -> -1.266639918634671803982222244977287E+444 Inexact Rounded +dqdiv2056 divide 5620722730534752.758208943447603211 6.843552841168538319123000917657759E-139 -> 8.213164800485434666629970443739554E+153 Inexact Rounded +dqdiv2057 divide 7304534676713703938102.403949019402 -576169.3685010935108153023803590835 -> -12677756014201995.31969237144394772 Inexact Rounded +dqdiv2058 divide 8067918762.134621639254916786945547 -8.774771480055536009105596163864758E+954 -> -9.194448858836332156766764605125245E-946 Inexact Rounded +dqdiv2059 divide 8.702093454123046507578256899537563E-324 -5.875399733016018404580201176576293E-401 -> -1.481106622452052581470443526957335E+77 Inexact Rounded +dqdiv2060 divide -41426.01662518451861386352415092356 90.00146621684478300510769802013464 -> -460.2815750287318692732067709176200 Inexact Rounded + +-- random divide tests with result near 1 +dqdiv4001 divide 2003100352770753969878925664524900 2003100352770753969878925664497824 -> 1.000000000000000000000000000013517 Inexact Rounded +dqdiv4002 divide 4817785793916490652579552318371645 4817785793916490652579552318362097 -> 1.000000000000000000000000000001982 Inexact Rounded +dqdiv4003 divide 8299187410920067325648068439560282 8299187410920067325648068439591159 -> 0.9999999999999999999999999999962795 Inexact Rounded +dqdiv4004 divide 5641088455897407044544461785365899 5641088455897407044544461785389965 -> 0.9999999999999999999999999999957338 Inexact Rounded +dqdiv4005 divide 5752274694706545359326361313490424 5752274694706545359326361313502723 -> 0.9999999999999999999999999999978619 Inexact Rounded +dqdiv4006 divide 6762079477373670594829319346099665 6762079477373670594829319346132579 -> 0.9999999999999999999999999999951326 Inexact Rounded +dqdiv4007 divide 7286425153691890341633023222602916 7286425153691890341633023222606556 -> 0.9999999999999999999999999999995004 Inexact Rounded +dqdiv4008 divide 9481233991901305727648306421946655 9481233991901305727648306421919124 -> 1.000000000000000000000000000002904 Inexact Rounded +dqdiv4009 divide 4282053941893951742029444065614311 4282053941893951742029444065583077 -> 1.000000000000000000000000000007294 Inexact Rounded +dqdiv4010 divide 626888225441250639741781850338695 626888225441250639741781850327299 -> 1.000000000000000000000000000018179 Inexact Rounded +dqdiv4011 divide 3860973649222028009456598604468547 3860973649222028009456598604476849 -> 0.9999999999999999999999999999978498 Inexact Rounded +dqdiv4012 divide 4753157080127468127908060607821839 4753157080127468127908060607788379 -> 1.000000000000000000000000000007040 Inexact Rounded +dqdiv4013 divide 552448546203754062805706277880419 552448546203754062805706277881903 -> 0.9999999999999999999999999999973138 Inexact Rounded +dqdiv4014 divide 8405954527952158455323713728917395 8405954527952158455323713728933866 -> 0.9999999999999999999999999999980406 Inexact Rounded +dqdiv4015 divide 7554096502235321142555802238016116 7554096502235321142555802238026546 -> 0.9999999999999999999999999999986193 Inexact Rounded +dqdiv4016 divide 4053257674127518606871054934746782 4053257674127518606871054934767355 -> 0.9999999999999999999999999999949243 Inexact Rounded +dqdiv4017 divide 7112419420755090454716888844011582 7112419420755090454716888844038105 -> 0.9999999999999999999999999999962709 Inexact Rounded +dqdiv4018 divide 3132302137520072728164549730911846 3132302137520072728164549730908416 -> 1.000000000000000000000000000001095 Inexact Rounded +dqdiv4019 divide 4788374045841416355706715048161013 4788374045841416355706715048190077 -> 0.9999999999999999999999999999939303 Inexact Rounded +dqdiv4020 divide 9466021636047630218238075099510597 9466021636047630218238075099484053 -> 1.000000000000000000000000000002804 Inexact Rounded +dqdiv4021 divide 912742745646765625597399692138650 912742745646765625597399692139042 -> 0.9999999999999999999999999999995705 Inexact Rounded +dqdiv4022 divide 9508402742933643208806264897188504 9508402742933643208806264897195973 -> 0.9999999999999999999999999999992145 Inexact Rounded +dqdiv4023 divide 1186956795727233704962361914360895 1186956795727233704962361914329577 -> 1.000000000000000000000000000026385 Inexact Rounded +dqdiv4024 divide 5972210268839014812696916170967938 5972210268839014812696916170954974 -> 1.000000000000000000000000000002171 Inexact Rounded +dqdiv4025 divide 2303801625521619930894460139793140 2303801625521619930894460139799643 -> 0.9999999999999999999999999999971773 Inexact Rounded +dqdiv4026 divide 6022231560002898264777393473966595 6022231560002898264777393473947198 -> 1.000000000000000000000000000003221 Inexact Rounded +dqdiv4027 divide 8426148335801396199969346032210893 8426148335801396199969346032203179 -> 1.000000000000000000000000000000915 Inexact Rounded +dqdiv4028 divide 8812278947028784637382847098411749 8812278947028784637382847098385317 -> 1.000000000000000000000000000002999 Inexact Rounded +dqdiv4029 divide 8145282002348367383264197170116146 8145282002348367383264197170083988 -> 1.000000000000000000000000000003948 Inexact Rounded +dqdiv4030 divide 6821577571876840153123510107387026 6821577571876840153123510107418008 -> 0.9999999999999999999999999999954582 Inexact Rounded +dqdiv4031 divide 9018555319518966970480565482023720 9018555319518966970480565482013346 -> 1.000000000000000000000000000001150 Inexact Rounded +dqdiv4032 divide 4602155712998228449640717252788864 4602155712998228449640717252818502 -> 0.9999999999999999999999999999935600 Inexact Rounded +dqdiv4033 divide 6675607481522785614506828292264472 6675607481522785614506828292277100 -> 0.9999999999999999999999999999981083 Inexact Rounded +dqdiv4034 divide 4015881516871833897766945836264472 4015881516871833897766945836262645 -> 1.000000000000000000000000000000455 Inexact Rounded +dqdiv4035 divide 1415580205933411837595459716910365 1415580205933411837595459716880139 -> 1.000000000000000000000000000021352 Inexact Rounded +dqdiv4036 divide 9432968297069542816752035276361552 9432968297069542816752035276353054 -> 1.000000000000000000000000000000901 Inexact Rounded +dqdiv4037 divide 4799319591303848500532766682140658 4799319591303848500532766682172655 -> 0.9999999999999999999999999999933330 Inexact Rounded +dqdiv4038 divide 316854270732839529790584284987472 316854270732839529790584285004832 -> 0.9999999999999999999999999999452114 Inexact Rounded +dqdiv4039 divide 3598981300592490427826027975697415 3598981300592490427826027975686712 -> 1.000000000000000000000000000002974 Inexact Rounded +dqdiv4040 divide 1664315435694461371155800682196520 1664315435694461371155800682195617 -> 1.000000000000000000000000000000543 Inexact Rounded +dqdiv4041 divide 1680872316531128890102855316510581 1680872316531128890102855316495545 -> 1.000000000000000000000000000008945 Inexact Rounded +dqdiv4042 divide 9881274879566405475755499281644730 9881274879566405475755499281615743 -> 1.000000000000000000000000000002934 Inexact Rounded +dqdiv4043 divide 4737225957717466960447204232279216 4737225957717466960447204232277452 -> 1.000000000000000000000000000000372 Inexact Rounded +dqdiv4044 divide 2482097379414867061213319346418288 2482097379414867061213319346387936 -> 1.000000000000000000000000000012228 Inexact Rounded +dqdiv4045 divide 7406977595233762723576434122161868 7406977595233762723576434122189042 -> 0.9999999999999999999999999999963313 Inexact Rounded +dqdiv4046 divide 228782057757566047086593281773577 228782057757566047086593281769727 -> 1.000000000000000000000000000016828 Inexact Rounded +dqdiv4047 divide 2956594270240579648823270540367653 2956594270240579648823270540368556 -> 0.9999999999999999999999999999996946 Inexact Rounded +dqdiv4048 divide 6326964098897620620534136767634340 6326964098897620620534136767619339 -> 1.000000000000000000000000000002371 Inexact Rounded +dqdiv4049 divide 414586440456590215247002678327800 414586440456590215247002678316922 -> 1.000000000000000000000000000026238 Inexact Rounded +dqdiv4050 divide 7364552208570039386220505636779125 7364552208570039386220505636803548 -> 0.9999999999999999999999999999966837 Inexact Rounded +dqdiv4051 divide 5626266749902369710022824950590056 5626266749902369710022824950591008 -> 0.9999999999999999999999999999998308 Inexact Rounded +dqdiv4052 divide 4863278293916197454987481343460484 4863278293916197454987481343442522 -> 1.000000000000000000000000000003693 Inexact Rounded +dqdiv4053 divide 1170713582030637359713249796835483 1170713582030637359713249796823345 -> 1.000000000000000000000000000010368 Inexact Rounded +dqdiv4054 divide 9838062494725965667776326556052931 9838062494725965667776326556061002 -> 0.9999999999999999999999999999991796 Inexact Rounded +dqdiv4055 divide 4071388731298861093005687091498922 4071388731298861093005687091498278 -> 1.000000000000000000000000000000158 Inexact Rounded +dqdiv4056 divide 8753155722324706795855038590272526 8753155722324706795855038590276656 -> 0.9999999999999999999999999999995282 Inexact Rounded +dqdiv4057 divide 4399941911533273418844742658240485 4399941911533273418844742658219891 -> 1.000000000000000000000000000004681 Inexact Rounded +dqdiv4058 divide 4127884159949503677776430620050269 4127884159949503677776430620026091 -> 1.000000000000000000000000000005857 Inexact Rounded +dqdiv4059 divide 5536160822360800067042528317438808 5536160822360800067042528317450687 -> 0.9999999999999999999999999999978543 Inexact Rounded +dqdiv4060 divide 3973234998468664936671088237710246 3973234998468664936671088237741886 -> 0.9999999999999999999999999999920367 Inexact Rounded +dqdiv4061 divide 9824855935638263593410444142327358 9824855935638263593410444142328576 -> 0.9999999999999999999999999999998760 Inexact Rounded +dqdiv4062 divide 5917078517340218131867327300814867 5917078517340218131867327300788701 -> 1.000000000000000000000000000004422 Inexact Rounded +dqdiv4063 divide 4354236601830544882286139612521362 4354236601830544882286139612543223 -> 0.9999999999999999999999999999949794 Inexact Rounded +dqdiv4064 divide 8058474772375259017342110013891294 8058474772375259017342110013906792 -> 0.9999999999999999999999999999980768 Inexact Rounded +dqdiv4065 divide 5519604020981748170517093746166328 5519604020981748170517093746181763 -> 0.9999999999999999999999999999972036 Inexact Rounded +dqdiv4066 divide 1502130966879805458831323782443139 1502130966879805458831323782412213 -> 1.000000000000000000000000000020588 Inexact Rounded +dqdiv4067 divide 562795633719481212915159787980270 562795633719481212915159788007066 -> 0.9999999999999999999999999999523877 Inexact Rounded +dqdiv4068 divide 6584743324494664273941281557268878 6584743324494664273941281557258945 -> 1.000000000000000000000000000001508 Inexact Rounded +dqdiv4069 divide 3632000327285743997976431109416500 3632000327285743997976431109408107 -> 1.000000000000000000000000000002311 Inexact Rounded +dqdiv4070 divide 1145827237315430089388953838561450 1145827237315430089388953838527332 -> 1.000000000000000000000000000029776 Inexact Rounded +dqdiv4071 divide 8874431010357691869725372317350380 8874431010357691869725372317316472 -> 1.000000000000000000000000000003821 Inexact Rounded +dqdiv4072 divide 992948718902804648119753141202196 992948718902804648119753141235222 -> 0.9999999999999999999999999999667395 Inexact Rounded +dqdiv4073 divide 2522735183374218505142417265439989 2522735183374218505142417265453779 -> 0.9999999999999999999999999999945337 Inexact Rounded +dqdiv4074 divide 2668419161912936508006872303501052 2668419161912936508006872303471036 -> 1.000000000000000000000000000011249 Inexact Rounded +dqdiv4075 divide 3036169085665186712590941111775092 3036169085665186712590941111808846 -> 0.9999999999999999999999999999888827 Inexact Rounded +dqdiv4076 divide 9441634604917231638508898934006147 9441634604917231638508898934000288 -> 1.000000000000000000000000000000621 Inexact Rounded +dqdiv4077 divide 2677301353164377091111458811839190 2677301353164377091111458811867722 -> 0.9999999999999999999999999999893430 Inexact Rounded +dqdiv4078 divide 6844979203112066166583765857171426 6844979203112066166583765857189682 -> 0.9999999999999999999999999999973329 Inexact Rounded +dqdiv4079 divide 2220337435141796724323783960231661 2220337435141796724323783960208778 -> 1.000000000000000000000000000010306 Inexact Rounded +dqdiv4080 divide 6447424700019783931569996989561380 6447424700019783931569996989572454 -> 0.9999999999999999999999999999982824 Inexact Rounded +dqdiv4081 divide 7512856762696607119847092195587180 7512856762696607119847092195557346 -> 1.000000000000000000000000000003971 Inexact Rounded +dqdiv4082 divide 7395261981193960399087819077237482 7395261981193960399087819077242487 -> 0.9999999999999999999999999999993232 Inexact Rounded +dqdiv4083 divide 2253442467682584035792724884376735 2253442467682584035792724884407178 -> 0.9999999999999999999999999999864904 Inexact Rounded +dqdiv4084 divide 8153138680300213135577336466190997 8153138680300213135577336466220607 -> 0.9999999999999999999999999999963683 Inexact Rounded +dqdiv4085 divide 4668731252254148074041022681801390 4668731252254148074041022681778101 -> 1.000000000000000000000000000004988 Inexact Rounded +dqdiv4086 divide 6078404557993669696040425501815056 6078404557993669696040425501797612 -> 1.000000000000000000000000000002870 Inexact Rounded +dqdiv4087 divide 2306352359874261623223356878316278 2306352359874261623223356878335612 -> 0.9999999999999999999999999999916171 Inexact Rounded +dqdiv4088 divide 3264842186668480362900909564091908 3264842186668480362900909564058658 -> 1.000000000000000000000000000010184 Inexact Rounded +dqdiv4089 divide 6971985047279636878957959608612204 6971985047279636878957959608615088 -> 0.9999999999999999999999999999995863 Inexact Rounded +dqdiv4090 divide 5262810889952721235466445973816257 5262810889952721235466445973783077 -> 1.000000000000000000000000000006305 Inexact Rounded +dqdiv4091 divide 7947944731035267178548357070080288 7947944731035267178548357070061339 -> 1.000000000000000000000000000002384 Inexact Rounded +dqdiv4092 divide 5071808908395375108383035800443229 5071808908395375108383035800412429 -> 1.000000000000000000000000000006073 Inexact Rounded +dqdiv4093 divide 2043146542084503655511507209262969 2043146542084503655511507209249263 -> 1.000000000000000000000000000006708 Inexact Rounded +dqdiv4094 divide 4097632735384534181661959731264802 4097632735384534181661959731234499 -> 1.000000000000000000000000000007395 Inexact Rounded +dqdiv4095 divide 3061477642831387489729464587044430 3061477642831387489729464587059452 -> 0.9999999999999999999999999999950932 Inexact Rounded +dqdiv4096 divide 3429854941039776159498802936252638 3429854941039776159498802936246415 -> 1.000000000000000000000000000001814 Inexact Rounded +dqdiv4097 divide 4874324979578599700024133278284545 4874324979578599700024133278262131 -> 1.000000000000000000000000000004598 Inexact Rounded +dqdiv4098 divide 5701652369691833541455978515820882 5701652369691833541455978515834854 -> 0.9999999999999999999999999999975495 Inexact Rounded +dqdiv4099 divide 2928205728402945266953255632343113 2928205728402945266953255632373794 -> 0.9999999999999999999999999999895223 Inexact Rounded + +-- Null tests +dqdiv9998 divide 10 # -> NaN Invalid_operation +dqdiv9999 divide # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqDivideInt.decTest b/Lib/test/decimaltestdata/dqDivideInt.decTest index 077ac0e3b01..ed74fe61386 100644 --- a/Lib/test/decimaltestdata/dqDivideInt.decTest +++ b/Lib/test/decimaltestdata/dqDivideInt.decTest @@ -1,453 +1,453 @@ ------------------------------------------------------------------------- --- dqDivideInt.decTest -- decQuad integer division -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - - -dqdvi001 divideint 1 1 -> 1 -dqdvi002 divideint 2 1 -> 2 -dqdvi003 divideint 1 2 -> 0 -dqdvi004 divideint 2 2 -> 1 -dqdvi005 divideint 0 1 -> 0 -dqdvi006 divideint 0 2 -> 0 -dqdvi007 divideint 1 3 -> 0 -dqdvi008 divideint 2 3 -> 0 -dqdvi009 divideint 3 3 -> 1 - -dqdvi010 divideint 2.4 1 -> 2 -dqdvi011 divideint 2.4 -1 -> -2 -dqdvi012 divideint -2.4 1 -> -2 -dqdvi013 divideint -2.4 -1 -> 2 -dqdvi014 divideint 2.40 1 -> 2 -dqdvi015 divideint 2.400 1 -> 2 -dqdvi016 divideint 2.4 2 -> 1 -dqdvi017 divideint 2.400 2 -> 1 -dqdvi018 divideint 2. 2 -> 1 -dqdvi019 divideint 20 20 -> 1 - -dqdvi020 divideint 187 187 -> 1 -dqdvi021 divideint 5 2 -> 2 -dqdvi022 divideint 5 2.0 -> 2 -dqdvi023 divideint 5 2.000 -> 2 -dqdvi024 divideint 5 0.200 -> 25 -dqdvi025 divideint 5 0.200 -> 25 - -dqdvi030 divideint 1 2 -> 0 -dqdvi031 divideint 1 4 -> 0 -dqdvi032 divideint 1 8 -> 0 -dqdvi033 divideint 1 16 -> 0 -dqdvi034 divideint 1 32 -> 0 -dqdvi035 divideint 1 64 -> 0 -dqdvi040 divideint 1 -2 -> -0 -dqdvi041 divideint 1 -4 -> -0 -dqdvi042 divideint 1 -8 -> -0 -dqdvi043 divideint 1 -16 -> -0 -dqdvi044 divideint 1 -32 -> -0 -dqdvi045 divideint 1 -64 -> -0 -dqdvi050 divideint -1 2 -> -0 -dqdvi051 divideint -1 4 -> -0 -dqdvi052 divideint -1 8 -> -0 -dqdvi053 divideint -1 16 -> -0 -dqdvi054 divideint -1 32 -> -0 -dqdvi055 divideint -1 64 -> -0 -dqdvi060 divideint -1 -2 -> 0 -dqdvi061 divideint -1 -4 -> 0 -dqdvi062 divideint -1 -8 -> 0 -dqdvi063 divideint -1 -16 -> 0 -dqdvi064 divideint -1 -32 -> 0 -dqdvi065 divideint -1 -64 -> 0 - --- similar with powers of ten -dqdvi160 divideint 1 1 -> 1 -dqdvi161 divideint 1 10 -> 0 -dqdvi162 divideint 1 100 -> 0 -dqdvi163 divideint 1 1000 -> 0 -dqdvi164 divideint 1 10000 -> 0 -dqdvi165 divideint 1 100000 -> 0 -dqdvi166 divideint 1 1000000 -> 0 -dqdvi167 divideint 1 10000000 -> 0 -dqdvi168 divideint 1 100000000 -> 0 -dqdvi170 divideint 1 -1 -> -1 -dqdvi171 divideint 1 -10 -> -0 -dqdvi172 divideint 1 -100 -> -0 -dqdvi173 divideint 1 -1000 -> -0 -dqdvi174 divideint 1 -10000 -> -0 -dqdvi175 divideint 1 -100000 -> -0 -dqdvi176 divideint 1 -1000000 -> -0 -dqdvi177 divideint 1 -10000000 -> -0 -dqdvi178 divideint 1 -100000000 -> -0 -dqdvi180 divideint -1 1 -> -1 -dqdvi181 divideint -1 10 -> -0 -dqdvi182 divideint -1 100 -> -0 -dqdvi183 divideint -1 1000 -> -0 -dqdvi184 divideint -1 10000 -> -0 -dqdvi185 divideint -1 100000 -> -0 -dqdvi186 divideint -1 1000000 -> -0 -dqdvi187 divideint -1 10000000 -> -0 -dqdvi188 divideint -1 100000000 -> -0 -dqdvi190 divideint -1 -1 -> 1 -dqdvi191 divideint -1 -10 -> 0 -dqdvi192 divideint -1 -100 -> 0 -dqdvi193 divideint -1 -1000 -> 0 -dqdvi194 divideint -1 -10000 -> 0 -dqdvi195 divideint -1 -100000 -> 0 -dqdvi196 divideint -1 -1000000 -> 0 -dqdvi197 divideint -1 -10000000 -> 0 -dqdvi198 divideint -1 -100000000 -> 0 - --- some long operand (at p=9) cases -dqdvi070 divideint 999999999 1 -> 999999999 -dqdvi071 divideint 999999999.4 1 -> 999999999 -dqdvi072 divideint 999999999.5 1 -> 999999999 -dqdvi073 divideint 999999999.9 1 -> 999999999 -dqdvi074 divideint 999999999.999 1 -> 999999999 - -dqdvi090 divideint 0. 1 -> 0 -dqdvi091 divideint .0 1 -> 0 -dqdvi092 divideint 0.00 1 -> 0 -dqdvi093 divideint 0.00E+9 1 -> 0 -dqdvi094 divideint 0.0000E-50 1 -> 0 - -dqdvi100 divideint 1 1 -> 1 -dqdvi101 divideint 1 2 -> 0 -dqdvi102 divideint 1 3 -> 0 -dqdvi103 divideint 1 4 -> 0 -dqdvi104 divideint 1 5 -> 0 -dqdvi105 divideint 1 6 -> 0 -dqdvi106 divideint 1 7 -> 0 -dqdvi107 divideint 1 8 -> 0 -dqdvi108 divideint 1 9 -> 0 -dqdvi109 divideint 1 10 -> 0 -dqdvi110 divideint 1 1 -> 1 -dqdvi111 divideint 2 1 -> 2 -dqdvi112 divideint 3 1 -> 3 -dqdvi113 divideint 4 1 -> 4 -dqdvi114 divideint 5 1 -> 5 -dqdvi115 divideint 6 1 -> 6 -dqdvi116 divideint 7 1 -> 7 -dqdvi117 divideint 8 1 -> 8 -dqdvi118 divideint 9 1 -> 9 -dqdvi119 divideint 10 1 -> 10 - --- from DiagBigDecimal -dqdvi131 divideint 101.3 1 -> 101 -dqdvi132 divideint 101.0 1 -> 101 -dqdvi133 divideint 101.3 3 -> 33 -dqdvi134 divideint 101.0 3 -> 33 -dqdvi135 divideint 2.4 1 -> 2 -dqdvi136 divideint 2.400 1 -> 2 -dqdvi137 divideint 18 18 -> 1 -dqdvi138 divideint 1120 1000 -> 1 -dqdvi139 divideint 2.4 2 -> 1 -dqdvi140 divideint 2.400 2 -> 1 -dqdvi141 divideint 0.5 2.000 -> 0 -dqdvi142 divideint 8.005 7 -> 1 -dqdvi143 divideint 5 2 -> 2 -dqdvi144 divideint 0 2 -> 0 -dqdvi145 divideint 0.00 2 -> 0 - --- Others -dqdvi150 divideint 12345 4.999 -> 2469 -dqdvi151 divideint 12345 4.99 -> 2473 -dqdvi152 divideint 12345 4.9 -> 2519 -dqdvi153 divideint 12345 5 -> 2469 -dqdvi154 divideint 12345 5.1 -> 2420 -dqdvi155 divideint 12345 5.01 -> 2464 -dqdvi156 divideint 12345 5.001 -> 2468 -dqdvi157 divideint 101 7.6 -> 13 - --- Various flavours of divideint by 0 -dqdvi201 divideint 0 0 -> NaN Division_undefined -dqdvi202 divideint 0.0E5 0 -> NaN Division_undefined -dqdvi203 divideint 0.000 0 -> NaN Division_undefined -dqdvi204 divideint 0.0001 0 -> Infinity Division_by_zero -dqdvi205 divideint 0.01 0 -> Infinity Division_by_zero -dqdvi206 divideint 0.1 0 -> Infinity Division_by_zero -dqdvi207 divideint 1 0 -> Infinity Division_by_zero -dqdvi208 divideint 1 0.0 -> Infinity Division_by_zero -dqdvi209 divideint 10 0.0 -> Infinity Division_by_zero -dqdvi210 divideint 1E+100 0.0 -> Infinity Division_by_zero -dqdvi211 divideint 1E+380 0 -> Infinity Division_by_zero -dqdvi214 divideint -0.0001 0 -> -Infinity Division_by_zero -dqdvi215 divideint -0.01 0 -> -Infinity Division_by_zero -dqdvi216 divideint -0.1 0 -> -Infinity Division_by_zero -dqdvi217 divideint -1 0 -> -Infinity Division_by_zero -dqdvi218 divideint -1 0.0 -> -Infinity Division_by_zero -dqdvi219 divideint -10 0.0 -> -Infinity Division_by_zero -dqdvi220 divideint -1E+100 0.0 -> -Infinity Division_by_zero -dqdvi221 divideint -1E+380 0 -> -Infinity Division_by_zero - --- test some cases that are close to exponent overflow -dqdvi270 divideint 1 1e384 -> 0 -dqdvi271 divideint 1 0.9e384 -> 0 -dqdvi272 divideint 1 0.99e384 -> 0 -dqdvi273 divideint 1 0.9999999999999999e384 -> 0 -dqdvi274 divideint 9e384 1 -> NaN Division_impossible -dqdvi275 divideint 9.9e384 1 -> NaN Division_impossible -dqdvi276 divideint 9.99e384 1 -> NaN Division_impossible -dqdvi277 divideint 9.999999999999999e384 1 -> NaN Division_impossible - -dqdvi280 divideint 0.1 9e-383 -> NaN Division_impossible -dqdvi281 divideint 0.1 99e-383 -> NaN Division_impossible -dqdvi282 divideint 0.1 999e-383 -> NaN Division_impossible -dqdvi283 divideint 0.1 9e-382 -> NaN Division_impossible -dqdvi284 divideint 0.1 99e-382 -> NaN Division_impossible - --- GD edge cases: lhs smaller than rhs but more digits -dqdvi301 divideint 0.9 2 -> 0 -dqdvi302 divideint 0.9 2.0 -> 0 -dqdvi303 divideint 0.9 2.1 -> 0 -dqdvi304 divideint 0.9 2.00 -> 0 -dqdvi305 divideint 0.9 2.01 -> 0 -dqdvi306 divideint 0.12 1 -> 0 -dqdvi307 divideint 0.12 1.0 -> 0 -dqdvi308 divideint 0.12 1.00 -> 0 -dqdvi309 divideint 0.12 1.0 -> 0 -dqdvi310 divideint 0.12 1.00 -> 0 -dqdvi311 divideint 0.12 2 -> 0 -dqdvi312 divideint 0.12 2.0 -> 0 -dqdvi313 divideint 0.12 2.1 -> 0 -dqdvi314 divideint 0.12 2.00 -> 0 -dqdvi315 divideint 0.12 2.01 -> 0 - --- edge cases of impossible -dqdvi330 divideint 1234567987654321987654321890123456 10 -> 123456798765432198765432189012345 -dqdvi331 divideint 1234567987654321987654321890123456 1 -> 1234567987654321987654321890123456 -dqdvi332 divideint 1234567987654321987654321890123456 0.1 -> NaN Division_impossible -dqdvi333 divideint 1234567987654321987654321890123456 0.01 -> NaN Division_impossible - --- overflow and underflow tests [from divide] -dqdvi1051 divideint 1e+277 1e-311 -> NaN Division_impossible -dqdvi1052 divideint 1e+277 -1e-311 -> NaN Division_impossible -dqdvi1053 divideint -1e+277 1e-311 -> NaN Division_impossible -dqdvi1054 divideint -1e+277 -1e-311 -> NaN Division_impossible -dqdvi1055 divideint 1e-277 1e+311 -> 0 -dqdvi1056 divideint 1e-277 -1e+311 -> -0 -dqdvi1057 divideint -1e-277 1e+311 -> -0 -dqdvi1058 divideint -1e-277 -1e+311 -> 0 - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dqdvi1060 divideint 1e-291 1e+101 -> 0 -dqdvi1061 divideint 1e-291 1e+102 -> 0 -dqdvi1062 divideint 1e-291 1e+103 -> 0 -dqdvi1063 divideint 1e-291 1e+104 -> 0 -dqdvi1064 divideint 1e-291 1e+105 -> 0 -dqdvi1065 divideint 1e-291 1e+106 -> 0 -dqdvi1066 divideint 1e-291 1e+107 -> 0 -dqdvi1067 divideint 1e-291 1e+108 -> 0 -dqdvi1068 divideint 1e-291 1e+109 -> 0 -dqdvi1069 divideint 1e-291 1e+110 -> 0 - -dqdvi1101 divideint 1.0000E-394 1 -> 0 -dqdvi1102 divideint 1.000E-394 1e+1 -> 0 -dqdvi1103 divideint 1.00E-394 1e+2 -> 0 - -dqdvi1118 divideint 1E-394 1e+4 -> 0 -dqdvi1119 divideint 3E-394 -1e+5 -> -0 -dqdvi1120 divideint 5E-394 1e+5 -> 0 - -dqdvi1124 divideint 1E-394 -1e+4 -> -0 -dqdvi1130 divideint 3.0E-394 -1e+5 -> -0 - -dqdvi1131 divideint 1.0E-199 1e+200 -> 0 -dqdvi1132 divideint 1.0E-199 1e+199 -> 0 -dqdvi1133 divideint 1.0E-199 1e+198 -> 0 -dqdvi1134 divideint 2.0E-199 2e+198 -> 0 -dqdvi1135 divideint 4.0E-199 4e+198 -> 0 - --- long operand checks -dqdvi401 divideint 12345678000 100 -> 123456780 -dqdvi402 divideint 1 12345678000 -> 0 -dqdvi403 divideint 1234567800 10 -> 123456780 -dqdvi404 divideint 1 1234567800 -> 0 -dqdvi405 divideint 1234567890 10 -> 123456789 -dqdvi406 divideint 1 1234567890 -> 0 -dqdvi407 divideint 1234567891 10 -> 123456789 -dqdvi408 divideint 1 1234567891 -> 0 -dqdvi409 divideint 12345678901 100 -> 123456789 -dqdvi410 divideint 1 12345678901 -> 0 -dqdvi411 divideint 1234567896 10 -> 123456789 -dqdvi412 divideint 1 1234567896 -> 0 -dqdvi413 divideint 12345678948 100 -> 123456789 -dqdvi414 divideint 12345678949 100 -> 123456789 -dqdvi415 divideint 12345678950 100 -> 123456789 -dqdvi416 divideint 12345678951 100 -> 123456789 -dqdvi417 divideint 12345678999 100 -> 123456789 -dqdvi441 divideint 12345678000 1 -> 12345678000 -dqdvi442 divideint 1 12345678000 -> 0 -dqdvi443 divideint 1234567800 1 -> 1234567800 -dqdvi444 divideint 1 1234567800 -> 0 -dqdvi445 divideint 1234567890 1 -> 1234567890 -dqdvi446 divideint 1 1234567890 -> 0 -dqdvi447 divideint 1234567891 1 -> 1234567891 -dqdvi448 divideint 1 1234567891 -> 0 -dqdvi449 divideint 12345678901 1 -> 12345678901 -dqdvi450 divideint 1 12345678901 -> 0 -dqdvi451 divideint 1234567896 1 -> 1234567896 -dqdvi452 divideint 1 1234567896 -> 0 - --- more zeros, etc. -dqdvi531 divideint 5.00 1E-3 -> 5000 -dqdvi532 divideint 00.00 0.000 -> NaN Division_undefined -dqdvi533 divideint 00.00 0E-3 -> NaN Division_undefined -dqdvi534 divideint 0 -0 -> NaN Division_undefined -dqdvi535 divideint -0 0 -> NaN Division_undefined -dqdvi536 divideint -0 -0 -> NaN Division_undefined - -dqdvi541 divideint 0 -1 -> -0 -dqdvi542 divideint -0 -1 -> 0 -dqdvi543 divideint 0 1 -> 0 -dqdvi544 divideint -0 1 -> -0 -dqdvi545 divideint -1 0 -> -Infinity Division_by_zero -dqdvi546 divideint -1 -0 -> Infinity Division_by_zero -dqdvi547 divideint 1 0 -> Infinity Division_by_zero -dqdvi548 divideint 1 -0 -> -Infinity Division_by_zero - -dqdvi551 divideint 0.0 -1 -> -0 -dqdvi552 divideint -0.0 -1 -> 0 -dqdvi553 divideint 0.0 1 -> 0 -dqdvi554 divideint -0.0 1 -> -0 -dqdvi555 divideint -1.0 0 -> -Infinity Division_by_zero -dqdvi556 divideint -1.0 -0 -> Infinity Division_by_zero -dqdvi557 divideint 1.0 0 -> Infinity Division_by_zero -dqdvi558 divideint 1.0 -0 -> -Infinity Division_by_zero - -dqdvi561 divideint 0 -1.0 -> -0 -dqdvi562 divideint -0 -1.0 -> 0 -dqdvi563 divideint 0 1.0 -> 0 -dqdvi564 divideint -0 1.0 -> -0 -dqdvi565 divideint -1 0.0 -> -Infinity Division_by_zero -dqdvi566 divideint -1 -0.0 -> Infinity Division_by_zero -dqdvi567 divideint 1 0.0 -> Infinity Division_by_zero -dqdvi568 divideint 1 -0.0 -> -Infinity Division_by_zero - -dqdvi571 divideint 0.0 -1.0 -> -0 -dqdvi572 divideint -0.0 -1.0 -> 0 -dqdvi573 divideint 0.0 1.0 -> 0 -dqdvi574 divideint -0.0 1.0 -> -0 -dqdvi575 divideint -1.0 0.0 -> -Infinity Division_by_zero -dqdvi576 divideint -1.0 -0.0 -> Infinity Division_by_zero -dqdvi577 divideint 1.0 0.0 -> Infinity Division_by_zero -dqdvi578 divideint 1.0 -0.0 -> -Infinity Division_by_zero - --- Specials -dqdvi580 divideint Inf -Inf -> NaN Invalid_operation -dqdvi581 divideint Inf -1000 -> -Infinity -dqdvi582 divideint Inf -1 -> -Infinity -dqdvi583 divideint Inf -0 -> -Infinity -dqdvi584 divideint Inf 0 -> Infinity -dqdvi585 divideint Inf 1 -> Infinity -dqdvi586 divideint Inf 1000 -> Infinity -dqdvi587 divideint Inf Inf -> NaN Invalid_operation -dqdvi588 divideint -1000 Inf -> -0 -dqdvi589 divideint -Inf Inf -> NaN Invalid_operation -dqdvi590 divideint -1 Inf -> -0 -dqdvi591 divideint -0 Inf -> -0 -dqdvi592 divideint 0 Inf -> 0 -dqdvi593 divideint 1 Inf -> 0 -dqdvi594 divideint 1000 Inf -> 0 -dqdvi595 divideint Inf Inf -> NaN Invalid_operation - -dqdvi600 divideint -Inf -Inf -> NaN Invalid_operation -dqdvi601 divideint -Inf -1000 -> Infinity -dqdvi602 divideint -Inf -1 -> Infinity -dqdvi603 divideint -Inf -0 -> Infinity -dqdvi604 divideint -Inf 0 -> -Infinity -dqdvi605 divideint -Inf 1 -> -Infinity -dqdvi606 divideint -Inf 1000 -> -Infinity -dqdvi607 divideint -Inf Inf -> NaN Invalid_operation -dqdvi608 divideint -1000 Inf -> -0 -dqdvi609 divideint -Inf -Inf -> NaN Invalid_operation -dqdvi610 divideint -1 -Inf -> 0 -dqdvi611 divideint -0 -Inf -> 0 -dqdvi612 divideint 0 -Inf -> -0 -dqdvi613 divideint 1 -Inf -> -0 -dqdvi614 divideint 1000 -Inf -> -0 -dqdvi615 divideint Inf -Inf -> NaN Invalid_operation - -dqdvi621 divideint NaN -Inf -> NaN -dqdvi622 divideint NaN -1000 -> NaN -dqdvi623 divideint NaN -1 -> NaN -dqdvi624 divideint NaN -0 -> NaN -dqdvi625 divideint NaN 0 -> NaN -dqdvi626 divideint NaN 1 -> NaN -dqdvi627 divideint NaN 1000 -> NaN -dqdvi628 divideint NaN Inf -> NaN -dqdvi629 divideint NaN NaN -> NaN -dqdvi630 divideint -Inf NaN -> NaN -dqdvi631 divideint -1000 NaN -> NaN -dqdvi632 divideint -1 NaN -> NaN -dqdvi633 divideint -0 NaN -> NaN -dqdvi634 divideint 0 NaN -> NaN -dqdvi635 divideint 1 NaN -> NaN -dqdvi636 divideint 1000 NaN -> NaN -dqdvi637 divideint Inf NaN -> NaN - -dqdvi641 divideint sNaN -Inf -> NaN Invalid_operation -dqdvi642 divideint sNaN -1000 -> NaN Invalid_operation -dqdvi643 divideint sNaN -1 -> NaN Invalid_operation -dqdvi644 divideint sNaN -0 -> NaN Invalid_operation -dqdvi645 divideint sNaN 0 -> NaN Invalid_operation -dqdvi646 divideint sNaN 1 -> NaN Invalid_operation -dqdvi647 divideint sNaN 1000 -> NaN Invalid_operation -dqdvi648 divideint sNaN NaN -> NaN Invalid_operation -dqdvi649 divideint sNaN sNaN -> NaN Invalid_operation -dqdvi650 divideint NaN sNaN -> NaN Invalid_operation -dqdvi651 divideint -Inf sNaN -> NaN Invalid_operation -dqdvi652 divideint -1000 sNaN -> NaN Invalid_operation -dqdvi653 divideint -1 sNaN -> NaN Invalid_operation -dqdvi654 divideint -0 sNaN -> NaN Invalid_operation -dqdvi655 divideint 0 sNaN -> NaN Invalid_operation -dqdvi656 divideint 1 sNaN -> NaN Invalid_operation -dqdvi657 divideint 1000 sNaN -> NaN Invalid_operation -dqdvi658 divideint Inf sNaN -> NaN Invalid_operation -dqdvi659 divideint NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqdvi661 divideint NaN9 -Inf -> NaN9 -dqdvi662 divideint NaN8 1000 -> NaN8 -dqdvi663 divideint NaN7 Inf -> NaN7 -dqdvi664 divideint -NaN6 NaN5 -> -NaN6 -dqdvi665 divideint -Inf NaN4 -> NaN4 -dqdvi666 divideint -1000 NaN3 -> NaN3 -dqdvi667 divideint Inf -NaN2 -> -NaN2 - -dqdvi671 divideint -sNaN99 -Inf -> -NaN99 Invalid_operation -dqdvi672 divideint sNaN98 -1 -> NaN98 Invalid_operation -dqdvi673 divideint sNaN97 NaN -> NaN97 Invalid_operation -dqdvi674 divideint sNaN96 sNaN94 -> NaN96 Invalid_operation -dqdvi675 divideint NaN95 sNaN93 -> NaN93 Invalid_operation -dqdvi676 divideint -Inf sNaN92 -> NaN92 Invalid_operation -dqdvi677 divideint 0 sNaN91 -> NaN91 Invalid_operation -dqdvi678 divideint Inf -sNaN90 -> -NaN90 Invalid_operation -dqdvi679 divideint NaN sNaN89 -> NaN89 Invalid_operation - --- Gyuris example -dqdvi700 divideint 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 0 - --- Null tests -dqdvi900 divideint 10 # -> NaN Invalid_operation -dqdvi901 divideint # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqDivideInt.decTest -- decQuad integer division -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + + +dqdvi001 divideint 1 1 -> 1 +dqdvi002 divideint 2 1 -> 2 +dqdvi003 divideint 1 2 -> 0 +dqdvi004 divideint 2 2 -> 1 +dqdvi005 divideint 0 1 -> 0 +dqdvi006 divideint 0 2 -> 0 +dqdvi007 divideint 1 3 -> 0 +dqdvi008 divideint 2 3 -> 0 +dqdvi009 divideint 3 3 -> 1 + +dqdvi010 divideint 2.4 1 -> 2 +dqdvi011 divideint 2.4 -1 -> -2 +dqdvi012 divideint -2.4 1 -> -2 +dqdvi013 divideint -2.4 -1 -> 2 +dqdvi014 divideint 2.40 1 -> 2 +dqdvi015 divideint 2.400 1 -> 2 +dqdvi016 divideint 2.4 2 -> 1 +dqdvi017 divideint 2.400 2 -> 1 +dqdvi018 divideint 2. 2 -> 1 +dqdvi019 divideint 20 20 -> 1 + +dqdvi020 divideint 187 187 -> 1 +dqdvi021 divideint 5 2 -> 2 +dqdvi022 divideint 5 2.0 -> 2 +dqdvi023 divideint 5 2.000 -> 2 +dqdvi024 divideint 5 0.200 -> 25 +dqdvi025 divideint 5 0.200 -> 25 + +dqdvi030 divideint 1 2 -> 0 +dqdvi031 divideint 1 4 -> 0 +dqdvi032 divideint 1 8 -> 0 +dqdvi033 divideint 1 16 -> 0 +dqdvi034 divideint 1 32 -> 0 +dqdvi035 divideint 1 64 -> 0 +dqdvi040 divideint 1 -2 -> -0 +dqdvi041 divideint 1 -4 -> -0 +dqdvi042 divideint 1 -8 -> -0 +dqdvi043 divideint 1 -16 -> -0 +dqdvi044 divideint 1 -32 -> -0 +dqdvi045 divideint 1 -64 -> -0 +dqdvi050 divideint -1 2 -> -0 +dqdvi051 divideint -1 4 -> -0 +dqdvi052 divideint -1 8 -> -0 +dqdvi053 divideint -1 16 -> -0 +dqdvi054 divideint -1 32 -> -0 +dqdvi055 divideint -1 64 -> -0 +dqdvi060 divideint -1 -2 -> 0 +dqdvi061 divideint -1 -4 -> 0 +dqdvi062 divideint -1 -8 -> 0 +dqdvi063 divideint -1 -16 -> 0 +dqdvi064 divideint -1 -32 -> 0 +dqdvi065 divideint -1 -64 -> 0 + +-- similar with powers of ten +dqdvi160 divideint 1 1 -> 1 +dqdvi161 divideint 1 10 -> 0 +dqdvi162 divideint 1 100 -> 0 +dqdvi163 divideint 1 1000 -> 0 +dqdvi164 divideint 1 10000 -> 0 +dqdvi165 divideint 1 100000 -> 0 +dqdvi166 divideint 1 1000000 -> 0 +dqdvi167 divideint 1 10000000 -> 0 +dqdvi168 divideint 1 100000000 -> 0 +dqdvi170 divideint 1 -1 -> -1 +dqdvi171 divideint 1 -10 -> -0 +dqdvi172 divideint 1 -100 -> -0 +dqdvi173 divideint 1 -1000 -> -0 +dqdvi174 divideint 1 -10000 -> -0 +dqdvi175 divideint 1 -100000 -> -0 +dqdvi176 divideint 1 -1000000 -> -0 +dqdvi177 divideint 1 -10000000 -> -0 +dqdvi178 divideint 1 -100000000 -> -0 +dqdvi180 divideint -1 1 -> -1 +dqdvi181 divideint -1 10 -> -0 +dqdvi182 divideint -1 100 -> -0 +dqdvi183 divideint -1 1000 -> -0 +dqdvi184 divideint -1 10000 -> -0 +dqdvi185 divideint -1 100000 -> -0 +dqdvi186 divideint -1 1000000 -> -0 +dqdvi187 divideint -1 10000000 -> -0 +dqdvi188 divideint -1 100000000 -> -0 +dqdvi190 divideint -1 -1 -> 1 +dqdvi191 divideint -1 -10 -> 0 +dqdvi192 divideint -1 -100 -> 0 +dqdvi193 divideint -1 -1000 -> 0 +dqdvi194 divideint -1 -10000 -> 0 +dqdvi195 divideint -1 -100000 -> 0 +dqdvi196 divideint -1 -1000000 -> 0 +dqdvi197 divideint -1 -10000000 -> 0 +dqdvi198 divideint -1 -100000000 -> 0 + +-- some long operand (at p=9) cases +dqdvi070 divideint 999999999 1 -> 999999999 +dqdvi071 divideint 999999999.4 1 -> 999999999 +dqdvi072 divideint 999999999.5 1 -> 999999999 +dqdvi073 divideint 999999999.9 1 -> 999999999 +dqdvi074 divideint 999999999.999 1 -> 999999999 + +dqdvi090 divideint 0. 1 -> 0 +dqdvi091 divideint .0 1 -> 0 +dqdvi092 divideint 0.00 1 -> 0 +dqdvi093 divideint 0.00E+9 1 -> 0 +dqdvi094 divideint 0.0000E-50 1 -> 0 + +dqdvi100 divideint 1 1 -> 1 +dqdvi101 divideint 1 2 -> 0 +dqdvi102 divideint 1 3 -> 0 +dqdvi103 divideint 1 4 -> 0 +dqdvi104 divideint 1 5 -> 0 +dqdvi105 divideint 1 6 -> 0 +dqdvi106 divideint 1 7 -> 0 +dqdvi107 divideint 1 8 -> 0 +dqdvi108 divideint 1 9 -> 0 +dqdvi109 divideint 1 10 -> 0 +dqdvi110 divideint 1 1 -> 1 +dqdvi111 divideint 2 1 -> 2 +dqdvi112 divideint 3 1 -> 3 +dqdvi113 divideint 4 1 -> 4 +dqdvi114 divideint 5 1 -> 5 +dqdvi115 divideint 6 1 -> 6 +dqdvi116 divideint 7 1 -> 7 +dqdvi117 divideint 8 1 -> 8 +dqdvi118 divideint 9 1 -> 9 +dqdvi119 divideint 10 1 -> 10 + +-- from DiagBigDecimal +dqdvi131 divideint 101.3 1 -> 101 +dqdvi132 divideint 101.0 1 -> 101 +dqdvi133 divideint 101.3 3 -> 33 +dqdvi134 divideint 101.0 3 -> 33 +dqdvi135 divideint 2.4 1 -> 2 +dqdvi136 divideint 2.400 1 -> 2 +dqdvi137 divideint 18 18 -> 1 +dqdvi138 divideint 1120 1000 -> 1 +dqdvi139 divideint 2.4 2 -> 1 +dqdvi140 divideint 2.400 2 -> 1 +dqdvi141 divideint 0.5 2.000 -> 0 +dqdvi142 divideint 8.005 7 -> 1 +dqdvi143 divideint 5 2 -> 2 +dqdvi144 divideint 0 2 -> 0 +dqdvi145 divideint 0.00 2 -> 0 + +-- Others +dqdvi150 divideint 12345 4.999 -> 2469 +dqdvi151 divideint 12345 4.99 -> 2473 +dqdvi152 divideint 12345 4.9 -> 2519 +dqdvi153 divideint 12345 5 -> 2469 +dqdvi154 divideint 12345 5.1 -> 2420 +dqdvi155 divideint 12345 5.01 -> 2464 +dqdvi156 divideint 12345 5.001 -> 2468 +dqdvi157 divideint 101 7.6 -> 13 + +-- Various flavours of divideint by 0 +dqdvi201 divideint 0 0 -> NaN Division_undefined +dqdvi202 divideint 0.0E5 0 -> NaN Division_undefined +dqdvi203 divideint 0.000 0 -> NaN Division_undefined +dqdvi204 divideint 0.0001 0 -> Infinity Division_by_zero +dqdvi205 divideint 0.01 0 -> Infinity Division_by_zero +dqdvi206 divideint 0.1 0 -> Infinity Division_by_zero +dqdvi207 divideint 1 0 -> Infinity Division_by_zero +dqdvi208 divideint 1 0.0 -> Infinity Division_by_zero +dqdvi209 divideint 10 0.0 -> Infinity Division_by_zero +dqdvi210 divideint 1E+100 0.0 -> Infinity Division_by_zero +dqdvi211 divideint 1E+380 0 -> Infinity Division_by_zero +dqdvi214 divideint -0.0001 0 -> -Infinity Division_by_zero +dqdvi215 divideint -0.01 0 -> -Infinity Division_by_zero +dqdvi216 divideint -0.1 0 -> -Infinity Division_by_zero +dqdvi217 divideint -1 0 -> -Infinity Division_by_zero +dqdvi218 divideint -1 0.0 -> -Infinity Division_by_zero +dqdvi219 divideint -10 0.0 -> -Infinity Division_by_zero +dqdvi220 divideint -1E+100 0.0 -> -Infinity Division_by_zero +dqdvi221 divideint -1E+380 0 -> -Infinity Division_by_zero + +-- test some cases that are close to exponent overflow +dqdvi270 divideint 1 1e384 -> 0 +dqdvi271 divideint 1 0.9e384 -> 0 +dqdvi272 divideint 1 0.99e384 -> 0 +dqdvi273 divideint 1 0.9999999999999999e384 -> 0 +dqdvi274 divideint 9e384 1 -> NaN Division_impossible +dqdvi275 divideint 9.9e384 1 -> NaN Division_impossible +dqdvi276 divideint 9.99e384 1 -> NaN Division_impossible +dqdvi277 divideint 9.999999999999999e384 1 -> NaN Division_impossible + +dqdvi280 divideint 0.1 9e-383 -> NaN Division_impossible +dqdvi281 divideint 0.1 99e-383 -> NaN Division_impossible +dqdvi282 divideint 0.1 999e-383 -> NaN Division_impossible +dqdvi283 divideint 0.1 9e-382 -> NaN Division_impossible +dqdvi284 divideint 0.1 99e-382 -> NaN Division_impossible + +-- GD edge cases: lhs smaller than rhs but more digits +dqdvi301 divideint 0.9 2 -> 0 +dqdvi302 divideint 0.9 2.0 -> 0 +dqdvi303 divideint 0.9 2.1 -> 0 +dqdvi304 divideint 0.9 2.00 -> 0 +dqdvi305 divideint 0.9 2.01 -> 0 +dqdvi306 divideint 0.12 1 -> 0 +dqdvi307 divideint 0.12 1.0 -> 0 +dqdvi308 divideint 0.12 1.00 -> 0 +dqdvi309 divideint 0.12 1.0 -> 0 +dqdvi310 divideint 0.12 1.00 -> 0 +dqdvi311 divideint 0.12 2 -> 0 +dqdvi312 divideint 0.12 2.0 -> 0 +dqdvi313 divideint 0.12 2.1 -> 0 +dqdvi314 divideint 0.12 2.00 -> 0 +dqdvi315 divideint 0.12 2.01 -> 0 + +-- edge cases of impossible +dqdvi330 divideint 1234567987654321987654321890123456 10 -> 123456798765432198765432189012345 +dqdvi331 divideint 1234567987654321987654321890123456 1 -> 1234567987654321987654321890123456 +dqdvi332 divideint 1234567987654321987654321890123456 0.1 -> NaN Division_impossible +dqdvi333 divideint 1234567987654321987654321890123456 0.01 -> NaN Division_impossible + +-- overflow and underflow tests [from divide] +dqdvi1051 divideint 1e+277 1e-311 -> NaN Division_impossible +dqdvi1052 divideint 1e+277 -1e-311 -> NaN Division_impossible +dqdvi1053 divideint -1e+277 1e-311 -> NaN Division_impossible +dqdvi1054 divideint -1e+277 -1e-311 -> NaN Division_impossible +dqdvi1055 divideint 1e-277 1e+311 -> 0 +dqdvi1056 divideint 1e-277 -1e+311 -> -0 +dqdvi1057 divideint -1e-277 1e+311 -> -0 +dqdvi1058 divideint -1e-277 -1e+311 -> 0 + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dqdvi1060 divideint 1e-291 1e+101 -> 0 +dqdvi1061 divideint 1e-291 1e+102 -> 0 +dqdvi1062 divideint 1e-291 1e+103 -> 0 +dqdvi1063 divideint 1e-291 1e+104 -> 0 +dqdvi1064 divideint 1e-291 1e+105 -> 0 +dqdvi1065 divideint 1e-291 1e+106 -> 0 +dqdvi1066 divideint 1e-291 1e+107 -> 0 +dqdvi1067 divideint 1e-291 1e+108 -> 0 +dqdvi1068 divideint 1e-291 1e+109 -> 0 +dqdvi1069 divideint 1e-291 1e+110 -> 0 + +dqdvi1101 divideint 1.0000E-394 1 -> 0 +dqdvi1102 divideint 1.000E-394 1e+1 -> 0 +dqdvi1103 divideint 1.00E-394 1e+2 -> 0 + +dqdvi1118 divideint 1E-394 1e+4 -> 0 +dqdvi1119 divideint 3E-394 -1e+5 -> -0 +dqdvi1120 divideint 5E-394 1e+5 -> 0 + +dqdvi1124 divideint 1E-394 -1e+4 -> -0 +dqdvi1130 divideint 3.0E-394 -1e+5 -> -0 + +dqdvi1131 divideint 1.0E-199 1e+200 -> 0 +dqdvi1132 divideint 1.0E-199 1e+199 -> 0 +dqdvi1133 divideint 1.0E-199 1e+198 -> 0 +dqdvi1134 divideint 2.0E-199 2e+198 -> 0 +dqdvi1135 divideint 4.0E-199 4e+198 -> 0 + +-- long operand checks +dqdvi401 divideint 12345678000 100 -> 123456780 +dqdvi402 divideint 1 12345678000 -> 0 +dqdvi403 divideint 1234567800 10 -> 123456780 +dqdvi404 divideint 1 1234567800 -> 0 +dqdvi405 divideint 1234567890 10 -> 123456789 +dqdvi406 divideint 1 1234567890 -> 0 +dqdvi407 divideint 1234567891 10 -> 123456789 +dqdvi408 divideint 1 1234567891 -> 0 +dqdvi409 divideint 12345678901 100 -> 123456789 +dqdvi410 divideint 1 12345678901 -> 0 +dqdvi411 divideint 1234567896 10 -> 123456789 +dqdvi412 divideint 1 1234567896 -> 0 +dqdvi413 divideint 12345678948 100 -> 123456789 +dqdvi414 divideint 12345678949 100 -> 123456789 +dqdvi415 divideint 12345678950 100 -> 123456789 +dqdvi416 divideint 12345678951 100 -> 123456789 +dqdvi417 divideint 12345678999 100 -> 123456789 +dqdvi441 divideint 12345678000 1 -> 12345678000 +dqdvi442 divideint 1 12345678000 -> 0 +dqdvi443 divideint 1234567800 1 -> 1234567800 +dqdvi444 divideint 1 1234567800 -> 0 +dqdvi445 divideint 1234567890 1 -> 1234567890 +dqdvi446 divideint 1 1234567890 -> 0 +dqdvi447 divideint 1234567891 1 -> 1234567891 +dqdvi448 divideint 1 1234567891 -> 0 +dqdvi449 divideint 12345678901 1 -> 12345678901 +dqdvi450 divideint 1 12345678901 -> 0 +dqdvi451 divideint 1234567896 1 -> 1234567896 +dqdvi452 divideint 1 1234567896 -> 0 + +-- more zeros, etc. +dqdvi531 divideint 5.00 1E-3 -> 5000 +dqdvi532 divideint 00.00 0.000 -> NaN Division_undefined +dqdvi533 divideint 00.00 0E-3 -> NaN Division_undefined +dqdvi534 divideint 0 -0 -> NaN Division_undefined +dqdvi535 divideint -0 0 -> NaN Division_undefined +dqdvi536 divideint -0 -0 -> NaN Division_undefined + +dqdvi541 divideint 0 -1 -> -0 +dqdvi542 divideint -0 -1 -> 0 +dqdvi543 divideint 0 1 -> 0 +dqdvi544 divideint -0 1 -> -0 +dqdvi545 divideint -1 0 -> -Infinity Division_by_zero +dqdvi546 divideint -1 -0 -> Infinity Division_by_zero +dqdvi547 divideint 1 0 -> Infinity Division_by_zero +dqdvi548 divideint 1 -0 -> -Infinity Division_by_zero + +dqdvi551 divideint 0.0 -1 -> -0 +dqdvi552 divideint -0.0 -1 -> 0 +dqdvi553 divideint 0.0 1 -> 0 +dqdvi554 divideint -0.0 1 -> -0 +dqdvi555 divideint -1.0 0 -> -Infinity Division_by_zero +dqdvi556 divideint -1.0 -0 -> Infinity Division_by_zero +dqdvi557 divideint 1.0 0 -> Infinity Division_by_zero +dqdvi558 divideint 1.0 -0 -> -Infinity Division_by_zero + +dqdvi561 divideint 0 -1.0 -> -0 +dqdvi562 divideint -0 -1.0 -> 0 +dqdvi563 divideint 0 1.0 -> 0 +dqdvi564 divideint -0 1.0 -> -0 +dqdvi565 divideint -1 0.0 -> -Infinity Division_by_zero +dqdvi566 divideint -1 -0.0 -> Infinity Division_by_zero +dqdvi567 divideint 1 0.0 -> Infinity Division_by_zero +dqdvi568 divideint 1 -0.0 -> -Infinity Division_by_zero + +dqdvi571 divideint 0.0 -1.0 -> -0 +dqdvi572 divideint -0.0 -1.0 -> 0 +dqdvi573 divideint 0.0 1.0 -> 0 +dqdvi574 divideint -0.0 1.0 -> -0 +dqdvi575 divideint -1.0 0.0 -> -Infinity Division_by_zero +dqdvi576 divideint -1.0 -0.0 -> Infinity Division_by_zero +dqdvi577 divideint 1.0 0.0 -> Infinity Division_by_zero +dqdvi578 divideint 1.0 -0.0 -> -Infinity Division_by_zero + +-- Specials +dqdvi580 divideint Inf -Inf -> NaN Invalid_operation +dqdvi581 divideint Inf -1000 -> -Infinity +dqdvi582 divideint Inf -1 -> -Infinity +dqdvi583 divideint Inf -0 -> -Infinity +dqdvi584 divideint Inf 0 -> Infinity +dqdvi585 divideint Inf 1 -> Infinity +dqdvi586 divideint Inf 1000 -> Infinity +dqdvi587 divideint Inf Inf -> NaN Invalid_operation +dqdvi588 divideint -1000 Inf -> -0 +dqdvi589 divideint -Inf Inf -> NaN Invalid_operation +dqdvi590 divideint -1 Inf -> -0 +dqdvi591 divideint -0 Inf -> -0 +dqdvi592 divideint 0 Inf -> 0 +dqdvi593 divideint 1 Inf -> 0 +dqdvi594 divideint 1000 Inf -> 0 +dqdvi595 divideint Inf Inf -> NaN Invalid_operation + +dqdvi600 divideint -Inf -Inf -> NaN Invalid_operation +dqdvi601 divideint -Inf -1000 -> Infinity +dqdvi602 divideint -Inf -1 -> Infinity +dqdvi603 divideint -Inf -0 -> Infinity +dqdvi604 divideint -Inf 0 -> -Infinity +dqdvi605 divideint -Inf 1 -> -Infinity +dqdvi606 divideint -Inf 1000 -> -Infinity +dqdvi607 divideint -Inf Inf -> NaN Invalid_operation +dqdvi608 divideint -1000 Inf -> -0 +dqdvi609 divideint -Inf -Inf -> NaN Invalid_operation +dqdvi610 divideint -1 -Inf -> 0 +dqdvi611 divideint -0 -Inf -> 0 +dqdvi612 divideint 0 -Inf -> -0 +dqdvi613 divideint 1 -Inf -> -0 +dqdvi614 divideint 1000 -Inf -> -0 +dqdvi615 divideint Inf -Inf -> NaN Invalid_operation + +dqdvi621 divideint NaN -Inf -> NaN +dqdvi622 divideint NaN -1000 -> NaN +dqdvi623 divideint NaN -1 -> NaN +dqdvi624 divideint NaN -0 -> NaN +dqdvi625 divideint NaN 0 -> NaN +dqdvi626 divideint NaN 1 -> NaN +dqdvi627 divideint NaN 1000 -> NaN +dqdvi628 divideint NaN Inf -> NaN +dqdvi629 divideint NaN NaN -> NaN +dqdvi630 divideint -Inf NaN -> NaN +dqdvi631 divideint -1000 NaN -> NaN +dqdvi632 divideint -1 NaN -> NaN +dqdvi633 divideint -0 NaN -> NaN +dqdvi634 divideint 0 NaN -> NaN +dqdvi635 divideint 1 NaN -> NaN +dqdvi636 divideint 1000 NaN -> NaN +dqdvi637 divideint Inf NaN -> NaN + +dqdvi641 divideint sNaN -Inf -> NaN Invalid_operation +dqdvi642 divideint sNaN -1000 -> NaN Invalid_operation +dqdvi643 divideint sNaN -1 -> NaN Invalid_operation +dqdvi644 divideint sNaN -0 -> NaN Invalid_operation +dqdvi645 divideint sNaN 0 -> NaN Invalid_operation +dqdvi646 divideint sNaN 1 -> NaN Invalid_operation +dqdvi647 divideint sNaN 1000 -> NaN Invalid_operation +dqdvi648 divideint sNaN NaN -> NaN Invalid_operation +dqdvi649 divideint sNaN sNaN -> NaN Invalid_operation +dqdvi650 divideint NaN sNaN -> NaN Invalid_operation +dqdvi651 divideint -Inf sNaN -> NaN Invalid_operation +dqdvi652 divideint -1000 sNaN -> NaN Invalid_operation +dqdvi653 divideint -1 sNaN -> NaN Invalid_operation +dqdvi654 divideint -0 sNaN -> NaN Invalid_operation +dqdvi655 divideint 0 sNaN -> NaN Invalid_operation +dqdvi656 divideint 1 sNaN -> NaN Invalid_operation +dqdvi657 divideint 1000 sNaN -> NaN Invalid_operation +dqdvi658 divideint Inf sNaN -> NaN Invalid_operation +dqdvi659 divideint NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqdvi661 divideint NaN9 -Inf -> NaN9 +dqdvi662 divideint NaN8 1000 -> NaN8 +dqdvi663 divideint NaN7 Inf -> NaN7 +dqdvi664 divideint -NaN6 NaN5 -> -NaN6 +dqdvi665 divideint -Inf NaN4 -> NaN4 +dqdvi666 divideint -1000 NaN3 -> NaN3 +dqdvi667 divideint Inf -NaN2 -> -NaN2 + +dqdvi671 divideint -sNaN99 -Inf -> -NaN99 Invalid_operation +dqdvi672 divideint sNaN98 -1 -> NaN98 Invalid_operation +dqdvi673 divideint sNaN97 NaN -> NaN97 Invalid_operation +dqdvi674 divideint sNaN96 sNaN94 -> NaN96 Invalid_operation +dqdvi675 divideint NaN95 sNaN93 -> NaN93 Invalid_operation +dqdvi676 divideint -Inf sNaN92 -> NaN92 Invalid_operation +dqdvi677 divideint 0 sNaN91 -> NaN91 Invalid_operation +dqdvi678 divideint Inf -sNaN90 -> -NaN90 Invalid_operation +dqdvi679 divideint NaN sNaN89 -> NaN89 Invalid_operation + +-- Gyuris example +dqdvi700 divideint 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 0 + +-- Null tests +dqdvi900 divideint 10 # -> NaN Invalid_operation +dqdvi901 divideint # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqEncode.decTest b/Lib/test/decimaltestdata/dqEncode.decTest index 49edf5b2805..8c5d7b9b303 100644 --- a/Lib/test/decimaltestdata/dqEncode.decTest +++ b/Lib/test/decimaltestdata/dqEncode.decTest @@ -1,477 +1,477 @@ ------------------------------------------------------------------------- --- dqEncode.decTest -- decimal sixteen-byte format testcases -- --- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- --- [Previously called decimal128.decTest] -version: 2.59 - --- This set of tests is for the sixteen-byte concrete representation. --- Its characteristics are: --- --- 1 bit sign --- 5 bits combination field --- 12 bits exponent continuation --- 110 bits coefficient continuation --- --- Total exponent length 14 bits --- Total coefficient length 114 bits (34 digits) --- --- Elimit = 12287 (maximum encoded exponent) --- Emax = 6144 (largest exponent value) --- Emin = -6143 (smallest exponent value) --- bias = 6176 (subtracted from encoded exponent) = -Etiny - --- The testcases here have only exactly representable data on the --- 'left-hand-side'; rounding from strings is tested in 'base' --- testcase groups. - -extended: 1 -clamp: 1 -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 - --- General testcases --- (mostly derived from the Strawman 4 document and examples) -decq001 apply #A20780000000000000000000000003D0 -> -7.50 -decq002 apply -7.50 -> #A20780000000000000000000000003D0 --- derivative canonical plain strings -decq003 apply #A20840000000000000000000000003D0 -> -7.50E+3 -decq004 apply -7.50E+3 -> #A20840000000000000000000000003D0 -decq005 apply #A20800000000000000000000000003D0 -> -750 -decq006 apply -750 -> #A20800000000000000000000000003D0 -decq007 apply #A207c0000000000000000000000003D0 -> -75.0 -decq008 apply -75.0 -> #A207c0000000000000000000000003D0 -decq009 apply #A20740000000000000000000000003D0 -> -0.750 -decq010 apply -0.750 -> #A20740000000000000000000000003D0 -decq011 apply #A20700000000000000000000000003D0 -> -0.0750 -decq012 apply -0.0750 -> #A20700000000000000000000000003D0 -decq013 apply #A20680000000000000000000000003D0 -> -0.000750 -decq014 apply -0.000750 -> #A20680000000000000000000000003D0 -decq015 apply #A20600000000000000000000000003D0 -> -0.00000750 -decq016 apply -0.00000750 -> #A20600000000000000000000000003D0 -decq017 apply #A205c0000000000000000000000003D0 -> -7.50E-7 -decq018 apply -7.50E-7 -> #A205c0000000000000000000000003D0 - --- Normality -decq020 apply 1234567890123456789012345678901234 -> #2608134b9c1e28e56f3c127177823534 -decq021 apply -1234567890123456789012345678901234 -> #a608134b9c1e28e56f3c127177823534 -decq022 apply 1111111111111111111111111111111111 -> #26080912449124491244912449124491 - --- Nmax and similar -decq031 apply 9.999999999999999999999999999999999E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff -decq032 apply #77ffcff3fcff3fcff3fcff3fcff3fcff -> 9.999999999999999999999999999999999E+6144 -decq033 apply 1.234567890123456789012345678901234E+6144 -> #47ffd34b9c1e28e56f3c127177823534 -decq034 apply #47ffd34b9c1e28e56f3c127177823534 -> 1.234567890123456789012345678901234E+6144 --- fold-downs (more below) -decq035 apply 1.23E+6144 -> #47ffd300000000000000000000000000 Clamped -decq036 apply #47ffd300000000000000000000000000 -> 1.230000000000000000000000000000000E+6144 -decq037 apply 1E+6144 -> #47ffc000000000000000000000000000 Clamped -decq038 apply #47ffc000000000000000000000000000 -> 1.000000000000000000000000000000000E+6144 - -decq051 apply 12345 -> #220800000000000000000000000049c5 -decq052 apply #220800000000000000000000000049c5 -> 12345 -decq053 apply 1234 -> #22080000000000000000000000000534 -decq054 apply #22080000000000000000000000000534 -> 1234 -decq055 apply 123 -> #220800000000000000000000000000a3 -decq056 apply #220800000000000000000000000000a3 -> 123 -decq057 apply 12 -> #22080000000000000000000000000012 -decq058 apply #22080000000000000000000000000012 -> 12 -decq059 apply 1 -> #22080000000000000000000000000001 -decq060 apply #22080000000000000000000000000001 -> 1 -decq061 apply 1.23 -> #220780000000000000000000000000a3 -decq062 apply #220780000000000000000000000000a3 -> 1.23 -decq063 apply 123.45 -> #220780000000000000000000000049c5 -decq064 apply #220780000000000000000000000049c5 -> 123.45 - --- Nmin and below -decq071 apply 1E-6143 -> #00084000000000000000000000000001 -decq072 apply #00084000000000000000000000000001 -> 1E-6143 -decq073 apply 1.000000000000000000000000000000000E-6143 -> #04000000000000000000000000000000 -decq074 apply #04000000000000000000000000000000 -> 1.000000000000000000000000000000000E-6143 -decq075 apply 1.000000000000000000000000000000001E-6143 -> #04000000000000000000000000000001 -decq076 apply #04000000000000000000000000000001 -> 1.000000000000000000000000000000001E-6143 - -decq077 apply 0.100000000000000000000000000000000E-6143 -> #00000800000000000000000000000000 Subnormal -decq078 apply #00000800000000000000000000000000 -> 1.00000000000000000000000000000000E-6144 Subnormal -decq079 apply 0.000000000000000000000000000000010E-6143 -> #00000000000000000000000000000010 Subnormal -decq080 apply #00000000000000000000000000000010 -> 1.0E-6175 Subnormal -decq081 apply 0.00000000000000000000000000000001E-6143 -> #00004000000000000000000000000001 Subnormal -decq082 apply #00004000000000000000000000000001 -> 1E-6175 Subnormal -decq083 apply 0.000000000000000000000000000000001E-6143 -> #00000000000000000000000000000001 Subnormal -decq084 apply #00000000000000000000000000000001 -> 1E-6176 Subnormal - --- underflows cannot be tested for simple copies, check edge cases -decq090 apply 1e-6176 -> #00000000000000000000000000000001 Subnormal -decq100 apply 999999999999999999999999999999999e-6176 -> #00000ff3fcff3fcff3fcff3fcff3fcff Subnormal - --- same again, negatives --- Nmax and similar -decq122 apply -9.999999999999999999999999999999999E+6144 -> #f7ffcff3fcff3fcff3fcff3fcff3fcff -decq123 apply #f7ffcff3fcff3fcff3fcff3fcff3fcff -> -9.999999999999999999999999999999999E+6144 -decq124 apply -1.234567890123456789012345678901234E+6144 -> #c7ffd34b9c1e28e56f3c127177823534 -decq125 apply #c7ffd34b9c1e28e56f3c127177823534 -> -1.234567890123456789012345678901234E+6144 --- fold-downs (more below) -decq130 apply -1.23E+6144 -> #c7ffd300000000000000000000000000 Clamped -decq131 apply #c7ffd300000000000000000000000000 -> -1.230000000000000000000000000000000E+6144 -decq132 apply -1E+6144 -> #c7ffc000000000000000000000000000 Clamped -decq133 apply #c7ffc000000000000000000000000000 -> -1.000000000000000000000000000000000E+6144 - -decq151 apply -12345 -> #a20800000000000000000000000049c5 -decq152 apply #a20800000000000000000000000049c5 -> -12345 -decq153 apply -1234 -> #a2080000000000000000000000000534 -decq154 apply #a2080000000000000000000000000534 -> -1234 -decq155 apply -123 -> #a20800000000000000000000000000a3 -decq156 apply #a20800000000000000000000000000a3 -> -123 -decq157 apply -12 -> #a2080000000000000000000000000012 -decq158 apply #a2080000000000000000000000000012 -> -12 -decq159 apply -1 -> #a2080000000000000000000000000001 -decq160 apply #a2080000000000000000000000000001 -> -1 -decq161 apply -1.23 -> #a20780000000000000000000000000a3 -decq162 apply #a20780000000000000000000000000a3 -> -1.23 -decq163 apply -123.45 -> #a20780000000000000000000000049c5 -decq164 apply #a20780000000000000000000000049c5 -> -123.45 - --- Nmin and below -decq171 apply -1E-6143 -> #80084000000000000000000000000001 -decq172 apply #80084000000000000000000000000001 -> -1E-6143 -decq173 apply -1.000000000000000000000000000000000E-6143 -> #84000000000000000000000000000000 -decq174 apply #84000000000000000000000000000000 -> -1.000000000000000000000000000000000E-6143 -decq175 apply -1.000000000000000000000000000000001E-6143 -> #84000000000000000000000000000001 -decq176 apply #84000000000000000000000000000001 -> -1.000000000000000000000000000000001E-6143 - -decq177 apply -0.100000000000000000000000000000000E-6143 -> #80000800000000000000000000000000 Subnormal -decq178 apply #80000800000000000000000000000000 -> -1.00000000000000000000000000000000E-6144 Subnormal -decq179 apply -0.000000000000000000000000000000010E-6143 -> #80000000000000000000000000000010 Subnormal -decq180 apply #80000000000000000000000000000010 -> -1.0E-6175 Subnormal -decq181 apply -0.00000000000000000000000000000001E-6143 -> #80004000000000000000000000000001 Subnormal -decq182 apply #80004000000000000000000000000001 -> -1E-6175 Subnormal -decq183 apply -0.000000000000000000000000000000001E-6143 -> #80000000000000000000000000000001 Subnormal -decq184 apply #80000000000000000000000000000001 -> -1E-6176 Subnormal - --- underflow edge cases -decq190 apply -1e-6176 -> #80000000000000000000000000000001 Subnormal -decq200 apply -999999999999999999999999999999999e-6176 -> #80000ff3fcff3fcff3fcff3fcff3fcff Subnormal - --- zeros -decq400 apply 0E-8000 -> #00000000000000000000000000000000 Clamped -decq401 apply 0E-6177 -> #00000000000000000000000000000000 Clamped -decq402 apply 0E-6176 -> #00000000000000000000000000000000 -decq403 apply #00000000000000000000000000000000 -> 0E-6176 -decq404 apply 0.000000000000000000000000000000000E-6143 -> #00000000000000000000000000000000 -decq405 apply #00000000000000000000000000000000 -> 0E-6176 -decq406 apply 0E-2 -> #22078000000000000000000000000000 -decq407 apply #22078000000000000000000000000000 -> 0.00 -decq408 apply 0 -> #22080000000000000000000000000000 -decq409 apply #22080000000000000000000000000000 -> 0 -decq410 apply 0E+3 -> #2208c000000000000000000000000000 -decq411 apply #2208c000000000000000000000000000 -> 0E+3 -decq412 apply 0E+6111 -> #43ffc000000000000000000000000000 -decq413 apply #43ffc000000000000000000000000000 -> 0E+6111 --- clamped zeros... -decq414 apply 0E+6112 -> #43ffc000000000000000000000000000 Clamped -decq415 apply #43ffc000000000000000000000000000 -> 0E+6111 -decq416 apply 0E+6144 -> #43ffc000000000000000000000000000 Clamped -decq417 apply #43ffc000000000000000000000000000 -> 0E+6111 -decq418 apply 0E+8000 -> #43ffc000000000000000000000000000 Clamped -decq419 apply #43ffc000000000000000000000000000 -> 0E+6111 - --- negative zeros -decq420 apply -0E-8000 -> #80000000000000000000000000000000 Clamped -decq421 apply -0E-6177 -> #80000000000000000000000000000000 Clamped -decq422 apply -0E-6176 -> #80000000000000000000000000000000 -decq423 apply #80000000000000000000000000000000 -> -0E-6176 -decq424 apply -0.000000000000000000000000000000000E-6143 -> #80000000000000000000000000000000 -decq425 apply #80000000000000000000000000000000 -> -0E-6176 -decq426 apply -0E-2 -> #a2078000000000000000000000000000 -decq427 apply #a2078000000000000000000000000000 -> -0.00 -decq428 apply -0 -> #a2080000000000000000000000000000 -decq429 apply #a2080000000000000000000000000000 -> -0 -decq430 apply -0E+3 -> #a208c000000000000000000000000000 -decq431 apply #a208c000000000000000000000000000 -> -0E+3 -decq432 apply -0E+6111 -> #c3ffc000000000000000000000000000 -decq433 apply #c3ffc000000000000000000000000000 -> -0E+6111 --- clamped zeros... -decq434 apply -0E+6112 -> #c3ffc000000000000000000000000000 Clamped -decq435 apply #c3ffc000000000000000000000000000 -> -0E+6111 -decq436 apply -0E+6144 -> #c3ffc000000000000000000000000000 Clamped -decq437 apply #c3ffc000000000000000000000000000 -> -0E+6111 -decq438 apply -0E+8000 -> #c3ffc000000000000000000000000000 Clamped -decq439 apply #c3ffc000000000000000000000000000 -> -0E+6111 - --- exponent lengths -decq440 apply #22080000000000000000000000000007 -> 7 -decq441 apply 7 -> #22080000000000000000000000000007 -decq442 apply #220a4000000000000000000000000007 -> 7E+9 -decq443 apply 7E+9 -> #220a4000000000000000000000000007 -decq444 apply #2220c000000000000000000000000007 -> 7E+99 -decq445 apply 7E+99 -> #2220c000000000000000000000000007 -decq446 apply #2301c000000000000000000000000007 -> 7E+999 -decq447 apply 7E+999 -> #2301c000000000000000000000000007 -decq448 apply #43e3c000000000000000000000000007 -> 7E+5999 -decq449 apply 7E+5999 -> #43e3c000000000000000000000000007 - --- Specials -decq500 apply Infinity -> #78000000000000000000000000000000 -decq501 apply #78787878787878787878787878787878 -> #78000000000000000000000000000000 -decq502 apply #78000000000000000000000000000000 -> Infinity -decq503 apply #79797979797979797979797979797979 -> #78000000000000000000000000000000 -decq504 apply #79000000000000000000000000000000 -> Infinity -decq505 apply #7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a -> #78000000000000000000000000000000 -decq506 apply #7a000000000000000000000000000000 -> Infinity -decq507 apply #7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b -> #78000000000000000000000000000000 -decq508 apply #7b000000000000000000000000000000 -> Infinity - -decq509 apply NaN -> #7c000000000000000000000000000000 -decq510 apply #7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c -> #7c003c7c7c7c7c7c7c7c7c7c7c7c7c7c -decq511 apply #7c000000000000000000000000000000 -> NaN -decq512 apply #7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d -> #7c003d7d7d7d7d7d7d7d7d7d7d7d7d7d -decq513 apply #7d000000000000000000000000000000 -> NaN -decq514 apply #7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e -> #7e003e7e7c7e7e7e7e7c7e7e7e7e7c7e -decq515 apply #7e000000000000000000000000000000 -> sNaN -decq516 apply #7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f -> #7e003f7f7c7f7f7f7f7c7f7f7f7f7c7f -decq517 apply #7f000000000000000000000000000000 -> sNaN -decq518 apply #7fffffffffffffffffffffffffffffff -> sNaN999999999999999999999999999999999 -decq519 apply #7fffffffffffffffffffffffffffffff -> #7e000ff3fcff3fcff3fcff3fcff3fcff - -decq520 apply -Infinity -> #f8000000000000000000000000000000 -decq521 apply #f8787878787878787878787878787878 -> #f8000000000000000000000000000000 -decq522 apply #f8000000000000000000000000000000 -> -Infinity -decq523 apply #f9797979797979797979797979797979 -> #f8000000000000000000000000000000 -decq524 apply #f9000000000000000000000000000000 -> -Infinity -decq525 apply #fa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a -> #f8000000000000000000000000000000 -decq526 apply #fa000000000000000000000000000000 -> -Infinity -decq527 apply #fb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b -> #f8000000000000000000000000000000 -decq528 apply #fb000000000000000000000000000000 -> -Infinity - -decq529 apply -NaN -> #fc000000000000000000000000000000 -decq530 apply #fc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c -> #fc003c7c7c7c7c7c7c7c7c7c7c7c7c7c -decq531 apply #fc000000000000000000000000000000 -> -NaN -decq532 apply #fd7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d -> #fc003d7d7d7d7d7d7d7d7d7d7d7d7d7d -decq533 apply #fd000000000000000000000000000000 -> -NaN -decq534 apply #fe7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e -> #fe003e7e7c7e7e7e7e7c7e7e7e7e7c7e -decq535 apply #fe000000000000000000000000000000 -> -sNaN -decq536 apply #ff7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f -> #fe003f7f7c7f7f7f7f7c7f7f7f7f7c7f -decq537 apply #ff000000000000000000000000000000 -> -sNaN -decq538 apply #ffffffffffffffffffffffffffffffff -> -sNaN999999999999999999999999999999999 -decq539 apply #ffffffffffffffffffffffffffffffff -> #fe000ff3fcff3fcff3fcff3fcff3fcff - -decq540 apply NaN -> #7c000000000000000000000000000000 -decq541 apply NaN0 -> #7c000000000000000000000000000000 -decq542 apply NaN1 -> #7c000000000000000000000000000001 -decq543 apply NaN12 -> #7c000000000000000000000000000012 -decq544 apply NaN79 -> #7c000000000000000000000000000079 -decq545 apply NaN12345 -> #7c0000000000000000000000000049c5 -decq546 apply NaN123456 -> #7c000000000000000000000000028e56 -decq547 apply NaN799799 -> #7c0000000000000000000000000f7fdf -decq548 apply NaN799799799799799799799799799799799 -> #7c003dff7fdff7fdff7fdff7fdff7fdf -decq549 apply NaN999999999999999999999999999999999 -> #7c000ff3fcff3fcff3fcff3fcff3fcff -decq550 apply 9999999999999999999999999999999999 -> #6e080ff3fcff3fcff3fcff3fcff3fcff - --- fold-down full sequence -decq601 apply 1E+6144 -> #47ffc000000000000000000000000000 Clamped -decq602 apply #47ffc000000000000000000000000000 -> 1.000000000000000000000000000000000E+6144 -decq603 apply 1E+6143 -> #43ffc800000000000000000000000000 Clamped -decq604 apply #43ffc800000000000000000000000000 -> 1.00000000000000000000000000000000E+6143 -decq605 apply 1E+6142 -> #43ffc100000000000000000000000000 Clamped -decq606 apply #43ffc100000000000000000000000000 -> 1.0000000000000000000000000000000E+6142 -decq607 apply 1E+6141 -> #43ffc010000000000000000000000000 Clamped -decq608 apply #43ffc010000000000000000000000000 -> 1.000000000000000000000000000000E+6141 -decq609 apply 1E+6140 -> #43ffc002000000000000000000000000 Clamped -decq610 apply #43ffc002000000000000000000000000 -> 1.00000000000000000000000000000E+6140 -decq611 apply 1E+6139 -> #43ffc000400000000000000000000000 Clamped -decq612 apply #43ffc000400000000000000000000000 -> 1.0000000000000000000000000000E+6139 -decq613 apply 1E+6138 -> #43ffc000040000000000000000000000 Clamped -decq614 apply #43ffc000040000000000000000000000 -> 1.000000000000000000000000000E+6138 -decq615 apply 1E+6137 -> #43ffc000008000000000000000000000 Clamped -decq616 apply #43ffc000008000000000000000000000 -> 1.00000000000000000000000000E+6137 -decq617 apply 1E+6136 -> #43ffc000001000000000000000000000 Clamped -decq618 apply #43ffc000001000000000000000000000 -> 1.0000000000000000000000000E+6136 -decq619 apply 1E+6135 -> #43ffc000000100000000000000000000 Clamped -decq620 apply #43ffc000000100000000000000000000 -> 1.000000000000000000000000E+6135 -decq621 apply 1E+6134 -> #43ffc000000020000000000000000000 Clamped -decq622 apply #43ffc000000020000000000000000000 -> 1.00000000000000000000000E+6134 -decq623 apply 1E+6133 -> #43ffc000000004000000000000000000 Clamped -decq624 apply #43ffc000000004000000000000000000 -> 1.0000000000000000000000E+6133 -decq625 apply 1E+6132 -> #43ffc000000000400000000000000000 Clamped -decq626 apply #43ffc000000000400000000000000000 -> 1.000000000000000000000E+6132 -decq627 apply 1E+6131 -> #43ffc000000000080000000000000000 Clamped -decq628 apply #43ffc000000000080000000000000000 -> 1.00000000000000000000E+6131 -decq629 apply 1E+6130 -> #43ffc000000000010000000000000000 Clamped -decq630 apply #43ffc000000000010000000000000000 -> 1.0000000000000000000E+6130 -decq631 apply 1E+6129 -> #43ffc000000000001000000000000000 Clamped -decq632 apply #43ffc000000000001000000000000000 -> 1.000000000000000000E+6129 -decq633 apply 1E+6128 -> #43ffc000000000000200000000000000 Clamped -decq634 apply #43ffc000000000000200000000000000 -> 1.00000000000000000E+6128 -decq635 apply 1E+6127 -> #43ffc000000000000040000000000000 Clamped -decq636 apply #43ffc000000000000040000000000000 -> 1.0000000000000000E+6127 -decq637 apply 1E+6126 -> #43ffc000000000000004000000000000 Clamped -decq638 apply #43ffc000000000000004000000000000 -> 1.000000000000000E+6126 -decq639 apply 1E+6125 -> #43ffc000000000000000800000000000 Clamped -decq640 apply #43ffc000000000000000800000000000 -> 1.00000000000000E+6125 -decq641 apply 1E+6124 -> #43ffc000000000000000100000000000 Clamped -decq642 apply #43ffc000000000000000100000000000 -> 1.0000000000000E+6124 -decq643 apply 1E+6123 -> #43ffc000000000000000010000000000 Clamped -decq644 apply #43ffc000000000000000010000000000 -> 1.000000000000E+6123 -decq645 apply 1E+6122 -> #43ffc000000000000000002000000000 Clamped -decq646 apply #43ffc000000000000000002000000000 -> 1.00000000000E+6122 -decq647 apply 1E+6121 -> #43ffc000000000000000000400000000 Clamped -decq648 apply #43ffc000000000000000000400000000 -> 1.0000000000E+6121 -decq649 apply 1E+6120 -> #43ffc000000000000000000040000000 Clamped -decq650 apply #43ffc000000000000000000040000000 -> 1.000000000E+6120 -decq651 apply 1E+6119 -> #43ffc000000000000000000008000000 Clamped -decq652 apply #43ffc000000000000000000008000000 -> 1.00000000E+6119 -decq653 apply 1E+6118 -> #43ffc000000000000000000001000000 Clamped -decq654 apply #43ffc000000000000000000001000000 -> 1.0000000E+6118 -decq655 apply 1E+6117 -> #43ffc000000000000000000000100000 Clamped -decq656 apply #43ffc000000000000000000000100000 -> 1.000000E+6117 -decq657 apply 1E+6116 -> #43ffc000000000000000000000020000 Clamped -decq658 apply #43ffc000000000000000000000020000 -> 1.00000E+6116 -decq659 apply 1E+6115 -> #43ffc000000000000000000000004000 Clamped -decq660 apply #43ffc000000000000000000000004000 -> 1.0000E+6115 -decq661 apply 1E+6114 -> #43ffc000000000000000000000000400 Clamped -decq662 apply #43ffc000000000000000000000000400 -> 1.000E+6114 -decq663 apply 1E+6113 -> #43ffc000000000000000000000000080 Clamped -decq664 apply #43ffc000000000000000000000000080 -> 1.00E+6113 -decq665 apply 1E+6112 -> #43ffc000000000000000000000000010 Clamped -decq666 apply #43ffc000000000000000000000000010 -> 1.0E+6112 -decq667 apply 1E+6111 -> #43ffc000000000000000000000000001 -decq668 apply #43ffc000000000000000000000000001 -> 1E+6111 -decq669 apply 1E+6110 -> #43ff8000000000000000000000000001 -decq670 apply #43ff8000000000000000000000000001 -> 1E+6110 - --- Selected DPD codes -decq700 apply #22080000000000000000000000000000 -> 0 -decq701 apply #22080000000000000000000000000009 -> 9 -decq702 apply #22080000000000000000000000000010 -> 10 -decq703 apply #22080000000000000000000000000019 -> 19 -decq704 apply #22080000000000000000000000000020 -> 20 -decq705 apply #22080000000000000000000000000029 -> 29 -decq706 apply #22080000000000000000000000000030 -> 30 -decq707 apply #22080000000000000000000000000039 -> 39 -decq708 apply #22080000000000000000000000000040 -> 40 -decq709 apply #22080000000000000000000000000049 -> 49 -decq710 apply #22080000000000000000000000000050 -> 50 -decq711 apply #22080000000000000000000000000059 -> 59 -decq712 apply #22080000000000000000000000000060 -> 60 -decq713 apply #22080000000000000000000000000069 -> 69 -decq714 apply #22080000000000000000000000000070 -> 70 -decq715 apply #22080000000000000000000000000071 -> 71 -decq716 apply #22080000000000000000000000000072 -> 72 -decq717 apply #22080000000000000000000000000073 -> 73 -decq718 apply #22080000000000000000000000000074 -> 74 -decq719 apply #22080000000000000000000000000075 -> 75 -decq720 apply #22080000000000000000000000000076 -> 76 -decq721 apply #22080000000000000000000000000077 -> 77 -decq722 apply #22080000000000000000000000000078 -> 78 -decq723 apply #22080000000000000000000000000079 -> 79 - -decq730 apply #2208000000000000000000000000029e -> 994 -decq731 apply #2208000000000000000000000000029f -> 995 -decq732 apply #220800000000000000000000000002a0 -> 520 -decq733 apply #220800000000000000000000000002a1 -> 521 - --- DPD: one of each of the huffman groups -decq740 apply #220800000000000000000000000003f7 -> 777 -decq741 apply #220800000000000000000000000003f8 -> 778 -decq742 apply #220800000000000000000000000003eb -> 787 -decq743 apply #2208000000000000000000000000037d -> 877 -decq744 apply #2208000000000000000000000000039f -> 997 -decq745 apply #220800000000000000000000000003bf -> 979 -decq746 apply #220800000000000000000000000003df -> 799 -decq747 apply #2208000000000000000000000000006e -> 888 - - --- DPD all-highs cases (includes the 24 redundant codes) -decq750 apply #2208000000000000000000000000006e -> 888 -decq751 apply #2208000000000000000000000000016e -> 888 -decq752 apply #2208000000000000000000000000026e -> 888 -decq753 apply #2208000000000000000000000000036e -> 888 -decq754 apply #2208000000000000000000000000006f -> 889 -decq755 apply #2208000000000000000000000000016f -> 889 -decq756 apply #2208000000000000000000000000026f -> 889 -decq757 apply #2208000000000000000000000000036f -> 889 - -decq760 apply #2208000000000000000000000000007e -> 898 -decq761 apply #2208000000000000000000000000017e -> 898 -decq762 apply #2208000000000000000000000000027e -> 898 -decq763 apply #2208000000000000000000000000037e -> 898 -decq764 apply #2208000000000000000000000000007f -> 899 -decq765 apply #2208000000000000000000000000017f -> 899 -decq766 apply #2208000000000000000000000000027f -> 899 -decq767 apply #2208000000000000000000000000037f -> 899 - -decq770 apply #220800000000000000000000000000ee -> 988 -decq771 apply #220800000000000000000000000001ee -> 988 -decq772 apply #220800000000000000000000000002ee -> 988 -decq773 apply #220800000000000000000000000003ee -> 988 -decq774 apply #220800000000000000000000000000ef -> 989 -decq775 apply #220800000000000000000000000001ef -> 989 -decq776 apply #220800000000000000000000000002ef -> 989 -decq777 apply #220800000000000000000000000003ef -> 989 - -decq780 apply #220800000000000000000000000000fe -> 998 -decq781 apply #220800000000000000000000000001fe -> 998 -decq782 apply #220800000000000000000000000002fe -> 998 -decq783 apply #220800000000000000000000000003fe -> 998 -decq784 apply #220800000000000000000000000000ff -> 999 -decq785 apply #220800000000000000000000000001ff -> 999 -decq786 apply #220800000000000000000000000002ff -> 999 -decq787 apply #220800000000000000000000000003ff -> 999 - --- Miscellaneous (testers' queries, etc.) - -decq790 apply #2208000000000000000000000000c000 -> 30000 -decq791 apply #22080000000000000000000000007800 -> 890000 -decq792 apply 30000 -> #2208000000000000000000000000c000 -decq793 apply 890000 -> #22080000000000000000000000007800 - --- values around [u]int32 edges (zeros done earlier) -decq800 apply -2147483646 -> #a208000000000000000000008c78af46 -decq801 apply -2147483647 -> #a208000000000000000000008c78af47 -decq802 apply -2147483648 -> #a208000000000000000000008c78af48 -decq803 apply -2147483649 -> #a208000000000000000000008c78af49 -decq804 apply 2147483646 -> #2208000000000000000000008c78af46 -decq805 apply 2147483647 -> #2208000000000000000000008c78af47 -decq806 apply 2147483648 -> #2208000000000000000000008c78af48 -decq807 apply 2147483649 -> #2208000000000000000000008c78af49 -decq808 apply 4294967294 -> #22080000000000000000000115afb55a -decq809 apply 4294967295 -> #22080000000000000000000115afb55b -decq810 apply 4294967296 -> #22080000000000000000000115afb57a -decq811 apply 4294967297 -> #22080000000000000000000115afb57b - -decq820 apply #a208000000000000000000008c78af46 -> -2147483646 -decq821 apply #a208000000000000000000008c78af47 -> -2147483647 -decq822 apply #a208000000000000000000008c78af48 -> -2147483648 -decq823 apply #a208000000000000000000008c78af49 -> -2147483649 -decq824 apply #2208000000000000000000008c78af46 -> 2147483646 -decq825 apply #2208000000000000000000008c78af47 -> 2147483647 -decq826 apply #2208000000000000000000008c78af48 -> 2147483648 -decq827 apply #2208000000000000000000008c78af49 -> 2147483649 -decq828 apply #22080000000000000000000115afb55a -> 4294967294 -decq829 apply #22080000000000000000000115afb55b -> 4294967295 -decq830 apply #22080000000000000000000115afb57a -> 4294967296 -decq831 apply #22080000000000000000000115afb57b -> 4294967297 - --- VG testcase -decq840 apply #2080000000000000F294000000172636 -> 8.81125000000001349436E-1548 -decq841 apply #20800000000000008000000000000000 -> 8.000000000000000000E-1550 -decq842 apply #1EF98490000000010F6E4E0000000000 -> 7.049000000000010795488000000000000E-3097 -decq843 multiply #20800000000000008000000000000000 #2080000000000000F294000000172636 -> #1EF98490000000010F6E4E0000000000 Rounded - +------------------------------------------------------------------------ +-- dqEncode.decTest -- decimal sixteen-byte format testcases -- +-- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +-- [Previously called decimal128.decTest] +version: 2.59 + +-- This set of tests is for the sixteen-byte concrete representation. +-- Its characteristics are: +-- +-- 1 bit sign +-- 5 bits combination field +-- 12 bits exponent continuation +-- 110 bits coefficient continuation +-- +-- Total exponent length 14 bits +-- Total coefficient length 114 bits (34 digits) +-- +-- Elimit = 12287 (maximum encoded exponent) +-- Emax = 6144 (largest exponent value) +-- Emin = -6143 (smallest exponent value) +-- bias = 6176 (subtracted from encoded exponent) = -Etiny + +-- The testcases here have only exactly representable data on the +-- 'left-hand-side'; rounding from strings is tested in 'base' +-- testcase groups. + +extended: 1 +clamp: 1 +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 + +-- General testcases +-- (mostly derived from the Strawman 4 document and examples) +decq001 apply #A20780000000000000000000000003D0 -> -7.50 +decq002 apply -7.50 -> #A20780000000000000000000000003D0 +-- derivative canonical plain strings +decq003 apply #A20840000000000000000000000003D0 -> -7.50E+3 +decq004 apply -7.50E+3 -> #A20840000000000000000000000003D0 +decq005 apply #A20800000000000000000000000003D0 -> -750 +decq006 apply -750 -> #A20800000000000000000000000003D0 +decq007 apply #A207c0000000000000000000000003D0 -> -75.0 +decq008 apply -75.0 -> #A207c0000000000000000000000003D0 +decq009 apply #A20740000000000000000000000003D0 -> -0.750 +decq010 apply -0.750 -> #A20740000000000000000000000003D0 +decq011 apply #A20700000000000000000000000003D0 -> -0.0750 +decq012 apply -0.0750 -> #A20700000000000000000000000003D0 +decq013 apply #A20680000000000000000000000003D0 -> -0.000750 +decq014 apply -0.000750 -> #A20680000000000000000000000003D0 +decq015 apply #A20600000000000000000000000003D0 -> -0.00000750 +decq016 apply -0.00000750 -> #A20600000000000000000000000003D0 +decq017 apply #A205c0000000000000000000000003D0 -> -7.50E-7 +decq018 apply -7.50E-7 -> #A205c0000000000000000000000003D0 + +-- Normality +decq020 apply 1234567890123456789012345678901234 -> #2608134b9c1e28e56f3c127177823534 +decq021 apply -1234567890123456789012345678901234 -> #a608134b9c1e28e56f3c127177823534 +decq022 apply 1111111111111111111111111111111111 -> #26080912449124491244912449124491 + +-- Nmax and similar +decq031 apply 9.999999999999999999999999999999999E+6144 -> #77ffcff3fcff3fcff3fcff3fcff3fcff +decq032 apply #77ffcff3fcff3fcff3fcff3fcff3fcff -> 9.999999999999999999999999999999999E+6144 +decq033 apply 1.234567890123456789012345678901234E+6144 -> #47ffd34b9c1e28e56f3c127177823534 +decq034 apply #47ffd34b9c1e28e56f3c127177823534 -> 1.234567890123456789012345678901234E+6144 +-- fold-downs (more below) +decq035 apply 1.23E+6144 -> #47ffd300000000000000000000000000 Clamped +decq036 apply #47ffd300000000000000000000000000 -> 1.230000000000000000000000000000000E+6144 +decq037 apply 1E+6144 -> #47ffc000000000000000000000000000 Clamped +decq038 apply #47ffc000000000000000000000000000 -> 1.000000000000000000000000000000000E+6144 + +decq051 apply 12345 -> #220800000000000000000000000049c5 +decq052 apply #220800000000000000000000000049c5 -> 12345 +decq053 apply 1234 -> #22080000000000000000000000000534 +decq054 apply #22080000000000000000000000000534 -> 1234 +decq055 apply 123 -> #220800000000000000000000000000a3 +decq056 apply #220800000000000000000000000000a3 -> 123 +decq057 apply 12 -> #22080000000000000000000000000012 +decq058 apply #22080000000000000000000000000012 -> 12 +decq059 apply 1 -> #22080000000000000000000000000001 +decq060 apply #22080000000000000000000000000001 -> 1 +decq061 apply 1.23 -> #220780000000000000000000000000a3 +decq062 apply #220780000000000000000000000000a3 -> 1.23 +decq063 apply 123.45 -> #220780000000000000000000000049c5 +decq064 apply #220780000000000000000000000049c5 -> 123.45 + +-- Nmin and below +decq071 apply 1E-6143 -> #00084000000000000000000000000001 +decq072 apply #00084000000000000000000000000001 -> 1E-6143 +decq073 apply 1.000000000000000000000000000000000E-6143 -> #04000000000000000000000000000000 +decq074 apply #04000000000000000000000000000000 -> 1.000000000000000000000000000000000E-6143 +decq075 apply 1.000000000000000000000000000000001E-6143 -> #04000000000000000000000000000001 +decq076 apply #04000000000000000000000000000001 -> 1.000000000000000000000000000000001E-6143 + +decq077 apply 0.100000000000000000000000000000000E-6143 -> #00000800000000000000000000000000 Subnormal +decq078 apply #00000800000000000000000000000000 -> 1.00000000000000000000000000000000E-6144 Subnormal +decq079 apply 0.000000000000000000000000000000010E-6143 -> #00000000000000000000000000000010 Subnormal +decq080 apply #00000000000000000000000000000010 -> 1.0E-6175 Subnormal +decq081 apply 0.00000000000000000000000000000001E-6143 -> #00004000000000000000000000000001 Subnormal +decq082 apply #00004000000000000000000000000001 -> 1E-6175 Subnormal +decq083 apply 0.000000000000000000000000000000001E-6143 -> #00000000000000000000000000000001 Subnormal +decq084 apply #00000000000000000000000000000001 -> 1E-6176 Subnormal + +-- underflows cannot be tested for simple copies, check edge cases +decq090 apply 1e-6176 -> #00000000000000000000000000000001 Subnormal +decq100 apply 999999999999999999999999999999999e-6176 -> #00000ff3fcff3fcff3fcff3fcff3fcff Subnormal + +-- same again, negatives +-- Nmax and similar +decq122 apply -9.999999999999999999999999999999999E+6144 -> #f7ffcff3fcff3fcff3fcff3fcff3fcff +decq123 apply #f7ffcff3fcff3fcff3fcff3fcff3fcff -> -9.999999999999999999999999999999999E+6144 +decq124 apply -1.234567890123456789012345678901234E+6144 -> #c7ffd34b9c1e28e56f3c127177823534 +decq125 apply #c7ffd34b9c1e28e56f3c127177823534 -> -1.234567890123456789012345678901234E+6144 +-- fold-downs (more below) +decq130 apply -1.23E+6144 -> #c7ffd300000000000000000000000000 Clamped +decq131 apply #c7ffd300000000000000000000000000 -> -1.230000000000000000000000000000000E+6144 +decq132 apply -1E+6144 -> #c7ffc000000000000000000000000000 Clamped +decq133 apply #c7ffc000000000000000000000000000 -> -1.000000000000000000000000000000000E+6144 + +decq151 apply -12345 -> #a20800000000000000000000000049c5 +decq152 apply #a20800000000000000000000000049c5 -> -12345 +decq153 apply -1234 -> #a2080000000000000000000000000534 +decq154 apply #a2080000000000000000000000000534 -> -1234 +decq155 apply -123 -> #a20800000000000000000000000000a3 +decq156 apply #a20800000000000000000000000000a3 -> -123 +decq157 apply -12 -> #a2080000000000000000000000000012 +decq158 apply #a2080000000000000000000000000012 -> -12 +decq159 apply -1 -> #a2080000000000000000000000000001 +decq160 apply #a2080000000000000000000000000001 -> -1 +decq161 apply -1.23 -> #a20780000000000000000000000000a3 +decq162 apply #a20780000000000000000000000000a3 -> -1.23 +decq163 apply -123.45 -> #a20780000000000000000000000049c5 +decq164 apply #a20780000000000000000000000049c5 -> -123.45 + +-- Nmin and below +decq171 apply -1E-6143 -> #80084000000000000000000000000001 +decq172 apply #80084000000000000000000000000001 -> -1E-6143 +decq173 apply -1.000000000000000000000000000000000E-6143 -> #84000000000000000000000000000000 +decq174 apply #84000000000000000000000000000000 -> -1.000000000000000000000000000000000E-6143 +decq175 apply -1.000000000000000000000000000000001E-6143 -> #84000000000000000000000000000001 +decq176 apply #84000000000000000000000000000001 -> -1.000000000000000000000000000000001E-6143 + +decq177 apply -0.100000000000000000000000000000000E-6143 -> #80000800000000000000000000000000 Subnormal +decq178 apply #80000800000000000000000000000000 -> -1.00000000000000000000000000000000E-6144 Subnormal +decq179 apply -0.000000000000000000000000000000010E-6143 -> #80000000000000000000000000000010 Subnormal +decq180 apply #80000000000000000000000000000010 -> -1.0E-6175 Subnormal +decq181 apply -0.00000000000000000000000000000001E-6143 -> #80004000000000000000000000000001 Subnormal +decq182 apply #80004000000000000000000000000001 -> -1E-6175 Subnormal +decq183 apply -0.000000000000000000000000000000001E-6143 -> #80000000000000000000000000000001 Subnormal +decq184 apply #80000000000000000000000000000001 -> -1E-6176 Subnormal + +-- underflow edge cases +decq190 apply -1e-6176 -> #80000000000000000000000000000001 Subnormal +decq200 apply -999999999999999999999999999999999e-6176 -> #80000ff3fcff3fcff3fcff3fcff3fcff Subnormal + +-- zeros +decq400 apply 0E-8000 -> #00000000000000000000000000000000 Clamped +decq401 apply 0E-6177 -> #00000000000000000000000000000000 Clamped +decq402 apply 0E-6176 -> #00000000000000000000000000000000 +decq403 apply #00000000000000000000000000000000 -> 0E-6176 +decq404 apply 0.000000000000000000000000000000000E-6143 -> #00000000000000000000000000000000 +decq405 apply #00000000000000000000000000000000 -> 0E-6176 +decq406 apply 0E-2 -> #22078000000000000000000000000000 +decq407 apply #22078000000000000000000000000000 -> 0.00 +decq408 apply 0 -> #22080000000000000000000000000000 +decq409 apply #22080000000000000000000000000000 -> 0 +decq410 apply 0E+3 -> #2208c000000000000000000000000000 +decq411 apply #2208c000000000000000000000000000 -> 0E+3 +decq412 apply 0E+6111 -> #43ffc000000000000000000000000000 +decq413 apply #43ffc000000000000000000000000000 -> 0E+6111 +-- clamped zeros... +decq414 apply 0E+6112 -> #43ffc000000000000000000000000000 Clamped +decq415 apply #43ffc000000000000000000000000000 -> 0E+6111 +decq416 apply 0E+6144 -> #43ffc000000000000000000000000000 Clamped +decq417 apply #43ffc000000000000000000000000000 -> 0E+6111 +decq418 apply 0E+8000 -> #43ffc000000000000000000000000000 Clamped +decq419 apply #43ffc000000000000000000000000000 -> 0E+6111 + +-- negative zeros +decq420 apply -0E-8000 -> #80000000000000000000000000000000 Clamped +decq421 apply -0E-6177 -> #80000000000000000000000000000000 Clamped +decq422 apply -0E-6176 -> #80000000000000000000000000000000 +decq423 apply #80000000000000000000000000000000 -> -0E-6176 +decq424 apply -0.000000000000000000000000000000000E-6143 -> #80000000000000000000000000000000 +decq425 apply #80000000000000000000000000000000 -> -0E-6176 +decq426 apply -0E-2 -> #a2078000000000000000000000000000 +decq427 apply #a2078000000000000000000000000000 -> -0.00 +decq428 apply -0 -> #a2080000000000000000000000000000 +decq429 apply #a2080000000000000000000000000000 -> -0 +decq430 apply -0E+3 -> #a208c000000000000000000000000000 +decq431 apply #a208c000000000000000000000000000 -> -0E+3 +decq432 apply -0E+6111 -> #c3ffc000000000000000000000000000 +decq433 apply #c3ffc000000000000000000000000000 -> -0E+6111 +-- clamped zeros... +decq434 apply -0E+6112 -> #c3ffc000000000000000000000000000 Clamped +decq435 apply #c3ffc000000000000000000000000000 -> -0E+6111 +decq436 apply -0E+6144 -> #c3ffc000000000000000000000000000 Clamped +decq437 apply #c3ffc000000000000000000000000000 -> -0E+6111 +decq438 apply -0E+8000 -> #c3ffc000000000000000000000000000 Clamped +decq439 apply #c3ffc000000000000000000000000000 -> -0E+6111 + +-- exponent lengths +decq440 apply #22080000000000000000000000000007 -> 7 +decq441 apply 7 -> #22080000000000000000000000000007 +decq442 apply #220a4000000000000000000000000007 -> 7E+9 +decq443 apply 7E+9 -> #220a4000000000000000000000000007 +decq444 apply #2220c000000000000000000000000007 -> 7E+99 +decq445 apply 7E+99 -> #2220c000000000000000000000000007 +decq446 apply #2301c000000000000000000000000007 -> 7E+999 +decq447 apply 7E+999 -> #2301c000000000000000000000000007 +decq448 apply #43e3c000000000000000000000000007 -> 7E+5999 +decq449 apply 7E+5999 -> #43e3c000000000000000000000000007 + +-- Specials +decq500 apply Infinity -> #78000000000000000000000000000000 +decq501 apply #78787878787878787878787878787878 -> #78000000000000000000000000000000 +decq502 apply #78000000000000000000000000000000 -> Infinity +decq503 apply #79797979797979797979797979797979 -> #78000000000000000000000000000000 +decq504 apply #79000000000000000000000000000000 -> Infinity +decq505 apply #7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a -> #78000000000000000000000000000000 +decq506 apply #7a000000000000000000000000000000 -> Infinity +decq507 apply #7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b -> #78000000000000000000000000000000 +decq508 apply #7b000000000000000000000000000000 -> Infinity + +decq509 apply NaN -> #7c000000000000000000000000000000 +decq510 apply #7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c -> #7c003c7c7c7c7c7c7c7c7c7c7c7c7c7c +decq511 apply #7c000000000000000000000000000000 -> NaN +decq512 apply #7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d -> #7c003d7d7d7d7d7d7d7d7d7d7d7d7d7d +decq513 apply #7d000000000000000000000000000000 -> NaN +decq514 apply #7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e -> #7e003e7e7c7e7e7e7e7c7e7e7e7e7c7e +decq515 apply #7e000000000000000000000000000000 -> sNaN +decq516 apply #7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f -> #7e003f7f7c7f7f7f7f7c7f7f7f7f7c7f +decq517 apply #7f000000000000000000000000000000 -> sNaN +decq518 apply #7fffffffffffffffffffffffffffffff -> sNaN999999999999999999999999999999999 +decq519 apply #7fffffffffffffffffffffffffffffff -> #7e000ff3fcff3fcff3fcff3fcff3fcff + +decq520 apply -Infinity -> #f8000000000000000000000000000000 +decq521 apply #f8787878787878787878787878787878 -> #f8000000000000000000000000000000 +decq522 apply #f8000000000000000000000000000000 -> -Infinity +decq523 apply #f9797979797979797979797979797979 -> #f8000000000000000000000000000000 +decq524 apply #f9000000000000000000000000000000 -> -Infinity +decq525 apply #fa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a -> #f8000000000000000000000000000000 +decq526 apply #fa000000000000000000000000000000 -> -Infinity +decq527 apply #fb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b -> #f8000000000000000000000000000000 +decq528 apply #fb000000000000000000000000000000 -> -Infinity + +decq529 apply -NaN -> #fc000000000000000000000000000000 +decq530 apply #fc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c -> #fc003c7c7c7c7c7c7c7c7c7c7c7c7c7c +decq531 apply #fc000000000000000000000000000000 -> -NaN +decq532 apply #fd7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d -> #fc003d7d7d7d7d7d7d7d7d7d7d7d7d7d +decq533 apply #fd000000000000000000000000000000 -> -NaN +decq534 apply #fe7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e -> #fe003e7e7c7e7e7e7e7c7e7e7e7e7c7e +decq535 apply #fe000000000000000000000000000000 -> -sNaN +decq536 apply #ff7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f -> #fe003f7f7c7f7f7f7f7c7f7f7f7f7c7f +decq537 apply #ff000000000000000000000000000000 -> -sNaN +decq538 apply #ffffffffffffffffffffffffffffffff -> -sNaN999999999999999999999999999999999 +decq539 apply #ffffffffffffffffffffffffffffffff -> #fe000ff3fcff3fcff3fcff3fcff3fcff + +decq540 apply NaN -> #7c000000000000000000000000000000 +decq541 apply NaN0 -> #7c000000000000000000000000000000 +decq542 apply NaN1 -> #7c000000000000000000000000000001 +decq543 apply NaN12 -> #7c000000000000000000000000000012 +decq544 apply NaN79 -> #7c000000000000000000000000000079 +decq545 apply NaN12345 -> #7c0000000000000000000000000049c5 +decq546 apply NaN123456 -> #7c000000000000000000000000028e56 +decq547 apply NaN799799 -> #7c0000000000000000000000000f7fdf +decq548 apply NaN799799799799799799799799799799799 -> #7c003dff7fdff7fdff7fdff7fdff7fdf +decq549 apply NaN999999999999999999999999999999999 -> #7c000ff3fcff3fcff3fcff3fcff3fcff +decq550 apply 9999999999999999999999999999999999 -> #6e080ff3fcff3fcff3fcff3fcff3fcff + +-- fold-down full sequence +decq601 apply 1E+6144 -> #47ffc000000000000000000000000000 Clamped +decq602 apply #47ffc000000000000000000000000000 -> 1.000000000000000000000000000000000E+6144 +decq603 apply 1E+6143 -> #43ffc800000000000000000000000000 Clamped +decq604 apply #43ffc800000000000000000000000000 -> 1.00000000000000000000000000000000E+6143 +decq605 apply 1E+6142 -> #43ffc100000000000000000000000000 Clamped +decq606 apply #43ffc100000000000000000000000000 -> 1.0000000000000000000000000000000E+6142 +decq607 apply 1E+6141 -> #43ffc010000000000000000000000000 Clamped +decq608 apply #43ffc010000000000000000000000000 -> 1.000000000000000000000000000000E+6141 +decq609 apply 1E+6140 -> #43ffc002000000000000000000000000 Clamped +decq610 apply #43ffc002000000000000000000000000 -> 1.00000000000000000000000000000E+6140 +decq611 apply 1E+6139 -> #43ffc000400000000000000000000000 Clamped +decq612 apply #43ffc000400000000000000000000000 -> 1.0000000000000000000000000000E+6139 +decq613 apply 1E+6138 -> #43ffc000040000000000000000000000 Clamped +decq614 apply #43ffc000040000000000000000000000 -> 1.000000000000000000000000000E+6138 +decq615 apply 1E+6137 -> #43ffc000008000000000000000000000 Clamped +decq616 apply #43ffc000008000000000000000000000 -> 1.00000000000000000000000000E+6137 +decq617 apply 1E+6136 -> #43ffc000001000000000000000000000 Clamped +decq618 apply #43ffc000001000000000000000000000 -> 1.0000000000000000000000000E+6136 +decq619 apply 1E+6135 -> #43ffc000000100000000000000000000 Clamped +decq620 apply #43ffc000000100000000000000000000 -> 1.000000000000000000000000E+6135 +decq621 apply 1E+6134 -> #43ffc000000020000000000000000000 Clamped +decq622 apply #43ffc000000020000000000000000000 -> 1.00000000000000000000000E+6134 +decq623 apply 1E+6133 -> #43ffc000000004000000000000000000 Clamped +decq624 apply #43ffc000000004000000000000000000 -> 1.0000000000000000000000E+6133 +decq625 apply 1E+6132 -> #43ffc000000000400000000000000000 Clamped +decq626 apply #43ffc000000000400000000000000000 -> 1.000000000000000000000E+6132 +decq627 apply 1E+6131 -> #43ffc000000000080000000000000000 Clamped +decq628 apply #43ffc000000000080000000000000000 -> 1.00000000000000000000E+6131 +decq629 apply 1E+6130 -> #43ffc000000000010000000000000000 Clamped +decq630 apply #43ffc000000000010000000000000000 -> 1.0000000000000000000E+6130 +decq631 apply 1E+6129 -> #43ffc000000000001000000000000000 Clamped +decq632 apply #43ffc000000000001000000000000000 -> 1.000000000000000000E+6129 +decq633 apply 1E+6128 -> #43ffc000000000000200000000000000 Clamped +decq634 apply #43ffc000000000000200000000000000 -> 1.00000000000000000E+6128 +decq635 apply 1E+6127 -> #43ffc000000000000040000000000000 Clamped +decq636 apply #43ffc000000000000040000000000000 -> 1.0000000000000000E+6127 +decq637 apply 1E+6126 -> #43ffc000000000000004000000000000 Clamped +decq638 apply #43ffc000000000000004000000000000 -> 1.000000000000000E+6126 +decq639 apply 1E+6125 -> #43ffc000000000000000800000000000 Clamped +decq640 apply #43ffc000000000000000800000000000 -> 1.00000000000000E+6125 +decq641 apply 1E+6124 -> #43ffc000000000000000100000000000 Clamped +decq642 apply #43ffc000000000000000100000000000 -> 1.0000000000000E+6124 +decq643 apply 1E+6123 -> #43ffc000000000000000010000000000 Clamped +decq644 apply #43ffc000000000000000010000000000 -> 1.000000000000E+6123 +decq645 apply 1E+6122 -> #43ffc000000000000000002000000000 Clamped +decq646 apply #43ffc000000000000000002000000000 -> 1.00000000000E+6122 +decq647 apply 1E+6121 -> #43ffc000000000000000000400000000 Clamped +decq648 apply #43ffc000000000000000000400000000 -> 1.0000000000E+6121 +decq649 apply 1E+6120 -> #43ffc000000000000000000040000000 Clamped +decq650 apply #43ffc000000000000000000040000000 -> 1.000000000E+6120 +decq651 apply 1E+6119 -> #43ffc000000000000000000008000000 Clamped +decq652 apply #43ffc000000000000000000008000000 -> 1.00000000E+6119 +decq653 apply 1E+6118 -> #43ffc000000000000000000001000000 Clamped +decq654 apply #43ffc000000000000000000001000000 -> 1.0000000E+6118 +decq655 apply 1E+6117 -> #43ffc000000000000000000000100000 Clamped +decq656 apply #43ffc000000000000000000000100000 -> 1.000000E+6117 +decq657 apply 1E+6116 -> #43ffc000000000000000000000020000 Clamped +decq658 apply #43ffc000000000000000000000020000 -> 1.00000E+6116 +decq659 apply 1E+6115 -> #43ffc000000000000000000000004000 Clamped +decq660 apply #43ffc000000000000000000000004000 -> 1.0000E+6115 +decq661 apply 1E+6114 -> #43ffc000000000000000000000000400 Clamped +decq662 apply #43ffc000000000000000000000000400 -> 1.000E+6114 +decq663 apply 1E+6113 -> #43ffc000000000000000000000000080 Clamped +decq664 apply #43ffc000000000000000000000000080 -> 1.00E+6113 +decq665 apply 1E+6112 -> #43ffc000000000000000000000000010 Clamped +decq666 apply #43ffc000000000000000000000000010 -> 1.0E+6112 +decq667 apply 1E+6111 -> #43ffc000000000000000000000000001 +decq668 apply #43ffc000000000000000000000000001 -> 1E+6111 +decq669 apply 1E+6110 -> #43ff8000000000000000000000000001 +decq670 apply #43ff8000000000000000000000000001 -> 1E+6110 + +-- Selected DPD codes +decq700 apply #22080000000000000000000000000000 -> 0 +decq701 apply #22080000000000000000000000000009 -> 9 +decq702 apply #22080000000000000000000000000010 -> 10 +decq703 apply #22080000000000000000000000000019 -> 19 +decq704 apply #22080000000000000000000000000020 -> 20 +decq705 apply #22080000000000000000000000000029 -> 29 +decq706 apply #22080000000000000000000000000030 -> 30 +decq707 apply #22080000000000000000000000000039 -> 39 +decq708 apply #22080000000000000000000000000040 -> 40 +decq709 apply #22080000000000000000000000000049 -> 49 +decq710 apply #22080000000000000000000000000050 -> 50 +decq711 apply #22080000000000000000000000000059 -> 59 +decq712 apply #22080000000000000000000000000060 -> 60 +decq713 apply #22080000000000000000000000000069 -> 69 +decq714 apply #22080000000000000000000000000070 -> 70 +decq715 apply #22080000000000000000000000000071 -> 71 +decq716 apply #22080000000000000000000000000072 -> 72 +decq717 apply #22080000000000000000000000000073 -> 73 +decq718 apply #22080000000000000000000000000074 -> 74 +decq719 apply #22080000000000000000000000000075 -> 75 +decq720 apply #22080000000000000000000000000076 -> 76 +decq721 apply #22080000000000000000000000000077 -> 77 +decq722 apply #22080000000000000000000000000078 -> 78 +decq723 apply #22080000000000000000000000000079 -> 79 + +decq730 apply #2208000000000000000000000000029e -> 994 +decq731 apply #2208000000000000000000000000029f -> 995 +decq732 apply #220800000000000000000000000002a0 -> 520 +decq733 apply #220800000000000000000000000002a1 -> 521 + +-- DPD: one of each of the huffman groups +decq740 apply #220800000000000000000000000003f7 -> 777 +decq741 apply #220800000000000000000000000003f8 -> 778 +decq742 apply #220800000000000000000000000003eb -> 787 +decq743 apply #2208000000000000000000000000037d -> 877 +decq744 apply #2208000000000000000000000000039f -> 997 +decq745 apply #220800000000000000000000000003bf -> 979 +decq746 apply #220800000000000000000000000003df -> 799 +decq747 apply #2208000000000000000000000000006e -> 888 + + +-- DPD all-highs cases (includes the 24 redundant codes) +decq750 apply #2208000000000000000000000000006e -> 888 +decq751 apply #2208000000000000000000000000016e -> 888 +decq752 apply #2208000000000000000000000000026e -> 888 +decq753 apply #2208000000000000000000000000036e -> 888 +decq754 apply #2208000000000000000000000000006f -> 889 +decq755 apply #2208000000000000000000000000016f -> 889 +decq756 apply #2208000000000000000000000000026f -> 889 +decq757 apply #2208000000000000000000000000036f -> 889 + +decq760 apply #2208000000000000000000000000007e -> 898 +decq761 apply #2208000000000000000000000000017e -> 898 +decq762 apply #2208000000000000000000000000027e -> 898 +decq763 apply #2208000000000000000000000000037e -> 898 +decq764 apply #2208000000000000000000000000007f -> 899 +decq765 apply #2208000000000000000000000000017f -> 899 +decq766 apply #2208000000000000000000000000027f -> 899 +decq767 apply #2208000000000000000000000000037f -> 899 + +decq770 apply #220800000000000000000000000000ee -> 988 +decq771 apply #220800000000000000000000000001ee -> 988 +decq772 apply #220800000000000000000000000002ee -> 988 +decq773 apply #220800000000000000000000000003ee -> 988 +decq774 apply #220800000000000000000000000000ef -> 989 +decq775 apply #220800000000000000000000000001ef -> 989 +decq776 apply #220800000000000000000000000002ef -> 989 +decq777 apply #220800000000000000000000000003ef -> 989 + +decq780 apply #220800000000000000000000000000fe -> 998 +decq781 apply #220800000000000000000000000001fe -> 998 +decq782 apply #220800000000000000000000000002fe -> 998 +decq783 apply #220800000000000000000000000003fe -> 998 +decq784 apply #220800000000000000000000000000ff -> 999 +decq785 apply #220800000000000000000000000001ff -> 999 +decq786 apply #220800000000000000000000000002ff -> 999 +decq787 apply #220800000000000000000000000003ff -> 999 + +-- Miscellaneous (testers' queries, etc.) + +decq790 apply #2208000000000000000000000000c000 -> 30000 +decq791 apply #22080000000000000000000000007800 -> 890000 +decq792 apply 30000 -> #2208000000000000000000000000c000 +decq793 apply 890000 -> #22080000000000000000000000007800 + +-- values around [u]int32 edges (zeros done earlier) +decq800 apply -2147483646 -> #a208000000000000000000008c78af46 +decq801 apply -2147483647 -> #a208000000000000000000008c78af47 +decq802 apply -2147483648 -> #a208000000000000000000008c78af48 +decq803 apply -2147483649 -> #a208000000000000000000008c78af49 +decq804 apply 2147483646 -> #2208000000000000000000008c78af46 +decq805 apply 2147483647 -> #2208000000000000000000008c78af47 +decq806 apply 2147483648 -> #2208000000000000000000008c78af48 +decq807 apply 2147483649 -> #2208000000000000000000008c78af49 +decq808 apply 4294967294 -> #22080000000000000000000115afb55a +decq809 apply 4294967295 -> #22080000000000000000000115afb55b +decq810 apply 4294967296 -> #22080000000000000000000115afb57a +decq811 apply 4294967297 -> #22080000000000000000000115afb57b + +decq820 apply #a208000000000000000000008c78af46 -> -2147483646 +decq821 apply #a208000000000000000000008c78af47 -> -2147483647 +decq822 apply #a208000000000000000000008c78af48 -> -2147483648 +decq823 apply #a208000000000000000000008c78af49 -> -2147483649 +decq824 apply #2208000000000000000000008c78af46 -> 2147483646 +decq825 apply #2208000000000000000000008c78af47 -> 2147483647 +decq826 apply #2208000000000000000000008c78af48 -> 2147483648 +decq827 apply #2208000000000000000000008c78af49 -> 2147483649 +decq828 apply #22080000000000000000000115afb55a -> 4294967294 +decq829 apply #22080000000000000000000115afb55b -> 4294967295 +decq830 apply #22080000000000000000000115afb57a -> 4294967296 +decq831 apply #22080000000000000000000115afb57b -> 4294967297 + +-- VG testcase +decq840 apply #2080000000000000F294000000172636 -> 8.81125000000001349436E-1548 +decq841 apply #20800000000000008000000000000000 -> 8.000000000000000000E-1550 +decq842 apply #1EF98490000000010F6E4E0000000000 -> 7.049000000000010795488000000000000E-3097 +decq843 multiply #20800000000000008000000000000000 #2080000000000000F294000000172636 -> #1EF98490000000010F6E4E0000000000 Rounded + diff --git a/Lib/test/decimaltestdata/dqFMA.decTest b/Lib/test/decimaltestdata/dqFMA.decTest index 8190f444c37..caa24025a75 100644 --- a/Lib/test/decimaltestdata/dqFMA.decTest +++ b/Lib/test/decimaltestdata/dqFMA.decTest @@ -1,1786 +1,1786 @@ ------------------------------------------------------------------------- --- dqFMA.decTest -- decQuad Fused Multiply Add -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- These tests comprise three parts: --- 1. Sanity checks and other three-operand tests (especially those --- where the fused operation makes a difference) --- 2. Multiply tests (third operand is neutral zero [0E+emax]) --- 3. Addition tests (first operand is 1) --- The multiply and addition tests are extensive because FMA may have --- its own dedicated multiplication or addition routine(s), and they --- also inherently check the left-to-right properties. - --- Sanity checks -dqfma0001 fma 1 1 1 -> 2 -dqfma0002 fma 1 1 2 -> 3 -dqfma0003 fma 2 2 3 -> 7 -dqfma0004 fma 9 9 9 -> 90 -dqfma0005 fma -1 1 1 -> 0 -dqfma0006 fma -1 1 2 -> 1 -dqfma0007 fma -2 2 3 -> -1 -dqfma0008 fma -9 9 9 -> -72 -dqfma0011 fma 1 -1 1 -> 0 -dqfma0012 fma 1 -1 2 -> 1 -dqfma0013 fma 2 -2 3 -> -1 -dqfma0014 fma 9 -9 9 -> -72 -dqfma0015 fma 1 1 -1 -> 0 -dqfma0016 fma 1 1 -2 -> -1 -dqfma0017 fma 2 2 -3 -> 1 -dqfma0018 fma 9 9 -9 -> 72 - --- non-integer exacts -dqfma0100 fma 25.2 63.6 -438 -> 1164.72 -dqfma0101 fma 0.301 0.380 334 -> 334.114380 -dqfma0102 fma 49.2 -4.8 23.3 -> -212.86 -dqfma0103 fma 4.22 0.079 -94.6 -> -94.26662 -dqfma0104 fma 903 0.797 0.887 -> 720.578 -dqfma0105 fma 6.13 -161 65.9 -> -921.03 -dqfma0106 fma 28.2 727 5.45 -> 20506.85 -dqfma0107 fma 4 605 688 -> 3108 -dqfma0108 fma 93.3 0.19 0.226 -> 17.953 -dqfma0109 fma 0.169 -341 5.61 -> -52.019 -dqfma0110 fma -72.2 30 -51.2 -> -2217.2 -dqfma0111 fma -0.409 13 20.4 -> 15.083 -dqfma0112 fma 317 77.0 19.0 -> 24428.0 -dqfma0113 fma 47 6.58 1.62 -> 310.88 -dqfma0114 fma 1.36 0.984 0.493 -> 1.83124 -dqfma0115 fma 72.7 274 1.56 -> 19921.36 -dqfma0116 fma 335 847 83 -> 283828 -dqfma0117 fma 666 0.247 25.4 -> 189.902 -dqfma0118 fma -3.87 3.06 78.0 -> 66.1578 -dqfma0119 fma 0.742 192 35.6 -> 178.064 -dqfma0120 fma -91.6 5.29 0.153 -> -484.411 - --- cases where result is different from separate multiply + add; each --- is preceded by the result of unfused multiply and add --- [this is about 20% of all similar cases in general] --- -> 4.500119002100000209469729375698778E+38 -dqfma0202 fma 68537985861355864457.5694 6565875762972086605.85969 35892634447236753.172812 -> 4.500119002100000209469729375698779E+38 Inexact Rounded --- -> 5.996248469584594346858881620185514E+41 -dqfma0208 fma 89261822344727628571.9 6717595845654131383336.89 5061036497288796076266.11 -> 5.996248469584594346858881620185513E+41 Inexact Rounded --- -> 1.899242968678256924021594770874070E+34 -dqfma0210 fma 320506237232448685.495971 59257597764017967.984448 3205615239077711589912.85 -> 1.899242968678256924021594770874071E+34 Inexact Rounded --- -> 7.078596978842809537929699954860309E+37 -dqfma0215 fma 220247843259112263.17995 321392340287987979002.80 47533279819997167655440 -> 7.078596978842809537929699954860308E+37 Inexact Rounded --- -> 1.224955667581427559754106862350743E+37 -dqfma0226 fma 23880729790368880412.1449 512947333827064719.55407 217117438419590824502.963 -> 1.224955667581427559754106862350744E+37 Inexact Rounded --- -> -2.530094043253148806272276368579144E+42 -dqfma0229 fma 2539892357016099706.4126 -996142232667504817717435 53682082598315949425.937 -> -2.530094043253148806272276368579143E+42 Inexact Rounded --- -> 1.713387085759711954319391412788454E+37 -dqfma0233 fma 4546339491341624464.0804 3768717864169205581 83578980278690395184.620 -> 1.713387085759711954319391412788453E+37 Inexact Rounded --- -> 4.062275663405823716411579117771547E+35 -dqfma0235 fma 409242119433816131.42253 992633815166741501.477249 70179636544416756129546 -> 4.062275663405823716411579117771548E+35 Inexact Rounded --- -> 6.002604327732568490562249875306823E+47 -dqfma0258 fma 817941336593541742159684 733867339769310729266598 78563844650942419311830.8 -> 6.002604327732568490562249875306822E+47 Inexact Rounded --- -> -2.027022514381452197510103395283874E+39 -dqfma0264 fma 387617310169161270.737532 -5229442703414956061216.62 57665666816652967150473.5 -> -2.027022514381452197510103395283873E+39 Inexact Rounded --- -> -7.856525039803554001144089842730361E+37 -dqfma0267 fma -847655845720565274701.210 92685316564117739.83984 22780950041376424429.5686 -> -7.856525039803554001144089842730360E+37 Inexact Rounded --- -> 1.695515562011520746125607502237559E+38 -dqfma0268 fma 21590290365127685.3675 7853139227576541379426.8 -3275859437236180.761544 -> 1.695515562011520746125607502237558E+38 Inexact Rounded --- -> -8.448422935783289219748115038014710E+38 -dqfma0269 fma -974320636272862697.971586 867109103641860247440.756 -9775170775902454762.98 -> -8.448422935783289219748115038014709E+38 Inexact Rounded - --- Cases where multiply would overflow or underflow if separate -dqfma0300 fma 9e+6144 10 0 -> Infinity Overflow Inexact Rounded -dqfma0301 fma 1e+6144 10 0 -> Infinity Overflow Inexact Rounded -dqfma0302 fma 1e+6144 10 -1e+6144 -> 9.000000000000000000000000000000000E+6144 Clamped -dqfma0303 fma 1e+6144 10 -9e+6144 -> 1.000000000000000000000000000000000E+6144 Clamped --- subnormal etc. -dqfma0305 fma 1e-6176 0.1 0 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma0306 fma 1e-6176 0.1 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqfma0307 fma 1e-6176 0.1 1e-6176 -> 1E-6176 Underflow Subnormal Inexact Rounded - --- Infinite combinations -dqfma0800 fma Inf Inf Inf -> Infinity -dqfma0801 fma Inf Inf -Inf -> NaN Invalid_operation -dqfma0802 fma Inf -Inf Inf -> NaN Invalid_operation -dqfma0803 fma Inf -Inf -Inf -> -Infinity -dqfma0804 fma -Inf Inf Inf -> NaN Invalid_operation -dqfma0805 fma -Inf Inf -Inf -> -Infinity -dqfma0806 fma -Inf -Inf Inf -> Infinity -dqfma0807 fma -Inf -Inf -Inf -> NaN Invalid_operation - --- Triple NaN propagation -dqfma0900 fma NaN2 NaN3 NaN5 -> NaN2 -dqfma0901 fma 0 NaN3 NaN5 -> NaN3 -dqfma0902 fma 0 0 NaN5 -> NaN5 --- first sNaN wins (consider qNaN from earlier sNaN being --- overridden by an sNaN in third operand) -dqfma0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -dqfma0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation -dqfma0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation -dqfma0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -dqfma0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation -dqfma0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation - --- MULTIPLICATION TESTS ------------------------------------------------ -rounding: half_even - --- sanity checks -dqfma2000 fma 2 2 0e+6144 -> 4 -dqfma2001 fma 2 3 0e+6144 -> 6 -dqfma2002 fma 5 1 0e+6144 -> 5 -dqfma2003 fma 5 2 0e+6144 -> 10 -dqfma2004 fma 1.20 2 0e+6144 -> 2.40 -dqfma2005 fma 1.20 0 0e+6144 -> 0.00 -dqfma2006 fma 1.20 -2 0e+6144 -> -2.40 -dqfma2007 fma -1.20 2 0e+6144 -> -2.40 -dqfma2008 fma -1.20 0 0e+6144 -> 0.00 -dqfma2009 fma -1.20 -2 0e+6144 -> 2.40 -dqfma2010 fma 5.09 7.1 0e+6144 -> 36.139 -dqfma2011 fma 2.5 4 0e+6144 -> 10.0 -dqfma2012 fma 2.50 4 0e+6144 -> 10.00 -dqfma2013 fma 1.23456789 1.0000000000000000000000000000 0e+6144 -> 1.234567890000000000000000000000000 Rounded -dqfma2015 fma 2.50 4 0e+6144 -> 10.00 -dqfma2016 fma 9.99999999999999999 9.99999999999999999 0e+6144 -> 99.99999999999999980000000000000000 Inexact Rounded -dqfma2017 fma 9.99999999999999999 -9.99999999999999999 0e+6144 -> -99.99999999999999980000000000000000 Inexact Rounded -dqfma2018 fma -9.99999999999999999 9.99999999999999999 0e+6144 -> -99.99999999999999980000000000000000 Inexact Rounded -dqfma2019 fma -9.99999999999999999 -9.99999999999999999 0e+6144 -> 99.99999999999999980000000000000000 Inexact Rounded - --- zeros, etc. -dqfma2021 fma 0 0 0e+6144 -> 0 -dqfma2022 fma 0 -0 0e+6144 -> 0 -dqfma2023 fma -0 0 0e+6144 -> 0 -dqfma2024 fma -0 -0 0e+6144 -> 0 -dqfma2025 fma -0.0 -0.0 0e+6144 -> 0.00 -dqfma2026 fma -0.0 -0.0 0e+6144 -> 0.00 -dqfma2027 fma -0.0 -0.0 0e+6144 -> 0.00 -dqfma2028 fma -0.0 -0.0 0e+6144 -> 0.00 -dqfma2030 fma 5.00 1E-3 0e+6144 -> 0.00500 -dqfma2031 fma 00.00 0.000 0e+6144 -> 0.00000 -dqfma2032 fma 00.00 0E-3 0e+6144 -> 0.00000 -- rhs is 0 -dqfma2033 fma 0E-3 00.00 0e+6144 -> 0.00000 -- lhs is 0 -dqfma2034 fma -5.00 1E-3 0e+6144 -> -0.00500 -dqfma2035 fma -00.00 0.000 0e+6144 -> 0.00000 -dqfma2036 fma -00.00 0E-3 0e+6144 -> 0.00000 -- rhs is 0 -dqfma2037 fma -0E-3 00.00 0e+6144 -> 0.00000 -- lhs is 0 -dqfma2038 fma 5.00 -1E-3 0e+6144 -> -0.00500 -dqfma2039 fma 00.00 -0.000 0e+6144 -> 0.00000 -dqfma2040 fma 00.00 -0E-3 0e+6144 -> 0.00000 -- rhs is 0 -dqfma2041 fma 0E-3 -00.00 0e+6144 -> 0.00000 -- lhs is 0 -dqfma2042 fma -5.00 -1E-3 0e+6144 -> 0.00500 -dqfma2043 fma -00.00 -0.000 0e+6144 -> 0.00000 -dqfma2044 fma -00.00 -0E-3 0e+6144 -> 0.00000 -- rhs is 0 -dqfma2045 fma -0E-3 -00.00 0e+6144 -> 0.00000 -- lhs is 0 - --- examples from decarith -dqfma2050 fma 1.20 3 0e+6144 -> 3.60 -dqfma2051 fma 7 3 0e+6144 -> 21 -dqfma2052 fma 0.9 0.8 0e+6144 -> 0.72 -dqfma2053 fma 0.9 -0 0e+6144 -> 0.0 -dqfma2054 fma 654321 654321 0e+6144 -> 428135971041 - -dqfma2060 fma 123.45 1e7 0e+6144 -> 1.2345E+9 -dqfma2061 fma 123.45 1e8 0e+6144 -> 1.2345E+10 -dqfma2062 fma 123.45 1e+9 0e+6144 -> 1.2345E+11 -dqfma2063 fma 123.45 1e10 0e+6144 -> 1.2345E+12 -dqfma2064 fma 123.45 1e11 0e+6144 -> 1.2345E+13 -dqfma2065 fma 123.45 1e12 0e+6144 -> 1.2345E+14 -dqfma2066 fma 123.45 1e13 0e+6144 -> 1.2345E+15 - - --- test some intermediate lengths --- 1234567890123456 -dqfma2080 fma 0.1 1230123456456789 0e+6144 -> 123012345645678.9 -dqfma2084 fma 0.1 1230123456456789 0e+6144 -> 123012345645678.9 -dqfma2090 fma 1230123456456789 0.1 0e+6144 -> 123012345645678.9 -dqfma2094 fma 1230123456456789 0.1 0e+6144 -> 123012345645678.9 - --- test some more edge cases and carries -dqfma2101 fma 9 9 0e+6144 -> 81 -dqfma2102 fma 9 90 0e+6144 -> 810 -dqfma2103 fma 9 900 0e+6144 -> 8100 -dqfma2104 fma 9 9000 0e+6144 -> 81000 -dqfma2105 fma 9 90000 0e+6144 -> 810000 -dqfma2106 fma 9 900000 0e+6144 -> 8100000 -dqfma2107 fma 9 9000000 0e+6144 -> 81000000 -dqfma2108 fma 9 90000000 0e+6144 -> 810000000 -dqfma2109 fma 9 900000000 0e+6144 -> 8100000000 -dqfma2110 fma 9 9000000000 0e+6144 -> 81000000000 -dqfma2111 fma 9 90000000000 0e+6144 -> 810000000000 -dqfma2112 fma 9 900000000000 0e+6144 -> 8100000000000 -dqfma2113 fma 9 9000000000000 0e+6144 -> 81000000000000 -dqfma2114 fma 9 90000000000000 0e+6144 -> 810000000000000 -dqfma2115 fma 9 900000000000000 0e+6144 -> 8100000000000000 ---dqfma2116 fma 9 9000000000000000 0e+6144 -> 81000000000000000 ---dqfma2117 fma 9 90000000000000000 0e+6144 -> 810000000000000000 ---dqfma2118 fma 9 900000000000000000 0e+6144 -> 8100000000000000000 ---dqfma2119 fma 9 9000000000000000000 0e+6144 -> 81000000000000000000 ---dqfma2120 fma 9 90000000000000000000 0e+6144 -> 810000000000000000000 ---dqfma2121 fma 9 900000000000000000000 0e+6144 -> 8100000000000000000000 ---dqfma2122 fma 9 9000000000000000000000 0e+6144 -> 81000000000000000000000 ---dqfma2123 fma 9 90000000000000000000000 0e+6144 -> 810000000000000000000000 --- test some more edge cases without carries -dqfma2131 fma 3 3 0e+6144 -> 9 -dqfma2132 fma 3 30 0e+6144 -> 90 -dqfma2133 fma 3 300 0e+6144 -> 900 -dqfma2134 fma 3 3000 0e+6144 -> 9000 -dqfma2135 fma 3 30000 0e+6144 -> 90000 -dqfma2136 fma 3 300000 0e+6144 -> 900000 -dqfma2137 fma 3 3000000 0e+6144 -> 9000000 -dqfma2138 fma 3 30000000 0e+6144 -> 90000000 -dqfma2139 fma 3 300000000 0e+6144 -> 900000000 -dqfma2140 fma 3 3000000000 0e+6144 -> 9000000000 -dqfma2141 fma 3 30000000000 0e+6144 -> 90000000000 -dqfma2142 fma 3 300000000000 0e+6144 -> 900000000000 -dqfma2143 fma 3 3000000000000 0e+6144 -> 9000000000000 -dqfma2144 fma 3 30000000000000 0e+6144 -> 90000000000000 -dqfma2145 fma 3 300000000000000 0e+6144 -> 900000000000000 -dqfma2146 fma 3 3000000000000000 0e+6144 -> 9000000000000000 -dqfma2147 fma 3 30000000000000000 0e+6144 -> 90000000000000000 -dqfma2148 fma 3 300000000000000000 0e+6144 -> 900000000000000000 -dqfma2149 fma 3 3000000000000000000 0e+6144 -> 9000000000000000000 -dqfma2150 fma 3 30000000000000000000 0e+6144 -> 90000000000000000000 -dqfma2151 fma 3 300000000000000000000 0e+6144 -> 900000000000000000000 -dqfma2152 fma 3 3000000000000000000000 0e+6144 -> 9000000000000000000000 -dqfma2153 fma 3 30000000000000000000000 0e+6144 -> 90000000000000000000000 - -dqfma2263 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0e+6144 -> 145433.2908011933696719165119928296 Inexact Rounded - --- test some edge cases with exact rounding -dqfma2301 fma 900000000000000000 9 0e+6144 -> 8100000000000000000 -dqfma2302 fma 900000000000000000 90 0e+6144 -> 81000000000000000000 -dqfma2303 fma 900000000000000000 900 0e+6144 -> 810000000000000000000 -dqfma2304 fma 900000000000000000 9000 0e+6144 -> 8100000000000000000000 -dqfma2305 fma 900000000000000000 90000 0e+6144 -> 81000000000000000000000 -dqfma2306 fma 900000000000000000 900000 0e+6144 -> 810000000000000000000000 -dqfma2307 fma 900000000000000000 9000000 0e+6144 -> 8100000000000000000000000 -dqfma2308 fma 900000000000000000 90000000 0e+6144 -> 81000000000000000000000000 -dqfma2309 fma 900000000000000000 900000000 0e+6144 -> 810000000000000000000000000 -dqfma2310 fma 900000000000000000 9000000000 0e+6144 -> 8100000000000000000000000000 -dqfma2311 fma 900000000000000000 90000000000 0e+6144 -> 81000000000000000000000000000 -dqfma2312 fma 900000000000000000 900000000000 0e+6144 -> 810000000000000000000000000000 -dqfma2313 fma 900000000000000000 9000000000000 0e+6144 -> 8100000000000000000000000000000 -dqfma2314 fma 900000000000000000 90000000000000 0e+6144 -> 81000000000000000000000000000000 -dqfma2315 fma 900000000000000000 900000000000000 0e+6144 -> 810000000000000000000000000000000 -dqfma2316 fma 900000000000000000 9000000000000000 0e+6144 -> 8100000000000000000000000000000000 -dqfma2317 fma 9000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+34 Rounded -dqfma2318 fma 90000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+35 Rounded -dqfma2319 fma 900000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+36 Rounded -dqfma2320 fma 9000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+37 Rounded -dqfma2321 fma 90000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+38 Rounded -dqfma2322 fma 900000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+39 Rounded -dqfma2323 fma 9000000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+40 Rounded - --- tryzeros cases -dqfma2504 fma 0E-4260 1000E-4260 0e+6144 -> 0E-6176 Clamped -dqfma2505 fma 100E+4260 0E+4260 0e+6144 -> 0E+6111 Clamped - --- mixed with zeros -dqfma2541 fma 0 -1 0e+6144 -> 0 -dqfma2542 fma -0 -1 0e+6144 -> 0 -dqfma2543 fma 0 1 0e+6144 -> 0 -dqfma2544 fma -0 1 0e+6144 -> 0 -dqfma2545 fma -1 0 0e+6144 -> 0 -dqfma2546 fma -1 -0 0e+6144 -> 0 -dqfma2547 fma 1 0 0e+6144 -> 0 -dqfma2548 fma 1 -0 0e+6144 -> 0 - -dqfma2551 fma 0.0 -1 0e+6144 -> 0.0 -dqfma2552 fma -0.0 -1 0e+6144 -> 0.0 -dqfma2553 fma 0.0 1 0e+6144 -> 0.0 -dqfma2554 fma -0.0 1 0e+6144 -> 0.0 -dqfma2555 fma -1.0 0 0e+6144 -> 0.0 -dqfma2556 fma -1.0 -0 0e+6144 -> 0.0 -dqfma2557 fma 1.0 0 0e+6144 -> 0.0 -dqfma2558 fma 1.0 -0 0e+6144 -> 0.0 - -dqfma2561 fma 0 -1.0 0e+6144 -> 0.0 -dqfma2562 fma -0 -1.0 0e+6144 -> 0.0 -dqfma2563 fma 0 1.0 0e+6144 -> 0.0 -dqfma2564 fma -0 1.0 0e+6144 -> 0.0 -dqfma2565 fma -1 0.0 0e+6144 -> 0.0 -dqfma2566 fma -1 -0.0 0e+6144 -> 0.0 -dqfma2567 fma 1 0.0 0e+6144 -> 0.0 -dqfma2568 fma 1 -0.0 0e+6144 -> 0.0 - -dqfma2571 fma 0.0 -1.0 0e+6144 -> 0.00 -dqfma2572 fma -0.0 -1.0 0e+6144 -> 0.00 -dqfma2573 fma 0.0 1.0 0e+6144 -> 0.00 -dqfma2574 fma -0.0 1.0 0e+6144 -> 0.00 -dqfma2575 fma -1.0 0.0 0e+6144 -> 0.00 -dqfma2576 fma -1.0 -0.0 0e+6144 -> 0.00 -dqfma2577 fma 1.0 0.0 0e+6144 -> 0.00 -dqfma2578 fma 1.0 -0.0 0e+6144 -> 0.00 -dqfma2579 fma 1.0 0.0 0e+6144 -> 0.00 -dqfma2530 fma -1.0 -0.0 0e+6144 -> 0.00 -dqfma2531 fma -1.0 0.0 0e+6144 -> 0.00 -dqfma2532 fma 1.0 -0.0 -0e+6144 -> -0.00 -dqfma2533 fma 1.0 0.0 -0e+6144 -> 0.00 -dqfma2534 fma -1.0 -0.0 -0e+6144 -> 0.00 -dqfma2535 fma -1.0 0.0 -0e+6144 -> -0.00 - - --- Specials -dqfma2580 fma Inf -Inf 0e+6144 -> -Infinity -dqfma2581 fma Inf -1000 0e+6144 -> -Infinity -dqfma2582 fma Inf -1 0e+6144 -> -Infinity -dqfma2583 fma Inf -0 0e+6144 -> NaN Invalid_operation -dqfma2584 fma Inf 0 0e+6144 -> NaN Invalid_operation -dqfma2585 fma Inf 1 0e+6144 -> Infinity -dqfma2586 fma Inf 1000 0e+6144 -> Infinity -dqfma2587 fma Inf Inf 0e+6144 -> Infinity -dqfma2588 fma -1000 Inf 0e+6144 -> -Infinity -dqfma2589 fma -Inf Inf 0e+6144 -> -Infinity -dqfma2590 fma -1 Inf 0e+6144 -> -Infinity -dqfma2591 fma -0 Inf 0e+6144 -> NaN Invalid_operation -dqfma2592 fma 0 Inf 0e+6144 -> NaN Invalid_operation -dqfma2593 fma 1 Inf 0e+6144 -> Infinity -dqfma2594 fma 1000 Inf 0e+6144 -> Infinity -dqfma2595 fma Inf Inf 0e+6144 -> Infinity - -dqfma2600 fma -Inf -Inf 0e+6144 -> Infinity -dqfma2601 fma -Inf -1000 0e+6144 -> Infinity -dqfma2602 fma -Inf -1 0e+6144 -> Infinity -dqfma2603 fma -Inf -0 0e+6144 -> NaN Invalid_operation -dqfma2604 fma -Inf 0 0e+6144 -> NaN Invalid_operation -dqfma2605 fma -Inf 1 0e+6144 -> -Infinity -dqfma2606 fma -Inf 1000 0e+6144 -> -Infinity -dqfma2607 fma -Inf Inf 0e+6144 -> -Infinity -dqfma2608 fma -1000 Inf 0e+6144 -> -Infinity -dqfma2609 fma -Inf -Inf 0e+6144 -> Infinity -dqfma2610 fma -1 -Inf 0e+6144 -> Infinity -dqfma2611 fma -0 -Inf 0e+6144 -> NaN Invalid_operation -dqfma2612 fma 0 -Inf 0e+6144 -> NaN Invalid_operation -dqfma2613 fma 1 -Inf 0e+6144 -> -Infinity -dqfma2614 fma 1000 -Inf 0e+6144 -> -Infinity -dqfma2615 fma Inf -Inf 0e+6144 -> -Infinity - -dqfma2621 fma NaN -Inf 0e+6144 -> NaN -dqfma2622 fma NaN -1000 0e+6144 -> NaN -dqfma2623 fma NaN -1 0e+6144 -> NaN -dqfma2624 fma NaN -0 0e+6144 -> NaN -dqfma2625 fma NaN 0 0e+6144 -> NaN -dqfma2626 fma NaN 1 0e+6144 -> NaN -dqfma2627 fma NaN 1000 0e+6144 -> NaN -dqfma2628 fma NaN Inf 0e+6144 -> NaN -dqfma2629 fma NaN NaN 0e+6144 -> NaN -dqfma2630 fma -Inf NaN 0e+6144 -> NaN -dqfma2631 fma -1000 NaN 0e+6144 -> NaN -dqfma2632 fma -1 NaN 0e+6144 -> NaN -dqfma2633 fma -0 NaN 0e+6144 -> NaN -dqfma2634 fma 0 NaN 0e+6144 -> NaN -dqfma2635 fma 1 NaN 0e+6144 -> NaN -dqfma2636 fma 1000 NaN 0e+6144 -> NaN -dqfma2637 fma Inf NaN 0e+6144 -> NaN - -dqfma2641 fma sNaN -Inf 0e+6144 -> NaN Invalid_operation -dqfma2642 fma sNaN -1000 0e+6144 -> NaN Invalid_operation -dqfma2643 fma sNaN -1 0e+6144 -> NaN Invalid_operation -dqfma2644 fma sNaN -0 0e+6144 -> NaN Invalid_operation -dqfma2645 fma sNaN 0 0e+6144 -> NaN Invalid_operation -dqfma2646 fma sNaN 1 0e+6144 -> NaN Invalid_operation -dqfma2647 fma sNaN 1000 0e+6144 -> NaN Invalid_operation -dqfma2648 fma sNaN NaN 0e+6144 -> NaN Invalid_operation -dqfma2649 fma sNaN sNaN 0e+6144 -> NaN Invalid_operation -dqfma2650 fma NaN sNaN 0e+6144 -> NaN Invalid_operation -dqfma2651 fma -Inf sNaN 0e+6144 -> NaN Invalid_operation -dqfma2652 fma -1000 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2653 fma -1 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2654 fma -0 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2655 fma 0 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2656 fma 1 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2657 fma 1000 sNaN 0e+6144 -> NaN Invalid_operation -dqfma2658 fma Inf sNaN 0e+6144 -> NaN Invalid_operation -dqfma2659 fma NaN sNaN 0e+6144 -> NaN Invalid_operation - --- propagating NaNs -dqfma2661 fma NaN9 -Inf 0e+6144 -> NaN9 -dqfma2662 fma NaN8 999 0e+6144 -> NaN8 -dqfma2663 fma NaN71 Inf 0e+6144 -> NaN71 -dqfma2664 fma NaN6 NaN5 0e+6144 -> NaN6 -dqfma2665 fma -Inf NaN4 0e+6144 -> NaN4 -dqfma2666 fma -999 NaN33 0e+6144 -> NaN33 -dqfma2667 fma Inf NaN2 0e+6144 -> NaN2 - -dqfma2671 fma sNaN99 -Inf 0e+6144 -> NaN99 Invalid_operation -dqfma2672 fma sNaN98 -11 0e+6144 -> NaN98 Invalid_operation -dqfma2673 fma sNaN97 NaN 0e+6144 -> NaN97 Invalid_operation -dqfma2674 fma sNaN16 sNaN94 0e+6144 -> NaN16 Invalid_operation -dqfma2675 fma NaN95 sNaN93 0e+6144 -> NaN93 Invalid_operation -dqfma2676 fma -Inf sNaN92 0e+6144 -> NaN92 Invalid_operation -dqfma2677 fma 088 sNaN91 0e+6144 -> NaN91 Invalid_operation -dqfma2678 fma Inf sNaN90 0e+6144 -> NaN90 Invalid_operation -dqfma2679 fma NaN sNaN89 0e+6144 -> NaN89 Invalid_operation - -dqfma2681 fma -NaN9 -Inf 0e+6144 -> -NaN9 -dqfma2682 fma -NaN8 999 0e+6144 -> -NaN8 -dqfma2683 fma -NaN71 Inf 0e+6144 -> -NaN71 -dqfma2684 fma -NaN6 -NaN5 0e+6144 -> -NaN6 -dqfma2685 fma -Inf -NaN4 0e+6144 -> -NaN4 -dqfma2686 fma -999 -NaN33 0e+6144 -> -NaN33 -dqfma2687 fma Inf -NaN2 0e+6144 -> -NaN2 - -dqfma2691 fma -sNaN99 -Inf 0e+6144 -> -NaN99 Invalid_operation -dqfma2692 fma -sNaN98 -11 0e+6144 -> -NaN98 Invalid_operation -dqfma2693 fma -sNaN97 NaN 0e+6144 -> -NaN97 Invalid_operation -dqfma2694 fma -sNaN16 -sNaN94 0e+6144 -> -NaN16 Invalid_operation -dqfma2695 fma -NaN95 -sNaN93 0e+6144 -> -NaN93 Invalid_operation -dqfma2696 fma -Inf -sNaN92 0e+6144 -> -NaN92 Invalid_operation -dqfma2697 fma 088 -sNaN91 0e+6144 -> -NaN91 Invalid_operation -dqfma2698 fma Inf -sNaN90 0e+6144 -> -NaN90 Invalid_operation -dqfma2699 fma -NaN -sNaN89 0e+6144 -> -NaN89 Invalid_operation - -dqfma2701 fma -NaN -Inf 0e+6144 -> -NaN -dqfma2702 fma -NaN 999 0e+6144 -> -NaN -dqfma2703 fma -NaN Inf 0e+6144 -> -NaN -dqfma2704 fma -NaN -NaN 0e+6144 -> -NaN -dqfma2705 fma -Inf -NaN0 0e+6144 -> -NaN -dqfma2706 fma -999 -NaN 0e+6144 -> -NaN -dqfma2707 fma Inf -NaN 0e+6144 -> -NaN - -dqfma2711 fma -sNaN -Inf 0e+6144 -> -NaN Invalid_operation -dqfma2712 fma -sNaN -11 0e+6144 -> -NaN Invalid_operation -dqfma2713 fma -sNaN00 NaN 0e+6144 -> -NaN Invalid_operation -dqfma2714 fma -sNaN -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2715 fma -NaN -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2716 fma -Inf -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2717 fma 088 -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2718 fma Inf -sNaN 0e+6144 -> -NaN Invalid_operation -dqfma2719 fma -NaN -sNaN 0e+6144 -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results --- signs -dqfma2751 fma 1e+4277 1e+3311 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2752 fma 1e+4277 -1e+3311 0e+6144 -> -Infinity Overflow Inexact Rounded -dqfma2753 fma -1e+4277 1e+3311 0e+6144 -> -Infinity Overflow Inexact Rounded -dqfma2754 fma -1e+4277 -1e+3311 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2755 fma 1e-4277 1e-3311 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2756 fma 1e-4277 -1e-3311 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2757 fma -1e-4277 1e-3311 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2758 fma -1e-4277 -1e-3311 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dqfma2760 fma 1e-6069 1e-101 0e+6144 -> 1E-6170 Subnormal -dqfma2761 fma 1e-6069 1e-102 0e+6144 -> 1E-6171 Subnormal -dqfma2762 fma 1e-6069 1e-103 0e+6144 -> 1E-6172 Subnormal -dqfma2763 fma 1e-6069 1e-104 0e+6144 -> 1E-6173 Subnormal -dqfma2764 fma 1e-6069 1e-105 0e+6144 -> 1E-6174 Subnormal -dqfma2765 fma 1e-6069 1e-106 0e+6144 -> 1E-6175 Subnormal -dqfma2766 fma 1e-6069 1e-107 0e+6144 -> 1E-6176 Subnormal -dqfma2767 fma 1e-6069 1e-108 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2768 fma 1e-6069 1e-109 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2769 fma 1e-6069 1e-110 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -dqfma2770 fma 1e+40 1e+6101 0e+6144 -> 1.000000000000000000000000000000E+6141 Clamped -dqfma2771 fma 1e+40 1e+6102 0e+6144 -> 1.0000000000000000000000000000000E+6142 Clamped -dqfma2772 fma 1e+40 1e+6103 0e+6144 -> 1.00000000000000000000000000000000E+6143 Clamped -dqfma2773 fma 1e+40 1e+6104 0e+6144 -> 1.000000000000000000000000000000000E+6144 Clamped -dqfma2774 fma 1e+40 1e+6105 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2775 fma 1e+40 1e+6106 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2776 fma 1e+40 1e+6107 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2777 fma 1e+40 1e+6108 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2778 fma 1e+40 1e+6109 0e+6144 -> Infinity Overflow Inexact Rounded -dqfma2779 fma 1e+40 1e+6110 0e+6144 -> Infinity Overflow Inexact Rounded - -dqfma2801 fma 1.0000E-6172 1 0e+6144 -> 1.0000E-6172 Subnormal -dqfma2802 fma 1.000E-6172 1e-1 0e+6144 -> 1.000E-6173 Subnormal -dqfma2803 fma 1.00E-6172 1e-2 0e+6144 -> 1.00E-6174 Subnormal -dqfma2804 fma 1.0E-6172 1e-3 0e+6144 -> 1.0E-6175 Subnormal -dqfma2805 fma 1.0E-6172 1e-4 0e+6144 -> 1E-6176 Subnormal Rounded -dqfma2806 fma 1.3E-6172 1e-4 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqfma2807 fma 1.5E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2808 fma 1.7E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2809 fma 2.3E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2810 fma 2.5E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2811 fma 2.7E-6172 1e-4 0e+6144 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqfma2812 fma 1.49E-6172 1e-4 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqfma2813 fma 1.50E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2814 fma 1.51E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2815 fma 2.49E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2816 fma 2.50E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqfma2817 fma 2.51E-6172 1e-4 0e+6144 -> 3E-6176 Underflow Subnormal Inexact Rounded - -dqfma2818 fma 1E-6172 1e-4 0e+6144 -> 1E-6176 Subnormal -dqfma2819 fma 3E-6172 1e-5 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2820 fma 5E-6172 1e-5 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2821 fma 7E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqfma2822 fma 9E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqfma2823 fma 9.9E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded - -dqfma2824 fma 1E-6172 -1e-4 0e+6144 -> -1E-6176 Subnormal -dqfma2825 fma 3E-6172 -1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2826 fma -5E-6172 1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2827 fma 7E-6172 -1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqfma2828 fma -9E-6172 1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqfma2829 fma 9.9E-6172 -1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqfma2830 fma 3.0E-6172 -1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqfma2831 fma 1.0E-5977 1e-200 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqfma2832 fma 1.0E-5977 1e-199 0e+6144 -> 1E-6176 Subnormal Rounded -dqfma2833 fma 1.0E-5977 1e-198 0e+6144 -> 1.0E-6175 Subnormal -dqfma2834 fma 2.0E-5977 2e-198 0e+6144 -> 4.0E-6175 Subnormal -dqfma2835 fma 4.0E-5977 4e-198 0e+6144 -> 1.60E-6174 Subnormal -dqfma2836 fma 10.0E-5977 10e-198 0e+6144 -> 1.000E-6173 Subnormal -dqfma2837 fma 30.0E-5977 30e-198 0e+6144 -> 9.000E-6173 Subnormal -dqfma2838 fma 40.0E-5982 40e-166 0e+6144 -> 1.6000E-6145 Subnormal -dqfma2839 fma 40.0E-5982 40e-165 0e+6144 -> 1.6000E-6144 Subnormal -dqfma2840 fma 40.0E-5982 40e-164 0e+6144 -> 1.6000E-6143 - --- Long operand overflow may be a different path -dqfma2870 fma 100 9.999E+6143 0e+6144 -> Infinity Inexact Overflow Rounded -dqfma2871 fma 100 -9.999E+6143 0e+6144 -> -Infinity Inexact Overflow Rounded -dqfma2872 fma 9.999E+6143 100 0e+6144 -> Infinity Inexact Overflow Rounded -dqfma2873 fma -9.999E+6143 100 0e+6144 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -dqfma2881 fma 1.2347E-6133 1.2347E-40 0e+6144 -> 1.524E-6173 Inexact Rounded Subnormal Underflow -dqfma2882 fma 1.234E-6133 1.234E-40 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqfma2883 fma 1.23E-6133 1.23E-40 0e+6144 -> 1.513E-6173 Inexact Rounded Subnormal Underflow -dqfma2884 fma 1.2E-6133 1.2E-40 0e+6144 -> 1.44E-6173 Subnormal -dqfma2885 fma 1.2E-6133 1.2E-41 0e+6144 -> 1.44E-6174 Subnormal -dqfma2886 fma 1.2E-6133 1.2E-42 0e+6144 -> 1.4E-6175 Subnormal Inexact Rounded Underflow -dqfma2887 fma 1.2E-6133 1.3E-42 0e+6144 -> 1.6E-6175 Subnormal Inexact Rounded Underflow -dqfma2888 fma 1.3E-6133 1.3E-42 0e+6144 -> 1.7E-6175 Subnormal Inexact Rounded Underflow -dqfma2889 fma 1.3E-6133 1.3E-43 0e+6144 -> 2E-6176 Subnormal Inexact Rounded Underflow -dqfma2890 fma 1.3E-6134 1.3E-43 0e+6144 -> 0E-6176 Clamped Subnormal Inexact Rounded Underflow - -dqfma2891 fma 1.2345E-39 1.234E-6133 0e+6144 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow -dqfma2892 fma 1.23456E-39 1.234E-6133 0e+6144 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow -dqfma2893 fma 1.2345E-40 1.234E-6133 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqfma2894 fma 1.23456E-40 1.234E-6133 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqfma2895 fma 1.2345E-41 1.234E-6133 0e+6144 -> 1.52E-6174 Inexact Rounded Subnormal Underflow -dqfma2896 fma 1.23456E-41 1.234E-6133 0e+6144 -> 1.52E-6174 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow --- prove operands are exact -dqfma2906 fma 9.999999999999999999999999999999999E-6143 1 0e+6144 -> 9.999999999999999999999999999999999E-6143 -dqfma2907 fma 1 0.09999999999999999999999999999999999 0e+6144 -> 0.09999999999999999999999999999999999 --- the next rounds to Nmin -dqfma2908 fma 9.999999999999999999999999999999999E-6143 0.09999999999999999999999999999999999 0e+6144 -> 1.000000000000000000000000000000000E-6143 Underflow Inexact Subnormal Rounded - --- hugest -dqfma2909 fma 9999999999999999999999999999999999 9999999999999999999999999999999999 0e+6144 -> 9.999999999999999999999999999999998E+67 Inexact Rounded - --- Examples from SQL proposal (Krishna Kulkarni) -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 -dqfma21001 fma 130E-2 120E-2 0e+6144 -> 1.5600 -dqfma21002 fma 130E-2 12E-1 0e+6144 -> 1.560 -dqfma21003 fma 130E-2 1E0 0e+6144 -> 1.30 -dqfma21004 fma 1E2 1E4 0e+6144 -> 1E+6 - --- Null tests -dqfma2990 fma 10 # 0e+6144 -> NaN Invalid_operation -dqfma2991 fma # 10 0e+6144 -> NaN Invalid_operation - - --- ADDITION TESTS ------------------------------------------------------ -rounding: half_even - --- [first group are 'quick confidence check'] -dqadd3001 fma 1 1 1 -> 2 -dqadd3002 fma 1 2 3 -> 5 -dqadd3003 fma 1 '5.75' '3.3' -> 9.05 -dqadd3004 fma 1 '5' '-3' -> 2 -dqadd3005 fma 1 '-5' '-3' -> -8 -dqadd3006 fma 1 '-7' '2.5' -> -4.5 -dqadd3007 fma 1 '0.7' '0.3' -> 1.0 -dqadd3008 fma 1 '1.25' '1.25' -> 2.50 -dqadd3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' -dqadd3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' - --- 1234567890123456 1234567890123456 -dqadd3011 fma 1 '0.4444444444444444444444444444444446' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Inexact Rounded -dqadd3012 fma 1 '0.4444444444444444444444444444444445' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Rounded -dqadd3013 fma 1 '0.4444444444444444444444444444444444' '0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' -dqadd3014 fma 1 '4444444444444444444444444444444444' '0.49' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd3015 fma 1 '4444444444444444444444444444444444' '0.499' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd3016 fma 1 '4444444444444444444444444444444444' '0.4999' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd3017 fma 1 '4444444444444444444444444444444444' '0.5000' -> '4444444444444444444444444444444444' Inexact Rounded -dqadd3018 fma 1 '4444444444444444444444444444444444' '0.5001' -> '4444444444444444444444444444444445' Inexact Rounded -dqadd3019 fma 1 '4444444444444444444444444444444444' '0.501' -> '4444444444444444444444444444444445' Inexact Rounded -dqadd3020 fma 1 '4444444444444444444444444444444444' '0.51' -> '4444444444444444444444444444444445' Inexact Rounded - -dqadd3021 fma 1 0 1 -> 1 -dqadd3022 fma 1 1 1 -> 2 -dqadd3023 fma 1 2 1 -> 3 -dqadd3024 fma 1 3 1 -> 4 -dqadd3025 fma 1 4 1 -> 5 -dqadd3026 fma 1 5 1 -> 6 -dqadd3027 fma 1 6 1 -> 7 -dqadd3028 fma 1 7 1 -> 8 -dqadd3029 fma 1 8 1 -> 9 -dqadd3030 fma 1 9 1 -> 10 - --- some carrying effects -dqadd3031 fma 1 '0.9998' '0.0000' -> '0.9998' -dqadd3032 fma 1 '0.9998' '0.0001' -> '0.9999' -dqadd3033 fma 1 '0.9998' '0.0002' -> '1.0000' -dqadd3034 fma 1 '0.9998' '0.0003' -> '1.0001' - -dqadd3035 fma 1 '70' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3036 fma 1 '700' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3037 fma 1 '7000' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3038 fma 1 '70000' '10000e+34' -> '1.000000000000000000000000000000001E+38' Inexact Rounded -dqadd3039 fma 1 '700000' '10000e+34' -> '1.000000000000000000000000000000007E+38' Rounded - --- symmetry: -dqadd3040 fma 1 '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3041 fma 1 '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3042 fma 1 '10000e+34' '7000' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqadd3044 fma 1 '10000e+34' '70000' -> '1.000000000000000000000000000000001E+38' Inexact Rounded -dqadd3045 fma 1 '10000e+34' '700000' -> '1.000000000000000000000000000000007E+38' Rounded - --- same, without rounding -dqadd3046 fma 1 '10000e+9' '7' -> '10000000000007' -dqadd3047 fma 1 '10000e+9' '70' -> '10000000000070' -dqadd3048 fma 1 '10000e+9' '700' -> '10000000000700' -dqadd3049 fma 1 '10000e+9' '7000' -> '10000000007000' -dqadd3050 fma 1 '10000e+9' '70000' -> '10000000070000' -dqadd3051 fma 1 '10000e+9' '700000' -> '10000000700000' -dqadd3052 fma 1 '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -dqadd3053 fma 1 '12' '7.00' -> '19.00' -dqadd3054 fma 1 '1.3' '-1.07' -> '0.23' -dqadd3055 fma 1 '1.3' '-1.30' -> '0.00' -dqadd3056 fma 1 '1.3' '-2.07' -> '-0.77' -dqadd3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' - --- leading zero preservation -dqadd3061 fma 1 1 '0.0001' -> '1.0001' -dqadd3062 fma 1 1 '0.00001' -> '1.00001' -dqadd3063 fma 1 1 '0.000001' -> '1.000001' -dqadd3064 fma 1 1 '0.0000001' -> '1.0000001' -dqadd3065 fma 1 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -dqadd3070 fma 1 1 0 -> 1 -dqadd3071 fma 1 1 0. -> 1 -dqadd3072 fma 1 1 .0 -> 1.0 -dqadd3073 fma 1 1 0.0 -> 1.0 -dqadd3074 fma 1 1 0.00 -> 1.00 -dqadd3075 fma 1 0 1 -> 1 -dqadd3076 fma 1 0. 1 -> 1 -dqadd3077 fma 1 .0 1 -> 1.0 -dqadd3078 fma 1 0.0 1 -> 1.0 -dqadd3079 fma 1 0.00 1 -> 1.00 - --- some carries -dqadd3080 fma 1 999999998 1 -> 999999999 -dqadd3081 fma 1 999999999 1 -> 1000000000 -dqadd3082 fma 1 99999999 1 -> 100000000 -dqadd3083 fma 1 9999999 1 -> 10000000 -dqadd3084 fma 1 999999 1 -> 1000000 -dqadd3085 fma 1 99999 1 -> 100000 -dqadd3086 fma 1 9999 1 -> 10000 -dqadd3087 fma 1 999 1 -> 1000 -dqadd3088 fma 1 99 1 -> 100 -dqadd3089 fma 1 9 1 -> 10 - - --- more LHS swaps -dqadd3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' -dqadd3091 fma 1 '-56267E-6' 0 -> '-0.056267' -dqadd3092 fma 1 '-56267E-5' 0 -> '-0.56267' -dqadd3093 fma 1 '-56267E-4' 0 -> '-5.6267' -dqadd3094 fma 1 '-56267E-3' 0 -> '-56.267' -dqadd3095 fma 1 '-56267E-2' 0 -> '-562.67' -dqadd3096 fma 1 '-56267E-1' 0 -> '-5626.7' -dqadd3097 fma 1 '-56267E-0' 0 -> '-56267' -dqadd3098 fma 1 '-5E-10' 0 -> '-5E-10' -dqadd3099 fma 1 '-5E-7' 0 -> '-5E-7' -dqadd3100 fma 1 '-5E-6' 0 -> '-0.000005' -dqadd3101 fma 1 '-5E-5' 0 -> '-0.00005' -dqadd3102 fma 1 '-5E-4' 0 -> '-0.0005' -dqadd3103 fma 1 '-5E-1' 0 -> '-0.5' -dqadd3104 fma 1 '-5E0' 0 -> '-5' -dqadd3105 fma 1 '-5E1' 0 -> '-50' -dqadd3106 fma 1 '-5E5' 0 -> '-500000' -dqadd3107 fma 1 '-5E33' 0 -> '-5000000000000000000000000000000000' -dqadd3108 fma 1 '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded -dqadd3109 fma 1 '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded -dqadd3110 fma 1 '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded -dqadd3111 fma 1 '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded - --- more RHS swaps -dqadd3113 fma 1 0 '-56267E-10' -> '-0.0000056267' -dqadd3114 fma 1 0 '-56267E-6' -> '-0.056267' -dqadd3116 fma 1 0 '-56267E-5' -> '-0.56267' -dqadd3117 fma 1 0 '-56267E-4' -> '-5.6267' -dqadd3119 fma 1 0 '-56267E-3' -> '-56.267' -dqadd3120 fma 1 0 '-56267E-2' -> '-562.67' -dqadd3121 fma 1 0 '-56267E-1' -> '-5626.7' -dqadd3122 fma 1 0 '-56267E-0' -> '-56267' -dqadd3123 fma 1 0 '-5E-10' -> '-5E-10' -dqadd3124 fma 1 0 '-5E-7' -> '-5E-7' -dqadd3125 fma 1 0 '-5E-6' -> '-0.000005' -dqadd3126 fma 1 0 '-5E-5' -> '-0.00005' -dqadd3127 fma 1 0 '-5E-4' -> '-0.0005' -dqadd3128 fma 1 0 '-5E-1' -> '-0.5' -dqadd3129 fma 1 0 '-5E0' -> '-5' -dqadd3130 fma 1 0 '-5E1' -> '-50' -dqadd3131 fma 1 0 '-5E5' -> '-500000' -dqadd3132 fma 1 0 '-5E33' -> '-5000000000000000000000000000000000' -dqadd3133 fma 1 0 '-5E34' -> '-5.000000000000000000000000000000000E+34' Rounded -dqadd3134 fma 1 0 '-5E35' -> '-5.000000000000000000000000000000000E+35' Rounded -dqadd3135 fma 1 0 '-5E36' -> '-5.000000000000000000000000000000000E+36' Rounded -dqadd3136 fma 1 0 '-5E100' -> '-5.000000000000000000000000000000000E+100' Rounded - --- related -dqadd3137 fma 1 1 '0E-39' -> '1.000000000000000000000000000000000' Rounded -dqadd3138 fma 1 -1 '0E-39' -> '-1.000000000000000000000000000000000' Rounded -dqadd3139 fma 1 '0E-39' 1 -> '1.000000000000000000000000000000000' Rounded -dqadd3140 fma 1 '0E-39' -1 -> '-1.000000000000000000000000000000000' Rounded -dqadd3141 fma 1 1E+29 0.0000 -> '100000000000000000000000000000.0000' -dqadd3142 fma 1 1E+29 0.00000 -> '100000000000000000000000000000.0000' Rounded -dqadd3143 fma 1 0.000 1E+30 -> '1000000000000000000000000000000.000' -dqadd3144 fma 1 0.0000 1E+30 -> '1000000000000000000000000000000.000' Rounded - --- [some of the next group are really constructor tests] -dqadd3146 fma 1 '00.0' 0 -> '0.0' -dqadd3147 fma 1 '0.00' 0 -> '0.00' -dqadd3148 fma 1 0 '0.00' -> '0.00' -dqadd3149 fma 1 0 '00.0' -> '0.0' -dqadd3150 fma 1 '00.0' '0.00' -> '0.00' -dqadd3151 fma 1 '0.00' '00.0' -> '0.00' -dqadd3152 fma 1 '3' '.3' -> '3.3' -dqadd3153 fma 1 '3.' '.3' -> '3.3' -dqadd3154 fma 1 '3.0' '.3' -> '3.3' -dqadd3155 fma 1 '3.00' '.3' -> '3.30' -dqadd3156 fma 1 '3' '3' -> '6' -dqadd3157 fma 1 '3' '+3' -> '6' -dqadd3158 fma 1 '3' '-3' -> '0' -dqadd3159 fma 1 '0.3' '-0.3' -> '0.0' -dqadd3160 fma 1 '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -dqadd3161 fma 1 '1E+12' '-1' -> '999999999999' -dqadd3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' -dqadd3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' -dqadd3164 fma 1 '-1' '1E+12' -> '999999999999' -dqadd3165 fma 1 '7E+12' '-1' -> '6999999999999' -dqadd3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' -dqadd3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' -dqadd3168 fma 1 '-1' '7E+12' -> '6999999999999' - -rounding: half_up -dqadd3170 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555567' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd3171 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555566' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd3172 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555565' -> '5.000000000000000000000000000000001' Inexact Rounded -dqadd3173 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555564' -> '5.000000000000000000000000000000000' Inexact Rounded -dqadd3174 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555553' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd3175 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555552' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd3176 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555551' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd3177 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555550' -> '4.999999999999999999999999999999999' Rounded -dqadd3178 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555545' -> '4.999999999999999999999999999999999' Inexact Rounded -dqadd3179 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555544' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd3180 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555543' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd3181 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555542' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd3182 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555541' -> '4.999999999999999999999999999999998' Inexact Rounded -dqadd3183 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555540' -> '4.999999999999999999999999999999998' Rounded - --- and some more, including residue effects and different roundings -rounding: half_up -dqadd3200 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd3201 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3202 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3203 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3204 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3205 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3206 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3207 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3208 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3209 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3210 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3211 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3212 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3213 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3214 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3215 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3216 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd3217 fma 1 '1231234567890123456784560123456789' 1.000000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3218 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3219 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded - -rounding: half_even -dqadd3220 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd3221 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3222 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3223 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3224 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3225 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3226 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3227 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3228 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3229 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3230 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3231 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3232 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3233 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3234 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3235 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3236 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd3237 fma 1 '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3238 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3239 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded --- critical few with even bottom digit... -dqadd3240 fma 1 '1231234567890123456784560123456788' 0.499999999 -> '1231234567890123456784560123456788' Inexact Rounded -dqadd3241 fma 1 '1231234567890123456784560123456788' 0.5 -> '1231234567890123456784560123456788' Inexact Rounded -dqadd3242 fma 1 '1231234567890123456784560123456788' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded - -rounding: down -dqadd3250 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' -dqadd3251 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3252 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3253 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3254 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3255 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3256 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3257 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3258 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3259 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3260 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3261 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3262 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3263 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3264 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3265 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456789' Inexact Rounded -dqadd3266 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' -dqadd3267 fma 1 '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3268 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded -dqadd3269 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_up -dqadd3301 fma 1 -1 1 -> 0 -dqadd3302 fma 1 0 1 -> 1 -dqadd3303 fma 1 1 1 -> 2 -dqadd3304 fma 1 12 1 -> 13 -dqadd3305 fma 1 98 1 -> 99 -dqadd3306 fma 1 99 1 -> 100 -dqadd3307 fma 1 100 1 -> 101 -dqadd3308 fma 1 101 1 -> 102 -dqadd3309 fma 1 -1 -1 -> -2 -dqadd3310 fma 1 0 -1 -> -1 -dqadd3311 fma 1 1 -1 -> 0 -dqadd3312 fma 1 12 -1 -> 11 -dqadd3313 fma 1 98 -1 -> 97 -dqadd3314 fma 1 99 -1 -> 98 -dqadd3315 fma 1 100 -1 -> 99 -dqadd3316 fma 1 101 -1 -> 100 - -dqadd3321 fma 1 -0.01 0.01 -> 0.00 -dqadd3322 fma 1 0.00 0.01 -> 0.01 -dqadd3323 fma 1 0.01 0.01 -> 0.02 -dqadd3324 fma 1 0.12 0.01 -> 0.13 -dqadd3325 fma 1 0.98 0.01 -> 0.99 -dqadd3326 fma 1 0.99 0.01 -> 1.00 -dqadd3327 fma 1 1.00 0.01 -> 1.01 -dqadd3328 fma 1 1.01 0.01 -> 1.02 -dqadd3329 fma 1 -0.01 -0.01 -> -0.02 -dqadd3330 fma 1 0.00 -0.01 -> -0.01 -dqadd3331 fma 1 0.01 -0.01 -> 0.00 -dqadd3332 fma 1 0.12 -0.01 -> 0.11 -dqadd3333 fma 1 0.98 -0.01 -> 0.97 -dqadd3334 fma 1 0.99 -0.01 -> 0.98 -dqadd3335 fma 1 1.00 -0.01 -> 0.99 -dqadd3336 fma 1 1.01 -0.01 -> 1.00 - --- some more cases where adding 0 affects the coefficient -dqadd3340 fma 1 1E+3 0 -> 1000 -dqadd3341 fma 1 1E+33 0 -> 1000000000000000000000000000000000 -dqadd3342 fma 1 1E+34 0 -> 1.000000000000000000000000000000000E+34 Rounded -dqadd3343 fma 1 1E+35 0 -> 1.000000000000000000000000000000000E+35 Rounded --- which simply follow from these cases ... -dqadd3344 fma 1 1E+3 1 -> 1001 -dqadd3345 fma 1 1E+33 1 -> 1000000000000000000000000000000001 -dqadd3346 fma 1 1E+34 1 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd3347 fma 1 1E+35 1 -> 1.000000000000000000000000000000000E+35 Inexact Rounded -dqadd3348 fma 1 1E+3 7 -> 1007 -dqadd3349 fma 1 1E+33 7 -> 1000000000000000000000000000000007 -dqadd3350 fma 1 1E+34 7 -> 1.000000000000000000000000000000001E+34 Inexact Rounded -dqadd3351 fma 1 1E+35 7 -> 1.000000000000000000000000000000000E+35 Inexact Rounded - --- tryzeros cases -rounding: half_up -dqadd3360 fma 1 0E+50 10000E+1 -> 1.0000E+5 -dqadd3361 fma 1 0E-50 10000E+1 -> 100000.0000000000000000000000000000 Rounded -dqadd3362 fma 1 10000E+1 0E-50 -> 100000.0000000000000000000000000000 Rounded -dqadd3363 fma 1 10000E+1 10000E-50 -> 100000.0000000000000000000000000000 Rounded Inexact -dqadd3364 fma 1 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0E+6111 --- 1 234567890123456789012345678901234 - --- a curiosity from JSR 13 testing -rounding: half_down -dqadd3370 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd3371 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact -rounding: half_up -dqadd3372 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd3373 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact -rounding: half_even -dqadd3374 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 -dqadd3375 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact - --- ulp replacement tests -dqadd3400 fma 1 1 77e-32 -> 1.00000000000000000000000000000077 -dqadd3401 fma 1 1 77e-33 -> 1.000000000000000000000000000000077 -dqadd3402 fma 1 1 77e-34 -> 1.000000000000000000000000000000008 Inexact Rounded -dqadd3403 fma 1 1 77e-35 -> 1.000000000000000000000000000000001 Inexact Rounded -dqadd3404 fma 1 1 77e-36 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd3405 fma 1 1 77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd3406 fma 1 1 77e-299 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd3410 fma 1 10 77e-32 -> 10.00000000000000000000000000000077 -dqadd3411 fma 1 10 77e-33 -> 10.00000000000000000000000000000008 Inexact Rounded -dqadd3412 fma 1 10 77e-34 -> 10.00000000000000000000000000000001 Inexact Rounded -dqadd3413 fma 1 10 77e-35 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3414 fma 1 10 77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3415 fma 1 10 77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3416 fma 1 10 77e-299 -> 10.00000000000000000000000000000000 Inexact Rounded - -dqadd3420 fma 1 77e-32 1 -> 1.00000000000000000000000000000077 -dqadd3421 fma 1 77e-33 1 -> 1.000000000000000000000000000000077 -dqadd3422 fma 1 77e-34 1 -> 1.000000000000000000000000000000008 Inexact Rounded -dqadd3423 fma 1 77e-35 1 -> 1.000000000000000000000000000000001 Inexact Rounded -dqadd3424 fma 1 77e-36 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd3425 fma 1 77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd3426 fma 1 77e-299 1 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd3430 fma 1 77e-32 10 -> 10.00000000000000000000000000000077 -dqadd3431 fma 1 77e-33 10 -> 10.00000000000000000000000000000008 Inexact Rounded -dqadd3432 fma 1 77e-34 10 -> 10.00000000000000000000000000000001 Inexact Rounded -dqadd3433 fma 1 77e-35 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3434 fma 1 77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3435 fma 1 77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd3436 fma 1 77e-299 10 -> 10.00000000000000000000000000000000 Inexact Rounded - --- negative ulps -dqadd36440 fma 1 1 -77e-32 -> 0.99999999999999999999999999999923 -dqadd36441 fma 1 1 -77e-33 -> 0.999999999999999999999999999999923 -dqadd36442 fma 1 1 -77e-34 -> 0.9999999999999999999999999999999923 -dqadd36443 fma 1 1 -77e-35 -> 0.9999999999999999999999999999999992 Inexact Rounded -dqadd36444 fma 1 1 -77e-36 -> 0.9999999999999999999999999999999999 Inexact Rounded -dqadd36445 fma 1 1 -77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd36446 fma 1 1 -77e-99 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd36450 fma 1 10 -77e-32 -> 9.99999999999999999999999999999923 -dqadd36451 fma 1 10 -77e-33 -> 9.999999999999999999999999999999923 -dqadd36452 fma 1 10 -77e-34 -> 9.999999999999999999999999999999992 Inexact Rounded -dqadd36453 fma 1 10 -77e-35 -> 9.999999999999999999999999999999999 Inexact Rounded -dqadd36454 fma 1 10 -77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd36455 fma 1 10 -77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd36456 fma 1 10 -77e-99 -> 10.00000000000000000000000000000000 Inexact Rounded - -dqadd36460 fma 1 -77e-32 1 -> 0.99999999999999999999999999999923 -dqadd36461 fma 1 -77e-33 1 -> 0.999999999999999999999999999999923 -dqadd36462 fma 1 -77e-34 1 -> 0.9999999999999999999999999999999923 -dqadd36463 fma 1 -77e-35 1 -> 0.9999999999999999999999999999999992 Inexact Rounded -dqadd36464 fma 1 -77e-36 1 -> 0.9999999999999999999999999999999999 Inexact Rounded -dqadd36465 fma 1 -77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded -dqadd36466 fma 1 -77e-99 1 -> 1.000000000000000000000000000000000 Inexact Rounded - -dqadd36470 fma 1 -77e-32 10 -> 9.99999999999999999999999999999923 -dqadd36471 fma 1 -77e-33 10 -> 9.999999999999999999999999999999923 -dqadd36472 fma 1 -77e-34 10 -> 9.999999999999999999999999999999992 Inexact Rounded -dqadd36473 fma 1 -77e-35 10 -> 9.999999999999999999999999999999999 Inexact Rounded -dqadd36474 fma 1 -77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd36475 fma 1 -77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded -dqadd36476 fma 1 -77e-99 10 -> 10.00000000000000000000000000000000 Inexact Rounded - --- negative ulps -dqadd36480 fma 1 -1 77e-32 -> -0.99999999999999999999999999999923 -dqadd36481 fma 1 -1 77e-33 -> -0.999999999999999999999999999999923 -dqadd36482 fma 1 -1 77e-34 -> -0.9999999999999999999999999999999923 -dqadd36483 fma 1 -1 77e-35 -> -0.9999999999999999999999999999999992 Inexact Rounded -dqadd36484 fma 1 -1 77e-36 -> -0.9999999999999999999999999999999999 Inexact Rounded -dqadd36485 fma 1 -1 77e-37 -> -1.000000000000000000000000000000000 Inexact Rounded -dqadd36486 fma 1 -1 77e-99 -> -1.000000000000000000000000000000000 Inexact Rounded - -dqadd36490 fma 1 -10 77e-32 -> -9.99999999999999999999999999999923 -dqadd36491 fma 1 -10 77e-33 -> -9.999999999999999999999999999999923 -dqadd36492 fma 1 -10 77e-34 -> -9.999999999999999999999999999999992 Inexact Rounded -dqadd36493 fma 1 -10 77e-35 -> -9.999999999999999999999999999999999 Inexact Rounded -dqadd36494 fma 1 -10 77e-36 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd36495 fma 1 -10 77e-37 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd36496 fma 1 -10 77e-99 -> -10.00000000000000000000000000000000 Inexact Rounded - -dqadd36500 fma 1 77e-32 -1 -> -0.99999999999999999999999999999923 -dqadd36501 fma 1 77e-33 -1 -> -0.999999999999999999999999999999923 -dqadd36502 fma 1 77e-34 -1 -> -0.9999999999999999999999999999999923 -dqadd36503 fma 1 77e-35 -1 -> -0.9999999999999999999999999999999992 Inexact Rounded -dqadd36504 fma 1 77e-36 -1 -> -0.9999999999999999999999999999999999 Inexact Rounded -dqadd36505 fma 1 77e-37 -1 -> -1.000000000000000000000000000000000 Inexact Rounded -dqadd36506 fma 1 77e-99 -1 -> -1.000000000000000000000000000000000 Inexact Rounded - -dqadd36510 fma 1 77e-32 -10 -> -9.99999999999999999999999999999923 -dqadd36511 fma 1 77e-33 -10 -> -9.999999999999999999999999999999923 -dqadd36512 fma 1 77e-34 -10 -> -9.999999999999999999999999999999992 Inexact Rounded -dqadd36513 fma 1 77e-35 -10 -> -9.999999999999999999999999999999999 Inexact Rounded -dqadd36514 fma 1 77e-36 -10 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd36515 fma 1 77e-37 -10 -> -10.00000000000000000000000000000000 Inexact Rounded -dqadd36516 fma 1 77e-99 -10 -> -10.00000000000000000000000000000000 Inexact Rounded - --- and some more residue effects and different roundings -rounding: half_up -dqadd36540 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd36541 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36542 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36543 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36544 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36545 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36546 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36547 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36548 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36549 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36550 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36551 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36552 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36553 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36554 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36555 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36556 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd36557 fma 1 '9876543219876543216543210123456789' 1.000000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36558 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36559 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - -rounding: half_even -dqadd36560 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd36561 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36562 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36563 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36564 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36565 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36566 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36567 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd36568 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36569 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36570 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36571 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36572 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36573 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36574 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36575 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36576 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd36577 fma 1 '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36578 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd36579 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - --- critical few with even bottom digit... -dqadd37540 fma 1 '9876543219876543216543210123456788' 0.499999999 -> '9876543219876543216543210123456788' Inexact Rounded -dqadd37541 fma 1 '9876543219876543216543210123456788' 0.5 -> '9876543219876543216543210123456788' Inexact Rounded -dqadd37542 fma 1 '9876543219876543216543210123456788' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded - -rounding: down -dqadd37550 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' -dqadd37551 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37552 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37553 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37554 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37555 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37556 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37557 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37558 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37559 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37560 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37561 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37562 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37563 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37564 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37565 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456789' Inexact Rounded -dqadd37566 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' -dqadd37567 fma 1 '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd37568 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded -dqadd37569 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded - --- more zeros, etc. -rounding: half_even - -dqadd37701 fma 1 5.00 1.00E-3 -> 5.00100 -dqadd37702 fma 1 00.00 0.000 -> 0.000 -dqadd37703 fma 1 00.00 0E-3 -> 0.000 -dqadd37704 fma 1 0E-3 00.00 -> 0.000 - -dqadd37710 fma 1 0E+3 00.00 -> 0.00 -dqadd37711 fma 1 0E+3 00.0 -> 0.0 -dqadd37712 fma 1 0E+3 00. -> 0 -dqadd37713 fma 1 0E+3 00.E+1 -> 0E+1 -dqadd37714 fma 1 0E+3 00.E+2 -> 0E+2 -dqadd37715 fma 1 0E+3 00.E+3 -> 0E+3 -dqadd37716 fma 1 0E+3 00.E+4 -> 0E+3 -dqadd37717 fma 1 0E+3 00.E+5 -> 0E+3 -dqadd37718 fma 1 0E+3 -00.0 -> 0.0 -dqadd37719 fma 1 0E+3 -00. -> 0 -dqadd37731 fma 1 0E+3 -00.E+1 -> 0E+1 - -dqadd37720 fma 1 00.00 0E+3 -> 0.00 -dqadd37721 fma 1 00.0 0E+3 -> 0.0 -dqadd37722 fma 1 00. 0E+3 -> 0 -dqadd37723 fma 1 00.E+1 0E+3 -> 0E+1 -dqadd37724 fma 1 00.E+2 0E+3 -> 0E+2 -dqadd37725 fma 1 00.E+3 0E+3 -> 0E+3 -dqadd37726 fma 1 00.E+4 0E+3 -> 0E+3 -dqadd37727 fma 1 00.E+5 0E+3 -> 0E+3 -dqadd37728 fma 1 -00.00 0E+3 -> 0.00 -dqadd37729 fma 1 -00.0 0E+3 -> 0.0 -dqadd37730 fma 1 -00. 0E+3 -> 0 - -dqadd37732 fma 1 0 0 -> 0 -dqadd37733 fma 1 0 -0 -> 0 -dqadd37734 fma 1 -0 0 -> 0 -dqadd37735 fma 1 -0 -0 -> -0 -- IEEE 854 special case - -dqadd37736 fma 1 1 -1 -> 0 -dqadd37737 fma 1 -1 -1 -> -2 -dqadd37738 fma 1 1 1 -> 2 -dqadd37739 fma 1 -1 1 -> 0 - -dqadd37741 fma 1 0 -1 -> -1 -dqadd37742 fma 1 -0 -1 -> -1 -dqadd37743 fma 1 0 1 -> 1 -dqadd37744 fma 1 -0 1 -> 1 -dqadd37745 fma 1 -1 0 -> -1 -dqadd37746 fma 1 -1 -0 -> -1 -dqadd37747 fma 1 1 0 -> 1 -dqadd37748 fma 1 1 -0 -> 1 - -dqadd37751 fma 1 0.0 -1 -> -1.0 -dqadd37752 fma 1 -0.0 -1 -> -1.0 -dqadd37753 fma 1 0.0 1 -> 1.0 -dqadd37754 fma 1 -0.0 1 -> 1.0 -dqadd37755 fma 1 -1.0 0 -> -1.0 -dqadd37756 fma 1 -1.0 -0 -> -1.0 -dqadd37757 fma 1 1.0 0 -> 1.0 -dqadd37758 fma 1 1.0 -0 -> 1.0 - -dqadd37761 fma 1 0 -1.0 -> -1.0 -dqadd37762 fma 1 -0 -1.0 -> -1.0 -dqadd37763 fma 1 0 1.0 -> 1.0 -dqadd37764 fma 1 -0 1.0 -> 1.0 -dqadd37765 fma 1 -1 0.0 -> -1.0 -dqadd37766 fma 1 -1 -0.0 -> -1.0 -dqadd37767 fma 1 1 0.0 -> 1.0 -dqadd37768 fma 1 1 -0.0 -> 1.0 - -dqadd37771 fma 1 0.0 -1.0 -> -1.0 -dqadd37772 fma 1 -0.0 -1.0 -> -1.0 -dqadd37773 fma 1 0.0 1.0 -> 1.0 -dqadd37774 fma 1 -0.0 1.0 -> 1.0 -dqadd37775 fma 1 -1.0 0.0 -> -1.0 -dqadd37776 fma 1 -1.0 -0.0 -> -1.0 -dqadd37777 fma 1 1.0 0.0 -> 1.0 -dqadd37778 fma 1 1.0 -0.0 -> 1.0 - --- Specials -dqadd37780 fma 1 -Inf -Inf -> -Infinity -dqadd37781 fma 1 -Inf -1000 -> -Infinity -dqadd37782 fma 1 -Inf -1 -> -Infinity -dqadd37783 fma 1 -Inf -0 -> -Infinity -dqadd37784 fma 1 -Inf 0 -> -Infinity -dqadd37785 fma 1 -Inf 1 -> -Infinity -dqadd37786 fma 1 -Inf 1000 -> -Infinity -dqadd37787 fma 1 -1000 -Inf -> -Infinity -dqadd37788 fma 1 -Inf -Inf -> -Infinity -dqadd37789 fma 1 -1 -Inf -> -Infinity -dqadd37790 fma 1 -0 -Inf -> -Infinity -dqadd37791 fma 1 0 -Inf -> -Infinity -dqadd37792 fma 1 1 -Inf -> -Infinity -dqadd37793 fma 1 1000 -Inf -> -Infinity -dqadd37794 fma 1 Inf -Inf -> NaN Invalid_operation - -dqadd37800 fma 1 Inf -Inf -> NaN Invalid_operation -dqadd37801 fma 1 Inf -1000 -> Infinity -dqadd37802 fma 1 Inf -1 -> Infinity -dqadd37803 fma 1 Inf -0 -> Infinity -dqadd37804 fma 1 Inf 0 -> Infinity -dqadd37805 fma 1 Inf 1 -> Infinity -dqadd37806 fma 1 Inf 1000 -> Infinity -dqadd37807 fma 1 Inf Inf -> Infinity -dqadd37808 fma 1 -1000 Inf -> Infinity -dqadd37809 fma 1 -Inf Inf -> NaN Invalid_operation -dqadd37810 fma 1 -1 Inf -> Infinity -dqadd37811 fma 1 -0 Inf -> Infinity -dqadd37812 fma 1 0 Inf -> Infinity -dqadd37813 fma 1 1 Inf -> Infinity -dqadd37814 fma 1 1000 Inf -> Infinity -dqadd37815 fma 1 Inf Inf -> Infinity - -dqadd37821 fma 1 NaN -Inf -> NaN -dqadd37822 fma 1 NaN -1000 -> NaN -dqadd37823 fma 1 NaN -1 -> NaN -dqadd37824 fma 1 NaN -0 -> NaN -dqadd37825 fma 1 NaN 0 -> NaN -dqadd37826 fma 1 NaN 1 -> NaN -dqadd37827 fma 1 NaN 1000 -> NaN -dqadd37828 fma 1 NaN Inf -> NaN -dqadd37829 fma 1 NaN NaN -> NaN -dqadd37830 fma 1 -Inf NaN -> NaN -dqadd37831 fma 1 -1000 NaN -> NaN -dqadd37832 fma 1 -1 NaN -> NaN -dqadd37833 fma 1 -0 NaN -> NaN -dqadd37834 fma 1 0 NaN -> NaN -dqadd37835 fma 1 1 NaN -> NaN -dqadd37836 fma 1 1000 NaN -> NaN -dqadd37837 fma 1 Inf NaN -> NaN - -dqadd37841 fma 1 sNaN -Inf -> NaN Invalid_operation -dqadd37842 fma 1 sNaN -1000 -> NaN Invalid_operation -dqadd37843 fma 1 sNaN -1 -> NaN Invalid_operation -dqadd37844 fma 1 sNaN -0 -> NaN Invalid_operation -dqadd37845 fma 1 sNaN 0 -> NaN Invalid_operation -dqadd37846 fma 1 sNaN 1 -> NaN Invalid_operation -dqadd37847 fma 1 sNaN 1000 -> NaN Invalid_operation -dqadd37848 fma 1 sNaN NaN -> NaN Invalid_operation -dqadd37849 fma 1 sNaN sNaN -> NaN Invalid_operation -dqadd37850 fma 1 NaN sNaN -> NaN Invalid_operation -dqadd37851 fma 1 -Inf sNaN -> NaN Invalid_operation -dqadd37852 fma 1 -1000 sNaN -> NaN Invalid_operation -dqadd37853 fma 1 -1 sNaN -> NaN Invalid_operation -dqadd37854 fma 1 -0 sNaN -> NaN Invalid_operation -dqadd37855 fma 1 0 sNaN -> NaN Invalid_operation -dqadd37856 fma 1 1 sNaN -> NaN Invalid_operation -dqadd37857 fma 1 1000 sNaN -> NaN Invalid_operation -dqadd37858 fma 1 Inf sNaN -> NaN Invalid_operation -dqadd37859 fma 1 NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqadd37861 fma 1 NaN1 -Inf -> NaN1 -dqadd37862 fma 1 +NaN2 -1000 -> NaN2 -dqadd37863 fma 1 NaN3 1000 -> NaN3 -dqadd37864 fma 1 NaN4 Inf -> NaN4 -dqadd37865 fma 1 NaN5 +NaN6 -> NaN5 -dqadd37866 fma 1 -Inf NaN7 -> NaN7 -dqadd37867 fma 1 -1000 NaN8 -> NaN8 -dqadd37868 fma 1 1000 NaN9 -> NaN9 -dqadd37869 fma 1 Inf +NaN10 -> NaN10 -dqadd37871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation -dqadd37872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation -dqadd37873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation -dqadd37874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation -dqadd37875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation -dqadd37876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation -dqadd37877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation -dqadd37878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation -dqadd37879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation -dqadd37880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation -dqadd37881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqadd37882 fma 1 -NaN26 NaN28 -> -NaN26 -dqadd37883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqadd37884 fma 1 1000 -NaN30 -> -NaN30 -dqadd37885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Here we explore near the boundary of rounding a subnormal to Nmin -dqadd37575 fma 1 1E-6143 -1E-6176 -> 9.99999999999999999999999999999999E-6144 Subnormal -dqadd37576 fma 1 -1E-6143 +1E-6176 -> -9.99999999999999999999999999999999E-6144 Subnormal - --- check overflow edge case --- 1234567890123456 -dqadd37972 apply 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqadd37973 fma 1 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37974 fma 1 9999999999999999999999999999999999E+6111 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37975 fma 1 9999999999999999999999999999999999E+6111 1E+6111 -> Infinity Overflow Inexact Rounded -dqadd37976 fma 1 9999999999999999999999999999999999E+6111 9E+6110 -> Infinity Overflow Inexact Rounded -dqadd37977 fma 1 9999999999999999999999999999999999E+6111 8E+6110 -> Infinity Overflow Inexact Rounded -dqadd37978 fma 1 9999999999999999999999999999999999E+6111 7E+6110 -> Infinity Overflow Inexact Rounded -dqadd37979 fma 1 9999999999999999999999999999999999E+6111 6E+6110 -> Infinity Overflow Inexact Rounded -dqadd37980 fma 1 9999999999999999999999999999999999E+6111 5E+6110 -> Infinity Overflow Inexact Rounded -dqadd37981 fma 1 9999999999999999999999999999999999E+6111 4E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37982 fma 1 9999999999999999999999999999999999E+6111 3E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37983 fma 1 9999999999999999999999999999999999E+6111 2E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37984 fma 1 9999999999999999999999999999999999E+6111 1E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded - -dqadd37985 apply -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqadd37986 fma 1 -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37987 fma 1 -9999999999999999999999999999999999E+6111 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37988 fma 1 -9999999999999999999999999999999999E+6111 -1E+6111 -> -Infinity Overflow Inexact Rounded -dqadd37989 fma 1 -9999999999999999999999999999999999E+6111 -9E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37990 fma 1 -9999999999999999999999999999999999E+6111 -8E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37991 fma 1 -9999999999999999999999999999999999E+6111 -7E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37992 fma 1 -9999999999999999999999999999999999E+6111 -6E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37993 fma 1 -9999999999999999999999999999999999E+6111 -5E+6110 -> -Infinity Overflow Inexact Rounded -dqadd37994 fma 1 -9999999999999999999999999999999999E+6111 -4E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37995 fma 1 -9999999999999999999999999999999999E+6111 -3E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37996 fma 1 -9999999999999999999999999999999999E+6111 -2E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded -dqadd37997 fma 1 -9999999999999999999999999999999999E+6111 -1E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -dqadd371100 fma 1 1e+2 -1e-6143 -> 99.99999999999999999999999999999999 Rounded Inexact -dqadd371101 fma 1 1e+1 -1e-6143 -> 9.999999999999999999999999999999999 Rounded Inexact -dqadd371103 fma 1 +1 -1e-6143 -> 0.9999999999999999999999999999999999 Rounded Inexact -dqadd371104 fma 1 1e-1 -1e-6143 -> 0.09999999999999999999999999999999999 Rounded Inexact -dqadd371105 fma 1 1e-2 -1e-6143 -> 0.009999999999999999999999999999999999 Rounded Inexact -dqadd371106 fma 1 1e-3 -1e-6143 -> 0.0009999999999999999999999999999999999 Rounded Inexact -dqadd371107 fma 1 1e-4 -1e-6143 -> 0.00009999999999999999999999999999999999 Rounded Inexact -dqadd371108 fma 1 1e-5 -1e-6143 -> 0.000009999999999999999999999999999999999 Rounded Inexact -dqadd371109 fma 1 1e-6 -1e-6143 -> 9.999999999999999999999999999999999E-7 Rounded Inexact - -rounding: ceiling -dqadd371110 fma 1 -1e+2 +1e-6143 -> -99.99999999999999999999999999999999 Rounded Inexact -dqadd371111 fma 1 -1e+1 +1e-6143 -> -9.999999999999999999999999999999999 Rounded Inexact -dqadd371113 fma 1 -1 +1e-6143 -> -0.9999999999999999999999999999999999 Rounded Inexact -dqadd371114 fma 1 -1e-1 +1e-6143 -> -0.09999999999999999999999999999999999 Rounded Inexact -dqadd371115 fma 1 -1e-2 +1e-6143 -> -0.009999999999999999999999999999999999 Rounded Inexact -dqadd371116 fma 1 -1e-3 +1e-6143 -> -0.0009999999999999999999999999999999999 Rounded Inexact -dqadd371117 fma 1 -1e-4 +1e-6143 -> -0.00009999999999999999999999999999999999 Rounded Inexact -dqadd371118 fma 1 -1e-5 +1e-6143 -> -0.000009999999999999999999999999999999999 Rounded Inexact -dqadd371119 fma 1 -1e-6 +1e-6143 -> -9.999999999999999999999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -dqadd371300 fma 1 1E34 -0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371310 fma 1 1E34 -0.51 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371311 fma 1 1E34 -0.501 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371312 fma 1 1E34 -0.5001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371313 fma 1 1E34 -0.50001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371314 fma 1 1E34 -0.500001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371315 fma 1 1E34 -0.5000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371316 fma 1 1E34 -0.50000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371317 fma 1 1E34 -0.500000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371318 fma 1 1E34 -0.5000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371319 fma 1 1E34 -0.50000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371320 fma 1 1E34 -0.500000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371321 fma 1 1E34 -0.5000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371322 fma 1 1E34 -0.50000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371323 fma 1 1E34 -0.500000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371324 fma 1 1E34 -0.5000000000000001 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371325 fma 1 1E34 -0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371326 fma 1 1E34 -0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371327 fma 1 1E34 -0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371328 fma 1 1E34 -0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371329 fma 1 1E34 -0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371330 fma 1 1E34 -0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371331 fma 1 1E34 -0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371332 fma 1 1E34 -0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371333 fma 1 1E34 -0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371334 fma 1 1E34 -0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371335 fma 1 1E34 -0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371336 fma 1 1E34 -0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371337 fma 1 1E34 -0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371338 fma 1 1E34 -0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371339 fma 1 1E34 -0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded - -dqadd371340 fma 1 1E34 -5000000.000010001 -> 9999999999999999999999999995000000 Inexact Rounded -dqadd371341 fma 1 1E34 -5000000.000000001 -> 9999999999999999999999999995000000 Inexact Rounded - -dqadd371349 fma 1 9999999999999999999999999999999999 0.4 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371350 fma 1 9999999999999999999999999999999999 0.49 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371351 fma 1 9999999999999999999999999999999999 0.499 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371352 fma 1 9999999999999999999999999999999999 0.4999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371353 fma 1 9999999999999999999999999999999999 0.49999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371354 fma 1 9999999999999999999999999999999999 0.499999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371355 fma 1 9999999999999999999999999999999999 0.4999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371356 fma 1 9999999999999999999999999999999999 0.49999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371357 fma 1 9999999999999999999999999999999999 0.499999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371358 fma 1 9999999999999999999999999999999999 0.4999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371359 fma 1 9999999999999999999999999999999999 0.49999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371360 fma 1 9999999999999999999999999999999999 0.499999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371361 fma 1 9999999999999999999999999999999999 0.4999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371362 fma 1 9999999999999999999999999999999999 0.49999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371363 fma 1 9999999999999999999999999999999999 0.499999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371364 fma 1 9999999999999999999999999999999999 0.4999999999999999 -> 9999999999999999999999999999999999 Inexact Rounded -dqadd371365 fma 1 9999999999999999999999999999999999 0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371367 fma 1 9999999999999999999999999999999999 0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371368 fma 1 9999999999999999999999999999999999 0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371369 fma 1 9999999999999999999999999999999999 0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371370 fma 1 9999999999999999999999999999999999 0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371371 fma 1 9999999999999999999999999999999999 0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371372 fma 1 9999999999999999999999999999999999 0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371373 fma 1 9999999999999999999999999999999999 0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371374 fma 1 9999999999999999999999999999999999 0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371375 fma 1 9999999999999999999999999999999999 0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371376 fma 1 9999999999999999999999999999999999 0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371377 fma 1 9999999999999999999999999999999999 0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371378 fma 1 9999999999999999999999999999999999 0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371379 fma 1 9999999999999999999999999999999999 0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371380 fma 1 9999999999999999999999999999999999 0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371381 fma 1 9999999999999999999999999999999999 0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371382 fma 1 9999999999999999999999999999999999 0.5000000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371383 fma 1 9999999999999999999999999999999999 0.500000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371384 fma 1 9999999999999999999999999999999999 0.50000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371385 fma 1 9999999999999999999999999999999999 0.5000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371386 fma 1 9999999999999999999999999999999999 0.500000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371387 fma 1 9999999999999999999999999999999999 0.50000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371388 fma 1 9999999999999999999999999999999999 0.5000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371389 fma 1 9999999999999999999999999999999999 0.500000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371390 fma 1 9999999999999999999999999999999999 0.50000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371391 fma 1 9999999999999999999999999999999999 0.5000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371392 fma 1 9999999999999999999999999999999999 0.500001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371393 fma 1 9999999999999999999999999999999999 0.50001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371394 fma 1 9999999999999999999999999999999999 0.5001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371395 fma 1 9999999999999999999999999999999999 0.501 -> 1.000000000000000000000000000000000E+34 Inexact Rounded -dqadd371396 fma 1 9999999999999999999999999999999999 0.51 -> 1.000000000000000000000000000000000E+34 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -dqadd371420 fma 1 0 1.123456789987654321123456789012345 -> 1.123456789987654321123456789012345 -dqadd371421 fma 1 0 1.123456789987654321123456789012345E-1 -> 0.1123456789987654321123456789012345 -dqadd371422 fma 1 0 1.123456789987654321123456789012345E-2 -> 0.01123456789987654321123456789012345 -dqadd371423 fma 1 0 1.123456789987654321123456789012345E-3 -> 0.001123456789987654321123456789012345 -dqadd371424 fma 1 0 1.123456789987654321123456789012345E-4 -> 0.0001123456789987654321123456789012345 -dqadd371425 fma 1 0 1.123456789987654321123456789012345E-5 -> 0.00001123456789987654321123456789012345 -dqadd371426 fma 1 0 1.123456789987654321123456789012345E-6 -> 0.000001123456789987654321123456789012345 -dqadd371427 fma 1 0 1.123456789987654321123456789012345E-7 -> 1.123456789987654321123456789012345E-7 -dqadd371428 fma 1 0 1.123456789987654321123456789012345E-8 -> 1.123456789987654321123456789012345E-8 -dqadd371429 fma 1 0 1.123456789987654321123456789012345E-9 -> 1.123456789987654321123456789012345E-9 -dqadd371430 fma 1 0 1.123456789987654321123456789012345E-10 -> 1.123456789987654321123456789012345E-10 -dqadd371431 fma 1 0 1.123456789987654321123456789012345E-11 -> 1.123456789987654321123456789012345E-11 -dqadd371432 fma 1 0 1.123456789987654321123456789012345E-12 -> 1.123456789987654321123456789012345E-12 -dqadd371433 fma 1 0 1.123456789987654321123456789012345E-13 -> 1.123456789987654321123456789012345E-13 -dqadd371434 fma 1 0 1.123456789987654321123456789012345E-14 -> 1.123456789987654321123456789012345E-14 -dqadd371435 fma 1 0 1.123456789987654321123456789012345E-15 -> 1.123456789987654321123456789012345E-15 -dqadd371436 fma 1 0 1.123456789987654321123456789012345E-16 -> 1.123456789987654321123456789012345E-16 -dqadd371437 fma 1 0 1.123456789987654321123456789012345E-17 -> 1.123456789987654321123456789012345E-17 -dqadd371438 fma 1 0 1.123456789987654321123456789012345E-18 -> 1.123456789987654321123456789012345E-18 -dqadd371439 fma 1 0 1.123456789987654321123456789012345E-19 -> 1.123456789987654321123456789012345E-19 -dqadd371440 fma 1 0 1.123456789987654321123456789012345E-20 -> 1.123456789987654321123456789012345E-20 -dqadd371441 fma 1 0 1.123456789987654321123456789012345E-21 -> 1.123456789987654321123456789012345E-21 -dqadd371442 fma 1 0 1.123456789987654321123456789012345E-22 -> 1.123456789987654321123456789012345E-22 -dqadd371443 fma 1 0 1.123456789987654321123456789012345E-23 -> 1.123456789987654321123456789012345E-23 -dqadd371444 fma 1 0 1.123456789987654321123456789012345E-24 -> 1.123456789987654321123456789012345E-24 -dqadd371445 fma 1 0 1.123456789987654321123456789012345E-25 -> 1.123456789987654321123456789012345E-25 -dqadd371446 fma 1 0 1.123456789987654321123456789012345E-26 -> 1.123456789987654321123456789012345E-26 -dqadd371447 fma 1 0 1.123456789987654321123456789012345E-27 -> 1.123456789987654321123456789012345E-27 -dqadd371448 fma 1 0 1.123456789987654321123456789012345E-28 -> 1.123456789987654321123456789012345E-28 -dqadd371449 fma 1 0 1.123456789987654321123456789012345E-29 -> 1.123456789987654321123456789012345E-29 -dqadd371450 fma 1 0 1.123456789987654321123456789012345E-30 -> 1.123456789987654321123456789012345E-30 -dqadd371451 fma 1 0 1.123456789987654321123456789012345E-31 -> 1.123456789987654321123456789012345E-31 -dqadd371452 fma 1 0 1.123456789987654321123456789012345E-32 -> 1.123456789987654321123456789012345E-32 -dqadd371453 fma 1 0 1.123456789987654321123456789012345E-33 -> 1.123456789987654321123456789012345E-33 -dqadd371454 fma 1 0 1.123456789987654321123456789012345E-34 -> 1.123456789987654321123456789012345E-34 -dqadd371455 fma 1 0 1.123456789987654321123456789012345E-35 -> 1.123456789987654321123456789012345E-35 -dqadd371456 fma 1 0 1.123456789987654321123456789012345E-36 -> 1.123456789987654321123456789012345E-36 - --- same, reversed 0 -dqadd371460 fma 1 1.123456789987654321123456789012345 0 -> 1.123456789987654321123456789012345 -dqadd371461 fma 1 1.123456789987654321123456789012345E-1 0 -> 0.1123456789987654321123456789012345 -dqadd371462 fma 1 1.123456789987654321123456789012345E-2 0 -> 0.01123456789987654321123456789012345 -dqadd371463 fma 1 1.123456789987654321123456789012345E-3 0 -> 0.001123456789987654321123456789012345 -dqadd371464 fma 1 1.123456789987654321123456789012345E-4 0 -> 0.0001123456789987654321123456789012345 -dqadd371465 fma 1 1.123456789987654321123456789012345E-5 0 -> 0.00001123456789987654321123456789012345 -dqadd371466 fma 1 1.123456789987654321123456789012345E-6 0 -> 0.000001123456789987654321123456789012345 -dqadd371467 fma 1 1.123456789987654321123456789012345E-7 0 -> 1.123456789987654321123456789012345E-7 -dqadd371468 fma 1 1.123456789987654321123456789012345E-8 0 -> 1.123456789987654321123456789012345E-8 -dqadd371469 fma 1 1.123456789987654321123456789012345E-9 0 -> 1.123456789987654321123456789012345E-9 -dqadd371470 fma 1 1.123456789987654321123456789012345E-10 0 -> 1.123456789987654321123456789012345E-10 -dqadd371471 fma 1 1.123456789987654321123456789012345E-11 0 -> 1.123456789987654321123456789012345E-11 -dqadd371472 fma 1 1.123456789987654321123456789012345E-12 0 -> 1.123456789987654321123456789012345E-12 -dqadd371473 fma 1 1.123456789987654321123456789012345E-13 0 -> 1.123456789987654321123456789012345E-13 -dqadd371474 fma 1 1.123456789987654321123456789012345E-14 0 -> 1.123456789987654321123456789012345E-14 -dqadd371475 fma 1 1.123456789987654321123456789012345E-15 0 -> 1.123456789987654321123456789012345E-15 -dqadd371476 fma 1 1.123456789987654321123456789012345E-16 0 -> 1.123456789987654321123456789012345E-16 -dqadd371477 fma 1 1.123456789987654321123456789012345E-17 0 -> 1.123456789987654321123456789012345E-17 -dqadd371478 fma 1 1.123456789987654321123456789012345E-18 0 -> 1.123456789987654321123456789012345E-18 -dqadd371479 fma 1 1.123456789987654321123456789012345E-19 0 -> 1.123456789987654321123456789012345E-19 -dqadd371480 fma 1 1.123456789987654321123456789012345E-20 0 -> 1.123456789987654321123456789012345E-20 -dqadd371481 fma 1 1.123456789987654321123456789012345E-21 0 -> 1.123456789987654321123456789012345E-21 -dqadd371482 fma 1 1.123456789987654321123456789012345E-22 0 -> 1.123456789987654321123456789012345E-22 -dqadd371483 fma 1 1.123456789987654321123456789012345E-23 0 -> 1.123456789987654321123456789012345E-23 -dqadd371484 fma 1 1.123456789987654321123456789012345E-24 0 -> 1.123456789987654321123456789012345E-24 -dqadd371485 fma 1 1.123456789987654321123456789012345E-25 0 -> 1.123456789987654321123456789012345E-25 -dqadd371486 fma 1 1.123456789987654321123456789012345E-26 0 -> 1.123456789987654321123456789012345E-26 -dqadd371487 fma 1 1.123456789987654321123456789012345E-27 0 -> 1.123456789987654321123456789012345E-27 -dqadd371488 fma 1 1.123456789987654321123456789012345E-28 0 -> 1.123456789987654321123456789012345E-28 -dqadd371489 fma 1 1.123456789987654321123456789012345E-29 0 -> 1.123456789987654321123456789012345E-29 -dqadd371490 fma 1 1.123456789987654321123456789012345E-30 0 -> 1.123456789987654321123456789012345E-30 -dqadd371491 fma 1 1.123456789987654321123456789012345E-31 0 -> 1.123456789987654321123456789012345E-31 -dqadd371492 fma 1 1.123456789987654321123456789012345E-32 0 -> 1.123456789987654321123456789012345E-32 -dqadd371493 fma 1 1.123456789987654321123456789012345E-33 0 -> 1.123456789987654321123456789012345E-33 -dqadd371494 fma 1 1.123456789987654321123456789012345E-34 0 -> 1.123456789987654321123456789012345E-34 -dqadd371495 fma 1 1.123456789987654321123456789012345E-35 0 -> 1.123456789987654321123456789012345E-35 -dqadd371496 fma 1 1.123456789987654321123456789012345E-36 0 -> 1.123456789987654321123456789012345E-36 - --- same, Es on the 0 -dqadd371500 fma 1 1.123456789987654321123456789012345 0E-0 -> 1.123456789987654321123456789012345 -dqadd371501 fma 1 1.123456789987654321123456789012345 0E-1 -> 1.123456789987654321123456789012345 -dqadd371502 fma 1 1.123456789987654321123456789012345 0E-2 -> 1.123456789987654321123456789012345 -dqadd371503 fma 1 1.123456789987654321123456789012345 0E-3 -> 1.123456789987654321123456789012345 -dqadd371504 fma 1 1.123456789987654321123456789012345 0E-4 -> 1.123456789987654321123456789012345 -dqadd371505 fma 1 1.123456789987654321123456789012345 0E-5 -> 1.123456789987654321123456789012345 -dqadd371506 fma 1 1.123456789987654321123456789012345 0E-6 -> 1.123456789987654321123456789012345 -dqadd371507 fma 1 1.123456789987654321123456789012345 0E-7 -> 1.123456789987654321123456789012345 -dqadd371508 fma 1 1.123456789987654321123456789012345 0E-8 -> 1.123456789987654321123456789012345 -dqadd371509 fma 1 1.123456789987654321123456789012345 0E-9 -> 1.123456789987654321123456789012345 -dqadd371510 fma 1 1.123456789987654321123456789012345 0E-10 -> 1.123456789987654321123456789012345 -dqadd371511 fma 1 1.123456789987654321123456789012345 0E-11 -> 1.123456789987654321123456789012345 -dqadd371512 fma 1 1.123456789987654321123456789012345 0E-12 -> 1.123456789987654321123456789012345 -dqadd371513 fma 1 1.123456789987654321123456789012345 0E-13 -> 1.123456789987654321123456789012345 -dqadd371514 fma 1 1.123456789987654321123456789012345 0E-14 -> 1.123456789987654321123456789012345 -dqadd371515 fma 1 1.123456789987654321123456789012345 0E-15 -> 1.123456789987654321123456789012345 -dqadd371516 fma 1 1.123456789987654321123456789012345 0E-16 -> 1.123456789987654321123456789012345 -dqadd371517 fma 1 1.123456789987654321123456789012345 0E-17 -> 1.123456789987654321123456789012345 -dqadd371518 fma 1 1.123456789987654321123456789012345 0E-18 -> 1.123456789987654321123456789012345 -dqadd371519 fma 1 1.123456789987654321123456789012345 0E-19 -> 1.123456789987654321123456789012345 -dqadd371520 fma 1 1.123456789987654321123456789012345 0E-20 -> 1.123456789987654321123456789012345 -dqadd371521 fma 1 1.123456789987654321123456789012345 0E-21 -> 1.123456789987654321123456789012345 -dqadd371522 fma 1 1.123456789987654321123456789012345 0E-22 -> 1.123456789987654321123456789012345 -dqadd371523 fma 1 1.123456789987654321123456789012345 0E-23 -> 1.123456789987654321123456789012345 -dqadd371524 fma 1 1.123456789987654321123456789012345 0E-24 -> 1.123456789987654321123456789012345 -dqadd371525 fma 1 1.123456789987654321123456789012345 0E-25 -> 1.123456789987654321123456789012345 -dqadd371526 fma 1 1.123456789987654321123456789012345 0E-26 -> 1.123456789987654321123456789012345 -dqadd371527 fma 1 1.123456789987654321123456789012345 0E-27 -> 1.123456789987654321123456789012345 -dqadd371528 fma 1 1.123456789987654321123456789012345 0E-28 -> 1.123456789987654321123456789012345 -dqadd371529 fma 1 1.123456789987654321123456789012345 0E-29 -> 1.123456789987654321123456789012345 -dqadd371530 fma 1 1.123456789987654321123456789012345 0E-30 -> 1.123456789987654321123456789012345 -dqadd371531 fma 1 1.123456789987654321123456789012345 0E-31 -> 1.123456789987654321123456789012345 -dqadd371532 fma 1 1.123456789987654321123456789012345 0E-32 -> 1.123456789987654321123456789012345 -dqadd371533 fma 1 1.123456789987654321123456789012345 0E-33 -> 1.123456789987654321123456789012345 --- next four flag Rounded because the 0 extends the result -dqadd371534 fma 1 1.123456789987654321123456789012345 0E-34 -> 1.123456789987654321123456789012345 Rounded -dqadd371535 fma 1 1.123456789987654321123456789012345 0E-35 -> 1.123456789987654321123456789012345 Rounded -dqadd371536 fma 1 1.123456789987654321123456789012345 0E-36 -> 1.123456789987654321123456789012345 Rounded -dqadd371537 fma 1 1.123456789987654321123456789012345 0E-37 -> 1.123456789987654321123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -dqadd371600 fma 1 0 0E-19 -> 0E-19 -dqadd371601 fma 1 -0 0E-19 -> 0E-19 -dqadd371602 fma 1 0 -0E-19 -> 0E-19 -dqadd371603 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371611 fma 1 -11 11 -> 0 -dqadd371612 fma 1 11 -11 -> 0 --- overflow -dqadd371613 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371614 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: half_down --- exact zeros from zeros -dqadd371620 fma 1 0 0E-19 -> 0E-19 -dqadd371621 fma 1 -0 0E-19 -> 0E-19 -dqadd371622 fma 1 0 -0E-19 -> 0E-19 -dqadd371623 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371631 fma 1 -11 11 -> 0 -dqadd371632 fma 1 11 -11 -> 0 --- overflow -dqadd371633 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371634 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: half_even --- exact zeros from zeros -dqadd371640 fma 1 0 0E-19 -> 0E-19 -dqadd371641 fma 1 -0 0E-19 -> 0E-19 -dqadd371642 fma 1 0 -0E-19 -> 0E-19 -dqadd371643 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371651 fma 1 -11 11 -> 0 -dqadd371652 fma 1 11 -11 -> 0 --- overflow -dqadd371653 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371654 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: up --- exact zeros from zeros -dqadd371660 fma 1 0 0E-19 -> 0E-19 -dqadd371661 fma 1 -0 0E-19 -> 0E-19 -dqadd371662 fma 1 0 -0E-19 -> 0E-19 -dqadd371663 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371671 fma 1 -11 11 -> 0 -dqadd371672 fma 1 11 -11 -> 0 --- overflow -dqadd371673 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371674 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: down --- exact zeros from zeros -dqadd371680 fma 1 0 0E-19 -> 0E-19 -dqadd371681 fma 1 -0 0E-19 -> 0E-19 -dqadd371682 fma 1 0 -0E-19 -> 0E-19 -dqadd371683 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371691 fma 1 -11 11 -> 0 -dqadd371692 fma 1 11 -11 -> 0 --- overflow -dqadd371693 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqadd371694 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded - -rounding: ceiling --- exact zeros from zeros -dqadd371700 fma 1 0 0E-19 -> 0E-19 -dqadd371701 fma 1 -0 0E-19 -> 0E-19 -dqadd371702 fma 1 0 -0E-19 -> 0E-19 -dqadd371703 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371711 fma 1 -11 11 -> 0 -dqadd371712 fma 1 11 -11 -> 0 --- overflow -dqadd371713 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded -dqadd371714 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -dqadd371720 fma 1 0 0E-19 -> 0E-19 -dqadd371721 fma 1 -0 0E-19 -> -0E-19 -- * -dqadd371722 fma 1 0 -0E-19 -> -0E-19 -- * -dqadd371723 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371731 fma 1 -11 11 -> -0 -- * -dqadd371732 fma 1 11 -11 -> -0 -- * --- overflow -dqadd371733 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqadd371734 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded - -rounding: 05up --- exact zeros from zeros -dqadd371740 fma 1 0 0E-19 -> 0E-19 -dqadd371741 fma 1 -0 0E-19 -> 0E-19 -dqadd371742 fma 1 0 -0E-19 -> 0E-19 -dqadd371743 fma 1 -0 -0E-19 -> -0E-19 --- exact zeros from non-zeros -dqadd371751 fma 1 -11 11 -> 0 -dqadd371752 fma 1 11 -11 -> 0 --- overflow -dqadd371753 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded -dqadd371754 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded - --- Examples from SQL proposal (Krishna Kulkarni) -dqadd371761 fma 1 130E-2 120E-2 -> 2.50 -dqadd371762 fma 1 130E-2 12E-1 -> 2.50 -dqadd371763 fma 1 130E-2 1E0 -> 2.30 -dqadd371764 fma 1 1E2 1E4 -> 1.01E+4 -dqadd371765 fma 1 130E-2 -120E-2 -> 0.10 -dqadd371766 fma 1 130E-2 -12E-1 -> 0.10 -dqadd371767 fma 1 130E-2 -1E0 -> 0.30 -dqadd371768 fma 1 1E2 -1E4 -> -9.9E+3 - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -dqadd375001 fma 1 1239876543211234567894567890123456 1 -> 1239876543211234567894567890123457 -dqadd375002 fma 1 1239876543211234567894567890123456 0.6 -> 1239876543211234567894567890123457 Inexact Rounded -dqadd375003 fma 1 1239876543211234567894567890123456 0.06 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375004 fma 1 1239876543211234567894567890123456 6E-3 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375005 fma 1 1239876543211234567894567890123456 6E-4 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375006 fma 1 1239876543211234567894567890123456 6E-5 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375007 fma 1 1239876543211234567894567890123456 6E-6 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375008 fma 1 1239876543211234567894567890123456 6E-7 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375009 fma 1 1239876543211234567894567890123456 6E-8 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375010 fma 1 1239876543211234567894567890123456 6E-9 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375011 fma 1 1239876543211234567894567890123456 6E-10 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375012 fma 1 1239876543211234567894567890123456 6E-11 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375013 fma 1 1239876543211234567894567890123456 6E-12 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375014 fma 1 1239876543211234567894567890123456 6E-13 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375015 fma 1 1239876543211234567894567890123456 6E-14 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375016 fma 1 1239876543211234567894567890123456 6E-15 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375017 fma 1 1239876543211234567894567890123456 6E-16 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375018 fma 1 1239876543211234567894567890123456 6E-17 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375019 fma 1 1239876543211234567894567890123456 6E-18 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375020 fma 1 1239876543211234567894567890123456 6E-19 -> 1239876543211234567894567890123456 Inexact Rounded -dqadd375021 fma 1 1239876543211234567894567890123456 6E-20 -> 1239876543211234567894567890123456 Inexact Rounded - --- widening second argument at gap -dqadd375030 fma 1 12398765432112345678945678 1 -> 12398765432112345678945679 -dqadd375031 fma 1 12398765432112345678945678 0.1 -> 12398765432112345678945678.1 -dqadd375032 fma 1 12398765432112345678945678 0.12 -> 12398765432112345678945678.12 -dqadd375033 fma 1 12398765432112345678945678 0.123 -> 12398765432112345678945678.123 -dqadd375034 fma 1 12398765432112345678945678 0.1234 -> 12398765432112345678945678.1234 -dqadd375035 fma 1 12398765432112345678945678 0.12345 -> 12398765432112345678945678.12345 -dqadd375036 fma 1 12398765432112345678945678 0.123456 -> 12398765432112345678945678.123456 -dqadd375037 fma 1 12398765432112345678945678 0.1234567 -> 12398765432112345678945678.1234567 -dqadd375038 fma 1 12398765432112345678945678 0.12345678 -> 12398765432112345678945678.12345678 -dqadd375039 fma 1 12398765432112345678945678 0.123456789 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375040 fma 1 12398765432112345678945678 0.123456785 -> 12398765432112345678945678.12345678 Inexact Rounded -dqadd375041 fma 1 12398765432112345678945678 0.1234567850 -> 12398765432112345678945678.12345678 Inexact Rounded -dqadd375042 fma 1 12398765432112345678945678 0.1234567851 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375043 fma 1 12398765432112345678945678 0.12345678501 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375044 fma 1 12398765432112345678945678 0.123456785001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375045 fma 1 12398765432112345678945678 0.1234567850001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375046 fma 1 12398765432112345678945678 0.12345678500001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375047 fma 1 12398765432112345678945678 0.123456785000001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375048 fma 1 12398765432112345678945678 0.1234567850000001 -> 12398765432112345678945678.12345679 Inexact Rounded -dqadd375049 fma 1 12398765432112345678945678 0.1234567850000000 -> 12398765432112345678945678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -dqadd375050 fma 1 12398765432112345678945678 0.0234567750000000 -> 12398765432112345678945678.02345678 Inexact Rounded -dqadd375051 fma 1 12398765432112345678945678 0.0034567750000000 -> 12398765432112345678945678.00345678 Inexact Rounded -dqadd375052 fma 1 12398765432112345678945678 0.0004567750000000 -> 12398765432112345678945678.00045678 Inexact Rounded -dqadd375053 fma 1 12398765432112345678945678 0.0000567750000000 -> 12398765432112345678945678.00005678 Inexact Rounded -dqadd375054 fma 1 12398765432112345678945678 0.0000067750000000 -> 12398765432112345678945678.00000678 Inexact Rounded -dqadd375055 fma 1 12398765432112345678945678 0.0000007750000000 -> 12398765432112345678945678.00000078 Inexact Rounded -dqadd375056 fma 1 12398765432112345678945678 0.0000000750000000 -> 12398765432112345678945678.00000008 Inexact Rounded -dqadd375057 fma 1 12398765432112345678945678 0.0000000050000000 -> 12398765432112345678945678.00000000 Inexact Rounded -dqadd375060 fma 1 12398765432112345678945678 0.0234567750000001 -> 12398765432112345678945678.02345678 Inexact Rounded -dqadd375061 fma 1 12398765432112345678945678 0.0034567750000001 -> 12398765432112345678945678.00345678 Inexact Rounded -dqadd375062 fma 1 12398765432112345678945678 0.0004567750000001 -> 12398765432112345678945678.00045678 Inexact Rounded -dqadd375063 fma 1 12398765432112345678945678 0.0000567750000001 -> 12398765432112345678945678.00005678 Inexact Rounded -dqadd375064 fma 1 12398765432112345678945678 0.0000067750000001 -> 12398765432112345678945678.00000678 Inexact Rounded -dqadd375065 fma 1 12398765432112345678945678 0.0000007750000001 -> 12398765432112345678945678.00000078 Inexact Rounded -dqadd375066 fma 1 12398765432112345678945678 0.0000000750000001 -> 12398765432112345678945678.00000008 Inexact Rounded -dqadd375067 fma 1 12398765432112345678945678 0.0000000050000001 -> 12398765432112345678945678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -dqadd375070 fma 1 12398765432112345678945678 1E-8 -> 12398765432112345678945678.00000001 -dqadd375071 fma 1 12398765432112345678945678 1E-9 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375072 fma 1 12398765432112345678945678 1E-10 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375073 fma 1 12398765432112345678945678 1E-11 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375074 fma 1 12398765432112345678945678 1E-12 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375075 fma 1 12398765432112345678945678 1E-13 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375076 fma 1 12398765432112345678945678 1E-14 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375077 fma 1 12398765432112345678945678 1E-15 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375078 fma 1 12398765432112345678945678 1E-16 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375079 fma 1 12398765432112345678945678 1E-17 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375080 fma 1 12398765432112345678945678 1E-18 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375081 fma 1 12398765432112345678945678 1E-19 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375082 fma 1 12398765432112345678945678 1E-20 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375083 fma 1 12398765432112345678945678 1E-25 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375084 fma 1 12398765432112345678945678 1E-30 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375085 fma 1 12398765432112345678945678 1E-31 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375086 fma 1 12398765432112345678945678 1E-32 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375087 fma 1 12398765432112345678945678 1E-33 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375088 fma 1 12398765432112345678945678 1E-34 -> 12398765432112345678945678.00000001 Inexact Rounded -dqadd375089 fma 1 12398765432112345678945678 1E-35 -> 12398765432112345678945678.00000001 Inexact Rounded - --- Destructive subtract (from remainder tests) - --- +++ some of these will be off-by-one remainder vs remainderNear - -dqfma4000 fma -1234567890123456789012345678901233 1.000000000000000000000000000000001 1234567890123456789012345678901234 -> -0.234567890123456789012345678901233 -dqfma4001 fma -1234567890123456789012345678901222 1.00000000000000000000000000000001 1234567890123456789012345678901234 -> -0.34567890123456789012345678901222 -dqfma4002 fma -1234567890123456789012345678901111 1.0000000000000000000000000000001 1234567890123456789012345678901234 -> -0.4567890123456789012345678901111 -dqfma4003 fma -308641972530864197253086419725314 4.000000000000000000000000000000001 1234567890123456789012345678901255 -> -1.308641972530864197253086419725314 -dqfma4004 fma -308641972530864197253086419725308 4.000000000000000000000000000000001 1234567890123456789012345678901234 -> 1.691358027469135802746913580274692 -dqfma4005 fma -246913578024691357802469135780252 4.9999999999999999999999999999999 1234567890123456789012345678901234 -> -1.3086421975308642197530864219748 -dqfma4006 fma -246913578024691357802469135780247 4.99999999999999999999999999999999 1234567890123456789012345678901234 -> 1.46913578024691357802469135780247 -dqfma4007 fma -246913578024691357802469135780247 4.999999999999999999999999999999999 1234567890123456789012345678901234 -> -0.753086421975308642197530864219753 -dqfma4008 fma -246913578024691357802469135780247 5.000000000000000000000000000000001 1234567890123456789012345678901234 -> -1.246913578024691357802469135780247 -dqfma4009 fma -246913578024691357802469135780246 5.00000000000000000000000000000001 1234567890123456789012345678901234 -> 1.53086421975308642197530864219754 -dqfma4010 fma -246913578024691357802469135780242 5.0000000000000000000000000000001 1234567890123456789012345678901234 -> -0.6913578024691357802469135780242 -dqfma4011 fma -1234567890123456789012345678901232 1.000000000000000000000000000000001 1234567890123456789012345678901234 -> 0.765432109876543210987654321098768 -dqfma4012 fma -1234567890123456789012345678901221 1.00000000000000000000000000000001 1234567890123456789012345678901234 -> 0.65432109876543210987654321098779 -dqfma4013 fma -1234567890123456789012345678901110 1.0000000000000000000000000000001 1234567890123456789012345678901234 -> 0.5432109876543210987654321098890 -dqfma4014 fma -308641972530864197253086419725313 4.000000000000000000000000000000001 1234567890123456789012345678901255 -> 2.691358027469135802746913580274687 -dqfma4015 fma -308641972530864197253086419725308 4.000000000000000000000000000000001 1234567890123456789012345678901234 -> 1.691358027469135802746913580274692 -dqfma4016 fma -246913578024691357802469135780251 4.9999999999999999999999999999999 1234567890123456789012345678901234 -> 3.6913578024691357802469135780251 -dqfma4017 fma -246913578024691357802469135780247 4.99999999999999999999999999999999 1234567890123456789012345678901234 -> 1.46913578024691357802469135780247 -dqfma4018 fma -246913578024691357802469135780246 4.999999999999999999999999999999999 1234567890123456789012345678901234 -> 4.246913578024691357802469135780246 -dqfma4019 fma -246913578024691357802469135780241 5.0000000000000000000000000000001 1234567890123456789012345678901234 -> 4.3086421975308642197530864219759 - --- Null tests -dqadd39990 fma 1 10 # -> NaN Invalid_operation -dqadd39991 fma 1 # 10 -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- dqFMA.decTest -- decQuad Fused Multiply Add -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- These tests comprise three parts: +-- 1. Sanity checks and other three-operand tests (especially those +-- where the fused operation makes a difference) +-- 2. Multiply tests (third operand is neutral zero [0E+emax]) +-- 3. Addition tests (first operand is 1) +-- The multiply and addition tests are extensive because FMA may have +-- its own dedicated multiplication or addition routine(s), and they +-- also inherently check the left-to-right properties. + +-- Sanity checks +dqfma0001 fma 1 1 1 -> 2 +dqfma0002 fma 1 1 2 -> 3 +dqfma0003 fma 2 2 3 -> 7 +dqfma0004 fma 9 9 9 -> 90 +dqfma0005 fma -1 1 1 -> 0 +dqfma0006 fma -1 1 2 -> 1 +dqfma0007 fma -2 2 3 -> -1 +dqfma0008 fma -9 9 9 -> -72 +dqfma0011 fma 1 -1 1 -> 0 +dqfma0012 fma 1 -1 2 -> 1 +dqfma0013 fma 2 -2 3 -> -1 +dqfma0014 fma 9 -9 9 -> -72 +dqfma0015 fma 1 1 -1 -> 0 +dqfma0016 fma 1 1 -2 -> -1 +dqfma0017 fma 2 2 -3 -> 1 +dqfma0018 fma 9 9 -9 -> 72 + +-- non-integer exacts +dqfma0100 fma 25.2 63.6 -438 -> 1164.72 +dqfma0101 fma 0.301 0.380 334 -> 334.114380 +dqfma0102 fma 49.2 -4.8 23.3 -> -212.86 +dqfma0103 fma 4.22 0.079 -94.6 -> -94.26662 +dqfma0104 fma 903 0.797 0.887 -> 720.578 +dqfma0105 fma 6.13 -161 65.9 -> -921.03 +dqfma0106 fma 28.2 727 5.45 -> 20506.85 +dqfma0107 fma 4 605 688 -> 3108 +dqfma0108 fma 93.3 0.19 0.226 -> 17.953 +dqfma0109 fma 0.169 -341 5.61 -> -52.019 +dqfma0110 fma -72.2 30 -51.2 -> -2217.2 +dqfma0111 fma -0.409 13 20.4 -> 15.083 +dqfma0112 fma 317 77.0 19.0 -> 24428.0 +dqfma0113 fma 47 6.58 1.62 -> 310.88 +dqfma0114 fma 1.36 0.984 0.493 -> 1.83124 +dqfma0115 fma 72.7 274 1.56 -> 19921.36 +dqfma0116 fma 335 847 83 -> 283828 +dqfma0117 fma 666 0.247 25.4 -> 189.902 +dqfma0118 fma -3.87 3.06 78.0 -> 66.1578 +dqfma0119 fma 0.742 192 35.6 -> 178.064 +dqfma0120 fma -91.6 5.29 0.153 -> -484.411 + +-- cases where result is different from separate multiply + add; each +-- is preceded by the result of unfused multiply and add +-- [this is about 20% of all similar cases in general] +-- -> 4.500119002100000209469729375698778E+38 +dqfma0202 fma 68537985861355864457.5694 6565875762972086605.85969 35892634447236753.172812 -> 4.500119002100000209469729375698779E+38 Inexact Rounded +-- -> 5.996248469584594346858881620185514E+41 +dqfma0208 fma 89261822344727628571.9 6717595845654131383336.89 5061036497288796076266.11 -> 5.996248469584594346858881620185513E+41 Inexact Rounded +-- -> 1.899242968678256924021594770874070E+34 +dqfma0210 fma 320506237232448685.495971 59257597764017967.984448 3205615239077711589912.85 -> 1.899242968678256924021594770874071E+34 Inexact Rounded +-- -> 7.078596978842809537929699954860309E+37 +dqfma0215 fma 220247843259112263.17995 321392340287987979002.80 47533279819997167655440 -> 7.078596978842809537929699954860308E+37 Inexact Rounded +-- -> 1.224955667581427559754106862350743E+37 +dqfma0226 fma 23880729790368880412.1449 512947333827064719.55407 217117438419590824502.963 -> 1.224955667581427559754106862350744E+37 Inexact Rounded +-- -> -2.530094043253148806272276368579144E+42 +dqfma0229 fma 2539892357016099706.4126 -996142232667504817717435 53682082598315949425.937 -> -2.530094043253148806272276368579143E+42 Inexact Rounded +-- -> 1.713387085759711954319391412788454E+37 +dqfma0233 fma 4546339491341624464.0804 3768717864169205581 83578980278690395184.620 -> 1.713387085759711954319391412788453E+37 Inexact Rounded +-- -> 4.062275663405823716411579117771547E+35 +dqfma0235 fma 409242119433816131.42253 992633815166741501.477249 70179636544416756129546 -> 4.062275663405823716411579117771548E+35 Inexact Rounded +-- -> 6.002604327732568490562249875306823E+47 +dqfma0258 fma 817941336593541742159684 733867339769310729266598 78563844650942419311830.8 -> 6.002604327732568490562249875306822E+47 Inexact Rounded +-- -> -2.027022514381452197510103395283874E+39 +dqfma0264 fma 387617310169161270.737532 -5229442703414956061216.62 57665666816652967150473.5 -> -2.027022514381452197510103395283873E+39 Inexact Rounded +-- -> -7.856525039803554001144089842730361E+37 +dqfma0267 fma -847655845720565274701.210 92685316564117739.83984 22780950041376424429.5686 -> -7.856525039803554001144089842730360E+37 Inexact Rounded +-- -> 1.695515562011520746125607502237559E+38 +dqfma0268 fma 21590290365127685.3675 7853139227576541379426.8 -3275859437236180.761544 -> 1.695515562011520746125607502237558E+38 Inexact Rounded +-- -> -8.448422935783289219748115038014710E+38 +dqfma0269 fma -974320636272862697.971586 867109103641860247440.756 -9775170775902454762.98 -> -8.448422935783289219748115038014709E+38 Inexact Rounded + +-- Cases where multiply would overflow or underflow if separate +dqfma0300 fma 9e+6144 10 0 -> Infinity Overflow Inexact Rounded +dqfma0301 fma 1e+6144 10 0 -> Infinity Overflow Inexact Rounded +dqfma0302 fma 1e+6144 10 -1e+6144 -> 9.000000000000000000000000000000000E+6144 Clamped +dqfma0303 fma 1e+6144 10 -9e+6144 -> 1.000000000000000000000000000000000E+6144 Clamped +-- subnormal etc. +dqfma0305 fma 1e-6176 0.1 0 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma0306 fma 1e-6176 0.1 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqfma0307 fma 1e-6176 0.1 1e-6176 -> 1E-6176 Underflow Subnormal Inexact Rounded + +-- Infinite combinations +dqfma0800 fma Inf Inf Inf -> Infinity +dqfma0801 fma Inf Inf -Inf -> NaN Invalid_operation +dqfma0802 fma Inf -Inf Inf -> NaN Invalid_operation +dqfma0803 fma Inf -Inf -Inf -> -Infinity +dqfma0804 fma -Inf Inf Inf -> NaN Invalid_operation +dqfma0805 fma -Inf Inf -Inf -> -Infinity +dqfma0806 fma -Inf -Inf Inf -> Infinity +dqfma0807 fma -Inf -Inf -Inf -> NaN Invalid_operation + +-- Triple NaN propagation +dqfma0900 fma NaN2 NaN3 NaN5 -> NaN2 +dqfma0901 fma 0 NaN3 NaN5 -> NaN3 +dqfma0902 fma 0 0 NaN5 -> NaN5 +-- first sNaN wins (consider qNaN from earlier sNaN being +-- overridden by an sNaN in third operand) +dqfma0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +dqfma0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation +dqfma0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation +dqfma0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +dqfma0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation +dqfma0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation + +-- MULTIPLICATION TESTS ------------------------------------------------ +rounding: half_even + +-- sanity checks +dqfma2000 fma 2 2 0e+6144 -> 4 +dqfma2001 fma 2 3 0e+6144 -> 6 +dqfma2002 fma 5 1 0e+6144 -> 5 +dqfma2003 fma 5 2 0e+6144 -> 10 +dqfma2004 fma 1.20 2 0e+6144 -> 2.40 +dqfma2005 fma 1.20 0 0e+6144 -> 0.00 +dqfma2006 fma 1.20 -2 0e+6144 -> -2.40 +dqfma2007 fma -1.20 2 0e+6144 -> -2.40 +dqfma2008 fma -1.20 0 0e+6144 -> 0.00 +dqfma2009 fma -1.20 -2 0e+6144 -> 2.40 +dqfma2010 fma 5.09 7.1 0e+6144 -> 36.139 +dqfma2011 fma 2.5 4 0e+6144 -> 10.0 +dqfma2012 fma 2.50 4 0e+6144 -> 10.00 +dqfma2013 fma 1.23456789 1.0000000000000000000000000000 0e+6144 -> 1.234567890000000000000000000000000 Rounded +dqfma2015 fma 2.50 4 0e+6144 -> 10.00 +dqfma2016 fma 9.99999999999999999 9.99999999999999999 0e+6144 -> 99.99999999999999980000000000000000 Inexact Rounded +dqfma2017 fma 9.99999999999999999 -9.99999999999999999 0e+6144 -> -99.99999999999999980000000000000000 Inexact Rounded +dqfma2018 fma -9.99999999999999999 9.99999999999999999 0e+6144 -> -99.99999999999999980000000000000000 Inexact Rounded +dqfma2019 fma -9.99999999999999999 -9.99999999999999999 0e+6144 -> 99.99999999999999980000000000000000 Inexact Rounded + +-- zeros, etc. +dqfma2021 fma 0 0 0e+6144 -> 0 +dqfma2022 fma 0 -0 0e+6144 -> 0 +dqfma2023 fma -0 0 0e+6144 -> 0 +dqfma2024 fma -0 -0 0e+6144 -> 0 +dqfma2025 fma -0.0 -0.0 0e+6144 -> 0.00 +dqfma2026 fma -0.0 -0.0 0e+6144 -> 0.00 +dqfma2027 fma -0.0 -0.0 0e+6144 -> 0.00 +dqfma2028 fma -0.0 -0.0 0e+6144 -> 0.00 +dqfma2030 fma 5.00 1E-3 0e+6144 -> 0.00500 +dqfma2031 fma 00.00 0.000 0e+6144 -> 0.00000 +dqfma2032 fma 00.00 0E-3 0e+6144 -> 0.00000 -- rhs is 0 +dqfma2033 fma 0E-3 00.00 0e+6144 -> 0.00000 -- lhs is 0 +dqfma2034 fma -5.00 1E-3 0e+6144 -> -0.00500 +dqfma2035 fma -00.00 0.000 0e+6144 -> 0.00000 +dqfma2036 fma -00.00 0E-3 0e+6144 -> 0.00000 -- rhs is 0 +dqfma2037 fma -0E-3 00.00 0e+6144 -> 0.00000 -- lhs is 0 +dqfma2038 fma 5.00 -1E-3 0e+6144 -> -0.00500 +dqfma2039 fma 00.00 -0.000 0e+6144 -> 0.00000 +dqfma2040 fma 00.00 -0E-3 0e+6144 -> 0.00000 -- rhs is 0 +dqfma2041 fma 0E-3 -00.00 0e+6144 -> 0.00000 -- lhs is 0 +dqfma2042 fma -5.00 -1E-3 0e+6144 -> 0.00500 +dqfma2043 fma -00.00 -0.000 0e+6144 -> 0.00000 +dqfma2044 fma -00.00 -0E-3 0e+6144 -> 0.00000 -- rhs is 0 +dqfma2045 fma -0E-3 -00.00 0e+6144 -> 0.00000 -- lhs is 0 + +-- examples from decarith +dqfma2050 fma 1.20 3 0e+6144 -> 3.60 +dqfma2051 fma 7 3 0e+6144 -> 21 +dqfma2052 fma 0.9 0.8 0e+6144 -> 0.72 +dqfma2053 fma 0.9 -0 0e+6144 -> 0.0 +dqfma2054 fma 654321 654321 0e+6144 -> 428135971041 + +dqfma2060 fma 123.45 1e7 0e+6144 -> 1.2345E+9 +dqfma2061 fma 123.45 1e8 0e+6144 -> 1.2345E+10 +dqfma2062 fma 123.45 1e+9 0e+6144 -> 1.2345E+11 +dqfma2063 fma 123.45 1e10 0e+6144 -> 1.2345E+12 +dqfma2064 fma 123.45 1e11 0e+6144 -> 1.2345E+13 +dqfma2065 fma 123.45 1e12 0e+6144 -> 1.2345E+14 +dqfma2066 fma 123.45 1e13 0e+6144 -> 1.2345E+15 + + +-- test some intermediate lengths +-- 1234567890123456 +dqfma2080 fma 0.1 1230123456456789 0e+6144 -> 123012345645678.9 +dqfma2084 fma 0.1 1230123456456789 0e+6144 -> 123012345645678.9 +dqfma2090 fma 1230123456456789 0.1 0e+6144 -> 123012345645678.9 +dqfma2094 fma 1230123456456789 0.1 0e+6144 -> 123012345645678.9 + +-- test some more edge cases and carries +dqfma2101 fma 9 9 0e+6144 -> 81 +dqfma2102 fma 9 90 0e+6144 -> 810 +dqfma2103 fma 9 900 0e+6144 -> 8100 +dqfma2104 fma 9 9000 0e+6144 -> 81000 +dqfma2105 fma 9 90000 0e+6144 -> 810000 +dqfma2106 fma 9 900000 0e+6144 -> 8100000 +dqfma2107 fma 9 9000000 0e+6144 -> 81000000 +dqfma2108 fma 9 90000000 0e+6144 -> 810000000 +dqfma2109 fma 9 900000000 0e+6144 -> 8100000000 +dqfma2110 fma 9 9000000000 0e+6144 -> 81000000000 +dqfma2111 fma 9 90000000000 0e+6144 -> 810000000000 +dqfma2112 fma 9 900000000000 0e+6144 -> 8100000000000 +dqfma2113 fma 9 9000000000000 0e+6144 -> 81000000000000 +dqfma2114 fma 9 90000000000000 0e+6144 -> 810000000000000 +dqfma2115 fma 9 900000000000000 0e+6144 -> 8100000000000000 +--dqfma2116 fma 9 9000000000000000 0e+6144 -> 81000000000000000 +--dqfma2117 fma 9 90000000000000000 0e+6144 -> 810000000000000000 +--dqfma2118 fma 9 900000000000000000 0e+6144 -> 8100000000000000000 +--dqfma2119 fma 9 9000000000000000000 0e+6144 -> 81000000000000000000 +--dqfma2120 fma 9 90000000000000000000 0e+6144 -> 810000000000000000000 +--dqfma2121 fma 9 900000000000000000000 0e+6144 -> 8100000000000000000000 +--dqfma2122 fma 9 9000000000000000000000 0e+6144 -> 81000000000000000000000 +--dqfma2123 fma 9 90000000000000000000000 0e+6144 -> 810000000000000000000000 +-- test some more edge cases without carries +dqfma2131 fma 3 3 0e+6144 -> 9 +dqfma2132 fma 3 30 0e+6144 -> 90 +dqfma2133 fma 3 300 0e+6144 -> 900 +dqfma2134 fma 3 3000 0e+6144 -> 9000 +dqfma2135 fma 3 30000 0e+6144 -> 90000 +dqfma2136 fma 3 300000 0e+6144 -> 900000 +dqfma2137 fma 3 3000000 0e+6144 -> 9000000 +dqfma2138 fma 3 30000000 0e+6144 -> 90000000 +dqfma2139 fma 3 300000000 0e+6144 -> 900000000 +dqfma2140 fma 3 3000000000 0e+6144 -> 9000000000 +dqfma2141 fma 3 30000000000 0e+6144 -> 90000000000 +dqfma2142 fma 3 300000000000 0e+6144 -> 900000000000 +dqfma2143 fma 3 3000000000000 0e+6144 -> 9000000000000 +dqfma2144 fma 3 30000000000000 0e+6144 -> 90000000000000 +dqfma2145 fma 3 300000000000000 0e+6144 -> 900000000000000 +dqfma2146 fma 3 3000000000000000 0e+6144 -> 9000000000000000 +dqfma2147 fma 3 30000000000000000 0e+6144 -> 90000000000000000 +dqfma2148 fma 3 300000000000000000 0e+6144 -> 900000000000000000 +dqfma2149 fma 3 3000000000000000000 0e+6144 -> 9000000000000000000 +dqfma2150 fma 3 30000000000000000000 0e+6144 -> 90000000000000000000 +dqfma2151 fma 3 300000000000000000000 0e+6144 -> 900000000000000000000 +dqfma2152 fma 3 3000000000000000000000 0e+6144 -> 9000000000000000000000 +dqfma2153 fma 3 30000000000000000000000 0e+6144 -> 90000000000000000000000 + +dqfma2263 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0e+6144 -> 145433.2908011933696719165119928296 Inexact Rounded + +-- test some edge cases with exact rounding +dqfma2301 fma 900000000000000000 9 0e+6144 -> 8100000000000000000 +dqfma2302 fma 900000000000000000 90 0e+6144 -> 81000000000000000000 +dqfma2303 fma 900000000000000000 900 0e+6144 -> 810000000000000000000 +dqfma2304 fma 900000000000000000 9000 0e+6144 -> 8100000000000000000000 +dqfma2305 fma 900000000000000000 90000 0e+6144 -> 81000000000000000000000 +dqfma2306 fma 900000000000000000 900000 0e+6144 -> 810000000000000000000000 +dqfma2307 fma 900000000000000000 9000000 0e+6144 -> 8100000000000000000000000 +dqfma2308 fma 900000000000000000 90000000 0e+6144 -> 81000000000000000000000000 +dqfma2309 fma 900000000000000000 900000000 0e+6144 -> 810000000000000000000000000 +dqfma2310 fma 900000000000000000 9000000000 0e+6144 -> 8100000000000000000000000000 +dqfma2311 fma 900000000000000000 90000000000 0e+6144 -> 81000000000000000000000000000 +dqfma2312 fma 900000000000000000 900000000000 0e+6144 -> 810000000000000000000000000000 +dqfma2313 fma 900000000000000000 9000000000000 0e+6144 -> 8100000000000000000000000000000 +dqfma2314 fma 900000000000000000 90000000000000 0e+6144 -> 81000000000000000000000000000000 +dqfma2315 fma 900000000000000000 900000000000000 0e+6144 -> 810000000000000000000000000000000 +dqfma2316 fma 900000000000000000 9000000000000000 0e+6144 -> 8100000000000000000000000000000000 +dqfma2317 fma 9000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+34 Rounded +dqfma2318 fma 90000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+35 Rounded +dqfma2319 fma 900000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+36 Rounded +dqfma2320 fma 9000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+37 Rounded +dqfma2321 fma 90000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+38 Rounded +dqfma2322 fma 900000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+39 Rounded +dqfma2323 fma 9000000000000000000000000 9000000000000000 0e+6144 -> 8.100000000000000000000000000000000E+40 Rounded + +-- tryzeros cases +dqfma2504 fma 0E-4260 1000E-4260 0e+6144 -> 0E-6176 Clamped +dqfma2505 fma 100E+4260 0E+4260 0e+6144 -> 0E+6111 Clamped + +-- mixed with zeros +dqfma2541 fma 0 -1 0e+6144 -> 0 +dqfma2542 fma -0 -1 0e+6144 -> 0 +dqfma2543 fma 0 1 0e+6144 -> 0 +dqfma2544 fma -0 1 0e+6144 -> 0 +dqfma2545 fma -1 0 0e+6144 -> 0 +dqfma2546 fma -1 -0 0e+6144 -> 0 +dqfma2547 fma 1 0 0e+6144 -> 0 +dqfma2548 fma 1 -0 0e+6144 -> 0 + +dqfma2551 fma 0.0 -1 0e+6144 -> 0.0 +dqfma2552 fma -0.0 -1 0e+6144 -> 0.0 +dqfma2553 fma 0.0 1 0e+6144 -> 0.0 +dqfma2554 fma -0.0 1 0e+6144 -> 0.0 +dqfma2555 fma -1.0 0 0e+6144 -> 0.0 +dqfma2556 fma -1.0 -0 0e+6144 -> 0.0 +dqfma2557 fma 1.0 0 0e+6144 -> 0.0 +dqfma2558 fma 1.0 -0 0e+6144 -> 0.0 + +dqfma2561 fma 0 -1.0 0e+6144 -> 0.0 +dqfma2562 fma -0 -1.0 0e+6144 -> 0.0 +dqfma2563 fma 0 1.0 0e+6144 -> 0.0 +dqfma2564 fma -0 1.0 0e+6144 -> 0.0 +dqfma2565 fma -1 0.0 0e+6144 -> 0.0 +dqfma2566 fma -1 -0.0 0e+6144 -> 0.0 +dqfma2567 fma 1 0.0 0e+6144 -> 0.0 +dqfma2568 fma 1 -0.0 0e+6144 -> 0.0 + +dqfma2571 fma 0.0 -1.0 0e+6144 -> 0.00 +dqfma2572 fma -0.0 -1.0 0e+6144 -> 0.00 +dqfma2573 fma 0.0 1.0 0e+6144 -> 0.00 +dqfma2574 fma -0.0 1.0 0e+6144 -> 0.00 +dqfma2575 fma -1.0 0.0 0e+6144 -> 0.00 +dqfma2576 fma -1.0 -0.0 0e+6144 -> 0.00 +dqfma2577 fma 1.0 0.0 0e+6144 -> 0.00 +dqfma2578 fma 1.0 -0.0 0e+6144 -> 0.00 +dqfma2579 fma 1.0 0.0 0e+6144 -> 0.00 +dqfma2530 fma -1.0 -0.0 0e+6144 -> 0.00 +dqfma2531 fma -1.0 0.0 0e+6144 -> 0.00 +dqfma2532 fma 1.0 -0.0 -0e+6144 -> -0.00 +dqfma2533 fma 1.0 0.0 -0e+6144 -> 0.00 +dqfma2534 fma -1.0 -0.0 -0e+6144 -> 0.00 +dqfma2535 fma -1.0 0.0 -0e+6144 -> -0.00 + + +-- Specials +dqfma2580 fma Inf -Inf 0e+6144 -> -Infinity +dqfma2581 fma Inf -1000 0e+6144 -> -Infinity +dqfma2582 fma Inf -1 0e+6144 -> -Infinity +dqfma2583 fma Inf -0 0e+6144 -> NaN Invalid_operation +dqfma2584 fma Inf 0 0e+6144 -> NaN Invalid_operation +dqfma2585 fma Inf 1 0e+6144 -> Infinity +dqfma2586 fma Inf 1000 0e+6144 -> Infinity +dqfma2587 fma Inf Inf 0e+6144 -> Infinity +dqfma2588 fma -1000 Inf 0e+6144 -> -Infinity +dqfma2589 fma -Inf Inf 0e+6144 -> -Infinity +dqfma2590 fma -1 Inf 0e+6144 -> -Infinity +dqfma2591 fma -0 Inf 0e+6144 -> NaN Invalid_operation +dqfma2592 fma 0 Inf 0e+6144 -> NaN Invalid_operation +dqfma2593 fma 1 Inf 0e+6144 -> Infinity +dqfma2594 fma 1000 Inf 0e+6144 -> Infinity +dqfma2595 fma Inf Inf 0e+6144 -> Infinity + +dqfma2600 fma -Inf -Inf 0e+6144 -> Infinity +dqfma2601 fma -Inf -1000 0e+6144 -> Infinity +dqfma2602 fma -Inf -1 0e+6144 -> Infinity +dqfma2603 fma -Inf -0 0e+6144 -> NaN Invalid_operation +dqfma2604 fma -Inf 0 0e+6144 -> NaN Invalid_operation +dqfma2605 fma -Inf 1 0e+6144 -> -Infinity +dqfma2606 fma -Inf 1000 0e+6144 -> -Infinity +dqfma2607 fma -Inf Inf 0e+6144 -> -Infinity +dqfma2608 fma -1000 Inf 0e+6144 -> -Infinity +dqfma2609 fma -Inf -Inf 0e+6144 -> Infinity +dqfma2610 fma -1 -Inf 0e+6144 -> Infinity +dqfma2611 fma -0 -Inf 0e+6144 -> NaN Invalid_operation +dqfma2612 fma 0 -Inf 0e+6144 -> NaN Invalid_operation +dqfma2613 fma 1 -Inf 0e+6144 -> -Infinity +dqfma2614 fma 1000 -Inf 0e+6144 -> -Infinity +dqfma2615 fma Inf -Inf 0e+6144 -> -Infinity + +dqfma2621 fma NaN -Inf 0e+6144 -> NaN +dqfma2622 fma NaN -1000 0e+6144 -> NaN +dqfma2623 fma NaN -1 0e+6144 -> NaN +dqfma2624 fma NaN -0 0e+6144 -> NaN +dqfma2625 fma NaN 0 0e+6144 -> NaN +dqfma2626 fma NaN 1 0e+6144 -> NaN +dqfma2627 fma NaN 1000 0e+6144 -> NaN +dqfma2628 fma NaN Inf 0e+6144 -> NaN +dqfma2629 fma NaN NaN 0e+6144 -> NaN +dqfma2630 fma -Inf NaN 0e+6144 -> NaN +dqfma2631 fma -1000 NaN 0e+6144 -> NaN +dqfma2632 fma -1 NaN 0e+6144 -> NaN +dqfma2633 fma -0 NaN 0e+6144 -> NaN +dqfma2634 fma 0 NaN 0e+6144 -> NaN +dqfma2635 fma 1 NaN 0e+6144 -> NaN +dqfma2636 fma 1000 NaN 0e+6144 -> NaN +dqfma2637 fma Inf NaN 0e+6144 -> NaN + +dqfma2641 fma sNaN -Inf 0e+6144 -> NaN Invalid_operation +dqfma2642 fma sNaN -1000 0e+6144 -> NaN Invalid_operation +dqfma2643 fma sNaN -1 0e+6144 -> NaN Invalid_operation +dqfma2644 fma sNaN -0 0e+6144 -> NaN Invalid_operation +dqfma2645 fma sNaN 0 0e+6144 -> NaN Invalid_operation +dqfma2646 fma sNaN 1 0e+6144 -> NaN Invalid_operation +dqfma2647 fma sNaN 1000 0e+6144 -> NaN Invalid_operation +dqfma2648 fma sNaN NaN 0e+6144 -> NaN Invalid_operation +dqfma2649 fma sNaN sNaN 0e+6144 -> NaN Invalid_operation +dqfma2650 fma NaN sNaN 0e+6144 -> NaN Invalid_operation +dqfma2651 fma -Inf sNaN 0e+6144 -> NaN Invalid_operation +dqfma2652 fma -1000 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2653 fma -1 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2654 fma -0 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2655 fma 0 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2656 fma 1 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2657 fma 1000 sNaN 0e+6144 -> NaN Invalid_operation +dqfma2658 fma Inf sNaN 0e+6144 -> NaN Invalid_operation +dqfma2659 fma NaN sNaN 0e+6144 -> NaN Invalid_operation + +-- propagating NaNs +dqfma2661 fma NaN9 -Inf 0e+6144 -> NaN9 +dqfma2662 fma NaN8 999 0e+6144 -> NaN8 +dqfma2663 fma NaN71 Inf 0e+6144 -> NaN71 +dqfma2664 fma NaN6 NaN5 0e+6144 -> NaN6 +dqfma2665 fma -Inf NaN4 0e+6144 -> NaN4 +dqfma2666 fma -999 NaN33 0e+6144 -> NaN33 +dqfma2667 fma Inf NaN2 0e+6144 -> NaN2 + +dqfma2671 fma sNaN99 -Inf 0e+6144 -> NaN99 Invalid_operation +dqfma2672 fma sNaN98 -11 0e+6144 -> NaN98 Invalid_operation +dqfma2673 fma sNaN97 NaN 0e+6144 -> NaN97 Invalid_operation +dqfma2674 fma sNaN16 sNaN94 0e+6144 -> NaN16 Invalid_operation +dqfma2675 fma NaN95 sNaN93 0e+6144 -> NaN93 Invalid_operation +dqfma2676 fma -Inf sNaN92 0e+6144 -> NaN92 Invalid_operation +dqfma2677 fma 088 sNaN91 0e+6144 -> NaN91 Invalid_operation +dqfma2678 fma Inf sNaN90 0e+6144 -> NaN90 Invalid_operation +dqfma2679 fma NaN sNaN89 0e+6144 -> NaN89 Invalid_operation + +dqfma2681 fma -NaN9 -Inf 0e+6144 -> -NaN9 +dqfma2682 fma -NaN8 999 0e+6144 -> -NaN8 +dqfma2683 fma -NaN71 Inf 0e+6144 -> -NaN71 +dqfma2684 fma -NaN6 -NaN5 0e+6144 -> -NaN6 +dqfma2685 fma -Inf -NaN4 0e+6144 -> -NaN4 +dqfma2686 fma -999 -NaN33 0e+6144 -> -NaN33 +dqfma2687 fma Inf -NaN2 0e+6144 -> -NaN2 + +dqfma2691 fma -sNaN99 -Inf 0e+6144 -> -NaN99 Invalid_operation +dqfma2692 fma -sNaN98 -11 0e+6144 -> -NaN98 Invalid_operation +dqfma2693 fma -sNaN97 NaN 0e+6144 -> -NaN97 Invalid_operation +dqfma2694 fma -sNaN16 -sNaN94 0e+6144 -> -NaN16 Invalid_operation +dqfma2695 fma -NaN95 -sNaN93 0e+6144 -> -NaN93 Invalid_operation +dqfma2696 fma -Inf -sNaN92 0e+6144 -> -NaN92 Invalid_operation +dqfma2697 fma 088 -sNaN91 0e+6144 -> -NaN91 Invalid_operation +dqfma2698 fma Inf -sNaN90 0e+6144 -> -NaN90 Invalid_operation +dqfma2699 fma -NaN -sNaN89 0e+6144 -> -NaN89 Invalid_operation + +dqfma2701 fma -NaN -Inf 0e+6144 -> -NaN +dqfma2702 fma -NaN 999 0e+6144 -> -NaN +dqfma2703 fma -NaN Inf 0e+6144 -> -NaN +dqfma2704 fma -NaN -NaN 0e+6144 -> -NaN +dqfma2705 fma -Inf -NaN0 0e+6144 -> -NaN +dqfma2706 fma -999 -NaN 0e+6144 -> -NaN +dqfma2707 fma Inf -NaN 0e+6144 -> -NaN + +dqfma2711 fma -sNaN -Inf 0e+6144 -> -NaN Invalid_operation +dqfma2712 fma -sNaN -11 0e+6144 -> -NaN Invalid_operation +dqfma2713 fma -sNaN00 NaN 0e+6144 -> -NaN Invalid_operation +dqfma2714 fma -sNaN -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2715 fma -NaN -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2716 fma -Inf -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2717 fma 088 -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2718 fma Inf -sNaN 0e+6144 -> -NaN Invalid_operation +dqfma2719 fma -NaN -sNaN 0e+6144 -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +-- signs +dqfma2751 fma 1e+4277 1e+3311 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2752 fma 1e+4277 -1e+3311 0e+6144 -> -Infinity Overflow Inexact Rounded +dqfma2753 fma -1e+4277 1e+3311 0e+6144 -> -Infinity Overflow Inexact Rounded +dqfma2754 fma -1e+4277 -1e+3311 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2755 fma 1e-4277 1e-3311 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2756 fma 1e-4277 -1e-3311 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2757 fma -1e-4277 1e-3311 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2758 fma -1e-4277 -1e-3311 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dqfma2760 fma 1e-6069 1e-101 0e+6144 -> 1E-6170 Subnormal +dqfma2761 fma 1e-6069 1e-102 0e+6144 -> 1E-6171 Subnormal +dqfma2762 fma 1e-6069 1e-103 0e+6144 -> 1E-6172 Subnormal +dqfma2763 fma 1e-6069 1e-104 0e+6144 -> 1E-6173 Subnormal +dqfma2764 fma 1e-6069 1e-105 0e+6144 -> 1E-6174 Subnormal +dqfma2765 fma 1e-6069 1e-106 0e+6144 -> 1E-6175 Subnormal +dqfma2766 fma 1e-6069 1e-107 0e+6144 -> 1E-6176 Subnormal +dqfma2767 fma 1e-6069 1e-108 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2768 fma 1e-6069 1e-109 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2769 fma 1e-6069 1e-110 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +dqfma2770 fma 1e+40 1e+6101 0e+6144 -> 1.000000000000000000000000000000E+6141 Clamped +dqfma2771 fma 1e+40 1e+6102 0e+6144 -> 1.0000000000000000000000000000000E+6142 Clamped +dqfma2772 fma 1e+40 1e+6103 0e+6144 -> 1.00000000000000000000000000000000E+6143 Clamped +dqfma2773 fma 1e+40 1e+6104 0e+6144 -> 1.000000000000000000000000000000000E+6144 Clamped +dqfma2774 fma 1e+40 1e+6105 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2775 fma 1e+40 1e+6106 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2776 fma 1e+40 1e+6107 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2777 fma 1e+40 1e+6108 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2778 fma 1e+40 1e+6109 0e+6144 -> Infinity Overflow Inexact Rounded +dqfma2779 fma 1e+40 1e+6110 0e+6144 -> Infinity Overflow Inexact Rounded + +dqfma2801 fma 1.0000E-6172 1 0e+6144 -> 1.0000E-6172 Subnormal +dqfma2802 fma 1.000E-6172 1e-1 0e+6144 -> 1.000E-6173 Subnormal +dqfma2803 fma 1.00E-6172 1e-2 0e+6144 -> 1.00E-6174 Subnormal +dqfma2804 fma 1.0E-6172 1e-3 0e+6144 -> 1.0E-6175 Subnormal +dqfma2805 fma 1.0E-6172 1e-4 0e+6144 -> 1E-6176 Subnormal Rounded +dqfma2806 fma 1.3E-6172 1e-4 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqfma2807 fma 1.5E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2808 fma 1.7E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2809 fma 2.3E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2810 fma 2.5E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2811 fma 2.7E-6172 1e-4 0e+6144 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqfma2812 fma 1.49E-6172 1e-4 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqfma2813 fma 1.50E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2814 fma 1.51E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2815 fma 2.49E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2816 fma 2.50E-6172 1e-4 0e+6144 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqfma2817 fma 2.51E-6172 1e-4 0e+6144 -> 3E-6176 Underflow Subnormal Inexact Rounded + +dqfma2818 fma 1E-6172 1e-4 0e+6144 -> 1E-6176 Subnormal +dqfma2819 fma 3E-6172 1e-5 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2820 fma 5E-6172 1e-5 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2821 fma 7E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqfma2822 fma 9E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqfma2823 fma 9.9E-6172 1e-5 0e+6144 -> 1E-6176 Underflow Subnormal Inexact Rounded + +dqfma2824 fma 1E-6172 -1e-4 0e+6144 -> -1E-6176 Subnormal +dqfma2825 fma 3E-6172 -1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2826 fma -5E-6172 1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2827 fma 7E-6172 -1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqfma2828 fma -9E-6172 1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqfma2829 fma 9.9E-6172 -1e-5 0e+6144 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqfma2830 fma 3.0E-6172 -1e-5 0e+6144 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqfma2831 fma 1.0E-5977 1e-200 0e+6144 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqfma2832 fma 1.0E-5977 1e-199 0e+6144 -> 1E-6176 Subnormal Rounded +dqfma2833 fma 1.0E-5977 1e-198 0e+6144 -> 1.0E-6175 Subnormal +dqfma2834 fma 2.0E-5977 2e-198 0e+6144 -> 4.0E-6175 Subnormal +dqfma2835 fma 4.0E-5977 4e-198 0e+6144 -> 1.60E-6174 Subnormal +dqfma2836 fma 10.0E-5977 10e-198 0e+6144 -> 1.000E-6173 Subnormal +dqfma2837 fma 30.0E-5977 30e-198 0e+6144 -> 9.000E-6173 Subnormal +dqfma2838 fma 40.0E-5982 40e-166 0e+6144 -> 1.6000E-6145 Subnormal +dqfma2839 fma 40.0E-5982 40e-165 0e+6144 -> 1.6000E-6144 Subnormal +dqfma2840 fma 40.0E-5982 40e-164 0e+6144 -> 1.6000E-6143 + +-- Long operand overflow may be a different path +dqfma2870 fma 100 9.999E+6143 0e+6144 -> Infinity Inexact Overflow Rounded +dqfma2871 fma 100 -9.999E+6143 0e+6144 -> -Infinity Inexact Overflow Rounded +dqfma2872 fma 9.999E+6143 100 0e+6144 -> Infinity Inexact Overflow Rounded +dqfma2873 fma -9.999E+6143 100 0e+6144 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +dqfma2881 fma 1.2347E-6133 1.2347E-40 0e+6144 -> 1.524E-6173 Inexact Rounded Subnormal Underflow +dqfma2882 fma 1.234E-6133 1.234E-40 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqfma2883 fma 1.23E-6133 1.23E-40 0e+6144 -> 1.513E-6173 Inexact Rounded Subnormal Underflow +dqfma2884 fma 1.2E-6133 1.2E-40 0e+6144 -> 1.44E-6173 Subnormal +dqfma2885 fma 1.2E-6133 1.2E-41 0e+6144 -> 1.44E-6174 Subnormal +dqfma2886 fma 1.2E-6133 1.2E-42 0e+6144 -> 1.4E-6175 Subnormal Inexact Rounded Underflow +dqfma2887 fma 1.2E-6133 1.3E-42 0e+6144 -> 1.6E-6175 Subnormal Inexact Rounded Underflow +dqfma2888 fma 1.3E-6133 1.3E-42 0e+6144 -> 1.7E-6175 Subnormal Inexact Rounded Underflow +dqfma2889 fma 1.3E-6133 1.3E-43 0e+6144 -> 2E-6176 Subnormal Inexact Rounded Underflow +dqfma2890 fma 1.3E-6134 1.3E-43 0e+6144 -> 0E-6176 Clamped Subnormal Inexact Rounded Underflow + +dqfma2891 fma 1.2345E-39 1.234E-6133 0e+6144 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow +dqfma2892 fma 1.23456E-39 1.234E-6133 0e+6144 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow +dqfma2893 fma 1.2345E-40 1.234E-6133 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqfma2894 fma 1.23456E-40 1.234E-6133 0e+6144 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqfma2895 fma 1.2345E-41 1.234E-6133 0e+6144 -> 1.52E-6174 Inexact Rounded Subnormal Underflow +dqfma2896 fma 1.23456E-41 1.234E-6133 0e+6144 -> 1.52E-6174 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +-- prove operands are exact +dqfma2906 fma 9.999999999999999999999999999999999E-6143 1 0e+6144 -> 9.999999999999999999999999999999999E-6143 +dqfma2907 fma 1 0.09999999999999999999999999999999999 0e+6144 -> 0.09999999999999999999999999999999999 +-- the next rounds to Nmin +dqfma2908 fma 9.999999999999999999999999999999999E-6143 0.09999999999999999999999999999999999 0e+6144 -> 1.000000000000000000000000000000000E-6143 Underflow Inexact Subnormal Rounded + +-- hugest +dqfma2909 fma 9999999999999999999999999999999999 9999999999999999999999999999999999 0e+6144 -> 9.999999999999999999999999999999998E+67 Inexact Rounded + +-- Examples from SQL proposal (Krishna Kulkarni) +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 +dqfma21001 fma 130E-2 120E-2 0e+6144 -> 1.5600 +dqfma21002 fma 130E-2 12E-1 0e+6144 -> 1.560 +dqfma21003 fma 130E-2 1E0 0e+6144 -> 1.30 +dqfma21004 fma 1E2 1E4 0e+6144 -> 1E+6 + +-- Null tests +dqfma2990 fma 10 # 0e+6144 -> NaN Invalid_operation +dqfma2991 fma # 10 0e+6144 -> NaN Invalid_operation + + +-- ADDITION TESTS ------------------------------------------------------ +rounding: half_even + +-- [first group are 'quick confidence check'] +dqadd3001 fma 1 1 1 -> 2 +dqadd3002 fma 1 2 3 -> 5 +dqadd3003 fma 1 '5.75' '3.3' -> 9.05 +dqadd3004 fma 1 '5' '-3' -> 2 +dqadd3005 fma 1 '-5' '-3' -> -8 +dqadd3006 fma 1 '-7' '2.5' -> -4.5 +dqadd3007 fma 1 '0.7' '0.3' -> 1.0 +dqadd3008 fma 1 '1.25' '1.25' -> 2.50 +dqadd3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' +dqadd3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' + +-- 1234567890123456 1234567890123456 +dqadd3011 fma 1 '0.4444444444444444444444444444444446' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Inexact Rounded +dqadd3012 fma 1 '0.4444444444444444444444444444444445' '0.5555555555555555555555555555555555' -> '1.000000000000000000000000000000000' Rounded +dqadd3013 fma 1 '0.4444444444444444444444444444444444' '0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' +dqadd3014 fma 1 '4444444444444444444444444444444444' '0.49' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd3015 fma 1 '4444444444444444444444444444444444' '0.499' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd3016 fma 1 '4444444444444444444444444444444444' '0.4999' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd3017 fma 1 '4444444444444444444444444444444444' '0.5000' -> '4444444444444444444444444444444444' Inexact Rounded +dqadd3018 fma 1 '4444444444444444444444444444444444' '0.5001' -> '4444444444444444444444444444444445' Inexact Rounded +dqadd3019 fma 1 '4444444444444444444444444444444444' '0.501' -> '4444444444444444444444444444444445' Inexact Rounded +dqadd3020 fma 1 '4444444444444444444444444444444444' '0.51' -> '4444444444444444444444444444444445' Inexact Rounded + +dqadd3021 fma 1 0 1 -> 1 +dqadd3022 fma 1 1 1 -> 2 +dqadd3023 fma 1 2 1 -> 3 +dqadd3024 fma 1 3 1 -> 4 +dqadd3025 fma 1 4 1 -> 5 +dqadd3026 fma 1 5 1 -> 6 +dqadd3027 fma 1 6 1 -> 7 +dqadd3028 fma 1 7 1 -> 8 +dqadd3029 fma 1 8 1 -> 9 +dqadd3030 fma 1 9 1 -> 10 + +-- some carrying effects +dqadd3031 fma 1 '0.9998' '0.0000' -> '0.9998' +dqadd3032 fma 1 '0.9998' '0.0001' -> '0.9999' +dqadd3033 fma 1 '0.9998' '0.0002' -> '1.0000' +dqadd3034 fma 1 '0.9998' '0.0003' -> '1.0001' + +dqadd3035 fma 1 '70' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3036 fma 1 '700' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3037 fma 1 '7000' '10000e+34' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3038 fma 1 '70000' '10000e+34' -> '1.000000000000000000000000000000001E+38' Inexact Rounded +dqadd3039 fma 1 '700000' '10000e+34' -> '1.000000000000000000000000000000007E+38' Rounded + +-- symmetry: +dqadd3040 fma 1 '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3041 fma 1 '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3042 fma 1 '10000e+34' '7000' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqadd3044 fma 1 '10000e+34' '70000' -> '1.000000000000000000000000000000001E+38' Inexact Rounded +dqadd3045 fma 1 '10000e+34' '700000' -> '1.000000000000000000000000000000007E+38' Rounded + +-- same, without rounding +dqadd3046 fma 1 '10000e+9' '7' -> '10000000000007' +dqadd3047 fma 1 '10000e+9' '70' -> '10000000000070' +dqadd3048 fma 1 '10000e+9' '700' -> '10000000000700' +dqadd3049 fma 1 '10000e+9' '7000' -> '10000000007000' +dqadd3050 fma 1 '10000e+9' '70000' -> '10000000070000' +dqadd3051 fma 1 '10000e+9' '700000' -> '10000000700000' +dqadd3052 fma 1 '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +dqadd3053 fma 1 '12' '7.00' -> '19.00' +dqadd3054 fma 1 '1.3' '-1.07' -> '0.23' +dqadd3055 fma 1 '1.3' '-1.30' -> '0.00' +dqadd3056 fma 1 '1.3' '-2.07' -> '-0.77' +dqadd3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' + +-- leading zero preservation +dqadd3061 fma 1 1 '0.0001' -> '1.0001' +dqadd3062 fma 1 1 '0.00001' -> '1.00001' +dqadd3063 fma 1 1 '0.000001' -> '1.000001' +dqadd3064 fma 1 1 '0.0000001' -> '1.0000001' +dqadd3065 fma 1 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +dqadd3070 fma 1 1 0 -> 1 +dqadd3071 fma 1 1 0. -> 1 +dqadd3072 fma 1 1 .0 -> 1.0 +dqadd3073 fma 1 1 0.0 -> 1.0 +dqadd3074 fma 1 1 0.00 -> 1.00 +dqadd3075 fma 1 0 1 -> 1 +dqadd3076 fma 1 0. 1 -> 1 +dqadd3077 fma 1 .0 1 -> 1.0 +dqadd3078 fma 1 0.0 1 -> 1.0 +dqadd3079 fma 1 0.00 1 -> 1.00 + +-- some carries +dqadd3080 fma 1 999999998 1 -> 999999999 +dqadd3081 fma 1 999999999 1 -> 1000000000 +dqadd3082 fma 1 99999999 1 -> 100000000 +dqadd3083 fma 1 9999999 1 -> 10000000 +dqadd3084 fma 1 999999 1 -> 1000000 +dqadd3085 fma 1 99999 1 -> 100000 +dqadd3086 fma 1 9999 1 -> 10000 +dqadd3087 fma 1 999 1 -> 1000 +dqadd3088 fma 1 99 1 -> 100 +dqadd3089 fma 1 9 1 -> 10 + + +-- more LHS swaps +dqadd3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' +dqadd3091 fma 1 '-56267E-6' 0 -> '-0.056267' +dqadd3092 fma 1 '-56267E-5' 0 -> '-0.56267' +dqadd3093 fma 1 '-56267E-4' 0 -> '-5.6267' +dqadd3094 fma 1 '-56267E-3' 0 -> '-56.267' +dqadd3095 fma 1 '-56267E-2' 0 -> '-562.67' +dqadd3096 fma 1 '-56267E-1' 0 -> '-5626.7' +dqadd3097 fma 1 '-56267E-0' 0 -> '-56267' +dqadd3098 fma 1 '-5E-10' 0 -> '-5E-10' +dqadd3099 fma 1 '-5E-7' 0 -> '-5E-7' +dqadd3100 fma 1 '-5E-6' 0 -> '-0.000005' +dqadd3101 fma 1 '-5E-5' 0 -> '-0.00005' +dqadd3102 fma 1 '-5E-4' 0 -> '-0.0005' +dqadd3103 fma 1 '-5E-1' 0 -> '-0.5' +dqadd3104 fma 1 '-5E0' 0 -> '-5' +dqadd3105 fma 1 '-5E1' 0 -> '-50' +dqadd3106 fma 1 '-5E5' 0 -> '-500000' +dqadd3107 fma 1 '-5E33' 0 -> '-5000000000000000000000000000000000' +dqadd3108 fma 1 '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded +dqadd3109 fma 1 '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded +dqadd3110 fma 1 '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded +dqadd3111 fma 1 '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded + +-- more RHS swaps +dqadd3113 fma 1 0 '-56267E-10' -> '-0.0000056267' +dqadd3114 fma 1 0 '-56267E-6' -> '-0.056267' +dqadd3116 fma 1 0 '-56267E-5' -> '-0.56267' +dqadd3117 fma 1 0 '-56267E-4' -> '-5.6267' +dqadd3119 fma 1 0 '-56267E-3' -> '-56.267' +dqadd3120 fma 1 0 '-56267E-2' -> '-562.67' +dqadd3121 fma 1 0 '-56267E-1' -> '-5626.7' +dqadd3122 fma 1 0 '-56267E-0' -> '-56267' +dqadd3123 fma 1 0 '-5E-10' -> '-5E-10' +dqadd3124 fma 1 0 '-5E-7' -> '-5E-7' +dqadd3125 fma 1 0 '-5E-6' -> '-0.000005' +dqadd3126 fma 1 0 '-5E-5' -> '-0.00005' +dqadd3127 fma 1 0 '-5E-4' -> '-0.0005' +dqadd3128 fma 1 0 '-5E-1' -> '-0.5' +dqadd3129 fma 1 0 '-5E0' -> '-5' +dqadd3130 fma 1 0 '-5E1' -> '-50' +dqadd3131 fma 1 0 '-5E5' -> '-500000' +dqadd3132 fma 1 0 '-5E33' -> '-5000000000000000000000000000000000' +dqadd3133 fma 1 0 '-5E34' -> '-5.000000000000000000000000000000000E+34' Rounded +dqadd3134 fma 1 0 '-5E35' -> '-5.000000000000000000000000000000000E+35' Rounded +dqadd3135 fma 1 0 '-5E36' -> '-5.000000000000000000000000000000000E+36' Rounded +dqadd3136 fma 1 0 '-5E100' -> '-5.000000000000000000000000000000000E+100' Rounded + +-- related +dqadd3137 fma 1 1 '0E-39' -> '1.000000000000000000000000000000000' Rounded +dqadd3138 fma 1 -1 '0E-39' -> '-1.000000000000000000000000000000000' Rounded +dqadd3139 fma 1 '0E-39' 1 -> '1.000000000000000000000000000000000' Rounded +dqadd3140 fma 1 '0E-39' -1 -> '-1.000000000000000000000000000000000' Rounded +dqadd3141 fma 1 1E+29 0.0000 -> '100000000000000000000000000000.0000' +dqadd3142 fma 1 1E+29 0.00000 -> '100000000000000000000000000000.0000' Rounded +dqadd3143 fma 1 0.000 1E+30 -> '1000000000000000000000000000000.000' +dqadd3144 fma 1 0.0000 1E+30 -> '1000000000000000000000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +dqadd3146 fma 1 '00.0' 0 -> '0.0' +dqadd3147 fma 1 '0.00' 0 -> '0.00' +dqadd3148 fma 1 0 '0.00' -> '0.00' +dqadd3149 fma 1 0 '00.0' -> '0.0' +dqadd3150 fma 1 '00.0' '0.00' -> '0.00' +dqadd3151 fma 1 '0.00' '00.0' -> '0.00' +dqadd3152 fma 1 '3' '.3' -> '3.3' +dqadd3153 fma 1 '3.' '.3' -> '3.3' +dqadd3154 fma 1 '3.0' '.3' -> '3.3' +dqadd3155 fma 1 '3.00' '.3' -> '3.30' +dqadd3156 fma 1 '3' '3' -> '6' +dqadd3157 fma 1 '3' '+3' -> '6' +dqadd3158 fma 1 '3' '-3' -> '0' +dqadd3159 fma 1 '0.3' '-0.3' -> '0.0' +dqadd3160 fma 1 '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +dqadd3161 fma 1 '1E+12' '-1' -> '999999999999' +dqadd3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' +dqadd3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' +dqadd3164 fma 1 '-1' '1E+12' -> '999999999999' +dqadd3165 fma 1 '7E+12' '-1' -> '6999999999999' +dqadd3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' +dqadd3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' +dqadd3168 fma 1 '-1' '7E+12' -> '6999999999999' + +rounding: half_up +dqadd3170 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555567' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd3171 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555566' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd3172 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555565' -> '5.000000000000000000000000000000001' Inexact Rounded +dqadd3173 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555564' -> '5.000000000000000000000000000000000' Inexact Rounded +dqadd3174 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555553' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd3175 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555552' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd3176 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555551' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd3177 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555550' -> '4.999999999999999999999999999999999' Rounded +dqadd3178 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555545' -> '4.999999999999999999999999999999999' Inexact Rounded +dqadd3179 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555544' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd3180 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555543' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd3181 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555542' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd3182 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555541' -> '4.999999999999999999999999999999998' Inexact Rounded +dqadd3183 fma 1 '4.444444444444444444444444444444444' '0.5555555555555555555555555555555540' -> '4.999999999999999999999999999999998' Rounded + +-- and some more, including residue effects and different roundings +rounding: half_up +dqadd3200 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd3201 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3202 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3203 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3204 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3205 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3206 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3207 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3208 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3209 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3210 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3211 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3212 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3213 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3214 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3215 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3216 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd3217 fma 1 '1231234567890123456784560123456789' 1.000000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3218 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3219 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded + +rounding: half_even +dqadd3220 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd3221 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3222 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3223 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3224 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3225 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3226 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3227 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3228 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3229 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3230 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3231 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3232 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3233 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3234 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3235 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3236 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd3237 fma 1 '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3238 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3239 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded +-- critical few with even bottom digit... +dqadd3240 fma 1 '1231234567890123456784560123456788' 0.499999999 -> '1231234567890123456784560123456788' Inexact Rounded +dqadd3241 fma 1 '1231234567890123456784560123456788' 0.5 -> '1231234567890123456784560123456788' Inexact Rounded +dqadd3242 fma 1 '1231234567890123456784560123456788' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded + +rounding: down +dqadd3250 fma 1 '1231234567890123456784560123456789' 0 -> '1231234567890123456784560123456789' +dqadd3251 fma 1 '1231234567890123456784560123456789' 0.000000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3252 fma 1 '1231234567890123456784560123456789' 0.000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3253 fma 1 '1231234567890123456784560123456789' 0.1 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3254 fma 1 '1231234567890123456784560123456789' 0.4 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3255 fma 1 '1231234567890123456784560123456789' 0.49 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3256 fma 1 '1231234567890123456784560123456789' 0.499999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3257 fma 1 '1231234567890123456784560123456789' 0.499999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3258 fma 1 '1231234567890123456784560123456789' 0.5 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3259 fma 1 '1231234567890123456784560123456789' 0.500000001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3260 fma 1 '1231234567890123456784560123456789' 0.500001 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3261 fma 1 '1231234567890123456784560123456789' 0.51 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3262 fma 1 '1231234567890123456784560123456789' 0.6 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3263 fma 1 '1231234567890123456784560123456789' 0.9 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3264 fma 1 '1231234567890123456784560123456789' 0.99999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3265 fma 1 '1231234567890123456784560123456789' 0.999999999 -> '1231234567890123456784560123456789' Inexact Rounded +dqadd3266 fma 1 '1231234567890123456784560123456789' 1 -> '1231234567890123456784560123456790' +dqadd3267 fma 1 '1231234567890123456784560123456789' 1.00000001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3268 fma 1 '1231234567890123456784560123456789' 1.00001 -> '1231234567890123456784560123456790' Inexact Rounded +dqadd3269 fma 1 '1231234567890123456784560123456789' 1.1 -> '1231234567890123456784560123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +dqadd3301 fma 1 -1 1 -> 0 +dqadd3302 fma 1 0 1 -> 1 +dqadd3303 fma 1 1 1 -> 2 +dqadd3304 fma 1 12 1 -> 13 +dqadd3305 fma 1 98 1 -> 99 +dqadd3306 fma 1 99 1 -> 100 +dqadd3307 fma 1 100 1 -> 101 +dqadd3308 fma 1 101 1 -> 102 +dqadd3309 fma 1 -1 -1 -> -2 +dqadd3310 fma 1 0 -1 -> -1 +dqadd3311 fma 1 1 -1 -> 0 +dqadd3312 fma 1 12 -1 -> 11 +dqadd3313 fma 1 98 -1 -> 97 +dqadd3314 fma 1 99 -1 -> 98 +dqadd3315 fma 1 100 -1 -> 99 +dqadd3316 fma 1 101 -1 -> 100 + +dqadd3321 fma 1 -0.01 0.01 -> 0.00 +dqadd3322 fma 1 0.00 0.01 -> 0.01 +dqadd3323 fma 1 0.01 0.01 -> 0.02 +dqadd3324 fma 1 0.12 0.01 -> 0.13 +dqadd3325 fma 1 0.98 0.01 -> 0.99 +dqadd3326 fma 1 0.99 0.01 -> 1.00 +dqadd3327 fma 1 1.00 0.01 -> 1.01 +dqadd3328 fma 1 1.01 0.01 -> 1.02 +dqadd3329 fma 1 -0.01 -0.01 -> -0.02 +dqadd3330 fma 1 0.00 -0.01 -> -0.01 +dqadd3331 fma 1 0.01 -0.01 -> 0.00 +dqadd3332 fma 1 0.12 -0.01 -> 0.11 +dqadd3333 fma 1 0.98 -0.01 -> 0.97 +dqadd3334 fma 1 0.99 -0.01 -> 0.98 +dqadd3335 fma 1 1.00 -0.01 -> 0.99 +dqadd3336 fma 1 1.01 -0.01 -> 1.00 + +-- some more cases where adding 0 affects the coefficient +dqadd3340 fma 1 1E+3 0 -> 1000 +dqadd3341 fma 1 1E+33 0 -> 1000000000000000000000000000000000 +dqadd3342 fma 1 1E+34 0 -> 1.000000000000000000000000000000000E+34 Rounded +dqadd3343 fma 1 1E+35 0 -> 1.000000000000000000000000000000000E+35 Rounded +-- which simply follow from these cases ... +dqadd3344 fma 1 1E+3 1 -> 1001 +dqadd3345 fma 1 1E+33 1 -> 1000000000000000000000000000000001 +dqadd3346 fma 1 1E+34 1 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd3347 fma 1 1E+35 1 -> 1.000000000000000000000000000000000E+35 Inexact Rounded +dqadd3348 fma 1 1E+3 7 -> 1007 +dqadd3349 fma 1 1E+33 7 -> 1000000000000000000000000000000007 +dqadd3350 fma 1 1E+34 7 -> 1.000000000000000000000000000000001E+34 Inexact Rounded +dqadd3351 fma 1 1E+35 7 -> 1.000000000000000000000000000000000E+35 Inexact Rounded + +-- tryzeros cases +rounding: half_up +dqadd3360 fma 1 0E+50 10000E+1 -> 1.0000E+5 +dqadd3361 fma 1 0E-50 10000E+1 -> 100000.0000000000000000000000000000 Rounded +dqadd3362 fma 1 10000E+1 0E-50 -> 100000.0000000000000000000000000000 Rounded +dqadd3363 fma 1 10000E+1 10000E-50 -> 100000.0000000000000000000000000000 Rounded Inexact +dqadd3364 fma 1 9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> 0E+6111 +-- 1 234567890123456789012345678901234 + +-- a curiosity from JSR 13 testing +rounding: half_down +dqadd3370 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd3371 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact +rounding: half_up +dqadd3372 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd3373 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact +rounding: half_even +dqadd3374 fma 1 999999999999999999999999999999999 815 -> 1000000000000000000000000000000814 +dqadd3375 fma 1 9999999999999999999999999999999999 815 -> 1.000000000000000000000000000000081E+34 Rounded Inexact + +-- ulp replacement tests +dqadd3400 fma 1 1 77e-32 -> 1.00000000000000000000000000000077 +dqadd3401 fma 1 1 77e-33 -> 1.000000000000000000000000000000077 +dqadd3402 fma 1 1 77e-34 -> 1.000000000000000000000000000000008 Inexact Rounded +dqadd3403 fma 1 1 77e-35 -> 1.000000000000000000000000000000001 Inexact Rounded +dqadd3404 fma 1 1 77e-36 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd3405 fma 1 1 77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd3406 fma 1 1 77e-299 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd3410 fma 1 10 77e-32 -> 10.00000000000000000000000000000077 +dqadd3411 fma 1 10 77e-33 -> 10.00000000000000000000000000000008 Inexact Rounded +dqadd3412 fma 1 10 77e-34 -> 10.00000000000000000000000000000001 Inexact Rounded +dqadd3413 fma 1 10 77e-35 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3414 fma 1 10 77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3415 fma 1 10 77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3416 fma 1 10 77e-299 -> 10.00000000000000000000000000000000 Inexact Rounded + +dqadd3420 fma 1 77e-32 1 -> 1.00000000000000000000000000000077 +dqadd3421 fma 1 77e-33 1 -> 1.000000000000000000000000000000077 +dqadd3422 fma 1 77e-34 1 -> 1.000000000000000000000000000000008 Inexact Rounded +dqadd3423 fma 1 77e-35 1 -> 1.000000000000000000000000000000001 Inexact Rounded +dqadd3424 fma 1 77e-36 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd3425 fma 1 77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd3426 fma 1 77e-299 1 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd3430 fma 1 77e-32 10 -> 10.00000000000000000000000000000077 +dqadd3431 fma 1 77e-33 10 -> 10.00000000000000000000000000000008 Inexact Rounded +dqadd3432 fma 1 77e-34 10 -> 10.00000000000000000000000000000001 Inexact Rounded +dqadd3433 fma 1 77e-35 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3434 fma 1 77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3435 fma 1 77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd3436 fma 1 77e-299 10 -> 10.00000000000000000000000000000000 Inexact Rounded + +-- negative ulps +dqadd36440 fma 1 1 -77e-32 -> 0.99999999999999999999999999999923 +dqadd36441 fma 1 1 -77e-33 -> 0.999999999999999999999999999999923 +dqadd36442 fma 1 1 -77e-34 -> 0.9999999999999999999999999999999923 +dqadd36443 fma 1 1 -77e-35 -> 0.9999999999999999999999999999999992 Inexact Rounded +dqadd36444 fma 1 1 -77e-36 -> 0.9999999999999999999999999999999999 Inexact Rounded +dqadd36445 fma 1 1 -77e-37 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd36446 fma 1 1 -77e-99 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd36450 fma 1 10 -77e-32 -> 9.99999999999999999999999999999923 +dqadd36451 fma 1 10 -77e-33 -> 9.999999999999999999999999999999923 +dqadd36452 fma 1 10 -77e-34 -> 9.999999999999999999999999999999992 Inexact Rounded +dqadd36453 fma 1 10 -77e-35 -> 9.999999999999999999999999999999999 Inexact Rounded +dqadd36454 fma 1 10 -77e-36 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd36455 fma 1 10 -77e-37 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd36456 fma 1 10 -77e-99 -> 10.00000000000000000000000000000000 Inexact Rounded + +dqadd36460 fma 1 -77e-32 1 -> 0.99999999999999999999999999999923 +dqadd36461 fma 1 -77e-33 1 -> 0.999999999999999999999999999999923 +dqadd36462 fma 1 -77e-34 1 -> 0.9999999999999999999999999999999923 +dqadd36463 fma 1 -77e-35 1 -> 0.9999999999999999999999999999999992 Inexact Rounded +dqadd36464 fma 1 -77e-36 1 -> 0.9999999999999999999999999999999999 Inexact Rounded +dqadd36465 fma 1 -77e-37 1 -> 1.000000000000000000000000000000000 Inexact Rounded +dqadd36466 fma 1 -77e-99 1 -> 1.000000000000000000000000000000000 Inexact Rounded + +dqadd36470 fma 1 -77e-32 10 -> 9.99999999999999999999999999999923 +dqadd36471 fma 1 -77e-33 10 -> 9.999999999999999999999999999999923 +dqadd36472 fma 1 -77e-34 10 -> 9.999999999999999999999999999999992 Inexact Rounded +dqadd36473 fma 1 -77e-35 10 -> 9.999999999999999999999999999999999 Inexact Rounded +dqadd36474 fma 1 -77e-36 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd36475 fma 1 -77e-37 10 -> 10.00000000000000000000000000000000 Inexact Rounded +dqadd36476 fma 1 -77e-99 10 -> 10.00000000000000000000000000000000 Inexact Rounded + +-- negative ulps +dqadd36480 fma 1 -1 77e-32 -> -0.99999999999999999999999999999923 +dqadd36481 fma 1 -1 77e-33 -> -0.999999999999999999999999999999923 +dqadd36482 fma 1 -1 77e-34 -> -0.9999999999999999999999999999999923 +dqadd36483 fma 1 -1 77e-35 -> -0.9999999999999999999999999999999992 Inexact Rounded +dqadd36484 fma 1 -1 77e-36 -> -0.9999999999999999999999999999999999 Inexact Rounded +dqadd36485 fma 1 -1 77e-37 -> -1.000000000000000000000000000000000 Inexact Rounded +dqadd36486 fma 1 -1 77e-99 -> -1.000000000000000000000000000000000 Inexact Rounded + +dqadd36490 fma 1 -10 77e-32 -> -9.99999999999999999999999999999923 +dqadd36491 fma 1 -10 77e-33 -> -9.999999999999999999999999999999923 +dqadd36492 fma 1 -10 77e-34 -> -9.999999999999999999999999999999992 Inexact Rounded +dqadd36493 fma 1 -10 77e-35 -> -9.999999999999999999999999999999999 Inexact Rounded +dqadd36494 fma 1 -10 77e-36 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd36495 fma 1 -10 77e-37 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd36496 fma 1 -10 77e-99 -> -10.00000000000000000000000000000000 Inexact Rounded + +dqadd36500 fma 1 77e-32 -1 -> -0.99999999999999999999999999999923 +dqadd36501 fma 1 77e-33 -1 -> -0.999999999999999999999999999999923 +dqadd36502 fma 1 77e-34 -1 -> -0.9999999999999999999999999999999923 +dqadd36503 fma 1 77e-35 -1 -> -0.9999999999999999999999999999999992 Inexact Rounded +dqadd36504 fma 1 77e-36 -1 -> -0.9999999999999999999999999999999999 Inexact Rounded +dqadd36505 fma 1 77e-37 -1 -> -1.000000000000000000000000000000000 Inexact Rounded +dqadd36506 fma 1 77e-99 -1 -> -1.000000000000000000000000000000000 Inexact Rounded + +dqadd36510 fma 1 77e-32 -10 -> -9.99999999999999999999999999999923 +dqadd36511 fma 1 77e-33 -10 -> -9.999999999999999999999999999999923 +dqadd36512 fma 1 77e-34 -10 -> -9.999999999999999999999999999999992 Inexact Rounded +dqadd36513 fma 1 77e-35 -10 -> -9.999999999999999999999999999999999 Inexact Rounded +dqadd36514 fma 1 77e-36 -10 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd36515 fma 1 77e-37 -10 -> -10.00000000000000000000000000000000 Inexact Rounded +dqadd36516 fma 1 77e-99 -10 -> -10.00000000000000000000000000000000 Inexact Rounded + +-- and some more residue effects and different roundings +rounding: half_up +dqadd36540 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd36541 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36542 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36543 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36544 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36545 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36546 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36547 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36548 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36549 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36550 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36551 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36552 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36553 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36554 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36555 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36556 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd36557 fma 1 '9876543219876543216543210123456789' 1.000000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36558 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36559 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +rounding: half_even +dqadd36560 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd36561 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36562 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36563 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36564 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36565 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36566 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36567 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd36568 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36569 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36570 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36571 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36572 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36573 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36574 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36575 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36576 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd36577 fma 1 '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36578 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd36579 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +-- critical few with even bottom digit... +dqadd37540 fma 1 '9876543219876543216543210123456788' 0.499999999 -> '9876543219876543216543210123456788' Inexact Rounded +dqadd37541 fma 1 '9876543219876543216543210123456788' 0.5 -> '9876543219876543216543210123456788' Inexact Rounded +dqadd37542 fma 1 '9876543219876543216543210123456788' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded + +rounding: down +dqadd37550 fma 1 '9876543219876543216543210123456789' 0 -> '9876543219876543216543210123456789' +dqadd37551 fma 1 '9876543219876543216543210123456789' 0.000000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37552 fma 1 '9876543219876543216543210123456789' 0.000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37553 fma 1 '9876543219876543216543210123456789' 0.1 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37554 fma 1 '9876543219876543216543210123456789' 0.4 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37555 fma 1 '9876543219876543216543210123456789' 0.49 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37556 fma 1 '9876543219876543216543210123456789' 0.499999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37557 fma 1 '9876543219876543216543210123456789' 0.499999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37558 fma 1 '9876543219876543216543210123456789' 0.5 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37559 fma 1 '9876543219876543216543210123456789' 0.500000001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37560 fma 1 '9876543219876543216543210123456789' 0.500001 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37561 fma 1 '9876543219876543216543210123456789' 0.51 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37562 fma 1 '9876543219876543216543210123456789' 0.6 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37563 fma 1 '9876543219876543216543210123456789' 0.9 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37564 fma 1 '9876543219876543216543210123456789' 0.99999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37565 fma 1 '9876543219876543216543210123456789' 0.999999999 -> '9876543219876543216543210123456789' Inexact Rounded +dqadd37566 fma 1 '9876543219876543216543210123456789' 1 -> '9876543219876543216543210123456790' +dqadd37567 fma 1 '9876543219876543216543210123456789' 1.00000001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd37568 fma 1 '9876543219876543216543210123456789' 1.00001 -> '9876543219876543216543210123456790' Inexact Rounded +dqadd37569 fma 1 '9876543219876543216543210123456789' 1.1 -> '9876543219876543216543210123456790' Inexact Rounded + +-- more zeros, etc. +rounding: half_even + +dqadd37701 fma 1 5.00 1.00E-3 -> 5.00100 +dqadd37702 fma 1 00.00 0.000 -> 0.000 +dqadd37703 fma 1 00.00 0E-3 -> 0.000 +dqadd37704 fma 1 0E-3 00.00 -> 0.000 + +dqadd37710 fma 1 0E+3 00.00 -> 0.00 +dqadd37711 fma 1 0E+3 00.0 -> 0.0 +dqadd37712 fma 1 0E+3 00. -> 0 +dqadd37713 fma 1 0E+3 00.E+1 -> 0E+1 +dqadd37714 fma 1 0E+3 00.E+2 -> 0E+2 +dqadd37715 fma 1 0E+3 00.E+3 -> 0E+3 +dqadd37716 fma 1 0E+3 00.E+4 -> 0E+3 +dqadd37717 fma 1 0E+3 00.E+5 -> 0E+3 +dqadd37718 fma 1 0E+3 -00.0 -> 0.0 +dqadd37719 fma 1 0E+3 -00. -> 0 +dqadd37731 fma 1 0E+3 -00.E+1 -> 0E+1 + +dqadd37720 fma 1 00.00 0E+3 -> 0.00 +dqadd37721 fma 1 00.0 0E+3 -> 0.0 +dqadd37722 fma 1 00. 0E+3 -> 0 +dqadd37723 fma 1 00.E+1 0E+3 -> 0E+1 +dqadd37724 fma 1 00.E+2 0E+3 -> 0E+2 +dqadd37725 fma 1 00.E+3 0E+3 -> 0E+3 +dqadd37726 fma 1 00.E+4 0E+3 -> 0E+3 +dqadd37727 fma 1 00.E+5 0E+3 -> 0E+3 +dqadd37728 fma 1 -00.00 0E+3 -> 0.00 +dqadd37729 fma 1 -00.0 0E+3 -> 0.0 +dqadd37730 fma 1 -00. 0E+3 -> 0 + +dqadd37732 fma 1 0 0 -> 0 +dqadd37733 fma 1 0 -0 -> 0 +dqadd37734 fma 1 -0 0 -> 0 +dqadd37735 fma 1 -0 -0 -> -0 -- IEEE 854 special case + +dqadd37736 fma 1 1 -1 -> 0 +dqadd37737 fma 1 -1 -1 -> -2 +dqadd37738 fma 1 1 1 -> 2 +dqadd37739 fma 1 -1 1 -> 0 + +dqadd37741 fma 1 0 -1 -> -1 +dqadd37742 fma 1 -0 -1 -> -1 +dqadd37743 fma 1 0 1 -> 1 +dqadd37744 fma 1 -0 1 -> 1 +dqadd37745 fma 1 -1 0 -> -1 +dqadd37746 fma 1 -1 -0 -> -1 +dqadd37747 fma 1 1 0 -> 1 +dqadd37748 fma 1 1 -0 -> 1 + +dqadd37751 fma 1 0.0 -1 -> -1.0 +dqadd37752 fma 1 -0.0 -1 -> -1.0 +dqadd37753 fma 1 0.0 1 -> 1.0 +dqadd37754 fma 1 -0.0 1 -> 1.0 +dqadd37755 fma 1 -1.0 0 -> -1.0 +dqadd37756 fma 1 -1.0 -0 -> -1.0 +dqadd37757 fma 1 1.0 0 -> 1.0 +dqadd37758 fma 1 1.0 -0 -> 1.0 + +dqadd37761 fma 1 0 -1.0 -> -1.0 +dqadd37762 fma 1 -0 -1.0 -> -1.0 +dqadd37763 fma 1 0 1.0 -> 1.0 +dqadd37764 fma 1 -0 1.0 -> 1.0 +dqadd37765 fma 1 -1 0.0 -> -1.0 +dqadd37766 fma 1 -1 -0.0 -> -1.0 +dqadd37767 fma 1 1 0.0 -> 1.0 +dqadd37768 fma 1 1 -0.0 -> 1.0 + +dqadd37771 fma 1 0.0 -1.0 -> -1.0 +dqadd37772 fma 1 -0.0 -1.0 -> -1.0 +dqadd37773 fma 1 0.0 1.0 -> 1.0 +dqadd37774 fma 1 -0.0 1.0 -> 1.0 +dqadd37775 fma 1 -1.0 0.0 -> -1.0 +dqadd37776 fma 1 -1.0 -0.0 -> -1.0 +dqadd37777 fma 1 1.0 0.0 -> 1.0 +dqadd37778 fma 1 1.0 -0.0 -> 1.0 + +-- Specials +dqadd37780 fma 1 -Inf -Inf -> -Infinity +dqadd37781 fma 1 -Inf -1000 -> -Infinity +dqadd37782 fma 1 -Inf -1 -> -Infinity +dqadd37783 fma 1 -Inf -0 -> -Infinity +dqadd37784 fma 1 -Inf 0 -> -Infinity +dqadd37785 fma 1 -Inf 1 -> -Infinity +dqadd37786 fma 1 -Inf 1000 -> -Infinity +dqadd37787 fma 1 -1000 -Inf -> -Infinity +dqadd37788 fma 1 -Inf -Inf -> -Infinity +dqadd37789 fma 1 -1 -Inf -> -Infinity +dqadd37790 fma 1 -0 -Inf -> -Infinity +dqadd37791 fma 1 0 -Inf -> -Infinity +dqadd37792 fma 1 1 -Inf -> -Infinity +dqadd37793 fma 1 1000 -Inf -> -Infinity +dqadd37794 fma 1 Inf -Inf -> NaN Invalid_operation + +dqadd37800 fma 1 Inf -Inf -> NaN Invalid_operation +dqadd37801 fma 1 Inf -1000 -> Infinity +dqadd37802 fma 1 Inf -1 -> Infinity +dqadd37803 fma 1 Inf -0 -> Infinity +dqadd37804 fma 1 Inf 0 -> Infinity +dqadd37805 fma 1 Inf 1 -> Infinity +dqadd37806 fma 1 Inf 1000 -> Infinity +dqadd37807 fma 1 Inf Inf -> Infinity +dqadd37808 fma 1 -1000 Inf -> Infinity +dqadd37809 fma 1 -Inf Inf -> NaN Invalid_operation +dqadd37810 fma 1 -1 Inf -> Infinity +dqadd37811 fma 1 -0 Inf -> Infinity +dqadd37812 fma 1 0 Inf -> Infinity +dqadd37813 fma 1 1 Inf -> Infinity +dqadd37814 fma 1 1000 Inf -> Infinity +dqadd37815 fma 1 Inf Inf -> Infinity + +dqadd37821 fma 1 NaN -Inf -> NaN +dqadd37822 fma 1 NaN -1000 -> NaN +dqadd37823 fma 1 NaN -1 -> NaN +dqadd37824 fma 1 NaN -0 -> NaN +dqadd37825 fma 1 NaN 0 -> NaN +dqadd37826 fma 1 NaN 1 -> NaN +dqadd37827 fma 1 NaN 1000 -> NaN +dqadd37828 fma 1 NaN Inf -> NaN +dqadd37829 fma 1 NaN NaN -> NaN +dqadd37830 fma 1 -Inf NaN -> NaN +dqadd37831 fma 1 -1000 NaN -> NaN +dqadd37832 fma 1 -1 NaN -> NaN +dqadd37833 fma 1 -0 NaN -> NaN +dqadd37834 fma 1 0 NaN -> NaN +dqadd37835 fma 1 1 NaN -> NaN +dqadd37836 fma 1 1000 NaN -> NaN +dqadd37837 fma 1 Inf NaN -> NaN + +dqadd37841 fma 1 sNaN -Inf -> NaN Invalid_operation +dqadd37842 fma 1 sNaN -1000 -> NaN Invalid_operation +dqadd37843 fma 1 sNaN -1 -> NaN Invalid_operation +dqadd37844 fma 1 sNaN -0 -> NaN Invalid_operation +dqadd37845 fma 1 sNaN 0 -> NaN Invalid_operation +dqadd37846 fma 1 sNaN 1 -> NaN Invalid_operation +dqadd37847 fma 1 sNaN 1000 -> NaN Invalid_operation +dqadd37848 fma 1 sNaN NaN -> NaN Invalid_operation +dqadd37849 fma 1 sNaN sNaN -> NaN Invalid_operation +dqadd37850 fma 1 NaN sNaN -> NaN Invalid_operation +dqadd37851 fma 1 -Inf sNaN -> NaN Invalid_operation +dqadd37852 fma 1 -1000 sNaN -> NaN Invalid_operation +dqadd37853 fma 1 -1 sNaN -> NaN Invalid_operation +dqadd37854 fma 1 -0 sNaN -> NaN Invalid_operation +dqadd37855 fma 1 0 sNaN -> NaN Invalid_operation +dqadd37856 fma 1 1 sNaN -> NaN Invalid_operation +dqadd37857 fma 1 1000 sNaN -> NaN Invalid_operation +dqadd37858 fma 1 Inf sNaN -> NaN Invalid_operation +dqadd37859 fma 1 NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqadd37861 fma 1 NaN1 -Inf -> NaN1 +dqadd37862 fma 1 +NaN2 -1000 -> NaN2 +dqadd37863 fma 1 NaN3 1000 -> NaN3 +dqadd37864 fma 1 NaN4 Inf -> NaN4 +dqadd37865 fma 1 NaN5 +NaN6 -> NaN5 +dqadd37866 fma 1 -Inf NaN7 -> NaN7 +dqadd37867 fma 1 -1000 NaN8 -> NaN8 +dqadd37868 fma 1 1000 NaN9 -> NaN9 +dqadd37869 fma 1 Inf +NaN10 -> NaN10 +dqadd37871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation +dqadd37872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation +dqadd37873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation +dqadd37874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation +dqadd37875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation +dqadd37876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation +dqadd37877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation +dqadd37878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation +dqadd37879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation +dqadd37880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation +dqadd37881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqadd37882 fma 1 -NaN26 NaN28 -> -NaN26 +dqadd37883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqadd37884 fma 1 1000 -NaN30 -> -NaN30 +dqadd37885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Here we explore near the boundary of rounding a subnormal to Nmin +dqadd37575 fma 1 1E-6143 -1E-6176 -> 9.99999999999999999999999999999999E-6144 Subnormal +dqadd37576 fma 1 -1E-6143 +1E-6176 -> -9.99999999999999999999999999999999E-6144 Subnormal + +-- check overflow edge case +-- 1234567890123456 +dqadd37972 apply 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqadd37973 fma 1 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37974 fma 1 9999999999999999999999999999999999E+6111 1 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37975 fma 1 9999999999999999999999999999999999E+6111 1E+6111 -> Infinity Overflow Inexact Rounded +dqadd37976 fma 1 9999999999999999999999999999999999E+6111 9E+6110 -> Infinity Overflow Inexact Rounded +dqadd37977 fma 1 9999999999999999999999999999999999E+6111 8E+6110 -> Infinity Overflow Inexact Rounded +dqadd37978 fma 1 9999999999999999999999999999999999E+6111 7E+6110 -> Infinity Overflow Inexact Rounded +dqadd37979 fma 1 9999999999999999999999999999999999E+6111 6E+6110 -> Infinity Overflow Inexact Rounded +dqadd37980 fma 1 9999999999999999999999999999999999E+6111 5E+6110 -> Infinity Overflow Inexact Rounded +dqadd37981 fma 1 9999999999999999999999999999999999E+6111 4E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37982 fma 1 9999999999999999999999999999999999E+6111 3E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37983 fma 1 9999999999999999999999999999999999E+6111 2E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37984 fma 1 9999999999999999999999999999999999E+6111 1E+6110 -> 9.999999999999999999999999999999999E+6144 Inexact Rounded + +dqadd37985 apply -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqadd37986 fma 1 -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37987 fma 1 -9999999999999999999999999999999999E+6111 -1 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37988 fma 1 -9999999999999999999999999999999999E+6111 -1E+6111 -> -Infinity Overflow Inexact Rounded +dqadd37989 fma 1 -9999999999999999999999999999999999E+6111 -9E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37990 fma 1 -9999999999999999999999999999999999E+6111 -8E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37991 fma 1 -9999999999999999999999999999999999E+6111 -7E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37992 fma 1 -9999999999999999999999999999999999E+6111 -6E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37993 fma 1 -9999999999999999999999999999999999E+6111 -5E+6110 -> -Infinity Overflow Inexact Rounded +dqadd37994 fma 1 -9999999999999999999999999999999999E+6111 -4E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37995 fma 1 -9999999999999999999999999999999999E+6111 -3E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37996 fma 1 -9999999999999999999999999999999999E+6111 -2E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded +dqadd37997 fma 1 -9999999999999999999999999999999999E+6111 -1E+6110 -> -9.999999999999999999999999999999999E+6144 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +dqadd371100 fma 1 1e+2 -1e-6143 -> 99.99999999999999999999999999999999 Rounded Inexact +dqadd371101 fma 1 1e+1 -1e-6143 -> 9.999999999999999999999999999999999 Rounded Inexact +dqadd371103 fma 1 +1 -1e-6143 -> 0.9999999999999999999999999999999999 Rounded Inexact +dqadd371104 fma 1 1e-1 -1e-6143 -> 0.09999999999999999999999999999999999 Rounded Inexact +dqadd371105 fma 1 1e-2 -1e-6143 -> 0.009999999999999999999999999999999999 Rounded Inexact +dqadd371106 fma 1 1e-3 -1e-6143 -> 0.0009999999999999999999999999999999999 Rounded Inexact +dqadd371107 fma 1 1e-4 -1e-6143 -> 0.00009999999999999999999999999999999999 Rounded Inexact +dqadd371108 fma 1 1e-5 -1e-6143 -> 0.000009999999999999999999999999999999999 Rounded Inexact +dqadd371109 fma 1 1e-6 -1e-6143 -> 9.999999999999999999999999999999999E-7 Rounded Inexact + +rounding: ceiling +dqadd371110 fma 1 -1e+2 +1e-6143 -> -99.99999999999999999999999999999999 Rounded Inexact +dqadd371111 fma 1 -1e+1 +1e-6143 -> -9.999999999999999999999999999999999 Rounded Inexact +dqadd371113 fma 1 -1 +1e-6143 -> -0.9999999999999999999999999999999999 Rounded Inexact +dqadd371114 fma 1 -1e-1 +1e-6143 -> -0.09999999999999999999999999999999999 Rounded Inexact +dqadd371115 fma 1 -1e-2 +1e-6143 -> -0.009999999999999999999999999999999999 Rounded Inexact +dqadd371116 fma 1 -1e-3 +1e-6143 -> -0.0009999999999999999999999999999999999 Rounded Inexact +dqadd371117 fma 1 -1e-4 +1e-6143 -> -0.00009999999999999999999999999999999999 Rounded Inexact +dqadd371118 fma 1 -1e-5 +1e-6143 -> -0.000009999999999999999999999999999999999 Rounded Inexact +dqadd371119 fma 1 -1e-6 +1e-6143 -> -9.999999999999999999999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +dqadd371300 fma 1 1E34 -0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371310 fma 1 1E34 -0.51 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371311 fma 1 1E34 -0.501 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371312 fma 1 1E34 -0.5001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371313 fma 1 1E34 -0.50001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371314 fma 1 1E34 -0.500001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371315 fma 1 1E34 -0.5000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371316 fma 1 1E34 -0.50000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371317 fma 1 1E34 -0.500000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371318 fma 1 1E34 -0.5000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371319 fma 1 1E34 -0.50000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371320 fma 1 1E34 -0.500000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371321 fma 1 1E34 -0.5000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371322 fma 1 1E34 -0.50000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371323 fma 1 1E34 -0.500000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371324 fma 1 1E34 -0.5000000000000001 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371325 fma 1 1E34 -0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371326 fma 1 1E34 -0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371327 fma 1 1E34 -0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371328 fma 1 1E34 -0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371329 fma 1 1E34 -0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371330 fma 1 1E34 -0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371331 fma 1 1E34 -0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371332 fma 1 1E34 -0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371333 fma 1 1E34 -0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371334 fma 1 1E34 -0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371335 fma 1 1E34 -0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371336 fma 1 1E34 -0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371337 fma 1 1E34 -0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371338 fma 1 1E34 -0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371339 fma 1 1E34 -0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded + +dqadd371340 fma 1 1E34 -5000000.000010001 -> 9999999999999999999999999995000000 Inexact Rounded +dqadd371341 fma 1 1E34 -5000000.000000001 -> 9999999999999999999999999995000000 Inexact Rounded + +dqadd371349 fma 1 9999999999999999999999999999999999 0.4 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371350 fma 1 9999999999999999999999999999999999 0.49 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371351 fma 1 9999999999999999999999999999999999 0.499 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371352 fma 1 9999999999999999999999999999999999 0.4999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371353 fma 1 9999999999999999999999999999999999 0.49999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371354 fma 1 9999999999999999999999999999999999 0.499999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371355 fma 1 9999999999999999999999999999999999 0.4999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371356 fma 1 9999999999999999999999999999999999 0.49999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371357 fma 1 9999999999999999999999999999999999 0.499999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371358 fma 1 9999999999999999999999999999999999 0.4999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371359 fma 1 9999999999999999999999999999999999 0.49999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371360 fma 1 9999999999999999999999999999999999 0.499999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371361 fma 1 9999999999999999999999999999999999 0.4999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371362 fma 1 9999999999999999999999999999999999 0.49999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371363 fma 1 9999999999999999999999999999999999 0.499999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371364 fma 1 9999999999999999999999999999999999 0.4999999999999999 -> 9999999999999999999999999999999999 Inexact Rounded +dqadd371365 fma 1 9999999999999999999999999999999999 0.5000000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371367 fma 1 9999999999999999999999999999999999 0.500000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371368 fma 1 9999999999999999999999999999999999 0.50000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371369 fma 1 9999999999999999999999999999999999 0.5000000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371370 fma 1 9999999999999999999999999999999999 0.500000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371371 fma 1 9999999999999999999999999999999999 0.50000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371372 fma 1 9999999999999999999999999999999999 0.5000000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371373 fma 1 9999999999999999999999999999999999 0.500000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371374 fma 1 9999999999999999999999999999999999 0.50000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371375 fma 1 9999999999999999999999999999999999 0.5000000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371376 fma 1 9999999999999999999999999999999999 0.500000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371377 fma 1 9999999999999999999999999999999999 0.50000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371378 fma 1 9999999999999999999999999999999999 0.5000 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371379 fma 1 9999999999999999999999999999999999 0.500 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371380 fma 1 9999999999999999999999999999999999 0.50 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371381 fma 1 9999999999999999999999999999999999 0.5 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371382 fma 1 9999999999999999999999999999999999 0.5000000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371383 fma 1 9999999999999999999999999999999999 0.500000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371384 fma 1 9999999999999999999999999999999999 0.50000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371385 fma 1 9999999999999999999999999999999999 0.5000000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371386 fma 1 9999999999999999999999999999999999 0.500000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371387 fma 1 9999999999999999999999999999999999 0.50000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371388 fma 1 9999999999999999999999999999999999 0.5000000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371389 fma 1 9999999999999999999999999999999999 0.500000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371390 fma 1 9999999999999999999999999999999999 0.50000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371391 fma 1 9999999999999999999999999999999999 0.5000001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371392 fma 1 9999999999999999999999999999999999 0.500001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371393 fma 1 9999999999999999999999999999999999 0.50001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371394 fma 1 9999999999999999999999999999999999 0.5001 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371395 fma 1 9999999999999999999999999999999999 0.501 -> 1.000000000000000000000000000000000E+34 Inexact Rounded +dqadd371396 fma 1 9999999999999999999999999999999999 0.51 -> 1.000000000000000000000000000000000E+34 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +dqadd371420 fma 1 0 1.123456789987654321123456789012345 -> 1.123456789987654321123456789012345 +dqadd371421 fma 1 0 1.123456789987654321123456789012345E-1 -> 0.1123456789987654321123456789012345 +dqadd371422 fma 1 0 1.123456789987654321123456789012345E-2 -> 0.01123456789987654321123456789012345 +dqadd371423 fma 1 0 1.123456789987654321123456789012345E-3 -> 0.001123456789987654321123456789012345 +dqadd371424 fma 1 0 1.123456789987654321123456789012345E-4 -> 0.0001123456789987654321123456789012345 +dqadd371425 fma 1 0 1.123456789987654321123456789012345E-5 -> 0.00001123456789987654321123456789012345 +dqadd371426 fma 1 0 1.123456789987654321123456789012345E-6 -> 0.000001123456789987654321123456789012345 +dqadd371427 fma 1 0 1.123456789987654321123456789012345E-7 -> 1.123456789987654321123456789012345E-7 +dqadd371428 fma 1 0 1.123456789987654321123456789012345E-8 -> 1.123456789987654321123456789012345E-8 +dqadd371429 fma 1 0 1.123456789987654321123456789012345E-9 -> 1.123456789987654321123456789012345E-9 +dqadd371430 fma 1 0 1.123456789987654321123456789012345E-10 -> 1.123456789987654321123456789012345E-10 +dqadd371431 fma 1 0 1.123456789987654321123456789012345E-11 -> 1.123456789987654321123456789012345E-11 +dqadd371432 fma 1 0 1.123456789987654321123456789012345E-12 -> 1.123456789987654321123456789012345E-12 +dqadd371433 fma 1 0 1.123456789987654321123456789012345E-13 -> 1.123456789987654321123456789012345E-13 +dqadd371434 fma 1 0 1.123456789987654321123456789012345E-14 -> 1.123456789987654321123456789012345E-14 +dqadd371435 fma 1 0 1.123456789987654321123456789012345E-15 -> 1.123456789987654321123456789012345E-15 +dqadd371436 fma 1 0 1.123456789987654321123456789012345E-16 -> 1.123456789987654321123456789012345E-16 +dqadd371437 fma 1 0 1.123456789987654321123456789012345E-17 -> 1.123456789987654321123456789012345E-17 +dqadd371438 fma 1 0 1.123456789987654321123456789012345E-18 -> 1.123456789987654321123456789012345E-18 +dqadd371439 fma 1 0 1.123456789987654321123456789012345E-19 -> 1.123456789987654321123456789012345E-19 +dqadd371440 fma 1 0 1.123456789987654321123456789012345E-20 -> 1.123456789987654321123456789012345E-20 +dqadd371441 fma 1 0 1.123456789987654321123456789012345E-21 -> 1.123456789987654321123456789012345E-21 +dqadd371442 fma 1 0 1.123456789987654321123456789012345E-22 -> 1.123456789987654321123456789012345E-22 +dqadd371443 fma 1 0 1.123456789987654321123456789012345E-23 -> 1.123456789987654321123456789012345E-23 +dqadd371444 fma 1 0 1.123456789987654321123456789012345E-24 -> 1.123456789987654321123456789012345E-24 +dqadd371445 fma 1 0 1.123456789987654321123456789012345E-25 -> 1.123456789987654321123456789012345E-25 +dqadd371446 fma 1 0 1.123456789987654321123456789012345E-26 -> 1.123456789987654321123456789012345E-26 +dqadd371447 fma 1 0 1.123456789987654321123456789012345E-27 -> 1.123456789987654321123456789012345E-27 +dqadd371448 fma 1 0 1.123456789987654321123456789012345E-28 -> 1.123456789987654321123456789012345E-28 +dqadd371449 fma 1 0 1.123456789987654321123456789012345E-29 -> 1.123456789987654321123456789012345E-29 +dqadd371450 fma 1 0 1.123456789987654321123456789012345E-30 -> 1.123456789987654321123456789012345E-30 +dqadd371451 fma 1 0 1.123456789987654321123456789012345E-31 -> 1.123456789987654321123456789012345E-31 +dqadd371452 fma 1 0 1.123456789987654321123456789012345E-32 -> 1.123456789987654321123456789012345E-32 +dqadd371453 fma 1 0 1.123456789987654321123456789012345E-33 -> 1.123456789987654321123456789012345E-33 +dqadd371454 fma 1 0 1.123456789987654321123456789012345E-34 -> 1.123456789987654321123456789012345E-34 +dqadd371455 fma 1 0 1.123456789987654321123456789012345E-35 -> 1.123456789987654321123456789012345E-35 +dqadd371456 fma 1 0 1.123456789987654321123456789012345E-36 -> 1.123456789987654321123456789012345E-36 + +-- same, reversed 0 +dqadd371460 fma 1 1.123456789987654321123456789012345 0 -> 1.123456789987654321123456789012345 +dqadd371461 fma 1 1.123456789987654321123456789012345E-1 0 -> 0.1123456789987654321123456789012345 +dqadd371462 fma 1 1.123456789987654321123456789012345E-2 0 -> 0.01123456789987654321123456789012345 +dqadd371463 fma 1 1.123456789987654321123456789012345E-3 0 -> 0.001123456789987654321123456789012345 +dqadd371464 fma 1 1.123456789987654321123456789012345E-4 0 -> 0.0001123456789987654321123456789012345 +dqadd371465 fma 1 1.123456789987654321123456789012345E-5 0 -> 0.00001123456789987654321123456789012345 +dqadd371466 fma 1 1.123456789987654321123456789012345E-6 0 -> 0.000001123456789987654321123456789012345 +dqadd371467 fma 1 1.123456789987654321123456789012345E-7 0 -> 1.123456789987654321123456789012345E-7 +dqadd371468 fma 1 1.123456789987654321123456789012345E-8 0 -> 1.123456789987654321123456789012345E-8 +dqadd371469 fma 1 1.123456789987654321123456789012345E-9 0 -> 1.123456789987654321123456789012345E-9 +dqadd371470 fma 1 1.123456789987654321123456789012345E-10 0 -> 1.123456789987654321123456789012345E-10 +dqadd371471 fma 1 1.123456789987654321123456789012345E-11 0 -> 1.123456789987654321123456789012345E-11 +dqadd371472 fma 1 1.123456789987654321123456789012345E-12 0 -> 1.123456789987654321123456789012345E-12 +dqadd371473 fma 1 1.123456789987654321123456789012345E-13 0 -> 1.123456789987654321123456789012345E-13 +dqadd371474 fma 1 1.123456789987654321123456789012345E-14 0 -> 1.123456789987654321123456789012345E-14 +dqadd371475 fma 1 1.123456789987654321123456789012345E-15 0 -> 1.123456789987654321123456789012345E-15 +dqadd371476 fma 1 1.123456789987654321123456789012345E-16 0 -> 1.123456789987654321123456789012345E-16 +dqadd371477 fma 1 1.123456789987654321123456789012345E-17 0 -> 1.123456789987654321123456789012345E-17 +dqadd371478 fma 1 1.123456789987654321123456789012345E-18 0 -> 1.123456789987654321123456789012345E-18 +dqadd371479 fma 1 1.123456789987654321123456789012345E-19 0 -> 1.123456789987654321123456789012345E-19 +dqadd371480 fma 1 1.123456789987654321123456789012345E-20 0 -> 1.123456789987654321123456789012345E-20 +dqadd371481 fma 1 1.123456789987654321123456789012345E-21 0 -> 1.123456789987654321123456789012345E-21 +dqadd371482 fma 1 1.123456789987654321123456789012345E-22 0 -> 1.123456789987654321123456789012345E-22 +dqadd371483 fma 1 1.123456789987654321123456789012345E-23 0 -> 1.123456789987654321123456789012345E-23 +dqadd371484 fma 1 1.123456789987654321123456789012345E-24 0 -> 1.123456789987654321123456789012345E-24 +dqadd371485 fma 1 1.123456789987654321123456789012345E-25 0 -> 1.123456789987654321123456789012345E-25 +dqadd371486 fma 1 1.123456789987654321123456789012345E-26 0 -> 1.123456789987654321123456789012345E-26 +dqadd371487 fma 1 1.123456789987654321123456789012345E-27 0 -> 1.123456789987654321123456789012345E-27 +dqadd371488 fma 1 1.123456789987654321123456789012345E-28 0 -> 1.123456789987654321123456789012345E-28 +dqadd371489 fma 1 1.123456789987654321123456789012345E-29 0 -> 1.123456789987654321123456789012345E-29 +dqadd371490 fma 1 1.123456789987654321123456789012345E-30 0 -> 1.123456789987654321123456789012345E-30 +dqadd371491 fma 1 1.123456789987654321123456789012345E-31 0 -> 1.123456789987654321123456789012345E-31 +dqadd371492 fma 1 1.123456789987654321123456789012345E-32 0 -> 1.123456789987654321123456789012345E-32 +dqadd371493 fma 1 1.123456789987654321123456789012345E-33 0 -> 1.123456789987654321123456789012345E-33 +dqadd371494 fma 1 1.123456789987654321123456789012345E-34 0 -> 1.123456789987654321123456789012345E-34 +dqadd371495 fma 1 1.123456789987654321123456789012345E-35 0 -> 1.123456789987654321123456789012345E-35 +dqadd371496 fma 1 1.123456789987654321123456789012345E-36 0 -> 1.123456789987654321123456789012345E-36 + +-- same, Es on the 0 +dqadd371500 fma 1 1.123456789987654321123456789012345 0E-0 -> 1.123456789987654321123456789012345 +dqadd371501 fma 1 1.123456789987654321123456789012345 0E-1 -> 1.123456789987654321123456789012345 +dqadd371502 fma 1 1.123456789987654321123456789012345 0E-2 -> 1.123456789987654321123456789012345 +dqadd371503 fma 1 1.123456789987654321123456789012345 0E-3 -> 1.123456789987654321123456789012345 +dqadd371504 fma 1 1.123456789987654321123456789012345 0E-4 -> 1.123456789987654321123456789012345 +dqadd371505 fma 1 1.123456789987654321123456789012345 0E-5 -> 1.123456789987654321123456789012345 +dqadd371506 fma 1 1.123456789987654321123456789012345 0E-6 -> 1.123456789987654321123456789012345 +dqadd371507 fma 1 1.123456789987654321123456789012345 0E-7 -> 1.123456789987654321123456789012345 +dqadd371508 fma 1 1.123456789987654321123456789012345 0E-8 -> 1.123456789987654321123456789012345 +dqadd371509 fma 1 1.123456789987654321123456789012345 0E-9 -> 1.123456789987654321123456789012345 +dqadd371510 fma 1 1.123456789987654321123456789012345 0E-10 -> 1.123456789987654321123456789012345 +dqadd371511 fma 1 1.123456789987654321123456789012345 0E-11 -> 1.123456789987654321123456789012345 +dqadd371512 fma 1 1.123456789987654321123456789012345 0E-12 -> 1.123456789987654321123456789012345 +dqadd371513 fma 1 1.123456789987654321123456789012345 0E-13 -> 1.123456789987654321123456789012345 +dqadd371514 fma 1 1.123456789987654321123456789012345 0E-14 -> 1.123456789987654321123456789012345 +dqadd371515 fma 1 1.123456789987654321123456789012345 0E-15 -> 1.123456789987654321123456789012345 +dqadd371516 fma 1 1.123456789987654321123456789012345 0E-16 -> 1.123456789987654321123456789012345 +dqadd371517 fma 1 1.123456789987654321123456789012345 0E-17 -> 1.123456789987654321123456789012345 +dqadd371518 fma 1 1.123456789987654321123456789012345 0E-18 -> 1.123456789987654321123456789012345 +dqadd371519 fma 1 1.123456789987654321123456789012345 0E-19 -> 1.123456789987654321123456789012345 +dqadd371520 fma 1 1.123456789987654321123456789012345 0E-20 -> 1.123456789987654321123456789012345 +dqadd371521 fma 1 1.123456789987654321123456789012345 0E-21 -> 1.123456789987654321123456789012345 +dqadd371522 fma 1 1.123456789987654321123456789012345 0E-22 -> 1.123456789987654321123456789012345 +dqadd371523 fma 1 1.123456789987654321123456789012345 0E-23 -> 1.123456789987654321123456789012345 +dqadd371524 fma 1 1.123456789987654321123456789012345 0E-24 -> 1.123456789987654321123456789012345 +dqadd371525 fma 1 1.123456789987654321123456789012345 0E-25 -> 1.123456789987654321123456789012345 +dqadd371526 fma 1 1.123456789987654321123456789012345 0E-26 -> 1.123456789987654321123456789012345 +dqadd371527 fma 1 1.123456789987654321123456789012345 0E-27 -> 1.123456789987654321123456789012345 +dqadd371528 fma 1 1.123456789987654321123456789012345 0E-28 -> 1.123456789987654321123456789012345 +dqadd371529 fma 1 1.123456789987654321123456789012345 0E-29 -> 1.123456789987654321123456789012345 +dqadd371530 fma 1 1.123456789987654321123456789012345 0E-30 -> 1.123456789987654321123456789012345 +dqadd371531 fma 1 1.123456789987654321123456789012345 0E-31 -> 1.123456789987654321123456789012345 +dqadd371532 fma 1 1.123456789987654321123456789012345 0E-32 -> 1.123456789987654321123456789012345 +dqadd371533 fma 1 1.123456789987654321123456789012345 0E-33 -> 1.123456789987654321123456789012345 +-- next four flag Rounded because the 0 extends the result +dqadd371534 fma 1 1.123456789987654321123456789012345 0E-34 -> 1.123456789987654321123456789012345 Rounded +dqadd371535 fma 1 1.123456789987654321123456789012345 0E-35 -> 1.123456789987654321123456789012345 Rounded +dqadd371536 fma 1 1.123456789987654321123456789012345 0E-36 -> 1.123456789987654321123456789012345 Rounded +dqadd371537 fma 1 1.123456789987654321123456789012345 0E-37 -> 1.123456789987654321123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +dqadd371600 fma 1 0 0E-19 -> 0E-19 +dqadd371601 fma 1 -0 0E-19 -> 0E-19 +dqadd371602 fma 1 0 -0E-19 -> 0E-19 +dqadd371603 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371611 fma 1 -11 11 -> 0 +dqadd371612 fma 1 11 -11 -> 0 +-- overflow +dqadd371613 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371614 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: half_down +-- exact zeros from zeros +dqadd371620 fma 1 0 0E-19 -> 0E-19 +dqadd371621 fma 1 -0 0E-19 -> 0E-19 +dqadd371622 fma 1 0 -0E-19 -> 0E-19 +dqadd371623 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371631 fma 1 -11 11 -> 0 +dqadd371632 fma 1 11 -11 -> 0 +-- overflow +dqadd371633 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371634 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: half_even +-- exact zeros from zeros +dqadd371640 fma 1 0 0E-19 -> 0E-19 +dqadd371641 fma 1 -0 0E-19 -> 0E-19 +dqadd371642 fma 1 0 -0E-19 -> 0E-19 +dqadd371643 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371651 fma 1 -11 11 -> 0 +dqadd371652 fma 1 11 -11 -> 0 +-- overflow +dqadd371653 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371654 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: up +-- exact zeros from zeros +dqadd371660 fma 1 0 0E-19 -> 0E-19 +dqadd371661 fma 1 -0 0E-19 -> 0E-19 +dqadd371662 fma 1 0 -0E-19 -> 0E-19 +dqadd371663 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371671 fma 1 -11 11 -> 0 +dqadd371672 fma 1 11 -11 -> 0 +-- overflow +dqadd371673 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371674 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: down +-- exact zeros from zeros +dqadd371680 fma 1 0 0E-19 -> 0E-19 +dqadd371681 fma 1 -0 0E-19 -> 0E-19 +dqadd371682 fma 1 0 -0E-19 -> 0E-19 +dqadd371683 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371691 fma 1 -11 11 -> 0 +dqadd371692 fma 1 11 -11 -> 0 +-- overflow +dqadd371693 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqadd371694 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded + +rounding: ceiling +-- exact zeros from zeros +dqadd371700 fma 1 0 0E-19 -> 0E-19 +dqadd371701 fma 1 -0 0E-19 -> 0E-19 +dqadd371702 fma 1 0 -0E-19 -> 0E-19 +dqadd371703 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371711 fma 1 -11 11 -> 0 +dqadd371712 fma 1 11 -11 -> 0 +-- overflow +dqadd371713 fma 9E6144 10 1 -> Infinity Overflow Inexact Rounded +dqadd371714 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +dqadd371720 fma 1 0 0E-19 -> 0E-19 +dqadd371721 fma 1 -0 0E-19 -> -0E-19 -- * +dqadd371722 fma 1 0 -0E-19 -> -0E-19 -- * +dqadd371723 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371731 fma 1 -11 11 -> -0 -- * +dqadd371732 fma 1 11 -11 -> -0 -- * +-- overflow +dqadd371733 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqadd371734 fma -9E6144 10 1 -> -Infinity Overflow Inexact Rounded + +rounding: 05up +-- exact zeros from zeros +dqadd371740 fma 1 0 0E-19 -> 0E-19 +dqadd371741 fma 1 -0 0E-19 -> 0E-19 +dqadd371742 fma 1 0 -0E-19 -> 0E-19 +dqadd371743 fma 1 -0 -0E-19 -> -0E-19 +-- exact zeros from non-zeros +dqadd371751 fma 1 -11 11 -> 0 +dqadd371752 fma 1 11 -11 -> 0 +-- overflow +dqadd371753 fma 9E6144 10 1 -> 9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded +dqadd371754 fma -9E6144 10 1 -> -9.999999999999999999999999999999999E+6144 Overflow Inexact Rounded + +-- Examples from SQL proposal (Krishna Kulkarni) +dqadd371761 fma 1 130E-2 120E-2 -> 2.50 +dqadd371762 fma 1 130E-2 12E-1 -> 2.50 +dqadd371763 fma 1 130E-2 1E0 -> 2.30 +dqadd371764 fma 1 1E2 1E4 -> 1.01E+4 +dqadd371765 fma 1 130E-2 -120E-2 -> 0.10 +dqadd371766 fma 1 130E-2 -12E-1 -> 0.10 +dqadd371767 fma 1 130E-2 -1E0 -> 0.30 +dqadd371768 fma 1 1E2 -1E4 -> -9.9E+3 + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +dqadd375001 fma 1 1239876543211234567894567890123456 1 -> 1239876543211234567894567890123457 +dqadd375002 fma 1 1239876543211234567894567890123456 0.6 -> 1239876543211234567894567890123457 Inexact Rounded +dqadd375003 fma 1 1239876543211234567894567890123456 0.06 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375004 fma 1 1239876543211234567894567890123456 6E-3 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375005 fma 1 1239876543211234567894567890123456 6E-4 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375006 fma 1 1239876543211234567894567890123456 6E-5 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375007 fma 1 1239876543211234567894567890123456 6E-6 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375008 fma 1 1239876543211234567894567890123456 6E-7 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375009 fma 1 1239876543211234567894567890123456 6E-8 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375010 fma 1 1239876543211234567894567890123456 6E-9 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375011 fma 1 1239876543211234567894567890123456 6E-10 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375012 fma 1 1239876543211234567894567890123456 6E-11 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375013 fma 1 1239876543211234567894567890123456 6E-12 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375014 fma 1 1239876543211234567894567890123456 6E-13 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375015 fma 1 1239876543211234567894567890123456 6E-14 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375016 fma 1 1239876543211234567894567890123456 6E-15 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375017 fma 1 1239876543211234567894567890123456 6E-16 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375018 fma 1 1239876543211234567894567890123456 6E-17 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375019 fma 1 1239876543211234567894567890123456 6E-18 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375020 fma 1 1239876543211234567894567890123456 6E-19 -> 1239876543211234567894567890123456 Inexact Rounded +dqadd375021 fma 1 1239876543211234567894567890123456 6E-20 -> 1239876543211234567894567890123456 Inexact Rounded + +-- widening second argument at gap +dqadd375030 fma 1 12398765432112345678945678 1 -> 12398765432112345678945679 +dqadd375031 fma 1 12398765432112345678945678 0.1 -> 12398765432112345678945678.1 +dqadd375032 fma 1 12398765432112345678945678 0.12 -> 12398765432112345678945678.12 +dqadd375033 fma 1 12398765432112345678945678 0.123 -> 12398765432112345678945678.123 +dqadd375034 fma 1 12398765432112345678945678 0.1234 -> 12398765432112345678945678.1234 +dqadd375035 fma 1 12398765432112345678945678 0.12345 -> 12398765432112345678945678.12345 +dqadd375036 fma 1 12398765432112345678945678 0.123456 -> 12398765432112345678945678.123456 +dqadd375037 fma 1 12398765432112345678945678 0.1234567 -> 12398765432112345678945678.1234567 +dqadd375038 fma 1 12398765432112345678945678 0.12345678 -> 12398765432112345678945678.12345678 +dqadd375039 fma 1 12398765432112345678945678 0.123456789 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375040 fma 1 12398765432112345678945678 0.123456785 -> 12398765432112345678945678.12345678 Inexact Rounded +dqadd375041 fma 1 12398765432112345678945678 0.1234567850 -> 12398765432112345678945678.12345678 Inexact Rounded +dqadd375042 fma 1 12398765432112345678945678 0.1234567851 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375043 fma 1 12398765432112345678945678 0.12345678501 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375044 fma 1 12398765432112345678945678 0.123456785001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375045 fma 1 12398765432112345678945678 0.1234567850001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375046 fma 1 12398765432112345678945678 0.12345678500001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375047 fma 1 12398765432112345678945678 0.123456785000001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375048 fma 1 12398765432112345678945678 0.1234567850000001 -> 12398765432112345678945678.12345679 Inexact Rounded +dqadd375049 fma 1 12398765432112345678945678 0.1234567850000000 -> 12398765432112345678945678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +dqadd375050 fma 1 12398765432112345678945678 0.0234567750000000 -> 12398765432112345678945678.02345678 Inexact Rounded +dqadd375051 fma 1 12398765432112345678945678 0.0034567750000000 -> 12398765432112345678945678.00345678 Inexact Rounded +dqadd375052 fma 1 12398765432112345678945678 0.0004567750000000 -> 12398765432112345678945678.00045678 Inexact Rounded +dqadd375053 fma 1 12398765432112345678945678 0.0000567750000000 -> 12398765432112345678945678.00005678 Inexact Rounded +dqadd375054 fma 1 12398765432112345678945678 0.0000067750000000 -> 12398765432112345678945678.00000678 Inexact Rounded +dqadd375055 fma 1 12398765432112345678945678 0.0000007750000000 -> 12398765432112345678945678.00000078 Inexact Rounded +dqadd375056 fma 1 12398765432112345678945678 0.0000000750000000 -> 12398765432112345678945678.00000008 Inexact Rounded +dqadd375057 fma 1 12398765432112345678945678 0.0000000050000000 -> 12398765432112345678945678.00000000 Inexact Rounded +dqadd375060 fma 1 12398765432112345678945678 0.0234567750000001 -> 12398765432112345678945678.02345678 Inexact Rounded +dqadd375061 fma 1 12398765432112345678945678 0.0034567750000001 -> 12398765432112345678945678.00345678 Inexact Rounded +dqadd375062 fma 1 12398765432112345678945678 0.0004567750000001 -> 12398765432112345678945678.00045678 Inexact Rounded +dqadd375063 fma 1 12398765432112345678945678 0.0000567750000001 -> 12398765432112345678945678.00005678 Inexact Rounded +dqadd375064 fma 1 12398765432112345678945678 0.0000067750000001 -> 12398765432112345678945678.00000678 Inexact Rounded +dqadd375065 fma 1 12398765432112345678945678 0.0000007750000001 -> 12398765432112345678945678.00000078 Inexact Rounded +dqadd375066 fma 1 12398765432112345678945678 0.0000000750000001 -> 12398765432112345678945678.00000008 Inexact Rounded +dqadd375067 fma 1 12398765432112345678945678 0.0000000050000001 -> 12398765432112345678945678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +dqadd375070 fma 1 12398765432112345678945678 1E-8 -> 12398765432112345678945678.00000001 +dqadd375071 fma 1 12398765432112345678945678 1E-9 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375072 fma 1 12398765432112345678945678 1E-10 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375073 fma 1 12398765432112345678945678 1E-11 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375074 fma 1 12398765432112345678945678 1E-12 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375075 fma 1 12398765432112345678945678 1E-13 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375076 fma 1 12398765432112345678945678 1E-14 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375077 fma 1 12398765432112345678945678 1E-15 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375078 fma 1 12398765432112345678945678 1E-16 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375079 fma 1 12398765432112345678945678 1E-17 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375080 fma 1 12398765432112345678945678 1E-18 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375081 fma 1 12398765432112345678945678 1E-19 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375082 fma 1 12398765432112345678945678 1E-20 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375083 fma 1 12398765432112345678945678 1E-25 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375084 fma 1 12398765432112345678945678 1E-30 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375085 fma 1 12398765432112345678945678 1E-31 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375086 fma 1 12398765432112345678945678 1E-32 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375087 fma 1 12398765432112345678945678 1E-33 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375088 fma 1 12398765432112345678945678 1E-34 -> 12398765432112345678945678.00000001 Inexact Rounded +dqadd375089 fma 1 12398765432112345678945678 1E-35 -> 12398765432112345678945678.00000001 Inexact Rounded + +-- Destructive subtract (from remainder tests) + +-- +++ some of these will be off-by-one remainder vs remainderNear + +dqfma4000 fma -1234567890123456789012345678901233 1.000000000000000000000000000000001 1234567890123456789012345678901234 -> -0.234567890123456789012345678901233 +dqfma4001 fma -1234567890123456789012345678901222 1.00000000000000000000000000000001 1234567890123456789012345678901234 -> -0.34567890123456789012345678901222 +dqfma4002 fma -1234567890123456789012345678901111 1.0000000000000000000000000000001 1234567890123456789012345678901234 -> -0.4567890123456789012345678901111 +dqfma4003 fma -308641972530864197253086419725314 4.000000000000000000000000000000001 1234567890123456789012345678901255 -> -1.308641972530864197253086419725314 +dqfma4004 fma -308641972530864197253086419725308 4.000000000000000000000000000000001 1234567890123456789012345678901234 -> 1.691358027469135802746913580274692 +dqfma4005 fma -246913578024691357802469135780252 4.9999999999999999999999999999999 1234567890123456789012345678901234 -> -1.3086421975308642197530864219748 +dqfma4006 fma -246913578024691357802469135780247 4.99999999999999999999999999999999 1234567890123456789012345678901234 -> 1.46913578024691357802469135780247 +dqfma4007 fma -246913578024691357802469135780247 4.999999999999999999999999999999999 1234567890123456789012345678901234 -> -0.753086421975308642197530864219753 +dqfma4008 fma -246913578024691357802469135780247 5.000000000000000000000000000000001 1234567890123456789012345678901234 -> -1.246913578024691357802469135780247 +dqfma4009 fma -246913578024691357802469135780246 5.00000000000000000000000000000001 1234567890123456789012345678901234 -> 1.53086421975308642197530864219754 +dqfma4010 fma -246913578024691357802469135780242 5.0000000000000000000000000000001 1234567890123456789012345678901234 -> -0.6913578024691357802469135780242 +dqfma4011 fma -1234567890123456789012345678901232 1.000000000000000000000000000000001 1234567890123456789012345678901234 -> 0.765432109876543210987654321098768 +dqfma4012 fma -1234567890123456789012345678901221 1.00000000000000000000000000000001 1234567890123456789012345678901234 -> 0.65432109876543210987654321098779 +dqfma4013 fma -1234567890123456789012345678901110 1.0000000000000000000000000000001 1234567890123456789012345678901234 -> 0.5432109876543210987654321098890 +dqfma4014 fma -308641972530864197253086419725313 4.000000000000000000000000000000001 1234567890123456789012345678901255 -> 2.691358027469135802746913580274687 +dqfma4015 fma -308641972530864197253086419725308 4.000000000000000000000000000000001 1234567890123456789012345678901234 -> 1.691358027469135802746913580274692 +dqfma4016 fma -246913578024691357802469135780251 4.9999999999999999999999999999999 1234567890123456789012345678901234 -> 3.6913578024691357802469135780251 +dqfma4017 fma -246913578024691357802469135780247 4.99999999999999999999999999999999 1234567890123456789012345678901234 -> 1.46913578024691357802469135780247 +dqfma4018 fma -246913578024691357802469135780246 4.999999999999999999999999999999999 1234567890123456789012345678901234 -> 4.246913578024691357802469135780246 +dqfma4019 fma -246913578024691357802469135780241 5.0000000000000000000000000000001 1234567890123456789012345678901234 -> 4.3086421975308642197530864219759 + +-- Null tests +dqadd39990 fma 1 10 # -> NaN Invalid_operation +dqadd39991 fma 1 # 10 -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/dqInvert.decTest b/Lib/test/decimaltestdata/dqInvert.decTest index 522cfc80f02..3a1e29e21da 100644 --- a/Lib/test/decimaltestdata/dqInvert.decTest +++ b/Lib/test/decimaltestdata/dqInvert.decTest @@ -1,245 +1,245 @@ ------------------------------------------------------------------------- --- dqInvert.decTest -- digitwise logical INVERT for decQuads -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check (truth table) -dqinv001 invert 0 -> 1111111111111111111111111111111111 -dqinv002 invert 1 -> 1111111111111111111111111111111110 -dqinv003 invert 10 -> 1111111111111111111111111111111101 -dqinv004 invert 111111111 -> 1111111111111111111111111000000000 -dqinv005 invert 000000000 -> 1111111111111111111111111111111111 --- and at msd and msd-1 -dqinv007 invert 0000000000000000000000000000000000 -> 1111111111111111111111111111111111 -dqinv008 invert 1000000000000000000000000000000000 -> 111111111111111111111111111111111 -dqinv009 invert 0000000000000000000000000000000000 -> 1111111111111111111111111111111111 -dqinv010 invert 0100000000000000000000000000000000 -> 1011111111111111111111111111111111 -dqinv011 invert 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 -dqinv012 invert 1111111111111111111111111111111111 -> 0 -dqinv013 invert 0011111111111111111111111111111111 -> 1100000000000000000000000000000000 -dqinv014 invert 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 - --- Various lengths -dqinv600 invert 0111111111111111111011111111111111 -> 1000000000000000000100000000000000 -dqinv601 invert 0011111111111111110101111111111111 -> 1100000000000000001010000000000000 -dqinv602 invert 0101111111111111101110111111111111 -> 1010000000000000010001000000000000 -dqinv603 invert 0110111111111111011111011111111111 -> 1001000000000000100000100000000000 -dqinv604 invert 0111011111111110111111101111111111 -> 1000100000000001000000010000000000 -dqinv605 invert 0111101111111101111111110111111111 -> 1000010000000010000000001000000000 -dqinv606 invert 0111110111111011111111111011111111 -> 1000001000000100000000000100000000 -dqinv607 invert 0111111011110111111111111101111111 -> 1000000100001000000000000010000000 -dqinv608 invert 0111111101101111111111111110111111 -> 1000000010010000000000000001000000 -dqinv609 invert 0111111110011111111111111111011111 -> 1000000001100000000000000000100000 -dqinv610 invert 0111111110011111111111111111101111 -> 1000000001100000000000000000010000 -dqinv611 invert 0111111101101111111111111111110111 -> 1000000010010000000000000000001000 -dqinv612 invert 0111111011110111111111111111111011 -> 1000000100001000000000000000000100 -dqinv613 invert 0111110111111011111111111111111101 -> 1000001000000100000000000000000010 -dqinv614 invert 0111101111111101111111111111111110 -> 1000010000000010000000000000000001 -dqinv615 invert 0111011111111110111111111111111111 -> 1000100000000001000000000000000000 -dqinv616 invert 0110111111111111011111111111111110 -> 1001000000000000100000000000000001 -dqinv617 invert 0101111111111111101111111111111101 -> 1010000000000000010000000000000010 -dqinv618 invert 0011111111111111110111111111111011 -> 1100000000000000001000000000000100 -dqinv619 invert 0101111111111111111011111111110111 -> 1010000000000000000100000000001000 -dqinv620 invert 0110111111111111111101111111101111 -> 1001000000000000000010000000010000 -dqinv621 invert 0111011111111111111110111111011111 -> 1000100000000000000001000000100000 -dqinv622 invert 0111101111111111111111011110111111 -> 1000010000000000000000100001000000 -dqinv623 invert 0111110111111111111111101101111111 -> 1000001000000000000000010010000000 -dqinv624 invert 0111111011111111111111110011111111 -> 1000000100000000000000001100000000 -dqinv625 invert 0111111101111111111111110011111111 -> 1000000010000000000000001100000000 -dqinv626 invert 0111111110111111111111101101111111 -> 1000000001000000000000010010000000 -dqinv627 invert 0111111111011111111111011110111111 -> 1000000000100000000000100001000000 -dqinv628 invert 0111111111101111111110111111011111 -> 1000000000010000000001000000100000 -dqinv629 invert 0111111111110111111101111111101111 -> 1000000000001000000010000000010000 -dqinv630 invert 0111111111111011111011111111110111 -> 1000000000000100000100000000001000 -dqinv631 invert 0111111111111101110111111111111011 -> 1000000000000010001000000000000100 -dqinv632 invert 0111111111111110101111111111111101 -> 1000000000000001010000000000000010 -dqinv633 invert 0111111111111111011111111111111110 -> 1000000000000000100000000000000001 - -dqinv021 invert 111111111 -> 1111111111111111111111111000000000 -dqinv022 invert 111111111111 -> 1111111111111111111111000000000000 -dqinv023 invert 11111111 -> 1111111111111111111111111100000000 -dqinv025 invert 1111111 -> 1111111111111111111111111110000000 -dqinv026 invert 111111 -> 1111111111111111111111111111000000 -dqinv027 invert 11111 -> 1111111111111111111111111111100000 -dqinv028 invert 1111 -> 1111111111111111111111111111110000 -dqinv029 invert 111 -> 1111111111111111111111111111111000 -dqinv031 invert 11 -> 1111111111111111111111111111111100 -dqinv032 invert 1 -> 1111111111111111111111111111111110 -dqinv033 invert 111111111111 -> 1111111111111111111111000000000000 -dqinv034 invert 11111111111 -> 1111111111111111111111100000000000 -dqinv035 invert 1111111111 -> 1111111111111111111111110000000000 -dqinv036 invert 111111111 -> 1111111111111111111111111000000000 - -dqinv040 invert 011111111 -> 1111111111111111111111111100000000 -dqinv041 invert 101111111 -> 1111111111111111111111111010000000 -dqinv042 invert 110111111 -> 1111111111111111111111111001000000 -dqinv043 invert 111011111 -> 1111111111111111111111111000100000 -dqinv044 invert 111101111 -> 1111111111111111111111111000010000 -dqinv045 invert 111110111 -> 1111111111111111111111111000001000 -dqinv046 invert 111111011 -> 1111111111111111111111111000000100 -dqinv047 invert 111111101 -> 1111111111111111111111111000000010 -dqinv048 invert 111111110 -> 1111111111111111111111111000000001 -dqinv049 invert 011111011 -> 1111111111111111111111111100000100 -dqinv050 invert 101111101 -> 1111111111111111111111111010000010 -dqinv051 invert 110111110 -> 1111111111111111111111111001000001 -dqinv052 invert 111011101 -> 1111111111111111111111111000100010 -dqinv053 invert 111101011 -> 1111111111111111111111111000010100 -dqinv054 invert 111110111 -> 1111111111111111111111111000001000 -dqinv055 invert 111101011 -> 1111111111111111111111111000010100 -dqinv056 invert 111011101 -> 1111111111111111111111111000100010 -dqinv057 invert 110111110 -> 1111111111111111111111111001000001 -dqinv058 invert 101111101 -> 1111111111111111111111111010000010 -dqinv059 invert 011111011 -> 1111111111111111111111111100000100 - -dqinv080 invert 1000000011111111 -> 1111111111111111110111111100000000 -dqinv081 invert 0100000101111111 -> 1111111111111111111011111010000000 -dqinv082 invert 0010000110111111 -> 1111111111111111111101111001000000 -dqinv083 invert 0001000111011111 -> 1111111111111111111110111000100000 -dqinv084 invert 0000100111101111 -> 1111111111111111111111011000010000 -dqinv085 invert 0000010111110111 -> 1111111111111111111111101000001000 -dqinv086 invert 0000001111111011 -> 1111111111111111111111110000000100 -dqinv087 invert 0000010111111101 -> 1111111111111111111111101000000010 -dqinv088 invert 0000100111111110 -> 1111111111111111111111011000000001 -dqinv089 invert 0001000011111011 -> 1111111111111111111110111100000100 -dqinv090 invert 0010000101111101 -> 1111111111111111111101111010000010 -dqinv091 invert 0100000110111110 -> 1111111111111111111011111001000001 -dqinv092 invert 1000000111011101 -> 1111111111111111110111111000100010 -dqinv093 invert 0100000111101011 -> 1111111111111111111011111000010100 -dqinv094 invert 0010000111110111 -> 1111111111111111111101111000001000 -dqinv095 invert 0001000111101011 -> 1111111111111111111110111000010100 -dqinv096 invert 0000100111011101 -> 1111111111111111111111011000100010 -dqinv097 invert 0000010110111110 -> 1111111111111111111111101001000001 -dqinv098 invert 0000001101111101 -> 1111111111111111111111110010000010 -dqinv099 invert 0000010011111011 -> 1111111111111111111111101100000100 - --- and more thorough MSD/LSD tests [8 and 9 mght be encoded differently...] -dqinv151 invert 1111111111111111111111111111111110 -> 1 -dqinv152 invert 1111111111111111110000000000000000 -> 1111111111111111 -dqinv153 invert 1000000000000000001111111111111111 -> 111111111111111110000000000000000 -dqinv154 invert 1111111111111111111000000000000000 -> 111111111111111 -dqinv155 invert 0100000000000000000111111111111111 -> 1011111111111111111000000000000000 -dqinv156 invert 1011111111111111110100000000000000 -> 100000000000000001011111111111111 -dqinv157 invert 1101111111111111110111111111111111 -> 10000000000000001000000000000000 -dqinv158 invert 1110111111111111110011111111111111 -> 1000000000000001100000000000000 - --- non-0/1 should not be accepted, nor should signs -dqinv220 invert 111111112 -> NaN Invalid_operation -dqinv221 invert 333333333 -> NaN Invalid_operation -dqinv222 invert 555555555 -> NaN Invalid_operation -dqinv223 invert 777777777 -> NaN Invalid_operation -dqinv224 invert 999999999 -> NaN Invalid_operation -dqinv225 invert 222222222 -> NaN Invalid_operation -dqinv226 invert 444444444 -> NaN Invalid_operation -dqinv227 invert 666666666 -> NaN Invalid_operation -dqinv228 invert 888888888 -> NaN Invalid_operation -dqinv229 invert 999999999 -> NaN Invalid_operation -dqinv230 invert 999999999 -> NaN Invalid_operation -dqinv231 invert 999999999 -> NaN Invalid_operation -dqinv232 invert 999999999 -> NaN Invalid_operation --- a few randoms -dqinv240 invert 567468689 -> NaN Invalid_operation -dqinv241 invert 567367689 -> NaN Invalid_operation -dqinv242 invert -631917772 -> NaN Invalid_operation -dqinv243 invert -756253257 -> NaN Invalid_operation -dqinv244 invert 835590149 -> NaN Invalid_operation --- test MSD -dqinv250 invert 2000000111000111000111000000000000 -> NaN Invalid_operation -dqinv251 invert 3000000111000111000111000000000000 -> NaN Invalid_operation -dqinv252 invert 4000000111000111000111000000000000 -> NaN Invalid_operation -dqinv253 invert 5000000111000111000111000000000000 -> NaN Invalid_operation -dqinv254 invert 6000000111000111000111000000000000 -> NaN Invalid_operation -dqinv255 invert 7000000111000111000111000000000000 -> NaN Invalid_operation -dqinv256 invert 8000000111000111000111000000000000 -> NaN Invalid_operation -dqinv257 invert 9000000111000111000111000000000000 -> NaN Invalid_operation --- test MSD-1 -dqinv270 invert 0200000111000111000111001000000000 -> NaN Invalid_operation -dqinv271 invert 0300000111000111000111000100000000 -> NaN Invalid_operation -dqinv272 invert 0400000111000111000111000010000000 -> NaN Invalid_operation -dqinv273 invert 0500000111000111000111000001000000 -> NaN Invalid_operation -dqinv274 invert 1600000111000111000111000000100000 -> NaN Invalid_operation -dqinv275 invert 1700000111000111000111000000010000 -> NaN Invalid_operation -dqinv276 invert 1800000111000111000111000000001000 -> NaN Invalid_operation -dqinv277 invert 1900000111000111000111000000000100 -> NaN Invalid_operation --- test LSD -dqinv280 invert 0010000111000111000111000000000002 -> NaN Invalid_operation -dqinv281 invert 0001000111000111000111000000000003 -> NaN Invalid_operation -dqinv282 invert 0000000111000111000111100000000004 -> NaN Invalid_operation -dqinv283 invert 0000000111000111000111010000000005 -> NaN Invalid_operation -dqinv284 invert 1000000111000111000111001000000006 -> NaN Invalid_operation -dqinv285 invert 1000000111000111000111000100000007 -> NaN Invalid_operation -dqinv286 invert 1000000111000111000111000010000008 -> NaN Invalid_operation -dqinv287 invert 1000000111000111000111000001000009 -> NaN Invalid_operation --- test Middie -dqinv288 invert 0010000111000111000111000020000000 -> NaN Invalid_operation -dqinv289 invert 0001000111000111000111000030000001 -> NaN Invalid_operation -dqinv290 invert 0000000111000111000111100040000010 -> NaN Invalid_operation -dqinv291 invert 0000000111000111000111010050000100 -> NaN Invalid_operation -dqinv292 invert 1000000111000111000111001060001000 -> NaN Invalid_operation -dqinv293 invert 1000000111000111000111000170010000 -> NaN Invalid_operation -dqinv294 invert 1000000111000111000111000080100000 -> NaN Invalid_operation -dqinv295 invert 1000000111000111000111000091000000 -> NaN Invalid_operation --- signs -dqinv296 invert -1000000111000111000111000001000000 -> NaN Invalid_operation -dqinv299 invert 1000000111000111000111000001000000 -> 111111000111000111000111110111111 - --- Nmax, Nmin, Ntiny-like -dqinv341 invert 9.99999999E+2998 -> NaN Invalid_operation -dqinv342 invert 1E-2998 -> NaN Invalid_operation -dqinv343 invert 1.00000000E-2998 -> NaN Invalid_operation -dqinv344 invert 1E-2078 -> NaN Invalid_operation -dqinv345 invert -1E-2078 -> NaN Invalid_operation -dqinv346 invert -1.00000000E-2998 -> NaN Invalid_operation -dqinv347 invert -1E-2998 -> NaN Invalid_operation -dqinv348 invert -9.99999999E+2998 -> NaN Invalid_operation - --- A few other non-integers -dqinv361 invert 1.0 -> NaN Invalid_operation -dqinv362 invert 1E+1 -> NaN Invalid_operation -dqinv363 invert 0.0 -> NaN Invalid_operation -dqinv364 invert 0E+1 -> NaN Invalid_operation -dqinv365 invert 9.9 -> NaN Invalid_operation -dqinv366 invert 9E+1 -> NaN Invalid_operation - --- All Specials are in error -dqinv788 invert -Inf -> NaN Invalid_operation -dqinv794 invert Inf -> NaN Invalid_operation -dqinv821 invert NaN -> NaN Invalid_operation -dqinv841 invert sNaN -> NaN Invalid_operation --- propagating NaNs -dqinv861 invert NaN1 -> NaN Invalid_operation -dqinv862 invert +NaN2 -> NaN Invalid_operation -dqinv863 invert NaN3 -> NaN Invalid_operation -dqinv864 invert NaN4 -> NaN Invalid_operation -dqinv865 invert NaN5 -> NaN Invalid_operation -dqinv871 invert sNaN11 -> NaN Invalid_operation -dqinv872 invert sNaN12 -> NaN Invalid_operation -dqinv873 invert sNaN13 -> NaN Invalid_operation -dqinv874 invert sNaN14 -> NaN Invalid_operation -dqinv875 invert sNaN15 -> NaN Invalid_operation -dqinv876 invert NaN16 -> NaN Invalid_operation -dqinv881 invert +NaN25 -> NaN Invalid_operation -dqinv882 invert -NaN26 -> NaN Invalid_operation -dqinv883 invert -sNaN27 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqInvert.decTest -- digitwise logical INVERT for decQuads -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check (truth table) +dqinv001 invert 0 -> 1111111111111111111111111111111111 +dqinv002 invert 1 -> 1111111111111111111111111111111110 +dqinv003 invert 10 -> 1111111111111111111111111111111101 +dqinv004 invert 111111111 -> 1111111111111111111111111000000000 +dqinv005 invert 000000000 -> 1111111111111111111111111111111111 +-- and at msd and msd-1 +dqinv007 invert 0000000000000000000000000000000000 -> 1111111111111111111111111111111111 +dqinv008 invert 1000000000000000000000000000000000 -> 111111111111111111111111111111111 +dqinv009 invert 0000000000000000000000000000000000 -> 1111111111111111111111111111111111 +dqinv010 invert 0100000000000000000000000000000000 -> 1011111111111111111111111111111111 +dqinv011 invert 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 +dqinv012 invert 1111111111111111111111111111111111 -> 0 +dqinv013 invert 0011111111111111111111111111111111 -> 1100000000000000000000000000000000 +dqinv014 invert 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 + +-- Various lengths +dqinv600 invert 0111111111111111111011111111111111 -> 1000000000000000000100000000000000 +dqinv601 invert 0011111111111111110101111111111111 -> 1100000000000000001010000000000000 +dqinv602 invert 0101111111111111101110111111111111 -> 1010000000000000010001000000000000 +dqinv603 invert 0110111111111111011111011111111111 -> 1001000000000000100000100000000000 +dqinv604 invert 0111011111111110111111101111111111 -> 1000100000000001000000010000000000 +dqinv605 invert 0111101111111101111111110111111111 -> 1000010000000010000000001000000000 +dqinv606 invert 0111110111111011111111111011111111 -> 1000001000000100000000000100000000 +dqinv607 invert 0111111011110111111111111101111111 -> 1000000100001000000000000010000000 +dqinv608 invert 0111111101101111111111111110111111 -> 1000000010010000000000000001000000 +dqinv609 invert 0111111110011111111111111111011111 -> 1000000001100000000000000000100000 +dqinv610 invert 0111111110011111111111111111101111 -> 1000000001100000000000000000010000 +dqinv611 invert 0111111101101111111111111111110111 -> 1000000010010000000000000000001000 +dqinv612 invert 0111111011110111111111111111111011 -> 1000000100001000000000000000000100 +dqinv613 invert 0111110111111011111111111111111101 -> 1000001000000100000000000000000010 +dqinv614 invert 0111101111111101111111111111111110 -> 1000010000000010000000000000000001 +dqinv615 invert 0111011111111110111111111111111111 -> 1000100000000001000000000000000000 +dqinv616 invert 0110111111111111011111111111111110 -> 1001000000000000100000000000000001 +dqinv617 invert 0101111111111111101111111111111101 -> 1010000000000000010000000000000010 +dqinv618 invert 0011111111111111110111111111111011 -> 1100000000000000001000000000000100 +dqinv619 invert 0101111111111111111011111111110111 -> 1010000000000000000100000000001000 +dqinv620 invert 0110111111111111111101111111101111 -> 1001000000000000000010000000010000 +dqinv621 invert 0111011111111111111110111111011111 -> 1000100000000000000001000000100000 +dqinv622 invert 0111101111111111111111011110111111 -> 1000010000000000000000100001000000 +dqinv623 invert 0111110111111111111111101101111111 -> 1000001000000000000000010010000000 +dqinv624 invert 0111111011111111111111110011111111 -> 1000000100000000000000001100000000 +dqinv625 invert 0111111101111111111111110011111111 -> 1000000010000000000000001100000000 +dqinv626 invert 0111111110111111111111101101111111 -> 1000000001000000000000010010000000 +dqinv627 invert 0111111111011111111111011110111111 -> 1000000000100000000000100001000000 +dqinv628 invert 0111111111101111111110111111011111 -> 1000000000010000000001000000100000 +dqinv629 invert 0111111111110111111101111111101111 -> 1000000000001000000010000000010000 +dqinv630 invert 0111111111111011111011111111110111 -> 1000000000000100000100000000001000 +dqinv631 invert 0111111111111101110111111111111011 -> 1000000000000010001000000000000100 +dqinv632 invert 0111111111111110101111111111111101 -> 1000000000000001010000000000000010 +dqinv633 invert 0111111111111111011111111111111110 -> 1000000000000000100000000000000001 + +dqinv021 invert 111111111 -> 1111111111111111111111111000000000 +dqinv022 invert 111111111111 -> 1111111111111111111111000000000000 +dqinv023 invert 11111111 -> 1111111111111111111111111100000000 +dqinv025 invert 1111111 -> 1111111111111111111111111110000000 +dqinv026 invert 111111 -> 1111111111111111111111111111000000 +dqinv027 invert 11111 -> 1111111111111111111111111111100000 +dqinv028 invert 1111 -> 1111111111111111111111111111110000 +dqinv029 invert 111 -> 1111111111111111111111111111111000 +dqinv031 invert 11 -> 1111111111111111111111111111111100 +dqinv032 invert 1 -> 1111111111111111111111111111111110 +dqinv033 invert 111111111111 -> 1111111111111111111111000000000000 +dqinv034 invert 11111111111 -> 1111111111111111111111100000000000 +dqinv035 invert 1111111111 -> 1111111111111111111111110000000000 +dqinv036 invert 111111111 -> 1111111111111111111111111000000000 + +dqinv040 invert 011111111 -> 1111111111111111111111111100000000 +dqinv041 invert 101111111 -> 1111111111111111111111111010000000 +dqinv042 invert 110111111 -> 1111111111111111111111111001000000 +dqinv043 invert 111011111 -> 1111111111111111111111111000100000 +dqinv044 invert 111101111 -> 1111111111111111111111111000010000 +dqinv045 invert 111110111 -> 1111111111111111111111111000001000 +dqinv046 invert 111111011 -> 1111111111111111111111111000000100 +dqinv047 invert 111111101 -> 1111111111111111111111111000000010 +dqinv048 invert 111111110 -> 1111111111111111111111111000000001 +dqinv049 invert 011111011 -> 1111111111111111111111111100000100 +dqinv050 invert 101111101 -> 1111111111111111111111111010000010 +dqinv051 invert 110111110 -> 1111111111111111111111111001000001 +dqinv052 invert 111011101 -> 1111111111111111111111111000100010 +dqinv053 invert 111101011 -> 1111111111111111111111111000010100 +dqinv054 invert 111110111 -> 1111111111111111111111111000001000 +dqinv055 invert 111101011 -> 1111111111111111111111111000010100 +dqinv056 invert 111011101 -> 1111111111111111111111111000100010 +dqinv057 invert 110111110 -> 1111111111111111111111111001000001 +dqinv058 invert 101111101 -> 1111111111111111111111111010000010 +dqinv059 invert 011111011 -> 1111111111111111111111111100000100 + +dqinv080 invert 1000000011111111 -> 1111111111111111110111111100000000 +dqinv081 invert 0100000101111111 -> 1111111111111111111011111010000000 +dqinv082 invert 0010000110111111 -> 1111111111111111111101111001000000 +dqinv083 invert 0001000111011111 -> 1111111111111111111110111000100000 +dqinv084 invert 0000100111101111 -> 1111111111111111111111011000010000 +dqinv085 invert 0000010111110111 -> 1111111111111111111111101000001000 +dqinv086 invert 0000001111111011 -> 1111111111111111111111110000000100 +dqinv087 invert 0000010111111101 -> 1111111111111111111111101000000010 +dqinv088 invert 0000100111111110 -> 1111111111111111111111011000000001 +dqinv089 invert 0001000011111011 -> 1111111111111111111110111100000100 +dqinv090 invert 0010000101111101 -> 1111111111111111111101111010000010 +dqinv091 invert 0100000110111110 -> 1111111111111111111011111001000001 +dqinv092 invert 1000000111011101 -> 1111111111111111110111111000100010 +dqinv093 invert 0100000111101011 -> 1111111111111111111011111000010100 +dqinv094 invert 0010000111110111 -> 1111111111111111111101111000001000 +dqinv095 invert 0001000111101011 -> 1111111111111111111110111000010100 +dqinv096 invert 0000100111011101 -> 1111111111111111111111011000100010 +dqinv097 invert 0000010110111110 -> 1111111111111111111111101001000001 +dqinv098 invert 0000001101111101 -> 1111111111111111111111110010000010 +dqinv099 invert 0000010011111011 -> 1111111111111111111111101100000100 + +-- and more thorough MSD/LSD tests [8 and 9 mght be encoded differently...] +dqinv151 invert 1111111111111111111111111111111110 -> 1 +dqinv152 invert 1111111111111111110000000000000000 -> 1111111111111111 +dqinv153 invert 1000000000000000001111111111111111 -> 111111111111111110000000000000000 +dqinv154 invert 1111111111111111111000000000000000 -> 111111111111111 +dqinv155 invert 0100000000000000000111111111111111 -> 1011111111111111111000000000000000 +dqinv156 invert 1011111111111111110100000000000000 -> 100000000000000001011111111111111 +dqinv157 invert 1101111111111111110111111111111111 -> 10000000000000001000000000000000 +dqinv158 invert 1110111111111111110011111111111111 -> 1000000000000001100000000000000 + +-- non-0/1 should not be accepted, nor should signs +dqinv220 invert 111111112 -> NaN Invalid_operation +dqinv221 invert 333333333 -> NaN Invalid_operation +dqinv222 invert 555555555 -> NaN Invalid_operation +dqinv223 invert 777777777 -> NaN Invalid_operation +dqinv224 invert 999999999 -> NaN Invalid_operation +dqinv225 invert 222222222 -> NaN Invalid_operation +dqinv226 invert 444444444 -> NaN Invalid_operation +dqinv227 invert 666666666 -> NaN Invalid_operation +dqinv228 invert 888888888 -> NaN Invalid_operation +dqinv229 invert 999999999 -> NaN Invalid_operation +dqinv230 invert 999999999 -> NaN Invalid_operation +dqinv231 invert 999999999 -> NaN Invalid_operation +dqinv232 invert 999999999 -> NaN Invalid_operation +-- a few randoms +dqinv240 invert 567468689 -> NaN Invalid_operation +dqinv241 invert 567367689 -> NaN Invalid_operation +dqinv242 invert -631917772 -> NaN Invalid_operation +dqinv243 invert -756253257 -> NaN Invalid_operation +dqinv244 invert 835590149 -> NaN Invalid_operation +-- test MSD +dqinv250 invert 2000000111000111000111000000000000 -> NaN Invalid_operation +dqinv251 invert 3000000111000111000111000000000000 -> NaN Invalid_operation +dqinv252 invert 4000000111000111000111000000000000 -> NaN Invalid_operation +dqinv253 invert 5000000111000111000111000000000000 -> NaN Invalid_operation +dqinv254 invert 6000000111000111000111000000000000 -> NaN Invalid_operation +dqinv255 invert 7000000111000111000111000000000000 -> NaN Invalid_operation +dqinv256 invert 8000000111000111000111000000000000 -> NaN Invalid_operation +dqinv257 invert 9000000111000111000111000000000000 -> NaN Invalid_operation +-- test MSD-1 +dqinv270 invert 0200000111000111000111001000000000 -> NaN Invalid_operation +dqinv271 invert 0300000111000111000111000100000000 -> NaN Invalid_operation +dqinv272 invert 0400000111000111000111000010000000 -> NaN Invalid_operation +dqinv273 invert 0500000111000111000111000001000000 -> NaN Invalid_operation +dqinv274 invert 1600000111000111000111000000100000 -> NaN Invalid_operation +dqinv275 invert 1700000111000111000111000000010000 -> NaN Invalid_operation +dqinv276 invert 1800000111000111000111000000001000 -> NaN Invalid_operation +dqinv277 invert 1900000111000111000111000000000100 -> NaN Invalid_operation +-- test LSD +dqinv280 invert 0010000111000111000111000000000002 -> NaN Invalid_operation +dqinv281 invert 0001000111000111000111000000000003 -> NaN Invalid_operation +dqinv282 invert 0000000111000111000111100000000004 -> NaN Invalid_operation +dqinv283 invert 0000000111000111000111010000000005 -> NaN Invalid_operation +dqinv284 invert 1000000111000111000111001000000006 -> NaN Invalid_operation +dqinv285 invert 1000000111000111000111000100000007 -> NaN Invalid_operation +dqinv286 invert 1000000111000111000111000010000008 -> NaN Invalid_operation +dqinv287 invert 1000000111000111000111000001000009 -> NaN Invalid_operation +-- test Middie +dqinv288 invert 0010000111000111000111000020000000 -> NaN Invalid_operation +dqinv289 invert 0001000111000111000111000030000001 -> NaN Invalid_operation +dqinv290 invert 0000000111000111000111100040000010 -> NaN Invalid_operation +dqinv291 invert 0000000111000111000111010050000100 -> NaN Invalid_operation +dqinv292 invert 1000000111000111000111001060001000 -> NaN Invalid_operation +dqinv293 invert 1000000111000111000111000170010000 -> NaN Invalid_operation +dqinv294 invert 1000000111000111000111000080100000 -> NaN Invalid_operation +dqinv295 invert 1000000111000111000111000091000000 -> NaN Invalid_operation +-- signs +dqinv296 invert -1000000111000111000111000001000000 -> NaN Invalid_operation +dqinv299 invert 1000000111000111000111000001000000 -> 111111000111000111000111110111111 + +-- Nmax, Nmin, Ntiny-like +dqinv341 invert 9.99999999E+2998 -> NaN Invalid_operation +dqinv342 invert 1E-2998 -> NaN Invalid_operation +dqinv343 invert 1.00000000E-2998 -> NaN Invalid_operation +dqinv344 invert 1E-2078 -> NaN Invalid_operation +dqinv345 invert -1E-2078 -> NaN Invalid_operation +dqinv346 invert -1.00000000E-2998 -> NaN Invalid_operation +dqinv347 invert -1E-2998 -> NaN Invalid_operation +dqinv348 invert -9.99999999E+2998 -> NaN Invalid_operation + +-- A few other non-integers +dqinv361 invert 1.0 -> NaN Invalid_operation +dqinv362 invert 1E+1 -> NaN Invalid_operation +dqinv363 invert 0.0 -> NaN Invalid_operation +dqinv364 invert 0E+1 -> NaN Invalid_operation +dqinv365 invert 9.9 -> NaN Invalid_operation +dqinv366 invert 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +dqinv788 invert -Inf -> NaN Invalid_operation +dqinv794 invert Inf -> NaN Invalid_operation +dqinv821 invert NaN -> NaN Invalid_operation +dqinv841 invert sNaN -> NaN Invalid_operation +-- propagating NaNs +dqinv861 invert NaN1 -> NaN Invalid_operation +dqinv862 invert +NaN2 -> NaN Invalid_operation +dqinv863 invert NaN3 -> NaN Invalid_operation +dqinv864 invert NaN4 -> NaN Invalid_operation +dqinv865 invert NaN5 -> NaN Invalid_operation +dqinv871 invert sNaN11 -> NaN Invalid_operation +dqinv872 invert sNaN12 -> NaN Invalid_operation +dqinv873 invert sNaN13 -> NaN Invalid_operation +dqinv874 invert sNaN14 -> NaN Invalid_operation +dqinv875 invert sNaN15 -> NaN Invalid_operation +dqinv876 invert NaN16 -> NaN Invalid_operation +dqinv881 invert +NaN25 -> NaN Invalid_operation +dqinv882 invert -NaN26 -> NaN Invalid_operation +dqinv883 invert -sNaN27 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqLogB.decTest b/Lib/test/decimaltestdata/dqLogB.decTest index 449f3dcb8de..a18313dc012 100644 --- a/Lib/test/decimaltestdata/dqLogB.decTest +++ b/Lib/test/decimaltestdata/dqLogB.decTest @@ -1,160 +1,160 @@ ------------------------------------------------------------------------- --- dqLogB.decTest -- integral 754r adjusted exponent, for decQuads -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- basics -dqlogb000 logb 0 -> -Infinity Division_by_zero -dqlogb001 logb 1E-6176 -> -6176 -dqlogb002 logb 1E-6143 -> -6143 -dqlogb003 logb 0.001 -> -3 -dqlogb004 logb 0.03 -> -2 -dqlogb005 logb 1 -> 0 -dqlogb006 logb 2 -> 0 -dqlogb007 logb 2.5 -> 0 -dqlogb008 logb 2.50 -> 0 -dqlogb009 logb 2.500 -> 0 -dqlogb010 logb 10 -> 1 -dqlogb011 logb 70 -> 1 -dqlogb012 logb 100 -> 2 -dqlogb013 logb 250 -> 2 -dqlogb014 logb 9E+6144 -> 6144 -dqlogb015 logb +Infinity -> Infinity - --- negatives appear to be treated as positives -dqlogb021 logb -0 -> -Infinity Division_by_zero -dqlogb022 logb -1E-6176 -> -6176 -dqlogb023 logb -9E-6143 -> -6143 -dqlogb024 logb -0.001 -> -3 -dqlogb025 logb -1 -> 0 -dqlogb026 logb -2 -> 0 -dqlogb027 logb -10 -> 1 -dqlogb028 logb -70 -> 1 -dqlogb029 logb -100 -> 2 -dqlogb030 logb -9E+6144 -> 6144 -dqlogb031 logb -Infinity -> Infinity - --- zeros -dqlogb111 logb 0 -> -Infinity Division_by_zero -dqlogb112 logb -0 -> -Infinity Division_by_zero -dqlogb113 logb 0E+4 -> -Infinity Division_by_zero -dqlogb114 logb -0E+4 -> -Infinity Division_by_zero -dqlogb115 logb 0.0000 -> -Infinity Division_by_zero -dqlogb116 logb -0.0000 -> -Infinity Division_by_zero -dqlogb117 logb 0E-141 -> -Infinity Division_by_zero -dqlogb118 logb -0E-141 -> -Infinity Division_by_zero - --- full coefficients, alternating bits -dqlogb121 logb 268268268 -> 8 -dqlogb122 logb -268268268 -> 8 -dqlogb123 logb 134134134 -> 8 -dqlogb124 logb -134134134 -> 8 - --- Nmax, Nmin, Ntiny -dqlogb131 logb 9.999999999999999999999999999999999E+6144 -> 6144 -dqlogb132 logb 1E-6143 -> -6143 -dqlogb133 logb 1.000000000000000000000000000000000E-6143 -> -6143 -dqlogb134 logb 1E-6176 -> -6176 - -dqlogb135 logb -1E-6176 -> -6176 -dqlogb136 logb -1.000000000000000000000000000000000E-6143 -> -6143 -dqlogb137 logb -1E-6143 -> -6143 -dqlogb1614 logb -9.999999999999999999999999999999999E+6144 -> 6144 - --- ones -dqlogb0061 logb 1 -> 0 -dqlogb0062 logb 1.0 -> 0 -dqlogb0063 logb 1.000000000000000 -> 0 - --- notable cases -- exact powers of 10 -dqlogb1100 logb 1 -> 0 -dqlogb1101 logb 10 -> 1 -dqlogb1102 logb 100 -> 2 -dqlogb1103 logb 1000 -> 3 -dqlogb1104 logb 10000 -> 4 -dqlogb1105 logb 100000 -> 5 -dqlogb1106 logb 1000000 -> 6 -dqlogb1107 logb 10000000 -> 7 -dqlogb1108 logb 100000000 -> 8 -dqlogb1109 logb 1000000000 -> 9 -dqlogb1110 logb 10000000000 -> 10 -dqlogb1111 logb 100000000000 -> 11 -dqlogb1112 logb 1000000000000 -> 12 -dqlogb1113 logb 0.00000000001 -> -11 -dqlogb1114 logb 0.0000000001 -> -10 -dqlogb1115 logb 0.000000001 -> -9 -dqlogb1116 logb 0.00000001 -> -8 -dqlogb1117 logb 0.0000001 -> -7 -dqlogb1118 logb 0.000001 -> -6 -dqlogb1119 logb 0.00001 -> -5 -dqlogb1120 logb 0.0001 -> -4 -dqlogb1121 logb 0.001 -> -3 -dqlogb1122 logb 0.01 -> -2 -dqlogb1123 logb 0.1 -> -1 -dqlogb1124 logb 1E-99 -> -99 -dqlogb1125 logb 1E-100 -> -100 -dqlogb1127 logb 1E-299 -> -299 -dqlogb1126 logb 1E-6143 -> -6143 - --- suggestions from Ilan Nehama -dqlogb1400 logb 10E-3 -> -2 -dqlogb1401 logb 10E-2 -> -1 -dqlogb1402 logb 100E-2 -> 0 -dqlogb1403 logb 1000E-2 -> 1 -dqlogb1404 logb 10000E-2 -> 2 -dqlogb1405 logb 10E-1 -> 0 -dqlogb1406 logb 100E-1 -> 1 -dqlogb1407 logb 1000E-1 -> 2 -dqlogb1408 logb 10000E-1 -> 3 -dqlogb1409 logb 10E0 -> 1 -dqlogb1410 logb 100E0 -> 2 -dqlogb1411 logb 1000E0 -> 3 -dqlogb1412 logb 10000E0 -> 4 -dqlogb1413 logb 10E1 -> 2 -dqlogb1414 logb 100E1 -> 3 -dqlogb1415 logb 1000E1 -> 4 -dqlogb1416 logb 10000E1 -> 5 -dqlogb1417 logb 10E2 -> 3 -dqlogb1418 logb 100E2 -> 4 -dqlogb1419 logb 1000E2 -> 5 -dqlogb1420 logb 10000E2 -> 6 - --- special values -dqlogb820 logb Infinity -> Infinity -dqlogb821 logb 0 -> -Infinity Division_by_zero -dqlogb822 logb NaN -> NaN -dqlogb823 logb sNaN -> NaN Invalid_operation --- propagating NaNs -dqlogb824 logb sNaN123 -> NaN123 Invalid_operation -dqlogb825 logb -sNaN321 -> -NaN321 Invalid_operation -dqlogb826 logb NaN456 -> NaN456 -dqlogb827 logb -NaN654 -> -NaN654 -dqlogb828 logb NaN1 -> NaN1 - --- Null test -dqlogb900 logb # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- dqLogB.decTest -- integral 754r adjusted exponent, for decQuads -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- basics +dqlogb000 logb 0 -> -Infinity Division_by_zero +dqlogb001 logb 1E-6176 -> -6176 +dqlogb002 logb 1E-6143 -> -6143 +dqlogb003 logb 0.001 -> -3 +dqlogb004 logb 0.03 -> -2 +dqlogb005 logb 1 -> 0 +dqlogb006 logb 2 -> 0 +dqlogb007 logb 2.5 -> 0 +dqlogb008 logb 2.50 -> 0 +dqlogb009 logb 2.500 -> 0 +dqlogb010 logb 10 -> 1 +dqlogb011 logb 70 -> 1 +dqlogb012 logb 100 -> 2 +dqlogb013 logb 250 -> 2 +dqlogb014 logb 9E+6144 -> 6144 +dqlogb015 logb +Infinity -> Infinity + +-- negatives appear to be treated as positives +dqlogb021 logb -0 -> -Infinity Division_by_zero +dqlogb022 logb -1E-6176 -> -6176 +dqlogb023 logb -9E-6143 -> -6143 +dqlogb024 logb -0.001 -> -3 +dqlogb025 logb -1 -> 0 +dqlogb026 logb -2 -> 0 +dqlogb027 logb -10 -> 1 +dqlogb028 logb -70 -> 1 +dqlogb029 logb -100 -> 2 +dqlogb030 logb -9E+6144 -> 6144 +dqlogb031 logb -Infinity -> Infinity + +-- zeros +dqlogb111 logb 0 -> -Infinity Division_by_zero +dqlogb112 logb -0 -> -Infinity Division_by_zero +dqlogb113 logb 0E+4 -> -Infinity Division_by_zero +dqlogb114 logb -0E+4 -> -Infinity Division_by_zero +dqlogb115 logb 0.0000 -> -Infinity Division_by_zero +dqlogb116 logb -0.0000 -> -Infinity Division_by_zero +dqlogb117 logb 0E-141 -> -Infinity Division_by_zero +dqlogb118 logb -0E-141 -> -Infinity Division_by_zero + +-- full coefficients, alternating bits +dqlogb121 logb 268268268 -> 8 +dqlogb122 logb -268268268 -> 8 +dqlogb123 logb 134134134 -> 8 +dqlogb124 logb -134134134 -> 8 + +-- Nmax, Nmin, Ntiny +dqlogb131 logb 9.999999999999999999999999999999999E+6144 -> 6144 +dqlogb132 logb 1E-6143 -> -6143 +dqlogb133 logb 1.000000000000000000000000000000000E-6143 -> -6143 +dqlogb134 logb 1E-6176 -> -6176 + +dqlogb135 logb -1E-6176 -> -6176 +dqlogb136 logb -1.000000000000000000000000000000000E-6143 -> -6143 +dqlogb137 logb -1E-6143 -> -6143 +dqlogb1614 logb -9.999999999999999999999999999999999E+6144 -> 6144 + +-- ones +dqlogb0061 logb 1 -> 0 +dqlogb0062 logb 1.0 -> 0 +dqlogb0063 logb 1.000000000000000 -> 0 + +-- notable cases -- exact powers of 10 +dqlogb1100 logb 1 -> 0 +dqlogb1101 logb 10 -> 1 +dqlogb1102 logb 100 -> 2 +dqlogb1103 logb 1000 -> 3 +dqlogb1104 logb 10000 -> 4 +dqlogb1105 logb 100000 -> 5 +dqlogb1106 logb 1000000 -> 6 +dqlogb1107 logb 10000000 -> 7 +dqlogb1108 logb 100000000 -> 8 +dqlogb1109 logb 1000000000 -> 9 +dqlogb1110 logb 10000000000 -> 10 +dqlogb1111 logb 100000000000 -> 11 +dqlogb1112 logb 1000000000000 -> 12 +dqlogb1113 logb 0.00000000001 -> -11 +dqlogb1114 logb 0.0000000001 -> -10 +dqlogb1115 logb 0.000000001 -> -9 +dqlogb1116 logb 0.00000001 -> -8 +dqlogb1117 logb 0.0000001 -> -7 +dqlogb1118 logb 0.000001 -> -6 +dqlogb1119 logb 0.00001 -> -5 +dqlogb1120 logb 0.0001 -> -4 +dqlogb1121 logb 0.001 -> -3 +dqlogb1122 logb 0.01 -> -2 +dqlogb1123 logb 0.1 -> -1 +dqlogb1124 logb 1E-99 -> -99 +dqlogb1125 logb 1E-100 -> -100 +dqlogb1127 logb 1E-299 -> -299 +dqlogb1126 logb 1E-6143 -> -6143 + +-- suggestions from Ilan Nehama +dqlogb1400 logb 10E-3 -> -2 +dqlogb1401 logb 10E-2 -> -1 +dqlogb1402 logb 100E-2 -> 0 +dqlogb1403 logb 1000E-2 -> 1 +dqlogb1404 logb 10000E-2 -> 2 +dqlogb1405 logb 10E-1 -> 0 +dqlogb1406 logb 100E-1 -> 1 +dqlogb1407 logb 1000E-1 -> 2 +dqlogb1408 logb 10000E-1 -> 3 +dqlogb1409 logb 10E0 -> 1 +dqlogb1410 logb 100E0 -> 2 +dqlogb1411 logb 1000E0 -> 3 +dqlogb1412 logb 10000E0 -> 4 +dqlogb1413 logb 10E1 -> 2 +dqlogb1414 logb 100E1 -> 3 +dqlogb1415 logb 1000E1 -> 4 +dqlogb1416 logb 10000E1 -> 5 +dqlogb1417 logb 10E2 -> 3 +dqlogb1418 logb 100E2 -> 4 +dqlogb1419 logb 1000E2 -> 5 +dqlogb1420 logb 10000E2 -> 6 + +-- special values +dqlogb820 logb Infinity -> Infinity +dqlogb821 logb 0 -> -Infinity Division_by_zero +dqlogb822 logb NaN -> NaN +dqlogb823 logb sNaN -> NaN Invalid_operation +-- propagating NaNs +dqlogb824 logb sNaN123 -> NaN123 Invalid_operation +dqlogb825 logb -sNaN321 -> -NaN321 Invalid_operation +dqlogb826 logb NaN456 -> NaN456 +dqlogb827 logb -NaN654 -> -NaN654 +dqlogb828 logb NaN1 -> NaN1 + +-- Null test +dqlogb900 logb # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/dqMax.decTest b/Lib/test/decimaltestdata/dqMax.decTest index 162d4bda3d9..dc6a1ab8f8e 100644 --- a/Lib/test/decimaltestdata/dqMax.decTest +++ b/Lib/test/decimaltestdata/dqMax.decTest @@ -1,322 +1,322 @@ ------------------------------------------------------------------------- --- dqMax.decTest -- decQuad maxnum -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmax001 max -2 -2 -> -2 -dqmax002 max -2 -1 -> -1 -dqmax003 max -2 0 -> 0 -dqmax004 max -2 1 -> 1 -dqmax005 max -2 2 -> 2 -dqmax006 max -1 -2 -> -1 -dqmax007 max -1 -1 -> -1 -dqmax008 max -1 0 -> 0 -dqmax009 max -1 1 -> 1 -dqmax010 max -1 2 -> 2 -dqmax011 max 0 -2 -> 0 -dqmax012 max 0 -1 -> 0 -dqmax013 max 0 0 -> 0 -dqmax014 max 0 1 -> 1 -dqmax015 max 0 2 -> 2 -dqmax016 max 1 -2 -> 1 -dqmax017 max 1 -1 -> 1 -dqmax018 max 1 0 -> 1 -dqmax019 max 1 1 -> 1 -dqmax020 max 1 2 -> 2 -dqmax021 max 2 -2 -> 2 -dqmax022 max 2 -1 -> 2 -dqmax023 max 2 0 -> 2 -dqmax025 max 2 1 -> 2 -dqmax026 max 2 2 -> 2 - --- extended zeros -dqmax030 max 0 0 -> 0 -dqmax031 max 0 -0 -> 0 -dqmax032 max 0 -0.0 -> 0 -dqmax033 max 0 0.0 -> 0 -dqmax034 max -0 0 -> 0 -- note: -0 = 0, but 0 chosen -dqmax035 max -0 -0 -> -0 -dqmax036 max -0 -0.0 -> -0.0 -dqmax037 max -0 0.0 -> 0.0 -dqmax038 max 0.0 0 -> 0 -dqmax039 max 0.0 -0 -> 0.0 -dqmax040 max 0.0 -0.0 -> 0.0 -dqmax041 max 0.0 0.0 -> 0.0 -dqmax042 max -0.0 0 -> 0 -dqmax043 max -0.0 -0 -> -0.0 -dqmax044 max -0.0 -0.0 -> -0.0 -dqmax045 max -0.0 0.0 -> 0.0 - -dqmax050 max -0E1 0E1 -> 0E+1 -dqmax051 max -0E2 0E2 -> 0E+2 -dqmax052 max -0E2 0E1 -> 0E+1 -dqmax053 max -0E1 0E2 -> 0E+2 -dqmax054 max 0E1 -0E1 -> 0E+1 -dqmax055 max 0E2 -0E2 -> 0E+2 -dqmax056 max 0E2 -0E1 -> 0E+2 -dqmax057 max 0E1 -0E2 -> 0E+1 - -dqmax058 max 0E1 0E1 -> 0E+1 -dqmax059 max 0E2 0E2 -> 0E+2 -dqmax060 max 0E2 0E1 -> 0E+2 -dqmax061 max 0E1 0E2 -> 0E+2 -dqmax062 max -0E1 -0E1 -> -0E+1 -dqmax063 max -0E2 -0E2 -> -0E+2 -dqmax064 max -0E2 -0E1 -> -0E+1 -dqmax065 max -0E1 -0E2 -> -0E+1 - --- Specials -dqmax090 max Inf -Inf -> Infinity -dqmax091 max Inf -1000 -> Infinity -dqmax092 max Inf -1 -> Infinity -dqmax093 max Inf -0 -> Infinity -dqmax094 max Inf 0 -> Infinity -dqmax095 max Inf 1 -> Infinity -dqmax096 max Inf 1000 -> Infinity -dqmax097 max Inf Inf -> Infinity -dqmax098 max -1000 Inf -> Infinity -dqmax099 max -Inf Inf -> Infinity -dqmax100 max -1 Inf -> Infinity -dqmax101 max -0 Inf -> Infinity -dqmax102 max 0 Inf -> Infinity -dqmax103 max 1 Inf -> Infinity -dqmax104 max 1000 Inf -> Infinity -dqmax105 max Inf Inf -> Infinity - -dqmax120 max -Inf -Inf -> -Infinity -dqmax121 max -Inf -1000 -> -1000 -dqmax122 max -Inf -1 -> -1 -dqmax123 max -Inf -0 -> -0 -dqmax124 max -Inf 0 -> 0 -dqmax125 max -Inf 1 -> 1 -dqmax126 max -Inf 1000 -> 1000 -dqmax127 max -Inf Inf -> Infinity -dqmax128 max -Inf -Inf -> -Infinity -dqmax129 max -1000 -Inf -> -1000 -dqmax130 max -1 -Inf -> -1 -dqmax131 max -0 -Inf -> -0 -dqmax132 max 0 -Inf -> 0 -dqmax133 max 1 -Inf -> 1 -dqmax134 max 1000 -Inf -> 1000 -dqmax135 max Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -dqmax141 max NaN -Inf -> -Infinity -dqmax142 max NaN -1000 -> -1000 -dqmax143 max NaN -1 -> -1 -dqmax144 max NaN -0 -> -0 -dqmax145 max NaN 0 -> 0 -dqmax146 max NaN 1 -> 1 -dqmax147 max NaN 1000 -> 1000 -dqmax148 max NaN Inf -> Infinity -dqmax149 max NaN NaN -> NaN -dqmax150 max -Inf NaN -> -Infinity -dqmax151 max -1000 NaN -> -1000 -dqmax152 max -1 NaN -> -1 -dqmax153 max -0 NaN -> -0 -dqmax154 max 0 NaN -> 0 -dqmax155 max 1 NaN -> 1 -dqmax156 max 1000 NaN -> 1000 -dqmax157 max Inf NaN -> Infinity - -dqmax161 max sNaN -Inf -> NaN Invalid_operation -dqmax162 max sNaN -1000 -> NaN Invalid_operation -dqmax163 max sNaN -1 -> NaN Invalid_operation -dqmax164 max sNaN -0 -> NaN Invalid_operation -dqmax165 max sNaN 0 -> NaN Invalid_operation -dqmax166 max sNaN 1 -> NaN Invalid_operation -dqmax167 max sNaN 1000 -> NaN Invalid_operation -dqmax168 max sNaN NaN -> NaN Invalid_operation -dqmax169 max sNaN sNaN -> NaN Invalid_operation -dqmax170 max NaN sNaN -> NaN Invalid_operation -dqmax171 max -Inf sNaN -> NaN Invalid_operation -dqmax172 max -1000 sNaN -> NaN Invalid_operation -dqmax173 max -1 sNaN -> NaN Invalid_operation -dqmax174 max -0 sNaN -> NaN Invalid_operation -dqmax175 max 0 sNaN -> NaN Invalid_operation -dqmax176 max 1 sNaN -> NaN Invalid_operation -dqmax177 max 1000 sNaN -> NaN Invalid_operation -dqmax178 max Inf sNaN -> NaN Invalid_operation -dqmax179 max NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmax181 max NaN9 -Inf -> -Infinity -dqmax182 max NaN8 9 -> 9 -dqmax183 max -NaN7 Inf -> Infinity - -dqmax184 max -NaN1 NaN11 -> -NaN1 -dqmax185 max NaN2 NaN12 -> NaN2 -dqmax186 max -NaN13 -NaN7 -> -NaN13 -dqmax187 max NaN14 -NaN5 -> NaN14 - -dqmax188 max -Inf NaN4 -> -Infinity -dqmax189 max -9 -NaN3 -> -9 -dqmax190 max Inf NaN2 -> Infinity - -dqmax191 max sNaN99 -Inf -> NaN99 Invalid_operation -dqmax192 max sNaN98 -1 -> NaN98 Invalid_operation -dqmax193 max -sNaN97 NaN -> -NaN97 Invalid_operation -dqmax194 max sNaN96 sNaN94 -> NaN96 Invalid_operation -dqmax195 max NaN95 sNaN93 -> NaN93 Invalid_operation -dqmax196 max -Inf sNaN92 -> NaN92 Invalid_operation -dqmax197 max 0 sNaN91 -> NaN91 Invalid_operation -dqmax198 max Inf -sNaN90 -> -NaN90 Invalid_operation -dqmax199 max NaN sNaN89 -> NaN89 Invalid_operation - --- old rounding checks -dqmax221 max 12345678000 1 -> 12345678000 -dqmax222 max 1 12345678000 -> 12345678000 -dqmax223 max 1234567800 1 -> 1234567800 -dqmax224 max 1 1234567800 -> 1234567800 -dqmax225 max 1234567890 1 -> 1234567890 -dqmax226 max 1 1234567890 -> 1234567890 -dqmax227 max 1234567891 1 -> 1234567891 -dqmax228 max 1 1234567891 -> 1234567891 -dqmax229 max 12345678901 1 -> 12345678901 -dqmax230 max 1 12345678901 -> 12345678901 -dqmax231 max 1234567896 1 -> 1234567896 -dqmax232 max 1 1234567896 -> 1234567896 -dqmax233 max -1234567891 1 -> 1 -dqmax234 max 1 -1234567891 -> 1 -dqmax235 max -12345678901 1 -> 1 -dqmax236 max 1 -12345678901 -> 1 -dqmax237 max -1234567896 1 -> 1 -dqmax238 max 1 -1234567896 -> 1 - --- from examples -dqmax280 max '3' '2' -> '3' -dqmax281 max '-10' '3' -> '3' -dqmax282 max '1.0' '1' -> '1' -dqmax283 max '1' '1.0' -> '1' -dqmax284 max '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -dqmax401 max Inf 1.1 -> Infinity -dqmax402 max 1.1 1 -> 1.1 -dqmax403 max 1 1.0 -> 1 -dqmax404 max 1.0 0.1 -> 1.0 -dqmax405 max 0.1 0.10 -> 0.1 -dqmax406 max 0.10 0.100 -> 0.10 -dqmax407 max 0.10 0 -> 0.10 -dqmax408 max 0 0.0 -> 0 -dqmax409 max 0.0 -0 -> 0.0 -dqmax410 max 0.0 -0.0 -> 0.0 -dqmax411 max 0.00 -0.0 -> 0.00 -dqmax412 max 0.0 -0.00 -> 0.0 -dqmax413 max 0 -0.0 -> 0 -dqmax414 max 0 -0 -> 0 -dqmax415 max -0.0 -0 -> -0.0 -dqmax416 max -0 -0.100 -> -0 -dqmax417 max -0.100 -0.10 -> -0.100 -dqmax418 max -0.10 -0.1 -> -0.10 -dqmax419 max -0.1 -1.0 -> -0.1 -dqmax420 max -1.0 -1 -> -1.0 -dqmax421 max -1 -1.1 -> -1 -dqmax423 max -1.1 -Inf -> -1.1 --- same with operands reversed -dqmax431 max 1.1 Inf -> Infinity -dqmax432 max 1 1.1 -> 1.1 -dqmax433 max 1.0 1 -> 1 -dqmax434 max 0.1 1.0 -> 1.0 -dqmax435 max 0.10 0.1 -> 0.1 -dqmax436 max 0.100 0.10 -> 0.10 -dqmax437 max 0 0.10 -> 0.10 -dqmax438 max 0.0 0 -> 0 -dqmax439 max -0 0.0 -> 0.0 -dqmax440 max -0.0 0.0 -> 0.0 -dqmax441 max -0.0 0.00 -> 0.00 -dqmax442 max -0.00 0.0 -> 0.0 -dqmax443 max -0.0 0 -> 0 -dqmax444 max -0 0 -> 0 -dqmax445 max -0 -0.0 -> -0.0 -dqmax446 max -0.100 -0 -> -0 -dqmax447 max -0.10 -0.100 -> -0.100 -dqmax448 max -0.1 -0.10 -> -0.10 -dqmax449 max -1.0 -0.1 -> -0.1 -dqmax450 max -1 -1.0 -> -1.0 -dqmax451 max -1.1 -1 -> -1 -dqmax453 max -Inf -1.1 -> -1.1 --- largies -dqmax460 max 1000 1E+3 -> 1E+3 -dqmax461 max 1E+3 1000 -> 1E+3 -dqmax462 max 1000 -1E+3 -> 1000 -dqmax463 max 1E+3 -1000 -> 1E+3 -dqmax464 max -1000 1E+3 -> 1E+3 -dqmax465 max -1E+3 1000 -> 1000 -dqmax466 max -1000 -1E+3 -> -1000 -dqmax467 max -1E+3 -1000 -> -1000 - --- misalignment traps for little-endian -dqmax471 max 1.0 0.1 -> 1.0 -dqmax472 max 0.1 1.0 -> 1.0 -dqmax473 max 10.0 0.1 -> 10.0 -dqmax474 max 0.1 10.0 -> 10.0 -dqmax475 max 100 1.0 -> 100 -dqmax476 max 1.0 100 -> 100 -dqmax477 max 1000 10.0 -> 1000 -dqmax478 max 10.0 1000 -> 1000 -dqmax479 max 10000 100.0 -> 10000 -dqmax480 max 100.0 10000 -> 10000 -dqmax481 max 100000 1000.0 -> 100000 -dqmax482 max 1000.0 100000 -> 100000 -dqmax483 max 1000000 10000.0 -> 1000000 -dqmax484 max 10000.0 1000000 -> 1000000 - --- subnormals -dqmax510 max 1.00E-6143 0 -> 1.00E-6143 -dqmax511 max 0.1E-6143 0 -> 1E-6144 Subnormal -dqmax512 max 0.10E-6143 0 -> 1.0E-6144 Subnormal -dqmax513 max 0.100E-6143 0 -> 1.00E-6144 Subnormal -dqmax514 max 0.01E-6143 0 -> 1E-6145 Subnormal -dqmax515 max 0.999E-6143 0 -> 9.99E-6144 Subnormal -dqmax516 max 0.099E-6143 0 -> 9.9E-6145 Subnormal -dqmax517 max 0.009E-6143 0 -> 9E-6146 Subnormal -dqmax518 max 0.001E-6143 0 -> 1E-6146 Subnormal -dqmax519 max 0.0009E-6143 0 -> 9E-6147 Subnormal -dqmax520 max 0.0001E-6143 0 -> 1E-6147 Subnormal - -dqmax530 max -1.00E-6143 0 -> 0 -dqmax531 max -0.1E-6143 0 -> 0 -dqmax532 max -0.10E-6143 0 -> 0 -dqmax533 max -0.100E-6143 0 -> 0 -dqmax534 max -0.01E-6143 0 -> 0 -dqmax535 max -0.999E-6143 0 -> 0 -dqmax536 max -0.099E-6143 0 -> 0 -dqmax537 max -0.009E-6143 0 -> 0 -dqmax538 max -0.001E-6143 0 -> 0 -dqmax539 max -0.0009E-6143 0 -> 0 -dqmax540 max -0.0001E-6143 0 -> 0 - --- Null tests -dqmax900 max 10 # -> NaN Invalid_operation -dqmax901 max # 10 -> NaN Invalid_operation - - - +------------------------------------------------------------------------ +-- dqMax.decTest -- decQuad maxnum -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmax001 max -2 -2 -> -2 +dqmax002 max -2 -1 -> -1 +dqmax003 max -2 0 -> 0 +dqmax004 max -2 1 -> 1 +dqmax005 max -2 2 -> 2 +dqmax006 max -1 -2 -> -1 +dqmax007 max -1 -1 -> -1 +dqmax008 max -1 0 -> 0 +dqmax009 max -1 1 -> 1 +dqmax010 max -1 2 -> 2 +dqmax011 max 0 -2 -> 0 +dqmax012 max 0 -1 -> 0 +dqmax013 max 0 0 -> 0 +dqmax014 max 0 1 -> 1 +dqmax015 max 0 2 -> 2 +dqmax016 max 1 -2 -> 1 +dqmax017 max 1 -1 -> 1 +dqmax018 max 1 0 -> 1 +dqmax019 max 1 1 -> 1 +dqmax020 max 1 2 -> 2 +dqmax021 max 2 -2 -> 2 +dqmax022 max 2 -1 -> 2 +dqmax023 max 2 0 -> 2 +dqmax025 max 2 1 -> 2 +dqmax026 max 2 2 -> 2 + +-- extended zeros +dqmax030 max 0 0 -> 0 +dqmax031 max 0 -0 -> 0 +dqmax032 max 0 -0.0 -> 0 +dqmax033 max 0 0.0 -> 0 +dqmax034 max -0 0 -> 0 -- note: -0 = 0, but 0 chosen +dqmax035 max -0 -0 -> -0 +dqmax036 max -0 -0.0 -> -0.0 +dqmax037 max -0 0.0 -> 0.0 +dqmax038 max 0.0 0 -> 0 +dqmax039 max 0.0 -0 -> 0.0 +dqmax040 max 0.0 -0.0 -> 0.0 +dqmax041 max 0.0 0.0 -> 0.0 +dqmax042 max -0.0 0 -> 0 +dqmax043 max -0.0 -0 -> -0.0 +dqmax044 max -0.0 -0.0 -> -0.0 +dqmax045 max -0.0 0.0 -> 0.0 + +dqmax050 max -0E1 0E1 -> 0E+1 +dqmax051 max -0E2 0E2 -> 0E+2 +dqmax052 max -0E2 0E1 -> 0E+1 +dqmax053 max -0E1 0E2 -> 0E+2 +dqmax054 max 0E1 -0E1 -> 0E+1 +dqmax055 max 0E2 -0E2 -> 0E+2 +dqmax056 max 0E2 -0E1 -> 0E+2 +dqmax057 max 0E1 -0E2 -> 0E+1 + +dqmax058 max 0E1 0E1 -> 0E+1 +dqmax059 max 0E2 0E2 -> 0E+2 +dqmax060 max 0E2 0E1 -> 0E+2 +dqmax061 max 0E1 0E2 -> 0E+2 +dqmax062 max -0E1 -0E1 -> -0E+1 +dqmax063 max -0E2 -0E2 -> -0E+2 +dqmax064 max -0E2 -0E1 -> -0E+1 +dqmax065 max -0E1 -0E2 -> -0E+1 + +-- Specials +dqmax090 max Inf -Inf -> Infinity +dqmax091 max Inf -1000 -> Infinity +dqmax092 max Inf -1 -> Infinity +dqmax093 max Inf -0 -> Infinity +dqmax094 max Inf 0 -> Infinity +dqmax095 max Inf 1 -> Infinity +dqmax096 max Inf 1000 -> Infinity +dqmax097 max Inf Inf -> Infinity +dqmax098 max -1000 Inf -> Infinity +dqmax099 max -Inf Inf -> Infinity +dqmax100 max -1 Inf -> Infinity +dqmax101 max -0 Inf -> Infinity +dqmax102 max 0 Inf -> Infinity +dqmax103 max 1 Inf -> Infinity +dqmax104 max 1000 Inf -> Infinity +dqmax105 max Inf Inf -> Infinity + +dqmax120 max -Inf -Inf -> -Infinity +dqmax121 max -Inf -1000 -> -1000 +dqmax122 max -Inf -1 -> -1 +dqmax123 max -Inf -0 -> -0 +dqmax124 max -Inf 0 -> 0 +dqmax125 max -Inf 1 -> 1 +dqmax126 max -Inf 1000 -> 1000 +dqmax127 max -Inf Inf -> Infinity +dqmax128 max -Inf -Inf -> -Infinity +dqmax129 max -1000 -Inf -> -1000 +dqmax130 max -1 -Inf -> -1 +dqmax131 max -0 -Inf -> -0 +dqmax132 max 0 -Inf -> 0 +dqmax133 max 1 -Inf -> 1 +dqmax134 max 1000 -Inf -> 1000 +dqmax135 max Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +dqmax141 max NaN -Inf -> -Infinity +dqmax142 max NaN -1000 -> -1000 +dqmax143 max NaN -1 -> -1 +dqmax144 max NaN -0 -> -0 +dqmax145 max NaN 0 -> 0 +dqmax146 max NaN 1 -> 1 +dqmax147 max NaN 1000 -> 1000 +dqmax148 max NaN Inf -> Infinity +dqmax149 max NaN NaN -> NaN +dqmax150 max -Inf NaN -> -Infinity +dqmax151 max -1000 NaN -> -1000 +dqmax152 max -1 NaN -> -1 +dqmax153 max -0 NaN -> -0 +dqmax154 max 0 NaN -> 0 +dqmax155 max 1 NaN -> 1 +dqmax156 max 1000 NaN -> 1000 +dqmax157 max Inf NaN -> Infinity + +dqmax161 max sNaN -Inf -> NaN Invalid_operation +dqmax162 max sNaN -1000 -> NaN Invalid_operation +dqmax163 max sNaN -1 -> NaN Invalid_operation +dqmax164 max sNaN -0 -> NaN Invalid_operation +dqmax165 max sNaN 0 -> NaN Invalid_operation +dqmax166 max sNaN 1 -> NaN Invalid_operation +dqmax167 max sNaN 1000 -> NaN Invalid_operation +dqmax168 max sNaN NaN -> NaN Invalid_operation +dqmax169 max sNaN sNaN -> NaN Invalid_operation +dqmax170 max NaN sNaN -> NaN Invalid_operation +dqmax171 max -Inf sNaN -> NaN Invalid_operation +dqmax172 max -1000 sNaN -> NaN Invalid_operation +dqmax173 max -1 sNaN -> NaN Invalid_operation +dqmax174 max -0 sNaN -> NaN Invalid_operation +dqmax175 max 0 sNaN -> NaN Invalid_operation +dqmax176 max 1 sNaN -> NaN Invalid_operation +dqmax177 max 1000 sNaN -> NaN Invalid_operation +dqmax178 max Inf sNaN -> NaN Invalid_operation +dqmax179 max NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmax181 max NaN9 -Inf -> -Infinity +dqmax182 max NaN8 9 -> 9 +dqmax183 max -NaN7 Inf -> Infinity + +dqmax184 max -NaN1 NaN11 -> -NaN1 +dqmax185 max NaN2 NaN12 -> NaN2 +dqmax186 max -NaN13 -NaN7 -> -NaN13 +dqmax187 max NaN14 -NaN5 -> NaN14 + +dqmax188 max -Inf NaN4 -> -Infinity +dqmax189 max -9 -NaN3 -> -9 +dqmax190 max Inf NaN2 -> Infinity + +dqmax191 max sNaN99 -Inf -> NaN99 Invalid_operation +dqmax192 max sNaN98 -1 -> NaN98 Invalid_operation +dqmax193 max -sNaN97 NaN -> -NaN97 Invalid_operation +dqmax194 max sNaN96 sNaN94 -> NaN96 Invalid_operation +dqmax195 max NaN95 sNaN93 -> NaN93 Invalid_operation +dqmax196 max -Inf sNaN92 -> NaN92 Invalid_operation +dqmax197 max 0 sNaN91 -> NaN91 Invalid_operation +dqmax198 max Inf -sNaN90 -> -NaN90 Invalid_operation +dqmax199 max NaN sNaN89 -> NaN89 Invalid_operation + +-- old rounding checks +dqmax221 max 12345678000 1 -> 12345678000 +dqmax222 max 1 12345678000 -> 12345678000 +dqmax223 max 1234567800 1 -> 1234567800 +dqmax224 max 1 1234567800 -> 1234567800 +dqmax225 max 1234567890 1 -> 1234567890 +dqmax226 max 1 1234567890 -> 1234567890 +dqmax227 max 1234567891 1 -> 1234567891 +dqmax228 max 1 1234567891 -> 1234567891 +dqmax229 max 12345678901 1 -> 12345678901 +dqmax230 max 1 12345678901 -> 12345678901 +dqmax231 max 1234567896 1 -> 1234567896 +dqmax232 max 1 1234567896 -> 1234567896 +dqmax233 max -1234567891 1 -> 1 +dqmax234 max 1 -1234567891 -> 1 +dqmax235 max -12345678901 1 -> 1 +dqmax236 max 1 -12345678901 -> 1 +dqmax237 max -1234567896 1 -> 1 +dqmax238 max 1 -1234567896 -> 1 + +-- from examples +dqmax280 max '3' '2' -> '3' +dqmax281 max '-10' '3' -> '3' +dqmax282 max '1.0' '1' -> '1' +dqmax283 max '1' '1.0' -> '1' +dqmax284 max '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +dqmax401 max Inf 1.1 -> Infinity +dqmax402 max 1.1 1 -> 1.1 +dqmax403 max 1 1.0 -> 1 +dqmax404 max 1.0 0.1 -> 1.0 +dqmax405 max 0.1 0.10 -> 0.1 +dqmax406 max 0.10 0.100 -> 0.10 +dqmax407 max 0.10 0 -> 0.10 +dqmax408 max 0 0.0 -> 0 +dqmax409 max 0.0 -0 -> 0.0 +dqmax410 max 0.0 -0.0 -> 0.0 +dqmax411 max 0.00 -0.0 -> 0.00 +dqmax412 max 0.0 -0.00 -> 0.0 +dqmax413 max 0 -0.0 -> 0 +dqmax414 max 0 -0 -> 0 +dqmax415 max -0.0 -0 -> -0.0 +dqmax416 max -0 -0.100 -> -0 +dqmax417 max -0.100 -0.10 -> -0.100 +dqmax418 max -0.10 -0.1 -> -0.10 +dqmax419 max -0.1 -1.0 -> -0.1 +dqmax420 max -1.0 -1 -> -1.0 +dqmax421 max -1 -1.1 -> -1 +dqmax423 max -1.1 -Inf -> -1.1 +-- same with operands reversed +dqmax431 max 1.1 Inf -> Infinity +dqmax432 max 1 1.1 -> 1.1 +dqmax433 max 1.0 1 -> 1 +dqmax434 max 0.1 1.0 -> 1.0 +dqmax435 max 0.10 0.1 -> 0.1 +dqmax436 max 0.100 0.10 -> 0.10 +dqmax437 max 0 0.10 -> 0.10 +dqmax438 max 0.0 0 -> 0 +dqmax439 max -0 0.0 -> 0.0 +dqmax440 max -0.0 0.0 -> 0.0 +dqmax441 max -0.0 0.00 -> 0.00 +dqmax442 max -0.00 0.0 -> 0.0 +dqmax443 max -0.0 0 -> 0 +dqmax444 max -0 0 -> 0 +dqmax445 max -0 -0.0 -> -0.0 +dqmax446 max -0.100 -0 -> -0 +dqmax447 max -0.10 -0.100 -> -0.100 +dqmax448 max -0.1 -0.10 -> -0.10 +dqmax449 max -1.0 -0.1 -> -0.1 +dqmax450 max -1 -1.0 -> -1.0 +dqmax451 max -1.1 -1 -> -1 +dqmax453 max -Inf -1.1 -> -1.1 +-- largies +dqmax460 max 1000 1E+3 -> 1E+3 +dqmax461 max 1E+3 1000 -> 1E+3 +dqmax462 max 1000 -1E+3 -> 1000 +dqmax463 max 1E+3 -1000 -> 1E+3 +dqmax464 max -1000 1E+3 -> 1E+3 +dqmax465 max -1E+3 1000 -> 1000 +dqmax466 max -1000 -1E+3 -> -1000 +dqmax467 max -1E+3 -1000 -> -1000 + +-- misalignment traps for little-endian +dqmax471 max 1.0 0.1 -> 1.0 +dqmax472 max 0.1 1.0 -> 1.0 +dqmax473 max 10.0 0.1 -> 10.0 +dqmax474 max 0.1 10.0 -> 10.0 +dqmax475 max 100 1.0 -> 100 +dqmax476 max 1.0 100 -> 100 +dqmax477 max 1000 10.0 -> 1000 +dqmax478 max 10.0 1000 -> 1000 +dqmax479 max 10000 100.0 -> 10000 +dqmax480 max 100.0 10000 -> 10000 +dqmax481 max 100000 1000.0 -> 100000 +dqmax482 max 1000.0 100000 -> 100000 +dqmax483 max 1000000 10000.0 -> 1000000 +dqmax484 max 10000.0 1000000 -> 1000000 + +-- subnormals +dqmax510 max 1.00E-6143 0 -> 1.00E-6143 +dqmax511 max 0.1E-6143 0 -> 1E-6144 Subnormal +dqmax512 max 0.10E-6143 0 -> 1.0E-6144 Subnormal +dqmax513 max 0.100E-6143 0 -> 1.00E-6144 Subnormal +dqmax514 max 0.01E-6143 0 -> 1E-6145 Subnormal +dqmax515 max 0.999E-6143 0 -> 9.99E-6144 Subnormal +dqmax516 max 0.099E-6143 0 -> 9.9E-6145 Subnormal +dqmax517 max 0.009E-6143 0 -> 9E-6146 Subnormal +dqmax518 max 0.001E-6143 0 -> 1E-6146 Subnormal +dqmax519 max 0.0009E-6143 0 -> 9E-6147 Subnormal +dqmax520 max 0.0001E-6143 0 -> 1E-6147 Subnormal + +dqmax530 max -1.00E-6143 0 -> 0 +dqmax531 max -0.1E-6143 0 -> 0 +dqmax532 max -0.10E-6143 0 -> 0 +dqmax533 max -0.100E-6143 0 -> 0 +dqmax534 max -0.01E-6143 0 -> 0 +dqmax535 max -0.999E-6143 0 -> 0 +dqmax536 max -0.099E-6143 0 -> 0 +dqmax537 max -0.009E-6143 0 -> 0 +dqmax538 max -0.001E-6143 0 -> 0 +dqmax539 max -0.0009E-6143 0 -> 0 +dqmax540 max -0.0001E-6143 0 -> 0 + +-- Null tests +dqmax900 max 10 # -> NaN Invalid_operation +dqmax901 max # 10 -> NaN Invalid_operation + + + diff --git a/Lib/test/decimaltestdata/dqMaxMag.decTest b/Lib/test/decimaltestdata/dqMaxMag.decTest index 6621e80d92b..6f5be246097 100644 --- a/Lib/test/decimaltestdata/dqMaxMag.decTest +++ b/Lib/test/decimaltestdata/dqMaxMag.decTest @@ -1,304 +1,304 @@ ------------------------------------------------------------------------- --- dqMaxMag.decTest -- decQuad maxnummag -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmxg001 maxmag -2 -2 -> -2 -dqmxg002 maxmag -2 -1 -> -2 -dqmxg003 maxmag -2 0 -> -2 -dqmxg004 maxmag -2 1 -> -2 -dqmxg005 maxmag -2 2 -> 2 -dqmxg006 maxmag -1 -2 -> -2 -dqmxg007 maxmag -1 -1 -> -1 -dqmxg008 maxmag -1 0 -> -1 -dqmxg009 maxmag -1 1 -> 1 -dqmxg010 maxmag -1 2 -> 2 -dqmxg011 maxmag 0 -2 -> -2 -dqmxg012 maxmag 0 -1 -> -1 -dqmxg013 maxmag 0 0 -> 0 -dqmxg014 maxmag 0 1 -> 1 -dqmxg015 maxmag 0 2 -> 2 -dqmxg016 maxmag 1 -2 -> -2 -dqmxg017 maxmag 1 -1 -> 1 -dqmxg018 maxmag 1 0 -> 1 -dqmxg019 maxmag 1 1 -> 1 -dqmxg020 maxmag 1 2 -> 2 -dqmxg021 maxmag 2 -2 -> 2 -dqmxg022 maxmag 2 -1 -> 2 -dqmxg023 maxmag 2 0 -> 2 -dqmxg025 maxmag 2 1 -> 2 -dqmxg026 maxmag 2 2 -> 2 - --- extended zeros -dqmxg030 maxmag 0 0 -> 0 -dqmxg031 maxmag 0 -0 -> 0 -dqmxg032 maxmag 0 -0.0 -> 0 -dqmxg033 maxmag 0 0.0 -> 0 -dqmxg034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen -dqmxg035 maxmag -0 -0 -> -0 -dqmxg036 maxmag -0 -0.0 -> -0.0 -dqmxg037 maxmag -0 0.0 -> 0.0 -dqmxg038 maxmag 0.0 0 -> 0 -dqmxg039 maxmag 0.0 -0 -> 0.0 -dqmxg040 maxmag 0.0 -0.0 -> 0.0 -dqmxg041 maxmag 0.0 0.0 -> 0.0 -dqmxg042 maxmag -0.0 0 -> 0 -dqmxg043 maxmag -0.0 -0 -> -0.0 -dqmxg044 maxmag -0.0 -0.0 -> -0.0 -dqmxg045 maxmag -0.0 0.0 -> 0.0 - -dqmxg050 maxmag -0E1 0E1 -> 0E+1 -dqmxg051 maxmag -0E2 0E2 -> 0E+2 -dqmxg052 maxmag -0E2 0E1 -> 0E+1 -dqmxg053 maxmag -0E1 0E2 -> 0E+2 -dqmxg054 maxmag 0E1 -0E1 -> 0E+1 -dqmxg055 maxmag 0E2 -0E2 -> 0E+2 -dqmxg056 maxmag 0E2 -0E1 -> 0E+2 -dqmxg057 maxmag 0E1 -0E2 -> 0E+1 - -dqmxg058 maxmag 0E1 0E1 -> 0E+1 -dqmxg059 maxmag 0E2 0E2 -> 0E+2 -dqmxg060 maxmag 0E2 0E1 -> 0E+2 -dqmxg061 maxmag 0E1 0E2 -> 0E+2 -dqmxg062 maxmag -0E1 -0E1 -> -0E+1 -dqmxg063 maxmag -0E2 -0E2 -> -0E+2 -dqmxg064 maxmag -0E2 -0E1 -> -0E+1 -dqmxg065 maxmag -0E1 -0E2 -> -0E+1 - --- Specials -dqmxg090 maxmag Inf -Inf -> Infinity -dqmxg091 maxmag Inf -1000 -> Infinity -dqmxg092 maxmag Inf -1 -> Infinity -dqmxg093 maxmag Inf -0 -> Infinity -dqmxg094 maxmag Inf 0 -> Infinity -dqmxg095 maxmag Inf 1 -> Infinity -dqmxg096 maxmag Inf 1000 -> Infinity -dqmxg097 maxmag Inf Inf -> Infinity -dqmxg098 maxmag -1000 Inf -> Infinity -dqmxg099 maxmag -Inf Inf -> Infinity -dqmxg100 maxmag -1 Inf -> Infinity -dqmxg101 maxmag -0 Inf -> Infinity -dqmxg102 maxmag 0 Inf -> Infinity -dqmxg103 maxmag 1 Inf -> Infinity -dqmxg104 maxmag 1000 Inf -> Infinity -dqmxg105 maxmag Inf Inf -> Infinity - -dqmxg120 maxmag -Inf -Inf -> -Infinity -dqmxg121 maxmag -Inf -1000 -> -Infinity -dqmxg122 maxmag -Inf -1 -> -Infinity -dqmxg123 maxmag -Inf -0 -> -Infinity -dqmxg124 maxmag -Inf 0 -> -Infinity -dqmxg125 maxmag -Inf 1 -> -Infinity -dqmxg126 maxmag -Inf 1000 -> -Infinity -dqmxg127 maxmag -Inf Inf -> Infinity -dqmxg128 maxmag -Inf -Inf -> -Infinity -dqmxg129 maxmag -1000 -Inf -> -Infinity -dqmxg130 maxmag -1 -Inf -> -Infinity -dqmxg131 maxmag -0 -Inf -> -Infinity -dqmxg132 maxmag 0 -Inf -> -Infinity -dqmxg133 maxmag 1 -Inf -> -Infinity -dqmxg134 maxmag 1000 -Inf -> -Infinity -dqmxg135 maxmag Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -dqmxg141 maxmag NaN -Inf -> -Infinity -dqmxg142 maxmag NaN -1000 -> -1000 -dqmxg143 maxmag NaN -1 -> -1 -dqmxg144 maxmag NaN -0 -> -0 -dqmxg145 maxmag NaN 0 -> 0 -dqmxg146 maxmag NaN 1 -> 1 -dqmxg147 maxmag NaN 1000 -> 1000 -dqmxg148 maxmag NaN Inf -> Infinity -dqmxg149 maxmag NaN NaN -> NaN -dqmxg150 maxmag -Inf NaN -> -Infinity -dqmxg151 maxmag -1000 NaN -> -1000 -dqmxg152 maxmag -1 NaN -> -1 -dqmxg153 maxmag -0 NaN -> -0 -dqmxg154 maxmag 0 NaN -> 0 -dqmxg155 maxmag 1 NaN -> 1 -dqmxg156 maxmag 1000 NaN -> 1000 -dqmxg157 maxmag Inf NaN -> Infinity - -dqmxg161 maxmag sNaN -Inf -> NaN Invalid_operation -dqmxg162 maxmag sNaN -1000 -> NaN Invalid_operation -dqmxg163 maxmag sNaN -1 -> NaN Invalid_operation -dqmxg164 maxmag sNaN -0 -> NaN Invalid_operation -dqmxg165 maxmag sNaN 0 -> NaN Invalid_operation -dqmxg166 maxmag sNaN 1 -> NaN Invalid_operation -dqmxg167 maxmag sNaN 1000 -> NaN Invalid_operation -dqmxg168 maxmag sNaN NaN -> NaN Invalid_operation -dqmxg169 maxmag sNaN sNaN -> NaN Invalid_operation -dqmxg170 maxmag NaN sNaN -> NaN Invalid_operation -dqmxg171 maxmag -Inf sNaN -> NaN Invalid_operation -dqmxg172 maxmag -1000 sNaN -> NaN Invalid_operation -dqmxg173 maxmag -1 sNaN -> NaN Invalid_operation -dqmxg174 maxmag -0 sNaN -> NaN Invalid_operation -dqmxg175 maxmag 0 sNaN -> NaN Invalid_operation -dqmxg176 maxmag 1 sNaN -> NaN Invalid_operation -dqmxg177 maxmag 1000 sNaN -> NaN Invalid_operation -dqmxg178 maxmag Inf sNaN -> NaN Invalid_operation -dqmxg179 maxmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmxg181 maxmag NaN9 -Inf -> -Infinity -dqmxg182 maxmag NaN8 9 -> 9 -dqmxg183 maxmag -NaN7 Inf -> Infinity - -dqmxg184 maxmag -NaN1 NaN11 -> -NaN1 -dqmxg185 maxmag NaN2 NaN12 -> NaN2 -dqmxg186 maxmag -NaN13 -NaN7 -> -NaN13 -dqmxg187 maxmag NaN14 -NaN5 -> NaN14 - -dqmxg188 maxmag -Inf NaN4 -> -Infinity -dqmxg189 maxmag -9 -NaN3 -> -9 -dqmxg190 maxmag Inf NaN2 -> Infinity - -dqmxg191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation -dqmxg192 maxmag sNaN98 -1 -> NaN98 Invalid_operation -dqmxg193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation -dqmxg194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation -dqmxg195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation -dqmxg196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation -dqmxg197 maxmag 0 sNaN91 -> NaN91 Invalid_operation -dqmxg198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation -dqmxg199 maxmag NaN sNaN89 -> NaN89 Invalid_operation - --- old rounding checks -dqmxg221 maxmag 12345678000 1 -> 12345678000 -dqmxg222 maxmag 1 12345678000 -> 12345678000 -dqmxg223 maxmag 1234567800 1 -> 1234567800 -dqmxg224 maxmag 1 1234567800 -> 1234567800 -dqmxg225 maxmag 1234567890 1 -> 1234567890 -dqmxg226 maxmag 1 1234567890 -> 1234567890 -dqmxg227 maxmag 1234567891 1 -> 1234567891 -dqmxg228 maxmag 1 1234567891 -> 1234567891 -dqmxg229 maxmag 12345678901 1 -> 12345678901 -dqmxg230 maxmag 1 12345678901 -> 12345678901 -dqmxg231 maxmag 1234567896 1 -> 1234567896 -dqmxg232 maxmag 1 1234567896 -> 1234567896 -dqmxg233 maxmag -1234567891 1 -> -1234567891 -dqmxg234 maxmag 1 -1234567891 -> -1234567891 -dqmxg235 maxmag -12345678901 1 -> -12345678901 -dqmxg236 maxmag 1 -12345678901 -> -12345678901 -dqmxg237 maxmag -1234567896 1 -> -1234567896 -dqmxg238 maxmag 1 -1234567896 -> -1234567896 - --- from examples -dqmxg280 maxmag '3' '2' -> '3' -dqmxg281 maxmag '-10' '3' -> '-10' -dqmxg282 maxmag '1.0' '1' -> '1' -dqmxg283 maxmag '1' '1.0' -> '1' -dqmxg284 maxmag '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -dqmxg401 maxmag Inf 1.1 -> Infinity -dqmxg402 maxmag 1.1 1 -> 1.1 -dqmxg403 maxmag 1 1.0 -> 1 -dqmxg404 maxmag 1.0 0.1 -> 1.0 -dqmxg405 maxmag 0.1 0.10 -> 0.1 -dqmxg406 maxmag 0.10 0.100 -> 0.10 -dqmxg407 maxmag 0.10 0 -> 0.10 -dqmxg408 maxmag 0 0.0 -> 0 -dqmxg409 maxmag 0.0 -0 -> 0.0 -dqmxg410 maxmag 0.0 -0.0 -> 0.0 -dqmxg411 maxmag 0.00 -0.0 -> 0.00 -dqmxg412 maxmag 0.0 -0.00 -> 0.0 -dqmxg413 maxmag 0 -0.0 -> 0 -dqmxg414 maxmag 0 -0 -> 0 -dqmxg415 maxmag -0.0 -0 -> -0.0 -dqmxg416 maxmag -0 -0.100 -> -0.100 -dqmxg417 maxmag -0.100 -0.10 -> -0.100 -dqmxg418 maxmag -0.10 -0.1 -> -0.10 -dqmxg419 maxmag -0.1 -1.0 -> -1.0 -dqmxg420 maxmag -1.0 -1 -> -1.0 -dqmxg421 maxmag -1 -1.1 -> -1.1 -dqmxg423 maxmag -1.1 -Inf -> -Infinity --- same with operands reversed -dqmxg431 maxmag 1.1 Inf -> Infinity -dqmxg432 maxmag 1 1.1 -> 1.1 -dqmxg433 maxmag 1.0 1 -> 1 -dqmxg434 maxmag 0.1 1.0 -> 1.0 -dqmxg435 maxmag 0.10 0.1 -> 0.1 -dqmxg436 maxmag 0.100 0.10 -> 0.10 -dqmxg437 maxmag 0 0.10 -> 0.10 -dqmxg438 maxmag 0.0 0 -> 0 -dqmxg439 maxmag -0 0.0 -> 0.0 -dqmxg440 maxmag -0.0 0.0 -> 0.0 -dqmxg441 maxmag -0.0 0.00 -> 0.00 -dqmxg442 maxmag -0.00 0.0 -> 0.0 -dqmxg443 maxmag -0.0 0 -> 0 -dqmxg444 maxmag -0 0 -> 0 -dqmxg445 maxmag -0 -0.0 -> -0.0 -dqmxg446 maxmag -0.100 -0 -> -0.100 -dqmxg447 maxmag -0.10 -0.100 -> -0.100 -dqmxg448 maxmag -0.1 -0.10 -> -0.10 -dqmxg449 maxmag -1.0 -0.1 -> -1.0 -dqmxg450 maxmag -1 -1.0 -> -1.0 -dqmxg451 maxmag -1.1 -1 -> -1.1 -dqmxg453 maxmag -Inf -1.1 -> -Infinity --- largies -dqmxg460 maxmag 1000 1E+3 -> 1E+3 -dqmxg461 maxmag 1E+3 1000 -> 1E+3 -dqmxg462 maxmag 1000 -1E+3 -> 1000 -dqmxg463 maxmag 1E+3 -1000 -> 1E+3 -dqmxg464 maxmag -1000 1E+3 -> 1E+3 -dqmxg465 maxmag -1E+3 1000 -> 1000 -dqmxg466 maxmag -1000 -1E+3 -> -1000 -dqmxg467 maxmag -1E+3 -1000 -> -1000 - --- subnormals -dqmxg510 maxmag 1.00E-6143 0 -> 1.00E-6143 -dqmxg511 maxmag 0.1E-6143 0 -> 1E-6144 Subnormal -dqmxg512 maxmag 0.10E-6143 0 -> 1.0E-6144 Subnormal -dqmxg513 maxmag 0.100E-6143 0 -> 1.00E-6144 Subnormal -dqmxg514 maxmag 0.01E-6143 0 -> 1E-6145 Subnormal -dqmxg515 maxmag 0.999E-6143 0 -> 9.99E-6144 Subnormal -dqmxg516 maxmag 0.099E-6143 0 -> 9.9E-6145 Subnormal -dqmxg517 maxmag 0.009E-6143 0 -> 9E-6146 Subnormal -dqmxg518 maxmag 0.001E-6143 0 -> 1E-6146 Subnormal -dqmxg519 maxmag 0.0009E-6143 0 -> 9E-6147 Subnormal -dqmxg520 maxmag 0.0001E-6143 0 -> 1E-6147 Subnormal - -dqmxg530 maxmag -1.00E-6143 0 -> -1.00E-6143 -dqmxg531 maxmag -0.1E-6143 0 -> -1E-6144 Subnormal -dqmxg532 maxmag -0.10E-6143 0 -> -1.0E-6144 Subnormal -dqmxg533 maxmag -0.100E-6143 0 -> -1.00E-6144 Subnormal -dqmxg534 maxmag -0.01E-6143 0 -> -1E-6145 Subnormal -dqmxg535 maxmag -0.999E-6143 0 -> -9.99E-6144 Subnormal -dqmxg536 maxmag -0.099E-6143 0 -> -9.9E-6145 Subnormal -dqmxg537 maxmag -0.009E-6143 0 -> -9E-6146 Subnormal -dqmxg538 maxmag -0.001E-6143 0 -> -1E-6146 Subnormal -dqmxg539 maxmag -0.0009E-6143 0 -> -9E-6147 Subnormal -dqmxg540 maxmag -0.0001E-6143 0 -> -1E-6147 Subnormal - --- Null tests -dqmxg900 maxmag 10 # -> NaN Invalid_operation -dqmxg901 maxmag # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqMaxMag.decTest -- decQuad maxnummag -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmxg001 maxmag -2 -2 -> -2 +dqmxg002 maxmag -2 -1 -> -2 +dqmxg003 maxmag -2 0 -> -2 +dqmxg004 maxmag -2 1 -> -2 +dqmxg005 maxmag -2 2 -> 2 +dqmxg006 maxmag -1 -2 -> -2 +dqmxg007 maxmag -1 -1 -> -1 +dqmxg008 maxmag -1 0 -> -1 +dqmxg009 maxmag -1 1 -> 1 +dqmxg010 maxmag -1 2 -> 2 +dqmxg011 maxmag 0 -2 -> -2 +dqmxg012 maxmag 0 -1 -> -1 +dqmxg013 maxmag 0 0 -> 0 +dqmxg014 maxmag 0 1 -> 1 +dqmxg015 maxmag 0 2 -> 2 +dqmxg016 maxmag 1 -2 -> -2 +dqmxg017 maxmag 1 -1 -> 1 +dqmxg018 maxmag 1 0 -> 1 +dqmxg019 maxmag 1 1 -> 1 +dqmxg020 maxmag 1 2 -> 2 +dqmxg021 maxmag 2 -2 -> 2 +dqmxg022 maxmag 2 -1 -> 2 +dqmxg023 maxmag 2 0 -> 2 +dqmxg025 maxmag 2 1 -> 2 +dqmxg026 maxmag 2 2 -> 2 + +-- extended zeros +dqmxg030 maxmag 0 0 -> 0 +dqmxg031 maxmag 0 -0 -> 0 +dqmxg032 maxmag 0 -0.0 -> 0 +dqmxg033 maxmag 0 0.0 -> 0 +dqmxg034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen +dqmxg035 maxmag -0 -0 -> -0 +dqmxg036 maxmag -0 -0.0 -> -0.0 +dqmxg037 maxmag -0 0.0 -> 0.0 +dqmxg038 maxmag 0.0 0 -> 0 +dqmxg039 maxmag 0.0 -0 -> 0.0 +dqmxg040 maxmag 0.0 -0.0 -> 0.0 +dqmxg041 maxmag 0.0 0.0 -> 0.0 +dqmxg042 maxmag -0.0 0 -> 0 +dqmxg043 maxmag -0.0 -0 -> -0.0 +dqmxg044 maxmag -0.0 -0.0 -> -0.0 +dqmxg045 maxmag -0.0 0.0 -> 0.0 + +dqmxg050 maxmag -0E1 0E1 -> 0E+1 +dqmxg051 maxmag -0E2 0E2 -> 0E+2 +dqmxg052 maxmag -0E2 0E1 -> 0E+1 +dqmxg053 maxmag -0E1 0E2 -> 0E+2 +dqmxg054 maxmag 0E1 -0E1 -> 0E+1 +dqmxg055 maxmag 0E2 -0E2 -> 0E+2 +dqmxg056 maxmag 0E2 -0E1 -> 0E+2 +dqmxg057 maxmag 0E1 -0E2 -> 0E+1 + +dqmxg058 maxmag 0E1 0E1 -> 0E+1 +dqmxg059 maxmag 0E2 0E2 -> 0E+2 +dqmxg060 maxmag 0E2 0E1 -> 0E+2 +dqmxg061 maxmag 0E1 0E2 -> 0E+2 +dqmxg062 maxmag -0E1 -0E1 -> -0E+1 +dqmxg063 maxmag -0E2 -0E2 -> -0E+2 +dqmxg064 maxmag -0E2 -0E1 -> -0E+1 +dqmxg065 maxmag -0E1 -0E2 -> -0E+1 + +-- Specials +dqmxg090 maxmag Inf -Inf -> Infinity +dqmxg091 maxmag Inf -1000 -> Infinity +dqmxg092 maxmag Inf -1 -> Infinity +dqmxg093 maxmag Inf -0 -> Infinity +dqmxg094 maxmag Inf 0 -> Infinity +dqmxg095 maxmag Inf 1 -> Infinity +dqmxg096 maxmag Inf 1000 -> Infinity +dqmxg097 maxmag Inf Inf -> Infinity +dqmxg098 maxmag -1000 Inf -> Infinity +dqmxg099 maxmag -Inf Inf -> Infinity +dqmxg100 maxmag -1 Inf -> Infinity +dqmxg101 maxmag -0 Inf -> Infinity +dqmxg102 maxmag 0 Inf -> Infinity +dqmxg103 maxmag 1 Inf -> Infinity +dqmxg104 maxmag 1000 Inf -> Infinity +dqmxg105 maxmag Inf Inf -> Infinity + +dqmxg120 maxmag -Inf -Inf -> -Infinity +dqmxg121 maxmag -Inf -1000 -> -Infinity +dqmxg122 maxmag -Inf -1 -> -Infinity +dqmxg123 maxmag -Inf -0 -> -Infinity +dqmxg124 maxmag -Inf 0 -> -Infinity +dqmxg125 maxmag -Inf 1 -> -Infinity +dqmxg126 maxmag -Inf 1000 -> -Infinity +dqmxg127 maxmag -Inf Inf -> Infinity +dqmxg128 maxmag -Inf -Inf -> -Infinity +dqmxg129 maxmag -1000 -Inf -> -Infinity +dqmxg130 maxmag -1 -Inf -> -Infinity +dqmxg131 maxmag -0 -Inf -> -Infinity +dqmxg132 maxmag 0 -Inf -> -Infinity +dqmxg133 maxmag 1 -Inf -> -Infinity +dqmxg134 maxmag 1000 -Inf -> -Infinity +dqmxg135 maxmag Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +dqmxg141 maxmag NaN -Inf -> -Infinity +dqmxg142 maxmag NaN -1000 -> -1000 +dqmxg143 maxmag NaN -1 -> -1 +dqmxg144 maxmag NaN -0 -> -0 +dqmxg145 maxmag NaN 0 -> 0 +dqmxg146 maxmag NaN 1 -> 1 +dqmxg147 maxmag NaN 1000 -> 1000 +dqmxg148 maxmag NaN Inf -> Infinity +dqmxg149 maxmag NaN NaN -> NaN +dqmxg150 maxmag -Inf NaN -> -Infinity +dqmxg151 maxmag -1000 NaN -> -1000 +dqmxg152 maxmag -1 NaN -> -1 +dqmxg153 maxmag -0 NaN -> -0 +dqmxg154 maxmag 0 NaN -> 0 +dqmxg155 maxmag 1 NaN -> 1 +dqmxg156 maxmag 1000 NaN -> 1000 +dqmxg157 maxmag Inf NaN -> Infinity + +dqmxg161 maxmag sNaN -Inf -> NaN Invalid_operation +dqmxg162 maxmag sNaN -1000 -> NaN Invalid_operation +dqmxg163 maxmag sNaN -1 -> NaN Invalid_operation +dqmxg164 maxmag sNaN -0 -> NaN Invalid_operation +dqmxg165 maxmag sNaN 0 -> NaN Invalid_operation +dqmxg166 maxmag sNaN 1 -> NaN Invalid_operation +dqmxg167 maxmag sNaN 1000 -> NaN Invalid_operation +dqmxg168 maxmag sNaN NaN -> NaN Invalid_operation +dqmxg169 maxmag sNaN sNaN -> NaN Invalid_operation +dqmxg170 maxmag NaN sNaN -> NaN Invalid_operation +dqmxg171 maxmag -Inf sNaN -> NaN Invalid_operation +dqmxg172 maxmag -1000 sNaN -> NaN Invalid_operation +dqmxg173 maxmag -1 sNaN -> NaN Invalid_operation +dqmxg174 maxmag -0 sNaN -> NaN Invalid_operation +dqmxg175 maxmag 0 sNaN -> NaN Invalid_operation +dqmxg176 maxmag 1 sNaN -> NaN Invalid_operation +dqmxg177 maxmag 1000 sNaN -> NaN Invalid_operation +dqmxg178 maxmag Inf sNaN -> NaN Invalid_operation +dqmxg179 maxmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmxg181 maxmag NaN9 -Inf -> -Infinity +dqmxg182 maxmag NaN8 9 -> 9 +dqmxg183 maxmag -NaN7 Inf -> Infinity + +dqmxg184 maxmag -NaN1 NaN11 -> -NaN1 +dqmxg185 maxmag NaN2 NaN12 -> NaN2 +dqmxg186 maxmag -NaN13 -NaN7 -> -NaN13 +dqmxg187 maxmag NaN14 -NaN5 -> NaN14 + +dqmxg188 maxmag -Inf NaN4 -> -Infinity +dqmxg189 maxmag -9 -NaN3 -> -9 +dqmxg190 maxmag Inf NaN2 -> Infinity + +dqmxg191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation +dqmxg192 maxmag sNaN98 -1 -> NaN98 Invalid_operation +dqmxg193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation +dqmxg194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation +dqmxg195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation +dqmxg196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation +dqmxg197 maxmag 0 sNaN91 -> NaN91 Invalid_operation +dqmxg198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation +dqmxg199 maxmag NaN sNaN89 -> NaN89 Invalid_operation + +-- old rounding checks +dqmxg221 maxmag 12345678000 1 -> 12345678000 +dqmxg222 maxmag 1 12345678000 -> 12345678000 +dqmxg223 maxmag 1234567800 1 -> 1234567800 +dqmxg224 maxmag 1 1234567800 -> 1234567800 +dqmxg225 maxmag 1234567890 1 -> 1234567890 +dqmxg226 maxmag 1 1234567890 -> 1234567890 +dqmxg227 maxmag 1234567891 1 -> 1234567891 +dqmxg228 maxmag 1 1234567891 -> 1234567891 +dqmxg229 maxmag 12345678901 1 -> 12345678901 +dqmxg230 maxmag 1 12345678901 -> 12345678901 +dqmxg231 maxmag 1234567896 1 -> 1234567896 +dqmxg232 maxmag 1 1234567896 -> 1234567896 +dqmxg233 maxmag -1234567891 1 -> -1234567891 +dqmxg234 maxmag 1 -1234567891 -> -1234567891 +dqmxg235 maxmag -12345678901 1 -> -12345678901 +dqmxg236 maxmag 1 -12345678901 -> -12345678901 +dqmxg237 maxmag -1234567896 1 -> -1234567896 +dqmxg238 maxmag 1 -1234567896 -> -1234567896 + +-- from examples +dqmxg280 maxmag '3' '2' -> '3' +dqmxg281 maxmag '-10' '3' -> '-10' +dqmxg282 maxmag '1.0' '1' -> '1' +dqmxg283 maxmag '1' '1.0' -> '1' +dqmxg284 maxmag '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +dqmxg401 maxmag Inf 1.1 -> Infinity +dqmxg402 maxmag 1.1 1 -> 1.1 +dqmxg403 maxmag 1 1.0 -> 1 +dqmxg404 maxmag 1.0 0.1 -> 1.0 +dqmxg405 maxmag 0.1 0.10 -> 0.1 +dqmxg406 maxmag 0.10 0.100 -> 0.10 +dqmxg407 maxmag 0.10 0 -> 0.10 +dqmxg408 maxmag 0 0.0 -> 0 +dqmxg409 maxmag 0.0 -0 -> 0.0 +dqmxg410 maxmag 0.0 -0.0 -> 0.0 +dqmxg411 maxmag 0.00 -0.0 -> 0.00 +dqmxg412 maxmag 0.0 -0.00 -> 0.0 +dqmxg413 maxmag 0 -0.0 -> 0 +dqmxg414 maxmag 0 -0 -> 0 +dqmxg415 maxmag -0.0 -0 -> -0.0 +dqmxg416 maxmag -0 -0.100 -> -0.100 +dqmxg417 maxmag -0.100 -0.10 -> -0.100 +dqmxg418 maxmag -0.10 -0.1 -> -0.10 +dqmxg419 maxmag -0.1 -1.0 -> -1.0 +dqmxg420 maxmag -1.0 -1 -> -1.0 +dqmxg421 maxmag -1 -1.1 -> -1.1 +dqmxg423 maxmag -1.1 -Inf -> -Infinity +-- same with operands reversed +dqmxg431 maxmag 1.1 Inf -> Infinity +dqmxg432 maxmag 1 1.1 -> 1.1 +dqmxg433 maxmag 1.0 1 -> 1 +dqmxg434 maxmag 0.1 1.0 -> 1.0 +dqmxg435 maxmag 0.10 0.1 -> 0.1 +dqmxg436 maxmag 0.100 0.10 -> 0.10 +dqmxg437 maxmag 0 0.10 -> 0.10 +dqmxg438 maxmag 0.0 0 -> 0 +dqmxg439 maxmag -0 0.0 -> 0.0 +dqmxg440 maxmag -0.0 0.0 -> 0.0 +dqmxg441 maxmag -0.0 0.00 -> 0.00 +dqmxg442 maxmag -0.00 0.0 -> 0.0 +dqmxg443 maxmag -0.0 0 -> 0 +dqmxg444 maxmag -0 0 -> 0 +dqmxg445 maxmag -0 -0.0 -> -0.0 +dqmxg446 maxmag -0.100 -0 -> -0.100 +dqmxg447 maxmag -0.10 -0.100 -> -0.100 +dqmxg448 maxmag -0.1 -0.10 -> -0.10 +dqmxg449 maxmag -1.0 -0.1 -> -1.0 +dqmxg450 maxmag -1 -1.0 -> -1.0 +dqmxg451 maxmag -1.1 -1 -> -1.1 +dqmxg453 maxmag -Inf -1.1 -> -Infinity +-- largies +dqmxg460 maxmag 1000 1E+3 -> 1E+3 +dqmxg461 maxmag 1E+3 1000 -> 1E+3 +dqmxg462 maxmag 1000 -1E+3 -> 1000 +dqmxg463 maxmag 1E+3 -1000 -> 1E+3 +dqmxg464 maxmag -1000 1E+3 -> 1E+3 +dqmxg465 maxmag -1E+3 1000 -> 1000 +dqmxg466 maxmag -1000 -1E+3 -> -1000 +dqmxg467 maxmag -1E+3 -1000 -> -1000 + +-- subnormals +dqmxg510 maxmag 1.00E-6143 0 -> 1.00E-6143 +dqmxg511 maxmag 0.1E-6143 0 -> 1E-6144 Subnormal +dqmxg512 maxmag 0.10E-6143 0 -> 1.0E-6144 Subnormal +dqmxg513 maxmag 0.100E-6143 0 -> 1.00E-6144 Subnormal +dqmxg514 maxmag 0.01E-6143 0 -> 1E-6145 Subnormal +dqmxg515 maxmag 0.999E-6143 0 -> 9.99E-6144 Subnormal +dqmxg516 maxmag 0.099E-6143 0 -> 9.9E-6145 Subnormal +dqmxg517 maxmag 0.009E-6143 0 -> 9E-6146 Subnormal +dqmxg518 maxmag 0.001E-6143 0 -> 1E-6146 Subnormal +dqmxg519 maxmag 0.0009E-6143 0 -> 9E-6147 Subnormal +dqmxg520 maxmag 0.0001E-6143 0 -> 1E-6147 Subnormal + +dqmxg530 maxmag -1.00E-6143 0 -> -1.00E-6143 +dqmxg531 maxmag -0.1E-6143 0 -> -1E-6144 Subnormal +dqmxg532 maxmag -0.10E-6143 0 -> -1.0E-6144 Subnormal +dqmxg533 maxmag -0.100E-6143 0 -> -1.00E-6144 Subnormal +dqmxg534 maxmag -0.01E-6143 0 -> -1E-6145 Subnormal +dqmxg535 maxmag -0.999E-6143 0 -> -9.99E-6144 Subnormal +dqmxg536 maxmag -0.099E-6143 0 -> -9.9E-6145 Subnormal +dqmxg537 maxmag -0.009E-6143 0 -> -9E-6146 Subnormal +dqmxg538 maxmag -0.001E-6143 0 -> -1E-6146 Subnormal +dqmxg539 maxmag -0.0009E-6143 0 -> -9E-6147 Subnormal +dqmxg540 maxmag -0.0001E-6143 0 -> -1E-6147 Subnormal + +-- Null tests +dqmxg900 maxmag 10 # -> NaN Invalid_operation +dqmxg901 maxmag # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqMin.decTest b/Lib/test/decimaltestdata/dqMin.decTest index c87f4c54edc..53020398c59 100644 --- a/Lib/test/decimaltestdata/dqMin.decTest +++ b/Lib/test/decimaltestdata/dqMin.decTest @@ -1,309 +1,309 @@ ------------------------------------------------------------------------- --- dqMin.decTest -- decQuad minnum -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmin001 min -2 -2 -> -2 -dqmin002 min -2 -1 -> -2 -dqmin003 min -2 0 -> -2 -dqmin004 min -2 1 -> -2 -dqmin005 min -2 2 -> -2 -dqmin006 min -1 -2 -> -2 -dqmin007 min -1 -1 -> -1 -dqmin008 min -1 0 -> -1 -dqmin009 min -1 1 -> -1 -dqmin010 min -1 2 -> -1 -dqmin011 min 0 -2 -> -2 -dqmin012 min 0 -1 -> -1 -dqmin013 min 0 0 -> 0 -dqmin014 min 0 1 -> 0 -dqmin015 min 0 2 -> 0 -dqmin016 min 1 -2 -> -2 -dqmin017 min 1 -1 -> -1 -dqmin018 min 1 0 -> 0 -dqmin019 min 1 1 -> 1 -dqmin020 min 1 2 -> 1 -dqmin021 min 2 -2 -> -2 -dqmin022 min 2 -1 -> -1 -dqmin023 min 2 0 -> 0 -dqmin025 min 2 1 -> 1 -dqmin026 min 2 2 -> 2 - --- extended zeros -dqmin030 min 0 0 -> 0 -dqmin031 min 0 -0 -> -0 -dqmin032 min 0 -0.0 -> -0.0 -dqmin033 min 0 0.0 -> 0.0 -dqmin034 min -0 0 -> -0 -dqmin035 min -0 -0 -> -0 -dqmin036 min -0 -0.0 -> -0 -dqmin037 min -0 0.0 -> -0 -dqmin038 min 0.0 0 -> 0.0 -dqmin039 min 0.0 -0 -> -0 -dqmin040 min 0.0 -0.0 -> -0.0 -dqmin041 min 0.0 0.0 -> 0.0 -dqmin042 min -0.0 0 -> -0.0 -dqmin043 min -0.0 -0 -> -0 -dqmin044 min -0.0 -0.0 -> -0.0 -dqmin045 min -0.0 0.0 -> -0.0 - -dqmin046 min 0E1 -0E1 -> -0E+1 -dqmin047 min -0E1 0E2 -> -0E+1 -dqmin048 min 0E2 0E1 -> 0E+1 -dqmin049 min 0E1 0E2 -> 0E+1 -dqmin050 min -0E3 -0E2 -> -0E+3 -dqmin051 min -0E2 -0E3 -> -0E+3 - --- Specials -dqmin090 min Inf -Inf -> -Infinity -dqmin091 min Inf -1000 -> -1000 -dqmin092 min Inf -1 -> -1 -dqmin093 min Inf -0 -> -0 -dqmin094 min Inf 0 -> 0 -dqmin095 min Inf 1 -> 1 -dqmin096 min Inf 1000 -> 1000 -dqmin097 min Inf Inf -> Infinity -dqmin098 min -1000 Inf -> -1000 -dqmin099 min -Inf Inf -> -Infinity -dqmin100 min -1 Inf -> -1 -dqmin101 min -0 Inf -> -0 -dqmin102 min 0 Inf -> 0 -dqmin103 min 1 Inf -> 1 -dqmin104 min 1000 Inf -> 1000 -dqmin105 min Inf Inf -> Infinity - -dqmin120 min -Inf -Inf -> -Infinity -dqmin121 min -Inf -1000 -> -Infinity -dqmin122 min -Inf -1 -> -Infinity -dqmin123 min -Inf -0 -> -Infinity -dqmin124 min -Inf 0 -> -Infinity -dqmin125 min -Inf 1 -> -Infinity -dqmin126 min -Inf 1000 -> -Infinity -dqmin127 min -Inf Inf -> -Infinity -dqmin128 min -Inf -Inf -> -Infinity -dqmin129 min -1000 -Inf -> -Infinity -dqmin130 min -1 -Inf -> -Infinity -dqmin131 min -0 -Inf -> -Infinity -dqmin132 min 0 -Inf -> -Infinity -dqmin133 min 1 -Inf -> -Infinity -dqmin134 min 1000 -Inf -> -Infinity -dqmin135 min Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -dqmin141 min NaN -Inf -> -Infinity -dqmin142 min NaN -1000 -> -1000 -dqmin143 min NaN -1 -> -1 -dqmin144 min NaN -0 -> -0 -dqmin145 min NaN 0 -> 0 -dqmin146 min NaN 1 -> 1 -dqmin147 min NaN 1000 -> 1000 -dqmin148 min NaN Inf -> Infinity -dqmin149 min NaN NaN -> NaN -dqmin150 min -Inf NaN -> -Infinity -dqmin151 min -1000 NaN -> -1000 -dqmin152 min -1 -NaN -> -1 -dqmin153 min -0 NaN -> -0 -dqmin154 min 0 -NaN -> 0 -dqmin155 min 1 NaN -> 1 -dqmin156 min 1000 NaN -> 1000 -dqmin157 min Inf NaN -> Infinity - -dqmin161 min sNaN -Inf -> NaN Invalid_operation -dqmin162 min sNaN -1000 -> NaN Invalid_operation -dqmin163 min sNaN -1 -> NaN Invalid_operation -dqmin164 min sNaN -0 -> NaN Invalid_operation -dqmin165 min -sNaN 0 -> -NaN Invalid_operation -dqmin166 min -sNaN 1 -> -NaN Invalid_operation -dqmin167 min sNaN 1000 -> NaN Invalid_operation -dqmin168 min sNaN NaN -> NaN Invalid_operation -dqmin169 min sNaN sNaN -> NaN Invalid_operation -dqmin170 min NaN sNaN -> NaN Invalid_operation -dqmin171 min -Inf sNaN -> NaN Invalid_operation -dqmin172 min -1000 sNaN -> NaN Invalid_operation -dqmin173 min -1 sNaN -> NaN Invalid_operation -dqmin174 min -0 sNaN -> NaN Invalid_operation -dqmin175 min 0 sNaN -> NaN Invalid_operation -dqmin176 min 1 sNaN -> NaN Invalid_operation -dqmin177 min 1000 sNaN -> NaN Invalid_operation -dqmin178 min Inf sNaN -> NaN Invalid_operation -dqmin179 min NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmin181 min NaN9 -Inf -> -Infinity -dqmin182 min -NaN8 9990 -> 9990 -dqmin183 min NaN71 Inf -> Infinity - -dqmin184 min NaN1 NaN54 -> NaN1 -dqmin185 min NaN22 -NaN53 -> NaN22 -dqmin186 min -NaN3 NaN6 -> -NaN3 -dqmin187 min -NaN44 NaN7 -> -NaN44 - -dqmin188 min -Inf NaN41 -> -Infinity -dqmin189 min -9999 -NaN33 -> -9999 -dqmin190 min Inf NaN2 -> Infinity - -dqmin191 min sNaN99 -Inf -> NaN99 Invalid_operation -dqmin192 min sNaN98 -11 -> NaN98 Invalid_operation -dqmin193 min -sNaN97 NaN8 -> -NaN97 Invalid_operation -dqmin194 min sNaN69 sNaN94 -> NaN69 Invalid_operation -dqmin195 min NaN95 sNaN93 -> NaN93 Invalid_operation -dqmin196 min -Inf sNaN92 -> NaN92 Invalid_operation -dqmin197 min 088 sNaN91 -> NaN91 Invalid_operation -dqmin198 min Inf -sNaN90 -> -NaN90 Invalid_operation -dqmin199 min NaN sNaN86 -> NaN86 Invalid_operation - --- old rounding checks -dqmin221 min -12345678000 1 -> -12345678000 -dqmin222 min 1 -12345678000 -> -12345678000 -dqmin223 min -1234567800 1 -> -1234567800 -dqmin224 min 1 -1234567800 -> -1234567800 -dqmin225 min -1234567890 1 -> -1234567890 -dqmin226 min 1 -1234567890 -> -1234567890 -dqmin227 min -1234567891 1 -> -1234567891 -dqmin228 min 1 -1234567891 -> -1234567891 -dqmin229 min -12345678901 1 -> -12345678901 -dqmin230 min 1 -12345678901 -> -12345678901 -dqmin231 min -1234567896 1 -> -1234567896 -dqmin232 min 1 -1234567896 -> -1234567896 -dqmin233 min 1234567891 1 -> 1 -dqmin234 min 1 1234567891 -> 1 -dqmin235 min 12345678901 1 -> 1 -dqmin236 min 1 12345678901 -> 1 -dqmin237 min 1234567896 1 -> 1 -dqmin238 min 1 1234567896 -> 1 - --- from examples -dqmin280 min '3' '2' -> '2' -dqmin281 min '-10' '3' -> '-10' -dqmin282 min '1.0' '1' -> '1.0' -dqmin283 min '1' '1.0' -> '1.0' -dqmin284 min '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -dqmin401 min Inf 1.1 -> 1.1 -dqmin402 min 1.1 1 -> 1 -dqmin403 min 1 1.0 -> 1.0 -dqmin404 min 1.0 0.1 -> 0.1 -dqmin405 min 0.1 0.10 -> 0.10 -dqmin406 min 0.10 0.100 -> 0.100 -dqmin407 min 0.10 0 -> 0 -dqmin408 min 0 0.0 -> 0.0 -dqmin409 min 0.0 -0 -> -0 -dqmin410 min 0.0 -0.0 -> -0.0 -dqmin411 min 0.00 -0.0 -> -0.0 -dqmin412 min 0.0 -0.00 -> -0.00 -dqmin413 min 0 -0.0 -> -0.0 -dqmin414 min 0 -0 -> -0 -dqmin415 min -0.0 -0 -> -0 -dqmin416 min -0 -0.100 -> -0.100 -dqmin417 min -0.100 -0.10 -> -0.10 -dqmin418 min -0.10 -0.1 -> -0.1 -dqmin419 min -0.1 -1.0 -> -1.0 -dqmin420 min -1.0 -1 -> -1 -dqmin421 min -1 -1.1 -> -1.1 -dqmin423 min -1.1 -Inf -> -Infinity --- same with operands reversed -dqmin431 min 1.1 Inf -> 1.1 -dqmin432 min 1 1.1 -> 1 -dqmin433 min 1.0 1 -> 1.0 -dqmin434 min 0.1 1.0 -> 0.1 -dqmin435 min 0.10 0.1 -> 0.10 -dqmin436 min 0.100 0.10 -> 0.100 -dqmin437 min 0 0.10 -> 0 -dqmin438 min 0.0 0 -> 0.0 -dqmin439 min -0 0.0 -> -0 -dqmin440 min -0.0 0.0 -> -0.0 -dqmin441 min -0.0 0.00 -> -0.0 -dqmin442 min -0.00 0.0 -> -0.00 -dqmin443 min -0.0 0 -> -0.0 -dqmin444 min -0 0 -> -0 -dqmin445 min -0 -0.0 -> -0 -dqmin446 min -0.100 -0 -> -0.100 -dqmin447 min -0.10 -0.100 -> -0.10 -dqmin448 min -0.1 -0.10 -> -0.1 -dqmin449 min -1.0 -0.1 -> -1.0 -dqmin450 min -1 -1.0 -> -1 -dqmin451 min -1.1 -1 -> -1.1 -dqmin453 min -Inf -1.1 -> -Infinity --- largies -dqmin460 min 1000 1E+3 -> 1000 -dqmin461 min 1E+3 1000 -> 1000 -dqmin462 min 1000 -1E+3 -> -1E+3 -dqmin463 min 1E+3 -384 -> -384 -dqmin464 min -384 1E+3 -> -384 -dqmin465 min -1E+3 1000 -> -1E+3 -dqmin466 min -384 -1E+3 -> -1E+3 -dqmin467 min -1E+3 -384 -> -1E+3 - --- misalignment traps for little-endian -dqmin471 min 1.0 0.1 -> 0.1 -dqmin472 min 0.1 1.0 -> 0.1 -dqmin473 min 10.0 0.1 -> 0.1 -dqmin474 min 0.1 10.0 -> 0.1 -dqmin475 min 100 1.0 -> 1.0 -dqmin476 min 1.0 100 -> 1.0 -dqmin477 min 1000 10.0 -> 10.0 -dqmin478 min 10.0 1000 -> 10.0 -dqmin479 min 10000 100.0 -> 100.0 -dqmin480 min 100.0 10000 -> 100.0 -dqmin481 min 100000 1000.0 -> 1000.0 -dqmin482 min 1000.0 100000 -> 1000.0 -dqmin483 min 1000000 10000.0 -> 10000.0 -dqmin484 min 10000.0 1000000 -> 10000.0 - --- subnormals -dqmin510 min 1.00E-6143 0 -> 0 -dqmin511 min 0.1E-6143 0 -> 0 -dqmin512 min 0.10E-6143 0 -> 0 -dqmin513 min 0.100E-6143 0 -> 0 -dqmin514 min 0.01E-6143 0 -> 0 -dqmin515 min 0.999E-6143 0 -> 0 -dqmin516 min 0.099E-6143 0 -> 0 -dqmin517 min 0.009E-6143 0 -> 0 -dqmin518 min 0.001E-6143 0 -> 0 -dqmin519 min 0.0009E-6143 0 -> 0 -dqmin520 min 0.0001E-6143 0 -> 0 - -dqmin530 min -1.00E-6143 0 -> -1.00E-6143 -dqmin531 min -0.1E-6143 0 -> -1E-6144 Subnormal -dqmin532 min -0.10E-6143 0 -> -1.0E-6144 Subnormal -dqmin533 min -0.100E-6143 0 -> -1.00E-6144 Subnormal -dqmin534 min -0.01E-6143 0 -> -1E-6145 Subnormal -dqmin535 min -0.999E-6143 0 -> -9.99E-6144 Subnormal -dqmin536 min -0.099E-6143 0 -> -9.9E-6145 Subnormal -dqmin537 min -0.009E-6143 0 -> -9E-6146 Subnormal -dqmin538 min -0.001E-6143 0 -> -1E-6146 Subnormal -dqmin539 min -0.0009E-6143 0 -> -9E-6147 Subnormal -dqmin540 min -0.0001E-6143 0 -> -1E-6147 Subnormal - - --- Null tests -dqmin900 min 10 # -> NaN Invalid_operation -dqmin901 min # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqMin.decTest -- decQuad minnum -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmin001 min -2 -2 -> -2 +dqmin002 min -2 -1 -> -2 +dqmin003 min -2 0 -> -2 +dqmin004 min -2 1 -> -2 +dqmin005 min -2 2 -> -2 +dqmin006 min -1 -2 -> -2 +dqmin007 min -1 -1 -> -1 +dqmin008 min -1 0 -> -1 +dqmin009 min -1 1 -> -1 +dqmin010 min -1 2 -> -1 +dqmin011 min 0 -2 -> -2 +dqmin012 min 0 -1 -> -1 +dqmin013 min 0 0 -> 0 +dqmin014 min 0 1 -> 0 +dqmin015 min 0 2 -> 0 +dqmin016 min 1 -2 -> -2 +dqmin017 min 1 -1 -> -1 +dqmin018 min 1 0 -> 0 +dqmin019 min 1 1 -> 1 +dqmin020 min 1 2 -> 1 +dqmin021 min 2 -2 -> -2 +dqmin022 min 2 -1 -> -1 +dqmin023 min 2 0 -> 0 +dqmin025 min 2 1 -> 1 +dqmin026 min 2 2 -> 2 + +-- extended zeros +dqmin030 min 0 0 -> 0 +dqmin031 min 0 -0 -> -0 +dqmin032 min 0 -0.0 -> -0.0 +dqmin033 min 0 0.0 -> 0.0 +dqmin034 min -0 0 -> -0 +dqmin035 min -0 -0 -> -0 +dqmin036 min -0 -0.0 -> -0 +dqmin037 min -0 0.0 -> -0 +dqmin038 min 0.0 0 -> 0.0 +dqmin039 min 0.0 -0 -> -0 +dqmin040 min 0.0 -0.0 -> -0.0 +dqmin041 min 0.0 0.0 -> 0.0 +dqmin042 min -0.0 0 -> -0.0 +dqmin043 min -0.0 -0 -> -0 +dqmin044 min -0.0 -0.0 -> -0.0 +dqmin045 min -0.0 0.0 -> -0.0 + +dqmin046 min 0E1 -0E1 -> -0E+1 +dqmin047 min -0E1 0E2 -> -0E+1 +dqmin048 min 0E2 0E1 -> 0E+1 +dqmin049 min 0E1 0E2 -> 0E+1 +dqmin050 min -0E3 -0E2 -> -0E+3 +dqmin051 min -0E2 -0E3 -> -0E+3 + +-- Specials +dqmin090 min Inf -Inf -> -Infinity +dqmin091 min Inf -1000 -> -1000 +dqmin092 min Inf -1 -> -1 +dqmin093 min Inf -0 -> -0 +dqmin094 min Inf 0 -> 0 +dqmin095 min Inf 1 -> 1 +dqmin096 min Inf 1000 -> 1000 +dqmin097 min Inf Inf -> Infinity +dqmin098 min -1000 Inf -> -1000 +dqmin099 min -Inf Inf -> -Infinity +dqmin100 min -1 Inf -> -1 +dqmin101 min -0 Inf -> -0 +dqmin102 min 0 Inf -> 0 +dqmin103 min 1 Inf -> 1 +dqmin104 min 1000 Inf -> 1000 +dqmin105 min Inf Inf -> Infinity + +dqmin120 min -Inf -Inf -> -Infinity +dqmin121 min -Inf -1000 -> -Infinity +dqmin122 min -Inf -1 -> -Infinity +dqmin123 min -Inf -0 -> -Infinity +dqmin124 min -Inf 0 -> -Infinity +dqmin125 min -Inf 1 -> -Infinity +dqmin126 min -Inf 1000 -> -Infinity +dqmin127 min -Inf Inf -> -Infinity +dqmin128 min -Inf -Inf -> -Infinity +dqmin129 min -1000 -Inf -> -Infinity +dqmin130 min -1 -Inf -> -Infinity +dqmin131 min -0 -Inf -> -Infinity +dqmin132 min 0 -Inf -> -Infinity +dqmin133 min 1 -Inf -> -Infinity +dqmin134 min 1000 -Inf -> -Infinity +dqmin135 min Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +dqmin141 min NaN -Inf -> -Infinity +dqmin142 min NaN -1000 -> -1000 +dqmin143 min NaN -1 -> -1 +dqmin144 min NaN -0 -> -0 +dqmin145 min NaN 0 -> 0 +dqmin146 min NaN 1 -> 1 +dqmin147 min NaN 1000 -> 1000 +dqmin148 min NaN Inf -> Infinity +dqmin149 min NaN NaN -> NaN +dqmin150 min -Inf NaN -> -Infinity +dqmin151 min -1000 NaN -> -1000 +dqmin152 min -1 -NaN -> -1 +dqmin153 min -0 NaN -> -0 +dqmin154 min 0 -NaN -> 0 +dqmin155 min 1 NaN -> 1 +dqmin156 min 1000 NaN -> 1000 +dqmin157 min Inf NaN -> Infinity + +dqmin161 min sNaN -Inf -> NaN Invalid_operation +dqmin162 min sNaN -1000 -> NaN Invalid_operation +dqmin163 min sNaN -1 -> NaN Invalid_operation +dqmin164 min sNaN -0 -> NaN Invalid_operation +dqmin165 min -sNaN 0 -> -NaN Invalid_operation +dqmin166 min -sNaN 1 -> -NaN Invalid_operation +dqmin167 min sNaN 1000 -> NaN Invalid_operation +dqmin168 min sNaN NaN -> NaN Invalid_operation +dqmin169 min sNaN sNaN -> NaN Invalid_operation +dqmin170 min NaN sNaN -> NaN Invalid_operation +dqmin171 min -Inf sNaN -> NaN Invalid_operation +dqmin172 min -1000 sNaN -> NaN Invalid_operation +dqmin173 min -1 sNaN -> NaN Invalid_operation +dqmin174 min -0 sNaN -> NaN Invalid_operation +dqmin175 min 0 sNaN -> NaN Invalid_operation +dqmin176 min 1 sNaN -> NaN Invalid_operation +dqmin177 min 1000 sNaN -> NaN Invalid_operation +dqmin178 min Inf sNaN -> NaN Invalid_operation +dqmin179 min NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmin181 min NaN9 -Inf -> -Infinity +dqmin182 min -NaN8 9990 -> 9990 +dqmin183 min NaN71 Inf -> Infinity + +dqmin184 min NaN1 NaN54 -> NaN1 +dqmin185 min NaN22 -NaN53 -> NaN22 +dqmin186 min -NaN3 NaN6 -> -NaN3 +dqmin187 min -NaN44 NaN7 -> -NaN44 + +dqmin188 min -Inf NaN41 -> -Infinity +dqmin189 min -9999 -NaN33 -> -9999 +dqmin190 min Inf NaN2 -> Infinity + +dqmin191 min sNaN99 -Inf -> NaN99 Invalid_operation +dqmin192 min sNaN98 -11 -> NaN98 Invalid_operation +dqmin193 min -sNaN97 NaN8 -> -NaN97 Invalid_operation +dqmin194 min sNaN69 sNaN94 -> NaN69 Invalid_operation +dqmin195 min NaN95 sNaN93 -> NaN93 Invalid_operation +dqmin196 min -Inf sNaN92 -> NaN92 Invalid_operation +dqmin197 min 088 sNaN91 -> NaN91 Invalid_operation +dqmin198 min Inf -sNaN90 -> -NaN90 Invalid_operation +dqmin199 min NaN sNaN86 -> NaN86 Invalid_operation + +-- old rounding checks +dqmin221 min -12345678000 1 -> -12345678000 +dqmin222 min 1 -12345678000 -> -12345678000 +dqmin223 min -1234567800 1 -> -1234567800 +dqmin224 min 1 -1234567800 -> -1234567800 +dqmin225 min -1234567890 1 -> -1234567890 +dqmin226 min 1 -1234567890 -> -1234567890 +dqmin227 min -1234567891 1 -> -1234567891 +dqmin228 min 1 -1234567891 -> -1234567891 +dqmin229 min -12345678901 1 -> -12345678901 +dqmin230 min 1 -12345678901 -> -12345678901 +dqmin231 min -1234567896 1 -> -1234567896 +dqmin232 min 1 -1234567896 -> -1234567896 +dqmin233 min 1234567891 1 -> 1 +dqmin234 min 1 1234567891 -> 1 +dqmin235 min 12345678901 1 -> 1 +dqmin236 min 1 12345678901 -> 1 +dqmin237 min 1234567896 1 -> 1 +dqmin238 min 1 1234567896 -> 1 + +-- from examples +dqmin280 min '3' '2' -> '2' +dqmin281 min '-10' '3' -> '-10' +dqmin282 min '1.0' '1' -> '1.0' +dqmin283 min '1' '1.0' -> '1.0' +dqmin284 min '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +dqmin401 min Inf 1.1 -> 1.1 +dqmin402 min 1.1 1 -> 1 +dqmin403 min 1 1.0 -> 1.0 +dqmin404 min 1.0 0.1 -> 0.1 +dqmin405 min 0.1 0.10 -> 0.10 +dqmin406 min 0.10 0.100 -> 0.100 +dqmin407 min 0.10 0 -> 0 +dqmin408 min 0 0.0 -> 0.0 +dqmin409 min 0.0 -0 -> -0 +dqmin410 min 0.0 -0.0 -> -0.0 +dqmin411 min 0.00 -0.0 -> -0.0 +dqmin412 min 0.0 -0.00 -> -0.00 +dqmin413 min 0 -0.0 -> -0.0 +dqmin414 min 0 -0 -> -0 +dqmin415 min -0.0 -0 -> -0 +dqmin416 min -0 -0.100 -> -0.100 +dqmin417 min -0.100 -0.10 -> -0.10 +dqmin418 min -0.10 -0.1 -> -0.1 +dqmin419 min -0.1 -1.0 -> -1.0 +dqmin420 min -1.0 -1 -> -1 +dqmin421 min -1 -1.1 -> -1.1 +dqmin423 min -1.1 -Inf -> -Infinity +-- same with operands reversed +dqmin431 min 1.1 Inf -> 1.1 +dqmin432 min 1 1.1 -> 1 +dqmin433 min 1.0 1 -> 1.0 +dqmin434 min 0.1 1.0 -> 0.1 +dqmin435 min 0.10 0.1 -> 0.10 +dqmin436 min 0.100 0.10 -> 0.100 +dqmin437 min 0 0.10 -> 0 +dqmin438 min 0.0 0 -> 0.0 +dqmin439 min -0 0.0 -> -0 +dqmin440 min -0.0 0.0 -> -0.0 +dqmin441 min -0.0 0.00 -> -0.0 +dqmin442 min -0.00 0.0 -> -0.00 +dqmin443 min -0.0 0 -> -0.0 +dqmin444 min -0 0 -> -0 +dqmin445 min -0 -0.0 -> -0 +dqmin446 min -0.100 -0 -> -0.100 +dqmin447 min -0.10 -0.100 -> -0.10 +dqmin448 min -0.1 -0.10 -> -0.1 +dqmin449 min -1.0 -0.1 -> -1.0 +dqmin450 min -1 -1.0 -> -1 +dqmin451 min -1.1 -1 -> -1.1 +dqmin453 min -Inf -1.1 -> -Infinity +-- largies +dqmin460 min 1000 1E+3 -> 1000 +dqmin461 min 1E+3 1000 -> 1000 +dqmin462 min 1000 -1E+3 -> -1E+3 +dqmin463 min 1E+3 -384 -> -384 +dqmin464 min -384 1E+3 -> -384 +dqmin465 min -1E+3 1000 -> -1E+3 +dqmin466 min -384 -1E+3 -> -1E+3 +dqmin467 min -1E+3 -384 -> -1E+3 + +-- misalignment traps for little-endian +dqmin471 min 1.0 0.1 -> 0.1 +dqmin472 min 0.1 1.0 -> 0.1 +dqmin473 min 10.0 0.1 -> 0.1 +dqmin474 min 0.1 10.0 -> 0.1 +dqmin475 min 100 1.0 -> 1.0 +dqmin476 min 1.0 100 -> 1.0 +dqmin477 min 1000 10.0 -> 10.0 +dqmin478 min 10.0 1000 -> 10.0 +dqmin479 min 10000 100.0 -> 100.0 +dqmin480 min 100.0 10000 -> 100.0 +dqmin481 min 100000 1000.0 -> 1000.0 +dqmin482 min 1000.0 100000 -> 1000.0 +dqmin483 min 1000000 10000.0 -> 10000.0 +dqmin484 min 10000.0 1000000 -> 10000.0 + +-- subnormals +dqmin510 min 1.00E-6143 0 -> 0 +dqmin511 min 0.1E-6143 0 -> 0 +dqmin512 min 0.10E-6143 0 -> 0 +dqmin513 min 0.100E-6143 0 -> 0 +dqmin514 min 0.01E-6143 0 -> 0 +dqmin515 min 0.999E-6143 0 -> 0 +dqmin516 min 0.099E-6143 0 -> 0 +dqmin517 min 0.009E-6143 0 -> 0 +dqmin518 min 0.001E-6143 0 -> 0 +dqmin519 min 0.0009E-6143 0 -> 0 +dqmin520 min 0.0001E-6143 0 -> 0 + +dqmin530 min -1.00E-6143 0 -> -1.00E-6143 +dqmin531 min -0.1E-6143 0 -> -1E-6144 Subnormal +dqmin532 min -0.10E-6143 0 -> -1.0E-6144 Subnormal +dqmin533 min -0.100E-6143 0 -> -1.00E-6144 Subnormal +dqmin534 min -0.01E-6143 0 -> -1E-6145 Subnormal +dqmin535 min -0.999E-6143 0 -> -9.99E-6144 Subnormal +dqmin536 min -0.099E-6143 0 -> -9.9E-6145 Subnormal +dqmin537 min -0.009E-6143 0 -> -9E-6146 Subnormal +dqmin538 min -0.001E-6143 0 -> -1E-6146 Subnormal +dqmin539 min -0.0009E-6143 0 -> -9E-6147 Subnormal +dqmin540 min -0.0001E-6143 0 -> -1E-6147 Subnormal + + +-- Null tests +dqmin900 min 10 # -> NaN Invalid_operation +dqmin901 min # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqMinMag.decTest b/Lib/test/decimaltestdata/dqMinMag.decTest index edc2e476ace..71b886fb588 100644 --- a/Lib/test/decimaltestdata/dqMinMag.decTest +++ b/Lib/test/decimaltestdata/dqMinMag.decTest @@ -1,293 +1,293 @@ ------------------------------------------------------------------------- --- dqMinMag.decTest -- decQuad minnummag -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmng001 minmag -2 -2 -> -2 -dqmng002 minmag -2 -1 -> -1 -dqmng003 minmag -2 0 -> 0 -dqmng004 minmag -2 1 -> 1 -dqmng005 minmag -2 2 -> -2 -dqmng006 minmag -1 -2 -> -1 -dqmng007 minmag -1 -1 -> -1 -dqmng008 minmag -1 0 -> 0 -dqmng009 minmag -1 1 -> -1 -dqmng010 minmag -1 2 -> -1 -dqmng011 minmag 0 -2 -> 0 -dqmng012 minmag 0 -1 -> 0 -dqmng013 minmag 0 0 -> 0 -dqmng014 minmag 0 1 -> 0 -dqmng015 minmag 0 2 -> 0 -dqmng016 minmag 1 -2 -> 1 -dqmng017 minmag 1 -1 -> -1 -dqmng018 minmag 1 0 -> 0 -dqmng019 minmag 1 1 -> 1 -dqmng020 minmag 1 2 -> 1 -dqmng021 minmag 2 -2 -> -2 -dqmng022 minmag 2 -1 -> -1 -dqmng023 minmag 2 0 -> 0 -dqmng025 minmag 2 1 -> 1 -dqmng026 minmag 2 2 -> 2 - --- extended zeros -dqmng030 minmag 0 0 -> 0 -dqmng031 minmag 0 -0 -> -0 -dqmng032 minmag 0 -0.0 -> -0.0 -dqmng033 minmag 0 0.0 -> 0.0 -dqmng034 minmag -0 0 -> -0 -dqmng035 minmag -0 -0 -> -0 -dqmng036 minmag -0 -0.0 -> -0 -dqmng037 minmag -0 0.0 -> -0 -dqmng038 minmag 0.0 0 -> 0.0 -dqmng039 minmag 0.0 -0 -> -0 -dqmng040 minmag 0.0 -0.0 -> -0.0 -dqmng041 minmag 0.0 0.0 -> 0.0 -dqmng042 minmag -0.0 0 -> -0.0 -dqmng043 minmag -0.0 -0 -> -0 -dqmng044 minmag -0.0 -0.0 -> -0.0 -dqmng045 minmag -0.0 0.0 -> -0.0 - -dqmng046 minmag 0E1 -0E1 -> -0E+1 -dqmng047 minmag -0E1 0E2 -> -0E+1 -dqmng048 minmag 0E2 0E1 -> 0E+1 -dqmng049 minmag 0E1 0E2 -> 0E+1 -dqmng050 minmag -0E3 -0E2 -> -0E+3 -dqmng051 minmag -0E2 -0E3 -> -0E+3 - --- Specials -dqmng090 minmag Inf -Inf -> -Infinity -dqmng091 minmag Inf -1000 -> -1000 -dqmng092 minmag Inf -1 -> -1 -dqmng093 minmag Inf -0 -> -0 -dqmng094 minmag Inf 0 -> 0 -dqmng095 minmag Inf 1 -> 1 -dqmng096 minmag Inf 1000 -> 1000 -dqmng097 minmag Inf Inf -> Infinity -dqmng098 minmag -1000 Inf -> -1000 -dqmng099 minmag -Inf Inf -> -Infinity -dqmng100 minmag -1 Inf -> -1 -dqmng101 minmag -0 Inf -> -0 -dqmng102 minmag 0 Inf -> 0 -dqmng103 minmag 1 Inf -> 1 -dqmng104 minmag 1000 Inf -> 1000 -dqmng105 minmag Inf Inf -> Infinity - -dqmng120 minmag -Inf -Inf -> -Infinity -dqmng121 minmag -Inf -1000 -> -1000 -dqmng122 minmag -Inf -1 -> -1 -dqmng123 minmag -Inf -0 -> -0 -dqmng124 minmag -Inf 0 -> 0 -dqmng125 minmag -Inf 1 -> 1 -dqmng126 minmag -Inf 1000 -> 1000 -dqmng127 minmag -Inf Inf -> -Infinity -dqmng128 minmag -Inf -Inf -> -Infinity -dqmng129 minmag -1000 -Inf -> -1000 -dqmng130 minmag -1 -Inf -> -1 -dqmng131 minmag -0 -Inf -> -0 -dqmng132 minmag 0 -Inf -> 0 -dqmng133 minmag 1 -Inf -> 1 -dqmng134 minmag 1000 -Inf -> 1000 -dqmng135 minmag Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -dqmng141 minmag NaN -Inf -> -Infinity -dqmng142 minmag NaN -1000 -> -1000 -dqmng143 minmag NaN -1 -> -1 -dqmng144 minmag NaN -0 -> -0 -dqmng145 minmag NaN 0 -> 0 -dqmng146 minmag NaN 1 -> 1 -dqmng147 minmag NaN 1000 -> 1000 -dqmng148 minmag NaN Inf -> Infinity -dqmng149 minmag NaN NaN -> NaN -dqmng150 minmag -Inf NaN -> -Infinity -dqmng151 minmag -1000 NaN -> -1000 -dqmng152 minmag -1 -NaN -> -1 -dqmng153 minmag -0 NaN -> -0 -dqmng154 minmag 0 -NaN -> 0 -dqmng155 minmag 1 NaN -> 1 -dqmng156 minmag 1000 NaN -> 1000 -dqmng157 minmag Inf NaN -> Infinity - -dqmng161 minmag sNaN -Inf -> NaN Invalid_operation -dqmng162 minmag sNaN -1000 -> NaN Invalid_operation -dqmng163 minmag sNaN -1 -> NaN Invalid_operation -dqmng164 minmag sNaN -0 -> NaN Invalid_operation -dqmng165 minmag -sNaN 0 -> -NaN Invalid_operation -dqmng166 minmag -sNaN 1 -> -NaN Invalid_operation -dqmng167 minmag sNaN 1000 -> NaN Invalid_operation -dqmng168 minmag sNaN NaN -> NaN Invalid_operation -dqmng169 minmag sNaN sNaN -> NaN Invalid_operation -dqmng170 minmag NaN sNaN -> NaN Invalid_operation -dqmng171 minmag -Inf sNaN -> NaN Invalid_operation -dqmng172 minmag -1000 sNaN -> NaN Invalid_operation -dqmng173 minmag -1 sNaN -> NaN Invalid_operation -dqmng174 minmag -0 sNaN -> NaN Invalid_operation -dqmng175 minmag 0 sNaN -> NaN Invalid_operation -dqmng176 minmag 1 sNaN -> NaN Invalid_operation -dqmng177 minmag 1000 sNaN -> NaN Invalid_operation -dqmng178 minmag Inf sNaN -> NaN Invalid_operation -dqmng179 minmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmng181 minmag NaN9 -Inf -> -Infinity -dqmng182 minmag -NaN8 9990 -> 9990 -dqmng183 minmag NaN71 Inf -> Infinity - -dqmng184 minmag NaN1 NaN54 -> NaN1 -dqmng185 minmag NaN22 -NaN53 -> NaN22 -dqmng186 minmag -NaN3 NaN6 -> -NaN3 -dqmng187 minmag -NaN44 NaN7 -> -NaN44 - -dqmng188 minmag -Inf NaN41 -> -Infinity -dqmng189 minmag -9999 -NaN33 -> -9999 -dqmng190 minmag Inf NaN2 -> Infinity - -dqmng191 minmag sNaN99 -Inf -> NaN99 Invalid_operation -dqmng192 minmag sNaN98 -11 -> NaN98 Invalid_operation -dqmng193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation -dqmng194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation -dqmng195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation -dqmng196 minmag -Inf sNaN92 -> NaN92 Invalid_operation -dqmng197 minmag 088 sNaN91 -> NaN91 Invalid_operation -dqmng198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation -dqmng199 minmag NaN sNaN86 -> NaN86 Invalid_operation - --- old rounding checks -dqmng221 minmag -12345678000 1 -> 1 -dqmng222 minmag 1 -12345678000 -> 1 -dqmng223 minmag -1234567800 1 -> 1 -dqmng224 minmag 1 -1234567800 -> 1 -dqmng225 minmag -1234567890 1 -> 1 -dqmng226 minmag 1 -1234567890 -> 1 -dqmng227 minmag -1234567891 1 -> 1 -dqmng228 minmag 1 -1234567891 -> 1 -dqmng229 minmag -12345678901 1 -> 1 -dqmng230 minmag 1 -12345678901 -> 1 -dqmng231 minmag -1234567896 1 -> 1 -dqmng232 minmag 1 -1234567896 -> 1 -dqmng233 minmag 1234567891 1 -> 1 -dqmng234 minmag 1 1234567891 -> 1 -dqmng235 minmag 12345678901 1 -> 1 -dqmng236 minmag 1 12345678901 -> 1 -dqmng237 minmag 1234567896 1 -> 1 -dqmng238 minmag 1 1234567896 -> 1 - --- from examples -dqmng280 minmag '3' '2' -> '2' -dqmng281 minmag '-10' '3' -> '3' -dqmng282 minmag '1.0' '1' -> '1.0' -dqmng283 minmag '1' '1.0' -> '1.0' -dqmng284 minmag '7' 'NaN' -> '7' - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -dqmng401 minmag Inf 1.1 -> 1.1 -dqmng402 minmag 1.1 1 -> 1 -dqmng403 minmag 1 1.0 -> 1.0 -dqmng404 minmag 1.0 0.1 -> 0.1 -dqmng405 minmag 0.1 0.10 -> 0.10 -dqmng406 minmag 0.10 0.100 -> 0.100 -dqmng407 minmag 0.10 0 -> 0 -dqmng408 minmag 0 0.0 -> 0.0 -dqmng409 minmag 0.0 -0 -> -0 -dqmng410 minmag 0.0 -0.0 -> -0.0 -dqmng411 minmag 0.00 -0.0 -> -0.0 -dqmng412 minmag 0.0 -0.00 -> -0.00 -dqmng413 minmag 0 -0.0 -> -0.0 -dqmng414 minmag 0 -0 -> -0 -dqmng415 minmag -0.0 -0 -> -0 -dqmng416 minmag -0 -0.100 -> -0 -dqmng417 minmag -0.100 -0.10 -> -0.10 -dqmng418 minmag -0.10 -0.1 -> -0.1 -dqmng419 minmag -0.1 -1.0 -> -0.1 -dqmng420 minmag -1.0 -1 -> -1 -dqmng421 minmag -1 -1.1 -> -1 -dqmng423 minmag -1.1 -Inf -> -1.1 --- same with operands reversed -dqmng431 minmag 1.1 Inf -> 1.1 -dqmng432 minmag 1 1.1 -> 1 -dqmng433 minmag 1.0 1 -> 1.0 -dqmng434 minmag 0.1 1.0 -> 0.1 -dqmng435 minmag 0.10 0.1 -> 0.10 -dqmng436 minmag 0.100 0.10 -> 0.100 -dqmng437 minmag 0 0.10 -> 0 -dqmng438 minmag 0.0 0 -> 0.0 -dqmng439 minmag -0 0.0 -> -0 -dqmng440 minmag -0.0 0.0 -> -0.0 -dqmng441 minmag -0.0 0.00 -> -0.0 -dqmng442 minmag -0.00 0.0 -> -0.00 -dqmng443 minmag -0.0 0 -> -0.0 -dqmng444 minmag -0 0 -> -0 -dqmng445 minmag -0 -0.0 -> -0 -dqmng446 minmag -0.100 -0 -> -0 -dqmng447 minmag -0.10 -0.100 -> -0.10 -dqmng448 minmag -0.1 -0.10 -> -0.1 -dqmng449 minmag -1.0 -0.1 -> -0.1 -dqmng450 minmag -1 -1.0 -> -1 -dqmng451 minmag -1.1 -1 -> -1 -dqmng453 minmag -Inf -1.1 -> -1.1 --- largies -dqmng460 minmag 1000 1E+3 -> 1000 -dqmng461 minmag 1E+3 1000 -> 1000 -dqmng462 minmag 1000 -1E+3 -> -1E+3 -dqmng463 minmag 1E+3 -384 -> -384 -dqmng464 minmag -384 1E+3 -> -384 -dqmng465 minmag -1E+3 1000 -> -1E+3 -dqmng466 minmag -384 -1E+3 -> -384 -dqmng467 minmag -1E+3 -384 -> -384 - --- subnormals -dqmng510 minmag 1.00E-6143 0 -> 0 -dqmng511 minmag 0.1E-6143 0 -> 0 -dqmng512 minmag 0.10E-6143 0 -> 0 -dqmng513 minmag 0.100E-6143 0 -> 0 -dqmng514 minmag 0.01E-6143 0 -> 0 -dqmng515 minmag 0.999E-6143 0 -> 0 -dqmng516 minmag 0.099E-6143 0 -> 0 -dqmng517 minmag 0.009E-6143 0 -> 0 -dqmng518 minmag 0.001E-6143 0 -> 0 -dqmng519 minmag 0.0009E-6143 0 -> 0 -dqmng520 minmag 0.0001E-6143 0 -> 0 - -dqmng530 minmag -1.00E-6143 0 -> 0 -dqmng531 minmag -0.1E-6143 0 -> 0 -dqmng532 minmag -0.10E-6143 0 -> 0 -dqmng533 minmag -0.100E-6143 0 -> 0 -dqmng534 minmag -0.01E-6143 0 -> 0 -dqmng535 minmag -0.999E-6143 0 -> 0 -dqmng536 minmag -0.099E-6143 0 -> 0 -dqmng537 minmag -0.009E-6143 0 -> 0 -dqmng538 minmag -0.001E-6143 0 -> 0 -dqmng539 minmag -0.0009E-6143 0 -> 0 -dqmng540 minmag -0.0001E-6143 0 -> 0 - - --- Null tests -dqmng900 minmag 10 # -> NaN Invalid_operation -dqmng901 minmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqMinMag.decTest -- decQuad minnummag -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmng001 minmag -2 -2 -> -2 +dqmng002 minmag -2 -1 -> -1 +dqmng003 minmag -2 0 -> 0 +dqmng004 minmag -2 1 -> 1 +dqmng005 minmag -2 2 -> -2 +dqmng006 minmag -1 -2 -> -1 +dqmng007 minmag -1 -1 -> -1 +dqmng008 minmag -1 0 -> 0 +dqmng009 minmag -1 1 -> -1 +dqmng010 minmag -1 2 -> -1 +dqmng011 minmag 0 -2 -> 0 +dqmng012 minmag 0 -1 -> 0 +dqmng013 minmag 0 0 -> 0 +dqmng014 minmag 0 1 -> 0 +dqmng015 minmag 0 2 -> 0 +dqmng016 minmag 1 -2 -> 1 +dqmng017 minmag 1 -1 -> -1 +dqmng018 minmag 1 0 -> 0 +dqmng019 minmag 1 1 -> 1 +dqmng020 minmag 1 2 -> 1 +dqmng021 minmag 2 -2 -> -2 +dqmng022 minmag 2 -1 -> -1 +dqmng023 minmag 2 0 -> 0 +dqmng025 minmag 2 1 -> 1 +dqmng026 minmag 2 2 -> 2 + +-- extended zeros +dqmng030 minmag 0 0 -> 0 +dqmng031 minmag 0 -0 -> -0 +dqmng032 minmag 0 -0.0 -> -0.0 +dqmng033 minmag 0 0.0 -> 0.0 +dqmng034 minmag -0 0 -> -0 +dqmng035 minmag -0 -0 -> -0 +dqmng036 minmag -0 -0.0 -> -0 +dqmng037 minmag -0 0.0 -> -0 +dqmng038 minmag 0.0 0 -> 0.0 +dqmng039 minmag 0.0 -0 -> -0 +dqmng040 minmag 0.0 -0.0 -> -0.0 +dqmng041 minmag 0.0 0.0 -> 0.0 +dqmng042 minmag -0.0 0 -> -0.0 +dqmng043 minmag -0.0 -0 -> -0 +dqmng044 minmag -0.0 -0.0 -> -0.0 +dqmng045 minmag -0.0 0.0 -> -0.0 + +dqmng046 minmag 0E1 -0E1 -> -0E+1 +dqmng047 minmag -0E1 0E2 -> -0E+1 +dqmng048 minmag 0E2 0E1 -> 0E+1 +dqmng049 minmag 0E1 0E2 -> 0E+1 +dqmng050 minmag -0E3 -0E2 -> -0E+3 +dqmng051 minmag -0E2 -0E3 -> -0E+3 + +-- Specials +dqmng090 minmag Inf -Inf -> -Infinity +dqmng091 minmag Inf -1000 -> -1000 +dqmng092 minmag Inf -1 -> -1 +dqmng093 minmag Inf -0 -> -0 +dqmng094 minmag Inf 0 -> 0 +dqmng095 minmag Inf 1 -> 1 +dqmng096 minmag Inf 1000 -> 1000 +dqmng097 minmag Inf Inf -> Infinity +dqmng098 minmag -1000 Inf -> -1000 +dqmng099 minmag -Inf Inf -> -Infinity +dqmng100 minmag -1 Inf -> -1 +dqmng101 minmag -0 Inf -> -0 +dqmng102 minmag 0 Inf -> 0 +dqmng103 minmag 1 Inf -> 1 +dqmng104 minmag 1000 Inf -> 1000 +dqmng105 minmag Inf Inf -> Infinity + +dqmng120 minmag -Inf -Inf -> -Infinity +dqmng121 minmag -Inf -1000 -> -1000 +dqmng122 minmag -Inf -1 -> -1 +dqmng123 minmag -Inf -0 -> -0 +dqmng124 minmag -Inf 0 -> 0 +dqmng125 minmag -Inf 1 -> 1 +dqmng126 minmag -Inf 1000 -> 1000 +dqmng127 minmag -Inf Inf -> -Infinity +dqmng128 minmag -Inf -Inf -> -Infinity +dqmng129 minmag -1000 -Inf -> -1000 +dqmng130 minmag -1 -Inf -> -1 +dqmng131 minmag -0 -Inf -> -0 +dqmng132 minmag 0 -Inf -> 0 +dqmng133 minmag 1 -Inf -> 1 +dqmng134 minmag 1000 -Inf -> 1000 +dqmng135 minmag Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +dqmng141 minmag NaN -Inf -> -Infinity +dqmng142 minmag NaN -1000 -> -1000 +dqmng143 minmag NaN -1 -> -1 +dqmng144 minmag NaN -0 -> -0 +dqmng145 minmag NaN 0 -> 0 +dqmng146 minmag NaN 1 -> 1 +dqmng147 minmag NaN 1000 -> 1000 +dqmng148 minmag NaN Inf -> Infinity +dqmng149 minmag NaN NaN -> NaN +dqmng150 minmag -Inf NaN -> -Infinity +dqmng151 minmag -1000 NaN -> -1000 +dqmng152 minmag -1 -NaN -> -1 +dqmng153 minmag -0 NaN -> -0 +dqmng154 minmag 0 -NaN -> 0 +dqmng155 minmag 1 NaN -> 1 +dqmng156 minmag 1000 NaN -> 1000 +dqmng157 minmag Inf NaN -> Infinity + +dqmng161 minmag sNaN -Inf -> NaN Invalid_operation +dqmng162 minmag sNaN -1000 -> NaN Invalid_operation +dqmng163 minmag sNaN -1 -> NaN Invalid_operation +dqmng164 minmag sNaN -0 -> NaN Invalid_operation +dqmng165 minmag -sNaN 0 -> -NaN Invalid_operation +dqmng166 minmag -sNaN 1 -> -NaN Invalid_operation +dqmng167 minmag sNaN 1000 -> NaN Invalid_operation +dqmng168 minmag sNaN NaN -> NaN Invalid_operation +dqmng169 minmag sNaN sNaN -> NaN Invalid_operation +dqmng170 minmag NaN sNaN -> NaN Invalid_operation +dqmng171 minmag -Inf sNaN -> NaN Invalid_operation +dqmng172 minmag -1000 sNaN -> NaN Invalid_operation +dqmng173 minmag -1 sNaN -> NaN Invalid_operation +dqmng174 minmag -0 sNaN -> NaN Invalid_operation +dqmng175 minmag 0 sNaN -> NaN Invalid_operation +dqmng176 minmag 1 sNaN -> NaN Invalid_operation +dqmng177 minmag 1000 sNaN -> NaN Invalid_operation +dqmng178 minmag Inf sNaN -> NaN Invalid_operation +dqmng179 minmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmng181 minmag NaN9 -Inf -> -Infinity +dqmng182 minmag -NaN8 9990 -> 9990 +dqmng183 minmag NaN71 Inf -> Infinity + +dqmng184 minmag NaN1 NaN54 -> NaN1 +dqmng185 minmag NaN22 -NaN53 -> NaN22 +dqmng186 minmag -NaN3 NaN6 -> -NaN3 +dqmng187 minmag -NaN44 NaN7 -> -NaN44 + +dqmng188 minmag -Inf NaN41 -> -Infinity +dqmng189 minmag -9999 -NaN33 -> -9999 +dqmng190 minmag Inf NaN2 -> Infinity + +dqmng191 minmag sNaN99 -Inf -> NaN99 Invalid_operation +dqmng192 minmag sNaN98 -11 -> NaN98 Invalid_operation +dqmng193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation +dqmng194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation +dqmng195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation +dqmng196 minmag -Inf sNaN92 -> NaN92 Invalid_operation +dqmng197 minmag 088 sNaN91 -> NaN91 Invalid_operation +dqmng198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation +dqmng199 minmag NaN sNaN86 -> NaN86 Invalid_operation + +-- old rounding checks +dqmng221 minmag -12345678000 1 -> 1 +dqmng222 minmag 1 -12345678000 -> 1 +dqmng223 minmag -1234567800 1 -> 1 +dqmng224 minmag 1 -1234567800 -> 1 +dqmng225 minmag -1234567890 1 -> 1 +dqmng226 minmag 1 -1234567890 -> 1 +dqmng227 minmag -1234567891 1 -> 1 +dqmng228 minmag 1 -1234567891 -> 1 +dqmng229 minmag -12345678901 1 -> 1 +dqmng230 minmag 1 -12345678901 -> 1 +dqmng231 minmag -1234567896 1 -> 1 +dqmng232 minmag 1 -1234567896 -> 1 +dqmng233 minmag 1234567891 1 -> 1 +dqmng234 minmag 1 1234567891 -> 1 +dqmng235 minmag 12345678901 1 -> 1 +dqmng236 minmag 1 12345678901 -> 1 +dqmng237 minmag 1234567896 1 -> 1 +dqmng238 minmag 1 1234567896 -> 1 + +-- from examples +dqmng280 minmag '3' '2' -> '2' +dqmng281 minmag '-10' '3' -> '3' +dqmng282 minmag '1.0' '1' -> '1.0' +dqmng283 minmag '1' '1.0' -> '1.0' +dqmng284 minmag '7' 'NaN' -> '7' + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +dqmng401 minmag Inf 1.1 -> 1.1 +dqmng402 minmag 1.1 1 -> 1 +dqmng403 minmag 1 1.0 -> 1.0 +dqmng404 minmag 1.0 0.1 -> 0.1 +dqmng405 minmag 0.1 0.10 -> 0.10 +dqmng406 minmag 0.10 0.100 -> 0.100 +dqmng407 minmag 0.10 0 -> 0 +dqmng408 minmag 0 0.0 -> 0.0 +dqmng409 minmag 0.0 -0 -> -0 +dqmng410 minmag 0.0 -0.0 -> -0.0 +dqmng411 minmag 0.00 -0.0 -> -0.0 +dqmng412 minmag 0.0 -0.00 -> -0.00 +dqmng413 minmag 0 -0.0 -> -0.0 +dqmng414 minmag 0 -0 -> -0 +dqmng415 minmag -0.0 -0 -> -0 +dqmng416 minmag -0 -0.100 -> -0 +dqmng417 minmag -0.100 -0.10 -> -0.10 +dqmng418 minmag -0.10 -0.1 -> -0.1 +dqmng419 minmag -0.1 -1.0 -> -0.1 +dqmng420 minmag -1.0 -1 -> -1 +dqmng421 minmag -1 -1.1 -> -1 +dqmng423 minmag -1.1 -Inf -> -1.1 +-- same with operands reversed +dqmng431 minmag 1.1 Inf -> 1.1 +dqmng432 minmag 1 1.1 -> 1 +dqmng433 minmag 1.0 1 -> 1.0 +dqmng434 minmag 0.1 1.0 -> 0.1 +dqmng435 minmag 0.10 0.1 -> 0.10 +dqmng436 minmag 0.100 0.10 -> 0.100 +dqmng437 minmag 0 0.10 -> 0 +dqmng438 minmag 0.0 0 -> 0.0 +dqmng439 minmag -0 0.0 -> -0 +dqmng440 minmag -0.0 0.0 -> -0.0 +dqmng441 minmag -0.0 0.00 -> -0.0 +dqmng442 minmag -0.00 0.0 -> -0.00 +dqmng443 minmag -0.0 0 -> -0.0 +dqmng444 minmag -0 0 -> -0 +dqmng445 minmag -0 -0.0 -> -0 +dqmng446 minmag -0.100 -0 -> -0 +dqmng447 minmag -0.10 -0.100 -> -0.10 +dqmng448 minmag -0.1 -0.10 -> -0.1 +dqmng449 minmag -1.0 -0.1 -> -0.1 +dqmng450 minmag -1 -1.0 -> -1 +dqmng451 minmag -1.1 -1 -> -1 +dqmng453 minmag -Inf -1.1 -> -1.1 +-- largies +dqmng460 minmag 1000 1E+3 -> 1000 +dqmng461 minmag 1E+3 1000 -> 1000 +dqmng462 minmag 1000 -1E+3 -> -1E+3 +dqmng463 minmag 1E+3 -384 -> -384 +dqmng464 minmag -384 1E+3 -> -384 +dqmng465 minmag -1E+3 1000 -> -1E+3 +dqmng466 minmag -384 -1E+3 -> -384 +dqmng467 minmag -1E+3 -384 -> -384 + +-- subnormals +dqmng510 minmag 1.00E-6143 0 -> 0 +dqmng511 minmag 0.1E-6143 0 -> 0 +dqmng512 minmag 0.10E-6143 0 -> 0 +dqmng513 minmag 0.100E-6143 0 -> 0 +dqmng514 minmag 0.01E-6143 0 -> 0 +dqmng515 minmag 0.999E-6143 0 -> 0 +dqmng516 minmag 0.099E-6143 0 -> 0 +dqmng517 minmag 0.009E-6143 0 -> 0 +dqmng518 minmag 0.001E-6143 0 -> 0 +dqmng519 minmag 0.0009E-6143 0 -> 0 +dqmng520 minmag 0.0001E-6143 0 -> 0 + +dqmng530 minmag -1.00E-6143 0 -> 0 +dqmng531 minmag -0.1E-6143 0 -> 0 +dqmng532 minmag -0.10E-6143 0 -> 0 +dqmng533 minmag -0.100E-6143 0 -> 0 +dqmng534 minmag -0.01E-6143 0 -> 0 +dqmng535 minmag -0.999E-6143 0 -> 0 +dqmng536 minmag -0.099E-6143 0 -> 0 +dqmng537 minmag -0.009E-6143 0 -> 0 +dqmng538 minmag -0.001E-6143 0 -> 0 +dqmng539 minmag -0.0009E-6143 0 -> 0 +dqmng540 minmag -0.0001E-6143 0 -> 0 + + +-- Null tests +dqmng900 minmag 10 # -> NaN Invalid_operation +dqmng901 minmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqMinus.decTest b/Lib/test/decimaltestdata/dqMinus.decTest index 02e462e0bee..7a007791bfe 100644 --- a/Lib/test/decimaltestdata/dqMinus.decTest +++ b/Lib/test/decimaltestdata/dqMinus.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqMinus.decTest -- decQuad 0-x -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqmns001 minus +7.50 -> -7.50 - --- Infinities -dqmns011 minus Infinity -> -Infinity -dqmns012 minus -Infinity -> Infinity - --- NaNs, 0 payload -dqmns021 minus NaN -> NaN -dqmns022 minus -NaN -> -NaN -dqmns023 minus sNaN -> NaN Invalid_operation -dqmns024 minus -sNaN -> -NaN Invalid_operation - --- NaNs, non-0 payload -dqmns031 minus NaN13 -> NaN13 -dqmns032 minus -NaN13 -> -NaN13 -dqmns033 minus sNaN13 -> NaN13 Invalid_operation -dqmns034 minus -sNaN13 -> -NaN13 Invalid_operation -dqmns035 minus NaN70 -> NaN70 -dqmns036 minus -NaN70 -> -NaN70 -dqmns037 minus sNaN101 -> NaN101 Invalid_operation -dqmns038 minus -sNaN101 -> -NaN101 Invalid_operation - --- finites -dqmns101 minus 7 -> -7 -dqmns102 minus -7 -> 7 -dqmns103 minus 75 -> -75 -dqmns104 minus -75 -> 75 -dqmns105 minus 7.50 -> -7.50 -dqmns106 minus -7.50 -> 7.50 -dqmns107 minus 7.500 -> -7.500 -dqmns108 minus -7.500 -> 7.500 - --- zeros -dqmns111 minus 0 -> 0 -dqmns112 minus -0 -> 0 -dqmns113 minus 0E+4 -> 0E+4 -dqmns114 minus -0E+4 -> 0E+4 -dqmns115 minus 0.0000 -> 0.0000 -dqmns116 minus -0.0000 -> 0.0000 -dqmns117 minus 0E-141 -> 0E-141 -dqmns118 minus -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqmns121 minus 2682682682682682682682682682682682 -> -2682682682682682682682682682682682 -dqmns122 minus -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqmns123 minus 1341341341341341341341341341341341 -> -1341341341341341341341341341341341 -dqmns124 minus -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqmns131 minus 9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqmns132 minus 1E-6143 -> -1E-6143 -dqmns133 minus 1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqmns134 minus 1E-6176 -> -1E-6176 Subnormal - -dqmns135 minus -1E-6176 -> 1E-6176 Subnormal -dqmns136 minus -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqmns137 minus -1E-6143 -> 1E-6143 -dqmns138 minus -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqMinus.decTest -- decQuad 0-x -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqmns001 minus +7.50 -> -7.50 + +-- Infinities +dqmns011 minus Infinity -> -Infinity +dqmns012 minus -Infinity -> Infinity + +-- NaNs, 0 payload +dqmns021 minus NaN -> NaN +dqmns022 minus -NaN -> -NaN +dqmns023 minus sNaN -> NaN Invalid_operation +dqmns024 minus -sNaN -> -NaN Invalid_operation + +-- NaNs, non-0 payload +dqmns031 minus NaN13 -> NaN13 +dqmns032 minus -NaN13 -> -NaN13 +dqmns033 minus sNaN13 -> NaN13 Invalid_operation +dqmns034 minus -sNaN13 -> -NaN13 Invalid_operation +dqmns035 minus NaN70 -> NaN70 +dqmns036 minus -NaN70 -> -NaN70 +dqmns037 minus sNaN101 -> NaN101 Invalid_operation +dqmns038 minus -sNaN101 -> -NaN101 Invalid_operation + +-- finites +dqmns101 minus 7 -> -7 +dqmns102 minus -7 -> 7 +dqmns103 minus 75 -> -75 +dqmns104 minus -75 -> 75 +dqmns105 minus 7.50 -> -7.50 +dqmns106 minus -7.50 -> 7.50 +dqmns107 minus 7.500 -> -7.500 +dqmns108 minus -7.500 -> 7.500 + +-- zeros +dqmns111 minus 0 -> 0 +dqmns112 minus -0 -> 0 +dqmns113 minus 0E+4 -> 0E+4 +dqmns114 minus -0E+4 -> 0E+4 +dqmns115 minus 0.0000 -> 0.0000 +dqmns116 minus -0.0000 -> 0.0000 +dqmns117 minus 0E-141 -> 0E-141 +dqmns118 minus -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqmns121 minus 2682682682682682682682682682682682 -> -2682682682682682682682682682682682 +dqmns122 minus -2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqmns123 minus 1341341341341341341341341341341341 -> -1341341341341341341341341341341341 +dqmns124 minus -1341341341341341341341341341341341 -> 1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqmns131 minus 9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqmns132 minus 1E-6143 -> -1E-6143 +dqmns133 minus 1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqmns134 minus 1E-6176 -> -1E-6176 Subnormal + +dqmns135 minus -1E-6176 -> 1E-6176 Subnormal +dqmns136 minus -1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqmns137 minus -1E-6143 -> 1E-6143 +dqmns138 minus -9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqMultiply.decTest b/Lib/test/decimaltestdata/dqMultiply.decTest index 72cc71f24b3..f9df480bb2a 100644 --- a/Lib/test/decimaltestdata/dqMultiply.decTest +++ b/Lib/test/decimaltestdata/dqMultiply.decTest @@ -1,589 +1,589 @@ ------------------------------------------------------------------------- --- dqMultiply.decTest -- decQuad multiplication -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decQuads only; all arguments are --- representable in a decQuad -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqmul000 multiply 2 2 -> 4 -dqmul001 multiply 2 3 -> 6 -dqmul002 multiply 5 1 -> 5 -dqmul003 multiply 5 2 -> 10 -dqmul004 multiply 1.20 2 -> 2.40 -dqmul005 multiply 1.20 0 -> 0.00 -dqmul006 multiply 1.20 -2 -> -2.40 -dqmul007 multiply -1.20 2 -> -2.40 -dqmul008 multiply -1.20 0 -> -0.00 -dqmul009 multiply -1.20 -2 -> 2.40 -dqmul010 multiply 5.09 7.1 -> 36.139 -dqmul011 multiply 2.5 4 -> 10.0 -dqmul012 multiply 2.50 4 -> 10.00 -dqmul013 multiply 1.23456789 1.0000000000000000000000000000 -> 1.234567890000000000000000000000000 Rounded -dqmul015 multiply 2.50 4 -> 10.00 -dqmul016 multiply 9.99999999999999999 9.99999999999999999 -> 99.99999999999999980000000000000000 Inexact Rounded -dqmul017 multiply 9.99999999999999999 -9.99999999999999999 -> -99.99999999999999980000000000000000 Inexact Rounded -dqmul018 multiply -9.99999999999999999 9.99999999999999999 -> -99.99999999999999980000000000000000 Inexact Rounded -dqmul019 multiply -9.99999999999999999 -9.99999999999999999 -> 99.99999999999999980000000000000000 Inexact Rounded - --- zeros, etc. -dqmul021 multiply 0 0 -> 0 -dqmul022 multiply 0 -0 -> -0 -dqmul023 multiply -0 0 -> -0 -dqmul024 multiply -0 -0 -> 0 -dqmul025 multiply -0.0 -0.0 -> 0.00 -dqmul026 multiply -0.0 -0.0 -> 0.00 -dqmul027 multiply -0.0 -0.0 -> 0.00 -dqmul028 multiply -0.0 -0.0 -> 0.00 -dqmul030 multiply 5.00 1E-3 -> 0.00500 -dqmul031 multiply 00.00 0.000 -> 0.00000 -dqmul032 multiply 00.00 0E-3 -> 0.00000 -- rhs is 0 -dqmul033 multiply 0E-3 00.00 -> 0.00000 -- lhs is 0 -dqmul034 multiply -5.00 1E-3 -> -0.00500 -dqmul035 multiply -00.00 0.000 -> -0.00000 -dqmul036 multiply -00.00 0E-3 -> -0.00000 -- rhs is 0 -dqmul037 multiply -0E-3 00.00 -> -0.00000 -- lhs is 0 -dqmul038 multiply 5.00 -1E-3 -> -0.00500 -dqmul039 multiply 00.00 -0.000 -> -0.00000 -dqmul040 multiply 00.00 -0E-3 -> -0.00000 -- rhs is 0 -dqmul041 multiply 0E-3 -00.00 -> -0.00000 -- lhs is 0 -dqmul042 multiply -5.00 -1E-3 -> 0.00500 -dqmul043 multiply -00.00 -0.000 -> 0.00000 -dqmul044 multiply -00.00 -0E-3 -> 0.00000 -- rhs is 0 -dqmul045 multiply -0E-3 -00.00 -> 0.00000 -- lhs is 0 - --- examples from decarith -dqmul050 multiply 1.20 3 -> 3.60 -dqmul051 multiply 7 3 -> 21 -dqmul052 multiply 0.9 0.8 -> 0.72 -dqmul053 multiply 0.9 -0 -> -0.0 -dqmul054 multiply 654321 654321 -> 428135971041 - -dqmul060 multiply 123.45 1e7 -> 1.2345E+9 -dqmul061 multiply 123.45 1e8 -> 1.2345E+10 -dqmul062 multiply 123.45 1e+9 -> 1.2345E+11 -dqmul063 multiply 123.45 1e10 -> 1.2345E+12 -dqmul064 multiply 123.45 1e11 -> 1.2345E+13 -dqmul065 multiply 123.45 1e12 -> 1.2345E+14 -dqmul066 multiply 123.45 1e13 -> 1.2345E+15 - - --- test some intermediate lengths --- 1234567890123456 -dqmul080 multiply 0.1 1230123456456789 -> 123012345645678.9 -dqmul084 multiply 0.1 1230123456456789 -> 123012345645678.9 -dqmul090 multiply 1230123456456789 0.1 -> 123012345645678.9 -dqmul094 multiply 1230123456456789 0.1 -> 123012345645678.9 - --- test some more edge cases and carries -dqmul101 multiply 9 9 -> 81 -dqmul102 multiply 9 90 -> 810 -dqmul103 multiply 9 900 -> 8100 -dqmul104 multiply 9 9000 -> 81000 -dqmul105 multiply 9 90000 -> 810000 -dqmul106 multiply 9 900000 -> 8100000 -dqmul107 multiply 9 9000000 -> 81000000 -dqmul108 multiply 9 90000000 -> 810000000 -dqmul109 multiply 9 900000000 -> 8100000000 -dqmul110 multiply 9 9000000000 -> 81000000000 -dqmul111 multiply 9 90000000000 -> 810000000000 -dqmul112 multiply 9 900000000000 -> 8100000000000 -dqmul113 multiply 9 9000000000000 -> 81000000000000 -dqmul114 multiply 9 90000000000000 -> 810000000000000 -dqmul115 multiply 9 900000000000000 -> 8100000000000000 ---dqmul116 multiply 9 9000000000000000 -> 81000000000000000 ---dqmul117 multiply 9 90000000000000000 -> 810000000000000000 ---dqmul118 multiply 9 900000000000000000 -> 8100000000000000000 ---dqmul119 multiply 9 9000000000000000000 -> 81000000000000000000 ---dqmul120 multiply 9 90000000000000000000 -> 810000000000000000000 ---dqmul121 multiply 9 900000000000000000000 -> 8100000000000000000000 ---dqmul122 multiply 9 9000000000000000000000 -> 81000000000000000000000 ---dqmul123 multiply 9 90000000000000000000000 -> 810000000000000000000000 --- test some more edge cases without carries -dqmul131 multiply 3 3 -> 9 -dqmul132 multiply 3 30 -> 90 -dqmul133 multiply 3 300 -> 900 -dqmul134 multiply 3 3000 -> 9000 -dqmul135 multiply 3 30000 -> 90000 -dqmul136 multiply 3 300000 -> 900000 -dqmul137 multiply 3 3000000 -> 9000000 -dqmul138 multiply 3 30000000 -> 90000000 -dqmul139 multiply 3 300000000 -> 900000000 -dqmul140 multiply 3 3000000000 -> 9000000000 -dqmul141 multiply 3 30000000000 -> 90000000000 -dqmul142 multiply 3 300000000000 -> 900000000000 -dqmul143 multiply 3 3000000000000 -> 9000000000000 -dqmul144 multiply 3 30000000000000 -> 90000000000000 -dqmul145 multiply 3 300000000000000 -> 900000000000000 -dqmul146 multiply 3 3000000000000000 -> 9000000000000000 -dqmul147 multiply 3 30000000000000000 -> 90000000000000000 -dqmul148 multiply 3 300000000000000000 -> 900000000000000000 -dqmul149 multiply 3 3000000000000000000 -> 9000000000000000000 -dqmul150 multiply 3 30000000000000000000 -> 90000000000000000000 -dqmul151 multiply 3 300000000000000000000 -> 900000000000000000000 -dqmul152 multiply 3 3000000000000000000000 -> 9000000000000000000000 -dqmul153 multiply 3 30000000000000000000000 -> 90000000000000000000000 - -dqmul263 multiply 30269.587755640502150977251770554 4.8046009735990873395936309640543 -> 145433.2908011933696719165119928296 Inexact Rounded - --- test some edge cases with exact rounding -dqmul301 multiply 900000000000000000 9 -> 8100000000000000000 -dqmul302 multiply 900000000000000000 90 -> 81000000000000000000 -dqmul303 multiply 900000000000000000 900 -> 810000000000000000000 -dqmul304 multiply 900000000000000000 9000 -> 8100000000000000000000 -dqmul305 multiply 900000000000000000 90000 -> 81000000000000000000000 -dqmul306 multiply 900000000000000000 900000 -> 810000000000000000000000 -dqmul307 multiply 900000000000000000 9000000 -> 8100000000000000000000000 -dqmul308 multiply 900000000000000000 90000000 -> 81000000000000000000000000 -dqmul309 multiply 900000000000000000 900000000 -> 810000000000000000000000000 -dqmul310 multiply 900000000000000000 9000000000 -> 8100000000000000000000000000 -dqmul311 multiply 900000000000000000 90000000000 -> 81000000000000000000000000000 -dqmul312 multiply 900000000000000000 900000000000 -> 810000000000000000000000000000 -dqmul313 multiply 900000000000000000 9000000000000 -> 8100000000000000000000000000000 -dqmul314 multiply 900000000000000000 90000000000000 -> 81000000000000000000000000000000 -dqmul315 multiply 900000000000000000 900000000000000 -> 810000000000000000000000000000000 -dqmul316 multiply 900000000000000000 9000000000000000 -> 8100000000000000000000000000000000 -dqmul317 multiply 9000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+34 Rounded -dqmul318 multiply 90000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+35 Rounded -dqmul319 multiply 900000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+36 Rounded -dqmul320 multiply 9000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+37 Rounded -dqmul321 multiply 90000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+38 Rounded -dqmul322 multiply 900000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+39 Rounded -dqmul323 multiply 9000000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+40 Rounded - --- tryzeros cases -dqmul504 multiply 0E-4260 1000E-4260 -> 0E-6176 Clamped -dqmul505 multiply 100E+4260 0E+4260 -> 0E+6111 Clamped - --- mixed with zeros -dqmul541 multiply 0 -1 -> -0 -dqmul542 multiply -0 -1 -> 0 -dqmul543 multiply 0 1 -> 0 -dqmul544 multiply -0 1 -> -0 -dqmul545 multiply -1 0 -> -0 -dqmul546 multiply -1 -0 -> 0 -dqmul547 multiply 1 0 -> 0 -dqmul548 multiply 1 -0 -> -0 - -dqmul551 multiply 0.0 -1 -> -0.0 -dqmul552 multiply -0.0 -1 -> 0.0 -dqmul553 multiply 0.0 1 -> 0.0 -dqmul554 multiply -0.0 1 -> -0.0 -dqmul555 multiply -1.0 0 -> -0.0 -dqmul556 multiply -1.0 -0 -> 0.0 -dqmul557 multiply 1.0 0 -> 0.0 -dqmul558 multiply 1.0 -0 -> -0.0 - -dqmul561 multiply 0 -1.0 -> -0.0 -dqmul562 multiply -0 -1.0 -> 0.0 -dqmul563 multiply 0 1.0 -> 0.0 -dqmul564 multiply -0 1.0 -> -0.0 -dqmul565 multiply -1 0.0 -> -0.0 -dqmul566 multiply -1 -0.0 -> 0.0 -dqmul567 multiply 1 0.0 -> 0.0 -dqmul568 multiply 1 -0.0 -> -0.0 - -dqmul571 multiply 0.0 -1.0 -> -0.00 -dqmul572 multiply -0.0 -1.0 -> 0.00 -dqmul573 multiply 0.0 1.0 -> 0.00 -dqmul574 multiply -0.0 1.0 -> -0.00 -dqmul575 multiply -1.0 0.0 -> -0.00 -dqmul576 multiply -1.0 -0.0 -> 0.00 -dqmul577 multiply 1.0 0.0 -> 0.00 -dqmul578 multiply 1.0 -0.0 -> -0.00 - - --- Specials -dqmul580 multiply Inf -Inf -> -Infinity -dqmul581 multiply Inf -1000 -> -Infinity -dqmul582 multiply Inf -1 -> -Infinity -dqmul583 multiply Inf -0 -> NaN Invalid_operation -dqmul584 multiply Inf 0 -> NaN Invalid_operation -dqmul585 multiply Inf 1 -> Infinity -dqmul586 multiply Inf 1000 -> Infinity -dqmul587 multiply Inf Inf -> Infinity -dqmul588 multiply -1000 Inf -> -Infinity -dqmul589 multiply -Inf Inf -> -Infinity -dqmul590 multiply -1 Inf -> -Infinity -dqmul591 multiply -0 Inf -> NaN Invalid_operation -dqmul592 multiply 0 Inf -> NaN Invalid_operation -dqmul593 multiply 1 Inf -> Infinity -dqmul594 multiply 1000 Inf -> Infinity -dqmul595 multiply Inf Inf -> Infinity - -dqmul600 multiply -Inf -Inf -> Infinity -dqmul601 multiply -Inf -1000 -> Infinity -dqmul602 multiply -Inf -1 -> Infinity -dqmul603 multiply -Inf -0 -> NaN Invalid_operation -dqmul604 multiply -Inf 0 -> NaN Invalid_operation -dqmul605 multiply -Inf 1 -> -Infinity -dqmul606 multiply -Inf 1000 -> -Infinity -dqmul607 multiply -Inf Inf -> -Infinity -dqmul608 multiply -1000 Inf -> -Infinity -dqmul609 multiply -Inf -Inf -> Infinity -dqmul610 multiply -1 -Inf -> Infinity -dqmul611 multiply -0 -Inf -> NaN Invalid_operation -dqmul612 multiply 0 -Inf -> NaN Invalid_operation -dqmul613 multiply 1 -Inf -> -Infinity -dqmul614 multiply 1000 -Inf -> -Infinity -dqmul615 multiply Inf -Inf -> -Infinity - -dqmul621 multiply NaN -Inf -> NaN -dqmul622 multiply NaN -1000 -> NaN -dqmul623 multiply NaN -1 -> NaN -dqmul624 multiply NaN -0 -> NaN -dqmul625 multiply NaN 0 -> NaN -dqmul626 multiply NaN 1 -> NaN -dqmul627 multiply NaN 1000 -> NaN -dqmul628 multiply NaN Inf -> NaN -dqmul629 multiply NaN NaN -> NaN -dqmul630 multiply -Inf NaN -> NaN -dqmul631 multiply -1000 NaN -> NaN -dqmul632 multiply -1 NaN -> NaN -dqmul633 multiply -0 NaN -> NaN -dqmul634 multiply 0 NaN -> NaN -dqmul635 multiply 1 NaN -> NaN -dqmul636 multiply 1000 NaN -> NaN -dqmul637 multiply Inf NaN -> NaN - -dqmul641 multiply sNaN -Inf -> NaN Invalid_operation -dqmul642 multiply sNaN -1000 -> NaN Invalid_operation -dqmul643 multiply sNaN -1 -> NaN Invalid_operation -dqmul644 multiply sNaN -0 -> NaN Invalid_operation -dqmul645 multiply sNaN 0 -> NaN Invalid_operation -dqmul646 multiply sNaN 1 -> NaN Invalid_operation -dqmul647 multiply sNaN 1000 -> NaN Invalid_operation -dqmul648 multiply sNaN NaN -> NaN Invalid_operation -dqmul649 multiply sNaN sNaN -> NaN Invalid_operation -dqmul650 multiply NaN sNaN -> NaN Invalid_operation -dqmul651 multiply -Inf sNaN -> NaN Invalid_operation -dqmul652 multiply -1000 sNaN -> NaN Invalid_operation -dqmul653 multiply -1 sNaN -> NaN Invalid_operation -dqmul654 multiply -0 sNaN -> NaN Invalid_operation -dqmul655 multiply 0 sNaN -> NaN Invalid_operation -dqmul656 multiply 1 sNaN -> NaN Invalid_operation -dqmul657 multiply 1000 sNaN -> NaN Invalid_operation -dqmul658 multiply Inf sNaN -> NaN Invalid_operation -dqmul659 multiply NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqmul661 multiply NaN9 -Inf -> NaN9 -dqmul662 multiply NaN8 999 -> NaN8 -dqmul663 multiply NaN71 Inf -> NaN71 -dqmul664 multiply NaN6 NaN5 -> NaN6 -dqmul665 multiply -Inf NaN4 -> NaN4 -dqmul666 multiply -999 NaN33 -> NaN33 -dqmul667 multiply Inf NaN2 -> NaN2 - -dqmul671 multiply sNaN99 -Inf -> NaN99 Invalid_operation -dqmul672 multiply sNaN98 -11 -> NaN98 Invalid_operation -dqmul673 multiply sNaN97 NaN -> NaN97 Invalid_operation -dqmul674 multiply sNaN16 sNaN94 -> NaN16 Invalid_operation -dqmul675 multiply NaN95 sNaN93 -> NaN93 Invalid_operation -dqmul676 multiply -Inf sNaN92 -> NaN92 Invalid_operation -dqmul677 multiply 088 sNaN91 -> NaN91 Invalid_operation -dqmul678 multiply Inf sNaN90 -> NaN90 Invalid_operation -dqmul679 multiply NaN sNaN89 -> NaN89 Invalid_operation - -dqmul681 multiply -NaN9 -Inf -> -NaN9 -dqmul682 multiply -NaN8 999 -> -NaN8 -dqmul683 multiply -NaN71 Inf -> -NaN71 -dqmul684 multiply -NaN6 -NaN5 -> -NaN6 -dqmul685 multiply -Inf -NaN4 -> -NaN4 -dqmul686 multiply -999 -NaN33 -> -NaN33 -dqmul687 multiply Inf -NaN2 -> -NaN2 - -dqmul691 multiply -sNaN99 -Inf -> -NaN99 Invalid_operation -dqmul692 multiply -sNaN98 -11 -> -NaN98 Invalid_operation -dqmul693 multiply -sNaN97 NaN -> -NaN97 Invalid_operation -dqmul694 multiply -sNaN16 -sNaN94 -> -NaN16 Invalid_operation -dqmul695 multiply -NaN95 -sNaN93 -> -NaN93 Invalid_operation -dqmul696 multiply -Inf -sNaN92 -> -NaN92 Invalid_operation -dqmul697 multiply 088 -sNaN91 -> -NaN91 Invalid_operation -dqmul698 multiply Inf -sNaN90 -> -NaN90 Invalid_operation -dqmul699 multiply -NaN -sNaN89 -> -NaN89 Invalid_operation - -dqmul701 multiply -NaN -Inf -> -NaN -dqmul702 multiply -NaN 999 -> -NaN -dqmul703 multiply -NaN Inf -> -NaN -dqmul704 multiply -NaN -NaN -> -NaN -dqmul705 multiply -Inf -NaN0 -> -NaN -dqmul706 multiply -999 -NaN -> -NaN -dqmul707 multiply Inf -NaN -> -NaN - -dqmul711 multiply -sNaN -Inf -> -NaN Invalid_operation -dqmul712 multiply -sNaN -11 -> -NaN Invalid_operation -dqmul713 multiply -sNaN00 NaN -> -NaN Invalid_operation -dqmul714 multiply -sNaN -sNaN -> -NaN Invalid_operation -dqmul715 multiply -NaN -sNaN -> -NaN Invalid_operation -dqmul716 multiply -Inf -sNaN -> -NaN Invalid_operation -dqmul717 multiply 088 -sNaN -> -NaN Invalid_operation -dqmul718 multiply Inf -sNaN -> -NaN Invalid_operation -dqmul719 multiply -NaN -sNaN -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results --- signs -dqmul751 multiply 1e+4277 1e+3311 -> Infinity Overflow Inexact Rounded -dqmul752 multiply 1e+4277 -1e+3311 -> -Infinity Overflow Inexact Rounded -dqmul753 multiply -1e+4277 1e+3311 -> -Infinity Overflow Inexact Rounded -dqmul754 multiply -1e+4277 -1e+3311 -> Infinity Overflow Inexact Rounded -dqmul755 multiply 1e-4277 1e-3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul756 multiply 1e-4277 -1e-3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul757 multiply -1e-4277 1e-3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul758 multiply -1e-4277 -1e-3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -dqmul760 multiply 1e-6069 1e-101 -> 1E-6170 Subnormal -dqmul761 multiply 1e-6069 1e-102 -> 1E-6171 Subnormal -dqmul762 multiply 1e-6069 1e-103 -> 1E-6172 Subnormal -dqmul763 multiply 1e-6069 1e-104 -> 1E-6173 Subnormal -dqmul764 multiply 1e-6069 1e-105 -> 1E-6174 Subnormal -dqmul765 multiply 1e-6069 1e-106 -> 1E-6175 Subnormal -dqmul766 multiply 1e-6069 1e-107 -> 1E-6176 Subnormal -dqmul767 multiply 1e-6069 1e-108 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul768 multiply 1e-6069 1e-109 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul769 multiply 1e-6069 1e-110 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -dqmul770 multiply 1e+40 1e+6101 -> 1.000000000000000000000000000000E+6141 Clamped -dqmul771 multiply 1e+40 1e+6102 -> 1.0000000000000000000000000000000E+6142 Clamped -dqmul772 multiply 1e+40 1e+6103 -> 1.00000000000000000000000000000000E+6143 Clamped -dqmul773 multiply 1e+40 1e+6104 -> 1.000000000000000000000000000000000E+6144 Clamped -dqmul774 multiply 1e+40 1e+6105 -> Infinity Overflow Inexact Rounded -dqmul775 multiply 1e+40 1e+6106 -> Infinity Overflow Inexact Rounded -dqmul776 multiply 1e+40 1e+6107 -> Infinity Overflow Inexact Rounded -dqmul777 multiply 1e+40 1e+6108 -> Infinity Overflow Inexact Rounded -dqmul778 multiply 1e+40 1e+6109 -> Infinity Overflow Inexact Rounded -dqmul779 multiply 1e+40 1e+6110 -> Infinity Overflow Inexact Rounded - -dqmul801 multiply 1.0000E-6172 1 -> 1.0000E-6172 Subnormal -dqmul802 multiply 1.000E-6172 1e-1 -> 1.000E-6173 Subnormal -dqmul803 multiply 1.00E-6172 1e-2 -> 1.00E-6174 Subnormal -dqmul804 multiply 1.0E-6172 1e-3 -> 1.0E-6175 Subnormal -dqmul805 multiply 1.0E-6172 1e-4 -> 1E-6176 Subnormal Rounded -dqmul806 multiply 1.3E-6172 1e-4 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqmul807 multiply 1.5E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul808 multiply 1.7E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul809 multiply 2.3E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul810 multiply 2.5E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul811 multiply 2.7E-6172 1e-4 -> 3E-6176 Underflow Subnormal Inexact Rounded -dqmul812 multiply 1.49E-6172 1e-4 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqmul813 multiply 1.50E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul814 multiply 1.51E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul815 multiply 2.49E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul816 multiply 2.50E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded -dqmul817 multiply 2.51E-6172 1e-4 -> 3E-6176 Underflow Subnormal Inexact Rounded - -dqmul818 multiply 1E-6172 1e-4 -> 1E-6176 Subnormal -dqmul819 multiply 3E-6172 1e-5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul820 multiply 5E-6172 1e-5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul821 multiply 7E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqmul822 multiply 9E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqmul823 multiply 9.9E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded - -dqmul824 multiply 1E-6172 -1e-4 -> -1E-6176 Subnormal -dqmul825 multiply 3E-6172 -1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul826 multiply -5E-6172 1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul827 multiply 7E-6172 -1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqmul828 multiply -9E-6172 1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqmul829 multiply 9.9E-6172 -1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqmul830 multiply 3.0E-6172 -1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqmul831 multiply 1.0E-5977 1e-200 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqmul832 multiply 1.0E-5977 1e-199 -> 1E-6176 Subnormal Rounded -dqmul833 multiply 1.0E-5977 1e-198 -> 1.0E-6175 Subnormal -dqmul834 multiply 2.0E-5977 2e-198 -> 4.0E-6175 Subnormal -dqmul835 multiply 4.0E-5977 4e-198 -> 1.60E-6174 Subnormal -dqmul836 multiply 10.0E-5977 10e-198 -> 1.000E-6173 Subnormal -dqmul837 multiply 30.0E-5977 30e-198 -> 9.000E-6173 Subnormal -dqmul838 multiply 40.0E-5982 40e-166 -> 1.6000E-6145 Subnormal -dqmul839 multiply 40.0E-5982 40e-165 -> 1.6000E-6144 Subnormal -dqmul840 multiply 40.0E-5982 40e-164 -> 1.6000E-6143 - --- Long operand overflow may be a different path -dqmul870 multiply 100 9.999E+6143 -> Infinity Inexact Overflow Rounded -dqmul871 multiply 100 -9.999E+6143 -> -Infinity Inexact Overflow Rounded -dqmul872 multiply 9.999E+6143 100 -> Infinity Inexact Overflow Rounded -dqmul873 multiply -9.999E+6143 100 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -dqmul881 multiply 1.2347E-6133 1.2347E-40 -> 1.524E-6173 Inexact Rounded Subnormal Underflow -dqmul882 multiply 1.234E-6133 1.234E-40 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqmul883 multiply 1.23E-6133 1.23E-40 -> 1.513E-6173 Inexact Rounded Subnormal Underflow -dqmul884 multiply 1.2E-6133 1.2E-40 -> 1.44E-6173 Subnormal -dqmul885 multiply 1.2E-6133 1.2E-41 -> 1.44E-6174 Subnormal -dqmul886 multiply 1.2E-6133 1.2E-42 -> 1.4E-6175 Subnormal Inexact Rounded Underflow -dqmul887 multiply 1.2E-6133 1.3E-42 -> 1.6E-6175 Subnormal Inexact Rounded Underflow -dqmul888 multiply 1.3E-6133 1.3E-42 -> 1.7E-6175 Subnormal Inexact Rounded Underflow -dqmul889 multiply 1.3E-6133 1.3E-43 -> 2E-6176 Subnormal Inexact Rounded Underflow -dqmul890 multiply 1.3E-6134 1.3E-43 -> 0E-6176 Clamped Subnormal Inexact Rounded Underflow - -dqmul891 multiply 1.2345E-39 1.234E-6133 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow -dqmul892 multiply 1.23456E-39 1.234E-6133 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow -dqmul893 multiply 1.2345E-40 1.234E-6133 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqmul894 multiply 1.23456E-40 1.234E-6133 -> 1.523E-6173 Inexact Rounded Subnormal Underflow -dqmul895 multiply 1.2345E-41 1.234E-6133 -> 1.52E-6174 Inexact Rounded Subnormal Underflow -dqmul896 multiply 1.23456E-41 1.234E-6133 -> 1.52E-6174 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow --- prove operands are exact -dqmul906 multiply 9.999999999999999999999999999999999E-6143 1 -> 9.999999999999999999999999999999999E-6143 -dqmul907 multiply 1 0.09999999999999999999999999999999999 -> 0.09999999999999999999999999999999999 --- the next rounds to Nmin -dqmul908 multiply 9.999999999999999999999999999999999E-6143 0.09999999999999999999999999999999999 -> 1.000000000000000000000000000000000E-6143 Underflow Inexact Subnormal Rounded - --- hugest -dqmul909 multiply 9999999999999999999999999999999999 9999999999999999999999999999999999 -> 9.999999999999999999999999999999998E+67 Inexact Rounded --- VG case -dqmul910 multiply 8.81125000000001349436E-1548 8.000000000000000000E-1550 -> 7.049000000000010795488000000000000E-3097 Rounded - --- Examples from SQL proposal (Krishna Kulkarni) -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 -dqmul911 multiply 130E-2 120E-2 -> 1.5600 -dqmul912 multiply 130E-2 12E-1 -> 1.560 -dqmul913 multiply 130E-2 1E0 -> 1.30 -dqmul914 multiply 1E2 1E4 -> 1E+6 - --- power-of-ten edge cases -dqmul1001 multiply 1 10 -> 10 -dqmul1002 multiply 1 100 -> 100 -dqmul1003 multiply 1 1000 -> 1000 -dqmul1004 multiply 1 10000 -> 10000 -dqmul1005 multiply 1 100000 -> 100000 -dqmul1006 multiply 1 1000000 -> 1000000 -dqmul1007 multiply 1 10000000 -> 10000000 -dqmul1008 multiply 1 100000000 -> 100000000 -dqmul1009 multiply 1 1000000000 -> 1000000000 -dqmul1010 multiply 1 10000000000 -> 10000000000 -dqmul1011 multiply 1 100000000000 -> 100000000000 -dqmul1012 multiply 1 1000000000000 -> 1000000000000 -dqmul1013 multiply 1 10000000000000 -> 10000000000000 -dqmul1014 multiply 1 100000000000000 -> 100000000000000 -dqmul1015 multiply 1 1000000000000000 -> 1000000000000000 - -dqmul1016 multiply 1 1000000000000000000 -> 1000000000000000000 -dqmul1017 multiply 1 100000000000000000000000000 -> 100000000000000000000000000 -dqmul1018 multiply 1 1000000000000000000000000000 -> 1000000000000000000000000000 -dqmul1019 multiply 1 10000000000000000000000000000 -> 10000000000000000000000000000 -dqmul1020 multiply 1 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1021 multiply 10 1 -> 10 -dqmul1022 multiply 10 10 -> 100 -dqmul1023 multiply 10 100 -> 1000 -dqmul1024 multiply 10 1000 -> 10000 -dqmul1025 multiply 10 10000 -> 100000 -dqmul1026 multiply 10 100000 -> 1000000 -dqmul1027 multiply 10 1000000 -> 10000000 -dqmul1028 multiply 10 10000000 -> 100000000 -dqmul1029 multiply 10 100000000 -> 1000000000 -dqmul1030 multiply 10 1000000000 -> 10000000000 -dqmul1031 multiply 10 10000000000 -> 100000000000 -dqmul1032 multiply 10 100000000000 -> 1000000000000 -dqmul1033 multiply 10 1000000000000 -> 10000000000000 -dqmul1034 multiply 10 10000000000000 -> 100000000000000 -dqmul1035 multiply 10 100000000000000 -> 1000000000000000 - -dqmul1036 multiply 10 100000000000000000 -> 1000000000000000000 -dqmul1037 multiply 10 10000000000000000000000000 -> 100000000000000000000000000 -dqmul1038 multiply 10 100000000000000000000000000 -> 1000000000000000000000000000 -dqmul1039 multiply 10 1000000000000000000000000000 -> 10000000000000000000000000000 -dqmul1040 multiply 10 100000000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1041 multiply 100 0.1 -> 10.0 -dqmul1042 multiply 100 1 -> 100 -dqmul1043 multiply 100 10 -> 1000 -dqmul1044 multiply 100 100 -> 10000 -dqmul1045 multiply 100 1000 -> 100000 -dqmul1046 multiply 100 10000 -> 1000000 -dqmul1047 multiply 100 100000 -> 10000000 -dqmul1048 multiply 100 1000000 -> 100000000 -dqmul1049 multiply 100 10000000 -> 1000000000 -dqmul1050 multiply 100 100000000 -> 10000000000 -dqmul1051 multiply 100 1000000000 -> 100000000000 -dqmul1052 multiply 100 10000000000 -> 1000000000000 -dqmul1053 multiply 100 100000000000 -> 10000000000000 -dqmul1054 multiply 100 1000000000000 -> 100000000000000 -dqmul1055 multiply 100 10000000000000 -> 1000000000000000 - -dqmul1056 multiply 100 10000000000000000 -> 1000000000000000000 -dqmul1057 multiply 100 1000000000000000000000000 -> 100000000000000000000000000 -dqmul1058 multiply 100 10000000000000000000000000 -> 1000000000000000000000000000 -dqmul1059 multiply 100 100000000000000000000000000 -> 10000000000000000000000000000 -dqmul1060 multiply 100 10000000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1061 multiply 1000 0.01 -> 10.00 -dqmul1062 multiply 1000 0.1 -> 100.0 -dqmul1063 multiply 1000 1 -> 1000 -dqmul1064 multiply 1000 10 -> 10000 -dqmul1065 multiply 1000 100 -> 100000 -dqmul1066 multiply 1000 1000 -> 1000000 -dqmul1067 multiply 1000 10000 -> 10000000 -dqmul1068 multiply 1000 100000 -> 100000000 -dqmul1069 multiply 1000 1000000 -> 1000000000 -dqmul1070 multiply 1000 10000000 -> 10000000000 -dqmul1071 multiply 1000 100000000 -> 100000000000 -dqmul1072 multiply 1000 1000000000 -> 1000000000000 -dqmul1073 multiply 1000 10000000000 -> 10000000000000 -dqmul1074 multiply 1000 100000000000 -> 100000000000000 -dqmul1075 multiply 1000 1000000000000 -> 1000000000000000 - -dqmul1076 multiply 1000 1000000000000000 -> 1000000000000000000 -dqmul1077 multiply 1000 100000000000000000000000 -> 100000000000000000000000000 -dqmul1078 multiply 1000 1000000000000000000000000 -> 1000000000000000000000000000 -dqmul1079 multiply 1000 10000000000000000000000000 -> 10000000000000000000000000000 -dqmul1080 multiply 1000 1000000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1081 multiply 10000 0.001 -> 10.000 -dqmul1082 multiply 10000 0.01 -> 100.00 -dqmul1083 multiply 10000 0.1 -> 1000.0 -dqmul1084 multiply 10000 1 -> 10000 -dqmul1085 multiply 10000 10 -> 100000 -dqmul1086 multiply 10000 100 -> 1000000 -dqmul1087 multiply 10000 1000 -> 10000000 -dqmul1088 multiply 10000 10000 -> 100000000 -dqmul1089 multiply 10000 100000 -> 1000000000 -dqmul1090 multiply 10000 1000000 -> 10000000000 -dqmul1091 multiply 10000 10000000 -> 100000000000 -dqmul1092 multiply 10000 100000000 -> 1000000000000 -dqmul1093 multiply 10000 1000000000 -> 10000000000000 -dqmul1094 multiply 10000 10000000000 -> 100000000000000 -dqmul1095 multiply 10000 100000000000 -> 1000000000000000 - -dqmul1096 multiply 10000 100000000000000 -> 1000000000000000000 -dqmul1097 multiply 10000 10000000000000000000000 -> 100000000000000000000000000 -dqmul1098 multiply 10000 100000000000000000000000 -> 1000000000000000000000000000 -dqmul1099 multiply 10000 1000000000000000000000000 -> 10000000000000000000000000000 -dqmul1100 multiply 10000 100000000000000000000000000000 -> 1000000000000000000000000000000000 - -dqmul1107 multiply 10000 99999999999 -> 999999999990000 -dqmul1108 multiply 10000 99999999999 -> 999999999990000 - --- Null tests -dqmul9990 multiply 10 # -> NaN Invalid_operation -dqmul9991 multiply # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqMultiply.decTest -- decQuad multiplication -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decQuads only; all arguments are +-- representable in a decQuad +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqmul000 multiply 2 2 -> 4 +dqmul001 multiply 2 3 -> 6 +dqmul002 multiply 5 1 -> 5 +dqmul003 multiply 5 2 -> 10 +dqmul004 multiply 1.20 2 -> 2.40 +dqmul005 multiply 1.20 0 -> 0.00 +dqmul006 multiply 1.20 -2 -> -2.40 +dqmul007 multiply -1.20 2 -> -2.40 +dqmul008 multiply -1.20 0 -> -0.00 +dqmul009 multiply -1.20 -2 -> 2.40 +dqmul010 multiply 5.09 7.1 -> 36.139 +dqmul011 multiply 2.5 4 -> 10.0 +dqmul012 multiply 2.50 4 -> 10.00 +dqmul013 multiply 1.23456789 1.0000000000000000000000000000 -> 1.234567890000000000000000000000000 Rounded +dqmul015 multiply 2.50 4 -> 10.00 +dqmul016 multiply 9.99999999999999999 9.99999999999999999 -> 99.99999999999999980000000000000000 Inexact Rounded +dqmul017 multiply 9.99999999999999999 -9.99999999999999999 -> -99.99999999999999980000000000000000 Inexact Rounded +dqmul018 multiply -9.99999999999999999 9.99999999999999999 -> -99.99999999999999980000000000000000 Inexact Rounded +dqmul019 multiply -9.99999999999999999 -9.99999999999999999 -> 99.99999999999999980000000000000000 Inexact Rounded + +-- zeros, etc. +dqmul021 multiply 0 0 -> 0 +dqmul022 multiply 0 -0 -> -0 +dqmul023 multiply -0 0 -> -0 +dqmul024 multiply -0 -0 -> 0 +dqmul025 multiply -0.0 -0.0 -> 0.00 +dqmul026 multiply -0.0 -0.0 -> 0.00 +dqmul027 multiply -0.0 -0.0 -> 0.00 +dqmul028 multiply -0.0 -0.0 -> 0.00 +dqmul030 multiply 5.00 1E-3 -> 0.00500 +dqmul031 multiply 00.00 0.000 -> 0.00000 +dqmul032 multiply 00.00 0E-3 -> 0.00000 -- rhs is 0 +dqmul033 multiply 0E-3 00.00 -> 0.00000 -- lhs is 0 +dqmul034 multiply -5.00 1E-3 -> -0.00500 +dqmul035 multiply -00.00 0.000 -> -0.00000 +dqmul036 multiply -00.00 0E-3 -> -0.00000 -- rhs is 0 +dqmul037 multiply -0E-3 00.00 -> -0.00000 -- lhs is 0 +dqmul038 multiply 5.00 -1E-3 -> -0.00500 +dqmul039 multiply 00.00 -0.000 -> -0.00000 +dqmul040 multiply 00.00 -0E-3 -> -0.00000 -- rhs is 0 +dqmul041 multiply 0E-3 -00.00 -> -0.00000 -- lhs is 0 +dqmul042 multiply -5.00 -1E-3 -> 0.00500 +dqmul043 multiply -00.00 -0.000 -> 0.00000 +dqmul044 multiply -00.00 -0E-3 -> 0.00000 -- rhs is 0 +dqmul045 multiply -0E-3 -00.00 -> 0.00000 -- lhs is 0 + +-- examples from decarith +dqmul050 multiply 1.20 3 -> 3.60 +dqmul051 multiply 7 3 -> 21 +dqmul052 multiply 0.9 0.8 -> 0.72 +dqmul053 multiply 0.9 -0 -> -0.0 +dqmul054 multiply 654321 654321 -> 428135971041 + +dqmul060 multiply 123.45 1e7 -> 1.2345E+9 +dqmul061 multiply 123.45 1e8 -> 1.2345E+10 +dqmul062 multiply 123.45 1e+9 -> 1.2345E+11 +dqmul063 multiply 123.45 1e10 -> 1.2345E+12 +dqmul064 multiply 123.45 1e11 -> 1.2345E+13 +dqmul065 multiply 123.45 1e12 -> 1.2345E+14 +dqmul066 multiply 123.45 1e13 -> 1.2345E+15 + + +-- test some intermediate lengths +-- 1234567890123456 +dqmul080 multiply 0.1 1230123456456789 -> 123012345645678.9 +dqmul084 multiply 0.1 1230123456456789 -> 123012345645678.9 +dqmul090 multiply 1230123456456789 0.1 -> 123012345645678.9 +dqmul094 multiply 1230123456456789 0.1 -> 123012345645678.9 + +-- test some more edge cases and carries +dqmul101 multiply 9 9 -> 81 +dqmul102 multiply 9 90 -> 810 +dqmul103 multiply 9 900 -> 8100 +dqmul104 multiply 9 9000 -> 81000 +dqmul105 multiply 9 90000 -> 810000 +dqmul106 multiply 9 900000 -> 8100000 +dqmul107 multiply 9 9000000 -> 81000000 +dqmul108 multiply 9 90000000 -> 810000000 +dqmul109 multiply 9 900000000 -> 8100000000 +dqmul110 multiply 9 9000000000 -> 81000000000 +dqmul111 multiply 9 90000000000 -> 810000000000 +dqmul112 multiply 9 900000000000 -> 8100000000000 +dqmul113 multiply 9 9000000000000 -> 81000000000000 +dqmul114 multiply 9 90000000000000 -> 810000000000000 +dqmul115 multiply 9 900000000000000 -> 8100000000000000 +--dqmul116 multiply 9 9000000000000000 -> 81000000000000000 +--dqmul117 multiply 9 90000000000000000 -> 810000000000000000 +--dqmul118 multiply 9 900000000000000000 -> 8100000000000000000 +--dqmul119 multiply 9 9000000000000000000 -> 81000000000000000000 +--dqmul120 multiply 9 90000000000000000000 -> 810000000000000000000 +--dqmul121 multiply 9 900000000000000000000 -> 8100000000000000000000 +--dqmul122 multiply 9 9000000000000000000000 -> 81000000000000000000000 +--dqmul123 multiply 9 90000000000000000000000 -> 810000000000000000000000 +-- test some more edge cases without carries +dqmul131 multiply 3 3 -> 9 +dqmul132 multiply 3 30 -> 90 +dqmul133 multiply 3 300 -> 900 +dqmul134 multiply 3 3000 -> 9000 +dqmul135 multiply 3 30000 -> 90000 +dqmul136 multiply 3 300000 -> 900000 +dqmul137 multiply 3 3000000 -> 9000000 +dqmul138 multiply 3 30000000 -> 90000000 +dqmul139 multiply 3 300000000 -> 900000000 +dqmul140 multiply 3 3000000000 -> 9000000000 +dqmul141 multiply 3 30000000000 -> 90000000000 +dqmul142 multiply 3 300000000000 -> 900000000000 +dqmul143 multiply 3 3000000000000 -> 9000000000000 +dqmul144 multiply 3 30000000000000 -> 90000000000000 +dqmul145 multiply 3 300000000000000 -> 900000000000000 +dqmul146 multiply 3 3000000000000000 -> 9000000000000000 +dqmul147 multiply 3 30000000000000000 -> 90000000000000000 +dqmul148 multiply 3 300000000000000000 -> 900000000000000000 +dqmul149 multiply 3 3000000000000000000 -> 9000000000000000000 +dqmul150 multiply 3 30000000000000000000 -> 90000000000000000000 +dqmul151 multiply 3 300000000000000000000 -> 900000000000000000000 +dqmul152 multiply 3 3000000000000000000000 -> 9000000000000000000000 +dqmul153 multiply 3 30000000000000000000000 -> 90000000000000000000000 + +dqmul263 multiply 30269.587755640502150977251770554 4.8046009735990873395936309640543 -> 145433.2908011933696719165119928296 Inexact Rounded + +-- test some edge cases with exact rounding +dqmul301 multiply 900000000000000000 9 -> 8100000000000000000 +dqmul302 multiply 900000000000000000 90 -> 81000000000000000000 +dqmul303 multiply 900000000000000000 900 -> 810000000000000000000 +dqmul304 multiply 900000000000000000 9000 -> 8100000000000000000000 +dqmul305 multiply 900000000000000000 90000 -> 81000000000000000000000 +dqmul306 multiply 900000000000000000 900000 -> 810000000000000000000000 +dqmul307 multiply 900000000000000000 9000000 -> 8100000000000000000000000 +dqmul308 multiply 900000000000000000 90000000 -> 81000000000000000000000000 +dqmul309 multiply 900000000000000000 900000000 -> 810000000000000000000000000 +dqmul310 multiply 900000000000000000 9000000000 -> 8100000000000000000000000000 +dqmul311 multiply 900000000000000000 90000000000 -> 81000000000000000000000000000 +dqmul312 multiply 900000000000000000 900000000000 -> 810000000000000000000000000000 +dqmul313 multiply 900000000000000000 9000000000000 -> 8100000000000000000000000000000 +dqmul314 multiply 900000000000000000 90000000000000 -> 81000000000000000000000000000000 +dqmul315 multiply 900000000000000000 900000000000000 -> 810000000000000000000000000000000 +dqmul316 multiply 900000000000000000 9000000000000000 -> 8100000000000000000000000000000000 +dqmul317 multiply 9000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+34 Rounded +dqmul318 multiply 90000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+35 Rounded +dqmul319 multiply 900000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+36 Rounded +dqmul320 multiply 9000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+37 Rounded +dqmul321 multiply 90000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+38 Rounded +dqmul322 multiply 900000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+39 Rounded +dqmul323 multiply 9000000000000000000000000 9000000000000000 -> 8.100000000000000000000000000000000E+40 Rounded + +-- tryzeros cases +dqmul504 multiply 0E-4260 1000E-4260 -> 0E-6176 Clamped +dqmul505 multiply 100E+4260 0E+4260 -> 0E+6111 Clamped + +-- mixed with zeros +dqmul541 multiply 0 -1 -> -0 +dqmul542 multiply -0 -1 -> 0 +dqmul543 multiply 0 1 -> 0 +dqmul544 multiply -0 1 -> -0 +dqmul545 multiply -1 0 -> -0 +dqmul546 multiply -1 -0 -> 0 +dqmul547 multiply 1 0 -> 0 +dqmul548 multiply 1 -0 -> -0 + +dqmul551 multiply 0.0 -1 -> -0.0 +dqmul552 multiply -0.0 -1 -> 0.0 +dqmul553 multiply 0.0 1 -> 0.0 +dqmul554 multiply -0.0 1 -> -0.0 +dqmul555 multiply -1.0 0 -> -0.0 +dqmul556 multiply -1.0 -0 -> 0.0 +dqmul557 multiply 1.0 0 -> 0.0 +dqmul558 multiply 1.0 -0 -> -0.0 + +dqmul561 multiply 0 -1.0 -> -0.0 +dqmul562 multiply -0 -1.0 -> 0.0 +dqmul563 multiply 0 1.0 -> 0.0 +dqmul564 multiply -0 1.0 -> -0.0 +dqmul565 multiply -1 0.0 -> -0.0 +dqmul566 multiply -1 -0.0 -> 0.0 +dqmul567 multiply 1 0.0 -> 0.0 +dqmul568 multiply 1 -0.0 -> -0.0 + +dqmul571 multiply 0.0 -1.0 -> -0.00 +dqmul572 multiply -0.0 -1.0 -> 0.00 +dqmul573 multiply 0.0 1.0 -> 0.00 +dqmul574 multiply -0.0 1.0 -> -0.00 +dqmul575 multiply -1.0 0.0 -> -0.00 +dqmul576 multiply -1.0 -0.0 -> 0.00 +dqmul577 multiply 1.0 0.0 -> 0.00 +dqmul578 multiply 1.0 -0.0 -> -0.00 + + +-- Specials +dqmul580 multiply Inf -Inf -> -Infinity +dqmul581 multiply Inf -1000 -> -Infinity +dqmul582 multiply Inf -1 -> -Infinity +dqmul583 multiply Inf -0 -> NaN Invalid_operation +dqmul584 multiply Inf 0 -> NaN Invalid_operation +dqmul585 multiply Inf 1 -> Infinity +dqmul586 multiply Inf 1000 -> Infinity +dqmul587 multiply Inf Inf -> Infinity +dqmul588 multiply -1000 Inf -> -Infinity +dqmul589 multiply -Inf Inf -> -Infinity +dqmul590 multiply -1 Inf -> -Infinity +dqmul591 multiply -0 Inf -> NaN Invalid_operation +dqmul592 multiply 0 Inf -> NaN Invalid_operation +dqmul593 multiply 1 Inf -> Infinity +dqmul594 multiply 1000 Inf -> Infinity +dqmul595 multiply Inf Inf -> Infinity + +dqmul600 multiply -Inf -Inf -> Infinity +dqmul601 multiply -Inf -1000 -> Infinity +dqmul602 multiply -Inf -1 -> Infinity +dqmul603 multiply -Inf -0 -> NaN Invalid_operation +dqmul604 multiply -Inf 0 -> NaN Invalid_operation +dqmul605 multiply -Inf 1 -> -Infinity +dqmul606 multiply -Inf 1000 -> -Infinity +dqmul607 multiply -Inf Inf -> -Infinity +dqmul608 multiply -1000 Inf -> -Infinity +dqmul609 multiply -Inf -Inf -> Infinity +dqmul610 multiply -1 -Inf -> Infinity +dqmul611 multiply -0 -Inf -> NaN Invalid_operation +dqmul612 multiply 0 -Inf -> NaN Invalid_operation +dqmul613 multiply 1 -Inf -> -Infinity +dqmul614 multiply 1000 -Inf -> -Infinity +dqmul615 multiply Inf -Inf -> -Infinity + +dqmul621 multiply NaN -Inf -> NaN +dqmul622 multiply NaN -1000 -> NaN +dqmul623 multiply NaN -1 -> NaN +dqmul624 multiply NaN -0 -> NaN +dqmul625 multiply NaN 0 -> NaN +dqmul626 multiply NaN 1 -> NaN +dqmul627 multiply NaN 1000 -> NaN +dqmul628 multiply NaN Inf -> NaN +dqmul629 multiply NaN NaN -> NaN +dqmul630 multiply -Inf NaN -> NaN +dqmul631 multiply -1000 NaN -> NaN +dqmul632 multiply -1 NaN -> NaN +dqmul633 multiply -0 NaN -> NaN +dqmul634 multiply 0 NaN -> NaN +dqmul635 multiply 1 NaN -> NaN +dqmul636 multiply 1000 NaN -> NaN +dqmul637 multiply Inf NaN -> NaN + +dqmul641 multiply sNaN -Inf -> NaN Invalid_operation +dqmul642 multiply sNaN -1000 -> NaN Invalid_operation +dqmul643 multiply sNaN -1 -> NaN Invalid_operation +dqmul644 multiply sNaN -0 -> NaN Invalid_operation +dqmul645 multiply sNaN 0 -> NaN Invalid_operation +dqmul646 multiply sNaN 1 -> NaN Invalid_operation +dqmul647 multiply sNaN 1000 -> NaN Invalid_operation +dqmul648 multiply sNaN NaN -> NaN Invalid_operation +dqmul649 multiply sNaN sNaN -> NaN Invalid_operation +dqmul650 multiply NaN sNaN -> NaN Invalid_operation +dqmul651 multiply -Inf sNaN -> NaN Invalid_operation +dqmul652 multiply -1000 sNaN -> NaN Invalid_operation +dqmul653 multiply -1 sNaN -> NaN Invalid_operation +dqmul654 multiply -0 sNaN -> NaN Invalid_operation +dqmul655 multiply 0 sNaN -> NaN Invalid_operation +dqmul656 multiply 1 sNaN -> NaN Invalid_operation +dqmul657 multiply 1000 sNaN -> NaN Invalid_operation +dqmul658 multiply Inf sNaN -> NaN Invalid_operation +dqmul659 multiply NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqmul661 multiply NaN9 -Inf -> NaN9 +dqmul662 multiply NaN8 999 -> NaN8 +dqmul663 multiply NaN71 Inf -> NaN71 +dqmul664 multiply NaN6 NaN5 -> NaN6 +dqmul665 multiply -Inf NaN4 -> NaN4 +dqmul666 multiply -999 NaN33 -> NaN33 +dqmul667 multiply Inf NaN2 -> NaN2 + +dqmul671 multiply sNaN99 -Inf -> NaN99 Invalid_operation +dqmul672 multiply sNaN98 -11 -> NaN98 Invalid_operation +dqmul673 multiply sNaN97 NaN -> NaN97 Invalid_operation +dqmul674 multiply sNaN16 sNaN94 -> NaN16 Invalid_operation +dqmul675 multiply NaN95 sNaN93 -> NaN93 Invalid_operation +dqmul676 multiply -Inf sNaN92 -> NaN92 Invalid_operation +dqmul677 multiply 088 sNaN91 -> NaN91 Invalid_operation +dqmul678 multiply Inf sNaN90 -> NaN90 Invalid_operation +dqmul679 multiply NaN sNaN89 -> NaN89 Invalid_operation + +dqmul681 multiply -NaN9 -Inf -> -NaN9 +dqmul682 multiply -NaN8 999 -> -NaN8 +dqmul683 multiply -NaN71 Inf -> -NaN71 +dqmul684 multiply -NaN6 -NaN5 -> -NaN6 +dqmul685 multiply -Inf -NaN4 -> -NaN4 +dqmul686 multiply -999 -NaN33 -> -NaN33 +dqmul687 multiply Inf -NaN2 -> -NaN2 + +dqmul691 multiply -sNaN99 -Inf -> -NaN99 Invalid_operation +dqmul692 multiply -sNaN98 -11 -> -NaN98 Invalid_operation +dqmul693 multiply -sNaN97 NaN -> -NaN97 Invalid_operation +dqmul694 multiply -sNaN16 -sNaN94 -> -NaN16 Invalid_operation +dqmul695 multiply -NaN95 -sNaN93 -> -NaN93 Invalid_operation +dqmul696 multiply -Inf -sNaN92 -> -NaN92 Invalid_operation +dqmul697 multiply 088 -sNaN91 -> -NaN91 Invalid_operation +dqmul698 multiply Inf -sNaN90 -> -NaN90 Invalid_operation +dqmul699 multiply -NaN -sNaN89 -> -NaN89 Invalid_operation + +dqmul701 multiply -NaN -Inf -> -NaN +dqmul702 multiply -NaN 999 -> -NaN +dqmul703 multiply -NaN Inf -> -NaN +dqmul704 multiply -NaN -NaN -> -NaN +dqmul705 multiply -Inf -NaN0 -> -NaN +dqmul706 multiply -999 -NaN -> -NaN +dqmul707 multiply Inf -NaN -> -NaN + +dqmul711 multiply -sNaN -Inf -> -NaN Invalid_operation +dqmul712 multiply -sNaN -11 -> -NaN Invalid_operation +dqmul713 multiply -sNaN00 NaN -> -NaN Invalid_operation +dqmul714 multiply -sNaN -sNaN -> -NaN Invalid_operation +dqmul715 multiply -NaN -sNaN -> -NaN Invalid_operation +dqmul716 multiply -Inf -sNaN -> -NaN Invalid_operation +dqmul717 multiply 088 -sNaN -> -NaN Invalid_operation +dqmul718 multiply Inf -sNaN -> -NaN Invalid_operation +dqmul719 multiply -NaN -sNaN -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +-- signs +dqmul751 multiply 1e+4277 1e+3311 -> Infinity Overflow Inexact Rounded +dqmul752 multiply 1e+4277 -1e+3311 -> -Infinity Overflow Inexact Rounded +dqmul753 multiply -1e+4277 1e+3311 -> -Infinity Overflow Inexact Rounded +dqmul754 multiply -1e+4277 -1e+3311 -> Infinity Overflow Inexact Rounded +dqmul755 multiply 1e-4277 1e-3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul756 multiply 1e-4277 -1e-3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul757 multiply -1e-4277 1e-3311 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul758 multiply -1e-4277 -1e-3311 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +dqmul760 multiply 1e-6069 1e-101 -> 1E-6170 Subnormal +dqmul761 multiply 1e-6069 1e-102 -> 1E-6171 Subnormal +dqmul762 multiply 1e-6069 1e-103 -> 1E-6172 Subnormal +dqmul763 multiply 1e-6069 1e-104 -> 1E-6173 Subnormal +dqmul764 multiply 1e-6069 1e-105 -> 1E-6174 Subnormal +dqmul765 multiply 1e-6069 1e-106 -> 1E-6175 Subnormal +dqmul766 multiply 1e-6069 1e-107 -> 1E-6176 Subnormal +dqmul767 multiply 1e-6069 1e-108 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul768 multiply 1e-6069 1e-109 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul769 multiply 1e-6069 1e-110 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +dqmul770 multiply 1e+40 1e+6101 -> 1.000000000000000000000000000000E+6141 Clamped +dqmul771 multiply 1e+40 1e+6102 -> 1.0000000000000000000000000000000E+6142 Clamped +dqmul772 multiply 1e+40 1e+6103 -> 1.00000000000000000000000000000000E+6143 Clamped +dqmul773 multiply 1e+40 1e+6104 -> 1.000000000000000000000000000000000E+6144 Clamped +dqmul774 multiply 1e+40 1e+6105 -> Infinity Overflow Inexact Rounded +dqmul775 multiply 1e+40 1e+6106 -> Infinity Overflow Inexact Rounded +dqmul776 multiply 1e+40 1e+6107 -> Infinity Overflow Inexact Rounded +dqmul777 multiply 1e+40 1e+6108 -> Infinity Overflow Inexact Rounded +dqmul778 multiply 1e+40 1e+6109 -> Infinity Overflow Inexact Rounded +dqmul779 multiply 1e+40 1e+6110 -> Infinity Overflow Inexact Rounded + +dqmul801 multiply 1.0000E-6172 1 -> 1.0000E-6172 Subnormal +dqmul802 multiply 1.000E-6172 1e-1 -> 1.000E-6173 Subnormal +dqmul803 multiply 1.00E-6172 1e-2 -> 1.00E-6174 Subnormal +dqmul804 multiply 1.0E-6172 1e-3 -> 1.0E-6175 Subnormal +dqmul805 multiply 1.0E-6172 1e-4 -> 1E-6176 Subnormal Rounded +dqmul806 multiply 1.3E-6172 1e-4 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqmul807 multiply 1.5E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul808 multiply 1.7E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul809 multiply 2.3E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul810 multiply 2.5E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul811 multiply 2.7E-6172 1e-4 -> 3E-6176 Underflow Subnormal Inexact Rounded +dqmul812 multiply 1.49E-6172 1e-4 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqmul813 multiply 1.50E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul814 multiply 1.51E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul815 multiply 2.49E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul816 multiply 2.50E-6172 1e-4 -> 2E-6176 Underflow Subnormal Inexact Rounded +dqmul817 multiply 2.51E-6172 1e-4 -> 3E-6176 Underflow Subnormal Inexact Rounded + +dqmul818 multiply 1E-6172 1e-4 -> 1E-6176 Subnormal +dqmul819 multiply 3E-6172 1e-5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul820 multiply 5E-6172 1e-5 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul821 multiply 7E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqmul822 multiply 9E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqmul823 multiply 9.9E-6172 1e-5 -> 1E-6176 Underflow Subnormal Inexact Rounded + +dqmul824 multiply 1E-6172 -1e-4 -> -1E-6176 Subnormal +dqmul825 multiply 3E-6172 -1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul826 multiply -5E-6172 1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul827 multiply 7E-6172 -1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqmul828 multiply -9E-6172 1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqmul829 multiply 9.9E-6172 -1e-5 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqmul830 multiply 3.0E-6172 -1e-5 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqmul831 multiply 1.0E-5977 1e-200 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqmul832 multiply 1.0E-5977 1e-199 -> 1E-6176 Subnormal Rounded +dqmul833 multiply 1.0E-5977 1e-198 -> 1.0E-6175 Subnormal +dqmul834 multiply 2.0E-5977 2e-198 -> 4.0E-6175 Subnormal +dqmul835 multiply 4.0E-5977 4e-198 -> 1.60E-6174 Subnormal +dqmul836 multiply 10.0E-5977 10e-198 -> 1.000E-6173 Subnormal +dqmul837 multiply 30.0E-5977 30e-198 -> 9.000E-6173 Subnormal +dqmul838 multiply 40.0E-5982 40e-166 -> 1.6000E-6145 Subnormal +dqmul839 multiply 40.0E-5982 40e-165 -> 1.6000E-6144 Subnormal +dqmul840 multiply 40.0E-5982 40e-164 -> 1.6000E-6143 + +-- Long operand overflow may be a different path +dqmul870 multiply 100 9.999E+6143 -> Infinity Inexact Overflow Rounded +dqmul871 multiply 100 -9.999E+6143 -> -Infinity Inexact Overflow Rounded +dqmul872 multiply 9.999E+6143 100 -> Infinity Inexact Overflow Rounded +dqmul873 multiply -9.999E+6143 100 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +dqmul881 multiply 1.2347E-6133 1.2347E-40 -> 1.524E-6173 Inexact Rounded Subnormal Underflow +dqmul882 multiply 1.234E-6133 1.234E-40 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqmul883 multiply 1.23E-6133 1.23E-40 -> 1.513E-6173 Inexact Rounded Subnormal Underflow +dqmul884 multiply 1.2E-6133 1.2E-40 -> 1.44E-6173 Subnormal +dqmul885 multiply 1.2E-6133 1.2E-41 -> 1.44E-6174 Subnormal +dqmul886 multiply 1.2E-6133 1.2E-42 -> 1.4E-6175 Subnormal Inexact Rounded Underflow +dqmul887 multiply 1.2E-6133 1.3E-42 -> 1.6E-6175 Subnormal Inexact Rounded Underflow +dqmul888 multiply 1.3E-6133 1.3E-42 -> 1.7E-6175 Subnormal Inexact Rounded Underflow +dqmul889 multiply 1.3E-6133 1.3E-43 -> 2E-6176 Subnormal Inexact Rounded Underflow +dqmul890 multiply 1.3E-6134 1.3E-43 -> 0E-6176 Clamped Subnormal Inexact Rounded Underflow + +dqmul891 multiply 1.2345E-39 1.234E-6133 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow +dqmul892 multiply 1.23456E-39 1.234E-6133 -> 1.5234E-6172 Inexact Rounded Subnormal Underflow +dqmul893 multiply 1.2345E-40 1.234E-6133 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqmul894 multiply 1.23456E-40 1.234E-6133 -> 1.523E-6173 Inexact Rounded Subnormal Underflow +dqmul895 multiply 1.2345E-41 1.234E-6133 -> 1.52E-6174 Inexact Rounded Subnormal Underflow +dqmul896 multiply 1.23456E-41 1.234E-6133 -> 1.52E-6174 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +-- prove operands are exact +dqmul906 multiply 9.999999999999999999999999999999999E-6143 1 -> 9.999999999999999999999999999999999E-6143 +dqmul907 multiply 1 0.09999999999999999999999999999999999 -> 0.09999999999999999999999999999999999 +-- the next rounds to Nmin +dqmul908 multiply 9.999999999999999999999999999999999E-6143 0.09999999999999999999999999999999999 -> 1.000000000000000000000000000000000E-6143 Underflow Inexact Subnormal Rounded + +-- hugest +dqmul909 multiply 9999999999999999999999999999999999 9999999999999999999999999999999999 -> 9.999999999999999999999999999999998E+67 Inexact Rounded +-- VG case +dqmul910 multiply 8.81125000000001349436E-1548 8.000000000000000000E-1550 -> 7.049000000000010795488000000000000E-3097 Rounded + +-- Examples from SQL proposal (Krishna Kulkarni) +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 +dqmul911 multiply 130E-2 120E-2 -> 1.5600 +dqmul912 multiply 130E-2 12E-1 -> 1.560 +dqmul913 multiply 130E-2 1E0 -> 1.30 +dqmul914 multiply 1E2 1E4 -> 1E+6 + +-- power-of-ten edge cases +dqmul1001 multiply 1 10 -> 10 +dqmul1002 multiply 1 100 -> 100 +dqmul1003 multiply 1 1000 -> 1000 +dqmul1004 multiply 1 10000 -> 10000 +dqmul1005 multiply 1 100000 -> 100000 +dqmul1006 multiply 1 1000000 -> 1000000 +dqmul1007 multiply 1 10000000 -> 10000000 +dqmul1008 multiply 1 100000000 -> 100000000 +dqmul1009 multiply 1 1000000000 -> 1000000000 +dqmul1010 multiply 1 10000000000 -> 10000000000 +dqmul1011 multiply 1 100000000000 -> 100000000000 +dqmul1012 multiply 1 1000000000000 -> 1000000000000 +dqmul1013 multiply 1 10000000000000 -> 10000000000000 +dqmul1014 multiply 1 100000000000000 -> 100000000000000 +dqmul1015 multiply 1 1000000000000000 -> 1000000000000000 + +dqmul1016 multiply 1 1000000000000000000 -> 1000000000000000000 +dqmul1017 multiply 1 100000000000000000000000000 -> 100000000000000000000000000 +dqmul1018 multiply 1 1000000000000000000000000000 -> 1000000000000000000000000000 +dqmul1019 multiply 1 10000000000000000000000000000 -> 10000000000000000000000000000 +dqmul1020 multiply 1 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1021 multiply 10 1 -> 10 +dqmul1022 multiply 10 10 -> 100 +dqmul1023 multiply 10 100 -> 1000 +dqmul1024 multiply 10 1000 -> 10000 +dqmul1025 multiply 10 10000 -> 100000 +dqmul1026 multiply 10 100000 -> 1000000 +dqmul1027 multiply 10 1000000 -> 10000000 +dqmul1028 multiply 10 10000000 -> 100000000 +dqmul1029 multiply 10 100000000 -> 1000000000 +dqmul1030 multiply 10 1000000000 -> 10000000000 +dqmul1031 multiply 10 10000000000 -> 100000000000 +dqmul1032 multiply 10 100000000000 -> 1000000000000 +dqmul1033 multiply 10 1000000000000 -> 10000000000000 +dqmul1034 multiply 10 10000000000000 -> 100000000000000 +dqmul1035 multiply 10 100000000000000 -> 1000000000000000 + +dqmul1036 multiply 10 100000000000000000 -> 1000000000000000000 +dqmul1037 multiply 10 10000000000000000000000000 -> 100000000000000000000000000 +dqmul1038 multiply 10 100000000000000000000000000 -> 1000000000000000000000000000 +dqmul1039 multiply 10 1000000000000000000000000000 -> 10000000000000000000000000000 +dqmul1040 multiply 10 100000000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1041 multiply 100 0.1 -> 10.0 +dqmul1042 multiply 100 1 -> 100 +dqmul1043 multiply 100 10 -> 1000 +dqmul1044 multiply 100 100 -> 10000 +dqmul1045 multiply 100 1000 -> 100000 +dqmul1046 multiply 100 10000 -> 1000000 +dqmul1047 multiply 100 100000 -> 10000000 +dqmul1048 multiply 100 1000000 -> 100000000 +dqmul1049 multiply 100 10000000 -> 1000000000 +dqmul1050 multiply 100 100000000 -> 10000000000 +dqmul1051 multiply 100 1000000000 -> 100000000000 +dqmul1052 multiply 100 10000000000 -> 1000000000000 +dqmul1053 multiply 100 100000000000 -> 10000000000000 +dqmul1054 multiply 100 1000000000000 -> 100000000000000 +dqmul1055 multiply 100 10000000000000 -> 1000000000000000 + +dqmul1056 multiply 100 10000000000000000 -> 1000000000000000000 +dqmul1057 multiply 100 1000000000000000000000000 -> 100000000000000000000000000 +dqmul1058 multiply 100 10000000000000000000000000 -> 1000000000000000000000000000 +dqmul1059 multiply 100 100000000000000000000000000 -> 10000000000000000000000000000 +dqmul1060 multiply 100 10000000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1061 multiply 1000 0.01 -> 10.00 +dqmul1062 multiply 1000 0.1 -> 100.0 +dqmul1063 multiply 1000 1 -> 1000 +dqmul1064 multiply 1000 10 -> 10000 +dqmul1065 multiply 1000 100 -> 100000 +dqmul1066 multiply 1000 1000 -> 1000000 +dqmul1067 multiply 1000 10000 -> 10000000 +dqmul1068 multiply 1000 100000 -> 100000000 +dqmul1069 multiply 1000 1000000 -> 1000000000 +dqmul1070 multiply 1000 10000000 -> 10000000000 +dqmul1071 multiply 1000 100000000 -> 100000000000 +dqmul1072 multiply 1000 1000000000 -> 1000000000000 +dqmul1073 multiply 1000 10000000000 -> 10000000000000 +dqmul1074 multiply 1000 100000000000 -> 100000000000000 +dqmul1075 multiply 1000 1000000000000 -> 1000000000000000 + +dqmul1076 multiply 1000 1000000000000000 -> 1000000000000000000 +dqmul1077 multiply 1000 100000000000000000000000 -> 100000000000000000000000000 +dqmul1078 multiply 1000 1000000000000000000000000 -> 1000000000000000000000000000 +dqmul1079 multiply 1000 10000000000000000000000000 -> 10000000000000000000000000000 +dqmul1080 multiply 1000 1000000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1081 multiply 10000 0.001 -> 10.000 +dqmul1082 multiply 10000 0.01 -> 100.00 +dqmul1083 multiply 10000 0.1 -> 1000.0 +dqmul1084 multiply 10000 1 -> 10000 +dqmul1085 multiply 10000 10 -> 100000 +dqmul1086 multiply 10000 100 -> 1000000 +dqmul1087 multiply 10000 1000 -> 10000000 +dqmul1088 multiply 10000 10000 -> 100000000 +dqmul1089 multiply 10000 100000 -> 1000000000 +dqmul1090 multiply 10000 1000000 -> 10000000000 +dqmul1091 multiply 10000 10000000 -> 100000000000 +dqmul1092 multiply 10000 100000000 -> 1000000000000 +dqmul1093 multiply 10000 1000000000 -> 10000000000000 +dqmul1094 multiply 10000 10000000000 -> 100000000000000 +dqmul1095 multiply 10000 100000000000 -> 1000000000000000 + +dqmul1096 multiply 10000 100000000000000 -> 1000000000000000000 +dqmul1097 multiply 10000 10000000000000000000000 -> 100000000000000000000000000 +dqmul1098 multiply 10000 100000000000000000000000 -> 1000000000000000000000000000 +dqmul1099 multiply 10000 1000000000000000000000000 -> 10000000000000000000000000000 +dqmul1100 multiply 10000 100000000000000000000000000000 -> 1000000000000000000000000000000000 + +dqmul1107 multiply 10000 99999999999 -> 999999999990000 +dqmul1108 multiply 10000 99999999999 -> 999999999990000 + +-- Null tests +dqmul9990 multiply 10 # -> NaN Invalid_operation +dqmul9991 multiply # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqNextMinus.decTest b/Lib/test/decimaltestdata/dqNextMinus.decTest index 8177b58c6d4..34f39581c3d 100644 --- a/Lib/test/decimaltestdata/dqNextMinus.decTest +++ b/Lib/test/decimaltestdata/dqNextMinus.decTest @@ -1,126 +1,126 @@ ------------------------------------------------------------------------- --- dqNextMinus.decTest -- decQuad next that is less [754r nextdown] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqnextm001 nextminus 0.9999999999999999999999999999999995 -> 0.9999999999999999999999999999999994 -dqnextm002 nextminus 0.9999999999999999999999999999999996 -> 0.9999999999999999999999999999999995 -dqnextm003 nextminus 0.9999999999999999999999999999999997 -> 0.9999999999999999999999999999999996 -dqnextm004 nextminus 0.9999999999999999999999999999999998 -> 0.9999999999999999999999999999999997 -dqnextm005 nextminus 0.9999999999999999999999999999999999 -> 0.9999999999999999999999999999999998 -dqnextm006 nextminus 1.000000000000000000000000000000000 -> 0.9999999999999999999999999999999999 -dqnextm007 nextminus 1.0 -> 0.9999999999999999999999999999999999 -dqnextm008 nextminus 1 -> 0.9999999999999999999999999999999999 -dqnextm009 nextminus 1.000000000000000000000000000000001 -> 1.000000000000000000000000000000000 -dqnextm010 nextminus 1.000000000000000000000000000000002 -> 1.000000000000000000000000000000001 -dqnextm011 nextminus 1.000000000000000000000000000000003 -> 1.000000000000000000000000000000002 -dqnextm012 nextminus 1.000000000000000000000000000000004 -> 1.000000000000000000000000000000003 -dqnextm013 nextminus 1.000000000000000000000000000000005 -> 1.000000000000000000000000000000004 -dqnextm014 nextminus 1.000000000000000000000000000000006 -> 1.000000000000000000000000000000005 -dqnextm015 nextminus 1.000000000000000000000000000000007 -> 1.000000000000000000000000000000006 -dqnextm016 nextminus 1.000000000000000000000000000000008 -> 1.000000000000000000000000000000007 -dqnextm017 nextminus 1.000000000000000000000000000000009 -> 1.000000000000000000000000000000008 -dqnextm018 nextminus 1.000000000000000000000000000000010 -> 1.000000000000000000000000000000009 -dqnextm019 nextminus 1.000000000000000000000000000000011 -> 1.000000000000000000000000000000010 -dqnextm020 nextminus 1.000000000000000000000000000000012 -> 1.000000000000000000000000000000011 - -dqnextm021 nextminus -0.9999999999999999999999999999999995 -> -0.9999999999999999999999999999999996 -dqnextm022 nextminus -0.9999999999999999999999999999999996 -> -0.9999999999999999999999999999999997 -dqnextm023 nextminus -0.9999999999999999999999999999999997 -> -0.9999999999999999999999999999999998 -dqnextm024 nextminus -0.9999999999999999999999999999999998 -> -0.9999999999999999999999999999999999 -dqnextm025 nextminus -0.9999999999999999999999999999999999 -> -1.000000000000000000000000000000000 -dqnextm026 nextminus -1.000000000000000000000000000000000 -> -1.000000000000000000000000000000001 -dqnextm027 nextminus -1.0 -> -1.000000000000000000000000000000001 -dqnextm028 nextminus -1 -> -1.000000000000000000000000000000001 -dqnextm029 nextminus -1.000000000000000000000000000000001 -> -1.000000000000000000000000000000002 -dqnextm030 nextminus -1.000000000000000000000000000000002 -> -1.000000000000000000000000000000003 -dqnextm031 nextminus -1.000000000000000000000000000000003 -> -1.000000000000000000000000000000004 -dqnextm032 nextminus -1.000000000000000000000000000000004 -> -1.000000000000000000000000000000005 -dqnextm033 nextminus -1.000000000000000000000000000000005 -> -1.000000000000000000000000000000006 -dqnextm034 nextminus -1.000000000000000000000000000000006 -> -1.000000000000000000000000000000007 -dqnextm035 nextminus -1.000000000000000000000000000000007 -> -1.000000000000000000000000000000008 -dqnextm036 nextminus -1.000000000000000000000000000000008 -> -1.000000000000000000000000000000009 -dqnextm037 nextminus -1.000000000000000000000000000000009 -> -1.000000000000000000000000000000010 -dqnextm038 nextminus -1.000000000000000000000000000000010 -> -1.000000000000000000000000000000011 -dqnextm039 nextminus -1.000000000000000000000000000000011 -> -1.000000000000000000000000000000012 - --- ultra-tiny inputs -dqnextm062 nextminus 1E-6176 -> 0E-6176 -dqnextm065 nextminus -1E-6176 -> -2E-6176 - --- Zeros -dqnextm100 nextminus -0 -> -1E-6176 -dqnextm101 nextminus 0 -> -1E-6176 -dqnextm102 nextminus 0.00 -> -1E-6176 -dqnextm103 nextminus -0.00 -> -1E-6176 -dqnextm104 nextminus 0E-300 -> -1E-6176 -dqnextm105 nextminus 0E+300 -> -1E-6176 -dqnextm106 nextminus 0E+30000 -> -1E-6176 -dqnextm107 nextminus -0E+30000 -> -1E-6176 - --- specials -dqnextm150 nextminus Inf -> 9.999999999999999999999999999999999E+6144 -dqnextm151 nextminus -Inf -> -Infinity -dqnextm152 nextminus NaN -> NaN -dqnextm153 nextminus sNaN -> NaN Invalid_operation -dqnextm154 nextminus NaN77 -> NaN77 -dqnextm155 nextminus sNaN88 -> NaN88 Invalid_operation -dqnextm156 nextminus -NaN -> -NaN -dqnextm157 nextminus -sNaN -> -NaN Invalid_operation -dqnextm158 nextminus -NaN77 -> -NaN77 -dqnextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -dqnextm170 nextminus 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999998E+6144 -dqnextm171 nextminus 9.999999999999999999999999999999998E+6144 -> 9.999999999999999999999999999999997E+6144 -dqnextm172 nextminus 1E-6143 -> 9.99999999999999999999999999999999E-6144 -dqnextm173 nextminus 1.000000000000000000000000000000000E-6143 -> 9.99999999999999999999999999999999E-6144 -dqnextm174 nextminus 9E-6176 -> 8E-6176 -dqnextm175 nextminus 9.9E-6175 -> 9.8E-6175 -dqnextm176 nextminus 9.99999999999999999999999999999E-6147 -> 9.99999999999999999999999999998E-6147 -dqnextm177 nextminus 9.99999999999999999999999999999999E-6144 -> 9.99999999999999999999999999999998E-6144 -dqnextm178 nextminus 9.99999999999999999999999999999998E-6144 -> 9.99999999999999999999999999999997E-6144 -dqnextm179 nextminus 9.99999999999999999999999999999997E-6144 -> 9.99999999999999999999999999999996E-6144 -dqnextm180 nextminus 0E-6176 -> -1E-6176 -dqnextm181 nextminus 1E-6176 -> 0E-6176 -dqnextm182 nextminus 2E-6176 -> 1E-6176 - -dqnextm183 nextminus -0E-6176 -> -1E-6176 -dqnextm184 nextminus -1E-6176 -> -2E-6176 -dqnextm185 nextminus -2E-6176 -> -3E-6176 -dqnextm186 nextminus -10E-6176 -> -1.1E-6175 -dqnextm187 nextminus -100E-6176 -> -1.01E-6174 -dqnextm188 nextminus -100000E-6176 -> -1.00001E-6171 -dqnextm189 nextminus -1.00000000000000000000000000000E-6143 -> -1.000000000000000000000000000000001E-6143 -dqnextm190 nextminus -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000001E-6143 -dqnextm191 nextminus -1E-6143 -> -1.000000000000000000000000000000001E-6143 -dqnextm192 nextminus -9.999999999999999999999999999999998E+6144 -> -9.999999999999999999999999999999999E+6144 -dqnextm193 nextminus -9.999999999999999999999999999999999E+6144 -> -Infinity - --- Null tests -dqnextm900 nextminus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqNextMinus.decTest -- decQuad next that is less [754r nextdown] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqnextm001 nextminus 0.9999999999999999999999999999999995 -> 0.9999999999999999999999999999999994 +dqnextm002 nextminus 0.9999999999999999999999999999999996 -> 0.9999999999999999999999999999999995 +dqnextm003 nextminus 0.9999999999999999999999999999999997 -> 0.9999999999999999999999999999999996 +dqnextm004 nextminus 0.9999999999999999999999999999999998 -> 0.9999999999999999999999999999999997 +dqnextm005 nextminus 0.9999999999999999999999999999999999 -> 0.9999999999999999999999999999999998 +dqnextm006 nextminus 1.000000000000000000000000000000000 -> 0.9999999999999999999999999999999999 +dqnextm007 nextminus 1.0 -> 0.9999999999999999999999999999999999 +dqnextm008 nextminus 1 -> 0.9999999999999999999999999999999999 +dqnextm009 nextminus 1.000000000000000000000000000000001 -> 1.000000000000000000000000000000000 +dqnextm010 nextminus 1.000000000000000000000000000000002 -> 1.000000000000000000000000000000001 +dqnextm011 nextminus 1.000000000000000000000000000000003 -> 1.000000000000000000000000000000002 +dqnextm012 nextminus 1.000000000000000000000000000000004 -> 1.000000000000000000000000000000003 +dqnextm013 nextminus 1.000000000000000000000000000000005 -> 1.000000000000000000000000000000004 +dqnextm014 nextminus 1.000000000000000000000000000000006 -> 1.000000000000000000000000000000005 +dqnextm015 nextminus 1.000000000000000000000000000000007 -> 1.000000000000000000000000000000006 +dqnextm016 nextminus 1.000000000000000000000000000000008 -> 1.000000000000000000000000000000007 +dqnextm017 nextminus 1.000000000000000000000000000000009 -> 1.000000000000000000000000000000008 +dqnextm018 nextminus 1.000000000000000000000000000000010 -> 1.000000000000000000000000000000009 +dqnextm019 nextminus 1.000000000000000000000000000000011 -> 1.000000000000000000000000000000010 +dqnextm020 nextminus 1.000000000000000000000000000000012 -> 1.000000000000000000000000000000011 + +dqnextm021 nextminus -0.9999999999999999999999999999999995 -> -0.9999999999999999999999999999999996 +dqnextm022 nextminus -0.9999999999999999999999999999999996 -> -0.9999999999999999999999999999999997 +dqnextm023 nextminus -0.9999999999999999999999999999999997 -> -0.9999999999999999999999999999999998 +dqnextm024 nextminus -0.9999999999999999999999999999999998 -> -0.9999999999999999999999999999999999 +dqnextm025 nextminus -0.9999999999999999999999999999999999 -> -1.000000000000000000000000000000000 +dqnextm026 nextminus -1.000000000000000000000000000000000 -> -1.000000000000000000000000000000001 +dqnextm027 nextminus -1.0 -> -1.000000000000000000000000000000001 +dqnextm028 nextminus -1 -> -1.000000000000000000000000000000001 +dqnextm029 nextminus -1.000000000000000000000000000000001 -> -1.000000000000000000000000000000002 +dqnextm030 nextminus -1.000000000000000000000000000000002 -> -1.000000000000000000000000000000003 +dqnextm031 nextminus -1.000000000000000000000000000000003 -> -1.000000000000000000000000000000004 +dqnextm032 nextminus -1.000000000000000000000000000000004 -> -1.000000000000000000000000000000005 +dqnextm033 nextminus -1.000000000000000000000000000000005 -> -1.000000000000000000000000000000006 +dqnextm034 nextminus -1.000000000000000000000000000000006 -> -1.000000000000000000000000000000007 +dqnextm035 nextminus -1.000000000000000000000000000000007 -> -1.000000000000000000000000000000008 +dqnextm036 nextminus -1.000000000000000000000000000000008 -> -1.000000000000000000000000000000009 +dqnextm037 nextminus -1.000000000000000000000000000000009 -> -1.000000000000000000000000000000010 +dqnextm038 nextminus -1.000000000000000000000000000000010 -> -1.000000000000000000000000000000011 +dqnextm039 nextminus -1.000000000000000000000000000000011 -> -1.000000000000000000000000000000012 + +-- ultra-tiny inputs +dqnextm062 nextminus 1E-6176 -> 0E-6176 +dqnextm065 nextminus -1E-6176 -> -2E-6176 + +-- Zeros +dqnextm100 nextminus -0 -> -1E-6176 +dqnextm101 nextminus 0 -> -1E-6176 +dqnextm102 nextminus 0.00 -> -1E-6176 +dqnextm103 nextminus -0.00 -> -1E-6176 +dqnextm104 nextminus 0E-300 -> -1E-6176 +dqnextm105 nextminus 0E+300 -> -1E-6176 +dqnextm106 nextminus 0E+30000 -> -1E-6176 +dqnextm107 nextminus -0E+30000 -> -1E-6176 + +-- specials +dqnextm150 nextminus Inf -> 9.999999999999999999999999999999999E+6144 +dqnextm151 nextminus -Inf -> -Infinity +dqnextm152 nextminus NaN -> NaN +dqnextm153 nextminus sNaN -> NaN Invalid_operation +dqnextm154 nextminus NaN77 -> NaN77 +dqnextm155 nextminus sNaN88 -> NaN88 Invalid_operation +dqnextm156 nextminus -NaN -> -NaN +dqnextm157 nextminus -sNaN -> -NaN Invalid_operation +dqnextm158 nextminus -NaN77 -> -NaN77 +dqnextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +dqnextm170 nextminus 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999998E+6144 +dqnextm171 nextminus 9.999999999999999999999999999999998E+6144 -> 9.999999999999999999999999999999997E+6144 +dqnextm172 nextminus 1E-6143 -> 9.99999999999999999999999999999999E-6144 +dqnextm173 nextminus 1.000000000000000000000000000000000E-6143 -> 9.99999999999999999999999999999999E-6144 +dqnextm174 nextminus 9E-6176 -> 8E-6176 +dqnextm175 nextminus 9.9E-6175 -> 9.8E-6175 +dqnextm176 nextminus 9.99999999999999999999999999999E-6147 -> 9.99999999999999999999999999998E-6147 +dqnextm177 nextminus 9.99999999999999999999999999999999E-6144 -> 9.99999999999999999999999999999998E-6144 +dqnextm178 nextminus 9.99999999999999999999999999999998E-6144 -> 9.99999999999999999999999999999997E-6144 +dqnextm179 nextminus 9.99999999999999999999999999999997E-6144 -> 9.99999999999999999999999999999996E-6144 +dqnextm180 nextminus 0E-6176 -> -1E-6176 +dqnextm181 nextminus 1E-6176 -> 0E-6176 +dqnextm182 nextminus 2E-6176 -> 1E-6176 + +dqnextm183 nextminus -0E-6176 -> -1E-6176 +dqnextm184 nextminus -1E-6176 -> -2E-6176 +dqnextm185 nextminus -2E-6176 -> -3E-6176 +dqnextm186 nextminus -10E-6176 -> -1.1E-6175 +dqnextm187 nextminus -100E-6176 -> -1.01E-6174 +dqnextm188 nextminus -100000E-6176 -> -1.00001E-6171 +dqnextm189 nextminus -1.00000000000000000000000000000E-6143 -> -1.000000000000000000000000000000001E-6143 +dqnextm190 nextminus -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000001E-6143 +dqnextm191 nextminus -1E-6143 -> -1.000000000000000000000000000000001E-6143 +dqnextm192 nextminus -9.999999999999999999999999999999998E+6144 -> -9.999999999999999999999999999999999E+6144 +dqnextm193 nextminus -9.999999999999999999999999999999999E+6144 -> -Infinity + +-- Null tests +dqnextm900 nextminus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqNextPlus.decTest b/Lib/test/decimaltestdata/dqNextPlus.decTest index 8c8e9cd2e79..ac3f04e69b7 100644 --- a/Lib/test/decimaltestdata/dqNextPlus.decTest +++ b/Lib/test/decimaltestdata/dqNextPlus.decTest @@ -1,124 +1,124 @@ ------------------------------------------------------------------------- --- dqNextPlus.decTest -- decQuad next that is greater [754r nextup] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqnextp001 nextplus 0.9999999999999999999999999999999995 -> 0.9999999999999999999999999999999996 -dqnextp002 nextplus 0.9999999999999999999999999999999996 -> 0.9999999999999999999999999999999997 -dqnextp003 nextplus 0.9999999999999999999999999999999997 -> 0.9999999999999999999999999999999998 -dqnextp004 nextplus 0.9999999999999999999999999999999998 -> 0.9999999999999999999999999999999999 -dqnextp005 nextplus 0.9999999999999999999999999999999999 -> 1.000000000000000000000000000000000 -dqnextp006 nextplus 1.000000000000000000000000000000000 -> 1.000000000000000000000000000000001 -dqnextp007 nextplus 1.0 -> 1.000000000000000000000000000000001 -dqnextp008 nextplus 1 -> 1.000000000000000000000000000000001 -dqnextp009 nextplus 1.000000000000000000000000000000001 -> 1.000000000000000000000000000000002 -dqnextp010 nextplus 1.000000000000000000000000000000002 -> 1.000000000000000000000000000000003 -dqnextp011 nextplus 1.000000000000000000000000000000003 -> 1.000000000000000000000000000000004 -dqnextp012 nextplus 1.000000000000000000000000000000004 -> 1.000000000000000000000000000000005 -dqnextp013 nextplus 1.000000000000000000000000000000005 -> 1.000000000000000000000000000000006 -dqnextp014 nextplus 1.000000000000000000000000000000006 -> 1.000000000000000000000000000000007 -dqnextp015 nextplus 1.000000000000000000000000000000007 -> 1.000000000000000000000000000000008 -dqnextp016 nextplus 1.000000000000000000000000000000008 -> 1.000000000000000000000000000000009 -dqnextp017 nextplus 1.000000000000000000000000000000009 -> 1.000000000000000000000000000000010 -dqnextp018 nextplus 1.000000000000000000000000000000010 -> 1.000000000000000000000000000000011 -dqnextp019 nextplus 1.000000000000000000000000000000011 -> 1.000000000000000000000000000000012 - -dqnextp021 nextplus -0.9999999999999999999999999999999995 -> -0.9999999999999999999999999999999994 -dqnextp022 nextplus -0.9999999999999999999999999999999996 -> -0.9999999999999999999999999999999995 -dqnextp023 nextplus -0.9999999999999999999999999999999997 -> -0.9999999999999999999999999999999996 -dqnextp024 nextplus -0.9999999999999999999999999999999998 -> -0.9999999999999999999999999999999997 -dqnextp025 nextplus -0.9999999999999999999999999999999999 -> -0.9999999999999999999999999999999998 -dqnextp026 nextplus -1.000000000000000000000000000000000 -> -0.9999999999999999999999999999999999 -dqnextp027 nextplus -1.0 -> -0.9999999999999999999999999999999999 -dqnextp028 nextplus -1 -> -0.9999999999999999999999999999999999 -dqnextp029 nextplus -1.000000000000000000000000000000001 -> -1.000000000000000000000000000000000 -dqnextp030 nextplus -1.000000000000000000000000000000002 -> -1.000000000000000000000000000000001 -dqnextp031 nextplus -1.000000000000000000000000000000003 -> -1.000000000000000000000000000000002 -dqnextp032 nextplus -1.000000000000000000000000000000004 -> -1.000000000000000000000000000000003 -dqnextp033 nextplus -1.000000000000000000000000000000005 -> -1.000000000000000000000000000000004 -dqnextp034 nextplus -1.000000000000000000000000000000006 -> -1.000000000000000000000000000000005 -dqnextp035 nextplus -1.000000000000000000000000000000007 -> -1.000000000000000000000000000000006 -dqnextp036 nextplus -1.000000000000000000000000000000008 -> -1.000000000000000000000000000000007 -dqnextp037 nextplus -1.000000000000000000000000000000009 -> -1.000000000000000000000000000000008 -dqnextp038 nextplus -1.000000000000000000000000000000010 -> -1.000000000000000000000000000000009 -dqnextp039 nextplus -1.000000000000000000000000000000011 -> -1.000000000000000000000000000000010 -dqnextp040 nextplus -1.000000000000000000000000000000012 -> -1.000000000000000000000000000000011 - --- Zeros -dqnextp100 nextplus 0 -> 1E-6176 -dqnextp101 nextplus 0.00 -> 1E-6176 -dqnextp102 nextplus 0E-300 -> 1E-6176 -dqnextp103 nextplus 0E+300 -> 1E-6176 -dqnextp104 nextplus 0E+30000 -> 1E-6176 -dqnextp105 nextplus -0 -> 1E-6176 -dqnextp106 nextplus -0.00 -> 1E-6176 -dqnextp107 nextplus -0E-300 -> 1E-6176 -dqnextp108 nextplus -0E+300 -> 1E-6176 -dqnextp109 nextplus -0E+30000 -> 1E-6176 - --- specials -dqnextp150 nextplus Inf -> Infinity -dqnextp151 nextplus -Inf -> -9.999999999999999999999999999999999E+6144 -dqnextp152 nextplus NaN -> NaN -dqnextp153 nextplus sNaN -> NaN Invalid_operation -dqnextp154 nextplus NaN77 -> NaN77 -dqnextp155 nextplus sNaN88 -> NaN88 Invalid_operation -dqnextp156 nextplus -NaN -> -NaN -dqnextp157 nextplus -sNaN -> -NaN Invalid_operation -dqnextp158 nextplus -NaN77 -> -NaN77 -dqnextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -dqnextp170 nextplus -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999998E+6144 -dqnextp171 nextplus -9.999999999999999999999999999999998E+6144 -> -9.999999999999999999999999999999997E+6144 -dqnextp172 nextplus -1E-6143 -> -9.99999999999999999999999999999999E-6144 -dqnextp173 nextplus -1.000000000000000E-6143 -> -9.99999999999999999999999999999999E-6144 -dqnextp174 nextplus -9E-6176 -> -8E-6176 -dqnextp175 nextplus -9.9E-6175 -> -9.8E-6175 -dqnextp176 nextplus -9.99999999999999999999999999999E-6147 -> -9.99999999999999999999999999998E-6147 -dqnextp177 nextplus -9.99999999999999999999999999999999E-6144 -> -9.99999999999999999999999999999998E-6144 -dqnextp178 nextplus -9.99999999999999999999999999999998E-6144 -> -9.99999999999999999999999999999997E-6144 -dqnextp179 nextplus -9.99999999999999999999999999999997E-6144 -> -9.99999999999999999999999999999996E-6144 -dqnextp180 nextplus -0E-6176 -> 1E-6176 -dqnextp181 nextplus -1E-6176 -> -0E-6176 -dqnextp182 nextplus -2E-6176 -> -1E-6176 - -dqnextp183 nextplus 0E-6176 -> 1E-6176 -dqnextp184 nextplus 1E-6176 -> 2E-6176 -dqnextp185 nextplus 2E-6176 -> 3E-6176 -dqnextp186 nextplus 10E-6176 -> 1.1E-6175 -dqnextp187 nextplus 100E-6176 -> 1.01E-6174 -dqnextp188 nextplus 100000E-6176 -> 1.00001E-6171 -dqnextp189 nextplus 1.00000000000000000000000000000E-6143 -> 1.000000000000000000000000000000001E-6143 -dqnextp190 nextplus 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000001E-6143 -dqnextp191 nextplus 1E-6143 -> 1.000000000000000000000000000000001E-6143 -dqnextp192 nextplus 9.999999999999999999999999999999998E+6144 -> 9.999999999999999999999999999999999E+6144 -dqnextp193 nextplus 9.999999999999999999999999999999999E+6144 -> Infinity - --- Null tests -dqnextp900 nextplus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqNextPlus.decTest -- decQuad next that is greater [754r nextup] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqnextp001 nextplus 0.9999999999999999999999999999999995 -> 0.9999999999999999999999999999999996 +dqnextp002 nextplus 0.9999999999999999999999999999999996 -> 0.9999999999999999999999999999999997 +dqnextp003 nextplus 0.9999999999999999999999999999999997 -> 0.9999999999999999999999999999999998 +dqnextp004 nextplus 0.9999999999999999999999999999999998 -> 0.9999999999999999999999999999999999 +dqnextp005 nextplus 0.9999999999999999999999999999999999 -> 1.000000000000000000000000000000000 +dqnextp006 nextplus 1.000000000000000000000000000000000 -> 1.000000000000000000000000000000001 +dqnextp007 nextplus 1.0 -> 1.000000000000000000000000000000001 +dqnextp008 nextplus 1 -> 1.000000000000000000000000000000001 +dqnextp009 nextplus 1.000000000000000000000000000000001 -> 1.000000000000000000000000000000002 +dqnextp010 nextplus 1.000000000000000000000000000000002 -> 1.000000000000000000000000000000003 +dqnextp011 nextplus 1.000000000000000000000000000000003 -> 1.000000000000000000000000000000004 +dqnextp012 nextplus 1.000000000000000000000000000000004 -> 1.000000000000000000000000000000005 +dqnextp013 nextplus 1.000000000000000000000000000000005 -> 1.000000000000000000000000000000006 +dqnextp014 nextplus 1.000000000000000000000000000000006 -> 1.000000000000000000000000000000007 +dqnextp015 nextplus 1.000000000000000000000000000000007 -> 1.000000000000000000000000000000008 +dqnextp016 nextplus 1.000000000000000000000000000000008 -> 1.000000000000000000000000000000009 +dqnextp017 nextplus 1.000000000000000000000000000000009 -> 1.000000000000000000000000000000010 +dqnextp018 nextplus 1.000000000000000000000000000000010 -> 1.000000000000000000000000000000011 +dqnextp019 nextplus 1.000000000000000000000000000000011 -> 1.000000000000000000000000000000012 + +dqnextp021 nextplus -0.9999999999999999999999999999999995 -> -0.9999999999999999999999999999999994 +dqnextp022 nextplus -0.9999999999999999999999999999999996 -> -0.9999999999999999999999999999999995 +dqnextp023 nextplus -0.9999999999999999999999999999999997 -> -0.9999999999999999999999999999999996 +dqnextp024 nextplus -0.9999999999999999999999999999999998 -> -0.9999999999999999999999999999999997 +dqnextp025 nextplus -0.9999999999999999999999999999999999 -> -0.9999999999999999999999999999999998 +dqnextp026 nextplus -1.000000000000000000000000000000000 -> -0.9999999999999999999999999999999999 +dqnextp027 nextplus -1.0 -> -0.9999999999999999999999999999999999 +dqnextp028 nextplus -1 -> -0.9999999999999999999999999999999999 +dqnextp029 nextplus -1.000000000000000000000000000000001 -> -1.000000000000000000000000000000000 +dqnextp030 nextplus -1.000000000000000000000000000000002 -> -1.000000000000000000000000000000001 +dqnextp031 nextplus -1.000000000000000000000000000000003 -> -1.000000000000000000000000000000002 +dqnextp032 nextplus -1.000000000000000000000000000000004 -> -1.000000000000000000000000000000003 +dqnextp033 nextplus -1.000000000000000000000000000000005 -> -1.000000000000000000000000000000004 +dqnextp034 nextplus -1.000000000000000000000000000000006 -> -1.000000000000000000000000000000005 +dqnextp035 nextplus -1.000000000000000000000000000000007 -> -1.000000000000000000000000000000006 +dqnextp036 nextplus -1.000000000000000000000000000000008 -> -1.000000000000000000000000000000007 +dqnextp037 nextplus -1.000000000000000000000000000000009 -> -1.000000000000000000000000000000008 +dqnextp038 nextplus -1.000000000000000000000000000000010 -> -1.000000000000000000000000000000009 +dqnextp039 nextplus -1.000000000000000000000000000000011 -> -1.000000000000000000000000000000010 +dqnextp040 nextplus -1.000000000000000000000000000000012 -> -1.000000000000000000000000000000011 + +-- Zeros +dqnextp100 nextplus 0 -> 1E-6176 +dqnextp101 nextplus 0.00 -> 1E-6176 +dqnextp102 nextplus 0E-300 -> 1E-6176 +dqnextp103 nextplus 0E+300 -> 1E-6176 +dqnextp104 nextplus 0E+30000 -> 1E-6176 +dqnextp105 nextplus -0 -> 1E-6176 +dqnextp106 nextplus -0.00 -> 1E-6176 +dqnextp107 nextplus -0E-300 -> 1E-6176 +dqnextp108 nextplus -0E+300 -> 1E-6176 +dqnextp109 nextplus -0E+30000 -> 1E-6176 + +-- specials +dqnextp150 nextplus Inf -> Infinity +dqnextp151 nextplus -Inf -> -9.999999999999999999999999999999999E+6144 +dqnextp152 nextplus NaN -> NaN +dqnextp153 nextplus sNaN -> NaN Invalid_operation +dqnextp154 nextplus NaN77 -> NaN77 +dqnextp155 nextplus sNaN88 -> NaN88 Invalid_operation +dqnextp156 nextplus -NaN -> -NaN +dqnextp157 nextplus -sNaN -> -NaN Invalid_operation +dqnextp158 nextplus -NaN77 -> -NaN77 +dqnextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +dqnextp170 nextplus -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999998E+6144 +dqnextp171 nextplus -9.999999999999999999999999999999998E+6144 -> -9.999999999999999999999999999999997E+6144 +dqnextp172 nextplus -1E-6143 -> -9.99999999999999999999999999999999E-6144 +dqnextp173 nextplus -1.000000000000000E-6143 -> -9.99999999999999999999999999999999E-6144 +dqnextp174 nextplus -9E-6176 -> -8E-6176 +dqnextp175 nextplus -9.9E-6175 -> -9.8E-6175 +dqnextp176 nextplus -9.99999999999999999999999999999E-6147 -> -9.99999999999999999999999999998E-6147 +dqnextp177 nextplus -9.99999999999999999999999999999999E-6144 -> -9.99999999999999999999999999999998E-6144 +dqnextp178 nextplus -9.99999999999999999999999999999998E-6144 -> -9.99999999999999999999999999999997E-6144 +dqnextp179 nextplus -9.99999999999999999999999999999997E-6144 -> -9.99999999999999999999999999999996E-6144 +dqnextp180 nextplus -0E-6176 -> 1E-6176 +dqnextp181 nextplus -1E-6176 -> -0E-6176 +dqnextp182 nextplus -2E-6176 -> -1E-6176 + +dqnextp183 nextplus 0E-6176 -> 1E-6176 +dqnextp184 nextplus 1E-6176 -> 2E-6176 +dqnextp185 nextplus 2E-6176 -> 3E-6176 +dqnextp186 nextplus 10E-6176 -> 1.1E-6175 +dqnextp187 nextplus 100E-6176 -> 1.01E-6174 +dqnextp188 nextplus 100000E-6176 -> 1.00001E-6171 +dqnextp189 nextplus 1.00000000000000000000000000000E-6143 -> 1.000000000000000000000000000000001E-6143 +dqnextp190 nextplus 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000001E-6143 +dqnextp191 nextplus 1E-6143 -> 1.000000000000000000000000000000001E-6143 +dqnextp192 nextplus 9.999999999999999999999999999999998E+6144 -> 9.999999999999999999999999999999999E+6144 +dqnextp193 nextplus 9.999999999999999999999999999999999E+6144 -> Infinity + +-- Null tests +dqnextp900 nextplus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqNextToward.decTest b/Lib/test/decimaltestdata/dqNextToward.decTest index 107e7f5c50f..e6d1e0befb2 100644 --- a/Lib/test/decimaltestdata/dqNextToward.decTest +++ b/Lib/test/decimaltestdata/dqNextToward.decTest @@ -1,375 +1,375 @@ ------------------------------------------------------------------------- --- dqNextToward.decTest -- decQuad next toward rhs [754r nextafter] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - - --- Sanity check with a scattering of numerics -dqnextt001 nexttoward 10 10 -> 10 -dqnextt002 nexttoward -10 -10 -> -10 -dqnextt003 nexttoward 1 10 -> 1.000000000000000000000000000000001 -dqnextt004 nexttoward 1 -10 -> 0.9999999999999999999999999999999999 -dqnextt005 nexttoward -1 10 -> -0.9999999999999999999999999999999999 -dqnextt006 nexttoward -1 -10 -> -1.000000000000000000000000000000001 -dqnextt007 nexttoward 0 10 -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt008 nexttoward 0 -10 -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt009 nexttoward 9.999999999999999999999999999999999E+6144 +Infinity -> Infinity Overflow Inexact Rounded -dqnextt010 nexttoward -9.999999999999999999999999999999999E+6144 -Infinity -> -Infinity Overflow Inexact Rounded -dqnextt011 nexttoward 9.999999999999999999999999999999999 10 -> 10.00000000000000000000000000000000 -dqnextt012 nexttoward 10 9.999999999999999999999999999999999 -> 9.999999999999999999999999999999999 -dqnextt013 nexttoward -9.999999999999999999999999999999999 -10 -> -10.00000000000000000000000000000000 -dqnextt014 nexttoward -10 -9.999999999999999999999999999999999 -> -9.999999999999999999999999999999999 -dqnextt015 nexttoward 9.999999999999999999999999999999998 10 -> 9.999999999999999999999999999999999 -dqnextt016 nexttoward 10 9.999999999999999999999999999999998 -> 9.999999999999999999999999999999999 -dqnextt017 nexttoward -9.999999999999999999999999999999998 -10 -> -9.999999999999999999999999999999999 -dqnextt018 nexttoward -10 -9.999999999999999999999999999999998 -> -9.999999999999999999999999999999999 - -------- lhs=rhs --- finites -dqnextt101 nexttoward 7 7 -> 7 -dqnextt102 nexttoward -7 -7 -> -7 -dqnextt103 nexttoward 75 75 -> 75 -dqnextt104 nexttoward -75 -75 -> -75 -dqnextt105 nexttoward 7.50 7.5 -> 7.50 -dqnextt106 nexttoward -7.50 -7.50 -> -7.50 -dqnextt107 nexttoward 7.500 7.5000 -> 7.500 -dqnextt108 nexttoward -7.500 -7.5 -> -7.500 - --- zeros -dqnextt111 nexttoward 0 0 -> 0 -dqnextt112 nexttoward -0 -0 -> -0 -dqnextt113 nexttoward 0E+4 0 -> 0E+4 -dqnextt114 nexttoward -0E+4 -0 -> -0E+4 -dqnextt115 nexttoward 0.00000000000 0.000000000000 -> 0E-11 -dqnextt116 nexttoward -0.00000000000 -0.00 -> -0E-11 -dqnextt117 nexttoward 0E-141 0 -> 0E-141 -dqnextt118 nexttoward -0E-141 -000 -> -0E-141 - --- full coefficients, alternating bits -dqnextt121 nexttoward 268268268 268268268 -> 268268268 -dqnextt122 nexttoward -268268268 -268268268 -> -268268268 -dqnextt123 nexttoward 134134134 134134134 -> 134134134 -dqnextt124 nexttoward -134134134 -134134134 -> -134134134 - --- Nmax, Nmin, Ntiny -dqnextt131 nexttoward 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqnextt132 nexttoward 1E-6143 1E-6143 -> 1E-6143 -dqnextt133 nexttoward 1.000000000000000000000000000000000E-6143 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqnextt134 nexttoward 1E-6176 1E-6176 -> 1E-6176 - -dqnextt135 nexttoward -1E-6176 -1E-6176 -> -1E-6176 -dqnextt136 nexttoward -1.000000000000000000000000000000000E-6143 -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqnextt137 nexttoward -1E-6143 -1E-6143 -> -1E-6143 -dqnextt138 nexttoward -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 - -------- lhs 0.9999999999999999999999999999999996 -dqnextt202 nexttoward 0.9999999999999999999999999999999996 Infinity -> 0.9999999999999999999999999999999997 -dqnextt203 nexttoward 0.9999999999999999999999999999999997 Infinity -> 0.9999999999999999999999999999999998 -dqnextt204 nexttoward 0.9999999999999999999999999999999998 Infinity -> 0.9999999999999999999999999999999999 -dqnextt205 nexttoward 0.9999999999999999999999999999999999 Infinity -> 1.000000000000000000000000000000000 -dqnextt206 nexttoward 1.000000000000000000000000000000000 Infinity -> 1.000000000000000000000000000000001 -dqnextt207 nexttoward 1.0 Infinity -> 1.000000000000000000000000000000001 -dqnextt208 nexttoward 1 Infinity -> 1.000000000000000000000000000000001 -dqnextt209 nexttoward 1.000000000000000000000000000000001 Infinity -> 1.000000000000000000000000000000002 -dqnextt210 nexttoward 1.000000000000000000000000000000002 Infinity -> 1.000000000000000000000000000000003 -dqnextt211 nexttoward 1.000000000000000000000000000000003 Infinity -> 1.000000000000000000000000000000004 -dqnextt212 nexttoward 1.000000000000000000000000000000004 Infinity -> 1.000000000000000000000000000000005 -dqnextt213 nexttoward 1.000000000000000000000000000000005 Infinity -> 1.000000000000000000000000000000006 -dqnextt214 nexttoward 1.000000000000000000000000000000006 Infinity -> 1.000000000000000000000000000000007 -dqnextt215 nexttoward 1.000000000000000000000000000000007 Infinity -> 1.000000000000000000000000000000008 -dqnextt216 nexttoward 1.000000000000000000000000000000008 Infinity -> 1.000000000000000000000000000000009 -dqnextt217 nexttoward 1.000000000000000000000000000000009 Infinity -> 1.000000000000000000000000000000010 -dqnextt218 nexttoward 1.000000000000000000000000000000010 Infinity -> 1.000000000000000000000000000000011 -dqnextt219 nexttoward 1.000000000000000000000000000000011 Infinity -> 1.000000000000000000000000000000012 - -dqnextt221 nexttoward -0.9999999999999999999999999999999995 Infinity -> -0.9999999999999999999999999999999994 -dqnextt222 nexttoward -0.9999999999999999999999999999999996 Infinity -> -0.9999999999999999999999999999999995 -dqnextt223 nexttoward -0.9999999999999999999999999999999997 Infinity -> -0.9999999999999999999999999999999996 -dqnextt224 nexttoward -0.9999999999999999999999999999999998 Infinity -> -0.9999999999999999999999999999999997 -dqnextt225 nexttoward -0.9999999999999999999999999999999999 Infinity -> -0.9999999999999999999999999999999998 -dqnextt226 nexttoward -1.000000000000000000000000000000000 Infinity -> -0.9999999999999999999999999999999999 -dqnextt227 nexttoward -1.0 Infinity -> -0.9999999999999999999999999999999999 -dqnextt228 nexttoward -1 Infinity -> -0.9999999999999999999999999999999999 -dqnextt229 nexttoward -1.000000000000000000000000000000001 Infinity -> -1.000000000000000000000000000000000 -dqnextt230 nexttoward -1.000000000000000000000000000000002 Infinity -> -1.000000000000000000000000000000001 -dqnextt231 nexttoward -1.000000000000000000000000000000003 Infinity -> -1.000000000000000000000000000000002 -dqnextt232 nexttoward -1.000000000000000000000000000000004 Infinity -> -1.000000000000000000000000000000003 -dqnextt233 nexttoward -1.000000000000000000000000000000005 Infinity -> -1.000000000000000000000000000000004 -dqnextt234 nexttoward -1.000000000000000000000000000000006 Infinity -> -1.000000000000000000000000000000005 -dqnextt235 nexttoward -1.000000000000000000000000000000007 Infinity -> -1.000000000000000000000000000000006 -dqnextt236 nexttoward -1.000000000000000000000000000000008 Infinity -> -1.000000000000000000000000000000007 -dqnextt237 nexttoward -1.000000000000000000000000000000009 Infinity -> -1.000000000000000000000000000000008 -dqnextt238 nexttoward -1.000000000000000000000000000000010 Infinity -> -1.000000000000000000000000000000009 -dqnextt239 nexttoward -1.000000000000000000000000000000011 Infinity -> -1.000000000000000000000000000000010 -dqnextt240 nexttoward -1.000000000000000000000000000000012 Infinity -> -1.000000000000000000000000000000011 - --- Zeros -dqnextt300 nexttoward 0 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt301 nexttoward 0.00 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt302 nexttoward 0E-300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt303 nexttoward 0E+300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt304 nexttoward 0E+30000 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt305 nexttoward -0 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt306 nexttoward -0.00 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt307 nexttoward -0E-300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt308 nexttoward -0E+300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt309 nexttoward -0E+30000 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded - --- specials -dqnextt350 nexttoward Inf Infinity -> Infinity -dqnextt351 nexttoward -Inf Infinity -> -9.999999999999999999999999999999999E+6144 -dqnextt352 nexttoward NaN Infinity -> NaN -dqnextt353 nexttoward sNaN Infinity -> NaN Invalid_operation -dqnextt354 nexttoward NaN77 Infinity -> NaN77 -dqnextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation -dqnextt356 nexttoward -NaN Infinity -> -NaN -dqnextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation -dqnextt358 nexttoward -NaN77 Infinity -> -NaN77 -dqnextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -dqnextt370 nexttoward -9.999999999999999999999999999999999E+6144 Infinity -> -9.999999999999999999999999999999998E+6144 -dqnextt371 nexttoward -9.999999999999999999999999999999998E+6144 Infinity -> -9.999999999999999999999999999999997E+6144 -dqnextt372 nexttoward -1E-6143 Infinity -> -9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded -dqnextt373 nexttoward -1.000000000000000E-6143 Infinity -> -9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded -dqnextt374 nexttoward -9E-6176 Infinity -> -8E-6176 Underflow Subnormal Inexact Rounded -dqnextt375 nexttoward -9.9E-6175 Infinity -> -9.8E-6175 Underflow Subnormal Inexact Rounded -dqnextt376 nexttoward -9.99999999999999999999999999999E-6147 Infinity -> -9.99999999999999999999999999998E-6147 Underflow Subnormal Inexact Rounded -dqnextt377 nexttoward -9.99999999999999999999999999999999E-6144 Infinity -> -9.99999999999999999999999999999998E-6144 Underflow Subnormal Inexact Rounded -dqnextt378 nexttoward -9.99999999999999999999999999999998E-6144 Infinity -> -9.99999999999999999999999999999997E-6144 Underflow Subnormal Inexact Rounded -dqnextt379 nexttoward -9.99999999999999999999999999999997E-6144 Infinity -> -9.99999999999999999999999999999996E-6144 Underflow Subnormal Inexact Rounded -dqnextt380 nexttoward -0E-6176 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt381 nexttoward -1E-6176 Infinity -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqnextt382 nexttoward -2E-6176 Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded - -dqnextt383 nexttoward 0E-6176 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt384 nexttoward 1E-6176 Infinity -> 2E-6176 Underflow Subnormal Inexact Rounded -dqnextt385 nexttoward 2E-6176 Infinity -> 3E-6176 Underflow Subnormal Inexact Rounded -dqnextt386 nexttoward 10E-6176 Infinity -> 1.1E-6175 Underflow Subnormal Inexact Rounded -dqnextt387 nexttoward 100E-6176 Infinity -> 1.01E-6174 Underflow Subnormal Inexact Rounded -dqnextt388 nexttoward 100000E-6176 Infinity -> 1.00001E-6171 Underflow Subnormal Inexact Rounded -dqnextt389 nexttoward 1.00000000000000000000000000000E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 -dqnextt390 nexttoward 1.000000000000000000000000000000000E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 -dqnextt391 nexttoward 1E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 -dqnextt392 nexttoward 9.999999999999999999999999999999997E+6144 Infinity -> 9.999999999999999999999999999999998E+6144 -dqnextt393 nexttoward 9.999999999999999999999999999999998E+6144 Infinity -> 9.999999999999999999999999999999999E+6144 -dqnextt394 nexttoward 9.999999999999999999999999999999999E+6144 Infinity -> Infinity Overflow Inexact Rounded - -------- lhs>rhs -dqnextt401 nexttoward 0.9999999999999999999999999999999995 -Infinity -> 0.9999999999999999999999999999999994 -dqnextt402 nexttoward 0.9999999999999999999999999999999996 -Infinity -> 0.9999999999999999999999999999999995 -dqnextt403 nexttoward 0.9999999999999999999999999999999997 -Infinity -> 0.9999999999999999999999999999999996 -dqnextt404 nexttoward 0.9999999999999999999999999999999998 -Infinity -> 0.9999999999999999999999999999999997 -dqnextt405 nexttoward 0.9999999999999999999999999999999999 -Infinity -> 0.9999999999999999999999999999999998 -dqnextt406 nexttoward 1.000000000000000000000000000000000 -Infinity -> 0.9999999999999999999999999999999999 -dqnextt407 nexttoward 1.0 -Infinity -> 0.9999999999999999999999999999999999 -dqnextt408 nexttoward 1 -Infinity -> 0.9999999999999999999999999999999999 -dqnextt409 nexttoward 1.000000000000000000000000000000001 -Infinity -> 1.000000000000000000000000000000000 -dqnextt410 nexttoward 1.000000000000000000000000000000002 -Infinity -> 1.000000000000000000000000000000001 -dqnextt411 nexttoward 1.000000000000000000000000000000003 -Infinity -> 1.000000000000000000000000000000002 -dqnextt412 nexttoward 1.000000000000000000000000000000004 -Infinity -> 1.000000000000000000000000000000003 -dqnextt413 nexttoward 1.000000000000000000000000000000005 -Infinity -> 1.000000000000000000000000000000004 -dqnextt414 nexttoward 1.000000000000000000000000000000006 -Infinity -> 1.000000000000000000000000000000005 -dqnextt415 nexttoward 1.000000000000000000000000000000007 -Infinity -> 1.000000000000000000000000000000006 -dqnextt416 nexttoward 1.000000000000000000000000000000008 -Infinity -> 1.000000000000000000000000000000007 -dqnextt417 nexttoward 1.000000000000000000000000000000009 -Infinity -> 1.000000000000000000000000000000008 -dqnextt418 nexttoward 1.000000000000000000000000000000010 -Infinity -> 1.000000000000000000000000000000009 -dqnextt419 nexttoward 1.000000000000000000000000000000011 -Infinity -> 1.000000000000000000000000000000010 -dqnextt420 nexttoward 1.000000000000000000000000000000012 -Infinity -> 1.000000000000000000000000000000011 - -dqnextt421 nexttoward -0.9999999999999999999999999999999995 -Infinity -> -0.9999999999999999999999999999999996 -dqnextt422 nexttoward -0.9999999999999999999999999999999996 -Infinity -> -0.9999999999999999999999999999999997 -dqnextt423 nexttoward -0.9999999999999999999999999999999997 -Infinity -> -0.9999999999999999999999999999999998 -dqnextt424 nexttoward -0.9999999999999999999999999999999998 -Infinity -> -0.9999999999999999999999999999999999 -dqnextt425 nexttoward -0.9999999999999999999999999999999999 -Infinity -> -1.000000000000000000000000000000000 -dqnextt426 nexttoward -1.000000000000000000000000000000000 -Infinity -> -1.000000000000000000000000000000001 -dqnextt427 nexttoward -1.0 -Infinity -> -1.000000000000000000000000000000001 -dqnextt428 nexttoward -1 -Infinity -> -1.000000000000000000000000000000001 -dqnextt429 nexttoward -1.000000000000000000000000000000001 -Infinity -> -1.000000000000000000000000000000002 -dqnextt430 nexttoward -1.000000000000000000000000000000002 -Infinity -> -1.000000000000000000000000000000003 -dqnextt431 nexttoward -1.000000000000000000000000000000003 -Infinity -> -1.000000000000000000000000000000004 -dqnextt432 nexttoward -1.000000000000000000000000000000004 -Infinity -> -1.000000000000000000000000000000005 -dqnextt433 nexttoward -1.000000000000000000000000000000005 -Infinity -> -1.000000000000000000000000000000006 -dqnextt434 nexttoward -1.000000000000000000000000000000006 -Infinity -> -1.000000000000000000000000000000007 -dqnextt435 nexttoward -1.000000000000000000000000000000007 -Infinity -> -1.000000000000000000000000000000008 -dqnextt436 nexttoward -1.000000000000000000000000000000008 -Infinity -> -1.000000000000000000000000000000009 -dqnextt437 nexttoward -1.000000000000000000000000000000009 -Infinity -> -1.000000000000000000000000000000010 -dqnextt438 nexttoward -1.000000000000000000000000000000010 -Infinity -> -1.000000000000000000000000000000011 -dqnextt439 nexttoward -1.000000000000000000000000000000011 -Infinity -> -1.000000000000000000000000000000012 - --- Zeros -dqnextt500 nexttoward -0 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt501 nexttoward 0 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt502 nexttoward 0.00 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt503 nexttoward -0.00 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt504 nexttoward 0E-300 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt505 nexttoward 0E+300 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt506 nexttoward 0E+30000 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt507 nexttoward -0E+30000 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded - --- specials -dqnextt550 nexttoward Inf -Infinity -> 9.999999999999999999999999999999999E+6144 -dqnextt551 nexttoward -Inf -Infinity -> -Infinity -dqnextt552 nexttoward NaN -Infinity -> NaN -dqnextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation -dqnextt554 nexttoward NaN77 -Infinity -> NaN77 -dqnextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation -dqnextt556 nexttoward -NaN -Infinity -> -NaN -dqnextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation -dqnextt558 nexttoward -NaN77 -Infinity -> -NaN77 -dqnextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -dqnextt670 nexttoward 9.999999999999999999999999999999999E+6144 -Infinity -> 9.999999999999999999999999999999998E+6144 -dqnextt671 nexttoward 9.999999999999999999999999999999998E+6144 -Infinity -> 9.999999999999999999999999999999997E+6144 -dqnextt672 nexttoward 1E-6143 -Infinity -> 9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded -dqnextt673 nexttoward 1.000000000000000000000000000000000E-6143 -Infinity -> 9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded -dqnextt674 nexttoward 9E-6176 -Infinity -> 8E-6176 Underflow Subnormal Inexact Rounded -dqnextt675 nexttoward 9.9E-6175 -Infinity -> 9.8E-6175 Underflow Subnormal Inexact Rounded -dqnextt676 nexttoward 9.99999999999999999999999999999E-6147 -Infinity -> 9.99999999999999999999999999998E-6147 Underflow Subnormal Inexact Rounded -dqnextt677 nexttoward 9.99999999999999999999999999999999E-6144 -Infinity -> 9.99999999999999999999999999999998E-6144 Underflow Subnormal Inexact Rounded -dqnextt678 nexttoward 9.99999999999999999999999999999998E-6144 -Infinity -> 9.99999999999999999999999999999997E-6144 Underflow Subnormal Inexact Rounded -dqnextt679 nexttoward 9.99999999999999999999999999999997E-6144 -Infinity -> 9.99999999999999999999999999999996E-6144 Underflow Subnormal Inexact Rounded -dqnextt680 nexttoward 0E-6176 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt681 nexttoward 1E-6176 -Infinity -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqnextt682 nexttoward 2E-6176 -Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded - -dqnextt683 nexttoward -0E-6176 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt684 nexttoward -1E-6176 -Infinity -> -2E-6176 Underflow Subnormal Inexact Rounded -dqnextt685 nexttoward -2E-6176 -Infinity -> -3E-6176 Underflow Subnormal Inexact Rounded -dqnextt686 nexttoward -10E-6176 -Infinity -> -1.1E-6175 Underflow Subnormal Inexact Rounded -dqnextt687 nexttoward -100E-6176 -Infinity -> -1.01E-6174 Underflow Subnormal Inexact Rounded -dqnextt688 nexttoward -100000E-6176 -Infinity -> -1.00001E-6171 Underflow Subnormal Inexact Rounded -dqnextt689 nexttoward -1.00000000000000000000000000000E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 -dqnextt690 nexttoward -1.000000000000000000000000000000000E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 -dqnextt691 nexttoward -1E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 -dqnextt692 nexttoward -9.999999999999999999999999999999998E+6144 -Infinity -> -9.999999999999999999999999999999999E+6144 -dqnextt693 nexttoward -9.999999999999999999999999999999999E+6144 -Infinity -> -Infinity Overflow Inexact Rounded - -------- Specials -dqnextt780 nexttoward -Inf -Inf -> -Infinity -dqnextt781 nexttoward -Inf -1000 -> -9.999999999999999999999999999999999E+6144 -dqnextt782 nexttoward -Inf -1 -> -9.999999999999999999999999999999999E+6144 -dqnextt783 nexttoward -Inf -0 -> -9.999999999999999999999999999999999E+6144 -dqnextt784 nexttoward -Inf 0 -> -9.999999999999999999999999999999999E+6144 -dqnextt785 nexttoward -Inf 1 -> -9.999999999999999999999999999999999E+6144 -dqnextt786 nexttoward -Inf 1000 -> -9.999999999999999999999999999999999E+6144 -dqnextt787 nexttoward -1000 -Inf -> -1000.000000000000000000000000000001 -dqnextt788 nexttoward -Inf -Inf -> -Infinity -dqnextt789 nexttoward -1 -Inf -> -1.000000000000000000000000000000001 -dqnextt790 nexttoward -0 -Inf -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt791 nexttoward 0 -Inf -> -1E-6176 Underflow Subnormal Inexact Rounded -dqnextt792 nexttoward 1 -Inf -> 0.9999999999999999999999999999999999 -dqnextt793 nexttoward 1000 -Inf -> 999.9999999999999999999999999999999 -dqnextt794 nexttoward Inf -Inf -> 9.999999999999999999999999999999999E+6144 - -dqnextt800 nexttoward Inf -Inf -> 9.999999999999999999999999999999999E+6144 -dqnextt801 nexttoward Inf -1000 -> 9.999999999999999999999999999999999E+6144 -dqnextt802 nexttoward Inf -1 -> 9.999999999999999999999999999999999E+6144 -dqnextt803 nexttoward Inf -0 -> 9.999999999999999999999999999999999E+6144 -dqnextt804 nexttoward Inf 0 -> 9.999999999999999999999999999999999E+6144 -dqnextt805 nexttoward Inf 1 -> 9.999999999999999999999999999999999E+6144 -dqnextt806 nexttoward Inf 1000 -> 9.999999999999999999999999999999999E+6144 -dqnextt807 nexttoward Inf Inf -> Infinity -dqnextt808 nexttoward -1000 Inf -> -999.9999999999999999999999999999999 -dqnextt809 nexttoward -Inf Inf -> -9.999999999999999999999999999999999E+6144 -dqnextt810 nexttoward -1 Inf -> -0.9999999999999999999999999999999999 -dqnextt811 nexttoward -0 Inf -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt812 nexttoward 0 Inf -> 1E-6176 Underflow Subnormal Inexact Rounded -dqnextt813 nexttoward 1 Inf -> 1.000000000000000000000000000000001 -dqnextt814 nexttoward 1000 Inf -> 1000.000000000000000000000000000001 -dqnextt815 nexttoward Inf Inf -> Infinity - -dqnextt821 nexttoward NaN -Inf -> NaN -dqnextt822 nexttoward NaN -1000 -> NaN -dqnextt823 nexttoward NaN -1 -> NaN -dqnextt824 nexttoward NaN -0 -> NaN -dqnextt825 nexttoward NaN 0 -> NaN -dqnextt826 nexttoward NaN 1 -> NaN -dqnextt827 nexttoward NaN 1000 -> NaN -dqnextt828 nexttoward NaN Inf -> NaN -dqnextt829 nexttoward NaN NaN -> NaN -dqnextt830 nexttoward -Inf NaN -> NaN -dqnextt831 nexttoward -1000 NaN -> NaN -dqnextt832 nexttoward -1 NaN -> NaN -dqnextt833 nexttoward -0 NaN -> NaN -dqnextt834 nexttoward 0 NaN -> NaN -dqnextt835 nexttoward 1 NaN -> NaN -dqnextt836 nexttoward 1000 NaN -> NaN -dqnextt837 nexttoward Inf NaN -> NaN - -dqnextt841 nexttoward sNaN -Inf -> NaN Invalid_operation -dqnextt842 nexttoward sNaN -1000 -> NaN Invalid_operation -dqnextt843 nexttoward sNaN -1 -> NaN Invalid_operation -dqnextt844 nexttoward sNaN -0 -> NaN Invalid_operation -dqnextt845 nexttoward sNaN 0 -> NaN Invalid_operation -dqnextt846 nexttoward sNaN 1 -> NaN Invalid_operation -dqnextt847 nexttoward sNaN 1000 -> NaN Invalid_operation -dqnextt848 nexttoward sNaN NaN -> NaN Invalid_operation -dqnextt849 nexttoward sNaN sNaN -> NaN Invalid_operation -dqnextt850 nexttoward NaN sNaN -> NaN Invalid_operation -dqnextt851 nexttoward -Inf sNaN -> NaN Invalid_operation -dqnextt852 nexttoward -1000 sNaN -> NaN Invalid_operation -dqnextt853 nexttoward -1 sNaN -> NaN Invalid_operation -dqnextt854 nexttoward -0 sNaN -> NaN Invalid_operation -dqnextt855 nexttoward 0 sNaN -> NaN Invalid_operation -dqnextt856 nexttoward 1 sNaN -> NaN Invalid_operation -dqnextt857 nexttoward 1000 sNaN -> NaN Invalid_operation -dqnextt858 nexttoward Inf sNaN -> NaN Invalid_operation -dqnextt859 nexttoward NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqnextt861 nexttoward NaN1 -Inf -> NaN1 -dqnextt862 nexttoward +NaN2 -1000 -> NaN2 -dqnextt863 nexttoward NaN3 1000 -> NaN3 -dqnextt864 nexttoward NaN4 Inf -> NaN4 -dqnextt865 nexttoward NaN5 +NaN6 -> NaN5 -dqnextt866 nexttoward -Inf NaN7 -> NaN7 -dqnextt867 nexttoward -1000 NaN8 -> NaN8 -dqnextt868 nexttoward 1000 NaN9 -> NaN9 -dqnextt869 nexttoward Inf +NaN10 -> NaN10 -dqnextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation -dqnextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation -dqnextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation -dqnextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation -dqnextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation -dqnextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation -dqnextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation -dqnextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation -dqnextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation -dqnextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation -dqnextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqnextt882 nexttoward -NaN26 NaN28 -> -NaN26 -dqnextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqnextt884 nexttoward 1000 -NaN30 -> -NaN30 -dqnextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Null tests -dqnextt900 nexttoward 1 # -> NaN Invalid_operation -dqnextt901 nexttoward # 1 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqNextToward.decTest -- decQuad next toward rhs [754r nextafter] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + + +-- Sanity check with a scattering of numerics +dqnextt001 nexttoward 10 10 -> 10 +dqnextt002 nexttoward -10 -10 -> -10 +dqnextt003 nexttoward 1 10 -> 1.000000000000000000000000000000001 +dqnextt004 nexttoward 1 -10 -> 0.9999999999999999999999999999999999 +dqnextt005 nexttoward -1 10 -> -0.9999999999999999999999999999999999 +dqnextt006 nexttoward -1 -10 -> -1.000000000000000000000000000000001 +dqnextt007 nexttoward 0 10 -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt008 nexttoward 0 -10 -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt009 nexttoward 9.999999999999999999999999999999999E+6144 +Infinity -> Infinity Overflow Inexact Rounded +dqnextt010 nexttoward -9.999999999999999999999999999999999E+6144 -Infinity -> -Infinity Overflow Inexact Rounded +dqnextt011 nexttoward 9.999999999999999999999999999999999 10 -> 10.00000000000000000000000000000000 +dqnextt012 nexttoward 10 9.999999999999999999999999999999999 -> 9.999999999999999999999999999999999 +dqnextt013 nexttoward -9.999999999999999999999999999999999 -10 -> -10.00000000000000000000000000000000 +dqnextt014 nexttoward -10 -9.999999999999999999999999999999999 -> -9.999999999999999999999999999999999 +dqnextt015 nexttoward 9.999999999999999999999999999999998 10 -> 9.999999999999999999999999999999999 +dqnextt016 nexttoward 10 9.999999999999999999999999999999998 -> 9.999999999999999999999999999999999 +dqnextt017 nexttoward -9.999999999999999999999999999999998 -10 -> -9.999999999999999999999999999999999 +dqnextt018 nexttoward -10 -9.999999999999999999999999999999998 -> -9.999999999999999999999999999999999 + +------- lhs=rhs +-- finites +dqnextt101 nexttoward 7 7 -> 7 +dqnextt102 nexttoward -7 -7 -> -7 +dqnextt103 nexttoward 75 75 -> 75 +dqnextt104 nexttoward -75 -75 -> -75 +dqnextt105 nexttoward 7.50 7.5 -> 7.50 +dqnextt106 nexttoward -7.50 -7.50 -> -7.50 +dqnextt107 nexttoward 7.500 7.5000 -> 7.500 +dqnextt108 nexttoward -7.500 -7.5 -> -7.500 + +-- zeros +dqnextt111 nexttoward 0 0 -> 0 +dqnextt112 nexttoward -0 -0 -> -0 +dqnextt113 nexttoward 0E+4 0 -> 0E+4 +dqnextt114 nexttoward -0E+4 -0 -> -0E+4 +dqnextt115 nexttoward 0.00000000000 0.000000000000 -> 0E-11 +dqnextt116 nexttoward -0.00000000000 -0.00 -> -0E-11 +dqnextt117 nexttoward 0E-141 0 -> 0E-141 +dqnextt118 nexttoward -0E-141 -000 -> -0E-141 + +-- full coefficients, alternating bits +dqnextt121 nexttoward 268268268 268268268 -> 268268268 +dqnextt122 nexttoward -268268268 -268268268 -> -268268268 +dqnextt123 nexttoward 134134134 134134134 -> 134134134 +dqnextt124 nexttoward -134134134 -134134134 -> -134134134 + +-- Nmax, Nmin, Ntiny +dqnextt131 nexttoward 9.999999999999999999999999999999999E+6144 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqnextt132 nexttoward 1E-6143 1E-6143 -> 1E-6143 +dqnextt133 nexttoward 1.000000000000000000000000000000000E-6143 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqnextt134 nexttoward 1E-6176 1E-6176 -> 1E-6176 + +dqnextt135 nexttoward -1E-6176 -1E-6176 -> -1E-6176 +dqnextt136 nexttoward -1.000000000000000000000000000000000E-6143 -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqnextt137 nexttoward -1E-6143 -1E-6143 -> -1E-6143 +dqnextt138 nexttoward -9.999999999999999999999999999999999E+6144 -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 + +------- lhs 0.9999999999999999999999999999999996 +dqnextt202 nexttoward 0.9999999999999999999999999999999996 Infinity -> 0.9999999999999999999999999999999997 +dqnextt203 nexttoward 0.9999999999999999999999999999999997 Infinity -> 0.9999999999999999999999999999999998 +dqnextt204 nexttoward 0.9999999999999999999999999999999998 Infinity -> 0.9999999999999999999999999999999999 +dqnextt205 nexttoward 0.9999999999999999999999999999999999 Infinity -> 1.000000000000000000000000000000000 +dqnextt206 nexttoward 1.000000000000000000000000000000000 Infinity -> 1.000000000000000000000000000000001 +dqnextt207 nexttoward 1.0 Infinity -> 1.000000000000000000000000000000001 +dqnextt208 nexttoward 1 Infinity -> 1.000000000000000000000000000000001 +dqnextt209 nexttoward 1.000000000000000000000000000000001 Infinity -> 1.000000000000000000000000000000002 +dqnextt210 nexttoward 1.000000000000000000000000000000002 Infinity -> 1.000000000000000000000000000000003 +dqnextt211 nexttoward 1.000000000000000000000000000000003 Infinity -> 1.000000000000000000000000000000004 +dqnextt212 nexttoward 1.000000000000000000000000000000004 Infinity -> 1.000000000000000000000000000000005 +dqnextt213 nexttoward 1.000000000000000000000000000000005 Infinity -> 1.000000000000000000000000000000006 +dqnextt214 nexttoward 1.000000000000000000000000000000006 Infinity -> 1.000000000000000000000000000000007 +dqnextt215 nexttoward 1.000000000000000000000000000000007 Infinity -> 1.000000000000000000000000000000008 +dqnextt216 nexttoward 1.000000000000000000000000000000008 Infinity -> 1.000000000000000000000000000000009 +dqnextt217 nexttoward 1.000000000000000000000000000000009 Infinity -> 1.000000000000000000000000000000010 +dqnextt218 nexttoward 1.000000000000000000000000000000010 Infinity -> 1.000000000000000000000000000000011 +dqnextt219 nexttoward 1.000000000000000000000000000000011 Infinity -> 1.000000000000000000000000000000012 + +dqnextt221 nexttoward -0.9999999999999999999999999999999995 Infinity -> -0.9999999999999999999999999999999994 +dqnextt222 nexttoward -0.9999999999999999999999999999999996 Infinity -> -0.9999999999999999999999999999999995 +dqnextt223 nexttoward -0.9999999999999999999999999999999997 Infinity -> -0.9999999999999999999999999999999996 +dqnextt224 nexttoward -0.9999999999999999999999999999999998 Infinity -> -0.9999999999999999999999999999999997 +dqnextt225 nexttoward -0.9999999999999999999999999999999999 Infinity -> -0.9999999999999999999999999999999998 +dqnextt226 nexttoward -1.000000000000000000000000000000000 Infinity -> -0.9999999999999999999999999999999999 +dqnextt227 nexttoward -1.0 Infinity -> -0.9999999999999999999999999999999999 +dqnextt228 nexttoward -1 Infinity -> -0.9999999999999999999999999999999999 +dqnextt229 nexttoward -1.000000000000000000000000000000001 Infinity -> -1.000000000000000000000000000000000 +dqnextt230 nexttoward -1.000000000000000000000000000000002 Infinity -> -1.000000000000000000000000000000001 +dqnextt231 nexttoward -1.000000000000000000000000000000003 Infinity -> -1.000000000000000000000000000000002 +dqnextt232 nexttoward -1.000000000000000000000000000000004 Infinity -> -1.000000000000000000000000000000003 +dqnextt233 nexttoward -1.000000000000000000000000000000005 Infinity -> -1.000000000000000000000000000000004 +dqnextt234 nexttoward -1.000000000000000000000000000000006 Infinity -> -1.000000000000000000000000000000005 +dqnextt235 nexttoward -1.000000000000000000000000000000007 Infinity -> -1.000000000000000000000000000000006 +dqnextt236 nexttoward -1.000000000000000000000000000000008 Infinity -> -1.000000000000000000000000000000007 +dqnextt237 nexttoward -1.000000000000000000000000000000009 Infinity -> -1.000000000000000000000000000000008 +dqnextt238 nexttoward -1.000000000000000000000000000000010 Infinity -> -1.000000000000000000000000000000009 +dqnextt239 nexttoward -1.000000000000000000000000000000011 Infinity -> -1.000000000000000000000000000000010 +dqnextt240 nexttoward -1.000000000000000000000000000000012 Infinity -> -1.000000000000000000000000000000011 + +-- Zeros +dqnextt300 nexttoward 0 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt301 nexttoward 0.00 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt302 nexttoward 0E-300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt303 nexttoward 0E+300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt304 nexttoward 0E+30000 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt305 nexttoward -0 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt306 nexttoward -0.00 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt307 nexttoward -0E-300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt308 nexttoward -0E+300 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt309 nexttoward -0E+30000 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded + +-- specials +dqnextt350 nexttoward Inf Infinity -> Infinity +dqnextt351 nexttoward -Inf Infinity -> -9.999999999999999999999999999999999E+6144 +dqnextt352 nexttoward NaN Infinity -> NaN +dqnextt353 nexttoward sNaN Infinity -> NaN Invalid_operation +dqnextt354 nexttoward NaN77 Infinity -> NaN77 +dqnextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation +dqnextt356 nexttoward -NaN Infinity -> -NaN +dqnextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation +dqnextt358 nexttoward -NaN77 Infinity -> -NaN77 +dqnextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +dqnextt370 nexttoward -9.999999999999999999999999999999999E+6144 Infinity -> -9.999999999999999999999999999999998E+6144 +dqnextt371 nexttoward -9.999999999999999999999999999999998E+6144 Infinity -> -9.999999999999999999999999999999997E+6144 +dqnextt372 nexttoward -1E-6143 Infinity -> -9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded +dqnextt373 nexttoward -1.000000000000000E-6143 Infinity -> -9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded +dqnextt374 nexttoward -9E-6176 Infinity -> -8E-6176 Underflow Subnormal Inexact Rounded +dqnextt375 nexttoward -9.9E-6175 Infinity -> -9.8E-6175 Underflow Subnormal Inexact Rounded +dqnextt376 nexttoward -9.99999999999999999999999999999E-6147 Infinity -> -9.99999999999999999999999999998E-6147 Underflow Subnormal Inexact Rounded +dqnextt377 nexttoward -9.99999999999999999999999999999999E-6144 Infinity -> -9.99999999999999999999999999999998E-6144 Underflow Subnormal Inexact Rounded +dqnextt378 nexttoward -9.99999999999999999999999999999998E-6144 Infinity -> -9.99999999999999999999999999999997E-6144 Underflow Subnormal Inexact Rounded +dqnextt379 nexttoward -9.99999999999999999999999999999997E-6144 Infinity -> -9.99999999999999999999999999999996E-6144 Underflow Subnormal Inexact Rounded +dqnextt380 nexttoward -0E-6176 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt381 nexttoward -1E-6176 Infinity -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqnextt382 nexttoward -2E-6176 Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded + +dqnextt383 nexttoward 0E-6176 Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt384 nexttoward 1E-6176 Infinity -> 2E-6176 Underflow Subnormal Inexact Rounded +dqnextt385 nexttoward 2E-6176 Infinity -> 3E-6176 Underflow Subnormal Inexact Rounded +dqnextt386 nexttoward 10E-6176 Infinity -> 1.1E-6175 Underflow Subnormal Inexact Rounded +dqnextt387 nexttoward 100E-6176 Infinity -> 1.01E-6174 Underflow Subnormal Inexact Rounded +dqnextt388 nexttoward 100000E-6176 Infinity -> 1.00001E-6171 Underflow Subnormal Inexact Rounded +dqnextt389 nexttoward 1.00000000000000000000000000000E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 +dqnextt390 nexttoward 1.000000000000000000000000000000000E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 +dqnextt391 nexttoward 1E-6143 Infinity -> 1.000000000000000000000000000000001E-6143 +dqnextt392 nexttoward 9.999999999999999999999999999999997E+6144 Infinity -> 9.999999999999999999999999999999998E+6144 +dqnextt393 nexttoward 9.999999999999999999999999999999998E+6144 Infinity -> 9.999999999999999999999999999999999E+6144 +dqnextt394 nexttoward 9.999999999999999999999999999999999E+6144 Infinity -> Infinity Overflow Inexact Rounded + +------- lhs>rhs +dqnextt401 nexttoward 0.9999999999999999999999999999999995 -Infinity -> 0.9999999999999999999999999999999994 +dqnextt402 nexttoward 0.9999999999999999999999999999999996 -Infinity -> 0.9999999999999999999999999999999995 +dqnextt403 nexttoward 0.9999999999999999999999999999999997 -Infinity -> 0.9999999999999999999999999999999996 +dqnextt404 nexttoward 0.9999999999999999999999999999999998 -Infinity -> 0.9999999999999999999999999999999997 +dqnextt405 nexttoward 0.9999999999999999999999999999999999 -Infinity -> 0.9999999999999999999999999999999998 +dqnextt406 nexttoward 1.000000000000000000000000000000000 -Infinity -> 0.9999999999999999999999999999999999 +dqnextt407 nexttoward 1.0 -Infinity -> 0.9999999999999999999999999999999999 +dqnextt408 nexttoward 1 -Infinity -> 0.9999999999999999999999999999999999 +dqnextt409 nexttoward 1.000000000000000000000000000000001 -Infinity -> 1.000000000000000000000000000000000 +dqnextt410 nexttoward 1.000000000000000000000000000000002 -Infinity -> 1.000000000000000000000000000000001 +dqnextt411 nexttoward 1.000000000000000000000000000000003 -Infinity -> 1.000000000000000000000000000000002 +dqnextt412 nexttoward 1.000000000000000000000000000000004 -Infinity -> 1.000000000000000000000000000000003 +dqnextt413 nexttoward 1.000000000000000000000000000000005 -Infinity -> 1.000000000000000000000000000000004 +dqnextt414 nexttoward 1.000000000000000000000000000000006 -Infinity -> 1.000000000000000000000000000000005 +dqnextt415 nexttoward 1.000000000000000000000000000000007 -Infinity -> 1.000000000000000000000000000000006 +dqnextt416 nexttoward 1.000000000000000000000000000000008 -Infinity -> 1.000000000000000000000000000000007 +dqnextt417 nexttoward 1.000000000000000000000000000000009 -Infinity -> 1.000000000000000000000000000000008 +dqnextt418 nexttoward 1.000000000000000000000000000000010 -Infinity -> 1.000000000000000000000000000000009 +dqnextt419 nexttoward 1.000000000000000000000000000000011 -Infinity -> 1.000000000000000000000000000000010 +dqnextt420 nexttoward 1.000000000000000000000000000000012 -Infinity -> 1.000000000000000000000000000000011 + +dqnextt421 nexttoward -0.9999999999999999999999999999999995 -Infinity -> -0.9999999999999999999999999999999996 +dqnextt422 nexttoward -0.9999999999999999999999999999999996 -Infinity -> -0.9999999999999999999999999999999997 +dqnextt423 nexttoward -0.9999999999999999999999999999999997 -Infinity -> -0.9999999999999999999999999999999998 +dqnextt424 nexttoward -0.9999999999999999999999999999999998 -Infinity -> -0.9999999999999999999999999999999999 +dqnextt425 nexttoward -0.9999999999999999999999999999999999 -Infinity -> -1.000000000000000000000000000000000 +dqnextt426 nexttoward -1.000000000000000000000000000000000 -Infinity -> -1.000000000000000000000000000000001 +dqnextt427 nexttoward -1.0 -Infinity -> -1.000000000000000000000000000000001 +dqnextt428 nexttoward -1 -Infinity -> -1.000000000000000000000000000000001 +dqnextt429 nexttoward -1.000000000000000000000000000000001 -Infinity -> -1.000000000000000000000000000000002 +dqnextt430 nexttoward -1.000000000000000000000000000000002 -Infinity -> -1.000000000000000000000000000000003 +dqnextt431 nexttoward -1.000000000000000000000000000000003 -Infinity -> -1.000000000000000000000000000000004 +dqnextt432 nexttoward -1.000000000000000000000000000000004 -Infinity -> -1.000000000000000000000000000000005 +dqnextt433 nexttoward -1.000000000000000000000000000000005 -Infinity -> -1.000000000000000000000000000000006 +dqnextt434 nexttoward -1.000000000000000000000000000000006 -Infinity -> -1.000000000000000000000000000000007 +dqnextt435 nexttoward -1.000000000000000000000000000000007 -Infinity -> -1.000000000000000000000000000000008 +dqnextt436 nexttoward -1.000000000000000000000000000000008 -Infinity -> -1.000000000000000000000000000000009 +dqnextt437 nexttoward -1.000000000000000000000000000000009 -Infinity -> -1.000000000000000000000000000000010 +dqnextt438 nexttoward -1.000000000000000000000000000000010 -Infinity -> -1.000000000000000000000000000000011 +dqnextt439 nexttoward -1.000000000000000000000000000000011 -Infinity -> -1.000000000000000000000000000000012 + +-- Zeros +dqnextt500 nexttoward -0 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt501 nexttoward 0 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt502 nexttoward 0.00 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt503 nexttoward -0.00 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt504 nexttoward 0E-300 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt505 nexttoward 0E+300 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt506 nexttoward 0E+30000 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt507 nexttoward -0E+30000 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded + +-- specials +dqnextt550 nexttoward Inf -Infinity -> 9.999999999999999999999999999999999E+6144 +dqnextt551 nexttoward -Inf -Infinity -> -Infinity +dqnextt552 nexttoward NaN -Infinity -> NaN +dqnextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation +dqnextt554 nexttoward NaN77 -Infinity -> NaN77 +dqnextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation +dqnextt556 nexttoward -NaN -Infinity -> -NaN +dqnextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation +dqnextt558 nexttoward -NaN77 -Infinity -> -NaN77 +dqnextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +dqnextt670 nexttoward 9.999999999999999999999999999999999E+6144 -Infinity -> 9.999999999999999999999999999999998E+6144 +dqnextt671 nexttoward 9.999999999999999999999999999999998E+6144 -Infinity -> 9.999999999999999999999999999999997E+6144 +dqnextt672 nexttoward 1E-6143 -Infinity -> 9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded +dqnextt673 nexttoward 1.000000000000000000000000000000000E-6143 -Infinity -> 9.99999999999999999999999999999999E-6144 Underflow Subnormal Inexact Rounded +dqnextt674 nexttoward 9E-6176 -Infinity -> 8E-6176 Underflow Subnormal Inexact Rounded +dqnextt675 nexttoward 9.9E-6175 -Infinity -> 9.8E-6175 Underflow Subnormal Inexact Rounded +dqnextt676 nexttoward 9.99999999999999999999999999999E-6147 -Infinity -> 9.99999999999999999999999999998E-6147 Underflow Subnormal Inexact Rounded +dqnextt677 nexttoward 9.99999999999999999999999999999999E-6144 -Infinity -> 9.99999999999999999999999999999998E-6144 Underflow Subnormal Inexact Rounded +dqnextt678 nexttoward 9.99999999999999999999999999999998E-6144 -Infinity -> 9.99999999999999999999999999999997E-6144 Underflow Subnormal Inexact Rounded +dqnextt679 nexttoward 9.99999999999999999999999999999997E-6144 -Infinity -> 9.99999999999999999999999999999996E-6144 Underflow Subnormal Inexact Rounded +dqnextt680 nexttoward 0E-6176 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt681 nexttoward 1E-6176 -Infinity -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqnextt682 nexttoward 2E-6176 -Infinity -> 1E-6176 Underflow Subnormal Inexact Rounded + +dqnextt683 nexttoward -0E-6176 -Infinity -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt684 nexttoward -1E-6176 -Infinity -> -2E-6176 Underflow Subnormal Inexact Rounded +dqnextt685 nexttoward -2E-6176 -Infinity -> -3E-6176 Underflow Subnormal Inexact Rounded +dqnextt686 nexttoward -10E-6176 -Infinity -> -1.1E-6175 Underflow Subnormal Inexact Rounded +dqnextt687 nexttoward -100E-6176 -Infinity -> -1.01E-6174 Underflow Subnormal Inexact Rounded +dqnextt688 nexttoward -100000E-6176 -Infinity -> -1.00001E-6171 Underflow Subnormal Inexact Rounded +dqnextt689 nexttoward -1.00000000000000000000000000000E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 +dqnextt690 nexttoward -1.000000000000000000000000000000000E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 +dqnextt691 nexttoward -1E-6143 -Infinity -> -1.000000000000000000000000000000001E-6143 +dqnextt692 nexttoward -9.999999999999999999999999999999998E+6144 -Infinity -> -9.999999999999999999999999999999999E+6144 +dqnextt693 nexttoward -9.999999999999999999999999999999999E+6144 -Infinity -> -Infinity Overflow Inexact Rounded + +------- Specials +dqnextt780 nexttoward -Inf -Inf -> -Infinity +dqnextt781 nexttoward -Inf -1000 -> -9.999999999999999999999999999999999E+6144 +dqnextt782 nexttoward -Inf -1 -> -9.999999999999999999999999999999999E+6144 +dqnextt783 nexttoward -Inf -0 -> -9.999999999999999999999999999999999E+6144 +dqnextt784 nexttoward -Inf 0 -> -9.999999999999999999999999999999999E+6144 +dqnextt785 nexttoward -Inf 1 -> -9.999999999999999999999999999999999E+6144 +dqnextt786 nexttoward -Inf 1000 -> -9.999999999999999999999999999999999E+6144 +dqnextt787 nexttoward -1000 -Inf -> -1000.000000000000000000000000000001 +dqnextt788 nexttoward -Inf -Inf -> -Infinity +dqnextt789 nexttoward -1 -Inf -> -1.000000000000000000000000000000001 +dqnextt790 nexttoward -0 -Inf -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt791 nexttoward 0 -Inf -> -1E-6176 Underflow Subnormal Inexact Rounded +dqnextt792 nexttoward 1 -Inf -> 0.9999999999999999999999999999999999 +dqnextt793 nexttoward 1000 -Inf -> 999.9999999999999999999999999999999 +dqnextt794 nexttoward Inf -Inf -> 9.999999999999999999999999999999999E+6144 + +dqnextt800 nexttoward Inf -Inf -> 9.999999999999999999999999999999999E+6144 +dqnextt801 nexttoward Inf -1000 -> 9.999999999999999999999999999999999E+6144 +dqnextt802 nexttoward Inf -1 -> 9.999999999999999999999999999999999E+6144 +dqnextt803 nexttoward Inf -0 -> 9.999999999999999999999999999999999E+6144 +dqnextt804 nexttoward Inf 0 -> 9.999999999999999999999999999999999E+6144 +dqnextt805 nexttoward Inf 1 -> 9.999999999999999999999999999999999E+6144 +dqnextt806 nexttoward Inf 1000 -> 9.999999999999999999999999999999999E+6144 +dqnextt807 nexttoward Inf Inf -> Infinity +dqnextt808 nexttoward -1000 Inf -> -999.9999999999999999999999999999999 +dqnextt809 nexttoward -Inf Inf -> -9.999999999999999999999999999999999E+6144 +dqnextt810 nexttoward -1 Inf -> -0.9999999999999999999999999999999999 +dqnextt811 nexttoward -0 Inf -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt812 nexttoward 0 Inf -> 1E-6176 Underflow Subnormal Inexact Rounded +dqnextt813 nexttoward 1 Inf -> 1.000000000000000000000000000000001 +dqnextt814 nexttoward 1000 Inf -> 1000.000000000000000000000000000001 +dqnextt815 nexttoward Inf Inf -> Infinity + +dqnextt821 nexttoward NaN -Inf -> NaN +dqnextt822 nexttoward NaN -1000 -> NaN +dqnextt823 nexttoward NaN -1 -> NaN +dqnextt824 nexttoward NaN -0 -> NaN +dqnextt825 nexttoward NaN 0 -> NaN +dqnextt826 nexttoward NaN 1 -> NaN +dqnextt827 nexttoward NaN 1000 -> NaN +dqnextt828 nexttoward NaN Inf -> NaN +dqnextt829 nexttoward NaN NaN -> NaN +dqnextt830 nexttoward -Inf NaN -> NaN +dqnextt831 nexttoward -1000 NaN -> NaN +dqnextt832 nexttoward -1 NaN -> NaN +dqnextt833 nexttoward -0 NaN -> NaN +dqnextt834 nexttoward 0 NaN -> NaN +dqnextt835 nexttoward 1 NaN -> NaN +dqnextt836 nexttoward 1000 NaN -> NaN +dqnextt837 nexttoward Inf NaN -> NaN + +dqnextt841 nexttoward sNaN -Inf -> NaN Invalid_operation +dqnextt842 nexttoward sNaN -1000 -> NaN Invalid_operation +dqnextt843 nexttoward sNaN -1 -> NaN Invalid_operation +dqnextt844 nexttoward sNaN -0 -> NaN Invalid_operation +dqnextt845 nexttoward sNaN 0 -> NaN Invalid_operation +dqnextt846 nexttoward sNaN 1 -> NaN Invalid_operation +dqnextt847 nexttoward sNaN 1000 -> NaN Invalid_operation +dqnextt848 nexttoward sNaN NaN -> NaN Invalid_operation +dqnextt849 nexttoward sNaN sNaN -> NaN Invalid_operation +dqnextt850 nexttoward NaN sNaN -> NaN Invalid_operation +dqnextt851 nexttoward -Inf sNaN -> NaN Invalid_operation +dqnextt852 nexttoward -1000 sNaN -> NaN Invalid_operation +dqnextt853 nexttoward -1 sNaN -> NaN Invalid_operation +dqnextt854 nexttoward -0 sNaN -> NaN Invalid_operation +dqnextt855 nexttoward 0 sNaN -> NaN Invalid_operation +dqnextt856 nexttoward 1 sNaN -> NaN Invalid_operation +dqnextt857 nexttoward 1000 sNaN -> NaN Invalid_operation +dqnextt858 nexttoward Inf sNaN -> NaN Invalid_operation +dqnextt859 nexttoward NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqnextt861 nexttoward NaN1 -Inf -> NaN1 +dqnextt862 nexttoward +NaN2 -1000 -> NaN2 +dqnextt863 nexttoward NaN3 1000 -> NaN3 +dqnextt864 nexttoward NaN4 Inf -> NaN4 +dqnextt865 nexttoward NaN5 +NaN6 -> NaN5 +dqnextt866 nexttoward -Inf NaN7 -> NaN7 +dqnextt867 nexttoward -1000 NaN8 -> NaN8 +dqnextt868 nexttoward 1000 NaN9 -> NaN9 +dqnextt869 nexttoward Inf +NaN10 -> NaN10 +dqnextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation +dqnextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation +dqnextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation +dqnextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation +dqnextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation +dqnextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation +dqnextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation +dqnextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation +dqnextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation +dqnextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation +dqnextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqnextt882 nexttoward -NaN26 NaN28 -> -NaN26 +dqnextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqnextt884 nexttoward 1000 -NaN30 -> -NaN30 +dqnextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Null tests +dqnextt900 nexttoward 1 # -> NaN Invalid_operation +dqnextt901 nexttoward # 1 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqOr.decTest b/Lib/test/decimaltestdata/dqOr.decTest index 1fd34b2b35a..daa3c860942 100644 --- a/Lib/test/decimaltestdata/dqOr.decTest +++ b/Lib/test/decimaltestdata/dqOr.decTest @@ -1,401 +1,401 @@ ------------------------------------------------------------------------- --- dqOr.decTest -- digitwise logical OR for decQuads -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check (truth table) -dqor001 or 0 0 -> 0 -dqor002 or 0 1 -> 1 -dqor003 or 1 0 -> 1 -dqor004 or 1 1 -> 1 -dqor005 or 1100 1010 -> 1110 --- and at msd and msd-1 -dqor006 or 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqor007 or 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqor008 or 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqor009 or 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqor010 or 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqor011 or 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 -dqor012 or 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 100000000000000000000000000000000 -dqor013 or 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 - --- Various lengths -dqor601 or 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111111 -dqor602 or 1011111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111111 -dqor603 or 1101111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111111 -dqor604 or 1110111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111111111 -dqor605 or 1111011111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111111111 -dqor606 or 1111101111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111111111 -dqor607 or 1111110111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111111111111 -dqor608 or 1111111011111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111111111111 -dqor609 or 1111111101111111111111111111111111 1111111111111111111111111011111111 -> 1111111111111111111111111111111111 -dqor610 or 1111111110111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111111111111111 -dqor611 or 1111111111011111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111111111111111 -dqor612 or 1111111111101111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111111111111111 -dqor613 or 1111111111110111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111111111111111111 -dqor614 or 1111111111111011111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111111111111111111 -dqor615 or 1111111111111101111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111111111111111111 -dqor616 or 1111111111111110111111111111111111 1111111111111111110111111111111111 -> 1111111111111111111111111111111111 -dqor617 or 1111111111111111011111111111111111 1111111111111111101111111111111111 -> 1111111111111111111111111111111111 -dqor618 or 1111111111111111101111111111111111 1111111111111111011111111111111111 -> 1111111111111111111111111111111111 -dqor619 or 1111111111111111110111111111111111 1111111111111110111111111111111111 -> 1111111111111111111111111111111111 -dqor620 or 1111111111111111111011111111111111 1111111111111101111111111111111111 -> 1111111111111111111111111111111111 -dqor621 or 1111111111111111111101111111111111 1111111111111011111111111111111111 -> 1111111111111111111111111111111111 -dqor622 or 1111111111111111111110111111111111 1111111111110111111111111111111111 -> 1111111111111111111111111111111111 -dqor623 or 1111111111111111111111011111111111 1111111111101111111111111111111111 -> 1111111111111111111111111111111111 -dqor624 or 1111111111111111111111101111111111 1111111111011111111111111111111111 -> 1111111111111111111111111111111111 -dqor625 or 1111111111111111111111110111111111 1111111110111111111111111111111111 -> 1111111111111111111111111111111111 -dqor626 or 1111111111111111111111111011111111 1111111101111111111111111111111111 -> 1111111111111111111111111111111111 -dqor627 or 1111111111111111111111111101111111 1111111011111111111111111111111111 -> 1111111111111111111111111111111111 -dqor628 or 1111111111111111111111111110111111 1111110111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor629 or 1111111111111111111111111111011111 1111101111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor630 or 1111111111111111111111111111101111 1111011111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor631 or 1111111111111111111111111111110111 1110111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor632 or 1111111111111111111111111111111011 1101111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor633 or 1111111111111111111111111111111101 1011111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor634 or 1111111111111111111111111111111110 0111111111111111111111111111111111 -> 1111111111111111111111111111111111 - -dqor641 or 1111111111111111111111111111111110 0111111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor642 or 1111111111111111111111111111111101 1011111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor643 or 1111111111111111111111111111111011 1101111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor644 or 1111111111111111111111111111110111 1110111111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor645 or 1111111111111111111111111111101111 1111011111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor646 or 1111111111111111111111111111011111 1111101111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor647 or 1111111111111111111111111110111111 1111110111111111111111111111111111 -> 1111111111111111111111111111111111 -dqor648 or 1111111111111111111111111101111111 1111111011111111111111111111111111 -> 1111111111111111111111111111111111 -dqor649 or 1111111111111111111111111011111111 1111111101111111111111111111111111 -> 1111111111111111111111111111111111 -dqor650 or 1111111111111111111111110111111111 1111111110111111111111111111111111 -> 1111111111111111111111111111111111 -dqor651 or 1111111111111111111111101111111111 1111111111011111111111111111111111 -> 1111111111111111111111111111111111 -dqor652 or 1111111111111111111111011111111111 1111111111101111111111111111111111 -> 1111111111111111111111111111111111 -dqor653 or 1111111111111111111110111111111111 1111111111110111111111111111111111 -> 1111111111111111111111111111111111 -dqor654 or 1111111111111111111101111111111111 1111111111111011111111111111111111 -> 1111111111111111111111111111111111 -dqor655 or 1111111111111111111011111111111111 1111111111111101111111111111111111 -> 1111111111111111111111111111111111 -dqor656 or 1111111111111111110111111111111111 1111111111111110111111111111111111 -> 1111111111111111111111111111111111 -dqor657 or 1010101010101010101010101010101010 1010101010101010001010101010101010 -> 1010101010101010101010101010101010 -dqor658 or 1111111111111111011111111111111111 1111111111111111101111111111111111 -> 1111111111111111111111111111111111 -dqor659 or 1111111111111110111111111111111111 1111111111111111110111111111111111 -> 1111111111111111111111111111111111 -dqor660 or 1111111111111101111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111111111111111111 -dqor661 or 1111111111111011111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111111111111111111 -dqor662 or 1111111111110111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111111111111111111 -dqor663 or 1111111111101111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111111111111111 -dqor664 or 1111111111011111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111111111111111 -dqor665 or 1111111110111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111111111111111 -dqor666 or 0101010101010101010101010101010101 0101010101010101010101010001010101 -> 101010101010101010101010101010101 -dqor667 or 1111111011111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111111111111 -dqor668 or 1111110111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111111111111 -dqor669 or 1111101111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111111111 -dqor670 or 1111011111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111111111 -dqor671 or 1110111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111111111 -dqor672 or 1101111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111111 -dqor673 or 1011111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111111 -dqor674 or 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111111 -dqor675 or 0111111111111111111111111111111110 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 -dqor676 or 1111111111111111111111111111111110 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 - -dqor681 or 0111111111111111111111111111111111 0111111111011111111111111111111110 -> 111111111111111111111111111111111 -dqor682 or 1011111111111111111111111111111111 1011111110101111111111111111111101 -> 1011111111111111111111111111111111 -dqor683 or 1101111111111111111111111111111111 1101111101110111111111111111111011 -> 1101111111111111111111111111111111 -dqor684 or 1110111111111111111111111111111111 1110111011111011111111111111110111 -> 1110111111111111111111111111111111 -dqor685 or 1111011111111111111111111111111111 1111010111111101111111111111101111 -> 1111011111111111111111111111111111 -dqor686 or 1111101111111111111111111111111111 1111101111111110111111111111011111 -> 1111101111111111111111111111111111 -dqor687 or 1111110111111111111111111111111111 1111010111111111011111111110111111 -> 1111110111111111111111111111111111 -dqor688 or 1111111011111111111111111111111111 1110111011111111101111111101111111 -> 1111111011111111111111111111111111 -dqor689 or 1111111101111111111111111111111111 1101111101111111110111111011111111 -> 1111111101111111111111111111111111 -dqor690 or 1111111110111111111111111111111111 1011111110111111111011110111111110 -> 1111111110111111111111111111111111 -dqor691 or 1111111111011111111111111111111111 0111111111011111111101101111111101 -> 1111111111011111111111111111111111 -dqor692 or 1111111111101111111111111111111111 1111111111101111111110011111111011 -> 1111111111101111111111111111111111 -dqor693 or 1111111111110111111111111111111111 1111111111110111111110011111110111 -> 1111111111110111111111111111111111 -dqor694 or 1111111111111011111111111111111111 1111111111111011111101101111101111 -> 1111111111111011111111111111111111 -dqor695 or 1111111111111101111111111111111111 1111111111111101111011110111011111 -> 1111111111111101111111111111111111 -dqor696 or 1111111111111110111111111111111111 1111111111111110110111111010111111 -> 1111111111111110111111111111111111 -dqor697 or 1111111111111111011111111111111111 1111111111111111001111111101111111 -> 1111111111111111011111111111111111 -dqor698 or 1111111111111111101111111111111111 1111111111111111001111111010111111 -> 1111111111111111101111111111111111 -dqor699 or 1111111111111111110111111111111111 1111111111111110110111110111011111 -> 1111111111111111110111111111111111 -dqor700 or 1111111111111111111011111111111111 1111111111111101111011101111101111 -> 1111111111111111111011111111111111 -dqor701 or 1111111111111111111101111111111111 1111111111111011111101011111110111 -> 1111111111111111111101111111111111 -dqor702 or 1111111111111111111110111111111111 1111111111110111111110111111111011 -> 1111111111111111111110111111111111 -dqor703 or 1111111111111111111111011111111111 1111111111101111111101011111111101 -> 1111111111111111111111011111111111 -dqor704 or 1111111111111111111111101111111111 1111111111011111111011101111111110 -> 1111111111111111111111101111111111 -dqor705 or 1111111111111111111111110111111111 0111111110111111110111110111111111 -> 1111111111111111111111110111111111 -dqor706 or 1111111111111111111111111011111111 1011111101111111101111111011111111 -> 1111111111111111111111111011111111 -dqor707 or 1111111111111111111111111101111111 1101111011111111011111111101111111 -> 1111111111111111111111111101111111 -dqor708 or 1111111111111111111111111110111111 1110110111111110111111111110111111 -> 1111111111111111111111111110111111 -dqor709 or 1111111111111111111111111111011111 1111001111111101111111111111011111 -> 1111111111111111111111111111011111 -dqor710 or 1111111111111111111111111111101111 1111001111111011111111111111101111 -> 1111111111111111111111111111101111 -dqor711 or 1111111111111111111111111111110111 1110110111110111111111111111110111 -> 1111111111111111111111111111110111 -dqor712 or 1111111111111111111111111111111011 1101111011101111111111111111111011 -> 1111111111111111111111111111111011 -dqor713 or 1111111111111111111111111111111101 1011111101011111111111111111111101 -> 1111111111111111111111111111111101 -dqor714 or 1111111111111111111111111111111110 0111111110111111111111111111111110 -> 1111111111111111111111111111111110 - - - --- 1234567890123456 1234567890123456 1234567890123456 -dqor020 or 1111111111111111 1111111111111111 -> 1111111111111111 -dqor021 or 111111111111111 111111111111111 -> 111111111111111 -dqor022 or 11111111111111 11111111111111 -> 11111111111111 -dqor023 or 1111111111111 1111111111111 -> 1111111111111 -dqor024 or 111111111111 111111111111 -> 111111111111 -dqor025 or 11111111111 11111111111 -> 11111111111 -dqor026 or 1111111111 1111111111 -> 1111111111 -dqor027 or 111111111 111111111 -> 111111111 -dqor028 or 11111111 11111111 -> 11111111 -dqor029 or 1111111 1111111 -> 1111111 -dqor030 or 111111 111111 -> 111111 -dqor031 or 11111 11111 -> 11111 -dqor032 or 1111 1111 -> 1111 -dqor033 or 111 111 -> 111 -dqor034 or 11 11 -> 11 -dqor035 or 1 1 -> 1 -dqor036 or 0 0 -> 0 - -dqor042 or 111111110000000 1111111110000000 -> 1111111110000000 -dqor043 or 11111110000000 1000000100000000 -> 1011111110000000 -dqor044 or 1111110000000 1000001000000000 -> 1001111110000000 -dqor045 or 111110000000 1000010000000000 -> 1000111110000000 -dqor046 or 11110000000 1000100000000000 -> 1000111110000000 -dqor047 or 1110000000 1001000000000000 -> 1001001110000000 -dqor048 or 110000000 1010000000000000 -> 1010000110000000 -dqor049 or 10000000 1100000000000000 -> 1100000010000000 - -dqor090 or 011111111 111101111 -> 111111111 -dqor091 or 101111111 111101111 -> 111111111 -dqor092 or 110111111 111101111 -> 111111111 -dqor093 or 111011111 111101111 -> 111111111 -dqor094 or 111101111 111101111 -> 111101111 -dqor095 or 111110111 111101111 -> 111111111 -dqor096 or 111111011 111101111 -> 111111111 -dqor097 or 111111101 111101111 -> 111111111 -dqor098 or 111111110 111101111 -> 111111111 - -dqor100 or 111101111 011111111 -> 111111111 -dqor101 or 111101111 101111111 -> 111111111 -dqor102 or 111101111 110111111 -> 111111111 -dqor103 or 111101111 111011111 -> 111111111 -dqor104 or 111101111 111101111 -> 111101111 -dqor105 or 111101111 111110111 -> 111111111 -dqor106 or 111101111 111111011 -> 111111111 -dqor107 or 111101111 111111101 -> 111111111 -dqor108 or 111101111 111111110 -> 111111111 - --- non-0/1 should not be accepted, nor should signs -dqor220 or 111111112 111111111 -> NaN Invalid_operation -dqor221 or 333333333 333333333 -> NaN Invalid_operation -dqor222 or 555555555 555555555 -> NaN Invalid_operation -dqor223 or 777777777 777777777 -> NaN Invalid_operation -dqor224 or 999999999 999999999 -> NaN Invalid_operation -dqor225 or 222222222 999999999 -> NaN Invalid_operation -dqor226 or 444444444 999999999 -> NaN Invalid_operation -dqor227 or 666666666 999999999 -> NaN Invalid_operation -dqor228 or 888888888 999999999 -> NaN Invalid_operation -dqor229 or 999999999 222222222 -> NaN Invalid_operation -dqor230 or 999999999 444444444 -> NaN Invalid_operation -dqor231 or 999999999 666666666 -> NaN Invalid_operation -dqor232 or 999999999 888888888 -> NaN Invalid_operation --- a few randoms -dqor240 or 567468689 -934981942 -> NaN Invalid_operation -dqor241 or 567367689 934981942 -> NaN Invalid_operation -dqor242 or -631917772 -706014634 -> NaN Invalid_operation -dqor243 or -756253257 138579234 -> NaN Invalid_operation -dqor244 or 835590149 567435400 -> NaN Invalid_operation --- test MSD -dqor250 or 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqor251 or 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqor252 or 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqor253 or 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqor254 or 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqor255 or 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqor256 or 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqor257 or 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqor258 or 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqor259 or 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqor260 or 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqor261 or 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation -dqor262 or 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqor263 or 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqor264 or 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqor265 or 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation --- test MSD-1 -dqor270 or 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation -dqor271 or 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation -dqor272 or 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation -dqor273 or 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation -dqor274 or 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation -dqor275 or 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation -dqor276 or 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation -dqor277 or 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation --- test LSD -dqor280 or 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation -dqor281 or 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation -dqor282 or 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation -dqor283 or 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation -dqor284 or 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation -dqor285 or 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation -dqor286 or 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation -dqor287 or 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation --- test Middie -dqor288 or 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation -dqor289 or 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation -dqor290 or 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation -dqor291 or 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation -dqor292 or 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation -dqor293 or 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation -dqor294 or 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation -dqor295 or 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation --- signs -dqor296 or -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation -dqor297 or -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation -dqor298 or 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation -dqor299 or 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 1000001111001111001111000011000100 - --- Nmax, Nmin, Ntiny-like -dqor331 or 2 9.99999999E+1999 -> NaN Invalid_operation -dqor332 or 3 1E-1999 -> NaN Invalid_operation -dqor333 or 4 1.00000000E-1999 -> NaN Invalid_operation -dqor334 or 5 1E-1009 -> NaN Invalid_operation -dqor335 or 6 -1E-1009 -> NaN Invalid_operation -dqor336 or 7 -1.00000000E-1999 -> NaN Invalid_operation -dqor337 or 8 -1E-1999 -> NaN Invalid_operation -dqor338 or 9 -9.99999999E+1999 -> NaN Invalid_operation -dqor341 or 9.99999999E+2999 -18 -> NaN Invalid_operation -dqor342 or 1E-2999 01 -> NaN Invalid_operation -dqor343 or 1.00000000E-2999 -18 -> NaN Invalid_operation -dqor344 or 1E-1009 18 -> NaN Invalid_operation -dqor345 or -1E-1009 -10 -> NaN Invalid_operation -dqor346 or -1.00000000E-2999 18 -> NaN Invalid_operation -dqor347 or -1E-2999 10 -> NaN Invalid_operation -dqor348 or -9.99999999E+2999 -18 -> NaN Invalid_operation - --- A few other non-integers -dqor361 or 1.0 1 -> NaN Invalid_operation -dqor362 or 1E+1 1 -> NaN Invalid_operation -dqor363 or 0.0 1 -> NaN Invalid_operation -dqor364 or 0E+1 1 -> NaN Invalid_operation -dqor365 or 9.9 1 -> NaN Invalid_operation -dqor366 or 9E+1 1 -> NaN Invalid_operation -dqor371 or 0 1.0 -> NaN Invalid_operation -dqor372 or 0 1E+1 -> NaN Invalid_operation -dqor373 or 0 0.0 -> NaN Invalid_operation -dqor374 or 0 0E+1 -> NaN Invalid_operation -dqor375 or 0 9.9 -> NaN Invalid_operation -dqor376 or 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -dqor780 or -Inf -Inf -> NaN Invalid_operation -dqor781 or -Inf -1000 -> NaN Invalid_operation -dqor782 or -Inf -1 -> NaN Invalid_operation -dqor783 or -Inf -0 -> NaN Invalid_operation -dqor784 or -Inf 0 -> NaN Invalid_operation -dqor785 or -Inf 1 -> NaN Invalid_operation -dqor786 or -Inf 1000 -> NaN Invalid_operation -dqor787 or -1000 -Inf -> NaN Invalid_operation -dqor788 or -Inf -Inf -> NaN Invalid_operation -dqor789 or -1 -Inf -> NaN Invalid_operation -dqor790 or -0 -Inf -> NaN Invalid_operation -dqor791 or 0 -Inf -> NaN Invalid_operation -dqor792 or 1 -Inf -> NaN Invalid_operation -dqor793 or 1000 -Inf -> NaN Invalid_operation -dqor794 or Inf -Inf -> NaN Invalid_operation - -dqor800 or Inf -Inf -> NaN Invalid_operation -dqor801 or Inf -1000 -> NaN Invalid_operation -dqor802 or Inf -1 -> NaN Invalid_operation -dqor803 or Inf -0 -> NaN Invalid_operation -dqor804 or Inf 0 -> NaN Invalid_operation -dqor805 or Inf 1 -> NaN Invalid_operation -dqor806 or Inf 1000 -> NaN Invalid_operation -dqor807 or Inf Inf -> NaN Invalid_operation -dqor808 or -1000 Inf -> NaN Invalid_operation -dqor809 or -Inf Inf -> NaN Invalid_operation -dqor810 or -1 Inf -> NaN Invalid_operation -dqor811 or -0 Inf -> NaN Invalid_operation -dqor812 or 0 Inf -> NaN Invalid_operation -dqor813 or 1 Inf -> NaN Invalid_operation -dqor814 or 1000 Inf -> NaN Invalid_operation -dqor815 or Inf Inf -> NaN Invalid_operation - -dqor821 or NaN -Inf -> NaN Invalid_operation -dqor822 or NaN -1000 -> NaN Invalid_operation -dqor823 or NaN -1 -> NaN Invalid_operation -dqor824 or NaN -0 -> NaN Invalid_operation -dqor825 or NaN 0 -> NaN Invalid_operation -dqor826 or NaN 1 -> NaN Invalid_operation -dqor827 or NaN 1000 -> NaN Invalid_operation -dqor828 or NaN Inf -> NaN Invalid_operation -dqor829 or NaN NaN -> NaN Invalid_operation -dqor830 or -Inf NaN -> NaN Invalid_operation -dqor831 or -1000 NaN -> NaN Invalid_operation -dqor832 or -1 NaN -> NaN Invalid_operation -dqor833 or -0 NaN -> NaN Invalid_operation -dqor834 or 0 NaN -> NaN Invalid_operation -dqor835 or 1 NaN -> NaN Invalid_operation -dqor836 or 1000 NaN -> NaN Invalid_operation -dqor837 or Inf NaN -> NaN Invalid_operation - -dqor841 or sNaN -Inf -> NaN Invalid_operation -dqor842 or sNaN -1000 -> NaN Invalid_operation -dqor843 or sNaN -1 -> NaN Invalid_operation -dqor844 or sNaN -0 -> NaN Invalid_operation -dqor845 or sNaN 0 -> NaN Invalid_operation -dqor846 or sNaN 1 -> NaN Invalid_operation -dqor847 or sNaN 1000 -> NaN Invalid_operation -dqor848 or sNaN NaN -> NaN Invalid_operation -dqor849 or sNaN sNaN -> NaN Invalid_operation -dqor850 or NaN sNaN -> NaN Invalid_operation -dqor851 or -Inf sNaN -> NaN Invalid_operation -dqor852 or -1000 sNaN -> NaN Invalid_operation -dqor853 or -1 sNaN -> NaN Invalid_operation -dqor854 or -0 sNaN -> NaN Invalid_operation -dqor855 or 0 sNaN -> NaN Invalid_operation -dqor856 or 1 sNaN -> NaN Invalid_operation -dqor857 or 1000 sNaN -> NaN Invalid_operation -dqor858 or Inf sNaN -> NaN Invalid_operation -dqor859 or NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqor861 or NaN1 -Inf -> NaN Invalid_operation -dqor862 or +NaN2 -1000 -> NaN Invalid_operation -dqor863 or NaN3 1000 -> NaN Invalid_operation -dqor864 or NaN4 Inf -> NaN Invalid_operation -dqor865 or NaN5 +NaN6 -> NaN Invalid_operation -dqor866 or -Inf NaN7 -> NaN Invalid_operation -dqor867 or -1000 NaN8 -> NaN Invalid_operation -dqor868 or 1000 NaN9 -> NaN Invalid_operation -dqor869 or Inf +NaN10 -> NaN Invalid_operation -dqor871 or sNaN11 -Inf -> NaN Invalid_operation -dqor872 or sNaN12 -1000 -> NaN Invalid_operation -dqor873 or sNaN13 1000 -> NaN Invalid_operation -dqor874 or sNaN14 NaN17 -> NaN Invalid_operation -dqor875 or sNaN15 sNaN18 -> NaN Invalid_operation -dqor876 or NaN16 sNaN19 -> NaN Invalid_operation -dqor877 or -Inf +sNaN20 -> NaN Invalid_operation -dqor878 or -1000 sNaN21 -> NaN Invalid_operation -dqor879 or 1000 sNaN22 -> NaN Invalid_operation -dqor880 or Inf sNaN23 -> NaN Invalid_operation -dqor881 or +NaN25 +sNaN24 -> NaN Invalid_operation -dqor882 or -NaN26 NaN28 -> NaN Invalid_operation -dqor883 or -sNaN27 sNaN29 -> NaN Invalid_operation -dqor884 or 1000 -NaN30 -> NaN Invalid_operation -dqor885 or 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqOr.decTest -- digitwise logical OR for decQuads -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check (truth table) +dqor001 or 0 0 -> 0 +dqor002 or 0 1 -> 1 +dqor003 or 1 0 -> 1 +dqor004 or 1 1 -> 1 +dqor005 or 1100 1010 -> 1110 +-- and at msd and msd-1 +dqor006 or 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqor007 or 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqor008 or 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqor009 or 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqor010 or 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqor011 or 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 +dqor012 or 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 100000000000000000000000000000000 +dqor013 or 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 + +-- Various lengths +dqor601 or 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111111 +dqor602 or 1011111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111111 +dqor603 or 1101111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111111 +dqor604 or 1110111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111111111 +dqor605 or 1111011111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111111111 +dqor606 or 1111101111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111111111 +dqor607 or 1111110111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111111111111 +dqor608 or 1111111011111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111111111111 +dqor609 or 1111111101111111111111111111111111 1111111111111111111111111011111111 -> 1111111111111111111111111111111111 +dqor610 or 1111111110111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111111111111111 +dqor611 or 1111111111011111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111111111111111 +dqor612 or 1111111111101111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111111111111111 +dqor613 or 1111111111110111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111111111111111111 +dqor614 or 1111111111111011111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111111111111111111 +dqor615 or 1111111111111101111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111111111111111111 +dqor616 or 1111111111111110111111111111111111 1111111111111111110111111111111111 -> 1111111111111111111111111111111111 +dqor617 or 1111111111111111011111111111111111 1111111111111111101111111111111111 -> 1111111111111111111111111111111111 +dqor618 or 1111111111111111101111111111111111 1111111111111111011111111111111111 -> 1111111111111111111111111111111111 +dqor619 or 1111111111111111110111111111111111 1111111111111110111111111111111111 -> 1111111111111111111111111111111111 +dqor620 or 1111111111111111111011111111111111 1111111111111101111111111111111111 -> 1111111111111111111111111111111111 +dqor621 or 1111111111111111111101111111111111 1111111111111011111111111111111111 -> 1111111111111111111111111111111111 +dqor622 or 1111111111111111111110111111111111 1111111111110111111111111111111111 -> 1111111111111111111111111111111111 +dqor623 or 1111111111111111111111011111111111 1111111111101111111111111111111111 -> 1111111111111111111111111111111111 +dqor624 or 1111111111111111111111101111111111 1111111111011111111111111111111111 -> 1111111111111111111111111111111111 +dqor625 or 1111111111111111111111110111111111 1111111110111111111111111111111111 -> 1111111111111111111111111111111111 +dqor626 or 1111111111111111111111111011111111 1111111101111111111111111111111111 -> 1111111111111111111111111111111111 +dqor627 or 1111111111111111111111111101111111 1111111011111111111111111111111111 -> 1111111111111111111111111111111111 +dqor628 or 1111111111111111111111111110111111 1111110111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor629 or 1111111111111111111111111111011111 1111101111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor630 or 1111111111111111111111111111101111 1111011111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor631 or 1111111111111111111111111111110111 1110111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor632 or 1111111111111111111111111111111011 1101111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor633 or 1111111111111111111111111111111101 1011111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor634 or 1111111111111111111111111111111110 0111111111111111111111111111111111 -> 1111111111111111111111111111111111 + +dqor641 or 1111111111111111111111111111111110 0111111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor642 or 1111111111111111111111111111111101 1011111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor643 or 1111111111111111111111111111111011 1101111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor644 or 1111111111111111111111111111110111 1110111111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor645 or 1111111111111111111111111111101111 1111011111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor646 or 1111111111111111111111111111011111 1111101111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor647 or 1111111111111111111111111110111111 1111110111111111111111111111111111 -> 1111111111111111111111111111111111 +dqor648 or 1111111111111111111111111101111111 1111111011111111111111111111111111 -> 1111111111111111111111111111111111 +dqor649 or 1111111111111111111111111011111111 1111111101111111111111111111111111 -> 1111111111111111111111111111111111 +dqor650 or 1111111111111111111111110111111111 1111111110111111111111111111111111 -> 1111111111111111111111111111111111 +dqor651 or 1111111111111111111111101111111111 1111111111011111111111111111111111 -> 1111111111111111111111111111111111 +dqor652 or 1111111111111111111111011111111111 1111111111101111111111111111111111 -> 1111111111111111111111111111111111 +dqor653 or 1111111111111111111110111111111111 1111111111110111111111111111111111 -> 1111111111111111111111111111111111 +dqor654 or 1111111111111111111101111111111111 1111111111111011111111111111111111 -> 1111111111111111111111111111111111 +dqor655 or 1111111111111111111011111111111111 1111111111111101111111111111111111 -> 1111111111111111111111111111111111 +dqor656 or 1111111111111111110111111111111111 1111111111111110111111111111111111 -> 1111111111111111111111111111111111 +dqor657 or 1010101010101010101010101010101010 1010101010101010001010101010101010 -> 1010101010101010101010101010101010 +dqor658 or 1111111111111111011111111111111111 1111111111111111101111111111111111 -> 1111111111111111111111111111111111 +dqor659 or 1111111111111110111111111111111111 1111111111111111110111111111111111 -> 1111111111111111111111111111111111 +dqor660 or 1111111111111101111111111111111111 1111111111111111111011111111111111 -> 1111111111111111111111111111111111 +dqor661 or 1111111111111011111111111111111111 1111111111111111111101111111111111 -> 1111111111111111111111111111111111 +dqor662 or 1111111111110111111111111111111111 1111111111111111111110111111111111 -> 1111111111111111111111111111111111 +dqor663 or 1111111111101111111111111111111111 1111111111111111111111011111111111 -> 1111111111111111111111111111111111 +dqor664 or 1111111111011111111111111111111111 1111111111111111111111101111111111 -> 1111111111111111111111111111111111 +dqor665 or 1111111110111111111111111111111111 1111111111111111111111110111111111 -> 1111111111111111111111111111111111 +dqor666 or 0101010101010101010101010101010101 0101010101010101010101010001010101 -> 101010101010101010101010101010101 +dqor667 or 1111111011111111111111111111111111 1111111111111111111111111101111111 -> 1111111111111111111111111111111111 +dqor668 or 1111110111111111111111111111111111 1111111111111111111111111110111111 -> 1111111111111111111111111111111111 +dqor669 or 1111101111111111111111111111111111 1111111111111111111111111111011111 -> 1111111111111111111111111111111111 +dqor670 or 1111011111111111111111111111111111 1111111111111111111111111111101111 -> 1111111111111111111111111111111111 +dqor671 or 1110111111111111111111111111111111 1111111111111111111111111111110111 -> 1111111111111111111111111111111111 +dqor672 or 1101111111111111111111111111111111 1111111111111111111111111111111011 -> 1111111111111111111111111111111111 +dqor673 or 1011111111111111111111111111111111 1111111111111111111111111111111101 -> 1111111111111111111111111111111111 +dqor674 or 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1111111111111111111111111111111111 +dqor675 or 0111111111111111111111111111111110 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 +dqor676 or 1111111111111111111111111111111110 1111111111111111111111111111111110 -> 1111111111111111111111111111111110 + +dqor681 or 0111111111111111111111111111111111 0111111111011111111111111111111110 -> 111111111111111111111111111111111 +dqor682 or 1011111111111111111111111111111111 1011111110101111111111111111111101 -> 1011111111111111111111111111111111 +dqor683 or 1101111111111111111111111111111111 1101111101110111111111111111111011 -> 1101111111111111111111111111111111 +dqor684 or 1110111111111111111111111111111111 1110111011111011111111111111110111 -> 1110111111111111111111111111111111 +dqor685 or 1111011111111111111111111111111111 1111010111111101111111111111101111 -> 1111011111111111111111111111111111 +dqor686 or 1111101111111111111111111111111111 1111101111111110111111111111011111 -> 1111101111111111111111111111111111 +dqor687 or 1111110111111111111111111111111111 1111010111111111011111111110111111 -> 1111110111111111111111111111111111 +dqor688 or 1111111011111111111111111111111111 1110111011111111101111111101111111 -> 1111111011111111111111111111111111 +dqor689 or 1111111101111111111111111111111111 1101111101111111110111111011111111 -> 1111111101111111111111111111111111 +dqor690 or 1111111110111111111111111111111111 1011111110111111111011110111111110 -> 1111111110111111111111111111111111 +dqor691 or 1111111111011111111111111111111111 0111111111011111111101101111111101 -> 1111111111011111111111111111111111 +dqor692 or 1111111111101111111111111111111111 1111111111101111111110011111111011 -> 1111111111101111111111111111111111 +dqor693 or 1111111111110111111111111111111111 1111111111110111111110011111110111 -> 1111111111110111111111111111111111 +dqor694 or 1111111111111011111111111111111111 1111111111111011111101101111101111 -> 1111111111111011111111111111111111 +dqor695 or 1111111111111101111111111111111111 1111111111111101111011110111011111 -> 1111111111111101111111111111111111 +dqor696 or 1111111111111110111111111111111111 1111111111111110110111111010111111 -> 1111111111111110111111111111111111 +dqor697 or 1111111111111111011111111111111111 1111111111111111001111111101111111 -> 1111111111111111011111111111111111 +dqor698 or 1111111111111111101111111111111111 1111111111111111001111111010111111 -> 1111111111111111101111111111111111 +dqor699 or 1111111111111111110111111111111111 1111111111111110110111110111011111 -> 1111111111111111110111111111111111 +dqor700 or 1111111111111111111011111111111111 1111111111111101111011101111101111 -> 1111111111111111111011111111111111 +dqor701 or 1111111111111111111101111111111111 1111111111111011111101011111110111 -> 1111111111111111111101111111111111 +dqor702 or 1111111111111111111110111111111111 1111111111110111111110111111111011 -> 1111111111111111111110111111111111 +dqor703 or 1111111111111111111111011111111111 1111111111101111111101011111111101 -> 1111111111111111111111011111111111 +dqor704 or 1111111111111111111111101111111111 1111111111011111111011101111111110 -> 1111111111111111111111101111111111 +dqor705 or 1111111111111111111111110111111111 0111111110111111110111110111111111 -> 1111111111111111111111110111111111 +dqor706 or 1111111111111111111111111011111111 1011111101111111101111111011111111 -> 1111111111111111111111111011111111 +dqor707 or 1111111111111111111111111101111111 1101111011111111011111111101111111 -> 1111111111111111111111111101111111 +dqor708 or 1111111111111111111111111110111111 1110110111111110111111111110111111 -> 1111111111111111111111111110111111 +dqor709 or 1111111111111111111111111111011111 1111001111111101111111111111011111 -> 1111111111111111111111111111011111 +dqor710 or 1111111111111111111111111111101111 1111001111111011111111111111101111 -> 1111111111111111111111111111101111 +dqor711 or 1111111111111111111111111111110111 1110110111110111111111111111110111 -> 1111111111111111111111111111110111 +dqor712 or 1111111111111111111111111111111011 1101111011101111111111111111111011 -> 1111111111111111111111111111111011 +dqor713 or 1111111111111111111111111111111101 1011111101011111111111111111111101 -> 1111111111111111111111111111111101 +dqor714 or 1111111111111111111111111111111110 0111111110111111111111111111111110 -> 1111111111111111111111111111111110 + + + +-- 1234567890123456 1234567890123456 1234567890123456 +dqor020 or 1111111111111111 1111111111111111 -> 1111111111111111 +dqor021 or 111111111111111 111111111111111 -> 111111111111111 +dqor022 or 11111111111111 11111111111111 -> 11111111111111 +dqor023 or 1111111111111 1111111111111 -> 1111111111111 +dqor024 or 111111111111 111111111111 -> 111111111111 +dqor025 or 11111111111 11111111111 -> 11111111111 +dqor026 or 1111111111 1111111111 -> 1111111111 +dqor027 or 111111111 111111111 -> 111111111 +dqor028 or 11111111 11111111 -> 11111111 +dqor029 or 1111111 1111111 -> 1111111 +dqor030 or 111111 111111 -> 111111 +dqor031 or 11111 11111 -> 11111 +dqor032 or 1111 1111 -> 1111 +dqor033 or 111 111 -> 111 +dqor034 or 11 11 -> 11 +dqor035 or 1 1 -> 1 +dqor036 or 0 0 -> 0 + +dqor042 or 111111110000000 1111111110000000 -> 1111111110000000 +dqor043 or 11111110000000 1000000100000000 -> 1011111110000000 +dqor044 or 1111110000000 1000001000000000 -> 1001111110000000 +dqor045 or 111110000000 1000010000000000 -> 1000111110000000 +dqor046 or 11110000000 1000100000000000 -> 1000111110000000 +dqor047 or 1110000000 1001000000000000 -> 1001001110000000 +dqor048 or 110000000 1010000000000000 -> 1010000110000000 +dqor049 or 10000000 1100000000000000 -> 1100000010000000 + +dqor090 or 011111111 111101111 -> 111111111 +dqor091 or 101111111 111101111 -> 111111111 +dqor092 or 110111111 111101111 -> 111111111 +dqor093 or 111011111 111101111 -> 111111111 +dqor094 or 111101111 111101111 -> 111101111 +dqor095 or 111110111 111101111 -> 111111111 +dqor096 or 111111011 111101111 -> 111111111 +dqor097 or 111111101 111101111 -> 111111111 +dqor098 or 111111110 111101111 -> 111111111 + +dqor100 or 111101111 011111111 -> 111111111 +dqor101 or 111101111 101111111 -> 111111111 +dqor102 or 111101111 110111111 -> 111111111 +dqor103 or 111101111 111011111 -> 111111111 +dqor104 or 111101111 111101111 -> 111101111 +dqor105 or 111101111 111110111 -> 111111111 +dqor106 or 111101111 111111011 -> 111111111 +dqor107 or 111101111 111111101 -> 111111111 +dqor108 or 111101111 111111110 -> 111111111 + +-- non-0/1 should not be accepted, nor should signs +dqor220 or 111111112 111111111 -> NaN Invalid_operation +dqor221 or 333333333 333333333 -> NaN Invalid_operation +dqor222 or 555555555 555555555 -> NaN Invalid_operation +dqor223 or 777777777 777777777 -> NaN Invalid_operation +dqor224 or 999999999 999999999 -> NaN Invalid_operation +dqor225 or 222222222 999999999 -> NaN Invalid_operation +dqor226 or 444444444 999999999 -> NaN Invalid_operation +dqor227 or 666666666 999999999 -> NaN Invalid_operation +dqor228 or 888888888 999999999 -> NaN Invalid_operation +dqor229 or 999999999 222222222 -> NaN Invalid_operation +dqor230 or 999999999 444444444 -> NaN Invalid_operation +dqor231 or 999999999 666666666 -> NaN Invalid_operation +dqor232 or 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +dqor240 or 567468689 -934981942 -> NaN Invalid_operation +dqor241 or 567367689 934981942 -> NaN Invalid_operation +dqor242 or -631917772 -706014634 -> NaN Invalid_operation +dqor243 or -756253257 138579234 -> NaN Invalid_operation +dqor244 or 835590149 567435400 -> NaN Invalid_operation +-- test MSD +dqor250 or 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqor251 or 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqor252 or 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqor253 or 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqor254 or 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqor255 or 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqor256 or 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqor257 or 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqor258 or 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqor259 or 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqor260 or 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqor261 or 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +dqor262 or 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqor263 or 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqor264 or 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqor265 or 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +-- test MSD-1 +dqor270 or 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation +dqor271 or 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation +dqor272 or 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation +dqor273 or 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation +dqor274 or 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation +dqor275 or 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation +dqor276 or 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation +dqor277 or 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation +-- test LSD +dqor280 or 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation +dqor281 or 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation +dqor282 or 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation +dqor283 or 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation +dqor284 or 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation +dqor285 or 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation +dqor286 or 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation +dqor287 or 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation +-- test Middie +dqor288 or 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation +dqor289 or 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation +dqor290 or 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation +dqor291 or 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation +dqor292 or 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation +dqor293 or 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation +dqor294 or 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation +dqor295 or 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation +-- signs +dqor296 or -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation +dqor297 or -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation +dqor298 or 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation +dqor299 or 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 1000001111001111001111000011000100 + +-- Nmax, Nmin, Ntiny-like +dqor331 or 2 9.99999999E+1999 -> NaN Invalid_operation +dqor332 or 3 1E-1999 -> NaN Invalid_operation +dqor333 or 4 1.00000000E-1999 -> NaN Invalid_operation +dqor334 or 5 1E-1009 -> NaN Invalid_operation +dqor335 or 6 -1E-1009 -> NaN Invalid_operation +dqor336 or 7 -1.00000000E-1999 -> NaN Invalid_operation +dqor337 or 8 -1E-1999 -> NaN Invalid_operation +dqor338 or 9 -9.99999999E+1999 -> NaN Invalid_operation +dqor341 or 9.99999999E+2999 -18 -> NaN Invalid_operation +dqor342 or 1E-2999 01 -> NaN Invalid_operation +dqor343 or 1.00000000E-2999 -18 -> NaN Invalid_operation +dqor344 or 1E-1009 18 -> NaN Invalid_operation +dqor345 or -1E-1009 -10 -> NaN Invalid_operation +dqor346 or -1.00000000E-2999 18 -> NaN Invalid_operation +dqor347 or -1E-2999 10 -> NaN Invalid_operation +dqor348 or -9.99999999E+2999 -18 -> NaN Invalid_operation + +-- A few other non-integers +dqor361 or 1.0 1 -> NaN Invalid_operation +dqor362 or 1E+1 1 -> NaN Invalid_operation +dqor363 or 0.0 1 -> NaN Invalid_operation +dqor364 or 0E+1 1 -> NaN Invalid_operation +dqor365 or 9.9 1 -> NaN Invalid_operation +dqor366 or 9E+1 1 -> NaN Invalid_operation +dqor371 or 0 1.0 -> NaN Invalid_operation +dqor372 or 0 1E+1 -> NaN Invalid_operation +dqor373 or 0 0.0 -> NaN Invalid_operation +dqor374 or 0 0E+1 -> NaN Invalid_operation +dqor375 or 0 9.9 -> NaN Invalid_operation +dqor376 or 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +dqor780 or -Inf -Inf -> NaN Invalid_operation +dqor781 or -Inf -1000 -> NaN Invalid_operation +dqor782 or -Inf -1 -> NaN Invalid_operation +dqor783 or -Inf -0 -> NaN Invalid_operation +dqor784 or -Inf 0 -> NaN Invalid_operation +dqor785 or -Inf 1 -> NaN Invalid_operation +dqor786 or -Inf 1000 -> NaN Invalid_operation +dqor787 or -1000 -Inf -> NaN Invalid_operation +dqor788 or -Inf -Inf -> NaN Invalid_operation +dqor789 or -1 -Inf -> NaN Invalid_operation +dqor790 or -0 -Inf -> NaN Invalid_operation +dqor791 or 0 -Inf -> NaN Invalid_operation +dqor792 or 1 -Inf -> NaN Invalid_operation +dqor793 or 1000 -Inf -> NaN Invalid_operation +dqor794 or Inf -Inf -> NaN Invalid_operation + +dqor800 or Inf -Inf -> NaN Invalid_operation +dqor801 or Inf -1000 -> NaN Invalid_operation +dqor802 or Inf -1 -> NaN Invalid_operation +dqor803 or Inf -0 -> NaN Invalid_operation +dqor804 or Inf 0 -> NaN Invalid_operation +dqor805 or Inf 1 -> NaN Invalid_operation +dqor806 or Inf 1000 -> NaN Invalid_operation +dqor807 or Inf Inf -> NaN Invalid_operation +dqor808 or -1000 Inf -> NaN Invalid_operation +dqor809 or -Inf Inf -> NaN Invalid_operation +dqor810 or -1 Inf -> NaN Invalid_operation +dqor811 or -0 Inf -> NaN Invalid_operation +dqor812 or 0 Inf -> NaN Invalid_operation +dqor813 or 1 Inf -> NaN Invalid_operation +dqor814 or 1000 Inf -> NaN Invalid_operation +dqor815 or Inf Inf -> NaN Invalid_operation + +dqor821 or NaN -Inf -> NaN Invalid_operation +dqor822 or NaN -1000 -> NaN Invalid_operation +dqor823 or NaN -1 -> NaN Invalid_operation +dqor824 or NaN -0 -> NaN Invalid_operation +dqor825 or NaN 0 -> NaN Invalid_operation +dqor826 or NaN 1 -> NaN Invalid_operation +dqor827 or NaN 1000 -> NaN Invalid_operation +dqor828 or NaN Inf -> NaN Invalid_operation +dqor829 or NaN NaN -> NaN Invalid_operation +dqor830 or -Inf NaN -> NaN Invalid_operation +dqor831 or -1000 NaN -> NaN Invalid_operation +dqor832 or -1 NaN -> NaN Invalid_operation +dqor833 or -0 NaN -> NaN Invalid_operation +dqor834 or 0 NaN -> NaN Invalid_operation +dqor835 or 1 NaN -> NaN Invalid_operation +dqor836 or 1000 NaN -> NaN Invalid_operation +dqor837 or Inf NaN -> NaN Invalid_operation + +dqor841 or sNaN -Inf -> NaN Invalid_operation +dqor842 or sNaN -1000 -> NaN Invalid_operation +dqor843 or sNaN -1 -> NaN Invalid_operation +dqor844 or sNaN -0 -> NaN Invalid_operation +dqor845 or sNaN 0 -> NaN Invalid_operation +dqor846 or sNaN 1 -> NaN Invalid_operation +dqor847 or sNaN 1000 -> NaN Invalid_operation +dqor848 or sNaN NaN -> NaN Invalid_operation +dqor849 or sNaN sNaN -> NaN Invalid_operation +dqor850 or NaN sNaN -> NaN Invalid_operation +dqor851 or -Inf sNaN -> NaN Invalid_operation +dqor852 or -1000 sNaN -> NaN Invalid_operation +dqor853 or -1 sNaN -> NaN Invalid_operation +dqor854 or -0 sNaN -> NaN Invalid_operation +dqor855 or 0 sNaN -> NaN Invalid_operation +dqor856 or 1 sNaN -> NaN Invalid_operation +dqor857 or 1000 sNaN -> NaN Invalid_operation +dqor858 or Inf sNaN -> NaN Invalid_operation +dqor859 or NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqor861 or NaN1 -Inf -> NaN Invalid_operation +dqor862 or +NaN2 -1000 -> NaN Invalid_operation +dqor863 or NaN3 1000 -> NaN Invalid_operation +dqor864 or NaN4 Inf -> NaN Invalid_operation +dqor865 or NaN5 +NaN6 -> NaN Invalid_operation +dqor866 or -Inf NaN7 -> NaN Invalid_operation +dqor867 or -1000 NaN8 -> NaN Invalid_operation +dqor868 or 1000 NaN9 -> NaN Invalid_operation +dqor869 or Inf +NaN10 -> NaN Invalid_operation +dqor871 or sNaN11 -Inf -> NaN Invalid_operation +dqor872 or sNaN12 -1000 -> NaN Invalid_operation +dqor873 or sNaN13 1000 -> NaN Invalid_operation +dqor874 or sNaN14 NaN17 -> NaN Invalid_operation +dqor875 or sNaN15 sNaN18 -> NaN Invalid_operation +dqor876 or NaN16 sNaN19 -> NaN Invalid_operation +dqor877 or -Inf +sNaN20 -> NaN Invalid_operation +dqor878 or -1000 sNaN21 -> NaN Invalid_operation +dqor879 or 1000 sNaN22 -> NaN Invalid_operation +dqor880 or Inf sNaN23 -> NaN Invalid_operation +dqor881 or +NaN25 +sNaN24 -> NaN Invalid_operation +dqor882 or -NaN26 NaN28 -> NaN Invalid_operation +dqor883 or -sNaN27 sNaN29 -> NaN Invalid_operation +dqor884 or 1000 -NaN30 -> NaN Invalid_operation +dqor885 or 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqPlus.decTest b/Lib/test/decimaltestdata/dqPlus.decTest index 8aecaab796b..df1a15ca7fd 100644 --- a/Lib/test/decimaltestdata/dqPlus.decTest +++ b/Lib/test/decimaltestdata/dqPlus.decTest @@ -1,88 +1,88 @@ ------------------------------------------------------------------------- --- dqPlus.decTest -- decQuad 0+x -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqpls001 plus +7.50 -> 7.50 - --- Infinities -dqpls011 plus Infinity -> Infinity -dqpls012 plus -Infinity -> -Infinity - --- NaNs, 0 payload -ddqls021 plus NaN -> NaN -ddqls022 plus -NaN -> -NaN -ddqls023 plus sNaN -> NaN Invalid_operation -ddqls024 plus -sNaN -> -NaN Invalid_operation - --- NaNs, non-0 payload -ddqls031 plus NaN13 -> NaN13 -ddqls032 plus -NaN13 -> -NaN13 -ddqls033 plus sNaN13 -> NaN13 Invalid_operation -ddqls034 plus -sNaN13 -> -NaN13 Invalid_operation -ddqls035 plus NaN70 -> NaN70 -ddqls036 plus -NaN70 -> -NaN70 -ddqls037 plus sNaN101 -> NaN101 Invalid_operation -ddqls038 plus -sNaN101 -> -NaN101 Invalid_operation - --- finites -dqpls101 plus 7 -> 7 -dqpls102 plus -7 -> -7 -dqpls103 plus 75 -> 75 -dqpls104 plus -75 -> -75 -dqpls105 plus 7.50 -> 7.50 -dqpls106 plus -7.50 -> -7.50 -dqpls107 plus 7.500 -> 7.500 -dqpls108 plus -7.500 -> -7.500 - --- zeros -dqpls111 plus 0 -> 0 -dqpls112 plus -0 -> 0 -dqpls113 plus 0E+4 -> 0E+4 -dqpls114 plus -0E+4 -> 0E+4 -dqpls115 plus 0.0000 -> 0.0000 -dqpls116 plus -0.0000 -> 0.0000 -dqpls117 plus 0E-141 -> 0E-141 -dqpls118 plus -0E-141 -> 0E-141 - --- full coefficients, alternating bits -dqpls121 plus 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 -dqpls122 plus -2682682682682682682682682682682682 -> -2682682682682682682682682682682682 -dqpls123 plus 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 -dqpls124 plus -1341341341341341341341341341341341 -> -1341341341341341341341341341341341 - --- Nmax, Nmin, Ntiny -dqpls131 plus 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqpls132 plus 1E-6143 -> 1E-6143 -dqpls133 plus 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 -dqpls134 plus 1E-6176 -> 1E-6176 Subnormal - -dqpls135 plus -1E-6176 -> -1E-6176 Subnormal -dqpls136 plus -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 -dqpls137 plus -1E-6143 -> -1E-6143 -dqpls138 plus -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +------------------------------------------------------------------------ +-- dqPlus.decTest -- decQuad 0+x -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqpls001 plus +7.50 -> 7.50 + +-- Infinities +dqpls011 plus Infinity -> Infinity +dqpls012 plus -Infinity -> -Infinity + +-- NaNs, 0 payload +ddqls021 plus NaN -> NaN +ddqls022 plus -NaN -> -NaN +ddqls023 plus sNaN -> NaN Invalid_operation +ddqls024 plus -sNaN -> -NaN Invalid_operation + +-- NaNs, non-0 payload +ddqls031 plus NaN13 -> NaN13 +ddqls032 plus -NaN13 -> -NaN13 +ddqls033 plus sNaN13 -> NaN13 Invalid_operation +ddqls034 plus -sNaN13 -> -NaN13 Invalid_operation +ddqls035 plus NaN70 -> NaN70 +ddqls036 plus -NaN70 -> -NaN70 +ddqls037 plus sNaN101 -> NaN101 Invalid_operation +ddqls038 plus -sNaN101 -> -NaN101 Invalid_operation + +-- finites +dqpls101 plus 7 -> 7 +dqpls102 plus -7 -> -7 +dqpls103 plus 75 -> 75 +dqpls104 plus -75 -> -75 +dqpls105 plus 7.50 -> 7.50 +dqpls106 plus -7.50 -> -7.50 +dqpls107 plus 7.500 -> 7.500 +dqpls108 plus -7.500 -> -7.500 + +-- zeros +dqpls111 plus 0 -> 0 +dqpls112 plus -0 -> 0 +dqpls113 plus 0E+4 -> 0E+4 +dqpls114 plus -0E+4 -> 0E+4 +dqpls115 plus 0.0000 -> 0.0000 +dqpls116 plus -0.0000 -> 0.0000 +dqpls117 plus 0E-141 -> 0E-141 +dqpls118 plus -0E-141 -> 0E-141 + +-- full coefficients, alternating bits +dqpls121 plus 2682682682682682682682682682682682 -> 2682682682682682682682682682682682 +dqpls122 plus -2682682682682682682682682682682682 -> -2682682682682682682682682682682682 +dqpls123 plus 1341341341341341341341341341341341 -> 1341341341341341341341341341341341 +dqpls124 plus -1341341341341341341341341341341341 -> -1341341341341341341341341341341341 + +-- Nmax, Nmin, Ntiny +dqpls131 plus 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqpls132 plus 1E-6143 -> 1E-6143 +dqpls133 plus 1.000000000000000000000000000000000E-6143 -> 1.000000000000000000000000000000000E-6143 +dqpls134 plus 1E-6176 -> 1E-6176 Subnormal + +dqpls135 plus -1E-6176 -> -1E-6176 Subnormal +dqpls136 plus -1.000000000000000000000000000000000E-6143 -> -1.000000000000000000000000000000000E-6143 +dqpls137 plus -1E-6143 -> -1E-6143 +dqpls138 plus -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 diff --git a/Lib/test/decimaltestdata/dqQuantize.decTest b/Lib/test/decimaltestdata/dqQuantize.decTest index 51471c2626b..4ed39b45c47 100644 --- a/Lib/test/decimaltestdata/dqQuantize.decTest +++ b/Lib/test/decimaltestdata/dqQuantize.decTest @@ -1,836 +1,836 @@ ------------------------------------------------------------------------- --- dqQuantize.decTest -- decQuad quantize operation -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Most of the tests here assume a "regular pattern", where the --- sign and coefficient are +1. --- 2004.03.15 Underflow for quantize is suppressed --- 2005.06.08 More extensive tests for 'does not fit' --- [Forked from quantize.decTest 2006.11.25] - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks -dqqua001 quantize 0 1e0 -> 0 -dqqua002 quantize 1 1e0 -> 1 -dqqua003 quantize 0.1 1e+2 -> 0E+2 Inexact Rounded -dqqua005 quantize 0.1 1e+1 -> 0E+1 Inexact Rounded -dqqua006 quantize 0.1 1e0 -> 0 Inexact Rounded -dqqua007 quantize 0.1 1e-1 -> 0.1 -dqqua008 quantize 0.1 1e-2 -> 0.10 -dqqua009 quantize 0.1 1e-3 -> 0.100 -dqqua010 quantize 0.9 1e+2 -> 0E+2 Inexact Rounded -dqqua011 quantize 0.9 1e+1 -> 0E+1 Inexact Rounded -dqqua012 quantize 0.9 1e+0 -> 1 Inexact Rounded -dqqua013 quantize 0.9 1e-1 -> 0.9 -dqqua014 quantize 0.9 1e-2 -> 0.90 -dqqua015 quantize 0.9 1e-3 -> 0.900 --- negatives -dqqua021 quantize -0 1e0 -> -0 -dqqua022 quantize -1 1e0 -> -1 -dqqua023 quantize -0.1 1e+2 -> -0E+2 Inexact Rounded -dqqua025 quantize -0.1 1e+1 -> -0E+1 Inexact Rounded -dqqua026 quantize -0.1 1e0 -> -0 Inexact Rounded -dqqua027 quantize -0.1 1e-1 -> -0.1 -dqqua028 quantize -0.1 1e-2 -> -0.10 -dqqua029 quantize -0.1 1e-3 -> -0.100 -dqqua030 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded -dqqua031 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded -dqqua032 quantize -0.9 1e+0 -> -1 Inexact Rounded -dqqua033 quantize -0.9 1e-1 -> -0.9 -dqqua034 quantize -0.9 1e-2 -> -0.90 -dqqua035 quantize -0.9 1e-3 -> -0.900 -dqqua036 quantize -0.5 1e+2 -> -0E+2 Inexact Rounded -dqqua037 quantize -0.5 1e+1 -> -0E+1 Inexact Rounded -dqqua038 quantize -0.5 1e+0 -> -0 Inexact Rounded -dqqua039 quantize -0.5 1e-1 -> -0.5 -dqqua040 quantize -0.5 1e-2 -> -0.50 -dqqua041 quantize -0.5 1e-3 -> -0.500 -dqqua042 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded -dqqua043 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded -dqqua044 quantize -0.9 1e+0 -> -1 Inexact Rounded -dqqua045 quantize -0.9 1e-1 -> -0.9 -dqqua046 quantize -0.9 1e-2 -> -0.90 -dqqua047 quantize -0.9 1e-3 -> -0.900 - --- examples from Specification -dqqua060 quantize 2.17 0.001 -> 2.170 -dqqua061 quantize 2.17 0.01 -> 2.17 -dqqua062 quantize 2.17 0.1 -> 2.2 Inexact Rounded -dqqua063 quantize 2.17 1e+0 -> 2 Inexact Rounded -dqqua064 quantize 2.17 1e+1 -> 0E+1 Inexact Rounded -dqqua065 quantize -Inf Inf -> -Infinity -dqqua066 quantize 2 Inf -> NaN Invalid_operation -dqqua067 quantize -0.1 1 -> -0 Inexact Rounded -dqqua068 quantize -0 1e+5 -> -0E+5 -dqqua069 quantize +123451234567899876543216789012345.6 1e-2 -> NaN Invalid_operation -dqqua070 quantize -987651234567899876543214335236450.6 1e-2 -> NaN Invalid_operation -dqqua071 quantize 217 1e-1 -> 217.0 -dqqua072 quantize 217 1e+0 -> 217 -dqqua073 quantize 217 1e+1 -> 2.2E+2 Inexact Rounded -dqqua074 quantize 217 1e+2 -> 2E+2 Inexact Rounded - --- general tests .. -dqqua089 quantize 12 1e+4 -> 0E+4 Inexact Rounded -dqqua090 quantize 12 1e+3 -> 0E+3 Inexact Rounded -dqqua091 quantize 12 1e+2 -> 0E+2 Inexact Rounded -dqqua092 quantize 12 1e+1 -> 1E+1 Inexact Rounded -dqqua093 quantize 1.2345 1e-2 -> 1.23 Inexact Rounded -dqqua094 quantize 1.2355 1e-2 -> 1.24 Inexact Rounded -dqqua095 quantize 1.2345 1e-6 -> 1.234500 -dqqua096 quantize 9.9999 1e-2 -> 10.00 Inexact Rounded -dqqua097 quantize 0.0001 1e-2 -> 0.00 Inexact Rounded -dqqua098 quantize 0.001 1e-2 -> 0.00 Inexact Rounded -dqqua099 quantize 0.009 1e-2 -> 0.01 Inexact Rounded -dqqua100 quantize 92 1e+2 -> 1E+2 Inexact Rounded - -dqqua101 quantize -1 1e0 -> -1 -dqqua102 quantize -1 1e-1 -> -1.0 -dqqua103 quantize -1 1e-2 -> -1.00 -dqqua104 quantize 0 1e0 -> 0 -dqqua105 quantize 0 1e-1 -> 0.0 -dqqua106 quantize 0 1e-2 -> 0.00 -dqqua107 quantize 0.00 1e0 -> 0 -dqqua108 quantize 0 1e+1 -> 0E+1 -dqqua109 quantize 0 1e+2 -> 0E+2 -dqqua110 quantize +1 1e0 -> 1 -dqqua111 quantize +1 1e-1 -> 1.0 -dqqua112 quantize +1 1e-2 -> 1.00 - -dqqua120 quantize 1.04 1e-3 -> 1.040 -dqqua121 quantize 1.04 1e-2 -> 1.04 -dqqua122 quantize 1.04 1e-1 -> 1.0 Inexact Rounded -dqqua123 quantize 1.04 1e0 -> 1 Inexact Rounded -dqqua124 quantize 1.05 1e-3 -> 1.050 -dqqua125 quantize 1.05 1e-2 -> 1.05 -dqqua126 quantize 1.05 1e-1 -> 1.0 Inexact Rounded -dqqua131 quantize 1.05 1e0 -> 1 Inexact Rounded -dqqua132 quantize 1.06 1e-3 -> 1.060 -dqqua133 quantize 1.06 1e-2 -> 1.06 -dqqua134 quantize 1.06 1e-1 -> 1.1 Inexact Rounded -dqqua135 quantize 1.06 1e0 -> 1 Inexact Rounded - -dqqua140 quantize -10 1e-2 -> -10.00 -dqqua141 quantize +1 1e-2 -> 1.00 -dqqua142 quantize +10 1e-2 -> 10.00 -dqqua143 quantize 1E+37 1e-2 -> NaN Invalid_operation -dqqua144 quantize 1E-37 1e-2 -> 0.00 Inexact Rounded -dqqua145 quantize 1E-3 1e-2 -> 0.00 Inexact Rounded -dqqua146 quantize 1E-2 1e-2 -> 0.01 -dqqua147 quantize 1E-1 1e-2 -> 0.10 -dqqua148 quantize 0E-37 1e-2 -> 0.00 - -dqqua150 quantize 1.0600 1e-5 -> 1.06000 -dqqua151 quantize 1.0600 1e-4 -> 1.0600 -dqqua152 quantize 1.0600 1e-3 -> 1.060 Rounded -dqqua153 quantize 1.0600 1e-2 -> 1.06 Rounded -dqqua154 quantize 1.0600 1e-1 -> 1.1 Inexact Rounded -dqqua155 quantize 1.0600 1e0 -> 1 Inexact Rounded - --- a couple where rounding was different in base tests -rounding: half_up -dqqua157 quantize -0.5 1e+0 -> -1 Inexact Rounded -dqqua158 quantize 1.05 1e-1 -> 1.1 Inexact Rounded -dqqua159 quantize 1.06 1e0 -> 1 Inexact Rounded -rounding: half_even - --- base tests with non-1 coefficients -dqqua161 quantize 0 -9e0 -> 0 -dqqua162 quantize 1 -7e0 -> 1 -dqqua163 quantize 0.1 -1e+2 -> 0E+2 Inexact Rounded -dqqua165 quantize 0.1 0e+1 -> 0E+1 Inexact Rounded -dqqua166 quantize 0.1 2e0 -> 0 Inexact Rounded -dqqua167 quantize 0.1 3e-1 -> 0.1 -dqqua168 quantize 0.1 44e-2 -> 0.10 -dqqua169 quantize 0.1 555e-3 -> 0.100 -dqqua170 quantize 0.9 6666e+2 -> 0E+2 Inexact Rounded -dqqua171 quantize 0.9 -777e+1 -> 0E+1 Inexact Rounded -dqqua172 quantize 0.9 -88e+0 -> 1 Inexact Rounded -dqqua173 quantize 0.9 -9e-1 -> 0.9 -dqqua174 quantize 0.9 0e-2 -> 0.90 -dqqua175 quantize 0.9 1.1e-3 -> 0.9000 --- negatives -dqqua181 quantize -0 1.1e0 -> -0.0 -dqqua182 quantize -1 -1e0 -> -1 -dqqua183 quantize -0.1 11e+2 -> -0E+2 Inexact Rounded -dqqua185 quantize -0.1 111e+1 -> -0E+1 Inexact Rounded -dqqua186 quantize -0.1 71e0 -> -0 Inexact Rounded -dqqua187 quantize -0.1 -91e-1 -> -0.1 -dqqua188 quantize -0.1 -.1e-2 -> -0.100 -dqqua189 quantize -0.1 -1e-3 -> -0.100 -dqqua190 quantize -0.9 0e+2 -> -0E+2 Inexact Rounded -dqqua191 quantize -0.9 -0e+1 -> -0E+1 Inexact Rounded -dqqua192 quantize -0.9 -10e+0 -> -1 Inexact Rounded -dqqua193 quantize -0.9 100e-1 -> -0.9 -dqqua194 quantize -0.9 999e-2 -> -0.90 - --- +ve exponents .. -dqqua201 quantize -1 1e+0 -> -1 -dqqua202 quantize -1 1e+1 -> -0E+1 Inexact Rounded -dqqua203 quantize -1 1e+2 -> -0E+2 Inexact Rounded -dqqua204 quantize 0 1e+0 -> 0 -dqqua205 quantize 0 1e+1 -> 0E+1 -dqqua206 quantize 0 1e+2 -> 0E+2 -dqqua207 quantize +1 1e+0 -> 1 -dqqua208 quantize +1 1e+1 -> 0E+1 Inexact Rounded -dqqua209 quantize +1 1e+2 -> 0E+2 Inexact Rounded - -dqqua220 quantize 1.04 1e+3 -> 0E+3 Inexact Rounded -dqqua221 quantize 1.04 1e+2 -> 0E+2 Inexact Rounded -dqqua222 quantize 1.04 1e+1 -> 0E+1 Inexact Rounded -dqqua223 quantize 1.04 1e+0 -> 1 Inexact Rounded -dqqua224 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded -dqqua225 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded -dqqua226 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded -dqqua227 quantize 1.05 1e+0 -> 1 Inexact Rounded -dqqua228 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded -dqqua229 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded -dqqua230 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded -dqqua231 quantize 1.05 1e+0 -> 1 Inexact Rounded -dqqua232 quantize 1.06 1e+3 -> 0E+3 Inexact Rounded -dqqua233 quantize 1.06 1e+2 -> 0E+2 Inexact Rounded -dqqua234 quantize 1.06 1e+1 -> 0E+1 Inexact Rounded -dqqua235 quantize 1.06 1e+0 -> 1 Inexact Rounded - -dqqua240 quantize -10 1e+1 -> -1E+1 Rounded -dqqua241 quantize +1 1e+1 -> 0E+1 Inexact Rounded -dqqua242 quantize +10 1e+1 -> 1E+1 Rounded -dqqua243 quantize 1E+1 1e+1 -> 1E+1 -- underneath this is E+1 -dqqua244 quantize 1E+2 1e+1 -> 1.0E+2 -- underneath this is E+1 -dqqua245 quantize 1E+3 1e+1 -> 1.00E+3 -- underneath this is E+1 -dqqua246 quantize 1E+4 1e+1 -> 1.000E+4 -- underneath this is E+1 -dqqua247 quantize 1E+5 1e+1 -> 1.0000E+5 -- underneath this is E+1 -dqqua248 quantize 1E+6 1e+1 -> 1.00000E+6 -- underneath this is E+1 -dqqua249 quantize 1E+7 1e+1 -> 1.000000E+7 -- underneath this is E+1 -dqqua250 quantize 1E+8 1e+1 -> 1.0000000E+8 -- underneath this is E+1 -dqqua251 quantize 1E+9 1e+1 -> 1.00000000E+9 -- underneath this is E+1 --- next one tries to add 9 zeros -dqqua252 quantize 1E+37 1e+1 -> NaN Invalid_operation -dqqua253 quantize 1E-37 1e+1 -> 0E+1 Inexact Rounded -dqqua254 quantize 1E-2 1e+1 -> 0E+1 Inexact Rounded -dqqua255 quantize 0E-37 1e+1 -> 0E+1 -dqqua256 quantize -0E-37 1e+1 -> -0E+1 -dqqua257 quantize -0E-1 1e+1 -> -0E+1 -dqqua258 quantize -0 1e+1 -> -0E+1 -dqqua259 quantize -0E+1 1e+1 -> -0E+1 - -dqqua260 quantize -10 1e+2 -> -0E+2 Inexact Rounded -dqqua261 quantize +1 1e+2 -> 0E+2 Inexact Rounded -dqqua262 quantize +10 1e+2 -> 0E+2 Inexact Rounded -dqqua263 quantize 1E+1 1e+2 -> 0E+2 Inexact Rounded -dqqua264 quantize 1E+2 1e+2 -> 1E+2 -dqqua265 quantize 1E+3 1e+2 -> 1.0E+3 -dqqua266 quantize 1E+4 1e+2 -> 1.00E+4 -dqqua267 quantize 1E+5 1e+2 -> 1.000E+5 -dqqua268 quantize 1E+6 1e+2 -> 1.0000E+6 -dqqua269 quantize 1E+7 1e+2 -> 1.00000E+7 -dqqua270 quantize 1E+8 1e+2 -> 1.000000E+8 -dqqua271 quantize 1E+9 1e+2 -> 1.0000000E+9 -dqqua272 quantize 1E+10 1e+2 -> 1.00000000E+10 -dqqua273 quantize 1E-10 1e+2 -> 0E+2 Inexact Rounded -dqqua274 quantize 1E-2 1e+2 -> 0E+2 Inexact Rounded -dqqua275 quantize 0E-10 1e+2 -> 0E+2 - -dqqua280 quantize -10 1e+3 -> -0E+3 Inexact Rounded -dqqua281 quantize +1 1e+3 -> 0E+3 Inexact Rounded -dqqua282 quantize +10 1e+3 -> 0E+3 Inexact Rounded -dqqua283 quantize 1E+1 1e+3 -> 0E+3 Inexact Rounded -dqqua284 quantize 1E+2 1e+3 -> 0E+3 Inexact Rounded -dqqua285 quantize 1E+3 1e+3 -> 1E+3 -dqqua286 quantize 1E+4 1e+3 -> 1.0E+4 -dqqua287 quantize 1E+5 1e+3 -> 1.00E+5 -dqqua288 quantize 1E+6 1e+3 -> 1.000E+6 -dqqua289 quantize 1E+7 1e+3 -> 1.0000E+7 -dqqua290 quantize 1E+8 1e+3 -> 1.00000E+8 -dqqua291 quantize 1E+9 1e+3 -> 1.000000E+9 -dqqua292 quantize 1E+10 1e+3 -> 1.0000000E+10 -dqqua293 quantize 1E-10 1e+3 -> 0E+3 Inexact Rounded -dqqua294 quantize 1E-2 1e+3 -> 0E+3 Inexact Rounded -dqqua295 quantize 0E-10 1e+3 -> 0E+3 - --- round up from below [sign wrong in JIT compiler once] -dqqua300 quantize 0.0078 1e-5 -> 0.00780 -dqqua301 quantize 0.0078 1e-4 -> 0.0078 -dqqua302 quantize 0.0078 1e-3 -> 0.008 Inexact Rounded -dqqua303 quantize 0.0078 1e-2 -> 0.01 Inexact Rounded -dqqua304 quantize 0.0078 1e-1 -> 0.0 Inexact Rounded -dqqua305 quantize 0.0078 1e0 -> 0 Inexact Rounded -dqqua306 quantize 0.0078 1e+1 -> 0E+1 Inexact Rounded -dqqua307 quantize 0.0078 1e+2 -> 0E+2 Inexact Rounded - -dqqua310 quantize -0.0078 1e-5 -> -0.00780 -dqqua311 quantize -0.0078 1e-4 -> -0.0078 -dqqua312 quantize -0.0078 1e-3 -> -0.008 Inexact Rounded -dqqua313 quantize -0.0078 1e-2 -> -0.01 Inexact Rounded -dqqua314 quantize -0.0078 1e-1 -> -0.0 Inexact Rounded -dqqua315 quantize -0.0078 1e0 -> -0 Inexact Rounded -dqqua316 quantize -0.0078 1e+1 -> -0E+1 Inexact Rounded -dqqua317 quantize -0.0078 1e+2 -> -0E+2 Inexact Rounded - -dqqua320 quantize 0.078 1e-5 -> 0.07800 -dqqua321 quantize 0.078 1e-4 -> 0.0780 -dqqua322 quantize 0.078 1e-3 -> 0.078 -dqqua323 quantize 0.078 1e-2 -> 0.08 Inexact Rounded -dqqua324 quantize 0.078 1e-1 -> 0.1 Inexact Rounded -dqqua325 quantize 0.078 1e0 -> 0 Inexact Rounded -dqqua326 quantize 0.078 1e+1 -> 0E+1 Inexact Rounded -dqqua327 quantize 0.078 1e+2 -> 0E+2 Inexact Rounded - -dqqua330 quantize -0.078 1e-5 -> -0.07800 -dqqua331 quantize -0.078 1e-4 -> -0.0780 -dqqua332 quantize -0.078 1e-3 -> -0.078 -dqqua333 quantize -0.078 1e-2 -> -0.08 Inexact Rounded -dqqua334 quantize -0.078 1e-1 -> -0.1 Inexact Rounded -dqqua335 quantize -0.078 1e0 -> -0 Inexact Rounded -dqqua336 quantize -0.078 1e+1 -> -0E+1 Inexact Rounded -dqqua337 quantize -0.078 1e+2 -> -0E+2 Inexact Rounded - -dqqua340 quantize 0.78 1e-5 -> 0.78000 -dqqua341 quantize 0.78 1e-4 -> 0.7800 -dqqua342 quantize 0.78 1e-3 -> 0.780 -dqqua343 quantize 0.78 1e-2 -> 0.78 -dqqua344 quantize 0.78 1e-1 -> 0.8 Inexact Rounded -dqqua345 quantize 0.78 1e0 -> 1 Inexact Rounded -dqqua346 quantize 0.78 1e+1 -> 0E+1 Inexact Rounded -dqqua347 quantize 0.78 1e+2 -> 0E+2 Inexact Rounded - -dqqua350 quantize -0.78 1e-5 -> -0.78000 -dqqua351 quantize -0.78 1e-4 -> -0.7800 -dqqua352 quantize -0.78 1e-3 -> -0.780 -dqqua353 quantize -0.78 1e-2 -> -0.78 -dqqua354 quantize -0.78 1e-1 -> -0.8 Inexact Rounded -dqqua355 quantize -0.78 1e0 -> -1 Inexact Rounded -dqqua356 quantize -0.78 1e+1 -> -0E+1 Inexact Rounded -dqqua357 quantize -0.78 1e+2 -> -0E+2 Inexact Rounded - -dqqua360 quantize 7.8 1e-5 -> 7.80000 -dqqua361 quantize 7.8 1e-4 -> 7.8000 -dqqua362 quantize 7.8 1e-3 -> 7.800 -dqqua363 quantize 7.8 1e-2 -> 7.80 -dqqua364 quantize 7.8 1e-1 -> 7.8 -dqqua365 quantize 7.8 1e0 -> 8 Inexact Rounded -dqqua366 quantize 7.8 1e+1 -> 1E+1 Inexact Rounded -dqqua367 quantize 7.8 1e+2 -> 0E+2 Inexact Rounded -dqqua368 quantize 7.8 1e+3 -> 0E+3 Inexact Rounded - -dqqua370 quantize -7.8 1e-5 -> -7.80000 -dqqua371 quantize -7.8 1e-4 -> -7.8000 -dqqua372 quantize -7.8 1e-3 -> -7.800 -dqqua373 quantize -7.8 1e-2 -> -7.80 -dqqua374 quantize -7.8 1e-1 -> -7.8 -dqqua375 quantize -7.8 1e0 -> -8 Inexact Rounded -dqqua376 quantize -7.8 1e+1 -> -1E+1 Inexact Rounded -dqqua377 quantize -7.8 1e+2 -> -0E+2 Inexact Rounded -dqqua378 quantize -7.8 1e+3 -> -0E+3 Inexact Rounded - --- some individuals -dqqua380 quantize 1122334455667788991234567352364.506 1e-2 -> 1122334455667788991234567352364.51 Inexact Rounded -dqqua381 quantize 11223344556677889912345673523645.06 1e-2 -> 11223344556677889912345673523645.06 -dqqua382 quantize 112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation -dqqua383 quantize 1122334455667788991234567352364506 1e-2 -> NaN Invalid_operation -dqqua384 quantize -1122334455667788991234567352364.506 1e-2 -> -1122334455667788991234567352364.51 Inexact Rounded -dqqua385 quantize -11223344556677889912345673523645.06 1e-2 -> -11223344556677889912345673523645.06 -dqqua386 quantize -112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation -dqqua387 quantize -1122334455667788991234567352364506 1e-2 -> NaN Invalid_operation - -rounding: down -dqqua389 quantize 112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation -rounding: half_up - --- and a few more from e-mail discussions -dqqua391 quantize 11223344556677889912345678912.34567 1e-3 -> 11223344556677889912345678912.346 Inexact Rounded -dqqua392 quantize 112233445566778899123456789123.4567 1e-3 -> 112233445566778899123456789123.457 Inexact Rounded -dqqua393 quantize 1122334455667788991234567891234567. 1e-3 -> NaN Invalid_operation - --- some 9999 round-up cases -dqqua400 quantize 9.999 1e-5 -> 9.99900 -dqqua401 quantize 9.999 1e-4 -> 9.9990 -dqqua402 quantize 9.999 1e-3 -> 9.999 -dqqua403 quantize 9.999 1e-2 -> 10.00 Inexact Rounded -dqqua404 quantize 9.999 1e-1 -> 10.0 Inexact Rounded -dqqua405 quantize 9.999 1e0 -> 10 Inexact Rounded -dqqua406 quantize 9.999 1e1 -> 1E+1 Inexact Rounded -dqqua407 quantize 9.999 1e2 -> 0E+2 Inexact Rounded - -dqqua410 quantize 0.999 1e-5 -> 0.99900 -dqqua411 quantize 0.999 1e-4 -> 0.9990 -dqqua412 quantize 0.999 1e-3 -> 0.999 -dqqua413 quantize 0.999 1e-2 -> 1.00 Inexact Rounded -dqqua414 quantize 0.999 1e-1 -> 1.0 Inexact Rounded -dqqua415 quantize 0.999 1e0 -> 1 Inexact Rounded -dqqua416 quantize 0.999 1e1 -> 0E+1 Inexact Rounded - -dqqua420 quantize 0.0999 1e-5 -> 0.09990 -dqqua421 quantize 0.0999 1e-4 -> 0.0999 -dqqua422 quantize 0.0999 1e-3 -> 0.100 Inexact Rounded -dqqua423 quantize 0.0999 1e-2 -> 0.10 Inexact Rounded -dqqua424 quantize 0.0999 1e-1 -> 0.1 Inexact Rounded -dqqua425 quantize 0.0999 1e0 -> 0 Inexact Rounded -dqqua426 quantize 0.0999 1e1 -> 0E+1 Inexact Rounded - -dqqua430 quantize 0.00999 1e-5 -> 0.00999 -dqqua431 quantize 0.00999 1e-4 -> 0.0100 Inexact Rounded -dqqua432 quantize 0.00999 1e-3 -> 0.010 Inexact Rounded -dqqua433 quantize 0.00999 1e-2 -> 0.01 Inexact Rounded -dqqua434 quantize 0.00999 1e-1 -> 0.0 Inexact Rounded -dqqua435 quantize 0.00999 1e0 -> 0 Inexact Rounded -dqqua436 quantize 0.00999 1e1 -> 0E+1 Inexact Rounded - -dqqua440 quantize 0.000999 1e-5 -> 0.00100 Inexact Rounded -dqqua441 quantize 0.000999 1e-4 -> 0.0010 Inexact Rounded -dqqua442 quantize 0.000999 1e-3 -> 0.001 Inexact Rounded -dqqua443 quantize 0.000999 1e-2 -> 0.00 Inexact Rounded -dqqua444 quantize 0.000999 1e-1 -> 0.0 Inexact Rounded -dqqua445 quantize 0.000999 1e0 -> 0 Inexact Rounded -dqqua446 quantize 0.000999 1e1 -> 0E+1 Inexact Rounded - -dqqua1001 quantize 0.000 0.001 -> 0.000 -dqqua1002 quantize 0.001 0.001 -> 0.001 -dqqua1003 quantize 0.0012 0.001 -> 0.001 Inexact Rounded -dqqua1004 quantize 0.0018 0.001 -> 0.002 Inexact Rounded -dqqua1005 quantize 0.501 0.001 -> 0.501 -dqqua1006 quantize 0.5012 0.001 -> 0.501 Inexact Rounded -dqqua1007 quantize 0.5018 0.001 -> 0.502 Inexact Rounded -dqqua1008 quantize 0.999 0.001 -> 0.999 - -dqqua481 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded -dqqua482 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded -dqqua483 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded -dqqua484 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded -dqqua485 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded -dqqua486 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded --- a potential double-round -dqqua487 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded -dqqua488 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded - -dqqua491 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded -dqqua492 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded -dqqua493 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded -dqqua494 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded -dqqua495 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded -dqqua496 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded -dqqua497 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded -dqqua498 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded - --- Zeros -dqqua500 quantize 0 1e1 -> 0E+1 -dqqua501 quantize 0 1e0 -> 0 -dqqua502 quantize 0 1e-1 -> 0.0 -dqqua503 quantize 0.0 1e-1 -> 0.0 -dqqua504 quantize 0.0 1e0 -> 0 -dqqua505 quantize 0.0 1e+1 -> 0E+1 -dqqua506 quantize 0E+1 1e-1 -> 0.0 -dqqua507 quantize 0E+1 1e0 -> 0 -dqqua508 quantize 0E+1 1e+1 -> 0E+1 -dqqua509 quantize -0 1e1 -> -0E+1 -dqqua510 quantize -0 1e0 -> -0 -dqqua511 quantize -0 1e-1 -> -0.0 -dqqua512 quantize -0.0 1e-1 -> -0.0 -dqqua513 quantize -0.0 1e0 -> -0 -dqqua514 quantize -0.0 1e+1 -> -0E+1 -dqqua515 quantize -0E+1 1e-1 -> -0.0 -dqqua516 quantize -0E+1 1e0 -> -0 -dqqua517 quantize -0E+1 1e+1 -> -0E+1 --- #519 here once a problem -dqqua518 quantize 0 0E-3 -> 0.000 -dqqua519 quantize 0 0E-33 -> 0E-33 -dqqua520 quantize 0.00000000000000000000000000000000 0E-33 -> 0E-33 -dqqua521 quantize 0.000000000000000000000000000000000 0E-33 -> 0E-33 - --- Some non-zeros with lots of padding on the right -dqqua523 quantize 1 0E-33 -> 1.000000000000000000000000000000000 -dqqua524 quantize 12 0E-32 -> 12.00000000000000000000000000000000 -dqqua525 quantize 123 0E-31 -> 123.0000000000000000000000000000000 -dqqua526 quantize 123 0E-32 -> NaN Invalid_operation -dqqua527 quantize 123.4 0E-31 -> 123.4000000000000000000000000000000 -dqqua528 quantize 123.4 0E-32 -> NaN Invalid_operation - --- Suspicious RHS values -dqqua530 quantize 1.234 1e359 -> 0E+359 Inexact Rounded -dqqua531 quantize 123.456 1e359 -> 0E+359 Inexact Rounded -dqqua532 quantize 1.234 1e359 -> 0E+359 Inexact Rounded -dqqua533 quantize 123.456 1e359 -> 0E+359 Inexact Rounded --- next four are "won't fit" overflows -dqqua536 quantize 1.234 1e-299 -> NaN Invalid_operation -dqqua537 quantize 123.456 1e-299 -> NaN Invalid_operation -dqqua538 quantize 1.234 1e-299 -> NaN Invalid_operation -dqqua539 quantize 123.456 1e-299 -> NaN Invalid_operation - -dqqua542 quantize 1.234E+299 1e299 -> 1E+299 Inexact Rounded -dqqua543 quantize 1.234E+298 1e299 -> 0E+299 Inexact Rounded -dqqua544 quantize 1.234 1e299 -> 0E+299 Inexact Rounded -dqqua547 quantize 0 1e-299 -> 0E-299 --- next two are "won't fit" overflows -dqqua548 quantize 1.234 1e-299 -> NaN Invalid_operation -dqqua549 quantize 1.234 1e-300 -> NaN Invalid_operation --- [more below] - --- Specials -dqqua580 quantize Inf -Inf -> Infinity -dqqua581 quantize Inf 1e-299 -> NaN Invalid_operation -dqqua582 quantize Inf 1e-1 -> NaN Invalid_operation -dqqua583 quantize Inf 1e0 -> NaN Invalid_operation -dqqua584 quantize Inf 1e1 -> NaN Invalid_operation -dqqua585 quantize Inf 1e299 -> NaN Invalid_operation -dqqua586 quantize Inf Inf -> Infinity -dqqua587 quantize -1000 Inf -> NaN Invalid_operation -dqqua588 quantize -Inf Inf -> -Infinity -dqqua589 quantize -1 Inf -> NaN Invalid_operation -dqqua590 quantize 0 Inf -> NaN Invalid_operation -dqqua591 quantize 1 Inf -> NaN Invalid_operation -dqqua592 quantize 1000 Inf -> NaN Invalid_operation -dqqua593 quantize Inf Inf -> Infinity -dqqua594 quantize Inf 1e-0 -> NaN Invalid_operation -dqqua595 quantize -0 Inf -> NaN Invalid_operation - -dqqua600 quantize -Inf -Inf -> -Infinity -dqqua601 quantize -Inf 1e-299 -> NaN Invalid_operation -dqqua602 quantize -Inf 1e-1 -> NaN Invalid_operation -dqqua603 quantize -Inf 1e0 -> NaN Invalid_operation -dqqua604 quantize -Inf 1e1 -> NaN Invalid_operation -dqqua605 quantize -Inf 1e299 -> NaN Invalid_operation -dqqua606 quantize -Inf Inf -> -Infinity -dqqua607 quantize -1000 Inf -> NaN Invalid_operation -dqqua608 quantize -Inf -Inf -> -Infinity -dqqua609 quantize -1 -Inf -> NaN Invalid_operation -dqqua610 quantize 0 -Inf -> NaN Invalid_operation -dqqua611 quantize 1 -Inf -> NaN Invalid_operation -dqqua612 quantize 1000 -Inf -> NaN Invalid_operation -dqqua613 quantize Inf -Inf -> Infinity -dqqua614 quantize -Inf 1e-0 -> NaN Invalid_operation -dqqua615 quantize -0 -Inf -> NaN Invalid_operation - -dqqua621 quantize NaN -Inf -> NaN -dqqua622 quantize NaN 1e-299 -> NaN -dqqua623 quantize NaN 1e-1 -> NaN -dqqua624 quantize NaN 1e0 -> NaN -dqqua625 quantize NaN 1e1 -> NaN -dqqua626 quantize NaN 1e299 -> NaN -dqqua627 quantize NaN Inf -> NaN -dqqua628 quantize NaN NaN -> NaN -dqqua629 quantize -Inf NaN -> NaN -dqqua630 quantize -1000 NaN -> NaN -dqqua631 quantize -1 NaN -> NaN -dqqua632 quantize 0 NaN -> NaN -dqqua633 quantize 1 NaN -> NaN -dqqua634 quantize 1000 NaN -> NaN -dqqua635 quantize Inf NaN -> NaN -dqqua636 quantize NaN 1e-0 -> NaN -dqqua637 quantize -0 NaN -> NaN - -dqqua641 quantize sNaN -Inf -> NaN Invalid_operation -dqqua642 quantize sNaN 1e-299 -> NaN Invalid_operation -dqqua643 quantize sNaN 1e-1 -> NaN Invalid_operation -dqqua644 quantize sNaN 1e0 -> NaN Invalid_operation -dqqua645 quantize sNaN 1e1 -> NaN Invalid_operation -dqqua646 quantize sNaN 1e299 -> NaN Invalid_operation -dqqua647 quantize sNaN NaN -> NaN Invalid_operation -dqqua648 quantize sNaN sNaN -> NaN Invalid_operation -dqqua649 quantize NaN sNaN -> NaN Invalid_operation -dqqua650 quantize -Inf sNaN -> NaN Invalid_operation -dqqua651 quantize -1000 sNaN -> NaN Invalid_operation -dqqua652 quantize -1 sNaN -> NaN Invalid_operation -dqqua653 quantize 0 sNaN -> NaN Invalid_operation -dqqua654 quantize 1 sNaN -> NaN Invalid_operation -dqqua655 quantize 1000 sNaN -> NaN Invalid_operation -dqqua656 quantize Inf sNaN -> NaN Invalid_operation -dqqua657 quantize NaN sNaN -> NaN Invalid_operation -dqqua658 quantize sNaN 1e-0 -> NaN Invalid_operation -dqqua659 quantize -0 sNaN -> NaN Invalid_operation - --- propagating NaNs -dqqua661 quantize NaN9 -Inf -> NaN9 -dqqua662 quantize NaN8 919 -> NaN8 -dqqua663 quantize NaN71 Inf -> NaN71 -dqqua664 quantize NaN6 NaN5 -> NaN6 -dqqua665 quantize -Inf NaN4 -> NaN4 -dqqua666 quantize -919 NaN31 -> NaN31 -dqqua667 quantize Inf NaN2 -> NaN2 - -dqqua671 quantize sNaN99 -Inf -> NaN99 Invalid_operation -dqqua672 quantize sNaN98 -11 -> NaN98 Invalid_operation -dqqua673 quantize sNaN97 NaN -> NaN97 Invalid_operation -dqqua674 quantize sNaN16 sNaN94 -> NaN16 Invalid_operation -dqqua675 quantize NaN95 sNaN93 -> NaN93 Invalid_operation -dqqua676 quantize -Inf sNaN92 -> NaN92 Invalid_operation -dqqua677 quantize 088 sNaN91 -> NaN91 Invalid_operation -dqqua678 quantize Inf sNaN90 -> NaN90 Invalid_operation -dqqua679 quantize NaN sNaN88 -> NaN88 Invalid_operation - -dqqua681 quantize -NaN9 -Inf -> -NaN9 -dqqua682 quantize -NaN8 919 -> -NaN8 -dqqua683 quantize -NaN71 Inf -> -NaN71 -dqqua684 quantize -NaN6 -NaN5 -> -NaN6 -dqqua685 quantize -Inf -NaN4 -> -NaN4 -dqqua686 quantize -919 -NaN31 -> -NaN31 -dqqua687 quantize Inf -NaN2 -> -NaN2 - -dqqua691 quantize -sNaN99 -Inf -> -NaN99 Invalid_operation -dqqua692 quantize -sNaN98 -11 -> -NaN98 Invalid_operation -dqqua693 quantize -sNaN97 NaN -> -NaN97 Invalid_operation -dqqua694 quantize -sNaN16 sNaN94 -> -NaN16 Invalid_operation -dqqua695 quantize -NaN95 -sNaN93 -> -NaN93 Invalid_operation -dqqua696 quantize -Inf -sNaN92 -> -NaN92 Invalid_operation -dqqua697 quantize 088 -sNaN91 -> -NaN91 Invalid_operation -dqqua698 quantize Inf -sNaN90 -> -NaN90 Invalid_operation -dqqua699 quantize NaN -sNaN88 -> -NaN88 Invalid_operation - --- subnormals and underflow -dqqua710 quantize 1.00E-6143 1e-6143 -> 1E-6143 Rounded -dqqua711 quantize 0.1E-6143 2e-6144 -> 1E-6144 Subnormal -dqqua712 quantize 0.10E-6143 3e-6144 -> 1E-6144 Subnormal Rounded -dqqua713 quantize 0.100E-6143 4e-6144 -> 1E-6144 Subnormal Rounded -dqqua714 quantize 0.01E-6143 5e-6145 -> 1E-6145 Subnormal --- next is rounded to Emin -dqqua715 quantize 0.999E-6143 1e-6143 -> 1E-6143 Inexact Rounded -dqqua716 quantize 0.099E-6143 10e-6144 -> 1E-6144 Inexact Rounded Subnormal - -dqqua717 quantize 0.009E-6143 1e-6145 -> 1E-6145 Inexact Rounded Subnormal -dqqua718 quantize 0.001E-6143 1e-6145 -> 0E-6145 Inexact Rounded -dqqua719 quantize 0.0009E-6143 1e-6145 -> 0E-6145 Inexact Rounded -dqqua720 quantize 0.0001E-6143 1e-6145 -> 0E-6145 Inexact Rounded - -dqqua730 quantize -1.00E-6143 1e-6143 -> -1E-6143 Rounded -dqqua731 quantize -0.1E-6143 1e-6143 -> -0E-6143 Rounded Inexact -dqqua732 quantize -0.10E-6143 1e-6143 -> -0E-6143 Rounded Inexact -dqqua733 quantize -0.100E-6143 1e-6143 -> -0E-6143 Rounded Inexact -dqqua734 quantize -0.01E-6143 1e-6143 -> -0E-6143 Inexact Rounded --- next is rounded to Emin -dqqua735 quantize -0.999E-6143 90e-6143 -> -1E-6143 Inexact Rounded -dqqua736 quantize -0.099E-6143 -1e-6143 -> -0E-6143 Inexact Rounded -dqqua737 quantize -0.009E-6143 -1e-6143 -> -0E-6143 Inexact Rounded -dqqua738 quantize -0.001E-6143 -0e-6143 -> -0E-6143 Inexact Rounded -dqqua739 quantize -0.0001E-6143 0e-6143 -> -0E-6143 Inexact Rounded - -dqqua740 quantize -1.00E-6143 1e-6144 -> -1.0E-6143 Rounded -dqqua741 quantize -0.1E-6143 1e-6144 -> -1E-6144 Subnormal -dqqua742 quantize -0.10E-6143 1e-6144 -> -1E-6144 Subnormal Rounded -dqqua743 quantize -0.100E-6143 1e-6144 -> -1E-6144 Subnormal Rounded -dqqua744 quantize -0.01E-6143 1e-6144 -> -0E-6144 Inexact Rounded --- next is rounded to Emin -dqqua745 quantize -0.999E-6143 1e-6144 -> -1.0E-6143 Inexact Rounded -dqqua746 quantize -0.099E-6143 1e-6144 -> -1E-6144 Inexact Rounded Subnormal -dqqua747 quantize -0.009E-6143 1e-6144 -> -0E-6144 Inexact Rounded -dqqua748 quantize -0.001E-6143 1e-6144 -> -0E-6144 Inexact Rounded -dqqua749 quantize -0.0001E-6143 1e-6144 -> -0E-6144 Inexact Rounded - -dqqua750 quantize -1.00E-6143 1e-6145 -> -1.00E-6143 -dqqua751 quantize -0.1E-6143 1e-6145 -> -1.0E-6144 Subnormal -dqqua752 quantize -0.10E-6143 1e-6145 -> -1.0E-6144 Subnormal -dqqua753 quantize -0.100E-6143 1e-6145 -> -1.0E-6144 Subnormal Rounded -dqqua754 quantize -0.01E-6143 1e-6145 -> -1E-6145 Subnormal --- next is rounded to Emin -dqqua755 quantize -0.999E-6143 1e-6145 -> -1.00E-6143 Inexact Rounded -dqqua756 quantize -0.099E-6143 1e-6145 -> -1.0E-6144 Inexact Rounded Subnormal -dqqua757 quantize -0.009E-6143 1e-6145 -> -1E-6145 Inexact Rounded Subnormal -dqqua758 quantize -0.001E-6143 1e-6145 -> -0E-6145 Inexact Rounded -dqqua759 quantize -0.0001E-6143 1e-6145 -> -0E-6145 Inexact Rounded - -dqqua760 quantize -1.00E-6143 1e-6146 -> -1.000E-6143 -dqqua761 quantize -0.1E-6143 1e-6146 -> -1.00E-6144 Subnormal -dqqua762 quantize -0.10E-6143 1e-6146 -> -1.00E-6144 Subnormal -dqqua763 quantize -0.100E-6143 1e-6146 -> -1.00E-6144 Subnormal -dqqua764 quantize -0.01E-6143 1e-6146 -> -1.0E-6145 Subnormal -dqqua765 quantize -0.999E-6143 1e-6146 -> -9.99E-6144 Subnormal -dqqua766 quantize -0.099E-6143 1e-6146 -> -9.9E-6145 Subnormal -dqqua767 quantize -0.009E-6143 1e-6146 -> -9E-6146 Subnormal -dqqua768 quantize -0.001E-6143 1e-6146 -> -1E-6146 Subnormal -dqqua769 quantize -0.0001E-6143 1e-6146 -> -0E-6146 Inexact Rounded - --- More from Fung Lee --- the next four would appear to be in error, but they are misleading (the --- operands will be clamped to a lower exponent) and so are omitted --- dqqua1021 quantize 8.666666666666000E+6144 1.000000000000000E+6144 -> 8.666666666666000000000000000000000E+6144 Clamped --- dqqua1022 quantize -8.666666666666000E+6144 1.000000000000000E+6144 -> -8.666666666666000000000000000000000E+6144 Clamped --- dqqua1027 quantize 8.666666666666000E+323 1E+31 -> NaN Invalid_operation --- dqqua1030 quantize 8.66666666E+3 1E+3 -> 9E+3 Inexact Rounded - --- Int and uInt32 edge values for testing conversions -dqqua1040 quantize -2147483646 0 -> -2147483646 -dqqua1041 quantize -2147483647 0 -> -2147483647 -dqqua1042 quantize -2147483648 0 -> -2147483648 -dqqua1043 quantize -2147483649 0 -> -2147483649 -dqqua1044 quantize 2147483646 0 -> 2147483646 -dqqua1045 quantize 2147483647 0 -> 2147483647 -dqqua1046 quantize 2147483648 0 -> 2147483648 -dqqua1047 quantize 2147483649 0 -> 2147483649 -dqqua1048 quantize 4294967294 0 -> 4294967294 -dqqua1049 quantize 4294967295 0 -> 4294967295 -dqqua1050 quantize 4294967296 0 -> 4294967296 -dqqua1051 quantize 4294967297 0 -> 4294967297 - --- Rounding swathe -rounding: half_even -dqqua1100 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1101 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1102 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1103 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -dqqua1104 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1105 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua1106 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1107 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1108 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1109 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: half_up -dqqua1200 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1201 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1202 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1203 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -dqqua1204 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1205 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -dqqua1206 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1207 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1208 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1209 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: half_down -dqqua1300 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1301 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1302 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1303 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -dqqua1304 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1305 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua1306 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1307 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1308 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1309 quantize 1.2399 1.00 -> 1.24 Inexact Rounded - -rounding: up -dqqua1400 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1401 quantize 1.2301 1.00 -> 1.24 Inexact Rounded -dqqua1402 quantize 1.2310 1.00 -> 1.24 Inexact Rounded -dqqua1403 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -dqqua1404 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1405 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -dqqua1406 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1407 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1408 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1409 quantize 1.2399 1.00 -> 1.24 Inexact Rounded -dqqua1411 quantize -1.2399 1.00 -> -1.24 Inexact Rounded - -rounding: down -dqqua1500 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1501 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1502 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1503 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -dqqua1504 quantize 1.2351 1.00 -> 1.23 Inexact Rounded -dqqua1505 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua1506 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -dqqua1507 quantize 1.2360 1.00 -> 1.23 Inexact Rounded -dqqua1508 quantize 1.2370 1.00 -> 1.23 Inexact Rounded -dqqua1509 quantize 1.2399 1.00 -> 1.23 Inexact Rounded -dqqua1511 quantize -1.2399 1.00 -> -1.23 Inexact Rounded - -rounding: ceiling -dqqua1600 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1601 quantize 1.2301 1.00 -> 1.24 Inexact Rounded -dqqua1602 quantize 1.2310 1.00 -> 1.24 Inexact Rounded -dqqua1603 quantize 1.2350 1.00 -> 1.24 Inexact Rounded -dqqua1604 quantize 1.2351 1.00 -> 1.24 Inexact Rounded -dqqua1605 quantize 1.2450 1.00 -> 1.25 Inexact Rounded -dqqua1606 quantize 1.2451 1.00 -> 1.25 Inexact Rounded -dqqua1607 quantize 1.2360 1.00 -> 1.24 Inexact Rounded -dqqua1608 quantize 1.2370 1.00 -> 1.24 Inexact Rounded -dqqua1609 quantize 1.2399 1.00 -> 1.24 Inexact Rounded -dqqua1611 quantize -1.2399 1.00 -> -1.23 Inexact Rounded - -rounding: floor -dqqua1700 quantize 1.2300 1.00 -> 1.23 Rounded -dqqua1701 quantize 1.2301 1.00 -> 1.23 Inexact Rounded -dqqua1702 quantize 1.2310 1.00 -> 1.23 Inexact Rounded -dqqua1703 quantize 1.2350 1.00 -> 1.23 Inexact Rounded -dqqua1704 quantize 1.2351 1.00 -> 1.23 Inexact Rounded -dqqua1705 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua1706 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -dqqua1707 quantize 1.2360 1.00 -> 1.23 Inexact Rounded -dqqua1708 quantize 1.2370 1.00 -> 1.23 Inexact Rounded -dqqua1709 quantize 1.2399 1.00 -> 1.23 Inexact Rounded -dqqua1711 quantize -1.2399 1.00 -> -1.24 Inexact Rounded - -rounding: 05up -dqqua1800 quantize 1.2000 1.00 -> 1.20 Rounded -dqqua1801 quantize 1.2001 1.00 -> 1.21 Inexact Rounded -dqqua1802 quantize 1.2010 1.00 -> 1.21 Inexact Rounded -dqqua1803 quantize 1.2050 1.00 -> 1.21 Inexact Rounded -dqqua1804 quantize 1.2051 1.00 -> 1.21 Inexact Rounded -dqqua1807 quantize 1.2060 1.00 -> 1.21 Inexact Rounded -dqqua1808 quantize 1.2070 1.00 -> 1.21 Inexact Rounded -dqqua1809 quantize 1.2099 1.00 -> 1.21 Inexact Rounded -dqqua1811 quantize -1.2099 1.00 -> -1.21 Inexact Rounded - -dqqua1900 quantize 1.2100 1.00 -> 1.21 Rounded -dqqua1901 quantize 1.2101 1.00 -> 1.21 Inexact Rounded -dqqua1902 quantize 1.2110 1.00 -> 1.21 Inexact Rounded -dqqua1903 quantize 1.2150 1.00 -> 1.21 Inexact Rounded -dqqua1904 quantize 1.2151 1.00 -> 1.21 Inexact Rounded -dqqua1907 quantize 1.2160 1.00 -> 1.21 Inexact Rounded -dqqua1908 quantize 1.2170 1.00 -> 1.21 Inexact Rounded -dqqua1909 quantize 1.2199 1.00 -> 1.21 Inexact Rounded -dqqua1911 quantize -1.2199 1.00 -> -1.21 Inexact Rounded - -dqqua2000 quantize 1.2400 1.00 -> 1.24 Rounded -dqqua2001 quantize 1.2401 1.00 -> 1.24 Inexact Rounded -dqqua2002 quantize 1.2410 1.00 -> 1.24 Inexact Rounded -dqqua2003 quantize 1.2450 1.00 -> 1.24 Inexact Rounded -dqqua2004 quantize 1.2451 1.00 -> 1.24 Inexact Rounded -dqqua2007 quantize 1.2460 1.00 -> 1.24 Inexact Rounded -dqqua2008 quantize 1.2470 1.00 -> 1.24 Inexact Rounded -dqqua2009 quantize 1.2499 1.00 -> 1.24 Inexact Rounded -dqqua2011 quantize -1.2499 1.00 -> -1.24 Inexact Rounded - -dqqua2100 quantize 1.2500 1.00 -> 1.25 Rounded -dqqua2101 quantize 1.2501 1.00 -> 1.26 Inexact Rounded -dqqua2102 quantize 1.2510 1.00 -> 1.26 Inexact Rounded -dqqua2103 quantize 1.2550 1.00 -> 1.26 Inexact Rounded -dqqua2104 quantize 1.2551 1.00 -> 1.26 Inexact Rounded -dqqua2107 quantize 1.2560 1.00 -> 1.26 Inexact Rounded -dqqua2108 quantize 1.2570 1.00 -> 1.26 Inexact Rounded -dqqua2109 quantize 1.2599 1.00 -> 1.26 Inexact Rounded -dqqua2111 quantize -1.2599 1.00 -> -1.26 Inexact Rounded - -dqqua2200 quantize 1.2600 1.00 -> 1.26 Rounded -dqqua2201 quantize 1.2601 1.00 -> 1.26 Inexact Rounded -dqqua2202 quantize 1.2610 1.00 -> 1.26 Inexact Rounded -dqqua2203 quantize 1.2650 1.00 -> 1.26 Inexact Rounded -dqqua2204 quantize 1.2651 1.00 -> 1.26 Inexact Rounded -dqqua2207 quantize 1.2660 1.00 -> 1.26 Inexact Rounded -dqqua2208 quantize 1.2670 1.00 -> 1.26 Inexact Rounded -dqqua2209 quantize 1.2699 1.00 -> 1.26 Inexact Rounded -dqqua2211 quantize -1.2699 1.00 -> -1.26 Inexact Rounded - -dqqua2300 quantize 1.2900 1.00 -> 1.29 Rounded -dqqua2301 quantize 1.2901 1.00 -> 1.29 Inexact Rounded -dqqua2302 quantize 1.2910 1.00 -> 1.29 Inexact Rounded -dqqua2303 quantize 1.2950 1.00 -> 1.29 Inexact Rounded -dqqua2304 quantize 1.2951 1.00 -> 1.29 Inexact Rounded -dqqua2307 quantize 1.2960 1.00 -> 1.29 Inexact Rounded -dqqua2308 quantize 1.2970 1.00 -> 1.29 Inexact Rounded -dqqua2309 quantize 1.2999 1.00 -> 1.29 Inexact Rounded -dqqua2311 quantize -1.2999 1.00 -> -1.29 Inexact Rounded - --- Null tests -dqqua998 quantize 10 # -> NaN Invalid_operation -dqqua999 quantize # 1e10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqQuantize.decTest -- decQuad quantize operation -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Most of the tests here assume a "regular pattern", where the +-- sign and coefficient are +1. +-- 2004.03.15 Underflow for quantize is suppressed +-- 2005.06.08 More extensive tests for 'does not fit' +-- [Forked from quantize.decTest 2006.11.25] + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks +dqqua001 quantize 0 1e0 -> 0 +dqqua002 quantize 1 1e0 -> 1 +dqqua003 quantize 0.1 1e+2 -> 0E+2 Inexact Rounded +dqqua005 quantize 0.1 1e+1 -> 0E+1 Inexact Rounded +dqqua006 quantize 0.1 1e0 -> 0 Inexact Rounded +dqqua007 quantize 0.1 1e-1 -> 0.1 +dqqua008 quantize 0.1 1e-2 -> 0.10 +dqqua009 quantize 0.1 1e-3 -> 0.100 +dqqua010 quantize 0.9 1e+2 -> 0E+2 Inexact Rounded +dqqua011 quantize 0.9 1e+1 -> 0E+1 Inexact Rounded +dqqua012 quantize 0.9 1e+0 -> 1 Inexact Rounded +dqqua013 quantize 0.9 1e-1 -> 0.9 +dqqua014 quantize 0.9 1e-2 -> 0.90 +dqqua015 quantize 0.9 1e-3 -> 0.900 +-- negatives +dqqua021 quantize -0 1e0 -> -0 +dqqua022 quantize -1 1e0 -> -1 +dqqua023 quantize -0.1 1e+2 -> -0E+2 Inexact Rounded +dqqua025 quantize -0.1 1e+1 -> -0E+1 Inexact Rounded +dqqua026 quantize -0.1 1e0 -> -0 Inexact Rounded +dqqua027 quantize -0.1 1e-1 -> -0.1 +dqqua028 quantize -0.1 1e-2 -> -0.10 +dqqua029 quantize -0.1 1e-3 -> -0.100 +dqqua030 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded +dqqua031 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded +dqqua032 quantize -0.9 1e+0 -> -1 Inexact Rounded +dqqua033 quantize -0.9 1e-1 -> -0.9 +dqqua034 quantize -0.9 1e-2 -> -0.90 +dqqua035 quantize -0.9 1e-3 -> -0.900 +dqqua036 quantize -0.5 1e+2 -> -0E+2 Inexact Rounded +dqqua037 quantize -0.5 1e+1 -> -0E+1 Inexact Rounded +dqqua038 quantize -0.5 1e+0 -> -0 Inexact Rounded +dqqua039 quantize -0.5 1e-1 -> -0.5 +dqqua040 quantize -0.5 1e-2 -> -0.50 +dqqua041 quantize -0.5 1e-3 -> -0.500 +dqqua042 quantize -0.9 1e+2 -> -0E+2 Inexact Rounded +dqqua043 quantize -0.9 1e+1 -> -0E+1 Inexact Rounded +dqqua044 quantize -0.9 1e+0 -> -1 Inexact Rounded +dqqua045 quantize -0.9 1e-1 -> -0.9 +dqqua046 quantize -0.9 1e-2 -> -0.90 +dqqua047 quantize -0.9 1e-3 -> -0.900 + +-- examples from Specification +dqqua060 quantize 2.17 0.001 -> 2.170 +dqqua061 quantize 2.17 0.01 -> 2.17 +dqqua062 quantize 2.17 0.1 -> 2.2 Inexact Rounded +dqqua063 quantize 2.17 1e+0 -> 2 Inexact Rounded +dqqua064 quantize 2.17 1e+1 -> 0E+1 Inexact Rounded +dqqua065 quantize -Inf Inf -> -Infinity +dqqua066 quantize 2 Inf -> NaN Invalid_operation +dqqua067 quantize -0.1 1 -> -0 Inexact Rounded +dqqua068 quantize -0 1e+5 -> -0E+5 +dqqua069 quantize +123451234567899876543216789012345.6 1e-2 -> NaN Invalid_operation +dqqua070 quantize -987651234567899876543214335236450.6 1e-2 -> NaN Invalid_operation +dqqua071 quantize 217 1e-1 -> 217.0 +dqqua072 quantize 217 1e+0 -> 217 +dqqua073 quantize 217 1e+1 -> 2.2E+2 Inexact Rounded +dqqua074 quantize 217 1e+2 -> 2E+2 Inexact Rounded + +-- general tests .. +dqqua089 quantize 12 1e+4 -> 0E+4 Inexact Rounded +dqqua090 quantize 12 1e+3 -> 0E+3 Inexact Rounded +dqqua091 quantize 12 1e+2 -> 0E+2 Inexact Rounded +dqqua092 quantize 12 1e+1 -> 1E+1 Inexact Rounded +dqqua093 quantize 1.2345 1e-2 -> 1.23 Inexact Rounded +dqqua094 quantize 1.2355 1e-2 -> 1.24 Inexact Rounded +dqqua095 quantize 1.2345 1e-6 -> 1.234500 +dqqua096 quantize 9.9999 1e-2 -> 10.00 Inexact Rounded +dqqua097 quantize 0.0001 1e-2 -> 0.00 Inexact Rounded +dqqua098 quantize 0.001 1e-2 -> 0.00 Inexact Rounded +dqqua099 quantize 0.009 1e-2 -> 0.01 Inexact Rounded +dqqua100 quantize 92 1e+2 -> 1E+2 Inexact Rounded + +dqqua101 quantize -1 1e0 -> -1 +dqqua102 quantize -1 1e-1 -> -1.0 +dqqua103 quantize -1 1e-2 -> -1.00 +dqqua104 quantize 0 1e0 -> 0 +dqqua105 quantize 0 1e-1 -> 0.0 +dqqua106 quantize 0 1e-2 -> 0.00 +dqqua107 quantize 0.00 1e0 -> 0 +dqqua108 quantize 0 1e+1 -> 0E+1 +dqqua109 quantize 0 1e+2 -> 0E+2 +dqqua110 quantize +1 1e0 -> 1 +dqqua111 quantize +1 1e-1 -> 1.0 +dqqua112 quantize +1 1e-2 -> 1.00 + +dqqua120 quantize 1.04 1e-3 -> 1.040 +dqqua121 quantize 1.04 1e-2 -> 1.04 +dqqua122 quantize 1.04 1e-1 -> 1.0 Inexact Rounded +dqqua123 quantize 1.04 1e0 -> 1 Inexact Rounded +dqqua124 quantize 1.05 1e-3 -> 1.050 +dqqua125 quantize 1.05 1e-2 -> 1.05 +dqqua126 quantize 1.05 1e-1 -> 1.0 Inexact Rounded +dqqua131 quantize 1.05 1e0 -> 1 Inexact Rounded +dqqua132 quantize 1.06 1e-3 -> 1.060 +dqqua133 quantize 1.06 1e-2 -> 1.06 +dqqua134 quantize 1.06 1e-1 -> 1.1 Inexact Rounded +dqqua135 quantize 1.06 1e0 -> 1 Inexact Rounded + +dqqua140 quantize -10 1e-2 -> -10.00 +dqqua141 quantize +1 1e-2 -> 1.00 +dqqua142 quantize +10 1e-2 -> 10.00 +dqqua143 quantize 1E+37 1e-2 -> NaN Invalid_operation +dqqua144 quantize 1E-37 1e-2 -> 0.00 Inexact Rounded +dqqua145 quantize 1E-3 1e-2 -> 0.00 Inexact Rounded +dqqua146 quantize 1E-2 1e-2 -> 0.01 +dqqua147 quantize 1E-1 1e-2 -> 0.10 +dqqua148 quantize 0E-37 1e-2 -> 0.00 + +dqqua150 quantize 1.0600 1e-5 -> 1.06000 +dqqua151 quantize 1.0600 1e-4 -> 1.0600 +dqqua152 quantize 1.0600 1e-3 -> 1.060 Rounded +dqqua153 quantize 1.0600 1e-2 -> 1.06 Rounded +dqqua154 quantize 1.0600 1e-1 -> 1.1 Inexact Rounded +dqqua155 quantize 1.0600 1e0 -> 1 Inexact Rounded + +-- a couple where rounding was different in base tests +rounding: half_up +dqqua157 quantize -0.5 1e+0 -> -1 Inexact Rounded +dqqua158 quantize 1.05 1e-1 -> 1.1 Inexact Rounded +dqqua159 quantize 1.06 1e0 -> 1 Inexact Rounded +rounding: half_even + +-- base tests with non-1 coefficients +dqqua161 quantize 0 -9e0 -> 0 +dqqua162 quantize 1 -7e0 -> 1 +dqqua163 quantize 0.1 -1e+2 -> 0E+2 Inexact Rounded +dqqua165 quantize 0.1 0e+1 -> 0E+1 Inexact Rounded +dqqua166 quantize 0.1 2e0 -> 0 Inexact Rounded +dqqua167 quantize 0.1 3e-1 -> 0.1 +dqqua168 quantize 0.1 44e-2 -> 0.10 +dqqua169 quantize 0.1 555e-3 -> 0.100 +dqqua170 quantize 0.9 6666e+2 -> 0E+2 Inexact Rounded +dqqua171 quantize 0.9 -777e+1 -> 0E+1 Inexact Rounded +dqqua172 quantize 0.9 -88e+0 -> 1 Inexact Rounded +dqqua173 quantize 0.9 -9e-1 -> 0.9 +dqqua174 quantize 0.9 0e-2 -> 0.90 +dqqua175 quantize 0.9 1.1e-3 -> 0.9000 +-- negatives +dqqua181 quantize -0 1.1e0 -> -0.0 +dqqua182 quantize -1 -1e0 -> -1 +dqqua183 quantize -0.1 11e+2 -> -0E+2 Inexact Rounded +dqqua185 quantize -0.1 111e+1 -> -0E+1 Inexact Rounded +dqqua186 quantize -0.1 71e0 -> -0 Inexact Rounded +dqqua187 quantize -0.1 -91e-1 -> -0.1 +dqqua188 quantize -0.1 -.1e-2 -> -0.100 +dqqua189 quantize -0.1 -1e-3 -> -0.100 +dqqua190 quantize -0.9 0e+2 -> -0E+2 Inexact Rounded +dqqua191 quantize -0.9 -0e+1 -> -0E+1 Inexact Rounded +dqqua192 quantize -0.9 -10e+0 -> -1 Inexact Rounded +dqqua193 quantize -0.9 100e-1 -> -0.9 +dqqua194 quantize -0.9 999e-2 -> -0.90 + +-- +ve exponents .. +dqqua201 quantize -1 1e+0 -> -1 +dqqua202 quantize -1 1e+1 -> -0E+1 Inexact Rounded +dqqua203 quantize -1 1e+2 -> -0E+2 Inexact Rounded +dqqua204 quantize 0 1e+0 -> 0 +dqqua205 quantize 0 1e+1 -> 0E+1 +dqqua206 quantize 0 1e+2 -> 0E+2 +dqqua207 quantize +1 1e+0 -> 1 +dqqua208 quantize +1 1e+1 -> 0E+1 Inexact Rounded +dqqua209 quantize +1 1e+2 -> 0E+2 Inexact Rounded + +dqqua220 quantize 1.04 1e+3 -> 0E+3 Inexact Rounded +dqqua221 quantize 1.04 1e+2 -> 0E+2 Inexact Rounded +dqqua222 quantize 1.04 1e+1 -> 0E+1 Inexact Rounded +dqqua223 quantize 1.04 1e+0 -> 1 Inexact Rounded +dqqua224 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded +dqqua225 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded +dqqua226 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded +dqqua227 quantize 1.05 1e+0 -> 1 Inexact Rounded +dqqua228 quantize 1.05 1e+3 -> 0E+3 Inexact Rounded +dqqua229 quantize 1.05 1e+2 -> 0E+2 Inexact Rounded +dqqua230 quantize 1.05 1e+1 -> 0E+1 Inexact Rounded +dqqua231 quantize 1.05 1e+0 -> 1 Inexact Rounded +dqqua232 quantize 1.06 1e+3 -> 0E+3 Inexact Rounded +dqqua233 quantize 1.06 1e+2 -> 0E+2 Inexact Rounded +dqqua234 quantize 1.06 1e+1 -> 0E+1 Inexact Rounded +dqqua235 quantize 1.06 1e+0 -> 1 Inexact Rounded + +dqqua240 quantize -10 1e+1 -> -1E+1 Rounded +dqqua241 quantize +1 1e+1 -> 0E+1 Inexact Rounded +dqqua242 quantize +10 1e+1 -> 1E+1 Rounded +dqqua243 quantize 1E+1 1e+1 -> 1E+1 -- underneath this is E+1 +dqqua244 quantize 1E+2 1e+1 -> 1.0E+2 -- underneath this is E+1 +dqqua245 quantize 1E+3 1e+1 -> 1.00E+3 -- underneath this is E+1 +dqqua246 quantize 1E+4 1e+1 -> 1.000E+4 -- underneath this is E+1 +dqqua247 quantize 1E+5 1e+1 -> 1.0000E+5 -- underneath this is E+1 +dqqua248 quantize 1E+6 1e+1 -> 1.00000E+6 -- underneath this is E+1 +dqqua249 quantize 1E+7 1e+1 -> 1.000000E+7 -- underneath this is E+1 +dqqua250 quantize 1E+8 1e+1 -> 1.0000000E+8 -- underneath this is E+1 +dqqua251 quantize 1E+9 1e+1 -> 1.00000000E+9 -- underneath this is E+1 +-- next one tries to add 9 zeros +dqqua252 quantize 1E+37 1e+1 -> NaN Invalid_operation +dqqua253 quantize 1E-37 1e+1 -> 0E+1 Inexact Rounded +dqqua254 quantize 1E-2 1e+1 -> 0E+1 Inexact Rounded +dqqua255 quantize 0E-37 1e+1 -> 0E+1 +dqqua256 quantize -0E-37 1e+1 -> -0E+1 +dqqua257 quantize -0E-1 1e+1 -> -0E+1 +dqqua258 quantize -0 1e+1 -> -0E+1 +dqqua259 quantize -0E+1 1e+1 -> -0E+1 + +dqqua260 quantize -10 1e+2 -> -0E+2 Inexact Rounded +dqqua261 quantize +1 1e+2 -> 0E+2 Inexact Rounded +dqqua262 quantize +10 1e+2 -> 0E+2 Inexact Rounded +dqqua263 quantize 1E+1 1e+2 -> 0E+2 Inexact Rounded +dqqua264 quantize 1E+2 1e+2 -> 1E+2 +dqqua265 quantize 1E+3 1e+2 -> 1.0E+3 +dqqua266 quantize 1E+4 1e+2 -> 1.00E+4 +dqqua267 quantize 1E+5 1e+2 -> 1.000E+5 +dqqua268 quantize 1E+6 1e+2 -> 1.0000E+6 +dqqua269 quantize 1E+7 1e+2 -> 1.00000E+7 +dqqua270 quantize 1E+8 1e+2 -> 1.000000E+8 +dqqua271 quantize 1E+9 1e+2 -> 1.0000000E+9 +dqqua272 quantize 1E+10 1e+2 -> 1.00000000E+10 +dqqua273 quantize 1E-10 1e+2 -> 0E+2 Inexact Rounded +dqqua274 quantize 1E-2 1e+2 -> 0E+2 Inexact Rounded +dqqua275 quantize 0E-10 1e+2 -> 0E+2 + +dqqua280 quantize -10 1e+3 -> -0E+3 Inexact Rounded +dqqua281 quantize +1 1e+3 -> 0E+3 Inexact Rounded +dqqua282 quantize +10 1e+3 -> 0E+3 Inexact Rounded +dqqua283 quantize 1E+1 1e+3 -> 0E+3 Inexact Rounded +dqqua284 quantize 1E+2 1e+3 -> 0E+3 Inexact Rounded +dqqua285 quantize 1E+3 1e+3 -> 1E+3 +dqqua286 quantize 1E+4 1e+3 -> 1.0E+4 +dqqua287 quantize 1E+5 1e+3 -> 1.00E+5 +dqqua288 quantize 1E+6 1e+3 -> 1.000E+6 +dqqua289 quantize 1E+7 1e+3 -> 1.0000E+7 +dqqua290 quantize 1E+8 1e+3 -> 1.00000E+8 +dqqua291 quantize 1E+9 1e+3 -> 1.000000E+9 +dqqua292 quantize 1E+10 1e+3 -> 1.0000000E+10 +dqqua293 quantize 1E-10 1e+3 -> 0E+3 Inexact Rounded +dqqua294 quantize 1E-2 1e+3 -> 0E+3 Inexact Rounded +dqqua295 quantize 0E-10 1e+3 -> 0E+3 + +-- round up from below [sign wrong in JIT compiler once] +dqqua300 quantize 0.0078 1e-5 -> 0.00780 +dqqua301 quantize 0.0078 1e-4 -> 0.0078 +dqqua302 quantize 0.0078 1e-3 -> 0.008 Inexact Rounded +dqqua303 quantize 0.0078 1e-2 -> 0.01 Inexact Rounded +dqqua304 quantize 0.0078 1e-1 -> 0.0 Inexact Rounded +dqqua305 quantize 0.0078 1e0 -> 0 Inexact Rounded +dqqua306 quantize 0.0078 1e+1 -> 0E+1 Inexact Rounded +dqqua307 quantize 0.0078 1e+2 -> 0E+2 Inexact Rounded + +dqqua310 quantize -0.0078 1e-5 -> -0.00780 +dqqua311 quantize -0.0078 1e-4 -> -0.0078 +dqqua312 quantize -0.0078 1e-3 -> -0.008 Inexact Rounded +dqqua313 quantize -0.0078 1e-2 -> -0.01 Inexact Rounded +dqqua314 quantize -0.0078 1e-1 -> -0.0 Inexact Rounded +dqqua315 quantize -0.0078 1e0 -> -0 Inexact Rounded +dqqua316 quantize -0.0078 1e+1 -> -0E+1 Inexact Rounded +dqqua317 quantize -0.0078 1e+2 -> -0E+2 Inexact Rounded + +dqqua320 quantize 0.078 1e-5 -> 0.07800 +dqqua321 quantize 0.078 1e-4 -> 0.0780 +dqqua322 quantize 0.078 1e-3 -> 0.078 +dqqua323 quantize 0.078 1e-2 -> 0.08 Inexact Rounded +dqqua324 quantize 0.078 1e-1 -> 0.1 Inexact Rounded +dqqua325 quantize 0.078 1e0 -> 0 Inexact Rounded +dqqua326 quantize 0.078 1e+1 -> 0E+1 Inexact Rounded +dqqua327 quantize 0.078 1e+2 -> 0E+2 Inexact Rounded + +dqqua330 quantize -0.078 1e-5 -> -0.07800 +dqqua331 quantize -0.078 1e-4 -> -0.0780 +dqqua332 quantize -0.078 1e-3 -> -0.078 +dqqua333 quantize -0.078 1e-2 -> -0.08 Inexact Rounded +dqqua334 quantize -0.078 1e-1 -> -0.1 Inexact Rounded +dqqua335 quantize -0.078 1e0 -> -0 Inexact Rounded +dqqua336 quantize -0.078 1e+1 -> -0E+1 Inexact Rounded +dqqua337 quantize -0.078 1e+2 -> -0E+2 Inexact Rounded + +dqqua340 quantize 0.78 1e-5 -> 0.78000 +dqqua341 quantize 0.78 1e-4 -> 0.7800 +dqqua342 quantize 0.78 1e-3 -> 0.780 +dqqua343 quantize 0.78 1e-2 -> 0.78 +dqqua344 quantize 0.78 1e-1 -> 0.8 Inexact Rounded +dqqua345 quantize 0.78 1e0 -> 1 Inexact Rounded +dqqua346 quantize 0.78 1e+1 -> 0E+1 Inexact Rounded +dqqua347 quantize 0.78 1e+2 -> 0E+2 Inexact Rounded + +dqqua350 quantize -0.78 1e-5 -> -0.78000 +dqqua351 quantize -0.78 1e-4 -> -0.7800 +dqqua352 quantize -0.78 1e-3 -> -0.780 +dqqua353 quantize -0.78 1e-2 -> -0.78 +dqqua354 quantize -0.78 1e-1 -> -0.8 Inexact Rounded +dqqua355 quantize -0.78 1e0 -> -1 Inexact Rounded +dqqua356 quantize -0.78 1e+1 -> -0E+1 Inexact Rounded +dqqua357 quantize -0.78 1e+2 -> -0E+2 Inexact Rounded + +dqqua360 quantize 7.8 1e-5 -> 7.80000 +dqqua361 quantize 7.8 1e-4 -> 7.8000 +dqqua362 quantize 7.8 1e-3 -> 7.800 +dqqua363 quantize 7.8 1e-2 -> 7.80 +dqqua364 quantize 7.8 1e-1 -> 7.8 +dqqua365 quantize 7.8 1e0 -> 8 Inexact Rounded +dqqua366 quantize 7.8 1e+1 -> 1E+1 Inexact Rounded +dqqua367 quantize 7.8 1e+2 -> 0E+2 Inexact Rounded +dqqua368 quantize 7.8 1e+3 -> 0E+3 Inexact Rounded + +dqqua370 quantize -7.8 1e-5 -> -7.80000 +dqqua371 quantize -7.8 1e-4 -> -7.8000 +dqqua372 quantize -7.8 1e-3 -> -7.800 +dqqua373 quantize -7.8 1e-2 -> -7.80 +dqqua374 quantize -7.8 1e-1 -> -7.8 +dqqua375 quantize -7.8 1e0 -> -8 Inexact Rounded +dqqua376 quantize -7.8 1e+1 -> -1E+1 Inexact Rounded +dqqua377 quantize -7.8 1e+2 -> -0E+2 Inexact Rounded +dqqua378 quantize -7.8 1e+3 -> -0E+3 Inexact Rounded + +-- some individuals +dqqua380 quantize 1122334455667788991234567352364.506 1e-2 -> 1122334455667788991234567352364.51 Inexact Rounded +dqqua381 quantize 11223344556677889912345673523645.06 1e-2 -> 11223344556677889912345673523645.06 +dqqua382 quantize 112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation +dqqua383 quantize 1122334455667788991234567352364506 1e-2 -> NaN Invalid_operation +dqqua384 quantize -1122334455667788991234567352364.506 1e-2 -> -1122334455667788991234567352364.51 Inexact Rounded +dqqua385 quantize -11223344556677889912345673523645.06 1e-2 -> -11223344556677889912345673523645.06 +dqqua386 quantize -112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation +dqqua387 quantize -1122334455667788991234567352364506 1e-2 -> NaN Invalid_operation + +rounding: down +dqqua389 quantize 112233445566778899123456735236450.6 1e-2 -> NaN Invalid_operation +rounding: half_up + +-- and a few more from e-mail discussions +dqqua391 quantize 11223344556677889912345678912.34567 1e-3 -> 11223344556677889912345678912.346 Inexact Rounded +dqqua392 quantize 112233445566778899123456789123.4567 1e-3 -> 112233445566778899123456789123.457 Inexact Rounded +dqqua393 quantize 1122334455667788991234567891234567. 1e-3 -> NaN Invalid_operation + +-- some 9999 round-up cases +dqqua400 quantize 9.999 1e-5 -> 9.99900 +dqqua401 quantize 9.999 1e-4 -> 9.9990 +dqqua402 quantize 9.999 1e-3 -> 9.999 +dqqua403 quantize 9.999 1e-2 -> 10.00 Inexact Rounded +dqqua404 quantize 9.999 1e-1 -> 10.0 Inexact Rounded +dqqua405 quantize 9.999 1e0 -> 10 Inexact Rounded +dqqua406 quantize 9.999 1e1 -> 1E+1 Inexact Rounded +dqqua407 quantize 9.999 1e2 -> 0E+2 Inexact Rounded + +dqqua410 quantize 0.999 1e-5 -> 0.99900 +dqqua411 quantize 0.999 1e-4 -> 0.9990 +dqqua412 quantize 0.999 1e-3 -> 0.999 +dqqua413 quantize 0.999 1e-2 -> 1.00 Inexact Rounded +dqqua414 quantize 0.999 1e-1 -> 1.0 Inexact Rounded +dqqua415 quantize 0.999 1e0 -> 1 Inexact Rounded +dqqua416 quantize 0.999 1e1 -> 0E+1 Inexact Rounded + +dqqua420 quantize 0.0999 1e-5 -> 0.09990 +dqqua421 quantize 0.0999 1e-4 -> 0.0999 +dqqua422 quantize 0.0999 1e-3 -> 0.100 Inexact Rounded +dqqua423 quantize 0.0999 1e-2 -> 0.10 Inexact Rounded +dqqua424 quantize 0.0999 1e-1 -> 0.1 Inexact Rounded +dqqua425 quantize 0.0999 1e0 -> 0 Inexact Rounded +dqqua426 quantize 0.0999 1e1 -> 0E+1 Inexact Rounded + +dqqua430 quantize 0.00999 1e-5 -> 0.00999 +dqqua431 quantize 0.00999 1e-4 -> 0.0100 Inexact Rounded +dqqua432 quantize 0.00999 1e-3 -> 0.010 Inexact Rounded +dqqua433 quantize 0.00999 1e-2 -> 0.01 Inexact Rounded +dqqua434 quantize 0.00999 1e-1 -> 0.0 Inexact Rounded +dqqua435 quantize 0.00999 1e0 -> 0 Inexact Rounded +dqqua436 quantize 0.00999 1e1 -> 0E+1 Inexact Rounded + +dqqua440 quantize 0.000999 1e-5 -> 0.00100 Inexact Rounded +dqqua441 quantize 0.000999 1e-4 -> 0.0010 Inexact Rounded +dqqua442 quantize 0.000999 1e-3 -> 0.001 Inexact Rounded +dqqua443 quantize 0.000999 1e-2 -> 0.00 Inexact Rounded +dqqua444 quantize 0.000999 1e-1 -> 0.0 Inexact Rounded +dqqua445 quantize 0.000999 1e0 -> 0 Inexact Rounded +dqqua446 quantize 0.000999 1e1 -> 0E+1 Inexact Rounded + +dqqua1001 quantize 0.000 0.001 -> 0.000 +dqqua1002 quantize 0.001 0.001 -> 0.001 +dqqua1003 quantize 0.0012 0.001 -> 0.001 Inexact Rounded +dqqua1004 quantize 0.0018 0.001 -> 0.002 Inexact Rounded +dqqua1005 quantize 0.501 0.001 -> 0.501 +dqqua1006 quantize 0.5012 0.001 -> 0.501 Inexact Rounded +dqqua1007 quantize 0.5018 0.001 -> 0.502 Inexact Rounded +dqqua1008 quantize 0.999 0.001 -> 0.999 + +dqqua481 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded +dqqua482 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded +dqqua483 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded +dqqua484 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded +dqqua485 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded +dqqua486 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded +-- a potential double-round +dqqua487 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded +dqqua488 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded + +dqqua491 quantize 12345678000 1e+3 -> 1.2345678E+10 Rounded +dqqua492 quantize 1234567800 1e+1 -> 1.23456780E+9 Rounded +dqqua493 quantize 1234567890 1e+1 -> 1.23456789E+9 Rounded +dqqua494 quantize 1234567891 1e+1 -> 1.23456789E+9 Inexact Rounded +dqqua495 quantize 12345678901 1e+2 -> 1.23456789E+10 Inexact Rounded +dqqua496 quantize 1234567896 1e+1 -> 1.23456790E+9 Inexact Rounded +dqqua497 quantize 1234.987643 1e-4 -> 1234.9876 Inexact Rounded +dqqua498 quantize 1234.987647 1e-4 -> 1234.9876 Inexact Rounded + +-- Zeros +dqqua500 quantize 0 1e1 -> 0E+1 +dqqua501 quantize 0 1e0 -> 0 +dqqua502 quantize 0 1e-1 -> 0.0 +dqqua503 quantize 0.0 1e-1 -> 0.0 +dqqua504 quantize 0.0 1e0 -> 0 +dqqua505 quantize 0.0 1e+1 -> 0E+1 +dqqua506 quantize 0E+1 1e-1 -> 0.0 +dqqua507 quantize 0E+1 1e0 -> 0 +dqqua508 quantize 0E+1 1e+1 -> 0E+1 +dqqua509 quantize -0 1e1 -> -0E+1 +dqqua510 quantize -0 1e0 -> -0 +dqqua511 quantize -0 1e-1 -> -0.0 +dqqua512 quantize -0.0 1e-1 -> -0.0 +dqqua513 quantize -0.0 1e0 -> -0 +dqqua514 quantize -0.0 1e+1 -> -0E+1 +dqqua515 quantize -0E+1 1e-1 -> -0.0 +dqqua516 quantize -0E+1 1e0 -> -0 +dqqua517 quantize -0E+1 1e+1 -> -0E+1 +-- #519 here once a problem +dqqua518 quantize 0 0E-3 -> 0.000 +dqqua519 quantize 0 0E-33 -> 0E-33 +dqqua520 quantize 0.00000000000000000000000000000000 0E-33 -> 0E-33 +dqqua521 quantize 0.000000000000000000000000000000000 0E-33 -> 0E-33 + +-- Some non-zeros with lots of padding on the right +dqqua523 quantize 1 0E-33 -> 1.000000000000000000000000000000000 +dqqua524 quantize 12 0E-32 -> 12.00000000000000000000000000000000 +dqqua525 quantize 123 0E-31 -> 123.0000000000000000000000000000000 +dqqua526 quantize 123 0E-32 -> NaN Invalid_operation +dqqua527 quantize 123.4 0E-31 -> 123.4000000000000000000000000000000 +dqqua528 quantize 123.4 0E-32 -> NaN Invalid_operation + +-- Suspicious RHS values +dqqua530 quantize 1.234 1e359 -> 0E+359 Inexact Rounded +dqqua531 quantize 123.456 1e359 -> 0E+359 Inexact Rounded +dqqua532 quantize 1.234 1e359 -> 0E+359 Inexact Rounded +dqqua533 quantize 123.456 1e359 -> 0E+359 Inexact Rounded +-- next four are "won't fit" overflows +dqqua536 quantize 1.234 1e-299 -> NaN Invalid_operation +dqqua537 quantize 123.456 1e-299 -> NaN Invalid_operation +dqqua538 quantize 1.234 1e-299 -> NaN Invalid_operation +dqqua539 quantize 123.456 1e-299 -> NaN Invalid_operation + +dqqua542 quantize 1.234E+299 1e299 -> 1E+299 Inexact Rounded +dqqua543 quantize 1.234E+298 1e299 -> 0E+299 Inexact Rounded +dqqua544 quantize 1.234 1e299 -> 0E+299 Inexact Rounded +dqqua547 quantize 0 1e-299 -> 0E-299 +-- next two are "won't fit" overflows +dqqua548 quantize 1.234 1e-299 -> NaN Invalid_operation +dqqua549 quantize 1.234 1e-300 -> NaN Invalid_operation +-- [more below] + +-- Specials +dqqua580 quantize Inf -Inf -> Infinity +dqqua581 quantize Inf 1e-299 -> NaN Invalid_operation +dqqua582 quantize Inf 1e-1 -> NaN Invalid_operation +dqqua583 quantize Inf 1e0 -> NaN Invalid_operation +dqqua584 quantize Inf 1e1 -> NaN Invalid_operation +dqqua585 quantize Inf 1e299 -> NaN Invalid_operation +dqqua586 quantize Inf Inf -> Infinity +dqqua587 quantize -1000 Inf -> NaN Invalid_operation +dqqua588 quantize -Inf Inf -> -Infinity +dqqua589 quantize -1 Inf -> NaN Invalid_operation +dqqua590 quantize 0 Inf -> NaN Invalid_operation +dqqua591 quantize 1 Inf -> NaN Invalid_operation +dqqua592 quantize 1000 Inf -> NaN Invalid_operation +dqqua593 quantize Inf Inf -> Infinity +dqqua594 quantize Inf 1e-0 -> NaN Invalid_operation +dqqua595 quantize -0 Inf -> NaN Invalid_operation + +dqqua600 quantize -Inf -Inf -> -Infinity +dqqua601 quantize -Inf 1e-299 -> NaN Invalid_operation +dqqua602 quantize -Inf 1e-1 -> NaN Invalid_operation +dqqua603 quantize -Inf 1e0 -> NaN Invalid_operation +dqqua604 quantize -Inf 1e1 -> NaN Invalid_operation +dqqua605 quantize -Inf 1e299 -> NaN Invalid_operation +dqqua606 quantize -Inf Inf -> -Infinity +dqqua607 quantize -1000 Inf -> NaN Invalid_operation +dqqua608 quantize -Inf -Inf -> -Infinity +dqqua609 quantize -1 -Inf -> NaN Invalid_operation +dqqua610 quantize 0 -Inf -> NaN Invalid_operation +dqqua611 quantize 1 -Inf -> NaN Invalid_operation +dqqua612 quantize 1000 -Inf -> NaN Invalid_operation +dqqua613 quantize Inf -Inf -> Infinity +dqqua614 quantize -Inf 1e-0 -> NaN Invalid_operation +dqqua615 quantize -0 -Inf -> NaN Invalid_operation + +dqqua621 quantize NaN -Inf -> NaN +dqqua622 quantize NaN 1e-299 -> NaN +dqqua623 quantize NaN 1e-1 -> NaN +dqqua624 quantize NaN 1e0 -> NaN +dqqua625 quantize NaN 1e1 -> NaN +dqqua626 quantize NaN 1e299 -> NaN +dqqua627 quantize NaN Inf -> NaN +dqqua628 quantize NaN NaN -> NaN +dqqua629 quantize -Inf NaN -> NaN +dqqua630 quantize -1000 NaN -> NaN +dqqua631 quantize -1 NaN -> NaN +dqqua632 quantize 0 NaN -> NaN +dqqua633 quantize 1 NaN -> NaN +dqqua634 quantize 1000 NaN -> NaN +dqqua635 quantize Inf NaN -> NaN +dqqua636 quantize NaN 1e-0 -> NaN +dqqua637 quantize -0 NaN -> NaN + +dqqua641 quantize sNaN -Inf -> NaN Invalid_operation +dqqua642 quantize sNaN 1e-299 -> NaN Invalid_operation +dqqua643 quantize sNaN 1e-1 -> NaN Invalid_operation +dqqua644 quantize sNaN 1e0 -> NaN Invalid_operation +dqqua645 quantize sNaN 1e1 -> NaN Invalid_operation +dqqua646 quantize sNaN 1e299 -> NaN Invalid_operation +dqqua647 quantize sNaN NaN -> NaN Invalid_operation +dqqua648 quantize sNaN sNaN -> NaN Invalid_operation +dqqua649 quantize NaN sNaN -> NaN Invalid_operation +dqqua650 quantize -Inf sNaN -> NaN Invalid_operation +dqqua651 quantize -1000 sNaN -> NaN Invalid_operation +dqqua652 quantize -1 sNaN -> NaN Invalid_operation +dqqua653 quantize 0 sNaN -> NaN Invalid_operation +dqqua654 quantize 1 sNaN -> NaN Invalid_operation +dqqua655 quantize 1000 sNaN -> NaN Invalid_operation +dqqua656 quantize Inf sNaN -> NaN Invalid_operation +dqqua657 quantize NaN sNaN -> NaN Invalid_operation +dqqua658 quantize sNaN 1e-0 -> NaN Invalid_operation +dqqua659 quantize -0 sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqqua661 quantize NaN9 -Inf -> NaN9 +dqqua662 quantize NaN8 919 -> NaN8 +dqqua663 quantize NaN71 Inf -> NaN71 +dqqua664 quantize NaN6 NaN5 -> NaN6 +dqqua665 quantize -Inf NaN4 -> NaN4 +dqqua666 quantize -919 NaN31 -> NaN31 +dqqua667 quantize Inf NaN2 -> NaN2 + +dqqua671 quantize sNaN99 -Inf -> NaN99 Invalid_operation +dqqua672 quantize sNaN98 -11 -> NaN98 Invalid_operation +dqqua673 quantize sNaN97 NaN -> NaN97 Invalid_operation +dqqua674 quantize sNaN16 sNaN94 -> NaN16 Invalid_operation +dqqua675 quantize NaN95 sNaN93 -> NaN93 Invalid_operation +dqqua676 quantize -Inf sNaN92 -> NaN92 Invalid_operation +dqqua677 quantize 088 sNaN91 -> NaN91 Invalid_operation +dqqua678 quantize Inf sNaN90 -> NaN90 Invalid_operation +dqqua679 quantize NaN sNaN88 -> NaN88 Invalid_operation + +dqqua681 quantize -NaN9 -Inf -> -NaN9 +dqqua682 quantize -NaN8 919 -> -NaN8 +dqqua683 quantize -NaN71 Inf -> -NaN71 +dqqua684 quantize -NaN6 -NaN5 -> -NaN6 +dqqua685 quantize -Inf -NaN4 -> -NaN4 +dqqua686 quantize -919 -NaN31 -> -NaN31 +dqqua687 quantize Inf -NaN2 -> -NaN2 + +dqqua691 quantize -sNaN99 -Inf -> -NaN99 Invalid_operation +dqqua692 quantize -sNaN98 -11 -> -NaN98 Invalid_operation +dqqua693 quantize -sNaN97 NaN -> -NaN97 Invalid_operation +dqqua694 quantize -sNaN16 sNaN94 -> -NaN16 Invalid_operation +dqqua695 quantize -NaN95 -sNaN93 -> -NaN93 Invalid_operation +dqqua696 quantize -Inf -sNaN92 -> -NaN92 Invalid_operation +dqqua697 quantize 088 -sNaN91 -> -NaN91 Invalid_operation +dqqua698 quantize Inf -sNaN90 -> -NaN90 Invalid_operation +dqqua699 quantize NaN -sNaN88 -> -NaN88 Invalid_operation + +-- subnormals and underflow +dqqua710 quantize 1.00E-6143 1e-6143 -> 1E-6143 Rounded +dqqua711 quantize 0.1E-6143 2e-6144 -> 1E-6144 Subnormal +dqqua712 quantize 0.10E-6143 3e-6144 -> 1E-6144 Subnormal Rounded +dqqua713 quantize 0.100E-6143 4e-6144 -> 1E-6144 Subnormal Rounded +dqqua714 quantize 0.01E-6143 5e-6145 -> 1E-6145 Subnormal +-- next is rounded to Emin +dqqua715 quantize 0.999E-6143 1e-6143 -> 1E-6143 Inexact Rounded +dqqua716 quantize 0.099E-6143 10e-6144 -> 1E-6144 Inexact Rounded Subnormal + +dqqua717 quantize 0.009E-6143 1e-6145 -> 1E-6145 Inexact Rounded Subnormal +dqqua718 quantize 0.001E-6143 1e-6145 -> 0E-6145 Inexact Rounded +dqqua719 quantize 0.0009E-6143 1e-6145 -> 0E-6145 Inexact Rounded +dqqua720 quantize 0.0001E-6143 1e-6145 -> 0E-6145 Inexact Rounded + +dqqua730 quantize -1.00E-6143 1e-6143 -> -1E-6143 Rounded +dqqua731 quantize -0.1E-6143 1e-6143 -> -0E-6143 Rounded Inexact +dqqua732 quantize -0.10E-6143 1e-6143 -> -0E-6143 Rounded Inexact +dqqua733 quantize -0.100E-6143 1e-6143 -> -0E-6143 Rounded Inexact +dqqua734 quantize -0.01E-6143 1e-6143 -> -0E-6143 Inexact Rounded +-- next is rounded to Emin +dqqua735 quantize -0.999E-6143 90e-6143 -> -1E-6143 Inexact Rounded +dqqua736 quantize -0.099E-6143 -1e-6143 -> -0E-6143 Inexact Rounded +dqqua737 quantize -0.009E-6143 -1e-6143 -> -0E-6143 Inexact Rounded +dqqua738 quantize -0.001E-6143 -0e-6143 -> -0E-6143 Inexact Rounded +dqqua739 quantize -0.0001E-6143 0e-6143 -> -0E-6143 Inexact Rounded + +dqqua740 quantize -1.00E-6143 1e-6144 -> -1.0E-6143 Rounded +dqqua741 quantize -0.1E-6143 1e-6144 -> -1E-6144 Subnormal +dqqua742 quantize -0.10E-6143 1e-6144 -> -1E-6144 Subnormal Rounded +dqqua743 quantize -0.100E-6143 1e-6144 -> -1E-6144 Subnormal Rounded +dqqua744 quantize -0.01E-6143 1e-6144 -> -0E-6144 Inexact Rounded +-- next is rounded to Emin +dqqua745 quantize -0.999E-6143 1e-6144 -> -1.0E-6143 Inexact Rounded +dqqua746 quantize -0.099E-6143 1e-6144 -> -1E-6144 Inexact Rounded Subnormal +dqqua747 quantize -0.009E-6143 1e-6144 -> -0E-6144 Inexact Rounded +dqqua748 quantize -0.001E-6143 1e-6144 -> -0E-6144 Inexact Rounded +dqqua749 quantize -0.0001E-6143 1e-6144 -> -0E-6144 Inexact Rounded + +dqqua750 quantize -1.00E-6143 1e-6145 -> -1.00E-6143 +dqqua751 quantize -0.1E-6143 1e-6145 -> -1.0E-6144 Subnormal +dqqua752 quantize -0.10E-6143 1e-6145 -> -1.0E-6144 Subnormal +dqqua753 quantize -0.100E-6143 1e-6145 -> -1.0E-6144 Subnormal Rounded +dqqua754 quantize -0.01E-6143 1e-6145 -> -1E-6145 Subnormal +-- next is rounded to Emin +dqqua755 quantize -0.999E-6143 1e-6145 -> -1.00E-6143 Inexact Rounded +dqqua756 quantize -0.099E-6143 1e-6145 -> -1.0E-6144 Inexact Rounded Subnormal +dqqua757 quantize -0.009E-6143 1e-6145 -> -1E-6145 Inexact Rounded Subnormal +dqqua758 quantize -0.001E-6143 1e-6145 -> -0E-6145 Inexact Rounded +dqqua759 quantize -0.0001E-6143 1e-6145 -> -0E-6145 Inexact Rounded + +dqqua760 quantize -1.00E-6143 1e-6146 -> -1.000E-6143 +dqqua761 quantize -0.1E-6143 1e-6146 -> -1.00E-6144 Subnormal +dqqua762 quantize -0.10E-6143 1e-6146 -> -1.00E-6144 Subnormal +dqqua763 quantize -0.100E-6143 1e-6146 -> -1.00E-6144 Subnormal +dqqua764 quantize -0.01E-6143 1e-6146 -> -1.0E-6145 Subnormal +dqqua765 quantize -0.999E-6143 1e-6146 -> -9.99E-6144 Subnormal +dqqua766 quantize -0.099E-6143 1e-6146 -> -9.9E-6145 Subnormal +dqqua767 quantize -0.009E-6143 1e-6146 -> -9E-6146 Subnormal +dqqua768 quantize -0.001E-6143 1e-6146 -> -1E-6146 Subnormal +dqqua769 quantize -0.0001E-6143 1e-6146 -> -0E-6146 Inexact Rounded + +-- More from Fung Lee +-- the next four would appear to be in error, but they are misleading (the +-- operands will be clamped to a lower exponent) and so are omitted +-- dqqua1021 quantize 8.666666666666000E+6144 1.000000000000000E+6144 -> 8.666666666666000000000000000000000E+6144 Clamped +-- dqqua1022 quantize -8.666666666666000E+6144 1.000000000000000E+6144 -> -8.666666666666000000000000000000000E+6144 Clamped +-- dqqua1027 quantize 8.666666666666000E+323 1E+31 -> NaN Invalid_operation +-- dqqua1030 quantize 8.66666666E+3 1E+3 -> 9E+3 Inexact Rounded + +-- Int and uInt32 edge values for testing conversions +dqqua1040 quantize -2147483646 0 -> -2147483646 +dqqua1041 quantize -2147483647 0 -> -2147483647 +dqqua1042 quantize -2147483648 0 -> -2147483648 +dqqua1043 quantize -2147483649 0 -> -2147483649 +dqqua1044 quantize 2147483646 0 -> 2147483646 +dqqua1045 quantize 2147483647 0 -> 2147483647 +dqqua1046 quantize 2147483648 0 -> 2147483648 +dqqua1047 quantize 2147483649 0 -> 2147483649 +dqqua1048 quantize 4294967294 0 -> 4294967294 +dqqua1049 quantize 4294967295 0 -> 4294967295 +dqqua1050 quantize 4294967296 0 -> 4294967296 +dqqua1051 quantize 4294967297 0 -> 4294967297 + +-- Rounding swathe +rounding: half_even +dqqua1100 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1101 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1102 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1103 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +dqqua1104 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1105 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua1106 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1107 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1108 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1109 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: half_up +dqqua1200 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1201 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1202 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1203 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +dqqua1204 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1205 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +dqqua1206 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1207 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1208 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1209 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: half_down +dqqua1300 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1301 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1302 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1303 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +dqqua1304 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1305 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua1306 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1307 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1308 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1309 quantize 1.2399 1.00 -> 1.24 Inexact Rounded + +rounding: up +dqqua1400 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1401 quantize 1.2301 1.00 -> 1.24 Inexact Rounded +dqqua1402 quantize 1.2310 1.00 -> 1.24 Inexact Rounded +dqqua1403 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +dqqua1404 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1405 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +dqqua1406 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1407 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1408 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1409 quantize 1.2399 1.00 -> 1.24 Inexact Rounded +dqqua1411 quantize -1.2399 1.00 -> -1.24 Inexact Rounded + +rounding: down +dqqua1500 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1501 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1502 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1503 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +dqqua1504 quantize 1.2351 1.00 -> 1.23 Inexact Rounded +dqqua1505 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua1506 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +dqqua1507 quantize 1.2360 1.00 -> 1.23 Inexact Rounded +dqqua1508 quantize 1.2370 1.00 -> 1.23 Inexact Rounded +dqqua1509 quantize 1.2399 1.00 -> 1.23 Inexact Rounded +dqqua1511 quantize -1.2399 1.00 -> -1.23 Inexact Rounded + +rounding: ceiling +dqqua1600 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1601 quantize 1.2301 1.00 -> 1.24 Inexact Rounded +dqqua1602 quantize 1.2310 1.00 -> 1.24 Inexact Rounded +dqqua1603 quantize 1.2350 1.00 -> 1.24 Inexact Rounded +dqqua1604 quantize 1.2351 1.00 -> 1.24 Inexact Rounded +dqqua1605 quantize 1.2450 1.00 -> 1.25 Inexact Rounded +dqqua1606 quantize 1.2451 1.00 -> 1.25 Inexact Rounded +dqqua1607 quantize 1.2360 1.00 -> 1.24 Inexact Rounded +dqqua1608 quantize 1.2370 1.00 -> 1.24 Inexact Rounded +dqqua1609 quantize 1.2399 1.00 -> 1.24 Inexact Rounded +dqqua1611 quantize -1.2399 1.00 -> -1.23 Inexact Rounded + +rounding: floor +dqqua1700 quantize 1.2300 1.00 -> 1.23 Rounded +dqqua1701 quantize 1.2301 1.00 -> 1.23 Inexact Rounded +dqqua1702 quantize 1.2310 1.00 -> 1.23 Inexact Rounded +dqqua1703 quantize 1.2350 1.00 -> 1.23 Inexact Rounded +dqqua1704 quantize 1.2351 1.00 -> 1.23 Inexact Rounded +dqqua1705 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua1706 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +dqqua1707 quantize 1.2360 1.00 -> 1.23 Inexact Rounded +dqqua1708 quantize 1.2370 1.00 -> 1.23 Inexact Rounded +dqqua1709 quantize 1.2399 1.00 -> 1.23 Inexact Rounded +dqqua1711 quantize -1.2399 1.00 -> -1.24 Inexact Rounded + +rounding: 05up +dqqua1800 quantize 1.2000 1.00 -> 1.20 Rounded +dqqua1801 quantize 1.2001 1.00 -> 1.21 Inexact Rounded +dqqua1802 quantize 1.2010 1.00 -> 1.21 Inexact Rounded +dqqua1803 quantize 1.2050 1.00 -> 1.21 Inexact Rounded +dqqua1804 quantize 1.2051 1.00 -> 1.21 Inexact Rounded +dqqua1807 quantize 1.2060 1.00 -> 1.21 Inexact Rounded +dqqua1808 quantize 1.2070 1.00 -> 1.21 Inexact Rounded +dqqua1809 quantize 1.2099 1.00 -> 1.21 Inexact Rounded +dqqua1811 quantize -1.2099 1.00 -> -1.21 Inexact Rounded + +dqqua1900 quantize 1.2100 1.00 -> 1.21 Rounded +dqqua1901 quantize 1.2101 1.00 -> 1.21 Inexact Rounded +dqqua1902 quantize 1.2110 1.00 -> 1.21 Inexact Rounded +dqqua1903 quantize 1.2150 1.00 -> 1.21 Inexact Rounded +dqqua1904 quantize 1.2151 1.00 -> 1.21 Inexact Rounded +dqqua1907 quantize 1.2160 1.00 -> 1.21 Inexact Rounded +dqqua1908 quantize 1.2170 1.00 -> 1.21 Inexact Rounded +dqqua1909 quantize 1.2199 1.00 -> 1.21 Inexact Rounded +dqqua1911 quantize -1.2199 1.00 -> -1.21 Inexact Rounded + +dqqua2000 quantize 1.2400 1.00 -> 1.24 Rounded +dqqua2001 quantize 1.2401 1.00 -> 1.24 Inexact Rounded +dqqua2002 quantize 1.2410 1.00 -> 1.24 Inexact Rounded +dqqua2003 quantize 1.2450 1.00 -> 1.24 Inexact Rounded +dqqua2004 quantize 1.2451 1.00 -> 1.24 Inexact Rounded +dqqua2007 quantize 1.2460 1.00 -> 1.24 Inexact Rounded +dqqua2008 quantize 1.2470 1.00 -> 1.24 Inexact Rounded +dqqua2009 quantize 1.2499 1.00 -> 1.24 Inexact Rounded +dqqua2011 quantize -1.2499 1.00 -> -1.24 Inexact Rounded + +dqqua2100 quantize 1.2500 1.00 -> 1.25 Rounded +dqqua2101 quantize 1.2501 1.00 -> 1.26 Inexact Rounded +dqqua2102 quantize 1.2510 1.00 -> 1.26 Inexact Rounded +dqqua2103 quantize 1.2550 1.00 -> 1.26 Inexact Rounded +dqqua2104 quantize 1.2551 1.00 -> 1.26 Inexact Rounded +dqqua2107 quantize 1.2560 1.00 -> 1.26 Inexact Rounded +dqqua2108 quantize 1.2570 1.00 -> 1.26 Inexact Rounded +dqqua2109 quantize 1.2599 1.00 -> 1.26 Inexact Rounded +dqqua2111 quantize -1.2599 1.00 -> -1.26 Inexact Rounded + +dqqua2200 quantize 1.2600 1.00 -> 1.26 Rounded +dqqua2201 quantize 1.2601 1.00 -> 1.26 Inexact Rounded +dqqua2202 quantize 1.2610 1.00 -> 1.26 Inexact Rounded +dqqua2203 quantize 1.2650 1.00 -> 1.26 Inexact Rounded +dqqua2204 quantize 1.2651 1.00 -> 1.26 Inexact Rounded +dqqua2207 quantize 1.2660 1.00 -> 1.26 Inexact Rounded +dqqua2208 quantize 1.2670 1.00 -> 1.26 Inexact Rounded +dqqua2209 quantize 1.2699 1.00 -> 1.26 Inexact Rounded +dqqua2211 quantize -1.2699 1.00 -> -1.26 Inexact Rounded + +dqqua2300 quantize 1.2900 1.00 -> 1.29 Rounded +dqqua2301 quantize 1.2901 1.00 -> 1.29 Inexact Rounded +dqqua2302 quantize 1.2910 1.00 -> 1.29 Inexact Rounded +dqqua2303 quantize 1.2950 1.00 -> 1.29 Inexact Rounded +dqqua2304 quantize 1.2951 1.00 -> 1.29 Inexact Rounded +dqqua2307 quantize 1.2960 1.00 -> 1.29 Inexact Rounded +dqqua2308 quantize 1.2970 1.00 -> 1.29 Inexact Rounded +dqqua2309 quantize 1.2999 1.00 -> 1.29 Inexact Rounded +dqqua2311 quantize -1.2999 1.00 -> -1.29 Inexact Rounded + +-- Null tests +dqqua998 quantize 10 # -> NaN Invalid_operation +dqqua999 quantize # 1e10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqReduce.decTest b/Lib/test/decimaltestdata/dqReduce.decTest index 5635e6b70f3..236574f4c7a 100644 --- a/Lib/test/decimaltestdata/dqReduce.decTest +++ b/Lib/test/decimaltestdata/dqReduce.decTest @@ -1,183 +1,183 @@ ------------------------------------------------------------------------- --- dqReduce.decTest -- remove trailing zeros from a decQuad -- --- Copyright (c) IBM Corporation, 2003, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- - -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqred001 reduce '1' -> '1' -dqred002 reduce '-1' -> '-1' -dqred003 reduce '1.00' -> '1' -dqred004 reduce '-1.00' -> '-1' -dqred005 reduce '0' -> '0' -dqred006 reduce '0.00' -> '0' -dqred007 reduce '00.0' -> '0' -dqred008 reduce '00.00' -> '0' -dqred009 reduce '00' -> '0' -dqred010 reduce '0E+1' -> '0' -dqred011 reduce '0E+5' -> '0' - -dqred012 reduce '-2' -> '-2' -dqred013 reduce '2' -> '2' -dqred014 reduce '-2.00' -> '-2' -dqred015 reduce '2.00' -> '2' -dqred016 reduce '-0' -> '-0' -dqred017 reduce '-0.00' -> '-0' -dqred018 reduce '-00.0' -> '-0' -dqred019 reduce '-00.00' -> '-0' -dqred020 reduce '-00' -> '-0' -dqred021 reduce '-0E+5' -> '-0' -dqred022 reduce '-0E+1' -> '-0' - -dqred030 reduce '+0.1' -> '0.1' -dqred031 reduce '-0.1' -> '-0.1' -dqred032 reduce '+0.01' -> '0.01' -dqred033 reduce '-0.01' -> '-0.01' -dqred034 reduce '+0.001' -> '0.001' -dqred035 reduce '-0.001' -> '-0.001' -dqred036 reduce '+0.000001' -> '0.000001' -dqred037 reduce '-0.000001' -> '-0.000001' -dqred038 reduce '+0.000000000001' -> '1E-12' -dqred039 reduce '-0.000000000001' -> '-1E-12' - -dqred041 reduce 1.1 -> 1.1 -dqred042 reduce 1.10 -> 1.1 -dqred043 reduce 1.100 -> 1.1 -dqred044 reduce 1.110 -> 1.11 -dqred045 reduce -1.1 -> -1.1 -dqred046 reduce -1.10 -> -1.1 -dqred047 reduce -1.100 -> -1.1 -dqred048 reduce -1.110 -> -1.11 -dqred049 reduce 9.9 -> 9.9 -dqred050 reduce 9.90 -> 9.9 -dqred051 reduce 9.900 -> 9.9 -dqred052 reduce 9.990 -> 9.99 -dqred053 reduce -9.9 -> -9.9 -dqred054 reduce -9.90 -> -9.9 -dqred055 reduce -9.900 -> -9.9 -dqred056 reduce -9.990 -> -9.99 - --- some trailing fractional zeros with zeros in units -dqred060 reduce 10.0 -> 1E+1 -dqred061 reduce 10.00 -> 1E+1 -dqred062 reduce 100.0 -> 1E+2 -dqred063 reduce 100.00 -> 1E+2 -dqred064 reduce 1.1000E+3 -> 1.1E+3 -dqred065 reduce 1.10000E+3 -> 1.1E+3 -dqred066 reduce -10.0 -> -1E+1 -dqred067 reduce -10.00 -> -1E+1 -dqred068 reduce -100.0 -> -1E+2 -dqred069 reduce -100.00 -> -1E+2 -dqred070 reduce -1.1000E+3 -> -1.1E+3 -dqred071 reduce -1.10000E+3 -> -1.1E+3 - --- some insignificant trailing zeros with positive exponent -dqred080 reduce 10E+1 -> 1E+2 -dqred081 reduce 100E+1 -> 1E+3 -dqred082 reduce 1.0E+2 -> 1E+2 -dqred083 reduce 1.0E+3 -> 1E+3 -dqred084 reduce 1.1E+3 -> 1.1E+3 -dqred085 reduce 1.00E+3 -> 1E+3 -dqred086 reduce 1.10E+3 -> 1.1E+3 -dqred087 reduce -10E+1 -> -1E+2 -dqred088 reduce -100E+1 -> -1E+3 -dqred089 reduce -1.0E+2 -> -1E+2 -dqred090 reduce -1.0E+3 -> -1E+3 -dqred091 reduce -1.1E+3 -> -1.1E+3 -dqred092 reduce -1.00E+3 -> -1E+3 -dqred093 reduce -1.10E+3 -> -1.1E+3 - --- some significant trailing zeros, were we to be trimming -dqred100 reduce 11 -> 11 -dqred101 reduce 10 -> 1E+1 -dqred102 reduce 10. -> 1E+1 -dqred103 reduce 1.1E+1 -> 11 -dqred104 reduce 1.0E+1 -> 1E+1 -dqred105 reduce 1.10E+2 -> 1.1E+2 -dqred106 reduce 1.00E+2 -> 1E+2 -dqred107 reduce 1.100E+3 -> 1.1E+3 -dqred108 reduce 1.000E+3 -> 1E+3 -dqred109 reduce 1.000000E+6 -> 1E+6 -dqred110 reduce -11 -> -11 -dqred111 reduce -10 -> -1E+1 -dqred112 reduce -10. -> -1E+1 -dqred113 reduce -1.1E+1 -> -11 -dqred114 reduce -1.0E+1 -> -1E+1 -dqred115 reduce -1.10E+2 -> -1.1E+2 -dqred116 reduce -1.00E+2 -> -1E+2 -dqred117 reduce -1.100E+3 -> -1.1E+3 -dqred118 reduce -1.000E+3 -> -1E+3 -dqred119 reduce -1.00000E+5 -> -1E+5 -dqred120 reduce -1.000000E+6 -> -1E+6 -dqred121 reduce -10.00000E+6 -> -1E+7 -dqred122 reduce -100.0000E+6 -> -1E+8 -dqred123 reduce -1000.000E+6 -> -1E+9 -dqred124 reduce -10000.00E+6 -> -1E+10 -dqred125 reduce -100000.0E+6 -> -1E+11 -dqred126 reduce -1000000.E+6 -> -1E+12 - --- examples from decArith -dqred140 reduce '2.1' -> '2.1' -dqred141 reduce '-2.0' -> '-2' -dqred142 reduce '1.200' -> '1.2' -dqred143 reduce '-120' -> '-1.2E+2' -dqred144 reduce '120.00' -> '1.2E+2' -dqred145 reduce '0.00' -> '0' - --- Nmax, Nmin, Ntiny --- note origami effect on some of these -dqred151 reduce 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 -dqred152 reduce 9.999999999999999999999999000000000E+6140 -> 9.99999999999999999999999900000E+6140 -dqred153 reduce 9.999999999999999999999999999990000E+6144 -> 9.999999999999999999999999999990000E+6144 -dqred154 reduce 1E-6143 -> 1E-6143 -dqred155 reduce 1.000000000000000000000000000000000E-6143 -> 1E-6143 -dqred156 reduce 2.000E-6173 -> 2E-6173 Subnormal -dqred157 reduce 1E-6176 -> 1E-6176 Subnormal - -dqred161 reduce -1E-6176 -> -1E-6176 Subnormal -dqred162 reduce -2.000E-6173 -> -2E-6173 Subnormal -dqred163 reduce -1.000000000000000000000000000000000E-6143 -> -1E-6143 -dqred164 reduce -1E-6143 -> -1E-6143 -dqred165 reduce -9.999999999999999999999999000000000E+6140 -> -9.99999999999999999999999900000E+6140 -dqred166 reduce -9.999999999999999999999999999990000E+6144 -> -9.999999999999999999999999999990000E+6144 -dqred167 reduce -9.999999999999999999999999999999990E+6144 -> -9.999999999999999999999999999999990E+6144 -dqred168 reduce -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 -dqred169 reduce -9.999999999999999999999999999999990E+6144 -> -9.999999999999999999999999999999990E+6144 - - --- specials (reduce does not affect payload) -dqred820 reduce 'Inf' -> 'Infinity' -dqred821 reduce '-Inf' -> '-Infinity' -dqred822 reduce NaN -> NaN -dqred823 reduce sNaN -> NaN Invalid_operation -dqred824 reduce NaN101 -> NaN101 -dqred825 reduce sNaN010 -> NaN10 Invalid_operation -dqred827 reduce -NaN -> -NaN -dqred828 reduce -sNaN -> -NaN Invalid_operation -dqred829 reduce -NaN101 -> -NaN101 -dqred830 reduce -sNaN010 -> -NaN10 Invalid_operation - --- Null test -dqred900 reduce # -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqReduce.decTest -- remove trailing zeros from a decQuad -- +-- Copyright (c) IBM Corporation, 2003, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ + +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqred001 reduce '1' -> '1' +dqred002 reduce '-1' -> '-1' +dqred003 reduce '1.00' -> '1' +dqred004 reduce '-1.00' -> '-1' +dqred005 reduce '0' -> '0' +dqred006 reduce '0.00' -> '0' +dqred007 reduce '00.0' -> '0' +dqred008 reduce '00.00' -> '0' +dqred009 reduce '00' -> '0' +dqred010 reduce '0E+1' -> '0' +dqred011 reduce '0E+5' -> '0' + +dqred012 reduce '-2' -> '-2' +dqred013 reduce '2' -> '2' +dqred014 reduce '-2.00' -> '-2' +dqred015 reduce '2.00' -> '2' +dqred016 reduce '-0' -> '-0' +dqred017 reduce '-0.00' -> '-0' +dqred018 reduce '-00.0' -> '-0' +dqred019 reduce '-00.00' -> '-0' +dqred020 reduce '-00' -> '-0' +dqred021 reduce '-0E+5' -> '-0' +dqred022 reduce '-0E+1' -> '-0' + +dqred030 reduce '+0.1' -> '0.1' +dqred031 reduce '-0.1' -> '-0.1' +dqred032 reduce '+0.01' -> '0.01' +dqred033 reduce '-0.01' -> '-0.01' +dqred034 reduce '+0.001' -> '0.001' +dqred035 reduce '-0.001' -> '-0.001' +dqred036 reduce '+0.000001' -> '0.000001' +dqred037 reduce '-0.000001' -> '-0.000001' +dqred038 reduce '+0.000000000001' -> '1E-12' +dqred039 reduce '-0.000000000001' -> '-1E-12' + +dqred041 reduce 1.1 -> 1.1 +dqred042 reduce 1.10 -> 1.1 +dqred043 reduce 1.100 -> 1.1 +dqred044 reduce 1.110 -> 1.11 +dqred045 reduce -1.1 -> -1.1 +dqred046 reduce -1.10 -> -1.1 +dqred047 reduce -1.100 -> -1.1 +dqred048 reduce -1.110 -> -1.11 +dqred049 reduce 9.9 -> 9.9 +dqred050 reduce 9.90 -> 9.9 +dqred051 reduce 9.900 -> 9.9 +dqred052 reduce 9.990 -> 9.99 +dqred053 reduce -9.9 -> -9.9 +dqred054 reduce -9.90 -> -9.9 +dqred055 reduce -9.900 -> -9.9 +dqred056 reduce -9.990 -> -9.99 + +-- some trailing fractional zeros with zeros in units +dqred060 reduce 10.0 -> 1E+1 +dqred061 reduce 10.00 -> 1E+1 +dqred062 reduce 100.0 -> 1E+2 +dqred063 reduce 100.00 -> 1E+2 +dqred064 reduce 1.1000E+3 -> 1.1E+3 +dqred065 reduce 1.10000E+3 -> 1.1E+3 +dqred066 reduce -10.0 -> -1E+1 +dqred067 reduce -10.00 -> -1E+1 +dqred068 reduce -100.0 -> -1E+2 +dqred069 reduce -100.00 -> -1E+2 +dqred070 reduce -1.1000E+3 -> -1.1E+3 +dqred071 reduce -1.10000E+3 -> -1.1E+3 + +-- some insignificant trailing zeros with positive exponent +dqred080 reduce 10E+1 -> 1E+2 +dqred081 reduce 100E+1 -> 1E+3 +dqred082 reduce 1.0E+2 -> 1E+2 +dqred083 reduce 1.0E+3 -> 1E+3 +dqred084 reduce 1.1E+3 -> 1.1E+3 +dqred085 reduce 1.00E+3 -> 1E+3 +dqred086 reduce 1.10E+3 -> 1.1E+3 +dqred087 reduce -10E+1 -> -1E+2 +dqred088 reduce -100E+1 -> -1E+3 +dqred089 reduce -1.0E+2 -> -1E+2 +dqred090 reduce -1.0E+3 -> -1E+3 +dqred091 reduce -1.1E+3 -> -1.1E+3 +dqred092 reduce -1.00E+3 -> -1E+3 +dqred093 reduce -1.10E+3 -> -1.1E+3 + +-- some significant trailing zeros, were we to be trimming +dqred100 reduce 11 -> 11 +dqred101 reduce 10 -> 1E+1 +dqred102 reduce 10. -> 1E+1 +dqred103 reduce 1.1E+1 -> 11 +dqred104 reduce 1.0E+1 -> 1E+1 +dqred105 reduce 1.10E+2 -> 1.1E+2 +dqred106 reduce 1.00E+2 -> 1E+2 +dqred107 reduce 1.100E+3 -> 1.1E+3 +dqred108 reduce 1.000E+3 -> 1E+3 +dqred109 reduce 1.000000E+6 -> 1E+6 +dqred110 reduce -11 -> -11 +dqred111 reduce -10 -> -1E+1 +dqred112 reduce -10. -> -1E+1 +dqred113 reduce -1.1E+1 -> -11 +dqred114 reduce -1.0E+1 -> -1E+1 +dqred115 reduce -1.10E+2 -> -1.1E+2 +dqred116 reduce -1.00E+2 -> -1E+2 +dqred117 reduce -1.100E+3 -> -1.1E+3 +dqred118 reduce -1.000E+3 -> -1E+3 +dqred119 reduce -1.00000E+5 -> -1E+5 +dqred120 reduce -1.000000E+6 -> -1E+6 +dqred121 reduce -10.00000E+6 -> -1E+7 +dqred122 reduce -100.0000E+6 -> -1E+8 +dqred123 reduce -1000.000E+6 -> -1E+9 +dqred124 reduce -10000.00E+6 -> -1E+10 +dqred125 reduce -100000.0E+6 -> -1E+11 +dqred126 reduce -1000000.E+6 -> -1E+12 + +-- examples from decArith +dqred140 reduce '2.1' -> '2.1' +dqred141 reduce '-2.0' -> '-2' +dqred142 reduce '1.200' -> '1.2' +dqred143 reduce '-120' -> '-1.2E+2' +dqred144 reduce '120.00' -> '1.2E+2' +dqred145 reduce '0.00' -> '0' + +-- Nmax, Nmin, Ntiny +-- note origami effect on some of these +dqred151 reduce 9.999999999999999999999999999999999E+6144 -> 9.999999999999999999999999999999999E+6144 +dqred152 reduce 9.999999999999999999999999000000000E+6140 -> 9.99999999999999999999999900000E+6140 +dqred153 reduce 9.999999999999999999999999999990000E+6144 -> 9.999999999999999999999999999990000E+6144 +dqred154 reduce 1E-6143 -> 1E-6143 +dqred155 reduce 1.000000000000000000000000000000000E-6143 -> 1E-6143 +dqred156 reduce 2.000E-6173 -> 2E-6173 Subnormal +dqred157 reduce 1E-6176 -> 1E-6176 Subnormal + +dqred161 reduce -1E-6176 -> -1E-6176 Subnormal +dqred162 reduce -2.000E-6173 -> -2E-6173 Subnormal +dqred163 reduce -1.000000000000000000000000000000000E-6143 -> -1E-6143 +dqred164 reduce -1E-6143 -> -1E-6143 +dqred165 reduce -9.999999999999999999999999000000000E+6140 -> -9.99999999999999999999999900000E+6140 +dqred166 reduce -9.999999999999999999999999999990000E+6144 -> -9.999999999999999999999999999990000E+6144 +dqred167 reduce -9.999999999999999999999999999999990E+6144 -> -9.999999999999999999999999999999990E+6144 +dqred168 reduce -9.999999999999999999999999999999999E+6144 -> -9.999999999999999999999999999999999E+6144 +dqred169 reduce -9.999999999999999999999999999999990E+6144 -> -9.999999999999999999999999999999990E+6144 + + +-- specials (reduce does not affect payload) +dqred820 reduce 'Inf' -> 'Infinity' +dqred821 reduce '-Inf' -> '-Infinity' +dqred822 reduce NaN -> NaN +dqred823 reduce sNaN -> NaN Invalid_operation +dqred824 reduce NaN101 -> NaN101 +dqred825 reduce sNaN010 -> NaN10 Invalid_operation +dqred827 reduce -NaN -> -NaN +dqred828 reduce -sNaN -> -NaN Invalid_operation +dqred829 reduce -NaN101 -> -NaN101 +dqred830 reduce -sNaN010 -> -NaN10 Invalid_operation + +-- Null test +dqred900 reduce # -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqRemainder.decTest b/Lib/test/decimaltestdata/dqRemainder.decTest index ae594947077..e0aaca3747e 100644 --- a/Lib/test/decimaltestdata/dqRemainder.decTest +++ b/Lib/test/decimaltestdata/dqRemainder.decTest @@ -1,597 +1,597 @@ ------------------------------------------------------------------------- --- dqRemainder.decTest -- decQuad remainder -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks (as base, above) -dqrem001 remainder 1 1 -> 0 -dqrem002 remainder 2 1 -> 0 -dqrem003 remainder 1 2 -> 1 -dqrem004 remainder 2 2 -> 0 -dqrem005 remainder 0 1 -> 0 -dqrem006 remainder 0 2 -> 0 -dqrem007 remainder 1 3 -> 1 -dqrem008 remainder 2 3 -> 2 -dqrem009 remainder 3 3 -> 0 - -dqrem010 remainder 2.4 1 -> 0.4 -dqrem011 remainder 2.4 -1 -> 0.4 -dqrem012 remainder -2.4 1 -> -0.4 -dqrem013 remainder -2.4 -1 -> -0.4 -dqrem014 remainder 2.40 1 -> 0.40 -dqrem015 remainder 2.400 1 -> 0.400 -dqrem016 remainder 2.4 2 -> 0.4 -dqrem017 remainder 2.400 2 -> 0.400 -dqrem018 remainder 2. 2 -> 0 -dqrem019 remainder 20 20 -> 0 - -dqrem020 remainder 187 187 -> 0 -dqrem021 remainder 5 2 -> 1 -dqrem022 remainder 5 2.0 -> 1.0 -dqrem023 remainder 5 2.000 -> 1.000 -dqrem024 remainder 5 0.200 -> 0.000 -dqrem025 remainder 5 0.200 -> 0.000 - -dqrem030 remainder 1 2 -> 1 -dqrem031 remainder 1 4 -> 1 -dqrem032 remainder 1 8 -> 1 - -dqrem033 remainder 1 16 -> 1 -dqrem034 remainder 1 32 -> 1 -dqrem035 remainder 1 64 -> 1 -dqrem040 remainder 1 -2 -> 1 -dqrem041 remainder 1 -4 -> 1 -dqrem042 remainder 1 -8 -> 1 -dqrem043 remainder 1 -16 -> 1 -dqrem044 remainder 1 -32 -> 1 -dqrem045 remainder 1 -64 -> 1 -dqrem050 remainder -1 2 -> -1 -dqrem051 remainder -1 4 -> -1 -dqrem052 remainder -1 8 -> -1 -dqrem053 remainder -1 16 -> -1 -dqrem054 remainder -1 32 -> -1 -dqrem055 remainder -1 64 -> -1 -dqrem060 remainder -1 -2 -> -1 -dqrem061 remainder -1 -4 -> -1 -dqrem062 remainder -1 -8 -> -1 -dqrem063 remainder -1 -16 -> -1 -dqrem064 remainder -1 -32 -> -1 -dqrem065 remainder -1 -64 -> -1 - -dqrem066 remainder 999999999 1 -> 0 -dqrem067 remainder 999999999.4 1 -> 0.4 -dqrem068 remainder 999999999.5 1 -> 0.5 -dqrem069 remainder 999999999.9 1 -> 0.9 -dqrem070 remainder 999999999.999 1 -> 0.999 -dqrem071 remainder 999999.999999 1 -> 0.999999 -dqrem072 remainder 9 1 -> 0 - -dqrem080 remainder 0. 1 -> 0 -dqrem081 remainder .0 1 -> 0.0 -dqrem082 remainder 0.00 1 -> 0.00 -dqrem083 remainder 0.00E+9 1 -> 0 -dqrem084 remainder 0.00E+3 1 -> 0 -dqrem085 remainder 0.00E+2 1 -> 0 -dqrem086 remainder 0.00E+1 1 -> 0.0 -dqrem087 remainder 0.00E+0 1 -> 0.00 -dqrem088 remainder 0.00E-0 1 -> 0.00 -dqrem089 remainder 0.00E-1 1 -> 0.000 -dqrem090 remainder 0.00E-2 1 -> 0.0000 -dqrem091 remainder 0.00E-3 1 -> 0.00000 -dqrem092 remainder 0.00E-4 1 -> 0.000000 -dqrem093 remainder 0.00E-5 1 -> 0E-7 -dqrem094 remainder 0.00E-6 1 -> 0E-8 -dqrem095 remainder 0.0000E-50 1 -> 0E-54 - --- Various flavours of remainder by 0 -dqrem101 remainder 0 0 -> NaN Division_undefined -dqrem102 remainder 0 -0 -> NaN Division_undefined -dqrem103 remainder -0 0 -> NaN Division_undefined -dqrem104 remainder -0 -0 -> NaN Division_undefined -dqrem105 remainder 0.0E5 0 -> NaN Division_undefined -dqrem106 remainder 0.000 0 -> NaN Division_undefined --- [Some think this next group should be Division_by_zero exception, but --- IEEE 854 is explicit that it is Invalid operation .. for --- remainder-near, anyway] -dqrem107 remainder 0.0001 0 -> NaN Invalid_operation -dqrem108 remainder 0.01 0 -> NaN Invalid_operation -dqrem109 remainder 0.1 0 -> NaN Invalid_operation -dqrem110 remainder 1 0 -> NaN Invalid_operation -dqrem111 remainder 1 0.0 -> NaN Invalid_operation -dqrem112 remainder 10 0.0 -> NaN Invalid_operation -dqrem113 remainder 1E+100 0.0 -> NaN Invalid_operation -dqrem114 remainder 1E+380 0 -> NaN Invalid_operation -dqrem115 remainder 0.0001 -0 -> NaN Invalid_operation -dqrem116 remainder 0.01 -0 -> NaN Invalid_operation -dqrem119 remainder 0.1 -0 -> NaN Invalid_operation -dqrem120 remainder 1 -0 -> NaN Invalid_operation -dqrem121 remainder 1 -0.0 -> NaN Invalid_operation -dqrem122 remainder 10 -0.0 -> NaN Invalid_operation -dqrem123 remainder 1E+100 -0.0 -> NaN Invalid_operation -dqrem124 remainder 1E+384 -0 -> NaN Invalid_operation --- and zeros on left -dqrem130 remainder 0 1 -> 0 -dqrem131 remainder 0 -1 -> 0 -dqrem132 remainder 0.0 1 -> 0.0 -dqrem133 remainder 0.0 -1 -> 0.0 -dqrem134 remainder -0 1 -> -0 -dqrem135 remainder -0 -1 -> -0 -dqrem136 remainder -0.0 1 -> -0.0 -dqrem137 remainder -0.0 -1 -> -0.0 - --- 0.5ers -dqrem143 remainder 0.5 2 -> 0.5 -dqrem144 remainder 0.5 2.1 -> 0.5 -dqrem145 remainder 0.5 2.01 -> 0.50 -dqrem146 remainder 0.5 2.001 -> 0.500 -dqrem147 remainder 0.50 2 -> 0.50 -dqrem148 remainder 0.50 2.01 -> 0.50 -dqrem149 remainder 0.50 2.001 -> 0.500 - --- steadies -dqrem150 remainder 1 1 -> 0 -dqrem151 remainder 1 2 -> 1 -dqrem152 remainder 1 3 -> 1 -dqrem153 remainder 1 4 -> 1 -dqrem154 remainder 1 5 -> 1 -dqrem155 remainder 1 6 -> 1 -dqrem156 remainder 1 7 -> 1 -dqrem157 remainder 1 8 -> 1 -dqrem158 remainder 1 9 -> 1 -dqrem159 remainder 1 10 -> 1 -dqrem160 remainder 1 1 -> 0 -dqrem161 remainder 2 1 -> 0 -dqrem162 remainder 3 1 -> 0 -dqrem163 remainder 4 1 -> 0 -dqrem164 remainder 5 1 -> 0 -dqrem165 remainder 6 1 -> 0 -dqrem166 remainder 7 1 -> 0 -dqrem167 remainder 8 1 -> 0 -dqrem168 remainder 9 1 -> 0 -dqrem169 remainder 10 1 -> 0 - --- some differences from remainderNear -dqrem171 remainder 0.4 1.020 -> 0.400 -dqrem172 remainder 0.50 1.020 -> 0.500 -dqrem173 remainder 0.51 1.020 -> 0.510 -dqrem174 remainder 0.52 1.020 -> 0.520 -dqrem175 remainder 0.6 1.020 -> 0.600 - --- More flavours of remainder by 0 -dqrem201 remainder 0 0 -> NaN Division_undefined -dqrem202 remainder 0.0E5 0 -> NaN Division_undefined -dqrem203 remainder 0.000 0 -> NaN Division_undefined -dqrem204 remainder 0.0001 0 -> NaN Invalid_operation -dqrem205 remainder 0.01 0 -> NaN Invalid_operation -dqrem206 remainder 0.1 0 -> NaN Invalid_operation -dqrem207 remainder 1 0 -> NaN Invalid_operation -dqrem208 remainder 1 0.0 -> NaN Invalid_operation -dqrem209 remainder 10 0.0 -> NaN Invalid_operation -dqrem210 remainder 1E+100 0.0 -> NaN Invalid_operation -dqrem211 remainder 1E+380 0 -> NaN Invalid_operation - --- some differences from remainderNear -dqrem231 remainder -0.4 1.020 -> -0.400 -dqrem232 remainder -0.50 1.020 -> -0.500 -dqrem233 remainder -0.51 1.020 -> -0.510 -dqrem234 remainder -0.52 1.020 -> -0.520 -dqrem235 remainder -0.6 1.020 -> -0.600 - --- high Xs -dqrem240 remainder 1E+2 1.00 -> 0.00 - --- dqrem3xx are from DiagBigDecimal -dqrem301 remainder 1 3 -> 1 -dqrem302 remainder 5 5 -> 0 -dqrem303 remainder 13 10 -> 3 -dqrem304 remainder 13 50 -> 13 -dqrem305 remainder 13 100 -> 13 -dqrem306 remainder 13 1000 -> 13 -dqrem307 remainder .13 1 -> 0.13 -dqrem308 remainder 0.133 1 -> 0.133 -dqrem309 remainder 0.1033 1 -> 0.1033 -dqrem310 remainder 1.033 1 -> 0.033 -dqrem311 remainder 10.33 1 -> 0.33 -dqrem312 remainder 10.33 10 -> 0.33 -dqrem313 remainder 103.3 1 -> 0.3 -dqrem314 remainder 133 10 -> 3 -dqrem315 remainder 1033 10 -> 3 -dqrem316 remainder 1033 50 -> 33 -dqrem317 remainder 101.0 3 -> 2.0 -dqrem318 remainder 102.0 3 -> 0.0 -dqrem319 remainder 103.0 3 -> 1.0 -dqrem320 remainder 2.40 1 -> 0.40 -dqrem321 remainder 2.400 1 -> 0.400 -dqrem322 remainder 2.4 1 -> 0.4 -dqrem323 remainder 2.4 2 -> 0.4 -dqrem324 remainder 2.400 2 -> 0.400 -dqrem325 remainder 1 0.3 -> 0.1 -dqrem326 remainder 1 0.30 -> 0.10 -dqrem327 remainder 1 0.300 -> 0.100 -dqrem328 remainder 1 0.3000 -> 0.1000 -dqrem329 remainder 1.0 0.3 -> 0.1 -dqrem330 remainder 1.00 0.3 -> 0.10 -dqrem331 remainder 1.000 0.3 -> 0.100 -dqrem332 remainder 1.0000 0.3 -> 0.1000 -dqrem333 remainder 0.5 2 -> 0.5 -dqrem334 remainder 0.5 2.1 -> 0.5 -dqrem335 remainder 0.5 2.01 -> 0.50 -dqrem336 remainder 0.5 2.001 -> 0.500 -dqrem337 remainder 0.50 2 -> 0.50 -dqrem338 remainder 0.50 2.01 -> 0.50 -dqrem339 remainder 0.50 2.001 -> 0.500 - -dqrem340 remainder 0.5 0.5000001 -> 0.5000000 -dqrem341 remainder 0.5 0.50000001 -> 0.50000000 -dqrem342 remainder 0.5 0.500000001 -> 0.500000000 -dqrem343 remainder 0.5 0.5000000001 -> 0.5000000000 -dqrem344 remainder 0.5 0.50000000001 -> 0.50000000000 -dqrem345 remainder 0.5 0.4999999 -> 1E-7 -dqrem346 remainder 0.5 0.49999999 -> 1E-8 -dqrem347 remainder 0.5 0.499999999 -> 1E-9 -dqrem348 remainder 0.5 0.4999999999 -> 1E-10 -dqrem349 remainder 0.5 0.49999999999 -> 1E-11 -dqrem350 remainder 0.5 0.499999999999 -> 1E-12 - -dqrem351 remainder 0.03 7 -> 0.03 -dqrem352 remainder 5 2 -> 1 -dqrem353 remainder 4.1 2 -> 0.1 -dqrem354 remainder 4.01 2 -> 0.01 -dqrem355 remainder 4.001 2 -> 0.001 -dqrem356 remainder 4.0001 2 -> 0.0001 -dqrem357 remainder 4.00001 2 -> 0.00001 -dqrem358 remainder 4.000001 2 -> 0.000001 -dqrem359 remainder 4.0000001 2 -> 1E-7 - -dqrem360 remainder 1.2 0.7345 -> 0.4655 -dqrem361 remainder 0.8 12 -> 0.8 -dqrem362 remainder 0.8 0.2 -> 0.0 -dqrem363 remainder 0.8 0.3 -> 0.2 -dqrem364 remainder 0.800 12 -> 0.800 -dqrem365 remainder 0.800 1.7 -> 0.800 -dqrem366 remainder 2.400 2 -> 0.400 - -dqrem371 remainder 2.400 2 -> 0.400 - -dqrem381 remainder 12345 1 -> 0 -dqrem382 remainder 12345 1.0001 -> 0.7657 -dqrem383 remainder 12345 1.001 -> 0.668 -dqrem384 remainder 12345 1.01 -> 0.78 -dqrem385 remainder 12345 1.1 -> 0.8 -dqrem386 remainder 12355 4 -> 3 -dqrem387 remainder 12345 4 -> 1 -dqrem388 remainder 12355 4.0001 -> 2.6912 -dqrem389 remainder 12345 4.0001 -> 0.6914 -dqrem390 remainder 12345 4.9 -> 1.9 -dqrem391 remainder 12345 4.99 -> 4.73 -dqrem392 remainder 12345 4.999 -> 2.469 -dqrem393 remainder 12345 4.9999 -> 0.2469 -dqrem394 remainder 12345 5 -> 0 -dqrem395 remainder 12345 5.0001 -> 4.7532 -dqrem396 remainder 12345 5.001 -> 2.532 -dqrem397 remainder 12345 5.01 -> 0.36 -dqrem398 remainder 12345 5.1 -> 3.0 - --- the nasty division-by-1 cases -dqrem401 remainder 0.5 1 -> 0.5 -dqrem402 remainder 0.55 1 -> 0.55 -dqrem403 remainder 0.555 1 -> 0.555 -dqrem404 remainder 0.5555 1 -> 0.5555 -dqrem405 remainder 0.55555 1 -> 0.55555 -dqrem406 remainder 0.555555 1 -> 0.555555 -dqrem407 remainder 0.5555555 1 -> 0.5555555 -dqrem408 remainder 0.55555555 1 -> 0.55555555 -dqrem409 remainder 0.555555555 1 -> 0.555555555 - --- folddowns -dqrem421 remainder 1E+6144 1 -> NaN Division_impossible -dqrem422 remainder 1E+6144 1E+6143 -> 0E+6111 Clamped -dqrem423 remainder 1E+6144 2E+6143 -> 0E+6111 Clamped -dqrem424 remainder 1E+6144 3E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped -dqrem425 remainder 1E+6144 4E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped -dqrem426 remainder 1E+6144 5E+6143 -> 0E+6111 Clamped -dqrem427 remainder 1E+6144 6E+6143 -> 4.00000000000000000000000000000000E+6143 Clamped -dqrem428 remainder 1E+6144 7E+6143 -> 3.00000000000000000000000000000000E+6143 Clamped -dqrem429 remainder 1E+6144 8E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped -dqrem430 remainder 1E+6144 9E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped --- tinies -dqrem431 remainder 1E-6175 1E-6176 -> 0E-6176 -dqrem432 remainder 1E-6175 2E-6176 -> 0E-6176 -dqrem433 remainder 1E-6175 3E-6176 -> 1E-6176 Subnormal -dqrem434 remainder 1E-6175 4E-6176 -> 2E-6176 Subnormal -dqrem435 remainder 1E-6175 5E-6176 -> 0E-6176 -dqrem436 remainder 1E-6175 6E-6176 -> 4E-6176 Subnormal -dqrem437 remainder 1E-6175 7E-6176 -> 3E-6176 Subnormal -dqrem438 remainder 1E-6175 8E-6176 -> 2E-6176 Subnormal -dqrem439 remainder 1E-6175 9E-6176 -> 1E-6176 Subnormal -dqrem440 remainder 1E-6175 10E-6176 -> 0E-6176 -dqrem441 remainder 1E-6175 11E-6176 -> 1.0E-6175 Subnormal -dqrem442 remainder 100E-6175 11E-6176 -> 1.0E-6175 Subnormal -dqrem443 remainder 100E-6175 20E-6176 -> 0E-6176 -dqrem444 remainder 100E-6175 21E-6176 -> 1.3E-6175 Subnormal -dqrem445 remainder 100E-6175 30E-6176 -> 1.0E-6175 Subnormal - --- zero signs -dqrem650 remainder 1 1 -> 0 -dqrem651 remainder -1 1 -> -0 -dqrem652 remainder 1 -1 -> 0 -dqrem653 remainder -1 -1 -> -0 -dqrem654 remainder 0 1 -> 0 -dqrem655 remainder -0 1 -> -0 -dqrem656 remainder 0 -1 -> 0 -dqrem657 remainder -0 -1 -> -0 -dqrem658 remainder 0.00 1 -> 0.00 -dqrem659 remainder -0.00 1 -> -0.00 - --- Specials -dqrem680 remainder Inf -Inf -> NaN Invalid_operation -dqrem681 remainder Inf -1000 -> NaN Invalid_operation -dqrem682 remainder Inf -1 -> NaN Invalid_operation -dqrem683 remainder Inf 0 -> NaN Invalid_operation -dqrem684 remainder Inf -0 -> NaN Invalid_operation -dqrem685 remainder Inf 1 -> NaN Invalid_operation -dqrem686 remainder Inf 1000 -> NaN Invalid_operation -dqrem687 remainder Inf Inf -> NaN Invalid_operation -dqrem688 remainder -1000 Inf -> -1000 -dqrem689 remainder -Inf Inf -> NaN Invalid_operation -dqrem691 remainder -1 Inf -> -1 -dqrem692 remainder 0 Inf -> 0 -dqrem693 remainder -0 Inf -> -0 -dqrem694 remainder 1 Inf -> 1 -dqrem695 remainder 1000 Inf -> 1000 -dqrem696 remainder Inf Inf -> NaN Invalid_operation - -dqrem700 remainder -Inf -Inf -> NaN Invalid_operation -dqrem701 remainder -Inf -1000 -> NaN Invalid_operation -dqrem702 remainder -Inf -1 -> NaN Invalid_operation -dqrem703 remainder -Inf -0 -> NaN Invalid_operation -dqrem704 remainder -Inf 0 -> NaN Invalid_operation -dqrem705 remainder -Inf 1 -> NaN Invalid_operation -dqrem706 remainder -Inf 1000 -> NaN Invalid_operation -dqrem707 remainder -Inf Inf -> NaN Invalid_operation -dqrem708 remainder -Inf -Inf -> NaN Invalid_operation -dqrem709 remainder -1000 Inf -> -1000 -dqrem710 remainder -1 -Inf -> -1 -dqrem711 remainder -0 -Inf -> -0 -dqrem712 remainder 0 -Inf -> 0 -dqrem713 remainder 1 -Inf -> 1 -dqrem714 remainder 1000 -Inf -> 1000 -dqrem715 remainder Inf -Inf -> NaN Invalid_operation - -dqrem721 remainder NaN -Inf -> NaN -dqrem722 remainder NaN -1000 -> NaN -dqrem723 remainder NaN -1 -> NaN -dqrem724 remainder NaN -0 -> NaN -dqrem725 remainder -NaN 0 -> -NaN -dqrem726 remainder NaN 1 -> NaN -dqrem727 remainder NaN 1000 -> NaN -dqrem728 remainder NaN Inf -> NaN -dqrem729 remainder NaN -NaN -> NaN -dqrem730 remainder -Inf NaN -> NaN -dqrem731 remainder -1000 NaN -> NaN -dqrem732 remainder -1 NaN -> NaN -dqrem733 remainder -0 -NaN -> -NaN -dqrem734 remainder 0 NaN -> NaN -dqrem735 remainder 1 -NaN -> -NaN -dqrem736 remainder 1000 NaN -> NaN -dqrem737 remainder Inf NaN -> NaN - -dqrem741 remainder sNaN -Inf -> NaN Invalid_operation -dqrem742 remainder sNaN -1000 -> NaN Invalid_operation -dqrem743 remainder -sNaN -1 -> -NaN Invalid_operation -dqrem744 remainder sNaN -0 -> NaN Invalid_operation -dqrem745 remainder sNaN 0 -> NaN Invalid_operation -dqrem746 remainder sNaN 1 -> NaN Invalid_operation -dqrem747 remainder sNaN 1000 -> NaN Invalid_operation -dqrem749 remainder sNaN NaN -> NaN Invalid_operation -dqrem750 remainder sNaN sNaN -> NaN Invalid_operation -dqrem751 remainder NaN sNaN -> NaN Invalid_operation -dqrem752 remainder -Inf sNaN -> NaN Invalid_operation -dqrem753 remainder -1000 sNaN -> NaN Invalid_operation -dqrem754 remainder -1 sNaN -> NaN Invalid_operation -dqrem755 remainder -0 sNaN -> NaN Invalid_operation -dqrem756 remainder 0 sNaN -> NaN Invalid_operation -dqrem757 remainder 1 sNaN -> NaN Invalid_operation -dqrem758 remainder 1000 sNaN -> NaN Invalid_operation -dqrem759 remainder Inf -sNaN -> -NaN Invalid_operation - --- propagating NaNs -dqrem760 remainder NaN1 NaN7 -> NaN1 -dqrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation -dqrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation -dqrem763 remainder sNaN4 sNaN10 -> NaN4 Invalid_operation -dqrem764 remainder 15 NaN11 -> NaN11 -dqrem765 remainder NaN6 NaN12 -> NaN6 -dqrem766 remainder Inf NaN13 -> NaN13 -dqrem767 remainder NaN14 -Inf -> NaN14 -dqrem768 remainder 0 NaN15 -> NaN15 -dqrem769 remainder NaN16 -0 -> NaN16 - --- edge cases of impossible -dqrem770 remainder 1234568888888887777777777890123456 10 -> 6 -dqrem771 remainder 1234568888888887777777777890123456 1 -> 0 -dqrem772 remainder 1234568888888887777777777890123456 0.1 -> NaN Division_impossible -dqrem773 remainder 1234568888888887777777777890123456 0.01 -> NaN Division_impossible - --- long operand checks -dqrem801 remainder 12345678000 100 -> 0 -dqrem802 remainder 1 12345678000 -> 1 -dqrem803 remainder 1234567800 10 -> 0 -dqrem804 remainder 1 1234567800 -> 1 -dqrem805 remainder 1234567890 10 -> 0 -dqrem806 remainder 1 1234567890 -> 1 -dqrem807 remainder 1234567891 10 -> 1 -dqrem808 remainder 1 1234567891 -> 1 -dqrem809 remainder 12345678901 100 -> 1 -dqrem810 remainder 1 12345678901 -> 1 -dqrem811 remainder 1234567896 10 -> 6 -dqrem812 remainder 1 1234567896 -> 1 - -dqrem821 remainder 12345678000 100 -> 0 -dqrem822 remainder 1 12345678000 -> 1 -dqrem823 remainder 1234567800 10 -> 0 -dqrem824 remainder 1 1234567800 -> 1 -dqrem825 remainder 1234567890 10 -> 0 -dqrem826 remainder 1 1234567890 -> 1 -dqrem827 remainder 1234567891 10 -> 1 -dqrem828 remainder 1 1234567891 -> 1 -dqrem829 remainder 12345678901 100 -> 1 -dqrem830 remainder 1 12345678901 -> 1 -dqrem831 remainder 1234567896 10 -> 6 -dqrem832 remainder 1 1234567896 -> 1 - --- from divideint -dqrem840 remainder 100000000.0 1 -> 0.0 -dqrem841 remainder 100000000.4 1 -> 0.4 -dqrem842 remainder 100000000.5 1 -> 0.5 -dqrem843 remainder 100000000.9 1 -> 0.9 -dqrem844 remainder 100000000.999 1 -> 0.999 -dqrem850 remainder 100000003 5 -> 3 -dqrem851 remainder 10000003 5 -> 3 -dqrem852 remainder 1000003 5 -> 3 -dqrem853 remainder 100003 5 -> 3 -dqrem854 remainder 10003 5 -> 3 -dqrem855 remainder 1003 5 -> 3 -dqrem856 remainder 103 5 -> 3 -dqrem857 remainder 13 5 -> 3 -dqrem858 remainder 1 5 -> 1 - --- Vladimir's cases 1234567890123456 -dqrem860 remainder 123.0e1 1000000000000000 -> 1230 -dqrem861 remainder 1230 1000000000000000 -> 1230 -dqrem862 remainder 12.3e2 1000000000000000 -> 1230 -dqrem863 remainder 1.23e3 1000000000000000 -> 1230 -dqrem864 remainder 123e1 1000000000000000 -> 1230 -dqrem870 remainder 123e1 1000000000000000 -> 1230 -dqrem871 remainder 123e1 100000000000000 -> 1230 -dqrem872 remainder 123e1 10000000000000 -> 1230 -dqrem873 remainder 123e1 1000000000000 -> 1230 -dqrem874 remainder 123e1 100000000000 -> 1230 -dqrem875 remainder 123e1 10000000000 -> 1230 -dqrem876 remainder 123e1 1000000000 -> 1230 -dqrem877 remainder 123e1 100000000 -> 1230 -dqrem878 remainder 1230 100000000 -> 1230 -dqrem879 remainder 123e1 10000000 -> 1230 -dqrem880 remainder 123e1 1000000 -> 1230 -dqrem881 remainder 123e1 100000 -> 1230 -dqrem882 remainder 123e1 10000 -> 1230 -dqrem883 remainder 123e1 1000 -> 230 -dqrem884 remainder 123e1 100 -> 30 -dqrem885 remainder 123e1 10 -> 0 -dqrem886 remainder 123e1 1 -> 0 - -dqrem890 remainder 123e1 2000000000000000 -> 1230 -dqrem891 remainder 123e1 200000000000000 -> 1230 -dqrem892 remainder 123e1 20000000000000 -> 1230 -dqrem893 remainder 123e1 2000000000000 -> 1230 -dqrem894 remainder 123e1 200000000000 -> 1230 -dqrem895 remainder 123e1 20000000000 -> 1230 -dqrem896 remainder 123e1 2000000000 -> 1230 -dqrem897 remainder 123e1 200000000 -> 1230 -dqrem899 remainder 123e1 20000000 -> 1230 -dqrem900 remainder 123e1 2000000 -> 1230 -dqrem901 remainder 123e1 200000 -> 1230 -dqrem902 remainder 123e1 20000 -> 1230 -dqrem903 remainder 123e1 2000 -> 1230 -dqrem904 remainder 123e1 200 -> 30 -dqrem905 remainder 123e1 20 -> 10 -dqrem906 remainder 123e1 2 -> 0 - -dqrem910 remainder 123e1 5000000000000000 -> 1230 -dqrem911 remainder 123e1 500000000000000 -> 1230 -dqrem912 remainder 123e1 50000000000000 -> 1230 -dqrem913 remainder 123e1 5000000000000 -> 1230 -dqrem914 remainder 123e1 500000000000 -> 1230 -dqrem915 remainder 123e1 50000000000 -> 1230 -dqrem916 remainder 123e1 5000000000 -> 1230 -dqrem917 remainder 123e1 500000000 -> 1230 -dqrem919 remainder 123e1 50000000 -> 1230 -dqrem920 remainder 123e1 5000000 -> 1230 -dqrem921 remainder 123e1 500000 -> 1230 -dqrem922 remainder 123e1 50000 -> 1230 -dqrem923 remainder 123e1 5000 -> 1230 -dqrem924 remainder 123e1 500 -> 230 -dqrem925 remainder 123e1 50 -> 30 -dqrem926 remainder 123e1 5 -> 0 - -dqrem930 remainder 123e1 9000000000000000 -> 1230 -dqrem931 remainder 123e1 900000000000000 -> 1230 -dqrem932 remainder 123e1 90000000000000 -> 1230 -dqrem933 remainder 123e1 9000000000000 -> 1230 -dqrem934 remainder 123e1 900000000000 -> 1230 -dqrem935 remainder 123e1 90000000000 -> 1230 -dqrem936 remainder 123e1 9000000000 -> 1230 -dqrem937 remainder 123e1 900000000 -> 1230 -dqrem939 remainder 123e1 90000000 -> 1230 -dqrem940 remainder 123e1 9000000 -> 1230 -dqrem941 remainder 123e1 900000 -> 1230 -dqrem942 remainder 123e1 90000 -> 1230 -dqrem943 remainder 123e1 9000 -> 1230 -dqrem944 remainder 123e1 900 -> 330 -dqrem945 remainder 123e1 90 -> 60 -dqrem946 remainder 123e1 9 -> 6 - -dqrem950 remainder 123e1 1000000000000000 -> 1230 -dqrem961 remainder 123e1 2999999999999999 -> 1230 -dqrem962 remainder 123e1 3999999999999999 -> 1230 -dqrem963 remainder 123e1 4999999999999999 -> 1230 -dqrem964 remainder 123e1 5999999999999999 -> 1230 -dqrem965 remainder 123e1 6999999999999999 -> 1230 -dqrem966 remainder 123e1 7999999999999999 -> 1230 -dqrem967 remainder 123e1 8999999999999999 -> 1230 -dqrem968 remainder 123e1 9999999999999999 -> 1230 -dqrem969 remainder 123e1 9876543210987654 -> 1230 - -dqrem980 remainder 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally - --- overflow and underflow tests [from divide] -dqrem1051 remainder 1e+277 1e-311 -> NaN Division_impossible -dqrem1052 remainder 1e+277 -1e-311 -> NaN Division_impossible -dqrem1053 remainder -1e+277 1e-311 -> NaN Division_impossible -dqrem1054 remainder -1e+277 -1e-311 -> NaN Division_impossible -dqrem1055 remainder 1e-277 1e+311 -> 1E-277 -dqrem1056 remainder 1e-277 -1e+311 -> 1E-277 -dqrem1057 remainder -1e-277 1e+311 -> -1E-277 -dqrem1058 remainder -1e-277 -1e+311 -> -1E-277 - --- Gyuris example -dqrem1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143 - --- destructive subtract -dqrem1120 remainder 1234567890123456789012345678901234 1.000000000000000000000000000000001 -> 0.765432109876543210987654321098768 -dqrem1121 remainder 1234567890123456789012345678901234 1.00000000000000000000000000000001 -> 0.65432109876543210987654321098779 -dqrem1122 remainder 1234567890123456789012345678901234 1.0000000000000000000000000000001 -> 0.5432109876543210987654321098890 -dqrem1123 remainder 1234567890123456789012345678901255 4.000000000000000000000000000000001 -> 2.691358027469135802746913580274687 -dqrem1124 remainder 1234567890123456789012345678901234 4.000000000000000000000000000000001 -> 1.691358027469135802746913580274692 -dqrem1125 remainder 1234567890123456789012345678901234 4.9999999999999999999999999999999 -> 3.6913578024691357802469135780251 -dqrem1126 remainder 1234567890123456789012345678901234 4.99999999999999999999999999999999 -> 1.46913578024691357802469135780247 -dqrem1127 remainder 1234567890123456789012345678901234 4.999999999999999999999999999999999 -> 4.246913578024691357802469135780246 -dqrem1128 remainder 1234567890123456789012345678901234 5.0000000000000000000000000000001 -> 4.3086421975308642197530864219759 - --- Null tests -dqrem1000 remainder 10 # -> NaN Invalid_operation -dqrem1001 remainder # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqRemainder.decTest -- decQuad remainder -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks (as base, above) +dqrem001 remainder 1 1 -> 0 +dqrem002 remainder 2 1 -> 0 +dqrem003 remainder 1 2 -> 1 +dqrem004 remainder 2 2 -> 0 +dqrem005 remainder 0 1 -> 0 +dqrem006 remainder 0 2 -> 0 +dqrem007 remainder 1 3 -> 1 +dqrem008 remainder 2 3 -> 2 +dqrem009 remainder 3 3 -> 0 + +dqrem010 remainder 2.4 1 -> 0.4 +dqrem011 remainder 2.4 -1 -> 0.4 +dqrem012 remainder -2.4 1 -> -0.4 +dqrem013 remainder -2.4 -1 -> -0.4 +dqrem014 remainder 2.40 1 -> 0.40 +dqrem015 remainder 2.400 1 -> 0.400 +dqrem016 remainder 2.4 2 -> 0.4 +dqrem017 remainder 2.400 2 -> 0.400 +dqrem018 remainder 2. 2 -> 0 +dqrem019 remainder 20 20 -> 0 + +dqrem020 remainder 187 187 -> 0 +dqrem021 remainder 5 2 -> 1 +dqrem022 remainder 5 2.0 -> 1.0 +dqrem023 remainder 5 2.000 -> 1.000 +dqrem024 remainder 5 0.200 -> 0.000 +dqrem025 remainder 5 0.200 -> 0.000 + +dqrem030 remainder 1 2 -> 1 +dqrem031 remainder 1 4 -> 1 +dqrem032 remainder 1 8 -> 1 + +dqrem033 remainder 1 16 -> 1 +dqrem034 remainder 1 32 -> 1 +dqrem035 remainder 1 64 -> 1 +dqrem040 remainder 1 -2 -> 1 +dqrem041 remainder 1 -4 -> 1 +dqrem042 remainder 1 -8 -> 1 +dqrem043 remainder 1 -16 -> 1 +dqrem044 remainder 1 -32 -> 1 +dqrem045 remainder 1 -64 -> 1 +dqrem050 remainder -1 2 -> -1 +dqrem051 remainder -1 4 -> -1 +dqrem052 remainder -1 8 -> -1 +dqrem053 remainder -1 16 -> -1 +dqrem054 remainder -1 32 -> -1 +dqrem055 remainder -1 64 -> -1 +dqrem060 remainder -1 -2 -> -1 +dqrem061 remainder -1 -4 -> -1 +dqrem062 remainder -1 -8 -> -1 +dqrem063 remainder -1 -16 -> -1 +dqrem064 remainder -1 -32 -> -1 +dqrem065 remainder -1 -64 -> -1 + +dqrem066 remainder 999999999 1 -> 0 +dqrem067 remainder 999999999.4 1 -> 0.4 +dqrem068 remainder 999999999.5 1 -> 0.5 +dqrem069 remainder 999999999.9 1 -> 0.9 +dqrem070 remainder 999999999.999 1 -> 0.999 +dqrem071 remainder 999999.999999 1 -> 0.999999 +dqrem072 remainder 9 1 -> 0 + +dqrem080 remainder 0. 1 -> 0 +dqrem081 remainder .0 1 -> 0.0 +dqrem082 remainder 0.00 1 -> 0.00 +dqrem083 remainder 0.00E+9 1 -> 0 +dqrem084 remainder 0.00E+3 1 -> 0 +dqrem085 remainder 0.00E+2 1 -> 0 +dqrem086 remainder 0.00E+1 1 -> 0.0 +dqrem087 remainder 0.00E+0 1 -> 0.00 +dqrem088 remainder 0.00E-0 1 -> 0.00 +dqrem089 remainder 0.00E-1 1 -> 0.000 +dqrem090 remainder 0.00E-2 1 -> 0.0000 +dqrem091 remainder 0.00E-3 1 -> 0.00000 +dqrem092 remainder 0.00E-4 1 -> 0.000000 +dqrem093 remainder 0.00E-5 1 -> 0E-7 +dqrem094 remainder 0.00E-6 1 -> 0E-8 +dqrem095 remainder 0.0000E-50 1 -> 0E-54 + +-- Various flavours of remainder by 0 +dqrem101 remainder 0 0 -> NaN Division_undefined +dqrem102 remainder 0 -0 -> NaN Division_undefined +dqrem103 remainder -0 0 -> NaN Division_undefined +dqrem104 remainder -0 -0 -> NaN Division_undefined +dqrem105 remainder 0.0E5 0 -> NaN Division_undefined +dqrem106 remainder 0.000 0 -> NaN Division_undefined +-- [Some think this next group should be Division_by_zero exception, but +-- IEEE 854 is explicit that it is Invalid operation .. for +-- remainder-near, anyway] +dqrem107 remainder 0.0001 0 -> NaN Invalid_operation +dqrem108 remainder 0.01 0 -> NaN Invalid_operation +dqrem109 remainder 0.1 0 -> NaN Invalid_operation +dqrem110 remainder 1 0 -> NaN Invalid_operation +dqrem111 remainder 1 0.0 -> NaN Invalid_operation +dqrem112 remainder 10 0.0 -> NaN Invalid_operation +dqrem113 remainder 1E+100 0.0 -> NaN Invalid_operation +dqrem114 remainder 1E+380 0 -> NaN Invalid_operation +dqrem115 remainder 0.0001 -0 -> NaN Invalid_operation +dqrem116 remainder 0.01 -0 -> NaN Invalid_operation +dqrem119 remainder 0.1 -0 -> NaN Invalid_operation +dqrem120 remainder 1 -0 -> NaN Invalid_operation +dqrem121 remainder 1 -0.0 -> NaN Invalid_operation +dqrem122 remainder 10 -0.0 -> NaN Invalid_operation +dqrem123 remainder 1E+100 -0.0 -> NaN Invalid_operation +dqrem124 remainder 1E+384 -0 -> NaN Invalid_operation +-- and zeros on left +dqrem130 remainder 0 1 -> 0 +dqrem131 remainder 0 -1 -> 0 +dqrem132 remainder 0.0 1 -> 0.0 +dqrem133 remainder 0.0 -1 -> 0.0 +dqrem134 remainder -0 1 -> -0 +dqrem135 remainder -0 -1 -> -0 +dqrem136 remainder -0.0 1 -> -0.0 +dqrem137 remainder -0.0 -1 -> -0.0 + +-- 0.5ers +dqrem143 remainder 0.5 2 -> 0.5 +dqrem144 remainder 0.5 2.1 -> 0.5 +dqrem145 remainder 0.5 2.01 -> 0.50 +dqrem146 remainder 0.5 2.001 -> 0.500 +dqrem147 remainder 0.50 2 -> 0.50 +dqrem148 remainder 0.50 2.01 -> 0.50 +dqrem149 remainder 0.50 2.001 -> 0.500 + +-- steadies +dqrem150 remainder 1 1 -> 0 +dqrem151 remainder 1 2 -> 1 +dqrem152 remainder 1 3 -> 1 +dqrem153 remainder 1 4 -> 1 +dqrem154 remainder 1 5 -> 1 +dqrem155 remainder 1 6 -> 1 +dqrem156 remainder 1 7 -> 1 +dqrem157 remainder 1 8 -> 1 +dqrem158 remainder 1 9 -> 1 +dqrem159 remainder 1 10 -> 1 +dqrem160 remainder 1 1 -> 0 +dqrem161 remainder 2 1 -> 0 +dqrem162 remainder 3 1 -> 0 +dqrem163 remainder 4 1 -> 0 +dqrem164 remainder 5 1 -> 0 +dqrem165 remainder 6 1 -> 0 +dqrem166 remainder 7 1 -> 0 +dqrem167 remainder 8 1 -> 0 +dqrem168 remainder 9 1 -> 0 +dqrem169 remainder 10 1 -> 0 + +-- some differences from remainderNear +dqrem171 remainder 0.4 1.020 -> 0.400 +dqrem172 remainder 0.50 1.020 -> 0.500 +dqrem173 remainder 0.51 1.020 -> 0.510 +dqrem174 remainder 0.52 1.020 -> 0.520 +dqrem175 remainder 0.6 1.020 -> 0.600 + +-- More flavours of remainder by 0 +dqrem201 remainder 0 0 -> NaN Division_undefined +dqrem202 remainder 0.0E5 0 -> NaN Division_undefined +dqrem203 remainder 0.000 0 -> NaN Division_undefined +dqrem204 remainder 0.0001 0 -> NaN Invalid_operation +dqrem205 remainder 0.01 0 -> NaN Invalid_operation +dqrem206 remainder 0.1 0 -> NaN Invalid_operation +dqrem207 remainder 1 0 -> NaN Invalid_operation +dqrem208 remainder 1 0.0 -> NaN Invalid_operation +dqrem209 remainder 10 0.0 -> NaN Invalid_operation +dqrem210 remainder 1E+100 0.0 -> NaN Invalid_operation +dqrem211 remainder 1E+380 0 -> NaN Invalid_operation + +-- some differences from remainderNear +dqrem231 remainder -0.4 1.020 -> -0.400 +dqrem232 remainder -0.50 1.020 -> -0.500 +dqrem233 remainder -0.51 1.020 -> -0.510 +dqrem234 remainder -0.52 1.020 -> -0.520 +dqrem235 remainder -0.6 1.020 -> -0.600 + +-- high Xs +dqrem240 remainder 1E+2 1.00 -> 0.00 + +-- dqrem3xx are from DiagBigDecimal +dqrem301 remainder 1 3 -> 1 +dqrem302 remainder 5 5 -> 0 +dqrem303 remainder 13 10 -> 3 +dqrem304 remainder 13 50 -> 13 +dqrem305 remainder 13 100 -> 13 +dqrem306 remainder 13 1000 -> 13 +dqrem307 remainder .13 1 -> 0.13 +dqrem308 remainder 0.133 1 -> 0.133 +dqrem309 remainder 0.1033 1 -> 0.1033 +dqrem310 remainder 1.033 1 -> 0.033 +dqrem311 remainder 10.33 1 -> 0.33 +dqrem312 remainder 10.33 10 -> 0.33 +dqrem313 remainder 103.3 1 -> 0.3 +dqrem314 remainder 133 10 -> 3 +dqrem315 remainder 1033 10 -> 3 +dqrem316 remainder 1033 50 -> 33 +dqrem317 remainder 101.0 3 -> 2.0 +dqrem318 remainder 102.0 3 -> 0.0 +dqrem319 remainder 103.0 3 -> 1.0 +dqrem320 remainder 2.40 1 -> 0.40 +dqrem321 remainder 2.400 1 -> 0.400 +dqrem322 remainder 2.4 1 -> 0.4 +dqrem323 remainder 2.4 2 -> 0.4 +dqrem324 remainder 2.400 2 -> 0.400 +dqrem325 remainder 1 0.3 -> 0.1 +dqrem326 remainder 1 0.30 -> 0.10 +dqrem327 remainder 1 0.300 -> 0.100 +dqrem328 remainder 1 0.3000 -> 0.1000 +dqrem329 remainder 1.0 0.3 -> 0.1 +dqrem330 remainder 1.00 0.3 -> 0.10 +dqrem331 remainder 1.000 0.3 -> 0.100 +dqrem332 remainder 1.0000 0.3 -> 0.1000 +dqrem333 remainder 0.5 2 -> 0.5 +dqrem334 remainder 0.5 2.1 -> 0.5 +dqrem335 remainder 0.5 2.01 -> 0.50 +dqrem336 remainder 0.5 2.001 -> 0.500 +dqrem337 remainder 0.50 2 -> 0.50 +dqrem338 remainder 0.50 2.01 -> 0.50 +dqrem339 remainder 0.50 2.001 -> 0.500 + +dqrem340 remainder 0.5 0.5000001 -> 0.5000000 +dqrem341 remainder 0.5 0.50000001 -> 0.50000000 +dqrem342 remainder 0.5 0.500000001 -> 0.500000000 +dqrem343 remainder 0.5 0.5000000001 -> 0.5000000000 +dqrem344 remainder 0.5 0.50000000001 -> 0.50000000000 +dqrem345 remainder 0.5 0.4999999 -> 1E-7 +dqrem346 remainder 0.5 0.49999999 -> 1E-8 +dqrem347 remainder 0.5 0.499999999 -> 1E-9 +dqrem348 remainder 0.5 0.4999999999 -> 1E-10 +dqrem349 remainder 0.5 0.49999999999 -> 1E-11 +dqrem350 remainder 0.5 0.499999999999 -> 1E-12 + +dqrem351 remainder 0.03 7 -> 0.03 +dqrem352 remainder 5 2 -> 1 +dqrem353 remainder 4.1 2 -> 0.1 +dqrem354 remainder 4.01 2 -> 0.01 +dqrem355 remainder 4.001 2 -> 0.001 +dqrem356 remainder 4.0001 2 -> 0.0001 +dqrem357 remainder 4.00001 2 -> 0.00001 +dqrem358 remainder 4.000001 2 -> 0.000001 +dqrem359 remainder 4.0000001 2 -> 1E-7 + +dqrem360 remainder 1.2 0.7345 -> 0.4655 +dqrem361 remainder 0.8 12 -> 0.8 +dqrem362 remainder 0.8 0.2 -> 0.0 +dqrem363 remainder 0.8 0.3 -> 0.2 +dqrem364 remainder 0.800 12 -> 0.800 +dqrem365 remainder 0.800 1.7 -> 0.800 +dqrem366 remainder 2.400 2 -> 0.400 + +dqrem371 remainder 2.400 2 -> 0.400 + +dqrem381 remainder 12345 1 -> 0 +dqrem382 remainder 12345 1.0001 -> 0.7657 +dqrem383 remainder 12345 1.001 -> 0.668 +dqrem384 remainder 12345 1.01 -> 0.78 +dqrem385 remainder 12345 1.1 -> 0.8 +dqrem386 remainder 12355 4 -> 3 +dqrem387 remainder 12345 4 -> 1 +dqrem388 remainder 12355 4.0001 -> 2.6912 +dqrem389 remainder 12345 4.0001 -> 0.6914 +dqrem390 remainder 12345 4.9 -> 1.9 +dqrem391 remainder 12345 4.99 -> 4.73 +dqrem392 remainder 12345 4.999 -> 2.469 +dqrem393 remainder 12345 4.9999 -> 0.2469 +dqrem394 remainder 12345 5 -> 0 +dqrem395 remainder 12345 5.0001 -> 4.7532 +dqrem396 remainder 12345 5.001 -> 2.532 +dqrem397 remainder 12345 5.01 -> 0.36 +dqrem398 remainder 12345 5.1 -> 3.0 + +-- the nasty division-by-1 cases +dqrem401 remainder 0.5 1 -> 0.5 +dqrem402 remainder 0.55 1 -> 0.55 +dqrem403 remainder 0.555 1 -> 0.555 +dqrem404 remainder 0.5555 1 -> 0.5555 +dqrem405 remainder 0.55555 1 -> 0.55555 +dqrem406 remainder 0.555555 1 -> 0.555555 +dqrem407 remainder 0.5555555 1 -> 0.5555555 +dqrem408 remainder 0.55555555 1 -> 0.55555555 +dqrem409 remainder 0.555555555 1 -> 0.555555555 + +-- folddowns +dqrem421 remainder 1E+6144 1 -> NaN Division_impossible +dqrem422 remainder 1E+6144 1E+6143 -> 0E+6111 Clamped +dqrem423 remainder 1E+6144 2E+6143 -> 0E+6111 Clamped +dqrem424 remainder 1E+6144 3E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped +dqrem425 remainder 1E+6144 4E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped +dqrem426 remainder 1E+6144 5E+6143 -> 0E+6111 Clamped +dqrem427 remainder 1E+6144 6E+6143 -> 4.00000000000000000000000000000000E+6143 Clamped +dqrem428 remainder 1E+6144 7E+6143 -> 3.00000000000000000000000000000000E+6143 Clamped +dqrem429 remainder 1E+6144 8E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped +dqrem430 remainder 1E+6144 9E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped +-- tinies +dqrem431 remainder 1E-6175 1E-6176 -> 0E-6176 +dqrem432 remainder 1E-6175 2E-6176 -> 0E-6176 +dqrem433 remainder 1E-6175 3E-6176 -> 1E-6176 Subnormal +dqrem434 remainder 1E-6175 4E-6176 -> 2E-6176 Subnormal +dqrem435 remainder 1E-6175 5E-6176 -> 0E-6176 +dqrem436 remainder 1E-6175 6E-6176 -> 4E-6176 Subnormal +dqrem437 remainder 1E-6175 7E-6176 -> 3E-6176 Subnormal +dqrem438 remainder 1E-6175 8E-6176 -> 2E-6176 Subnormal +dqrem439 remainder 1E-6175 9E-6176 -> 1E-6176 Subnormal +dqrem440 remainder 1E-6175 10E-6176 -> 0E-6176 +dqrem441 remainder 1E-6175 11E-6176 -> 1.0E-6175 Subnormal +dqrem442 remainder 100E-6175 11E-6176 -> 1.0E-6175 Subnormal +dqrem443 remainder 100E-6175 20E-6176 -> 0E-6176 +dqrem444 remainder 100E-6175 21E-6176 -> 1.3E-6175 Subnormal +dqrem445 remainder 100E-6175 30E-6176 -> 1.0E-6175 Subnormal + +-- zero signs +dqrem650 remainder 1 1 -> 0 +dqrem651 remainder -1 1 -> -0 +dqrem652 remainder 1 -1 -> 0 +dqrem653 remainder -1 -1 -> -0 +dqrem654 remainder 0 1 -> 0 +dqrem655 remainder -0 1 -> -0 +dqrem656 remainder 0 -1 -> 0 +dqrem657 remainder -0 -1 -> -0 +dqrem658 remainder 0.00 1 -> 0.00 +dqrem659 remainder -0.00 1 -> -0.00 + +-- Specials +dqrem680 remainder Inf -Inf -> NaN Invalid_operation +dqrem681 remainder Inf -1000 -> NaN Invalid_operation +dqrem682 remainder Inf -1 -> NaN Invalid_operation +dqrem683 remainder Inf 0 -> NaN Invalid_operation +dqrem684 remainder Inf -0 -> NaN Invalid_operation +dqrem685 remainder Inf 1 -> NaN Invalid_operation +dqrem686 remainder Inf 1000 -> NaN Invalid_operation +dqrem687 remainder Inf Inf -> NaN Invalid_operation +dqrem688 remainder -1000 Inf -> -1000 +dqrem689 remainder -Inf Inf -> NaN Invalid_operation +dqrem691 remainder -1 Inf -> -1 +dqrem692 remainder 0 Inf -> 0 +dqrem693 remainder -0 Inf -> -0 +dqrem694 remainder 1 Inf -> 1 +dqrem695 remainder 1000 Inf -> 1000 +dqrem696 remainder Inf Inf -> NaN Invalid_operation + +dqrem700 remainder -Inf -Inf -> NaN Invalid_operation +dqrem701 remainder -Inf -1000 -> NaN Invalid_operation +dqrem702 remainder -Inf -1 -> NaN Invalid_operation +dqrem703 remainder -Inf -0 -> NaN Invalid_operation +dqrem704 remainder -Inf 0 -> NaN Invalid_operation +dqrem705 remainder -Inf 1 -> NaN Invalid_operation +dqrem706 remainder -Inf 1000 -> NaN Invalid_operation +dqrem707 remainder -Inf Inf -> NaN Invalid_operation +dqrem708 remainder -Inf -Inf -> NaN Invalid_operation +dqrem709 remainder -1000 Inf -> -1000 +dqrem710 remainder -1 -Inf -> -1 +dqrem711 remainder -0 -Inf -> -0 +dqrem712 remainder 0 -Inf -> 0 +dqrem713 remainder 1 -Inf -> 1 +dqrem714 remainder 1000 -Inf -> 1000 +dqrem715 remainder Inf -Inf -> NaN Invalid_operation + +dqrem721 remainder NaN -Inf -> NaN +dqrem722 remainder NaN -1000 -> NaN +dqrem723 remainder NaN -1 -> NaN +dqrem724 remainder NaN -0 -> NaN +dqrem725 remainder -NaN 0 -> -NaN +dqrem726 remainder NaN 1 -> NaN +dqrem727 remainder NaN 1000 -> NaN +dqrem728 remainder NaN Inf -> NaN +dqrem729 remainder NaN -NaN -> NaN +dqrem730 remainder -Inf NaN -> NaN +dqrem731 remainder -1000 NaN -> NaN +dqrem732 remainder -1 NaN -> NaN +dqrem733 remainder -0 -NaN -> -NaN +dqrem734 remainder 0 NaN -> NaN +dqrem735 remainder 1 -NaN -> -NaN +dqrem736 remainder 1000 NaN -> NaN +dqrem737 remainder Inf NaN -> NaN + +dqrem741 remainder sNaN -Inf -> NaN Invalid_operation +dqrem742 remainder sNaN -1000 -> NaN Invalid_operation +dqrem743 remainder -sNaN -1 -> -NaN Invalid_operation +dqrem744 remainder sNaN -0 -> NaN Invalid_operation +dqrem745 remainder sNaN 0 -> NaN Invalid_operation +dqrem746 remainder sNaN 1 -> NaN Invalid_operation +dqrem747 remainder sNaN 1000 -> NaN Invalid_operation +dqrem749 remainder sNaN NaN -> NaN Invalid_operation +dqrem750 remainder sNaN sNaN -> NaN Invalid_operation +dqrem751 remainder NaN sNaN -> NaN Invalid_operation +dqrem752 remainder -Inf sNaN -> NaN Invalid_operation +dqrem753 remainder -1000 sNaN -> NaN Invalid_operation +dqrem754 remainder -1 sNaN -> NaN Invalid_operation +dqrem755 remainder -0 sNaN -> NaN Invalid_operation +dqrem756 remainder 0 sNaN -> NaN Invalid_operation +dqrem757 remainder 1 sNaN -> NaN Invalid_operation +dqrem758 remainder 1000 sNaN -> NaN Invalid_operation +dqrem759 remainder Inf -sNaN -> -NaN Invalid_operation + +-- propagating NaNs +dqrem760 remainder NaN1 NaN7 -> NaN1 +dqrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation +dqrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation +dqrem763 remainder sNaN4 sNaN10 -> NaN4 Invalid_operation +dqrem764 remainder 15 NaN11 -> NaN11 +dqrem765 remainder NaN6 NaN12 -> NaN6 +dqrem766 remainder Inf NaN13 -> NaN13 +dqrem767 remainder NaN14 -Inf -> NaN14 +dqrem768 remainder 0 NaN15 -> NaN15 +dqrem769 remainder NaN16 -0 -> NaN16 + +-- edge cases of impossible +dqrem770 remainder 1234568888888887777777777890123456 10 -> 6 +dqrem771 remainder 1234568888888887777777777890123456 1 -> 0 +dqrem772 remainder 1234568888888887777777777890123456 0.1 -> NaN Division_impossible +dqrem773 remainder 1234568888888887777777777890123456 0.01 -> NaN Division_impossible + +-- long operand checks +dqrem801 remainder 12345678000 100 -> 0 +dqrem802 remainder 1 12345678000 -> 1 +dqrem803 remainder 1234567800 10 -> 0 +dqrem804 remainder 1 1234567800 -> 1 +dqrem805 remainder 1234567890 10 -> 0 +dqrem806 remainder 1 1234567890 -> 1 +dqrem807 remainder 1234567891 10 -> 1 +dqrem808 remainder 1 1234567891 -> 1 +dqrem809 remainder 12345678901 100 -> 1 +dqrem810 remainder 1 12345678901 -> 1 +dqrem811 remainder 1234567896 10 -> 6 +dqrem812 remainder 1 1234567896 -> 1 + +dqrem821 remainder 12345678000 100 -> 0 +dqrem822 remainder 1 12345678000 -> 1 +dqrem823 remainder 1234567800 10 -> 0 +dqrem824 remainder 1 1234567800 -> 1 +dqrem825 remainder 1234567890 10 -> 0 +dqrem826 remainder 1 1234567890 -> 1 +dqrem827 remainder 1234567891 10 -> 1 +dqrem828 remainder 1 1234567891 -> 1 +dqrem829 remainder 12345678901 100 -> 1 +dqrem830 remainder 1 12345678901 -> 1 +dqrem831 remainder 1234567896 10 -> 6 +dqrem832 remainder 1 1234567896 -> 1 + +-- from divideint +dqrem840 remainder 100000000.0 1 -> 0.0 +dqrem841 remainder 100000000.4 1 -> 0.4 +dqrem842 remainder 100000000.5 1 -> 0.5 +dqrem843 remainder 100000000.9 1 -> 0.9 +dqrem844 remainder 100000000.999 1 -> 0.999 +dqrem850 remainder 100000003 5 -> 3 +dqrem851 remainder 10000003 5 -> 3 +dqrem852 remainder 1000003 5 -> 3 +dqrem853 remainder 100003 5 -> 3 +dqrem854 remainder 10003 5 -> 3 +dqrem855 remainder 1003 5 -> 3 +dqrem856 remainder 103 5 -> 3 +dqrem857 remainder 13 5 -> 3 +dqrem858 remainder 1 5 -> 1 + +-- Vladimir's cases 1234567890123456 +dqrem860 remainder 123.0e1 1000000000000000 -> 1230 +dqrem861 remainder 1230 1000000000000000 -> 1230 +dqrem862 remainder 12.3e2 1000000000000000 -> 1230 +dqrem863 remainder 1.23e3 1000000000000000 -> 1230 +dqrem864 remainder 123e1 1000000000000000 -> 1230 +dqrem870 remainder 123e1 1000000000000000 -> 1230 +dqrem871 remainder 123e1 100000000000000 -> 1230 +dqrem872 remainder 123e1 10000000000000 -> 1230 +dqrem873 remainder 123e1 1000000000000 -> 1230 +dqrem874 remainder 123e1 100000000000 -> 1230 +dqrem875 remainder 123e1 10000000000 -> 1230 +dqrem876 remainder 123e1 1000000000 -> 1230 +dqrem877 remainder 123e1 100000000 -> 1230 +dqrem878 remainder 1230 100000000 -> 1230 +dqrem879 remainder 123e1 10000000 -> 1230 +dqrem880 remainder 123e1 1000000 -> 1230 +dqrem881 remainder 123e1 100000 -> 1230 +dqrem882 remainder 123e1 10000 -> 1230 +dqrem883 remainder 123e1 1000 -> 230 +dqrem884 remainder 123e1 100 -> 30 +dqrem885 remainder 123e1 10 -> 0 +dqrem886 remainder 123e1 1 -> 0 + +dqrem890 remainder 123e1 2000000000000000 -> 1230 +dqrem891 remainder 123e1 200000000000000 -> 1230 +dqrem892 remainder 123e1 20000000000000 -> 1230 +dqrem893 remainder 123e1 2000000000000 -> 1230 +dqrem894 remainder 123e1 200000000000 -> 1230 +dqrem895 remainder 123e1 20000000000 -> 1230 +dqrem896 remainder 123e1 2000000000 -> 1230 +dqrem897 remainder 123e1 200000000 -> 1230 +dqrem899 remainder 123e1 20000000 -> 1230 +dqrem900 remainder 123e1 2000000 -> 1230 +dqrem901 remainder 123e1 200000 -> 1230 +dqrem902 remainder 123e1 20000 -> 1230 +dqrem903 remainder 123e1 2000 -> 1230 +dqrem904 remainder 123e1 200 -> 30 +dqrem905 remainder 123e1 20 -> 10 +dqrem906 remainder 123e1 2 -> 0 + +dqrem910 remainder 123e1 5000000000000000 -> 1230 +dqrem911 remainder 123e1 500000000000000 -> 1230 +dqrem912 remainder 123e1 50000000000000 -> 1230 +dqrem913 remainder 123e1 5000000000000 -> 1230 +dqrem914 remainder 123e1 500000000000 -> 1230 +dqrem915 remainder 123e1 50000000000 -> 1230 +dqrem916 remainder 123e1 5000000000 -> 1230 +dqrem917 remainder 123e1 500000000 -> 1230 +dqrem919 remainder 123e1 50000000 -> 1230 +dqrem920 remainder 123e1 5000000 -> 1230 +dqrem921 remainder 123e1 500000 -> 1230 +dqrem922 remainder 123e1 50000 -> 1230 +dqrem923 remainder 123e1 5000 -> 1230 +dqrem924 remainder 123e1 500 -> 230 +dqrem925 remainder 123e1 50 -> 30 +dqrem926 remainder 123e1 5 -> 0 + +dqrem930 remainder 123e1 9000000000000000 -> 1230 +dqrem931 remainder 123e1 900000000000000 -> 1230 +dqrem932 remainder 123e1 90000000000000 -> 1230 +dqrem933 remainder 123e1 9000000000000 -> 1230 +dqrem934 remainder 123e1 900000000000 -> 1230 +dqrem935 remainder 123e1 90000000000 -> 1230 +dqrem936 remainder 123e1 9000000000 -> 1230 +dqrem937 remainder 123e1 900000000 -> 1230 +dqrem939 remainder 123e1 90000000 -> 1230 +dqrem940 remainder 123e1 9000000 -> 1230 +dqrem941 remainder 123e1 900000 -> 1230 +dqrem942 remainder 123e1 90000 -> 1230 +dqrem943 remainder 123e1 9000 -> 1230 +dqrem944 remainder 123e1 900 -> 330 +dqrem945 remainder 123e1 90 -> 60 +dqrem946 remainder 123e1 9 -> 6 + +dqrem950 remainder 123e1 1000000000000000 -> 1230 +dqrem961 remainder 123e1 2999999999999999 -> 1230 +dqrem962 remainder 123e1 3999999999999999 -> 1230 +dqrem963 remainder 123e1 4999999999999999 -> 1230 +dqrem964 remainder 123e1 5999999999999999 -> 1230 +dqrem965 remainder 123e1 6999999999999999 -> 1230 +dqrem966 remainder 123e1 7999999999999999 -> 1230 +dqrem967 remainder 123e1 8999999999999999 -> 1230 +dqrem968 remainder 123e1 9999999999999999 -> 1230 +dqrem969 remainder 123e1 9876543210987654 -> 1230 + +dqrem980 remainder 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally + +-- overflow and underflow tests [from divide] +dqrem1051 remainder 1e+277 1e-311 -> NaN Division_impossible +dqrem1052 remainder 1e+277 -1e-311 -> NaN Division_impossible +dqrem1053 remainder -1e+277 1e-311 -> NaN Division_impossible +dqrem1054 remainder -1e+277 -1e-311 -> NaN Division_impossible +dqrem1055 remainder 1e-277 1e+311 -> 1E-277 +dqrem1056 remainder 1e-277 -1e+311 -> 1E-277 +dqrem1057 remainder -1e-277 1e+311 -> -1E-277 +dqrem1058 remainder -1e-277 -1e+311 -> -1E-277 + +-- Gyuris example +dqrem1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143 + +-- destructive subtract +dqrem1120 remainder 1234567890123456789012345678901234 1.000000000000000000000000000000001 -> 0.765432109876543210987654321098768 +dqrem1121 remainder 1234567890123456789012345678901234 1.00000000000000000000000000000001 -> 0.65432109876543210987654321098779 +dqrem1122 remainder 1234567890123456789012345678901234 1.0000000000000000000000000000001 -> 0.5432109876543210987654321098890 +dqrem1123 remainder 1234567890123456789012345678901255 4.000000000000000000000000000000001 -> 2.691358027469135802746913580274687 +dqrem1124 remainder 1234567890123456789012345678901234 4.000000000000000000000000000000001 -> 1.691358027469135802746913580274692 +dqrem1125 remainder 1234567890123456789012345678901234 4.9999999999999999999999999999999 -> 3.6913578024691357802469135780251 +dqrem1126 remainder 1234567890123456789012345678901234 4.99999999999999999999999999999999 -> 1.46913578024691357802469135780247 +dqrem1127 remainder 1234567890123456789012345678901234 4.999999999999999999999999999999999 -> 4.246913578024691357802469135780246 +dqrem1128 remainder 1234567890123456789012345678901234 5.0000000000000000000000000000001 -> 4.3086421975308642197530864219759 + +-- Null tests +dqrem1000 remainder 10 # -> NaN Invalid_operation +dqrem1001 remainder # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqRemainderNear.decTest b/Lib/test/decimaltestdata/dqRemainderNear.decTest index 36ef1cc1e35..2c5c3f5074e 100644 --- a/Lib/test/decimaltestdata/dqRemainderNear.decTest +++ b/Lib/test/decimaltestdata/dqRemainderNear.decTest @@ -1,631 +1,631 @@ ------------------------------------------------------------------------- --- dqRemainderNear.decTest -- decQuad remainder-near -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- sanity checks (as base, above) -dqrmn001 remaindernear 1 1 -> 0 -dqrmn002 remaindernear 2 1 -> 0 -dqrmn003 remaindernear 1 2 -> 1 -dqrmn004 remaindernear 2 2 -> 0 -dqrmn005 remaindernear 0 1 -> 0 -dqrmn006 remaindernear 0 2 -> 0 -dqrmn007 remaindernear 1 3 -> 1 -dqrmn008 remaindernear 2 3 -> -1 -dqrmn009 remaindernear 3 3 -> 0 - -dqrmn010 remaindernear 2.4 1 -> 0.4 -dqrmn011 remaindernear 2.4 -1 -> 0.4 -dqrmn012 remaindernear -2.4 1 -> -0.4 -dqrmn013 remaindernear -2.4 -1 -> -0.4 -dqrmn014 remaindernear 2.40 1 -> 0.40 -dqrmn015 remaindernear 2.400 1 -> 0.400 -dqrmn016 remaindernear 2.4 2 -> 0.4 -dqrmn017 remaindernear 2.400 2 -> 0.400 -dqrmn018 remaindernear 2. 2 -> 0 -dqrmn019 remaindernear 20 20 -> 0 - -dqrmn020 remaindernear 187 187 -> 0 -dqrmn021 remaindernear 5 2 -> 1 -dqrmn022 remaindernear 5 2.0 -> 1.0 -dqrmn023 remaindernear 5 2.000 -> 1.000 -dqrmn024 remaindernear 5 0.200 -> 0.000 -dqrmn025 remaindernear 5 0.200 -> 0.000 - -dqrmn030 remaindernear 1 2 -> 1 -dqrmn031 remaindernear 1 4 -> 1 -dqrmn032 remaindernear 1 8 -> 1 - -dqrmn033 remaindernear 1 16 -> 1 -dqrmn034 remaindernear 1 32 -> 1 -dqrmn035 remaindernear 1 64 -> 1 -dqrmn040 remaindernear 1 -2 -> 1 -dqrmn041 remaindernear 1 -4 -> 1 -dqrmn042 remaindernear 1 -8 -> 1 -dqrmn043 remaindernear 1 -16 -> 1 -dqrmn044 remaindernear 1 -32 -> 1 -dqrmn045 remaindernear 1 -64 -> 1 -dqrmn050 remaindernear -1 2 -> -1 -dqrmn051 remaindernear -1 4 -> -1 -dqrmn052 remaindernear -1 8 -> -1 -dqrmn053 remaindernear -1 16 -> -1 -dqrmn054 remaindernear -1 32 -> -1 -dqrmn055 remaindernear -1 64 -> -1 -dqrmn060 remaindernear -1 -2 -> -1 -dqrmn061 remaindernear -1 -4 -> -1 -dqrmn062 remaindernear -1 -8 -> -1 -dqrmn063 remaindernear -1 -16 -> -1 -dqrmn064 remaindernear -1 -32 -> -1 -dqrmn065 remaindernear -1 -64 -> -1 - -dqrmn066 remaindernear 9.9 1 -> -0.1 -dqrmn067 remaindernear 99.7 1 -> -0.3 -dqrmn068 remaindernear 999999999 1 -> 0 -dqrmn069 remaindernear 999999999.4 1 -> 0.4 -dqrmn070 remaindernear 999999999.5 1 -> -0.5 -dqrmn071 remaindernear 999999999.9 1 -> -0.1 -dqrmn072 remaindernear 999999999.999 1 -> -0.001 -dqrmn073 remaindernear 999999.999999 1 -> -0.000001 -dqrmn074 remaindernear 9 1 -> 0 -dqrmn075 remaindernear 9999999999999999 1 -> 0 -dqrmn076 remaindernear 9999999999999999 2 -> -1 -dqrmn077 remaindernear 9999999999999999 3 -> 0 -dqrmn078 remaindernear 9999999999999999 4 -> -1 - -dqrmn080 remaindernear 0. 1 -> 0 -dqrmn081 remaindernear .0 1 -> 0.0 -dqrmn082 remaindernear 0.00 1 -> 0.00 -dqrmn083 remaindernear 0.00E+9 1 -> 0 -dqrmn084 remaindernear 0.00E+3 1 -> 0 -dqrmn085 remaindernear 0.00E+2 1 -> 0 -dqrmn086 remaindernear 0.00E+1 1 -> 0.0 -dqrmn087 remaindernear 0.00E+0 1 -> 0.00 -dqrmn088 remaindernear 0.00E-0 1 -> 0.00 -dqrmn089 remaindernear 0.00E-1 1 -> 0.000 -dqrmn090 remaindernear 0.00E-2 1 -> 0.0000 -dqrmn091 remaindernear 0.00E-3 1 -> 0.00000 -dqrmn092 remaindernear 0.00E-4 1 -> 0.000000 -dqrmn093 remaindernear 0.00E-5 1 -> 0E-7 -dqrmn094 remaindernear 0.00E-6 1 -> 0E-8 -dqrmn095 remaindernear 0.0000E-50 1 -> 0E-54 - --- Various flavours of remaindernear by 0 -dqrmn101 remaindernear 0 0 -> NaN Division_undefined -dqrmn102 remaindernear 0 -0 -> NaN Division_undefined -dqrmn103 remaindernear -0 0 -> NaN Division_undefined -dqrmn104 remaindernear -0 -0 -> NaN Division_undefined -dqrmn105 remaindernear 0.0E5 0 -> NaN Division_undefined -dqrmn106 remaindernear 0.000 0 -> NaN Division_undefined --- [Some think this next group should be Division_by_zero exception, but --- IEEE 854 is explicit that it is Invalid operation .. for --- remainder-near, anyway] -dqrmn107 remaindernear 0.0001 0 -> NaN Invalid_operation -dqrmn108 remaindernear 0.01 0 -> NaN Invalid_operation -dqrmn109 remaindernear 0.1 0 -> NaN Invalid_operation -dqrmn110 remaindernear 1 0 -> NaN Invalid_operation -dqrmn111 remaindernear 1 0.0 -> NaN Invalid_operation -dqrmn112 remaindernear 10 0.0 -> NaN Invalid_operation -dqrmn113 remaindernear 1E+100 0.0 -> NaN Invalid_operation -dqrmn114 remaindernear 1E+380 0 -> NaN Invalid_operation -dqrmn115 remaindernear 0.0001 -0 -> NaN Invalid_operation -dqrmn116 remaindernear 0.01 -0 -> NaN Invalid_operation -dqrmn119 remaindernear 0.1 -0 -> NaN Invalid_operation -dqrmn120 remaindernear 1 -0 -> NaN Invalid_operation -dqrmn121 remaindernear 1 -0.0 -> NaN Invalid_operation -dqrmn122 remaindernear 10 -0.0 -> NaN Invalid_operation -dqrmn123 remaindernear 1E+100 -0.0 -> NaN Invalid_operation -dqrmn124 remaindernear 1E+384 -0 -> NaN Invalid_operation --- and zeros on left -dqrmn130 remaindernear 0 1 -> 0 -dqrmn131 remaindernear 0 -1 -> 0 -dqrmn132 remaindernear 0.0 1 -> 0.0 -dqrmn133 remaindernear 0.0 -1 -> 0.0 -dqrmn134 remaindernear -0 1 -> -0 -dqrmn135 remaindernear -0 -1 -> -0 -dqrmn136 remaindernear -0.0 1 -> -0.0 -dqrmn137 remaindernear -0.0 -1 -> -0.0 - --- 0.5ers -dqrmn143 remaindernear 0.5 2 -> 0.5 -dqrmn144 remaindernear 0.5 2.1 -> 0.5 -dqrmn145 remaindernear 0.5 2.01 -> 0.50 -dqrmn146 remaindernear 0.5 2.001 -> 0.500 -dqrmn147 remaindernear 0.50 2 -> 0.50 -dqrmn148 remaindernear 0.50 2.01 -> 0.50 -dqrmn149 remaindernear 0.50 2.001 -> 0.500 - --- steadies -dqrmn150 remaindernear 1 1 -> 0 -dqrmn151 remaindernear 1 2 -> 1 -dqrmn152 remaindernear 1 3 -> 1 -dqrmn153 remaindernear 1 4 -> 1 -dqrmn154 remaindernear 1 5 -> 1 -dqrmn155 remaindernear 1 6 -> 1 -dqrmn156 remaindernear 1 7 -> 1 -dqrmn157 remaindernear 1 8 -> 1 -dqrmn158 remaindernear 1 9 -> 1 -dqrmn159 remaindernear 1 10 -> 1 -dqrmn160 remaindernear 1 1 -> 0 -dqrmn161 remaindernear 2 1 -> 0 -dqrmn162 remaindernear 3 1 -> 0 -dqrmn163 remaindernear 4 1 -> 0 -dqrmn164 remaindernear 5 1 -> 0 -dqrmn165 remaindernear 6 1 -> 0 -dqrmn166 remaindernear 7 1 -> 0 -dqrmn167 remaindernear 8 1 -> 0 -dqrmn168 remaindernear 9 1 -> 0 -dqrmn169 remaindernear 10 1 -> 0 - --- some differences from remainder -dqrmn171 remaindernear 0.4 1.020 -> 0.400 -dqrmn172 remaindernear 0.50 1.020 -> 0.500 -dqrmn173 remaindernear 0.51 1.020 -> 0.510 -dqrmn174 remaindernear 0.52 1.020 -> -0.500 -dqrmn175 remaindernear 0.6 1.020 -> -0.420 - --- More flavours of remaindernear by 0 -dqrmn201 remaindernear 0 0 -> NaN Division_undefined -dqrmn202 remaindernear 0.0E5 0 -> NaN Division_undefined -dqrmn203 remaindernear 0.000 0 -> NaN Division_undefined -dqrmn204 remaindernear 0.0001 0 -> NaN Invalid_operation -dqrmn205 remaindernear 0.01 0 -> NaN Invalid_operation -dqrmn206 remaindernear 0.1 0 -> NaN Invalid_operation -dqrmn207 remaindernear 1 0 -> NaN Invalid_operation -dqrmn208 remaindernear 1 0.0 -> NaN Invalid_operation -dqrmn209 remaindernear 10 0.0 -> NaN Invalid_operation -dqrmn210 remaindernear 1E+100 0.0 -> NaN Invalid_operation -dqrmn211 remaindernear 1E+380 0 -> NaN Invalid_operation - --- tests from the extended specification -dqrmn221 remaindernear 2.1 3 -> -0.9 -dqrmn222 remaindernear 10 6 -> -2 -dqrmn223 remaindernear 10 3 -> 1 -dqrmn224 remaindernear -10 3 -> -1 -dqrmn225 remaindernear 10.2 1 -> 0.2 -dqrmn226 remaindernear 10 0.3 -> 0.1 -dqrmn227 remaindernear 3.6 1.3 -> -0.3 - --- some differences from remainder -dqrmn231 remaindernear -0.4 1.020 -> -0.400 -dqrmn232 remaindernear -0.50 1.020 -> -0.500 -dqrmn233 remaindernear -0.51 1.020 -> -0.510 -dqrmn234 remaindernear -0.52 1.020 -> 0.500 -dqrmn235 remaindernear -0.6 1.020 -> 0.420 - --- high Xs -dqrmn240 remaindernear 1E+2 1.00 -> 0.00 - --- dqrmn3xx are from DiagBigDecimal -dqrmn301 remaindernear 1 3 -> 1 -dqrmn302 remaindernear 5 5 -> 0 -dqrmn303 remaindernear 13 10 -> 3 -dqrmn304 remaindernear 13 50 -> 13 -dqrmn305 remaindernear 13 100 -> 13 -dqrmn306 remaindernear 13 1000 -> 13 -dqrmn307 remaindernear .13 1 -> 0.13 -dqrmn308 remaindernear 0.133 1 -> 0.133 -dqrmn309 remaindernear 0.1033 1 -> 0.1033 -dqrmn310 remaindernear 1.033 1 -> 0.033 -dqrmn311 remaindernear 10.33 1 -> 0.33 -dqrmn312 remaindernear 10.33 10 -> 0.33 -dqrmn313 remaindernear 103.3 1 -> 0.3 -dqrmn314 remaindernear 133 10 -> 3 -dqrmn315 remaindernear 1033 10 -> 3 -dqrmn316 remaindernear 1033 50 -> -17 -dqrmn317 remaindernear 101.0 3 -> -1.0 -dqrmn318 remaindernear 102.0 3 -> 0.0 -dqrmn319 remaindernear 103.0 3 -> 1.0 -dqrmn320 remaindernear 2.40 1 -> 0.40 -dqrmn321 remaindernear 2.400 1 -> 0.400 -dqrmn322 remaindernear 2.4 1 -> 0.4 -dqrmn323 remaindernear 2.4 2 -> 0.4 -dqrmn324 remaindernear 2.400 2 -> 0.400 -dqrmn325 remaindernear 1 0.3 -> 0.1 -dqrmn326 remaindernear 1 0.30 -> 0.10 -dqrmn327 remaindernear 1 0.300 -> 0.100 -dqrmn328 remaindernear 1 0.3000 -> 0.1000 -dqrmn329 remaindernear 1.0 0.3 -> 0.1 -dqrmn330 remaindernear 1.00 0.3 -> 0.10 -dqrmn331 remaindernear 1.000 0.3 -> 0.100 -dqrmn332 remaindernear 1.0000 0.3 -> 0.1000 -dqrmn333 remaindernear 0.5 2 -> 0.5 -dqrmn334 remaindernear 0.5 2.1 -> 0.5 -dqrmn335 remaindernear 0.5 2.01 -> 0.50 -dqrmn336 remaindernear 0.5 2.001 -> 0.500 -dqrmn337 remaindernear 0.50 2 -> 0.50 -dqrmn338 remaindernear 0.50 2.01 -> 0.50 -dqrmn339 remaindernear 0.50 2.001 -> 0.500 - -dqrmn340 remaindernear 0.5 0.5000001 -> -1E-7 -dqrmn341 remaindernear 0.5 0.50000001 -> -1E-8 -dqrmn342 remaindernear 0.5 0.500000001 -> -1E-9 -dqrmn343 remaindernear 0.5 0.5000000001 -> -1E-10 -dqrmn344 remaindernear 0.5 0.50000000001 -> -1E-11 -dqrmn345 remaindernear 0.5 0.4999999 -> 1E-7 -dqrmn346 remaindernear 0.5 0.49999999 -> 1E-8 -dqrmn347 remaindernear 0.5 0.499999999 -> 1E-9 -dqrmn348 remaindernear 0.5 0.4999999999 -> 1E-10 -dqrmn349 remaindernear 0.5 0.49999999999 -> 1E-11 -dqrmn350 remaindernear 0.5 0.499999999999 -> 1E-12 - -dqrmn351 remaindernear 0.03 7 -> 0.03 -dqrmn352 remaindernear 5 2 -> 1 -dqrmn353 remaindernear 4.1 2 -> 0.1 -dqrmn354 remaindernear 4.01 2 -> 0.01 -dqrmn355 remaindernear 4.001 2 -> 0.001 -dqrmn356 remaindernear 4.0001 2 -> 0.0001 -dqrmn357 remaindernear 4.00001 2 -> 0.00001 -dqrmn358 remaindernear 4.000001 2 -> 0.000001 -dqrmn359 remaindernear 4.0000001 2 -> 1E-7 - -dqrmn360 remaindernear 1.2 0.7345 -> -0.2690 -dqrmn361 remaindernear 0.8 12 -> 0.8 -dqrmn362 remaindernear 0.8 0.2 -> 0.0 -dqrmn363 remaindernear 0.8 0.3 -> -0.1 -dqrmn364 remaindernear 0.800 12 -> 0.800 -dqrmn365 remaindernear 0.800 1.7 -> 0.800 -dqrmn366 remaindernear 2.400 2 -> 0.400 - --- round to even -dqrmn371 remaindernear 121 2 -> 1 -dqrmn372 remaindernear 122 2 -> 0 -dqrmn373 remaindernear 123 2 -> -1 -dqrmn374 remaindernear 124 2 -> 0 -dqrmn375 remaindernear 125 2 -> 1 -dqrmn376 remaindernear 126 2 -> 0 -dqrmn377 remaindernear 127 2 -> -1 - -dqrmn381 remaindernear 12345 1 -> 0 -dqrmn382 remaindernear 12345 1.0001 -> -0.2344 -dqrmn383 remaindernear 12345 1.001 -> -0.333 -dqrmn384 remaindernear 12345 1.01 -> -0.23 -dqrmn385 remaindernear 12345 1.1 -> -0.3 -dqrmn386 remaindernear 12355 4 -> -1 -dqrmn387 remaindernear 12345 4 -> 1 -dqrmn388 remaindernear 12355 4.0001 -> -1.3089 -dqrmn389 remaindernear 12345 4.0001 -> 0.6914 -dqrmn390 remaindernear 12345 4.9 -> 1.9 -dqrmn391 remaindernear 12345 4.99 -> -0.26 -dqrmn392 remaindernear 12345 4.999 -> 2.469 -dqrmn393 remaindernear 12345 4.9999 -> 0.2469 -dqrmn394 remaindernear 12345 5 -> 0 -dqrmn395 remaindernear 12345 5.0001 -> -0.2469 -dqrmn396 remaindernear 12345 5.001 -> -2.469 -dqrmn397 remaindernear 12345 5.01 -> 0.36 -dqrmn398 remaindernear 12345 5.1 -> -2.1 - --- the nasty division-by-1 cases -dqrmn401 remaindernear 0.4 1 -> 0.4 -dqrmn402 remaindernear 0.45 1 -> 0.45 -dqrmn403 remaindernear 0.455 1 -> 0.455 -dqrmn404 remaindernear 0.4555 1 -> 0.4555 -dqrmn405 remaindernear 0.45555 1 -> 0.45555 -dqrmn406 remaindernear 0.455555 1 -> 0.455555 -dqrmn407 remaindernear 0.4555555 1 -> 0.4555555 -dqrmn408 remaindernear 0.45555555 1 -> 0.45555555 -dqrmn409 remaindernear 0.455555555 1 -> 0.455555555 --- with spill... [412 exercises sticktab loop] -dqrmn411 remaindernear 0.5 1 -> 0.5 -dqrmn412 remaindernear 0.55 1 -> -0.45 -dqrmn413 remaindernear 0.555 1 -> -0.445 -dqrmn414 remaindernear 0.5555 1 -> -0.4445 -dqrmn415 remaindernear 0.55555 1 -> -0.44445 -dqrmn416 remaindernear 0.555555 1 -> -0.444445 -dqrmn417 remaindernear 0.5555555 1 -> -0.4444445 -dqrmn418 remaindernear 0.55555555 1 -> -0.44444445 -dqrmn419 remaindernear 0.555555555 1 -> -0.444444445 - --- folddowns -dqrmn421 remaindernear 1E+6144 1 -> NaN Division_impossible -dqrmn422 remaindernear 1E+6144 1E+6143 -> 0E+6111 Clamped -dqrmn423 remaindernear 1E+6144 2E+6143 -> 0E+6111 Clamped -dqrmn424 remaindernear 1E+6144 3E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped -dqrmn425 remaindernear 1E+6144 4E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped -dqrmn426 remaindernear 1E+6144 5E+6143 -> 0E+6111 Clamped -dqrmn427 remaindernear 1E+6144 6E+6143 -> -2.00000000000000000000000000000000E+6143 Clamped -dqrmn428 remaindernear 1E+6144 7E+6143 -> 3.00000000000000000000000000000000E+6143 Clamped -dqrmn429 remaindernear 1E+6144 8E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped -dqrmn430 remaindernear 1E+6144 9E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped --- tinies -dqrmn431 remaindernear 1E-6175 1E-6176 -> 0E-6176 -dqrmn432 remaindernear 1E-6175 2E-6176 -> 0E-6176 -dqrmn433 remaindernear 1E-6175 3E-6176 -> 1E-6176 Subnormal -dqrmn434 remaindernear 1E-6175 4E-6176 -> 2E-6176 Subnormal -dqrmn435 remaindernear 1E-6175 5E-6176 -> 0E-6176 -dqrmn436 remaindernear 1E-6175 6E-6176 -> -2E-6176 Subnormal -dqrmn437 remaindernear 1E-6175 7E-6176 -> 3E-6176 Subnormal -dqrmn438 remaindernear 1E-6175 8E-6176 -> 2E-6176 Subnormal -dqrmn439 remaindernear 1E-6175 9E-6176 -> 1E-6176 Subnormal -dqrmn440 remaindernear 1E-6175 10E-6176 -> 0E-6176 -dqrmn441 remaindernear 1E-6175 11E-6176 -> -1E-6176 Subnormal -dqrmn442 remaindernear 100E-6175 11E-6176 -> -1E-6176 Subnormal -dqrmn443 remaindernear 100E-6175 20E-6176 -> 0E-6176 -dqrmn444 remaindernear 100E-6175 21E-6176 -> -8E-6176 Subnormal -dqrmn445 remaindernear 100E-6175 30E-6176 -> 1.0E-6175 Subnormal - --- zero signs -dqrmn650 remaindernear 1 1 -> 0 -dqrmn651 remaindernear -1 1 -> -0 -dqrmn652 remaindernear 1 -1 -> 0 -dqrmn653 remaindernear -1 -1 -> -0 -dqrmn654 remaindernear 0 1 -> 0 -dqrmn655 remaindernear -0 1 -> -0 -dqrmn656 remaindernear 0 -1 -> 0 -dqrmn657 remaindernear -0 -1 -> -0 -dqrmn658 remaindernear 0.00 1 -> 0.00 -dqrmn659 remaindernear -0.00 1 -> -0.00 - --- Specials -dqrmn680 remaindernear Inf -Inf -> NaN Invalid_operation -dqrmn681 remaindernear Inf -1000 -> NaN Invalid_operation -dqrmn682 remaindernear Inf -1 -> NaN Invalid_operation -dqrmn683 remaindernear Inf 0 -> NaN Invalid_operation -dqrmn684 remaindernear Inf -0 -> NaN Invalid_operation -dqrmn685 remaindernear Inf 1 -> NaN Invalid_operation -dqrmn686 remaindernear Inf 1000 -> NaN Invalid_operation -dqrmn687 remaindernear Inf Inf -> NaN Invalid_operation -dqrmn688 remaindernear -1000 Inf -> -1000 -dqrmn689 remaindernear -Inf Inf -> NaN Invalid_operation -dqrmn691 remaindernear -1 Inf -> -1 -dqrmn692 remaindernear 0 Inf -> 0 -dqrmn693 remaindernear -0 Inf -> -0 -dqrmn694 remaindernear 1 Inf -> 1 -dqrmn695 remaindernear 1000 Inf -> 1000 -dqrmn696 remaindernear Inf Inf -> NaN Invalid_operation - -dqrmn700 remaindernear -Inf -Inf -> NaN Invalid_operation -dqrmn701 remaindernear -Inf -1000 -> NaN Invalid_operation -dqrmn702 remaindernear -Inf -1 -> NaN Invalid_operation -dqrmn703 remaindernear -Inf -0 -> NaN Invalid_operation -dqrmn704 remaindernear -Inf 0 -> NaN Invalid_operation -dqrmn705 remaindernear -Inf 1 -> NaN Invalid_operation -dqrmn706 remaindernear -Inf 1000 -> NaN Invalid_operation -dqrmn707 remaindernear -Inf Inf -> NaN Invalid_operation -dqrmn708 remaindernear -Inf -Inf -> NaN Invalid_operation -dqrmn709 remaindernear -1000 Inf -> -1000 -dqrmn710 remaindernear -1 -Inf -> -1 -dqrmn711 remaindernear -0 -Inf -> -0 -dqrmn712 remaindernear 0 -Inf -> 0 -dqrmn713 remaindernear 1 -Inf -> 1 -dqrmn714 remaindernear 1000 -Inf -> 1000 -dqrmn715 remaindernear Inf -Inf -> NaN Invalid_operation - -dqrmn721 remaindernear NaN -Inf -> NaN -dqrmn722 remaindernear NaN -1000 -> NaN -dqrmn723 remaindernear NaN -1 -> NaN -dqrmn724 remaindernear NaN -0 -> NaN -dqrmn725 remaindernear -NaN 0 -> -NaN -dqrmn726 remaindernear NaN 1 -> NaN -dqrmn727 remaindernear NaN 1000 -> NaN -dqrmn728 remaindernear NaN Inf -> NaN -dqrmn729 remaindernear NaN -NaN -> NaN -dqrmn730 remaindernear -Inf NaN -> NaN -dqrmn731 remaindernear -1000 NaN -> NaN -dqrmn732 remaindernear -1 NaN -> NaN -dqrmn733 remaindernear -0 -NaN -> -NaN -dqrmn734 remaindernear 0 NaN -> NaN -dqrmn735 remaindernear 1 -NaN -> -NaN -dqrmn736 remaindernear 1000 NaN -> NaN -dqrmn737 remaindernear Inf NaN -> NaN - -dqrmn741 remaindernear sNaN -Inf -> NaN Invalid_operation -dqrmn742 remaindernear sNaN -1000 -> NaN Invalid_operation -dqrmn743 remaindernear -sNaN -1 -> -NaN Invalid_operation -dqrmn744 remaindernear sNaN -0 -> NaN Invalid_operation -dqrmn745 remaindernear sNaN 0 -> NaN Invalid_operation -dqrmn746 remaindernear sNaN 1 -> NaN Invalid_operation -dqrmn747 remaindernear sNaN 1000 -> NaN Invalid_operation -dqrmn749 remaindernear sNaN NaN -> NaN Invalid_operation -dqrmn750 remaindernear sNaN sNaN -> NaN Invalid_operation -dqrmn751 remaindernear NaN sNaN -> NaN Invalid_operation -dqrmn752 remaindernear -Inf sNaN -> NaN Invalid_operation -dqrmn753 remaindernear -1000 sNaN -> NaN Invalid_operation -dqrmn754 remaindernear -1 sNaN -> NaN Invalid_operation -dqrmn755 remaindernear -0 sNaN -> NaN Invalid_operation -dqrmn756 remaindernear 0 sNaN -> NaN Invalid_operation -dqrmn757 remaindernear 1 sNaN -> NaN Invalid_operation -dqrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation -dqrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation - --- propagating NaNs -dqrmn760 remaindernear NaN1 NaN7 -> NaN1 -dqrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation -dqrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation -dqrmn763 remaindernear sNaN4 sNaN10 -> NaN4 Invalid_operation -dqrmn764 remaindernear 15 NaN11 -> NaN11 -dqrmn765 remaindernear NaN6 NaN12 -> NaN6 -dqrmn766 remaindernear Inf NaN13 -> NaN13 -dqrmn767 remaindernear NaN14 -Inf -> NaN14 -dqrmn768 remaindernear 0 NaN15 -> NaN15 -dqrmn769 remaindernear NaN16 -0 -> NaN16 - --- edge cases of impossible -dqrmn770 remaindernear 1234500000000000000000067890123456 10 -> -4 -dqrmn771 remaindernear 1234500000000000000000067890123456 1 -> 0 -dqrmn772 remaindernear 1234500000000000000000067890123456 0.1 -> NaN Division_impossible -dqrmn773 remaindernear 1234500000000000000000067890123456 0.01 -> NaN Division_impossible - --- long operand checks -dqrmn801 remaindernear 12345678000 100 -> 0 -dqrmn802 remaindernear 1 12345678000 -> 1 -dqrmn803 remaindernear 1234567800 10 -> 0 -dqrmn804 remaindernear 1 1234567800 -> 1 -dqrmn805 remaindernear 1234567890 10 -> 0 -dqrmn806 remaindernear 1 1234567890 -> 1 -dqrmn807 remaindernear 1234567891 10 -> 1 -dqrmn808 remaindernear 1 1234567891 -> 1 -dqrmn809 remaindernear 12345678901 100 -> 1 -dqrmn810 remaindernear 1 12345678901 -> 1 -dqrmn811 remaindernear 1234567896 10 -> -4 -dqrmn812 remaindernear 1 1234567896 -> 1 - -dqrmn821 remaindernear 12345678000 100 -> 0 -dqrmn822 remaindernear 1 12345678000 -> 1 -dqrmn823 remaindernear 1234567800 10 -> 0 -dqrmn824 remaindernear 1 1234567800 -> 1 -dqrmn825 remaindernear 1234567890 10 -> 0 -dqrmn826 remaindernear 1 1234567890 -> 1 -dqrmn827 remaindernear 1234567891 10 -> 1 -dqrmn828 remaindernear 1 1234567891 -> 1 -dqrmn829 remaindernear 12345678901 100 -> 1 -dqrmn830 remaindernear 1 12345678901 -> 1 -dqrmn831 remaindernear 1234567896 10 -> -4 -dqrmn832 remaindernear 1 1234567896 -> 1 - --- from divideint -dqrmn840 remaindernear 100000000.0 1 -> 0.0 -dqrmn841 remaindernear 100000000.4 1 -> 0.4 -dqrmn842 remaindernear 100000000.5 1 -> 0.5 -dqrmn843 remaindernear 100000000.9 1 -> -0.1 -dqrmn844 remaindernear 100000000.999 1 -> -0.001 -dqrmn850 remaindernear 100000003 5 -> -2 -dqrmn851 remaindernear 10000003 5 -> -2 -dqrmn852 remaindernear 1000003 5 -> -2 -dqrmn853 remaindernear 100003 5 -> -2 -dqrmn854 remaindernear 10003 5 -> -2 -dqrmn855 remaindernear 1003 5 -> -2 -dqrmn856 remaindernear 103 5 -> -2 -dqrmn857 remaindernear 13 5 -> -2 -dqrmn858 remaindernear 1 5 -> 1 - --- Vladimir's cases 1234567890123456 -dqrmn860 remaindernear 123.0e1 1000000000000000 -> 1230 -dqrmn861 remaindernear 1230 1000000000000000 -> 1230 -dqrmn862 remaindernear 12.3e2 1000000000000000 -> 1230 -dqrmn863 remaindernear 1.23e3 1000000000000000 -> 1230 -dqrmn864 remaindernear 123e1 1000000000000000 -> 1230 -dqrmn870 remaindernear 123e1 1000000000000000 -> 1230 -dqrmn871 remaindernear 123e1 100000000000000 -> 1230 -dqrmn872 remaindernear 123e1 10000000000000 -> 1230 -dqrmn873 remaindernear 123e1 1000000000000 -> 1230 -dqrmn874 remaindernear 123e1 100000000000 -> 1230 -dqrmn875 remaindernear 123e1 10000000000 -> 1230 -dqrmn876 remaindernear 123e1 1000000000 -> 1230 -dqrmn877 remaindernear 123e1 100000000 -> 1230 -dqrmn878 remaindernear 1230 100000000 -> 1230 -dqrmn879 remaindernear 123e1 10000000 -> 1230 -dqrmn880 remaindernear 123e1 1000000 -> 1230 -dqrmn881 remaindernear 123e1 100000 -> 1230 -dqrmn882 remaindernear 123e1 10000 -> 1230 -dqrmn883 remaindernear 123e1 1000 -> 230 -dqrmn884 remaindernear 123e1 100 -> 30 -dqrmn885 remaindernear 123e1 10 -> 0 -dqrmn886 remaindernear 123e1 1 -> 0 - -dqrmn890 remaindernear 123e1 2000000000000000 -> 1230 -dqrmn891 remaindernear 123e1 200000000000000 -> 1230 -dqrmn892 remaindernear 123e1 20000000000000 -> 1230 -dqrmn893 remaindernear 123e1 2000000000000 -> 1230 -dqrmn894 remaindernear 123e1 200000000000 -> 1230 -dqrmn895 remaindernear 123e1 20000000000 -> 1230 -dqrmn896 remaindernear 123e1 2000000000 -> 1230 -dqrmn897 remaindernear 123e1 200000000 -> 1230 -dqrmn899 remaindernear 123e1 20000000 -> 1230 -dqrmn900 remaindernear 123e1 2000000 -> 1230 -dqrmn901 remaindernear 123e1 200000 -> 1230 -dqrmn902 remaindernear 123e1 20000 -> 1230 -dqrmn903 remaindernear 123e1 2000 -> -770 -dqrmn904 remaindernear 123e1 200 -> 30 -dqrmn905 remaindernear 123e1 20 -> -10 -dqrmn906 remaindernear 123e1 2 -> 0 - -dqrmn910 remaindernear 123e1 5000000000000000 -> 1230 -dqrmn911 remaindernear 123e1 500000000000000 -> 1230 -dqrmn912 remaindernear 123e1 50000000000000 -> 1230 -dqrmn913 remaindernear 123e1 5000000000000 -> 1230 -dqrmn914 remaindernear 123e1 500000000000 -> 1230 -dqrmn915 remaindernear 123e1 50000000000 -> 1230 -dqrmn916 remaindernear 123e1 5000000000 -> 1230 -dqrmn917 remaindernear 123e1 500000000 -> 1230 -dqrmn919 remaindernear 123e1 50000000 -> 1230 -dqrmn920 remaindernear 123e1 5000000 -> 1230 -dqrmn921 remaindernear 123e1 500000 -> 1230 -dqrmn922 remaindernear 123e1 50000 -> 1230 -dqrmn923 remaindernear 123e1 5000 -> 1230 -dqrmn924 remaindernear 123e1 500 -> 230 -dqrmn925 remaindernear 123e1 50 -> -20 -dqrmn926 remaindernear 123e1 5 -> 0 - -dqrmn930 remaindernear 123e1 9000000000000000 -> 1230 -dqrmn931 remaindernear 123e1 900000000000000 -> 1230 -dqrmn932 remaindernear 123e1 90000000000000 -> 1230 -dqrmn933 remaindernear 123e1 9000000000000 -> 1230 -dqrmn934 remaindernear 123e1 900000000000 -> 1230 -dqrmn935 remaindernear 123e1 90000000000 -> 1230 -dqrmn936 remaindernear 123e1 9000000000 -> 1230 -dqrmn937 remaindernear 123e1 900000000 -> 1230 -dqrmn939 remaindernear 123e1 90000000 -> 1230 -dqrmn940 remaindernear 123e1 9000000 -> 1230 -dqrmn941 remaindernear 123e1 900000 -> 1230 -dqrmn942 remaindernear 123e1 90000 -> 1230 -dqrmn943 remaindernear 123e1 9000 -> 1230 -dqrmn944 remaindernear 123e1 900 -> 330 -dqrmn945 remaindernear 123e1 90 -> -30 -dqrmn946 remaindernear 123e1 9 -> -3 - -dqrmn950 remaindernear 123e1 1000000000000000 -> 1230 -dqrmn961 remaindernear 123e1 2999999999999999 -> 1230 -dqrmn962 remaindernear 123e1 3999999999999999 -> 1230 -dqrmn963 remaindernear 123e1 4999999999999999 -> 1230 -dqrmn964 remaindernear 123e1 5999999999999999 -> 1230 -dqrmn965 remaindernear 123e1 6999999999999999 -> 1230 -dqrmn966 remaindernear 123e1 7999999999999999 -> 1230 -dqrmn967 remaindernear 123e1 8999999999999999 -> 1230 -dqrmn968 remaindernear 123e1 9999999999999999 -> 1230 -dqrmn969 remaindernear 123e1 9876543210987654 -> 1230 - -dqrmn980 remaindernear 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally - --- overflow and underflow tests [from divide] -dqrmn1051 remaindernear 1e+277 1e-311 -> NaN Division_impossible -dqrmn1052 remaindernear 1e+277 -1e-311 -> NaN Division_impossible -dqrmn1053 remaindernear -1e+277 1e-311 -> NaN Division_impossible -dqrmn1054 remaindernear -1e+277 -1e-311 -> NaN Division_impossible -dqrmn1055 remaindernear 1e-277 1e+311 -> 1E-277 -dqrmn1056 remaindernear 1e-277 -1e+311 -> 1E-277 -dqrmn1057 remaindernear -1e-277 1e+311 -> -1E-277 -dqrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277 - --- Gyuris example -dqrmn1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143 - --- destructive subtract -dqrmn1101 remaindernear 1234567890123456789012345678901234 1.000000000000000000000000000000001 -> -0.234567890123456789012345678901233 -dqrmn1102 remaindernear 1234567890123456789012345678901234 1.00000000000000000000000000000001 -> -0.34567890123456789012345678901222 -dqrmn1103 remaindernear 1234567890123456789012345678901234 1.0000000000000000000000000000001 -> -0.4567890123456789012345678901111 -dqrmn1104 remaindernear 1234567890123456789012345678901255 4.000000000000000000000000000000001 -> -1.308641972530864197253086419725314 -dqrmn1105 remaindernear 1234567890123456789012345678901234 4.000000000000000000000000000000001 -> 1.691358027469135802746913580274692 -dqrmn1106 remaindernear 1234567890123456789012345678901234 4.9999999999999999999999999999999 -> -1.3086421975308642197530864219748 -dqrmn1107 remaindernear 1234567890123456789012345678901234 4.99999999999999999999999999999999 -> 1.46913578024691357802469135780247 -dqrmn1108 remaindernear 1234567890123456789012345678901234 4.999999999999999999999999999999999 -> -0.753086421975308642197530864219753 -dqrmn1109 remaindernear 1234567890123456789012345678901234 5.000000000000000000000000000000001 -> -1.246913578024691357802469135780247 -dqrmn1110 remaindernear 1234567890123456789012345678901234 5.00000000000000000000000000000001 -> 1.53086421975308642197530864219754 -dqrmn1111 remaindernear 1234567890123456789012345678901234 5.0000000000000000000000000000001 -> -0.6913578024691357802469135780242 - --- Null tests -dqrmn1000 remaindernear 10 # -> NaN Invalid_operation -dqrmn1001 remaindernear # 10 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- dqRemainderNear.decTest -- decQuad remainder-near -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- sanity checks (as base, above) +dqrmn001 remaindernear 1 1 -> 0 +dqrmn002 remaindernear 2 1 -> 0 +dqrmn003 remaindernear 1 2 -> 1 +dqrmn004 remaindernear 2 2 -> 0 +dqrmn005 remaindernear 0 1 -> 0 +dqrmn006 remaindernear 0 2 -> 0 +dqrmn007 remaindernear 1 3 -> 1 +dqrmn008 remaindernear 2 3 -> -1 +dqrmn009 remaindernear 3 3 -> 0 + +dqrmn010 remaindernear 2.4 1 -> 0.4 +dqrmn011 remaindernear 2.4 -1 -> 0.4 +dqrmn012 remaindernear -2.4 1 -> -0.4 +dqrmn013 remaindernear -2.4 -1 -> -0.4 +dqrmn014 remaindernear 2.40 1 -> 0.40 +dqrmn015 remaindernear 2.400 1 -> 0.400 +dqrmn016 remaindernear 2.4 2 -> 0.4 +dqrmn017 remaindernear 2.400 2 -> 0.400 +dqrmn018 remaindernear 2. 2 -> 0 +dqrmn019 remaindernear 20 20 -> 0 + +dqrmn020 remaindernear 187 187 -> 0 +dqrmn021 remaindernear 5 2 -> 1 +dqrmn022 remaindernear 5 2.0 -> 1.0 +dqrmn023 remaindernear 5 2.000 -> 1.000 +dqrmn024 remaindernear 5 0.200 -> 0.000 +dqrmn025 remaindernear 5 0.200 -> 0.000 + +dqrmn030 remaindernear 1 2 -> 1 +dqrmn031 remaindernear 1 4 -> 1 +dqrmn032 remaindernear 1 8 -> 1 + +dqrmn033 remaindernear 1 16 -> 1 +dqrmn034 remaindernear 1 32 -> 1 +dqrmn035 remaindernear 1 64 -> 1 +dqrmn040 remaindernear 1 -2 -> 1 +dqrmn041 remaindernear 1 -4 -> 1 +dqrmn042 remaindernear 1 -8 -> 1 +dqrmn043 remaindernear 1 -16 -> 1 +dqrmn044 remaindernear 1 -32 -> 1 +dqrmn045 remaindernear 1 -64 -> 1 +dqrmn050 remaindernear -1 2 -> -1 +dqrmn051 remaindernear -1 4 -> -1 +dqrmn052 remaindernear -1 8 -> -1 +dqrmn053 remaindernear -1 16 -> -1 +dqrmn054 remaindernear -1 32 -> -1 +dqrmn055 remaindernear -1 64 -> -1 +dqrmn060 remaindernear -1 -2 -> -1 +dqrmn061 remaindernear -1 -4 -> -1 +dqrmn062 remaindernear -1 -8 -> -1 +dqrmn063 remaindernear -1 -16 -> -1 +dqrmn064 remaindernear -1 -32 -> -1 +dqrmn065 remaindernear -1 -64 -> -1 + +dqrmn066 remaindernear 9.9 1 -> -0.1 +dqrmn067 remaindernear 99.7 1 -> -0.3 +dqrmn068 remaindernear 999999999 1 -> 0 +dqrmn069 remaindernear 999999999.4 1 -> 0.4 +dqrmn070 remaindernear 999999999.5 1 -> -0.5 +dqrmn071 remaindernear 999999999.9 1 -> -0.1 +dqrmn072 remaindernear 999999999.999 1 -> -0.001 +dqrmn073 remaindernear 999999.999999 1 -> -0.000001 +dqrmn074 remaindernear 9 1 -> 0 +dqrmn075 remaindernear 9999999999999999 1 -> 0 +dqrmn076 remaindernear 9999999999999999 2 -> -1 +dqrmn077 remaindernear 9999999999999999 3 -> 0 +dqrmn078 remaindernear 9999999999999999 4 -> -1 + +dqrmn080 remaindernear 0. 1 -> 0 +dqrmn081 remaindernear .0 1 -> 0.0 +dqrmn082 remaindernear 0.00 1 -> 0.00 +dqrmn083 remaindernear 0.00E+9 1 -> 0 +dqrmn084 remaindernear 0.00E+3 1 -> 0 +dqrmn085 remaindernear 0.00E+2 1 -> 0 +dqrmn086 remaindernear 0.00E+1 1 -> 0.0 +dqrmn087 remaindernear 0.00E+0 1 -> 0.00 +dqrmn088 remaindernear 0.00E-0 1 -> 0.00 +dqrmn089 remaindernear 0.00E-1 1 -> 0.000 +dqrmn090 remaindernear 0.00E-2 1 -> 0.0000 +dqrmn091 remaindernear 0.00E-3 1 -> 0.00000 +dqrmn092 remaindernear 0.00E-4 1 -> 0.000000 +dqrmn093 remaindernear 0.00E-5 1 -> 0E-7 +dqrmn094 remaindernear 0.00E-6 1 -> 0E-8 +dqrmn095 remaindernear 0.0000E-50 1 -> 0E-54 + +-- Various flavours of remaindernear by 0 +dqrmn101 remaindernear 0 0 -> NaN Division_undefined +dqrmn102 remaindernear 0 -0 -> NaN Division_undefined +dqrmn103 remaindernear -0 0 -> NaN Division_undefined +dqrmn104 remaindernear -0 -0 -> NaN Division_undefined +dqrmn105 remaindernear 0.0E5 0 -> NaN Division_undefined +dqrmn106 remaindernear 0.000 0 -> NaN Division_undefined +-- [Some think this next group should be Division_by_zero exception, but +-- IEEE 854 is explicit that it is Invalid operation .. for +-- remainder-near, anyway] +dqrmn107 remaindernear 0.0001 0 -> NaN Invalid_operation +dqrmn108 remaindernear 0.01 0 -> NaN Invalid_operation +dqrmn109 remaindernear 0.1 0 -> NaN Invalid_operation +dqrmn110 remaindernear 1 0 -> NaN Invalid_operation +dqrmn111 remaindernear 1 0.0 -> NaN Invalid_operation +dqrmn112 remaindernear 10 0.0 -> NaN Invalid_operation +dqrmn113 remaindernear 1E+100 0.0 -> NaN Invalid_operation +dqrmn114 remaindernear 1E+380 0 -> NaN Invalid_operation +dqrmn115 remaindernear 0.0001 -0 -> NaN Invalid_operation +dqrmn116 remaindernear 0.01 -0 -> NaN Invalid_operation +dqrmn119 remaindernear 0.1 -0 -> NaN Invalid_operation +dqrmn120 remaindernear 1 -0 -> NaN Invalid_operation +dqrmn121 remaindernear 1 -0.0 -> NaN Invalid_operation +dqrmn122 remaindernear 10 -0.0 -> NaN Invalid_operation +dqrmn123 remaindernear 1E+100 -0.0 -> NaN Invalid_operation +dqrmn124 remaindernear 1E+384 -0 -> NaN Invalid_operation +-- and zeros on left +dqrmn130 remaindernear 0 1 -> 0 +dqrmn131 remaindernear 0 -1 -> 0 +dqrmn132 remaindernear 0.0 1 -> 0.0 +dqrmn133 remaindernear 0.0 -1 -> 0.0 +dqrmn134 remaindernear -0 1 -> -0 +dqrmn135 remaindernear -0 -1 -> -0 +dqrmn136 remaindernear -0.0 1 -> -0.0 +dqrmn137 remaindernear -0.0 -1 -> -0.0 + +-- 0.5ers +dqrmn143 remaindernear 0.5 2 -> 0.5 +dqrmn144 remaindernear 0.5 2.1 -> 0.5 +dqrmn145 remaindernear 0.5 2.01 -> 0.50 +dqrmn146 remaindernear 0.5 2.001 -> 0.500 +dqrmn147 remaindernear 0.50 2 -> 0.50 +dqrmn148 remaindernear 0.50 2.01 -> 0.50 +dqrmn149 remaindernear 0.50 2.001 -> 0.500 + +-- steadies +dqrmn150 remaindernear 1 1 -> 0 +dqrmn151 remaindernear 1 2 -> 1 +dqrmn152 remaindernear 1 3 -> 1 +dqrmn153 remaindernear 1 4 -> 1 +dqrmn154 remaindernear 1 5 -> 1 +dqrmn155 remaindernear 1 6 -> 1 +dqrmn156 remaindernear 1 7 -> 1 +dqrmn157 remaindernear 1 8 -> 1 +dqrmn158 remaindernear 1 9 -> 1 +dqrmn159 remaindernear 1 10 -> 1 +dqrmn160 remaindernear 1 1 -> 0 +dqrmn161 remaindernear 2 1 -> 0 +dqrmn162 remaindernear 3 1 -> 0 +dqrmn163 remaindernear 4 1 -> 0 +dqrmn164 remaindernear 5 1 -> 0 +dqrmn165 remaindernear 6 1 -> 0 +dqrmn166 remaindernear 7 1 -> 0 +dqrmn167 remaindernear 8 1 -> 0 +dqrmn168 remaindernear 9 1 -> 0 +dqrmn169 remaindernear 10 1 -> 0 + +-- some differences from remainder +dqrmn171 remaindernear 0.4 1.020 -> 0.400 +dqrmn172 remaindernear 0.50 1.020 -> 0.500 +dqrmn173 remaindernear 0.51 1.020 -> 0.510 +dqrmn174 remaindernear 0.52 1.020 -> -0.500 +dqrmn175 remaindernear 0.6 1.020 -> -0.420 + +-- More flavours of remaindernear by 0 +dqrmn201 remaindernear 0 0 -> NaN Division_undefined +dqrmn202 remaindernear 0.0E5 0 -> NaN Division_undefined +dqrmn203 remaindernear 0.000 0 -> NaN Division_undefined +dqrmn204 remaindernear 0.0001 0 -> NaN Invalid_operation +dqrmn205 remaindernear 0.01 0 -> NaN Invalid_operation +dqrmn206 remaindernear 0.1 0 -> NaN Invalid_operation +dqrmn207 remaindernear 1 0 -> NaN Invalid_operation +dqrmn208 remaindernear 1 0.0 -> NaN Invalid_operation +dqrmn209 remaindernear 10 0.0 -> NaN Invalid_operation +dqrmn210 remaindernear 1E+100 0.0 -> NaN Invalid_operation +dqrmn211 remaindernear 1E+380 0 -> NaN Invalid_operation + +-- tests from the extended specification +dqrmn221 remaindernear 2.1 3 -> -0.9 +dqrmn222 remaindernear 10 6 -> -2 +dqrmn223 remaindernear 10 3 -> 1 +dqrmn224 remaindernear -10 3 -> -1 +dqrmn225 remaindernear 10.2 1 -> 0.2 +dqrmn226 remaindernear 10 0.3 -> 0.1 +dqrmn227 remaindernear 3.6 1.3 -> -0.3 + +-- some differences from remainder +dqrmn231 remaindernear -0.4 1.020 -> -0.400 +dqrmn232 remaindernear -0.50 1.020 -> -0.500 +dqrmn233 remaindernear -0.51 1.020 -> -0.510 +dqrmn234 remaindernear -0.52 1.020 -> 0.500 +dqrmn235 remaindernear -0.6 1.020 -> 0.420 + +-- high Xs +dqrmn240 remaindernear 1E+2 1.00 -> 0.00 + +-- dqrmn3xx are from DiagBigDecimal +dqrmn301 remaindernear 1 3 -> 1 +dqrmn302 remaindernear 5 5 -> 0 +dqrmn303 remaindernear 13 10 -> 3 +dqrmn304 remaindernear 13 50 -> 13 +dqrmn305 remaindernear 13 100 -> 13 +dqrmn306 remaindernear 13 1000 -> 13 +dqrmn307 remaindernear .13 1 -> 0.13 +dqrmn308 remaindernear 0.133 1 -> 0.133 +dqrmn309 remaindernear 0.1033 1 -> 0.1033 +dqrmn310 remaindernear 1.033 1 -> 0.033 +dqrmn311 remaindernear 10.33 1 -> 0.33 +dqrmn312 remaindernear 10.33 10 -> 0.33 +dqrmn313 remaindernear 103.3 1 -> 0.3 +dqrmn314 remaindernear 133 10 -> 3 +dqrmn315 remaindernear 1033 10 -> 3 +dqrmn316 remaindernear 1033 50 -> -17 +dqrmn317 remaindernear 101.0 3 -> -1.0 +dqrmn318 remaindernear 102.0 3 -> 0.0 +dqrmn319 remaindernear 103.0 3 -> 1.0 +dqrmn320 remaindernear 2.40 1 -> 0.40 +dqrmn321 remaindernear 2.400 1 -> 0.400 +dqrmn322 remaindernear 2.4 1 -> 0.4 +dqrmn323 remaindernear 2.4 2 -> 0.4 +dqrmn324 remaindernear 2.400 2 -> 0.400 +dqrmn325 remaindernear 1 0.3 -> 0.1 +dqrmn326 remaindernear 1 0.30 -> 0.10 +dqrmn327 remaindernear 1 0.300 -> 0.100 +dqrmn328 remaindernear 1 0.3000 -> 0.1000 +dqrmn329 remaindernear 1.0 0.3 -> 0.1 +dqrmn330 remaindernear 1.00 0.3 -> 0.10 +dqrmn331 remaindernear 1.000 0.3 -> 0.100 +dqrmn332 remaindernear 1.0000 0.3 -> 0.1000 +dqrmn333 remaindernear 0.5 2 -> 0.5 +dqrmn334 remaindernear 0.5 2.1 -> 0.5 +dqrmn335 remaindernear 0.5 2.01 -> 0.50 +dqrmn336 remaindernear 0.5 2.001 -> 0.500 +dqrmn337 remaindernear 0.50 2 -> 0.50 +dqrmn338 remaindernear 0.50 2.01 -> 0.50 +dqrmn339 remaindernear 0.50 2.001 -> 0.500 + +dqrmn340 remaindernear 0.5 0.5000001 -> -1E-7 +dqrmn341 remaindernear 0.5 0.50000001 -> -1E-8 +dqrmn342 remaindernear 0.5 0.500000001 -> -1E-9 +dqrmn343 remaindernear 0.5 0.5000000001 -> -1E-10 +dqrmn344 remaindernear 0.5 0.50000000001 -> -1E-11 +dqrmn345 remaindernear 0.5 0.4999999 -> 1E-7 +dqrmn346 remaindernear 0.5 0.49999999 -> 1E-8 +dqrmn347 remaindernear 0.5 0.499999999 -> 1E-9 +dqrmn348 remaindernear 0.5 0.4999999999 -> 1E-10 +dqrmn349 remaindernear 0.5 0.49999999999 -> 1E-11 +dqrmn350 remaindernear 0.5 0.499999999999 -> 1E-12 + +dqrmn351 remaindernear 0.03 7 -> 0.03 +dqrmn352 remaindernear 5 2 -> 1 +dqrmn353 remaindernear 4.1 2 -> 0.1 +dqrmn354 remaindernear 4.01 2 -> 0.01 +dqrmn355 remaindernear 4.001 2 -> 0.001 +dqrmn356 remaindernear 4.0001 2 -> 0.0001 +dqrmn357 remaindernear 4.00001 2 -> 0.00001 +dqrmn358 remaindernear 4.000001 2 -> 0.000001 +dqrmn359 remaindernear 4.0000001 2 -> 1E-7 + +dqrmn360 remaindernear 1.2 0.7345 -> -0.2690 +dqrmn361 remaindernear 0.8 12 -> 0.8 +dqrmn362 remaindernear 0.8 0.2 -> 0.0 +dqrmn363 remaindernear 0.8 0.3 -> -0.1 +dqrmn364 remaindernear 0.800 12 -> 0.800 +dqrmn365 remaindernear 0.800 1.7 -> 0.800 +dqrmn366 remaindernear 2.400 2 -> 0.400 + +-- round to even +dqrmn371 remaindernear 121 2 -> 1 +dqrmn372 remaindernear 122 2 -> 0 +dqrmn373 remaindernear 123 2 -> -1 +dqrmn374 remaindernear 124 2 -> 0 +dqrmn375 remaindernear 125 2 -> 1 +dqrmn376 remaindernear 126 2 -> 0 +dqrmn377 remaindernear 127 2 -> -1 + +dqrmn381 remaindernear 12345 1 -> 0 +dqrmn382 remaindernear 12345 1.0001 -> -0.2344 +dqrmn383 remaindernear 12345 1.001 -> -0.333 +dqrmn384 remaindernear 12345 1.01 -> -0.23 +dqrmn385 remaindernear 12345 1.1 -> -0.3 +dqrmn386 remaindernear 12355 4 -> -1 +dqrmn387 remaindernear 12345 4 -> 1 +dqrmn388 remaindernear 12355 4.0001 -> -1.3089 +dqrmn389 remaindernear 12345 4.0001 -> 0.6914 +dqrmn390 remaindernear 12345 4.9 -> 1.9 +dqrmn391 remaindernear 12345 4.99 -> -0.26 +dqrmn392 remaindernear 12345 4.999 -> 2.469 +dqrmn393 remaindernear 12345 4.9999 -> 0.2469 +dqrmn394 remaindernear 12345 5 -> 0 +dqrmn395 remaindernear 12345 5.0001 -> -0.2469 +dqrmn396 remaindernear 12345 5.001 -> -2.469 +dqrmn397 remaindernear 12345 5.01 -> 0.36 +dqrmn398 remaindernear 12345 5.1 -> -2.1 + +-- the nasty division-by-1 cases +dqrmn401 remaindernear 0.4 1 -> 0.4 +dqrmn402 remaindernear 0.45 1 -> 0.45 +dqrmn403 remaindernear 0.455 1 -> 0.455 +dqrmn404 remaindernear 0.4555 1 -> 0.4555 +dqrmn405 remaindernear 0.45555 1 -> 0.45555 +dqrmn406 remaindernear 0.455555 1 -> 0.455555 +dqrmn407 remaindernear 0.4555555 1 -> 0.4555555 +dqrmn408 remaindernear 0.45555555 1 -> 0.45555555 +dqrmn409 remaindernear 0.455555555 1 -> 0.455555555 +-- with spill... [412 exercises sticktab loop] +dqrmn411 remaindernear 0.5 1 -> 0.5 +dqrmn412 remaindernear 0.55 1 -> -0.45 +dqrmn413 remaindernear 0.555 1 -> -0.445 +dqrmn414 remaindernear 0.5555 1 -> -0.4445 +dqrmn415 remaindernear 0.55555 1 -> -0.44445 +dqrmn416 remaindernear 0.555555 1 -> -0.444445 +dqrmn417 remaindernear 0.5555555 1 -> -0.4444445 +dqrmn418 remaindernear 0.55555555 1 -> -0.44444445 +dqrmn419 remaindernear 0.555555555 1 -> -0.444444445 + +-- folddowns +dqrmn421 remaindernear 1E+6144 1 -> NaN Division_impossible +dqrmn422 remaindernear 1E+6144 1E+6143 -> 0E+6111 Clamped +dqrmn423 remaindernear 1E+6144 2E+6143 -> 0E+6111 Clamped +dqrmn424 remaindernear 1E+6144 3E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped +dqrmn425 remaindernear 1E+6144 4E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped +dqrmn426 remaindernear 1E+6144 5E+6143 -> 0E+6111 Clamped +dqrmn427 remaindernear 1E+6144 6E+6143 -> -2.00000000000000000000000000000000E+6143 Clamped +dqrmn428 remaindernear 1E+6144 7E+6143 -> 3.00000000000000000000000000000000E+6143 Clamped +dqrmn429 remaindernear 1E+6144 8E+6143 -> 2.00000000000000000000000000000000E+6143 Clamped +dqrmn430 remaindernear 1E+6144 9E+6143 -> 1.00000000000000000000000000000000E+6143 Clamped +-- tinies +dqrmn431 remaindernear 1E-6175 1E-6176 -> 0E-6176 +dqrmn432 remaindernear 1E-6175 2E-6176 -> 0E-6176 +dqrmn433 remaindernear 1E-6175 3E-6176 -> 1E-6176 Subnormal +dqrmn434 remaindernear 1E-6175 4E-6176 -> 2E-6176 Subnormal +dqrmn435 remaindernear 1E-6175 5E-6176 -> 0E-6176 +dqrmn436 remaindernear 1E-6175 6E-6176 -> -2E-6176 Subnormal +dqrmn437 remaindernear 1E-6175 7E-6176 -> 3E-6176 Subnormal +dqrmn438 remaindernear 1E-6175 8E-6176 -> 2E-6176 Subnormal +dqrmn439 remaindernear 1E-6175 9E-6176 -> 1E-6176 Subnormal +dqrmn440 remaindernear 1E-6175 10E-6176 -> 0E-6176 +dqrmn441 remaindernear 1E-6175 11E-6176 -> -1E-6176 Subnormal +dqrmn442 remaindernear 100E-6175 11E-6176 -> -1E-6176 Subnormal +dqrmn443 remaindernear 100E-6175 20E-6176 -> 0E-6176 +dqrmn444 remaindernear 100E-6175 21E-6176 -> -8E-6176 Subnormal +dqrmn445 remaindernear 100E-6175 30E-6176 -> 1.0E-6175 Subnormal + +-- zero signs +dqrmn650 remaindernear 1 1 -> 0 +dqrmn651 remaindernear -1 1 -> -0 +dqrmn652 remaindernear 1 -1 -> 0 +dqrmn653 remaindernear -1 -1 -> -0 +dqrmn654 remaindernear 0 1 -> 0 +dqrmn655 remaindernear -0 1 -> -0 +dqrmn656 remaindernear 0 -1 -> 0 +dqrmn657 remaindernear -0 -1 -> -0 +dqrmn658 remaindernear 0.00 1 -> 0.00 +dqrmn659 remaindernear -0.00 1 -> -0.00 + +-- Specials +dqrmn680 remaindernear Inf -Inf -> NaN Invalid_operation +dqrmn681 remaindernear Inf -1000 -> NaN Invalid_operation +dqrmn682 remaindernear Inf -1 -> NaN Invalid_operation +dqrmn683 remaindernear Inf 0 -> NaN Invalid_operation +dqrmn684 remaindernear Inf -0 -> NaN Invalid_operation +dqrmn685 remaindernear Inf 1 -> NaN Invalid_operation +dqrmn686 remaindernear Inf 1000 -> NaN Invalid_operation +dqrmn687 remaindernear Inf Inf -> NaN Invalid_operation +dqrmn688 remaindernear -1000 Inf -> -1000 +dqrmn689 remaindernear -Inf Inf -> NaN Invalid_operation +dqrmn691 remaindernear -1 Inf -> -1 +dqrmn692 remaindernear 0 Inf -> 0 +dqrmn693 remaindernear -0 Inf -> -0 +dqrmn694 remaindernear 1 Inf -> 1 +dqrmn695 remaindernear 1000 Inf -> 1000 +dqrmn696 remaindernear Inf Inf -> NaN Invalid_operation + +dqrmn700 remaindernear -Inf -Inf -> NaN Invalid_operation +dqrmn701 remaindernear -Inf -1000 -> NaN Invalid_operation +dqrmn702 remaindernear -Inf -1 -> NaN Invalid_operation +dqrmn703 remaindernear -Inf -0 -> NaN Invalid_operation +dqrmn704 remaindernear -Inf 0 -> NaN Invalid_operation +dqrmn705 remaindernear -Inf 1 -> NaN Invalid_operation +dqrmn706 remaindernear -Inf 1000 -> NaN Invalid_operation +dqrmn707 remaindernear -Inf Inf -> NaN Invalid_operation +dqrmn708 remaindernear -Inf -Inf -> NaN Invalid_operation +dqrmn709 remaindernear -1000 Inf -> -1000 +dqrmn710 remaindernear -1 -Inf -> -1 +dqrmn711 remaindernear -0 -Inf -> -0 +dqrmn712 remaindernear 0 -Inf -> 0 +dqrmn713 remaindernear 1 -Inf -> 1 +dqrmn714 remaindernear 1000 -Inf -> 1000 +dqrmn715 remaindernear Inf -Inf -> NaN Invalid_operation + +dqrmn721 remaindernear NaN -Inf -> NaN +dqrmn722 remaindernear NaN -1000 -> NaN +dqrmn723 remaindernear NaN -1 -> NaN +dqrmn724 remaindernear NaN -0 -> NaN +dqrmn725 remaindernear -NaN 0 -> -NaN +dqrmn726 remaindernear NaN 1 -> NaN +dqrmn727 remaindernear NaN 1000 -> NaN +dqrmn728 remaindernear NaN Inf -> NaN +dqrmn729 remaindernear NaN -NaN -> NaN +dqrmn730 remaindernear -Inf NaN -> NaN +dqrmn731 remaindernear -1000 NaN -> NaN +dqrmn732 remaindernear -1 NaN -> NaN +dqrmn733 remaindernear -0 -NaN -> -NaN +dqrmn734 remaindernear 0 NaN -> NaN +dqrmn735 remaindernear 1 -NaN -> -NaN +dqrmn736 remaindernear 1000 NaN -> NaN +dqrmn737 remaindernear Inf NaN -> NaN + +dqrmn741 remaindernear sNaN -Inf -> NaN Invalid_operation +dqrmn742 remaindernear sNaN -1000 -> NaN Invalid_operation +dqrmn743 remaindernear -sNaN -1 -> -NaN Invalid_operation +dqrmn744 remaindernear sNaN -0 -> NaN Invalid_operation +dqrmn745 remaindernear sNaN 0 -> NaN Invalid_operation +dqrmn746 remaindernear sNaN 1 -> NaN Invalid_operation +dqrmn747 remaindernear sNaN 1000 -> NaN Invalid_operation +dqrmn749 remaindernear sNaN NaN -> NaN Invalid_operation +dqrmn750 remaindernear sNaN sNaN -> NaN Invalid_operation +dqrmn751 remaindernear NaN sNaN -> NaN Invalid_operation +dqrmn752 remaindernear -Inf sNaN -> NaN Invalid_operation +dqrmn753 remaindernear -1000 sNaN -> NaN Invalid_operation +dqrmn754 remaindernear -1 sNaN -> NaN Invalid_operation +dqrmn755 remaindernear -0 sNaN -> NaN Invalid_operation +dqrmn756 remaindernear 0 sNaN -> NaN Invalid_operation +dqrmn757 remaindernear 1 sNaN -> NaN Invalid_operation +dqrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation +dqrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation + +-- propagating NaNs +dqrmn760 remaindernear NaN1 NaN7 -> NaN1 +dqrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation +dqrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation +dqrmn763 remaindernear sNaN4 sNaN10 -> NaN4 Invalid_operation +dqrmn764 remaindernear 15 NaN11 -> NaN11 +dqrmn765 remaindernear NaN6 NaN12 -> NaN6 +dqrmn766 remaindernear Inf NaN13 -> NaN13 +dqrmn767 remaindernear NaN14 -Inf -> NaN14 +dqrmn768 remaindernear 0 NaN15 -> NaN15 +dqrmn769 remaindernear NaN16 -0 -> NaN16 + +-- edge cases of impossible +dqrmn770 remaindernear 1234500000000000000000067890123456 10 -> -4 +dqrmn771 remaindernear 1234500000000000000000067890123456 1 -> 0 +dqrmn772 remaindernear 1234500000000000000000067890123456 0.1 -> NaN Division_impossible +dqrmn773 remaindernear 1234500000000000000000067890123456 0.01 -> NaN Division_impossible + +-- long operand checks +dqrmn801 remaindernear 12345678000 100 -> 0 +dqrmn802 remaindernear 1 12345678000 -> 1 +dqrmn803 remaindernear 1234567800 10 -> 0 +dqrmn804 remaindernear 1 1234567800 -> 1 +dqrmn805 remaindernear 1234567890 10 -> 0 +dqrmn806 remaindernear 1 1234567890 -> 1 +dqrmn807 remaindernear 1234567891 10 -> 1 +dqrmn808 remaindernear 1 1234567891 -> 1 +dqrmn809 remaindernear 12345678901 100 -> 1 +dqrmn810 remaindernear 1 12345678901 -> 1 +dqrmn811 remaindernear 1234567896 10 -> -4 +dqrmn812 remaindernear 1 1234567896 -> 1 + +dqrmn821 remaindernear 12345678000 100 -> 0 +dqrmn822 remaindernear 1 12345678000 -> 1 +dqrmn823 remaindernear 1234567800 10 -> 0 +dqrmn824 remaindernear 1 1234567800 -> 1 +dqrmn825 remaindernear 1234567890 10 -> 0 +dqrmn826 remaindernear 1 1234567890 -> 1 +dqrmn827 remaindernear 1234567891 10 -> 1 +dqrmn828 remaindernear 1 1234567891 -> 1 +dqrmn829 remaindernear 12345678901 100 -> 1 +dqrmn830 remaindernear 1 12345678901 -> 1 +dqrmn831 remaindernear 1234567896 10 -> -4 +dqrmn832 remaindernear 1 1234567896 -> 1 + +-- from divideint +dqrmn840 remaindernear 100000000.0 1 -> 0.0 +dqrmn841 remaindernear 100000000.4 1 -> 0.4 +dqrmn842 remaindernear 100000000.5 1 -> 0.5 +dqrmn843 remaindernear 100000000.9 1 -> -0.1 +dqrmn844 remaindernear 100000000.999 1 -> -0.001 +dqrmn850 remaindernear 100000003 5 -> -2 +dqrmn851 remaindernear 10000003 5 -> -2 +dqrmn852 remaindernear 1000003 5 -> -2 +dqrmn853 remaindernear 100003 5 -> -2 +dqrmn854 remaindernear 10003 5 -> -2 +dqrmn855 remaindernear 1003 5 -> -2 +dqrmn856 remaindernear 103 5 -> -2 +dqrmn857 remaindernear 13 5 -> -2 +dqrmn858 remaindernear 1 5 -> 1 + +-- Vladimir's cases 1234567890123456 +dqrmn860 remaindernear 123.0e1 1000000000000000 -> 1230 +dqrmn861 remaindernear 1230 1000000000000000 -> 1230 +dqrmn862 remaindernear 12.3e2 1000000000000000 -> 1230 +dqrmn863 remaindernear 1.23e3 1000000000000000 -> 1230 +dqrmn864 remaindernear 123e1 1000000000000000 -> 1230 +dqrmn870 remaindernear 123e1 1000000000000000 -> 1230 +dqrmn871 remaindernear 123e1 100000000000000 -> 1230 +dqrmn872 remaindernear 123e1 10000000000000 -> 1230 +dqrmn873 remaindernear 123e1 1000000000000 -> 1230 +dqrmn874 remaindernear 123e1 100000000000 -> 1230 +dqrmn875 remaindernear 123e1 10000000000 -> 1230 +dqrmn876 remaindernear 123e1 1000000000 -> 1230 +dqrmn877 remaindernear 123e1 100000000 -> 1230 +dqrmn878 remaindernear 1230 100000000 -> 1230 +dqrmn879 remaindernear 123e1 10000000 -> 1230 +dqrmn880 remaindernear 123e1 1000000 -> 1230 +dqrmn881 remaindernear 123e1 100000 -> 1230 +dqrmn882 remaindernear 123e1 10000 -> 1230 +dqrmn883 remaindernear 123e1 1000 -> 230 +dqrmn884 remaindernear 123e1 100 -> 30 +dqrmn885 remaindernear 123e1 10 -> 0 +dqrmn886 remaindernear 123e1 1 -> 0 + +dqrmn890 remaindernear 123e1 2000000000000000 -> 1230 +dqrmn891 remaindernear 123e1 200000000000000 -> 1230 +dqrmn892 remaindernear 123e1 20000000000000 -> 1230 +dqrmn893 remaindernear 123e1 2000000000000 -> 1230 +dqrmn894 remaindernear 123e1 200000000000 -> 1230 +dqrmn895 remaindernear 123e1 20000000000 -> 1230 +dqrmn896 remaindernear 123e1 2000000000 -> 1230 +dqrmn897 remaindernear 123e1 200000000 -> 1230 +dqrmn899 remaindernear 123e1 20000000 -> 1230 +dqrmn900 remaindernear 123e1 2000000 -> 1230 +dqrmn901 remaindernear 123e1 200000 -> 1230 +dqrmn902 remaindernear 123e1 20000 -> 1230 +dqrmn903 remaindernear 123e1 2000 -> -770 +dqrmn904 remaindernear 123e1 200 -> 30 +dqrmn905 remaindernear 123e1 20 -> -10 +dqrmn906 remaindernear 123e1 2 -> 0 + +dqrmn910 remaindernear 123e1 5000000000000000 -> 1230 +dqrmn911 remaindernear 123e1 500000000000000 -> 1230 +dqrmn912 remaindernear 123e1 50000000000000 -> 1230 +dqrmn913 remaindernear 123e1 5000000000000 -> 1230 +dqrmn914 remaindernear 123e1 500000000000 -> 1230 +dqrmn915 remaindernear 123e1 50000000000 -> 1230 +dqrmn916 remaindernear 123e1 5000000000 -> 1230 +dqrmn917 remaindernear 123e1 500000000 -> 1230 +dqrmn919 remaindernear 123e1 50000000 -> 1230 +dqrmn920 remaindernear 123e1 5000000 -> 1230 +dqrmn921 remaindernear 123e1 500000 -> 1230 +dqrmn922 remaindernear 123e1 50000 -> 1230 +dqrmn923 remaindernear 123e1 5000 -> 1230 +dqrmn924 remaindernear 123e1 500 -> 230 +dqrmn925 remaindernear 123e1 50 -> -20 +dqrmn926 remaindernear 123e1 5 -> 0 + +dqrmn930 remaindernear 123e1 9000000000000000 -> 1230 +dqrmn931 remaindernear 123e1 900000000000000 -> 1230 +dqrmn932 remaindernear 123e1 90000000000000 -> 1230 +dqrmn933 remaindernear 123e1 9000000000000 -> 1230 +dqrmn934 remaindernear 123e1 900000000000 -> 1230 +dqrmn935 remaindernear 123e1 90000000000 -> 1230 +dqrmn936 remaindernear 123e1 9000000000 -> 1230 +dqrmn937 remaindernear 123e1 900000000 -> 1230 +dqrmn939 remaindernear 123e1 90000000 -> 1230 +dqrmn940 remaindernear 123e1 9000000 -> 1230 +dqrmn941 remaindernear 123e1 900000 -> 1230 +dqrmn942 remaindernear 123e1 90000 -> 1230 +dqrmn943 remaindernear 123e1 9000 -> 1230 +dqrmn944 remaindernear 123e1 900 -> 330 +dqrmn945 remaindernear 123e1 90 -> -30 +dqrmn946 remaindernear 123e1 9 -> -3 + +dqrmn950 remaindernear 123e1 1000000000000000 -> 1230 +dqrmn961 remaindernear 123e1 2999999999999999 -> 1230 +dqrmn962 remaindernear 123e1 3999999999999999 -> 1230 +dqrmn963 remaindernear 123e1 4999999999999999 -> 1230 +dqrmn964 remaindernear 123e1 5999999999999999 -> 1230 +dqrmn965 remaindernear 123e1 6999999999999999 -> 1230 +dqrmn966 remaindernear 123e1 7999999999999999 -> 1230 +dqrmn967 remaindernear 123e1 8999999999999999 -> 1230 +dqrmn968 remaindernear 123e1 9999999999999999 -> 1230 +dqrmn969 remaindernear 123e1 9876543210987654 -> 1230 + +dqrmn980 remaindernear 123e1 1000E299 -> 1.23E+3 -- 123E+1 internally + +-- overflow and underflow tests [from divide] +dqrmn1051 remaindernear 1e+277 1e-311 -> NaN Division_impossible +dqrmn1052 remaindernear 1e+277 -1e-311 -> NaN Division_impossible +dqrmn1053 remaindernear -1e+277 1e-311 -> NaN Division_impossible +dqrmn1054 remaindernear -1e+277 -1e-311 -> NaN Division_impossible +dqrmn1055 remaindernear 1e-277 1e+311 -> 1E-277 +dqrmn1056 remaindernear 1e-277 -1e+311 -> 1E-277 +dqrmn1057 remaindernear -1e-277 1e+311 -> -1E-277 +dqrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277 + +-- Gyuris example +dqrmn1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143 + +-- destructive subtract +dqrmn1101 remaindernear 1234567890123456789012345678901234 1.000000000000000000000000000000001 -> -0.234567890123456789012345678901233 +dqrmn1102 remaindernear 1234567890123456789012345678901234 1.00000000000000000000000000000001 -> -0.34567890123456789012345678901222 +dqrmn1103 remaindernear 1234567890123456789012345678901234 1.0000000000000000000000000000001 -> -0.4567890123456789012345678901111 +dqrmn1104 remaindernear 1234567890123456789012345678901255 4.000000000000000000000000000000001 -> -1.308641972530864197253086419725314 +dqrmn1105 remaindernear 1234567890123456789012345678901234 4.000000000000000000000000000000001 -> 1.691358027469135802746913580274692 +dqrmn1106 remaindernear 1234567890123456789012345678901234 4.9999999999999999999999999999999 -> -1.3086421975308642197530864219748 +dqrmn1107 remaindernear 1234567890123456789012345678901234 4.99999999999999999999999999999999 -> 1.46913578024691357802469135780247 +dqrmn1108 remaindernear 1234567890123456789012345678901234 4.999999999999999999999999999999999 -> -0.753086421975308642197530864219753 +dqrmn1109 remaindernear 1234567890123456789012345678901234 5.000000000000000000000000000000001 -> -1.246913578024691357802469135780247 +dqrmn1110 remaindernear 1234567890123456789012345678901234 5.00000000000000000000000000000001 -> 1.53086421975308642197530864219754 +dqrmn1111 remaindernear 1234567890123456789012345678901234 5.0000000000000000000000000000001 -> -0.6913578024691357802469135780242 + +-- Null tests +dqrmn1000 remaindernear 10 # -> NaN Invalid_operation +dqrmn1001 remaindernear # 10 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/dqRotate.decTest b/Lib/test/decimaltestdata/dqRotate.decTest index edcf9eed23f..858b823e088 100644 --- a/Lib/test/decimaltestdata/dqRotate.decTest +++ b/Lib/test/decimaltestdata/dqRotate.decTest @@ -1,298 +1,298 @@ ------------------------------------------------------------------------- --- dqRotate.decTest -- rotate decQuad coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqrot001 rotate 0 0 -> 0 -dqrot002 rotate 0 2 -> 0 -dqrot003 rotate 1 2 -> 100 -dqrot004 rotate 1 33 -> 1000000000000000000000000000000000 -dqrot005 rotate 1 34 -> 1 -dqrot006 rotate 1 -1 -> 1000000000000000000000000000000000 -dqrot007 rotate 0 -2 -> 0 -dqrot008 rotate 1234567890123456789012345678901234 -1 -> 4123456789012345678901234567890123 -dqrot009 rotate 1234567890123456789012345678901234 -33 -> 2345678901234567890123456789012341 -dqrot010 rotate 1234567890123456789012345678901234 -34 -> 1234567890123456789012345678901234 -dqrot011 rotate 9934567890123456789012345678901234 -33 -> 9345678901234567890123456789012349 -dqrot012 rotate 9934567890123456789012345678901234 -34 -> 9934567890123456789012345678901234 - --- rhs must be an integer -dqrot015 rotate 1 1.5 -> NaN Invalid_operation -dqrot016 rotate 1 1.0 -> NaN Invalid_operation -dqrot017 rotate 1 0.1 -> NaN Invalid_operation -dqrot018 rotate 1 0.0 -> NaN Invalid_operation -dqrot019 rotate 1 1E+1 -> NaN Invalid_operation -dqrot020 rotate 1 1E+99 -> NaN Invalid_operation -dqrot021 rotate 1 Inf -> NaN Invalid_operation -dqrot022 rotate 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -dqrot025 rotate 1 -1000 -> NaN Invalid_operation -dqrot026 rotate 1 -35 -> NaN Invalid_operation -dqrot027 rotate 1 35 -> NaN Invalid_operation -dqrot028 rotate 1 1000 -> NaN Invalid_operation - --- full pattern -dqrot030 rotate 1234567890123456789012345678901234 -34 -> 1234567890123456789012345678901234 -dqrot031 rotate 1234567890123456789012345678901234 -33 -> 2345678901234567890123456789012341 -dqrot032 rotate 1234567890123456789012345678901234 -32 -> 3456789012345678901234567890123412 -dqrot033 rotate 1234567890123456789012345678901234 -31 -> 4567890123456789012345678901234123 -dqrot034 rotate 1234567890123456789012345678901234 -30 -> 5678901234567890123456789012341234 -dqrot035 rotate 1234567890123456789012345678901234 -29 -> 6789012345678901234567890123412345 -dqrot036 rotate 1234567890123456789012345678901234 -28 -> 7890123456789012345678901234123456 -dqrot037 rotate 1234567890123456789012345678901234 -27 -> 8901234567890123456789012341234567 -dqrot038 rotate 1234567890123456789012345678901234 -26 -> 9012345678901234567890123412345678 -dqrot039 rotate 1234567890123456789012345678901234 -25 -> 123456789012345678901234123456789 -dqrot040 rotate 1234567890123456789012345678901234 -24 -> 1234567890123456789012341234567890 -dqrot041 rotate 1234567890123456789012345678901234 -23 -> 2345678901234567890123412345678901 -dqrot042 rotate 1234567890123456789012345678901234 -22 -> 3456789012345678901234123456789012 -dqrot043 rotate 1234567890123456789012345678901234 -21 -> 4567890123456789012341234567890123 -dqrot044 rotate 1234567890123456789012345678901234 -20 -> 5678901234567890123412345678901234 -dqrot045 rotate 1234567890123456789012345678901234 -19 -> 6789012345678901234123456789012345 -dqrot047 rotate 1234567890123456789012345678901234 -18 -> 7890123456789012341234567890123456 -dqrot048 rotate 1234567890123456789012345678901234 -17 -> 8901234567890123412345678901234567 -dqrot049 rotate 1234567890123456789012345678901234 -16 -> 9012345678901234123456789012345678 -dqrot050 rotate 1234567890123456789012345678901234 -15 -> 123456789012341234567890123456789 -dqrot051 rotate 1234567890123456789012345678901234 -14 -> 1234567890123412345678901234567890 -dqrot052 rotate 1234567890123456789012345678901234 -13 -> 2345678901234123456789012345678901 -dqrot053 rotate 1234567890123456789012345678901234 -12 -> 3456789012341234567890123456789012 -dqrot054 rotate 1234567890123456789012345678901234 -11 -> 4567890123412345678901234567890123 -dqrot055 rotate 1234567890123456789012345678901234 -10 -> 5678901234123456789012345678901234 -dqrot056 rotate 1234567890123456789012345678901234 -9 -> 6789012341234567890123456789012345 -dqrot057 rotate 1234567890123456789012345678901234 -8 -> 7890123412345678901234567890123456 -dqrot058 rotate 1234567890123456789012345678901234 -7 -> 8901234123456789012345678901234567 -dqrot059 rotate 1234567890123456789012345678901234 -6 -> 9012341234567890123456789012345678 -dqrot060 rotate 1234567890123456789012345678901234 -5 -> 123412345678901234567890123456789 -dqrot061 rotate 1234567890123456789012345678901234 -4 -> 1234123456789012345678901234567890 -dqrot062 rotate 1234567890123456789012345678901234 -3 -> 2341234567890123456789012345678901 -dqrot063 rotate 1234567890123456789012345678901234 -2 -> 3412345678901234567890123456789012 -dqrot064 rotate 1234567890123456789012345678901234 -1 -> 4123456789012345678901234567890123 -dqrot065 rotate 1234567890123456789012345678901234 -0 -> 1234567890123456789012345678901234 - -dqrot066 rotate 1234567890123456789012345678901234 +0 -> 1234567890123456789012345678901234 -dqrot067 rotate 1234567890123456789012345678901234 +1 -> 2345678901234567890123456789012341 -dqrot068 rotate 1234567890123456789012345678901234 +2 -> 3456789012345678901234567890123412 -dqrot069 rotate 1234567890123456789012345678901234 +3 -> 4567890123456789012345678901234123 -dqrot070 rotate 1234567890123456789012345678901234 +4 -> 5678901234567890123456789012341234 -dqrot071 rotate 1234567890123456789012345678901234 +5 -> 6789012345678901234567890123412345 -dqrot072 rotate 1234567890123456789012345678901234 +6 -> 7890123456789012345678901234123456 -dqrot073 rotate 1234567890123456789012345678901234 +7 -> 8901234567890123456789012341234567 -dqrot074 rotate 1234567890123456789012345678901234 +8 -> 9012345678901234567890123412345678 -dqrot075 rotate 1234567890123456789012345678901234 +9 -> 123456789012345678901234123456789 -dqrot076 rotate 1234567890123456789012345678901234 +10 -> 1234567890123456789012341234567890 -dqrot077 rotate 1234567890123456789012345678901234 +11 -> 2345678901234567890123412345678901 -dqrot078 rotate 1234567890123456789012345678901234 +12 -> 3456789012345678901234123456789012 -dqrot079 rotate 1234567890123456789012345678901234 +13 -> 4567890123456789012341234567890123 -dqrot080 rotate 1234567890123456789012345678901234 +14 -> 5678901234567890123412345678901234 -dqrot081 rotate 1234567890123456789012345678901234 +15 -> 6789012345678901234123456789012345 -dqrot082 rotate 1234567890123456789012345678901234 +16 -> 7890123456789012341234567890123456 -dqrot083 rotate 1234567890123456789012345678901234 +17 -> 8901234567890123412345678901234567 -dqrot084 rotate 1234567890123456789012345678901234 +18 -> 9012345678901234123456789012345678 -dqrot085 rotate 1234567890123456789012345678901234 +19 -> 123456789012341234567890123456789 -dqrot086 rotate 1234567890123456789012345678901234 +20 -> 1234567890123412345678901234567890 -dqrot087 rotate 1234567890123456789012345678901234 +21 -> 2345678901234123456789012345678901 -dqrot088 rotate 1234567890123456789012345678901234 +22 -> 3456789012341234567890123456789012 -dqrot089 rotate 1234567890123456789012345678901234 +23 -> 4567890123412345678901234567890123 -dqrot090 rotate 1234567890123456789012345678901234 +24 -> 5678901234123456789012345678901234 -dqrot091 rotate 1234567890123456789012345678901234 +25 -> 6789012341234567890123456789012345 -dqrot092 rotate 1234567890123456789012345678901234 +26 -> 7890123412345678901234567890123456 -dqrot093 rotate 1234567890123456789012345678901234 +27 -> 8901234123456789012345678901234567 -dqrot094 rotate 1234567890123456789012345678901234 +28 -> 9012341234567890123456789012345678 -dqrot095 rotate 1234567890123456789012345678901234 +29 -> 123412345678901234567890123456789 -dqrot096 rotate 1234567890123456789012345678901234 +30 -> 1234123456789012345678901234567890 -dqrot097 rotate 1234567890123456789012345678901234 +31 -> 2341234567890123456789012345678901 -dqrot098 rotate 1234567890123456789012345678901234 +32 -> 3412345678901234567890123456789012 -dqrot099 rotate 1234567890123456789012345678901234 +33 -> 4123456789012345678901234567890123 -dqrot100 rotate 1234567890123456789012345678901234 +34 -> 1234567890123456789012345678901234 - --- zeros -dqrot270 rotate 0E-10 +29 -> 0E-10 -dqrot271 rotate 0E-10 -29 -> 0E-10 -dqrot272 rotate 0.000 +29 -> 0.000 -dqrot273 rotate 0.000 -29 -> 0.000 -dqrot274 rotate 0E+10 +29 -> 0E+10 -dqrot275 rotate 0E+10 -29 -> 0E+10 -dqrot276 rotate -0E-10 +29 -> -0E-10 -dqrot277 rotate -0E-10 -29 -> -0E-10 -dqrot278 rotate -0.000 +29 -> -0.000 -dqrot279 rotate -0.000 -29 -> -0.000 -dqrot280 rotate -0E+10 +29 -> -0E+10 -dqrot281 rotate -0E+10 -29 -> -0E+10 - --- Nmax, Nmin, Ntiny -dqrot141 rotate 9.999999999999999999999999999999999E+6144 -1 -> 9.999999999999999999999999999999999E+6144 -dqrot142 rotate 9.999999999999999999999999999999999E+6144 -33 -> 9.999999999999999999999999999999999E+6144 -dqrot143 rotate 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 -dqrot144 rotate 9.999999999999999999999999999999999E+6144 33 -> 9.999999999999999999999999999999999E+6144 -dqrot145 rotate 1E-6143 -1 -> 1.000000000000000000000000000000000E-6110 -dqrot146 rotate 1E-6143 -33 -> 1.0E-6142 -dqrot147 rotate 1E-6143 1 -> 1.0E-6142 -dqrot148 rotate 1E-6143 33 -> 1.000000000000000000000000000000000E-6110 -dqrot151 rotate 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 -dqrot152 rotate 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 -dqrot153 rotate 1.000000000000000000000000000000000E-6143 1 -> 1E-6176 -dqrot154 rotate 1.000000000000000000000000000000000E-6143 33 -> 1.00000000000000000000000000000000E-6144 -dqrot155 rotate 9.000000000000000000000000000000000E-6143 -1 -> 9.00000000000000000000000000000000E-6144 -dqrot156 rotate 9.000000000000000000000000000000000E-6143 -33 -> 9E-6176 -dqrot157 rotate 9.000000000000000000000000000000000E-6143 1 -> 9E-6176 -dqrot158 rotate 9.000000000000000000000000000000000E-6143 33 -> 9.00000000000000000000000000000000E-6144 -dqrot160 rotate 1E-6176 -1 -> 1.000000000000000000000000000000000E-6143 -dqrot161 rotate 1E-6176 -33 -> 1.0E-6175 -dqrot162 rotate 1E-6176 1 -> 1.0E-6175 -dqrot163 rotate 1E-6176 33 -> 1.000000000000000000000000000000000E-6143 --- negatives -dqrot171 rotate -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 -dqrot172 rotate -9.999999999999999999999999999999999E+6144 -33 -> -9.999999999999999999999999999999999E+6144 -dqrot173 rotate -9.999999999999999999999999999999999E+6144 1 -> -9.999999999999999999999999999999999E+6144 -dqrot174 rotate -9.999999999999999999999999999999999E+6144 33 -> -9.999999999999999999999999999999999E+6144 -dqrot175 rotate -1E-6143 -1 -> -1.000000000000000000000000000000000E-6110 -dqrot176 rotate -1E-6143 -33 -> -1.0E-6142 -dqrot177 rotate -1E-6143 1 -> -1.0E-6142 -dqrot178 rotate -1E-6143 33 -> -1.000000000000000000000000000000000E-6110 -dqrot181 rotate -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 -dqrot182 rotate -1.000000000000000000000000000000000E-6143 -33 -> -1E-6176 -dqrot183 rotate -1.000000000000000000000000000000000E-6143 1 -> -1E-6176 -dqrot184 rotate -1.000000000000000000000000000000000E-6143 33 -> -1.00000000000000000000000000000000E-6144 -dqrot185 rotate -9.000000000000000000000000000000000E-6143 -1 -> -9.00000000000000000000000000000000E-6144 -dqrot186 rotate -9.000000000000000000000000000000000E-6143 -33 -> -9E-6176 -dqrot187 rotate -9.000000000000000000000000000000000E-6143 1 -> -9E-6176 -dqrot188 rotate -9.000000000000000000000000000000000E-6143 33 -> -9.00000000000000000000000000000000E-6144 -dqrot190 rotate -1E-6176 -1 -> -1.000000000000000000000000000000000E-6143 -dqrot191 rotate -1E-6176 -33 -> -1.0E-6175 -dqrot192 rotate -1E-6176 1 -> -1.0E-6175 -dqrot193 rotate -1E-6176 33 -> -1.000000000000000000000000000000000E-6143 - --- more negatives (of sanities) -dqrot201 rotate -0 0 -> -0 -dqrot202 rotate -0 2 -> -0 -dqrot203 rotate -1 2 -> -100 -dqrot204 rotate -1 33 -> -1000000000000000000000000000000000 -dqrot205 rotate -1 34 -> -1 -dqrot206 rotate -1 -1 -> -1000000000000000000000000000000000 -dqrot207 rotate -0 -2 -> -0 -dqrot208 rotate -1234567890123456789012345678901234 -1 -> -4123456789012345678901234567890123 -dqrot209 rotate -1234567890123456789012345678901234 -33 -> -2345678901234567890123456789012341 -dqrot210 rotate -1234567890123456789012345678901234 -34 -> -1234567890123456789012345678901234 -dqrot211 rotate -9934567890123456789012345678901234 -33 -> -9345678901234567890123456789012349 -dqrot212 rotate -9934567890123456789012345678901234 -34 -> -9934567890123456789012345678901234 - - --- Specials; NaNs are handled as usual -dqrot781 rotate -Inf -8 -> -Infinity -dqrot782 rotate -Inf -1 -> -Infinity -dqrot783 rotate -Inf -0 -> -Infinity -dqrot784 rotate -Inf 0 -> -Infinity -dqrot785 rotate -Inf 1 -> -Infinity -dqrot786 rotate -Inf 8 -> -Infinity -dqrot787 rotate -1000 -Inf -> NaN Invalid_operation -dqrot788 rotate -Inf -Inf -> NaN Invalid_operation -dqrot789 rotate -1 -Inf -> NaN Invalid_operation -dqrot790 rotate -0 -Inf -> NaN Invalid_operation -dqrot791 rotate 0 -Inf -> NaN Invalid_operation -dqrot792 rotate 1 -Inf -> NaN Invalid_operation -dqrot793 rotate 1000 -Inf -> NaN Invalid_operation -dqrot794 rotate Inf -Inf -> NaN Invalid_operation - -dqrot800 rotate Inf -Inf -> NaN Invalid_operation -dqrot801 rotate Inf -8 -> Infinity -dqrot802 rotate Inf -1 -> Infinity -dqrot803 rotate Inf -0 -> Infinity -dqrot804 rotate Inf 0 -> Infinity -dqrot805 rotate Inf 1 -> Infinity -dqrot806 rotate Inf 8 -> Infinity -dqrot807 rotate Inf Inf -> NaN Invalid_operation -dqrot808 rotate -1000 Inf -> NaN Invalid_operation -dqrot809 rotate -Inf Inf -> NaN Invalid_operation -dqrot810 rotate -1 Inf -> NaN Invalid_operation -dqrot811 rotate -0 Inf -> NaN Invalid_operation -dqrot812 rotate 0 Inf -> NaN Invalid_operation -dqrot813 rotate 1 Inf -> NaN Invalid_operation -dqrot814 rotate 1000 Inf -> NaN Invalid_operation -dqrot815 rotate Inf Inf -> NaN Invalid_operation - -dqrot821 rotate NaN -Inf -> NaN -dqrot822 rotate NaN -1000 -> NaN -dqrot823 rotate NaN -1 -> NaN -dqrot824 rotate NaN -0 -> NaN -dqrot825 rotate NaN 0 -> NaN -dqrot826 rotate NaN 1 -> NaN -dqrot827 rotate NaN 1000 -> NaN -dqrot828 rotate NaN Inf -> NaN -dqrot829 rotate NaN NaN -> NaN -dqrot830 rotate -Inf NaN -> NaN -dqrot831 rotate -1000 NaN -> NaN -dqrot832 rotate -1 NaN -> NaN -dqrot833 rotate -0 NaN -> NaN -dqrot834 rotate 0 NaN -> NaN -dqrot835 rotate 1 NaN -> NaN -dqrot836 rotate 1000 NaN -> NaN -dqrot837 rotate Inf NaN -> NaN - -dqrot841 rotate sNaN -Inf -> NaN Invalid_operation -dqrot842 rotate sNaN -1000 -> NaN Invalid_operation -dqrot843 rotate sNaN -1 -> NaN Invalid_operation -dqrot844 rotate sNaN -0 -> NaN Invalid_operation -dqrot845 rotate sNaN 0 -> NaN Invalid_operation -dqrot846 rotate sNaN 1 -> NaN Invalid_operation -dqrot847 rotate sNaN 1000 -> NaN Invalid_operation -dqrot848 rotate sNaN NaN -> NaN Invalid_operation -dqrot849 rotate sNaN sNaN -> NaN Invalid_operation -dqrot850 rotate NaN sNaN -> NaN Invalid_operation -dqrot851 rotate -Inf sNaN -> NaN Invalid_operation -dqrot852 rotate -1000 sNaN -> NaN Invalid_operation -dqrot853 rotate -1 sNaN -> NaN Invalid_operation -dqrot854 rotate -0 sNaN -> NaN Invalid_operation -dqrot855 rotate 0 sNaN -> NaN Invalid_operation -dqrot856 rotate 1 sNaN -> NaN Invalid_operation -dqrot857 rotate 1000 sNaN -> NaN Invalid_operation -dqrot858 rotate Inf sNaN -> NaN Invalid_operation -dqrot859 rotate NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqrot861 rotate NaN1 -Inf -> NaN1 -dqrot862 rotate +NaN2 -1000 -> NaN2 -dqrot863 rotate NaN3 1000 -> NaN3 -dqrot864 rotate NaN4 Inf -> NaN4 -dqrot865 rotate NaN5 +NaN6 -> NaN5 -dqrot866 rotate -Inf NaN7 -> NaN7 -dqrot867 rotate -1000 NaN8 -> NaN8 -dqrot868 rotate 1000 NaN9 -> NaN9 -dqrot869 rotate Inf +NaN10 -> NaN10 -dqrot871 rotate sNaN11 -Inf -> NaN11 Invalid_operation -dqrot872 rotate sNaN12 -1000 -> NaN12 Invalid_operation -dqrot873 rotate sNaN13 1000 -> NaN13 Invalid_operation -dqrot874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation -dqrot875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation -dqrot876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation -dqrot877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation -dqrot878 rotate -1000 sNaN21 -> NaN21 Invalid_operation -dqrot879 rotate 1000 sNaN22 -> NaN22 Invalid_operation -dqrot880 rotate Inf sNaN23 -> NaN23 Invalid_operation -dqrot881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqrot882 rotate -NaN26 NaN28 -> -NaN26 -dqrot883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqrot884 rotate 1000 -NaN30 -> -NaN30 -dqrot885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- dqRotate.decTest -- rotate decQuad coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqrot001 rotate 0 0 -> 0 +dqrot002 rotate 0 2 -> 0 +dqrot003 rotate 1 2 -> 100 +dqrot004 rotate 1 33 -> 1000000000000000000000000000000000 +dqrot005 rotate 1 34 -> 1 +dqrot006 rotate 1 -1 -> 1000000000000000000000000000000000 +dqrot007 rotate 0 -2 -> 0 +dqrot008 rotate 1234567890123456789012345678901234 -1 -> 4123456789012345678901234567890123 +dqrot009 rotate 1234567890123456789012345678901234 -33 -> 2345678901234567890123456789012341 +dqrot010 rotate 1234567890123456789012345678901234 -34 -> 1234567890123456789012345678901234 +dqrot011 rotate 9934567890123456789012345678901234 -33 -> 9345678901234567890123456789012349 +dqrot012 rotate 9934567890123456789012345678901234 -34 -> 9934567890123456789012345678901234 + +-- rhs must be an integer +dqrot015 rotate 1 1.5 -> NaN Invalid_operation +dqrot016 rotate 1 1.0 -> NaN Invalid_operation +dqrot017 rotate 1 0.1 -> NaN Invalid_operation +dqrot018 rotate 1 0.0 -> NaN Invalid_operation +dqrot019 rotate 1 1E+1 -> NaN Invalid_operation +dqrot020 rotate 1 1E+99 -> NaN Invalid_operation +dqrot021 rotate 1 Inf -> NaN Invalid_operation +dqrot022 rotate 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +dqrot025 rotate 1 -1000 -> NaN Invalid_operation +dqrot026 rotate 1 -35 -> NaN Invalid_operation +dqrot027 rotate 1 35 -> NaN Invalid_operation +dqrot028 rotate 1 1000 -> NaN Invalid_operation + +-- full pattern +dqrot030 rotate 1234567890123456789012345678901234 -34 -> 1234567890123456789012345678901234 +dqrot031 rotate 1234567890123456789012345678901234 -33 -> 2345678901234567890123456789012341 +dqrot032 rotate 1234567890123456789012345678901234 -32 -> 3456789012345678901234567890123412 +dqrot033 rotate 1234567890123456789012345678901234 -31 -> 4567890123456789012345678901234123 +dqrot034 rotate 1234567890123456789012345678901234 -30 -> 5678901234567890123456789012341234 +dqrot035 rotate 1234567890123456789012345678901234 -29 -> 6789012345678901234567890123412345 +dqrot036 rotate 1234567890123456789012345678901234 -28 -> 7890123456789012345678901234123456 +dqrot037 rotate 1234567890123456789012345678901234 -27 -> 8901234567890123456789012341234567 +dqrot038 rotate 1234567890123456789012345678901234 -26 -> 9012345678901234567890123412345678 +dqrot039 rotate 1234567890123456789012345678901234 -25 -> 123456789012345678901234123456789 +dqrot040 rotate 1234567890123456789012345678901234 -24 -> 1234567890123456789012341234567890 +dqrot041 rotate 1234567890123456789012345678901234 -23 -> 2345678901234567890123412345678901 +dqrot042 rotate 1234567890123456789012345678901234 -22 -> 3456789012345678901234123456789012 +dqrot043 rotate 1234567890123456789012345678901234 -21 -> 4567890123456789012341234567890123 +dqrot044 rotate 1234567890123456789012345678901234 -20 -> 5678901234567890123412345678901234 +dqrot045 rotate 1234567890123456789012345678901234 -19 -> 6789012345678901234123456789012345 +dqrot047 rotate 1234567890123456789012345678901234 -18 -> 7890123456789012341234567890123456 +dqrot048 rotate 1234567890123456789012345678901234 -17 -> 8901234567890123412345678901234567 +dqrot049 rotate 1234567890123456789012345678901234 -16 -> 9012345678901234123456789012345678 +dqrot050 rotate 1234567890123456789012345678901234 -15 -> 123456789012341234567890123456789 +dqrot051 rotate 1234567890123456789012345678901234 -14 -> 1234567890123412345678901234567890 +dqrot052 rotate 1234567890123456789012345678901234 -13 -> 2345678901234123456789012345678901 +dqrot053 rotate 1234567890123456789012345678901234 -12 -> 3456789012341234567890123456789012 +dqrot054 rotate 1234567890123456789012345678901234 -11 -> 4567890123412345678901234567890123 +dqrot055 rotate 1234567890123456789012345678901234 -10 -> 5678901234123456789012345678901234 +dqrot056 rotate 1234567890123456789012345678901234 -9 -> 6789012341234567890123456789012345 +dqrot057 rotate 1234567890123456789012345678901234 -8 -> 7890123412345678901234567890123456 +dqrot058 rotate 1234567890123456789012345678901234 -7 -> 8901234123456789012345678901234567 +dqrot059 rotate 1234567890123456789012345678901234 -6 -> 9012341234567890123456789012345678 +dqrot060 rotate 1234567890123456789012345678901234 -5 -> 123412345678901234567890123456789 +dqrot061 rotate 1234567890123456789012345678901234 -4 -> 1234123456789012345678901234567890 +dqrot062 rotate 1234567890123456789012345678901234 -3 -> 2341234567890123456789012345678901 +dqrot063 rotate 1234567890123456789012345678901234 -2 -> 3412345678901234567890123456789012 +dqrot064 rotate 1234567890123456789012345678901234 -1 -> 4123456789012345678901234567890123 +dqrot065 rotate 1234567890123456789012345678901234 -0 -> 1234567890123456789012345678901234 + +dqrot066 rotate 1234567890123456789012345678901234 +0 -> 1234567890123456789012345678901234 +dqrot067 rotate 1234567890123456789012345678901234 +1 -> 2345678901234567890123456789012341 +dqrot068 rotate 1234567890123456789012345678901234 +2 -> 3456789012345678901234567890123412 +dqrot069 rotate 1234567890123456789012345678901234 +3 -> 4567890123456789012345678901234123 +dqrot070 rotate 1234567890123456789012345678901234 +4 -> 5678901234567890123456789012341234 +dqrot071 rotate 1234567890123456789012345678901234 +5 -> 6789012345678901234567890123412345 +dqrot072 rotate 1234567890123456789012345678901234 +6 -> 7890123456789012345678901234123456 +dqrot073 rotate 1234567890123456789012345678901234 +7 -> 8901234567890123456789012341234567 +dqrot074 rotate 1234567890123456789012345678901234 +8 -> 9012345678901234567890123412345678 +dqrot075 rotate 1234567890123456789012345678901234 +9 -> 123456789012345678901234123456789 +dqrot076 rotate 1234567890123456789012345678901234 +10 -> 1234567890123456789012341234567890 +dqrot077 rotate 1234567890123456789012345678901234 +11 -> 2345678901234567890123412345678901 +dqrot078 rotate 1234567890123456789012345678901234 +12 -> 3456789012345678901234123456789012 +dqrot079 rotate 1234567890123456789012345678901234 +13 -> 4567890123456789012341234567890123 +dqrot080 rotate 1234567890123456789012345678901234 +14 -> 5678901234567890123412345678901234 +dqrot081 rotate 1234567890123456789012345678901234 +15 -> 6789012345678901234123456789012345 +dqrot082 rotate 1234567890123456789012345678901234 +16 -> 7890123456789012341234567890123456 +dqrot083 rotate 1234567890123456789012345678901234 +17 -> 8901234567890123412345678901234567 +dqrot084 rotate 1234567890123456789012345678901234 +18 -> 9012345678901234123456789012345678 +dqrot085 rotate 1234567890123456789012345678901234 +19 -> 123456789012341234567890123456789 +dqrot086 rotate 1234567890123456789012345678901234 +20 -> 1234567890123412345678901234567890 +dqrot087 rotate 1234567890123456789012345678901234 +21 -> 2345678901234123456789012345678901 +dqrot088 rotate 1234567890123456789012345678901234 +22 -> 3456789012341234567890123456789012 +dqrot089 rotate 1234567890123456789012345678901234 +23 -> 4567890123412345678901234567890123 +dqrot090 rotate 1234567890123456789012345678901234 +24 -> 5678901234123456789012345678901234 +dqrot091 rotate 1234567890123456789012345678901234 +25 -> 6789012341234567890123456789012345 +dqrot092 rotate 1234567890123456789012345678901234 +26 -> 7890123412345678901234567890123456 +dqrot093 rotate 1234567890123456789012345678901234 +27 -> 8901234123456789012345678901234567 +dqrot094 rotate 1234567890123456789012345678901234 +28 -> 9012341234567890123456789012345678 +dqrot095 rotate 1234567890123456789012345678901234 +29 -> 123412345678901234567890123456789 +dqrot096 rotate 1234567890123456789012345678901234 +30 -> 1234123456789012345678901234567890 +dqrot097 rotate 1234567890123456789012345678901234 +31 -> 2341234567890123456789012345678901 +dqrot098 rotate 1234567890123456789012345678901234 +32 -> 3412345678901234567890123456789012 +dqrot099 rotate 1234567890123456789012345678901234 +33 -> 4123456789012345678901234567890123 +dqrot100 rotate 1234567890123456789012345678901234 +34 -> 1234567890123456789012345678901234 + +-- zeros +dqrot270 rotate 0E-10 +29 -> 0E-10 +dqrot271 rotate 0E-10 -29 -> 0E-10 +dqrot272 rotate 0.000 +29 -> 0.000 +dqrot273 rotate 0.000 -29 -> 0.000 +dqrot274 rotate 0E+10 +29 -> 0E+10 +dqrot275 rotate 0E+10 -29 -> 0E+10 +dqrot276 rotate -0E-10 +29 -> -0E-10 +dqrot277 rotate -0E-10 -29 -> -0E-10 +dqrot278 rotate -0.000 +29 -> -0.000 +dqrot279 rotate -0.000 -29 -> -0.000 +dqrot280 rotate -0E+10 +29 -> -0E+10 +dqrot281 rotate -0E+10 -29 -> -0E+10 + +-- Nmax, Nmin, Ntiny +dqrot141 rotate 9.999999999999999999999999999999999E+6144 -1 -> 9.999999999999999999999999999999999E+6144 +dqrot142 rotate 9.999999999999999999999999999999999E+6144 -33 -> 9.999999999999999999999999999999999E+6144 +dqrot143 rotate 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999999E+6144 +dqrot144 rotate 9.999999999999999999999999999999999E+6144 33 -> 9.999999999999999999999999999999999E+6144 +dqrot145 rotate 1E-6143 -1 -> 1.000000000000000000000000000000000E-6110 +dqrot146 rotate 1E-6143 -33 -> 1.0E-6142 +dqrot147 rotate 1E-6143 1 -> 1.0E-6142 +dqrot148 rotate 1E-6143 33 -> 1.000000000000000000000000000000000E-6110 +dqrot151 rotate 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 +dqrot152 rotate 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 +dqrot153 rotate 1.000000000000000000000000000000000E-6143 1 -> 1E-6176 +dqrot154 rotate 1.000000000000000000000000000000000E-6143 33 -> 1.00000000000000000000000000000000E-6144 +dqrot155 rotate 9.000000000000000000000000000000000E-6143 -1 -> 9.00000000000000000000000000000000E-6144 +dqrot156 rotate 9.000000000000000000000000000000000E-6143 -33 -> 9E-6176 +dqrot157 rotate 9.000000000000000000000000000000000E-6143 1 -> 9E-6176 +dqrot158 rotate 9.000000000000000000000000000000000E-6143 33 -> 9.00000000000000000000000000000000E-6144 +dqrot160 rotate 1E-6176 -1 -> 1.000000000000000000000000000000000E-6143 +dqrot161 rotate 1E-6176 -33 -> 1.0E-6175 +dqrot162 rotate 1E-6176 1 -> 1.0E-6175 +dqrot163 rotate 1E-6176 33 -> 1.000000000000000000000000000000000E-6143 +-- negatives +dqrot171 rotate -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6144 +dqrot172 rotate -9.999999999999999999999999999999999E+6144 -33 -> -9.999999999999999999999999999999999E+6144 +dqrot173 rotate -9.999999999999999999999999999999999E+6144 1 -> -9.999999999999999999999999999999999E+6144 +dqrot174 rotate -9.999999999999999999999999999999999E+6144 33 -> -9.999999999999999999999999999999999E+6144 +dqrot175 rotate -1E-6143 -1 -> -1.000000000000000000000000000000000E-6110 +dqrot176 rotate -1E-6143 -33 -> -1.0E-6142 +dqrot177 rotate -1E-6143 1 -> -1.0E-6142 +dqrot178 rotate -1E-6143 33 -> -1.000000000000000000000000000000000E-6110 +dqrot181 rotate -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 +dqrot182 rotate -1.000000000000000000000000000000000E-6143 -33 -> -1E-6176 +dqrot183 rotate -1.000000000000000000000000000000000E-6143 1 -> -1E-6176 +dqrot184 rotate -1.000000000000000000000000000000000E-6143 33 -> -1.00000000000000000000000000000000E-6144 +dqrot185 rotate -9.000000000000000000000000000000000E-6143 -1 -> -9.00000000000000000000000000000000E-6144 +dqrot186 rotate -9.000000000000000000000000000000000E-6143 -33 -> -9E-6176 +dqrot187 rotate -9.000000000000000000000000000000000E-6143 1 -> -9E-6176 +dqrot188 rotate -9.000000000000000000000000000000000E-6143 33 -> -9.00000000000000000000000000000000E-6144 +dqrot190 rotate -1E-6176 -1 -> -1.000000000000000000000000000000000E-6143 +dqrot191 rotate -1E-6176 -33 -> -1.0E-6175 +dqrot192 rotate -1E-6176 1 -> -1.0E-6175 +dqrot193 rotate -1E-6176 33 -> -1.000000000000000000000000000000000E-6143 + +-- more negatives (of sanities) +dqrot201 rotate -0 0 -> -0 +dqrot202 rotate -0 2 -> -0 +dqrot203 rotate -1 2 -> -100 +dqrot204 rotate -1 33 -> -1000000000000000000000000000000000 +dqrot205 rotate -1 34 -> -1 +dqrot206 rotate -1 -1 -> -1000000000000000000000000000000000 +dqrot207 rotate -0 -2 -> -0 +dqrot208 rotate -1234567890123456789012345678901234 -1 -> -4123456789012345678901234567890123 +dqrot209 rotate -1234567890123456789012345678901234 -33 -> -2345678901234567890123456789012341 +dqrot210 rotate -1234567890123456789012345678901234 -34 -> -1234567890123456789012345678901234 +dqrot211 rotate -9934567890123456789012345678901234 -33 -> -9345678901234567890123456789012349 +dqrot212 rotate -9934567890123456789012345678901234 -34 -> -9934567890123456789012345678901234 + + +-- Specials; NaNs are handled as usual +dqrot781 rotate -Inf -8 -> -Infinity +dqrot782 rotate -Inf -1 -> -Infinity +dqrot783 rotate -Inf -0 -> -Infinity +dqrot784 rotate -Inf 0 -> -Infinity +dqrot785 rotate -Inf 1 -> -Infinity +dqrot786 rotate -Inf 8 -> -Infinity +dqrot787 rotate -1000 -Inf -> NaN Invalid_operation +dqrot788 rotate -Inf -Inf -> NaN Invalid_operation +dqrot789 rotate -1 -Inf -> NaN Invalid_operation +dqrot790 rotate -0 -Inf -> NaN Invalid_operation +dqrot791 rotate 0 -Inf -> NaN Invalid_operation +dqrot792 rotate 1 -Inf -> NaN Invalid_operation +dqrot793 rotate 1000 -Inf -> NaN Invalid_operation +dqrot794 rotate Inf -Inf -> NaN Invalid_operation + +dqrot800 rotate Inf -Inf -> NaN Invalid_operation +dqrot801 rotate Inf -8 -> Infinity +dqrot802 rotate Inf -1 -> Infinity +dqrot803 rotate Inf -0 -> Infinity +dqrot804 rotate Inf 0 -> Infinity +dqrot805 rotate Inf 1 -> Infinity +dqrot806 rotate Inf 8 -> Infinity +dqrot807 rotate Inf Inf -> NaN Invalid_operation +dqrot808 rotate -1000 Inf -> NaN Invalid_operation +dqrot809 rotate -Inf Inf -> NaN Invalid_operation +dqrot810 rotate -1 Inf -> NaN Invalid_operation +dqrot811 rotate -0 Inf -> NaN Invalid_operation +dqrot812 rotate 0 Inf -> NaN Invalid_operation +dqrot813 rotate 1 Inf -> NaN Invalid_operation +dqrot814 rotate 1000 Inf -> NaN Invalid_operation +dqrot815 rotate Inf Inf -> NaN Invalid_operation + +dqrot821 rotate NaN -Inf -> NaN +dqrot822 rotate NaN -1000 -> NaN +dqrot823 rotate NaN -1 -> NaN +dqrot824 rotate NaN -0 -> NaN +dqrot825 rotate NaN 0 -> NaN +dqrot826 rotate NaN 1 -> NaN +dqrot827 rotate NaN 1000 -> NaN +dqrot828 rotate NaN Inf -> NaN +dqrot829 rotate NaN NaN -> NaN +dqrot830 rotate -Inf NaN -> NaN +dqrot831 rotate -1000 NaN -> NaN +dqrot832 rotate -1 NaN -> NaN +dqrot833 rotate -0 NaN -> NaN +dqrot834 rotate 0 NaN -> NaN +dqrot835 rotate 1 NaN -> NaN +dqrot836 rotate 1000 NaN -> NaN +dqrot837 rotate Inf NaN -> NaN + +dqrot841 rotate sNaN -Inf -> NaN Invalid_operation +dqrot842 rotate sNaN -1000 -> NaN Invalid_operation +dqrot843 rotate sNaN -1 -> NaN Invalid_operation +dqrot844 rotate sNaN -0 -> NaN Invalid_operation +dqrot845 rotate sNaN 0 -> NaN Invalid_operation +dqrot846 rotate sNaN 1 -> NaN Invalid_operation +dqrot847 rotate sNaN 1000 -> NaN Invalid_operation +dqrot848 rotate sNaN NaN -> NaN Invalid_operation +dqrot849 rotate sNaN sNaN -> NaN Invalid_operation +dqrot850 rotate NaN sNaN -> NaN Invalid_operation +dqrot851 rotate -Inf sNaN -> NaN Invalid_operation +dqrot852 rotate -1000 sNaN -> NaN Invalid_operation +dqrot853 rotate -1 sNaN -> NaN Invalid_operation +dqrot854 rotate -0 sNaN -> NaN Invalid_operation +dqrot855 rotate 0 sNaN -> NaN Invalid_operation +dqrot856 rotate 1 sNaN -> NaN Invalid_operation +dqrot857 rotate 1000 sNaN -> NaN Invalid_operation +dqrot858 rotate Inf sNaN -> NaN Invalid_operation +dqrot859 rotate NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqrot861 rotate NaN1 -Inf -> NaN1 +dqrot862 rotate +NaN2 -1000 -> NaN2 +dqrot863 rotate NaN3 1000 -> NaN3 +dqrot864 rotate NaN4 Inf -> NaN4 +dqrot865 rotate NaN5 +NaN6 -> NaN5 +dqrot866 rotate -Inf NaN7 -> NaN7 +dqrot867 rotate -1000 NaN8 -> NaN8 +dqrot868 rotate 1000 NaN9 -> NaN9 +dqrot869 rotate Inf +NaN10 -> NaN10 +dqrot871 rotate sNaN11 -Inf -> NaN11 Invalid_operation +dqrot872 rotate sNaN12 -1000 -> NaN12 Invalid_operation +dqrot873 rotate sNaN13 1000 -> NaN13 Invalid_operation +dqrot874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation +dqrot875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation +dqrot876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation +dqrot877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation +dqrot878 rotate -1000 sNaN21 -> NaN21 Invalid_operation +dqrot879 rotate 1000 sNaN22 -> NaN22 Invalid_operation +dqrot880 rotate Inf sNaN23 -> NaN23 Invalid_operation +dqrot881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqrot882 rotate -NaN26 NaN28 -> -NaN26 +dqrot883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqrot884 rotate 1000 -NaN30 -> -NaN30 +dqrot885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/dqSameQuantum.decTest b/Lib/test/decimaltestdata/dqSameQuantum.decTest index 257cda802d5..2f356bbae91 100644 --- a/Lib/test/decimaltestdata/dqSameQuantum.decTest +++ b/Lib/test/decimaltestdata/dqSameQuantum.decTest @@ -1,389 +1,389 @@ ------------------------------------------------------------------------- --- dqSameQuantum.decTest -- check decQuad quantums match -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- All operands and results are decQuads. -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqsamq001 samequantum 0 0 -> 1 -dqsamq002 samequantum 0 1 -> 1 -dqsamq003 samequantum 1 0 -> 1 -dqsamq004 samequantum 1 1 -> 1 - -dqsamq011 samequantum 10 1E+1 -> 0 -dqsamq012 samequantum 10E+1 10E+1 -> 1 -dqsamq013 samequantum 100 10E+1 -> 0 -dqsamq014 samequantum 100 1E+2 -> 0 -dqsamq015 samequantum 0.1 1E-2 -> 0 -dqsamq016 samequantum 0.1 1E-1 -> 1 -dqsamq017 samequantum 0.1 1E-0 -> 0 -dqsamq018 samequantum 999 999 -> 1 -dqsamq019 samequantum 999E-1 99.9 -> 1 -dqsamq020 samequantum 111E-1 22.2 -> 1 -dqsamq021 samequantum 111E-1 1234.2 -> 1 - --- zeros -dqsamq030 samequantum 0.0 1.1 -> 1 -dqsamq031 samequantum 0.0 1.11 -> 0 -dqsamq032 samequantum 0.0 0 -> 0 -dqsamq033 samequantum 0.0 0.0 -> 1 -dqsamq034 samequantum 0.0 0.00 -> 0 -dqsamq035 samequantum 0E+1 0E+0 -> 0 -dqsamq036 samequantum 0E+1 0E+1 -> 1 -dqsamq037 samequantum 0E+1 0E+2 -> 0 -dqsamq038 samequantum 0E-17 0E-16 -> 0 -dqsamq039 samequantum 0E-17 0E-17 -> 1 -dqsamq040 samequantum 0E-17 0E-18 -> 0 -dqsamq041 samequantum 0E-17 0.0E-15 -> 0 -dqsamq042 samequantum 0E-17 0.0E-16 -> 1 -dqsamq043 samequantum 0E-17 0.0E-17 -> 0 -dqsamq044 samequantum -0E-17 0.0E-16 -> 1 -dqsamq045 samequantum 0E-17 -0.0E-17 -> 0 -dqsamq046 samequantum 0E-17 -0.0E-16 -> 1 -dqsamq047 samequantum -0E-17 0.0E-17 -> 0 -dqsamq048 samequantum -0E-17 -0.0E-16 -> 1 -dqsamq049 samequantum -0E-17 -0.0E-17 -> 0 - --- Nmax, Nmin, Ntiny -dqsamq051 samequantum 9.99999999999999999999999999999999E+6144 9.99999999999999999999999999999999E+6144 -> 1 -dqsamq052 samequantum 1E-6143 1E-6143 -> 1 -dqsamq053 samequantum 1.00000000000000000000000000000000E-6143 1.00000000000000000000000000000000E-6143 -> 1 -dqsamq054 samequantum 1E-6176 1E-6176 -> 1 -dqsamq055 samequantum 9.99999999999999999999999999999999E+6144 9.99999999999999999999999999999999E+6144 -> 1 -dqsamq056 samequantum 1E-6143 1E-6143 -> 1 -dqsamq057 samequantum 1.00000000000000000000000000000000E-6143 1.00000000000000000000000000000000E-6143 -> 1 -dqsamq058 samequantum 1E-6176 1E-6176 -> 1 - -dqsamq061 samequantum -1E-6176 -1E-6176 -> 1 -dqsamq062 samequantum -1.00000000000000000000000000000000E-6143 -1.00000000000000000000000000000000E-6143 -> 1 -dqsamq063 samequantum -1E-6143 -1E-6143 -> 1 -dqsamq064 samequantum -9.99999999999999999999999999999999E+6144 -9.99999999999999999999999999999999E+6144 -> 1 -dqsamq065 samequantum -1E-6176 -1E-6176 -> 1 -dqsamq066 samequantum -1.00000000000000000000000000000000E-6143 -1.00000000000000000000000000000000E-6143 -> 1 -dqsamq067 samequantum -1E-6143 -1E-6143 -> 1 -dqsamq068 samequantum -9.99999999999999999999999999999999E+6144 -9.99999999999999999999999999999999E+6144 -> 1 - -dqsamq071 samequantum -4E-6176 -1E-6176 -> 1 -dqsamq072 samequantum -4.00000000000000000000000000000000E-6143 -1.00000000000000000000000000004000E-6143 -> 1 -dqsamq073 samequantum -4E-6143 -1E-6143 -> 1 -dqsamq074 samequantum -4.99999999999999999999999999999999E+6144 -9.99949999999999999999999999999999E+6144 -> 1 -dqsamq075 samequantum -4E-6176 -1E-6176 -> 1 -dqsamq076 samequantum -4.00000000000000000000000000000000E-6143 -1.00400000000000000000000000000000E-6143 -> 1 -dqsamq077 samequantum -4E-6143 -1E-6143 -> 1 -dqsamq078 samequantum -4.99999999999999999999999999999999E+6144 -9.94999999999999999999999999999999E+6144 -> 1 - -dqsamq081 samequantum -4E-1006 -1E-6176 -> 0 -dqsamq082 samequantum -4.00000000000000000000000000000000E-6143 -1.00004000000000000000000000000000E-6136 -> 0 -dqsamq083 samequantum -4E-6140 -1E-6143 -> 0 -dqsamq084 samequantum -4.99999999999999999999999999999999E+6144 -9.99949999999999999999999999999999E+6136 -> 0 -dqsamq085 samequantum -4E-1006 -1E-6176 -> 0 -dqsamq086 samequantum -4.00000000000000000000000000000000E-6143 -1.00400000000000000000000000000000E-6136 -> 0 -dqsamq087 samequantum -4E-6133 -1E-6143 -> 0 -dqsamq088 samequantum -4.99999999999999999999999999999999E+6144 -9.94999999999999999999999999999999E+6136 -> 0 - --- specials & combinations -dqsamq0110 samequantum -Inf -Inf -> 1 -dqsamq0111 samequantum -Inf Inf -> 1 -dqsamq0112 samequantum -Inf NaN -> 0 -dqsamq0113 samequantum -Inf -7E+3 -> 0 -dqsamq0114 samequantum -Inf -7 -> 0 -dqsamq0115 samequantum -Inf -7E-3 -> 0 -dqsamq0116 samequantum -Inf -0E-3 -> 0 -dqsamq0117 samequantum -Inf -0 -> 0 -dqsamq0118 samequantum -Inf -0E+3 -> 0 -dqsamq0119 samequantum -Inf 0E-3 -> 0 -dqsamq0120 samequantum -Inf 0 -> 0 -dqsamq0121 samequantum -Inf 0E+3 -> 0 -dqsamq0122 samequantum -Inf 7E-3 -> 0 -dqsamq0123 samequantum -Inf 7 -> 0 -dqsamq0124 samequantum -Inf 7E+3 -> 0 -dqsamq0125 samequantum -Inf sNaN -> 0 - -dqsamq0210 samequantum Inf -Inf -> 1 -dqsamq0211 samequantum Inf Inf -> 1 -dqsamq0212 samequantum Inf NaN -> 0 -dqsamq0213 samequantum Inf -7E+3 -> 0 -dqsamq0214 samequantum Inf -7 -> 0 -dqsamq0215 samequantum Inf -7E-3 -> 0 -dqsamq0216 samequantum Inf -0E-3 -> 0 -dqsamq0217 samequantum Inf -0 -> 0 -dqsamq0218 samequantum Inf -0E+3 -> 0 -dqsamq0219 samequantum Inf 0E-3 -> 0 -dqsamq0220 samequantum Inf 0 -> 0 -dqsamq0221 samequantum Inf 0E+3 -> 0 -dqsamq0222 samequantum Inf 7E-3 -> 0 -dqsamq0223 samequantum Inf 7 -> 0 -dqsamq0224 samequantum Inf 7E+3 -> 0 -dqsamq0225 samequantum Inf sNaN -> 0 - -dqsamq0310 samequantum NaN -Inf -> 0 -dqsamq0311 samequantum NaN Inf -> 0 -dqsamq0312 samequantum NaN NaN -> 1 -dqsamq0313 samequantum NaN -7E+3 -> 0 -dqsamq0314 samequantum NaN -7 -> 0 -dqsamq0315 samequantum NaN -7E-3 -> 0 -dqsamq0316 samequantum NaN -0E-3 -> 0 -dqsamq0317 samequantum NaN -0 -> 0 -dqsamq0318 samequantum NaN -0E+3 -> 0 -dqsamq0319 samequantum NaN 0E-3 -> 0 -dqsamq0320 samequantum NaN 0 -> 0 -dqsamq0321 samequantum NaN 0E+3 -> 0 -dqsamq0322 samequantum NaN 7E-3 -> 0 -dqsamq0323 samequantum NaN 7 -> 0 -dqsamq0324 samequantum NaN 7E+3 -> 0 -dqsamq0325 samequantum NaN sNaN -> 1 - -dqsamq0410 samequantum -7E+3 -Inf -> 0 -dqsamq0411 samequantum -7E+3 Inf -> 0 -dqsamq0412 samequantum -7E+3 NaN -> 0 -dqsamq0413 samequantum -7E+3 -7E+3 -> 1 -dqsamq0414 samequantum -7E+3 -7 -> 0 -dqsamq0415 samequantum -7E+3 -7E-3 -> 0 -dqsamq0416 samequantum -7E+3 -0E-3 -> 0 -dqsamq0417 samequantum -7E+3 -0 -> 0 -dqsamq0418 samequantum -7E+3 -0E+3 -> 1 -dqsamq0419 samequantum -7E+3 0E-3 -> 0 -dqsamq0420 samequantum -7E+3 0 -> 0 -dqsamq0421 samequantum -7E+3 0E+3 -> 1 -dqsamq0422 samequantum -7E+3 7E-3 -> 0 -dqsamq0423 samequantum -7E+3 7 -> 0 -dqsamq0424 samequantum -7E+3 7E+3 -> 1 -dqsamq0425 samequantum -7E+3 sNaN -> 0 - -dqsamq0510 samequantum -7 -Inf -> 0 -dqsamq0511 samequantum -7 Inf -> 0 -dqsamq0512 samequantum -7 NaN -> 0 -dqsamq0513 samequantum -7 -7E+3 -> 0 -dqsamq0514 samequantum -7 -7 -> 1 -dqsamq0515 samequantum -7 -7E-3 -> 0 -dqsamq0516 samequantum -7 -0E-3 -> 0 -dqsamq0517 samequantum -7 -0 -> 1 -dqsamq0518 samequantum -7 -0E+3 -> 0 -dqsamq0519 samequantum -7 0E-3 -> 0 -dqsamq0520 samequantum -7 0 -> 1 -dqsamq0521 samequantum -7 0E+3 -> 0 -dqsamq0522 samequantum -7 7E-3 -> 0 -dqsamq0523 samequantum -7 7 -> 1 -dqsamq0524 samequantum -7 7E+3 -> 0 -dqsamq0525 samequantum -7 sNaN -> 0 - -dqsamq0610 samequantum -7E-3 -Inf -> 0 -dqsamq0611 samequantum -7E-3 Inf -> 0 -dqsamq0612 samequantum -7E-3 NaN -> 0 -dqsamq0613 samequantum -7E-3 -7E+3 -> 0 -dqsamq0614 samequantum -7E-3 -7 -> 0 -dqsamq0615 samequantum -7E-3 -7E-3 -> 1 -dqsamq0616 samequantum -7E-3 -0E-3 -> 1 -dqsamq0617 samequantum -7E-3 -0 -> 0 -dqsamq0618 samequantum -7E-3 -0E+3 -> 0 -dqsamq0619 samequantum -7E-3 0E-3 -> 1 -dqsamq0620 samequantum -7E-3 0 -> 0 -dqsamq0621 samequantum -7E-3 0E+3 -> 0 -dqsamq0622 samequantum -7E-3 7E-3 -> 1 -dqsamq0623 samequantum -7E-3 7 -> 0 -dqsamq0624 samequantum -7E-3 7E+3 -> 0 -dqsamq0625 samequantum -7E-3 sNaN -> 0 - -dqsamq0710 samequantum -0E-3 -Inf -> 0 -dqsamq0711 samequantum -0E-3 Inf -> 0 -dqsamq0712 samequantum -0E-3 NaN -> 0 -dqsamq0713 samequantum -0E-3 -7E+3 -> 0 -dqsamq0714 samequantum -0E-3 -7 -> 0 -dqsamq0715 samequantum -0E-3 -7E-3 -> 1 -dqsamq0716 samequantum -0E-3 -0E-3 -> 1 -dqsamq0717 samequantum -0E-3 -0 -> 0 -dqsamq0718 samequantum -0E-3 -0E+3 -> 0 -dqsamq0719 samequantum -0E-3 0E-3 -> 1 -dqsamq0720 samequantum -0E-3 0 -> 0 -dqsamq0721 samequantum -0E-3 0E+3 -> 0 -dqsamq0722 samequantum -0E-3 7E-3 -> 1 -dqsamq0723 samequantum -0E-3 7 -> 0 -dqsamq0724 samequantum -0E-3 7E+3 -> 0 -dqsamq0725 samequantum -0E-3 sNaN -> 0 - -dqsamq0810 samequantum -0 -Inf -> 0 -dqsamq0811 samequantum -0 Inf -> 0 -dqsamq0812 samequantum -0 NaN -> 0 -dqsamq0813 samequantum -0 -7E+3 -> 0 -dqsamq0814 samequantum -0 -7 -> 1 -dqsamq0815 samequantum -0 -7E-3 -> 0 -dqsamq0816 samequantum -0 -0E-3 -> 0 -dqsamq0817 samequantum -0 -0 -> 1 -dqsamq0818 samequantum -0 -0E+3 -> 0 -dqsamq0819 samequantum -0 0E-3 -> 0 -dqsamq0820 samequantum -0 0 -> 1 -dqsamq0821 samequantum -0 0E+3 -> 0 -dqsamq0822 samequantum -0 7E-3 -> 0 -dqsamq0823 samequantum -0 7 -> 1 -dqsamq0824 samequantum -0 7E+3 -> 0 -dqsamq0825 samequantum -0 sNaN -> 0 - -dqsamq0910 samequantum -0E+3 -Inf -> 0 -dqsamq0911 samequantum -0E+3 Inf -> 0 -dqsamq0912 samequantum -0E+3 NaN -> 0 -dqsamq0913 samequantum -0E+3 -7E+3 -> 1 -dqsamq0914 samequantum -0E+3 -7 -> 0 -dqsamq0915 samequantum -0E+3 -7E-3 -> 0 -dqsamq0916 samequantum -0E+3 -0E-3 -> 0 -dqsamq0917 samequantum -0E+3 -0 -> 0 -dqsamq0918 samequantum -0E+3 -0E+3 -> 1 -dqsamq0919 samequantum -0E+3 0E-3 -> 0 -dqsamq0920 samequantum -0E+3 0 -> 0 -dqsamq0921 samequantum -0E+3 0E+3 -> 1 -dqsamq0922 samequantum -0E+3 7E-3 -> 0 -dqsamq0923 samequantum -0E+3 7 -> 0 -dqsamq0924 samequantum -0E+3 7E+3 -> 1 -dqsamq0925 samequantum -0E+3 sNaN -> 0 - -dqsamq1110 samequantum 0E-3 -Inf -> 0 -dqsamq1111 samequantum 0E-3 Inf -> 0 -dqsamq1112 samequantum 0E-3 NaN -> 0 -dqsamq1113 samequantum 0E-3 -7E+3 -> 0 -dqsamq1114 samequantum 0E-3 -7 -> 0 -dqsamq1115 samequantum 0E-3 -7E-3 -> 1 -dqsamq1116 samequantum 0E-3 -0E-3 -> 1 -dqsamq1117 samequantum 0E-3 -0 -> 0 -dqsamq1118 samequantum 0E-3 -0E+3 -> 0 -dqsamq1119 samequantum 0E-3 0E-3 -> 1 -dqsamq1120 samequantum 0E-3 0 -> 0 -dqsamq1121 samequantum 0E-3 0E+3 -> 0 -dqsamq1122 samequantum 0E-3 7E-3 -> 1 -dqsamq1123 samequantum 0E-3 7 -> 0 -dqsamq1124 samequantum 0E-3 7E+3 -> 0 -dqsamq1125 samequantum 0E-3 sNaN -> 0 - -dqsamq1210 samequantum 0 -Inf -> 0 -dqsamq1211 samequantum 0 Inf -> 0 -dqsamq1212 samequantum 0 NaN -> 0 -dqsamq1213 samequantum 0 -7E+3 -> 0 -dqsamq1214 samequantum 0 -7 -> 1 -dqsamq1215 samequantum 0 -7E-3 -> 0 -dqsamq1216 samequantum 0 -0E-3 -> 0 -dqsamq1217 samequantum 0 -0 -> 1 -dqsamq1218 samequantum 0 -0E+3 -> 0 -dqsamq1219 samequantum 0 0E-3 -> 0 -dqsamq1220 samequantum 0 0 -> 1 -dqsamq1221 samequantum 0 0E+3 -> 0 -dqsamq1222 samequantum 0 7E-3 -> 0 -dqsamq1223 samequantum 0 7 -> 1 -dqsamq1224 samequantum 0 7E+3 -> 0 -dqsamq1225 samequantum 0 sNaN -> 0 - -dqsamq1310 samequantum 0E+3 -Inf -> 0 -dqsamq1311 samequantum 0E+3 Inf -> 0 -dqsamq1312 samequantum 0E+3 NaN -> 0 -dqsamq1313 samequantum 0E+3 -7E+3 -> 1 -dqsamq1314 samequantum 0E+3 -7 -> 0 -dqsamq1315 samequantum 0E+3 -7E-3 -> 0 -dqsamq1316 samequantum 0E+3 -0E-3 -> 0 -dqsamq1317 samequantum 0E+3 -0 -> 0 -dqsamq1318 samequantum 0E+3 -0E+3 -> 1 -dqsamq1319 samequantum 0E+3 0E-3 -> 0 -dqsamq1320 samequantum 0E+3 0 -> 0 -dqsamq1321 samequantum 0E+3 0E+3 -> 1 -dqsamq1322 samequantum 0E+3 7E-3 -> 0 -dqsamq1323 samequantum 0E+3 7 -> 0 -dqsamq1324 samequantum 0E+3 7E+3 -> 1 -dqsamq1325 samequantum 0E+3 sNaN -> 0 - -dqsamq1410 samequantum 7E-3 -Inf -> 0 -dqsamq1411 samequantum 7E-3 Inf -> 0 -dqsamq1412 samequantum 7E-3 NaN -> 0 -dqsamq1413 samequantum 7E-3 -7E+3 -> 0 -dqsamq1414 samequantum 7E-3 -7 -> 0 -dqsamq1415 samequantum 7E-3 -7E-3 -> 1 -dqsamq1416 samequantum 7E-3 -0E-3 -> 1 -dqsamq1417 samequantum 7E-3 -0 -> 0 -dqsamq1418 samequantum 7E-3 -0E+3 -> 0 -dqsamq1419 samequantum 7E-3 0E-3 -> 1 -dqsamq1420 samequantum 7E-3 0 -> 0 -dqsamq1421 samequantum 7E-3 0E+3 -> 0 -dqsamq1422 samequantum 7E-3 7E-3 -> 1 -dqsamq1423 samequantum 7E-3 7 -> 0 -dqsamq1424 samequantum 7E-3 7E+3 -> 0 -dqsamq1425 samequantum 7E-3 sNaN -> 0 - -dqsamq1510 samequantum 7 -Inf -> 0 -dqsamq1511 samequantum 7 Inf -> 0 -dqsamq1512 samequantum 7 NaN -> 0 -dqsamq1513 samequantum 7 -7E+3 -> 0 -dqsamq1514 samequantum 7 -7 -> 1 -dqsamq1515 samequantum 7 -7E-3 -> 0 -dqsamq1516 samequantum 7 -0E-3 -> 0 -dqsamq1517 samequantum 7 -0 -> 1 -dqsamq1518 samequantum 7 -0E+3 -> 0 -dqsamq1519 samequantum 7 0E-3 -> 0 -dqsamq1520 samequantum 7 0 -> 1 -dqsamq1521 samequantum 7 0E+3 -> 0 -dqsamq1522 samequantum 7 7E-3 -> 0 -dqsamq1523 samequantum 7 7 -> 1 -dqsamq1524 samequantum 7 7E+3 -> 0 -dqsamq1525 samequantum 7 sNaN -> 0 - -dqsamq1610 samequantum 7E+3 -Inf -> 0 -dqsamq1611 samequantum 7E+3 Inf -> 0 -dqsamq1612 samequantum 7E+3 NaN -> 0 -dqsamq1613 samequantum 7E+3 -7E+3 -> 1 -dqsamq1614 samequantum 7E+3 -7 -> 0 -dqsamq1615 samequantum 7E+3 -7E-3 -> 0 -dqsamq1616 samequantum 7E+3 -0E-3 -> 0 -dqsamq1617 samequantum 7E+3 -0 -> 0 -dqsamq1618 samequantum 7E+3 -0E+3 -> 1 -dqsamq1619 samequantum 7E+3 0E-3 -> 0 -dqsamq1620 samequantum 7E+3 0 -> 0 -dqsamq1621 samequantum 7E+3 0E+3 -> 1 -dqsamq1622 samequantum 7E+3 7E-3 -> 0 -dqsamq1623 samequantum 7E+3 7 -> 0 -dqsamq1624 samequantum 7E+3 7E+3 -> 1 -dqsamq1625 samequantum 7E+3 sNaN -> 0 - -dqsamq1710 samequantum sNaN -Inf -> 0 -dqsamq1711 samequantum sNaN Inf -> 0 -dqsamq1712 samequantum sNaN NaN -> 1 -dqsamq1713 samequantum sNaN -7E+3 -> 0 -dqsamq1714 samequantum sNaN -7 -> 0 -dqsamq1715 samequantum sNaN -7E-3 -> 0 -dqsamq1716 samequantum sNaN -0E-3 -> 0 -dqsamq1717 samequantum sNaN -0 -> 0 -dqsamq1718 samequantum sNaN -0E+3 -> 0 -dqsamq1719 samequantum sNaN 0E-3 -> 0 -dqsamq1720 samequantum sNaN 0 -> 0 -dqsamq1721 samequantum sNaN 0E+3 -> 0 -dqsamq1722 samequantum sNaN 7E-3 -> 0 -dqsamq1723 samequantum sNaN 7 -> 0 -dqsamq1724 samequantum sNaN 7E+3 -> 0 -dqsamq1725 samequantum sNaN sNaN -> 1 --- noisy NaNs -dqsamq1730 samequantum sNaN3 sNaN3 -> 1 -dqsamq1731 samequantum sNaN3 sNaN4 -> 1 -dqsamq1732 samequantum NaN3 NaN3 -> 1 -dqsamq1733 samequantum NaN3 NaN4 -> 1 -dqsamq1734 samequantum sNaN3 3 -> 0 -dqsamq1735 samequantum NaN3 3 -> 0 -dqsamq1736 samequantum 4 sNaN4 -> 0 -dqsamq1737 samequantum 3 NaN3 -> 0 -dqsamq1738 samequantum Inf sNaN4 -> 0 -dqsamq1739 samequantum -Inf NaN3 -> 0 - +------------------------------------------------------------------------ +-- dqSameQuantum.decTest -- check decQuad quantums match -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- All operands and results are decQuads. +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqsamq001 samequantum 0 0 -> 1 +dqsamq002 samequantum 0 1 -> 1 +dqsamq003 samequantum 1 0 -> 1 +dqsamq004 samequantum 1 1 -> 1 + +dqsamq011 samequantum 10 1E+1 -> 0 +dqsamq012 samequantum 10E+1 10E+1 -> 1 +dqsamq013 samequantum 100 10E+1 -> 0 +dqsamq014 samequantum 100 1E+2 -> 0 +dqsamq015 samequantum 0.1 1E-2 -> 0 +dqsamq016 samequantum 0.1 1E-1 -> 1 +dqsamq017 samequantum 0.1 1E-0 -> 0 +dqsamq018 samequantum 999 999 -> 1 +dqsamq019 samequantum 999E-1 99.9 -> 1 +dqsamq020 samequantum 111E-1 22.2 -> 1 +dqsamq021 samequantum 111E-1 1234.2 -> 1 + +-- zeros +dqsamq030 samequantum 0.0 1.1 -> 1 +dqsamq031 samequantum 0.0 1.11 -> 0 +dqsamq032 samequantum 0.0 0 -> 0 +dqsamq033 samequantum 0.0 0.0 -> 1 +dqsamq034 samequantum 0.0 0.00 -> 0 +dqsamq035 samequantum 0E+1 0E+0 -> 0 +dqsamq036 samequantum 0E+1 0E+1 -> 1 +dqsamq037 samequantum 0E+1 0E+2 -> 0 +dqsamq038 samequantum 0E-17 0E-16 -> 0 +dqsamq039 samequantum 0E-17 0E-17 -> 1 +dqsamq040 samequantum 0E-17 0E-18 -> 0 +dqsamq041 samequantum 0E-17 0.0E-15 -> 0 +dqsamq042 samequantum 0E-17 0.0E-16 -> 1 +dqsamq043 samequantum 0E-17 0.0E-17 -> 0 +dqsamq044 samequantum -0E-17 0.0E-16 -> 1 +dqsamq045 samequantum 0E-17 -0.0E-17 -> 0 +dqsamq046 samequantum 0E-17 -0.0E-16 -> 1 +dqsamq047 samequantum -0E-17 0.0E-17 -> 0 +dqsamq048 samequantum -0E-17 -0.0E-16 -> 1 +dqsamq049 samequantum -0E-17 -0.0E-17 -> 0 + +-- Nmax, Nmin, Ntiny +dqsamq051 samequantum 9.99999999999999999999999999999999E+6144 9.99999999999999999999999999999999E+6144 -> 1 +dqsamq052 samequantum 1E-6143 1E-6143 -> 1 +dqsamq053 samequantum 1.00000000000000000000000000000000E-6143 1.00000000000000000000000000000000E-6143 -> 1 +dqsamq054 samequantum 1E-6176 1E-6176 -> 1 +dqsamq055 samequantum 9.99999999999999999999999999999999E+6144 9.99999999999999999999999999999999E+6144 -> 1 +dqsamq056 samequantum 1E-6143 1E-6143 -> 1 +dqsamq057 samequantum 1.00000000000000000000000000000000E-6143 1.00000000000000000000000000000000E-6143 -> 1 +dqsamq058 samequantum 1E-6176 1E-6176 -> 1 + +dqsamq061 samequantum -1E-6176 -1E-6176 -> 1 +dqsamq062 samequantum -1.00000000000000000000000000000000E-6143 -1.00000000000000000000000000000000E-6143 -> 1 +dqsamq063 samequantum -1E-6143 -1E-6143 -> 1 +dqsamq064 samequantum -9.99999999999999999999999999999999E+6144 -9.99999999999999999999999999999999E+6144 -> 1 +dqsamq065 samequantum -1E-6176 -1E-6176 -> 1 +dqsamq066 samequantum -1.00000000000000000000000000000000E-6143 -1.00000000000000000000000000000000E-6143 -> 1 +dqsamq067 samequantum -1E-6143 -1E-6143 -> 1 +dqsamq068 samequantum -9.99999999999999999999999999999999E+6144 -9.99999999999999999999999999999999E+6144 -> 1 + +dqsamq071 samequantum -4E-6176 -1E-6176 -> 1 +dqsamq072 samequantum -4.00000000000000000000000000000000E-6143 -1.00000000000000000000000000004000E-6143 -> 1 +dqsamq073 samequantum -4E-6143 -1E-6143 -> 1 +dqsamq074 samequantum -4.99999999999999999999999999999999E+6144 -9.99949999999999999999999999999999E+6144 -> 1 +dqsamq075 samequantum -4E-6176 -1E-6176 -> 1 +dqsamq076 samequantum -4.00000000000000000000000000000000E-6143 -1.00400000000000000000000000000000E-6143 -> 1 +dqsamq077 samequantum -4E-6143 -1E-6143 -> 1 +dqsamq078 samequantum -4.99999999999999999999999999999999E+6144 -9.94999999999999999999999999999999E+6144 -> 1 + +dqsamq081 samequantum -4E-1006 -1E-6176 -> 0 +dqsamq082 samequantum -4.00000000000000000000000000000000E-6143 -1.00004000000000000000000000000000E-6136 -> 0 +dqsamq083 samequantum -4E-6140 -1E-6143 -> 0 +dqsamq084 samequantum -4.99999999999999999999999999999999E+6144 -9.99949999999999999999999999999999E+6136 -> 0 +dqsamq085 samequantum -4E-1006 -1E-6176 -> 0 +dqsamq086 samequantum -4.00000000000000000000000000000000E-6143 -1.00400000000000000000000000000000E-6136 -> 0 +dqsamq087 samequantum -4E-6133 -1E-6143 -> 0 +dqsamq088 samequantum -4.99999999999999999999999999999999E+6144 -9.94999999999999999999999999999999E+6136 -> 0 + +-- specials & combinations +dqsamq0110 samequantum -Inf -Inf -> 1 +dqsamq0111 samequantum -Inf Inf -> 1 +dqsamq0112 samequantum -Inf NaN -> 0 +dqsamq0113 samequantum -Inf -7E+3 -> 0 +dqsamq0114 samequantum -Inf -7 -> 0 +dqsamq0115 samequantum -Inf -7E-3 -> 0 +dqsamq0116 samequantum -Inf -0E-3 -> 0 +dqsamq0117 samequantum -Inf -0 -> 0 +dqsamq0118 samequantum -Inf -0E+3 -> 0 +dqsamq0119 samequantum -Inf 0E-3 -> 0 +dqsamq0120 samequantum -Inf 0 -> 0 +dqsamq0121 samequantum -Inf 0E+3 -> 0 +dqsamq0122 samequantum -Inf 7E-3 -> 0 +dqsamq0123 samequantum -Inf 7 -> 0 +dqsamq0124 samequantum -Inf 7E+3 -> 0 +dqsamq0125 samequantum -Inf sNaN -> 0 + +dqsamq0210 samequantum Inf -Inf -> 1 +dqsamq0211 samequantum Inf Inf -> 1 +dqsamq0212 samequantum Inf NaN -> 0 +dqsamq0213 samequantum Inf -7E+3 -> 0 +dqsamq0214 samequantum Inf -7 -> 0 +dqsamq0215 samequantum Inf -7E-3 -> 0 +dqsamq0216 samequantum Inf -0E-3 -> 0 +dqsamq0217 samequantum Inf -0 -> 0 +dqsamq0218 samequantum Inf -0E+3 -> 0 +dqsamq0219 samequantum Inf 0E-3 -> 0 +dqsamq0220 samequantum Inf 0 -> 0 +dqsamq0221 samequantum Inf 0E+3 -> 0 +dqsamq0222 samequantum Inf 7E-3 -> 0 +dqsamq0223 samequantum Inf 7 -> 0 +dqsamq0224 samequantum Inf 7E+3 -> 0 +dqsamq0225 samequantum Inf sNaN -> 0 + +dqsamq0310 samequantum NaN -Inf -> 0 +dqsamq0311 samequantum NaN Inf -> 0 +dqsamq0312 samequantum NaN NaN -> 1 +dqsamq0313 samequantum NaN -7E+3 -> 0 +dqsamq0314 samequantum NaN -7 -> 0 +dqsamq0315 samequantum NaN -7E-3 -> 0 +dqsamq0316 samequantum NaN -0E-3 -> 0 +dqsamq0317 samequantum NaN -0 -> 0 +dqsamq0318 samequantum NaN -0E+3 -> 0 +dqsamq0319 samequantum NaN 0E-3 -> 0 +dqsamq0320 samequantum NaN 0 -> 0 +dqsamq0321 samequantum NaN 0E+3 -> 0 +dqsamq0322 samequantum NaN 7E-3 -> 0 +dqsamq0323 samequantum NaN 7 -> 0 +dqsamq0324 samequantum NaN 7E+3 -> 0 +dqsamq0325 samequantum NaN sNaN -> 1 + +dqsamq0410 samequantum -7E+3 -Inf -> 0 +dqsamq0411 samequantum -7E+3 Inf -> 0 +dqsamq0412 samequantum -7E+3 NaN -> 0 +dqsamq0413 samequantum -7E+3 -7E+3 -> 1 +dqsamq0414 samequantum -7E+3 -7 -> 0 +dqsamq0415 samequantum -7E+3 -7E-3 -> 0 +dqsamq0416 samequantum -7E+3 -0E-3 -> 0 +dqsamq0417 samequantum -7E+3 -0 -> 0 +dqsamq0418 samequantum -7E+3 -0E+3 -> 1 +dqsamq0419 samequantum -7E+3 0E-3 -> 0 +dqsamq0420 samequantum -7E+3 0 -> 0 +dqsamq0421 samequantum -7E+3 0E+3 -> 1 +dqsamq0422 samequantum -7E+3 7E-3 -> 0 +dqsamq0423 samequantum -7E+3 7 -> 0 +dqsamq0424 samequantum -7E+3 7E+3 -> 1 +dqsamq0425 samequantum -7E+3 sNaN -> 0 + +dqsamq0510 samequantum -7 -Inf -> 0 +dqsamq0511 samequantum -7 Inf -> 0 +dqsamq0512 samequantum -7 NaN -> 0 +dqsamq0513 samequantum -7 -7E+3 -> 0 +dqsamq0514 samequantum -7 -7 -> 1 +dqsamq0515 samequantum -7 -7E-3 -> 0 +dqsamq0516 samequantum -7 -0E-3 -> 0 +dqsamq0517 samequantum -7 -0 -> 1 +dqsamq0518 samequantum -7 -0E+3 -> 0 +dqsamq0519 samequantum -7 0E-3 -> 0 +dqsamq0520 samequantum -7 0 -> 1 +dqsamq0521 samequantum -7 0E+3 -> 0 +dqsamq0522 samequantum -7 7E-3 -> 0 +dqsamq0523 samequantum -7 7 -> 1 +dqsamq0524 samequantum -7 7E+3 -> 0 +dqsamq0525 samequantum -7 sNaN -> 0 + +dqsamq0610 samequantum -7E-3 -Inf -> 0 +dqsamq0611 samequantum -7E-3 Inf -> 0 +dqsamq0612 samequantum -7E-3 NaN -> 0 +dqsamq0613 samequantum -7E-3 -7E+3 -> 0 +dqsamq0614 samequantum -7E-3 -7 -> 0 +dqsamq0615 samequantum -7E-3 -7E-3 -> 1 +dqsamq0616 samequantum -7E-3 -0E-3 -> 1 +dqsamq0617 samequantum -7E-3 -0 -> 0 +dqsamq0618 samequantum -7E-3 -0E+3 -> 0 +dqsamq0619 samequantum -7E-3 0E-3 -> 1 +dqsamq0620 samequantum -7E-3 0 -> 0 +dqsamq0621 samequantum -7E-3 0E+3 -> 0 +dqsamq0622 samequantum -7E-3 7E-3 -> 1 +dqsamq0623 samequantum -7E-3 7 -> 0 +dqsamq0624 samequantum -7E-3 7E+3 -> 0 +dqsamq0625 samequantum -7E-3 sNaN -> 0 + +dqsamq0710 samequantum -0E-3 -Inf -> 0 +dqsamq0711 samequantum -0E-3 Inf -> 0 +dqsamq0712 samequantum -0E-3 NaN -> 0 +dqsamq0713 samequantum -0E-3 -7E+3 -> 0 +dqsamq0714 samequantum -0E-3 -7 -> 0 +dqsamq0715 samequantum -0E-3 -7E-3 -> 1 +dqsamq0716 samequantum -0E-3 -0E-3 -> 1 +dqsamq0717 samequantum -0E-3 -0 -> 0 +dqsamq0718 samequantum -0E-3 -0E+3 -> 0 +dqsamq0719 samequantum -0E-3 0E-3 -> 1 +dqsamq0720 samequantum -0E-3 0 -> 0 +dqsamq0721 samequantum -0E-3 0E+3 -> 0 +dqsamq0722 samequantum -0E-3 7E-3 -> 1 +dqsamq0723 samequantum -0E-3 7 -> 0 +dqsamq0724 samequantum -0E-3 7E+3 -> 0 +dqsamq0725 samequantum -0E-3 sNaN -> 0 + +dqsamq0810 samequantum -0 -Inf -> 0 +dqsamq0811 samequantum -0 Inf -> 0 +dqsamq0812 samequantum -0 NaN -> 0 +dqsamq0813 samequantum -0 -7E+3 -> 0 +dqsamq0814 samequantum -0 -7 -> 1 +dqsamq0815 samequantum -0 -7E-3 -> 0 +dqsamq0816 samequantum -0 -0E-3 -> 0 +dqsamq0817 samequantum -0 -0 -> 1 +dqsamq0818 samequantum -0 -0E+3 -> 0 +dqsamq0819 samequantum -0 0E-3 -> 0 +dqsamq0820 samequantum -0 0 -> 1 +dqsamq0821 samequantum -0 0E+3 -> 0 +dqsamq0822 samequantum -0 7E-3 -> 0 +dqsamq0823 samequantum -0 7 -> 1 +dqsamq0824 samequantum -0 7E+3 -> 0 +dqsamq0825 samequantum -0 sNaN -> 0 + +dqsamq0910 samequantum -0E+3 -Inf -> 0 +dqsamq0911 samequantum -0E+3 Inf -> 0 +dqsamq0912 samequantum -0E+3 NaN -> 0 +dqsamq0913 samequantum -0E+3 -7E+3 -> 1 +dqsamq0914 samequantum -0E+3 -7 -> 0 +dqsamq0915 samequantum -0E+3 -7E-3 -> 0 +dqsamq0916 samequantum -0E+3 -0E-3 -> 0 +dqsamq0917 samequantum -0E+3 -0 -> 0 +dqsamq0918 samequantum -0E+3 -0E+3 -> 1 +dqsamq0919 samequantum -0E+3 0E-3 -> 0 +dqsamq0920 samequantum -0E+3 0 -> 0 +dqsamq0921 samequantum -0E+3 0E+3 -> 1 +dqsamq0922 samequantum -0E+3 7E-3 -> 0 +dqsamq0923 samequantum -0E+3 7 -> 0 +dqsamq0924 samequantum -0E+3 7E+3 -> 1 +dqsamq0925 samequantum -0E+3 sNaN -> 0 + +dqsamq1110 samequantum 0E-3 -Inf -> 0 +dqsamq1111 samequantum 0E-3 Inf -> 0 +dqsamq1112 samequantum 0E-3 NaN -> 0 +dqsamq1113 samequantum 0E-3 -7E+3 -> 0 +dqsamq1114 samequantum 0E-3 -7 -> 0 +dqsamq1115 samequantum 0E-3 -7E-3 -> 1 +dqsamq1116 samequantum 0E-3 -0E-3 -> 1 +dqsamq1117 samequantum 0E-3 -0 -> 0 +dqsamq1118 samequantum 0E-3 -0E+3 -> 0 +dqsamq1119 samequantum 0E-3 0E-3 -> 1 +dqsamq1120 samequantum 0E-3 0 -> 0 +dqsamq1121 samequantum 0E-3 0E+3 -> 0 +dqsamq1122 samequantum 0E-3 7E-3 -> 1 +dqsamq1123 samequantum 0E-3 7 -> 0 +dqsamq1124 samequantum 0E-3 7E+3 -> 0 +dqsamq1125 samequantum 0E-3 sNaN -> 0 + +dqsamq1210 samequantum 0 -Inf -> 0 +dqsamq1211 samequantum 0 Inf -> 0 +dqsamq1212 samequantum 0 NaN -> 0 +dqsamq1213 samequantum 0 -7E+3 -> 0 +dqsamq1214 samequantum 0 -7 -> 1 +dqsamq1215 samequantum 0 -7E-3 -> 0 +dqsamq1216 samequantum 0 -0E-3 -> 0 +dqsamq1217 samequantum 0 -0 -> 1 +dqsamq1218 samequantum 0 -0E+3 -> 0 +dqsamq1219 samequantum 0 0E-3 -> 0 +dqsamq1220 samequantum 0 0 -> 1 +dqsamq1221 samequantum 0 0E+3 -> 0 +dqsamq1222 samequantum 0 7E-3 -> 0 +dqsamq1223 samequantum 0 7 -> 1 +dqsamq1224 samequantum 0 7E+3 -> 0 +dqsamq1225 samequantum 0 sNaN -> 0 + +dqsamq1310 samequantum 0E+3 -Inf -> 0 +dqsamq1311 samequantum 0E+3 Inf -> 0 +dqsamq1312 samequantum 0E+3 NaN -> 0 +dqsamq1313 samequantum 0E+3 -7E+3 -> 1 +dqsamq1314 samequantum 0E+3 -7 -> 0 +dqsamq1315 samequantum 0E+3 -7E-3 -> 0 +dqsamq1316 samequantum 0E+3 -0E-3 -> 0 +dqsamq1317 samequantum 0E+3 -0 -> 0 +dqsamq1318 samequantum 0E+3 -0E+3 -> 1 +dqsamq1319 samequantum 0E+3 0E-3 -> 0 +dqsamq1320 samequantum 0E+3 0 -> 0 +dqsamq1321 samequantum 0E+3 0E+3 -> 1 +dqsamq1322 samequantum 0E+3 7E-3 -> 0 +dqsamq1323 samequantum 0E+3 7 -> 0 +dqsamq1324 samequantum 0E+3 7E+3 -> 1 +dqsamq1325 samequantum 0E+3 sNaN -> 0 + +dqsamq1410 samequantum 7E-3 -Inf -> 0 +dqsamq1411 samequantum 7E-3 Inf -> 0 +dqsamq1412 samequantum 7E-3 NaN -> 0 +dqsamq1413 samequantum 7E-3 -7E+3 -> 0 +dqsamq1414 samequantum 7E-3 -7 -> 0 +dqsamq1415 samequantum 7E-3 -7E-3 -> 1 +dqsamq1416 samequantum 7E-3 -0E-3 -> 1 +dqsamq1417 samequantum 7E-3 -0 -> 0 +dqsamq1418 samequantum 7E-3 -0E+3 -> 0 +dqsamq1419 samequantum 7E-3 0E-3 -> 1 +dqsamq1420 samequantum 7E-3 0 -> 0 +dqsamq1421 samequantum 7E-3 0E+3 -> 0 +dqsamq1422 samequantum 7E-3 7E-3 -> 1 +dqsamq1423 samequantum 7E-3 7 -> 0 +dqsamq1424 samequantum 7E-3 7E+3 -> 0 +dqsamq1425 samequantum 7E-3 sNaN -> 0 + +dqsamq1510 samequantum 7 -Inf -> 0 +dqsamq1511 samequantum 7 Inf -> 0 +dqsamq1512 samequantum 7 NaN -> 0 +dqsamq1513 samequantum 7 -7E+3 -> 0 +dqsamq1514 samequantum 7 -7 -> 1 +dqsamq1515 samequantum 7 -7E-3 -> 0 +dqsamq1516 samequantum 7 -0E-3 -> 0 +dqsamq1517 samequantum 7 -0 -> 1 +dqsamq1518 samequantum 7 -0E+3 -> 0 +dqsamq1519 samequantum 7 0E-3 -> 0 +dqsamq1520 samequantum 7 0 -> 1 +dqsamq1521 samequantum 7 0E+3 -> 0 +dqsamq1522 samequantum 7 7E-3 -> 0 +dqsamq1523 samequantum 7 7 -> 1 +dqsamq1524 samequantum 7 7E+3 -> 0 +dqsamq1525 samequantum 7 sNaN -> 0 + +dqsamq1610 samequantum 7E+3 -Inf -> 0 +dqsamq1611 samequantum 7E+3 Inf -> 0 +dqsamq1612 samequantum 7E+3 NaN -> 0 +dqsamq1613 samequantum 7E+3 -7E+3 -> 1 +dqsamq1614 samequantum 7E+3 -7 -> 0 +dqsamq1615 samequantum 7E+3 -7E-3 -> 0 +dqsamq1616 samequantum 7E+3 -0E-3 -> 0 +dqsamq1617 samequantum 7E+3 -0 -> 0 +dqsamq1618 samequantum 7E+3 -0E+3 -> 1 +dqsamq1619 samequantum 7E+3 0E-3 -> 0 +dqsamq1620 samequantum 7E+3 0 -> 0 +dqsamq1621 samequantum 7E+3 0E+3 -> 1 +dqsamq1622 samequantum 7E+3 7E-3 -> 0 +dqsamq1623 samequantum 7E+3 7 -> 0 +dqsamq1624 samequantum 7E+3 7E+3 -> 1 +dqsamq1625 samequantum 7E+3 sNaN -> 0 + +dqsamq1710 samequantum sNaN -Inf -> 0 +dqsamq1711 samequantum sNaN Inf -> 0 +dqsamq1712 samequantum sNaN NaN -> 1 +dqsamq1713 samequantum sNaN -7E+3 -> 0 +dqsamq1714 samequantum sNaN -7 -> 0 +dqsamq1715 samequantum sNaN -7E-3 -> 0 +dqsamq1716 samequantum sNaN -0E-3 -> 0 +dqsamq1717 samequantum sNaN -0 -> 0 +dqsamq1718 samequantum sNaN -0E+3 -> 0 +dqsamq1719 samequantum sNaN 0E-3 -> 0 +dqsamq1720 samequantum sNaN 0 -> 0 +dqsamq1721 samequantum sNaN 0E+3 -> 0 +dqsamq1722 samequantum sNaN 7E-3 -> 0 +dqsamq1723 samequantum sNaN 7 -> 0 +dqsamq1724 samequantum sNaN 7E+3 -> 0 +dqsamq1725 samequantum sNaN sNaN -> 1 +-- noisy NaNs +dqsamq1730 samequantum sNaN3 sNaN3 -> 1 +dqsamq1731 samequantum sNaN3 sNaN4 -> 1 +dqsamq1732 samequantum NaN3 NaN3 -> 1 +dqsamq1733 samequantum NaN3 NaN4 -> 1 +dqsamq1734 samequantum sNaN3 3 -> 0 +dqsamq1735 samequantum NaN3 3 -> 0 +dqsamq1736 samequantum 4 sNaN4 -> 0 +dqsamq1737 samequantum 3 NaN3 -> 0 +dqsamq1738 samequantum Inf sNaN4 -> 0 +dqsamq1739 samequantum -Inf NaN3 -> 0 + diff --git a/Lib/test/decimaltestdata/dqScaleB.decTest b/Lib/test/decimaltestdata/dqScaleB.decTest index 045dc58d82b..01e1191963c 100644 --- a/Lib/test/decimaltestdata/dqScaleB.decTest +++ b/Lib/test/decimaltestdata/dqScaleB.decTest @@ -1,260 +1,260 @@ ------------------------------------------------------------------------- --- dqScalebB.decTest -- scale a decQuad by powers of 10 -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Max |rhs| is 2*(6144+34) = 12356 - --- Sanity checks -dqscb001 scaleb 7.50 10 -> 7.50E+10 -dqscb002 scaleb 7.50 3 -> 7.50E+3 -dqscb003 scaleb 7.50 2 -> 750 -dqscb004 scaleb 7.50 1 -> 75.0 -dqscb005 scaleb 7.50 0 -> 7.50 -dqscb006 scaleb 7.50 -1 -> 0.750 -dqscb007 scaleb 7.50 -2 -> 0.0750 -dqscb008 scaleb 7.50 -10 -> 7.50E-10 -dqscb009 scaleb -7.50 3 -> -7.50E+3 -dqscb010 scaleb -7.50 2 -> -750 -dqscb011 scaleb -7.50 1 -> -75.0 -dqscb012 scaleb -7.50 0 -> -7.50 -dqscb013 scaleb -7.50 -1 -> -0.750 - --- Infinities -dqscb014 scaleb Infinity 1 -> Infinity -dqscb015 scaleb -Infinity 2 -> -Infinity -dqscb016 scaleb Infinity -1 -> Infinity -dqscb017 scaleb -Infinity -2 -> -Infinity - --- Next two are somewhat undefined in 754r; treat as non-integer -dqscb018 scaleb 10 Infinity -> NaN Invalid_operation -dqscb019 scaleb 10 -Infinity -> NaN Invalid_operation - --- NaNs are undefined in 754r; assume usual processing --- NaNs, 0 payload -dqscb021 scaleb NaN 1 -> NaN -dqscb022 scaleb -NaN -1 -> -NaN -dqscb023 scaleb sNaN 1 -> NaN Invalid_operation -dqscb024 scaleb -sNaN 1 -> -NaN Invalid_operation -dqscb025 scaleb 4 NaN -> NaN -dqscb026 scaleb -Inf -NaN -> -NaN -dqscb027 scaleb 4 sNaN -> NaN Invalid_operation -dqscb028 scaleb Inf -sNaN -> -NaN Invalid_operation - --- non-integer RHS -dqscb030 scaleb 1.23 1 -> 12.3 -dqscb031 scaleb 1.23 1.00 -> NaN Invalid_operation -dqscb032 scaleb 1.23 1.1 -> NaN Invalid_operation -dqscb033 scaleb 1.23 1.01 -> NaN Invalid_operation -dqscb034 scaleb 1.23 0.01 -> NaN Invalid_operation -dqscb035 scaleb 1.23 0.11 -> NaN Invalid_operation -dqscb036 scaleb 1.23 0.999999999 -> NaN Invalid_operation -dqscb037 scaleb 1.23 -1 -> 0.123 -dqscb0614 scaleb 1.23 -1.00 -> NaN Invalid_operation -dqscb039 scaleb 1.23 -1.1 -> NaN Invalid_operation -dqscb040 scaleb 1.23 -1.01 -> NaN Invalid_operation -dqscb041 scaleb 1.23 -0.01 -> NaN Invalid_operation -dqscb042 scaleb 1.23 -0.11 -> NaN Invalid_operation -dqscb043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation -dqscb044 scaleb 1.23 0.1 -> NaN Invalid_operation -dqscb045 scaleb 1.23 1E+1 -> NaN Invalid_operation -dqscb046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation -dqscb047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation - --- out-of range RHS -dqscb120 scaleb 1.23 12355 -> Infinity Overflow Inexact Rounded -dqscb121 scaleb 1.23 12356 -> Infinity Overflow Inexact Rounded -dqscb122 scaleb 1.23 12357 -> NaN Invalid_operation -dqscb123 scaleb 1.23 12358 -> NaN Invalid_operation -dqscb124 scaleb 1.23 -12355 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqscb125 scaleb 1.23 -12356 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqscb126 scaleb 1.23 -12357 -> NaN Invalid_operation -dqscb127 scaleb 1.23 -12358 -> NaN Invalid_operation - --- NaNs, non-0 payload --- propagating NaNs -dqscb861 scaleb NaN01 -Inf -> NaN1 -dqscb862 scaleb -NaN02 -1000 -> -NaN2 -dqscb863 scaleb NaN03 1000 -> NaN3 -dqscb864 scaleb NaN04 Inf -> NaN4 -dqscb865 scaleb NaN05 NaN61 -> NaN5 -dqscb866 scaleb -Inf -NaN71 -> -NaN71 -dqscb867 scaleb -1000 NaN81 -> NaN81 -dqscb868 scaleb 1000 NaN91 -> NaN91 -dqscb869 scaleb Inf NaN101 -> NaN101 -dqscb871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation -dqscb872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation -dqscb873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation -dqscb874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation -dqscb875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation -dqscb876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation -dqscb877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation -dqscb878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation -dqscb879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation -dqscb880 scaleb Inf sNaN231 -> NaN231 Invalid_operation -dqscb881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation - --- finites -dqscb051 scaleb 7 -2 -> 0.07 -dqscb052 scaleb -7 -2 -> -0.07 -dqscb053 scaleb 75 -2 -> 0.75 -dqscb054 scaleb -75 -2 -> -0.75 -dqscb055 scaleb 7.50 -2 -> 0.0750 -dqscb056 scaleb -7.50 -2 -> -0.0750 -dqscb057 scaleb 7.500 -2 -> 0.07500 -dqscb058 scaleb -7.500 -2 -> -0.07500 -dqscb061 scaleb 7 -1 -> 0.7 -dqscb062 scaleb -7 -1 -> -0.7 -dqscb063 scaleb 75 -1 -> 7.5 -dqscb064 scaleb -75 -1 -> -7.5 -dqscb065 scaleb 7.50 -1 -> 0.750 -dqscb066 scaleb -7.50 -1 -> -0.750 -dqscb067 scaleb 7.500 -1 -> 0.7500 -dqscb068 scaleb -7.500 -1 -> -0.7500 -dqscb071 scaleb 7 0 -> 7 -dqscb072 scaleb -7 0 -> -7 -dqscb073 scaleb 75 0 -> 75 -dqscb074 scaleb -75 0 -> -75 -dqscb075 scaleb 7.50 0 -> 7.50 -dqscb076 scaleb -7.50 0 -> -7.50 -dqscb077 scaleb 7.500 0 -> 7.500 -dqscb078 scaleb -7.500 0 -> -7.500 -dqscb081 scaleb 7 1 -> 7E+1 -dqscb082 scaleb -7 1 -> -7E+1 -dqscb083 scaleb 75 1 -> 7.5E+2 -dqscb084 scaleb -75 1 -> -7.5E+2 -dqscb085 scaleb 7.50 1 -> 75.0 -dqscb086 scaleb -7.50 1 -> -75.0 -dqscb087 scaleb 7.500 1 -> 75.00 -dqscb088 scaleb -7.500 1 -> -75.00 -dqscb091 scaleb 7 2 -> 7E+2 -dqscb092 scaleb -7 2 -> -7E+2 -dqscb093 scaleb 75 2 -> 7.5E+3 -dqscb094 scaleb -75 2 -> -7.5E+3 -dqscb095 scaleb 7.50 2 -> 750 -dqscb096 scaleb -7.50 2 -> -750 -dqscb097 scaleb 7.500 2 -> 750.0 -dqscb098 scaleb -7.500 2 -> -750.0 - --- zeros -dqscb111 scaleb 0 1 -> 0E+1 -dqscb112 scaleb -0 2 -> -0E+2 -dqscb113 scaleb 0E+4 3 -> 0E+7 -dqscb114 scaleb -0E+4 4 -> -0E+8 -dqscb115 scaleb 0.0000 5 -> 0E+1 -dqscb116 scaleb -0.0000 6 -> -0E+2 -dqscb117 scaleb 0E-141 7 -> 0E-134 -dqscb118 scaleb -0E-141 8 -> -0E-133 - --- Nmax, Nmin, Ntiny -dqscb132 scaleb 9.999999999999999999999999999999999E+6144 +6144 -> Infinity Overflow Inexact Rounded -dqscb133 scaleb 9.999999999999999999999999999999999E+6144 +10 -> Infinity Overflow Inexact Rounded -dqscb134 scaleb 9.999999999999999999999999999999999E+6144 +1 -> Infinity Overflow Inexact Rounded -dqscb135 scaleb 9.999999999999999999999999999999999E+6144 0 -> 9.999999999999999999999999999999999E+6144 -dqscb136 scaleb 9.999999999999999999999999999999999E+6144 -1 -> 9.999999999999999999999999999999999E+6143 -dqscb137 scaleb 1E-6143 +1 -> 1E-6142 -dqscb1614 scaleb 1E-6143 -0 -> 1E-6143 -dqscb139 scaleb 1E-6143 -1 -> 1E-6144 Subnormal -dqscb140 scaleb 1.000000000000000000000000000000000E-6143 +1 -> 1.000000000000000000000000000000000E-6142 -dqscb141 scaleb 1.000000000000000000000000000000000E-6143 0 -> 1.000000000000000000000000000000000E-6143 -dqscb142 scaleb 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 Subnormal Rounded -dqscb143 scaleb 1E-6176 +1 -> 1E-6175 Subnormal -dqscb144 scaleb 1E-6176 -0 -> 1E-6176 Subnormal -dqscb145 scaleb 1E-6176 -1 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped - -dqscb150 scaleb -1E-6176 +1 -> -1E-6175 Subnormal -dqscb151 scaleb -1E-6176 -0 -> -1E-6176 Subnormal -dqscb152 scaleb -1E-6176 -1 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqscb153 scaleb -1.000000000000000000000000000000000E-6143 +1 -> -1.000000000000000000000000000000000E-6142 -dqscb154 scaleb -1.000000000000000000000000000000000E-6143 +0 -> -1.000000000000000000000000000000000E-6143 -dqscb155 scaleb -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 Subnormal Rounded -dqscb156 scaleb -1E-6143 +1 -> -1E-6142 -dqscb157 scaleb -1E-6143 -0 -> -1E-6143 -dqscb158 scaleb -1E-6143 -1 -> -1E-6144 Subnormal -dqscb159 scaleb -9.999999999999999999999999999999999E+6144 +1 -> -Infinity Overflow Inexact Rounded -dqscb160 scaleb -9.999999999999999999999999999999999E+6144 +0 -> -9.999999999999999999999999999999999E+6144 -dqscb161 scaleb -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6143 -dqscb162 scaleb -9E+6144 +1 -> -Infinity Overflow Inexact Rounded -dqscb163 scaleb -1E+6144 +1 -> -Infinity Overflow Inexact Rounded - --- some Origami --- (these check that overflow is being done correctly) -dqscb171 scaleb 1000E+6109 +1 -> 1.000E+6113 -dqscb172 scaleb 1000E+6110 +1 -> 1.000E+6114 -dqscb173 scaleb 1000E+6111 +1 -> 1.0000E+6115 Clamped -dqscb174 scaleb 1000E+6112 +1 -> 1.00000E+6116 Clamped -dqscb175 scaleb 1000E+6113 +1 -> 1.000000E+6117 Clamped -dqscb176 scaleb 1000E+6114 +1 -> 1.0000000E+6118 Clamped -dqscb177 scaleb 1000E+6131 +1 -> 1.000000000000000000000000E+6135 Clamped -dqscb178 scaleb 1000E+6132 +1 -> 1.0000000000000000000000000E+6136 Clamped -dqscb179 scaleb 1000E+6133 +1 -> 1.00000000000000000000000000E+6137 Clamped -dqscb180 scaleb 1000E+6134 +1 -> 1.000000000000000000000000000E+6138 Clamped -dqscb181 scaleb 1000E+6135 +1 -> 1.0000000000000000000000000000E+6139 Clamped -dqscb182 scaleb 1000E+6136 +1 -> 1.00000000000000000000000000000E+6140 Clamped -dqscb183 scaleb 1000E+6137 +1 -> 1.000000000000000000000000000000E+6141 Clamped -dqscb184 scaleb 1000E+6138 +1 -> 1.0000000000000000000000000000000E+6142 Clamped -dqscb185 scaleb 1000E+6139 +1 -> 1.00000000000000000000000000000000E+6143 Clamped -dqscb186 scaleb 1000E+6140 +1 -> 1.000000000000000000000000000000000E+6144 Clamped -dqscb187 scaleb 1000E+6141 +1 -> Infinity Overflow Inexact Rounded - --- and a few more subnormal truncations --- (these check that underflow is being done correctly) -dqscb221 scaleb 1.000000000000000000000000000000000E-6143 0 -> 1.000000000000000000000000000000000E-6143 -dqscb222 scaleb 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 Subnormal Rounded -dqscb223 scaleb 1.000000000000000000000000000000000E-6143 -2 -> 1.0000000000000000000000000000000E-6145 Subnormal Rounded -dqscb224 scaleb 1.000000000000000000000000000000000E-6143 -3 -> 1.000000000000000000000000000000E-6146 Subnormal Rounded -dqscb225 scaleb 1.000000000000000000000000000000000E-6143 -4 -> 1.00000000000000000000000000000E-6147 Subnormal Rounded -dqscb226 scaleb 1.000000000000000000000000000000000E-6143 -5 -> 1.0000000000000000000000000000E-6148 Subnormal Rounded -dqscb227 scaleb 1.000000000000000000000000000000000E-6143 -6 -> 1.000000000000000000000000000E-6149 Subnormal Rounded -dqscb228 scaleb 1.000000000000000000000000000000000E-6143 -7 -> 1.00000000000000000000000000E-6150 Subnormal Rounded -dqscb229 scaleb 1.000000000000000000000000000000000E-6143 -8 -> 1.0000000000000000000000000E-6151 Subnormal Rounded -dqscb230 scaleb 1.000000000000000000000000000000000E-6143 -9 -> 1.000000000000000000000000E-6152 Subnormal Rounded -dqscb231 scaleb 1.000000000000000000000000000000000E-6143 -10 -> 1.00000000000000000000000E-6153 Subnormal Rounded -dqscb232 scaleb 1.000000000000000000000000000000000E-6143 -11 -> 1.0000000000000000000000E-6154 Subnormal Rounded -dqscb233 scaleb 1.000000000000000000000000000000000E-6143 -12 -> 1.000000000000000000000E-6155 Subnormal Rounded -dqscb234 scaleb 1.000000000000000000000000000000000E-6143 -13 -> 1.00000000000000000000E-6156 Subnormal Rounded -dqscb235 scaleb 1.000000000000000000000000000000000E-6143 -14 -> 1.0000000000000000000E-6157 Subnormal Rounded -dqscb236 scaleb 1.000000000000000000000000000000000E-6143 -15 -> 1.000000000000000000E-6158 Subnormal Rounded -dqscb237 scaleb 1.000000000000000000000000000000000E-6143 -16 -> 1.00000000000000000E-6159 Subnormal Rounded -dqscb238 scaleb 1.000000000000000000000000000000000E-6143 -17 -> 1.0000000000000000E-6160 Subnormal Rounded -dqscb239 scaleb 1.000000000000000000000000000000000E-6143 -18 -> 1.000000000000000E-6161 Subnormal Rounded -dqscb202 scaleb 1.000000000000000000000000000000000E-6143 -19 -> 1.00000000000000E-6162 Subnormal Rounded -dqscb203 scaleb 1.000000000000000000000000000000000E-6143 -20 -> 1.0000000000000E-6163 Subnormal Rounded -dqscb204 scaleb 1.000000000000000000000000000000000E-6143 -21 -> 1.000000000000E-6164 Subnormal Rounded -dqscb205 scaleb 1.000000000000000000000000000000000E-6143 -22 -> 1.00000000000E-6165 Subnormal Rounded -dqscb206 scaleb 1.000000000000000000000000000000000E-6143 -23 -> 1.0000000000E-6166 Subnormal Rounded -dqscb207 scaleb 1.000000000000000000000000000000000E-6143 -24 -> 1.000000000E-6167 Subnormal Rounded -dqscb208 scaleb 1.000000000000000000000000000000000E-6143 -25 -> 1.00000000E-6168 Subnormal Rounded -dqscb209 scaleb 1.000000000000000000000000000000000E-6143 -26 -> 1.0000000E-6169 Subnormal Rounded -dqscb210 scaleb 1.000000000000000000000000000000000E-6143 -27 -> 1.000000E-6170 Subnormal Rounded -dqscb211 scaleb 1.000000000000000000000000000000000E-6143 -28 -> 1.00000E-6171 Subnormal Rounded -dqscb212 scaleb 1.000000000000000000000000000000000E-6143 -29 -> 1.0000E-6172 Subnormal Rounded -dqscb213 scaleb 1.000000000000000000000000000000000E-6143 -30 -> 1.000E-6173 Subnormal Rounded -dqscb214 scaleb 1.000000000000000000000000000000000E-6143 -31 -> 1.00E-6174 Subnormal Rounded -dqscb215 scaleb 1.000000000000000000000000000000000E-6143 -32 -> 1.0E-6175 Subnormal Rounded -dqscb216 scaleb 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 Subnormal Rounded -dqscb217 scaleb 1.000000000000000000000000000000000E-6143 -34 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped -dqscb218 scaleb 1.000000000000000000000000000000000E-6143 -35 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +------------------------------------------------------------------------ +-- dqScalebB.decTest -- scale a decQuad by powers of 10 -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Max |rhs| is 2*(6144+34) = 12356 + +-- Sanity checks +dqscb001 scaleb 7.50 10 -> 7.50E+10 +dqscb002 scaleb 7.50 3 -> 7.50E+3 +dqscb003 scaleb 7.50 2 -> 750 +dqscb004 scaleb 7.50 1 -> 75.0 +dqscb005 scaleb 7.50 0 -> 7.50 +dqscb006 scaleb 7.50 -1 -> 0.750 +dqscb007 scaleb 7.50 -2 -> 0.0750 +dqscb008 scaleb 7.50 -10 -> 7.50E-10 +dqscb009 scaleb -7.50 3 -> -7.50E+3 +dqscb010 scaleb -7.50 2 -> -750 +dqscb011 scaleb -7.50 1 -> -75.0 +dqscb012 scaleb -7.50 0 -> -7.50 +dqscb013 scaleb -7.50 -1 -> -0.750 + +-- Infinities +dqscb014 scaleb Infinity 1 -> Infinity +dqscb015 scaleb -Infinity 2 -> -Infinity +dqscb016 scaleb Infinity -1 -> Infinity +dqscb017 scaleb -Infinity -2 -> -Infinity + +-- Next two are somewhat undefined in 754r; treat as non-integer +dqscb018 scaleb 10 Infinity -> NaN Invalid_operation +dqscb019 scaleb 10 -Infinity -> NaN Invalid_operation + +-- NaNs are undefined in 754r; assume usual processing +-- NaNs, 0 payload +dqscb021 scaleb NaN 1 -> NaN +dqscb022 scaleb -NaN -1 -> -NaN +dqscb023 scaleb sNaN 1 -> NaN Invalid_operation +dqscb024 scaleb -sNaN 1 -> -NaN Invalid_operation +dqscb025 scaleb 4 NaN -> NaN +dqscb026 scaleb -Inf -NaN -> -NaN +dqscb027 scaleb 4 sNaN -> NaN Invalid_operation +dqscb028 scaleb Inf -sNaN -> -NaN Invalid_operation + +-- non-integer RHS +dqscb030 scaleb 1.23 1 -> 12.3 +dqscb031 scaleb 1.23 1.00 -> NaN Invalid_operation +dqscb032 scaleb 1.23 1.1 -> NaN Invalid_operation +dqscb033 scaleb 1.23 1.01 -> NaN Invalid_operation +dqscb034 scaleb 1.23 0.01 -> NaN Invalid_operation +dqscb035 scaleb 1.23 0.11 -> NaN Invalid_operation +dqscb036 scaleb 1.23 0.999999999 -> NaN Invalid_operation +dqscb037 scaleb 1.23 -1 -> 0.123 +dqscb0614 scaleb 1.23 -1.00 -> NaN Invalid_operation +dqscb039 scaleb 1.23 -1.1 -> NaN Invalid_operation +dqscb040 scaleb 1.23 -1.01 -> NaN Invalid_operation +dqscb041 scaleb 1.23 -0.01 -> NaN Invalid_operation +dqscb042 scaleb 1.23 -0.11 -> NaN Invalid_operation +dqscb043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation +dqscb044 scaleb 1.23 0.1 -> NaN Invalid_operation +dqscb045 scaleb 1.23 1E+1 -> NaN Invalid_operation +dqscb046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation +dqscb047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation + +-- out-of range RHS +dqscb120 scaleb 1.23 12355 -> Infinity Overflow Inexact Rounded +dqscb121 scaleb 1.23 12356 -> Infinity Overflow Inexact Rounded +dqscb122 scaleb 1.23 12357 -> NaN Invalid_operation +dqscb123 scaleb 1.23 12358 -> NaN Invalid_operation +dqscb124 scaleb 1.23 -12355 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqscb125 scaleb 1.23 -12356 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqscb126 scaleb 1.23 -12357 -> NaN Invalid_operation +dqscb127 scaleb 1.23 -12358 -> NaN Invalid_operation + +-- NaNs, non-0 payload +-- propagating NaNs +dqscb861 scaleb NaN01 -Inf -> NaN1 +dqscb862 scaleb -NaN02 -1000 -> -NaN2 +dqscb863 scaleb NaN03 1000 -> NaN3 +dqscb864 scaleb NaN04 Inf -> NaN4 +dqscb865 scaleb NaN05 NaN61 -> NaN5 +dqscb866 scaleb -Inf -NaN71 -> -NaN71 +dqscb867 scaleb -1000 NaN81 -> NaN81 +dqscb868 scaleb 1000 NaN91 -> NaN91 +dqscb869 scaleb Inf NaN101 -> NaN101 +dqscb871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation +dqscb872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation +dqscb873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation +dqscb874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation +dqscb875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation +dqscb876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation +dqscb877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation +dqscb878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation +dqscb879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation +dqscb880 scaleb Inf sNaN231 -> NaN231 Invalid_operation +dqscb881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation + +-- finites +dqscb051 scaleb 7 -2 -> 0.07 +dqscb052 scaleb -7 -2 -> -0.07 +dqscb053 scaleb 75 -2 -> 0.75 +dqscb054 scaleb -75 -2 -> -0.75 +dqscb055 scaleb 7.50 -2 -> 0.0750 +dqscb056 scaleb -7.50 -2 -> -0.0750 +dqscb057 scaleb 7.500 -2 -> 0.07500 +dqscb058 scaleb -7.500 -2 -> -0.07500 +dqscb061 scaleb 7 -1 -> 0.7 +dqscb062 scaleb -7 -1 -> -0.7 +dqscb063 scaleb 75 -1 -> 7.5 +dqscb064 scaleb -75 -1 -> -7.5 +dqscb065 scaleb 7.50 -1 -> 0.750 +dqscb066 scaleb -7.50 -1 -> -0.750 +dqscb067 scaleb 7.500 -1 -> 0.7500 +dqscb068 scaleb -7.500 -1 -> -0.7500 +dqscb071 scaleb 7 0 -> 7 +dqscb072 scaleb -7 0 -> -7 +dqscb073 scaleb 75 0 -> 75 +dqscb074 scaleb -75 0 -> -75 +dqscb075 scaleb 7.50 0 -> 7.50 +dqscb076 scaleb -7.50 0 -> -7.50 +dqscb077 scaleb 7.500 0 -> 7.500 +dqscb078 scaleb -7.500 0 -> -7.500 +dqscb081 scaleb 7 1 -> 7E+1 +dqscb082 scaleb -7 1 -> -7E+1 +dqscb083 scaleb 75 1 -> 7.5E+2 +dqscb084 scaleb -75 1 -> -7.5E+2 +dqscb085 scaleb 7.50 1 -> 75.0 +dqscb086 scaleb -7.50 1 -> -75.0 +dqscb087 scaleb 7.500 1 -> 75.00 +dqscb088 scaleb -7.500 1 -> -75.00 +dqscb091 scaleb 7 2 -> 7E+2 +dqscb092 scaleb -7 2 -> -7E+2 +dqscb093 scaleb 75 2 -> 7.5E+3 +dqscb094 scaleb -75 2 -> -7.5E+3 +dqscb095 scaleb 7.50 2 -> 750 +dqscb096 scaleb -7.50 2 -> -750 +dqscb097 scaleb 7.500 2 -> 750.0 +dqscb098 scaleb -7.500 2 -> -750.0 + +-- zeros +dqscb111 scaleb 0 1 -> 0E+1 +dqscb112 scaleb -0 2 -> -0E+2 +dqscb113 scaleb 0E+4 3 -> 0E+7 +dqscb114 scaleb -0E+4 4 -> -0E+8 +dqscb115 scaleb 0.0000 5 -> 0E+1 +dqscb116 scaleb -0.0000 6 -> -0E+2 +dqscb117 scaleb 0E-141 7 -> 0E-134 +dqscb118 scaleb -0E-141 8 -> -0E-133 + +-- Nmax, Nmin, Ntiny +dqscb132 scaleb 9.999999999999999999999999999999999E+6144 +6144 -> Infinity Overflow Inexact Rounded +dqscb133 scaleb 9.999999999999999999999999999999999E+6144 +10 -> Infinity Overflow Inexact Rounded +dqscb134 scaleb 9.999999999999999999999999999999999E+6144 +1 -> Infinity Overflow Inexact Rounded +dqscb135 scaleb 9.999999999999999999999999999999999E+6144 0 -> 9.999999999999999999999999999999999E+6144 +dqscb136 scaleb 9.999999999999999999999999999999999E+6144 -1 -> 9.999999999999999999999999999999999E+6143 +dqscb137 scaleb 1E-6143 +1 -> 1E-6142 +dqscb1614 scaleb 1E-6143 -0 -> 1E-6143 +dqscb139 scaleb 1E-6143 -1 -> 1E-6144 Subnormal +dqscb140 scaleb 1.000000000000000000000000000000000E-6143 +1 -> 1.000000000000000000000000000000000E-6142 +dqscb141 scaleb 1.000000000000000000000000000000000E-6143 0 -> 1.000000000000000000000000000000000E-6143 +dqscb142 scaleb 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 Subnormal Rounded +dqscb143 scaleb 1E-6176 +1 -> 1E-6175 Subnormal +dqscb144 scaleb 1E-6176 -0 -> 1E-6176 Subnormal +dqscb145 scaleb 1E-6176 -1 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped + +dqscb150 scaleb -1E-6176 +1 -> -1E-6175 Subnormal +dqscb151 scaleb -1E-6176 -0 -> -1E-6176 Subnormal +dqscb152 scaleb -1E-6176 -1 -> -0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqscb153 scaleb -1.000000000000000000000000000000000E-6143 +1 -> -1.000000000000000000000000000000000E-6142 +dqscb154 scaleb -1.000000000000000000000000000000000E-6143 +0 -> -1.000000000000000000000000000000000E-6143 +dqscb155 scaleb -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 Subnormal Rounded +dqscb156 scaleb -1E-6143 +1 -> -1E-6142 +dqscb157 scaleb -1E-6143 -0 -> -1E-6143 +dqscb158 scaleb -1E-6143 -1 -> -1E-6144 Subnormal +dqscb159 scaleb -9.999999999999999999999999999999999E+6144 +1 -> -Infinity Overflow Inexact Rounded +dqscb160 scaleb -9.999999999999999999999999999999999E+6144 +0 -> -9.999999999999999999999999999999999E+6144 +dqscb161 scaleb -9.999999999999999999999999999999999E+6144 -1 -> -9.999999999999999999999999999999999E+6143 +dqscb162 scaleb -9E+6144 +1 -> -Infinity Overflow Inexact Rounded +dqscb163 scaleb -1E+6144 +1 -> -Infinity Overflow Inexact Rounded + +-- some Origami +-- (these check that overflow is being done correctly) +dqscb171 scaleb 1000E+6109 +1 -> 1.000E+6113 +dqscb172 scaleb 1000E+6110 +1 -> 1.000E+6114 +dqscb173 scaleb 1000E+6111 +1 -> 1.0000E+6115 Clamped +dqscb174 scaleb 1000E+6112 +1 -> 1.00000E+6116 Clamped +dqscb175 scaleb 1000E+6113 +1 -> 1.000000E+6117 Clamped +dqscb176 scaleb 1000E+6114 +1 -> 1.0000000E+6118 Clamped +dqscb177 scaleb 1000E+6131 +1 -> 1.000000000000000000000000E+6135 Clamped +dqscb178 scaleb 1000E+6132 +1 -> 1.0000000000000000000000000E+6136 Clamped +dqscb179 scaleb 1000E+6133 +1 -> 1.00000000000000000000000000E+6137 Clamped +dqscb180 scaleb 1000E+6134 +1 -> 1.000000000000000000000000000E+6138 Clamped +dqscb181 scaleb 1000E+6135 +1 -> 1.0000000000000000000000000000E+6139 Clamped +dqscb182 scaleb 1000E+6136 +1 -> 1.00000000000000000000000000000E+6140 Clamped +dqscb183 scaleb 1000E+6137 +1 -> 1.000000000000000000000000000000E+6141 Clamped +dqscb184 scaleb 1000E+6138 +1 -> 1.0000000000000000000000000000000E+6142 Clamped +dqscb185 scaleb 1000E+6139 +1 -> 1.00000000000000000000000000000000E+6143 Clamped +dqscb186 scaleb 1000E+6140 +1 -> 1.000000000000000000000000000000000E+6144 Clamped +dqscb187 scaleb 1000E+6141 +1 -> Infinity Overflow Inexact Rounded + +-- and a few more subnormal truncations +-- (these check that underflow is being done correctly) +dqscb221 scaleb 1.000000000000000000000000000000000E-6143 0 -> 1.000000000000000000000000000000000E-6143 +dqscb222 scaleb 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 Subnormal Rounded +dqscb223 scaleb 1.000000000000000000000000000000000E-6143 -2 -> 1.0000000000000000000000000000000E-6145 Subnormal Rounded +dqscb224 scaleb 1.000000000000000000000000000000000E-6143 -3 -> 1.000000000000000000000000000000E-6146 Subnormal Rounded +dqscb225 scaleb 1.000000000000000000000000000000000E-6143 -4 -> 1.00000000000000000000000000000E-6147 Subnormal Rounded +dqscb226 scaleb 1.000000000000000000000000000000000E-6143 -5 -> 1.0000000000000000000000000000E-6148 Subnormal Rounded +dqscb227 scaleb 1.000000000000000000000000000000000E-6143 -6 -> 1.000000000000000000000000000E-6149 Subnormal Rounded +dqscb228 scaleb 1.000000000000000000000000000000000E-6143 -7 -> 1.00000000000000000000000000E-6150 Subnormal Rounded +dqscb229 scaleb 1.000000000000000000000000000000000E-6143 -8 -> 1.0000000000000000000000000E-6151 Subnormal Rounded +dqscb230 scaleb 1.000000000000000000000000000000000E-6143 -9 -> 1.000000000000000000000000E-6152 Subnormal Rounded +dqscb231 scaleb 1.000000000000000000000000000000000E-6143 -10 -> 1.00000000000000000000000E-6153 Subnormal Rounded +dqscb232 scaleb 1.000000000000000000000000000000000E-6143 -11 -> 1.0000000000000000000000E-6154 Subnormal Rounded +dqscb233 scaleb 1.000000000000000000000000000000000E-6143 -12 -> 1.000000000000000000000E-6155 Subnormal Rounded +dqscb234 scaleb 1.000000000000000000000000000000000E-6143 -13 -> 1.00000000000000000000E-6156 Subnormal Rounded +dqscb235 scaleb 1.000000000000000000000000000000000E-6143 -14 -> 1.0000000000000000000E-6157 Subnormal Rounded +dqscb236 scaleb 1.000000000000000000000000000000000E-6143 -15 -> 1.000000000000000000E-6158 Subnormal Rounded +dqscb237 scaleb 1.000000000000000000000000000000000E-6143 -16 -> 1.00000000000000000E-6159 Subnormal Rounded +dqscb238 scaleb 1.000000000000000000000000000000000E-6143 -17 -> 1.0000000000000000E-6160 Subnormal Rounded +dqscb239 scaleb 1.000000000000000000000000000000000E-6143 -18 -> 1.000000000000000E-6161 Subnormal Rounded +dqscb202 scaleb 1.000000000000000000000000000000000E-6143 -19 -> 1.00000000000000E-6162 Subnormal Rounded +dqscb203 scaleb 1.000000000000000000000000000000000E-6143 -20 -> 1.0000000000000E-6163 Subnormal Rounded +dqscb204 scaleb 1.000000000000000000000000000000000E-6143 -21 -> 1.000000000000E-6164 Subnormal Rounded +dqscb205 scaleb 1.000000000000000000000000000000000E-6143 -22 -> 1.00000000000E-6165 Subnormal Rounded +dqscb206 scaleb 1.000000000000000000000000000000000E-6143 -23 -> 1.0000000000E-6166 Subnormal Rounded +dqscb207 scaleb 1.000000000000000000000000000000000E-6143 -24 -> 1.000000000E-6167 Subnormal Rounded +dqscb208 scaleb 1.000000000000000000000000000000000E-6143 -25 -> 1.00000000E-6168 Subnormal Rounded +dqscb209 scaleb 1.000000000000000000000000000000000E-6143 -26 -> 1.0000000E-6169 Subnormal Rounded +dqscb210 scaleb 1.000000000000000000000000000000000E-6143 -27 -> 1.000000E-6170 Subnormal Rounded +dqscb211 scaleb 1.000000000000000000000000000000000E-6143 -28 -> 1.00000E-6171 Subnormal Rounded +dqscb212 scaleb 1.000000000000000000000000000000000E-6143 -29 -> 1.0000E-6172 Subnormal Rounded +dqscb213 scaleb 1.000000000000000000000000000000000E-6143 -30 -> 1.000E-6173 Subnormal Rounded +dqscb214 scaleb 1.000000000000000000000000000000000E-6143 -31 -> 1.00E-6174 Subnormal Rounded +dqscb215 scaleb 1.000000000000000000000000000000000E-6143 -32 -> 1.0E-6175 Subnormal Rounded +dqscb216 scaleb 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 Subnormal Rounded +dqscb217 scaleb 1.000000000000000000000000000000000E-6143 -34 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped +dqscb218 scaleb 1.000000000000000000000000000000000E-6143 -35 -> 0E-6176 Underflow Subnormal Inexact Rounded Clamped diff --git a/Lib/test/decimaltestdata/dqShift.decTest b/Lib/test/decimaltestdata/dqShift.decTest index 6d692134551..4ee836eb48c 100644 --- a/Lib/test/decimaltestdata/dqShift.decTest +++ b/Lib/test/decimaltestdata/dqShift.decTest @@ -1,298 +1,298 @@ ------------------------------------------------------------------------- --- dqShift.decTest -- shift decQuad coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check -dqshi001 shift 0 0 -> 0 -dqshi002 shift 0 2 -> 0 -dqshi003 shift 1 2 -> 100 -dqshi004 shift 1 33 -> 1000000000000000000000000000000000 -dqshi005 shift 1 34 -> 0 -dqshi006 shift 1 -1 -> 0 -dqshi007 shift 0 -2 -> 0 -dqshi008 shift 1234567890123456789012345678901234 -1 -> 123456789012345678901234567890123 -dqshi009 shift 1234567890123456789012345678901234 -33 -> 1 -dqshi010 shift 1234567890123456789012345678901234 -34 -> 0 -dqshi011 shift 9934567890123456789012345678901234 -33 -> 9 -dqshi012 shift 9934567890123456789012345678901234 -34 -> 0 - --- rhs must be an integer -dqshi015 shift 1 1.5 -> NaN Invalid_operation -dqshi016 shift 1 1.0 -> NaN Invalid_operation -dqshi017 shift 1 0.1 -> NaN Invalid_operation -dqshi018 shift 1 0.0 -> NaN Invalid_operation -dqshi019 shift 1 1E+1 -> NaN Invalid_operation -dqshi020 shift 1 1E+99 -> NaN Invalid_operation -dqshi021 shift 1 Inf -> NaN Invalid_operation -dqshi022 shift 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -dqshi025 shift 1 -1000 -> NaN Invalid_operation -dqshi026 shift 1 -35 -> NaN Invalid_operation -dqshi027 shift 1 35 -> NaN Invalid_operation -dqshi028 shift 1 1000 -> NaN Invalid_operation - --- full shifting pattern -dqshi030 shift 1234567890123456789012345678901234 -34 -> 0 -dqshi031 shift 1234567890123456789012345678901234 -33 -> 1 -dqshi032 shift 1234567890123456789012345678901234 -32 -> 12 -dqshi033 shift 1234567890123456789012345678901234 -31 -> 123 -dqshi034 shift 1234567890123456789012345678901234 -30 -> 1234 -dqshi035 shift 1234567890123456789012345678901234 -29 -> 12345 -dqshi036 shift 1234567890123456789012345678901234 -28 -> 123456 -dqshi037 shift 1234567890123456789012345678901234 -27 -> 1234567 -dqshi038 shift 1234567890123456789012345678901234 -26 -> 12345678 -dqshi039 shift 1234567890123456789012345678901234 -25 -> 123456789 -dqshi040 shift 1234567890123456789012345678901234 -24 -> 1234567890 -dqshi041 shift 1234567890123456789012345678901234 -23 -> 12345678901 -dqshi042 shift 1234567890123456789012345678901234 -22 -> 123456789012 -dqshi043 shift 1234567890123456789012345678901234 -21 -> 1234567890123 -dqshi044 shift 1234567890123456789012345678901234 -20 -> 12345678901234 -dqshi045 shift 1234567890123456789012345678901234 -19 -> 123456789012345 -dqshi047 shift 1234567890123456789012345678901234 -18 -> 1234567890123456 -dqshi048 shift 1234567890123456789012345678901234 -17 -> 12345678901234567 -dqshi049 shift 1234567890123456789012345678901234 -16 -> 123456789012345678 -dqshi050 shift 1234567890123456789012345678901234 -15 -> 1234567890123456789 -dqshi051 shift 1234567890123456789012345678901234 -14 -> 12345678901234567890 -dqshi052 shift 1234567890123456789012345678901234 -13 -> 123456789012345678901 -dqshi053 shift 1234567890123456789012345678901234 -12 -> 1234567890123456789012 -dqshi054 shift 1234567890123456789012345678901234 -11 -> 12345678901234567890123 -dqshi055 shift 1234567890123456789012345678901234 -10 -> 123456789012345678901234 -dqshi056 shift 1234567890123456789012345678901234 -9 -> 1234567890123456789012345 -dqshi057 shift 1234567890123456789012345678901234 -8 -> 12345678901234567890123456 -dqshi058 shift 1234567890123456789012345678901234 -7 -> 123456789012345678901234567 -dqshi059 shift 1234567890123456789012345678901234 -6 -> 1234567890123456789012345678 -dqshi060 shift 1234567890123456789012345678901234 -5 -> 12345678901234567890123456789 -dqshi061 shift 1234567890123456789012345678901234 -4 -> 123456789012345678901234567890 -dqshi062 shift 1234567890123456789012345678901234 -3 -> 1234567890123456789012345678901 -dqshi063 shift 1234567890123456789012345678901234 -2 -> 12345678901234567890123456789012 -dqshi064 shift 1234567890123456789012345678901234 -1 -> 123456789012345678901234567890123 -dqshi065 shift 1234567890123456789012345678901234 -0 -> 1234567890123456789012345678901234 - -dqshi066 shift 1234567890123456789012345678901234 +0 -> 1234567890123456789012345678901234 -dqshi067 shift 1234567890123456789012345678901234 +1 -> 2345678901234567890123456789012340 -dqshi068 shift 1234567890123456789012345678901234 +2 -> 3456789012345678901234567890123400 -dqshi069 shift 1234567890123456789012345678901234 +3 -> 4567890123456789012345678901234000 -dqshi070 shift 1234567890123456789012345678901234 +4 -> 5678901234567890123456789012340000 -dqshi071 shift 1234567890123456789012345678901234 +5 -> 6789012345678901234567890123400000 -dqshi072 shift 1234567890123456789012345678901234 +6 -> 7890123456789012345678901234000000 -dqshi073 shift 1234567890123456789012345678901234 +7 -> 8901234567890123456789012340000000 -dqshi074 shift 1234567890123456789012345678901234 +8 -> 9012345678901234567890123400000000 -dqshi075 shift 1234567890123456789012345678901234 +9 -> 123456789012345678901234000000000 -dqshi076 shift 1234567890123456789012345678901234 +10 -> 1234567890123456789012340000000000 -dqshi077 shift 1234567890123456789012345678901234 +11 -> 2345678901234567890123400000000000 -dqshi078 shift 1234567890123456789012345678901234 +12 -> 3456789012345678901234000000000000 -dqshi079 shift 1234567890123456789012345678901234 +13 -> 4567890123456789012340000000000000 -dqshi080 shift 1234567890123456789012345678901234 +14 -> 5678901234567890123400000000000000 -dqshi081 shift 1234567890123456789012345678901234 +15 -> 6789012345678901234000000000000000 -dqshi082 shift 1234567890123456789012345678901234 +16 -> 7890123456789012340000000000000000 -dqshi083 shift 1234567890123456789012345678901234 +17 -> 8901234567890123400000000000000000 -dqshi084 shift 1234567890123456789012345678901234 +18 -> 9012345678901234000000000000000000 -dqshi085 shift 1234567890123456789012345678901234 +19 -> 123456789012340000000000000000000 -dqshi086 shift 1234567890123456789012345678901234 +20 -> 1234567890123400000000000000000000 -dqshi087 shift 1234567890123456789012345678901234 +21 -> 2345678901234000000000000000000000 -dqshi088 shift 1234567890123456789012345678901234 +22 -> 3456789012340000000000000000000000 -dqshi089 shift 1234567890123456789012345678901234 +23 -> 4567890123400000000000000000000000 -dqshi090 shift 1234567890123456789012345678901234 +24 -> 5678901234000000000000000000000000 -dqshi091 shift 1234567890123456789012345678901234 +25 -> 6789012340000000000000000000000000 -dqshi092 shift 1234567890123456789012345678901234 +26 -> 7890123400000000000000000000000000 -dqshi093 shift 1234567890123456789012345678901234 +27 -> 8901234000000000000000000000000000 -dqshi094 shift 1234567890123456789012345678901234 +28 -> 9012340000000000000000000000000000 -dqshi095 shift 1234567890123456789012345678901234 +29 -> 123400000000000000000000000000000 -dqshi096 shift 1234567890123456789012345678901234 +30 -> 1234000000000000000000000000000000 -dqshi097 shift 1234567890123456789012345678901234 +31 -> 2340000000000000000000000000000000 -dqshi098 shift 1234567890123456789012345678901234 +32 -> 3400000000000000000000000000000000 -dqshi099 shift 1234567890123456789012345678901234 +33 -> 4000000000000000000000000000000000 -dqshi100 shift 1234567890123456789012345678901234 +34 -> 0 - --- zeros -dqshi270 shift 0E-10 +29 -> 0E-10 -dqshi271 shift 0E-10 -29 -> 0E-10 -dqshi272 shift 0.000 +29 -> 0.000 -dqshi273 shift 0.000 -29 -> 0.000 -dqshi274 shift 0E+10 +29 -> 0E+10 -dqshi275 shift 0E+10 -29 -> 0E+10 -dqshi276 shift -0E-10 +29 -> -0E-10 -dqshi277 shift -0E-10 -29 -> -0E-10 -dqshi278 shift -0.000 +29 -> -0.000 -dqshi279 shift -0.000 -29 -> -0.000 -dqshi280 shift -0E+10 +29 -> -0E+10 -dqshi281 shift -0E+10 -29 -> -0E+10 - --- Nmax, Nmin, Ntiny -dqshi141 shift 9.999999999999999999999999999999999E+6144 -1 -> 9.99999999999999999999999999999999E+6143 -dqshi142 shift 9.999999999999999999999999999999999E+6144 -33 -> 9E+6111 -dqshi143 shift 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999990E+6144 -dqshi144 shift 9.999999999999999999999999999999999E+6144 33 -> 9.000000000000000000000000000000000E+6144 -dqshi145 shift 1E-6143 -1 -> 0E-6143 -dqshi146 shift 1E-6143 -33 -> 0E-6143 -dqshi147 shift 1E-6143 1 -> 1.0E-6142 -dqshi148 shift 1E-6143 33 -> 1.000000000000000000000000000000000E-6110 -dqshi151 shift 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 -dqshi152 shift 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 -dqshi153 shift 1.000000000000000000000000000000000E-6143 1 -> 0E-6176 -dqshi154 shift 1.000000000000000000000000000000000E-6143 33 -> 0E-6176 -dqshi155 shift 9.000000000000000000000000000000000E-6143 -1 -> 9.00000000000000000000000000000000E-6144 -dqshi156 shift 9.000000000000000000000000000000000E-6143 -33 -> 9E-6176 -dqshi157 shift 9.000000000000000000000000000000000E-6143 1 -> 0E-6176 -dqshi158 shift 9.000000000000000000000000000000000E-6143 33 -> 0E-6176 -dqshi160 shift 1E-6176 -1 -> 0E-6176 -dqshi161 shift 1E-6176 -33 -> 0E-6176 -dqshi162 shift 1E-6176 1 -> 1.0E-6175 -dqshi163 shift 1E-6176 33 -> 1.000000000000000000000000000000000E-6143 --- negatives -dqshi171 shift -9.999999999999999999999999999999999E+6144 -1 -> -9.99999999999999999999999999999999E+6143 -dqshi172 shift -9.999999999999999999999999999999999E+6144 -33 -> -9E+6111 -dqshi173 shift -9.999999999999999999999999999999999E+6144 1 -> -9.999999999999999999999999999999990E+6144 -dqshi174 shift -9.999999999999999999999999999999999E+6144 33 -> -9.000000000000000000000000000000000E+6144 -dqshi175 shift -1E-6143 -1 -> -0E-6143 -dqshi176 shift -1E-6143 -33 -> -0E-6143 -dqshi177 shift -1E-6143 1 -> -1.0E-6142 -dqshi178 shift -1E-6143 33 -> -1.000000000000000000000000000000000E-6110 -dqshi181 shift -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 -dqshi182 shift -1.000000000000000000000000000000000E-6143 -33 -> -1E-6176 -dqshi183 shift -1.000000000000000000000000000000000E-6143 1 -> -0E-6176 -dqshi184 shift -1.000000000000000000000000000000000E-6143 33 -> -0E-6176 -dqshi185 shift -9.000000000000000000000000000000000E-6143 -1 -> -9.00000000000000000000000000000000E-6144 -dqshi186 shift -9.000000000000000000000000000000000E-6143 -33 -> -9E-6176 -dqshi187 shift -9.000000000000000000000000000000000E-6143 1 -> -0E-6176 -dqshi188 shift -9.000000000000000000000000000000000E-6143 33 -> -0E-6176 -dqshi190 shift -1E-6176 -1 -> -0E-6176 -dqshi191 shift -1E-6176 -33 -> -0E-6176 -dqshi192 shift -1E-6176 1 -> -1.0E-6175 -dqshi193 shift -1E-6176 33 -> -1.000000000000000000000000000000000E-6143 - --- more negatives (of sanities) -dqshi201 shift -0 0 -> -0 -dqshi202 shift -0 2 -> -0 -dqshi203 shift -1 2 -> -100 -dqshi204 shift -1 33 -> -1000000000000000000000000000000000 -dqshi205 shift -1 34 -> -0 -dqshi206 shift -1 -1 -> -0 -dqshi207 shift -0 -2 -> -0 -dqshi208 shift -1234567890123456789012345678901234 -1 -> -123456789012345678901234567890123 -dqshi209 shift -1234567890123456789012345678901234 -33 -> -1 -dqshi210 shift -1234567890123456789012345678901234 -34 -> -0 -dqshi211 shift -9934567890123456789012345678901234 -33 -> -9 -dqshi212 shift -9934567890123456789012345678901234 -34 -> -0 - - --- Specials; NaNs are handled as usual -dqshi781 shift -Inf -8 -> -Infinity -dqshi782 shift -Inf -1 -> -Infinity -dqshi783 shift -Inf -0 -> -Infinity -dqshi784 shift -Inf 0 -> -Infinity -dqshi785 shift -Inf 1 -> -Infinity -dqshi786 shift -Inf 8 -> -Infinity -dqshi787 shift -1000 -Inf -> NaN Invalid_operation -dqshi788 shift -Inf -Inf -> NaN Invalid_operation -dqshi789 shift -1 -Inf -> NaN Invalid_operation -dqshi790 shift -0 -Inf -> NaN Invalid_operation -dqshi791 shift 0 -Inf -> NaN Invalid_operation -dqshi792 shift 1 -Inf -> NaN Invalid_operation -dqshi793 shift 1000 -Inf -> NaN Invalid_operation -dqshi794 shift Inf -Inf -> NaN Invalid_operation - -dqshi800 shift Inf -Inf -> NaN Invalid_operation -dqshi801 shift Inf -8 -> Infinity -dqshi802 shift Inf -1 -> Infinity -dqshi803 shift Inf -0 -> Infinity -dqshi804 shift Inf 0 -> Infinity -dqshi805 shift Inf 1 -> Infinity -dqshi806 shift Inf 8 -> Infinity -dqshi807 shift Inf Inf -> NaN Invalid_operation -dqshi808 shift -1000 Inf -> NaN Invalid_operation -dqshi809 shift -Inf Inf -> NaN Invalid_operation -dqshi810 shift -1 Inf -> NaN Invalid_operation -dqshi811 shift -0 Inf -> NaN Invalid_operation -dqshi812 shift 0 Inf -> NaN Invalid_operation -dqshi813 shift 1 Inf -> NaN Invalid_operation -dqshi814 shift 1000 Inf -> NaN Invalid_operation -dqshi815 shift Inf Inf -> NaN Invalid_operation - -dqshi821 shift NaN -Inf -> NaN -dqshi822 shift NaN -1000 -> NaN -dqshi823 shift NaN -1 -> NaN -dqshi824 shift NaN -0 -> NaN -dqshi825 shift NaN 0 -> NaN -dqshi826 shift NaN 1 -> NaN -dqshi827 shift NaN 1000 -> NaN -dqshi828 shift NaN Inf -> NaN -dqshi829 shift NaN NaN -> NaN -dqshi830 shift -Inf NaN -> NaN -dqshi831 shift -1000 NaN -> NaN -dqshi832 shift -1 NaN -> NaN -dqshi833 shift -0 NaN -> NaN -dqshi834 shift 0 NaN -> NaN -dqshi835 shift 1 NaN -> NaN -dqshi836 shift 1000 NaN -> NaN -dqshi837 shift Inf NaN -> NaN - -dqshi841 shift sNaN -Inf -> NaN Invalid_operation -dqshi842 shift sNaN -1000 -> NaN Invalid_operation -dqshi843 shift sNaN -1 -> NaN Invalid_operation -dqshi844 shift sNaN -0 -> NaN Invalid_operation -dqshi845 shift sNaN 0 -> NaN Invalid_operation -dqshi846 shift sNaN 1 -> NaN Invalid_operation -dqshi847 shift sNaN 1000 -> NaN Invalid_operation -dqshi848 shift sNaN NaN -> NaN Invalid_operation -dqshi849 shift sNaN sNaN -> NaN Invalid_operation -dqshi850 shift NaN sNaN -> NaN Invalid_operation -dqshi851 shift -Inf sNaN -> NaN Invalid_operation -dqshi852 shift -1000 sNaN -> NaN Invalid_operation -dqshi853 shift -1 sNaN -> NaN Invalid_operation -dqshi854 shift -0 sNaN -> NaN Invalid_operation -dqshi855 shift 0 sNaN -> NaN Invalid_operation -dqshi856 shift 1 sNaN -> NaN Invalid_operation -dqshi857 shift 1000 sNaN -> NaN Invalid_operation -dqshi858 shift Inf sNaN -> NaN Invalid_operation -dqshi859 shift NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqshi861 shift NaN1 -Inf -> NaN1 -dqshi862 shift +NaN2 -1000 -> NaN2 -dqshi863 shift NaN3 1000 -> NaN3 -dqshi864 shift NaN4 Inf -> NaN4 -dqshi865 shift NaN5 +NaN6 -> NaN5 -dqshi866 shift -Inf NaN7 -> NaN7 -dqshi867 shift -1000 NaN8 -> NaN8 -dqshi868 shift 1000 NaN9 -> NaN9 -dqshi869 shift Inf +NaN10 -> NaN10 -dqshi871 shift sNaN11 -Inf -> NaN11 Invalid_operation -dqshi872 shift sNaN12 -1000 -> NaN12 Invalid_operation -dqshi873 shift sNaN13 1000 -> NaN13 Invalid_operation -dqshi874 shift sNaN14 NaN17 -> NaN14 Invalid_operation -dqshi875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation -dqshi876 shift NaN16 sNaN19 -> NaN19 Invalid_operation -dqshi877 shift -Inf +sNaN20 -> NaN20 Invalid_operation -dqshi878 shift -1000 sNaN21 -> NaN21 Invalid_operation -dqshi879 shift 1000 sNaN22 -> NaN22 Invalid_operation -dqshi880 shift Inf sNaN23 -> NaN23 Invalid_operation -dqshi881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation -dqshi882 shift -NaN26 NaN28 -> -NaN26 -dqshi883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation -dqshi884 shift 1000 -NaN30 -> -NaN30 -dqshi885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- dqShift.decTest -- shift decQuad coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check +dqshi001 shift 0 0 -> 0 +dqshi002 shift 0 2 -> 0 +dqshi003 shift 1 2 -> 100 +dqshi004 shift 1 33 -> 1000000000000000000000000000000000 +dqshi005 shift 1 34 -> 0 +dqshi006 shift 1 -1 -> 0 +dqshi007 shift 0 -2 -> 0 +dqshi008 shift 1234567890123456789012345678901234 -1 -> 123456789012345678901234567890123 +dqshi009 shift 1234567890123456789012345678901234 -33 -> 1 +dqshi010 shift 1234567890123456789012345678901234 -34 -> 0 +dqshi011 shift 9934567890123456789012345678901234 -33 -> 9 +dqshi012 shift 9934567890123456789012345678901234 -34 -> 0 + +-- rhs must be an integer +dqshi015 shift 1 1.5 -> NaN Invalid_operation +dqshi016 shift 1 1.0 -> NaN Invalid_operation +dqshi017 shift 1 0.1 -> NaN Invalid_operation +dqshi018 shift 1 0.0 -> NaN Invalid_operation +dqshi019 shift 1 1E+1 -> NaN Invalid_operation +dqshi020 shift 1 1E+99 -> NaN Invalid_operation +dqshi021 shift 1 Inf -> NaN Invalid_operation +dqshi022 shift 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +dqshi025 shift 1 -1000 -> NaN Invalid_operation +dqshi026 shift 1 -35 -> NaN Invalid_operation +dqshi027 shift 1 35 -> NaN Invalid_operation +dqshi028 shift 1 1000 -> NaN Invalid_operation + +-- full shifting pattern +dqshi030 shift 1234567890123456789012345678901234 -34 -> 0 +dqshi031 shift 1234567890123456789012345678901234 -33 -> 1 +dqshi032 shift 1234567890123456789012345678901234 -32 -> 12 +dqshi033 shift 1234567890123456789012345678901234 -31 -> 123 +dqshi034 shift 1234567890123456789012345678901234 -30 -> 1234 +dqshi035 shift 1234567890123456789012345678901234 -29 -> 12345 +dqshi036 shift 1234567890123456789012345678901234 -28 -> 123456 +dqshi037 shift 1234567890123456789012345678901234 -27 -> 1234567 +dqshi038 shift 1234567890123456789012345678901234 -26 -> 12345678 +dqshi039 shift 1234567890123456789012345678901234 -25 -> 123456789 +dqshi040 shift 1234567890123456789012345678901234 -24 -> 1234567890 +dqshi041 shift 1234567890123456789012345678901234 -23 -> 12345678901 +dqshi042 shift 1234567890123456789012345678901234 -22 -> 123456789012 +dqshi043 shift 1234567890123456789012345678901234 -21 -> 1234567890123 +dqshi044 shift 1234567890123456789012345678901234 -20 -> 12345678901234 +dqshi045 shift 1234567890123456789012345678901234 -19 -> 123456789012345 +dqshi047 shift 1234567890123456789012345678901234 -18 -> 1234567890123456 +dqshi048 shift 1234567890123456789012345678901234 -17 -> 12345678901234567 +dqshi049 shift 1234567890123456789012345678901234 -16 -> 123456789012345678 +dqshi050 shift 1234567890123456789012345678901234 -15 -> 1234567890123456789 +dqshi051 shift 1234567890123456789012345678901234 -14 -> 12345678901234567890 +dqshi052 shift 1234567890123456789012345678901234 -13 -> 123456789012345678901 +dqshi053 shift 1234567890123456789012345678901234 -12 -> 1234567890123456789012 +dqshi054 shift 1234567890123456789012345678901234 -11 -> 12345678901234567890123 +dqshi055 shift 1234567890123456789012345678901234 -10 -> 123456789012345678901234 +dqshi056 shift 1234567890123456789012345678901234 -9 -> 1234567890123456789012345 +dqshi057 shift 1234567890123456789012345678901234 -8 -> 12345678901234567890123456 +dqshi058 shift 1234567890123456789012345678901234 -7 -> 123456789012345678901234567 +dqshi059 shift 1234567890123456789012345678901234 -6 -> 1234567890123456789012345678 +dqshi060 shift 1234567890123456789012345678901234 -5 -> 12345678901234567890123456789 +dqshi061 shift 1234567890123456789012345678901234 -4 -> 123456789012345678901234567890 +dqshi062 shift 1234567890123456789012345678901234 -3 -> 1234567890123456789012345678901 +dqshi063 shift 1234567890123456789012345678901234 -2 -> 12345678901234567890123456789012 +dqshi064 shift 1234567890123456789012345678901234 -1 -> 123456789012345678901234567890123 +dqshi065 shift 1234567890123456789012345678901234 -0 -> 1234567890123456789012345678901234 + +dqshi066 shift 1234567890123456789012345678901234 +0 -> 1234567890123456789012345678901234 +dqshi067 shift 1234567890123456789012345678901234 +1 -> 2345678901234567890123456789012340 +dqshi068 shift 1234567890123456789012345678901234 +2 -> 3456789012345678901234567890123400 +dqshi069 shift 1234567890123456789012345678901234 +3 -> 4567890123456789012345678901234000 +dqshi070 shift 1234567890123456789012345678901234 +4 -> 5678901234567890123456789012340000 +dqshi071 shift 1234567890123456789012345678901234 +5 -> 6789012345678901234567890123400000 +dqshi072 shift 1234567890123456789012345678901234 +6 -> 7890123456789012345678901234000000 +dqshi073 shift 1234567890123456789012345678901234 +7 -> 8901234567890123456789012340000000 +dqshi074 shift 1234567890123456789012345678901234 +8 -> 9012345678901234567890123400000000 +dqshi075 shift 1234567890123456789012345678901234 +9 -> 123456789012345678901234000000000 +dqshi076 shift 1234567890123456789012345678901234 +10 -> 1234567890123456789012340000000000 +dqshi077 shift 1234567890123456789012345678901234 +11 -> 2345678901234567890123400000000000 +dqshi078 shift 1234567890123456789012345678901234 +12 -> 3456789012345678901234000000000000 +dqshi079 shift 1234567890123456789012345678901234 +13 -> 4567890123456789012340000000000000 +dqshi080 shift 1234567890123456789012345678901234 +14 -> 5678901234567890123400000000000000 +dqshi081 shift 1234567890123456789012345678901234 +15 -> 6789012345678901234000000000000000 +dqshi082 shift 1234567890123456789012345678901234 +16 -> 7890123456789012340000000000000000 +dqshi083 shift 1234567890123456789012345678901234 +17 -> 8901234567890123400000000000000000 +dqshi084 shift 1234567890123456789012345678901234 +18 -> 9012345678901234000000000000000000 +dqshi085 shift 1234567890123456789012345678901234 +19 -> 123456789012340000000000000000000 +dqshi086 shift 1234567890123456789012345678901234 +20 -> 1234567890123400000000000000000000 +dqshi087 shift 1234567890123456789012345678901234 +21 -> 2345678901234000000000000000000000 +dqshi088 shift 1234567890123456789012345678901234 +22 -> 3456789012340000000000000000000000 +dqshi089 shift 1234567890123456789012345678901234 +23 -> 4567890123400000000000000000000000 +dqshi090 shift 1234567890123456789012345678901234 +24 -> 5678901234000000000000000000000000 +dqshi091 shift 1234567890123456789012345678901234 +25 -> 6789012340000000000000000000000000 +dqshi092 shift 1234567890123456789012345678901234 +26 -> 7890123400000000000000000000000000 +dqshi093 shift 1234567890123456789012345678901234 +27 -> 8901234000000000000000000000000000 +dqshi094 shift 1234567890123456789012345678901234 +28 -> 9012340000000000000000000000000000 +dqshi095 shift 1234567890123456789012345678901234 +29 -> 123400000000000000000000000000000 +dqshi096 shift 1234567890123456789012345678901234 +30 -> 1234000000000000000000000000000000 +dqshi097 shift 1234567890123456789012345678901234 +31 -> 2340000000000000000000000000000000 +dqshi098 shift 1234567890123456789012345678901234 +32 -> 3400000000000000000000000000000000 +dqshi099 shift 1234567890123456789012345678901234 +33 -> 4000000000000000000000000000000000 +dqshi100 shift 1234567890123456789012345678901234 +34 -> 0 + +-- zeros +dqshi270 shift 0E-10 +29 -> 0E-10 +dqshi271 shift 0E-10 -29 -> 0E-10 +dqshi272 shift 0.000 +29 -> 0.000 +dqshi273 shift 0.000 -29 -> 0.000 +dqshi274 shift 0E+10 +29 -> 0E+10 +dqshi275 shift 0E+10 -29 -> 0E+10 +dqshi276 shift -0E-10 +29 -> -0E-10 +dqshi277 shift -0E-10 -29 -> -0E-10 +dqshi278 shift -0.000 +29 -> -0.000 +dqshi279 shift -0.000 -29 -> -0.000 +dqshi280 shift -0E+10 +29 -> -0E+10 +dqshi281 shift -0E+10 -29 -> -0E+10 + +-- Nmax, Nmin, Ntiny +dqshi141 shift 9.999999999999999999999999999999999E+6144 -1 -> 9.99999999999999999999999999999999E+6143 +dqshi142 shift 9.999999999999999999999999999999999E+6144 -33 -> 9E+6111 +dqshi143 shift 9.999999999999999999999999999999999E+6144 1 -> 9.999999999999999999999999999999990E+6144 +dqshi144 shift 9.999999999999999999999999999999999E+6144 33 -> 9.000000000000000000000000000000000E+6144 +dqshi145 shift 1E-6143 -1 -> 0E-6143 +dqshi146 shift 1E-6143 -33 -> 0E-6143 +dqshi147 shift 1E-6143 1 -> 1.0E-6142 +dqshi148 shift 1E-6143 33 -> 1.000000000000000000000000000000000E-6110 +dqshi151 shift 1.000000000000000000000000000000000E-6143 -1 -> 1.00000000000000000000000000000000E-6144 +dqshi152 shift 1.000000000000000000000000000000000E-6143 -33 -> 1E-6176 +dqshi153 shift 1.000000000000000000000000000000000E-6143 1 -> 0E-6176 +dqshi154 shift 1.000000000000000000000000000000000E-6143 33 -> 0E-6176 +dqshi155 shift 9.000000000000000000000000000000000E-6143 -1 -> 9.00000000000000000000000000000000E-6144 +dqshi156 shift 9.000000000000000000000000000000000E-6143 -33 -> 9E-6176 +dqshi157 shift 9.000000000000000000000000000000000E-6143 1 -> 0E-6176 +dqshi158 shift 9.000000000000000000000000000000000E-6143 33 -> 0E-6176 +dqshi160 shift 1E-6176 -1 -> 0E-6176 +dqshi161 shift 1E-6176 -33 -> 0E-6176 +dqshi162 shift 1E-6176 1 -> 1.0E-6175 +dqshi163 shift 1E-6176 33 -> 1.000000000000000000000000000000000E-6143 +-- negatives +dqshi171 shift -9.999999999999999999999999999999999E+6144 -1 -> -9.99999999999999999999999999999999E+6143 +dqshi172 shift -9.999999999999999999999999999999999E+6144 -33 -> -9E+6111 +dqshi173 shift -9.999999999999999999999999999999999E+6144 1 -> -9.999999999999999999999999999999990E+6144 +dqshi174 shift -9.999999999999999999999999999999999E+6144 33 -> -9.000000000000000000000000000000000E+6144 +dqshi175 shift -1E-6143 -1 -> -0E-6143 +dqshi176 shift -1E-6143 -33 -> -0E-6143 +dqshi177 shift -1E-6143 1 -> -1.0E-6142 +dqshi178 shift -1E-6143 33 -> -1.000000000000000000000000000000000E-6110 +dqshi181 shift -1.000000000000000000000000000000000E-6143 -1 -> -1.00000000000000000000000000000000E-6144 +dqshi182 shift -1.000000000000000000000000000000000E-6143 -33 -> -1E-6176 +dqshi183 shift -1.000000000000000000000000000000000E-6143 1 -> -0E-6176 +dqshi184 shift -1.000000000000000000000000000000000E-6143 33 -> -0E-6176 +dqshi185 shift -9.000000000000000000000000000000000E-6143 -1 -> -9.00000000000000000000000000000000E-6144 +dqshi186 shift -9.000000000000000000000000000000000E-6143 -33 -> -9E-6176 +dqshi187 shift -9.000000000000000000000000000000000E-6143 1 -> -0E-6176 +dqshi188 shift -9.000000000000000000000000000000000E-6143 33 -> -0E-6176 +dqshi190 shift -1E-6176 -1 -> -0E-6176 +dqshi191 shift -1E-6176 -33 -> -0E-6176 +dqshi192 shift -1E-6176 1 -> -1.0E-6175 +dqshi193 shift -1E-6176 33 -> -1.000000000000000000000000000000000E-6143 + +-- more negatives (of sanities) +dqshi201 shift -0 0 -> -0 +dqshi202 shift -0 2 -> -0 +dqshi203 shift -1 2 -> -100 +dqshi204 shift -1 33 -> -1000000000000000000000000000000000 +dqshi205 shift -1 34 -> -0 +dqshi206 shift -1 -1 -> -0 +dqshi207 shift -0 -2 -> -0 +dqshi208 shift -1234567890123456789012345678901234 -1 -> -123456789012345678901234567890123 +dqshi209 shift -1234567890123456789012345678901234 -33 -> -1 +dqshi210 shift -1234567890123456789012345678901234 -34 -> -0 +dqshi211 shift -9934567890123456789012345678901234 -33 -> -9 +dqshi212 shift -9934567890123456789012345678901234 -34 -> -0 + + +-- Specials; NaNs are handled as usual +dqshi781 shift -Inf -8 -> -Infinity +dqshi782 shift -Inf -1 -> -Infinity +dqshi783 shift -Inf -0 -> -Infinity +dqshi784 shift -Inf 0 -> -Infinity +dqshi785 shift -Inf 1 -> -Infinity +dqshi786 shift -Inf 8 -> -Infinity +dqshi787 shift -1000 -Inf -> NaN Invalid_operation +dqshi788 shift -Inf -Inf -> NaN Invalid_operation +dqshi789 shift -1 -Inf -> NaN Invalid_operation +dqshi790 shift -0 -Inf -> NaN Invalid_operation +dqshi791 shift 0 -Inf -> NaN Invalid_operation +dqshi792 shift 1 -Inf -> NaN Invalid_operation +dqshi793 shift 1000 -Inf -> NaN Invalid_operation +dqshi794 shift Inf -Inf -> NaN Invalid_operation + +dqshi800 shift Inf -Inf -> NaN Invalid_operation +dqshi801 shift Inf -8 -> Infinity +dqshi802 shift Inf -1 -> Infinity +dqshi803 shift Inf -0 -> Infinity +dqshi804 shift Inf 0 -> Infinity +dqshi805 shift Inf 1 -> Infinity +dqshi806 shift Inf 8 -> Infinity +dqshi807 shift Inf Inf -> NaN Invalid_operation +dqshi808 shift -1000 Inf -> NaN Invalid_operation +dqshi809 shift -Inf Inf -> NaN Invalid_operation +dqshi810 shift -1 Inf -> NaN Invalid_operation +dqshi811 shift -0 Inf -> NaN Invalid_operation +dqshi812 shift 0 Inf -> NaN Invalid_operation +dqshi813 shift 1 Inf -> NaN Invalid_operation +dqshi814 shift 1000 Inf -> NaN Invalid_operation +dqshi815 shift Inf Inf -> NaN Invalid_operation + +dqshi821 shift NaN -Inf -> NaN +dqshi822 shift NaN -1000 -> NaN +dqshi823 shift NaN -1 -> NaN +dqshi824 shift NaN -0 -> NaN +dqshi825 shift NaN 0 -> NaN +dqshi826 shift NaN 1 -> NaN +dqshi827 shift NaN 1000 -> NaN +dqshi828 shift NaN Inf -> NaN +dqshi829 shift NaN NaN -> NaN +dqshi830 shift -Inf NaN -> NaN +dqshi831 shift -1000 NaN -> NaN +dqshi832 shift -1 NaN -> NaN +dqshi833 shift -0 NaN -> NaN +dqshi834 shift 0 NaN -> NaN +dqshi835 shift 1 NaN -> NaN +dqshi836 shift 1000 NaN -> NaN +dqshi837 shift Inf NaN -> NaN + +dqshi841 shift sNaN -Inf -> NaN Invalid_operation +dqshi842 shift sNaN -1000 -> NaN Invalid_operation +dqshi843 shift sNaN -1 -> NaN Invalid_operation +dqshi844 shift sNaN -0 -> NaN Invalid_operation +dqshi845 shift sNaN 0 -> NaN Invalid_operation +dqshi846 shift sNaN 1 -> NaN Invalid_operation +dqshi847 shift sNaN 1000 -> NaN Invalid_operation +dqshi848 shift sNaN NaN -> NaN Invalid_operation +dqshi849 shift sNaN sNaN -> NaN Invalid_operation +dqshi850 shift NaN sNaN -> NaN Invalid_operation +dqshi851 shift -Inf sNaN -> NaN Invalid_operation +dqshi852 shift -1000 sNaN -> NaN Invalid_operation +dqshi853 shift -1 sNaN -> NaN Invalid_operation +dqshi854 shift -0 sNaN -> NaN Invalid_operation +dqshi855 shift 0 sNaN -> NaN Invalid_operation +dqshi856 shift 1 sNaN -> NaN Invalid_operation +dqshi857 shift 1000 sNaN -> NaN Invalid_operation +dqshi858 shift Inf sNaN -> NaN Invalid_operation +dqshi859 shift NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqshi861 shift NaN1 -Inf -> NaN1 +dqshi862 shift +NaN2 -1000 -> NaN2 +dqshi863 shift NaN3 1000 -> NaN3 +dqshi864 shift NaN4 Inf -> NaN4 +dqshi865 shift NaN5 +NaN6 -> NaN5 +dqshi866 shift -Inf NaN7 -> NaN7 +dqshi867 shift -1000 NaN8 -> NaN8 +dqshi868 shift 1000 NaN9 -> NaN9 +dqshi869 shift Inf +NaN10 -> NaN10 +dqshi871 shift sNaN11 -Inf -> NaN11 Invalid_operation +dqshi872 shift sNaN12 -1000 -> NaN12 Invalid_operation +dqshi873 shift sNaN13 1000 -> NaN13 Invalid_operation +dqshi874 shift sNaN14 NaN17 -> NaN14 Invalid_operation +dqshi875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation +dqshi876 shift NaN16 sNaN19 -> NaN19 Invalid_operation +dqshi877 shift -Inf +sNaN20 -> NaN20 Invalid_operation +dqshi878 shift -1000 sNaN21 -> NaN21 Invalid_operation +dqshi879 shift 1000 sNaN22 -> NaN22 Invalid_operation +dqshi880 shift Inf sNaN23 -> NaN23 Invalid_operation +dqshi881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation +dqshi882 shift -NaN26 NaN28 -> -NaN26 +dqshi883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation +dqshi884 shift 1000 -NaN30 -> -NaN30 +dqshi885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/dqSubtract.decTest b/Lib/test/decimaltestdata/dqSubtract.decTest index 34572f69d5c..f3b92270f9e 100644 --- a/Lib/test/decimaltestdata/dqSubtract.decTest +++ b/Lib/test/decimaltestdata/dqSubtract.decTest @@ -1,635 +1,635 @@ ------------------------------------------------------------------------- --- dqSubtract.decTest -- decQuad subtraction -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests are for decQuads only; all arguments are --- representable in a decQuad -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- [first group are 'quick confidence check'] -dqsub001 subtract 0 0 -> '0' -dqsub002 subtract 1 1 -> '0' -dqsub003 subtract 1 2 -> '-1' -dqsub004 subtract 2 1 -> '1' -dqsub005 subtract 2 2 -> '0' -dqsub006 subtract 3 2 -> '1' -dqsub007 subtract 2 3 -> '-1' - -dqsub011 subtract -0 0 -> '-0' -dqsub012 subtract -1 1 -> '-2' -dqsub013 subtract -1 2 -> '-3' -dqsub014 subtract -2 1 -> '-3' -dqsub015 subtract -2 2 -> '-4' -dqsub016 subtract -3 2 -> '-5' -dqsub017 subtract -2 3 -> '-5' - -dqsub021 subtract 0 -0 -> '0' -dqsub022 subtract 1 -1 -> '2' -dqsub023 subtract 1 -2 -> '3' -dqsub024 subtract 2 -1 -> '3' -dqsub025 subtract 2 -2 -> '4' -dqsub026 subtract 3 -2 -> '5' -dqsub027 subtract 2 -3 -> '5' - -dqsub030 subtract 11 1 -> 10 -dqsub031 subtract 10 1 -> 9 -dqsub032 subtract 9 1 -> 8 -dqsub033 subtract 1 1 -> 0 -dqsub034 subtract 0 1 -> -1 -dqsub035 subtract -1 1 -> -2 -dqsub036 subtract -9 1 -> -10 -dqsub037 subtract -10 1 -> -11 -dqsub038 subtract -11 1 -> -12 - -dqsub040 subtract '5.75' '3.3' -> '2.45' -dqsub041 subtract '5' '-3' -> '8' -dqsub042 subtract '-5' '-3' -> '-2' -dqsub043 subtract '-7' '2.5' -> '-9.5' -dqsub044 subtract '0.7' '0.3' -> '0.4' -dqsub045 subtract '1.3' '0.3' -> '1.0' -dqsub046 subtract '1.25' '1.25' -> '0.00' - -dqsub050 subtract '1.23456789' '1.00000000' -> '0.23456789' -dqsub051 subtract '1.23456789' '1.00000089' -> '0.23456700' - -dqsub060 subtract '70' '10000e+34' -> '-1.000000000000000000000000000000000E+38' Inexact Rounded -dqsub061 subtract '700' '10000e+34' -> '-1.000000000000000000000000000000000E+38' Inexact Rounded -dqsub062 subtract '7000' '10000e+34' -> '-9.999999999999999999999999999999999E+37' Inexact Rounded -dqsub063 subtract '70000' '10000e+34' -> '-9.999999999999999999999999999999993E+37' Rounded -dqsub064 subtract '700000' '10000e+34' -> '-9.999999999999999999999999999999930E+37' Rounded - -- symmetry: -dqsub065 subtract '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqsub066 subtract '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded -dqsub067 subtract '10000e+34' '7000' -> '9.999999999999999999999999999999999E+37' Inexact Rounded -dqsub068 subtract '10000e+34' '70000' -> '9.999999999999999999999999999999993E+37' Rounded -dqsub069 subtract '10000e+34' '700000' -> '9.999999999999999999999999999999930E+37' Rounded - - -- some of the next group are really constructor tests -dqsub090 subtract '00.0' '0.0' -> '0.0' -dqsub091 subtract '00.0' '0.00' -> '0.00' -dqsub092 subtract '0.00' '00.0' -> '0.00' -dqsub093 subtract '00.0' '0.00' -> '0.00' -dqsub094 subtract '0.00' '00.0' -> '0.00' -dqsub095 subtract '3' '.3' -> '2.7' -dqsub096 subtract '3.' '.3' -> '2.7' -dqsub097 subtract '3.0' '.3' -> '2.7' -dqsub098 subtract '3.00' '.3' -> '2.70' -dqsub099 subtract '3' '3' -> '0' -dqsub100 subtract '3' '+3' -> '0' -dqsub101 subtract '3' '-3' -> '6' -dqsub102 subtract '3' '0.3' -> '2.7' -dqsub103 subtract '3.' '0.3' -> '2.7' -dqsub104 subtract '3.0' '0.3' -> '2.7' -dqsub105 subtract '3.00' '0.3' -> '2.70' -dqsub106 subtract '3' '3.0' -> '0.0' -dqsub107 subtract '3' '+3.0' -> '0.0' -dqsub108 subtract '3' '-3.0' -> '6.0' - --- the above all from add; massaged and extended. Now some new ones... --- [particularly important for comparisons] --- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7 --- with input rounding. -dqsub120 subtract '10.23456784' '10.23456789' -> '-5E-8' -dqsub121 subtract '10.23456785' '10.23456789' -> '-4E-8' -dqsub122 subtract '10.23456786' '10.23456789' -> '-3E-8' -dqsub123 subtract '10.23456787' '10.23456789' -> '-2E-8' -dqsub124 subtract '10.23456788' '10.23456789' -> '-1E-8' -dqsub125 subtract '10.23456789' '10.23456789' -> '0E-8' -dqsub126 subtract '10.23456790' '10.23456789' -> '1E-8' -dqsub127 subtract '10.23456791' '10.23456789' -> '2E-8' -dqsub128 subtract '10.23456792' '10.23456789' -> '3E-8' -dqsub129 subtract '10.23456793' '10.23456789' -> '4E-8' -dqsub130 subtract '10.23456794' '10.23456789' -> '5E-8' -dqsub131 subtract '10.23456781' '10.23456786' -> '-5E-8' -dqsub132 subtract '10.23456782' '10.23456786' -> '-4E-8' -dqsub133 subtract '10.23456783' '10.23456786' -> '-3E-8' -dqsub134 subtract '10.23456784' '10.23456786' -> '-2E-8' -dqsub135 subtract '10.23456785' '10.23456786' -> '-1E-8' -dqsub136 subtract '10.23456786' '10.23456786' -> '0E-8' -dqsub137 subtract '10.23456787' '10.23456786' -> '1E-8' -dqsub138 subtract '10.23456788' '10.23456786' -> '2E-8' -dqsub139 subtract '10.23456789' '10.23456786' -> '3E-8' -dqsub140 subtract '10.23456790' '10.23456786' -> '4E-8' -dqsub141 subtract '10.23456791' '10.23456786' -> '5E-8' -dqsub142 subtract '1' '0.999999999' -> '1E-9' -dqsub143 subtract '0.999999999' '1' -> '-1E-9' -dqsub144 subtract '-10.23456780' '-10.23456786' -> '6E-8' -dqsub145 subtract '-10.23456790' '-10.23456786' -> '-4E-8' -dqsub146 subtract '-10.23456791' '-10.23456786' -> '-5E-8' - --- additional scaled arithmetic tests [0.97 problem] -dqsub160 subtract '0' '.1' -> '-0.1' -dqsub161 subtract '00' '.97983' -> '-0.97983' -dqsub162 subtract '0' '.9' -> '-0.9' -dqsub163 subtract '0' '0.102' -> '-0.102' -dqsub164 subtract '0' '.4' -> '-0.4' -dqsub165 subtract '0' '.307' -> '-0.307' -dqsub166 subtract '0' '.43822' -> '-0.43822' -dqsub167 subtract '0' '.911' -> '-0.911' -dqsub168 subtract '.0' '.02' -> '-0.02' -dqsub169 subtract '00' '.392' -> '-0.392' -dqsub170 subtract '0' '.26' -> '-0.26' -dqsub171 subtract '0' '0.51' -> '-0.51' -dqsub172 subtract '0' '.2234' -> '-0.2234' -dqsub173 subtract '0' '.2' -> '-0.2' -dqsub174 subtract '.0' '.0008' -> '-0.0008' --- 0. on left -dqsub180 subtract '0.0' '-.1' -> '0.1' -dqsub181 subtract '0.00' '-.97983' -> '0.97983' -dqsub182 subtract '0.0' '-.9' -> '0.9' -dqsub183 subtract '0.0' '-0.102' -> '0.102' -dqsub184 subtract '0.0' '-.4' -> '0.4' -dqsub185 subtract '0.0' '-.307' -> '0.307' -dqsub186 subtract '0.0' '-.43822' -> '0.43822' -dqsub187 subtract '0.0' '-.911' -> '0.911' -dqsub188 subtract '0.0' '-.02' -> '0.02' -dqsub189 subtract '0.00' '-.392' -> '0.392' -dqsub190 subtract '0.0' '-.26' -> '0.26' -dqsub191 subtract '0.0' '-0.51' -> '0.51' -dqsub192 subtract '0.0' '-.2234' -> '0.2234' -dqsub193 subtract '0.0' '-.2' -> '0.2' -dqsub194 subtract '0.0' '-.0008' -> '0.0008' --- negatives of same -dqsub200 subtract '0' '-.1' -> '0.1' -dqsub201 subtract '00' '-.97983' -> '0.97983' -dqsub202 subtract '0' '-.9' -> '0.9' -dqsub203 subtract '0' '-0.102' -> '0.102' -dqsub204 subtract '0' '-.4' -> '0.4' -dqsub205 subtract '0' '-.307' -> '0.307' -dqsub206 subtract '0' '-.43822' -> '0.43822' -dqsub207 subtract '0' '-.911' -> '0.911' -dqsub208 subtract '.0' '-.02' -> '0.02' -dqsub209 subtract '00' '-.392' -> '0.392' -dqsub210 subtract '0' '-.26' -> '0.26' -dqsub211 subtract '0' '-0.51' -> '0.51' -dqsub212 subtract '0' '-.2234' -> '0.2234' -dqsub213 subtract '0' '-.2' -> '0.2' -dqsub214 subtract '.0' '-.0008' -> '0.0008' - --- more fixed, LHS swaps [really the same as testcases under add] -dqsub220 subtract '-56267E-12' 0 -> '-5.6267E-8' -dqsub221 subtract '-56267E-11' 0 -> '-5.6267E-7' -dqsub222 subtract '-56267E-10' 0 -> '-0.0000056267' -dqsub223 subtract '-56267E-9' 0 -> '-0.000056267' -dqsub224 subtract '-56267E-8' 0 -> '-0.00056267' -dqsub225 subtract '-56267E-7' 0 -> '-0.0056267' -dqsub226 subtract '-56267E-6' 0 -> '-0.056267' -dqsub227 subtract '-56267E-5' 0 -> '-0.56267' -dqsub228 subtract '-56267E-2' 0 -> '-562.67' -dqsub229 subtract '-56267E-1' 0 -> '-5626.7' -dqsub230 subtract '-56267E-0' 0 -> '-56267' --- symmetry ... -dqsub240 subtract 0 '-56267E-12' -> '5.6267E-8' -dqsub241 subtract 0 '-56267E-11' -> '5.6267E-7' -dqsub242 subtract 0 '-56267E-10' -> '0.0000056267' -dqsub243 subtract 0 '-56267E-9' -> '0.000056267' -dqsub244 subtract 0 '-56267E-8' -> '0.00056267' -dqsub245 subtract 0 '-56267E-7' -> '0.0056267' -dqsub246 subtract 0 '-56267E-6' -> '0.056267' -dqsub247 subtract 0 '-56267E-5' -> '0.56267' -dqsub248 subtract 0 '-56267E-2' -> '562.67' -dqsub249 subtract 0 '-56267E-1' -> '5626.7' -dqsub250 subtract 0 '-56267E-0' -> '56267' - --- now some more from the 'new' add -dqsub301 subtract '1.23456789' '1.00000000' -> '0.23456789' -dqsub302 subtract '1.23456789' '1.00000011' -> '0.23456778' - --- some carrying effects -dqsub321 subtract '0.9998' '0.0000' -> '0.9998' -dqsub322 subtract '0.9998' '0.0001' -> '0.9997' -dqsub323 subtract '0.9998' '0.0002' -> '0.9996' -dqsub324 subtract '0.9998' '0.0003' -> '0.9995' -dqsub325 subtract '0.9998' '-0.0000' -> '0.9998' -dqsub326 subtract '0.9998' '-0.0001' -> '0.9999' -dqsub327 subtract '0.9998' '-0.0002' -> '1.0000' -dqsub328 subtract '0.9998' '-0.0003' -> '1.0001' - --- internal boundaries -dqsub346 subtract '10000e+9' '7' -> '9999999999993' -dqsub347 subtract '10000e+9' '70' -> '9999999999930' -dqsub348 subtract '10000e+9' '700' -> '9999999999300' -dqsub349 subtract '10000e+9' '7000' -> '9999999993000' -dqsub350 subtract '10000e+9' '70000' -> '9999999930000' -dqsub351 subtract '10000e+9' '700000' -> '9999999300000' -dqsub352 subtract '7' '10000e+9' -> '-9999999999993' -dqsub353 subtract '70' '10000e+9' -> '-9999999999930' -dqsub354 subtract '700' '10000e+9' -> '-9999999999300' -dqsub355 subtract '7000' '10000e+9' -> '-9999999993000' -dqsub356 subtract '70000' '10000e+9' -> '-9999999930000' -dqsub357 subtract '700000' '10000e+9' -> '-9999999300000' - --- zero preservation -dqsub361 subtract 1 '0.0001' -> '0.9999' -dqsub362 subtract 1 '0.00001' -> '0.99999' -dqsub363 subtract 1 '0.000001' -> '0.999999' -dqsub364 subtract 1 '0.0000000000000000000000000000000001' -> '0.9999999999999999999999999999999999' -dqsub365 subtract 1 '0.00000000000000000000000000000000001' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub366 subtract 1 '0.000000000000000000000000000000000001' -> '1.000000000000000000000000000000000' Inexact Rounded - --- some funny zeros [in case of bad signum] -dqsub370 subtract 1 0 -> 1 -dqsub371 subtract 1 0. -> 1 -dqsub372 subtract 1 .0 -> 1.0 -dqsub373 subtract 1 0.0 -> 1.0 -dqsub374 subtract 0 1 -> -1 -dqsub375 subtract 0. 1 -> -1 -dqsub376 subtract .0 1 -> -1.0 -dqsub377 subtract 0.0 1 -> -1.0 - --- leading 0 digit before round -dqsub910 subtract -103519362 -51897955.3 -> -51621406.7 -dqsub911 subtract 159579.444 89827.5229 -> 69751.9211 - -dqsub920 subtract 333.0000000000000000000000000123456 33.00000000000000000000000001234566 -> 299.9999999999999999999999999999999 Inexact Rounded -dqsub921 subtract 333.0000000000000000000000000123456 33.00000000000000000000000001234565 -> 300.0000000000000000000000000000000 Inexact Rounded -dqsub922 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234565 -> 99.99999999999999999999999999999995 -dqsub923 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234564 -> 99.99999999999999999999999999999996 -dqsub924 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234540 -> 100.0000000000000000000000000000002 Rounded -dqsub925 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234560 -> 90.00000000000000000000000000000000 -dqsub926 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234561 -> 89.99999999999999999999999999999999 -dqsub927 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234566 -> 89.99999999999999999999999999999994 -dqsub928 subtract 101.0000000000000000000000000123456 91.00000000000000000000000001234566 -> 9.99999999999999999999999999999994 -dqsub929 subtract 101.0000000000000000000000000123456 99.00000000000000000000000001234566 -> 1.99999999999999999999999999999994 - --- more LHS swaps [were fixed] -dqsub390 subtract '-56267E-10' 0 -> '-0.0000056267' -dqsub391 subtract '-56267E-6' 0 -> '-0.056267' -dqsub392 subtract '-56267E-5' 0 -> '-0.56267' -dqsub393 subtract '-56267E-4' 0 -> '-5.6267' -dqsub394 subtract '-56267E-3' 0 -> '-56.267' -dqsub395 subtract '-56267E-2' 0 -> '-562.67' -dqsub396 subtract '-56267E-1' 0 -> '-5626.7' -dqsub397 subtract '-56267E-0' 0 -> '-56267' -dqsub398 subtract '-5E-10' 0 -> '-5E-10' -dqsub399 subtract '-5E-7' 0 -> '-5E-7' -dqsub400 subtract '-5E-6' 0 -> '-0.000005' -dqsub401 subtract '-5E-5' 0 -> '-0.00005' -dqsub402 subtract '-5E-4' 0 -> '-0.0005' -dqsub403 subtract '-5E-1' 0 -> '-0.5' -dqsub404 subtract '-5E0' 0 -> '-5' -dqsub405 subtract '-5E1' 0 -> '-50' -dqsub406 subtract '-5E5' 0 -> '-500000' -dqsub407 subtract '-5E33' 0 -> '-5000000000000000000000000000000000' -dqsub408 subtract '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded -dqsub409 subtract '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded -dqsub410 subtract '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded -dqsub411 subtract '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded - --- more RHS swaps [were fixed] -dqsub420 subtract 0 '-56267E-10' -> '0.0000056267' -dqsub421 subtract 0 '-56267E-6' -> '0.056267' -dqsub422 subtract 0 '-56267E-5' -> '0.56267' -dqsub423 subtract 0 '-56267E-4' -> '5.6267' -dqsub424 subtract 0 '-56267E-3' -> '56.267' -dqsub425 subtract 0 '-56267E-2' -> '562.67' -dqsub426 subtract 0 '-56267E-1' -> '5626.7' -dqsub427 subtract 0 '-56267E-0' -> '56267' -dqsub428 subtract 0 '-5E-10' -> '5E-10' -dqsub429 subtract 0 '-5E-7' -> '5E-7' -dqsub430 subtract 0 '-5E-6' -> '0.000005' -dqsub431 subtract 0 '-5E-5' -> '0.00005' -dqsub432 subtract 0 '-5E-4' -> '0.0005' -dqsub433 subtract 0 '-5E-1' -> '0.5' -dqsub434 subtract 0 '-5E0' -> '5' -dqsub435 subtract 0 '-5E1' -> '50' -dqsub436 subtract 0 '-5E5' -> '500000' -dqsub437 subtract 0 '-5E33' -> '5000000000000000000000000000000000' -dqsub438 subtract 0 '-5E34' -> '5.000000000000000000000000000000000E+34' Rounded -dqsub439 subtract 0 '-5E35' -> '5.000000000000000000000000000000000E+35' Rounded -dqsub440 subtract 0 '-5E36' -> '5.000000000000000000000000000000000E+36' Rounded -dqsub441 subtract 0 '-5E100' -> '5.000000000000000000000000000000000E+100' Rounded - - --- try borderline precision, with carries, etc. -dqsub461 subtract '1E+16' '1' -> '9999999999999999' -dqsub462 subtract '1E+12' '-1.111' -> '1000000000001.111' -dqsub463 subtract '1.111' '-1E+12' -> '1000000000001.111' -dqsub464 subtract '-1' '-1E+16' -> '9999999999999999' -dqsub465 subtract '7E+15' '1' -> '6999999999999999' -dqsub466 subtract '7E+12' '-1.111' -> '7000000000001.111' -dqsub467 subtract '1.111' '-7E+12' -> '7000000000001.111' -dqsub468 subtract '-1' '-7E+15' -> '6999999999999999' - --- 1234567890123456 1234567890123456 1 23456789012345 -dqsub470 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555563' -> '1.000000000000000000000000000000001' Inexact Rounded -dqsub471 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555562' -> '1.000000000000000000000000000000001' Inexact Rounded -dqsub472 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555561' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub473 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555560' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub474 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555559' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub475 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555558' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub476 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555557' -> '1.000000000000000000000000000000000' Inexact Rounded -dqsub477 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555556' -> '1.000000000000000000000000000000000' Rounded -dqsub478 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' -dqsub479 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555554' -> '0.9999999999999999999999999999999998' -dqsub480 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555553' -> '0.9999999999999999999999999999999997' -dqsub481 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555552' -> '0.9999999999999999999999999999999996' -dqsub482 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555551' -> '0.9999999999999999999999999999999995' -dqsub483 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555550' -> '0.9999999999999999999999999999999994' - --- and some more, including residue effects and different roundings -rounding: half_up -dqsub500 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' -dqsub501 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub502 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub503 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub504 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub505 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub506 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub507 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub508 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub509 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub510 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub511 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub512 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub513 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub514 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub515 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub516 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' -dqsub517 subtract '1231234555555555555555555567456789' 1.000000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub518 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub519 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456788' Inexact Rounded - -rounding: half_even -dqsub520 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' -dqsub521 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub522 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub523 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub524 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub525 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub526 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub527 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456789' Inexact Rounded -dqsub528 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub529 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub530 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub531 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub532 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub533 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub534 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub535 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub536 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' -dqsub537 subtract '1231234555555555555555555567456789' 1.00000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub538 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub539 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456788' Inexact Rounded --- critical few with even bottom digit... -dqsub540 subtract '1231234555555555555555555567456788' 0.499999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub541 subtract '1231234555555555555555555567456788' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub542 subtract '1231234555555555555555555567456788' 0.500000001 -> '1231234555555555555555555567456787' Inexact Rounded - -rounding: down -dqsub550 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' -dqsub551 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub552 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub553 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub554 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub555 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub556 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub557 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub558 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub559 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub560 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub561 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub562 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub563 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub564 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub565 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded -dqsub566 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' -dqsub567 subtract '1231234555555555555555555567456789' 1.00000001 -> '1231234555555555555555555567456787' Inexact Rounded -dqsub568 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456787' Inexact Rounded -dqsub569 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456787' Inexact Rounded - --- symmetry... -rounding: half_up -dqsub600 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' -dqsub601 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub602 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub603 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub604 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub605 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub606 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub607 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub608 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub609 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub610 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub611 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub612 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub613 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub614 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub615 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub616 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' -dqsub617 subtract 1.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub618 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub619 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded - -rounding: half_even -dqsub620 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' -dqsub621 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub622 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub623 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub624 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub625 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub626 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub627 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded -dqsub628 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub629 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub630 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub631 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub632 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub633 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub634 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub635 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub636 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' -dqsub637 subtract 1.00000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub638 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub639 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded --- critical few with even bottom digit... -dqsub640 subtract 0.499999999 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub641 subtract 0.5 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub642 subtract 0.500000001 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456787' Inexact Rounded - -rounding: down -dqsub650 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' -dqsub651 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub652 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub653 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub654 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub655 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub656 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub657 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub658 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub659 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub660 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub661 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub662 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub663 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub664 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub665 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded -dqsub666 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' -dqsub667 subtract 1.00000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded -dqsub668 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded -dqsub669 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded - - --- lots of leading zeros in intermediate result, and showing effects of --- input rounding would have affected the following -rounding: half_up -dqsub670 subtract '1234567456789' '1234567456788.1' -> 0.9 -dqsub671 subtract '1234567456789' '1234567456788.9' -> 0.1 -dqsub672 subtract '1234567456789' '1234567456789.1' -> -0.1 -dqsub673 subtract '1234567456789' '1234567456789.5' -> -0.5 -dqsub674 subtract '1234567456789' '1234567456789.9' -> -0.9 - -rounding: half_even -dqsub680 subtract '1234567456789' '1234567456788.1' -> 0.9 -dqsub681 subtract '1234567456789' '1234567456788.9' -> 0.1 -dqsub682 subtract '1234567456789' '1234567456789.1' -> -0.1 -dqsub683 subtract '1234567456789' '1234567456789.5' -> -0.5 -dqsub684 subtract '1234567456789' '1234567456789.9' -> -0.9 - -dqsub685 subtract '1234567456788' '1234567456787.1' -> 0.9 -dqsub686 subtract '1234567456788' '1234567456787.9' -> 0.1 -dqsub687 subtract '1234567456788' '1234567456788.1' -> -0.1 -dqsub688 subtract '1234567456788' '1234567456788.5' -> -0.5 -dqsub689 subtract '1234567456788' '1234567456788.9' -> -0.9 - -rounding: down -dqsub690 subtract '1234567456789' '1234567456788.1' -> 0.9 -dqsub691 subtract '1234567456789' '1234567456788.9' -> 0.1 -dqsub692 subtract '1234567456789' '1234567456789.1' -> -0.1 -dqsub693 subtract '1234567456789' '1234567456789.5' -> -0.5 -dqsub694 subtract '1234567456789' '1234567456789.9' -> -0.9 - --- Specials -dqsub780 subtract -Inf Inf -> -Infinity -dqsub781 subtract -Inf 1000 -> -Infinity -dqsub782 subtract -Inf 1 -> -Infinity -dqsub783 subtract -Inf -0 -> -Infinity -dqsub784 subtract -Inf -1 -> -Infinity -dqsub785 subtract -Inf -1000 -> -Infinity -dqsub787 subtract -1000 Inf -> -Infinity -dqsub788 subtract -Inf Inf -> -Infinity -dqsub789 subtract -1 Inf -> -Infinity -dqsub790 subtract 0 Inf -> -Infinity -dqsub791 subtract 1 Inf -> -Infinity -dqsub792 subtract 1000 Inf -> -Infinity - -dqsub800 subtract Inf Inf -> NaN Invalid_operation -dqsub801 subtract Inf 1000 -> Infinity -dqsub802 subtract Inf 1 -> Infinity -dqsub803 subtract Inf 0 -> Infinity -dqsub804 subtract Inf -0 -> Infinity -dqsub805 subtract Inf -1 -> Infinity -dqsub806 subtract Inf -1000 -> Infinity -dqsub807 subtract Inf -Inf -> Infinity -dqsub808 subtract -1000 -Inf -> Infinity -dqsub809 subtract -Inf -Inf -> NaN Invalid_operation -dqsub810 subtract -1 -Inf -> Infinity -dqsub811 subtract -0 -Inf -> Infinity -dqsub812 subtract 0 -Inf -> Infinity -dqsub813 subtract 1 -Inf -> Infinity -dqsub814 subtract 1000 -Inf -> Infinity -dqsub815 subtract Inf -Inf -> Infinity - -dqsub821 subtract NaN Inf -> NaN -dqsub822 subtract -NaN 1000 -> -NaN -dqsub823 subtract NaN 1 -> NaN -dqsub824 subtract NaN 0 -> NaN -dqsub825 subtract NaN -0 -> NaN -dqsub826 subtract NaN -1 -> NaN -dqsub827 subtract NaN -1000 -> NaN -dqsub828 subtract NaN -Inf -> NaN -dqsub829 subtract -NaN NaN -> -NaN -dqsub830 subtract -Inf NaN -> NaN -dqsub831 subtract -1000 NaN -> NaN -dqsub832 subtract -1 NaN -> NaN -dqsub833 subtract -0 NaN -> NaN -dqsub834 subtract 0 NaN -> NaN -dqsub835 subtract 1 NaN -> NaN -dqsub836 subtract 1000 -NaN -> -NaN -dqsub837 subtract Inf NaN -> NaN - -dqsub841 subtract sNaN Inf -> NaN Invalid_operation -dqsub842 subtract -sNaN 1000 -> -NaN Invalid_operation -dqsub843 subtract sNaN 1 -> NaN Invalid_operation -dqsub844 subtract sNaN 0 -> NaN Invalid_operation -dqsub845 subtract sNaN -0 -> NaN Invalid_operation -dqsub846 subtract sNaN -1 -> NaN Invalid_operation -dqsub847 subtract sNaN -1000 -> NaN Invalid_operation -dqsub848 subtract sNaN NaN -> NaN Invalid_operation -dqsub849 subtract sNaN sNaN -> NaN Invalid_operation -dqsub850 subtract NaN sNaN -> NaN Invalid_operation -dqsub851 subtract -Inf -sNaN -> -NaN Invalid_operation -dqsub852 subtract -1000 sNaN -> NaN Invalid_operation -dqsub853 subtract -1 sNaN -> NaN Invalid_operation -dqsub854 subtract -0 sNaN -> NaN Invalid_operation -dqsub855 subtract 0 sNaN -> NaN Invalid_operation -dqsub856 subtract 1 sNaN -> NaN Invalid_operation -dqsub857 subtract 1000 sNaN -> NaN Invalid_operation -dqsub858 subtract Inf sNaN -> NaN Invalid_operation -dqsub859 subtract NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqsub861 subtract NaN01 -Inf -> NaN1 -dqsub862 subtract -NaN02 -1000 -> -NaN2 -dqsub863 subtract NaN03 1000 -> NaN3 -dqsub864 subtract NaN04 Inf -> NaN4 -dqsub865 subtract NaN05 NaN61 -> NaN5 -dqsub866 subtract -Inf -NaN71 -> -NaN71 -dqsub867 subtract -1000 NaN81 -> NaN81 -dqsub868 subtract 1000 NaN91 -> NaN91 -dqsub869 subtract Inf NaN101 -> NaN101 -dqsub871 subtract sNaN011 -Inf -> NaN11 Invalid_operation -dqsub872 subtract sNaN012 -1000 -> NaN12 Invalid_operation -dqsub873 subtract -sNaN013 1000 -> -NaN13 Invalid_operation -dqsub874 subtract sNaN014 NaN171 -> NaN14 Invalid_operation -dqsub875 subtract sNaN015 sNaN181 -> NaN15 Invalid_operation -dqsub876 subtract NaN016 sNaN191 -> NaN191 Invalid_operation -dqsub877 subtract -Inf sNaN201 -> NaN201 Invalid_operation -dqsub878 subtract -1000 sNaN211 -> NaN211 Invalid_operation -dqsub879 subtract 1000 -sNaN221 -> -NaN221 Invalid_operation -dqsub880 subtract Inf sNaN231 -> NaN231 Invalid_operation -dqsub881 subtract NaN025 sNaN241 -> NaN241 Invalid_operation - --- edge case spills -dqsub901 subtract 2.E-3 1.002 -> -1.000 -dqsub902 subtract 2.0E-3 1.002 -> -1.0000 -dqsub903 subtract 2.00E-3 1.0020 -> -1.00000 -dqsub904 subtract 2.000E-3 1.00200 -> -1.000000 -dqsub905 subtract 2.0000E-3 1.002000 -> -1.0000000 -dqsub906 subtract 2.00000E-3 1.0020000 -> -1.00000000 -dqsub907 subtract 2.000000E-3 1.00200000 -> -1.000000000 -dqsub908 subtract 2.0000000E-3 1.002000000 -> -1.0000000000 - --- subnormals and overflows covered under Add - --- Examples from SQL proposal (Krishna Kulkarni) -dqsub1125 subtract 130E-2 120E-2 -> 0.10 -dqsub1126 subtract 130E-2 12E-1 -> 0.10 -dqsub1127 subtract 130E-2 1E0 -> 0.30 -dqsub1128 subtract 1E2 1E4 -> -9.9E+3 - --- Null tests -dqsub9990 subtract 10 # -> NaN Invalid_operation -dqsub9991 subtract # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqSubtract.decTest -- decQuad subtraction -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests are for decQuads only; all arguments are +-- representable in a decQuad +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- [first group are 'quick confidence check'] +dqsub001 subtract 0 0 -> '0' +dqsub002 subtract 1 1 -> '0' +dqsub003 subtract 1 2 -> '-1' +dqsub004 subtract 2 1 -> '1' +dqsub005 subtract 2 2 -> '0' +dqsub006 subtract 3 2 -> '1' +dqsub007 subtract 2 3 -> '-1' + +dqsub011 subtract -0 0 -> '-0' +dqsub012 subtract -1 1 -> '-2' +dqsub013 subtract -1 2 -> '-3' +dqsub014 subtract -2 1 -> '-3' +dqsub015 subtract -2 2 -> '-4' +dqsub016 subtract -3 2 -> '-5' +dqsub017 subtract -2 3 -> '-5' + +dqsub021 subtract 0 -0 -> '0' +dqsub022 subtract 1 -1 -> '2' +dqsub023 subtract 1 -2 -> '3' +dqsub024 subtract 2 -1 -> '3' +dqsub025 subtract 2 -2 -> '4' +dqsub026 subtract 3 -2 -> '5' +dqsub027 subtract 2 -3 -> '5' + +dqsub030 subtract 11 1 -> 10 +dqsub031 subtract 10 1 -> 9 +dqsub032 subtract 9 1 -> 8 +dqsub033 subtract 1 1 -> 0 +dqsub034 subtract 0 1 -> -1 +dqsub035 subtract -1 1 -> -2 +dqsub036 subtract -9 1 -> -10 +dqsub037 subtract -10 1 -> -11 +dqsub038 subtract -11 1 -> -12 + +dqsub040 subtract '5.75' '3.3' -> '2.45' +dqsub041 subtract '5' '-3' -> '8' +dqsub042 subtract '-5' '-3' -> '-2' +dqsub043 subtract '-7' '2.5' -> '-9.5' +dqsub044 subtract '0.7' '0.3' -> '0.4' +dqsub045 subtract '1.3' '0.3' -> '1.0' +dqsub046 subtract '1.25' '1.25' -> '0.00' + +dqsub050 subtract '1.23456789' '1.00000000' -> '0.23456789' +dqsub051 subtract '1.23456789' '1.00000089' -> '0.23456700' + +dqsub060 subtract '70' '10000e+34' -> '-1.000000000000000000000000000000000E+38' Inexact Rounded +dqsub061 subtract '700' '10000e+34' -> '-1.000000000000000000000000000000000E+38' Inexact Rounded +dqsub062 subtract '7000' '10000e+34' -> '-9.999999999999999999999999999999999E+37' Inexact Rounded +dqsub063 subtract '70000' '10000e+34' -> '-9.999999999999999999999999999999993E+37' Rounded +dqsub064 subtract '700000' '10000e+34' -> '-9.999999999999999999999999999999930E+37' Rounded + -- symmetry: +dqsub065 subtract '10000e+34' '70' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqsub066 subtract '10000e+34' '700' -> '1.000000000000000000000000000000000E+38' Inexact Rounded +dqsub067 subtract '10000e+34' '7000' -> '9.999999999999999999999999999999999E+37' Inexact Rounded +dqsub068 subtract '10000e+34' '70000' -> '9.999999999999999999999999999999993E+37' Rounded +dqsub069 subtract '10000e+34' '700000' -> '9.999999999999999999999999999999930E+37' Rounded + + -- some of the next group are really constructor tests +dqsub090 subtract '00.0' '0.0' -> '0.0' +dqsub091 subtract '00.0' '0.00' -> '0.00' +dqsub092 subtract '0.00' '00.0' -> '0.00' +dqsub093 subtract '00.0' '0.00' -> '0.00' +dqsub094 subtract '0.00' '00.0' -> '0.00' +dqsub095 subtract '3' '.3' -> '2.7' +dqsub096 subtract '3.' '.3' -> '2.7' +dqsub097 subtract '3.0' '.3' -> '2.7' +dqsub098 subtract '3.00' '.3' -> '2.70' +dqsub099 subtract '3' '3' -> '0' +dqsub100 subtract '3' '+3' -> '0' +dqsub101 subtract '3' '-3' -> '6' +dqsub102 subtract '3' '0.3' -> '2.7' +dqsub103 subtract '3.' '0.3' -> '2.7' +dqsub104 subtract '3.0' '0.3' -> '2.7' +dqsub105 subtract '3.00' '0.3' -> '2.70' +dqsub106 subtract '3' '3.0' -> '0.0' +dqsub107 subtract '3' '+3.0' -> '0.0' +dqsub108 subtract '3' '-3.0' -> '6.0' + +-- the above all from add; massaged and extended. Now some new ones... +-- [particularly important for comparisons] +-- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7 +-- with input rounding. +dqsub120 subtract '10.23456784' '10.23456789' -> '-5E-8' +dqsub121 subtract '10.23456785' '10.23456789' -> '-4E-8' +dqsub122 subtract '10.23456786' '10.23456789' -> '-3E-8' +dqsub123 subtract '10.23456787' '10.23456789' -> '-2E-8' +dqsub124 subtract '10.23456788' '10.23456789' -> '-1E-8' +dqsub125 subtract '10.23456789' '10.23456789' -> '0E-8' +dqsub126 subtract '10.23456790' '10.23456789' -> '1E-8' +dqsub127 subtract '10.23456791' '10.23456789' -> '2E-8' +dqsub128 subtract '10.23456792' '10.23456789' -> '3E-8' +dqsub129 subtract '10.23456793' '10.23456789' -> '4E-8' +dqsub130 subtract '10.23456794' '10.23456789' -> '5E-8' +dqsub131 subtract '10.23456781' '10.23456786' -> '-5E-8' +dqsub132 subtract '10.23456782' '10.23456786' -> '-4E-8' +dqsub133 subtract '10.23456783' '10.23456786' -> '-3E-8' +dqsub134 subtract '10.23456784' '10.23456786' -> '-2E-8' +dqsub135 subtract '10.23456785' '10.23456786' -> '-1E-8' +dqsub136 subtract '10.23456786' '10.23456786' -> '0E-8' +dqsub137 subtract '10.23456787' '10.23456786' -> '1E-8' +dqsub138 subtract '10.23456788' '10.23456786' -> '2E-8' +dqsub139 subtract '10.23456789' '10.23456786' -> '3E-8' +dqsub140 subtract '10.23456790' '10.23456786' -> '4E-8' +dqsub141 subtract '10.23456791' '10.23456786' -> '5E-8' +dqsub142 subtract '1' '0.999999999' -> '1E-9' +dqsub143 subtract '0.999999999' '1' -> '-1E-9' +dqsub144 subtract '-10.23456780' '-10.23456786' -> '6E-8' +dqsub145 subtract '-10.23456790' '-10.23456786' -> '-4E-8' +dqsub146 subtract '-10.23456791' '-10.23456786' -> '-5E-8' + +-- additional scaled arithmetic tests [0.97 problem] +dqsub160 subtract '0' '.1' -> '-0.1' +dqsub161 subtract '00' '.97983' -> '-0.97983' +dqsub162 subtract '0' '.9' -> '-0.9' +dqsub163 subtract '0' '0.102' -> '-0.102' +dqsub164 subtract '0' '.4' -> '-0.4' +dqsub165 subtract '0' '.307' -> '-0.307' +dqsub166 subtract '0' '.43822' -> '-0.43822' +dqsub167 subtract '0' '.911' -> '-0.911' +dqsub168 subtract '.0' '.02' -> '-0.02' +dqsub169 subtract '00' '.392' -> '-0.392' +dqsub170 subtract '0' '.26' -> '-0.26' +dqsub171 subtract '0' '0.51' -> '-0.51' +dqsub172 subtract '0' '.2234' -> '-0.2234' +dqsub173 subtract '0' '.2' -> '-0.2' +dqsub174 subtract '.0' '.0008' -> '-0.0008' +-- 0. on left +dqsub180 subtract '0.0' '-.1' -> '0.1' +dqsub181 subtract '0.00' '-.97983' -> '0.97983' +dqsub182 subtract '0.0' '-.9' -> '0.9' +dqsub183 subtract '0.0' '-0.102' -> '0.102' +dqsub184 subtract '0.0' '-.4' -> '0.4' +dqsub185 subtract '0.0' '-.307' -> '0.307' +dqsub186 subtract '0.0' '-.43822' -> '0.43822' +dqsub187 subtract '0.0' '-.911' -> '0.911' +dqsub188 subtract '0.0' '-.02' -> '0.02' +dqsub189 subtract '0.00' '-.392' -> '0.392' +dqsub190 subtract '0.0' '-.26' -> '0.26' +dqsub191 subtract '0.0' '-0.51' -> '0.51' +dqsub192 subtract '0.0' '-.2234' -> '0.2234' +dqsub193 subtract '0.0' '-.2' -> '0.2' +dqsub194 subtract '0.0' '-.0008' -> '0.0008' +-- negatives of same +dqsub200 subtract '0' '-.1' -> '0.1' +dqsub201 subtract '00' '-.97983' -> '0.97983' +dqsub202 subtract '0' '-.9' -> '0.9' +dqsub203 subtract '0' '-0.102' -> '0.102' +dqsub204 subtract '0' '-.4' -> '0.4' +dqsub205 subtract '0' '-.307' -> '0.307' +dqsub206 subtract '0' '-.43822' -> '0.43822' +dqsub207 subtract '0' '-.911' -> '0.911' +dqsub208 subtract '.0' '-.02' -> '0.02' +dqsub209 subtract '00' '-.392' -> '0.392' +dqsub210 subtract '0' '-.26' -> '0.26' +dqsub211 subtract '0' '-0.51' -> '0.51' +dqsub212 subtract '0' '-.2234' -> '0.2234' +dqsub213 subtract '0' '-.2' -> '0.2' +dqsub214 subtract '.0' '-.0008' -> '0.0008' + +-- more fixed, LHS swaps [really the same as testcases under add] +dqsub220 subtract '-56267E-12' 0 -> '-5.6267E-8' +dqsub221 subtract '-56267E-11' 0 -> '-5.6267E-7' +dqsub222 subtract '-56267E-10' 0 -> '-0.0000056267' +dqsub223 subtract '-56267E-9' 0 -> '-0.000056267' +dqsub224 subtract '-56267E-8' 0 -> '-0.00056267' +dqsub225 subtract '-56267E-7' 0 -> '-0.0056267' +dqsub226 subtract '-56267E-6' 0 -> '-0.056267' +dqsub227 subtract '-56267E-5' 0 -> '-0.56267' +dqsub228 subtract '-56267E-2' 0 -> '-562.67' +dqsub229 subtract '-56267E-1' 0 -> '-5626.7' +dqsub230 subtract '-56267E-0' 0 -> '-56267' +-- symmetry ... +dqsub240 subtract 0 '-56267E-12' -> '5.6267E-8' +dqsub241 subtract 0 '-56267E-11' -> '5.6267E-7' +dqsub242 subtract 0 '-56267E-10' -> '0.0000056267' +dqsub243 subtract 0 '-56267E-9' -> '0.000056267' +dqsub244 subtract 0 '-56267E-8' -> '0.00056267' +dqsub245 subtract 0 '-56267E-7' -> '0.0056267' +dqsub246 subtract 0 '-56267E-6' -> '0.056267' +dqsub247 subtract 0 '-56267E-5' -> '0.56267' +dqsub248 subtract 0 '-56267E-2' -> '562.67' +dqsub249 subtract 0 '-56267E-1' -> '5626.7' +dqsub250 subtract 0 '-56267E-0' -> '56267' + +-- now some more from the 'new' add +dqsub301 subtract '1.23456789' '1.00000000' -> '0.23456789' +dqsub302 subtract '1.23456789' '1.00000011' -> '0.23456778' + +-- some carrying effects +dqsub321 subtract '0.9998' '0.0000' -> '0.9998' +dqsub322 subtract '0.9998' '0.0001' -> '0.9997' +dqsub323 subtract '0.9998' '0.0002' -> '0.9996' +dqsub324 subtract '0.9998' '0.0003' -> '0.9995' +dqsub325 subtract '0.9998' '-0.0000' -> '0.9998' +dqsub326 subtract '0.9998' '-0.0001' -> '0.9999' +dqsub327 subtract '0.9998' '-0.0002' -> '1.0000' +dqsub328 subtract '0.9998' '-0.0003' -> '1.0001' + +-- internal boundaries +dqsub346 subtract '10000e+9' '7' -> '9999999999993' +dqsub347 subtract '10000e+9' '70' -> '9999999999930' +dqsub348 subtract '10000e+9' '700' -> '9999999999300' +dqsub349 subtract '10000e+9' '7000' -> '9999999993000' +dqsub350 subtract '10000e+9' '70000' -> '9999999930000' +dqsub351 subtract '10000e+9' '700000' -> '9999999300000' +dqsub352 subtract '7' '10000e+9' -> '-9999999999993' +dqsub353 subtract '70' '10000e+9' -> '-9999999999930' +dqsub354 subtract '700' '10000e+9' -> '-9999999999300' +dqsub355 subtract '7000' '10000e+9' -> '-9999999993000' +dqsub356 subtract '70000' '10000e+9' -> '-9999999930000' +dqsub357 subtract '700000' '10000e+9' -> '-9999999300000' + +-- zero preservation +dqsub361 subtract 1 '0.0001' -> '0.9999' +dqsub362 subtract 1 '0.00001' -> '0.99999' +dqsub363 subtract 1 '0.000001' -> '0.999999' +dqsub364 subtract 1 '0.0000000000000000000000000000000001' -> '0.9999999999999999999999999999999999' +dqsub365 subtract 1 '0.00000000000000000000000000000000001' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub366 subtract 1 '0.000000000000000000000000000000000001' -> '1.000000000000000000000000000000000' Inexact Rounded + +-- some funny zeros [in case of bad signum] +dqsub370 subtract 1 0 -> 1 +dqsub371 subtract 1 0. -> 1 +dqsub372 subtract 1 .0 -> 1.0 +dqsub373 subtract 1 0.0 -> 1.0 +dqsub374 subtract 0 1 -> -1 +dqsub375 subtract 0. 1 -> -1 +dqsub376 subtract .0 1 -> -1.0 +dqsub377 subtract 0.0 1 -> -1.0 + +-- leading 0 digit before round +dqsub910 subtract -103519362 -51897955.3 -> -51621406.7 +dqsub911 subtract 159579.444 89827.5229 -> 69751.9211 + +dqsub920 subtract 333.0000000000000000000000000123456 33.00000000000000000000000001234566 -> 299.9999999999999999999999999999999 Inexact Rounded +dqsub921 subtract 333.0000000000000000000000000123456 33.00000000000000000000000001234565 -> 300.0000000000000000000000000000000 Inexact Rounded +dqsub922 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234565 -> 99.99999999999999999999999999999995 +dqsub923 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234564 -> 99.99999999999999999999999999999996 +dqsub924 subtract 133.0000000000000000000000000123456 33.00000000000000000000000001234540 -> 100.0000000000000000000000000000002 Rounded +dqsub925 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234560 -> 90.00000000000000000000000000000000 +dqsub926 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234561 -> 89.99999999999999999999999999999999 +dqsub927 subtract 133.0000000000000000000000000123456 43.00000000000000000000000001234566 -> 89.99999999999999999999999999999994 +dqsub928 subtract 101.0000000000000000000000000123456 91.00000000000000000000000001234566 -> 9.99999999999999999999999999999994 +dqsub929 subtract 101.0000000000000000000000000123456 99.00000000000000000000000001234566 -> 1.99999999999999999999999999999994 + +-- more LHS swaps [were fixed] +dqsub390 subtract '-56267E-10' 0 -> '-0.0000056267' +dqsub391 subtract '-56267E-6' 0 -> '-0.056267' +dqsub392 subtract '-56267E-5' 0 -> '-0.56267' +dqsub393 subtract '-56267E-4' 0 -> '-5.6267' +dqsub394 subtract '-56267E-3' 0 -> '-56.267' +dqsub395 subtract '-56267E-2' 0 -> '-562.67' +dqsub396 subtract '-56267E-1' 0 -> '-5626.7' +dqsub397 subtract '-56267E-0' 0 -> '-56267' +dqsub398 subtract '-5E-10' 0 -> '-5E-10' +dqsub399 subtract '-5E-7' 0 -> '-5E-7' +dqsub400 subtract '-5E-6' 0 -> '-0.000005' +dqsub401 subtract '-5E-5' 0 -> '-0.00005' +dqsub402 subtract '-5E-4' 0 -> '-0.0005' +dqsub403 subtract '-5E-1' 0 -> '-0.5' +dqsub404 subtract '-5E0' 0 -> '-5' +dqsub405 subtract '-5E1' 0 -> '-50' +dqsub406 subtract '-5E5' 0 -> '-500000' +dqsub407 subtract '-5E33' 0 -> '-5000000000000000000000000000000000' +dqsub408 subtract '-5E34' 0 -> '-5.000000000000000000000000000000000E+34' Rounded +dqsub409 subtract '-5E35' 0 -> '-5.000000000000000000000000000000000E+35' Rounded +dqsub410 subtract '-5E36' 0 -> '-5.000000000000000000000000000000000E+36' Rounded +dqsub411 subtract '-5E100' 0 -> '-5.000000000000000000000000000000000E+100' Rounded + +-- more RHS swaps [were fixed] +dqsub420 subtract 0 '-56267E-10' -> '0.0000056267' +dqsub421 subtract 0 '-56267E-6' -> '0.056267' +dqsub422 subtract 0 '-56267E-5' -> '0.56267' +dqsub423 subtract 0 '-56267E-4' -> '5.6267' +dqsub424 subtract 0 '-56267E-3' -> '56.267' +dqsub425 subtract 0 '-56267E-2' -> '562.67' +dqsub426 subtract 0 '-56267E-1' -> '5626.7' +dqsub427 subtract 0 '-56267E-0' -> '56267' +dqsub428 subtract 0 '-5E-10' -> '5E-10' +dqsub429 subtract 0 '-5E-7' -> '5E-7' +dqsub430 subtract 0 '-5E-6' -> '0.000005' +dqsub431 subtract 0 '-5E-5' -> '0.00005' +dqsub432 subtract 0 '-5E-4' -> '0.0005' +dqsub433 subtract 0 '-5E-1' -> '0.5' +dqsub434 subtract 0 '-5E0' -> '5' +dqsub435 subtract 0 '-5E1' -> '50' +dqsub436 subtract 0 '-5E5' -> '500000' +dqsub437 subtract 0 '-5E33' -> '5000000000000000000000000000000000' +dqsub438 subtract 0 '-5E34' -> '5.000000000000000000000000000000000E+34' Rounded +dqsub439 subtract 0 '-5E35' -> '5.000000000000000000000000000000000E+35' Rounded +dqsub440 subtract 0 '-5E36' -> '5.000000000000000000000000000000000E+36' Rounded +dqsub441 subtract 0 '-5E100' -> '5.000000000000000000000000000000000E+100' Rounded + + +-- try borderline precision, with carries, etc. +dqsub461 subtract '1E+16' '1' -> '9999999999999999' +dqsub462 subtract '1E+12' '-1.111' -> '1000000000001.111' +dqsub463 subtract '1.111' '-1E+12' -> '1000000000001.111' +dqsub464 subtract '-1' '-1E+16' -> '9999999999999999' +dqsub465 subtract '7E+15' '1' -> '6999999999999999' +dqsub466 subtract '7E+12' '-1.111' -> '7000000000001.111' +dqsub467 subtract '1.111' '-7E+12' -> '7000000000001.111' +dqsub468 subtract '-1' '-7E+15' -> '6999999999999999' + +-- 1234567890123456 1234567890123456 1 23456789012345 +dqsub470 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555563' -> '1.000000000000000000000000000000001' Inexact Rounded +dqsub471 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555562' -> '1.000000000000000000000000000000001' Inexact Rounded +dqsub472 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555561' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub473 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555560' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub474 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555559' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub475 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555558' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub476 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555557' -> '1.000000000000000000000000000000000' Inexact Rounded +dqsub477 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555556' -> '1.000000000000000000000000000000000' Rounded +dqsub478 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555555' -> '0.9999999999999999999999999999999999' +dqsub479 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555554' -> '0.9999999999999999999999999999999998' +dqsub480 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555553' -> '0.9999999999999999999999999999999997' +dqsub481 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555552' -> '0.9999999999999999999999999999999996' +dqsub482 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555551' -> '0.9999999999999999999999999999999995' +dqsub483 subtract '0.4444444444444444444444444444444444' '-0.5555555555555555555555555555555550' -> '0.9999999999999999999999999999999994' + +-- and some more, including residue effects and different roundings +rounding: half_up +dqsub500 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' +dqsub501 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub502 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub503 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub504 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub505 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub506 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub507 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub508 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub509 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub510 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub511 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub512 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub513 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub514 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub515 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub516 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' +dqsub517 subtract '1231234555555555555555555567456789' 1.000000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub518 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub519 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456788' Inexact Rounded + +rounding: half_even +dqsub520 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' +dqsub521 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub522 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub523 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub524 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub525 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub526 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub527 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456789' Inexact Rounded +dqsub528 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub529 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub530 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub531 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub532 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub533 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub534 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub535 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub536 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' +dqsub537 subtract '1231234555555555555555555567456789' 1.00000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub538 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub539 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456788' Inexact Rounded +-- critical few with even bottom digit... +dqsub540 subtract '1231234555555555555555555567456788' 0.499999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub541 subtract '1231234555555555555555555567456788' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub542 subtract '1231234555555555555555555567456788' 0.500000001 -> '1231234555555555555555555567456787' Inexact Rounded + +rounding: down +dqsub550 subtract '1231234555555555555555555567456789' 0 -> '1231234555555555555555555567456789' +dqsub551 subtract '1231234555555555555555555567456789' 0.000000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub552 subtract '1231234555555555555555555567456789' 0.000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub553 subtract '1231234555555555555555555567456789' 0.1 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub554 subtract '1231234555555555555555555567456789' 0.4 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub555 subtract '1231234555555555555555555567456789' 0.49 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub556 subtract '1231234555555555555555555567456789' 0.499999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub557 subtract '1231234555555555555555555567456789' 0.499999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub558 subtract '1231234555555555555555555567456789' 0.5 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub559 subtract '1231234555555555555555555567456789' 0.500000001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub560 subtract '1231234555555555555555555567456789' 0.500001 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub561 subtract '1231234555555555555555555567456789' 0.51 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub562 subtract '1231234555555555555555555567456789' 0.6 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub563 subtract '1231234555555555555555555567456789' 0.9 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub564 subtract '1231234555555555555555555567456789' 0.99999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub565 subtract '1231234555555555555555555567456789' 0.999999999 -> '1231234555555555555555555567456788' Inexact Rounded +dqsub566 subtract '1231234555555555555555555567456789' 1 -> '1231234555555555555555555567456788' +dqsub567 subtract '1231234555555555555555555567456789' 1.00000001 -> '1231234555555555555555555567456787' Inexact Rounded +dqsub568 subtract '1231234555555555555555555567456789' 1.00001 -> '1231234555555555555555555567456787' Inexact Rounded +dqsub569 subtract '1231234555555555555555555567456789' 1.1 -> '1231234555555555555555555567456787' Inexact Rounded + +-- symmetry... +rounding: half_up +dqsub600 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' +dqsub601 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub602 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub603 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub604 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub605 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub606 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub607 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub608 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub609 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub610 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub611 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub612 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub613 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub614 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub615 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub616 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' +dqsub617 subtract 1.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub618 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub619 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded + +rounding: half_even +dqsub620 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' +dqsub621 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub622 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub623 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub624 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub625 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub626 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub627 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' Inexact Rounded +dqsub628 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub629 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub630 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub631 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub632 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub633 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub634 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub635 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub636 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' +dqsub637 subtract 1.00000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub638 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub639 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +-- critical few with even bottom digit... +dqsub640 subtract 0.499999999 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub641 subtract 0.5 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub642 subtract 0.500000001 '1231234555555555555555555567456788' -> '-1231234555555555555555555567456787' Inexact Rounded + +rounding: down +dqsub650 subtract 0 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456789' +dqsub651 subtract 0.000000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub652 subtract 0.000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub653 subtract 0.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub654 subtract 0.4 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub655 subtract 0.49 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub656 subtract 0.499999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub657 subtract 0.499999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub658 subtract 0.5 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub659 subtract 0.500000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub660 subtract 0.500001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub661 subtract 0.51 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub662 subtract 0.6 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub663 subtract 0.9 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub664 subtract 0.99999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub665 subtract 0.999999999 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' Inexact Rounded +dqsub666 subtract 1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456788' +dqsub667 subtract 1.00000001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded +dqsub668 subtract 1.00001 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded +dqsub669 subtract 1.1 '1231234555555555555555555567456789' -> '-1231234555555555555555555567456787' Inexact Rounded + + +-- lots of leading zeros in intermediate result, and showing effects of +-- input rounding would have affected the following +rounding: half_up +dqsub670 subtract '1234567456789' '1234567456788.1' -> 0.9 +dqsub671 subtract '1234567456789' '1234567456788.9' -> 0.1 +dqsub672 subtract '1234567456789' '1234567456789.1' -> -0.1 +dqsub673 subtract '1234567456789' '1234567456789.5' -> -0.5 +dqsub674 subtract '1234567456789' '1234567456789.9' -> -0.9 + +rounding: half_even +dqsub680 subtract '1234567456789' '1234567456788.1' -> 0.9 +dqsub681 subtract '1234567456789' '1234567456788.9' -> 0.1 +dqsub682 subtract '1234567456789' '1234567456789.1' -> -0.1 +dqsub683 subtract '1234567456789' '1234567456789.5' -> -0.5 +dqsub684 subtract '1234567456789' '1234567456789.9' -> -0.9 + +dqsub685 subtract '1234567456788' '1234567456787.1' -> 0.9 +dqsub686 subtract '1234567456788' '1234567456787.9' -> 0.1 +dqsub687 subtract '1234567456788' '1234567456788.1' -> -0.1 +dqsub688 subtract '1234567456788' '1234567456788.5' -> -0.5 +dqsub689 subtract '1234567456788' '1234567456788.9' -> -0.9 + +rounding: down +dqsub690 subtract '1234567456789' '1234567456788.1' -> 0.9 +dqsub691 subtract '1234567456789' '1234567456788.9' -> 0.1 +dqsub692 subtract '1234567456789' '1234567456789.1' -> -0.1 +dqsub693 subtract '1234567456789' '1234567456789.5' -> -0.5 +dqsub694 subtract '1234567456789' '1234567456789.9' -> -0.9 + +-- Specials +dqsub780 subtract -Inf Inf -> -Infinity +dqsub781 subtract -Inf 1000 -> -Infinity +dqsub782 subtract -Inf 1 -> -Infinity +dqsub783 subtract -Inf -0 -> -Infinity +dqsub784 subtract -Inf -1 -> -Infinity +dqsub785 subtract -Inf -1000 -> -Infinity +dqsub787 subtract -1000 Inf -> -Infinity +dqsub788 subtract -Inf Inf -> -Infinity +dqsub789 subtract -1 Inf -> -Infinity +dqsub790 subtract 0 Inf -> -Infinity +dqsub791 subtract 1 Inf -> -Infinity +dqsub792 subtract 1000 Inf -> -Infinity + +dqsub800 subtract Inf Inf -> NaN Invalid_operation +dqsub801 subtract Inf 1000 -> Infinity +dqsub802 subtract Inf 1 -> Infinity +dqsub803 subtract Inf 0 -> Infinity +dqsub804 subtract Inf -0 -> Infinity +dqsub805 subtract Inf -1 -> Infinity +dqsub806 subtract Inf -1000 -> Infinity +dqsub807 subtract Inf -Inf -> Infinity +dqsub808 subtract -1000 -Inf -> Infinity +dqsub809 subtract -Inf -Inf -> NaN Invalid_operation +dqsub810 subtract -1 -Inf -> Infinity +dqsub811 subtract -0 -Inf -> Infinity +dqsub812 subtract 0 -Inf -> Infinity +dqsub813 subtract 1 -Inf -> Infinity +dqsub814 subtract 1000 -Inf -> Infinity +dqsub815 subtract Inf -Inf -> Infinity + +dqsub821 subtract NaN Inf -> NaN +dqsub822 subtract -NaN 1000 -> -NaN +dqsub823 subtract NaN 1 -> NaN +dqsub824 subtract NaN 0 -> NaN +dqsub825 subtract NaN -0 -> NaN +dqsub826 subtract NaN -1 -> NaN +dqsub827 subtract NaN -1000 -> NaN +dqsub828 subtract NaN -Inf -> NaN +dqsub829 subtract -NaN NaN -> -NaN +dqsub830 subtract -Inf NaN -> NaN +dqsub831 subtract -1000 NaN -> NaN +dqsub832 subtract -1 NaN -> NaN +dqsub833 subtract -0 NaN -> NaN +dqsub834 subtract 0 NaN -> NaN +dqsub835 subtract 1 NaN -> NaN +dqsub836 subtract 1000 -NaN -> -NaN +dqsub837 subtract Inf NaN -> NaN + +dqsub841 subtract sNaN Inf -> NaN Invalid_operation +dqsub842 subtract -sNaN 1000 -> -NaN Invalid_operation +dqsub843 subtract sNaN 1 -> NaN Invalid_operation +dqsub844 subtract sNaN 0 -> NaN Invalid_operation +dqsub845 subtract sNaN -0 -> NaN Invalid_operation +dqsub846 subtract sNaN -1 -> NaN Invalid_operation +dqsub847 subtract sNaN -1000 -> NaN Invalid_operation +dqsub848 subtract sNaN NaN -> NaN Invalid_operation +dqsub849 subtract sNaN sNaN -> NaN Invalid_operation +dqsub850 subtract NaN sNaN -> NaN Invalid_operation +dqsub851 subtract -Inf -sNaN -> -NaN Invalid_operation +dqsub852 subtract -1000 sNaN -> NaN Invalid_operation +dqsub853 subtract -1 sNaN -> NaN Invalid_operation +dqsub854 subtract -0 sNaN -> NaN Invalid_operation +dqsub855 subtract 0 sNaN -> NaN Invalid_operation +dqsub856 subtract 1 sNaN -> NaN Invalid_operation +dqsub857 subtract 1000 sNaN -> NaN Invalid_operation +dqsub858 subtract Inf sNaN -> NaN Invalid_operation +dqsub859 subtract NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqsub861 subtract NaN01 -Inf -> NaN1 +dqsub862 subtract -NaN02 -1000 -> -NaN2 +dqsub863 subtract NaN03 1000 -> NaN3 +dqsub864 subtract NaN04 Inf -> NaN4 +dqsub865 subtract NaN05 NaN61 -> NaN5 +dqsub866 subtract -Inf -NaN71 -> -NaN71 +dqsub867 subtract -1000 NaN81 -> NaN81 +dqsub868 subtract 1000 NaN91 -> NaN91 +dqsub869 subtract Inf NaN101 -> NaN101 +dqsub871 subtract sNaN011 -Inf -> NaN11 Invalid_operation +dqsub872 subtract sNaN012 -1000 -> NaN12 Invalid_operation +dqsub873 subtract -sNaN013 1000 -> -NaN13 Invalid_operation +dqsub874 subtract sNaN014 NaN171 -> NaN14 Invalid_operation +dqsub875 subtract sNaN015 sNaN181 -> NaN15 Invalid_operation +dqsub876 subtract NaN016 sNaN191 -> NaN191 Invalid_operation +dqsub877 subtract -Inf sNaN201 -> NaN201 Invalid_operation +dqsub878 subtract -1000 sNaN211 -> NaN211 Invalid_operation +dqsub879 subtract 1000 -sNaN221 -> -NaN221 Invalid_operation +dqsub880 subtract Inf sNaN231 -> NaN231 Invalid_operation +dqsub881 subtract NaN025 sNaN241 -> NaN241 Invalid_operation + +-- edge case spills +dqsub901 subtract 2.E-3 1.002 -> -1.000 +dqsub902 subtract 2.0E-3 1.002 -> -1.0000 +dqsub903 subtract 2.00E-3 1.0020 -> -1.00000 +dqsub904 subtract 2.000E-3 1.00200 -> -1.000000 +dqsub905 subtract 2.0000E-3 1.002000 -> -1.0000000 +dqsub906 subtract 2.00000E-3 1.0020000 -> -1.00000000 +dqsub907 subtract 2.000000E-3 1.00200000 -> -1.000000000 +dqsub908 subtract 2.0000000E-3 1.002000000 -> -1.0000000000 + +-- subnormals and overflows covered under Add + +-- Examples from SQL proposal (Krishna Kulkarni) +dqsub1125 subtract 130E-2 120E-2 -> 0.10 +dqsub1126 subtract 130E-2 12E-1 -> 0.10 +dqsub1127 subtract 130E-2 1E0 -> 0.30 +dqsub1128 subtract 1E2 1E4 -> -9.9E+3 + +-- Null tests +dqsub9990 subtract 10 # -> NaN Invalid_operation +dqsub9991 subtract # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dqToIntegral.decTest b/Lib/test/decimaltestdata/dqToIntegral.decTest index 3055de572d1..eb12387eab7 100644 --- a/Lib/test/decimaltestdata/dqToIntegral.decTest +++ b/Lib/test/decimaltestdata/dqToIntegral.decTest @@ -1,257 +1,257 @@ ------------------------------------------------------------------------- --- dqToIntegral.decTest -- round Quad to integral value -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests tests the extended specification 'round-to-integral --- value-exact' operations (from IEEE 854, later modified in 754r). --- All non-zero results are defined as being those from either copy or --- quantize, so those are assumed to have been tested extensively --- elsewhere; the tests here are for integrity, rounding mode, etc. --- Also, it is assumed the test harness will use these tests for both --- ToIntegralExact (which does set Inexact) and the fixed-name --- functions (which do not set Inexact). - --- Note that decNumber implements an earlier definition of toIntegral --- which never sets Inexact; the decTest operator for that is called --- 'tointegral' instead of 'tointegralx'. - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - -dqintx001 tointegralx 0 -> 0 -dqintx002 tointegralx 0.0 -> 0 -dqintx003 tointegralx 0.1 -> 0 Inexact Rounded -dqintx004 tointegralx 0.2 -> 0 Inexact Rounded -dqintx005 tointegralx 0.3 -> 0 Inexact Rounded -dqintx006 tointegralx 0.4 -> 0 Inexact Rounded -dqintx007 tointegralx 0.5 -> 0 Inexact Rounded -dqintx008 tointegralx 0.6 -> 1 Inexact Rounded -dqintx009 tointegralx 0.7 -> 1 Inexact Rounded -dqintx010 tointegralx 0.8 -> 1 Inexact Rounded -dqintx011 tointegralx 0.9 -> 1 Inexact Rounded -dqintx012 tointegralx 1 -> 1 -dqintx013 tointegralx 1.0 -> 1 Rounded -dqintx014 tointegralx 1.1 -> 1 Inexact Rounded -dqintx015 tointegralx 1.2 -> 1 Inexact Rounded -dqintx016 tointegralx 1.3 -> 1 Inexact Rounded -dqintx017 tointegralx 1.4 -> 1 Inexact Rounded -dqintx018 tointegralx 1.5 -> 2 Inexact Rounded -dqintx019 tointegralx 1.6 -> 2 Inexact Rounded -dqintx020 tointegralx 1.7 -> 2 Inexact Rounded -dqintx021 tointegralx 1.8 -> 2 Inexact Rounded -dqintx022 tointegralx 1.9 -> 2 Inexact Rounded --- negatives -dqintx031 tointegralx -0 -> -0 -dqintx032 tointegralx -0.0 -> -0 -dqintx033 tointegralx -0.1 -> -0 Inexact Rounded -dqintx034 tointegralx -0.2 -> -0 Inexact Rounded -dqintx035 tointegralx -0.3 -> -0 Inexact Rounded -dqintx036 tointegralx -0.4 -> -0 Inexact Rounded -dqintx037 tointegralx -0.5 -> -0 Inexact Rounded -dqintx038 tointegralx -0.6 -> -1 Inexact Rounded -dqintx039 tointegralx -0.7 -> -1 Inexact Rounded -dqintx040 tointegralx -0.8 -> -1 Inexact Rounded -dqintx041 tointegralx -0.9 -> -1 Inexact Rounded -dqintx042 tointegralx -1 -> -1 -dqintx043 tointegralx -1.0 -> -1 Rounded -dqintx044 tointegralx -1.1 -> -1 Inexact Rounded -dqintx045 tointegralx -1.2 -> -1 Inexact Rounded -dqintx046 tointegralx -1.3 -> -1 Inexact Rounded -dqintx047 tointegralx -1.4 -> -1 Inexact Rounded -dqintx048 tointegralx -1.5 -> -2 Inexact Rounded -dqintx049 tointegralx -1.6 -> -2 Inexact Rounded -dqintx050 tointegralx -1.7 -> -2 Inexact Rounded -dqintx051 tointegralx -1.8 -> -2 Inexact Rounded -dqintx052 tointegralx -1.9 -> -2 Inexact Rounded --- next two would be NaN using quantize(x, 0) -dqintx053 tointegralx 10E+60 -> 1.0E+61 -dqintx054 tointegralx -10E+60 -> -1.0E+61 - --- numbers around precision -dqintx060 tointegralx '56267E-17' -> '0' Inexact Rounded -dqintx061 tointegralx '56267E-5' -> '1' Inexact Rounded -dqintx062 tointegralx '56267E-2' -> '563' Inexact Rounded -dqintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded -dqintx065 tointegralx '56267E-0' -> '56267' -dqintx066 tointegralx '56267E+0' -> '56267' -dqintx067 tointegralx '56267E+1' -> '5.6267E+5' -dqintx068 tointegralx '56267E+9' -> '5.6267E+13' -dqintx069 tointegralx '56267E+10' -> '5.6267E+14' -dqintx070 tointegralx '56267E+11' -> '5.6267E+15' -dqintx071 tointegralx '56267E+12' -> '5.6267E+16' -dqintx072 tointegralx '56267E+13' -> '5.6267E+17' -dqintx073 tointegralx '1.23E+96' -> '1.23E+96' -dqintx074 tointegralx '1.23E+6144' -> #47ffd300000000000000000000000000 Clamped - -dqintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded -dqintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded -dqintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded -dqintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded -dqintx085 tointegralx '-56267E-0' -> '-56267' -dqintx086 tointegralx '-56267E+0' -> '-56267' -dqintx087 tointegralx '-56267E+1' -> '-5.6267E+5' -dqintx088 tointegralx '-56267E+9' -> '-5.6267E+13' -dqintx089 tointegralx '-56267E+10' -> '-5.6267E+14' -dqintx090 tointegralx '-56267E+11' -> '-5.6267E+15' -dqintx091 tointegralx '-56267E+12' -> '-5.6267E+16' -dqintx092 tointegralx '-56267E+13' -> '-5.6267E+17' -dqintx093 tointegralx '-1.23E+96' -> '-1.23E+96' -dqintx094 tointegralx '-1.23E+6144' -> #c7ffd300000000000000000000000000 Clamped - --- subnormal inputs -dqintx100 tointegralx 1E-299 -> 0 Inexact Rounded -dqintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded -dqintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded -dqintx103 tointegralx 0E-299 -> 0 - --- specials and zeros -dqintx120 tointegralx 'Inf' -> Infinity -dqintx121 tointegralx '-Inf' -> -Infinity -dqintx122 tointegralx NaN -> NaN -dqintx123 tointegralx sNaN -> NaN Invalid_operation -dqintx124 tointegralx 0 -> 0 -dqintx125 tointegralx -0 -> -0 -dqintx126 tointegralx 0.000 -> 0 -dqintx127 tointegralx 0.00 -> 0 -dqintx128 tointegralx 0.0 -> 0 -dqintx129 tointegralx 0 -> 0 -dqintx130 tointegralx 0E-3 -> 0 -dqintx131 tointegralx 0E-2 -> 0 -dqintx132 tointegralx 0E-1 -> 0 -dqintx133 tointegralx 0E-0 -> 0 -dqintx134 tointegralx 0E+1 -> 0E+1 -dqintx135 tointegralx 0E+2 -> 0E+2 -dqintx136 tointegralx 0E+3 -> 0E+3 -dqintx137 tointegralx 0E+4 -> 0E+4 -dqintx138 tointegralx 0E+5 -> 0E+5 -dqintx139 tointegralx -0.000 -> -0 -dqintx140 tointegralx -0.00 -> -0 -dqintx141 tointegralx -0.0 -> -0 -dqintx142 tointegralx -0 -> -0 -dqintx143 tointegralx -0E-3 -> -0 -dqintx144 tointegralx -0E-2 -> -0 -dqintx145 tointegralx -0E-1 -> -0 -dqintx146 tointegralx -0E-0 -> -0 -dqintx147 tointegralx -0E+1 -> -0E+1 -dqintx148 tointegralx -0E+2 -> -0E+2 -dqintx149 tointegralx -0E+3 -> -0E+3 -dqintx150 tointegralx -0E+4 -> -0E+4 -dqintx151 tointegralx -0E+5 -> -0E+5 --- propagating NaNs -dqintx152 tointegralx NaN808 -> NaN808 -dqintx153 tointegralx sNaN080 -> NaN80 Invalid_operation -dqintx154 tointegralx -NaN808 -> -NaN808 -dqintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation -dqintx156 tointegralx -NaN -> -NaN -dqintx157 tointegralx -sNaN -> -NaN Invalid_operation - --- examples -rounding: half_up -dqintx200 tointegralx 2.1 -> 2 Inexact Rounded -dqintx201 tointegralx 100 -> 100 -dqintx202 tointegralx 100.0 -> 100 Rounded -dqintx203 tointegralx 101.5 -> 102 Inexact Rounded -dqintx204 tointegralx -101.5 -> -102 Inexact Rounded -dqintx205 tointegralx 10E+5 -> 1.0E+6 -dqintx206 tointegralx 7.89E+77 -> 7.89E+77 -dqintx207 tointegralx -Inf -> -Infinity - - --- all rounding modes -rounding: half_even -dqintx210 tointegralx 55.5 -> 56 Inexact Rounded -dqintx211 tointegralx 56.5 -> 56 Inexact Rounded -dqintx212 tointegralx 57.5 -> 58 Inexact Rounded -dqintx213 tointegralx -55.5 -> -56 Inexact Rounded -dqintx214 tointegralx -56.5 -> -56 Inexact Rounded -dqintx215 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_up - -dqintx220 tointegralx 55.5 -> 56 Inexact Rounded -dqintx221 tointegralx 56.5 -> 57 Inexact Rounded -dqintx222 tointegralx 57.5 -> 58 Inexact Rounded -dqintx223 tointegralx -55.5 -> -56 Inexact Rounded -dqintx224 tointegralx -56.5 -> -57 Inexact Rounded -dqintx225 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_down - -dqintx230 tointegralx 55.5 -> 55 Inexact Rounded -dqintx231 tointegralx 56.5 -> 56 Inexact Rounded -dqintx232 tointegralx 57.5 -> 57 Inexact Rounded -dqintx233 tointegralx -55.5 -> -55 Inexact Rounded -dqintx234 tointegralx -56.5 -> -56 Inexact Rounded -dqintx235 tointegralx -57.5 -> -57 Inexact Rounded - -rounding: up - -dqintx240 tointegralx 55.3 -> 56 Inexact Rounded -dqintx241 tointegralx 56.3 -> 57 Inexact Rounded -dqintx242 tointegralx 57.3 -> 58 Inexact Rounded -dqintx243 tointegralx -55.3 -> -56 Inexact Rounded -dqintx244 tointegralx -56.3 -> -57 Inexact Rounded -dqintx245 tointegralx -57.3 -> -58 Inexact Rounded - -rounding: down - -dqintx250 tointegralx 55.7 -> 55 Inexact Rounded -dqintx251 tointegralx 56.7 -> 56 Inexact Rounded -dqintx252 tointegralx 57.7 -> 57 Inexact Rounded -dqintx253 tointegralx -55.7 -> -55 Inexact Rounded -dqintx254 tointegralx -56.7 -> -56 Inexact Rounded -dqintx255 tointegralx -57.7 -> -57 Inexact Rounded - -rounding: ceiling - -dqintx260 tointegralx 55.3 -> 56 Inexact Rounded -dqintx261 tointegralx 56.3 -> 57 Inexact Rounded -dqintx262 tointegralx 57.3 -> 58 Inexact Rounded -dqintx263 tointegralx -55.3 -> -55 Inexact Rounded -dqintx264 tointegralx -56.3 -> -56 Inexact Rounded -dqintx265 tointegralx -57.3 -> -57 Inexact Rounded - -rounding: floor - -dqintx270 tointegralx 55.7 -> 55 Inexact Rounded -dqintx271 tointegralx 56.7 -> 56 Inexact Rounded -dqintx272 tointegralx 57.7 -> 57 Inexact Rounded -dqintx273 tointegralx -55.7 -> -56 Inexact Rounded -dqintx274 tointegralx -56.7 -> -57 Inexact Rounded -dqintx275 tointegralx -57.7 -> -58 Inexact Rounded - --- Int and uInt32 edge values for testing conversions -dqintx300 tointegralx -2147483646 -> -2147483646 -dqintx301 tointegralx -2147483647 -> -2147483647 -dqintx302 tointegralx -2147483648 -> -2147483648 -dqintx303 tointegralx -2147483649 -> -2147483649 -dqintx304 tointegralx 2147483646 -> 2147483646 -dqintx305 tointegralx 2147483647 -> 2147483647 -dqintx306 tointegralx 2147483648 -> 2147483648 -dqintx307 tointegralx 2147483649 -> 2147483649 -dqintx308 tointegralx 4294967294 -> 4294967294 -dqintx309 tointegralx 4294967295 -> 4294967295 -dqintx310 tointegralx 4294967296 -> 4294967296 -dqintx311 tointegralx 4294967297 -> 4294967297 - +------------------------------------------------------------------------ +-- dqToIntegral.decTest -- round Quad to integral value -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests tests the extended specification 'round-to-integral +-- value-exact' operations (from IEEE 854, later modified in 754r). +-- All non-zero results are defined as being those from either copy or +-- quantize, so those are assumed to have been tested extensively +-- elsewhere; the tests here are for integrity, rounding mode, etc. +-- Also, it is assumed the test harness will use these tests for both +-- ToIntegralExact (which does set Inexact) and the fixed-name +-- functions (which do not set Inexact). + +-- Note that decNumber implements an earlier definition of toIntegral +-- which never sets Inexact; the decTest operator for that is called +-- 'tointegral' instead of 'tointegralx'. + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +dqintx001 tointegralx 0 -> 0 +dqintx002 tointegralx 0.0 -> 0 +dqintx003 tointegralx 0.1 -> 0 Inexact Rounded +dqintx004 tointegralx 0.2 -> 0 Inexact Rounded +dqintx005 tointegralx 0.3 -> 0 Inexact Rounded +dqintx006 tointegralx 0.4 -> 0 Inexact Rounded +dqintx007 tointegralx 0.5 -> 0 Inexact Rounded +dqintx008 tointegralx 0.6 -> 1 Inexact Rounded +dqintx009 tointegralx 0.7 -> 1 Inexact Rounded +dqintx010 tointegralx 0.8 -> 1 Inexact Rounded +dqintx011 tointegralx 0.9 -> 1 Inexact Rounded +dqintx012 tointegralx 1 -> 1 +dqintx013 tointegralx 1.0 -> 1 Rounded +dqintx014 tointegralx 1.1 -> 1 Inexact Rounded +dqintx015 tointegralx 1.2 -> 1 Inexact Rounded +dqintx016 tointegralx 1.3 -> 1 Inexact Rounded +dqintx017 tointegralx 1.4 -> 1 Inexact Rounded +dqintx018 tointegralx 1.5 -> 2 Inexact Rounded +dqintx019 tointegralx 1.6 -> 2 Inexact Rounded +dqintx020 tointegralx 1.7 -> 2 Inexact Rounded +dqintx021 tointegralx 1.8 -> 2 Inexact Rounded +dqintx022 tointegralx 1.9 -> 2 Inexact Rounded +-- negatives +dqintx031 tointegralx -0 -> -0 +dqintx032 tointegralx -0.0 -> -0 +dqintx033 tointegralx -0.1 -> -0 Inexact Rounded +dqintx034 tointegralx -0.2 -> -0 Inexact Rounded +dqintx035 tointegralx -0.3 -> -0 Inexact Rounded +dqintx036 tointegralx -0.4 -> -0 Inexact Rounded +dqintx037 tointegralx -0.5 -> -0 Inexact Rounded +dqintx038 tointegralx -0.6 -> -1 Inexact Rounded +dqintx039 tointegralx -0.7 -> -1 Inexact Rounded +dqintx040 tointegralx -0.8 -> -1 Inexact Rounded +dqintx041 tointegralx -0.9 -> -1 Inexact Rounded +dqintx042 tointegralx -1 -> -1 +dqintx043 tointegralx -1.0 -> -1 Rounded +dqintx044 tointegralx -1.1 -> -1 Inexact Rounded +dqintx045 tointegralx -1.2 -> -1 Inexact Rounded +dqintx046 tointegralx -1.3 -> -1 Inexact Rounded +dqintx047 tointegralx -1.4 -> -1 Inexact Rounded +dqintx048 tointegralx -1.5 -> -2 Inexact Rounded +dqintx049 tointegralx -1.6 -> -2 Inexact Rounded +dqintx050 tointegralx -1.7 -> -2 Inexact Rounded +dqintx051 tointegralx -1.8 -> -2 Inexact Rounded +dqintx052 tointegralx -1.9 -> -2 Inexact Rounded +-- next two would be NaN using quantize(x, 0) +dqintx053 tointegralx 10E+60 -> 1.0E+61 +dqintx054 tointegralx -10E+60 -> -1.0E+61 + +-- numbers around precision +dqintx060 tointegralx '56267E-17' -> '0' Inexact Rounded +dqintx061 tointegralx '56267E-5' -> '1' Inexact Rounded +dqintx062 tointegralx '56267E-2' -> '563' Inexact Rounded +dqintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded +dqintx065 tointegralx '56267E-0' -> '56267' +dqintx066 tointegralx '56267E+0' -> '56267' +dqintx067 tointegralx '56267E+1' -> '5.6267E+5' +dqintx068 tointegralx '56267E+9' -> '5.6267E+13' +dqintx069 tointegralx '56267E+10' -> '5.6267E+14' +dqintx070 tointegralx '56267E+11' -> '5.6267E+15' +dqintx071 tointegralx '56267E+12' -> '5.6267E+16' +dqintx072 tointegralx '56267E+13' -> '5.6267E+17' +dqintx073 tointegralx '1.23E+96' -> '1.23E+96' +dqintx074 tointegralx '1.23E+6144' -> #47ffd300000000000000000000000000 Clamped + +dqintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded +dqintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded +dqintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded +dqintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded +dqintx085 tointegralx '-56267E-0' -> '-56267' +dqintx086 tointegralx '-56267E+0' -> '-56267' +dqintx087 tointegralx '-56267E+1' -> '-5.6267E+5' +dqintx088 tointegralx '-56267E+9' -> '-5.6267E+13' +dqintx089 tointegralx '-56267E+10' -> '-5.6267E+14' +dqintx090 tointegralx '-56267E+11' -> '-5.6267E+15' +dqintx091 tointegralx '-56267E+12' -> '-5.6267E+16' +dqintx092 tointegralx '-56267E+13' -> '-5.6267E+17' +dqintx093 tointegralx '-1.23E+96' -> '-1.23E+96' +dqintx094 tointegralx '-1.23E+6144' -> #c7ffd300000000000000000000000000 Clamped + +-- subnormal inputs +dqintx100 tointegralx 1E-299 -> 0 Inexact Rounded +dqintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded +dqintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded +dqintx103 tointegralx 0E-299 -> 0 + +-- specials and zeros +dqintx120 tointegralx 'Inf' -> Infinity +dqintx121 tointegralx '-Inf' -> -Infinity +dqintx122 tointegralx NaN -> NaN +dqintx123 tointegralx sNaN -> NaN Invalid_operation +dqintx124 tointegralx 0 -> 0 +dqintx125 tointegralx -0 -> -0 +dqintx126 tointegralx 0.000 -> 0 +dqintx127 tointegralx 0.00 -> 0 +dqintx128 tointegralx 0.0 -> 0 +dqintx129 tointegralx 0 -> 0 +dqintx130 tointegralx 0E-3 -> 0 +dqintx131 tointegralx 0E-2 -> 0 +dqintx132 tointegralx 0E-1 -> 0 +dqintx133 tointegralx 0E-0 -> 0 +dqintx134 tointegralx 0E+1 -> 0E+1 +dqintx135 tointegralx 0E+2 -> 0E+2 +dqintx136 tointegralx 0E+3 -> 0E+3 +dqintx137 tointegralx 0E+4 -> 0E+4 +dqintx138 tointegralx 0E+5 -> 0E+5 +dqintx139 tointegralx -0.000 -> -0 +dqintx140 tointegralx -0.00 -> -0 +dqintx141 tointegralx -0.0 -> -0 +dqintx142 tointegralx -0 -> -0 +dqintx143 tointegralx -0E-3 -> -0 +dqintx144 tointegralx -0E-2 -> -0 +dqintx145 tointegralx -0E-1 -> -0 +dqintx146 tointegralx -0E-0 -> -0 +dqintx147 tointegralx -0E+1 -> -0E+1 +dqintx148 tointegralx -0E+2 -> -0E+2 +dqintx149 tointegralx -0E+3 -> -0E+3 +dqintx150 tointegralx -0E+4 -> -0E+4 +dqintx151 tointegralx -0E+5 -> -0E+5 +-- propagating NaNs +dqintx152 tointegralx NaN808 -> NaN808 +dqintx153 tointegralx sNaN080 -> NaN80 Invalid_operation +dqintx154 tointegralx -NaN808 -> -NaN808 +dqintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation +dqintx156 tointegralx -NaN -> -NaN +dqintx157 tointegralx -sNaN -> -NaN Invalid_operation + +-- examples +rounding: half_up +dqintx200 tointegralx 2.1 -> 2 Inexact Rounded +dqintx201 tointegralx 100 -> 100 +dqintx202 tointegralx 100.0 -> 100 Rounded +dqintx203 tointegralx 101.5 -> 102 Inexact Rounded +dqintx204 tointegralx -101.5 -> -102 Inexact Rounded +dqintx205 tointegralx 10E+5 -> 1.0E+6 +dqintx206 tointegralx 7.89E+77 -> 7.89E+77 +dqintx207 tointegralx -Inf -> -Infinity + + +-- all rounding modes +rounding: half_even +dqintx210 tointegralx 55.5 -> 56 Inexact Rounded +dqintx211 tointegralx 56.5 -> 56 Inexact Rounded +dqintx212 tointegralx 57.5 -> 58 Inexact Rounded +dqintx213 tointegralx -55.5 -> -56 Inexact Rounded +dqintx214 tointegralx -56.5 -> -56 Inexact Rounded +dqintx215 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_up + +dqintx220 tointegralx 55.5 -> 56 Inexact Rounded +dqintx221 tointegralx 56.5 -> 57 Inexact Rounded +dqintx222 tointegralx 57.5 -> 58 Inexact Rounded +dqintx223 tointegralx -55.5 -> -56 Inexact Rounded +dqintx224 tointegralx -56.5 -> -57 Inexact Rounded +dqintx225 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_down + +dqintx230 tointegralx 55.5 -> 55 Inexact Rounded +dqintx231 tointegralx 56.5 -> 56 Inexact Rounded +dqintx232 tointegralx 57.5 -> 57 Inexact Rounded +dqintx233 tointegralx -55.5 -> -55 Inexact Rounded +dqintx234 tointegralx -56.5 -> -56 Inexact Rounded +dqintx235 tointegralx -57.5 -> -57 Inexact Rounded + +rounding: up + +dqintx240 tointegralx 55.3 -> 56 Inexact Rounded +dqintx241 tointegralx 56.3 -> 57 Inexact Rounded +dqintx242 tointegralx 57.3 -> 58 Inexact Rounded +dqintx243 tointegralx -55.3 -> -56 Inexact Rounded +dqintx244 tointegralx -56.3 -> -57 Inexact Rounded +dqintx245 tointegralx -57.3 -> -58 Inexact Rounded + +rounding: down + +dqintx250 tointegralx 55.7 -> 55 Inexact Rounded +dqintx251 tointegralx 56.7 -> 56 Inexact Rounded +dqintx252 tointegralx 57.7 -> 57 Inexact Rounded +dqintx253 tointegralx -55.7 -> -55 Inexact Rounded +dqintx254 tointegralx -56.7 -> -56 Inexact Rounded +dqintx255 tointegralx -57.7 -> -57 Inexact Rounded + +rounding: ceiling + +dqintx260 tointegralx 55.3 -> 56 Inexact Rounded +dqintx261 tointegralx 56.3 -> 57 Inexact Rounded +dqintx262 tointegralx 57.3 -> 58 Inexact Rounded +dqintx263 tointegralx -55.3 -> -55 Inexact Rounded +dqintx264 tointegralx -56.3 -> -56 Inexact Rounded +dqintx265 tointegralx -57.3 -> -57 Inexact Rounded + +rounding: floor + +dqintx270 tointegralx 55.7 -> 55 Inexact Rounded +dqintx271 tointegralx 56.7 -> 56 Inexact Rounded +dqintx272 tointegralx 57.7 -> 57 Inexact Rounded +dqintx273 tointegralx -55.7 -> -56 Inexact Rounded +dqintx274 tointegralx -56.7 -> -57 Inexact Rounded +dqintx275 tointegralx -57.7 -> -58 Inexact Rounded + +-- Int and uInt32 edge values for testing conversions +dqintx300 tointegralx -2147483646 -> -2147483646 +dqintx301 tointegralx -2147483647 -> -2147483647 +dqintx302 tointegralx -2147483648 -> -2147483648 +dqintx303 tointegralx -2147483649 -> -2147483649 +dqintx304 tointegralx 2147483646 -> 2147483646 +dqintx305 tointegralx 2147483647 -> 2147483647 +dqintx306 tointegralx 2147483648 -> 2147483648 +dqintx307 tointegralx 2147483649 -> 2147483649 +dqintx308 tointegralx 4294967294 -> 4294967294 +dqintx309 tointegralx 4294967295 -> 4294967295 +dqintx310 tointegralx 4294967296 -> 4294967296 +dqintx311 tointegralx 4294967297 -> 4294967297 + diff --git a/Lib/test/decimaltestdata/dqXor.decTest b/Lib/test/decimaltestdata/dqXor.decTest index 2216e9ebf8e..fbb32e441bc 100644 --- a/Lib/test/decimaltestdata/dqXor.decTest +++ b/Lib/test/decimaltestdata/dqXor.decTest @@ -1,410 +1,410 @@ ------------------------------------------------------------------------- --- dqXor.decTest -- digitwise logical XOR for decQuads -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -clamp: 1 -precision: 34 -maxExponent: 6144 -minExponent: -6143 -rounding: half_even - --- Sanity check (truth table) -dqxor001 xor 0 0 -> 0 -dqxor002 xor 0 1 -> 1 -dqxor003 xor 1 0 -> 1 -dqxor004 xor 1 1 -> 0 -dqxor005 xor 1100 1010 -> 110 --- and at msd and msd-1 -dqxor006 xor 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqxor007 xor 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqxor008 xor 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 1000000000000000000000000000000000 -dqxor009 xor 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 0 -dqxor010 xor 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 -dqxor011 xor 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 -dqxor012 xor 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 100000000000000000000000000000000 -dqxor013 xor 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 0 - --- Various lengths --- 1234567890123456789012345678901234 -dqxor601 xor 0111111111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000000000 -dqxor602 xor 1011111111111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000000000 -dqxor603 xor 1101111111111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000000000 -dqxor604 xor 1110111111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000000 -dqxor605 xor 1111011111111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000000 -dqxor606 xor 1111101111111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000000 -dqxor607 xor 1111110111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000 -dqxor608 xor 1111111011111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000 -dqxor609 xor 1111111101111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000 -dqxor610 xor 1111111110111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000 -dqxor611 xor 1111111111011111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000 -dqxor612 xor 1111111111101111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000 -dqxor613 xor 1111111111110111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000 -dqxor614 xor 1111111111111011111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000 -dqxor615 xor 1111111111111101111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000 -dqxor616 xor 1111111111111110111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000 -dqxor617 xor 1111111111111111011111111111111111 1111111111111111111111111111111111 -> 100000000000000000 -dqxor618 xor 1111111111111111101111111111111111 1111111111111111111111111111111111 -> 10000000000000000 -dqxor619 xor 1111111111111111110111111111111111 1111111111111111111111111111111111 -> 1000000000000000 -dqxor620 xor 1111111111111111111011111111111111 1111111111111111111111111111111111 -> 100000000000000 -dqxor621 xor 1111111111111111111101111111111111 1111111111111111111111111111111111 -> 10000000000000 -dqxor622 xor 1111111111111111111110111111111111 1111111111111111111111111111111111 -> 1000000000000 -dqxor623 xor 1111111111111111111111011111111111 1111111111111111111111111111111111 -> 100000000000 -dqxor624 xor 1111111111111111111111101111111111 1111111111111111111111111111111111 -> 10000000000 -dqxor625 xor 1111111111111111111111110111111111 1111111111111111111111111111111111 -> 1000000000 -dqxor626 xor 1111111111111111111111111011111111 1111111111111111111111111111111111 -> 100000000 -dqxor627 xor 1111111111111111111111111101111111 1111111111111111111111111111111111 -> 10000000 -dqxor628 xor 1111111111111111111111111110111111 1111111111111111111111111111111111 -> 1000000 -dqxor629 xor 1111111111111111111111111111011111 1111111111111111111111111111111111 -> 100000 -dqxor630 xor 1111111111111111111111111111101111 1111111111111111111111111111111111 -> 10000 -dqxor631 xor 1111111111111111111111111111110111 1111111111111111111111111111111111 -> 1000 -dqxor632 xor 1111111111111111111111111111111011 1111111111111111111111111111111111 -> 100 -dqxor633 xor 1111111111111111111111111111111101 1111111111111111111111111111111111 -> 10 -dqxor634 xor 1111111111111111111111111111111110 1111111111111111111111111111111111 -> 1 - -dqxor641 xor 1111111111111111111111111111111111 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 -dqxor642 xor 1111111111111111111111111111111111 1011111111111111111111111111111111 -> 100000000000000000000000000000000 -dqxor643 xor 1111111111111111111111111111111111 1101111111111111111111111111111111 -> 10000000000000000000000000000000 -dqxor644 xor 1111111111111111111111111111111111 1110111111111111111111111111111111 -> 1000000000000000000000000000000 -dqxor645 xor 1111111111111111111111111111111111 1111011111111111111111111111111111 -> 100000000000000000000000000000 -dqxor646 xor 1111111111111111111111111111111111 1111101111111111111111111111111111 -> 10000000000000000000000000000 -dqxor647 xor 1111111111111111111111111111111111 1111110111111111111111111111111111 -> 1000000000000000000000000000 -dqxor648 xor 1111111111111111111111111111111111 1111111011111111111111111111111111 -> 100000000000000000000000000 -dqxor649 xor 1111111111111111111111111111111111 1111111101111111111111111111111111 -> 10000000000000000000000000 -dqxor650 xor 1111111111111111111111111111111111 1111111110111111111111111111111111 -> 1000000000000000000000000 -dqxor651 xor 1111111111111111111111111111111111 1111111111011111111111111111111111 -> 100000000000000000000000 -dqxor652 xor 1111111111111111111111111111111111 1111111111101111111111111111111111 -> 10000000000000000000000 -dqxor653 xor 1111111111111111111111111111111111 1111111111110111111111111111111111 -> 1000000000000000000000 -dqxor654 xor 1111111111111111111111111111111111 1111111111111011111111111111111111 -> 100000000000000000000 -dqxor655 xor 1111111111111111111111111111111111 1111111111111101111111111111111111 -> 10000000000000000000 -dqxor656 xor 1111111111111111111111111111111111 1111111111111110111111111111111111 -> 1000000000000000000 -dqxor657 xor 1111111111111111111111111111111111 1111111111111111011111111111111111 -> 100000000000000000 -dqxor658 xor 1111111111111111111111111111111111 1111111111111111101111111111111111 -> 10000000000000000 -dqxor659 xor 1111111111111111111111111111111111 1111111111111111110111111111111111 -> 1000000000000000 -dqxor660 xor 1111111111111111111111111111111111 1111111111111111111011111111111111 -> 100000000000000 -dqxor661 xor 1111111111111111111111111111111111 1111111111111111111101111111111111 -> 10000000000000 -dqxor662 xor 1111111111111111111111111111111111 1111111111111111111110111111111111 -> 1000000000000 -dqxor663 xor 1111111111111111111111111111111111 1111111111111111111111011111111111 -> 100000000000 -dqxor664 xor 1111111111111111111111111111111111 1111111111111111111111101111111111 -> 10000000000 -dqxor665 xor 1111111111111111111111111111111111 1111111111111111111111110111111111 -> 1000000000 -dqxor666 xor 1111111111111111111111111111111111 1111111111111111111111111011111111 -> 100000000 -dqxor667 xor 1111111111111111111111111111111111 1111111111111111111111111101111111 -> 10000000 -dqxor668 xor 1111111111111111111111111111111111 1111111111111111111111111110111111 -> 1000000 -dqxor669 xor 1111111111111111111111111111111111 1111111111111111111111111111011111 -> 100000 -dqxor670 xor 1111111111111111111111111111111111 1111111111111111111111111111101111 -> 10000 -dqxor671 xor 1111111111111111111111111111111111 1111111111111111111111111111110111 -> 1000 -dqxor672 xor 1111111111111111111111111111111111 1111111111111111111111111111111011 -> 100 -dqxor673 xor 1111111111111111111111111111111111 1111111111111111111111111111111101 -> 10 -dqxor674 xor 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1 -dqxor675 xor 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1000000000000000000000000000000001 -dqxor676 xor 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1 - - -dqxor021 xor 1111111110000000 1111111110000000 -> 0 -dqxor022 xor 111111110000000 111111110000000 -> 0 -dqxor023 xor 11111110000000 11111110000000 -> 0 -dqxor024 xor 1111110000000 1111110000000 -> 0 -dqxor025 xor 111110000000 111110000000 -> 0 -dqxor026 xor 11110000000 11110000000 -> 0 -dqxor027 xor 1110000000 1110000000 -> 0 -dqxor028 xor 110000000 110000000 -> 0 -dqxor029 xor 10000000 10000000 -> 0 -dqxor030 xor 1000000 1000000 -> 0 -dqxor031 xor 100000 100000 -> 0 -dqxor032 xor 10000 10000 -> 0 -dqxor033 xor 1000 1000 -> 0 -dqxor034 xor 100 100 -> 0 -dqxor035 xor 10 10 -> 0 -dqxor036 xor 1 1 -> 0 - -dqxor040 xor 111111111 111111111111 -> 111000000000 -dqxor041 xor 11111111 111111111111 -> 111100000000 -dqxor042 xor 11111111 111111111 -> 100000000 -dqxor043 xor 1111111 100000010 -> 101111101 -dqxor044 xor 111111 100000100 -> 100111011 -dqxor045 xor 11111 100001000 -> 100010111 -dqxor046 xor 1111 100010000 -> 100011111 -dqxor047 xor 111 100100000 -> 100100111 -dqxor048 xor 11 101000000 -> 101000011 -dqxor049 xor 1 110000000 -> 110000001 - -dqxor050 xor 1111111111 1 -> 1111111110 -dqxor051 xor 111111111 1 -> 111111110 -dqxor052 xor 11111111 1 -> 11111110 -dqxor053 xor 1111111 1 -> 1111110 -dqxor054 xor 111111 1 -> 111110 -dqxor055 xor 11111 1 -> 11110 -dqxor056 xor 1111 1 -> 1110 -dqxor057 xor 111 1 -> 110 -dqxor058 xor 11 1 -> 10 -dqxor059 xor 1 1 -> 0 - -dqxor060 xor 1111111111 0 -> 1111111111 -dqxor061 xor 111111111 0 -> 111111111 -dqxor062 xor 11111111 0 -> 11111111 -dqxor063 xor 1111111 0 -> 1111111 -dqxor064 xor 111111 0 -> 111111 -dqxor065 xor 11111 0 -> 11111 -dqxor066 xor 1111 0 -> 1111 -dqxor067 xor 111 0 -> 111 -dqxor068 xor 11 0 -> 11 -dqxor069 xor 1 0 -> 1 - -dqxor070 xor 1 1111111111 -> 1111111110 -dqxor071 xor 1 111111111 -> 111111110 -dqxor072 xor 1 11111111 -> 11111110 -dqxor073 xor 1 1111111 -> 1111110 -dqxor074 xor 1 111111 -> 111110 -dqxor075 xor 1 11111 -> 11110 -dqxor076 xor 1 1111 -> 1110 -dqxor077 xor 1 111 -> 110 -dqxor078 xor 1 11 -> 10 -dqxor079 xor 1 1 -> 0 - -dqxor080 xor 0 1111111111 -> 1111111111 -dqxor081 xor 0 111111111 -> 111111111 -dqxor082 xor 0 11111111 -> 11111111 -dqxor083 xor 0 1111111 -> 1111111 -dqxor084 xor 0 111111 -> 111111 -dqxor085 xor 0 11111 -> 11111 -dqxor086 xor 0 1111 -> 1111 -dqxor087 xor 0 111 -> 111 -dqxor088 xor 0 11 -> 11 -dqxor089 xor 0 1 -> 1 - -dqxor090 xor 011111111 111101111 -> 100010000 -dqxor091 xor 101111111 111101111 -> 10010000 -dqxor092 xor 110111111 111101111 -> 1010000 -dqxor093 xor 111011111 111101111 -> 110000 -dqxor094 xor 111101111 111101111 -> 0 -dqxor095 xor 111110111 111101111 -> 11000 -dqxor096 xor 111111011 111101111 -> 10100 -dqxor097 xor 111111101 111101111 -> 10010 -dqxor098 xor 111111110 111101111 -> 10001 - -dqxor100 xor 111101111 011111111 -> 100010000 -dqxor101 xor 111101111 101111111 -> 10010000 -dqxor102 xor 111101111 110111111 -> 1010000 -dqxor103 xor 111101111 111011111 -> 110000 -dqxor104 xor 111101111 111101111 -> 0 -dqxor105 xor 111101111 111110111 -> 11000 -dqxor106 xor 111101111 111111011 -> 10100 -dqxor107 xor 111101111 111111101 -> 10010 -dqxor108 xor 111101111 111111110 -> 10001 - --- non-0/1 should not be accepted, nor should signs -dqxor220 xor 111111112 111111111 -> NaN Invalid_operation -dqxor221 xor 333333333 333333333 -> NaN Invalid_operation -dqxor222 xor 555555555 555555555 -> NaN Invalid_operation -dqxor223 xor 777777777 777777777 -> NaN Invalid_operation -dqxor224 xor 999999999 999999999 -> NaN Invalid_operation -dqxor225 xor 222222222 999999999 -> NaN Invalid_operation -dqxor226 xor 444444444 999999999 -> NaN Invalid_operation -dqxor227 xor 666666666 999999999 -> NaN Invalid_operation -dqxor228 xor 888888888 999999999 -> NaN Invalid_operation -dqxor229 xor 999999999 222222222 -> NaN Invalid_operation -dqxor230 xor 999999999 444444444 -> NaN Invalid_operation -dqxor231 xor 999999999 666666666 -> NaN Invalid_operation -dqxor232 xor 999999999 888888888 -> NaN Invalid_operation --- a few randoms -dqxor240 xor 567468689 -934981942 -> NaN Invalid_operation -dqxor241 xor 567367689 934981942 -> NaN Invalid_operation -dqxor242 xor -631917772 -706014634 -> NaN Invalid_operation -dqxor243 xor -756253257 138579234 -> NaN Invalid_operation -dqxor244 xor 835590149 567435400 -> NaN Invalid_operation --- test MSD -dqxor250 xor 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqxor251 xor 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqxor252 xor 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqxor253 xor 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation -dqxor254 xor 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqxor255 xor 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqxor256 xor 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqxor257 xor 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation -dqxor258 xor 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqxor259 xor 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqxor260 xor 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqxor261 xor 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation -dqxor262 xor 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation -dqxor263 xor 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation -dqxor264 xor 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation -dqxor265 xor 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation --- test MSD-1 -dqxor270 xor 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation -dqxor271 xor 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation -dqxor272 xor 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation -dqxor273 xor 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation -dqxor274 xor 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation -dqxor275 xor 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation -dqxor276 xor 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation -dqxor277 xor 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation --- test LSD -dqxor280 xor 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation -dqxor281 xor 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation -dqxor282 xor 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation -dqxor283 xor 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation -dqxor284 xor 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation -dqxor285 xor 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation -dqxor286 xor 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation -dqxor287 xor 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation --- test Middie -dqxor288 xor 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation -dqxor289 xor 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation -dqxor290 xor 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation -dqxor291 xor 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation -dqxor292 xor 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation -dqxor293 xor 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation -dqxor294 xor 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation -dqxor295 xor 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation --- signs -dqxor296 xor -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation -dqxor297 xor -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation -dqxor298 xor 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation -dqxor299 xor 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 1000001001001001001001000010000100 - --- Nmax, Nmin, Ntiny-like -dqxor331 xor 2 9.99999999E+999 -> NaN Invalid_operation -dqxor332 xor 3 1E-999 -> NaN Invalid_operation -dqxor333 xor 4 1.00000000E-2821 -> NaN Invalid_operation -dqxor334 xor 5 1E-900 -> NaN Invalid_operation -dqxor335 xor 6 -1E-900 -> NaN Invalid_operation -dqxor336 xor 7 -1.00000000E-999 -> NaN Invalid_operation -dqxor337 xor 8 -1E-999 -> NaN Invalid_operation -dqxor338 xor 9 -9.99999999E+999 -> NaN Invalid_operation -dqxor341 xor 9.99999999E+999 -18 -> NaN Invalid_operation -dqxor342 xor 1E-999 01 -> NaN Invalid_operation -dqxor343 xor 1.00000000E-999 -18 -> NaN Invalid_operation -dqxor344 xor 1E-908 18 -> NaN Invalid_operation -dqxor345 xor -1E-907 -10 -> NaN Invalid_operation -dqxor346 xor -1.00000000E-999 18 -> NaN Invalid_operation -dqxor347 xor -1E-999 10 -> NaN Invalid_operation -dqxor348 xor -9.99999999E+2991 -18 -> NaN Invalid_operation - --- A few other non-integers -dqxor361 xor 1.0 1 -> NaN Invalid_operation -dqxor362 xor 1E+1 1 -> NaN Invalid_operation -dqxor363 xor 0.0 1 -> NaN Invalid_operation -dqxor364 xor 0E+1 1 -> NaN Invalid_operation -dqxor365 xor 9.9 1 -> NaN Invalid_operation -dqxor366 xor 9E+1 1 -> NaN Invalid_operation -dqxor371 xor 0 1.0 -> NaN Invalid_operation -dqxor372 xor 0 1E+1 -> NaN Invalid_operation -dqxor373 xor 0 0.0 -> NaN Invalid_operation -dqxor374 xor 0 0E+1 -> NaN Invalid_operation -dqxor375 xor 0 9.9 -> NaN Invalid_operation -dqxor376 xor 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -dqxor780 xor -Inf -Inf -> NaN Invalid_operation -dqxor781 xor -Inf -1000 -> NaN Invalid_operation -dqxor782 xor -Inf -1 -> NaN Invalid_operation -dqxor783 xor -Inf -0 -> NaN Invalid_operation -dqxor784 xor -Inf 0 -> NaN Invalid_operation -dqxor785 xor -Inf 1 -> NaN Invalid_operation -dqxor786 xor -Inf 1000 -> NaN Invalid_operation -dqxor787 xor -1000 -Inf -> NaN Invalid_operation -dqxor788 xor -Inf -Inf -> NaN Invalid_operation -dqxor789 xor -1 -Inf -> NaN Invalid_operation -dqxor790 xor -0 -Inf -> NaN Invalid_operation -dqxor791 xor 0 -Inf -> NaN Invalid_operation -dqxor792 xor 1 -Inf -> NaN Invalid_operation -dqxor793 xor 1000 -Inf -> NaN Invalid_operation -dqxor794 xor Inf -Inf -> NaN Invalid_operation - -dqxor800 xor Inf -Inf -> NaN Invalid_operation -dqxor801 xor Inf -1000 -> NaN Invalid_operation -dqxor802 xor Inf -1 -> NaN Invalid_operation -dqxor803 xor Inf -0 -> NaN Invalid_operation -dqxor804 xor Inf 0 -> NaN Invalid_operation -dqxor805 xor Inf 1 -> NaN Invalid_operation -dqxor806 xor Inf 1000 -> NaN Invalid_operation -dqxor807 xor Inf Inf -> NaN Invalid_operation -dqxor808 xor -1000 Inf -> NaN Invalid_operation -dqxor809 xor -Inf Inf -> NaN Invalid_operation -dqxor810 xor -1 Inf -> NaN Invalid_operation -dqxor811 xor -0 Inf -> NaN Invalid_operation -dqxor812 xor 0 Inf -> NaN Invalid_operation -dqxor813 xor 1 Inf -> NaN Invalid_operation -dqxor814 xor 1000 Inf -> NaN Invalid_operation -dqxor815 xor Inf Inf -> NaN Invalid_operation - -dqxor821 xor NaN -Inf -> NaN Invalid_operation -dqxor822 xor NaN -1000 -> NaN Invalid_operation -dqxor823 xor NaN -1 -> NaN Invalid_operation -dqxor824 xor NaN -0 -> NaN Invalid_operation -dqxor825 xor NaN 0 -> NaN Invalid_operation -dqxor826 xor NaN 1 -> NaN Invalid_operation -dqxor827 xor NaN 1000 -> NaN Invalid_operation -dqxor828 xor NaN Inf -> NaN Invalid_operation -dqxor829 xor NaN NaN -> NaN Invalid_operation -dqxor830 xor -Inf NaN -> NaN Invalid_operation -dqxor831 xor -1000 NaN -> NaN Invalid_operation -dqxor832 xor -1 NaN -> NaN Invalid_operation -dqxor833 xor -0 NaN -> NaN Invalid_operation -dqxor834 xor 0 NaN -> NaN Invalid_operation -dqxor835 xor 1 NaN -> NaN Invalid_operation -dqxor836 xor 1000 NaN -> NaN Invalid_operation -dqxor837 xor Inf NaN -> NaN Invalid_operation - -dqxor841 xor sNaN -Inf -> NaN Invalid_operation -dqxor842 xor sNaN -1000 -> NaN Invalid_operation -dqxor843 xor sNaN -1 -> NaN Invalid_operation -dqxor844 xor sNaN -0 -> NaN Invalid_operation -dqxor845 xor sNaN 0 -> NaN Invalid_operation -dqxor846 xor sNaN 1 -> NaN Invalid_operation -dqxor847 xor sNaN 1000 -> NaN Invalid_operation -dqxor848 xor sNaN NaN -> NaN Invalid_operation -dqxor849 xor sNaN sNaN -> NaN Invalid_operation -dqxor850 xor NaN sNaN -> NaN Invalid_operation -dqxor851 xor -Inf sNaN -> NaN Invalid_operation -dqxor852 xor -1000 sNaN -> NaN Invalid_operation -dqxor853 xor -1 sNaN -> NaN Invalid_operation -dqxor854 xor -0 sNaN -> NaN Invalid_operation -dqxor855 xor 0 sNaN -> NaN Invalid_operation -dqxor856 xor 1 sNaN -> NaN Invalid_operation -dqxor857 xor 1000 sNaN -> NaN Invalid_operation -dqxor858 xor Inf sNaN -> NaN Invalid_operation -dqxor859 xor NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -dqxor861 xor NaN1 -Inf -> NaN Invalid_operation -dqxor862 xor +NaN2 -1000 -> NaN Invalid_operation -dqxor863 xor NaN3 1000 -> NaN Invalid_operation -dqxor864 xor NaN4 Inf -> NaN Invalid_operation -dqxor865 xor NaN5 +NaN6 -> NaN Invalid_operation -dqxor866 xor -Inf NaN7 -> NaN Invalid_operation -dqxor867 xor -1000 NaN8 -> NaN Invalid_operation -dqxor868 xor 1000 NaN9 -> NaN Invalid_operation -dqxor869 xor Inf +NaN10 -> NaN Invalid_operation -dqxor871 xor sNaN11 -Inf -> NaN Invalid_operation -dqxor872 xor sNaN12 -1000 -> NaN Invalid_operation -dqxor873 xor sNaN13 1000 -> NaN Invalid_operation -dqxor874 xor sNaN14 NaN17 -> NaN Invalid_operation -dqxor875 xor sNaN15 sNaN18 -> NaN Invalid_operation -dqxor876 xor NaN16 sNaN19 -> NaN Invalid_operation -dqxor877 xor -Inf +sNaN20 -> NaN Invalid_operation -dqxor878 xor -1000 sNaN21 -> NaN Invalid_operation -dqxor879 xor 1000 sNaN22 -> NaN Invalid_operation -dqxor880 xor Inf sNaN23 -> NaN Invalid_operation -dqxor881 xor +NaN25 +sNaN24 -> NaN Invalid_operation -dqxor882 xor -NaN26 NaN28 -> NaN Invalid_operation -dqxor883 xor -sNaN27 sNaN29 -> NaN Invalid_operation -dqxor884 xor 1000 -NaN30 -> NaN Invalid_operation -dqxor885 xor 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- dqXor.decTest -- digitwise logical XOR for decQuads -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +clamp: 1 +precision: 34 +maxExponent: 6144 +minExponent: -6143 +rounding: half_even + +-- Sanity check (truth table) +dqxor001 xor 0 0 -> 0 +dqxor002 xor 0 1 -> 1 +dqxor003 xor 1 0 -> 1 +dqxor004 xor 1 1 -> 0 +dqxor005 xor 1100 1010 -> 110 +-- and at msd and msd-1 +dqxor006 xor 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqxor007 xor 0000000000000000000000000000000000 1000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqxor008 xor 1000000000000000000000000000000000 0000000000000000000000000000000000 -> 1000000000000000000000000000000000 +dqxor009 xor 1000000000000000000000000000000000 1000000000000000000000000000000000 -> 0 +dqxor010 xor 0000000000000000000000000000000000 0000000000000000000000000000000000 -> 0 +dqxor011 xor 0000000000000000000000000000000000 0100000000000000000000000000000000 -> 100000000000000000000000000000000 +dqxor012 xor 0100000000000000000000000000000000 0000000000000000000000000000000000 -> 100000000000000000000000000000000 +dqxor013 xor 0100000000000000000000000000000000 0100000000000000000000000000000000 -> 0 + +-- Various lengths +-- 1234567890123456789012345678901234 +dqxor601 xor 0111111111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000000000 +dqxor602 xor 1011111111111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000000000 +dqxor603 xor 1101111111111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000000000 +dqxor604 xor 1110111111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000000 +dqxor605 xor 1111011111111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000000 +dqxor606 xor 1111101111111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000000 +dqxor607 xor 1111110111111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000000 +dqxor608 xor 1111111011111111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000000 +dqxor609 xor 1111111101111111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000000 +dqxor610 xor 1111111110111111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000000 +dqxor611 xor 1111111111011111111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000000 +dqxor612 xor 1111111111101111111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000000 +dqxor613 xor 1111111111110111111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000000 +dqxor614 xor 1111111111111011111111111111111111 1111111111111111111111111111111111 -> 100000000000000000000 +dqxor615 xor 1111111111111101111111111111111111 1111111111111111111111111111111111 -> 10000000000000000000 +dqxor616 xor 1111111111111110111111111111111111 1111111111111111111111111111111111 -> 1000000000000000000 +dqxor617 xor 1111111111111111011111111111111111 1111111111111111111111111111111111 -> 100000000000000000 +dqxor618 xor 1111111111111111101111111111111111 1111111111111111111111111111111111 -> 10000000000000000 +dqxor619 xor 1111111111111111110111111111111111 1111111111111111111111111111111111 -> 1000000000000000 +dqxor620 xor 1111111111111111111011111111111111 1111111111111111111111111111111111 -> 100000000000000 +dqxor621 xor 1111111111111111111101111111111111 1111111111111111111111111111111111 -> 10000000000000 +dqxor622 xor 1111111111111111111110111111111111 1111111111111111111111111111111111 -> 1000000000000 +dqxor623 xor 1111111111111111111111011111111111 1111111111111111111111111111111111 -> 100000000000 +dqxor624 xor 1111111111111111111111101111111111 1111111111111111111111111111111111 -> 10000000000 +dqxor625 xor 1111111111111111111111110111111111 1111111111111111111111111111111111 -> 1000000000 +dqxor626 xor 1111111111111111111111111011111111 1111111111111111111111111111111111 -> 100000000 +dqxor627 xor 1111111111111111111111111101111111 1111111111111111111111111111111111 -> 10000000 +dqxor628 xor 1111111111111111111111111110111111 1111111111111111111111111111111111 -> 1000000 +dqxor629 xor 1111111111111111111111111111011111 1111111111111111111111111111111111 -> 100000 +dqxor630 xor 1111111111111111111111111111101111 1111111111111111111111111111111111 -> 10000 +dqxor631 xor 1111111111111111111111111111110111 1111111111111111111111111111111111 -> 1000 +dqxor632 xor 1111111111111111111111111111111011 1111111111111111111111111111111111 -> 100 +dqxor633 xor 1111111111111111111111111111111101 1111111111111111111111111111111111 -> 10 +dqxor634 xor 1111111111111111111111111111111110 1111111111111111111111111111111111 -> 1 + +dqxor641 xor 1111111111111111111111111111111111 0111111111111111111111111111111111 -> 1000000000000000000000000000000000 +dqxor642 xor 1111111111111111111111111111111111 1011111111111111111111111111111111 -> 100000000000000000000000000000000 +dqxor643 xor 1111111111111111111111111111111111 1101111111111111111111111111111111 -> 10000000000000000000000000000000 +dqxor644 xor 1111111111111111111111111111111111 1110111111111111111111111111111111 -> 1000000000000000000000000000000 +dqxor645 xor 1111111111111111111111111111111111 1111011111111111111111111111111111 -> 100000000000000000000000000000 +dqxor646 xor 1111111111111111111111111111111111 1111101111111111111111111111111111 -> 10000000000000000000000000000 +dqxor647 xor 1111111111111111111111111111111111 1111110111111111111111111111111111 -> 1000000000000000000000000000 +dqxor648 xor 1111111111111111111111111111111111 1111111011111111111111111111111111 -> 100000000000000000000000000 +dqxor649 xor 1111111111111111111111111111111111 1111111101111111111111111111111111 -> 10000000000000000000000000 +dqxor650 xor 1111111111111111111111111111111111 1111111110111111111111111111111111 -> 1000000000000000000000000 +dqxor651 xor 1111111111111111111111111111111111 1111111111011111111111111111111111 -> 100000000000000000000000 +dqxor652 xor 1111111111111111111111111111111111 1111111111101111111111111111111111 -> 10000000000000000000000 +dqxor653 xor 1111111111111111111111111111111111 1111111111110111111111111111111111 -> 1000000000000000000000 +dqxor654 xor 1111111111111111111111111111111111 1111111111111011111111111111111111 -> 100000000000000000000 +dqxor655 xor 1111111111111111111111111111111111 1111111111111101111111111111111111 -> 10000000000000000000 +dqxor656 xor 1111111111111111111111111111111111 1111111111111110111111111111111111 -> 1000000000000000000 +dqxor657 xor 1111111111111111111111111111111111 1111111111111111011111111111111111 -> 100000000000000000 +dqxor658 xor 1111111111111111111111111111111111 1111111111111111101111111111111111 -> 10000000000000000 +dqxor659 xor 1111111111111111111111111111111111 1111111111111111110111111111111111 -> 1000000000000000 +dqxor660 xor 1111111111111111111111111111111111 1111111111111111111011111111111111 -> 100000000000000 +dqxor661 xor 1111111111111111111111111111111111 1111111111111111111101111111111111 -> 10000000000000 +dqxor662 xor 1111111111111111111111111111111111 1111111111111111111110111111111111 -> 1000000000000 +dqxor663 xor 1111111111111111111111111111111111 1111111111111111111111011111111111 -> 100000000000 +dqxor664 xor 1111111111111111111111111111111111 1111111111111111111111101111111111 -> 10000000000 +dqxor665 xor 1111111111111111111111111111111111 1111111111111111111111110111111111 -> 1000000000 +dqxor666 xor 1111111111111111111111111111111111 1111111111111111111111111011111111 -> 100000000 +dqxor667 xor 1111111111111111111111111111111111 1111111111111111111111111101111111 -> 10000000 +dqxor668 xor 1111111111111111111111111111111111 1111111111111111111111111110111111 -> 1000000 +dqxor669 xor 1111111111111111111111111111111111 1111111111111111111111111111011111 -> 100000 +dqxor670 xor 1111111111111111111111111111111111 1111111111111111111111111111101111 -> 10000 +dqxor671 xor 1111111111111111111111111111111111 1111111111111111111111111111110111 -> 1000 +dqxor672 xor 1111111111111111111111111111111111 1111111111111111111111111111111011 -> 100 +dqxor673 xor 1111111111111111111111111111111111 1111111111111111111111111111111101 -> 10 +dqxor674 xor 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1 +dqxor675 xor 0111111111111111111111111111111111 1111111111111111111111111111111110 -> 1000000000000000000000000000000001 +dqxor676 xor 1111111111111111111111111111111111 1111111111111111111111111111111110 -> 1 + + +dqxor021 xor 1111111110000000 1111111110000000 -> 0 +dqxor022 xor 111111110000000 111111110000000 -> 0 +dqxor023 xor 11111110000000 11111110000000 -> 0 +dqxor024 xor 1111110000000 1111110000000 -> 0 +dqxor025 xor 111110000000 111110000000 -> 0 +dqxor026 xor 11110000000 11110000000 -> 0 +dqxor027 xor 1110000000 1110000000 -> 0 +dqxor028 xor 110000000 110000000 -> 0 +dqxor029 xor 10000000 10000000 -> 0 +dqxor030 xor 1000000 1000000 -> 0 +dqxor031 xor 100000 100000 -> 0 +dqxor032 xor 10000 10000 -> 0 +dqxor033 xor 1000 1000 -> 0 +dqxor034 xor 100 100 -> 0 +dqxor035 xor 10 10 -> 0 +dqxor036 xor 1 1 -> 0 + +dqxor040 xor 111111111 111111111111 -> 111000000000 +dqxor041 xor 11111111 111111111111 -> 111100000000 +dqxor042 xor 11111111 111111111 -> 100000000 +dqxor043 xor 1111111 100000010 -> 101111101 +dqxor044 xor 111111 100000100 -> 100111011 +dqxor045 xor 11111 100001000 -> 100010111 +dqxor046 xor 1111 100010000 -> 100011111 +dqxor047 xor 111 100100000 -> 100100111 +dqxor048 xor 11 101000000 -> 101000011 +dqxor049 xor 1 110000000 -> 110000001 + +dqxor050 xor 1111111111 1 -> 1111111110 +dqxor051 xor 111111111 1 -> 111111110 +dqxor052 xor 11111111 1 -> 11111110 +dqxor053 xor 1111111 1 -> 1111110 +dqxor054 xor 111111 1 -> 111110 +dqxor055 xor 11111 1 -> 11110 +dqxor056 xor 1111 1 -> 1110 +dqxor057 xor 111 1 -> 110 +dqxor058 xor 11 1 -> 10 +dqxor059 xor 1 1 -> 0 + +dqxor060 xor 1111111111 0 -> 1111111111 +dqxor061 xor 111111111 0 -> 111111111 +dqxor062 xor 11111111 0 -> 11111111 +dqxor063 xor 1111111 0 -> 1111111 +dqxor064 xor 111111 0 -> 111111 +dqxor065 xor 11111 0 -> 11111 +dqxor066 xor 1111 0 -> 1111 +dqxor067 xor 111 0 -> 111 +dqxor068 xor 11 0 -> 11 +dqxor069 xor 1 0 -> 1 + +dqxor070 xor 1 1111111111 -> 1111111110 +dqxor071 xor 1 111111111 -> 111111110 +dqxor072 xor 1 11111111 -> 11111110 +dqxor073 xor 1 1111111 -> 1111110 +dqxor074 xor 1 111111 -> 111110 +dqxor075 xor 1 11111 -> 11110 +dqxor076 xor 1 1111 -> 1110 +dqxor077 xor 1 111 -> 110 +dqxor078 xor 1 11 -> 10 +dqxor079 xor 1 1 -> 0 + +dqxor080 xor 0 1111111111 -> 1111111111 +dqxor081 xor 0 111111111 -> 111111111 +dqxor082 xor 0 11111111 -> 11111111 +dqxor083 xor 0 1111111 -> 1111111 +dqxor084 xor 0 111111 -> 111111 +dqxor085 xor 0 11111 -> 11111 +dqxor086 xor 0 1111 -> 1111 +dqxor087 xor 0 111 -> 111 +dqxor088 xor 0 11 -> 11 +dqxor089 xor 0 1 -> 1 + +dqxor090 xor 011111111 111101111 -> 100010000 +dqxor091 xor 101111111 111101111 -> 10010000 +dqxor092 xor 110111111 111101111 -> 1010000 +dqxor093 xor 111011111 111101111 -> 110000 +dqxor094 xor 111101111 111101111 -> 0 +dqxor095 xor 111110111 111101111 -> 11000 +dqxor096 xor 111111011 111101111 -> 10100 +dqxor097 xor 111111101 111101111 -> 10010 +dqxor098 xor 111111110 111101111 -> 10001 + +dqxor100 xor 111101111 011111111 -> 100010000 +dqxor101 xor 111101111 101111111 -> 10010000 +dqxor102 xor 111101111 110111111 -> 1010000 +dqxor103 xor 111101111 111011111 -> 110000 +dqxor104 xor 111101111 111101111 -> 0 +dqxor105 xor 111101111 111110111 -> 11000 +dqxor106 xor 111101111 111111011 -> 10100 +dqxor107 xor 111101111 111111101 -> 10010 +dqxor108 xor 111101111 111111110 -> 10001 + +-- non-0/1 should not be accepted, nor should signs +dqxor220 xor 111111112 111111111 -> NaN Invalid_operation +dqxor221 xor 333333333 333333333 -> NaN Invalid_operation +dqxor222 xor 555555555 555555555 -> NaN Invalid_operation +dqxor223 xor 777777777 777777777 -> NaN Invalid_operation +dqxor224 xor 999999999 999999999 -> NaN Invalid_operation +dqxor225 xor 222222222 999999999 -> NaN Invalid_operation +dqxor226 xor 444444444 999999999 -> NaN Invalid_operation +dqxor227 xor 666666666 999999999 -> NaN Invalid_operation +dqxor228 xor 888888888 999999999 -> NaN Invalid_operation +dqxor229 xor 999999999 222222222 -> NaN Invalid_operation +dqxor230 xor 999999999 444444444 -> NaN Invalid_operation +dqxor231 xor 999999999 666666666 -> NaN Invalid_operation +dqxor232 xor 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +dqxor240 xor 567468689 -934981942 -> NaN Invalid_operation +dqxor241 xor 567367689 934981942 -> NaN Invalid_operation +dqxor242 xor -631917772 -706014634 -> NaN Invalid_operation +dqxor243 xor -756253257 138579234 -> NaN Invalid_operation +dqxor244 xor 835590149 567435400 -> NaN Invalid_operation +-- test MSD +dqxor250 xor 2000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqxor251 xor 7000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqxor252 xor 8000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqxor253 xor 9000000111000111000111000000000000 1000000111000111000111000000000000 -> NaN Invalid_operation +dqxor254 xor 2000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqxor255 xor 7000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqxor256 xor 8000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqxor257 xor 9000000111000111000111000000000000 0000000111000111000111000000000000 -> NaN Invalid_operation +dqxor258 xor 1000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqxor259 xor 1000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqxor260 xor 1000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqxor261 xor 1000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +dqxor262 xor 0000000111000111000111000000000000 2000000111000111000111000000000000 -> NaN Invalid_operation +dqxor263 xor 0000000111000111000111000000000000 7000000111000111000111000000000000 -> NaN Invalid_operation +dqxor264 xor 0000000111000111000111000000000000 8000000111000111000111000000000000 -> NaN Invalid_operation +dqxor265 xor 0000000111000111000111000000000000 9000000111000111000111000000000000 -> NaN Invalid_operation +-- test MSD-1 +dqxor270 xor 0200000111000111000111001000000000 1000000111000111000111100000000010 -> NaN Invalid_operation +dqxor271 xor 0700000111000111000111000100000000 1000000111000111000111010000000100 -> NaN Invalid_operation +dqxor272 xor 0800000111000111000111000010000000 1000000111000111000111001000001000 -> NaN Invalid_operation +dqxor273 xor 0900000111000111000111000001000000 1000000111000111000111000100010000 -> NaN Invalid_operation +dqxor274 xor 1000000111000111000111000000100000 0200000111000111000111000010100000 -> NaN Invalid_operation +dqxor275 xor 1000000111000111000111000000010000 0700000111000111000111000001000000 -> NaN Invalid_operation +dqxor276 xor 1000000111000111000111000000001000 0800000111000111000111000010100000 -> NaN Invalid_operation +dqxor277 xor 1000000111000111000111000000000100 0900000111000111000111000000010000 -> NaN Invalid_operation +-- test LSD +dqxor280 xor 0010000111000111000111000000000002 1000000111000111000111000100000001 -> NaN Invalid_operation +dqxor281 xor 0001000111000111000111000000000007 1000000111000111000111001000000011 -> NaN Invalid_operation +dqxor282 xor 0000000111000111000111100000000008 1000000111000111000111010000000001 -> NaN Invalid_operation +dqxor283 xor 0000000111000111000111010000000009 1000000111000111000111100000000001 -> NaN Invalid_operation +dqxor284 xor 1000000111000111000111001000000000 0001000111000111000111000000000002 -> NaN Invalid_operation +dqxor285 xor 1000000111000111000111000100000000 0010000111000111000111000000000007 -> NaN Invalid_operation +dqxor286 xor 1000000111000111000111000010000000 0100000111000111000111000000000008 -> NaN Invalid_operation +dqxor287 xor 1000000111000111000111000001000000 1000000111000111000111000000000009 -> NaN Invalid_operation +-- test Middie +dqxor288 xor 0010000111000111000111000020000000 1000000111000111000111001000000000 -> NaN Invalid_operation +dqxor289 xor 0001000111000111000111000070000001 1000000111000111000111000100000000 -> NaN Invalid_operation +dqxor290 xor 0000000111000111000111100080000010 1000000111000111000111000010000000 -> NaN Invalid_operation +dqxor291 xor 0000000111000111000111010090000100 1000000111000111000111000001000000 -> NaN Invalid_operation +dqxor292 xor 1000000111000111000111001000001000 0000000111000111000111000020100000 -> NaN Invalid_operation +dqxor293 xor 1000000111000111000111000100010000 0000000111000111000111000070010000 -> NaN Invalid_operation +dqxor294 xor 1000000111000111000111000010100000 0000000111000111000111000080001000 -> NaN Invalid_operation +dqxor295 xor 1000000111000111000111000001000000 0000000111000111000111000090000100 -> NaN Invalid_operation +-- signs +dqxor296 xor -1000000111000111000111000001000000 -0000001110001110001110010000000100 -> NaN Invalid_operation +dqxor297 xor -1000000111000111000111000001000000 0000001110001110001110000010000100 -> NaN Invalid_operation +dqxor298 xor 1000000111000111000111000001000000 -0000001110001110001110001000000100 -> NaN Invalid_operation +dqxor299 xor 1000000111000111000111000001000000 0000001110001110001110000011000100 -> 1000001001001001001001000010000100 + +-- Nmax, Nmin, Ntiny-like +dqxor331 xor 2 9.99999999E+999 -> NaN Invalid_operation +dqxor332 xor 3 1E-999 -> NaN Invalid_operation +dqxor333 xor 4 1.00000000E-2821 -> NaN Invalid_operation +dqxor334 xor 5 1E-900 -> NaN Invalid_operation +dqxor335 xor 6 -1E-900 -> NaN Invalid_operation +dqxor336 xor 7 -1.00000000E-999 -> NaN Invalid_operation +dqxor337 xor 8 -1E-999 -> NaN Invalid_operation +dqxor338 xor 9 -9.99999999E+999 -> NaN Invalid_operation +dqxor341 xor 9.99999999E+999 -18 -> NaN Invalid_operation +dqxor342 xor 1E-999 01 -> NaN Invalid_operation +dqxor343 xor 1.00000000E-999 -18 -> NaN Invalid_operation +dqxor344 xor 1E-908 18 -> NaN Invalid_operation +dqxor345 xor -1E-907 -10 -> NaN Invalid_operation +dqxor346 xor -1.00000000E-999 18 -> NaN Invalid_operation +dqxor347 xor -1E-999 10 -> NaN Invalid_operation +dqxor348 xor -9.99999999E+2991 -18 -> NaN Invalid_operation + +-- A few other non-integers +dqxor361 xor 1.0 1 -> NaN Invalid_operation +dqxor362 xor 1E+1 1 -> NaN Invalid_operation +dqxor363 xor 0.0 1 -> NaN Invalid_operation +dqxor364 xor 0E+1 1 -> NaN Invalid_operation +dqxor365 xor 9.9 1 -> NaN Invalid_operation +dqxor366 xor 9E+1 1 -> NaN Invalid_operation +dqxor371 xor 0 1.0 -> NaN Invalid_operation +dqxor372 xor 0 1E+1 -> NaN Invalid_operation +dqxor373 xor 0 0.0 -> NaN Invalid_operation +dqxor374 xor 0 0E+1 -> NaN Invalid_operation +dqxor375 xor 0 9.9 -> NaN Invalid_operation +dqxor376 xor 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +dqxor780 xor -Inf -Inf -> NaN Invalid_operation +dqxor781 xor -Inf -1000 -> NaN Invalid_operation +dqxor782 xor -Inf -1 -> NaN Invalid_operation +dqxor783 xor -Inf -0 -> NaN Invalid_operation +dqxor784 xor -Inf 0 -> NaN Invalid_operation +dqxor785 xor -Inf 1 -> NaN Invalid_operation +dqxor786 xor -Inf 1000 -> NaN Invalid_operation +dqxor787 xor -1000 -Inf -> NaN Invalid_operation +dqxor788 xor -Inf -Inf -> NaN Invalid_operation +dqxor789 xor -1 -Inf -> NaN Invalid_operation +dqxor790 xor -0 -Inf -> NaN Invalid_operation +dqxor791 xor 0 -Inf -> NaN Invalid_operation +dqxor792 xor 1 -Inf -> NaN Invalid_operation +dqxor793 xor 1000 -Inf -> NaN Invalid_operation +dqxor794 xor Inf -Inf -> NaN Invalid_operation + +dqxor800 xor Inf -Inf -> NaN Invalid_operation +dqxor801 xor Inf -1000 -> NaN Invalid_operation +dqxor802 xor Inf -1 -> NaN Invalid_operation +dqxor803 xor Inf -0 -> NaN Invalid_operation +dqxor804 xor Inf 0 -> NaN Invalid_operation +dqxor805 xor Inf 1 -> NaN Invalid_operation +dqxor806 xor Inf 1000 -> NaN Invalid_operation +dqxor807 xor Inf Inf -> NaN Invalid_operation +dqxor808 xor -1000 Inf -> NaN Invalid_operation +dqxor809 xor -Inf Inf -> NaN Invalid_operation +dqxor810 xor -1 Inf -> NaN Invalid_operation +dqxor811 xor -0 Inf -> NaN Invalid_operation +dqxor812 xor 0 Inf -> NaN Invalid_operation +dqxor813 xor 1 Inf -> NaN Invalid_operation +dqxor814 xor 1000 Inf -> NaN Invalid_operation +dqxor815 xor Inf Inf -> NaN Invalid_operation + +dqxor821 xor NaN -Inf -> NaN Invalid_operation +dqxor822 xor NaN -1000 -> NaN Invalid_operation +dqxor823 xor NaN -1 -> NaN Invalid_operation +dqxor824 xor NaN -0 -> NaN Invalid_operation +dqxor825 xor NaN 0 -> NaN Invalid_operation +dqxor826 xor NaN 1 -> NaN Invalid_operation +dqxor827 xor NaN 1000 -> NaN Invalid_operation +dqxor828 xor NaN Inf -> NaN Invalid_operation +dqxor829 xor NaN NaN -> NaN Invalid_operation +dqxor830 xor -Inf NaN -> NaN Invalid_operation +dqxor831 xor -1000 NaN -> NaN Invalid_operation +dqxor832 xor -1 NaN -> NaN Invalid_operation +dqxor833 xor -0 NaN -> NaN Invalid_operation +dqxor834 xor 0 NaN -> NaN Invalid_operation +dqxor835 xor 1 NaN -> NaN Invalid_operation +dqxor836 xor 1000 NaN -> NaN Invalid_operation +dqxor837 xor Inf NaN -> NaN Invalid_operation + +dqxor841 xor sNaN -Inf -> NaN Invalid_operation +dqxor842 xor sNaN -1000 -> NaN Invalid_operation +dqxor843 xor sNaN -1 -> NaN Invalid_operation +dqxor844 xor sNaN -0 -> NaN Invalid_operation +dqxor845 xor sNaN 0 -> NaN Invalid_operation +dqxor846 xor sNaN 1 -> NaN Invalid_operation +dqxor847 xor sNaN 1000 -> NaN Invalid_operation +dqxor848 xor sNaN NaN -> NaN Invalid_operation +dqxor849 xor sNaN sNaN -> NaN Invalid_operation +dqxor850 xor NaN sNaN -> NaN Invalid_operation +dqxor851 xor -Inf sNaN -> NaN Invalid_operation +dqxor852 xor -1000 sNaN -> NaN Invalid_operation +dqxor853 xor -1 sNaN -> NaN Invalid_operation +dqxor854 xor -0 sNaN -> NaN Invalid_operation +dqxor855 xor 0 sNaN -> NaN Invalid_operation +dqxor856 xor 1 sNaN -> NaN Invalid_operation +dqxor857 xor 1000 sNaN -> NaN Invalid_operation +dqxor858 xor Inf sNaN -> NaN Invalid_operation +dqxor859 xor NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +dqxor861 xor NaN1 -Inf -> NaN Invalid_operation +dqxor862 xor +NaN2 -1000 -> NaN Invalid_operation +dqxor863 xor NaN3 1000 -> NaN Invalid_operation +dqxor864 xor NaN4 Inf -> NaN Invalid_operation +dqxor865 xor NaN5 +NaN6 -> NaN Invalid_operation +dqxor866 xor -Inf NaN7 -> NaN Invalid_operation +dqxor867 xor -1000 NaN8 -> NaN Invalid_operation +dqxor868 xor 1000 NaN9 -> NaN Invalid_operation +dqxor869 xor Inf +NaN10 -> NaN Invalid_operation +dqxor871 xor sNaN11 -Inf -> NaN Invalid_operation +dqxor872 xor sNaN12 -1000 -> NaN Invalid_operation +dqxor873 xor sNaN13 1000 -> NaN Invalid_operation +dqxor874 xor sNaN14 NaN17 -> NaN Invalid_operation +dqxor875 xor sNaN15 sNaN18 -> NaN Invalid_operation +dqxor876 xor NaN16 sNaN19 -> NaN Invalid_operation +dqxor877 xor -Inf +sNaN20 -> NaN Invalid_operation +dqxor878 xor -1000 sNaN21 -> NaN Invalid_operation +dqxor879 xor 1000 sNaN22 -> NaN Invalid_operation +dqxor880 xor Inf sNaN23 -> NaN Invalid_operation +dqxor881 xor +NaN25 +sNaN24 -> NaN Invalid_operation +dqxor882 xor -NaN26 NaN28 -> NaN Invalid_operation +dqxor883 xor -sNaN27 sNaN29 -> NaN Invalid_operation +dqxor884 xor 1000 -NaN30 -> NaN Invalid_operation +dqxor885 xor 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/dsBase.decTest b/Lib/test/decimaltestdata/dsBase.decTest index 5e5e5a5d91c..8ac45fc5521 100644 --- a/Lib/test/decimaltestdata/dsBase.decTest +++ b/Lib/test/decimaltestdata/dsBase.decTest @@ -1,1062 +1,1062 @@ ------------------------------------------------------------------------- --- dsBase.decTest -- base decSingle <--> string conversions -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This file tests base conversions from string to a decimal number --- and back to a string (in Scientific form) - --- Note that unlike other operations the operand is subject to rounding --- to conform to emax and precision settings (that is, numbers will --- conform to rules and exponent will be in permitted range). The --- 'left hand side', therefore, may have numbers that cannot be --- represented in a decSingle. Some testcases go to the limit of the --- next-wider format, and hence these testcases may also be used to --- test narrowing and widening operations. - -extended: 1 -clamp: 1 -precision: 7 -maxExponent: 96 -minExponent: -95 -rounding: half_even - -dsbas001 toSci 0 -> 0 -dsbas002 toSci 1 -> 1 -dsbas003 toSci 1.0 -> 1.0 -dsbas004 toSci 1.00 -> 1.00 -dsbas005 toSci 10 -> 10 -dsbas006 toSci 1000 -> 1000 -dsbas007 toSci 10.0 -> 10.0 -dsbas008 toSci 10.1 -> 10.1 -dsbas009 toSci 10.4 -> 10.4 -dsbas010 toSci 10.5 -> 10.5 -dsbas011 toSci 10.6 -> 10.6 -dsbas012 toSci 10.9 -> 10.9 -dsbas013 toSci 11.0 -> 11.0 -dsbas014 toSci 1.234 -> 1.234 -dsbas015 toSci 0.123 -> 0.123 -dsbas016 toSci 0.012 -> 0.012 -dsbas017 toSci -0 -> -0 -dsbas018 toSci -0.0 -> -0.0 -dsbas019 toSci -00.00 -> -0.00 - -dsbas021 toSci -1 -> -1 -dsbas022 toSci -1.0 -> -1.0 -dsbas023 toSci -0.1 -> -0.1 -dsbas024 toSci -9.1 -> -9.1 -dsbas025 toSci -9.11 -> -9.11 -dsbas026 toSci -9.119 -> -9.119 -dsbas027 toSci -9.999 -> -9.999 - -dsbas030 toSci '1234.567' -> '1234.567' -dsbas031 toSci '1234.000' -> '1234.000' -dsbas032 toSci '1234912' -> '1234912' -dsbas033 toSci '0.00001234567' -> '0.00001234567' -dsbas034 toSci '0.000001234567' -> '0.000001234567' -dsbas035 toSci '0.0000001234567' -> '1.234567E-7' -dsbas036 toSci '0.00000001234567' -> '1.234567E-8' - -dsbas037 toSci '0.1234564' -> '0.1234564' -dsbas038 toSci '0.1234565' -> '0.1234565' - --- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) -dsbsn001 toSci -9.999999E+96 -> -9.999999E+96 -dsbsn002 toSci -1E-95 -> -1E-95 -dsbsn003 toSci -1E-101 -> -1E-101 Subnormal -dsbsn004 toSci -0 -> -0 -dsbsn005 toSci +0 -> 0 -dsbsn006 toSci +1E-101 -> 1E-101 Subnormal -dsbsn007 toSci +1E-95 -> 1E-95 -dsbsn008 toSci +9.999999E+96 -> 9.999999E+96 - --- String [many more examples are implicitly tested elsewhere] --- strings without E cannot generate E in result -dsbas040 toSci "12" -> '12' -dsbas041 toSci "-76" -> '-76' -dsbas042 toSci "12.76" -> '12.76' -dsbas043 toSci "+12.76" -> '12.76' -dsbas044 toSci "012.76" -> '12.76' -dsbas045 toSci "+0.003" -> '0.003' -dsbas046 toSci "17." -> '17' -dsbas047 toSci ".5" -> '0.5' -dsbas048 toSci "044" -> '44' -dsbas049 toSci "0044" -> '44' -dsbas050 toSci "0.0005" -> '0.0005' -dsbas051 toSci "00.00005" -> '0.00005' -dsbas052 toSci "0.000005" -> '0.000005' -dsbas053 toSci "0.0000050" -> '0.0000050' -dsbas054 toSci "0.0000005" -> '5E-7' -dsbas055 toSci "0.00000005" -> '5E-8' -dsbas056 toSci "12678.54" -> '12678.54' -dsbas057 toSci "2678.543" -> '2678.543' -dsbas058 toSci "345678.5" -> '345678.5' -dsbas059 toSci "0678.5432" -> '678.5432' -dsbas060 toSci "678.5432" -> '678.5432' -dsbas061 toSci "+678.5432" -> '678.5432' -dsbas062 toSci "+0678.5432" -> '678.5432' -dsbas063 toSci "+00678.5432" -> '678.5432' -dsbas064 toSci "-678.5432" -> '-678.5432' -dsbas065 toSci "-0678.5432" -> '-678.5432' -dsbas066 toSci "-00678.5432" -> '-678.5432' --- examples -dsbas067 toSci "5E-6" -> '0.000005' -dsbas068 toSci "50E-7" -> '0.0000050' -dsbas069 toSci "5E-7" -> '5E-7' - --- [No exotics as no Unicode] - --- rounded with dots in all (including edge) places -dsbas071 toSci .1234567890123456 -> 0.1234568 Inexact Rounded -dsbas072 toSci 1.234567890123456 -> 1.234568 Inexact Rounded -dsbas073 toSci 12.34567890123456 -> 12.34568 Inexact Rounded -dsbas074 toSci 123.4567890123456 -> 123.4568 Inexact Rounded -dsbas075 toSci 1234.567890123456 -> 1234.568 Inexact Rounded -dsbas076 toSci 12345.67890123456 -> 12345.68 Inexact Rounded -dsbas077 toSci 123456.7890123456 -> 123456.8 Inexact Rounded -dsbas078 toSci 1234567.890123456 -> 1234568 Inexact Rounded -dsbas079 toSci 12345678.90123456 -> 1.234568E+7 Inexact Rounded -dsbas080 toSci 123456789.0123456 -> 1.234568E+8 Inexact Rounded -dsbas081 toSci 1234567890.123456 -> 1.234568E+9 Inexact Rounded -dsbas082 toSci 12345678901.23456 -> 1.234568E+10 Inexact Rounded -dsbas083 toSci 123456789012.3456 -> 1.234568E+11 Inexact Rounded -dsbas084 toSci 1234567890123.456 -> 1.234568E+12 Inexact Rounded -dsbas085 toSci 12345678901234.56 -> 1.234568E+13 Inexact Rounded -dsbas086 toSci 123456789012345.6 -> 1.234568E+14 Inexact Rounded -dsbas087 toSci 1234567890123456. -> 1.234568E+15 Inexact Rounded -dsbas088 toSci 1234567890123456 -> 1.234568E+15 Inexact Rounded - --- Numbers with E -dsbas130 toSci "0.000E-1" -> '0.0000' -dsbas131 toSci "0.000E-2" -> '0.00000' -dsbas132 toSci "0.000E-3" -> '0.000000' -dsbas133 toSci "0.000E-4" -> '0E-7' -dsbas134 toSci "0.00E-2" -> '0.0000' -dsbas135 toSci "0.00E-3" -> '0.00000' -dsbas136 toSci "0.00E-4" -> '0.000000' -dsbas137 toSci "0.00E-5" -> '0E-7' -dsbas138 toSci "+0E+9" -> '0E+9' -dsbas139 toSci "-0E+9" -> '-0E+9' -dsbas140 toSci "1E+9" -> '1E+9' -dsbas141 toSci "1e+09" -> '1E+9' -dsbas142 toSci "1E+90" -> '1E+90' -dsbas143 toSci "+1E+009" -> '1E+9' -dsbas144 toSci "0E+9" -> '0E+9' -dsbas145 toSci "1E+9" -> '1E+9' -dsbas146 toSci "1E+09" -> '1E+9' -dsbas147 toSci "1e+90" -> '1E+90' -dsbas148 toSci "1E+009" -> '1E+9' -dsbas149 toSci "000E+9" -> '0E+9' -dsbas150 toSci "1E9" -> '1E+9' -dsbas151 toSci "1e09" -> '1E+9' -dsbas152 toSci "1E90" -> '1E+90' -dsbas153 toSci "1E009" -> '1E+9' -dsbas154 toSci "0E9" -> '0E+9' -dsbas155 toSci "0.000e+0" -> '0.000' -dsbas156 toSci "0.000E-1" -> '0.0000' -dsbas157 toSci "4E+9" -> '4E+9' -dsbas158 toSci "44E+9" -> '4.4E+10' -dsbas159 toSci "0.73e-7" -> '7.3E-8' -dsbas160 toSci "00E+9" -> '0E+9' -dsbas161 toSci "00E-9" -> '0E-9' -dsbas162 toSci "10E+9" -> '1.0E+10' -dsbas163 toSci "10E+09" -> '1.0E+10' -dsbas164 toSci "10e+90" -> '1.0E+91' -dsbas165 toSci "10E+009" -> '1.0E+10' -dsbas166 toSci "100e+9" -> '1.00E+11' -dsbas167 toSci "100e+09" -> '1.00E+11' -dsbas168 toSci "100E+90" -> '1.00E+92' -dsbas169 toSci "100e+009" -> '1.00E+11' - -dsbas170 toSci "1.265" -> '1.265' -dsbas171 toSci "1.265E-20" -> '1.265E-20' -dsbas172 toSci "1.265E-8" -> '1.265E-8' -dsbas173 toSci "1.265E-4" -> '0.0001265' -dsbas174 toSci "1.265E-3" -> '0.001265' -dsbas175 toSci "1.265E-2" -> '0.01265' -dsbas176 toSci "1.265E-1" -> '0.1265' -dsbas177 toSci "1.265E-0" -> '1.265' -dsbas178 toSci "1.265E+1" -> '12.65' -dsbas179 toSci "1.265E+2" -> '126.5' -dsbas180 toSci "1.265E+3" -> '1265' -dsbas181 toSci "1.265E+4" -> '1.265E+4' -dsbas182 toSci "1.265E+8" -> '1.265E+8' -dsbas183 toSci "1.265E+20" -> '1.265E+20' - -dsbas190 toSci "12.65" -> '12.65' -dsbas191 toSci "12.65E-20" -> '1.265E-19' -dsbas192 toSci "12.65E-8" -> '1.265E-7' -dsbas193 toSci "12.65E-4" -> '0.001265' -dsbas194 toSci "12.65E-3" -> '0.01265' -dsbas195 toSci "12.65E-2" -> '0.1265' -dsbas196 toSci "12.65E-1" -> '1.265' -dsbas197 toSci "12.65E-0" -> '12.65' -dsbas198 toSci "12.65E+1" -> '126.5' -dsbas199 toSci "12.65E+2" -> '1265' -dsbas200 toSci "12.65E+3" -> '1.265E+4' -dsbas201 toSci "12.65E+4" -> '1.265E+5' -dsbas202 toSci "12.65E+8" -> '1.265E+9' -dsbas203 toSci "12.65E+20" -> '1.265E+21' - -dsbas210 toSci "126.5" -> '126.5' -dsbas211 toSci "126.5E-20" -> '1.265E-18' -dsbas212 toSci "126.5E-8" -> '0.000001265' -dsbas213 toSci "126.5E-4" -> '0.01265' -dsbas214 toSci "126.5E-3" -> '0.1265' -dsbas215 toSci "126.5E-2" -> '1.265' -dsbas216 toSci "126.5E-1" -> '12.65' -dsbas217 toSci "126.5E-0" -> '126.5' -dsbas218 toSci "126.5E+1" -> '1265' -dsbas219 toSci "126.5E+2" -> '1.265E+4' -dsbas220 toSci "126.5E+3" -> '1.265E+5' -dsbas221 toSci "126.5E+4" -> '1.265E+6' -dsbas222 toSci "126.5E+8" -> '1.265E+10' -dsbas223 toSci "126.5E+20" -> '1.265E+22' - -dsbas230 toSci "1265" -> '1265' -dsbas231 toSci "1265E-20" -> '1.265E-17' -dsbas232 toSci "1265E-8" -> '0.00001265' -dsbas233 toSci "1265E-4" -> '0.1265' -dsbas234 toSci "1265E-3" -> '1.265' -dsbas235 toSci "1265E-2" -> '12.65' -dsbas236 toSci "1265E-1" -> '126.5' -dsbas237 toSci "1265E-0" -> '1265' -dsbas238 toSci "1265E+1" -> '1.265E+4' -dsbas239 toSci "1265E+2" -> '1.265E+5' -dsbas240 toSci "1265E+3" -> '1.265E+6' -dsbas241 toSci "1265E+4" -> '1.265E+7' -dsbas242 toSci "1265E+8" -> '1.265E+11' -dsbas243 toSci "1265E+20" -> '1.265E+23' - -dsbas250 toSci "0.1265" -> '0.1265' -dsbas251 toSci "0.1265E-20" -> '1.265E-21' -dsbas252 toSci "0.1265E-8" -> '1.265E-9' -dsbas253 toSci "0.1265E-4" -> '0.00001265' -dsbas254 toSci "0.1265E-3" -> '0.0001265' -dsbas255 toSci "0.1265E-2" -> '0.001265' -dsbas256 toSci "0.1265E-1" -> '0.01265' -dsbas257 toSci "0.1265E-0" -> '0.1265' -dsbas258 toSci "0.1265E+1" -> '1.265' -dsbas259 toSci "0.1265E+2" -> '12.65' -dsbas260 toSci "0.1265E+3" -> '126.5' -dsbas261 toSci "0.1265E+4" -> '1265' -dsbas262 toSci "0.1265E+8" -> '1.265E+7' -dsbas263 toSci "0.1265E+20" -> '1.265E+19' - --- some more negative zeros [systematic tests below] -dsbas290 toSci "-0.000E-1" -> '-0.0000' -dsbas291 toSci "-0.000E-2" -> '-0.00000' -dsbas292 toSci "-0.000E-3" -> '-0.000000' -dsbas293 toSci "-0.000E-4" -> '-0E-7' -dsbas294 toSci "-0.00E-2" -> '-0.0000' -dsbas295 toSci "-0.00E-3" -> '-0.00000' -dsbas296 toSci "-0.0E-2" -> '-0.000' -dsbas297 toSci "-0.0E-3" -> '-0.0000' -dsbas298 toSci "-0E-2" -> '-0.00' -dsbas299 toSci "-0E-3" -> '-0.000' - --- Engineering notation tests -dsbas301 toSci 10e12 -> 1.0E+13 -dsbas302 toEng 10e12 -> 10E+12 -dsbas303 toSci 10e11 -> 1.0E+12 -dsbas304 toEng 10e11 -> 1.0E+12 -dsbas305 toSci 10e10 -> 1.0E+11 -dsbas306 toEng 10e10 -> 100E+9 -dsbas307 toSci 10e9 -> 1.0E+10 -dsbas308 toEng 10e9 -> 10E+9 -dsbas309 toSci 10e8 -> 1.0E+9 -dsbas310 toEng 10e8 -> 1.0E+9 -dsbas311 toSci 10e7 -> 1.0E+8 -dsbas312 toEng 10e7 -> 100E+6 -dsbas313 toSci 10e6 -> 1.0E+7 -dsbas314 toEng 10e6 -> 10E+6 -dsbas315 toSci 10e5 -> 1.0E+6 -dsbas316 toEng 10e5 -> 1.0E+6 -dsbas317 toSci 10e4 -> 1.0E+5 -dsbas318 toEng 10e4 -> 100E+3 -dsbas319 toSci 10e3 -> 1.0E+4 -dsbas320 toEng 10e3 -> 10E+3 -dsbas321 toSci 10e2 -> 1.0E+3 -dsbas322 toEng 10e2 -> 1.0E+3 -dsbas323 toSci 10e1 -> 1.0E+2 -dsbas324 toEng 10e1 -> 100 -dsbas325 toSci 10e0 -> 10 -dsbas326 toEng 10e0 -> 10 -dsbas327 toSci 10e-1 -> 1.0 -dsbas328 toEng 10e-1 -> 1.0 -dsbas329 toSci 10e-2 -> 0.10 -dsbas330 toEng 10e-2 -> 0.10 -dsbas331 toSci 10e-3 -> 0.010 -dsbas332 toEng 10e-3 -> 0.010 -dsbas333 toSci 10e-4 -> 0.0010 -dsbas334 toEng 10e-4 -> 0.0010 -dsbas335 toSci 10e-5 -> 0.00010 -dsbas336 toEng 10e-5 -> 0.00010 -dsbas337 toSci 10e-6 -> 0.000010 -dsbas338 toEng 10e-6 -> 0.000010 -dsbas339 toSci 10e-7 -> 0.0000010 -dsbas340 toEng 10e-7 -> 0.0000010 -dsbas341 toSci 10e-8 -> 1.0E-7 -dsbas342 toEng 10e-8 -> 100E-9 -dsbas343 toSci 10e-9 -> 1.0E-8 -dsbas344 toEng 10e-9 -> 10E-9 -dsbas345 toSci 10e-10 -> 1.0E-9 -dsbas346 toEng 10e-10 -> 1.0E-9 -dsbas347 toSci 10e-11 -> 1.0E-10 -dsbas348 toEng 10e-11 -> 100E-12 -dsbas349 toSci 10e-12 -> 1.0E-11 -dsbas350 toEng 10e-12 -> 10E-12 -dsbas351 toSci 10e-13 -> 1.0E-12 -dsbas352 toEng 10e-13 -> 1.0E-12 - -dsbas361 toSci 7E12 -> 7E+12 -dsbas362 toEng 7E12 -> 7E+12 -dsbas363 toSci 7E11 -> 7E+11 -dsbas364 toEng 7E11 -> 700E+9 -dsbas365 toSci 7E10 -> 7E+10 -dsbas366 toEng 7E10 -> 70E+9 -dsbas367 toSci 7E9 -> 7E+9 -dsbas368 toEng 7E9 -> 7E+9 -dsbas369 toSci 7E8 -> 7E+8 -dsbas370 toEng 7E8 -> 700E+6 -dsbas371 toSci 7E7 -> 7E+7 -dsbas372 toEng 7E7 -> 70E+6 -dsbas373 toSci 7E6 -> 7E+6 -dsbas374 toEng 7E6 -> 7E+6 -dsbas375 toSci 7E5 -> 7E+5 -dsbas376 toEng 7E5 -> 700E+3 -dsbas377 toSci 7E4 -> 7E+4 -dsbas378 toEng 7E4 -> 70E+3 -dsbas379 toSci 7E3 -> 7E+3 -dsbas380 toEng 7E3 -> 7E+3 -dsbas381 toSci 7E2 -> 7E+2 -dsbas382 toEng 7E2 -> 700 -dsbas383 toSci 7E1 -> 7E+1 -dsbas384 toEng 7E1 -> 70 -dsbas385 toSci 7E0 -> 7 -dsbas386 toEng 7E0 -> 7 -dsbas387 toSci 7E-1 -> 0.7 -dsbas388 toEng 7E-1 -> 0.7 -dsbas389 toSci 7E-2 -> 0.07 -dsbas390 toEng 7E-2 -> 0.07 -dsbas391 toSci 7E-3 -> 0.007 -dsbas392 toEng 7E-3 -> 0.007 -dsbas393 toSci 7E-4 -> 0.0007 -dsbas394 toEng 7E-4 -> 0.0007 -dsbas395 toSci 7E-5 -> 0.00007 -dsbas396 toEng 7E-5 -> 0.00007 -dsbas397 toSci 7E-6 -> 0.000007 -dsbas398 toEng 7E-6 -> 0.000007 -dsbas399 toSci 7E-7 -> 7E-7 -dsbas400 toEng 7E-7 -> 700E-9 -dsbas401 toSci 7E-8 -> 7E-8 -dsbas402 toEng 7E-8 -> 70E-9 -dsbas403 toSci 7E-9 -> 7E-9 -dsbas404 toEng 7E-9 -> 7E-9 -dsbas405 toSci 7E-10 -> 7E-10 -dsbas406 toEng 7E-10 -> 700E-12 -dsbas407 toSci 7E-11 -> 7E-11 -dsbas408 toEng 7E-11 -> 70E-12 -dsbas409 toSci 7E-12 -> 7E-12 -dsbas410 toEng 7E-12 -> 7E-12 -dsbas411 toSci 7E-13 -> 7E-13 -dsbas412 toEng 7E-13 -> 700E-15 - --- Exacts remain exact up to precision .. -dsbas420 toSci 100 -> 100 -dsbas422 toSci 1000 -> 1000 -dsbas424 toSci 999.9 -> 999.9 -dsbas426 toSci 1000.0 -> 1000.0 -dsbas428 toSci 1000.1 -> 1000.1 -dsbas430 toSci 10000 -> 10000 -dsbas432 toSci 1000 -> 1000 -dsbas434 toSci 10000 -> 10000 -dsbas436 toSci 100000 -> 100000 -dsbas438 toSci 1000000 -> 1000000 -dsbas440 toSci 10000000 -> 1.000000E+7 Rounded -dsbas442 toSci 10000000 -> 1.000000E+7 Rounded -dsbas444 toSci 10000003 -> 1.000000E+7 Rounded Inexact -dsbas446 toSci 10000005 -> 1.000000E+7 Rounded Inexact -dsbas448 toSci 100000050 -> 1.000000E+8 Rounded Inexact -dsbas450 toSci 10000009 -> 1.000001E+7 Rounded Inexact -dsbas452 toSci 100000000 -> 1.000000E+8 Rounded -dsbas454 toSci 100000003 -> 1.000000E+8 Rounded Inexact -dsbas456 toSci 100000005 -> 1.000000E+8 Rounded Inexact -dsbas458 toSci 100000009 -> 1.000000E+8 Rounded Inexact -dsbas460 toSci 1000000000 -> 1.000000E+9 Rounded -dsbas462 toSci 1000000300 -> 1.000000E+9 Rounded Inexact -dsbas464 toSci 1000000500 -> 1.000000E+9 Rounded Inexact -dsbas466 toSci 1000000900 -> 1.000001E+9 Rounded Inexact -dsbas468 toSci 10000000000 -> 1.000000E+10 Rounded -dsbas470 toSci 10000003000 -> 1.000000E+10 Rounded Inexact -dsbas472 toSci 10000005000 -> 1.000000E+10 Rounded Inexact -dsbas474 toSci 10000009000 -> 1.000001E+10 Rounded Inexact - --- check rounding modes heeded -rounding: ceiling -dsbsr401 toSci 1.1123450 -> 1.112345 Rounded -dsbsr402 toSci 1.11234549 -> 1.112346 Rounded Inexact -dsbsr403 toSci 1.11234550 -> 1.112346 Rounded Inexact -dsbsr404 toSci 1.11234551 -> 1.112346 Rounded Inexact -rounding: up -dsbsr405 toSci 1.1123450 -> 1.112345 Rounded -dsbsr406 toSci 1.11234549 -> 1.112346 Rounded Inexact -dsbsr407 toSci 1.11234550 -> 1.112346 Rounded Inexact -dsbsr408 toSci 1.11234551 -> 1.112346 Rounded Inexact -rounding: floor -dsbsr410 toSci 1.1123450 -> 1.112345 Rounded -dsbsr411 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr412 toSci 1.11234550 -> 1.112345 Rounded Inexact -dsbsr413 toSci 1.11234551 -> 1.112345 Rounded Inexact -rounding: half_down -dsbsr415 toSci 1.1123450 -> 1.112345 Rounded -dsbsr416 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr417 toSci 1.11234550 -> 1.112345 Rounded Inexact -dsbsr418 toSci 1.11234650 -> 1.112346 Rounded Inexact -dsbsr419 toSci 1.11234551 -> 1.112346 Rounded Inexact -rounding: half_even -dsbsr421 toSci 1.1123450 -> 1.112345 Rounded -dsbsr422 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr423 toSci 1.11234550 -> 1.112346 Rounded Inexact -dsbsr424 toSci 1.11234650 -> 1.112346 Rounded Inexact -dsbsr425 toSci 1.11234551 -> 1.112346 Rounded Inexact -rounding: down -dsbsr426 toSci 1.1123450 -> 1.112345 Rounded -dsbsr427 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr428 toSci 1.11234550 -> 1.112345 Rounded Inexact -dsbsr429 toSci 1.11234551 -> 1.112345 Rounded Inexact -rounding: half_up -dsbsr431 toSci 1.1123450 -> 1.112345 Rounded -dsbsr432 toSci 1.11234549 -> 1.112345 Rounded Inexact -dsbsr433 toSci 1.11234550 -> 1.112346 Rounded Inexact -dsbsr434 toSci 1.11234650 -> 1.112347 Rounded Inexact -dsbsr435 toSci 1.11234551 -> 1.112346 Rounded Inexact --- negatives -rounding: ceiling -dsbsr501 toSci -1.1123450 -> -1.112345 Rounded -dsbsr502 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr503 toSci -1.11234550 -> -1.112345 Rounded Inexact -dsbsr504 toSci -1.11234551 -> -1.112345 Rounded Inexact -rounding: up -dsbsr505 toSci -1.1123450 -> -1.112345 Rounded -dsbsr506 toSci -1.11234549 -> -1.112346 Rounded Inexact -dsbsr507 toSci -1.11234550 -> -1.112346 Rounded Inexact -dsbsr508 toSci -1.11234551 -> -1.112346 Rounded Inexact -rounding: floor -dsbsr510 toSci -1.1123450 -> -1.112345 Rounded -dsbsr511 toSci -1.11234549 -> -1.112346 Rounded Inexact -dsbsr512 toSci -1.11234550 -> -1.112346 Rounded Inexact -dsbsr513 toSci -1.11234551 -> -1.112346 Rounded Inexact -rounding: half_down -dsbsr515 toSci -1.1123450 -> -1.112345 Rounded -dsbsr516 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr517 toSci -1.11234550 -> -1.112345 Rounded Inexact -dsbsr518 toSci -1.11234650 -> -1.112346 Rounded Inexact -dsbsr519 toSci -1.11234551 -> -1.112346 Rounded Inexact -rounding: half_even -dsbsr521 toSci -1.1123450 -> -1.112345 Rounded -dsbsr522 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr523 toSci -1.11234550 -> -1.112346 Rounded Inexact -dsbsr524 toSci -1.11234650 -> -1.112346 Rounded Inexact -dsbsr525 toSci -1.11234551 -> -1.112346 Rounded Inexact -rounding: down -dsbsr526 toSci -1.1123450 -> -1.112345 Rounded -dsbsr527 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr528 toSci -1.11234550 -> -1.112345 Rounded Inexact -dsbsr529 toSci -1.11234551 -> -1.112345 Rounded Inexact -rounding: half_up -dsbsr531 toSci -1.1123450 -> -1.112345 Rounded -dsbsr532 toSci -1.11234549 -> -1.112345 Rounded Inexact -dsbsr533 toSci -1.11234550 -> -1.112346 Rounded Inexact -dsbsr534 toSci -1.11234650 -> -1.112347 Rounded Inexact -dsbsr535 toSci -1.11234551 -> -1.112346 Rounded Inexact - -rounding: half_even - --- The 'baddies' tests from DiagBigDecimal, plus some new ones -dsbas500 toSci '1..2' -> NaN Conversion_syntax -dsbas501 toSci '.' -> NaN Conversion_syntax -dsbas502 toSci '..' -> NaN Conversion_syntax -dsbas503 toSci '++1' -> NaN Conversion_syntax -dsbas504 toSci '--1' -> NaN Conversion_syntax -dsbas505 toSci '-+1' -> NaN Conversion_syntax -dsbas506 toSci '+-1' -> NaN Conversion_syntax -dsbas507 toSci '12e' -> NaN Conversion_syntax -dsbas508 toSci '12e++' -> NaN Conversion_syntax -dsbas509 toSci '12f4' -> NaN Conversion_syntax -dsbas510 toSci ' +1' -> NaN Conversion_syntax -dsbas511 toSci '+ 1' -> NaN Conversion_syntax -dsbas512 toSci '12 ' -> NaN Conversion_syntax -dsbas513 toSci ' + 1' -> NaN Conversion_syntax -dsbas514 toSci ' - 1 ' -> NaN Conversion_syntax -dsbas515 toSci 'x' -> NaN Conversion_syntax -dsbas516 toSci '-1-' -> NaN Conversion_syntax -dsbas517 toSci '12-' -> NaN Conversion_syntax -dsbas518 toSci '3+' -> NaN Conversion_syntax -dsbas519 toSci '' -> NaN Conversion_syntax -dsbas520 toSci '1e-' -> NaN Conversion_syntax -dsbas521 toSci '7e99999a' -> NaN Conversion_syntax -dsbas522 toSci '7e123567890x' -> NaN Conversion_syntax -dsbas523 toSci '7e12356789012x' -> NaN Conversion_syntax -dsbas524 toSci '' -> NaN Conversion_syntax -dsbas525 toSci 'e100' -> NaN Conversion_syntax -dsbas526 toSci '\u0e5a' -> NaN Conversion_syntax -dsbas527 toSci '\u0b65' -> NaN Conversion_syntax -dsbas528 toSci '123,65' -> NaN Conversion_syntax -dsbas529 toSci '1.34.5' -> NaN Conversion_syntax -dsbas530 toSci '.123.5' -> NaN Conversion_syntax -dsbas531 toSci '01.35.' -> NaN Conversion_syntax -dsbas532 toSci '01.35-' -> NaN Conversion_syntax -dsbas533 toSci '0000..' -> NaN Conversion_syntax -dsbas534 toSci '.0000.' -> NaN Conversion_syntax -dsbas535 toSci '00..00' -> NaN Conversion_syntax -dsbas536 toSci '111e*123' -> NaN Conversion_syntax -dsbas537 toSci '111e123-' -> NaN Conversion_syntax -dsbas538 toSci '111e+12+' -> NaN Conversion_syntax -dsbas539 toSci '111e1-3-' -> NaN Conversion_syntax -dsbas540 toSci '111e1*23' -> NaN Conversion_syntax -dsbas541 toSci '111e1e+3' -> NaN Conversion_syntax -dsbas542 toSci '1e1.0' -> NaN Conversion_syntax -dsbas543 toSci '1e123e' -> NaN Conversion_syntax -dsbas544 toSci 'ten' -> NaN Conversion_syntax -dsbas545 toSci 'ONE' -> NaN Conversion_syntax -dsbas546 toSci '1e.1' -> NaN Conversion_syntax -dsbas547 toSci '1e1.' -> NaN Conversion_syntax -dsbas548 toSci '1ee' -> NaN Conversion_syntax -dsbas549 toSci 'e+1' -> NaN Conversion_syntax -dsbas550 toSci '1.23.4' -> NaN Conversion_syntax -dsbas551 toSci '1.2.1' -> NaN Conversion_syntax -dsbas552 toSci '1E+1.2' -> NaN Conversion_syntax -dsbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax -dsbas554 toSci '1E++1' -> NaN Conversion_syntax -dsbas555 toSci '1E--1' -> NaN Conversion_syntax -dsbas556 toSci '1E+-1' -> NaN Conversion_syntax -dsbas557 toSci '1E-+1' -> NaN Conversion_syntax -dsbas558 toSci '1E''1' -> NaN Conversion_syntax -dsbas559 toSci "1E""1" -> NaN Conversion_syntax -dsbas560 toSci "1E""""" -> NaN Conversion_syntax --- Near-specials -dsbas561 toSci "qNaN" -> NaN Conversion_syntax -dsbas562 toSci "NaNq" -> NaN Conversion_syntax -dsbas563 toSci "NaNs" -> NaN Conversion_syntax -dsbas564 toSci "Infi" -> NaN Conversion_syntax -dsbas565 toSci "Infin" -> NaN Conversion_syntax -dsbas566 toSci "Infini" -> NaN Conversion_syntax -dsbas567 toSci "Infinit" -> NaN Conversion_syntax -dsbas568 toSci "-Infinit" -> NaN Conversion_syntax -dsbas569 toSci "0Inf" -> NaN Conversion_syntax -dsbas570 toSci "9Inf" -> NaN Conversion_syntax -dsbas571 toSci "-0Inf" -> NaN Conversion_syntax -dsbas572 toSci "-9Inf" -> NaN Conversion_syntax -dsbas573 toSci "-sNa" -> NaN Conversion_syntax -dsbas574 toSci "xNaN" -> NaN Conversion_syntax -dsbas575 toSci "0sNaN" -> NaN Conversion_syntax - --- some baddies with dots and Es and dots and specials -dsbas576 toSci 'e+1' -> NaN Conversion_syntax -dsbas577 toSci '.e+1' -> NaN Conversion_syntax -dsbas578 toSci '+.e+1' -> NaN Conversion_syntax -dsbas579 toSci '-.e+' -> NaN Conversion_syntax -dsbas580 toSci '-.e' -> NaN Conversion_syntax -dsbas581 toSci 'E+1' -> NaN Conversion_syntax -dsbas582 toSci '.E+1' -> NaN Conversion_syntax -dsbas583 toSci '+.E+1' -> NaN Conversion_syntax -dsbas584 toSci '-.E+' -> NaN Conversion_syntax -dsbas585 toSci '-.E' -> NaN Conversion_syntax - -dsbas586 toSci '.NaN' -> NaN Conversion_syntax -dsbas587 toSci '-.NaN' -> NaN Conversion_syntax -dsbas588 toSci '+.sNaN' -> NaN Conversion_syntax -dsbas589 toSci '+.Inf' -> NaN Conversion_syntax -dsbas590 toSci '.Infinity' -> NaN Conversion_syntax - --- Zeros -dsbas601 toSci 0.000000000 -> 0E-9 -dsbas602 toSci 0.00000000 -> 0E-8 -dsbas603 toSci 0.0000000 -> 0E-7 -dsbas604 toSci 0.000000 -> 0.000000 -dsbas605 toSci 0.00000 -> 0.00000 -dsbas606 toSci 0.0000 -> 0.0000 -dsbas607 toSci 0.000 -> 0.000 -dsbas608 toSci 0.00 -> 0.00 -dsbas609 toSci 0.0 -> 0.0 -dsbas610 toSci .0 -> 0.0 -dsbas611 toSci 0. -> 0 -dsbas612 toSci -.0 -> -0.0 -dsbas613 toSci -0. -> -0 -dsbas614 toSci -0.0 -> -0.0 -dsbas615 toSci -0.00 -> -0.00 -dsbas616 toSci -0.000 -> -0.000 -dsbas617 toSci -0.0000 -> -0.0000 -dsbas618 toSci -0.00000 -> -0.00000 -dsbas619 toSci -0.000000 -> -0.000000 -dsbas620 toSci -0.0000000 -> -0E-7 -dsbas621 toSci -0.00000000 -> -0E-8 -dsbas622 toSci -0.000000000 -> -0E-9 - -dsbas630 toSci 0.00E+0 -> 0.00 -dsbas631 toSci 0.00E+1 -> 0.0 -dsbas632 toSci 0.00E+2 -> 0 -dsbas633 toSci 0.00E+3 -> 0E+1 -dsbas634 toSci 0.00E+4 -> 0E+2 -dsbas635 toSci 0.00E+5 -> 0E+3 -dsbas636 toSci 0.00E+6 -> 0E+4 -dsbas637 toSci 0.00E+7 -> 0E+5 -dsbas638 toSci 0.00E+8 -> 0E+6 -dsbas639 toSci 0.00E+9 -> 0E+7 - -dsbas640 toSci 0.0E+0 -> 0.0 -dsbas641 toSci 0.0E+1 -> 0 -dsbas642 toSci 0.0E+2 -> 0E+1 -dsbas643 toSci 0.0E+3 -> 0E+2 -dsbas644 toSci 0.0E+4 -> 0E+3 -dsbas645 toSci 0.0E+5 -> 0E+4 -dsbas646 toSci 0.0E+6 -> 0E+5 -dsbas647 toSci 0.0E+7 -> 0E+6 -dsbas648 toSci 0.0E+8 -> 0E+7 -dsbas649 toSci 0.0E+9 -> 0E+8 - -dsbas650 toSci 0E+0 -> 0 -dsbas651 toSci 0E+1 -> 0E+1 -dsbas652 toSci 0E+2 -> 0E+2 -dsbas653 toSci 0E+3 -> 0E+3 -dsbas654 toSci 0E+4 -> 0E+4 -dsbas655 toSci 0E+5 -> 0E+5 -dsbas656 toSci 0E+6 -> 0E+6 -dsbas657 toSci 0E+7 -> 0E+7 -dsbas658 toSci 0E+8 -> 0E+8 -dsbas659 toSci 0E+9 -> 0E+9 - -dsbas660 toSci 0.0E-0 -> 0.0 -dsbas661 toSci 0.0E-1 -> 0.00 -dsbas662 toSci 0.0E-2 -> 0.000 -dsbas663 toSci 0.0E-3 -> 0.0000 -dsbas664 toSci 0.0E-4 -> 0.00000 -dsbas665 toSci 0.0E-5 -> 0.000000 -dsbas666 toSci 0.0E-6 -> 0E-7 -dsbas667 toSci 0.0E-7 -> 0E-8 -dsbas668 toSci 0.0E-8 -> 0E-9 -dsbas669 toSci 0.0E-9 -> 0E-10 - -dsbas670 toSci 0.00E-0 -> 0.00 -dsbas671 toSci 0.00E-1 -> 0.000 -dsbas672 toSci 0.00E-2 -> 0.0000 -dsbas673 toSci 0.00E-3 -> 0.00000 -dsbas674 toSci 0.00E-4 -> 0.000000 -dsbas675 toSci 0.00E-5 -> 0E-7 -dsbas676 toSci 0.00E-6 -> 0E-8 -dsbas677 toSci 0.00E-7 -> 0E-9 -dsbas678 toSci 0.00E-8 -> 0E-10 -dsbas679 toSci 0.00E-9 -> 0E-11 - -dsbas680 toSci 000000. -> 0 -dsbas681 toSci 00000. -> 0 -dsbas682 toSci 0000. -> 0 -dsbas683 toSci 000. -> 0 -dsbas684 toSci 00. -> 0 -dsbas685 toSci 0. -> 0 -dsbas686 toSci +00000. -> 0 -dsbas687 toSci -00000. -> -0 -dsbas688 toSci +0. -> 0 -dsbas689 toSci -0. -> -0 - --- Specials -dsbas700 toSci "NaN" -> NaN -dsbas701 toSci "nan" -> NaN -dsbas702 toSci "nAn" -> NaN -dsbas703 toSci "NAN" -> NaN -dsbas704 toSci "+NaN" -> NaN -dsbas705 toSci "+nan" -> NaN -dsbas706 toSci "+nAn" -> NaN -dsbas707 toSci "+NAN" -> NaN -dsbas708 toSci "-NaN" -> -NaN -dsbas709 toSci "-nan" -> -NaN -dsbas710 toSci "-nAn" -> -NaN -dsbas711 toSci "-NAN" -> -NaN -dsbas712 toSci 'NaN0' -> NaN -dsbas713 toSci 'NaN1' -> NaN1 -dsbas714 toSci 'NaN12' -> NaN12 -dsbas715 toSci 'NaN123' -> NaN123 -dsbas716 toSci 'NaN1234' -> NaN1234 -dsbas717 toSci 'NaN01' -> NaN1 -dsbas718 toSci 'NaN012' -> NaN12 -dsbas719 toSci 'NaN0123' -> NaN123 -dsbas720 toSci 'NaN01234' -> NaN1234 -dsbas721 toSci 'NaN001' -> NaN1 -dsbas722 toSci 'NaN0012' -> NaN12 -dsbas723 toSci 'NaN00123' -> NaN123 -dsbas724 toSci 'NaN001234' -> NaN1234 -dsbas725 toSci 'NaN1234567890123456' -> NaN Conversion_syntax -dsbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax -dsbas727 toSci 'NaN12.45' -> NaN Conversion_syntax -dsbas728 toSci 'NaN-12' -> NaN Conversion_syntax -dsbas729 toSci 'NaN+12' -> NaN Conversion_syntax - -dsbas730 toSci "sNaN" -> sNaN -dsbas731 toSci "snan" -> sNaN -dsbas732 toSci "SnAn" -> sNaN -dsbas733 toSci "SNAN" -> sNaN -dsbas734 toSci "+sNaN" -> sNaN -dsbas735 toSci "+snan" -> sNaN -dsbas736 toSci "+SnAn" -> sNaN -dsbas737 toSci "+SNAN" -> sNaN -dsbas738 toSci "-sNaN" -> -sNaN -dsbas739 toSci "-snan" -> -sNaN -dsbas740 toSci "-SnAn" -> -sNaN -dsbas741 toSci "-SNAN" -> -sNaN -dsbas742 toSci 'sNaN0000' -> sNaN -dsbas743 toSci 'sNaN7' -> sNaN7 -dsbas744 toSci 'sNaN007234' -> sNaN7234 -dsbas745 toSci 'sNaN7234561234567890' -> NaN Conversion_syntax -dsbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax -dsbas747 toSci 'sNaN-72' -> NaN Conversion_syntax - -dsbas748 toSci "Inf" -> Infinity -dsbas749 toSci "inf" -> Infinity -dsbas750 toSci "iNf" -> Infinity -dsbas751 toSci "INF" -> Infinity -dsbas752 toSci "+Inf" -> Infinity -dsbas753 toSci "+inf" -> Infinity -dsbas754 toSci "+iNf" -> Infinity -dsbas755 toSci "+INF" -> Infinity -dsbas756 toSci "-Inf" -> -Infinity -dsbas757 toSci "-inf" -> -Infinity -dsbas758 toSci "-iNf" -> -Infinity -dsbas759 toSci "-INF" -> -Infinity - -dsbas760 toSci "Infinity" -> Infinity -dsbas761 toSci "infinity" -> Infinity -dsbas762 toSci "iNfInItY" -> Infinity -dsbas763 toSci "INFINITY" -> Infinity -dsbas764 toSci "+Infinity" -> Infinity -dsbas765 toSci "+infinity" -> Infinity -dsbas766 toSci "+iNfInItY" -> Infinity -dsbas767 toSci "+INFINITY" -> Infinity -dsbas768 toSci "-Infinity" -> -Infinity -dsbas769 toSci "-infinity" -> -Infinity -dsbas770 toSci "-iNfInItY" -> -Infinity -dsbas771 toSci "-INFINITY" -> -Infinity - --- Specials and zeros for toEng -dsbast772 toEng "NaN" -> NaN -dsbast773 toEng "-Infinity" -> -Infinity -dsbast774 toEng "-sNaN" -> -sNaN -dsbast775 toEng "-NaN" -> -NaN -dsbast776 toEng "+Infinity" -> Infinity -dsbast778 toEng "+sNaN" -> sNaN -dsbast779 toEng "+NaN" -> NaN -dsbast780 toEng "INFINITY" -> Infinity -dsbast781 toEng "SNAN" -> sNaN -dsbast782 toEng "NAN" -> NaN -dsbast783 toEng "infinity" -> Infinity -dsbast784 toEng "snan" -> sNaN -dsbast785 toEng "nan" -> NaN -dsbast786 toEng "InFINITY" -> Infinity -dsbast787 toEng "SnAN" -> sNaN -dsbast788 toEng "nAN" -> NaN -dsbast789 toEng "iNfinity" -> Infinity -dsbast790 toEng "sNan" -> sNaN -dsbast791 toEng "Nan" -> NaN -dsbast792 toEng "Infinity" -> Infinity -dsbast793 toEng "sNaN" -> sNaN - --- Zero toEng, etc. -dsbast800 toEng 0e+1 -> "0.00E+3" -- doc example - -dsbast801 toEng 0.000000000 -> 0E-9 -dsbast802 toEng 0.00000000 -> 0.00E-6 -dsbast803 toEng 0.0000000 -> 0.0E-6 -dsbast804 toEng 0.000000 -> 0.000000 -dsbast805 toEng 0.00000 -> 0.00000 -dsbast806 toEng 0.0000 -> 0.0000 -dsbast807 toEng 0.000 -> 0.000 -dsbast808 toEng 0.00 -> 0.00 -dsbast809 toEng 0.0 -> 0.0 -dsbast810 toEng .0 -> 0.0 -dsbast811 toEng 0. -> 0 -dsbast812 toEng -.0 -> -0.0 -dsbast813 toEng -0. -> -0 -dsbast814 toEng -0.0 -> -0.0 -dsbast815 toEng -0.00 -> -0.00 -dsbast816 toEng -0.000 -> -0.000 -dsbast817 toEng -0.0000 -> -0.0000 -dsbast818 toEng -0.00000 -> -0.00000 -dsbast819 toEng -0.000000 -> -0.000000 -dsbast820 toEng -0.0000000 -> -0.0E-6 -dsbast821 toEng -0.00000000 -> -0.00E-6 -dsbast822 toEng -0.000000000 -> -0E-9 - -dsbast830 toEng 0.00E+0 -> 0.00 -dsbast831 toEng 0.00E+1 -> 0.0 -dsbast832 toEng 0.00E+2 -> 0 -dsbast833 toEng 0.00E+3 -> 0.00E+3 -dsbast834 toEng 0.00E+4 -> 0.0E+3 -dsbast835 toEng 0.00E+5 -> 0E+3 -dsbast836 toEng 0.00E+6 -> 0.00E+6 -dsbast837 toEng 0.00E+7 -> 0.0E+6 -dsbast838 toEng 0.00E+8 -> 0E+6 -dsbast839 toEng 0.00E+9 -> 0.00E+9 - -dsbast840 toEng 0.0E+0 -> 0.0 -dsbast841 toEng 0.0E+1 -> 0 -dsbast842 toEng 0.0E+2 -> 0.00E+3 -dsbast843 toEng 0.0E+3 -> 0.0E+3 -dsbast844 toEng 0.0E+4 -> 0E+3 -dsbast845 toEng 0.0E+5 -> 0.00E+6 -dsbast846 toEng 0.0E+6 -> 0.0E+6 -dsbast847 toEng 0.0E+7 -> 0E+6 -dsbast848 toEng 0.0E+8 -> 0.00E+9 -dsbast849 toEng 0.0E+9 -> 0.0E+9 - -dsbast850 toEng 0E+0 -> 0 -dsbast851 toEng 0E+1 -> 0.00E+3 -dsbast852 toEng 0E+2 -> 0.0E+3 -dsbast853 toEng 0E+3 -> 0E+3 -dsbast854 toEng 0E+4 -> 0.00E+6 -dsbast855 toEng 0E+5 -> 0.0E+6 -dsbast856 toEng 0E+6 -> 0E+6 -dsbast857 toEng 0E+7 -> 0.00E+9 -dsbast858 toEng 0E+8 -> 0.0E+9 -dsbast859 toEng 0E+9 -> 0E+9 - -dsbast860 toEng 0.0E-0 -> 0.0 -dsbast861 toEng 0.0E-1 -> 0.00 -dsbast862 toEng 0.0E-2 -> 0.000 -dsbast863 toEng 0.0E-3 -> 0.0000 -dsbast864 toEng 0.0E-4 -> 0.00000 -dsbast865 toEng 0.0E-5 -> 0.000000 -dsbast866 toEng 0.0E-6 -> 0.0E-6 -dsbast867 toEng 0.0E-7 -> 0.00E-6 -dsbast868 toEng 0.0E-8 -> 0E-9 -dsbast869 toEng 0.0E-9 -> 0.0E-9 - -dsbast870 toEng 0.00E-0 -> 0.00 -dsbast871 toEng 0.00E-1 -> 0.000 -dsbast872 toEng 0.00E-2 -> 0.0000 -dsbast873 toEng 0.00E-3 -> 0.00000 -dsbast874 toEng 0.00E-4 -> 0.000000 -dsbast875 toEng 0.00E-5 -> 0.0E-6 -dsbast876 toEng 0.00E-6 -> 0.00E-6 -dsbast877 toEng 0.00E-7 -> 0E-9 -dsbast878 toEng 0.00E-8 -> 0.0E-9 -dsbast879 toEng 0.00E-9 -> 0.00E-9 - --- long input strings -dsbas801 tosci '01234567' -> 1234567 -dsbas802 tosci '001234567' -> 1234567 -dsbas803 tosci '0001234567' -> 1234567 -dsbas804 tosci '00001234567' -> 1234567 -dsbas805 tosci '000001234567' -> 1234567 -dsbas806 tosci '0000001234567' -> 1234567 -dsbas807 tosci '00000001234567' -> 1234567 -dsbas808 tosci '000000001234567' -> 1234567 -dsbas809 tosci '0000000001234567' -> 1234567 -dsbas810 tosci '00000000001234567' -> 1234567 - -dsbas811 tosci '0.1234567' -> 0.1234567 -dsbas812 tosci '0.01234567' -> 0.01234567 -dsbas813 tosci '0.001234567' -> 0.001234567 -dsbas814 tosci '0.0001234567' -> 0.0001234567 -dsbas815 tosci '0.00001234567' -> 0.00001234567 -dsbas816 tosci '0.000001234567' -> 0.000001234567 -dsbas817 tosci '0.0000001234567' -> 1.234567E-7 -dsbas818 tosci '0.00000001234567' -> 1.234567E-8 -dsbas819 tosci '0.000000001234567' -> 1.234567E-9 -dsbas820 tosci '0.0000000001234567' -> 1.234567E-10 - -dsbas821 tosci '123456790' -> 1.234568E+8 Inexact Rounded -dsbas822 tosci '1234567901' -> 1.234568E+9 Inexact Rounded -dsbas823 tosci '12345679012' -> 1.234568E+10 Inexact Rounded -dsbas824 tosci '123456790123' -> 1.234568E+11 Inexact Rounded -dsbas825 tosci '1234567901234' -> 1.234568E+12 Inexact Rounded -dsbas826 tosci '12345679012345' -> 1.234568E+13 Inexact Rounded -dsbas827 tosci '123456790123456' -> 1.234568E+14 Inexact Rounded -dsbas828 tosci '1234567901234567' -> 1.234568E+15 Inexact Rounded -dsbas829 tosci '1234567890123456' -> 1.234568E+15 Inexact Rounded - --- subnormals and overflows -dsbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded -dsbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded -dsbas908 toSci '0.9e-999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas909 toSci '0.09e-999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded -dsbas911 toSci '10e-1000000000' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded -dsbas913 toSci '99e-9999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded -dsbas915 toSci '1111e-9999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas916 toSci '1111e-99999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded --- negatives the same -dsbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded -dsbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded -dsbas920 toSci '-0.9e-999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas921 toSci '-0.09e-999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded -dsbas923 toSci '-10e-1000000000' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded -dsbas925 toSci '-99e-9999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded -dsbas927 toSci '-1111e-9999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas928 toSci '-1111e-99999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded - --- overflow results at different rounding modes -rounding: ceiling -dsbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas931 toSci '-7e10000' -> -9.999999E+96 Overflow Inexact Rounded -rounding: up -dsbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: down -dsbas934 toSci '7e10000' -> 9.999999E+96 Overflow Inexact Rounded -dsbas935 toSci '-7e10000' -> -9.999999E+96 Overflow Inexact Rounded -rounding: floor -dsbas936 toSci '7e10000' -> 9.999999E+96 Overflow Inexact Rounded -dsbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_up -dsbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_even -dsbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded -rounding: half_down -dsbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded -dsbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded - -rounding: half_even - --- Now check 854/754r some subnormals and underflow to 0 -dsbem400 toSci 1.0000E-86 -> 1.0000E-86 -dsbem401 toSci 0.1E-97 -> 1E-98 Subnormal -dsbem402 toSci 0.1000E-97 -> 1.000E-98 Subnormal -dsbem403 toSci 0.0100E-97 -> 1.00E-99 Subnormal -dsbem404 toSci 0.0010E-97 -> 1.0E-100 Subnormal -dsbem405 toSci 0.0001E-97 -> 1E-101 Subnormal -dsbem406 toSci 0.00010E-97 -> 1E-101 Subnormal Rounded -dsbem407 toSci 0.00013E-97 -> 1E-101 Underflow Subnormal Inexact Rounded -dsbem408 toSci 0.00015E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem409 toSci 0.00017E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem410 toSci 0.00023E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem411 toSci 0.00025E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem412 toSci 0.00027E-97 -> 3E-101 Underflow Subnormal Inexact Rounded -dsbem413 toSci 0.000149E-97 -> 1E-101 Underflow Subnormal Inexact Rounded -dsbem414 toSci 0.000150E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem415 toSci 0.000151E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem416 toSci 0.000249E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem417 toSci 0.000250E-97 -> 2E-101 Underflow Subnormal Inexact Rounded -dsbem418 toSci 0.000251E-97 -> 3E-101 Underflow Subnormal Inexact Rounded -dsbem419 toSci 0.00009E-97 -> 1E-101 Underflow Subnormal Inexact Rounded -dsbem420 toSci 0.00005E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem421 toSci 0.00003E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem422 toSci 0.000009E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem423 toSci 0.000005E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem424 toSci 0.000003E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped - -dsbem425 toSci 0.001049E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded -dsbem426 toSci 0.001050E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded -dsbem427 toSci 0.001051E-97 -> 1.1E-100 Underflow Subnormal Inexact Rounded -dsbem428 toSci 0.001149E-97 -> 1.1E-100 Underflow Subnormal Inexact Rounded -dsbem429 toSci 0.001150E-97 -> 1.2E-100 Underflow Subnormal Inexact Rounded -dsbem430 toSci 0.001151E-97 -> 1.2E-100 Underflow Subnormal Inexact Rounded - -dsbem432 toSci 0.010049E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded -dsbem433 toSci 0.010050E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded -dsbem434 toSci 0.010051E-97 -> 1.01E-99 Underflow Subnormal Inexact Rounded -dsbem435 toSci 0.010149E-97 -> 1.01E-99 Underflow Subnormal Inexact Rounded -dsbem436 toSci 0.010150E-97 -> 1.02E-99 Underflow Subnormal Inexact Rounded -dsbem437 toSci 0.010151E-97 -> 1.02E-99 Underflow Subnormal Inexact Rounded - -dsbem440 toSci 0.10103E-97 -> 1.010E-98 Underflow Subnormal Inexact Rounded -dsbem441 toSci 0.10105E-97 -> 1.010E-98 Underflow Subnormal Inexact Rounded -dsbem442 toSci 0.10107E-97 -> 1.011E-98 Underflow Subnormal Inexact Rounded -dsbem443 toSci 0.10113E-97 -> 1.011E-98 Underflow Subnormal Inexact Rounded -dsbem444 toSci 0.10115E-97 -> 1.012E-98 Underflow Subnormal Inexact Rounded -dsbem445 toSci 0.10117E-97 -> 1.012E-98 Underflow Subnormal Inexact Rounded - -dsbem450 toSci 1.10730E-98 -> 1.107E-98 Underflow Subnormal Inexact Rounded -dsbem451 toSci 1.10750E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded -dsbem452 toSci 1.10770E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded -dsbem453 toSci 1.10830E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded -dsbem454 toSci 1.10850E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded -dsbem455 toSci 1.10870E-98 -> 1.109E-98 Underflow Subnormal Inexact Rounded - --- make sure sign OK -dsbem456 toSci -0.10103E-97 -> -1.010E-98 Underflow Subnormal Inexact Rounded -dsbem457 toSci -0.10105E-97 -> -1.010E-98 Underflow Subnormal Inexact Rounded -dsbem458 toSci -0.10107E-97 -> -1.011E-98 Underflow Subnormal Inexact Rounded -dsbem459 toSci -0.10113E-97 -> -1.011E-98 Underflow Subnormal Inexact Rounded -dsbem460 toSci -0.10115E-97 -> -1.012E-98 Underflow Subnormal Inexact Rounded -dsbem461 toSci -0.10117E-97 -> -1.012E-98 Underflow Subnormal Inexact Rounded - --- '999s' cases -dsbem464 toSci 999999E-98 -> 9.99999E-93 -dsbem465 toSci 99999.0E-97 -> 9.99990E-93 -dsbem466 toSci 99999.E-97 -> 9.9999E-93 -dsbem467 toSci 9999.9E-97 -> 9.9999E-94 -dsbem468 toSci 999.99E-97 -> 9.9999E-95 -dsbem469 toSci 99.999E-97 -> 9.9999E-96 Subnormal -dsbem470 toSci 9.9999E-97 -> 9.9999E-97 Subnormal -dsbem471 toSci 0.99999E-97 -> 1.0000E-97 Underflow Subnormal Inexact Rounded -dsbem472 toSci 0.099999E-97 -> 1.000E-98 Underflow Subnormal Inexact Rounded -dsbem473 toSci 0.0099999E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded -dsbem474 toSci 0.00099999E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded -dsbem475 toSci 0.000099999E-97 -> 1E-101 Underflow Subnormal Inexact Rounded -dsbem476 toSci 0.0000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem477 toSci 0.00000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbem478 toSci 0.000000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped - --- Exponents with insignificant leading zeros -dsbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded -dsbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded -dsbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded -dsbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded -dsbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded -dsbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded -dsbas1007 toSci 1e-999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1008 toSci 1e-0999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1009 toSci 1e-00999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1010 toSci 1e-000999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1011 toSci 1e-000000000000999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped -dsbas1012 toSci 1e-000000000001000000007 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped - --- check for double-rounded subnormals -dsbas1041 toSci 1.1152444E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow -dsbas1042 toSci 1.1152445E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow -dsbas1043 toSci 1.1152446E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow - --- clamped zeros [see also clamp.decTest] -dsbas1075 toSci 0e+10000 -> 0E+90 Clamped -dsbas1076 toSci 0e-10000 -> 0E-101 Clamped -dsbas1077 toSci -0e+10000 -> -0E+90 Clamped -dsbas1078 toSci -0e-10000 -> -0E-101 Clamped - --- extreme values from next-wider -dsbas1101 toSci -9.999999999999999E+384 -> -Infinity Overflow Inexact Rounded -dsbas1102 toSci -1E-383 -> -0E-101 Inexact Rounded Subnormal Underflow Clamped -dsbas1103 toSci -1E-398 -> -0E-101 Inexact Rounded Subnormal Underflow Clamped -dsbas1104 toSci -0 -> -0 -dsbas1105 toSci +0 -> 0 -dsbas1106 toSci +1E-398 -> 0E-101 Inexact Rounded Subnormal Underflow Clamped -dsbas1107 toSci +1E-383 -> 0E-101 Inexact Rounded Subnormal Underflow Clamped -dsbas1108 toSci +9.999999999999999E+384 -> Infinity Overflow Inexact Rounded - --- narrowing case -dsbas1110 toSci 2.000000000000000E-99 -> 2.00E-99 Rounded Subnormal +------------------------------------------------------------------------ +-- dsBase.decTest -- base decSingle <--> string conversions -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This file tests base conversions from string to a decimal number +-- and back to a string (in Scientific form) + +-- Note that unlike other operations the operand is subject to rounding +-- to conform to emax and precision settings (that is, numbers will +-- conform to rules and exponent will be in permitted range). The +-- 'left hand side', therefore, may have numbers that cannot be +-- represented in a decSingle. Some testcases go to the limit of the +-- next-wider format, and hence these testcases may also be used to +-- test narrowing and widening operations. + +extended: 1 +clamp: 1 +precision: 7 +maxExponent: 96 +minExponent: -95 +rounding: half_even + +dsbas001 toSci 0 -> 0 +dsbas002 toSci 1 -> 1 +dsbas003 toSci 1.0 -> 1.0 +dsbas004 toSci 1.00 -> 1.00 +dsbas005 toSci 10 -> 10 +dsbas006 toSci 1000 -> 1000 +dsbas007 toSci 10.0 -> 10.0 +dsbas008 toSci 10.1 -> 10.1 +dsbas009 toSci 10.4 -> 10.4 +dsbas010 toSci 10.5 -> 10.5 +dsbas011 toSci 10.6 -> 10.6 +dsbas012 toSci 10.9 -> 10.9 +dsbas013 toSci 11.0 -> 11.0 +dsbas014 toSci 1.234 -> 1.234 +dsbas015 toSci 0.123 -> 0.123 +dsbas016 toSci 0.012 -> 0.012 +dsbas017 toSci -0 -> -0 +dsbas018 toSci -0.0 -> -0.0 +dsbas019 toSci -00.00 -> -0.00 + +dsbas021 toSci -1 -> -1 +dsbas022 toSci -1.0 -> -1.0 +dsbas023 toSci -0.1 -> -0.1 +dsbas024 toSci -9.1 -> -9.1 +dsbas025 toSci -9.11 -> -9.11 +dsbas026 toSci -9.119 -> -9.119 +dsbas027 toSci -9.999 -> -9.999 + +dsbas030 toSci '1234.567' -> '1234.567' +dsbas031 toSci '1234.000' -> '1234.000' +dsbas032 toSci '1234912' -> '1234912' +dsbas033 toSci '0.00001234567' -> '0.00001234567' +dsbas034 toSci '0.000001234567' -> '0.000001234567' +dsbas035 toSci '0.0000001234567' -> '1.234567E-7' +dsbas036 toSci '0.00000001234567' -> '1.234567E-8' + +dsbas037 toSci '0.1234564' -> '0.1234564' +dsbas038 toSci '0.1234565' -> '0.1234565' + +-- test finite bounds (Negs of, then 0, Ntiny, Nmin, other, Nmax) +dsbsn001 toSci -9.999999E+96 -> -9.999999E+96 +dsbsn002 toSci -1E-95 -> -1E-95 +dsbsn003 toSci -1E-101 -> -1E-101 Subnormal +dsbsn004 toSci -0 -> -0 +dsbsn005 toSci +0 -> 0 +dsbsn006 toSci +1E-101 -> 1E-101 Subnormal +dsbsn007 toSci +1E-95 -> 1E-95 +dsbsn008 toSci +9.999999E+96 -> 9.999999E+96 + +-- String [many more examples are implicitly tested elsewhere] +-- strings without E cannot generate E in result +dsbas040 toSci "12" -> '12' +dsbas041 toSci "-76" -> '-76' +dsbas042 toSci "12.76" -> '12.76' +dsbas043 toSci "+12.76" -> '12.76' +dsbas044 toSci "012.76" -> '12.76' +dsbas045 toSci "+0.003" -> '0.003' +dsbas046 toSci "17." -> '17' +dsbas047 toSci ".5" -> '0.5' +dsbas048 toSci "044" -> '44' +dsbas049 toSci "0044" -> '44' +dsbas050 toSci "0.0005" -> '0.0005' +dsbas051 toSci "00.00005" -> '0.00005' +dsbas052 toSci "0.000005" -> '0.000005' +dsbas053 toSci "0.0000050" -> '0.0000050' +dsbas054 toSci "0.0000005" -> '5E-7' +dsbas055 toSci "0.00000005" -> '5E-8' +dsbas056 toSci "12678.54" -> '12678.54' +dsbas057 toSci "2678.543" -> '2678.543' +dsbas058 toSci "345678.5" -> '345678.5' +dsbas059 toSci "0678.5432" -> '678.5432' +dsbas060 toSci "678.5432" -> '678.5432' +dsbas061 toSci "+678.5432" -> '678.5432' +dsbas062 toSci "+0678.5432" -> '678.5432' +dsbas063 toSci "+00678.5432" -> '678.5432' +dsbas064 toSci "-678.5432" -> '-678.5432' +dsbas065 toSci "-0678.5432" -> '-678.5432' +dsbas066 toSci "-00678.5432" -> '-678.5432' +-- examples +dsbas067 toSci "5E-6" -> '0.000005' +dsbas068 toSci "50E-7" -> '0.0000050' +dsbas069 toSci "5E-7" -> '5E-7' + +-- [No exotics as no Unicode] + +-- rounded with dots in all (including edge) places +dsbas071 toSci .1234567890123456 -> 0.1234568 Inexact Rounded +dsbas072 toSci 1.234567890123456 -> 1.234568 Inexact Rounded +dsbas073 toSci 12.34567890123456 -> 12.34568 Inexact Rounded +dsbas074 toSci 123.4567890123456 -> 123.4568 Inexact Rounded +dsbas075 toSci 1234.567890123456 -> 1234.568 Inexact Rounded +dsbas076 toSci 12345.67890123456 -> 12345.68 Inexact Rounded +dsbas077 toSci 123456.7890123456 -> 123456.8 Inexact Rounded +dsbas078 toSci 1234567.890123456 -> 1234568 Inexact Rounded +dsbas079 toSci 12345678.90123456 -> 1.234568E+7 Inexact Rounded +dsbas080 toSci 123456789.0123456 -> 1.234568E+8 Inexact Rounded +dsbas081 toSci 1234567890.123456 -> 1.234568E+9 Inexact Rounded +dsbas082 toSci 12345678901.23456 -> 1.234568E+10 Inexact Rounded +dsbas083 toSci 123456789012.3456 -> 1.234568E+11 Inexact Rounded +dsbas084 toSci 1234567890123.456 -> 1.234568E+12 Inexact Rounded +dsbas085 toSci 12345678901234.56 -> 1.234568E+13 Inexact Rounded +dsbas086 toSci 123456789012345.6 -> 1.234568E+14 Inexact Rounded +dsbas087 toSci 1234567890123456. -> 1.234568E+15 Inexact Rounded +dsbas088 toSci 1234567890123456 -> 1.234568E+15 Inexact Rounded + +-- Numbers with E +dsbas130 toSci "0.000E-1" -> '0.0000' +dsbas131 toSci "0.000E-2" -> '0.00000' +dsbas132 toSci "0.000E-3" -> '0.000000' +dsbas133 toSci "0.000E-4" -> '0E-7' +dsbas134 toSci "0.00E-2" -> '0.0000' +dsbas135 toSci "0.00E-3" -> '0.00000' +dsbas136 toSci "0.00E-4" -> '0.000000' +dsbas137 toSci "0.00E-5" -> '0E-7' +dsbas138 toSci "+0E+9" -> '0E+9' +dsbas139 toSci "-0E+9" -> '-0E+9' +dsbas140 toSci "1E+9" -> '1E+9' +dsbas141 toSci "1e+09" -> '1E+9' +dsbas142 toSci "1E+90" -> '1E+90' +dsbas143 toSci "+1E+009" -> '1E+9' +dsbas144 toSci "0E+9" -> '0E+9' +dsbas145 toSci "1E+9" -> '1E+9' +dsbas146 toSci "1E+09" -> '1E+9' +dsbas147 toSci "1e+90" -> '1E+90' +dsbas148 toSci "1E+009" -> '1E+9' +dsbas149 toSci "000E+9" -> '0E+9' +dsbas150 toSci "1E9" -> '1E+9' +dsbas151 toSci "1e09" -> '1E+9' +dsbas152 toSci "1E90" -> '1E+90' +dsbas153 toSci "1E009" -> '1E+9' +dsbas154 toSci "0E9" -> '0E+9' +dsbas155 toSci "0.000e+0" -> '0.000' +dsbas156 toSci "0.000E-1" -> '0.0000' +dsbas157 toSci "4E+9" -> '4E+9' +dsbas158 toSci "44E+9" -> '4.4E+10' +dsbas159 toSci "0.73e-7" -> '7.3E-8' +dsbas160 toSci "00E+9" -> '0E+9' +dsbas161 toSci "00E-9" -> '0E-9' +dsbas162 toSci "10E+9" -> '1.0E+10' +dsbas163 toSci "10E+09" -> '1.0E+10' +dsbas164 toSci "10e+90" -> '1.0E+91' +dsbas165 toSci "10E+009" -> '1.0E+10' +dsbas166 toSci "100e+9" -> '1.00E+11' +dsbas167 toSci "100e+09" -> '1.00E+11' +dsbas168 toSci "100E+90" -> '1.00E+92' +dsbas169 toSci "100e+009" -> '1.00E+11' + +dsbas170 toSci "1.265" -> '1.265' +dsbas171 toSci "1.265E-20" -> '1.265E-20' +dsbas172 toSci "1.265E-8" -> '1.265E-8' +dsbas173 toSci "1.265E-4" -> '0.0001265' +dsbas174 toSci "1.265E-3" -> '0.001265' +dsbas175 toSci "1.265E-2" -> '0.01265' +dsbas176 toSci "1.265E-1" -> '0.1265' +dsbas177 toSci "1.265E-0" -> '1.265' +dsbas178 toSci "1.265E+1" -> '12.65' +dsbas179 toSci "1.265E+2" -> '126.5' +dsbas180 toSci "1.265E+3" -> '1265' +dsbas181 toSci "1.265E+4" -> '1.265E+4' +dsbas182 toSci "1.265E+8" -> '1.265E+8' +dsbas183 toSci "1.265E+20" -> '1.265E+20' + +dsbas190 toSci "12.65" -> '12.65' +dsbas191 toSci "12.65E-20" -> '1.265E-19' +dsbas192 toSci "12.65E-8" -> '1.265E-7' +dsbas193 toSci "12.65E-4" -> '0.001265' +dsbas194 toSci "12.65E-3" -> '0.01265' +dsbas195 toSci "12.65E-2" -> '0.1265' +dsbas196 toSci "12.65E-1" -> '1.265' +dsbas197 toSci "12.65E-0" -> '12.65' +dsbas198 toSci "12.65E+1" -> '126.5' +dsbas199 toSci "12.65E+2" -> '1265' +dsbas200 toSci "12.65E+3" -> '1.265E+4' +dsbas201 toSci "12.65E+4" -> '1.265E+5' +dsbas202 toSci "12.65E+8" -> '1.265E+9' +dsbas203 toSci "12.65E+20" -> '1.265E+21' + +dsbas210 toSci "126.5" -> '126.5' +dsbas211 toSci "126.5E-20" -> '1.265E-18' +dsbas212 toSci "126.5E-8" -> '0.000001265' +dsbas213 toSci "126.5E-4" -> '0.01265' +dsbas214 toSci "126.5E-3" -> '0.1265' +dsbas215 toSci "126.5E-2" -> '1.265' +dsbas216 toSci "126.5E-1" -> '12.65' +dsbas217 toSci "126.5E-0" -> '126.5' +dsbas218 toSci "126.5E+1" -> '1265' +dsbas219 toSci "126.5E+2" -> '1.265E+4' +dsbas220 toSci "126.5E+3" -> '1.265E+5' +dsbas221 toSci "126.5E+4" -> '1.265E+6' +dsbas222 toSci "126.5E+8" -> '1.265E+10' +dsbas223 toSci "126.5E+20" -> '1.265E+22' + +dsbas230 toSci "1265" -> '1265' +dsbas231 toSci "1265E-20" -> '1.265E-17' +dsbas232 toSci "1265E-8" -> '0.00001265' +dsbas233 toSci "1265E-4" -> '0.1265' +dsbas234 toSci "1265E-3" -> '1.265' +dsbas235 toSci "1265E-2" -> '12.65' +dsbas236 toSci "1265E-1" -> '126.5' +dsbas237 toSci "1265E-0" -> '1265' +dsbas238 toSci "1265E+1" -> '1.265E+4' +dsbas239 toSci "1265E+2" -> '1.265E+5' +dsbas240 toSci "1265E+3" -> '1.265E+6' +dsbas241 toSci "1265E+4" -> '1.265E+7' +dsbas242 toSci "1265E+8" -> '1.265E+11' +dsbas243 toSci "1265E+20" -> '1.265E+23' + +dsbas250 toSci "0.1265" -> '0.1265' +dsbas251 toSci "0.1265E-20" -> '1.265E-21' +dsbas252 toSci "0.1265E-8" -> '1.265E-9' +dsbas253 toSci "0.1265E-4" -> '0.00001265' +dsbas254 toSci "0.1265E-3" -> '0.0001265' +dsbas255 toSci "0.1265E-2" -> '0.001265' +dsbas256 toSci "0.1265E-1" -> '0.01265' +dsbas257 toSci "0.1265E-0" -> '0.1265' +dsbas258 toSci "0.1265E+1" -> '1.265' +dsbas259 toSci "0.1265E+2" -> '12.65' +dsbas260 toSci "0.1265E+3" -> '126.5' +dsbas261 toSci "0.1265E+4" -> '1265' +dsbas262 toSci "0.1265E+8" -> '1.265E+7' +dsbas263 toSci "0.1265E+20" -> '1.265E+19' + +-- some more negative zeros [systematic tests below] +dsbas290 toSci "-0.000E-1" -> '-0.0000' +dsbas291 toSci "-0.000E-2" -> '-0.00000' +dsbas292 toSci "-0.000E-3" -> '-0.000000' +dsbas293 toSci "-0.000E-4" -> '-0E-7' +dsbas294 toSci "-0.00E-2" -> '-0.0000' +dsbas295 toSci "-0.00E-3" -> '-0.00000' +dsbas296 toSci "-0.0E-2" -> '-0.000' +dsbas297 toSci "-0.0E-3" -> '-0.0000' +dsbas298 toSci "-0E-2" -> '-0.00' +dsbas299 toSci "-0E-3" -> '-0.000' + +-- Engineering notation tests +dsbas301 toSci 10e12 -> 1.0E+13 +dsbas302 toEng 10e12 -> 10E+12 +dsbas303 toSci 10e11 -> 1.0E+12 +dsbas304 toEng 10e11 -> 1.0E+12 +dsbas305 toSci 10e10 -> 1.0E+11 +dsbas306 toEng 10e10 -> 100E+9 +dsbas307 toSci 10e9 -> 1.0E+10 +dsbas308 toEng 10e9 -> 10E+9 +dsbas309 toSci 10e8 -> 1.0E+9 +dsbas310 toEng 10e8 -> 1.0E+9 +dsbas311 toSci 10e7 -> 1.0E+8 +dsbas312 toEng 10e7 -> 100E+6 +dsbas313 toSci 10e6 -> 1.0E+7 +dsbas314 toEng 10e6 -> 10E+6 +dsbas315 toSci 10e5 -> 1.0E+6 +dsbas316 toEng 10e5 -> 1.0E+6 +dsbas317 toSci 10e4 -> 1.0E+5 +dsbas318 toEng 10e4 -> 100E+3 +dsbas319 toSci 10e3 -> 1.0E+4 +dsbas320 toEng 10e3 -> 10E+3 +dsbas321 toSci 10e2 -> 1.0E+3 +dsbas322 toEng 10e2 -> 1.0E+3 +dsbas323 toSci 10e1 -> 1.0E+2 +dsbas324 toEng 10e1 -> 100 +dsbas325 toSci 10e0 -> 10 +dsbas326 toEng 10e0 -> 10 +dsbas327 toSci 10e-1 -> 1.0 +dsbas328 toEng 10e-1 -> 1.0 +dsbas329 toSci 10e-2 -> 0.10 +dsbas330 toEng 10e-2 -> 0.10 +dsbas331 toSci 10e-3 -> 0.010 +dsbas332 toEng 10e-3 -> 0.010 +dsbas333 toSci 10e-4 -> 0.0010 +dsbas334 toEng 10e-4 -> 0.0010 +dsbas335 toSci 10e-5 -> 0.00010 +dsbas336 toEng 10e-5 -> 0.00010 +dsbas337 toSci 10e-6 -> 0.000010 +dsbas338 toEng 10e-6 -> 0.000010 +dsbas339 toSci 10e-7 -> 0.0000010 +dsbas340 toEng 10e-7 -> 0.0000010 +dsbas341 toSci 10e-8 -> 1.0E-7 +dsbas342 toEng 10e-8 -> 100E-9 +dsbas343 toSci 10e-9 -> 1.0E-8 +dsbas344 toEng 10e-9 -> 10E-9 +dsbas345 toSci 10e-10 -> 1.0E-9 +dsbas346 toEng 10e-10 -> 1.0E-9 +dsbas347 toSci 10e-11 -> 1.0E-10 +dsbas348 toEng 10e-11 -> 100E-12 +dsbas349 toSci 10e-12 -> 1.0E-11 +dsbas350 toEng 10e-12 -> 10E-12 +dsbas351 toSci 10e-13 -> 1.0E-12 +dsbas352 toEng 10e-13 -> 1.0E-12 + +dsbas361 toSci 7E12 -> 7E+12 +dsbas362 toEng 7E12 -> 7E+12 +dsbas363 toSci 7E11 -> 7E+11 +dsbas364 toEng 7E11 -> 700E+9 +dsbas365 toSci 7E10 -> 7E+10 +dsbas366 toEng 7E10 -> 70E+9 +dsbas367 toSci 7E9 -> 7E+9 +dsbas368 toEng 7E9 -> 7E+9 +dsbas369 toSci 7E8 -> 7E+8 +dsbas370 toEng 7E8 -> 700E+6 +dsbas371 toSci 7E7 -> 7E+7 +dsbas372 toEng 7E7 -> 70E+6 +dsbas373 toSci 7E6 -> 7E+6 +dsbas374 toEng 7E6 -> 7E+6 +dsbas375 toSci 7E5 -> 7E+5 +dsbas376 toEng 7E5 -> 700E+3 +dsbas377 toSci 7E4 -> 7E+4 +dsbas378 toEng 7E4 -> 70E+3 +dsbas379 toSci 7E3 -> 7E+3 +dsbas380 toEng 7E3 -> 7E+3 +dsbas381 toSci 7E2 -> 7E+2 +dsbas382 toEng 7E2 -> 700 +dsbas383 toSci 7E1 -> 7E+1 +dsbas384 toEng 7E1 -> 70 +dsbas385 toSci 7E0 -> 7 +dsbas386 toEng 7E0 -> 7 +dsbas387 toSci 7E-1 -> 0.7 +dsbas388 toEng 7E-1 -> 0.7 +dsbas389 toSci 7E-2 -> 0.07 +dsbas390 toEng 7E-2 -> 0.07 +dsbas391 toSci 7E-3 -> 0.007 +dsbas392 toEng 7E-3 -> 0.007 +dsbas393 toSci 7E-4 -> 0.0007 +dsbas394 toEng 7E-4 -> 0.0007 +dsbas395 toSci 7E-5 -> 0.00007 +dsbas396 toEng 7E-5 -> 0.00007 +dsbas397 toSci 7E-6 -> 0.000007 +dsbas398 toEng 7E-6 -> 0.000007 +dsbas399 toSci 7E-7 -> 7E-7 +dsbas400 toEng 7E-7 -> 700E-9 +dsbas401 toSci 7E-8 -> 7E-8 +dsbas402 toEng 7E-8 -> 70E-9 +dsbas403 toSci 7E-9 -> 7E-9 +dsbas404 toEng 7E-9 -> 7E-9 +dsbas405 toSci 7E-10 -> 7E-10 +dsbas406 toEng 7E-10 -> 700E-12 +dsbas407 toSci 7E-11 -> 7E-11 +dsbas408 toEng 7E-11 -> 70E-12 +dsbas409 toSci 7E-12 -> 7E-12 +dsbas410 toEng 7E-12 -> 7E-12 +dsbas411 toSci 7E-13 -> 7E-13 +dsbas412 toEng 7E-13 -> 700E-15 + +-- Exacts remain exact up to precision .. +dsbas420 toSci 100 -> 100 +dsbas422 toSci 1000 -> 1000 +dsbas424 toSci 999.9 -> 999.9 +dsbas426 toSci 1000.0 -> 1000.0 +dsbas428 toSci 1000.1 -> 1000.1 +dsbas430 toSci 10000 -> 10000 +dsbas432 toSci 1000 -> 1000 +dsbas434 toSci 10000 -> 10000 +dsbas436 toSci 100000 -> 100000 +dsbas438 toSci 1000000 -> 1000000 +dsbas440 toSci 10000000 -> 1.000000E+7 Rounded +dsbas442 toSci 10000000 -> 1.000000E+7 Rounded +dsbas444 toSci 10000003 -> 1.000000E+7 Rounded Inexact +dsbas446 toSci 10000005 -> 1.000000E+7 Rounded Inexact +dsbas448 toSci 100000050 -> 1.000000E+8 Rounded Inexact +dsbas450 toSci 10000009 -> 1.000001E+7 Rounded Inexact +dsbas452 toSci 100000000 -> 1.000000E+8 Rounded +dsbas454 toSci 100000003 -> 1.000000E+8 Rounded Inexact +dsbas456 toSci 100000005 -> 1.000000E+8 Rounded Inexact +dsbas458 toSci 100000009 -> 1.000000E+8 Rounded Inexact +dsbas460 toSci 1000000000 -> 1.000000E+9 Rounded +dsbas462 toSci 1000000300 -> 1.000000E+9 Rounded Inexact +dsbas464 toSci 1000000500 -> 1.000000E+9 Rounded Inexact +dsbas466 toSci 1000000900 -> 1.000001E+9 Rounded Inexact +dsbas468 toSci 10000000000 -> 1.000000E+10 Rounded +dsbas470 toSci 10000003000 -> 1.000000E+10 Rounded Inexact +dsbas472 toSci 10000005000 -> 1.000000E+10 Rounded Inexact +dsbas474 toSci 10000009000 -> 1.000001E+10 Rounded Inexact + +-- check rounding modes heeded +rounding: ceiling +dsbsr401 toSci 1.1123450 -> 1.112345 Rounded +dsbsr402 toSci 1.11234549 -> 1.112346 Rounded Inexact +dsbsr403 toSci 1.11234550 -> 1.112346 Rounded Inexact +dsbsr404 toSci 1.11234551 -> 1.112346 Rounded Inexact +rounding: up +dsbsr405 toSci 1.1123450 -> 1.112345 Rounded +dsbsr406 toSci 1.11234549 -> 1.112346 Rounded Inexact +dsbsr407 toSci 1.11234550 -> 1.112346 Rounded Inexact +dsbsr408 toSci 1.11234551 -> 1.112346 Rounded Inexact +rounding: floor +dsbsr410 toSci 1.1123450 -> 1.112345 Rounded +dsbsr411 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr412 toSci 1.11234550 -> 1.112345 Rounded Inexact +dsbsr413 toSci 1.11234551 -> 1.112345 Rounded Inexact +rounding: half_down +dsbsr415 toSci 1.1123450 -> 1.112345 Rounded +dsbsr416 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr417 toSci 1.11234550 -> 1.112345 Rounded Inexact +dsbsr418 toSci 1.11234650 -> 1.112346 Rounded Inexact +dsbsr419 toSci 1.11234551 -> 1.112346 Rounded Inexact +rounding: half_even +dsbsr421 toSci 1.1123450 -> 1.112345 Rounded +dsbsr422 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr423 toSci 1.11234550 -> 1.112346 Rounded Inexact +dsbsr424 toSci 1.11234650 -> 1.112346 Rounded Inexact +dsbsr425 toSci 1.11234551 -> 1.112346 Rounded Inexact +rounding: down +dsbsr426 toSci 1.1123450 -> 1.112345 Rounded +dsbsr427 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr428 toSci 1.11234550 -> 1.112345 Rounded Inexact +dsbsr429 toSci 1.11234551 -> 1.112345 Rounded Inexact +rounding: half_up +dsbsr431 toSci 1.1123450 -> 1.112345 Rounded +dsbsr432 toSci 1.11234549 -> 1.112345 Rounded Inexact +dsbsr433 toSci 1.11234550 -> 1.112346 Rounded Inexact +dsbsr434 toSci 1.11234650 -> 1.112347 Rounded Inexact +dsbsr435 toSci 1.11234551 -> 1.112346 Rounded Inexact +-- negatives +rounding: ceiling +dsbsr501 toSci -1.1123450 -> -1.112345 Rounded +dsbsr502 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr503 toSci -1.11234550 -> -1.112345 Rounded Inexact +dsbsr504 toSci -1.11234551 -> -1.112345 Rounded Inexact +rounding: up +dsbsr505 toSci -1.1123450 -> -1.112345 Rounded +dsbsr506 toSci -1.11234549 -> -1.112346 Rounded Inexact +dsbsr507 toSci -1.11234550 -> -1.112346 Rounded Inexact +dsbsr508 toSci -1.11234551 -> -1.112346 Rounded Inexact +rounding: floor +dsbsr510 toSci -1.1123450 -> -1.112345 Rounded +dsbsr511 toSci -1.11234549 -> -1.112346 Rounded Inexact +dsbsr512 toSci -1.11234550 -> -1.112346 Rounded Inexact +dsbsr513 toSci -1.11234551 -> -1.112346 Rounded Inexact +rounding: half_down +dsbsr515 toSci -1.1123450 -> -1.112345 Rounded +dsbsr516 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr517 toSci -1.11234550 -> -1.112345 Rounded Inexact +dsbsr518 toSci -1.11234650 -> -1.112346 Rounded Inexact +dsbsr519 toSci -1.11234551 -> -1.112346 Rounded Inexact +rounding: half_even +dsbsr521 toSci -1.1123450 -> -1.112345 Rounded +dsbsr522 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr523 toSci -1.11234550 -> -1.112346 Rounded Inexact +dsbsr524 toSci -1.11234650 -> -1.112346 Rounded Inexact +dsbsr525 toSci -1.11234551 -> -1.112346 Rounded Inexact +rounding: down +dsbsr526 toSci -1.1123450 -> -1.112345 Rounded +dsbsr527 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr528 toSci -1.11234550 -> -1.112345 Rounded Inexact +dsbsr529 toSci -1.11234551 -> -1.112345 Rounded Inexact +rounding: half_up +dsbsr531 toSci -1.1123450 -> -1.112345 Rounded +dsbsr532 toSci -1.11234549 -> -1.112345 Rounded Inexact +dsbsr533 toSci -1.11234550 -> -1.112346 Rounded Inexact +dsbsr534 toSci -1.11234650 -> -1.112347 Rounded Inexact +dsbsr535 toSci -1.11234551 -> -1.112346 Rounded Inexact + +rounding: half_even + +-- The 'baddies' tests from DiagBigDecimal, plus some new ones +dsbas500 toSci '1..2' -> NaN Conversion_syntax +dsbas501 toSci '.' -> NaN Conversion_syntax +dsbas502 toSci '..' -> NaN Conversion_syntax +dsbas503 toSci '++1' -> NaN Conversion_syntax +dsbas504 toSci '--1' -> NaN Conversion_syntax +dsbas505 toSci '-+1' -> NaN Conversion_syntax +dsbas506 toSci '+-1' -> NaN Conversion_syntax +dsbas507 toSci '12e' -> NaN Conversion_syntax +dsbas508 toSci '12e++' -> NaN Conversion_syntax +dsbas509 toSci '12f4' -> NaN Conversion_syntax +dsbas510 toSci ' +1' -> NaN Conversion_syntax +dsbas511 toSci '+ 1' -> NaN Conversion_syntax +dsbas512 toSci '12 ' -> NaN Conversion_syntax +dsbas513 toSci ' + 1' -> NaN Conversion_syntax +dsbas514 toSci ' - 1 ' -> NaN Conversion_syntax +dsbas515 toSci 'x' -> NaN Conversion_syntax +dsbas516 toSci '-1-' -> NaN Conversion_syntax +dsbas517 toSci '12-' -> NaN Conversion_syntax +dsbas518 toSci '3+' -> NaN Conversion_syntax +dsbas519 toSci '' -> NaN Conversion_syntax +dsbas520 toSci '1e-' -> NaN Conversion_syntax +dsbas521 toSci '7e99999a' -> NaN Conversion_syntax +dsbas522 toSci '7e123567890x' -> NaN Conversion_syntax +dsbas523 toSci '7e12356789012x' -> NaN Conversion_syntax +dsbas524 toSci '' -> NaN Conversion_syntax +dsbas525 toSci 'e100' -> NaN Conversion_syntax +dsbas526 toSci '\u0e5a' -> NaN Conversion_syntax +dsbas527 toSci '\u0b65' -> NaN Conversion_syntax +dsbas528 toSci '123,65' -> NaN Conversion_syntax +dsbas529 toSci '1.34.5' -> NaN Conversion_syntax +dsbas530 toSci '.123.5' -> NaN Conversion_syntax +dsbas531 toSci '01.35.' -> NaN Conversion_syntax +dsbas532 toSci '01.35-' -> NaN Conversion_syntax +dsbas533 toSci '0000..' -> NaN Conversion_syntax +dsbas534 toSci '.0000.' -> NaN Conversion_syntax +dsbas535 toSci '00..00' -> NaN Conversion_syntax +dsbas536 toSci '111e*123' -> NaN Conversion_syntax +dsbas537 toSci '111e123-' -> NaN Conversion_syntax +dsbas538 toSci '111e+12+' -> NaN Conversion_syntax +dsbas539 toSci '111e1-3-' -> NaN Conversion_syntax +dsbas540 toSci '111e1*23' -> NaN Conversion_syntax +dsbas541 toSci '111e1e+3' -> NaN Conversion_syntax +dsbas542 toSci '1e1.0' -> NaN Conversion_syntax +dsbas543 toSci '1e123e' -> NaN Conversion_syntax +dsbas544 toSci 'ten' -> NaN Conversion_syntax +dsbas545 toSci 'ONE' -> NaN Conversion_syntax +dsbas546 toSci '1e.1' -> NaN Conversion_syntax +dsbas547 toSci '1e1.' -> NaN Conversion_syntax +dsbas548 toSci '1ee' -> NaN Conversion_syntax +dsbas549 toSci 'e+1' -> NaN Conversion_syntax +dsbas550 toSci '1.23.4' -> NaN Conversion_syntax +dsbas551 toSci '1.2.1' -> NaN Conversion_syntax +dsbas552 toSci '1E+1.2' -> NaN Conversion_syntax +dsbas553 toSci '1E+1.2.3' -> NaN Conversion_syntax +dsbas554 toSci '1E++1' -> NaN Conversion_syntax +dsbas555 toSci '1E--1' -> NaN Conversion_syntax +dsbas556 toSci '1E+-1' -> NaN Conversion_syntax +dsbas557 toSci '1E-+1' -> NaN Conversion_syntax +dsbas558 toSci '1E''1' -> NaN Conversion_syntax +dsbas559 toSci "1E""1" -> NaN Conversion_syntax +dsbas560 toSci "1E""""" -> NaN Conversion_syntax +-- Near-specials +dsbas561 toSci "qNaN" -> NaN Conversion_syntax +dsbas562 toSci "NaNq" -> NaN Conversion_syntax +dsbas563 toSci "NaNs" -> NaN Conversion_syntax +dsbas564 toSci "Infi" -> NaN Conversion_syntax +dsbas565 toSci "Infin" -> NaN Conversion_syntax +dsbas566 toSci "Infini" -> NaN Conversion_syntax +dsbas567 toSci "Infinit" -> NaN Conversion_syntax +dsbas568 toSci "-Infinit" -> NaN Conversion_syntax +dsbas569 toSci "0Inf" -> NaN Conversion_syntax +dsbas570 toSci "9Inf" -> NaN Conversion_syntax +dsbas571 toSci "-0Inf" -> NaN Conversion_syntax +dsbas572 toSci "-9Inf" -> NaN Conversion_syntax +dsbas573 toSci "-sNa" -> NaN Conversion_syntax +dsbas574 toSci "xNaN" -> NaN Conversion_syntax +dsbas575 toSci "0sNaN" -> NaN Conversion_syntax + +-- some baddies with dots and Es and dots and specials +dsbas576 toSci 'e+1' -> NaN Conversion_syntax +dsbas577 toSci '.e+1' -> NaN Conversion_syntax +dsbas578 toSci '+.e+1' -> NaN Conversion_syntax +dsbas579 toSci '-.e+' -> NaN Conversion_syntax +dsbas580 toSci '-.e' -> NaN Conversion_syntax +dsbas581 toSci 'E+1' -> NaN Conversion_syntax +dsbas582 toSci '.E+1' -> NaN Conversion_syntax +dsbas583 toSci '+.E+1' -> NaN Conversion_syntax +dsbas584 toSci '-.E+' -> NaN Conversion_syntax +dsbas585 toSci '-.E' -> NaN Conversion_syntax + +dsbas586 toSci '.NaN' -> NaN Conversion_syntax +dsbas587 toSci '-.NaN' -> NaN Conversion_syntax +dsbas588 toSci '+.sNaN' -> NaN Conversion_syntax +dsbas589 toSci '+.Inf' -> NaN Conversion_syntax +dsbas590 toSci '.Infinity' -> NaN Conversion_syntax + +-- Zeros +dsbas601 toSci 0.000000000 -> 0E-9 +dsbas602 toSci 0.00000000 -> 0E-8 +dsbas603 toSci 0.0000000 -> 0E-7 +dsbas604 toSci 0.000000 -> 0.000000 +dsbas605 toSci 0.00000 -> 0.00000 +dsbas606 toSci 0.0000 -> 0.0000 +dsbas607 toSci 0.000 -> 0.000 +dsbas608 toSci 0.00 -> 0.00 +dsbas609 toSci 0.0 -> 0.0 +dsbas610 toSci .0 -> 0.0 +dsbas611 toSci 0. -> 0 +dsbas612 toSci -.0 -> -0.0 +dsbas613 toSci -0. -> -0 +dsbas614 toSci -0.0 -> -0.0 +dsbas615 toSci -0.00 -> -0.00 +dsbas616 toSci -0.000 -> -0.000 +dsbas617 toSci -0.0000 -> -0.0000 +dsbas618 toSci -0.00000 -> -0.00000 +dsbas619 toSci -0.000000 -> -0.000000 +dsbas620 toSci -0.0000000 -> -0E-7 +dsbas621 toSci -0.00000000 -> -0E-8 +dsbas622 toSci -0.000000000 -> -0E-9 + +dsbas630 toSci 0.00E+0 -> 0.00 +dsbas631 toSci 0.00E+1 -> 0.0 +dsbas632 toSci 0.00E+2 -> 0 +dsbas633 toSci 0.00E+3 -> 0E+1 +dsbas634 toSci 0.00E+4 -> 0E+2 +dsbas635 toSci 0.00E+5 -> 0E+3 +dsbas636 toSci 0.00E+6 -> 0E+4 +dsbas637 toSci 0.00E+7 -> 0E+5 +dsbas638 toSci 0.00E+8 -> 0E+6 +dsbas639 toSci 0.00E+9 -> 0E+7 + +dsbas640 toSci 0.0E+0 -> 0.0 +dsbas641 toSci 0.0E+1 -> 0 +dsbas642 toSci 0.0E+2 -> 0E+1 +dsbas643 toSci 0.0E+3 -> 0E+2 +dsbas644 toSci 0.0E+4 -> 0E+3 +dsbas645 toSci 0.0E+5 -> 0E+4 +dsbas646 toSci 0.0E+6 -> 0E+5 +dsbas647 toSci 0.0E+7 -> 0E+6 +dsbas648 toSci 0.0E+8 -> 0E+7 +dsbas649 toSci 0.0E+9 -> 0E+8 + +dsbas650 toSci 0E+0 -> 0 +dsbas651 toSci 0E+1 -> 0E+1 +dsbas652 toSci 0E+2 -> 0E+2 +dsbas653 toSci 0E+3 -> 0E+3 +dsbas654 toSci 0E+4 -> 0E+4 +dsbas655 toSci 0E+5 -> 0E+5 +dsbas656 toSci 0E+6 -> 0E+6 +dsbas657 toSci 0E+7 -> 0E+7 +dsbas658 toSci 0E+8 -> 0E+8 +dsbas659 toSci 0E+9 -> 0E+9 + +dsbas660 toSci 0.0E-0 -> 0.0 +dsbas661 toSci 0.0E-1 -> 0.00 +dsbas662 toSci 0.0E-2 -> 0.000 +dsbas663 toSci 0.0E-3 -> 0.0000 +dsbas664 toSci 0.0E-4 -> 0.00000 +dsbas665 toSci 0.0E-5 -> 0.000000 +dsbas666 toSci 0.0E-6 -> 0E-7 +dsbas667 toSci 0.0E-7 -> 0E-8 +dsbas668 toSci 0.0E-8 -> 0E-9 +dsbas669 toSci 0.0E-9 -> 0E-10 + +dsbas670 toSci 0.00E-0 -> 0.00 +dsbas671 toSci 0.00E-1 -> 0.000 +dsbas672 toSci 0.00E-2 -> 0.0000 +dsbas673 toSci 0.00E-3 -> 0.00000 +dsbas674 toSci 0.00E-4 -> 0.000000 +dsbas675 toSci 0.00E-5 -> 0E-7 +dsbas676 toSci 0.00E-6 -> 0E-8 +dsbas677 toSci 0.00E-7 -> 0E-9 +dsbas678 toSci 0.00E-8 -> 0E-10 +dsbas679 toSci 0.00E-9 -> 0E-11 + +dsbas680 toSci 000000. -> 0 +dsbas681 toSci 00000. -> 0 +dsbas682 toSci 0000. -> 0 +dsbas683 toSci 000. -> 0 +dsbas684 toSci 00. -> 0 +dsbas685 toSci 0. -> 0 +dsbas686 toSci +00000. -> 0 +dsbas687 toSci -00000. -> -0 +dsbas688 toSci +0. -> 0 +dsbas689 toSci -0. -> -0 + +-- Specials +dsbas700 toSci "NaN" -> NaN +dsbas701 toSci "nan" -> NaN +dsbas702 toSci "nAn" -> NaN +dsbas703 toSci "NAN" -> NaN +dsbas704 toSci "+NaN" -> NaN +dsbas705 toSci "+nan" -> NaN +dsbas706 toSci "+nAn" -> NaN +dsbas707 toSci "+NAN" -> NaN +dsbas708 toSci "-NaN" -> -NaN +dsbas709 toSci "-nan" -> -NaN +dsbas710 toSci "-nAn" -> -NaN +dsbas711 toSci "-NAN" -> -NaN +dsbas712 toSci 'NaN0' -> NaN +dsbas713 toSci 'NaN1' -> NaN1 +dsbas714 toSci 'NaN12' -> NaN12 +dsbas715 toSci 'NaN123' -> NaN123 +dsbas716 toSci 'NaN1234' -> NaN1234 +dsbas717 toSci 'NaN01' -> NaN1 +dsbas718 toSci 'NaN012' -> NaN12 +dsbas719 toSci 'NaN0123' -> NaN123 +dsbas720 toSci 'NaN01234' -> NaN1234 +dsbas721 toSci 'NaN001' -> NaN1 +dsbas722 toSci 'NaN0012' -> NaN12 +dsbas723 toSci 'NaN00123' -> NaN123 +dsbas724 toSci 'NaN001234' -> NaN1234 +dsbas725 toSci 'NaN1234567890123456' -> NaN Conversion_syntax +dsbas726 toSci 'NaN123e+1' -> NaN Conversion_syntax +dsbas727 toSci 'NaN12.45' -> NaN Conversion_syntax +dsbas728 toSci 'NaN-12' -> NaN Conversion_syntax +dsbas729 toSci 'NaN+12' -> NaN Conversion_syntax + +dsbas730 toSci "sNaN" -> sNaN +dsbas731 toSci "snan" -> sNaN +dsbas732 toSci "SnAn" -> sNaN +dsbas733 toSci "SNAN" -> sNaN +dsbas734 toSci "+sNaN" -> sNaN +dsbas735 toSci "+snan" -> sNaN +dsbas736 toSci "+SnAn" -> sNaN +dsbas737 toSci "+SNAN" -> sNaN +dsbas738 toSci "-sNaN" -> -sNaN +dsbas739 toSci "-snan" -> -sNaN +dsbas740 toSci "-SnAn" -> -sNaN +dsbas741 toSci "-SNAN" -> -sNaN +dsbas742 toSci 'sNaN0000' -> sNaN +dsbas743 toSci 'sNaN7' -> sNaN7 +dsbas744 toSci 'sNaN007234' -> sNaN7234 +dsbas745 toSci 'sNaN7234561234567890' -> NaN Conversion_syntax +dsbas746 toSci 'sNaN72.45' -> NaN Conversion_syntax +dsbas747 toSci 'sNaN-72' -> NaN Conversion_syntax + +dsbas748 toSci "Inf" -> Infinity +dsbas749 toSci "inf" -> Infinity +dsbas750 toSci "iNf" -> Infinity +dsbas751 toSci "INF" -> Infinity +dsbas752 toSci "+Inf" -> Infinity +dsbas753 toSci "+inf" -> Infinity +dsbas754 toSci "+iNf" -> Infinity +dsbas755 toSci "+INF" -> Infinity +dsbas756 toSci "-Inf" -> -Infinity +dsbas757 toSci "-inf" -> -Infinity +dsbas758 toSci "-iNf" -> -Infinity +dsbas759 toSci "-INF" -> -Infinity + +dsbas760 toSci "Infinity" -> Infinity +dsbas761 toSci "infinity" -> Infinity +dsbas762 toSci "iNfInItY" -> Infinity +dsbas763 toSci "INFINITY" -> Infinity +dsbas764 toSci "+Infinity" -> Infinity +dsbas765 toSci "+infinity" -> Infinity +dsbas766 toSci "+iNfInItY" -> Infinity +dsbas767 toSci "+INFINITY" -> Infinity +dsbas768 toSci "-Infinity" -> -Infinity +dsbas769 toSci "-infinity" -> -Infinity +dsbas770 toSci "-iNfInItY" -> -Infinity +dsbas771 toSci "-INFINITY" -> -Infinity + +-- Specials and zeros for toEng +dsbast772 toEng "NaN" -> NaN +dsbast773 toEng "-Infinity" -> -Infinity +dsbast774 toEng "-sNaN" -> -sNaN +dsbast775 toEng "-NaN" -> -NaN +dsbast776 toEng "+Infinity" -> Infinity +dsbast778 toEng "+sNaN" -> sNaN +dsbast779 toEng "+NaN" -> NaN +dsbast780 toEng "INFINITY" -> Infinity +dsbast781 toEng "SNAN" -> sNaN +dsbast782 toEng "NAN" -> NaN +dsbast783 toEng "infinity" -> Infinity +dsbast784 toEng "snan" -> sNaN +dsbast785 toEng "nan" -> NaN +dsbast786 toEng "InFINITY" -> Infinity +dsbast787 toEng "SnAN" -> sNaN +dsbast788 toEng "nAN" -> NaN +dsbast789 toEng "iNfinity" -> Infinity +dsbast790 toEng "sNan" -> sNaN +dsbast791 toEng "Nan" -> NaN +dsbast792 toEng "Infinity" -> Infinity +dsbast793 toEng "sNaN" -> sNaN + +-- Zero toEng, etc. +dsbast800 toEng 0e+1 -> "0.00E+3" -- doc example + +dsbast801 toEng 0.000000000 -> 0E-9 +dsbast802 toEng 0.00000000 -> 0.00E-6 +dsbast803 toEng 0.0000000 -> 0.0E-6 +dsbast804 toEng 0.000000 -> 0.000000 +dsbast805 toEng 0.00000 -> 0.00000 +dsbast806 toEng 0.0000 -> 0.0000 +dsbast807 toEng 0.000 -> 0.000 +dsbast808 toEng 0.00 -> 0.00 +dsbast809 toEng 0.0 -> 0.0 +dsbast810 toEng .0 -> 0.0 +dsbast811 toEng 0. -> 0 +dsbast812 toEng -.0 -> -0.0 +dsbast813 toEng -0. -> -0 +dsbast814 toEng -0.0 -> -0.0 +dsbast815 toEng -0.00 -> -0.00 +dsbast816 toEng -0.000 -> -0.000 +dsbast817 toEng -0.0000 -> -0.0000 +dsbast818 toEng -0.00000 -> -0.00000 +dsbast819 toEng -0.000000 -> -0.000000 +dsbast820 toEng -0.0000000 -> -0.0E-6 +dsbast821 toEng -0.00000000 -> -0.00E-6 +dsbast822 toEng -0.000000000 -> -0E-9 + +dsbast830 toEng 0.00E+0 -> 0.00 +dsbast831 toEng 0.00E+1 -> 0.0 +dsbast832 toEng 0.00E+2 -> 0 +dsbast833 toEng 0.00E+3 -> 0.00E+3 +dsbast834 toEng 0.00E+4 -> 0.0E+3 +dsbast835 toEng 0.00E+5 -> 0E+3 +dsbast836 toEng 0.00E+6 -> 0.00E+6 +dsbast837 toEng 0.00E+7 -> 0.0E+6 +dsbast838 toEng 0.00E+8 -> 0E+6 +dsbast839 toEng 0.00E+9 -> 0.00E+9 + +dsbast840 toEng 0.0E+0 -> 0.0 +dsbast841 toEng 0.0E+1 -> 0 +dsbast842 toEng 0.0E+2 -> 0.00E+3 +dsbast843 toEng 0.0E+3 -> 0.0E+3 +dsbast844 toEng 0.0E+4 -> 0E+3 +dsbast845 toEng 0.0E+5 -> 0.00E+6 +dsbast846 toEng 0.0E+6 -> 0.0E+6 +dsbast847 toEng 0.0E+7 -> 0E+6 +dsbast848 toEng 0.0E+8 -> 0.00E+9 +dsbast849 toEng 0.0E+9 -> 0.0E+9 + +dsbast850 toEng 0E+0 -> 0 +dsbast851 toEng 0E+1 -> 0.00E+3 +dsbast852 toEng 0E+2 -> 0.0E+3 +dsbast853 toEng 0E+3 -> 0E+3 +dsbast854 toEng 0E+4 -> 0.00E+6 +dsbast855 toEng 0E+5 -> 0.0E+6 +dsbast856 toEng 0E+6 -> 0E+6 +dsbast857 toEng 0E+7 -> 0.00E+9 +dsbast858 toEng 0E+8 -> 0.0E+9 +dsbast859 toEng 0E+9 -> 0E+9 + +dsbast860 toEng 0.0E-0 -> 0.0 +dsbast861 toEng 0.0E-1 -> 0.00 +dsbast862 toEng 0.0E-2 -> 0.000 +dsbast863 toEng 0.0E-3 -> 0.0000 +dsbast864 toEng 0.0E-4 -> 0.00000 +dsbast865 toEng 0.0E-5 -> 0.000000 +dsbast866 toEng 0.0E-6 -> 0.0E-6 +dsbast867 toEng 0.0E-7 -> 0.00E-6 +dsbast868 toEng 0.0E-8 -> 0E-9 +dsbast869 toEng 0.0E-9 -> 0.0E-9 + +dsbast870 toEng 0.00E-0 -> 0.00 +dsbast871 toEng 0.00E-1 -> 0.000 +dsbast872 toEng 0.00E-2 -> 0.0000 +dsbast873 toEng 0.00E-3 -> 0.00000 +dsbast874 toEng 0.00E-4 -> 0.000000 +dsbast875 toEng 0.00E-5 -> 0.0E-6 +dsbast876 toEng 0.00E-6 -> 0.00E-6 +dsbast877 toEng 0.00E-7 -> 0E-9 +dsbast878 toEng 0.00E-8 -> 0.0E-9 +dsbast879 toEng 0.00E-9 -> 0.00E-9 + +-- long input strings +dsbas801 tosci '01234567' -> 1234567 +dsbas802 tosci '001234567' -> 1234567 +dsbas803 tosci '0001234567' -> 1234567 +dsbas804 tosci '00001234567' -> 1234567 +dsbas805 tosci '000001234567' -> 1234567 +dsbas806 tosci '0000001234567' -> 1234567 +dsbas807 tosci '00000001234567' -> 1234567 +dsbas808 tosci '000000001234567' -> 1234567 +dsbas809 tosci '0000000001234567' -> 1234567 +dsbas810 tosci '00000000001234567' -> 1234567 + +dsbas811 tosci '0.1234567' -> 0.1234567 +dsbas812 tosci '0.01234567' -> 0.01234567 +dsbas813 tosci '0.001234567' -> 0.001234567 +dsbas814 tosci '0.0001234567' -> 0.0001234567 +dsbas815 tosci '0.00001234567' -> 0.00001234567 +dsbas816 tosci '0.000001234567' -> 0.000001234567 +dsbas817 tosci '0.0000001234567' -> 1.234567E-7 +dsbas818 tosci '0.00000001234567' -> 1.234567E-8 +dsbas819 tosci '0.000000001234567' -> 1.234567E-9 +dsbas820 tosci '0.0000000001234567' -> 1.234567E-10 + +dsbas821 tosci '123456790' -> 1.234568E+8 Inexact Rounded +dsbas822 tosci '1234567901' -> 1.234568E+9 Inexact Rounded +dsbas823 tosci '12345679012' -> 1.234568E+10 Inexact Rounded +dsbas824 tosci '123456790123' -> 1.234568E+11 Inexact Rounded +dsbas825 tosci '1234567901234' -> 1.234568E+12 Inexact Rounded +dsbas826 tosci '12345679012345' -> 1.234568E+13 Inexact Rounded +dsbas827 tosci '123456790123456' -> 1.234568E+14 Inexact Rounded +dsbas828 tosci '1234567901234567' -> 1.234568E+15 Inexact Rounded +dsbas829 tosci '1234567890123456' -> 1.234568E+15 Inexact Rounded + +-- subnormals and overflows +dsbas906 toSci '99e999999999' -> Infinity Overflow Inexact Rounded +dsbas907 toSci '999e999999999' -> Infinity Overflow Inexact Rounded +dsbas908 toSci '0.9e-999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas909 toSci '0.09e-999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas910 toSci '0.1e1000000000' -> Infinity Overflow Inexact Rounded +dsbas911 toSci '10e-1000000000' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas912 toSci '0.9e9999999999' -> Infinity Overflow Inexact Rounded +dsbas913 toSci '99e-9999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas914 toSci '111e9999999999' -> Infinity Overflow Inexact Rounded +dsbas915 toSci '1111e-9999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas916 toSci '1111e-99999999999' -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas917 toSci '7e1000000000' -> Infinity Overflow Inexact Rounded +-- negatives the same +dsbas918 toSci '-99e999999999' -> -Infinity Overflow Inexact Rounded +dsbas919 toSci '-999e999999999' -> -Infinity Overflow Inexact Rounded +dsbas920 toSci '-0.9e-999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas921 toSci '-0.09e-999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas922 toSci '-0.1e1000000000' -> -Infinity Overflow Inexact Rounded +dsbas923 toSci '-10e-1000000000' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas924 toSci '-0.9e9999999999' -> -Infinity Overflow Inexact Rounded +dsbas925 toSci '-99e-9999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas926 toSci '-111e9999999999' -> -Infinity Overflow Inexact Rounded +dsbas927 toSci '-1111e-9999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas928 toSci '-1111e-99999999999' -> -0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas929 toSci '-7e1000000000' -> -Infinity Overflow Inexact Rounded + +-- overflow results at different rounding modes +rounding: ceiling +dsbas930 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas931 toSci '-7e10000' -> -9.999999E+96 Overflow Inexact Rounded +rounding: up +dsbas932 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas933 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: down +dsbas934 toSci '7e10000' -> 9.999999E+96 Overflow Inexact Rounded +dsbas935 toSci '-7e10000' -> -9.999999E+96 Overflow Inexact Rounded +rounding: floor +dsbas936 toSci '7e10000' -> 9.999999E+96 Overflow Inexact Rounded +dsbas937 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_up +dsbas938 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas939 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_even +dsbas940 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas941 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded +rounding: half_down +dsbas942 toSci '7e10000' -> Infinity Overflow Inexact Rounded +dsbas943 toSci '-7e10000' -> -Infinity Overflow Inexact Rounded + +rounding: half_even + +-- Now check 854/754r some subnormals and underflow to 0 +dsbem400 toSci 1.0000E-86 -> 1.0000E-86 +dsbem401 toSci 0.1E-97 -> 1E-98 Subnormal +dsbem402 toSci 0.1000E-97 -> 1.000E-98 Subnormal +dsbem403 toSci 0.0100E-97 -> 1.00E-99 Subnormal +dsbem404 toSci 0.0010E-97 -> 1.0E-100 Subnormal +dsbem405 toSci 0.0001E-97 -> 1E-101 Subnormal +dsbem406 toSci 0.00010E-97 -> 1E-101 Subnormal Rounded +dsbem407 toSci 0.00013E-97 -> 1E-101 Underflow Subnormal Inexact Rounded +dsbem408 toSci 0.00015E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem409 toSci 0.00017E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem410 toSci 0.00023E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem411 toSci 0.00025E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem412 toSci 0.00027E-97 -> 3E-101 Underflow Subnormal Inexact Rounded +dsbem413 toSci 0.000149E-97 -> 1E-101 Underflow Subnormal Inexact Rounded +dsbem414 toSci 0.000150E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem415 toSci 0.000151E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem416 toSci 0.000249E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem417 toSci 0.000250E-97 -> 2E-101 Underflow Subnormal Inexact Rounded +dsbem418 toSci 0.000251E-97 -> 3E-101 Underflow Subnormal Inexact Rounded +dsbem419 toSci 0.00009E-97 -> 1E-101 Underflow Subnormal Inexact Rounded +dsbem420 toSci 0.00005E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem421 toSci 0.00003E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem422 toSci 0.000009E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem423 toSci 0.000005E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem424 toSci 0.000003E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped + +dsbem425 toSci 0.001049E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded +dsbem426 toSci 0.001050E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded +dsbem427 toSci 0.001051E-97 -> 1.1E-100 Underflow Subnormal Inexact Rounded +dsbem428 toSci 0.001149E-97 -> 1.1E-100 Underflow Subnormal Inexact Rounded +dsbem429 toSci 0.001150E-97 -> 1.2E-100 Underflow Subnormal Inexact Rounded +dsbem430 toSci 0.001151E-97 -> 1.2E-100 Underflow Subnormal Inexact Rounded + +dsbem432 toSci 0.010049E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded +dsbem433 toSci 0.010050E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded +dsbem434 toSci 0.010051E-97 -> 1.01E-99 Underflow Subnormal Inexact Rounded +dsbem435 toSci 0.010149E-97 -> 1.01E-99 Underflow Subnormal Inexact Rounded +dsbem436 toSci 0.010150E-97 -> 1.02E-99 Underflow Subnormal Inexact Rounded +dsbem437 toSci 0.010151E-97 -> 1.02E-99 Underflow Subnormal Inexact Rounded + +dsbem440 toSci 0.10103E-97 -> 1.010E-98 Underflow Subnormal Inexact Rounded +dsbem441 toSci 0.10105E-97 -> 1.010E-98 Underflow Subnormal Inexact Rounded +dsbem442 toSci 0.10107E-97 -> 1.011E-98 Underflow Subnormal Inexact Rounded +dsbem443 toSci 0.10113E-97 -> 1.011E-98 Underflow Subnormal Inexact Rounded +dsbem444 toSci 0.10115E-97 -> 1.012E-98 Underflow Subnormal Inexact Rounded +dsbem445 toSci 0.10117E-97 -> 1.012E-98 Underflow Subnormal Inexact Rounded + +dsbem450 toSci 1.10730E-98 -> 1.107E-98 Underflow Subnormal Inexact Rounded +dsbem451 toSci 1.10750E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded +dsbem452 toSci 1.10770E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded +dsbem453 toSci 1.10830E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded +dsbem454 toSci 1.10850E-98 -> 1.108E-98 Underflow Subnormal Inexact Rounded +dsbem455 toSci 1.10870E-98 -> 1.109E-98 Underflow Subnormal Inexact Rounded + +-- make sure sign OK +dsbem456 toSci -0.10103E-97 -> -1.010E-98 Underflow Subnormal Inexact Rounded +dsbem457 toSci -0.10105E-97 -> -1.010E-98 Underflow Subnormal Inexact Rounded +dsbem458 toSci -0.10107E-97 -> -1.011E-98 Underflow Subnormal Inexact Rounded +dsbem459 toSci -0.10113E-97 -> -1.011E-98 Underflow Subnormal Inexact Rounded +dsbem460 toSci -0.10115E-97 -> -1.012E-98 Underflow Subnormal Inexact Rounded +dsbem461 toSci -0.10117E-97 -> -1.012E-98 Underflow Subnormal Inexact Rounded + +-- '999s' cases +dsbem464 toSci 999999E-98 -> 9.99999E-93 +dsbem465 toSci 99999.0E-97 -> 9.99990E-93 +dsbem466 toSci 99999.E-97 -> 9.9999E-93 +dsbem467 toSci 9999.9E-97 -> 9.9999E-94 +dsbem468 toSci 999.99E-97 -> 9.9999E-95 +dsbem469 toSci 99.999E-97 -> 9.9999E-96 Subnormal +dsbem470 toSci 9.9999E-97 -> 9.9999E-97 Subnormal +dsbem471 toSci 0.99999E-97 -> 1.0000E-97 Underflow Subnormal Inexact Rounded +dsbem472 toSci 0.099999E-97 -> 1.000E-98 Underflow Subnormal Inexact Rounded +dsbem473 toSci 0.0099999E-97 -> 1.00E-99 Underflow Subnormal Inexact Rounded +dsbem474 toSci 0.00099999E-97 -> 1.0E-100 Underflow Subnormal Inexact Rounded +dsbem475 toSci 0.000099999E-97 -> 1E-101 Underflow Subnormal Inexact Rounded +dsbem476 toSci 0.0000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem477 toSci 0.00000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbem478 toSci 0.000000099999E-97 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped + +-- Exponents with insignificant leading zeros +dsbas1001 toSci 1e999999999 -> Infinity Overflow Inexact Rounded +dsbas1002 toSci 1e0999999999 -> Infinity Overflow Inexact Rounded +dsbas1003 toSci 1e00999999999 -> Infinity Overflow Inexact Rounded +dsbas1004 toSci 1e000999999999 -> Infinity Overflow Inexact Rounded +dsbas1005 toSci 1e000000000000999999999 -> Infinity Overflow Inexact Rounded +dsbas1006 toSci 1e000000000001000000007 -> Infinity Overflow Inexact Rounded +dsbas1007 toSci 1e-999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1008 toSci 1e-0999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1009 toSci 1e-00999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1010 toSci 1e-000999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1011 toSci 1e-000000000000999999999 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped +dsbas1012 toSci 1e-000000000001000000007 -> 0E-101 Underflow Subnormal Inexact Rounded Clamped + +-- check for double-rounded subnormals +dsbas1041 toSci 1.1152444E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow +dsbas1042 toSci 1.1152445E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow +dsbas1043 toSci 1.1152446E-96 -> 1.11524E-96 Inexact Rounded Subnormal Underflow + +-- clamped zeros [see also clamp.decTest] +dsbas1075 toSci 0e+10000 -> 0E+90 Clamped +dsbas1076 toSci 0e-10000 -> 0E-101 Clamped +dsbas1077 toSci -0e+10000 -> -0E+90 Clamped +dsbas1078 toSci -0e-10000 -> -0E-101 Clamped + +-- extreme values from next-wider +dsbas1101 toSci -9.999999999999999E+384 -> -Infinity Overflow Inexact Rounded +dsbas1102 toSci -1E-383 -> -0E-101 Inexact Rounded Subnormal Underflow Clamped +dsbas1103 toSci -1E-398 -> -0E-101 Inexact Rounded Subnormal Underflow Clamped +dsbas1104 toSci -0 -> -0 +dsbas1105 toSci +0 -> 0 +dsbas1106 toSci +1E-398 -> 0E-101 Inexact Rounded Subnormal Underflow Clamped +dsbas1107 toSci +1E-383 -> 0E-101 Inexact Rounded Subnormal Underflow Clamped +dsbas1108 toSci +9.999999999999999E+384 -> Infinity Overflow Inexact Rounded + +-- narrowing case +dsbas1110 toSci 2.000000000000000E-99 -> 2.00E-99 Rounded Subnormal diff --git a/Lib/test/decimaltestdata/dsEncode.decTest b/Lib/test/decimaltestdata/dsEncode.decTest index 818578b1794..72647487595 100644 --- a/Lib/test/decimaltestdata/dsEncode.decTest +++ b/Lib/test/decimaltestdata/dsEncode.decTest @@ -1,372 +1,372 @@ ------------------------------------------------------------------------- --- dsEncode.decTest -- decimal four-byte format testcases -- --- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- --- [Previously called decimal32.decTest] -version: 2.59 - --- This set of tests is for the four-byte concrete representation. --- Its characteristics are: --- --- 1 bit sign --- 5 bits combination field --- 6 bits exponent continuation --- 20 bits coefficient continuation --- --- Total exponent length 8 bits --- Total coefficient length 24 bits (7 digits) --- --- Elimit = 191 (maximum encoded exponent) --- Emax = 96 (largest exponent value) --- Emin = -95 (smallest exponent value) --- bias = 101 (subtracted from encoded exponent) = -Etiny - --- The testcases here have only exactly representable data on the --- 'left-hand-side'; rounding from strings is tested in 'base' --- testcase groups. - -extended: 1 -clamp: 1 -precision: 7 -rounding: half_up -maxExponent: 96 -minExponent: -95 - --- General testcases --- (mostly derived from the Strawman 4 document and examples) -decs001 apply #A23003D0 -> -7.50 -decs002 apply -7.50 -> #A23003D0 --- derivative canonical plain strings -decs003 apply #A26003D0 -> -7.50E+3 -decs004 apply -7.50E+3 -> #A26003D0 -decs005 apply #A25003D0 -> -750 -decs006 apply -750 -> #A25003D0 -decs007 apply #A24003D0 -> -75.0 -decs008 apply -75.0 -> #A24003D0 -decs009 apply #A22003D0 -> -0.750 -decs010 apply -0.750 -> #A22003D0 -decs011 apply #A21003D0 -> -0.0750 -decs012 apply -0.0750 -> #A21003D0 -decs013 apply #A1f003D0 -> -0.000750 -decs014 apply -0.000750 -> #A1f003D0 -decs015 apply #A1d003D0 -> -0.00000750 -decs016 apply -0.00000750 -> #A1d003D0 -decs017 apply #A1c003D0 -> -7.50E-7 -decs018 apply -7.50E-7 -> #A1c003D0 - --- Normality -decs020 apply 1234567 -> #2654d2e7 -decs021 apply -1234567 -> #a654d2e7 -decs022 apply 1111111 -> #26524491 - --- Nmax and similar -decs031 apply 9.999999E+96 -> #77f3fcff -decs032 apply #77f3fcff -> 9.999999E+96 -decs033 apply 1.234567E+96 -> #47f4d2e7 -decs034 apply #47f4d2e7 -> 1.234567E+96 --- fold-downs (more below) -decs035 apply 1.23E+96 -> #47f4c000 Clamped -decs036 apply #47f4c000 -> 1.230000E+96 -decs037 apply 1E+96 -> #47f00000 Clamped -decs038 apply #47f00000 -> 1.000000E+96 - -decs051 apply 12345 -> #225049c5 -decs052 apply #225049c5 -> 12345 -decs053 apply 1234 -> #22500534 -decs054 apply #22500534 -> 1234 -decs055 apply 123 -> #225000a3 -decs056 apply #225000a3 -> 123 -decs057 apply 12 -> #22500012 -decs058 apply #22500012 -> 12 -decs059 apply 1 -> #22500001 -decs060 apply #22500001 -> 1 -decs061 apply 1.23 -> #223000a3 -decs062 apply #223000a3 -> 1.23 -decs063 apply 123.45 -> #223049c5 -decs064 apply #223049c5 -> 123.45 - --- Nmin and below -decs071 apply 1E-95 -> #00600001 -decs072 apply #00600001 -> 1E-95 -decs073 apply 1.000000E-95 -> #04000000 -decs074 apply #04000000 -> 1.000000E-95 -decs075 apply 1.000001E-95 -> #04000001 -decs076 apply #04000001 -> 1.000001E-95 - -decs077 apply 0.100000E-95 -> #00020000 Subnormal -decs07x apply 1.00000E-96 -> 1.00000E-96 Subnormal -decs078 apply #00020000 -> 1.00000E-96 Subnormal -decs079 apply 0.000010E-95 -> #00000010 Subnormal -decs080 apply #00000010 -> 1.0E-100 Subnormal -decs081 apply 0.000001E-95 -> #00000001 Subnormal -decs082 apply #00000001 -> 1E-101 Subnormal -decs083 apply 1e-101 -> #00000001 Subnormal -decs084 apply #00000001 -> 1E-101 Subnormal -decs08x apply 1e-101 -> 1E-101 Subnormal - --- underflows cannot be tested; just check edge case -decs090 apply 1e-101 -> #00000001 Subnormal - --- same again, negatives -- - --- Nmax and similar -decs122 apply -9.999999E+96 -> #f7f3fcff -decs123 apply #f7f3fcff -> -9.999999E+96 -decs124 apply -1.234567E+96 -> #c7f4d2e7 -decs125 apply #c7f4d2e7 -> -1.234567E+96 --- fold-downs (more below) -decs130 apply -1.23E+96 -> #c7f4c000 Clamped -decs131 apply #c7f4c000 -> -1.230000E+96 -decs132 apply -1E+96 -> #c7f00000 Clamped -decs133 apply #c7f00000 -> -1.000000E+96 - -decs151 apply -12345 -> #a25049c5 -decs152 apply #a25049c5 -> -12345 -decs153 apply -1234 -> #a2500534 -decs154 apply #a2500534 -> -1234 -decs155 apply -123 -> #a25000a3 -decs156 apply #a25000a3 -> -123 -decs157 apply -12 -> #a2500012 -decs158 apply #a2500012 -> -12 -decs159 apply -1 -> #a2500001 -decs160 apply #a2500001 -> -1 -decs161 apply -1.23 -> #a23000a3 -decs162 apply #a23000a3 -> -1.23 -decs163 apply -123.45 -> #a23049c5 -decs164 apply #a23049c5 -> -123.45 - --- Nmin and below -decs171 apply -1E-95 -> #80600001 -decs172 apply #80600001 -> -1E-95 -decs173 apply -1.000000E-95 -> #84000000 -decs174 apply #84000000 -> -1.000000E-95 -decs175 apply -1.000001E-95 -> #84000001 -decs176 apply #84000001 -> -1.000001E-95 - -decs177 apply -0.100000E-95 -> #80020000 Subnormal -decs178 apply #80020000 -> -1.00000E-96 Subnormal -decs179 apply -0.000010E-95 -> #80000010 Subnormal -decs180 apply #80000010 -> -1.0E-100 Subnormal -decs181 apply -0.000001E-95 -> #80000001 Subnormal -decs182 apply #80000001 -> -1E-101 Subnormal -decs183 apply -1e-101 -> #80000001 Subnormal -decs184 apply #80000001 -> -1E-101 Subnormal - --- underflow edge case -decs190 apply -1e-101 -> #80000001 Subnormal - --- zeros -decs400 apply 0E-400 -> #00000000 Clamped -decs401 apply 0E-101 -> #00000000 -decs402 apply #00000000 -> 0E-101 -decs403 apply 0.000000E-95 -> #00000000 -decs404 apply #00000000 -> 0E-101 -decs405 apply 0E-2 -> #22300000 -decs406 apply #22300000 -> 0.00 -decs407 apply 0 -> #22500000 -decs408 apply #22500000 -> 0 -decs409 apply 0E+3 -> #22800000 -decs410 apply #22800000 -> 0E+3 -decs411 apply 0E+90 -> #43f00000 -decs412 apply #43f00000 -> 0E+90 --- clamped zeros... -decs413 apply 0E+91 -> #43f00000 Clamped -decs414 apply #43f00000 -> 0E+90 -decs415 apply 0E+96 -> #43f00000 Clamped -decs416 apply #43f00000 -> 0E+90 -decs417 apply 0E+400 -> #43f00000 Clamped -decs418 apply #43f00000 -> 0E+90 - --- negative zeros -decs420 apply -0E-400 -> #80000000 Clamped -decs421 apply -0E-101 -> #80000000 -decs422 apply #80000000 -> -0E-101 -decs423 apply -0.000000E-95 -> #80000000 -decs424 apply #80000000 -> -0E-101 -decs425 apply -0E-2 -> #a2300000 -decs426 apply #a2300000 -> -0.00 -decs427 apply -0 -> #a2500000 -decs428 apply #a2500000 -> -0 -decs429 apply -0E+3 -> #a2800000 -decs430 apply #a2800000 -> -0E+3 -decs431 apply -0E+90 -> #c3f00000 -decs432 apply #c3f00000 -> -0E+90 --- clamped zeros... -decs433 apply -0E+91 -> #c3f00000 Clamped -decs434 apply #c3f00000 -> -0E+90 -decs435 apply -0E+96 -> #c3f00000 Clamped -decs436 apply #c3f00000 -> -0E+90 -decs437 apply -0E+400 -> #c3f00000 Clamped -decs438 apply #c3f00000 -> -0E+90 - --- Specials -decs500 apply Infinity -> #78000000 -decs501 apply #78787878 -> #78000000 -decs502 apply #78000000 -> Infinity -decs503 apply #79797979 -> #78000000 -decs504 apply #79000000 -> Infinity -decs505 apply #7a7a7a7a -> #78000000 -decs506 apply #7a000000 -> Infinity -decs507 apply #7b7b7b7b -> #78000000 -decs508 apply #7b000000 -> Infinity -decs509 apply #7c7c7c7c -> #7c0c7c7c - -decs510 apply NaN -> #7c000000 -decs511 apply #7c000000 -> NaN -decs512 apply #7d7d7d7d -> #7c0d7d7d -decs513 apply #7d000000 -> NaN -decs514 apply #7e7e7e7e -> #7e0e7c7e -decs515 apply #7e000000 -> sNaN -decs516 apply #7f7f7f7f -> #7e0f7c7f -decs517 apply #7f000000 -> sNaN -decs518 apply #7fffffff -> sNaN999999 -decs519 apply #7fffffff -> #7e03fcff - -decs520 apply -Infinity -> #f8000000 -decs521 apply #f8787878 -> #f8000000 -decs522 apply #f8000000 -> -Infinity -decs523 apply #f9797979 -> #f8000000 -decs524 apply #f9000000 -> -Infinity -decs525 apply #fa7a7a7a -> #f8000000 -decs526 apply #fa000000 -> -Infinity -decs527 apply #fb7b7b7b -> #f8000000 -decs528 apply #fb000000 -> -Infinity - -decs529 apply -NaN -> #fc000000 -decs530 apply #fc7c7c7c -> #fc0c7c7c -decs531 apply #fc000000 -> -NaN -decs532 apply #fd7d7d7d -> #fc0d7d7d -decs533 apply #fd000000 -> -NaN -decs534 apply #fe7e7e7e -> #fe0e7c7e -decs535 apply #fe000000 -> -sNaN -decs536 apply #ff7f7f7f -> #fe0f7c7f -decs537 apply #ff000000 -> -sNaN -decs538 apply #ffffffff -> -sNaN999999 -decs539 apply #ffffffff -> #fe03fcff - --- diagnostic NaNs -decs540 apply NaN -> #7c000000 -decs541 apply NaN0 -> #7c000000 -decs542 apply NaN1 -> #7c000001 -decs543 apply NaN12 -> #7c000012 -decs544 apply NaN79 -> #7c000079 -decs545 apply NaN12345 -> #7c0049c5 -decs546 apply NaN123456 -> #7c028e56 -decs547 apply NaN799799 -> #7c0f7fdf -decs548 apply NaN999999 -> #7c03fcff - - --- fold-down full sequence -decs601 apply 1E+96 -> #47f00000 Clamped -decs602 apply #47f00000 -> 1.000000E+96 -decs603 apply 1E+95 -> #43f20000 Clamped -decs604 apply #43f20000 -> 1.00000E+95 -decs605 apply 1E+94 -> #43f04000 Clamped -decs606 apply #43f04000 -> 1.0000E+94 -decs607 apply 1E+93 -> #43f00400 Clamped -decs608 apply #43f00400 -> 1.000E+93 -decs609 apply 1E+92 -> #43f00080 Clamped -decs610 apply #43f00080 -> 1.00E+92 -decs611 apply 1E+91 -> #43f00010 Clamped -decs612 apply #43f00010 -> 1.0E+91 -decs613 apply 1E+90 -> #43f00001 -decs614 apply #43f00001 -> 1E+90 - - --- Selected DPD codes -decs700 apply #22500000 -> 0 -decs701 apply #22500009 -> 9 -decs702 apply #22500010 -> 10 -decs703 apply #22500019 -> 19 -decs704 apply #22500020 -> 20 -decs705 apply #22500029 -> 29 -decs706 apply #22500030 -> 30 -decs707 apply #22500039 -> 39 -decs708 apply #22500040 -> 40 -decs709 apply #22500049 -> 49 -decs710 apply #22500050 -> 50 -decs711 apply #22500059 -> 59 -decs712 apply #22500060 -> 60 -decs713 apply #22500069 -> 69 -decs714 apply #22500070 -> 70 -decs715 apply #22500071 -> 71 -decs716 apply #22500072 -> 72 -decs717 apply #22500073 -> 73 -decs718 apply #22500074 -> 74 -decs719 apply #22500075 -> 75 -decs720 apply #22500076 -> 76 -decs721 apply #22500077 -> 77 -decs722 apply #22500078 -> 78 -decs723 apply #22500079 -> 79 - -decs730 apply #2250029e -> 994 -decs731 apply #2250029f -> 995 -decs732 apply #225002a0 -> 520 -decs733 apply #225002a1 -> 521 - --- DPD: one of each of the huffman groups -decs740 apply #225003f7 -> 777 -decs741 apply #225003f8 -> 778 -decs742 apply #225003eb -> 787 -decs743 apply #2250037d -> 877 -decs744 apply #2250039f -> 997 -decs745 apply #225003bf -> 979 -decs746 apply #225003df -> 799 -decs747 apply #2250006e -> 888 - - --- DPD all-highs cases (includes the 24 redundant codes) -decs750 apply #2250006e -> 888 -decs751 apply #2250016e -> 888 -decs752 apply #2250026e -> 888 -decs753 apply #2250036e -> 888 -decs754 apply #2250006f -> 889 -decs755 apply #2250016f -> 889 -decs756 apply #2250026f -> 889 -decs757 apply #2250036f -> 889 - -decs760 apply #2250007e -> 898 -decs761 apply #2250017e -> 898 -decs762 apply #2250027e -> 898 -decs763 apply #2250037e -> 898 -decs764 apply #2250007f -> 899 -decs765 apply #2250017f -> 899 -decs766 apply #2250027f -> 899 -decs767 apply #2250037f -> 899 - -decs770 apply #225000ee -> 988 -decs771 apply #225001ee -> 988 -decs772 apply #225002ee -> 988 -decs773 apply #225003ee -> 988 -decs774 apply #225000ef -> 989 -decs775 apply #225001ef -> 989 -decs776 apply #225002ef -> 989 -decs777 apply #225003ef -> 989 - -decs780 apply #225000fe -> 998 -decs781 apply #225001fe -> 998 -decs782 apply #225002fe -> 998 -decs783 apply #225003fe -> 998 -decs784 apply #225000ff -> 999 -decs785 apply #225001ff -> 999 -decs786 apply #225002ff -> 999 -decs787 apply #225003ff -> 999 - --- narrowing case -decs790 apply 2.00E-99 -> #00000100 Subnormal -decs791 apply #00000100 -> 2.00E-99 Subnormal +------------------------------------------------------------------------ +-- dsEncode.decTest -- decimal four-byte format testcases -- +-- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +-- [Previously called decimal32.decTest] +version: 2.59 + +-- This set of tests is for the four-byte concrete representation. +-- Its characteristics are: +-- +-- 1 bit sign +-- 5 bits combination field +-- 6 bits exponent continuation +-- 20 bits coefficient continuation +-- +-- Total exponent length 8 bits +-- Total coefficient length 24 bits (7 digits) +-- +-- Elimit = 191 (maximum encoded exponent) +-- Emax = 96 (largest exponent value) +-- Emin = -95 (smallest exponent value) +-- bias = 101 (subtracted from encoded exponent) = -Etiny + +-- The testcases here have only exactly representable data on the +-- 'left-hand-side'; rounding from strings is tested in 'base' +-- testcase groups. + +extended: 1 +clamp: 1 +precision: 7 +rounding: half_up +maxExponent: 96 +minExponent: -95 + +-- General testcases +-- (mostly derived from the Strawman 4 document and examples) +decs001 apply #A23003D0 -> -7.50 +decs002 apply -7.50 -> #A23003D0 +-- derivative canonical plain strings +decs003 apply #A26003D0 -> -7.50E+3 +decs004 apply -7.50E+3 -> #A26003D0 +decs005 apply #A25003D0 -> -750 +decs006 apply -750 -> #A25003D0 +decs007 apply #A24003D0 -> -75.0 +decs008 apply -75.0 -> #A24003D0 +decs009 apply #A22003D0 -> -0.750 +decs010 apply -0.750 -> #A22003D0 +decs011 apply #A21003D0 -> -0.0750 +decs012 apply -0.0750 -> #A21003D0 +decs013 apply #A1f003D0 -> -0.000750 +decs014 apply -0.000750 -> #A1f003D0 +decs015 apply #A1d003D0 -> -0.00000750 +decs016 apply -0.00000750 -> #A1d003D0 +decs017 apply #A1c003D0 -> -7.50E-7 +decs018 apply -7.50E-7 -> #A1c003D0 + +-- Normality +decs020 apply 1234567 -> #2654d2e7 +decs021 apply -1234567 -> #a654d2e7 +decs022 apply 1111111 -> #26524491 + +-- Nmax and similar +decs031 apply 9.999999E+96 -> #77f3fcff +decs032 apply #77f3fcff -> 9.999999E+96 +decs033 apply 1.234567E+96 -> #47f4d2e7 +decs034 apply #47f4d2e7 -> 1.234567E+96 +-- fold-downs (more below) +decs035 apply 1.23E+96 -> #47f4c000 Clamped +decs036 apply #47f4c000 -> 1.230000E+96 +decs037 apply 1E+96 -> #47f00000 Clamped +decs038 apply #47f00000 -> 1.000000E+96 + +decs051 apply 12345 -> #225049c5 +decs052 apply #225049c5 -> 12345 +decs053 apply 1234 -> #22500534 +decs054 apply #22500534 -> 1234 +decs055 apply 123 -> #225000a3 +decs056 apply #225000a3 -> 123 +decs057 apply 12 -> #22500012 +decs058 apply #22500012 -> 12 +decs059 apply 1 -> #22500001 +decs060 apply #22500001 -> 1 +decs061 apply 1.23 -> #223000a3 +decs062 apply #223000a3 -> 1.23 +decs063 apply 123.45 -> #223049c5 +decs064 apply #223049c5 -> 123.45 + +-- Nmin and below +decs071 apply 1E-95 -> #00600001 +decs072 apply #00600001 -> 1E-95 +decs073 apply 1.000000E-95 -> #04000000 +decs074 apply #04000000 -> 1.000000E-95 +decs075 apply 1.000001E-95 -> #04000001 +decs076 apply #04000001 -> 1.000001E-95 + +decs077 apply 0.100000E-95 -> #00020000 Subnormal +decs07x apply 1.00000E-96 -> 1.00000E-96 Subnormal +decs078 apply #00020000 -> 1.00000E-96 Subnormal +decs079 apply 0.000010E-95 -> #00000010 Subnormal +decs080 apply #00000010 -> 1.0E-100 Subnormal +decs081 apply 0.000001E-95 -> #00000001 Subnormal +decs082 apply #00000001 -> 1E-101 Subnormal +decs083 apply 1e-101 -> #00000001 Subnormal +decs084 apply #00000001 -> 1E-101 Subnormal +decs08x apply 1e-101 -> 1E-101 Subnormal + +-- underflows cannot be tested; just check edge case +decs090 apply 1e-101 -> #00000001 Subnormal + +-- same again, negatives -- + +-- Nmax and similar +decs122 apply -9.999999E+96 -> #f7f3fcff +decs123 apply #f7f3fcff -> -9.999999E+96 +decs124 apply -1.234567E+96 -> #c7f4d2e7 +decs125 apply #c7f4d2e7 -> -1.234567E+96 +-- fold-downs (more below) +decs130 apply -1.23E+96 -> #c7f4c000 Clamped +decs131 apply #c7f4c000 -> -1.230000E+96 +decs132 apply -1E+96 -> #c7f00000 Clamped +decs133 apply #c7f00000 -> -1.000000E+96 + +decs151 apply -12345 -> #a25049c5 +decs152 apply #a25049c5 -> -12345 +decs153 apply -1234 -> #a2500534 +decs154 apply #a2500534 -> -1234 +decs155 apply -123 -> #a25000a3 +decs156 apply #a25000a3 -> -123 +decs157 apply -12 -> #a2500012 +decs158 apply #a2500012 -> -12 +decs159 apply -1 -> #a2500001 +decs160 apply #a2500001 -> -1 +decs161 apply -1.23 -> #a23000a3 +decs162 apply #a23000a3 -> -1.23 +decs163 apply -123.45 -> #a23049c5 +decs164 apply #a23049c5 -> -123.45 + +-- Nmin and below +decs171 apply -1E-95 -> #80600001 +decs172 apply #80600001 -> -1E-95 +decs173 apply -1.000000E-95 -> #84000000 +decs174 apply #84000000 -> -1.000000E-95 +decs175 apply -1.000001E-95 -> #84000001 +decs176 apply #84000001 -> -1.000001E-95 + +decs177 apply -0.100000E-95 -> #80020000 Subnormal +decs178 apply #80020000 -> -1.00000E-96 Subnormal +decs179 apply -0.000010E-95 -> #80000010 Subnormal +decs180 apply #80000010 -> -1.0E-100 Subnormal +decs181 apply -0.000001E-95 -> #80000001 Subnormal +decs182 apply #80000001 -> -1E-101 Subnormal +decs183 apply -1e-101 -> #80000001 Subnormal +decs184 apply #80000001 -> -1E-101 Subnormal + +-- underflow edge case +decs190 apply -1e-101 -> #80000001 Subnormal + +-- zeros +decs400 apply 0E-400 -> #00000000 Clamped +decs401 apply 0E-101 -> #00000000 +decs402 apply #00000000 -> 0E-101 +decs403 apply 0.000000E-95 -> #00000000 +decs404 apply #00000000 -> 0E-101 +decs405 apply 0E-2 -> #22300000 +decs406 apply #22300000 -> 0.00 +decs407 apply 0 -> #22500000 +decs408 apply #22500000 -> 0 +decs409 apply 0E+3 -> #22800000 +decs410 apply #22800000 -> 0E+3 +decs411 apply 0E+90 -> #43f00000 +decs412 apply #43f00000 -> 0E+90 +-- clamped zeros... +decs413 apply 0E+91 -> #43f00000 Clamped +decs414 apply #43f00000 -> 0E+90 +decs415 apply 0E+96 -> #43f00000 Clamped +decs416 apply #43f00000 -> 0E+90 +decs417 apply 0E+400 -> #43f00000 Clamped +decs418 apply #43f00000 -> 0E+90 + +-- negative zeros +decs420 apply -0E-400 -> #80000000 Clamped +decs421 apply -0E-101 -> #80000000 +decs422 apply #80000000 -> -0E-101 +decs423 apply -0.000000E-95 -> #80000000 +decs424 apply #80000000 -> -0E-101 +decs425 apply -0E-2 -> #a2300000 +decs426 apply #a2300000 -> -0.00 +decs427 apply -0 -> #a2500000 +decs428 apply #a2500000 -> -0 +decs429 apply -0E+3 -> #a2800000 +decs430 apply #a2800000 -> -0E+3 +decs431 apply -0E+90 -> #c3f00000 +decs432 apply #c3f00000 -> -0E+90 +-- clamped zeros... +decs433 apply -0E+91 -> #c3f00000 Clamped +decs434 apply #c3f00000 -> -0E+90 +decs435 apply -0E+96 -> #c3f00000 Clamped +decs436 apply #c3f00000 -> -0E+90 +decs437 apply -0E+400 -> #c3f00000 Clamped +decs438 apply #c3f00000 -> -0E+90 + +-- Specials +decs500 apply Infinity -> #78000000 +decs501 apply #78787878 -> #78000000 +decs502 apply #78000000 -> Infinity +decs503 apply #79797979 -> #78000000 +decs504 apply #79000000 -> Infinity +decs505 apply #7a7a7a7a -> #78000000 +decs506 apply #7a000000 -> Infinity +decs507 apply #7b7b7b7b -> #78000000 +decs508 apply #7b000000 -> Infinity +decs509 apply #7c7c7c7c -> #7c0c7c7c + +decs510 apply NaN -> #7c000000 +decs511 apply #7c000000 -> NaN +decs512 apply #7d7d7d7d -> #7c0d7d7d +decs513 apply #7d000000 -> NaN +decs514 apply #7e7e7e7e -> #7e0e7c7e +decs515 apply #7e000000 -> sNaN +decs516 apply #7f7f7f7f -> #7e0f7c7f +decs517 apply #7f000000 -> sNaN +decs518 apply #7fffffff -> sNaN999999 +decs519 apply #7fffffff -> #7e03fcff + +decs520 apply -Infinity -> #f8000000 +decs521 apply #f8787878 -> #f8000000 +decs522 apply #f8000000 -> -Infinity +decs523 apply #f9797979 -> #f8000000 +decs524 apply #f9000000 -> -Infinity +decs525 apply #fa7a7a7a -> #f8000000 +decs526 apply #fa000000 -> -Infinity +decs527 apply #fb7b7b7b -> #f8000000 +decs528 apply #fb000000 -> -Infinity + +decs529 apply -NaN -> #fc000000 +decs530 apply #fc7c7c7c -> #fc0c7c7c +decs531 apply #fc000000 -> -NaN +decs532 apply #fd7d7d7d -> #fc0d7d7d +decs533 apply #fd000000 -> -NaN +decs534 apply #fe7e7e7e -> #fe0e7c7e +decs535 apply #fe000000 -> -sNaN +decs536 apply #ff7f7f7f -> #fe0f7c7f +decs537 apply #ff000000 -> -sNaN +decs538 apply #ffffffff -> -sNaN999999 +decs539 apply #ffffffff -> #fe03fcff + +-- diagnostic NaNs +decs540 apply NaN -> #7c000000 +decs541 apply NaN0 -> #7c000000 +decs542 apply NaN1 -> #7c000001 +decs543 apply NaN12 -> #7c000012 +decs544 apply NaN79 -> #7c000079 +decs545 apply NaN12345 -> #7c0049c5 +decs546 apply NaN123456 -> #7c028e56 +decs547 apply NaN799799 -> #7c0f7fdf +decs548 apply NaN999999 -> #7c03fcff + + +-- fold-down full sequence +decs601 apply 1E+96 -> #47f00000 Clamped +decs602 apply #47f00000 -> 1.000000E+96 +decs603 apply 1E+95 -> #43f20000 Clamped +decs604 apply #43f20000 -> 1.00000E+95 +decs605 apply 1E+94 -> #43f04000 Clamped +decs606 apply #43f04000 -> 1.0000E+94 +decs607 apply 1E+93 -> #43f00400 Clamped +decs608 apply #43f00400 -> 1.000E+93 +decs609 apply 1E+92 -> #43f00080 Clamped +decs610 apply #43f00080 -> 1.00E+92 +decs611 apply 1E+91 -> #43f00010 Clamped +decs612 apply #43f00010 -> 1.0E+91 +decs613 apply 1E+90 -> #43f00001 +decs614 apply #43f00001 -> 1E+90 + + +-- Selected DPD codes +decs700 apply #22500000 -> 0 +decs701 apply #22500009 -> 9 +decs702 apply #22500010 -> 10 +decs703 apply #22500019 -> 19 +decs704 apply #22500020 -> 20 +decs705 apply #22500029 -> 29 +decs706 apply #22500030 -> 30 +decs707 apply #22500039 -> 39 +decs708 apply #22500040 -> 40 +decs709 apply #22500049 -> 49 +decs710 apply #22500050 -> 50 +decs711 apply #22500059 -> 59 +decs712 apply #22500060 -> 60 +decs713 apply #22500069 -> 69 +decs714 apply #22500070 -> 70 +decs715 apply #22500071 -> 71 +decs716 apply #22500072 -> 72 +decs717 apply #22500073 -> 73 +decs718 apply #22500074 -> 74 +decs719 apply #22500075 -> 75 +decs720 apply #22500076 -> 76 +decs721 apply #22500077 -> 77 +decs722 apply #22500078 -> 78 +decs723 apply #22500079 -> 79 + +decs730 apply #2250029e -> 994 +decs731 apply #2250029f -> 995 +decs732 apply #225002a0 -> 520 +decs733 apply #225002a1 -> 521 + +-- DPD: one of each of the huffman groups +decs740 apply #225003f7 -> 777 +decs741 apply #225003f8 -> 778 +decs742 apply #225003eb -> 787 +decs743 apply #2250037d -> 877 +decs744 apply #2250039f -> 997 +decs745 apply #225003bf -> 979 +decs746 apply #225003df -> 799 +decs747 apply #2250006e -> 888 + + +-- DPD all-highs cases (includes the 24 redundant codes) +decs750 apply #2250006e -> 888 +decs751 apply #2250016e -> 888 +decs752 apply #2250026e -> 888 +decs753 apply #2250036e -> 888 +decs754 apply #2250006f -> 889 +decs755 apply #2250016f -> 889 +decs756 apply #2250026f -> 889 +decs757 apply #2250036f -> 889 + +decs760 apply #2250007e -> 898 +decs761 apply #2250017e -> 898 +decs762 apply #2250027e -> 898 +decs763 apply #2250037e -> 898 +decs764 apply #2250007f -> 899 +decs765 apply #2250017f -> 899 +decs766 apply #2250027f -> 899 +decs767 apply #2250037f -> 899 + +decs770 apply #225000ee -> 988 +decs771 apply #225001ee -> 988 +decs772 apply #225002ee -> 988 +decs773 apply #225003ee -> 988 +decs774 apply #225000ef -> 989 +decs775 apply #225001ef -> 989 +decs776 apply #225002ef -> 989 +decs777 apply #225003ef -> 989 + +decs780 apply #225000fe -> 998 +decs781 apply #225001fe -> 998 +decs782 apply #225002fe -> 998 +decs783 apply #225003fe -> 998 +decs784 apply #225000ff -> 999 +decs785 apply #225001ff -> 999 +decs786 apply #225002ff -> 999 +decs787 apply #225003ff -> 999 + +-- narrowing case +decs790 apply 2.00E-99 -> #00000100 Subnormal +decs791 apply #00000100 -> 2.00E-99 Subnormal diff --git a/Lib/test/decimaltestdata/exp.decTest b/Lib/test/decimaltestdata/exp.decTest index c2cc741cb3d..e01d7a8f92d 100644 --- a/Lib/test/decimaltestdata/exp.decTest +++ b/Lib/test/decimaltestdata/exp.decTest @@ -1,674 +1,674 @@ ------------------------------------------------------------------------- --- exp.decTest -- decimal natural exponentiation -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- Tests of the exponential function. Currently all testcases here --- show results which are correctly rounded (within <= 0.5 ulp). - -extended: 1 -precision: 9 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- basics (examples in specification, etc.) -expx001 exp -Infinity -> 0 -expx002 exp -10 -> 0.0000453999298 Inexact Rounded -expx003 exp -1 -> 0.367879441 Inexact Rounded -expx004 exp 0 -> 1 -expx005 exp -0 -> 1 -expx006 exp 1 -> 2.71828183 Inexact Rounded -expx007 exp 0.693147181 -> 2.00000000 Inexact Rounded -expx008 exp 10 -> 22026.4658 Inexact Rounded -expx009 exp +Infinity -> Infinity - --- tiny edge cases -precision: 7 -expx011 exp 0.1 -> 1.105171 Inexact Rounded -expx012 exp 0.01 -> 1.010050 Inexact Rounded -expx013 exp 0.001 -> 1.001001 Inexact Rounded -expx014 exp 0.0001 -> 1.000100 Inexact Rounded -expx015 exp 0.00001 -> 1.000010 Inexact Rounded -expx016 exp 0.000001 -> 1.000001 Inexact Rounded -expx017 exp 0.0000001 -> 1.000000 Inexact Rounded -expx018 exp 0.0000003 -> 1.000000 Inexact Rounded -expx019 exp 0.0000004 -> 1.000000 Inexact Rounded -expx020 exp 0.0000005 -> 1.000001 Inexact Rounded -expx021 exp 0.0000008 -> 1.000001 Inexact Rounded -expx022 exp 0.0000009 -> 1.000001 Inexact Rounded -expx023 exp 0.0000010 -> 1.000001 Inexact Rounded -expx024 exp 0.0000011 -> 1.000001 Inexact Rounded -expx025 exp 0.00000009 -> 1.000000 Inexact Rounded -expx026 exp 0.00000005 -> 1.000000 Inexact Rounded -expx027 exp 0.00000004 -> 1.000000 Inexact Rounded -expx028 exp 0.00000001 -> 1.000000 Inexact Rounded - --- and some more zeros -expx030 exp 0.00000000 -> 1 -expx031 exp 0E+100 -> 1 -expx032 exp 0E-100 -> 1 -expx033 exp -0.00000000 -> 1 -expx034 exp -0E+100 -> 1 -expx035 exp -0E-100 -> 1 - --- basic e=0, e=1, e=2, e=4, e>=8 cases -precision: 7 -expx041 exp 1 -> 2.718282 Inexact Rounded -expx042 exp -1 -> 0.3678794 Inexact Rounded -expx043 exp 10 -> 22026.47 Inexact Rounded -expx044 exp -10 -> 0.00004539993 Inexact Rounded -expx045 exp 100 -> 2.688117E+43 Inexact Rounded -expx046 exp -100 -> 3.720076E-44 Inexact Rounded -expx047 exp 1000 -> Infinity Overflow Inexact Rounded -expx048 exp -1000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx049 exp 100000000 -> Infinity Overflow Inexact Rounded -expx050 exp -100000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal - --- miscellanea --- similar to 'VF bug' test, at 17, but with last digit corrected for decimal -precision: 16 -expx055 exp -5.42410311287441459172E+2 -> 2.717658486884572E-236 Inexact Rounded --- result from NetRexx/Java prototype -> 2.7176584868845721117677929628617246054459644711108E-236 --- result from Rexx (series) version -> 2.717658486884572111767792962861724605446E-236 -precision: 17 -expx056 exp -5.42410311287441459172E+2 -> 2.7176584868845721E-236 Inexact Rounded -precision: 18 -expx057 exp -5.42410311287441459172E+2 -> 2.71765848688457211E-236 Inexact Rounded -precision: 19 -expx058 exp -5.42410311287441459172E+2 -> 2.717658486884572112E-236 Inexact Rounded -precision: 20 -expx059 exp -5.42410311287441459172E+2 -> 2.7176584868845721118E-236 Inexact Rounded - --- rounding in areas of ..500.., ..499.., ..100.., ..999.. sequences -precision: 50 -expx101 exp -9E-8 -> 0.99999991000000404999987850000273374995079250073811 Inexact Rounded -precision: 31 -expx102 exp -9E-8 -> 0.9999999100000040499998785000027 Inexact Rounded -precision: 30 -expx103 exp -9E-8 -> 0.999999910000004049999878500003 Inexact Rounded -precision: 29 -expx104 exp -9E-8 -> 0.99999991000000404999987850000 Inexact Rounded -precision: 28 -expx105 exp -9E-8 -> 0.9999999100000040499998785000 Inexact Rounded -precision: 27 -expx106 exp -9E-8 -> 0.999999910000004049999878500 Inexact Rounded -precision: 26 -expx107 exp -9E-8 -> 0.99999991000000404999987850 Inexact Rounded -precision: 25 -expx108 exp -9E-8 -> 0.9999999100000040499998785 Inexact Rounded -precision: 24 -expx109 exp -9E-8 -> 0.999999910000004049999879 Inexact Rounded -precision: 23 -expx110 exp -9E-8 -> 0.99999991000000404999988 Inexact Rounded -precision: 22 -expx111 exp -9E-8 -> 0.9999999100000040499999 Inexact Rounded -precision: 21 -expx112 exp -9E-8 -> 0.999999910000004050000 Inexact Rounded -precision: 20 -expx113 exp -9E-8 -> 0.99999991000000405000 Inexact Rounded -precision: 19 -expx114 exp -9E-8 -> 0.9999999100000040500 Inexact Rounded -precision: 18 -expx115 exp -9E-8 -> 0.999999910000004050 Inexact Rounded -precision: 17 -expx116 exp -9E-8 -> 0.99999991000000405 Inexact Rounded -precision: 16 -expx117 exp -9E-8 -> 0.9999999100000040 Inexact Rounded -precision: 15 -expx118 exp -9E-8 -> 0.999999910000004 Inexact Rounded -precision: 14 -expx119 exp -9E-8 -> 0.99999991000000 Inexact Rounded -precision: 13 -expx120 exp -9E-8 -> 0.9999999100000 Inexact Rounded -precision: 12 -expx121 exp -9E-8 -> 0.999999910000 Inexact Rounded -precision: 11 -expx122 exp -9E-8 -> 0.99999991000 Inexact Rounded -precision: 10 -expx123 exp -9E-8 -> 0.9999999100 Inexact Rounded -precision: 9 -expx124 exp -9E-8 -> 0.999999910 Inexact Rounded -precision: 8 -expx125 exp -9E-8 -> 0.99999991 Inexact Rounded -precision: 7 -expx126 exp -9E-8 -> 0.9999999 Inexact Rounded -precision: 6 -expx127 exp -9E-8 -> 1.00000 Inexact Rounded -precision: 5 -expx128 exp -9E-8 -> 1.0000 Inexact Rounded -precision: 4 -expx129 exp -9E-8 -> 1.000 Inexact Rounded -precision: 3 -expx130 exp -9E-8 -> 1.00 Inexact Rounded -precision: 2 -expx131 exp -9E-8 -> 1.0 Inexact Rounded -precision: 1 -expx132 exp -9E-8 -> 1 Inexact Rounded - - --- sanity checks, with iteration counts [normalized so 0<=|x|<1] -precision: 50 - -expx210 exp 0 -> 1 --- iterations: 2 -expx211 exp -1E-40 -> 0.99999999999999999999999999999999999999990000000000 Inexact Rounded --- iterations: 8 -expx212 exp -9E-7 -> 0.99999910000040499987850002733749507925073811240510 Inexact Rounded --- iterations: 6 -expx213 exp -9E-8 -> 0.99999991000000404999987850000273374995079250073811 Inexact Rounded --- iterations: 15 -expx214 exp -0.003 -> 0.99700449550337297601206623409756091074177480489845 Inexact Rounded --- iterations: 14 -expx215 exp -0.001 -> 0.99900049983337499166805535716765597470235590236008 Inexact Rounded --- iterations: 26 -expx216 exp -0.1 -> 0.90483741803595957316424905944643662119470536098040 Inexact Rounded --- iterations: 39 -expx217 exp -0.7 -> 0.49658530379140951470480009339752896170766716571182 Inexact Rounded --- iterations: 41 -expx218 exp -0.9 -> 0.40656965974059911188345423964562598783370337617038 Inexact Rounded --- iterations: 43 -expx219 exp -0.99 -> 0.37157669102204569053152411990820138691802885490501 Inexact Rounded --- iterations: 26 -expx220 exp -1 -> 0.36787944117144232159552377016146086744581113103177 Inexact Rounded --- iterations: 26 -expx221 exp -1.01 -> 0.36421897957152331975704629563734548959589139192482 Inexact Rounded --- iterations: 27 -expx222 exp -1.1 -> 0.33287108369807955328884690643131552161247952156921 Inexact Rounded --- iterations: 28 -expx223 exp -1.5 -> 0.22313016014842982893328047076401252134217162936108 Inexact Rounded --- iterations: 30 -expx224 exp -2 -> 0.13533528323661269189399949497248440340763154590958 Inexact Rounded --- iterations: 36 -expx225 exp -5 -> 0.0067379469990854670966360484231484242488495850273551 Inexact Rounded --- iterations: 26 -expx226 exp -10 -> 0.000045399929762484851535591515560550610237918088866565 Inexact Rounded --- iterations: 28 -expx227 exp -14 -> 8.3152871910356788406398514256526229460765836498457E-7 Inexact Rounded --- iterations: 29 -expx228 exp -15 -> 3.0590232050182578837147949770228963937082078081856E-7 Inexact Rounded --- iterations: 30 -expx233 exp 0 -> 1 --- iterations: 2 -expx234 exp 1E-40 -> 1.0000000000000000000000000000000000000001000000000 Inexact Rounded --- iterations: 7 -expx235 exp 9E-7 -> 1.0000009000004050001215000273375049207507381125949 Inexact Rounded --- iterations: 6 -expx236 exp 9E-8 -> 1.0000000900000040500001215000027337500492075007381 Inexact Rounded --- iterations: 15 -expx237 exp 0.003 -> 1.0030045045033770260129340913489002053318727195619 Inexact Rounded --- iterations: 13 -expx238 exp 0.001 -> 1.0010005001667083416680557539930583115630762005807 Inexact Rounded --- iterations: 25 -expx239 exp 0.1 -> 1.1051709180756476248117078264902466682245471947375 Inexact Rounded --- iterations: 38 -expx240 exp 0.7 -> 2.0137527074704765216245493885830652700175423941459 Inexact Rounded --- iterations: 41 -expx241 exp 0.9 -> 2.4596031111569496638001265636024706954217723064401 Inexact Rounded --- iterations: 42 -expx242 exp 0.99 -> 2.6912344723492622890998794040710139721802931841030 Inexact Rounded --- iterations: 26 -expx243 exp 1 -> 2.7182818284590452353602874713526624977572470937000 Inexact Rounded --- iterations: 26 -expx244 exp 1.01 -> 2.7456010150169164939897763166603876240737508195960 Inexact Rounded --- iterations: 26 -expx245 exp 1.1 -> 3.0041660239464331120584079535886723932826810260163 Inexact Rounded --- iterations: 28 -expx246 exp 1.5 -> 4.4816890703380648226020554601192758190057498683697 Inexact Rounded --- iterations: 29 -expx247 exp 2 -> 7.3890560989306502272304274605750078131803155705518 Inexact Rounded --- iterations: 36 -expx248 exp 5 -> 148.41315910257660342111558004055227962348766759388 Inexact Rounded --- iterations: 26 -expx249 exp 10 -> 22026.465794806716516957900645284244366353512618557 Inexact Rounded --- iterations: 28 -expx250 exp 14 -> 1202604.2841647767777492367707678594494124865433761 Inexact Rounded --- iterations: 28 -expx251 exp 15 -> 3269017.3724721106393018550460917213155057385438200 Inexact Rounded --- iterations: 29 - --- a biggie [result verified 3 ways] -precision: 250 -expx260 exp 1 -> 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668 Inexact Rounded - --- extreme range boundaries -precision: 16 -maxExponent: 999999 -minExponent: -999999 --- Ntiny boundary -expx290 exp -2302618.022332529 -> 0E-1000014 Underflow Subnormal Inexact Rounded Clamped -expx291 exp -2302618.022332528 -> 1E-1000014 Underflow Subnormal Inexact Rounded --- Nmax/10 and Nmax boundary -expx292 exp 2302582.790408952 -> 9.999999993100277E+999998 Inexact Rounded -expx293 exp 2302582.790408953 -> 1.000000000310028E+999999 Inexact Rounded -expx294 exp 2302585.092993946 -> 9.999999003159870E+999999 Inexact Rounded -expx295 exp 2302585.092994036 -> 9.999999903159821E+999999 Inexact Rounded -expx296 exp 2302585.092994045 -> 9.999999993159820E+999999 Inexact Rounded -expx297 exp 2302585.092994046 -> Infinity Overflow Inexact Rounded - --- 0<-x<<1 effects -precision: 30 -expx320 exp -4.9999999999999E-8 -> 0.999999950000001250000979166617 Inexact Rounded -expx321 exp -5.0000000000000E-8 -> 0.999999950000001249999979166667 Inexact Rounded -expx322 exp -5.0000000000001E-8 -> 0.999999950000001249998979166717 Inexact Rounded -precision: 20 -expx323 exp -4.9999999999999E-8 -> 0.99999995000000125000 Inexact Rounded -expx324 exp -5.0000000000000E-8 -> 0.99999995000000125000 Inexact Rounded -expx325 exp -5.0000000000001E-8 -> 0.99999995000000125000 Inexact Rounded -precision: 14 -expx326 exp -4.9999999999999E-8 -> 0.99999995000000 Inexact Rounded -expx327 exp -5.0000000000000E-8 -> 0.99999995000000 Inexact Rounded -expx328 exp -5.0000000000001E-8 -> 0.99999995000000 Inexact Rounded --- overprecise and 0<-x<<1 -precision: 8 -expx330 exp -4.9999999999999E-8 -> 0.99999995 Inexact Rounded -expx331 exp -5.0000000000000E-8 -> 0.99999995 Inexact Rounded -expx332 exp -5.0000000000001E-8 -> 0.99999995 Inexact Rounded -precision: 7 -expx333 exp -4.9999999999999E-8 -> 1.000000 Inexact Rounded -expx334 exp -5.0000000000000E-8 -> 1.000000 Inexact Rounded -expx335 exp -5.0000000000001E-8 -> 1.000000 Inexact Rounded -precision: 3 -expx336 exp -4.9999999999999E-8 -> 1.00 Inexact Rounded -expx337 exp -5.0000000000000E-8 -> 1.00 Inexact Rounded -expx338 exp -5.0000000000001E-8 -> 1.00 Inexact Rounded - --- 0 1.00000005000000124999902083328 Inexact Rounded -expx341 exp 5.0000000000000E-8 -> 1.00000005000000125000002083333 Inexact Rounded -expx342 exp 5.0000000000001E-8 -> 1.00000005000000125000102083338 Inexact Rounded -precision: 20 -expx343 exp 4.9999999999999E-8 -> 1.0000000500000012500 Inexact Rounded -expx344 exp 5.0000000000000E-8 -> 1.0000000500000012500 Inexact Rounded -expx345 exp 5.0000000000001E-8 -> 1.0000000500000012500 Inexact Rounded -precision: 14 -expx346 exp 4.9999999999999E-8 -> 1.0000000500000 Inexact Rounded -expx347 exp 5.0000000000000E-8 -> 1.0000000500000 Inexact Rounded -expx348 exp 5.0000000000001E-8 -> 1.0000000500000 Inexact Rounded --- overprecise and 0 1.0000001 Inexact Rounded -expx351 exp 5.0000000000000E-8 -> 1.0000001 Inexact Rounded -expx352 exp 5.0000000000001E-8 -> 1.0000001 Inexact Rounded -precision: 7 -expx353 exp 4.9999999999999E-8 -> 1.000000 Inexact Rounded -expx354 exp 5.0000000000000E-8 -> 1.000000 Inexact Rounded -expx355 exp 5.0000000000001E-8 -> 1.000000 Inexact Rounded -precision: 3 -expx356 exp 4.9999999999999E-8 -> 1.00 Inexact Rounded -expx357 exp 5.0000000000000E-8 -> 1.00 Inexact Rounded -expx358 exp 5.0000000000001E-8 -> 1.00 Inexact Rounded - --- cases near 1 -- 1 2345678901234567890 -precision: 20 -expx401 exp 0.99999999999996 -> 2.7182818284589365041 Inexact Rounded -expx402 exp 0.99999999999997 -> 2.7182818284589636869 Inexact Rounded -expx403 exp 0.99999999999998 -> 2.7182818284589908697 Inexact Rounded -expx404 exp 0.99999999999999 -> 2.7182818284590180525 Inexact Rounded -expx405 exp 1.0000000000000 -> 2.7182818284590452354 Inexact Rounded -expx406 exp 1.0000000000001 -> 2.7182818284593170635 Inexact Rounded -expx407 exp 1.0000000000002 -> 2.7182818284595888917 Inexact Rounded -precision: 14 -expx411 exp 0.99999999999996 -> 2.7182818284589 Inexact Rounded -expx412 exp 0.99999999999997 -> 2.7182818284590 Inexact Rounded -expx413 exp 0.99999999999998 -> 2.7182818284590 Inexact Rounded -expx414 exp 0.99999999999999 -> 2.7182818284590 Inexact Rounded -expx415 exp 1.0000000000000 -> 2.7182818284590 Inexact Rounded -expx416 exp 1.0000000000001 -> 2.7182818284593 Inexact Rounded -expx417 exp 1.0000000000002 -> 2.7182818284596 Inexact Rounded --- overprecise... -precision: 7 -expx421 exp 0.99999999999996 -> 2.718282 Inexact Rounded -expx422 exp 0.99999999999997 -> 2.718282 Inexact Rounded -expx423 exp 0.99999999999998 -> 2.718282 Inexact Rounded -expx424 exp 0.99999999999999 -> 2.718282 Inexact Rounded -expx425 exp 1.0000000000001 -> 2.718282 Inexact Rounded -expx426 exp 1.0000000000002 -> 2.718282 Inexact Rounded -expx427 exp 1.0000000000003 -> 2.718282 Inexact Rounded -precision: 2 -expx431 exp 0.99999999999996 -> 2.7 Inexact Rounded -expx432 exp 0.99999999999997 -> 2.7 Inexact Rounded -expx433 exp 0.99999999999998 -> 2.7 Inexact Rounded -expx434 exp 0.99999999999999 -> 2.7 Inexact Rounded -expx435 exp 1.0000000000001 -> 2.7 Inexact Rounded -expx436 exp 1.0000000000002 -> 2.7 Inexact Rounded -expx437 exp 1.0000000000003 -> 2.7 Inexact Rounded - --- basics at low precisions -precision: 3 -expx501 exp -Infinity -> 0 -expx502 exp -10 -> 0.0000454 Inexact Rounded -expx503 exp -1 -> 0.368 Inexact Rounded -expx504 exp 0 -> 1 -expx505 exp -0 -> 1 -expx506 exp 1 -> 2.72 Inexact Rounded -expx507 exp 0.693147181 -> 2.00 Inexact Rounded -expx508 exp 10 -> 2.20E+4 Inexact Rounded -expx509 exp +Infinity -> Infinity -precision: 2 -expx511 exp -Infinity -> 0 -expx512 exp -10 -> 0.000045 Inexact Rounded -expx513 exp -1 -> 0.37 Inexact Rounded -expx514 exp 0 -> 1 -expx515 exp -0 -> 1 -expx516 exp 1 -> 2.7 Inexact Rounded -expx517 exp 0.693147181 -> 2.0 Inexact Rounded -expx518 exp 10 -> 2.2E+4 Inexact Rounded -expx519 exp +Infinity -> Infinity -precision: 1 -expx521 exp -Infinity -> 0 -expx522 exp -10 -> 0.00005 Inexact Rounded -expx523 exp -1 -> 0.4 Inexact Rounded -expx524 exp 0 -> 1 -expx525 exp -0 -> 1 -expx526 exp 1 -> 3 Inexact Rounded -expx527 exp 0.693147181 -> 2 Inexact Rounded -expx528 exp 10 -> 2E+4 Inexact Rounded -expx529 exp +Infinity -> Infinity - --- overflows, including some overprecise borderlines -precision: 7 -maxExponent: 384 -minExponent: -383 -expx701 exp 1000000000 -> Infinity Overflow Inexact Rounded -expx702 exp 100000000 -> Infinity Overflow Inexact Rounded -expx703 exp 10000000 -> Infinity Overflow Inexact Rounded -expx704 exp 1000000 -> Infinity Overflow Inexact Rounded -expx705 exp 100000 -> Infinity Overflow Inexact Rounded -expx706 exp 10000 -> Infinity Overflow Inexact Rounded -expx707 exp 1000 -> Infinity Overflow Inexact Rounded -expx708 exp 886.4952608 -> Infinity Overflow Inexact Rounded -expx709 exp 886.4952607 -> 9.999999E+384 Inexact Rounded -expx710 exp 886.49527 -> Infinity Overflow Inexact Rounded -expx711 exp 886.49526 -> 9.999992E+384 Inexact Rounded -precision: 16 -expx721 exp 886.4952608027075883 -> Infinity Overflow Inexact Rounded -expx722 exp 886.4952608027075882 -> 9.999999999999999E+384 Inexact Rounded -expx723 exp 886.49526080270759 -> Infinity Overflow Inexact Rounded -expx724 exp 886.49526080270758 -> 9.999999999999917E+384 Inexact Rounded -expx725 exp 886.4952608027076 -> Infinity Overflow Inexact Rounded -expx726 exp 886.4952608027075 -> 9.999999999999117E+384 Inexact Rounded --- and by special request ... -precision: 15 -expx731 exp 886.495260802708 -> Infinity Overflow Inexact Rounded -expx732 exp 886.495260802707 -> 9.99999999999412E+384 Inexact Rounded -expx733 exp 886.495260802706 -> 9.99999999998412E+384 Inexact Rounded -maxExponent: 999 -minExponent: -999 -expx735 exp 2302.58509299405 -> Infinity Overflow Inexact Rounded -expx736 exp 2302.58509299404 -> 9.99999999994316E+999 Inexact Rounded -expx737 exp 2302.58509299403 -> 9.99999999984316E+999 Inexact Rounded - --- subnormals and underflows, including underflow-to-zero edge point -precision: 7 -maxExponent: 384 -minExponent: -383 -expx751 exp -1000000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx752 exp -100000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx753 exp -10000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx754 exp -1000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx755 exp -100000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx756 exp -10000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx757 exp -1000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal -expx758 exp -881.89009 -> 1.000001E-383 Inexact Rounded -expx759 exp -881.8901 -> 9.99991E-384 Inexact Rounded Underflow Subnormal -expx760 exp -885 -> 4.4605E-385 Inexact Rounded Underflow Subnormal -expx761 exp -888 -> 2.221E-386 Inexact Rounded Underflow Subnormal -expx762 exp -890 -> 3.01E-387 Inexact Rounded Underflow Subnormal -expx763 exp -892.9 -> 1.7E-388 Inexact Rounded Underflow Subnormal -expx764 exp -893 -> 1.5E-388 Inexact Rounded Underflow Subnormal -expx765 exp -893.5 -> 9E-389 Inexact Rounded Underflow Subnormal -expx766 exp -895.7056 -> 1E-389 Inexact Rounded Underflow Subnormal -expx769 exp -895.8 -> 1E-389 Inexact Rounded Underflow Subnormal -expx770 exp -895.73 -> 1E-389 Inexact Rounded Underflow Subnormal -expx771 exp -896.3987 -> 1E-389 Inexact Rounded Underflow Subnormal -expx772 exp -896.3988 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped -expx773 exp -898.0081 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped -expx774 exp -898.0082 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped - --- special values -maxexponent: 999 -minexponent: -999 -expx820 exp Inf -> Infinity -expx821 exp -Inf -> 0 -expx822 exp NaN -> NaN -expx823 exp sNaN -> NaN Invalid_operation --- propagating NaNs -expx824 exp sNaN123 -> NaN123 Invalid_operation -expx825 exp -sNaN321 -> -NaN321 Invalid_operation -expx826 exp NaN456 -> NaN456 -expx827 exp -NaN654 -> -NaN654 -expx828 exp NaN1 -> NaN1 - --- Invalid operations due to restrictions --- [next two probably skipped by most test harnesses] -precision: 100000000 -expx901 exp -Infinity -> NaN Invalid_context -precision: 99999999 -expx902 exp -Infinity -> NaN Invalid_context - -precision: 9 -maxExponent: 1000000 -minExponent: -999999 -expx903 exp -Infinity -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999999 -expx904 exp -Infinity -> 0 -maxExponent: 999999 -minExponent: -1000000 -expx905 exp -Infinity -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999998 -expx906 exp -Infinity -> 0 - --- -maxExponent: 384 -minExponent: -383 -precision: 16 -rounding: half_even - --- Null test -expx900 exp # -> NaN Invalid_operation - - --- Randoms P=50, within 0-999 -Precision: 50 -maxExponent: 384 -minExponent: -383 -expx1501 exp 656.35397950590285612266095596539934213943872885728 -> 1.1243757610640319783611178528839652672062820040314E+285 Inexact Rounded -expx1502 exp 0.93620571093652800225038550600780322831236082781471 -> 2.5502865130986176689199711857825771311178046842009 Inexact Rounded -expx1503 exp 0.00000000000000008340785856601514714183373874105791 -> 1.0000000000000000834078585660151506202691740252512 Inexact Rounded -expx1504 exp 0.00009174057262887789625745574686545163168788456203 -> 1.0000917447809239005146722341251524081006051473273 Inexact Rounded -expx1505 exp 33.909116897973797735657751591014926629051117541243 -> 532773181025002.03543618901306726495870476617232229 Inexact Rounded -expx1506 exp 0.00000740470413004406592124575295278456936809587311 -> 1.0000074047315449333590066395670306135567889210814 Inexact Rounded -expx1507 exp 0.00000000000124854922222108802453746922483071445492 -> 1.0000000000012485492222218674621176239911424968263 Inexact Rounded -expx1508 exp 4.1793280674155659794286951159430651258356014391382 -> 65.321946520147199404199787811336860087975118278185 Inexact Rounded -expx1509 exp 485.43595745460655893746179890255529919221550201686 -> 6.6398403920459617255950476953129377459845366585463E+210 Inexact Rounded -expx1510 exp 0.00000000003547259806590856032527875157830328156597 -> 1.0000000000354725980665377129320589406715000685515 Inexact Rounded -expx1511 exp 0.00000000000000759621497339104047930616478635042678 -> 1.0000000000000075962149733910693305471257715463887 Inexact Rounded -expx1512 exp 9.7959168821760339304571595474480640286072720233796 -> 17960.261146042955179164303653412650751681436352437 Inexact Rounded -expx1513 exp 0.00000000566642006258290526783901451194943164535581 -> 1.0000000056664200786370634609832438815665249347650 Inexact Rounded -expx1514 exp 741.29888791134298194088827572374718940925820027354 -> 8.7501694006317332808128946666402622432064923198731E+321 Inexact Rounded -expx1515 exp 032.75573003552517668808529099897153710887014947935 -> 168125196578678.17725841108617955904425345631092339 Inexact Rounded -expx1516 exp 42.333700726429333308594265553422902463737399437644 -> 2428245675864172475.4681119493045657797309369672012 Inexact Rounded -expx1517 exp 0.00000000000000559682616876491888197609158802835798 -> 1.0000000000000055968261687649345442076732739577049 Inexact Rounded -expx1518 exp 0.00000000000080703688668280193584758300973549486312 -> 1.0000000000008070368866831275901158164321867914342 Inexact Rounded -expx1519 exp 640.72396012796509482382712891709072570653606838251 -> 1.8318094990683394229304133068983914236995326891045E+278 Inexact Rounded -expx1520 exp 0.00000000000000509458922167631071416948112219512224 -> 1.0000000000000050945892216763236915891499324358556 Inexact Rounded -expx1521 exp 6.7670394314315206378625221583973414660727960241395 -> 868.73613012822031367806248697092884415119568271315 Inexact Rounded -expx1522 exp 04.823217407412963506638267226891024138054783122548 -> 124.36457929588837129731821077586705505565904205366 Inexact Rounded -expx1523 exp 193.51307878701196403991208482520115359690106143615 -> 1.1006830872854715677390914655452261550768957576034E+84 Inexact Rounded -expx1524 exp 5.7307749038303650539200345901210497015617393970463 -> 308.20800743106843083522721523715645950574866495196 Inexact Rounded -expx1525 exp 0.00000000000095217825199797965200541169123743500267 -> 1.0000000000009521782519984329737172007991390381273 Inexact Rounded -expx1526 exp 0.00027131440949183370966393682617930153495028919140 -> 1.0002713512185751022906058160480606598754913607364 Inexact Rounded -expx1527 exp 0.00000000064503059114680682343002315662069272707123 -> 1.0000000006450305913548390552323517403613135496633 Inexact Rounded -expx1528 exp 0.00000000000000095616643506527288866235238548440593 -> 1.0000000000000009561664350652733457894781582009094 Inexact Rounded -expx1529 exp 0.00000000000000086449942811678650244459550252743433 -> 1.0000000000000008644994281167868761242261096529986 Inexact Rounded -expx1530 exp 0.06223488355635359965683053157729204988381887621850 -> 1.0642122813392406657789688931838919323826250630831 Inexact Rounded -expx1531 exp 0.00000400710807804429435502657131912308680674057053 -> 1.0000040071161065125925620890019319832127863559260 Inexact Rounded -expx1532 exp 85.522796894744576211573232055494551429297878413017 -> 13870073686404228452757799770251085177.853337368935 Inexact Rounded -expx1533 exp 9.1496720811363678696938036379756663548353399954363 -> 9411.3537122832743386783597629161763057370034495157 Inexact Rounded -expx1534 exp 8.2215705240788294472944382056330516738577785177942 -> 3720.3406813383076953899654701615084425598377758189 Inexact Rounded -expx1535 exp 0.00000000015772064569640613142823203726821076239561 -> 1.0000000001577206457088440324683315788358926129830 Inexact Rounded -expx1536 exp 0.58179346473959531432624153576883440625538017532480 -> 1.7892445018275360163797022372655837188423194863605 Inexact Rounded -expx1537 exp 33.555726197149525061455517784870570470833498096559 -> 374168069896324.62578073148993526626307095854407952 Inexact Rounded -expx1538 exp 9.7898079803906215094140010009583375537259810398659 -> 17850.878119912208888217100998019986634620368538426 Inexact Rounded -expx1539 exp 89.157697327174521542502447953032536541038636966347 -> 525649152320166503771224149330448089550.67293829227 Inexact Rounded -expx1540 exp 25.022947600123328912029051897171319573322888514885 -> 73676343442.952517824345431437683153304645851960524 Inexact Rounded - --- exp(1) at 34 -Precision: 34 -expx1200 exp 1 -> 2.718281828459045235360287471352662 Inexact Rounded - --- Randoms P=34, within 0-999 -Precision: 34 -maxExponent: 6144 -minExponent: -6143 -expx1201 exp 309.5948855821510212996700645087188 -> 2.853319692901387521201738015050724E+134 Inexact Rounded -expx1202 exp 9.936543068706211420422803962680164 -> 20672.15839203171877476511093276022 Inexact Rounded -expx1203 exp 6.307870323881505684429839491707908 -> 548.8747777054637296137277391754665 Inexact Rounded -expx1204 exp 0.0003543281389438420535201308282503 -> 1.000354390920573746164733350843155 Inexact Rounded -expx1205 exp 0.0000037087453363918375598394920229 -> 1.000003708752213796324841920189323 Inexact Rounded -expx1206 exp 0.0020432312687512438040222444116585 -> 1.002045320088164826013561630975308 Inexact Rounded -expx1207 exp 6.856313340032177672550343216129586 -> 949.8587981604144147983589660524396 Inexact Rounded -expx1208 exp 0.0000000000402094928333815643326418 -> 1.000000000040209492834189965989612 Inexact Rounded -expx1209 exp 0.0049610784722412117632647003545839 -> 1.004973404997901987039589029277833 Inexact Rounded -expx1210 exp 0.0000891471883724066909746786702686 -> 1.000089151162101085412780088266699 Inexact Rounded -expx1211 exp 08.59979170376061890684723211112566 -> 5430.528314920905714615339273738097 Inexact Rounded -expx1212 exp 9.473117039341003854872778112752590 -> 13005.36234331224953460055897913917 Inexact Rounded -expx1213 exp 0.0999060724692207648429969999310118 -> 1.105067116975190602296052700726802 Inexact Rounded -expx1214 exp 0.0000000927804533555877884082269247 -> 1.000000092780457659694183954740772 Inexact Rounded -expx1215 exp 0.0376578583872889916298772818265677 -> 1.038375900489771946477857818447556 Inexact Rounded -expx1216 exp 261.6896411697539524911536116712307 -> 4.470613562127465095241600174941460E+113 Inexact Rounded -expx1217 exp 0.0709997423269162980875824213889626 -> 1.073580949235407949417814485533172 Inexact Rounded -expx1218 exp 0.0000000444605583295169895235658731 -> 1.000000044460559317887627657593900 Inexact Rounded -expx1219 exp 0.0000021224072854777512281369815185 -> 1.000002122409537785687390631070906 Inexact Rounded -expx1220 exp 547.5174462574156885473558485475052 -> 6.078629247383807942612114579728672E+237 Inexact Rounded -expx1221 exp 0.0000009067598041615192002339844670 -> 1.000000906760215268314680115374387 Inexact Rounded -expx1222 exp 0.0316476500308065365803455533244603 -> 1.032153761880187977658387961769034 Inexact Rounded -expx1223 exp 84.46160530377645101833996706384473 -> 4.799644995897968383503269871697856E+36 Inexact Rounded -expx1224 exp 0.0000000000520599740290848018904145 -> 1.000000000052059974030439922338393 Inexact Rounded -expx1225 exp 0.0000006748530640093620665651726708 -> 1.000000674853291722742292331812997 Inexact Rounded -expx1226 exp 0.0000000116853119761042020507916169 -> 1.000000011685312044377460306165203 Inexact Rounded -expx1227 exp 0.0022593818094258636727616886693280 -> 1.002261936135876893707094845543461 Inexact Rounded -expx1228 exp 0.0029398857673478912249856509667517 -> 1.002944211469495086813087651287012 Inexact Rounded -expx1229 exp 0.7511480029928802775376270557636963 -> 2.119431734510320169806976569366789 Inexact Rounded -expx1230 exp 174.9431952176750671150886423048447 -> 9.481222305374955011464619468044051E+75 Inexact Rounded -expx1231 exp 0.0000810612451694136129199895164424 -> 1.000081064530720924186615149646920 Inexact Rounded -expx1232 exp 51.06888989702669288180946272499035 -> 15098613888619165073959.89896018749 Inexact Rounded -expx1233 exp 0.0000000005992887599437093651494510 -> 1.000000000599288760123282874082758 Inexact Rounded -expx1234 exp 714.8549046761054856311108828903972 -> 2.867744544891081117381595080480784E+310 Inexact Rounded -expx1235 exp 0.0000000004468247802990643645607110 -> 1.000000000446824780398890556720233 Inexact Rounded -expx1236 exp 831.5818151589890366323551672043709 -> 1.417077409182624969435938062261655E+361 Inexact Rounded -expx1237 exp 0.0000000006868323825179605747108044 -> 1.000000000686832382753829935602454 Inexact Rounded -expx1238 exp 0.0000001306740266408976840228440255 -> 1.000000130674035178748675187648098 Inexact Rounded -expx1239 exp 0.3182210609022267704811502412335163 -> 1.374680115667798185758927247894859 Inexact Rounded -expx1240 exp 0.0147741234179104437440264644295501 -> 1.014883800239950682628277534839222 Inexact Rounded - --- Randoms P=16, within 0-99 -Precision: 16 -maxExponent: 384 -minExponent: -383 -expx1101 exp 8.473011527013724 -> 4783.900643969246 Inexact Rounded -expx1102 exp 0.0000055753022764 -> 1.000005575317818 Inexact Rounded -expx1103 exp 0.0000323474114482 -> 1.000032347934631 Inexact Rounded -expx1104 exp 64.54374138544166 -> 1.073966476173531E+28 Inexact Rounded -expx1105 exp 90.47203246416569 -> 1.956610887250643E+39 Inexact Rounded -expx1106 exp 9.299931532342757 -> 10937.27033325227 Inexact Rounded -expx1107 exp 8.759678437852203 -> 6372.062234495381 Inexact Rounded -expx1108 exp 0.0000931755127172 -> 1.000093179853690 Inexact Rounded -expx1109 exp 0.0000028101158373 -> 1.000002810119786 Inexact Rounded -expx1110 exp 0.0000008008130919 -> 1.000000800813413 Inexact Rounded -expx1111 exp 8.339771722299049 -> 4187.133803081878 Inexact Rounded -expx1112 exp 0.0026140497995474 -> 1.002617469406750 Inexact Rounded -expx1113 exp 0.7478033356261771 -> 2.112354781975418 Inexact Rounded -expx1114 exp 51.77663761827966 -> 3.064135801120365E+22 Inexact Rounded -expx1115 exp 0.1524989783061012 -> 1.164741272084955 Inexact Rounded -expx1116 exp 0.0066298798669219 -> 1.006651906170791 Inexact Rounded -expx1117 exp 9.955141865534960 -> 21060.23334287038 Inexact Rounded -expx1118 exp 92.34503059198483 -> 1.273318993481226E+40 Inexact Rounded -expx1119 exp 0.0000709388677346 -> 1.000070941383956 Inexact Rounded -expx1120 exp 79.12883036433204 -> 2.318538899389243E+34 Inexact Rounded -expx1121 exp 0.0000090881548873 -> 1.000009088196185 Inexact Rounded -expx1122 exp 0.0424828809603411 -> 1.043398194245720 Inexact Rounded -expx1123 exp 0.8009035891427416 -> 2.227552811933310 Inexact Rounded -expx1124 exp 8.825786167283102 -> 6807.540455289995 Inexact Rounded -expx1125 exp 1.535457249746275 -> 4.643448260146849 Inexact Rounded -expx1126 exp 69.02254254355800 -> 9.464754500670653E+29 Inexact Rounded -expx1127 exp 0.0007050554368713 -> 1.000705304046880 Inexact Rounded -expx1128 exp 0.0000081206549504 -> 1.000008120687923 Inexact Rounded -expx1129 exp 0.621774854641137 -> 1.862230298554903 Inexact Rounded -expx1130 exp 3.847629031404354 -> 46.88177613568203 Inexact Rounded -expx1131 exp 24.81250184697732 -> 59694268456.19966 Inexact Rounded -expx1132 exp 5.107546500516044 -> 165.2643809755670 Inexact Rounded -expx1133 exp 79.17810943951986 -> 2.435656372541360E+34 Inexact Rounded -expx1134 exp 0.0051394695667015 -> 1.005152699295301 Inexact Rounded -expx1135 exp 57.44504488501725 -> 8.872908566929688E+24 Inexact Rounded -expx1136 exp 0.0000508388968036 -> 1.000050840189122 Inexact Rounded -expx1137 exp 69.71309932148997 -> 1.888053740693541E+30 Inexact Rounded -expx1138 exp 0.0064183412981502 -> 1.006438982988835 Inexact Rounded -expx1139 exp 9.346991220814677 -> 11464.27802035082 Inexact Rounded -expx1140 exp 33.09087139999152 -> 235062229168763.5 Inexact Rounded - --- Randoms P=7, within 0-9 -Precision: 7 -maxExponent: 96 -minExponent: -95 -expx1001 exp 2.395441 -> 10.97304 Inexact Rounded -expx1002 exp 0.6406779 -> 1.897767 Inexact Rounded -expx1003 exp 0.5618218 -> 1.753865 Inexact Rounded -expx1004 exp 3.055120 -> 21.22373 Inexact Rounded -expx1005 exp 1.536792 -> 4.649650 Inexact Rounded -expx1006 exp 0.0801591 -> 1.083459 Inexact Rounded -expx1007 exp 0.0966875 -> 1.101516 Inexact Rounded -expx1008 exp 0.0646761 -> 1.066813 Inexact Rounded -expx1009 exp 0.0095670 -> 1.009613 Inexact Rounded -expx1010 exp 2.956859 -> 19.23745 Inexact Rounded -expx1011 exp 7.504679 -> 1816.522 Inexact Rounded -expx1012 exp 0.0045259 -> 1.004536 Inexact Rounded -expx1013 exp 3.810071 -> 45.15364 Inexact Rounded -expx1014 exp 1.502390 -> 4.492413 Inexact Rounded -expx1015 exp 0.0321523 -> 1.032675 Inexact Rounded -expx1016 exp 0.0057214 -> 1.005738 Inexact Rounded -expx1017 exp 9.811445 -> 18241.33 Inexact Rounded -expx1018 exp 3.245249 -> 25.66810 Inexact Rounded -expx1019 exp 0.3189742 -> 1.375716 Inexact Rounded -expx1020 exp 0.8621610 -> 2.368273 Inexact Rounded -expx1021 exp 0.0122511 -> 1.012326 Inexact Rounded -expx1022 exp 2.202088 -> 9.043877 Inexact Rounded -expx1023 exp 8.778203 -> 6491.202 Inexact Rounded -expx1024 exp 0.1896279 -> 1.208800 Inexact Rounded -expx1025 exp 0.4510947 -> 1.570030 Inexact Rounded -expx1026 exp 0.276413 -> 1.318392 Inexact Rounded -expx1027 exp 4.490067 -> 89.12742 Inexact Rounded -expx1028 exp 0.0439786 -> 1.044960 Inexact Rounded -expx1029 exp 0.8168245 -> 2.263301 Inexact Rounded -expx1030 exp 0.0391658 -> 1.039943 Inexact Rounded -expx1031 exp 9.261816 -> 10528.24 Inexact Rounded -expx1032 exp 9.611186 -> 14930.87 Inexact Rounded -expx1033 exp 9.118125 -> 9119.087 Inexact Rounded -expx1034 exp 9.469083 -> 12953.00 Inexact Rounded -expx1035 exp 0.0499983 -> 1.051269 Inexact Rounded -expx1036 exp 0.0050746 -> 1.005087 Inexact Rounded -expx1037 exp 0.0014696 -> 1.001471 Inexact Rounded -expx1038 exp 9.138494 -> 9306.739 Inexact Rounded -expx1039 exp 0.0065436 -> 1.006565 Inexact Rounded -expx1040 exp 0.7284803 -> 2.071930 Inexact Rounded - +------------------------------------------------------------------------ +-- exp.decTest -- decimal natural exponentiation -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- Tests of the exponential function. Currently all testcases here +-- show results which are correctly rounded (within <= 0.5 ulp). + +extended: 1 +precision: 9 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- basics (examples in specification, etc.) +expx001 exp -Infinity -> 0 +expx002 exp -10 -> 0.0000453999298 Inexact Rounded +expx003 exp -1 -> 0.367879441 Inexact Rounded +expx004 exp 0 -> 1 +expx005 exp -0 -> 1 +expx006 exp 1 -> 2.71828183 Inexact Rounded +expx007 exp 0.693147181 -> 2.00000000 Inexact Rounded +expx008 exp 10 -> 22026.4658 Inexact Rounded +expx009 exp +Infinity -> Infinity + +-- tiny edge cases +precision: 7 +expx011 exp 0.1 -> 1.105171 Inexact Rounded +expx012 exp 0.01 -> 1.010050 Inexact Rounded +expx013 exp 0.001 -> 1.001001 Inexact Rounded +expx014 exp 0.0001 -> 1.000100 Inexact Rounded +expx015 exp 0.00001 -> 1.000010 Inexact Rounded +expx016 exp 0.000001 -> 1.000001 Inexact Rounded +expx017 exp 0.0000001 -> 1.000000 Inexact Rounded +expx018 exp 0.0000003 -> 1.000000 Inexact Rounded +expx019 exp 0.0000004 -> 1.000000 Inexact Rounded +expx020 exp 0.0000005 -> 1.000001 Inexact Rounded +expx021 exp 0.0000008 -> 1.000001 Inexact Rounded +expx022 exp 0.0000009 -> 1.000001 Inexact Rounded +expx023 exp 0.0000010 -> 1.000001 Inexact Rounded +expx024 exp 0.0000011 -> 1.000001 Inexact Rounded +expx025 exp 0.00000009 -> 1.000000 Inexact Rounded +expx026 exp 0.00000005 -> 1.000000 Inexact Rounded +expx027 exp 0.00000004 -> 1.000000 Inexact Rounded +expx028 exp 0.00000001 -> 1.000000 Inexact Rounded + +-- and some more zeros +expx030 exp 0.00000000 -> 1 +expx031 exp 0E+100 -> 1 +expx032 exp 0E-100 -> 1 +expx033 exp -0.00000000 -> 1 +expx034 exp -0E+100 -> 1 +expx035 exp -0E-100 -> 1 + +-- basic e=0, e=1, e=2, e=4, e>=8 cases +precision: 7 +expx041 exp 1 -> 2.718282 Inexact Rounded +expx042 exp -1 -> 0.3678794 Inexact Rounded +expx043 exp 10 -> 22026.47 Inexact Rounded +expx044 exp -10 -> 0.00004539993 Inexact Rounded +expx045 exp 100 -> 2.688117E+43 Inexact Rounded +expx046 exp -100 -> 3.720076E-44 Inexact Rounded +expx047 exp 1000 -> Infinity Overflow Inexact Rounded +expx048 exp -1000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx049 exp 100000000 -> Infinity Overflow Inexact Rounded +expx050 exp -100000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal + +-- miscellanea +-- similar to 'VF bug' test, at 17, but with last digit corrected for decimal +precision: 16 +expx055 exp -5.42410311287441459172E+2 -> 2.717658486884572E-236 Inexact Rounded +-- result from NetRexx/Java prototype -> 2.7176584868845721117677929628617246054459644711108E-236 +-- result from Rexx (series) version -> 2.717658486884572111767792962861724605446E-236 +precision: 17 +expx056 exp -5.42410311287441459172E+2 -> 2.7176584868845721E-236 Inexact Rounded +precision: 18 +expx057 exp -5.42410311287441459172E+2 -> 2.71765848688457211E-236 Inexact Rounded +precision: 19 +expx058 exp -5.42410311287441459172E+2 -> 2.717658486884572112E-236 Inexact Rounded +precision: 20 +expx059 exp -5.42410311287441459172E+2 -> 2.7176584868845721118E-236 Inexact Rounded + +-- rounding in areas of ..500.., ..499.., ..100.., ..999.. sequences +precision: 50 +expx101 exp -9E-8 -> 0.99999991000000404999987850000273374995079250073811 Inexact Rounded +precision: 31 +expx102 exp -9E-8 -> 0.9999999100000040499998785000027 Inexact Rounded +precision: 30 +expx103 exp -9E-8 -> 0.999999910000004049999878500003 Inexact Rounded +precision: 29 +expx104 exp -9E-8 -> 0.99999991000000404999987850000 Inexact Rounded +precision: 28 +expx105 exp -9E-8 -> 0.9999999100000040499998785000 Inexact Rounded +precision: 27 +expx106 exp -9E-8 -> 0.999999910000004049999878500 Inexact Rounded +precision: 26 +expx107 exp -9E-8 -> 0.99999991000000404999987850 Inexact Rounded +precision: 25 +expx108 exp -9E-8 -> 0.9999999100000040499998785 Inexact Rounded +precision: 24 +expx109 exp -9E-8 -> 0.999999910000004049999879 Inexact Rounded +precision: 23 +expx110 exp -9E-8 -> 0.99999991000000404999988 Inexact Rounded +precision: 22 +expx111 exp -9E-8 -> 0.9999999100000040499999 Inexact Rounded +precision: 21 +expx112 exp -9E-8 -> 0.999999910000004050000 Inexact Rounded +precision: 20 +expx113 exp -9E-8 -> 0.99999991000000405000 Inexact Rounded +precision: 19 +expx114 exp -9E-8 -> 0.9999999100000040500 Inexact Rounded +precision: 18 +expx115 exp -9E-8 -> 0.999999910000004050 Inexact Rounded +precision: 17 +expx116 exp -9E-8 -> 0.99999991000000405 Inexact Rounded +precision: 16 +expx117 exp -9E-8 -> 0.9999999100000040 Inexact Rounded +precision: 15 +expx118 exp -9E-8 -> 0.999999910000004 Inexact Rounded +precision: 14 +expx119 exp -9E-8 -> 0.99999991000000 Inexact Rounded +precision: 13 +expx120 exp -9E-8 -> 0.9999999100000 Inexact Rounded +precision: 12 +expx121 exp -9E-8 -> 0.999999910000 Inexact Rounded +precision: 11 +expx122 exp -9E-8 -> 0.99999991000 Inexact Rounded +precision: 10 +expx123 exp -9E-8 -> 0.9999999100 Inexact Rounded +precision: 9 +expx124 exp -9E-8 -> 0.999999910 Inexact Rounded +precision: 8 +expx125 exp -9E-8 -> 0.99999991 Inexact Rounded +precision: 7 +expx126 exp -9E-8 -> 0.9999999 Inexact Rounded +precision: 6 +expx127 exp -9E-8 -> 1.00000 Inexact Rounded +precision: 5 +expx128 exp -9E-8 -> 1.0000 Inexact Rounded +precision: 4 +expx129 exp -9E-8 -> 1.000 Inexact Rounded +precision: 3 +expx130 exp -9E-8 -> 1.00 Inexact Rounded +precision: 2 +expx131 exp -9E-8 -> 1.0 Inexact Rounded +precision: 1 +expx132 exp -9E-8 -> 1 Inexact Rounded + + +-- sanity checks, with iteration counts [normalized so 0<=|x|<1] +precision: 50 + +expx210 exp 0 -> 1 +-- iterations: 2 +expx211 exp -1E-40 -> 0.99999999999999999999999999999999999999990000000000 Inexact Rounded +-- iterations: 8 +expx212 exp -9E-7 -> 0.99999910000040499987850002733749507925073811240510 Inexact Rounded +-- iterations: 6 +expx213 exp -9E-8 -> 0.99999991000000404999987850000273374995079250073811 Inexact Rounded +-- iterations: 15 +expx214 exp -0.003 -> 0.99700449550337297601206623409756091074177480489845 Inexact Rounded +-- iterations: 14 +expx215 exp -0.001 -> 0.99900049983337499166805535716765597470235590236008 Inexact Rounded +-- iterations: 26 +expx216 exp -0.1 -> 0.90483741803595957316424905944643662119470536098040 Inexact Rounded +-- iterations: 39 +expx217 exp -0.7 -> 0.49658530379140951470480009339752896170766716571182 Inexact Rounded +-- iterations: 41 +expx218 exp -0.9 -> 0.40656965974059911188345423964562598783370337617038 Inexact Rounded +-- iterations: 43 +expx219 exp -0.99 -> 0.37157669102204569053152411990820138691802885490501 Inexact Rounded +-- iterations: 26 +expx220 exp -1 -> 0.36787944117144232159552377016146086744581113103177 Inexact Rounded +-- iterations: 26 +expx221 exp -1.01 -> 0.36421897957152331975704629563734548959589139192482 Inexact Rounded +-- iterations: 27 +expx222 exp -1.1 -> 0.33287108369807955328884690643131552161247952156921 Inexact Rounded +-- iterations: 28 +expx223 exp -1.5 -> 0.22313016014842982893328047076401252134217162936108 Inexact Rounded +-- iterations: 30 +expx224 exp -2 -> 0.13533528323661269189399949497248440340763154590958 Inexact Rounded +-- iterations: 36 +expx225 exp -5 -> 0.0067379469990854670966360484231484242488495850273551 Inexact Rounded +-- iterations: 26 +expx226 exp -10 -> 0.000045399929762484851535591515560550610237918088866565 Inexact Rounded +-- iterations: 28 +expx227 exp -14 -> 8.3152871910356788406398514256526229460765836498457E-7 Inexact Rounded +-- iterations: 29 +expx228 exp -15 -> 3.0590232050182578837147949770228963937082078081856E-7 Inexact Rounded +-- iterations: 30 +expx233 exp 0 -> 1 +-- iterations: 2 +expx234 exp 1E-40 -> 1.0000000000000000000000000000000000000001000000000 Inexact Rounded +-- iterations: 7 +expx235 exp 9E-7 -> 1.0000009000004050001215000273375049207507381125949 Inexact Rounded +-- iterations: 6 +expx236 exp 9E-8 -> 1.0000000900000040500001215000027337500492075007381 Inexact Rounded +-- iterations: 15 +expx237 exp 0.003 -> 1.0030045045033770260129340913489002053318727195619 Inexact Rounded +-- iterations: 13 +expx238 exp 0.001 -> 1.0010005001667083416680557539930583115630762005807 Inexact Rounded +-- iterations: 25 +expx239 exp 0.1 -> 1.1051709180756476248117078264902466682245471947375 Inexact Rounded +-- iterations: 38 +expx240 exp 0.7 -> 2.0137527074704765216245493885830652700175423941459 Inexact Rounded +-- iterations: 41 +expx241 exp 0.9 -> 2.4596031111569496638001265636024706954217723064401 Inexact Rounded +-- iterations: 42 +expx242 exp 0.99 -> 2.6912344723492622890998794040710139721802931841030 Inexact Rounded +-- iterations: 26 +expx243 exp 1 -> 2.7182818284590452353602874713526624977572470937000 Inexact Rounded +-- iterations: 26 +expx244 exp 1.01 -> 2.7456010150169164939897763166603876240737508195960 Inexact Rounded +-- iterations: 26 +expx245 exp 1.1 -> 3.0041660239464331120584079535886723932826810260163 Inexact Rounded +-- iterations: 28 +expx246 exp 1.5 -> 4.4816890703380648226020554601192758190057498683697 Inexact Rounded +-- iterations: 29 +expx247 exp 2 -> 7.3890560989306502272304274605750078131803155705518 Inexact Rounded +-- iterations: 36 +expx248 exp 5 -> 148.41315910257660342111558004055227962348766759388 Inexact Rounded +-- iterations: 26 +expx249 exp 10 -> 22026.465794806716516957900645284244366353512618557 Inexact Rounded +-- iterations: 28 +expx250 exp 14 -> 1202604.2841647767777492367707678594494124865433761 Inexact Rounded +-- iterations: 28 +expx251 exp 15 -> 3269017.3724721106393018550460917213155057385438200 Inexact Rounded +-- iterations: 29 + +-- a biggie [result verified 3 ways] +precision: 250 +expx260 exp 1 -> 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668 Inexact Rounded + +-- extreme range boundaries +precision: 16 +maxExponent: 999999 +minExponent: -999999 +-- Ntiny boundary +expx290 exp -2302618.022332529 -> 0E-1000014 Underflow Subnormal Inexact Rounded Clamped +expx291 exp -2302618.022332528 -> 1E-1000014 Underflow Subnormal Inexact Rounded +-- Nmax/10 and Nmax boundary +expx292 exp 2302582.790408952 -> 9.999999993100277E+999998 Inexact Rounded +expx293 exp 2302582.790408953 -> 1.000000000310028E+999999 Inexact Rounded +expx294 exp 2302585.092993946 -> 9.999999003159870E+999999 Inexact Rounded +expx295 exp 2302585.092994036 -> 9.999999903159821E+999999 Inexact Rounded +expx296 exp 2302585.092994045 -> 9.999999993159820E+999999 Inexact Rounded +expx297 exp 2302585.092994046 -> Infinity Overflow Inexact Rounded + +-- 0<-x<<1 effects +precision: 30 +expx320 exp -4.9999999999999E-8 -> 0.999999950000001250000979166617 Inexact Rounded +expx321 exp -5.0000000000000E-8 -> 0.999999950000001249999979166667 Inexact Rounded +expx322 exp -5.0000000000001E-8 -> 0.999999950000001249998979166717 Inexact Rounded +precision: 20 +expx323 exp -4.9999999999999E-8 -> 0.99999995000000125000 Inexact Rounded +expx324 exp -5.0000000000000E-8 -> 0.99999995000000125000 Inexact Rounded +expx325 exp -5.0000000000001E-8 -> 0.99999995000000125000 Inexact Rounded +precision: 14 +expx326 exp -4.9999999999999E-8 -> 0.99999995000000 Inexact Rounded +expx327 exp -5.0000000000000E-8 -> 0.99999995000000 Inexact Rounded +expx328 exp -5.0000000000001E-8 -> 0.99999995000000 Inexact Rounded +-- overprecise and 0<-x<<1 +precision: 8 +expx330 exp -4.9999999999999E-8 -> 0.99999995 Inexact Rounded +expx331 exp -5.0000000000000E-8 -> 0.99999995 Inexact Rounded +expx332 exp -5.0000000000001E-8 -> 0.99999995 Inexact Rounded +precision: 7 +expx333 exp -4.9999999999999E-8 -> 1.000000 Inexact Rounded +expx334 exp -5.0000000000000E-8 -> 1.000000 Inexact Rounded +expx335 exp -5.0000000000001E-8 -> 1.000000 Inexact Rounded +precision: 3 +expx336 exp -4.9999999999999E-8 -> 1.00 Inexact Rounded +expx337 exp -5.0000000000000E-8 -> 1.00 Inexact Rounded +expx338 exp -5.0000000000001E-8 -> 1.00 Inexact Rounded + +-- 0 1.00000005000000124999902083328 Inexact Rounded +expx341 exp 5.0000000000000E-8 -> 1.00000005000000125000002083333 Inexact Rounded +expx342 exp 5.0000000000001E-8 -> 1.00000005000000125000102083338 Inexact Rounded +precision: 20 +expx343 exp 4.9999999999999E-8 -> 1.0000000500000012500 Inexact Rounded +expx344 exp 5.0000000000000E-8 -> 1.0000000500000012500 Inexact Rounded +expx345 exp 5.0000000000001E-8 -> 1.0000000500000012500 Inexact Rounded +precision: 14 +expx346 exp 4.9999999999999E-8 -> 1.0000000500000 Inexact Rounded +expx347 exp 5.0000000000000E-8 -> 1.0000000500000 Inexact Rounded +expx348 exp 5.0000000000001E-8 -> 1.0000000500000 Inexact Rounded +-- overprecise and 0 1.0000001 Inexact Rounded +expx351 exp 5.0000000000000E-8 -> 1.0000001 Inexact Rounded +expx352 exp 5.0000000000001E-8 -> 1.0000001 Inexact Rounded +precision: 7 +expx353 exp 4.9999999999999E-8 -> 1.000000 Inexact Rounded +expx354 exp 5.0000000000000E-8 -> 1.000000 Inexact Rounded +expx355 exp 5.0000000000001E-8 -> 1.000000 Inexact Rounded +precision: 3 +expx356 exp 4.9999999999999E-8 -> 1.00 Inexact Rounded +expx357 exp 5.0000000000000E-8 -> 1.00 Inexact Rounded +expx358 exp 5.0000000000001E-8 -> 1.00 Inexact Rounded + +-- cases near 1 -- 1 2345678901234567890 +precision: 20 +expx401 exp 0.99999999999996 -> 2.7182818284589365041 Inexact Rounded +expx402 exp 0.99999999999997 -> 2.7182818284589636869 Inexact Rounded +expx403 exp 0.99999999999998 -> 2.7182818284589908697 Inexact Rounded +expx404 exp 0.99999999999999 -> 2.7182818284590180525 Inexact Rounded +expx405 exp 1.0000000000000 -> 2.7182818284590452354 Inexact Rounded +expx406 exp 1.0000000000001 -> 2.7182818284593170635 Inexact Rounded +expx407 exp 1.0000000000002 -> 2.7182818284595888917 Inexact Rounded +precision: 14 +expx411 exp 0.99999999999996 -> 2.7182818284589 Inexact Rounded +expx412 exp 0.99999999999997 -> 2.7182818284590 Inexact Rounded +expx413 exp 0.99999999999998 -> 2.7182818284590 Inexact Rounded +expx414 exp 0.99999999999999 -> 2.7182818284590 Inexact Rounded +expx415 exp 1.0000000000000 -> 2.7182818284590 Inexact Rounded +expx416 exp 1.0000000000001 -> 2.7182818284593 Inexact Rounded +expx417 exp 1.0000000000002 -> 2.7182818284596 Inexact Rounded +-- overprecise... +precision: 7 +expx421 exp 0.99999999999996 -> 2.718282 Inexact Rounded +expx422 exp 0.99999999999997 -> 2.718282 Inexact Rounded +expx423 exp 0.99999999999998 -> 2.718282 Inexact Rounded +expx424 exp 0.99999999999999 -> 2.718282 Inexact Rounded +expx425 exp 1.0000000000001 -> 2.718282 Inexact Rounded +expx426 exp 1.0000000000002 -> 2.718282 Inexact Rounded +expx427 exp 1.0000000000003 -> 2.718282 Inexact Rounded +precision: 2 +expx431 exp 0.99999999999996 -> 2.7 Inexact Rounded +expx432 exp 0.99999999999997 -> 2.7 Inexact Rounded +expx433 exp 0.99999999999998 -> 2.7 Inexact Rounded +expx434 exp 0.99999999999999 -> 2.7 Inexact Rounded +expx435 exp 1.0000000000001 -> 2.7 Inexact Rounded +expx436 exp 1.0000000000002 -> 2.7 Inexact Rounded +expx437 exp 1.0000000000003 -> 2.7 Inexact Rounded + +-- basics at low precisions +precision: 3 +expx501 exp -Infinity -> 0 +expx502 exp -10 -> 0.0000454 Inexact Rounded +expx503 exp -1 -> 0.368 Inexact Rounded +expx504 exp 0 -> 1 +expx505 exp -0 -> 1 +expx506 exp 1 -> 2.72 Inexact Rounded +expx507 exp 0.693147181 -> 2.00 Inexact Rounded +expx508 exp 10 -> 2.20E+4 Inexact Rounded +expx509 exp +Infinity -> Infinity +precision: 2 +expx511 exp -Infinity -> 0 +expx512 exp -10 -> 0.000045 Inexact Rounded +expx513 exp -1 -> 0.37 Inexact Rounded +expx514 exp 0 -> 1 +expx515 exp -0 -> 1 +expx516 exp 1 -> 2.7 Inexact Rounded +expx517 exp 0.693147181 -> 2.0 Inexact Rounded +expx518 exp 10 -> 2.2E+4 Inexact Rounded +expx519 exp +Infinity -> Infinity +precision: 1 +expx521 exp -Infinity -> 0 +expx522 exp -10 -> 0.00005 Inexact Rounded +expx523 exp -1 -> 0.4 Inexact Rounded +expx524 exp 0 -> 1 +expx525 exp -0 -> 1 +expx526 exp 1 -> 3 Inexact Rounded +expx527 exp 0.693147181 -> 2 Inexact Rounded +expx528 exp 10 -> 2E+4 Inexact Rounded +expx529 exp +Infinity -> Infinity + +-- overflows, including some overprecise borderlines +precision: 7 +maxExponent: 384 +minExponent: -383 +expx701 exp 1000000000 -> Infinity Overflow Inexact Rounded +expx702 exp 100000000 -> Infinity Overflow Inexact Rounded +expx703 exp 10000000 -> Infinity Overflow Inexact Rounded +expx704 exp 1000000 -> Infinity Overflow Inexact Rounded +expx705 exp 100000 -> Infinity Overflow Inexact Rounded +expx706 exp 10000 -> Infinity Overflow Inexact Rounded +expx707 exp 1000 -> Infinity Overflow Inexact Rounded +expx708 exp 886.4952608 -> Infinity Overflow Inexact Rounded +expx709 exp 886.4952607 -> 9.999999E+384 Inexact Rounded +expx710 exp 886.49527 -> Infinity Overflow Inexact Rounded +expx711 exp 886.49526 -> 9.999992E+384 Inexact Rounded +precision: 16 +expx721 exp 886.4952608027075883 -> Infinity Overflow Inexact Rounded +expx722 exp 886.4952608027075882 -> 9.999999999999999E+384 Inexact Rounded +expx723 exp 886.49526080270759 -> Infinity Overflow Inexact Rounded +expx724 exp 886.49526080270758 -> 9.999999999999917E+384 Inexact Rounded +expx725 exp 886.4952608027076 -> Infinity Overflow Inexact Rounded +expx726 exp 886.4952608027075 -> 9.999999999999117E+384 Inexact Rounded +-- and by special request ... +precision: 15 +expx731 exp 886.495260802708 -> Infinity Overflow Inexact Rounded +expx732 exp 886.495260802707 -> 9.99999999999412E+384 Inexact Rounded +expx733 exp 886.495260802706 -> 9.99999999998412E+384 Inexact Rounded +maxExponent: 999 +minExponent: -999 +expx735 exp 2302.58509299405 -> Infinity Overflow Inexact Rounded +expx736 exp 2302.58509299404 -> 9.99999999994316E+999 Inexact Rounded +expx737 exp 2302.58509299403 -> 9.99999999984316E+999 Inexact Rounded + +-- subnormals and underflows, including underflow-to-zero edge point +precision: 7 +maxExponent: 384 +minExponent: -383 +expx751 exp -1000000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx752 exp -100000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx753 exp -10000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx754 exp -1000000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx755 exp -100000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx756 exp -10000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx757 exp -1000 -> 0E-389 Underflow Inexact Rounded Clamped Subnormal +expx758 exp -881.89009 -> 1.000001E-383 Inexact Rounded +expx759 exp -881.8901 -> 9.99991E-384 Inexact Rounded Underflow Subnormal +expx760 exp -885 -> 4.4605E-385 Inexact Rounded Underflow Subnormal +expx761 exp -888 -> 2.221E-386 Inexact Rounded Underflow Subnormal +expx762 exp -890 -> 3.01E-387 Inexact Rounded Underflow Subnormal +expx763 exp -892.9 -> 1.7E-388 Inexact Rounded Underflow Subnormal +expx764 exp -893 -> 1.5E-388 Inexact Rounded Underflow Subnormal +expx765 exp -893.5 -> 9E-389 Inexact Rounded Underflow Subnormal +expx766 exp -895.7056 -> 1E-389 Inexact Rounded Underflow Subnormal +expx769 exp -895.8 -> 1E-389 Inexact Rounded Underflow Subnormal +expx770 exp -895.73 -> 1E-389 Inexact Rounded Underflow Subnormal +expx771 exp -896.3987 -> 1E-389 Inexact Rounded Underflow Subnormal +expx772 exp -896.3988 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped +expx773 exp -898.0081 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped +expx774 exp -898.0082 -> 0E-389 Inexact Rounded Underflow Subnormal Clamped + +-- special values +maxexponent: 999 +minexponent: -999 +expx820 exp Inf -> Infinity +expx821 exp -Inf -> 0 +expx822 exp NaN -> NaN +expx823 exp sNaN -> NaN Invalid_operation +-- propagating NaNs +expx824 exp sNaN123 -> NaN123 Invalid_operation +expx825 exp -sNaN321 -> -NaN321 Invalid_operation +expx826 exp NaN456 -> NaN456 +expx827 exp -NaN654 -> -NaN654 +expx828 exp NaN1 -> NaN1 + +-- Invalid operations due to restrictions +-- [next two probably skipped by most test harnesses] +precision: 100000000 +expx901 exp -Infinity -> NaN Invalid_context +precision: 99999999 +expx902 exp -Infinity -> NaN Invalid_context + +precision: 9 +maxExponent: 1000000 +minExponent: -999999 +expx903 exp -Infinity -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999999 +expx904 exp -Infinity -> 0 +maxExponent: 999999 +minExponent: -1000000 +expx905 exp -Infinity -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999998 +expx906 exp -Infinity -> 0 + +-- +maxExponent: 384 +minExponent: -383 +precision: 16 +rounding: half_even + +-- Null test +expx900 exp # -> NaN Invalid_operation + + +-- Randoms P=50, within 0-999 +Precision: 50 +maxExponent: 384 +minExponent: -383 +expx1501 exp 656.35397950590285612266095596539934213943872885728 -> 1.1243757610640319783611178528839652672062820040314E+285 Inexact Rounded +expx1502 exp 0.93620571093652800225038550600780322831236082781471 -> 2.5502865130986176689199711857825771311178046842009 Inexact Rounded +expx1503 exp 0.00000000000000008340785856601514714183373874105791 -> 1.0000000000000000834078585660151506202691740252512 Inexact Rounded +expx1504 exp 0.00009174057262887789625745574686545163168788456203 -> 1.0000917447809239005146722341251524081006051473273 Inexact Rounded +expx1505 exp 33.909116897973797735657751591014926629051117541243 -> 532773181025002.03543618901306726495870476617232229 Inexact Rounded +expx1506 exp 0.00000740470413004406592124575295278456936809587311 -> 1.0000074047315449333590066395670306135567889210814 Inexact Rounded +expx1507 exp 0.00000000000124854922222108802453746922483071445492 -> 1.0000000000012485492222218674621176239911424968263 Inexact Rounded +expx1508 exp 4.1793280674155659794286951159430651258356014391382 -> 65.321946520147199404199787811336860087975118278185 Inexact Rounded +expx1509 exp 485.43595745460655893746179890255529919221550201686 -> 6.6398403920459617255950476953129377459845366585463E+210 Inexact Rounded +expx1510 exp 0.00000000003547259806590856032527875157830328156597 -> 1.0000000000354725980665377129320589406715000685515 Inexact Rounded +expx1511 exp 0.00000000000000759621497339104047930616478635042678 -> 1.0000000000000075962149733910693305471257715463887 Inexact Rounded +expx1512 exp 9.7959168821760339304571595474480640286072720233796 -> 17960.261146042955179164303653412650751681436352437 Inexact Rounded +expx1513 exp 0.00000000566642006258290526783901451194943164535581 -> 1.0000000056664200786370634609832438815665249347650 Inexact Rounded +expx1514 exp 741.29888791134298194088827572374718940925820027354 -> 8.7501694006317332808128946666402622432064923198731E+321 Inexact Rounded +expx1515 exp 032.75573003552517668808529099897153710887014947935 -> 168125196578678.17725841108617955904425345631092339 Inexact Rounded +expx1516 exp 42.333700726429333308594265553422902463737399437644 -> 2428245675864172475.4681119493045657797309369672012 Inexact Rounded +expx1517 exp 0.00000000000000559682616876491888197609158802835798 -> 1.0000000000000055968261687649345442076732739577049 Inexact Rounded +expx1518 exp 0.00000000000080703688668280193584758300973549486312 -> 1.0000000000008070368866831275901158164321867914342 Inexact Rounded +expx1519 exp 640.72396012796509482382712891709072570653606838251 -> 1.8318094990683394229304133068983914236995326891045E+278 Inexact Rounded +expx1520 exp 0.00000000000000509458922167631071416948112219512224 -> 1.0000000000000050945892216763236915891499324358556 Inexact Rounded +expx1521 exp 6.7670394314315206378625221583973414660727960241395 -> 868.73613012822031367806248697092884415119568271315 Inexact Rounded +expx1522 exp 04.823217407412963506638267226891024138054783122548 -> 124.36457929588837129731821077586705505565904205366 Inexact Rounded +expx1523 exp 193.51307878701196403991208482520115359690106143615 -> 1.1006830872854715677390914655452261550768957576034E+84 Inexact Rounded +expx1524 exp 5.7307749038303650539200345901210497015617393970463 -> 308.20800743106843083522721523715645950574866495196 Inexact Rounded +expx1525 exp 0.00000000000095217825199797965200541169123743500267 -> 1.0000000000009521782519984329737172007991390381273 Inexact Rounded +expx1526 exp 0.00027131440949183370966393682617930153495028919140 -> 1.0002713512185751022906058160480606598754913607364 Inexact Rounded +expx1527 exp 0.00000000064503059114680682343002315662069272707123 -> 1.0000000006450305913548390552323517403613135496633 Inexact Rounded +expx1528 exp 0.00000000000000095616643506527288866235238548440593 -> 1.0000000000000009561664350652733457894781582009094 Inexact Rounded +expx1529 exp 0.00000000000000086449942811678650244459550252743433 -> 1.0000000000000008644994281167868761242261096529986 Inexact Rounded +expx1530 exp 0.06223488355635359965683053157729204988381887621850 -> 1.0642122813392406657789688931838919323826250630831 Inexact Rounded +expx1531 exp 0.00000400710807804429435502657131912308680674057053 -> 1.0000040071161065125925620890019319832127863559260 Inexact Rounded +expx1532 exp 85.522796894744576211573232055494551429297878413017 -> 13870073686404228452757799770251085177.853337368935 Inexact Rounded +expx1533 exp 9.1496720811363678696938036379756663548353399954363 -> 9411.3537122832743386783597629161763057370034495157 Inexact Rounded +expx1534 exp 8.2215705240788294472944382056330516738577785177942 -> 3720.3406813383076953899654701615084425598377758189 Inexact Rounded +expx1535 exp 0.00000000015772064569640613142823203726821076239561 -> 1.0000000001577206457088440324683315788358926129830 Inexact Rounded +expx1536 exp 0.58179346473959531432624153576883440625538017532480 -> 1.7892445018275360163797022372655837188423194863605 Inexact Rounded +expx1537 exp 33.555726197149525061455517784870570470833498096559 -> 374168069896324.62578073148993526626307095854407952 Inexact Rounded +expx1538 exp 9.7898079803906215094140010009583375537259810398659 -> 17850.878119912208888217100998019986634620368538426 Inexact Rounded +expx1539 exp 89.157697327174521542502447953032536541038636966347 -> 525649152320166503771224149330448089550.67293829227 Inexact Rounded +expx1540 exp 25.022947600123328912029051897171319573322888514885 -> 73676343442.952517824345431437683153304645851960524 Inexact Rounded + +-- exp(1) at 34 +Precision: 34 +expx1200 exp 1 -> 2.718281828459045235360287471352662 Inexact Rounded + +-- Randoms P=34, within 0-999 +Precision: 34 +maxExponent: 6144 +minExponent: -6143 +expx1201 exp 309.5948855821510212996700645087188 -> 2.853319692901387521201738015050724E+134 Inexact Rounded +expx1202 exp 9.936543068706211420422803962680164 -> 20672.15839203171877476511093276022 Inexact Rounded +expx1203 exp 6.307870323881505684429839491707908 -> 548.8747777054637296137277391754665 Inexact Rounded +expx1204 exp 0.0003543281389438420535201308282503 -> 1.000354390920573746164733350843155 Inexact Rounded +expx1205 exp 0.0000037087453363918375598394920229 -> 1.000003708752213796324841920189323 Inexact Rounded +expx1206 exp 0.0020432312687512438040222444116585 -> 1.002045320088164826013561630975308 Inexact Rounded +expx1207 exp 6.856313340032177672550343216129586 -> 949.8587981604144147983589660524396 Inexact Rounded +expx1208 exp 0.0000000000402094928333815643326418 -> 1.000000000040209492834189965989612 Inexact Rounded +expx1209 exp 0.0049610784722412117632647003545839 -> 1.004973404997901987039589029277833 Inexact Rounded +expx1210 exp 0.0000891471883724066909746786702686 -> 1.000089151162101085412780088266699 Inexact Rounded +expx1211 exp 08.59979170376061890684723211112566 -> 5430.528314920905714615339273738097 Inexact Rounded +expx1212 exp 9.473117039341003854872778112752590 -> 13005.36234331224953460055897913917 Inexact Rounded +expx1213 exp 0.0999060724692207648429969999310118 -> 1.105067116975190602296052700726802 Inexact Rounded +expx1214 exp 0.0000000927804533555877884082269247 -> 1.000000092780457659694183954740772 Inexact Rounded +expx1215 exp 0.0376578583872889916298772818265677 -> 1.038375900489771946477857818447556 Inexact Rounded +expx1216 exp 261.6896411697539524911536116712307 -> 4.470613562127465095241600174941460E+113 Inexact Rounded +expx1217 exp 0.0709997423269162980875824213889626 -> 1.073580949235407949417814485533172 Inexact Rounded +expx1218 exp 0.0000000444605583295169895235658731 -> 1.000000044460559317887627657593900 Inexact Rounded +expx1219 exp 0.0000021224072854777512281369815185 -> 1.000002122409537785687390631070906 Inexact Rounded +expx1220 exp 547.5174462574156885473558485475052 -> 6.078629247383807942612114579728672E+237 Inexact Rounded +expx1221 exp 0.0000009067598041615192002339844670 -> 1.000000906760215268314680115374387 Inexact Rounded +expx1222 exp 0.0316476500308065365803455533244603 -> 1.032153761880187977658387961769034 Inexact Rounded +expx1223 exp 84.46160530377645101833996706384473 -> 4.799644995897968383503269871697856E+36 Inexact Rounded +expx1224 exp 0.0000000000520599740290848018904145 -> 1.000000000052059974030439922338393 Inexact Rounded +expx1225 exp 0.0000006748530640093620665651726708 -> 1.000000674853291722742292331812997 Inexact Rounded +expx1226 exp 0.0000000116853119761042020507916169 -> 1.000000011685312044377460306165203 Inexact Rounded +expx1227 exp 0.0022593818094258636727616886693280 -> 1.002261936135876893707094845543461 Inexact Rounded +expx1228 exp 0.0029398857673478912249856509667517 -> 1.002944211469495086813087651287012 Inexact Rounded +expx1229 exp 0.7511480029928802775376270557636963 -> 2.119431734510320169806976569366789 Inexact Rounded +expx1230 exp 174.9431952176750671150886423048447 -> 9.481222305374955011464619468044051E+75 Inexact Rounded +expx1231 exp 0.0000810612451694136129199895164424 -> 1.000081064530720924186615149646920 Inexact Rounded +expx1232 exp 51.06888989702669288180946272499035 -> 15098613888619165073959.89896018749 Inexact Rounded +expx1233 exp 0.0000000005992887599437093651494510 -> 1.000000000599288760123282874082758 Inexact Rounded +expx1234 exp 714.8549046761054856311108828903972 -> 2.867744544891081117381595080480784E+310 Inexact Rounded +expx1235 exp 0.0000000004468247802990643645607110 -> 1.000000000446824780398890556720233 Inexact Rounded +expx1236 exp 831.5818151589890366323551672043709 -> 1.417077409182624969435938062261655E+361 Inexact Rounded +expx1237 exp 0.0000000006868323825179605747108044 -> 1.000000000686832382753829935602454 Inexact Rounded +expx1238 exp 0.0000001306740266408976840228440255 -> 1.000000130674035178748675187648098 Inexact Rounded +expx1239 exp 0.3182210609022267704811502412335163 -> 1.374680115667798185758927247894859 Inexact Rounded +expx1240 exp 0.0147741234179104437440264644295501 -> 1.014883800239950682628277534839222 Inexact Rounded + +-- Randoms P=16, within 0-99 +Precision: 16 +maxExponent: 384 +minExponent: -383 +expx1101 exp 8.473011527013724 -> 4783.900643969246 Inexact Rounded +expx1102 exp 0.0000055753022764 -> 1.000005575317818 Inexact Rounded +expx1103 exp 0.0000323474114482 -> 1.000032347934631 Inexact Rounded +expx1104 exp 64.54374138544166 -> 1.073966476173531E+28 Inexact Rounded +expx1105 exp 90.47203246416569 -> 1.956610887250643E+39 Inexact Rounded +expx1106 exp 9.299931532342757 -> 10937.27033325227 Inexact Rounded +expx1107 exp 8.759678437852203 -> 6372.062234495381 Inexact Rounded +expx1108 exp 0.0000931755127172 -> 1.000093179853690 Inexact Rounded +expx1109 exp 0.0000028101158373 -> 1.000002810119786 Inexact Rounded +expx1110 exp 0.0000008008130919 -> 1.000000800813413 Inexact Rounded +expx1111 exp 8.339771722299049 -> 4187.133803081878 Inexact Rounded +expx1112 exp 0.0026140497995474 -> 1.002617469406750 Inexact Rounded +expx1113 exp 0.7478033356261771 -> 2.112354781975418 Inexact Rounded +expx1114 exp 51.77663761827966 -> 3.064135801120365E+22 Inexact Rounded +expx1115 exp 0.1524989783061012 -> 1.164741272084955 Inexact Rounded +expx1116 exp 0.0066298798669219 -> 1.006651906170791 Inexact Rounded +expx1117 exp 9.955141865534960 -> 21060.23334287038 Inexact Rounded +expx1118 exp 92.34503059198483 -> 1.273318993481226E+40 Inexact Rounded +expx1119 exp 0.0000709388677346 -> 1.000070941383956 Inexact Rounded +expx1120 exp 79.12883036433204 -> 2.318538899389243E+34 Inexact Rounded +expx1121 exp 0.0000090881548873 -> 1.000009088196185 Inexact Rounded +expx1122 exp 0.0424828809603411 -> 1.043398194245720 Inexact Rounded +expx1123 exp 0.8009035891427416 -> 2.227552811933310 Inexact Rounded +expx1124 exp 8.825786167283102 -> 6807.540455289995 Inexact Rounded +expx1125 exp 1.535457249746275 -> 4.643448260146849 Inexact Rounded +expx1126 exp 69.02254254355800 -> 9.464754500670653E+29 Inexact Rounded +expx1127 exp 0.0007050554368713 -> 1.000705304046880 Inexact Rounded +expx1128 exp 0.0000081206549504 -> 1.000008120687923 Inexact Rounded +expx1129 exp 0.621774854641137 -> 1.862230298554903 Inexact Rounded +expx1130 exp 3.847629031404354 -> 46.88177613568203 Inexact Rounded +expx1131 exp 24.81250184697732 -> 59694268456.19966 Inexact Rounded +expx1132 exp 5.107546500516044 -> 165.2643809755670 Inexact Rounded +expx1133 exp 79.17810943951986 -> 2.435656372541360E+34 Inexact Rounded +expx1134 exp 0.0051394695667015 -> 1.005152699295301 Inexact Rounded +expx1135 exp 57.44504488501725 -> 8.872908566929688E+24 Inexact Rounded +expx1136 exp 0.0000508388968036 -> 1.000050840189122 Inexact Rounded +expx1137 exp 69.71309932148997 -> 1.888053740693541E+30 Inexact Rounded +expx1138 exp 0.0064183412981502 -> 1.006438982988835 Inexact Rounded +expx1139 exp 9.346991220814677 -> 11464.27802035082 Inexact Rounded +expx1140 exp 33.09087139999152 -> 235062229168763.5 Inexact Rounded + +-- Randoms P=7, within 0-9 +Precision: 7 +maxExponent: 96 +minExponent: -95 +expx1001 exp 2.395441 -> 10.97304 Inexact Rounded +expx1002 exp 0.6406779 -> 1.897767 Inexact Rounded +expx1003 exp 0.5618218 -> 1.753865 Inexact Rounded +expx1004 exp 3.055120 -> 21.22373 Inexact Rounded +expx1005 exp 1.536792 -> 4.649650 Inexact Rounded +expx1006 exp 0.0801591 -> 1.083459 Inexact Rounded +expx1007 exp 0.0966875 -> 1.101516 Inexact Rounded +expx1008 exp 0.0646761 -> 1.066813 Inexact Rounded +expx1009 exp 0.0095670 -> 1.009613 Inexact Rounded +expx1010 exp 2.956859 -> 19.23745 Inexact Rounded +expx1011 exp 7.504679 -> 1816.522 Inexact Rounded +expx1012 exp 0.0045259 -> 1.004536 Inexact Rounded +expx1013 exp 3.810071 -> 45.15364 Inexact Rounded +expx1014 exp 1.502390 -> 4.492413 Inexact Rounded +expx1015 exp 0.0321523 -> 1.032675 Inexact Rounded +expx1016 exp 0.0057214 -> 1.005738 Inexact Rounded +expx1017 exp 9.811445 -> 18241.33 Inexact Rounded +expx1018 exp 3.245249 -> 25.66810 Inexact Rounded +expx1019 exp 0.3189742 -> 1.375716 Inexact Rounded +expx1020 exp 0.8621610 -> 2.368273 Inexact Rounded +expx1021 exp 0.0122511 -> 1.012326 Inexact Rounded +expx1022 exp 2.202088 -> 9.043877 Inexact Rounded +expx1023 exp 8.778203 -> 6491.202 Inexact Rounded +expx1024 exp 0.1896279 -> 1.208800 Inexact Rounded +expx1025 exp 0.4510947 -> 1.570030 Inexact Rounded +expx1026 exp 0.276413 -> 1.318392 Inexact Rounded +expx1027 exp 4.490067 -> 89.12742 Inexact Rounded +expx1028 exp 0.0439786 -> 1.044960 Inexact Rounded +expx1029 exp 0.8168245 -> 2.263301 Inexact Rounded +expx1030 exp 0.0391658 -> 1.039943 Inexact Rounded +expx1031 exp 9.261816 -> 10528.24 Inexact Rounded +expx1032 exp 9.611186 -> 14930.87 Inexact Rounded +expx1033 exp 9.118125 -> 9119.087 Inexact Rounded +expx1034 exp 9.469083 -> 12953.00 Inexact Rounded +expx1035 exp 0.0499983 -> 1.051269 Inexact Rounded +expx1036 exp 0.0050746 -> 1.005087 Inexact Rounded +expx1037 exp 0.0014696 -> 1.001471 Inexact Rounded +expx1038 exp 9.138494 -> 9306.739 Inexact Rounded +expx1039 exp 0.0065436 -> 1.006565 Inexact Rounded +expx1040 exp 0.7284803 -> 2.071930 Inexact Rounded + diff --git a/Lib/test/decimaltestdata/fma.decTest b/Lib/test/decimaltestdata/fma.decTest index e7b116c39ae..46672af3928 100644 --- a/Lib/test/decimaltestdata/fma.decTest +++ b/Lib/test/decimaltestdata/fma.decTest @@ -1,3426 +1,3426 @@ ------------------------------------------------------------------------- --- fma.decTest -- decimal fused multiply add -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- These tests comprise three parts: --- 1. Sanity checks and other three-operand tests (especially those --- where the fused operation makes a difference) --- 2. Multiply tests (third operand is neutral zero [0E+emax]) --- 3. Addition tests (first operand is 1) --- The multiply and addition tests are extensive because FMA may have --- its own dedicated multiplication or addition routine(s), and they --- also inherently check the left-to-right properties. - --- Sanity checks -fmax0001 fma 1 1 1 -> 2 -fmax0002 fma 1 1 2 -> 3 -fmax0003 fma 2 2 3 -> 7 -fmax0004 fma 9 9 9 -> 90 -fmax0005 fma -1 1 1 -> 0 -fmax0006 fma -1 1 2 -> 1 -fmax0007 fma -2 2 3 -> -1 -fmax0008 fma -9 9 9 -> -72 -fmax0011 fma 1 -1 1 -> 0 -fmax0012 fma 1 -1 2 -> 1 -fmax0013 fma 2 -2 3 -> -1 -fmax0014 fma 9 -9 9 -> -72 -fmax0015 fma 1 1 -1 -> 0 -fmax0016 fma 1 1 -2 -> -1 -fmax0017 fma 2 2 -3 -> 1 -fmax0018 fma 9 9 -9 -> 72 -fmax0019 fma 3 5 7 -> 22 -fmax0029 fma 3 -5 7 -> -8 - --- non-integer exacts -fma0100 fma 25.2 63.6 -438 -> 1164.72 -fma0101 fma 0.301 0.380 334 -> 334.114380 -fma0102 fma 49.2 -4.8 23.3 -> -212.86 -fma0103 fma 4.22 0.079 -94.6 -> -94.26662 -fma0104 fma 903 0.797 0.887 -> 720.578 -fma0105 fma 6.13 -161 65.9 -> -921.03 -fma0106 fma 28.2 727 5.45 -> 20506.85 -fma0107 fma 4 605 688 -> 3108 -fma0108 fma 93.3 0.19 0.226 -> 17.953 -fma0109 fma 0.169 -341 5.61 -> -52.019 -fma0110 fma -72.2 30 -51.2 -> -2217.2 -fma0111 fma -0.409 13 20.4 -> 15.083 -fma0112 fma 317 77.0 19.0 -> 24428.0 -fma0113 fma 47 6.58 1.62 -> 310.88 -fma0114 fma 1.36 0.984 0.493 -> 1.83124 -fma0115 fma 72.7 274 1.56 -> 19921.36 -fma0116 fma 335 847 83 -> 283828 -fma0117 fma 666 0.247 25.4 -> 189.902 -fma0118 fma -3.87 3.06 78.0 -> 66.1578 -fma0119 fma 0.742 192 35.6 -> 178.064 -fma0120 fma -91.6 5.29 0.153 -> -484.411 - --- cases where result is different from separate multiply + add; each --- is preceded by the result of unfused multiply and add --- [this is about 20% of all similar cases in general] --- 888565290 1557.96930 -86087.7578 -> 1.38435735E+12 -fma0201 fma 888565290 1557.96930 -86087.7578 -> 1.38435736E+12 Inexact Rounded --- -85519342.9 735155419 42010431 -> -6.28700084E+16 -fma0205 fma -85519342.9 735155419 42010431 -> -6.28700083E+16 Inexact Rounded --- -98025.5 -294603.472 10414348.2 -> 2.88890669E+10 -fma0208 fma -98025.5 -294603.472 10414348.2 -> 2.88890670E+10 Inexact Rounded --- 5967627.39 83526540.6 498494.810 -> 4.98455271E+14 -fma0211 fma 5967627.39 83526540.6 498494.810 -> 4.98455272E+14 Inexact Rounded --- 3456.9433 874.39518 197866.615 -> 3220601.18 -fma0216 fma 3456.9433 874.39518 197866.615 -> 3220601.17 Inexact Rounded --- 62769.8287 2096.98927 48.420317 -> 131627705 -fma0218 fma 62769.8287 2096.98927 48.420317 -> 131627706 Inexact Rounded --- -68.81500 59961113.9 -8988862 -> -4.13521291E+9 -fma0219 fma -68.81500 59961113.9 -8988862 -> -4.13521292E+9 Inexact Rounded --- 2126341.02 63491.5152 302427455 -> 1.35307040E+11 -fma0226 fma 2126341.02 63491.5152 302427455 -> 1.35307041E+11 Inexact Rounded - - --- Infinite combinations -fmax0800 fma Inf Inf Inf -> Infinity -fmax0801 fma Inf Inf -Inf -> NaN Invalid_operation -fmax0802 fma Inf -Inf Inf -> NaN Invalid_operation -fmax0803 fma Inf -Inf -Inf -> -Infinity -fmax0804 fma -Inf Inf Inf -> NaN Invalid_operation -fmax0805 fma -Inf Inf -Inf -> -Infinity -fmax0806 fma -Inf -Inf Inf -> Infinity -fmax0807 fma -Inf -Inf -Inf -> NaN Invalid_operation -fmax0808 fma -Inf 0 1 -> NaN Invalid_operation -fmax0809 fma -Inf 0 NaN -> NaN Invalid_operation - --- Triple NaN propagation -fmax0900 fma NaN2 NaN3 NaN5 -> NaN2 -fmax0901 fma 0 NaN3 NaN5 -> NaN3 -fmax0902 fma 0 0 NaN5 -> NaN5 --- first sNaN wins (consider qNaN from earlier sNaN being --- overridden by an sNaN in third operand) -fmax0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -fmax0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation -fmax0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation -fmax0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation -fmax0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation -fmax0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation - --- MULTIPLICATION TESTS ------------------------------------------------ --- sanity checks (as base, above) -fmax2000 fma 2 2 0E+999999 -> 4 -fmax2001 fma 2 3 0E+999999 -> 6 -fmax2002 fma 5 1 0E+999999 -> 5 -fmax2003 fma 5 2 0E+999999 -> 10 -fmax2004 fma 1.20 2 0E+999999 -> 2.40 -fmax2005 fma 1.20 0 0E+999999 -> 0.00 -fmax2006 fma 1.20 -2 0E+999999 -> -2.40 -fmax2007 fma -1.20 2 0E+999999 -> -2.40 -fmax2008 fma -1.20 0 0E+999999 -> 0.00 -fmax2009 fma -1.20 -2 0E+999999 -> 2.40 -fmax2010 fma 5.09 7.1 0E+999999 -> 36.139 -fmax2011 fma 2.5 4 0E+999999 -> 10.0 -fmax2012 fma 2.50 4 0E+999999 -> 10.00 -fmax2013 fma 1.23456789 1.00000000 0E+999999 -> 1.23456789 Rounded -fmax2014 fma 9.999999999 9.999999999 0E+999999 -> 100.000000 Inexact Rounded -fmax2015 fma 2.50 4 0E+999999 -> 10.00 -precision: 6 -fmax2016 fma 2.50 4 0E+999999 -> 10.00 -fmax2017 fma 9.999999 9.999999 0E+999999 -> 100.000 Inexact Rounded -fmax2018 fma 9.999999 -9.999999 0E+999999 -> -100.000 Inexact Rounded -fmax2019 fma -9.999999 9.999999 0E+999999 -> -100.000 Inexact Rounded -fmax2020 fma -9.999999 -9.999999 0E+999999 -> 100.000 Inexact Rounded - --- 1999.12.21: next one is an edge case if intermediate longs are used -precision: 15 -fmax2059 fma 999999999999 9765625 0E+999999 -> 9.76562499999023E+18 Inexact Rounded -precision: 30 -fmax2160 fma 999999999999 9765625 0E+999999 -> 9765624999990234375 -precision: 9 ------ - --- zeros, etc. -fmax2021 fma 0 0 0E+999999 -> 0 -fmax2022 fma 0 -0 0E+999999 -> 0 -fmax2023 fma -0 0 0E+999999 -> 0 -fmax2024 fma -0 -0 0E+999999 -> 0 -fmax2025 fma -0.0 -0.0 0E+999999 -> 0.00 -fmax2026 fma -0.0 -0.0 0E+999999 -> 0.00 -fmax2027 fma -0.0 -0.0 0E+999999 -> 0.00 -fmax2028 fma -0.0 -0.0 0E+999999 -> 0.00 -fmax2030 fma 5.00 1E-3 0E+999999 -> 0.00500 -fmax2031 fma 00.00 0.000 0E+999999 -> 0.00000 -fmax2032 fma 00.00 0E-3 0E+999999 -> 0.00000 -- rhs is 0 -fmax2033 fma 0E-3 00.00 0E+999999 -> 0.00000 -- lhs is 0 -fmax2034 fma -5.00 1E-3 0E+999999 -> -0.00500 -fmax2035 fma -00.00 0.000 0E+999999 -> 0.00000 -fmax2036 fma -00.00 0E-3 0E+999999 -> 0.00000 -- rhs is 0 -fmax2037 fma -0E-3 00.00 0E+999999 -> 0.00000 -- lhs is 0 -fmax2038 fma 5.00 -1E-3 0E+999999 -> -0.00500 -fmax2039 fma 00.00 -0.000 0E+999999 -> 0.00000 -fmax2040 fma 00.00 -0E-3 0E+999999 -> 0.00000 -- rhs is 0 -fmax2041 fma 0E-3 -00.00 0E+999999 -> 0.00000 -- lhs is 0 -fmax2042 fma -5.00 -1E-3 0E+999999 -> 0.00500 -fmax2043 fma -00.00 -0.000 0E+999999 -> 0.00000 -fmax2044 fma -00.00 -0E-3 0E+999999 -> 0.00000 -- rhs is 0 -fmax2045 fma -0E-3 -00.00 0E+999999 -> 0.00000 -- lhs is 0 - --- examples from decarith multiply -fmax2050 fma 1.20 3 0E+999999 -> 3.60 -fmax2051 fma 7 3 0E+999999 -> 21 -fmax2052 fma 0.9 0.8 0E+999999 -> 0.72 -fmax2053 fma 0.9 -0 0E+999999 -> 0.0 -fmax2054 fma 654321 654321 0E+999999 -> 4.28135971E+11 Inexact Rounded - -fmax2060 fma 123.45 1e7 0E+999999 -> 1.2345E+9 -fmax2061 fma 123.45 1e8 0E+999999 -> 1.2345E+10 -fmax2062 fma 123.45 1e+9 0E+999999 -> 1.2345E+11 -fmax2063 fma 123.45 1e10 0E+999999 -> 1.2345E+12 -fmax2064 fma 123.45 1e11 0E+999999 -> 1.2345E+13 -fmax2065 fma 123.45 1e12 0E+999999 -> 1.2345E+14 -fmax2066 fma 123.45 1e13 0E+999999 -> 1.2345E+15 - - --- test some intermediate lengths -precision: 9 -fmax2080 fma 0.1 123456789 0E+999999 -> 12345678.9 -fmax2081 fma 0.1 1234567891 0E+999999 -> 123456789 Inexact Rounded -fmax2082 fma 0.1 12345678912 0E+999999 -> 1.23456789E+9 Inexact Rounded -fmax2083 fma 0.1 12345678912345 0E+999999 -> 1.23456789E+12 Inexact Rounded -fmax2084 fma 0.1 123456789 0E+999999 -> 12345678.9 -precision: 8 -fmax2085 fma 0.1 12345678912 0E+999999 -> 1.2345679E+9 Inexact Rounded -fmax2086 fma 0.1 12345678912345 0E+999999 -> 1.2345679E+12 Inexact Rounded -precision: 7 -fmax2087 fma 0.1 12345678912 0E+999999 -> 1.234568E+9 Inexact Rounded -fmax2088 fma 0.1 12345678912345 0E+999999 -> 1.234568E+12 Inexact Rounded - -precision: 9 -fmax2090 fma 123456789 0.1 0E+999999 -> 12345678.9 -fmax2091 fma 1234567891 0.1 0E+999999 -> 123456789 Inexact Rounded -fmax2092 fma 12345678912 0.1 0E+999999 -> 1.23456789E+9 Inexact Rounded -fmax2093 fma 12345678912345 0.1 0E+999999 -> 1.23456789E+12 Inexact Rounded -fmax2094 fma 123456789 0.1 0E+999999 -> 12345678.9 -precision: 8 -fmax2095 fma 12345678912 0.1 0E+999999 -> 1.2345679E+9 Inexact Rounded -fmax2096 fma 12345678912345 0.1 0E+999999 -> 1.2345679E+12 Inexact Rounded -precision: 7 -fmax2097 fma 12345678912 0.1 0E+999999 -> 1.234568E+9 Inexact Rounded -fmax2098 fma 12345678912345 0.1 0E+999999 -> 1.234568E+12 Inexact Rounded - --- test some more edge cases and carries -maxexponent: 9999 -minexponent: -9999 -precision: 33 -fmax2101 fma 9 9 0E+999999 -> 81 -fmax2102 fma 9 90 0E+999999 -> 810 -fmax2103 fma 9 900 0E+999999 -> 8100 -fmax2104 fma 9 9000 0E+999999 -> 81000 -fmax2105 fma 9 90000 0E+999999 -> 810000 -fmax2106 fma 9 900000 0E+999999 -> 8100000 -fmax2107 fma 9 9000000 0E+999999 -> 81000000 -fmax2108 fma 9 90000000 0E+999999 -> 810000000 -fmax2109 fma 9 900000000 0E+999999 -> 8100000000 -fmax2110 fma 9 9000000000 0E+999999 -> 81000000000 -fmax2111 fma 9 90000000000 0E+999999 -> 810000000000 -fmax2112 fma 9 900000000000 0E+999999 -> 8100000000000 -fmax2113 fma 9 9000000000000 0E+999999 -> 81000000000000 -fmax2114 fma 9 90000000000000 0E+999999 -> 810000000000000 -fmax2115 fma 9 900000000000000 0E+999999 -> 8100000000000000 -fmax2116 fma 9 9000000000000000 0E+999999 -> 81000000000000000 -fmax2117 fma 9 90000000000000000 0E+999999 -> 810000000000000000 -fmax2118 fma 9 900000000000000000 0E+999999 -> 8100000000000000000 -fmax2119 fma 9 9000000000000000000 0E+999999 -> 81000000000000000000 -fmax2120 fma 9 90000000000000000000 0E+999999 -> 810000000000000000000 -fmax2121 fma 9 900000000000000000000 0E+999999 -> 8100000000000000000000 -fmax2122 fma 9 9000000000000000000000 0E+999999 -> 81000000000000000000000 -fmax2123 fma 9 90000000000000000000000 0E+999999 -> 810000000000000000000000 --- test some more edge cases without carries -fmax2131 fma 3 3 0E+999999 -> 9 -fmax2132 fma 3 30 0E+999999 -> 90 -fmax2133 fma 3 300 0E+999999 -> 900 -fmax2134 fma 3 3000 0E+999999 -> 9000 -fmax2135 fma 3 30000 0E+999999 -> 90000 -fmax2136 fma 3 300000 0E+999999 -> 900000 -fmax2137 fma 3 3000000 0E+999999 -> 9000000 -fmax2138 fma 3 30000000 0E+999999 -> 90000000 -fmax2139 fma 3 300000000 0E+999999 -> 900000000 -fmax2140 fma 3 3000000000 0E+999999 -> 9000000000 -fmax2141 fma 3 30000000000 0E+999999 -> 90000000000 -fmax2142 fma 3 300000000000 0E+999999 -> 900000000000 -fmax2143 fma 3 3000000000000 0E+999999 -> 9000000000000 -fmax2144 fma 3 30000000000000 0E+999999 -> 90000000000000 -fmax2145 fma 3 300000000000000 0E+999999 -> 900000000000000 -fmax2146 fma 3 3000000000000000 0E+999999 -> 9000000000000000 -fmax2147 fma 3 30000000000000000 0E+999999 -> 90000000000000000 -fmax2148 fma 3 300000000000000000 0E+999999 -> 900000000000000000 -fmax2149 fma 3 3000000000000000000 0E+999999 -> 9000000000000000000 -fmax2150 fma 3 30000000000000000000 0E+999999 -> 90000000000000000000 -fmax2151 fma 3 300000000000000000000 0E+999999 -> 900000000000000000000 -fmax2152 fma 3 3000000000000000000000 0E+999999 -> 9000000000000000000000 -fmax2153 fma 3 30000000000000000000000 0E+999999 -> 90000000000000000000000 - -maxexponent: 999999 -minexponent: -999999 -precision: 9 --- test some cases that are close to exponent overflow/underflow -fmax2170 fma 1 9e999999 0E+999999 -> 9E+999999 -fmax2171 fma 1 9.9e999999 0E+999999 -> 9.9E+999999 -fmax2172 fma 1 9.99e999999 0E+999999 -> 9.99E+999999 -fmax2173 fma 9e999999 1 0E+999999 -> 9E+999999 -fmax2174 fma 9.9e999999 1 0E+999999 -> 9.9E+999999 -fmax2176 fma 9.99e999999 1 0E+999999 -> 9.99E+999999 -fmax2177 fma 1 9.99999e999999 0E+999999 -> 9.99999E+999999 -fmax2178 fma 9.99999e999999 1 0E+999999 -> 9.99999E+999999 - -fmax2180 fma 0.1 9e-999998 0E+999999 -> 9E-999999 -fmax2181 fma 0.1 99e-999998 0E+999999 -> 9.9E-999998 -fmax2182 fma 0.1 999e-999998 0E+999999 -> 9.99E-999997 - -fmax2183 fma 0.1 9e-999998 0E+999999 -> 9E-999999 -fmax2184 fma 0.1 99e-999998 0E+999999 -> 9.9E-999998 -fmax2185 fma 0.1 999e-999998 0E+999999 -> 9.99E-999997 -fmax2186 fma 0.1 999e-999997 0E+999999 -> 9.99E-999996 -fmax2187 fma 0.1 9999e-999997 0E+999999 -> 9.999E-999995 -fmax2188 fma 0.1 99999e-999997 0E+999999 -> 9.9999E-999994 - -fmax2190 fma 1 9e-999998 0E+999999 -> 9E-999998 -fmax2191 fma 1 99e-999998 0E+999999 -> 9.9E-999997 -fmax2192 fma 1 999e-999998 0E+999999 -> 9.99E-999996 -fmax2193 fma 9e-999998 1 0E+999999 -> 9E-999998 -fmax2194 fma 99e-999998 1 0E+999999 -> 9.9E-999997 -fmax2195 fma 999e-999998 1 0E+999999 -> 9.99E-999996 - --- long operand triangle -precision: 33 -fmax2246 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916511992830 Inexact Rounded -precision: 32 -fmax2247 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651199283 Inexact Rounded -precision: 31 -fmax2248 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165119928 Inexact Rounded -precision: 30 -fmax2249 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916511993 Inexact Rounded -precision: 29 -fmax2250 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651199 Inexact Rounded -precision: 28 -fmax2251 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165120 Inexact Rounded -precision: 27 -fmax2252 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916512 Inexact Rounded -precision: 26 -fmax2253 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651 Inexact Rounded -precision: 25 -fmax2254 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165 Inexact Rounded -precision: 24 -fmax2255 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671917 Inexact Rounded -precision: 23 -fmax2256 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967192 Inexact Rounded -precision: 22 -fmax2257 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719 Inexact Rounded -precision: 21 -fmax2258 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369672 Inexact Rounded -precision: 20 -fmax2259 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967 Inexact Rounded -precision: 19 -fmax2260 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933697 Inexact Rounded -precision: 18 -fmax2261 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193370 Inexact Rounded -precision: 17 -fmax2262 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119337 Inexact Rounded -precision: 16 -fmax2263 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011934 Inexact Rounded -precision: 15 -fmax2264 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193 Inexact Rounded -precision: 14 -fmax2265 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119 Inexact Rounded -precision: 13 -fmax2266 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908012 Inexact Rounded -precision: 12 -fmax2267 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801 Inexact Rounded -precision: 11 -fmax2268 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080 Inexact Rounded -precision: 10 -fmax2269 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908 Inexact Rounded -precision: 9 -fmax2270 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.291 Inexact Rounded -precision: 8 -fmax2271 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29 Inexact Rounded -precision: 7 -fmax2272 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.3 Inexact Rounded -precision: 6 -fmax2273 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433 Inexact Rounded -precision: 5 -fmax2274 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.4543E+5 Inexact Rounded -precision: 4 -fmax2275 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.454E+5 Inexact Rounded -precision: 3 -fmax2276 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.45E+5 Inexact Rounded -precision: 2 -fmax2277 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.5E+5 Inexact Rounded -precision: 1 -fmax2278 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1E+5 Inexact Rounded - --- test some edge cases with exact rounding -maxexponent: 9999 -minexponent: -9999 -precision: 9 -fmax2301 fma 9 9 0E+999999 -> 81 -fmax2302 fma 9 90 0E+999999 -> 810 -fmax2303 fma 9 900 0E+999999 -> 8100 -fmax2304 fma 9 9000 0E+999999 -> 81000 -fmax2305 fma 9 90000 0E+999999 -> 810000 -fmax2306 fma 9 900000 0E+999999 -> 8100000 -fmax2307 fma 9 9000000 0E+999999 -> 81000000 -fmax2308 fma 9 90000000 0E+999999 -> 810000000 -fmax2309 fma 9 900000000 0E+999999 -> 8.10000000E+9 Rounded -fmax2310 fma 9 9000000000 0E+999999 -> 8.10000000E+10 Rounded -fmax2311 fma 9 90000000000 0E+999999 -> 8.10000000E+11 Rounded -fmax2312 fma 9 900000000000 0E+999999 -> 8.10000000E+12 Rounded -fmax2313 fma 9 9000000000000 0E+999999 -> 8.10000000E+13 Rounded -fmax2314 fma 9 90000000000000 0E+999999 -> 8.10000000E+14 Rounded -fmax2315 fma 9 900000000000000 0E+999999 -> 8.10000000E+15 Rounded -fmax2316 fma 9 9000000000000000 0E+999999 -> 8.10000000E+16 Rounded -fmax2317 fma 9 90000000000000000 0E+999999 -> 8.10000000E+17 Rounded -fmax2318 fma 9 900000000000000000 0E+999999 -> 8.10000000E+18 Rounded -fmax2319 fma 9 9000000000000000000 0E+999999 -> 8.10000000E+19 Rounded -fmax2320 fma 9 90000000000000000000 0E+999999 -> 8.10000000E+20 Rounded -fmax2321 fma 9 900000000000000000000 0E+999999 -> 8.10000000E+21 Rounded -fmax2322 fma 9 9000000000000000000000 0E+999999 -> 8.10000000E+22 Rounded -fmax2323 fma 9 90000000000000000000000 0E+999999 -> 8.10000000E+23 Rounded - --- fastpath breakers -precision: 29 -fmax2330 fma 1.491824697641270317824852952837224 1.105170918075647624811707826490246514675628614562883537345747603 0E+999999 -> 1.6487212707001281468486507878 Inexact Rounded -precision: 55 -fmax2331 fma 0.8958341352965282506768545828765117803873717284891040428 0.8958341352965282506768545828765117803873717284891040428 0E+999999 -> 0.8025187979624784829842553829934069955890983696752228299 Inexact Rounded - - --- tryzeros cases -precision: 7 -rounding: half_up -maxExponent: 92 -minexponent: -92 -fmax2504 fma 0E-60 1000E-60 0E+999999 -> 0E-98 Clamped -fmax2505 fma 100E+60 0E+60 0E+999999 -> 0E+92 Clamped - --- mixed with zeros -maxexponent: 999999 -minexponent: -999999 -precision: 9 -fmax2541 fma 0 -1 0E+999999 -> 0 -fmax2542 fma -0 -1 0E+999999 -> 0 -fmax2543 fma 0 1 0E+999999 -> 0 -fmax2544 fma -0 1 0E+999999 -> 0 -fmax2545 fma -1 0 0E+999999 -> 0 -fmax2546 fma -1 -0 0E+999999 -> 0 -fmax2547 fma 1 0 0E+999999 -> 0 -fmax2548 fma 1 -0 0E+999999 -> 0 - -fmax2551 fma 0.0 -1 0E+999999 -> 0.0 -fmax2552 fma -0.0 -1 0E+999999 -> 0.0 -fmax2553 fma 0.0 1 0E+999999 -> 0.0 -fmax2554 fma -0.0 1 0E+999999 -> 0.0 -fmax2555 fma -1.0 0 0E+999999 -> 0.0 -fmax2556 fma -1.0 -0 0E+999999 -> 0.0 -fmax2557 fma 1.0 0 0E+999999 -> 0.0 -fmax2558 fma 1.0 -0 0E+999999 -> 0.0 - -fmax2561 fma 0 -1.0 0E+999999 -> 0.0 -fmax2562 fma -0 -1.0 0E+999999 -> 0.0 -fmax2563 fma 0 1.0 0E+999999 -> 0.0 -fmax2564 fma -0 1.0 0E+999999 -> 0.0 -fmax2565 fma -1 0.0 0E+999999 -> 0.0 -fmax2566 fma -1 -0.0 0E+999999 -> 0.0 -fmax2567 fma 1 0.0 0E+999999 -> 0.0 -fmax2568 fma 1 -0.0 0E+999999 -> 0.0 - -fmax2571 fma 0.0 -1.0 0E+999999 -> 0.00 -fmax2572 fma -0.0 -1.0 0E+999999 -> 0.00 -fmax2573 fma 0.0 1.0 0E+999999 -> 0.00 -fmax2574 fma -0.0 1.0 0E+999999 -> 0.00 -fmax2575 fma -1.0 0.0 0E+999999 -> 0.00 -fmax2576 fma -1.0 -0.0 0E+999999 -> 0.00 -fmax2577 fma 1.0 0.0 0E+999999 -> 0.00 -fmax2578 fma 1.0 -0.0 0E+999999 -> 0.00 - - --- Specials -fmax2580 fma Inf -Inf 0E+999999 -> -Infinity -fmax2581 fma Inf -1000 0E+999999 -> -Infinity -fmax2582 fma Inf -1 0E+999999 -> -Infinity -fmax2583 fma Inf -0 0E+999999 -> NaN Invalid_operation -fmax2584 fma Inf 0 0E+999999 -> NaN Invalid_operation -fmax2585 fma Inf 1 0E+999999 -> Infinity -fmax2586 fma Inf 1000 0E+999999 -> Infinity -fmax2587 fma Inf Inf 0E+999999 -> Infinity -fmax2588 fma -1000 Inf 0E+999999 -> -Infinity -fmax2589 fma -Inf Inf 0E+999999 -> -Infinity -fmax2590 fma -1 Inf 0E+999999 -> -Infinity -fmax2591 fma -0 Inf 0E+999999 -> NaN Invalid_operation -fmax2592 fma 0 Inf 0E+999999 -> NaN Invalid_operation -fmax2593 fma 1 Inf 0E+999999 -> Infinity -fmax2594 fma 1000 Inf 0E+999999 -> Infinity -fmax2595 fma Inf Inf 0E+999999 -> Infinity - -fmax2600 fma -Inf -Inf 0E+999999 -> Infinity -fmax2601 fma -Inf -1000 0E+999999 -> Infinity -fmax2602 fma -Inf -1 0E+999999 -> Infinity -fmax2603 fma -Inf -0 0E+999999 -> NaN Invalid_operation -fmax2604 fma -Inf 0 0E+999999 -> NaN Invalid_operation -fmax2605 fma -Inf 1 0E+999999 -> -Infinity -fmax2606 fma -Inf 1000 0E+999999 -> -Infinity -fmax2607 fma -Inf Inf 0E+999999 -> -Infinity -fmax2608 fma -1000 Inf 0E+999999 -> -Infinity -fmax2609 fma -Inf -Inf 0E+999999 -> Infinity -fmax2610 fma -1 -Inf 0E+999999 -> Infinity -fmax2611 fma -0 -Inf 0E+999999 -> NaN Invalid_operation -fmax2612 fma 0 -Inf 0E+999999 -> NaN Invalid_operation -fmax2613 fma 1 -Inf 0E+999999 -> -Infinity -fmax2614 fma 1000 -Inf 0E+999999 -> -Infinity -fmax2615 fma Inf -Inf 0E+999999 -> -Infinity - -fmax2621 fma NaN -Inf 0E+999999 -> NaN -fmax2622 fma NaN -1000 0E+999999 -> NaN -fmax2623 fma NaN -1 0E+999999 -> NaN -fmax2624 fma NaN -0 0E+999999 -> NaN -fmax2625 fma NaN 0 0E+999999 -> NaN -fmax2626 fma NaN 1 0E+999999 -> NaN -fmax2627 fma NaN 1000 0E+999999 -> NaN -fmax2628 fma NaN Inf 0E+999999 -> NaN -fmax2629 fma NaN NaN 0E+999999 -> NaN -fmax2630 fma -Inf NaN 0E+999999 -> NaN -fmax2631 fma -1000 NaN 0E+999999 -> NaN -fmax2632 fma -1 NaN 0E+999999 -> NaN -fmax2633 fma -0 NaN 0E+999999 -> NaN -fmax2634 fma 0 NaN 0E+999999 -> NaN -fmax2635 fma 1 NaN 0E+999999 -> NaN -fmax2636 fma 1000 NaN 0E+999999 -> NaN -fmax2637 fma Inf NaN 0E+999999 -> NaN - -fmax2641 fma sNaN -Inf 0E+999999 -> NaN Invalid_operation -fmax2642 fma sNaN -1000 0E+999999 -> NaN Invalid_operation -fmax2643 fma sNaN -1 0E+999999 -> NaN Invalid_operation -fmax2644 fma sNaN -0 0E+999999 -> NaN Invalid_operation -fmax2645 fma sNaN 0 0E+999999 -> NaN Invalid_operation -fmax2646 fma sNaN 1 0E+999999 -> NaN Invalid_operation -fmax2647 fma sNaN 1000 0E+999999 -> NaN Invalid_operation -fmax2648 fma sNaN NaN 0E+999999 -> NaN Invalid_operation -fmax2649 fma sNaN sNaN 0E+999999 -> NaN Invalid_operation -fmax2650 fma NaN sNaN 0E+999999 -> NaN Invalid_operation -fmax2651 fma -Inf sNaN 0E+999999 -> NaN Invalid_operation -fmax2652 fma -1000 sNaN 0E+999999 -> NaN Invalid_operation -fmax2653 fma -1 sNaN 0E+999999 -> NaN Invalid_operation -fmax2654 fma -0 sNaN 0E+999999 -> NaN Invalid_operation -fmax2655 fma 0 sNaN 0E+999999 -> NaN Invalid_operation -fmax2656 fma 1 sNaN 0E+999999 -> NaN Invalid_operation -fmax2657 fma 1000 sNaN 0E+999999 -> NaN Invalid_operation -fmax2658 fma Inf sNaN 0E+999999 -> NaN Invalid_operation -fmax2659 fma NaN sNaN 0E+999999 -> NaN Invalid_operation - --- propagating NaNs -fmax2661 fma NaN9 -Inf 0E+999999 -> NaN9 -fmax2662 fma NaN8 999 0E+999999 -> NaN8 -fmax2663 fma NaN71 Inf 0E+999999 -> NaN71 -fmax2664 fma NaN6 NaN5 0E+999999 -> NaN6 -fmax2665 fma -Inf NaN4 0E+999999 -> NaN4 -fmax2666 fma -999 NaN33 0E+999999 -> NaN33 -fmax2667 fma Inf NaN2 0E+999999 -> NaN2 - -fmax2671 fma sNaN99 -Inf 0E+999999 -> NaN99 Invalid_operation -fmax2672 fma sNaN98 -11 0E+999999 -> NaN98 Invalid_operation -fmax2673 fma sNaN97 NaN 0E+999999 -> NaN97 Invalid_operation -fmax2674 fma sNaN16 sNaN94 0E+999999 -> NaN16 Invalid_operation -fmax2675 fma NaN95 sNaN93 0E+999999 -> NaN93 Invalid_operation -fmax2676 fma -Inf sNaN92 0E+999999 -> NaN92 Invalid_operation -fmax2677 fma 088 sNaN91 0E+999999 -> NaN91 Invalid_operation -fmax2678 fma Inf sNaN90 0E+999999 -> NaN90 Invalid_operation -fmax2679 fma NaN sNaN89 0E+999999 -> NaN89 Invalid_operation - -fmax2681 fma -NaN9 -Inf 0E+999999 -> -NaN9 -fmax2682 fma -NaN8 999 0E+999999 -> -NaN8 -fmax2683 fma -NaN71 Inf 0E+999999 -> -NaN71 -fmax2684 fma -NaN6 -NaN5 0E+999999 -> -NaN6 -fmax2685 fma -Inf -NaN4 0E+999999 -> -NaN4 -fmax2686 fma -999 -NaN33 0E+999999 -> -NaN33 -fmax2687 fma Inf -NaN2 0E+999999 -> -NaN2 - -fmax2691 fma -sNaN99 -Inf 0E+999999 -> -NaN99 Invalid_operation -fmax2692 fma -sNaN98 -11 0E+999999 -> -NaN98 Invalid_operation -fmax2693 fma -sNaN97 NaN 0E+999999 -> -NaN97 Invalid_operation -fmax2694 fma -sNaN16 -sNaN94 0E+999999 -> -NaN16 Invalid_operation -fmax2695 fma -NaN95 -sNaN93 0E+999999 -> -NaN93 Invalid_operation -fmax2696 fma -Inf -sNaN92 0E+999999 -> -NaN92 Invalid_operation -fmax2697 fma 088 -sNaN91 0E+999999 -> -NaN91 Invalid_operation -fmax2698 fma Inf -sNaN90 0E+999999 -> -NaN90 Invalid_operation -fmax2699 fma -NaN -sNaN89 0E+999999 -> -NaN89 Invalid_operation - -fmax2701 fma -NaN -Inf 0E+999999 -> -NaN -fmax2702 fma -NaN 999 0E+999999 -> -NaN -fmax2703 fma -NaN Inf 0E+999999 -> -NaN -fmax2704 fma -NaN -NaN 0E+999999 -> -NaN -fmax2705 fma -Inf -NaN0 0E+999999 -> -NaN -fmax2706 fma -999 -NaN 0E+999999 -> -NaN -fmax2707 fma Inf -NaN 0E+999999 -> -NaN - -fmax2711 fma -sNaN -Inf 0E+999999 -> -NaN Invalid_operation -fmax2712 fma -sNaN -11 0E+999999 -> -NaN Invalid_operation -fmax2713 fma -sNaN00 NaN 0E+999999 -> -NaN Invalid_operation -fmax2714 fma -sNaN -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2715 fma -NaN -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2716 fma -Inf -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2717 fma 088 -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2718 fma Inf -sNaN 0E+999999 -> -NaN Invalid_operation -fmax2719 fma -NaN -sNaN 0E+999999 -> -NaN Invalid_operation - --- overflow and underflow tests .. note subnormal results -maxexponent: 999999 -minexponent: -999999 -fmax2730 fma +1.23456789012345E-0 9E+999999 0E+999999 -> Infinity Inexact Overflow Rounded -fmax2731 fma 9E+999999 +1.23456789012345E-0 0E+999999 -> Infinity Inexact Overflow Rounded -fmax2732 fma +0.100 9E-999999 0E+999999 -> 9.00E-1000000 Subnormal -fmax2733 fma 9E-999999 +0.100 0E+999999 -> 9.00E-1000000 Subnormal -fmax2735 fma -1.23456789012345E-0 9E+999999 0E+999999 -> -Infinity Inexact Overflow Rounded -fmax2736 fma 9E+999999 -1.23456789012345E-0 0E+999999 -> -Infinity Inexact Overflow Rounded -fmax2737 fma -0.100 9E-999999 0E+999999 -> -9.00E-1000000 Subnormal -fmax2738 fma 9E-999999 -0.100 0E+999999 -> -9.00E-1000000 Subnormal - --- signs -fmax2751 fma 1e+777777 1e+411111 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2752 fma 1e+777777 -1e+411111 0E+999999 -> -Infinity Overflow Inexact Rounded -fmax2753 fma -1e+777777 1e+411111 0E+999999 -> -Infinity Overflow Inexact Rounded -fmax2754 fma -1e+777777 -1e+411111 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2755 fma 1e-777777 1e-411111 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2756 fma 1e-777777 -1e-411111 0E+999999 -> -0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2757 fma -1e-777777 1e-411111 0E+999999 -> -0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2758 fma -1e-777777 -1e-411111 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped - --- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) -precision: 9 -fmax2760 fma 1e-600000 1e-400001 0E+999999 -> 1E-1000001 Subnormal -fmax2761 fma 1e-600000 1e-400002 0E+999999 -> 1E-1000002 Subnormal -fmax2762 fma 1e-600000 1e-400003 0E+999999 -> 1E-1000003 Subnormal -fmax2763 fma 1e-600000 1e-400004 0E+999999 -> 1E-1000004 Subnormal -fmax2764 fma 1e-600000 1e-400005 0E+999999 -> 1E-1000005 Subnormal -fmax2765 fma 1e-600000 1e-400006 0E+999999 -> 1E-1000006 Subnormal -fmax2766 fma 1e-600000 1e-400007 0E+999999 -> 1E-1000007 Subnormal -fmax2767 fma 1e-600000 1e-400008 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2768 fma 1e-600000 1e-400009 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped -fmax2769 fma 1e-600000 1e-400010 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped --- [no equivalent of 'subnormal' for overflow] -fmax2770 fma 1e+600000 1e+400001 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2771 fma 1e+600000 1e+400002 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2772 fma 1e+600000 1e+400003 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2773 fma 1e+600000 1e+400004 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2774 fma 1e+600000 1e+400005 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2775 fma 1e+600000 1e+400006 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2776 fma 1e+600000 1e+400007 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2777 fma 1e+600000 1e+400008 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2778 fma 1e+600000 1e+400009 0E+999999 -> Infinity Overflow Inexact Rounded -fmax2779 fma 1e+600000 1e+400010 0E+999999 -> Infinity Overflow Inexact Rounded - --- 'subnormal' test edge condition at higher precisions -precision: 99 -fmax2780 fma 1e-600000 1e-400007 0E+999999 -> 1E-1000007 Subnormal -fmax2781 fma 1e-600000 1e-400008 0E+999999 -> 1E-1000008 Subnormal -fmax2782 fma 1e-600000 1e-400097 0E+999999 -> 1E-1000097 Subnormal -fmax2783 fma 1e-600000 1e-400098 0E+999999 -> 0E-1000097 Underflow Subnormal Inexact Rounded Clamped -precision: 999 -fmax2784 fma 1e-600000 1e-400997 0E+999999 -> 1E-1000997 Subnormal -fmax2785 fma 1e-600000 1e-400998 0E+999999 -> 0E-1000997 Underflow Subnormal Inexact Rounded Clamped - --- test subnormals rounding -precision: 5 -maxExponent: 999 -minexponent: -999 -rounding: half_even - -fmax2801 fma 1.0000E-999 1 0E+999999 -> 1.0000E-999 -fmax2802 fma 1.000E-999 1e-1 0E+999999 -> 1.000E-1000 Subnormal -fmax2803 fma 1.00E-999 1e-2 0E+999999 -> 1.00E-1001 Subnormal -fmax2804 fma 1.0E-999 1e-3 0E+999999 -> 1.0E-1002 Subnormal -fmax2805 fma 1.0E-999 1e-4 0E+999999 -> 1E-1003 Subnormal Rounded -fmax2806 fma 1.3E-999 1e-4 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded -fmax2807 fma 1.5E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2808 fma 1.7E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2809 fma 2.3E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2810 fma 2.5E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2811 fma 2.7E-999 1e-4 0E+999999 -> 3E-1003 Underflow Subnormal Inexact Rounded -fmax2812 fma 1.49E-999 1e-4 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded -fmax2813 fma 1.50E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2814 fma 1.51E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2815 fma 2.49E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2816 fma 2.50E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded -fmax2817 fma 2.51E-999 1e-4 0E+999999 -> 3E-1003 Underflow Subnormal Inexact Rounded - -fmax2818 fma 1E-999 1e-4 0E+999999 -> 1E-1003 Subnormal -fmax2819 fma 3E-999 1e-5 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2820 fma 5E-999 1e-5 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2821 fma 7E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded -fmax2822 fma 9E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded -fmax2823 fma 9.9E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded - -fmax2824 fma 1E-999 -1e-4 0E+999999 -> -1E-1003 Subnormal -fmax2825 fma 3E-999 -1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2826 fma -5E-999 1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2827 fma 7E-999 -1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded -fmax2828 fma -9E-999 1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded -fmax2829 fma 9.9E-999 -1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded -fmax2830 fma 3.0E-999 -1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped - -fmax2831 fma 1.0E-501 1e-501 0E+999999 -> 1.0E-1002 Subnormal -fmax2832 fma 2.0E-501 2e-501 0E+999999 -> 4.0E-1002 Subnormal -fmax2833 fma 4.0E-501 4e-501 0E+999999 -> 1.60E-1001 Subnormal -fmax2834 fma 10.0E-501 10e-501 0E+999999 -> 1.000E-1000 Subnormal -fmax2835 fma 30.0E-501 30e-501 0E+999999 -> 9.000E-1000 Subnormal -fmax2836 fma 40.0E-501 40e-501 0E+999999 -> 1.6000E-999 - --- squares -fmax2840 fma 1E-502 1e-502 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2841 fma 1E-501 1e-501 0E+999999 -> 1E-1002 Subnormal -fmax2842 fma 2E-501 2e-501 0E+999999 -> 4E-1002 Subnormal -fmax2843 fma 4E-501 4e-501 0E+999999 -> 1.6E-1001 Subnormal -fmax2844 fma 10E-501 10e-501 0E+999999 -> 1.00E-1000 Subnormal -fmax2845 fma 30E-501 30e-501 0E+999999 -> 9.00E-1000 Subnormal -fmax2846 fma 40E-501 40e-501 0E+999999 -> 1.600E-999 - --- cubes -fmax2850 fma 1E-670 1e-335 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped -fmax2851 fma 1E-668 1e-334 0E+999999 -> 1E-1002 Subnormal -fmax2852 fma 4E-668 2e-334 0E+999999 -> 8E-1002 Subnormal -fmax2853 fma 9E-668 3e-334 0E+999999 -> 2.7E-1001 Subnormal -fmax2854 fma 16E-668 4e-334 0E+999999 -> 6.4E-1001 Subnormal -fmax2855 fma 25E-668 5e-334 0E+999999 -> 1.25E-1000 Subnormal -fmax2856 fma 10E-668 100e-334 0E+999999 -> 1.000E-999 - --- test derived from result of 0.099 ** 999 at 15 digits with unlimited exponent -precision: 19 -fmax2860 fma 6636851557994578716E-520 6636851557994578716E-520 0E+999999 -> 4.40477986028551E-1003 Underflow Subnormal Inexact Rounded - --- Long operand overflow may be a different path -precision: 3 -maxExponent: 999999 -minexponent: -999999 -fmax2870 fma 1 9.999E+999999 0E+999999 -> Infinity Inexact Overflow Rounded -fmax2871 fma 1 -9.999E+999999 0E+999999 -> -Infinity Inexact Overflow Rounded -fmax2872 fma 9.999E+999999 1 0E+999999 -> Infinity Inexact Overflow Rounded -fmax2873 fma -9.999E+999999 1 0E+999999 -> -Infinity Inexact Overflow Rounded - --- check for double-rounded subnormals -precision: 5 -maxexponent: 79 -minexponent: -79 -fmax2881 fma 1.2347E-40 1.2347E-40 0E+999999 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax2882 fma 1.234E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow -fmax2883 fma 1.23E-40 1.23E-40 0E+999999 -> 1.513E-80 Inexact Rounded Subnormal Underflow -fmax2884 fma 1.2E-40 1.2E-40 0E+999999 -> 1.44E-80 Subnormal -fmax2885 fma 1.2E-40 1.2E-41 0E+999999 -> 1.44E-81 Subnormal -fmax2886 fma 1.2E-40 1.2E-42 0E+999999 -> 1.4E-82 Subnormal Inexact Rounded Underflow -fmax2887 fma 1.2E-40 1.3E-42 0E+999999 -> 1.6E-82 Subnormal Inexact Rounded Underflow -fmax2888 fma 1.3E-40 1.3E-42 0E+999999 -> 1.7E-82 Subnormal Inexact Rounded Underflow -fmax2889 fma 1.3E-40 1.3E-43 0E+999999 -> 2E-83 Subnormal Inexact Rounded Underflow -fmax2890 fma 1.3E-41 1.3E-43 0E+999999 -> 0E-83 Clamped Subnormal Inexact Rounded Underflow - -fmax2891 fma 1.2345E-39 1.234E-40 0E+999999 -> 1.5234E-79 Inexact Rounded -fmax2892 fma 1.23456E-39 1.234E-40 0E+999999 -> 1.5234E-79 Inexact Rounded -fmax2893 fma 1.2345E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow -fmax2894 fma 1.23456E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow -fmax2895 fma 1.2345E-41 1.234E-40 0E+999999 -> 1.52E-81 Inexact Rounded Subnormal Underflow -fmax2896 fma 1.23456E-41 1.234E-40 0E+999999 -> 1.52E-81 Inexact Rounded Subnormal Underflow - --- Now explore the case where we get a normal result with Underflow -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - -fmax2900 fma 0.3000000000E-191 0.3000000000E-191 0E+999999 -> 9.00000000000000E-384 Subnormal Rounded -fmax2901 fma 0.3000000001E-191 0.3000000001E-191 0E+999999 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded -fmax2902 fma 9.999999999999999E-383 0.0999999999999 0E+999999 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded -fmax2903 fma 9.999999999999999E-383 0.09999999999999 0E+999999 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded -fmax2904 fma 9.999999999999999E-383 0.099999999999999 0E+999999 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded -fmax2905 fma 9.999999999999999E-383 0.0999999999999999 0E+999999 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded --- prove operands are exact -fmax2906 fma 9.999999999999999E-383 1 0E+999999 -> 9.999999999999999E-383 -fmax2907 fma 1 0.09999999999999999 0E+999999 -> 0.09999999999999999 --- the next rounds to Nmin -fmax2908 fma 9.999999999999999E-383 0.09999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax2909 fma 9.999999999999999E-383 0.099999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax2910 fma 9.999999999999999E-383 0.0999999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax2911 fma 9.999999999999999E-383 0.09999999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded - --- Examples from SQL proposal (Krishna Kulkarni) -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 -fmax2921 fma 130E-2 120E-2 0E+999999 -> 1.5600 -fmax2922 fma 130E-2 12E-1 0E+999999 -> 1.560 -fmax2923 fma 130E-2 1E0 0E+999999 -> 1.30 - --- Null tests -fmax2990 fma # 10 0E+999999 -> NaN Invalid_operation -fmax2991 fma 10 # 0E+999999 -> NaN Invalid_operation - --- ADDITION TESTS ------------------------------------------------------ -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- [first group are 'quick confidence check'] -fmax3001 fma 1 1 1 -> 2 -fmax3002 fma 1 2 3 -> 5 -fmax3003 fma 1 '5.75' '3.3' -> 9.05 -fmax3004 fma 1 '5' '-3' -> 2 -fmax3005 fma 1 '-5' '-3' -> -8 -fmax3006 fma 1 '-7' '2.5' -> -4.5 -fmax3007 fma 1 '0.7' '0.3' -> 1.0 -fmax3008 fma 1 '1.25' '1.25' -> 2.50 -fmax3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' -fmax3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' - -fmax3011 fma 1 '0.4444444444' '0.5555555555' -> '1.00000000' Inexact Rounded -fmax3012 fma 1 '0.4444444440' '0.5555555555' -> '1.00000000' Inexact Rounded -fmax3013 fma 1 '0.4444444444' '0.5555555550' -> '0.999999999' Inexact Rounded -fmax3014 fma 1 '0.44444444449' '0' -> '0.444444444' Inexact Rounded -fmax3015 fma 1 '0.444444444499' '0' -> '0.444444444' Inexact Rounded -fmax3016 fma 1 '0.4444444444999' '0' -> '0.444444444' Inexact Rounded -fmax3017 fma 1 '0.4444444445000' '0' -> '0.444444445' Inexact Rounded -fmax3018 fma 1 '0.4444444445001' '0' -> '0.444444445' Inexact Rounded -fmax3019 fma 1 '0.444444444501' '0' -> '0.444444445' Inexact Rounded -fmax3020 fma 1 '0.44444444451' '0' -> '0.444444445' Inexact Rounded - -fmax3021 fma 1 0 1 -> 1 -fmax3022 fma 1 1 1 -> 2 -fmax3023 fma 1 2 1 -> 3 -fmax3024 fma 1 3 1 -> 4 -fmax3025 fma 1 4 1 -> 5 -fmax3026 fma 1 5 1 -> 6 -fmax3027 fma 1 6 1 -> 7 -fmax3028 fma 1 7 1 -> 8 -fmax3029 fma 1 8 1 -> 9 -fmax3030 fma 1 9 1 -> 10 - --- some carrying effects -fmax3031 fma 1 '0.9998' '0.0000' -> '0.9998' -fmax3032 fma 1 '0.9998' '0.0001' -> '0.9999' -fmax3033 fma 1 '0.9998' '0.0002' -> '1.0000' -fmax3034 fma 1 '0.9998' '0.0003' -> '1.0001' - -fmax3035 fma 1 '70' '10000e+9' -> '1.00000000E+13' Inexact Rounded -fmax3036 fma 1 '700' '10000e+9' -> '1.00000000E+13' Inexact Rounded -fmax3037 fma 1 '7000' '10000e+9' -> '1.00000000E+13' Inexact Rounded -fmax3038 fma 1 '70000' '10000e+9' -> '1.00000001E+13' Inexact Rounded -fmax3039 fma 1 '700000' '10000e+9' -> '1.00000007E+13' Rounded - --- symmetry: -fmax3040 fma 1 '10000e+9' '70' -> '1.00000000E+13' Inexact Rounded -fmax3041 fma 1 '10000e+9' '700' -> '1.00000000E+13' Inexact Rounded -fmax3042 fma 1 '10000e+9' '7000' -> '1.00000000E+13' Inexact Rounded -fmax3044 fma 1 '10000e+9' '70000' -> '1.00000001E+13' Inexact Rounded -fmax3045 fma 1 '10000e+9' '700000' -> '1.00000007E+13' Rounded - --- same, higher precision -precision: 15 -fmax3046 fma 1 '10000e+9' '7' -> '10000000000007' -fmax3047 fma 1 '10000e+9' '70' -> '10000000000070' -fmax3048 fma 1 '10000e+9' '700' -> '10000000000700' -fmax3049 fma 1 '10000e+9' '7000' -> '10000000007000' -fmax3050 fma 1 '10000e+9' '70000' -> '10000000070000' -fmax3051 fma 1 '10000e+9' '700000' -> '10000000700000' -fmax3052 fma 1 '10000e+9' '7000000' -> '10000007000000' - --- examples from decarith -fmax3053 fma 1 '12' '7.00' -> '19.00' -fmax3054 fma 1 '1.3' '-1.07' -> '0.23' -fmax3055 fma 1 '1.3' '-1.30' -> '0.00' -fmax3056 fma 1 '1.3' '-2.07' -> '-0.77' -fmax3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' - --- zero preservation -precision: 6 -fmax3060 fma 1 '10000e+9' '70000' -> '1.00000E+13' Inexact Rounded -fmax3061 fma 1 1 '0.0001' -> '1.0001' -fmax3062 fma 1 1 '0.00001' -> '1.00001' -fmax3063 fma 1 1 '0.000001' -> '1.00000' Inexact Rounded -fmax3064 fma 1 1 '0.0000001' -> '1.00000' Inexact Rounded -fmax3065 fma 1 1 '0.00000001' -> '1.00000' Inexact Rounded - --- some funny zeros [in case of bad signum] -fmax3070 fma 1 1 0 -> 1 -fmax3071 fma 1 1 0. -> 1 -fmax3072 fma 1 1 .0 -> 1.0 -fmax3073 fma 1 1 0.0 -> 1.0 -fmax3074 fma 1 1 0.00 -> 1.00 -fmax3075 fma 1 0 1 -> 1 -fmax3076 fma 1 0. 1 -> 1 -fmax3077 fma 1 .0 1 -> 1.0 -fmax3078 fma 1 0.0 1 -> 1.0 -fmax3079 fma 1 0.00 1 -> 1.00 - -precision: 9 - --- some carries -fmax3080 fma 1 999999998 1 -> 999999999 -fmax3081 fma 1 999999999 1 -> 1.00000000E+9 Rounded -fmax3082 fma 1 99999999 1 -> 100000000 -fmax3083 fma 1 9999999 1 -> 10000000 -fmax3084 fma 1 999999 1 -> 1000000 -fmax3085 fma 1 99999 1 -> 100000 -fmax3086 fma 1 9999 1 -> 10000 -fmax3087 fma 1 999 1 -> 1000 -fmax3088 fma 1 99 1 -> 100 -fmax3089 fma 1 9 1 -> 10 - - --- more LHS swaps -fmax3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' -fmax3091 fma 1 '-56267E-6' 0 -> '-0.056267' -fmax3092 fma 1 '-56267E-5' 0 -> '-0.56267' -fmax3093 fma 1 '-56267E-4' 0 -> '-5.6267' -fmax3094 fma 1 '-56267E-3' 0 -> '-56.267' -fmax3095 fma 1 '-56267E-2' 0 -> '-562.67' -fmax3096 fma 1 '-56267E-1' 0 -> '-5626.7' -fmax3097 fma 1 '-56267E-0' 0 -> '-56267' -fmax3098 fma 1 '-5E-10' 0 -> '-5E-10' -fmax3099 fma 1 '-5E-7' 0 -> '-5E-7' -fmax3100 fma 1 '-5E-6' 0 -> '-0.000005' -fmax3101 fma 1 '-5E-5' 0 -> '-0.00005' -fmax3102 fma 1 '-5E-4' 0 -> '-0.0005' -fmax3103 fma 1 '-5E-1' 0 -> '-0.5' -fmax3104 fma 1 '-5E0' 0 -> '-5' -fmax3105 fma 1 '-5E1' 0 -> '-50' -fmax3106 fma 1 '-5E5' 0 -> '-500000' -fmax3107 fma 1 '-5E8' 0 -> '-500000000' -fmax3108 fma 1 '-5E9' 0 -> '-5.00000000E+9' Rounded -fmax3109 fma 1 '-5E10' 0 -> '-5.00000000E+10' Rounded -fmax3110 fma 1 '-5E11' 0 -> '-5.00000000E+11' Rounded -fmax3111 fma 1 '-5E100' 0 -> '-5.00000000E+100' Rounded - --- more RHS swaps -fmax3113 fma 1 0 '-56267E-10' -> '-0.0000056267' -fmax3114 fma 1 0 '-56267E-6' -> '-0.056267' -fmax3116 fma 1 0 '-56267E-5' -> '-0.56267' -fmax3117 fma 1 0 '-56267E-4' -> '-5.6267' -fmax3119 fma 1 0 '-56267E-3' -> '-56.267' -fmax3120 fma 1 0 '-56267E-2' -> '-562.67' -fmax3121 fma 1 0 '-56267E-1' -> '-5626.7' -fmax3122 fma 1 0 '-56267E-0' -> '-56267' -fmax3123 fma 1 0 '-5E-10' -> '-5E-10' -fmax3124 fma 1 0 '-5E-7' -> '-5E-7' -fmax3125 fma 1 0 '-5E-6' -> '-0.000005' -fmax3126 fma 1 0 '-5E-5' -> '-0.00005' -fmax3127 fma 1 0 '-5E-4' -> '-0.0005' -fmax3128 fma 1 0 '-5E-1' -> '-0.5' -fmax3129 fma 1 0 '-5E0' -> '-5' -fmax3130 fma 1 0 '-5E1' -> '-50' -fmax3131 fma 1 0 '-5E5' -> '-500000' -fmax3132 fma 1 0 '-5E8' -> '-500000000' -fmax3133 fma 1 0 '-5E9' -> '-5.00000000E+9' Rounded -fmax3134 fma 1 0 '-5E10' -> '-5.00000000E+10' Rounded -fmax3135 fma 1 0 '-5E11' -> '-5.00000000E+11' Rounded -fmax3136 fma 1 0 '-5E100' -> '-5.00000000E+100' Rounded - --- related -fmax3137 fma 1 1 '0E-12' -> '1.00000000' Rounded -fmax3138 fma 1 -1 '0E-12' -> '-1.00000000' Rounded -fmax3139 fma 1 '0E-12' 1 -> '1.00000000' Rounded -fmax3140 fma 1 '0E-12' -1 -> '-1.00000000' Rounded -fmax3141 fma 1 1E+4 0.0000 -> '10000.0000' -fmax3142 fma 1 1E+4 0.00000 -> '10000.0000' Rounded -fmax3143 fma 1 0.000 1E+5 -> '100000.000' -fmax3144 fma 1 0.0000 1E+5 -> '100000.000' Rounded - --- [some of the next group are really constructor tests] -fmax3146 fma 1 '00.0' 0 -> '0.0' -fmax3147 fma 1 '0.00' 0 -> '0.00' -fmax3148 fma 1 0 '0.00' -> '0.00' -fmax3149 fma 1 0 '00.0' -> '0.0' -fmax3150 fma 1 '00.0' '0.00' -> '0.00' -fmax3151 fma 1 '0.00' '00.0' -> '0.00' -fmax3152 fma 1 '3' '.3' -> '3.3' -fmax3153 fma 1 '3.' '.3' -> '3.3' -fmax3154 fma 1 '3.0' '.3' -> '3.3' -fmax3155 fma 1 '3.00' '.3' -> '3.30' -fmax3156 fma 1 '3' '3' -> '6' -fmax3157 fma 1 '3' '+3' -> '6' -fmax3158 fma 1 '3' '-3' -> '0' -fmax3159 fma 1 '0.3' '-0.3' -> '0.0' -fmax3160 fma 1 '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -precision: 15 -fmax3161 fma 1 '1E+12' '-1' -> '999999999999' -fmax3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' -fmax3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' -fmax3164 fma 1 '-1' '1E+12' -> '999999999999' -fmax3165 fma 1 '7E+12' '-1' -> '6999999999999' -fmax3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' -fmax3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' -fmax3168 fma 1 '-1' '7E+12' -> '6999999999999' - --- 123456789012345 123456789012345 1 23456789012345 -fmax3170 fma 1 '0.444444444444444' '0.555555555555563' -> '1.00000000000001' Inexact Rounded -fmax3171 fma 1 '0.444444444444444' '0.555555555555562' -> '1.00000000000001' Inexact Rounded -fmax3172 fma 1 '0.444444444444444' '0.555555555555561' -> '1.00000000000001' Inexact Rounded -fmax3173 fma 1 '0.444444444444444' '0.555555555555560' -> '1.00000000000000' Inexact Rounded -fmax3174 fma 1 '0.444444444444444' '0.555555555555559' -> '1.00000000000000' Inexact Rounded -fmax3175 fma 1 '0.444444444444444' '0.555555555555558' -> '1.00000000000000' Inexact Rounded -fmax3176 fma 1 '0.444444444444444' '0.555555555555557' -> '1.00000000000000' Inexact Rounded -fmax3177 fma 1 '0.444444444444444' '0.555555555555556' -> '1.00000000000000' Rounded -fmax3178 fma 1 '0.444444444444444' '0.555555555555555' -> '0.999999999999999' -fmax3179 fma 1 '0.444444444444444' '0.555555555555554' -> '0.999999999999998' -fmax3180 fma 1 '0.444444444444444' '0.555555555555553' -> '0.999999999999997' -fmax3181 fma 1 '0.444444444444444' '0.555555555555552' -> '0.999999999999996' -fmax3182 fma 1 '0.444444444444444' '0.555555555555551' -> '0.999999999999995' -fmax3183 fma 1 '0.444444444444444' '0.555555555555550' -> '0.999999999999994' - --- and some more, including residue effects and different roundings -precision: 9 -rounding: half_up -fmax3200 fma 1 '123456789' 0 -> '123456789' -fmax3201 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded -fmax3202 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded -fmax3203 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded -fmax3204 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded -fmax3205 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded -fmax3206 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded -fmax3207 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded -fmax3208 fma 1 '123456789' 0.5 -> '123456790' Inexact Rounded -fmax3209 fma 1 '123456789' 0.500000001 -> '123456790' Inexact Rounded -fmax3210 fma 1 '123456789' 0.500001 -> '123456790' Inexact Rounded -fmax3211 fma 1 '123456789' 0.51 -> '123456790' Inexact Rounded -fmax3212 fma 1 '123456789' 0.6 -> '123456790' Inexact Rounded -fmax3213 fma 1 '123456789' 0.9 -> '123456790' Inexact Rounded -fmax3214 fma 1 '123456789' 0.99999 -> '123456790' Inexact Rounded -fmax3215 fma 1 '123456789' 0.999999999 -> '123456790' Inexact Rounded -fmax3216 fma 1 '123456789' 1 -> '123456790' -fmax3217 fma 1 '123456789' 1.000000001 -> '123456790' Inexact Rounded -fmax3218 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded -fmax3219 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded - -rounding: half_even -fmax3220 fma 1 '123456789' 0 -> '123456789' -fmax3221 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded -fmax3222 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded -fmax3223 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded -fmax3224 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded -fmax3225 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded -fmax3226 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded -fmax3227 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded -fmax3228 fma 1 '123456789' 0.5 -> '123456790' Inexact Rounded -fmax3229 fma 1 '123456789' 0.500000001 -> '123456790' Inexact Rounded -fmax3230 fma 1 '123456789' 0.500001 -> '123456790' Inexact Rounded -fmax3231 fma 1 '123456789' 0.51 -> '123456790' Inexact Rounded -fmax3232 fma 1 '123456789' 0.6 -> '123456790' Inexact Rounded -fmax3233 fma 1 '123456789' 0.9 -> '123456790' Inexact Rounded -fmax3234 fma 1 '123456789' 0.99999 -> '123456790' Inexact Rounded -fmax3235 fma 1 '123456789' 0.999999999 -> '123456790' Inexact Rounded -fmax3236 fma 1 '123456789' 1 -> '123456790' -fmax3237 fma 1 '123456789' 1.00000001 -> '123456790' Inexact Rounded -fmax3238 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded -fmax3239 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded --- critical few with even bottom digit... -fmax3240 fma 1 '123456788' 0.499999999 -> '123456788' Inexact Rounded -fmax3241 fma 1 '123456788' 0.5 -> '123456788' Inexact Rounded -fmax3242 fma 1 '123456788' 0.500000001 -> '123456789' Inexact Rounded - -rounding: down -fmax3250 fma 1 '123456789' 0 -> '123456789' -fmax3251 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded -fmax3252 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded -fmax3253 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded -fmax3254 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded -fmax3255 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded -fmax3256 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded -fmax3257 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded -fmax3258 fma 1 '123456789' 0.5 -> '123456789' Inexact Rounded -fmax3259 fma 1 '123456789' 0.500000001 -> '123456789' Inexact Rounded -fmax3260 fma 1 '123456789' 0.500001 -> '123456789' Inexact Rounded -fmax3261 fma 1 '123456789' 0.51 -> '123456789' Inexact Rounded -fmax3262 fma 1 '123456789' 0.6 -> '123456789' Inexact Rounded -fmax3263 fma 1 '123456789' 0.9 -> '123456789' Inexact Rounded -fmax3264 fma 1 '123456789' 0.99999 -> '123456789' Inexact Rounded -fmax3265 fma 1 '123456789' 0.999999999 -> '123456789' Inexact Rounded -fmax3266 fma 1 '123456789' 1 -> '123456790' -fmax3267 fma 1 '123456789' 1.00000001 -> '123456790' Inexact Rounded -fmax3268 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded -fmax3269 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded - --- input preparation tests (operands should not be rounded) -precision: 3 -rounding: half_up - -fmax3270 fma 1 '12345678900000' 9999999999999 -> '2.23E+13' Inexact Rounded -fmax3271 fma 1 '9999999999999' 12345678900000 -> '2.23E+13' Inexact Rounded - -fmax3272 fma 1 '12E+3' '3444' -> '1.54E+4' Inexact Rounded -fmax3273 fma 1 '12E+3' '3446' -> '1.54E+4' Inexact Rounded -fmax3274 fma 1 '12E+3' '3449.9' -> '1.54E+4' Inexact Rounded -fmax3275 fma 1 '12E+3' '3450.0' -> '1.55E+4' Inexact Rounded -fmax3276 fma 1 '12E+3' '3450.1' -> '1.55E+4' Inexact Rounded -fmax3277 fma 1 '12E+3' '3454' -> '1.55E+4' Inexact Rounded -fmax3278 fma 1 '12E+3' '3456' -> '1.55E+4' Inexact Rounded - -fmax3281 fma 1 '3444' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3282 fma 1 '3446' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3283 fma 1 '3449.9' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3284 fma 1 '3450.0' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3285 fma 1 '3450.1' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3286 fma 1 '3454' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3287 fma 1 '3456' '12E+3' -> '1.55E+4' Inexact Rounded - -rounding: half_down -fmax3291 fma 1 '3444' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3292 fma 1 '3446' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3293 fma 1 '3449.9' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3294 fma 1 '3450.0' '12E+3' -> '1.54E+4' Inexact Rounded -fmax3295 fma 1 '3450.1' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3296 fma 1 '3454' '12E+3' -> '1.55E+4' Inexact Rounded -fmax3297 fma 1 '3456' '12E+3' -> '1.55E+4' Inexact Rounded - --- 1 in last place tests -rounding: half_up -fmax3301 fma 1 -1 1 -> 0 -fmax3302 fma 1 0 1 -> 1 -fmax3303 fma 1 1 1 -> 2 -fmax3304 fma 1 12 1 -> 13 -fmax3305 fma 1 98 1 -> 99 -fmax3306 fma 1 99 1 -> 100 -fmax3307 fma 1 100 1 -> 101 -fmax3308 fma 1 101 1 -> 102 -fmax3309 fma 1 -1 -1 -> -2 -fmax3310 fma 1 0 -1 -> -1 -fmax3311 fma 1 1 -1 -> 0 -fmax3312 fma 1 12 -1 -> 11 -fmax3313 fma 1 98 -1 -> 97 -fmax3314 fma 1 99 -1 -> 98 -fmax3315 fma 1 100 -1 -> 99 -fmax3316 fma 1 101 -1 -> 100 - -fmax3321 fma 1 -0.01 0.01 -> 0.00 -fmax3322 fma 1 0.00 0.01 -> 0.01 -fmax3323 fma 1 0.01 0.01 -> 0.02 -fmax3324 fma 1 0.12 0.01 -> 0.13 -fmax3325 fma 1 0.98 0.01 -> 0.99 -fmax3326 fma 1 0.99 0.01 -> 1.00 -fmax3327 fma 1 1.00 0.01 -> 1.01 -fmax3328 fma 1 1.01 0.01 -> 1.02 -fmax3329 fma 1 -0.01 -0.01 -> -0.02 -fmax3330 fma 1 0.00 -0.01 -> -0.01 -fmax3331 fma 1 0.01 -0.01 -> 0.00 -fmax3332 fma 1 0.12 -0.01 -> 0.11 -fmax3333 fma 1 0.98 -0.01 -> 0.97 -fmax3334 fma 1 0.99 -0.01 -> 0.98 -fmax3335 fma 1 1.00 -0.01 -> 0.99 -fmax3336 fma 1 1.01 -0.01 -> 1.00 - --- some more cases where fma 1 ing 0 affects the coefficient -precision: 9 -fmax3340 fma 1 1E+3 0 -> 1000 -fmax3341 fma 1 1E+8 0 -> 100000000 -fmax3342 fma 1 1E+9 0 -> 1.00000000E+9 Rounded -fmax3343 fma 1 1E+10 0 -> 1.00000000E+10 Rounded --- which simply follow from these cases ... -fmax3344 fma 1 1E+3 1 -> 1001 -fmax3345 fma 1 1E+8 1 -> 100000001 -fmax3346 fma 1 1E+9 1 -> 1.00000000E+9 Inexact Rounded -fmax3347 fma 1 1E+10 1 -> 1.00000000E+10 Inexact Rounded -fmax3348 fma 1 1E+3 7 -> 1007 -fmax3349 fma 1 1E+8 7 -> 100000007 -fmax3350 fma 1 1E+9 7 -> 1.00000001E+9 Inexact Rounded -fmax3351 fma 1 1E+10 7 -> 1.00000000E+10 Inexact Rounded - --- tryzeros cases -precision: 7 -rounding: half_up -maxExponent: 92 -minexponent: -92 -fmax3361 fma 1 0E+50 10000E+1 -> 1.0000E+5 -fmax3362 fma 1 10000E+1 0E-50 -> 100000.0 Rounded -fmax3363 fma 1 10000E+1 10000E-50 -> 100000.0 Rounded Inexact -fmax3364 fma 1 9.999999E+92 -9.999999E+92 -> 0E+86 - --- a curiosity from JSR 13 testing -rounding: half_down -precision: 10 -fmax3370 fma 1 99999999 81512 -> 100081511 -precision: 6 -fmax3371 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact -rounding: half_up -precision: 10 -fmax3372 fma 1 99999999 81512 -> 100081511 -precision: 6 -fmax3373 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact -rounding: half_even -precision: 10 -fmax3374 fma 1 99999999 81512 -> 100081511 -precision: 6 -fmax3375 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact - --- ulp replacement tests -precision: 9 -maxexponent: 999999 -minexponent: -999999 -fmax3400 fma 1 1 77e-7 -> 1.0000077 -fmax3401 fma 1 1 77e-8 -> 1.00000077 -fmax3402 fma 1 1 77e-9 -> 1.00000008 Inexact Rounded -fmax3403 fma 1 1 77e-10 -> 1.00000001 Inexact Rounded -fmax3404 fma 1 1 77e-11 -> 1.00000000 Inexact Rounded -fmax3405 fma 1 1 77e-12 -> 1.00000000 Inexact Rounded -fmax3406 fma 1 1 77e-999 -> 1.00000000 Inexact Rounded -fmax3407 fma 1 1 77e-999999 -> 1.00000000 Inexact Rounded - -fmax3410 fma 1 10 77e-7 -> 10.0000077 -fmax3411 fma 1 10 77e-8 -> 10.0000008 Inexact Rounded -fmax3412 fma 1 10 77e-9 -> 10.0000001 Inexact Rounded -fmax3413 fma 1 10 77e-10 -> 10.0000000 Inexact Rounded -fmax3414 fma 1 10 77e-11 -> 10.0000000 Inexact Rounded -fmax3415 fma 1 10 77e-12 -> 10.0000000 Inexact Rounded -fmax3416 fma 1 10 77e-999 -> 10.0000000 Inexact Rounded -fmax3417 fma 1 10 77e-999999 -> 10.0000000 Inexact Rounded - -fmax3420 fma 1 77e-7 1 -> 1.0000077 -fmax3421 fma 1 77e-8 1 -> 1.00000077 -fmax3422 fma 1 77e-9 1 -> 1.00000008 Inexact Rounded -fmax3423 fma 1 77e-10 1 -> 1.00000001 Inexact Rounded -fmax3424 fma 1 77e-11 1 -> 1.00000000 Inexact Rounded -fmax3425 fma 1 77e-12 1 -> 1.00000000 Inexact Rounded -fmax3426 fma 1 77e-999 1 -> 1.00000000 Inexact Rounded -fmax3427 fma 1 77e-999999 1 -> 1.00000000 Inexact Rounded - -fmax3430 fma 1 77e-7 10 -> 10.0000077 -fmax3431 fma 1 77e-8 10 -> 10.0000008 Inexact Rounded -fmax3432 fma 1 77e-9 10 -> 10.0000001 Inexact Rounded -fmax3433 fma 1 77e-10 10 -> 10.0000000 Inexact Rounded -fmax3434 fma 1 77e-11 10 -> 10.0000000 Inexact Rounded -fmax3435 fma 1 77e-12 10 -> 10.0000000 Inexact Rounded -fmax3436 fma 1 77e-999 10 -> 10.0000000 Inexact Rounded -fmax3437 fma 1 77e-999999 10 -> 10.0000000 Inexact Rounded - --- negative ulps -fmax3440 fma 1 1 -77e-7 -> 0.9999923 -fmax3441 fma 1 1 -77e-8 -> 0.99999923 -fmax3442 fma 1 1 -77e-9 -> 0.999999923 -fmax3443 fma 1 1 -77e-10 -> 0.999999992 Inexact Rounded -fmax3444 fma 1 1 -77e-11 -> 0.999999999 Inexact Rounded -fmax3445 fma 1 1 -77e-12 -> 1.00000000 Inexact Rounded -fmax3446 fma 1 1 -77e-999 -> 1.00000000 Inexact Rounded -fmax3447 fma 1 1 -77e-999999 -> 1.00000000 Inexact Rounded - -fmax3450 fma 1 10 -77e-7 -> 9.9999923 -fmax3451 fma 1 10 -77e-8 -> 9.99999923 -fmax3452 fma 1 10 -77e-9 -> 9.99999992 Inexact Rounded -fmax3453 fma 1 10 -77e-10 -> 9.99999999 Inexact Rounded -fmax3454 fma 1 10 -77e-11 -> 10.0000000 Inexact Rounded -fmax3455 fma 1 10 -77e-12 -> 10.0000000 Inexact Rounded -fmax3456 fma 1 10 -77e-999 -> 10.0000000 Inexact Rounded -fmax3457 fma 1 10 -77e-999999 -> 10.0000000 Inexact Rounded - -fmax3460 fma 1 -77e-7 1 -> 0.9999923 -fmax3461 fma 1 -77e-8 1 -> 0.99999923 -fmax3462 fma 1 -77e-9 1 -> 0.999999923 -fmax3463 fma 1 -77e-10 1 -> 0.999999992 Inexact Rounded -fmax3464 fma 1 -77e-11 1 -> 0.999999999 Inexact Rounded -fmax3465 fma 1 -77e-12 1 -> 1.00000000 Inexact Rounded -fmax3466 fma 1 -77e-999 1 -> 1.00000000 Inexact Rounded -fmax3467 fma 1 -77e-999999 1 -> 1.00000000 Inexact Rounded - -fmax3470 fma 1 -77e-7 10 -> 9.9999923 -fmax3471 fma 1 -77e-8 10 -> 9.99999923 -fmax3472 fma 1 -77e-9 10 -> 9.99999992 Inexact Rounded -fmax3473 fma 1 -77e-10 10 -> 9.99999999 Inexact Rounded -fmax3474 fma 1 -77e-11 10 -> 10.0000000 Inexact Rounded -fmax3475 fma 1 -77e-12 10 -> 10.0000000 Inexact Rounded -fmax3476 fma 1 -77e-999 10 -> 10.0000000 Inexact Rounded -fmax3477 fma 1 -77e-999999 10 -> 10.0000000 Inexact Rounded - --- negative ulps -fmax3480 fma 1 -1 77e-7 -> -0.9999923 -fmax3481 fma 1 -1 77e-8 -> -0.99999923 -fmax3482 fma 1 -1 77e-9 -> -0.999999923 -fmax3483 fma 1 -1 77e-10 -> -0.999999992 Inexact Rounded -fmax3484 fma 1 -1 77e-11 -> -0.999999999 Inexact Rounded -fmax3485 fma 1 -1 77e-12 -> -1.00000000 Inexact Rounded -fmax3486 fma 1 -1 77e-999 -> -1.00000000 Inexact Rounded -fmax3487 fma 1 -1 77e-999999 -> -1.00000000 Inexact Rounded - -fmax3490 fma 1 -10 77e-7 -> -9.9999923 -fmax3491 fma 1 -10 77e-8 -> -9.99999923 -fmax3492 fma 1 -10 77e-9 -> -9.99999992 Inexact Rounded -fmax3493 fma 1 -10 77e-10 -> -9.99999999 Inexact Rounded -fmax3494 fma 1 -10 77e-11 -> -10.0000000 Inexact Rounded -fmax3495 fma 1 -10 77e-12 -> -10.0000000 Inexact Rounded -fmax3496 fma 1 -10 77e-999 -> -10.0000000 Inexact Rounded -fmax3497 fma 1 -10 77e-999999 -> -10.0000000 Inexact Rounded - -fmax3500 fma 1 77e-7 -1 -> -0.9999923 -fmax3501 fma 1 77e-8 -1 -> -0.99999923 -fmax3502 fma 1 77e-9 -1 -> -0.999999923 -fmax3503 fma 1 77e-10 -1 -> -0.999999992 Inexact Rounded -fmax3504 fma 1 77e-11 -1 -> -0.999999999 Inexact Rounded -fmax3505 fma 1 77e-12 -1 -> -1.00000000 Inexact Rounded -fmax3506 fma 1 77e-999 -1 -> -1.00000000 Inexact Rounded -fmax3507 fma 1 77e-999999 -1 -> -1.00000000 Inexact Rounded - -fmax3510 fma 1 77e-7 -10 -> -9.9999923 -fmax3511 fma 1 77e-8 -10 -> -9.99999923 -fmax3512 fma 1 77e-9 -10 -> -9.99999992 Inexact Rounded -fmax3513 fma 1 77e-10 -10 -> -9.99999999 Inexact Rounded -fmax3514 fma 1 77e-11 -10 -> -10.0000000 Inexact Rounded -fmax3515 fma 1 77e-12 -10 -> -10.0000000 Inexact Rounded -fmax3516 fma 1 77e-999 -10 -> -10.0000000 Inexact Rounded -fmax3517 fma 1 77e-999999 -10 -> -10.0000000 Inexact Rounded - - --- long operands -maxexponent: 999 -minexponent: -999 -precision: 9 -fmax3521 fma 1 12345678000 0 -> 1.23456780E+10 Rounded -fmax3522 fma 1 0 12345678000 -> 1.23456780E+10 Rounded -fmax3523 fma 1 1234567800 0 -> 1.23456780E+9 Rounded -fmax3524 fma 1 0 1234567800 -> 1.23456780E+9 Rounded -fmax3525 fma 1 1234567890 0 -> 1.23456789E+9 Rounded -fmax3526 fma 1 0 1234567890 -> 1.23456789E+9 Rounded -fmax3527 fma 1 1234567891 0 -> 1.23456789E+9 Inexact Rounded -fmax3528 fma 1 0 1234567891 -> 1.23456789E+9 Inexact Rounded -fmax3529 fma 1 12345678901 0 -> 1.23456789E+10 Inexact Rounded -fmax3530 fma 1 0 12345678901 -> 1.23456789E+10 Inexact Rounded -fmax3531 fma 1 1234567896 0 -> 1.23456790E+9 Inexact Rounded -fmax3532 fma 1 0 1234567896 -> 1.23456790E+9 Inexact Rounded - -precision: 15 --- still checking -fmax3541 fma 1 12345678000 0 -> 12345678000 -fmax3542 fma 1 0 12345678000 -> 12345678000 -fmax3543 fma 1 1234567800 0 -> 1234567800 -fmax3544 fma 1 0 1234567800 -> 1234567800 -fmax3545 fma 1 1234567890 0 -> 1234567890 -fmax3546 fma 1 0 1234567890 -> 1234567890 -fmax3547 fma 1 1234567891 0 -> 1234567891 -fmax3548 fma 1 0 1234567891 -> 1234567891 -fmax3549 fma 1 12345678901 0 -> 12345678901 -fmax3550 fma 1 0 12345678901 -> 12345678901 -fmax3551 fma 1 1234567896 0 -> 1234567896 -fmax3552 fma 1 0 1234567896 -> 1234567896 - --- verify a query -precision: 16 -maxExponent: +394 -minExponent: -393 -rounding: down -fmax3561 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded -fmax3562 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded --- and using decimal64 bounds... -precision: 16 -maxExponent: +384 -minExponent: -383 -rounding: down -fmax3563 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded -fmax3564 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded - - --- some more residue effects with extreme rounding -precision: 9 -rounding: half_up -fmax3601 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded -rounding: half_even -fmax3602 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded -rounding: half_down -fmax3603 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded -rounding: floor -fmax3604 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded -rounding: ceiling -fmax3605 fma 1 123456789 0.000001 -> 123456790 Inexact Rounded -rounding: up -fmax3606 fma 1 123456789 0.000001 -> 123456790 Inexact Rounded -rounding: down -fmax3607 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded - -rounding: half_up -fmax3611 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: half_even -fmax3612 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: half_down -fmax3613 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: floor -fmax3614 fma 1 123456789 -0.000001 -> 123456788 Inexact Rounded -rounding: ceiling -fmax3615 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: up -fmax3616 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded -rounding: down -fmax3617 fma 1 123456789 -0.000001 -> 123456788 Inexact Rounded - -rounding: half_up -fmax3621 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded -rounding: half_even -fmax3622 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded -rounding: half_down -fmax3623 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded -rounding: floor -fmax3624 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded -rounding: ceiling -fmax3625 fma 1 123456789 0.499999 -> 123456790 Inexact Rounded -rounding: up -fmax3626 fma 1 123456789 0.499999 -> 123456790 Inexact Rounded -rounding: down -fmax3627 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded - -rounding: half_up -fmax3631 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: half_even -fmax3632 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: half_down -fmax3633 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: floor -fmax3634 fma 1 123456789 -0.499999 -> 123456788 Inexact Rounded -rounding: ceiling -fmax3635 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: up -fmax3636 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded -rounding: down -fmax3637 fma 1 123456789 -0.499999 -> 123456788 Inexact Rounded - -rounding: half_up -fmax3641 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: half_even -fmax3642 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: half_down -fmax3643 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: floor -fmax3644 fma 1 123456789 0.500001 -> 123456789 Inexact Rounded -rounding: ceiling -fmax3645 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: up -fmax3646 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded -rounding: down -fmax3647 fma 1 123456789 0.500001 -> 123456789 Inexact Rounded - -rounding: half_up -fmax3651 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded -rounding: half_even -fmax3652 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded -rounding: half_down -fmax3653 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded -rounding: floor -fmax3654 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded -rounding: ceiling -fmax3655 fma 1 123456789 -0.500001 -> 123456789 Inexact Rounded -rounding: up -fmax3656 fma 1 123456789 -0.500001 -> 123456789 Inexact Rounded -rounding: down -fmax3657 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded - --- long operand triangle -rounding: half_up -precision: 37 -fmax3660 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337114834538 -precision: 36 -fmax3661 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711483454 Inexact Rounded -precision: 35 -fmax3662 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371148345 Inexact Rounded -precision: 34 -fmax3663 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337114835 Inexact Rounded -precision: 33 -fmax3664 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711483 Inexact Rounded -precision: 32 -fmax3665 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371148 Inexact Rounded -precision: 31 -fmax3666 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337115 Inexact Rounded -precision: 30 -fmax3667 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711 Inexact Rounded -precision: 29 -fmax3668 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371 Inexact Rounded -precision: 28 -fmax3669 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337 Inexact Rounded -precision: 27 -fmax3670 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892234 Inexact Rounded -precision: 26 -fmax3671 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223 Inexact Rounded -precision: 25 -fmax3672 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922 Inexact Rounded -precision: 24 -fmax3673 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892 Inexact Rounded -precision: 23 -fmax3674 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389 Inexact Rounded -precision: 22 -fmax3675 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023639 Inexact Rounded -precision: 21 -fmax3676 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102364 Inexact Rounded -precision: 20 -fmax3677 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236 Inexact Rounded -precision: 19 -fmax3678 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211024 Inexact Rounded -precision: 18 -fmax3679 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102 Inexact Rounded -precision: 17 -fmax3680 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110 Inexact Rounded -precision: 16 -fmax3681 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211 Inexact Rounded -precision: 15 -fmax3682 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221 Inexact Rounded -precision: 14 -fmax3683 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422 Inexact Rounded -precision: 13 -fmax3684 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42 Inexact Rounded -precision: 12 -fmax3685 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4 Inexact Rounded -precision: 11 -fmax3686 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166 Inexact Rounded -precision: 10 -fmax3687 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847117417E+10 Inexact Rounded -precision: 9 -fmax3688 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.84711742E+10 Inexact Rounded -precision: 8 -fmax3689 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8471174E+10 Inexact Rounded -precision: 7 -fmax3690 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847117E+10 Inexact Rounded -precision: 6 -fmax3691 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.84712E+10 Inexact Rounded -precision: 5 -fmax3692 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8471E+10 Inexact Rounded -precision: 4 -fmax3693 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847E+10 Inexact Rounded -precision: 3 -fmax3694 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.85E+10 Inexact Rounded -precision: 2 -fmax3695 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8E+10 Inexact Rounded -precision: 1 -fmax3696 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 1E+11 Inexact Rounded - --- more zeros, etc. -rounding: half_up -precision: 9 - -fmax3701 fma 1 5.00 1.00E-3 -> 5.00100 -fmax3702 fma 1 00.00 0.000 -> 0.000 -fmax3703 fma 1 00.00 0E-3 -> 0.000 -fmax3704 fma 1 0E-3 00.00 -> 0.000 - -fmax3710 fma 1 0E+3 00.00 -> 0.00 -fmax3711 fma 1 0E+3 00.0 -> 0.0 -fmax3712 fma 1 0E+3 00. -> 0 -fmax3713 fma 1 0E+3 00.E+1 -> 0E+1 -fmax3714 fma 1 0E+3 00.E+2 -> 0E+2 -fmax3715 fma 1 0E+3 00.E+3 -> 0E+3 -fmax3716 fma 1 0E+3 00.E+4 -> 0E+3 -fmax3717 fma 1 0E+3 00.E+5 -> 0E+3 -fmax3718 fma 1 0E+3 -00.0 -> 0.0 -fmax3719 fma 1 0E+3 -00. -> 0 -fmax3731 fma 1 0E+3 -00.E+1 -> 0E+1 - -fmax3720 fma 1 00.00 0E+3 -> 0.00 -fmax3721 fma 1 00.0 0E+3 -> 0.0 -fmax3722 fma 1 00. 0E+3 -> 0 -fmax3723 fma 1 00.E+1 0E+3 -> 0E+1 -fmax3724 fma 1 00.E+2 0E+3 -> 0E+2 -fmax3725 fma 1 00.E+3 0E+3 -> 0E+3 -fmax3726 fma 1 00.E+4 0E+3 -> 0E+3 -fmax3727 fma 1 00.E+5 0E+3 -> 0E+3 -fmax3728 fma 1 -00.00 0E+3 -> 0.00 -fmax3729 fma 1 -00.0 0E+3 -> 0.0 -fmax3730 fma 1 -00. 0E+3 -> 0 - -fmax3732 fma 1 0 0 -> 0 -fmax3733 fma 1 0 -0 -> 0 -fmax3734 fma 1 -0 0 -> 0 -fmax3735 fma 1 -0 -0 -> -0 -- IEEE 854 special case - -fmax3736 fma 1 1 -1 -> 0 -fmax3737 fma 1 -1 -1 -> -2 -fmax3738 fma 1 1 1 -> 2 -fmax3739 fma 1 -1 1 -> 0 - -fmax3741 fma 1 0 -1 -> -1 -fmax3742 fma 1 -0 -1 -> -1 -fmax3743 fma 1 0 1 -> 1 -fmax3744 fma 1 -0 1 -> 1 -fmax3745 fma 1 -1 0 -> -1 -fmax3746 fma 1 -1 -0 -> -1 -fmax3747 fma 1 1 0 -> 1 -fmax3748 fma 1 1 -0 -> 1 - -fmax3751 fma 1 0.0 -1 -> -1.0 -fmax3752 fma 1 -0.0 -1 -> -1.0 -fmax3753 fma 1 0.0 1 -> 1.0 -fmax3754 fma 1 -0.0 1 -> 1.0 -fmax3755 fma 1 -1.0 0 -> -1.0 -fmax3756 fma 1 -1.0 -0 -> -1.0 -fmax3757 fma 1 1.0 0 -> 1.0 -fmax3758 fma 1 1.0 -0 -> 1.0 - -fmax3761 fma 1 0 -1.0 -> -1.0 -fmax3762 fma 1 -0 -1.0 -> -1.0 -fmax3763 fma 1 0 1.0 -> 1.0 -fmax3764 fma 1 -0 1.0 -> 1.0 -fmax3765 fma 1 -1 0.0 -> -1.0 -fmax3766 fma 1 -1 -0.0 -> -1.0 -fmax3767 fma 1 1 0.0 -> 1.0 -fmax3768 fma 1 1 -0.0 -> 1.0 - -fmax3771 fma 1 0.0 -1.0 -> -1.0 -fmax3772 fma 1 -0.0 -1.0 -> -1.0 -fmax3773 fma 1 0.0 1.0 -> 1.0 -fmax3774 fma 1 -0.0 1.0 -> 1.0 -fmax3775 fma 1 -1.0 0.0 -> -1.0 -fmax3776 fma 1 -1.0 -0.0 -> -1.0 -fmax3777 fma 1 1.0 0.0 -> 1.0 -fmax3778 fma 1 1.0 -0.0 -> 1.0 - --- Specials -fmax3780 fma 1 -Inf -Inf -> -Infinity -fmax3781 fma 1 -Inf -1000 -> -Infinity -fmax3782 fma 1 -Inf -1 -> -Infinity -fmax3783 fma 1 -Inf -0 -> -Infinity -fmax3784 fma 1 -Inf 0 -> -Infinity -fmax3785 fma 1 -Inf 1 -> -Infinity -fmax3786 fma 1 -Inf 1000 -> -Infinity -fmax3787 fma 1 -1000 -Inf -> -Infinity -fmax3788 fma 1 -Inf -Inf -> -Infinity -fmax3789 fma 1 -1 -Inf -> -Infinity -fmax3790 fma 1 -0 -Inf -> -Infinity -fmax3791 fma 1 0 -Inf -> -Infinity -fmax3792 fma 1 1 -Inf -> -Infinity -fmax3793 fma 1 1000 -Inf -> -Infinity -fmax3794 fma 1 Inf -Inf -> NaN Invalid_operation - -fmax3800 fma 1 Inf -Inf -> NaN Invalid_operation -fmax3801 fma 1 Inf -1000 -> Infinity -fmax3802 fma 1 Inf -1 -> Infinity -fmax3803 fma 1 Inf -0 -> Infinity -fmax3804 fma 1 Inf 0 -> Infinity -fmax3805 fma 1 Inf 1 -> Infinity -fmax3806 fma 1 Inf 1000 -> Infinity -fmax3807 fma 1 Inf Inf -> Infinity -fmax3808 fma 1 -1000 Inf -> Infinity -fmax3809 fma 1 -Inf Inf -> NaN Invalid_operation -fmax3810 fma 1 -1 Inf -> Infinity -fmax3811 fma 1 -0 Inf -> Infinity -fmax3812 fma 1 0 Inf -> Infinity -fmax3813 fma 1 1 Inf -> Infinity -fmax3814 fma 1 1000 Inf -> Infinity -fmax3815 fma 1 Inf Inf -> Infinity - -fmax3821 fma 1 NaN -Inf -> NaN -fmax3822 fma 1 NaN -1000 -> NaN -fmax3823 fma 1 NaN -1 -> NaN -fmax3824 fma 1 NaN -0 -> NaN -fmax3825 fma 1 NaN 0 -> NaN -fmax3826 fma 1 NaN 1 -> NaN -fmax3827 fma 1 NaN 1000 -> NaN -fmax3828 fma 1 NaN Inf -> NaN -fmax3829 fma 1 NaN NaN -> NaN -fmax3830 fma 1 -Inf NaN -> NaN -fmax3831 fma 1 -1000 NaN -> NaN -fmax3832 fma 1 -1 NaN -> NaN -fmax3833 fma 1 -0 NaN -> NaN -fmax3834 fma 1 0 NaN -> NaN -fmax3835 fma 1 1 NaN -> NaN -fmax3836 fma 1 1000 NaN -> NaN -fmax3837 fma 1 Inf NaN -> NaN - -fmax3841 fma 1 sNaN -Inf -> NaN Invalid_operation -fmax3842 fma 1 sNaN -1000 -> NaN Invalid_operation -fmax3843 fma 1 sNaN -1 -> NaN Invalid_operation -fmax3844 fma 1 sNaN -0 -> NaN Invalid_operation -fmax3845 fma 1 sNaN 0 -> NaN Invalid_operation -fmax3846 fma 1 sNaN 1 -> NaN Invalid_operation -fmax3847 fma 1 sNaN 1000 -> NaN Invalid_operation -fmax3848 fma 1 sNaN NaN -> NaN Invalid_operation -fmax3849 fma 1 sNaN sNaN -> NaN Invalid_operation -fmax3850 fma 1 NaN sNaN -> NaN Invalid_operation -fmax3851 fma 1 -Inf sNaN -> NaN Invalid_operation -fmax3852 fma 1 -1000 sNaN -> NaN Invalid_operation -fmax3853 fma 1 -1 sNaN -> NaN Invalid_operation -fmax3854 fma 1 -0 sNaN -> NaN Invalid_operation -fmax3855 fma 1 0 sNaN -> NaN Invalid_operation -fmax3856 fma 1 1 sNaN -> NaN Invalid_operation -fmax3857 fma 1 1000 sNaN -> NaN Invalid_operation -fmax3858 fma 1 Inf sNaN -> NaN Invalid_operation -fmax3859 fma 1 NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -fmax3861 fma 1 NaN1 -Inf -> NaN1 -fmax3862 fma 1 +NaN2 -1000 -> NaN2 -fmax3863 fma 1 NaN3 1000 -> NaN3 -fmax3864 fma 1 NaN4 Inf -> NaN4 -fmax3865 fma 1 NaN5 +NaN6 -> NaN5 -fmax3866 fma 1 -Inf NaN7 -> NaN7 -fmax3867 fma 1 -1000 NaN8 -> NaN8 -fmax3868 fma 1 1000 NaN9 -> NaN9 -fmax3869 fma 1 Inf +NaN10 -> NaN10 -fmax3871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation -fmax3872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation -fmax3873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation -fmax3874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation -fmax3875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation -fmax3876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation -fmax3877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation -fmax3878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation -fmax3879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation -fmax3880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation -fmax3881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation -fmax3882 fma 1 -NaN26 NaN28 -> -NaN26 -fmax3883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation -fmax3884 fma 1 1000 -NaN30 -> -NaN30 -fmax3885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation - --- overflow, underflow and subnormal tests -maxexponent: 999999 -minexponent: -999999 -precision: 9 -fmax3890 fma 1 1E+999999 9E+999999 -> Infinity Overflow Inexact Rounded -fmax3891 fma 1 9E+999999 1E+999999 -> Infinity Overflow Inexact Rounded -fmax3892 fma 1 -1.1E-999999 1E-999999 -> -1E-1000000 Subnormal -fmax3893 fma 1 1E-999999 -1.1e-999999 -> -1E-1000000 Subnormal -fmax3894 fma 1 -1.0001E-999999 1E-999999 -> -1E-1000003 Subnormal -fmax3895 fma 1 1E-999999 -1.0001e-999999 -> -1E-1000003 Subnormal -fmax3896 fma 1 -1E+999999 -9E+999999 -> -Infinity Overflow Inexact Rounded -fmax3897 fma 1 -9E+999999 -1E+999999 -> -Infinity Overflow Inexact Rounded -fmax3898 fma 1 +1.1E-999999 -1E-999999 -> 1E-1000000 Subnormal -fmax3899 fma 1 -1E-999999 +1.1e-999999 -> 1E-1000000 Subnormal -fmax3900 fma 1 +1.0001E-999999 -1E-999999 -> 1E-1000003 Subnormal -fmax3901 fma 1 -1E-999999 +1.0001e-999999 -> 1E-1000003 Subnormal -fmax3902 fma 1 -1E+999999 +9E+999999 -> 8E+999999 -fmax3903 fma 1 -9E+999999 +1E+999999 -> -8E+999999 - -precision: 3 -fmax3904 fma 1 0 -9.999E+999999 -> -Infinity Inexact Overflow Rounded -fmax3905 fma 1 -9.999E+999999 0 -> -Infinity Inexact Overflow Rounded -fmax3906 fma 1 0 9.999E+999999 -> Infinity Inexact Overflow Rounded -fmax3907 fma 1 9.999E+999999 0 -> Infinity Inexact Overflow Rounded - -precision: 3 -maxexponent: 999 -minexponent: -999 -fmax3910 fma 1 1.00E-999 0 -> 1.00E-999 -fmax3911 fma 1 0.1E-999 0 -> 1E-1000 Subnormal -fmax3912 fma 1 0.10E-999 0 -> 1.0E-1000 Subnormal -fmax3913 fma 1 0.100E-999 0 -> 1.0E-1000 Subnormal Rounded -fmax3914 fma 1 0.01E-999 0 -> 1E-1001 Subnormal --- next is rounded to Nmin -fmax3915 fma 1 0.999E-999 0 -> 1.00E-999 Inexact Rounded Subnormal Underflow -fmax3916 fma 1 0.099E-999 0 -> 1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3917 fma 1 0.009E-999 0 -> 1E-1001 Inexact Rounded Subnormal Underflow -fmax3918 fma 1 0.001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3919 fma 1 0.0009E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3920 fma 1 0.0001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped - -fmax3930 fma 1 -1.00E-999 0 -> -1.00E-999 -fmax3931 fma 1 -0.1E-999 0 -> -1E-1000 Subnormal -fmax3932 fma 1 -0.10E-999 0 -> -1.0E-1000 Subnormal -fmax3933 fma 1 -0.100E-999 0 -> -1.0E-1000 Subnormal Rounded -fmax3934 fma 1 -0.01E-999 0 -> -1E-1001 Subnormal --- next is rounded to Nmin -fmax3935 fma 1 -0.999E-999 0 -> -1.00E-999 Inexact Rounded Subnormal Underflow -fmax3936 fma 1 -0.099E-999 0 -> -1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3937 fma 1 -0.009E-999 0 -> -1E-1001 Inexact Rounded Subnormal Underflow -fmax3938 fma 1 -0.001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3939 fma 1 -0.0009E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3940 fma 1 -0.0001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped - --- some non-zero subnormal fma 1 s -fmax3950 fma 1 1.00E-999 0.1E-999 -> 1.10E-999 -fmax3951 fma 1 0.1E-999 0.1E-999 -> 2E-1000 Subnormal -fmax3952 fma 1 0.10E-999 0.1E-999 -> 2.0E-1000 Subnormal -fmax3953 fma 1 0.100E-999 0.1E-999 -> 2.0E-1000 Subnormal Rounded -fmax3954 fma 1 0.01E-999 0.1E-999 -> 1.1E-1000 Subnormal -fmax3955 fma 1 0.999E-999 0.1E-999 -> 1.10E-999 Inexact Rounded -fmax3956 fma 1 0.099E-999 0.1E-999 -> 2.0E-1000 Inexact Rounded Subnormal Underflow -fmax3957 fma 1 0.009E-999 0.1E-999 -> 1.1E-1000 Inexact Rounded Subnormal Underflow -fmax3958 fma 1 0.001E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3959 fma 1 0.0009E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3960 fma 1 0.0001E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow --- negatives... -fmax3961 fma 1 1.00E-999 -0.1E-999 -> 9.0E-1000 Subnormal -fmax3962 fma 1 0.1E-999 -0.1E-999 -> 0E-1000 -fmax3963 fma 1 0.10E-999 -0.1E-999 -> 0E-1001 -fmax3964 fma 1 0.100E-999 -0.1E-999 -> 0E-1001 Clamped -fmax3965 fma 1 0.01E-999 -0.1E-999 -> -9E-1001 Subnormal -fmax3966 fma 1 0.999E-999 -0.1E-999 -> 9.0E-1000 Inexact Rounded Subnormal Underflow -fmax3967 fma 1 0.099E-999 -0.1E-999 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -fmax3968 fma 1 0.009E-999 -0.1E-999 -> -9E-1001 Inexact Rounded Subnormal Underflow -fmax3969 fma 1 0.001E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3970 fma 1 0.0009E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow -fmax3971 fma 1 0.0001E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow - --- some 'real' numbers -maxExponent: 384 -minExponent: -383 -precision: 8 -fmax3566 fma 1 99999061735E-394 0E-394 -> 9.999906E-384 Inexact Rounded Underflow Subnormal -precision: 7 -fmax3567 fma 1 99999061735E-394 0E-394 -> 9.99991E-384 Inexact Rounded Underflow Subnormal -precision: 6 -fmax3568 fma 1 99999061735E-394 0E-394 -> 9.9999E-384 Inexact Rounded Underflow Subnormal - --- now the case where we can get underflow but the result is normal --- [note this can't happen if the operands are also bounded, as we --- cannot represent 1E-399, for example] -precision: 16 -rounding: half_up -maxExponent: 384 -minExponent: -383 - -fmax3571 fma 1 1E-383 0 -> 1E-383 -fmax3572 fma 1 1E-384 0 -> 1E-384 Subnormal -fmax3573 fma 1 1E-383 1E-384 -> 1.1E-383 -fmax3574 subtract 1E-383 1E-384 -> 9E-384 Subnormal - --- Here we explore the boundary of rounding a subnormal to Nmin -fmax3575 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal -fmax3576 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal -fmax3577 subtract 1E-383 1E-399 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax3578 subtract 1E-383 1E-400 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax3579 subtract 1E-383 1E-401 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax3580 subtract 1E-383 1E-402 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded - --- check for double-rounded subnormals -precision: 5 -maxexponent: 79 -minexponent: -79 --- Add: lhs and rhs 0 -fmax31001 fma 1 1.52444E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31002 fma 1 1.52445E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31003 fma 1 1.52446E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31004 fma 1 0 1.52444E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31005 fma 1 0 1.52445E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31006 fma 1 0 1.52446E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow - --- Add: lhs >> rhs and vice versa -fmax31011 fma 1 1.52444E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31012 fma 1 1.52445E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31013 fma 1 1.52446E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31014 fma 1 1E-100 1.52444E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31015 fma 1 1E-100 1.52445E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow -fmax31016 fma 1 1E-100 1.52446E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow - --- Add: lhs + rhs fma 1 ition carried out -fmax31021 fma 1 1.52443E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31022 fma 1 1.52444E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31023 fma 1 1.52445E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31024 fma 1 1.00001E-80 1.52443E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31025 fma 1 1.00001E-80 1.52444E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow -fmax31026 fma 1 1.00001E-80 1.52445E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow - --- And for round down full and subnormal results -precision: 16 -maxExponent: +384 -minExponent: -383 -rounding: down - -fmax31100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact -fmax31101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact -fmax31103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact -fmax31104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact -fmax31105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact -fmax31106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact -fmax31107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact -fmax31108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact -fmax31109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact - -rounding: ceiling -fmax31110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact -fmax31111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact -fmax31113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact -fmax31114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact -fmax31115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact -fmax31116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact -fmax31117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact -fmax31118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact -fmax31119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact - -rounding: down -precision: 7 -maxExponent: +96 -minExponent: -95 -fmax31130 fma 1 1 -1e-200 -> 0.9999999 Rounded Inexact --- subnormal boundary -fmax31131 fma 1 1.000000E-94 -1e-200 -> 9.999999E-95 Rounded Inexact -fmax31132 fma 1 1.000001E-95 -1e-200 -> 1.000000E-95 Rounded Inexact -fmax31133 fma 1 1.000000E-95 -1e-200 -> 9.99999E-96 Rounded Inexact Subnormal Underflow -fmax31134 fma 1 0.999999E-95 -1e-200 -> 9.99998E-96 Rounded Inexact Subnormal Underflow -fmax31135 fma 1 0.001000E-95 -1e-200 -> 9.99E-99 Rounded Inexact Subnormal Underflow -fmax31136 fma 1 0.000999E-95 -1e-200 -> 9.98E-99 Rounded Inexact Subnormal Underflow -fmax31137 fma 1 1.000000E-95 -1e-101 -> 9.99999E-96 Subnormal -fmax31138 fma 1 10000E-101 -1e-200 -> 9.999E-98 Subnormal Inexact Rounded Underflow -fmax31139 fma 1 1000E-101 -1e-200 -> 9.99E-99 Subnormal Inexact Rounded Underflow -fmax31140 fma 1 100E-101 -1e-200 -> 9.9E-100 Subnormal Inexact Rounded Underflow -fmax31141 fma 1 10E-101 -1e-200 -> 9E-101 Subnormal Inexact Rounded Underflow -fmax31142 fma 1 1E-101 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31143 fma 1 0E-101 -1e-200 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31144 fma 1 1E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped - -fmax31151 fma 1 10000E-102 -1e-200 -> 9.99E-99 Subnormal Inexact Rounded Underflow -fmax31152 fma 1 1000E-102 -1e-200 -> 9.9E-100 Subnormal Inexact Rounded Underflow -fmax31153 fma 1 100E-102 -1e-200 -> 9E-101 Subnormal Inexact Rounded Underflow -fmax31154 fma 1 10E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31155 fma 1 1E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31156 fma 1 0E-102 -1e-200 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31157 fma 1 1E-103 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped - -fmax31160 fma 1 100E-105 -1e-101 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped -fmax31161 fma 1 100E-105 -1e-201 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped - --- tests based on Gunnar Degnbol's edge case -precision: 15 -rounding: half_up -maxExponent: 384 -minexponent: -383 - -fmax31200 fma 1 1E15 -0.5 -> 1.00000000000000E+15 Inexact Rounded -fmax31201 fma 1 1E15 -0.50 -> 1.00000000000000E+15 Inexact Rounded -fmax31210 fma 1 1E15 -0.51 -> 999999999999999 Inexact Rounded -fmax31211 fma 1 1E15 -0.501 -> 999999999999999 Inexact Rounded -fmax31212 fma 1 1E15 -0.5001 -> 999999999999999 Inexact Rounded -fmax31213 fma 1 1E15 -0.50001 -> 999999999999999 Inexact Rounded -fmax31214 fma 1 1E15 -0.500001 -> 999999999999999 Inexact Rounded -fmax31215 fma 1 1E15 -0.5000001 -> 999999999999999 Inexact Rounded -fmax31216 fma 1 1E15 -0.50000001 -> 999999999999999 Inexact Rounded -fmax31217 fma 1 1E15 -0.500000001 -> 999999999999999 Inexact Rounded -fmax31218 fma 1 1E15 -0.5000000001 -> 999999999999999 Inexact Rounded -fmax31219 fma 1 1E15 -0.50000000001 -> 999999999999999 Inexact Rounded -fmax31220 fma 1 1E15 -0.500000000001 -> 999999999999999 Inexact Rounded -fmax31221 fma 1 1E15 -0.5000000000001 -> 999999999999999 Inexact Rounded -fmax31222 fma 1 1E15 -0.50000000000001 -> 999999999999999 Inexact Rounded -fmax31223 fma 1 1E15 -0.500000000000001 -> 999999999999999 Inexact Rounded -fmax31224 fma 1 1E15 -0.5000000000000001 -> 999999999999999 Inexact Rounded -fmax31225 fma 1 1E15 -0.5000000000000000 -> 1.00000000000000E+15 Inexact Rounded -fmax31230 fma 1 1E15 -5000000.000000001 -> 999999995000000 Inexact Rounded - -precision: 16 - -fmax31300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded -fmax31310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded -fmax31311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded -fmax31312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded -fmax31313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded -fmax31314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded -fmax31315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded -fmax31316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded -fmax31317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded -fmax31318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded -fmax31319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded -fmax31320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded -fmax31321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded -fmax31322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded -fmax31323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded -fmax31324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded -fmax31325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded -fmax31336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded -fmax31337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded -fmax31338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded -fmax31339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded - -fmax31340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded -fmax31341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded - -fmax31349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded -fmax31350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded -fmax31351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded -fmax31352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded -fmax31353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded -fmax31354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded -fmax31355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded -fmax31356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded -fmax31357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded -fmax31358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded -fmax31359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded -fmax31360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded -fmax31361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded -fmax31362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded -fmax31363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded -fmax31364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded -fmax31365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded -fmax31376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded -fmax31377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded -fmax31378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded -fmax31379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded -fmax31380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded -fmax31381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded -fmax31382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded -fmax31392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded -fmax31393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded -fmax31394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded -fmax31395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded -fmax31396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -precision: 15 -rounding: half_up -maxExponent: 384 -minexponent: -383 - -fmax31400 fma 1 0 1.23456789012345 -> 1.23456789012345 -fmax31401 fma 1 0 1.23456789012345E-1 -> 0.123456789012345 -fmax31402 fma 1 0 1.23456789012345E-2 -> 0.0123456789012345 -fmax31403 fma 1 0 1.23456789012345E-3 -> 0.00123456789012345 -fmax31404 fma 1 0 1.23456789012345E-4 -> 0.000123456789012345 -fmax31405 fma 1 0 1.23456789012345E-5 -> 0.0000123456789012345 -fmax31406 fma 1 0 1.23456789012345E-6 -> 0.00000123456789012345 -fmax31407 fma 1 0 1.23456789012345E-7 -> 1.23456789012345E-7 -fmax31408 fma 1 0 1.23456789012345E-8 -> 1.23456789012345E-8 -fmax31409 fma 1 0 1.23456789012345E-9 -> 1.23456789012345E-9 -fmax31410 fma 1 0 1.23456789012345E-10 -> 1.23456789012345E-10 -fmax31411 fma 1 0 1.23456789012345E-11 -> 1.23456789012345E-11 -fmax31412 fma 1 0 1.23456789012345E-12 -> 1.23456789012345E-12 -fmax31413 fma 1 0 1.23456789012345E-13 -> 1.23456789012345E-13 -fmax31414 fma 1 0 1.23456789012345E-14 -> 1.23456789012345E-14 -fmax31415 fma 1 0 1.23456789012345E-15 -> 1.23456789012345E-15 -fmax31416 fma 1 0 1.23456789012345E-16 -> 1.23456789012345E-16 -fmax31417 fma 1 0 1.23456789012345E-17 -> 1.23456789012345E-17 -fmax31418 fma 1 0 1.23456789012345E-18 -> 1.23456789012345E-18 -fmax31419 fma 1 0 1.23456789012345E-19 -> 1.23456789012345E-19 - --- same, precision 16.. -precision: 16 -fmax31420 fma 1 0 1.123456789012345 -> 1.123456789012345 -fmax31421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 -fmax31422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 -fmax31423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 -fmax31424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 -fmax31425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 -fmax31426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 -fmax31427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 -fmax31428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 -fmax31429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 -fmax31430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 -fmax31431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 -fmax31432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 -fmax31433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 -fmax31434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 -fmax31435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 -fmax31436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 -fmax31437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 -fmax31438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 -fmax31439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 - --- same, reversed 0 -fmax31440 fma 1 1.123456789012345 0 -> 1.123456789012345 -fmax31441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 -fmax31442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 -fmax31443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 -fmax31444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 -fmax31445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 -fmax31446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 -fmax31447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 -fmax31448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 -fmax31449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 -fmax31450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 -fmax31451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 -fmax31452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 -fmax31453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 -fmax31454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 -fmax31455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 -fmax31456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 -fmax31457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 -fmax31458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 -fmax31459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 - --- same, Es on the 0 -fmax31460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 -fmax31461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 -fmax31462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 -fmax31463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 -fmax31464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 -fmax31465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 -fmax31466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 -fmax31467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 -fmax31468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 -fmax31469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 -fmax31470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 -fmax31471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 -fmax31472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 -fmax31473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 -fmax31474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 -fmax31475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 --- next four flag Rounded because the 0 extends the result -fmax31476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded -fmax31477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded -fmax31478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded -fmax31479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -precision: 16 -maxExponent: 384 -minexponent: -383 - -rounding: half_up --- exact zeros from zeros -fmax31500 fma 1 0 0E-19 -> 0E-19 -fmax31501 fma 1 -0 0E-19 -> 0E-19 -fmax31502 fma 1 0 -0E-19 -> 0E-19 -fmax31503 fma 1 -0 -0E-19 -> -0E-19 -fmax31504 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31505 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31506 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31507 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31511 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31512 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31513 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31514 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31515 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31516 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31517 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31518 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: half_down --- exact zeros from zeros -fmax31520 fma 1 0 0E-19 -> 0E-19 -fmax31521 fma 1 -0 0E-19 -> 0E-19 -fmax31522 fma 1 0 -0E-19 -> 0E-19 -fmax31523 fma 1 -0 -0E-19 -> -0E-19 -fmax31524 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31525 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31526 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31527 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31531 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31532 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31533 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31534 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31535 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31536 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31537 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31538 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: half_even --- exact zeros from zeros -fmax31540 fma 1 0 0E-19 -> 0E-19 -fmax31541 fma 1 -0 0E-19 -> 0E-19 -fmax31542 fma 1 0 -0E-19 -> 0E-19 -fmax31543 fma 1 -0 -0E-19 -> -0E-19 -fmax31544 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31545 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31546 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31547 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31551 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31552 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31553 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31554 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31555 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31556 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31557 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31558 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: up --- exact zeros from zeros -fmax31560 fma 1 0 0E-19 -> 0E-19 -fmax31561 fma 1 -0 0E-19 -> 0E-19 -fmax31562 fma 1 0 -0E-19 -> 0E-19 -fmax31563 fma 1 -0 -0E-19 -> -0E-19 -fmax31564 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31565 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31566 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31567 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31571 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31572 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31573 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow -fmax31574 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow --- some exact zeros from non-zeros -fmax31575 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31576 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31577 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31578 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow - -rounding: down --- exact zeros from zeros -fmax31580 fma 1 0 0E-19 -> 0E-19 -fmax31581 fma 1 -0 0E-19 -> 0E-19 -fmax31582 fma 1 0 -0E-19 -> 0E-19 -fmax31583 fma 1 -0 -0E-19 -> -0E-19 -fmax31584 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31585 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31586 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31587 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31591 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31592 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31593 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31594 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31595 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31596 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31597 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31598 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: ceiling --- exact zeros from zeros -fmax31600 fma 1 0 0E-19 -> 0E-19 -fmax31601 fma 1 -0 0E-19 -> 0E-19 -fmax31602 fma 1 0 -0E-19 -> 0E-19 -fmax31603 fma 1 -0 -0E-19 -> -0E-19 -fmax31604 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31605 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax31606 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax31607 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31611 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31612 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31613 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31614 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax31615 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax31616 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax31617 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax31618 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -fmax31620 fma 1 0 0E-19 -> 0E-19 -fmax31621 fma 1 -0 0E-19 -> -0E-19 -- * -fmax31622 fma 1 0 -0E-19 -> -0E-19 -- * -fmax31623 fma 1 -0 -0E-19 -> -0E-19 -fmax31624 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax31625 fma 1 -0E-400 0E-19 -> -0E-398 Clamped -- * -fmax31626 fma 1 0E-400 -0E-19 -> -0E-398 Clamped -- * -fmax31627 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax31631 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31632 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31633 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow -fmax31634 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow --- some exact zeros from non-zeros -fmax31635 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax31636 fma 1 -1E-401 1E-401 -> -0E-398 Clamped -- * -fmax31637 fma 1 1E-401 -1E-401 -> -0E-398 Clamped -- * -fmax31638 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow - --- BigDecimal problem testcases 2006.01.23 -precision: 16 -maxExponent: 384 -minexponent: -383 - -rounding: down -precision: 7 -fmax31651 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 6 -fmax31652 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 5 -fmax31653 fma 1 10001E+2 -2E+1 -> 1.0000E+6 Inexact Rounded -precision: 4 -fmax31654 fma 1 10001E+2 -2E+1 -> 1.000E+6 Inexact Rounded -precision: 3 -fmax31655 fma 1 10001E+2 -2E+1 -> 1.00E+6 Inexact Rounded -precision: 2 -fmax31656 fma 1 10001E+2 -2E+1 -> 1.0E+6 Inexact Rounded -precision: 1 -fmax31657 fma 1 10001E+2 -2E+1 -> 1E+6 Inexact Rounded - -rounding: half_even -precision: 7 -fmax31661 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 6 -fmax31662 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 5 -fmax31663 fma 1 10001E+2 -2E+1 -> 1.0001E+6 Inexact Rounded -precision: 4 -fmax31664 fma 1 10001E+2 -2E+1 -> 1.000E+6 Inexact Rounded -precision: 3 -fmax31665 fma 1 10001E+2 -2E+1 -> 1.00E+6 Inexact Rounded -precision: 2 -fmax31666 fma 1 10001E+2 -2E+1 -> 1.0E+6 Inexact Rounded -precision: 1 -fmax31667 fma 1 10001E+2 -2E+1 -> 1E+6 Inexact Rounded - -rounding: up -precision: 7 -fmax31671 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 6 -fmax31672 fma 1 10001E+2 -2E+1 -> 1.00008E+6 -precision: 5 -fmax31673 fma 1 10001E+2 -2E+1 -> 1.0001E+6 Inexact Rounded -precision: 4 -fmax31674 fma 1 10001E+2 -2E+1 -> 1.001E+6 Inexact Rounded -precision: 3 -fmax31675 fma 1 10001E+2 -2E+1 -> 1.01E+6 Inexact Rounded -precision: 2 -fmax31676 fma 1 10001E+2 -2E+1 -> 1.1E+6 Inexact Rounded -precision: 1 -fmax31677 fma 1 10001E+2 -2E+1 -> 2E+6 Inexact Rounded - -precision: 34 -rounding: half_up -maxExponent: 6144 -minExponent: -6143 --- Examples from SQL proposal (Krishna Kulkarni) -fmax31701 fma 1 130E-2 120E-2 -> 2.50 -fmax31702 fma 1 130E-2 12E-1 -> 2.50 -fmax31703 fma 1 130E-2 1E0 -> 2.30 -fmax31704 fma 1 1E2 1E4 -> 1.01E+4 -fmax31705 subtract 130E-2 120E-2 -> 0.10 -fmax31706 subtract 130E-2 12E-1 -> 0.10 -fmax31707 subtract 130E-2 1E0 -> 0.30 -fmax31708 subtract 1E2 1E4 -> -9.9E+3 - ------------------------------------------------------------------------- --- Same as above, using decimal64 default parameters -- ------------------------------------------------------------------------- -precision: 16 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- [first group are 'quick confidence check'] -fmax36001 fma 1 1 1 -> 2 -fmax36002 fma 1 2 3 -> 5 -fmax36003 fma 1 '5.75' '3.3' -> 9.05 -fmax36004 fma 1 '5' '-3' -> 2 -fmax36005 fma 1 '-5' '-3' -> -8 -fmax36006 fma 1 '-7' '2.5' -> -4.5 -fmax36007 fma 1 '0.7' '0.3' -> 1.0 -fmax36008 fma 1 '1.25' '1.25' -> 2.50 -fmax36009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' -fmax36010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' - -fmax36011 fma 1 '0.44444444444444444' '0.55555555555555555' -> '1.000000000000000' Inexact Rounded -fmax36012 fma 1 '0.44444444444444440' '0.55555555555555555' -> '1.000000000000000' Inexact Rounded -fmax36013 fma 1 '0.44444444444444444' '0.55555555555555550' -> '0.9999999999999999' Inexact Rounded -fmax36014 fma 1 '0.444444444444444449' '0' -> '0.4444444444444444' Inexact Rounded -fmax36015 fma 1 '0.4444444444444444499' '0' -> '0.4444444444444444' Inexact Rounded -fmax36016 fma 1 '0.44444444444444444999' '0' -> '0.4444444444444444' Inexact Rounded -fmax36017 fma 1 '0.44444444444444445000' '0' -> '0.4444444444444444' Inexact Rounded -fmax36018 fma 1 '0.44444444444444445001' '0' -> '0.4444444444444445' Inexact Rounded -fmax36019 fma 1 '0.4444444444444444501' '0' -> '0.4444444444444445' Inexact Rounded -fmax36020 fma 1 '0.444444444444444451' '0' -> '0.4444444444444445' Inexact Rounded - -fmax36021 fma 1 0 1 -> 1 -fmax36022 fma 1 1 1 -> 2 -fmax36023 fma 1 2 1 -> 3 -fmax36024 fma 1 3 1 -> 4 -fmax36025 fma 1 4 1 -> 5 -fmax36026 fma 1 5 1 -> 6 -fmax36027 fma 1 6 1 -> 7 -fmax36028 fma 1 7 1 -> 8 -fmax36029 fma 1 8 1 -> 9 -fmax36030 fma 1 9 1 -> 10 - --- some carrying effects -fmax36031 fma 1 '0.9998' '0.0000' -> '0.9998' -fmax36032 fma 1 '0.9998' '0.0001' -> '0.9999' -fmax36033 fma 1 '0.9998' '0.0002' -> '1.0000' -fmax36034 fma 1 '0.9998' '0.0003' -> '1.0001' - -fmax36035 fma 1 '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -fmax36036 fma 1 '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -fmax36037 fma 1 '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded -fmax36038 fma 1 '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded -fmax36039 fma 1 '700000' '10000e+16' -> '1.000000000000007E+20' Rounded - --- symmetry: -fmax36040 fma 1 '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded -fmax36041 fma 1 '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded -fmax36042 fma 1 '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded -fmax36044 fma 1 '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded -fmax36045 fma 1 '10000e+16' '700000' -> '1.000000000000007E+20' Rounded - -fmax36046 fma 1 '10000e+9' '7' -> '10000000000007' -fmax36047 fma 1 '10000e+9' '70' -> '10000000000070' -fmax36048 fma 1 '10000e+9' '700' -> '10000000000700' -fmax36049 fma 1 '10000e+9' '7000' -> '10000000007000' -fmax36050 fma 1 '10000e+9' '70000' -> '10000000070000' -fmax36051 fma 1 '10000e+9' '700000' -> '10000000700000' - --- examples from decarith -fmax36053 fma 1 '12' '7.00' -> '19.00' -fmax36054 fma 1 '1.3' '-1.07' -> '0.23' -fmax36055 fma 1 '1.3' '-1.30' -> '0.00' -fmax36056 fma 1 '1.3' '-2.07' -> '-0.77' -fmax36057 fma 1 '1E+2' '1E+4' -> '1.01E+4' - --- from above -fmax36061 fma 1 1 '0.1' -> '1.1' -fmax36062 fma 1 1 '0.01' -> '1.01' -fmax36063 fma 1 1 '0.001' -> '1.001' -fmax36064 fma 1 1 '0.0001' -> '1.0001' -fmax36065 fma 1 1 '0.00001' -> '1.00001' -fmax36066 fma 1 1 '0.000001' -> '1.000001' -fmax36067 fma 1 1 '0.0000001' -> '1.0000001' -fmax36068 fma 1 1 '0.00000001' -> '1.00000001' - --- some funny zeros [in case of bad signum] -fmax36070 fma 1 1 0 -> 1 -fmax36071 fma 1 1 0. -> 1 -fmax36072 fma 1 1 .0 -> 1.0 -fmax36073 fma 1 1 0.0 -> 1.0 -fmax36074 fma 1 1 0.00 -> 1.00 -fmax36075 fma 1 0 1 -> 1 -fmax36076 fma 1 0. 1 -> 1 -fmax36077 fma 1 .0 1 -> 1.0 -fmax36078 fma 1 0.0 1 -> 1.0 -fmax36079 fma 1 0.00 1 -> 1.00 - --- some carries -fmax36080 fma 1 9999999999999998 1 -> 9999999999999999 -fmax36081 fma 1 9999999999999999 1 -> 1.000000000000000E+16 Rounded -fmax36082 fma 1 999999999999999 1 -> 1000000000000000 -fmax36083 fma 1 9999999999999 1 -> 10000000000000 -fmax36084 fma 1 99999999999 1 -> 100000000000 -fmax36085 fma 1 999999999 1 -> 1000000000 -fmax36086 fma 1 9999999 1 -> 10000000 -fmax36087 fma 1 99999 1 -> 100000 -fmax36088 fma 1 999 1 -> 1000 -fmax36089 fma 1 9 1 -> 10 - - --- more LHS swaps -fmax36090 fma 1 '-56267E-10' 0 -> '-0.0000056267' -fmax36091 fma 1 '-56267E-6' 0 -> '-0.056267' -fmax36092 fma 1 '-56267E-5' 0 -> '-0.56267' -fmax36093 fma 1 '-56267E-4' 0 -> '-5.6267' -fmax36094 fma 1 '-56267E-3' 0 -> '-56.267' -fmax36095 fma 1 '-56267E-2' 0 -> '-562.67' -fmax36096 fma 1 '-56267E-1' 0 -> '-5626.7' -fmax36097 fma 1 '-56267E-0' 0 -> '-56267' -fmax36098 fma 1 '-5E-10' 0 -> '-5E-10' -fmax36099 fma 1 '-5E-7' 0 -> '-5E-7' -fmax36100 fma 1 '-5E-6' 0 -> '-0.000005' -fmax36101 fma 1 '-5E-5' 0 -> '-0.00005' -fmax36102 fma 1 '-5E-4' 0 -> '-0.0005' -fmax36103 fma 1 '-5E-1' 0 -> '-0.5' -fmax36104 fma 1 '-5E0' 0 -> '-5' -fmax36105 fma 1 '-5E1' 0 -> '-50' -fmax36106 fma 1 '-5E5' 0 -> '-500000' -fmax36107 fma 1 '-5E15' 0 -> '-5000000000000000' -fmax36108 fma 1 '-5E16' 0 -> '-5.000000000000000E+16' Rounded -fmax36109 fma 1 '-5E17' 0 -> '-5.000000000000000E+17' Rounded -fmax36110 fma 1 '-5E18' 0 -> '-5.000000000000000E+18' Rounded -fmax36111 fma 1 '-5E100' 0 -> '-5.000000000000000E+100' Rounded - --- more RHS swaps -fmax36113 fma 1 0 '-56267E-10' -> '-0.0000056267' -fmax36114 fma 1 0 '-56267E-6' -> '-0.056267' -fmax36116 fma 1 0 '-56267E-5' -> '-0.56267' -fmax36117 fma 1 0 '-56267E-4' -> '-5.6267' -fmax36119 fma 1 0 '-56267E-3' -> '-56.267' -fmax36120 fma 1 0 '-56267E-2' -> '-562.67' -fmax36121 fma 1 0 '-56267E-1' -> '-5626.7' -fmax36122 fma 1 0 '-56267E-0' -> '-56267' -fmax36123 fma 1 0 '-5E-10' -> '-5E-10' -fmax36124 fma 1 0 '-5E-7' -> '-5E-7' -fmax36125 fma 1 0 '-5E-6' -> '-0.000005' -fmax36126 fma 1 0 '-5E-5' -> '-0.00005' -fmax36127 fma 1 0 '-5E-4' -> '-0.0005' -fmax36128 fma 1 0 '-5E-1' -> '-0.5' -fmax36129 fma 1 0 '-5E0' -> '-5' -fmax36130 fma 1 0 '-5E1' -> '-50' -fmax36131 fma 1 0 '-5E5' -> '-500000' -fmax36132 fma 1 0 '-5E15' -> '-5000000000000000' -fmax36133 fma 1 0 '-5E16' -> '-5.000000000000000E+16' Rounded -fmax36134 fma 1 0 '-5E17' -> '-5.000000000000000E+17' Rounded -fmax36135 fma 1 0 '-5E18' -> '-5.000000000000000E+18' Rounded -fmax36136 fma 1 0 '-5E100' -> '-5.000000000000000E+100' Rounded - --- related -fmax36137 fma 1 1 '0E-19' -> '1.000000000000000' Rounded -fmax36138 fma 1 -1 '0E-19' -> '-1.000000000000000' Rounded -fmax36139 fma 1 '0E-19' 1 -> '1.000000000000000' Rounded -fmax36140 fma 1 '0E-19' -1 -> '-1.000000000000000' Rounded -fmax36141 fma 1 1E+11 0.0000 -> '100000000000.0000' -fmax36142 fma 1 1E+11 0.00000 -> '100000000000.0000' Rounded -fmax36143 fma 1 0.000 1E+12 -> '1000000000000.000' -fmax36144 fma 1 0.0000 1E+12 -> '1000000000000.000' Rounded - --- [some of the next group are really constructor tests] -fmax36146 fma 1 '00.0' 0 -> '0.0' -fmax36147 fma 1 '0.00' 0 -> '0.00' -fmax36148 fma 1 0 '0.00' -> '0.00' -fmax36149 fma 1 0 '00.0' -> '0.0' -fmax36150 fma 1 '00.0' '0.00' -> '0.00' -fmax36151 fma 1 '0.00' '00.0' -> '0.00' -fmax36152 fma 1 '3' '.3' -> '3.3' -fmax36153 fma 1 '3.' '.3' -> '3.3' -fmax36154 fma 1 '3.0' '.3' -> '3.3' -fmax36155 fma 1 '3.00' '.3' -> '3.30' -fmax36156 fma 1 '3' '3' -> '6' -fmax36157 fma 1 '3' '+3' -> '6' -fmax36158 fma 1 '3' '-3' -> '0' -fmax36159 fma 1 '0.3' '-0.3' -> '0.0' -fmax36160 fma 1 '0.03' '-0.03' -> '0.00' - --- try borderline precision, with carries, etc. -fmax36161 fma 1 '1E+13' '-1' -> '9999999999999' -fmax36162 fma 1 '1E+13' '1.11' -> '10000000000001.11' -fmax36163 fma 1 '1.11' '1E+13' -> '10000000000001.11' -fmax36164 fma 1 '-1' '1E+13' -> '9999999999999' -fmax36165 fma 1 '7E+13' '-1' -> '69999999999999' -fmax36166 fma 1 '7E+13' '1.11' -> '70000000000001.11' -fmax36167 fma 1 '1.11' '7E+13' -> '70000000000001.11' -fmax36168 fma 1 '-1' '7E+13' -> '69999999999999' - --- 1234567890123456 1234567890123456 1 234567890123456 -fmax36170 fma 1 '0.4444444444444444' '0.5555555555555563' -> '1.000000000000001' Inexact Rounded -fmax36171 fma 1 '0.4444444444444444' '0.5555555555555562' -> '1.000000000000001' Inexact Rounded -fmax36172 fma 1 '0.4444444444444444' '0.5555555555555561' -> '1.000000000000000' Inexact Rounded -fmax36173 fma 1 '0.4444444444444444' '0.5555555555555560' -> '1.000000000000000' Inexact Rounded -fmax36174 fma 1 '0.4444444444444444' '0.5555555555555559' -> '1.000000000000000' Inexact Rounded -fmax36175 fma 1 '0.4444444444444444' '0.5555555555555558' -> '1.000000000000000' Inexact Rounded -fmax36176 fma 1 '0.4444444444444444' '0.5555555555555557' -> '1.000000000000000' Inexact Rounded -fmax36177 fma 1 '0.4444444444444444' '0.5555555555555556' -> '1.000000000000000' Rounded -fmax36178 fma 1 '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' -fmax36179 fma 1 '0.4444444444444444' '0.5555555555555554' -> '0.9999999999999998' -fmax36180 fma 1 '0.4444444444444444' '0.5555555555555553' -> '0.9999999999999997' -fmax36181 fma 1 '0.4444444444444444' '0.5555555555555552' -> '0.9999999999999996' -fmax36182 fma 1 '0.4444444444444444' '0.5555555555555551' -> '0.9999999999999995' -fmax36183 fma 1 '0.4444444444444444' '0.5555555555555550' -> '0.9999999999999994' - --- and some more, including residue effects and different roundings -rounding: half_up -fmax36200 fma 1 '6543210123456789' 0 -> '6543210123456789' -fmax36201 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -fmax36202 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -fmax36203 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -fmax36204 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -fmax36205 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -fmax36206 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36207 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36208 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -fmax36209 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -fmax36210 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -fmax36211 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -fmax36212 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -fmax36213 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -fmax36214 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -fmax36215 fma 1 '6543210123456789' 0.999999 -> '6543210123456790' Inexact Rounded -fmax36216 fma 1 '6543210123456789' 1 -> '6543210123456790' -fmax36217 fma 1 '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded -fmax36218 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -fmax36219 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - -rounding: half_even -fmax36220 fma 1 '6543210123456789' 0 -> '6543210123456789' -fmax36221 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -fmax36222 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -fmax36223 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -fmax36224 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -fmax36225 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -fmax36226 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36227 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36228 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded -fmax36229 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded -fmax36230 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded -fmax36231 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded -fmax36232 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded -fmax36233 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded -fmax36234 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded -fmax36235 fma 1 '6543210123456789' 0.999999 -> '6543210123456790' Inexact Rounded -fmax36236 fma 1 '6543210123456789' 1 -> '6543210123456790' -fmax36237 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -fmax36238 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -fmax36239 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded --- critical few with even bottom digit... -fmax36240 fma 1 '6543210123456788' 0.499999 -> '6543210123456788' Inexact Rounded -fmax36241 fma 1 '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded -fmax36242 fma 1 '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded - -rounding: down -fmax36250 fma 1 '6543210123456789' 0 -> '6543210123456789' -fmax36251 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded -fmax36252 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded -fmax36253 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded -fmax36254 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded -fmax36255 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded -fmax36256 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36257 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded -fmax36258 fma 1 '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded -fmax36259 fma 1 '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded -fmax36260 fma 1 '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded -fmax36261 fma 1 '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded -fmax36262 fma 1 '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded -fmax36263 fma 1 '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded -fmax36264 fma 1 '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded -fmax36265 fma 1 '6543210123456789' 0.999999 -> '6543210123456789' Inexact Rounded -fmax36266 fma 1 '6543210123456789' 1 -> '6543210123456790' -fmax36267 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded -fmax36268 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded -fmax36269 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded - --- 1 in last place tests -rounding: half_even -fmax36301 fma 1 -1 1 -> 0 -fmax36302 fma 1 0 1 -> 1 -fmax36303 fma 1 1 1 -> 2 -fmax36304 fma 1 12 1 -> 13 -fmax36305 fma 1 98 1 -> 99 -fmax36306 fma 1 99 1 -> 100 -fmax36307 fma 1 100 1 -> 101 -fmax36308 fma 1 101 1 -> 102 -fmax36309 fma 1 -1 -1 -> -2 -fmax36310 fma 1 0 -1 -> -1 -fmax36311 fma 1 1 -1 -> 0 -fmax36312 fma 1 12 -1 -> 11 -fmax36313 fma 1 98 -1 -> 97 -fmax36314 fma 1 99 -1 -> 98 -fmax36315 fma 1 100 -1 -> 99 -fmax36316 fma 1 101 -1 -> 100 - -fmax36321 fma 1 -0.01 0.01 -> 0.00 -fmax36322 fma 1 0.00 0.01 -> 0.01 -fmax36323 fma 1 0.01 0.01 -> 0.02 -fmax36324 fma 1 0.12 0.01 -> 0.13 -fmax36325 fma 1 0.98 0.01 -> 0.99 -fmax36326 fma 1 0.99 0.01 -> 1.00 -fmax36327 fma 1 1.00 0.01 -> 1.01 -fmax36328 fma 1 1.01 0.01 -> 1.02 -fmax36329 fma 1 -0.01 -0.01 -> -0.02 -fmax36330 fma 1 0.00 -0.01 -> -0.01 -fmax36331 fma 1 0.01 -0.01 -> 0.00 -fmax36332 fma 1 0.12 -0.01 -> 0.11 -fmax36333 fma 1 0.98 -0.01 -> 0.97 -fmax36334 fma 1 0.99 -0.01 -> 0.98 -fmax36335 fma 1 1.00 -0.01 -> 0.99 -fmax36336 fma 1 1.01 -0.01 -> 1.00 - --- some more cases where fma 1 ing 0 affects the coefficient -fmax36340 fma 1 1E+3 0 -> 1000 -fmax36341 fma 1 1E+15 0 -> 1000000000000000 -fmax36342 fma 1 1E+16 0 -> 1.000000000000000E+16 Rounded -fmax36343 fma 1 1E+17 0 -> 1.000000000000000E+17 Rounded --- which simply follow from these cases ... -fmax36344 fma 1 1E+3 1 -> 1001 -fmax36345 fma 1 1E+15 1 -> 1000000000000001 -fmax36346 fma 1 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded -fmax36347 fma 1 1E+17 1 -> 1.000000000000000E+17 Inexact Rounded -fmax36348 fma 1 1E+3 7 -> 1007 -fmax36349 fma 1 1E+15 7 -> 1000000000000007 -fmax36350 fma 1 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded -fmax36351 fma 1 1E+17 7 -> 1.000000000000000E+17 Inexact Rounded - --- tryzeros cases -fmax36361 fma 1 0E+50 10000E+1 -> 1.0000E+5 -fmax36362 fma 1 10000E+1 0E-50 -> 100000.0000000000 Rounded -fmax36363 fma 1 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact -fmax36364 fma 1 12.34 0e-398 -> 12.34000000000000 Rounded - --- ulp replacement tests -fmax36400 fma 1 1 77e-14 -> 1.00000000000077 -fmax36401 fma 1 1 77e-15 -> 1.000000000000077 -fmax36402 fma 1 1 77e-16 -> 1.000000000000008 Inexact Rounded -fmax36403 fma 1 1 77e-17 -> 1.000000000000001 Inexact Rounded -fmax36404 fma 1 1 77e-18 -> 1.000000000000000 Inexact Rounded -fmax36405 fma 1 1 77e-19 -> 1.000000000000000 Inexact Rounded -fmax36406 fma 1 1 77e-99 -> 1.000000000000000 Inexact Rounded - -fmax36410 fma 1 10 77e-14 -> 10.00000000000077 -fmax36411 fma 1 10 77e-15 -> 10.00000000000008 Inexact Rounded -fmax36412 fma 1 10 77e-16 -> 10.00000000000001 Inexact Rounded -fmax36413 fma 1 10 77e-17 -> 10.00000000000000 Inexact Rounded -fmax36414 fma 1 10 77e-18 -> 10.00000000000000 Inexact Rounded -fmax36415 fma 1 10 77e-19 -> 10.00000000000000 Inexact Rounded -fmax36416 fma 1 10 77e-99 -> 10.00000000000000 Inexact Rounded - -fmax36420 fma 1 77e-14 1 -> 1.00000000000077 -fmax36421 fma 1 77e-15 1 -> 1.000000000000077 -fmax36422 fma 1 77e-16 1 -> 1.000000000000008 Inexact Rounded -fmax36423 fma 1 77e-17 1 -> 1.000000000000001 Inexact Rounded -fmax36424 fma 1 77e-18 1 -> 1.000000000000000 Inexact Rounded -fmax36425 fma 1 77e-19 1 -> 1.000000000000000 Inexact Rounded -fmax36426 fma 1 77e-99 1 -> 1.000000000000000 Inexact Rounded - -fmax36430 fma 1 77e-14 10 -> 10.00000000000077 -fmax36431 fma 1 77e-15 10 -> 10.00000000000008 Inexact Rounded -fmax36432 fma 1 77e-16 10 -> 10.00000000000001 Inexact Rounded -fmax36433 fma 1 77e-17 10 -> 10.00000000000000 Inexact Rounded -fmax36434 fma 1 77e-18 10 -> 10.00000000000000 Inexact Rounded -fmax36435 fma 1 77e-19 10 -> 10.00000000000000 Inexact Rounded -fmax36436 fma 1 77e-99 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -fmax36440 fma 1 1 -77e-14 -> 0.99999999999923 -fmax36441 fma 1 1 -77e-15 -> 0.999999999999923 -fmax36442 fma 1 1 -77e-16 -> 0.9999999999999923 -fmax36443 fma 1 1 -77e-17 -> 0.9999999999999992 Inexact Rounded -fmax36444 fma 1 1 -77e-18 -> 0.9999999999999999 Inexact Rounded -fmax36445 fma 1 1 -77e-19 -> 1.000000000000000 Inexact Rounded -fmax36446 fma 1 1 -77e-99 -> 1.000000000000000 Inexact Rounded - -fmax36450 fma 1 10 -77e-14 -> 9.99999999999923 -fmax36451 fma 1 10 -77e-15 -> 9.999999999999923 -fmax36452 fma 1 10 -77e-16 -> 9.999999999999992 Inexact Rounded -fmax36453 fma 1 10 -77e-17 -> 9.999999999999999 Inexact Rounded -fmax36454 fma 1 10 -77e-18 -> 10.00000000000000 Inexact Rounded -fmax36455 fma 1 10 -77e-19 -> 10.00000000000000 Inexact Rounded -fmax36456 fma 1 10 -77e-99 -> 10.00000000000000 Inexact Rounded - -fmax36460 fma 1 -77e-14 1 -> 0.99999999999923 -fmax36461 fma 1 -77e-15 1 -> 0.999999999999923 -fmax36462 fma 1 -77e-16 1 -> 0.9999999999999923 -fmax36463 fma 1 -77e-17 1 -> 0.9999999999999992 Inexact Rounded -fmax36464 fma 1 -77e-18 1 -> 0.9999999999999999 Inexact Rounded -fmax36465 fma 1 -77e-19 1 -> 1.000000000000000 Inexact Rounded -fmax36466 fma 1 -77e-99 1 -> 1.000000000000000 Inexact Rounded - -fmax36470 fma 1 -77e-14 10 -> 9.99999999999923 -fmax36471 fma 1 -77e-15 10 -> 9.999999999999923 -fmax36472 fma 1 -77e-16 10 -> 9.999999999999992 Inexact Rounded -fmax36473 fma 1 -77e-17 10 -> 9.999999999999999 Inexact Rounded -fmax36474 fma 1 -77e-18 10 -> 10.00000000000000 Inexact Rounded -fmax36475 fma 1 -77e-19 10 -> 10.00000000000000 Inexact Rounded -fmax36476 fma 1 -77e-99 10 -> 10.00000000000000 Inexact Rounded - --- negative ulps -fmax36480 fma 1 -1 77e-14 -> -0.99999999999923 -fmax36481 fma 1 -1 77e-15 -> -0.999999999999923 -fmax36482 fma 1 -1 77e-16 -> -0.9999999999999923 -fmax36483 fma 1 -1 77e-17 -> -0.9999999999999992 Inexact Rounded -fmax36484 fma 1 -1 77e-18 -> -0.9999999999999999 Inexact Rounded -fmax36485 fma 1 -1 77e-19 -> -1.000000000000000 Inexact Rounded -fmax36486 fma 1 -1 77e-99 -> -1.000000000000000 Inexact Rounded - -fmax36490 fma 1 -10 77e-14 -> -9.99999999999923 -fmax36491 fma 1 -10 77e-15 -> -9.999999999999923 -fmax36492 fma 1 -10 77e-16 -> -9.999999999999992 Inexact Rounded -fmax36493 fma 1 -10 77e-17 -> -9.999999999999999 Inexact Rounded -fmax36494 fma 1 -10 77e-18 -> -10.00000000000000 Inexact Rounded -fmax36495 fma 1 -10 77e-19 -> -10.00000000000000 Inexact Rounded -fmax36496 fma 1 -10 77e-99 -> -10.00000000000000 Inexact Rounded - -fmax36500 fma 1 77e-14 -1 -> -0.99999999999923 -fmax36501 fma 1 77e-15 -1 -> -0.999999999999923 -fmax36502 fma 1 77e-16 -1 -> -0.9999999999999923 -fmax36503 fma 1 77e-17 -1 -> -0.9999999999999992 Inexact Rounded -fmax36504 fma 1 77e-18 -1 -> -0.9999999999999999 Inexact Rounded -fmax36505 fma 1 77e-19 -1 -> -1.000000000000000 Inexact Rounded -fmax36506 fma 1 77e-99 -1 -> -1.000000000000000 Inexact Rounded - -fmax36510 fma 1 77e-14 -10 -> -9.99999999999923 -fmax36511 fma 1 77e-15 -10 -> -9.999999999999923 -fmax36512 fma 1 77e-16 -10 -> -9.999999999999992 Inexact Rounded -fmax36513 fma 1 77e-17 -10 -> -9.999999999999999 Inexact Rounded -fmax36514 fma 1 77e-18 -10 -> -10.00000000000000 Inexact Rounded -fmax36515 fma 1 77e-19 -10 -> -10.00000000000000 Inexact Rounded -fmax36516 fma 1 77e-99 -10 -> -10.00000000000000 Inexact Rounded - - --- long operands -fmax36521 fma 1 101234562345678000 0 -> 1.012345623456780E+17 Rounded -fmax36522 fma 1 0 101234562345678000 -> 1.012345623456780E+17 Rounded -fmax36523 fma 1 10123456234567800 0 -> 1.012345623456780E+16 Rounded -fmax36524 fma 1 0 10123456234567800 -> 1.012345623456780E+16 Rounded -fmax36525 fma 1 10123456234567890 0 -> 1.012345623456789E+16 Rounded -fmax36526 fma 1 0 10123456234567890 -> 1.012345623456789E+16 Rounded -fmax36527 fma 1 10123456234567891 0 -> 1.012345623456789E+16 Inexact Rounded -fmax36528 fma 1 0 10123456234567891 -> 1.012345623456789E+16 Inexact Rounded -fmax36529 fma 1 101234562345678901 0 -> 1.012345623456789E+17 Inexact Rounded -fmax36530 fma 1 0 101234562345678901 -> 1.012345623456789E+17 Inexact Rounded -fmax36531 fma 1 10123456234567896 0 -> 1.012345623456790E+16 Inexact Rounded -fmax36532 fma 1 0 10123456234567896 -> 1.012345623456790E+16 Inexact Rounded - --- verify a query -rounding: down -fmax36561 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded -fmax36562 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded --- and using decimal64 bounds... -rounding: down -fmax36563 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded -fmax36564 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded - --- more zeros, etc. -rounding: half_even - -fmax36701 fma 1 5.00 1.00E-3 -> 5.00100 -fmax36702 fma 1 00.00 0.000 -> 0.000 -fmax36703 fma 1 00.00 0E-3 -> 0.000 -fmax36704 fma 1 0E-3 00.00 -> 0.000 - -fmax36710 fma 1 0E+3 00.00 -> 0.00 -fmax36711 fma 1 0E+3 00.0 -> 0.0 -fmax36712 fma 1 0E+3 00. -> 0 -fmax36713 fma 1 0E+3 00.E+1 -> 0E+1 -fmax36714 fma 1 0E+3 00.E+2 -> 0E+2 -fmax36715 fma 1 0E+3 00.E+3 -> 0E+3 -fmax36716 fma 1 0E+3 00.E+4 -> 0E+3 -fmax36717 fma 1 0E+3 00.E+5 -> 0E+3 -fmax36718 fma 1 0E+3 -00.0 -> 0.0 -fmax36719 fma 1 0E+3 -00. -> 0 -fmax36731 fma 1 0E+3 -00.E+1 -> 0E+1 - -fmax36720 fma 1 00.00 0E+3 -> 0.00 -fmax36721 fma 1 00.0 0E+3 -> 0.0 -fmax36722 fma 1 00. 0E+3 -> 0 -fmax36723 fma 1 00.E+1 0E+3 -> 0E+1 -fmax36724 fma 1 00.E+2 0E+3 -> 0E+2 -fmax36725 fma 1 00.E+3 0E+3 -> 0E+3 -fmax36726 fma 1 00.E+4 0E+3 -> 0E+3 -fmax36727 fma 1 00.E+5 0E+3 -> 0E+3 -fmax36728 fma 1 -00.00 0E+3 -> 0.00 -fmax36729 fma 1 -00.0 0E+3 -> 0.0 -fmax36730 fma 1 -00. 0E+3 -> 0 - -fmax36732 fma 1 0 0 -> 0 -fmax36733 fma 1 0 -0 -> 0 -fmax36734 fma 1 -0 0 -> 0 -fmax36735 fma 1 -0 -0 -> -0 -- IEEE 854 special case - -fmax36736 fma 1 1 -1 -> 0 -fmax36737 fma 1 -1 -1 -> -2 -fmax36738 fma 1 1 1 -> 2 -fmax36739 fma 1 -1 1 -> 0 - -fmax36741 fma 1 0 -1 -> -1 -fmax36742 fma 1 -0 -1 -> -1 -fmax36743 fma 1 0 1 -> 1 -fmax36744 fma 1 -0 1 -> 1 -fmax36745 fma 1 -1 0 -> -1 -fmax36746 fma 1 -1 -0 -> -1 -fmax36747 fma 1 1 0 -> 1 -fmax36748 fma 1 1 -0 -> 1 - -fmax36751 fma 1 0.0 -1 -> -1.0 -fmax36752 fma 1 -0.0 -1 -> -1.0 -fmax36753 fma 1 0.0 1 -> 1.0 -fmax36754 fma 1 -0.0 1 -> 1.0 -fmax36755 fma 1 -1.0 0 -> -1.0 -fmax36756 fma 1 -1.0 -0 -> -1.0 -fmax36757 fma 1 1.0 0 -> 1.0 -fmax36758 fma 1 1.0 -0 -> 1.0 - -fmax36761 fma 1 0 -1.0 -> -1.0 -fmax36762 fma 1 -0 -1.0 -> -1.0 -fmax36763 fma 1 0 1.0 -> 1.0 -fmax36764 fma 1 -0 1.0 -> 1.0 -fmax36765 fma 1 -1 0.0 -> -1.0 -fmax36766 fma 1 -1 -0.0 -> -1.0 -fmax36767 fma 1 1 0.0 -> 1.0 -fmax36768 fma 1 1 -0.0 -> 1.0 - -fmax36771 fma 1 0.0 -1.0 -> -1.0 -fmax36772 fma 1 -0.0 -1.0 -> -1.0 -fmax36773 fma 1 0.0 1.0 -> 1.0 -fmax36774 fma 1 -0.0 1.0 -> 1.0 -fmax36775 fma 1 -1.0 0.0 -> -1.0 -fmax36776 fma 1 -1.0 -0.0 -> -1.0 -fmax36777 fma 1 1.0 0.0 -> 1.0 -fmax36778 fma 1 1.0 -0.0 -> 1.0 - --- Specials -fmax36780 fma 1 -Inf -Inf -> -Infinity -fmax36781 fma 1 -Inf -1000 -> -Infinity -fmax36782 fma 1 -Inf -1 -> -Infinity -fmax36783 fma 1 -Inf -0 -> -Infinity -fmax36784 fma 1 -Inf 0 -> -Infinity -fmax36785 fma 1 -Inf 1 -> -Infinity -fmax36786 fma 1 -Inf 1000 -> -Infinity -fmax36787 fma 1 -1000 -Inf -> -Infinity -fmax36788 fma 1 -Inf -Inf -> -Infinity -fmax36789 fma 1 -1 -Inf -> -Infinity -fmax36790 fma 1 -0 -Inf -> -Infinity -fmax36791 fma 1 0 -Inf -> -Infinity -fmax36792 fma 1 1 -Inf -> -Infinity -fmax36793 fma 1 1000 -Inf -> -Infinity -fmax36794 fma 1 Inf -Inf -> NaN Invalid_operation - -fmax36800 fma 1 Inf -Inf -> NaN Invalid_operation -fmax36801 fma 1 Inf -1000 -> Infinity -fmax36802 fma 1 Inf -1 -> Infinity -fmax36803 fma 1 Inf -0 -> Infinity -fmax36804 fma 1 Inf 0 -> Infinity -fmax36805 fma 1 Inf 1 -> Infinity -fmax36806 fma 1 Inf 1000 -> Infinity -fmax36807 fma 1 Inf Inf -> Infinity -fmax36808 fma 1 -1000 Inf -> Infinity -fmax36809 fma 1 -Inf Inf -> NaN Invalid_operation -fmax36810 fma 1 -1 Inf -> Infinity -fmax36811 fma 1 -0 Inf -> Infinity -fmax36812 fma 1 0 Inf -> Infinity -fmax36813 fma 1 1 Inf -> Infinity -fmax36814 fma 1 1000 Inf -> Infinity -fmax36815 fma 1 Inf Inf -> Infinity - -fmax36821 fma 1 NaN -Inf -> NaN -fmax36822 fma 1 NaN -1000 -> NaN -fmax36823 fma 1 NaN -1 -> NaN -fmax36824 fma 1 NaN -0 -> NaN -fmax36825 fma 1 NaN 0 -> NaN -fmax36826 fma 1 NaN 1 -> NaN -fmax36827 fma 1 NaN 1000 -> NaN -fmax36828 fma 1 NaN Inf -> NaN -fmax36829 fma 1 NaN NaN -> NaN -fmax36830 fma 1 -Inf NaN -> NaN -fmax36831 fma 1 -1000 NaN -> NaN -fmax36832 fma 1 -1 NaN -> NaN -fmax36833 fma 1 -0 NaN -> NaN -fmax36834 fma 1 0 NaN -> NaN -fmax36835 fma 1 1 NaN -> NaN -fmax36836 fma 1 1000 NaN -> NaN -fmax36837 fma 1 Inf NaN -> NaN - -fmax36841 fma 1 sNaN -Inf -> NaN Invalid_operation -fmax36842 fma 1 sNaN -1000 -> NaN Invalid_operation -fmax36843 fma 1 sNaN -1 -> NaN Invalid_operation -fmax36844 fma 1 sNaN -0 -> NaN Invalid_operation -fmax36845 fma 1 sNaN 0 -> NaN Invalid_operation -fmax36846 fma 1 sNaN 1 -> NaN Invalid_operation -fmax36847 fma 1 sNaN 1000 -> NaN Invalid_operation -fmax36848 fma 1 sNaN NaN -> NaN Invalid_operation -fmax36849 fma 1 sNaN sNaN -> NaN Invalid_operation -fmax36850 fma 1 NaN sNaN -> NaN Invalid_operation -fmax36851 fma 1 -Inf sNaN -> NaN Invalid_operation -fmax36852 fma 1 -1000 sNaN -> NaN Invalid_operation -fmax36853 fma 1 -1 sNaN -> NaN Invalid_operation -fmax36854 fma 1 -0 sNaN -> NaN Invalid_operation -fmax36855 fma 1 0 sNaN -> NaN Invalid_operation -fmax36856 fma 1 1 sNaN -> NaN Invalid_operation -fmax36857 fma 1 1000 sNaN -> NaN Invalid_operation -fmax36858 fma 1 Inf sNaN -> NaN Invalid_operation -fmax36859 fma 1 NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -fmax36861 fma 1 NaN1 -Inf -> NaN1 -fmax36862 fma 1 +NaN2 -1000 -> NaN2 -fmax36863 fma 1 NaN3 1000 -> NaN3 -fmax36864 fma 1 NaN4 Inf -> NaN4 -fmax36865 fma 1 NaN5 +NaN6 -> NaN5 -fmax36866 fma 1 -Inf NaN7 -> NaN7 -fmax36867 fma 1 -1000 NaN8 -> NaN8 -fmax36868 fma 1 1000 NaN9 -> NaN9 -fmax36869 fma 1 Inf +NaN10 -> NaN10 -fmax36871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation -fmax36872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation -fmax36873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation -fmax36874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation -fmax36875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation -fmax36876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation -fmax36877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation -fmax36878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation -fmax36879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation -fmax36880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation -fmax36881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation -fmax36882 fma 1 -NaN26 NaN28 -> -NaN26 -fmax36883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation -fmax36884 fma 1 1000 -NaN30 -> -NaN30 -fmax36885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation - --- now the case where we can get underflow but the result is normal --- [note this can't happen if the operands are also bounded, as we --- cannot represent 1E-399, for example] - -fmax36571 fma 1 1E-383 0 -> 1E-383 -fmax36572 fma 1 1E-384 0 -> 1E-384 Subnormal -fmax36573 fma 1 1E-383 1E-384 -> 1.1E-383 -fmax36574 subtract 1E-383 1E-384 -> 9E-384 Subnormal - --- Here we explore the boundary of rounding a subnormal to Nmin -fmax36575 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal -fmax36576 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal -fmax36577 subtract 1E-383 1E-399 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax36578 subtract 1E-383 1E-400 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax36579 subtract 1E-383 1E-401 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded -fmax36580 subtract 1E-383 1E-402 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded - --- check overflow edge case --- 1234567890123456 -fmax36972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 -fmax36973 fma 1 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded -fmax36974 fma 1 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded -fmax36975 fma 1 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded -fmax36976 fma 1 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded -fmax36977 fma 1 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded -fmax36978 fma 1 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded -fmax36979 fma 1 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded -fmax36980 fma 1 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded -fmax36981 fma 1 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded -fmax36982 fma 1 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded -fmax36983 fma 1 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded -fmax36984 fma 1 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded - -fmax36985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 -fmax36986 fma 1 -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded -fmax36987 fma 1 -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded -fmax36988 fma 1 -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded -fmax36989 fma 1 -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded -fmax36990 fma 1 -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded -fmax36991 fma 1 -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded -fmax36992 fma 1 -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded -fmax36993 fma 1 -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded -fmax36994 fma 1 -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded -fmax36995 fma 1 -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded -fmax36996 fma 1 -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded -fmax36997 fma 1 -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded - --- And for round down full and subnormal results -rounding: down -fmax361100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact -fmax361101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact -fmax361103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact -fmax361104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact -fmax361105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact -fmax361106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact -fmax361107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact -fmax361108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact -fmax361109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact - -rounding: ceiling -fmax361110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact -fmax361111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact -fmax361113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact -fmax361114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact -fmax361115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact -fmax361116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact -fmax361117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact -fmax361118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact -fmax361119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact - --- tests based on Gunnar Degnbol's edge case -rounding: half_even - -fmax361300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded -fmax361310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded -fmax361311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded -fmax361312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded -fmax361313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded -fmax361314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded -fmax361315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded -fmax361316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded -fmax361317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded -fmax361318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded -fmax361319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded -fmax361320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded -fmax361321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded -fmax361322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded -fmax361323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded -fmax361324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded -fmax361325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded -fmax361336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded -fmax361337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded -fmax361338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded -fmax361339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded - -fmax361340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded -fmax361341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded - -fmax361349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded -fmax361350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded -fmax361351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded -fmax361352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded -fmax361353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded -fmax361354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded -fmax361355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded -fmax361356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded -fmax361357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded -fmax361358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded -fmax361359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded -fmax361360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded -fmax361361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded -fmax361362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded -fmax361363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded -fmax361364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded -fmax361365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded -fmax361376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded -fmax361377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded -fmax361378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded -fmax361379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded -fmax361380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded -fmax361381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded -fmax361382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded -fmax361392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded -fmax361393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded -fmax361394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded -fmax361395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded -fmax361396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded - --- More GD edge cases, where difference between the unadjusted --- exponents is larger than the maximum precision and one side is 0 -fmax361420 fma 1 0 1.123456789012345 -> 1.123456789012345 -fmax361421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 -fmax361422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 -fmax361423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 -fmax361424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 -fmax361425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 -fmax361426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 -fmax361427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 -fmax361428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 -fmax361429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 -fmax361430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 -fmax361431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 -fmax361432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 -fmax361433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 -fmax361434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 -fmax361435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 -fmax361436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 -fmax361437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 -fmax361438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 -fmax361439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 - --- same, reversed 0 -fmax361440 fma 1 1.123456789012345 0 -> 1.123456789012345 -fmax361441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 -fmax361442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 -fmax361443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 -fmax361444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 -fmax361445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 -fmax361446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 -fmax361447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 -fmax361448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 -fmax361449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 -fmax361450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 -fmax361451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 -fmax361452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 -fmax361453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 -fmax361454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 -fmax361455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 -fmax361456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 -fmax361457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 -fmax361458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 -fmax361459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 - --- same, Es on the 0 -fmax361460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 -fmax361461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 -fmax361462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 -fmax361463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 -fmax361464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 -fmax361465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 -fmax361466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 -fmax361467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 -fmax361468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 -fmax361469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 -fmax361470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 -fmax361471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 -fmax361472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 -fmax361473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 -fmax361474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 -fmax361475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 --- next four flag Rounded because the 0 extends the result -fmax361476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded -fmax361477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded -fmax361478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded -fmax361479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded - --- sum of two opposite-sign operands is exactly 0 and floor => -0 -rounding: half_up --- exact zeros from zeros -fmax361500 fma 1 0 0E-19 -> 0E-19 -fmax361501 fma 1 -0 0E-19 -> 0E-19 -fmax361502 fma 1 0 -0E-19 -> 0E-19 -fmax361503 fma 1 -0 -0E-19 -> -0E-19 -fmax361504 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361505 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361506 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361507 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361511 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361512 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361513 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361514 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361515 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361516 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361517 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361518 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: half_down --- exact zeros from zeros -fmax361520 fma 1 0 0E-19 -> 0E-19 -fmax361521 fma 1 -0 0E-19 -> 0E-19 -fmax361522 fma 1 0 -0E-19 -> 0E-19 -fmax361523 fma 1 -0 -0E-19 -> -0E-19 -fmax361524 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361525 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361526 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361527 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361531 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361532 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361533 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361534 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361535 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361536 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361537 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361538 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: half_even --- exact zeros from zeros -fmax361540 fma 1 0 0E-19 -> 0E-19 -fmax361541 fma 1 -0 0E-19 -> 0E-19 -fmax361542 fma 1 0 -0E-19 -> 0E-19 -fmax361543 fma 1 -0 -0E-19 -> -0E-19 -fmax361544 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361545 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361546 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361547 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361551 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361552 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361553 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361554 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361555 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361556 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361557 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361558 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: up --- exact zeros from zeros -fmax361560 fma 1 0 0E-19 -> 0E-19 -fmax361561 fma 1 -0 0E-19 -> 0E-19 -fmax361562 fma 1 0 -0E-19 -> 0E-19 -fmax361563 fma 1 -0 -0E-19 -> -0E-19 -fmax361564 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361565 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361566 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361567 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361571 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361572 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361573 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow -fmax361574 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow --- some exact zeros from non-zeros -fmax361575 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361576 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361577 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361578 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow - -rounding: down --- exact zeros from zeros -fmax361580 fma 1 0 0E-19 -> 0E-19 -fmax361581 fma 1 -0 0E-19 -> 0E-19 -fmax361582 fma 1 0 -0E-19 -> 0E-19 -fmax361583 fma 1 -0 -0E-19 -> -0E-19 -fmax361584 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361585 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361586 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361587 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361591 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361592 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361593 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361594 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361595 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361596 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361597 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361598 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - -rounding: ceiling --- exact zeros from zeros -fmax361600 fma 1 0 0E-19 -> 0E-19 -fmax361601 fma 1 -0 0E-19 -> 0E-19 -fmax361602 fma 1 0 -0E-19 -> 0E-19 -fmax361603 fma 1 -0 -0E-19 -> -0E-19 -fmax361604 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361605 fma 1 -0E-400 0E-19 -> 0E-398 Clamped -fmax361606 fma 1 0E-400 -0E-19 -> 0E-398 Clamped -fmax361607 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361611 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361612 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361613 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361614 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped --- some exact zeros from non-zeros -fmax361615 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow -fmax361616 fma 1 -1E-401 1E-401 -> 0E-398 Clamped -fmax361617 fma 1 1E-401 -1E-401 -> 0E-398 Clamped -fmax361618 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped - --- and the extra-special ugly case; unusual minuses marked by -- * -rounding: floor --- exact zeros from zeros -fmax361620 fma 1 0 0E-19 -> 0E-19 -fmax361621 fma 1 -0 0E-19 -> -0E-19 -- * -fmax361622 fma 1 0 -0E-19 -> -0E-19 -- * -fmax361623 fma 1 -0 -0E-19 -> -0E-19 -fmax361624 fma 1 0E-400 0E-19 -> 0E-398 Clamped -fmax361625 fma 1 -0E-400 0E-19 -> -0E-398 Clamped -- * -fmax361626 fma 1 0E-400 -0E-19 -> -0E-398 Clamped -- * -fmax361627 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped --- inexact zeros -fmax361631 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361632 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361633 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow -fmax361634 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow --- some exact zeros from non-zeros -fmax361635 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped -fmax361636 fma 1 -1E-401 1E-401 -> -0E-398 Clamped -- * -fmax361637 fma 1 1E-401 -1E-401 -> -0E-398 Clamped -- * -fmax361638 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow - --- Examples from SQL proposal (Krishna Kulkarni) -fmax361701 fma 1 130E-2 120E-2 -> 2.50 -fmax361702 fma 1 130E-2 12E-1 -> 2.50 -fmax361703 fma 1 130E-2 1E0 -> 2.30 -fmax361704 fma 1 1E2 1E4 -> 1.01E+4 -fmax361705 subtract 130E-2 120E-2 -> 0.10 -fmax361706 subtract 130E-2 12E-1 -> 0.10 -fmax361707 subtract 130E-2 1E0 -> 0.30 -fmax361708 subtract 1E2 1E4 -> -9.9E+3 - --- Gappy coefficients; check residue handling even with full coefficient gap -rounding: half_even - -fmax362001 fma 1 1234567890123456 1 -> 1234567890123457 -fmax362002 fma 1 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded -fmax362003 fma 1 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded -fmax362004 fma 1 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded -fmax362005 fma 1 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded -fmax362006 fma 1 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded -fmax362007 fma 1 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded -fmax362008 fma 1 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded -fmax362009 fma 1 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded -fmax362010 fma 1 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded -fmax362011 fma 1 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded -fmax362012 fma 1 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded -fmax362013 fma 1 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded -fmax362014 fma 1 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded -fmax362015 fma 1 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded -fmax362016 fma 1 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded -fmax362017 fma 1 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded -fmax362018 fma 1 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded -fmax362019 fma 1 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded -fmax362020 fma 1 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded -fmax362021 fma 1 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded - --- widening second argument at gap -fmax362030 fma 1 12345678 1 -> 12345679 -fmax362031 fma 1 12345678 0.1 -> 12345678.1 -fmax362032 fma 1 12345678 0.12 -> 12345678.12 -fmax362033 fma 1 12345678 0.123 -> 12345678.123 -fmax362034 fma 1 12345678 0.1234 -> 12345678.1234 -fmax362035 fma 1 12345678 0.12345 -> 12345678.12345 -fmax362036 fma 1 12345678 0.123456 -> 12345678.123456 -fmax362037 fma 1 12345678 0.1234567 -> 12345678.1234567 -fmax362038 fma 1 12345678 0.12345678 -> 12345678.12345678 -fmax362039 fma 1 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded -fmax362040 fma 1 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded -fmax362041 fma 1 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded -fmax362042 fma 1 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded -fmax362043 fma 1 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded -fmax362044 fma 1 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded -fmax362045 fma 1 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded -fmax362046 fma 1 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded -fmax362047 fma 1 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded -fmax362048 fma 1 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded -fmax362049 fma 1 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded --- 90123456 -rounding: half_even -fmax362050 fma 1 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded -fmax362051 fma 1 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded -fmax362052 fma 1 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded -fmax362053 fma 1 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded -fmax362054 fma 1 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded -fmax362055 fma 1 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded -fmax362056 fma 1 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded -fmax362057 fma 1 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded -fmax362060 fma 1 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded -fmax362061 fma 1 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded -fmax362062 fma 1 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded -fmax362063 fma 1 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded -fmax362064 fma 1 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded -fmax362065 fma 1 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded -fmax362066 fma 1 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded -fmax362067 fma 1 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded --- far-out residues (full coefficient gap is 16+15 digits) -rounding: up -fmax362070 fma 1 12345678 1E-8 -> 12345678.00000001 -fmax362071 fma 1 12345678 1E-9 -> 12345678.00000001 Inexact Rounded -fmax362072 fma 1 12345678 1E-10 -> 12345678.00000001 Inexact Rounded -fmax362073 fma 1 12345678 1E-11 -> 12345678.00000001 Inexact Rounded -fmax362074 fma 1 12345678 1E-12 -> 12345678.00000001 Inexact Rounded -fmax362075 fma 1 12345678 1E-13 -> 12345678.00000001 Inexact Rounded -fmax362076 fma 1 12345678 1E-14 -> 12345678.00000001 Inexact Rounded -fmax362077 fma 1 12345678 1E-15 -> 12345678.00000001 Inexact Rounded -fmax362078 fma 1 12345678 1E-16 -> 12345678.00000001 Inexact Rounded -fmax362079 fma 1 12345678 1E-17 -> 12345678.00000001 Inexact Rounded -fmax362080 fma 1 12345678 1E-18 -> 12345678.00000001 Inexact Rounded -fmax362081 fma 1 12345678 1E-19 -> 12345678.00000001 Inexact Rounded -fmax362082 fma 1 12345678 1E-20 -> 12345678.00000001 Inexact Rounded -fmax362083 fma 1 12345678 1E-25 -> 12345678.00000001 Inexact Rounded -fmax362084 fma 1 12345678 1E-30 -> 12345678.00000001 Inexact Rounded -fmax362085 fma 1 12345678 1E-31 -> 12345678.00000001 Inexact Rounded -fmax362086 fma 1 12345678 1E-32 -> 12345678.00000001 Inexact Rounded -fmax362087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexact Rounded -fmax362088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded -fmax362089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded - --- payload decapitate x3 -precision: 5 -fmax363000 fma 1 1 sNaN1234567890 -> NaN67890 Invalid_operation -fmax363001 fma 1 -sNaN1234512345 1 -> -NaN12345 Invalid_operation -fmax363002 fma sNaN1234554321 1 1 -> NaN54321 Invalid_operation - --- Null tests -fmax39990 fma 1 10 # -> NaN Invalid_operation -fmax39991 fma 1 # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- fma.decTest -- decimal fused multiply add -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- These tests comprise three parts: +-- 1. Sanity checks and other three-operand tests (especially those +-- where the fused operation makes a difference) +-- 2. Multiply tests (third operand is neutral zero [0E+emax]) +-- 3. Addition tests (first operand is 1) +-- The multiply and addition tests are extensive because FMA may have +-- its own dedicated multiplication or addition routine(s), and they +-- also inherently check the left-to-right properties. + +-- Sanity checks +fmax0001 fma 1 1 1 -> 2 +fmax0002 fma 1 1 2 -> 3 +fmax0003 fma 2 2 3 -> 7 +fmax0004 fma 9 9 9 -> 90 +fmax0005 fma -1 1 1 -> 0 +fmax0006 fma -1 1 2 -> 1 +fmax0007 fma -2 2 3 -> -1 +fmax0008 fma -9 9 9 -> -72 +fmax0011 fma 1 -1 1 -> 0 +fmax0012 fma 1 -1 2 -> 1 +fmax0013 fma 2 -2 3 -> -1 +fmax0014 fma 9 -9 9 -> -72 +fmax0015 fma 1 1 -1 -> 0 +fmax0016 fma 1 1 -2 -> -1 +fmax0017 fma 2 2 -3 -> 1 +fmax0018 fma 9 9 -9 -> 72 +fmax0019 fma 3 5 7 -> 22 +fmax0029 fma 3 -5 7 -> -8 + +-- non-integer exacts +fma0100 fma 25.2 63.6 -438 -> 1164.72 +fma0101 fma 0.301 0.380 334 -> 334.114380 +fma0102 fma 49.2 -4.8 23.3 -> -212.86 +fma0103 fma 4.22 0.079 -94.6 -> -94.26662 +fma0104 fma 903 0.797 0.887 -> 720.578 +fma0105 fma 6.13 -161 65.9 -> -921.03 +fma0106 fma 28.2 727 5.45 -> 20506.85 +fma0107 fma 4 605 688 -> 3108 +fma0108 fma 93.3 0.19 0.226 -> 17.953 +fma0109 fma 0.169 -341 5.61 -> -52.019 +fma0110 fma -72.2 30 -51.2 -> -2217.2 +fma0111 fma -0.409 13 20.4 -> 15.083 +fma0112 fma 317 77.0 19.0 -> 24428.0 +fma0113 fma 47 6.58 1.62 -> 310.88 +fma0114 fma 1.36 0.984 0.493 -> 1.83124 +fma0115 fma 72.7 274 1.56 -> 19921.36 +fma0116 fma 335 847 83 -> 283828 +fma0117 fma 666 0.247 25.4 -> 189.902 +fma0118 fma -3.87 3.06 78.0 -> 66.1578 +fma0119 fma 0.742 192 35.6 -> 178.064 +fma0120 fma -91.6 5.29 0.153 -> -484.411 + +-- cases where result is different from separate multiply + add; each +-- is preceded by the result of unfused multiply and add +-- [this is about 20% of all similar cases in general] +-- 888565290 1557.96930 -86087.7578 -> 1.38435735E+12 +fma0201 fma 888565290 1557.96930 -86087.7578 -> 1.38435736E+12 Inexact Rounded +-- -85519342.9 735155419 42010431 -> -6.28700084E+16 +fma0205 fma -85519342.9 735155419 42010431 -> -6.28700083E+16 Inexact Rounded +-- -98025.5 -294603.472 10414348.2 -> 2.88890669E+10 +fma0208 fma -98025.5 -294603.472 10414348.2 -> 2.88890670E+10 Inexact Rounded +-- 5967627.39 83526540.6 498494.810 -> 4.98455271E+14 +fma0211 fma 5967627.39 83526540.6 498494.810 -> 4.98455272E+14 Inexact Rounded +-- 3456.9433 874.39518 197866.615 -> 3220601.18 +fma0216 fma 3456.9433 874.39518 197866.615 -> 3220601.17 Inexact Rounded +-- 62769.8287 2096.98927 48.420317 -> 131627705 +fma0218 fma 62769.8287 2096.98927 48.420317 -> 131627706 Inexact Rounded +-- -68.81500 59961113.9 -8988862 -> -4.13521291E+9 +fma0219 fma -68.81500 59961113.9 -8988862 -> -4.13521292E+9 Inexact Rounded +-- 2126341.02 63491.5152 302427455 -> 1.35307040E+11 +fma0226 fma 2126341.02 63491.5152 302427455 -> 1.35307041E+11 Inexact Rounded + + +-- Infinite combinations +fmax0800 fma Inf Inf Inf -> Infinity +fmax0801 fma Inf Inf -Inf -> NaN Invalid_operation +fmax0802 fma Inf -Inf Inf -> NaN Invalid_operation +fmax0803 fma Inf -Inf -Inf -> -Infinity +fmax0804 fma -Inf Inf Inf -> NaN Invalid_operation +fmax0805 fma -Inf Inf -Inf -> -Infinity +fmax0806 fma -Inf -Inf Inf -> Infinity +fmax0807 fma -Inf -Inf -Inf -> NaN Invalid_operation +fmax0808 fma -Inf 0 1 -> NaN Invalid_operation +fmax0809 fma -Inf 0 NaN -> NaN Invalid_operation + +-- Triple NaN propagation +fmax0900 fma NaN2 NaN3 NaN5 -> NaN2 +fmax0901 fma 0 NaN3 NaN5 -> NaN3 +fmax0902 fma 0 0 NaN5 -> NaN5 +-- first sNaN wins (consider qNaN from earlier sNaN being +-- overridden by an sNaN in third operand) +fmax0903 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +fmax0904 fma 0 sNaN2 sNaN3 -> NaN2 Invalid_operation +fmax0905 fma 0 0 sNaN3 -> NaN3 Invalid_operation +fmax0906 fma sNaN1 sNaN2 sNaN3 -> NaN1 Invalid_operation +fmax0907 fma NaN7 sNaN2 sNaN3 -> NaN2 Invalid_operation +fmax0908 fma NaN7 NaN5 sNaN3 -> NaN3 Invalid_operation + +-- MULTIPLICATION TESTS ------------------------------------------------ +-- sanity checks (as base, above) +fmax2000 fma 2 2 0E+999999 -> 4 +fmax2001 fma 2 3 0E+999999 -> 6 +fmax2002 fma 5 1 0E+999999 -> 5 +fmax2003 fma 5 2 0E+999999 -> 10 +fmax2004 fma 1.20 2 0E+999999 -> 2.40 +fmax2005 fma 1.20 0 0E+999999 -> 0.00 +fmax2006 fma 1.20 -2 0E+999999 -> -2.40 +fmax2007 fma -1.20 2 0E+999999 -> -2.40 +fmax2008 fma -1.20 0 0E+999999 -> 0.00 +fmax2009 fma -1.20 -2 0E+999999 -> 2.40 +fmax2010 fma 5.09 7.1 0E+999999 -> 36.139 +fmax2011 fma 2.5 4 0E+999999 -> 10.0 +fmax2012 fma 2.50 4 0E+999999 -> 10.00 +fmax2013 fma 1.23456789 1.00000000 0E+999999 -> 1.23456789 Rounded +fmax2014 fma 9.999999999 9.999999999 0E+999999 -> 100.000000 Inexact Rounded +fmax2015 fma 2.50 4 0E+999999 -> 10.00 +precision: 6 +fmax2016 fma 2.50 4 0E+999999 -> 10.00 +fmax2017 fma 9.999999 9.999999 0E+999999 -> 100.000 Inexact Rounded +fmax2018 fma 9.999999 -9.999999 0E+999999 -> -100.000 Inexact Rounded +fmax2019 fma -9.999999 9.999999 0E+999999 -> -100.000 Inexact Rounded +fmax2020 fma -9.999999 -9.999999 0E+999999 -> 100.000 Inexact Rounded + +-- 1999.12.21: next one is an edge case if intermediate longs are used +precision: 15 +fmax2059 fma 999999999999 9765625 0E+999999 -> 9.76562499999023E+18 Inexact Rounded +precision: 30 +fmax2160 fma 999999999999 9765625 0E+999999 -> 9765624999990234375 +precision: 9 +----- + +-- zeros, etc. +fmax2021 fma 0 0 0E+999999 -> 0 +fmax2022 fma 0 -0 0E+999999 -> 0 +fmax2023 fma -0 0 0E+999999 -> 0 +fmax2024 fma -0 -0 0E+999999 -> 0 +fmax2025 fma -0.0 -0.0 0E+999999 -> 0.00 +fmax2026 fma -0.0 -0.0 0E+999999 -> 0.00 +fmax2027 fma -0.0 -0.0 0E+999999 -> 0.00 +fmax2028 fma -0.0 -0.0 0E+999999 -> 0.00 +fmax2030 fma 5.00 1E-3 0E+999999 -> 0.00500 +fmax2031 fma 00.00 0.000 0E+999999 -> 0.00000 +fmax2032 fma 00.00 0E-3 0E+999999 -> 0.00000 -- rhs is 0 +fmax2033 fma 0E-3 00.00 0E+999999 -> 0.00000 -- lhs is 0 +fmax2034 fma -5.00 1E-3 0E+999999 -> -0.00500 +fmax2035 fma -00.00 0.000 0E+999999 -> 0.00000 +fmax2036 fma -00.00 0E-3 0E+999999 -> 0.00000 -- rhs is 0 +fmax2037 fma -0E-3 00.00 0E+999999 -> 0.00000 -- lhs is 0 +fmax2038 fma 5.00 -1E-3 0E+999999 -> -0.00500 +fmax2039 fma 00.00 -0.000 0E+999999 -> 0.00000 +fmax2040 fma 00.00 -0E-3 0E+999999 -> 0.00000 -- rhs is 0 +fmax2041 fma 0E-3 -00.00 0E+999999 -> 0.00000 -- lhs is 0 +fmax2042 fma -5.00 -1E-3 0E+999999 -> 0.00500 +fmax2043 fma -00.00 -0.000 0E+999999 -> 0.00000 +fmax2044 fma -00.00 -0E-3 0E+999999 -> 0.00000 -- rhs is 0 +fmax2045 fma -0E-3 -00.00 0E+999999 -> 0.00000 -- lhs is 0 + +-- examples from decarith multiply +fmax2050 fma 1.20 3 0E+999999 -> 3.60 +fmax2051 fma 7 3 0E+999999 -> 21 +fmax2052 fma 0.9 0.8 0E+999999 -> 0.72 +fmax2053 fma 0.9 -0 0E+999999 -> 0.0 +fmax2054 fma 654321 654321 0E+999999 -> 4.28135971E+11 Inexact Rounded + +fmax2060 fma 123.45 1e7 0E+999999 -> 1.2345E+9 +fmax2061 fma 123.45 1e8 0E+999999 -> 1.2345E+10 +fmax2062 fma 123.45 1e+9 0E+999999 -> 1.2345E+11 +fmax2063 fma 123.45 1e10 0E+999999 -> 1.2345E+12 +fmax2064 fma 123.45 1e11 0E+999999 -> 1.2345E+13 +fmax2065 fma 123.45 1e12 0E+999999 -> 1.2345E+14 +fmax2066 fma 123.45 1e13 0E+999999 -> 1.2345E+15 + + +-- test some intermediate lengths +precision: 9 +fmax2080 fma 0.1 123456789 0E+999999 -> 12345678.9 +fmax2081 fma 0.1 1234567891 0E+999999 -> 123456789 Inexact Rounded +fmax2082 fma 0.1 12345678912 0E+999999 -> 1.23456789E+9 Inexact Rounded +fmax2083 fma 0.1 12345678912345 0E+999999 -> 1.23456789E+12 Inexact Rounded +fmax2084 fma 0.1 123456789 0E+999999 -> 12345678.9 +precision: 8 +fmax2085 fma 0.1 12345678912 0E+999999 -> 1.2345679E+9 Inexact Rounded +fmax2086 fma 0.1 12345678912345 0E+999999 -> 1.2345679E+12 Inexact Rounded +precision: 7 +fmax2087 fma 0.1 12345678912 0E+999999 -> 1.234568E+9 Inexact Rounded +fmax2088 fma 0.1 12345678912345 0E+999999 -> 1.234568E+12 Inexact Rounded + +precision: 9 +fmax2090 fma 123456789 0.1 0E+999999 -> 12345678.9 +fmax2091 fma 1234567891 0.1 0E+999999 -> 123456789 Inexact Rounded +fmax2092 fma 12345678912 0.1 0E+999999 -> 1.23456789E+9 Inexact Rounded +fmax2093 fma 12345678912345 0.1 0E+999999 -> 1.23456789E+12 Inexact Rounded +fmax2094 fma 123456789 0.1 0E+999999 -> 12345678.9 +precision: 8 +fmax2095 fma 12345678912 0.1 0E+999999 -> 1.2345679E+9 Inexact Rounded +fmax2096 fma 12345678912345 0.1 0E+999999 -> 1.2345679E+12 Inexact Rounded +precision: 7 +fmax2097 fma 12345678912 0.1 0E+999999 -> 1.234568E+9 Inexact Rounded +fmax2098 fma 12345678912345 0.1 0E+999999 -> 1.234568E+12 Inexact Rounded + +-- test some more edge cases and carries +maxexponent: 9999 +minexponent: -9999 +precision: 33 +fmax2101 fma 9 9 0E+999999 -> 81 +fmax2102 fma 9 90 0E+999999 -> 810 +fmax2103 fma 9 900 0E+999999 -> 8100 +fmax2104 fma 9 9000 0E+999999 -> 81000 +fmax2105 fma 9 90000 0E+999999 -> 810000 +fmax2106 fma 9 900000 0E+999999 -> 8100000 +fmax2107 fma 9 9000000 0E+999999 -> 81000000 +fmax2108 fma 9 90000000 0E+999999 -> 810000000 +fmax2109 fma 9 900000000 0E+999999 -> 8100000000 +fmax2110 fma 9 9000000000 0E+999999 -> 81000000000 +fmax2111 fma 9 90000000000 0E+999999 -> 810000000000 +fmax2112 fma 9 900000000000 0E+999999 -> 8100000000000 +fmax2113 fma 9 9000000000000 0E+999999 -> 81000000000000 +fmax2114 fma 9 90000000000000 0E+999999 -> 810000000000000 +fmax2115 fma 9 900000000000000 0E+999999 -> 8100000000000000 +fmax2116 fma 9 9000000000000000 0E+999999 -> 81000000000000000 +fmax2117 fma 9 90000000000000000 0E+999999 -> 810000000000000000 +fmax2118 fma 9 900000000000000000 0E+999999 -> 8100000000000000000 +fmax2119 fma 9 9000000000000000000 0E+999999 -> 81000000000000000000 +fmax2120 fma 9 90000000000000000000 0E+999999 -> 810000000000000000000 +fmax2121 fma 9 900000000000000000000 0E+999999 -> 8100000000000000000000 +fmax2122 fma 9 9000000000000000000000 0E+999999 -> 81000000000000000000000 +fmax2123 fma 9 90000000000000000000000 0E+999999 -> 810000000000000000000000 +-- test some more edge cases without carries +fmax2131 fma 3 3 0E+999999 -> 9 +fmax2132 fma 3 30 0E+999999 -> 90 +fmax2133 fma 3 300 0E+999999 -> 900 +fmax2134 fma 3 3000 0E+999999 -> 9000 +fmax2135 fma 3 30000 0E+999999 -> 90000 +fmax2136 fma 3 300000 0E+999999 -> 900000 +fmax2137 fma 3 3000000 0E+999999 -> 9000000 +fmax2138 fma 3 30000000 0E+999999 -> 90000000 +fmax2139 fma 3 300000000 0E+999999 -> 900000000 +fmax2140 fma 3 3000000000 0E+999999 -> 9000000000 +fmax2141 fma 3 30000000000 0E+999999 -> 90000000000 +fmax2142 fma 3 300000000000 0E+999999 -> 900000000000 +fmax2143 fma 3 3000000000000 0E+999999 -> 9000000000000 +fmax2144 fma 3 30000000000000 0E+999999 -> 90000000000000 +fmax2145 fma 3 300000000000000 0E+999999 -> 900000000000000 +fmax2146 fma 3 3000000000000000 0E+999999 -> 9000000000000000 +fmax2147 fma 3 30000000000000000 0E+999999 -> 90000000000000000 +fmax2148 fma 3 300000000000000000 0E+999999 -> 900000000000000000 +fmax2149 fma 3 3000000000000000000 0E+999999 -> 9000000000000000000 +fmax2150 fma 3 30000000000000000000 0E+999999 -> 90000000000000000000 +fmax2151 fma 3 300000000000000000000 0E+999999 -> 900000000000000000000 +fmax2152 fma 3 3000000000000000000000 0E+999999 -> 9000000000000000000000 +fmax2153 fma 3 30000000000000000000000 0E+999999 -> 90000000000000000000000 + +maxexponent: 999999 +minexponent: -999999 +precision: 9 +-- test some cases that are close to exponent overflow/underflow +fmax2170 fma 1 9e999999 0E+999999 -> 9E+999999 +fmax2171 fma 1 9.9e999999 0E+999999 -> 9.9E+999999 +fmax2172 fma 1 9.99e999999 0E+999999 -> 9.99E+999999 +fmax2173 fma 9e999999 1 0E+999999 -> 9E+999999 +fmax2174 fma 9.9e999999 1 0E+999999 -> 9.9E+999999 +fmax2176 fma 9.99e999999 1 0E+999999 -> 9.99E+999999 +fmax2177 fma 1 9.99999e999999 0E+999999 -> 9.99999E+999999 +fmax2178 fma 9.99999e999999 1 0E+999999 -> 9.99999E+999999 + +fmax2180 fma 0.1 9e-999998 0E+999999 -> 9E-999999 +fmax2181 fma 0.1 99e-999998 0E+999999 -> 9.9E-999998 +fmax2182 fma 0.1 999e-999998 0E+999999 -> 9.99E-999997 + +fmax2183 fma 0.1 9e-999998 0E+999999 -> 9E-999999 +fmax2184 fma 0.1 99e-999998 0E+999999 -> 9.9E-999998 +fmax2185 fma 0.1 999e-999998 0E+999999 -> 9.99E-999997 +fmax2186 fma 0.1 999e-999997 0E+999999 -> 9.99E-999996 +fmax2187 fma 0.1 9999e-999997 0E+999999 -> 9.999E-999995 +fmax2188 fma 0.1 99999e-999997 0E+999999 -> 9.9999E-999994 + +fmax2190 fma 1 9e-999998 0E+999999 -> 9E-999998 +fmax2191 fma 1 99e-999998 0E+999999 -> 9.9E-999997 +fmax2192 fma 1 999e-999998 0E+999999 -> 9.99E-999996 +fmax2193 fma 9e-999998 1 0E+999999 -> 9E-999998 +fmax2194 fma 99e-999998 1 0E+999999 -> 9.9E-999997 +fmax2195 fma 999e-999998 1 0E+999999 -> 9.99E-999996 + +-- long operand triangle +precision: 33 +fmax2246 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916511992830 Inexact Rounded +precision: 32 +fmax2247 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651199283 Inexact Rounded +precision: 31 +fmax2248 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165119928 Inexact Rounded +precision: 30 +fmax2249 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916511993 Inexact Rounded +precision: 29 +fmax2250 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651199 Inexact Rounded +precision: 28 +fmax2251 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165120 Inexact Rounded +precision: 27 +fmax2252 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671916512 Inexact Rounded +precision: 26 +fmax2253 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967191651 Inexact Rounded +precision: 25 +fmax2254 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719165 Inexact Rounded +precision: 24 +fmax2255 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369671917 Inexact Rounded +precision: 23 +fmax2256 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967192 Inexact Rounded +precision: 22 +fmax2257 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933696719 Inexact Rounded +precision: 21 +fmax2258 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193369672 Inexact Rounded +precision: 20 +fmax2259 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119336967 Inexact Rounded +precision: 19 +fmax2260 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011933697 Inexact Rounded +precision: 18 +fmax2261 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193370 Inexact Rounded +precision: 17 +fmax2262 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119337 Inexact Rounded +precision: 16 +fmax2263 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908011934 Inexact Rounded +precision: 15 +fmax2264 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801193 Inexact Rounded +precision: 14 +fmax2265 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080119 Inexact Rounded +precision: 13 +fmax2266 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908012 Inexact Rounded +precision: 12 +fmax2267 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.290801 Inexact Rounded +precision: 11 +fmax2268 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29080 Inexact Rounded +precision: 10 +fmax2269 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.2908 Inexact Rounded +precision: 9 +fmax2270 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.291 Inexact Rounded +precision: 8 +fmax2271 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.29 Inexact Rounded +precision: 7 +fmax2272 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433.3 Inexact Rounded +precision: 6 +fmax2273 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 145433 Inexact Rounded +precision: 5 +fmax2274 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.4543E+5 Inexact Rounded +precision: 4 +fmax2275 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.454E+5 Inexact Rounded +precision: 3 +fmax2276 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.45E+5 Inexact Rounded +precision: 2 +fmax2277 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1.5E+5 Inexact Rounded +precision: 1 +fmax2278 fma 30269.587755640502150977251770554 4.8046009735990873395936309640543 0E+999999 -> 1E+5 Inexact Rounded + +-- test some edge cases with exact rounding +maxexponent: 9999 +minexponent: -9999 +precision: 9 +fmax2301 fma 9 9 0E+999999 -> 81 +fmax2302 fma 9 90 0E+999999 -> 810 +fmax2303 fma 9 900 0E+999999 -> 8100 +fmax2304 fma 9 9000 0E+999999 -> 81000 +fmax2305 fma 9 90000 0E+999999 -> 810000 +fmax2306 fma 9 900000 0E+999999 -> 8100000 +fmax2307 fma 9 9000000 0E+999999 -> 81000000 +fmax2308 fma 9 90000000 0E+999999 -> 810000000 +fmax2309 fma 9 900000000 0E+999999 -> 8.10000000E+9 Rounded +fmax2310 fma 9 9000000000 0E+999999 -> 8.10000000E+10 Rounded +fmax2311 fma 9 90000000000 0E+999999 -> 8.10000000E+11 Rounded +fmax2312 fma 9 900000000000 0E+999999 -> 8.10000000E+12 Rounded +fmax2313 fma 9 9000000000000 0E+999999 -> 8.10000000E+13 Rounded +fmax2314 fma 9 90000000000000 0E+999999 -> 8.10000000E+14 Rounded +fmax2315 fma 9 900000000000000 0E+999999 -> 8.10000000E+15 Rounded +fmax2316 fma 9 9000000000000000 0E+999999 -> 8.10000000E+16 Rounded +fmax2317 fma 9 90000000000000000 0E+999999 -> 8.10000000E+17 Rounded +fmax2318 fma 9 900000000000000000 0E+999999 -> 8.10000000E+18 Rounded +fmax2319 fma 9 9000000000000000000 0E+999999 -> 8.10000000E+19 Rounded +fmax2320 fma 9 90000000000000000000 0E+999999 -> 8.10000000E+20 Rounded +fmax2321 fma 9 900000000000000000000 0E+999999 -> 8.10000000E+21 Rounded +fmax2322 fma 9 9000000000000000000000 0E+999999 -> 8.10000000E+22 Rounded +fmax2323 fma 9 90000000000000000000000 0E+999999 -> 8.10000000E+23 Rounded + +-- fastpath breakers +precision: 29 +fmax2330 fma 1.491824697641270317824852952837224 1.105170918075647624811707826490246514675628614562883537345747603 0E+999999 -> 1.6487212707001281468486507878 Inexact Rounded +precision: 55 +fmax2331 fma 0.8958341352965282506768545828765117803873717284891040428 0.8958341352965282506768545828765117803873717284891040428 0E+999999 -> 0.8025187979624784829842553829934069955890983696752228299 Inexact Rounded + + +-- tryzeros cases +precision: 7 +rounding: half_up +maxExponent: 92 +minexponent: -92 +fmax2504 fma 0E-60 1000E-60 0E+999999 -> 0E-98 Clamped +fmax2505 fma 100E+60 0E+60 0E+999999 -> 0E+92 Clamped + +-- mixed with zeros +maxexponent: 999999 +minexponent: -999999 +precision: 9 +fmax2541 fma 0 -1 0E+999999 -> 0 +fmax2542 fma -0 -1 0E+999999 -> 0 +fmax2543 fma 0 1 0E+999999 -> 0 +fmax2544 fma -0 1 0E+999999 -> 0 +fmax2545 fma -1 0 0E+999999 -> 0 +fmax2546 fma -1 -0 0E+999999 -> 0 +fmax2547 fma 1 0 0E+999999 -> 0 +fmax2548 fma 1 -0 0E+999999 -> 0 + +fmax2551 fma 0.0 -1 0E+999999 -> 0.0 +fmax2552 fma -0.0 -1 0E+999999 -> 0.0 +fmax2553 fma 0.0 1 0E+999999 -> 0.0 +fmax2554 fma -0.0 1 0E+999999 -> 0.0 +fmax2555 fma -1.0 0 0E+999999 -> 0.0 +fmax2556 fma -1.0 -0 0E+999999 -> 0.0 +fmax2557 fma 1.0 0 0E+999999 -> 0.0 +fmax2558 fma 1.0 -0 0E+999999 -> 0.0 + +fmax2561 fma 0 -1.0 0E+999999 -> 0.0 +fmax2562 fma -0 -1.0 0E+999999 -> 0.0 +fmax2563 fma 0 1.0 0E+999999 -> 0.0 +fmax2564 fma -0 1.0 0E+999999 -> 0.0 +fmax2565 fma -1 0.0 0E+999999 -> 0.0 +fmax2566 fma -1 -0.0 0E+999999 -> 0.0 +fmax2567 fma 1 0.0 0E+999999 -> 0.0 +fmax2568 fma 1 -0.0 0E+999999 -> 0.0 + +fmax2571 fma 0.0 -1.0 0E+999999 -> 0.00 +fmax2572 fma -0.0 -1.0 0E+999999 -> 0.00 +fmax2573 fma 0.0 1.0 0E+999999 -> 0.00 +fmax2574 fma -0.0 1.0 0E+999999 -> 0.00 +fmax2575 fma -1.0 0.0 0E+999999 -> 0.00 +fmax2576 fma -1.0 -0.0 0E+999999 -> 0.00 +fmax2577 fma 1.0 0.0 0E+999999 -> 0.00 +fmax2578 fma 1.0 -0.0 0E+999999 -> 0.00 + + +-- Specials +fmax2580 fma Inf -Inf 0E+999999 -> -Infinity +fmax2581 fma Inf -1000 0E+999999 -> -Infinity +fmax2582 fma Inf -1 0E+999999 -> -Infinity +fmax2583 fma Inf -0 0E+999999 -> NaN Invalid_operation +fmax2584 fma Inf 0 0E+999999 -> NaN Invalid_operation +fmax2585 fma Inf 1 0E+999999 -> Infinity +fmax2586 fma Inf 1000 0E+999999 -> Infinity +fmax2587 fma Inf Inf 0E+999999 -> Infinity +fmax2588 fma -1000 Inf 0E+999999 -> -Infinity +fmax2589 fma -Inf Inf 0E+999999 -> -Infinity +fmax2590 fma -1 Inf 0E+999999 -> -Infinity +fmax2591 fma -0 Inf 0E+999999 -> NaN Invalid_operation +fmax2592 fma 0 Inf 0E+999999 -> NaN Invalid_operation +fmax2593 fma 1 Inf 0E+999999 -> Infinity +fmax2594 fma 1000 Inf 0E+999999 -> Infinity +fmax2595 fma Inf Inf 0E+999999 -> Infinity + +fmax2600 fma -Inf -Inf 0E+999999 -> Infinity +fmax2601 fma -Inf -1000 0E+999999 -> Infinity +fmax2602 fma -Inf -1 0E+999999 -> Infinity +fmax2603 fma -Inf -0 0E+999999 -> NaN Invalid_operation +fmax2604 fma -Inf 0 0E+999999 -> NaN Invalid_operation +fmax2605 fma -Inf 1 0E+999999 -> -Infinity +fmax2606 fma -Inf 1000 0E+999999 -> -Infinity +fmax2607 fma -Inf Inf 0E+999999 -> -Infinity +fmax2608 fma -1000 Inf 0E+999999 -> -Infinity +fmax2609 fma -Inf -Inf 0E+999999 -> Infinity +fmax2610 fma -1 -Inf 0E+999999 -> Infinity +fmax2611 fma -0 -Inf 0E+999999 -> NaN Invalid_operation +fmax2612 fma 0 -Inf 0E+999999 -> NaN Invalid_operation +fmax2613 fma 1 -Inf 0E+999999 -> -Infinity +fmax2614 fma 1000 -Inf 0E+999999 -> -Infinity +fmax2615 fma Inf -Inf 0E+999999 -> -Infinity + +fmax2621 fma NaN -Inf 0E+999999 -> NaN +fmax2622 fma NaN -1000 0E+999999 -> NaN +fmax2623 fma NaN -1 0E+999999 -> NaN +fmax2624 fma NaN -0 0E+999999 -> NaN +fmax2625 fma NaN 0 0E+999999 -> NaN +fmax2626 fma NaN 1 0E+999999 -> NaN +fmax2627 fma NaN 1000 0E+999999 -> NaN +fmax2628 fma NaN Inf 0E+999999 -> NaN +fmax2629 fma NaN NaN 0E+999999 -> NaN +fmax2630 fma -Inf NaN 0E+999999 -> NaN +fmax2631 fma -1000 NaN 0E+999999 -> NaN +fmax2632 fma -1 NaN 0E+999999 -> NaN +fmax2633 fma -0 NaN 0E+999999 -> NaN +fmax2634 fma 0 NaN 0E+999999 -> NaN +fmax2635 fma 1 NaN 0E+999999 -> NaN +fmax2636 fma 1000 NaN 0E+999999 -> NaN +fmax2637 fma Inf NaN 0E+999999 -> NaN + +fmax2641 fma sNaN -Inf 0E+999999 -> NaN Invalid_operation +fmax2642 fma sNaN -1000 0E+999999 -> NaN Invalid_operation +fmax2643 fma sNaN -1 0E+999999 -> NaN Invalid_operation +fmax2644 fma sNaN -0 0E+999999 -> NaN Invalid_operation +fmax2645 fma sNaN 0 0E+999999 -> NaN Invalid_operation +fmax2646 fma sNaN 1 0E+999999 -> NaN Invalid_operation +fmax2647 fma sNaN 1000 0E+999999 -> NaN Invalid_operation +fmax2648 fma sNaN NaN 0E+999999 -> NaN Invalid_operation +fmax2649 fma sNaN sNaN 0E+999999 -> NaN Invalid_operation +fmax2650 fma NaN sNaN 0E+999999 -> NaN Invalid_operation +fmax2651 fma -Inf sNaN 0E+999999 -> NaN Invalid_operation +fmax2652 fma -1000 sNaN 0E+999999 -> NaN Invalid_operation +fmax2653 fma -1 sNaN 0E+999999 -> NaN Invalid_operation +fmax2654 fma -0 sNaN 0E+999999 -> NaN Invalid_operation +fmax2655 fma 0 sNaN 0E+999999 -> NaN Invalid_operation +fmax2656 fma 1 sNaN 0E+999999 -> NaN Invalid_operation +fmax2657 fma 1000 sNaN 0E+999999 -> NaN Invalid_operation +fmax2658 fma Inf sNaN 0E+999999 -> NaN Invalid_operation +fmax2659 fma NaN sNaN 0E+999999 -> NaN Invalid_operation + +-- propagating NaNs +fmax2661 fma NaN9 -Inf 0E+999999 -> NaN9 +fmax2662 fma NaN8 999 0E+999999 -> NaN8 +fmax2663 fma NaN71 Inf 0E+999999 -> NaN71 +fmax2664 fma NaN6 NaN5 0E+999999 -> NaN6 +fmax2665 fma -Inf NaN4 0E+999999 -> NaN4 +fmax2666 fma -999 NaN33 0E+999999 -> NaN33 +fmax2667 fma Inf NaN2 0E+999999 -> NaN2 + +fmax2671 fma sNaN99 -Inf 0E+999999 -> NaN99 Invalid_operation +fmax2672 fma sNaN98 -11 0E+999999 -> NaN98 Invalid_operation +fmax2673 fma sNaN97 NaN 0E+999999 -> NaN97 Invalid_operation +fmax2674 fma sNaN16 sNaN94 0E+999999 -> NaN16 Invalid_operation +fmax2675 fma NaN95 sNaN93 0E+999999 -> NaN93 Invalid_operation +fmax2676 fma -Inf sNaN92 0E+999999 -> NaN92 Invalid_operation +fmax2677 fma 088 sNaN91 0E+999999 -> NaN91 Invalid_operation +fmax2678 fma Inf sNaN90 0E+999999 -> NaN90 Invalid_operation +fmax2679 fma NaN sNaN89 0E+999999 -> NaN89 Invalid_operation + +fmax2681 fma -NaN9 -Inf 0E+999999 -> -NaN9 +fmax2682 fma -NaN8 999 0E+999999 -> -NaN8 +fmax2683 fma -NaN71 Inf 0E+999999 -> -NaN71 +fmax2684 fma -NaN6 -NaN5 0E+999999 -> -NaN6 +fmax2685 fma -Inf -NaN4 0E+999999 -> -NaN4 +fmax2686 fma -999 -NaN33 0E+999999 -> -NaN33 +fmax2687 fma Inf -NaN2 0E+999999 -> -NaN2 + +fmax2691 fma -sNaN99 -Inf 0E+999999 -> -NaN99 Invalid_operation +fmax2692 fma -sNaN98 -11 0E+999999 -> -NaN98 Invalid_operation +fmax2693 fma -sNaN97 NaN 0E+999999 -> -NaN97 Invalid_operation +fmax2694 fma -sNaN16 -sNaN94 0E+999999 -> -NaN16 Invalid_operation +fmax2695 fma -NaN95 -sNaN93 0E+999999 -> -NaN93 Invalid_operation +fmax2696 fma -Inf -sNaN92 0E+999999 -> -NaN92 Invalid_operation +fmax2697 fma 088 -sNaN91 0E+999999 -> -NaN91 Invalid_operation +fmax2698 fma Inf -sNaN90 0E+999999 -> -NaN90 Invalid_operation +fmax2699 fma -NaN -sNaN89 0E+999999 -> -NaN89 Invalid_operation + +fmax2701 fma -NaN -Inf 0E+999999 -> -NaN +fmax2702 fma -NaN 999 0E+999999 -> -NaN +fmax2703 fma -NaN Inf 0E+999999 -> -NaN +fmax2704 fma -NaN -NaN 0E+999999 -> -NaN +fmax2705 fma -Inf -NaN0 0E+999999 -> -NaN +fmax2706 fma -999 -NaN 0E+999999 -> -NaN +fmax2707 fma Inf -NaN 0E+999999 -> -NaN + +fmax2711 fma -sNaN -Inf 0E+999999 -> -NaN Invalid_operation +fmax2712 fma -sNaN -11 0E+999999 -> -NaN Invalid_operation +fmax2713 fma -sNaN00 NaN 0E+999999 -> -NaN Invalid_operation +fmax2714 fma -sNaN -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2715 fma -NaN -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2716 fma -Inf -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2717 fma 088 -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2718 fma Inf -sNaN 0E+999999 -> -NaN Invalid_operation +fmax2719 fma -NaN -sNaN 0E+999999 -> -NaN Invalid_operation + +-- overflow and underflow tests .. note subnormal results +maxexponent: 999999 +minexponent: -999999 +fmax2730 fma +1.23456789012345E-0 9E+999999 0E+999999 -> Infinity Inexact Overflow Rounded +fmax2731 fma 9E+999999 +1.23456789012345E-0 0E+999999 -> Infinity Inexact Overflow Rounded +fmax2732 fma +0.100 9E-999999 0E+999999 -> 9.00E-1000000 Subnormal +fmax2733 fma 9E-999999 +0.100 0E+999999 -> 9.00E-1000000 Subnormal +fmax2735 fma -1.23456789012345E-0 9E+999999 0E+999999 -> -Infinity Inexact Overflow Rounded +fmax2736 fma 9E+999999 -1.23456789012345E-0 0E+999999 -> -Infinity Inexact Overflow Rounded +fmax2737 fma -0.100 9E-999999 0E+999999 -> -9.00E-1000000 Subnormal +fmax2738 fma 9E-999999 -0.100 0E+999999 -> -9.00E-1000000 Subnormal + +-- signs +fmax2751 fma 1e+777777 1e+411111 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2752 fma 1e+777777 -1e+411111 0E+999999 -> -Infinity Overflow Inexact Rounded +fmax2753 fma -1e+777777 1e+411111 0E+999999 -> -Infinity Overflow Inexact Rounded +fmax2754 fma -1e+777777 -1e+411111 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2755 fma 1e-777777 1e-411111 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2756 fma 1e-777777 -1e-411111 0E+999999 -> -0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2757 fma -1e-777777 1e-411111 0E+999999 -> -0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2758 fma -1e-777777 -1e-411111 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped + +-- 'subnormal' boundary (all hard underflow or overflow in base arithmetic) +precision: 9 +fmax2760 fma 1e-600000 1e-400001 0E+999999 -> 1E-1000001 Subnormal +fmax2761 fma 1e-600000 1e-400002 0E+999999 -> 1E-1000002 Subnormal +fmax2762 fma 1e-600000 1e-400003 0E+999999 -> 1E-1000003 Subnormal +fmax2763 fma 1e-600000 1e-400004 0E+999999 -> 1E-1000004 Subnormal +fmax2764 fma 1e-600000 1e-400005 0E+999999 -> 1E-1000005 Subnormal +fmax2765 fma 1e-600000 1e-400006 0E+999999 -> 1E-1000006 Subnormal +fmax2766 fma 1e-600000 1e-400007 0E+999999 -> 1E-1000007 Subnormal +fmax2767 fma 1e-600000 1e-400008 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2768 fma 1e-600000 1e-400009 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped +fmax2769 fma 1e-600000 1e-400010 0E+999999 -> 0E-1000007 Underflow Subnormal Inexact Rounded Clamped +-- [no equivalent of 'subnormal' for overflow] +fmax2770 fma 1e+600000 1e+400001 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2771 fma 1e+600000 1e+400002 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2772 fma 1e+600000 1e+400003 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2773 fma 1e+600000 1e+400004 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2774 fma 1e+600000 1e+400005 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2775 fma 1e+600000 1e+400006 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2776 fma 1e+600000 1e+400007 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2777 fma 1e+600000 1e+400008 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2778 fma 1e+600000 1e+400009 0E+999999 -> Infinity Overflow Inexact Rounded +fmax2779 fma 1e+600000 1e+400010 0E+999999 -> Infinity Overflow Inexact Rounded + +-- 'subnormal' test edge condition at higher precisions +precision: 99 +fmax2780 fma 1e-600000 1e-400007 0E+999999 -> 1E-1000007 Subnormal +fmax2781 fma 1e-600000 1e-400008 0E+999999 -> 1E-1000008 Subnormal +fmax2782 fma 1e-600000 1e-400097 0E+999999 -> 1E-1000097 Subnormal +fmax2783 fma 1e-600000 1e-400098 0E+999999 -> 0E-1000097 Underflow Subnormal Inexact Rounded Clamped +precision: 999 +fmax2784 fma 1e-600000 1e-400997 0E+999999 -> 1E-1000997 Subnormal +fmax2785 fma 1e-600000 1e-400998 0E+999999 -> 0E-1000997 Underflow Subnormal Inexact Rounded Clamped + +-- test subnormals rounding +precision: 5 +maxExponent: 999 +minexponent: -999 +rounding: half_even + +fmax2801 fma 1.0000E-999 1 0E+999999 -> 1.0000E-999 +fmax2802 fma 1.000E-999 1e-1 0E+999999 -> 1.000E-1000 Subnormal +fmax2803 fma 1.00E-999 1e-2 0E+999999 -> 1.00E-1001 Subnormal +fmax2804 fma 1.0E-999 1e-3 0E+999999 -> 1.0E-1002 Subnormal +fmax2805 fma 1.0E-999 1e-4 0E+999999 -> 1E-1003 Subnormal Rounded +fmax2806 fma 1.3E-999 1e-4 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded +fmax2807 fma 1.5E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2808 fma 1.7E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2809 fma 2.3E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2810 fma 2.5E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2811 fma 2.7E-999 1e-4 0E+999999 -> 3E-1003 Underflow Subnormal Inexact Rounded +fmax2812 fma 1.49E-999 1e-4 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded +fmax2813 fma 1.50E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2814 fma 1.51E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2815 fma 2.49E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2816 fma 2.50E-999 1e-4 0E+999999 -> 2E-1003 Underflow Subnormal Inexact Rounded +fmax2817 fma 2.51E-999 1e-4 0E+999999 -> 3E-1003 Underflow Subnormal Inexact Rounded + +fmax2818 fma 1E-999 1e-4 0E+999999 -> 1E-1003 Subnormal +fmax2819 fma 3E-999 1e-5 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2820 fma 5E-999 1e-5 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2821 fma 7E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded +fmax2822 fma 9E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded +fmax2823 fma 9.9E-999 1e-5 0E+999999 -> 1E-1003 Underflow Subnormal Inexact Rounded + +fmax2824 fma 1E-999 -1e-4 0E+999999 -> -1E-1003 Subnormal +fmax2825 fma 3E-999 -1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2826 fma -5E-999 1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2827 fma 7E-999 -1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded +fmax2828 fma -9E-999 1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded +fmax2829 fma 9.9E-999 -1e-5 0E+999999 -> -1E-1003 Underflow Subnormal Inexact Rounded +fmax2830 fma 3.0E-999 -1e-5 0E+999999 -> -0E-1003 Underflow Subnormal Inexact Rounded Clamped + +fmax2831 fma 1.0E-501 1e-501 0E+999999 -> 1.0E-1002 Subnormal +fmax2832 fma 2.0E-501 2e-501 0E+999999 -> 4.0E-1002 Subnormal +fmax2833 fma 4.0E-501 4e-501 0E+999999 -> 1.60E-1001 Subnormal +fmax2834 fma 10.0E-501 10e-501 0E+999999 -> 1.000E-1000 Subnormal +fmax2835 fma 30.0E-501 30e-501 0E+999999 -> 9.000E-1000 Subnormal +fmax2836 fma 40.0E-501 40e-501 0E+999999 -> 1.6000E-999 + +-- squares +fmax2840 fma 1E-502 1e-502 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2841 fma 1E-501 1e-501 0E+999999 -> 1E-1002 Subnormal +fmax2842 fma 2E-501 2e-501 0E+999999 -> 4E-1002 Subnormal +fmax2843 fma 4E-501 4e-501 0E+999999 -> 1.6E-1001 Subnormal +fmax2844 fma 10E-501 10e-501 0E+999999 -> 1.00E-1000 Subnormal +fmax2845 fma 30E-501 30e-501 0E+999999 -> 9.00E-1000 Subnormal +fmax2846 fma 40E-501 40e-501 0E+999999 -> 1.600E-999 + +-- cubes +fmax2850 fma 1E-670 1e-335 0E+999999 -> 0E-1003 Underflow Subnormal Inexact Rounded Clamped +fmax2851 fma 1E-668 1e-334 0E+999999 -> 1E-1002 Subnormal +fmax2852 fma 4E-668 2e-334 0E+999999 -> 8E-1002 Subnormal +fmax2853 fma 9E-668 3e-334 0E+999999 -> 2.7E-1001 Subnormal +fmax2854 fma 16E-668 4e-334 0E+999999 -> 6.4E-1001 Subnormal +fmax2855 fma 25E-668 5e-334 0E+999999 -> 1.25E-1000 Subnormal +fmax2856 fma 10E-668 100e-334 0E+999999 -> 1.000E-999 + +-- test derived from result of 0.099 ** 999 at 15 digits with unlimited exponent +precision: 19 +fmax2860 fma 6636851557994578716E-520 6636851557994578716E-520 0E+999999 -> 4.40477986028551E-1003 Underflow Subnormal Inexact Rounded + +-- Long operand overflow may be a different path +precision: 3 +maxExponent: 999999 +minexponent: -999999 +fmax2870 fma 1 9.999E+999999 0E+999999 -> Infinity Inexact Overflow Rounded +fmax2871 fma 1 -9.999E+999999 0E+999999 -> -Infinity Inexact Overflow Rounded +fmax2872 fma 9.999E+999999 1 0E+999999 -> Infinity Inexact Overflow Rounded +fmax2873 fma -9.999E+999999 1 0E+999999 -> -Infinity Inexact Overflow Rounded + +-- check for double-rounded subnormals +precision: 5 +maxexponent: 79 +minexponent: -79 +fmax2881 fma 1.2347E-40 1.2347E-40 0E+999999 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax2882 fma 1.234E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow +fmax2883 fma 1.23E-40 1.23E-40 0E+999999 -> 1.513E-80 Inexact Rounded Subnormal Underflow +fmax2884 fma 1.2E-40 1.2E-40 0E+999999 -> 1.44E-80 Subnormal +fmax2885 fma 1.2E-40 1.2E-41 0E+999999 -> 1.44E-81 Subnormal +fmax2886 fma 1.2E-40 1.2E-42 0E+999999 -> 1.4E-82 Subnormal Inexact Rounded Underflow +fmax2887 fma 1.2E-40 1.3E-42 0E+999999 -> 1.6E-82 Subnormal Inexact Rounded Underflow +fmax2888 fma 1.3E-40 1.3E-42 0E+999999 -> 1.7E-82 Subnormal Inexact Rounded Underflow +fmax2889 fma 1.3E-40 1.3E-43 0E+999999 -> 2E-83 Subnormal Inexact Rounded Underflow +fmax2890 fma 1.3E-41 1.3E-43 0E+999999 -> 0E-83 Clamped Subnormal Inexact Rounded Underflow + +fmax2891 fma 1.2345E-39 1.234E-40 0E+999999 -> 1.5234E-79 Inexact Rounded +fmax2892 fma 1.23456E-39 1.234E-40 0E+999999 -> 1.5234E-79 Inexact Rounded +fmax2893 fma 1.2345E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow +fmax2894 fma 1.23456E-40 1.234E-40 0E+999999 -> 1.523E-80 Inexact Rounded Subnormal Underflow +fmax2895 fma 1.2345E-41 1.234E-40 0E+999999 -> 1.52E-81 Inexact Rounded Subnormal Underflow +fmax2896 fma 1.23456E-41 1.234E-40 0E+999999 -> 1.52E-81 Inexact Rounded Subnormal Underflow + +-- Now explore the case where we get a normal result with Underflow +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +fmax2900 fma 0.3000000000E-191 0.3000000000E-191 0E+999999 -> 9.00000000000000E-384 Subnormal Rounded +fmax2901 fma 0.3000000001E-191 0.3000000001E-191 0E+999999 -> 9.00000000600000E-384 Underflow Inexact Subnormal Rounded +fmax2902 fma 9.999999999999999E-383 0.0999999999999 0E+999999 -> 9.99999999999000E-384 Underflow Inexact Subnormal Rounded +fmax2903 fma 9.999999999999999E-383 0.09999999999999 0E+999999 -> 9.99999999999900E-384 Underflow Inexact Subnormal Rounded +fmax2904 fma 9.999999999999999E-383 0.099999999999999 0E+999999 -> 9.99999999999990E-384 Underflow Inexact Subnormal Rounded +fmax2905 fma 9.999999999999999E-383 0.0999999999999999 0E+999999 -> 9.99999999999999E-384 Underflow Inexact Subnormal Rounded +-- prove operands are exact +fmax2906 fma 9.999999999999999E-383 1 0E+999999 -> 9.999999999999999E-383 +fmax2907 fma 1 0.09999999999999999 0E+999999 -> 0.09999999999999999 +-- the next rounds to Nmin +fmax2908 fma 9.999999999999999E-383 0.09999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax2909 fma 9.999999999999999E-383 0.099999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax2910 fma 9.999999999999999E-383 0.0999999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax2911 fma 9.999999999999999E-383 0.09999999999999999999 0E+999999 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded + +-- Examples from SQL proposal (Krishna Kulkarni) +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 +fmax2921 fma 130E-2 120E-2 0E+999999 -> 1.5600 +fmax2922 fma 130E-2 12E-1 0E+999999 -> 1.560 +fmax2923 fma 130E-2 1E0 0E+999999 -> 1.30 + +-- Null tests +fmax2990 fma # 10 0E+999999 -> NaN Invalid_operation +fmax2991 fma 10 # 0E+999999 -> NaN Invalid_operation + +-- ADDITION TESTS ------------------------------------------------------ +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- [first group are 'quick confidence check'] +fmax3001 fma 1 1 1 -> 2 +fmax3002 fma 1 2 3 -> 5 +fmax3003 fma 1 '5.75' '3.3' -> 9.05 +fmax3004 fma 1 '5' '-3' -> 2 +fmax3005 fma 1 '-5' '-3' -> -8 +fmax3006 fma 1 '-7' '2.5' -> -4.5 +fmax3007 fma 1 '0.7' '0.3' -> 1.0 +fmax3008 fma 1 '1.25' '1.25' -> 2.50 +fmax3009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' +fmax3010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' + +fmax3011 fma 1 '0.4444444444' '0.5555555555' -> '1.00000000' Inexact Rounded +fmax3012 fma 1 '0.4444444440' '0.5555555555' -> '1.00000000' Inexact Rounded +fmax3013 fma 1 '0.4444444444' '0.5555555550' -> '0.999999999' Inexact Rounded +fmax3014 fma 1 '0.44444444449' '0' -> '0.444444444' Inexact Rounded +fmax3015 fma 1 '0.444444444499' '0' -> '0.444444444' Inexact Rounded +fmax3016 fma 1 '0.4444444444999' '0' -> '0.444444444' Inexact Rounded +fmax3017 fma 1 '0.4444444445000' '0' -> '0.444444445' Inexact Rounded +fmax3018 fma 1 '0.4444444445001' '0' -> '0.444444445' Inexact Rounded +fmax3019 fma 1 '0.444444444501' '0' -> '0.444444445' Inexact Rounded +fmax3020 fma 1 '0.44444444451' '0' -> '0.444444445' Inexact Rounded + +fmax3021 fma 1 0 1 -> 1 +fmax3022 fma 1 1 1 -> 2 +fmax3023 fma 1 2 1 -> 3 +fmax3024 fma 1 3 1 -> 4 +fmax3025 fma 1 4 1 -> 5 +fmax3026 fma 1 5 1 -> 6 +fmax3027 fma 1 6 1 -> 7 +fmax3028 fma 1 7 1 -> 8 +fmax3029 fma 1 8 1 -> 9 +fmax3030 fma 1 9 1 -> 10 + +-- some carrying effects +fmax3031 fma 1 '0.9998' '0.0000' -> '0.9998' +fmax3032 fma 1 '0.9998' '0.0001' -> '0.9999' +fmax3033 fma 1 '0.9998' '0.0002' -> '1.0000' +fmax3034 fma 1 '0.9998' '0.0003' -> '1.0001' + +fmax3035 fma 1 '70' '10000e+9' -> '1.00000000E+13' Inexact Rounded +fmax3036 fma 1 '700' '10000e+9' -> '1.00000000E+13' Inexact Rounded +fmax3037 fma 1 '7000' '10000e+9' -> '1.00000000E+13' Inexact Rounded +fmax3038 fma 1 '70000' '10000e+9' -> '1.00000001E+13' Inexact Rounded +fmax3039 fma 1 '700000' '10000e+9' -> '1.00000007E+13' Rounded + +-- symmetry: +fmax3040 fma 1 '10000e+9' '70' -> '1.00000000E+13' Inexact Rounded +fmax3041 fma 1 '10000e+9' '700' -> '1.00000000E+13' Inexact Rounded +fmax3042 fma 1 '10000e+9' '7000' -> '1.00000000E+13' Inexact Rounded +fmax3044 fma 1 '10000e+9' '70000' -> '1.00000001E+13' Inexact Rounded +fmax3045 fma 1 '10000e+9' '700000' -> '1.00000007E+13' Rounded + +-- same, higher precision +precision: 15 +fmax3046 fma 1 '10000e+9' '7' -> '10000000000007' +fmax3047 fma 1 '10000e+9' '70' -> '10000000000070' +fmax3048 fma 1 '10000e+9' '700' -> '10000000000700' +fmax3049 fma 1 '10000e+9' '7000' -> '10000000007000' +fmax3050 fma 1 '10000e+9' '70000' -> '10000000070000' +fmax3051 fma 1 '10000e+9' '700000' -> '10000000700000' +fmax3052 fma 1 '10000e+9' '7000000' -> '10000007000000' + +-- examples from decarith +fmax3053 fma 1 '12' '7.00' -> '19.00' +fmax3054 fma 1 '1.3' '-1.07' -> '0.23' +fmax3055 fma 1 '1.3' '-1.30' -> '0.00' +fmax3056 fma 1 '1.3' '-2.07' -> '-0.77' +fmax3057 fma 1 '1E+2' '1E+4' -> '1.01E+4' + +-- zero preservation +precision: 6 +fmax3060 fma 1 '10000e+9' '70000' -> '1.00000E+13' Inexact Rounded +fmax3061 fma 1 1 '0.0001' -> '1.0001' +fmax3062 fma 1 1 '0.00001' -> '1.00001' +fmax3063 fma 1 1 '0.000001' -> '1.00000' Inexact Rounded +fmax3064 fma 1 1 '0.0000001' -> '1.00000' Inexact Rounded +fmax3065 fma 1 1 '0.00000001' -> '1.00000' Inexact Rounded + +-- some funny zeros [in case of bad signum] +fmax3070 fma 1 1 0 -> 1 +fmax3071 fma 1 1 0. -> 1 +fmax3072 fma 1 1 .0 -> 1.0 +fmax3073 fma 1 1 0.0 -> 1.0 +fmax3074 fma 1 1 0.00 -> 1.00 +fmax3075 fma 1 0 1 -> 1 +fmax3076 fma 1 0. 1 -> 1 +fmax3077 fma 1 .0 1 -> 1.0 +fmax3078 fma 1 0.0 1 -> 1.0 +fmax3079 fma 1 0.00 1 -> 1.00 + +precision: 9 + +-- some carries +fmax3080 fma 1 999999998 1 -> 999999999 +fmax3081 fma 1 999999999 1 -> 1.00000000E+9 Rounded +fmax3082 fma 1 99999999 1 -> 100000000 +fmax3083 fma 1 9999999 1 -> 10000000 +fmax3084 fma 1 999999 1 -> 1000000 +fmax3085 fma 1 99999 1 -> 100000 +fmax3086 fma 1 9999 1 -> 10000 +fmax3087 fma 1 999 1 -> 1000 +fmax3088 fma 1 99 1 -> 100 +fmax3089 fma 1 9 1 -> 10 + + +-- more LHS swaps +fmax3090 fma 1 '-56267E-10' 0 -> '-0.0000056267' +fmax3091 fma 1 '-56267E-6' 0 -> '-0.056267' +fmax3092 fma 1 '-56267E-5' 0 -> '-0.56267' +fmax3093 fma 1 '-56267E-4' 0 -> '-5.6267' +fmax3094 fma 1 '-56267E-3' 0 -> '-56.267' +fmax3095 fma 1 '-56267E-2' 0 -> '-562.67' +fmax3096 fma 1 '-56267E-1' 0 -> '-5626.7' +fmax3097 fma 1 '-56267E-0' 0 -> '-56267' +fmax3098 fma 1 '-5E-10' 0 -> '-5E-10' +fmax3099 fma 1 '-5E-7' 0 -> '-5E-7' +fmax3100 fma 1 '-5E-6' 0 -> '-0.000005' +fmax3101 fma 1 '-5E-5' 0 -> '-0.00005' +fmax3102 fma 1 '-5E-4' 0 -> '-0.0005' +fmax3103 fma 1 '-5E-1' 0 -> '-0.5' +fmax3104 fma 1 '-5E0' 0 -> '-5' +fmax3105 fma 1 '-5E1' 0 -> '-50' +fmax3106 fma 1 '-5E5' 0 -> '-500000' +fmax3107 fma 1 '-5E8' 0 -> '-500000000' +fmax3108 fma 1 '-5E9' 0 -> '-5.00000000E+9' Rounded +fmax3109 fma 1 '-5E10' 0 -> '-5.00000000E+10' Rounded +fmax3110 fma 1 '-5E11' 0 -> '-5.00000000E+11' Rounded +fmax3111 fma 1 '-5E100' 0 -> '-5.00000000E+100' Rounded + +-- more RHS swaps +fmax3113 fma 1 0 '-56267E-10' -> '-0.0000056267' +fmax3114 fma 1 0 '-56267E-6' -> '-0.056267' +fmax3116 fma 1 0 '-56267E-5' -> '-0.56267' +fmax3117 fma 1 0 '-56267E-4' -> '-5.6267' +fmax3119 fma 1 0 '-56267E-3' -> '-56.267' +fmax3120 fma 1 0 '-56267E-2' -> '-562.67' +fmax3121 fma 1 0 '-56267E-1' -> '-5626.7' +fmax3122 fma 1 0 '-56267E-0' -> '-56267' +fmax3123 fma 1 0 '-5E-10' -> '-5E-10' +fmax3124 fma 1 0 '-5E-7' -> '-5E-7' +fmax3125 fma 1 0 '-5E-6' -> '-0.000005' +fmax3126 fma 1 0 '-5E-5' -> '-0.00005' +fmax3127 fma 1 0 '-5E-4' -> '-0.0005' +fmax3128 fma 1 0 '-5E-1' -> '-0.5' +fmax3129 fma 1 0 '-5E0' -> '-5' +fmax3130 fma 1 0 '-5E1' -> '-50' +fmax3131 fma 1 0 '-5E5' -> '-500000' +fmax3132 fma 1 0 '-5E8' -> '-500000000' +fmax3133 fma 1 0 '-5E9' -> '-5.00000000E+9' Rounded +fmax3134 fma 1 0 '-5E10' -> '-5.00000000E+10' Rounded +fmax3135 fma 1 0 '-5E11' -> '-5.00000000E+11' Rounded +fmax3136 fma 1 0 '-5E100' -> '-5.00000000E+100' Rounded + +-- related +fmax3137 fma 1 1 '0E-12' -> '1.00000000' Rounded +fmax3138 fma 1 -1 '0E-12' -> '-1.00000000' Rounded +fmax3139 fma 1 '0E-12' 1 -> '1.00000000' Rounded +fmax3140 fma 1 '0E-12' -1 -> '-1.00000000' Rounded +fmax3141 fma 1 1E+4 0.0000 -> '10000.0000' +fmax3142 fma 1 1E+4 0.00000 -> '10000.0000' Rounded +fmax3143 fma 1 0.000 1E+5 -> '100000.000' +fmax3144 fma 1 0.0000 1E+5 -> '100000.000' Rounded + +-- [some of the next group are really constructor tests] +fmax3146 fma 1 '00.0' 0 -> '0.0' +fmax3147 fma 1 '0.00' 0 -> '0.00' +fmax3148 fma 1 0 '0.00' -> '0.00' +fmax3149 fma 1 0 '00.0' -> '0.0' +fmax3150 fma 1 '00.0' '0.00' -> '0.00' +fmax3151 fma 1 '0.00' '00.0' -> '0.00' +fmax3152 fma 1 '3' '.3' -> '3.3' +fmax3153 fma 1 '3.' '.3' -> '3.3' +fmax3154 fma 1 '3.0' '.3' -> '3.3' +fmax3155 fma 1 '3.00' '.3' -> '3.30' +fmax3156 fma 1 '3' '3' -> '6' +fmax3157 fma 1 '3' '+3' -> '6' +fmax3158 fma 1 '3' '-3' -> '0' +fmax3159 fma 1 '0.3' '-0.3' -> '0.0' +fmax3160 fma 1 '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +precision: 15 +fmax3161 fma 1 '1E+12' '-1' -> '999999999999' +fmax3162 fma 1 '1E+12' '1.11' -> '1000000000001.11' +fmax3163 fma 1 '1.11' '1E+12' -> '1000000000001.11' +fmax3164 fma 1 '-1' '1E+12' -> '999999999999' +fmax3165 fma 1 '7E+12' '-1' -> '6999999999999' +fmax3166 fma 1 '7E+12' '1.11' -> '7000000000001.11' +fmax3167 fma 1 '1.11' '7E+12' -> '7000000000001.11' +fmax3168 fma 1 '-1' '7E+12' -> '6999999999999' + +-- 123456789012345 123456789012345 1 23456789012345 +fmax3170 fma 1 '0.444444444444444' '0.555555555555563' -> '1.00000000000001' Inexact Rounded +fmax3171 fma 1 '0.444444444444444' '0.555555555555562' -> '1.00000000000001' Inexact Rounded +fmax3172 fma 1 '0.444444444444444' '0.555555555555561' -> '1.00000000000001' Inexact Rounded +fmax3173 fma 1 '0.444444444444444' '0.555555555555560' -> '1.00000000000000' Inexact Rounded +fmax3174 fma 1 '0.444444444444444' '0.555555555555559' -> '1.00000000000000' Inexact Rounded +fmax3175 fma 1 '0.444444444444444' '0.555555555555558' -> '1.00000000000000' Inexact Rounded +fmax3176 fma 1 '0.444444444444444' '0.555555555555557' -> '1.00000000000000' Inexact Rounded +fmax3177 fma 1 '0.444444444444444' '0.555555555555556' -> '1.00000000000000' Rounded +fmax3178 fma 1 '0.444444444444444' '0.555555555555555' -> '0.999999999999999' +fmax3179 fma 1 '0.444444444444444' '0.555555555555554' -> '0.999999999999998' +fmax3180 fma 1 '0.444444444444444' '0.555555555555553' -> '0.999999999999997' +fmax3181 fma 1 '0.444444444444444' '0.555555555555552' -> '0.999999999999996' +fmax3182 fma 1 '0.444444444444444' '0.555555555555551' -> '0.999999999999995' +fmax3183 fma 1 '0.444444444444444' '0.555555555555550' -> '0.999999999999994' + +-- and some more, including residue effects and different roundings +precision: 9 +rounding: half_up +fmax3200 fma 1 '123456789' 0 -> '123456789' +fmax3201 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded +fmax3202 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded +fmax3203 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded +fmax3204 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded +fmax3205 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded +fmax3206 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded +fmax3207 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded +fmax3208 fma 1 '123456789' 0.5 -> '123456790' Inexact Rounded +fmax3209 fma 1 '123456789' 0.500000001 -> '123456790' Inexact Rounded +fmax3210 fma 1 '123456789' 0.500001 -> '123456790' Inexact Rounded +fmax3211 fma 1 '123456789' 0.51 -> '123456790' Inexact Rounded +fmax3212 fma 1 '123456789' 0.6 -> '123456790' Inexact Rounded +fmax3213 fma 1 '123456789' 0.9 -> '123456790' Inexact Rounded +fmax3214 fma 1 '123456789' 0.99999 -> '123456790' Inexact Rounded +fmax3215 fma 1 '123456789' 0.999999999 -> '123456790' Inexact Rounded +fmax3216 fma 1 '123456789' 1 -> '123456790' +fmax3217 fma 1 '123456789' 1.000000001 -> '123456790' Inexact Rounded +fmax3218 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded +fmax3219 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded + +rounding: half_even +fmax3220 fma 1 '123456789' 0 -> '123456789' +fmax3221 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded +fmax3222 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded +fmax3223 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded +fmax3224 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded +fmax3225 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded +fmax3226 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded +fmax3227 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded +fmax3228 fma 1 '123456789' 0.5 -> '123456790' Inexact Rounded +fmax3229 fma 1 '123456789' 0.500000001 -> '123456790' Inexact Rounded +fmax3230 fma 1 '123456789' 0.500001 -> '123456790' Inexact Rounded +fmax3231 fma 1 '123456789' 0.51 -> '123456790' Inexact Rounded +fmax3232 fma 1 '123456789' 0.6 -> '123456790' Inexact Rounded +fmax3233 fma 1 '123456789' 0.9 -> '123456790' Inexact Rounded +fmax3234 fma 1 '123456789' 0.99999 -> '123456790' Inexact Rounded +fmax3235 fma 1 '123456789' 0.999999999 -> '123456790' Inexact Rounded +fmax3236 fma 1 '123456789' 1 -> '123456790' +fmax3237 fma 1 '123456789' 1.00000001 -> '123456790' Inexact Rounded +fmax3238 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded +fmax3239 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded +-- critical few with even bottom digit... +fmax3240 fma 1 '123456788' 0.499999999 -> '123456788' Inexact Rounded +fmax3241 fma 1 '123456788' 0.5 -> '123456788' Inexact Rounded +fmax3242 fma 1 '123456788' 0.500000001 -> '123456789' Inexact Rounded + +rounding: down +fmax3250 fma 1 '123456789' 0 -> '123456789' +fmax3251 fma 1 '123456789' 0.000000001 -> '123456789' Inexact Rounded +fmax3252 fma 1 '123456789' 0.000001 -> '123456789' Inexact Rounded +fmax3253 fma 1 '123456789' 0.1 -> '123456789' Inexact Rounded +fmax3254 fma 1 '123456789' 0.4 -> '123456789' Inexact Rounded +fmax3255 fma 1 '123456789' 0.49 -> '123456789' Inexact Rounded +fmax3256 fma 1 '123456789' 0.499999 -> '123456789' Inexact Rounded +fmax3257 fma 1 '123456789' 0.499999999 -> '123456789' Inexact Rounded +fmax3258 fma 1 '123456789' 0.5 -> '123456789' Inexact Rounded +fmax3259 fma 1 '123456789' 0.500000001 -> '123456789' Inexact Rounded +fmax3260 fma 1 '123456789' 0.500001 -> '123456789' Inexact Rounded +fmax3261 fma 1 '123456789' 0.51 -> '123456789' Inexact Rounded +fmax3262 fma 1 '123456789' 0.6 -> '123456789' Inexact Rounded +fmax3263 fma 1 '123456789' 0.9 -> '123456789' Inexact Rounded +fmax3264 fma 1 '123456789' 0.99999 -> '123456789' Inexact Rounded +fmax3265 fma 1 '123456789' 0.999999999 -> '123456789' Inexact Rounded +fmax3266 fma 1 '123456789' 1 -> '123456790' +fmax3267 fma 1 '123456789' 1.00000001 -> '123456790' Inexact Rounded +fmax3268 fma 1 '123456789' 1.00001 -> '123456790' Inexact Rounded +fmax3269 fma 1 '123456789' 1.1 -> '123456790' Inexact Rounded + +-- input preparation tests (operands should not be rounded) +precision: 3 +rounding: half_up + +fmax3270 fma 1 '12345678900000' 9999999999999 -> '2.23E+13' Inexact Rounded +fmax3271 fma 1 '9999999999999' 12345678900000 -> '2.23E+13' Inexact Rounded + +fmax3272 fma 1 '12E+3' '3444' -> '1.54E+4' Inexact Rounded +fmax3273 fma 1 '12E+3' '3446' -> '1.54E+4' Inexact Rounded +fmax3274 fma 1 '12E+3' '3449.9' -> '1.54E+4' Inexact Rounded +fmax3275 fma 1 '12E+3' '3450.0' -> '1.55E+4' Inexact Rounded +fmax3276 fma 1 '12E+3' '3450.1' -> '1.55E+4' Inexact Rounded +fmax3277 fma 1 '12E+3' '3454' -> '1.55E+4' Inexact Rounded +fmax3278 fma 1 '12E+3' '3456' -> '1.55E+4' Inexact Rounded + +fmax3281 fma 1 '3444' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3282 fma 1 '3446' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3283 fma 1 '3449.9' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3284 fma 1 '3450.0' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3285 fma 1 '3450.1' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3286 fma 1 '3454' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3287 fma 1 '3456' '12E+3' -> '1.55E+4' Inexact Rounded + +rounding: half_down +fmax3291 fma 1 '3444' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3292 fma 1 '3446' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3293 fma 1 '3449.9' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3294 fma 1 '3450.0' '12E+3' -> '1.54E+4' Inexact Rounded +fmax3295 fma 1 '3450.1' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3296 fma 1 '3454' '12E+3' -> '1.55E+4' Inexact Rounded +fmax3297 fma 1 '3456' '12E+3' -> '1.55E+4' Inexact Rounded + +-- 1 in last place tests +rounding: half_up +fmax3301 fma 1 -1 1 -> 0 +fmax3302 fma 1 0 1 -> 1 +fmax3303 fma 1 1 1 -> 2 +fmax3304 fma 1 12 1 -> 13 +fmax3305 fma 1 98 1 -> 99 +fmax3306 fma 1 99 1 -> 100 +fmax3307 fma 1 100 1 -> 101 +fmax3308 fma 1 101 1 -> 102 +fmax3309 fma 1 -1 -1 -> -2 +fmax3310 fma 1 0 -1 -> -1 +fmax3311 fma 1 1 -1 -> 0 +fmax3312 fma 1 12 -1 -> 11 +fmax3313 fma 1 98 -1 -> 97 +fmax3314 fma 1 99 -1 -> 98 +fmax3315 fma 1 100 -1 -> 99 +fmax3316 fma 1 101 -1 -> 100 + +fmax3321 fma 1 -0.01 0.01 -> 0.00 +fmax3322 fma 1 0.00 0.01 -> 0.01 +fmax3323 fma 1 0.01 0.01 -> 0.02 +fmax3324 fma 1 0.12 0.01 -> 0.13 +fmax3325 fma 1 0.98 0.01 -> 0.99 +fmax3326 fma 1 0.99 0.01 -> 1.00 +fmax3327 fma 1 1.00 0.01 -> 1.01 +fmax3328 fma 1 1.01 0.01 -> 1.02 +fmax3329 fma 1 -0.01 -0.01 -> -0.02 +fmax3330 fma 1 0.00 -0.01 -> -0.01 +fmax3331 fma 1 0.01 -0.01 -> 0.00 +fmax3332 fma 1 0.12 -0.01 -> 0.11 +fmax3333 fma 1 0.98 -0.01 -> 0.97 +fmax3334 fma 1 0.99 -0.01 -> 0.98 +fmax3335 fma 1 1.00 -0.01 -> 0.99 +fmax3336 fma 1 1.01 -0.01 -> 1.00 + +-- some more cases where fma 1 ing 0 affects the coefficient +precision: 9 +fmax3340 fma 1 1E+3 0 -> 1000 +fmax3341 fma 1 1E+8 0 -> 100000000 +fmax3342 fma 1 1E+9 0 -> 1.00000000E+9 Rounded +fmax3343 fma 1 1E+10 0 -> 1.00000000E+10 Rounded +-- which simply follow from these cases ... +fmax3344 fma 1 1E+3 1 -> 1001 +fmax3345 fma 1 1E+8 1 -> 100000001 +fmax3346 fma 1 1E+9 1 -> 1.00000000E+9 Inexact Rounded +fmax3347 fma 1 1E+10 1 -> 1.00000000E+10 Inexact Rounded +fmax3348 fma 1 1E+3 7 -> 1007 +fmax3349 fma 1 1E+8 7 -> 100000007 +fmax3350 fma 1 1E+9 7 -> 1.00000001E+9 Inexact Rounded +fmax3351 fma 1 1E+10 7 -> 1.00000000E+10 Inexact Rounded + +-- tryzeros cases +precision: 7 +rounding: half_up +maxExponent: 92 +minexponent: -92 +fmax3361 fma 1 0E+50 10000E+1 -> 1.0000E+5 +fmax3362 fma 1 10000E+1 0E-50 -> 100000.0 Rounded +fmax3363 fma 1 10000E+1 10000E-50 -> 100000.0 Rounded Inexact +fmax3364 fma 1 9.999999E+92 -9.999999E+92 -> 0E+86 + +-- a curiosity from JSR 13 testing +rounding: half_down +precision: 10 +fmax3370 fma 1 99999999 81512 -> 100081511 +precision: 6 +fmax3371 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact +rounding: half_up +precision: 10 +fmax3372 fma 1 99999999 81512 -> 100081511 +precision: 6 +fmax3373 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact +rounding: half_even +precision: 10 +fmax3374 fma 1 99999999 81512 -> 100081511 +precision: 6 +fmax3375 fma 1 99999999 81512 -> 1.00082E+8 Rounded Inexact + +-- ulp replacement tests +precision: 9 +maxexponent: 999999 +minexponent: -999999 +fmax3400 fma 1 1 77e-7 -> 1.0000077 +fmax3401 fma 1 1 77e-8 -> 1.00000077 +fmax3402 fma 1 1 77e-9 -> 1.00000008 Inexact Rounded +fmax3403 fma 1 1 77e-10 -> 1.00000001 Inexact Rounded +fmax3404 fma 1 1 77e-11 -> 1.00000000 Inexact Rounded +fmax3405 fma 1 1 77e-12 -> 1.00000000 Inexact Rounded +fmax3406 fma 1 1 77e-999 -> 1.00000000 Inexact Rounded +fmax3407 fma 1 1 77e-999999 -> 1.00000000 Inexact Rounded + +fmax3410 fma 1 10 77e-7 -> 10.0000077 +fmax3411 fma 1 10 77e-8 -> 10.0000008 Inexact Rounded +fmax3412 fma 1 10 77e-9 -> 10.0000001 Inexact Rounded +fmax3413 fma 1 10 77e-10 -> 10.0000000 Inexact Rounded +fmax3414 fma 1 10 77e-11 -> 10.0000000 Inexact Rounded +fmax3415 fma 1 10 77e-12 -> 10.0000000 Inexact Rounded +fmax3416 fma 1 10 77e-999 -> 10.0000000 Inexact Rounded +fmax3417 fma 1 10 77e-999999 -> 10.0000000 Inexact Rounded + +fmax3420 fma 1 77e-7 1 -> 1.0000077 +fmax3421 fma 1 77e-8 1 -> 1.00000077 +fmax3422 fma 1 77e-9 1 -> 1.00000008 Inexact Rounded +fmax3423 fma 1 77e-10 1 -> 1.00000001 Inexact Rounded +fmax3424 fma 1 77e-11 1 -> 1.00000000 Inexact Rounded +fmax3425 fma 1 77e-12 1 -> 1.00000000 Inexact Rounded +fmax3426 fma 1 77e-999 1 -> 1.00000000 Inexact Rounded +fmax3427 fma 1 77e-999999 1 -> 1.00000000 Inexact Rounded + +fmax3430 fma 1 77e-7 10 -> 10.0000077 +fmax3431 fma 1 77e-8 10 -> 10.0000008 Inexact Rounded +fmax3432 fma 1 77e-9 10 -> 10.0000001 Inexact Rounded +fmax3433 fma 1 77e-10 10 -> 10.0000000 Inexact Rounded +fmax3434 fma 1 77e-11 10 -> 10.0000000 Inexact Rounded +fmax3435 fma 1 77e-12 10 -> 10.0000000 Inexact Rounded +fmax3436 fma 1 77e-999 10 -> 10.0000000 Inexact Rounded +fmax3437 fma 1 77e-999999 10 -> 10.0000000 Inexact Rounded + +-- negative ulps +fmax3440 fma 1 1 -77e-7 -> 0.9999923 +fmax3441 fma 1 1 -77e-8 -> 0.99999923 +fmax3442 fma 1 1 -77e-9 -> 0.999999923 +fmax3443 fma 1 1 -77e-10 -> 0.999999992 Inexact Rounded +fmax3444 fma 1 1 -77e-11 -> 0.999999999 Inexact Rounded +fmax3445 fma 1 1 -77e-12 -> 1.00000000 Inexact Rounded +fmax3446 fma 1 1 -77e-999 -> 1.00000000 Inexact Rounded +fmax3447 fma 1 1 -77e-999999 -> 1.00000000 Inexact Rounded + +fmax3450 fma 1 10 -77e-7 -> 9.9999923 +fmax3451 fma 1 10 -77e-8 -> 9.99999923 +fmax3452 fma 1 10 -77e-9 -> 9.99999992 Inexact Rounded +fmax3453 fma 1 10 -77e-10 -> 9.99999999 Inexact Rounded +fmax3454 fma 1 10 -77e-11 -> 10.0000000 Inexact Rounded +fmax3455 fma 1 10 -77e-12 -> 10.0000000 Inexact Rounded +fmax3456 fma 1 10 -77e-999 -> 10.0000000 Inexact Rounded +fmax3457 fma 1 10 -77e-999999 -> 10.0000000 Inexact Rounded + +fmax3460 fma 1 -77e-7 1 -> 0.9999923 +fmax3461 fma 1 -77e-8 1 -> 0.99999923 +fmax3462 fma 1 -77e-9 1 -> 0.999999923 +fmax3463 fma 1 -77e-10 1 -> 0.999999992 Inexact Rounded +fmax3464 fma 1 -77e-11 1 -> 0.999999999 Inexact Rounded +fmax3465 fma 1 -77e-12 1 -> 1.00000000 Inexact Rounded +fmax3466 fma 1 -77e-999 1 -> 1.00000000 Inexact Rounded +fmax3467 fma 1 -77e-999999 1 -> 1.00000000 Inexact Rounded + +fmax3470 fma 1 -77e-7 10 -> 9.9999923 +fmax3471 fma 1 -77e-8 10 -> 9.99999923 +fmax3472 fma 1 -77e-9 10 -> 9.99999992 Inexact Rounded +fmax3473 fma 1 -77e-10 10 -> 9.99999999 Inexact Rounded +fmax3474 fma 1 -77e-11 10 -> 10.0000000 Inexact Rounded +fmax3475 fma 1 -77e-12 10 -> 10.0000000 Inexact Rounded +fmax3476 fma 1 -77e-999 10 -> 10.0000000 Inexact Rounded +fmax3477 fma 1 -77e-999999 10 -> 10.0000000 Inexact Rounded + +-- negative ulps +fmax3480 fma 1 -1 77e-7 -> -0.9999923 +fmax3481 fma 1 -1 77e-8 -> -0.99999923 +fmax3482 fma 1 -1 77e-9 -> -0.999999923 +fmax3483 fma 1 -1 77e-10 -> -0.999999992 Inexact Rounded +fmax3484 fma 1 -1 77e-11 -> -0.999999999 Inexact Rounded +fmax3485 fma 1 -1 77e-12 -> -1.00000000 Inexact Rounded +fmax3486 fma 1 -1 77e-999 -> -1.00000000 Inexact Rounded +fmax3487 fma 1 -1 77e-999999 -> -1.00000000 Inexact Rounded + +fmax3490 fma 1 -10 77e-7 -> -9.9999923 +fmax3491 fma 1 -10 77e-8 -> -9.99999923 +fmax3492 fma 1 -10 77e-9 -> -9.99999992 Inexact Rounded +fmax3493 fma 1 -10 77e-10 -> -9.99999999 Inexact Rounded +fmax3494 fma 1 -10 77e-11 -> -10.0000000 Inexact Rounded +fmax3495 fma 1 -10 77e-12 -> -10.0000000 Inexact Rounded +fmax3496 fma 1 -10 77e-999 -> -10.0000000 Inexact Rounded +fmax3497 fma 1 -10 77e-999999 -> -10.0000000 Inexact Rounded + +fmax3500 fma 1 77e-7 -1 -> -0.9999923 +fmax3501 fma 1 77e-8 -1 -> -0.99999923 +fmax3502 fma 1 77e-9 -1 -> -0.999999923 +fmax3503 fma 1 77e-10 -1 -> -0.999999992 Inexact Rounded +fmax3504 fma 1 77e-11 -1 -> -0.999999999 Inexact Rounded +fmax3505 fma 1 77e-12 -1 -> -1.00000000 Inexact Rounded +fmax3506 fma 1 77e-999 -1 -> -1.00000000 Inexact Rounded +fmax3507 fma 1 77e-999999 -1 -> -1.00000000 Inexact Rounded + +fmax3510 fma 1 77e-7 -10 -> -9.9999923 +fmax3511 fma 1 77e-8 -10 -> -9.99999923 +fmax3512 fma 1 77e-9 -10 -> -9.99999992 Inexact Rounded +fmax3513 fma 1 77e-10 -10 -> -9.99999999 Inexact Rounded +fmax3514 fma 1 77e-11 -10 -> -10.0000000 Inexact Rounded +fmax3515 fma 1 77e-12 -10 -> -10.0000000 Inexact Rounded +fmax3516 fma 1 77e-999 -10 -> -10.0000000 Inexact Rounded +fmax3517 fma 1 77e-999999 -10 -> -10.0000000 Inexact Rounded + + +-- long operands +maxexponent: 999 +minexponent: -999 +precision: 9 +fmax3521 fma 1 12345678000 0 -> 1.23456780E+10 Rounded +fmax3522 fma 1 0 12345678000 -> 1.23456780E+10 Rounded +fmax3523 fma 1 1234567800 0 -> 1.23456780E+9 Rounded +fmax3524 fma 1 0 1234567800 -> 1.23456780E+9 Rounded +fmax3525 fma 1 1234567890 0 -> 1.23456789E+9 Rounded +fmax3526 fma 1 0 1234567890 -> 1.23456789E+9 Rounded +fmax3527 fma 1 1234567891 0 -> 1.23456789E+9 Inexact Rounded +fmax3528 fma 1 0 1234567891 -> 1.23456789E+9 Inexact Rounded +fmax3529 fma 1 12345678901 0 -> 1.23456789E+10 Inexact Rounded +fmax3530 fma 1 0 12345678901 -> 1.23456789E+10 Inexact Rounded +fmax3531 fma 1 1234567896 0 -> 1.23456790E+9 Inexact Rounded +fmax3532 fma 1 0 1234567896 -> 1.23456790E+9 Inexact Rounded + +precision: 15 +-- still checking +fmax3541 fma 1 12345678000 0 -> 12345678000 +fmax3542 fma 1 0 12345678000 -> 12345678000 +fmax3543 fma 1 1234567800 0 -> 1234567800 +fmax3544 fma 1 0 1234567800 -> 1234567800 +fmax3545 fma 1 1234567890 0 -> 1234567890 +fmax3546 fma 1 0 1234567890 -> 1234567890 +fmax3547 fma 1 1234567891 0 -> 1234567891 +fmax3548 fma 1 0 1234567891 -> 1234567891 +fmax3549 fma 1 12345678901 0 -> 12345678901 +fmax3550 fma 1 0 12345678901 -> 12345678901 +fmax3551 fma 1 1234567896 0 -> 1234567896 +fmax3552 fma 1 0 1234567896 -> 1234567896 + +-- verify a query +precision: 16 +maxExponent: +394 +minExponent: -393 +rounding: down +fmax3561 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded +fmax3562 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded +-- and using decimal64 bounds... +precision: 16 +maxExponent: +384 +minExponent: -383 +rounding: down +fmax3563 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded +fmax3564 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded + + +-- some more residue effects with extreme rounding +precision: 9 +rounding: half_up +fmax3601 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded +rounding: half_even +fmax3602 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded +rounding: half_down +fmax3603 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded +rounding: floor +fmax3604 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded +rounding: ceiling +fmax3605 fma 1 123456789 0.000001 -> 123456790 Inexact Rounded +rounding: up +fmax3606 fma 1 123456789 0.000001 -> 123456790 Inexact Rounded +rounding: down +fmax3607 fma 1 123456789 0.000001 -> 123456789 Inexact Rounded + +rounding: half_up +fmax3611 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: half_even +fmax3612 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: half_down +fmax3613 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: floor +fmax3614 fma 1 123456789 -0.000001 -> 123456788 Inexact Rounded +rounding: ceiling +fmax3615 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: up +fmax3616 fma 1 123456789 -0.000001 -> 123456789 Inexact Rounded +rounding: down +fmax3617 fma 1 123456789 -0.000001 -> 123456788 Inexact Rounded + +rounding: half_up +fmax3621 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded +rounding: half_even +fmax3622 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded +rounding: half_down +fmax3623 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded +rounding: floor +fmax3624 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded +rounding: ceiling +fmax3625 fma 1 123456789 0.499999 -> 123456790 Inexact Rounded +rounding: up +fmax3626 fma 1 123456789 0.499999 -> 123456790 Inexact Rounded +rounding: down +fmax3627 fma 1 123456789 0.499999 -> 123456789 Inexact Rounded + +rounding: half_up +fmax3631 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: half_even +fmax3632 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: half_down +fmax3633 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: floor +fmax3634 fma 1 123456789 -0.499999 -> 123456788 Inexact Rounded +rounding: ceiling +fmax3635 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: up +fmax3636 fma 1 123456789 -0.499999 -> 123456789 Inexact Rounded +rounding: down +fmax3637 fma 1 123456789 -0.499999 -> 123456788 Inexact Rounded + +rounding: half_up +fmax3641 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: half_even +fmax3642 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: half_down +fmax3643 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: floor +fmax3644 fma 1 123456789 0.500001 -> 123456789 Inexact Rounded +rounding: ceiling +fmax3645 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: up +fmax3646 fma 1 123456789 0.500001 -> 123456790 Inexact Rounded +rounding: down +fmax3647 fma 1 123456789 0.500001 -> 123456789 Inexact Rounded + +rounding: half_up +fmax3651 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded +rounding: half_even +fmax3652 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded +rounding: half_down +fmax3653 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded +rounding: floor +fmax3654 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded +rounding: ceiling +fmax3655 fma 1 123456789 -0.500001 -> 123456789 Inexact Rounded +rounding: up +fmax3656 fma 1 123456789 -0.500001 -> 123456789 Inexact Rounded +rounding: down +fmax3657 fma 1 123456789 -0.500001 -> 123456788 Inexact Rounded + +-- long operand triangle +rounding: half_up +precision: 37 +fmax3660 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337114834538 +precision: 36 +fmax3661 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711483454 Inexact Rounded +precision: 35 +fmax3662 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371148345 Inexact Rounded +precision: 34 +fmax3663 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337114835 Inexact Rounded +precision: 33 +fmax3664 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711483 Inexact Rounded +precision: 32 +fmax3665 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371148 Inexact Rounded +precision: 31 +fmax3666 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337115 Inexact Rounded +precision: 30 +fmax3667 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892233711 Inexact Rounded +precision: 29 +fmax3668 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223371 Inexact Rounded +precision: 28 +fmax3669 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922337 Inexact Rounded +precision: 27 +fmax3670 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892234 Inexact Rounded +precision: 26 +fmax3671 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389223 Inexact Rounded +precision: 25 +fmax3672 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023638922 Inexact Rounded +precision: 24 +fmax3673 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102363892 Inexact Rounded +precision: 23 +fmax3674 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236389 Inexact Rounded +precision: 22 +fmax3675 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211023639 Inexact Rounded +precision: 21 +fmax3676 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102364 Inexact Rounded +precision: 20 +fmax3677 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110236 Inexact Rounded +precision: 19 +fmax3678 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211024 Inexact Rounded +precision: 18 +fmax3679 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221102 Inexact Rounded +precision: 17 +fmax3680 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422110 Inexact Rounded +precision: 16 +fmax3681 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42211 Inexact Rounded +precision: 15 +fmax3682 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4221 Inexact Rounded +precision: 14 +fmax3683 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.422 Inexact Rounded +precision: 13 +fmax3684 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.42 Inexact Rounded +precision: 12 +fmax3685 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166.4 Inexact Rounded +precision: 11 +fmax3686 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 98471174166 Inexact Rounded +precision: 10 +fmax3687 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847117417E+10 Inexact Rounded +precision: 9 +fmax3688 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.84711742E+10 Inexact Rounded +precision: 8 +fmax3689 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8471174E+10 Inexact Rounded +precision: 7 +fmax3690 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847117E+10 Inexact Rounded +precision: 6 +fmax3691 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.84712E+10 Inexact Rounded +precision: 5 +fmax3692 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8471E+10 Inexact Rounded +precision: 4 +fmax3693 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.847E+10 Inexact Rounded +precision: 3 +fmax3694 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.85E+10 Inexact Rounded +precision: 2 +fmax3695 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 9.8E+10 Inexact Rounded +precision: 1 +fmax3696 fma 1 98471198160.56524417578665886060 -23994.14313393939743548945165462 -> 1E+11 Inexact Rounded + +-- more zeros, etc. +rounding: half_up +precision: 9 + +fmax3701 fma 1 5.00 1.00E-3 -> 5.00100 +fmax3702 fma 1 00.00 0.000 -> 0.000 +fmax3703 fma 1 00.00 0E-3 -> 0.000 +fmax3704 fma 1 0E-3 00.00 -> 0.000 + +fmax3710 fma 1 0E+3 00.00 -> 0.00 +fmax3711 fma 1 0E+3 00.0 -> 0.0 +fmax3712 fma 1 0E+3 00. -> 0 +fmax3713 fma 1 0E+3 00.E+1 -> 0E+1 +fmax3714 fma 1 0E+3 00.E+2 -> 0E+2 +fmax3715 fma 1 0E+3 00.E+3 -> 0E+3 +fmax3716 fma 1 0E+3 00.E+4 -> 0E+3 +fmax3717 fma 1 0E+3 00.E+5 -> 0E+3 +fmax3718 fma 1 0E+3 -00.0 -> 0.0 +fmax3719 fma 1 0E+3 -00. -> 0 +fmax3731 fma 1 0E+3 -00.E+1 -> 0E+1 + +fmax3720 fma 1 00.00 0E+3 -> 0.00 +fmax3721 fma 1 00.0 0E+3 -> 0.0 +fmax3722 fma 1 00. 0E+3 -> 0 +fmax3723 fma 1 00.E+1 0E+3 -> 0E+1 +fmax3724 fma 1 00.E+2 0E+3 -> 0E+2 +fmax3725 fma 1 00.E+3 0E+3 -> 0E+3 +fmax3726 fma 1 00.E+4 0E+3 -> 0E+3 +fmax3727 fma 1 00.E+5 0E+3 -> 0E+3 +fmax3728 fma 1 -00.00 0E+3 -> 0.00 +fmax3729 fma 1 -00.0 0E+3 -> 0.0 +fmax3730 fma 1 -00. 0E+3 -> 0 + +fmax3732 fma 1 0 0 -> 0 +fmax3733 fma 1 0 -0 -> 0 +fmax3734 fma 1 -0 0 -> 0 +fmax3735 fma 1 -0 -0 -> -0 -- IEEE 854 special case + +fmax3736 fma 1 1 -1 -> 0 +fmax3737 fma 1 -1 -1 -> -2 +fmax3738 fma 1 1 1 -> 2 +fmax3739 fma 1 -1 1 -> 0 + +fmax3741 fma 1 0 -1 -> -1 +fmax3742 fma 1 -0 -1 -> -1 +fmax3743 fma 1 0 1 -> 1 +fmax3744 fma 1 -0 1 -> 1 +fmax3745 fma 1 -1 0 -> -1 +fmax3746 fma 1 -1 -0 -> -1 +fmax3747 fma 1 1 0 -> 1 +fmax3748 fma 1 1 -0 -> 1 + +fmax3751 fma 1 0.0 -1 -> -1.0 +fmax3752 fma 1 -0.0 -1 -> -1.0 +fmax3753 fma 1 0.0 1 -> 1.0 +fmax3754 fma 1 -0.0 1 -> 1.0 +fmax3755 fma 1 -1.0 0 -> -1.0 +fmax3756 fma 1 -1.0 -0 -> -1.0 +fmax3757 fma 1 1.0 0 -> 1.0 +fmax3758 fma 1 1.0 -0 -> 1.0 + +fmax3761 fma 1 0 -1.0 -> -1.0 +fmax3762 fma 1 -0 -1.0 -> -1.0 +fmax3763 fma 1 0 1.0 -> 1.0 +fmax3764 fma 1 -0 1.0 -> 1.0 +fmax3765 fma 1 -1 0.0 -> -1.0 +fmax3766 fma 1 -1 -0.0 -> -1.0 +fmax3767 fma 1 1 0.0 -> 1.0 +fmax3768 fma 1 1 -0.0 -> 1.0 + +fmax3771 fma 1 0.0 -1.0 -> -1.0 +fmax3772 fma 1 -0.0 -1.0 -> -1.0 +fmax3773 fma 1 0.0 1.0 -> 1.0 +fmax3774 fma 1 -0.0 1.0 -> 1.0 +fmax3775 fma 1 -1.0 0.0 -> -1.0 +fmax3776 fma 1 -1.0 -0.0 -> -1.0 +fmax3777 fma 1 1.0 0.0 -> 1.0 +fmax3778 fma 1 1.0 -0.0 -> 1.0 + +-- Specials +fmax3780 fma 1 -Inf -Inf -> -Infinity +fmax3781 fma 1 -Inf -1000 -> -Infinity +fmax3782 fma 1 -Inf -1 -> -Infinity +fmax3783 fma 1 -Inf -0 -> -Infinity +fmax3784 fma 1 -Inf 0 -> -Infinity +fmax3785 fma 1 -Inf 1 -> -Infinity +fmax3786 fma 1 -Inf 1000 -> -Infinity +fmax3787 fma 1 -1000 -Inf -> -Infinity +fmax3788 fma 1 -Inf -Inf -> -Infinity +fmax3789 fma 1 -1 -Inf -> -Infinity +fmax3790 fma 1 -0 -Inf -> -Infinity +fmax3791 fma 1 0 -Inf -> -Infinity +fmax3792 fma 1 1 -Inf -> -Infinity +fmax3793 fma 1 1000 -Inf -> -Infinity +fmax3794 fma 1 Inf -Inf -> NaN Invalid_operation + +fmax3800 fma 1 Inf -Inf -> NaN Invalid_operation +fmax3801 fma 1 Inf -1000 -> Infinity +fmax3802 fma 1 Inf -1 -> Infinity +fmax3803 fma 1 Inf -0 -> Infinity +fmax3804 fma 1 Inf 0 -> Infinity +fmax3805 fma 1 Inf 1 -> Infinity +fmax3806 fma 1 Inf 1000 -> Infinity +fmax3807 fma 1 Inf Inf -> Infinity +fmax3808 fma 1 -1000 Inf -> Infinity +fmax3809 fma 1 -Inf Inf -> NaN Invalid_operation +fmax3810 fma 1 -1 Inf -> Infinity +fmax3811 fma 1 -0 Inf -> Infinity +fmax3812 fma 1 0 Inf -> Infinity +fmax3813 fma 1 1 Inf -> Infinity +fmax3814 fma 1 1000 Inf -> Infinity +fmax3815 fma 1 Inf Inf -> Infinity + +fmax3821 fma 1 NaN -Inf -> NaN +fmax3822 fma 1 NaN -1000 -> NaN +fmax3823 fma 1 NaN -1 -> NaN +fmax3824 fma 1 NaN -0 -> NaN +fmax3825 fma 1 NaN 0 -> NaN +fmax3826 fma 1 NaN 1 -> NaN +fmax3827 fma 1 NaN 1000 -> NaN +fmax3828 fma 1 NaN Inf -> NaN +fmax3829 fma 1 NaN NaN -> NaN +fmax3830 fma 1 -Inf NaN -> NaN +fmax3831 fma 1 -1000 NaN -> NaN +fmax3832 fma 1 -1 NaN -> NaN +fmax3833 fma 1 -0 NaN -> NaN +fmax3834 fma 1 0 NaN -> NaN +fmax3835 fma 1 1 NaN -> NaN +fmax3836 fma 1 1000 NaN -> NaN +fmax3837 fma 1 Inf NaN -> NaN + +fmax3841 fma 1 sNaN -Inf -> NaN Invalid_operation +fmax3842 fma 1 sNaN -1000 -> NaN Invalid_operation +fmax3843 fma 1 sNaN -1 -> NaN Invalid_operation +fmax3844 fma 1 sNaN -0 -> NaN Invalid_operation +fmax3845 fma 1 sNaN 0 -> NaN Invalid_operation +fmax3846 fma 1 sNaN 1 -> NaN Invalid_operation +fmax3847 fma 1 sNaN 1000 -> NaN Invalid_operation +fmax3848 fma 1 sNaN NaN -> NaN Invalid_operation +fmax3849 fma 1 sNaN sNaN -> NaN Invalid_operation +fmax3850 fma 1 NaN sNaN -> NaN Invalid_operation +fmax3851 fma 1 -Inf sNaN -> NaN Invalid_operation +fmax3852 fma 1 -1000 sNaN -> NaN Invalid_operation +fmax3853 fma 1 -1 sNaN -> NaN Invalid_operation +fmax3854 fma 1 -0 sNaN -> NaN Invalid_operation +fmax3855 fma 1 0 sNaN -> NaN Invalid_operation +fmax3856 fma 1 1 sNaN -> NaN Invalid_operation +fmax3857 fma 1 1000 sNaN -> NaN Invalid_operation +fmax3858 fma 1 Inf sNaN -> NaN Invalid_operation +fmax3859 fma 1 NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +fmax3861 fma 1 NaN1 -Inf -> NaN1 +fmax3862 fma 1 +NaN2 -1000 -> NaN2 +fmax3863 fma 1 NaN3 1000 -> NaN3 +fmax3864 fma 1 NaN4 Inf -> NaN4 +fmax3865 fma 1 NaN5 +NaN6 -> NaN5 +fmax3866 fma 1 -Inf NaN7 -> NaN7 +fmax3867 fma 1 -1000 NaN8 -> NaN8 +fmax3868 fma 1 1000 NaN9 -> NaN9 +fmax3869 fma 1 Inf +NaN10 -> NaN10 +fmax3871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation +fmax3872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation +fmax3873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation +fmax3874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation +fmax3875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation +fmax3876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation +fmax3877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation +fmax3878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation +fmax3879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation +fmax3880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation +fmax3881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation +fmax3882 fma 1 -NaN26 NaN28 -> -NaN26 +fmax3883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation +fmax3884 fma 1 1000 -NaN30 -> -NaN30 +fmax3885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- overflow, underflow and subnormal tests +maxexponent: 999999 +minexponent: -999999 +precision: 9 +fmax3890 fma 1 1E+999999 9E+999999 -> Infinity Overflow Inexact Rounded +fmax3891 fma 1 9E+999999 1E+999999 -> Infinity Overflow Inexact Rounded +fmax3892 fma 1 -1.1E-999999 1E-999999 -> -1E-1000000 Subnormal +fmax3893 fma 1 1E-999999 -1.1e-999999 -> -1E-1000000 Subnormal +fmax3894 fma 1 -1.0001E-999999 1E-999999 -> -1E-1000003 Subnormal +fmax3895 fma 1 1E-999999 -1.0001e-999999 -> -1E-1000003 Subnormal +fmax3896 fma 1 -1E+999999 -9E+999999 -> -Infinity Overflow Inexact Rounded +fmax3897 fma 1 -9E+999999 -1E+999999 -> -Infinity Overflow Inexact Rounded +fmax3898 fma 1 +1.1E-999999 -1E-999999 -> 1E-1000000 Subnormal +fmax3899 fma 1 -1E-999999 +1.1e-999999 -> 1E-1000000 Subnormal +fmax3900 fma 1 +1.0001E-999999 -1E-999999 -> 1E-1000003 Subnormal +fmax3901 fma 1 -1E-999999 +1.0001e-999999 -> 1E-1000003 Subnormal +fmax3902 fma 1 -1E+999999 +9E+999999 -> 8E+999999 +fmax3903 fma 1 -9E+999999 +1E+999999 -> -8E+999999 + +precision: 3 +fmax3904 fma 1 0 -9.999E+999999 -> -Infinity Inexact Overflow Rounded +fmax3905 fma 1 -9.999E+999999 0 -> -Infinity Inexact Overflow Rounded +fmax3906 fma 1 0 9.999E+999999 -> Infinity Inexact Overflow Rounded +fmax3907 fma 1 9.999E+999999 0 -> Infinity Inexact Overflow Rounded + +precision: 3 +maxexponent: 999 +minexponent: -999 +fmax3910 fma 1 1.00E-999 0 -> 1.00E-999 +fmax3911 fma 1 0.1E-999 0 -> 1E-1000 Subnormal +fmax3912 fma 1 0.10E-999 0 -> 1.0E-1000 Subnormal +fmax3913 fma 1 0.100E-999 0 -> 1.0E-1000 Subnormal Rounded +fmax3914 fma 1 0.01E-999 0 -> 1E-1001 Subnormal +-- next is rounded to Nmin +fmax3915 fma 1 0.999E-999 0 -> 1.00E-999 Inexact Rounded Subnormal Underflow +fmax3916 fma 1 0.099E-999 0 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3917 fma 1 0.009E-999 0 -> 1E-1001 Inexact Rounded Subnormal Underflow +fmax3918 fma 1 0.001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3919 fma 1 0.0009E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3920 fma 1 0.0001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped + +fmax3930 fma 1 -1.00E-999 0 -> -1.00E-999 +fmax3931 fma 1 -0.1E-999 0 -> -1E-1000 Subnormal +fmax3932 fma 1 -0.10E-999 0 -> -1.0E-1000 Subnormal +fmax3933 fma 1 -0.100E-999 0 -> -1.0E-1000 Subnormal Rounded +fmax3934 fma 1 -0.01E-999 0 -> -1E-1001 Subnormal +-- next is rounded to Nmin +fmax3935 fma 1 -0.999E-999 0 -> -1.00E-999 Inexact Rounded Subnormal Underflow +fmax3936 fma 1 -0.099E-999 0 -> -1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3937 fma 1 -0.009E-999 0 -> -1E-1001 Inexact Rounded Subnormal Underflow +fmax3938 fma 1 -0.001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3939 fma 1 -0.0009E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3940 fma 1 -0.0001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped + +-- some non-zero subnormal fma 1 s +fmax3950 fma 1 1.00E-999 0.1E-999 -> 1.10E-999 +fmax3951 fma 1 0.1E-999 0.1E-999 -> 2E-1000 Subnormal +fmax3952 fma 1 0.10E-999 0.1E-999 -> 2.0E-1000 Subnormal +fmax3953 fma 1 0.100E-999 0.1E-999 -> 2.0E-1000 Subnormal Rounded +fmax3954 fma 1 0.01E-999 0.1E-999 -> 1.1E-1000 Subnormal +fmax3955 fma 1 0.999E-999 0.1E-999 -> 1.10E-999 Inexact Rounded +fmax3956 fma 1 0.099E-999 0.1E-999 -> 2.0E-1000 Inexact Rounded Subnormal Underflow +fmax3957 fma 1 0.009E-999 0.1E-999 -> 1.1E-1000 Inexact Rounded Subnormal Underflow +fmax3958 fma 1 0.001E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3959 fma 1 0.0009E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3960 fma 1 0.0001E-999 0.1E-999 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +-- negatives... +fmax3961 fma 1 1.00E-999 -0.1E-999 -> 9.0E-1000 Subnormal +fmax3962 fma 1 0.1E-999 -0.1E-999 -> 0E-1000 +fmax3963 fma 1 0.10E-999 -0.1E-999 -> 0E-1001 +fmax3964 fma 1 0.100E-999 -0.1E-999 -> 0E-1001 Clamped +fmax3965 fma 1 0.01E-999 -0.1E-999 -> -9E-1001 Subnormal +fmax3966 fma 1 0.999E-999 -0.1E-999 -> 9.0E-1000 Inexact Rounded Subnormal Underflow +fmax3967 fma 1 0.099E-999 -0.1E-999 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +fmax3968 fma 1 0.009E-999 -0.1E-999 -> -9E-1001 Inexact Rounded Subnormal Underflow +fmax3969 fma 1 0.001E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3970 fma 1 0.0009E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow +fmax3971 fma 1 0.0001E-999 -0.1E-999 -> -1.0E-1000 Inexact Rounded Subnormal Underflow + +-- some 'real' numbers +maxExponent: 384 +minExponent: -383 +precision: 8 +fmax3566 fma 1 99999061735E-394 0E-394 -> 9.999906E-384 Inexact Rounded Underflow Subnormal +precision: 7 +fmax3567 fma 1 99999061735E-394 0E-394 -> 9.99991E-384 Inexact Rounded Underflow Subnormal +precision: 6 +fmax3568 fma 1 99999061735E-394 0E-394 -> 9.9999E-384 Inexact Rounded Underflow Subnormal + +-- now the case where we can get underflow but the result is normal +-- [note this can't happen if the operands are also bounded, as we +-- cannot represent 1E-399, for example] +precision: 16 +rounding: half_up +maxExponent: 384 +minExponent: -383 + +fmax3571 fma 1 1E-383 0 -> 1E-383 +fmax3572 fma 1 1E-384 0 -> 1E-384 Subnormal +fmax3573 fma 1 1E-383 1E-384 -> 1.1E-383 +fmax3574 subtract 1E-383 1E-384 -> 9E-384 Subnormal + +-- Here we explore the boundary of rounding a subnormal to Nmin +fmax3575 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal +fmax3576 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal +fmax3577 subtract 1E-383 1E-399 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax3578 subtract 1E-383 1E-400 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax3579 subtract 1E-383 1E-401 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax3580 subtract 1E-383 1E-402 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded + +-- check for double-rounded subnormals +precision: 5 +maxexponent: 79 +minexponent: -79 +-- Add: lhs and rhs 0 +fmax31001 fma 1 1.52444E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31002 fma 1 1.52445E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31003 fma 1 1.52446E-80 0 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31004 fma 1 0 1.52444E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31005 fma 1 0 1.52445E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31006 fma 1 0 1.52446E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow + +-- Add: lhs >> rhs and vice versa +fmax31011 fma 1 1.52444E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31012 fma 1 1.52445E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31013 fma 1 1.52446E-80 1E-100 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31014 fma 1 1E-100 1.52444E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31015 fma 1 1E-100 1.52445E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow +fmax31016 fma 1 1E-100 1.52446E-80 -> 1.524E-80 Inexact Rounded Subnormal Underflow + +-- Add: lhs + rhs fma 1 ition carried out +fmax31021 fma 1 1.52443E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31022 fma 1 1.52444E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31023 fma 1 1.52445E-80 1.00001E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31024 fma 1 1.00001E-80 1.52443E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31025 fma 1 1.00001E-80 1.52444E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow +fmax31026 fma 1 1.00001E-80 1.52445E-80 -> 2.524E-80 Inexact Rounded Subnormal Underflow + +-- And for round down full and subnormal results +precision: 16 +maxExponent: +384 +minExponent: -383 +rounding: down + +fmax31100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact +fmax31101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact +fmax31103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact +fmax31104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact +fmax31105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact +fmax31106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact +fmax31107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact +fmax31108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact +fmax31109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact + +rounding: ceiling +fmax31110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact +fmax31111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact +fmax31113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact +fmax31114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact +fmax31115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact +fmax31116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact +fmax31117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact +fmax31118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact +fmax31119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact + +rounding: down +precision: 7 +maxExponent: +96 +minExponent: -95 +fmax31130 fma 1 1 -1e-200 -> 0.9999999 Rounded Inexact +-- subnormal boundary +fmax31131 fma 1 1.000000E-94 -1e-200 -> 9.999999E-95 Rounded Inexact +fmax31132 fma 1 1.000001E-95 -1e-200 -> 1.000000E-95 Rounded Inexact +fmax31133 fma 1 1.000000E-95 -1e-200 -> 9.99999E-96 Rounded Inexact Subnormal Underflow +fmax31134 fma 1 0.999999E-95 -1e-200 -> 9.99998E-96 Rounded Inexact Subnormal Underflow +fmax31135 fma 1 0.001000E-95 -1e-200 -> 9.99E-99 Rounded Inexact Subnormal Underflow +fmax31136 fma 1 0.000999E-95 -1e-200 -> 9.98E-99 Rounded Inexact Subnormal Underflow +fmax31137 fma 1 1.000000E-95 -1e-101 -> 9.99999E-96 Subnormal +fmax31138 fma 1 10000E-101 -1e-200 -> 9.999E-98 Subnormal Inexact Rounded Underflow +fmax31139 fma 1 1000E-101 -1e-200 -> 9.99E-99 Subnormal Inexact Rounded Underflow +fmax31140 fma 1 100E-101 -1e-200 -> 9.9E-100 Subnormal Inexact Rounded Underflow +fmax31141 fma 1 10E-101 -1e-200 -> 9E-101 Subnormal Inexact Rounded Underflow +fmax31142 fma 1 1E-101 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31143 fma 1 0E-101 -1e-200 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31144 fma 1 1E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped + +fmax31151 fma 1 10000E-102 -1e-200 -> 9.99E-99 Subnormal Inexact Rounded Underflow +fmax31152 fma 1 1000E-102 -1e-200 -> 9.9E-100 Subnormal Inexact Rounded Underflow +fmax31153 fma 1 100E-102 -1e-200 -> 9E-101 Subnormal Inexact Rounded Underflow +fmax31154 fma 1 10E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31155 fma 1 1E-102 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31156 fma 1 0E-102 -1e-200 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31157 fma 1 1E-103 -1e-200 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped + +fmax31160 fma 1 100E-105 -1e-101 -> -0E-101 Subnormal Inexact Rounded Underflow Clamped +fmax31161 fma 1 100E-105 -1e-201 -> 0E-101 Subnormal Inexact Rounded Underflow Clamped + +-- tests based on Gunnar Degnbol's edge case +precision: 15 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +fmax31200 fma 1 1E15 -0.5 -> 1.00000000000000E+15 Inexact Rounded +fmax31201 fma 1 1E15 -0.50 -> 1.00000000000000E+15 Inexact Rounded +fmax31210 fma 1 1E15 -0.51 -> 999999999999999 Inexact Rounded +fmax31211 fma 1 1E15 -0.501 -> 999999999999999 Inexact Rounded +fmax31212 fma 1 1E15 -0.5001 -> 999999999999999 Inexact Rounded +fmax31213 fma 1 1E15 -0.50001 -> 999999999999999 Inexact Rounded +fmax31214 fma 1 1E15 -0.500001 -> 999999999999999 Inexact Rounded +fmax31215 fma 1 1E15 -0.5000001 -> 999999999999999 Inexact Rounded +fmax31216 fma 1 1E15 -0.50000001 -> 999999999999999 Inexact Rounded +fmax31217 fma 1 1E15 -0.500000001 -> 999999999999999 Inexact Rounded +fmax31218 fma 1 1E15 -0.5000000001 -> 999999999999999 Inexact Rounded +fmax31219 fma 1 1E15 -0.50000000001 -> 999999999999999 Inexact Rounded +fmax31220 fma 1 1E15 -0.500000000001 -> 999999999999999 Inexact Rounded +fmax31221 fma 1 1E15 -0.5000000000001 -> 999999999999999 Inexact Rounded +fmax31222 fma 1 1E15 -0.50000000000001 -> 999999999999999 Inexact Rounded +fmax31223 fma 1 1E15 -0.500000000000001 -> 999999999999999 Inexact Rounded +fmax31224 fma 1 1E15 -0.5000000000000001 -> 999999999999999 Inexact Rounded +fmax31225 fma 1 1E15 -0.5000000000000000 -> 1.00000000000000E+15 Inexact Rounded +fmax31230 fma 1 1E15 -5000000.000000001 -> 999999995000000 Inexact Rounded + +precision: 16 + +fmax31300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded +fmax31310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded +fmax31311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded +fmax31312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded +fmax31313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded +fmax31314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded +fmax31315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded +fmax31316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded +fmax31317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded +fmax31318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded +fmax31319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded +fmax31320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded +fmax31321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded +fmax31322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded +fmax31323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded +fmax31324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded +fmax31325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded +fmax31336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded +fmax31337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded +fmax31338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded +fmax31339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded + +fmax31340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded +fmax31341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded + +fmax31349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded +fmax31350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded +fmax31351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded +fmax31352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded +fmax31353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded +fmax31354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded +fmax31355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded +fmax31356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded +fmax31357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded +fmax31358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded +fmax31359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded +fmax31360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded +fmax31361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded +fmax31362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded +fmax31363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded +fmax31364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded +fmax31365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded +fmax31376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded +fmax31377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded +fmax31378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded +fmax31379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded +fmax31380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded +fmax31381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded +fmax31382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded +fmax31392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded +fmax31393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded +fmax31394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded +fmax31395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded +fmax31396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +precision: 15 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +fmax31400 fma 1 0 1.23456789012345 -> 1.23456789012345 +fmax31401 fma 1 0 1.23456789012345E-1 -> 0.123456789012345 +fmax31402 fma 1 0 1.23456789012345E-2 -> 0.0123456789012345 +fmax31403 fma 1 0 1.23456789012345E-3 -> 0.00123456789012345 +fmax31404 fma 1 0 1.23456789012345E-4 -> 0.000123456789012345 +fmax31405 fma 1 0 1.23456789012345E-5 -> 0.0000123456789012345 +fmax31406 fma 1 0 1.23456789012345E-6 -> 0.00000123456789012345 +fmax31407 fma 1 0 1.23456789012345E-7 -> 1.23456789012345E-7 +fmax31408 fma 1 0 1.23456789012345E-8 -> 1.23456789012345E-8 +fmax31409 fma 1 0 1.23456789012345E-9 -> 1.23456789012345E-9 +fmax31410 fma 1 0 1.23456789012345E-10 -> 1.23456789012345E-10 +fmax31411 fma 1 0 1.23456789012345E-11 -> 1.23456789012345E-11 +fmax31412 fma 1 0 1.23456789012345E-12 -> 1.23456789012345E-12 +fmax31413 fma 1 0 1.23456789012345E-13 -> 1.23456789012345E-13 +fmax31414 fma 1 0 1.23456789012345E-14 -> 1.23456789012345E-14 +fmax31415 fma 1 0 1.23456789012345E-15 -> 1.23456789012345E-15 +fmax31416 fma 1 0 1.23456789012345E-16 -> 1.23456789012345E-16 +fmax31417 fma 1 0 1.23456789012345E-17 -> 1.23456789012345E-17 +fmax31418 fma 1 0 1.23456789012345E-18 -> 1.23456789012345E-18 +fmax31419 fma 1 0 1.23456789012345E-19 -> 1.23456789012345E-19 + +-- same, precision 16.. +precision: 16 +fmax31420 fma 1 0 1.123456789012345 -> 1.123456789012345 +fmax31421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 +fmax31422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 +fmax31423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 +fmax31424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 +fmax31425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 +fmax31426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 +fmax31427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 +fmax31428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 +fmax31429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 +fmax31430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 +fmax31431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 +fmax31432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 +fmax31433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 +fmax31434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 +fmax31435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 +fmax31436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 +fmax31437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 +fmax31438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 +fmax31439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 + +-- same, reversed 0 +fmax31440 fma 1 1.123456789012345 0 -> 1.123456789012345 +fmax31441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 +fmax31442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 +fmax31443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 +fmax31444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 +fmax31445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 +fmax31446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 +fmax31447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 +fmax31448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 +fmax31449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 +fmax31450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 +fmax31451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 +fmax31452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 +fmax31453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 +fmax31454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 +fmax31455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 +fmax31456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 +fmax31457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 +fmax31458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 +fmax31459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 + +-- same, Es on the 0 +fmax31460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 +fmax31461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 +fmax31462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 +fmax31463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 +fmax31464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 +fmax31465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 +fmax31466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 +fmax31467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 +fmax31468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 +fmax31469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 +fmax31470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 +fmax31471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 +fmax31472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 +fmax31473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 +fmax31474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 +fmax31475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 +-- next four flag Rounded because the 0 extends the result +fmax31476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded +fmax31477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded +fmax31478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded +fmax31479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +precision: 16 +maxExponent: 384 +minexponent: -383 + +rounding: half_up +-- exact zeros from zeros +fmax31500 fma 1 0 0E-19 -> 0E-19 +fmax31501 fma 1 -0 0E-19 -> 0E-19 +fmax31502 fma 1 0 -0E-19 -> 0E-19 +fmax31503 fma 1 -0 -0E-19 -> -0E-19 +fmax31504 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31505 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31506 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31507 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31511 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31512 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31513 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31514 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31515 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31516 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31517 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31518 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: half_down +-- exact zeros from zeros +fmax31520 fma 1 0 0E-19 -> 0E-19 +fmax31521 fma 1 -0 0E-19 -> 0E-19 +fmax31522 fma 1 0 -0E-19 -> 0E-19 +fmax31523 fma 1 -0 -0E-19 -> -0E-19 +fmax31524 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31525 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31526 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31527 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31531 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31532 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31533 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31534 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31535 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31536 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31537 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31538 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: half_even +-- exact zeros from zeros +fmax31540 fma 1 0 0E-19 -> 0E-19 +fmax31541 fma 1 -0 0E-19 -> 0E-19 +fmax31542 fma 1 0 -0E-19 -> 0E-19 +fmax31543 fma 1 -0 -0E-19 -> -0E-19 +fmax31544 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31545 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31546 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31547 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31551 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31552 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31553 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31554 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31555 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31556 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31557 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31558 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: up +-- exact zeros from zeros +fmax31560 fma 1 0 0E-19 -> 0E-19 +fmax31561 fma 1 -0 0E-19 -> 0E-19 +fmax31562 fma 1 0 -0E-19 -> 0E-19 +fmax31563 fma 1 -0 -0E-19 -> -0E-19 +fmax31564 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31565 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31566 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31567 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31571 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31572 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31573 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +fmax31574 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +-- some exact zeros from non-zeros +fmax31575 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31576 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31577 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31578 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow + +rounding: down +-- exact zeros from zeros +fmax31580 fma 1 0 0E-19 -> 0E-19 +fmax31581 fma 1 -0 0E-19 -> 0E-19 +fmax31582 fma 1 0 -0E-19 -> 0E-19 +fmax31583 fma 1 -0 -0E-19 -> -0E-19 +fmax31584 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31585 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31586 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31587 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31591 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31592 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31593 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31594 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31595 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31596 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31597 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31598 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: ceiling +-- exact zeros from zeros +fmax31600 fma 1 0 0E-19 -> 0E-19 +fmax31601 fma 1 -0 0E-19 -> 0E-19 +fmax31602 fma 1 0 -0E-19 -> 0E-19 +fmax31603 fma 1 -0 -0E-19 -> -0E-19 +fmax31604 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31605 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax31606 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax31607 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31611 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31612 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31613 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31614 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax31615 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax31616 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax31617 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax31618 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +fmax31620 fma 1 0 0E-19 -> 0E-19 +fmax31621 fma 1 -0 0E-19 -> -0E-19 -- * +fmax31622 fma 1 0 -0E-19 -> -0E-19 -- * +fmax31623 fma 1 -0 -0E-19 -> -0E-19 +fmax31624 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax31625 fma 1 -0E-400 0E-19 -> -0E-398 Clamped -- * +fmax31626 fma 1 0E-400 -0E-19 -> -0E-398 Clamped -- * +fmax31627 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax31631 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31632 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31633 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +fmax31634 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +-- some exact zeros from non-zeros +fmax31635 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax31636 fma 1 -1E-401 1E-401 -> -0E-398 Clamped -- * +fmax31637 fma 1 1E-401 -1E-401 -> -0E-398 Clamped -- * +fmax31638 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow + +-- BigDecimal problem testcases 2006.01.23 +precision: 16 +maxExponent: 384 +minexponent: -383 + +rounding: down +precision: 7 +fmax31651 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 6 +fmax31652 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 5 +fmax31653 fma 1 10001E+2 -2E+1 -> 1.0000E+6 Inexact Rounded +precision: 4 +fmax31654 fma 1 10001E+2 -2E+1 -> 1.000E+6 Inexact Rounded +precision: 3 +fmax31655 fma 1 10001E+2 -2E+1 -> 1.00E+6 Inexact Rounded +precision: 2 +fmax31656 fma 1 10001E+2 -2E+1 -> 1.0E+6 Inexact Rounded +precision: 1 +fmax31657 fma 1 10001E+2 -2E+1 -> 1E+6 Inexact Rounded + +rounding: half_even +precision: 7 +fmax31661 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 6 +fmax31662 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 5 +fmax31663 fma 1 10001E+2 -2E+1 -> 1.0001E+6 Inexact Rounded +precision: 4 +fmax31664 fma 1 10001E+2 -2E+1 -> 1.000E+6 Inexact Rounded +precision: 3 +fmax31665 fma 1 10001E+2 -2E+1 -> 1.00E+6 Inexact Rounded +precision: 2 +fmax31666 fma 1 10001E+2 -2E+1 -> 1.0E+6 Inexact Rounded +precision: 1 +fmax31667 fma 1 10001E+2 -2E+1 -> 1E+6 Inexact Rounded + +rounding: up +precision: 7 +fmax31671 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 6 +fmax31672 fma 1 10001E+2 -2E+1 -> 1.00008E+6 +precision: 5 +fmax31673 fma 1 10001E+2 -2E+1 -> 1.0001E+6 Inexact Rounded +precision: 4 +fmax31674 fma 1 10001E+2 -2E+1 -> 1.001E+6 Inexact Rounded +precision: 3 +fmax31675 fma 1 10001E+2 -2E+1 -> 1.01E+6 Inexact Rounded +precision: 2 +fmax31676 fma 1 10001E+2 -2E+1 -> 1.1E+6 Inexact Rounded +precision: 1 +fmax31677 fma 1 10001E+2 -2E+1 -> 2E+6 Inexact Rounded + +precision: 34 +rounding: half_up +maxExponent: 6144 +minExponent: -6143 +-- Examples from SQL proposal (Krishna Kulkarni) +fmax31701 fma 1 130E-2 120E-2 -> 2.50 +fmax31702 fma 1 130E-2 12E-1 -> 2.50 +fmax31703 fma 1 130E-2 1E0 -> 2.30 +fmax31704 fma 1 1E2 1E4 -> 1.01E+4 +fmax31705 subtract 130E-2 120E-2 -> 0.10 +fmax31706 subtract 130E-2 12E-1 -> 0.10 +fmax31707 subtract 130E-2 1E0 -> 0.30 +fmax31708 subtract 1E2 1E4 -> -9.9E+3 + +------------------------------------------------------------------------ +-- Same as above, using decimal64 default parameters -- +------------------------------------------------------------------------ +precision: 16 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- [first group are 'quick confidence check'] +fmax36001 fma 1 1 1 -> 2 +fmax36002 fma 1 2 3 -> 5 +fmax36003 fma 1 '5.75' '3.3' -> 9.05 +fmax36004 fma 1 '5' '-3' -> 2 +fmax36005 fma 1 '-5' '-3' -> -8 +fmax36006 fma 1 '-7' '2.5' -> -4.5 +fmax36007 fma 1 '0.7' '0.3' -> 1.0 +fmax36008 fma 1 '1.25' '1.25' -> 2.50 +fmax36009 fma 1 '1.23456789' '1.00000000' -> '2.23456789' +fmax36010 fma 1 '1.23456789' '1.00000011' -> '2.23456800' + +fmax36011 fma 1 '0.44444444444444444' '0.55555555555555555' -> '1.000000000000000' Inexact Rounded +fmax36012 fma 1 '0.44444444444444440' '0.55555555555555555' -> '1.000000000000000' Inexact Rounded +fmax36013 fma 1 '0.44444444444444444' '0.55555555555555550' -> '0.9999999999999999' Inexact Rounded +fmax36014 fma 1 '0.444444444444444449' '0' -> '0.4444444444444444' Inexact Rounded +fmax36015 fma 1 '0.4444444444444444499' '0' -> '0.4444444444444444' Inexact Rounded +fmax36016 fma 1 '0.44444444444444444999' '0' -> '0.4444444444444444' Inexact Rounded +fmax36017 fma 1 '0.44444444444444445000' '0' -> '0.4444444444444444' Inexact Rounded +fmax36018 fma 1 '0.44444444444444445001' '0' -> '0.4444444444444445' Inexact Rounded +fmax36019 fma 1 '0.4444444444444444501' '0' -> '0.4444444444444445' Inexact Rounded +fmax36020 fma 1 '0.444444444444444451' '0' -> '0.4444444444444445' Inexact Rounded + +fmax36021 fma 1 0 1 -> 1 +fmax36022 fma 1 1 1 -> 2 +fmax36023 fma 1 2 1 -> 3 +fmax36024 fma 1 3 1 -> 4 +fmax36025 fma 1 4 1 -> 5 +fmax36026 fma 1 5 1 -> 6 +fmax36027 fma 1 6 1 -> 7 +fmax36028 fma 1 7 1 -> 8 +fmax36029 fma 1 8 1 -> 9 +fmax36030 fma 1 9 1 -> 10 + +-- some carrying effects +fmax36031 fma 1 '0.9998' '0.0000' -> '0.9998' +fmax36032 fma 1 '0.9998' '0.0001' -> '0.9999' +fmax36033 fma 1 '0.9998' '0.0002' -> '1.0000' +fmax36034 fma 1 '0.9998' '0.0003' -> '1.0001' + +fmax36035 fma 1 '70' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +fmax36036 fma 1 '700' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +fmax36037 fma 1 '7000' '10000e+16' -> '1.000000000000000E+20' Inexact Rounded +fmax36038 fma 1 '70000' '10000e+16' -> '1.000000000000001E+20' Inexact Rounded +fmax36039 fma 1 '700000' '10000e+16' -> '1.000000000000007E+20' Rounded + +-- symmetry: +fmax36040 fma 1 '10000e+16' '70' -> '1.000000000000000E+20' Inexact Rounded +fmax36041 fma 1 '10000e+16' '700' -> '1.000000000000000E+20' Inexact Rounded +fmax36042 fma 1 '10000e+16' '7000' -> '1.000000000000000E+20' Inexact Rounded +fmax36044 fma 1 '10000e+16' '70000' -> '1.000000000000001E+20' Inexact Rounded +fmax36045 fma 1 '10000e+16' '700000' -> '1.000000000000007E+20' Rounded + +fmax36046 fma 1 '10000e+9' '7' -> '10000000000007' +fmax36047 fma 1 '10000e+9' '70' -> '10000000000070' +fmax36048 fma 1 '10000e+9' '700' -> '10000000000700' +fmax36049 fma 1 '10000e+9' '7000' -> '10000000007000' +fmax36050 fma 1 '10000e+9' '70000' -> '10000000070000' +fmax36051 fma 1 '10000e+9' '700000' -> '10000000700000' + +-- examples from decarith +fmax36053 fma 1 '12' '7.00' -> '19.00' +fmax36054 fma 1 '1.3' '-1.07' -> '0.23' +fmax36055 fma 1 '1.3' '-1.30' -> '0.00' +fmax36056 fma 1 '1.3' '-2.07' -> '-0.77' +fmax36057 fma 1 '1E+2' '1E+4' -> '1.01E+4' + +-- from above +fmax36061 fma 1 1 '0.1' -> '1.1' +fmax36062 fma 1 1 '0.01' -> '1.01' +fmax36063 fma 1 1 '0.001' -> '1.001' +fmax36064 fma 1 1 '0.0001' -> '1.0001' +fmax36065 fma 1 1 '0.00001' -> '1.00001' +fmax36066 fma 1 1 '0.000001' -> '1.000001' +fmax36067 fma 1 1 '0.0000001' -> '1.0000001' +fmax36068 fma 1 1 '0.00000001' -> '1.00000001' + +-- some funny zeros [in case of bad signum] +fmax36070 fma 1 1 0 -> 1 +fmax36071 fma 1 1 0. -> 1 +fmax36072 fma 1 1 .0 -> 1.0 +fmax36073 fma 1 1 0.0 -> 1.0 +fmax36074 fma 1 1 0.00 -> 1.00 +fmax36075 fma 1 0 1 -> 1 +fmax36076 fma 1 0. 1 -> 1 +fmax36077 fma 1 .0 1 -> 1.0 +fmax36078 fma 1 0.0 1 -> 1.0 +fmax36079 fma 1 0.00 1 -> 1.00 + +-- some carries +fmax36080 fma 1 9999999999999998 1 -> 9999999999999999 +fmax36081 fma 1 9999999999999999 1 -> 1.000000000000000E+16 Rounded +fmax36082 fma 1 999999999999999 1 -> 1000000000000000 +fmax36083 fma 1 9999999999999 1 -> 10000000000000 +fmax36084 fma 1 99999999999 1 -> 100000000000 +fmax36085 fma 1 999999999 1 -> 1000000000 +fmax36086 fma 1 9999999 1 -> 10000000 +fmax36087 fma 1 99999 1 -> 100000 +fmax36088 fma 1 999 1 -> 1000 +fmax36089 fma 1 9 1 -> 10 + + +-- more LHS swaps +fmax36090 fma 1 '-56267E-10' 0 -> '-0.0000056267' +fmax36091 fma 1 '-56267E-6' 0 -> '-0.056267' +fmax36092 fma 1 '-56267E-5' 0 -> '-0.56267' +fmax36093 fma 1 '-56267E-4' 0 -> '-5.6267' +fmax36094 fma 1 '-56267E-3' 0 -> '-56.267' +fmax36095 fma 1 '-56267E-2' 0 -> '-562.67' +fmax36096 fma 1 '-56267E-1' 0 -> '-5626.7' +fmax36097 fma 1 '-56267E-0' 0 -> '-56267' +fmax36098 fma 1 '-5E-10' 0 -> '-5E-10' +fmax36099 fma 1 '-5E-7' 0 -> '-5E-7' +fmax36100 fma 1 '-5E-6' 0 -> '-0.000005' +fmax36101 fma 1 '-5E-5' 0 -> '-0.00005' +fmax36102 fma 1 '-5E-4' 0 -> '-0.0005' +fmax36103 fma 1 '-5E-1' 0 -> '-0.5' +fmax36104 fma 1 '-5E0' 0 -> '-5' +fmax36105 fma 1 '-5E1' 0 -> '-50' +fmax36106 fma 1 '-5E5' 0 -> '-500000' +fmax36107 fma 1 '-5E15' 0 -> '-5000000000000000' +fmax36108 fma 1 '-5E16' 0 -> '-5.000000000000000E+16' Rounded +fmax36109 fma 1 '-5E17' 0 -> '-5.000000000000000E+17' Rounded +fmax36110 fma 1 '-5E18' 0 -> '-5.000000000000000E+18' Rounded +fmax36111 fma 1 '-5E100' 0 -> '-5.000000000000000E+100' Rounded + +-- more RHS swaps +fmax36113 fma 1 0 '-56267E-10' -> '-0.0000056267' +fmax36114 fma 1 0 '-56267E-6' -> '-0.056267' +fmax36116 fma 1 0 '-56267E-5' -> '-0.56267' +fmax36117 fma 1 0 '-56267E-4' -> '-5.6267' +fmax36119 fma 1 0 '-56267E-3' -> '-56.267' +fmax36120 fma 1 0 '-56267E-2' -> '-562.67' +fmax36121 fma 1 0 '-56267E-1' -> '-5626.7' +fmax36122 fma 1 0 '-56267E-0' -> '-56267' +fmax36123 fma 1 0 '-5E-10' -> '-5E-10' +fmax36124 fma 1 0 '-5E-7' -> '-5E-7' +fmax36125 fma 1 0 '-5E-6' -> '-0.000005' +fmax36126 fma 1 0 '-5E-5' -> '-0.00005' +fmax36127 fma 1 0 '-5E-4' -> '-0.0005' +fmax36128 fma 1 0 '-5E-1' -> '-0.5' +fmax36129 fma 1 0 '-5E0' -> '-5' +fmax36130 fma 1 0 '-5E1' -> '-50' +fmax36131 fma 1 0 '-5E5' -> '-500000' +fmax36132 fma 1 0 '-5E15' -> '-5000000000000000' +fmax36133 fma 1 0 '-5E16' -> '-5.000000000000000E+16' Rounded +fmax36134 fma 1 0 '-5E17' -> '-5.000000000000000E+17' Rounded +fmax36135 fma 1 0 '-5E18' -> '-5.000000000000000E+18' Rounded +fmax36136 fma 1 0 '-5E100' -> '-5.000000000000000E+100' Rounded + +-- related +fmax36137 fma 1 1 '0E-19' -> '1.000000000000000' Rounded +fmax36138 fma 1 -1 '0E-19' -> '-1.000000000000000' Rounded +fmax36139 fma 1 '0E-19' 1 -> '1.000000000000000' Rounded +fmax36140 fma 1 '0E-19' -1 -> '-1.000000000000000' Rounded +fmax36141 fma 1 1E+11 0.0000 -> '100000000000.0000' +fmax36142 fma 1 1E+11 0.00000 -> '100000000000.0000' Rounded +fmax36143 fma 1 0.000 1E+12 -> '1000000000000.000' +fmax36144 fma 1 0.0000 1E+12 -> '1000000000000.000' Rounded + +-- [some of the next group are really constructor tests] +fmax36146 fma 1 '00.0' 0 -> '0.0' +fmax36147 fma 1 '0.00' 0 -> '0.00' +fmax36148 fma 1 0 '0.00' -> '0.00' +fmax36149 fma 1 0 '00.0' -> '0.0' +fmax36150 fma 1 '00.0' '0.00' -> '0.00' +fmax36151 fma 1 '0.00' '00.0' -> '0.00' +fmax36152 fma 1 '3' '.3' -> '3.3' +fmax36153 fma 1 '3.' '.3' -> '3.3' +fmax36154 fma 1 '3.0' '.3' -> '3.3' +fmax36155 fma 1 '3.00' '.3' -> '3.30' +fmax36156 fma 1 '3' '3' -> '6' +fmax36157 fma 1 '3' '+3' -> '6' +fmax36158 fma 1 '3' '-3' -> '0' +fmax36159 fma 1 '0.3' '-0.3' -> '0.0' +fmax36160 fma 1 '0.03' '-0.03' -> '0.00' + +-- try borderline precision, with carries, etc. +fmax36161 fma 1 '1E+13' '-1' -> '9999999999999' +fmax36162 fma 1 '1E+13' '1.11' -> '10000000000001.11' +fmax36163 fma 1 '1.11' '1E+13' -> '10000000000001.11' +fmax36164 fma 1 '-1' '1E+13' -> '9999999999999' +fmax36165 fma 1 '7E+13' '-1' -> '69999999999999' +fmax36166 fma 1 '7E+13' '1.11' -> '70000000000001.11' +fmax36167 fma 1 '1.11' '7E+13' -> '70000000000001.11' +fmax36168 fma 1 '-1' '7E+13' -> '69999999999999' + +-- 1234567890123456 1234567890123456 1 234567890123456 +fmax36170 fma 1 '0.4444444444444444' '0.5555555555555563' -> '1.000000000000001' Inexact Rounded +fmax36171 fma 1 '0.4444444444444444' '0.5555555555555562' -> '1.000000000000001' Inexact Rounded +fmax36172 fma 1 '0.4444444444444444' '0.5555555555555561' -> '1.000000000000000' Inexact Rounded +fmax36173 fma 1 '0.4444444444444444' '0.5555555555555560' -> '1.000000000000000' Inexact Rounded +fmax36174 fma 1 '0.4444444444444444' '0.5555555555555559' -> '1.000000000000000' Inexact Rounded +fmax36175 fma 1 '0.4444444444444444' '0.5555555555555558' -> '1.000000000000000' Inexact Rounded +fmax36176 fma 1 '0.4444444444444444' '0.5555555555555557' -> '1.000000000000000' Inexact Rounded +fmax36177 fma 1 '0.4444444444444444' '0.5555555555555556' -> '1.000000000000000' Rounded +fmax36178 fma 1 '0.4444444444444444' '0.5555555555555555' -> '0.9999999999999999' +fmax36179 fma 1 '0.4444444444444444' '0.5555555555555554' -> '0.9999999999999998' +fmax36180 fma 1 '0.4444444444444444' '0.5555555555555553' -> '0.9999999999999997' +fmax36181 fma 1 '0.4444444444444444' '0.5555555555555552' -> '0.9999999999999996' +fmax36182 fma 1 '0.4444444444444444' '0.5555555555555551' -> '0.9999999999999995' +fmax36183 fma 1 '0.4444444444444444' '0.5555555555555550' -> '0.9999999999999994' + +-- and some more, including residue effects and different roundings +rounding: half_up +fmax36200 fma 1 '6543210123456789' 0 -> '6543210123456789' +fmax36201 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +fmax36202 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +fmax36203 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +fmax36204 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +fmax36205 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +fmax36206 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36207 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36208 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +fmax36209 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +fmax36210 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +fmax36211 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +fmax36212 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +fmax36213 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +fmax36214 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +fmax36215 fma 1 '6543210123456789' 0.999999 -> '6543210123456790' Inexact Rounded +fmax36216 fma 1 '6543210123456789' 1 -> '6543210123456790' +fmax36217 fma 1 '6543210123456789' 1.000000001 -> '6543210123456790' Inexact Rounded +fmax36218 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +fmax36219 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +rounding: half_even +fmax36220 fma 1 '6543210123456789' 0 -> '6543210123456789' +fmax36221 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +fmax36222 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +fmax36223 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +fmax36224 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +fmax36225 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +fmax36226 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36227 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36228 fma 1 '6543210123456789' 0.5 -> '6543210123456790' Inexact Rounded +fmax36229 fma 1 '6543210123456789' 0.500000001 -> '6543210123456790' Inexact Rounded +fmax36230 fma 1 '6543210123456789' 0.500001 -> '6543210123456790' Inexact Rounded +fmax36231 fma 1 '6543210123456789' 0.51 -> '6543210123456790' Inexact Rounded +fmax36232 fma 1 '6543210123456789' 0.6 -> '6543210123456790' Inexact Rounded +fmax36233 fma 1 '6543210123456789' 0.9 -> '6543210123456790' Inexact Rounded +fmax36234 fma 1 '6543210123456789' 0.99999 -> '6543210123456790' Inexact Rounded +fmax36235 fma 1 '6543210123456789' 0.999999 -> '6543210123456790' Inexact Rounded +fmax36236 fma 1 '6543210123456789' 1 -> '6543210123456790' +fmax36237 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +fmax36238 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +fmax36239 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded +-- critical few with even bottom digit... +fmax36240 fma 1 '6543210123456788' 0.499999 -> '6543210123456788' Inexact Rounded +fmax36241 fma 1 '6543210123456788' 0.5 -> '6543210123456788' Inexact Rounded +fmax36242 fma 1 '6543210123456788' 0.500000001 -> '6543210123456789' Inexact Rounded + +rounding: down +fmax36250 fma 1 '6543210123456789' 0 -> '6543210123456789' +fmax36251 fma 1 '6543210123456789' 0.000000001 -> '6543210123456789' Inexact Rounded +fmax36252 fma 1 '6543210123456789' 0.000001 -> '6543210123456789' Inexact Rounded +fmax36253 fma 1 '6543210123456789' 0.1 -> '6543210123456789' Inexact Rounded +fmax36254 fma 1 '6543210123456789' 0.4 -> '6543210123456789' Inexact Rounded +fmax36255 fma 1 '6543210123456789' 0.49 -> '6543210123456789' Inexact Rounded +fmax36256 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36257 fma 1 '6543210123456789' 0.499999 -> '6543210123456789' Inexact Rounded +fmax36258 fma 1 '6543210123456789' 0.5 -> '6543210123456789' Inexact Rounded +fmax36259 fma 1 '6543210123456789' 0.500000001 -> '6543210123456789' Inexact Rounded +fmax36260 fma 1 '6543210123456789' 0.500001 -> '6543210123456789' Inexact Rounded +fmax36261 fma 1 '6543210123456789' 0.51 -> '6543210123456789' Inexact Rounded +fmax36262 fma 1 '6543210123456789' 0.6 -> '6543210123456789' Inexact Rounded +fmax36263 fma 1 '6543210123456789' 0.9 -> '6543210123456789' Inexact Rounded +fmax36264 fma 1 '6543210123456789' 0.99999 -> '6543210123456789' Inexact Rounded +fmax36265 fma 1 '6543210123456789' 0.999999 -> '6543210123456789' Inexact Rounded +fmax36266 fma 1 '6543210123456789' 1 -> '6543210123456790' +fmax36267 fma 1 '6543210123456789' 1.00000001 -> '6543210123456790' Inexact Rounded +fmax36268 fma 1 '6543210123456789' 1.00001 -> '6543210123456790' Inexact Rounded +fmax36269 fma 1 '6543210123456789' 1.1 -> '6543210123456790' Inexact Rounded + +-- 1 in last place tests +rounding: half_even +fmax36301 fma 1 -1 1 -> 0 +fmax36302 fma 1 0 1 -> 1 +fmax36303 fma 1 1 1 -> 2 +fmax36304 fma 1 12 1 -> 13 +fmax36305 fma 1 98 1 -> 99 +fmax36306 fma 1 99 1 -> 100 +fmax36307 fma 1 100 1 -> 101 +fmax36308 fma 1 101 1 -> 102 +fmax36309 fma 1 -1 -1 -> -2 +fmax36310 fma 1 0 -1 -> -1 +fmax36311 fma 1 1 -1 -> 0 +fmax36312 fma 1 12 -1 -> 11 +fmax36313 fma 1 98 -1 -> 97 +fmax36314 fma 1 99 -1 -> 98 +fmax36315 fma 1 100 -1 -> 99 +fmax36316 fma 1 101 -1 -> 100 + +fmax36321 fma 1 -0.01 0.01 -> 0.00 +fmax36322 fma 1 0.00 0.01 -> 0.01 +fmax36323 fma 1 0.01 0.01 -> 0.02 +fmax36324 fma 1 0.12 0.01 -> 0.13 +fmax36325 fma 1 0.98 0.01 -> 0.99 +fmax36326 fma 1 0.99 0.01 -> 1.00 +fmax36327 fma 1 1.00 0.01 -> 1.01 +fmax36328 fma 1 1.01 0.01 -> 1.02 +fmax36329 fma 1 -0.01 -0.01 -> -0.02 +fmax36330 fma 1 0.00 -0.01 -> -0.01 +fmax36331 fma 1 0.01 -0.01 -> 0.00 +fmax36332 fma 1 0.12 -0.01 -> 0.11 +fmax36333 fma 1 0.98 -0.01 -> 0.97 +fmax36334 fma 1 0.99 -0.01 -> 0.98 +fmax36335 fma 1 1.00 -0.01 -> 0.99 +fmax36336 fma 1 1.01 -0.01 -> 1.00 + +-- some more cases where fma 1 ing 0 affects the coefficient +fmax36340 fma 1 1E+3 0 -> 1000 +fmax36341 fma 1 1E+15 0 -> 1000000000000000 +fmax36342 fma 1 1E+16 0 -> 1.000000000000000E+16 Rounded +fmax36343 fma 1 1E+17 0 -> 1.000000000000000E+17 Rounded +-- which simply follow from these cases ... +fmax36344 fma 1 1E+3 1 -> 1001 +fmax36345 fma 1 1E+15 1 -> 1000000000000001 +fmax36346 fma 1 1E+16 1 -> 1.000000000000000E+16 Inexact Rounded +fmax36347 fma 1 1E+17 1 -> 1.000000000000000E+17 Inexact Rounded +fmax36348 fma 1 1E+3 7 -> 1007 +fmax36349 fma 1 1E+15 7 -> 1000000000000007 +fmax36350 fma 1 1E+16 7 -> 1.000000000000001E+16 Inexact Rounded +fmax36351 fma 1 1E+17 7 -> 1.000000000000000E+17 Inexact Rounded + +-- tryzeros cases +fmax36361 fma 1 0E+50 10000E+1 -> 1.0000E+5 +fmax36362 fma 1 10000E+1 0E-50 -> 100000.0000000000 Rounded +fmax36363 fma 1 10000E+1 10000E-50 -> 100000.0000000000 Rounded Inexact +fmax36364 fma 1 12.34 0e-398 -> 12.34000000000000 Rounded + +-- ulp replacement tests +fmax36400 fma 1 1 77e-14 -> 1.00000000000077 +fmax36401 fma 1 1 77e-15 -> 1.000000000000077 +fmax36402 fma 1 1 77e-16 -> 1.000000000000008 Inexact Rounded +fmax36403 fma 1 1 77e-17 -> 1.000000000000001 Inexact Rounded +fmax36404 fma 1 1 77e-18 -> 1.000000000000000 Inexact Rounded +fmax36405 fma 1 1 77e-19 -> 1.000000000000000 Inexact Rounded +fmax36406 fma 1 1 77e-99 -> 1.000000000000000 Inexact Rounded + +fmax36410 fma 1 10 77e-14 -> 10.00000000000077 +fmax36411 fma 1 10 77e-15 -> 10.00000000000008 Inexact Rounded +fmax36412 fma 1 10 77e-16 -> 10.00000000000001 Inexact Rounded +fmax36413 fma 1 10 77e-17 -> 10.00000000000000 Inexact Rounded +fmax36414 fma 1 10 77e-18 -> 10.00000000000000 Inexact Rounded +fmax36415 fma 1 10 77e-19 -> 10.00000000000000 Inexact Rounded +fmax36416 fma 1 10 77e-99 -> 10.00000000000000 Inexact Rounded + +fmax36420 fma 1 77e-14 1 -> 1.00000000000077 +fmax36421 fma 1 77e-15 1 -> 1.000000000000077 +fmax36422 fma 1 77e-16 1 -> 1.000000000000008 Inexact Rounded +fmax36423 fma 1 77e-17 1 -> 1.000000000000001 Inexact Rounded +fmax36424 fma 1 77e-18 1 -> 1.000000000000000 Inexact Rounded +fmax36425 fma 1 77e-19 1 -> 1.000000000000000 Inexact Rounded +fmax36426 fma 1 77e-99 1 -> 1.000000000000000 Inexact Rounded + +fmax36430 fma 1 77e-14 10 -> 10.00000000000077 +fmax36431 fma 1 77e-15 10 -> 10.00000000000008 Inexact Rounded +fmax36432 fma 1 77e-16 10 -> 10.00000000000001 Inexact Rounded +fmax36433 fma 1 77e-17 10 -> 10.00000000000000 Inexact Rounded +fmax36434 fma 1 77e-18 10 -> 10.00000000000000 Inexact Rounded +fmax36435 fma 1 77e-19 10 -> 10.00000000000000 Inexact Rounded +fmax36436 fma 1 77e-99 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +fmax36440 fma 1 1 -77e-14 -> 0.99999999999923 +fmax36441 fma 1 1 -77e-15 -> 0.999999999999923 +fmax36442 fma 1 1 -77e-16 -> 0.9999999999999923 +fmax36443 fma 1 1 -77e-17 -> 0.9999999999999992 Inexact Rounded +fmax36444 fma 1 1 -77e-18 -> 0.9999999999999999 Inexact Rounded +fmax36445 fma 1 1 -77e-19 -> 1.000000000000000 Inexact Rounded +fmax36446 fma 1 1 -77e-99 -> 1.000000000000000 Inexact Rounded + +fmax36450 fma 1 10 -77e-14 -> 9.99999999999923 +fmax36451 fma 1 10 -77e-15 -> 9.999999999999923 +fmax36452 fma 1 10 -77e-16 -> 9.999999999999992 Inexact Rounded +fmax36453 fma 1 10 -77e-17 -> 9.999999999999999 Inexact Rounded +fmax36454 fma 1 10 -77e-18 -> 10.00000000000000 Inexact Rounded +fmax36455 fma 1 10 -77e-19 -> 10.00000000000000 Inexact Rounded +fmax36456 fma 1 10 -77e-99 -> 10.00000000000000 Inexact Rounded + +fmax36460 fma 1 -77e-14 1 -> 0.99999999999923 +fmax36461 fma 1 -77e-15 1 -> 0.999999999999923 +fmax36462 fma 1 -77e-16 1 -> 0.9999999999999923 +fmax36463 fma 1 -77e-17 1 -> 0.9999999999999992 Inexact Rounded +fmax36464 fma 1 -77e-18 1 -> 0.9999999999999999 Inexact Rounded +fmax36465 fma 1 -77e-19 1 -> 1.000000000000000 Inexact Rounded +fmax36466 fma 1 -77e-99 1 -> 1.000000000000000 Inexact Rounded + +fmax36470 fma 1 -77e-14 10 -> 9.99999999999923 +fmax36471 fma 1 -77e-15 10 -> 9.999999999999923 +fmax36472 fma 1 -77e-16 10 -> 9.999999999999992 Inexact Rounded +fmax36473 fma 1 -77e-17 10 -> 9.999999999999999 Inexact Rounded +fmax36474 fma 1 -77e-18 10 -> 10.00000000000000 Inexact Rounded +fmax36475 fma 1 -77e-19 10 -> 10.00000000000000 Inexact Rounded +fmax36476 fma 1 -77e-99 10 -> 10.00000000000000 Inexact Rounded + +-- negative ulps +fmax36480 fma 1 -1 77e-14 -> -0.99999999999923 +fmax36481 fma 1 -1 77e-15 -> -0.999999999999923 +fmax36482 fma 1 -1 77e-16 -> -0.9999999999999923 +fmax36483 fma 1 -1 77e-17 -> -0.9999999999999992 Inexact Rounded +fmax36484 fma 1 -1 77e-18 -> -0.9999999999999999 Inexact Rounded +fmax36485 fma 1 -1 77e-19 -> -1.000000000000000 Inexact Rounded +fmax36486 fma 1 -1 77e-99 -> -1.000000000000000 Inexact Rounded + +fmax36490 fma 1 -10 77e-14 -> -9.99999999999923 +fmax36491 fma 1 -10 77e-15 -> -9.999999999999923 +fmax36492 fma 1 -10 77e-16 -> -9.999999999999992 Inexact Rounded +fmax36493 fma 1 -10 77e-17 -> -9.999999999999999 Inexact Rounded +fmax36494 fma 1 -10 77e-18 -> -10.00000000000000 Inexact Rounded +fmax36495 fma 1 -10 77e-19 -> -10.00000000000000 Inexact Rounded +fmax36496 fma 1 -10 77e-99 -> -10.00000000000000 Inexact Rounded + +fmax36500 fma 1 77e-14 -1 -> -0.99999999999923 +fmax36501 fma 1 77e-15 -1 -> -0.999999999999923 +fmax36502 fma 1 77e-16 -1 -> -0.9999999999999923 +fmax36503 fma 1 77e-17 -1 -> -0.9999999999999992 Inexact Rounded +fmax36504 fma 1 77e-18 -1 -> -0.9999999999999999 Inexact Rounded +fmax36505 fma 1 77e-19 -1 -> -1.000000000000000 Inexact Rounded +fmax36506 fma 1 77e-99 -1 -> -1.000000000000000 Inexact Rounded + +fmax36510 fma 1 77e-14 -10 -> -9.99999999999923 +fmax36511 fma 1 77e-15 -10 -> -9.999999999999923 +fmax36512 fma 1 77e-16 -10 -> -9.999999999999992 Inexact Rounded +fmax36513 fma 1 77e-17 -10 -> -9.999999999999999 Inexact Rounded +fmax36514 fma 1 77e-18 -10 -> -10.00000000000000 Inexact Rounded +fmax36515 fma 1 77e-19 -10 -> -10.00000000000000 Inexact Rounded +fmax36516 fma 1 77e-99 -10 -> -10.00000000000000 Inexact Rounded + + +-- long operands +fmax36521 fma 1 101234562345678000 0 -> 1.012345623456780E+17 Rounded +fmax36522 fma 1 0 101234562345678000 -> 1.012345623456780E+17 Rounded +fmax36523 fma 1 10123456234567800 0 -> 1.012345623456780E+16 Rounded +fmax36524 fma 1 0 10123456234567800 -> 1.012345623456780E+16 Rounded +fmax36525 fma 1 10123456234567890 0 -> 1.012345623456789E+16 Rounded +fmax36526 fma 1 0 10123456234567890 -> 1.012345623456789E+16 Rounded +fmax36527 fma 1 10123456234567891 0 -> 1.012345623456789E+16 Inexact Rounded +fmax36528 fma 1 0 10123456234567891 -> 1.012345623456789E+16 Inexact Rounded +fmax36529 fma 1 101234562345678901 0 -> 1.012345623456789E+17 Inexact Rounded +fmax36530 fma 1 0 101234562345678901 -> 1.012345623456789E+17 Inexact Rounded +fmax36531 fma 1 10123456234567896 0 -> 1.012345623456790E+16 Inexact Rounded +fmax36532 fma 1 0 10123456234567896 -> 1.012345623456790E+16 Inexact Rounded + +-- verify a query +rounding: down +fmax36561 fma 1 1e-398 9.000000000000000E+384 -> 9.000000000000000E+384 Inexact Rounded +fmax36562 fma 1 0 9.000000000000000E+384 -> 9.000000000000000E+384 Rounded +-- and using decimal64 bounds... +rounding: down +fmax36563 fma 1 1e-388 9.000000000000000E+374 -> 9.000000000000000E+374 Inexact Rounded +fmax36564 fma 1 0 9.000000000000000E+374 -> 9.000000000000000E+374 Rounded + +-- more zeros, etc. +rounding: half_even + +fmax36701 fma 1 5.00 1.00E-3 -> 5.00100 +fmax36702 fma 1 00.00 0.000 -> 0.000 +fmax36703 fma 1 00.00 0E-3 -> 0.000 +fmax36704 fma 1 0E-3 00.00 -> 0.000 + +fmax36710 fma 1 0E+3 00.00 -> 0.00 +fmax36711 fma 1 0E+3 00.0 -> 0.0 +fmax36712 fma 1 0E+3 00. -> 0 +fmax36713 fma 1 0E+3 00.E+1 -> 0E+1 +fmax36714 fma 1 0E+3 00.E+2 -> 0E+2 +fmax36715 fma 1 0E+3 00.E+3 -> 0E+3 +fmax36716 fma 1 0E+3 00.E+4 -> 0E+3 +fmax36717 fma 1 0E+3 00.E+5 -> 0E+3 +fmax36718 fma 1 0E+3 -00.0 -> 0.0 +fmax36719 fma 1 0E+3 -00. -> 0 +fmax36731 fma 1 0E+3 -00.E+1 -> 0E+1 + +fmax36720 fma 1 00.00 0E+3 -> 0.00 +fmax36721 fma 1 00.0 0E+3 -> 0.0 +fmax36722 fma 1 00. 0E+3 -> 0 +fmax36723 fma 1 00.E+1 0E+3 -> 0E+1 +fmax36724 fma 1 00.E+2 0E+3 -> 0E+2 +fmax36725 fma 1 00.E+3 0E+3 -> 0E+3 +fmax36726 fma 1 00.E+4 0E+3 -> 0E+3 +fmax36727 fma 1 00.E+5 0E+3 -> 0E+3 +fmax36728 fma 1 -00.00 0E+3 -> 0.00 +fmax36729 fma 1 -00.0 0E+3 -> 0.0 +fmax36730 fma 1 -00. 0E+3 -> 0 + +fmax36732 fma 1 0 0 -> 0 +fmax36733 fma 1 0 -0 -> 0 +fmax36734 fma 1 -0 0 -> 0 +fmax36735 fma 1 -0 -0 -> -0 -- IEEE 854 special case + +fmax36736 fma 1 1 -1 -> 0 +fmax36737 fma 1 -1 -1 -> -2 +fmax36738 fma 1 1 1 -> 2 +fmax36739 fma 1 -1 1 -> 0 + +fmax36741 fma 1 0 -1 -> -1 +fmax36742 fma 1 -0 -1 -> -1 +fmax36743 fma 1 0 1 -> 1 +fmax36744 fma 1 -0 1 -> 1 +fmax36745 fma 1 -1 0 -> -1 +fmax36746 fma 1 -1 -0 -> -1 +fmax36747 fma 1 1 0 -> 1 +fmax36748 fma 1 1 -0 -> 1 + +fmax36751 fma 1 0.0 -1 -> -1.0 +fmax36752 fma 1 -0.0 -1 -> -1.0 +fmax36753 fma 1 0.0 1 -> 1.0 +fmax36754 fma 1 -0.0 1 -> 1.0 +fmax36755 fma 1 -1.0 0 -> -1.0 +fmax36756 fma 1 -1.0 -0 -> -1.0 +fmax36757 fma 1 1.0 0 -> 1.0 +fmax36758 fma 1 1.0 -0 -> 1.0 + +fmax36761 fma 1 0 -1.0 -> -1.0 +fmax36762 fma 1 -0 -1.0 -> -1.0 +fmax36763 fma 1 0 1.0 -> 1.0 +fmax36764 fma 1 -0 1.0 -> 1.0 +fmax36765 fma 1 -1 0.0 -> -1.0 +fmax36766 fma 1 -1 -0.0 -> -1.0 +fmax36767 fma 1 1 0.0 -> 1.0 +fmax36768 fma 1 1 -0.0 -> 1.0 + +fmax36771 fma 1 0.0 -1.0 -> -1.0 +fmax36772 fma 1 -0.0 -1.0 -> -1.0 +fmax36773 fma 1 0.0 1.0 -> 1.0 +fmax36774 fma 1 -0.0 1.0 -> 1.0 +fmax36775 fma 1 -1.0 0.0 -> -1.0 +fmax36776 fma 1 -1.0 -0.0 -> -1.0 +fmax36777 fma 1 1.0 0.0 -> 1.0 +fmax36778 fma 1 1.0 -0.0 -> 1.0 + +-- Specials +fmax36780 fma 1 -Inf -Inf -> -Infinity +fmax36781 fma 1 -Inf -1000 -> -Infinity +fmax36782 fma 1 -Inf -1 -> -Infinity +fmax36783 fma 1 -Inf -0 -> -Infinity +fmax36784 fma 1 -Inf 0 -> -Infinity +fmax36785 fma 1 -Inf 1 -> -Infinity +fmax36786 fma 1 -Inf 1000 -> -Infinity +fmax36787 fma 1 -1000 -Inf -> -Infinity +fmax36788 fma 1 -Inf -Inf -> -Infinity +fmax36789 fma 1 -1 -Inf -> -Infinity +fmax36790 fma 1 -0 -Inf -> -Infinity +fmax36791 fma 1 0 -Inf -> -Infinity +fmax36792 fma 1 1 -Inf -> -Infinity +fmax36793 fma 1 1000 -Inf -> -Infinity +fmax36794 fma 1 Inf -Inf -> NaN Invalid_operation + +fmax36800 fma 1 Inf -Inf -> NaN Invalid_operation +fmax36801 fma 1 Inf -1000 -> Infinity +fmax36802 fma 1 Inf -1 -> Infinity +fmax36803 fma 1 Inf -0 -> Infinity +fmax36804 fma 1 Inf 0 -> Infinity +fmax36805 fma 1 Inf 1 -> Infinity +fmax36806 fma 1 Inf 1000 -> Infinity +fmax36807 fma 1 Inf Inf -> Infinity +fmax36808 fma 1 -1000 Inf -> Infinity +fmax36809 fma 1 -Inf Inf -> NaN Invalid_operation +fmax36810 fma 1 -1 Inf -> Infinity +fmax36811 fma 1 -0 Inf -> Infinity +fmax36812 fma 1 0 Inf -> Infinity +fmax36813 fma 1 1 Inf -> Infinity +fmax36814 fma 1 1000 Inf -> Infinity +fmax36815 fma 1 Inf Inf -> Infinity + +fmax36821 fma 1 NaN -Inf -> NaN +fmax36822 fma 1 NaN -1000 -> NaN +fmax36823 fma 1 NaN -1 -> NaN +fmax36824 fma 1 NaN -0 -> NaN +fmax36825 fma 1 NaN 0 -> NaN +fmax36826 fma 1 NaN 1 -> NaN +fmax36827 fma 1 NaN 1000 -> NaN +fmax36828 fma 1 NaN Inf -> NaN +fmax36829 fma 1 NaN NaN -> NaN +fmax36830 fma 1 -Inf NaN -> NaN +fmax36831 fma 1 -1000 NaN -> NaN +fmax36832 fma 1 -1 NaN -> NaN +fmax36833 fma 1 -0 NaN -> NaN +fmax36834 fma 1 0 NaN -> NaN +fmax36835 fma 1 1 NaN -> NaN +fmax36836 fma 1 1000 NaN -> NaN +fmax36837 fma 1 Inf NaN -> NaN + +fmax36841 fma 1 sNaN -Inf -> NaN Invalid_operation +fmax36842 fma 1 sNaN -1000 -> NaN Invalid_operation +fmax36843 fma 1 sNaN -1 -> NaN Invalid_operation +fmax36844 fma 1 sNaN -0 -> NaN Invalid_operation +fmax36845 fma 1 sNaN 0 -> NaN Invalid_operation +fmax36846 fma 1 sNaN 1 -> NaN Invalid_operation +fmax36847 fma 1 sNaN 1000 -> NaN Invalid_operation +fmax36848 fma 1 sNaN NaN -> NaN Invalid_operation +fmax36849 fma 1 sNaN sNaN -> NaN Invalid_operation +fmax36850 fma 1 NaN sNaN -> NaN Invalid_operation +fmax36851 fma 1 -Inf sNaN -> NaN Invalid_operation +fmax36852 fma 1 -1000 sNaN -> NaN Invalid_operation +fmax36853 fma 1 -1 sNaN -> NaN Invalid_operation +fmax36854 fma 1 -0 sNaN -> NaN Invalid_operation +fmax36855 fma 1 0 sNaN -> NaN Invalid_operation +fmax36856 fma 1 1 sNaN -> NaN Invalid_operation +fmax36857 fma 1 1000 sNaN -> NaN Invalid_operation +fmax36858 fma 1 Inf sNaN -> NaN Invalid_operation +fmax36859 fma 1 NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +fmax36861 fma 1 NaN1 -Inf -> NaN1 +fmax36862 fma 1 +NaN2 -1000 -> NaN2 +fmax36863 fma 1 NaN3 1000 -> NaN3 +fmax36864 fma 1 NaN4 Inf -> NaN4 +fmax36865 fma 1 NaN5 +NaN6 -> NaN5 +fmax36866 fma 1 -Inf NaN7 -> NaN7 +fmax36867 fma 1 -1000 NaN8 -> NaN8 +fmax36868 fma 1 1000 NaN9 -> NaN9 +fmax36869 fma 1 Inf +NaN10 -> NaN10 +fmax36871 fma 1 sNaN11 -Inf -> NaN11 Invalid_operation +fmax36872 fma 1 sNaN12 -1000 -> NaN12 Invalid_operation +fmax36873 fma 1 sNaN13 1000 -> NaN13 Invalid_operation +fmax36874 fma 1 sNaN14 NaN17 -> NaN14 Invalid_operation +fmax36875 fma 1 sNaN15 sNaN18 -> NaN15 Invalid_operation +fmax36876 fma 1 NaN16 sNaN19 -> NaN19 Invalid_operation +fmax36877 fma 1 -Inf +sNaN20 -> NaN20 Invalid_operation +fmax36878 fma 1 -1000 sNaN21 -> NaN21 Invalid_operation +fmax36879 fma 1 1000 sNaN22 -> NaN22 Invalid_operation +fmax36880 fma 1 Inf sNaN23 -> NaN23 Invalid_operation +fmax36881 fma 1 +NaN25 +sNaN24 -> NaN24 Invalid_operation +fmax36882 fma 1 -NaN26 NaN28 -> -NaN26 +fmax36883 fma 1 -sNaN27 sNaN29 -> -NaN27 Invalid_operation +fmax36884 fma 1 1000 -NaN30 -> -NaN30 +fmax36885 fma 1 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- now the case where we can get underflow but the result is normal +-- [note this can't happen if the operands are also bounded, as we +-- cannot represent 1E-399, for example] + +fmax36571 fma 1 1E-383 0 -> 1E-383 +fmax36572 fma 1 1E-384 0 -> 1E-384 Subnormal +fmax36573 fma 1 1E-383 1E-384 -> 1.1E-383 +fmax36574 subtract 1E-383 1E-384 -> 9E-384 Subnormal + +-- Here we explore the boundary of rounding a subnormal to Nmin +fmax36575 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal +fmax36576 subtract 1E-383 1E-398 -> 9.99999999999999E-384 Subnormal +fmax36577 subtract 1E-383 1E-399 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax36578 subtract 1E-383 1E-400 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax36579 subtract 1E-383 1E-401 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded +fmax36580 subtract 1E-383 1E-402 -> 1.000000000000000E-383 Underflow Inexact Subnormal Rounded + +-- check overflow edge case +-- 1234567890123456 +fmax36972 apply 9.999999999999999E+384 -> 9.999999999999999E+384 +fmax36973 fma 1 9.999999999999999E+384 1 -> 9.999999999999999E+384 Inexact Rounded +fmax36974 fma 1 9999999999999999E+369 1 -> 9.999999999999999E+384 Inexact Rounded +fmax36975 fma 1 9999999999999999E+369 1E+369 -> Infinity Overflow Inexact Rounded +fmax36976 fma 1 9999999999999999E+369 9E+368 -> Infinity Overflow Inexact Rounded +fmax36977 fma 1 9999999999999999E+369 8E+368 -> Infinity Overflow Inexact Rounded +fmax36978 fma 1 9999999999999999E+369 7E+368 -> Infinity Overflow Inexact Rounded +fmax36979 fma 1 9999999999999999E+369 6E+368 -> Infinity Overflow Inexact Rounded +fmax36980 fma 1 9999999999999999E+369 5E+368 -> Infinity Overflow Inexact Rounded +fmax36981 fma 1 9999999999999999E+369 4E+368 -> 9.999999999999999E+384 Inexact Rounded +fmax36982 fma 1 9999999999999999E+369 3E+368 -> 9.999999999999999E+384 Inexact Rounded +fmax36983 fma 1 9999999999999999E+369 2E+368 -> 9.999999999999999E+384 Inexact Rounded +fmax36984 fma 1 9999999999999999E+369 1E+368 -> 9.999999999999999E+384 Inexact Rounded + +fmax36985 apply -9.999999999999999E+384 -> -9.999999999999999E+384 +fmax36986 fma 1 -9.999999999999999E+384 -1 -> -9.999999999999999E+384 Inexact Rounded +fmax36987 fma 1 -9999999999999999E+369 -1 -> -9.999999999999999E+384 Inexact Rounded +fmax36988 fma 1 -9999999999999999E+369 -1E+369 -> -Infinity Overflow Inexact Rounded +fmax36989 fma 1 -9999999999999999E+369 -9E+368 -> -Infinity Overflow Inexact Rounded +fmax36990 fma 1 -9999999999999999E+369 -8E+368 -> -Infinity Overflow Inexact Rounded +fmax36991 fma 1 -9999999999999999E+369 -7E+368 -> -Infinity Overflow Inexact Rounded +fmax36992 fma 1 -9999999999999999E+369 -6E+368 -> -Infinity Overflow Inexact Rounded +fmax36993 fma 1 -9999999999999999E+369 -5E+368 -> -Infinity Overflow Inexact Rounded +fmax36994 fma 1 -9999999999999999E+369 -4E+368 -> -9.999999999999999E+384 Inexact Rounded +fmax36995 fma 1 -9999999999999999E+369 -3E+368 -> -9.999999999999999E+384 Inexact Rounded +fmax36996 fma 1 -9999999999999999E+369 -2E+368 -> -9.999999999999999E+384 Inexact Rounded +fmax36997 fma 1 -9999999999999999E+369 -1E+368 -> -9.999999999999999E+384 Inexact Rounded + +-- And for round down full and subnormal results +rounding: down +fmax361100 fma 1 1e+2 -1e-383 -> 99.99999999999999 Rounded Inexact +fmax361101 fma 1 1e+1 -1e-383 -> 9.999999999999999 Rounded Inexact +fmax361103 fma 1 +1 -1e-383 -> 0.9999999999999999 Rounded Inexact +fmax361104 fma 1 1e-1 -1e-383 -> 0.09999999999999999 Rounded Inexact +fmax361105 fma 1 1e-2 -1e-383 -> 0.009999999999999999 Rounded Inexact +fmax361106 fma 1 1e-3 -1e-383 -> 0.0009999999999999999 Rounded Inexact +fmax361107 fma 1 1e-4 -1e-383 -> 0.00009999999999999999 Rounded Inexact +fmax361108 fma 1 1e-5 -1e-383 -> 0.000009999999999999999 Rounded Inexact +fmax361109 fma 1 1e-6 -1e-383 -> 9.999999999999999E-7 Rounded Inexact + +rounding: ceiling +fmax361110 fma 1 -1e+2 +1e-383 -> -99.99999999999999 Rounded Inexact +fmax361111 fma 1 -1e+1 +1e-383 -> -9.999999999999999 Rounded Inexact +fmax361113 fma 1 -1 +1e-383 -> -0.9999999999999999 Rounded Inexact +fmax361114 fma 1 -1e-1 +1e-383 -> -0.09999999999999999 Rounded Inexact +fmax361115 fma 1 -1e-2 +1e-383 -> -0.009999999999999999 Rounded Inexact +fmax361116 fma 1 -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact +fmax361117 fma 1 -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact +fmax361118 fma 1 -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact +fmax361119 fma 1 -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact + +-- tests based on Gunnar Degnbol's edge case +rounding: half_even + +fmax361300 fma 1 1E16 -0.5 -> 1.000000000000000E+16 Inexact Rounded +fmax361310 fma 1 1E16 -0.51 -> 9999999999999999 Inexact Rounded +fmax361311 fma 1 1E16 -0.501 -> 9999999999999999 Inexact Rounded +fmax361312 fma 1 1E16 -0.5001 -> 9999999999999999 Inexact Rounded +fmax361313 fma 1 1E16 -0.50001 -> 9999999999999999 Inexact Rounded +fmax361314 fma 1 1E16 -0.500001 -> 9999999999999999 Inexact Rounded +fmax361315 fma 1 1E16 -0.5000001 -> 9999999999999999 Inexact Rounded +fmax361316 fma 1 1E16 -0.50000001 -> 9999999999999999 Inexact Rounded +fmax361317 fma 1 1E16 -0.500000001 -> 9999999999999999 Inexact Rounded +fmax361318 fma 1 1E16 -0.5000000001 -> 9999999999999999 Inexact Rounded +fmax361319 fma 1 1E16 -0.50000000001 -> 9999999999999999 Inexact Rounded +fmax361320 fma 1 1E16 -0.500000000001 -> 9999999999999999 Inexact Rounded +fmax361321 fma 1 1E16 -0.5000000000001 -> 9999999999999999 Inexact Rounded +fmax361322 fma 1 1E16 -0.50000000000001 -> 9999999999999999 Inexact Rounded +fmax361323 fma 1 1E16 -0.500000000000001 -> 9999999999999999 Inexact Rounded +fmax361324 fma 1 1E16 -0.5000000000000001 -> 9999999999999999 Inexact Rounded +fmax361325 fma 1 1E16 -0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361326 fma 1 1E16 -0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361327 fma 1 1E16 -0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361328 fma 1 1E16 -0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361329 fma 1 1E16 -0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361330 fma 1 1E16 -0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361331 fma 1 1E16 -0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361332 fma 1 1E16 -0.500000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361333 fma 1 1E16 -0.50000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361334 fma 1 1E16 -0.5000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361335 fma 1 1E16 -0.500000 -> 1.000000000000000E+16 Inexact Rounded +fmax361336 fma 1 1E16 -0.50000 -> 1.000000000000000E+16 Inexact Rounded +fmax361337 fma 1 1E16 -0.5000 -> 1.000000000000000E+16 Inexact Rounded +fmax361338 fma 1 1E16 -0.500 -> 1.000000000000000E+16 Inexact Rounded +fmax361339 fma 1 1E16 -0.50 -> 1.000000000000000E+16 Inexact Rounded + +fmax361340 fma 1 1E16 -5000000.000010001 -> 9999999995000000 Inexact Rounded +fmax361341 fma 1 1E16 -5000000.000000001 -> 9999999995000000 Inexact Rounded + +fmax361349 fma 1 9999999999999999 0.4 -> 9999999999999999 Inexact Rounded +fmax361350 fma 1 9999999999999999 0.49 -> 9999999999999999 Inexact Rounded +fmax361351 fma 1 9999999999999999 0.499 -> 9999999999999999 Inexact Rounded +fmax361352 fma 1 9999999999999999 0.4999 -> 9999999999999999 Inexact Rounded +fmax361353 fma 1 9999999999999999 0.49999 -> 9999999999999999 Inexact Rounded +fmax361354 fma 1 9999999999999999 0.499999 -> 9999999999999999 Inexact Rounded +fmax361355 fma 1 9999999999999999 0.4999999 -> 9999999999999999 Inexact Rounded +fmax361356 fma 1 9999999999999999 0.49999999 -> 9999999999999999 Inexact Rounded +fmax361357 fma 1 9999999999999999 0.499999999 -> 9999999999999999 Inexact Rounded +fmax361358 fma 1 9999999999999999 0.4999999999 -> 9999999999999999 Inexact Rounded +fmax361359 fma 1 9999999999999999 0.49999999999 -> 9999999999999999 Inexact Rounded +fmax361360 fma 1 9999999999999999 0.499999999999 -> 9999999999999999 Inexact Rounded +fmax361361 fma 1 9999999999999999 0.4999999999999 -> 9999999999999999 Inexact Rounded +fmax361362 fma 1 9999999999999999 0.49999999999999 -> 9999999999999999 Inexact Rounded +fmax361363 fma 1 9999999999999999 0.499999999999999 -> 9999999999999999 Inexact Rounded +fmax361364 fma 1 9999999999999999 0.4999999999999999 -> 9999999999999999 Inexact Rounded +fmax361365 fma 1 9999999999999999 0.5000000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361367 fma 1 9999999999999999 0.500000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361368 fma 1 9999999999999999 0.50000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361369 fma 1 9999999999999999 0.5000000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361370 fma 1 9999999999999999 0.500000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361371 fma 1 9999999999999999 0.50000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361372 fma 1 9999999999999999 0.5000000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361373 fma 1 9999999999999999 0.500000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361374 fma 1 9999999999999999 0.50000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361375 fma 1 9999999999999999 0.5000000 -> 1.000000000000000E+16 Inexact Rounded +fmax361376 fma 1 9999999999999999 0.500000 -> 1.000000000000000E+16 Inexact Rounded +fmax361377 fma 1 9999999999999999 0.50000 -> 1.000000000000000E+16 Inexact Rounded +fmax361378 fma 1 9999999999999999 0.5000 -> 1.000000000000000E+16 Inexact Rounded +fmax361379 fma 1 9999999999999999 0.500 -> 1.000000000000000E+16 Inexact Rounded +fmax361380 fma 1 9999999999999999 0.50 -> 1.000000000000000E+16 Inexact Rounded +fmax361381 fma 1 9999999999999999 0.5 -> 1.000000000000000E+16 Inexact Rounded +fmax361382 fma 1 9999999999999999 0.5000000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361383 fma 1 9999999999999999 0.500000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361384 fma 1 9999999999999999 0.50000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361385 fma 1 9999999999999999 0.5000000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361386 fma 1 9999999999999999 0.500000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361387 fma 1 9999999999999999 0.50000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361388 fma 1 9999999999999999 0.5000000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361389 fma 1 9999999999999999 0.500000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361390 fma 1 9999999999999999 0.50000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361391 fma 1 9999999999999999 0.5000001 -> 1.000000000000000E+16 Inexact Rounded +fmax361392 fma 1 9999999999999999 0.500001 -> 1.000000000000000E+16 Inexact Rounded +fmax361393 fma 1 9999999999999999 0.50001 -> 1.000000000000000E+16 Inexact Rounded +fmax361394 fma 1 9999999999999999 0.5001 -> 1.000000000000000E+16 Inexact Rounded +fmax361395 fma 1 9999999999999999 0.501 -> 1.000000000000000E+16 Inexact Rounded +fmax361396 fma 1 9999999999999999 0.51 -> 1.000000000000000E+16 Inexact Rounded + +-- More GD edge cases, where difference between the unadjusted +-- exponents is larger than the maximum precision and one side is 0 +fmax361420 fma 1 0 1.123456789012345 -> 1.123456789012345 +fmax361421 fma 1 0 1.123456789012345E-1 -> 0.1123456789012345 +fmax361422 fma 1 0 1.123456789012345E-2 -> 0.01123456789012345 +fmax361423 fma 1 0 1.123456789012345E-3 -> 0.001123456789012345 +fmax361424 fma 1 0 1.123456789012345E-4 -> 0.0001123456789012345 +fmax361425 fma 1 0 1.123456789012345E-5 -> 0.00001123456789012345 +fmax361426 fma 1 0 1.123456789012345E-6 -> 0.000001123456789012345 +fmax361427 fma 1 0 1.123456789012345E-7 -> 1.123456789012345E-7 +fmax361428 fma 1 0 1.123456789012345E-8 -> 1.123456789012345E-8 +fmax361429 fma 1 0 1.123456789012345E-9 -> 1.123456789012345E-9 +fmax361430 fma 1 0 1.123456789012345E-10 -> 1.123456789012345E-10 +fmax361431 fma 1 0 1.123456789012345E-11 -> 1.123456789012345E-11 +fmax361432 fma 1 0 1.123456789012345E-12 -> 1.123456789012345E-12 +fmax361433 fma 1 0 1.123456789012345E-13 -> 1.123456789012345E-13 +fmax361434 fma 1 0 1.123456789012345E-14 -> 1.123456789012345E-14 +fmax361435 fma 1 0 1.123456789012345E-15 -> 1.123456789012345E-15 +fmax361436 fma 1 0 1.123456789012345E-16 -> 1.123456789012345E-16 +fmax361437 fma 1 0 1.123456789012345E-17 -> 1.123456789012345E-17 +fmax361438 fma 1 0 1.123456789012345E-18 -> 1.123456789012345E-18 +fmax361439 fma 1 0 1.123456789012345E-19 -> 1.123456789012345E-19 + +-- same, reversed 0 +fmax361440 fma 1 1.123456789012345 0 -> 1.123456789012345 +fmax361441 fma 1 1.123456789012345E-1 0 -> 0.1123456789012345 +fmax361442 fma 1 1.123456789012345E-2 0 -> 0.01123456789012345 +fmax361443 fma 1 1.123456789012345E-3 0 -> 0.001123456789012345 +fmax361444 fma 1 1.123456789012345E-4 0 -> 0.0001123456789012345 +fmax361445 fma 1 1.123456789012345E-5 0 -> 0.00001123456789012345 +fmax361446 fma 1 1.123456789012345E-6 0 -> 0.000001123456789012345 +fmax361447 fma 1 1.123456789012345E-7 0 -> 1.123456789012345E-7 +fmax361448 fma 1 1.123456789012345E-8 0 -> 1.123456789012345E-8 +fmax361449 fma 1 1.123456789012345E-9 0 -> 1.123456789012345E-9 +fmax361450 fma 1 1.123456789012345E-10 0 -> 1.123456789012345E-10 +fmax361451 fma 1 1.123456789012345E-11 0 -> 1.123456789012345E-11 +fmax361452 fma 1 1.123456789012345E-12 0 -> 1.123456789012345E-12 +fmax361453 fma 1 1.123456789012345E-13 0 -> 1.123456789012345E-13 +fmax361454 fma 1 1.123456789012345E-14 0 -> 1.123456789012345E-14 +fmax361455 fma 1 1.123456789012345E-15 0 -> 1.123456789012345E-15 +fmax361456 fma 1 1.123456789012345E-16 0 -> 1.123456789012345E-16 +fmax361457 fma 1 1.123456789012345E-17 0 -> 1.123456789012345E-17 +fmax361458 fma 1 1.123456789012345E-18 0 -> 1.123456789012345E-18 +fmax361459 fma 1 1.123456789012345E-19 0 -> 1.123456789012345E-19 + +-- same, Es on the 0 +fmax361460 fma 1 1.123456789012345 0E-0 -> 1.123456789012345 +fmax361461 fma 1 1.123456789012345 0E-1 -> 1.123456789012345 +fmax361462 fma 1 1.123456789012345 0E-2 -> 1.123456789012345 +fmax361463 fma 1 1.123456789012345 0E-3 -> 1.123456789012345 +fmax361464 fma 1 1.123456789012345 0E-4 -> 1.123456789012345 +fmax361465 fma 1 1.123456789012345 0E-5 -> 1.123456789012345 +fmax361466 fma 1 1.123456789012345 0E-6 -> 1.123456789012345 +fmax361467 fma 1 1.123456789012345 0E-7 -> 1.123456789012345 +fmax361468 fma 1 1.123456789012345 0E-8 -> 1.123456789012345 +fmax361469 fma 1 1.123456789012345 0E-9 -> 1.123456789012345 +fmax361470 fma 1 1.123456789012345 0E-10 -> 1.123456789012345 +fmax361471 fma 1 1.123456789012345 0E-11 -> 1.123456789012345 +fmax361472 fma 1 1.123456789012345 0E-12 -> 1.123456789012345 +fmax361473 fma 1 1.123456789012345 0E-13 -> 1.123456789012345 +fmax361474 fma 1 1.123456789012345 0E-14 -> 1.123456789012345 +fmax361475 fma 1 1.123456789012345 0E-15 -> 1.123456789012345 +-- next four flag Rounded because the 0 extends the result +fmax361476 fma 1 1.123456789012345 0E-16 -> 1.123456789012345 Rounded +fmax361477 fma 1 1.123456789012345 0E-17 -> 1.123456789012345 Rounded +fmax361478 fma 1 1.123456789012345 0E-18 -> 1.123456789012345 Rounded +fmax361479 fma 1 1.123456789012345 0E-19 -> 1.123456789012345 Rounded + +-- sum of two opposite-sign operands is exactly 0 and floor => -0 +rounding: half_up +-- exact zeros from zeros +fmax361500 fma 1 0 0E-19 -> 0E-19 +fmax361501 fma 1 -0 0E-19 -> 0E-19 +fmax361502 fma 1 0 -0E-19 -> 0E-19 +fmax361503 fma 1 -0 -0E-19 -> -0E-19 +fmax361504 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361505 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361506 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361507 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361511 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361512 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361513 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361514 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361515 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361516 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361517 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361518 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: half_down +-- exact zeros from zeros +fmax361520 fma 1 0 0E-19 -> 0E-19 +fmax361521 fma 1 -0 0E-19 -> 0E-19 +fmax361522 fma 1 0 -0E-19 -> 0E-19 +fmax361523 fma 1 -0 -0E-19 -> -0E-19 +fmax361524 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361525 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361526 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361527 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361531 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361532 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361533 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361534 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361535 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361536 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361537 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361538 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: half_even +-- exact zeros from zeros +fmax361540 fma 1 0 0E-19 -> 0E-19 +fmax361541 fma 1 -0 0E-19 -> 0E-19 +fmax361542 fma 1 0 -0E-19 -> 0E-19 +fmax361543 fma 1 -0 -0E-19 -> -0E-19 +fmax361544 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361545 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361546 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361547 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361551 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361552 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361553 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361554 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361555 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361556 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361557 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361558 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: up +-- exact zeros from zeros +fmax361560 fma 1 0 0E-19 -> 0E-19 +fmax361561 fma 1 -0 0E-19 -> 0E-19 +fmax361562 fma 1 0 -0E-19 -> 0E-19 +fmax361563 fma 1 -0 -0E-19 -> -0E-19 +fmax361564 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361565 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361566 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361567 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361571 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361572 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361573 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +fmax361574 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +-- some exact zeros from non-zeros +fmax361575 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361576 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361577 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361578 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow + +rounding: down +-- exact zeros from zeros +fmax361580 fma 1 0 0E-19 -> 0E-19 +fmax361581 fma 1 -0 0E-19 -> 0E-19 +fmax361582 fma 1 0 -0E-19 -> 0E-19 +fmax361583 fma 1 -0 -0E-19 -> -0E-19 +fmax361584 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361585 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361586 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361587 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361591 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361592 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361593 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361594 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361595 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361596 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361597 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361598 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +rounding: ceiling +-- exact zeros from zeros +fmax361600 fma 1 0 0E-19 -> 0E-19 +fmax361601 fma 1 -0 0E-19 -> 0E-19 +fmax361602 fma 1 0 -0E-19 -> 0E-19 +fmax361603 fma 1 -0 -0E-19 -> -0E-19 +fmax361604 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361605 fma 1 -0E-400 0E-19 -> 0E-398 Clamped +fmax361606 fma 1 0E-400 -0E-19 -> 0E-398 Clamped +fmax361607 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361611 fma 1 1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361612 fma 1 -1E-401 1E-400 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361613 fma 1 1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361614 fma 1 -1E-401 -1E-400 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped +-- some exact zeros from non-zeros +fmax361615 fma 1 1E-401 1E-401 -> 1E-398 Subnormal Inexact Rounded Underflow +fmax361616 fma 1 -1E-401 1E-401 -> 0E-398 Clamped +fmax361617 fma 1 1E-401 -1E-401 -> 0E-398 Clamped +fmax361618 fma 1 -1E-401 -1E-401 -> -0E-398 Subnormal Inexact Rounded Underflow Clamped + +-- and the extra-special ugly case; unusual minuses marked by -- * +rounding: floor +-- exact zeros from zeros +fmax361620 fma 1 0 0E-19 -> 0E-19 +fmax361621 fma 1 -0 0E-19 -> -0E-19 -- * +fmax361622 fma 1 0 -0E-19 -> -0E-19 -- * +fmax361623 fma 1 -0 -0E-19 -> -0E-19 +fmax361624 fma 1 0E-400 0E-19 -> 0E-398 Clamped +fmax361625 fma 1 -0E-400 0E-19 -> -0E-398 Clamped -- * +fmax361626 fma 1 0E-400 -0E-19 -> -0E-398 Clamped -- * +fmax361627 fma 1 -0E-400 -0E-19 -> -0E-398 Clamped +-- inexact zeros +fmax361631 fma 1 1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361632 fma 1 -1E-401 1E-400 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361633 fma 1 1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +fmax361634 fma 1 -1E-401 -1E-400 -> -1E-398 Subnormal Inexact Rounded Underflow +-- some exact zeros from non-zeros +fmax361635 fma 1 1E-401 1E-401 -> 0E-398 Subnormal Inexact Rounded Underflow Clamped +fmax361636 fma 1 -1E-401 1E-401 -> -0E-398 Clamped -- * +fmax361637 fma 1 1E-401 -1E-401 -> -0E-398 Clamped -- * +fmax361638 fma 1 -1E-401 -1E-401 -> -1E-398 Subnormal Inexact Rounded Underflow + +-- Examples from SQL proposal (Krishna Kulkarni) +fmax361701 fma 1 130E-2 120E-2 -> 2.50 +fmax361702 fma 1 130E-2 12E-1 -> 2.50 +fmax361703 fma 1 130E-2 1E0 -> 2.30 +fmax361704 fma 1 1E2 1E4 -> 1.01E+4 +fmax361705 subtract 130E-2 120E-2 -> 0.10 +fmax361706 subtract 130E-2 12E-1 -> 0.10 +fmax361707 subtract 130E-2 1E0 -> 0.30 +fmax361708 subtract 1E2 1E4 -> -9.9E+3 + +-- Gappy coefficients; check residue handling even with full coefficient gap +rounding: half_even + +fmax362001 fma 1 1234567890123456 1 -> 1234567890123457 +fmax362002 fma 1 1234567890123456 0.6 -> 1234567890123457 Inexact Rounded +fmax362003 fma 1 1234567890123456 0.06 -> 1234567890123456 Inexact Rounded +fmax362004 fma 1 1234567890123456 6E-3 -> 1234567890123456 Inexact Rounded +fmax362005 fma 1 1234567890123456 6E-4 -> 1234567890123456 Inexact Rounded +fmax362006 fma 1 1234567890123456 6E-5 -> 1234567890123456 Inexact Rounded +fmax362007 fma 1 1234567890123456 6E-6 -> 1234567890123456 Inexact Rounded +fmax362008 fma 1 1234567890123456 6E-7 -> 1234567890123456 Inexact Rounded +fmax362009 fma 1 1234567890123456 6E-8 -> 1234567890123456 Inexact Rounded +fmax362010 fma 1 1234567890123456 6E-9 -> 1234567890123456 Inexact Rounded +fmax362011 fma 1 1234567890123456 6E-10 -> 1234567890123456 Inexact Rounded +fmax362012 fma 1 1234567890123456 6E-11 -> 1234567890123456 Inexact Rounded +fmax362013 fma 1 1234567890123456 6E-12 -> 1234567890123456 Inexact Rounded +fmax362014 fma 1 1234567890123456 6E-13 -> 1234567890123456 Inexact Rounded +fmax362015 fma 1 1234567890123456 6E-14 -> 1234567890123456 Inexact Rounded +fmax362016 fma 1 1234567890123456 6E-15 -> 1234567890123456 Inexact Rounded +fmax362017 fma 1 1234567890123456 6E-16 -> 1234567890123456 Inexact Rounded +fmax362018 fma 1 1234567890123456 6E-17 -> 1234567890123456 Inexact Rounded +fmax362019 fma 1 1234567890123456 6E-18 -> 1234567890123456 Inexact Rounded +fmax362020 fma 1 1234567890123456 6E-19 -> 1234567890123456 Inexact Rounded +fmax362021 fma 1 1234567890123456 6E-20 -> 1234567890123456 Inexact Rounded + +-- widening second argument at gap +fmax362030 fma 1 12345678 1 -> 12345679 +fmax362031 fma 1 12345678 0.1 -> 12345678.1 +fmax362032 fma 1 12345678 0.12 -> 12345678.12 +fmax362033 fma 1 12345678 0.123 -> 12345678.123 +fmax362034 fma 1 12345678 0.1234 -> 12345678.1234 +fmax362035 fma 1 12345678 0.12345 -> 12345678.12345 +fmax362036 fma 1 12345678 0.123456 -> 12345678.123456 +fmax362037 fma 1 12345678 0.1234567 -> 12345678.1234567 +fmax362038 fma 1 12345678 0.12345678 -> 12345678.12345678 +fmax362039 fma 1 12345678 0.123456789 -> 12345678.12345679 Inexact Rounded +fmax362040 fma 1 12345678 0.123456785 -> 12345678.12345678 Inexact Rounded +fmax362041 fma 1 12345678 0.1234567850 -> 12345678.12345678 Inexact Rounded +fmax362042 fma 1 12345678 0.1234567851 -> 12345678.12345679 Inexact Rounded +fmax362043 fma 1 12345678 0.12345678501 -> 12345678.12345679 Inexact Rounded +fmax362044 fma 1 12345678 0.123456785001 -> 12345678.12345679 Inexact Rounded +fmax362045 fma 1 12345678 0.1234567850001 -> 12345678.12345679 Inexact Rounded +fmax362046 fma 1 12345678 0.12345678500001 -> 12345678.12345679 Inexact Rounded +fmax362047 fma 1 12345678 0.123456785000001 -> 12345678.12345679 Inexact Rounded +fmax362048 fma 1 12345678 0.1234567850000001 -> 12345678.12345679 Inexact Rounded +fmax362049 fma 1 12345678 0.1234567850000000 -> 12345678.12345678 Inexact Rounded +-- 90123456 +rounding: half_even +fmax362050 fma 1 12345678 0.0234567750000000 -> 12345678.02345678 Inexact Rounded +fmax362051 fma 1 12345678 0.0034567750000000 -> 12345678.00345678 Inexact Rounded +fmax362052 fma 1 12345678 0.0004567750000000 -> 12345678.00045678 Inexact Rounded +fmax362053 fma 1 12345678 0.0000567750000000 -> 12345678.00005678 Inexact Rounded +fmax362054 fma 1 12345678 0.0000067750000000 -> 12345678.00000678 Inexact Rounded +fmax362055 fma 1 12345678 0.0000007750000000 -> 12345678.00000078 Inexact Rounded +fmax362056 fma 1 12345678 0.0000000750000000 -> 12345678.00000008 Inexact Rounded +fmax362057 fma 1 12345678 0.0000000050000000 -> 12345678.00000000 Inexact Rounded +fmax362060 fma 1 12345678 0.0234567750000001 -> 12345678.02345678 Inexact Rounded +fmax362061 fma 1 12345678 0.0034567750000001 -> 12345678.00345678 Inexact Rounded +fmax362062 fma 1 12345678 0.0004567750000001 -> 12345678.00045678 Inexact Rounded +fmax362063 fma 1 12345678 0.0000567750000001 -> 12345678.00005678 Inexact Rounded +fmax362064 fma 1 12345678 0.0000067750000001 -> 12345678.00000678 Inexact Rounded +fmax362065 fma 1 12345678 0.0000007750000001 -> 12345678.00000078 Inexact Rounded +fmax362066 fma 1 12345678 0.0000000750000001 -> 12345678.00000008 Inexact Rounded +fmax362067 fma 1 12345678 0.0000000050000001 -> 12345678.00000001 Inexact Rounded +-- far-out residues (full coefficient gap is 16+15 digits) +rounding: up +fmax362070 fma 1 12345678 1E-8 -> 12345678.00000001 +fmax362071 fma 1 12345678 1E-9 -> 12345678.00000001 Inexact Rounded +fmax362072 fma 1 12345678 1E-10 -> 12345678.00000001 Inexact Rounded +fmax362073 fma 1 12345678 1E-11 -> 12345678.00000001 Inexact Rounded +fmax362074 fma 1 12345678 1E-12 -> 12345678.00000001 Inexact Rounded +fmax362075 fma 1 12345678 1E-13 -> 12345678.00000001 Inexact Rounded +fmax362076 fma 1 12345678 1E-14 -> 12345678.00000001 Inexact Rounded +fmax362077 fma 1 12345678 1E-15 -> 12345678.00000001 Inexact Rounded +fmax362078 fma 1 12345678 1E-16 -> 12345678.00000001 Inexact Rounded +fmax362079 fma 1 12345678 1E-17 -> 12345678.00000001 Inexact Rounded +fmax362080 fma 1 12345678 1E-18 -> 12345678.00000001 Inexact Rounded +fmax362081 fma 1 12345678 1E-19 -> 12345678.00000001 Inexact Rounded +fmax362082 fma 1 12345678 1E-20 -> 12345678.00000001 Inexact Rounded +fmax362083 fma 1 12345678 1E-25 -> 12345678.00000001 Inexact Rounded +fmax362084 fma 1 12345678 1E-30 -> 12345678.00000001 Inexact Rounded +fmax362085 fma 1 12345678 1E-31 -> 12345678.00000001 Inexact Rounded +fmax362086 fma 1 12345678 1E-32 -> 12345678.00000001 Inexact Rounded +fmax362087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexact Rounded +fmax362088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded +fmax362089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded + +-- payload decapitate x3 +precision: 5 +fmax363000 fma 1 1 sNaN1234567890 -> NaN67890 Invalid_operation +fmax363001 fma 1 -sNaN1234512345 1 -> -NaN12345 Invalid_operation +fmax363002 fma sNaN1234554321 1 1 -> NaN54321 Invalid_operation + +-- Null tests +fmax39990 fma 1 10 # -> NaN Invalid_operation +fmax39991 fma 1 # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/invert.decTest b/Lib/test/decimaltestdata/invert.decTest index a2f7be5a779..9ef5a9137ce 100644 --- a/Lib/test/decimaltestdata/invert.decTest +++ b/Lib/test/decimaltestdata/invert.decTest @@ -1,176 +1,176 @@ ------------------------------------------------------------------------- --- invert.decTest -- digitwise logical INVERT -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check (truth table), and examples from decArith -invx001 invert 0 -> 111111111 -invx002 invert 1 -> 111111110 -invx003 invert 10 -> 111111101 -invx004 invert 111111111 -> 0 -invx005 invert 000000000 -> 111111111 -invx006 invert 101010101 -> '10101010' --- and at msd and msd-1 -invx007 invert 000000000 -> 111111111 -invx009 invert 100000000 -> 11111111 -invx011 invert 000000000 -> 111111111 -invx013 invert 010000000 -> 101111111 - --- Various lengths --- 123456789 123456789 -invx021 invert 111111111 -> 0 -invx022 invert 111111111111 -> 0 -invx023 invert 11111111 -> 100000000 -invx025 invert 1111111 -> 110000000 -invx026 invert 111111 -> 111000000 -invx027 invert 11111 -> 111100000 -invx028 invert 1111 -> 111110000 -invx029 invert 111 -> 111111000 -invx031 invert 11 -> 111111100 -invx032 invert 1 -> 111111110 -invx033 invert 111111111111 -> 0 -invx034 invert 11111111111 -> 0 -invx035 invert 1111111111 -> 0 -invx036 invert 111111111 -> 0 - -invx080 invert 011111111 -> 100000000 -invx081 invert 101111111 -> 10000000 -invx082 invert 110111111 -> 1000000 -invx083 invert 111011111 -> 100000 -invx084 invert 111101111 -> 10000 -invx085 invert 111110111 -> 1000 -invx086 invert 111111011 -> 100 -invx087 invert 111111101 -> 10 -invx088 invert 111111110 -> 1 -invx089 invert 011111011 -> 100000100 -invx090 invert 101111101 -> 10000010 -invx091 invert 110111110 -> 1000001 -invx092 invert 111011101 -> 100010 -invx093 invert 111101011 -> 10100 -invx094 invert 111110111 -> 1000 -invx095 invert 111101011 -> 10100 -invx096 invert 111011101 -> 100010 -invx097 invert 110111110 -> 1000001 -invx098 invert 101111101 -> 10000010 -invx099 invert 011111011 -> 100000100 - --- non-0/1 should not be accepted, nor should signs -invx220 invert 111111112 -> NaN Invalid_operation -invx221 invert 333333333 -> NaN Invalid_operation -invx222 invert 555555555 -> NaN Invalid_operation -invx223 invert 777777777 -> NaN Invalid_operation -invx224 invert 999999999 -> NaN Invalid_operation -invx225 invert 222222222 -> NaN Invalid_operation -invx226 invert 444444444 -> NaN Invalid_operation -invx227 invert 666666666 -> NaN Invalid_operation -invx228 invert 888888888 -> NaN Invalid_operation -invx229 invert 999999999 -> NaN Invalid_operation -invx230 invert 999999999 -> NaN Invalid_operation -invx231 invert 999999999 -> NaN Invalid_operation -invx232 invert 999999999 -> NaN Invalid_operation --- a few randoms -invx240 invert 567468689 -> NaN Invalid_operation -invx241 invert 567367689 -> NaN Invalid_operation -invx242 invert -631917772 -> NaN Invalid_operation -invx243 invert -756253257 -> NaN Invalid_operation -invx244 invert 835590149 -> NaN Invalid_operation --- test MSD -invx250 invert 200000000 -> NaN Invalid_operation -invx251 invert 300000000 -> NaN Invalid_operation -invx252 invert 400000000 -> NaN Invalid_operation -invx253 invert 500000000 -> NaN Invalid_operation -invx254 invert 600000000 -> NaN Invalid_operation -invx255 invert 700000000 -> NaN Invalid_operation -invx256 invert 800000000 -> NaN Invalid_operation -invx257 invert 900000000 -> NaN Invalid_operation --- test MSD-1 -invx270 invert 021000000 -> NaN Invalid_operation -invx271 invert 030100000 -> NaN Invalid_operation -invx272 invert 040010000 -> NaN Invalid_operation -invx273 invert 050001000 -> NaN Invalid_operation -invx274 invert 160000100 -> NaN Invalid_operation -invx275 invert 170000010 -> NaN Invalid_operation -invx276 invert 180000000 -> NaN Invalid_operation -invx277 invert 190000000 -> NaN Invalid_operation --- test LSD -invx280 invert 000000002 -> NaN Invalid_operation -invx281 invert 000000003 -> NaN Invalid_operation -invx282 invert 000000004 -> NaN Invalid_operation -invx283 invert 000000005 -> NaN Invalid_operation -invx284 invert 101000006 -> NaN Invalid_operation -invx285 invert 100100007 -> NaN Invalid_operation -invx286 invert 100010008 -> NaN Invalid_operation -invx287 invert 100001009 -> NaN Invalid_operation --- test Middie -invx288 invert 000020000 -> NaN Invalid_operation -invx289 invert 000030001 -> NaN Invalid_operation -invx290 invert 000040000 -> NaN Invalid_operation -invx291 invert 000050000 -> NaN Invalid_operation -invx292 invert 101060000 -> NaN Invalid_operation -invx293 invert 100170010 -> NaN Invalid_operation -invx294 invert 100080100 -> NaN Invalid_operation -invx295 invert 100091000 -> NaN Invalid_operation --- signs -invx296 invert -100001000 -> NaN Invalid_operation -invx299 invert 100001000 -> 11110111 - --- Nmax, Nmin, Ntiny -invx341 invert 9.99999999E+999 -> NaN Invalid_operation -invx342 invert 1E-999 -> NaN Invalid_operation -invx343 invert 1.00000000E-999 -> NaN Invalid_operation -invx344 invert 1E-1007 -> NaN Invalid_operation -invx345 invert -1E-1007 -> NaN Invalid_operation -invx346 invert -1.00000000E-999 -> NaN Invalid_operation -invx347 invert -1E-999 -> NaN Invalid_operation -invx348 invert -9.99999999E+999 -> NaN Invalid_operation - --- A few other non-integers -invx361 invert 1.0 -> NaN Invalid_operation -invx362 invert 1E+1 -> NaN Invalid_operation -invx363 invert 0.0 -> NaN Invalid_operation -invx364 invert 0E+1 -> NaN Invalid_operation -invx365 invert 9.9 -> NaN Invalid_operation -invx366 invert 9E+1 -> NaN Invalid_operation - --- All Specials are in error -invx788 invert -Inf -> NaN Invalid_operation -invx794 invert Inf -> NaN Invalid_operation -invx821 invert NaN -> NaN Invalid_operation -invx841 invert sNaN -> NaN Invalid_operation --- propagating NaNs -invx861 invert NaN1 -> NaN Invalid_operation -invx862 invert +NaN2 -> NaN Invalid_operation -invx863 invert NaN3 -> NaN Invalid_operation -invx864 invert NaN4 -> NaN Invalid_operation -invx865 invert NaN5 -> NaN Invalid_operation -invx871 invert sNaN11 -> NaN Invalid_operation -invx872 invert sNaN12 -> NaN Invalid_operation -invx873 invert sNaN13 -> NaN Invalid_operation -invx874 invert sNaN14 -> NaN Invalid_operation -invx875 invert sNaN15 -> NaN Invalid_operation -invx876 invert NaN16 -> NaN Invalid_operation -invx881 invert +NaN25 -> NaN Invalid_operation -invx882 invert -NaN26 -> NaN Invalid_operation -invx883 invert -sNaN27 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- invert.decTest -- digitwise logical INVERT -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check (truth table), and examples from decArith +invx001 invert 0 -> 111111111 +invx002 invert 1 -> 111111110 +invx003 invert 10 -> 111111101 +invx004 invert 111111111 -> 0 +invx005 invert 000000000 -> 111111111 +invx006 invert 101010101 -> '10101010' +-- and at msd and msd-1 +invx007 invert 000000000 -> 111111111 +invx009 invert 100000000 -> 11111111 +invx011 invert 000000000 -> 111111111 +invx013 invert 010000000 -> 101111111 + +-- Various lengths +-- 123456789 123456789 +invx021 invert 111111111 -> 0 +invx022 invert 111111111111 -> 0 +invx023 invert 11111111 -> 100000000 +invx025 invert 1111111 -> 110000000 +invx026 invert 111111 -> 111000000 +invx027 invert 11111 -> 111100000 +invx028 invert 1111 -> 111110000 +invx029 invert 111 -> 111111000 +invx031 invert 11 -> 111111100 +invx032 invert 1 -> 111111110 +invx033 invert 111111111111 -> 0 +invx034 invert 11111111111 -> 0 +invx035 invert 1111111111 -> 0 +invx036 invert 111111111 -> 0 + +invx080 invert 011111111 -> 100000000 +invx081 invert 101111111 -> 10000000 +invx082 invert 110111111 -> 1000000 +invx083 invert 111011111 -> 100000 +invx084 invert 111101111 -> 10000 +invx085 invert 111110111 -> 1000 +invx086 invert 111111011 -> 100 +invx087 invert 111111101 -> 10 +invx088 invert 111111110 -> 1 +invx089 invert 011111011 -> 100000100 +invx090 invert 101111101 -> 10000010 +invx091 invert 110111110 -> 1000001 +invx092 invert 111011101 -> 100010 +invx093 invert 111101011 -> 10100 +invx094 invert 111110111 -> 1000 +invx095 invert 111101011 -> 10100 +invx096 invert 111011101 -> 100010 +invx097 invert 110111110 -> 1000001 +invx098 invert 101111101 -> 10000010 +invx099 invert 011111011 -> 100000100 + +-- non-0/1 should not be accepted, nor should signs +invx220 invert 111111112 -> NaN Invalid_operation +invx221 invert 333333333 -> NaN Invalid_operation +invx222 invert 555555555 -> NaN Invalid_operation +invx223 invert 777777777 -> NaN Invalid_operation +invx224 invert 999999999 -> NaN Invalid_operation +invx225 invert 222222222 -> NaN Invalid_operation +invx226 invert 444444444 -> NaN Invalid_operation +invx227 invert 666666666 -> NaN Invalid_operation +invx228 invert 888888888 -> NaN Invalid_operation +invx229 invert 999999999 -> NaN Invalid_operation +invx230 invert 999999999 -> NaN Invalid_operation +invx231 invert 999999999 -> NaN Invalid_operation +invx232 invert 999999999 -> NaN Invalid_operation +-- a few randoms +invx240 invert 567468689 -> NaN Invalid_operation +invx241 invert 567367689 -> NaN Invalid_operation +invx242 invert -631917772 -> NaN Invalid_operation +invx243 invert -756253257 -> NaN Invalid_operation +invx244 invert 835590149 -> NaN Invalid_operation +-- test MSD +invx250 invert 200000000 -> NaN Invalid_operation +invx251 invert 300000000 -> NaN Invalid_operation +invx252 invert 400000000 -> NaN Invalid_operation +invx253 invert 500000000 -> NaN Invalid_operation +invx254 invert 600000000 -> NaN Invalid_operation +invx255 invert 700000000 -> NaN Invalid_operation +invx256 invert 800000000 -> NaN Invalid_operation +invx257 invert 900000000 -> NaN Invalid_operation +-- test MSD-1 +invx270 invert 021000000 -> NaN Invalid_operation +invx271 invert 030100000 -> NaN Invalid_operation +invx272 invert 040010000 -> NaN Invalid_operation +invx273 invert 050001000 -> NaN Invalid_operation +invx274 invert 160000100 -> NaN Invalid_operation +invx275 invert 170000010 -> NaN Invalid_operation +invx276 invert 180000000 -> NaN Invalid_operation +invx277 invert 190000000 -> NaN Invalid_operation +-- test LSD +invx280 invert 000000002 -> NaN Invalid_operation +invx281 invert 000000003 -> NaN Invalid_operation +invx282 invert 000000004 -> NaN Invalid_operation +invx283 invert 000000005 -> NaN Invalid_operation +invx284 invert 101000006 -> NaN Invalid_operation +invx285 invert 100100007 -> NaN Invalid_operation +invx286 invert 100010008 -> NaN Invalid_operation +invx287 invert 100001009 -> NaN Invalid_operation +-- test Middie +invx288 invert 000020000 -> NaN Invalid_operation +invx289 invert 000030001 -> NaN Invalid_operation +invx290 invert 000040000 -> NaN Invalid_operation +invx291 invert 000050000 -> NaN Invalid_operation +invx292 invert 101060000 -> NaN Invalid_operation +invx293 invert 100170010 -> NaN Invalid_operation +invx294 invert 100080100 -> NaN Invalid_operation +invx295 invert 100091000 -> NaN Invalid_operation +-- signs +invx296 invert -100001000 -> NaN Invalid_operation +invx299 invert 100001000 -> 11110111 + +-- Nmax, Nmin, Ntiny +invx341 invert 9.99999999E+999 -> NaN Invalid_operation +invx342 invert 1E-999 -> NaN Invalid_operation +invx343 invert 1.00000000E-999 -> NaN Invalid_operation +invx344 invert 1E-1007 -> NaN Invalid_operation +invx345 invert -1E-1007 -> NaN Invalid_operation +invx346 invert -1.00000000E-999 -> NaN Invalid_operation +invx347 invert -1E-999 -> NaN Invalid_operation +invx348 invert -9.99999999E+999 -> NaN Invalid_operation + +-- A few other non-integers +invx361 invert 1.0 -> NaN Invalid_operation +invx362 invert 1E+1 -> NaN Invalid_operation +invx363 invert 0.0 -> NaN Invalid_operation +invx364 invert 0E+1 -> NaN Invalid_operation +invx365 invert 9.9 -> NaN Invalid_operation +invx366 invert 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +invx788 invert -Inf -> NaN Invalid_operation +invx794 invert Inf -> NaN Invalid_operation +invx821 invert NaN -> NaN Invalid_operation +invx841 invert sNaN -> NaN Invalid_operation +-- propagating NaNs +invx861 invert NaN1 -> NaN Invalid_operation +invx862 invert +NaN2 -> NaN Invalid_operation +invx863 invert NaN3 -> NaN Invalid_operation +invx864 invert NaN4 -> NaN Invalid_operation +invx865 invert NaN5 -> NaN Invalid_operation +invx871 invert sNaN11 -> NaN Invalid_operation +invx872 invert sNaN12 -> NaN Invalid_operation +invx873 invert sNaN13 -> NaN Invalid_operation +invx874 invert sNaN14 -> NaN Invalid_operation +invx875 invert sNaN15 -> NaN Invalid_operation +invx876 invert NaN16 -> NaN Invalid_operation +invx881 invert +NaN25 -> NaN Invalid_operation +invx882 invert -NaN26 -> NaN Invalid_operation +invx883 invert -sNaN27 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/ln.decTest b/Lib/test/decimaltestdata/ln.decTest index f602af23775..efcb2a66065 100644 --- a/Lib/test/decimaltestdata/ln.decTest +++ b/Lib/test/decimaltestdata/ln.decTest @@ -1,611 +1,611 @@ ------------------------------------------------------------------------- --- ln.decTest -- decimal natural logarithm -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 16 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- basics (examples in specification) -precision: 9 -lnxs001 ln 0 -> -Infinity -lnxs002 ln 1.000 -> 0 -lnxs003 ln 2.71828183 -> 1.00000000 Inexact Rounded -lnxs004 ln 10 -> 2.30258509 Inexact Rounded -lnxs005 ln +Infinity -> Infinity - - --- basics -precision: 16 -lnx0001 ln 0 -> -Infinity -lnx0002 ln 1E-9 -> -20.72326583694641 Inexact Rounded -lnx0003 ln 0.0007 -> -7.264430222920869 Inexact Rounded -lnx0004 ln 0.1 -> -2.302585092994046 Inexact Rounded -lnx0005 ln 0.7 -> -0.3566749439387324 Inexact Rounded -lnx0006 ln 1 -> 0 -lnx0007 ln 1.000 -> 0 -lnx0008 ln 1.5 -> 0.4054651081081644 Inexact Rounded -lnx0009 ln 2 -> 0.6931471805599453 Inexact Rounded -lnx0010 ln 2.718281828459045 -> 0.9999999999999999 Inexact Rounded -lnx0011 ln 2.718281828459046 -> 1.000000000000000 Inexact Rounded -lnx0012 ln 2.718281828459047 -> 1.000000000000001 Inexact Rounded -lnx0013 ln 10 -> 2.302585092994046 Inexact Rounded -lnx0014 ln 10.5 -> 2.351375257163478 Inexact Rounded -lnx0015 ln 9999 -> 9.210240366975849 Inexact Rounded -lnx0016 ln 1E6 -> 13.81551055796427 Inexact Rounded -lnx0017 ln 1E+9 -> 20.72326583694641 Inexact Rounded -lnx0018 ln +Infinity -> Infinity - --- notable cases --- negatives -lnx0021 ln -1E-9 -> NaN Invalid_operation -lnx0022 ln -0.0007 -> NaN Invalid_operation -lnx0023 ln -0.1 -> NaN Invalid_operation -lnx0024 ln -0.7 -> NaN Invalid_operation -lnx0025 ln -1 -> NaN Invalid_operation -lnx0026 ln -1.5 -> NaN Invalid_operation -lnx0027 ln -2 -> NaN Invalid_operation -lnx0029 ln -10.5 -> NaN Invalid_operation -lnx0028 ln -9999 -> NaN Invalid_operation -lnx0030 ln -2.718281828459045 -> NaN Invalid_operation -lnx0031 ln -2.718281828459046 -> NaN Invalid_operation -lnx0032 ln -0 -> -Infinity -lnx0033 ln -0E+17 -> -Infinity -lnx0034 ln -0E-17 -> -Infinity --- other zeros -lnx0041 ln 0 -> -Infinity -lnx0042 ln 0E+17 -> -Infinity -lnx0043 ln 0E-17 -> -Infinity --- infinities -lnx0045 ln -Infinity -> NaN Invalid_operation -lnx0046 ln +Infinity -> Infinity --- ones -lnx0050 ln 1 -> 0 -lnx0051 ln 1.0 -> 0 -lnx0052 ln 1.000000000000000 -> 0 -lnx0053 ln 1.000000000000000000 -> 0 - --- lower precision basics -Precision: 7 -lnx0101 ln 0 -> -Infinity -lnx0102 ln 1E-9 -> -20.72327 Inexact Rounded -lnx0103 ln 0.0007 -> -7.264430 Inexact Rounded -lnx0104 ln 0.1 -> -2.302585 Inexact Rounded -lnx0105 ln 0.7 -> -0.3566749 Inexact Rounded -lnx0106 ln 1 -> 0 -lnx0107 ln 1.5 -> 0.4054651 Inexact Rounded -lnx0108 ln 2 -> 0.6931472 Inexact Rounded -lnx0109 ln 2.718281828459045 -> 1.000000 Inexact Rounded -lnx0110 ln 2.718281828459046 -> 1.000000 Inexact Rounded -lnx0111 ln 2.718281828459047 -> 1.000000 Inexact Rounded -lnx0112 ln 10 -> 2.302585 Inexact Rounded -lnx0113 ln 10.5 -> 2.351375 Inexact Rounded -lnx0114 ln 9999 -> 9.210240 Inexact Rounded -lnx0115 ln 1E6 -> 13.81551 Inexact Rounded -lnx0116 ln 1E+9 -> 20.72327 Inexact Rounded -lnx0117 ln +Infinity -> Infinity -Precision: 2 -lnx0121 ln 0 -> -Infinity -lnx0122 ln 1E-9 -> -21 Inexact Rounded -lnx0123 ln 0.0007 -> -7.3 Inexact Rounded -lnx0124 ln 0.1 -> -2.3 Inexact Rounded -lnx0125 ln 0.7 -> -0.36 Inexact Rounded -lnx0126 ln 1 -> 0 -lnx0127 ln 1.5 -> 0.41 Inexact Rounded -lnx0128 ln 2 -> 0.69 Inexact Rounded -lnx0129 ln 2.718281828459045 -> 1.0 Inexact Rounded -lnx0130 ln 2.718281828459046 -> 1.0 Inexact Rounded -lnx0131 ln 2.718281828459047 -> 1.0 Inexact Rounded -lnx0132 ln 10 -> 2.3 Inexact Rounded -lnx0133 ln 10.5 -> 2.4 Inexact Rounded -lnx0134 ln 9999 -> 9.2 Inexact Rounded -lnx0135 ln 1E6 -> 14 Inexact Rounded -lnx0136 ln 1E+9 -> 21 Inexact Rounded -lnx0137 ln +Infinity -> Infinity -Precision: 1 -lnx0141 ln 0 -> -Infinity -lnx0142 ln 1E-9 -> -2E+1 Inexact Rounded -lnx0143 ln 0.0007 -> -7 Inexact Rounded -lnx0144 ln 0.1 -> -2 Inexact Rounded -lnx0145 ln 0.7 -> -0.4 Inexact Rounded -lnx0146 ln 1 -> 0 -lnx0147 ln 1.5 -> 0.4 Inexact Rounded -lnx0148 ln 2 -> 0.7 Inexact Rounded -lnx0149 ln 2.718281828459045 -> 1 Inexact Rounded -lnx0150 ln 2.718281828459046 -> 1 Inexact Rounded -lnx0151 ln 2.718281828459047 -> 1 Inexact Rounded -lnx0152 ln 10 -> 2 Inexact Rounded -lnx0153 ln 10.5 -> 2 Inexact Rounded -lnx0154 ln 9999 -> 9 Inexact Rounded -lnx0155 ln 1E6 -> 1E+1 Inexact Rounded -lnx0156 ln 1E+9 -> 2E+1 Inexact Rounded -lnx0157 ln +Infinity -> Infinity - --- group low-precision ln(1)s: -precision: 1 -lnx0161 ln 1 -> 0 -precision: 2 -lnx0162 ln 1 -> 0 -precision: 3 -lnx0163 ln 1 -> 0 -precision: 4 -lnx0164 ln 1 -> 0 -precision: 5 -lnx0165 ln 1 -> 0 -precision: 6 -lnx0166 ln 1 -> 0 -precision: 7 -lnx0167 ln 1 -> 0 -precision: 8 -lnx0168 ln 1 -> 0 - --- edge-test ln(2) and ln(10) in case of lookasides -precision: 45 -lnx201 ln 2 -> 0.693147180559945309417232121458176568075500134 Inexact Rounded -lnx202 ln 10 -> 2.30258509299404568401799145468436420760110149 Inexact Rounded -precision: 44 -lnx203 ln 2 -> 0.69314718055994530941723212145817656807550013 Inexact Rounded -lnx204 ln 10 -> 2.3025850929940456840179914546843642076011015 Inexact Rounded -precision: 43 -lnx205 ln 2 -> 0.6931471805599453094172321214581765680755001 Inexact Rounded -lnx206 ln 10 -> 2.302585092994045684017991454684364207601101 Inexact Rounded -precision: 42 -lnx207 ln 2 -> 0.693147180559945309417232121458176568075500 Inexact Rounded -lnx208 ln 10 -> 2.30258509299404568401799145468436420760110 Inexact Rounded -precision: 41 -lnx209 ln 2 -> 0.69314718055994530941723212145817656807550 Inexact Rounded -lnx210 ln 10 -> 2.3025850929940456840179914546843642076011 Inexact Rounded -precision: 40 -lnx211 ln 2 -> 0.6931471805599453094172321214581765680755 Inexact Rounded -lnx212 ln 10 -> 2.302585092994045684017991454684364207601 Inexact Rounded -precision: 39 -lnx213 ln 2 -> 0.693147180559945309417232121458176568076 Inexact Rounded -lnx214 ln 10 -> 2.30258509299404568401799145468436420760 Inexact Rounded -precision: 38 -lnx215 ln 2 -> 0.69314718055994530941723212145817656808 Inexact Rounded -lnx216 ln 10 -> 2.3025850929940456840179914546843642076 Inexact Rounded -precision: 37 -lnx217 ln 2 -> 0.6931471805599453094172321214581765681 Inexact Rounded -lnx218 ln 10 -> 2.302585092994045684017991454684364208 Inexact Rounded -precision: 36 -lnx219 ln 2 -> 0.693147180559945309417232121458176568 Inexact Rounded -lnx220 ln 10 -> 2.30258509299404568401799145468436421 Inexact Rounded -precision: 35 -lnx221 ln 2 -> 0.69314718055994530941723212145817657 Inexact Rounded -lnx222 ln 10 -> 2.3025850929940456840179914546843642 Inexact Rounded -precision: 34 -lnx223 ln 2 -> 0.6931471805599453094172321214581766 Inexact Rounded -lnx224 ln 10 -> 2.302585092994045684017991454684364 Inexact Rounded -precision: 33 -lnx225 ln 2 -> 0.693147180559945309417232121458177 Inexact Rounded -lnx226 ln 10 -> 2.30258509299404568401799145468436 Inexact Rounded -precision: 32 -lnx227 ln 2 -> 0.69314718055994530941723212145818 Inexact Rounded -lnx228 ln 10 -> 2.3025850929940456840179914546844 Inexact Rounded -precision: 31 -lnx229 ln 2 -> 0.6931471805599453094172321214582 Inexact Rounded -lnx230 ln 10 -> 2.302585092994045684017991454684 Inexact Rounded -precision: 30 -lnx231 ln 2 -> 0.693147180559945309417232121458 Inexact Rounded -lnx232 ln 10 -> 2.30258509299404568401799145468 Inexact Rounded - --- extreme input range values -maxExponent: 384 -minExponent: -383 -Precision: 16 - -lnx0901 ln 1e-400 -> -921.0340371976183 Inexact Rounded -lnx0902 ln 1e+400 -> 921.0340371976183 Inexact Rounded -lnx0903 ln 1e-999999 -> -2302582.790408953 Inexact Rounded -lnx0904 ln 1e+999999 -> 2302582.790408953 Inexact Rounded -lnx0905 ln 1e-1000013 -> -2302615.026600255 Inexact Rounded -lnx0906 ln 2e-1000013 -> -2302614.333453074 Inexact Rounded - -lnx0910 ln 9.999999e+999999 -> 2302585.092993946 Inexact Rounded -lnx0911 ln 9.9999999e+999999 -> 2302585.092994036 Inexact Rounded -lnx0912 ln 9.99999999e+999999 -> 2302585.092994045 Inexact Rounded -lnx0913 ln 9.999999999e+999999 -> 2302585.092994046 Inexact Rounded -lnx0914 ln 9.999999999999e+999999 -> 2302585.092994046 Inexact Rounded -lnx0915 ln 9.999999999999999e+999999 -> 2302585.092994046 Inexact Rounded -lnx0916 ln 9.999999999999999999999999e+999999 -> 2302585.092994046 Inexact Rounded - --- randoms --- P=50, within 0-999 -Precision: 50 -maxExponent: 384 -minExponent: -383 -lnx1501 ln 0.00098800906574486388604608477869812518857023768951 -> -6.9198186844033787995945147836955586009548513043689 Inexact Rounded -lnx1502 ln 158.15866624664623070184595045304145949900714987827 -> 5.0635987458895647454907806507503825602758392287684 Inexact Rounded -lnx1503 ln 0.00565661412059571925040285814021799775249288309321 -> -5.1749297776760632102047540300491550931651318975237 Inexact Rounded -lnx1504 ln 0.00000006914232532620489602008402091666547903180607 -> -16.487098770877825308138976818688771638172333034347 Inexact Rounded -lnx1505 ln 0.00025380374621297657504661540749355251231770070723 -> -8.2789492423005003205242162741569033124260321954589 Inexact Rounded -lnx1506 ln 83.033654063877426261108592599182418953442677554806 -> 4.4192459962647137976949249810815698465031609843669 Inexact Rounded -lnx1507 ln 0.00000000416863228092481651627734668440663678118729 -> -19.295677845122141772791294599714950175284915666430 Inexact Rounded -lnx1508 ln 0.00000140847873187820570181214271960511080523457669 -> -13.473000349581967189668305314384952251556809480339 Inexact Rounded -lnx1509 ln 66.176106555181527101630351127583944689752069132522 -> 4.1923194696232505883666171116966137694013431504252 Inexact Rounded -lnx1510 ln 0.00000000000009899043487403590900111602024562297908 -> -29.943753166877840985821508112917991506656545174163 Inexact Rounded -lnx1511 ln 0.00000000000324618296721747097510453388683912733569 -> -26.453541281444586819009546418577507163362590139422 Inexact Rounded -lnx1512 ln 72.646968818463546449499147579023555008392860423385 -> 4.2856116660689646882852128853423566276718230426479 Inexact Rounded -lnx1513 ln 0.00000000000000066755483124635612574263153825990523 -> -34.942910142802769319262875080398852491588707172483 Inexact Rounded -lnx1514 ln 61.002910447202398204114909451851111424657671911002 -> 4.1109215752843377323363182051446177066434038096529 Inexact Rounded -lnx1515 ln 917.06917611331980999227893584010544542312239174774 -> 6.8211829068303114128752453661946446979787826282907 Inexact Rounded -lnx1516 ln 0.00000000170823794883673083358549749078972003965194 -> -20.187803436976150477297246666771626827057191023004 Inexact Rounded -lnx1517 ln 0.53731767845358224445809761315159249898566542910649 -> -0.62116577939968409211736413628236285160048357000961 Inexact Rounded -lnx1518 ln 0.00000000000000008965291392882804161299758708033373 -> -36.950585970980857376081265073276303670820056916206 Inexact Rounded -lnx1519 ln 0.00000000006990244916026429904498278982530170295668 -> -23.383920429244457578373523508427783144589480420753 Inexact Rounded -lnx1520 ln 4.0312542977070300070506064666536478373801988540614 -> 1.3940775676592451945795752796421391871302024763305 Inexact Rounded -lnx1521 ln 271.84991311551875601432518819562391699324632396423 -> 5.6052501239873862517916679747146539808077431873478 Inexact Rounded -lnx1522 ln 7.4118671629373864667229445746862314443895404818689 -> 2.0030823863706344628239147639318289961917060121141 Inexact Rounded -lnx1523 ln 0.00000000000002026311452625364905357321664186034258 -> -31.529974180054438792043856877314043794320951134754 Inexact Rounded -lnx1524 ln 0.00000000000009563398651261756952398250624737809347 -> -29.978248130576972953141284136962670021368834792579 Inexact Rounded -lnx1525 ln 0.00000000009556772669409858653026558223465197808991 -> -23.071185939748285541228206161472956661196956741186 Inexact Rounded -lnx1526 ln 6.8441648298027301292342057248737326152250794026761 -> 1.9233964395801946597272589473417948024361005082908 Inexact Rounded -lnx1527 ln 0.00000000000073059699884439979394945822035704264577 -> -27.944914388353724718836101828677771967128509603158 Inexact Rounded -lnx1528 ln 0.00000000000000002610078280419082263138064745416787 -> -38.184566367516207885573773320135965798717120735115 Inexact Rounded -lnx1529 ln 0.00000000000000000150259517166294243088546806083283 -> -41.039337946266676108538170837580051699618334928421 Inexact Rounded -lnx1530 ln 0.00000000000000087919160541714580707181969708502091 -> -34.667528818827671507514319744047440696187358676848 Inexact Rounded -lnx1531 ln 0.00000000000395726725120787763271849577708068584598 -> -26.255467416961357741818735787226671938678424748431 Inexact Rounded -lnx1532 ln 0.00000000002014334901669366218018377213150715938355 -> -24.628146955635359035289123027319969201693737159108 Inexact Rounded -lnx1533 ln 0.00000008097927101101093117753938766241442896030637 -> -16.329072628469715178637178365710373398203190937454 Inexact Rounded -lnx1534 ln 0.00000000000017115834162632864392039668116243984176 -> -29.396187292434898225453626794459285157263177528034 Inexact Rounded -lnx1535 ln 0.39168317593866334087305459933723864294857086105035 -> -0.93730199062757240485836637306785037368746737693029 Inexact Rounded -lnx1536 ln 79.335036798971515026519630103325369729637514127617 -> 4.3736798570287828823772149735170431010616961976965 Inexact Rounded -lnx1537 ln 0.00000000000000056004952129926137413602116591493625 -> -35.118506463181870020730685884333000241039028127213 Inexact Rounded -lnx1538 ln 0.00000006006035907843890918832481099660639553666078 -> -16.627915795747112566532705974853114454405010472043 Inexact Rounded -lnx1539 ln 0.00000000085242024937414906371333826574632450587590 -> -20.882941460268101080186482230657774997273494107221 Inexact Rounded -lnx1540 ln 0.00000000000043671099499262350316173246550771951561 -> -28.459504757285639221776305968469058854558726593945 Inexact Rounded - --- P=34, within 0-999 -Precision: 34 -lnx1201 ln 0.0086732880815927182997566810334394 -> -4.747507311920844752486938187973721 Inexact Rounded -lnx1202 ln 0.0007104103693460260609792222569854 -> -7.249667769903503023005549250347695 Inexact Rounded -lnx1203 ln 786.8398945385105190697541493392742 -> 6.668024790031836340471824147010546 Inexact Rounded -lnx1204 ln 0.7723073620282687656895190171967399 -> -0.2583726708506850868786816238217326 Inexact Rounded -lnx1205 ln 0.0061057951517197631287183938412200 -> -5.098516933918797347064454103742635 Inexact Rounded -lnx1206 ln 0.6181379708184393730103917562498745 -> -0.4810435926903365087463387760350021 Inexact Rounded -lnx1207 ln 09.13888261229039989110753389096760 -> 2.212538125507975574509563027696021 Inexact Rounded -lnx1208 ln 802.0105417063143696497292158147174 -> 6.687121752052341737234832203350214 Inexact Rounded -lnx1209 ln 778.7749710387773713523028497333058 -> 6.657722135126935472086625031413031 Inexact Rounded -lnx1210 ln 0.0024457295895346502513567679390616 -> -6.013411799940245345321348290398517 Inexact Rounded -lnx1211 ln 0.0000511296947872828310338864217860 -> -9.881145118237281798081573131711636 Inexact Rounded -lnx1212 ln 0.0000246803508602554924938685155658 -> -10.60950314264825661825360971430218 Inexact Rounded -lnx1213 ln 9.027898199253511668242977766616082 -> 2.200319582778899029786017830557293 Inexact Rounded -lnx1214 ln 0.0991812396542505631850692800904188 -> -2.310806398964672258823043180400384 Inexact Rounded -lnx1215 ln 0.0000000000070238810143028811223924 -> -25.68170519961636647174714538290075 Inexact Rounded -lnx1216 ln 2.630101665342826494730394729313167 -> 0.9670225014664367465128243039749559 Inexact Rounded -lnx1217 ln 0.0056878928594359587691526063254683 -> -5.169415422904037819736637399445096 Inexact Rounded -lnx1218 ln 567.3436047121057843908106573095590 -> 6.340965124964258486463444360787970 Inexact Rounded -lnx1219 ln 1.199291248124655996614605745649725 -> 0.1817307557425911805765087755675657 Inexact Rounded -lnx1220 ln 25.02050448582031098696267479135557 -> 3.219695668137659139544178905459317 Inexact Rounded -lnx1221 ln 0.0000000000009939597023558756961300 -> -27.63707972996537636504396558259058 Inexact Rounded -lnx1222 ln 0.0000007988551670159429716506430403 -> -14.04008617542597230988198612376415 Inexact Rounded -lnx1223 ln 4.681515800176129184873770605589795 -> 1.543621946415383338972124445445748 Inexact Rounded -lnx1224 ln 15.95126669161103011206658749345781 -> 2.769538242479483539275986395443539 Inexact Rounded -lnx1225 ln 0.0301626783922211213675457279076066 -> -3.501149933677283341023932281826341 Inexact Rounded -lnx1226 ln 000.0040544064881821770528475185674 -> -5.507950967557021671647165889608324 Inexact Rounded -lnx1227 ln 29.01617095935593792095913785100360 -> 3.367853293862745651888450004473297 Inexact Rounded -lnx1228 ln 78.01836167344736733024804243195323 -> 4.356944205055768575987781375003992 Inexact Rounded -lnx1229 ln 0.0000000096545319316965321158634893 -> -18.45583840160965814462095477365013 Inexact Rounded -lnx1230 ln 97.95475237720579752770587185074428 -> 4.584505661612812742208619358214729 Inexact Rounded -lnx1231 ln 528.0609262050423246402564228432371 -> 6.269211667589138113396583894315956 Inexact Rounded -lnx1232 ln 0.0000002250064349732969696660452972 -> -15.30713683526963996712167701738724 Inexact Rounded -lnx1233 ln 47.97063637767998658567199049725754 -> 3.870589081585660692195989854842372 Inexact Rounded -lnx1234 ln 0.0005394311344541432318853513414361 -> -7.524995428393925934087126702974121 Inexact Rounded -lnx1235 ln 0.0000000090973385649567471674972633 -> -18.51528393158931783447035004125791 Inexact Rounded -lnx1236 ln 0.0000000000238776490227576197317977 -> -24.45807828188389561331158879207262 Inexact Rounded -lnx1237 ln 0.0000236587000231921532145326218758 -> -10.65177964499823314952429277979034 Inexact Rounded -lnx1238 ln 499.1277448846130709827154556125942 -> 6.212862064761427967461188083514774 Inexact Rounded -lnx1239 ln 0.0000003960192300284787663712417647 -> -14.74180306619298548093697608293284 Inexact Rounded -lnx1240 ln 41.08268350829477451667228892495136 -> 3.715586706887278039173584859218960 Inexact Rounded - --- P=16, within 0-99 -Precision: 16 -lnx1101 ln 7.964875261033948 -> 2.075041282352241 Inexact Rounded -lnx1102 ln 13.54527396845394 -> 2.606037701870263 Inexact Rounded -lnx1103 ln 0.0008026554341331 -> -7.127585034321814 Inexact Rounded -lnx1104 ln 0.0000030582233261 -> -12.69767642300625 Inexact Rounded -lnx1105 ln 0.0004477497509672 -> -7.711276073210766 Inexact Rounded -lnx1106 ln 7.616268622474371 -> 2.030286567675148 Inexact Rounded -lnx1107 ln 51.58329925806381 -> 3.943197962309569 Inexact Rounded -lnx1108 ln 0.0018197497951263 -> -6.309056262549345 Inexact Rounded -lnx1109 ln 2.956282457072984 -> 1.083932552334575 Inexact Rounded -lnx1110 ln 0.3843325579189906 -> -0.9562470649400558 Inexact Rounded -lnx1111 ln 0.0074466329265663 -> -4.899993304919237 Inexact Rounded -lnx1112 ln 0.0003372478532993 -> -7.994692428206378 Inexact Rounded -lnx1113 ln 0.0084792263167809 -> -4.770136069569271 Inexact Rounded -lnx1114 ln 5.926756998151102 -> 1.779477182834305 Inexact Rounded -lnx1115 ln 9.025699152180897 -> 2.200075969604119 Inexact Rounded -lnx1116 ln 1.910124643533526 -> 0.6471684983238183 Inexact Rounded -lnx1117 ln 0.8158922711411020 -> -0.2034729533939387 Inexact Rounded -lnx1118 ln 0.0067080016475322 -> -5.004454189414139 Inexact Rounded -lnx1119 ln 0.0047583242092716 -> -5.347859729601094 Inexact Rounded -lnx1120 ln 0.0386647411641339 -> -3.252827175263113 Inexact Rounded -lnx1121 ln 0.0050226427841761 -> -5.293799032774131 Inexact Rounded -lnx1122 ln 6.927937541637261 -> 1.935562155866906 Inexact Rounded -lnx1123 ln 0.0000095745343513 -> -11.55640365579814 Inexact Rounded -lnx1124 ln 1.602465492956538 -> 0.4715433763243936 Inexact Rounded -lnx1125 ln 38.98415625087535 -> 3.663155313610213 Inexact Rounded -lnx1126 ln 5.343182042276734 -> 1.675821363568112 Inexact Rounded -lnx1127 ln 55.89763703245816 -> 4.023522107934110 Inexact Rounded -lnx1128 ln 0.7445257810280847 -> -0.2950077988101030 Inexact Rounded -lnx1129 ln 1.631407314946094 -> 0.4894430257201248 Inexact Rounded -lnx1130 ln 0.0005462451932602 -> -7.512442611116852 Inexact Rounded -lnx1131 ln 0.0000864173269362 -> -9.356322359017317 Inexact Rounded -lnx1132 ln 5.227161719132849 -> 1.653868438439637 Inexact Rounded -lnx1133 ln 60.57078466941998 -> 4.103812675662452 Inexact Rounded -lnx1134 ln 0.0992864325333160 -> -2.309746348350318 Inexact Rounded -lnx1135 ln 09.48564268447325 -> 2.249779359074983 Inexact Rounded -lnx1136 ln 0.0036106089355634 -> -5.623878840650787 Inexact Rounded -lnx1137 ln 1.805176865587172 -> 0.5906585734593707 Inexact Rounded -lnx1138 ln 62.59363259642255 -> 4.136663557220559 Inexact Rounded -lnx1139 ln 4.373828261137201 -> 1.475638657912000 Inexact Rounded -lnx1140 ln 0.994483524148738 -> -0.005531747794938690 Inexact Rounded - --- P=7, within 0-9 -Precision: 7 -lnx1001 ln 0.0912025 -> -2.394673 Inexact Rounded -lnx1002 ln 0.9728626 -> -0.02751242 Inexact Rounded -lnx1003 ln 0.3886032 -> -0.9451965 Inexact Rounded -lnx1004 ln 8.798639 -> 2.174597 Inexact Rounded -lnx1005 ln 2.459121 -> 0.8998040 Inexact Rounded -lnx1006 ln 2.013193 -> 0.6997220 Inexact Rounded -lnx1007 ln 9.064857 -> 2.204405 Inexact Rounded -lnx1008 ln 5.796417 -> 1.757240 Inexact Rounded -lnx1009 ln 0.1143471 -> -2.168517 Inexact Rounded -lnx1010 ln 0.5341542 -> -0.6270707 Inexact Rounded -lnx1011 ln 6.693781 -> 1.901179 Inexact Rounded -lnx1012 ln 0.0081779 -> -4.806320 Inexact Rounded -lnx1013 ln 8.313616 -> 2.117895 Inexact Rounded -lnx1014 ln 3.486925 -> 1.249020 Inexact Rounded -lnx1015 ln 0.1801401 -> -1.714020 Inexact Rounded -lnx1016 ln 0.5227148 -> -0.6487193 Inexact Rounded -lnx1017 ln 7.818111 -> 2.056443 Inexact Rounded -lnx1018 ln 0.0870671 -> -2.441076 Inexact Rounded -lnx1019 ln 8.153966 -> 2.098504 Inexact Rounded -lnx1020 ln 2.040975 -> 0.7134276 Inexact Rounded -lnx1021 ln 1.481642 -> 0.3931509 Inexact Rounded -lnx1022 ln 0.2610123 -> -1.343188 Inexact Rounded -lnx1023 ln 0.466723 -> -0.7620193 Inexact Rounded -lnx1024 ln 0.0518756 -> -2.958907 Inexact Rounded -lnx1025 ln 2.056410 -> 0.7209617 Inexact Rounded -lnx1026 ln 0.181522 -> -1.706378 Inexact Rounded -lnx1027 ln 0.515551 -> -0.6625190 Inexact Rounded -lnx1028 ln 8.425089 -> 2.131214 Inexact Rounded -lnx1029 ln 2.077091 -> 0.7309684 Inexact Rounded -lnx1030 ln 6.212705 -> 1.826596 Inexact Rounded -lnx1031 ln 5.729343 -> 1.745601 Inexact Rounded -lnx1032 ln 4.831251 -> 1.575105 Inexact Rounded -lnx1033 ln 2.029760 -> 0.7079176 Inexact Rounded -lnx1034 ln 8.615060 -> 2.153512 Inexact Rounded -lnx1035 ln 0.0611511 -> -2.794407 Inexact Rounded -lnx1036 ln 5.195269 -> 1.647748 Inexact Rounded -lnx1037 ln 9.617686 -> 2.263604 Inexact Rounded -lnx1038 ln 0.0049382 -> -5.310754 Inexact Rounded -lnx1039 ln 2.786840 -> 1.024908 Inexact Rounded -lnx1040 ln 0.0091073 -> -4.698679 Inexact Rounded - --- from here 3-digit tests are based on reverse exp tests -precision: 9 -rounding: half_even -maxExponent: 384 -minexponent: -383 - -lnx001 ln 0 -> -Infinity -lnx002 ln 0.367879441 -> -1.00000000 Inexact Rounded -lnx003 ln 1 -> 0 -lnx005 ln 2.71828183 -> 1.00000000 Inexact Rounded -lnx006 ln 2.00000000 -> 0.693147181 Inexact Rounded -lnx007 ln +Infinity -> Infinity - --- tiny edge cases -precision: 7 -lnx011 ln 1.105171 -> 0.1000001 Inexact Rounded -lnx012 ln 1.010050 -> 0.009999835 Inexact Rounded -lnx013 ln 1.000010 -> 0.000009999950 Inexact Rounded -lnx014 ln 1.000001 -> 9.999995E-7 Inexact Rounded -lnx015 ln 1.000000 -> 0 - --- basic e=0, e=1, e=2, e=4, e>=8 cases -precision: 7 -lnx041 ln 2.718282 -> 1.000000 Inexact Rounded -lnx042 ln 0.3678794 -> -1.000000 Inexact Rounded -lnx043 ln 22026.47 -> 10.00000 Inexact Rounded -lnx044 ln 0.00004539993 -> -10.00000 Inexact Rounded -lnx045 ln 2.688117E+43 -> 100.0000 Inexact Rounded -lnx046 ln 3.720076E-44 -> -100.0000 Inexact Rounded -lnx047 ln Infinity -> Infinity -lnx048 ln 0E-389 -> -Infinity - --- miscellanea -precision: 16 -lnx055 ln 2.717658486884572E-236 -> -542.4103112874415 Inexact Rounded -precision: 17 -lnx056 ln 2.7176584868845721E-236 -> -542.41031128744146 Inexact Rounded -precision: 18 -lnx057 ln 2.71765848688457211E-236 -> -542.410311287441459 Inexact Rounded -precision: 19 -lnx058 ln 2.717658486884572112E-236 -> -542.4103112874414592 Inexact Rounded -precision: 20 -lnx059 ln 2.7176584868845721118E-236 -> -542.41031128744145917 Inexact Rounded - --- inputs ending in ..500.., ..499.., ..100.., ..999.. sequences -precision: 50 -lnx102 ln 0.9999999100000040499998785000027 -> -9.0000000000000000000000033749953829996446124861750E-8 Inexact Rounded -precision: 30 -lnx103 ln 0.999999910000004049999878500003 -> -8.99999999999999999999997337499E-8 Inexact Rounded -precision: 29 -lnx104 ln 0.99999991000000404999987850000 -> -9.0000000000000000000002733750E-8 Inexact Rounded -precision: 28 -lnx105 ln 0.9999999100000040499998785000 -> -9.000000000000000000000273375E-8 Inexact Rounded -precision: 27 -lnx106 ln 0.999999910000004049999878500 -> -9.00000000000000000000027338E-8 Inexact Rounded -precision: 26 -lnx107 ln 0.99999991000000404999987850 -> -9.0000000000000000000002734E-8 Inexact Rounded -precision: 25 -lnx108 ln 0.9999999100000040499998785 -> -9.000000000000000000000273E-8 Inexact Rounded -precision: 24 -lnx109 ln 0.999999910000004049999879 -> -8.99999999999999995000027E-8 Inexact Rounded -precision: 23 -lnx110 ln 0.99999991000000404999988 -> -8.9999999999999998500003E-8 Inexact Rounded -precision: 22 -lnx111 ln 0.9999999100000040499999 -> -8.999999999999997850000E-8 Inexact Rounded -precision: 21 -lnx112 ln 0.999999910000004050000 -> -8.99999999999998785000E-8 Inexact Rounded -precision: 20 -lnx113 ln 0.99999991000000405000 -> -8.9999999999999878500E-8 Inexact Rounded -precision: 19 -lnx114 ln 0.9999999100000040500 -> -8.999999999999987850E-8 Inexact Rounded -precision: 18 -lnx115 ln 0.999999910000004050 -> -8.99999999999998785E-8 Inexact Rounded --- next may be a > 0.5ulp case; a more precise answer is: --- -8.99999999999998784999918E-8 -precision: 17 -lnx116 ln 0.99999991000000405 -> -8.9999999999999878E-8 Inexact Rounded -precision: 16 -lnx117 ln 0.9999999100000040 -> -9.000000004999988E-8 Inexact Rounded -precision: 15 -lnx118 ln 0.999999910000004 -> -9.00000000499999E-8 Inexact Rounded -precision: 14 -lnx119 ln 0.99999991000000 -> -9.0000004050000E-8 Inexact Rounded -precision: 13 -lnx120 ln 0.9999999100000 -> -9.000000405000E-8 Inexact Rounded -precision: 12 -lnx121 ln 0.999999910000 -> -9.00000040500E-8 Inexact Rounded -precision: 11 -lnx122 ln 0.99999991000 -> -9.0000004050E-8 Inexact Rounded -precision: 10 -lnx123 ln 0.9999999100 -> -9.000000405E-8 Inexact Rounded -precision: 9 -lnx124 ln 0.999999910 -> -9.00000041E-8 Inexact Rounded -precision: 8 -lnx125 ln 0.99999991 -> -9.0000004E-8 Inexact Rounded -precision: 7 -lnx126 ln 0.9999999 -> -1.000000E-7 Inexact Rounded -precision: 16 -lnx126b ln 0.9999999 -> -1.000000050000003E-7 Inexact Rounded -precision: 6 -lnx127 ln 0.999999 -> -0.00000100000 Inexact Rounded -precision: 5 -lnx128 ln 0.99999 -> -0.000010000 Inexact Rounded -precision: 4 -lnx129 ln 0.9999 -> -0.0001000 Inexact Rounded -precision: 3 -lnx130 ln 0.999 -> -0.00100 Inexact Rounded -precision: 2 -lnx131 ln 0.99 -> -0.010 Inexact Rounded -precision: 1 -lnx132 ln 0.9 -> -0.1 Inexact Rounded - - --- cases near 1 -- 1 2345678901234567890 -precision: 20 -lnx401 ln 2.7182818284589365041 -> 0.99999999999996000000 Inexact Rounded -lnx402 ln 2.7182818284589636869 -> 0.99999999999997000000 Inexact Rounded -lnx403 ln 2.7182818284589908697 -> 0.99999999999997999999 Inexact Rounded -lnx404 ln 2.7182818284590180525 -> 0.99999999999998999998 Inexact Rounded -lnx405 ln 2.7182818284590452354 -> 1.0000000000000000000 Inexact Rounded -lnx406 ln 2.7182818284593170635 -> 1.0000000000001000000 Inexact Rounded -lnx407 ln 2.7182818284595888917 -> 1.0000000000002000000 Inexact Rounded -precision: 14 -lnx411 ln 2.7182818284589 -> 0.99999999999995 Inexact Rounded -lnx413 ln 2.7182818284590 -> 0.99999999999998 Inexact Rounded -lnx416 ln 2.7182818284591 -> 1.0000000000000 Inexact Rounded -lnx417 ln 2.7182818284592 -> 1.0000000000001 Inexact Rounded - --- overflows, including some exp overprecise borderlines -precision: 7 -maxExponent: 384 -minExponent: -383 -lnx709 ln 9.999999E+384 -> 886.4953 Inexact Rounded -lnx711 ln 9.999992E+384 -> 886.4953 Inexact Rounded -precision: 16 -lnx722 ln 9.999999999999999E+384 -> 886.4952608027076 Inexact Rounded -lnx724 ln 9.999999999999917E+384 -> 886.4952608027076 Inexact Rounded -lnx726 ln 9.999999999999117E+384 -> 886.4952608027075 Inexact Rounded --- and more... -precision: 15 -maxExponent: 999 -minExponent: -999 -lnx731 ln 9.99999999999999E+999 -> 2302.58509299405 Inexact Rounded --- next may be a > 0.5ulp case; a more precise answer is: --- 2302.58509299404495001799145442 -lnx732 ln 9.99999999999266E+999 -> 2302.58509299404 Inexact Rounded -lnx733 ln 9.99999999999265E+999 -> 2302.58509299404 Inexact Rounded -lnx734 ln 9.99999999999264E+999 -> 2302.58509299404 Inexact Rounded - --- subnormals and underflows for exp, including underflow-to-zero edge point -precision: 7 -maxExponent: 384 -minExponent: -383 -lnx751 ln 0E-389 -> -Infinity -lnx758 ln 1.000001E-383 -> -881.8901 Inexact Rounded -lnx759 ln 9.99991E-384 -> -881.8901 Inexact Rounded -lnx760 ln 4.4605E-385 -> -885.0000 Inexact Rounded -lnx761 ln 2.221E-386 -> -887.9999 Inexact Rounded -lnx762 ln 3.01E-387 -> -889.9985 Inexact Rounded -lnx763 ln 1.7E-388 -> -892.8724 Inexact Rounded -lnx764 ln 1.5E-388 -> -892.9976 Inexact Rounded -lnx765 ln 9E-389 -> -893.5084 Inexact Rounded -lnx766 ln 1E-389 -> -895.7056 Inexact Rounded -lnx774 ln 0E-389 -> -Infinity - --- special values -lnx820 ln Infinity -> Infinity -lnx821 ln 0 -> -Infinity -lnx822 ln NaN -> NaN -lnx823 ln sNaN -> NaN Invalid_operation --- propagating NaNs -lnx824 ln sNaN123 -> NaN123 Invalid_operation -lnx825 ln -sNaN321 -> -NaN321 Invalid_operation -lnx826 ln NaN456 -> NaN456 -lnx827 ln -NaN654 -> -NaN654 -lnx828 ln NaN1 -> NaN1 - --- Invalid operations due to restrictions --- [next two probably skipped by most test harnesses] -precision: 100000000 -lnx901 ln 1 -> NaN Invalid_context -precision: 99999999 -lnx902 ln 0 -> NaN Invalid_context - -precision: 9 -maxExponent: 1000000 -minExponent: -999999 -lnx903 ln 1 -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999999 -lnx904 ln 0 -> -Infinity -maxExponent: 999999 -minExponent: -1000000 -lnx905 ln 1 -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999998 -lnx906 ln 0 -> -Infinity - --- payload decapitate -precision: 5 -lnx910 ln -sNaN1234567890 -> -NaN67890 Invalid_operation - --- Null test -lnx900 ln # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- ln.decTest -- decimal natural logarithm -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 16 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- basics (examples in specification) +precision: 9 +lnxs001 ln 0 -> -Infinity +lnxs002 ln 1.000 -> 0 +lnxs003 ln 2.71828183 -> 1.00000000 Inexact Rounded +lnxs004 ln 10 -> 2.30258509 Inexact Rounded +lnxs005 ln +Infinity -> Infinity + + +-- basics +precision: 16 +lnx0001 ln 0 -> -Infinity +lnx0002 ln 1E-9 -> -20.72326583694641 Inexact Rounded +lnx0003 ln 0.0007 -> -7.264430222920869 Inexact Rounded +lnx0004 ln 0.1 -> -2.302585092994046 Inexact Rounded +lnx0005 ln 0.7 -> -0.3566749439387324 Inexact Rounded +lnx0006 ln 1 -> 0 +lnx0007 ln 1.000 -> 0 +lnx0008 ln 1.5 -> 0.4054651081081644 Inexact Rounded +lnx0009 ln 2 -> 0.6931471805599453 Inexact Rounded +lnx0010 ln 2.718281828459045 -> 0.9999999999999999 Inexact Rounded +lnx0011 ln 2.718281828459046 -> 1.000000000000000 Inexact Rounded +lnx0012 ln 2.718281828459047 -> 1.000000000000001 Inexact Rounded +lnx0013 ln 10 -> 2.302585092994046 Inexact Rounded +lnx0014 ln 10.5 -> 2.351375257163478 Inexact Rounded +lnx0015 ln 9999 -> 9.210240366975849 Inexact Rounded +lnx0016 ln 1E6 -> 13.81551055796427 Inexact Rounded +lnx0017 ln 1E+9 -> 20.72326583694641 Inexact Rounded +lnx0018 ln +Infinity -> Infinity + +-- notable cases +-- negatives +lnx0021 ln -1E-9 -> NaN Invalid_operation +lnx0022 ln -0.0007 -> NaN Invalid_operation +lnx0023 ln -0.1 -> NaN Invalid_operation +lnx0024 ln -0.7 -> NaN Invalid_operation +lnx0025 ln -1 -> NaN Invalid_operation +lnx0026 ln -1.5 -> NaN Invalid_operation +lnx0027 ln -2 -> NaN Invalid_operation +lnx0029 ln -10.5 -> NaN Invalid_operation +lnx0028 ln -9999 -> NaN Invalid_operation +lnx0030 ln -2.718281828459045 -> NaN Invalid_operation +lnx0031 ln -2.718281828459046 -> NaN Invalid_operation +lnx0032 ln -0 -> -Infinity +lnx0033 ln -0E+17 -> -Infinity +lnx0034 ln -0E-17 -> -Infinity +-- other zeros +lnx0041 ln 0 -> -Infinity +lnx0042 ln 0E+17 -> -Infinity +lnx0043 ln 0E-17 -> -Infinity +-- infinities +lnx0045 ln -Infinity -> NaN Invalid_operation +lnx0046 ln +Infinity -> Infinity +-- ones +lnx0050 ln 1 -> 0 +lnx0051 ln 1.0 -> 0 +lnx0052 ln 1.000000000000000 -> 0 +lnx0053 ln 1.000000000000000000 -> 0 + +-- lower precision basics +Precision: 7 +lnx0101 ln 0 -> -Infinity +lnx0102 ln 1E-9 -> -20.72327 Inexact Rounded +lnx0103 ln 0.0007 -> -7.264430 Inexact Rounded +lnx0104 ln 0.1 -> -2.302585 Inexact Rounded +lnx0105 ln 0.7 -> -0.3566749 Inexact Rounded +lnx0106 ln 1 -> 0 +lnx0107 ln 1.5 -> 0.4054651 Inexact Rounded +lnx0108 ln 2 -> 0.6931472 Inexact Rounded +lnx0109 ln 2.718281828459045 -> 1.000000 Inexact Rounded +lnx0110 ln 2.718281828459046 -> 1.000000 Inexact Rounded +lnx0111 ln 2.718281828459047 -> 1.000000 Inexact Rounded +lnx0112 ln 10 -> 2.302585 Inexact Rounded +lnx0113 ln 10.5 -> 2.351375 Inexact Rounded +lnx0114 ln 9999 -> 9.210240 Inexact Rounded +lnx0115 ln 1E6 -> 13.81551 Inexact Rounded +lnx0116 ln 1E+9 -> 20.72327 Inexact Rounded +lnx0117 ln +Infinity -> Infinity +Precision: 2 +lnx0121 ln 0 -> -Infinity +lnx0122 ln 1E-9 -> -21 Inexact Rounded +lnx0123 ln 0.0007 -> -7.3 Inexact Rounded +lnx0124 ln 0.1 -> -2.3 Inexact Rounded +lnx0125 ln 0.7 -> -0.36 Inexact Rounded +lnx0126 ln 1 -> 0 +lnx0127 ln 1.5 -> 0.41 Inexact Rounded +lnx0128 ln 2 -> 0.69 Inexact Rounded +lnx0129 ln 2.718281828459045 -> 1.0 Inexact Rounded +lnx0130 ln 2.718281828459046 -> 1.0 Inexact Rounded +lnx0131 ln 2.718281828459047 -> 1.0 Inexact Rounded +lnx0132 ln 10 -> 2.3 Inexact Rounded +lnx0133 ln 10.5 -> 2.4 Inexact Rounded +lnx0134 ln 9999 -> 9.2 Inexact Rounded +lnx0135 ln 1E6 -> 14 Inexact Rounded +lnx0136 ln 1E+9 -> 21 Inexact Rounded +lnx0137 ln +Infinity -> Infinity +Precision: 1 +lnx0141 ln 0 -> -Infinity +lnx0142 ln 1E-9 -> -2E+1 Inexact Rounded +lnx0143 ln 0.0007 -> -7 Inexact Rounded +lnx0144 ln 0.1 -> -2 Inexact Rounded +lnx0145 ln 0.7 -> -0.4 Inexact Rounded +lnx0146 ln 1 -> 0 +lnx0147 ln 1.5 -> 0.4 Inexact Rounded +lnx0148 ln 2 -> 0.7 Inexact Rounded +lnx0149 ln 2.718281828459045 -> 1 Inexact Rounded +lnx0150 ln 2.718281828459046 -> 1 Inexact Rounded +lnx0151 ln 2.718281828459047 -> 1 Inexact Rounded +lnx0152 ln 10 -> 2 Inexact Rounded +lnx0153 ln 10.5 -> 2 Inexact Rounded +lnx0154 ln 9999 -> 9 Inexact Rounded +lnx0155 ln 1E6 -> 1E+1 Inexact Rounded +lnx0156 ln 1E+9 -> 2E+1 Inexact Rounded +lnx0157 ln +Infinity -> Infinity + +-- group low-precision ln(1)s: +precision: 1 +lnx0161 ln 1 -> 0 +precision: 2 +lnx0162 ln 1 -> 0 +precision: 3 +lnx0163 ln 1 -> 0 +precision: 4 +lnx0164 ln 1 -> 0 +precision: 5 +lnx0165 ln 1 -> 0 +precision: 6 +lnx0166 ln 1 -> 0 +precision: 7 +lnx0167 ln 1 -> 0 +precision: 8 +lnx0168 ln 1 -> 0 + +-- edge-test ln(2) and ln(10) in case of lookasides +precision: 45 +lnx201 ln 2 -> 0.693147180559945309417232121458176568075500134 Inexact Rounded +lnx202 ln 10 -> 2.30258509299404568401799145468436420760110149 Inexact Rounded +precision: 44 +lnx203 ln 2 -> 0.69314718055994530941723212145817656807550013 Inexact Rounded +lnx204 ln 10 -> 2.3025850929940456840179914546843642076011015 Inexact Rounded +precision: 43 +lnx205 ln 2 -> 0.6931471805599453094172321214581765680755001 Inexact Rounded +lnx206 ln 10 -> 2.302585092994045684017991454684364207601101 Inexact Rounded +precision: 42 +lnx207 ln 2 -> 0.693147180559945309417232121458176568075500 Inexact Rounded +lnx208 ln 10 -> 2.30258509299404568401799145468436420760110 Inexact Rounded +precision: 41 +lnx209 ln 2 -> 0.69314718055994530941723212145817656807550 Inexact Rounded +lnx210 ln 10 -> 2.3025850929940456840179914546843642076011 Inexact Rounded +precision: 40 +lnx211 ln 2 -> 0.6931471805599453094172321214581765680755 Inexact Rounded +lnx212 ln 10 -> 2.302585092994045684017991454684364207601 Inexact Rounded +precision: 39 +lnx213 ln 2 -> 0.693147180559945309417232121458176568076 Inexact Rounded +lnx214 ln 10 -> 2.30258509299404568401799145468436420760 Inexact Rounded +precision: 38 +lnx215 ln 2 -> 0.69314718055994530941723212145817656808 Inexact Rounded +lnx216 ln 10 -> 2.3025850929940456840179914546843642076 Inexact Rounded +precision: 37 +lnx217 ln 2 -> 0.6931471805599453094172321214581765681 Inexact Rounded +lnx218 ln 10 -> 2.302585092994045684017991454684364208 Inexact Rounded +precision: 36 +lnx219 ln 2 -> 0.693147180559945309417232121458176568 Inexact Rounded +lnx220 ln 10 -> 2.30258509299404568401799145468436421 Inexact Rounded +precision: 35 +lnx221 ln 2 -> 0.69314718055994530941723212145817657 Inexact Rounded +lnx222 ln 10 -> 2.3025850929940456840179914546843642 Inexact Rounded +precision: 34 +lnx223 ln 2 -> 0.6931471805599453094172321214581766 Inexact Rounded +lnx224 ln 10 -> 2.302585092994045684017991454684364 Inexact Rounded +precision: 33 +lnx225 ln 2 -> 0.693147180559945309417232121458177 Inexact Rounded +lnx226 ln 10 -> 2.30258509299404568401799145468436 Inexact Rounded +precision: 32 +lnx227 ln 2 -> 0.69314718055994530941723212145818 Inexact Rounded +lnx228 ln 10 -> 2.3025850929940456840179914546844 Inexact Rounded +precision: 31 +lnx229 ln 2 -> 0.6931471805599453094172321214582 Inexact Rounded +lnx230 ln 10 -> 2.302585092994045684017991454684 Inexact Rounded +precision: 30 +lnx231 ln 2 -> 0.693147180559945309417232121458 Inexact Rounded +lnx232 ln 10 -> 2.30258509299404568401799145468 Inexact Rounded + +-- extreme input range values +maxExponent: 384 +minExponent: -383 +Precision: 16 + +lnx0901 ln 1e-400 -> -921.0340371976183 Inexact Rounded +lnx0902 ln 1e+400 -> 921.0340371976183 Inexact Rounded +lnx0903 ln 1e-999999 -> -2302582.790408953 Inexact Rounded +lnx0904 ln 1e+999999 -> 2302582.790408953 Inexact Rounded +lnx0905 ln 1e-1000013 -> -2302615.026600255 Inexact Rounded +lnx0906 ln 2e-1000013 -> -2302614.333453074 Inexact Rounded + +lnx0910 ln 9.999999e+999999 -> 2302585.092993946 Inexact Rounded +lnx0911 ln 9.9999999e+999999 -> 2302585.092994036 Inexact Rounded +lnx0912 ln 9.99999999e+999999 -> 2302585.092994045 Inexact Rounded +lnx0913 ln 9.999999999e+999999 -> 2302585.092994046 Inexact Rounded +lnx0914 ln 9.999999999999e+999999 -> 2302585.092994046 Inexact Rounded +lnx0915 ln 9.999999999999999e+999999 -> 2302585.092994046 Inexact Rounded +lnx0916 ln 9.999999999999999999999999e+999999 -> 2302585.092994046 Inexact Rounded + +-- randoms +-- P=50, within 0-999 +Precision: 50 +maxExponent: 384 +minExponent: -383 +lnx1501 ln 0.00098800906574486388604608477869812518857023768951 -> -6.9198186844033787995945147836955586009548513043689 Inexact Rounded +lnx1502 ln 158.15866624664623070184595045304145949900714987827 -> 5.0635987458895647454907806507503825602758392287684 Inexact Rounded +lnx1503 ln 0.00565661412059571925040285814021799775249288309321 -> -5.1749297776760632102047540300491550931651318975237 Inexact Rounded +lnx1504 ln 0.00000006914232532620489602008402091666547903180607 -> -16.487098770877825308138976818688771638172333034347 Inexact Rounded +lnx1505 ln 0.00025380374621297657504661540749355251231770070723 -> -8.2789492423005003205242162741569033124260321954589 Inexact Rounded +lnx1506 ln 83.033654063877426261108592599182418953442677554806 -> 4.4192459962647137976949249810815698465031609843669 Inexact Rounded +lnx1507 ln 0.00000000416863228092481651627734668440663678118729 -> -19.295677845122141772791294599714950175284915666430 Inexact Rounded +lnx1508 ln 0.00000140847873187820570181214271960511080523457669 -> -13.473000349581967189668305314384952251556809480339 Inexact Rounded +lnx1509 ln 66.176106555181527101630351127583944689752069132522 -> 4.1923194696232505883666171116966137694013431504252 Inexact Rounded +lnx1510 ln 0.00000000000009899043487403590900111602024562297908 -> -29.943753166877840985821508112917991506656545174163 Inexact Rounded +lnx1511 ln 0.00000000000324618296721747097510453388683912733569 -> -26.453541281444586819009546418577507163362590139422 Inexact Rounded +lnx1512 ln 72.646968818463546449499147579023555008392860423385 -> 4.2856116660689646882852128853423566276718230426479 Inexact Rounded +lnx1513 ln 0.00000000000000066755483124635612574263153825990523 -> -34.942910142802769319262875080398852491588707172483 Inexact Rounded +lnx1514 ln 61.002910447202398204114909451851111424657671911002 -> 4.1109215752843377323363182051446177066434038096529 Inexact Rounded +lnx1515 ln 917.06917611331980999227893584010544542312239174774 -> 6.8211829068303114128752453661946446979787826282907 Inexact Rounded +lnx1516 ln 0.00000000170823794883673083358549749078972003965194 -> -20.187803436976150477297246666771626827057191023004 Inexact Rounded +lnx1517 ln 0.53731767845358224445809761315159249898566542910649 -> -0.62116577939968409211736413628236285160048357000961 Inexact Rounded +lnx1518 ln 0.00000000000000008965291392882804161299758708033373 -> -36.950585970980857376081265073276303670820056916206 Inexact Rounded +lnx1519 ln 0.00000000006990244916026429904498278982530170295668 -> -23.383920429244457578373523508427783144589480420753 Inexact Rounded +lnx1520 ln 4.0312542977070300070506064666536478373801988540614 -> 1.3940775676592451945795752796421391871302024763305 Inexact Rounded +lnx1521 ln 271.84991311551875601432518819562391699324632396423 -> 5.6052501239873862517916679747146539808077431873478 Inexact Rounded +lnx1522 ln 7.4118671629373864667229445746862314443895404818689 -> 2.0030823863706344628239147639318289961917060121141 Inexact Rounded +lnx1523 ln 0.00000000000002026311452625364905357321664186034258 -> -31.529974180054438792043856877314043794320951134754 Inexact Rounded +lnx1524 ln 0.00000000000009563398651261756952398250624737809347 -> -29.978248130576972953141284136962670021368834792579 Inexact Rounded +lnx1525 ln 0.00000000009556772669409858653026558223465197808991 -> -23.071185939748285541228206161472956661196956741186 Inexact Rounded +lnx1526 ln 6.8441648298027301292342057248737326152250794026761 -> 1.9233964395801946597272589473417948024361005082908 Inexact Rounded +lnx1527 ln 0.00000000000073059699884439979394945822035704264577 -> -27.944914388353724718836101828677771967128509603158 Inexact Rounded +lnx1528 ln 0.00000000000000002610078280419082263138064745416787 -> -38.184566367516207885573773320135965798717120735115 Inexact Rounded +lnx1529 ln 0.00000000000000000150259517166294243088546806083283 -> -41.039337946266676108538170837580051699618334928421 Inexact Rounded +lnx1530 ln 0.00000000000000087919160541714580707181969708502091 -> -34.667528818827671507514319744047440696187358676848 Inexact Rounded +lnx1531 ln 0.00000000000395726725120787763271849577708068584598 -> -26.255467416961357741818735787226671938678424748431 Inexact Rounded +lnx1532 ln 0.00000000002014334901669366218018377213150715938355 -> -24.628146955635359035289123027319969201693737159108 Inexact Rounded +lnx1533 ln 0.00000008097927101101093117753938766241442896030637 -> -16.329072628469715178637178365710373398203190937454 Inexact Rounded +lnx1534 ln 0.00000000000017115834162632864392039668116243984176 -> -29.396187292434898225453626794459285157263177528034 Inexact Rounded +lnx1535 ln 0.39168317593866334087305459933723864294857086105035 -> -0.93730199062757240485836637306785037368746737693029 Inexact Rounded +lnx1536 ln 79.335036798971515026519630103325369729637514127617 -> 4.3736798570287828823772149735170431010616961976965 Inexact Rounded +lnx1537 ln 0.00000000000000056004952129926137413602116591493625 -> -35.118506463181870020730685884333000241039028127213 Inexact Rounded +lnx1538 ln 0.00000006006035907843890918832481099660639553666078 -> -16.627915795747112566532705974853114454405010472043 Inexact Rounded +lnx1539 ln 0.00000000085242024937414906371333826574632450587590 -> -20.882941460268101080186482230657774997273494107221 Inexact Rounded +lnx1540 ln 0.00000000000043671099499262350316173246550771951561 -> -28.459504757285639221776305968469058854558726593945 Inexact Rounded + +-- P=34, within 0-999 +Precision: 34 +lnx1201 ln 0.0086732880815927182997566810334394 -> -4.747507311920844752486938187973721 Inexact Rounded +lnx1202 ln 0.0007104103693460260609792222569854 -> -7.249667769903503023005549250347695 Inexact Rounded +lnx1203 ln 786.8398945385105190697541493392742 -> 6.668024790031836340471824147010546 Inexact Rounded +lnx1204 ln 0.7723073620282687656895190171967399 -> -0.2583726708506850868786816238217326 Inexact Rounded +lnx1205 ln 0.0061057951517197631287183938412200 -> -5.098516933918797347064454103742635 Inexact Rounded +lnx1206 ln 0.6181379708184393730103917562498745 -> -0.4810435926903365087463387760350021 Inexact Rounded +lnx1207 ln 09.13888261229039989110753389096760 -> 2.212538125507975574509563027696021 Inexact Rounded +lnx1208 ln 802.0105417063143696497292158147174 -> 6.687121752052341737234832203350214 Inexact Rounded +lnx1209 ln 778.7749710387773713523028497333058 -> 6.657722135126935472086625031413031 Inexact Rounded +lnx1210 ln 0.0024457295895346502513567679390616 -> -6.013411799940245345321348290398517 Inexact Rounded +lnx1211 ln 0.0000511296947872828310338864217860 -> -9.881145118237281798081573131711636 Inexact Rounded +lnx1212 ln 0.0000246803508602554924938685155658 -> -10.60950314264825661825360971430218 Inexact Rounded +lnx1213 ln 9.027898199253511668242977766616082 -> 2.200319582778899029786017830557293 Inexact Rounded +lnx1214 ln 0.0991812396542505631850692800904188 -> -2.310806398964672258823043180400384 Inexact Rounded +lnx1215 ln 0.0000000000070238810143028811223924 -> -25.68170519961636647174714538290075 Inexact Rounded +lnx1216 ln 2.630101665342826494730394729313167 -> 0.9670225014664367465128243039749559 Inexact Rounded +lnx1217 ln 0.0056878928594359587691526063254683 -> -5.169415422904037819736637399445096 Inexact Rounded +lnx1218 ln 567.3436047121057843908106573095590 -> 6.340965124964258486463444360787970 Inexact Rounded +lnx1219 ln 1.199291248124655996614605745649725 -> 0.1817307557425911805765087755675657 Inexact Rounded +lnx1220 ln 25.02050448582031098696267479135557 -> 3.219695668137659139544178905459317 Inexact Rounded +lnx1221 ln 0.0000000000009939597023558756961300 -> -27.63707972996537636504396558259058 Inexact Rounded +lnx1222 ln 0.0000007988551670159429716506430403 -> -14.04008617542597230988198612376415 Inexact Rounded +lnx1223 ln 4.681515800176129184873770605589795 -> 1.543621946415383338972124445445748 Inexact Rounded +lnx1224 ln 15.95126669161103011206658749345781 -> 2.769538242479483539275986395443539 Inexact Rounded +lnx1225 ln 0.0301626783922211213675457279076066 -> -3.501149933677283341023932281826341 Inexact Rounded +lnx1226 ln 000.0040544064881821770528475185674 -> -5.507950967557021671647165889608324 Inexact Rounded +lnx1227 ln 29.01617095935593792095913785100360 -> 3.367853293862745651888450004473297 Inexact Rounded +lnx1228 ln 78.01836167344736733024804243195323 -> 4.356944205055768575987781375003992 Inexact Rounded +lnx1229 ln 0.0000000096545319316965321158634893 -> -18.45583840160965814462095477365013 Inexact Rounded +lnx1230 ln 97.95475237720579752770587185074428 -> 4.584505661612812742208619358214729 Inexact Rounded +lnx1231 ln 528.0609262050423246402564228432371 -> 6.269211667589138113396583894315956 Inexact Rounded +lnx1232 ln 0.0000002250064349732969696660452972 -> -15.30713683526963996712167701738724 Inexact Rounded +lnx1233 ln 47.97063637767998658567199049725754 -> 3.870589081585660692195989854842372 Inexact Rounded +lnx1234 ln 0.0005394311344541432318853513414361 -> -7.524995428393925934087126702974121 Inexact Rounded +lnx1235 ln 0.0000000090973385649567471674972633 -> -18.51528393158931783447035004125791 Inexact Rounded +lnx1236 ln 0.0000000000238776490227576197317977 -> -24.45807828188389561331158879207262 Inexact Rounded +lnx1237 ln 0.0000236587000231921532145326218758 -> -10.65177964499823314952429277979034 Inexact Rounded +lnx1238 ln 499.1277448846130709827154556125942 -> 6.212862064761427967461188083514774 Inexact Rounded +lnx1239 ln 0.0000003960192300284787663712417647 -> -14.74180306619298548093697608293284 Inexact Rounded +lnx1240 ln 41.08268350829477451667228892495136 -> 3.715586706887278039173584859218960 Inexact Rounded + +-- P=16, within 0-99 +Precision: 16 +lnx1101 ln 7.964875261033948 -> 2.075041282352241 Inexact Rounded +lnx1102 ln 13.54527396845394 -> 2.606037701870263 Inexact Rounded +lnx1103 ln 0.0008026554341331 -> -7.127585034321814 Inexact Rounded +lnx1104 ln 0.0000030582233261 -> -12.69767642300625 Inexact Rounded +lnx1105 ln 0.0004477497509672 -> -7.711276073210766 Inexact Rounded +lnx1106 ln 7.616268622474371 -> 2.030286567675148 Inexact Rounded +lnx1107 ln 51.58329925806381 -> 3.943197962309569 Inexact Rounded +lnx1108 ln 0.0018197497951263 -> -6.309056262549345 Inexact Rounded +lnx1109 ln 2.956282457072984 -> 1.083932552334575 Inexact Rounded +lnx1110 ln 0.3843325579189906 -> -0.9562470649400558 Inexact Rounded +lnx1111 ln 0.0074466329265663 -> -4.899993304919237 Inexact Rounded +lnx1112 ln 0.0003372478532993 -> -7.994692428206378 Inexact Rounded +lnx1113 ln 0.0084792263167809 -> -4.770136069569271 Inexact Rounded +lnx1114 ln 5.926756998151102 -> 1.779477182834305 Inexact Rounded +lnx1115 ln 9.025699152180897 -> 2.200075969604119 Inexact Rounded +lnx1116 ln 1.910124643533526 -> 0.6471684983238183 Inexact Rounded +lnx1117 ln 0.8158922711411020 -> -0.2034729533939387 Inexact Rounded +lnx1118 ln 0.0067080016475322 -> -5.004454189414139 Inexact Rounded +lnx1119 ln 0.0047583242092716 -> -5.347859729601094 Inexact Rounded +lnx1120 ln 0.0386647411641339 -> -3.252827175263113 Inexact Rounded +lnx1121 ln 0.0050226427841761 -> -5.293799032774131 Inexact Rounded +lnx1122 ln 6.927937541637261 -> 1.935562155866906 Inexact Rounded +lnx1123 ln 0.0000095745343513 -> -11.55640365579814 Inexact Rounded +lnx1124 ln 1.602465492956538 -> 0.4715433763243936 Inexact Rounded +lnx1125 ln 38.98415625087535 -> 3.663155313610213 Inexact Rounded +lnx1126 ln 5.343182042276734 -> 1.675821363568112 Inexact Rounded +lnx1127 ln 55.89763703245816 -> 4.023522107934110 Inexact Rounded +lnx1128 ln 0.7445257810280847 -> -0.2950077988101030 Inexact Rounded +lnx1129 ln 1.631407314946094 -> 0.4894430257201248 Inexact Rounded +lnx1130 ln 0.0005462451932602 -> -7.512442611116852 Inexact Rounded +lnx1131 ln 0.0000864173269362 -> -9.356322359017317 Inexact Rounded +lnx1132 ln 5.227161719132849 -> 1.653868438439637 Inexact Rounded +lnx1133 ln 60.57078466941998 -> 4.103812675662452 Inexact Rounded +lnx1134 ln 0.0992864325333160 -> -2.309746348350318 Inexact Rounded +lnx1135 ln 09.48564268447325 -> 2.249779359074983 Inexact Rounded +lnx1136 ln 0.0036106089355634 -> -5.623878840650787 Inexact Rounded +lnx1137 ln 1.805176865587172 -> 0.5906585734593707 Inexact Rounded +lnx1138 ln 62.59363259642255 -> 4.136663557220559 Inexact Rounded +lnx1139 ln 4.373828261137201 -> 1.475638657912000 Inexact Rounded +lnx1140 ln 0.994483524148738 -> -0.005531747794938690 Inexact Rounded + +-- P=7, within 0-9 +Precision: 7 +lnx1001 ln 0.0912025 -> -2.394673 Inexact Rounded +lnx1002 ln 0.9728626 -> -0.02751242 Inexact Rounded +lnx1003 ln 0.3886032 -> -0.9451965 Inexact Rounded +lnx1004 ln 8.798639 -> 2.174597 Inexact Rounded +lnx1005 ln 2.459121 -> 0.8998040 Inexact Rounded +lnx1006 ln 2.013193 -> 0.6997220 Inexact Rounded +lnx1007 ln 9.064857 -> 2.204405 Inexact Rounded +lnx1008 ln 5.796417 -> 1.757240 Inexact Rounded +lnx1009 ln 0.1143471 -> -2.168517 Inexact Rounded +lnx1010 ln 0.5341542 -> -0.6270707 Inexact Rounded +lnx1011 ln 6.693781 -> 1.901179 Inexact Rounded +lnx1012 ln 0.0081779 -> -4.806320 Inexact Rounded +lnx1013 ln 8.313616 -> 2.117895 Inexact Rounded +lnx1014 ln 3.486925 -> 1.249020 Inexact Rounded +lnx1015 ln 0.1801401 -> -1.714020 Inexact Rounded +lnx1016 ln 0.5227148 -> -0.6487193 Inexact Rounded +lnx1017 ln 7.818111 -> 2.056443 Inexact Rounded +lnx1018 ln 0.0870671 -> -2.441076 Inexact Rounded +lnx1019 ln 8.153966 -> 2.098504 Inexact Rounded +lnx1020 ln 2.040975 -> 0.7134276 Inexact Rounded +lnx1021 ln 1.481642 -> 0.3931509 Inexact Rounded +lnx1022 ln 0.2610123 -> -1.343188 Inexact Rounded +lnx1023 ln 0.466723 -> -0.7620193 Inexact Rounded +lnx1024 ln 0.0518756 -> -2.958907 Inexact Rounded +lnx1025 ln 2.056410 -> 0.7209617 Inexact Rounded +lnx1026 ln 0.181522 -> -1.706378 Inexact Rounded +lnx1027 ln 0.515551 -> -0.6625190 Inexact Rounded +lnx1028 ln 8.425089 -> 2.131214 Inexact Rounded +lnx1029 ln 2.077091 -> 0.7309684 Inexact Rounded +lnx1030 ln 6.212705 -> 1.826596 Inexact Rounded +lnx1031 ln 5.729343 -> 1.745601 Inexact Rounded +lnx1032 ln 4.831251 -> 1.575105 Inexact Rounded +lnx1033 ln 2.029760 -> 0.7079176 Inexact Rounded +lnx1034 ln 8.615060 -> 2.153512 Inexact Rounded +lnx1035 ln 0.0611511 -> -2.794407 Inexact Rounded +lnx1036 ln 5.195269 -> 1.647748 Inexact Rounded +lnx1037 ln 9.617686 -> 2.263604 Inexact Rounded +lnx1038 ln 0.0049382 -> -5.310754 Inexact Rounded +lnx1039 ln 2.786840 -> 1.024908 Inexact Rounded +lnx1040 ln 0.0091073 -> -4.698679 Inexact Rounded + +-- from here 3-digit tests are based on reverse exp tests +precision: 9 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +lnx001 ln 0 -> -Infinity +lnx002 ln 0.367879441 -> -1.00000000 Inexact Rounded +lnx003 ln 1 -> 0 +lnx005 ln 2.71828183 -> 1.00000000 Inexact Rounded +lnx006 ln 2.00000000 -> 0.693147181 Inexact Rounded +lnx007 ln +Infinity -> Infinity + +-- tiny edge cases +precision: 7 +lnx011 ln 1.105171 -> 0.1000001 Inexact Rounded +lnx012 ln 1.010050 -> 0.009999835 Inexact Rounded +lnx013 ln 1.000010 -> 0.000009999950 Inexact Rounded +lnx014 ln 1.000001 -> 9.999995E-7 Inexact Rounded +lnx015 ln 1.000000 -> 0 + +-- basic e=0, e=1, e=2, e=4, e>=8 cases +precision: 7 +lnx041 ln 2.718282 -> 1.000000 Inexact Rounded +lnx042 ln 0.3678794 -> -1.000000 Inexact Rounded +lnx043 ln 22026.47 -> 10.00000 Inexact Rounded +lnx044 ln 0.00004539993 -> -10.00000 Inexact Rounded +lnx045 ln 2.688117E+43 -> 100.0000 Inexact Rounded +lnx046 ln 3.720076E-44 -> -100.0000 Inexact Rounded +lnx047 ln Infinity -> Infinity +lnx048 ln 0E-389 -> -Infinity + +-- miscellanea +precision: 16 +lnx055 ln 2.717658486884572E-236 -> -542.4103112874415 Inexact Rounded +precision: 17 +lnx056 ln 2.7176584868845721E-236 -> -542.41031128744146 Inexact Rounded +precision: 18 +lnx057 ln 2.71765848688457211E-236 -> -542.410311287441459 Inexact Rounded +precision: 19 +lnx058 ln 2.717658486884572112E-236 -> -542.4103112874414592 Inexact Rounded +precision: 20 +lnx059 ln 2.7176584868845721118E-236 -> -542.41031128744145917 Inexact Rounded + +-- inputs ending in ..500.., ..499.., ..100.., ..999.. sequences +precision: 50 +lnx102 ln 0.9999999100000040499998785000027 -> -9.0000000000000000000000033749953829996446124861750E-8 Inexact Rounded +precision: 30 +lnx103 ln 0.999999910000004049999878500003 -> -8.99999999999999999999997337499E-8 Inexact Rounded +precision: 29 +lnx104 ln 0.99999991000000404999987850000 -> -9.0000000000000000000002733750E-8 Inexact Rounded +precision: 28 +lnx105 ln 0.9999999100000040499998785000 -> -9.000000000000000000000273375E-8 Inexact Rounded +precision: 27 +lnx106 ln 0.999999910000004049999878500 -> -9.00000000000000000000027338E-8 Inexact Rounded +precision: 26 +lnx107 ln 0.99999991000000404999987850 -> -9.0000000000000000000002734E-8 Inexact Rounded +precision: 25 +lnx108 ln 0.9999999100000040499998785 -> -9.000000000000000000000273E-8 Inexact Rounded +precision: 24 +lnx109 ln 0.999999910000004049999879 -> -8.99999999999999995000027E-8 Inexact Rounded +precision: 23 +lnx110 ln 0.99999991000000404999988 -> -8.9999999999999998500003E-8 Inexact Rounded +precision: 22 +lnx111 ln 0.9999999100000040499999 -> -8.999999999999997850000E-8 Inexact Rounded +precision: 21 +lnx112 ln 0.999999910000004050000 -> -8.99999999999998785000E-8 Inexact Rounded +precision: 20 +lnx113 ln 0.99999991000000405000 -> -8.9999999999999878500E-8 Inexact Rounded +precision: 19 +lnx114 ln 0.9999999100000040500 -> -8.999999999999987850E-8 Inexact Rounded +precision: 18 +lnx115 ln 0.999999910000004050 -> -8.99999999999998785E-8 Inexact Rounded +-- next may be a > 0.5ulp case; a more precise answer is: +-- -8.99999999999998784999918E-8 +precision: 17 +lnx116 ln 0.99999991000000405 -> -8.9999999999999878E-8 Inexact Rounded +precision: 16 +lnx117 ln 0.9999999100000040 -> -9.000000004999988E-8 Inexact Rounded +precision: 15 +lnx118 ln 0.999999910000004 -> -9.00000000499999E-8 Inexact Rounded +precision: 14 +lnx119 ln 0.99999991000000 -> -9.0000004050000E-8 Inexact Rounded +precision: 13 +lnx120 ln 0.9999999100000 -> -9.000000405000E-8 Inexact Rounded +precision: 12 +lnx121 ln 0.999999910000 -> -9.00000040500E-8 Inexact Rounded +precision: 11 +lnx122 ln 0.99999991000 -> -9.0000004050E-8 Inexact Rounded +precision: 10 +lnx123 ln 0.9999999100 -> -9.000000405E-8 Inexact Rounded +precision: 9 +lnx124 ln 0.999999910 -> -9.00000041E-8 Inexact Rounded +precision: 8 +lnx125 ln 0.99999991 -> -9.0000004E-8 Inexact Rounded +precision: 7 +lnx126 ln 0.9999999 -> -1.000000E-7 Inexact Rounded +precision: 16 +lnx126b ln 0.9999999 -> -1.000000050000003E-7 Inexact Rounded +precision: 6 +lnx127 ln 0.999999 -> -0.00000100000 Inexact Rounded +precision: 5 +lnx128 ln 0.99999 -> -0.000010000 Inexact Rounded +precision: 4 +lnx129 ln 0.9999 -> -0.0001000 Inexact Rounded +precision: 3 +lnx130 ln 0.999 -> -0.00100 Inexact Rounded +precision: 2 +lnx131 ln 0.99 -> -0.010 Inexact Rounded +precision: 1 +lnx132 ln 0.9 -> -0.1 Inexact Rounded + + +-- cases near 1 -- 1 2345678901234567890 +precision: 20 +lnx401 ln 2.7182818284589365041 -> 0.99999999999996000000 Inexact Rounded +lnx402 ln 2.7182818284589636869 -> 0.99999999999997000000 Inexact Rounded +lnx403 ln 2.7182818284589908697 -> 0.99999999999997999999 Inexact Rounded +lnx404 ln 2.7182818284590180525 -> 0.99999999999998999998 Inexact Rounded +lnx405 ln 2.7182818284590452354 -> 1.0000000000000000000 Inexact Rounded +lnx406 ln 2.7182818284593170635 -> 1.0000000000001000000 Inexact Rounded +lnx407 ln 2.7182818284595888917 -> 1.0000000000002000000 Inexact Rounded +precision: 14 +lnx411 ln 2.7182818284589 -> 0.99999999999995 Inexact Rounded +lnx413 ln 2.7182818284590 -> 0.99999999999998 Inexact Rounded +lnx416 ln 2.7182818284591 -> 1.0000000000000 Inexact Rounded +lnx417 ln 2.7182818284592 -> 1.0000000000001 Inexact Rounded + +-- overflows, including some exp overprecise borderlines +precision: 7 +maxExponent: 384 +minExponent: -383 +lnx709 ln 9.999999E+384 -> 886.4953 Inexact Rounded +lnx711 ln 9.999992E+384 -> 886.4953 Inexact Rounded +precision: 16 +lnx722 ln 9.999999999999999E+384 -> 886.4952608027076 Inexact Rounded +lnx724 ln 9.999999999999917E+384 -> 886.4952608027076 Inexact Rounded +lnx726 ln 9.999999999999117E+384 -> 886.4952608027075 Inexact Rounded +-- and more... +precision: 15 +maxExponent: 999 +minExponent: -999 +lnx731 ln 9.99999999999999E+999 -> 2302.58509299405 Inexact Rounded +-- next may be a > 0.5ulp case; a more precise answer is: +-- 2302.58509299404495001799145442 +lnx732 ln 9.99999999999266E+999 -> 2302.58509299404 Inexact Rounded +lnx733 ln 9.99999999999265E+999 -> 2302.58509299404 Inexact Rounded +lnx734 ln 9.99999999999264E+999 -> 2302.58509299404 Inexact Rounded + +-- subnormals and underflows for exp, including underflow-to-zero edge point +precision: 7 +maxExponent: 384 +minExponent: -383 +lnx751 ln 0E-389 -> -Infinity +lnx758 ln 1.000001E-383 -> -881.8901 Inexact Rounded +lnx759 ln 9.99991E-384 -> -881.8901 Inexact Rounded +lnx760 ln 4.4605E-385 -> -885.0000 Inexact Rounded +lnx761 ln 2.221E-386 -> -887.9999 Inexact Rounded +lnx762 ln 3.01E-387 -> -889.9985 Inexact Rounded +lnx763 ln 1.7E-388 -> -892.8724 Inexact Rounded +lnx764 ln 1.5E-388 -> -892.9976 Inexact Rounded +lnx765 ln 9E-389 -> -893.5084 Inexact Rounded +lnx766 ln 1E-389 -> -895.7056 Inexact Rounded +lnx774 ln 0E-389 -> -Infinity + +-- special values +lnx820 ln Infinity -> Infinity +lnx821 ln 0 -> -Infinity +lnx822 ln NaN -> NaN +lnx823 ln sNaN -> NaN Invalid_operation +-- propagating NaNs +lnx824 ln sNaN123 -> NaN123 Invalid_operation +lnx825 ln -sNaN321 -> -NaN321 Invalid_operation +lnx826 ln NaN456 -> NaN456 +lnx827 ln -NaN654 -> -NaN654 +lnx828 ln NaN1 -> NaN1 + +-- Invalid operations due to restrictions +-- [next two probably skipped by most test harnesses] +precision: 100000000 +lnx901 ln 1 -> NaN Invalid_context +precision: 99999999 +lnx902 ln 0 -> NaN Invalid_context + +precision: 9 +maxExponent: 1000000 +minExponent: -999999 +lnx903 ln 1 -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999999 +lnx904 ln 0 -> -Infinity +maxExponent: 999999 +minExponent: -1000000 +lnx905 ln 1 -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999998 +lnx906 ln 0 -> -Infinity + +-- payload decapitate +precision: 5 +lnx910 ln -sNaN1234567890 -> -NaN67890 Invalid_operation + +-- Null test +lnx900 ln # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/log10.decTest b/Lib/test/decimaltestdata/log10.decTest index 6502f0d0914..5169eabde35 100644 --- a/Lib/test/decimaltestdata/log10.decTest +++ b/Lib/test/decimaltestdata/log10.decTest @@ -1,551 +1,551 @@ ------------------------------------------------------------------------- --- log10.decTest -- decimal logarithm in base 10 -- --- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This emphasises the testing of notable cases, as they will often --- have unusual paths (especially the 10**n results). - -extended: 1 -precision: 16 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- examples in specification -precision: 9 -logxs000 log10 0 -> -Infinity -logxs001 log10 0.001 -> -3 -logxs002 log10 1 -> 0 -logxs003 log10 2 -> 0.301029996 Inexact Rounded -logxs004 log10 10 -> 1 -logxs005 log10 70 -> 1.84509804 Inexact Rounded -logxs006 log10 +Infinity -> Infinity - - --- basics (examples in specification, etc.) -precision: 16 -logx0000 log10 0 -> -Infinity -logx0001 log10 7E-1000 -> -999.1549019599857 Inexact Rounded -logx0002 log10 1.1E-9 -> -8.958607314841775 Inexact Rounded -logx0003 log10 0.0007 -> -3.154901959985743 Inexact Rounded -logx0004 log10 0.11 -> -0.9586073148417750 Inexact Rounded -logx0005 log10 0.7 -> -0.1549019599857432 Inexact Rounded -logx0006 log10 1 -> 0 -logx0007 log10 1.5 -> 0.1760912590556812 Inexact Rounded -logx0008 log10 2 -> 0.3010299956639812 Inexact Rounded -logx0009 log10 2.718281828459045 -> 0.4342944819032518 Inexact Rounded -logx0010 log10 2.718281828459046 -> 0.4342944819032519 Inexact Rounded -logx0011 log10 2.718281828459047 -> 0.4342944819032521 Inexact Rounded -logx0012 log10 7 -> 0.8450980400142568 Inexact Rounded -logx0013 log10 10 -> 1 -logx0014 log10 10.5 -> 1.021189299069938 Inexact Rounded -logx0015 log10 11 -> 1.041392685158225 Inexact Rounded -logx0016 log10 70 -> 1.845098040014257 Inexact Rounded -logx0017 log10 9999 -> 3.999956568380192 Inexact Rounded -logx0018 log10 1.21E6 -> 6.082785370316450 Inexact Rounded -logx0019 log10 1.1E+9 -> 9.041392685158225 Inexact Rounded -logx0020 log10 7E+1000 -> 1000.845098040014 Inexact Rounded -logx0021 log10 +Infinity -> Infinity - --- notable cases --- negatives -logx0031 log10 -1E-9 -> NaN Invalid_operation -logx0032 log10 -0.0007 -> NaN Invalid_operation -logx0033 log10 -0.1 -> NaN Invalid_operation -logx0034 log10 -0.7 -> NaN Invalid_operation -logx0035 log10 -1 -> NaN Invalid_operation -logx0036 log10 -1.5 -> NaN Invalid_operation -logx0037 log10 -2 -> NaN Invalid_operation -logx0038 log10 -10.5 -> NaN Invalid_operation -logx0039 log10 -10.5 -> NaN Invalid_operation -logx0040 log10 -9999 -> NaN Invalid_operation -logx0041 log10 -10 -> NaN Invalid_operation -logx0042 log10 -0 -> -Infinity -logx0043 log10 -0E+17 -> -Infinity -logx0044 log10 -0E-17 -> -Infinity --- other zeros -logx0051 log10 0 -> -Infinity -logx0052 log10 0E+17 -> -Infinity -logx0053 log10 0E-17 -> -Infinity --- infinities -logx0055 log10 -Infinity -> NaN Invalid_operation -logx0056 log10 +Infinity -> Infinity --- ones -logx0061 log10 1 -> 0 -logx0062 log10 1.0 -> 0 -logx0063 log10 1.000000000000000 -> 0 -logx0064 log10 1.000000000000000000 -> 0 - --- notable cases -- exact powers of 10 -logx1100 log10 1 -> 0 -logx1101 log10 10 -> 1 -logx1102 log10 100 -> 2 -logx1103 log10 1000 -> 3 -logx1104 log10 10000 -> 4 -logx1105 log10 100000 -> 5 -logx1106 log10 1000000 -> 6 -logx1107 log10 10000000 -> 7 -logx1108 log10 100000000 -> 8 -logx1109 log10 1000000000 -> 9 -logx1110 log10 10000000000 -> 10 -logx1111 log10 100000000000 -> 11 -logx1112 log10 1000000000000 -> 12 -logx1113 log10 0.00000000001 -> -11 -logx1114 log10 0.0000000001 -> -10 -logx1115 log10 0.000000001 -> -9 -logx1116 log10 0.00000001 -> -8 -logx1117 log10 0.0000001 -> -7 -logx1118 log10 0.000001 -> -6 -logx1119 log10 0.00001 -> -5 -logx1120 log10 0.0001 -> -4 -logx1121 log10 0.001 -> -3 -logx1122 log10 0.01 -> -2 -logx1123 log10 0.1 -> -1 -logx1124 log10 1E-99 -> -99 -logx1125 log10 1E-100 -> -100 -logx1126 log10 1E-383 -> -383 - --- check normally exact cases round properly -precision: 1 -logx1141 log10 10000000000 -> 1E+1 Rounded -logx1142 log10 1000000000000 -> 1E+1 Inexact Rounded -logx1143 log10 1E+100 -> 1E+2 Rounded -logx1144 log10 1E+123 -> 1E+2 Inexact Rounded -logx1145 log10 1E+126 -> 1E+2 Inexact Rounded -logx1146 log10 1E+916 -> 9E+2 Inexact Rounded -logx1147 log10 1E+999 -> 1E+3 Inexact Rounded - -precision: 2 -logx1151 log10 10000000000 -> 10 -logx1152 log10 1000000000000 -> 12 -logx1153 log10 1E+100 -> 1.0E+2 Rounded -logx1154 log10 1E+123 -> 1.2E+2 Inexact Rounded -logx1155 log10 1E+126 -> 1.3E+2 Inexact Rounded -logx1156 log10 1E+916 -> 9.2E+2 Inexact Rounded -logx1157 log10 1E+999 -> 1.0E+3 Inexact Rounded --- some half-way point rounds, other cases, and negatives -logx1158 log10 1E+125 -> 1.2E+2 Inexact Rounded -logx1159 log10 1E+135 -> 1.4E+2 Inexact Rounded -logx1160 log10 1E+129 -> 1.3E+2 Inexact Rounded -logx1161 log10 1E+131 -> 1.3E+2 Inexact Rounded -logx1162 log10 1E-123 -> -1.2E+2 Inexact Rounded -logx1163 log10 1E-126 -> -1.3E+2 Inexact Rounded -logx1164 log10 1E-916 -> -9.2E+2 Inexact Rounded -logx1165 log10 1E-999 -> -1.0E+3 Inexact Rounded -logx1166 log10 1E-125 -> -1.2E+2 Inexact Rounded -logx1167 log10 1E-135 -> -1.4E+2 Inexact Rounded -logx1168 log10 1E-129 -> -1.3E+2 Inexact Rounded -logx1169 log10 1E-131 -> -1.3E+2 Inexact Rounded - -precision: 3 -logx1171 log10 10000000000 -> 10 -logx1172 log10 1000000000000 -> 12 -logx1173 log10 1E+100 -> 100 -logx1174 log10 1E+123 -> 123 -logx1175 log10 1E+126 -> 126 -logx1176 log10 1E+916 -> 916 -logx1177 log10 1E+999 -> 999 - --- log10(2) .. tests both ln(2) and ln(10) constants, too -precision: 50 -logx1201 log10 2 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded -logx1202 log10 2.000 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded -logx1203 log10 0.2E1 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded -precision: 49 -logx1204 log10 2 -> 0.3010299956639811952137388947244930267681898814621 Inexact Rounded -precision: 48 -logx1205 log10 2 -> 0.301029995663981195213738894724493026768189881462 Inexact Rounded -precision: 47 -logx1206 log10 2 -> 0.30102999566398119521373889472449302676818988146 Inexact Rounded -precision: 46 -logx1207 log10 2 -> 0.3010299956639811952137388947244930267681898815 Inexact Rounded -precision: 45 -logx1208 log10 2 -> 0.301029995663981195213738894724493026768189881 Inexact Rounded -precision: 44 -logx1209 log10 2 -> 0.30102999566398119521373889472449302676818988 Inexact Rounded -precision: 43 -logx1210 log10 2 -> 0.3010299956639811952137388947244930267681899 Inexact Rounded -precision: 42 -logx1211 log10 2 -> 0.301029995663981195213738894724493026768190 Inexact Rounded -precision: 41 -logx1212 log10 2 -> 0.30102999566398119521373889472449302676819 Inexact Rounded -precision: 40 -logx1213 log10 2 -> 0.3010299956639811952137388947244930267682 Inexact Rounded -precision: 39 -logx1214 log10 2 -> 0.301029995663981195213738894724493026768 Inexact Rounded -precision: 38 -logx1215 log10 2 -> 0.30102999566398119521373889472449302677 Inexact Rounded -precision: 37 -logx1216 log10 2 -> 0.3010299956639811952137388947244930268 Inexact Rounded -precision: 36 -logx1217 log10 2 -> 0.301029995663981195213738894724493027 Inexact Rounded -precision: 35 -logx1218 log10 2 -> 0.30102999566398119521373889472449303 Inexact Rounded -precision: 34 -logx1219 log10 2 -> 0.3010299956639811952137388947244930 Inexact Rounded -precision: 33 -logx1220 log10 2 -> 0.301029995663981195213738894724493 Inexact Rounded -precision: 32 -logx1221 log10 2 -> 0.30102999566398119521373889472449 Inexact Rounded -precision: 31 -logx1222 log10 2 -> 0.3010299956639811952137388947245 Inexact Rounded -precision: 30 -logx1223 log10 2 -> 0.301029995663981195213738894724 Inexact Rounded -precision: 29 -logx1224 log10 2 -> 0.30102999566398119521373889472 Inexact Rounded -precision: 28 -logx1225 log10 2 -> 0.3010299956639811952137388947 Inexact Rounded -precision: 27 -logx1226 log10 2 -> 0.301029995663981195213738895 Inexact Rounded -precision: 26 -logx1227 log10 2 -> 0.30102999566398119521373889 Inexact Rounded -precision: 25 -logx1228 log10 2 -> 0.3010299956639811952137389 Inexact Rounded -precision: 24 -logx1229 log10 2 -> 0.301029995663981195213739 Inexact Rounded -precision: 23 -logx1230 log10 2 -> 0.30102999566398119521374 Inexact Rounded -precision: 22 -logx1231 log10 2 -> 0.3010299956639811952137 Inexact Rounded -precision: 21 -logx1232 log10 2 -> 0.301029995663981195214 Inexact Rounded -precision: 20 -logx1233 log10 2 -> 0.30102999566398119521 Inexact Rounded -precision: 19 -logx1234 log10 2 -> 0.3010299956639811952 Inexact Rounded -precision: 18 -logx1235 log10 2 -> 0.301029995663981195 Inexact Rounded -precision: 17 -logx1236 log10 2 -> 0.30102999566398120 Inexact Rounded -precision: 16 -logx1237 log10 2 -> 0.3010299956639812 Inexact Rounded -precision: 15 -logx1238 log10 2 -> 0.301029995663981 Inexact Rounded -precision: 14 -logx1239 log10 2 -> 0.30102999566398 Inexact Rounded -precision: 13 -logx1240 log10 2 -> 0.3010299956640 Inexact Rounded -precision: 12 -logx1241 log10 2 -> 0.301029995664 Inexact Rounded -precision: 11 -logx1242 log10 2 -> 0.30102999566 Inexact Rounded -precision: 10 -logx1243 log10 2 -> 0.3010299957 Inexact Rounded -precision: 9 -logx1244 log10 2 -> 0.301029996 Inexact Rounded -precision: 8 -logx1245 log10 2 -> 0.30103000 Inexact Rounded -precision: 7 -logx1246 log10 2 -> 0.3010300 Inexact Rounded -precision: 6 -logx1247 log10 2 -> 0.301030 Inexact Rounded -precision: 5 -logx1248 log10 2 -> 0.30103 Inexact Rounded -precision: 4 -logx1249 log10 2 -> 0.3010 Inexact Rounded -precision: 3 -logx1250 log10 2 -> 0.301 Inexact Rounded -precision: 2 -logx1251 log10 2 -> 0.30 Inexact Rounded -precision: 1 -logx1252 log10 2 -> 0.3 Inexact Rounded - -maxExponent: 384 -minExponent: -383 -precision: 16 -rounding: half_even - --- More close-to-e, etc., tests -precision: 34 -logx1301 log10 2.718281828459045235360287471352661 -> 0.4342944819032518276511289189166048 Inexact Rounded -logx1302 log10 2.718281828459045235360287471352662 -> 0.4342944819032518276511289189166050 Inexact Rounded -logx1303 log10 2.718281828459045235360287471352663 -> 0.4342944819032518276511289189166052 Inexact Rounded -logx1304 log10 0.99999999999999999999999999999999 -> -4.342944819032518276511289189166073E-33 Inexact Rounded -logx1305 log10 0.999999999999999999999999999999999 -> -4.342944819032518276511289189166053E-34 Inexact Rounded -logx1306 log10 0.9999999999999999999999999999999999 -> -4.342944819032518276511289189166051E-35 Inexact Rounded -logx1307 log10 1.000000000000000000000000000000000 -> 0 -logx1308 log10 1.0000000000000000000000000000000001 -> 4.342944819032518276511289189166051E-35 Inexact Rounded -logx1309 log10 1.000000000000000000000000000000001 -> 4.342944819032518276511289189166049E-34 Inexact Rounded -logx1310 log10 1.00000000000000000000000000000001 -> 4.342944819032518276511289189166029E-33 Inexact Rounded --- lower p -precision: 7 -logx1320 log10 0.999999 -> -4.342947E-7 Inexact Rounded -logx1321 log10 0.9999999 -> -4.342945E-8 Inexact Rounded -logx1322 log10 0.99999999 -> -4.342945E-9 Inexact Rounded -logx1323 log10 0.999999999 -> -4.342945E-10 Inexact Rounded -logx1324 log10 1.00000000 -> 0 -logx1325 log10 1.00000001 -> 4.342945E-9 Inexact Rounded -logx1326 log10 1.0000001 -> 4.342945E-8 Inexact Rounded -logx1327 log10 1.000001 -> 4.342943E-7 Inexact Rounded - --- near 10^3 -precision: 9 -logx1331 log10 999.9999998 -> 3.00000000 Inexact Rounded -logx1332 log10 999.9999999 -> 3.00000000 Inexact Rounded -logx1333 log10 1000.000000 -> 3 -logx1334 log10 1000.000001 -> 3.00000000 Inexact Rounded -logx1335 log10 1000.000002 -> 3.00000000 Inexact Rounded -precision: 16 -logx1341 log10 999.9999998 -> 2.999999999913141 Inexact Rounded -logx1342 log10 999.9999999 -> 2.999999999956571 Inexact Rounded -logx1343 log10 1000.000000 -> 3 -logx1344 log10 1000.000001 -> 3.000000000434294 Inexact Rounded -logx1345 log10 1000.000002 -> 3.000000000868589 Inexact Rounded - --- suggestions from Ilan Nehama -logx1400 log10 10E-3 -> -2 -logx1401 log10 10E-2 -> -1 -logx1402 log10 100E-2 -> 0 -logx1403 log10 1000E-2 -> 1 -logx1404 log10 10000E-2 -> 2 -logx1405 log10 10E-1 -> 0 -logx1406 log10 100E-1 -> 1 -logx1407 log10 1000E-1 -> 2 -logx1408 log10 10000E-1 -> 3 -logx1409 log10 10E0 -> 1 -logx1410 log10 100E0 -> 2 -logx1411 log10 1000E0 -> 3 -logx1412 log10 10000E0 -> 4 -logx1413 log10 10E1 -> 2 -logx1414 log10 100E1 -> 3 -logx1415 log10 1000E1 -> 4 -logx1416 log10 10000E1 -> 5 -logx1417 log10 10E2 -> 3 -logx1418 log10 100E2 -> 4 -logx1419 log10 1000E2 -> 5 -logx1420 log10 10000E2 -> 6 - --- Randoms --- P=50, within 0-9999 -Precision: 50 -logx2501 log10 0.00035448001667968141775891246991912655961163345904 -> -3.4504082425411775290864053318247274944685586188505 Inexact Rounded -logx2502 log10 70.636455726424311228255338637935330826995136597644 -> 1.8490288998408492045793070255302335558140975719247 Inexact Rounded -logx2503 log10 0.00000000000000233550362473821889060812804063040169 -> -14.631619454343834858023578299142866557717904223667 Inexact Rounded -logx2504 log10 97.783628621523244679901260358286898958832135433764 -> 1.9902661493224219517897657964362571690592734407330 Inexact Rounded -logx2505 log10 0062.2377135315858392802612812022807838599572017342 -> 1.7940536293085066199287632725026837018486533544141 Inexact Rounded -logx2506 log10 6.3767634652071053619977602804724129652981747879532 -> 0.80460030789825961615100163576080761326857374098644 Inexact Rounded -logx2507 log10 63.297088981313278529306533814195068850532666658798 -> 1.8013837373724427092417170149098614410849353839673 Inexact Rounded -logx2508 log10 0.00000077239693316881797717820110898167721602299187 -> -6.1121594592718550613773886241951966264826760310047 Inexact Rounded -logx2509 log10 0.00000003953580359780185534830572461922527831395002 -> -7.4030094293833847136252547069905477213541787177561 Inexact Rounded -logx2510 log10 754.62905817369989169188998111527272688791544577204 -> 2.8777335243761300047758534304371912099958057545416 Inexact Rounded -logx2511 log10 0.00000048360378410241428936607147056283282849158312 -> -6.3155103095309353457604038397980091650760346334512 Inexact Rounded -logx2512 log10 0.00007509037583645612577196104591672080542932166089 -> -4.1244157219700166314012344705538088030592896111026 Inexact Rounded -logx2513 log10 0.00000000000705475944638915053419839063567898092064 -> -11.151517790256466048553810002525868198178167950377 Inexact Rounded -logx2514 log10 9.6210300460497657917445410947099633479609165120661 -> 0.98322157093260978206633922877716078683518617768411 Inexact Rounded -logx2515 log10 0.00000000050150361386555527496607245976120864985611 -> -9.2997259330798261040411086835563234390934934629340 Inexact Rounded -logx2516 log10 098.24754029731994125797723545333677604490074810751 -> 1.9923216862874337077795278629351060819105679670633 Inexact Rounded -logx2517 log10 7.5091998150046994320441463854301624742491015752980 -> 0.87559366078005924080766469158763499725414024128781 Inexact Rounded -logx2518 log10 0.00000000000079540571273330075193668596942268542425 -> -12.099411294165176028817305108475326325006250936963 Inexact Rounded -logx2519 log10 0.00000042395034799555215782907515074134154915491701 -> -6.3726850039125381134069450802108893075604464135297 Inexact Rounded -logx2520 log10 56.683376304674355481905023145238799909301732694982 -> 1.7534557107853480435703421826077606250636580091754 Inexact Rounded -logx2521 log10 48.734033811444195070807606721517169810438049581227 -> 1.6878323602741065190942654710049433808208291564049 Inexact Rounded -logx2522 log10 0.00074830310930046865009851706989430228561880221063 -> -3.1259224502209974082223667712016445572431791920618 Inexact Rounded -logx2523 log10 36.677348885111593384020836720396262497122708598359 -> 1.5643979364260796086754530282302605477567469395425 Inexact Rounded -logx2524 log10 0.00000000000000004495678560480432858812419145833744 -> -16.347204748239740510014320630363244015916029619561 Inexact Rounded -logx2525 log10 9509.5854013650642799374159131940108748594774307104 -> 3.9781615829916326741100166519726824430945406302661 Inexact Rounded -logx2526 log10 0.07834891268689177014044454793608715276615743819097 -> -1.1059670262197643147805517398621288897669876996348 Inexact Rounded -logx2527 log10 0.00000029584529880706128444454688454999032801904794 -> -6.5289353275814043710076526920566721570375026917206 Inexact Rounded -logx2528 log10 3.0713496544497618098794332787772186176981011904294 -> 0.48732926103896828546424341029492468100431414072994 Inexact Rounded -logx2529 log10 352.66392670788816474407442785460803833927136413943 -> 2.5473610388199562714709836398243933320284077008314 Inexact Rounded -logx2530 log10 0.00304743125181876267210516527361742185617091801650 -> -2.5160660830163981967774124745311497447050056400207 Inexact Rounded -logx2531 log10 0.00000076120535894952136499250364604538117729437183 -> -6.1184981629047051532448413863950776496652483019415 Inexact Rounded -logx2532 log10 769.88795978534353052965286195053735007473187735815 -> 2.8864275277862652709986498581064117950288798222100 Inexact Rounded -logx2533 log10 0.00000000000000041297494808612226304619570016336188 -> -15.384076292745415917510668454361868659468669804710 Inexact Rounded -logx2534 log10 860.88864595714426940247940960258558876903741966974 -> 2.9349469800554277915920278090647283233440859155176 Inexact Rounded -logx2535 log10 5839.0328812994787235900178587371051096898683972444 -> 3.7663409208972392569269125539438874737147906238543 Inexact Rounded -logx2536 log10 0.00000028532710151284840471670497112821201598377841 -> -6.5446569753514027675878879843238065488490618159490 Inexact Rounded -logx2537 log10 0.00000000000000009734490059931638483445631835651581 -> -16.011686794011271135978633880864278692254243106931 Inexact Rounded -logx2538 log10 5.8610949526439529489252302463450302981511714144330 -> 0.76797875722452549281028552067645732490929361952278 Inexact Rounded -logx2539 log10 6.6282432221115923372151148990137179611977576327206 -> 0.82139843639227213211012044000785757267155736071361 Inexact Rounded -logx2540 log10 0.00000000001994071862386846626954819923923344413454 -> -10.700259194632339980266559224447212260115021637626 Inexact Rounded - --- P=34, within 0-9999 -Precision: 34 -logx2201 log10 1.522513203889714179088327328864183 -> 0.1825610677098896250496651330492109 Inexact Rounded -logx2202 log10 0.171123774769717316154080888930404 -> -0.7666896483548462582461898092764408 Inexact Rounded -logx2203 log10 0.0000000997467236251714283104963838 -> -7.001101360652518274271569010312115 Inexact Rounded -logx2204 log10 0.0008856103624122479769647543468633 -> -3.052757310476070891830490327138190 Inexact Rounded -logx2205 log10 1.938274868738032930709498221236758 -> 0.2874153648259449520201536171714594 Inexact Rounded -logx2206 log10 479.5667847823826713082613445010097 -> 2.680849095850361068709165157286435 Inexact Rounded -logx2207 log10 8856.136599178820202141823157336804 -> 3.947244306584767101480454261950559 Inexact Rounded -logx2208 log10 0.0000911026318801903982642871344858 -> -4.040469076434979398438617464033826 Inexact Rounded -logx2209 log10 0.0000000000017271112650427414732630 -> -11.76267968314038748995178212654921 Inexact Rounded -logx2210 log10 6.962605370078885647639503548229695 -> 0.8427717807200322352686396925992250 Inexact Rounded -logx2211 log10 0.3354804428992793132855923541692781 -> -0.4743327923012159170967636070844834 Inexact Rounded -logx2212 log10 2.079864257474859008252165836663504 -> 0.3180349916198059046812506741388856 Inexact Rounded -logx2213 log10 2805.479529292939499220276986621988 -> 3.448007104139974344565978780624744 Inexact Rounded -logx2214 log10 66.45731133034187374557028537213949 -> 1.822542767005644041661520936223086 Inexact Rounded -logx2215 log10 0.0000001206521261762681738274822835 -> -6.918465020390216969561494755767318 Inexact Rounded -logx2216 log10 0.0000000001884891916264401160472381 -> -9.724713548119065386091933007528633 Inexact Rounded -logx2217 log10 0.0000015467279551726326581314582759 -> -5.810586065070435383755759514608738 Inexact Rounded -logx2218 log10 0.0090776316728068586744633914135952 -> -2.042027442843745884503280954390114 Inexact Rounded -logx2219 log10 0.0000000000024541106528713393740030 -> -11.61010585935635713090119156069479 Inexact Rounded -logx2220 log10 14.12936879385863410081087750645856 -> 1.150122760895466989841057385742662 Inexact Rounded -logx2221 log10 0.0000036912481831392922922647231392 -> -5.432826753789892283556211380824203 Inexact Rounded -logx2222 log10 0.0000000004067477525420424270138734 -> -9.390674838050073122857868012475060 Inexact Rounded -logx2223 log10 7080.122562705399744969319589806194 -> 3.850040775747103318724330047546916 Inexact Rounded -logx2224 log10 261.3491411363679209175524790255725 -> 2.417221077227536319655699517530855 Inexact Rounded -logx2225 log10 003.9945581449915240094728380041494 -> 0.6014687471531988260823066997845691 Inexact Rounded -logx2226 log10 0.0000000000583549164588495206767840 -> -10.23392254834182677023231713519341 Inexact Rounded -logx2227 log10 9567.961832607240278342761088487484 -> 3.980819434211107631569386147016368 Inexact Rounded -logx2228 log10 06.26592979160342972777219828867033 -> 0.7969855243966221408595024012574729 Inexact Rounded -logx2229 log10 0.0000000000589847046598067273287319 -> -10.22926059078206218717755253582907 Inexact Rounded -logx2230 log10 567.9388648235589204769442863724997 -> 2.754301589058313576472380262907638 Inexact Rounded -logx2231 log10 039.7790325480037778918162264883415 -> 1.599654216592019199639285308997886 Inexact Rounded -logx2232 log10 0.0000000005123951921894162149817207 -> -9.290394953898862694847327137242690 Inexact Rounded -logx2233 log10 0.0000000000038500999723636904276723 -> -11.41452799337924056186867324854691 Inexact Rounded -logx2234 log10 0.0006726500658977759825616537935864 -> -3.172210810922768725687671849421792 Inexact Rounded -logx2235 log10 260.2400250475967528429943779126507 -> 2.415374092073799204236801383070064 Inexact Rounded -logx2236 log10 0.0000000006101942339385102585042548 -> -9.214531900562046557191261226632509 Inexact Rounded -logx2237 log10 0.0000000010846867501382746760066557 -> -8.964695664883282406359874242387236 Inexact Rounded -logx2238 log10 60.24078375568814769010333711509928 -> 1.779890613567084253168373266648922 Inexact Rounded -logx2239 log10 0.0012058738711757669337600252986093 -> -2.918698115012605915753728220896010 Inexact Rounded -logx2240 log10 230.9450930197841600611503095185600 -> 2.363508739056822846742942599628966 Inexact Rounded - --- P=16, within 0-999 -Precision: 16 -logx2101 log10 0.0072067119605184 -> -2.142262835573038 Inexact Rounded -logx2102 log10 503.6828482226624 -> 2.702157162195652 Inexact Rounded -logx2103 log10 64.96074447821815 -> 1.812650993464174 Inexact Rounded -logx2104 log10 48.75408597467246 -> 1.688011018842600 Inexact Rounded -logx2105 log10 0.0329009839269587 -> -1.482791113975280 Inexact Rounded -logx2106 log10 223.5320415060633 -> 2.349339784523410 Inexact Rounded -logx2107 log10 73.12765002292194 -> 1.864081617476268 Inexact Rounded -logx2108 log10 487.3749378358509 -> 2.687863192802252 Inexact Rounded -logx2109 log10 0.0000019671987621 -> -5.706151757557926 Inexact Rounded -logx2110 log10 0.0570680660609784 -> -1.243606844697873 Inexact Rounded -logx2111 log10 33.10311638788998 -> 1.519868880976773 Inexact Rounded -logx2112 log10 0.0687382699187077 -> -1.162801402868185 Inexact Rounded -logx2113 log10 258.9416193626484 -> 2.413201859654145 Inexact Rounded -logx2114 log10 0.0005306100136736 -> -3.275224558269725 Inexact Rounded -logx2115 log10 65.78490393408572 -> 1.818126244825109 Inexact Rounded -logx2116 log10 504.2328842073510 -> 2.702631165346958 Inexact Rounded -logx2117 log10 9.417432755815027 -> 0.9739325278524503 Inexact Rounded -logx2118 log10 006.7054835355498 -> 0.8264301004947640 Inexact Rounded -logx2119 log10 0.0917012272363915 -> -1.037624852133399 Inexact Rounded -logx2120 log10 5.959404385244921 -> 0.7752028561953401 Inexact Rounded -logx2121 log10 0.0001209759148486 -> -3.917301084968903 Inexact Rounded -logx2122 log10 0.0004706112139838 -> -3.327337728428039 Inexact Rounded -logx2123 log10 0.0069700457377046 -> -2.156764372035771 Inexact Rounded -logx2124 log10 0.5155584569852619 -> -0.2877220847805025 Inexact Rounded -logx2125 log10 88.06005885607414 -> 1.944778971389913 Inexact Rounded -logx2126 log10 0.0448240038219866 -> -1.348489353509709 Inexact Rounded -logx2127 log10 3.419622484059565 -> 0.5339781639101145 Inexact Rounded -logx2128 log10 5.171123353858721 -> 0.7135848977142854 Inexact Rounded -logx2129 log10 0.0002133188319807 -> -3.670970802945872 Inexact Rounded -logx2130 log10 46.21086703136966 -> 1.664744117045149 Inexact Rounded -logx2131 log10 0.0000631053714415 -> -4.199933672639880 Inexact Rounded -logx2132 log10 78.66019196870698 -> 1.895755001962469 Inexact Rounded -logx2133 log10 0.0007152278351188 -> -3.145555592082297 Inexact Rounded -logx2134 log10 45.52509819928536 -> 1.658250891256892 Inexact Rounded -logx2135 log10 0.0000703227795740 -> -4.152903971697183 Inexact Rounded -logx2136 log10 26.24438641426669 -> 1.419036423550599 Inexact Rounded -logx2137 log10 0.0000044654829535 -> -5.350131564166817 Inexact Rounded -logx2138 log10 0.7360702733062529 -> -0.1330807211893611 Inexact Rounded -logx2139 log10 8.417059176469655 -> 0.9251603805112778 Inexact Rounded -logx2140 log10 0.0002926570767968 -> -3.533640969664818 Inexact Rounded - --- P=7, within 0-99 -Precision: 7 -logx2001 log10 57.26089 -> 1.757858 Inexact Rounded -logx2002 log10 0.0575421 -> -1.240014 Inexact Rounded -logx2003 log10 0.5918465 -> -0.2277909 Inexact Rounded -logx2004 log10 0.0068776 -> -2.162563 Inexact Rounded -logx2005 log10 0.0066833 -> -2.175009 Inexact Rounded -logx2006 log10 9.926963 -> 0.9968164 Inexact Rounded -logx2007 log10 0.0041852 -> -2.378284 Inexact Rounded -logx2008 log10 84.15412 -> 1.925075 Inexact Rounded -logx2009 log10 2.466856 -> 0.3921438 Inexact Rounded -logx2010 log10 0.0058047 -> -2.236220 Inexact Rounded -logx2011 log10 9.885154 -> 0.9949834 Inexact Rounded -logx2012 log10 0.6667654 -> -0.1760269 Inexact Rounded -logx2013 log10 34.65736 -> 1.539795 Inexact Rounded -logx2014 log10 0.0026884 -> -2.570506 Inexact Rounded -logx2015 log10 0.0432767 -> -1.363746 Inexact Rounded -logx2016 log10 66.01407 -> 1.819637 Inexact Rounded -logx2017 log10 0.0070572 -> -2.151368 Inexact Rounded -logx2018 log10 0.0731613 -> -1.135719 Inexact Rounded -logx2019 log10 9.838983 -> 0.9929502 Inexact Rounded -logx2020 log10 15.89696 -> 1.201314 Inexact Rounded -logx2021 log10 8.459247 -> 0.9273317 Inexact Rounded -logx2022 log10 0.0010873 -> -2.963651 Inexact Rounded -logx2023 log10 0.6498619 -> -0.1871789 Inexact Rounded -logx2024 log10 0.0847008 -> -1.072112 Inexact Rounded -logx2025 log10 0.0075489 -> -2.122116 Inexact Rounded -logx2026 log10 51.11152 -> 1.708519 Inexact Rounded -logx2027 log10 0.7233866 -> -0.1406295 Inexact Rounded -logx2028 log10 2.254721 -> 0.3530928 Inexact Rounded -logx2029 log10 6.568444 -> 0.8174625 Inexact Rounded -logx2030 log10 83.72639 -> 1.922862 Inexact Rounded -logx2031 log10 6.720585 -> 0.8274071 Inexact Rounded -logx2032 log10 87.90366 -> 1.944007 Inexact Rounded -logx2033 log10 0.0433324 -> -1.363187 Inexact Rounded -logx2034 log10 34.63912 -> 1.539567 Inexact Rounded -logx2035 log10 0.8089059 -> -0.09210200 Inexact Rounded -logx2036 log10 7.793405 -> 0.8917272 Inexact Rounded -logx2037 log10 0.0041757 -> -2.379271 Inexact Rounded -logx2038 log10 7.135417 -> 0.8534194 Inexact Rounded -logx2039 log10 12.49570 -> 1.096761 Inexact Rounded -logx2040 log10 6.356276 -> 0.8032027 Inexact Rounded - --------- -maxExponent: 384 -minExponent: -383 -precision: 16 -rounding: half_even - --- special values -logx820 log10 Infinity -> Infinity -logx821 log10 0 -> -Infinity -logx822 log10 NaN -> NaN -logx823 log10 sNaN -> NaN Invalid_operation --- propagating NaNs -logx824 log10 sNaN123 -> NaN123 Invalid_operation -logx825 log10 -sNaN321 -> -NaN321 Invalid_operation -logx826 log10 NaN456 -> NaN456 -logx827 log10 -NaN654 -> -NaN654 -logx828 log10 NaN1 -> NaN1 - - --- Invalid operations due to restrictions --- [next two probably skipped by most test harnesses] -precision: 100000000 -logx901 log10 1 -> NaN Invalid_context -precision: 99999999 -logx902 log10 0 -> NaN Invalid_context - -precision: 9 -maxExponent: 1000000 -minExponent: -999999 -logx903 log10 1 -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999999 -logx904 log10 0 -> -Infinity -maxExponent: 999999 -minExponent: -1000000 -logx905 log10 1 -> NaN Invalid_context -maxExponent: 999999 -minExponent: -999998 -logx906 log10 0 -> -Infinity - --- Null test -logx900 log10 # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- log10.decTest -- decimal logarithm in base 10 -- +-- Copyright (c) IBM Corporation, 2005, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This emphasises the testing of notable cases, as they will often +-- have unusual paths (especially the 10**n results). + +extended: 1 +precision: 16 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- examples in specification +precision: 9 +logxs000 log10 0 -> -Infinity +logxs001 log10 0.001 -> -3 +logxs002 log10 1 -> 0 +logxs003 log10 2 -> 0.301029996 Inexact Rounded +logxs004 log10 10 -> 1 +logxs005 log10 70 -> 1.84509804 Inexact Rounded +logxs006 log10 +Infinity -> Infinity + + +-- basics (examples in specification, etc.) +precision: 16 +logx0000 log10 0 -> -Infinity +logx0001 log10 7E-1000 -> -999.1549019599857 Inexact Rounded +logx0002 log10 1.1E-9 -> -8.958607314841775 Inexact Rounded +logx0003 log10 0.0007 -> -3.154901959985743 Inexact Rounded +logx0004 log10 0.11 -> -0.9586073148417750 Inexact Rounded +logx0005 log10 0.7 -> -0.1549019599857432 Inexact Rounded +logx0006 log10 1 -> 0 +logx0007 log10 1.5 -> 0.1760912590556812 Inexact Rounded +logx0008 log10 2 -> 0.3010299956639812 Inexact Rounded +logx0009 log10 2.718281828459045 -> 0.4342944819032518 Inexact Rounded +logx0010 log10 2.718281828459046 -> 0.4342944819032519 Inexact Rounded +logx0011 log10 2.718281828459047 -> 0.4342944819032521 Inexact Rounded +logx0012 log10 7 -> 0.8450980400142568 Inexact Rounded +logx0013 log10 10 -> 1 +logx0014 log10 10.5 -> 1.021189299069938 Inexact Rounded +logx0015 log10 11 -> 1.041392685158225 Inexact Rounded +logx0016 log10 70 -> 1.845098040014257 Inexact Rounded +logx0017 log10 9999 -> 3.999956568380192 Inexact Rounded +logx0018 log10 1.21E6 -> 6.082785370316450 Inexact Rounded +logx0019 log10 1.1E+9 -> 9.041392685158225 Inexact Rounded +logx0020 log10 7E+1000 -> 1000.845098040014 Inexact Rounded +logx0021 log10 +Infinity -> Infinity + +-- notable cases +-- negatives +logx0031 log10 -1E-9 -> NaN Invalid_operation +logx0032 log10 -0.0007 -> NaN Invalid_operation +logx0033 log10 -0.1 -> NaN Invalid_operation +logx0034 log10 -0.7 -> NaN Invalid_operation +logx0035 log10 -1 -> NaN Invalid_operation +logx0036 log10 -1.5 -> NaN Invalid_operation +logx0037 log10 -2 -> NaN Invalid_operation +logx0038 log10 -10.5 -> NaN Invalid_operation +logx0039 log10 -10.5 -> NaN Invalid_operation +logx0040 log10 -9999 -> NaN Invalid_operation +logx0041 log10 -10 -> NaN Invalid_operation +logx0042 log10 -0 -> -Infinity +logx0043 log10 -0E+17 -> -Infinity +logx0044 log10 -0E-17 -> -Infinity +-- other zeros +logx0051 log10 0 -> -Infinity +logx0052 log10 0E+17 -> -Infinity +logx0053 log10 0E-17 -> -Infinity +-- infinities +logx0055 log10 -Infinity -> NaN Invalid_operation +logx0056 log10 +Infinity -> Infinity +-- ones +logx0061 log10 1 -> 0 +logx0062 log10 1.0 -> 0 +logx0063 log10 1.000000000000000 -> 0 +logx0064 log10 1.000000000000000000 -> 0 + +-- notable cases -- exact powers of 10 +logx1100 log10 1 -> 0 +logx1101 log10 10 -> 1 +logx1102 log10 100 -> 2 +logx1103 log10 1000 -> 3 +logx1104 log10 10000 -> 4 +logx1105 log10 100000 -> 5 +logx1106 log10 1000000 -> 6 +logx1107 log10 10000000 -> 7 +logx1108 log10 100000000 -> 8 +logx1109 log10 1000000000 -> 9 +logx1110 log10 10000000000 -> 10 +logx1111 log10 100000000000 -> 11 +logx1112 log10 1000000000000 -> 12 +logx1113 log10 0.00000000001 -> -11 +logx1114 log10 0.0000000001 -> -10 +logx1115 log10 0.000000001 -> -9 +logx1116 log10 0.00000001 -> -8 +logx1117 log10 0.0000001 -> -7 +logx1118 log10 0.000001 -> -6 +logx1119 log10 0.00001 -> -5 +logx1120 log10 0.0001 -> -4 +logx1121 log10 0.001 -> -3 +logx1122 log10 0.01 -> -2 +logx1123 log10 0.1 -> -1 +logx1124 log10 1E-99 -> -99 +logx1125 log10 1E-100 -> -100 +logx1126 log10 1E-383 -> -383 + +-- check normally exact cases round properly +precision: 1 +logx1141 log10 10000000000 -> 1E+1 Rounded +logx1142 log10 1000000000000 -> 1E+1 Inexact Rounded +logx1143 log10 1E+100 -> 1E+2 Rounded +logx1144 log10 1E+123 -> 1E+2 Inexact Rounded +logx1145 log10 1E+126 -> 1E+2 Inexact Rounded +logx1146 log10 1E+916 -> 9E+2 Inexact Rounded +logx1147 log10 1E+999 -> 1E+3 Inexact Rounded + +precision: 2 +logx1151 log10 10000000000 -> 10 +logx1152 log10 1000000000000 -> 12 +logx1153 log10 1E+100 -> 1.0E+2 Rounded +logx1154 log10 1E+123 -> 1.2E+2 Inexact Rounded +logx1155 log10 1E+126 -> 1.3E+2 Inexact Rounded +logx1156 log10 1E+916 -> 9.2E+2 Inexact Rounded +logx1157 log10 1E+999 -> 1.0E+3 Inexact Rounded +-- some half-way point rounds, other cases, and negatives +logx1158 log10 1E+125 -> 1.2E+2 Inexact Rounded +logx1159 log10 1E+135 -> 1.4E+2 Inexact Rounded +logx1160 log10 1E+129 -> 1.3E+2 Inexact Rounded +logx1161 log10 1E+131 -> 1.3E+2 Inexact Rounded +logx1162 log10 1E-123 -> -1.2E+2 Inexact Rounded +logx1163 log10 1E-126 -> -1.3E+2 Inexact Rounded +logx1164 log10 1E-916 -> -9.2E+2 Inexact Rounded +logx1165 log10 1E-999 -> -1.0E+3 Inexact Rounded +logx1166 log10 1E-125 -> -1.2E+2 Inexact Rounded +logx1167 log10 1E-135 -> -1.4E+2 Inexact Rounded +logx1168 log10 1E-129 -> -1.3E+2 Inexact Rounded +logx1169 log10 1E-131 -> -1.3E+2 Inexact Rounded + +precision: 3 +logx1171 log10 10000000000 -> 10 +logx1172 log10 1000000000000 -> 12 +logx1173 log10 1E+100 -> 100 +logx1174 log10 1E+123 -> 123 +logx1175 log10 1E+126 -> 126 +logx1176 log10 1E+916 -> 916 +logx1177 log10 1E+999 -> 999 + +-- log10(2) .. tests both ln(2) and ln(10) constants, too +precision: 50 +logx1201 log10 2 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded +logx1202 log10 2.000 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded +logx1203 log10 0.2E1 -> 0.30102999566398119521373889472449302676818988146211 Inexact Rounded +precision: 49 +logx1204 log10 2 -> 0.3010299956639811952137388947244930267681898814621 Inexact Rounded +precision: 48 +logx1205 log10 2 -> 0.301029995663981195213738894724493026768189881462 Inexact Rounded +precision: 47 +logx1206 log10 2 -> 0.30102999566398119521373889472449302676818988146 Inexact Rounded +precision: 46 +logx1207 log10 2 -> 0.3010299956639811952137388947244930267681898815 Inexact Rounded +precision: 45 +logx1208 log10 2 -> 0.301029995663981195213738894724493026768189881 Inexact Rounded +precision: 44 +logx1209 log10 2 -> 0.30102999566398119521373889472449302676818988 Inexact Rounded +precision: 43 +logx1210 log10 2 -> 0.3010299956639811952137388947244930267681899 Inexact Rounded +precision: 42 +logx1211 log10 2 -> 0.301029995663981195213738894724493026768190 Inexact Rounded +precision: 41 +logx1212 log10 2 -> 0.30102999566398119521373889472449302676819 Inexact Rounded +precision: 40 +logx1213 log10 2 -> 0.3010299956639811952137388947244930267682 Inexact Rounded +precision: 39 +logx1214 log10 2 -> 0.301029995663981195213738894724493026768 Inexact Rounded +precision: 38 +logx1215 log10 2 -> 0.30102999566398119521373889472449302677 Inexact Rounded +precision: 37 +logx1216 log10 2 -> 0.3010299956639811952137388947244930268 Inexact Rounded +precision: 36 +logx1217 log10 2 -> 0.301029995663981195213738894724493027 Inexact Rounded +precision: 35 +logx1218 log10 2 -> 0.30102999566398119521373889472449303 Inexact Rounded +precision: 34 +logx1219 log10 2 -> 0.3010299956639811952137388947244930 Inexact Rounded +precision: 33 +logx1220 log10 2 -> 0.301029995663981195213738894724493 Inexact Rounded +precision: 32 +logx1221 log10 2 -> 0.30102999566398119521373889472449 Inexact Rounded +precision: 31 +logx1222 log10 2 -> 0.3010299956639811952137388947245 Inexact Rounded +precision: 30 +logx1223 log10 2 -> 0.301029995663981195213738894724 Inexact Rounded +precision: 29 +logx1224 log10 2 -> 0.30102999566398119521373889472 Inexact Rounded +precision: 28 +logx1225 log10 2 -> 0.3010299956639811952137388947 Inexact Rounded +precision: 27 +logx1226 log10 2 -> 0.301029995663981195213738895 Inexact Rounded +precision: 26 +logx1227 log10 2 -> 0.30102999566398119521373889 Inexact Rounded +precision: 25 +logx1228 log10 2 -> 0.3010299956639811952137389 Inexact Rounded +precision: 24 +logx1229 log10 2 -> 0.301029995663981195213739 Inexact Rounded +precision: 23 +logx1230 log10 2 -> 0.30102999566398119521374 Inexact Rounded +precision: 22 +logx1231 log10 2 -> 0.3010299956639811952137 Inexact Rounded +precision: 21 +logx1232 log10 2 -> 0.301029995663981195214 Inexact Rounded +precision: 20 +logx1233 log10 2 -> 0.30102999566398119521 Inexact Rounded +precision: 19 +logx1234 log10 2 -> 0.3010299956639811952 Inexact Rounded +precision: 18 +logx1235 log10 2 -> 0.301029995663981195 Inexact Rounded +precision: 17 +logx1236 log10 2 -> 0.30102999566398120 Inexact Rounded +precision: 16 +logx1237 log10 2 -> 0.3010299956639812 Inexact Rounded +precision: 15 +logx1238 log10 2 -> 0.301029995663981 Inexact Rounded +precision: 14 +logx1239 log10 2 -> 0.30102999566398 Inexact Rounded +precision: 13 +logx1240 log10 2 -> 0.3010299956640 Inexact Rounded +precision: 12 +logx1241 log10 2 -> 0.301029995664 Inexact Rounded +precision: 11 +logx1242 log10 2 -> 0.30102999566 Inexact Rounded +precision: 10 +logx1243 log10 2 -> 0.3010299957 Inexact Rounded +precision: 9 +logx1244 log10 2 -> 0.301029996 Inexact Rounded +precision: 8 +logx1245 log10 2 -> 0.30103000 Inexact Rounded +precision: 7 +logx1246 log10 2 -> 0.3010300 Inexact Rounded +precision: 6 +logx1247 log10 2 -> 0.301030 Inexact Rounded +precision: 5 +logx1248 log10 2 -> 0.30103 Inexact Rounded +precision: 4 +logx1249 log10 2 -> 0.3010 Inexact Rounded +precision: 3 +logx1250 log10 2 -> 0.301 Inexact Rounded +precision: 2 +logx1251 log10 2 -> 0.30 Inexact Rounded +precision: 1 +logx1252 log10 2 -> 0.3 Inexact Rounded + +maxExponent: 384 +minExponent: -383 +precision: 16 +rounding: half_even + +-- More close-to-e, etc., tests +precision: 34 +logx1301 log10 2.718281828459045235360287471352661 -> 0.4342944819032518276511289189166048 Inexact Rounded +logx1302 log10 2.718281828459045235360287471352662 -> 0.4342944819032518276511289189166050 Inexact Rounded +logx1303 log10 2.718281828459045235360287471352663 -> 0.4342944819032518276511289189166052 Inexact Rounded +logx1304 log10 0.99999999999999999999999999999999 -> -4.342944819032518276511289189166073E-33 Inexact Rounded +logx1305 log10 0.999999999999999999999999999999999 -> -4.342944819032518276511289189166053E-34 Inexact Rounded +logx1306 log10 0.9999999999999999999999999999999999 -> -4.342944819032518276511289189166051E-35 Inexact Rounded +logx1307 log10 1.000000000000000000000000000000000 -> 0 +logx1308 log10 1.0000000000000000000000000000000001 -> 4.342944819032518276511289189166051E-35 Inexact Rounded +logx1309 log10 1.000000000000000000000000000000001 -> 4.342944819032518276511289189166049E-34 Inexact Rounded +logx1310 log10 1.00000000000000000000000000000001 -> 4.342944819032518276511289189166029E-33 Inexact Rounded +-- lower p +precision: 7 +logx1320 log10 0.999999 -> -4.342947E-7 Inexact Rounded +logx1321 log10 0.9999999 -> -4.342945E-8 Inexact Rounded +logx1322 log10 0.99999999 -> -4.342945E-9 Inexact Rounded +logx1323 log10 0.999999999 -> -4.342945E-10 Inexact Rounded +logx1324 log10 1.00000000 -> 0 +logx1325 log10 1.00000001 -> 4.342945E-9 Inexact Rounded +logx1326 log10 1.0000001 -> 4.342945E-8 Inexact Rounded +logx1327 log10 1.000001 -> 4.342943E-7 Inexact Rounded + +-- near 10^3 +precision: 9 +logx1331 log10 999.9999998 -> 3.00000000 Inexact Rounded +logx1332 log10 999.9999999 -> 3.00000000 Inexact Rounded +logx1333 log10 1000.000000 -> 3 +logx1334 log10 1000.000001 -> 3.00000000 Inexact Rounded +logx1335 log10 1000.000002 -> 3.00000000 Inexact Rounded +precision: 16 +logx1341 log10 999.9999998 -> 2.999999999913141 Inexact Rounded +logx1342 log10 999.9999999 -> 2.999999999956571 Inexact Rounded +logx1343 log10 1000.000000 -> 3 +logx1344 log10 1000.000001 -> 3.000000000434294 Inexact Rounded +logx1345 log10 1000.000002 -> 3.000000000868589 Inexact Rounded + +-- suggestions from Ilan Nehama +logx1400 log10 10E-3 -> -2 +logx1401 log10 10E-2 -> -1 +logx1402 log10 100E-2 -> 0 +logx1403 log10 1000E-2 -> 1 +logx1404 log10 10000E-2 -> 2 +logx1405 log10 10E-1 -> 0 +logx1406 log10 100E-1 -> 1 +logx1407 log10 1000E-1 -> 2 +logx1408 log10 10000E-1 -> 3 +logx1409 log10 10E0 -> 1 +logx1410 log10 100E0 -> 2 +logx1411 log10 1000E0 -> 3 +logx1412 log10 10000E0 -> 4 +logx1413 log10 10E1 -> 2 +logx1414 log10 100E1 -> 3 +logx1415 log10 1000E1 -> 4 +logx1416 log10 10000E1 -> 5 +logx1417 log10 10E2 -> 3 +logx1418 log10 100E2 -> 4 +logx1419 log10 1000E2 -> 5 +logx1420 log10 10000E2 -> 6 + +-- Randoms +-- P=50, within 0-9999 +Precision: 50 +logx2501 log10 0.00035448001667968141775891246991912655961163345904 -> -3.4504082425411775290864053318247274944685586188505 Inexact Rounded +logx2502 log10 70.636455726424311228255338637935330826995136597644 -> 1.8490288998408492045793070255302335558140975719247 Inexact Rounded +logx2503 log10 0.00000000000000233550362473821889060812804063040169 -> -14.631619454343834858023578299142866557717904223667 Inexact Rounded +logx2504 log10 97.783628621523244679901260358286898958832135433764 -> 1.9902661493224219517897657964362571690592734407330 Inexact Rounded +logx2505 log10 0062.2377135315858392802612812022807838599572017342 -> 1.7940536293085066199287632725026837018486533544141 Inexact Rounded +logx2506 log10 6.3767634652071053619977602804724129652981747879532 -> 0.80460030789825961615100163576080761326857374098644 Inexact Rounded +logx2507 log10 63.297088981313278529306533814195068850532666658798 -> 1.8013837373724427092417170149098614410849353839673 Inexact Rounded +logx2508 log10 0.00000077239693316881797717820110898167721602299187 -> -6.1121594592718550613773886241951966264826760310047 Inexact Rounded +logx2509 log10 0.00000003953580359780185534830572461922527831395002 -> -7.4030094293833847136252547069905477213541787177561 Inexact Rounded +logx2510 log10 754.62905817369989169188998111527272688791544577204 -> 2.8777335243761300047758534304371912099958057545416 Inexact Rounded +logx2511 log10 0.00000048360378410241428936607147056283282849158312 -> -6.3155103095309353457604038397980091650760346334512 Inexact Rounded +logx2512 log10 0.00007509037583645612577196104591672080542932166089 -> -4.1244157219700166314012344705538088030592896111026 Inexact Rounded +logx2513 log10 0.00000000000705475944638915053419839063567898092064 -> -11.151517790256466048553810002525868198178167950377 Inexact Rounded +logx2514 log10 9.6210300460497657917445410947099633479609165120661 -> 0.98322157093260978206633922877716078683518617768411 Inexact Rounded +logx2515 log10 0.00000000050150361386555527496607245976120864985611 -> -9.2997259330798261040411086835563234390934934629340 Inexact Rounded +logx2516 log10 098.24754029731994125797723545333677604490074810751 -> 1.9923216862874337077795278629351060819105679670633 Inexact Rounded +logx2517 log10 7.5091998150046994320441463854301624742491015752980 -> 0.87559366078005924080766469158763499725414024128781 Inexact Rounded +logx2518 log10 0.00000000000079540571273330075193668596942268542425 -> -12.099411294165176028817305108475326325006250936963 Inexact Rounded +logx2519 log10 0.00000042395034799555215782907515074134154915491701 -> -6.3726850039125381134069450802108893075604464135297 Inexact Rounded +logx2520 log10 56.683376304674355481905023145238799909301732694982 -> 1.7534557107853480435703421826077606250636580091754 Inexact Rounded +logx2521 log10 48.734033811444195070807606721517169810438049581227 -> 1.6878323602741065190942654710049433808208291564049 Inexact Rounded +logx2522 log10 0.00074830310930046865009851706989430228561880221063 -> -3.1259224502209974082223667712016445572431791920618 Inexact Rounded +logx2523 log10 36.677348885111593384020836720396262497122708598359 -> 1.5643979364260796086754530282302605477567469395425 Inexact Rounded +logx2524 log10 0.00000000000000004495678560480432858812419145833744 -> -16.347204748239740510014320630363244015916029619561 Inexact Rounded +logx2525 log10 9509.5854013650642799374159131940108748594774307104 -> 3.9781615829916326741100166519726824430945406302661 Inexact Rounded +logx2526 log10 0.07834891268689177014044454793608715276615743819097 -> -1.1059670262197643147805517398621288897669876996348 Inexact Rounded +logx2527 log10 0.00000029584529880706128444454688454999032801904794 -> -6.5289353275814043710076526920566721570375026917206 Inexact Rounded +logx2528 log10 3.0713496544497618098794332787772186176981011904294 -> 0.48732926103896828546424341029492468100431414072994 Inexact Rounded +logx2529 log10 352.66392670788816474407442785460803833927136413943 -> 2.5473610388199562714709836398243933320284077008314 Inexact Rounded +logx2530 log10 0.00304743125181876267210516527361742185617091801650 -> -2.5160660830163981967774124745311497447050056400207 Inexact Rounded +logx2531 log10 0.00000076120535894952136499250364604538117729437183 -> -6.1184981629047051532448413863950776496652483019415 Inexact Rounded +logx2532 log10 769.88795978534353052965286195053735007473187735815 -> 2.8864275277862652709986498581064117950288798222100 Inexact Rounded +logx2533 log10 0.00000000000000041297494808612226304619570016336188 -> -15.384076292745415917510668454361868659468669804710 Inexact Rounded +logx2534 log10 860.88864595714426940247940960258558876903741966974 -> 2.9349469800554277915920278090647283233440859155176 Inexact Rounded +logx2535 log10 5839.0328812994787235900178587371051096898683972444 -> 3.7663409208972392569269125539438874737147906238543 Inexact Rounded +logx2536 log10 0.00000028532710151284840471670497112821201598377841 -> -6.5446569753514027675878879843238065488490618159490 Inexact Rounded +logx2537 log10 0.00000000000000009734490059931638483445631835651581 -> -16.011686794011271135978633880864278692254243106931 Inexact Rounded +logx2538 log10 5.8610949526439529489252302463450302981511714144330 -> 0.76797875722452549281028552067645732490929361952278 Inexact Rounded +logx2539 log10 6.6282432221115923372151148990137179611977576327206 -> 0.82139843639227213211012044000785757267155736071361 Inexact Rounded +logx2540 log10 0.00000000001994071862386846626954819923923344413454 -> -10.700259194632339980266559224447212260115021637626 Inexact Rounded + +-- P=34, within 0-9999 +Precision: 34 +logx2201 log10 1.522513203889714179088327328864183 -> 0.1825610677098896250496651330492109 Inexact Rounded +logx2202 log10 0.171123774769717316154080888930404 -> -0.7666896483548462582461898092764408 Inexact Rounded +logx2203 log10 0.0000000997467236251714283104963838 -> -7.001101360652518274271569010312115 Inexact Rounded +logx2204 log10 0.0008856103624122479769647543468633 -> -3.052757310476070891830490327138190 Inexact Rounded +logx2205 log10 1.938274868738032930709498221236758 -> 0.2874153648259449520201536171714594 Inexact Rounded +logx2206 log10 479.5667847823826713082613445010097 -> 2.680849095850361068709165157286435 Inexact Rounded +logx2207 log10 8856.136599178820202141823157336804 -> 3.947244306584767101480454261950559 Inexact Rounded +logx2208 log10 0.0000911026318801903982642871344858 -> -4.040469076434979398438617464033826 Inexact Rounded +logx2209 log10 0.0000000000017271112650427414732630 -> -11.76267968314038748995178212654921 Inexact Rounded +logx2210 log10 6.962605370078885647639503548229695 -> 0.8427717807200322352686396925992250 Inexact Rounded +logx2211 log10 0.3354804428992793132855923541692781 -> -0.4743327923012159170967636070844834 Inexact Rounded +logx2212 log10 2.079864257474859008252165836663504 -> 0.3180349916198059046812506741388856 Inexact Rounded +logx2213 log10 2805.479529292939499220276986621988 -> 3.448007104139974344565978780624744 Inexact Rounded +logx2214 log10 66.45731133034187374557028537213949 -> 1.822542767005644041661520936223086 Inexact Rounded +logx2215 log10 0.0000001206521261762681738274822835 -> -6.918465020390216969561494755767318 Inexact Rounded +logx2216 log10 0.0000000001884891916264401160472381 -> -9.724713548119065386091933007528633 Inexact Rounded +logx2217 log10 0.0000015467279551726326581314582759 -> -5.810586065070435383755759514608738 Inexact Rounded +logx2218 log10 0.0090776316728068586744633914135952 -> -2.042027442843745884503280954390114 Inexact Rounded +logx2219 log10 0.0000000000024541106528713393740030 -> -11.61010585935635713090119156069479 Inexact Rounded +logx2220 log10 14.12936879385863410081087750645856 -> 1.150122760895466989841057385742662 Inexact Rounded +logx2221 log10 0.0000036912481831392922922647231392 -> -5.432826753789892283556211380824203 Inexact Rounded +logx2222 log10 0.0000000004067477525420424270138734 -> -9.390674838050073122857868012475060 Inexact Rounded +logx2223 log10 7080.122562705399744969319589806194 -> 3.850040775747103318724330047546916 Inexact Rounded +logx2224 log10 261.3491411363679209175524790255725 -> 2.417221077227536319655699517530855 Inexact Rounded +logx2225 log10 003.9945581449915240094728380041494 -> 0.6014687471531988260823066997845691 Inexact Rounded +logx2226 log10 0.0000000000583549164588495206767840 -> -10.23392254834182677023231713519341 Inexact Rounded +logx2227 log10 9567.961832607240278342761088487484 -> 3.980819434211107631569386147016368 Inexact Rounded +logx2228 log10 06.26592979160342972777219828867033 -> 0.7969855243966221408595024012574729 Inexact Rounded +logx2229 log10 0.0000000000589847046598067273287319 -> -10.22926059078206218717755253582907 Inexact Rounded +logx2230 log10 567.9388648235589204769442863724997 -> 2.754301589058313576472380262907638 Inexact Rounded +logx2231 log10 039.7790325480037778918162264883415 -> 1.599654216592019199639285308997886 Inexact Rounded +logx2232 log10 0.0000000005123951921894162149817207 -> -9.290394953898862694847327137242690 Inexact Rounded +logx2233 log10 0.0000000000038500999723636904276723 -> -11.41452799337924056186867324854691 Inexact Rounded +logx2234 log10 0.0006726500658977759825616537935864 -> -3.172210810922768725687671849421792 Inexact Rounded +logx2235 log10 260.2400250475967528429943779126507 -> 2.415374092073799204236801383070064 Inexact Rounded +logx2236 log10 0.0000000006101942339385102585042548 -> -9.214531900562046557191261226632509 Inexact Rounded +logx2237 log10 0.0000000010846867501382746760066557 -> -8.964695664883282406359874242387236 Inexact Rounded +logx2238 log10 60.24078375568814769010333711509928 -> 1.779890613567084253168373266648922 Inexact Rounded +logx2239 log10 0.0012058738711757669337600252986093 -> -2.918698115012605915753728220896010 Inexact Rounded +logx2240 log10 230.9450930197841600611503095185600 -> 2.363508739056822846742942599628966 Inexact Rounded + +-- P=16, within 0-999 +Precision: 16 +logx2101 log10 0.0072067119605184 -> -2.142262835573038 Inexact Rounded +logx2102 log10 503.6828482226624 -> 2.702157162195652 Inexact Rounded +logx2103 log10 64.96074447821815 -> 1.812650993464174 Inexact Rounded +logx2104 log10 48.75408597467246 -> 1.688011018842600 Inexact Rounded +logx2105 log10 0.0329009839269587 -> -1.482791113975280 Inexact Rounded +logx2106 log10 223.5320415060633 -> 2.349339784523410 Inexact Rounded +logx2107 log10 73.12765002292194 -> 1.864081617476268 Inexact Rounded +logx2108 log10 487.3749378358509 -> 2.687863192802252 Inexact Rounded +logx2109 log10 0.0000019671987621 -> -5.706151757557926 Inexact Rounded +logx2110 log10 0.0570680660609784 -> -1.243606844697873 Inexact Rounded +logx2111 log10 33.10311638788998 -> 1.519868880976773 Inexact Rounded +logx2112 log10 0.0687382699187077 -> -1.162801402868185 Inexact Rounded +logx2113 log10 258.9416193626484 -> 2.413201859654145 Inexact Rounded +logx2114 log10 0.0005306100136736 -> -3.275224558269725 Inexact Rounded +logx2115 log10 65.78490393408572 -> 1.818126244825109 Inexact Rounded +logx2116 log10 504.2328842073510 -> 2.702631165346958 Inexact Rounded +logx2117 log10 9.417432755815027 -> 0.9739325278524503 Inexact Rounded +logx2118 log10 006.7054835355498 -> 0.8264301004947640 Inexact Rounded +logx2119 log10 0.0917012272363915 -> -1.037624852133399 Inexact Rounded +logx2120 log10 5.959404385244921 -> 0.7752028561953401 Inexact Rounded +logx2121 log10 0.0001209759148486 -> -3.917301084968903 Inexact Rounded +logx2122 log10 0.0004706112139838 -> -3.327337728428039 Inexact Rounded +logx2123 log10 0.0069700457377046 -> -2.156764372035771 Inexact Rounded +logx2124 log10 0.5155584569852619 -> -0.2877220847805025 Inexact Rounded +logx2125 log10 88.06005885607414 -> 1.944778971389913 Inexact Rounded +logx2126 log10 0.0448240038219866 -> -1.348489353509709 Inexact Rounded +logx2127 log10 3.419622484059565 -> 0.5339781639101145 Inexact Rounded +logx2128 log10 5.171123353858721 -> 0.7135848977142854 Inexact Rounded +logx2129 log10 0.0002133188319807 -> -3.670970802945872 Inexact Rounded +logx2130 log10 46.21086703136966 -> 1.664744117045149 Inexact Rounded +logx2131 log10 0.0000631053714415 -> -4.199933672639880 Inexact Rounded +logx2132 log10 78.66019196870698 -> 1.895755001962469 Inexact Rounded +logx2133 log10 0.0007152278351188 -> -3.145555592082297 Inexact Rounded +logx2134 log10 45.52509819928536 -> 1.658250891256892 Inexact Rounded +logx2135 log10 0.0000703227795740 -> -4.152903971697183 Inexact Rounded +logx2136 log10 26.24438641426669 -> 1.419036423550599 Inexact Rounded +logx2137 log10 0.0000044654829535 -> -5.350131564166817 Inexact Rounded +logx2138 log10 0.7360702733062529 -> -0.1330807211893611 Inexact Rounded +logx2139 log10 8.417059176469655 -> 0.9251603805112778 Inexact Rounded +logx2140 log10 0.0002926570767968 -> -3.533640969664818 Inexact Rounded + +-- P=7, within 0-99 +Precision: 7 +logx2001 log10 57.26089 -> 1.757858 Inexact Rounded +logx2002 log10 0.0575421 -> -1.240014 Inexact Rounded +logx2003 log10 0.5918465 -> -0.2277909 Inexact Rounded +logx2004 log10 0.0068776 -> -2.162563 Inexact Rounded +logx2005 log10 0.0066833 -> -2.175009 Inexact Rounded +logx2006 log10 9.926963 -> 0.9968164 Inexact Rounded +logx2007 log10 0.0041852 -> -2.378284 Inexact Rounded +logx2008 log10 84.15412 -> 1.925075 Inexact Rounded +logx2009 log10 2.466856 -> 0.3921438 Inexact Rounded +logx2010 log10 0.0058047 -> -2.236220 Inexact Rounded +logx2011 log10 9.885154 -> 0.9949834 Inexact Rounded +logx2012 log10 0.6667654 -> -0.1760269 Inexact Rounded +logx2013 log10 34.65736 -> 1.539795 Inexact Rounded +logx2014 log10 0.0026884 -> -2.570506 Inexact Rounded +logx2015 log10 0.0432767 -> -1.363746 Inexact Rounded +logx2016 log10 66.01407 -> 1.819637 Inexact Rounded +logx2017 log10 0.0070572 -> -2.151368 Inexact Rounded +logx2018 log10 0.0731613 -> -1.135719 Inexact Rounded +logx2019 log10 9.838983 -> 0.9929502 Inexact Rounded +logx2020 log10 15.89696 -> 1.201314 Inexact Rounded +logx2021 log10 8.459247 -> 0.9273317 Inexact Rounded +logx2022 log10 0.0010873 -> -2.963651 Inexact Rounded +logx2023 log10 0.6498619 -> -0.1871789 Inexact Rounded +logx2024 log10 0.0847008 -> -1.072112 Inexact Rounded +logx2025 log10 0.0075489 -> -2.122116 Inexact Rounded +logx2026 log10 51.11152 -> 1.708519 Inexact Rounded +logx2027 log10 0.7233866 -> -0.1406295 Inexact Rounded +logx2028 log10 2.254721 -> 0.3530928 Inexact Rounded +logx2029 log10 6.568444 -> 0.8174625 Inexact Rounded +logx2030 log10 83.72639 -> 1.922862 Inexact Rounded +logx2031 log10 6.720585 -> 0.8274071 Inexact Rounded +logx2032 log10 87.90366 -> 1.944007 Inexact Rounded +logx2033 log10 0.0433324 -> -1.363187 Inexact Rounded +logx2034 log10 34.63912 -> 1.539567 Inexact Rounded +logx2035 log10 0.8089059 -> -0.09210200 Inexact Rounded +logx2036 log10 7.793405 -> 0.8917272 Inexact Rounded +logx2037 log10 0.0041757 -> -2.379271 Inexact Rounded +logx2038 log10 7.135417 -> 0.8534194 Inexact Rounded +logx2039 log10 12.49570 -> 1.096761 Inexact Rounded +logx2040 log10 6.356276 -> 0.8032027 Inexact Rounded + +-------- +maxExponent: 384 +minExponent: -383 +precision: 16 +rounding: half_even + +-- special values +logx820 log10 Infinity -> Infinity +logx821 log10 0 -> -Infinity +logx822 log10 NaN -> NaN +logx823 log10 sNaN -> NaN Invalid_operation +-- propagating NaNs +logx824 log10 sNaN123 -> NaN123 Invalid_operation +logx825 log10 -sNaN321 -> -NaN321 Invalid_operation +logx826 log10 NaN456 -> NaN456 +logx827 log10 -NaN654 -> -NaN654 +logx828 log10 NaN1 -> NaN1 + + +-- Invalid operations due to restrictions +-- [next two probably skipped by most test harnesses] +precision: 100000000 +logx901 log10 1 -> NaN Invalid_context +precision: 99999999 +logx902 log10 0 -> NaN Invalid_context + +precision: 9 +maxExponent: 1000000 +minExponent: -999999 +logx903 log10 1 -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999999 +logx904 log10 0 -> -Infinity +maxExponent: 999999 +minExponent: -1000000 +logx905 log10 1 -> NaN Invalid_context +maxExponent: 999999 +minExponent: -999998 +logx906 log10 0 -> -Infinity + +-- Null test +logx900 log10 # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/logb.decTest b/Lib/test/decimaltestdata/logb.decTest index 8b79006257d..ff420d0a842 100644 --- a/Lib/test/decimaltestdata/logb.decTest +++ b/Lib/test/decimaltestdata/logb.decTest @@ -1,188 +1,188 @@ ------------------------------------------------------------------------- --- logb.decTest -- return integral adjusted exponent as per 754r -- --- Copyright (c) IBM Corporation, 2005, 2009. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This emphasises the testing of notable cases, as they will often --- have unusual paths (especially the 10**n results). - -extended: 1 -rounding: half_even -maxExponent: 999 -minexponent: -999 - --- basics & examples -precision: 9 -logbx001 logb 0 -> -Infinity Division_by_zero -logbx002 logb 1E-999 -> -999 -logbx003 logb 9E-999 -> -999 -logbx004 logb 0.001 -> -3 -logbx005 logb 0.03 -> -2 -logbx006 logb 1 -> 0 -logbx007 logb 2 -> 0 -logbx008 logb 2.5 -> 0 -logbx009 logb 2.50 -> 0 -logbx010 logb 10 -> 1 -logbx011 logb 70 -> 1 -logbx012 logb 100 -> 2 -logbx013 logb 250 -> 2 -logbx014 logb +Infinity -> Infinity - --- negatives are treated as positives -logbx021 logb -0 -> -Infinity Division_by_zero -logbx022 logb -1E-999 -> -999 -logbx023 logb -9E-999 -> -999 -logbx024 logb -0.001 -> -3 -logbx025 logb -1 -> 0 -logbx026 logb -2 -> 0 -logbx027 logb -10 -> 1 -logbx028 logb -70 -> 1 -logbx029 logb -100 -> 2 -logbx030 logb -100000000 -> 8 -logbx031 logb -Infinity -> Infinity - --- zeros -logbx111 logb 0 -> -Infinity Division_by_zero -logbx112 logb -0 -> -Infinity Division_by_zero -logbx113 logb 0E+4 -> -Infinity Division_by_zero -logbx114 logb -0E+4 -> -Infinity Division_by_zero -logbx115 logb 0.0000 -> -Infinity Division_by_zero -logbx116 logb -0.0000 -> -Infinity Division_by_zero -logbx117 logb 0E-141 -> -Infinity Division_by_zero -logbx118 logb -0E-141 -> -Infinity Division_by_zero - --- full coefficients, alternating bits -logbx121 logb 268268268 -> 8 -logbx122 logb -268268268 -> 8 -logbx123 logb 134134134 -> 8 -logbx124 logb -134134134 -> 8 - --- Nmax, Nmin, Ntiny -logbx131 logb 9.99999999E+999 -> 999 -logbx132 logb 1E-999 -> -999 -logbx133 logb 1.00000000E-999 -> -999 -logbx134 logb 1E-1007 -> -1007 - -logbx135 logb -1E-1007 -> -1007 -logbx136 logb -1.00000000E-999 -> -999 -logbx137 logb -1E-999 -> -999 -logbx138 logb -9.99999999E+999 -> 999 - --- ones -logbx0061 logb 1 -> 0 -logbx0062 logb 1.0 -> 0 -logbx0063 logb 1.000000000000000 -> 0 -logbx0064 logb 1.000000000000000000 -> 0 - --- notable cases -- exact powers of 10 -logbx1100 logb 1 -> 0 -logbx1101 logb 10 -> 1 -logbx1102 logb 100 -> 2 -logbx1103 logb 1000 -> 3 -logbx1104 logb 10000 -> 4 -logbx1105 logb 100000 -> 5 -logbx1106 logb 1000000 -> 6 -logbx1107 logb 10000000 -> 7 -logbx1108 logb 100000000 -> 8 -logbx1109 logb 1000000000 -> 9 -logbx1110 logb 10000000000 -> 10 -logbx1111 logb 100000000000 -> 11 -logbx1112 logb 1000000000000 -> 12 -logbx1113 logb 0.00000000001 -> -11 -logbx1114 logb 0.0000000001 -> -10 -logbx1115 logb 0.000000001 -> -9 -logbx1116 logb 0.00000001 -> -8 -logbx1117 logb 0.0000001 -> -7 -logbx1118 logb 0.000001 -> -6 -logbx1119 logb 0.00001 -> -5 -logbx1120 logb 0.0001 -> -4 -logbx1121 logb 0.001 -> -3 -logbx1122 logb 0.01 -> -2 -logbx1123 logb 0.1 -> -1 -logbx1124 logb 1E-99 -> -99 -logbx1125 logb 1E-100 -> -100 -logbx1126 logb 1E-383 -> -383 -logbx1127 logb 1E-999 -> -999 - --- suggestions from Ilan Nehama -logbx1400 logb 10E-3 -> -2 -logbx1401 logb 10E-2 -> -1 -logbx1402 logb 100E-2 -> 0 -logbx1403 logb 1000E-2 -> 1 -logbx1404 logb 10000E-2 -> 2 -logbx1405 logb 10E-1 -> 0 -logbx1406 logb 100E-1 -> 1 -logbx1407 logb 1000E-1 -> 2 -logbx1408 logb 10000E-1 -> 3 -logbx1409 logb 10E0 -> 1 -logbx1410 logb 100E0 -> 2 -logbx1411 logb 1000E0 -> 3 -logbx1412 logb 10000E0 -> 4 -logbx1413 logb 10E1 -> 2 -logbx1414 logb 100E1 -> 3 -logbx1415 logb 1000E1 -> 4 -logbx1416 logb 10000E1 -> 5 -logbx1417 logb 10E2 -> 3 -logbx1418 logb 100E2 -> 4 -logbx1419 logb 1000E2 -> 5 -logbx1420 logb 10000E2 -> 6 - --- inexacts -precision: 2 -logbx1500 logb 10000E2 -> 6 -logbx1501 logb 1E+99 -> 99 -logbx1502 logb 1E-99 -> -99 -logbx1503 logb 1E+100 -> 1.0E+2 Rounded -logbx1504 logb 1E+999 -> 1.0E+3 Inexact Rounded -logbx1505 logb 1E-100 -> -1.0E+2 Rounded -logbx1506 logb 1E-999 -> -1.0E+3 Inexact Rounded -logbx1507 logb 1E-1111 -> -1.1E+3 Inexact Rounded -logbx1508 logb 1E-3333 -> -3.3E+3 Inexact Rounded -logbx1509 logb 1E-6666 -> -6.7E+3 Inexact Rounded -logbx1510 logb 1E+999999999 -> 1.0E+9 Inexact Rounded -logbx1511 logb 1E-999999999 -> -1.0E+9 Inexact Rounded -precision: 1 -logbx1517 logb 1E-1111 -> -1E+3 Inexact Rounded -logbx1518 logb 1E-3333 -> -3E+3 Inexact Rounded -logbx1519 logb 1E-6666 -> -7E+3 Inexact Rounded -precision: 8 -logbx1520 logb 1E+999999999 -> 1.0000000E+9 Inexact Rounded -logbx1521 logb 1E-999999999 -> -1.0000000E+9 Inexact Rounded -precision: 9 -logbx1523 logb 1E+999999999 -> 999999999 -logbx1524 logb 1E-999999999 -> -999999999 - --- special values -precision: 9 -logbx820 logb Infinity -> Infinity -logbx821 logb -Infinity -> Infinity -logbx822 logb 0 -> -Infinity Division_by_zero -logbx823 logb NaN -> NaN -logbx824 logb sNaN -> NaN Invalid_operation --- propagating NaNs -logbx825 logb sNaN123 -> NaN123 Invalid_operation -logbx826 logb -sNaN321 -> -NaN321 Invalid_operation -logbx827 logb NaN456 -> NaN456 -logbx828 logb -NaN654 -> -NaN654 -logbx829 logb NaN1 -> NaN1 - --- Null test -logbx900 logb # -> NaN Invalid_operation - - +------------------------------------------------------------------------ +-- logb.decTest -- return integral adjusted exponent as per 754r -- +-- Copyright (c) IBM Corporation, 2005, 2009. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This emphasises the testing of notable cases, as they will often +-- have unusual paths (especially the 10**n results). + +extended: 1 +rounding: half_even +maxExponent: 999 +minexponent: -999 + +-- basics & examples +precision: 9 +logbx001 logb 0 -> -Infinity Division_by_zero +logbx002 logb 1E-999 -> -999 +logbx003 logb 9E-999 -> -999 +logbx004 logb 0.001 -> -3 +logbx005 logb 0.03 -> -2 +logbx006 logb 1 -> 0 +logbx007 logb 2 -> 0 +logbx008 logb 2.5 -> 0 +logbx009 logb 2.50 -> 0 +logbx010 logb 10 -> 1 +logbx011 logb 70 -> 1 +logbx012 logb 100 -> 2 +logbx013 logb 250 -> 2 +logbx014 logb +Infinity -> Infinity + +-- negatives are treated as positives +logbx021 logb -0 -> -Infinity Division_by_zero +logbx022 logb -1E-999 -> -999 +logbx023 logb -9E-999 -> -999 +logbx024 logb -0.001 -> -3 +logbx025 logb -1 -> 0 +logbx026 logb -2 -> 0 +logbx027 logb -10 -> 1 +logbx028 logb -70 -> 1 +logbx029 logb -100 -> 2 +logbx030 logb -100000000 -> 8 +logbx031 logb -Infinity -> Infinity + +-- zeros +logbx111 logb 0 -> -Infinity Division_by_zero +logbx112 logb -0 -> -Infinity Division_by_zero +logbx113 logb 0E+4 -> -Infinity Division_by_zero +logbx114 logb -0E+4 -> -Infinity Division_by_zero +logbx115 logb 0.0000 -> -Infinity Division_by_zero +logbx116 logb -0.0000 -> -Infinity Division_by_zero +logbx117 logb 0E-141 -> -Infinity Division_by_zero +logbx118 logb -0E-141 -> -Infinity Division_by_zero + +-- full coefficients, alternating bits +logbx121 logb 268268268 -> 8 +logbx122 logb -268268268 -> 8 +logbx123 logb 134134134 -> 8 +logbx124 logb -134134134 -> 8 + +-- Nmax, Nmin, Ntiny +logbx131 logb 9.99999999E+999 -> 999 +logbx132 logb 1E-999 -> -999 +logbx133 logb 1.00000000E-999 -> -999 +logbx134 logb 1E-1007 -> -1007 + +logbx135 logb -1E-1007 -> -1007 +logbx136 logb -1.00000000E-999 -> -999 +logbx137 logb -1E-999 -> -999 +logbx138 logb -9.99999999E+999 -> 999 + +-- ones +logbx0061 logb 1 -> 0 +logbx0062 logb 1.0 -> 0 +logbx0063 logb 1.000000000000000 -> 0 +logbx0064 logb 1.000000000000000000 -> 0 + +-- notable cases -- exact powers of 10 +logbx1100 logb 1 -> 0 +logbx1101 logb 10 -> 1 +logbx1102 logb 100 -> 2 +logbx1103 logb 1000 -> 3 +logbx1104 logb 10000 -> 4 +logbx1105 logb 100000 -> 5 +logbx1106 logb 1000000 -> 6 +logbx1107 logb 10000000 -> 7 +logbx1108 logb 100000000 -> 8 +logbx1109 logb 1000000000 -> 9 +logbx1110 logb 10000000000 -> 10 +logbx1111 logb 100000000000 -> 11 +logbx1112 logb 1000000000000 -> 12 +logbx1113 logb 0.00000000001 -> -11 +logbx1114 logb 0.0000000001 -> -10 +logbx1115 logb 0.000000001 -> -9 +logbx1116 logb 0.00000001 -> -8 +logbx1117 logb 0.0000001 -> -7 +logbx1118 logb 0.000001 -> -6 +logbx1119 logb 0.00001 -> -5 +logbx1120 logb 0.0001 -> -4 +logbx1121 logb 0.001 -> -3 +logbx1122 logb 0.01 -> -2 +logbx1123 logb 0.1 -> -1 +logbx1124 logb 1E-99 -> -99 +logbx1125 logb 1E-100 -> -100 +logbx1126 logb 1E-383 -> -383 +logbx1127 logb 1E-999 -> -999 + +-- suggestions from Ilan Nehama +logbx1400 logb 10E-3 -> -2 +logbx1401 logb 10E-2 -> -1 +logbx1402 logb 100E-2 -> 0 +logbx1403 logb 1000E-2 -> 1 +logbx1404 logb 10000E-2 -> 2 +logbx1405 logb 10E-1 -> 0 +logbx1406 logb 100E-1 -> 1 +logbx1407 logb 1000E-1 -> 2 +logbx1408 logb 10000E-1 -> 3 +logbx1409 logb 10E0 -> 1 +logbx1410 logb 100E0 -> 2 +logbx1411 logb 1000E0 -> 3 +logbx1412 logb 10000E0 -> 4 +logbx1413 logb 10E1 -> 2 +logbx1414 logb 100E1 -> 3 +logbx1415 logb 1000E1 -> 4 +logbx1416 logb 10000E1 -> 5 +logbx1417 logb 10E2 -> 3 +logbx1418 logb 100E2 -> 4 +logbx1419 logb 1000E2 -> 5 +logbx1420 logb 10000E2 -> 6 + +-- inexacts +precision: 2 +logbx1500 logb 10000E2 -> 6 +logbx1501 logb 1E+99 -> 99 +logbx1502 logb 1E-99 -> -99 +logbx1503 logb 1E+100 -> 1.0E+2 Rounded +logbx1504 logb 1E+999 -> 1.0E+3 Inexact Rounded +logbx1505 logb 1E-100 -> -1.0E+2 Rounded +logbx1506 logb 1E-999 -> -1.0E+3 Inexact Rounded +logbx1507 logb 1E-1111 -> -1.1E+3 Inexact Rounded +logbx1508 logb 1E-3333 -> -3.3E+3 Inexact Rounded +logbx1509 logb 1E-6666 -> -6.7E+3 Inexact Rounded +logbx1510 logb 1E+999999999 -> 1.0E+9 Inexact Rounded +logbx1511 logb 1E-999999999 -> -1.0E+9 Inexact Rounded +precision: 1 +logbx1517 logb 1E-1111 -> -1E+3 Inexact Rounded +logbx1518 logb 1E-3333 -> -3E+3 Inexact Rounded +logbx1519 logb 1E-6666 -> -7E+3 Inexact Rounded +precision: 8 +logbx1520 logb 1E+999999999 -> 1.0000000E+9 Inexact Rounded +logbx1521 logb 1E-999999999 -> -1.0000000E+9 Inexact Rounded +precision: 9 +logbx1523 logb 1E+999999999 -> 999999999 +logbx1524 logb 1E-999999999 -> -999999999 + +-- special values +precision: 9 +logbx820 logb Infinity -> Infinity +logbx821 logb -Infinity -> Infinity +logbx822 logb 0 -> -Infinity Division_by_zero +logbx823 logb NaN -> NaN +logbx824 logb sNaN -> NaN Invalid_operation +-- propagating NaNs +logbx825 logb sNaN123 -> NaN123 Invalid_operation +logbx826 logb -sNaN321 -> -NaN321 Invalid_operation +logbx827 logb NaN456 -> NaN456 +logbx828 logb -NaN654 -> -NaN654 +logbx829 logb NaN1 -> NaN1 + +-- Null test +logbx900 logb # -> NaN Invalid_operation + + diff --git a/Lib/test/decimaltestdata/maxmag.decTest b/Lib/test/decimaltestdata/maxmag.decTest index 265e912ed45..6b442130798 100644 --- a/Lib/test/decimaltestdata/maxmag.decTest +++ b/Lib/test/decimaltestdata/maxmag.decTest @@ -1,404 +1,404 @@ ------------------------------------------------------------------------- --- maxmag.decTest -- decimal maximum by magnitude -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- sanity checks -mxgx001 maxmag -2 -2 -> -2 -mxgx002 maxmag -2 -1 -> -2 -mxgx003 maxmag -2 0 -> -2 -mxgx004 maxmag -2 1 -> -2 -mxgx005 maxmag -2 2 -> 2 -mxgx006 maxmag -1 -2 -> -2 -mxgx007 maxmag -1 -1 -> -1 -mxgx008 maxmag -1 0 -> -1 -mxgx009 maxmag -1 1 -> 1 -mxgx010 maxmag -1 2 -> 2 -mxgx011 maxmag 0 -2 -> -2 -mxgx012 maxmag 0 -1 -> -1 -mxgx013 maxmag 0 0 -> 0 -mxgx014 maxmag 0 1 -> 1 -mxgx015 maxmag 0 2 -> 2 -mxgx016 maxmag 1 -2 -> -2 -mxgx017 maxmag 1 -1 -> 1 -mxgx018 maxmag 1 0 -> 1 -mxgx019 maxmag 1 1 -> 1 -mxgx020 maxmag 1 2 -> 2 -mxgx021 maxmag 2 -2 -> 2 -mxgx022 maxmag 2 -1 -> 2 -mxgx023 maxmag 2 0 -> 2 -mxgx025 maxmag 2 1 -> 2 -mxgx026 maxmag 2 2 -> 2 - --- extended zeros -mxgx030 maxmag 0 0 -> 0 -mxgx031 maxmag 0 -0 -> 0 -mxgx032 maxmag 0 -0.0 -> 0 -mxgx033 maxmag 0 0.0 -> 0 -mxgx034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen -mxgx035 maxmag -0 -0 -> -0 -mxgx036 maxmag -0 -0.0 -> -0.0 -mxgx037 maxmag -0 0.0 -> 0.0 -mxgx038 maxmag 0.0 0 -> 0 -mxgx039 maxmag 0.0 -0 -> 0.0 -mxgx040 maxmag 0.0 -0.0 -> 0.0 -mxgx041 maxmag 0.0 0.0 -> 0.0 -mxgx042 maxmag -0.0 0 -> 0 -mxgx043 maxmag -0.0 -0 -> -0.0 -mxgx044 maxmag -0.0 -0.0 -> -0.0 -mxgx045 maxmag -0.0 0.0 -> 0.0 - -mxgx050 maxmag -0E1 0E1 -> 0E+1 -mxgx051 maxmag -0E2 0E2 -> 0E+2 -mxgx052 maxmag -0E2 0E1 -> 0E+1 -mxgx053 maxmag -0E1 0E2 -> 0E+2 -mxgx054 maxmag 0E1 -0E1 -> 0E+1 -mxgx055 maxmag 0E2 -0E2 -> 0E+2 -mxgx056 maxmag 0E2 -0E1 -> 0E+2 -mxgx057 maxmag 0E1 -0E2 -> 0E+1 - -mxgx058 maxmag 0E1 0E1 -> 0E+1 -mxgx059 maxmag 0E2 0E2 -> 0E+2 -mxgx060 maxmag 0E2 0E1 -> 0E+2 -mxgx061 maxmag 0E1 0E2 -> 0E+2 -mxgx062 maxmag -0E1 -0E1 -> -0E+1 -mxgx063 maxmag -0E2 -0E2 -> -0E+2 -mxgx064 maxmag -0E2 -0E1 -> -0E+1 -mxgx065 maxmag -0E1 -0E2 -> -0E+1 - --- Specials -precision: 9 -mxgx090 maxmag Inf -Inf -> Infinity -mxgx091 maxmag Inf -1000 -> Infinity -mxgx092 maxmag Inf -1 -> Infinity -mxgx093 maxmag Inf -0 -> Infinity -mxgx094 maxmag Inf 0 -> Infinity -mxgx095 maxmag Inf 1 -> Infinity -mxgx096 maxmag Inf 1000 -> Infinity -mxgx097 maxmag Inf Inf -> Infinity -mxgx098 maxmag -1000 Inf -> Infinity -mxgx099 maxmag -Inf Inf -> Infinity -mxgx100 maxmag -1 Inf -> Infinity -mxgx101 maxmag -0 Inf -> Infinity -mxgx102 maxmag 0 Inf -> Infinity -mxgx103 maxmag 1 Inf -> Infinity -mxgx104 maxmag 1000 Inf -> Infinity -mxgx105 maxmag Inf Inf -> Infinity - -mxgx120 maxmag -Inf -Inf -> -Infinity -mxgx121 maxmag -Inf -1000 -> -Infinity -mxgx122 maxmag -Inf -1 -> -Infinity -mxgx123 maxmag -Inf -0 -> -Infinity -mxgx124 maxmag -Inf 0 -> -Infinity -mxgx125 maxmag -Inf 1 -> -Infinity -mxgx126 maxmag -Inf 1000 -> -Infinity -mxgx127 maxmag -Inf Inf -> Infinity -mxgx128 maxmag -Inf -Inf -> -Infinity -mxgx129 maxmag -1000 -Inf -> -Infinity -mxgx130 maxmag -1 -Inf -> -Infinity -mxgx131 maxmag -0 -Inf -> -Infinity -mxgx132 maxmag 0 -Inf -> -Infinity -mxgx133 maxmag 1 -Inf -> -Infinity -mxgx134 maxmag 1000 -Inf -> -Infinity -mxgx135 maxmag Inf -Inf -> Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -mxgx141 maxmag NaN -Inf -> -Infinity -mxgx142 maxmag NaN -1000 -> -1000 -mxgx143 maxmag NaN -1 -> -1 -mxgx144 maxmag NaN -0 -> -0 -mxgx145 maxmag NaN 0 -> 0 -mxgx146 maxmag NaN 1 -> 1 -mxgx147 maxmag NaN 1000 -> 1000 -mxgx148 maxmag NaN Inf -> Infinity -mxgx149 maxmag NaN NaN -> NaN -mxgx150 maxmag -Inf NaN -> -Infinity -mxgx151 maxmag -1000 NaN -> -1000 -mxgx152 maxmag -1 NaN -> -1 -mxgx153 maxmag -0 NaN -> -0 -mxgx154 maxmag 0 NaN -> 0 -mxgx155 maxmag 1 NaN -> 1 -mxgx156 maxmag 1000 NaN -> 1000 -mxgx157 maxmag Inf NaN -> Infinity - -mxgx161 maxmag sNaN -Inf -> NaN Invalid_operation -mxgx162 maxmag sNaN -1000 -> NaN Invalid_operation -mxgx163 maxmag sNaN -1 -> NaN Invalid_operation -mxgx164 maxmag sNaN -0 -> NaN Invalid_operation -mxgx165 maxmag sNaN 0 -> NaN Invalid_operation -mxgx166 maxmag sNaN 1 -> NaN Invalid_operation -mxgx167 maxmag sNaN 1000 -> NaN Invalid_operation -mxgx168 maxmag sNaN NaN -> NaN Invalid_operation -mxgx169 maxmag sNaN sNaN -> NaN Invalid_operation -mxgx170 maxmag NaN sNaN -> NaN Invalid_operation -mxgx171 maxmag -Inf sNaN -> NaN Invalid_operation -mxgx172 maxmag -1000 sNaN -> NaN Invalid_operation -mxgx173 maxmag -1 sNaN -> NaN Invalid_operation -mxgx174 maxmag -0 sNaN -> NaN Invalid_operation -mxgx175 maxmag 0 sNaN -> NaN Invalid_operation -mxgx176 maxmag 1 sNaN -> NaN Invalid_operation -mxgx177 maxmag 1000 sNaN -> NaN Invalid_operation -mxgx178 maxmag Inf sNaN -> NaN Invalid_operation -mxgx179 maxmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -mxgx181 maxmag NaN9 -Inf -> -Infinity -mxgx182 maxmag NaN8 9 -> 9 -mxgx183 maxmag -NaN7 Inf -> Infinity - -mxgx184 maxmag -NaN1 NaN11 -> -NaN1 -mxgx185 maxmag NaN2 NaN12 -> NaN2 -mxgx186 maxmag -NaN13 -NaN7 -> -NaN13 -mxgx187 maxmag NaN14 -NaN5 -> NaN14 - -mxgx188 maxmag -Inf NaN4 -> -Infinity -mxgx189 maxmag -9 -NaN3 -> -9 -mxgx190 maxmag Inf NaN2 -> Infinity - -mxgx191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation -mxgx192 maxmag sNaN98 -1 -> NaN98 Invalid_operation -mxgx193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation -mxgx194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation -mxgx195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation -mxgx196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation -mxgx197 maxmag 0 sNaN91 -> NaN91 Invalid_operation -mxgx198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation -mxgx199 maxmag NaN sNaN89 -> NaN89 Invalid_operation - --- rounding checks -maxexponent: 999 -minexponent: -999 -precision: 9 -mxgx201 maxmag 12345678000 1 -> 1.23456780E+10 Rounded -mxgx202 maxmag 1 12345678000 -> 1.23456780E+10 Rounded -mxgx203 maxmag 1234567800 1 -> 1.23456780E+9 Rounded -mxgx204 maxmag 1 1234567800 -> 1.23456780E+9 Rounded -mxgx205 maxmag 1234567890 1 -> 1.23456789E+9 Rounded -mxgx206 maxmag 1 1234567890 -> 1.23456789E+9 Rounded -mxgx207 maxmag 1234567891 1 -> 1.23456789E+9 Inexact Rounded -mxgx208 maxmag 1 1234567891 -> 1.23456789E+9 Inexact Rounded -mxgx209 maxmag 12345678901 1 -> 1.23456789E+10 Inexact Rounded -mxgx210 maxmag 1 12345678901 -> 1.23456789E+10 Inexact Rounded -mxgx211 maxmag 1234567896 1 -> 1.23456790E+9 Inexact Rounded -mxgx212 maxmag 1 1234567896 -> 1.23456790E+9 Inexact Rounded -mxgx213 maxmag -1234567891 1 -> -1.23456789E+9 Inexact Rounded -mxgx214 maxmag 1 -1234567891 -> -1.23456789E+9 Inexact Rounded -mxgx215 maxmag -12345678901 1 -> -1.23456789E+10 Inexact Rounded -mxgx216 maxmag 1 -12345678901 -> -1.23456789E+10 Inexact Rounded -mxgx217 maxmag -1234567896 1 -> -1.23456790E+9 Inexact Rounded -mxgx218 maxmag 1 -1234567896 -> -1.23456790E+9 Inexact Rounded - -precision: 15 -mxgx221 maxmag 12345678000 1 -> 12345678000 -mxgx222 maxmag 1 12345678000 -> 12345678000 -mxgx223 maxmag 1234567800 1 -> 1234567800 -mxgx224 maxmag 1 1234567800 -> 1234567800 -mxgx225 maxmag 1234567890 1 -> 1234567890 -mxgx226 maxmag 1 1234567890 -> 1234567890 -mxgx227 maxmag 1234567891 1 -> 1234567891 -mxgx228 maxmag 1 1234567891 -> 1234567891 -mxgx229 maxmag 12345678901 1 -> 12345678901 -mxgx230 maxmag 1 12345678901 -> 12345678901 -mxgx231 maxmag 1234567896 1 -> 1234567896 -mxgx232 maxmag 1 1234567896 -> 1234567896 -mxgx233 maxmag -1234567891 1 -> -1234567891 -mxgx234 maxmag 1 -1234567891 -> -1234567891 -mxgx235 maxmag -12345678901 1 -> -12345678901 -mxgx236 maxmag 1 -12345678901 -> -12345678901 -mxgx237 maxmag -1234567896 1 -> -1234567896 -mxgx238 maxmag 1 -1234567896 -> -1234567896 - --- from examples -mxgx280 maxmag '3' '2' -> '3' -mxgx281 maxmag '-10' '3' -> '-10' -mxgx282 maxmag '1.0' '1' -> '1' -mxgx283 maxmag '1' '1.0' -> '1' -mxgx284 maxmag '7' 'NaN' -> '7' - --- overflow and underflow tests ... -maxExponent: 999999999 -minexponent: -999999999 -mxgx330 maxmag +1.23456789012345E-0 9E+999999999 -> 9E+999999999 -mxgx331 maxmag 9E+999999999 +1.23456789012345E-0 -> 9E+999999999 -mxgx332 maxmag +0.100 9E-999999999 -> 0.100 -mxgx333 maxmag 9E-999999999 +0.100 -> 0.100 -mxgx335 maxmag -1.23456789012345E-0 9E+999999999 -> 9E+999999999 -mxgx336 maxmag 9E+999999999 -1.23456789012345E-0 -> 9E+999999999 -mxgx337 maxmag -0.100 9E-999999999 -> -0.100 -mxgx338 maxmag 9E-999999999 -0.100 -> -0.100 - -mxgx339 maxmag 1e-599999999 1e-400000001 -> 1E-400000001 -mxgx340 maxmag 1e-599999999 1e-400000000 -> 1E-400000000 -mxgx341 maxmag 1e-600000000 1e-400000000 -> 1E-400000000 -mxgx342 maxmag 9e-999999998 0.01 -> 0.01 -mxgx343 maxmag 9e-999999998 0.1 -> 0.1 -mxgx344 maxmag 0.01 9e-999999998 -> 0.01 -mxgx345 maxmag 1e599999999 1e400000001 -> 1E+599999999 -mxgx346 maxmag 1e599999999 1e400000000 -> 1E+599999999 -mxgx347 maxmag 1e600000000 1e400000000 -> 1E+600000000 -mxgx348 maxmag 9e999999998 100 -> 9E+999999998 -mxgx349 maxmag 9e999999998 10 -> 9E+999999998 -mxgx350 maxmag 100 9e999999998 -> 9E+999999998 --- signs -mxgx351 maxmag 1e+777777777 1e+411111111 -> 1E+777777777 -mxgx352 maxmag 1e+777777777 -1e+411111111 -> 1E+777777777 -mxgx353 maxmag -1e+777777777 1e+411111111 -> -1E+777777777 -mxgx354 maxmag -1e+777777777 -1e+411111111 -> -1E+777777777 -mxgx355 maxmag 1e-777777777 1e-411111111 -> 1E-411111111 -mxgx356 maxmag 1e-777777777 -1e-411111111 -> -1E-411111111 -mxgx357 maxmag -1e-777777777 1e-411111111 -> 1E-411111111 -mxgx358 maxmag -1e-777777777 -1e-411111111 -> -1E-411111111 - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -mxgx401 maxmag Inf 1.1 -> Infinity -mxgx402 maxmag 1.1 1 -> 1.1 -mxgx403 maxmag 1 1.0 -> 1 -mxgx404 maxmag 1.0 0.1 -> 1.0 -mxgx405 maxmag 0.1 0.10 -> 0.1 -mxgx406 maxmag 0.10 0.100 -> 0.10 -mxgx407 maxmag 0.10 0 -> 0.10 -mxgx408 maxmag 0 0.0 -> 0 -mxgx409 maxmag 0.0 -0 -> 0.0 -mxgx410 maxmag 0.0 -0.0 -> 0.0 -mxgx411 maxmag 0.00 -0.0 -> 0.00 -mxgx412 maxmag 0.0 -0.00 -> 0.0 -mxgx413 maxmag 0 -0.0 -> 0 -mxgx414 maxmag 0 -0 -> 0 -mxgx415 maxmag -0.0 -0 -> -0.0 -mxgx416 maxmag -0 -0.100 -> -0.100 -mxgx417 maxmag -0.100 -0.10 -> -0.100 -mxgx418 maxmag -0.10 -0.1 -> -0.10 -mxgx419 maxmag -0.1 -1.0 -> -1.0 -mxgx420 maxmag -1.0 -1 -> -1.0 -mxgx421 maxmag -1 -1.1 -> -1.1 -mxgx423 maxmag -1.1 -Inf -> -Infinity --- same with operands reversed -mxgx431 maxmag 1.1 Inf -> Infinity -mxgx432 maxmag 1 1.1 -> 1.1 -mxgx433 maxmag 1.0 1 -> 1 -mxgx434 maxmag 0.1 1.0 -> 1.0 -mxgx435 maxmag 0.10 0.1 -> 0.1 -mxgx436 maxmag 0.100 0.10 -> 0.10 -mxgx437 maxmag 0 0.10 -> 0.10 -mxgx438 maxmag 0.0 0 -> 0 -mxgx439 maxmag -0 0.0 -> 0.0 -mxgx440 maxmag -0.0 0.0 -> 0.0 -mxgx441 maxmag -0.0 0.00 -> 0.00 -mxgx442 maxmag -0.00 0.0 -> 0.0 -mxgx443 maxmag -0.0 0 -> 0 -mxgx444 maxmag -0 0 -> 0 -mxgx445 maxmag -0 -0.0 -> -0.0 -mxgx446 maxmag -0.100 -0 -> -0.100 -mxgx447 maxmag -0.10 -0.100 -> -0.100 -mxgx448 maxmag -0.1 -0.10 -> -0.10 -mxgx449 maxmag -1.0 -0.1 -> -1.0 -mxgx450 maxmag -1 -1.0 -> -1.0 -mxgx451 maxmag -1.1 -1 -> -1.1 -mxgx453 maxmag -Inf -1.1 -> -Infinity --- largies -mxgx460 maxmag 1000 1E+3 -> 1E+3 -mxgx461 maxmag 1E+3 1000 -> 1E+3 -mxgx462 maxmag 1000 -1E+3 -> 1000 -mxgx463 maxmag 1E+3 -1000 -> 1E+3 -mxgx464 maxmag -1000 1E+3 -> 1E+3 -mxgx465 maxmag -1E+3 1000 -> 1000 -mxgx466 maxmag -1000 -1E+3 -> -1000 -mxgx467 maxmag -1E+3 -1000 -> -1000 - --- rounding (results treated as though plus) -maxexponent: 999999999 -minexponent: -999999999 -precision: 3 - -mxgx470 maxmag 1 .5 -> 1 -mxgx471 maxmag 10 5 -> 10 -mxgx472 maxmag 100 50 -> 100 -mxgx473 maxmag 1000 500 -> 1.00E+3 Rounded -mxgx474 maxmag 10000 5000 -> 1.00E+4 Rounded -mxgx475 maxmag 6 .5 -> 6 -mxgx476 maxmag 66 5 -> 66 -mxgx477 maxmag 666 50 -> 666 -mxgx478 maxmag 6666 500 -> 6.67E+3 Rounded Inexact -mxgx479 maxmag 66666 5000 -> 6.67E+4 Rounded Inexact -mxgx480 maxmag 33333 5000 -> 3.33E+4 Rounded Inexact -mxgx481 maxmag .5 1 -> 1 -mxgx482 maxmag .5 10 -> 10 -mxgx483 maxmag .5 100 -> 100 -mxgx484 maxmag .5 1000 -> 1.00E+3 Rounded -mxgx485 maxmag .5 10000 -> 1.00E+4 Rounded -mxgx486 maxmag .5 6 -> 6 -mxgx487 maxmag .5 66 -> 66 -mxgx488 maxmag .5 666 -> 666 -mxgx489 maxmag .5 6666 -> 6.67E+3 Rounded Inexact -mxgx490 maxmag .5 66666 -> 6.67E+4 Rounded Inexact -mxgx491 maxmag .5 33333 -> 3.33E+4 Rounded Inexact - --- overflow tests -maxexponent: 999999999 -minexponent: -999999999 -precision: 3 -mxgx500 maxmag 9.999E+999999999 0 -> Infinity Inexact Overflow Rounded -mxgx501 maxmag -9.999E+999999999 0 -> -Infinity Inexact Overflow Rounded - --- subnormals and underflow -precision: 3 -maxexponent: 999 -minexponent: -999 -mxgx510 maxmag 1.00E-999 0 -> 1.00E-999 -mxgx511 maxmag 0.1E-999 0 -> 1E-1000 Subnormal -mxgx512 maxmag 0.10E-999 0 -> 1.0E-1000 Subnormal -mxgx513 maxmag 0.100E-999 0 -> 1.0E-1000 Subnormal Rounded -mxgx514 maxmag 0.01E-999 0 -> 1E-1001 Subnormal --- next is rounded to Nmin -mxgx515 maxmag 0.999E-999 0 -> 1.00E-999 Inexact Rounded Subnormal Underflow -mxgx516 maxmag 0.099E-999 0 -> 1.0E-1000 Inexact Rounded Subnormal Underflow -mxgx517 maxmag 0.009E-999 0 -> 1E-1001 Inexact Rounded Subnormal Underflow -mxgx518 maxmag 0.001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped -mxgx519 maxmag 0.0009E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped -mxgx520 maxmag 0.0001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped - -mxgx530 maxmag -1.00E-999 0 -> -1.00E-999 -mxgx531 maxmag -0.1E-999 0 -> -1E-1000 Subnormal -mxgx532 maxmag -0.10E-999 0 -> -1.0E-1000 Subnormal -mxgx533 maxmag -0.100E-999 0 -> -1.0E-1000 Subnormal Rounded -mxgx534 maxmag -0.01E-999 0 -> -1E-1001 Subnormal --- next is rounded to -Nmin -mxgx535 maxmag -0.999E-999 0 -> -1.00E-999 Inexact Rounded Subnormal Underflow -mxgx536 maxmag -0.099E-999 0 -> -1.0E-1000 Inexact Rounded Subnormal Underflow -mxgx537 maxmag -0.009E-999 0 -> -1E-1001 Inexact Rounded Subnormal Underflow -mxgx538 maxmag -0.001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -mxgx539 maxmag -0.0009E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped -mxgx540 maxmag -0.0001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped - --- Null tests -mxgx900 maxmag 10 # -> NaN Invalid_operation -mxgx901 maxmag # 10 -> NaN Invalid_operation - - - +------------------------------------------------------------------------ +-- maxmag.decTest -- decimal maximum by magnitude -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- sanity checks +mxgx001 maxmag -2 -2 -> -2 +mxgx002 maxmag -2 -1 -> -2 +mxgx003 maxmag -2 0 -> -2 +mxgx004 maxmag -2 1 -> -2 +mxgx005 maxmag -2 2 -> 2 +mxgx006 maxmag -1 -2 -> -2 +mxgx007 maxmag -1 -1 -> -1 +mxgx008 maxmag -1 0 -> -1 +mxgx009 maxmag -1 1 -> 1 +mxgx010 maxmag -1 2 -> 2 +mxgx011 maxmag 0 -2 -> -2 +mxgx012 maxmag 0 -1 -> -1 +mxgx013 maxmag 0 0 -> 0 +mxgx014 maxmag 0 1 -> 1 +mxgx015 maxmag 0 2 -> 2 +mxgx016 maxmag 1 -2 -> -2 +mxgx017 maxmag 1 -1 -> 1 +mxgx018 maxmag 1 0 -> 1 +mxgx019 maxmag 1 1 -> 1 +mxgx020 maxmag 1 2 -> 2 +mxgx021 maxmag 2 -2 -> 2 +mxgx022 maxmag 2 -1 -> 2 +mxgx023 maxmag 2 0 -> 2 +mxgx025 maxmag 2 1 -> 2 +mxgx026 maxmag 2 2 -> 2 + +-- extended zeros +mxgx030 maxmag 0 0 -> 0 +mxgx031 maxmag 0 -0 -> 0 +mxgx032 maxmag 0 -0.0 -> 0 +mxgx033 maxmag 0 0.0 -> 0 +mxgx034 maxmag -0 0 -> 0 -- note: -0 = 0, but 0 chosen +mxgx035 maxmag -0 -0 -> -0 +mxgx036 maxmag -0 -0.0 -> -0.0 +mxgx037 maxmag -0 0.0 -> 0.0 +mxgx038 maxmag 0.0 0 -> 0 +mxgx039 maxmag 0.0 -0 -> 0.0 +mxgx040 maxmag 0.0 -0.0 -> 0.0 +mxgx041 maxmag 0.0 0.0 -> 0.0 +mxgx042 maxmag -0.0 0 -> 0 +mxgx043 maxmag -0.0 -0 -> -0.0 +mxgx044 maxmag -0.0 -0.0 -> -0.0 +mxgx045 maxmag -0.0 0.0 -> 0.0 + +mxgx050 maxmag -0E1 0E1 -> 0E+1 +mxgx051 maxmag -0E2 0E2 -> 0E+2 +mxgx052 maxmag -0E2 0E1 -> 0E+1 +mxgx053 maxmag -0E1 0E2 -> 0E+2 +mxgx054 maxmag 0E1 -0E1 -> 0E+1 +mxgx055 maxmag 0E2 -0E2 -> 0E+2 +mxgx056 maxmag 0E2 -0E1 -> 0E+2 +mxgx057 maxmag 0E1 -0E2 -> 0E+1 + +mxgx058 maxmag 0E1 0E1 -> 0E+1 +mxgx059 maxmag 0E2 0E2 -> 0E+2 +mxgx060 maxmag 0E2 0E1 -> 0E+2 +mxgx061 maxmag 0E1 0E2 -> 0E+2 +mxgx062 maxmag -0E1 -0E1 -> -0E+1 +mxgx063 maxmag -0E2 -0E2 -> -0E+2 +mxgx064 maxmag -0E2 -0E1 -> -0E+1 +mxgx065 maxmag -0E1 -0E2 -> -0E+1 + +-- Specials +precision: 9 +mxgx090 maxmag Inf -Inf -> Infinity +mxgx091 maxmag Inf -1000 -> Infinity +mxgx092 maxmag Inf -1 -> Infinity +mxgx093 maxmag Inf -0 -> Infinity +mxgx094 maxmag Inf 0 -> Infinity +mxgx095 maxmag Inf 1 -> Infinity +mxgx096 maxmag Inf 1000 -> Infinity +mxgx097 maxmag Inf Inf -> Infinity +mxgx098 maxmag -1000 Inf -> Infinity +mxgx099 maxmag -Inf Inf -> Infinity +mxgx100 maxmag -1 Inf -> Infinity +mxgx101 maxmag -0 Inf -> Infinity +mxgx102 maxmag 0 Inf -> Infinity +mxgx103 maxmag 1 Inf -> Infinity +mxgx104 maxmag 1000 Inf -> Infinity +mxgx105 maxmag Inf Inf -> Infinity + +mxgx120 maxmag -Inf -Inf -> -Infinity +mxgx121 maxmag -Inf -1000 -> -Infinity +mxgx122 maxmag -Inf -1 -> -Infinity +mxgx123 maxmag -Inf -0 -> -Infinity +mxgx124 maxmag -Inf 0 -> -Infinity +mxgx125 maxmag -Inf 1 -> -Infinity +mxgx126 maxmag -Inf 1000 -> -Infinity +mxgx127 maxmag -Inf Inf -> Infinity +mxgx128 maxmag -Inf -Inf -> -Infinity +mxgx129 maxmag -1000 -Inf -> -Infinity +mxgx130 maxmag -1 -Inf -> -Infinity +mxgx131 maxmag -0 -Inf -> -Infinity +mxgx132 maxmag 0 -Inf -> -Infinity +mxgx133 maxmag 1 -Inf -> -Infinity +mxgx134 maxmag 1000 -Inf -> -Infinity +mxgx135 maxmag Inf -Inf -> Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +mxgx141 maxmag NaN -Inf -> -Infinity +mxgx142 maxmag NaN -1000 -> -1000 +mxgx143 maxmag NaN -1 -> -1 +mxgx144 maxmag NaN -0 -> -0 +mxgx145 maxmag NaN 0 -> 0 +mxgx146 maxmag NaN 1 -> 1 +mxgx147 maxmag NaN 1000 -> 1000 +mxgx148 maxmag NaN Inf -> Infinity +mxgx149 maxmag NaN NaN -> NaN +mxgx150 maxmag -Inf NaN -> -Infinity +mxgx151 maxmag -1000 NaN -> -1000 +mxgx152 maxmag -1 NaN -> -1 +mxgx153 maxmag -0 NaN -> -0 +mxgx154 maxmag 0 NaN -> 0 +mxgx155 maxmag 1 NaN -> 1 +mxgx156 maxmag 1000 NaN -> 1000 +mxgx157 maxmag Inf NaN -> Infinity + +mxgx161 maxmag sNaN -Inf -> NaN Invalid_operation +mxgx162 maxmag sNaN -1000 -> NaN Invalid_operation +mxgx163 maxmag sNaN -1 -> NaN Invalid_operation +mxgx164 maxmag sNaN -0 -> NaN Invalid_operation +mxgx165 maxmag sNaN 0 -> NaN Invalid_operation +mxgx166 maxmag sNaN 1 -> NaN Invalid_operation +mxgx167 maxmag sNaN 1000 -> NaN Invalid_operation +mxgx168 maxmag sNaN NaN -> NaN Invalid_operation +mxgx169 maxmag sNaN sNaN -> NaN Invalid_operation +mxgx170 maxmag NaN sNaN -> NaN Invalid_operation +mxgx171 maxmag -Inf sNaN -> NaN Invalid_operation +mxgx172 maxmag -1000 sNaN -> NaN Invalid_operation +mxgx173 maxmag -1 sNaN -> NaN Invalid_operation +mxgx174 maxmag -0 sNaN -> NaN Invalid_operation +mxgx175 maxmag 0 sNaN -> NaN Invalid_operation +mxgx176 maxmag 1 sNaN -> NaN Invalid_operation +mxgx177 maxmag 1000 sNaN -> NaN Invalid_operation +mxgx178 maxmag Inf sNaN -> NaN Invalid_operation +mxgx179 maxmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +mxgx181 maxmag NaN9 -Inf -> -Infinity +mxgx182 maxmag NaN8 9 -> 9 +mxgx183 maxmag -NaN7 Inf -> Infinity + +mxgx184 maxmag -NaN1 NaN11 -> -NaN1 +mxgx185 maxmag NaN2 NaN12 -> NaN2 +mxgx186 maxmag -NaN13 -NaN7 -> -NaN13 +mxgx187 maxmag NaN14 -NaN5 -> NaN14 + +mxgx188 maxmag -Inf NaN4 -> -Infinity +mxgx189 maxmag -9 -NaN3 -> -9 +mxgx190 maxmag Inf NaN2 -> Infinity + +mxgx191 maxmag sNaN99 -Inf -> NaN99 Invalid_operation +mxgx192 maxmag sNaN98 -1 -> NaN98 Invalid_operation +mxgx193 maxmag -sNaN97 NaN -> -NaN97 Invalid_operation +mxgx194 maxmag sNaN96 sNaN94 -> NaN96 Invalid_operation +mxgx195 maxmag NaN95 sNaN93 -> NaN93 Invalid_operation +mxgx196 maxmag -Inf sNaN92 -> NaN92 Invalid_operation +mxgx197 maxmag 0 sNaN91 -> NaN91 Invalid_operation +mxgx198 maxmag Inf -sNaN90 -> -NaN90 Invalid_operation +mxgx199 maxmag NaN sNaN89 -> NaN89 Invalid_operation + +-- rounding checks +maxexponent: 999 +minexponent: -999 +precision: 9 +mxgx201 maxmag 12345678000 1 -> 1.23456780E+10 Rounded +mxgx202 maxmag 1 12345678000 -> 1.23456780E+10 Rounded +mxgx203 maxmag 1234567800 1 -> 1.23456780E+9 Rounded +mxgx204 maxmag 1 1234567800 -> 1.23456780E+9 Rounded +mxgx205 maxmag 1234567890 1 -> 1.23456789E+9 Rounded +mxgx206 maxmag 1 1234567890 -> 1.23456789E+9 Rounded +mxgx207 maxmag 1234567891 1 -> 1.23456789E+9 Inexact Rounded +mxgx208 maxmag 1 1234567891 -> 1.23456789E+9 Inexact Rounded +mxgx209 maxmag 12345678901 1 -> 1.23456789E+10 Inexact Rounded +mxgx210 maxmag 1 12345678901 -> 1.23456789E+10 Inexact Rounded +mxgx211 maxmag 1234567896 1 -> 1.23456790E+9 Inexact Rounded +mxgx212 maxmag 1 1234567896 -> 1.23456790E+9 Inexact Rounded +mxgx213 maxmag -1234567891 1 -> -1.23456789E+9 Inexact Rounded +mxgx214 maxmag 1 -1234567891 -> -1.23456789E+9 Inexact Rounded +mxgx215 maxmag -12345678901 1 -> -1.23456789E+10 Inexact Rounded +mxgx216 maxmag 1 -12345678901 -> -1.23456789E+10 Inexact Rounded +mxgx217 maxmag -1234567896 1 -> -1.23456790E+9 Inexact Rounded +mxgx218 maxmag 1 -1234567896 -> -1.23456790E+9 Inexact Rounded + +precision: 15 +mxgx221 maxmag 12345678000 1 -> 12345678000 +mxgx222 maxmag 1 12345678000 -> 12345678000 +mxgx223 maxmag 1234567800 1 -> 1234567800 +mxgx224 maxmag 1 1234567800 -> 1234567800 +mxgx225 maxmag 1234567890 1 -> 1234567890 +mxgx226 maxmag 1 1234567890 -> 1234567890 +mxgx227 maxmag 1234567891 1 -> 1234567891 +mxgx228 maxmag 1 1234567891 -> 1234567891 +mxgx229 maxmag 12345678901 1 -> 12345678901 +mxgx230 maxmag 1 12345678901 -> 12345678901 +mxgx231 maxmag 1234567896 1 -> 1234567896 +mxgx232 maxmag 1 1234567896 -> 1234567896 +mxgx233 maxmag -1234567891 1 -> -1234567891 +mxgx234 maxmag 1 -1234567891 -> -1234567891 +mxgx235 maxmag -12345678901 1 -> -12345678901 +mxgx236 maxmag 1 -12345678901 -> -12345678901 +mxgx237 maxmag -1234567896 1 -> -1234567896 +mxgx238 maxmag 1 -1234567896 -> -1234567896 + +-- from examples +mxgx280 maxmag '3' '2' -> '3' +mxgx281 maxmag '-10' '3' -> '-10' +mxgx282 maxmag '1.0' '1' -> '1' +mxgx283 maxmag '1' '1.0' -> '1' +mxgx284 maxmag '7' 'NaN' -> '7' + +-- overflow and underflow tests ... +maxExponent: 999999999 +minexponent: -999999999 +mxgx330 maxmag +1.23456789012345E-0 9E+999999999 -> 9E+999999999 +mxgx331 maxmag 9E+999999999 +1.23456789012345E-0 -> 9E+999999999 +mxgx332 maxmag +0.100 9E-999999999 -> 0.100 +mxgx333 maxmag 9E-999999999 +0.100 -> 0.100 +mxgx335 maxmag -1.23456789012345E-0 9E+999999999 -> 9E+999999999 +mxgx336 maxmag 9E+999999999 -1.23456789012345E-0 -> 9E+999999999 +mxgx337 maxmag -0.100 9E-999999999 -> -0.100 +mxgx338 maxmag 9E-999999999 -0.100 -> -0.100 + +mxgx339 maxmag 1e-599999999 1e-400000001 -> 1E-400000001 +mxgx340 maxmag 1e-599999999 1e-400000000 -> 1E-400000000 +mxgx341 maxmag 1e-600000000 1e-400000000 -> 1E-400000000 +mxgx342 maxmag 9e-999999998 0.01 -> 0.01 +mxgx343 maxmag 9e-999999998 0.1 -> 0.1 +mxgx344 maxmag 0.01 9e-999999998 -> 0.01 +mxgx345 maxmag 1e599999999 1e400000001 -> 1E+599999999 +mxgx346 maxmag 1e599999999 1e400000000 -> 1E+599999999 +mxgx347 maxmag 1e600000000 1e400000000 -> 1E+600000000 +mxgx348 maxmag 9e999999998 100 -> 9E+999999998 +mxgx349 maxmag 9e999999998 10 -> 9E+999999998 +mxgx350 maxmag 100 9e999999998 -> 9E+999999998 +-- signs +mxgx351 maxmag 1e+777777777 1e+411111111 -> 1E+777777777 +mxgx352 maxmag 1e+777777777 -1e+411111111 -> 1E+777777777 +mxgx353 maxmag -1e+777777777 1e+411111111 -> -1E+777777777 +mxgx354 maxmag -1e+777777777 -1e+411111111 -> -1E+777777777 +mxgx355 maxmag 1e-777777777 1e-411111111 -> 1E-411111111 +mxgx356 maxmag 1e-777777777 -1e-411111111 -> -1E-411111111 +mxgx357 maxmag -1e-777777777 1e-411111111 -> 1E-411111111 +mxgx358 maxmag -1e-777777777 -1e-411111111 -> -1E-411111111 + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +mxgx401 maxmag Inf 1.1 -> Infinity +mxgx402 maxmag 1.1 1 -> 1.1 +mxgx403 maxmag 1 1.0 -> 1 +mxgx404 maxmag 1.0 0.1 -> 1.0 +mxgx405 maxmag 0.1 0.10 -> 0.1 +mxgx406 maxmag 0.10 0.100 -> 0.10 +mxgx407 maxmag 0.10 0 -> 0.10 +mxgx408 maxmag 0 0.0 -> 0 +mxgx409 maxmag 0.0 -0 -> 0.0 +mxgx410 maxmag 0.0 -0.0 -> 0.0 +mxgx411 maxmag 0.00 -0.0 -> 0.00 +mxgx412 maxmag 0.0 -0.00 -> 0.0 +mxgx413 maxmag 0 -0.0 -> 0 +mxgx414 maxmag 0 -0 -> 0 +mxgx415 maxmag -0.0 -0 -> -0.0 +mxgx416 maxmag -0 -0.100 -> -0.100 +mxgx417 maxmag -0.100 -0.10 -> -0.100 +mxgx418 maxmag -0.10 -0.1 -> -0.10 +mxgx419 maxmag -0.1 -1.0 -> -1.0 +mxgx420 maxmag -1.0 -1 -> -1.0 +mxgx421 maxmag -1 -1.1 -> -1.1 +mxgx423 maxmag -1.1 -Inf -> -Infinity +-- same with operands reversed +mxgx431 maxmag 1.1 Inf -> Infinity +mxgx432 maxmag 1 1.1 -> 1.1 +mxgx433 maxmag 1.0 1 -> 1 +mxgx434 maxmag 0.1 1.0 -> 1.0 +mxgx435 maxmag 0.10 0.1 -> 0.1 +mxgx436 maxmag 0.100 0.10 -> 0.10 +mxgx437 maxmag 0 0.10 -> 0.10 +mxgx438 maxmag 0.0 0 -> 0 +mxgx439 maxmag -0 0.0 -> 0.0 +mxgx440 maxmag -0.0 0.0 -> 0.0 +mxgx441 maxmag -0.0 0.00 -> 0.00 +mxgx442 maxmag -0.00 0.0 -> 0.0 +mxgx443 maxmag -0.0 0 -> 0 +mxgx444 maxmag -0 0 -> 0 +mxgx445 maxmag -0 -0.0 -> -0.0 +mxgx446 maxmag -0.100 -0 -> -0.100 +mxgx447 maxmag -0.10 -0.100 -> -0.100 +mxgx448 maxmag -0.1 -0.10 -> -0.10 +mxgx449 maxmag -1.0 -0.1 -> -1.0 +mxgx450 maxmag -1 -1.0 -> -1.0 +mxgx451 maxmag -1.1 -1 -> -1.1 +mxgx453 maxmag -Inf -1.1 -> -Infinity +-- largies +mxgx460 maxmag 1000 1E+3 -> 1E+3 +mxgx461 maxmag 1E+3 1000 -> 1E+3 +mxgx462 maxmag 1000 -1E+3 -> 1000 +mxgx463 maxmag 1E+3 -1000 -> 1E+3 +mxgx464 maxmag -1000 1E+3 -> 1E+3 +mxgx465 maxmag -1E+3 1000 -> 1000 +mxgx466 maxmag -1000 -1E+3 -> -1000 +mxgx467 maxmag -1E+3 -1000 -> -1000 + +-- rounding (results treated as though plus) +maxexponent: 999999999 +minexponent: -999999999 +precision: 3 + +mxgx470 maxmag 1 .5 -> 1 +mxgx471 maxmag 10 5 -> 10 +mxgx472 maxmag 100 50 -> 100 +mxgx473 maxmag 1000 500 -> 1.00E+3 Rounded +mxgx474 maxmag 10000 5000 -> 1.00E+4 Rounded +mxgx475 maxmag 6 .5 -> 6 +mxgx476 maxmag 66 5 -> 66 +mxgx477 maxmag 666 50 -> 666 +mxgx478 maxmag 6666 500 -> 6.67E+3 Rounded Inexact +mxgx479 maxmag 66666 5000 -> 6.67E+4 Rounded Inexact +mxgx480 maxmag 33333 5000 -> 3.33E+4 Rounded Inexact +mxgx481 maxmag .5 1 -> 1 +mxgx482 maxmag .5 10 -> 10 +mxgx483 maxmag .5 100 -> 100 +mxgx484 maxmag .5 1000 -> 1.00E+3 Rounded +mxgx485 maxmag .5 10000 -> 1.00E+4 Rounded +mxgx486 maxmag .5 6 -> 6 +mxgx487 maxmag .5 66 -> 66 +mxgx488 maxmag .5 666 -> 666 +mxgx489 maxmag .5 6666 -> 6.67E+3 Rounded Inexact +mxgx490 maxmag .5 66666 -> 6.67E+4 Rounded Inexact +mxgx491 maxmag .5 33333 -> 3.33E+4 Rounded Inexact + +-- overflow tests +maxexponent: 999999999 +minexponent: -999999999 +precision: 3 +mxgx500 maxmag 9.999E+999999999 0 -> Infinity Inexact Overflow Rounded +mxgx501 maxmag -9.999E+999999999 0 -> -Infinity Inexact Overflow Rounded + +-- subnormals and underflow +precision: 3 +maxexponent: 999 +minexponent: -999 +mxgx510 maxmag 1.00E-999 0 -> 1.00E-999 +mxgx511 maxmag 0.1E-999 0 -> 1E-1000 Subnormal +mxgx512 maxmag 0.10E-999 0 -> 1.0E-1000 Subnormal +mxgx513 maxmag 0.100E-999 0 -> 1.0E-1000 Subnormal Rounded +mxgx514 maxmag 0.01E-999 0 -> 1E-1001 Subnormal +-- next is rounded to Nmin +mxgx515 maxmag 0.999E-999 0 -> 1.00E-999 Inexact Rounded Subnormal Underflow +mxgx516 maxmag 0.099E-999 0 -> 1.0E-1000 Inexact Rounded Subnormal Underflow +mxgx517 maxmag 0.009E-999 0 -> 1E-1001 Inexact Rounded Subnormal Underflow +mxgx518 maxmag 0.001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped +mxgx519 maxmag 0.0009E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped +mxgx520 maxmag 0.0001E-999 0 -> 0E-1001 Inexact Rounded Subnormal Underflow Clamped + +mxgx530 maxmag -1.00E-999 0 -> -1.00E-999 +mxgx531 maxmag -0.1E-999 0 -> -1E-1000 Subnormal +mxgx532 maxmag -0.10E-999 0 -> -1.0E-1000 Subnormal +mxgx533 maxmag -0.100E-999 0 -> -1.0E-1000 Subnormal Rounded +mxgx534 maxmag -0.01E-999 0 -> -1E-1001 Subnormal +-- next is rounded to -Nmin +mxgx535 maxmag -0.999E-999 0 -> -1.00E-999 Inexact Rounded Subnormal Underflow +mxgx536 maxmag -0.099E-999 0 -> -1.0E-1000 Inexact Rounded Subnormal Underflow +mxgx537 maxmag -0.009E-999 0 -> -1E-1001 Inexact Rounded Subnormal Underflow +mxgx538 maxmag -0.001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +mxgx539 maxmag -0.0009E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped +mxgx540 maxmag -0.0001E-999 0 -> -0E-1001 Inexact Rounded Subnormal Underflow Clamped + +-- Null tests +mxgx900 maxmag 10 # -> NaN Invalid_operation +mxgx901 maxmag # 10 -> NaN Invalid_operation + + + diff --git a/Lib/test/decimaltestdata/minmag.decTest b/Lib/test/decimaltestdata/minmag.decTest index f1ac3852e83..9e562339eb6 100644 --- a/Lib/test/decimaltestdata/minmag.decTest +++ b/Lib/test/decimaltestdata/minmag.decTest @@ -1,390 +1,390 @@ ------------------------------------------------------------------------- --- minmag.decTest -- decimal minimum by magnitude -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- we assume that base comparison is tested in compare.decTest, so --- these mainly cover special cases and rounding - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- sanity checks -mngx001 minmag -2 -2 -> -2 -mngx002 minmag -2 -1 -> -1 -mngx003 minmag -2 0 -> 0 -mngx004 minmag -2 1 -> 1 -mngx005 minmag -2 2 -> -2 -mngx006 minmag -1 -2 -> -1 -mngx007 minmag -1 -1 -> -1 -mngx008 minmag -1 0 -> 0 -mngx009 minmag -1 1 -> -1 -mngx010 minmag -1 2 -> -1 -mngx011 minmag 0 -2 -> 0 -mngx012 minmag 0 -1 -> 0 -mngx013 minmag 0 0 -> 0 -mngx014 minmag 0 1 -> 0 -mngx015 minmag 0 2 -> 0 -mngx016 minmag 1 -2 -> 1 -mngx017 minmag 1 -1 -> -1 -mngx018 minmag 1 0 -> 0 -mngx019 minmag 1 1 -> 1 -mngx020 minmag 1 2 -> 1 -mngx021 minmag 2 -2 -> -2 -mngx022 minmag 2 -1 -> -1 -mngx023 minmag 2 0 -> 0 -mngx025 minmag 2 1 -> 1 -mngx026 minmag 2 2 -> 2 - --- extended zeros -mngx030 minmag 0 0 -> 0 -mngx031 minmag 0 -0 -> -0 -mngx032 minmag 0 -0.0 -> -0.0 -mngx033 minmag 0 0.0 -> 0.0 -mngx034 minmag -0 0 -> -0 -mngx035 minmag -0 -0 -> -0 -mngx036 minmag -0 -0.0 -> -0 -mngx037 minmag -0 0.0 -> -0 -mngx038 minmag 0.0 0 -> 0.0 -mngx039 minmag 0.0 -0 -> -0 -mngx040 minmag 0.0 -0.0 -> -0.0 -mngx041 minmag 0.0 0.0 -> 0.0 -mngx042 minmag -0.0 0 -> -0.0 -mngx043 minmag -0.0 -0 -> -0 -mngx044 minmag -0.0 -0.0 -> -0.0 -mngx045 minmag -0.0 0.0 -> -0.0 - -mngx046 minmag 0E1 -0E1 -> -0E+1 -mngx047 minmag -0E1 0E2 -> -0E+1 -mngx048 minmag 0E2 0E1 -> 0E+1 -mngx049 minmag 0E1 0E2 -> 0E+1 -mngx050 minmag -0E3 -0E2 -> -0E+3 -mngx051 minmag -0E2 -0E3 -> -0E+3 - --- Specials -precision: 9 -mngx090 minmag Inf -Inf -> -Infinity -mngx091 minmag Inf -1000 -> -1000 -mngx092 minmag Inf -1 -> -1 -mngx093 minmag Inf -0 -> -0 -mngx094 minmag Inf 0 -> 0 -mngx095 minmag Inf 1 -> 1 -mngx096 minmag Inf 1000 -> 1000 -mngx097 minmag Inf Inf -> Infinity -mngx098 minmag -1000 Inf -> -1000 -mngx099 minmag -Inf Inf -> -Infinity -mngx100 minmag -1 Inf -> -1 -mngx101 minmag -0 Inf -> -0 -mngx102 minmag 0 Inf -> 0 -mngx103 minmag 1 Inf -> 1 -mngx104 minmag 1000 Inf -> 1000 -mngx105 minmag Inf Inf -> Infinity - -mngx120 minmag -Inf -Inf -> -Infinity -mngx121 minmag -Inf -1000 -> -1000 -mngx122 minmag -Inf -1 -> -1 -mngx123 minmag -Inf -0 -> -0 -mngx124 minmag -Inf 0 -> 0 -mngx125 minmag -Inf 1 -> 1 -mngx126 minmag -Inf 1000 -> 1000 -mngx127 minmag -Inf Inf -> -Infinity -mngx128 minmag -Inf -Inf -> -Infinity -mngx129 minmag -1000 -Inf -> -1000 -mngx130 minmag -1 -Inf -> -1 -mngx131 minmag -0 -Inf -> -0 -mngx132 minmag 0 -Inf -> 0 -mngx133 minmag 1 -Inf -> 1 -mngx134 minmag 1000 -Inf -> 1000 -mngx135 minmag Inf -Inf -> -Infinity - --- 2004.08.02 754r chooses number over NaN in mixed cases -mngx141 minmag NaN -Inf -> -Infinity -mngx142 minmag NaN -1000 -> -1000 -mngx143 minmag NaN -1 -> -1 -mngx144 minmag NaN -0 -> -0 -mngx145 minmag NaN 0 -> 0 -mngx146 minmag NaN 1 -> 1 -mngx147 minmag NaN 1000 -> 1000 -mngx148 minmag NaN Inf -> Infinity -mngx149 minmag NaN NaN -> NaN -mngx150 minmag -Inf NaN -> -Infinity -mngx151 minmag -1000 NaN -> -1000 -mngx152 minmag -1 -NaN -> -1 -mngx153 minmag -0 NaN -> -0 -mngx154 minmag 0 -NaN -> 0 -mngx155 minmag 1 NaN -> 1 -mngx156 minmag 1000 NaN -> 1000 -mngx157 minmag Inf NaN -> Infinity - -mngx161 minmag sNaN -Inf -> NaN Invalid_operation -mngx162 minmag sNaN -1000 -> NaN Invalid_operation -mngx163 minmag sNaN -1 -> NaN Invalid_operation -mngx164 minmag sNaN -0 -> NaN Invalid_operation -mngx165 minmag -sNaN 0 -> -NaN Invalid_operation -mngx166 minmag -sNaN 1 -> -NaN Invalid_operation -mngx167 minmag sNaN 1000 -> NaN Invalid_operation -mngx168 minmag sNaN NaN -> NaN Invalid_operation -mngx169 minmag sNaN sNaN -> NaN Invalid_operation -mngx170 minmag NaN sNaN -> NaN Invalid_operation -mngx171 minmag -Inf sNaN -> NaN Invalid_operation -mngx172 minmag -1000 sNaN -> NaN Invalid_operation -mngx173 minmag -1 sNaN -> NaN Invalid_operation -mngx174 minmag -0 sNaN -> NaN Invalid_operation -mngx175 minmag 0 sNaN -> NaN Invalid_operation -mngx176 minmag 1 sNaN -> NaN Invalid_operation -mngx177 minmag 1000 sNaN -> NaN Invalid_operation -mngx178 minmag Inf sNaN -> NaN Invalid_operation -mngx179 minmag NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -mngx181 minmag NaN9 -Inf -> -Infinity -mngx182 minmag -NaN8 9990 -> 9990 -mngx183 minmag NaN71 Inf -> Infinity - -mngx184 minmag NaN1 NaN54 -> NaN1 -mngx185 minmag NaN22 -NaN53 -> NaN22 -mngx186 minmag -NaN3 NaN6 -> -NaN3 -mngx187 minmag -NaN44 NaN7 -> -NaN44 - -mngx188 minmag -Inf NaN41 -> -Infinity -mngx189 minmag -9999 -NaN33 -> -9999 -mngx190 minmag Inf NaN2 -> Infinity - -mngx191 minmag sNaN99 -Inf -> NaN99 Invalid_operation -mngx192 minmag sNaN98 -11 -> NaN98 Invalid_operation -mngx193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation -mngx194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation -mngx195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation -mngx196 minmag -Inf sNaN92 -> NaN92 Invalid_operation -mngx197 minmag 088 sNaN91 -> NaN91 Invalid_operation -mngx198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation -mngx199 minmag NaN sNaN86 -> NaN86 Invalid_operation - --- rounding checks -- chosen is rounded, or not -maxExponent: 999 -minexponent: -999 -precision: 9 -mngx201 minmag -12345678000 1 -> 1 -mngx202 minmag 1 -12345678000 -> 1 -mngx203 minmag -1234567800 1 -> 1 -mngx204 minmag 1 -1234567800 -> 1 -mngx205 minmag -1234567890 1 -> 1 -mngx206 minmag 1 -1234567890 -> 1 -mngx207 minmag -1234567891 1 -> 1 -mngx208 minmag 1 -1234567891 -> 1 -mngx209 minmag -12345678901 1 -> 1 -mngx210 minmag 1 -12345678901 -> 1 -mngx211 minmag -1234567896 1 -> 1 -mngx212 minmag 1 -1234567896 -> 1 -mngx213 minmag 1234567891 1 -> 1 -mngx214 minmag 1 1234567891 -> 1 -mngx215 minmag 12345678901 1 -> 1 -mngx216 minmag 1 12345678901 -> 1 -mngx217 minmag 1234567896 1 -> 1 -mngx218 minmag 1 1234567896 -> 1 - -precision: 15 -mngx221 minmag -12345678000 1 -> 1 -mngx222 minmag 1 -12345678000 -> 1 -mngx223 minmag -1234567800 1 -> 1 -mngx224 minmag 1 -1234567800 -> 1 -mngx225 minmag -1234567890 1 -> 1 -mngx226 minmag 1 -1234567890 -> 1 -mngx227 minmag -1234567891 1 -> 1 -mngx228 minmag 1 -1234567891 -> 1 -mngx229 minmag -12345678901 1 -> 1 -mngx230 minmag 1 -12345678901 -> 1 -mngx231 minmag -1234567896 1 -> 1 -mngx232 minmag 1 -1234567896 -> 1 -mngx233 minmag 1234567891 1 -> 1 -mngx234 minmag 1 1234567891 -> 1 -mngx235 minmag 12345678901 1 -> 1 -mngx236 minmag 1 12345678901 -> 1 -mngx237 minmag 1234567896 1 -> 1 -mngx238 minmag 1 1234567896 -> 1 - --- from examples -mngx280 minmag '3' '2' -> '2' -mngx281 minmag '-10' '3' -> '3' -mngx282 minmag '1.0' '1' -> '1.0' -mngx283 minmag '1' '1.0' -> '1.0' -mngx284 minmag '7' 'NaN' -> '7' - --- overflow and underflow tests .. subnormal results [inputs] now allowed -maxExponent: 999999999 -minexponent: -999999999 -mngx330 minmag -1.23456789012345E-0 -9E+999999999 -> -1.23456789012345 -mngx331 minmag -9E+999999999 -1.23456789012345E-0 -> -1.23456789012345 -mngx332 minmag -0.100 -9E-999999999 -> -9E-999999999 -mngx333 minmag -9E-999999999 -0.100 -> -9E-999999999 -mngx335 minmag +1.23456789012345E-0 -9E+999999999 -> 1.23456789012345 -mngx336 minmag -9E+999999999 1.23456789012345E-0 -> 1.23456789012345 -mngx337 minmag +0.100 -9E-999999999 -> -9E-999999999 -mngx338 minmag -9E-999999999 0.100 -> -9E-999999999 - -mngx339 minmag -1e-599999999 -1e-400000001 -> -1E-599999999 -mngx340 minmag -1e-599999999 -1e-400000000 -> -1E-599999999 -mngx341 minmag -1e-600000000 -1e-400000000 -> -1E-600000000 -mngx342 minmag -9e-999999998 -0.01 -> -9E-999999998 -mngx343 minmag -9e-999999998 -0.1 -> -9E-999999998 -mngx344 minmag -0.01 -9e-999999998 -> -9E-999999998 -mngx345 minmag -1e599999999 -1e400000001 -> -1E+400000001 -mngx346 minmag -1e599999999 -1e400000000 -> -1E+400000000 -mngx347 minmag -1e600000000 -1e400000000 -> -1E+400000000 -mngx348 minmag -9e999999998 -100 -> -100 -mngx349 minmag -9e999999998 -10 -> -10 -mngx350 minmag -100 -9e999999998 -> -100 --- signs -mngx351 minmag -1e+777777777 -1e+411111111 -> -1E+411111111 -mngx352 minmag -1e+777777777 +1e+411111111 -> 1E+411111111 -mngx353 minmag +1e+777777777 -1e+411111111 -> -1E+411111111 -mngx354 minmag +1e+777777777 +1e+411111111 -> 1E+411111111 -mngx355 minmag -1e-777777777 -1e-411111111 -> -1E-777777777 -mngx356 minmag -1e-777777777 +1e-411111111 -> -1E-777777777 -mngx357 minmag +1e-777777777 -1e-411111111 -> 1E-777777777 -mngx358 minmag +1e-777777777 +1e-411111111 -> 1E-777777777 - --- expanded list from min/max 754r purple prose --- [explicit tests for exponent ordering] -mngx401 minmag Inf 1.1 -> 1.1 -mngx402 minmag 1.1 1 -> 1 -mngx403 minmag 1 1.0 -> 1.0 -mngx404 minmag 1.0 0.1 -> 0.1 -mngx405 minmag 0.1 0.10 -> 0.10 -mngx406 minmag 0.10 0.100 -> 0.100 -mngx407 minmag 0.10 0 -> 0 -mngx408 minmag 0 0.0 -> 0.0 -mngx409 minmag 0.0 -0 -> -0 -mngx410 minmag 0.0 -0.0 -> -0.0 -mngx411 minmag 0.00 -0.0 -> -0.0 -mngx412 minmag 0.0 -0.00 -> -0.00 -mngx413 minmag 0 -0.0 -> -0.0 -mngx414 minmag 0 -0 -> -0 -mngx415 minmag -0.0 -0 -> -0 -mngx416 minmag -0 -0.100 -> -0 -mngx417 minmag -0.100 -0.10 -> -0.10 -mngx418 minmag -0.10 -0.1 -> -0.1 -mngx419 minmag -0.1 -1.0 -> -0.1 -mngx420 minmag -1.0 -1 -> -1 -mngx421 minmag -1 -1.1 -> -1 -mngx423 minmag -1.1 -Inf -> -1.1 --- same with operands reversed -mngx431 minmag 1.1 Inf -> 1.1 -mngx432 minmag 1 1.1 -> 1 -mngx433 minmag 1.0 1 -> 1.0 -mngx434 minmag 0.1 1.0 -> 0.1 -mngx435 minmag 0.10 0.1 -> 0.10 -mngx436 minmag 0.100 0.10 -> 0.100 -mngx437 minmag 0 0.10 -> 0 -mngx438 minmag 0.0 0 -> 0.0 -mngx439 minmag -0 0.0 -> -0 -mngx440 minmag -0.0 0.0 -> -0.0 -mngx441 minmag -0.0 0.00 -> -0.0 -mngx442 minmag -0.00 0.0 -> -0.00 -mngx443 minmag -0.0 0 -> -0.0 -mngx444 minmag -0 0 -> -0 -mngx445 minmag -0 -0.0 -> -0 -mngx446 minmag -0.100 -0 -> -0 -mngx447 minmag -0.10 -0.100 -> -0.10 -mngx448 minmag -0.1 -0.10 -> -0.1 -mngx449 minmag -1.0 -0.1 -> -0.1 -mngx450 minmag -1 -1.0 -> -1 -mngx451 minmag -1.1 -1 -> -1 -mngx453 minmag -Inf -1.1 -> -1.1 --- largies -mngx460 minmag 1000 1E+3 -> 1000 -mngx461 minmag 1E+3 1000 -> 1000 -mngx462 minmag 1000 -1E+3 -> -1E+3 -mngx463 minmag 1E+3 -1000 -> -1000 -mngx464 minmag -1000 1E+3 -> -1000 -mngx465 minmag -1E+3 1000 -> -1E+3 -mngx466 minmag -1000 -1E+3 -> -1E+3 -mngx467 minmag -1E+3 -1000 -> -1E+3 - --- rounding (results treated as though plus) -maxexponent: 999999999 -minexponent: -999999999 -precision: 3 - -mngx470 minmag 1 5 -> 1 -mngx471 minmag 10 50 -> 10 -mngx472 minmag 100 500 -> 100 -mngx473 minmag 1000 5000 -> 1.00E+3 Rounded -mngx474 minmag 10000 50000 -> 1.00E+4 Rounded -mngx475 minmag 6 50 -> 6 -mngx476 minmag 66 500 -> 66 -mngx477 minmag 666 5000 -> 666 -mngx478 minmag 6666 50000 -> 6.67E+3 Rounded Inexact -mngx479 minmag 66666 500000 -> 6.67E+4 Rounded Inexact -mngx480 minmag 33333 500000 -> 3.33E+4 Rounded Inexact -mngx481 minmag 75401 1 -> 1 -mngx482 minmag 75402 10 -> 10 -mngx483 minmag 75403 100 -> 100 -mngx484 minmag 75404 1000 -> 1.00E+3 Rounded -mngx485 minmag 75405 10000 -> 1.00E+4 Rounded -mngx486 minmag 75406 6 -> 6 -mngx487 minmag 75407 66 -> 66 -mngx488 minmag 75408 666 -> 666 -mngx489 minmag 75409 6666 -> 6.67E+3 Rounded Inexact -mngx490 minmag 75410 66666 -> 6.67E+4 Rounded Inexact -mngx491 minmag 75411 33333 -> 3.33E+4 Rounded Inexact - - --- overflow tests -maxexponent: 999999999 -minexponent: -999999999 -precision: 3 -mngx500 minmag 9.999E+999999999 0 -> 0 -mngx501 minmag -9.999E+999999999 0 -> 0 - --- subnormals and underflow -precision: 3 -maxexponent: 999 -minexponent: -999 -mngx510 minmag 1.00E-999 0 -> 0 -mngx511 minmag 0.1E-999 0 -> 0 -mngx512 minmag 0.10E-999 0 -> 0 -mngx513 minmag 0.100E-999 0 -> 0 -mngx514 minmag 0.01E-999 0 -> 0 -mngx515 minmag 0.999E-999 0 -> 0 -mngx516 minmag 0.099E-999 0 -> 0 -mngx517 minmag 0.009E-999 0 -> 0 -mngx518 minmag 0.001E-999 0 -> 0 -mngx519 minmag 0.0009E-999 0 -> 0 -mngx520 minmag 0.0001E-999 0 -> 0 - -mngx530 minmag -1.00E-999 0 -> 0 -mngx531 minmag -0.1E-999 0 -> 0 -mngx532 minmag -0.10E-999 0 -> 0 -mngx533 minmag -0.100E-999 0 -> 0 -mngx534 minmag -0.01E-999 0 -> 0 -mngx535 minmag -0.999E-999 0 -> 0 -mngx536 minmag -0.099E-999 0 -> 0 -mngx537 minmag -0.009E-999 0 -> 0 -mngx538 minmag -0.001E-999 0 -> 0 -mngx539 minmag -0.0009E-999 0 -> 0 -mngx540 minmag -0.0001E-999 0 -> 0 - - --- Null tests -mng900 minmag 10 # -> NaN Invalid_operation -mng901 minmag # 10 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- minmag.decTest -- decimal minimum by magnitude -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- we assume that base comparison is tested in compare.decTest, so +-- these mainly cover special cases and rounding + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- sanity checks +mngx001 minmag -2 -2 -> -2 +mngx002 minmag -2 -1 -> -1 +mngx003 minmag -2 0 -> 0 +mngx004 minmag -2 1 -> 1 +mngx005 minmag -2 2 -> -2 +mngx006 minmag -1 -2 -> -1 +mngx007 minmag -1 -1 -> -1 +mngx008 minmag -1 0 -> 0 +mngx009 minmag -1 1 -> -1 +mngx010 minmag -1 2 -> -1 +mngx011 minmag 0 -2 -> 0 +mngx012 minmag 0 -1 -> 0 +mngx013 minmag 0 0 -> 0 +mngx014 minmag 0 1 -> 0 +mngx015 minmag 0 2 -> 0 +mngx016 minmag 1 -2 -> 1 +mngx017 minmag 1 -1 -> -1 +mngx018 minmag 1 0 -> 0 +mngx019 minmag 1 1 -> 1 +mngx020 minmag 1 2 -> 1 +mngx021 minmag 2 -2 -> -2 +mngx022 minmag 2 -1 -> -1 +mngx023 minmag 2 0 -> 0 +mngx025 minmag 2 1 -> 1 +mngx026 minmag 2 2 -> 2 + +-- extended zeros +mngx030 minmag 0 0 -> 0 +mngx031 minmag 0 -0 -> -0 +mngx032 minmag 0 -0.0 -> -0.0 +mngx033 minmag 0 0.0 -> 0.0 +mngx034 minmag -0 0 -> -0 +mngx035 minmag -0 -0 -> -0 +mngx036 minmag -0 -0.0 -> -0 +mngx037 minmag -0 0.0 -> -0 +mngx038 minmag 0.0 0 -> 0.0 +mngx039 minmag 0.0 -0 -> -0 +mngx040 minmag 0.0 -0.0 -> -0.0 +mngx041 minmag 0.0 0.0 -> 0.0 +mngx042 minmag -0.0 0 -> -0.0 +mngx043 minmag -0.0 -0 -> -0 +mngx044 minmag -0.0 -0.0 -> -0.0 +mngx045 minmag -0.0 0.0 -> -0.0 + +mngx046 minmag 0E1 -0E1 -> -0E+1 +mngx047 minmag -0E1 0E2 -> -0E+1 +mngx048 minmag 0E2 0E1 -> 0E+1 +mngx049 minmag 0E1 0E2 -> 0E+1 +mngx050 minmag -0E3 -0E2 -> -0E+3 +mngx051 minmag -0E2 -0E3 -> -0E+3 + +-- Specials +precision: 9 +mngx090 minmag Inf -Inf -> -Infinity +mngx091 minmag Inf -1000 -> -1000 +mngx092 minmag Inf -1 -> -1 +mngx093 minmag Inf -0 -> -0 +mngx094 minmag Inf 0 -> 0 +mngx095 minmag Inf 1 -> 1 +mngx096 minmag Inf 1000 -> 1000 +mngx097 minmag Inf Inf -> Infinity +mngx098 minmag -1000 Inf -> -1000 +mngx099 minmag -Inf Inf -> -Infinity +mngx100 minmag -1 Inf -> -1 +mngx101 minmag -0 Inf -> -0 +mngx102 minmag 0 Inf -> 0 +mngx103 minmag 1 Inf -> 1 +mngx104 minmag 1000 Inf -> 1000 +mngx105 minmag Inf Inf -> Infinity + +mngx120 minmag -Inf -Inf -> -Infinity +mngx121 minmag -Inf -1000 -> -1000 +mngx122 minmag -Inf -1 -> -1 +mngx123 minmag -Inf -0 -> -0 +mngx124 minmag -Inf 0 -> 0 +mngx125 minmag -Inf 1 -> 1 +mngx126 minmag -Inf 1000 -> 1000 +mngx127 minmag -Inf Inf -> -Infinity +mngx128 minmag -Inf -Inf -> -Infinity +mngx129 minmag -1000 -Inf -> -1000 +mngx130 minmag -1 -Inf -> -1 +mngx131 minmag -0 -Inf -> -0 +mngx132 minmag 0 -Inf -> 0 +mngx133 minmag 1 -Inf -> 1 +mngx134 minmag 1000 -Inf -> 1000 +mngx135 minmag Inf -Inf -> -Infinity + +-- 2004.08.02 754r chooses number over NaN in mixed cases +mngx141 minmag NaN -Inf -> -Infinity +mngx142 minmag NaN -1000 -> -1000 +mngx143 minmag NaN -1 -> -1 +mngx144 minmag NaN -0 -> -0 +mngx145 minmag NaN 0 -> 0 +mngx146 minmag NaN 1 -> 1 +mngx147 minmag NaN 1000 -> 1000 +mngx148 minmag NaN Inf -> Infinity +mngx149 minmag NaN NaN -> NaN +mngx150 minmag -Inf NaN -> -Infinity +mngx151 minmag -1000 NaN -> -1000 +mngx152 minmag -1 -NaN -> -1 +mngx153 minmag -0 NaN -> -0 +mngx154 minmag 0 -NaN -> 0 +mngx155 minmag 1 NaN -> 1 +mngx156 minmag 1000 NaN -> 1000 +mngx157 minmag Inf NaN -> Infinity + +mngx161 minmag sNaN -Inf -> NaN Invalid_operation +mngx162 minmag sNaN -1000 -> NaN Invalid_operation +mngx163 minmag sNaN -1 -> NaN Invalid_operation +mngx164 minmag sNaN -0 -> NaN Invalid_operation +mngx165 minmag -sNaN 0 -> -NaN Invalid_operation +mngx166 minmag -sNaN 1 -> -NaN Invalid_operation +mngx167 minmag sNaN 1000 -> NaN Invalid_operation +mngx168 minmag sNaN NaN -> NaN Invalid_operation +mngx169 minmag sNaN sNaN -> NaN Invalid_operation +mngx170 minmag NaN sNaN -> NaN Invalid_operation +mngx171 minmag -Inf sNaN -> NaN Invalid_operation +mngx172 minmag -1000 sNaN -> NaN Invalid_operation +mngx173 minmag -1 sNaN -> NaN Invalid_operation +mngx174 minmag -0 sNaN -> NaN Invalid_operation +mngx175 minmag 0 sNaN -> NaN Invalid_operation +mngx176 minmag 1 sNaN -> NaN Invalid_operation +mngx177 minmag 1000 sNaN -> NaN Invalid_operation +mngx178 minmag Inf sNaN -> NaN Invalid_operation +mngx179 minmag NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +mngx181 minmag NaN9 -Inf -> -Infinity +mngx182 minmag -NaN8 9990 -> 9990 +mngx183 minmag NaN71 Inf -> Infinity + +mngx184 minmag NaN1 NaN54 -> NaN1 +mngx185 minmag NaN22 -NaN53 -> NaN22 +mngx186 minmag -NaN3 NaN6 -> -NaN3 +mngx187 minmag -NaN44 NaN7 -> -NaN44 + +mngx188 minmag -Inf NaN41 -> -Infinity +mngx189 minmag -9999 -NaN33 -> -9999 +mngx190 minmag Inf NaN2 -> Infinity + +mngx191 minmag sNaN99 -Inf -> NaN99 Invalid_operation +mngx192 minmag sNaN98 -11 -> NaN98 Invalid_operation +mngx193 minmag -sNaN97 NaN8 -> -NaN97 Invalid_operation +mngx194 minmag sNaN69 sNaN94 -> NaN69 Invalid_operation +mngx195 minmag NaN95 sNaN93 -> NaN93 Invalid_operation +mngx196 minmag -Inf sNaN92 -> NaN92 Invalid_operation +mngx197 minmag 088 sNaN91 -> NaN91 Invalid_operation +mngx198 minmag Inf -sNaN90 -> -NaN90 Invalid_operation +mngx199 minmag NaN sNaN86 -> NaN86 Invalid_operation + +-- rounding checks -- chosen is rounded, or not +maxExponent: 999 +minexponent: -999 +precision: 9 +mngx201 minmag -12345678000 1 -> 1 +mngx202 minmag 1 -12345678000 -> 1 +mngx203 minmag -1234567800 1 -> 1 +mngx204 minmag 1 -1234567800 -> 1 +mngx205 minmag -1234567890 1 -> 1 +mngx206 minmag 1 -1234567890 -> 1 +mngx207 minmag -1234567891 1 -> 1 +mngx208 minmag 1 -1234567891 -> 1 +mngx209 minmag -12345678901 1 -> 1 +mngx210 minmag 1 -12345678901 -> 1 +mngx211 minmag -1234567896 1 -> 1 +mngx212 minmag 1 -1234567896 -> 1 +mngx213 minmag 1234567891 1 -> 1 +mngx214 minmag 1 1234567891 -> 1 +mngx215 minmag 12345678901 1 -> 1 +mngx216 minmag 1 12345678901 -> 1 +mngx217 minmag 1234567896 1 -> 1 +mngx218 minmag 1 1234567896 -> 1 + +precision: 15 +mngx221 minmag -12345678000 1 -> 1 +mngx222 minmag 1 -12345678000 -> 1 +mngx223 minmag -1234567800 1 -> 1 +mngx224 minmag 1 -1234567800 -> 1 +mngx225 minmag -1234567890 1 -> 1 +mngx226 minmag 1 -1234567890 -> 1 +mngx227 minmag -1234567891 1 -> 1 +mngx228 minmag 1 -1234567891 -> 1 +mngx229 minmag -12345678901 1 -> 1 +mngx230 minmag 1 -12345678901 -> 1 +mngx231 minmag -1234567896 1 -> 1 +mngx232 minmag 1 -1234567896 -> 1 +mngx233 minmag 1234567891 1 -> 1 +mngx234 minmag 1 1234567891 -> 1 +mngx235 minmag 12345678901 1 -> 1 +mngx236 minmag 1 12345678901 -> 1 +mngx237 minmag 1234567896 1 -> 1 +mngx238 minmag 1 1234567896 -> 1 + +-- from examples +mngx280 minmag '3' '2' -> '2' +mngx281 minmag '-10' '3' -> '3' +mngx282 minmag '1.0' '1' -> '1.0' +mngx283 minmag '1' '1.0' -> '1.0' +mngx284 minmag '7' 'NaN' -> '7' + +-- overflow and underflow tests .. subnormal results [inputs] now allowed +maxExponent: 999999999 +minexponent: -999999999 +mngx330 minmag -1.23456789012345E-0 -9E+999999999 -> -1.23456789012345 +mngx331 minmag -9E+999999999 -1.23456789012345E-0 -> -1.23456789012345 +mngx332 minmag -0.100 -9E-999999999 -> -9E-999999999 +mngx333 minmag -9E-999999999 -0.100 -> -9E-999999999 +mngx335 minmag +1.23456789012345E-0 -9E+999999999 -> 1.23456789012345 +mngx336 minmag -9E+999999999 1.23456789012345E-0 -> 1.23456789012345 +mngx337 minmag +0.100 -9E-999999999 -> -9E-999999999 +mngx338 minmag -9E-999999999 0.100 -> -9E-999999999 + +mngx339 minmag -1e-599999999 -1e-400000001 -> -1E-599999999 +mngx340 minmag -1e-599999999 -1e-400000000 -> -1E-599999999 +mngx341 minmag -1e-600000000 -1e-400000000 -> -1E-600000000 +mngx342 minmag -9e-999999998 -0.01 -> -9E-999999998 +mngx343 minmag -9e-999999998 -0.1 -> -9E-999999998 +mngx344 minmag -0.01 -9e-999999998 -> -9E-999999998 +mngx345 minmag -1e599999999 -1e400000001 -> -1E+400000001 +mngx346 minmag -1e599999999 -1e400000000 -> -1E+400000000 +mngx347 minmag -1e600000000 -1e400000000 -> -1E+400000000 +mngx348 minmag -9e999999998 -100 -> -100 +mngx349 minmag -9e999999998 -10 -> -10 +mngx350 minmag -100 -9e999999998 -> -100 +-- signs +mngx351 minmag -1e+777777777 -1e+411111111 -> -1E+411111111 +mngx352 minmag -1e+777777777 +1e+411111111 -> 1E+411111111 +mngx353 minmag +1e+777777777 -1e+411111111 -> -1E+411111111 +mngx354 minmag +1e+777777777 +1e+411111111 -> 1E+411111111 +mngx355 minmag -1e-777777777 -1e-411111111 -> -1E-777777777 +mngx356 minmag -1e-777777777 +1e-411111111 -> -1E-777777777 +mngx357 minmag +1e-777777777 -1e-411111111 -> 1E-777777777 +mngx358 minmag +1e-777777777 +1e-411111111 -> 1E-777777777 + +-- expanded list from min/max 754r purple prose +-- [explicit tests for exponent ordering] +mngx401 minmag Inf 1.1 -> 1.1 +mngx402 minmag 1.1 1 -> 1 +mngx403 minmag 1 1.0 -> 1.0 +mngx404 minmag 1.0 0.1 -> 0.1 +mngx405 minmag 0.1 0.10 -> 0.10 +mngx406 minmag 0.10 0.100 -> 0.100 +mngx407 minmag 0.10 0 -> 0 +mngx408 minmag 0 0.0 -> 0.0 +mngx409 minmag 0.0 -0 -> -0 +mngx410 minmag 0.0 -0.0 -> -0.0 +mngx411 minmag 0.00 -0.0 -> -0.0 +mngx412 minmag 0.0 -0.00 -> -0.00 +mngx413 minmag 0 -0.0 -> -0.0 +mngx414 minmag 0 -0 -> -0 +mngx415 minmag -0.0 -0 -> -0 +mngx416 minmag -0 -0.100 -> -0 +mngx417 minmag -0.100 -0.10 -> -0.10 +mngx418 minmag -0.10 -0.1 -> -0.1 +mngx419 minmag -0.1 -1.0 -> -0.1 +mngx420 minmag -1.0 -1 -> -1 +mngx421 minmag -1 -1.1 -> -1 +mngx423 minmag -1.1 -Inf -> -1.1 +-- same with operands reversed +mngx431 minmag 1.1 Inf -> 1.1 +mngx432 minmag 1 1.1 -> 1 +mngx433 minmag 1.0 1 -> 1.0 +mngx434 minmag 0.1 1.0 -> 0.1 +mngx435 minmag 0.10 0.1 -> 0.10 +mngx436 minmag 0.100 0.10 -> 0.100 +mngx437 minmag 0 0.10 -> 0 +mngx438 minmag 0.0 0 -> 0.0 +mngx439 minmag -0 0.0 -> -0 +mngx440 minmag -0.0 0.0 -> -0.0 +mngx441 minmag -0.0 0.00 -> -0.0 +mngx442 minmag -0.00 0.0 -> -0.00 +mngx443 minmag -0.0 0 -> -0.0 +mngx444 minmag -0 0 -> -0 +mngx445 minmag -0 -0.0 -> -0 +mngx446 minmag -0.100 -0 -> -0 +mngx447 minmag -0.10 -0.100 -> -0.10 +mngx448 minmag -0.1 -0.10 -> -0.1 +mngx449 minmag -1.0 -0.1 -> -0.1 +mngx450 minmag -1 -1.0 -> -1 +mngx451 minmag -1.1 -1 -> -1 +mngx453 minmag -Inf -1.1 -> -1.1 +-- largies +mngx460 minmag 1000 1E+3 -> 1000 +mngx461 minmag 1E+3 1000 -> 1000 +mngx462 minmag 1000 -1E+3 -> -1E+3 +mngx463 minmag 1E+3 -1000 -> -1000 +mngx464 minmag -1000 1E+3 -> -1000 +mngx465 minmag -1E+3 1000 -> -1E+3 +mngx466 minmag -1000 -1E+3 -> -1E+3 +mngx467 minmag -1E+3 -1000 -> -1E+3 + +-- rounding (results treated as though plus) +maxexponent: 999999999 +minexponent: -999999999 +precision: 3 + +mngx470 minmag 1 5 -> 1 +mngx471 minmag 10 50 -> 10 +mngx472 minmag 100 500 -> 100 +mngx473 minmag 1000 5000 -> 1.00E+3 Rounded +mngx474 minmag 10000 50000 -> 1.00E+4 Rounded +mngx475 minmag 6 50 -> 6 +mngx476 minmag 66 500 -> 66 +mngx477 minmag 666 5000 -> 666 +mngx478 minmag 6666 50000 -> 6.67E+3 Rounded Inexact +mngx479 minmag 66666 500000 -> 6.67E+4 Rounded Inexact +mngx480 minmag 33333 500000 -> 3.33E+4 Rounded Inexact +mngx481 minmag 75401 1 -> 1 +mngx482 minmag 75402 10 -> 10 +mngx483 minmag 75403 100 -> 100 +mngx484 minmag 75404 1000 -> 1.00E+3 Rounded +mngx485 minmag 75405 10000 -> 1.00E+4 Rounded +mngx486 minmag 75406 6 -> 6 +mngx487 minmag 75407 66 -> 66 +mngx488 minmag 75408 666 -> 666 +mngx489 minmag 75409 6666 -> 6.67E+3 Rounded Inexact +mngx490 minmag 75410 66666 -> 6.67E+4 Rounded Inexact +mngx491 minmag 75411 33333 -> 3.33E+4 Rounded Inexact + + +-- overflow tests +maxexponent: 999999999 +minexponent: -999999999 +precision: 3 +mngx500 minmag 9.999E+999999999 0 -> 0 +mngx501 minmag -9.999E+999999999 0 -> 0 + +-- subnormals and underflow +precision: 3 +maxexponent: 999 +minexponent: -999 +mngx510 minmag 1.00E-999 0 -> 0 +mngx511 minmag 0.1E-999 0 -> 0 +mngx512 minmag 0.10E-999 0 -> 0 +mngx513 minmag 0.100E-999 0 -> 0 +mngx514 minmag 0.01E-999 0 -> 0 +mngx515 minmag 0.999E-999 0 -> 0 +mngx516 minmag 0.099E-999 0 -> 0 +mngx517 minmag 0.009E-999 0 -> 0 +mngx518 minmag 0.001E-999 0 -> 0 +mngx519 minmag 0.0009E-999 0 -> 0 +mngx520 minmag 0.0001E-999 0 -> 0 + +mngx530 minmag -1.00E-999 0 -> 0 +mngx531 minmag -0.1E-999 0 -> 0 +mngx532 minmag -0.10E-999 0 -> 0 +mngx533 minmag -0.100E-999 0 -> 0 +mngx534 minmag -0.01E-999 0 -> 0 +mngx535 minmag -0.999E-999 0 -> 0 +mngx536 minmag -0.099E-999 0 -> 0 +mngx537 minmag -0.009E-999 0 -> 0 +mngx538 minmag -0.001E-999 0 -> 0 +mngx539 minmag -0.0009E-999 0 -> 0 +mngx540 minmag -0.0001E-999 0 -> 0 + + +-- Null tests +mng900 minmag 10 # -> NaN Invalid_operation +mng901 minmag # 10 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/nextminus.decTest b/Lib/test/decimaltestdata/nextminus.decTest index 531c5252a5f..ba93066b96a 100644 --- a/Lib/test/decimaltestdata/nextminus.decTest +++ b/Lib/test/decimaltestdata/nextminus.decTest @@ -1,148 +1,148 @@ ------------------------------------------------------------------------- --- nextminus.decTest -- decimal next that is less [754r nextdown] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - -nextm001 nextminus 0.999999995 -> 0.999999994 -nextm002 nextminus 0.999999996 -> 0.999999995 -nextm003 nextminus 0.999999997 -> 0.999999996 -nextm004 nextminus 0.999999998 -> 0.999999997 -nextm005 nextminus 0.999999999 -> 0.999999998 -nextm006 nextminus 1.00000000 -> 0.999999999 -nextm007 nextminus 1.0 -> 0.999999999 -nextm008 nextminus 1 -> 0.999999999 -nextm009 nextminus 1.00000001 -> 1.00000000 -nextm010 nextminus 1.00000002 -> 1.00000001 -nextm011 nextminus 1.00000003 -> 1.00000002 -nextm012 nextminus 1.00000004 -> 1.00000003 -nextm013 nextminus 1.00000005 -> 1.00000004 -nextm014 nextminus 1.00000006 -> 1.00000005 -nextm015 nextminus 1.00000007 -> 1.00000006 -nextm016 nextminus 1.00000008 -> 1.00000007 -nextm017 nextminus 1.00000009 -> 1.00000008 -nextm018 nextminus 1.00000010 -> 1.00000009 -nextm019 nextminus 1.00000011 -> 1.00000010 -nextm020 nextminus 1.00000012 -> 1.00000011 - -nextm021 nextminus -0.999999995 -> -0.999999996 -nextm022 nextminus -0.999999996 -> -0.999999997 -nextm023 nextminus -0.999999997 -> -0.999999998 -nextm024 nextminus -0.999999998 -> -0.999999999 -nextm025 nextminus -0.999999999 -> -1.00000000 -nextm026 nextminus -1.00000000 -> -1.00000001 -nextm027 nextminus -1.0 -> -1.00000001 -nextm028 nextminus -1 -> -1.00000001 -nextm029 nextminus -1.00000001 -> -1.00000002 -nextm030 nextminus -1.00000002 -> -1.00000003 -nextm031 nextminus -1.00000003 -> -1.00000004 -nextm032 nextminus -1.00000004 -> -1.00000005 -nextm033 nextminus -1.00000005 -> -1.00000006 -nextm034 nextminus -1.00000006 -> -1.00000007 -nextm035 nextminus -1.00000007 -> -1.00000008 -nextm036 nextminus -1.00000008 -> -1.00000009 -nextm037 nextminus -1.00000009 -> -1.00000010 -nextm038 nextminus -1.00000010 -> -1.00000011 -nextm039 nextminus -1.00000011 -> -1.00000012 - --- input operand is >precision -nextm041 nextminus 1.00000010998 -> 1.00000010 -nextm042 nextminus 1.00000010999 -> 1.00000010 -nextm043 nextminus 1.00000011000 -> 1.00000010 -nextm044 nextminus 1.00000011001 -> 1.00000011 -nextm045 nextminus 1.00000011002 -> 1.00000011 -nextm046 nextminus 1.00000011002 -> 1.00000011 -nextm047 nextminus 1.00000011052 -> 1.00000011 -nextm048 nextminus 1.00000011552 -> 1.00000011 -nextm049 nextminus -1.00000010998 -> -1.00000011 -nextm050 nextminus -1.00000010999 -> -1.00000011 -nextm051 nextminus -1.00000011000 -> -1.00000012 -nextm052 nextminus -1.00000011001 -> -1.00000012 -nextm053 nextminus -1.00000011002 -> -1.00000012 -nextm054 nextminus -1.00000011002 -> -1.00000012 -nextm055 nextminus -1.00000011052 -> -1.00000012 -nextm056 nextminus -1.00000011552 -> -1.00000012 --- ultra-tiny inputs -nextm060 nextminus 1E-99999 -> 0E-391 -nextm061 nextminus 1E-999999999 -> 0E-391 -nextm062 nextminus 1E-391 -> 0E-391 -nextm063 nextminus -1E-99999 -> -1E-391 -nextm064 nextminus -1E-999999999 -> -1E-391 -nextm065 nextminus -1E-391 -> -2E-391 - --- Zeros -nextm100 nextminus -0 -> -1E-391 -nextm101 nextminus 0 -> -1E-391 -nextm102 nextminus 0.00 -> -1E-391 -nextm103 nextminus -0.00 -> -1E-391 -nextm104 nextminus 0E-300 -> -1E-391 -nextm105 nextminus 0E+300 -> -1E-391 -nextm106 nextminus 0E+30000 -> -1E-391 -nextm107 nextminus -0E+30000 -> -1E-391 - -precision: 9 -maxExponent: 999 -minexponent: -999 --- specials -nextm150 nextminus Inf -> 9.99999999E+999 -nextm151 nextminus -Inf -> -Infinity -nextm152 nextminus NaN -> NaN -nextm153 nextminus sNaN -> NaN Invalid_operation -nextm154 nextminus NaN77 -> NaN77 -nextm155 nextminus sNaN88 -> NaN88 Invalid_operation -nextm156 nextminus -NaN -> -NaN -nextm157 nextminus -sNaN -> -NaN Invalid_operation -nextm158 nextminus -NaN77 -> -NaN77 -nextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -nextm170 nextminus 9.99999999E+999 -> 9.99999998E+999 -nextm171 nextminus 9.99999998E+999 -> 9.99999997E+999 -nextm172 nextminus 1E-999 -> 9.9999999E-1000 -nextm173 nextminus 1.00000000E-999 -> 9.9999999E-1000 -nextm174 nextminus 9E-1007 -> 8E-1007 -nextm175 nextminus 9.9E-1006 -> 9.8E-1006 -nextm176 nextminus 9.9999E-1003 -> 9.9998E-1003 -nextm177 nextminus 9.9999999E-1000 -> 9.9999998E-1000 -nextm178 nextminus 9.9999998E-1000 -> 9.9999997E-1000 -nextm179 nextminus 9.9999997E-1000 -> 9.9999996E-1000 -nextm180 nextminus 0E-1007 -> -1E-1007 -nextm181 nextminus 1E-1007 -> 0E-1007 -nextm182 nextminus 2E-1007 -> 1E-1007 - -nextm183 nextminus -0E-1007 -> -1E-1007 -nextm184 nextminus -1E-1007 -> -2E-1007 -nextm185 nextminus -2E-1007 -> -3E-1007 -nextm186 nextminus -10E-1007 -> -1.1E-1006 -nextm187 nextminus -100E-1007 -> -1.01E-1005 -nextm188 nextminus -100000E-1007 -> -1.00001E-1002 -nextm189 nextminus -1.0000E-999 -> -1.00000001E-999 -nextm190 nextminus -1.00000000E-999 -> -1.00000001E-999 -nextm191 nextminus -1E-999 -> -1.00000001E-999 -nextm192 nextminus -9.99999998E+999 -> -9.99999999E+999 -nextm193 nextminus -9.99999999E+999 -> -Infinity - --- Null tests -nextm900 nextminus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- nextminus.decTest -- decimal next that is less [754r nextdown] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +nextm001 nextminus 0.999999995 -> 0.999999994 +nextm002 nextminus 0.999999996 -> 0.999999995 +nextm003 nextminus 0.999999997 -> 0.999999996 +nextm004 nextminus 0.999999998 -> 0.999999997 +nextm005 nextminus 0.999999999 -> 0.999999998 +nextm006 nextminus 1.00000000 -> 0.999999999 +nextm007 nextminus 1.0 -> 0.999999999 +nextm008 nextminus 1 -> 0.999999999 +nextm009 nextminus 1.00000001 -> 1.00000000 +nextm010 nextminus 1.00000002 -> 1.00000001 +nextm011 nextminus 1.00000003 -> 1.00000002 +nextm012 nextminus 1.00000004 -> 1.00000003 +nextm013 nextminus 1.00000005 -> 1.00000004 +nextm014 nextminus 1.00000006 -> 1.00000005 +nextm015 nextminus 1.00000007 -> 1.00000006 +nextm016 nextminus 1.00000008 -> 1.00000007 +nextm017 nextminus 1.00000009 -> 1.00000008 +nextm018 nextminus 1.00000010 -> 1.00000009 +nextm019 nextminus 1.00000011 -> 1.00000010 +nextm020 nextminus 1.00000012 -> 1.00000011 + +nextm021 nextminus -0.999999995 -> -0.999999996 +nextm022 nextminus -0.999999996 -> -0.999999997 +nextm023 nextminus -0.999999997 -> -0.999999998 +nextm024 nextminus -0.999999998 -> -0.999999999 +nextm025 nextminus -0.999999999 -> -1.00000000 +nextm026 nextminus -1.00000000 -> -1.00000001 +nextm027 nextminus -1.0 -> -1.00000001 +nextm028 nextminus -1 -> -1.00000001 +nextm029 nextminus -1.00000001 -> -1.00000002 +nextm030 nextminus -1.00000002 -> -1.00000003 +nextm031 nextminus -1.00000003 -> -1.00000004 +nextm032 nextminus -1.00000004 -> -1.00000005 +nextm033 nextminus -1.00000005 -> -1.00000006 +nextm034 nextminus -1.00000006 -> -1.00000007 +nextm035 nextminus -1.00000007 -> -1.00000008 +nextm036 nextminus -1.00000008 -> -1.00000009 +nextm037 nextminus -1.00000009 -> -1.00000010 +nextm038 nextminus -1.00000010 -> -1.00000011 +nextm039 nextminus -1.00000011 -> -1.00000012 + +-- input operand is >precision +nextm041 nextminus 1.00000010998 -> 1.00000010 +nextm042 nextminus 1.00000010999 -> 1.00000010 +nextm043 nextminus 1.00000011000 -> 1.00000010 +nextm044 nextminus 1.00000011001 -> 1.00000011 +nextm045 nextminus 1.00000011002 -> 1.00000011 +nextm046 nextminus 1.00000011002 -> 1.00000011 +nextm047 nextminus 1.00000011052 -> 1.00000011 +nextm048 nextminus 1.00000011552 -> 1.00000011 +nextm049 nextminus -1.00000010998 -> -1.00000011 +nextm050 nextminus -1.00000010999 -> -1.00000011 +nextm051 nextminus -1.00000011000 -> -1.00000012 +nextm052 nextminus -1.00000011001 -> -1.00000012 +nextm053 nextminus -1.00000011002 -> -1.00000012 +nextm054 nextminus -1.00000011002 -> -1.00000012 +nextm055 nextminus -1.00000011052 -> -1.00000012 +nextm056 nextminus -1.00000011552 -> -1.00000012 +-- ultra-tiny inputs +nextm060 nextminus 1E-99999 -> 0E-391 +nextm061 nextminus 1E-999999999 -> 0E-391 +nextm062 nextminus 1E-391 -> 0E-391 +nextm063 nextminus -1E-99999 -> -1E-391 +nextm064 nextminus -1E-999999999 -> -1E-391 +nextm065 nextminus -1E-391 -> -2E-391 + +-- Zeros +nextm100 nextminus -0 -> -1E-391 +nextm101 nextminus 0 -> -1E-391 +nextm102 nextminus 0.00 -> -1E-391 +nextm103 nextminus -0.00 -> -1E-391 +nextm104 nextminus 0E-300 -> -1E-391 +nextm105 nextminus 0E+300 -> -1E-391 +nextm106 nextminus 0E+30000 -> -1E-391 +nextm107 nextminus -0E+30000 -> -1E-391 + +precision: 9 +maxExponent: 999 +minexponent: -999 +-- specials +nextm150 nextminus Inf -> 9.99999999E+999 +nextm151 nextminus -Inf -> -Infinity +nextm152 nextminus NaN -> NaN +nextm153 nextminus sNaN -> NaN Invalid_operation +nextm154 nextminus NaN77 -> NaN77 +nextm155 nextminus sNaN88 -> NaN88 Invalid_operation +nextm156 nextminus -NaN -> -NaN +nextm157 nextminus -sNaN -> -NaN Invalid_operation +nextm158 nextminus -NaN77 -> -NaN77 +nextm159 nextminus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +nextm170 nextminus 9.99999999E+999 -> 9.99999998E+999 +nextm171 nextminus 9.99999998E+999 -> 9.99999997E+999 +nextm172 nextminus 1E-999 -> 9.9999999E-1000 +nextm173 nextminus 1.00000000E-999 -> 9.9999999E-1000 +nextm174 nextminus 9E-1007 -> 8E-1007 +nextm175 nextminus 9.9E-1006 -> 9.8E-1006 +nextm176 nextminus 9.9999E-1003 -> 9.9998E-1003 +nextm177 nextminus 9.9999999E-1000 -> 9.9999998E-1000 +nextm178 nextminus 9.9999998E-1000 -> 9.9999997E-1000 +nextm179 nextminus 9.9999997E-1000 -> 9.9999996E-1000 +nextm180 nextminus 0E-1007 -> -1E-1007 +nextm181 nextminus 1E-1007 -> 0E-1007 +nextm182 nextminus 2E-1007 -> 1E-1007 + +nextm183 nextminus -0E-1007 -> -1E-1007 +nextm184 nextminus -1E-1007 -> -2E-1007 +nextm185 nextminus -2E-1007 -> -3E-1007 +nextm186 nextminus -10E-1007 -> -1.1E-1006 +nextm187 nextminus -100E-1007 -> -1.01E-1005 +nextm188 nextminus -100000E-1007 -> -1.00001E-1002 +nextm189 nextminus -1.0000E-999 -> -1.00000001E-999 +nextm190 nextminus -1.00000000E-999 -> -1.00000001E-999 +nextm191 nextminus -1E-999 -> -1.00000001E-999 +nextm192 nextminus -9.99999998E+999 -> -9.99999999E+999 +nextm193 nextminus -9.99999999E+999 -> -Infinity + +-- Null tests +nextm900 nextminus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/nextplus.decTest b/Lib/test/decimaltestdata/nextplus.decTest index c66e3287270..44989e50b17 100644 --- a/Lib/test/decimaltestdata/nextplus.decTest +++ b/Lib/test/decimaltestdata/nextplus.decTest @@ -1,150 +1,150 @@ ------------------------------------------------------------------------- --- nextplus.decTest -- decimal next that is greater [754r nextup] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - -nextp001 nextplus 0.999999995 -> 0.999999996 -nextp002 nextplus 0.999999996 -> 0.999999997 -nextp003 nextplus 0.999999997 -> 0.999999998 -nextp004 nextplus 0.999999998 -> 0.999999999 -nextp005 nextplus 0.999999999 -> 1.00000000 -nextp006 nextplus 1.00000000 -> 1.00000001 -nextp007 nextplus 1.0 -> 1.00000001 -nextp008 nextplus 1 -> 1.00000001 -nextp009 nextplus 1.00000001 -> 1.00000002 -nextp010 nextplus 1.00000002 -> 1.00000003 -nextp011 nextplus 1.00000003 -> 1.00000004 -nextp012 nextplus 1.00000004 -> 1.00000005 -nextp013 nextplus 1.00000005 -> 1.00000006 -nextp014 nextplus 1.00000006 -> 1.00000007 -nextp015 nextplus 1.00000007 -> 1.00000008 -nextp016 nextplus 1.00000008 -> 1.00000009 -nextp017 nextplus 1.00000009 -> 1.00000010 -nextp018 nextplus 1.00000010 -> 1.00000011 -nextp019 nextplus 1.00000011 -> 1.00000012 - -nextp021 nextplus -0.999999995 -> -0.999999994 -nextp022 nextplus -0.999999996 -> -0.999999995 -nextp023 nextplus -0.999999997 -> -0.999999996 -nextp024 nextplus -0.999999998 -> -0.999999997 -nextp025 nextplus -0.999999999 -> -0.999999998 -nextp026 nextplus -1.00000000 -> -0.999999999 -nextp027 nextplus -1.0 -> -0.999999999 -nextp028 nextplus -1 -> -0.999999999 -nextp029 nextplus -1.00000001 -> -1.00000000 -nextp030 nextplus -1.00000002 -> -1.00000001 -nextp031 nextplus -1.00000003 -> -1.00000002 -nextp032 nextplus -1.00000004 -> -1.00000003 -nextp033 nextplus -1.00000005 -> -1.00000004 -nextp034 nextplus -1.00000006 -> -1.00000005 -nextp035 nextplus -1.00000007 -> -1.00000006 -nextp036 nextplus -1.00000008 -> -1.00000007 -nextp037 nextplus -1.00000009 -> -1.00000008 -nextp038 nextplus -1.00000010 -> -1.00000009 -nextp039 nextplus -1.00000011 -> -1.00000010 -nextp040 nextplus -1.00000012 -> -1.00000011 - --- input operand is >precision -nextp041 nextplus 1.00000010998 -> 1.00000011 -nextp042 nextplus 1.00000010999 -> 1.00000011 -nextp043 nextplus 1.00000011000 -> 1.00000012 -nextp044 nextplus 1.00000011001 -> 1.00000012 -nextp045 nextplus 1.00000011002 -> 1.00000012 -nextp046 nextplus 1.00000011002 -> 1.00000012 -nextp047 nextplus 1.00000011052 -> 1.00000012 -nextp048 nextplus 1.00000011552 -> 1.00000012 -nextp049 nextplus -1.00000010998 -> -1.00000010 -nextp050 nextplus -1.00000010999 -> -1.00000010 -nextp051 nextplus -1.00000011000 -> -1.00000010 -nextp052 nextplus -1.00000011001 -> -1.00000011 -nextp053 nextplus -1.00000011002 -> -1.00000011 -nextp054 nextplus -1.00000011002 -> -1.00000011 -nextp055 nextplus -1.00000011052 -> -1.00000011 -nextp056 nextplus -1.00000011552 -> -1.00000011 --- ultra-tiny inputs -nextp060 nextplus 1E-99999 -> 1E-391 -nextp061 nextplus 1E-999999999 -> 1E-391 -nextp062 nextplus 1E-391 -> 2E-391 -nextp063 nextplus -1E-99999 -> -0E-391 -nextp064 nextplus -1E-999999999 -> -0E-391 -nextp065 nextplus -1E-391 -> -0E-391 - --- Zeros -nextp100 nextplus 0 -> 1E-391 -nextp101 nextplus 0.00 -> 1E-391 -nextp102 nextplus 0E-300 -> 1E-391 -nextp103 nextplus 0E+300 -> 1E-391 -nextp104 nextplus 0E+30000 -> 1E-391 -nextp105 nextplus -0 -> 1E-391 -nextp106 nextplus -0.00 -> 1E-391 -nextp107 nextplus -0E-300 -> 1E-391 -nextp108 nextplus -0E+300 -> 1E-391 -nextp109 nextplus -0E+30000 -> 1E-391 - -maxExponent: 999 -minexponent: -999 -precision: 9 --- specials -nextp150 nextplus Inf -> Infinity -nextp151 nextplus -Inf -> -9.99999999E+999 -nextp152 nextplus NaN -> NaN -nextp153 nextplus sNaN -> NaN Invalid_operation -nextp154 nextplus NaN77 -> NaN77 -nextp155 nextplus sNaN88 -> NaN88 Invalid_operation -nextp156 nextplus -NaN -> -NaN -nextp157 nextplus -sNaN -> -NaN Invalid_operation -nextp158 nextplus -NaN77 -> -NaN77 -nextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -nextp170 nextplus 9.99999999E+999 -> Infinity -nextp171 nextplus 9.99999998E+999 -> 9.99999999E+999 -nextp172 nextplus 1E-999 -> 1.00000001E-999 -nextp173 nextplus 1.00000000E-999 -> 1.00000001E-999 -nextp174 nextplus 9E-1007 -> 1.0E-1006 -nextp175 nextplus 9.9E-1006 -> 1.00E-1005 -nextp176 nextplus 9.9999E-1003 -> 1.00000E-1002 -nextp177 nextplus 9.9999999E-1000 -> 1.00000000E-999 -nextp178 nextplus 9.9999998E-1000 -> 9.9999999E-1000 -nextp179 nextplus 9.9999997E-1000 -> 9.9999998E-1000 -nextp180 nextplus 0E-1007 -> 1E-1007 -nextp181 nextplus 1E-1007 -> 2E-1007 -nextp182 nextplus 2E-1007 -> 3E-1007 - -nextp183 nextplus -0E-1007 -> 1E-1007 -nextp184 nextplus -1E-1007 -> -0E-1007 -nextp185 nextplus -2E-1007 -> -1E-1007 -nextp186 nextplus -10E-1007 -> -9E-1007 -nextp187 nextplus -100E-1007 -> -9.9E-1006 -nextp188 nextplus -100000E-1007 -> -9.9999E-1003 -nextp189 nextplus -1.0000E-999 -> -9.9999999E-1000 -nextp190 nextplus -1.00000000E-999 -> -9.9999999E-1000 -nextp191 nextplus -1E-999 -> -9.9999999E-1000 -nextp192 nextplus -9.99999998E+999 -> -9.99999997E+999 -nextp193 nextplus -9.99999999E+999 -> -9.99999998E+999 - --- Null tests -nextp900 nextplus # -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- nextplus.decTest -- decimal next that is greater [754r nextup] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +nextp001 nextplus 0.999999995 -> 0.999999996 +nextp002 nextplus 0.999999996 -> 0.999999997 +nextp003 nextplus 0.999999997 -> 0.999999998 +nextp004 nextplus 0.999999998 -> 0.999999999 +nextp005 nextplus 0.999999999 -> 1.00000000 +nextp006 nextplus 1.00000000 -> 1.00000001 +nextp007 nextplus 1.0 -> 1.00000001 +nextp008 nextplus 1 -> 1.00000001 +nextp009 nextplus 1.00000001 -> 1.00000002 +nextp010 nextplus 1.00000002 -> 1.00000003 +nextp011 nextplus 1.00000003 -> 1.00000004 +nextp012 nextplus 1.00000004 -> 1.00000005 +nextp013 nextplus 1.00000005 -> 1.00000006 +nextp014 nextplus 1.00000006 -> 1.00000007 +nextp015 nextplus 1.00000007 -> 1.00000008 +nextp016 nextplus 1.00000008 -> 1.00000009 +nextp017 nextplus 1.00000009 -> 1.00000010 +nextp018 nextplus 1.00000010 -> 1.00000011 +nextp019 nextplus 1.00000011 -> 1.00000012 + +nextp021 nextplus -0.999999995 -> -0.999999994 +nextp022 nextplus -0.999999996 -> -0.999999995 +nextp023 nextplus -0.999999997 -> -0.999999996 +nextp024 nextplus -0.999999998 -> -0.999999997 +nextp025 nextplus -0.999999999 -> -0.999999998 +nextp026 nextplus -1.00000000 -> -0.999999999 +nextp027 nextplus -1.0 -> -0.999999999 +nextp028 nextplus -1 -> -0.999999999 +nextp029 nextplus -1.00000001 -> -1.00000000 +nextp030 nextplus -1.00000002 -> -1.00000001 +nextp031 nextplus -1.00000003 -> -1.00000002 +nextp032 nextplus -1.00000004 -> -1.00000003 +nextp033 nextplus -1.00000005 -> -1.00000004 +nextp034 nextplus -1.00000006 -> -1.00000005 +nextp035 nextplus -1.00000007 -> -1.00000006 +nextp036 nextplus -1.00000008 -> -1.00000007 +nextp037 nextplus -1.00000009 -> -1.00000008 +nextp038 nextplus -1.00000010 -> -1.00000009 +nextp039 nextplus -1.00000011 -> -1.00000010 +nextp040 nextplus -1.00000012 -> -1.00000011 + +-- input operand is >precision +nextp041 nextplus 1.00000010998 -> 1.00000011 +nextp042 nextplus 1.00000010999 -> 1.00000011 +nextp043 nextplus 1.00000011000 -> 1.00000012 +nextp044 nextplus 1.00000011001 -> 1.00000012 +nextp045 nextplus 1.00000011002 -> 1.00000012 +nextp046 nextplus 1.00000011002 -> 1.00000012 +nextp047 nextplus 1.00000011052 -> 1.00000012 +nextp048 nextplus 1.00000011552 -> 1.00000012 +nextp049 nextplus -1.00000010998 -> -1.00000010 +nextp050 nextplus -1.00000010999 -> -1.00000010 +nextp051 nextplus -1.00000011000 -> -1.00000010 +nextp052 nextplus -1.00000011001 -> -1.00000011 +nextp053 nextplus -1.00000011002 -> -1.00000011 +nextp054 nextplus -1.00000011002 -> -1.00000011 +nextp055 nextplus -1.00000011052 -> -1.00000011 +nextp056 nextplus -1.00000011552 -> -1.00000011 +-- ultra-tiny inputs +nextp060 nextplus 1E-99999 -> 1E-391 +nextp061 nextplus 1E-999999999 -> 1E-391 +nextp062 nextplus 1E-391 -> 2E-391 +nextp063 nextplus -1E-99999 -> -0E-391 +nextp064 nextplus -1E-999999999 -> -0E-391 +nextp065 nextplus -1E-391 -> -0E-391 + +-- Zeros +nextp100 nextplus 0 -> 1E-391 +nextp101 nextplus 0.00 -> 1E-391 +nextp102 nextplus 0E-300 -> 1E-391 +nextp103 nextplus 0E+300 -> 1E-391 +nextp104 nextplus 0E+30000 -> 1E-391 +nextp105 nextplus -0 -> 1E-391 +nextp106 nextplus -0.00 -> 1E-391 +nextp107 nextplus -0E-300 -> 1E-391 +nextp108 nextplus -0E+300 -> 1E-391 +nextp109 nextplus -0E+30000 -> 1E-391 + +maxExponent: 999 +minexponent: -999 +precision: 9 +-- specials +nextp150 nextplus Inf -> Infinity +nextp151 nextplus -Inf -> -9.99999999E+999 +nextp152 nextplus NaN -> NaN +nextp153 nextplus sNaN -> NaN Invalid_operation +nextp154 nextplus NaN77 -> NaN77 +nextp155 nextplus sNaN88 -> NaN88 Invalid_operation +nextp156 nextplus -NaN -> -NaN +nextp157 nextplus -sNaN -> -NaN Invalid_operation +nextp158 nextplus -NaN77 -> -NaN77 +nextp159 nextplus -sNaN88 -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +nextp170 nextplus 9.99999999E+999 -> Infinity +nextp171 nextplus 9.99999998E+999 -> 9.99999999E+999 +nextp172 nextplus 1E-999 -> 1.00000001E-999 +nextp173 nextplus 1.00000000E-999 -> 1.00000001E-999 +nextp174 nextplus 9E-1007 -> 1.0E-1006 +nextp175 nextplus 9.9E-1006 -> 1.00E-1005 +nextp176 nextplus 9.9999E-1003 -> 1.00000E-1002 +nextp177 nextplus 9.9999999E-1000 -> 1.00000000E-999 +nextp178 nextplus 9.9999998E-1000 -> 9.9999999E-1000 +nextp179 nextplus 9.9999997E-1000 -> 9.9999998E-1000 +nextp180 nextplus 0E-1007 -> 1E-1007 +nextp181 nextplus 1E-1007 -> 2E-1007 +nextp182 nextplus 2E-1007 -> 3E-1007 + +nextp183 nextplus -0E-1007 -> 1E-1007 +nextp184 nextplus -1E-1007 -> -0E-1007 +nextp185 nextplus -2E-1007 -> -1E-1007 +nextp186 nextplus -10E-1007 -> -9E-1007 +nextp187 nextplus -100E-1007 -> -9.9E-1006 +nextp188 nextplus -100000E-1007 -> -9.9999E-1003 +nextp189 nextplus -1.0000E-999 -> -9.9999999E-1000 +nextp190 nextplus -1.00000000E-999 -> -9.9999999E-1000 +nextp191 nextplus -1E-999 -> -9.9999999E-1000 +nextp192 nextplus -9.99999998E+999 -> -9.99999997E+999 +nextp193 nextplus -9.99999999E+999 -> -9.99999998E+999 + +-- Null tests +nextp900 nextplus # -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/nexttoward.decTest b/Lib/test/decimaltestdata/nexttoward.decTest index 562385a00f2..da26f651c81 100644 --- a/Lib/test/decimaltestdata/nexttoward.decTest +++ b/Lib/test/decimaltestdata/nexttoward.decTest @@ -1,426 +1,426 @@ ------------------------------------------------------------------------- --- nexttoward.decTest -- decimal next toward rhs [754r nextafter] -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 384 -minexponent: -383 - --- Sanity check with a scattering of numerics -nextt001 nexttoward 10 10 -> 10 -nextt002 nexttoward -10 -10 -> -10 -nextt003 nexttoward 1 10 -> 1.00000001 -nextt004 nexttoward 1 -10 -> 0.999999999 -nextt005 nexttoward -1 10 -> -0.999999999 -nextt006 nexttoward -1 -10 -> -1.00000001 -nextt007 nexttoward 0 10 -> 1E-391 Underflow Subnormal Inexact Rounded -nextt008 nexttoward 0 -10 -> -1E-391 Underflow Subnormal Inexact Rounded -nextt009 nexttoward 9.99999999E+384 +Infinity -> Infinity Overflow Inexact Rounded -nextt010 nexttoward -9.99999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded - -------- lhs=rhs --- finites -nextt101 nexttoward 7 7 -> 7 -nextt102 nexttoward -7 -7 -> -7 -nextt103 nexttoward 75 75 -> 75 -nextt104 nexttoward -75 -75 -> -75 -nextt105 nexttoward 7.50 7.5 -> 7.50 -nextt106 nexttoward -7.50 -7.50 -> -7.50 -nextt107 nexttoward 7.500 7.5000 -> 7.500 -nextt108 nexttoward -7.500 -7.5 -> -7.500 - --- zeros -nextt111 nexttoward 0 0 -> 0 -nextt112 nexttoward -0 -0 -> -0 -nextt113 nexttoward 0E+4 0 -> 0E+4 -nextt114 nexttoward -0E+4 -0 -> -0E+4 -nextt115 nexttoward 0.0000 0.00000 -> 0.0000 -nextt116 nexttoward -0.0000 -0.00 -> -0.0000 -nextt117 nexttoward 0E-141 0 -> 0E-141 -nextt118 nexttoward -0E-141 -000 -> -0E-141 - --- full coefficients, alternating bits -nextt121 nexttoward 268268268 268268268 -> 268268268 -nextt122 nexttoward -268268268 -268268268 -> -268268268 -nextt123 nexttoward 134134134 134134134 -> 134134134 -nextt124 nexttoward -134134134 -134134134 -> -134134134 - --- Nmax, Nmin, Ntiny -nextt131 nexttoward 9.99999999E+384 9.99999999E+384 -> 9.99999999E+384 -nextt132 nexttoward 1E-383 1E-383 -> 1E-383 -nextt133 nexttoward 1.00000000E-383 1.00000000E-383 -> 1.00000000E-383 -nextt134 nexttoward 1E-391 1E-391 -> 1E-391 - -nextt135 nexttoward -1E-391 -1E-391 -> -1E-391 -nextt136 nexttoward -1.00000000E-383 -1.00000000E-383 -> -1.00000000E-383 -nextt137 nexttoward -1E-383 -1E-383 -> -1E-383 -nextt138 nexttoward -9.99999999E+384 -9.99999999E+384 -> -9.99999999E+384 - -------- lhs 0.999999996 -nextt202 nexttoward 0.999999996 Infinity -> 0.999999997 -nextt203 nexttoward 0.999999997 Infinity -> 0.999999998 -nextt204 nexttoward 0.999999998 Infinity -> 0.999999999 -nextt205 nexttoward 0.999999999 Infinity -> 1.00000000 -nextt206 nexttoward 1.00000000 Infinity -> 1.00000001 -nextt207 nexttoward 1.0 Infinity -> 1.00000001 -nextt208 nexttoward 1 Infinity -> 1.00000001 -nextt209 nexttoward 1.00000001 Infinity -> 1.00000002 -nextt210 nexttoward 1.00000002 Infinity -> 1.00000003 -nextt211 nexttoward 1.00000003 Infinity -> 1.00000004 -nextt212 nexttoward 1.00000004 Infinity -> 1.00000005 -nextt213 nexttoward 1.00000005 Infinity -> 1.00000006 -nextt214 nexttoward 1.00000006 Infinity -> 1.00000007 -nextt215 nexttoward 1.00000007 Infinity -> 1.00000008 -nextt216 nexttoward 1.00000008 Infinity -> 1.00000009 -nextt217 nexttoward 1.00000009 Infinity -> 1.00000010 -nextt218 nexttoward 1.00000010 Infinity -> 1.00000011 -nextt219 nexttoward 1.00000011 Infinity -> 1.00000012 - -nextt221 nexttoward -0.999999995 Infinity -> -0.999999994 -nextt222 nexttoward -0.999999996 Infinity -> -0.999999995 -nextt223 nexttoward -0.999999997 Infinity -> -0.999999996 -nextt224 nexttoward -0.999999998 Infinity -> -0.999999997 -nextt225 nexttoward -0.999999999 Infinity -> -0.999999998 -nextt226 nexttoward -1.00000000 Infinity -> -0.999999999 -nextt227 nexttoward -1.0 Infinity -> -0.999999999 -nextt228 nexttoward -1 Infinity -> -0.999999999 -nextt229 nexttoward -1.00000001 Infinity -> -1.00000000 -nextt230 nexttoward -1.00000002 Infinity -> -1.00000001 -nextt231 nexttoward -1.00000003 Infinity -> -1.00000002 -nextt232 nexttoward -1.00000004 Infinity -> -1.00000003 -nextt233 nexttoward -1.00000005 Infinity -> -1.00000004 -nextt234 nexttoward -1.00000006 Infinity -> -1.00000005 -nextt235 nexttoward -1.00000007 Infinity -> -1.00000006 -nextt236 nexttoward -1.00000008 Infinity -> -1.00000007 -nextt237 nexttoward -1.00000009 Infinity -> -1.00000008 -nextt238 nexttoward -1.00000010 Infinity -> -1.00000009 -nextt239 nexttoward -1.00000011 Infinity -> -1.00000010 -nextt240 nexttoward -1.00000012 Infinity -> -1.00000011 - --- input operand is >precision -nextt241 nexttoward 1.00000010998 Infinity -> 1.00000011 -nextt242 nexttoward 1.00000010999 Infinity -> 1.00000011 -nextt243 nexttoward 1.00000011000 Infinity -> 1.00000012 -nextt244 nexttoward 1.00000011001 Infinity -> 1.00000012 -nextt245 nexttoward 1.00000011002 Infinity -> 1.00000012 -nextt246 nexttoward 1.00000011002 Infinity -> 1.00000012 -nextt247 nexttoward 1.00000011052 Infinity -> 1.00000012 -nextt248 nexttoward 1.00000011552 Infinity -> 1.00000012 -nextt249 nexttoward -1.00000010998 Infinity -> -1.00000010 -nextt250 nexttoward -1.00000010999 Infinity -> -1.00000010 -nextt251 nexttoward -1.00000011000 Infinity -> -1.00000010 -nextt252 nexttoward -1.00000011001 Infinity -> -1.00000011 -nextt253 nexttoward -1.00000011002 Infinity -> -1.00000011 -nextt254 nexttoward -1.00000011002 Infinity -> -1.00000011 -nextt255 nexttoward -1.00000011052 Infinity -> -1.00000011 -nextt256 nexttoward -1.00000011552 Infinity -> -1.00000011 --- ultra-tiny inputs -nextt260 nexttoward 1E-99999 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt261 nexttoward 1E-999999999 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt262 nexttoward 1E-391 Infinity -> 2E-391 Underflow Subnormal Inexact Rounded -nextt263 nexttoward -1E-99999 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt264 nexttoward -1E-999999999 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt265 nexttoward -1E-391 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped - --- Zeros -nextt300 nexttoward 0 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt301 nexttoward 0.00 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt302 nexttoward 0E-300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt303 nexttoward 0E+300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt304 nexttoward 0E+30000 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt305 nexttoward -0 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt306 nexttoward -0.00 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt307 nexttoward -0E-300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt308 nexttoward -0E+300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded -nextt309 nexttoward -0E+30000 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded - --- specials -nextt350 nexttoward Inf Infinity -> Infinity -nextt351 nexttoward -Inf Infinity -> -9.99999999E+384 -nextt352 nexttoward NaN Infinity -> NaN -nextt353 nexttoward sNaN Infinity -> NaN Invalid_operation -nextt354 nexttoward NaN77 Infinity -> NaN77 -nextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation -nextt356 nexttoward -NaN Infinity -> -NaN -nextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation -nextt358 nexttoward -NaN77 Infinity -> -NaN77 -nextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -maxExponent: 999 -minexponent: -999 -nextt370 nexttoward 9.99999999E+999 Infinity -> Infinity Overflow Inexact Rounded -nextt371 nexttoward 9.99999998E+999 Infinity -> 9.99999999E+999 -nextt372 nexttoward 1E-999 Infinity -> 1.00000001E-999 -nextt373 nexttoward 1.00000000E-999 Infinity -> 1.00000001E-999 -nextt374 nexttoward 0.999999999E-999 Infinity -> 1.00000000E-999 -nextt375 nexttoward 0.99999999E-999 Infinity -> 1.00000000E-999 -nextt376 nexttoward 9E-1007 Infinity -> 1.0E-1006 Underflow Subnormal Inexact Rounded -nextt377 nexttoward 9.9E-1006 Infinity -> 1.00E-1005 Underflow Subnormal Inexact Rounded -nextt378 nexttoward 9.9999E-1003 Infinity -> 1.00000E-1002 Underflow Subnormal Inexact Rounded -nextt379 nexttoward 9.9999998E-1000 Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt380 nexttoward 9.9999997E-1000 Infinity -> 9.9999998E-1000 Underflow Subnormal Inexact Rounded -nextt381 nexttoward 0E-1007 Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded -nextt382 nexttoward 1E-1007 Infinity -> 2E-1007 Underflow Subnormal Inexact Rounded -nextt383 nexttoward 2E-1007 Infinity -> 3E-1007 Underflow Subnormal Inexact Rounded - -nextt385 nexttoward -0E-1007 Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded -nextt386 nexttoward -1E-1007 Infinity -> -0E-1007 Underflow Subnormal Inexact Rounded Clamped -nextt387 nexttoward -2E-1007 Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded -nextt388 nexttoward -10E-1007 Infinity -> -9E-1007 Underflow Subnormal Inexact Rounded -nextt389 nexttoward -100E-1007 Infinity -> -9.9E-1006 Underflow Subnormal Inexact Rounded -nextt390 nexttoward -100000E-1007 Infinity -> -9.9999E-1003 Underflow Subnormal Inexact Rounded -nextt391 nexttoward -1.0000E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt392 nexttoward -1.00000000E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt393 nexttoward -1E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt394 nexttoward -9.99999998E+999 Infinity -> -9.99999997E+999 -nextt395 nexttoward -9.99999999E+999 Infinity -> -9.99999998E+999 - -------- lhs>rhs -maxExponent: 384 -minexponent: -383 -nextt401 nexttoward 0.999999995 -Infinity -> 0.999999994 -nextt402 nexttoward 0.999999996 -Infinity -> 0.999999995 -nextt403 nexttoward 0.999999997 -Infinity -> 0.999999996 -nextt404 nexttoward 0.999999998 -Infinity -> 0.999999997 -nextt405 nexttoward 0.999999999 -Infinity -> 0.999999998 -nextt406 nexttoward 1.00000000 -Infinity -> 0.999999999 -nextt407 nexttoward 1.0 -Infinity -> 0.999999999 -nextt408 nexttoward 1 -Infinity -> 0.999999999 -nextt409 nexttoward 1.00000001 -Infinity -> 1.00000000 -nextt410 nexttoward 1.00000002 -Infinity -> 1.00000001 -nextt411 nexttoward 1.00000003 -Infinity -> 1.00000002 -nextt412 nexttoward 1.00000004 -Infinity -> 1.00000003 -nextt413 nexttoward 1.00000005 -Infinity -> 1.00000004 -nextt414 nexttoward 1.00000006 -Infinity -> 1.00000005 -nextt415 nexttoward 1.00000007 -Infinity -> 1.00000006 -nextt416 nexttoward 1.00000008 -Infinity -> 1.00000007 -nextt417 nexttoward 1.00000009 -Infinity -> 1.00000008 -nextt418 nexttoward 1.00000010 -Infinity -> 1.00000009 -nextt419 nexttoward 1.00000011 -Infinity -> 1.00000010 -nextt420 nexttoward 1.00000012 -Infinity -> 1.00000011 - -nextt421 nexttoward -0.999999995 -Infinity -> -0.999999996 -nextt422 nexttoward -0.999999996 -Infinity -> -0.999999997 -nextt423 nexttoward -0.999999997 -Infinity -> -0.999999998 -nextt424 nexttoward -0.999999998 -Infinity -> -0.999999999 -nextt425 nexttoward -0.999999999 -Infinity -> -1.00000000 -nextt426 nexttoward -1.00000000 -Infinity -> -1.00000001 -nextt427 nexttoward -1.0 -Infinity -> -1.00000001 -nextt428 nexttoward -1 -Infinity -> -1.00000001 -nextt429 nexttoward -1.00000001 -Infinity -> -1.00000002 -nextt430 nexttoward -1.00000002 -Infinity -> -1.00000003 -nextt431 nexttoward -1.00000003 -Infinity -> -1.00000004 -nextt432 nexttoward -1.00000004 -Infinity -> -1.00000005 -nextt433 nexttoward -1.00000005 -Infinity -> -1.00000006 -nextt434 nexttoward -1.00000006 -Infinity -> -1.00000007 -nextt435 nexttoward -1.00000007 -Infinity -> -1.00000008 -nextt436 nexttoward -1.00000008 -Infinity -> -1.00000009 -nextt437 nexttoward -1.00000009 -Infinity -> -1.00000010 -nextt438 nexttoward -1.00000010 -Infinity -> -1.00000011 -nextt439 nexttoward -1.00000011 -Infinity -> -1.00000012 - --- input operand is >precision -nextt441 nexttoward 1.00000010998 -Infinity -> 1.00000010 -nextt442 nexttoward 1.00000010999 -Infinity -> 1.00000010 -nextt443 nexttoward 1.00000011000 -Infinity -> 1.00000010 -nextt444 nexttoward 1.00000011001 -Infinity -> 1.00000011 -nextt445 nexttoward 1.00000011002 -Infinity -> 1.00000011 -nextt446 nexttoward 1.00000011002 -Infinity -> 1.00000011 -nextt447 nexttoward 1.00000011052 -Infinity -> 1.00000011 -nextt448 nexttoward 1.00000011552 -Infinity -> 1.00000011 -nextt449 nexttoward -1.00000010998 -Infinity -> -1.00000011 -nextt450 nexttoward -1.00000010999 -Infinity -> -1.00000011 -nextt451 nexttoward -1.00000011000 -Infinity -> -1.00000012 -nextt452 nexttoward -1.00000011001 -Infinity -> -1.00000012 -nextt453 nexttoward -1.00000011002 -Infinity -> -1.00000012 -nextt454 nexttoward -1.00000011002 -Infinity -> -1.00000012 -nextt455 nexttoward -1.00000011052 -Infinity -> -1.00000012 -nextt456 nexttoward -1.00000011552 -Infinity -> -1.00000012 --- ultra-tiny inputs -nextt460 nexttoward 1E-99999 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt461 nexttoward 1E-999999999 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt462 nexttoward 1E-391 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped -nextt463 nexttoward -1E-99999 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt464 nexttoward -1E-999999999 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt465 nexttoward -1E-391 -Infinity -> -2E-391 Underflow Subnormal Inexact Rounded - --- Zeros -nextt500 nexttoward -0 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt501 nexttoward 0 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt502 nexttoward 0.00 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt503 nexttoward -0.00 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt504 nexttoward 0E-300 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt505 nexttoward 0E+300 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt506 nexttoward 0E+30000 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt507 nexttoward -0E+30000 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded -nextt508 nexttoward 0.00 -0.0000 -> -0.00 - --- specials -nextt550 nexttoward Inf -Infinity -> 9.99999999E+384 -nextt551 nexttoward -Inf -Infinity -> -Infinity -nextt552 nexttoward NaN -Infinity -> NaN -nextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation -nextt554 nexttoward NaN77 -Infinity -> NaN77 -nextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation -nextt556 nexttoward -NaN -Infinity -> -NaN -nextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation -nextt558 nexttoward -NaN77 -Infinity -> -NaN77 -nextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation - --- Nmax, Nmin, Ntiny, subnormals -maxExponent: 999 -minexponent: -999 -nextt570 nexttoward 9.99999999E+999 -Infinity -> 9.99999998E+999 -nextt571 nexttoward 9.99999998E+999 -Infinity -> 9.99999997E+999 -nextt572 nexttoward 1E-999 -Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt573 nexttoward 1.00000000E-999 -Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded -nextt574 nexttoward 9E-1007 -Infinity -> 8E-1007 Underflow Subnormal Inexact Rounded -nextt575 nexttoward 9.9E-1006 -Infinity -> 9.8E-1006 Underflow Subnormal Inexact Rounded -nextt576 nexttoward 9.9999E-1003 -Infinity -> 9.9998E-1003 Underflow Subnormal Inexact Rounded -nextt577 nexttoward 9.9999999E-1000 -Infinity -> 9.9999998E-1000 Underflow Subnormal Inexact Rounded -nextt578 nexttoward 9.9999998E-1000 -Infinity -> 9.9999997E-1000 Underflow Subnormal Inexact Rounded -nextt579 nexttoward 9.9999997E-1000 -Infinity -> 9.9999996E-1000 Underflow Subnormal Inexact Rounded -nextt580 nexttoward 0E-1007 -Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded -nextt581 nexttoward 1E-1007 -Infinity -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped -nextt582 nexttoward 2E-1007 -Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded - -nextt583 nexttoward -0E-1007 -Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded -nextt584 nexttoward -1E-1007 -Infinity -> -2E-1007 Underflow Subnormal Inexact Rounded -nextt585 nexttoward -2E-1007 -Infinity -> -3E-1007 Underflow Subnormal Inexact Rounded -nextt586 nexttoward -10E-1007 -Infinity -> -1.1E-1006 Underflow Subnormal Inexact Rounded -nextt587 nexttoward -100E-1007 -Infinity -> -1.01E-1005 Underflow Subnormal Inexact Rounded -nextt588 nexttoward -100000E-1007 -Infinity -> -1.00001E-1002 Underflow Subnormal Inexact Rounded -nextt589 nexttoward -1.0000E-999 -Infinity -> -1.00000001E-999 -nextt590 nexttoward -1.00000000E-999 -Infinity -> -1.00000001E-999 -nextt591 nexttoward -1E-999 -Infinity -> -1.00000001E-999 -nextt592 nexttoward -9.99999998E+999 -Infinity -> -9.99999999E+999 -nextt593 nexttoward -9.99999999E+999 -Infinity -> -Infinity Overflow Inexact Rounded - - - - -------- Specials -maxExponent: 384 -minexponent: -383 -nextt780 nexttoward -Inf -Inf -> -Infinity -nextt781 nexttoward -Inf -1000 -> -9.99999999E+384 -nextt782 nexttoward -Inf -1 -> -9.99999999E+384 -nextt783 nexttoward -Inf -0 -> -9.99999999E+384 -nextt784 nexttoward -Inf 0 -> -9.99999999E+384 -nextt785 nexttoward -Inf 1 -> -9.99999999E+384 -nextt786 nexttoward -Inf 1000 -> -9.99999999E+384 -nextt787 nexttoward -1000 -Inf -> -1000.00001 -nextt788 nexttoward -Inf -Inf -> -Infinity -nextt789 nexttoward -1 -Inf -> -1.00000001 -nextt790 nexttoward -0 -Inf -> -1E-391 Underflow Subnormal Inexact Rounded -nextt791 nexttoward 0 -Inf -> -1E-391 Underflow Subnormal Inexact Rounded -nextt792 nexttoward 1 -Inf -> 0.999999999 -nextt793 nexttoward 1000 -Inf -> 999.999999 -nextt794 nexttoward Inf -Inf -> 9.99999999E+384 - -nextt800 nexttoward Inf -Inf -> 9.99999999E+384 -nextt801 nexttoward Inf -1000 -> 9.99999999E+384 -nextt802 nexttoward Inf -1 -> 9.99999999E+384 -nextt803 nexttoward Inf -0 -> 9.99999999E+384 -nextt804 nexttoward Inf 0 -> 9.99999999E+384 -nextt805 nexttoward Inf 1 -> 9.99999999E+384 -nextt806 nexttoward Inf 1000 -> 9.99999999E+384 -nextt807 nexttoward Inf Inf -> Infinity -nextt808 nexttoward -1000 Inf -> -999.999999 -nextt809 nexttoward -Inf Inf -> -9.99999999E+384 -nextt810 nexttoward -1 Inf -> -0.999999999 -nextt811 nexttoward -0 Inf -> 1E-391 Underflow Subnormal Inexact Rounded -nextt812 nexttoward 0 Inf -> 1E-391 Underflow Subnormal Inexact Rounded -nextt813 nexttoward 1 Inf -> 1.00000001 -nextt814 nexttoward 1000 Inf -> 1000.00001 -nextt815 nexttoward Inf Inf -> Infinity - -nextt821 nexttoward NaN -Inf -> NaN -nextt822 nexttoward NaN -1000 -> NaN -nextt823 nexttoward NaN -1 -> NaN -nextt824 nexttoward NaN -0 -> NaN -nextt825 nexttoward NaN 0 -> NaN -nextt826 nexttoward NaN 1 -> NaN -nextt827 nexttoward NaN 1000 -> NaN -nextt828 nexttoward NaN Inf -> NaN -nextt829 nexttoward NaN NaN -> NaN -nextt830 nexttoward -Inf NaN -> NaN -nextt831 nexttoward -1000 NaN -> NaN -nextt832 nexttoward -1 NaN -> NaN -nextt833 nexttoward -0 NaN -> NaN -nextt834 nexttoward 0 NaN -> NaN -nextt835 nexttoward 1 NaN -> NaN -nextt836 nexttoward 1000 NaN -> NaN -nextt837 nexttoward Inf NaN -> NaN - -nextt841 nexttoward sNaN -Inf -> NaN Invalid_operation -nextt842 nexttoward sNaN -1000 -> NaN Invalid_operation -nextt843 nexttoward sNaN -1 -> NaN Invalid_operation -nextt844 nexttoward sNaN -0 -> NaN Invalid_operation -nextt845 nexttoward sNaN 0 -> NaN Invalid_operation -nextt846 nexttoward sNaN 1 -> NaN Invalid_operation -nextt847 nexttoward sNaN 1000 -> NaN Invalid_operation -nextt848 nexttoward sNaN NaN -> NaN Invalid_operation -nextt849 nexttoward sNaN sNaN -> NaN Invalid_operation -nextt850 nexttoward NaN sNaN -> NaN Invalid_operation -nextt851 nexttoward -Inf sNaN -> NaN Invalid_operation -nextt852 nexttoward -1000 sNaN -> NaN Invalid_operation -nextt853 nexttoward -1 sNaN -> NaN Invalid_operation -nextt854 nexttoward -0 sNaN -> NaN Invalid_operation -nextt855 nexttoward 0 sNaN -> NaN Invalid_operation -nextt856 nexttoward 1 sNaN -> NaN Invalid_operation -nextt857 nexttoward 1000 sNaN -> NaN Invalid_operation -nextt858 nexttoward Inf sNaN -> NaN Invalid_operation -nextt859 nexttoward NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -nextt861 nexttoward NaN1 -Inf -> NaN1 -nextt862 nexttoward +NaN2 -1000 -> NaN2 -nextt863 nexttoward NaN3 1000 -> NaN3 -nextt864 nexttoward NaN4 Inf -> NaN4 -nextt865 nexttoward NaN5 +NaN6 -> NaN5 -nextt866 nexttoward -Inf NaN7 -> NaN7 -nextt867 nexttoward -1000 NaN8 -> NaN8 -nextt868 nexttoward 1000 NaN9 -> NaN9 -nextt869 nexttoward Inf +NaN10 -> NaN10 -nextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation -nextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation -nextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation -nextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation -nextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation -nextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation -nextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation -nextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation -nextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation -nextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation -nextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation -nextt882 nexttoward -NaN26 NaN28 -> -NaN26 -nextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation -nextt884 nexttoward 1000 -NaN30 -> -NaN30 -nextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation - --- Null tests -nextt900 nexttoward 1 # -> NaN Invalid_operation -nextt901 nexttoward # 1 -> NaN Invalid_operation - +------------------------------------------------------------------------ +-- nexttoward.decTest -- decimal next toward rhs [754r nextafter] -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 384 +minexponent: -383 + +-- Sanity check with a scattering of numerics +nextt001 nexttoward 10 10 -> 10 +nextt002 nexttoward -10 -10 -> -10 +nextt003 nexttoward 1 10 -> 1.00000001 +nextt004 nexttoward 1 -10 -> 0.999999999 +nextt005 nexttoward -1 10 -> -0.999999999 +nextt006 nexttoward -1 -10 -> -1.00000001 +nextt007 nexttoward 0 10 -> 1E-391 Underflow Subnormal Inexact Rounded +nextt008 nexttoward 0 -10 -> -1E-391 Underflow Subnormal Inexact Rounded +nextt009 nexttoward 9.99999999E+384 +Infinity -> Infinity Overflow Inexact Rounded +nextt010 nexttoward -9.99999999E+384 -Infinity -> -Infinity Overflow Inexact Rounded + +------- lhs=rhs +-- finites +nextt101 nexttoward 7 7 -> 7 +nextt102 nexttoward -7 -7 -> -7 +nextt103 nexttoward 75 75 -> 75 +nextt104 nexttoward -75 -75 -> -75 +nextt105 nexttoward 7.50 7.5 -> 7.50 +nextt106 nexttoward -7.50 -7.50 -> -7.50 +nextt107 nexttoward 7.500 7.5000 -> 7.500 +nextt108 nexttoward -7.500 -7.5 -> -7.500 + +-- zeros +nextt111 nexttoward 0 0 -> 0 +nextt112 nexttoward -0 -0 -> -0 +nextt113 nexttoward 0E+4 0 -> 0E+4 +nextt114 nexttoward -0E+4 -0 -> -0E+4 +nextt115 nexttoward 0.0000 0.00000 -> 0.0000 +nextt116 nexttoward -0.0000 -0.00 -> -0.0000 +nextt117 nexttoward 0E-141 0 -> 0E-141 +nextt118 nexttoward -0E-141 -000 -> -0E-141 + +-- full coefficients, alternating bits +nextt121 nexttoward 268268268 268268268 -> 268268268 +nextt122 nexttoward -268268268 -268268268 -> -268268268 +nextt123 nexttoward 134134134 134134134 -> 134134134 +nextt124 nexttoward -134134134 -134134134 -> -134134134 + +-- Nmax, Nmin, Ntiny +nextt131 nexttoward 9.99999999E+384 9.99999999E+384 -> 9.99999999E+384 +nextt132 nexttoward 1E-383 1E-383 -> 1E-383 +nextt133 nexttoward 1.00000000E-383 1.00000000E-383 -> 1.00000000E-383 +nextt134 nexttoward 1E-391 1E-391 -> 1E-391 + +nextt135 nexttoward -1E-391 -1E-391 -> -1E-391 +nextt136 nexttoward -1.00000000E-383 -1.00000000E-383 -> -1.00000000E-383 +nextt137 nexttoward -1E-383 -1E-383 -> -1E-383 +nextt138 nexttoward -9.99999999E+384 -9.99999999E+384 -> -9.99999999E+384 + +------- lhs 0.999999996 +nextt202 nexttoward 0.999999996 Infinity -> 0.999999997 +nextt203 nexttoward 0.999999997 Infinity -> 0.999999998 +nextt204 nexttoward 0.999999998 Infinity -> 0.999999999 +nextt205 nexttoward 0.999999999 Infinity -> 1.00000000 +nextt206 nexttoward 1.00000000 Infinity -> 1.00000001 +nextt207 nexttoward 1.0 Infinity -> 1.00000001 +nextt208 nexttoward 1 Infinity -> 1.00000001 +nextt209 nexttoward 1.00000001 Infinity -> 1.00000002 +nextt210 nexttoward 1.00000002 Infinity -> 1.00000003 +nextt211 nexttoward 1.00000003 Infinity -> 1.00000004 +nextt212 nexttoward 1.00000004 Infinity -> 1.00000005 +nextt213 nexttoward 1.00000005 Infinity -> 1.00000006 +nextt214 nexttoward 1.00000006 Infinity -> 1.00000007 +nextt215 nexttoward 1.00000007 Infinity -> 1.00000008 +nextt216 nexttoward 1.00000008 Infinity -> 1.00000009 +nextt217 nexttoward 1.00000009 Infinity -> 1.00000010 +nextt218 nexttoward 1.00000010 Infinity -> 1.00000011 +nextt219 nexttoward 1.00000011 Infinity -> 1.00000012 + +nextt221 nexttoward -0.999999995 Infinity -> -0.999999994 +nextt222 nexttoward -0.999999996 Infinity -> -0.999999995 +nextt223 nexttoward -0.999999997 Infinity -> -0.999999996 +nextt224 nexttoward -0.999999998 Infinity -> -0.999999997 +nextt225 nexttoward -0.999999999 Infinity -> -0.999999998 +nextt226 nexttoward -1.00000000 Infinity -> -0.999999999 +nextt227 nexttoward -1.0 Infinity -> -0.999999999 +nextt228 nexttoward -1 Infinity -> -0.999999999 +nextt229 nexttoward -1.00000001 Infinity -> -1.00000000 +nextt230 nexttoward -1.00000002 Infinity -> -1.00000001 +nextt231 nexttoward -1.00000003 Infinity -> -1.00000002 +nextt232 nexttoward -1.00000004 Infinity -> -1.00000003 +nextt233 nexttoward -1.00000005 Infinity -> -1.00000004 +nextt234 nexttoward -1.00000006 Infinity -> -1.00000005 +nextt235 nexttoward -1.00000007 Infinity -> -1.00000006 +nextt236 nexttoward -1.00000008 Infinity -> -1.00000007 +nextt237 nexttoward -1.00000009 Infinity -> -1.00000008 +nextt238 nexttoward -1.00000010 Infinity -> -1.00000009 +nextt239 nexttoward -1.00000011 Infinity -> -1.00000010 +nextt240 nexttoward -1.00000012 Infinity -> -1.00000011 + +-- input operand is >precision +nextt241 nexttoward 1.00000010998 Infinity -> 1.00000011 +nextt242 nexttoward 1.00000010999 Infinity -> 1.00000011 +nextt243 nexttoward 1.00000011000 Infinity -> 1.00000012 +nextt244 nexttoward 1.00000011001 Infinity -> 1.00000012 +nextt245 nexttoward 1.00000011002 Infinity -> 1.00000012 +nextt246 nexttoward 1.00000011002 Infinity -> 1.00000012 +nextt247 nexttoward 1.00000011052 Infinity -> 1.00000012 +nextt248 nexttoward 1.00000011552 Infinity -> 1.00000012 +nextt249 nexttoward -1.00000010998 Infinity -> -1.00000010 +nextt250 nexttoward -1.00000010999 Infinity -> -1.00000010 +nextt251 nexttoward -1.00000011000 Infinity -> -1.00000010 +nextt252 nexttoward -1.00000011001 Infinity -> -1.00000011 +nextt253 nexttoward -1.00000011002 Infinity -> -1.00000011 +nextt254 nexttoward -1.00000011002 Infinity -> -1.00000011 +nextt255 nexttoward -1.00000011052 Infinity -> -1.00000011 +nextt256 nexttoward -1.00000011552 Infinity -> -1.00000011 +-- ultra-tiny inputs +nextt260 nexttoward 1E-99999 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt261 nexttoward 1E-999999999 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt262 nexttoward 1E-391 Infinity -> 2E-391 Underflow Subnormal Inexact Rounded +nextt263 nexttoward -1E-99999 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt264 nexttoward -1E-999999999 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt265 nexttoward -1E-391 Infinity -> -0E-391 Underflow Subnormal Inexact Rounded Clamped + +-- Zeros +nextt300 nexttoward 0 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt301 nexttoward 0.00 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt302 nexttoward 0E-300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt303 nexttoward 0E+300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt304 nexttoward 0E+30000 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt305 nexttoward -0 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt306 nexttoward -0.00 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt307 nexttoward -0E-300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt308 nexttoward -0E+300 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded +nextt309 nexttoward -0E+30000 Infinity -> 1E-391 Underflow Subnormal Inexact Rounded + +-- specials +nextt350 nexttoward Inf Infinity -> Infinity +nextt351 nexttoward -Inf Infinity -> -9.99999999E+384 +nextt352 nexttoward NaN Infinity -> NaN +nextt353 nexttoward sNaN Infinity -> NaN Invalid_operation +nextt354 nexttoward NaN77 Infinity -> NaN77 +nextt355 nexttoward sNaN88 Infinity -> NaN88 Invalid_operation +nextt356 nexttoward -NaN Infinity -> -NaN +nextt357 nexttoward -sNaN Infinity -> -NaN Invalid_operation +nextt358 nexttoward -NaN77 Infinity -> -NaN77 +nextt359 nexttoward -sNaN88 Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +maxExponent: 999 +minexponent: -999 +nextt370 nexttoward 9.99999999E+999 Infinity -> Infinity Overflow Inexact Rounded +nextt371 nexttoward 9.99999998E+999 Infinity -> 9.99999999E+999 +nextt372 nexttoward 1E-999 Infinity -> 1.00000001E-999 +nextt373 nexttoward 1.00000000E-999 Infinity -> 1.00000001E-999 +nextt374 nexttoward 0.999999999E-999 Infinity -> 1.00000000E-999 +nextt375 nexttoward 0.99999999E-999 Infinity -> 1.00000000E-999 +nextt376 nexttoward 9E-1007 Infinity -> 1.0E-1006 Underflow Subnormal Inexact Rounded +nextt377 nexttoward 9.9E-1006 Infinity -> 1.00E-1005 Underflow Subnormal Inexact Rounded +nextt378 nexttoward 9.9999E-1003 Infinity -> 1.00000E-1002 Underflow Subnormal Inexact Rounded +nextt379 nexttoward 9.9999998E-1000 Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt380 nexttoward 9.9999997E-1000 Infinity -> 9.9999998E-1000 Underflow Subnormal Inexact Rounded +nextt381 nexttoward 0E-1007 Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded +nextt382 nexttoward 1E-1007 Infinity -> 2E-1007 Underflow Subnormal Inexact Rounded +nextt383 nexttoward 2E-1007 Infinity -> 3E-1007 Underflow Subnormal Inexact Rounded + +nextt385 nexttoward -0E-1007 Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded +nextt386 nexttoward -1E-1007 Infinity -> -0E-1007 Underflow Subnormal Inexact Rounded Clamped +nextt387 nexttoward -2E-1007 Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded +nextt388 nexttoward -10E-1007 Infinity -> -9E-1007 Underflow Subnormal Inexact Rounded +nextt389 nexttoward -100E-1007 Infinity -> -9.9E-1006 Underflow Subnormal Inexact Rounded +nextt390 nexttoward -100000E-1007 Infinity -> -9.9999E-1003 Underflow Subnormal Inexact Rounded +nextt391 nexttoward -1.0000E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt392 nexttoward -1.00000000E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt393 nexttoward -1E-999 Infinity -> -9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt394 nexttoward -9.99999998E+999 Infinity -> -9.99999997E+999 +nextt395 nexttoward -9.99999999E+999 Infinity -> -9.99999998E+999 + +------- lhs>rhs +maxExponent: 384 +minexponent: -383 +nextt401 nexttoward 0.999999995 -Infinity -> 0.999999994 +nextt402 nexttoward 0.999999996 -Infinity -> 0.999999995 +nextt403 nexttoward 0.999999997 -Infinity -> 0.999999996 +nextt404 nexttoward 0.999999998 -Infinity -> 0.999999997 +nextt405 nexttoward 0.999999999 -Infinity -> 0.999999998 +nextt406 nexttoward 1.00000000 -Infinity -> 0.999999999 +nextt407 nexttoward 1.0 -Infinity -> 0.999999999 +nextt408 nexttoward 1 -Infinity -> 0.999999999 +nextt409 nexttoward 1.00000001 -Infinity -> 1.00000000 +nextt410 nexttoward 1.00000002 -Infinity -> 1.00000001 +nextt411 nexttoward 1.00000003 -Infinity -> 1.00000002 +nextt412 nexttoward 1.00000004 -Infinity -> 1.00000003 +nextt413 nexttoward 1.00000005 -Infinity -> 1.00000004 +nextt414 nexttoward 1.00000006 -Infinity -> 1.00000005 +nextt415 nexttoward 1.00000007 -Infinity -> 1.00000006 +nextt416 nexttoward 1.00000008 -Infinity -> 1.00000007 +nextt417 nexttoward 1.00000009 -Infinity -> 1.00000008 +nextt418 nexttoward 1.00000010 -Infinity -> 1.00000009 +nextt419 nexttoward 1.00000011 -Infinity -> 1.00000010 +nextt420 nexttoward 1.00000012 -Infinity -> 1.00000011 + +nextt421 nexttoward -0.999999995 -Infinity -> -0.999999996 +nextt422 nexttoward -0.999999996 -Infinity -> -0.999999997 +nextt423 nexttoward -0.999999997 -Infinity -> -0.999999998 +nextt424 nexttoward -0.999999998 -Infinity -> -0.999999999 +nextt425 nexttoward -0.999999999 -Infinity -> -1.00000000 +nextt426 nexttoward -1.00000000 -Infinity -> -1.00000001 +nextt427 nexttoward -1.0 -Infinity -> -1.00000001 +nextt428 nexttoward -1 -Infinity -> -1.00000001 +nextt429 nexttoward -1.00000001 -Infinity -> -1.00000002 +nextt430 nexttoward -1.00000002 -Infinity -> -1.00000003 +nextt431 nexttoward -1.00000003 -Infinity -> -1.00000004 +nextt432 nexttoward -1.00000004 -Infinity -> -1.00000005 +nextt433 nexttoward -1.00000005 -Infinity -> -1.00000006 +nextt434 nexttoward -1.00000006 -Infinity -> -1.00000007 +nextt435 nexttoward -1.00000007 -Infinity -> -1.00000008 +nextt436 nexttoward -1.00000008 -Infinity -> -1.00000009 +nextt437 nexttoward -1.00000009 -Infinity -> -1.00000010 +nextt438 nexttoward -1.00000010 -Infinity -> -1.00000011 +nextt439 nexttoward -1.00000011 -Infinity -> -1.00000012 + +-- input operand is >precision +nextt441 nexttoward 1.00000010998 -Infinity -> 1.00000010 +nextt442 nexttoward 1.00000010999 -Infinity -> 1.00000010 +nextt443 nexttoward 1.00000011000 -Infinity -> 1.00000010 +nextt444 nexttoward 1.00000011001 -Infinity -> 1.00000011 +nextt445 nexttoward 1.00000011002 -Infinity -> 1.00000011 +nextt446 nexttoward 1.00000011002 -Infinity -> 1.00000011 +nextt447 nexttoward 1.00000011052 -Infinity -> 1.00000011 +nextt448 nexttoward 1.00000011552 -Infinity -> 1.00000011 +nextt449 nexttoward -1.00000010998 -Infinity -> -1.00000011 +nextt450 nexttoward -1.00000010999 -Infinity -> -1.00000011 +nextt451 nexttoward -1.00000011000 -Infinity -> -1.00000012 +nextt452 nexttoward -1.00000011001 -Infinity -> -1.00000012 +nextt453 nexttoward -1.00000011002 -Infinity -> -1.00000012 +nextt454 nexttoward -1.00000011002 -Infinity -> -1.00000012 +nextt455 nexttoward -1.00000011052 -Infinity -> -1.00000012 +nextt456 nexttoward -1.00000011552 -Infinity -> -1.00000012 +-- ultra-tiny inputs +nextt460 nexttoward 1E-99999 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt461 nexttoward 1E-999999999 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt462 nexttoward 1E-391 -Infinity -> 0E-391 Underflow Subnormal Inexact Rounded Clamped +nextt463 nexttoward -1E-99999 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt464 nexttoward -1E-999999999 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt465 nexttoward -1E-391 -Infinity -> -2E-391 Underflow Subnormal Inexact Rounded + +-- Zeros +nextt500 nexttoward -0 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt501 nexttoward 0 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt502 nexttoward 0.00 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt503 nexttoward -0.00 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt504 nexttoward 0E-300 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt505 nexttoward 0E+300 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt506 nexttoward 0E+30000 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt507 nexttoward -0E+30000 -Infinity -> -1E-391 Underflow Subnormal Inexact Rounded +nextt508 nexttoward 0.00 -0.0000 -> -0.00 + +-- specials +nextt550 nexttoward Inf -Infinity -> 9.99999999E+384 +nextt551 nexttoward -Inf -Infinity -> -Infinity +nextt552 nexttoward NaN -Infinity -> NaN +nextt553 nexttoward sNaN -Infinity -> NaN Invalid_operation +nextt554 nexttoward NaN77 -Infinity -> NaN77 +nextt555 nexttoward sNaN88 -Infinity -> NaN88 Invalid_operation +nextt556 nexttoward -NaN -Infinity -> -NaN +nextt557 nexttoward -sNaN -Infinity -> -NaN Invalid_operation +nextt558 nexttoward -NaN77 -Infinity -> -NaN77 +nextt559 nexttoward -sNaN88 -Infinity -> -NaN88 Invalid_operation + +-- Nmax, Nmin, Ntiny, subnormals +maxExponent: 999 +minexponent: -999 +nextt570 nexttoward 9.99999999E+999 -Infinity -> 9.99999998E+999 +nextt571 nexttoward 9.99999998E+999 -Infinity -> 9.99999997E+999 +nextt572 nexttoward 1E-999 -Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt573 nexttoward 1.00000000E-999 -Infinity -> 9.9999999E-1000 Underflow Subnormal Inexact Rounded +nextt574 nexttoward 9E-1007 -Infinity -> 8E-1007 Underflow Subnormal Inexact Rounded +nextt575 nexttoward 9.9E-1006 -Infinity -> 9.8E-1006 Underflow Subnormal Inexact Rounded +nextt576 nexttoward 9.9999E-1003 -Infinity -> 9.9998E-1003 Underflow Subnormal Inexact Rounded +nextt577 nexttoward 9.9999999E-1000 -Infinity -> 9.9999998E-1000 Underflow Subnormal Inexact Rounded +nextt578 nexttoward 9.9999998E-1000 -Infinity -> 9.9999997E-1000 Underflow Subnormal Inexact Rounded +nextt579 nexttoward 9.9999997E-1000 -Infinity -> 9.9999996E-1000 Underflow Subnormal Inexact Rounded +nextt580 nexttoward 0E-1007 -Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded +nextt581 nexttoward 1E-1007 -Infinity -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped +nextt582 nexttoward 2E-1007 -Infinity -> 1E-1007 Underflow Subnormal Inexact Rounded + +nextt583 nexttoward -0E-1007 -Infinity -> -1E-1007 Underflow Subnormal Inexact Rounded +nextt584 nexttoward -1E-1007 -Infinity -> -2E-1007 Underflow Subnormal Inexact Rounded +nextt585 nexttoward -2E-1007 -Infinity -> -3E-1007 Underflow Subnormal Inexact Rounded +nextt586 nexttoward -10E-1007 -Infinity -> -1.1E-1006 Underflow Subnormal Inexact Rounded +nextt587 nexttoward -100E-1007 -Infinity -> -1.01E-1005 Underflow Subnormal Inexact Rounded +nextt588 nexttoward -100000E-1007 -Infinity -> -1.00001E-1002 Underflow Subnormal Inexact Rounded +nextt589 nexttoward -1.0000E-999 -Infinity -> -1.00000001E-999 +nextt590 nexttoward -1.00000000E-999 -Infinity -> -1.00000001E-999 +nextt591 nexttoward -1E-999 -Infinity -> -1.00000001E-999 +nextt592 nexttoward -9.99999998E+999 -Infinity -> -9.99999999E+999 +nextt593 nexttoward -9.99999999E+999 -Infinity -> -Infinity Overflow Inexact Rounded + + + + +------- Specials +maxExponent: 384 +minexponent: -383 +nextt780 nexttoward -Inf -Inf -> -Infinity +nextt781 nexttoward -Inf -1000 -> -9.99999999E+384 +nextt782 nexttoward -Inf -1 -> -9.99999999E+384 +nextt783 nexttoward -Inf -0 -> -9.99999999E+384 +nextt784 nexttoward -Inf 0 -> -9.99999999E+384 +nextt785 nexttoward -Inf 1 -> -9.99999999E+384 +nextt786 nexttoward -Inf 1000 -> -9.99999999E+384 +nextt787 nexttoward -1000 -Inf -> -1000.00001 +nextt788 nexttoward -Inf -Inf -> -Infinity +nextt789 nexttoward -1 -Inf -> -1.00000001 +nextt790 nexttoward -0 -Inf -> -1E-391 Underflow Subnormal Inexact Rounded +nextt791 nexttoward 0 -Inf -> -1E-391 Underflow Subnormal Inexact Rounded +nextt792 nexttoward 1 -Inf -> 0.999999999 +nextt793 nexttoward 1000 -Inf -> 999.999999 +nextt794 nexttoward Inf -Inf -> 9.99999999E+384 + +nextt800 nexttoward Inf -Inf -> 9.99999999E+384 +nextt801 nexttoward Inf -1000 -> 9.99999999E+384 +nextt802 nexttoward Inf -1 -> 9.99999999E+384 +nextt803 nexttoward Inf -0 -> 9.99999999E+384 +nextt804 nexttoward Inf 0 -> 9.99999999E+384 +nextt805 nexttoward Inf 1 -> 9.99999999E+384 +nextt806 nexttoward Inf 1000 -> 9.99999999E+384 +nextt807 nexttoward Inf Inf -> Infinity +nextt808 nexttoward -1000 Inf -> -999.999999 +nextt809 nexttoward -Inf Inf -> -9.99999999E+384 +nextt810 nexttoward -1 Inf -> -0.999999999 +nextt811 nexttoward -0 Inf -> 1E-391 Underflow Subnormal Inexact Rounded +nextt812 nexttoward 0 Inf -> 1E-391 Underflow Subnormal Inexact Rounded +nextt813 nexttoward 1 Inf -> 1.00000001 +nextt814 nexttoward 1000 Inf -> 1000.00001 +nextt815 nexttoward Inf Inf -> Infinity + +nextt821 nexttoward NaN -Inf -> NaN +nextt822 nexttoward NaN -1000 -> NaN +nextt823 nexttoward NaN -1 -> NaN +nextt824 nexttoward NaN -0 -> NaN +nextt825 nexttoward NaN 0 -> NaN +nextt826 nexttoward NaN 1 -> NaN +nextt827 nexttoward NaN 1000 -> NaN +nextt828 nexttoward NaN Inf -> NaN +nextt829 nexttoward NaN NaN -> NaN +nextt830 nexttoward -Inf NaN -> NaN +nextt831 nexttoward -1000 NaN -> NaN +nextt832 nexttoward -1 NaN -> NaN +nextt833 nexttoward -0 NaN -> NaN +nextt834 nexttoward 0 NaN -> NaN +nextt835 nexttoward 1 NaN -> NaN +nextt836 nexttoward 1000 NaN -> NaN +nextt837 nexttoward Inf NaN -> NaN + +nextt841 nexttoward sNaN -Inf -> NaN Invalid_operation +nextt842 nexttoward sNaN -1000 -> NaN Invalid_operation +nextt843 nexttoward sNaN -1 -> NaN Invalid_operation +nextt844 nexttoward sNaN -0 -> NaN Invalid_operation +nextt845 nexttoward sNaN 0 -> NaN Invalid_operation +nextt846 nexttoward sNaN 1 -> NaN Invalid_operation +nextt847 nexttoward sNaN 1000 -> NaN Invalid_operation +nextt848 nexttoward sNaN NaN -> NaN Invalid_operation +nextt849 nexttoward sNaN sNaN -> NaN Invalid_operation +nextt850 nexttoward NaN sNaN -> NaN Invalid_operation +nextt851 nexttoward -Inf sNaN -> NaN Invalid_operation +nextt852 nexttoward -1000 sNaN -> NaN Invalid_operation +nextt853 nexttoward -1 sNaN -> NaN Invalid_operation +nextt854 nexttoward -0 sNaN -> NaN Invalid_operation +nextt855 nexttoward 0 sNaN -> NaN Invalid_operation +nextt856 nexttoward 1 sNaN -> NaN Invalid_operation +nextt857 nexttoward 1000 sNaN -> NaN Invalid_operation +nextt858 nexttoward Inf sNaN -> NaN Invalid_operation +nextt859 nexttoward NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +nextt861 nexttoward NaN1 -Inf -> NaN1 +nextt862 nexttoward +NaN2 -1000 -> NaN2 +nextt863 nexttoward NaN3 1000 -> NaN3 +nextt864 nexttoward NaN4 Inf -> NaN4 +nextt865 nexttoward NaN5 +NaN6 -> NaN5 +nextt866 nexttoward -Inf NaN7 -> NaN7 +nextt867 nexttoward -1000 NaN8 -> NaN8 +nextt868 nexttoward 1000 NaN9 -> NaN9 +nextt869 nexttoward Inf +NaN10 -> NaN10 +nextt871 nexttoward sNaN11 -Inf -> NaN11 Invalid_operation +nextt872 nexttoward sNaN12 -1000 -> NaN12 Invalid_operation +nextt873 nexttoward sNaN13 1000 -> NaN13 Invalid_operation +nextt874 nexttoward sNaN14 NaN17 -> NaN14 Invalid_operation +nextt875 nexttoward sNaN15 sNaN18 -> NaN15 Invalid_operation +nextt876 nexttoward NaN16 sNaN19 -> NaN19 Invalid_operation +nextt877 nexttoward -Inf +sNaN20 -> NaN20 Invalid_operation +nextt878 nexttoward -1000 sNaN21 -> NaN21 Invalid_operation +nextt879 nexttoward 1000 sNaN22 -> NaN22 Invalid_operation +nextt880 nexttoward Inf sNaN23 -> NaN23 Invalid_operation +nextt881 nexttoward +NaN25 +sNaN24 -> NaN24 Invalid_operation +nextt882 nexttoward -NaN26 NaN28 -> -NaN26 +nextt883 nexttoward -sNaN27 sNaN29 -> -NaN27 Invalid_operation +nextt884 nexttoward 1000 -NaN30 -> -NaN30 +nextt885 nexttoward 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- Null tests +nextt900 nexttoward 1 # -> NaN Invalid_operation +nextt901 nexttoward # 1 -> NaN Invalid_operation + diff --git a/Lib/test/decimaltestdata/or.decTest b/Lib/test/decimaltestdata/or.decTest index 1aebff4e001..f471d0b6ced 100644 --- a/Lib/test/decimaltestdata/or.decTest +++ b/Lib/test/decimaltestdata/or.decTest @@ -1,334 +1,334 @@ ------------------------------------------------------------------------- --- or.decTest -- digitwise logical OR -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check (truth table) -orx001 or 0 0 -> 0 -orx002 or 0 1 -> 1 -orx003 or 1 0 -> 1 -orx004 or 1 1 -> 1 -orx005 or 1100 1010 -> 1110 --- and at msd and msd-1 -orx006 or 000000000 000000000 -> 0 -orx007 or 000000000 100000000 -> 100000000 -orx008 or 100000000 000000000 -> 100000000 -orx009 or 100000000 100000000 -> 100000000 -orx010 or 000000000 000000000 -> 0 -orx011 or 000000000 010000000 -> 10000000 -orx012 or 010000000 000000000 -> 10000000 -orx013 or 010000000 010000000 -> 10000000 - --- Various lengths --- 123456789 123456789 123456789 -orx021 or 111111111 111111111 -> 111111111 -orx022 or 111111111111 111111111 -> 111111111 -orx023 or 11111111 11111111 -> 11111111 -orx025 or 1111111 1111111 -> 1111111 -orx026 or 111111 111111 -> 111111 -orx027 or 11111 11111 -> 11111 -orx028 or 1111 1111 -> 1111 -orx029 or 111 111 -> 111 -orx031 or 11 11 -> 11 -orx032 or 1 1 -> 1 -orx033 or 111111111111 1111111111 -> 111111111 -orx034 or 11111111111 11111111111 -> 111111111 -orx035 or 1111111111 111111111111 -> 111111111 -orx036 or 111111111 1111111111111 -> 111111111 - -orx040 or 111111111 111111111111 -> 111111111 -orx041 or 11111111 111111111111 -> 111111111 -orx042 or 11111111 111111111 -> 111111111 -orx043 or 1111111 100000010 -> 101111111 -orx044 or 111111 100000100 -> 100111111 -orx045 or 11111 100001000 -> 100011111 -orx046 or 1111 100010000 -> 100011111 -orx047 or 111 100100000 -> 100100111 -orx048 or 11 101000000 -> 101000011 -orx049 or 1 110000000 -> 110000001 - -orx050 or 1111111111 1 -> 111111111 -orx051 or 111111111 1 -> 111111111 -orx052 or 11111111 1 -> 11111111 -orx053 or 1111111 1 -> 1111111 -orx054 or 111111 1 -> 111111 -orx055 or 11111 1 -> 11111 -orx056 or 1111 1 -> 1111 -orx057 or 111 1 -> 111 -orx058 or 11 1 -> 11 -orx059 or 1 1 -> 1 - -orx060 or 1111111111 0 -> 111111111 -orx061 or 111111111 0 -> 111111111 -orx062 or 11111111 0 -> 11111111 -orx063 or 1111111 0 -> 1111111 -orx064 or 111111 0 -> 111111 -orx065 or 11111 0 -> 11111 -orx066 or 1111 0 -> 1111 -orx067 or 111 0 -> 111 -orx068 or 11 0 -> 11 -orx069 or 1 0 -> 1 - -orx070 or 1 1111111111 -> 111111111 -orx071 or 1 111111111 -> 111111111 -orx072 or 1 11111111 -> 11111111 -orx073 or 1 1111111 -> 1111111 -orx074 or 1 111111 -> 111111 -orx075 or 1 11111 -> 11111 -orx076 or 1 1111 -> 1111 -orx077 or 1 111 -> 111 -orx078 or 1 11 -> 11 -orx079 or 1 1 -> 1 - -orx080 or 0 1111111111 -> 111111111 -orx081 or 0 111111111 -> 111111111 -orx082 or 0 11111111 -> 11111111 -orx083 or 0 1111111 -> 1111111 -orx084 or 0 111111 -> 111111 -orx085 or 0 11111 -> 11111 -orx086 or 0 1111 -> 1111 -orx087 or 0 111 -> 111 -orx088 or 0 11 -> 11 -orx089 or 0 1 -> 1 - -orx090 or 011111111 111101111 -> 111111111 -orx091 or 101111111 111101111 -> 111111111 -orx092 or 110111111 111101111 -> 111111111 -orx093 or 111011111 111101111 -> 111111111 -orx094 or 111101111 111101111 -> 111101111 -orx095 or 111110111 111101111 -> 111111111 -orx096 or 111111011 111101111 -> 111111111 -orx097 or 111111101 111101111 -> 111111111 -orx098 or 111111110 111101111 -> 111111111 - -orx100 or 111101111 011111111 -> 111111111 -orx101 or 111101111 101111111 -> 111111111 -orx102 or 111101111 110111111 -> 111111111 -orx103 or 111101111 111011111 -> 111111111 -orx104 or 111101111 111101111 -> 111101111 -orx105 or 111101111 111110111 -> 111111111 -orx106 or 111101111 111111011 -> 111111111 -orx107 or 111101111 111111101 -> 111111111 -orx108 or 111101111 111111110 -> 111111111 - --- non-0/1 should not be accepted, nor should signs -orx220 or 111111112 111111111 -> NaN Invalid_operation -orx221 or 333333333 333333333 -> NaN Invalid_operation -orx222 or 555555555 555555555 -> NaN Invalid_operation -orx223 or 777777777 777777777 -> NaN Invalid_operation -orx224 or 999999999 999999999 -> NaN Invalid_operation -orx225 or 222222222 999999999 -> NaN Invalid_operation -orx226 or 444444444 999999999 -> NaN Invalid_operation -orx227 or 666666666 999999999 -> NaN Invalid_operation -orx228 or 888888888 999999999 -> NaN Invalid_operation -orx229 or 999999999 222222222 -> NaN Invalid_operation -orx230 or 999999999 444444444 -> NaN Invalid_operation -orx231 or 999999999 666666666 -> NaN Invalid_operation -orx232 or 999999999 888888888 -> NaN Invalid_operation --- a few randoms -orx240 or 567468689 -934981942 -> NaN Invalid_operation -orx241 or 567367689 934981942 -> NaN Invalid_operation -orx242 or -631917772 -706014634 -> NaN Invalid_operation -orx243 or -756253257 138579234 -> NaN Invalid_operation -orx244 or 835590149 567435400 -> NaN Invalid_operation --- test MSD -orx250 or 200000000 100000000 -> NaN Invalid_operation -orx251 or 700000000 100000000 -> NaN Invalid_operation -orx252 or 800000000 100000000 -> NaN Invalid_operation -orx253 or 900000000 100000000 -> NaN Invalid_operation -orx254 or 200000000 000000000 -> NaN Invalid_operation -orx255 or 700000000 000000000 -> NaN Invalid_operation -orx256 or 800000000 000000000 -> NaN Invalid_operation -orx257 or 900000000 000000000 -> NaN Invalid_operation -orx258 or 100000000 200000000 -> NaN Invalid_operation -orx259 or 100000000 700000000 -> NaN Invalid_operation -orx260 or 100000000 800000000 -> NaN Invalid_operation -orx261 or 100000000 900000000 -> NaN Invalid_operation -orx262 or 000000000 200000000 -> NaN Invalid_operation -orx263 or 000000000 700000000 -> NaN Invalid_operation -orx264 or 000000000 800000000 -> NaN Invalid_operation -orx265 or 000000000 900000000 -> NaN Invalid_operation --- test MSD-1 -orx270 or 020000000 100000000 -> NaN Invalid_operation -orx271 or 070100000 100000000 -> NaN Invalid_operation -orx272 or 080010000 100000001 -> NaN Invalid_operation -orx273 or 090001000 100000010 -> NaN Invalid_operation -orx274 or 100000100 020010100 -> NaN Invalid_operation -orx275 or 100000000 070001000 -> NaN Invalid_operation -orx276 or 100000010 080010100 -> NaN Invalid_operation -orx277 or 100000000 090000010 -> NaN Invalid_operation --- test LSD -orx280 or 001000002 100000000 -> NaN Invalid_operation -orx281 or 000000007 100000000 -> NaN Invalid_operation -orx282 or 000000008 100000000 -> NaN Invalid_operation -orx283 or 000000009 100000000 -> NaN Invalid_operation -orx284 or 100000000 000100002 -> NaN Invalid_operation -orx285 or 100100000 001000007 -> NaN Invalid_operation -orx286 or 100010000 010000008 -> NaN Invalid_operation -orx287 or 100001000 100000009 -> NaN Invalid_operation --- test Middie -orx288 or 001020000 100000000 -> NaN Invalid_operation -orx289 or 000070001 100000000 -> NaN Invalid_operation -orx290 or 000080000 100010000 -> NaN Invalid_operation -orx291 or 000090000 100001000 -> NaN Invalid_operation -orx292 or 100000010 000020100 -> NaN Invalid_operation -orx293 or 100100000 000070010 -> NaN Invalid_operation -orx294 or 100010100 000080001 -> NaN Invalid_operation -orx295 or 100001000 000090000 -> NaN Invalid_operation --- signs -orx296 or -100001000 -000000000 -> NaN Invalid_operation -orx297 or -100001000 000010000 -> NaN Invalid_operation -orx298 or 100001000 -000000000 -> NaN Invalid_operation -orx299 or 100001000 000011000 -> 100011000 - --- Nmax, Nmin, Ntiny -orx331 or 2 9.99999999E+999 -> NaN Invalid_operation -orx332 or 3 1E-999 -> NaN Invalid_operation -orx333 or 4 1.00000000E-999 -> NaN Invalid_operation -orx334 or 5 1E-1007 -> NaN Invalid_operation -orx335 or 6 -1E-1007 -> NaN Invalid_operation -orx336 or 7 -1.00000000E-999 -> NaN Invalid_operation -orx337 or 8 -1E-999 -> NaN Invalid_operation -orx338 or 9 -9.99999999E+999 -> NaN Invalid_operation -orx341 or 9.99999999E+999 -18 -> NaN Invalid_operation -orx342 or 1E-999 01 -> NaN Invalid_operation -orx343 or 1.00000000E-999 -18 -> NaN Invalid_operation -orx344 or 1E-1007 18 -> NaN Invalid_operation -orx345 or -1E-1007 -10 -> NaN Invalid_operation -orx346 or -1.00000000E-999 18 -> NaN Invalid_operation -orx347 or -1E-999 10 -> NaN Invalid_operation -orx348 or -9.99999999E+999 -18 -> NaN Invalid_operation - --- A few other non-integers -orx361 or 1.0 1 -> NaN Invalid_operation -orx362 or 1E+1 1 -> NaN Invalid_operation -orx363 or 0.0 1 -> NaN Invalid_operation -orx364 or 0E+1 1 -> NaN Invalid_operation -orx365 or 9.9 1 -> NaN Invalid_operation -orx366 or 9E+1 1 -> NaN Invalid_operation -orx371 or 0 1.0 -> NaN Invalid_operation -orx372 or 0 1E+1 -> NaN Invalid_operation -orx373 or 0 0.0 -> NaN Invalid_operation -orx374 or 0 0E+1 -> NaN Invalid_operation -orx375 or 0 9.9 -> NaN Invalid_operation -orx376 or 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -orx780 or -Inf -Inf -> NaN Invalid_operation -orx781 or -Inf -1000 -> NaN Invalid_operation -orx782 or -Inf -1 -> NaN Invalid_operation -orx783 or -Inf -0 -> NaN Invalid_operation -orx784 or -Inf 0 -> NaN Invalid_operation -orx785 or -Inf 1 -> NaN Invalid_operation -orx786 or -Inf 1000 -> NaN Invalid_operation -orx787 or -1000 -Inf -> NaN Invalid_operation -orx788 or -Inf -Inf -> NaN Invalid_operation -orx789 or -1 -Inf -> NaN Invalid_operation -orx790 or -0 -Inf -> NaN Invalid_operation -orx791 or 0 -Inf -> NaN Invalid_operation -orx792 or 1 -Inf -> NaN Invalid_operation -orx793 or 1000 -Inf -> NaN Invalid_operation -orx794 or Inf -Inf -> NaN Invalid_operation - -orx800 or Inf -Inf -> NaN Invalid_operation -orx801 or Inf -1000 -> NaN Invalid_operation -orx802 or Inf -1 -> NaN Invalid_operation -orx803 or Inf -0 -> NaN Invalid_operation -orx804 or Inf 0 -> NaN Invalid_operation -orx805 or Inf 1 -> NaN Invalid_operation -orx806 or Inf 1000 -> NaN Invalid_operation -orx807 or Inf Inf -> NaN Invalid_operation -orx808 or -1000 Inf -> NaN Invalid_operation -orx809 or -Inf Inf -> NaN Invalid_operation -orx810 or -1 Inf -> NaN Invalid_operation -orx811 or -0 Inf -> NaN Invalid_operation -orx812 or 0 Inf -> NaN Invalid_operation -orx813 or 1 Inf -> NaN Invalid_operation -orx814 or 1000 Inf -> NaN Invalid_operation -orx815 or Inf Inf -> NaN Invalid_operation - -orx821 or NaN -Inf -> NaN Invalid_operation -orx822 or NaN -1000 -> NaN Invalid_operation -orx823 or NaN -1 -> NaN Invalid_operation -orx824 or NaN -0 -> NaN Invalid_operation -orx825 or NaN 0 -> NaN Invalid_operation -orx826 or NaN 1 -> NaN Invalid_operation -orx827 or NaN 1000 -> NaN Invalid_operation -orx828 or NaN Inf -> NaN Invalid_operation -orx829 or NaN NaN -> NaN Invalid_operation -orx830 or -Inf NaN -> NaN Invalid_operation -orx831 or -1000 NaN -> NaN Invalid_operation -orx832 or -1 NaN -> NaN Invalid_operation -orx833 or -0 NaN -> NaN Invalid_operation -orx834 or 0 NaN -> NaN Invalid_operation -orx835 or 1 NaN -> NaN Invalid_operation -orx836 or 1000 NaN -> NaN Invalid_operation -orx837 or Inf NaN -> NaN Invalid_operation - -orx841 or sNaN -Inf -> NaN Invalid_operation -orx842 or sNaN -1000 -> NaN Invalid_operation -orx843 or sNaN -1 -> NaN Invalid_operation -orx844 or sNaN -0 -> NaN Invalid_operation -orx845 or sNaN 0 -> NaN Invalid_operation -orx846 or sNaN 1 -> NaN Invalid_operation -orx847 or sNaN 1000 -> NaN Invalid_operation -orx848 or sNaN NaN -> NaN Invalid_operation -orx849 or sNaN sNaN -> NaN Invalid_operation -orx850 or NaN sNaN -> NaN Invalid_operation -orx851 or -Inf sNaN -> NaN Invalid_operation -orx852 or -1000 sNaN -> NaN Invalid_operation -orx853 or -1 sNaN -> NaN Invalid_operation -orx854 or -0 sNaN -> NaN Invalid_operation -orx855 or 0 sNaN -> NaN Invalid_operation -orx856 or 1 sNaN -> NaN Invalid_operation -orx857 or 1000 sNaN -> NaN Invalid_operation -orx858 or Inf sNaN -> NaN Invalid_operation -orx859 or NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -orx861 or NaN1 -Inf -> NaN Invalid_operation -orx862 or +NaN2 -1000 -> NaN Invalid_operation -orx863 or NaN3 1000 -> NaN Invalid_operation -orx864 or NaN4 Inf -> NaN Invalid_operation -orx865 or NaN5 +NaN6 -> NaN Invalid_operation -orx866 or -Inf NaN7 -> NaN Invalid_operation -orx867 or -1000 NaN8 -> NaN Invalid_operation -orx868 or 1000 NaN9 -> NaN Invalid_operation -orx869 or Inf +NaN10 -> NaN Invalid_operation -orx871 or sNaN11 -Inf -> NaN Invalid_operation -orx872 or sNaN12 -1000 -> NaN Invalid_operation -orx873 or sNaN13 1000 -> NaN Invalid_operation -orx874 or sNaN14 NaN17 -> NaN Invalid_operation -orx875 or sNaN15 sNaN18 -> NaN Invalid_operation -orx876 or NaN16 sNaN19 -> NaN Invalid_operation -orx877 or -Inf +sNaN20 -> NaN Invalid_operation -orx878 or -1000 sNaN21 -> NaN Invalid_operation -orx879 or 1000 sNaN22 -> NaN Invalid_operation -orx880 or Inf sNaN23 -> NaN Invalid_operation -orx881 or +NaN25 +sNaN24 -> NaN Invalid_operation -orx882 or -NaN26 NaN28 -> NaN Invalid_operation -orx883 or -sNaN27 sNaN29 -> NaN Invalid_operation -orx884 or 1000 -NaN30 -> NaN Invalid_operation -orx885 or 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- or.decTest -- digitwise logical OR -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check (truth table) +orx001 or 0 0 -> 0 +orx002 or 0 1 -> 1 +orx003 or 1 0 -> 1 +orx004 or 1 1 -> 1 +orx005 or 1100 1010 -> 1110 +-- and at msd and msd-1 +orx006 or 000000000 000000000 -> 0 +orx007 or 000000000 100000000 -> 100000000 +orx008 or 100000000 000000000 -> 100000000 +orx009 or 100000000 100000000 -> 100000000 +orx010 or 000000000 000000000 -> 0 +orx011 or 000000000 010000000 -> 10000000 +orx012 or 010000000 000000000 -> 10000000 +orx013 or 010000000 010000000 -> 10000000 + +-- Various lengths +-- 123456789 123456789 123456789 +orx021 or 111111111 111111111 -> 111111111 +orx022 or 111111111111 111111111 -> 111111111 +orx023 or 11111111 11111111 -> 11111111 +orx025 or 1111111 1111111 -> 1111111 +orx026 or 111111 111111 -> 111111 +orx027 or 11111 11111 -> 11111 +orx028 or 1111 1111 -> 1111 +orx029 or 111 111 -> 111 +orx031 or 11 11 -> 11 +orx032 or 1 1 -> 1 +orx033 or 111111111111 1111111111 -> 111111111 +orx034 or 11111111111 11111111111 -> 111111111 +orx035 or 1111111111 111111111111 -> 111111111 +orx036 or 111111111 1111111111111 -> 111111111 + +orx040 or 111111111 111111111111 -> 111111111 +orx041 or 11111111 111111111111 -> 111111111 +orx042 or 11111111 111111111 -> 111111111 +orx043 or 1111111 100000010 -> 101111111 +orx044 or 111111 100000100 -> 100111111 +orx045 or 11111 100001000 -> 100011111 +orx046 or 1111 100010000 -> 100011111 +orx047 or 111 100100000 -> 100100111 +orx048 or 11 101000000 -> 101000011 +orx049 or 1 110000000 -> 110000001 + +orx050 or 1111111111 1 -> 111111111 +orx051 or 111111111 1 -> 111111111 +orx052 or 11111111 1 -> 11111111 +orx053 or 1111111 1 -> 1111111 +orx054 or 111111 1 -> 111111 +orx055 or 11111 1 -> 11111 +orx056 or 1111 1 -> 1111 +orx057 or 111 1 -> 111 +orx058 or 11 1 -> 11 +orx059 or 1 1 -> 1 + +orx060 or 1111111111 0 -> 111111111 +orx061 or 111111111 0 -> 111111111 +orx062 or 11111111 0 -> 11111111 +orx063 or 1111111 0 -> 1111111 +orx064 or 111111 0 -> 111111 +orx065 or 11111 0 -> 11111 +orx066 or 1111 0 -> 1111 +orx067 or 111 0 -> 111 +orx068 or 11 0 -> 11 +orx069 or 1 0 -> 1 + +orx070 or 1 1111111111 -> 111111111 +orx071 or 1 111111111 -> 111111111 +orx072 or 1 11111111 -> 11111111 +orx073 or 1 1111111 -> 1111111 +orx074 or 1 111111 -> 111111 +orx075 or 1 11111 -> 11111 +orx076 or 1 1111 -> 1111 +orx077 or 1 111 -> 111 +orx078 or 1 11 -> 11 +orx079 or 1 1 -> 1 + +orx080 or 0 1111111111 -> 111111111 +orx081 or 0 111111111 -> 111111111 +orx082 or 0 11111111 -> 11111111 +orx083 or 0 1111111 -> 1111111 +orx084 or 0 111111 -> 111111 +orx085 or 0 11111 -> 11111 +orx086 or 0 1111 -> 1111 +orx087 or 0 111 -> 111 +orx088 or 0 11 -> 11 +orx089 or 0 1 -> 1 + +orx090 or 011111111 111101111 -> 111111111 +orx091 or 101111111 111101111 -> 111111111 +orx092 or 110111111 111101111 -> 111111111 +orx093 or 111011111 111101111 -> 111111111 +orx094 or 111101111 111101111 -> 111101111 +orx095 or 111110111 111101111 -> 111111111 +orx096 or 111111011 111101111 -> 111111111 +orx097 or 111111101 111101111 -> 111111111 +orx098 or 111111110 111101111 -> 111111111 + +orx100 or 111101111 011111111 -> 111111111 +orx101 or 111101111 101111111 -> 111111111 +orx102 or 111101111 110111111 -> 111111111 +orx103 or 111101111 111011111 -> 111111111 +orx104 or 111101111 111101111 -> 111101111 +orx105 or 111101111 111110111 -> 111111111 +orx106 or 111101111 111111011 -> 111111111 +orx107 or 111101111 111111101 -> 111111111 +orx108 or 111101111 111111110 -> 111111111 + +-- non-0/1 should not be accepted, nor should signs +orx220 or 111111112 111111111 -> NaN Invalid_operation +orx221 or 333333333 333333333 -> NaN Invalid_operation +orx222 or 555555555 555555555 -> NaN Invalid_operation +orx223 or 777777777 777777777 -> NaN Invalid_operation +orx224 or 999999999 999999999 -> NaN Invalid_operation +orx225 or 222222222 999999999 -> NaN Invalid_operation +orx226 or 444444444 999999999 -> NaN Invalid_operation +orx227 or 666666666 999999999 -> NaN Invalid_operation +orx228 or 888888888 999999999 -> NaN Invalid_operation +orx229 or 999999999 222222222 -> NaN Invalid_operation +orx230 or 999999999 444444444 -> NaN Invalid_operation +orx231 or 999999999 666666666 -> NaN Invalid_operation +orx232 or 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +orx240 or 567468689 -934981942 -> NaN Invalid_operation +orx241 or 567367689 934981942 -> NaN Invalid_operation +orx242 or -631917772 -706014634 -> NaN Invalid_operation +orx243 or -756253257 138579234 -> NaN Invalid_operation +orx244 or 835590149 567435400 -> NaN Invalid_operation +-- test MSD +orx250 or 200000000 100000000 -> NaN Invalid_operation +orx251 or 700000000 100000000 -> NaN Invalid_operation +orx252 or 800000000 100000000 -> NaN Invalid_operation +orx253 or 900000000 100000000 -> NaN Invalid_operation +orx254 or 200000000 000000000 -> NaN Invalid_operation +orx255 or 700000000 000000000 -> NaN Invalid_operation +orx256 or 800000000 000000000 -> NaN Invalid_operation +orx257 or 900000000 000000000 -> NaN Invalid_operation +orx258 or 100000000 200000000 -> NaN Invalid_operation +orx259 or 100000000 700000000 -> NaN Invalid_operation +orx260 or 100000000 800000000 -> NaN Invalid_operation +orx261 or 100000000 900000000 -> NaN Invalid_operation +orx262 or 000000000 200000000 -> NaN Invalid_operation +orx263 or 000000000 700000000 -> NaN Invalid_operation +orx264 or 000000000 800000000 -> NaN Invalid_operation +orx265 or 000000000 900000000 -> NaN Invalid_operation +-- test MSD-1 +orx270 or 020000000 100000000 -> NaN Invalid_operation +orx271 or 070100000 100000000 -> NaN Invalid_operation +orx272 or 080010000 100000001 -> NaN Invalid_operation +orx273 or 090001000 100000010 -> NaN Invalid_operation +orx274 or 100000100 020010100 -> NaN Invalid_operation +orx275 or 100000000 070001000 -> NaN Invalid_operation +orx276 or 100000010 080010100 -> NaN Invalid_operation +orx277 or 100000000 090000010 -> NaN Invalid_operation +-- test LSD +orx280 or 001000002 100000000 -> NaN Invalid_operation +orx281 or 000000007 100000000 -> NaN Invalid_operation +orx282 or 000000008 100000000 -> NaN Invalid_operation +orx283 or 000000009 100000000 -> NaN Invalid_operation +orx284 or 100000000 000100002 -> NaN Invalid_operation +orx285 or 100100000 001000007 -> NaN Invalid_operation +orx286 or 100010000 010000008 -> NaN Invalid_operation +orx287 or 100001000 100000009 -> NaN Invalid_operation +-- test Middie +orx288 or 001020000 100000000 -> NaN Invalid_operation +orx289 or 000070001 100000000 -> NaN Invalid_operation +orx290 or 000080000 100010000 -> NaN Invalid_operation +orx291 or 000090000 100001000 -> NaN Invalid_operation +orx292 or 100000010 000020100 -> NaN Invalid_operation +orx293 or 100100000 000070010 -> NaN Invalid_operation +orx294 or 100010100 000080001 -> NaN Invalid_operation +orx295 or 100001000 000090000 -> NaN Invalid_operation +-- signs +orx296 or -100001000 -000000000 -> NaN Invalid_operation +orx297 or -100001000 000010000 -> NaN Invalid_operation +orx298 or 100001000 -000000000 -> NaN Invalid_operation +orx299 or 100001000 000011000 -> 100011000 + +-- Nmax, Nmin, Ntiny +orx331 or 2 9.99999999E+999 -> NaN Invalid_operation +orx332 or 3 1E-999 -> NaN Invalid_operation +orx333 or 4 1.00000000E-999 -> NaN Invalid_operation +orx334 or 5 1E-1007 -> NaN Invalid_operation +orx335 or 6 -1E-1007 -> NaN Invalid_operation +orx336 or 7 -1.00000000E-999 -> NaN Invalid_operation +orx337 or 8 -1E-999 -> NaN Invalid_operation +orx338 or 9 -9.99999999E+999 -> NaN Invalid_operation +orx341 or 9.99999999E+999 -18 -> NaN Invalid_operation +orx342 or 1E-999 01 -> NaN Invalid_operation +orx343 or 1.00000000E-999 -18 -> NaN Invalid_operation +orx344 or 1E-1007 18 -> NaN Invalid_operation +orx345 or -1E-1007 -10 -> NaN Invalid_operation +orx346 or -1.00000000E-999 18 -> NaN Invalid_operation +orx347 or -1E-999 10 -> NaN Invalid_operation +orx348 or -9.99999999E+999 -18 -> NaN Invalid_operation + +-- A few other non-integers +orx361 or 1.0 1 -> NaN Invalid_operation +orx362 or 1E+1 1 -> NaN Invalid_operation +orx363 or 0.0 1 -> NaN Invalid_operation +orx364 or 0E+1 1 -> NaN Invalid_operation +orx365 or 9.9 1 -> NaN Invalid_operation +orx366 or 9E+1 1 -> NaN Invalid_operation +orx371 or 0 1.0 -> NaN Invalid_operation +orx372 or 0 1E+1 -> NaN Invalid_operation +orx373 or 0 0.0 -> NaN Invalid_operation +orx374 or 0 0E+1 -> NaN Invalid_operation +orx375 or 0 9.9 -> NaN Invalid_operation +orx376 or 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +orx780 or -Inf -Inf -> NaN Invalid_operation +orx781 or -Inf -1000 -> NaN Invalid_operation +orx782 or -Inf -1 -> NaN Invalid_operation +orx783 or -Inf -0 -> NaN Invalid_operation +orx784 or -Inf 0 -> NaN Invalid_operation +orx785 or -Inf 1 -> NaN Invalid_operation +orx786 or -Inf 1000 -> NaN Invalid_operation +orx787 or -1000 -Inf -> NaN Invalid_operation +orx788 or -Inf -Inf -> NaN Invalid_operation +orx789 or -1 -Inf -> NaN Invalid_operation +orx790 or -0 -Inf -> NaN Invalid_operation +orx791 or 0 -Inf -> NaN Invalid_operation +orx792 or 1 -Inf -> NaN Invalid_operation +orx793 or 1000 -Inf -> NaN Invalid_operation +orx794 or Inf -Inf -> NaN Invalid_operation + +orx800 or Inf -Inf -> NaN Invalid_operation +orx801 or Inf -1000 -> NaN Invalid_operation +orx802 or Inf -1 -> NaN Invalid_operation +orx803 or Inf -0 -> NaN Invalid_operation +orx804 or Inf 0 -> NaN Invalid_operation +orx805 or Inf 1 -> NaN Invalid_operation +orx806 or Inf 1000 -> NaN Invalid_operation +orx807 or Inf Inf -> NaN Invalid_operation +orx808 or -1000 Inf -> NaN Invalid_operation +orx809 or -Inf Inf -> NaN Invalid_operation +orx810 or -1 Inf -> NaN Invalid_operation +orx811 or -0 Inf -> NaN Invalid_operation +orx812 or 0 Inf -> NaN Invalid_operation +orx813 or 1 Inf -> NaN Invalid_operation +orx814 or 1000 Inf -> NaN Invalid_operation +orx815 or Inf Inf -> NaN Invalid_operation + +orx821 or NaN -Inf -> NaN Invalid_operation +orx822 or NaN -1000 -> NaN Invalid_operation +orx823 or NaN -1 -> NaN Invalid_operation +orx824 or NaN -0 -> NaN Invalid_operation +orx825 or NaN 0 -> NaN Invalid_operation +orx826 or NaN 1 -> NaN Invalid_operation +orx827 or NaN 1000 -> NaN Invalid_operation +orx828 or NaN Inf -> NaN Invalid_operation +orx829 or NaN NaN -> NaN Invalid_operation +orx830 or -Inf NaN -> NaN Invalid_operation +orx831 or -1000 NaN -> NaN Invalid_operation +orx832 or -1 NaN -> NaN Invalid_operation +orx833 or -0 NaN -> NaN Invalid_operation +orx834 or 0 NaN -> NaN Invalid_operation +orx835 or 1 NaN -> NaN Invalid_operation +orx836 or 1000 NaN -> NaN Invalid_operation +orx837 or Inf NaN -> NaN Invalid_operation + +orx841 or sNaN -Inf -> NaN Invalid_operation +orx842 or sNaN -1000 -> NaN Invalid_operation +orx843 or sNaN -1 -> NaN Invalid_operation +orx844 or sNaN -0 -> NaN Invalid_operation +orx845 or sNaN 0 -> NaN Invalid_operation +orx846 or sNaN 1 -> NaN Invalid_operation +orx847 or sNaN 1000 -> NaN Invalid_operation +orx848 or sNaN NaN -> NaN Invalid_operation +orx849 or sNaN sNaN -> NaN Invalid_operation +orx850 or NaN sNaN -> NaN Invalid_operation +orx851 or -Inf sNaN -> NaN Invalid_operation +orx852 or -1000 sNaN -> NaN Invalid_operation +orx853 or -1 sNaN -> NaN Invalid_operation +orx854 or -0 sNaN -> NaN Invalid_operation +orx855 or 0 sNaN -> NaN Invalid_operation +orx856 or 1 sNaN -> NaN Invalid_operation +orx857 or 1000 sNaN -> NaN Invalid_operation +orx858 or Inf sNaN -> NaN Invalid_operation +orx859 or NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +orx861 or NaN1 -Inf -> NaN Invalid_operation +orx862 or +NaN2 -1000 -> NaN Invalid_operation +orx863 or NaN3 1000 -> NaN Invalid_operation +orx864 or NaN4 Inf -> NaN Invalid_operation +orx865 or NaN5 +NaN6 -> NaN Invalid_operation +orx866 or -Inf NaN7 -> NaN Invalid_operation +orx867 or -1000 NaN8 -> NaN Invalid_operation +orx868 or 1000 NaN9 -> NaN Invalid_operation +orx869 or Inf +NaN10 -> NaN Invalid_operation +orx871 or sNaN11 -Inf -> NaN Invalid_operation +orx872 or sNaN12 -1000 -> NaN Invalid_operation +orx873 or sNaN13 1000 -> NaN Invalid_operation +orx874 or sNaN14 NaN17 -> NaN Invalid_operation +orx875 or sNaN15 sNaN18 -> NaN Invalid_operation +orx876 or NaN16 sNaN19 -> NaN Invalid_operation +orx877 or -Inf +sNaN20 -> NaN Invalid_operation +orx878 or -1000 sNaN21 -> NaN Invalid_operation +orx879 or 1000 sNaN22 -> NaN Invalid_operation +orx880 or Inf sNaN23 -> NaN Invalid_operation +orx881 or +NaN25 +sNaN24 -> NaN Invalid_operation +orx882 or -NaN26 NaN28 -> NaN Invalid_operation +orx883 or -sNaN27 sNaN29 -> NaN Invalid_operation +orx884 or 1000 -NaN30 -> NaN Invalid_operation +orx885 or 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/powersqrt.decTest b/Lib/test/decimaltestdata/powersqrt.decTest index 260b941537b..6c021a0cbb4 100644 --- a/Lib/test/decimaltestdata/powersqrt.decTest +++ b/Lib/test/decimaltestdata/powersqrt.decTest @@ -1,2970 +1,2970 @@ ------------------------------------------------------------------------- --- powersqrt.decTest -- decimal square root, using power -- --- Copyright (c) IBM Corporation, 2004, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- These testcases are taken from squareroot.decTest but are --- evaluated using the power operator. The differences in results --- (153 out of 2856) fall into the following categories: --- --- x ** 0.5 (x>0) has no preferred exponent, and is Inexact --- (and hence full precision); almost all differences are --- in this category --- 0.00 ** 0.5 becomes 0 (not 0.0), etc. --- -0 ** 0.5 becomes 0 (never -0) --- Some exact subnormals become inexact and hence underflows - -extended: 1 -precision: 9 -rounding: half_even -maxExponent: 384 -minexponent: -383 - --- basics -pwsx001 power 1 0.5 -> 1.00000000 Inexact Rounded -pwsx002 power -1 0.5 -> NaN Invalid_operation -pwsx003 power 1.00 0.5 -> 1.00000000 Inexact Rounded -pwsx004 power -1.00 0.5 -> NaN Invalid_operation -pwsx005 power 0 0.5 -> 0 -pwsx006 power 00.0 0.5 -> 0 -pwsx007 power 0.00 0.5 -> 0 -pwsx008 power 00.00 0.5 -> 0 -pwsx009 power 00.000 0.5 -> 0 -pwsx010 power 00.0000 0.5 -> 0 -pwsx011 power 00 0.5 -> 0 - -pwsx012 power -2 0.5 -> NaN Invalid_operation -pwsx013 power 2 0.5 -> 1.41421356 Inexact Rounded -pwsx014 power -2.00 0.5 -> NaN Invalid_operation -pwsx015 power 2.00 0.5 -> 1.41421356 Inexact Rounded -pwsx016 power -0 0.5 -> 0 -pwsx017 power -0.0 0.5 -> 0 -pwsx018 power -00.00 0.5 -> 0 -pwsx019 power -00.000 0.5 -> 0 -pwsx020 power -0.0000 0.5 -> 0 -pwsx021 power -0E+9 0.5 -> 0 -pwsx022 power -0E+10 0.5 -> 0 -pwsx023 power -0E+11 0.5 -> 0 -pwsx024 power -0E+12 0.5 -> 0 -pwsx025 power -00 0.5 -> 0 -pwsx026 power 0E+5 0.5 -> 0 -pwsx027 power 4.0 0.5 -> 2.00000000 Inexact Rounded -pwsx028 power 4.00 0.5 -> 2.00000000 Inexact Rounded - -pwsx030 power +0.1 0.5 -> 0.316227766 Inexact Rounded -pwsx031 power -0.1 0.5 -> NaN Invalid_operation -pwsx032 power +0.01 0.5 -> 0.100000000 Inexact Rounded -pwsx033 power -0.01 0.5 -> NaN Invalid_operation -pwsx034 power +0.001 0.5 -> 0.0316227766 Inexact Rounded -pwsx035 power -0.001 0.5 -> NaN Invalid_operation -pwsx036 power +0.000001 0.5 -> 0.00100000000 Inexact Rounded -pwsx037 power -0.000001 0.5 -> NaN Invalid_operation -pwsx038 power +0.000000000001 0.5 -> 0.00000100000000 Inexact Rounded -pwsx039 power -0.000000000001 0.5 -> NaN Invalid_operation - -pwsx041 power 1.1 0.5 -> 1.04880885 Inexact Rounded -pwsx042 power 1.10 0.5 -> 1.04880885 Inexact Rounded -pwsx043 power 1.100 0.5 -> 1.04880885 Inexact Rounded -pwsx044 power 1.110 0.5 -> 1.05356538 Inexact Rounded -pwsx045 power -1.1 0.5 -> NaN Invalid_operation -pwsx046 power -1.10 0.5 -> NaN Invalid_operation -pwsx047 power -1.100 0.5 -> NaN Invalid_operation -pwsx048 power -1.110 0.5 -> NaN Invalid_operation -pwsx049 power 9.9 0.5 -> 3.14642654 Inexact Rounded -pwsx050 power 9.90 0.5 -> 3.14642654 Inexact Rounded -pwsx051 power 9.900 0.5 -> 3.14642654 Inexact Rounded -pwsx052 power 9.990 0.5 -> 3.16069613 Inexact Rounded -pwsx053 power -9.9 0.5 -> NaN Invalid_operation -pwsx054 power -9.90 0.5 -> NaN Invalid_operation -pwsx055 power -9.900 0.5 -> NaN Invalid_operation -pwsx056 power -9.990 0.5 -> NaN Invalid_operation - -pwsx060 power 1 0.5 -> 1.00000000 Inexact Rounded -pwsx061 power 1.0 0.5 -> 1.00000000 Inexact Rounded -pwsx062 power 1.00 0.5 -> 1.00000000 Inexact Rounded -pwsx063 power 10.0 0.5 -> 3.16227766 Inexact Rounded -pwsx064 power 10.0 0.5 -> 3.16227766 Inexact Rounded -pwsx065 power 10.0 0.5 -> 3.16227766 Inexact Rounded -pwsx066 power 10.00 0.5 -> 3.16227766 Inexact Rounded -pwsx067 power 100 0.5 -> 10.0000000 Inexact Rounded -pwsx068 power 100.0 0.5 -> 10.0000000 Inexact Rounded -pwsx069 power 100.00 0.5 -> 10.0000000 Inexact Rounded -pwsx070 power 1.1000E+3 0.5 -> 33.1662479 Inexact Rounded -pwsx071 power 1.10000E+3 0.5 -> 33.1662479 Inexact Rounded -pwsx072 power -10.0 0.5 -> NaN Invalid_operation -pwsx073 power -10.00 0.5 -> NaN Invalid_operation -pwsx074 power -100.0 0.5 -> NaN Invalid_operation -pwsx075 power -100.00 0.5 -> NaN Invalid_operation -pwsx076 power -1.1000E+3 0.5 -> NaN Invalid_operation -pwsx077 power -1.10000E+3 0.5 -> NaN Invalid_operation - --- famous squares -pwsx080 power 1 0.5 -> 1.00000000 Inexact Rounded -pwsx081 power 4 0.5 -> 2.00000000 Inexact Rounded -pwsx082 power 9 0.5 -> 3.00000000 Inexact Rounded -pwsx083 power 16 0.5 -> 4.00000000 Inexact Rounded -pwsx084 power 25 0.5 -> 5.00000000 Inexact Rounded -pwsx085 power 36 0.5 -> 6.00000000 Inexact Rounded -pwsx086 power 49 0.5 -> 7.00000000 Inexact Rounded -pwsx087 power 64 0.5 -> 8.00000000 Inexact Rounded -pwsx088 power 81 0.5 -> 9.00000000 Inexact Rounded -pwsx089 power 100 0.5 -> 10.0000000 Inexact Rounded -pwsx090 power 121 0.5 -> 11.0000000 Inexact Rounded -pwsx091 power 144 0.5 -> 12.0000000 Inexact Rounded -pwsx092 power 169 0.5 -> 13.0000000 Inexact Rounded -pwsx093 power 256 0.5 -> 16.0000000 Inexact Rounded -pwsx094 power 1024 0.5 -> 32.0000000 Inexact Rounded -pwsx095 power 4096 0.5 -> 64.0000000 Inexact Rounded -pwsx100 power 0.01 0.5 -> 0.100000000 Inexact Rounded -pwsx101 power 0.04 0.5 -> 0.200000000 Inexact Rounded -pwsx102 power 0.09 0.5 -> 0.300000000 Inexact Rounded -pwsx103 power 0.16 0.5 -> 0.400000000 Inexact Rounded -pwsx104 power 0.25 0.5 -> 0.500000000 Inexact Rounded -pwsx105 power 0.36 0.5 -> 0.600000000 Inexact Rounded -pwsx106 power 0.49 0.5 -> 0.700000000 Inexact Rounded -pwsx107 power 0.64 0.5 -> 0.800000000 Inexact Rounded -pwsx108 power 0.81 0.5 -> 0.900000000 Inexact Rounded -pwsx109 power 1.00 0.5 -> 1.00000000 Inexact Rounded -pwsx110 power 1.21 0.5 -> 1.10000000 Inexact Rounded -pwsx111 power 1.44 0.5 -> 1.20000000 Inexact Rounded -pwsx112 power 1.69 0.5 -> 1.30000000 Inexact Rounded -pwsx113 power 2.56 0.5 -> 1.60000000 Inexact Rounded -pwsx114 power 10.24 0.5 -> 3.20000000 Inexact Rounded -pwsx115 power 40.96 0.5 -> 6.40000000 Inexact Rounded - --- Precision 1 squareroot tests [exhaustive, plus exponent adjusts] -rounding: half_even -maxExponent: 999 -minexponent: -999 -precision: 1 -pwsx1201 power 0.1 0.5 -> 0.3 Inexact Rounded -pwsx1202 power 0.01 0.5 -> 0.1 Inexact Rounded -pwsx1203 power 1.0E-1 0.5 -> 0.3 Inexact Rounded -pwsx1204 power 1.00E-2 0.5 -> 0.1 Inexact Rounded -pwsx1205 power 1E-3 0.5 -> 0.03 Inexact Rounded -pwsx1206 power 1E+1 0.5 -> 3 Inexact Rounded -pwsx1207 power 1E+2 0.5 -> 1E+1 Inexact Rounded -pwsx1208 power 1E+3 0.5 -> 3E+1 Inexact Rounded -pwsx1209 power 0.2 0.5 -> 0.4 Inexact Rounded -pwsx1210 power 0.02 0.5 -> 0.1 Inexact Rounded -pwsx1211 power 2.0E-1 0.5 -> 0.4 Inexact Rounded -pwsx1212 power 2.00E-2 0.5 -> 0.1 Inexact Rounded -pwsx1213 power 2E-3 0.5 -> 0.04 Inexact Rounded -pwsx1214 power 2E+1 0.5 -> 4 Inexact Rounded -pwsx1215 power 2E+2 0.5 -> 1E+1 Inexact Rounded -pwsx1216 power 2E+3 0.5 -> 4E+1 Inexact Rounded -pwsx1217 power 0.3 0.5 -> 0.5 Inexact Rounded -pwsx1218 power 0.03 0.5 -> 0.2 Inexact Rounded -pwsx1219 power 3.0E-1 0.5 -> 0.5 Inexact Rounded -pwsx1220 power 3.00E-2 0.5 -> 0.2 Inexact Rounded -pwsx1221 power 3E-3 0.5 -> 0.05 Inexact Rounded -pwsx1222 power 3E+1 0.5 -> 5 Inexact Rounded -pwsx1223 power 3E+2 0.5 -> 2E+1 Inexact Rounded -pwsx1224 power 3E+3 0.5 -> 5E+1 Inexact Rounded -pwsx1225 power 0.4 0.5 -> 0.6 Inexact Rounded -pwsx1226 power 0.04 0.5 -> 0.2 Inexact Rounded -pwsx1227 power 4.0E-1 0.5 -> 0.6 Inexact Rounded -pwsx1228 power 4.00E-2 0.5 -> 0.2 Inexact Rounded -pwsx1229 power 4E-3 0.5 -> 0.06 Inexact Rounded -pwsx1230 power 4E+1 0.5 -> 6 Inexact Rounded -pwsx1231 power 4E+2 0.5 -> 2E+1 Inexact Rounded -pwsx1232 power 4E+3 0.5 -> 6E+1 Inexact Rounded -pwsx1233 power 0.5 0.5 -> 0.7 Inexact Rounded -pwsx1234 power 0.05 0.5 -> 0.2 Inexact Rounded -pwsx1235 power 5.0E-1 0.5 -> 0.7 Inexact Rounded -pwsx1236 power 5.00E-2 0.5 -> 0.2 Inexact Rounded -pwsx1237 power 5E-3 0.5 -> 0.07 Inexact Rounded -pwsx1238 power 5E+1 0.5 -> 7 Inexact Rounded -pwsx1239 power 5E+2 0.5 -> 2E+1 Inexact Rounded -pwsx1240 power 5E+3 0.5 -> 7E+1 Inexact Rounded -pwsx1241 power 0.6 0.5 -> 0.8 Inexact Rounded -pwsx1242 power 0.06 0.5 -> 0.2 Inexact Rounded -pwsx1243 power 6.0E-1 0.5 -> 0.8 Inexact Rounded -pwsx1244 power 6.00E-2 0.5 -> 0.2 Inexact Rounded -pwsx1245 power 6E-3 0.5 -> 0.08 Inexact Rounded -pwsx1246 power 6E+1 0.5 -> 8 Inexact Rounded -pwsx1247 power 6E+2 0.5 -> 2E+1 Inexact Rounded -pwsx1248 power 6E+3 0.5 -> 8E+1 Inexact Rounded -pwsx1249 power 0.7 0.5 -> 0.8 Inexact Rounded -pwsx1250 power 0.07 0.5 -> 0.3 Inexact Rounded -pwsx1251 power 7.0E-1 0.5 -> 0.8 Inexact Rounded -pwsx1252 power 7.00E-2 0.5 -> 0.3 Inexact Rounded -pwsx1253 power 7E-3 0.5 -> 0.08 Inexact Rounded -pwsx1254 power 7E+1 0.5 -> 8 Inexact Rounded -pwsx1255 power 7E+2 0.5 -> 3E+1 Inexact Rounded -pwsx1256 power 7E+3 0.5 -> 8E+1 Inexact Rounded -pwsx1257 power 0.8 0.5 -> 0.9 Inexact Rounded -pwsx1258 power 0.08 0.5 -> 0.3 Inexact Rounded -pwsx1259 power 8.0E-1 0.5 -> 0.9 Inexact Rounded -pwsx1260 power 8.00E-2 0.5 -> 0.3 Inexact Rounded -pwsx1261 power 8E-3 0.5 -> 0.09 Inexact Rounded -pwsx1262 power 8E+1 0.5 -> 9 Inexact Rounded -pwsx1263 power 8E+2 0.5 -> 3E+1 Inexact Rounded -pwsx1264 power 8E+3 0.5 -> 9E+1 Inexact Rounded -pwsx1265 power 0.9 0.5 -> 0.9 Inexact Rounded -pwsx1266 power 0.09 0.5 -> 0.3 Inexact Rounded -pwsx1267 power 9.0E-1 0.5 -> 0.9 Inexact Rounded -pwsx1268 power 9.00E-2 0.5 -> 0.3 Inexact Rounded -pwsx1269 power 9E-3 0.5 -> 0.09 Inexact Rounded -pwsx1270 power 9E+1 0.5 -> 9 Inexact Rounded -pwsx1271 power 9E+2 0.5 -> 3E+1 Inexact Rounded -pwsx1272 power 9E+3 0.5 -> 9E+1 Inexact Rounded - --- Precision 2 squareroot tests [exhaustive, plus exponent adjusts] -rounding: half_even -maxExponent: 999 -minexponent: -999 -precision: 2 -pwsx2201 power 0.1 0.5 -> 0.32 Inexact Rounded -pwsx2202 power 0.01 0.5 -> 0.10 Inexact Rounded -pwsx2203 power 1.0E-1 0.5 -> 0.32 Inexact Rounded -pwsx2204 power 1.00E-2 0.5 -> 0.10 Inexact Rounded -pwsx2205 power 1E-3 0.5 -> 0.032 Inexact Rounded -pwsx2206 power 1E+1 0.5 -> 3.2 Inexact Rounded -pwsx2207 power 1E+2 0.5 -> 10 Inexact Rounded -pwsx2208 power 1E+3 0.5 -> 32 Inexact Rounded -pwsx2209 power 0.2 0.5 -> 0.45 Inexact Rounded -pwsx2210 power 0.02 0.5 -> 0.14 Inexact Rounded -pwsx2211 power 2.0E-1 0.5 -> 0.45 Inexact Rounded -pwsx2212 power 2.00E-2 0.5 -> 0.14 Inexact Rounded -pwsx2213 power 2E-3 0.5 -> 0.045 Inexact Rounded -pwsx2214 power 2E+1 0.5 -> 4.5 Inexact Rounded -pwsx2215 power 2E+2 0.5 -> 14 Inexact Rounded -pwsx2216 power 2E+3 0.5 -> 45 Inexact Rounded -pwsx2217 power 0.3 0.5 -> 0.55 Inexact Rounded -pwsx2218 power 0.03 0.5 -> 0.17 Inexact Rounded -pwsx2219 power 3.0E-1 0.5 -> 0.55 Inexact Rounded -pwsx2220 power 3.00E-2 0.5 -> 0.17 Inexact Rounded -pwsx2221 power 3E-3 0.5 -> 0.055 Inexact Rounded -pwsx2222 power 3E+1 0.5 -> 5.5 Inexact Rounded -pwsx2223 power 3E+2 0.5 -> 17 Inexact Rounded -pwsx2224 power 3E+3 0.5 -> 55 Inexact Rounded -pwsx2225 power 0.4 0.5 -> 0.63 Inexact Rounded -pwsx2226 power 0.04 0.5 -> 0.20 Inexact Rounded -pwsx2227 power 4.0E-1 0.5 -> 0.63 Inexact Rounded -pwsx2228 power 4.00E-2 0.5 -> 0.20 Inexact Rounded -pwsx2229 power 4E-3 0.5 -> 0.063 Inexact Rounded -pwsx2230 power 4E+1 0.5 -> 6.3 Inexact Rounded -pwsx2231 power 4E+2 0.5 -> 20 Inexact Rounded -pwsx2232 power 4E+3 0.5 -> 63 Inexact Rounded -pwsx2233 power 0.5 0.5 -> 0.71 Inexact Rounded -pwsx2234 power 0.05 0.5 -> 0.22 Inexact Rounded -pwsx2235 power 5.0E-1 0.5 -> 0.71 Inexact Rounded -pwsx2236 power 5.00E-2 0.5 -> 0.22 Inexact Rounded -pwsx2237 power 5E-3 0.5 -> 0.071 Inexact Rounded -pwsx2238 power 5E+1 0.5 -> 7.1 Inexact Rounded -pwsx2239 power 5E+2 0.5 -> 22 Inexact Rounded -pwsx2240 power 5E+3 0.5 -> 71 Inexact Rounded -pwsx2241 power 0.6 0.5 -> 0.77 Inexact Rounded -pwsx2242 power 0.06 0.5 -> 0.24 Inexact Rounded -pwsx2243 power 6.0E-1 0.5 -> 0.77 Inexact Rounded -pwsx2244 power 6.00E-2 0.5 -> 0.24 Inexact Rounded -pwsx2245 power 6E-3 0.5 -> 0.077 Inexact Rounded -pwsx2246 power 6E+1 0.5 -> 7.7 Inexact Rounded -pwsx2247 power 6E+2 0.5 -> 24 Inexact Rounded -pwsx2248 power 6E+3 0.5 -> 77 Inexact Rounded -pwsx2249 power 0.7 0.5 -> 0.84 Inexact Rounded -pwsx2250 power 0.07 0.5 -> 0.26 Inexact Rounded -pwsx2251 power 7.0E-1 0.5 -> 0.84 Inexact Rounded -pwsx2252 power 7.00E-2 0.5 -> 0.26 Inexact Rounded -pwsx2253 power 7E-3 0.5 -> 0.084 Inexact Rounded -pwsx2254 power 7E+1 0.5 -> 8.4 Inexact Rounded -pwsx2255 power 7E+2 0.5 -> 26 Inexact Rounded -pwsx2256 power 7E+3 0.5 -> 84 Inexact Rounded -pwsx2257 power 0.8 0.5 -> 0.89 Inexact Rounded -pwsx2258 power 0.08 0.5 -> 0.28 Inexact Rounded -pwsx2259 power 8.0E-1 0.5 -> 0.89 Inexact Rounded -pwsx2260 power 8.00E-2 0.5 -> 0.28 Inexact Rounded -pwsx2261 power 8E-3 0.5 -> 0.089 Inexact Rounded -pwsx2262 power 8E+1 0.5 -> 8.9 Inexact Rounded -pwsx2263 power 8E+2 0.5 -> 28 Inexact Rounded -pwsx2264 power 8E+3 0.5 -> 89 Inexact Rounded -pwsx2265 power 0.9 0.5 -> 0.95 Inexact Rounded -pwsx2266 power 0.09 0.5 -> 0.30 Inexact Rounded -pwsx2267 power 9.0E-1 0.5 -> 0.95 Inexact Rounded -pwsx2268 power 9.00E-2 0.5 -> 0.30 Inexact Rounded -pwsx2269 power 9E-3 0.5 -> 0.095 Inexact Rounded -pwsx2270 power 9E+1 0.5 -> 9.5 Inexact Rounded -pwsx2271 power 9E+2 0.5 -> 30 Inexact Rounded -pwsx2272 power 9E+3 0.5 -> 95 Inexact Rounded -pwsx2273 power 0.10 0.5 -> 0.32 Inexact Rounded -pwsx2274 power 0.010 0.5 -> 0.10 Inexact Rounded -pwsx2275 power 10.0E-1 0.5 -> 1.0 Inexact Rounded -pwsx2276 power 10.00E-2 0.5 -> 0.32 Inexact Rounded -pwsx2277 power 10E-3 0.5 -> 0.10 Inexact Rounded -pwsx2278 power 10E+1 0.5 -> 10 Inexact Rounded -pwsx2279 power 10E+2 0.5 -> 32 Inexact Rounded -pwsx2280 power 10E+3 0.5 -> 1.0E+2 Inexact Rounded -pwsx2281 power 0.11 0.5 -> 0.33 Inexact Rounded -pwsx2282 power 0.011 0.5 -> 0.10 Inexact Rounded -pwsx2283 power 11.0E-1 0.5 -> 1.0 Inexact Rounded -pwsx2284 power 11.00E-2 0.5 -> 0.33 Inexact Rounded -pwsx2285 power 11E-3 0.5 -> 0.10 Inexact Rounded -pwsx2286 power 11E+1 0.5 -> 10 Inexact Rounded -pwsx2287 power 11E+2 0.5 -> 33 Inexact Rounded -pwsx2288 power 11E+3 0.5 -> 1.0E+2 Inexact Rounded -pwsx2289 power 0.12 0.5 -> 0.35 Inexact Rounded -pwsx2290 power 0.012 0.5 -> 0.11 Inexact Rounded -pwsx2291 power 12.0E-1 0.5 -> 1.1 Inexact Rounded -pwsx2292 power 12.00E-2 0.5 -> 0.35 Inexact Rounded -pwsx2293 power 12E-3 0.5 -> 0.11 Inexact Rounded -pwsx2294 power 12E+1 0.5 -> 11 Inexact Rounded -pwsx2295 power 12E+2 0.5 -> 35 Inexact Rounded -pwsx2296 power 12E+3 0.5 -> 1.1E+2 Inexact Rounded -pwsx2297 power 0.13 0.5 -> 0.36 Inexact Rounded -pwsx2298 power 0.013 0.5 -> 0.11 Inexact Rounded -pwsx2299 power 13.0E-1 0.5 -> 1.1 Inexact Rounded -pwsx2300 power 13.00E-2 0.5 -> 0.36 Inexact Rounded -pwsx2301 power 13E-3 0.5 -> 0.11 Inexact Rounded -pwsx2302 power 13E+1 0.5 -> 11 Inexact Rounded -pwsx2303 power 13E+2 0.5 -> 36 Inexact Rounded -pwsx2304 power 13E+3 0.5 -> 1.1E+2 Inexact Rounded -pwsx2305 power 0.14 0.5 -> 0.37 Inexact Rounded -pwsx2306 power 0.014 0.5 -> 0.12 Inexact Rounded -pwsx2307 power 14.0E-1 0.5 -> 1.2 Inexact Rounded -pwsx2308 power 14.00E-2 0.5 -> 0.37 Inexact Rounded -pwsx2309 power 14E-3 0.5 -> 0.12 Inexact Rounded -pwsx2310 power 14E+1 0.5 -> 12 Inexact Rounded -pwsx2311 power 14E+2 0.5 -> 37 Inexact Rounded -pwsx2312 power 14E+3 0.5 -> 1.2E+2 Inexact Rounded -pwsx2313 power 0.15 0.5 -> 0.39 Inexact Rounded -pwsx2314 power 0.015 0.5 -> 0.12 Inexact Rounded -pwsx2315 power 15.0E-1 0.5 -> 1.2 Inexact Rounded -pwsx2316 power 15.00E-2 0.5 -> 0.39 Inexact Rounded -pwsx2317 power 15E-3 0.5 -> 0.12 Inexact Rounded -pwsx2318 power 15E+1 0.5 -> 12 Inexact Rounded -pwsx2319 power 15E+2 0.5 -> 39 Inexact Rounded -pwsx2320 power 15E+3 0.5 -> 1.2E+2 Inexact Rounded -pwsx2321 power 0.16 0.5 -> 0.40 Inexact Rounded -pwsx2322 power 0.016 0.5 -> 0.13 Inexact Rounded -pwsx2323 power 16.0E-1 0.5 -> 1.3 Inexact Rounded -pwsx2324 power 16.00E-2 0.5 -> 0.40 Inexact Rounded -pwsx2325 power 16E-3 0.5 -> 0.13 Inexact Rounded -pwsx2326 power 16E+1 0.5 -> 13 Inexact Rounded -pwsx2327 power 16E+2 0.5 -> 40 Inexact Rounded -pwsx2328 power 16E+3 0.5 -> 1.3E+2 Inexact Rounded -pwsx2329 power 0.17 0.5 -> 0.41 Inexact Rounded -pwsx2330 power 0.017 0.5 -> 0.13 Inexact Rounded -pwsx2331 power 17.0E-1 0.5 -> 1.3 Inexact Rounded -pwsx2332 power 17.00E-2 0.5 -> 0.41 Inexact Rounded -pwsx2333 power 17E-3 0.5 -> 0.13 Inexact Rounded -pwsx2334 power 17E+1 0.5 -> 13 Inexact Rounded -pwsx2335 power 17E+2 0.5 -> 41 Inexact Rounded -pwsx2336 power 17E+3 0.5 -> 1.3E+2 Inexact Rounded -pwsx2337 power 0.18 0.5 -> 0.42 Inexact Rounded -pwsx2338 power 0.018 0.5 -> 0.13 Inexact Rounded -pwsx2339 power 18.0E-1 0.5 -> 1.3 Inexact Rounded -pwsx2340 power 18.00E-2 0.5 -> 0.42 Inexact Rounded -pwsx2341 power 18E-3 0.5 -> 0.13 Inexact Rounded -pwsx2342 power 18E+1 0.5 -> 13 Inexact Rounded -pwsx2343 power 18E+2 0.5 -> 42 Inexact Rounded -pwsx2344 power 18E+3 0.5 -> 1.3E+2 Inexact Rounded -pwsx2345 power 0.19 0.5 -> 0.44 Inexact Rounded -pwsx2346 power 0.019 0.5 -> 0.14 Inexact Rounded -pwsx2347 power 19.0E-1 0.5 -> 1.4 Inexact Rounded -pwsx2348 power 19.00E-2 0.5 -> 0.44 Inexact Rounded -pwsx2349 power 19E-3 0.5 -> 0.14 Inexact Rounded -pwsx2350 power 19E+1 0.5 -> 14 Inexact Rounded -pwsx2351 power 19E+2 0.5 -> 44 Inexact Rounded -pwsx2352 power 19E+3 0.5 -> 1.4E+2 Inexact Rounded -pwsx2353 power 0.20 0.5 -> 0.45 Inexact Rounded -pwsx2354 power 0.020 0.5 -> 0.14 Inexact Rounded -pwsx2355 power 20.0E-1 0.5 -> 1.4 Inexact Rounded -pwsx2356 power 20.00E-2 0.5 -> 0.45 Inexact Rounded -pwsx2357 power 20E-3 0.5 -> 0.14 Inexact Rounded -pwsx2358 power 20E+1 0.5 -> 14 Inexact Rounded -pwsx2359 power 20E+2 0.5 -> 45 Inexact Rounded -pwsx2360 power 20E+3 0.5 -> 1.4E+2 Inexact Rounded -pwsx2361 power 0.21 0.5 -> 0.46 Inexact Rounded -pwsx2362 power 0.021 0.5 -> 0.14 Inexact Rounded -pwsx2363 power 21.0E-1 0.5 -> 1.4 Inexact Rounded -pwsx2364 power 21.00E-2 0.5 -> 0.46 Inexact Rounded -pwsx2365 power 21E-3 0.5 -> 0.14 Inexact Rounded -pwsx2366 power 21E+1 0.5 -> 14 Inexact Rounded -pwsx2367 power 21E+2 0.5 -> 46 Inexact Rounded -pwsx2368 power 21E+3 0.5 -> 1.4E+2 Inexact Rounded -pwsx2369 power 0.22 0.5 -> 0.47 Inexact Rounded -pwsx2370 power 0.022 0.5 -> 0.15 Inexact Rounded -pwsx2371 power 22.0E-1 0.5 -> 1.5 Inexact Rounded -pwsx2372 power 22.00E-2 0.5 -> 0.47 Inexact Rounded -pwsx2373 power 22E-3 0.5 -> 0.15 Inexact Rounded -pwsx2374 power 22E+1 0.5 -> 15 Inexact Rounded -pwsx2375 power 22E+2 0.5 -> 47 Inexact Rounded -pwsx2376 power 22E+3 0.5 -> 1.5E+2 Inexact Rounded -pwsx2377 power 0.23 0.5 -> 0.48 Inexact Rounded -pwsx2378 power 0.023 0.5 -> 0.15 Inexact Rounded -pwsx2379 power 23.0E-1 0.5 -> 1.5 Inexact Rounded -pwsx2380 power 23.00E-2 0.5 -> 0.48 Inexact Rounded -pwsx2381 power 23E-3 0.5 -> 0.15 Inexact Rounded -pwsx2382 power 23E+1 0.5 -> 15 Inexact Rounded -pwsx2383 power 23E+2 0.5 -> 48 Inexact Rounded -pwsx2384 power 23E+3 0.5 -> 1.5E+2 Inexact Rounded -pwsx2385 power 0.24 0.5 -> 0.49 Inexact Rounded -pwsx2386 power 0.024 0.5 -> 0.15 Inexact Rounded -pwsx2387 power 24.0E-1 0.5 -> 1.5 Inexact Rounded -pwsx2388 power 24.00E-2 0.5 -> 0.49 Inexact Rounded -pwsx2389 power 24E-3 0.5 -> 0.15 Inexact Rounded -pwsx2390 power 24E+1 0.5 -> 15 Inexact Rounded -pwsx2391 power 24E+2 0.5 -> 49 Inexact Rounded -pwsx2392 power 24E+3 0.5 -> 1.5E+2 Inexact Rounded -pwsx2393 power 0.25 0.5 -> 0.50 Inexact Rounded -pwsx2394 power 0.025 0.5 -> 0.16 Inexact Rounded -pwsx2395 power 25.0E-1 0.5 -> 1.6 Inexact Rounded -pwsx2396 power 25.00E-2 0.5 -> 0.50 Inexact Rounded -pwsx2397 power 25E-3 0.5 -> 0.16 Inexact Rounded -pwsx2398 power 25E+1 0.5 -> 16 Inexact Rounded -pwsx2399 power 25E+2 0.5 -> 50 Inexact Rounded -pwsx2400 power 25E+3 0.5 -> 1.6E+2 Inexact Rounded -pwsx2401 power 0.26 0.5 -> 0.51 Inexact Rounded -pwsx2402 power 0.026 0.5 -> 0.16 Inexact Rounded -pwsx2403 power 26.0E-1 0.5 -> 1.6 Inexact Rounded -pwsx2404 power 26.00E-2 0.5 -> 0.51 Inexact Rounded -pwsx2405 power 26E-3 0.5 -> 0.16 Inexact Rounded -pwsx2406 power 26E+1 0.5 -> 16 Inexact Rounded -pwsx2407 power 26E+2 0.5 -> 51 Inexact Rounded -pwsx2408 power 26E+3 0.5 -> 1.6E+2 Inexact Rounded -pwsx2409 power 0.27 0.5 -> 0.52 Inexact Rounded -pwsx2410 power 0.027 0.5 -> 0.16 Inexact Rounded -pwsx2411 power 27.0E-1 0.5 -> 1.6 Inexact Rounded -pwsx2412 power 27.00E-2 0.5 -> 0.52 Inexact Rounded -pwsx2413 power 27E-3 0.5 -> 0.16 Inexact Rounded -pwsx2414 power 27E+1 0.5 -> 16 Inexact Rounded -pwsx2415 power 27E+2 0.5 -> 52 Inexact Rounded -pwsx2416 power 27E+3 0.5 -> 1.6E+2 Inexact Rounded -pwsx2417 power 0.28 0.5 -> 0.53 Inexact Rounded -pwsx2418 power 0.028 0.5 -> 0.17 Inexact Rounded -pwsx2419 power 28.0E-1 0.5 -> 1.7 Inexact Rounded -pwsx2420 power 28.00E-2 0.5 -> 0.53 Inexact Rounded -pwsx2421 power 28E-3 0.5 -> 0.17 Inexact Rounded -pwsx2422 power 28E+1 0.5 -> 17 Inexact Rounded -pwsx2423 power 28E+2 0.5 -> 53 Inexact Rounded -pwsx2424 power 28E+3 0.5 -> 1.7E+2 Inexact Rounded -pwsx2425 power 0.29 0.5 -> 0.54 Inexact Rounded -pwsx2426 power 0.029 0.5 -> 0.17 Inexact Rounded -pwsx2427 power 29.0E-1 0.5 -> 1.7 Inexact Rounded -pwsx2428 power 29.00E-2 0.5 -> 0.54 Inexact Rounded -pwsx2429 power 29E-3 0.5 -> 0.17 Inexact Rounded -pwsx2430 power 29E+1 0.5 -> 17 Inexact Rounded -pwsx2431 power 29E+2 0.5 -> 54 Inexact Rounded -pwsx2432 power 29E+3 0.5 -> 1.7E+2 Inexact Rounded -pwsx2433 power 0.30 0.5 -> 0.55 Inexact Rounded -pwsx2434 power 0.030 0.5 -> 0.17 Inexact Rounded -pwsx2435 power 30.0E-1 0.5 -> 1.7 Inexact Rounded -pwsx2436 power 30.00E-2 0.5 -> 0.55 Inexact Rounded -pwsx2437 power 30E-3 0.5 -> 0.17 Inexact Rounded -pwsx2438 power 30E+1 0.5 -> 17 Inexact Rounded -pwsx2439 power 30E+2 0.5 -> 55 Inexact Rounded -pwsx2440 power 30E+3 0.5 -> 1.7E+2 Inexact Rounded -pwsx2441 power 0.31 0.5 -> 0.56 Inexact Rounded -pwsx2442 power 0.031 0.5 -> 0.18 Inexact Rounded -pwsx2443 power 31.0E-1 0.5 -> 1.8 Inexact Rounded -pwsx2444 power 31.00E-2 0.5 -> 0.56 Inexact Rounded -pwsx2445 power 31E-3 0.5 -> 0.18 Inexact Rounded -pwsx2446 power 31E+1 0.5 -> 18 Inexact Rounded -pwsx2447 power 31E+2 0.5 -> 56 Inexact Rounded -pwsx2448 power 31E+3 0.5 -> 1.8E+2 Inexact Rounded -pwsx2449 power 0.32 0.5 -> 0.57 Inexact Rounded -pwsx2450 power 0.032 0.5 -> 0.18 Inexact Rounded -pwsx2451 power 32.0E-1 0.5 -> 1.8 Inexact Rounded -pwsx2452 power 32.00E-2 0.5 -> 0.57 Inexact Rounded -pwsx2453 power 32E-3 0.5 -> 0.18 Inexact Rounded -pwsx2454 power 32E+1 0.5 -> 18 Inexact Rounded -pwsx2455 power 32E+2 0.5 -> 57 Inexact Rounded -pwsx2456 power 32E+3 0.5 -> 1.8E+2 Inexact Rounded -pwsx2457 power 0.33 0.5 -> 0.57 Inexact Rounded -pwsx2458 power 0.033 0.5 -> 0.18 Inexact Rounded -pwsx2459 power 33.0E-1 0.5 -> 1.8 Inexact Rounded -pwsx2460 power 33.00E-2 0.5 -> 0.57 Inexact Rounded -pwsx2461 power 33E-3 0.5 -> 0.18 Inexact Rounded -pwsx2462 power 33E+1 0.5 -> 18 Inexact Rounded -pwsx2463 power 33E+2 0.5 -> 57 Inexact Rounded -pwsx2464 power 33E+3 0.5 -> 1.8E+2 Inexact Rounded -pwsx2465 power 0.34 0.5 -> 0.58 Inexact Rounded -pwsx2466 power 0.034 0.5 -> 0.18 Inexact Rounded -pwsx2467 power 34.0E-1 0.5 -> 1.8 Inexact Rounded -pwsx2468 power 34.00E-2 0.5 -> 0.58 Inexact Rounded -pwsx2469 power 34E-3 0.5 -> 0.18 Inexact Rounded -pwsx2470 power 34E+1 0.5 -> 18 Inexact Rounded -pwsx2471 power 34E+2 0.5 -> 58 Inexact Rounded -pwsx2472 power 34E+3 0.5 -> 1.8E+2 Inexact Rounded -pwsx2473 power 0.35 0.5 -> 0.59 Inexact Rounded -pwsx2474 power 0.035 0.5 -> 0.19 Inexact Rounded -pwsx2475 power 35.0E-1 0.5 -> 1.9 Inexact Rounded -pwsx2476 power 35.00E-2 0.5 -> 0.59 Inexact Rounded -pwsx2477 power 35E-3 0.5 -> 0.19 Inexact Rounded -pwsx2478 power 35E+1 0.5 -> 19 Inexact Rounded -pwsx2479 power 35E+2 0.5 -> 59 Inexact Rounded -pwsx2480 power 35E+3 0.5 -> 1.9E+2 Inexact Rounded -pwsx2481 power 0.36 0.5 -> 0.60 Inexact Rounded -pwsx2482 power 0.036 0.5 -> 0.19 Inexact Rounded -pwsx2483 power 36.0E-1 0.5 -> 1.9 Inexact Rounded -pwsx2484 power 36.00E-2 0.5 -> 0.60 Inexact Rounded -pwsx2485 power 36E-3 0.5 -> 0.19 Inexact Rounded -pwsx2486 power 36E+1 0.5 -> 19 Inexact Rounded -pwsx2487 power 36E+2 0.5 -> 60 Inexact Rounded -pwsx2488 power 36E+3 0.5 -> 1.9E+2 Inexact Rounded -pwsx2489 power 0.37 0.5 -> 0.61 Inexact Rounded -pwsx2490 power 0.037 0.5 -> 0.19 Inexact Rounded -pwsx2491 power 37.0E-1 0.5 -> 1.9 Inexact Rounded -pwsx2492 power 37.00E-2 0.5 -> 0.61 Inexact Rounded -pwsx2493 power 37E-3 0.5 -> 0.19 Inexact Rounded -pwsx2494 power 37E+1 0.5 -> 19 Inexact Rounded -pwsx2495 power 37E+2 0.5 -> 61 Inexact Rounded -pwsx2496 power 37E+3 0.5 -> 1.9E+2 Inexact Rounded -pwsx2497 power 0.38 0.5 -> 0.62 Inexact Rounded -pwsx2498 power 0.038 0.5 -> 0.19 Inexact Rounded -pwsx2499 power 38.0E-1 0.5 -> 1.9 Inexact Rounded -pwsx2500 power 38.00E-2 0.5 -> 0.62 Inexact Rounded -pwsx2501 power 38E-3 0.5 -> 0.19 Inexact Rounded -pwsx2502 power 38E+1 0.5 -> 19 Inexact Rounded -pwsx2503 power 38E+2 0.5 -> 62 Inexact Rounded -pwsx2504 power 38E+3 0.5 -> 1.9E+2 Inexact Rounded -pwsx2505 power 0.39 0.5 -> 0.62 Inexact Rounded -pwsx2506 power 0.039 0.5 -> 0.20 Inexact Rounded -pwsx2507 power 39.0E-1 0.5 -> 2.0 Inexact Rounded -pwsx2508 power 39.00E-2 0.5 -> 0.62 Inexact Rounded -pwsx2509 power 39E-3 0.5 -> 0.20 Inexact Rounded -pwsx2510 power 39E+1 0.5 -> 20 Inexact Rounded -pwsx2511 power 39E+2 0.5 -> 62 Inexact Rounded -pwsx2512 power 39E+3 0.5 -> 2.0E+2 Inexact Rounded -pwsx2513 power 0.40 0.5 -> 0.63 Inexact Rounded -pwsx2514 power 0.040 0.5 -> 0.20 Inexact Rounded -pwsx2515 power 40.0E-1 0.5 -> 2.0 Inexact Rounded -pwsx2516 power 40.00E-2 0.5 -> 0.63 Inexact Rounded -pwsx2517 power 40E-3 0.5 -> 0.20 Inexact Rounded -pwsx2518 power 40E+1 0.5 -> 20 Inexact Rounded -pwsx2519 power 40E+2 0.5 -> 63 Inexact Rounded -pwsx2520 power 40E+3 0.5 -> 2.0E+2 Inexact Rounded -pwsx2521 power 0.41 0.5 -> 0.64 Inexact Rounded -pwsx2522 power 0.041 0.5 -> 0.20 Inexact Rounded -pwsx2523 power 41.0E-1 0.5 -> 2.0 Inexact Rounded -pwsx2524 power 41.00E-2 0.5 -> 0.64 Inexact Rounded -pwsx2525 power 41E-3 0.5 -> 0.20 Inexact Rounded -pwsx2526 power 41E+1 0.5 -> 20 Inexact Rounded -pwsx2527 power 41E+2 0.5 -> 64 Inexact Rounded -pwsx2528 power 41E+3 0.5 -> 2.0E+2 Inexact Rounded -pwsx2529 power 0.42 0.5 -> 0.65 Inexact Rounded -pwsx2530 power 0.042 0.5 -> 0.20 Inexact Rounded -pwsx2531 power 42.0E-1 0.5 -> 2.0 Inexact Rounded -pwsx2532 power 42.00E-2 0.5 -> 0.65 Inexact Rounded -pwsx2533 power 42E-3 0.5 -> 0.20 Inexact Rounded -pwsx2534 power 42E+1 0.5 -> 20 Inexact Rounded -pwsx2535 power 42E+2 0.5 -> 65 Inexact Rounded -pwsx2536 power 42E+3 0.5 -> 2.0E+2 Inexact Rounded -pwsx2537 power 0.43 0.5 -> 0.66 Inexact Rounded -pwsx2538 power 0.043 0.5 -> 0.21 Inexact Rounded -pwsx2539 power 43.0E-1 0.5 -> 2.1 Inexact Rounded -pwsx2540 power 43.00E-2 0.5 -> 0.66 Inexact Rounded -pwsx2541 power 43E-3 0.5 -> 0.21 Inexact Rounded -pwsx2542 power 43E+1 0.5 -> 21 Inexact Rounded -pwsx2543 power 43E+2 0.5 -> 66 Inexact Rounded -pwsx2544 power 43E+3 0.5 -> 2.1E+2 Inexact Rounded -pwsx2545 power 0.44 0.5 -> 0.66 Inexact Rounded -pwsx2546 power 0.044 0.5 -> 0.21 Inexact Rounded -pwsx2547 power 44.0E-1 0.5 -> 2.1 Inexact Rounded -pwsx2548 power 44.00E-2 0.5 -> 0.66 Inexact Rounded -pwsx2549 power 44E-3 0.5 -> 0.21 Inexact Rounded -pwsx2550 power 44E+1 0.5 -> 21 Inexact Rounded -pwsx2551 power 44E+2 0.5 -> 66 Inexact Rounded -pwsx2552 power 44E+3 0.5 -> 2.1E+2 Inexact Rounded -pwsx2553 power 0.45 0.5 -> 0.67 Inexact Rounded -pwsx2554 power 0.045 0.5 -> 0.21 Inexact Rounded -pwsx2555 power 45.0E-1 0.5 -> 2.1 Inexact Rounded -pwsx2556 power 45.00E-2 0.5 -> 0.67 Inexact Rounded -pwsx2557 power 45E-3 0.5 -> 0.21 Inexact Rounded -pwsx2558 power 45E+1 0.5 -> 21 Inexact Rounded -pwsx2559 power 45E+2 0.5 -> 67 Inexact Rounded -pwsx2560 power 45E+3 0.5 -> 2.1E+2 Inexact Rounded -pwsx2561 power 0.46 0.5 -> 0.68 Inexact Rounded -pwsx2562 power 0.046 0.5 -> 0.21 Inexact Rounded -pwsx2563 power 46.0E-1 0.5 -> 2.1 Inexact Rounded -pwsx2564 power 46.00E-2 0.5 -> 0.68 Inexact Rounded -pwsx2565 power 46E-3 0.5 -> 0.21 Inexact Rounded -pwsx2566 power 46E+1 0.5 -> 21 Inexact Rounded -pwsx2567 power 46E+2 0.5 -> 68 Inexact Rounded -pwsx2568 power 46E+3 0.5 -> 2.1E+2 Inexact Rounded -pwsx2569 power 0.47 0.5 -> 0.69 Inexact Rounded -pwsx2570 power 0.047 0.5 -> 0.22 Inexact Rounded -pwsx2571 power 47.0E-1 0.5 -> 2.2 Inexact Rounded -pwsx2572 power 47.00E-2 0.5 -> 0.69 Inexact Rounded -pwsx2573 power 47E-3 0.5 -> 0.22 Inexact Rounded -pwsx2574 power 47E+1 0.5 -> 22 Inexact Rounded -pwsx2575 power 47E+2 0.5 -> 69 Inexact Rounded -pwsx2576 power 47E+3 0.5 -> 2.2E+2 Inexact Rounded -pwsx2577 power 0.48 0.5 -> 0.69 Inexact Rounded -pwsx2578 power 0.048 0.5 -> 0.22 Inexact Rounded -pwsx2579 power 48.0E-1 0.5 -> 2.2 Inexact Rounded -pwsx2580 power 48.00E-2 0.5 -> 0.69 Inexact Rounded -pwsx2581 power 48E-3 0.5 -> 0.22 Inexact Rounded -pwsx2582 power 48E+1 0.5 -> 22 Inexact Rounded -pwsx2583 power 48E+2 0.5 -> 69 Inexact Rounded -pwsx2584 power 48E+3 0.5 -> 2.2E+2 Inexact Rounded -pwsx2585 power 0.49 0.5 -> 0.70 Inexact Rounded -pwsx2586 power 0.049 0.5 -> 0.22 Inexact Rounded -pwsx2587 power 49.0E-1 0.5 -> 2.2 Inexact Rounded -pwsx2588 power 49.00E-2 0.5 -> 0.70 Inexact Rounded -pwsx2589 power 49E-3 0.5 -> 0.22 Inexact Rounded -pwsx2590 power 49E+1 0.5 -> 22 Inexact Rounded -pwsx2591 power 49E+2 0.5 -> 70 Inexact Rounded -pwsx2592 power 49E+3 0.5 -> 2.2E+2 Inexact Rounded -pwsx2593 power 0.50 0.5 -> 0.71 Inexact Rounded -pwsx2594 power 0.050 0.5 -> 0.22 Inexact Rounded -pwsx2595 power 50.0E-1 0.5 -> 2.2 Inexact Rounded -pwsx2596 power 50.00E-2 0.5 -> 0.71 Inexact Rounded -pwsx2597 power 50E-3 0.5 -> 0.22 Inexact Rounded -pwsx2598 power 50E+1 0.5 -> 22 Inexact Rounded -pwsx2599 power 50E+2 0.5 -> 71 Inexact Rounded -pwsx2600 power 50E+3 0.5 -> 2.2E+2 Inexact Rounded -pwsx2601 power 0.51 0.5 -> 0.71 Inexact Rounded -pwsx2602 power 0.051 0.5 -> 0.23 Inexact Rounded -pwsx2603 power 51.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2604 power 51.00E-2 0.5 -> 0.71 Inexact Rounded -pwsx2605 power 51E-3 0.5 -> 0.23 Inexact Rounded -pwsx2606 power 51E+1 0.5 -> 23 Inexact Rounded -pwsx2607 power 51E+2 0.5 -> 71 Inexact Rounded -pwsx2608 power 51E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2609 power 0.52 0.5 -> 0.72 Inexact Rounded -pwsx2610 power 0.052 0.5 -> 0.23 Inexact Rounded -pwsx2611 power 52.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2612 power 52.00E-2 0.5 -> 0.72 Inexact Rounded -pwsx2613 power 52E-3 0.5 -> 0.23 Inexact Rounded -pwsx2614 power 52E+1 0.5 -> 23 Inexact Rounded -pwsx2615 power 52E+2 0.5 -> 72 Inexact Rounded -pwsx2616 power 52E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2617 power 0.53 0.5 -> 0.73 Inexact Rounded -pwsx2618 power 0.053 0.5 -> 0.23 Inexact Rounded -pwsx2619 power 53.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2620 power 53.00E-2 0.5 -> 0.73 Inexact Rounded -pwsx2621 power 53E-3 0.5 -> 0.23 Inexact Rounded -pwsx2622 power 53E+1 0.5 -> 23 Inexact Rounded -pwsx2623 power 53E+2 0.5 -> 73 Inexact Rounded -pwsx2624 power 53E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2625 power 0.54 0.5 -> 0.73 Inexact Rounded -pwsx2626 power 0.054 0.5 -> 0.23 Inexact Rounded -pwsx2627 power 54.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2628 power 54.00E-2 0.5 -> 0.73 Inexact Rounded -pwsx2629 power 54E-3 0.5 -> 0.23 Inexact Rounded -pwsx2630 power 54E+1 0.5 -> 23 Inexact Rounded -pwsx2631 power 54E+2 0.5 -> 73 Inexact Rounded -pwsx2632 power 54E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2633 power 0.55 0.5 -> 0.74 Inexact Rounded -pwsx2634 power 0.055 0.5 -> 0.23 Inexact Rounded -pwsx2635 power 55.0E-1 0.5 -> 2.3 Inexact Rounded -pwsx2636 power 55.00E-2 0.5 -> 0.74 Inexact Rounded -pwsx2637 power 55E-3 0.5 -> 0.23 Inexact Rounded -pwsx2638 power 55E+1 0.5 -> 23 Inexact Rounded -pwsx2639 power 55E+2 0.5 -> 74 Inexact Rounded -pwsx2640 power 55E+3 0.5 -> 2.3E+2 Inexact Rounded -pwsx2641 power 0.56 0.5 -> 0.75 Inexact Rounded -pwsx2642 power 0.056 0.5 -> 0.24 Inexact Rounded -pwsx2643 power 56.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2644 power 56.00E-2 0.5 -> 0.75 Inexact Rounded -pwsx2645 power 56E-3 0.5 -> 0.24 Inexact Rounded -pwsx2646 power 56E+1 0.5 -> 24 Inexact Rounded -pwsx2647 power 56E+2 0.5 -> 75 Inexact Rounded -pwsx2648 power 56E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2649 power 0.57 0.5 -> 0.75 Inexact Rounded -pwsx2650 power 0.057 0.5 -> 0.24 Inexact Rounded -pwsx2651 power 57.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2652 power 57.00E-2 0.5 -> 0.75 Inexact Rounded -pwsx2653 power 57E-3 0.5 -> 0.24 Inexact Rounded -pwsx2654 power 57E+1 0.5 -> 24 Inexact Rounded -pwsx2655 power 57E+2 0.5 -> 75 Inexact Rounded -pwsx2656 power 57E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2657 power 0.58 0.5 -> 0.76 Inexact Rounded -pwsx2658 power 0.058 0.5 -> 0.24 Inexact Rounded -pwsx2659 power 58.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2660 power 58.00E-2 0.5 -> 0.76 Inexact Rounded -pwsx2661 power 58E-3 0.5 -> 0.24 Inexact Rounded -pwsx2662 power 58E+1 0.5 -> 24 Inexact Rounded -pwsx2663 power 58E+2 0.5 -> 76 Inexact Rounded -pwsx2664 power 58E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2665 power 0.59 0.5 -> 0.77 Inexact Rounded -pwsx2666 power 0.059 0.5 -> 0.24 Inexact Rounded -pwsx2667 power 59.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2668 power 59.00E-2 0.5 -> 0.77 Inexact Rounded -pwsx2669 power 59E-3 0.5 -> 0.24 Inexact Rounded -pwsx2670 power 59E+1 0.5 -> 24 Inexact Rounded -pwsx2671 power 59E+2 0.5 -> 77 Inexact Rounded -pwsx2672 power 59E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2673 power 0.60 0.5 -> 0.77 Inexact Rounded -pwsx2674 power 0.060 0.5 -> 0.24 Inexact Rounded -pwsx2675 power 60.0E-1 0.5 -> 2.4 Inexact Rounded -pwsx2676 power 60.00E-2 0.5 -> 0.77 Inexact Rounded -pwsx2677 power 60E-3 0.5 -> 0.24 Inexact Rounded -pwsx2678 power 60E+1 0.5 -> 24 Inexact Rounded -pwsx2679 power 60E+2 0.5 -> 77 Inexact Rounded -pwsx2680 power 60E+3 0.5 -> 2.4E+2 Inexact Rounded -pwsx2681 power 0.61 0.5 -> 0.78 Inexact Rounded -pwsx2682 power 0.061 0.5 -> 0.25 Inexact Rounded -pwsx2683 power 61.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2684 power 61.00E-2 0.5 -> 0.78 Inexact Rounded -pwsx2685 power 61E-3 0.5 -> 0.25 Inexact Rounded -pwsx2686 power 61E+1 0.5 -> 25 Inexact Rounded -pwsx2687 power 61E+2 0.5 -> 78 Inexact Rounded -pwsx2688 power 61E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2689 power 0.62 0.5 -> 0.79 Inexact Rounded -pwsx2690 power 0.062 0.5 -> 0.25 Inexact Rounded -pwsx2691 power 62.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2692 power 62.00E-2 0.5 -> 0.79 Inexact Rounded -pwsx2693 power 62E-3 0.5 -> 0.25 Inexact Rounded -pwsx2694 power 62E+1 0.5 -> 25 Inexact Rounded -pwsx2695 power 62E+2 0.5 -> 79 Inexact Rounded -pwsx2696 power 62E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2697 power 0.63 0.5 -> 0.79 Inexact Rounded -pwsx2698 power 0.063 0.5 -> 0.25 Inexact Rounded -pwsx2699 power 63.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2700 power 63.00E-2 0.5 -> 0.79 Inexact Rounded -pwsx2701 power 63E-3 0.5 -> 0.25 Inexact Rounded -pwsx2702 power 63E+1 0.5 -> 25 Inexact Rounded -pwsx2703 power 63E+2 0.5 -> 79 Inexact Rounded -pwsx2704 power 63E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2705 power 0.64 0.5 -> 0.80 Inexact Rounded -pwsx2706 power 0.064 0.5 -> 0.25 Inexact Rounded -pwsx2707 power 64.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2708 power 64.00E-2 0.5 -> 0.80 Inexact Rounded -pwsx2709 power 64E-3 0.5 -> 0.25 Inexact Rounded -pwsx2710 power 64E+1 0.5 -> 25 Inexact Rounded -pwsx2711 power 64E+2 0.5 -> 80 Inexact Rounded -pwsx2712 power 64E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2713 power 0.65 0.5 -> 0.81 Inexact Rounded -pwsx2714 power 0.065 0.5 -> 0.25 Inexact Rounded -pwsx2715 power 65.0E-1 0.5 -> 2.5 Inexact Rounded -pwsx2716 power 65.00E-2 0.5 -> 0.81 Inexact Rounded -pwsx2717 power 65E-3 0.5 -> 0.25 Inexact Rounded -pwsx2718 power 65E+1 0.5 -> 25 Inexact Rounded -pwsx2719 power 65E+2 0.5 -> 81 Inexact Rounded -pwsx2720 power 65E+3 0.5 -> 2.5E+2 Inexact Rounded -pwsx2721 power 0.66 0.5 -> 0.81 Inexact Rounded -pwsx2722 power 0.066 0.5 -> 0.26 Inexact Rounded -pwsx2723 power 66.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2724 power 66.00E-2 0.5 -> 0.81 Inexact Rounded -pwsx2725 power 66E-3 0.5 -> 0.26 Inexact Rounded -pwsx2726 power 66E+1 0.5 -> 26 Inexact Rounded -pwsx2727 power 66E+2 0.5 -> 81 Inexact Rounded -pwsx2728 power 66E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2729 power 0.67 0.5 -> 0.82 Inexact Rounded -pwsx2730 power 0.067 0.5 -> 0.26 Inexact Rounded -pwsx2731 power 67.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2732 power 67.00E-2 0.5 -> 0.82 Inexact Rounded -pwsx2733 power 67E-3 0.5 -> 0.26 Inexact Rounded -pwsx2734 power 67E+1 0.5 -> 26 Inexact Rounded -pwsx2735 power 67E+2 0.5 -> 82 Inexact Rounded -pwsx2736 power 67E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2737 power 0.68 0.5 -> 0.82 Inexact Rounded -pwsx2738 power 0.068 0.5 -> 0.26 Inexact Rounded -pwsx2739 power 68.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2740 power 68.00E-2 0.5 -> 0.82 Inexact Rounded -pwsx2741 power 68E-3 0.5 -> 0.26 Inexact Rounded -pwsx2742 power 68E+1 0.5 -> 26 Inexact Rounded -pwsx2743 power 68E+2 0.5 -> 82 Inexact Rounded -pwsx2744 power 68E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2745 power 0.69 0.5 -> 0.83 Inexact Rounded -pwsx2746 power 0.069 0.5 -> 0.26 Inexact Rounded -pwsx2747 power 69.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2748 power 69.00E-2 0.5 -> 0.83 Inexact Rounded -pwsx2749 power 69E-3 0.5 -> 0.26 Inexact Rounded -pwsx2750 power 69E+1 0.5 -> 26 Inexact Rounded -pwsx2751 power 69E+2 0.5 -> 83 Inexact Rounded -pwsx2752 power 69E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2753 power 0.70 0.5 -> 0.84 Inexact Rounded -pwsx2754 power 0.070 0.5 -> 0.26 Inexact Rounded -pwsx2755 power 70.0E-1 0.5 -> 2.6 Inexact Rounded -pwsx2756 power 70.00E-2 0.5 -> 0.84 Inexact Rounded -pwsx2757 power 70E-3 0.5 -> 0.26 Inexact Rounded -pwsx2758 power 70E+1 0.5 -> 26 Inexact Rounded -pwsx2759 power 70E+2 0.5 -> 84 Inexact Rounded -pwsx2760 power 70E+3 0.5 -> 2.6E+2 Inexact Rounded -pwsx2761 power 0.71 0.5 -> 0.84 Inexact Rounded -pwsx2762 power 0.071 0.5 -> 0.27 Inexact Rounded -pwsx2763 power 71.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2764 power 71.00E-2 0.5 -> 0.84 Inexact Rounded -pwsx2765 power 71E-3 0.5 -> 0.27 Inexact Rounded -pwsx2766 power 71E+1 0.5 -> 27 Inexact Rounded -pwsx2767 power 71E+2 0.5 -> 84 Inexact Rounded -pwsx2768 power 71E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2769 power 0.72 0.5 -> 0.85 Inexact Rounded -pwsx2770 power 0.072 0.5 -> 0.27 Inexact Rounded -pwsx2771 power 72.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2772 power 72.00E-2 0.5 -> 0.85 Inexact Rounded -pwsx2773 power 72E-3 0.5 -> 0.27 Inexact Rounded -pwsx2774 power 72E+1 0.5 -> 27 Inexact Rounded -pwsx2775 power 72E+2 0.5 -> 85 Inexact Rounded -pwsx2776 power 72E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2777 power 0.73 0.5 -> 0.85 Inexact Rounded -pwsx2778 power 0.073 0.5 -> 0.27 Inexact Rounded -pwsx2779 power 73.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2780 power 73.00E-2 0.5 -> 0.85 Inexact Rounded -pwsx2781 power 73E-3 0.5 -> 0.27 Inexact Rounded -pwsx2782 power 73E+1 0.5 -> 27 Inexact Rounded -pwsx2783 power 73E+2 0.5 -> 85 Inexact Rounded -pwsx2784 power 73E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2785 power 0.74 0.5 -> 0.86 Inexact Rounded -pwsx2786 power 0.074 0.5 -> 0.27 Inexact Rounded -pwsx2787 power 74.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2788 power 74.00E-2 0.5 -> 0.86 Inexact Rounded -pwsx2789 power 74E-3 0.5 -> 0.27 Inexact Rounded -pwsx2790 power 74E+1 0.5 -> 27 Inexact Rounded -pwsx2791 power 74E+2 0.5 -> 86 Inexact Rounded -pwsx2792 power 74E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2793 power 0.75 0.5 -> 0.87 Inexact Rounded -pwsx2794 power 0.075 0.5 -> 0.27 Inexact Rounded -pwsx2795 power 75.0E-1 0.5 -> 2.7 Inexact Rounded -pwsx2796 power 75.00E-2 0.5 -> 0.87 Inexact Rounded -pwsx2797 power 75E-3 0.5 -> 0.27 Inexact Rounded -pwsx2798 power 75E+1 0.5 -> 27 Inexact Rounded -pwsx2799 power 75E+2 0.5 -> 87 Inexact Rounded -pwsx2800 power 75E+3 0.5 -> 2.7E+2 Inexact Rounded -pwsx2801 power 0.76 0.5 -> 0.87 Inexact Rounded -pwsx2802 power 0.076 0.5 -> 0.28 Inexact Rounded -pwsx2803 power 76.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2804 power 76.00E-2 0.5 -> 0.87 Inexact Rounded -pwsx2805 power 76E-3 0.5 -> 0.28 Inexact Rounded -pwsx2806 power 76E+1 0.5 -> 28 Inexact Rounded -pwsx2807 power 76E+2 0.5 -> 87 Inexact Rounded -pwsx2808 power 76E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2809 power 0.77 0.5 -> 0.88 Inexact Rounded -pwsx2810 power 0.077 0.5 -> 0.28 Inexact Rounded -pwsx2811 power 77.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2812 power 77.00E-2 0.5 -> 0.88 Inexact Rounded -pwsx2813 power 77E-3 0.5 -> 0.28 Inexact Rounded -pwsx2814 power 77E+1 0.5 -> 28 Inexact Rounded -pwsx2815 power 77E+2 0.5 -> 88 Inexact Rounded -pwsx2816 power 77E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2817 power 0.78 0.5 -> 0.88 Inexact Rounded -pwsx2818 power 0.078 0.5 -> 0.28 Inexact Rounded -pwsx2819 power 78.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2820 power 78.00E-2 0.5 -> 0.88 Inexact Rounded -pwsx2821 power 78E-3 0.5 -> 0.28 Inexact Rounded -pwsx2822 power 78E+1 0.5 -> 28 Inexact Rounded -pwsx2823 power 78E+2 0.5 -> 88 Inexact Rounded -pwsx2824 power 78E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2825 power 0.79 0.5 -> 0.89 Inexact Rounded -pwsx2826 power 0.079 0.5 -> 0.28 Inexact Rounded -pwsx2827 power 79.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2828 power 79.00E-2 0.5 -> 0.89 Inexact Rounded -pwsx2829 power 79E-3 0.5 -> 0.28 Inexact Rounded -pwsx2830 power 79E+1 0.5 -> 28 Inexact Rounded -pwsx2831 power 79E+2 0.5 -> 89 Inexact Rounded -pwsx2832 power 79E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2833 power 0.80 0.5 -> 0.89 Inexact Rounded -pwsx2834 power 0.080 0.5 -> 0.28 Inexact Rounded -pwsx2835 power 80.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2836 power 80.00E-2 0.5 -> 0.89 Inexact Rounded -pwsx2837 power 80E-3 0.5 -> 0.28 Inexact Rounded -pwsx2838 power 80E+1 0.5 -> 28 Inexact Rounded -pwsx2839 power 80E+2 0.5 -> 89 Inexact Rounded -pwsx2840 power 80E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2841 power 0.81 0.5 -> 0.90 Inexact Rounded -pwsx2842 power 0.081 0.5 -> 0.28 Inexact Rounded -pwsx2843 power 81.0E-1 0.5 -> 2.8 Inexact Rounded -pwsx2844 power 81.00E-2 0.5 -> 0.90 Inexact Rounded -pwsx2845 power 81E-3 0.5 -> 0.28 Inexact Rounded -pwsx2846 power 81E+1 0.5 -> 28 Inexact Rounded -pwsx2847 power 81E+2 0.5 -> 90 Inexact Rounded -pwsx2848 power 81E+3 0.5 -> 2.8E+2 Inexact Rounded -pwsx2849 power 0.82 0.5 -> 0.91 Inexact Rounded -pwsx2850 power 0.082 0.5 -> 0.29 Inexact Rounded -pwsx2851 power 82.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2852 power 82.00E-2 0.5 -> 0.91 Inexact Rounded -pwsx2853 power 82E-3 0.5 -> 0.29 Inexact Rounded -pwsx2854 power 82E+1 0.5 -> 29 Inexact Rounded -pwsx2855 power 82E+2 0.5 -> 91 Inexact Rounded -pwsx2856 power 82E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2857 power 0.83 0.5 -> 0.91 Inexact Rounded -pwsx2858 power 0.083 0.5 -> 0.29 Inexact Rounded -pwsx2859 power 83.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2860 power 83.00E-2 0.5 -> 0.91 Inexact Rounded -pwsx2861 power 83E-3 0.5 -> 0.29 Inexact Rounded -pwsx2862 power 83E+1 0.5 -> 29 Inexact Rounded -pwsx2863 power 83E+2 0.5 -> 91 Inexact Rounded -pwsx2864 power 83E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2865 power 0.84 0.5 -> 0.92 Inexact Rounded -pwsx2866 power 0.084 0.5 -> 0.29 Inexact Rounded -pwsx2867 power 84.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2868 power 84.00E-2 0.5 -> 0.92 Inexact Rounded -pwsx2869 power 84E-3 0.5 -> 0.29 Inexact Rounded -pwsx2870 power 84E+1 0.5 -> 29 Inexact Rounded -pwsx2871 power 84E+2 0.5 -> 92 Inexact Rounded -pwsx2872 power 84E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2873 power 0.85 0.5 -> 0.92 Inexact Rounded -pwsx2874 power 0.085 0.5 -> 0.29 Inexact Rounded -pwsx2875 power 85.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2876 power 85.00E-2 0.5 -> 0.92 Inexact Rounded -pwsx2877 power 85E-3 0.5 -> 0.29 Inexact Rounded -pwsx2878 power 85E+1 0.5 -> 29 Inexact Rounded -pwsx2879 power 85E+2 0.5 -> 92 Inexact Rounded -pwsx2880 power 85E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2881 power 0.86 0.5 -> 0.93 Inexact Rounded -pwsx2882 power 0.086 0.5 -> 0.29 Inexact Rounded -pwsx2883 power 86.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2884 power 86.00E-2 0.5 -> 0.93 Inexact Rounded -pwsx2885 power 86E-3 0.5 -> 0.29 Inexact Rounded -pwsx2886 power 86E+1 0.5 -> 29 Inexact Rounded -pwsx2887 power 86E+2 0.5 -> 93 Inexact Rounded -pwsx2888 power 86E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2889 power 0.87 0.5 -> 0.93 Inexact Rounded -pwsx2890 power 0.087 0.5 -> 0.29 Inexact Rounded -pwsx2891 power 87.0E-1 0.5 -> 2.9 Inexact Rounded -pwsx2892 power 87.00E-2 0.5 -> 0.93 Inexact Rounded -pwsx2893 power 87E-3 0.5 -> 0.29 Inexact Rounded -pwsx2894 power 87E+1 0.5 -> 29 Inexact Rounded -pwsx2895 power 87E+2 0.5 -> 93 Inexact Rounded -pwsx2896 power 87E+3 0.5 -> 2.9E+2 Inexact Rounded -pwsx2897 power 0.88 0.5 -> 0.94 Inexact Rounded -pwsx2898 power 0.088 0.5 -> 0.30 Inexact Rounded -pwsx2899 power 88.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2900 power 88.00E-2 0.5 -> 0.94 Inexact Rounded -pwsx2901 power 88E-3 0.5 -> 0.30 Inexact Rounded -pwsx2902 power 88E+1 0.5 -> 30 Inexact Rounded -pwsx2903 power 88E+2 0.5 -> 94 Inexact Rounded -pwsx2904 power 88E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2905 power 0.89 0.5 -> 0.94 Inexact Rounded -pwsx2906 power 0.089 0.5 -> 0.30 Inexact Rounded -pwsx2907 power 89.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2908 power 89.00E-2 0.5 -> 0.94 Inexact Rounded -pwsx2909 power 89E-3 0.5 -> 0.30 Inexact Rounded -pwsx2910 power 89E+1 0.5 -> 30 Inexact Rounded -pwsx2911 power 89E+2 0.5 -> 94 Inexact Rounded -pwsx2912 power 89E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2913 power 0.90 0.5 -> 0.95 Inexact Rounded -pwsx2914 power 0.090 0.5 -> 0.30 Inexact Rounded -pwsx2915 power 90.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2916 power 90.00E-2 0.5 -> 0.95 Inexact Rounded -pwsx2917 power 90E-3 0.5 -> 0.30 Inexact Rounded -pwsx2918 power 90E+1 0.5 -> 30 Inexact Rounded -pwsx2919 power 90E+2 0.5 -> 95 Inexact Rounded -pwsx2920 power 90E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2921 power 0.91 0.5 -> 0.95 Inexact Rounded -pwsx2922 power 0.091 0.5 -> 0.30 Inexact Rounded -pwsx2923 power 91.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2924 power 91.00E-2 0.5 -> 0.95 Inexact Rounded -pwsx2925 power 91E-3 0.5 -> 0.30 Inexact Rounded -pwsx2926 power 91E+1 0.5 -> 30 Inexact Rounded -pwsx2927 power 91E+2 0.5 -> 95 Inexact Rounded -pwsx2928 power 91E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2929 power 0.92 0.5 -> 0.96 Inexact Rounded -pwsx2930 power 0.092 0.5 -> 0.30 Inexact Rounded -pwsx2931 power 92.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2932 power 92.00E-2 0.5 -> 0.96 Inexact Rounded -pwsx2933 power 92E-3 0.5 -> 0.30 Inexact Rounded -pwsx2934 power 92E+1 0.5 -> 30 Inexact Rounded -pwsx2935 power 92E+2 0.5 -> 96 Inexact Rounded -pwsx2936 power 92E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2937 power 0.93 0.5 -> 0.96 Inexact Rounded -pwsx2938 power 0.093 0.5 -> 0.30 Inexact Rounded -pwsx2939 power 93.0E-1 0.5 -> 3.0 Inexact Rounded -pwsx2940 power 93.00E-2 0.5 -> 0.96 Inexact Rounded -pwsx2941 power 93E-3 0.5 -> 0.30 Inexact Rounded -pwsx2942 power 93E+1 0.5 -> 30 Inexact Rounded -pwsx2943 power 93E+2 0.5 -> 96 Inexact Rounded -pwsx2944 power 93E+3 0.5 -> 3.0E+2 Inexact Rounded -pwsx2945 power 0.94 0.5 -> 0.97 Inexact Rounded -pwsx2946 power 0.094 0.5 -> 0.31 Inexact Rounded -pwsx2947 power 94.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2948 power 94.00E-2 0.5 -> 0.97 Inexact Rounded -pwsx2949 power 94E-3 0.5 -> 0.31 Inexact Rounded -pwsx2950 power 94E+1 0.5 -> 31 Inexact Rounded -pwsx2951 power 94E+2 0.5 -> 97 Inexact Rounded -pwsx2952 power 94E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2953 power 0.95 0.5 -> 0.97 Inexact Rounded -pwsx2954 power 0.095 0.5 -> 0.31 Inexact Rounded -pwsx2955 power 95.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2956 power 95.00E-2 0.5 -> 0.97 Inexact Rounded -pwsx2957 power 95E-3 0.5 -> 0.31 Inexact Rounded -pwsx2958 power 95E+1 0.5 -> 31 Inexact Rounded -pwsx2959 power 95E+2 0.5 -> 97 Inexact Rounded -pwsx2960 power 95E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2961 power 0.96 0.5 -> 0.98 Inexact Rounded -pwsx2962 power 0.096 0.5 -> 0.31 Inexact Rounded -pwsx2963 power 96.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2964 power 96.00E-2 0.5 -> 0.98 Inexact Rounded -pwsx2965 power 96E-3 0.5 -> 0.31 Inexact Rounded -pwsx2966 power 96E+1 0.5 -> 31 Inexact Rounded -pwsx2967 power 96E+2 0.5 -> 98 Inexact Rounded -pwsx2968 power 96E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2969 power 0.97 0.5 -> 0.98 Inexact Rounded -pwsx2970 power 0.097 0.5 -> 0.31 Inexact Rounded -pwsx2971 power 97.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2972 power 97.00E-2 0.5 -> 0.98 Inexact Rounded -pwsx2973 power 97E-3 0.5 -> 0.31 Inexact Rounded -pwsx2974 power 97E+1 0.5 -> 31 Inexact Rounded -pwsx2975 power 97E+2 0.5 -> 98 Inexact Rounded -pwsx2976 power 97E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2977 power 0.98 0.5 -> 0.99 Inexact Rounded -pwsx2978 power 0.098 0.5 -> 0.31 Inexact Rounded -pwsx2979 power 98.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2980 power 98.00E-2 0.5 -> 0.99 Inexact Rounded -pwsx2981 power 98E-3 0.5 -> 0.31 Inexact Rounded -pwsx2982 power 98E+1 0.5 -> 31 Inexact Rounded -pwsx2983 power 98E+2 0.5 -> 99 Inexact Rounded -pwsx2984 power 98E+3 0.5 -> 3.1E+2 Inexact Rounded -pwsx2985 power 0.99 0.5 -> 0.99 Inexact Rounded -pwsx2986 power 0.099 0.5 -> 0.31 Inexact Rounded -pwsx2987 power 99.0E-1 0.5 -> 3.1 Inexact Rounded -pwsx2988 power 99.00E-2 0.5 -> 0.99 Inexact Rounded -pwsx2989 power 99E-3 0.5 -> 0.31 Inexact Rounded -pwsx2990 power 99E+1 0.5 -> 31 Inexact Rounded -pwsx2991 power 99E+2 0.5 -> 99 Inexact Rounded -pwsx2992 power 99E+3 0.5 -> 3.1E+2 Inexact Rounded - --- Precision 3 squareroot tests [exhaustive, f and f/10] -rounding: half_even -maxExponent: 999 -minexponent: -999 -precision: 3 -pwsx3001 power 0.1 0.5 -> 0.316 Inexact Rounded -pwsx3002 power 0.01 0.5 -> 0.100 Inexact Rounded -pwsx3003 power 0.2 0.5 -> 0.447 Inexact Rounded -pwsx3004 power 0.02 0.5 -> 0.141 Inexact Rounded -pwsx3005 power 0.3 0.5 -> 0.548 Inexact Rounded -pwsx3006 power 0.03 0.5 -> 0.173 Inexact Rounded -pwsx3007 power 0.4 0.5 -> 0.632 Inexact Rounded -pwsx3008 power 0.04 0.5 -> 0.200 Inexact Rounded -pwsx3009 power 0.5 0.5 -> 0.707 Inexact Rounded -pwsx3010 power 0.05 0.5 -> 0.224 Inexact Rounded -pwsx3011 power 0.6 0.5 -> 0.775 Inexact Rounded -pwsx3012 power 0.06 0.5 -> 0.245 Inexact Rounded -pwsx3013 power 0.7 0.5 -> 0.837 Inexact Rounded -pwsx3014 power 0.07 0.5 -> 0.265 Inexact Rounded -pwsx3015 power 0.8 0.5 -> 0.894 Inexact Rounded -pwsx3016 power 0.08 0.5 -> 0.283 Inexact Rounded -pwsx3017 power 0.9 0.5 -> 0.949 Inexact Rounded -pwsx3018 power 0.09 0.5 -> 0.300 Inexact Rounded -pwsx3019 power 0.11 0.5 -> 0.332 Inexact Rounded -pwsx3020 power 0.011 0.5 -> 0.105 Inexact Rounded -pwsx3021 power 0.12 0.5 -> 0.346 Inexact Rounded -pwsx3022 power 0.012 0.5 -> 0.110 Inexact Rounded -pwsx3023 power 0.13 0.5 -> 0.361 Inexact Rounded -pwsx3024 power 0.013 0.5 -> 0.114 Inexact Rounded -pwsx3025 power 0.14 0.5 -> 0.374 Inexact Rounded -pwsx3026 power 0.014 0.5 -> 0.118 Inexact Rounded -pwsx3027 power 0.15 0.5 -> 0.387 Inexact Rounded -pwsx3028 power 0.015 0.5 -> 0.122 Inexact Rounded -pwsx3029 power 0.16 0.5 -> 0.400 Inexact Rounded -pwsx3030 power 0.016 0.5 -> 0.126 Inexact Rounded -pwsx3031 power 0.17 0.5 -> 0.412 Inexact Rounded -pwsx3032 power 0.017 0.5 -> 0.130 Inexact Rounded -pwsx3033 power 0.18 0.5 -> 0.424 Inexact Rounded -pwsx3034 power 0.018 0.5 -> 0.134 Inexact Rounded -pwsx3035 power 0.19 0.5 -> 0.436 Inexact Rounded -pwsx3036 power 0.019 0.5 -> 0.138 Inexact Rounded -pwsx3037 power 0.21 0.5 -> 0.458 Inexact Rounded -pwsx3038 power 0.021 0.5 -> 0.145 Inexact Rounded -pwsx3039 power 0.22 0.5 -> 0.469 Inexact Rounded -pwsx3040 power 0.022 0.5 -> 0.148 Inexact Rounded -pwsx3041 power 0.23 0.5 -> 0.480 Inexact Rounded -pwsx3042 power 0.023 0.5 -> 0.152 Inexact Rounded -pwsx3043 power 0.24 0.5 -> 0.490 Inexact Rounded -pwsx3044 power 0.024 0.5 -> 0.155 Inexact Rounded -pwsx3045 power 0.25 0.5 -> 0.500 Inexact Rounded -pwsx3046 power 0.025 0.5 -> 0.158 Inexact Rounded -pwsx3047 power 0.26 0.5 -> 0.510 Inexact Rounded -pwsx3048 power 0.026 0.5 -> 0.161 Inexact Rounded -pwsx3049 power 0.27 0.5 -> 0.520 Inexact Rounded -pwsx3050 power 0.027 0.5 -> 0.164 Inexact Rounded -pwsx3051 power 0.28 0.5 -> 0.529 Inexact Rounded -pwsx3052 power 0.028 0.5 -> 0.167 Inexact Rounded -pwsx3053 power 0.29 0.5 -> 0.539 Inexact Rounded -pwsx3054 power 0.029 0.5 -> 0.170 Inexact Rounded -pwsx3055 power 0.31 0.5 -> 0.557 Inexact Rounded -pwsx3056 power 0.031 0.5 -> 0.176 Inexact Rounded -pwsx3057 power 0.32 0.5 -> 0.566 Inexact Rounded -pwsx3058 power 0.032 0.5 -> 0.179 Inexact Rounded -pwsx3059 power 0.33 0.5 -> 0.574 Inexact Rounded -pwsx3060 power 0.033 0.5 -> 0.182 Inexact Rounded -pwsx3061 power 0.34 0.5 -> 0.583 Inexact Rounded -pwsx3062 power 0.034 0.5 -> 0.184 Inexact Rounded -pwsx3063 power 0.35 0.5 -> 0.592 Inexact Rounded -pwsx3064 power 0.035 0.5 -> 0.187 Inexact Rounded -pwsx3065 power 0.36 0.5 -> 0.600 Inexact Rounded -pwsx3066 power 0.036 0.5 -> 0.190 Inexact Rounded -pwsx3067 power 0.37 0.5 -> 0.608 Inexact Rounded -pwsx3068 power 0.037 0.5 -> 0.192 Inexact Rounded -pwsx3069 power 0.38 0.5 -> 0.616 Inexact Rounded -pwsx3070 power 0.038 0.5 -> 0.195 Inexact Rounded -pwsx3071 power 0.39 0.5 -> 0.624 Inexact Rounded -pwsx3072 power 0.039 0.5 -> 0.197 Inexact Rounded -pwsx3073 power 0.41 0.5 -> 0.640 Inexact Rounded -pwsx3074 power 0.041 0.5 -> 0.202 Inexact Rounded -pwsx3075 power 0.42 0.5 -> 0.648 Inexact Rounded -pwsx3076 power 0.042 0.5 -> 0.205 Inexact Rounded -pwsx3077 power 0.43 0.5 -> 0.656 Inexact Rounded -pwsx3078 power 0.043 0.5 -> 0.207 Inexact Rounded -pwsx3079 power 0.44 0.5 -> 0.663 Inexact Rounded -pwsx3080 power 0.044 0.5 -> 0.210 Inexact Rounded -pwsx3081 power 0.45 0.5 -> 0.671 Inexact Rounded -pwsx3082 power 0.045 0.5 -> 0.212 Inexact Rounded -pwsx3083 power 0.46 0.5 -> 0.678 Inexact Rounded -pwsx3084 power 0.046 0.5 -> 0.214 Inexact Rounded -pwsx3085 power 0.47 0.5 -> 0.686 Inexact Rounded -pwsx3086 power 0.047 0.5 -> 0.217 Inexact Rounded -pwsx3087 power 0.48 0.5 -> 0.693 Inexact Rounded -pwsx3088 power 0.048 0.5 -> 0.219 Inexact Rounded -pwsx3089 power 0.49 0.5 -> 0.700 Inexact Rounded -pwsx3090 power 0.049 0.5 -> 0.221 Inexact Rounded -pwsx3091 power 0.51 0.5 -> 0.714 Inexact Rounded -pwsx3092 power 0.051 0.5 -> 0.226 Inexact Rounded -pwsx3093 power 0.52 0.5 -> 0.721 Inexact Rounded -pwsx3094 power 0.052 0.5 -> 0.228 Inexact Rounded -pwsx3095 power 0.53 0.5 -> 0.728 Inexact Rounded -pwsx3096 power 0.053 0.5 -> 0.230 Inexact Rounded -pwsx3097 power 0.54 0.5 -> 0.735 Inexact Rounded -pwsx3098 power 0.054 0.5 -> 0.232 Inexact Rounded -pwsx3099 power 0.55 0.5 -> 0.742 Inexact Rounded -pwsx3100 power 0.055 0.5 -> 0.235 Inexact Rounded -pwsx3101 power 0.56 0.5 -> 0.748 Inexact Rounded -pwsx3102 power 0.056 0.5 -> 0.237 Inexact Rounded -pwsx3103 power 0.57 0.5 -> 0.755 Inexact Rounded -pwsx3104 power 0.057 0.5 -> 0.239 Inexact Rounded -pwsx3105 power 0.58 0.5 -> 0.762 Inexact Rounded -pwsx3106 power 0.058 0.5 -> 0.241 Inexact Rounded -pwsx3107 power 0.59 0.5 -> 0.768 Inexact Rounded -pwsx3108 power 0.059 0.5 -> 0.243 Inexact Rounded -pwsx3109 power 0.61 0.5 -> 0.781 Inexact Rounded -pwsx3110 power 0.061 0.5 -> 0.247 Inexact Rounded -pwsx3111 power 0.62 0.5 -> 0.787 Inexact Rounded -pwsx3112 power 0.062 0.5 -> 0.249 Inexact Rounded -pwsx3113 power 0.63 0.5 -> 0.794 Inexact Rounded -pwsx3114 power 0.063 0.5 -> 0.251 Inexact Rounded -pwsx3115 power 0.64 0.5 -> 0.800 Inexact Rounded -pwsx3116 power 0.064 0.5 -> 0.253 Inexact Rounded -pwsx3117 power 0.65 0.5 -> 0.806 Inexact Rounded -pwsx3118 power 0.065 0.5 -> 0.255 Inexact Rounded -pwsx3119 power 0.66 0.5 -> 0.812 Inexact Rounded -pwsx3120 power 0.066 0.5 -> 0.257 Inexact Rounded -pwsx3121 power 0.67 0.5 -> 0.819 Inexact Rounded -pwsx3122 power 0.067 0.5 -> 0.259 Inexact Rounded -pwsx3123 power 0.68 0.5 -> 0.825 Inexact Rounded -pwsx3124 power 0.068 0.5 -> 0.261 Inexact Rounded -pwsx3125 power 0.69 0.5 -> 0.831 Inexact Rounded -pwsx3126 power 0.069 0.5 -> 0.263 Inexact Rounded -pwsx3127 power 0.71 0.5 -> 0.843 Inexact Rounded -pwsx3128 power 0.071 0.5 -> 0.266 Inexact Rounded -pwsx3129 power 0.72 0.5 -> 0.849 Inexact Rounded -pwsx3130 power 0.072 0.5 -> 0.268 Inexact Rounded -pwsx3131 power 0.73 0.5 -> 0.854 Inexact Rounded -pwsx3132 power 0.073 0.5 -> 0.270 Inexact Rounded -pwsx3133 power 0.74 0.5 -> 0.860 Inexact Rounded -pwsx3134 power 0.074 0.5 -> 0.272 Inexact Rounded -pwsx3135 power 0.75 0.5 -> 0.866 Inexact Rounded -pwsx3136 power 0.075 0.5 -> 0.274 Inexact Rounded -pwsx3137 power 0.76 0.5 -> 0.872 Inexact Rounded -pwsx3138 power 0.076 0.5 -> 0.276 Inexact Rounded -pwsx3139 power 0.77 0.5 -> 0.877 Inexact Rounded -pwsx3140 power 0.077 0.5 -> 0.277 Inexact Rounded -pwsx3141 power 0.78 0.5 -> 0.883 Inexact Rounded -pwsx3142 power 0.078 0.5 -> 0.279 Inexact Rounded -pwsx3143 power 0.79 0.5 -> 0.889 Inexact Rounded -pwsx3144 power 0.079 0.5 -> 0.281 Inexact Rounded -pwsx3145 power 0.81 0.5 -> 0.900 Inexact Rounded -pwsx3146 power 0.081 0.5 -> 0.285 Inexact Rounded -pwsx3147 power 0.82 0.5 -> 0.906 Inexact Rounded -pwsx3148 power 0.082 0.5 -> 0.286 Inexact Rounded -pwsx3149 power 0.83 0.5 -> 0.911 Inexact Rounded -pwsx3150 power 0.083 0.5 -> 0.288 Inexact Rounded -pwsx3151 power 0.84 0.5 -> 0.917 Inexact Rounded -pwsx3152 power 0.084 0.5 -> 0.290 Inexact Rounded -pwsx3153 power 0.85 0.5 -> 0.922 Inexact Rounded -pwsx3154 power 0.085 0.5 -> 0.292 Inexact Rounded -pwsx3155 power 0.86 0.5 -> 0.927 Inexact Rounded -pwsx3156 power 0.086 0.5 -> 0.293 Inexact Rounded -pwsx3157 power 0.87 0.5 -> 0.933 Inexact Rounded -pwsx3158 power 0.087 0.5 -> 0.295 Inexact Rounded -pwsx3159 power 0.88 0.5 -> 0.938 Inexact Rounded -pwsx3160 power 0.088 0.5 -> 0.297 Inexact Rounded -pwsx3161 power 0.89 0.5 -> 0.943 Inexact Rounded -pwsx3162 power 0.089 0.5 -> 0.298 Inexact Rounded -pwsx3163 power 0.91 0.5 -> 0.954 Inexact Rounded -pwsx3164 power 0.091 0.5 -> 0.302 Inexact Rounded -pwsx3165 power 0.92 0.5 -> 0.959 Inexact Rounded -pwsx3166 power 0.092 0.5 -> 0.303 Inexact Rounded -pwsx3167 power 0.93 0.5 -> 0.964 Inexact Rounded -pwsx3168 power 0.093 0.5 -> 0.305 Inexact Rounded -pwsx3169 power 0.94 0.5 -> 0.970 Inexact Rounded -pwsx3170 power 0.094 0.5 -> 0.307 Inexact Rounded -pwsx3171 power 0.95 0.5 -> 0.975 Inexact Rounded -pwsx3172 power 0.095 0.5 -> 0.308 Inexact Rounded -pwsx3173 power 0.96 0.5 -> 0.980 Inexact Rounded -pwsx3174 power 0.096 0.5 -> 0.310 Inexact Rounded -pwsx3175 power 0.97 0.5 -> 0.985 Inexact Rounded -pwsx3176 power 0.097 0.5 -> 0.311 Inexact Rounded -pwsx3177 power 0.98 0.5 -> 0.990 Inexact Rounded -pwsx3178 power 0.098 0.5 -> 0.313 Inexact Rounded -pwsx3179 power 0.99 0.5 -> 0.995 Inexact Rounded -pwsx3180 power 0.099 0.5 -> 0.315 Inexact Rounded -pwsx3181 power 0.101 0.5 -> 0.318 Inexact Rounded -pwsx3182 power 0.0101 0.5 -> 0.100 Inexact Rounded -pwsx3183 power 0.102 0.5 -> 0.319 Inexact Rounded -pwsx3184 power 0.0102 0.5 -> 0.101 Inexact Rounded -pwsx3185 power 0.103 0.5 -> 0.321 Inexact Rounded -pwsx3186 power 0.0103 0.5 -> 0.101 Inexact Rounded -pwsx3187 power 0.104 0.5 -> 0.322 Inexact Rounded -pwsx3188 power 0.0104 0.5 -> 0.102 Inexact Rounded -pwsx3189 power 0.105 0.5 -> 0.324 Inexact Rounded -pwsx3190 power 0.0105 0.5 -> 0.102 Inexact Rounded -pwsx3191 power 0.106 0.5 -> 0.326 Inexact Rounded -pwsx3192 power 0.0106 0.5 -> 0.103 Inexact Rounded -pwsx3193 power 0.107 0.5 -> 0.327 Inexact Rounded -pwsx3194 power 0.0107 0.5 -> 0.103 Inexact Rounded -pwsx3195 power 0.108 0.5 -> 0.329 Inexact Rounded -pwsx3196 power 0.0108 0.5 -> 0.104 Inexact Rounded -pwsx3197 power 0.109 0.5 -> 0.330 Inexact Rounded -pwsx3198 power 0.0109 0.5 -> 0.104 Inexact Rounded -pwsx3199 power 0.111 0.5 -> 0.333 Inexact Rounded -pwsx3200 power 0.0111 0.5 -> 0.105 Inexact Rounded -pwsx3201 power 0.112 0.5 -> 0.335 Inexact Rounded -pwsx3202 power 0.0112 0.5 -> 0.106 Inexact Rounded -pwsx3203 power 0.113 0.5 -> 0.336 Inexact Rounded -pwsx3204 power 0.0113 0.5 -> 0.106 Inexact Rounded -pwsx3205 power 0.114 0.5 -> 0.338 Inexact Rounded -pwsx3206 power 0.0114 0.5 -> 0.107 Inexact Rounded -pwsx3207 power 0.115 0.5 -> 0.339 Inexact Rounded -pwsx3208 power 0.0115 0.5 -> 0.107 Inexact Rounded -pwsx3209 power 0.116 0.5 -> 0.341 Inexact Rounded -pwsx3210 power 0.0116 0.5 -> 0.108 Inexact Rounded -pwsx3211 power 0.117 0.5 -> 0.342 Inexact Rounded -pwsx3212 power 0.0117 0.5 -> 0.108 Inexact Rounded -pwsx3213 power 0.118 0.5 -> 0.344 Inexact Rounded -pwsx3214 power 0.0118 0.5 -> 0.109 Inexact Rounded -pwsx3215 power 0.119 0.5 -> 0.345 Inexact Rounded -pwsx3216 power 0.0119 0.5 -> 0.109 Inexact Rounded -pwsx3217 power 0.121 0.5 -> 0.348 Inexact Rounded -pwsx3218 power 0.0121 0.5 -> 0.110 Inexact Rounded -pwsx3219 power 0.122 0.5 -> 0.349 Inexact Rounded -pwsx3220 power 0.0122 0.5 -> 0.110 Inexact Rounded -pwsx3221 power 0.123 0.5 -> 0.351 Inexact Rounded -pwsx3222 power 0.0123 0.5 -> 0.111 Inexact Rounded -pwsx3223 power 0.124 0.5 -> 0.352 Inexact Rounded -pwsx3224 power 0.0124 0.5 -> 0.111 Inexact Rounded -pwsx3225 power 0.125 0.5 -> 0.354 Inexact Rounded -pwsx3226 power 0.0125 0.5 -> 0.112 Inexact Rounded -pwsx3227 power 0.126 0.5 -> 0.355 Inexact Rounded -pwsx3228 power 0.0126 0.5 -> 0.112 Inexact Rounded -pwsx3229 power 0.127 0.5 -> 0.356 Inexact Rounded -pwsx3230 power 0.0127 0.5 -> 0.113 Inexact Rounded -pwsx3231 power 0.128 0.5 -> 0.358 Inexact Rounded -pwsx3232 power 0.0128 0.5 -> 0.113 Inexact Rounded -pwsx3233 power 0.129 0.5 -> 0.359 Inexact Rounded -pwsx3234 power 0.0129 0.5 -> 0.114 Inexact Rounded -pwsx3235 power 0.131 0.5 -> 0.362 Inexact Rounded -pwsx3236 power 0.0131 0.5 -> 0.114 Inexact Rounded -pwsx3237 power 0.132 0.5 -> 0.363 Inexact Rounded -pwsx3238 power 0.0132 0.5 -> 0.115 Inexact Rounded -pwsx3239 power 0.133 0.5 -> 0.365 Inexact Rounded -pwsx3240 power 0.0133 0.5 -> 0.115 Inexact Rounded -pwsx3241 power 0.134 0.5 -> 0.366 Inexact Rounded -pwsx3242 power 0.0134 0.5 -> 0.116 Inexact Rounded -pwsx3243 power 0.135 0.5 -> 0.367 Inexact Rounded -pwsx3244 power 0.0135 0.5 -> 0.116 Inexact Rounded -pwsx3245 power 0.136 0.5 -> 0.369 Inexact Rounded -pwsx3246 power 0.0136 0.5 -> 0.117 Inexact Rounded -pwsx3247 power 0.137 0.5 -> 0.370 Inexact Rounded -pwsx3248 power 0.0137 0.5 -> 0.117 Inexact Rounded -pwsx3249 power 0.138 0.5 -> 0.371 Inexact Rounded -pwsx3250 power 0.0138 0.5 -> 0.117 Inexact Rounded -pwsx3251 power 0.139 0.5 -> 0.373 Inexact Rounded -pwsx3252 power 0.0139 0.5 -> 0.118 Inexact Rounded -pwsx3253 power 0.141 0.5 -> 0.375 Inexact Rounded -pwsx3254 power 0.0141 0.5 -> 0.119 Inexact Rounded -pwsx3255 power 0.142 0.5 -> 0.377 Inexact Rounded -pwsx3256 power 0.0142 0.5 -> 0.119 Inexact Rounded -pwsx3257 power 0.143 0.5 -> 0.378 Inexact Rounded -pwsx3258 power 0.0143 0.5 -> 0.120 Inexact Rounded -pwsx3259 power 0.144 0.5 -> 0.379 Inexact Rounded -pwsx3260 power 0.0144 0.5 -> 0.120 Inexact Rounded -pwsx3261 power 0.145 0.5 -> 0.381 Inexact Rounded -pwsx3262 power 0.0145 0.5 -> 0.120 Inexact Rounded -pwsx3263 power 0.146 0.5 -> 0.382 Inexact Rounded -pwsx3264 power 0.0146 0.5 -> 0.121 Inexact Rounded -pwsx3265 power 0.147 0.5 -> 0.383 Inexact Rounded -pwsx3266 power 0.0147 0.5 -> 0.121 Inexact Rounded -pwsx3267 power 0.148 0.5 -> 0.385 Inexact Rounded -pwsx3268 power 0.0148 0.5 -> 0.122 Inexact Rounded -pwsx3269 power 0.149 0.5 -> 0.386 Inexact Rounded -pwsx3270 power 0.0149 0.5 -> 0.122 Inexact Rounded -pwsx3271 power 0.151 0.5 -> 0.389 Inexact Rounded -pwsx3272 power 0.0151 0.5 -> 0.123 Inexact Rounded -pwsx3273 power 0.152 0.5 -> 0.390 Inexact Rounded -pwsx3274 power 0.0152 0.5 -> 0.123 Inexact Rounded -pwsx3275 power 0.153 0.5 -> 0.391 Inexact Rounded -pwsx3276 power 0.0153 0.5 -> 0.124 Inexact Rounded -pwsx3277 power 0.154 0.5 -> 0.392 Inexact Rounded -pwsx3278 power 0.0154 0.5 -> 0.124 Inexact Rounded -pwsx3279 power 0.155 0.5 -> 0.394 Inexact Rounded -pwsx3280 power 0.0155 0.5 -> 0.124 Inexact Rounded -pwsx3281 power 0.156 0.5 -> 0.395 Inexact Rounded -pwsx3282 power 0.0156 0.5 -> 0.125 Inexact Rounded -pwsx3283 power 0.157 0.5 -> 0.396 Inexact Rounded -pwsx3284 power 0.0157 0.5 -> 0.125 Inexact Rounded -pwsx3285 power 0.158 0.5 -> 0.397 Inexact Rounded -pwsx3286 power 0.0158 0.5 -> 0.126 Inexact Rounded -pwsx3287 power 0.159 0.5 -> 0.399 Inexact Rounded -pwsx3288 power 0.0159 0.5 -> 0.126 Inexact Rounded -pwsx3289 power 0.161 0.5 -> 0.401 Inexact Rounded -pwsx3290 power 0.0161 0.5 -> 0.127 Inexact Rounded -pwsx3291 power 0.162 0.5 -> 0.402 Inexact Rounded -pwsx3292 power 0.0162 0.5 -> 0.127 Inexact Rounded -pwsx3293 power 0.163 0.5 -> 0.404 Inexact Rounded -pwsx3294 power 0.0163 0.5 -> 0.128 Inexact Rounded -pwsx3295 power 0.164 0.5 -> 0.405 Inexact Rounded -pwsx3296 power 0.0164 0.5 -> 0.128 Inexact Rounded -pwsx3297 power 0.165 0.5 -> 0.406 Inexact Rounded -pwsx3298 power 0.0165 0.5 -> 0.128 Inexact Rounded -pwsx3299 power 0.166 0.5 -> 0.407 Inexact Rounded -pwsx3300 power 0.0166 0.5 -> 0.129 Inexact Rounded -pwsx3301 power 0.167 0.5 -> 0.409 Inexact Rounded -pwsx3302 power 0.0167 0.5 -> 0.129 Inexact Rounded -pwsx3303 power 0.168 0.5 -> 0.410 Inexact Rounded -pwsx3304 power 0.0168 0.5 -> 0.130 Inexact Rounded -pwsx3305 power 0.169 0.5 -> 0.411 Inexact Rounded -pwsx3306 power 0.0169 0.5 -> 0.130 Inexact Rounded -pwsx3307 power 0.171 0.5 -> 0.414 Inexact Rounded -pwsx3308 power 0.0171 0.5 -> 0.131 Inexact Rounded -pwsx3309 power 0.172 0.5 -> 0.415 Inexact Rounded -pwsx3310 power 0.0172 0.5 -> 0.131 Inexact Rounded -pwsx3311 power 0.173 0.5 -> 0.416 Inexact Rounded -pwsx3312 power 0.0173 0.5 -> 0.132 Inexact Rounded -pwsx3313 power 0.174 0.5 -> 0.417 Inexact Rounded -pwsx3314 power 0.0174 0.5 -> 0.132 Inexact Rounded -pwsx3315 power 0.175 0.5 -> 0.418 Inexact Rounded -pwsx3316 power 0.0175 0.5 -> 0.132 Inexact Rounded -pwsx3317 power 0.176 0.5 -> 0.420 Inexact Rounded -pwsx3318 power 0.0176 0.5 -> 0.133 Inexact Rounded -pwsx3319 power 0.177 0.5 -> 0.421 Inexact Rounded -pwsx3320 power 0.0177 0.5 -> 0.133 Inexact Rounded -pwsx3321 power 0.178 0.5 -> 0.422 Inexact Rounded -pwsx3322 power 0.0178 0.5 -> 0.133 Inexact Rounded -pwsx3323 power 0.179 0.5 -> 0.423 Inexact Rounded -pwsx3324 power 0.0179 0.5 -> 0.134 Inexact Rounded -pwsx3325 power 0.181 0.5 -> 0.425 Inexact Rounded -pwsx3326 power 0.0181 0.5 -> 0.135 Inexact Rounded -pwsx3327 power 0.182 0.5 -> 0.427 Inexact Rounded -pwsx3328 power 0.0182 0.5 -> 0.135 Inexact Rounded -pwsx3329 power 0.183 0.5 -> 0.428 Inexact Rounded -pwsx3330 power 0.0183 0.5 -> 0.135 Inexact Rounded -pwsx3331 power 0.184 0.5 -> 0.429 Inexact Rounded -pwsx3332 power 0.0184 0.5 -> 0.136 Inexact Rounded -pwsx3333 power 0.185 0.5 -> 0.430 Inexact Rounded -pwsx3334 power 0.0185 0.5 -> 0.136 Inexact Rounded -pwsx3335 power 0.186 0.5 -> 0.431 Inexact Rounded -pwsx3336 power 0.0186 0.5 -> 0.136 Inexact Rounded -pwsx3337 power 0.187 0.5 -> 0.432 Inexact Rounded -pwsx3338 power 0.0187 0.5 -> 0.137 Inexact Rounded -pwsx3339 power 0.188 0.5 -> 0.434 Inexact Rounded -pwsx3340 power 0.0188 0.5 -> 0.137 Inexact Rounded -pwsx3341 power 0.189 0.5 -> 0.435 Inexact Rounded -pwsx3342 power 0.0189 0.5 -> 0.137 Inexact Rounded -pwsx3343 power 0.191 0.5 -> 0.437 Inexact Rounded -pwsx3344 power 0.0191 0.5 -> 0.138 Inexact Rounded -pwsx3345 power 0.192 0.5 -> 0.438 Inexact Rounded -pwsx3346 power 0.0192 0.5 -> 0.139 Inexact Rounded -pwsx3347 power 0.193 0.5 -> 0.439 Inexact Rounded -pwsx3348 power 0.0193 0.5 -> 0.139 Inexact Rounded -pwsx3349 power 0.194 0.5 -> 0.440 Inexact Rounded -pwsx3350 power 0.0194 0.5 -> 0.139 Inexact Rounded -pwsx3351 power 0.195 0.5 -> 0.442 Inexact Rounded -pwsx3352 power 0.0195 0.5 -> 0.140 Inexact Rounded -pwsx3353 power 0.196 0.5 -> 0.443 Inexact Rounded -pwsx3354 power 0.0196 0.5 -> 0.140 Inexact Rounded -pwsx3355 power 0.197 0.5 -> 0.444 Inexact Rounded -pwsx3356 power 0.0197 0.5 -> 0.140 Inexact Rounded -pwsx3357 power 0.198 0.5 -> 0.445 Inexact Rounded -pwsx3358 power 0.0198 0.5 -> 0.141 Inexact Rounded -pwsx3359 power 0.199 0.5 -> 0.446 Inexact Rounded -pwsx3360 power 0.0199 0.5 -> 0.141 Inexact Rounded -pwsx3361 power 0.201 0.5 -> 0.448 Inexact Rounded -pwsx3362 power 0.0201 0.5 -> 0.142 Inexact Rounded -pwsx3363 power 0.202 0.5 -> 0.449 Inexact Rounded -pwsx3364 power 0.0202 0.5 -> 0.142 Inexact Rounded -pwsx3365 power 0.203 0.5 -> 0.451 Inexact Rounded -pwsx3366 power 0.0203 0.5 -> 0.142 Inexact Rounded -pwsx3367 power 0.204 0.5 -> 0.452 Inexact Rounded -pwsx3368 power 0.0204 0.5 -> 0.143 Inexact Rounded -pwsx3369 power 0.205 0.5 -> 0.453 Inexact Rounded -pwsx3370 power 0.0205 0.5 -> 0.143 Inexact Rounded -pwsx3371 power 0.206 0.5 -> 0.454 Inexact Rounded -pwsx3372 power 0.0206 0.5 -> 0.144 Inexact Rounded -pwsx3373 power 0.207 0.5 -> 0.455 Inexact Rounded -pwsx3374 power 0.0207 0.5 -> 0.144 Inexact Rounded -pwsx3375 power 0.208 0.5 -> 0.456 Inexact Rounded -pwsx3376 power 0.0208 0.5 -> 0.144 Inexact Rounded -pwsx3377 power 0.209 0.5 -> 0.457 Inexact Rounded -pwsx3378 power 0.0209 0.5 -> 0.145 Inexact Rounded -pwsx3379 power 0.211 0.5 -> 0.459 Inexact Rounded -pwsx3380 power 0.0211 0.5 -> 0.145 Inexact Rounded -pwsx3381 power 0.212 0.5 -> 0.460 Inexact Rounded -pwsx3382 power 0.0212 0.5 -> 0.146 Inexact Rounded -pwsx3383 power 0.213 0.5 -> 0.462 Inexact Rounded -pwsx3384 power 0.0213 0.5 -> 0.146 Inexact Rounded -pwsx3385 power 0.214 0.5 -> 0.463 Inexact Rounded -pwsx3386 power 0.0214 0.5 -> 0.146 Inexact Rounded -pwsx3387 power 0.215 0.5 -> 0.464 Inexact Rounded -pwsx3388 power 0.0215 0.5 -> 0.147 Inexact Rounded -pwsx3389 power 0.216 0.5 -> 0.465 Inexact Rounded -pwsx3390 power 0.0216 0.5 -> 0.147 Inexact Rounded -pwsx3391 power 0.217 0.5 -> 0.466 Inexact Rounded -pwsx3392 power 0.0217 0.5 -> 0.147 Inexact Rounded -pwsx3393 power 0.218 0.5 -> 0.467 Inexact Rounded -pwsx3394 power 0.0218 0.5 -> 0.148 Inexact Rounded -pwsx3395 power 0.219 0.5 -> 0.468 Inexact Rounded -pwsx3396 power 0.0219 0.5 -> 0.148 Inexact Rounded -pwsx3397 power 0.221 0.5 -> 0.470 Inexact Rounded -pwsx3398 power 0.0221 0.5 -> 0.149 Inexact Rounded -pwsx3399 power 0.222 0.5 -> 0.471 Inexact Rounded -pwsx3400 power 0.0222 0.5 -> 0.149 Inexact Rounded -pwsx3401 power 0.223 0.5 -> 0.472 Inexact Rounded -pwsx3402 power 0.0223 0.5 -> 0.149 Inexact Rounded -pwsx3403 power 0.224 0.5 -> 0.473 Inexact Rounded -pwsx3404 power 0.0224 0.5 -> 0.150 Inexact Rounded -pwsx3405 power 0.225 0.5 -> 0.474 Inexact Rounded -pwsx3406 power 0.0225 0.5 -> 0.150 Inexact Rounded -pwsx3407 power 0.226 0.5 -> 0.475 Inexact Rounded -pwsx3408 power 0.0226 0.5 -> 0.150 Inexact Rounded -pwsx3409 power 0.227 0.5 -> 0.476 Inexact Rounded -pwsx3410 power 0.0227 0.5 -> 0.151 Inexact Rounded -pwsx3411 power 0.228 0.5 -> 0.477 Inexact Rounded -pwsx3412 power 0.0228 0.5 -> 0.151 Inexact Rounded -pwsx3413 power 0.229 0.5 -> 0.479 Inexact Rounded -pwsx3414 power 0.0229 0.5 -> 0.151 Inexact Rounded -pwsx3415 power 0.231 0.5 -> 0.481 Inexact Rounded -pwsx3416 power 0.0231 0.5 -> 0.152 Inexact Rounded -pwsx3417 power 0.232 0.5 -> 0.482 Inexact Rounded -pwsx3418 power 0.0232 0.5 -> 0.152 Inexact Rounded -pwsx3419 power 0.233 0.5 -> 0.483 Inexact Rounded -pwsx3420 power 0.0233 0.5 -> 0.153 Inexact Rounded -pwsx3421 power 0.234 0.5 -> 0.484 Inexact Rounded -pwsx3422 power 0.0234 0.5 -> 0.153 Inexact Rounded -pwsx3423 power 0.235 0.5 -> 0.485 Inexact Rounded -pwsx3424 power 0.0235 0.5 -> 0.153 Inexact Rounded -pwsx3425 power 0.236 0.5 -> 0.486 Inexact Rounded -pwsx3426 power 0.0236 0.5 -> 0.154 Inexact Rounded -pwsx3427 power 0.237 0.5 -> 0.487 Inexact Rounded -pwsx3428 power 0.0237 0.5 -> 0.154 Inexact Rounded -pwsx3429 power 0.238 0.5 -> 0.488 Inexact Rounded -pwsx3430 power 0.0238 0.5 -> 0.154 Inexact Rounded -pwsx3431 power 0.239 0.5 -> 0.489 Inexact Rounded -pwsx3432 power 0.0239 0.5 -> 0.155 Inexact Rounded -pwsx3433 power 0.241 0.5 -> 0.491 Inexact Rounded -pwsx3434 power 0.0241 0.5 -> 0.155 Inexact Rounded -pwsx3435 power 0.242 0.5 -> 0.492 Inexact Rounded -pwsx3436 power 0.0242 0.5 -> 0.156 Inexact Rounded -pwsx3437 power 0.243 0.5 -> 0.493 Inexact Rounded -pwsx3438 power 0.0243 0.5 -> 0.156 Inexact Rounded -pwsx3439 power 0.244 0.5 -> 0.494 Inexact Rounded -pwsx3440 power 0.0244 0.5 -> 0.156 Inexact Rounded -pwsx3441 power 0.245 0.5 -> 0.495 Inexact Rounded -pwsx3442 power 0.0245 0.5 -> 0.157 Inexact Rounded -pwsx3443 power 0.246 0.5 -> 0.496 Inexact Rounded -pwsx3444 power 0.0246 0.5 -> 0.157 Inexact Rounded -pwsx3445 power 0.247 0.5 -> 0.497 Inexact Rounded -pwsx3446 power 0.0247 0.5 -> 0.157 Inexact Rounded -pwsx3447 power 0.248 0.5 -> 0.498 Inexact Rounded -pwsx3448 power 0.0248 0.5 -> 0.157 Inexact Rounded -pwsx3449 power 0.249 0.5 -> 0.499 Inexact Rounded -pwsx3450 power 0.0249 0.5 -> 0.158 Inexact Rounded -pwsx3451 power 0.251 0.5 -> 0.501 Inexact Rounded -pwsx3452 power 0.0251 0.5 -> 0.158 Inexact Rounded -pwsx3453 power 0.252 0.5 -> 0.502 Inexact Rounded -pwsx3454 power 0.0252 0.5 -> 0.159 Inexact Rounded -pwsx3455 power 0.253 0.5 -> 0.503 Inexact Rounded -pwsx3456 power 0.0253 0.5 -> 0.159 Inexact Rounded -pwsx3457 power 0.254 0.5 -> 0.504 Inexact Rounded -pwsx3458 power 0.0254 0.5 -> 0.159 Inexact Rounded -pwsx3459 power 0.255 0.5 -> 0.505 Inexact Rounded -pwsx3460 power 0.0255 0.5 -> 0.160 Inexact Rounded -pwsx3461 power 0.256 0.5 -> 0.506 Inexact Rounded -pwsx3462 power 0.0256 0.5 -> 0.160 Inexact Rounded -pwsx3463 power 0.257 0.5 -> 0.507 Inexact Rounded -pwsx3464 power 0.0257 0.5 -> 0.160 Inexact Rounded -pwsx3465 power 0.258 0.5 -> 0.508 Inexact Rounded -pwsx3466 power 0.0258 0.5 -> 0.161 Inexact Rounded -pwsx3467 power 0.259 0.5 -> 0.509 Inexact Rounded -pwsx3468 power 0.0259 0.5 -> 0.161 Inexact Rounded -pwsx3469 power 0.261 0.5 -> 0.511 Inexact Rounded -pwsx3470 power 0.0261 0.5 -> 0.162 Inexact Rounded -pwsx3471 power 0.262 0.5 -> 0.512 Inexact Rounded -pwsx3472 power 0.0262 0.5 -> 0.162 Inexact Rounded -pwsx3473 power 0.263 0.5 -> 0.513 Inexact Rounded -pwsx3474 power 0.0263 0.5 -> 0.162 Inexact Rounded -pwsx3475 power 0.264 0.5 -> 0.514 Inexact Rounded -pwsx3476 power 0.0264 0.5 -> 0.162 Inexact Rounded -pwsx3477 power 0.265 0.5 -> 0.515 Inexact Rounded -pwsx3478 power 0.0265 0.5 -> 0.163 Inexact Rounded -pwsx3479 power 0.266 0.5 -> 0.516 Inexact Rounded -pwsx3480 power 0.0266 0.5 -> 0.163 Inexact Rounded -pwsx3481 power 0.267 0.5 -> 0.517 Inexact Rounded -pwsx3482 power 0.0267 0.5 -> 0.163 Inexact Rounded -pwsx3483 power 0.268 0.5 -> 0.518 Inexact Rounded -pwsx3484 power 0.0268 0.5 -> 0.164 Inexact Rounded -pwsx3485 power 0.269 0.5 -> 0.519 Inexact Rounded -pwsx3486 power 0.0269 0.5 -> 0.164 Inexact Rounded -pwsx3487 power 0.271 0.5 -> 0.521 Inexact Rounded -pwsx3488 power 0.0271 0.5 -> 0.165 Inexact Rounded -pwsx3489 power 0.272 0.5 -> 0.522 Inexact Rounded -pwsx3490 power 0.0272 0.5 -> 0.165 Inexact Rounded -pwsx3491 power 0.273 0.5 -> 0.522 Inexact Rounded -pwsx3492 power 0.0273 0.5 -> 0.165 Inexact Rounded -pwsx3493 power 0.274 0.5 -> 0.523 Inexact Rounded -pwsx3494 power 0.0274 0.5 -> 0.166 Inexact Rounded -pwsx3495 power 0.275 0.5 -> 0.524 Inexact Rounded -pwsx3496 power 0.0275 0.5 -> 0.166 Inexact Rounded -pwsx3497 power 0.276 0.5 -> 0.525 Inexact Rounded -pwsx3498 power 0.0276 0.5 -> 0.166 Inexact Rounded -pwsx3499 power 0.277 0.5 -> 0.526 Inexact Rounded -pwsx3500 power 0.0277 0.5 -> 0.166 Inexact Rounded -pwsx3501 power 0.278 0.5 -> 0.527 Inexact Rounded -pwsx3502 power 0.0278 0.5 -> 0.167 Inexact Rounded -pwsx3503 power 0.279 0.5 -> 0.528 Inexact Rounded -pwsx3504 power 0.0279 0.5 -> 0.167 Inexact Rounded -pwsx3505 power 0.281 0.5 -> 0.530 Inexact Rounded -pwsx3506 power 0.0281 0.5 -> 0.168 Inexact Rounded -pwsx3507 power 0.282 0.5 -> 0.531 Inexact Rounded -pwsx3508 power 0.0282 0.5 -> 0.168 Inexact Rounded -pwsx3509 power 0.283 0.5 -> 0.532 Inexact Rounded -pwsx3510 power 0.0283 0.5 -> 0.168 Inexact Rounded -pwsx3511 power 0.284 0.5 -> 0.533 Inexact Rounded -pwsx3512 power 0.0284 0.5 -> 0.169 Inexact Rounded -pwsx3513 power 0.285 0.5 -> 0.534 Inexact Rounded -pwsx3514 power 0.0285 0.5 -> 0.169 Inexact Rounded -pwsx3515 power 0.286 0.5 -> 0.535 Inexact Rounded -pwsx3516 power 0.0286 0.5 -> 0.169 Inexact Rounded -pwsx3517 power 0.287 0.5 -> 0.536 Inexact Rounded -pwsx3518 power 0.0287 0.5 -> 0.169 Inexact Rounded -pwsx3519 power 0.288 0.5 -> 0.537 Inexact Rounded -pwsx3520 power 0.0288 0.5 -> 0.170 Inexact Rounded -pwsx3521 power 0.289 0.5 -> 0.538 Inexact Rounded -pwsx3522 power 0.0289 0.5 -> 0.170 Inexact Rounded -pwsx3523 power 0.291 0.5 -> 0.539 Inexact Rounded -pwsx3524 power 0.0291 0.5 -> 0.171 Inexact Rounded -pwsx3525 power 0.292 0.5 -> 0.540 Inexact Rounded -pwsx3526 power 0.0292 0.5 -> 0.171 Inexact Rounded -pwsx3527 power 0.293 0.5 -> 0.541 Inexact Rounded -pwsx3528 power 0.0293 0.5 -> 0.171 Inexact Rounded -pwsx3529 power 0.294 0.5 -> 0.542 Inexact Rounded -pwsx3530 power 0.0294 0.5 -> 0.171 Inexact Rounded -pwsx3531 power 0.295 0.5 -> 0.543 Inexact Rounded -pwsx3532 power 0.0295 0.5 -> 0.172 Inexact Rounded -pwsx3533 power 0.296 0.5 -> 0.544 Inexact Rounded -pwsx3534 power 0.0296 0.5 -> 0.172 Inexact Rounded -pwsx3535 power 0.297 0.5 -> 0.545 Inexact Rounded -pwsx3536 power 0.0297 0.5 -> 0.172 Inexact Rounded -pwsx3537 power 0.298 0.5 -> 0.546 Inexact Rounded -pwsx3538 power 0.0298 0.5 -> 0.173 Inexact Rounded -pwsx3539 power 0.299 0.5 -> 0.547 Inexact Rounded -pwsx3540 power 0.0299 0.5 -> 0.173 Inexact Rounded -pwsx3541 power 0.301 0.5 -> 0.549 Inexact Rounded -pwsx3542 power 0.0301 0.5 -> 0.173 Inexact Rounded -pwsx3543 power 0.302 0.5 -> 0.550 Inexact Rounded -pwsx3544 power 0.0302 0.5 -> 0.174 Inexact Rounded -pwsx3545 power 0.303 0.5 -> 0.550 Inexact Rounded -pwsx3546 power 0.0303 0.5 -> 0.174 Inexact Rounded -pwsx3547 power 0.304 0.5 -> 0.551 Inexact Rounded -pwsx3548 power 0.0304 0.5 -> 0.174 Inexact Rounded -pwsx3549 power 0.305 0.5 -> 0.552 Inexact Rounded -pwsx3550 power 0.0305 0.5 -> 0.175 Inexact Rounded -pwsx3551 power 0.306 0.5 -> 0.553 Inexact Rounded -pwsx3552 power 0.0306 0.5 -> 0.175 Inexact Rounded -pwsx3553 power 0.307 0.5 -> 0.554 Inexact Rounded -pwsx3554 power 0.0307 0.5 -> 0.175 Inexact Rounded -pwsx3555 power 0.308 0.5 -> 0.555 Inexact Rounded -pwsx3556 power 0.0308 0.5 -> 0.175 Inexact Rounded -pwsx3557 power 0.309 0.5 -> 0.556 Inexact Rounded -pwsx3558 power 0.0309 0.5 -> 0.176 Inexact Rounded -pwsx3559 power 0.311 0.5 -> 0.558 Inexact Rounded -pwsx3560 power 0.0311 0.5 -> 0.176 Inexact Rounded -pwsx3561 power 0.312 0.5 -> 0.559 Inexact Rounded -pwsx3562 power 0.0312 0.5 -> 0.177 Inexact Rounded -pwsx3563 power 0.313 0.5 -> 0.559 Inexact Rounded -pwsx3564 power 0.0313 0.5 -> 0.177 Inexact Rounded -pwsx3565 power 0.314 0.5 -> 0.560 Inexact Rounded -pwsx3566 power 0.0314 0.5 -> 0.177 Inexact Rounded -pwsx3567 power 0.315 0.5 -> 0.561 Inexact Rounded -pwsx3568 power 0.0315 0.5 -> 0.177 Inexact Rounded -pwsx3569 power 0.316 0.5 -> 0.562 Inexact Rounded -pwsx3570 power 0.0316 0.5 -> 0.178 Inexact Rounded -pwsx3571 power 0.317 0.5 -> 0.563 Inexact Rounded -pwsx3572 power 0.0317 0.5 -> 0.178 Inexact Rounded -pwsx3573 power 0.318 0.5 -> 0.564 Inexact Rounded -pwsx3574 power 0.0318 0.5 -> 0.178 Inexact Rounded -pwsx3575 power 0.319 0.5 -> 0.565 Inexact Rounded -pwsx3576 power 0.0319 0.5 -> 0.179 Inexact Rounded -pwsx3577 power 0.321 0.5 -> 0.567 Inexact Rounded -pwsx3578 power 0.0321 0.5 -> 0.179 Inexact Rounded -pwsx3579 power 0.322 0.5 -> 0.567 Inexact Rounded -pwsx3580 power 0.0322 0.5 -> 0.179 Inexact Rounded -pwsx3581 power 0.323 0.5 -> 0.568 Inexact Rounded -pwsx3582 power 0.0323 0.5 -> 0.180 Inexact Rounded -pwsx3583 power 0.324 0.5 -> 0.569 Inexact Rounded -pwsx3584 power 0.0324 0.5 -> 0.180 Inexact Rounded -pwsx3585 power 0.325 0.5 -> 0.570 Inexact Rounded -pwsx3586 power 0.0325 0.5 -> 0.180 Inexact Rounded -pwsx3587 power 0.326 0.5 -> 0.571 Inexact Rounded -pwsx3588 power 0.0326 0.5 -> 0.181 Inexact Rounded -pwsx3589 power 0.327 0.5 -> 0.572 Inexact Rounded -pwsx3590 power 0.0327 0.5 -> 0.181 Inexact Rounded -pwsx3591 power 0.328 0.5 -> 0.573 Inexact Rounded -pwsx3592 power 0.0328 0.5 -> 0.181 Inexact Rounded -pwsx3593 power 0.329 0.5 -> 0.574 Inexact Rounded -pwsx3594 power 0.0329 0.5 -> 0.181 Inexact Rounded -pwsx3595 power 0.331 0.5 -> 0.575 Inexact Rounded -pwsx3596 power 0.0331 0.5 -> 0.182 Inexact Rounded -pwsx3597 power 0.332 0.5 -> 0.576 Inexact Rounded -pwsx3598 power 0.0332 0.5 -> 0.182 Inexact Rounded -pwsx3599 power 0.333 0.5 -> 0.577 Inexact Rounded -pwsx3600 power 0.0333 0.5 -> 0.182 Inexact Rounded -pwsx3601 power 0.334 0.5 -> 0.578 Inexact Rounded -pwsx3602 power 0.0334 0.5 -> 0.183 Inexact Rounded -pwsx3603 power 0.335 0.5 -> 0.579 Inexact Rounded -pwsx3604 power 0.0335 0.5 -> 0.183 Inexact Rounded -pwsx3605 power 0.336 0.5 -> 0.580 Inexact Rounded -pwsx3606 power 0.0336 0.5 -> 0.183 Inexact Rounded -pwsx3607 power 0.337 0.5 -> 0.581 Inexact Rounded -pwsx3608 power 0.0337 0.5 -> 0.184 Inexact Rounded -pwsx3609 power 0.338 0.5 -> 0.581 Inexact Rounded -pwsx3610 power 0.0338 0.5 -> 0.184 Inexact Rounded -pwsx3611 power 0.339 0.5 -> 0.582 Inexact Rounded -pwsx3612 power 0.0339 0.5 -> 0.184 Inexact Rounded -pwsx3613 power 0.341 0.5 -> 0.584 Inexact Rounded -pwsx3614 power 0.0341 0.5 -> 0.185 Inexact Rounded -pwsx3615 power 0.342 0.5 -> 0.585 Inexact Rounded -pwsx3616 power 0.0342 0.5 -> 0.185 Inexact Rounded -pwsx3617 power 0.343 0.5 -> 0.586 Inexact Rounded -pwsx3618 power 0.0343 0.5 -> 0.185 Inexact Rounded -pwsx3619 power 0.344 0.5 -> 0.587 Inexact Rounded -pwsx3620 power 0.0344 0.5 -> 0.185 Inexact Rounded -pwsx3621 power 0.345 0.5 -> 0.587 Inexact Rounded -pwsx3622 power 0.0345 0.5 -> 0.186 Inexact Rounded -pwsx3623 power 0.346 0.5 -> 0.588 Inexact Rounded -pwsx3624 power 0.0346 0.5 -> 0.186 Inexact Rounded -pwsx3625 power 0.347 0.5 -> 0.589 Inexact Rounded -pwsx3626 power 0.0347 0.5 -> 0.186 Inexact Rounded -pwsx3627 power 0.348 0.5 -> 0.590 Inexact Rounded -pwsx3628 power 0.0348 0.5 -> 0.187 Inexact Rounded -pwsx3629 power 0.349 0.5 -> 0.591 Inexact Rounded -pwsx3630 power 0.0349 0.5 -> 0.187 Inexact Rounded -pwsx3631 power 0.351 0.5 -> 0.592 Inexact Rounded -pwsx3632 power 0.0351 0.5 -> 0.187 Inexact Rounded -pwsx3633 power 0.352 0.5 -> 0.593 Inexact Rounded -pwsx3634 power 0.0352 0.5 -> 0.188 Inexact Rounded -pwsx3635 power 0.353 0.5 -> 0.594 Inexact Rounded -pwsx3636 power 0.0353 0.5 -> 0.188 Inexact Rounded -pwsx3637 power 0.354 0.5 -> 0.595 Inexact Rounded -pwsx3638 power 0.0354 0.5 -> 0.188 Inexact Rounded -pwsx3639 power 0.355 0.5 -> 0.596 Inexact Rounded -pwsx3640 power 0.0355 0.5 -> 0.188 Inexact Rounded -pwsx3641 power 0.356 0.5 -> 0.597 Inexact Rounded -pwsx3642 power 0.0356 0.5 -> 0.189 Inexact Rounded -pwsx3643 power 0.357 0.5 -> 0.597 Inexact Rounded -pwsx3644 power 0.0357 0.5 -> 0.189 Inexact Rounded -pwsx3645 power 0.358 0.5 -> 0.598 Inexact Rounded -pwsx3646 power 0.0358 0.5 -> 0.189 Inexact Rounded -pwsx3647 power 0.359 0.5 -> 0.599 Inexact Rounded -pwsx3648 power 0.0359 0.5 -> 0.189 Inexact Rounded -pwsx3649 power 0.361 0.5 -> 0.601 Inexact Rounded -pwsx3650 power 0.0361 0.5 -> 0.190 Inexact Rounded -pwsx3651 power 0.362 0.5 -> 0.602 Inexact Rounded -pwsx3652 power 0.0362 0.5 -> 0.190 Inexact Rounded -pwsx3653 power 0.363 0.5 -> 0.602 Inexact Rounded -pwsx3654 power 0.0363 0.5 -> 0.191 Inexact Rounded -pwsx3655 power 0.364 0.5 -> 0.603 Inexact Rounded -pwsx3656 power 0.0364 0.5 -> 0.191 Inexact Rounded -pwsx3657 power 0.365 0.5 -> 0.604 Inexact Rounded -pwsx3658 power 0.0365 0.5 -> 0.191 Inexact Rounded -pwsx3659 power 0.366 0.5 -> 0.605 Inexact Rounded -pwsx3660 power 0.0366 0.5 -> 0.191 Inexact Rounded -pwsx3661 power 0.367 0.5 -> 0.606 Inexact Rounded -pwsx3662 power 0.0367 0.5 -> 0.192 Inexact Rounded -pwsx3663 power 0.368 0.5 -> 0.607 Inexact Rounded -pwsx3664 power 0.0368 0.5 -> 0.192 Inexact Rounded -pwsx3665 power 0.369 0.5 -> 0.607 Inexact Rounded -pwsx3666 power 0.0369 0.5 -> 0.192 Inexact Rounded -pwsx3667 power 0.371 0.5 -> 0.609 Inexact Rounded -pwsx3668 power 0.0371 0.5 -> 0.193 Inexact Rounded -pwsx3669 power 0.372 0.5 -> 0.610 Inexact Rounded -pwsx3670 power 0.0372 0.5 -> 0.193 Inexact Rounded -pwsx3671 power 0.373 0.5 -> 0.611 Inexact Rounded -pwsx3672 power 0.0373 0.5 -> 0.193 Inexact Rounded -pwsx3673 power 0.374 0.5 -> 0.612 Inexact Rounded -pwsx3674 power 0.0374 0.5 -> 0.193 Inexact Rounded -pwsx3675 power 0.375 0.5 -> 0.612 Inexact Rounded -pwsx3676 power 0.0375 0.5 -> 0.194 Inexact Rounded -pwsx3677 power 0.376 0.5 -> 0.613 Inexact Rounded -pwsx3678 power 0.0376 0.5 -> 0.194 Inexact Rounded -pwsx3679 power 0.377 0.5 -> 0.614 Inexact Rounded -pwsx3680 power 0.0377 0.5 -> 0.194 Inexact Rounded -pwsx3681 power 0.378 0.5 -> 0.615 Inexact Rounded -pwsx3682 power 0.0378 0.5 -> 0.194 Inexact Rounded -pwsx3683 power 0.379 0.5 -> 0.616 Inexact Rounded -pwsx3684 power 0.0379 0.5 -> 0.195 Inexact Rounded -pwsx3685 power 0.381 0.5 -> 0.617 Inexact Rounded -pwsx3686 power 0.0381 0.5 -> 0.195 Inexact Rounded -pwsx3687 power 0.382 0.5 -> 0.618 Inexact Rounded -pwsx3688 power 0.0382 0.5 -> 0.195 Inexact Rounded -pwsx3689 power 0.383 0.5 -> 0.619 Inexact Rounded -pwsx3690 power 0.0383 0.5 -> 0.196 Inexact Rounded -pwsx3691 power 0.384 0.5 -> 0.620 Inexact Rounded -pwsx3692 power 0.0384 0.5 -> 0.196 Inexact Rounded -pwsx3693 power 0.385 0.5 -> 0.620 Inexact Rounded -pwsx3694 power 0.0385 0.5 -> 0.196 Inexact Rounded -pwsx3695 power 0.386 0.5 -> 0.621 Inexact Rounded -pwsx3696 power 0.0386 0.5 -> 0.196 Inexact Rounded -pwsx3697 power 0.387 0.5 -> 0.622 Inexact Rounded -pwsx3698 power 0.0387 0.5 -> 0.197 Inexact Rounded -pwsx3699 power 0.388 0.5 -> 0.623 Inexact Rounded -pwsx3700 power 0.0388 0.5 -> 0.197 Inexact Rounded -pwsx3701 power 0.389 0.5 -> 0.624 Inexact Rounded -pwsx3702 power 0.0389 0.5 -> 0.197 Inexact Rounded -pwsx3703 power 0.391 0.5 -> 0.625 Inexact Rounded -pwsx3704 power 0.0391 0.5 -> 0.198 Inexact Rounded -pwsx3705 power 0.392 0.5 -> 0.626 Inexact Rounded -pwsx3706 power 0.0392 0.5 -> 0.198 Inexact Rounded -pwsx3707 power 0.393 0.5 -> 0.627 Inexact Rounded -pwsx3708 power 0.0393 0.5 -> 0.198 Inexact Rounded -pwsx3709 power 0.394 0.5 -> 0.628 Inexact Rounded -pwsx3710 power 0.0394 0.5 -> 0.198 Inexact Rounded -pwsx3711 power 0.395 0.5 -> 0.628 Inexact Rounded -pwsx3712 power 0.0395 0.5 -> 0.199 Inexact Rounded -pwsx3713 power 0.396 0.5 -> 0.629 Inexact Rounded -pwsx3714 power 0.0396 0.5 -> 0.199 Inexact Rounded -pwsx3715 power 0.397 0.5 -> 0.630 Inexact Rounded -pwsx3716 power 0.0397 0.5 -> 0.199 Inexact Rounded -pwsx3717 power 0.398 0.5 -> 0.631 Inexact Rounded -pwsx3718 power 0.0398 0.5 -> 0.199 Inexact Rounded -pwsx3719 power 0.399 0.5 -> 0.632 Inexact Rounded -pwsx3720 power 0.0399 0.5 -> 0.200 Inexact Rounded -pwsx3721 power 0.401 0.5 -> 0.633 Inexact Rounded -pwsx3722 power 0.0401 0.5 -> 0.200 Inexact Rounded -pwsx3723 power 0.402 0.5 -> 0.634 Inexact Rounded -pwsx3724 power 0.0402 0.5 -> 0.200 Inexact Rounded -pwsx3725 power 0.403 0.5 -> 0.635 Inexact Rounded -pwsx3726 power 0.0403 0.5 -> 0.201 Inexact Rounded -pwsx3727 power 0.404 0.5 -> 0.636 Inexact Rounded -pwsx3728 power 0.0404 0.5 -> 0.201 Inexact Rounded -pwsx3729 power 0.405 0.5 -> 0.636 Inexact Rounded -pwsx3730 power 0.0405 0.5 -> 0.201 Inexact Rounded -pwsx3731 power 0.406 0.5 -> 0.637 Inexact Rounded -pwsx3732 power 0.0406 0.5 -> 0.201 Inexact Rounded -pwsx3733 power 0.407 0.5 -> 0.638 Inexact Rounded -pwsx3734 power 0.0407 0.5 -> 0.202 Inexact Rounded -pwsx3735 power 0.408 0.5 -> 0.639 Inexact Rounded -pwsx3736 power 0.0408 0.5 -> 0.202 Inexact Rounded -pwsx3737 power 0.409 0.5 -> 0.640 Inexact Rounded -pwsx3738 power 0.0409 0.5 -> 0.202 Inexact Rounded -pwsx3739 power 0.411 0.5 -> 0.641 Inexact Rounded -pwsx3740 power 0.0411 0.5 -> 0.203 Inexact Rounded -pwsx3741 power 0.412 0.5 -> 0.642 Inexact Rounded -pwsx3742 power 0.0412 0.5 -> 0.203 Inexact Rounded -pwsx3743 power 0.413 0.5 -> 0.643 Inexact Rounded -pwsx3744 power 0.0413 0.5 -> 0.203 Inexact Rounded -pwsx3745 power 0.414 0.5 -> 0.643 Inexact Rounded -pwsx3746 power 0.0414 0.5 -> 0.203 Inexact Rounded -pwsx3747 power 0.415 0.5 -> 0.644 Inexact Rounded -pwsx3748 power 0.0415 0.5 -> 0.204 Inexact Rounded -pwsx3749 power 0.416 0.5 -> 0.645 Inexact Rounded -pwsx3750 power 0.0416 0.5 -> 0.204 Inexact Rounded -pwsx3751 power 0.417 0.5 -> 0.646 Inexact Rounded -pwsx3752 power 0.0417 0.5 -> 0.204 Inexact Rounded -pwsx3753 power 0.418 0.5 -> 0.647 Inexact Rounded -pwsx3754 power 0.0418 0.5 -> 0.204 Inexact Rounded -pwsx3755 power 0.419 0.5 -> 0.647 Inexact Rounded -pwsx3756 power 0.0419 0.5 -> 0.205 Inexact Rounded -pwsx3757 power 0.421 0.5 -> 0.649 Inexact Rounded -pwsx3758 power 0.0421 0.5 -> 0.205 Inexact Rounded -pwsx3759 power 0.422 0.5 -> 0.650 Inexact Rounded -pwsx3760 power 0.0422 0.5 -> 0.205 Inexact Rounded -pwsx3761 power 0.423 0.5 -> 0.650 Inexact Rounded -pwsx3762 power 0.0423 0.5 -> 0.206 Inexact Rounded -pwsx3763 power 0.424 0.5 -> 0.651 Inexact Rounded -pwsx3764 power 0.0424 0.5 -> 0.206 Inexact Rounded -pwsx3765 power 0.425 0.5 -> 0.652 Inexact Rounded -pwsx3766 power 0.0425 0.5 -> 0.206 Inexact Rounded -pwsx3767 power 0.426 0.5 -> 0.653 Inexact Rounded -pwsx3768 power 0.0426 0.5 -> 0.206 Inexact Rounded -pwsx3769 power 0.427 0.5 -> 0.653 Inexact Rounded -pwsx3770 power 0.0427 0.5 -> 0.207 Inexact Rounded -pwsx3771 power 0.428 0.5 -> 0.654 Inexact Rounded -pwsx3772 power 0.0428 0.5 -> 0.207 Inexact Rounded -pwsx3773 power 0.429 0.5 -> 0.655 Inexact Rounded -pwsx3774 power 0.0429 0.5 -> 0.207 Inexact Rounded -pwsx3775 power 0.431 0.5 -> 0.657 Inexact Rounded -pwsx3776 power 0.0431 0.5 -> 0.208 Inexact Rounded -pwsx3777 power 0.432 0.5 -> 0.657 Inexact Rounded -pwsx3778 power 0.0432 0.5 -> 0.208 Inexact Rounded -pwsx3779 power 0.433 0.5 -> 0.658 Inexact Rounded -pwsx3780 power 0.0433 0.5 -> 0.208 Inexact Rounded -pwsx3781 power 0.434 0.5 -> 0.659 Inexact Rounded -pwsx3782 power 0.0434 0.5 -> 0.208 Inexact Rounded -pwsx3783 power 0.435 0.5 -> 0.660 Inexact Rounded -pwsx3784 power 0.0435 0.5 -> 0.209 Inexact Rounded -pwsx3785 power 0.436 0.5 -> 0.660 Inexact Rounded -pwsx3786 power 0.0436 0.5 -> 0.209 Inexact Rounded -pwsx3787 power 0.437 0.5 -> 0.661 Inexact Rounded -pwsx3788 power 0.0437 0.5 -> 0.209 Inexact Rounded -pwsx3789 power 0.438 0.5 -> 0.662 Inexact Rounded -pwsx3790 power 0.0438 0.5 -> 0.209 Inexact Rounded -pwsx3791 power 0.439 0.5 -> 0.663 Inexact Rounded -pwsx3792 power 0.0439 0.5 -> 0.210 Inexact Rounded -pwsx3793 power 0.441 0.5 -> 0.664 Inexact Rounded -pwsx3794 power 0.0441 0.5 -> 0.210 Inexact Rounded -pwsx3795 power 0.442 0.5 -> 0.665 Inexact Rounded -pwsx3796 power 0.0442 0.5 -> 0.210 Inexact Rounded -pwsx3797 power 0.443 0.5 -> 0.666 Inexact Rounded -pwsx3798 power 0.0443 0.5 -> 0.210 Inexact Rounded -pwsx3799 power 0.444 0.5 -> 0.666 Inexact Rounded -pwsx3800 power 0.0444 0.5 -> 0.211 Inexact Rounded -pwsx3801 power 0.445 0.5 -> 0.667 Inexact Rounded -pwsx3802 power 0.0445 0.5 -> 0.211 Inexact Rounded -pwsx3803 power 0.446 0.5 -> 0.668 Inexact Rounded -pwsx3804 power 0.0446 0.5 -> 0.211 Inexact Rounded -pwsx3805 power 0.447 0.5 -> 0.669 Inexact Rounded -pwsx3806 power 0.0447 0.5 -> 0.211 Inexact Rounded -pwsx3807 power 0.448 0.5 -> 0.669 Inexact Rounded -pwsx3808 power 0.0448 0.5 -> 0.212 Inexact Rounded -pwsx3809 power 0.449 0.5 -> 0.670 Inexact Rounded -pwsx3810 power 0.0449 0.5 -> 0.212 Inexact Rounded -pwsx3811 power 0.451 0.5 -> 0.672 Inexact Rounded -pwsx3812 power 0.0451 0.5 -> 0.212 Inexact Rounded -pwsx3813 power 0.452 0.5 -> 0.672 Inexact Rounded -pwsx3814 power 0.0452 0.5 -> 0.213 Inexact Rounded -pwsx3815 power 0.453 0.5 -> 0.673 Inexact Rounded -pwsx3816 power 0.0453 0.5 -> 0.213 Inexact Rounded -pwsx3817 power 0.454 0.5 -> 0.674 Inexact Rounded -pwsx3818 power 0.0454 0.5 -> 0.213 Inexact Rounded -pwsx3819 power 0.455 0.5 -> 0.675 Inexact Rounded -pwsx3820 power 0.0455 0.5 -> 0.213 Inexact Rounded -pwsx3821 power 0.456 0.5 -> 0.675 Inexact Rounded -pwsx3822 power 0.0456 0.5 -> 0.214 Inexact Rounded -pwsx3823 power 0.457 0.5 -> 0.676 Inexact Rounded -pwsx3824 power 0.0457 0.5 -> 0.214 Inexact Rounded -pwsx3825 power 0.458 0.5 -> 0.677 Inexact Rounded -pwsx3826 power 0.0458 0.5 -> 0.214 Inexact Rounded -pwsx3827 power 0.459 0.5 -> 0.677 Inexact Rounded -pwsx3828 power 0.0459 0.5 -> 0.214 Inexact Rounded -pwsx3829 power 0.461 0.5 -> 0.679 Inexact Rounded -pwsx3830 power 0.0461 0.5 -> 0.215 Inexact Rounded -pwsx3831 power 0.462 0.5 -> 0.680 Inexact Rounded -pwsx3832 power 0.0462 0.5 -> 0.215 Inexact Rounded -pwsx3833 power 0.463 0.5 -> 0.680 Inexact Rounded -pwsx3834 power 0.0463 0.5 -> 0.215 Inexact Rounded -pwsx3835 power 0.464 0.5 -> 0.681 Inexact Rounded -pwsx3836 power 0.0464 0.5 -> 0.215 Inexact Rounded -pwsx3837 power 0.465 0.5 -> 0.682 Inexact Rounded -pwsx3838 power 0.0465 0.5 -> 0.216 Inexact Rounded -pwsx3839 power 0.466 0.5 -> 0.683 Inexact Rounded -pwsx3840 power 0.0466 0.5 -> 0.216 Inexact Rounded -pwsx3841 power 0.467 0.5 -> 0.683 Inexact Rounded -pwsx3842 power 0.0467 0.5 -> 0.216 Inexact Rounded -pwsx3843 power 0.468 0.5 -> 0.684 Inexact Rounded -pwsx3844 power 0.0468 0.5 -> 0.216 Inexact Rounded -pwsx3845 power 0.469 0.5 -> 0.685 Inexact Rounded -pwsx3846 power 0.0469 0.5 -> 0.217 Inexact Rounded -pwsx3847 power 0.471 0.5 -> 0.686 Inexact Rounded -pwsx3848 power 0.0471 0.5 -> 0.217 Inexact Rounded -pwsx3849 power 0.472 0.5 -> 0.687 Inexact Rounded -pwsx3850 power 0.0472 0.5 -> 0.217 Inexact Rounded -pwsx3851 power 0.473 0.5 -> 0.688 Inexact Rounded -pwsx3852 power 0.0473 0.5 -> 0.217 Inexact Rounded -pwsx3853 power 0.474 0.5 -> 0.688 Inexact Rounded -pwsx3854 power 0.0474 0.5 -> 0.218 Inexact Rounded -pwsx3855 power 0.475 0.5 -> 0.689 Inexact Rounded -pwsx3856 power 0.0475 0.5 -> 0.218 Inexact Rounded -pwsx3857 power 0.476 0.5 -> 0.690 Inexact Rounded -pwsx3858 power 0.0476 0.5 -> 0.218 Inexact Rounded -pwsx3859 power 0.477 0.5 -> 0.691 Inexact Rounded -pwsx3860 power 0.0477 0.5 -> 0.218 Inexact Rounded -pwsx3861 power 0.478 0.5 -> 0.691 Inexact Rounded -pwsx3862 power 0.0478 0.5 -> 0.219 Inexact Rounded -pwsx3863 power 0.479 0.5 -> 0.692 Inexact Rounded -pwsx3864 power 0.0479 0.5 -> 0.219 Inexact Rounded -pwsx3865 power 0.481 0.5 -> 0.694 Inexact Rounded -pwsx3866 power 0.0481 0.5 -> 0.219 Inexact Rounded -pwsx3867 power 0.482 0.5 -> 0.694 Inexact Rounded -pwsx3868 power 0.0482 0.5 -> 0.220 Inexact Rounded -pwsx3869 power 0.483 0.5 -> 0.695 Inexact Rounded -pwsx3870 power 0.0483 0.5 -> 0.220 Inexact Rounded -pwsx3871 power 0.484 0.5 -> 0.696 Inexact Rounded -pwsx3872 power 0.0484 0.5 -> 0.220 Inexact Rounded -pwsx3873 power 0.485 0.5 -> 0.696 Inexact Rounded -pwsx3874 power 0.0485 0.5 -> 0.220 Inexact Rounded -pwsx3875 power 0.486 0.5 -> 0.697 Inexact Rounded -pwsx3876 power 0.0486 0.5 -> 0.220 Inexact Rounded -pwsx3877 power 0.487 0.5 -> 0.698 Inexact Rounded -pwsx3878 power 0.0487 0.5 -> 0.221 Inexact Rounded -pwsx3879 power 0.488 0.5 -> 0.699 Inexact Rounded -pwsx3880 power 0.0488 0.5 -> 0.221 Inexact Rounded -pwsx3881 power 0.489 0.5 -> 0.699 Inexact Rounded -pwsx3882 power 0.0489 0.5 -> 0.221 Inexact Rounded -pwsx3883 power 0.491 0.5 -> 0.701 Inexact Rounded -pwsx3884 power 0.0491 0.5 -> 0.222 Inexact Rounded -pwsx3885 power 0.492 0.5 -> 0.701 Inexact Rounded -pwsx3886 power 0.0492 0.5 -> 0.222 Inexact Rounded -pwsx3887 power 0.493 0.5 -> 0.702 Inexact Rounded -pwsx3888 power 0.0493 0.5 -> 0.222 Inexact Rounded -pwsx3889 power 0.494 0.5 -> 0.703 Inexact Rounded -pwsx3890 power 0.0494 0.5 -> 0.222 Inexact Rounded -pwsx3891 power 0.495 0.5 -> 0.704 Inexact Rounded -pwsx3892 power 0.0495 0.5 -> 0.222 Inexact Rounded -pwsx3893 power 0.496 0.5 -> 0.704 Inexact Rounded -pwsx3894 power 0.0496 0.5 -> 0.223 Inexact Rounded -pwsx3895 power 0.497 0.5 -> 0.705 Inexact Rounded -pwsx3896 power 0.0497 0.5 -> 0.223 Inexact Rounded -pwsx3897 power 0.498 0.5 -> 0.706 Inexact Rounded -pwsx3898 power 0.0498 0.5 -> 0.223 Inexact Rounded -pwsx3899 power 0.499 0.5 -> 0.706 Inexact Rounded -pwsx3900 power 0.0499 0.5 -> 0.223 Inexact Rounded -pwsx3901 power 0.501 0.5 -> 0.708 Inexact Rounded -pwsx3902 power 0.0501 0.5 -> 0.224 Inexact Rounded -pwsx3903 power 0.502 0.5 -> 0.709 Inexact Rounded -pwsx3904 power 0.0502 0.5 -> 0.224 Inexact Rounded -pwsx3905 power 0.503 0.5 -> 0.709 Inexact Rounded -pwsx3906 power 0.0503 0.5 -> 0.224 Inexact Rounded -pwsx3907 power 0.504 0.5 -> 0.710 Inexact Rounded -pwsx3908 power 0.0504 0.5 -> 0.224 Inexact Rounded -pwsx3909 power 0.505 0.5 -> 0.711 Inexact Rounded -pwsx3910 power 0.0505 0.5 -> 0.225 Inexact Rounded -pwsx3911 power 0.506 0.5 -> 0.711 Inexact Rounded -pwsx3912 power 0.0506 0.5 -> 0.225 Inexact Rounded -pwsx3913 power 0.507 0.5 -> 0.712 Inexact Rounded -pwsx3914 power 0.0507 0.5 -> 0.225 Inexact Rounded -pwsx3915 power 0.508 0.5 -> 0.713 Inexact Rounded -pwsx3916 power 0.0508 0.5 -> 0.225 Inexact Rounded -pwsx3917 power 0.509 0.5 -> 0.713 Inexact Rounded -pwsx3918 power 0.0509 0.5 -> 0.226 Inexact Rounded -pwsx3919 power 0.511 0.5 -> 0.715 Inexact Rounded -pwsx3920 power 0.0511 0.5 -> 0.226 Inexact Rounded -pwsx3921 power 0.512 0.5 -> 0.716 Inexact Rounded -pwsx3922 power 0.0512 0.5 -> 0.226 Inexact Rounded -pwsx3923 power 0.513 0.5 -> 0.716 Inexact Rounded -pwsx3924 power 0.0513 0.5 -> 0.226 Inexact Rounded -pwsx3925 power 0.514 0.5 -> 0.717 Inexact Rounded -pwsx3926 power 0.0514 0.5 -> 0.227 Inexact Rounded -pwsx3927 power 0.515 0.5 -> 0.718 Inexact Rounded -pwsx3928 power 0.0515 0.5 -> 0.227 Inexact Rounded -pwsx3929 power 0.516 0.5 -> 0.718 Inexact Rounded -pwsx3930 power 0.0516 0.5 -> 0.227 Inexact Rounded -pwsx3931 power 0.517 0.5 -> 0.719 Inexact Rounded -pwsx3932 power 0.0517 0.5 -> 0.227 Inexact Rounded -pwsx3933 power 0.518 0.5 -> 0.720 Inexact Rounded -pwsx3934 power 0.0518 0.5 -> 0.228 Inexact Rounded -pwsx3935 power 0.519 0.5 -> 0.720 Inexact Rounded -pwsx3936 power 0.0519 0.5 -> 0.228 Inexact Rounded -pwsx3937 power 0.521 0.5 -> 0.722 Inexact Rounded -pwsx3938 power 0.0521 0.5 -> 0.228 Inexact Rounded -pwsx3939 power 0.522 0.5 -> 0.722 Inexact Rounded -pwsx3940 power 0.0522 0.5 -> 0.228 Inexact Rounded -pwsx3941 power 0.523 0.5 -> 0.723 Inexact Rounded -pwsx3942 power 0.0523 0.5 -> 0.229 Inexact Rounded -pwsx3943 power 0.524 0.5 -> 0.724 Inexact Rounded -pwsx3944 power 0.0524 0.5 -> 0.229 Inexact Rounded -pwsx3945 power 0.525 0.5 -> 0.725 Inexact Rounded -pwsx3946 power 0.0525 0.5 -> 0.229 Inexact Rounded -pwsx3947 power 0.526 0.5 -> 0.725 Inexact Rounded -pwsx3948 power 0.0526 0.5 -> 0.229 Inexact Rounded -pwsx3949 power 0.527 0.5 -> 0.726 Inexact Rounded -pwsx3950 power 0.0527 0.5 -> 0.230 Inexact Rounded -pwsx3951 power 0.528 0.5 -> 0.727 Inexact Rounded -pwsx3952 power 0.0528 0.5 -> 0.230 Inexact Rounded -pwsx3953 power 0.529 0.5 -> 0.727 Inexact Rounded -pwsx3954 power 0.0529 0.5 -> 0.230 Inexact Rounded -pwsx3955 power 0.531 0.5 -> 0.729 Inexact Rounded -pwsx3956 power 0.0531 0.5 -> 0.230 Inexact Rounded -pwsx3957 power 0.532 0.5 -> 0.729 Inexact Rounded -pwsx3958 power 0.0532 0.5 -> 0.231 Inexact Rounded -pwsx3959 power 0.533 0.5 -> 0.730 Inexact Rounded -pwsx3960 power 0.0533 0.5 -> 0.231 Inexact Rounded -pwsx3961 power 0.534 0.5 -> 0.731 Inexact Rounded -pwsx3962 power 0.0534 0.5 -> 0.231 Inexact Rounded -pwsx3963 power 0.535 0.5 -> 0.731 Inexact Rounded -pwsx3964 power 0.0535 0.5 -> 0.231 Inexact Rounded -pwsx3965 power 0.536 0.5 -> 0.732 Inexact Rounded -pwsx3966 power 0.0536 0.5 -> 0.232 Inexact Rounded -pwsx3967 power 0.537 0.5 -> 0.733 Inexact Rounded -pwsx3968 power 0.0537 0.5 -> 0.232 Inexact Rounded -pwsx3969 power 0.538 0.5 -> 0.733 Inexact Rounded -pwsx3970 power 0.0538 0.5 -> 0.232 Inexact Rounded -pwsx3971 power 0.539 0.5 -> 0.734 Inexact Rounded -pwsx3972 power 0.0539 0.5 -> 0.232 Inexact Rounded -pwsx3973 power 0.541 0.5 -> 0.736 Inexact Rounded -pwsx3974 power 0.0541 0.5 -> 0.233 Inexact Rounded -pwsx3975 power 0.542 0.5 -> 0.736 Inexact Rounded -pwsx3976 power 0.0542 0.5 -> 0.233 Inexact Rounded -pwsx3977 power 0.543 0.5 -> 0.737 Inexact Rounded -pwsx3978 power 0.0543 0.5 -> 0.233 Inexact Rounded -pwsx3979 power 0.544 0.5 -> 0.738 Inexact Rounded -pwsx3980 power 0.0544 0.5 -> 0.233 Inexact Rounded -pwsx3981 power 0.545 0.5 -> 0.738 Inexact Rounded -pwsx3982 power 0.0545 0.5 -> 0.233 Inexact Rounded -pwsx3983 power 0.546 0.5 -> 0.739 Inexact Rounded -pwsx3984 power 0.0546 0.5 -> 0.234 Inexact Rounded -pwsx3985 power 0.547 0.5 -> 0.740 Inexact Rounded -pwsx3986 power 0.0547 0.5 -> 0.234 Inexact Rounded -pwsx3987 power 0.548 0.5 -> 0.740 Inexact Rounded -pwsx3988 power 0.0548 0.5 -> 0.234 Inexact Rounded -pwsx3989 power 0.549 0.5 -> 0.741 Inexact Rounded -pwsx3990 power 0.0549 0.5 -> 0.234 Inexact Rounded -pwsx3991 power 0.551 0.5 -> 0.742 Inexact Rounded -pwsx3992 power 0.0551 0.5 -> 0.235 Inexact Rounded -pwsx3993 power 0.552 0.5 -> 0.743 Inexact Rounded -pwsx3994 power 0.0552 0.5 -> 0.235 Inexact Rounded -pwsx3995 power 0.553 0.5 -> 0.744 Inexact Rounded -pwsx3996 power 0.0553 0.5 -> 0.235 Inexact Rounded -pwsx3997 power 0.554 0.5 -> 0.744 Inexact Rounded -pwsx3998 power 0.0554 0.5 -> 0.235 Inexact Rounded -pwsx3999 power 0.555 0.5 -> 0.745 Inexact Rounded -pwsx4000 power 0.0555 0.5 -> 0.236 Inexact Rounded -pwsx4001 power 0.556 0.5 -> 0.746 Inexact Rounded -pwsx4002 power 0.0556 0.5 -> 0.236 Inexact Rounded -pwsx4003 power 0.557 0.5 -> 0.746 Inexact Rounded -pwsx4004 power 0.0557 0.5 -> 0.236 Inexact Rounded -pwsx4005 power 0.558 0.5 -> 0.747 Inexact Rounded -pwsx4006 power 0.0558 0.5 -> 0.236 Inexact Rounded -pwsx4007 power 0.559 0.5 -> 0.748 Inexact Rounded -pwsx4008 power 0.0559 0.5 -> 0.236 Inexact Rounded -pwsx4009 power 0.561 0.5 -> 0.749 Inexact Rounded -pwsx4010 power 0.0561 0.5 -> 0.237 Inexact Rounded -pwsx4011 power 0.562 0.5 -> 0.750 Inexact Rounded -pwsx4012 power 0.0562 0.5 -> 0.237 Inexact Rounded -pwsx4013 power 0.563 0.5 -> 0.750 Inexact Rounded -pwsx4014 power 0.0563 0.5 -> 0.237 Inexact Rounded -pwsx4015 power 0.564 0.5 -> 0.751 Inexact Rounded -pwsx4016 power 0.0564 0.5 -> 0.237 Inexact Rounded -pwsx4017 power 0.565 0.5 -> 0.752 Inexact Rounded -pwsx4018 power 0.0565 0.5 -> 0.238 Inexact Rounded -pwsx4019 power 0.566 0.5 -> 0.752 Inexact Rounded -pwsx4020 power 0.0566 0.5 -> 0.238 Inexact Rounded -pwsx4021 power 0.567 0.5 -> 0.753 Inexact Rounded -pwsx4022 power 0.0567 0.5 -> 0.238 Inexact Rounded -pwsx4023 power 0.568 0.5 -> 0.754 Inexact Rounded -pwsx4024 power 0.0568 0.5 -> 0.238 Inexact Rounded -pwsx4025 power 0.569 0.5 -> 0.754 Inexact Rounded -pwsx4026 power 0.0569 0.5 -> 0.239 Inexact Rounded -pwsx4027 power 0.571 0.5 -> 0.756 Inexact Rounded -pwsx4028 power 0.0571 0.5 -> 0.239 Inexact Rounded -pwsx4029 power 0.572 0.5 -> 0.756 Inexact Rounded -pwsx4030 power 0.0572 0.5 -> 0.239 Inexact Rounded -pwsx4031 power 0.573 0.5 -> 0.757 Inexact Rounded -pwsx4032 power 0.0573 0.5 -> 0.239 Inexact Rounded -pwsx4033 power 0.574 0.5 -> 0.758 Inexact Rounded -pwsx4034 power 0.0574 0.5 -> 0.240 Inexact Rounded -pwsx4035 power 0.575 0.5 -> 0.758 Inexact Rounded -pwsx4036 power 0.0575 0.5 -> 0.240 Inexact Rounded -pwsx4037 power 0.576 0.5 -> 0.759 Inexact Rounded -pwsx4038 power 0.0576 0.5 -> 0.240 Inexact Rounded -pwsx4039 power 0.577 0.5 -> 0.760 Inexact Rounded -pwsx4040 power 0.0577 0.5 -> 0.240 Inexact Rounded -pwsx4041 power 0.578 0.5 -> 0.760 Inexact Rounded -pwsx4042 power 0.0578 0.5 -> 0.240 Inexact Rounded -pwsx4043 power 0.579 0.5 -> 0.761 Inexact Rounded -pwsx4044 power 0.0579 0.5 -> 0.241 Inexact Rounded -pwsx4045 power 0.581 0.5 -> 0.762 Inexact Rounded -pwsx4046 power 0.0581 0.5 -> 0.241 Inexact Rounded -pwsx4047 power 0.582 0.5 -> 0.763 Inexact Rounded -pwsx4048 power 0.0582 0.5 -> 0.241 Inexact Rounded -pwsx4049 power 0.583 0.5 -> 0.764 Inexact Rounded -pwsx4050 power 0.0583 0.5 -> 0.241 Inexact Rounded -pwsx4051 power 0.584 0.5 -> 0.764 Inexact Rounded -pwsx4052 power 0.0584 0.5 -> 0.242 Inexact Rounded -pwsx4053 power 0.585 0.5 -> 0.765 Inexact Rounded -pwsx4054 power 0.0585 0.5 -> 0.242 Inexact Rounded -pwsx4055 power 0.586 0.5 -> 0.766 Inexact Rounded -pwsx4056 power 0.0586 0.5 -> 0.242 Inexact Rounded -pwsx4057 power 0.587 0.5 -> 0.766 Inexact Rounded -pwsx4058 power 0.0587 0.5 -> 0.242 Inexact Rounded -pwsx4059 power 0.588 0.5 -> 0.767 Inexact Rounded -pwsx4060 power 0.0588 0.5 -> 0.242 Inexact Rounded -pwsx4061 power 0.589 0.5 -> 0.767 Inexact Rounded -pwsx4062 power 0.0589 0.5 -> 0.243 Inexact Rounded -pwsx4063 power 0.591 0.5 -> 0.769 Inexact Rounded -pwsx4064 power 0.0591 0.5 -> 0.243 Inexact Rounded -pwsx4065 power 0.592 0.5 -> 0.769 Inexact Rounded -pwsx4066 power 0.0592 0.5 -> 0.243 Inexact Rounded -pwsx4067 power 0.593 0.5 -> 0.770 Inexact Rounded -pwsx4068 power 0.0593 0.5 -> 0.244 Inexact Rounded -pwsx4069 power 0.594 0.5 -> 0.771 Inexact Rounded -pwsx4070 power 0.0594 0.5 -> 0.244 Inexact Rounded -pwsx4071 power 0.595 0.5 -> 0.771 Inexact Rounded -pwsx4072 power 0.0595 0.5 -> 0.244 Inexact Rounded -pwsx4073 power 0.596 0.5 -> 0.772 Inexact Rounded -pwsx4074 power 0.0596 0.5 -> 0.244 Inexact Rounded -pwsx4075 power 0.597 0.5 -> 0.773 Inexact Rounded -pwsx4076 power 0.0597 0.5 -> 0.244 Inexact Rounded -pwsx4077 power 0.598 0.5 -> 0.773 Inexact Rounded -pwsx4078 power 0.0598 0.5 -> 0.245 Inexact Rounded -pwsx4079 power 0.599 0.5 -> 0.774 Inexact Rounded -pwsx4080 power 0.0599 0.5 -> 0.245 Inexact Rounded -pwsx4081 power 0.601 0.5 -> 0.775 Inexact Rounded -pwsx4082 power 0.0601 0.5 -> 0.245 Inexact Rounded -pwsx4083 power 0.602 0.5 -> 0.776 Inexact Rounded -pwsx4084 power 0.0602 0.5 -> 0.245 Inexact Rounded -pwsx4085 power 0.603 0.5 -> 0.777 Inexact Rounded -pwsx4086 power 0.0603 0.5 -> 0.246 Inexact Rounded -pwsx4087 power 0.604 0.5 -> 0.777 Inexact Rounded -pwsx4088 power 0.0604 0.5 -> 0.246 Inexact Rounded -pwsx4089 power 0.605 0.5 -> 0.778 Inexact Rounded -pwsx4090 power 0.0605 0.5 -> 0.246 Inexact Rounded -pwsx4091 power 0.606 0.5 -> 0.778 Inexact Rounded -pwsx4092 power 0.0606 0.5 -> 0.246 Inexact Rounded -pwsx4093 power 0.607 0.5 -> 0.779 Inexact Rounded -pwsx4094 power 0.0607 0.5 -> 0.246 Inexact Rounded -pwsx4095 power 0.608 0.5 -> 0.780 Inexact Rounded -pwsx4096 power 0.0608 0.5 -> 0.247 Inexact Rounded -pwsx4097 power 0.609 0.5 -> 0.780 Inexact Rounded -pwsx4098 power 0.0609 0.5 -> 0.247 Inexact Rounded -pwsx4099 power 0.611 0.5 -> 0.782 Inexact Rounded -pwsx4100 power 0.0611 0.5 -> 0.247 Inexact Rounded -pwsx4101 power 0.612 0.5 -> 0.782 Inexact Rounded -pwsx4102 power 0.0612 0.5 -> 0.247 Inexact Rounded -pwsx4103 power 0.613 0.5 -> 0.783 Inexact Rounded -pwsx4104 power 0.0613 0.5 -> 0.248 Inexact Rounded -pwsx4105 power 0.614 0.5 -> 0.784 Inexact Rounded -pwsx4106 power 0.0614 0.5 -> 0.248 Inexact Rounded -pwsx4107 power 0.615 0.5 -> 0.784 Inexact Rounded -pwsx4108 power 0.0615 0.5 -> 0.248 Inexact Rounded -pwsx4109 power 0.616 0.5 -> 0.785 Inexact Rounded -pwsx4110 power 0.0616 0.5 -> 0.248 Inexact Rounded -pwsx4111 power 0.617 0.5 -> 0.785 Inexact Rounded -pwsx4112 power 0.0617 0.5 -> 0.248 Inexact Rounded -pwsx4113 power 0.618 0.5 -> 0.786 Inexact Rounded -pwsx4114 power 0.0618 0.5 -> 0.249 Inexact Rounded -pwsx4115 power 0.619 0.5 -> 0.787 Inexact Rounded -pwsx4116 power 0.0619 0.5 -> 0.249 Inexact Rounded -pwsx4117 power 0.621 0.5 -> 0.788 Inexact Rounded -pwsx4118 power 0.0621 0.5 -> 0.249 Inexact Rounded -pwsx4119 power 0.622 0.5 -> 0.789 Inexact Rounded -pwsx4120 power 0.0622 0.5 -> 0.249 Inexact Rounded -pwsx4121 power 0.623 0.5 -> 0.789 Inexact Rounded -pwsx4122 power 0.0623 0.5 -> 0.250 Inexact Rounded -pwsx4123 power 0.624 0.5 -> 0.790 Inexact Rounded -pwsx4124 power 0.0624 0.5 -> 0.250 Inexact Rounded -pwsx4125 power 0.625 0.5 -> 0.791 Inexact Rounded -pwsx4126 power 0.0625 0.5 -> 0.250 Inexact Rounded -pwsx4127 power 0.626 0.5 -> 0.791 Inexact Rounded -pwsx4128 power 0.0626 0.5 -> 0.250 Inexact Rounded -pwsx4129 power 0.627 0.5 -> 0.792 Inexact Rounded -pwsx4130 power 0.0627 0.5 -> 0.250 Inexact Rounded -pwsx4131 power 0.628 0.5 -> 0.792 Inexact Rounded -pwsx4132 power 0.0628 0.5 -> 0.251 Inexact Rounded -pwsx4133 power 0.629 0.5 -> 0.793 Inexact Rounded -pwsx4134 power 0.0629 0.5 -> 0.251 Inexact Rounded -pwsx4135 power 0.631 0.5 -> 0.794 Inexact Rounded -pwsx4136 power 0.0631 0.5 -> 0.251 Inexact Rounded -pwsx4137 power 0.632 0.5 -> 0.795 Inexact Rounded -pwsx4138 power 0.0632 0.5 -> 0.251 Inexact Rounded -pwsx4139 power 0.633 0.5 -> 0.796 Inexact Rounded -pwsx4140 power 0.0633 0.5 -> 0.252 Inexact Rounded -pwsx4141 power 0.634 0.5 -> 0.796 Inexact Rounded -pwsx4142 power 0.0634 0.5 -> 0.252 Inexact Rounded -pwsx4143 power 0.635 0.5 -> 0.797 Inexact Rounded -pwsx4144 power 0.0635 0.5 -> 0.252 Inexact Rounded -pwsx4145 power 0.636 0.5 -> 0.797 Inexact Rounded -pwsx4146 power 0.0636 0.5 -> 0.252 Inexact Rounded -pwsx4147 power 0.637 0.5 -> 0.798 Inexact Rounded -pwsx4148 power 0.0637 0.5 -> 0.252 Inexact Rounded -pwsx4149 power 0.638 0.5 -> 0.799 Inexact Rounded -pwsx4150 power 0.0638 0.5 -> 0.253 Inexact Rounded -pwsx4151 power 0.639 0.5 -> 0.799 Inexact Rounded -pwsx4152 power 0.0639 0.5 -> 0.253 Inexact Rounded -pwsx4153 power 0.641 0.5 -> 0.801 Inexact Rounded -pwsx4154 power 0.0641 0.5 -> 0.253 Inexact Rounded -pwsx4155 power 0.642 0.5 -> 0.801 Inexact Rounded -pwsx4156 power 0.0642 0.5 -> 0.253 Inexact Rounded -pwsx4157 power 0.643 0.5 -> 0.802 Inexact Rounded -pwsx4158 power 0.0643 0.5 -> 0.254 Inexact Rounded -pwsx4159 power 0.644 0.5 -> 0.802 Inexact Rounded -pwsx4160 power 0.0644 0.5 -> 0.254 Inexact Rounded -pwsx4161 power 0.645 0.5 -> 0.803 Inexact Rounded -pwsx4162 power 0.0645 0.5 -> 0.254 Inexact Rounded -pwsx4163 power 0.646 0.5 -> 0.804 Inexact Rounded -pwsx4164 power 0.0646 0.5 -> 0.254 Inexact Rounded -pwsx4165 power 0.647 0.5 -> 0.804 Inexact Rounded -pwsx4166 power 0.0647 0.5 -> 0.254 Inexact Rounded -pwsx4167 power 0.648 0.5 -> 0.805 Inexact Rounded -pwsx4168 power 0.0648 0.5 -> 0.255 Inexact Rounded -pwsx4169 power 0.649 0.5 -> 0.806 Inexact Rounded -pwsx4170 power 0.0649 0.5 -> 0.255 Inexact Rounded -pwsx4171 power 0.651 0.5 -> 0.807 Inexact Rounded -pwsx4172 power 0.0651 0.5 -> 0.255 Inexact Rounded -pwsx4173 power 0.652 0.5 -> 0.807 Inexact Rounded -pwsx4174 power 0.0652 0.5 -> 0.255 Inexact Rounded -pwsx4175 power 0.653 0.5 -> 0.808 Inexact Rounded -pwsx4176 power 0.0653 0.5 -> 0.256 Inexact Rounded -pwsx4177 power 0.654 0.5 -> 0.809 Inexact Rounded -pwsx4178 power 0.0654 0.5 -> 0.256 Inexact Rounded -pwsx4179 power 0.655 0.5 -> 0.809 Inexact Rounded -pwsx4180 power 0.0655 0.5 -> 0.256 Inexact Rounded -pwsx4181 power 0.656 0.5 -> 0.810 Inexact Rounded -pwsx4182 power 0.0656 0.5 -> 0.256 Inexact Rounded -pwsx4183 power 0.657 0.5 -> 0.811 Inexact Rounded -pwsx4184 power 0.0657 0.5 -> 0.256 Inexact Rounded -pwsx4185 power 0.658 0.5 -> 0.811 Inexact Rounded -pwsx4186 power 0.0658 0.5 -> 0.257 Inexact Rounded -pwsx4187 power 0.659 0.5 -> 0.812 Inexact Rounded -pwsx4188 power 0.0659 0.5 -> 0.257 Inexact Rounded -pwsx4189 power 0.661 0.5 -> 0.813 Inexact Rounded -pwsx4190 power 0.0661 0.5 -> 0.257 Inexact Rounded -pwsx4191 power 0.662 0.5 -> 0.814 Inexact Rounded -pwsx4192 power 0.0662 0.5 -> 0.257 Inexact Rounded -pwsx4193 power 0.663 0.5 -> 0.814 Inexact Rounded -pwsx4194 power 0.0663 0.5 -> 0.257 Inexact Rounded -pwsx4195 power 0.664 0.5 -> 0.815 Inexact Rounded -pwsx4196 power 0.0664 0.5 -> 0.258 Inexact Rounded -pwsx4197 power 0.665 0.5 -> 0.815 Inexact Rounded -pwsx4198 power 0.0665 0.5 -> 0.258 Inexact Rounded -pwsx4199 power 0.666 0.5 -> 0.816 Inexact Rounded -pwsx4200 power 0.0666 0.5 -> 0.258 Inexact Rounded -pwsx4201 power 0.667 0.5 -> 0.817 Inexact Rounded -pwsx4202 power 0.0667 0.5 -> 0.258 Inexact Rounded -pwsx4203 power 0.668 0.5 -> 0.817 Inexact Rounded -pwsx4204 power 0.0668 0.5 -> 0.258 Inexact Rounded -pwsx4205 power 0.669 0.5 -> 0.818 Inexact Rounded -pwsx4206 power 0.0669 0.5 -> 0.259 Inexact Rounded -pwsx4207 power 0.671 0.5 -> 0.819 Inexact Rounded -pwsx4208 power 0.0671 0.5 -> 0.259 Inexact Rounded -pwsx4209 power 0.672 0.5 -> 0.820 Inexact Rounded -pwsx4210 power 0.0672 0.5 -> 0.259 Inexact Rounded -pwsx4211 power 0.673 0.5 -> 0.820 Inexact Rounded -pwsx4212 power 0.0673 0.5 -> 0.259 Inexact Rounded -pwsx4213 power 0.674 0.5 -> 0.821 Inexact Rounded -pwsx4214 power 0.0674 0.5 -> 0.260 Inexact Rounded -pwsx4215 power 0.675 0.5 -> 0.822 Inexact Rounded -pwsx4216 power 0.0675 0.5 -> 0.260 Inexact Rounded -pwsx4217 power 0.676 0.5 -> 0.822 Inexact Rounded -pwsx4218 power 0.0676 0.5 -> 0.260 Inexact Rounded -pwsx4219 power 0.677 0.5 -> 0.823 Inexact Rounded -pwsx4220 power 0.0677 0.5 -> 0.260 Inexact Rounded -pwsx4221 power 0.678 0.5 -> 0.823 Inexact Rounded -pwsx4222 power 0.0678 0.5 -> 0.260 Inexact Rounded -pwsx4223 power 0.679 0.5 -> 0.824 Inexact Rounded -pwsx4224 power 0.0679 0.5 -> 0.261 Inexact Rounded -pwsx4225 power 0.681 0.5 -> 0.825 Inexact Rounded -pwsx4226 power 0.0681 0.5 -> 0.261 Inexact Rounded -pwsx4227 power 0.682 0.5 -> 0.826 Inexact Rounded -pwsx4228 power 0.0682 0.5 -> 0.261 Inexact Rounded -pwsx4229 power 0.683 0.5 -> 0.826 Inexact Rounded -pwsx4230 power 0.0683 0.5 -> 0.261 Inexact Rounded -pwsx4231 power 0.684 0.5 -> 0.827 Inexact Rounded -pwsx4232 power 0.0684 0.5 -> 0.262 Inexact Rounded -pwsx4233 power 0.685 0.5 -> 0.828 Inexact Rounded -pwsx4234 power 0.0685 0.5 -> 0.262 Inexact Rounded -pwsx4235 power 0.686 0.5 -> 0.828 Inexact Rounded -pwsx4236 power 0.0686 0.5 -> 0.262 Inexact Rounded -pwsx4237 power 0.687 0.5 -> 0.829 Inexact Rounded -pwsx4238 power 0.0687 0.5 -> 0.262 Inexact Rounded -pwsx4239 power 0.688 0.5 -> 0.829 Inexact Rounded -pwsx4240 power 0.0688 0.5 -> 0.262 Inexact Rounded -pwsx4241 power 0.689 0.5 -> 0.830 Inexact Rounded -pwsx4242 power 0.0689 0.5 -> 0.262 Inexact Rounded -pwsx4243 power 0.691 0.5 -> 0.831 Inexact Rounded -pwsx4244 power 0.0691 0.5 -> 0.263 Inexact Rounded -pwsx4245 power 0.692 0.5 -> 0.832 Inexact Rounded -pwsx4246 power 0.0692 0.5 -> 0.263 Inexact Rounded -pwsx4247 power 0.693 0.5 -> 0.832 Inexact Rounded -pwsx4248 power 0.0693 0.5 -> 0.263 Inexact Rounded -pwsx4249 power 0.694 0.5 -> 0.833 Inexact Rounded -pwsx4250 power 0.0694 0.5 -> 0.263 Inexact Rounded -pwsx4251 power 0.695 0.5 -> 0.834 Inexact Rounded -pwsx4252 power 0.0695 0.5 -> 0.264 Inexact Rounded -pwsx4253 power 0.696 0.5 -> 0.834 Inexact Rounded -pwsx4254 power 0.0696 0.5 -> 0.264 Inexact Rounded -pwsx4255 power 0.697 0.5 -> 0.835 Inexact Rounded -pwsx4256 power 0.0697 0.5 -> 0.264 Inexact Rounded -pwsx4257 power 0.698 0.5 -> 0.835 Inexact Rounded -pwsx4258 power 0.0698 0.5 -> 0.264 Inexact Rounded -pwsx4259 power 0.699 0.5 -> 0.836 Inexact Rounded -pwsx4260 power 0.0699 0.5 -> 0.264 Inexact Rounded -pwsx4261 power 0.701 0.5 -> 0.837 Inexact Rounded -pwsx4262 power 0.0701 0.5 -> 0.265 Inexact Rounded -pwsx4263 power 0.702 0.5 -> 0.838 Inexact Rounded -pwsx4264 power 0.0702 0.5 -> 0.265 Inexact Rounded -pwsx4265 power 0.703 0.5 -> 0.838 Inexact Rounded -pwsx4266 power 0.0703 0.5 -> 0.265 Inexact Rounded -pwsx4267 power 0.704 0.5 -> 0.839 Inexact Rounded -pwsx4268 power 0.0704 0.5 -> 0.265 Inexact Rounded -pwsx4269 power 0.705 0.5 -> 0.840 Inexact Rounded -pwsx4270 power 0.0705 0.5 -> 0.266 Inexact Rounded -pwsx4271 power 0.706 0.5 -> 0.840 Inexact Rounded -pwsx4272 power 0.0706 0.5 -> 0.266 Inexact Rounded -pwsx4273 power 0.707 0.5 -> 0.841 Inexact Rounded -pwsx4274 power 0.0707 0.5 -> 0.266 Inexact Rounded -pwsx4275 power 0.708 0.5 -> 0.841 Inexact Rounded -pwsx4276 power 0.0708 0.5 -> 0.266 Inexact Rounded -pwsx4277 power 0.709 0.5 -> 0.842 Inexact Rounded -pwsx4278 power 0.0709 0.5 -> 0.266 Inexact Rounded -pwsx4279 power 0.711 0.5 -> 0.843 Inexact Rounded -pwsx4280 power 0.0711 0.5 -> 0.267 Inexact Rounded -pwsx4281 power 0.712 0.5 -> 0.844 Inexact Rounded -pwsx4282 power 0.0712 0.5 -> 0.267 Inexact Rounded -pwsx4283 power 0.713 0.5 -> 0.844 Inexact Rounded -pwsx4284 power 0.0713 0.5 -> 0.267 Inexact Rounded -pwsx4285 power 0.714 0.5 -> 0.845 Inexact Rounded -pwsx4286 power 0.0714 0.5 -> 0.267 Inexact Rounded -pwsx4287 power 0.715 0.5 -> 0.846 Inexact Rounded -pwsx4288 power 0.0715 0.5 -> 0.267 Inexact Rounded -pwsx4289 power 0.716 0.5 -> 0.846 Inexact Rounded -pwsx4290 power 0.0716 0.5 -> 0.268 Inexact Rounded -pwsx4291 power 0.717 0.5 -> 0.847 Inexact Rounded -pwsx4292 power 0.0717 0.5 -> 0.268 Inexact Rounded -pwsx4293 power 0.718 0.5 -> 0.847 Inexact Rounded -pwsx4294 power 0.0718 0.5 -> 0.268 Inexact Rounded -pwsx4295 power 0.719 0.5 -> 0.848 Inexact Rounded -pwsx4296 power 0.0719 0.5 -> 0.268 Inexact Rounded -pwsx4297 power 0.721 0.5 -> 0.849 Inexact Rounded -pwsx4298 power 0.0721 0.5 -> 0.269 Inexact Rounded -pwsx4299 power 0.722 0.5 -> 0.850 Inexact Rounded -pwsx4300 power 0.0722 0.5 -> 0.269 Inexact Rounded -pwsx4301 power 0.723 0.5 -> 0.850 Inexact Rounded -pwsx4302 power 0.0723 0.5 -> 0.269 Inexact Rounded -pwsx4303 power 0.724 0.5 -> 0.851 Inexact Rounded -pwsx4304 power 0.0724 0.5 -> 0.269 Inexact Rounded -pwsx4305 power 0.725 0.5 -> 0.851 Inexact Rounded -pwsx4306 power 0.0725 0.5 -> 0.269 Inexact Rounded -pwsx4307 power 0.726 0.5 -> 0.852 Inexact Rounded -pwsx4308 power 0.0726 0.5 -> 0.269 Inexact Rounded -pwsx4309 power 0.727 0.5 -> 0.853 Inexact Rounded -pwsx4310 power 0.0727 0.5 -> 0.270 Inexact Rounded -pwsx4311 power 0.728 0.5 -> 0.853 Inexact Rounded -pwsx4312 power 0.0728 0.5 -> 0.270 Inexact Rounded -pwsx4313 power 0.729 0.5 -> 0.854 Inexact Rounded -pwsx4314 power 0.0729 0.5 -> 0.270 Inexact Rounded -pwsx4315 power 0.731 0.5 -> 0.855 Inexact Rounded -pwsx4316 power 0.0731 0.5 -> 0.270 Inexact Rounded -pwsx4317 power 0.732 0.5 -> 0.856 Inexact Rounded -pwsx4318 power 0.0732 0.5 -> 0.271 Inexact Rounded -pwsx4319 power 0.733 0.5 -> 0.856 Inexact Rounded -pwsx4320 power 0.0733 0.5 -> 0.271 Inexact Rounded -pwsx4321 power 0.734 0.5 -> 0.857 Inexact Rounded -pwsx4322 power 0.0734 0.5 -> 0.271 Inexact Rounded -pwsx4323 power 0.735 0.5 -> 0.857 Inexact Rounded -pwsx4324 power 0.0735 0.5 -> 0.271 Inexact Rounded -pwsx4325 power 0.736 0.5 -> 0.858 Inexact Rounded -pwsx4326 power 0.0736 0.5 -> 0.271 Inexact Rounded -pwsx4327 power 0.737 0.5 -> 0.858 Inexact Rounded -pwsx4328 power 0.0737 0.5 -> 0.271 Inexact Rounded -pwsx4329 power 0.738 0.5 -> 0.859 Inexact Rounded -pwsx4330 power 0.0738 0.5 -> 0.272 Inexact Rounded -pwsx4331 power 0.739 0.5 -> 0.860 Inexact Rounded -pwsx4332 power 0.0739 0.5 -> 0.272 Inexact Rounded -pwsx4333 power 0.741 0.5 -> 0.861 Inexact Rounded -pwsx4334 power 0.0741 0.5 -> 0.272 Inexact Rounded -pwsx4335 power 0.742 0.5 -> 0.861 Inexact Rounded -pwsx4336 power 0.0742 0.5 -> 0.272 Inexact Rounded -pwsx4337 power 0.743 0.5 -> 0.862 Inexact Rounded -pwsx4338 power 0.0743 0.5 -> 0.273 Inexact Rounded -pwsx4339 power 0.744 0.5 -> 0.863 Inexact Rounded -pwsx4340 power 0.0744 0.5 -> 0.273 Inexact Rounded -pwsx4341 power 0.745 0.5 -> 0.863 Inexact Rounded -pwsx4342 power 0.0745 0.5 -> 0.273 Inexact Rounded -pwsx4343 power 0.746 0.5 -> 0.864 Inexact Rounded -pwsx4344 power 0.0746 0.5 -> 0.273 Inexact Rounded -pwsx4345 power 0.747 0.5 -> 0.864 Inexact Rounded -pwsx4346 power 0.0747 0.5 -> 0.273 Inexact Rounded -pwsx4347 power 0.748 0.5 -> 0.865 Inexact Rounded -pwsx4348 power 0.0748 0.5 -> 0.273 Inexact Rounded -pwsx4349 power 0.749 0.5 -> 0.865 Inexact Rounded -pwsx4350 power 0.0749 0.5 -> 0.274 Inexact Rounded -pwsx4351 power 0.751 0.5 -> 0.867 Inexact Rounded -pwsx4352 power 0.0751 0.5 -> 0.274 Inexact Rounded -pwsx4353 power 0.752 0.5 -> 0.867 Inexact Rounded -pwsx4354 power 0.0752 0.5 -> 0.274 Inexact Rounded -pwsx4355 power 0.753 0.5 -> 0.868 Inexact Rounded -pwsx4356 power 0.0753 0.5 -> 0.274 Inexact Rounded -pwsx4357 power 0.754 0.5 -> 0.868 Inexact Rounded -pwsx4358 power 0.0754 0.5 -> 0.275 Inexact Rounded -pwsx4359 power 0.755 0.5 -> 0.869 Inexact Rounded -pwsx4360 power 0.0755 0.5 -> 0.275 Inexact Rounded -pwsx4361 power 0.756 0.5 -> 0.869 Inexact Rounded -pwsx4362 power 0.0756 0.5 -> 0.275 Inexact Rounded -pwsx4363 power 0.757 0.5 -> 0.870 Inexact Rounded -pwsx4364 power 0.0757 0.5 -> 0.275 Inexact Rounded -pwsx4365 power 0.758 0.5 -> 0.871 Inexact Rounded -pwsx4366 power 0.0758 0.5 -> 0.275 Inexact Rounded -pwsx4367 power 0.759 0.5 -> 0.871 Inexact Rounded -pwsx4368 power 0.0759 0.5 -> 0.275 Inexact Rounded -pwsx4369 power 0.761 0.5 -> 0.872 Inexact Rounded -pwsx4370 power 0.0761 0.5 -> 0.276 Inexact Rounded -pwsx4371 power 0.762 0.5 -> 0.873 Inexact Rounded -pwsx4372 power 0.0762 0.5 -> 0.276 Inexact Rounded -pwsx4373 power 0.763 0.5 -> 0.873 Inexact Rounded -pwsx4374 power 0.0763 0.5 -> 0.276 Inexact Rounded -pwsx4375 power 0.764 0.5 -> 0.874 Inexact Rounded -pwsx4376 power 0.0764 0.5 -> 0.276 Inexact Rounded -pwsx4377 power 0.765 0.5 -> 0.875 Inexact Rounded -pwsx4378 power 0.0765 0.5 -> 0.277 Inexact Rounded -pwsx4379 power 0.766 0.5 -> 0.875 Inexact Rounded -pwsx4380 power 0.0766 0.5 -> 0.277 Inexact Rounded -pwsx4381 power 0.767 0.5 -> 0.876 Inexact Rounded -pwsx4382 power 0.0767 0.5 -> 0.277 Inexact Rounded -pwsx4383 power 0.768 0.5 -> 0.876 Inexact Rounded -pwsx4384 power 0.0768 0.5 -> 0.277 Inexact Rounded -pwsx4385 power 0.769 0.5 -> 0.877 Inexact Rounded -pwsx4386 power 0.0769 0.5 -> 0.277 Inexact Rounded -pwsx4387 power 0.771 0.5 -> 0.878 Inexact Rounded -pwsx4388 power 0.0771 0.5 -> 0.278 Inexact Rounded -pwsx4389 power 0.772 0.5 -> 0.879 Inexact Rounded -pwsx4390 power 0.0772 0.5 -> 0.278 Inexact Rounded -pwsx4391 power 0.773 0.5 -> 0.879 Inexact Rounded -pwsx4392 power 0.0773 0.5 -> 0.278 Inexact Rounded -pwsx4393 power 0.774 0.5 -> 0.880 Inexact Rounded -pwsx4394 power 0.0774 0.5 -> 0.278 Inexact Rounded -pwsx4395 power 0.775 0.5 -> 0.880 Inexact Rounded -pwsx4396 power 0.0775 0.5 -> 0.278 Inexact Rounded -pwsx4397 power 0.776 0.5 -> 0.881 Inexact Rounded -pwsx4398 power 0.0776 0.5 -> 0.279 Inexact Rounded -pwsx4399 power 0.777 0.5 -> 0.881 Inexact Rounded -pwsx4400 power 0.0777 0.5 -> 0.279 Inexact Rounded -pwsx4401 power 0.778 0.5 -> 0.882 Inexact Rounded -pwsx4402 power 0.0778 0.5 -> 0.279 Inexact Rounded -pwsx4403 power 0.779 0.5 -> 0.883 Inexact Rounded -pwsx4404 power 0.0779 0.5 -> 0.279 Inexact Rounded -pwsx4405 power 0.781 0.5 -> 0.884 Inexact Rounded -pwsx4406 power 0.0781 0.5 -> 0.279 Inexact Rounded -pwsx4407 power 0.782 0.5 -> 0.884 Inexact Rounded -pwsx4408 power 0.0782 0.5 -> 0.280 Inexact Rounded -pwsx4409 power 0.783 0.5 -> 0.885 Inexact Rounded -pwsx4410 power 0.0783 0.5 -> 0.280 Inexact Rounded -pwsx4411 power 0.784 0.5 -> 0.885 Inexact Rounded -pwsx4412 power 0.0784 0.5 -> 0.280 Inexact Rounded -pwsx4413 power 0.785 0.5 -> 0.886 Inexact Rounded -pwsx4414 power 0.0785 0.5 -> 0.280 Inexact Rounded -pwsx4415 power 0.786 0.5 -> 0.887 Inexact Rounded -pwsx4416 power 0.0786 0.5 -> 0.280 Inexact Rounded -pwsx4417 power 0.787 0.5 -> 0.887 Inexact Rounded -pwsx4418 power 0.0787 0.5 -> 0.281 Inexact Rounded -pwsx4419 power 0.788 0.5 -> 0.888 Inexact Rounded -pwsx4420 power 0.0788 0.5 -> 0.281 Inexact Rounded -pwsx4421 power 0.789 0.5 -> 0.888 Inexact Rounded -pwsx4422 power 0.0789 0.5 -> 0.281 Inexact Rounded -pwsx4423 power 0.791 0.5 -> 0.889 Inexact Rounded -pwsx4424 power 0.0791 0.5 -> 0.281 Inexact Rounded -pwsx4425 power 0.792 0.5 -> 0.890 Inexact Rounded -pwsx4426 power 0.0792 0.5 -> 0.281 Inexact Rounded -pwsx4427 power 0.793 0.5 -> 0.891 Inexact Rounded -pwsx4428 power 0.0793 0.5 -> 0.282 Inexact Rounded -pwsx4429 power 0.794 0.5 -> 0.891 Inexact Rounded -pwsx4430 power 0.0794 0.5 -> 0.282 Inexact Rounded -pwsx4431 power 0.795 0.5 -> 0.892 Inexact Rounded -pwsx4432 power 0.0795 0.5 -> 0.282 Inexact Rounded -pwsx4433 power 0.796 0.5 -> 0.892 Inexact Rounded -pwsx4434 power 0.0796 0.5 -> 0.282 Inexact Rounded -pwsx4435 power 0.797 0.5 -> 0.893 Inexact Rounded -pwsx4436 power 0.0797 0.5 -> 0.282 Inexact Rounded -pwsx4437 power 0.798 0.5 -> 0.893 Inexact Rounded -pwsx4438 power 0.0798 0.5 -> 0.282 Inexact Rounded -pwsx4439 power 0.799 0.5 -> 0.894 Inexact Rounded -pwsx4440 power 0.0799 0.5 -> 0.283 Inexact Rounded -pwsx4441 power 0.801 0.5 -> 0.895 Inexact Rounded -pwsx4442 power 0.0801 0.5 -> 0.283 Inexact Rounded -pwsx4443 power 0.802 0.5 -> 0.896 Inexact Rounded -pwsx4444 power 0.0802 0.5 -> 0.283 Inexact Rounded -pwsx4445 power 0.803 0.5 -> 0.896 Inexact Rounded -pwsx4446 power 0.0803 0.5 -> 0.283 Inexact Rounded -pwsx4447 power 0.804 0.5 -> 0.897 Inexact Rounded -pwsx4448 power 0.0804 0.5 -> 0.284 Inexact Rounded -pwsx4449 power 0.805 0.5 -> 0.897 Inexact Rounded -pwsx4450 power 0.0805 0.5 -> 0.284 Inexact Rounded -pwsx4451 power 0.806 0.5 -> 0.898 Inexact Rounded -pwsx4452 power 0.0806 0.5 -> 0.284 Inexact Rounded -pwsx4453 power 0.807 0.5 -> 0.898 Inexact Rounded -pwsx4454 power 0.0807 0.5 -> 0.284 Inexact Rounded -pwsx4455 power 0.808 0.5 -> 0.899 Inexact Rounded -pwsx4456 power 0.0808 0.5 -> 0.284 Inexact Rounded -pwsx4457 power 0.809 0.5 -> 0.899 Inexact Rounded -pwsx4458 power 0.0809 0.5 -> 0.284 Inexact Rounded -pwsx4459 power 0.811 0.5 -> 0.901 Inexact Rounded -pwsx4460 power 0.0811 0.5 -> 0.285 Inexact Rounded -pwsx4461 power 0.812 0.5 -> 0.901 Inexact Rounded -pwsx4462 power 0.0812 0.5 -> 0.285 Inexact Rounded -pwsx4463 power 0.813 0.5 -> 0.902 Inexact Rounded -pwsx4464 power 0.0813 0.5 -> 0.285 Inexact Rounded -pwsx4465 power 0.814 0.5 -> 0.902 Inexact Rounded -pwsx4466 power 0.0814 0.5 -> 0.285 Inexact Rounded -pwsx4467 power 0.815 0.5 -> 0.903 Inexact Rounded -pwsx4468 power 0.0815 0.5 -> 0.285 Inexact Rounded -pwsx4469 power 0.816 0.5 -> 0.903 Inexact Rounded -pwsx4470 power 0.0816 0.5 -> 0.286 Inexact Rounded -pwsx4471 power 0.817 0.5 -> 0.904 Inexact Rounded -pwsx4472 power 0.0817 0.5 -> 0.286 Inexact Rounded -pwsx4473 power 0.818 0.5 -> 0.904 Inexact Rounded -pwsx4474 power 0.0818 0.5 -> 0.286 Inexact Rounded -pwsx4475 power 0.819 0.5 -> 0.905 Inexact Rounded -pwsx4476 power 0.0819 0.5 -> 0.286 Inexact Rounded -pwsx4477 power 0.821 0.5 -> 0.906 Inexact Rounded -pwsx4478 power 0.0821 0.5 -> 0.287 Inexact Rounded -pwsx4479 power 0.822 0.5 -> 0.907 Inexact Rounded -pwsx4480 power 0.0822 0.5 -> 0.287 Inexact Rounded -pwsx4481 power 0.823 0.5 -> 0.907 Inexact Rounded -pwsx4482 power 0.0823 0.5 -> 0.287 Inexact Rounded -pwsx4483 power 0.824 0.5 -> 0.908 Inexact Rounded -pwsx4484 power 0.0824 0.5 -> 0.287 Inexact Rounded -pwsx4485 power 0.825 0.5 -> 0.908 Inexact Rounded -pwsx4486 power 0.0825 0.5 -> 0.287 Inexact Rounded -pwsx4487 power 0.826 0.5 -> 0.909 Inexact Rounded -pwsx4488 power 0.0826 0.5 -> 0.287 Inexact Rounded -pwsx4489 power 0.827 0.5 -> 0.909 Inexact Rounded -pwsx4490 power 0.0827 0.5 -> 0.288 Inexact Rounded -pwsx4491 power 0.828 0.5 -> 0.910 Inexact Rounded -pwsx4492 power 0.0828 0.5 -> 0.288 Inexact Rounded -pwsx4493 power 0.829 0.5 -> 0.910 Inexact Rounded -pwsx4494 power 0.0829 0.5 -> 0.288 Inexact Rounded -pwsx4495 power 0.831 0.5 -> 0.912 Inexact Rounded -pwsx4496 power 0.0831 0.5 -> 0.288 Inexact Rounded -pwsx4497 power 0.832 0.5 -> 0.912 Inexact Rounded -pwsx4498 power 0.0832 0.5 -> 0.288 Inexact Rounded -pwsx4499 power 0.833 0.5 -> 0.913 Inexact Rounded -pwsx4500 power 0.0833 0.5 -> 0.289 Inexact Rounded -pwsx4501 power 0.834 0.5 -> 0.913 Inexact Rounded -pwsx4502 power 0.0834 0.5 -> 0.289 Inexact Rounded -pwsx4503 power 0.835 0.5 -> 0.914 Inexact Rounded -pwsx4504 power 0.0835 0.5 -> 0.289 Inexact Rounded -pwsx4505 power 0.836 0.5 -> 0.914 Inexact Rounded -pwsx4506 power 0.0836 0.5 -> 0.289 Inexact Rounded -pwsx4507 power 0.837 0.5 -> 0.915 Inexact Rounded -pwsx4508 power 0.0837 0.5 -> 0.289 Inexact Rounded -pwsx4509 power 0.838 0.5 -> 0.915 Inexact Rounded -pwsx4510 power 0.0838 0.5 -> 0.289 Inexact Rounded -pwsx4511 power 0.839 0.5 -> 0.916 Inexact Rounded -pwsx4512 power 0.0839 0.5 -> 0.290 Inexact Rounded -pwsx4513 power 0.841 0.5 -> 0.917 Inexact Rounded -pwsx4514 power 0.0841 0.5 -> 0.290 Inexact Rounded -pwsx4515 power 0.842 0.5 -> 0.918 Inexact Rounded -pwsx4516 power 0.0842 0.5 -> 0.290 Inexact Rounded -pwsx4517 power 0.843 0.5 -> 0.918 Inexact Rounded -pwsx4518 power 0.0843 0.5 -> 0.290 Inexact Rounded -pwsx4519 power 0.844 0.5 -> 0.919 Inexact Rounded -pwsx4520 power 0.0844 0.5 -> 0.291 Inexact Rounded -pwsx4521 power 0.845 0.5 -> 0.919 Inexact Rounded -pwsx4522 power 0.0845 0.5 -> 0.291 Inexact Rounded -pwsx4523 power 0.846 0.5 -> 0.920 Inexact Rounded -pwsx4524 power 0.0846 0.5 -> 0.291 Inexact Rounded -pwsx4525 power 0.847 0.5 -> 0.920 Inexact Rounded -pwsx4526 power 0.0847 0.5 -> 0.291 Inexact Rounded -pwsx4527 power 0.848 0.5 -> 0.921 Inexact Rounded -pwsx4528 power 0.0848 0.5 -> 0.291 Inexact Rounded -pwsx4529 power 0.849 0.5 -> 0.921 Inexact Rounded -pwsx4530 power 0.0849 0.5 -> 0.291 Inexact Rounded -pwsx4531 power 0.851 0.5 -> 0.922 Inexact Rounded -pwsx4532 power 0.0851 0.5 -> 0.292 Inexact Rounded -pwsx4533 power 0.852 0.5 -> 0.923 Inexact Rounded -pwsx4534 power 0.0852 0.5 -> 0.292 Inexact Rounded -pwsx4535 power 0.853 0.5 -> 0.924 Inexact Rounded -pwsx4536 power 0.0853 0.5 -> 0.292 Inexact Rounded -pwsx4537 power 0.854 0.5 -> 0.924 Inexact Rounded -pwsx4538 power 0.0854 0.5 -> 0.292 Inexact Rounded -pwsx4539 power 0.855 0.5 -> 0.925 Inexact Rounded -pwsx4540 power 0.0855 0.5 -> 0.292 Inexact Rounded -pwsx4541 power 0.856 0.5 -> 0.925 Inexact Rounded -pwsx4542 power 0.0856 0.5 -> 0.293 Inexact Rounded -pwsx4543 power 0.857 0.5 -> 0.926 Inexact Rounded -pwsx4544 power 0.0857 0.5 -> 0.293 Inexact Rounded -pwsx4545 power 0.858 0.5 -> 0.926 Inexact Rounded -pwsx4546 power 0.0858 0.5 -> 0.293 Inexact Rounded -pwsx4547 power 0.859 0.5 -> 0.927 Inexact Rounded -pwsx4548 power 0.0859 0.5 -> 0.293 Inexact Rounded -pwsx4549 power 0.861 0.5 -> 0.928 Inexact Rounded -pwsx4550 power 0.0861 0.5 -> 0.293 Inexact Rounded -pwsx4551 power 0.862 0.5 -> 0.928 Inexact Rounded -pwsx4552 power 0.0862 0.5 -> 0.294 Inexact Rounded -pwsx4553 power 0.863 0.5 -> 0.929 Inexact Rounded -pwsx4554 power 0.0863 0.5 -> 0.294 Inexact Rounded -pwsx4555 power 0.864 0.5 -> 0.930 Inexact Rounded -pwsx4556 power 0.0864 0.5 -> 0.294 Inexact Rounded -pwsx4557 power 0.865 0.5 -> 0.930 Inexact Rounded -pwsx4558 power 0.0865 0.5 -> 0.294 Inexact Rounded -pwsx4559 power 0.866 0.5 -> 0.931 Inexact Rounded -pwsx4560 power 0.0866 0.5 -> 0.294 Inexact Rounded -pwsx4561 power 0.867 0.5 -> 0.931 Inexact Rounded -pwsx4562 power 0.0867 0.5 -> 0.294 Inexact Rounded -pwsx4563 power 0.868 0.5 -> 0.932 Inexact Rounded -pwsx4564 power 0.0868 0.5 -> 0.295 Inexact Rounded -pwsx4565 power 0.869 0.5 -> 0.932 Inexact Rounded -pwsx4566 power 0.0869 0.5 -> 0.295 Inexact Rounded -pwsx4567 power 0.871 0.5 -> 0.933 Inexact Rounded -pwsx4568 power 0.0871 0.5 -> 0.295 Inexact Rounded -pwsx4569 power 0.872 0.5 -> 0.934 Inexact Rounded -pwsx4570 power 0.0872 0.5 -> 0.295 Inexact Rounded -pwsx4571 power 0.873 0.5 -> 0.934 Inexact Rounded -pwsx4572 power 0.0873 0.5 -> 0.295 Inexact Rounded -pwsx4573 power 0.874 0.5 -> 0.935 Inexact Rounded -pwsx4574 power 0.0874 0.5 -> 0.296 Inexact Rounded -pwsx4575 power 0.875 0.5 -> 0.935 Inexact Rounded -pwsx4576 power 0.0875 0.5 -> 0.296 Inexact Rounded -pwsx4577 power 0.876 0.5 -> 0.936 Inexact Rounded -pwsx4578 power 0.0876 0.5 -> 0.296 Inexact Rounded -pwsx4579 power 0.877 0.5 -> 0.936 Inexact Rounded -pwsx4580 power 0.0877 0.5 -> 0.296 Inexact Rounded -pwsx4581 power 0.878 0.5 -> 0.937 Inexact Rounded -pwsx4582 power 0.0878 0.5 -> 0.296 Inexact Rounded -pwsx4583 power 0.879 0.5 -> 0.938 Inexact Rounded -pwsx4584 power 0.0879 0.5 -> 0.296 Inexact Rounded -pwsx4585 power 0.881 0.5 -> 0.939 Inexact Rounded -pwsx4586 power 0.0881 0.5 -> 0.297 Inexact Rounded -pwsx4587 power 0.882 0.5 -> 0.939 Inexact Rounded -pwsx4588 power 0.0882 0.5 -> 0.297 Inexact Rounded -pwsx4589 power 0.883 0.5 -> 0.940 Inexact Rounded -pwsx4590 power 0.0883 0.5 -> 0.297 Inexact Rounded -pwsx4591 power 0.884 0.5 -> 0.940 Inexact Rounded -pwsx4592 power 0.0884 0.5 -> 0.297 Inexact Rounded -pwsx4593 power 0.885 0.5 -> 0.941 Inexact Rounded -pwsx4594 power 0.0885 0.5 -> 0.297 Inexact Rounded -pwsx4595 power 0.886 0.5 -> 0.941 Inexact Rounded -pwsx4596 power 0.0886 0.5 -> 0.298 Inexact Rounded -pwsx4597 power 0.887 0.5 -> 0.942 Inexact Rounded -pwsx4598 power 0.0887 0.5 -> 0.298 Inexact Rounded -pwsx4599 power 0.888 0.5 -> 0.942 Inexact Rounded -pwsx4600 power 0.0888 0.5 -> 0.298 Inexact Rounded -pwsx4601 power 0.889 0.5 -> 0.943 Inexact Rounded -pwsx4602 power 0.0889 0.5 -> 0.298 Inexact Rounded -pwsx4603 power 0.891 0.5 -> 0.944 Inexact Rounded -pwsx4604 power 0.0891 0.5 -> 0.298 Inexact Rounded -pwsx4605 power 0.892 0.5 -> 0.944 Inexact Rounded -pwsx4606 power 0.0892 0.5 -> 0.299 Inexact Rounded -pwsx4607 power 0.893 0.5 -> 0.945 Inexact Rounded -pwsx4608 power 0.0893 0.5 -> 0.299 Inexact Rounded -pwsx4609 power 0.894 0.5 -> 0.946 Inexact Rounded -pwsx4610 power 0.0894 0.5 -> 0.299 Inexact Rounded -pwsx4611 power 0.895 0.5 -> 0.946 Inexact Rounded -pwsx4612 power 0.0895 0.5 -> 0.299 Inexact Rounded -pwsx4613 power 0.896 0.5 -> 0.947 Inexact Rounded -pwsx4614 power 0.0896 0.5 -> 0.299 Inexact Rounded -pwsx4615 power 0.897 0.5 -> 0.947 Inexact Rounded -pwsx4616 power 0.0897 0.5 -> 0.299 Inexact Rounded -pwsx4617 power 0.898 0.5 -> 0.948 Inexact Rounded -pwsx4618 power 0.0898 0.5 -> 0.300 Inexact Rounded -pwsx4619 power 0.899 0.5 -> 0.948 Inexact Rounded -pwsx4620 power 0.0899 0.5 -> 0.300 Inexact Rounded -pwsx4621 power 0.901 0.5 -> 0.949 Inexact Rounded -pwsx4622 power 0.0901 0.5 -> 0.300 Inexact Rounded -pwsx4623 power 0.902 0.5 -> 0.950 Inexact Rounded -pwsx4624 power 0.0902 0.5 -> 0.300 Inexact Rounded -pwsx4625 power 0.903 0.5 -> 0.950 Inexact Rounded -pwsx4626 power 0.0903 0.5 -> 0.300 Inexact Rounded -pwsx4627 power 0.904 0.5 -> 0.951 Inexact Rounded -pwsx4628 power 0.0904 0.5 -> 0.301 Inexact Rounded -pwsx4629 power 0.905 0.5 -> 0.951 Inexact Rounded -pwsx4630 power 0.0905 0.5 -> 0.301 Inexact Rounded -pwsx4631 power 0.906 0.5 -> 0.952 Inexact Rounded -pwsx4632 power 0.0906 0.5 -> 0.301 Inexact Rounded -pwsx4633 power 0.907 0.5 -> 0.952 Inexact Rounded -pwsx4634 power 0.0907 0.5 -> 0.301 Inexact Rounded -pwsx4635 power 0.908 0.5 -> 0.953 Inexact Rounded -pwsx4636 power 0.0908 0.5 -> 0.301 Inexact Rounded -pwsx4637 power 0.909 0.5 -> 0.953 Inexact Rounded -pwsx4638 power 0.0909 0.5 -> 0.301 Inexact Rounded -pwsx4639 power 0.911 0.5 -> 0.954 Inexact Rounded -pwsx4640 power 0.0911 0.5 -> 0.302 Inexact Rounded -pwsx4641 power 0.912 0.5 -> 0.955 Inexact Rounded -pwsx4642 power 0.0912 0.5 -> 0.302 Inexact Rounded -pwsx4643 power 0.913 0.5 -> 0.956 Inexact Rounded -pwsx4644 power 0.0913 0.5 -> 0.302 Inexact Rounded -pwsx4645 power 0.914 0.5 -> 0.956 Inexact Rounded -pwsx4646 power 0.0914 0.5 -> 0.302 Inexact Rounded -pwsx4647 power 0.915 0.5 -> 0.957 Inexact Rounded -pwsx4648 power 0.0915 0.5 -> 0.302 Inexact Rounded -pwsx4649 power 0.916 0.5 -> 0.957 Inexact Rounded -pwsx4650 power 0.0916 0.5 -> 0.303 Inexact Rounded -pwsx4651 power 0.917 0.5 -> 0.958 Inexact Rounded -pwsx4652 power 0.0917 0.5 -> 0.303 Inexact Rounded -pwsx4653 power 0.918 0.5 -> 0.958 Inexact Rounded -pwsx4654 power 0.0918 0.5 -> 0.303 Inexact Rounded -pwsx4655 power 0.919 0.5 -> 0.959 Inexact Rounded -pwsx4656 power 0.0919 0.5 -> 0.303 Inexact Rounded -pwsx4657 power 0.921 0.5 -> 0.960 Inexact Rounded -pwsx4658 power 0.0921 0.5 -> 0.303 Inexact Rounded -pwsx4659 power 0.922 0.5 -> 0.960 Inexact Rounded -pwsx4660 power 0.0922 0.5 -> 0.304 Inexact Rounded -pwsx4661 power 0.923 0.5 -> 0.961 Inexact Rounded -pwsx4662 power 0.0923 0.5 -> 0.304 Inexact Rounded -pwsx4663 power 0.924 0.5 -> 0.961 Inexact Rounded -pwsx4664 power 0.0924 0.5 -> 0.304 Inexact Rounded -pwsx4665 power 0.925 0.5 -> 0.962 Inexact Rounded -pwsx4666 power 0.0925 0.5 -> 0.304 Inexact Rounded -pwsx4667 power 0.926 0.5 -> 0.962 Inexact Rounded -pwsx4668 power 0.0926 0.5 -> 0.304 Inexact Rounded -pwsx4669 power 0.927 0.5 -> 0.963 Inexact Rounded -pwsx4670 power 0.0927 0.5 -> 0.304 Inexact Rounded -pwsx4671 power 0.928 0.5 -> 0.963 Inexact Rounded -pwsx4672 power 0.0928 0.5 -> 0.305 Inexact Rounded -pwsx4673 power 0.929 0.5 -> 0.964 Inexact Rounded -pwsx4674 power 0.0929 0.5 -> 0.305 Inexact Rounded -pwsx4675 power 0.931 0.5 -> 0.965 Inexact Rounded -pwsx4676 power 0.0931 0.5 -> 0.305 Inexact Rounded -pwsx4677 power 0.932 0.5 -> 0.965 Inexact Rounded -pwsx4678 power 0.0932 0.5 -> 0.305 Inexact Rounded -pwsx4679 power 0.933 0.5 -> 0.966 Inexact Rounded -pwsx4680 power 0.0933 0.5 -> 0.305 Inexact Rounded -pwsx4681 power 0.934 0.5 -> 0.966 Inexact Rounded -pwsx4682 power 0.0934 0.5 -> 0.306 Inexact Rounded -pwsx4683 power 0.935 0.5 -> 0.967 Inexact Rounded -pwsx4684 power 0.0935 0.5 -> 0.306 Inexact Rounded -pwsx4685 power 0.936 0.5 -> 0.967 Inexact Rounded -pwsx4686 power 0.0936 0.5 -> 0.306 Inexact Rounded -pwsx4687 power 0.937 0.5 -> 0.968 Inexact Rounded -pwsx4688 power 0.0937 0.5 -> 0.306 Inexact Rounded -pwsx4689 power 0.938 0.5 -> 0.969 Inexact Rounded -pwsx4690 power 0.0938 0.5 -> 0.306 Inexact Rounded -pwsx4691 power 0.939 0.5 -> 0.969 Inexact Rounded -pwsx4692 power 0.0939 0.5 -> 0.306 Inexact Rounded -pwsx4693 power 0.941 0.5 -> 0.970 Inexact Rounded -pwsx4694 power 0.0941 0.5 -> 0.307 Inexact Rounded -pwsx4695 power 0.942 0.5 -> 0.971 Inexact Rounded -pwsx4696 power 0.0942 0.5 -> 0.307 Inexact Rounded -pwsx4697 power 0.943 0.5 -> 0.971 Inexact Rounded -pwsx4698 power 0.0943 0.5 -> 0.307 Inexact Rounded -pwsx4699 power 0.944 0.5 -> 0.972 Inexact Rounded -pwsx4700 power 0.0944 0.5 -> 0.307 Inexact Rounded -pwsx4701 power 0.945 0.5 -> 0.972 Inexact Rounded -pwsx4702 power 0.0945 0.5 -> 0.307 Inexact Rounded -pwsx4703 power 0.946 0.5 -> 0.973 Inexact Rounded -pwsx4704 power 0.0946 0.5 -> 0.308 Inexact Rounded -pwsx4705 power 0.947 0.5 -> 0.973 Inexact Rounded -pwsx4706 power 0.0947 0.5 -> 0.308 Inexact Rounded -pwsx4707 power 0.948 0.5 -> 0.974 Inexact Rounded -pwsx4708 power 0.0948 0.5 -> 0.308 Inexact Rounded -pwsx4709 power 0.949 0.5 -> 0.974 Inexact Rounded -pwsx4710 power 0.0949 0.5 -> 0.308 Inexact Rounded -pwsx4711 power 0.951 0.5 -> 0.975 Inexact Rounded -pwsx4712 power 0.0951 0.5 -> 0.308 Inexact Rounded -pwsx4713 power 0.952 0.5 -> 0.976 Inexact Rounded -pwsx4714 power 0.0952 0.5 -> 0.309 Inexact Rounded -pwsx4715 power 0.953 0.5 -> 0.976 Inexact Rounded -pwsx4716 power 0.0953 0.5 -> 0.309 Inexact Rounded -pwsx4717 power 0.954 0.5 -> 0.977 Inexact Rounded -pwsx4718 power 0.0954 0.5 -> 0.309 Inexact Rounded -pwsx4719 power 0.955 0.5 -> 0.977 Inexact Rounded -pwsx4720 power 0.0955 0.5 -> 0.309 Inexact Rounded -pwsx4721 power 0.956 0.5 -> 0.978 Inexact Rounded -pwsx4722 power 0.0956 0.5 -> 0.309 Inexact Rounded -pwsx4723 power 0.957 0.5 -> 0.978 Inexact Rounded -pwsx4724 power 0.0957 0.5 -> 0.309 Inexact Rounded -pwsx4725 power 0.958 0.5 -> 0.979 Inexact Rounded -pwsx4726 power 0.0958 0.5 -> 0.310 Inexact Rounded -pwsx4727 power 0.959 0.5 -> 0.979 Inexact Rounded -pwsx4728 power 0.0959 0.5 -> 0.310 Inexact Rounded -pwsx4729 power 0.961 0.5 -> 0.980 Inexact Rounded -pwsx4730 power 0.0961 0.5 -> 0.310 Inexact Rounded -pwsx4731 power 0.962 0.5 -> 0.981 Inexact Rounded -pwsx4732 power 0.0962 0.5 -> 0.310 Inexact Rounded -pwsx4733 power 0.963 0.5 -> 0.981 Inexact Rounded -pwsx4734 power 0.0963 0.5 -> 0.310 Inexact Rounded -pwsx4735 power 0.964 0.5 -> 0.982 Inexact Rounded -pwsx4736 power 0.0964 0.5 -> 0.310 Inexact Rounded -pwsx4737 power 0.965 0.5 -> 0.982 Inexact Rounded -pwsx4738 power 0.0965 0.5 -> 0.311 Inexact Rounded -pwsx4739 power 0.966 0.5 -> 0.983 Inexact Rounded -pwsx4740 power 0.0966 0.5 -> 0.311 Inexact Rounded -pwsx4741 power 0.967 0.5 -> 0.983 Inexact Rounded -pwsx4742 power 0.0967 0.5 -> 0.311 Inexact Rounded -pwsx4743 power 0.968 0.5 -> 0.984 Inexact Rounded -pwsx4744 power 0.0968 0.5 -> 0.311 Inexact Rounded -pwsx4745 power 0.969 0.5 -> 0.984 Inexact Rounded -pwsx4746 power 0.0969 0.5 -> 0.311 Inexact Rounded -pwsx4747 power 0.971 0.5 -> 0.985 Inexact Rounded -pwsx4748 power 0.0971 0.5 -> 0.312 Inexact Rounded -pwsx4749 power 0.972 0.5 -> 0.986 Inexact Rounded -pwsx4750 power 0.0972 0.5 -> 0.312 Inexact Rounded -pwsx4751 power 0.973 0.5 -> 0.986 Inexact Rounded -pwsx4752 power 0.0973 0.5 -> 0.312 Inexact Rounded -pwsx4753 power 0.974 0.5 -> 0.987 Inexact Rounded -pwsx4754 power 0.0974 0.5 -> 0.312 Inexact Rounded -pwsx4755 power 0.975 0.5 -> 0.987 Inexact Rounded -pwsx4756 power 0.0975 0.5 -> 0.312 Inexact Rounded -pwsx4757 power 0.976 0.5 -> 0.988 Inexact Rounded -pwsx4758 power 0.0976 0.5 -> 0.312 Inexact Rounded -pwsx4759 power 0.977 0.5 -> 0.988 Inexact Rounded -pwsx4760 power 0.0977 0.5 -> 0.313 Inexact Rounded -pwsx4761 power 0.978 0.5 -> 0.989 Inexact Rounded -pwsx4762 power 0.0978 0.5 -> 0.313 Inexact Rounded -pwsx4763 power 0.979 0.5 -> 0.989 Inexact Rounded -pwsx4764 power 0.0979 0.5 -> 0.313 Inexact Rounded -pwsx4765 power 0.981 0.5 -> 0.990 Inexact Rounded -pwsx4766 power 0.0981 0.5 -> 0.313 Inexact Rounded -pwsx4767 power 0.982 0.5 -> 0.991 Inexact Rounded -pwsx4768 power 0.0982 0.5 -> 0.313 Inexact Rounded -pwsx4769 power 0.983 0.5 -> 0.991 Inexact Rounded -pwsx4770 power 0.0983 0.5 -> 0.314 Inexact Rounded -pwsx4771 power 0.984 0.5 -> 0.992 Inexact Rounded -pwsx4772 power 0.0984 0.5 -> 0.314 Inexact Rounded -pwsx4773 power 0.985 0.5 -> 0.992 Inexact Rounded -pwsx4774 power 0.0985 0.5 -> 0.314 Inexact Rounded -pwsx4775 power 0.986 0.5 -> 0.993 Inexact Rounded -pwsx4776 power 0.0986 0.5 -> 0.314 Inexact Rounded -pwsx4777 power 0.987 0.5 -> 0.993 Inexact Rounded -pwsx4778 power 0.0987 0.5 -> 0.314 Inexact Rounded -pwsx4779 power 0.988 0.5 -> 0.994 Inexact Rounded -pwsx4780 power 0.0988 0.5 -> 0.314 Inexact Rounded -pwsx4781 power 0.989 0.5 -> 0.994 Inexact Rounded -pwsx4782 power 0.0989 0.5 -> 0.314 Inexact Rounded -pwsx4783 power 0.991 0.5 -> 0.995 Inexact Rounded -pwsx4784 power 0.0991 0.5 -> 0.315 Inexact Rounded -pwsx4785 power 0.992 0.5 -> 0.996 Inexact Rounded -pwsx4786 power 0.0992 0.5 -> 0.315 Inexact Rounded -pwsx4787 power 0.993 0.5 -> 0.996 Inexact Rounded -pwsx4788 power 0.0993 0.5 -> 0.315 Inexact Rounded -pwsx4789 power 0.994 0.5 -> 0.997 Inexact Rounded -pwsx4790 power 0.0994 0.5 -> 0.315 Inexact Rounded -pwsx4791 power 0.995 0.5 -> 0.997 Inexact Rounded -pwsx4792 power 0.0995 0.5 -> 0.315 Inexact Rounded -pwsx4793 power 0.996 0.5 -> 0.998 Inexact Rounded -pwsx4794 power 0.0996 0.5 -> 0.316 Inexact Rounded -pwsx4795 power 0.997 0.5 -> 0.998 Inexact Rounded -pwsx4796 power 0.0997 0.5 -> 0.316 Inexact Rounded -pwsx4797 power 0.998 0.5 -> 0.999 Inexact Rounded -pwsx4798 power 0.0998 0.5 -> 0.316 Inexact Rounded -pwsx4799 power 0.999 0.5 -> 0.999 Inexact Rounded -pwsx4800 power 0.0999 0.5 -> 0.316 Inexact Rounded - --- A group of precision 4 tests where Hull & Abrham adjustments are --- needed in some cases (both up and down) [see Hull1985b] -rounding: half_even -maxExponent: 999 -minexponent: -999 -precision: 4 -pwsx5001 power 0.0118 0.5 -> 0.1086 Inexact Rounded -pwsx5002 power 0.119 0.5 -> 0.3450 Inexact Rounded -pwsx5003 power 0.0119 0.5 -> 0.1091 Inexact Rounded -pwsx5004 power 0.121 0.5 -> 0.3479 Inexact Rounded -pwsx5005 power 0.0121 0.5 -> 0.1100 Inexact Rounded -pwsx5006 power 0.122 0.5 -> 0.3493 Inexact Rounded -pwsx5007 power 0.0122 0.5 -> 0.1105 Inexact Rounded -pwsx5008 power 0.123 0.5 -> 0.3507 Inexact Rounded -pwsx5009 power 0.494 0.5 -> 0.7029 Inexact Rounded -pwsx5010 power 0.0669 0.5 -> 0.2587 Inexact Rounded -pwsx5011 power 0.9558 0.5 -> 0.9777 Inexact Rounded -pwsx5012 power 0.9348 0.5 -> 0.9669 Inexact Rounded -pwsx5013 power 0.9345 0.5 -> 0.9667 Inexact Rounded -pwsx5014 power 0.09345 0.5 -> 0.3057 Inexact Rounded -pwsx5015 power 0.9346 0.5 -> 0.9667 Inexact Rounded -pwsx5016 power 0.09346 0.5 -> 0.3057 Inexact Rounded -pwsx5017 power 0.9347 0.5 -> 0.9668 Inexact Rounded - --- examples from decArith -precision: 9 -pwsx700 power 0 0.5 -> '0' -pwsx701 power -0 0.5 -> '0' -pwsx702 power 0.39 0.5 -> 0.624499800 Inexact Rounded -pwsx703 power 100 0.5 -> '10.0000000' Inexact Rounded -pwsx704 power 1.00 0.5 -> '1.00000000' Inexact Rounded -pwsx705 power 7 0.5 -> '2.64575131' Inexact Rounded -pwsx706 power 10 0.5 -> 3.16227766 Inexact Rounded - --- some one-offs -precision: 9 -pwsx711 power 0.1 0.5 -> 0.316227766 Inexact Rounded -pwsx712 power 0.2 0.5 -> 0.447213595 Inexact Rounded -pwsx713 power 0.3 0.5 -> 0.547722558 Inexact Rounded -pwsx714 power 0.4 0.5 -> 0.632455532 Inexact Rounded -pwsx715 power 0.5 0.5 -> 0.707106781 Inexact Rounded -pwsx716 power 0.6 0.5 -> 0.774596669 Inexact Rounded -pwsx717 power 0.7 0.5 -> 0.836660027 Inexact Rounded -pwsx718 power 0.8 0.5 -> 0.894427191 Inexact Rounded -pwsx719 power 0.9 0.5 -> 0.948683298 Inexact Rounded -precision: 10 -- note no normalizatoin here -pwsx720 power +0.1 0.5 -> 0.3162277660 Inexact Rounded -precision: 11 -pwsx721 power +0.1 0.5 -> 0.31622776602 Inexact Rounded -precision: 12 -pwsx722 power +0.1 0.5 -> 0.316227766017 Inexact Rounded -precision: 9 -pwsx723 power 0.39 0.5 -> 0.624499800 Inexact Rounded -precision: 15 -pwsx724 power 0.39 0.5 -> 0.624499799839840 Inexact Rounded - --- discussion cases -precision: 7 -pwsx731 power 9 0.5 -> 3.000000 Inexact Rounded -pwsx732 power 100 0.5 -> 10.00000 Inexact Rounded -pwsx733 power 123 0.5 -> 11.09054 Inexact Rounded -pwsx734 power 144 0.5 -> 12.00000 Inexact Rounded -pwsx735 power 156 0.5 -> 12.49000 Inexact Rounded -pwsx736 power 10000 0.5 -> 100.0000 Inexact Rounded - --- values close to overflow (if there were input rounding) -maxexponent: 99 -minexponent: -99 -precision: 5 -pwsx760 power 9.9997E+99 0.5 -> 9.9998E+49 Inexact Rounded -pwsx761 power 9.9998E+99 0.5 -> 9.9999E+49 Inexact Rounded -pwsx762 power 9.9999E+99 0.5 -> 9.9999E+49 Inexact Rounded -pwsx763 power 9.99991E+99 0.5 -> 1.0000E+50 Inexact Rounded -pwsx764 power 9.99994E+99 0.5 -> 1.0000E+50 Inexact Rounded -pwsx765 power 9.99995E+99 0.5 -> 1.0000E+50 Inexact Rounded -pwsx766 power 9.99999E+99 0.5 -> 1.0000E+50 Inexact Rounded -precision: 9 -pwsx770 power 9.9997E+99 0.5 -> 9.99985000E+49 Inexact Rounded -pwsx771 power 9.9998E+99 0.5 -> 9.99990000E+49 Inexact Rounded -pwsx772 power 9.9999E+99 0.5 -> 9.99995000E+49 Inexact Rounded -pwsx773 power 9.99991E+99 0.5 -> 9.99995500E+49 Inexact Rounded -pwsx774 power 9.99994E+99 0.5 -> 9.99997000E+49 Inexact Rounded -pwsx775 power 9.99995E+99 0.5 -> 9.99997500E+49 Inexact Rounded -pwsx776 power 9.99999E+99 0.5 -> 9.99999500E+49 Inexact Rounded -precision: 20 -pwsx780 power 9.9997E+99 0.5 -> '9.9998499988749831247E+49' Inexact Rounded -pwsx781 power 9.9998E+99 0.5 -> '9.9998999994999949999E+49' Inexact Rounded -pwsx782 power 9.9999E+99 0.5 -> '9.9999499998749993750E+49' Inexact Rounded -pwsx783 power 9.99991E+99 0.5 -> '9.9999549998987495444E+49' Inexact Rounded -pwsx784 power 9.99994E+99 0.5 -> '9.9999699999549998650E+49' Inexact Rounded -pwsx785 power 9.99995E+99 0.5 -> '9.9999749999687499219E+49' Inexact Rounded -pwsx786 power 9.99999E+99 0.5 -> '9.9999949999987499994E+49' Inexact Rounded - --- subnormals and underflows [these can only result when eMax is < digits+1] --- Etiny = -(Emax + (precision-1)) --- start with subnormal operands and normal results -maxexponent: 9 -minexponent: -9 -precision: 9 -- Etiny=-17 -pwsx800 power 1E-17 0.5 -> 3.16227766E-9 Inexact Rounded -pwsx801 power 10E-17 0.5 -> 1.00000000E-8 Inexact Rounded -precision: 10 -- Etiny=-18 -pwsx802 power 10E-18 0.5 -> 3.162277660E-9 Inexact Rounded -pwsx803 power 1E-18 0.5 -> 1.000000000E-9 Inexact Rounded - -precision: 11 -- Etiny=-19 -pwsx804 power 1E-19 0.5 -> 3.162277660E-10 Underflow Subnormal Inexact Rounded --- The next test should be skipped for decNumber -pwsx805 power 10E-19 0.5 -> 1.0000000000E-9 Inexact Rounded -precision: 12 -- Etiny=-20 -pwsx806 power 10E-20 0.5 -> 3.1622776602E-10 Underflow Subnormal Inexact Rounded -pwsx807 power 1E-20 0.5 -> 1.0000000000E-10 Underflow Subnormal Inexact Rounded - -precision: 13 -- Etiny=-21 -pwsx808 power 1E-21 0.5 -> 3.1622776602E-11 Underflow Subnormal Inexact Rounded -pwsx809 power 10E-21 0.5 -> 1.00000000000E-10 Underflow Subnormal Inexact Rounded -precision: 14 -- Etiny=-22 -pwsx810 power 1E-21 0.5 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded -pwsx811 power 10E-22 0.5 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded -pwsx812 power 1E-22 0.5 -> 1.00000000000E-11 Underflow Subnormal Inexact Rounded - - --- special values -maxexponent: 999 -minexponent: -999 -pwsx820 power Inf 0.5 -> Infinity -pwsx821 power -Inf 0.5 -> NaN Invalid_operation -pwsx822 power NaN 0.5 -> NaN -pwsx823 power sNaN 0.5 -> NaN Invalid_operation --- propagating NaNs -pwsx824 power sNaN123 0.5 -> NaN123 Invalid_operation -pwsx825 power -sNaN321 0.5 -> -NaN321 Invalid_operation -pwsx826 power NaN456 0.5 -> NaN456 -pwsx827 power -NaN654 0.5 -> -NaN654 -pwsx828 power NaN1 0.5 -> NaN1 - --- Null test -pwsx900 power # 0.5 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- powersqrt.decTest -- decimal square root, using power -- +-- Copyright (c) IBM Corporation, 2004, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- These testcases are taken from squareroot.decTest but are +-- evaluated using the power operator. The differences in results +-- (153 out of 2856) fall into the following categories: +-- +-- x ** 0.5 (x>0) has no preferred exponent, and is Inexact +-- (and hence full precision); almost all differences are +-- in this category +-- 0.00 ** 0.5 becomes 0 (not 0.0), etc. +-- -0 ** 0.5 becomes 0 (never -0) +-- Some exact subnormals become inexact and hence underflows + +extended: 1 +precision: 9 +rounding: half_even +maxExponent: 384 +minexponent: -383 + +-- basics +pwsx001 power 1 0.5 -> 1.00000000 Inexact Rounded +pwsx002 power -1 0.5 -> NaN Invalid_operation +pwsx003 power 1.00 0.5 -> 1.00000000 Inexact Rounded +pwsx004 power -1.00 0.5 -> NaN Invalid_operation +pwsx005 power 0 0.5 -> 0 +pwsx006 power 00.0 0.5 -> 0 +pwsx007 power 0.00 0.5 -> 0 +pwsx008 power 00.00 0.5 -> 0 +pwsx009 power 00.000 0.5 -> 0 +pwsx010 power 00.0000 0.5 -> 0 +pwsx011 power 00 0.5 -> 0 + +pwsx012 power -2 0.5 -> NaN Invalid_operation +pwsx013 power 2 0.5 -> 1.41421356 Inexact Rounded +pwsx014 power -2.00 0.5 -> NaN Invalid_operation +pwsx015 power 2.00 0.5 -> 1.41421356 Inexact Rounded +pwsx016 power -0 0.5 -> 0 +pwsx017 power -0.0 0.5 -> 0 +pwsx018 power -00.00 0.5 -> 0 +pwsx019 power -00.000 0.5 -> 0 +pwsx020 power -0.0000 0.5 -> 0 +pwsx021 power -0E+9 0.5 -> 0 +pwsx022 power -0E+10 0.5 -> 0 +pwsx023 power -0E+11 0.5 -> 0 +pwsx024 power -0E+12 0.5 -> 0 +pwsx025 power -00 0.5 -> 0 +pwsx026 power 0E+5 0.5 -> 0 +pwsx027 power 4.0 0.5 -> 2.00000000 Inexact Rounded +pwsx028 power 4.00 0.5 -> 2.00000000 Inexact Rounded + +pwsx030 power +0.1 0.5 -> 0.316227766 Inexact Rounded +pwsx031 power -0.1 0.5 -> NaN Invalid_operation +pwsx032 power +0.01 0.5 -> 0.100000000 Inexact Rounded +pwsx033 power -0.01 0.5 -> NaN Invalid_operation +pwsx034 power +0.001 0.5 -> 0.0316227766 Inexact Rounded +pwsx035 power -0.001 0.5 -> NaN Invalid_operation +pwsx036 power +0.000001 0.5 -> 0.00100000000 Inexact Rounded +pwsx037 power -0.000001 0.5 -> NaN Invalid_operation +pwsx038 power +0.000000000001 0.5 -> 0.00000100000000 Inexact Rounded +pwsx039 power -0.000000000001 0.5 -> NaN Invalid_operation + +pwsx041 power 1.1 0.5 -> 1.04880885 Inexact Rounded +pwsx042 power 1.10 0.5 -> 1.04880885 Inexact Rounded +pwsx043 power 1.100 0.5 -> 1.04880885 Inexact Rounded +pwsx044 power 1.110 0.5 -> 1.05356538 Inexact Rounded +pwsx045 power -1.1 0.5 -> NaN Invalid_operation +pwsx046 power -1.10 0.5 -> NaN Invalid_operation +pwsx047 power -1.100 0.5 -> NaN Invalid_operation +pwsx048 power -1.110 0.5 -> NaN Invalid_operation +pwsx049 power 9.9 0.5 -> 3.14642654 Inexact Rounded +pwsx050 power 9.90 0.5 -> 3.14642654 Inexact Rounded +pwsx051 power 9.900 0.5 -> 3.14642654 Inexact Rounded +pwsx052 power 9.990 0.5 -> 3.16069613 Inexact Rounded +pwsx053 power -9.9 0.5 -> NaN Invalid_operation +pwsx054 power -9.90 0.5 -> NaN Invalid_operation +pwsx055 power -9.900 0.5 -> NaN Invalid_operation +pwsx056 power -9.990 0.5 -> NaN Invalid_operation + +pwsx060 power 1 0.5 -> 1.00000000 Inexact Rounded +pwsx061 power 1.0 0.5 -> 1.00000000 Inexact Rounded +pwsx062 power 1.00 0.5 -> 1.00000000 Inexact Rounded +pwsx063 power 10.0 0.5 -> 3.16227766 Inexact Rounded +pwsx064 power 10.0 0.5 -> 3.16227766 Inexact Rounded +pwsx065 power 10.0 0.5 -> 3.16227766 Inexact Rounded +pwsx066 power 10.00 0.5 -> 3.16227766 Inexact Rounded +pwsx067 power 100 0.5 -> 10.0000000 Inexact Rounded +pwsx068 power 100.0 0.5 -> 10.0000000 Inexact Rounded +pwsx069 power 100.00 0.5 -> 10.0000000 Inexact Rounded +pwsx070 power 1.1000E+3 0.5 -> 33.1662479 Inexact Rounded +pwsx071 power 1.10000E+3 0.5 -> 33.1662479 Inexact Rounded +pwsx072 power -10.0 0.5 -> NaN Invalid_operation +pwsx073 power -10.00 0.5 -> NaN Invalid_operation +pwsx074 power -100.0 0.5 -> NaN Invalid_operation +pwsx075 power -100.00 0.5 -> NaN Invalid_operation +pwsx076 power -1.1000E+3 0.5 -> NaN Invalid_operation +pwsx077 power -1.10000E+3 0.5 -> NaN Invalid_operation + +-- famous squares +pwsx080 power 1 0.5 -> 1.00000000 Inexact Rounded +pwsx081 power 4 0.5 -> 2.00000000 Inexact Rounded +pwsx082 power 9 0.5 -> 3.00000000 Inexact Rounded +pwsx083 power 16 0.5 -> 4.00000000 Inexact Rounded +pwsx084 power 25 0.5 -> 5.00000000 Inexact Rounded +pwsx085 power 36 0.5 -> 6.00000000 Inexact Rounded +pwsx086 power 49 0.5 -> 7.00000000 Inexact Rounded +pwsx087 power 64 0.5 -> 8.00000000 Inexact Rounded +pwsx088 power 81 0.5 -> 9.00000000 Inexact Rounded +pwsx089 power 100 0.5 -> 10.0000000 Inexact Rounded +pwsx090 power 121 0.5 -> 11.0000000 Inexact Rounded +pwsx091 power 144 0.5 -> 12.0000000 Inexact Rounded +pwsx092 power 169 0.5 -> 13.0000000 Inexact Rounded +pwsx093 power 256 0.5 -> 16.0000000 Inexact Rounded +pwsx094 power 1024 0.5 -> 32.0000000 Inexact Rounded +pwsx095 power 4096 0.5 -> 64.0000000 Inexact Rounded +pwsx100 power 0.01 0.5 -> 0.100000000 Inexact Rounded +pwsx101 power 0.04 0.5 -> 0.200000000 Inexact Rounded +pwsx102 power 0.09 0.5 -> 0.300000000 Inexact Rounded +pwsx103 power 0.16 0.5 -> 0.400000000 Inexact Rounded +pwsx104 power 0.25 0.5 -> 0.500000000 Inexact Rounded +pwsx105 power 0.36 0.5 -> 0.600000000 Inexact Rounded +pwsx106 power 0.49 0.5 -> 0.700000000 Inexact Rounded +pwsx107 power 0.64 0.5 -> 0.800000000 Inexact Rounded +pwsx108 power 0.81 0.5 -> 0.900000000 Inexact Rounded +pwsx109 power 1.00 0.5 -> 1.00000000 Inexact Rounded +pwsx110 power 1.21 0.5 -> 1.10000000 Inexact Rounded +pwsx111 power 1.44 0.5 -> 1.20000000 Inexact Rounded +pwsx112 power 1.69 0.5 -> 1.30000000 Inexact Rounded +pwsx113 power 2.56 0.5 -> 1.60000000 Inexact Rounded +pwsx114 power 10.24 0.5 -> 3.20000000 Inexact Rounded +pwsx115 power 40.96 0.5 -> 6.40000000 Inexact Rounded + +-- Precision 1 squareroot tests [exhaustive, plus exponent adjusts] +rounding: half_even +maxExponent: 999 +minexponent: -999 +precision: 1 +pwsx1201 power 0.1 0.5 -> 0.3 Inexact Rounded +pwsx1202 power 0.01 0.5 -> 0.1 Inexact Rounded +pwsx1203 power 1.0E-1 0.5 -> 0.3 Inexact Rounded +pwsx1204 power 1.00E-2 0.5 -> 0.1 Inexact Rounded +pwsx1205 power 1E-3 0.5 -> 0.03 Inexact Rounded +pwsx1206 power 1E+1 0.5 -> 3 Inexact Rounded +pwsx1207 power 1E+2 0.5 -> 1E+1 Inexact Rounded +pwsx1208 power 1E+3 0.5 -> 3E+1 Inexact Rounded +pwsx1209 power 0.2 0.5 -> 0.4 Inexact Rounded +pwsx1210 power 0.02 0.5 -> 0.1 Inexact Rounded +pwsx1211 power 2.0E-1 0.5 -> 0.4 Inexact Rounded +pwsx1212 power 2.00E-2 0.5 -> 0.1 Inexact Rounded +pwsx1213 power 2E-3 0.5 -> 0.04 Inexact Rounded +pwsx1214 power 2E+1 0.5 -> 4 Inexact Rounded +pwsx1215 power 2E+2 0.5 -> 1E+1 Inexact Rounded +pwsx1216 power 2E+3 0.5 -> 4E+1 Inexact Rounded +pwsx1217 power 0.3 0.5 -> 0.5 Inexact Rounded +pwsx1218 power 0.03 0.5 -> 0.2 Inexact Rounded +pwsx1219 power 3.0E-1 0.5 -> 0.5 Inexact Rounded +pwsx1220 power 3.00E-2 0.5 -> 0.2 Inexact Rounded +pwsx1221 power 3E-3 0.5 -> 0.05 Inexact Rounded +pwsx1222 power 3E+1 0.5 -> 5 Inexact Rounded +pwsx1223 power 3E+2 0.5 -> 2E+1 Inexact Rounded +pwsx1224 power 3E+3 0.5 -> 5E+1 Inexact Rounded +pwsx1225 power 0.4 0.5 -> 0.6 Inexact Rounded +pwsx1226 power 0.04 0.5 -> 0.2 Inexact Rounded +pwsx1227 power 4.0E-1 0.5 -> 0.6 Inexact Rounded +pwsx1228 power 4.00E-2 0.5 -> 0.2 Inexact Rounded +pwsx1229 power 4E-3 0.5 -> 0.06 Inexact Rounded +pwsx1230 power 4E+1 0.5 -> 6 Inexact Rounded +pwsx1231 power 4E+2 0.5 -> 2E+1 Inexact Rounded +pwsx1232 power 4E+3 0.5 -> 6E+1 Inexact Rounded +pwsx1233 power 0.5 0.5 -> 0.7 Inexact Rounded +pwsx1234 power 0.05 0.5 -> 0.2 Inexact Rounded +pwsx1235 power 5.0E-1 0.5 -> 0.7 Inexact Rounded +pwsx1236 power 5.00E-2 0.5 -> 0.2 Inexact Rounded +pwsx1237 power 5E-3 0.5 -> 0.07 Inexact Rounded +pwsx1238 power 5E+1 0.5 -> 7 Inexact Rounded +pwsx1239 power 5E+2 0.5 -> 2E+1 Inexact Rounded +pwsx1240 power 5E+3 0.5 -> 7E+1 Inexact Rounded +pwsx1241 power 0.6 0.5 -> 0.8 Inexact Rounded +pwsx1242 power 0.06 0.5 -> 0.2 Inexact Rounded +pwsx1243 power 6.0E-1 0.5 -> 0.8 Inexact Rounded +pwsx1244 power 6.00E-2 0.5 -> 0.2 Inexact Rounded +pwsx1245 power 6E-3 0.5 -> 0.08 Inexact Rounded +pwsx1246 power 6E+1 0.5 -> 8 Inexact Rounded +pwsx1247 power 6E+2 0.5 -> 2E+1 Inexact Rounded +pwsx1248 power 6E+3 0.5 -> 8E+1 Inexact Rounded +pwsx1249 power 0.7 0.5 -> 0.8 Inexact Rounded +pwsx1250 power 0.07 0.5 -> 0.3 Inexact Rounded +pwsx1251 power 7.0E-1 0.5 -> 0.8 Inexact Rounded +pwsx1252 power 7.00E-2 0.5 -> 0.3 Inexact Rounded +pwsx1253 power 7E-3 0.5 -> 0.08 Inexact Rounded +pwsx1254 power 7E+1 0.5 -> 8 Inexact Rounded +pwsx1255 power 7E+2 0.5 -> 3E+1 Inexact Rounded +pwsx1256 power 7E+3 0.5 -> 8E+1 Inexact Rounded +pwsx1257 power 0.8 0.5 -> 0.9 Inexact Rounded +pwsx1258 power 0.08 0.5 -> 0.3 Inexact Rounded +pwsx1259 power 8.0E-1 0.5 -> 0.9 Inexact Rounded +pwsx1260 power 8.00E-2 0.5 -> 0.3 Inexact Rounded +pwsx1261 power 8E-3 0.5 -> 0.09 Inexact Rounded +pwsx1262 power 8E+1 0.5 -> 9 Inexact Rounded +pwsx1263 power 8E+2 0.5 -> 3E+1 Inexact Rounded +pwsx1264 power 8E+3 0.5 -> 9E+1 Inexact Rounded +pwsx1265 power 0.9 0.5 -> 0.9 Inexact Rounded +pwsx1266 power 0.09 0.5 -> 0.3 Inexact Rounded +pwsx1267 power 9.0E-1 0.5 -> 0.9 Inexact Rounded +pwsx1268 power 9.00E-2 0.5 -> 0.3 Inexact Rounded +pwsx1269 power 9E-3 0.5 -> 0.09 Inexact Rounded +pwsx1270 power 9E+1 0.5 -> 9 Inexact Rounded +pwsx1271 power 9E+2 0.5 -> 3E+1 Inexact Rounded +pwsx1272 power 9E+3 0.5 -> 9E+1 Inexact Rounded + +-- Precision 2 squareroot tests [exhaustive, plus exponent adjusts] +rounding: half_even +maxExponent: 999 +minexponent: -999 +precision: 2 +pwsx2201 power 0.1 0.5 -> 0.32 Inexact Rounded +pwsx2202 power 0.01 0.5 -> 0.10 Inexact Rounded +pwsx2203 power 1.0E-1 0.5 -> 0.32 Inexact Rounded +pwsx2204 power 1.00E-2 0.5 -> 0.10 Inexact Rounded +pwsx2205 power 1E-3 0.5 -> 0.032 Inexact Rounded +pwsx2206 power 1E+1 0.5 -> 3.2 Inexact Rounded +pwsx2207 power 1E+2 0.5 -> 10 Inexact Rounded +pwsx2208 power 1E+3 0.5 -> 32 Inexact Rounded +pwsx2209 power 0.2 0.5 -> 0.45 Inexact Rounded +pwsx2210 power 0.02 0.5 -> 0.14 Inexact Rounded +pwsx2211 power 2.0E-1 0.5 -> 0.45 Inexact Rounded +pwsx2212 power 2.00E-2 0.5 -> 0.14 Inexact Rounded +pwsx2213 power 2E-3 0.5 -> 0.045 Inexact Rounded +pwsx2214 power 2E+1 0.5 -> 4.5 Inexact Rounded +pwsx2215 power 2E+2 0.5 -> 14 Inexact Rounded +pwsx2216 power 2E+3 0.5 -> 45 Inexact Rounded +pwsx2217 power 0.3 0.5 -> 0.55 Inexact Rounded +pwsx2218 power 0.03 0.5 -> 0.17 Inexact Rounded +pwsx2219 power 3.0E-1 0.5 -> 0.55 Inexact Rounded +pwsx2220 power 3.00E-2 0.5 -> 0.17 Inexact Rounded +pwsx2221 power 3E-3 0.5 -> 0.055 Inexact Rounded +pwsx2222 power 3E+1 0.5 -> 5.5 Inexact Rounded +pwsx2223 power 3E+2 0.5 -> 17 Inexact Rounded +pwsx2224 power 3E+3 0.5 -> 55 Inexact Rounded +pwsx2225 power 0.4 0.5 -> 0.63 Inexact Rounded +pwsx2226 power 0.04 0.5 -> 0.20 Inexact Rounded +pwsx2227 power 4.0E-1 0.5 -> 0.63 Inexact Rounded +pwsx2228 power 4.00E-2 0.5 -> 0.20 Inexact Rounded +pwsx2229 power 4E-3 0.5 -> 0.063 Inexact Rounded +pwsx2230 power 4E+1 0.5 -> 6.3 Inexact Rounded +pwsx2231 power 4E+2 0.5 -> 20 Inexact Rounded +pwsx2232 power 4E+3 0.5 -> 63 Inexact Rounded +pwsx2233 power 0.5 0.5 -> 0.71 Inexact Rounded +pwsx2234 power 0.05 0.5 -> 0.22 Inexact Rounded +pwsx2235 power 5.0E-1 0.5 -> 0.71 Inexact Rounded +pwsx2236 power 5.00E-2 0.5 -> 0.22 Inexact Rounded +pwsx2237 power 5E-3 0.5 -> 0.071 Inexact Rounded +pwsx2238 power 5E+1 0.5 -> 7.1 Inexact Rounded +pwsx2239 power 5E+2 0.5 -> 22 Inexact Rounded +pwsx2240 power 5E+3 0.5 -> 71 Inexact Rounded +pwsx2241 power 0.6 0.5 -> 0.77 Inexact Rounded +pwsx2242 power 0.06 0.5 -> 0.24 Inexact Rounded +pwsx2243 power 6.0E-1 0.5 -> 0.77 Inexact Rounded +pwsx2244 power 6.00E-2 0.5 -> 0.24 Inexact Rounded +pwsx2245 power 6E-3 0.5 -> 0.077 Inexact Rounded +pwsx2246 power 6E+1 0.5 -> 7.7 Inexact Rounded +pwsx2247 power 6E+2 0.5 -> 24 Inexact Rounded +pwsx2248 power 6E+3 0.5 -> 77 Inexact Rounded +pwsx2249 power 0.7 0.5 -> 0.84 Inexact Rounded +pwsx2250 power 0.07 0.5 -> 0.26 Inexact Rounded +pwsx2251 power 7.0E-1 0.5 -> 0.84 Inexact Rounded +pwsx2252 power 7.00E-2 0.5 -> 0.26 Inexact Rounded +pwsx2253 power 7E-3 0.5 -> 0.084 Inexact Rounded +pwsx2254 power 7E+1 0.5 -> 8.4 Inexact Rounded +pwsx2255 power 7E+2 0.5 -> 26 Inexact Rounded +pwsx2256 power 7E+3 0.5 -> 84 Inexact Rounded +pwsx2257 power 0.8 0.5 -> 0.89 Inexact Rounded +pwsx2258 power 0.08 0.5 -> 0.28 Inexact Rounded +pwsx2259 power 8.0E-1 0.5 -> 0.89 Inexact Rounded +pwsx2260 power 8.00E-2 0.5 -> 0.28 Inexact Rounded +pwsx2261 power 8E-3 0.5 -> 0.089 Inexact Rounded +pwsx2262 power 8E+1 0.5 -> 8.9 Inexact Rounded +pwsx2263 power 8E+2 0.5 -> 28 Inexact Rounded +pwsx2264 power 8E+3 0.5 -> 89 Inexact Rounded +pwsx2265 power 0.9 0.5 -> 0.95 Inexact Rounded +pwsx2266 power 0.09 0.5 -> 0.30 Inexact Rounded +pwsx2267 power 9.0E-1 0.5 -> 0.95 Inexact Rounded +pwsx2268 power 9.00E-2 0.5 -> 0.30 Inexact Rounded +pwsx2269 power 9E-3 0.5 -> 0.095 Inexact Rounded +pwsx2270 power 9E+1 0.5 -> 9.5 Inexact Rounded +pwsx2271 power 9E+2 0.5 -> 30 Inexact Rounded +pwsx2272 power 9E+3 0.5 -> 95 Inexact Rounded +pwsx2273 power 0.10 0.5 -> 0.32 Inexact Rounded +pwsx2274 power 0.010 0.5 -> 0.10 Inexact Rounded +pwsx2275 power 10.0E-1 0.5 -> 1.0 Inexact Rounded +pwsx2276 power 10.00E-2 0.5 -> 0.32 Inexact Rounded +pwsx2277 power 10E-3 0.5 -> 0.10 Inexact Rounded +pwsx2278 power 10E+1 0.5 -> 10 Inexact Rounded +pwsx2279 power 10E+2 0.5 -> 32 Inexact Rounded +pwsx2280 power 10E+3 0.5 -> 1.0E+2 Inexact Rounded +pwsx2281 power 0.11 0.5 -> 0.33 Inexact Rounded +pwsx2282 power 0.011 0.5 -> 0.10 Inexact Rounded +pwsx2283 power 11.0E-1 0.5 -> 1.0 Inexact Rounded +pwsx2284 power 11.00E-2 0.5 -> 0.33 Inexact Rounded +pwsx2285 power 11E-3 0.5 -> 0.10 Inexact Rounded +pwsx2286 power 11E+1 0.5 -> 10 Inexact Rounded +pwsx2287 power 11E+2 0.5 -> 33 Inexact Rounded +pwsx2288 power 11E+3 0.5 -> 1.0E+2 Inexact Rounded +pwsx2289 power 0.12 0.5 -> 0.35 Inexact Rounded +pwsx2290 power 0.012 0.5 -> 0.11 Inexact Rounded +pwsx2291 power 12.0E-1 0.5 -> 1.1 Inexact Rounded +pwsx2292 power 12.00E-2 0.5 -> 0.35 Inexact Rounded +pwsx2293 power 12E-3 0.5 -> 0.11 Inexact Rounded +pwsx2294 power 12E+1 0.5 -> 11 Inexact Rounded +pwsx2295 power 12E+2 0.5 -> 35 Inexact Rounded +pwsx2296 power 12E+3 0.5 -> 1.1E+2 Inexact Rounded +pwsx2297 power 0.13 0.5 -> 0.36 Inexact Rounded +pwsx2298 power 0.013 0.5 -> 0.11 Inexact Rounded +pwsx2299 power 13.0E-1 0.5 -> 1.1 Inexact Rounded +pwsx2300 power 13.00E-2 0.5 -> 0.36 Inexact Rounded +pwsx2301 power 13E-3 0.5 -> 0.11 Inexact Rounded +pwsx2302 power 13E+1 0.5 -> 11 Inexact Rounded +pwsx2303 power 13E+2 0.5 -> 36 Inexact Rounded +pwsx2304 power 13E+3 0.5 -> 1.1E+2 Inexact Rounded +pwsx2305 power 0.14 0.5 -> 0.37 Inexact Rounded +pwsx2306 power 0.014 0.5 -> 0.12 Inexact Rounded +pwsx2307 power 14.0E-1 0.5 -> 1.2 Inexact Rounded +pwsx2308 power 14.00E-2 0.5 -> 0.37 Inexact Rounded +pwsx2309 power 14E-3 0.5 -> 0.12 Inexact Rounded +pwsx2310 power 14E+1 0.5 -> 12 Inexact Rounded +pwsx2311 power 14E+2 0.5 -> 37 Inexact Rounded +pwsx2312 power 14E+3 0.5 -> 1.2E+2 Inexact Rounded +pwsx2313 power 0.15 0.5 -> 0.39 Inexact Rounded +pwsx2314 power 0.015 0.5 -> 0.12 Inexact Rounded +pwsx2315 power 15.0E-1 0.5 -> 1.2 Inexact Rounded +pwsx2316 power 15.00E-2 0.5 -> 0.39 Inexact Rounded +pwsx2317 power 15E-3 0.5 -> 0.12 Inexact Rounded +pwsx2318 power 15E+1 0.5 -> 12 Inexact Rounded +pwsx2319 power 15E+2 0.5 -> 39 Inexact Rounded +pwsx2320 power 15E+3 0.5 -> 1.2E+2 Inexact Rounded +pwsx2321 power 0.16 0.5 -> 0.40 Inexact Rounded +pwsx2322 power 0.016 0.5 -> 0.13 Inexact Rounded +pwsx2323 power 16.0E-1 0.5 -> 1.3 Inexact Rounded +pwsx2324 power 16.00E-2 0.5 -> 0.40 Inexact Rounded +pwsx2325 power 16E-3 0.5 -> 0.13 Inexact Rounded +pwsx2326 power 16E+1 0.5 -> 13 Inexact Rounded +pwsx2327 power 16E+2 0.5 -> 40 Inexact Rounded +pwsx2328 power 16E+3 0.5 -> 1.3E+2 Inexact Rounded +pwsx2329 power 0.17 0.5 -> 0.41 Inexact Rounded +pwsx2330 power 0.017 0.5 -> 0.13 Inexact Rounded +pwsx2331 power 17.0E-1 0.5 -> 1.3 Inexact Rounded +pwsx2332 power 17.00E-2 0.5 -> 0.41 Inexact Rounded +pwsx2333 power 17E-3 0.5 -> 0.13 Inexact Rounded +pwsx2334 power 17E+1 0.5 -> 13 Inexact Rounded +pwsx2335 power 17E+2 0.5 -> 41 Inexact Rounded +pwsx2336 power 17E+3 0.5 -> 1.3E+2 Inexact Rounded +pwsx2337 power 0.18 0.5 -> 0.42 Inexact Rounded +pwsx2338 power 0.018 0.5 -> 0.13 Inexact Rounded +pwsx2339 power 18.0E-1 0.5 -> 1.3 Inexact Rounded +pwsx2340 power 18.00E-2 0.5 -> 0.42 Inexact Rounded +pwsx2341 power 18E-3 0.5 -> 0.13 Inexact Rounded +pwsx2342 power 18E+1 0.5 -> 13 Inexact Rounded +pwsx2343 power 18E+2 0.5 -> 42 Inexact Rounded +pwsx2344 power 18E+3 0.5 -> 1.3E+2 Inexact Rounded +pwsx2345 power 0.19 0.5 -> 0.44 Inexact Rounded +pwsx2346 power 0.019 0.5 -> 0.14 Inexact Rounded +pwsx2347 power 19.0E-1 0.5 -> 1.4 Inexact Rounded +pwsx2348 power 19.00E-2 0.5 -> 0.44 Inexact Rounded +pwsx2349 power 19E-3 0.5 -> 0.14 Inexact Rounded +pwsx2350 power 19E+1 0.5 -> 14 Inexact Rounded +pwsx2351 power 19E+2 0.5 -> 44 Inexact Rounded +pwsx2352 power 19E+3 0.5 -> 1.4E+2 Inexact Rounded +pwsx2353 power 0.20 0.5 -> 0.45 Inexact Rounded +pwsx2354 power 0.020 0.5 -> 0.14 Inexact Rounded +pwsx2355 power 20.0E-1 0.5 -> 1.4 Inexact Rounded +pwsx2356 power 20.00E-2 0.5 -> 0.45 Inexact Rounded +pwsx2357 power 20E-3 0.5 -> 0.14 Inexact Rounded +pwsx2358 power 20E+1 0.5 -> 14 Inexact Rounded +pwsx2359 power 20E+2 0.5 -> 45 Inexact Rounded +pwsx2360 power 20E+3 0.5 -> 1.4E+2 Inexact Rounded +pwsx2361 power 0.21 0.5 -> 0.46 Inexact Rounded +pwsx2362 power 0.021 0.5 -> 0.14 Inexact Rounded +pwsx2363 power 21.0E-1 0.5 -> 1.4 Inexact Rounded +pwsx2364 power 21.00E-2 0.5 -> 0.46 Inexact Rounded +pwsx2365 power 21E-3 0.5 -> 0.14 Inexact Rounded +pwsx2366 power 21E+1 0.5 -> 14 Inexact Rounded +pwsx2367 power 21E+2 0.5 -> 46 Inexact Rounded +pwsx2368 power 21E+3 0.5 -> 1.4E+2 Inexact Rounded +pwsx2369 power 0.22 0.5 -> 0.47 Inexact Rounded +pwsx2370 power 0.022 0.5 -> 0.15 Inexact Rounded +pwsx2371 power 22.0E-1 0.5 -> 1.5 Inexact Rounded +pwsx2372 power 22.00E-2 0.5 -> 0.47 Inexact Rounded +pwsx2373 power 22E-3 0.5 -> 0.15 Inexact Rounded +pwsx2374 power 22E+1 0.5 -> 15 Inexact Rounded +pwsx2375 power 22E+2 0.5 -> 47 Inexact Rounded +pwsx2376 power 22E+3 0.5 -> 1.5E+2 Inexact Rounded +pwsx2377 power 0.23 0.5 -> 0.48 Inexact Rounded +pwsx2378 power 0.023 0.5 -> 0.15 Inexact Rounded +pwsx2379 power 23.0E-1 0.5 -> 1.5 Inexact Rounded +pwsx2380 power 23.00E-2 0.5 -> 0.48 Inexact Rounded +pwsx2381 power 23E-3 0.5 -> 0.15 Inexact Rounded +pwsx2382 power 23E+1 0.5 -> 15 Inexact Rounded +pwsx2383 power 23E+2 0.5 -> 48 Inexact Rounded +pwsx2384 power 23E+3 0.5 -> 1.5E+2 Inexact Rounded +pwsx2385 power 0.24 0.5 -> 0.49 Inexact Rounded +pwsx2386 power 0.024 0.5 -> 0.15 Inexact Rounded +pwsx2387 power 24.0E-1 0.5 -> 1.5 Inexact Rounded +pwsx2388 power 24.00E-2 0.5 -> 0.49 Inexact Rounded +pwsx2389 power 24E-3 0.5 -> 0.15 Inexact Rounded +pwsx2390 power 24E+1 0.5 -> 15 Inexact Rounded +pwsx2391 power 24E+2 0.5 -> 49 Inexact Rounded +pwsx2392 power 24E+3 0.5 -> 1.5E+2 Inexact Rounded +pwsx2393 power 0.25 0.5 -> 0.50 Inexact Rounded +pwsx2394 power 0.025 0.5 -> 0.16 Inexact Rounded +pwsx2395 power 25.0E-1 0.5 -> 1.6 Inexact Rounded +pwsx2396 power 25.00E-2 0.5 -> 0.50 Inexact Rounded +pwsx2397 power 25E-3 0.5 -> 0.16 Inexact Rounded +pwsx2398 power 25E+1 0.5 -> 16 Inexact Rounded +pwsx2399 power 25E+2 0.5 -> 50 Inexact Rounded +pwsx2400 power 25E+3 0.5 -> 1.6E+2 Inexact Rounded +pwsx2401 power 0.26 0.5 -> 0.51 Inexact Rounded +pwsx2402 power 0.026 0.5 -> 0.16 Inexact Rounded +pwsx2403 power 26.0E-1 0.5 -> 1.6 Inexact Rounded +pwsx2404 power 26.00E-2 0.5 -> 0.51 Inexact Rounded +pwsx2405 power 26E-3 0.5 -> 0.16 Inexact Rounded +pwsx2406 power 26E+1 0.5 -> 16 Inexact Rounded +pwsx2407 power 26E+2 0.5 -> 51 Inexact Rounded +pwsx2408 power 26E+3 0.5 -> 1.6E+2 Inexact Rounded +pwsx2409 power 0.27 0.5 -> 0.52 Inexact Rounded +pwsx2410 power 0.027 0.5 -> 0.16 Inexact Rounded +pwsx2411 power 27.0E-1 0.5 -> 1.6 Inexact Rounded +pwsx2412 power 27.00E-2 0.5 -> 0.52 Inexact Rounded +pwsx2413 power 27E-3 0.5 -> 0.16 Inexact Rounded +pwsx2414 power 27E+1 0.5 -> 16 Inexact Rounded +pwsx2415 power 27E+2 0.5 -> 52 Inexact Rounded +pwsx2416 power 27E+3 0.5 -> 1.6E+2 Inexact Rounded +pwsx2417 power 0.28 0.5 -> 0.53 Inexact Rounded +pwsx2418 power 0.028 0.5 -> 0.17 Inexact Rounded +pwsx2419 power 28.0E-1 0.5 -> 1.7 Inexact Rounded +pwsx2420 power 28.00E-2 0.5 -> 0.53 Inexact Rounded +pwsx2421 power 28E-3 0.5 -> 0.17 Inexact Rounded +pwsx2422 power 28E+1 0.5 -> 17 Inexact Rounded +pwsx2423 power 28E+2 0.5 -> 53 Inexact Rounded +pwsx2424 power 28E+3 0.5 -> 1.7E+2 Inexact Rounded +pwsx2425 power 0.29 0.5 -> 0.54 Inexact Rounded +pwsx2426 power 0.029 0.5 -> 0.17 Inexact Rounded +pwsx2427 power 29.0E-1 0.5 -> 1.7 Inexact Rounded +pwsx2428 power 29.00E-2 0.5 -> 0.54 Inexact Rounded +pwsx2429 power 29E-3 0.5 -> 0.17 Inexact Rounded +pwsx2430 power 29E+1 0.5 -> 17 Inexact Rounded +pwsx2431 power 29E+2 0.5 -> 54 Inexact Rounded +pwsx2432 power 29E+3 0.5 -> 1.7E+2 Inexact Rounded +pwsx2433 power 0.30 0.5 -> 0.55 Inexact Rounded +pwsx2434 power 0.030 0.5 -> 0.17 Inexact Rounded +pwsx2435 power 30.0E-1 0.5 -> 1.7 Inexact Rounded +pwsx2436 power 30.00E-2 0.5 -> 0.55 Inexact Rounded +pwsx2437 power 30E-3 0.5 -> 0.17 Inexact Rounded +pwsx2438 power 30E+1 0.5 -> 17 Inexact Rounded +pwsx2439 power 30E+2 0.5 -> 55 Inexact Rounded +pwsx2440 power 30E+3 0.5 -> 1.7E+2 Inexact Rounded +pwsx2441 power 0.31 0.5 -> 0.56 Inexact Rounded +pwsx2442 power 0.031 0.5 -> 0.18 Inexact Rounded +pwsx2443 power 31.0E-1 0.5 -> 1.8 Inexact Rounded +pwsx2444 power 31.00E-2 0.5 -> 0.56 Inexact Rounded +pwsx2445 power 31E-3 0.5 -> 0.18 Inexact Rounded +pwsx2446 power 31E+1 0.5 -> 18 Inexact Rounded +pwsx2447 power 31E+2 0.5 -> 56 Inexact Rounded +pwsx2448 power 31E+3 0.5 -> 1.8E+2 Inexact Rounded +pwsx2449 power 0.32 0.5 -> 0.57 Inexact Rounded +pwsx2450 power 0.032 0.5 -> 0.18 Inexact Rounded +pwsx2451 power 32.0E-1 0.5 -> 1.8 Inexact Rounded +pwsx2452 power 32.00E-2 0.5 -> 0.57 Inexact Rounded +pwsx2453 power 32E-3 0.5 -> 0.18 Inexact Rounded +pwsx2454 power 32E+1 0.5 -> 18 Inexact Rounded +pwsx2455 power 32E+2 0.5 -> 57 Inexact Rounded +pwsx2456 power 32E+3 0.5 -> 1.8E+2 Inexact Rounded +pwsx2457 power 0.33 0.5 -> 0.57 Inexact Rounded +pwsx2458 power 0.033 0.5 -> 0.18 Inexact Rounded +pwsx2459 power 33.0E-1 0.5 -> 1.8 Inexact Rounded +pwsx2460 power 33.00E-2 0.5 -> 0.57 Inexact Rounded +pwsx2461 power 33E-3 0.5 -> 0.18 Inexact Rounded +pwsx2462 power 33E+1 0.5 -> 18 Inexact Rounded +pwsx2463 power 33E+2 0.5 -> 57 Inexact Rounded +pwsx2464 power 33E+3 0.5 -> 1.8E+2 Inexact Rounded +pwsx2465 power 0.34 0.5 -> 0.58 Inexact Rounded +pwsx2466 power 0.034 0.5 -> 0.18 Inexact Rounded +pwsx2467 power 34.0E-1 0.5 -> 1.8 Inexact Rounded +pwsx2468 power 34.00E-2 0.5 -> 0.58 Inexact Rounded +pwsx2469 power 34E-3 0.5 -> 0.18 Inexact Rounded +pwsx2470 power 34E+1 0.5 -> 18 Inexact Rounded +pwsx2471 power 34E+2 0.5 -> 58 Inexact Rounded +pwsx2472 power 34E+3 0.5 -> 1.8E+2 Inexact Rounded +pwsx2473 power 0.35 0.5 -> 0.59 Inexact Rounded +pwsx2474 power 0.035 0.5 -> 0.19 Inexact Rounded +pwsx2475 power 35.0E-1 0.5 -> 1.9 Inexact Rounded +pwsx2476 power 35.00E-2 0.5 -> 0.59 Inexact Rounded +pwsx2477 power 35E-3 0.5 -> 0.19 Inexact Rounded +pwsx2478 power 35E+1 0.5 -> 19 Inexact Rounded +pwsx2479 power 35E+2 0.5 -> 59 Inexact Rounded +pwsx2480 power 35E+3 0.5 -> 1.9E+2 Inexact Rounded +pwsx2481 power 0.36 0.5 -> 0.60 Inexact Rounded +pwsx2482 power 0.036 0.5 -> 0.19 Inexact Rounded +pwsx2483 power 36.0E-1 0.5 -> 1.9 Inexact Rounded +pwsx2484 power 36.00E-2 0.5 -> 0.60 Inexact Rounded +pwsx2485 power 36E-3 0.5 -> 0.19 Inexact Rounded +pwsx2486 power 36E+1 0.5 -> 19 Inexact Rounded +pwsx2487 power 36E+2 0.5 -> 60 Inexact Rounded +pwsx2488 power 36E+3 0.5 -> 1.9E+2 Inexact Rounded +pwsx2489 power 0.37 0.5 -> 0.61 Inexact Rounded +pwsx2490 power 0.037 0.5 -> 0.19 Inexact Rounded +pwsx2491 power 37.0E-1 0.5 -> 1.9 Inexact Rounded +pwsx2492 power 37.00E-2 0.5 -> 0.61 Inexact Rounded +pwsx2493 power 37E-3 0.5 -> 0.19 Inexact Rounded +pwsx2494 power 37E+1 0.5 -> 19 Inexact Rounded +pwsx2495 power 37E+2 0.5 -> 61 Inexact Rounded +pwsx2496 power 37E+3 0.5 -> 1.9E+2 Inexact Rounded +pwsx2497 power 0.38 0.5 -> 0.62 Inexact Rounded +pwsx2498 power 0.038 0.5 -> 0.19 Inexact Rounded +pwsx2499 power 38.0E-1 0.5 -> 1.9 Inexact Rounded +pwsx2500 power 38.00E-2 0.5 -> 0.62 Inexact Rounded +pwsx2501 power 38E-3 0.5 -> 0.19 Inexact Rounded +pwsx2502 power 38E+1 0.5 -> 19 Inexact Rounded +pwsx2503 power 38E+2 0.5 -> 62 Inexact Rounded +pwsx2504 power 38E+3 0.5 -> 1.9E+2 Inexact Rounded +pwsx2505 power 0.39 0.5 -> 0.62 Inexact Rounded +pwsx2506 power 0.039 0.5 -> 0.20 Inexact Rounded +pwsx2507 power 39.0E-1 0.5 -> 2.0 Inexact Rounded +pwsx2508 power 39.00E-2 0.5 -> 0.62 Inexact Rounded +pwsx2509 power 39E-3 0.5 -> 0.20 Inexact Rounded +pwsx2510 power 39E+1 0.5 -> 20 Inexact Rounded +pwsx2511 power 39E+2 0.5 -> 62 Inexact Rounded +pwsx2512 power 39E+3 0.5 -> 2.0E+2 Inexact Rounded +pwsx2513 power 0.40 0.5 -> 0.63 Inexact Rounded +pwsx2514 power 0.040 0.5 -> 0.20 Inexact Rounded +pwsx2515 power 40.0E-1 0.5 -> 2.0 Inexact Rounded +pwsx2516 power 40.00E-2 0.5 -> 0.63 Inexact Rounded +pwsx2517 power 40E-3 0.5 -> 0.20 Inexact Rounded +pwsx2518 power 40E+1 0.5 -> 20 Inexact Rounded +pwsx2519 power 40E+2 0.5 -> 63 Inexact Rounded +pwsx2520 power 40E+3 0.5 -> 2.0E+2 Inexact Rounded +pwsx2521 power 0.41 0.5 -> 0.64 Inexact Rounded +pwsx2522 power 0.041 0.5 -> 0.20 Inexact Rounded +pwsx2523 power 41.0E-1 0.5 -> 2.0 Inexact Rounded +pwsx2524 power 41.00E-2 0.5 -> 0.64 Inexact Rounded +pwsx2525 power 41E-3 0.5 -> 0.20 Inexact Rounded +pwsx2526 power 41E+1 0.5 -> 20 Inexact Rounded +pwsx2527 power 41E+2 0.5 -> 64 Inexact Rounded +pwsx2528 power 41E+3 0.5 -> 2.0E+2 Inexact Rounded +pwsx2529 power 0.42 0.5 -> 0.65 Inexact Rounded +pwsx2530 power 0.042 0.5 -> 0.20 Inexact Rounded +pwsx2531 power 42.0E-1 0.5 -> 2.0 Inexact Rounded +pwsx2532 power 42.00E-2 0.5 -> 0.65 Inexact Rounded +pwsx2533 power 42E-3 0.5 -> 0.20 Inexact Rounded +pwsx2534 power 42E+1 0.5 -> 20 Inexact Rounded +pwsx2535 power 42E+2 0.5 -> 65 Inexact Rounded +pwsx2536 power 42E+3 0.5 -> 2.0E+2 Inexact Rounded +pwsx2537 power 0.43 0.5 -> 0.66 Inexact Rounded +pwsx2538 power 0.043 0.5 -> 0.21 Inexact Rounded +pwsx2539 power 43.0E-1 0.5 -> 2.1 Inexact Rounded +pwsx2540 power 43.00E-2 0.5 -> 0.66 Inexact Rounded +pwsx2541 power 43E-3 0.5 -> 0.21 Inexact Rounded +pwsx2542 power 43E+1 0.5 -> 21 Inexact Rounded +pwsx2543 power 43E+2 0.5 -> 66 Inexact Rounded +pwsx2544 power 43E+3 0.5 -> 2.1E+2 Inexact Rounded +pwsx2545 power 0.44 0.5 -> 0.66 Inexact Rounded +pwsx2546 power 0.044 0.5 -> 0.21 Inexact Rounded +pwsx2547 power 44.0E-1 0.5 -> 2.1 Inexact Rounded +pwsx2548 power 44.00E-2 0.5 -> 0.66 Inexact Rounded +pwsx2549 power 44E-3 0.5 -> 0.21 Inexact Rounded +pwsx2550 power 44E+1 0.5 -> 21 Inexact Rounded +pwsx2551 power 44E+2 0.5 -> 66 Inexact Rounded +pwsx2552 power 44E+3 0.5 -> 2.1E+2 Inexact Rounded +pwsx2553 power 0.45 0.5 -> 0.67 Inexact Rounded +pwsx2554 power 0.045 0.5 -> 0.21 Inexact Rounded +pwsx2555 power 45.0E-1 0.5 -> 2.1 Inexact Rounded +pwsx2556 power 45.00E-2 0.5 -> 0.67 Inexact Rounded +pwsx2557 power 45E-3 0.5 -> 0.21 Inexact Rounded +pwsx2558 power 45E+1 0.5 -> 21 Inexact Rounded +pwsx2559 power 45E+2 0.5 -> 67 Inexact Rounded +pwsx2560 power 45E+3 0.5 -> 2.1E+2 Inexact Rounded +pwsx2561 power 0.46 0.5 -> 0.68 Inexact Rounded +pwsx2562 power 0.046 0.5 -> 0.21 Inexact Rounded +pwsx2563 power 46.0E-1 0.5 -> 2.1 Inexact Rounded +pwsx2564 power 46.00E-2 0.5 -> 0.68 Inexact Rounded +pwsx2565 power 46E-3 0.5 -> 0.21 Inexact Rounded +pwsx2566 power 46E+1 0.5 -> 21 Inexact Rounded +pwsx2567 power 46E+2 0.5 -> 68 Inexact Rounded +pwsx2568 power 46E+3 0.5 -> 2.1E+2 Inexact Rounded +pwsx2569 power 0.47 0.5 -> 0.69 Inexact Rounded +pwsx2570 power 0.047 0.5 -> 0.22 Inexact Rounded +pwsx2571 power 47.0E-1 0.5 -> 2.2 Inexact Rounded +pwsx2572 power 47.00E-2 0.5 -> 0.69 Inexact Rounded +pwsx2573 power 47E-3 0.5 -> 0.22 Inexact Rounded +pwsx2574 power 47E+1 0.5 -> 22 Inexact Rounded +pwsx2575 power 47E+2 0.5 -> 69 Inexact Rounded +pwsx2576 power 47E+3 0.5 -> 2.2E+2 Inexact Rounded +pwsx2577 power 0.48 0.5 -> 0.69 Inexact Rounded +pwsx2578 power 0.048 0.5 -> 0.22 Inexact Rounded +pwsx2579 power 48.0E-1 0.5 -> 2.2 Inexact Rounded +pwsx2580 power 48.00E-2 0.5 -> 0.69 Inexact Rounded +pwsx2581 power 48E-3 0.5 -> 0.22 Inexact Rounded +pwsx2582 power 48E+1 0.5 -> 22 Inexact Rounded +pwsx2583 power 48E+2 0.5 -> 69 Inexact Rounded +pwsx2584 power 48E+3 0.5 -> 2.2E+2 Inexact Rounded +pwsx2585 power 0.49 0.5 -> 0.70 Inexact Rounded +pwsx2586 power 0.049 0.5 -> 0.22 Inexact Rounded +pwsx2587 power 49.0E-1 0.5 -> 2.2 Inexact Rounded +pwsx2588 power 49.00E-2 0.5 -> 0.70 Inexact Rounded +pwsx2589 power 49E-3 0.5 -> 0.22 Inexact Rounded +pwsx2590 power 49E+1 0.5 -> 22 Inexact Rounded +pwsx2591 power 49E+2 0.5 -> 70 Inexact Rounded +pwsx2592 power 49E+3 0.5 -> 2.2E+2 Inexact Rounded +pwsx2593 power 0.50 0.5 -> 0.71 Inexact Rounded +pwsx2594 power 0.050 0.5 -> 0.22 Inexact Rounded +pwsx2595 power 50.0E-1 0.5 -> 2.2 Inexact Rounded +pwsx2596 power 50.00E-2 0.5 -> 0.71 Inexact Rounded +pwsx2597 power 50E-3 0.5 -> 0.22 Inexact Rounded +pwsx2598 power 50E+1 0.5 -> 22 Inexact Rounded +pwsx2599 power 50E+2 0.5 -> 71 Inexact Rounded +pwsx2600 power 50E+3 0.5 -> 2.2E+2 Inexact Rounded +pwsx2601 power 0.51 0.5 -> 0.71 Inexact Rounded +pwsx2602 power 0.051 0.5 -> 0.23 Inexact Rounded +pwsx2603 power 51.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2604 power 51.00E-2 0.5 -> 0.71 Inexact Rounded +pwsx2605 power 51E-3 0.5 -> 0.23 Inexact Rounded +pwsx2606 power 51E+1 0.5 -> 23 Inexact Rounded +pwsx2607 power 51E+2 0.5 -> 71 Inexact Rounded +pwsx2608 power 51E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2609 power 0.52 0.5 -> 0.72 Inexact Rounded +pwsx2610 power 0.052 0.5 -> 0.23 Inexact Rounded +pwsx2611 power 52.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2612 power 52.00E-2 0.5 -> 0.72 Inexact Rounded +pwsx2613 power 52E-3 0.5 -> 0.23 Inexact Rounded +pwsx2614 power 52E+1 0.5 -> 23 Inexact Rounded +pwsx2615 power 52E+2 0.5 -> 72 Inexact Rounded +pwsx2616 power 52E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2617 power 0.53 0.5 -> 0.73 Inexact Rounded +pwsx2618 power 0.053 0.5 -> 0.23 Inexact Rounded +pwsx2619 power 53.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2620 power 53.00E-2 0.5 -> 0.73 Inexact Rounded +pwsx2621 power 53E-3 0.5 -> 0.23 Inexact Rounded +pwsx2622 power 53E+1 0.5 -> 23 Inexact Rounded +pwsx2623 power 53E+2 0.5 -> 73 Inexact Rounded +pwsx2624 power 53E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2625 power 0.54 0.5 -> 0.73 Inexact Rounded +pwsx2626 power 0.054 0.5 -> 0.23 Inexact Rounded +pwsx2627 power 54.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2628 power 54.00E-2 0.5 -> 0.73 Inexact Rounded +pwsx2629 power 54E-3 0.5 -> 0.23 Inexact Rounded +pwsx2630 power 54E+1 0.5 -> 23 Inexact Rounded +pwsx2631 power 54E+2 0.5 -> 73 Inexact Rounded +pwsx2632 power 54E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2633 power 0.55 0.5 -> 0.74 Inexact Rounded +pwsx2634 power 0.055 0.5 -> 0.23 Inexact Rounded +pwsx2635 power 55.0E-1 0.5 -> 2.3 Inexact Rounded +pwsx2636 power 55.00E-2 0.5 -> 0.74 Inexact Rounded +pwsx2637 power 55E-3 0.5 -> 0.23 Inexact Rounded +pwsx2638 power 55E+1 0.5 -> 23 Inexact Rounded +pwsx2639 power 55E+2 0.5 -> 74 Inexact Rounded +pwsx2640 power 55E+3 0.5 -> 2.3E+2 Inexact Rounded +pwsx2641 power 0.56 0.5 -> 0.75 Inexact Rounded +pwsx2642 power 0.056 0.5 -> 0.24 Inexact Rounded +pwsx2643 power 56.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2644 power 56.00E-2 0.5 -> 0.75 Inexact Rounded +pwsx2645 power 56E-3 0.5 -> 0.24 Inexact Rounded +pwsx2646 power 56E+1 0.5 -> 24 Inexact Rounded +pwsx2647 power 56E+2 0.5 -> 75 Inexact Rounded +pwsx2648 power 56E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2649 power 0.57 0.5 -> 0.75 Inexact Rounded +pwsx2650 power 0.057 0.5 -> 0.24 Inexact Rounded +pwsx2651 power 57.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2652 power 57.00E-2 0.5 -> 0.75 Inexact Rounded +pwsx2653 power 57E-3 0.5 -> 0.24 Inexact Rounded +pwsx2654 power 57E+1 0.5 -> 24 Inexact Rounded +pwsx2655 power 57E+2 0.5 -> 75 Inexact Rounded +pwsx2656 power 57E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2657 power 0.58 0.5 -> 0.76 Inexact Rounded +pwsx2658 power 0.058 0.5 -> 0.24 Inexact Rounded +pwsx2659 power 58.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2660 power 58.00E-2 0.5 -> 0.76 Inexact Rounded +pwsx2661 power 58E-3 0.5 -> 0.24 Inexact Rounded +pwsx2662 power 58E+1 0.5 -> 24 Inexact Rounded +pwsx2663 power 58E+2 0.5 -> 76 Inexact Rounded +pwsx2664 power 58E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2665 power 0.59 0.5 -> 0.77 Inexact Rounded +pwsx2666 power 0.059 0.5 -> 0.24 Inexact Rounded +pwsx2667 power 59.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2668 power 59.00E-2 0.5 -> 0.77 Inexact Rounded +pwsx2669 power 59E-3 0.5 -> 0.24 Inexact Rounded +pwsx2670 power 59E+1 0.5 -> 24 Inexact Rounded +pwsx2671 power 59E+2 0.5 -> 77 Inexact Rounded +pwsx2672 power 59E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2673 power 0.60 0.5 -> 0.77 Inexact Rounded +pwsx2674 power 0.060 0.5 -> 0.24 Inexact Rounded +pwsx2675 power 60.0E-1 0.5 -> 2.4 Inexact Rounded +pwsx2676 power 60.00E-2 0.5 -> 0.77 Inexact Rounded +pwsx2677 power 60E-3 0.5 -> 0.24 Inexact Rounded +pwsx2678 power 60E+1 0.5 -> 24 Inexact Rounded +pwsx2679 power 60E+2 0.5 -> 77 Inexact Rounded +pwsx2680 power 60E+3 0.5 -> 2.4E+2 Inexact Rounded +pwsx2681 power 0.61 0.5 -> 0.78 Inexact Rounded +pwsx2682 power 0.061 0.5 -> 0.25 Inexact Rounded +pwsx2683 power 61.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2684 power 61.00E-2 0.5 -> 0.78 Inexact Rounded +pwsx2685 power 61E-3 0.5 -> 0.25 Inexact Rounded +pwsx2686 power 61E+1 0.5 -> 25 Inexact Rounded +pwsx2687 power 61E+2 0.5 -> 78 Inexact Rounded +pwsx2688 power 61E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2689 power 0.62 0.5 -> 0.79 Inexact Rounded +pwsx2690 power 0.062 0.5 -> 0.25 Inexact Rounded +pwsx2691 power 62.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2692 power 62.00E-2 0.5 -> 0.79 Inexact Rounded +pwsx2693 power 62E-3 0.5 -> 0.25 Inexact Rounded +pwsx2694 power 62E+1 0.5 -> 25 Inexact Rounded +pwsx2695 power 62E+2 0.5 -> 79 Inexact Rounded +pwsx2696 power 62E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2697 power 0.63 0.5 -> 0.79 Inexact Rounded +pwsx2698 power 0.063 0.5 -> 0.25 Inexact Rounded +pwsx2699 power 63.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2700 power 63.00E-2 0.5 -> 0.79 Inexact Rounded +pwsx2701 power 63E-3 0.5 -> 0.25 Inexact Rounded +pwsx2702 power 63E+1 0.5 -> 25 Inexact Rounded +pwsx2703 power 63E+2 0.5 -> 79 Inexact Rounded +pwsx2704 power 63E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2705 power 0.64 0.5 -> 0.80 Inexact Rounded +pwsx2706 power 0.064 0.5 -> 0.25 Inexact Rounded +pwsx2707 power 64.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2708 power 64.00E-2 0.5 -> 0.80 Inexact Rounded +pwsx2709 power 64E-3 0.5 -> 0.25 Inexact Rounded +pwsx2710 power 64E+1 0.5 -> 25 Inexact Rounded +pwsx2711 power 64E+2 0.5 -> 80 Inexact Rounded +pwsx2712 power 64E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2713 power 0.65 0.5 -> 0.81 Inexact Rounded +pwsx2714 power 0.065 0.5 -> 0.25 Inexact Rounded +pwsx2715 power 65.0E-1 0.5 -> 2.5 Inexact Rounded +pwsx2716 power 65.00E-2 0.5 -> 0.81 Inexact Rounded +pwsx2717 power 65E-3 0.5 -> 0.25 Inexact Rounded +pwsx2718 power 65E+1 0.5 -> 25 Inexact Rounded +pwsx2719 power 65E+2 0.5 -> 81 Inexact Rounded +pwsx2720 power 65E+3 0.5 -> 2.5E+2 Inexact Rounded +pwsx2721 power 0.66 0.5 -> 0.81 Inexact Rounded +pwsx2722 power 0.066 0.5 -> 0.26 Inexact Rounded +pwsx2723 power 66.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2724 power 66.00E-2 0.5 -> 0.81 Inexact Rounded +pwsx2725 power 66E-3 0.5 -> 0.26 Inexact Rounded +pwsx2726 power 66E+1 0.5 -> 26 Inexact Rounded +pwsx2727 power 66E+2 0.5 -> 81 Inexact Rounded +pwsx2728 power 66E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2729 power 0.67 0.5 -> 0.82 Inexact Rounded +pwsx2730 power 0.067 0.5 -> 0.26 Inexact Rounded +pwsx2731 power 67.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2732 power 67.00E-2 0.5 -> 0.82 Inexact Rounded +pwsx2733 power 67E-3 0.5 -> 0.26 Inexact Rounded +pwsx2734 power 67E+1 0.5 -> 26 Inexact Rounded +pwsx2735 power 67E+2 0.5 -> 82 Inexact Rounded +pwsx2736 power 67E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2737 power 0.68 0.5 -> 0.82 Inexact Rounded +pwsx2738 power 0.068 0.5 -> 0.26 Inexact Rounded +pwsx2739 power 68.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2740 power 68.00E-2 0.5 -> 0.82 Inexact Rounded +pwsx2741 power 68E-3 0.5 -> 0.26 Inexact Rounded +pwsx2742 power 68E+1 0.5 -> 26 Inexact Rounded +pwsx2743 power 68E+2 0.5 -> 82 Inexact Rounded +pwsx2744 power 68E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2745 power 0.69 0.5 -> 0.83 Inexact Rounded +pwsx2746 power 0.069 0.5 -> 0.26 Inexact Rounded +pwsx2747 power 69.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2748 power 69.00E-2 0.5 -> 0.83 Inexact Rounded +pwsx2749 power 69E-3 0.5 -> 0.26 Inexact Rounded +pwsx2750 power 69E+1 0.5 -> 26 Inexact Rounded +pwsx2751 power 69E+2 0.5 -> 83 Inexact Rounded +pwsx2752 power 69E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2753 power 0.70 0.5 -> 0.84 Inexact Rounded +pwsx2754 power 0.070 0.5 -> 0.26 Inexact Rounded +pwsx2755 power 70.0E-1 0.5 -> 2.6 Inexact Rounded +pwsx2756 power 70.00E-2 0.5 -> 0.84 Inexact Rounded +pwsx2757 power 70E-3 0.5 -> 0.26 Inexact Rounded +pwsx2758 power 70E+1 0.5 -> 26 Inexact Rounded +pwsx2759 power 70E+2 0.5 -> 84 Inexact Rounded +pwsx2760 power 70E+3 0.5 -> 2.6E+2 Inexact Rounded +pwsx2761 power 0.71 0.5 -> 0.84 Inexact Rounded +pwsx2762 power 0.071 0.5 -> 0.27 Inexact Rounded +pwsx2763 power 71.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2764 power 71.00E-2 0.5 -> 0.84 Inexact Rounded +pwsx2765 power 71E-3 0.5 -> 0.27 Inexact Rounded +pwsx2766 power 71E+1 0.5 -> 27 Inexact Rounded +pwsx2767 power 71E+2 0.5 -> 84 Inexact Rounded +pwsx2768 power 71E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2769 power 0.72 0.5 -> 0.85 Inexact Rounded +pwsx2770 power 0.072 0.5 -> 0.27 Inexact Rounded +pwsx2771 power 72.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2772 power 72.00E-2 0.5 -> 0.85 Inexact Rounded +pwsx2773 power 72E-3 0.5 -> 0.27 Inexact Rounded +pwsx2774 power 72E+1 0.5 -> 27 Inexact Rounded +pwsx2775 power 72E+2 0.5 -> 85 Inexact Rounded +pwsx2776 power 72E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2777 power 0.73 0.5 -> 0.85 Inexact Rounded +pwsx2778 power 0.073 0.5 -> 0.27 Inexact Rounded +pwsx2779 power 73.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2780 power 73.00E-2 0.5 -> 0.85 Inexact Rounded +pwsx2781 power 73E-3 0.5 -> 0.27 Inexact Rounded +pwsx2782 power 73E+1 0.5 -> 27 Inexact Rounded +pwsx2783 power 73E+2 0.5 -> 85 Inexact Rounded +pwsx2784 power 73E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2785 power 0.74 0.5 -> 0.86 Inexact Rounded +pwsx2786 power 0.074 0.5 -> 0.27 Inexact Rounded +pwsx2787 power 74.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2788 power 74.00E-2 0.5 -> 0.86 Inexact Rounded +pwsx2789 power 74E-3 0.5 -> 0.27 Inexact Rounded +pwsx2790 power 74E+1 0.5 -> 27 Inexact Rounded +pwsx2791 power 74E+2 0.5 -> 86 Inexact Rounded +pwsx2792 power 74E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2793 power 0.75 0.5 -> 0.87 Inexact Rounded +pwsx2794 power 0.075 0.5 -> 0.27 Inexact Rounded +pwsx2795 power 75.0E-1 0.5 -> 2.7 Inexact Rounded +pwsx2796 power 75.00E-2 0.5 -> 0.87 Inexact Rounded +pwsx2797 power 75E-3 0.5 -> 0.27 Inexact Rounded +pwsx2798 power 75E+1 0.5 -> 27 Inexact Rounded +pwsx2799 power 75E+2 0.5 -> 87 Inexact Rounded +pwsx2800 power 75E+3 0.5 -> 2.7E+2 Inexact Rounded +pwsx2801 power 0.76 0.5 -> 0.87 Inexact Rounded +pwsx2802 power 0.076 0.5 -> 0.28 Inexact Rounded +pwsx2803 power 76.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2804 power 76.00E-2 0.5 -> 0.87 Inexact Rounded +pwsx2805 power 76E-3 0.5 -> 0.28 Inexact Rounded +pwsx2806 power 76E+1 0.5 -> 28 Inexact Rounded +pwsx2807 power 76E+2 0.5 -> 87 Inexact Rounded +pwsx2808 power 76E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2809 power 0.77 0.5 -> 0.88 Inexact Rounded +pwsx2810 power 0.077 0.5 -> 0.28 Inexact Rounded +pwsx2811 power 77.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2812 power 77.00E-2 0.5 -> 0.88 Inexact Rounded +pwsx2813 power 77E-3 0.5 -> 0.28 Inexact Rounded +pwsx2814 power 77E+1 0.5 -> 28 Inexact Rounded +pwsx2815 power 77E+2 0.5 -> 88 Inexact Rounded +pwsx2816 power 77E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2817 power 0.78 0.5 -> 0.88 Inexact Rounded +pwsx2818 power 0.078 0.5 -> 0.28 Inexact Rounded +pwsx2819 power 78.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2820 power 78.00E-2 0.5 -> 0.88 Inexact Rounded +pwsx2821 power 78E-3 0.5 -> 0.28 Inexact Rounded +pwsx2822 power 78E+1 0.5 -> 28 Inexact Rounded +pwsx2823 power 78E+2 0.5 -> 88 Inexact Rounded +pwsx2824 power 78E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2825 power 0.79 0.5 -> 0.89 Inexact Rounded +pwsx2826 power 0.079 0.5 -> 0.28 Inexact Rounded +pwsx2827 power 79.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2828 power 79.00E-2 0.5 -> 0.89 Inexact Rounded +pwsx2829 power 79E-3 0.5 -> 0.28 Inexact Rounded +pwsx2830 power 79E+1 0.5 -> 28 Inexact Rounded +pwsx2831 power 79E+2 0.5 -> 89 Inexact Rounded +pwsx2832 power 79E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2833 power 0.80 0.5 -> 0.89 Inexact Rounded +pwsx2834 power 0.080 0.5 -> 0.28 Inexact Rounded +pwsx2835 power 80.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2836 power 80.00E-2 0.5 -> 0.89 Inexact Rounded +pwsx2837 power 80E-3 0.5 -> 0.28 Inexact Rounded +pwsx2838 power 80E+1 0.5 -> 28 Inexact Rounded +pwsx2839 power 80E+2 0.5 -> 89 Inexact Rounded +pwsx2840 power 80E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2841 power 0.81 0.5 -> 0.90 Inexact Rounded +pwsx2842 power 0.081 0.5 -> 0.28 Inexact Rounded +pwsx2843 power 81.0E-1 0.5 -> 2.8 Inexact Rounded +pwsx2844 power 81.00E-2 0.5 -> 0.90 Inexact Rounded +pwsx2845 power 81E-3 0.5 -> 0.28 Inexact Rounded +pwsx2846 power 81E+1 0.5 -> 28 Inexact Rounded +pwsx2847 power 81E+2 0.5 -> 90 Inexact Rounded +pwsx2848 power 81E+3 0.5 -> 2.8E+2 Inexact Rounded +pwsx2849 power 0.82 0.5 -> 0.91 Inexact Rounded +pwsx2850 power 0.082 0.5 -> 0.29 Inexact Rounded +pwsx2851 power 82.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2852 power 82.00E-2 0.5 -> 0.91 Inexact Rounded +pwsx2853 power 82E-3 0.5 -> 0.29 Inexact Rounded +pwsx2854 power 82E+1 0.5 -> 29 Inexact Rounded +pwsx2855 power 82E+2 0.5 -> 91 Inexact Rounded +pwsx2856 power 82E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2857 power 0.83 0.5 -> 0.91 Inexact Rounded +pwsx2858 power 0.083 0.5 -> 0.29 Inexact Rounded +pwsx2859 power 83.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2860 power 83.00E-2 0.5 -> 0.91 Inexact Rounded +pwsx2861 power 83E-3 0.5 -> 0.29 Inexact Rounded +pwsx2862 power 83E+1 0.5 -> 29 Inexact Rounded +pwsx2863 power 83E+2 0.5 -> 91 Inexact Rounded +pwsx2864 power 83E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2865 power 0.84 0.5 -> 0.92 Inexact Rounded +pwsx2866 power 0.084 0.5 -> 0.29 Inexact Rounded +pwsx2867 power 84.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2868 power 84.00E-2 0.5 -> 0.92 Inexact Rounded +pwsx2869 power 84E-3 0.5 -> 0.29 Inexact Rounded +pwsx2870 power 84E+1 0.5 -> 29 Inexact Rounded +pwsx2871 power 84E+2 0.5 -> 92 Inexact Rounded +pwsx2872 power 84E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2873 power 0.85 0.5 -> 0.92 Inexact Rounded +pwsx2874 power 0.085 0.5 -> 0.29 Inexact Rounded +pwsx2875 power 85.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2876 power 85.00E-2 0.5 -> 0.92 Inexact Rounded +pwsx2877 power 85E-3 0.5 -> 0.29 Inexact Rounded +pwsx2878 power 85E+1 0.5 -> 29 Inexact Rounded +pwsx2879 power 85E+2 0.5 -> 92 Inexact Rounded +pwsx2880 power 85E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2881 power 0.86 0.5 -> 0.93 Inexact Rounded +pwsx2882 power 0.086 0.5 -> 0.29 Inexact Rounded +pwsx2883 power 86.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2884 power 86.00E-2 0.5 -> 0.93 Inexact Rounded +pwsx2885 power 86E-3 0.5 -> 0.29 Inexact Rounded +pwsx2886 power 86E+1 0.5 -> 29 Inexact Rounded +pwsx2887 power 86E+2 0.5 -> 93 Inexact Rounded +pwsx2888 power 86E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2889 power 0.87 0.5 -> 0.93 Inexact Rounded +pwsx2890 power 0.087 0.5 -> 0.29 Inexact Rounded +pwsx2891 power 87.0E-1 0.5 -> 2.9 Inexact Rounded +pwsx2892 power 87.00E-2 0.5 -> 0.93 Inexact Rounded +pwsx2893 power 87E-3 0.5 -> 0.29 Inexact Rounded +pwsx2894 power 87E+1 0.5 -> 29 Inexact Rounded +pwsx2895 power 87E+2 0.5 -> 93 Inexact Rounded +pwsx2896 power 87E+3 0.5 -> 2.9E+2 Inexact Rounded +pwsx2897 power 0.88 0.5 -> 0.94 Inexact Rounded +pwsx2898 power 0.088 0.5 -> 0.30 Inexact Rounded +pwsx2899 power 88.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2900 power 88.00E-2 0.5 -> 0.94 Inexact Rounded +pwsx2901 power 88E-3 0.5 -> 0.30 Inexact Rounded +pwsx2902 power 88E+1 0.5 -> 30 Inexact Rounded +pwsx2903 power 88E+2 0.5 -> 94 Inexact Rounded +pwsx2904 power 88E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2905 power 0.89 0.5 -> 0.94 Inexact Rounded +pwsx2906 power 0.089 0.5 -> 0.30 Inexact Rounded +pwsx2907 power 89.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2908 power 89.00E-2 0.5 -> 0.94 Inexact Rounded +pwsx2909 power 89E-3 0.5 -> 0.30 Inexact Rounded +pwsx2910 power 89E+1 0.5 -> 30 Inexact Rounded +pwsx2911 power 89E+2 0.5 -> 94 Inexact Rounded +pwsx2912 power 89E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2913 power 0.90 0.5 -> 0.95 Inexact Rounded +pwsx2914 power 0.090 0.5 -> 0.30 Inexact Rounded +pwsx2915 power 90.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2916 power 90.00E-2 0.5 -> 0.95 Inexact Rounded +pwsx2917 power 90E-3 0.5 -> 0.30 Inexact Rounded +pwsx2918 power 90E+1 0.5 -> 30 Inexact Rounded +pwsx2919 power 90E+2 0.5 -> 95 Inexact Rounded +pwsx2920 power 90E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2921 power 0.91 0.5 -> 0.95 Inexact Rounded +pwsx2922 power 0.091 0.5 -> 0.30 Inexact Rounded +pwsx2923 power 91.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2924 power 91.00E-2 0.5 -> 0.95 Inexact Rounded +pwsx2925 power 91E-3 0.5 -> 0.30 Inexact Rounded +pwsx2926 power 91E+1 0.5 -> 30 Inexact Rounded +pwsx2927 power 91E+2 0.5 -> 95 Inexact Rounded +pwsx2928 power 91E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2929 power 0.92 0.5 -> 0.96 Inexact Rounded +pwsx2930 power 0.092 0.5 -> 0.30 Inexact Rounded +pwsx2931 power 92.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2932 power 92.00E-2 0.5 -> 0.96 Inexact Rounded +pwsx2933 power 92E-3 0.5 -> 0.30 Inexact Rounded +pwsx2934 power 92E+1 0.5 -> 30 Inexact Rounded +pwsx2935 power 92E+2 0.5 -> 96 Inexact Rounded +pwsx2936 power 92E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2937 power 0.93 0.5 -> 0.96 Inexact Rounded +pwsx2938 power 0.093 0.5 -> 0.30 Inexact Rounded +pwsx2939 power 93.0E-1 0.5 -> 3.0 Inexact Rounded +pwsx2940 power 93.00E-2 0.5 -> 0.96 Inexact Rounded +pwsx2941 power 93E-3 0.5 -> 0.30 Inexact Rounded +pwsx2942 power 93E+1 0.5 -> 30 Inexact Rounded +pwsx2943 power 93E+2 0.5 -> 96 Inexact Rounded +pwsx2944 power 93E+3 0.5 -> 3.0E+2 Inexact Rounded +pwsx2945 power 0.94 0.5 -> 0.97 Inexact Rounded +pwsx2946 power 0.094 0.5 -> 0.31 Inexact Rounded +pwsx2947 power 94.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2948 power 94.00E-2 0.5 -> 0.97 Inexact Rounded +pwsx2949 power 94E-3 0.5 -> 0.31 Inexact Rounded +pwsx2950 power 94E+1 0.5 -> 31 Inexact Rounded +pwsx2951 power 94E+2 0.5 -> 97 Inexact Rounded +pwsx2952 power 94E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2953 power 0.95 0.5 -> 0.97 Inexact Rounded +pwsx2954 power 0.095 0.5 -> 0.31 Inexact Rounded +pwsx2955 power 95.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2956 power 95.00E-2 0.5 -> 0.97 Inexact Rounded +pwsx2957 power 95E-3 0.5 -> 0.31 Inexact Rounded +pwsx2958 power 95E+1 0.5 -> 31 Inexact Rounded +pwsx2959 power 95E+2 0.5 -> 97 Inexact Rounded +pwsx2960 power 95E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2961 power 0.96 0.5 -> 0.98 Inexact Rounded +pwsx2962 power 0.096 0.5 -> 0.31 Inexact Rounded +pwsx2963 power 96.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2964 power 96.00E-2 0.5 -> 0.98 Inexact Rounded +pwsx2965 power 96E-3 0.5 -> 0.31 Inexact Rounded +pwsx2966 power 96E+1 0.5 -> 31 Inexact Rounded +pwsx2967 power 96E+2 0.5 -> 98 Inexact Rounded +pwsx2968 power 96E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2969 power 0.97 0.5 -> 0.98 Inexact Rounded +pwsx2970 power 0.097 0.5 -> 0.31 Inexact Rounded +pwsx2971 power 97.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2972 power 97.00E-2 0.5 -> 0.98 Inexact Rounded +pwsx2973 power 97E-3 0.5 -> 0.31 Inexact Rounded +pwsx2974 power 97E+1 0.5 -> 31 Inexact Rounded +pwsx2975 power 97E+2 0.5 -> 98 Inexact Rounded +pwsx2976 power 97E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2977 power 0.98 0.5 -> 0.99 Inexact Rounded +pwsx2978 power 0.098 0.5 -> 0.31 Inexact Rounded +pwsx2979 power 98.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2980 power 98.00E-2 0.5 -> 0.99 Inexact Rounded +pwsx2981 power 98E-3 0.5 -> 0.31 Inexact Rounded +pwsx2982 power 98E+1 0.5 -> 31 Inexact Rounded +pwsx2983 power 98E+2 0.5 -> 99 Inexact Rounded +pwsx2984 power 98E+3 0.5 -> 3.1E+2 Inexact Rounded +pwsx2985 power 0.99 0.5 -> 0.99 Inexact Rounded +pwsx2986 power 0.099 0.5 -> 0.31 Inexact Rounded +pwsx2987 power 99.0E-1 0.5 -> 3.1 Inexact Rounded +pwsx2988 power 99.00E-2 0.5 -> 0.99 Inexact Rounded +pwsx2989 power 99E-3 0.5 -> 0.31 Inexact Rounded +pwsx2990 power 99E+1 0.5 -> 31 Inexact Rounded +pwsx2991 power 99E+2 0.5 -> 99 Inexact Rounded +pwsx2992 power 99E+3 0.5 -> 3.1E+2 Inexact Rounded + +-- Precision 3 squareroot tests [exhaustive, f and f/10] +rounding: half_even +maxExponent: 999 +minexponent: -999 +precision: 3 +pwsx3001 power 0.1 0.5 -> 0.316 Inexact Rounded +pwsx3002 power 0.01 0.5 -> 0.100 Inexact Rounded +pwsx3003 power 0.2 0.5 -> 0.447 Inexact Rounded +pwsx3004 power 0.02 0.5 -> 0.141 Inexact Rounded +pwsx3005 power 0.3 0.5 -> 0.548 Inexact Rounded +pwsx3006 power 0.03 0.5 -> 0.173 Inexact Rounded +pwsx3007 power 0.4 0.5 -> 0.632 Inexact Rounded +pwsx3008 power 0.04 0.5 -> 0.200 Inexact Rounded +pwsx3009 power 0.5 0.5 -> 0.707 Inexact Rounded +pwsx3010 power 0.05 0.5 -> 0.224 Inexact Rounded +pwsx3011 power 0.6 0.5 -> 0.775 Inexact Rounded +pwsx3012 power 0.06 0.5 -> 0.245 Inexact Rounded +pwsx3013 power 0.7 0.5 -> 0.837 Inexact Rounded +pwsx3014 power 0.07 0.5 -> 0.265 Inexact Rounded +pwsx3015 power 0.8 0.5 -> 0.894 Inexact Rounded +pwsx3016 power 0.08 0.5 -> 0.283 Inexact Rounded +pwsx3017 power 0.9 0.5 -> 0.949 Inexact Rounded +pwsx3018 power 0.09 0.5 -> 0.300 Inexact Rounded +pwsx3019 power 0.11 0.5 -> 0.332 Inexact Rounded +pwsx3020 power 0.011 0.5 -> 0.105 Inexact Rounded +pwsx3021 power 0.12 0.5 -> 0.346 Inexact Rounded +pwsx3022 power 0.012 0.5 -> 0.110 Inexact Rounded +pwsx3023 power 0.13 0.5 -> 0.361 Inexact Rounded +pwsx3024 power 0.013 0.5 -> 0.114 Inexact Rounded +pwsx3025 power 0.14 0.5 -> 0.374 Inexact Rounded +pwsx3026 power 0.014 0.5 -> 0.118 Inexact Rounded +pwsx3027 power 0.15 0.5 -> 0.387 Inexact Rounded +pwsx3028 power 0.015 0.5 -> 0.122 Inexact Rounded +pwsx3029 power 0.16 0.5 -> 0.400 Inexact Rounded +pwsx3030 power 0.016 0.5 -> 0.126 Inexact Rounded +pwsx3031 power 0.17 0.5 -> 0.412 Inexact Rounded +pwsx3032 power 0.017 0.5 -> 0.130 Inexact Rounded +pwsx3033 power 0.18 0.5 -> 0.424 Inexact Rounded +pwsx3034 power 0.018 0.5 -> 0.134 Inexact Rounded +pwsx3035 power 0.19 0.5 -> 0.436 Inexact Rounded +pwsx3036 power 0.019 0.5 -> 0.138 Inexact Rounded +pwsx3037 power 0.21 0.5 -> 0.458 Inexact Rounded +pwsx3038 power 0.021 0.5 -> 0.145 Inexact Rounded +pwsx3039 power 0.22 0.5 -> 0.469 Inexact Rounded +pwsx3040 power 0.022 0.5 -> 0.148 Inexact Rounded +pwsx3041 power 0.23 0.5 -> 0.480 Inexact Rounded +pwsx3042 power 0.023 0.5 -> 0.152 Inexact Rounded +pwsx3043 power 0.24 0.5 -> 0.490 Inexact Rounded +pwsx3044 power 0.024 0.5 -> 0.155 Inexact Rounded +pwsx3045 power 0.25 0.5 -> 0.500 Inexact Rounded +pwsx3046 power 0.025 0.5 -> 0.158 Inexact Rounded +pwsx3047 power 0.26 0.5 -> 0.510 Inexact Rounded +pwsx3048 power 0.026 0.5 -> 0.161 Inexact Rounded +pwsx3049 power 0.27 0.5 -> 0.520 Inexact Rounded +pwsx3050 power 0.027 0.5 -> 0.164 Inexact Rounded +pwsx3051 power 0.28 0.5 -> 0.529 Inexact Rounded +pwsx3052 power 0.028 0.5 -> 0.167 Inexact Rounded +pwsx3053 power 0.29 0.5 -> 0.539 Inexact Rounded +pwsx3054 power 0.029 0.5 -> 0.170 Inexact Rounded +pwsx3055 power 0.31 0.5 -> 0.557 Inexact Rounded +pwsx3056 power 0.031 0.5 -> 0.176 Inexact Rounded +pwsx3057 power 0.32 0.5 -> 0.566 Inexact Rounded +pwsx3058 power 0.032 0.5 -> 0.179 Inexact Rounded +pwsx3059 power 0.33 0.5 -> 0.574 Inexact Rounded +pwsx3060 power 0.033 0.5 -> 0.182 Inexact Rounded +pwsx3061 power 0.34 0.5 -> 0.583 Inexact Rounded +pwsx3062 power 0.034 0.5 -> 0.184 Inexact Rounded +pwsx3063 power 0.35 0.5 -> 0.592 Inexact Rounded +pwsx3064 power 0.035 0.5 -> 0.187 Inexact Rounded +pwsx3065 power 0.36 0.5 -> 0.600 Inexact Rounded +pwsx3066 power 0.036 0.5 -> 0.190 Inexact Rounded +pwsx3067 power 0.37 0.5 -> 0.608 Inexact Rounded +pwsx3068 power 0.037 0.5 -> 0.192 Inexact Rounded +pwsx3069 power 0.38 0.5 -> 0.616 Inexact Rounded +pwsx3070 power 0.038 0.5 -> 0.195 Inexact Rounded +pwsx3071 power 0.39 0.5 -> 0.624 Inexact Rounded +pwsx3072 power 0.039 0.5 -> 0.197 Inexact Rounded +pwsx3073 power 0.41 0.5 -> 0.640 Inexact Rounded +pwsx3074 power 0.041 0.5 -> 0.202 Inexact Rounded +pwsx3075 power 0.42 0.5 -> 0.648 Inexact Rounded +pwsx3076 power 0.042 0.5 -> 0.205 Inexact Rounded +pwsx3077 power 0.43 0.5 -> 0.656 Inexact Rounded +pwsx3078 power 0.043 0.5 -> 0.207 Inexact Rounded +pwsx3079 power 0.44 0.5 -> 0.663 Inexact Rounded +pwsx3080 power 0.044 0.5 -> 0.210 Inexact Rounded +pwsx3081 power 0.45 0.5 -> 0.671 Inexact Rounded +pwsx3082 power 0.045 0.5 -> 0.212 Inexact Rounded +pwsx3083 power 0.46 0.5 -> 0.678 Inexact Rounded +pwsx3084 power 0.046 0.5 -> 0.214 Inexact Rounded +pwsx3085 power 0.47 0.5 -> 0.686 Inexact Rounded +pwsx3086 power 0.047 0.5 -> 0.217 Inexact Rounded +pwsx3087 power 0.48 0.5 -> 0.693 Inexact Rounded +pwsx3088 power 0.048 0.5 -> 0.219 Inexact Rounded +pwsx3089 power 0.49 0.5 -> 0.700 Inexact Rounded +pwsx3090 power 0.049 0.5 -> 0.221 Inexact Rounded +pwsx3091 power 0.51 0.5 -> 0.714 Inexact Rounded +pwsx3092 power 0.051 0.5 -> 0.226 Inexact Rounded +pwsx3093 power 0.52 0.5 -> 0.721 Inexact Rounded +pwsx3094 power 0.052 0.5 -> 0.228 Inexact Rounded +pwsx3095 power 0.53 0.5 -> 0.728 Inexact Rounded +pwsx3096 power 0.053 0.5 -> 0.230 Inexact Rounded +pwsx3097 power 0.54 0.5 -> 0.735 Inexact Rounded +pwsx3098 power 0.054 0.5 -> 0.232 Inexact Rounded +pwsx3099 power 0.55 0.5 -> 0.742 Inexact Rounded +pwsx3100 power 0.055 0.5 -> 0.235 Inexact Rounded +pwsx3101 power 0.56 0.5 -> 0.748 Inexact Rounded +pwsx3102 power 0.056 0.5 -> 0.237 Inexact Rounded +pwsx3103 power 0.57 0.5 -> 0.755 Inexact Rounded +pwsx3104 power 0.057 0.5 -> 0.239 Inexact Rounded +pwsx3105 power 0.58 0.5 -> 0.762 Inexact Rounded +pwsx3106 power 0.058 0.5 -> 0.241 Inexact Rounded +pwsx3107 power 0.59 0.5 -> 0.768 Inexact Rounded +pwsx3108 power 0.059 0.5 -> 0.243 Inexact Rounded +pwsx3109 power 0.61 0.5 -> 0.781 Inexact Rounded +pwsx3110 power 0.061 0.5 -> 0.247 Inexact Rounded +pwsx3111 power 0.62 0.5 -> 0.787 Inexact Rounded +pwsx3112 power 0.062 0.5 -> 0.249 Inexact Rounded +pwsx3113 power 0.63 0.5 -> 0.794 Inexact Rounded +pwsx3114 power 0.063 0.5 -> 0.251 Inexact Rounded +pwsx3115 power 0.64 0.5 -> 0.800 Inexact Rounded +pwsx3116 power 0.064 0.5 -> 0.253 Inexact Rounded +pwsx3117 power 0.65 0.5 -> 0.806 Inexact Rounded +pwsx3118 power 0.065 0.5 -> 0.255 Inexact Rounded +pwsx3119 power 0.66 0.5 -> 0.812 Inexact Rounded +pwsx3120 power 0.066 0.5 -> 0.257 Inexact Rounded +pwsx3121 power 0.67 0.5 -> 0.819 Inexact Rounded +pwsx3122 power 0.067 0.5 -> 0.259 Inexact Rounded +pwsx3123 power 0.68 0.5 -> 0.825 Inexact Rounded +pwsx3124 power 0.068 0.5 -> 0.261 Inexact Rounded +pwsx3125 power 0.69 0.5 -> 0.831 Inexact Rounded +pwsx3126 power 0.069 0.5 -> 0.263 Inexact Rounded +pwsx3127 power 0.71 0.5 -> 0.843 Inexact Rounded +pwsx3128 power 0.071 0.5 -> 0.266 Inexact Rounded +pwsx3129 power 0.72 0.5 -> 0.849 Inexact Rounded +pwsx3130 power 0.072 0.5 -> 0.268 Inexact Rounded +pwsx3131 power 0.73 0.5 -> 0.854 Inexact Rounded +pwsx3132 power 0.073 0.5 -> 0.270 Inexact Rounded +pwsx3133 power 0.74 0.5 -> 0.860 Inexact Rounded +pwsx3134 power 0.074 0.5 -> 0.272 Inexact Rounded +pwsx3135 power 0.75 0.5 -> 0.866 Inexact Rounded +pwsx3136 power 0.075 0.5 -> 0.274 Inexact Rounded +pwsx3137 power 0.76 0.5 -> 0.872 Inexact Rounded +pwsx3138 power 0.076 0.5 -> 0.276 Inexact Rounded +pwsx3139 power 0.77 0.5 -> 0.877 Inexact Rounded +pwsx3140 power 0.077 0.5 -> 0.277 Inexact Rounded +pwsx3141 power 0.78 0.5 -> 0.883 Inexact Rounded +pwsx3142 power 0.078 0.5 -> 0.279 Inexact Rounded +pwsx3143 power 0.79 0.5 -> 0.889 Inexact Rounded +pwsx3144 power 0.079 0.5 -> 0.281 Inexact Rounded +pwsx3145 power 0.81 0.5 -> 0.900 Inexact Rounded +pwsx3146 power 0.081 0.5 -> 0.285 Inexact Rounded +pwsx3147 power 0.82 0.5 -> 0.906 Inexact Rounded +pwsx3148 power 0.082 0.5 -> 0.286 Inexact Rounded +pwsx3149 power 0.83 0.5 -> 0.911 Inexact Rounded +pwsx3150 power 0.083 0.5 -> 0.288 Inexact Rounded +pwsx3151 power 0.84 0.5 -> 0.917 Inexact Rounded +pwsx3152 power 0.084 0.5 -> 0.290 Inexact Rounded +pwsx3153 power 0.85 0.5 -> 0.922 Inexact Rounded +pwsx3154 power 0.085 0.5 -> 0.292 Inexact Rounded +pwsx3155 power 0.86 0.5 -> 0.927 Inexact Rounded +pwsx3156 power 0.086 0.5 -> 0.293 Inexact Rounded +pwsx3157 power 0.87 0.5 -> 0.933 Inexact Rounded +pwsx3158 power 0.087 0.5 -> 0.295 Inexact Rounded +pwsx3159 power 0.88 0.5 -> 0.938 Inexact Rounded +pwsx3160 power 0.088 0.5 -> 0.297 Inexact Rounded +pwsx3161 power 0.89 0.5 -> 0.943 Inexact Rounded +pwsx3162 power 0.089 0.5 -> 0.298 Inexact Rounded +pwsx3163 power 0.91 0.5 -> 0.954 Inexact Rounded +pwsx3164 power 0.091 0.5 -> 0.302 Inexact Rounded +pwsx3165 power 0.92 0.5 -> 0.959 Inexact Rounded +pwsx3166 power 0.092 0.5 -> 0.303 Inexact Rounded +pwsx3167 power 0.93 0.5 -> 0.964 Inexact Rounded +pwsx3168 power 0.093 0.5 -> 0.305 Inexact Rounded +pwsx3169 power 0.94 0.5 -> 0.970 Inexact Rounded +pwsx3170 power 0.094 0.5 -> 0.307 Inexact Rounded +pwsx3171 power 0.95 0.5 -> 0.975 Inexact Rounded +pwsx3172 power 0.095 0.5 -> 0.308 Inexact Rounded +pwsx3173 power 0.96 0.5 -> 0.980 Inexact Rounded +pwsx3174 power 0.096 0.5 -> 0.310 Inexact Rounded +pwsx3175 power 0.97 0.5 -> 0.985 Inexact Rounded +pwsx3176 power 0.097 0.5 -> 0.311 Inexact Rounded +pwsx3177 power 0.98 0.5 -> 0.990 Inexact Rounded +pwsx3178 power 0.098 0.5 -> 0.313 Inexact Rounded +pwsx3179 power 0.99 0.5 -> 0.995 Inexact Rounded +pwsx3180 power 0.099 0.5 -> 0.315 Inexact Rounded +pwsx3181 power 0.101 0.5 -> 0.318 Inexact Rounded +pwsx3182 power 0.0101 0.5 -> 0.100 Inexact Rounded +pwsx3183 power 0.102 0.5 -> 0.319 Inexact Rounded +pwsx3184 power 0.0102 0.5 -> 0.101 Inexact Rounded +pwsx3185 power 0.103 0.5 -> 0.321 Inexact Rounded +pwsx3186 power 0.0103 0.5 -> 0.101 Inexact Rounded +pwsx3187 power 0.104 0.5 -> 0.322 Inexact Rounded +pwsx3188 power 0.0104 0.5 -> 0.102 Inexact Rounded +pwsx3189 power 0.105 0.5 -> 0.324 Inexact Rounded +pwsx3190 power 0.0105 0.5 -> 0.102 Inexact Rounded +pwsx3191 power 0.106 0.5 -> 0.326 Inexact Rounded +pwsx3192 power 0.0106 0.5 -> 0.103 Inexact Rounded +pwsx3193 power 0.107 0.5 -> 0.327 Inexact Rounded +pwsx3194 power 0.0107 0.5 -> 0.103 Inexact Rounded +pwsx3195 power 0.108 0.5 -> 0.329 Inexact Rounded +pwsx3196 power 0.0108 0.5 -> 0.104 Inexact Rounded +pwsx3197 power 0.109 0.5 -> 0.330 Inexact Rounded +pwsx3198 power 0.0109 0.5 -> 0.104 Inexact Rounded +pwsx3199 power 0.111 0.5 -> 0.333 Inexact Rounded +pwsx3200 power 0.0111 0.5 -> 0.105 Inexact Rounded +pwsx3201 power 0.112 0.5 -> 0.335 Inexact Rounded +pwsx3202 power 0.0112 0.5 -> 0.106 Inexact Rounded +pwsx3203 power 0.113 0.5 -> 0.336 Inexact Rounded +pwsx3204 power 0.0113 0.5 -> 0.106 Inexact Rounded +pwsx3205 power 0.114 0.5 -> 0.338 Inexact Rounded +pwsx3206 power 0.0114 0.5 -> 0.107 Inexact Rounded +pwsx3207 power 0.115 0.5 -> 0.339 Inexact Rounded +pwsx3208 power 0.0115 0.5 -> 0.107 Inexact Rounded +pwsx3209 power 0.116 0.5 -> 0.341 Inexact Rounded +pwsx3210 power 0.0116 0.5 -> 0.108 Inexact Rounded +pwsx3211 power 0.117 0.5 -> 0.342 Inexact Rounded +pwsx3212 power 0.0117 0.5 -> 0.108 Inexact Rounded +pwsx3213 power 0.118 0.5 -> 0.344 Inexact Rounded +pwsx3214 power 0.0118 0.5 -> 0.109 Inexact Rounded +pwsx3215 power 0.119 0.5 -> 0.345 Inexact Rounded +pwsx3216 power 0.0119 0.5 -> 0.109 Inexact Rounded +pwsx3217 power 0.121 0.5 -> 0.348 Inexact Rounded +pwsx3218 power 0.0121 0.5 -> 0.110 Inexact Rounded +pwsx3219 power 0.122 0.5 -> 0.349 Inexact Rounded +pwsx3220 power 0.0122 0.5 -> 0.110 Inexact Rounded +pwsx3221 power 0.123 0.5 -> 0.351 Inexact Rounded +pwsx3222 power 0.0123 0.5 -> 0.111 Inexact Rounded +pwsx3223 power 0.124 0.5 -> 0.352 Inexact Rounded +pwsx3224 power 0.0124 0.5 -> 0.111 Inexact Rounded +pwsx3225 power 0.125 0.5 -> 0.354 Inexact Rounded +pwsx3226 power 0.0125 0.5 -> 0.112 Inexact Rounded +pwsx3227 power 0.126 0.5 -> 0.355 Inexact Rounded +pwsx3228 power 0.0126 0.5 -> 0.112 Inexact Rounded +pwsx3229 power 0.127 0.5 -> 0.356 Inexact Rounded +pwsx3230 power 0.0127 0.5 -> 0.113 Inexact Rounded +pwsx3231 power 0.128 0.5 -> 0.358 Inexact Rounded +pwsx3232 power 0.0128 0.5 -> 0.113 Inexact Rounded +pwsx3233 power 0.129 0.5 -> 0.359 Inexact Rounded +pwsx3234 power 0.0129 0.5 -> 0.114 Inexact Rounded +pwsx3235 power 0.131 0.5 -> 0.362 Inexact Rounded +pwsx3236 power 0.0131 0.5 -> 0.114 Inexact Rounded +pwsx3237 power 0.132 0.5 -> 0.363 Inexact Rounded +pwsx3238 power 0.0132 0.5 -> 0.115 Inexact Rounded +pwsx3239 power 0.133 0.5 -> 0.365 Inexact Rounded +pwsx3240 power 0.0133 0.5 -> 0.115 Inexact Rounded +pwsx3241 power 0.134 0.5 -> 0.366 Inexact Rounded +pwsx3242 power 0.0134 0.5 -> 0.116 Inexact Rounded +pwsx3243 power 0.135 0.5 -> 0.367 Inexact Rounded +pwsx3244 power 0.0135 0.5 -> 0.116 Inexact Rounded +pwsx3245 power 0.136 0.5 -> 0.369 Inexact Rounded +pwsx3246 power 0.0136 0.5 -> 0.117 Inexact Rounded +pwsx3247 power 0.137 0.5 -> 0.370 Inexact Rounded +pwsx3248 power 0.0137 0.5 -> 0.117 Inexact Rounded +pwsx3249 power 0.138 0.5 -> 0.371 Inexact Rounded +pwsx3250 power 0.0138 0.5 -> 0.117 Inexact Rounded +pwsx3251 power 0.139 0.5 -> 0.373 Inexact Rounded +pwsx3252 power 0.0139 0.5 -> 0.118 Inexact Rounded +pwsx3253 power 0.141 0.5 -> 0.375 Inexact Rounded +pwsx3254 power 0.0141 0.5 -> 0.119 Inexact Rounded +pwsx3255 power 0.142 0.5 -> 0.377 Inexact Rounded +pwsx3256 power 0.0142 0.5 -> 0.119 Inexact Rounded +pwsx3257 power 0.143 0.5 -> 0.378 Inexact Rounded +pwsx3258 power 0.0143 0.5 -> 0.120 Inexact Rounded +pwsx3259 power 0.144 0.5 -> 0.379 Inexact Rounded +pwsx3260 power 0.0144 0.5 -> 0.120 Inexact Rounded +pwsx3261 power 0.145 0.5 -> 0.381 Inexact Rounded +pwsx3262 power 0.0145 0.5 -> 0.120 Inexact Rounded +pwsx3263 power 0.146 0.5 -> 0.382 Inexact Rounded +pwsx3264 power 0.0146 0.5 -> 0.121 Inexact Rounded +pwsx3265 power 0.147 0.5 -> 0.383 Inexact Rounded +pwsx3266 power 0.0147 0.5 -> 0.121 Inexact Rounded +pwsx3267 power 0.148 0.5 -> 0.385 Inexact Rounded +pwsx3268 power 0.0148 0.5 -> 0.122 Inexact Rounded +pwsx3269 power 0.149 0.5 -> 0.386 Inexact Rounded +pwsx3270 power 0.0149 0.5 -> 0.122 Inexact Rounded +pwsx3271 power 0.151 0.5 -> 0.389 Inexact Rounded +pwsx3272 power 0.0151 0.5 -> 0.123 Inexact Rounded +pwsx3273 power 0.152 0.5 -> 0.390 Inexact Rounded +pwsx3274 power 0.0152 0.5 -> 0.123 Inexact Rounded +pwsx3275 power 0.153 0.5 -> 0.391 Inexact Rounded +pwsx3276 power 0.0153 0.5 -> 0.124 Inexact Rounded +pwsx3277 power 0.154 0.5 -> 0.392 Inexact Rounded +pwsx3278 power 0.0154 0.5 -> 0.124 Inexact Rounded +pwsx3279 power 0.155 0.5 -> 0.394 Inexact Rounded +pwsx3280 power 0.0155 0.5 -> 0.124 Inexact Rounded +pwsx3281 power 0.156 0.5 -> 0.395 Inexact Rounded +pwsx3282 power 0.0156 0.5 -> 0.125 Inexact Rounded +pwsx3283 power 0.157 0.5 -> 0.396 Inexact Rounded +pwsx3284 power 0.0157 0.5 -> 0.125 Inexact Rounded +pwsx3285 power 0.158 0.5 -> 0.397 Inexact Rounded +pwsx3286 power 0.0158 0.5 -> 0.126 Inexact Rounded +pwsx3287 power 0.159 0.5 -> 0.399 Inexact Rounded +pwsx3288 power 0.0159 0.5 -> 0.126 Inexact Rounded +pwsx3289 power 0.161 0.5 -> 0.401 Inexact Rounded +pwsx3290 power 0.0161 0.5 -> 0.127 Inexact Rounded +pwsx3291 power 0.162 0.5 -> 0.402 Inexact Rounded +pwsx3292 power 0.0162 0.5 -> 0.127 Inexact Rounded +pwsx3293 power 0.163 0.5 -> 0.404 Inexact Rounded +pwsx3294 power 0.0163 0.5 -> 0.128 Inexact Rounded +pwsx3295 power 0.164 0.5 -> 0.405 Inexact Rounded +pwsx3296 power 0.0164 0.5 -> 0.128 Inexact Rounded +pwsx3297 power 0.165 0.5 -> 0.406 Inexact Rounded +pwsx3298 power 0.0165 0.5 -> 0.128 Inexact Rounded +pwsx3299 power 0.166 0.5 -> 0.407 Inexact Rounded +pwsx3300 power 0.0166 0.5 -> 0.129 Inexact Rounded +pwsx3301 power 0.167 0.5 -> 0.409 Inexact Rounded +pwsx3302 power 0.0167 0.5 -> 0.129 Inexact Rounded +pwsx3303 power 0.168 0.5 -> 0.410 Inexact Rounded +pwsx3304 power 0.0168 0.5 -> 0.130 Inexact Rounded +pwsx3305 power 0.169 0.5 -> 0.411 Inexact Rounded +pwsx3306 power 0.0169 0.5 -> 0.130 Inexact Rounded +pwsx3307 power 0.171 0.5 -> 0.414 Inexact Rounded +pwsx3308 power 0.0171 0.5 -> 0.131 Inexact Rounded +pwsx3309 power 0.172 0.5 -> 0.415 Inexact Rounded +pwsx3310 power 0.0172 0.5 -> 0.131 Inexact Rounded +pwsx3311 power 0.173 0.5 -> 0.416 Inexact Rounded +pwsx3312 power 0.0173 0.5 -> 0.132 Inexact Rounded +pwsx3313 power 0.174 0.5 -> 0.417 Inexact Rounded +pwsx3314 power 0.0174 0.5 -> 0.132 Inexact Rounded +pwsx3315 power 0.175 0.5 -> 0.418 Inexact Rounded +pwsx3316 power 0.0175 0.5 -> 0.132 Inexact Rounded +pwsx3317 power 0.176 0.5 -> 0.420 Inexact Rounded +pwsx3318 power 0.0176 0.5 -> 0.133 Inexact Rounded +pwsx3319 power 0.177 0.5 -> 0.421 Inexact Rounded +pwsx3320 power 0.0177 0.5 -> 0.133 Inexact Rounded +pwsx3321 power 0.178 0.5 -> 0.422 Inexact Rounded +pwsx3322 power 0.0178 0.5 -> 0.133 Inexact Rounded +pwsx3323 power 0.179 0.5 -> 0.423 Inexact Rounded +pwsx3324 power 0.0179 0.5 -> 0.134 Inexact Rounded +pwsx3325 power 0.181 0.5 -> 0.425 Inexact Rounded +pwsx3326 power 0.0181 0.5 -> 0.135 Inexact Rounded +pwsx3327 power 0.182 0.5 -> 0.427 Inexact Rounded +pwsx3328 power 0.0182 0.5 -> 0.135 Inexact Rounded +pwsx3329 power 0.183 0.5 -> 0.428 Inexact Rounded +pwsx3330 power 0.0183 0.5 -> 0.135 Inexact Rounded +pwsx3331 power 0.184 0.5 -> 0.429 Inexact Rounded +pwsx3332 power 0.0184 0.5 -> 0.136 Inexact Rounded +pwsx3333 power 0.185 0.5 -> 0.430 Inexact Rounded +pwsx3334 power 0.0185 0.5 -> 0.136 Inexact Rounded +pwsx3335 power 0.186 0.5 -> 0.431 Inexact Rounded +pwsx3336 power 0.0186 0.5 -> 0.136 Inexact Rounded +pwsx3337 power 0.187 0.5 -> 0.432 Inexact Rounded +pwsx3338 power 0.0187 0.5 -> 0.137 Inexact Rounded +pwsx3339 power 0.188 0.5 -> 0.434 Inexact Rounded +pwsx3340 power 0.0188 0.5 -> 0.137 Inexact Rounded +pwsx3341 power 0.189 0.5 -> 0.435 Inexact Rounded +pwsx3342 power 0.0189 0.5 -> 0.137 Inexact Rounded +pwsx3343 power 0.191 0.5 -> 0.437 Inexact Rounded +pwsx3344 power 0.0191 0.5 -> 0.138 Inexact Rounded +pwsx3345 power 0.192 0.5 -> 0.438 Inexact Rounded +pwsx3346 power 0.0192 0.5 -> 0.139 Inexact Rounded +pwsx3347 power 0.193 0.5 -> 0.439 Inexact Rounded +pwsx3348 power 0.0193 0.5 -> 0.139 Inexact Rounded +pwsx3349 power 0.194 0.5 -> 0.440 Inexact Rounded +pwsx3350 power 0.0194 0.5 -> 0.139 Inexact Rounded +pwsx3351 power 0.195 0.5 -> 0.442 Inexact Rounded +pwsx3352 power 0.0195 0.5 -> 0.140 Inexact Rounded +pwsx3353 power 0.196 0.5 -> 0.443 Inexact Rounded +pwsx3354 power 0.0196 0.5 -> 0.140 Inexact Rounded +pwsx3355 power 0.197 0.5 -> 0.444 Inexact Rounded +pwsx3356 power 0.0197 0.5 -> 0.140 Inexact Rounded +pwsx3357 power 0.198 0.5 -> 0.445 Inexact Rounded +pwsx3358 power 0.0198 0.5 -> 0.141 Inexact Rounded +pwsx3359 power 0.199 0.5 -> 0.446 Inexact Rounded +pwsx3360 power 0.0199 0.5 -> 0.141 Inexact Rounded +pwsx3361 power 0.201 0.5 -> 0.448 Inexact Rounded +pwsx3362 power 0.0201 0.5 -> 0.142 Inexact Rounded +pwsx3363 power 0.202 0.5 -> 0.449 Inexact Rounded +pwsx3364 power 0.0202 0.5 -> 0.142 Inexact Rounded +pwsx3365 power 0.203 0.5 -> 0.451 Inexact Rounded +pwsx3366 power 0.0203 0.5 -> 0.142 Inexact Rounded +pwsx3367 power 0.204 0.5 -> 0.452 Inexact Rounded +pwsx3368 power 0.0204 0.5 -> 0.143 Inexact Rounded +pwsx3369 power 0.205 0.5 -> 0.453 Inexact Rounded +pwsx3370 power 0.0205 0.5 -> 0.143 Inexact Rounded +pwsx3371 power 0.206 0.5 -> 0.454 Inexact Rounded +pwsx3372 power 0.0206 0.5 -> 0.144 Inexact Rounded +pwsx3373 power 0.207 0.5 -> 0.455 Inexact Rounded +pwsx3374 power 0.0207 0.5 -> 0.144 Inexact Rounded +pwsx3375 power 0.208 0.5 -> 0.456 Inexact Rounded +pwsx3376 power 0.0208 0.5 -> 0.144 Inexact Rounded +pwsx3377 power 0.209 0.5 -> 0.457 Inexact Rounded +pwsx3378 power 0.0209 0.5 -> 0.145 Inexact Rounded +pwsx3379 power 0.211 0.5 -> 0.459 Inexact Rounded +pwsx3380 power 0.0211 0.5 -> 0.145 Inexact Rounded +pwsx3381 power 0.212 0.5 -> 0.460 Inexact Rounded +pwsx3382 power 0.0212 0.5 -> 0.146 Inexact Rounded +pwsx3383 power 0.213 0.5 -> 0.462 Inexact Rounded +pwsx3384 power 0.0213 0.5 -> 0.146 Inexact Rounded +pwsx3385 power 0.214 0.5 -> 0.463 Inexact Rounded +pwsx3386 power 0.0214 0.5 -> 0.146 Inexact Rounded +pwsx3387 power 0.215 0.5 -> 0.464 Inexact Rounded +pwsx3388 power 0.0215 0.5 -> 0.147 Inexact Rounded +pwsx3389 power 0.216 0.5 -> 0.465 Inexact Rounded +pwsx3390 power 0.0216 0.5 -> 0.147 Inexact Rounded +pwsx3391 power 0.217 0.5 -> 0.466 Inexact Rounded +pwsx3392 power 0.0217 0.5 -> 0.147 Inexact Rounded +pwsx3393 power 0.218 0.5 -> 0.467 Inexact Rounded +pwsx3394 power 0.0218 0.5 -> 0.148 Inexact Rounded +pwsx3395 power 0.219 0.5 -> 0.468 Inexact Rounded +pwsx3396 power 0.0219 0.5 -> 0.148 Inexact Rounded +pwsx3397 power 0.221 0.5 -> 0.470 Inexact Rounded +pwsx3398 power 0.0221 0.5 -> 0.149 Inexact Rounded +pwsx3399 power 0.222 0.5 -> 0.471 Inexact Rounded +pwsx3400 power 0.0222 0.5 -> 0.149 Inexact Rounded +pwsx3401 power 0.223 0.5 -> 0.472 Inexact Rounded +pwsx3402 power 0.0223 0.5 -> 0.149 Inexact Rounded +pwsx3403 power 0.224 0.5 -> 0.473 Inexact Rounded +pwsx3404 power 0.0224 0.5 -> 0.150 Inexact Rounded +pwsx3405 power 0.225 0.5 -> 0.474 Inexact Rounded +pwsx3406 power 0.0225 0.5 -> 0.150 Inexact Rounded +pwsx3407 power 0.226 0.5 -> 0.475 Inexact Rounded +pwsx3408 power 0.0226 0.5 -> 0.150 Inexact Rounded +pwsx3409 power 0.227 0.5 -> 0.476 Inexact Rounded +pwsx3410 power 0.0227 0.5 -> 0.151 Inexact Rounded +pwsx3411 power 0.228 0.5 -> 0.477 Inexact Rounded +pwsx3412 power 0.0228 0.5 -> 0.151 Inexact Rounded +pwsx3413 power 0.229 0.5 -> 0.479 Inexact Rounded +pwsx3414 power 0.0229 0.5 -> 0.151 Inexact Rounded +pwsx3415 power 0.231 0.5 -> 0.481 Inexact Rounded +pwsx3416 power 0.0231 0.5 -> 0.152 Inexact Rounded +pwsx3417 power 0.232 0.5 -> 0.482 Inexact Rounded +pwsx3418 power 0.0232 0.5 -> 0.152 Inexact Rounded +pwsx3419 power 0.233 0.5 -> 0.483 Inexact Rounded +pwsx3420 power 0.0233 0.5 -> 0.153 Inexact Rounded +pwsx3421 power 0.234 0.5 -> 0.484 Inexact Rounded +pwsx3422 power 0.0234 0.5 -> 0.153 Inexact Rounded +pwsx3423 power 0.235 0.5 -> 0.485 Inexact Rounded +pwsx3424 power 0.0235 0.5 -> 0.153 Inexact Rounded +pwsx3425 power 0.236 0.5 -> 0.486 Inexact Rounded +pwsx3426 power 0.0236 0.5 -> 0.154 Inexact Rounded +pwsx3427 power 0.237 0.5 -> 0.487 Inexact Rounded +pwsx3428 power 0.0237 0.5 -> 0.154 Inexact Rounded +pwsx3429 power 0.238 0.5 -> 0.488 Inexact Rounded +pwsx3430 power 0.0238 0.5 -> 0.154 Inexact Rounded +pwsx3431 power 0.239 0.5 -> 0.489 Inexact Rounded +pwsx3432 power 0.0239 0.5 -> 0.155 Inexact Rounded +pwsx3433 power 0.241 0.5 -> 0.491 Inexact Rounded +pwsx3434 power 0.0241 0.5 -> 0.155 Inexact Rounded +pwsx3435 power 0.242 0.5 -> 0.492 Inexact Rounded +pwsx3436 power 0.0242 0.5 -> 0.156 Inexact Rounded +pwsx3437 power 0.243 0.5 -> 0.493 Inexact Rounded +pwsx3438 power 0.0243 0.5 -> 0.156 Inexact Rounded +pwsx3439 power 0.244 0.5 -> 0.494 Inexact Rounded +pwsx3440 power 0.0244 0.5 -> 0.156 Inexact Rounded +pwsx3441 power 0.245 0.5 -> 0.495 Inexact Rounded +pwsx3442 power 0.0245 0.5 -> 0.157 Inexact Rounded +pwsx3443 power 0.246 0.5 -> 0.496 Inexact Rounded +pwsx3444 power 0.0246 0.5 -> 0.157 Inexact Rounded +pwsx3445 power 0.247 0.5 -> 0.497 Inexact Rounded +pwsx3446 power 0.0247 0.5 -> 0.157 Inexact Rounded +pwsx3447 power 0.248 0.5 -> 0.498 Inexact Rounded +pwsx3448 power 0.0248 0.5 -> 0.157 Inexact Rounded +pwsx3449 power 0.249 0.5 -> 0.499 Inexact Rounded +pwsx3450 power 0.0249 0.5 -> 0.158 Inexact Rounded +pwsx3451 power 0.251 0.5 -> 0.501 Inexact Rounded +pwsx3452 power 0.0251 0.5 -> 0.158 Inexact Rounded +pwsx3453 power 0.252 0.5 -> 0.502 Inexact Rounded +pwsx3454 power 0.0252 0.5 -> 0.159 Inexact Rounded +pwsx3455 power 0.253 0.5 -> 0.503 Inexact Rounded +pwsx3456 power 0.0253 0.5 -> 0.159 Inexact Rounded +pwsx3457 power 0.254 0.5 -> 0.504 Inexact Rounded +pwsx3458 power 0.0254 0.5 -> 0.159 Inexact Rounded +pwsx3459 power 0.255 0.5 -> 0.505 Inexact Rounded +pwsx3460 power 0.0255 0.5 -> 0.160 Inexact Rounded +pwsx3461 power 0.256 0.5 -> 0.506 Inexact Rounded +pwsx3462 power 0.0256 0.5 -> 0.160 Inexact Rounded +pwsx3463 power 0.257 0.5 -> 0.507 Inexact Rounded +pwsx3464 power 0.0257 0.5 -> 0.160 Inexact Rounded +pwsx3465 power 0.258 0.5 -> 0.508 Inexact Rounded +pwsx3466 power 0.0258 0.5 -> 0.161 Inexact Rounded +pwsx3467 power 0.259 0.5 -> 0.509 Inexact Rounded +pwsx3468 power 0.0259 0.5 -> 0.161 Inexact Rounded +pwsx3469 power 0.261 0.5 -> 0.511 Inexact Rounded +pwsx3470 power 0.0261 0.5 -> 0.162 Inexact Rounded +pwsx3471 power 0.262 0.5 -> 0.512 Inexact Rounded +pwsx3472 power 0.0262 0.5 -> 0.162 Inexact Rounded +pwsx3473 power 0.263 0.5 -> 0.513 Inexact Rounded +pwsx3474 power 0.0263 0.5 -> 0.162 Inexact Rounded +pwsx3475 power 0.264 0.5 -> 0.514 Inexact Rounded +pwsx3476 power 0.0264 0.5 -> 0.162 Inexact Rounded +pwsx3477 power 0.265 0.5 -> 0.515 Inexact Rounded +pwsx3478 power 0.0265 0.5 -> 0.163 Inexact Rounded +pwsx3479 power 0.266 0.5 -> 0.516 Inexact Rounded +pwsx3480 power 0.0266 0.5 -> 0.163 Inexact Rounded +pwsx3481 power 0.267 0.5 -> 0.517 Inexact Rounded +pwsx3482 power 0.0267 0.5 -> 0.163 Inexact Rounded +pwsx3483 power 0.268 0.5 -> 0.518 Inexact Rounded +pwsx3484 power 0.0268 0.5 -> 0.164 Inexact Rounded +pwsx3485 power 0.269 0.5 -> 0.519 Inexact Rounded +pwsx3486 power 0.0269 0.5 -> 0.164 Inexact Rounded +pwsx3487 power 0.271 0.5 -> 0.521 Inexact Rounded +pwsx3488 power 0.0271 0.5 -> 0.165 Inexact Rounded +pwsx3489 power 0.272 0.5 -> 0.522 Inexact Rounded +pwsx3490 power 0.0272 0.5 -> 0.165 Inexact Rounded +pwsx3491 power 0.273 0.5 -> 0.522 Inexact Rounded +pwsx3492 power 0.0273 0.5 -> 0.165 Inexact Rounded +pwsx3493 power 0.274 0.5 -> 0.523 Inexact Rounded +pwsx3494 power 0.0274 0.5 -> 0.166 Inexact Rounded +pwsx3495 power 0.275 0.5 -> 0.524 Inexact Rounded +pwsx3496 power 0.0275 0.5 -> 0.166 Inexact Rounded +pwsx3497 power 0.276 0.5 -> 0.525 Inexact Rounded +pwsx3498 power 0.0276 0.5 -> 0.166 Inexact Rounded +pwsx3499 power 0.277 0.5 -> 0.526 Inexact Rounded +pwsx3500 power 0.0277 0.5 -> 0.166 Inexact Rounded +pwsx3501 power 0.278 0.5 -> 0.527 Inexact Rounded +pwsx3502 power 0.0278 0.5 -> 0.167 Inexact Rounded +pwsx3503 power 0.279 0.5 -> 0.528 Inexact Rounded +pwsx3504 power 0.0279 0.5 -> 0.167 Inexact Rounded +pwsx3505 power 0.281 0.5 -> 0.530 Inexact Rounded +pwsx3506 power 0.0281 0.5 -> 0.168 Inexact Rounded +pwsx3507 power 0.282 0.5 -> 0.531 Inexact Rounded +pwsx3508 power 0.0282 0.5 -> 0.168 Inexact Rounded +pwsx3509 power 0.283 0.5 -> 0.532 Inexact Rounded +pwsx3510 power 0.0283 0.5 -> 0.168 Inexact Rounded +pwsx3511 power 0.284 0.5 -> 0.533 Inexact Rounded +pwsx3512 power 0.0284 0.5 -> 0.169 Inexact Rounded +pwsx3513 power 0.285 0.5 -> 0.534 Inexact Rounded +pwsx3514 power 0.0285 0.5 -> 0.169 Inexact Rounded +pwsx3515 power 0.286 0.5 -> 0.535 Inexact Rounded +pwsx3516 power 0.0286 0.5 -> 0.169 Inexact Rounded +pwsx3517 power 0.287 0.5 -> 0.536 Inexact Rounded +pwsx3518 power 0.0287 0.5 -> 0.169 Inexact Rounded +pwsx3519 power 0.288 0.5 -> 0.537 Inexact Rounded +pwsx3520 power 0.0288 0.5 -> 0.170 Inexact Rounded +pwsx3521 power 0.289 0.5 -> 0.538 Inexact Rounded +pwsx3522 power 0.0289 0.5 -> 0.170 Inexact Rounded +pwsx3523 power 0.291 0.5 -> 0.539 Inexact Rounded +pwsx3524 power 0.0291 0.5 -> 0.171 Inexact Rounded +pwsx3525 power 0.292 0.5 -> 0.540 Inexact Rounded +pwsx3526 power 0.0292 0.5 -> 0.171 Inexact Rounded +pwsx3527 power 0.293 0.5 -> 0.541 Inexact Rounded +pwsx3528 power 0.0293 0.5 -> 0.171 Inexact Rounded +pwsx3529 power 0.294 0.5 -> 0.542 Inexact Rounded +pwsx3530 power 0.0294 0.5 -> 0.171 Inexact Rounded +pwsx3531 power 0.295 0.5 -> 0.543 Inexact Rounded +pwsx3532 power 0.0295 0.5 -> 0.172 Inexact Rounded +pwsx3533 power 0.296 0.5 -> 0.544 Inexact Rounded +pwsx3534 power 0.0296 0.5 -> 0.172 Inexact Rounded +pwsx3535 power 0.297 0.5 -> 0.545 Inexact Rounded +pwsx3536 power 0.0297 0.5 -> 0.172 Inexact Rounded +pwsx3537 power 0.298 0.5 -> 0.546 Inexact Rounded +pwsx3538 power 0.0298 0.5 -> 0.173 Inexact Rounded +pwsx3539 power 0.299 0.5 -> 0.547 Inexact Rounded +pwsx3540 power 0.0299 0.5 -> 0.173 Inexact Rounded +pwsx3541 power 0.301 0.5 -> 0.549 Inexact Rounded +pwsx3542 power 0.0301 0.5 -> 0.173 Inexact Rounded +pwsx3543 power 0.302 0.5 -> 0.550 Inexact Rounded +pwsx3544 power 0.0302 0.5 -> 0.174 Inexact Rounded +pwsx3545 power 0.303 0.5 -> 0.550 Inexact Rounded +pwsx3546 power 0.0303 0.5 -> 0.174 Inexact Rounded +pwsx3547 power 0.304 0.5 -> 0.551 Inexact Rounded +pwsx3548 power 0.0304 0.5 -> 0.174 Inexact Rounded +pwsx3549 power 0.305 0.5 -> 0.552 Inexact Rounded +pwsx3550 power 0.0305 0.5 -> 0.175 Inexact Rounded +pwsx3551 power 0.306 0.5 -> 0.553 Inexact Rounded +pwsx3552 power 0.0306 0.5 -> 0.175 Inexact Rounded +pwsx3553 power 0.307 0.5 -> 0.554 Inexact Rounded +pwsx3554 power 0.0307 0.5 -> 0.175 Inexact Rounded +pwsx3555 power 0.308 0.5 -> 0.555 Inexact Rounded +pwsx3556 power 0.0308 0.5 -> 0.175 Inexact Rounded +pwsx3557 power 0.309 0.5 -> 0.556 Inexact Rounded +pwsx3558 power 0.0309 0.5 -> 0.176 Inexact Rounded +pwsx3559 power 0.311 0.5 -> 0.558 Inexact Rounded +pwsx3560 power 0.0311 0.5 -> 0.176 Inexact Rounded +pwsx3561 power 0.312 0.5 -> 0.559 Inexact Rounded +pwsx3562 power 0.0312 0.5 -> 0.177 Inexact Rounded +pwsx3563 power 0.313 0.5 -> 0.559 Inexact Rounded +pwsx3564 power 0.0313 0.5 -> 0.177 Inexact Rounded +pwsx3565 power 0.314 0.5 -> 0.560 Inexact Rounded +pwsx3566 power 0.0314 0.5 -> 0.177 Inexact Rounded +pwsx3567 power 0.315 0.5 -> 0.561 Inexact Rounded +pwsx3568 power 0.0315 0.5 -> 0.177 Inexact Rounded +pwsx3569 power 0.316 0.5 -> 0.562 Inexact Rounded +pwsx3570 power 0.0316 0.5 -> 0.178 Inexact Rounded +pwsx3571 power 0.317 0.5 -> 0.563 Inexact Rounded +pwsx3572 power 0.0317 0.5 -> 0.178 Inexact Rounded +pwsx3573 power 0.318 0.5 -> 0.564 Inexact Rounded +pwsx3574 power 0.0318 0.5 -> 0.178 Inexact Rounded +pwsx3575 power 0.319 0.5 -> 0.565 Inexact Rounded +pwsx3576 power 0.0319 0.5 -> 0.179 Inexact Rounded +pwsx3577 power 0.321 0.5 -> 0.567 Inexact Rounded +pwsx3578 power 0.0321 0.5 -> 0.179 Inexact Rounded +pwsx3579 power 0.322 0.5 -> 0.567 Inexact Rounded +pwsx3580 power 0.0322 0.5 -> 0.179 Inexact Rounded +pwsx3581 power 0.323 0.5 -> 0.568 Inexact Rounded +pwsx3582 power 0.0323 0.5 -> 0.180 Inexact Rounded +pwsx3583 power 0.324 0.5 -> 0.569 Inexact Rounded +pwsx3584 power 0.0324 0.5 -> 0.180 Inexact Rounded +pwsx3585 power 0.325 0.5 -> 0.570 Inexact Rounded +pwsx3586 power 0.0325 0.5 -> 0.180 Inexact Rounded +pwsx3587 power 0.326 0.5 -> 0.571 Inexact Rounded +pwsx3588 power 0.0326 0.5 -> 0.181 Inexact Rounded +pwsx3589 power 0.327 0.5 -> 0.572 Inexact Rounded +pwsx3590 power 0.0327 0.5 -> 0.181 Inexact Rounded +pwsx3591 power 0.328 0.5 -> 0.573 Inexact Rounded +pwsx3592 power 0.0328 0.5 -> 0.181 Inexact Rounded +pwsx3593 power 0.329 0.5 -> 0.574 Inexact Rounded +pwsx3594 power 0.0329 0.5 -> 0.181 Inexact Rounded +pwsx3595 power 0.331 0.5 -> 0.575 Inexact Rounded +pwsx3596 power 0.0331 0.5 -> 0.182 Inexact Rounded +pwsx3597 power 0.332 0.5 -> 0.576 Inexact Rounded +pwsx3598 power 0.0332 0.5 -> 0.182 Inexact Rounded +pwsx3599 power 0.333 0.5 -> 0.577 Inexact Rounded +pwsx3600 power 0.0333 0.5 -> 0.182 Inexact Rounded +pwsx3601 power 0.334 0.5 -> 0.578 Inexact Rounded +pwsx3602 power 0.0334 0.5 -> 0.183 Inexact Rounded +pwsx3603 power 0.335 0.5 -> 0.579 Inexact Rounded +pwsx3604 power 0.0335 0.5 -> 0.183 Inexact Rounded +pwsx3605 power 0.336 0.5 -> 0.580 Inexact Rounded +pwsx3606 power 0.0336 0.5 -> 0.183 Inexact Rounded +pwsx3607 power 0.337 0.5 -> 0.581 Inexact Rounded +pwsx3608 power 0.0337 0.5 -> 0.184 Inexact Rounded +pwsx3609 power 0.338 0.5 -> 0.581 Inexact Rounded +pwsx3610 power 0.0338 0.5 -> 0.184 Inexact Rounded +pwsx3611 power 0.339 0.5 -> 0.582 Inexact Rounded +pwsx3612 power 0.0339 0.5 -> 0.184 Inexact Rounded +pwsx3613 power 0.341 0.5 -> 0.584 Inexact Rounded +pwsx3614 power 0.0341 0.5 -> 0.185 Inexact Rounded +pwsx3615 power 0.342 0.5 -> 0.585 Inexact Rounded +pwsx3616 power 0.0342 0.5 -> 0.185 Inexact Rounded +pwsx3617 power 0.343 0.5 -> 0.586 Inexact Rounded +pwsx3618 power 0.0343 0.5 -> 0.185 Inexact Rounded +pwsx3619 power 0.344 0.5 -> 0.587 Inexact Rounded +pwsx3620 power 0.0344 0.5 -> 0.185 Inexact Rounded +pwsx3621 power 0.345 0.5 -> 0.587 Inexact Rounded +pwsx3622 power 0.0345 0.5 -> 0.186 Inexact Rounded +pwsx3623 power 0.346 0.5 -> 0.588 Inexact Rounded +pwsx3624 power 0.0346 0.5 -> 0.186 Inexact Rounded +pwsx3625 power 0.347 0.5 -> 0.589 Inexact Rounded +pwsx3626 power 0.0347 0.5 -> 0.186 Inexact Rounded +pwsx3627 power 0.348 0.5 -> 0.590 Inexact Rounded +pwsx3628 power 0.0348 0.5 -> 0.187 Inexact Rounded +pwsx3629 power 0.349 0.5 -> 0.591 Inexact Rounded +pwsx3630 power 0.0349 0.5 -> 0.187 Inexact Rounded +pwsx3631 power 0.351 0.5 -> 0.592 Inexact Rounded +pwsx3632 power 0.0351 0.5 -> 0.187 Inexact Rounded +pwsx3633 power 0.352 0.5 -> 0.593 Inexact Rounded +pwsx3634 power 0.0352 0.5 -> 0.188 Inexact Rounded +pwsx3635 power 0.353 0.5 -> 0.594 Inexact Rounded +pwsx3636 power 0.0353 0.5 -> 0.188 Inexact Rounded +pwsx3637 power 0.354 0.5 -> 0.595 Inexact Rounded +pwsx3638 power 0.0354 0.5 -> 0.188 Inexact Rounded +pwsx3639 power 0.355 0.5 -> 0.596 Inexact Rounded +pwsx3640 power 0.0355 0.5 -> 0.188 Inexact Rounded +pwsx3641 power 0.356 0.5 -> 0.597 Inexact Rounded +pwsx3642 power 0.0356 0.5 -> 0.189 Inexact Rounded +pwsx3643 power 0.357 0.5 -> 0.597 Inexact Rounded +pwsx3644 power 0.0357 0.5 -> 0.189 Inexact Rounded +pwsx3645 power 0.358 0.5 -> 0.598 Inexact Rounded +pwsx3646 power 0.0358 0.5 -> 0.189 Inexact Rounded +pwsx3647 power 0.359 0.5 -> 0.599 Inexact Rounded +pwsx3648 power 0.0359 0.5 -> 0.189 Inexact Rounded +pwsx3649 power 0.361 0.5 -> 0.601 Inexact Rounded +pwsx3650 power 0.0361 0.5 -> 0.190 Inexact Rounded +pwsx3651 power 0.362 0.5 -> 0.602 Inexact Rounded +pwsx3652 power 0.0362 0.5 -> 0.190 Inexact Rounded +pwsx3653 power 0.363 0.5 -> 0.602 Inexact Rounded +pwsx3654 power 0.0363 0.5 -> 0.191 Inexact Rounded +pwsx3655 power 0.364 0.5 -> 0.603 Inexact Rounded +pwsx3656 power 0.0364 0.5 -> 0.191 Inexact Rounded +pwsx3657 power 0.365 0.5 -> 0.604 Inexact Rounded +pwsx3658 power 0.0365 0.5 -> 0.191 Inexact Rounded +pwsx3659 power 0.366 0.5 -> 0.605 Inexact Rounded +pwsx3660 power 0.0366 0.5 -> 0.191 Inexact Rounded +pwsx3661 power 0.367 0.5 -> 0.606 Inexact Rounded +pwsx3662 power 0.0367 0.5 -> 0.192 Inexact Rounded +pwsx3663 power 0.368 0.5 -> 0.607 Inexact Rounded +pwsx3664 power 0.0368 0.5 -> 0.192 Inexact Rounded +pwsx3665 power 0.369 0.5 -> 0.607 Inexact Rounded +pwsx3666 power 0.0369 0.5 -> 0.192 Inexact Rounded +pwsx3667 power 0.371 0.5 -> 0.609 Inexact Rounded +pwsx3668 power 0.0371 0.5 -> 0.193 Inexact Rounded +pwsx3669 power 0.372 0.5 -> 0.610 Inexact Rounded +pwsx3670 power 0.0372 0.5 -> 0.193 Inexact Rounded +pwsx3671 power 0.373 0.5 -> 0.611 Inexact Rounded +pwsx3672 power 0.0373 0.5 -> 0.193 Inexact Rounded +pwsx3673 power 0.374 0.5 -> 0.612 Inexact Rounded +pwsx3674 power 0.0374 0.5 -> 0.193 Inexact Rounded +pwsx3675 power 0.375 0.5 -> 0.612 Inexact Rounded +pwsx3676 power 0.0375 0.5 -> 0.194 Inexact Rounded +pwsx3677 power 0.376 0.5 -> 0.613 Inexact Rounded +pwsx3678 power 0.0376 0.5 -> 0.194 Inexact Rounded +pwsx3679 power 0.377 0.5 -> 0.614 Inexact Rounded +pwsx3680 power 0.0377 0.5 -> 0.194 Inexact Rounded +pwsx3681 power 0.378 0.5 -> 0.615 Inexact Rounded +pwsx3682 power 0.0378 0.5 -> 0.194 Inexact Rounded +pwsx3683 power 0.379 0.5 -> 0.616 Inexact Rounded +pwsx3684 power 0.0379 0.5 -> 0.195 Inexact Rounded +pwsx3685 power 0.381 0.5 -> 0.617 Inexact Rounded +pwsx3686 power 0.0381 0.5 -> 0.195 Inexact Rounded +pwsx3687 power 0.382 0.5 -> 0.618 Inexact Rounded +pwsx3688 power 0.0382 0.5 -> 0.195 Inexact Rounded +pwsx3689 power 0.383 0.5 -> 0.619 Inexact Rounded +pwsx3690 power 0.0383 0.5 -> 0.196 Inexact Rounded +pwsx3691 power 0.384 0.5 -> 0.620 Inexact Rounded +pwsx3692 power 0.0384 0.5 -> 0.196 Inexact Rounded +pwsx3693 power 0.385 0.5 -> 0.620 Inexact Rounded +pwsx3694 power 0.0385 0.5 -> 0.196 Inexact Rounded +pwsx3695 power 0.386 0.5 -> 0.621 Inexact Rounded +pwsx3696 power 0.0386 0.5 -> 0.196 Inexact Rounded +pwsx3697 power 0.387 0.5 -> 0.622 Inexact Rounded +pwsx3698 power 0.0387 0.5 -> 0.197 Inexact Rounded +pwsx3699 power 0.388 0.5 -> 0.623 Inexact Rounded +pwsx3700 power 0.0388 0.5 -> 0.197 Inexact Rounded +pwsx3701 power 0.389 0.5 -> 0.624 Inexact Rounded +pwsx3702 power 0.0389 0.5 -> 0.197 Inexact Rounded +pwsx3703 power 0.391 0.5 -> 0.625 Inexact Rounded +pwsx3704 power 0.0391 0.5 -> 0.198 Inexact Rounded +pwsx3705 power 0.392 0.5 -> 0.626 Inexact Rounded +pwsx3706 power 0.0392 0.5 -> 0.198 Inexact Rounded +pwsx3707 power 0.393 0.5 -> 0.627 Inexact Rounded +pwsx3708 power 0.0393 0.5 -> 0.198 Inexact Rounded +pwsx3709 power 0.394 0.5 -> 0.628 Inexact Rounded +pwsx3710 power 0.0394 0.5 -> 0.198 Inexact Rounded +pwsx3711 power 0.395 0.5 -> 0.628 Inexact Rounded +pwsx3712 power 0.0395 0.5 -> 0.199 Inexact Rounded +pwsx3713 power 0.396 0.5 -> 0.629 Inexact Rounded +pwsx3714 power 0.0396 0.5 -> 0.199 Inexact Rounded +pwsx3715 power 0.397 0.5 -> 0.630 Inexact Rounded +pwsx3716 power 0.0397 0.5 -> 0.199 Inexact Rounded +pwsx3717 power 0.398 0.5 -> 0.631 Inexact Rounded +pwsx3718 power 0.0398 0.5 -> 0.199 Inexact Rounded +pwsx3719 power 0.399 0.5 -> 0.632 Inexact Rounded +pwsx3720 power 0.0399 0.5 -> 0.200 Inexact Rounded +pwsx3721 power 0.401 0.5 -> 0.633 Inexact Rounded +pwsx3722 power 0.0401 0.5 -> 0.200 Inexact Rounded +pwsx3723 power 0.402 0.5 -> 0.634 Inexact Rounded +pwsx3724 power 0.0402 0.5 -> 0.200 Inexact Rounded +pwsx3725 power 0.403 0.5 -> 0.635 Inexact Rounded +pwsx3726 power 0.0403 0.5 -> 0.201 Inexact Rounded +pwsx3727 power 0.404 0.5 -> 0.636 Inexact Rounded +pwsx3728 power 0.0404 0.5 -> 0.201 Inexact Rounded +pwsx3729 power 0.405 0.5 -> 0.636 Inexact Rounded +pwsx3730 power 0.0405 0.5 -> 0.201 Inexact Rounded +pwsx3731 power 0.406 0.5 -> 0.637 Inexact Rounded +pwsx3732 power 0.0406 0.5 -> 0.201 Inexact Rounded +pwsx3733 power 0.407 0.5 -> 0.638 Inexact Rounded +pwsx3734 power 0.0407 0.5 -> 0.202 Inexact Rounded +pwsx3735 power 0.408 0.5 -> 0.639 Inexact Rounded +pwsx3736 power 0.0408 0.5 -> 0.202 Inexact Rounded +pwsx3737 power 0.409 0.5 -> 0.640 Inexact Rounded +pwsx3738 power 0.0409 0.5 -> 0.202 Inexact Rounded +pwsx3739 power 0.411 0.5 -> 0.641 Inexact Rounded +pwsx3740 power 0.0411 0.5 -> 0.203 Inexact Rounded +pwsx3741 power 0.412 0.5 -> 0.642 Inexact Rounded +pwsx3742 power 0.0412 0.5 -> 0.203 Inexact Rounded +pwsx3743 power 0.413 0.5 -> 0.643 Inexact Rounded +pwsx3744 power 0.0413 0.5 -> 0.203 Inexact Rounded +pwsx3745 power 0.414 0.5 -> 0.643 Inexact Rounded +pwsx3746 power 0.0414 0.5 -> 0.203 Inexact Rounded +pwsx3747 power 0.415 0.5 -> 0.644 Inexact Rounded +pwsx3748 power 0.0415 0.5 -> 0.204 Inexact Rounded +pwsx3749 power 0.416 0.5 -> 0.645 Inexact Rounded +pwsx3750 power 0.0416 0.5 -> 0.204 Inexact Rounded +pwsx3751 power 0.417 0.5 -> 0.646 Inexact Rounded +pwsx3752 power 0.0417 0.5 -> 0.204 Inexact Rounded +pwsx3753 power 0.418 0.5 -> 0.647 Inexact Rounded +pwsx3754 power 0.0418 0.5 -> 0.204 Inexact Rounded +pwsx3755 power 0.419 0.5 -> 0.647 Inexact Rounded +pwsx3756 power 0.0419 0.5 -> 0.205 Inexact Rounded +pwsx3757 power 0.421 0.5 -> 0.649 Inexact Rounded +pwsx3758 power 0.0421 0.5 -> 0.205 Inexact Rounded +pwsx3759 power 0.422 0.5 -> 0.650 Inexact Rounded +pwsx3760 power 0.0422 0.5 -> 0.205 Inexact Rounded +pwsx3761 power 0.423 0.5 -> 0.650 Inexact Rounded +pwsx3762 power 0.0423 0.5 -> 0.206 Inexact Rounded +pwsx3763 power 0.424 0.5 -> 0.651 Inexact Rounded +pwsx3764 power 0.0424 0.5 -> 0.206 Inexact Rounded +pwsx3765 power 0.425 0.5 -> 0.652 Inexact Rounded +pwsx3766 power 0.0425 0.5 -> 0.206 Inexact Rounded +pwsx3767 power 0.426 0.5 -> 0.653 Inexact Rounded +pwsx3768 power 0.0426 0.5 -> 0.206 Inexact Rounded +pwsx3769 power 0.427 0.5 -> 0.653 Inexact Rounded +pwsx3770 power 0.0427 0.5 -> 0.207 Inexact Rounded +pwsx3771 power 0.428 0.5 -> 0.654 Inexact Rounded +pwsx3772 power 0.0428 0.5 -> 0.207 Inexact Rounded +pwsx3773 power 0.429 0.5 -> 0.655 Inexact Rounded +pwsx3774 power 0.0429 0.5 -> 0.207 Inexact Rounded +pwsx3775 power 0.431 0.5 -> 0.657 Inexact Rounded +pwsx3776 power 0.0431 0.5 -> 0.208 Inexact Rounded +pwsx3777 power 0.432 0.5 -> 0.657 Inexact Rounded +pwsx3778 power 0.0432 0.5 -> 0.208 Inexact Rounded +pwsx3779 power 0.433 0.5 -> 0.658 Inexact Rounded +pwsx3780 power 0.0433 0.5 -> 0.208 Inexact Rounded +pwsx3781 power 0.434 0.5 -> 0.659 Inexact Rounded +pwsx3782 power 0.0434 0.5 -> 0.208 Inexact Rounded +pwsx3783 power 0.435 0.5 -> 0.660 Inexact Rounded +pwsx3784 power 0.0435 0.5 -> 0.209 Inexact Rounded +pwsx3785 power 0.436 0.5 -> 0.660 Inexact Rounded +pwsx3786 power 0.0436 0.5 -> 0.209 Inexact Rounded +pwsx3787 power 0.437 0.5 -> 0.661 Inexact Rounded +pwsx3788 power 0.0437 0.5 -> 0.209 Inexact Rounded +pwsx3789 power 0.438 0.5 -> 0.662 Inexact Rounded +pwsx3790 power 0.0438 0.5 -> 0.209 Inexact Rounded +pwsx3791 power 0.439 0.5 -> 0.663 Inexact Rounded +pwsx3792 power 0.0439 0.5 -> 0.210 Inexact Rounded +pwsx3793 power 0.441 0.5 -> 0.664 Inexact Rounded +pwsx3794 power 0.0441 0.5 -> 0.210 Inexact Rounded +pwsx3795 power 0.442 0.5 -> 0.665 Inexact Rounded +pwsx3796 power 0.0442 0.5 -> 0.210 Inexact Rounded +pwsx3797 power 0.443 0.5 -> 0.666 Inexact Rounded +pwsx3798 power 0.0443 0.5 -> 0.210 Inexact Rounded +pwsx3799 power 0.444 0.5 -> 0.666 Inexact Rounded +pwsx3800 power 0.0444 0.5 -> 0.211 Inexact Rounded +pwsx3801 power 0.445 0.5 -> 0.667 Inexact Rounded +pwsx3802 power 0.0445 0.5 -> 0.211 Inexact Rounded +pwsx3803 power 0.446 0.5 -> 0.668 Inexact Rounded +pwsx3804 power 0.0446 0.5 -> 0.211 Inexact Rounded +pwsx3805 power 0.447 0.5 -> 0.669 Inexact Rounded +pwsx3806 power 0.0447 0.5 -> 0.211 Inexact Rounded +pwsx3807 power 0.448 0.5 -> 0.669 Inexact Rounded +pwsx3808 power 0.0448 0.5 -> 0.212 Inexact Rounded +pwsx3809 power 0.449 0.5 -> 0.670 Inexact Rounded +pwsx3810 power 0.0449 0.5 -> 0.212 Inexact Rounded +pwsx3811 power 0.451 0.5 -> 0.672 Inexact Rounded +pwsx3812 power 0.0451 0.5 -> 0.212 Inexact Rounded +pwsx3813 power 0.452 0.5 -> 0.672 Inexact Rounded +pwsx3814 power 0.0452 0.5 -> 0.213 Inexact Rounded +pwsx3815 power 0.453 0.5 -> 0.673 Inexact Rounded +pwsx3816 power 0.0453 0.5 -> 0.213 Inexact Rounded +pwsx3817 power 0.454 0.5 -> 0.674 Inexact Rounded +pwsx3818 power 0.0454 0.5 -> 0.213 Inexact Rounded +pwsx3819 power 0.455 0.5 -> 0.675 Inexact Rounded +pwsx3820 power 0.0455 0.5 -> 0.213 Inexact Rounded +pwsx3821 power 0.456 0.5 -> 0.675 Inexact Rounded +pwsx3822 power 0.0456 0.5 -> 0.214 Inexact Rounded +pwsx3823 power 0.457 0.5 -> 0.676 Inexact Rounded +pwsx3824 power 0.0457 0.5 -> 0.214 Inexact Rounded +pwsx3825 power 0.458 0.5 -> 0.677 Inexact Rounded +pwsx3826 power 0.0458 0.5 -> 0.214 Inexact Rounded +pwsx3827 power 0.459 0.5 -> 0.677 Inexact Rounded +pwsx3828 power 0.0459 0.5 -> 0.214 Inexact Rounded +pwsx3829 power 0.461 0.5 -> 0.679 Inexact Rounded +pwsx3830 power 0.0461 0.5 -> 0.215 Inexact Rounded +pwsx3831 power 0.462 0.5 -> 0.680 Inexact Rounded +pwsx3832 power 0.0462 0.5 -> 0.215 Inexact Rounded +pwsx3833 power 0.463 0.5 -> 0.680 Inexact Rounded +pwsx3834 power 0.0463 0.5 -> 0.215 Inexact Rounded +pwsx3835 power 0.464 0.5 -> 0.681 Inexact Rounded +pwsx3836 power 0.0464 0.5 -> 0.215 Inexact Rounded +pwsx3837 power 0.465 0.5 -> 0.682 Inexact Rounded +pwsx3838 power 0.0465 0.5 -> 0.216 Inexact Rounded +pwsx3839 power 0.466 0.5 -> 0.683 Inexact Rounded +pwsx3840 power 0.0466 0.5 -> 0.216 Inexact Rounded +pwsx3841 power 0.467 0.5 -> 0.683 Inexact Rounded +pwsx3842 power 0.0467 0.5 -> 0.216 Inexact Rounded +pwsx3843 power 0.468 0.5 -> 0.684 Inexact Rounded +pwsx3844 power 0.0468 0.5 -> 0.216 Inexact Rounded +pwsx3845 power 0.469 0.5 -> 0.685 Inexact Rounded +pwsx3846 power 0.0469 0.5 -> 0.217 Inexact Rounded +pwsx3847 power 0.471 0.5 -> 0.686 Inexact Rounded +pwsx3848 power 0.0471 0.5 -> 0.217 Inexact Rounded +pwsx3849 power 0.472 0.5 -> 0.687 Inexact Rounded +pwsx3850 power 0.0472 0.5 -> 0.217 Inexact Rounded +pwsx3851 power 0.473 0.5 -> 0.688 Inexact Rounded +pwsx3852 power 0.0473 0.5 -> 0.217 Inexact Rounded +pwsx3853 power 0.474 0.5 -> 0.688 Inexact Rounded +pwsx3854 power 0.0474 0.5 -> 0.218 Inexact Rounded +pwsx3855 power 0.475 0.5 -> 0.689 Inexact Rounded +pwsx3856 power 0.0475 0.5 -> 0.218 Inexact Rounded +pwsx3857 power 0.476 0.5 -> 0.690 Inexact Rounded +pwsx3858 power 0.0476 0.5 -> 0.218 Inexact Rounded +pwsx3859 power 0.477 0.5 -> 0.691 Inexact Rounded +pwsx3860 power 0.0477 0.5 -> 0.218 Inexact Rounded +pwsx3861 power 0.478 0.5 -> 0.691 Inexact Rounded +pwsx3862 power 0.0478 0.5 -> 0.219 Inexact Rounded +pwsx3863 power 0.479 0.5 -> 0.692 Inexact Rounded +pwsx3864 power 0.0479 0.5 -> 0.219 Inexact Rounded +pwsx3865 power 0.481 0.5 -> 0.694 Inexact Rounded +pwsx3866 power 0.0481 0.5 -> 0.219 Inexact Rounded +pwsx3867 power 0.482 0.5 -> 0.694 Inexact Rounded +pwsx3868 power 0.0482 0.5 -> 0.220 Inexact Rounded +pwsx3869 power 0.483 0.5 -> 0.695 Inexact Rounded +pwsx3870 power 0.0483 0.5 -> 0.220 Inexact Rounded +pwsx3871 power 0.484 0.5 -> 0.696 Inexact Rounded +pwsx3872 power 0.0484 0.5 -> 0.220 Inexact Rounded +pwsx3873 power 0.485 0.5 -> 0.696 Inexact Rounded +pwsx3874 power 0.0485 0.5 -> 0.220 Inexact Rounded +pwsx3875 power 0.486 0.5 -> 0.697 Inexact Rounded +pwsx3876 power 0.0486 0.5 -> 0.220 Inexact Rounded +pwsx3877 power 0.487 0.5 -> 0.698 Inexact Rounded +pwsx3878 power 0.0487 0.5 -> 0.221 Inexact Rounded +pwsx3879 power 0.488 0.5 -> 0.699 Inexact Rounded +pwsx3880 power 0.0488 0.5 -> 0.221 Inexact Rounded +pwsx3881 power 0.489 0.5 -> 0.699 Inexact Rounded +pwsx3882 power 0.0489 0.5 -> 0.221 Inexact Rounded +pwsx3883 power 0.491 0.5 -> 0.701 Inexact Rounded +pwsx3884 power 0.0491 0.5 -> 0.222 Inexact Rounded +pwsx3885 power 0.492 0.5 -> 0.701 Inexact Rounded +pwsx3886 power 0.0492 0.5 -> 0.222 Inexact Rounded +pwsx3887 power 0.493 0.5 -> 0.702 Inexact Rounded +pwsx3888 power 0.0493 0.5 -> 0.222 Inexact Rounded +pwsx3889 power 0.494 0.5 -> 0.703 Inexact Rounded +pwsx3890 power 0.0494 0.5 -> 0.222 Inexact Rounded +pwsx3891 power 0.495 0.5 -> 0.704 Inexact Rounded +pwsx3892 power 0.0495 0.5 -> 0.222 Inexact Rounded +pwsx3893 power 0.496 0.5 -> 0.704 Inexact Rounded +pwsx3894 power 0.0496 0.5 -> 0.223 Inexact Rounded +pwsx3895 power 0.497 0.5 -> 0.705 Inexact Rounded +pwsx3896 power 0.0497 0.5 -> 0.223 Inexact Rounded +pwsx3897 power 0.498 0.5 -> 0.706 Inexact Rounded +pwsx3898 power 0.0498 0.5 -> 0.223 Inexact Rounded +pwsx3899 power 0.499 0.5 -> 0.706 Inexact Rounded +pwsx3900 power 0.0499 0.5 -> 0.223 Inexact Rounded +pwsx3901 power 0.501 0.5 -> 0.708 Inexact Rounded +pwsx3902 power 0.0501 0.5 -> 0.224 Inexact Rounded +pwsx3903 power 0.502 0.5 -> 0.709 Inexact Rounded +pwsx3904 power 0.0502 0.5 -> 0.224 Inexact Rounded +pwsx3905 power 0.503 0.5 -> 0.709 Inexact Rounded +pwsx3906 power 0.0503 0.5 -> 0.224 Inexact Rounded +pwsx3907 power 0.504 0.5 -> 0.710 Inexact Rounded +pwsx3908 power 0.0504 0.5 -> 0.224 Inexact Rounded +pwsx3909 power 0.505 0.5 -> 0.711 Inexact Rounded +pwsx3910 power 0.0505 0.5 -> 0.225 Inexact Rounded +pwsx3911 power 0.506 0.5 -> 0.711 Inexact Rounded +pwsx3912 power 0.0506 0.5 -> 0.225 Inexact Rounded +pwsx3913 power 0.507 0.5 -> 0.712 Inexact Rounded +pwsx3914 power 0.0507 0.5 -> 0.225 Inexact Rounded +pwsx3915 power 0.508 0.5 -> 0.713 Inexact Rounded +pwsx3916 power 0.0508 0.5 -> 0.225 Inexact Rounded +pwsx3917 power 0.509 0.5 -> 0.713 Inexact Rounded +pwsx3918 power 0.0509 0.5 -> 0.226 Inexact Rounded +pwsx3919 power 0.511 0.5 -> 0.715 Inexact Rounded +pwsx3920 power 0.0511 0.5 -> 0.226 Inexact Rounded +pwsx3921 power 0.512 0.5 -> 0.716 Inexact Rounded +pwsx3922 power 0.0512 0.5 -> 0.226 Inexact Rounded +pwsx3923 power 0.513 0.5 -> 0.716 Inexact Rounded +pwsx3924 power 0.0513 0.5 -> 0.226 Inexact Rounded +pwsx3925 power 0.514 0.5 -> 0.717 Inexact Rounded +pwsx3926 power 0.0514 0.5 -> 0.227 Inexact Rounded +pwsx3927 power 0.515 0.5 -> 0.718 Inexact Rounded +pwsx3928 power 0.0515 0.5 -> 0.227 Inexact Rounded +pwsx3929 power 0.516 0.5 -> 0.718 Inexact Rounded +pwsx3930 power 0.0516 0.5 -> 0.227 Inexact Rounded +pwsx3931 power 0.517 0.5 -> 0.719 Inexact Rounded +pwsx3932 power 0.0517 0.5 -> 0.227 Inexact Rounded +pwsx3933 power 0.518 0.5 -> 0.720 Inexact Rounded +pwsx3934 power 0.0518 0.5 -> 0.228 Inexact Rounded +pwsx3935 power 0.519 0.5 -> 0.720 Inexact Rounded +pwsx3936 power 0.0519 0.5 -> 0.228 Inexact Rounded +pwsx3937 power 0.521 0.5 -> 0.722 Inexact Rounded +pwsx3938 power 0.0521 0.5 -> 0.228 Inexact Rounded +pwsx3939 power 0.522 0.5 -> 0.722 Inexact Rounded +pwsx3940 power 0.0522 0.5 -> 0.228 Inexact Rounded +pwsx3941 power 0.523 0.5 -> 0.723 Inexact Rounded +pwsx3942 power 0.0523 0.5 -> 0.229 Inexact Rounded +pwsx3943 power 0.524 0.5 -> 0.724 Inexact Rounded +pwsx3944 power 0.0524 0.5 -> 0.229 Inexact Rounded +pwsx3945 power 0.525 0.5 -> 0.725 Inexact Rounded +pwsx3946 power 0.0525 0.5 -> 0.229 Inexact Rounded +pwsx3947 power 0.526 0.5 -> 0.725 Inexact Rounded +pwsx3948 power 0.0526 0.5 -> 0.229 Inexact Rounded +pwsx3949 power 0.527 0.5 -> 0.726 Inexact Rounded +pwsx3950 power 0.0527 0.5 -> 0.230 Inexact Rounded +pwsx3951 power 0.528 0.5 -> 0.727 Inexact Rounded +pwsx3952 power 0.0528 0.5 -> 0.230 Inexact Rounded +pwsx3953 power 0.529 0.5 -> 0.727 Inexact Rounded +pwsx3954 power 0.0529 0.5 -> 0.230 Inexact Rounded +pwsx3955 power 0.531 0.5 -> 0.729 Inexact Rounded +pwsx3956 power 0.0531 0.5 -> 0.230 Inexact Rounded +pwsx3957 power 0.532 0.5 -> 0.729 Inexact Rounded +pwsx3958 power 0.0532 0.5 -> 0.231 Inexact Rounded +pwsx3959 power 0.533 0.5 -> 0.730 Inexact Rounded +pwsx3960 power 0.0533 0.5 -> 0.231 Inexact Rounded +pwsx3961 power 0.534 0.5 -> 0.731 Inexact Rounded +pwsx3962 power 0.0534 0.5 -> 0.231 Inexact Rounded +pwsx3963 power 0.535 0.5 -> 0.731 Inexact Rounded +pwsx3964 power 0.0535 0.5 -> 0.231 Inexact Rounded +pwsx3965 power 0.536 0.5 -> 0.732 Inexact Rounded +pwsx3966 power 0.0536 0.5 -> 0.232 Inexact Rounded +pwsx3967 power 0.537 0.5 -> 0.733 Inexact Rounded +pwsx3968 power 0.0537 0.5 -> 0.232 Inexact Rounded +pwsx3969 power 0.538 0.5 -> 0.733 Inexact Rounded +pwsx3970 power 0.0538 0.5 -> 0.232 Inexact Rounded +pwsx3971 power 0.539 0.5 -> 0.734 Inexact Rounded +pwsx3972 power 0.0539 0.5 -> 0.232 Inexact Rounded +pwsx3973 power 0.541 0.5 -> 0.736 Inexact Rounded +pwsx3974 power 0.0541 0.5 -> 0.233 Inexact Rounded +pwsx3975 power 0.542 0.5 -> 0.736 Inexact Rounded +pwsx3976 power 0.0542 0.5 -> 0.233 Inexact Rounded +pwsx3977 power 0.543 0.5 -> 0.737 Inexact Rounded +pwsx3978 power 0.0543 0.5 -> 0.233 Inexact Rounded +pwsx3979 power 0.544 0.5 -> 0.738 Inexact Rounded +pwsx3980 power 0.0544 0.5 -> 0.233 Inexact Rounded +pwsx3981 power 0.545 0.5 -> 0.738 Inexact Rounded +pwsx3982 power 0.0545 0.5 -> 0.233 Inexact Rounded +pwsx3983 power 0.546 0.5 -> 0.739 Inexact Rounded +pwsx3984 power 0.0546 0.5 -> 0.234 Inexact Rounded +pwsx3985 power 0.547 0.5 -> 0.740 Inexact Rounded +pwsx3986 power 0.0547 0.5 -> 0.234 Inexact Rounded +pwsx3987 power 0.548 0.5 -> 0.740 Inexact Rounded +pwsx3988 power 0.0548 0.5 -> 0.234 Inexact Rounded +pwsx3989 power 0.549 0.5 -> 0.741 Inexact Rounded +pwsx3990 power 0.0549 0.5 -> 0.234 Inexact Rounded +pwsx3991 power 0.551 0.5 -> 0.742 Inexact Rounded +pwsx3992 power 0.0551 0.5 -> 0.235 Inexact Rounded +pwsx3993 power 0.552 0.5 -> 0.743 Inexact Rounded +pwsx3994 power 0.0552 0.5 -> 0.235 Inexact Rounded +pwsx3995 power 0.553 0.5 -> 0.744 Inexact Rounded +pwsx3996 power 0.0553 0.5 -> 0.235 Inexact Rounded +pwsx3997 power 0.554 0.5 -> 0.744 Inexact Rounded +pwsx3998 power 0.0554 0.5 -> 0.235 Inexact Rounded +pwsx3999 power 0.555 0.5 -> 0.745 Inexact Rounded +pwsx4000 power 0.0555 0.5 -> 0.236 Inexact Rounded +pwsx4001 power 0.556 0.5 -> 0.746 Inexact Rounded +pwsx4002 power 0.0556 0.5 -> 0.236 Inexact Rounded +pwsx4003 power 0.557 0.5 -> 0.746 Inexact Rounded +pwsx4004 power 0.0557 0.5 -> 0.236 Inexact Rounded +pwsx4005 power 0.558 0.5 -> 0.747 Inexact Rounded +pwsx4006 power 0.0558 0.5 -> 0.236 Inexact Rounded +pwsx4007 power 0.559 0.5 -> 0.748 Inexact Rounded +pwsx4008 power 0.0559 0.5 -> 0.236 Inexact Rounded +pwsx4009 power 0.561 0.5 -> 0.749 Inexact Rounded +pwsx4010 power 0.0561 0.5 -> 0.237 Inexact Rounded +pwsx4011 power 0.562 0.5 -> 0.750 Inexact Rounded +pwsx4012 power 0.0562 0.5 -> 0.237 Inexact Rounded +pwsx4013 power 0.563 0.5 -> 0.750 Inexact Rounded +pwsx4014 power 0.0563 0.5 -> 0.237 Inexact Rounded +pwsx4015 power 0.564 0.5 -> 0.751 Inexact Rounded +pwsx4016 power 0.0564 0.5 -> 0.237 Inexact Rounded +pwsx4017 power 0.565 0.5 -> 0.752 Inexact Rounded +pwsx4018 power 0.0565 0.5 -> 0.238 Inexact Rounded +pwsx4019 power 0.566 0.5 -> 0.752 Inexact Rounded +pwsx4020 power 0.0566 0.5 -> 0.238 Inexact Rounded +pwsx4021 power 0.567 0.5 -> 0.753 Inexact Rounded +pwsx4022 power 0.0567 0.5 -> 0.238 Inexact Rounded +pwsx4023 power 0.568 0.5 -> 0.754 Inexact Rounded +pwsx4024 power 0.0568 0.5 -> 0.238 Inexact Rounded +pwsx4025 power 0.569 0.5 -> 0.754 Inexact Rounded +pwsx4026 power 0.0569 0.5 -> 0.239 Inexact Rounded +pwsx4027 power 0.571 0.5 -> 0.756 Inexact Rounded +pwsx4028 power 0.0571 0.5 -> 0.239 Inexact Rounded +pwsx4029 power 0.572 0.5 -> 0.756 Inexact Rounded +pwsx4030 power 0.0572 0.5 -> 0.239 Inexact Rounded +pwsx4031 power 0.573 0.5 -> 0.757 Inexact Rounded +pwsx4032 power 0.0573 0.5 -> 0.239 Inexact Rounded +pwsx4033 power 0.574 0.5 -> 0.758 Inexact Rounded +pwsx4034 power 0.0574 0.5 -> 0.240 Inexact Rounded +pwsx4035 power 0.575 0.5 -> 0.758 Inexact Rounded +pwsx4036 power 0.0575 0.5 -> 0.240 Inexact Rounded +pwsx4037 power 0.576 0.5 -> 0.759 Inexact Rounded +pwsx4038 power 0.0576 0.5 -> 0.240 Inexact Rounded +pwsx4039 power 0.577 0.5 -> 0.760 Inexact Rounded +pwsx4040 power 0.0577 0.5 -> 0.240 Inexact Rounded +pwsx4041 power 0.578 0.5 -> 0.760 Inexact Rounded +pwsx4042 power 0.0578 0.5 -> 0.240 Inexact Rounded +pwsx4043 power 0.579 0.5 -> 0.761 Inexact Rounded +pwsx4044 power 0.0579 0.5 -> 0.241 Inexact Rounded +pwsx4045 power 0.581 0.5 -> 0.762 Inexact Rounded +pwsx4046 power 0.0581 0.5 -> 0.241 Inexact Rounded +pwsx4047 power 0.582 0.5 -> 0.763 Inexact Rounded +pwsx4048 power 0.0582 0.5 -> 0.241 Inexact Rounded +pwsx4049 power 0.583 0.5 -> 0.764 Inexact Rounded +pwsx4050 power 0.0583 0.5 -> 0.241 Inexact Rounded +pwsx4051 power 0.584 0.5 -> 0.764 Inexact Rounded +pwsx4052 power 0.0584 0.5 -> 0.242 Inexact Rounded +pwsx4053 power 0.585 0.5 -> 0.765 Inexact Rounded +pwsx4054 power 0.0585 0.5 -> 0.242 Inexact Rounded +pwsx4055 power 0.586 0.5 -> 0.766 Inexact Rounded +pwsx4056 power 0.0586 0.5 -> 0.242 Inexact Rounded +pwsx4057 power 0.587 0.5 -> 0.766 Inexact Rounded +pwsx4058 power 0.0587 0.5 -> 0.242 Inexact Rounded +pwsx4059 power 0.588 0.5 -> 0.767 Inexact Rounded +pwsx4060 power 0.0588 0.5 -> 0.242 Inexact Rounded +pwsx4061 power 0.589 0.5 -> 0.767 Inexact Rounded +pwsx4062 power 0.0589 0.5 -> 0.243 Inexact Rounded +pwsx4063 power 0.591 0.5 -> 0.769 Inexact Rounded +pwsx4064 power 0.0591 0.5 -> 0.243 Inexact Rounded +pwsx4065 power 0.592 0.5 -> 0.769 Inexact Rounded +pwsx4066 power 0.0592 0.5 -> 0.243 Inexact Rounded +pwsx4067 power 0.593 0.5 -> 0.770 Inexact Rounded +pwsx4068 power 0.0593 0.5 -> 0.244 Inexact Rounded +pwsx4069 power 0.594 0.5 -> 0.771 Inexact Rounded +pwsx4070 power 0.0594 0.5 -> 0.244 Inexact Rounded +pwsx4071 power 0.595 0.5 -> 0.771 Inexact Rounded +pwsx4072 power 0.0595 0.5 -> 0.244 Inexact Rounded +pwsx4073 power 0.596 0.5 -> 0.772 Inexact Rounded +pwsx4074 power 0.0596 0.5 -> 0.244 Inexact Rounded +pwsx4075 power 0.597 0.5 -> 0.773 Inexact Rounded +pwsx4076 power 0.0597 0.5 -> 0.244 Inexact Rounded +pwsx4077 power 0.598 0.5 -> 0.773 Inexact Rounded +pwsx4078 power 0.0598 0.5 -> 0.245 Inexact Rounded +pwsx4079 power 0.599 0.5 -> 0.774 Inexact Rounded +pwsx4080 power 0.0599 0.5 -> 0.245 Inexact Rounded +pwsx4081 power 0.601 0.5 -> 0.775 Inexact Rounded +pwsx4082 power 0.0601 0.5 -> 0.245 Inexact Rounded +pwsx4083 power 0.602 0.5 -> 0.776 Inexact Rounded +pwsx4084 power 0.0602 0.5 -> 0.245 Inexact Rounded +pwsx4085 power 0.603 0.5 -> 0.777 Inexact Rounded +pwsx4086 power 0.0603 0.5 -> 0.246 Inexact Rounded +pwsx4087 power 0.604 0.5 -> 0.777 Inexact Rounded +pwsx4088 power 0.0604 0.5 -> 0.246 Inexact Rounded +pwsx4089 power 0.605 0.5 -> 0.778 Inexact Rounded +pwsx4090 power 0.0605 0.5 -> 0.246 Inexact Rounded +pwsx4091 power 0.606 0.5 -> 0.778 Inexact Rounded +pwsx4092 power 0.0606 0.5 -> 0.246 Inexact Rounded +pwsx4093 power 0.607 0.5 -> 0.779 Inexact Rounded +pwsx4094 power 0.0607 0.5 -> 0.246 Inexact Rounded +pwsx4095 power 0.608 0.5 -> 0.780 Inexact Rounded +pwsx4096 power 0.0608 0.5 -> 0.247 Inexact Rounded +pwsx4097 power 0.609 0.5 -> 0.780 Inexact Rounded +pwsx4098 power 0.0609 0.5 -> 0.247 Inexact Rounded +pwsx4099 power 0.611 0.5 -> 0.782 Inexact Rounded +pwsx4100 power 0.0611 0.5 -> 0.247 Inexact Rounded +pwsx4101 power 0.612 0.5 -> 0.782 Inexact Rounded +pwsx4102 power 0.0612 0.5 -> 0.247 Inexact Rounded +pwsx4103 power 0.613 0.5 -> 0.783 Inexact Rounded +pwsx4104 power 0.0613 0.5 -> 0.248 Inexact Rounded +pwsx4105 power 0.614 0.5 -> 0.784 Inexact Rounded +pwsx4106 power 0.0614 0.5 -> 0.248 Inexact Rounded +pwsx4107 power 0.615 0.5 -> 0.784 Inexact Rounded +pwsx4108 power 0.0615 0.5 -> 0.248 Inexact Rounded +pwsx4109 power 0.616 0.5 -> 0.785 Inexact Rounded +pwsx4110 power 0.0616 0.5 -> 0.248 Inexact Rounded +pwsx4111 power 0.617 0.5 -> 0.785 Inexact Rounded +pwsx4112 power 0.0617 0.5 -> 0.248 Inexact Rounded +pwsx4113 power 0.618 0.5 -> 0.786 Inexact Rounded +pwsx4114 power 0.0618 0.5 -> 0.249 Inexact Rounded +pwsx4115 power 0.619 0.5 -> 0.787 Inexact Rounded +pwsx4116 power 0.0619 0.5 -> 0.249 Inexact Rounded +pwsx4117 power 0.621 0.5 -> 0.788 Inexact Rounded +pwsx4118 power 0.0621 0.5 -> 0.249 Inexact Rounded +pwsx4119 power 0.622 0.5 -> 0.789 Inexact Rounded +pwsx4120 power 0.0622 0.5 -> 0.249 Inexact Rounded +pwsx4121 power 0.623 0.5 -> 0.789 Inexact Rounded +pwsx4122 power 0.0623 0.5 -> 0.250 Inexact Rounded +pwsx4123 power 0.624 0.5 -> 0.790 Inexact Rounded +pwsx4124 power 0.0624 0.5 -> 0.250 Inexact Rounded +pwsx4125 power 0.625 0.5 -> 0.791 Inexact Rounded +pwsx4126 power 0.0625 0.5 -> 0.250 Inexact Rounded +pwsx4127 power 0.626 0.5 -> 0.791 Inexact Rounded +pwsx4128 power 0.0626 0.5 -> 0.250 Inexact Rounded +pwsx4129 power 0.627 0.5 -> 0.792 Inexact Rounded +pwsx4130 power 0.0627 0.5 -> 0.250 Inexact Rounded +pwsx4131 power 0.628 0.5 -> 0.792 Inexact Rounded +pwsx4132 power 0.0628 0.5 -> 0.251 Inexact Rounded +pwsx4133 power 0.629 0.5 -> 0.793 Inexact Rounded +pwsx4134 power 0.0629 0.5 -> 0.251 Inexact Rounded +pwsx4135 power 0.631 0.5 -> 0.794 Inexact Rounded +pwsx4136 power 0.0631 0.5 -> 0.251 Inexact Rounded +pwsx4137 power 0.632 0.5 -> 0.795 Inexact Rounded +pwsx4138 power 0.0632 0.5 -> 0.251 Inexact Rounded +pwsx4139 power 0.633 0.5 -> 0.796 Inexact Rounded +pwsx4140 power 0.0633 0.5 -> 0.252 Inexact Rounded +pwsx4141 power 0.634 0.5 -> 0.796 Inexact Rounded +pwsx4142 power 0.0634 0.5 -> 0.252 Inexact Rounded +pwsx4143 power 0.635 0.5 -> 0.797 Inexact Rounded +pwsx4144 power 0.0635 0.5 -> 0.252 Inexact Rounded +pwsx4145 power 0.636 0.5 -> 0.797 Inexact Rounded +pwsx4146 power 0.0636 0.5 -> 0.252 Inexact Rounded +pwsx4147 power 0.637 0.5 -> 0.798 Inexact Rounded +pwsx4148 power 0.0637 0.5 -> 0.252 Inexact Rounded +pwsx4149 power 0.638 0.5 -> 0.799 Inexact Rounded +pwsx4150 power 0.0638 0.5 -> 0.253 Inexact Rounded +pwsx4151 power 0.639 0.5 -> 0.799 Inexact Rounded +pwsx4152 power 0.0639 0.5 -> 0.253 Inexact Rounded +pwsx4153 power 0.641 0.5 -> 0.801 Inexact Rounded +pwsx4154 power 0.0641 0.5 -> 0.253 Inexact Rounded +pwsx4155 power 0.642 0.5 -> 0.801 Inexact Rounded +pwsx4156 power 0.0642 0.5 -> 0.253 Inexact Rounded +pwsx4157 power 0.643 0.5 -> 0.802 Inexact Rounded +pwsx4158 power 0.0643 0.5 -> 0.254 Inexact Rounded +pwsx4159 power 0.644 0.5 -> 0.802 Inexact Rounded +pwsx4160 power 0.0644 0.5 -> 0.254 Inexact Rounded +pwsx4161 power 0.645 0.5 -> 0.803 Inexact Rounded +pwsx4162 power 0.0645 0.5 -> 0.254 Inexact Rounded +pwsx4163 power 0.646 0.5 -> 0.804 Inexact Rounded +pwsx4164 power 0.0646 0.5 -> 0.254 Inexact Rounded +pwsx4165 power 0.647 0.5 -> 0.804 Inexact Rounded +pwsx4166 power 0.0647 0.5 -> 0.254 Inexact Rounded +pwsx4167 power 0.648 0.5 -> 0.805 Inexact Rounded +pwsx4168 power 0.0648 0.5 -> 0.255 Inexact Rounded +pwsx4169 power 0.649 0.5 -> 0.806 Inexact Rounded +pwsx4170 power 0.0649 0.5 -> 0.255 Inexact Rounded +pwsx4171 power 0.651 0.5 -> 0.807 Inexact Rounded +pwsx4172 power 0.0651 0.5 -> 0.255 Inexact Rounded +pwsx4173 power 0.652 0.5 -> 0.807 Inexact Rounded +pwsx4174 power 0.0652 0.5 -> 0.255 Inexact Rounded +pwsx4175 power 0.653 0.5 -> 0.808 Inexact Rounded +pwsx4176 power 0.0653 0.5 -> 0.256 Inexact Rounded +pwsx4177 power 0.654 0.5 -> 0.809 Inexact Rounded +pwsx4178 power 0.0654 0.5 -> 0.256 Inexact Rounded +pwsx4179 power 0.655 0.5 -> 0.809 Inexact Rounded +pwsx4180 power 0.0655 0.5 -> 0.256 Inexact Rounded +pwsx4181 power 0.656 0.5 -> 0.810 Inexact Rounded +pwsx4182 power 0.0656 0.5 -> 0.256 Inexact Rounded +pwsx4183 power 0.657 0.5 -> 0.811 Inexact Rounded +pwsx4184 power 0.0657 0.5 -> 0.256 Inexact Rounded +pwsx4185 power 0.658 0.5 -> 0.811 Inexact Rounded +pwsx4186 power 0.0658 0.5 -> 0.257 Inexact Rounded +pwsx4187 power 0.659 0.5 -> 0.812 Inexact Rounded +pwsx4188 power 0.0659 0.5 -> 0.257 Inexact Rounded +pwsx4189 power 0.661 0.5 -> 0.813 Inexact Rounded +pwsx4190 power 0.0661 0.5 -> 0.257 Inexact Rounded +pwsx4191 power 0.662 0.5 -> 0.814 Inexact Rounded +pwsx4192 power 0.0662 0.5 -> 0.257 Inexact Rounded +pwsx4193 power 0.663 0.5 -> 0.814 Inexact Rounded +pwsx4194 power 0.0663 0.5 -> 0.257 Inexact Rounded +pwsx4195 power 0.664 0.5 -> 0.815 Inexact Rounded +pwsx4196 power 0.0664 0.5 -> 0.258 Inexact Rounded +pwsx4197 power 0.665 0.5 -> 0.815 Inexact Rounded +pwsx4198 power 0.0665 0.5 -> 0.258 Inexact Rounded +pwsx4199 power 0.666 0.5 -> 0.816 Inexact Rounded +pwsx4200 power 0.0666 0.5 -> 0.258 Inexact Rounded +pwsx4201 power 0.667 0.5 -> 0.817 Inexact Rounded +pwsx4202 power 0.0667 0.5 -> 0.258 Inexact Rounded +pwsx4203 power 0.668 0.5 -> 0.817 Inexact Rounded +pwsx4204 power 0.0668 0.5 -> 0.258 Inexact Rounded +pwsx4205 power 0.669 0.5 -> 0.818 Inexact Rounded +pwsx4206 power 0.0669 0.5 -> 0.259 Inexact Rounded +pwsx4207 power 0.671 0.5 -> 0.819 Inexact Rounded +pwsx4208 power 0.0671 0.5 -> 0.259 Inexact Rounded +pwsx4209 power 0.672 0.5 -> 0.820 Inexact Rounded +pwsx4210 power 0.0672 0.5 -> 0.259 Inexact Rounded +pwsx4211 power 0.673 0.5 -> 0.820 Inexact Rounded +pwsx4212 power 0.0673 0.5 -> 0.259 Inexact Rounded +pwsx4213 power 0.674 0.5 -> 0.821 Inexact Rounded +pwsx4214 power 0.0674 0.5 -> 0.260 Inexact Rounded +pwsx4215 power 0.675 0.5 -> 0.822 Inexact Rounded +pwsx4216 power 0.0675 0.5 -> 0.260 Inexact Rounded +pwsx4217 power 0.676 0.5 -> 0.822 Inexact Rounded +pwsx4218 power 0.0676 0.5 -> 0.260 Inexact Rounded +pwsx4219 power 0.677 0.5 -> 0.823 Inexact Rounded +pwsx4220 power 0.0677 0.5 -> 0.260 Inexact Rounded +pwsx4221 power 0.678 0.5 -> 0.823 Inexact Rounded +pwsx4222 power 0.0678 0.5 -> 0.260 Inexact Rounded +pwsx4223 power 0.679 0.5 -> 0.824 Inexact Rounded +pwsx4224 power 0.0679 0.5 -> 0.261 Inexact Rounded +pwsx4225 power 0.681 0.5 -> 0.825 Inexact Rounded +pwsx4226 power 0.0681 0.5 -> 0.261 Inexact Rounded +pwsx4227 power 0.682 0.5 -> 0.826 Inexact Rounded +pwsx4228 power 0.0682 0.5 -> 0.261 Inexact Rounded +pwsx4229 power 0.683 0.5 -> 0.826 Inexact Rounded +pwsx4230 power 0.0683 0.5 -> 0.261 Inexact Rounded +pwsx4231 power 0.684 0.5 -> 0.827 Inexact Rounded +pwsx4232 power 0.0684 0.5 -> 0.262 Inexact Rounded +pwsx4233 power 0.685 0.5 -> 0.828 Inexact Rounded +pwsx4234 power 0.0685 0.5 -> 0.262 Inexact Rounded +pwsx4235 power 0.686 0.5 -> 0.828 Inexact Rounded +pwsx4236 power 0.0686 0.5 -> 0.262 Inexact Rounded +pwsx4237 power 0.687 0.5 -> 0.829 Inexact Rounded +pwsx4238 power 0.0687 0.5 -> 0.262 Inexact Rounded +pwsx4239 power 0.688 0.5 -> 0.829 Inexact Rounded +pwsx4240 power 0.0688 0.5 -> 0.262 Inexact Rounded +pwsx4241 power 0.689 0.5 -> 0.830 Inexact Rounded +pwsx4242 power 0.0689 0.5 -> 0.262 Inexact Rounded +pwsx4243 power 0.691 0.5 -> 0.831 Inexact Rounded +pwsx4244 power 0.0691 0.5 -> 0.263 Inexact Rounded +pwsx4245 power 0.692 0.5 -> 0.832 Inexact Rounded +pwsx4246 power 0.0692 0.5 -> 0.263 Inexact Rounded +pwsx4247 power 0.693 0.5 -> 0.832 Inexact Rounded +pwsx4248 power 0.0693 0.5 -> 0.263 Inexact Rounded +pwsx4249 power 0.694 0.5 -> 0.833 Inexact Rounded +pwsx4250 power 0.0694 0.5 -> 0.263 Inexact Rounded +pwsx4251 power 0.695 0.5 -> 0.834 Inexact Rounded +pwsx4252 power 0.0695 0.5 -> 0.264 Inexact Rounded +pwsx4253 power 0.696 0.5 -> 0.834 Inexact Rounded +pwsx4254 power 0.0696 0.5 -> 0.264 Inexact Rounded +pwsx4255 power 0.697 0.5 -> 0.835 Inexact Rounded +pwsx4256 power 0.0697 0.5 -> 0.264 Inexact Rounded +pwsx4257 power 0.698 0.5 -> 0.835 Inexact Rounded +pwsx4258 power 0.0698 0.5 -> 0.264 Inexact Rounded +pwsx4259 power 0.699 0.5 -> 0.836 Inexact Rounded +pwsx4260 power 0.0699 0.5 -> 0.264 Inexact Rounded +pwsx4261 power 0.701 0.5 -> 0.837 Inexact Rounded +pwsx4262 power 0.0701 0.5 -> 0.265 Inexact Rounded +pwsx4263 power 0.702 0.5 -> 0.838 Inexact Rounded +pwsx4264 power 0.0702 0.5 -> 0.265 Inexact Rounded +pwsx4265 power 0.703 0.5 -> 0.838 Inexact Rounded +pwsx4266 power 0.0703 0.5 -> 0.265 Inexact Rounded +pwsx4267 power 0.704 0.5 -> 0.839 Inexact Rounded +pwsx4268 power 0.0704 0.5 -> 0.265 Inexact Rounded +pwsx4269 power 0.705 0.5 -> 0.840 Inexact Rounded +pwsx4270 power 0.0705 0.5 -> 0.266 Inexact Rounded +pwsx4271 power 0.706 0.5 -> 0.840 Inexact Rounded +pwsx4272 power 0.0706 0.5 -> 0.266 Inexact Rounded +pwsx4273 power 0.707 0.5 -> 0.841 Inexact Rounded +pwsx4274 power 0.0707 0.5 -> 0.266 Inexact Rounded +pwsx4275 power 0.708 0.5 -> 0.841 Inexact Rounded +pwsx4276 power 0.0708 0.5 -> 0.266 Inexact Rounded +pwsx4277 power 0.709 0.5 -> 0.842 Inexact Rounded +pwsx4278 power 0.0709 0.5 -> 0.266 Inexact Rounded +pwsx4279 power 0.711 0.5 -> 0.843 Inexact Rounded +pwsx4280 power 0.0711 0.5 -> 0.267 Inexact Rounded +pwsx4281 power 0.712 0.5 -> 0.844 Inexact Rounded +pwsx4282 power 0.0712 0.5 -> 0.267 Inexact Rounded +pwsx4283 power 0.713 0.5 -> 0.844 Inexact Rounded +pwsx4284 power 0.0713 0.5 -> 0.267 Inexact Rounded +pwsx4285 power 0.714 0.5 -> 0.845 Inexact Rounded +pwsx4286 power 0.0714 0.5 -> 0.267 Inexact Rounded +pwsx4287 power 0.715 0.5 -> 0.846 Inexact Rounded +pwsx4288 power 0.0715 0.5 -> 0.267 Inexact Rounded +pwsx4289 power 0.716 0.5 -> 0.846 Inexact Rounded +pwsx4290 power 0.0716 0.5 -> 0.268 Inexact Rounded +pwsx4291 power 0.717 0.5 -> 0.847 Inexact Rounded +pwsx4292 power 0.0717 0.5 -> 0.268 Inexact Rounded +pwsx4293 power 0.718 0.5 -> 0.847 Inexact Rounded +pwsx4294 power 0.0718 0.5 -> 0.268 Inexact Rounded +pwsx4295 power 0.719 0.5 -> 0.848 Inexact Rounded +pwsx4296 power 0.0719 0.5 -> 0.268 Inexact Rounded +pwsx4297 power 0.721 0.5 -> 0.849 Inexact Rounded +pwsx4298 power 0.0721 0.5 -> 0.269 Inexact Rounded +pwsx4299 power 0.722 0.5 -> 0.850 Inexact Rounded +pwsx4300 power 0.0722 0.5 -> 0.269 Inexact Rounded +pwsx4301 power 0.723 0.5 -> 0.850 Inexact Rounded +pwsx4302 power 0.0723 0.5 -> 0.269 Inexact Rounded +pwsx4303 power 0.724 0.5 -> 0.851 Inexact Rounded +pwsx4304 power 0.0724 0.5 -> 0.269 Inexact Rounded +pwsx4305 power 0.725 0.5 -> 0.851 Inexact Rounded +pwsx4306 power 0.0725 0.5 -> 0.269 Inexact Rounded +pwsx4307 power 0.726 0.5 -> 0.852 Inexact Rounded +pwsx4308 power 0.0726 0.5 -> 0.269 Inexact Rounded +pwsx4309 power 0.727 0.5 -> 0.853 Inexact Rounded +pwsx4310 power 0.0727 0.5 -> 0.270 Inexact Rounded +pwsx4311 power 0.728 0.5 -> 0.853 Inexact Rounded +pwsx4312 power 0.0728 0.5 -> 0.270 Inexact Rounded +pwsx4313 power 0.729 0.5 -> 0.854 Inexact Rounded +pwsx4314 power 0.0729 0.5 -> 0.270 Inexact Rounded +pwsx4315 power 0.731 0.5 -> 0.855 Inexact Rounded +pwsx4316 power 0.0731 0.5 -> 0.270 Inexact Rounded +pwsx4317 power 0.732 0.5 -> 0.856 Inexact Rounded +pwsx4318 power 0.0732 0.5 -> 0.271 Inexact Rounded +pwsx4319 power 0.733 0.5 -> 0.856 Inexact Rounded +pwsx4320 power 0.0733 0.5 -> 0.271 Inexact Rounded +pwsx4321 power 0.734 0.5 -> 0.857 Inexact Rounded +pwsx4322 power 0.0734 0.5 -> 0.271 Inexact Rounded +pwsx4323 power 0.735 0.5 -> 0.857 Inexact Rounded +pwsx4324 power 0.0735 0.5 -> 0.271 Inexact Rounded +pwsx4325 power 0.736 0.5 -> 0.858 Inexact Rounded +pwsx4326 power 0.0736 0.5 -> 0.271 Inexact Rounded +pwsx4327 power 0.737 0.5 -> 0.858 Inexact Rounded +pwsx4328 power 0.0737 0.5 -> 0.271 Inexact Rounded +pwsx4329 power 0.738 0.5 -> 0.859 Inexact Rounded +pwsx4330 power 0.0738 0.5 -> 0.272 Inexact Rounded +pwsx4331 power 0.739 0.5 -> 0.860 Inexact Rounded +pwsx4332 power 0.0739 0.5 -> 0.272 Inexact Rounded +pwsx4333 power 0.741 0.5 -> 0.861 Inexact Rounded +pwsx4334 power 0.0741 0.5 -> 0.272 Inexact Rounded +pwsx4335 power 0.742 0.5 -> 0.861 Inexact Rounded +pwsx4336 power 0.0742 0.5 -> 0.272 Inexact Rounded +pwsx4337 power 0.743 0.5 -> 0.862 Inexact Rounded +pwsx4338 power 0.0743 0.5 -> 0.273 Inexact Rounded +pwsx4339 power 0.744 0.5 -> 0.863 Inexact Rounded +pwsx4340 power 0.0744 0.5 -> 0.273 Inexact Rounded +pwsx4341 power 0.745 0.5 -> 0.863 Inexact Rounded +pwsx4342 power 0.0745 0.5 -> 0.273 Inexact Rounded +pwsx4343 power 0.746 0.5 -> 0.864 Inexact Rounded +pwsx4344 power 0.0746 0.5 -> 0.273 Inexact Rounded +pwsx4345 power 0.747 0.5 -> 0.864 Inexact Rounded +pwsx4346 power 0.0747 0.5 -> 0.273 Inexact Rounded +pwsx4347 power 0.748 0.5 -> 0.865 Inexact Rounded +pwsx4348 power 0.0748 0.5 -> 0.273 Inexact Rounded +pwsx4349 power 0.749 0.5 -> 0.865 Inexact Rounded +pwsx4350 power 0.0749 0.5 -> 0.274 Inexact Rounded +pwsx4351 power 0.751 0.5 -> 0.867 Inexact Rounded +pwsx4352 power 0.0751 0.5 -> 0.274 Inexact Rounded +pwsx4353 power 0.752 0.5 -> 0.867 Inexact Rounded +pwsx4354 power 0.0752 0.5 -> 0.274 Inexact Rounded +pwsx4355 power 0.753 0.5 -> 0.868 Inexact Rounded +pwsx4356 power 0.0753 0.5 -> 0.274 Inexact Rounded +pwsx4357 power 0.754 0.5 -> 0.868 Inexact Rounded +pwsx4358 power 0.0754 0.5 -> 0.275 Inexact Rounded +pwsx4359 power 0.755 0.5 -> 0.869 Inexact Rounded +pwsx4360 power 0.0755 0.5 -> 0.275 Inexact Rounded +pwsx4361 power 0.756 0.5 -> 0.869 Inexact Rounded +pwsx4362 power 0.0756 0.5 -> 0.275 Inexact Rounded +pwsx4363 power 0.757 0.5 -> 0.870 Inexact Rounded +pwsx4364 power 0.0757 0.5 -> 0.275 Inexact Rounded +pwsx4365 power 0.758 0.5 -> 0.871 Inexact Rounded +pwsx4366 power 0.0758 0.5 -> 0.275 Inexact Rounded +pwsx4367 power 0.759 0.5 -> 0.871 Inexact Rounded +pwsx4368 power 0.0759 0.5 -> 0.275 Inexact Rounded +pwsx4369 power 0.761 0.5 -> 0.872 Inexact Rounded +pwsx4370 power 0.0761 0.5 -> 0.276 Inexact Rounded +pwsx4371 power 0.762 0.5 -> 0.873 Inexact Rounded +pwsx4372 power 0.0762 0.5 -> 0.276 Inexact Rounded +pwsx4373 power 0.763 0.5 -> 0.873 Inexact Rounded +pwsx4374 power 0.0763 0.5 -> 0.276 Inexact Rounded +pwsx4375 power 0.764 0.5 -> 0.874 Inexact Rounded +pwsx4376 power 0.0764 0.5 -> 0.276 Inexact Rounded +pwsx4377 power 0.765 0.5 -> 0.875 Inexact Rounded +pwsx4378 power 0.0765 0.5 -> 0.277 Inexact Rounded +pwsx4379 power 0.766 0.5 -> 0.875 Inexact Rounded +pwsx4380 power 0.0766 0.5 -> 0.277 Inexact Rounded +pwsx4381 power 0.767 0.5 -> 0.876 Inexact Rounded +pwsx4382 power 0.0767 0.5 -> 0.277 Inexact Rounded +pwsx4383 power 0.768 0.5 -> 0.876 Inexact Rounded +pwsx4384 power 0.0768 0.5 -> 0.277 Inexact Rounded +pwsx4385 power 0.769 0.5 -> 0.877 Inexact Rounded +pwsx4386 power 0.0769 0.5 -> 0.277 Inexact Rounded +pwsx4387 power 0.771 0.5 -> 0.878 Inexact Rounded +pwsx4388 power 0.0771 0.5 -> 0.278 Inexact Rounded +pwsx4389 power 0.772 0.5 -> 0.879 Inexact Rounded +pwsx4390 power 0.0772 0.5 -> 0.278 Inexact Rounded +pwsx4391 power 0.773 0.5 -> 0.879 Inexact Rounded +pwsx4392 power 0.0773 0.5 -> 0.278 Inexact Rounded +pwsx4393 power 0.774 0.5 -> 0.880 Inexact Rounded +pwsx4394 power 0.0774 0.5 -> 0.278 Inexact Rounded +pwsx4395 power 0.775 0.5 -> 0.880 Inexact Rounded +pwsx4396 power 0.0775 0.5 -> 0.278 Inexact Rounded +pwsx4397 power 0.776 0.5 -> 0.881 Inexact Rounded +pwsx4398 power 0.0776 0.5 -> 0.279 Inexact Rounded +pwsx4399 power 0.777 0.5 -> 0.881 Inexact Rounded +pwsx4400 power 0.0777 0.5 -> 0.279 Inexact Rounded +pwsx4401 power 0.778 0.5 -> 0.882 Inexact Rounded +pwsx4402 power 0.0778 0.5 -> 0.279 Inexact Rounded +pwsx4403 power 0.779 0.5 -> 0.883 Inexact Rounded +pwsx4404 power 0.0779 0.5 -> 0.279 Inexact Rounded +pwsx4405 power 0.781 0.5 -> 0.884 Inexact Rounded +pwsx4406 power 0.0781 0.5 -> 0.279 Inexact Rounded +pwsx4407 power 0.782 0.5 -> 0.884 Inexact Rounded +pwsx4408 power 0.0782 0.5 -> 0.280 Inexact Rounded +pwsx4409 power 0.783 0.5 -> 0.885 Inexact Rounded +pwsx4410 power 0.0783 0.5 -> 0.280 Inexact Rounded +pwsx4411 power 0.784 0.5 -> 0.885 Inexact Rounded +pwsx4412 power 0.0784 0.5 -> 0.280 Inexact Rounded +pwsx4413 power 0.785 0.5 -> 0.886 Inexact Rounded +pwsx4414 power 0.0785 0.5 -> 0.280 Inexact Rounded +pwsx4415 power 0.786 0.5 -> 0.887 Inexact Rounded +pwsx4416 power 0.0786 0.5 -> 0.280 Inexact Rounded +pwsx4417 power 0.787 0.5 -> 0.887 Inexact Rounded +pwsx4418 power 0.0787 0.5 -> 0.281 Inexact Rounded +pwsx4419 power 0.788 0.5 -> 0.888 Inexact Rounded +pwsx4420 power 0.0788 0.5 -> 0.281 Inexact Rounded +pwsx4421 power 0.789 0.5 -> 0.888 Inexact Rounded +pwsx4422 power 0.0789 0.5 -> 0.281 Inexact Rounded +pwsx4423 power 0.791 0.5 -> 0.889 Inexact Rounded +pwsx4424 power 0.0791 0.5 -> 0.281 Inexact Rounded +pwsx4425 power 0.792 0.5 -> 0.890 Inexact Rounded +pwsx4426 power 0.0792 0.5 -> 0.281 Inexact Rounded +pwsx4427 power 0.793 0.5 -> 0.891 Inexact Rounded +pwsx4428 power 0.0793 0.5 -> 0.282 Inexact Rounded +pwsx4429 power 0.794 0.5 -> 0.891 Inexact Rounded +pwsx4430 power 0.0794 0.5 -> 0.282 Inexact Rounded +pwsx4431 power 0.795 0.5 -> 0.892 Inexact Rounded +pwsx4432 power 0.0795 0.5 -> 0.282 Inexact Rounded +pwsx4433 power 0.796 0.5 -> 0.892 Inexact Rounded +pwsx4434 power 0.0796 0.5 -> 0.282 Inexact Rounded +pwsx4435 power 0.797 0.5 -> 0.893 Inexact Rounded +pwsx4436 power 0.0797 0.5 -> 0.282 Inexact Rounded +pwsx4437 power 0.798 0.5 -> 0.893 Inexact Rounded +pwsx4438 power 0.0798 0.5 -> 0.282 Inexact Rounded +pwsx4439 power 0.799 0.5 -> 0.894 Inexact Rounded +pwsx4440 power 0.0799 0.5 -> 0.283 Inexact Rounded +pwsx4441 power 0.801 0.5 -> 0.895 Inexact Rounded +pwsx4442 power 0.0801 0.5 -> 0.283 Inexact Rounded +pwsx4443 power 0.802 0.5 -> 0.896 Inexact Rounded +pwsx4444 power 0.0802 0.5 -> 0.283 Inexact Rounded +pwsx4445 power 0.803 0.5 -> 0.896 Inexact Rounded +pwsx4446 power 0.0803 0.5 -> 0.283 Inexact Rounded +pwsx4447 power 0.804 0.5 -> 0.897 Inexact Rounded +pwsx4448 power 0.0804 0.5 -> 0.284 Inexact Rounded +pwsx4449 power 0.805 0.5 -> 0.897 Inexact Rounded +pwsx4450 power 0.0805 0.5 -> 0.284 Inexact Rounded +pwsx4451 power 0.806 0.5 -> 0.898 Inexact Rounded +pwsx4452 power 0.0806 0.5 -> 0.284 Inexact Rounded +pwsx4453 power 0.807 0.5 -> 0.898 Inexact Rounded +pwsx4454 power 0.0807 0.5 -> 0.284 Inexact Rounded +pwsx4455 power 0.808 0.5 -> 0.899 Inexact Rounded +pwsx4456 power 0.0808 0.5 -> 0.284 Inexact Rounded +pwsx4457 power 0.809 0.5 -> 0.899 Inexact Rounded +pwsx4458 power 0.0809 0.5 -> 0.284 Inexact Rounded +pwsx4459 power 0.811 0.5 -> 0.901 Inexact Rounded +pwsx4460 power 0.0811 0.5 -> 0.285 Inexact Rounded +pwsx4461 power 0.812 0.5 -> 0.901 Inexact Rounded +pwsx4462 power 0.0812 0.5 -> 0.285 Inexact Rounded +pwsx4463 power 0.813 0.5 -> 0.902 Inexact Rounded +pwsx4464 power 0.0813 0.5 -> 0.285 Inexact Rounded +pwsx4465 power 0.814 0.5 -> 0.902 Inexact Rounded +pwsx4466 power 0.0814 0.5 -> 0.285 Inexact Rounded +pwsx4467 power 0.815 0.5 -> 0.903 Inexact Rounded +pwsx4468 power 0.0815 0.5 -> 0.285 Inexact Rounded +pwsx4469 power 0.816 0.5 -> 0.903 Inexact Rounded +pwsx4470 power 0.0816 0.5 -> 0.286 Inexact Rounded +pwsx4471 power 0.817 0.5 -> 0.904 Inexact Rounded +pwsx4472 power 0.0817 0.5 -> 0.286 Inexact Rounded +pwsx4473 power 0.818 0.5 -> 0.904 Inexact Rounded +pwsx4474 power 0.0818 0.5 -> 0.286 Inexact Rounded +pwsx4475 power 0.819 0.5 -> 0.905 Inexact Rounded +pwsx4476 power 0.0819 0.5 -> 0.286 Inexact Rounded +pwsx4477 power 0.821 0.5 -> 0.906 Inexact Rounded +pwsx4478 power 0.0821 0.5 -> 0.287 Inexact Rounded +pwsx4479 power 0.822 0.5 -> 0.907 Inexact Rounded +pwsx4480 power 0.0822 0.5 -> 0.287 Inexact Rounded +pwsx4481 power 0.823 0.5 -> 0.907 Inexact Rounded +pwsx4482 power 0.0823 0.5 -> 0.287 Inexact Rounded +pwsx4483 power 0.824 0.5 -> 0.908 Inexact Rounded +pwsx4484 power 0.0824 0.5 -> 0.287 Inexact Rounded +pwsx4485 power 0.825 0.5 -> 0.908 Inexact Rounded +pwsx4486 power 0.0825 0.5 -> 0.287 Inexact Rounded +pwsx4487 power 0.826 0.5 -> 0.909 Inexact Rounded +pwsx4488 power 0.0826 0.5 -> 0.287 Inexact Rounded +pwsx4489 power 0.827 0.5 -> 0.909 Inexact Rounded +pwsx4490 power 0.0827 0.5 -> 0.288 Inexact Rounded +pwsx4491 power 0.828 0.5 -> 0.910 Inexact Rounded +pwsx4492 power 0.0828 0.5 -> 0.288 Inexact Rounded +pwsx4493 power 0.829 0.5 -> 0.910 Inexact Rounded +pwsx4494 power 0.0829 0.5 -> 0.288 Inexact Rounded +pwsx4495 power 0.831 0.5 -> 0.912 Inexact Rounded +pwsx4496 power 0.0831 0.5 -> 0.288 Inexact Rounded +pwsx4497 power 0.832 0.5 -> 0.912 Inexact Rounded +pwsx4498 power 0.0832 0.5 -> 0.288 Inexact Rounded +pwsx4499 power 0.833 0.5 -> 0.913 Inexact Rounded +pwsx4500 power 0.0833 0.5 -> 0.289 Inexact Rounded +pwsx4501 power 0.834 0.5 -> 0.913 Inexact Rounded +pwsx4502 power 0.0834 0.5 -> 0.289 Inexact Rounded +pwsx4503 power 0.835 0.5 -> 0.914 Inexact Rounded +pwsx4504 power 0.0835 0.5 -> 0.289 Inexact Rounded +pwsx4505 power 0.836 0.5 -> 0.914 Inexact Rounded +pwsx4506 power 0.0836 0.5 -> 0.289 Inexact Rounded +pwsx4507 power 0.837 0.5 -> 0.915 Inexact Rounded +pwsx4508 power 0.0837 0.5 -> 0.289 Inexact Rounded +pwsx4509 power 0.838 0.5 -> 0.915 Inexact Rounded +pwsx4510 power 0.0838 0.5 -> 0.289 Inexact Rounded +pwsx4511 power 0.839 0.5 -> 0.916 Inexact Rounded +pwsx4512 power 0.0839 0.5 -> 0.290 Inexact Rounded +pwsx4513 power 0.841 0.5 -> 0.917 Inexact Rounded +pwsx4514 power 0.0841 0.5 -> 0.290 Inexact Rounded +pwsx4515 power 0.842 0.5 -> 0.918 Inexact Rounded +pwsx4516 power 0.0842 0.5 -> 0.290 Inexact Rounded +pwsx4517 power 0.843 0.5 -> 0.918 Inexact Rounded +pwsx4518 power 0.0843 0.5 -> 0.290 Inexact Rounded +pwsx4519 power 0.844 0.5 -> 0.919 Inexact Rounded +pwsx4520 power 0.0844 0.5 -> 0.291 Inexact Rounded +pwsx4521 power 0.845 0.5 -> 0.919 Inexact Rounded +pwsx4522 power 0.0845 0.5 -> 0.291 Inexact Rounded +pwsx4523 power 0.846 0.5 -> 0.920 Inexact Rounded +pwsx4524 power 0.0846 0.5 -> 0.291 Inexact Rounded +pwsx4525 power 0.847 0.5 -> 0.920 Inexact Rounded +pwsx4526 power 0.0847 0.5 -> 0.291 Inexact Rounded +pwsx4527 power 0.848 0.5 -> 0.921 Inexact Rounded +pwsx4528 power 0.0848 0.5 -> 0.291 Inexact Rounded +pwsx4529 power 0.849 0.5 -> 0.921 Inexact Rounded +pwsx4530 power 0.0849 0.5 -> 0.291 Inexact Rounded +pwsx4531 power 0.851 0.5 -> 0.922 Inexact Rounded +pwsx4532 power 0.0851 0.5 -> 0.292 Inexact Rounded +pwsx4533 power 0.852 0.5 -> 0.923 Inexact Rounded +pwsx4534 power 0.0852 0.5 -> 0.292 Inexact Rounded +pwsx4535 power 0.853 0.5 -> 0.924 Inexact Rounded +pwsx4536 power 0.0853 0.5 -> 0.292 Inexact Rounded +pwsx4537 power 0.854 0.5 -> 0.924 Inexact Rounded +pwsx4538 power 0.0854 0.5 -> 0.292 Inexact Rounded +pwsx4539 power 0.855 0.5 -> 0.925 Inexact Rounded +pwsx4540 power 0.0855 0.5 -> 0.292 Inexact Rounded +pwsx4541 power 0.856 0.5 -> 0.925 Inexact Rounded +pwsx4542 power 0.0856 0.5 -> 0.293 Inexact Rounded +pwsx4543 power 0.857 0.5 -> 0.926 Inexact Rounded +pwsx4544 power 0.0857 0.5 -> 0.293 Inexact Rounded +pwsx4545 power 0.858 0.5 -> 0.926 Inexact Rounded +pwsx4546 power 0.0858 0.5 -> 0.293 Inexact Rounded +pwsx4547 power 0.859 0.5 -> 0.927 Inexact Rounded +pwsx4548 power 0.0859 0.5 -> 0.293 Inexact Rounded +pwsx4549 power 0.861 0.5 -> 0.928 Inexact Rounded +pwsx4550 power 0.0861 0.5 -> 0.293 Inexact Rounded +pwsx4551 power 0.862 0.5 -> 0.928 Inexact Rounded +pwsx4552 power 0.0862 0.5 -> 0.294 Inexact Rounded +pwsx4553 power 0.863 0.5 -> 0.929 Inexact Rounded +pwsx4554 power 0.0863 0.5 -> 0.294 Inexact Rounded +pwsx4555 power 0.864 0.5 -> 0.930 Inexact Rounded +pwsx4556 power 0.0864 0.5 -> 0.294 Inexact Rounded +pwsx4557 power 0.865 0.5 -> 0.930 Inexact Rounded +pwsx4558 power 0.0865 0.5 -> 0.294 Inexact Rounded +pwsx4559 power 0.866 0.5 -> 0.931 Inexact Rounded +pwsx4560 power 0.0866 0.5 -> 0.294 Inexact Rounded +pwsx4561 power 0.867 0.5 -> 0.931 Inexact Rounded +pwsx4562 power 0.0867 0.5 -> 0.294 Inexact Rounded +pwsx4563 power 0.868 0.5 -> 0.932 Inexact Rounded +pwsx4564 power 0.0868 0.5 -> 0.295 Inexact Rounded +pwsx4565 power 0.869 0.5 -> 0.932 Inexact Rounded +pwsx4566 power 0.0869 0.5 -> 0.295 Inexact Rounded +pwsx4567 power 0.871 0.5 -> 0.933 Inexact Rounded +pwsx4568 power 0.0871 0.5 -> 0.295 Inexact Rounded +pwsx4569 power 0.872 0.5 -> 0.934 Inexact Rounded +pwsx4570 power 0.0872 0.5 -> 0.295 Inexact Rounded +pwsx4571 power 0.873 0.5 -> 0.934 Inexact Rounded +pwsx4572 power 0.0873 0.5 -> 0.295 Inexact Rounded +pwsx4573 power 0.874 0.5 -> 0.935 Inexact Rounded +pwsx4574 power 0.0874 0.5 -> 0.296 Inexact Rounded +pwsx4575 power 0.875 0.5 -> 0.935 Inexact Rounded +pwsx4576 power 0.0875 0.5 -> 0.296 Inexact Rounded +pwsx4577 power 0.876 0.5 -> 0.936 Inexact Rounded +pwsx4578 power 0.0876 0.5 -> 0.296 Inexact Rounded +pwsx4579 power 0.877 0.5 -> 0.936 Inexact Rounded +pwsx4580 power 0.0877 0.5 -> 0.296 Inexact Rounded +pwsx4581 power 0.878 0.5 -> 0.937 Inexact Rounded +pwsx4582 power 0.0878 0.5 -> 0.296 Inexact Rounded +pwsx4583 power 0.879 0.5 -> 0.938 Inexact Rounded +pwsx4584 power 0.0879 0.5 -> 0.296 Inexact Rounded +pwsx4585 power 0.881 0.5 -> 0.939 Inexact Rounded +pwsx4586 power 0.0881 0.5 -> 0.297 Inexact Rounded +pwsx4587 power 0.882 0.5 -> 0.939 Inexact Rounded +pwsx4588 power 0.0882 0.5 -> 0.297 Inexact Rounded +pwsx4589 power 0.883 0.5 -> 0.940 Inexact Rounded +pwsx4590 power 0.0883 0.5 -> 0.297 Inexact Rounded +pwsx4591 power 0.884 0.5 -> 0.940 Inexact Rounded +pwsx4592 power 0.0884 0.5 -> 0.297 Inexact Rounded +pwsx4593 power 0.885 0.5 -> 0.941 Inexact Rounded +pwsx4594 power 0.0885 0.5 -> 0.297 Inexact Rounded +pwsx4595 power 0.886 0.5 -> 0.941 Inexact Rounded +pwsx4596 power 0.0886 0.5 -> 0.298 Inexact Rounded +pwsx4597 power 0.887 0.5 -> 0.942 Inexact Rounded +pwsx4598 power 0.0887 0.5 -> 0.298 Inexact Rounded +pwsx4599 power 0.888 0.5 -> 0.942 Inexact Rounded +pwsx4600 power 0.0888 0.5 -> 0.298 Inexact Rounded +pwsx4601 power 0.889 0.5 -> 0.943 Inexact Rounded +pwsx4602 power 0.0889 0.5 -> 0.298 Inexact Rounded +pwsx4603 power 0.891 0.5 -> 0.944 Inexact Rounded +pwsx4604 power 0.0891 0.5 -> 0.298 Inexact Rounded +pwsx4605 power 0.892 0.5 -> 0.944 Inexact Rounded +pwsx4606 power 0.0892 0.5 -> 0.299 Inexact Rounded +pwsx4607 power 0.893 0.5 -> 0.945 Inexact Rounded +pwsx4608 power 0.0893 0.5 -> 0.299 Inexact Rounded +pwsx4609 power 0.894 0.5 -> 0.946 Inexact Rounded +pwsx4610 power 0.0894 0.5 -> 0.299 Inexact Rounded +pwsx4611 power 0.895 0.5 -> 0.946 Inexact Rounded +pwsx4612 power 0.0895 0.5 -> 0.299 Inexact Rounded +pwsx4613 power 0.896 0.5 -> 0.947 Inexact Rounded +pwsx4614 power 0.0896 0.5 -> 0.299 Inexact Rounded +pwsx4615 power 0.897 0.5 -> 0.947 Inexact Rounded +pwsx4616 power 0.0897 0.5 -> 0.299 Inexact Rounded +pwsx4617 power 0.898 0.5 -> 0.948 Inexact Rounded +pwsx4618 power 0.0898 0.5 -> 0.300 Inexact Rounded +pwsx4619 power 0.899 0.5 -> 0.948 Inexact Rounded +pwsx4620 power 0.0899 0.5 -> 0.300 Inexact Rounded +pwsx4621 power 0.901 0.5 -> 0.949 Inexact Rounded +pwsx4622 power 0.0901 0.5 -> 0.300 Inexact Rounded +pwsx4623 power 0.902 0.5 -> 0.950 Inexact Rounded +pwsx4624 power 0.0902 0.5 -> 0.300 Inexact Rounded +pwsx4625 power 0.903 0.5 -> 0.950 Inexact Rounded +pwsx4626 power 0.0903 0.5 -> 0.300 Inexact Rounded +pwsx4627 power 0.904 0.5 -> 0.951 Inexact Rounded +pwsx4628 power 0.0904 0.5 -> 0.301 Inexact Rounded +pwsx4629 power 0.905 0.5 -> 0.951 Inexact Rounded +pwsx4630 power 0.0905 0.5 -> 0.301 Inexact Rounded +pwsx4631 power 0.906 0.5 -> 0.952 Inexact Rounded +pwsx4632 power 0.0906 0.5 -> 0.301 Inexact Rounded +pwsx4633 power 0.907 0.5 -> 0.952 Inexact Rounded +pwsx4634 power 0.0907 0.5 -> 0.301 Inexact Rounded +pwsx4635 power 0.908 0.5 -> 0.953 Inexact Rounded +pwsx4636 power 0.0908 0.5 -> 0.301 Inexact Rounded +pwsx4637 power 0.909 0.5 -> 0.953 Inexact Rounded +pwsx4638 power 0.0909 0.5 -> 0.301 Inexact Rounded +pwsx4639 power 0.911 0.5 -> 0.954 Inexact Rounded +pwsx4640 power 0.0911 0.5 -> 0.302 Inexact Rounded +pwsx4641 power 0.912 0.5 -> 0.955 Inexact Rounded +pwsx4642 power 0.0912 0.5 -> 0.302 Inexact Rounded +pwsx4643 power 0.913 0.5 -> 0.956 Inexact Rounded +pwsx4644 power 0.0913 0.5 -> 0.302 Inexact Rounded +pwsx4645 power 0.914 0.5 -> 0.956 Inexact Rounded +pwsx4646 power 0.0914 0.5 -> 0.302 Inexact Rounded +pwsx4647 power 0.915 0.5 -> 0.957 Inexact Rounded +pwsx4648 power 0.0915 0.5 -> 0.302 Inexact Rounded +pwsx4649 power 0.916 0.5 -> 0.957 Inexact Rounded +pwsx4650 power 0.0916 0.5 -> 0.303 Inexact Rounded +pwsx4651 power 0.917 0.5 -> 0.958 Inexact Rounded +pwsx4652 power 0.0917 0.5 -> 0.303 Inexact Rounded +pwsx4653 power 0.918 0.5 -> 0.958 Inexact Rounded +pwsx4654 power 0.0918 0.5 -> 0.303 Inexact Rounded +pwsx4655 power 0.919 0.5 -> 0.959 Inexact Rounded +pwsx4656 power 0.0919 0.5 -> 0.303 Inexact Rounded +pwsx4657 power 0.921 0.5 -> 0.960 Inexact Rounded +pwsx4658 power 0.0921 0.5 -> 0.303 Inexact Rounded +pwsx4659 power 0.922 0.5 -> 0.960 Inexact Rounded +pwsx4660 power 0.0922 0.5 -> 0.304 Inexact Rounded +pwsx4661 power 0.923 0.5 -> 0.961 Inexact Rounded +pwsx4662 power 0.0923 0.5 -> 0.304 Inexact Rounded +pwsx4663 power 0.924 0.5 -> 0.961 Inexact Rounded +pwsx4664 power 0.0924 0.5 -> 0.304 Inexact Rounded +pwsx4665 power 0.925 0.5 -> 0.962 Inexact Rounded +pwsx4666 power 0.0925 0.5 -> 0.304 Inexact Rounded +pwsx4667 power 0.926 0.5 -> 0.962 Inexact Rounded +pwsx4668 power 0.0926 0.5 -> 0.304 Inexact Rounded +pwsx4669 power 0.927 0.5 -> 0.963 Inexact Rounded +pwsx4670 power 0.0927 0.5 -> 0.304 Inexact Rounded +pwsx4671 power 0.928 0.5 -> 0.963 Inexact Rounded +pwsx4672 power 0.0928 0.5 -> 0.305 Inexact Rounded +pwsx4673 power 0.929 0.5 -> 0.964 Inexact Rounded +pwsx4674 power 0.0929 0.5 -> 0.305 Inexact Rounded +pwsx4675 power 0.931 0.5 -> 0.965 Inexact Rounded +pwsx4676 power 0.0931 0.5 -> 0.305 Inexact Rounded +pwsx4677 power 0.932 0.5 -> 0.965 Inexact Rounded +pwsx4678 power 0.0932 0.5 -> 0.305 Inexact Rounded +pwsx4679 power 0.933 0.5 -> 0.966 Inexact Rounded +pwsx4680 power 0.0933 0.5 -> 0.305 Inexact Rounded +pwsx4681 power 0.934 0.5 -> 0.966 Inexact Rounded +pwsx4682 power 0.0934 0.5 -> 0.306 Inexact Rounded +pwsx4683 power 0.935 0.5 -> 0.967 Inexact Rounded +pwsx4684 power 0.0935 0.5 -> 0.306 Inexact Rounded +pwsx4685 power 0.936 0.5 -> 0.967 Inexact Rounded +pwsx4686 power 0.0936 0.5 -> 0.306 Inexact Rounded +pwsx4687 power 0.937 0.5 -> 0.968 Inexact Rounded +pwsx4688 power 0.0937 0.5 -> 0.306 Inexact Rounded +pwsx4689 power 0.938 0.5 -> 0.969 Inexact Rounded +pwsx4690 power 0.0938 0.5 -> 0.306 Inexact Rounded +pwsx4691 power 0.939 0.5 -> 0.969 Inexact Rounded +pwsx4692 power 0.0939 0.5 -> 0.306 Inexact Rounded +pwsx4693 power 0.941 0.5 -> 0.970 Inexact Rounded +pwsx4694 power 0.0941 0.5 -> 0.307 Inexact Rounded +pwsx4695 power 0.942 0.5 -> 0.971 Inexact Rounded +pwsx4696 power 0.0942 0.5 -> 0.307 Inexact Rounded +pwsx4697 power 0.943 0.5 -> 0.971 Inexact Rounded +pwsx4698 power 0.0943 0.5 -> 0.307 Inexact Rounded +pwsx4699 power 0.944 0.5 -> 0.972 Inexact Rounded +pwsx4700 power 0.0944 0.5 -> 0.307 Inexact Rounded +pwsx4701 power 0.945 0.5 -> 0.972 Inexact Rounded +pwsx4702 power 0.0945 0.5 -> 0.307 Inexact Rounded +pwsx4703 power 0.946 0.5 -> 0.973 Inexact Rounded +pwsx4704 power 0.0946 0.5 -> 0.308 Inexact Rounded +pwsx4705 power 0.947 0.5 -> 0.973 Inexact Rounded +pwsx4706 power 0.0947 0.5 -> 0.308 Inexact Rounded +pwsx4707 power 0.948 0.5 -> 0.974 Inexact Rounded +pwsx4708 power 0.0948 0.5 -> 0.308 Inexact Rounded +pwsx4709 power 0.949 0.5 -> 0.974 Inexact Rounded +pwsx4710 power 0.0949 0.5 -> 0.308 Inexact Rounded +pwsx4711 power 0.951 0.5 -> 0.975 Inexact Rounded +pwsx4712 power 0.0951 0.5 -> 0.308 Inexact Rounded +pwsx4713 power 0.952 0.5 -> 0.976 Inexact Rounded +pwsx4714 power 0.0952 0.5 -> 0.309 Inexact Rounded +pwsx4715 power 0.953 0.5 -> 0.976 Inexact Rounded +pwsx4716 power 0.0953 0.5 -> 0.309 Inexact Rounded +pwsx4717 power 0.954 0.5 -> 0.977 Inexact Rounded +pwsx4718 power 0.0954 0.5 -> 0.309 Inexact Rounded +pwsx4719 power 0.955 0.5 -> 0.977 Inexact Rounded +pwsx4720 power 0.0955 0.5 -> 0.309 Inexact Rounded +pwsx4721 power 0.956 0.5 -> 0.978 Inexact Rounded +pwsx4722 power 0.0956 0.5 -> 0.309 Inexact Rounded +pwsx4723 power 0.957 0.5 -> 0.978 Inexact Rounded +pwsx4724 power 0.0957 0.5 -> 0.309 Inexact Rounded +pwsx4725 power 0.958 0.5 -> 0.979 Inexact Rounded +pwsx4726 power 0.0958 0.5 -> 0.310 Inexact Rounded +pwsx4727 power 0.959 0.5 -> 0.979 Inexact Rounded +pwsx4728 power 0.0959 0.5 -> 0.310 Inexact Rounded +pwsx4729 power 0.961 0.5 -> 0.980 Inexact Rounded +pwsx4730 power 0.0961 0.5 -> 0.310 Inexact Rounded +pwsx4731 power 0.962 0.5 -> 0.981 Inexact Rounded +pwsx4732 power 0.0962 0.5 -> 0.310 Inexact Rounded +pwsx4733 power 0.963 0.5 -> 0.981 Inexact Rounded +pwsx4734 power 0.0963 0.5 -> 0.310 Inexact Rounded +pwsx4735 power 0.964 0.5 -> 0.982 Inexact Rounded +pwsx4736 power 0.0964 0.5 -> 0.310 Inexact Rounded +pwsx4737 power 0.965 0.5 -> 0.982 Inexact Rounded +pwsx4738 power 0.0965 0.5 -> 0.311 Inexact Rounded +pwsx4739 power 0.966 0.5 -> 0.983 Inexact Rounded +pwsx4740 power 0.0966 0.5 -> 0.311 Inexact Rounded +pwsx4741 power 0.967 0.5 -> 0.983 Inexact Rounded +pwsx4742 power 0.0967 0.5 -> 0.311 Inexact Rounded +pwsx4743 power 0.968 0.5 -> 0.984 Inexact Rounded +pwsx4744 power 0.0968 0.5 -> 0.311 Inexact Rounded +pwsx4745 power 0.969 0.5 -> 0.984 Inexact Rounded +pwsx4746 power 0.0969 0.5 -> 0.311 Inexact Rounded +pwsx4747 power 0.971 0.5 -> 0.985 Inexact Rounded +pwsx4748 power 0.0971 0.5 -> 0.312 Inexact Rounded +pwsx4749 power 0.972 0.5 -> 0.986 Inexact Rounded +pwsx4750 power 0.0972 0.5 -> 0.312 Inexact Rounded +pwsx4751 power 0.973 0.5 -> 0.986 Inexact Rounded +pwsx4752 power 0.0973 0.5 -> 0.312 Inexact Rounded +pwsx4753 power 0.974 0.5 -> 0.987 Inexact Rounded +pwsx4754 power 0.0974 0.5 -> 0.312 Inexact Rounded +pwsx4755 power 0.975 0.5 -> 0.987 Inexact Rounded +pwsx4756 power 0.0975 0.5 -> 0.312 Inexact Rounded +pwsx4757 power 0.976 0.5 -> 0.988 Inexact Rounded +pwsx4758 power 0.0976 0.5 -> 0.312 Inexact Rounded +pwsx4759 power 0.977 0.5 -> 0.988 Inexact Rounded +pwsx4760 power 0.0977 0.5 -> 0.313 Inexact Rounded +pwsx4761 power 0.978 0.5 -> 0.989 Inexact Rounded +pwsx4762 power 0.0978 0.5 -> 0.313 Inexact Rounded +pwsx4763 power 0.979 0.5 -> 0.989 Inexact Rounded +pwsx4764 power 0.0979 0.5 -> 0.313 Inexact Rounded +pwsx4765 power 0.981 0.5 -> 0.990 Inexact Rounded +pwsx4766 power 0.0981 0.5 -> 0.313 Inexact Rounded +pwsx4767 power 0.982 0.5 -> 0.991 Inexact Rounded +pwsx4768 power 0.0982 0.5 -> 0.313 Inexact Rounded +pwsx4769 power 0.983 0.5 -> 0.991 Inexact Rounded +pwsx4770 power 0.0983 0.5 -> 0.314 Inexact Rounded +pwsx4771 power 0.984 0.5 -> 0.992 Inexact Rounded +pwsx4772 power 0.0984 0.5 -> 0.314 Inexact Rounded +pwsx4773 power 0.985 0.5 -> 0.992 Inexact Rounded +pwsx4774 power 0.0985 0.5 -> 0.314 Inexact Rounded +pwsx4775 power 0.986 0.5 -> 0.993 Inexact Rounded +pwsx4776 power 0.0986 0.5 -> 0.314 Inexact Rounded +pwsx4777 power 0.987 0.5 -> 0.993 Inexact Rounded +pwsx4778 power 0.0987 0.5 -> 0.314 Inexact Rounded +pwsx4779 power 0.988 0.5 -> 0.994 Inexact Rounded +pwsx4780 power 0.0988 0.5 -> 0.314 Inexact Rounded +pwsx4781 power 0.989 0.5 -> 0.994 Inexact Rounded +pwsx4782 power 0.0989 0.5 -> 0.314 Inexact Rounded +pwsx4783 power 0.991 0.5 -> 0.995 Inexact Rounded +pwsx4784 power 0.0991 0.5 -> 0.315 Inexact Rounded +pwsx4785 power 0.992 0.5 -> 0.996 Inexact Rounded +pwsx4786 power 0.0992 0.5 -> 0.315 Inexact Rounded +pwsx4787 power 0.993 0.5 -> 0.996 Inexact Rounded +pwsx4788 power 0.0993 0.5 -> 0.315 Inexact Rounded +pwsx4789 power 0.994 0.5 -> 0.997 Inexact Rounded +pwsx4790 power 0.0994 0.5 -> 0.315 Inexact Rounded +pwsx4791 power 0.995 0.5 -> 0.997 Inexact Rounded +pwsx4792 power 0.0995 0.5 -> 0.315 Inexact Rounded +pwsx4793 power 0.996 0.5 -> 0.998 Inexact Rounded +pwsx4794 power 0.0996 0.5 -> 0.316 Inexact Rounded +pwsx4795 power 0.997 0.5 -> 0.998 Inexact Rounded +pwsx4796 power 0.0997 0.5 -> 0.316 Inexact Rounded +pwsx4797 power 0.998 0.5 -> 0.999 Inexact Rounded +pwsx4798 power 0.0998 0.5 -> 0.316 Inexact Rounded +pwsx4799 power 0.999 0.5 -> 0.999 Inexact Rounded +pwsx4800 power 0.0999 0.5 -> 0.316 Inexact Rounded + +-- A group of precision 4 tests where Hull & Abrham adjustments are +-- needed in some cases (both up and down) [see Hull1985b] +rounding: half_even +maxExponent: 999 +minexponent: -999 +precision: 4 +pwsx5001 power 0.0118 0.5 -> 0.1086 Inexact Rounded +pwsx5002 power 0.119 0.5 -> 0.3450 Inexact Rounded +pwsx5003 power 0.0119 0.5 -> 0.1091 Inexact Rounded +pwsx5004 power 0.121 0.5 -> 0.3479 Inexact Rounded +pwsx5005 power 0.0121 0.5 -> 0.1100 Inexact Rounded +pwsx5006 power 0.122 0.5 -> 0.3493 Inexact Rounded +pwsx5007 power 0.0122 0.5 -> 0.1105 Inexact Rounded +pwsx5008 power 0.123 0.5 -> 0.3507 Inexact Rounded +pwsx5009 power 0.494 0.5 -> 0.7029 Inexact Rounded +pwsx5010 power 0.0669 0.5 -> 0.2587 Inexact Rounded +pwsx5011 power 0.9558 0.5 -> 0.9777 Inexact Rounded +pwsx5012 power 0.9348 0.5 -> 0.9669 Inexact Rounded +pwsx5013 power 0.9345 0.5 -> 0.9667 Inexact Rounded +pwsx5014 power 0.09345 0.5 -> 0.3057 Inexact Rounded +pwsx5015 power 0.9346 0.5 -> 0.9667 Inexact Rounded +pwsx5016 power 0.09346 0.5 -> 0.3057 Inexact Rounded +pwsx5017 power 0.9347 0.5 -> 0.9668 Inexact Rounded + +-- examples from decArith +precision: 9 +pwsx700 power 0 0.5 -> '0' +pwsx701 power -0 0.5 -> '0' +pwsx702 power 0.39 0.5 -> 0.624499800 Inexact Rounded +pwsx703 power 100 0.5 -> '10.0000000' Inexact Rounded +pwsx704 power 1.00 0.5 -> '1.00000000' Inexact Rounded +pwsx705 power 7 0.5 -> '2.64575131' Inexact Rounded +pwsx706 power 10 0.5 -> 3.16227766 Inexact Rounded + +-- some one-offs +precision: 9 +pwsx711 power 0.1 0.5 -> 0.316227766 Inexact Rounded +pwsx712 power 0.2 0.5 -> 0.447213595 Inexact Rounded +pwsx713 power 0.3 0.5 -> 0.547722558 Inexact Rounded +pwsx714 power 0.4 0.5 -> 0.632455532 Inexact Rounded +pwsx715 power 0.5 0.5 -> 0.707106781 Inexact Rounded +pwsx716 power 0.6 0.5 -> 0.774596669 Inexact Rounded +pwsx717 power 0.7 0.5 -> 0.836660027 Inexact Rounded +pwsx718 power 0.8 0.5 -> 0.894427191 Inexact Rounded +pwsx719 power 0.9 0.5 -> 0.948683298 Inexact Rounded +precision: 10 -- note no normalizatoin here +pwsx720 power +0.1 0.5 -> 0.3162277660 Inexact Rounded +precision: 11 +pwsx721 power +0.1 0.5 -> 0.31622776602 Inexact Rounded +precision: 12 +pwsx722 power +0.1 0.5 -> 0.316227766017 Inexact Rounded +precision: 9 +pwsx723 power 0.39 0.5 -> 0.624499800 Inexact Rounded +precision: 15 +pwsx724 power 0.39 0.5 -> 0.624499799839840 Inexact Rounded + +-- discussion cases +precision: 7 +pwsx731 power 9 0.5 -> 3.000000 Inexact Rounded +pwsx732 power 100 0.5 -> 10.00000 Inexact Rounded +pwsx733 power 123 0.5 -> 11.09054 Inexact Rounded +pwsx734 power 144 0.5 -> 12.00000 Inexact Rounded +pwsx735 power 156 0.5 -> 12.49000 Inexact Rounded +pwsx736 power 10000 0.5 -> 100.0000 Inexact Rounded + +-- values close to overflow (if there were input rounding) +maxexponent: 99 +minexponent: -99 +precision: 5 +pwsx760 power 9.9997E+99 0.5 -> 9.9998E+49 Inexact Rounded +pwsx761 power 9.9998E+99 0.5 -> 9.9999E+49 Inexact Rounded +pwsx762 power 9.9999E+99 0.5 -> 9.9999E+49 Inexact Rounded +pwsx763 power 9.99991E+99 0.5 -> 1.0000E+50 Inexact Rounded +pwsx764 power 9.99994E+99 0.5 -> 1.0000E+50 Inexact Rounded +pwsx765 power 9.99995E+99 0.5 -> 1.0000E+50 Inexact Rounded +pwsx766 power 9.99999E+99 0.5 -> 1.0000E+50 Inexact Rounded +precision: 9 +pwsx770 power 9.9997E+99 0.5 -> 9.99985000E+49 Inexact Rounded +pwsx771 power 9.9998E+99 0.5 -> 9.99990000E+49 Inexact Rounded +pwsx772 power 9.9999E+99 0.5 -> 9.99995000E+49 Inexact Rounded +pwsx773 power 9.99991E+99 0.5 -> 9.99995500E+49 Inexact Rounded +pwsx774 power 9.99994E+99 0.5 -> 9.99997000E+49 Inexact Rounded +pwsx775 power 9.99995E+99 0.5 -> 9.99997500E+49 Inexact Rounded +pwsx776 power 9.99999E+99 0.5 -> 9.99999500E+49 Inexact Rounded +precision: 20 +pwsx780 power 9.9997E+99 0.5 -> '9.9998499988749831247E+49' Inexact Rounded +pwsx781 power 9.9998E+99 0.5 -> '9.9998999994999949999E+49' Inexact Rounded +pwsx782 power 9.9999E+99 0.5 -> '9.9999499998749993750E+49' Inexact Rounded +pwsx783 power 9.99991E+99 0.5 -> '9.9999549998987495444E+49' Inexact Rounded +pwsx784 power 9.99994E+99 0.5 -> '9.9999699999549998650E+49' Inexact Rounded +pwsx785 power 9.99995E+99 0.5 -> '9.9999749999687499219E+49' Inexact Rounded +pwsx786 power 9.99999E+99 0.5 -> '9.9999949999987499994E+49' Inexact Rounded + +-- subnormals and underflows [these can only result when eMax is < digits+1] +-- Etiny = -(Emax + (precision-1)) +-- start with subnormal operands and normal results +maxexponent: 9 +minexponent: -9 +precision: 9 -- Etiny=-17 +pwsx800 power 1E-17 0.5 -> 3.16227766E-9 Inexact Rounded +pwsx801 power 10E-17 0.5 -> 1.00000000E-8 Inexact Rounded +precision: 10 -- Etiny=-18 +pwsx802 power 10E-18 0.5 -> 3.162277660E-9 Inexact Rounded +pwsx803 power 1E-18 0.5 -> 1.000000000E-9 Inexact Rounded + +precision: 11 -- Etiny=-19 +pwsx804 power 1E-19 0.5 -> 3.162277660E-10 Underflow Subnormal Inexact Rounded +-- The next test should be skipped for decNumber +pwsx805 power 10E-19 0.5 -> 1.0000000000E-9 Inexact Rounded +precision: 12 -- Etiny=-20 +pwsx806 power 10E-20 0.5 -> 3.1622776602E-10 Underflow Subnormal Inexact Rounded +pwsx807 power 1E-20 0.5 -> 1.0000000000E-10 Underflow Subnormal Inexact Rounded + +precision: 13 -- Etiny=-21 +pwsx808 power 1E-21 0.5 -> 3.1622776602E-11 Underflow Subnormal Inexact Rounded +pwsx809 power 10E-21 0.5 -> 1.00000000000E-10 Underflow Subnormal Inexact Rounded +precision: 14 -- Etiny=-22 +pwsx810 power 1E-21 0.5 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded +pwsx811 power 10E-22 0.5 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded +pwsx812 power 1E-22 0.5 -> 1.00000000000E-11 Underflow Subnormal Inexact Rounded + + +-- special values +maxexponent: 999 +minexponent: -999 +pwsx820 power Inf 0.5 -> Infinity +pwsx821 power -Inf 0.5 -> NaN Invalid_operation +pwsx822 power NaN 0.5 -> NaN +pwsx823 power sNaN 0.5 -> NaN Invalid_operation +-- propagating NaNs +pwsx824 power sNaN123 0.5 -> NaN123 Invalid_operation +pwsx825 power -sNaN321 0.5 -> -NaN321 Invalid_operation +pwsx826 power NaN456 0.5 -> NaN456 +pwsx827 power -NaN654 0.5 -> -NaN654 +pwsx828 power NaN1 0.5 -> NaN1 + +-- Null test +pwsx900 power # 0.5 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/rotate.decTest b/Lib/test/decimaltestdata/rotate.decTest index 81ade79c220..12db8213178 100644 --- a/Lib/test/decimaltestdata/rotate.decTest +++ b/Lib/test/decimaltestdata/rotate.decTest @@ -1,247 +1,247 @@ ------------------------------------------------------------------------- --- rotate.decTest -- rotate coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -rotx001 rotate 0 0 -> 0 -rotx002 rotate 0 2 -> 0 -rotx003 rotate 1 2 -> 100 -rotx004 rotate 34 8 -> 400000003 -rotx005 rotate 1 9 -> 1 -rotx006 rotate 1 -1 -> 100000000 -rotx007 rotate 123456789 -1 -> 912345678 -rotx008 rotate 123456789 -8 -> 234567891 -rotx009 rotate 123456789 -9 -> 123456789 -rotx010 rotate 0 -2 -> 0 - --- rhs must be an integer -rotx011 rotate 1 1.5 -> NaN Invalid_operation -rotx012 rotate 1 1.0 -> NaN Invalid_operation -rotx013 rotate 1 0.1 -> NaN Invalid_operation -rotx014 rotate 1 0.0 -> NaN Invalid_operation -rotx015 rotate 1 1E+1 -> NaN Invalid_operation -rotx016 rotate 1 1E+99 -> NaN Invalid_operation -rotx017 rotate 1 Inf -> NaN Invalid_operation -rotx018 rotate 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -rotx020 rotate 1 -1000 -> NaN Invalid_operation -rotx021 rotate 1 -10 -> NaN Invalid_operation -rotx022 rotate 1 10 -> NaN Invalid_operation -rotx023 rotate 1 1000 -> NaN Invalid_operation - --- full pattern -rotx030 rotate 123456789 -9 -> 123456789 -rotx031 rotate 123456789 -8 -> 234567891 -rotx032 rotate 123456789 -7 -> 345678912 -rotx033 rotate 123456789 -6 -> 456789123 -rotx034 rotate 123456789 -5 -> 567891234 -rotx035 rotate 123456789 -4 -> 678912345 -rotx036 rotate 123456789 -3 -> 789123456 -rotx037 rotate 123456789 -2 -> 891234567 -rotx038 rotate 123456789 -1 -> 912345678 -rotx039 rotate 123456789 -0 -> 123456789 -rotx040 rotate 123456789 +0 -> 123456789 -rotx041 rotate 123456789 +1 -> 234567891 -rotx042 rotate 123456789 +2 -> 345678912 -rotx043 rotate 123456789 +3 -> 456789123 -rotx044 rotate 123456789 +4 -> 567891234 -rotx045 rotate 123456789 +5 -> 678912345 -rotx046 rotate 123456789 +6 -> 789123456 -rotx047 rotate 123456789 +7 -> 891234567 -rotx048 rotate 123456789 +8 -> 912345678 -rotx049 rotate 123456789 +9 -> 123456789 - --- zeros -rotx060 rotate 0E-10 +9 -> 0E-10 -rotx061 rotate 0E-10 -9 -> 0E-10 -rotx062 rotate 0.000 +9 -> 0.000 -rotx063 rotate 0.000 -9 -> 0.000 -rotx064 rotate 0E+10 +9 -> 0E+10 -rotx065 rotate 0E+10 -9 -> 0E+10 -rotx066 rotate -0E-10 +9 -> -0E-10 -rotx067 rotate -0E-10 -9 -> -0E-10 -rotx068 rotate -0.000 +9 -> -0.000 -rotx069 rotate -0.000 -9 -> -0.000 -rotx070 rotate -0E+10 +9 -> -0E+10 -rotx071 rotate -0E+10 -9 -> -0E+10 - --- Nmax, Nmin, Ntiny -rotx141 rotate 9.99999999E+999 -1 -> 9.99999999E+999 -rotx142 rotate 9.99999999E+999 -8 -> 9.99999999E+999 -rotx143 rotate 9.99999999E+999 1 -> 9.99999999E+999 -rotx144 rotate 9.99999999E+999 8 -> 9.99999999E+999 -rotx145 rotate 1E-999 -1 -> 1.00000000E-991 -rotx146 rotate 1E-999 -8 -> 1.0E-998 -rotx147 rotate 1E-999 1 -> 1.0E-998 -rotx148 rotate 1E-999 8 -> 1.00000000E-991 -rotx151 rotate 1.00000000E-999 -1 -> 1.0000000E-1000 -rotx152 rotate 1.00000000E-999 -8 -> 1E-1007 -rotx153 rotate 1.00000000E-999 1 -> 1E-1007 -rotx154 rotate 1.00000000E-999 8 -> 1.0000000E-1000 -rotx155 rotate 9.00000000E-999 -1 -> 9.0000000E-1000 -rotx156 rotate 9.00000000E-999 -8 -> 9E-1007 -rotx157 rotate 9.00000000E-999 1 -> 9E-1007 -rotx158 rotate 9.00000000E-999 8 -> 9.0000000E-1000 -rotx160 rotate 1E-1007 -1 -> 1.00000000E-999 -rotx161 rotate 1E-1007 -8 -> 1.0E-1006 -rotx162 rotate 1E-1007 1 -> 1.0E-1006 -rotx163 rotate 1E-1007 8 -> 1.00000000E-999 --- negatives -rotx171 rotate -9.99999999E+999 -1 -> -9.99999999E+999 -rotx172 rotate -9.99999999E+999 -8 -> -9.99999999E+999 -rotx173 rotate -9.99999999E+999 1 -> -9.99999999E+999 -rotx174 rotate -9.99999999E+999 8 -> -9.99999999E+999 -rotx175 rotate -1E-999 -1 -> -1.00000000E-991 -rotx176 rotate -1E-999 -8 -> -1.0E-998 -rotx177 rotate -1E-999 1 -> -1.0E-998 -rotx178 rotate -1E-999 8 -> -1.00000000E-991 -rotx181 rotate -1.00000000E-999 -1 -> -1.0000000E-1000 -rotx182 rotate -1.00000000E-999 -8 -> -1E-1007 -rotx183 rotate -1.00000000E-999 1 -> -1E-1007 -rotx184 rotate -1.00000000E-999 8 -> -1.0000000E-1000 -rotx185 rotate -9.00000000E-999 -1 -> -9.0000000E-1000 -rotx186 rotate -9.00000000E-999 -8 -> -9E-1007 -rotx187 rotate -9.00000000E-999 1 -> -9E-1007 -rotx188 rotate -9.00000000E-999 8 -> -9.0000000E-1000 -rotx190 rotate -1E-1007 -1 -> -1.00000000E-999 -rotx191 rotate -1E-1007 -8 -> -1.0E-1006 -rotx192 rotate -1E-1007 1 -> -1.0E-1006 -rotx193 rotate -1E-1007 8 -> -1.00000000E-999 - --- more negatives (of sanities) -rotx201 rotate -0 0 -> -0 -rotx202 rotate -0 2 -> -0 -rotx203 rotate -1 2 -> -100 -rotx204 rotate -1 8 -> -100000000 -rotx205 rotate -1 9 -> -1 -rotx206 rotate -1 -1 -> -100000000 -rotx207 rotate -123456789 -1 -> -912345678 -rotx208 rotate -123456789 -8 -> -234567891 -rotx209 rotate -123456789 -9 -> -123456789 -rotx210 rotate -0 -2 -> -0 - --- Specials; NaNs are handled as usual -rotx781 rotate -Inf -8 -> -Infinity -rotx782 rotate -Inf -1 -> -Infinity -rotx783 rotate -Inf -0 -> -Infinity -rotx784 rotate -Inf 0 -> -Infinity -rotx785 rotate -Inf 1 -> -Infinity -rotx786 rotate -Inf 8 -> -Infinity -rotx787 rotate -1000 -Inf -> NaN Invalid_operation -rotx788 rotate -Inf -Inf -> NaN Invalid_operation -rotx789 rotate -1 -Inf -> NaN Invalid_operation -rotx790 rotate -0 -Inf -> NaN Invalid_operation -rotx791 rotate 0 -Inf -> NaN Invalid_operation -rotx792 rotate 1 -Inf -> NaN Invalid_operation -rotx793 rotate 1000 -Inf -> NaN Invalid_operation -rotx794 rotate Inf -Inf -> NaN Invalid_operation - -rotx800 rotate Inf -Inf -> NaN Invalid_operation -rotx801 rotate Inf -8 -> Infinity -rotx802 rotate Inf -1 -> Infinity -rotx803 rotate Inf -0 -> Infinity -rotx804 rotate Inf 0 -> Infinity -rotx805 rotate Inf 1 -> Infinity -rotx806 rotate Inf 8 -> Infinity -rotx807 rotate Inf Inf -> NaN Invalid_operation -rotx808 rotate -1000 Inf -> NaN Invalid_operation -rotx809 rotate -Inf Inf -> NaN Invalid_operation -rotx810 rotate -1 Inf -> NaN Invalid_operation -rotx811 rotate -0 Inf -> NaN Invalid_operation -rotx812 rotate 0 Inf -> NaN Invalid_operation -rotx813 rotate 1 Inf -> NaN Invalid_operation -rotx814 rotate 1000 Inf -> NaN Invalid_operation -rotx815 rotate Inf Inf -> NaN Invalid_operation - -rotx821 rotate NaN -Inf -> NaN -rotx822 rotate NaN -1000 -> NaN -rotx823 rotate NaN -1 -> NaN -rotx824 rotate NaN -0 -> NaN -rotx825 rotate NaN 0 -> NaN -rotx826 rotate NaN 1 -> NaN -rotx827 rotate NaN 1000 -> NaN -rotx828 rotate NaN Inf -> NaN -rotx829 rotate NaN NaN -> NaN -rotx830 rotate -Inf NaN -> NaN -rotx831 rotate -1000 NaN -> NaN -rotx832 rotate -1 NaN -> NaN -rotx833 rotate -0 NaN -> NaN -rotx834 rotate 0 NaN -> NaN -rotx835 rotate 1 NaN -> NaN -rotx836 rotate 1000 NaN -> NaN -rotx837 rotate Inf NaN -> NaN - - - -rotx841 rotate sNaN -Inf -> NaN Invalid_operation -rotx842 rotate sNaN -1000 -> NaN Invalid_operation -rotx843 rotate sNaN -1 -> NaN Invalid_operation -rotx844 rotate sNaN -0 -> NaN Invalid_operation -rotx845 rotate sNaN 0 -> NaN Invalid_operation -rotx846 rotate sNaN 1 -> NaN Invalid_operation -rotx847 rotate sNaN 1000 -> NaN Invalid_operation -rotx848 rotate sNaN NaN -> NaN Invalid_operation -rotx849 rotate sNaN sNaN -> NaN Invalid_operation -rotx850 rotate NaN sNaN -> NaN Invalid_operation -rotx851 rotate -Inf sNaN -> NaN Invalid_operation -rotx852 rotate -1000 sNaN -> NaN Invalid_operation -rotx853 rotate -1 sNaN -> NaN Invalid_operation -rotx854 rotate -0 sNaN -> NaN Invalid_operation -rotx855 rotate 0 sNaN -> NaN Invalid_operation -rotx856 rotate 1 sNaN -> NaN Invalid_operation -rotx857 rotate 1000 sNaN -> NaN Invalid_operation -rotx858 rotate Inf sNaN -> NaN Invalid_operation -rotx859 rotate NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -rotx861 rotate NaN1 -Inf -> NaN1 -rotx862 rotate +NaN2 -1000 -> NaN2 -rotx863 rotate NaN3 1000 -> NaN3 -rotx864 rotate NaN4 Inf -> NaN4 -rotx865 rotate NaN5 +NaN6 -> NaN5 -rotx866 rotate -Inf NaN7 -> NaN7 -rotx867 rotate -1000 NaN8 -> NaN8 -rotx868 rotate 1000 NaN9 -> NaN9 -rotx869 rotate Inf +NaN10 -> NaN10 -rotx871 rotate sNaN11 -Inf -> NaN11 Invalid_operation -rotx872 rotate sNaN12 -1000 -> NaN12 Invalid_operation -rotx873 rotate sNaN13 1000 -> NaN13 Invalid_operation -rotx874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation -rotx875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation -rotx876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation -rotx877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation -rotx878 rotate -1000 sNaN21 -> NaN21 Invalid_operation -rotx879 rotate 1000 sNaN22 -> NaN22 Invalid_operation -rotx880 rotate Inf sNaN23 -> NaN23 Invalid_operation -rotx881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation -rotx882 rotate -NaN26 NaN28 -> -NaN26 -rotx883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation -rotx884 rotate 1000 -NaN30 -> -NaN30 -rotx885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation - --- payload decapitate -precision: 5 -rotx886 rotate 11 -sNaN1234567890 -> -NaN67890 Invalid_operation +------------------------------------------------------------------------ +-- rotate.decTest -- rotate coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +rotx001 rotate 0 0 -> 0 +rotx002 rotate 0 2 -> 0 +rotx003 rotate 1 2 -> 100 +rotx004 rotate 34 8 -> 400000003 +rotx005 rotate 1 9 -> 1 +rotx006 rotate 1 -1 -> 100000000 +rotx007 rotate 123456789 -1 -> 912345678 +rotx008 rotate 123456789 -8 -> 234567891 +rotx009 rotate 123456789 -9 -> 123456789 +rotx010 rotate 0 -2 -> 0 + +-- rhs must be an integer +rotx011 rotate 1 1.5 -> NaN Invalid_operation +rotx012 rotate 1 1.0 -> NaN Invalid_operation +rotx013 rotate 1 0.1 -> NaN Invalid_operation +rotx014 rotate 1 0.0 -> NaN Invalid_operation +rotx015 rotate 1 1E+1 -> NaN Invalid_operation +rotx016 rotate 1 1E+99 -> NaN Invalid_operation +rotx017 rotate 1 Inf -> NaN Invalid_operation +rotx018 rotate 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +rotx020 rotate 1 -1000 -> NaN Invalid_operation +rotx021 rotate 1 -10 -> NaN Invalid_operation +rotx022 rotate 1 10 -> NaN Invalid_operation +rotx023 rotate 1 1000 -> NaN Invalid_operation + +-- full pattern +rotx030 rotate 123456789 -9 -> 123456789 +rotx031 rotate 123456789 -8 -> 234567891 +rotx032 rotate 123456789 -7 -> 345678912 +rotx033 rotate 123456789 -6 -> 456789123 +rotx034 rotate 123456789 -5 -> 567891234 +rotx035 rotate 123456789 -4 -> 678912345 +rotx036 rotate 123456789 -3 -> 789123456 +rotx037 rotate 123456789 -2 -> 891234567 +rotx038 rotate 123456789 -1 -> 912345678 +rotx039 rotate 123456789 -0 -> 123456789 +rotx040 rotate 123456789 +0 -> 123456789 +rotx041 rotate 123456789 +1 -> 234567891 +rotx042 rotate 123456789 +2 -> 345678912 +rotx043 rotate 123456789 +3 -> 456789123 +rotx044 rotate 123456789 +4 -> 567891234 +rotx045 rotate 123456789 +5 -> 678912345 +rotx046 rotate 123456789 +6 -> 789123456 +rotx047 rotate 123456789 +7 -> 891234567 +rotx048 rotate 123456789 +8 -> 912345678 +rotx049 rotate 123456789 +9 -> 123456789 + +-- zeros +rotx060 rotate 0E-10 +9 -> 0E-10 +rotx061 rotate 0E-10 -9 -> 0E-10 +rotx062 rotate 0.000 +9 -> 0.000 +rotx063 rotate 0.000 -9 -> 0.000 +rotx064 rotate 0E+10 +9 -> 0E+10 +rotx065 rotate 0E+10 -9 -> 0E+10 +rotx066 rotate -0E-10 +9 -> -0E-10 +rotx067 rotate -0E-10 -9 -> -0E-10 +rotx068 rotate -0.000 +9 -> -0.000 +rotx069 rotate -0.000 -9 -> -0.000 +rotx070 rotate -0E+10 +9 -> -0E+10 +rotx071 rotate -0E+10 -9 -> -0E+10 + +-- Nmax, Nmin, Ntiny +rotx141 rotate 9.99999999E+999 -1 -> 9.99999999E+999 +rotx142 rotate 9.99999999E+999 -8 -> 9.99999999E+999 +rotx143 rotate 9.99999999E+999 1 -> 9.99999999E+999 +rotx144 rotate 9.99999999E+999 8 -> 9.99999999E+999 +rotx145 rotate 1E-999 -1 -> 1.00000000E-991 +rotx146 rotate 1E-999 -8 -> 1.0E-998 +rotx147 rotate 1E-999 1 -> 1.0E-998 +rotx148 rotate 1E-999 8 -> 1.00000000E-991 +rotx151 rotate 1.00000000E-999 -1 -> 1.0000000E-1000 +rotx152 rotate 1.00000000E-999 -8 -> 1E-1007 +rotx153 rotate 1.00000000E-999 1 -> 1E-1007 +rotx154 rotate 1.00000000E-999 8 -> 1.0000000E-1000 +rotx155 rotate 9.00000000E-999 -1 -> 9.0000000E-1000 +rotx156 rotate 9.00000000E-999 -8 -> 9E-1007 +rotx157 rotate 9.00000000E-999 1 -> 9E-1007 +rotx158 rotate 9.00000000E-999 8 -> 9.0000000E-1000 +rotx160 rotate 1E-1007 -1 -> 1.00000000E-999 +rotx161 rotate 1E-1007 -8 -> 1.0E-1006 +rotx162 rotate 1E-1007 1 -> 1.0E-1006 +rotx163 rotate 1E-1007 8 -> 1.00000000E-999 +-- negatives +rotx171 rotate -9.99999999E+999 -1 -> -9.99999999E+999 +rotx172 rotate -9.99999999E+999 -8 -> -9.99999999E+999 +rotx173 rotate -9.99999999E+999 1 -> -9.99999999E+999 +rotx174 rotate -9.99999999E+999 8 -> -9.99999999E+999 +rotx175 rotate -1E-999 -1 -> -1.00000000E-991 +rotx176 rotate -1E-999 -8 -> -1.0E-998 +rotx177 rotate -1E-999 1 -> -1.0E-998 +rotx178 rotate -1E-999 8 -> -1.00000000E-991 +rotx181 rotate -1.00000000E-999 -1 -> -1.0000000E-1000 +rotx182 rotate -1.00000000E-999 -8 -> -1E-1007 +rotx183 rotate -1.00000000E-999 1 -> -1E-1007 +rotx184 rotate -1.00000000E-999 8 -> -1.0000000E-1000 +rotx185 rotate -9.00000000E-999 -1 -> -9.0000000E-1000 +rotx186 rotate -9.00000000E-999 -8 -> -9E-1007 +rotx187 rotate -9.00000000E-999 1 -> -9E-1007 +rotx188 rotate -9.00000000E-999 8 -> -9.0000000E-1000 +rotx190 rotate -1E-1007 -1 -> -1.00000000E-999 +rotx191 rotate -1E-1007 -8 -> -1.0E-1006 +rotx192 rotate -1E-1007 1 -> -1.0E-1006 +rotx193 rotate -1E-1007 8 -> -1.00000000E-999 + +-- more negatives (of sanities) +rotx201 rotate -0 0 -> -0 +rotx202 rotate -0 2 -> -0 +rotx203 rotate -1 2 -> -100 +rotx204 rotate -1 8 -> -100000000 +rotx205 rotate -1 9 -> -1 +rotx206 rotate -1 -1 -> -100000000 +rotx207 rotate -123456789 -1 -> -912345678 +rotx208 rotate -123456789 -8 -> -234567891 +rotx209 rotate -123456789 -9 -> -123456789 +rotx210 rotate -0 -2 -> -0 + +-- Specials; NaNs are handled as usual +rotx781 rotate -Inf -8 -> -Infinity +rotx782 rotate -Inf -1 -> -Infinity +rotx783 rotate -Inf -0 -> -Infinity +rotx784 rotate -Inf 0 -> -Infinity +rotx785 rotate -Inf 1 -> -Infinity +rotx786 rotate -Inf 8 -> -Infinity +rotx787 rotate -1000 -Inf -> NaN Invalid_operation +rotx788 rotate -Inf -Inf -> NaN Invalid_operation +rotx789 rotate -1 -Inf -> NaN Invalid_operation +rotx790 rotate -0 -Inf -> NaN Invalid_operation +rotx791 rotate 0 -Inf -> NaN Invalid_operation +rotx792 rotate 1 -Inf -> NaN Invalid_operation +rotx793 rotate 1000 -Inf -> NaN Invalid_operation +rotx794 rotate Inf -Inf -> NaN Invalid_operation + +rotx800 rotate Inf -Inf -> NaN Invalid_operation +rotx801 rotate Inf -8 -> Infinity +rotx802 rotate Inf -1 -> Infinity +rotx803 rotate Inf -0 -> Infinity +rotx804 rotate Inf 0 -> Infinity +rotx805 rotate Inf 1 -> Infinity +rotx806 rotate Inf 8 -> Infinity +rotx807 rotate Inf Inf -> NaN Invalid_operation +rotx808 rotate -1000 Inf -> NaN Invalid_operation +rotx809 rotate -Inf Inf -> NaN Invalid_operation +rotx810 rotate -1 Inf -> NaN Invalid_operation +rotx811 rotate -0 Inf -> NaN Invalid_operation +rotx812 rotate 0 Inf -> NaN Invalid_operation +rotx813 rotate 1 Inf -> NaN Invalid_operation +rotx814 rotate 1000 Inf -> NaN Invalid_operation +rotx815 rotate Inf Inf -> NaN Invalid_operation + +rotx821 rotate NaN -Inf -> NaN +rotx822 rotate NaN -1000 -> NaN +rotx823 rotate NaN -1 -> NaN +rotx824 rotate NaN -0 -> NaN +rotx825 rotate NaN 0 -> NaN +rotx826 rotate NaN 1 -> NaN +rotx827 rotate NaN 1000 -> NaN +rotx828 rotate NaN Inf -> NaN +rotx829 rotate NaN NaN -> NaN +rotx830 rotate -Inf NaN -> NaN +rotx831 rotate -1000 NaN -> NaN +rotx832 rotate -1 NaN -> NaN +rotx833 rotate -0 NaN -> NaN +rotx834 rotate 0 NaN -> NaN +rotx835 rotate 1 NaN -> NaN +rotx836 rotate 1000 NaN -> NaN +rotx837 rotate Inf NaN -> NaN + + + +rotx841 rotate sNaN -Inf -> NaN Invalid_operation +rotx842 rotate sNaN -1000 -> NaN Invalid_operation +rotx843 rotate sNaN -1 -> NaN Invalid_operation +rotx844 rotate sNaN -0 -> NaN Invalid_operation +rotx845 rotate sNaN 0 -> NaN Invalid_operation +rotx846 rotate sNaN 1 -> NaN Invalid_operation +rotx847 rotate sNaN 1000 -> NaN Invalid_operation +rotx848 rotate sNaN NaN -> NaN Invalid_operation +rotx849 rotate sNaN sNaN -> NaN Invalid_operation +rotx850 rotate NaN sNaN -> NaN Invalid_operation +rotx851 rotate -Inf sNaN -> NaN Invalid_operation +rotx852 rotate -1000 sNaN -> NaN Invalid_operation +rotx853 rotate -1 sNaN -> NaN Invalid_operation +rotx854 rotate -0 sNaN -> NaN Invalid_operation +rotx855 rotate 0 sNaN -> NaN Invalid_operation +rotx856 rotate 1 sNaN -> NaN Invalid_operation +rotx857 rotate 1000 sNaN -> NaN Invalid_operation +rotx858 rotate Inf sNaN -> NaN Invalid_operation +rotx859 rotate NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +rotx861 rotate NaN1 -Inf -> NaN1 +rotx862 rotate +NaN2 -1000 -> NaN2 +rotx863 rotate NaN3 1000 -> NaN3 +rotx864 rotate NaN4 Inf -> NaN4 +rotx865 rotate NaN5 +NaN6 -> NaN5 +rotx866 rotate -Inf NaN7 -> NaN7 +rotx867 rotate -1000 NaN8 -> NaN8 +rotx868 rotate 1000 NaN9 -> NaN9 +rotx869 rotate Inf +NaN10 -> NaN10 +rotx871 rotate sNaN11 -Inf -> NaN11 Invalid_operation +rotx872 rotate sNaN12 -1000 -> NaN12 Invalid_operation +rotx873 rotate sNaN13 1000 -> NaN13 Invalid_operation +rotx874 rotate sNaN14 NaN17 -> NaN14 Invalid_operation +rotx875 rotate sNaN15 sNaN18 -> NaN15 Invalid_operation +rotx876 rotate NaN16 sNaN19 -> NaN19 Invalid_operation +rotx877 rotate -Inf +sNaN20 -> NaN20 Invalid_operation +rotx878 rotate -1000 sNaN21 -> NaN21 Invalid_operation +rotx879 rotate 1000 sNaN22 -> NaN22 Invalid_operation +rotx880 rotate Inf sNaN23 -> NaN23 Invalid_operation +rotx881 rotate +NaN25 +sNaN24 -> NaN24 Invalid_operation +rotx882 rotate -NaN26 NaN28 -> -NaN26 +rotx883 rotate -sNaN27 sNaN29 -> -NaN27 Invalid_operation +rotx884 rotate 1000 -NaN30 -> -NaN30 +rotx885 rotate 1000 -sNaN31 -> -NaN31 Invalid_operation + +-- payload decapitate +precision: 5 +rotx886 rotate 11 -sNaN1234567890 -> -NaN67890 Invalid_operation diff --git a/Lib/test/decimaltestdata/scaleb.decTest b/Lib/test/decimaltestdata/scaleb.decTest index 04a65d6eae8..372e3dd4c3e 100644 --- a/Lib/test/decimaltestdata/scaleb.decTest +++ b/Lib/test/decimaltestdata/scaleb.decTest @@ -1,209 +1,209 @@ ------------------------------------------------------------------------- --- scaleb.decTest -- scale a number by powers of 10 -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Max |rhs| is 2*(999+9) = 2016 - --- Sanity checks -scbx001 scaleb 7.50 10 -> 7.50E+10 -scbx002 scaleb 7.50 3 -> 7.50E+3 -scbx003 scaleb 7.50 2 -> 750 -scbx004 scaleb 7.50 1 -> 75.0 -scbx005 scaleb 7.50 0 -> 7.50 -scbx006 scaleb 7.50 -1 -> 0.750 -scbx007 scaleb 7.50 -2 -> 0.0750 -scbx008 scaleb 7.50 -10 -> 7.50E-10 -scbx009 scaleb -7.50 3 -> -7.50E+3 -scbx010 scaleb -7.50 2 -> -750 -scbx011 scaleb -7.50 1 -> -75.0 -scbx012 scaleb -7.50 0 -> -7.50 -scbx013 scaleb -7.50 -1 -> -0.750 - --- Infinities -scbx014 scaleb Infinity 1 -> Infinity -scbx015 scaleb -Infinity 2 -> -Infinity -scbx016 scaleb Infinity -1 -> Infinity -scbx017 scaleb -Infinity -2 -> -Infinity - --- Next two are somewhat undefined in 754r; treat as non-integer -scbx018 scaleb 10 Infinity -> NaN Invalid_operation -scbx019 scaleb 10 -Infinity -> NaN Invalid_operation - --- NaNs are undefined in 754r; assume usual processing --- NaNs, 0 payload -scbx021 scaleb NaN 1 -> NaN -scbx022 scaleb -NaN -1 -> -NaN -scbx023 scaleb sNaN 1 -> NaN Invalid_operation -scbx024 scaleb -sNaN 1 -> -NaN Invalid_operation -scbx025 scaleb 4 NaN -> NaN -scbx026 scaleb -Inf -NaN -> -NaN -scbx027 scaleb 4 sNaN -> NaN Invalid_operation -scbx028 scaleb Inf -sNaN -> -NaN Invalid_operation - --- non-integer RHS -scbx030 scaleb 1.23 1 -> 12.3 -scbx031 scaleb 1.23 1.00 -> NaN Invalid_operation -scbx032 scaleb 1.23 1.1 -> NaN Invalid_operation -scbx033 scaleb 1.23 1.01 -> NaN Invalid_operation -scbx034 scaleb 1.23 0.01 -> NaN Invalid_operation -scbx035 scaleb 1.23 0.11 -> NaN Invalid_operation -scbx036 scaleb 1.23 0.999999999 -> NaN Invalid_operation -scbx037 scaleb 1.23 -1 -> 0.123 -scbx038 scaleb 1.23 -1.00 -> NaN Invalid_operation -scbx039 scaleb 1.23 -1.1 -> NaN Invalid_operation -scbx040 scaleb 1.23 -1.01 -> NaN Invalid_operation -scbx041 scaleb 1.23 -0.01 -> NaN Invalid_operation -scbx042 scaleb 1.23 -0.11 -> NaN Invalid_operation -scbx043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation -scbx044 scaleb 1.23 0.1 -> NaN Invalid_operation -scbx045 scaleb 1.23 1E+1 -> NaN Invalid_operation -scbx046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation -scbx047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation - - -scbx120 scaleb 1.23 2015 -> Infinity Overflow Inexact Rounded -scbx121 scaleb 1.23 2016 -> Infinity Overflow Inexact Rounded -scbx122 scaleb 1.23 2017 -> NaN Invalid_operation -scbx123 scaleb 1.23 2018 -> NaN Invalid_operation -scbx124 scaleb 1.23 -2015 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped -scbx125 scaleb 1.23 -2016 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped -scbx126 scaleb 1.23 -2017 -> NaN Invalid_operation -scbx127 scaleb 1.23 -2018 -> NaN Invalid_operation - --- NaNs, non-0 payload --- propagating NaNs -scbx861 scaleb NaN01 -Inf -> NaN1 -scbx862 scaleb -NaN02 -1000 -> -NaN2 -scbx863 scaleb NaN03 1000 -> NaN3 -scbx864 scaleb NaN04 Inf -> NaN4 -scbx865 scaleb NaN05 NaN61 -> NaN5 -scbx866 scaleb -Inf -NaN71 -> -NaN71 -scbx867 scaleb -1000 NaN81 -> NaN81 -scbx868 scaleb 1000 NaN91 -> NaN91 -scbx869 scaleb Inf NaN101 -> NaN101 -scbx871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation -scbx872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation -scbx873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation -scbx874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation -scbx875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation -scbx876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation -scbx877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation -scbx878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation -scbx879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation -scbx880 scaleb Inf sNaN231 -> NaN231 Invalid_operation -scbx881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation - --- finites -scbx051 scaleb 7 -2 -> 0.07 -scbx052 scaleb -7 -2 -> -0.07 -scbx053 scaleb 75 -2 -> 0.75 -scbx054 scaleb -75 -2 -> -0.75 -scbx055 scaleb 7.50 -2 -> 0.0750 -scbx056 scaleb -7.50 -2 -> -0.0750 -scbx057 scaleb 7.500 -2 -> 0.07500 -scbx058 scaleb -7.500 -2 -> -0.07500 -scbx061 scaleb 7 -1 -> 0.7 -scbx062 scaleb -7 -1 -> -0.7 -scbx063 scaleb 75 -1 -> 7.5 -scbx064 scaleb -75 -1 -> -7.5 -scbx065 scaleb 7.50 -1 -> 0.750 -scbx066 scaleb -7.50 -1 -> -0.750 -scbx067 scaleb 7.500 -1 -> 0.7500 -scbx068 scaleb -7.500 -1 -> -0.7500 -scbx071 scaleb 7 0 -> 7 -scbx072 scaleb -7 0 -> -7 -scbx073 scaleb 75 0 -> 75 -scbx074 scaleb -75 0 -> -75 -scbx075 scaleb 7.50 0 -> 7.50 -scbx076 scaleb -7.50 0 -> -7.50 -scbx077 scaleb 7.500 0 -> 7.500 -scbx078 scaleb -7.500 0 -> -7.500 -scbx081 scaleb 7 1 -> 7E+1 -scbx082 scaleb -7 1 -> -7E+1 -scbx083 scaleb 75 1 -> 7.5E+2 -scbx084 scaleb -75 1 -> -7.5E+2 -scbx085 scaleb 7.50 1 -> 75.0 -scbx086 scaleb -7.50 1 -> -75.0 -scbx087 scaleb 7.500 1 -> 75.00 -scbx088 scaleb -7.500 1 -> -75.00 -scbx091 scaleb 7 2 -> 7E+2 -scbx092 scaleb -7 2 -> -7E+2 -scbx093 scaleb 75 2 -> 7.5E+3 -scbx094 scaleb -75 2 -> -7.5E+3 -scbx095 scaleb 7.50 2 -> 750 -scbx096 scaleb -7.50 2 -> -750 -scbx097 scaleb 7.500 2 -> 750.0 -scbx098 scaleb -7.500 2 -> -750.0 - --- zeros -scbx111 scaleb 0 1 -> 0E+1 -scbx112 scaleb -0 2 -> -0E+2 -scbx113 scaleb 0E+4 3 -> 0E+7 -scbx114 scaleb -0E+4 4 -> -0E+8 -scbx115 scaleb 0.0000 5 -> 0E+1 -scbx116 scaleb -0.0000 6 -> -0E+2 -scbx117 scaleb 0E-141 7 -> 0E-134 -scbx118 scaleb -0E-141 8 -> -0E-133 - --- Nmax, Nmin, Ntiny -scbx132 scaleb 9.99999999E+999 +999 -> Infinity Overflow Inexact Rounded -scbx133 scaleb 9.99999999E+999 +10 -> Infinity Overflow Inexact Rounded -scbx134 scaleb 9.99999999E+999 +1 -> Infinity Overflow Inexact Rounded -scbx135 scaleb 9.99999999E+999 0 -> 9.99999999E+999 -scbx136 scaleb 9.99999999E+999 -1 -> 9.99999999E+998 -scbx137 scaleb 1E-999 +1 -> 1E-998 -scbx138 scaleb 1E-999 -0 -> 1E-999 -scbx139 scaleb 1E-999 -1 -> 1E-1000 Subnormal -scbx140 scaleb 1.00000000E-999 +1 -> 1.00000000E-998 -scbx141 scaleb 1.00000000E-999 0 -> 1.00000000E-999 -scbx142 scaleb 1.00000000E-999 -1 -> 1.0000000E-1000 Subnormal Rounded -scbx143 scaleb 1E-1007 +1 -> 1E-1006 Subnormal -scbx144 scaleb 1E-1007 -0 -> 1E-1007 Subnormal -scbx145 scaleb 1E-1007 -1 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped - -scbx150 scaleb -1E-1007 +1 -> -1E-1006 Subnormal -scbx151 scaleb -1E-1007 -0 -> -1E-1007 Subnormal -scbx152 scaleb -1E-1007 -1 -> -0E-1007 Underflow Subnormal Inexact Rounded Clamped -scbx153 scaleb -1.00000000E-999 +1 -> -1.00000000E-998 -scbx154 scaleb -1.00000000E-999 +0 -> -1.00000000E-999 -scbx155 scaleb -1.00000000E-999 -1 -> -1.0000000E-1000 Subnormal Rounded -scbx156 scaleb -1E-999 +1 -> -1E-998 -scbx157 scaleb -1E-999 -0 -> -1E-999 -scbx158 scaleb -1E-999 -1 -> -1E-1000 Subnormal -scbx159 scaleb -9.99999999E+999 +1 -> -Infinity Overflow Inexact Rounded -scbx160 scaleb -9.99999999E+999 +0 -> -9.99999999E+999 -scbx161 scaleb -9.99999999E+999 -1 -> -9.99999999E+998 -scbx162 scaleb -9E+999 +1 -> -Infinity Overflow Inexact Rounded -scbx163 scaleb -1E+999 +1 -> -Infinity Overflow Inexact Rounded - --- Krah examples -precision: 34 -maxExponent: 999999999 -minExponent: -999999999 --- integer overflow in 3.61 or earlier -scbx164 scaleb 1E-999999999 -1200000000 -> NaN Invalid_operation --- out of range -scbx165 scaleb -1E-999999999 +1200000000 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- scaleb.decTest -- scale a number by powers of 10 -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Max |rhs| is 2*(999+9) = 2016 + +-- Sanity checks +scbx001 scaleb 7.50 10 -> 7.50E+10 +scbx002 scaleb 7.50 3 -> 7.50E+3 +scbx003 scaleb 7.50 2 -> 750 +scbx004 scaleb 7.50 1 -> 75.0 +scbx005 scaleb 7.50 0 -> 7.50 +scbx006 scaleb 7.50 -1 -> 0.750 +scbx007 scaleb 7.50 -2 -> 0.0750 +scbx008 scaleb 7.50 -10 -> 7.50E-10 +scbx009 scaleb -7.50 3 -> -7.50E+3 +scbx010 scaleb -7.50 2 -> -750 +scbx011 scaleb -7.50 1 -> -75.0 +scbx012 scaleb -7.50 0 -> -7.50 +scbx013 scaleb -7.50 -1 -> -0.750 + +-- Infinities +scbx014 scaleb Infinity 1 -> Infinity +scbx015 scaleb -Infinity 2 -> -Infinity +scbx016 scaleb Infinity -1 -> Infinity +scbx017 scaleb -Infinity -2 -> -Infinity + +-- Next two are somewhat undefined in 754r; treat as non-integer +scbx018 scaleb 10 Infinity -> NaN Invalid_operation +scbx019 scaleb 10 -Infinity -> NaN Invalid_operation + +-- NaNs are undefined in 754r; assume usual processing +-- NaNs, 0 payload +scbx021 scaleb NaN 1 -> NaN +scbx022 scaleb -NaN -1 -> -NaN +scbx023 scaleb sNaN 1 -> NaN Invalid_operation +scbx024 scaleb -sNaN 1 -> -NaN Invalid_operation +scbx025 scaleb 4 NaN -> NaN +scbx026 scaleb -Inf -NaN -> -NaN +scbx027 scaleb 4 sNaN -> NaN Invalid_operation +scbx028 scaleb Inf -sNaN -> -NaN Invalid_operation + +-- non-integer RHS +scbx030 scaleb 1.23 1 -> 12.3 +scbx031 scaleb 1.23 1.00 -> NaN Invalid_operation +scbx032 scaleb 1.23 1.1 -> NaN Invalid_operation +scbx033 scaleb 1.23 1.01 -> NaN Invalid_operation +scbx034 scaleb 1.23 0.01 -> NaN Invalid_operation +scbx035 scaleb 1.23 0.11 -> NaN Invalid_operation +scbx036 scaleb 1.23 0.999999999 -> NaN Invalid_operation +scbx037 scaleb 1.23 -1 -> 0.123 +scbx038 scaleb 1.23 -1.00 -> NaN Invalid_operation +scbx039 scaleb 1.23 -1.1 -> NaN Invalid_operation +scbx040 scaleb 1.23 -1.01 -> NaN Invalid_operation +scbx041 scaleb 1.23 -0.01 -> NaN Invalid_operation +scbx042 scaleb 1.23 -0.11 -> NaN Invalid_operation +scbx043 scaleb 1.23 -0.999999999 -> NaN Invalid_operation +scbx044 scaleb 1.23 0.1 -> NaN Invalid_operation +scbx045 scaleb 1.23 1E+1 -> NaN Invalid_operation +scbx046 scaleb 1.23 1.1234E+6 -> NaN Invalid_operation +scbx047 scaleb 1.23 1.123E+4 -> NaN Invalid_operation + + +scbx120 scaleb 1.23 2015 -> Infinity Overflow Inexact Rounded +scbx121 scaleb 1.23 2016 -> Infinity Overflow Inexact Rounded +scbx122 scaleb 1.23 2017 -> NaN Invalid_operation +scbx123 scaleb 1.23 2018 -> NaN Invalid_operation +scbx124 scaleb 1.23 -2015 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped +scbx125 scaleb 1.23 -2016 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped +scbx126 scaleb 1.23 -2017 -> NaN Invalid_operation +scbx127 scaleb 1.23 -2018 -> NaN Invalid_operation + +-- NaNs, non-0 payload +-- propagating NaNs +scbx861 scaleb NaN01 -Inf -> NaN1 +scbx862 scaleb -NaN02 -1000 -> -NaN2 +scbx863 scaleb NaN03 1000 -> NaN3 +scbx864 scaleb NaN04 Inf -> NaN4 +scbx865 scaleb NaN05 NaN61 -> NaN5 +scbx866 scaleb -Inf -NaN71 -> -NaN71 +scbx867 scaleb -1000 NaN81 -> NaN81 +scbx868 scaleb 1000 NaN91 -> NaN91 +scbx869 scaleb Inf NaN101 -> NaN101 +scbx871 scaleb sNaN011 -Inf -> NaN11 Invalid_operation +scbx872 scaleb sNaN012 -1000 -> NaN12 Invalid_operation +scbx873 scaleb -sNaN013 1000 -> -NaN13 Invalid_operation +scbx874 scaleb sNaN014 NaN171 -> NaN14 Invalid_operation +scbx875 scaleb sNaN015 sNaN181 -> NaN15 Invalid_operation +scbx876 scaleb NaN016 sNaN191 -> NaN191 Invalid_operation +scbx877 scaleb -Inf sNaN201 -> NaN201 Invalid_operation +scbx878 scaleb -1000 sNaN211 -> NaN211 Invalid_operation +scbx879 scaleb 1000 -sNaN221 -> -NaN221 Invalid_operation +scbx880 scaleb Inf sNaN231 -> NaN231 Invalid_operation +scbx881 scaleb NaN025 sNaN241 -> NaN241 Invalid_operation + +-- finites +scbx051 scaleb 7 -2 -> 0.07 +scbx052 scaleb -7 -2 -> -0.07 +scbx053 scaleb 75 -2 -> 0.75 +scbx054 scaleb -75 -2 -> -0.75 +scbx055 scaleb 7.50 -2 -> 0.0750 +scbx056 scaleb -7.50 -2 -> -0.0750 +scbx057 scaleb 7.500 -2 -> 0.07500 +scbx058 scaleb -7.500 -2 -> -0.07500 +scbx061 scaleb 7 -1 -> 0.7 +scbx062 scaleb -7 -1 -> -0.7 +scbx063 scaleb 75 -1 -> 7.5 +scbx064 scaleb -75 -1 -> -7.5 +scbx065 scaleb 7.50 -1 -> 0.750 +scbx066 scaleb -7.50 -1 -> -0.750 +scbx067 scaleb 7.500 -1 -> 0.7500 +scbx068 scaleb -7.500 -1 -> -0.7500 +scbx071 scaleb 7 0 -> 7 +scbx072 scaleb -7 0 -> -7 +scbx073 scaleb 75 0 -> 75 +scbx074 scaleb -75 0 -> -75 +scbx075 scaleb 7.50 0 -> 7.50 +scbx076 scaleb -7.50 0 -> -7.50 +scbx077 scaleb 7.500 0 -> 7.500 +scbx078 scaleb -7.500 0 -> -7.500 +scbx081 scaleb 7 1 -> 7E+1 +scbx082 scaleb -7 1 -> -7E+1 +scbx083 scaleb 75 1 -> 7.5E+2 +scbx084 scaleb -75 1 -> -7.5E+2 +scbx085 scaleb 7.50 1 -> 75.0 +scbx086 scaleb -7.50 1 -> -75.0 +scbx087 scaleb 7.500 1 -> 75.00 +scbx088 scaleb -7.500 1 -> -75.00 +scbx091 scaleb 7 2 -> 7E+2 +scbx092 scaleb -7 2 -> -7E+2 +scbx093 scaleb 75 2 -> 7.5E+3 +scbx094 scaleb -75 2 -> -7.5E+3 +scbx095 scaleb 7.50 2 -> 750 +scbx096 scaleb -7.50 2 -> -750 +scbx097 scaleb 7.500 2 -> 750.0 +scbx098 scaleb -7.500 2 -> -750.0 + +-- zeros +scbx111 scaleb 0 1 -> 0E+1 +scbx112 scaleb -0 2 -> -0E+2 +scbx113 scaleb 0E+4 3 -> 0E+7 +scbx114 scaleb -0E+4 4 -> -0E+8 +scbx115 scaleb 0.0000 5 -> 0E+1 +scbx116 scaleb -0.0000 6 -> -0E+2 +scbx117 scaleb 0E-141 7 -> 0E-134 +scbx118 scaleb -0E-141 8 -> -0E-133 + +-- Nmax, Nmin, Ntiny +scbx132 scaleb 9.99999999E+999 +999 -> Infinity Overflow Inexact Rounded +scbx133 scaleb 9.99999999E+999 +10 -> Infinity Overflow Inexact Rounded +scbx134 scaleb 9.99999999E+999 +1 -> Infinity Overflow Inexact Rounded +scbx135 scaleb 9.99999999E+999 0 -> 9.99999999E+999 +scbx136 scaleb 9.99999999E+999 -1 -> 9.99999999E+998 +scbx137 scaleb 1E-999 +1 -> 1E-998 +scbx138 scaleb 1E-999 -0 -> 1E-999 +scbx139 scaleb 1E-999 -1 -> 1E-1000 Subnormal +scbx140 scaleb 1.00000000E-999 +1 -> 1.00000000E-998 +scbx141 scaleb 1.00000000E-999 0 -> 1.00000000E-999 +scbx142 scaleb 1.00000000E-999 -1 -> 1.0000000E-1000 Subnormal Rounded +scbx143 scaleb 1E-1007 +1 -> 1E-1006 Subnormal +scbx144 scaleb 1E-1007 -0 -> 1E-1007 Subnormal +scbx145 scaleb 1E-1007 -1 -> 0E-1007 Underflow Subnormal Inexact Rounded Clamped + +scbx150 scaleb -1E-1007 +1 -> -1E-1006 Subnormal +scbx151 scaleb -1E-1007 -0 -> -1E-1007 Subnormal +scbx152 scaleb -1E-1007 -1 -> -0E-1007 Underflow Subnormal Inexact Rounded Clamped +scbx153 scaleb -1.00000000E-999 +1 -> -1.00000000E-998 +scbx154 scaleb -1.00000000E-999 +0 -> -1.00000000E-999 +scbx155 scaleb -1.00000000E-999 -1 -> -1.0000000E-1000 Subnormal Rounded +scbx156 scaleb -1E-999 +1 -> -1E-998 +scbx157 scaleb -1E-999 -0 -> -1E-999 +scbx158 scaleb -1E-999 -1 -> -1E-1000 Subnormal +scbx159 scaleb -9.99999999E+999 +1 -> -Infinity Overflow Inexact Rounded +scbx160 scaleb -9.99999999E+999 +0 -> -9.99999999E+999 +scbx161 scaleb -9.99999999E+999 -1 -> -9.99999999E+998 +scbx162 scaleb -9E+999 +1 -> -Infinity Overflow Inexact Rounded +scbx163 scaleb -1E+999 +1 -> -Infinity Overflow Inexact Rounded + +-- Krah examples +precision: 34 +maxExponent: 999999999 +minExponent: -999999999 +-- integer overflow in 3.61 or earlier +scbx164 scaleb 1E-999999999 -1200000000 -> NaN Invalid_operation +-- out of range +scbx165 scaleb -1E-999999999 +1200000000 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/shift.decTest b/Lib/test/decimaltestdata/shift.decTest index 78838cc10d3..3fac72f722e 100644 --- a/Lib/test/decimaltestdata/shift.decTest +++ b/Lib/test/decimaltestdata/shift.decTest @@ -1,250 +1,250 @@ ------------------------------------------------------------------------- --- shift.decTest -- shift coefficient left or right -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check -shix001 shift 0 0 -> 0 -shix002 shift 0 2 -> 0 -shix003 shift 1 2 -> 100 -shix004 shift 1 8 -> 100000000 -shix005 shift 1 9 -> 0 -shix006 shift 1 -1 -> 0 -shix007 shift 123456789 -1 -> 12345678 -shix008 shift 123456789 -8 -> 1 -shix009 shift 123456789 -9 -> 0 -shix010 shift 0 -2 -> 0 - --- rhs must be an integer -shix011 shift 1 1.5 -> NaN Invalid_operation -shix012 shift 1 1.0 -> NaN Invalid_operation -shix013 shift 1 0.1 -> NaN Invalid_operation -shix014 shift 1 0.0 -> NaN Invalid_operation -shix015 shift 1 1E+1 -> NaN Invalid_operation -shix016 shift 1 1E+99 -> NaN Invalid_operation -shix017 shift 1 Inf -> NaN Invalid_operation -shix018 shift 1 -Inf -> NaN Invalid_operation --- and |rhs| <= precision -shix020 shift 1 -1000 -> NaN Invalid_operation -shix021 shift 1 -10 -> NaN Invalid_operation -shix022 shift 1 10 -> NaN Invalid_operation -shix023 shift 1 1000 -> NaN Invalid_operation - --- full shifting pattern -shix030 shift 123456789 -9 -> 0 -shix031 shift 123456789 -8 -> 1 -shix032 shift 123456789 -7 -> 12 -shix033 shift 123456789 -6 -> 123 -shix034 shift 123456789 -5 -> 1234 -shix035 shift 123456789 -4 -> 12345 -shix036 shift 123456789 -3 -> 123456 -shix037 shift 123456789 -2 -> 1234567 -shix038 shift 123456789 -1 -> 12345678 -shix039 shift 123456789 -0 -> 123456789 -shix040 shift 123456789 +0 -> 123456789 -shix041 shift 123456789 +1 -> 234567890 -shix042 shift 123456789 +2 -> 345678900 -shix043 shift 123456789 +3 -> 456789000 -shix044 shift 123456789 +4 -> 567890000 -shix045 shift 123456789 +5 -> 678900000 -shix046 shift 123456789 +6 -> 789000000 -shix047 shift 123456789 +7 -> 890000000 -shix048 shift 123456789 +8 -> 900000000 -shix049 shift 123456789 +9 -> 0 - --- from examples -shix051 shift 34 8 -> '400000000' -shix052 shift 12 9 -> '0' -shix053 shift 123456789 -2 -> '1234567' -shix054 shift 123456789 0 -> '123456789' -shix055 shift 123456789 +2 -> '345678900' - --- zeros -shix060 shift 0E-10 +9 -> 0E-10 -shix061 shift 0E-10 -9 -> 0E-10 -shix062 shift 0.000 +9 -> 0.000 -shix063 shift 0.000 -9 -> 0.000 -shix064 shift 0E+10 +9 -> 0E+10 -shix065 shift 0E+10 -9 -> 0E+10 -shix066 shift -0E-10 +9 -> -0E-10 -shix067 shift -0E-10 -9 -> -0E-10 -shix068 shift -0.000 +9 -> -0.000 -shix069 shift -0.000 -9 -> -0.000 -shix070 shift -0E+10 +9 -> -0E+10 -shix071 shift -0E+10 -9 -> -0E+10 - --- Nmax, Nmin, Ntiny -shix141 shift 9.99999999E+999 -1 -> 9.9999999E+998 -shix142 shift 9.99999999E+999 -8 -> 9E+991 -shix143 shift 9.99999999E+999 1 -> 9.99999990E+999 -shix144 shift 9.99999999E+999 8 -> 9.00000000E+999 -shix145 shift 1E-999 -1 -> 0E-999 -shix146 shift 1E-999 -8 -> 0E-999 -shix147 shift 1E-999 1 -> 1.0E-998 -shix148 shift 1E-999 8 -> 1.00000000E-991 -shix151 shift 1.00000000E-999 -1 -> 1.0000000E-1000 -shix152 shift 1.00000000E-999 -8 -> 1E-1007 -shix153 shift 1.00000000E-999 1 -> 0E-1007 -shix154 shift 1.00000000E-999 8 -> 0E-1007 -shix155 shift 9.00000000E-999 -1 -> 9.0000000E-1000 -shix156 shift 9.00000000E-999 -8 -> 9E-1007 -shix157 shift 9.00000000E-999 1 -> 0E-1007 -shix158 shift 9.00000000E-999 8 -> 0E-1007 -shix160 shift 1E-1007 -1 -> 0E-1007 -shix161 shift 1E-1007 -8 -> 0E-1007 -shix162 shift 1E-1007 1 -> 1.0E-1006 -shix163 shift 1E-1007 8 -> 1.00000000E-999 --- negatives -shix171 shift -9.99999999E+999 -1 -> -9.9999999E+998 -shix172 shift -9.99999999E+999 -8 -> -9E+991 -shix173 shift -9.99999999E+999 1 -> -9.99999990E+999 -shix174 shift -9.99999999E+999 8 -> -9.00000000E+999 -shix175 shift -1E-999 -1 -> -0E-999 -shix176 shift -1E-999 -8 -> -0E-999 -shix177 shift -1E-999 1 -> -1.0E-998 -shix178 shift -1E-999 8 -> -1.00000000E-991 -shix181 shift -1.00000000E-999 -1 -> -1.0000000E-1000 -shix182 shift -1.00000000E-999 -8 -> -1E-1007 -shix183 shift -1.00000000E-999 1 -> -0E-1007 -shix184 shift -1.00000000E-999 8 -> -0E-1007 -shix185 shift -9.00000000E-999 -1 -> -9.0000000E-1000 -shix186 shift -9.00000000E-999 -8 -> -9E-1007 -shix187 shift -9.00000000E-999 1 -> -0E-1007 -shix188 shift -9.00000000E-999 8 -> -0E-1007 -shix190 shift -1E-1007 -1 -> -0E-1007 -shix191 shift -1E-1007 -8 -> -0E-1007 -shix192 shift -1E-1007 1 -> -1.0E-1006 -shix193 shift -1E-1007 8 -> -1.00000000E-999 - --- more negatives (of sanities) -shix201 shift -0 0 -> -0 -shix202 shift -0 2 -> -0 -shix203 shift -1 2 -> -100 -shix204 shift -1 8 -> -100000000 -shix205 shift -1 9 -> -0 -shix206 shift -1 -1 -> -0 -shix207 shift -123456789 -1 -> -12345678 -shix208 shift -123456789 -8 -> -1 -shix209 shift -123456789 -9 -> -0 -shix210 shift -0 -2 -> -0 -shix211 shift -0 -0 -> -0 - - --- Specials; NaNs are handled as usual -shix781 shift -Inf -8 -> -Infinity -shix782 shift -Inf -1 -> -Infinity -shix783 shift -Inf -0 -> -Infinity -shix784 shift -Inf 0 -> -Infinity -shix785 shift -Inf 1 -> -Infinity -shix786 shift -Inf 8 -> -Infinity -shix787 shift -1000 -Inf -> NaN Invalid_operation -shix788 shift -Inf -Inf -> NaN Invalid_operation -shix789 shift -1 -Inf -> NaN Invalid_operation -shix790 shift -0 -Inf -> NaN Invalid_operation -shix791 shift 0 -Inf -> NaN Invalid_operation -shix792 shift 1 -Inf -> NaN Invalid_operation -shix793 shift 1000 -Inf -> NaN Invalid_operation -shix794 shift Inf -Inf -> NaN Invalid_operation - -shix800 shift Inf -Inf -> NaN Invalid_operation -shix801 shift Inf -8 -> Infinity -shix802 shift Inf -1 -> Infinity -shix803 shift Inf -0 -> Infinity -shix804 shift Inf 0 -> Infinity -shix805 shift Inf 1 -> Infinity -shix806 shift Inf 8 -> Infinity -shix807 shift Inf Inf -> NaN Invalid_operation -shix808 shift -1000 Inf -> NaN Invalid_operation -shix809 shift -Inf Inf -> NaN Invalid_operation -shix810 shift -1 Inf -> NaN Invalid_operation -shix811 shift -0 Inf -> NaN Invalid_operation -shix812 shift 0 Inf -> NaN Invalid_operation -shix813 shift 1 Inf -> NaN Invalid_operation -shix814 shift 1000 Inf -> NaN Invalid_operation -shix815 shift Inf Inf -> NaN Invalid_operation - -shix821 shift NaN -Inf -> NaN -shix822 shift NaN -1000 -> NaN -shix823 shift NaN -1 -> NaN -shix824 shift NaN -0 -> NaN -shix825 shift NaN 0 -> NaN -shix826 shift NaN 1 -> NaN -shix827 shift NaN 1000 -> NaN -shix828 shift NaN Inf -> NaN -shix829 shift NaN NaN -> NaN -shix830 shift -Inf NaN -> NaN -shix831 shift -1000 NaN -> NaN -shix832 shift -1 NaN -> NaN -shix833 shift -0 NaN -> NaN -shix834 shift 0 NaN -> NaN -shix835 shift 1 NaN -> NaN -shix836 shift 1000 NaN -> NaN -shix837 shift Inf NaN -> NaN - -shix841 shift sNaN -Inf -> NaN Invalid_operation -shix842 shift sNaN -1000 -> NaN Invalid_operation -shix843 shift sNaN -1 -> NaN Invalid_operation -shix844 shift sNaN -0 -> NaN Invalid_operation -shix845 shift sNaN 0 -> NaN Invalid_operation -shix846 shift sNaN 1 -> NaN Invalid_operation -shix847 shift sNaN 1000 -> NaN Invalid_operation -shix848 shift sNaN NaN -> NaN Invalid_operation -shix849 shift sNaN sNaN -> NaN Invalid_operation -shix850 shift NaN sNaN -> NaN Invalid_operation -shix851 shift -Inf sNaN -> NaN Invalid_operation -shix852 shift -1000 sNaN -> NaN Invalid_operation -shix853 shift -1 sNaN -> NaN Invalid_operation -shix854 shift -0 sNaN -> NaN Invalid_operation -shix855 shift 0 sNaN -> NaN Invalid_operation -shix856 shift 1 sNaN -> NaN Invalid_operation -shix857 shift 1000 sNaN -> NaN Invalid_operation -shix858 shift Inf sNaN -> NaN Invalid_operation -shix859 shift NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -shix861 shift NaN1 -Inf -> NaN1 -shix862 shift +NaN2 -1000 -> NaN2 -shix863 shift NaN3 1000 -> NaN3 -shix864 shift NaN4 Inf -> NaN4 -shix865 shift NaN5 +NaN6 -> NaN5 -shix866 shift -Inf NaN7 -> NaN7 -shix867 shift -1000 NaN8 -> NaN8 -shix868 shift 1000 NaN9 -> NaN9 -shix869 shift Inf +NaN10 -> NaN10 -shix871 shift sNaN11 -Inf -> NaN11 Invalid_operation -shix872 shift sNaN12 -1000 -> NaN12 Invalid_operation -shix873 shift sNaN13 1000 -> NaN13 Invalid_operation -shix874 shift sNaN14 NaN17 -> NaN14 Invalid_operation -shix875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation -shix876 shift NaN16 sNaN19 -> NaN19 Invalid_operation -shix877 shift -Inf +sNaN20 -> NaN20 Invalid_operation -shix878 shift -1000 sNaN21 -> NaN21 Invalid_operation -shix879 shift 1000 sNaN22 -> NaN22 Invalid_operation -shix880 shift Inf sNaN23 -> NaN23 Invalid_operation -shix881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation -shix882 shift -NaN26 NaN28 -> -NaN26 -shix883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation -shix884 shift 1000 -NaN30 -> -NaN30 -shix885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation +------------------------------------------------------------------------ +-- shift.decTest -- shift coefficient left or right -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check +shix001 shift 0 0 -> 0 +shix002 shift 0 2 -> 0 +shix003 shift 1 2 -> 100 +shix004 shift 1 8 -> 100000000 +shix005 shift 1 9 -> 0 +shix006 shift 1 -1 -> 0 +shix007 shift 123456789 -1 -> 12345678 +shix008 shift 123456789 -8 -> 1 +shix009 shift 123456789 -9 -> 0 +shix010 shift 0 -2 -> 0 + +-- rhs must be an integer +shix011 shift 1 1.5 -> NaN Invalid_operation +shix012 shift 1 1.0 -> NaN Invalid_operation +shix013 shift 1 0.1 -> NaN Invalid_operation +shix014 shift 1 0.0 -> NaN Invalid_operation +shix015 shift 1 1E+1 -> NaN Invalid_operation +shix016 shift 1 1E+99 -> NaN Invalid_operation +shix017 shift 1 Inf -> NaN Invalid_operation +shix018 shift 1 -Inf -> NaN Invalid_operation +-- and |rhs| <= precision +shix020 shift 1 -1000 -> NaN Invalid_operation +shix021 shift 1 -10 -> NaN Invalid_operation +shix022 shift 1 10 -> NaN Invalid_operation +shix023 shift 1 1000 -> NaN Invalid_operation + +-- full shifting pattern +shix030 shift 123456789 -9 -> 0 +shix031 shift 123456789 -8 -> 1 +shix032 shift 123456789 -7 -> 12 +shix033 shift 123456789 -6 -> 123 +shix034 shift 123456789 -5 -> 1234 +shix035 shift 123456789 -4 -> 12345 +shix036 shift 123456789 -3 -> 123456 +shix037 shift 123456789 -2 -> 1234567 +shix038 shift 123456789 -1 -> 12345678 +shix039 shift 123456789 -0 -> 123456789 +shix040 shift 123456789 +0 -> 123456789 +shix041 shift 123456789 +1 -> 234567890 +shix042 shift 123456789 +2 -> 345678900 +shix043 shift 123456789 +3 -> 456789000 +shix044 shift 123456789 +4 -> 567890000 +shix045 shift 123456789 +5 -> 678900000 +shix046 shift 123456789 +6 -> 789000000 +shix047 shift 123456789 +7 -> 890000000 +shix048 shift 123456789 +8 -> 900000000 +shix049 shift 123456789 +9 -> 0 + +-- from examples +shix051 shift 34 8 -> '400000000' +shix052 shift 12 9 -> '0' +shix053 shift 123456789 -2 -> '1234567' +shix054 shift 123456789 0 -> '123456789' +shix055 shift 123456789 +2 -> '345678900' + +-- zeros +shix060 shift 0E-10 +9 -> 0E-10 +shix061 shift 0E-10 -9 -> 0E-10 +shix062 shift 0.000 +9 -> 0.000 +shix063 shift 0.000 -9 -> 0.000 +shix064 shift 0E+10 +9 -> 0E+10 +shix065 shift 0E+10 -9 -> 0E+10 +shix066 shift -0E-10 +9 -> -0E-10 +shix067 shift -0E-10 -9 -> -0E-10 +shix068 shift -0.000 +9 -> -0.000 +shix069 shift -0.000 -9 -> -0.000 +shix070 shift -0E+10 +9 -> -0E+10 +shix071 shift -0E+10 -9 -> -0E+10 + +-- Nmax, Nmin, Ntiny +shix141 shift 9.99999999E+999 -1 -> 9.9999999E+998 +shix142 shift 9.99999999E+999 -8 -> 9E+991 +shix143 shift 9.99999999E+999 1 -> 9.99999990E+999 +shix144 shift 9.99999999E+999 8 -> 9.00000000E+999 +shix145 shift 1E-999 -1 -> 0E-999 +shix146 shift 1E-999 -8 -> 0E-999 +shix147 shift 1E-999 1 -> 1.0E-998 +shix148 shift 1E-999 8 -> 1.00000000E-991 +shix151 shift 1.00000000E-999 -1 -> 1.0000000E-1000 +shix152 shift 1.00000000E-999 -8 -> 1E-1007 +shix153 shift 1.00000000E-999 1 -> 0E-1007 +shix154 shift 1.00000000E-999 8 -> 0E-1007 +shix155 shift 9.00000000E-999 -1 -> 9.0000000E-1000 +shix156 shift 9.00000000E-999 -8 -> 9E-1007 +shix157 shift 9.00000000E-999 1 -> 0E-1007 +shix158 shift 9.00000000E-999 8 -> 0E-1007 +shix160 shift 1E-1007 -1 -> 0E-1007 +shix161 shift 1E-1007 -8 -> 0E-1007 +shix162 shift 1E-1007 1 -> 1.0E-1006 +shix163 shift 1E-1007 8 -> 1.00000000E-999 +-- negatives +shix171 shift -9.99999999E+999 -1 -> -9.9999999E+998 +shix172 shift -9.99999999E+999 -8 -> -9E+991 +shix173 shift -9.99999999E+999 1 -> -9.99999990E+999 +shix174 shift -9.99999999E+999 8 -> -9.00000000E+999 +shix175 shift -1E-999 -1 -> -0E-999 +shix176 shift -1E-999 -8 -> -0E-999 +shix177 shift -1E-999 1 -> -1.0E-998 +shix178 shift -1E-999 8 -> -1.00000000E-991 +shix181 shift -1.00000000E-999 -1 -> -1.0000000E-1000 +shix182 shift -1.00000000E-999 -8 -> -1E-1007 +shix183 shift -1.00000000E-999 1 -> -0E-1007 +shix184 shift -1.00000000E-999 8 -> -0E-1007 +shix185 shift -9.00000000E-999 -1 -> -9.0000000E-1000 +shix186 shift -9.00000000E-999 -8 -> -9E-1007 +shix187 shift -9.00000000E-999 1 -> -0E-1007 +shix188 shift -9.00000000E-999 8 -> -0E-1007 +shix190 shift -1E-1007 -1 -> -0E-1007 +shix191 shift -1E-1007 -8 -> -0E-1007 +shix192 shift -1E-1007 1 -> -1.0E-1006 +shix193 shift -1E-1007 8 -> -1.00000000E-999 + +-- more negatives (of sanities) +shix201 shift -0 0 -> -0 +shix202 shift -0 2 -> -0 +shix203 shift -1 2 -> -100 +shix204 shift -1 8 -> -100000000 +shix205 shift -1 9 -> -0 +shix206 shift -1 -1 -> -0 +shix207 shift -123456789 -1 -> -12345678 +shix208 shift -123456789 -8 -> -1 +shix209 shift -123456789 -9 -> -0 +shix210 shift -0 -2 -> -0 +shix211 shift -0 -0 -> -0 + + +-- Specials; NaNs are handled as usual +shix781 shift -Inf -8 -> -Infinity +shix782 shift -Inf -1 -> -Infinity +shix783 shift -Inf -0 -> -Infinity +shix784 shift -Inf 0 -> -Infinity +shix785 shift -Inf 1 -> -Infinity +shix786 shift -Inf 8 -> -Infinity +shix787 shift -1000 -Inf -> NaN Invalid_operation +shix788 shift -Inf -Inf -> NaN Invalid_operation +shix789 shift -1 -Inf -> NaN Invalid_operation +shix790 shift -0 -Inf -> NaN Invalid_operation +shix791 shift 0 -Inf -> NaN Invalid_operation +shix792 shift 1 -Inf -> NaN Invalid_operation +shix793 shift 1000 -Inf -> NaN Invalid_operation +shix794 shift Inf -Inf -> NaN Invalid_operation + +shix800 shift Inf -Inf -> NaN Invalid_operation +shix801 shift Inf -8 -> Infinity +shix802 shift Inf -1 -> Infinity +shix803 shift Inf -0 -> Infinity +shix804 shift Inf 0 -> Infinity +shix805 shift Inf 1 -> Infinity +shix806 shift Inf 8 -> Infinity +shix807 shift Inf Inf -> NaN Invalid_operation +shix808 shift -1000 Inf -> NaN Invalid_operation +shix809 shift -Inf Inf -> NaN Invalid_operation +shix810 shift -1 Inf -> NaN Invalid_operation +shix811 shift -0 Inf -> NaN Invalid_operation +shix812 shift 0 Inf -> NaN Invalid_operation +shix813 shift 1 Inf -> NaN Invalid_operation +shix814 shift 1000 Inf -> NaN Invalid_operation +shix815 shift Inf Inf -> NaN Invalid_operation + +shix821 shift NaN -Inf -> NaN +shix822 shift NaN -1000 -> NaN +shix823 shift NaN -1 -> NaN +shix824 shift NaN -0 -> NaN +shix825 shift NaN 0 -> NaN +shix826 shift NaN 1 -> NaN +shix827 shift NaN 1000 -> NaN +shix828 shift NaN Inf -> NaN +shix829 shift NaN NaN -> NaN +shix830 shift -Inf NaN -> NaN +shix831 shift -1000 NaN -> NaN +shix832 shift -1 NaN -> NaN +shix833 shift -0 NaN -> NaN +shix834 shift 0 NaN -> NaN +shix835 shift 1 NaN -> NaN +shix836 shift 1000 NaN -> NaN +shix837 shift Inf NaN -> NaN + +shix841 shift sNaN -Inf -> NaN Invalid_operation +shix842 shift sNaN -1000 -> NaN Invalid_operation +shix843 shift sNaN -1 -> NaN Invalid_operation +shix844 shift sNaN -0 -> NaN Invalid_operation +shix845 shift sNaN 0 -> NaN Invalid_operation +shix846 shift sNaN 1 -> NaN Invalid_operation +shix847 shift sNaN 1000 -> NaN Invalid_operation +shix848 shift sNaN NaN -> NaN Invalid_operation +shix849 shift sNaN sNaN -> NaN Invalid_operation +shix850 shift NaN sNaN -> NaN Invalid_operation +shix851 shift -Inf sNaN -> NaN Invalid_operation +shix852 shift -1000 sNaN -> NaN Invalid_operation +shix853 shift -1 sNaN -> NaN Invalid_operation +shix854 shift -0 sNaN -> NaN Invalid_operation +shix855 shift 0 sNaN -> NaN Invalid_operation +shix856 shift 1 sNaN -> NaN Invalid_operation +shix857 shift 1000 sNaN -> NaN Invalid_operation +shix858 shift Inf sNaN -> NaN Invalid_operation +shix859 shift NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +shix861 shift NaN1 -Inf -> NaN1 +shix862 shift +NaN2 -1000 -> NaN2 +shix863 shift NaN3 1000 -> NaN3 +shix864 shift NaN4 Inf -> NaN4 +shix865 shift NaN5 +NaN6 -> NaN5 +shix866 shift -Inf NaN7 -> NaN7 +shix867 shift -1000 NaN8 -> NaN8 +shix868 shift 1000 NaN9 -> NaN9 +shix869 shift Inf +NaN10 -> NaN10 +shix871 shift sNaN11 -Inf -> NaN11 Invalid_operation +shix872 shift sNaN12 -1000 -> NaN12 Invalid_operation +shix873 shift sNaN13 1000 -> NaN13 Invalid_operation +shix874 shift sNaN14 NaN17 -> NaN14 Invalid_operation +shix875 shift sNaN15 sNaN18 -> NaN15 Invalid_operation +shix876 shift NaN16 sNaN19 -> NaN19 Invalid_operation +shix877 shift -Inf +sNaN20 -> NaN20 Invalid_operation +shix878 shift -1000 sNaN21 -> NaN21 Invalid_operation +shix879 shift 1000 sNaN22 -> NaN22 Invalid_operation +shix880 shift Inf sNaN23 -> NaN23 Invalid_operation +shix881 shift +NaN25 +sNaN24 -> NaN24 Invalid_operation +shix882 shift -NaN26 NaN28 -> -NaN26 +shix883 shift -sNaN27 sNaN29 -> -NaN27 Invalid_operation +shix884 shift 1000 -NaN30 -> -NaN30 +shix885 shift 1000 -sNaN31 -> -NaN31 Invalid_operation diff --git a/Lib/test/decimaltestdata/tointegralx.decTest b/Lib/test/decimaltestdata/tointegralx.decTest index e250e3a06ea..0ce0d0935e1 100644 --- a/Lib/test/decimaltestdata/tointegralx.decTest +++ b/Lib/test/decimaltestdata/tointegralx.decTest @@ -1,255 +1,255 @@ ------------------------------------------------------------------------- --- tointegralx.decTest -- round decimal to integral value, exact -- --- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - --- This set of tests tests the extended specification 'round-to-integral --- value' operation (from IEEE 854, later modified in 754r). --- All non-zero results are defined as being those from either copy or --- quantize, so those are assumed to have been tested. - --- This tests toIntegraExact, which may set Inexact - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - -intxx001 tointegralx 0 -> 0 -intxx002 tointegralx 0.0 -> 0 -intxx003 tointegralx 0.1 -> 0 Inexact Rounded -intxx004 tointegralx 0.2 -> 0 Inexact Rounded -intxx005 tointegralx 0.3 -> 0 Inexact Rounded -intxx006 tointegralx 0.4 -> 0 Inexact Rounded -intxx007 tointegralx 0.5 -> 1 Inexact Rounded -intxx008 tointegralx 0.6 -> 1 Inexact Rounded -intxx009 tointegralx 0.7 -> 1 Inexact Rounded -intxx010 tointegralx 0.8 -> 1 Inexact Rounded -intxx011 tointegralx 0.9 -> 1 Inexact Rounded -intxx012 tointegralx 1 -> 1 -intxx013 tointegralx 1.0 -> 1 Rounded -intxx014 tointegralx 1.1 -> 1 Inexact Rounded -intxx015 tointegralx 1.2 -> 1 Inexact Rounded -intxx016 tointegralx 1.3 -> 1 Inexact Rounded -intxx017 tointegralx 1.4 -> 1 Inexact Rounded -intxx018 tointegralx 1.5 -> 2 Inexact Rounded -intxx019 tointegralx 1.6 -> 2 Inexact Rounded -intxx020 tointegralx 1.7 -> 2 Inexact Rounded -intxx021 tointegralx 1.8 -> 2 Inexact Rounded -intxx022 tointegralx 1.9 -> 2 Inexact Rounded --- negatives -intxx031 tointegralx -0 -> -0 -intxx032 tointegralx -0.0 -> -0 -intxx033 tointegralx -0.1 -> -0 Inexact Rounded -intxx034 tointegralx -0.2 -> -0 Inexact Rounded -intxx035 tointegralx -0.3 -> -0 Inexact Rounded -intxx036 tointegralx -0.4 -> -0 Inexact Rounded -intxx037 tointegralx -0.5 -> -1 Inexact Rounded -intxx038 tointegralx -0.6 -> -1 Inexact Rounded -intxx039 tointegralx -0.7 -> -1 Inexact Rounded -intxx040 tointegralx -0.8 -> -1 Inexact Rounded -intxx041 tointegralx -0.9 -> -1 Inexact Rounded -intxx042 tointegralx -1 -> -1 -intxx043 tointegralx -1.0 -> -1 Rounded -intxx044 tointegralx -1.1 -> -1 Inexact Rounded -intxx045 tointegralx -1.2 -> -1 Inexact Rounded -intxx046 tointegralx -1.3 -> -1 Inexact Rounded -intxx047 tointegralx -1.4 -> -1 Inexact Rounded -intxx048 tointegralx -1.5 -> -2 Inexact Rounded -intxx049 tointegralx -1.6 -> -2 Inexact Rounded -intxx050 tointegralx -1.7 -> -2 Inexact Rounded -intxx051 tointegralx -1.8 -> -2 Inexact Rounded -intxx052 tointegralx -1.9 -> -2 Inexact Rounded --- next two would be NaN using quantize(x, 0) -intxx053 tointegralx 10E+30 -> 1.0E+31 -intxx054 tointegralx -10E+30 -> -1.0E+31 - --- numbers around precision -precision: 9 -intxx060 tointegralx '56267E-10' -> '0' Inexact Rounded -intxx061 tointegralx '56267E-5' -> '1' Inexact Rounded -intxx062 tointegralx '56267E-2' -> '563' Inexact Rounded -intxx063 tointegralx '56267E-1' -> '5627' Inexact Rounded -intxx065 tointegralx '56267E-0' -> '56267' -intxx066 tointegralx '56267E+0' -> '56267' -intxx067 tointegralx '56267E+1' -> '5.6267E+5' -intxx068 tointegralx '56267E+2' -> '5.6267E+6' -intxx069 tointegralx '56267E+3' -> '5.6267E+7' -intxx070 tointegralx '56267E+4' -> '5.6267E+8' -intxx071 tointegralx '56267E+5' -> '5.6267E+9' -intxx072 tointegralx '56267E+6' -> '5.6267E+10' -intxx073 tointegralx '1.23E+96' -> '1.23E+96' -intxx074 tointegralx '1.23E+384' -> '1.23E+384' -intxx075 tointegralx '1.23E+999' -> '1.23E+999' - -intxx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded -intxx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded -intxx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded -intxx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded -intxx085 tointegralx '-56267E-0' -> '-56267' -intxx086 tointegralx '-56267E+0' -> '-56267' -intxx087 tointegralx '-56267E+1' -> '-5.6267E+5' -intxx088 tointegralx '-56267E+2' -> '-5.6267E+6' -intxx089 tointegralx '-56267E+3' -> '-5.6267E+7' -intxx090 tointegralx '-56267E+4' -> '-5.6267E+8' -intxx091 tointegralx '-56267E+5' -> '-5.6267E+9' -intxx092 tointegralx '-56267E+6' -> '-5.6267E+10' -intxx093 tointegralx '-1.23E+96' -> '-1.23E+96' -intxx094 tointegralx '-1.23E+384' -> '-1.23E+384' -intxx095 tointegralx '-1.23E+999' -> '-1.23E+999' - --- subnormal inputs -intxx100 tointegralx 1E-999 -> 0 Inexact Rounded -intxx101 tointegralx 0.1E-999 -> 0 Inexact Rounded -intxx102 tointegralx 0.01E-999 -> 0 Inexact Rounded -intxx103 tointegralx 0E-999 -> 0 - --- specials and zeros -intxx120 tointegralx 'Inf' -> Infinity -intxx121 tointegralx '-Inf' -> -Infinity -intxx122 tointegralx NaN -> NaN -intxx123 tointegralx sNaN -> NaN Invalid_operation -intxx124 tointegralx 0 -> 0 -intxx125 tointegralx -0 -> -0 -intxx126 tointegralx 0.000 -> 0 -intxx127 tointegralx 0.00 -> 0 -intxx128 tointegralx 0.0 -> 0 -intxx129 tointegralx 0 -> 0 -intxx130 tointegralx 0E-3 -> 0 -intxx131 tointegralx 0E-2 -> 0 -intxx132 tointegralx 0E-1 -> 0 -intxx133 tointegralx 0E-0 -> 0 -intxx134 tointegralx 0E+1 -> 0E+1 -intxx135 tointegralx 0E+2 -> 0E+2 -intxx136 tointegralx 0E+3 -> 0E+3 -intxx137 tointegralx 0E+4 -> 0E+4 -intxx138 tointegralx 0E+5 -> 0E+5 -intxx139 tointegralx -0.000 -> -0 -intxx140 tointegralx -0.00 -> -0 -intxx141 tointegralx -0.0 -> -0 -intxx142 tointegralx -0 -> -0 -intxx143 tointegralx -0E-3 -> -0 -intxx144 tointegralx -0E-2 -> -0 -intxx145 tointegralx -0E-1 -> -0 -intxx146 tointegralx -0E-0 -> -0 -intxx147 tointegralx -0E+1 -> -0E+1 -intxx148 tointegralx -0E+2 -> -0E+2 -intxx149 tointegralx -0E+3 -> -0E+3 -intxx150 tointegralx -0E+4 -> -0E+4 -intxx151 tointegralx -0E+5 -> -0E+5 --- propagating NaNs -intxx152 tointegralx NaN808 -> NaN808 -intxx153 tointegralx sNaN080 -> NaN80 Invalid_operation -intxx154 tointegralx -NaN808 -> -NaN808 -intxx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation -intxx156 tointegralx -NaN -> -NaN -intxx157 tointegralx -sNaN -> -NaN Invalid_operation - --- examples -rounding: half_up -precision: 9 -intxx200 tointegralx 2.1 -> 2 Inexact Rounded -intxx201 tointegralx 100 -> 100 -intxx202 tointegralx 100.0 -> 100 Rounded -intxx203 tointegralx 101.5 -> 102 Inexact Rounded -intxx204 tointegralx -101.5 -> -102 Inexact Rounded -intxx205 tointegralx 10E+5 -> 1.0E+6 -intxx206 tointegralx 7.89E+77 -> 7.89E+77 -intxx207 tointegralx -Inf -> -Infinity - - --- all rounding modes -rounding: half_even - -intxx210 tointegralx 55.5 -> 56 Inexact Rounded -intxx211 tointegralx 56.5 -> 56 Inexact Rounded -intxx212 tointegralx 57.5 -> 58 Inexact Rounded -intxx213 tointegralx -55.5 -> -56 Inexact Rounded -intxx214 tointegralx -56.5 -> -56 Inexact Rounded -intxx215 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_up - -intxx220 tointegralx 55.5 -> 56 Inexact Rounded -intxx221 tointegralx 56.5 -> 57 Inexact Rounded -intxx222 tointegralx 57.5 -> 58 Inexact Rounded -intxx223 tointegralx -55.5 -> -56 Inexact Rounded -intxx224 tointegralx -56.5 -> -57 Inexact Rounded -intxx225 tointegralx -57.5 -> -58 Inexact Rounded - -rounding: half_down - -intxx230 tointegralx 55.5 -> 55 Inexact Rounded -intxx231 tointegralx 56.5 -> 56 Inexact Rounded -intxx232 tointegralx 57.5 -> 57 Inexact Rounded -intxx233 tointegralx -55.5 -> -55 Inexact Rounded -intxx234 tointegralx -56.5 -> -56 Inexact Rounded -intxx235 tointegralx -57.5 -> -57 Inexact Rounded - -rounding: up - -intxx240 tointegralx 55.3 -> 56 Inexact Rounded -intxx241 tointegralx 56.3 -> 57 Inexact Rounded -intxx242 tointegralx 57.3 -> 58 Inexact Rounded -intxx243 tointegralx -55.3 -> -56 Inexact Rounded -intxx244 tointegralx -56.3 -> -57 Inexact Rounded -intxx245 tointegralx -57.3 -> -58 Inexact Rounded - -rounding: down - -intxx250 tointegralx 55.7 -> 55 Inexact Rounded -intxx251 tointegralx 56.7 -> 56 Inexact Rounded -intxx252 tointegralx 57.7 -> 57 Inexact Rounded -intxx253 tointegralx -55.7 -> -55 Inexact Rounded -intxx254 tointegralx -56.7 -> -56 Inexact Rounded -intxx255 tointegralx -57.7 -> -57 Inexact Rounded - -rounding: ceiling - -intxx260 tointegralx 55.3 -> 56 Inexact Rounded -intxx261 tointegralx 56.3 -> 57 Inexact Rounded -intxx262 tointegralx 57.3 -> 58 Inexact Rounded -intxx263 tointegralx -55.3 -> -55 Inexact Rounded -intxx264 tointegralx -56.3 -> -56 Inexact Rounded -intxx265 tointegralx -57.3 -> -57 Inexact Rounded - -rounding: floor - -intxx270 tointegralx 55.7 -> 55 Inexact Rounded -intxx271 tointegralx 56.7 -> 56 Inexact Rounded -intxx272 tointegralx 57.7 -> 57 Inexact Rounded -intxx273 tointegralx -55.7 -> -56 Inexact Rounded -intxx274 tointegralx -56.7 -> -57 Inexact Rounded -intxx275 tointegralx -57.7 -> -58 Inexact Rounded - --- Int and uInt32 edge values for testing conversions -precision: 16 -intxx300 tointegralx -2147483646 -> -2147483646 -intxx301 tointegralx -2147483647 -> -2147483647 -intxx302 tointegralx -2147483648 -> -2147483648 -intxx303 tointegralx -2147483649 -> -2147483649 -intxx304 tointegralx 2147483646 -> 2147483646 -intxx305 tointegralx 2147483647 -> 2147483647 -intxx306 tointegralx 2147483648 -> 2147483648 -intxx307 tointegralx 2147483649 -> 2147483649 -intxx308 tointegralx 4294967294 -> 4294967294 -intxx309 tointegralx 4294967295 -> 4294967295 -intxx310 tointegralx 4294967296 -> 4294967296 -intxx311 tointegralx 4294967297 -> 4294967297 +------------------------------------------------------------------------ +-- tointegralx.decTest -- round decimal to integral value, exact -- +-- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +-- This set of tests tests the extended specification 'round-to-integral +-- value' operation (from IEEE 854, later modified in 754r). +-- All non-zero results are defined as being those from either copy or +-- quantize, so those are assumed to have been tested. + +-- This tests toIntegraExact, which may set Inexact + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +intxx001 tointegralx 0 -> 0 +intxx002 tointegralx 0.0 -> 0 +intxx003 tointegralx 0.1 -> 0 Inexact Rounded +intxx004 tointegralx 0.2 -> 0 Inexact Rounded +intxx005 tointegralx 0.3 -> 0 Inexact Rounded +intxx006 tointegralx 0.4 -> 0 Inexact Rounded +intxx007 tointegralx 0.5 -> 1 Inexact Rounded +intxx008 tointegralx 0.6 -> 1 Inexact Rounded +intxx009 tointegralx 0.7 -> 1 Inexact Rounded +intxx010 tointegralx 0.8 -> 1 Inexact Rounded +intxx011 tointegralx 0.9 -> 1 Inexact Rounded +intxx012 tointegralx 1 -> 1 +intxx013 tointegralx 1.0 -> 1 Rounded +intxx014 tointegralx 1.1 -> 1 Inexact Rounded +intxx015 tointegralx 1.2 -> 1 Inexact Rounded +intxx016 tointegralx 1.3 -> 1 Inexact Rounded +intxx017 tointegralx 1.4 -> 1 Inexact Rounded +intxx018 tointegralx 1.5 -> 2 Inexact Rounded +intxx019 tointegralx 1.6 -> 2 Inexact Rounded +intxx020 tointegralx 1.7 -> 2 Inexact Rounded +intxx021 tointegralx 1.8 -> 2 Inexact Rounded +intxx022 tointegralx 1.9 -> 2 Inexact Rounded +-- negatives +intxx031 tointegralx -0 -> -0 +intxx032 tointegralx -0.0 -> -0 +intxx033 tointegralx -0.1 -> -0 Inexact Rounded +intxx034 tointegralx -0.2 -> -0 Inexact Rounded +intxx035 tointegralx -0.3 -> -0 Inexact Rounded +intxx036 tointegralx -0.4 -> -0 Inexact Rounded +intxx037 tointegralx -0.5 -> -1 Inexact Rounded +intxx038 tointegralx -0.6 -> -1 Inexact Rounded +intxx039 tointegralx -0.7 -> -1 Inexact Rounded +intxx040 tointegralx -0.8 -> -1 Inexact Rounded +intxx041 tointegralx -0.9 -> -1 Inexact Rounded +intxx042 tointegralx -1 -> -1 +intxx043 tointegralx -1.0 -> -1 Rounded +intxx044 tointegralx -1.1 -> -1 Inexact Rounded +intxx045 tointegralx -1.2 -> -1 Inexact Rounded +intxx046 tointegralx -1.3 -> -1 Inexact Rounded +intxx047 tointegralx -1.4 -> -1 Inexact Rounded +intxx048 tointegralx -1.5 -> -2 Inexact Rounded +intxx049 tointegralx -1.6 -> -2 Inexact Rounded +intxx050 tointegralx -1.7 -> -2 Inexact Rounded +intxx051 tointegralx -1.8 -> -2 Inexact Rounded +intxx052 tointegralx -1.9 -> -2 Inexact Rounded +-- next two would be NaN using quantize(x, 0) +intxx053 tointegralx 10E+30 -> 1.0E+31 +intxx054 tointegralx -10E+30 -> -1.0E+31 + +-- numbers around precision +precision: 9 +intxx060 tointegralx '56267E-10' -> '0' Inexact Rounded +intxx061 tointegralx '56267E-5' -> '1' Inexact Rounded +intxx062 tointegralx '56267E-2' -> '563' Inexact Rounded +intxx063 tointegralx '56267E-1' -> '5627' Inexact Rounded +intxx065 tointegralx '56267E-0' -> '56267' +intxx066 tointegralx '56267E+0' -> '56267' +intxx067 tointegralx '56267E+1' -> '5.6267E+5' +intxx068 tointegralx '56267E+2' -> '5.6267E+6' +intxx069 tointegralx '56267E+3' -> '5.6267E+7' +intxx070 tointegralx '56267E+4' -> '5.6267E+8' +intxx071 tointegralx '56267E+5' -> '5.6267E+9' +intxx072 tointegralx '56267E+6' -> '5.6267E+10' +intxx073 tointegralx '1.23E+96' -> '1.23E+96' +intxx074 tointegralx '1.23E+384' -> '1.23E+384' +intxx075 tointegralx '1.23E+999' -> '1.23E+999' + +intxx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded +intxx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded +intxx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded +intxx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded +intxx085 tointegralx '-56267E-0' -> '-56267' +intxx086 tointegralx '-56267E+0' -> '-56267' +intxx087 tointegralx '-56267E+1' -> '-5.6267E+5' +intxx088 tointegralx '-56267E+2' -> '-5.6267E+6' +intxx089 tointegralx '-56267E+3' -> '-5.6267E+7' +intxx090 tointegralx '-56267E+4' -> '-5.6267E+8' +intxx091 tointegralx '-56267E+5' -> '-5.6267E+9' +intxx092 tointegralx '-56267E+6' -> '-5.6267E+10' +intxx093 tointegralx '-1.23E+96' -> '-1.23E+96' +intxx094 tointegralx '-1.23E+384' -> '-1.23E+384' +intxx095 tointegralx '-1.23E+999' -> '-1.23E+999' + +-- subnormal inputs +intxx100 tointegralx 1E-999 -> 0 Inexact Rounded +intxx101 tointegralx 0.1E-999 -> 0 Inexact Rounded +intxx102 tointegralx 0.01E-999 -> 0 Inexact Rounded +intxx103 tointegralx 0E-999 -> 0 + +-- specials and zeros +intxx120 tointegralx 'Inf' -> Infinity +intxx121 tointegralx '-Inf' -> -Infinity +intxx122 tointegralx NaN -> NaN +intxx123 tointegralx sNaN -> NaN Invalid_operation +intxx124 tointegralx 0 -> 0 +intxx125 tointegralx -0 -> -0 +intxx126 tointegralx 0.000 -> 0 +intxx127 tointegralx 0.00 -> 0 +intxx128 tointegralx 0.0 -> 0 +intxx129 tointegralx 0 -> 0 +intxx130 tointegralx 0E-3 -> 0 +intxx131 tointegralx 0E-2 -> 0 +intxx132 tointegralx 0E-1 -> 0 +intxx133 tointegralx 0E-0 -> 0 +intxx134 tointegralx 0E+1 -> 0E+1 +intxx135 tointegralx 0E+2 -> 0E+2 +intxx136 tointegralx 0E+3 -> 0E+3 +intxx137 tointegralx 0E+4 -> 0E+4 +intxx138 tointegralx 0E+5 -> 0E+5 +intxx139 tointegralx -0.000 -> -0 +intxx140 tointegralx -0.00 -> -0 +intxx141 tointegralx -0.0 -> -0 +intxx142 tointegralx -0 -> -0 +intxx143 tointegralx -0E-3 -> -0 +intxx144 tointegralx -0E-2 -> -0 +intxx145 tointegralx -0E-1 -> -0 +intxx146 tointegralx -0E-0 -> -0 +intxx147 tointegralx -0E+1 -> -0E+1 +intxx148 tointegralx -0E+2 -> -0E+2 +intxx149 tointegralx -0E+3 -> -0E+3 +intxx150 tointegralx -0E+4 -> -0E+4 +intxx151 tointegralx -0E+5 -> -0E+5 +-- propagating NaNs +intxx152 tointegralx NaN808 -> NaN808 +intxx153 tointegralx sNaN080 -> NaN80 Invalid_operation +intxx154 tointegralx -NaN808 -> -NaN808 +intxx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation +intxx156 tointegralx -NaN -> -NaN +intxx157 tointegralx -sNaN -> -NaN Invalid_operation + +-- examples +rounding: half_up +precision: 9 +intxx200 tointegralx 2.1 -> 2 Inexact Rounded +intxx201 tointegralx 100 -> 100 +intxx202 tointegralx 100.0 -> 100 Rounded +intxx203 tointegralx 101.5 -> 102 Inexact Rounded +intxx204 tointegralx -101.5 -> -102 Inexact Rounded +intxx205 tointegralx 10E+5 -> 1.0E+6 +intxx206 tointegralx 7.89E+77 -> 7.89E+77 +intxx207 tointegralx -Inf -> -Infinity + + +-- all rounding modes +rounding: half_even + +intxx210 tointegralx 55.5 -> 56 Inexact Rounded +intxx211 tointegralx 56.5 -> 56 Inexact Rounded +intxx212 tointegralx 57.5 -> 58 Inexact Rounded +intxx213 tointegralx -55.5 -> -56 Inexact Rounded +intxx214 tointegralx -56.5 -> -56 Inexact Rounded +intxx215 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_up + +intxx220 tointegralx 55.5 -> 56 Inexact Rounded +intxx221 tointegralx 56.5 -> 57 Inexact Rounded +intxx222 tointegralx 57.5 -> 58 Inexact Rounded +intxx223 tointegralx -55.5 -> -56 Inexact Rounded +intxx224 tointegralx -56.5 -> -57 Inexact Rounded +intxx225 tointegralx -57.5 -> -58 Inexact Rounded + +rounding: half_down + +intxx230 tointegralx 55.5 -> 55 Inexact Rounded +intxx231 tointegralx 56.5 -> 56 Inexact Rounded +intxx232 tointegralx 57.5 -> 57 Inexact Rounded +intxx233 tointegralx -55.5 -> -55 Inexact Rounded +intxx234 tointegralx -56.5 -> -56 Inexact Rounded +intxx235 tointegralx -57.5 -> -57 Inexact Rounded + +rounding: up + +intxx240 tointegralx 55.3 -> 56 Inexact Rounded +intxx241 tointegralx 56.3 -> 57 Inexact Rounded +intxx242 tointegralx 57.3 -> 58 Inexact Rounded +intxx243 tointegralx -55.3 -> -56 Inexact Rounded +intxx244 tointegralx -56.3 -> -57 Inexact Rounded +intxx245 tointegralx -57.3 -> -58 Inexact Rounded + +rounding: down + +intxx250 tointegralx 55.7 -> 55 Inexact Rounded +intxx251 tointegralx 56.7 -> 56 Inexact Rounded +intxx252 tointegralx 57.7 -> 57 Inexact Rounded +intxx253 tointegralx -55.7 -> -55 Inexact Rounded +intxx254 tointegralx -56.7 -> -56 Inexact Rounded +intxx255 tointegralx -57.7 -> -57 Inexact Rounded + +rounding: ceiling + +intxx260 tointegralx 55.3 -> 56 Inexact Rounded +intxx261 tointegralx 56.3 -> 57 Inexact Rounded +intxx262 tointegralx 57.3 -> 58 Inexact Rounded +intxx263 tointegralx -55.3 -> -55 Inexact Rounded +intxx264 tointegralx -56.3 -> -56 Inexact Rounded +intxx265 tointegralx -57.3 -> -57 Inexact Rounded + +rounding: floor + +intxx270 tointegralx 55.7 -> 55 Inexact Rounded +intxx271 tointegralx 56.7 -> 56 Inexact Rounded +intxx272 tointegralx 57.7 -> 57 Inexact Rounded +intxx273 tointegralx -55.7 -> -56 Inexact Rounded +intxx274 tointegralx -56.7 -> -57 Inexact Rounded +intxx275 tointegralx -57.7 -> -58 Inexact Rounded + +-- Int and uInt32 edge values for testing conversions +precision: 16 +intxx300 tointegralx -2147483646 -> -2147483646 +intxx301 tointegralx -2147483647 -> -2147483647 +intxx302 tointegralx -2147483648 -> -2147483648 +intxx303 tointegralx -2147483649 -> -2147483649 +intxx304 tointegralx 2147483646 -> 2147483646 +intxx305 tointegralx 2147483647 -> 2147483647 +intxx306 tointegralx 2147483648 -> 2147483648 +intxx307 tointegralx 2147483649 -> 2147483649 +intxx308 tointegralx 4294967294 -> 4294967294 +intxx309 tointegralx 4294967295 -> 4294967295 +intxx310 tointegralx 4294967296 -> 4294967296 +intxx311 tointegralx 4294967297 -> 4294967297 diff --git a/Lib/test/decimaltestdata/xor.decTest b/Lib/test/decimaltestdata/xor.decTest index 122976e44cc..cd71bbcf86b 100644 --- a/Lib/test/decimaltestdata/xor.decTest +++ b/Lib/test/decimaltestdata/xor.decTest @@ -1,335 +1,335 @@ ------------------------------------------------------------------------- --- xor.decTest -- digitwise logical XOR -- --- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------- --- Please see the document "General Decimal Arithmetic Testcases" -- --- at http://www2.hursley.ibm.com/decimal for the description of -- --- these testcases. -- --- -- --- These testcases are experimental ('beta' versions), and they -- --- may contain errors. They are offered on an as-is basis. In -- --- particular, achieving the same results as the tests here is not -- --- a guarantee that an implementation complies with any Standard -- --- or specification. The tests are not exhaustive. -- --- -- --- Please send comments, suggestions, and corrections to the author: -- --- Mike Cowlishaw, IBM Fellow -- --- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- --- mfc@uk.ibm.com -- ------------------------------------------------------------------------- -version: 2.59 - -extended: 1 -precision: 9 -rounding: half_up -maxExponent: 999 -minExponent: -999 - --- Sanity check (truth table) -xorx001 xor 0 0 -> 0 -xorx002 xor 0 1 -> 1 -xorx003 xor 1 0 -> 1 -xorx004 xor 1 1 -> 0 -xorx005 xor 1100 1010 -> 110 -xorx006 xor 1111 10 -> 1101 --- and at msd and msd-1 -xorx010 xor 000000000 000000000 -> 0 -xorx011 xor 000000000 100000000 -> 100000000 -xorx012 xor 100000000 000000000 -> 100000000 -xorx013 xor 100000000 100000000 -> 0 -xorx014 xor 000000000 000000000 -> 0 -xorx015 xor 000000000 010000000 -> 10000000 -xorx016 xor 010000000 000000000 -> 10000000 -xorx017 xor 010000000 010000000 -> 0 - --- Various lengths --- 123456789 123456789 123456789 -xorx021 xor 111111111 111111111 -> 0 -xorx022 xor 111111111111 111111111 -> 0 -xorx023 xor 11111111 11111111 -> 0 -xorx025 xor 1111111 1111111 -> 0 -xorx026 xor 111111 111111 -> 0 -xorx027 xor 11111 11111 -> 0 -xorx028 xor 1111 1111 -> 0 -xorx029 xor 111 111 -> 0 -xorx031 xor 11 11 -> 0 -xorx032 xor 1 1 -> 0 -xorx033 xor 111111111111 1111111111 -> 0 -xorx034 xor 11111111111 11111111111 -> 0 -xorx035 xor 1111111111 111111111111 -> 0 -xorx036 xor 111111111 1111111111111 -> 0 - -xorx040 xor 111111111 111111111111 -> 0 -xorx041 xor 11111111 111111111111 -> 100000000 -xorx042 xor 11111111 111111111 -> 100000000 -xorx043 xor 1111111 100000010 -> 101111101 -xorx044 xor 111111 100000100 -> 100111011 -xorx045 xor 11111 100001000 -> 100010111 -xorx046 xor 1111 100010000 -> 100011111 -xorx047 xor 111 100100000 -> 100100111 -xorx048 xor 11 101000000 -> 101000011 -xorx049 xor 1 110000000 -> 110000001 - -xorx050 xor 1111111111 1 -> 111111110 -xorx051 xor 111111111 1 -> 111111110 -xorx052 xor 11111111 1 -> 11111110 -xorx053 xor 1111111 1 -> 1111110 -xorx054 xor 111111 1 -> 111110 -xorx055 xor 11111 1 -> 11110 -xorx056 xor 1111 1 -> 1110 -xorx057 xor 111 1 -> 110 -xorx058 xor 11 1 -> 10 -xorx059 xor 1 1 -> 0 - -xorx060 xor 1111111111 0 -> 111111111 -xorx061 xor 111111111 0 -> 111111111 -xorx062 xor 11111111 0 -> 11111111 -xorx063 xor 1111111 0 -> 1111111 -xorx064 xor 111111 0 -> 111111 -xorx065 xor 11111 0 -> 11111 -xorx066 xor 1111 0 -> 1111 -xorx067 xor 111 0 -> 111 -xorx068 xor 11 0 -> 11 -xorx069 xor 1 0 -> 1 - -xorx070 xor 1 1111111111 -> 111111110 -xorx071 xor 1 111111111 -> 111111110 -xorx072 xor 1 11111111 -> 11111110 -xorx073 xor 1 1111111 -> 1111110 -xorx074 xor 1 111111 -> 111110 -xorx075 xor 1 11111 -> 11110 -xorx076 xor 1 1111 -> 1110 -xorx077 xor 1 111 -> 110 -xorx078 xor 1 11 -> 10 -xorx079 xor 1 1 -> 0 - -xorx080 xor 0 1111111111 -> 111111111 -xorx081 xor 0 111111111 -> 111111111 -xorx082 xor 0 11111111 -> 11111111 -xorx083 xor 0 1111111 -> 1111111 -xorx084 xor 0 111111 -> 111111 -xorx085 xor 0 11111 -> 11111 -xorx086 xor 0 1111 -> 1111 -xorx087 xor 0 111 -> 111 -xorx088 xor 0 11 -> 11 -xorx089 xor 0 1 -> 1 - -xorx090 xor 011111111 111101111 -> 100010000 -xorx091 xor 101111111 111101111 -> 10010000 -xorx092 xor 110111111 111101111 -> 1010000 -xorx093 xor 111011111 111101111 -> 110000 -xorx094 xor 111101111 111101111 -> 0 -xorx095 xor 111110111 111101111 -> 11000 -xorx096 xor 111111011 111101111 -> 10100 -xorx097 xor 111111101 111101111 -> 10010 -xorx098 xor 111111110 111101111 -> 10001 - -xorx100 xor 111101111 011111111 -> 100010000 -xorx101 xor 111101111 101111111 -> 10010000 -xorx102 xor 111101111 110111111 -> 1010000 -xorx103 xor 111101111 111011111 -> 110000 -xorx104 xor 111101111 111101111 -> 0 -xorx105 xor 111101111 111110111 -> 11000 -xorx106 xor 111101111 111111011 -> 10100 -xorx107 xor 111101111 111111101 -> 10010 -xorx108 xor 111101111 111111110 -> 10001 - --- non-0/1 should not be accepted, nor should signs -xorx220 xor 111111112 111111111 -> NaN Invalid_operation -xorx221 xor 333333333 333333333 -> NaN Invalid_operation -xorx222 xor 555555555 555555555 -> NaN Invalid_operation -xorx223 xor 777777777 777777777 -> NaN Invalid_operation -xorx224 xor 999999999 999999999 -> NaN Invalid_operation -xorx225 xor 222222222 999999999 -> NaN Invalid_operation -xorx226 xor 444444444 999999999 -> NaN Invalid_operation -xorx227 xor 666666666 999999999 -> NaN Invalid_operation -xorx228 xor 888888888 999999999 -> NaN Invalid_operation -xorx229 xor 999999999 222222222 -> NaN Invalid_operation -xorx230 xor 999999999 444444444 -> NaN Invalid_operation -xorx231 xor 999999999 666666666 -> NaN Invalid_operation -xorx232 xor 999999999 888888888 -> NaN Invalid_operation --- a few randoms -xorx240 xor 567468689 -934981942 -> NaN Invalid_operation -xorx241 xor 567367689 934981942 -> NaN Invalid_operation -xorx242 xor -631917772 -706014634 -> NaN Invalid_operation -xorx243 xor -756253257 138579234 -> NaN Invalid_operation -xorx244 xor 835590149 567435400 -> NaN Invalid_operation --- test MSD -xorx250 xor 200000000 100000000 -> NaN Invalid_operation -xorx251 xor 700000000 100000000 -> NaN Invalid_operation -xorx252 xor 800000000 100000000 -> NaN Invalid_operation -xorx253 xor 900000000 100000000 -> NaN Invalid_operation -xorx254 xor 200000000 000000000 -> NaN Invalid_operation -xorx255 xor 700000000 000000000 -> NaN Invalid_operation -xorx256 xor 800000000 000000000 -> NaN Invalid_operation -xorx257 xor 900000000 000000000 -> NaN Invalid_operation -xorx258 xor 100000000 200000000 -> NaN Invalid_operation -xorx259 xor 100000000 700000000 -> NaN Invalid_operation -xorx260 xor 100000000 800000000 -> NaN Invalid_operation -xorx261 xor 100000000 900000000 -> NaN Invalid_operation -xorx262 xor 000000000 200000000 -> NaN Invalid_operation -xorx263 xor 000000000 700000000 -> NaN Invalid_operation -xorx264 xor 000000000 800000000 -> NaN Invalid_operation -xorx265 xor 000000000 900000000 -> NaN Invalid_operation --- test MSD-1 -xorx270 xor 020000000 100000000 -> NaN Invalid_operation -xorx271 xor 070100000 100000000 -> NaN Invalid_operation -xorx272 xor 080010000 100000001 -> NaN Invalid_operation -xorx273 xor 090001000 100000010 -> NaN Invalid_operation -xorx274 xor 100000100 020010100 -> NaN Invalid_operation -xorx275 xor 100000000 070001000 -> NaN Invalid_operation -xorx276 xor 100000010 080010100 -> NaN Invalid_operation -xorx277 xor 100000000 090000010 -> NaN Invalid_operation --- test LSD -xorx280 xor 001000002 100000000 -> NaN Invalid_operation -xorx281 xor 000000007 100000000 -> NaN Invalid_operation -xorx282 xor 000000008 100000000 -> NaN Invalid_operation -xorx283 xor 000000009 100000000 -> NaN Invalid_operation -xorx284 xor 100000000 000100002 -> NaN Invalid_operation -xorx285 xor 100100000 001000007 -> NaN Invalid_operation -xorx286 xor 100010000 010000008 -> NaN Invalid_operation -xorx287 xor 100001000 100000009 -> NaN Invalid_operation --- test Middie -xorx288 xor 001020000 100000000 -> NaN Invalid_operation -xorx289 xor 000070001 100000000 -> NaN Invalid_operation -xorx290 xor 000080000 100010000 -> NaN Invalid_operation -xorx291 xor 000090000 100001000 -> NaN Invalid_operation -xorx292 xor 100000010 000020100 -> NaN Invalid_operation -xorx293 xor 100100000 000070010 -> NaN Invalid_operation -xorx294 xor 100010100 000080001 -> NaN Invalid_operation -xorx295 xor 100001000 000090000 -> NaN Invalid_operation --- signs -xorx296 xor -100001000 -000000000 -> NaN Invalid_operation -xorx297 xor -100001000 000010000 -> NaN Invalid_operation -xorx298 xor 100001000 -000000000 -> NaN Invalid_operation -xorx299 xor 100001000 000011000 -> 100010000 - --- Nmax, Nmin, Ntiny -xorx331 xor 2 9.99999999E+999 -> NaN Invalid_operation -xorx332 xor 3 1E-999 -> NaN Invalid_operation -xorx333 xor 4 1.00000000E-999 -> NaN Invalid_operation -xorx334 xor 5 1E-1007 -> NaN Invalid_operation -xorx335 xor 6 -1E-1007 -> NaN Invalid_operation -xorx336 xor 7 -1.00000000E-999 -> NaN Invalid_operation -xorx337 xor 8 -1E-999 -> NaN Invalid_operation -xorx338 xor 9 -9.99999999E+999 -> NaN Invalid_operation -xorx341 xor 9.99999999E+999 -18 -> NaN Invalid_operation -xorx342 xor 1E-999 01 -> NaN Invalid_operation -xorx343 xor 1.00000000E-999 -18 -> NaN Invalid_operation -xorx344 xor 1E-1007 18 -> NaN Invalid_operation -xorx345 xor -1E-1007 -10 -> NaN Invalid_operation -xorx346 xor -1.00000000E-999 18 -> NaN Invalid_operation -xorx347 xor -1E-999 10 -> NaN Invalid_operation -xorx348 xor -9.99999999E+999 -18 -> NaN Invalid_operation - --- A few other non-integers -xorx361 xor 1.0 1 -> NaN Invalid_operation -xorx362 xor 1E+1 1 -> NaN Invalid_operation -xorx363 xor 0.0 1 -> NaN Invalid_operation -xorx364 xor 0E+1 1 -> NaN Invalid_operation -xorx365 xor 9.9 1 -> NaN Invalid_operation -xorx366 xor 9E+1 1 -> NaN Invalid_operation -xorx371 xor 0 1.0 -> NaN Invalid_operation -xorx372 xor 0 1E+1 -> NaN Invalid_operation -xorx373 xor 0 0.0 -> NaN Invalid_operation -xorx374 xor 0 0E+1 -> NaN Invalid_operation -xorx375 xor 0 9.9 -> NaN Invalid_operation -xorx376 xor 0 9E+1 -> NaN Invalid_operation - --- All Specials are in error -xorx780 xor -Inf -Inf -> NaN Invalid_operation -xorx781 xor -Inf -1000 -> NaN Invalid_operation -xorx782 xor -Inf -1 -> NaN Invalid_operation -xorx783 xor -Inf -0 -> NaN Invalid_operation -xorx784 xor -Inf 0 -> NaN Invalid_operation -xorx785 xor -Inf 1 -> NaN Invalid_operation -xorx786 xor -Inf 1000 -> NaN Invalid_operation -xorx787 xor -1000 -Inf -> NaN Invalid_operation -xorx788 xor -Inf -Inf -> NaN Invalid_operation -xorx789 xor -1 -Inf -> NaN Invalid_operation -xorx790 xor -0 -Inf -> NaN Invalid_operation -xorx791 xor 0 -Inf -> NaN Invalid_operation -xorx792 xor 1 -Inf -> NaN Invalid_operation -xorx793 xor 1000 -Inf -> NaN Invalid_operation -xorx794 xor Inf -Inf -> NaN Invalid_operation - -xorx800 xor Inf -Inf -> NaN Invalid_operation -xorx801 xor Inf -1000 -> NaN Invalid_operation -xorx802 xor Inf -1 -> NaN Invalid_operation -xorx803 xor Inf -0 -> NaN Invalid_operation -xorx804 xor Inf 0 -> NaN Invalid_operation -xorx805 xor Inf 1 -> NaN Invalid_operation -xorx806 xor Inf 1000 -> NaN Invalid_operation -xorx807 xor Inf Inf -> NaN Invalid_operation -xorx808 xor -1000 Inf -> NaN Invalid_operation -xorx809 xor -Inf Inf -> NaN Invalid_operation -xorx810 xor -1 Inf -> NaN Invalid_operation -xorx811 xor -0 Inf -> NaN Invalid_operation -xorx812 xor 0 Inf -> NaN Invalid_operation -xorx813 xor 1 Inf -> NaN Invalid_operation -xorx814 xor 1000 Inf -> NaN Invalid_operation -xorx815 xor Inf Inf -> NaN Invalid_operation - -xorx821 xor NaN -Inf -> NaN Invalid_operation -xorx822 xor NaN -1000 -> NaN Invalid_operation -xorx823 xor NaN -1 -> NaN Invalid_operation -xorx824 xor NaN -0 -> NaN Invalid_operation -xorx825 xor NaN 0 -> NaN Invalid_operation -xorx826 xor NaN 1 -> NaN Invalid_operation -xorx827 xor NaN 1000 -> NaN Invalid_operation -xorx828 xor NaN Inf -> NaN Invalid_operation -xorx829 xor NaN NaN -> NaN Invalid_operation -xorx830 xor -Inf NaN -> NaN Invalid_operation -xorx831 xor -1000 NaN -> NaN Invalid_operation -xorx832 xor -1 NaN -> NaN Invalid_operation -xorx833 xor -0 NaN -> NaN Invalid_operation -xorx834 xor 0 NaN -> NaN Invalid_operation -xorx835 xor 1 NaN -> NaN Invalid_operation -xorx836 xor 1000 NaN -> NaN Invalid_operation -xorx837 xor Inf NaN -> NaN Invalid_operation - -xorx841 xor sNaN -Inf -> NaN Invalid_operation -xorx842 xor sNaN -1000 -> NaN Invalid_operation -xorx843 xor sNaN -1 -> NaN Invalid_operation -xorx844 xor sNaN -0 -> NaN Invalid_operation -xorx845 xor sNaN 0 -> NaN Invalid_operation -xorx846 xor sNaN 1 -> NaN Invalid_operation -xorx847 xor sNaN 1000 -> NaN Invalid_operation -xorx848 xor sNaN NaN -> NaN Invalid_operation -xorx849 xor sNaN sNaN -> NaN Invalid_operation -xorx850 xor NaN sNaN -> NaN Invalid_operation -xorx851 xor -Inf sNaN -> NaN Invalid_operation -xorx852 xor -1000 sNaN -> NaN Invalid_operation -xorx853 xor -1 sNaN -> NaN Invalid_operation -xorx854 xor -0 sNaN -> NaN Invalid_operation -xorx855 xor 0 sNaN -> NaN Invalid_operation -xorx856 xor 1 sNaN -> NaN Invalid_operation -xorx857 xor 1000 sNaN -> NaN Invalid_operation -xorx858 xor Inf sNaN -> NaN Invalid_operation -xorx859 xor NaN sNaN -> NaN Invalid_operation - --- propagating NaNs -xorx861 xor NaN1 -Inf -> NaN Invalid_operation -xorx862 xor +NaN2 -1000 -> NaN Invalid_operation -xorx863 xor NaN3 1000 -> NaN Invalid_operation -xorx864 xor NaN4 Inf -> NaN Invalid_operation -xorx865 xor NaN5 +NaN6 -> NaN Invalid_operation -xorx866 xor -Inf NaN7 -> NaN Invalid_operation -xorx867 xor -1000 NaN8 -> NaN Invalid_operation -xorx868 xor 1000 NaN9 -> NaN Invalid_operation -xorx869 xor Inf +NaN10 -> NaN Invalid_operation -xorx871 xor sNaN11 -Inf -> NaN Invalid_operation -xorx872 xor sNaN12 -1000 -> NaN Invalid_operation -xorx873 xor sNaN13 1000 -> NaN Invalid_operation -xorx874 xor sNaN14 NaN17 -> NaN Invalid_operation -xorx875 xor sNaN15 sNaN18 -> NaN Invalid_operation -xorx876 xor NaN16 sNaN19 -> NaN Invalid_operation -xorx877 xor -Inf +sNaN20 -> NaN Invalid_operation -xorx878 xor -1000 sNaN21 -> NaN Invalid_operation -xorx879 xor 1000 sNaN22 -> NaN Invalid_operation -xorx880 xor Inf sNaN23 -> NaN Invalid_operation -xorx881 xor +NaN25 +sNaN24 -> NaN Invalid_operation -xorx882 xor -NaN26 NaN28 -> NaN Invalid_operation -xorx883 xor -sNaN27 sNaN29 -> NaN Invalid_operation -xorx884 xor 1000 -NaN30 -> NaN Invalid_operation -xorx885 xor 1000 -sNaN31 -> NaN Invalid_operation +------------------------------------------------------------------------ +-- xor.decTest -- digitwise logical XOR -- +-- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- +------------------------------------------------------------------------ +-- Please see the document "General Decimal Arithmetic Testcases" -- +-- at http://www2.hursley.ibm.com/decimal for the description of -- +-- these testcases. -- +-- -- +-- These testcases are experimental ('beta' versions), and they -- +-- may contain errors. They are offered on an as-is basis. In -- +-- particular, achieving the same results as the tests here is not -- +-- a guarantee that an implementation complies with any Standard -- +-- or specification. The tests are not exhaustive. -- +-- -- +-- Please send comments, suggestions, and corrections to the author: -- +-- Mike Cowlishaw, IBM Fellow -- +-- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- +-- mfc@uk.ibm.com -- +------------------------------------------------------------------------ +version: 2.59 + +extended: 1 +precision: 9 +rounding: half_up +maxExponent: 999 +minExponent: -999 + +-- Sanity check (truth table) +xorx001 xor 0 0 -> 0 +xorx002 xor 0 1 -> 1 +xorx003 xor 1 0 -> 1 +xorx004 xor 1 1 -> 0 +xorx005 xor 1100 1010 -> 110 +xorx006 xor 1111 10 -> 1101 +-- and at msd and msd-1 +xorx010 xor 000000000 000000000 -> 0 +xorx011 xor 000000000 100000000 -> 100000000 +xorx012 xor 100000000 000000000 -> 100000000 +xorx013 xor 100000000 100000000 -> 0 +xorx014 xor 000000000 000000000 -> 0 +xorx015 xor 000000000 010000000 -> 10000000 +xorx016 xor 010000000 000000000 -> 10000000 +xorx017 xor 010000000 010000000 -> 0 + +-- Various lengths +-- 123456789 123456789 123456789 +xorx021 xor 111111111 111111111 -> 0 +xorx022 xor 111111111111 111111111 -> 0 +xorx023 xor 11111111 11111111 -> 0 +xorx025 xor 1111111 1111111 -> 0 +xorx026 xor 111111 111111 -> 0 +xorx027 xor 11111 11111 -> 0 +xorx028 xor 1111 1111 -> 0 +xorx029 xor 111 111 -> 0 +xorx031 xor 11 11 -> 0 +xorx032 xor 1 1 -> 0 +xorx033 xor 111111111111 1111111111 -> 0 +xorx034 xor 11111111111 11111111111 -> 0 +xorx035 xor 1111111111 111111111111 -> 0 +xorx036 xor 111111111 1111111111111 -> 0 + +xorx040 xor 111111111 111111111111 -> 0 +xorx041 xor 11111111 111111111111 -> 100000000 +xorx042 xor 11111111 111111111 -> 100000000 +xorx043 xor 1111111 100000010 -> 101111101 +xorx044 xor 111111 100000100 -> 100111011 +xorx045 xor 11111 100001000 -> 100010111 +xorx046 xor 1111 100010000 -> 100011111 +xorx047 xor 111 100100000 -> 100100111 +xorx048 xor 11 101000000 -> 101000011 +xorx049 xor 1 110000000 -> 110000001 + +xorx050 xor 1111111111 1 -> 111111110 +xorx051 xor 111111111 1 -> 111111110 +xorx052 xor 11111111 1 -> 11111110 +xorx053 xor 1111111 1 -> 1111110 +xorx054 xor 111111 1 -> 111110 +xorx055 xor 11111 1 -> 11110 +xorx056 xor 1111 1 -> 1110 +xorx057 xor 111 1 -> 110 +xorx058 xor 11 1 -> 10 +xorx059 xor 1 1 -> 0 + +xorx060 xor 1111111111 0 -> 111111111 +xorx061 xor 111111111 0 -> 111111111 +xorx062 xor 11111111 0 -> 11111111 +xorx063 xor 1111111 0 -> 1111111 +xorx064 xor 111111 0 -> 111111 +xorx065 xor 11111 0 -> 11111 +xorx066 xor 1111 0 -> 1111 +xorx067 xor 111 0 -> 111 +xorx068 xor 11 0 -> 11 +xorx069 xor 1 0 -> 1 + +xorx070 xor 1 1111111111 -> 111111110 +xorx071 xor 1 111111111 -> 111111110 +xorx072 xor 1 11111111 -> 11111110 +xorx073 xor 1 1111111 -> 1111110 +xorx074 xor 1 111111 -> 111110 +xorx075 xor 1 11111 -> 11110 +xorx076 xor 1 1111 -> 1110 +xorx077 xor 1 111 -> 110 +xorx078 xor 1 11 -> 10 +xorx079 xor 1 1 -> 0 + +xorx080 xor 0 1111111111 -> 111111111 +xorx081 xor 0 111111111 -> 111111111 +xorx082 xor 0 11111111 -> 11111111 +xorx083 xor 0 1111111 -> 1111111 +xorx084 xor 0 111111 -> 111111 +xorx085 xor 0 11111 -> 11111 +xorx086 xor 0 1111 -> 1111 +xorx087 xor 0 111 -> 111 +xorx088 xor 0 11 -> 11 +xorx089 xor 0 1 -> 1 + +xorx090 xor 011111111 111101111 -> 100010000 +xorx091 xor 101111111 111101111 -> 10010000 +xorx092 xor 110111111 111101111 -> 1010000 +xorx093 xor 111011111 111101111 -> 110000 +xorx094 xor 111101111 111101111 -> 0 +xorx095 xor 111110111 111101111 -> 11000 +xorx096 xor 111111011 111101111 -> 10100 +xorx097 xor 111111101 111101111 -> 10010 +xorx098 xor 111111110 111101111 -> 10001 + +xorx100 xor 111101111 011111111 -> 100010000 +xorx101 xor 111101111 101111111 -> 10010000 +xorx102 xor 111101111 110111111 -> 1010000 +xorx103 xor 111101111 111011111 -> 110000 +xorx104 xor 111101111 111101111 -> 0 +xorx105 xor 111101111 111110111 -> 11000 +xorx106 xor 111101111 111111011 -> 10100 +xorx107 xor 111101111 111111101 -> 10010 +xorx108 xor 111101111 111111110 -> 10001 + +-- non-0/1 should not be accepted, nor should signs +xorx220 xor 111111112 111111111 -> NaN Invalid_operation +xorx221 xor 333333333 333333333 -> NaN Invalid_operation +xorx222 xor 555555555 555555555 -> NaN Invalid_operation +xorx223 xor 777777777 777777777 -> NaN Invalid_operation +xorx224 xor 999999999 999999999 -> NaN Invalid_operation +xorx225 xor 222222222 999999999 -> NaN Invalid_operation +xorx226 xor 444444444 999999999 -> NaN Invalid_operation +xorx227 xor 666666666 999999999 -> NaN Invalid_operation +xorx228 xor 888888888 999999999 -> NaN Invalid_operation +xorx229 xor 999999999 222222222 -> NaN Invalid_operation +xorx230 xor 999999999 444444444 -> NaN Invalid_operation +xorx231 xor 999999999 666666666 -> NaN Invalid_operation +xorx232 xor 999999999 888888888 -> NaN Invalid_operation +-- a few randoms +xorx240 xor 567468689 -934981942 -> NaN Invalid_operation +xorx241 xor 567367689 934981942 -> NaN Invalid_operation +xorx242 xor -631917772 -706014634 -> NaN Invalid_operation +xorx243 xor -756253257 138579234 -> NaN Invalid_operation +xorx244 xor 835590149 567435400 -> NaN Invalid_operation +-- test MSD +xorx250 xor 200000000 100000000 -> NaN Invalid_operation +xorx251 xor 700000000 100000000 -> NaN Invalid_operation +xorx252 xor 800000000 100000000 -> NaN Invalid_operation +xorx253 xor 900000000 100000000 -> NaN Invalid_operation +xorx254 xor 200000000 000000000 -> NaN Invalid_operation +xorx255 xor 700000000 000000000 -> NaN Invalid_operation +xorx256 xor 800000000 000000000 -> NaN Invalid_operation +xorx257 xor 900000000 000000000 -> NaN Invalid_operation +xorx258 xor 100000000 200000000 -> NaN Invalid_operation +xorx259 xor 100000000 700000000 -> NaN Invalid_operation +xorx260 xor 100000000 800000000 -> NaN Invalid_operation +xorx261 xor 100000000 900000000 -> NaN Invalid_operation +xorx262 xor 000000000 200000000 -> NaN Invalid_operation +xorx263 xor 000000000 700000000 -> NaN Invalid_operation +xorx264 xor 000000000 800000000 -> NaN Invalid_operation +xorx265 xor 000000000 900000000 -> NaN Invalid_operation +-- test MSD-1 +xorx270 xor 020000000 100000000 -> NaN Invalid_operation +xorx271 xor 070100000 100000000 -> NaN Invalid_operation +xorx272 xor 080010000 100000001 -> NaN Invalid_operation +xorx273 xor 090001000 100000010 -> NaN Invalid_operation +xorx274 xor 100000100 020010100 -> NaN Invalid_operation +xorx275 xor 100000000 070001000 -> NaN Invalid_operation +xorx276 xor 100000010 080010100 -> NaN Invalid_operation +xorx277 xor 100000000 090000010 -> NaN Invalid_operation +-- test LSD +xorx280 xor 001000002 100000000 -> NaN Invalid_operation +xorx281 xor 000000007 100000000 -> NaN Invalid_operation +xorx282 xor 000000008 100000000 -> NaN Invalid_operation +xorx283 xor 000000009 100000000 -> NaN Invalid_operation +xorx284 xor 100000000 000100002 -> NaN Invalid_operation +xorx285 xor 100100000 001000007 -> NaN Invalid_operation +xorx286 xor 100010000 010000008 -> NaN Invalid_operation +xorx287 xor 100001000 100000009 -> NaN Invalid_operation +-- test Middie +xorx288 xor 001020000 100000000 -> NaN Invalid_operation +xorx289 xor 000070001 100000000 -> NaN Invalid_operation +xorx290 xor 000080000 100010000 -> NaN Invalid_operation +xorx291 xor 000090000 100001000 -> NaN Invalid_operation +xorx292 xor 100000010 000020100 -> NaN Invalid_operation +xorx293 xor 100100000 000070010 -> NaN Invalid_operation +xorx294 xor 100010100 000080001 -> NaN Invalid_operation +xorx295 xor 100001000 000090000 -> NaN Invalid_operation +-- signs +xorx296 xor -100001000 -000000000 -> NaN Invalid_operation +xorx297 xor -100001000 000010000 -> NaN Invalid_operation +xorx298 xor 100001000 -000000000 -> NaN Invalid_operation +xorx299 xor 100001000 000011000 -> 100010000 + +-- Nmax, Nmin, Ntiny +xorx331 xor 2 9.99999999E+999 -> NaN Invalid_operation +xorx332 xor 3 1E-999 -> NaN Invalid_operation +xorx333 xor 4 1.00000000E-999 -> NaN Invalid_operation +xorx334 xor 5 1E-1007 -> NaN Invalid_operation +xorx335 xor 6 -1E-1007 -> NaN Invalid_operation +xorx336 xor 7 -1.00000000E-999 -> NaN Invalid_operation +xorx337 xor 8 -1E-999 -> NaN Invalid_operation +xorx338 xor 9 -9.99999999E+999 -> NaN Invalid_operation +xorx341 xor 9.99999999E+999 -18 -> NaN Invalid_operation +xorx342 xor 1E-999 01 -> NaN Invalid_operation +xorx343 xor 1.00000000E-999 -18 -> NaN Invalid_operation +xorx344 xor 1E-1007 18 -> NaN Invalid_operation +xorx345 xor -1E-1007 -10 -> NaN Invalid_operation +xorx346 xor -1.00000000E-999 18 -> NaN Invalid_operation +xorx347 xor -1E-999 10 -> NaN Invalid_operation +xorx348 xor -9.99999999E+999 -18 -> NaN Invalid_operation + +-- A few other non-integers +xorx361 xor 1.0 1 -> NaN Invalid_operation +xorx362 xor 1E+1 1 -> NaN Invalid_operation +xorx363 xor 0.0 1 -> NaN Invalid_operation +xorx364 xor 0E+1 1 -> NaN Invalid_operation +xorx365 xor 9.9 1 -> NaN Invalid_operation +xorx366 xor 9E+1 1 -> NaN Invalid_operation +xorx371 xor 0 1.0 -> NaN Invalid_operation +xorx372 xor 0 1E+1 -> NaN Invalid_operation +xorx373 xor 0 0.0 -> NaN Invalid_operation +xorx374 xor 0 0E+1 -> NaN Invalid_operation +xorx375 xor 0 9.9 -> NaN Invalid_operation +xorx376 xor 0 9E+1 -> NaN Invalid_operation + +-- All Specials are in error +xorx780 xor -Inf -Inf -> NaN Invalid_operation +xorx781 xor -Inf -1000 -> NaN Invalid_operation +xorx782 xor -Inf -1 -> NaN Invalid_operation +xorx783 xor -Inf -0 -> NaN Invalid_operation +xorx784 xor -Inf 0 -> NaN Invalid_operation +xorx785 xor -Inf 1 -> NaN Invalid_operation +xorx786 xor -Inf 1000 -> NaN Invalid_operation +xorx787 xor -1000 -Inf -> NaN Invalid_operation +xorx788 xor -Inf -Inf -> NaN Invalid_operation +xorx789 xor -1 -Inf -> NaN Invalid_operation +xorx790 xor -0 -Inf -> NaN Invalid_operation +xorx791 xor 0 -Inf -> NaN Invalid_operation +xorx792 xor 1 -Inf -> NaN Invalid_operation +xorx793 xor 1000 -Inf -> NaN Invalid_operation +xorx794 xor Inf -Inf -> NaN Invalid_operation + +xorx800 xor Inf -Inf -> NaN Invalid_operation +xorx801 xor Inf -1000 -> NaN Invalid_operation +xorx802 xor Inf -1 -> NaN Invalid_operation +xorx803 xor Inf -0 -> NaN Invalid_operation +xorx804 xor Inf 0 -> NaN Invalid_operation +xorx805 xor Inf 1 -> NaN Invalid_operation +xorx806 xor Inf 1000 -> NaN Invalid_operation +xorx807 xor Inf Inf -> NaN Invalid_operation +xorx808 xor -1000 Inf -> NaN Invalid_operation +xorx809 xor -Inf Inf -> NaN Invalid_operation +xorx810 xor -1 Inf -> NaN Invalid_operation +xorx811 xor -0 Inf -> NaN Invalid_operation +xorx812 xor 0 Inf -> NaN Invalid_operation +xorx813 xor 1 Inf -> NaN Invalid_operation +xorx814 xor 1000 Inf -> NaN Invalid_operation +xorx815 xor Inf Inf -> NaN Invalid_operation + +xorx821 xor NaN -Inf -> NaN Invalid_operation +xorx822 xor NaN -1000 -> NaN Invalid_operation +xorx823 xor NaN -1 -> NaN Invalid_operation +xorx824 xor NaN -0 -> NaN Invalid_operation +xorx825 xor NaN 0 -> NaN Invalid_operation +xorx826 xor NaN 1 -> NaN Invalid_operation +xorx827 xor NaN 1000 -> NaN Invalid_operation +xorx828 xor NaN Inf -> NaN Invalid_operation +xorx829 xor NaN NaN -> NaN Invalid_operation +xorx830 xor -Inf NaN -> NaN Invalid_operation +xorx831 xor -1000 NaN -> NaN Invalid_operation +xorx832 xor -1 NaN -> NaN Invalid_operation +xorx833 xor -0 NaN -> NaN Invalid_operation +xorx834 xor 0 NaN -> NaN Invalid_operation +xorx835 xor 1 NaN -> NaN Invalid_operation +xorx836 xor 1000 NaN -> NaN Invalid_operation +xorx837 xor Inf NaN -> NaN Invalid_operation + +xorx841 xor sNaN -Inf -> NaN Invalid_operation +xorx842 xor sNaN -1000 -> NaN Invalid_operation +xorx843 xor sNaN -1 -> NaN Invalid_operation +xorx844 xor sNaN -0 -> NaN Invalid_operation +xorx845 xor sNaN 0 -> NaN Invalid_operation +xorx846 xor sNaN 1 -> NaN Invalid_operation +xorx847 xor sNaN 1000 -> NaN Invalid_operation +xorx848 xor sNaN NaN -> NaN Invalid_operation +xorx849 xor sNaN sNaN -> NaN Invalid_operation +xorx850 xor NaN sNaN -> NaN Invalid_operation +xorx851 xor -Inf sNaN -> NaN Invalid_operation +xorx852 xor -1000 sNaN -> NaN Invalid_operation +xorx853 xor -1 sNaN -> NaN Invalid_operation +xorx854 xor -0 sNaN -> NaN Invalid_operation +xorx855 xor 0 sNaN -> NaN Invalid_operation +xorx856 xor 1 sNaN -> NaN Invalid_operation +xorx857 xor 1000 sNaN -> NaN Invalid_operation +xorx858 xor Inf sNaN -> NaN Invalid_operation +xorx859 xor NaN sNaN -> NaN Invalid_operation + +-- propagating NaNs +xorx861 xor NaN1 -Inf -> NaN Invalid_operation +xorx862 xor +NaN2 -1000 -> NaN Invalid_operation +xorx863 xor NaN3 1000 -> NaN Invalid_operation +xorx864 xor NaN4 Inf -> NaN Invalid_operation +xorx865 xor NaN5 +NaN6 -> NaN Invalid_operation +xorx866 xor -Inf NaN7 -> NaN Invalid_operation +xorx867 xor -1000 NaN8 -> NaN Invalid_operation +xorx868 xor 1000 NaN9 -> NaN Invalid_operation +xorx869 xor Inf +NaN10 -> NaN Invalid_operation +xorx871 xor sNaN11 -Inf -> NaN Invalid_operation +xorx872 xor sNaN12 -1000 -> NaN Invalid_operation +xorx873 xor sNaN13 1000 -> NaN Invalid_operation +xorx874 xor sNaN14 NaN17 -> NaN Invalid_operation +xorx875 xor sNaN15 sNaN18 -> NaN Invalid_operation +xorx876 xor NaN16 sNaN19 -> NaN Invalid_operation +xorx877 xor -Inf +sNaN20 -> NaN Invalid_operation +xorx878 xor -1000 sNaN21 -> NaN Invalid_operation +xorx879 xor 1000 sNaN22 -> NaN Invalid_operation +xorx880 xor Inf sNaN23 -> NaN Invalid_operation +xorx881 xor +NaN25 +sNaN24 -> NaN Invalid_operation +xorx882 xor -NaN26 NaN28 -> NaN Invalid_operation +xorx883 xor -sNaN27 sNaN29 -> NaN Invalid_operation +xorx884 xor 1000 -NaN30 -> NaN Invalid_operation +xorx885 xor 1000 -sNaN31 -> NaN Invalid_operation diff --git a/Lib/test/libregrtest/logger.py b/Lib/test/libregrtest/logger.py index fa1d4d575c8..4e011ef06f8 100644 --- a/Lib/test/libregrtest/logger.py +++ b/Lib/test/libregrtest/logger.py @@ -1,5 +1,6 @@ import os import time +from typing import Callable from test.support import MS_WINDOWS from .results import TestResults @@ -19,16 +20,27 @@ def __init__(self, results: TestResults, quiet: bool, pgo: bool): self._results: TestResults = results self._quiet: bool = quiet self._pgo: bool = pgo + self.get_mem_usage: Callable[[], int | None] | None = None def log(self, line: str = '') -> None: empty = not line - # add the system load prefix: "load avg: 1.80 " + # Add the memory usage: "mem: 1 GiB " + if self.get_mem_usage is not None: + mem = self.get_mem_usage() + if mem: + mib = mem / (1024*1024) + if mib >= 1024: + line = f"mem: {mib / 1024:.1f} GiB {line}" + else: + line = f"mem: {mib:.1f} MiB {line}" + + # Add the system load prefix: "load avg: 1.80 " load_avg = self.get_load_avg() if load_avg is not None: line = f"load avg: {load_avg:.2f} {line}" - # add the timestamp prefix: "0:01:05 " + # Add the timestamp prefix: "0:01:05 " log_time = time.perf_counter() - self.start_time mins, secs = divmod(int(log_time), 60) diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py index ac82541059c..8773e9df732 100644 --- a/Lib/test/libregrtest/main.py +++ b/Lib/test/libregrtest/main.py @@ -27,7 +27,7 @@ printlist, get_temp_dir, get_work_dir, exit_timeout, display_header, cleanup_temp_dir, print_warning, is_cross_compiled, get_host_runner, display_title, - EXIT_TIMEOUT) + get_process_memory_usage, EXIT_TIMEOUT) class Regrtest: @@ -393,7 +393,12 @@ def run_test( return result + def _get_mem_usage(self): + return get_process_memory_usage(os.getpid()) + def run_tests_sequentially(self, runtests: RunTests) -> None: + if not self.pgo: + self.logger.get_mem_usage = self._get_mem_usage if self.coverage: tracer = trace.Trace(trace=False, count=True) else: diff --git a/Lib/test/libregrtest/run_workers.py b/Lib/test/libregrtest/run_workers.py index 424085a0050..befdac7ee77 100644 --- a/Lib/test/libregrtest/run_workers.py +++ b/Lib/test/libregrtest/run_workers.py @@ -22,7 +22,7 @@ from .single import PROGRESS_MIN_TIME from .utils import ( StrPath, TestName, - format_duration, print_warning, count, plural) + format_duration, print_warning, count, plural, get_process_memory_usage) from .worker import create_worker_process, USE_PROCESS_GROUP if MS_WINDOWS: @@ -452,6 +452,12 @@ def wait_stopped(self, start_time: float) -> None: print_warning(f"Failed to join {self} in {format_duration(dt)}") break + def get_mem_usage(self): + popen = self._popen + if popen is None: + return + return get_process_memory_usage(popen.pid) + def get_running(workers: list[WorkerThread]) -> str | None: running: list[str] = [] @@ -473,6 +479,7 @@ def __init__(self, num_workers: int, runtests: RunTests, logger: Logger, results: TestResults) -> None: self.num_workers = num_workers self.runtests = runtests + self.logger = logger self.log = logger.log self.display_progress = logger.display_progress self.results: TestResults = results @@ -598,9 +605,21 @@ def _process_result(self, item: QueueOutput) -> TestResult: return result + def get_mem_usage(self): + usage = 0 + main_mem = get_process_memory_usage(os.getpid()) + if main_mem: + usage += main_mem + for worker in self.workers: + worker_mem = worker.get_mem_usage() + if worker_mem: + usage += worker_mem + return usage + def run(self) -> None: fail_fast = self.runtests.fail_fast fail_env_changed = self.runtests.fail_env_changed + self.logger.get_mem_usage = self.get_mem_usage self.start_workers() @@ -625,3 +644,4 @@ def run(self) -> None: # worker when we exit this function self.pending.stop() self.stop_workers() + self.logger.get_mem_usage = None diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index 00703d6c074..32f02429ff3 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -12,7 +12,17 @@ import sysconfig import tempfile import textwrap +import types from collections.abc import Callable +_winapi: types.ModuleType | None +try: + import _winapi +except ImportError: + _winapi = None +try: + from _testcapi import get_process_memory_usage as _get_process_memory_usage +except ImportError: + _get_process_memory_usage = None from test import support from test.support import os_helper @@ -752,3 +762,55 @@ def display_title(title): print(title) print("#" * len(title)) print(flush=True) + + +def _get_process_memory_usage_linux(pid: int) -> int | None: + # Linux implementation: read the private memory in bytes from + # /proc/pid/smaps. + try: + fp = open(f"/proc/{pid}/smaps", "rb") + except OSError: + return None + + try: + total = 0 + with fp: + for line in fp: + # Include both Private_Clean and Private_Dirty sections. + line = line.rstrip() + if line.startswith(b"Private_") and line.endswith(b'kB'): + parts = line.split() + total += int(parts[1]) * 1024 + return total + except ProcessLookupError: + return None + + +def _get_process_memory_usage_windows(pid: int) -> int | None: + assert _winapi is not None # to make mypy happy + try: + handle = _winapi.OpenProcess(_winapi.PROCESS_QUERY_LIMITED_INFORMATION, + False, pid) + except OSError: + return None + try: + mem_info = _winapi.GetProcessMemoryInfo(handle) + finally: + _winapi.CloseHandle(handle) + return mem_info['WorkingSetSize'] + + +if _get_process_memory_usage is not None: + def get_process_memory_usage(pid: int) -> int | None: + try: + return _get_process_memory_usage(pid) + except ProcessLookupError: + return None +elif _winapi is not None: + get_process_memory_usage = _get_process_memory_usage_windows +elif sys.platform == 'linux': + get_process_memory_usage = _get_process_memory_usage_linux +else: + def get_process_memory_usage(pid: int) -> int | None: + return None +get_process_memory_usage.__doc__ = "Get process memory usage in bytes." diff --git a/Lib/test/memory_watchdog.py b/Lib/test/memory_watchdog.py index fee062ecc9b..4a3f66e1f82 100644 --- a/Lib/test/memory_watchdog.py +++ b/Lib/test/memory_watchdog.py @@ -1,21 +1,40 @@ """Memory watchdog: periodically read the memory usage of the main test process and print it out, until terminated.""" -# stdin should refer to the process' /proc//statm: we don't pass the -# process' PID to avoid a race condition in case of - unlikely - PID recycling. -# If the process crashes, reading from the /proc entry will fail with ESRCH. import sys import time -from test.support import get_pagesize - - -while True: - page_size = get_pagesize() - sys.stdin.seek(0) - statm = sys.stdin.read() - data = int(statm.split()[5]) - sys.stdout.write(" ... process data size: {data:.1f}G\n" - .format(data=data * page_size / (1024 ** 3))) - sys.stdout.flush() - time.sleep(1) +from test.libregrtest.utils import get_process_memory_usage + + +ONE_GIB = (1024 ** 3) + + +def watchdog(pid): + while True: + mem = get_process_memory_usage(pid) + if mem is None: + # get_process_memory_usage() is not supported on the platform, + # or something went wrong. Exit since the next call is likely to + # fail the same way. + return + + # Prefer sys.stdout.write() to print() to use a single write() syscall. + # print(msg) calls write(msg.encode()) and then write(b"\n"). + sys.stdout.write(f" ... process data size: {mem / ONE_GIB:.1f} GiB\n") + sys.stdout.flush() + time.sleep(1) + +def main(): + if len(sys.argv) != 2: + print(f"usage: python {sys.argv[0]} pid") + sys.exit(1) + pid = int(sys.argv[1]) + + try: + watchdog(pid) + except KeyboardInterrupt: + pass + +if __name__ == "__main__": + main() diff --git a/Lib/test/mime.types2 b/Lib/test/mime.types2 new file mode 100644 index 00000000000..b05c318d1c0 --- /dev/null +++ b/Lib/test/mime.types2 @@ -0,0 +1,3 @@ +# MIME type Extensions +testing/test2 test test2 +testing/test3 test test3 diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 2cac70f4ab2..cd85ef60a80 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -73,6 +73,7 @@ "run_no_yield_async_fn", "run_yielding_async_fn", "async_yield", "reset_code", "on_github_actions", "requires_root_user", "requires_non_root_user", + "skip_if_double_rounding", ] @@ -324,16 +325,6 @@ def requires(resource, msg=None): if resource == 'gui' and not _is_gui_available(): raise ResourceDenied(_is_gui_available.reason) -def _get_kernel_version(sysname="Linux"): - import platform - if platform.system() != sysname: - return None - version_txt = platform.release().split('-', 1)[0] - try: - return tuple(map(int, version_txt.split('.'))) - except ValueError: - return None - def _requires_unix_version(sysname, min_version): """Decorator raising SkipTest if the OS is `sysname` and the version is less than `min_version`. @@ -524,6 +515,15 @@ def dec(*args, **kwargs): float.__getformat__("double").startswith("IEEE"), "test requires IEEE 754 doubles") +# detect evidence of double-rounding: +x, y = 1e16, 2.9999 # use temporary values to defeat peephole optimizer +HAVE_DOUBLE_ROUNDING = (x + y == 1e16 + 4) +skip_if_double_rounding = unittest.skipIf(HAVE_DOUBLE_ROUNDING, + "accuracy not guaranteed on " + "machines with double rounding") +del x, y, HAVE_DOUBLE_ROUNDING + + def requires_zlib(reason='requires zlib'): try: import zlib @@ -1241,29 +1241,20 @@ class _MemoryWatchdog: """ def __init__(self): - self.procfile = '/proc/{pid}/statm'.format(pid=os.getpid()) self.started = False def start(self): - try: - f = open(self.procfile, 'r') - except OSError as e: - logging.getLogger(__name__).warning('/proc not available for stats: %s', e, exc_info=e) - sys.stderr.flush() - return - import subprocess - with f: - watchdog_script = findfile("memory_watchdog.py") - self.mem_watchdog = subprocess.Popen([sys.executable, watchdog_script], - stdin=f, - stderr=subprocess.DEVNULL) + watchdog_script = findfile("memory_watchdog.py") + cmd = [sys.executable, watchdog_script, str(os.getpid())] + self.mem_watchdog = subprocess.Popen(cmd) self.started = True def stop(self): - if self.started: - self.mem_watchdog.terminate() - self.mem_watchdog.wait() + if not self.started: + return + self.mem_watchdog.terminate() + self.mem_watchdog.wait() def bigmemtest(size, memuse, dry_run=True): @@ -1296,8 +1287,8 @@ def wrapper(self): if real_max_memuse and verbose: print() - print(" ... expected peak memory use: {peak:.1f}G" - .format(peak=size * memuse / (1024 ** 3))) + peak = (size * memuse) / (1024 ** 3) + print(f" ... expected peak memory use: {peak:.1f} GiB") watchdog = _MemoryWatchdog() watchdog.start() else: @@ -2815,6 +2806,10 @@ def exceeds_recursion_limit(): is_s390x = hasattr(os, 'uname') and os.uname().machine == 's390x' skip_on_s390x = unittest.skipIf(is_s390x, 'skipped on s390x') +# Cygwin uses the newlib C library +skip_on_newlib = unittest.skipIf(sys.platform == 'cygwin', + 'the test fails on newlib C library') + Py_TRACE_REFS = hasattr(sys, 'getobjects') _JIT_ENABLED = sys._jit.is_enabled() @@ -3323,3 +3318,18 @@ def control_characters_c0() -> list[str]: _ROOT_IN_POSIX = hasattr(os, 'geteuid') and os.geteuid() == 0 requires_root_user = unittest.skipUnless(_ROOT_IN_POSIX, "test needs root privilege") requires_non_root_user = unittest.skipIf(_ROOT_IN_POSIX, "test needs non-root account") + + +STATUS_DLL_INIT_FAILED = 0xC0000142 +def skip_on_low_desktop_heap_memory_subprocess(returncode): + if sys.platform not in ('win32', 'cygwin'): + return + # On Windows, STATUS_DLL_INIT_FAILED is a generic error code that could + # come from any of the DLLs being loaded when a new Python process is + # created. In practice, it's likely a memory allocation failure in the + # desktop heap memory which caused the DLL init failure, especially on + # process created with CREATE_NEW_CONSOLE creation flag. See the article: + # https://learn.microsoft.com/en-us/troubleshoot/windows-server/performance/desktop-heap-limitation-out-of-memory + if returncode == STATUS_DLL_INIT_FAILED: + raise unittest.SkipTest('gh-150436: DLL init failed, likely because ' + 'of low desktop heap memory') diff --git a/Lib/test/support/socket_helper.py b/Lib/test/support/socket_helper.py index a41e487f3e4..66e5379d2c6 100644 --- a/Lib/test/support/socket_helper.py +++ b/Lib/test/support/socket_helper.py @@ -149,6 +149,8 @@ def skip_unless_bind_unix_socket(test): """Decorator for tests requiring a functional bind() for unix sockets.""" if not hasattr(socket, 'AF_UNIX'): return unittest.skip('No UNIX Sockets')(test) + if sys.platform == 'cygwin': + return unittest.skip('UNIX sockets hang on Cygwin')(test) global _bind_nix_socket_error if _bind_nix_socket_error is None: from .os_helper import TESTFN, unlink diff --git a/Lib/test/test__locale.py b/Lib/test/test__locale.py index 11b2c9545a1..29a29ca0c65 100644 --- a/Lib/test/test__locale.py +++ b/Lib/test/test__locale.py @@ -89,6 +89,9 @@ def accept(loc): 'ar_AE': (100, {0: '\u0660', 10: '\u0661\u0660', 99: '\u0669\u0669'}), 'bn_IN': (100, {0: '\u09e6', 10: '\u09e7\u09e6', 99: '\u09ef\u09ef'}), } +if sys.platform == 'cygwin': + count, samples = known_alt_digits['ja_JP'] + known_alt_digits['ja_JP'] = (101, samples) known_era = { 'C': (0, ''), diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index 80ee9e0ba56..59a45a2eda0 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -11,20 +11,30 @@ import abc import _py_abc from inspect import isabstract +from test.support import warnings_helper def test_factory(abc_ABCMeta, abc_get_cache_token): class TestLegacyAPI(unittest.TestCase): def test_abstractproperty_basics(self): - @abc.abstractproperty - def foo(self): pass + with self.assertWarnsRegex( + DeprecationWarning, + 'abstractproperty', + ): + @abc.abstractproperty + def foo(self): pass + self.assertTrue(foo.__isabstractmethod__) def bar(self): pass self.assertNotHasAttr(bar, "__isabstractmethod__") - class C(metaclass=abc_ABCMeta): - @abc.abstractproperty - def foo(self): return 3 + with self.assertWarnsRegex( + DeprecationWarning, + 'abstractproperty', + ): + class C(metaclass=abc_ABCMeta): + @abc.abstractproperty + def foo(self): return 3 self.assertRaises(TypeError, C) class D(C): @property @@ -33,16 +43,26 @@ def foo(self): return super().foo self.assertFalse(getattr(D.foo, "__isabstractmethod__", False)) def test_abstractclassmethod_basics(self): - @abc.abstractclassmethod - def foo(cls): pass + with self.assertWarnsRegex( + DeprecationWarning, + 'abstractclassmethod', + ): + @abc.abstractclassmethod + def foo(cls): pass + self.assertTrue(foo.__isabstractmethod__) @classmethod def bar(cls): pass self.assertFalse(getattr(bar, "__isabstractmethod__", False)) - class C(metaclass=abc_ABCMeta): - @abc.abstractclassmethod - def foo(cls): return cls.__name__ + with self.assertWarnsRegex( + DeprecationWarning, + 'abstractclassmethod', + ): + class C(metaclass=abc_ABCMeta): + @abc.abstractclassmethod + def foo(cls): return cls.__name__ + self.assertRaises(TypeError, C) class D(C): @classmethod @@ -51,16 +71,26 @@ def foo(cls): return super().foo() self.assertEqual(D().foo(), 'D') def test_abstractstaticmethod_basics(self): - @abc.abstractstaticmethod - def foo(): pass + with self.assertWarnsRegex( + DeprecationWarning, + 'abstractstaticmethod', + ): + @abc.abstractstaticmethod + def foo(): pass + self.assertTrue(foo.__isabstractmethod__) @staticmethod def bar(): pass self.assertFalse(getattr(bar, "__isabstractmethod__", False)) - class C(metaclass=abc_ABCMeta): - @abc.abstractstaticmethod - def foo(): return 3 + with self.assertWarnsRegex( + DeprecationWarning, + 'abstractstaticmethod', + ): + class C(metaclass=abc_ABCMeta): + @abc.abstractstaticmethod + def foo(): return 3 + self.assertRaises(TypeError, C) class D(C): @staticmethod @@ -168,6 +198,7 @@ def method_two(self): msg = r"class C without an implementation for abstract methods 'method_one', 'method_two'" self.assertRaisesRegex(TypeError, msg, C) + @warnings_helper.ignore_warnings(category=DeprecationWarning) def test_abstractmethod_integration(self): for abstractthing in [abc.abstractmethod, abc.abstractproperty, abc.abstractclassmethod, diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index f7fa56a6e4b..23d9f3c9667 100755 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -14,15 +14,10 @@ import operator import struct import sys -import warnings import array from array import _array_reconstructor as array_reconstructor -with warnings.catch_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - sizeof_wchar = array.array('u').itemsize - class ArraySubclass(array.array): pass @@ -31,9 +26,7 @@ class ArraySubclassWithKwargs(array.array): def __init__(self, typecode, newarg=None): array.array.__init__(self) -typecodes = ( - 'u', 'w', 'b', 'B', 'h', 'H', 'i', 'I', 'l', 'L', - 'f', 'd', 'q', 'Q', 'e', 'Zf', 'Zd') +typecodes = array.typecodes class MiscTest(unittest.TestCase): @@ -135,14 +128,6 @@ def test_typecodes(self): class ArrayReconstructorTest(unittest.TestCase): - def setUp(self): - self.enterContext(warnings.catch_warnings()) - warnings.filterwarnings( - "ignore", - message="The 'u' type code is deprecated and " - "will be removed in Python 3.16", - category=DeprecationWarning) - def test_error(self): self.assertRaises(TypeError, array_reconstructor, "", "b", 0, b"") @@ -242,12 +227,11 @@ def test_unicode(self): ) for testcase in testcases: mformat_code, encoding = testcase - for c in 'uw': - a = array.array(c, teststr) - b = array_reconstructor( - array.array, c, mformat_code, teststr.encode(encoding)) - self.assertEqual(a, b, - msg="{0!r} != {1!r}; testcase={2!r}".format(a, b, testcase)) + a = array.array('w', teststr) + b = array_reconstructor( + array.array, 'w', mformat_code, teststr.encode(encoding)) + self.assertEqual(a, b, + msg="{0!r} != {1!r}; testcase={2!r}".format(a, b, testcase)) class BaseTest: @@ -259,14 +243,6 @@ class BaseTest: # outside: An entry that is not in example # minitemsize: the minimum guaranteed itemsize - def setUp(self): - self.enterContext(warnings.catch_warnings()) - warnings.filterwarnings( - "ignore", - message="The 'u' type code is deprecated and " - "will be removed in Python 3.16", - category=DeprecationWarning) - def assertEntryEqual(self, entry1, entry2): self.assertEqual(entry1, entry2) @@ -299,7 +275,7 @@ def test_buffer_info(self): self.assertEqual(bi[1], len(a)) def test_byteswap(self): - if self.typecode in ('u', 'w'): + if self.typecode == 'w': example = '\U00100100' else: example = self.example @@ -1167,7 +1143,7 @@ def test_buffer(self): self.assertEqual(m.tobytes(), expected) self.assertRaises(BufferError, a.frombytes, a.tobytes()) self.assertEqual(m.tobytes(), expected) - if self.typecode in ('u', 'w'): + if self.typecode == 'w': self.assertRaises(BufferError, a.fromunicode, a.tounicode()) self.assertEqual(m.tobytes(), expected) self.assertRaises(BufferError, operator.imul, a, 2) @@ -1223,7 +1199,7 @@ def test_sizeof_without_buffer(self): support.check_sizeof(self, a, basesize) def test_initialize_with_unicode(self): - if self.typecode not in ('u', 'w'): + if self.typecode != 'w': with self.assertRaises(TypeError) as cm: a = array.array(self.typecode, 'foo') self.assertIn("cannot use a str", str(cm.exception)) @@ -1232,7 +1208,6 @@ def test_initialize_with_unicode(self): self.assertIn("cannot use a unicode array", str(cm.exception)) else: a = array.array(self.typecode, "foo") - a = array.array(self.typecode, array.array('u', 'foo')) a = array.array(self.typecode, array.array('w', 'foo')) @support.cpython_only @@ -1258,12 +1233,12 @@ def test_setitem(self): self.assertRaises(TypeError, a.__setitem__, 0, self.example[:2]) class UnicodeTest(StringTest, unittest.TestCase): - typecode = 'u' + typecode = 'w' example = '\x01\u263a\x00\ufeff' smallerexample = '\x01\u263a\x00\ufefe' biggerexample = '\x01\u263a\x01\ufeff' outside = str('\x33') - minitemsize = sizeof_wchar + minitemsize = 4 def test_unicode(self): self.assertRaises(TypeError, array.array, 'b', 'foo') @@ -1285,36 +1260,6 @@ def test_unicode(self): self.assertRaises(TypeError, a.fromunicode) - def test_issue17223(self): - if self.typecode == 'u' and sizeof_wchar == 2: - # PyUnicode_FromUnicode() cannot fail with 16-bit wchar_t - self.skipTest("specific to 32-bit wchar_t") - - # this used to crash - # U+FFFFFFFF is an invalid code point in Unicode 6.0 - invalid_str = b'\xff\xff\xff\xff' - - a = array.array(self.typecode, invalid_str) - self.assertRaises(ValueError, a.tounicode) - self.assertRaises(ValueError, str, a) - - def test_typecode_u_deprecation(self): - with self.assertWarns(DeprecationWarning): - array.array("u") - - def test_empty_string_mem_leak_gh140474(self): - with warnings.catch_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - for _ in range(1000): - a = array.array('u', '') - self.assertEqual(len(a), 0) - self.assertEqual(a.typecode, 'u') - - -class UCS4Test(UnicodeTest): - typecode = 'w' - minitemsize = 4 - class NumberTest(BaseTest): diff --git a/Lib/test/test_ast/test_ast.py b/Lib/test/test_ast/test_ast.py index af8b334da03..0112c9163fd 100644 --- a/Lib/test/test_ast/test_ast.py +++ b/Lib/test/test_ast/test_ast.py @@ -523,6 +523,12 @@ def test_classattrs(self): self.assertIs(ast.Constant(None).value, None) self.assertIs(ast.Constant(...).value, ...) + with self.assertWarns(DeprecationWarning): + ast.Tuple().dims + + with self.assertWarns(DeprecationWarning): + ast.Tuple().dims = 3 + def test_constant_subclasses(self): class N(ast.Constant): def __init__(self, *args, **kwargs): @@ -1100,6 +1106,38 @@ def test_tstring(self): self.assertIsInstance(tree.body[0].value.values[0], ast.Constant) self.assertIsInstance(tree.body[0].value.values[1], ast.Interpolation) + def test_deprecated(self): + with self.assertWarns(DeprecationWarning): + ast.slice + + with self.assertWarns(DeprecationWarning): + ast.Index + + with self.assertWarns(DeprecationWarning): + ast.ExtSlice + + with self.assertWarns(DeprecationWarning): + ast.Suite + + with self.assertWarns(DeprecationWarning): + ast.AugLoad + + with self.assertWarns(DeprecationWarning): + ast.AugStore + + with self.assertWarns(DeprecationWarning): + ast.Param + + namespace = {} + exec("from ast import *", namespace) + self.assertNotIn("slice", namespace) + self.assertNotIn("Index", namespace) + self.assertNotIn("ExtSlice", namespace) + self.assertNotIn("Suite", namespace) + self.assertNotIn("AugLoad", namespace) + self.assertNotIn("AugStore", namespace) + self.assertNotIn("Param", namespace) + def test_filter_syntax_warnings_by_module(self): filename = support.findfile('test_import/data/syntax_warnings.py') with open(filename, 'rb') as f: @@ -1139,8 +1177,9 @@ def iter_ast_classes(): def do(cls): if cls.__module__ != 'ast': return - if cls is ast.Index: - return + with warnings.catch_warnings(action="ignore", category=DeprecationWarning): + if cls is ast.Index: + return # Don't attempt to create instances of abstract AST nodes if _ast._is_abstract(cls): return diff --git a/Lib/test/test_asyncio/test_sendfile.py b/Lib/test/test_asyncio/test_sendfile.py index dcd963b3355..7afd7de3bb9 100644 --- a/Lib/test/test_asyncio/test_sendfile.py +++ b/Lib/test/test_asyncio/test_sendfile.py @@ -228,6 +228,61 @@ def test_sock_sendfile_zero_size(self): self.assertEqual(ret, 0) self.assertEqual(self.file.tell(), 0) + def check_sock_sendfile_offset(self, data, offset, force_fallback=False): + sock, proto = self.prepare_socksendfile() + with tempfile.TemporaryFile() as f: + f.write(data) + f.flush() + self.assertEqual(f.tell(), len(data)) + + if force_fallback: + async def _sock_sendfile_fail(sock, file, offset, count): + raise asyncio.exceptions.SendfileNotAvailableError() + with support.swap_attr(self.loop, '_sock_sendfile_native', _sock_sendfile_fail): + ret = self.run_loop(self.loop.sock_sendfile(sock, f, offset, None)) + else: + ret = self.run_loop(self.loop.sock_sendfile(sock, f, offset, None)) + + self.assertEqual(f.tell(), len(data)) + + sock.close() + self.run_loop(proto.wait_closed()) + + self.assertEqual(ret, len(data) - offset) + + + def test_sock_sendfile_offset(self): + data = b'abcdef' + for offset in (0, len(data) // 2, len(data)): + for force_fallback in (False, True): + with self.subTest(offset=offset, force_fallback=force_fallback): + self.check_sock_sendfile_offset(data, offset, force_fallback) + + def check_sendfile_offset(self, offset, fallback): + srv_proto, cli_proto = self.prepare_sendfile() + self.file.seek(123) + coro = self.loop.sendfile(cli_proto.transport, self.file, offset, fallback=fallback) + try: + ret = self.run_loop(coro) + except asyncio.SendfileNotAvailableError: + if fallback: + raise + cli_proto.transport.close() + self.run_loop(srv_proto.done) + return + cli_proto.transport.close() + self.run_loop(srv_proto.done) + self.assertEqual(ret, len(self.DATA) - offset) + self.assertEqual(srv_proto.nbytes, len(self.DATA) - offset) + self.assertEqual(srv_proto.data, self.DATA[offset:]) + self.assertEqual(self.file.tell(), len(self.DATA)) + + def test_sendfile_offset(self): + for offset in (0, len(self.DATA) // 2, len(self.DATA)): + for fallback in (False, True): + with self.subTest(offset=offset, fallback=fallback): + self.check_sendfile_offset(offset, fallback) + def test_sock_sendfile_mix_with_regular_send(self): buf = b"mix_regular_send" * (4 * 1024) # 64 KiB sock, proto = self.prepare_socksendfile() diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py index c08eb7cf261..4ac6b23b712 100644 --- a/Lib/test/test_asyncio/test_subprocess.py +++ b/Lib/test/test_asyncio/test_subprocess.py @@ -1,4 +1,5 @@ import os +import shlex import signal import sys import textwrap @@ -770,9 +771,7 @@ async def check_stdout_output(self, coro, output): def test_create_subprocess_env_shell(self) -> None: async def main() -> None: - executable = sys.executable - if sys.platform == "win32": - executable = f'"{executable}"' + executable = f'"{sys.executable}"' if sys.platform == "win32" else shlex.quote(sys.executable) cmd = f'''{executable} -c "import os, sys; sys.stdout.write(os.getenv('FOO'))"''' env = os.environ.copy() env["FOO"] = "bar" diff --git a/Lib/test/test_asyncio/test_transports.py b/Lib/test/test_asyncio/test_transports.py index dbb572e2e15..1781f1f6775 100644 --- a/Lib/test/test_asyncio/test_transports.py +++ b/Lib/test/test_asyncio/test_transports.py @@ -98,6 +98,26 @@ def get_write_buffer_size(self): self.assertTrue(transport._protocol_paused) self.assertEqual(transport.get_write_buffer_limits(), (128, 256)) + def test_flowcontrol_mixin_compute_write_limits(self): + + class MyTransport(transports._FlowControlMixin, + transports.Transport): + + def get_write_buffer_size(self): + return 0 + + loop = mock.Mock() + transport = MyTransport(loop=loop) + + self.assertEqual(transport.get_write_buffer_limits(), + (16 * 1024, 64 * 1024)) + + transport.set_write_buffer_limits(low=100) + self.assertEqual(transport.get_write_buffer_limits(), (100, 400)) + + transport.set_write_buffer_limits(high=200) + self.assertEqual(transport.get_write_buffer_limits(), (50, 200)) + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py index 7454c8a1539..3213a475127 100644 --- a/Lib/test/test_buffer.py +++ b/Lib/test/test_buffer.py @@ -24,7 +24,6 @@ import sys, array, io, os from decimal import Decimal from fractions import Fraction -from test.support import warnings_helper try: from _testbuffer import * @@ -3261,15 +3260,6 @@ class BEPoint(ctypes.BigEndianStructure): self.assertNotEqual(point, a) self.assertRaises(NotImplementedError, a.tolist) - @warnings_helper.ignore_warnings(category=DeprecationWarning) # gh-80480 array('u') - def test_memoryview_compare_special_cases_deprecated_u_type_code(self): - - # Depends on issue #15625: the struct module does not understand 'u'. - a = array.array('u', 'xyz') - v = memoryview(a) - self.assertNotEqual(a, v) - self.assertNotEqual(v, a) - def test_memoryview_compare_ndim_zero(self): nd1 = ndarray(1729, shape=[], format='@L') diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 81967fb8a83..1d2c105ac04 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -39,7 +39,7 @@ from test.support.script_helper import assert_python_ok from test.support.testcase import ComplexesAreIdenticalMixin from test.support.warnings_helper import check_warnings -from test.support import requires_IEEE_754 +from test.support import requires_IEEE_754, skip_if_double_rounding from unittest.mock import MagicMock, patch try: import pty, signal @@ -47,11 +47,6 @@ pty = signal = None -# Detect evidence of double-rounding: sum() does not always -# get improved accuracy on machines that suffer from double rounding. -x, y = 1e16, 2.9999 # use temporary values to defeat peephole optimizer -HAVE_DOUBLE_ROUNDING = (x + y == 1e16 + 4) - # used as proof of globals being used A_GLOBAL_VALUE = 123 A_SENTINEL = sentinel("A_SENTINEL") @@ -268,7 +263,10 @@ def f_list(): def f_set(): return set(2*x for x in [1,2,3]) - funcs = [f_all, f_any, f_tuple, f_list, f_set] + def f_frozenset(): + return frozenset(2*x for x in [1,2,3]) + + funcs = [f_all, f_any, f_tuple, f_list, f_set, f_frozenset] for f in funcs: # check that generator code object is not duplicated @@ -278,35 +276,37 @@ def f_set(): # check the overriding the builtins works - global all, any, tuple, list, set - saved = all, any, tuple, list, set + global all, any, tuple, list, set, frozenset + saved = all, any, tuple, list, set, frozenset try: all = lambda x : "all" any = lambda x : "any" tuple = lambda x : "tuple" list = lambda x : "list" set = lambda x : "set" + frozenset = lambda x : "frozenset" overridden_outputs = [f() for f in funcs] finally: - all, any, tuple, list, set = saved + all, any, tuple, list, set, frozenset = saved - self.assertEqual(overridden_outputs, ['all', 'any', 'tuple', 'list', 'set']) + self.assertEqual(overridden_outputs, ['all', 'any', 'tuple', 'list', 'set', 'frozenset']) # Now repeat, overriding the builtins module as well - saved = all, any, tuple, list, set + saved = all, any, tuple, list, set, frozenset try: builtins.all = all = lambda x : "all" builtins.any = any = lambda x : "any" builtins.tuple = tuple = lambda x : "tuple" builtins.list = list = lambda x : "list" builtins.set = set = lambda x : "set" + builtins.frozenset = frozenset = lambda x : "frozenset" overridden_outputs = [f() for f in funcs] finally: - all, any, tuple, list, set = saved - builtins.all, builtins.any, builtins.tuple, builtins.list, builtins.set = saved + all, any, tuple, list, set, frozenset = saved + builtins.all, builtins.any, builtins.tuple, builtins.list, builtins.set, builtins.frozenset = saved - self.assertEqual(overridden_outputs, ['all', 'any', 'tuple', 'list', 'set']) + self.assertEqual(overridden_outputs, ['all', 'any', 'tuple', 'list', 'set', 'frozenset']) def test_builtin_call_async_genexpr_no_crash(self): async def f_all(): @@ -1956,16 +1956,33 @@ def test_sentinel(self): with self.assertRaises(TypeError): class SubSentinel(sentinel): pass + + def test_sentinel_attributes(self): + missing = sentinel("MISSING") with self.assertRaises(TypeError): sentinel.attribute = "value" with self.assertRaises(AttributeError): - missing.__name__ = "CHANGED" + missing.attribute = "value" with self.assertRaises(AttributeError): - missing.__module__ = "changed" + missing.__name__ = "CHANGED" + missing.__module__ = "changed" + self.assertEqual(missing.__module__, "changed") with self.assertRaises(AttributeError): del missing.__name__ + del missing.__module__ with self.assertRaises(AttributeError): - del missing.__module__ + missing.__module__ + + def test_sentinel_repr(self): + with_repr = sentinel("WITH_REPR", repr="custom") + without_repr = sentinel("WITHOUT_REPR", repr=None) + self.assertEqual(repr(with_repr), "custom") + self.assertEqual(repr(without_repr), "WITHOUT_REPR") + self.assertEqual(str(with_repr), "custom") + self.assertEqual(str(without_repr), "WITHOUT_REPR") + + with self.assertRaisesRegex(TypeError, "repr.*str or None"): + sentinel("BAD_REPR", repr=42) def test_sentinel_pickle(self): for proto in range(pickle.HIGHEST_PROTOCOL + 1): @@ -2213,8 +2230,7 @@ def __getitem__(self, index): complex(2, -0.0)) @requires_IEEE_754 - @unittest.skipIf(HAVE_DOUBLE_ROUNDING, - "sum accuracy not guaranteed on machines with double rounding") + @skip_if_double_rounding @support.cpython_only # Other implementations may choose a different algorithm def test_sum_accuracy(self): self.assertEqual(sum([0.1] * 10), 1.0) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index b1cdbe04765..e0e8dd4eccf 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -2700,10 +2700,6 @@ def iconcat(b, a): # MODIFIES! b.wait() a += c - def irepeat(b, a): # MODIFIES! - b.wait() - a *= 2 - def subscript(b, a): b.wait() try: assert a[0] != 0xdd @@ -2837,9 +2833,10 @@ def check(funcs, a=None, *args): check([clear] + [repeat] * 10) check([clear] + [iconcat] * 10) - check([clear] + [irepeat] * 10) check([clear] + [ass_subscript] * 10) check([clear] + [repr_] * 10) + # gh-148605: Do not test "a *= 2" since it allocates up to 4 GiB using + # 10 threads # value errors diff --git a/Lib/test/test_c_locale_coercion.py b/Lib/test/test_c_locale_coercion.py index 340bec3c71b..52323a0ec0a 100644 --- a/Lib/test/test_c_locale_coercion.py +++ b/Lib/test/test_c_locale_coercion.py @@ -47,9 +47,8 @@ # FS encoding is UTF-8 on macOS EXPECTED_C_LOCALE_FS_ENCODING = "utf-8" elif sys.platform == "cygwin": - # Cygwin defaults to using C.UTF-8 - # TODO: Work out a robust dynamic test for this that doesn't rely on - # CPython's own locale handling machinery + DEFAULT_LOCALE_IS_C = False + DEFAULT_ENCODING = "utf-8" EXPECT_COERCION_IN_DEFAULT_LOCALE = False elif sys.platform == "vxworks": # VxWorks defaults to using UTF-8 for all system interfaces diff --git a/Lib/test/test_capi/test_object.py b/Lib/test/test_capi/test_object.py index e6fd068dc20..e5c50902a01 100644 --- a/Lib/test/test_capi/test_object.py +++ b/Lib/test/test_capi/test_object.py @@ -82,6 +82,12 @@ def test_pysentinel_new(self): self.assertEqual(no_module.__name__, "NO_MODULE") self.assertIs(no_module.__module__, None) + with_repr = _testcapi.pysentinel_new("WITH_REPR", __name__, "custom repr") + self.assertIs(type(with_repr), sentinel) + self.assertEqual(with_repr.__name__, "WITH_REPR") + self.assertEqual(with_repr.__module__, __name__) + self.assertEqual(repr(with_repr), "custom repr") + globals()["CAPI_SENTINEL"] = marker self.addCleanup(globals().pop, "CAPI_SENTINEL", None) self.assertIs(pickle.loads(pickle.dumps(marker)), marker) diff --git a/Lib/test/test_capi/test_opt.py b/Lib/test/test_capi/test_opt.py index 2f606c2c6eb..2248920c266 100644 --- a/Lib/test/test_capi/test_opt.py +++ b/Lib/test/test_capi/test_opt.py @@ -3154,7 +3154,7 @@ def testfunc(n): uops = get_opnames(ex) self.assertNotIn("_CHECK_IS_NOT_PY_CALLABLE_KW", uops) - def test_call_len_string(self): + def test_call_len_string_frozen_set_dict(self): def testfunc(n): for _ in range(n): _ = len("abc") @@ -3162,12 +3162,14 @@ def testfunc(n): _ = len(d) _ = len(b"def") _ = len(b"") + _ = len(FROZEN_SET_CONST) + _ = len(FROZEN_DICT_CONST) _, ex = self._run_with_optimizer(testfunc, TIER2_THRESHOLD) self.assertIsNotNone(ex) uops = get_opnames(ex) self.assertNotIn("_CALL_LEN", uops) - self.assertGreaterEqual(count_ops(ex, "_LOAD_CONST_INLINE_BORROW"), 8) + self.assertGreaterEqual(count_ops(ex, "_LOAD_CONST_INLINE_BORROW"), 10) def test_call_len_known_length_small_int(self): # Make sure that len(t) is optimized for a tuple of length 5. @@ -5922,6 +5924,44 @@ def __next__(self): """), PYTHON_JIT="1", PYTHON_JIT_STRESS="1") self.assertEqual(result[0].rc, 0, result) + def test_149335_trace_buffer_guard(self): + # https://github.com/python/cpython/issues/149335 + + result = script_helper.run_python_until_end('-c', textwrap.dedent(""" + import sys + + def f1(): + for i_3178 in 0, 2, 10: + mv162 = 162 + + mv3 = mv1 = mv_165 = mv16 = \ + mv167 = mv168 = \ + mv169 = \ + mv_1403_170 = \ + 169 + + mv_1403_170 + + mv_172 = mv_3 = mv_4 = mv175 = mv176 = mv17 = mv178 = mv179 = mv0 = mv1 = mv182 = ( + mv3 + ) = mv4 = mv185 = mv186 = mv187 = mv18 = mv189 = mv0 = mv1 = mv192 = mv3 = mv4 = ( + mv195 + ) = mv196 = mv197 = mv_198 = mv19 = mv0 = mv1 = mv2 = mv3 = mv4 = mv05 = mv06 = ( + mv07 + ) = mv08 = mv09 = mv0 = mv1 = mv2 = mv3 = mv4 = mv15 = mv16 = mv17 = mv18 = mv19 = ( + mv0 + ) = mv1 = mv_2 = mv3 = mv4 = mv_25 = mv_26 = mv_27 = mv_28 = mv_29 = mv0 = mv1 = ( + mv2 + ) = mv_1403 = mv4 = mv35 = mv36 = mv37 = mv38 = mv39 = mv0 = -sys.maxsize / 3 + + mv1 = mv_12 = mv3 = mv_14 = mv45 = sys.float_info.epsilon + mv46 = sys.float_info.epsilon + + for i in range(15000): + f1() + """), PYTHON_JIT="1") + self.assertEqual(result[0].rc, 0, result) + def test_144068_daemon_thread_jit_cleanup(self): result = script_helper.run_python_until_end('-c', textwrap.dedent(""" import threading diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index 7f9e44d7000..3b556ec3144 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -1036,6 +1036,7 @@ def test_python_legacy_windows_stdio(self): p = subprocess.run([sys.executable, "-c", code], creationflags=subprocess.CREATE_NEW_CONSOLE, env=env) + support.skip_on_low_desktop_heap_memory_subprocess(p.returncode) self.assertEqual(p.returncode, 0) # Then test that FIleIO is used when PYTHONLEGACYWINDOWSSTDIO is set. @@ -1044,6 +1045,7 @@ def test_python_legacy_windows_stdio(self): p = subprocess.run([sys.executable, "-c", code], creationflags=subprocess.CREATE_NEW_CONSOLE, env=env) + support.skip_on_low_desktop_heap_memory_subprocess(p.returncode) self.assertEqual(p.returncode, 0) @unittest.skipIf("-fsanitize" in sysconfig.get_config_vars().get('PY_CFLAGS', ()), diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 79c8a7ef886..8fdd08df9e4 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -1892,9 +1892,11 @@ def test_copy(self): self.assertIsNot(dup, orig) self.assertEqual(dup, orig) self.assertTrue(orig._is_text_encoding) + self.assertIsInstance(orig._expat_decoding_table, tuple) self.assertEqual(dup.encode, orig.encode) self.assertEqual(dup.name, orig.name) self.assertEqual(dup.incrementalencoder, orig.incrementalencoder) + self.assertIs(dup._expat_decoding_table, orig._expat_decoding_table) # Test a CodecInfo with _is_text_encoding equal to false. orig = codecs.lookup("base64") @@ -1902,9 +1904,11 @@ def test_copy(self): self.assertIsNot(dup, orig) self.assertEqual(dup, orig) self.assertFalse(orig._is_text_encoding) + self.assertNotHasAttr(orig, '_expat_decoding_table') self.assertEqual(dup.encode, orig.encode) self.assertEqual(dup.name, orig.name) self.assertEqual(dup.incrementalencoder, orig.incrementalencoder) + self.assertNotHasAttr(dup, '_expat_decoding_table') def test_deepcopy(self): orig = codecs.lookup('utf-8') @@ -1912,9 +1916,11 @@ def test_deepcopy(self): self.assertIsNot(dup, orig) self.assertEqual(dup, orig) self.assertTrue(orig._is_text_encoding) + self.assertIsInstance(orig._expat_decoding_table, tuple) self.assertEqual(dup.encode, orig.encode) self.assertEqual(dup.name, orig.name) self.assertEqual(dup.incrementalencoder, orig.incrementalencoder) + self.assertIs(dup._expat_decoding_table, orig._expat_decoding_table) # Test a CodecInfo with _is_text_encoding equal to false. orig = codecs.lookup("base64") @@ -1922,9 +1928,11 @@ def test_deepcopy(self): self.assertIsNot(dup, orig) self.assertEqual(dup, orig) self.assertFalse(orig._is_text_encoding) + self.assertNotHasAttr(orig, '_expat_decoding_table') self.assertEqual(dup.encode, orig.encode) self.assertEqual(dup.name, orig.name) self.assertEqual(dup.incrementalencoder, orig.incrementalencoder) + self.assertNotHasAttr(dup, '_expat_decoding_table') def test_pickle(self): codec_info = codecs.lookup('utf-8') @@ -1940,6 +1948,8 @@ def test_pickle(self): unpickled_codec_info.incrementalencoder ) self.assertTrue(unpickled_codec_info._is_text_encoding) + self.assertEqual(unpickled_codec_info._expat_decoding_table, + codec_info._expat_decoding_table) # Test a CodecInfo with _is_text_encoding equal to false. codec_info = codecs.lookup('base64') @@ -1955,6 +1965,7 @@ def test_pickle(self): unpickled_codec_info.incrementalencoder ) self.assertFalse(unpickled_codec_info._is_text_encoding) + self.assertNotHasAttr(unpickled_codec_info, '_expat_decoding_table') class StreamReaderTest(unittest.TestCase): diff --git a/Lib/test/test_compiler_codegen.py b/Lib/test/test_compiler_codegen.py index d02937c84d9..36058854a41 100644 --- a/Lib/test/test_compiler_codegen.py +++ b/Lib/test/test_compiler_codegen.py @@ -161,3 +161,34 @@ def test_syntax_error__return_not_in_function(self): self.assertIsNone(cm.exception.text) self.assertEqual(cm.exception.offset, 1) self.assertEqual(cm.exception.end_offset, 10) + + def test_frozenset_optimization(self): + l1 = self.Label() + snippet = "frozenset({1, 2, 3})" + expected = [ + ('RESUME', 0), + ('ANNOTATIONS_PLACEHOLDER', None), + ('LOAD_NAME', 0), + ('COPY', 1), + ('LOAD_COMMON_CONSTANT', 12), + ('IS_OP', 0), + ('POP_JUMP_IF_FALSE', l1), + ('POP_TOP', None), + ('LOAD_CONST', 1), + ('LOAD_CONST', 2), + ('LOAD_CONST', 3), + ('BUILD_SET', 3), + ('CALL_INTRINSIC_1', 12), + ('JUMP', 0), + l1, + ('PUSH_NULL', None), + ('LOAD_CONST', 1), + ('LOAD_CONST', 2), + ('LOAD_CONST', 3), + ('BUILD_SET', 3), + ('CALL', 1), + ('POP_TOP', None), + ('LOAD_CONST', 0), + ('RETURN_VALUE', None) + ] + self.codegen_test(snippet, expected) diff --git a/Lib/test/test_concurrent_futures/test_init.py b/Lib/test/test_concurrent_futures/test_init.py index 5ea543bf748..ca612db17ce 100644 --- a/Lib/test/test_concurrent_futures/test_init.py +++ b/Lib/test/test_concurrent_futures/test_init.py @@ -147,6 +147,8 @@ def test_spawn(self): self._test(ProcessPoolSpawnFailingInitializerTest) @support.skip_if_sanitizer("TSAN doesn't support threads after fork", thread=True) + @unittest.skipIf(sys.platform == "cygwin", + "Forkserver is not available on Cygwin") def test_forkserver(self): self._test(ProcessPoolForkserverFailingInitializerTest) diff --git a/Lib/test/test_concurrent_futures/test_process_pool.py b/Lib/test/test_concurrent_futures/test_process_pool.py index 731419a48bd..da70d910dc3 100644 --- a/Lib/test/test_concurrent_futures/test_process_pool.py +++ b/Lib/test/test_concurrent_futures/test_process_pool.py @@ -115,11 +115,12 @@ def test_traceback_when_child_process_terminates_abruptly(self): with self.assertRaises(BrokenProcessPool) as bpe: future.result() - cause = bpe.exception.__cause__ - self.assertIsInstance(cause, futures.process._RemoteTraceback) - self.assertIn( - f"terminated abruptly with exit code {exit_code}", cause.tb - ) + if sys.platform != 'cygwin': + cause = bpe.exception.__cause__ + self.assertIsInstance(cause, futures.process._RemoteTraceback) + self.assertIn( + f"terminated abruptly with exit code {exit_code}", cause.tb + ) @warnings_helper.ignore_fork_in_thread_deprecation_warnings() @hashlib_helper.requires_hashdigest('md5') diff --git a/Lib/test/test_concurrent_futures/util.py b/Lib/test/test_concurrent_futures/util.py index 2a9e55152b8..006360c8d94 100644 --- a/Lib/test/test_concurrent_futures/util.py +++ b/Lib/test/test_concurrent_futures/util.py @@ -135,7 +135,7 @@ def get_context(self): _check_system_limits() except NotImplementedError: self.skipTest("ProcessPoolExecutor unavailable on this system") - if sys.platform == "win32": + if sys.platform in ("win32", "cygwin"): self.skipTest("require unix system") if support.check_sanitizer(thread=True): self.skipTest("TSAN doesn't support threads after fork") diff --git a/Lib/test/test_crossinterp.py b/Lib/test/test_crossinterp.py index 4e536211168..f4bf5a66ad2 100644 --- a/Lib/test/test_crossinterp.py +++ b/Lib/test/test_crossinterp.py @@ -157,6 +157,10 @@ def ignore_byteswarning(): {}, {1: 7, 2: 8, 3: 9}, {1: [1], 2: (2,), 3: {3: 4}}, + # frozendict + frozendict(), + frozendict({1: 7, 2: 8, 3: 9}), + frozendict({1: [1], 2: (2,), 3: {3: 4}, 4: frozendict({5: 6})}), # set set(), {1, 2, 3}, diff --git a/Lib/test/test_ctypes/test_parameters.py b/Lib/test/test_ctypes/test_parameters.py index 46f8ff93efa..6dadb7b410d 100644 --- a/Lib/test/test_ctypes/test_parameters.py +++ b/Lib/test/test_ctypes/test_parameters.py @@ -1,6 +1,7 @@ import sys import unittest import test.support +import ctypes from ctypes import (CDLL, PyDLL, ArgumentError, Structure, Array, Union, _Pointer, _SimpleCData, _CFuncPtr, @@ -247,6 +248,13 @@ def test_parameter_repr(self): self.assertRegex(repr(c_char_p.from_param(b'hihi')), r"^$") self.assertRegex(repr(c_wchar_p.from_param('hihi')), r"^$") self.assertRegex(repr(c_void_p.from_param(0x12)), r"^$") + if hasattr(ctypes, 'c_double_complex'): + self.assertRegex(repr(ctypes.c_double_complex.from_param(0)), + r"^$") + self.assertRegex(repr(ctypes.c_float_complex.from_param(0)), + r"^$") + self.assertRegex(repr(ctypes.c_longdouble_complex.from_param(0)), + r"^$") @test.support.cpython_only def test_from_param_result_refcount(self): diff --git a/Lib/test/test_dataclasses/__init__.py b/Lib/test/test_dataclasses/__init__.py index dcd6a3ef9ab..2468e3e64dd 100644 --- a/Lib/test/test_dataclasses/__init__.py +++ b/Lib/test/test_dataclasses/__init__.py @@ -5289,6 +5289,15 @@ class A: self.assertEqual(len(fs), 1) self.assertEqual(fs[0].name, 'x') + def test_makedataclass_with_qualname(self): + A = make_dataclass("A", ['a'], qualname='ClassA') + self.assertEqual(A.__qualname__, 'ClassA') + + B = make_dataclass("B", ['b'], qualname='module1.ClassB') + self.assertEqual(B.__qualname__, 'module1.ClassB') + + C = make_dataclass("C", ['c']) + self.assertEqual(C.__qualname__, 'C') class TestZeroArgumentSuperWithSlots(unittest.TestCase): def test_zero_argument_super(self): diff --git a/Lib/test/test_defaultdict.py b/Lib/test/test_defaultdict.py index a193eb10f16..cc78f01e3e2 100644 --- a/Lib/test/test_defaultdict.py +++ b/Lib/test/test_defaultdict.py @@ -186,6 +186,18 @@ def test_union(self): with self.assertRaises(TypeError): i |= None + # frozendict + i_fd = i | frozendict(s) + self.assertIs(type(i_fd), defaultdict) + self.assertIs(i_fd.default_factory, int) + self.assertDictEqual(i_fd, {1: "one", 2: 2, 0: "zero"}) + self.assertEqual(list(i_fd), [1, 2, 0]) + + fd_i = frozendict(s) | i + self.assertIs(type(fd_i), frozendict) + self.assertEqual(fd_i, {1: "one", 2: 2, 0: "zero"}) + self.assertEqual(list(fd_i), [0, 1, 2]) + def test_factory_conflict_with_set_value(self): key = "conflict_test" count = 0 diff --git a/Lib/test/test_descrtut.py b/Lib/test/test_descrtut.py index 425fb85e935..828440a993a 100644 --- a/Lib/test/test_descrtut.py +++ b/Lib/test/test_descrtut.py @@ -168,56 +168,54 @@ def merge(self, other): >>> import pprint >>> pprint.pprint(dir(list)) # like list.__dict__.keys(), but sorted - [ - '__add__', - '__class__', - '__class_getitem__', - '__contains__', - '__delattr__', - '__delitem__', - '__dir__', - '__doc__', - '__eq__', - '__format__', - '__ge__', - '__getattribute__', - '__getitem__', - '__getstate__', - '__gt__', - '__hash__', - '__iadd__', - '__imul__', - '__init__', - '__init_subclass__', - '__iter__', - '__le__', - '__len__', - '__lt__', - '__mul__', - '__ne__', - '__new__', - '__reduce__', - '__reduce_ex__', - '__repr__', - '__reversed__', - '__rmul__', - '__setattr__', - '__setitem__', - '__sizeof__', - '__str__', - '__subclasshook__', - 'append', - 'clear', - 'copy', - 'count', - 'extend', - 'index', - 'insert', - 'pop', - 'remove', - 'reverse', - 'sort', - ] + ['__add__', + '__class__', + '__class_getitem__', + '__contains__', + '__delattr__', + '__delitem__', + '__dir__', + '__doc__', + '__eq__', + '__format__', + '__ge__', + '__getattribute__', + '__getitem__', + '__getstate__', + '__gt__', + '__hash__', + '__iadd__', + '__imul__', + '__init__', + '__init_subclass__', + '__iter__', + '__le__', + '__len__', + '__lt__', + '__mul__', + '__ne__', + '__new__', + '__reduce__', + '__reduce_ex__', + '__repr__', + '__reversed__', + '__rmul__', + '__setattr__', + '__setitem__', + '__sizeof__', + '__str__', + '__subclasshook__', + 'append', + 'clear', + 'copy', + 'count', + 'extend', + 'index', + 'insert', + 'pop', + 'remove', + 'reverse', + 'sort'] The new introspection API gives more information than the old one: in addition to the regular methods, it also shows the methods that are diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index 4efb066d4fd..f2658680923 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -1903,10 +1903,35 @@ def test_hash(self): self.assertEqual(hash(frozendict(x=1, y=2)), hash(frozendict(y=2, x=1))) + # Check that hash() computes the hash of (key, value) pairs + cases = [ + frozendict(a=False, b=True, c=True), + frozendict(a=True, b=False, c=True), + frozendict(a=True, b=True, c=False), + frozendict({False: "a", "b": True, "c": True}), + frozendict({"a": "b", False: True, True: "c"}), + ] + hashes = {hash(fd) for fd in cases} + self.assertEqual(len(hashes), len(cases)) + fd = frozendict(x=[1], y=[2]) with self.assertRaisesRegex(TypeError, "unhashable type: 'list'"): hash(fd) + @support.cpython_only + def test_hash_cpython(self): + # Check that hash(frozendict) implementation is: + # hash(frozenset(fd.items())) + for fd in ( + frozendict(), + frozendict(x=1, y=2), + frozendict(y=2, x=1), + frozendict(a=False, b=True, c=True), + frozendict.fromkeys('abc'), + ): + with self.subTest(fd=fd): + self.assertEqual(hash(fd), hash(frozenset(fd.items()))) + def test_fromkeys(self): self.assertEqual(frozendict.fromkeys('abc'), frozendict(a=None, b=None, c=None)) diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index 8be10458581..c75992761d1 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -15,7 +15,8 @@ import unittest from test.support import (captured_stdout, requires_debug_ranges, requires_specialization, cpython_only, - os_helper, import_helper, reset_code) + os_helper, import_helper, reset_code, + requires_jit_enabled) from test.support.bytecode_helper import BytecodeTestCase @@ -1481,6 +1482,37 @@ def f(): self.assertEqual(assem_op, assem_cache) + @cpython_only + @requires_specialization + @requires_jit_enabled + def test_show_jit(self): + def loop(n): + for i in range(n): + pass + for _ in range(10): + loop(500) + line = loop.__code__.co_firstlineno + loop_dis = f"""\ +{line} RESUME_CHECK_JIT 0 + +{line+1} LOAD_GLOBAL_BUILTIN 1 (range + NULL) + LOAD_FAST_BORROW 0 (n) + CALL_BUILTIN_CLASS 1 + GET_ITER 0 + L1: FOR_ITER_RANGE 3 (to L2) + STORE_FAST 1 (i) + +{line+2} ENTER_EXECUTOR 0 + +{line+1} L2: END_FOR + POP_ITER + LOAD_COMMON_CONSTANT 7 (None) + RETURN_VALUE +""" + got = self.get_disassembly(loop, adaptive=True, show_jit=True) + self.do_disassembly_compare(got, loop_dis) + + class DisWithFileTests(DisTests): # Run the tests again, using the file arg instead of print diff --git a/Lib/test/test_email/data/msg_26.txt b/Lib/test/test_email/data/msg_26.txt index 5cc6c8178c9..58efaa9c9a8 100644 --- a/Lib/test/test_email/data/msg_26.txt +++ b/Lib/test/test_email/data/msg_26.txt @@ -1,46 +1,46 @@ -Received: from xcar [192.168.0.2] by jeeves.wooster.local - (SMTPD32-7.07 EVAL) id AFF92F0214; Sun, 12 May 2002 08:55:37 +0100 -Date: Sun, 12 May 2002 08:56:15 +0100 -From: Father Time -To: timbo@jeeves.wooster.local -Subject: IMAP file test -Message-ID: <6df65d354b.father.time@rpc.wooster.local> -X-Organization: Home -User-Agent: Messenger-Pro/2.50a (MsgServe/1.50) (RISC-OS/4.02) POPstar/2.03 -MIME-Version: 1.0 -Content-Type: multipart/mixed; boundary="1618492860--2051301190--113853680" -Status: R -X-UIDL: 319998302 - -This message is in MIME format which your mailer apparently does not support. -You either require a newer version of your software which supports MIME, or -a separate MIME decoding utility. Alternatively, ask the sender of this -message to resend it in a different format. - ---1618492860--2051301190--113853680 -Content-Type: text/plain; charset=us-ascii - -Simple email with attachment. - - ---1618492860--2051301190--113853680 -Content-Type: application/riscos; name="clock.bmp,69c"; type=BMP; - load=&fff69c4b; exec=&355dd4d1; access=&03 -Content-Disposition: attachment; filename="clock.bmp" -Content-Transfer-Encoding: base64 - -Qk12AgAAAAAAAHYAAAAoAAAAIAAAACAAAAABAAQAAAAAAAAAAADXDQAA1w0AAAAAAAAA -AAAAAAAAAAAAiAAAiAAAAIiIAIgAAACIAIgAiIgAALu7uwCIiIgAERHdACLuIgAz//8A -zAAAAN0R3QDu7iIA////AAAAAAAAAAAAAAAAAAAAAAAAAAi3AAAAAAAAADeAAAAAAAAA -C3ADMzMzMANwAAAAAAAAAAAHMAAAAANwAAAAAAAAAACAMAd3zPfwAwgAAAAAAAAIAwd/ -f8x/f3AwgAAAAAAAgDB0x/f3//zPAwgAAAAAAAcHfM9////8z/AwAAAAAAiwd/f3//// -////A4AAAAAAcEx/f///////zAMAAAAAiwfM9////3///8zwOAAAAAcHf3////B///// -8DAAAAALB/f3///wd3d3//AwAAAABwTPf//wCQAAD/zAMAAAAAsEx/f///B////8wDAA -AAAHB39////wf/////AwAAAACwf39///8H/////wMAAAAIcHfM9///B////M8DgAAAAA -sHTH///wf///xAMAAAAACHB3f3//8H////cDgAAAAAALB3zH//D//M9wMAAAAAAAgLB0 -z39///xHAwgAAAAAAAgLB3d3RHd3cDCAAAAAAAAAgLAHd0R3cAMIAAAAAAAAgAgLcAAA -AAMwgAgAAAAACDAAAAu7t7cwAAgDgAAAAABzcIAAAAAAAAgDMwAAAAAAN7uwgAAAAAgH -MzMAAAAACH97tzAAAAALu3c3gAAAAAAL+7tzDABAu7f7cAAAAAAACA+3MA7EQAv/sIAA -AAAAAAAIAAAAAAAAAIAAAAAA - ---1618492860--2051301190--113853680-- +Received: from xcar [192.168.0.2] by jeeves.wooster.local + (SMTPD32-7.07 EVAL) id AFF92F0214; Sun, 12 May 2002 08:55:37 +0100 +Date: Sun, 12 May 2002 08:56:15 +0100 +From: Father Time +To: timbo@jeeves.wooster.local +Subject: IMAP file test +Message-ID: <6df65d354b.father.time@rpc.wooster.local> +X-Organization: Home +User-Agent: Messenger-Pro/2.50a (MsgServe/1.50) (RISC-OS/4.02) POPstar/2.03 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="1618492860--2051301190--113853680" +Status: R +X-UIDL: 319998302 + +This message is in MIME format which your mailer apparently does not support. +You either require a newer version of your software which supports MIME, or +a separate MIME decoding utility. Alternatively, ask the sender of this +message to resend it in a different format. + +--1618492860--2051301190--113853680 +Content-Type: text/plain; charset=us-ascii + +Simple email with attachment. + + +--1618492860--2051301190--113853680 +Content-Type: application/riscos; name="clock.bmp,69c"; type=BMP; + load=&fff69c4b; exec=&355dd4d1; access=&03 +Content-Disposition: attachment; filename="clock.bmp" +Content-Transfer-Encoding: base64 + +Qk12AgAAAAAAAHYAAAAoAAAAIAAAACAAAAABAAQAAAAAAAAAAADXDQAA1w0AAAAAAAAA +AAAAAAAAAAAAiAAAiAAAAIiIAIgAAACIAIgAiIgAALu7uwCIiIgAERHdACLuIgAz//8A +zAAAAN0R3QDu7iIA////AAAAAAAAAAAAAAAAAAAAAAAAAAi3AAAAAAAAADeAAAAAAAAA +C3ADMzMzMANwAAAAAAAAAAAHMAAAAANwAAAAAAAAAACAMAd3zPfwAwgAAAAAAAAIAwd/ +f8x/f3AwgAAAAAAAgDB0x/f3//zPAwgAAAAAAAcHfM9////8z/AwAAAAAAiwd/f3//// +////A4AAAAAAcEx/f///////zAMAAAAAiwfM9////3///8zwOAAAAAcHf3////B///// +8DAAAAALB/f3///wd3d3//AwAAAABwTPf//wCQAAD/zAMAAAAAsEx/f///B////8wDAA +AAAHB39////wf/////AwAAAACwf39///8H/////wMAAAAIcHfM9///B////M8DgAAAAA +sHTH///wf///xAMAAAAACHB3f3//8H////cDgAAAAAALB3zH//D//M9wMAAAAAAAgLB0 +z39///xHAwgAAAAAAAgLB3d3RHd3cDCAAAAAAAAAgLAHd0R3cAMIAAAAAAAAgAgLcAAA +AAMwgAgAAAAACDAAAAu7t7cwAAgDgAAAAABzcIAAAAAAAAgDMwAAAAAAN7uwgAAAAAgH +MzMAAAAACH97tzAAAAALu3c3gAAAAAAL+7tzDABAu7f7cAAAAAAACA+3MA7EQAv/sIAA +AAAAAAAIAAAAAAAAAIAAAAAA + +--1618492860--2051301190--113853680-- diff --git a/Lib/test/test_email/test_asian_codecs.py b/Lib/test/test_email/test_asian_codecs.py index ca44f54c69b..85979ffd816 100644 --- a/Lib/test/test_email/test_asian_codecs.py +++ b/Lib/test/test_email/test_asian_codecs.py @@ -58,6 +58,62 @@ def test_japanese_codecs(self): # TK: full decode comparison eq(str(h).encode(jcode), subject_bytes) + h = Header("Japanese") + s = '\u65e5\u672c\u8a9e' # 日本語 + h.append(s, Charset('euc-jp')) + h.append(s, Charset('iso-2022-jp')) + h.append(s, Charset('shift_jis')) + eq(h.encode(), """\ +Japanese =?iso-2022-jp?b?GyRCRnxLXDhsGyhC?= =?iso-2022-jp?b?GyRCRnxLXDhsGyhC?= + =?iso-2022-jp?b?GyRCRnxLXDhsGyhC?=""") + eq(decode_header(h.encode()), + [(b'Japanese ', None), + (b'\x1b$BF|K\\8l\x1b(B\x1b$BF|K\\8l\x1b(B\x1b$BF|K\\8l\x1b(B', 'iso-2022-jp'), + ]) + + def test_chinese_codecs(self): + eq = self.ndiffAssertEqual + h = Header("Chinese") + s = '\u4e2d\u6587' # 中文 + h.append(s, Charset('gb2312')) + h.append(s, Charset('gbk')) + h.append(s, Charset('gb18030')) + h.append(s, Charset('hz')) + h.append(s, Charset('big5')) + h.append(s, Charset('big5hkscs')) + eq(h.encode(), """\ +Chinese =?gb2312?b?1tDOxA==?= =?gbk?b?1tDOxA==?= =?gb18030?b?1tDOxA==?= + =?hz?b?fntWUE5Efn0=?= =?big5?b?pKSk5Q==?= =?big5hkscs?b?pKSk5Q==?=""") + eq(decode_header(h.encode()), + [(b'Chinese ', None), + (b'\xd6\xd0\xce\xc4', 'gb2312'), + (b'\xd6\xd0\xce\xc4', 'gbk'), + (b'\xd6\xd0\xce\xc4', 'gb18030'), + (b'~{VPND~}', 'hz'), + (b'\xa4\xa4\xa4\xe5', 'big5'), + (b'\xa4\xa4\xa4\xe5', 'big5hkscs'), + ]) + + def test_korean_codecs(self): + eq = self.ndiffAssertEqual + h = Header("Korean") + s = '\ud55c\uad6d\uc5b4' # 한국어 + h.append(s, Charset('euc-kr')) + h.append(s, Charset('ks_c_5601-1987')) + h.append(s, Charset('cp949')) + h.append(s, Charset('iso-2022-kr')) + h.append(s, Charset('johab')) + eq(h.encode(), """\ +Korean =?euc-kr?b?x9Gxub7u?= =?ks_c_5601-1987?b?x9Gxub7uIMfRsbm+7g==?= + =?iso-2022-kr?b?GyQpQw5HUTE5Pm4P?= =?johab?b?0GWKgrTh?=""") + eq(decode_header(h.encode()), + [(b'Korean ', None), + (b'\xc7\xd1\xb1\xb9\xbe\xee', 'euc-kr'), + (b'\xc7\xd1\xb1\xb9\xbe\xee \xc7\xd1\xb1\xb9\xbe\xee', 'ks_c_5601-1987'), + (b'\x1b$)C\x0eGQ19>n\x0f', 'iso-2022-kr'), + (b'\xd0e\x8a\x82\xb4\xe1', 'johab'), + ]) + def test_payload_encoding_utf8(self): jhello = str(b'\xa5\xcf\xa5\xed\xa1\xbc\xa5\xef\xa1\xbc' b'\xa5\xeb\xa5\xc9\xa1\xaa', 'euc-jp') diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 7778566492d..d2c2261edbe 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -4995,15 +4995,8 @@ def test_body_encode(self): # Try the convert argument, where input codec != output codec c = Charset('euc-jp') # With apologies to Tokio Kikuchi ;) - # XXX FIXME -## try: -## eq('\x1b$B5FCO;~IW\x1b(B', -## c.body_encode('\xb5\xc6\xc3\xcf\xbb\xfe\xc9\xd7')) -## eq('\xb5\xc6\xc3\xcf\xbb\xfe\xc9\xd7', -## c.body_encode('\xb5\xc6\xc3\xcf\xbb\xfe\xc9\xd7', False)) -## except LookupError: -## # We probably don't have the Japanese codecs installed -## pass + eq('\x1b$B5FCO;~IW\x1b(B', + c.body_encode('\u83ca\u5730\u6642\u592b')) # Testing SF bug #625509, which we have to fake, since there are no # built-in encodings where the header encoding is QP but the body # encoding is not. diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index c5ced3cc613..2d1533c46b9 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -74,6 +74,27 @@ def debug_build(program): return name.casefold().endswith("_d".casefold()) +def getpath_which(program_name): + if sys.platform != 'cygwin': + return shutil.which(program_name) + + # shutil.which() checks for os.access(fn, os.F_OK | os.X_OK), whereas + # getpath.isxfile() doesn't. The difference matters on Cygwin. + import stat + def isxfile(fn): + try: + st = os.stat(fn) + except OSError: + return False + return stat.S_ISREG(st.st_mode) + + for p in os.environ['PATH'].split(':'): + p = os.path.join(p, program_name) + if isxfile(p): + return p + return None + + def remove_python_envvars(): env = dict(os.environ) # Remove PYTHON* environment variables to get deterministic environment @@ -92,6 +113,8 @@ def setUp(self): exename += ext exepath = builddir else: + if sys.platform == 'cygwin': + exename += '.exe' exepath = os.path.join(builddir, 'Programs') self.test_exe = exe = os.path.join(exepath, exename) if not os.path.exists(exe): @@ -328,6 +351,8 @@ def test_pre_initialization_api(self): expected_path = self.test_exe else: expected_path = os.path.join(os.getcwd(), "_testembed") + if sys.platform == 'cygwin': + expected_path += '.exe' expected_output = f"sys.executable: {expected_path}\n" self.assertIn(expected_output, out) self.assertEqual(err, '') @@ -872,12 +897,16 @@ def get_expected_config(self, expected_preconfig, expected, default_executable = os.path.abspath(expected['program_name']) else: default_executable = os.path.join(os.getcwd(), '_testembed') + if sys.platform == 'cygwin': + default_executable += '.exe' if expected['executable'] is self.GET_DEFAULT_CONFIG: expected['executable'] = default_executable if expected['base_executable'] is self.GET_DEFAULT_CONFIG: expected['base_executable'] = default_executable if expected['program_name'] is self.GET_DEFAULT_CONFIG: expected['program_name'] = './_testembed' + if sys.platform == 'cygwin': + expected['program_name'] += '.exe' config = configs['config'] for key, value in expected.items(): @@ -1370,7 +1399,7 @@ def default_program_name(self, config): if MACOS: executable = self.test_exe else: - executable = shutil.which(program_name) or '' + executable = getpath_which(program_name) or '' config.update({ 'program_name': program_name, 'base_executable': executable, @@ -1469,6 +1498,13 @@ def tmpdir_with_python(self, subdir=None): shutil.copystat(self.test_exe, exec_copy) self.test_exe = exec_copy + if sys.platform == "cygwin": + # Copy libpython DLL + exe_path = os.path.dirname(sys.executable) + libpython_dll = sysconfig.get_config_var('DLLLIBRARY') + shutil.copy2(os.path.join(exe_path, libpython_dll), + os.path.join(tmpdir, libpython_dll)) + yield tmpdir def test_init_setpythonhome(self): diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 779457119e8..b05eab43bd9 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -5021,8 +5021,8 @@ class Color(enum.Enum) | __members__ | Returns a mapping of member name->value. | - | This mapping lists all enum members, including aliases. Note that this - | is a read-only view of the internal mapping.""" + | This mapping lists all enum members, including aliases. Note that + | this is a read-only view of the internal mapping.""" expected_help_output_without_docs = """\ Help on class Color in module %s: @@ -5105,6 +5105,8 @@ def test_inspect_getmembers(self): ('__qualname__', 'TestStdLib.Color'), ('__init_subclass__', getattr(self.Color, '__init_subclass__')), ('__iter__', self.Color.__iter__), + ('_missing_', self.Color._missing_), + ('_generate_next_value_', self.Color._generate_next_value_), )) result = dict(inspect.getmembers(self.Color)) self.assertEqual(set(values.keys()), set(result.keys())) @@ -5147,6 +5149,10 @@ def test_inspect_classify_class_attrs(self): defining_class=self.Color, object='Color'), Attribute(name='__qualname__', kind='data', defining_class=self.Color, object='TestStdLib.Color'), + Attribute(name='_missing_', kind='class method', + defining_class=Enum, object=Enum.__dict__['_missing_']), + Attribute(name='_generate_next_value_', kind='static method', + defining_class=self.Color, object=self.Color.__dict__['_generate_next_value_']), Attribute(name='YELLOW', kind='data', defining_class=self.Color, object=self.Color.YELLOW), Attribute(name='MAGENTA', kind='data', @@ -5178,11 +5184,13 @@ def test_inspect_classify_class_attrs(self): # __doc__ is too big to check exactly, so treat the same as __init_subclass__ for name in ('name','kind','defining_class'): if getattr(v, name) != getattr(r, name): - print('\n%s\n%s\n%s\n%s\n' % ('=' * 75, r, v, '=' * 75), sep='') + print('\n%s\nexpected: %s\nactual: %s\n%s\n' % ('=' * 75, r, v, '=' * 75), sep='') failed = True + # breakpoint() elif r != v: - print('\n%s\n%s\n%s\n%s\n' % ('=' * 75, r, v, '=' * 75), sep='') + print('\n%s\nexpected: %s\nactual: %s\n%s\n' % ('=' * 75, r, v, '=' * 75), sep='') failed = True + # breakpoint() if failed: self.fail("result does not equal expected, see print above") @@ -5537,6 +5545,7 @@ def enum_dir(cls): '__class__', '__contains__', '__doc__', '__getitem__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__', + '_generate_next_value_', '_missing_', ] + members ) @@ -5552,7 +5561,8 @@ def enum_dir(cls): def member_dir(member): if member.__class__._member_type_ is object: - allowed = set(['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'value']) + allowed = set(['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'value', + '_generate_next_value_', '_missing_', '_add_alias_', '_add_value_alias_']) else: allowed = set(dir(member)) for cls in member.__class__.mro(): diff --git a/Lib/test/test_external_inspection.py b/Lib/test/test_external_inspection.py index a29e6cdbbf6..6b1529aa173 100644 --- a/Lib/test/test_external_inspection.py +++ b/Lib/test/test_external_inspection.py @@ -3767,6 +3767,13 @@ def test_get_stats(self): "frames_read_from_cache", "frames_read_from_memory", "frame_cache_hit_rate", + "batched_read_attempts", + "batched_read_successes", + "batched_read_misses", + "batched_read_segments_requested", + "batched_read_segments_completed", + "batched_read_success_rate", + "batched_read_segment_completion_rate", ] for key in expected_keys: self.assertIn(key, stats) diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py index 00f1ab44b0a..5d322cb444c 100644 --- a/Lib/test/test_format.py +++ b/Lib/test/test_format.py @@ -68,33 +68,20 @@ def testcommon(formatstr, args, output=None, limit=None, overflowok=False): testformat(b_format, args, b_output, limit, overflowok) testformat(ba_format, args, ba_output, limit, overflowok) -def test_exc(formatstr, args, exception, excmsg): - try: - testformat(formatstr, args) - except exception as exc: - if str(exc) == excmsg: - if verbose: - print("yes") - else: - if verbose: print('no') - print('Unexpected ', exception, ':', repr(str(exc))) - raise - except: - if verbose: print('no') - print('Unexpected exception') - raise - else: - raise TestFailed('did not get expected exception: %s' % excmsg) - -def test_exc_common(formatstr, args, exception, excmsg): - # test str and bytes - test_exc(formatstr, args, exception, excmsg) - if isinstance(args, dict): - args = {k.encode('ascii'): v for k, v in args.items()} - test_exc(formatstr.encode('ascii'), args, exception, excmsg) class FormatTest(unittest.TestCase): + def check_exc(self, formatstr, args, exception, excmsg): + with self.assertRaisesRegex(exception, re.escape(excmsg)): + testformat(formatstr, args) + + def check_exc_common(self, formatstr, args, exception, excmsg): + # test str and bytes + self.check_exc(formatstr, args, exception, excmsg) + if isinstance(args, dict): + args = {k.encode('ascii'): v for k, v in args.items()} + self.check_exc(formatstr.encode('ascii'), args, exception, excmsg) + def test_common_format(self): # test the format identifiers that work the same across # str, bytes, and bytearrays (integer, float, oct, hex) @@ -271,6 +258,7 @@ def test_common_format(self): if verbose: print('Testing exceptions') + test_exc_common = self.check_exc_common test_exc_common('abc %', (), ValueError, "stray % at position 4") test_exc_common('abc % %s', 1, ValueError, "stray % at position 4 or unexpected format character '%' at position 6") @@ -365,6 +353,7 @@ def test_str_format(self): # Test exception for unknown format characters, etc. if verbose: print('Testing exceptions') + test_exc = self.check_exc test_exc('abc %b', 1, ValueError, "unsupported format %b at position 4") test_exc("abc %\nd", 1, ValueError, @@ -468,6 +457,7 @@ def __bytes__(self): # Test exception for unknown format characters, etc. if verbose: print('Testing exceptions') + test_exc = self.check_exc test_exc(b"abc %\nd", 1, ValueError, "stray % at position 4 or unexpected format character with code 0x0a at position 5") test_exc(b"abc %'d", 1, ValueError, diff --git a/Lib/test/test_free_threading/test_dict.py b/Lib/test/test_free_threading/test_dict.py index 55272a00c3a..dfe0634211d 100644 --- a/Lib/test/test_free_threading/test_dict.py +++ b/Lib/test/test_free_threading/test_dict.py @@ -268,6 +268,34 @@ def watcher(): finally: _testcapi.clear_dict_watcher(wid) + def test_racing_split_dict_clear_and_lookup(self): + class C: + pass + + keys = [f"a{i}" for i in range(16)] + + def make_split_nonembedded(): + inst = C() + for key in keys: + setattr(inst, key, keys.index(key)) + # dict.copy() of a split instance dict yields a split table + # with non-embedded values + return inst.__dict__.copy() + + d = make_split_nonembedded() + + def clearer(): + for _ in range(1000): + d.clear() + d.update(make_split_nonembedded()) + + def reader(): + for _ in range(1000): + for k in keys: + d.get(k) + + threading_helper.run_concurrently([clearer, reader, reader]) + def test_racing_dict_update_and_method_lookup(self): # gh-144295: test race between dict modifications and method lookups. # Uses BytesIO because the race requires a type without Py_TPFLAGS_INLINE_VALUES diff --git a/Lib/test/test_free_threading/test_exceptions.py b/Lib/test/test_free_threading/test_exceptions.py new file mode 100644 index 00000000000..61146f29c78 --- /dev/null +++ b/Lib/test/test_free_threading/test_exceptions.py @@ -0,0 +1,16 @@ +import unittest +import copy + +from test.support import threading_helper + +threading_helper.requires_working_threading(module=True) +class ExceptionTests(unittest.TestCase): + def test_setstate_data_race(self): + E = Exception() + + def func(): + for i in range(100): + setattr(E, 'x', i) + copy.copy(E) + + threading_helper.run_concurrently(func, nthreads=4) diff --git a/Lib/test/test_free_threading/test_iteration.py b/Lib/test/test_free_threading/test_iteration.py index a51ad0cf83a..44d3e9ccfdd 100644 --- a/Lib/test/test_free_threading/test_iteration.py +++ b/Lib/test/test_free_threading/test_iteration.py @@ -12,7 +12,7 @@ NUMITEMS = 1000 NUMTHREADS = 2 else: - NUMITEMS = 100000 + NUMITEMS = 5000 NUMTHREADS = 5 NUMMUTATORS = 2 diff --git a/Lib/test/test_free_threading/test_pickle.py b/Lib/test/test_free_threading/test_pickle.py new file mode 100644 index 00000000000..45ea1bf5f26 --- /dev/null +++ b/Lib/test/test_free_threading/test_pickle.py @@ -0,0 +1,78 @@ +import pickle +import threading +import unittest + +from test.support import threading_helper + + +@threading_helper.requires_working_threading() +class TestPickleFreeThreading(unittest.TestCase): + + def test_pickle_dumps_with_concurrent_dict_mutation(self): + # gh-146452: Pickling a dict while another thread mutates it + # used to segfault. batch_dict_exact() iterated dict items via + # PyDict_Next() which returns borrowed references, and a + # concurrent pop/replace could free the value before Py_INCREF + # got to it. + shared = {str(i): list(range(20)) for i in range(50)} + + def dumper(): + for _ in range(1000): + try: + pickle.dumps(shared) + except RuntimeError: + # "dictionary changed size during iteration" is expected + pass + + def mutator(): + for j in range(1000): + key = str(j % 50) + shared[key] = list(range(j % 20)) + if j % 10 == 0: + shared.pop(key, None) + shared[key] = [j] + + threads = [] + for _ in range(10): + threads.append(threading.Thread(target=dumper)) + threads.append(threading.Thread(target=mutator)) + + with threading_helper.start_threads(threads): + pass + + def test_pickle_dumps_with_concurrent_list_mutations(self): + # gh-149816: Pickling a list while another thread mutates it + # used to be a UAF in free-threaded mode. batch_list_exact() + # used PyList_GET_ITEM (borrowed) followed by Py_INCREF, and a + # concurrent replace/pop could free the item between those two + # operations. + shared = [list(range(20)) for _ in range(50)] + + def dumper(): + for _ in range(1000): + try: + pickle.dumps(shared) + except (RuntimeError, IndexError): + pass + + def mutator(): + for i in range(1000): + idx = i % 50 + shared[idx] = list(range(i % 20)) + if i % 10 == 0: + try: + shared.pop() + except IndexError: + pass + shared.append([i]) + + threads = [] + for _ in range(10): + threads.append(threading.Thread(target=dumper)) + threads.append(threading.Thread(target=mutator)) + + with threading_helper.start_threads(threads): + pass + +if __name__ == "__main__": + unittest.main() diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py index f1eff9430f7..983a8b92cf6 100644 --- a/Lib/test/test_ftplib.py +++ b/Lib/test/test_ftplib.py @@ -8,6 +8,7 @@ import io import errno import os +import sys import threading import time import unittest @@ -590,6 +591,8 @@ def test_quit(self): # Ensure the connection gets closed; sock attribute should be None self.assertEqual(self.client.sock, None) + @unittest.skipIf(sys.platform == 'cygwin', + "MSG_OOB doesn't work properly on Cygwin") def test_abort(self): self.client.abort() diff --git a/Lib/test/test_generated_cases.py b/Lib/test/test_generated_cases.py index 9915d7be706..0cc44ff95b5 100644 --- a/Lib/test/test_generated_cases.py +++ b/Lib/test/test_generated_cases.py @@ -2187,6 +2187,75 @@ def test_family_member_needs_transform_only_when_shape_changes(self): "[OP_TYPED_SPECIALIZED] = {1, 0, {0}}", ) + def test_record_transform_generated_from_recording_uop(self): + input = """ + tier2 op(_RECORD_TOS, (tos -- tos)) { + RECORD_VALUE(PyStackRef_AsPyObjectBorrow(tos)); + } + tier2 op(_RECORD_TOS_TYPE, (tos -- tos)) { + RECORD_VALUE(Py_TYPE(PyStackRef_AsPyObjectBorrow(tos))); + } + op(_DO_STUFF, (tos -- res)) { + res = tos; + } + macro(OP) = _RECORD_TOS + _DO_STUFF; + macro(OP_SPECIALIZED) = _RECORD_TOS_TYPE + _DO_STUFF; + family(OP, INLINE_CACHE_ENTRIES_OP) = { OP_SPECIALIZED }; + """ + output = self.generate_tables(input) + self.assertIn("_PyOpcode_RecordTransform_TOS_TYPE", output) + self.assertIn("tos = PyStackRef_FromPyObjectBorrow(recorded_value);", output) + self.assertIn( + "transformed_value = (PyObject *)Py_TYPE(PyStackRef_AsPyObjectBorrow(tos));", + output, + ) + self.assertIn("return _PyOpcode_RecordTransform_TOS_TYPE(value);", output) + self.assertNotIn("record_trace_transform_to_type", output) + + def test_record_transform_generated_when_only_specialization_records(self): + input = """ + tier2 op(_RECORD_TOS_TYPE, (tos -- tos)) { + RECORD_VALUE(Py_TYPE(PyStackRef_AsPyObjectBorrow(tos))); + } + op(_DO_STUFF, (tos -- res)) { + res = tos; + } + macro(OP) = _DO_STUFF; + macro(OP_SPECIALIZED) = _RECORD_TOS_TYPE + _DO_STUFF; + family(OP, INLINE_CACHE_ENTRIES_OP) = { OP_SPECIALIZED }; + """ + output = self.generate_tables(input) + # Family head must adopt the specialization's recorder. + self.assertIn("[OP] = {1, {_RECORD_TOS_TYPE_INDEX}}", output) + self.assertIn("[OP_SPECIALIZED] = {1, {_RECORD_TOS_TYPE_INDEX}}", output) + # Specialization consumes the slot directly (mask 0), no transform. + self.assert_slot_map_lines(output, "[OP_SPECIALIZED] = {1, 0, {0}}") + self.assertNotIn("_PyOpcode_RecordTransform_TOS_TYPE(", output) + + def test_no_record_transform_when_only_base_records(self): + input = """ + tier2 op(_RECORD_TOS, (tos -- tos)) { + RECORD_VALUE(PyStackRef_AsPyObjectBorrow(tos)); + } + op(_DO_STUFF, (tos -- res)) { + res = tos; + } + macro(OP) = _RECORD_TOS + _DO_STUFF; + macro(OP_SPECIALIZED) = _DO_STUFF; + family(OP, INLINE_CACHE_ENTRIES_OP) = { OP_SPECIALIZED }; + """ + output = self.generate_tables(input) + # Family head records via _RECORD_TOS. + self.assertIn("[OP] = {1, {_RECORD_TOS_INDEX}}", output) + self.assertIn("[OP_SPECIALIZED] = {1, {_RECORD_TOS_INDEX}}", output) + # Specialization has no consumer slot map entry (it doesn't read it). + self.assertNotIn( + "[OP_SPECIALIZED] = {1,", self.get_slot_map_section(output) + ) + # No transform helpers are generated. + self.assertNotIn("_PyOpcode_RecordTransform_TOS(", output) + self.assertNotIn("_PyOpcode_RecordTransform_TOS_TYPE", output) + def test_family_member_maps_positional_recorders_to_family_slots(self): input = """ tier2 op(_RECORD_TOS, (sub -- sub)) { @@ -2243,7 +2312,12 @@ def test_family_head_records_union_of_member_recorders(self): macro(OP_SPECIALIZED) = _RECORD_TOS + _DO_STUFF; family(OP, INLINE_CACHE_ENTRIES_OP) = { OP_SPECIALIZED }; """ + analysis = self.analyze_input(input) output = self.generate_tables(input) + self.assertEqual( + analysis.families["OP"].get_member_record_names(), + ("_RECORD_TOS",), + ) self.assertIn("[OP] = {1, {_RECORD_TOS_INDEX}}", output) self.assertIn("[OP_SPECIALIZED] = {1, {_RECORD_TOS_INDEX}}", output) self.assert_slot_map_lines(output, "[OP_SPECIALIZED] = {1, 0, {0}}") diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py index a5969b7a47d..7816775620b 100644 --- a/Lib/test/test_genericalias.py +++ b/Lib/test/test_genericalias.py @@ -55,15 +55,14 @@ from unittest.case import _AssertRaisesContext from queue import Queue, SimpleQueue from weakref import WeakSet, ReferenceType, ref -import typing -from typing import Unpack try: from tkinter import Event except ImportError: Event = None from string.templatelib import Template, Interpolation -from typing import TypeVar +import typing +from typing import TypeVar, Unpack T = TypeVar('T') K = TypeVar('K') V = TypeVar('V') @@ -621,6 +620,14 @@ def test_nested_paramspec_specialization(self): self.assertEqual(deeply_nested_specialized.__args__, ([str, [float], int], float)) self.assertEqual(deeply_nested_specialized.__parameters__, ()) + def test_gh150146(self): + # It used to crash: + for container in [memoryview, list, tuple]: + with self.subTest(container=container): + x = container[TypeVar("")] + with self.assertRaises(TypeError): + x[*typing.Mapping[..., ...]] + class TypeIterationTests(unittest.TestCase): _UNITERABLE_TYPES = (list, tuple) diff --git a/Lib/test/test_grp.py b/Lib/test/test_grp.py index e52e17b8dc7..f08b9328a9f 100644 --- a/Lib/test/test_grp.py +++ b/Lib/test/test_grp.py @@ -1,5 +1,8 @@ """Test script for the grp module.""" +import random +import string +import sys import unittest from test.support import import_helper @@ -33,7 +36,15 @@ def test_values_extended(self): self.skipTest('huge group file, extended test skipped') for e in entries: - e2 = grp.getgrgid(e.gr_gid) + try: + e2 = grp.getgrgid(e.gr_gid) + except KeyError: + # On Cygwin, some groups returned by getgrall() cannot be + # retrieved by getgrgid() + if sys.platform == 'cygwin': + continue + raise + self.check_value(e2) self.assertEqual(e2.gr_gid, e.gr_gid) name = e.gr_name @@ -50,61 +61,51 @@ def test_values_extended(self): def test_errors(self): self.assertRaises(TypeError, grp.getgrgid) self.assertRaises(TypeError, grp.getgrgid, 3.14) + self.assertRaises(TypeError, grp.getgrgid, 0.0) + self.assertRaises(TypeError, grp.getgrgid, 0, 0) + # should be out of gid_t range + self.assertRaises(OverflowError, grp.getgrgid, 2**128) + self.assertRaises(OverflowError, grp.getgrgid, -2**128) self.assertRaises(TypeError, grp.getgrnam) self.assertRaises(TypeError, grp.getgrnam, 42) - self.assertRaises(TypeError, grp.getgrall, 42) + self.assertRaises(TypeError, grp.getgrnam, b'root') + self.assertRaises(TypeError, grp.getgrnam, 'root', 0) # embedded null character self.assertRaisesRegex(ValueError, 'null', grp.getgrnam, 'a\x00b') + self.assertRaisesRegex(ValueError, 'null', grp.getgrnam, 'root\x00') + self.assertRaises(UnicodeEncodeError, grp.getgrnam, 'roo\udc74') + self.assertRaises(KeyError, grp.getgrnam, '') + self.assertRaises(TypeError, grp.getgrall, 42) - # try to get some errors - bynames = {} - bygids = {} - for (n, p, g, mem) in grp.getgrall(): - if not n or n == '+': - continue # skip NIS entries etc. - bynames[n] = g - bygids[g] = n - - allnames = list(bynames.keys()) - namei = 0 - fakename = allnames[namei] - while fakename in bynames: - chars = list(fakename) - for i in range(len(chars)): - if chars[i] == 'z': - chars[i] = 'A' - break - elif chars[i] == 'Z': - continue + # Find a non-existent group name. + # getgrall() will not necessarily report all existing groups + # (typical for LDAP based directories in big organizations). + for _ in range(30): + fakename = ''.join(random.choices(string.ascii_lowercase, k=6)) + try: + grp.getgrnam(fakename) + except KeyError: + break + else: + self.fail('Cannot find non-existent group name') + + # Find a non-existent gid. + maxgid = 2**31 + for _ in range(30): + fakegid = random.randrange(maxgid) + try: + grp.getgrgid(fakegid) + except KeyError: + break + except OverflowError: + if maxgid == 2**31: + maxgid = 2**16-1 + elif maxgid == 2**16-1: + maxgid = 2**15 else: - chars[i] = chr(ord(chars[i]) + 1) - break - else: - namei = namei + 1 - try: - fakename = allnames[namei] - except IndexError: - # should never happen... if so, just forget it - break - fakename = ''.join(chars) - - self.assertRaises(KeyError, grp.getgrnam, fakename) - - # Choose a non-existent gid. - fakegid = 4127 - while fakegid in bygids: - fakegid = (fakegid * 3) % 0x10000 - - self.assertRaises(KeyError, grp.getgrgid, fakegid) - - def test_noninteger_gid(self): - entries = grp.getgrall() - if not entries: - self.skipTest('no groups') - # Choose an existent gid. - gid = entries[0][2] - self.assertRaises(TypeError, grp.getgrgid, float(gid)) - self.assertRaises(TypeError, grp.getgrgid, str(gid)) + raise + else: + self.fail('Cannot find non-existent gid') if __name__ == "__main__": diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py index b3b7c8f87e4..8bc8e507683 100644 --- a/Lib/test/test_gzip.py +++ b/Lib/test/test_gzip.py @@ -10,6 +10,7 @@ import sys import unittest from subprocess import PIPE, Popen +from unittest import mock from test.support import catch_unraisable_exception from test.support import force_not_colorized_test_class, import_helper from test.support import os_helper @@ -350,6 +351,37 @@ def test_mtime(self): self.assertEqual(dataRead, data1) self.assertEqual(fRead.mtime, mtime) + def test_mtime_with_open(self): + mtime = 123456789 + with gzip.open(self.filename, "wb", mtime=mtime) as fWrite: + fWrite.write(data1) + with gzip.open(self.filename, "rb") as fRead: + self.assertTrue(hasattr(fRead, 'mtime')) + self.assertIsNone(fRead.mtime) + dataRead = fRead.read() + self.assertEqual(dataRead, data1) + self.assertEqual(fRead.mtime, mtime) + + def test_mtime_out_of_range(self): + for mtime in (-1, 2**32): + with gzip.GzipFile(self.filename, 'w', mtime=mtime) as fWrite: + fWrite.write(data1) + with gzip.GzipFile(self.filename) as fRead: + fRead.read(1) + self.assertEqual(fRead.mtime, 0) + datac = gzip.compress(data1, mtime=mtime) + with gzip.GzipFile(fileobj=io.BytesIO(datac)) as fRead: + fRead.read(1) + self.assertEqual(fRead.mtime, 0) + + for mtime in (-1, 2**32): + with mock.patch('time.time', return_value=float(mtime)): + with gzip.GzipFile(self.filename, 'w') as fWrite: + fWrite.write(data1) + with gzip.GzipFile(self.filename) as fRead: + fRead.read(1) + self.assertEqual(fRead.mtime, 0) + def test_metadata(self): mtime = 123456789 diff --git a/Lib/test/test_http_cookies.py b/Lib/test/test_http_cookies.py index cde268e3241..d1df2ec42f0 100644 --- a/Lib/test/test_http_cookies.py +++ b/Lib/test/test_http_cookies.py @@ -1,11 +1,11 @@ # Simple test suite for http/cookies.py -import base64 import copy import unittest import doctest from http import cookies import pickle from test import support +import urllib.parse class CookieTests(unittest.TestCase): @@ -152,21 +152,21 @@ def test_load(self): self.assertEqual(C.output(['path']), 'Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme') - cookie_encoded = base64.b64encode(b'Customer="WILE_E_COYOTE"; Path=/acme; Version=1').decode('ascii') + cookie_encoded = urllib.parse.quote('Customer="WILE_E_COYOTE"; Path=/acme; Version=1', safe='', encoding='utf-8') with self.assertWarnsRegex(DeprecationWarning, r"BaseCookie\.js_output"): self.assertEqual(C.js_output(), fr""" """) - cookie_encoded = base64.b64encode(b'Customer="WILE_E_COYOTE"; Path=/acme').decode('ascii') + cookie_encoded = urllib.parse.quote('Customer="WILE_E_COYOTE"; Path=/acme', safe='', encoding='utf-8') with self.assertWarnsRegex(DeprecationWarning, r"BaseCookie\.js_output"): self.assertEqual(C.js_output(['path']), fr""" """) @@ -271,21 +271,21 @@ def test_quoted_meta(self): self.assertEqual(C.output(['path']), 'Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme') - expected_encoded_cookie = base64.b64encode(b'Customer=\"WILE_E_COYOTE\"; Path=/acme; Version=1').decode('ascii') + expected_encoded_cookie = urllib.parse.quote('Customer=\"WILE_E_COYOTE\"; Path=/acme; Version=1', safe='', encoding='utf-8') with self.assertWarnsRegex(DeprecationWarning, r"BaseCookie\.js_output"): self.assertEqual(C.js_output(), fr""" """) - expected_encoded_cookie = base64.b64encode(b'Customer=\"WILE_E_COYOTE\"; Path=/acme').decode('ascii') + expected_encoded_cookie = urllib.parse.quote('Customer=\"WILE_E_COYOTE\"; Path=/acme', safe='', encoding='utf-8') with self.assertWarnsRegex(DeprecationWarning, r"BaseCookie\.js_output"): self.assertEqual(C.js_output(['path']), fr""" """) @@ -376,13 +376,14 @@ def test_setter(self): self.assertEqual( M.output(), "Set-Cookie: %s=%s; Path=/foo" % (i, "%s_coded_val" % i)) - expected_encoded_cookie = base64.b64encode( - ("%s=%s; Path=/foo" % (i, "%s_coded_val" % i)).encode("ascii") - ).decode('ascii') + expected_encoded_cookie = urllib.parse.quote( + "%s=%s; Path=/foo" % (i, "%s_coded_val" % i), + safe='', encoding='utf-8', + ) expected_js_output = """ """ % (expected_encoded_cookie,) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 574529c7074..d4ae032610a 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -824,7 +824,7 @@ def test_get(self): # chmod() doesn't work as expected on Windows, and filesystem # permissions are ignored by root on Unix. - if os.name == 'posix' and os.geteuid() != 0: + if os.name == 'posix' and os.geteuid() != 0 and sys.platform != 'cygwin': os.chmod(self.tempdir, 0) try: response = self.request(self.base_url + '/') diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py index 0b704d62655..fb256fb7cbc 100644 --- a/Lib/test/test_imaplib.py +++ b/Lib/test/test_imaplib.py @@ -434,6 +434,16 @@ def cmd_AUTHENTICATE(self, tag, args): r'\[AUTHENTICATIONFAILED\] invalid'): client.authenticate('MYAUTH', lambda x: b'fake') + def test_invalid_login(self): + class MyServer(SimpleIMAPHandler): + def cmd_LOGIN(self, tag, args): + self.server.logged = args[0] + self._send_tagged(tag, 'NO', '[LOGIN] failed') + client, _ = self._setup(MyServer) + with self.assertRaisesRegex(imaplib.IMAP4.error, + r'\[LOGIN\] failed'): + client.login('user', 'wrongpass') + def test_valid_authentication_bytes(self): class MyServer(SimpleIMAPHandler): def cmd_AUTHENTICATE(self, tag, args): diff --git a/Lib/test/test_io/test_memoryio.py b/Lib/test/test_io/test_memoryio.py index 482b183da23..3669ac0b038 100644 --- a/Lib/test/test_io/test_memoryio.py +++ b/Lib/test/test_io/test_memoryio.py @@ -967,6 +967,25 @@ def test_setstate(self): memio.close() self.assertRaises(ValueError, memio.__setstate__, ("closed", "", 0, None)) + def test_write_str_subclass(self): + # Writing a str subclass should use the subclass's unicode data + # directly, not call __str__ on it (which may return a different + # value). gh-149047 + class MyStr(str): + def __str__(self): + return "WRONG" + + s = MyStr("correct") + memio = self.ioclass() + memio.write(s) + self.assertEqual(memio.getvalue(), "correct") + + # Also test the fast path where pos == string_size (STATE_ACCUMULATING) + memio2 = self.ioclass() + memio2.write(MyStr("hello ")) + memio2.write(MyStr("world")) + self.assertEqual(memio2.getvalue(), "hello world") + class CStringIOPickleTest(PyStringIOPickleTest): UnsupportedOperation = io.UnsupportedOperation diff --git a/Lib/test/test_ioctl.py b/Lib/test/test_ioctl.py index 277d2fc99ea..0bcabd579a1 100644 --- a/Lib/test/test_ioctl.py +++ b/Lib/test/test_ioctl.py @@ -139,6 +139,7 @@ def setUp(self): self.addCleanup(os.close, self.master_fd) @unittest.skipUnless(hasattr(termios, 'TCFLSH'), 'requires termios.TCFLSH') + @unittest.skipIf(sys.platform == 'cygwin', 'test failed on Cygwin') def test_ioctl_clear_input_or_output(self): wfd = self.slave_fd rfd = self.master_fd diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py index d846c8af7ec..1d51fb2de0e 100644 --- a/Lib/test/test_json/test_decode.py +++ b/Lib/test/test_json/test_decode.py @@ -87,6 +87,13 @@ def test_array_hook(self): self.assertEqual(self.loads('[]', array_hook=tuple), ()) + def test_load_array_hook(self): + # json.load must forward array_hook to loads + fp = StringIO('[10, 20, 30]') + result = self.json.load(fp, array_hook=tuple) + self.assertEqual(result, (10, 20, 30)) + self.assertEqual(type(result), tuple) + def test_decoder_optimizations(self): # Several optimizations were made that skip over calls to # the whitespace regex, so this test is designed to try and diff --git a/Lib/test/test_lazy_import/__init__.py b/Lib/test/test_lazy_import/__init__.py index 5d770eeae07..321733a4fdf 100644 --- a/Lib/test/test_lazy_import/__init__.py +++ b/Lib/test/test_lazy_import/__init__.py @@ -10,6 +10,7 @@ import unittest import tempfile import os +import contextlib from test import support from test.support.script_helper import assert_python_ok @@ -37,8 +38,7 @@ def test_basic_unused(self): """Lazy imported module should not be loaded if never accessed.""" import test.test_lazy_import.data.basic_unused self.assertNotIn("test.test_lazy_import.data.basic2", sys.modules) - self.assertIn("test.test_lazy_import.data", sys.lazy_modules) - self.assertEqual(sys.lazy_modules["test.test_lazy_import.data"], {"basic2"}) + self.assertIn("test.test_lazy_import.data.basic2", sys.lazy_modules) def test_sys_lazy_modules(self): try: @@ -48,7 +48,7 @@ def test_sys_lazy_modules(self): self.assertFalse("test.test_lazy_import.data.basic2" in sys.modules) self.assertIn("test.test_lazy_import.data", sys.lazy_modules) - self.assertEqual(sys.lazy_modules["test.test_lazy_import.data"], {"basic2"}) + self.assertIn("test.test_lazy_import.data.basic2", sys.lazy_modules) test.test_lazy_import.data.basic_from_unused.basic2 self.assertNotIn("test.test_import.data", sys.lazy_modules) @@ -97,6 +97,59 @@ def test_from_import_with_module_getattr(self): """) assert_python_ok("-c", code) + @support.requires_subprocess() + def test_from_import_with_module_getattr_raising(self): + """Lazy from import should respect module-level __getattr__.""" + code = textwrap.dedent(""" + lazy from test.test_lazy_import.data.module_with_getattr import raising_attr + + try: + raising_attr + except ValueError as exc: + assert str(exc) == 'from_getattr', exc + else: + assert False, f'ValueError is not raised: {raising_attr}' + """) + assert_python_ok("-c", code) + + @support.requires_subprocess() + def test_from_import_with_module_getattr_missing(self): + """Lazy from import should respect module-level __getattr__.""" + for attr in ("missing_attr", "import_error_attr"): + with self.subTest(attr=attr): + code = textwrap.dedent(f""" + lazy from test.test_lazy_import.data.module_with_getattr import {attr} + + try: + {attr} + except ImportError as exc: + assert '{attr}' in str(exc), exc + assert exc.__cause__ is not None + else: + assert False, ('ImportError is not raised', {attr}) + """) + assert_python_ok("-c", code) + + @support.requires_subprocess() + def test_from_import_with_module_getattr_warning(self): + """Lazy from import should respect module-level __getattr__.""" + code = textwrap.dedent(""" + import warnings + + with warnings.catch_warnings(record=True) as log: + lazy from test.test_lazy_import.data.module_with_getattr import warning_attr + + assert log == [] + + with warnings.catch_warnings(record=True) as log: + warning_attr + assert warning_attr == 'from_warning_attr', warning_attr + assert len(log) == 1, log + assert isinstance(log[0].message, UserWarning), log + assert str(log[0].message) == 'from_getattr', log + """) + assert_python_ok("-c", code) + @support.requires_subprocess() def test_from_import_with_imported_module_getattr(self): """Lazy from import should not shadow an imported module's __getattr__.""" @@ -120,10 +173,10 @@ def tearDown(self): sys.set_lazy_imports_filter(None) sys.set_lazy_imports("normal") - def test_global_off(self): - """Mode 'none' should disable lazy imports entirely.""" - import test.test_lazy_import.data.global_off - self.assertIn("test.test_lazy_import.data.basic2", sys.modules) + def test_global_off_rejected(self): + """Mode 'none' is not supported.""" + with self.assertRaises(ValueError): + sys.set_lazy_imports("none") def test_global_on(self): """Mode 'all' should make regular imports lazy.""" @@ -441,10 +494,22 @@ def tearDown(self): def test_lazy_import_pkg(self): """lazy import of package submodule should load the package.""" - import test.test_lazy_import.data.lazy_import_pkg + out = io.StringIO() + + with contextlib.redirect_stdout(out): + import test.test_lazy_import.data.lazy_import_pkg self.assertIn("test.test_lazy_import.data.pkg", sys.modules) self.assertIn("test.test_lazy_import.data.pkg.bar", sys.modules) + self.assertIn("BAR_MODULE_LOADED", out.getvalue()) + + def test_lazy_submodule_stored_in_parent_dict(self): + """Accessing a lazy submodule should store it in the parent's __dict__.""" + import test.test_lazy_import.data.lazy_import_pkg + + pkg = sys.modules["test.test_lazy_import.data.pkg"] + self.assertIn("bar", pkg.__dict__) + self.assertIs(pkg.__dict__["bar"], sys.modules["test.test_lazy_import.data.pkg.bar"]) def test_lazy_import_pkg_cross_import(self): """Cross-imports within package should preserve lazy imports.""" @@ -458,6 +523,71 @@ def test_lazy_import_pkg_cross_import(self): self.assertEqual(type(g["x"]), int) self.assertEqual(type(g["b"]), types.LazyImportType) + @support.requires_subprocess() + def test_lazy_from_import_does_not_pollute_parent(self): + """Lazy from import should not add the name to the parent module's dict.""" + code = textwrap.dedent(""" + lazy from json import nonexistent_attr + import json + assert "nonexistent_attr" not in json.__dict__, ( + "lazy from import should not publish attributes on the parent module" + ) + """) + assert_python_ok("-c", code) + + @support.requires_subprocess() + def test_package_from_import_with_module_getattr_raising(self): + """Lazy from import should respect a package's __getattr__.""" + code = textwrap.dedent(""" + lazy from test.test_lazy_import.data.pkg import raising_attr + + try: + raising_attr + except ValueError as exc: + assert str(exc) == 'from_getattr', exc + else: + assert False, f'ValueError is not raised: {raising_attr}' + """) + assert_python_ok("-c", code) + + @support.requires_subprocess() + def test_package_from_import_with_module_getattr_missing(self): + """Lazy from import should respect package's __getattr__.""" + for attr in ("missing_attr", "import_error_attr"): + with self.subTest(attr=attr): + code = textwrap.dedent(f""" + lazy from test.test_lazy_import.data.pkg import {attr} + + try: + {attr} + except ImportError as exc: + assert '{attr}' in str(exc), exc + assert exc.__cause__ is not None + else: + assert False, ('ImportError is not raised', {attr}) + """) + assert_python_ok("-c", code) + + @support.requires_subprocess() + def test_from_import_with_module_getattr_warning(self): + """Lazy from import should respect package's __getattr__.""" + code = textwrap.dedent(""" + import warnings + + with warnings.catch_warnings(record=True) as log: + lazy from test.test_lazy_import.data.pkg import warning_attr + + assert log == [] + + with warnings.catch_warnings(record=True) as log: + warning_attr + assert warning_attr == 'from_warning_attr', warning_attr + assert len(log) == 1, log + assert isinstance(log[0].message, UserWarning), log + assert str(log[0].message) == 'from_getattr', log + """) + assert_python_ok("-c", code) + @support.requires_subprocess() def test_package_from_import_with_module_getattr(self): """Lazy from import should respect a package's __getattr__.""" @@ -552,9 +682,6 @@ def test_get_lazy_imports_returns_string(self): sys.set_lazy_imports("all") self.assertEqual(sys.get_lazy_imports(), "all") - sys.set_lazy_imports("none") - self.assertEqual(sys.get_lazy_imports(), "none") - def test_get_lazy_imports_filter_default(self): """get_lazy_imports_filter should return None by default.""" sys.set_lazy_imports_filter(None) @@ -569,8 +696,8 @@ def my_filter(name): self.assertIs(sys.get_lazy_imports_filter(), my_filter) def test_lazy_modules_attribute_is_dict(self): - """sys.lazy_modules should be a dict per PEP 810.""" - self.assertIsInstance(sys.lazy_modules, dict) + """sys.lazy_modules should be a set per PEP 810.""" + self.assertIsInstance(sys.lazy_modules, set) @support.requires_subprocess() def test_lazy_modules_tracks_lazy_imports(self): @@ -579,8 +706,7 @@ def test_lazy_modules_tracks_lazy_imports(self): import sys initial_count = len(sys.lazy_modules) import test.test_lazy_import.data.basic_unused - assert "test.test_lazy_import.data" in sys.lazy_modules - assert sys.lazy_modules["test.test_lazy_import.data"] == {"basic2"} + assert "test.test_lazy_import.data.basic2" in sys.lazy_modules assert len(sys.lazy_modules) > initial_count print("OK") """) @@ -610,19 +736,14 @@ def tearDown(self): sys.set_lazy_imports("normal") def test_import_error_shows_chained_traceback(self): - """ImportError during reification should chain to show both definition and access.""" - # Errors at reification must show where the lazy import was defined - # AND where the access happened, per PEP 810 "Reification" section + """Accessing a nonexistent lazy submodule via parent attr raises AttributeError.""" code = textwrap.dedent(""" import sys lazy import test.test_lazy_import.data.nonexistent_module try: x = test.test_lazy_import.data.nonexistent_module - except ImportError as e: - # Should have __cause__ showing the original error - # The exception chain shows both where import was defined and where access happened - assert e.__cause__ is not None, "Expected chained exception" + except AttributeError as e: print("OK") """) result = subprocess.run( @@ -670,7 +791,7 @@ def test_reification_retries_on_failure(self): # First access - should fail try: x = test.test_lazy_import.data.broken_module - except ValueError: + except AttributeError: pass # The lazy object should still be a lazy proxy (not reified) @@ -680,7 +801,7 @@ def test_reification_retries_on_failure(self): # Second access - should also fail (retry the import) try: x = test.test_lazy_import.data.broken_module - except ValueError: + except AttributeError: print("OK - retry worked") """) result = subprocess.run( @@ -693,7 +814,6 @@ def test_reification_retries_on_failure(self): def test_error_during_module_execution_propagates(self): """Errors in module code during reification should propagate correctly.""" - # Module that raises during import should propagate with chaining code = textwrap.dedent(""" import sys lazy import test.test_lazy_import.data.broken_module @@ -701,12 +821,8 @@ def test_error_during_module_execution_propagates(self): try: _ = test.test_lazy_import.data.broken_module print("FAIL - should have raised") - except ValueError as e: - # The ValueError from the module should be the cause - if "always fails" in str(e) or (e.__cause__ and "always fails" in str(e.__cause__)): - print("OK") - else: - print(f"FAIL - wrong error: {e}") + except AttributeError: + print("OK") """) result = subprocess.run( [sys.executable, "-c", code], @@ -1029,15 +1145,14 @@ def test_module_added_to_lazy_modules_on_lazy_import(self): lazy import test.test_lazy_import.data.basic2 # Should be in lazy_modules after lazy import - assert "test.test_lazy_import.data" in sys.lazy_modules - assert sys.lazy_modules["test.test_lazy_import.data"] == {"basic2"} + assert "test.test_lazy_import.data.basic2" in sys.lazy_modules assert len(sys.lazy_modules) > initial_count # Trigger reification _ = test.test_lazy_import.data.basic2.x # Module should still be tracked (for diagnostics per PEP 810) - assert "test.test_lazy_import.data" not in sys.lazy_modules + assert "test.test_lazy_import.data.basic2" not in sys.lazy_modules print("OK") """) result = subprocess.run( @@ -1050,8 +1165,8 @@ def test_module_added_to_lazy_modules_on_lazy_import(self): def test_lazy_modules_is_per_interpreter(self): """Each interpreter should have independent sys.lazy_modules.""" - # Basic test that sys.lazy_modules exists and is a dict - self.assertIsInstance(sys.lazy_modules, dict) + # Basic test that sys.lazy_modules exists and is a set + self.assertIsInstance(sys.lazy_modules, set) def test_lazy_module_without_children_is_tracked(self): code = textwrap.dedent(""" @@ -1060,10 +1175,6 @@ def test_lazy_module_without_children_is_tracked(self): assert "json" in sys.lazy_modules, ( f"expected 'json' in sys.lazy_modules, got {set(sys.lazy_modules)}" ) - assert sys.lazy_modules["json"] == set(), ( - f"expected empty set for sys.lazy_modules['json'], " - f"got {sys.lazy_modules['json']!r}" - ) print("OK") """) assert_python_ok("-c", code) @@ -1099,68 +1210,16 @@ def test_cli_lazy_imports_all_makes_regular_imports_lazy(self): self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}") self.assertIn("LAZY", result.stdout) - def test_cli_lazy_imports_none_forces_all_imports_eager(self): - """-X lazy_imports=none should force all imports to be eager.""" - code = textwrap.dedent(""" - import sys - # Even explicit lazy imports should be eager in 'none' mode - lazy import json - if 'json' in sys.modules: - print("EAGER") - else: - print("LAZY") - """) + def test_cli_lazy_imports_none_is_rejected(self): + """-X lazy_imports=none should be rejected.""" result = subprocess.run( - [sys.executable, "-X", "lazy_imports=none", "-c", code], + [sys.executable, "-X", "lazy_imports=none", "-c", "pass"], capture_output=True, text=True ) - self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}") - self.assertIn("EAGER", result.stdout) - - @support.requires_resource("cpu") - def test_cli_lazy_imports_modes_import_stdlib_modules(self): - """-X lazy_imports modes should import available stdlib modules.""" - # Do not smoke-test modules with intentional import-time effects. - import_side_effect_modules = {"antigravity", "this"} - importable = [] - - for module in sorted(sys.stdlib_module_names): - if module in import_side_effect_modules: - continue - - with self.subTest(module=module): - code = f"import {module}; print({module})" - baseline = subprocess.run( - [sys.executable, "-I", "-c", code], - capture_output=True, - text=True, - timeout=60, - ) - if baseline.returncode: - # sys.stdlib_module_names includes modules for other - # platforms and optional extension modules not built here. - continue - importable.append(module) - - for mode in ("normal", "none"): - with self.subTest(module=module, mode=mode): - result = subprocess.run( - [ - sys.executable, - "-I", - "-X", - f"lazy_imports={mode}", - "-c", - code, - ], - capture_output=True, - text=True, - timeout=60, - ) - self.assertEqual(result.returncode, 0, result.stderr) - - self.assertGreater(len(importable), 100) + self.assertNotEqual(result.returncode, 0) + self.assertIn("-X lazy_imports: invalid value", result.stderr) + self.assertIn("expected 'all' or 'normal'", result.stderr) def test_cli_lazy_imports_normal_respects_lazy_keyword_only(self): """-X lazy_imports=normal should respect lazy keyword only.""" @@ -1209,77 +1268,27 @@ def test_env_var_lazy_imports_all_enables_global_lazy(self): self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}") self.assertIn("LAZY", result.stdout) - def test_env_var_lazy_imports_none_disables_all_lazy(self): - """PYTHON_LAZY_IMPORTS=none should disable all lazy imports.""" - code = textwrap.dedent(""" - import sys - lazy import json - if 'json' in sys.modules: - print("EAGER") - else: - print("LAZY") - """) + def test_env_var_lazy_imports_none_is_rejected(self): + """PYTHON_LAZY_IMPORTS=none should be rejected.""" import os env = os.environ.copy() env["PYTHON_LAZY_IMPORTS"] = "none" result = subprocess.run( - [sys.executable, "-c", code], + [sys.executable, "-c", "pass"], capture_output=True, text=True, env=env ) - self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}") - self.assertIn("EAGER", result.stdout) - - def test_cli_lazy_imports_none_disables_dunder_lazy_modules(self): - """-X lazy_imports=none should override __lazy_modules__.""" - code = textwrap.dedent(""" - import sys - __lazy_modules__ = ["json"] - import json - if 'json' in sys.modules: - print("EAGER") - else: - print("LAZY") - """) - result = subprocess.run( - [sys.executable, "-X", "lazy_imports=none", "-c", code], - capture_output=True, - text=True, - ) - self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}") - self.assertIn("EAGER", result.stdout) - - def test_env_var_lazy_imports_none_disables_dunder_lazy_modules(self): - """PYTHON_LAZY_IMPORTS=none should override __lazy_modules__.""" - code = textwrap.dedent(""" - import sys - __lazy_modules__ = ["json"] - import json - if 'json' in sys.modules: - print("EAGER") - else: - print("LAZY") - """) - import os - - env = os.environ.copy() - env["PYTHON_LAZY_IMPORTS"] = "none" - result = subprocess.run( - [sys.executable, "-c", code], - capture_output=True, - text=True, - env=env, - ) - self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}") - self.assertIn("EAGER", result.stdout) + self.assertNotEqual(result.returncode, 0) + self.assertIn("PYTHON_LAZY_IMPORTS: invalid value", result.stderr) + self.assertIn("expected 'all' or 'normal'", result.stderr) def test_cli_overrides_env_var(self): """Command-line option should take precedence over environment variable.""" # PEP 810: -X lazy_imports takes precedence over PYTHON_LAZY_IMPORTS code = textwrap.dedent(""" import sys - lazy import json + import json if 'json' in sys.modules: print("EAGER") else: @@ -1287,23 +1296,23 @@ def test_cli_overrides_env_var(self): """) import os env = os.environ.copy() - env["PYTHON_LAZY_IMPORTS"] = "all" # env says all + env["PYTHON_LAZY_IMPORTS"] = "all" # env says all imports are lazy result = subprocess.run( - [sys.executable, "-X", "lazy_imports=none", "-c", code], # CLI says none + [sys.executable, "-X", "lazy_imports=normal", "-c", code], capture_output=True, text=True, env=env ) self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}") - # CLI should win - imports should be eager + # CLI should win, so a regular import should stay eager. self.assertIn("EAGER", result.stdout) def test_sys_set_lazy_imports_overrides_cli(self): """sys.set_lazy_imports() should take precedence over CLI option.""" code = textwrap.dedent(""" import sys - sys.set_lazy_imports("none") # Override CLI - lazy import json + sys.set_lazy_imports("normal") # Override CLI + import json if 'json' in sys.modules: print("EAGER") else: @@ -1932,7 +1941,7 @@ def create_lazy_imports(idx): t.join() assert not errors, f"Errors: {errors}" - assert isinstance(sys.lazy_modules, dict), "sys.lazy_modules is not a dict" + assert isinstance(sys.lazy_modules, set), "sys.lazy_modules is not a dict" print("OK") """) @@ -2085,9 +2094,10 @@ def tearDown(self): def test_set_matches_sys(self): self.assertEqual(_testcapi.PyImport_GetLazyImportsMode(), sys.get_lazy_imports()) - for mode in ("normal", "all", "none"): + for mode in ("normal", "all"): _testcapi.PyImport_SetLazyImportsMode(mode) self.assertEqual(_testcapi.PyImport_GetLazyImportsMode(), sys.get_lazy_imports()) + self.assertRaises(ValueError, _testcapi.PyImport_SetLazyImportsMode, "none") def test_filter_matches_sys(self): self.assertEqual(_testcapi.PyImport_GetLazyImportsFilter(), sys.get_lazy_imports_filter()) diff --git a/Lib/test/test_lazy_import/__main__.py b/Lib/test/test_lazy_import/__main__.py new file mode 100644 index 00000000000..d6c94efaf30 --- /dev/null +++ b/Lib/test/test_lazy_import/__main__.py @@ -0,0 +1,3 @@ +import unittest + +unittest.main('test.test_lazy_import') diff --git a/Lib/test/test_lazy_import/data/module_with_getattr.py b/Lib/test/test_lazy_import/data/module_with_getattr.py index 2ac01a90d76..db3a2301075 100644 --- a/Lib/test/test_lazy_import/data/module_with_getattr.py +++ b/Lib/test/test_lazy_import/data/module_with_getattr.py @@ -1,4 +1,12 @@ def __getattr__(name): if name == "dynamic_attr": return "from_getattr" + elif name == "raising_attr": + raise ValueError("from_getattr") + elif name == "import_error_attr": + raise ImportError(name) + elif name == "warning_attr": + import warnings + warnings.warn("from_getattr", category=UserWarning) + return "from_warning_attr" raise AttributeError(name) diff --git a/Lib/test/test_lazy_import/data/pkg/__init__.py b/Lib/test/test_lazy_import/data/pkg/__init__.py index e526aab9413..5f7b8662596 100644 --- a/Lib/test/test_lazy_import/data/pkg/__init__.py +++ b/Lib/test/test_lazy_import/data/pkg/__init__.py @@ -3,4 +3,12 @@ def __getattr__(name): if name == "dynamic_attr": return "from_getattr" + elif name == "raising_attr": + raise ValueError("from_getattr") + elif name == "import_error_attr": + raise ImportError(name) + elif name == "warning_attr": + import warnings + warnings.warn("from_getattr", category=UserWarning) + return "from_warning_attr" raise AttributeError(name) diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index f2cbc2514fc..08678119200 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -4065,11 +4065,7 @@ def test_config_reject_simple_queue_handler_multiprocessing_context(self): # and thus cannot be used as a queue-like object (gh-124653) import multiprocessing - - if support.MS_WINDOWS: - start_methods = ['spawn'] - else: - start_methods = ['spawn', 'fork', 'forkserver'] + start_methods = multiprocessing.get_all_start_methods() for start_method in start_methods: with self.subTest(start_method=start_method): @@ -4085,10 +4081,8 @@ def test_config_reject_simple_queue_handler_multiprocessing_context(self): " assertions in multiprocessing") def test_config_queue_handler_multiprocessing_context(self): # regression test for gh-121723 - if support.MS_WINDOWS: - start_methods = ['spawn'] - else: - start_methods = ['spawn', 'fork', 'forkserver'] + import multiprocessing + start_methods = multiprocessing.get_all_start_methods() for start_method in start_methods: with self.subTest(start_method=start_method): ctx = multiprocessing.get_context(start_method) @@ -4179,6 +4173,30 @@ def test_90195(self): # Logger should be enabled, since explicitly mentioned self.assertFalse(logger.disabled) + def test_disable_existing_loggers_preserves_children(self): + parent = logging.getLogger('many') + child = logging.getLogger('many.child') + child.setLevel(logging.CRITICAL) + self.assertFalse(child.isEnabledFor(logging.INFO)) + cousin = logging.getLogger('many-child') + for i in range(20): + logging.getLogger(f'many-sibling-{i}') + + self.apply_config({ + 'version': 1, + 'loggers': { + 'many': { + 'level': 'INFO', + }, + }, + }) + + self.assertFalse(parent.disabled) + self.assertFalse(child.disabled) + self.assertEqual(child.level, logging.NOTSET) + self.assertTrue(child.isEnabledFor(logging.INFO)) + self.assertTrue(cousin.disabled) + def test_111615(self): # See gh-111615 import_helper.import_module('_multiprocessing') # see gh-113692 diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py index e93c3c37354..d4f954b34c1 100644 --- a/Lib/test/test_lzma.py +++ b/Lib/test/test_lzma.py @@ -383,6 +383,12 @@ def test_uninitialized_LZMADecompressor_crash(self): self.assertEqual(LZMADecompressor.__new__(LZMADecompressor). decompress(bytes()), b'') + def test_riscv_filter_constant_exists(self): + self.assertTrue(lzma.FILTER_RISCV) + + def test_arm64_filter_constant_exists(self): + self.assertTrue(lzma.FILTER_ARM64) + class CompressDecompressFunctionTestCase(unittest.TestCase): diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 8f9a239bead..85ddf68b3f3 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1,7 +1,8 @@ # Python test set -- math module # XXXX Should not do tests around zero only -from test.support import verbose, requires_IEEE_754 +from test.support import (verbose, requires_IEEE_754, + skip_if_double_rounding) from test import support import unittest import fractions @@ -23,11 +24,6 @@ FLOAT_MAX = sys.float_info.max FLOAT_MIN = sys.float_info.min -# detect evidence of double-rounding: fsum is not always correctly -# rounded on machines that suffer from double rounding. -x, y = 1e16, 2.9999 # use temporary values to defeat peephole optimizer -HAVE_DOUBLE_ROUNDING = (x + y == 1e16 + 4) - # locate file with test values if __name__ == '__main__': file = sys.argv[0] @@ -683,8 +679,7 @@ def testfrexp(name, result, expected): self.assertTrue(math.isnan(math.frexp(NAN)[0])) @requires_IEEE_754 - @unittest.skipIf(HAVE_DOUBLE_ROUNDING, - "fsum is not exact on machines with double rounding") + @skip_if_double_rounding def testFsum(self): # math.fsum relies on exact rounding for correct operation. # There's a known problem with IA32 floating-point that causes @@ -920,8 +915,8 @@ def testHypot(self): self.assertRaises(TypeError, math.hypot, *([1.0]*18), 'spam') @requires_IEEE_754 - @unittest.skipIf(HAVE_DOUBLE_ROUNDING, - "hypot() loses accuracy on machines with double rounding") + @skip_if_double_rounding + @support.skip_on_newlib def testHypotAccuracy(self): # Verify improved accuracy in cases that were known to be inaccurate. # @@ -1253,12 +1248,6 @@ def testLog2(self): self.assertEqual(math.log2(4), 2.0) self.assertEqual(math.log2(MyIndexable(4)), 2.0) - # Large integer values - self.assertEqual(math.log2(2**1023), 1023.0) - self.assertEqual(math.log2(2**1024), 1024.0) - self.assertEqual(math.log2(2**2000), 2000.0) - self.assertEqual(math.log2(MyIndexable(2**2000)), 2000.0) - self.assertRaises(ValueError, math.log2, 0.0) self.assertRaises(ValueError, math.log2, 0) self.assertRaises(ValueError, math.log2, MyIndexable(0)) @@ -1276,12 +1265,19 @@ def testLog2(self): @requires_IEEE_754 # log2() is not accurate enough on Mac OS X Tiger (10.4) @support.requires_mac_ver(10, 5) + @support.skip_on_newlib def testLog2Exact(self): # Check that we get exact equality for log2 of powers of 2. actual = [math.log2(math.ldexp(1.0, n)) for n in range(-1074, 1024)] expected = [float(n) for n in range(-1074, 1024)] self.assertEqual(actual, expected) + # Large integer values + self.assertEqual(math.log2(2**1023), 1023.0) + self.assertEqual(math.log2(2**1024), 1024.0) + self.assertEqual(math.log2(2**2000), 2000.0) + self.assertEqual(math.log2(MyIndexable(2**2000)), 2000.0) + def testLog10(self): self.assertRaises(TypeError, math.log10) self.ftest('log10(0.1)', math.log10(0.1), -1) @@ -1410,8 +1406,7 @@ def __rmul__(self, other): self.assertEqual(sumprod(*args), 0.0) @requires_IEEE_754 - @unittest.skipIf(HAVE_DOUBLE_ROUNDING, - "sumprod() accuracy not guaranteed on machines with double rounding") + @skip_if_double_rounding @support.cpython_only # Other implementations may choose a different algorithm def test_sumprod_accuracy(self): sumprod = math.sumprod @@ -1496,8 +1491,7 @@ def run(func, *args): ) @requires_IEEE_754 - @unittest.skipIf(HAVE_DOUBLE_ROUNDING, - "sumprod() accuracy not guaranteed on machines with double rounding") + @skip_if_double_rounding @support.cpython_only # Other implementations may choose a different algorithm @support.requires_resource('cpu') def test_sumprod_extended_precision_accuracy(self): @@ -2615,6 +2609,7 @@ def test_fma_nan_results(self): self.assertIsNaN(math.fma(a, math.nan, b)) self.assertIsNaN(math.fma(a, b, math.nan)) + @support.skip_on_newlib def test_fma_infinities(self): # Cases involving infinite inputs or results. positives = [1e-300, 2.3, 1e300, math.inf] @@ -2685,7 +2680,7 @@ def test_fma_infinities(self): # gh-73468: On some platforms, libc fma() doesn't implement IEE 754-2008 # properly: it doesn't use the right sign when the result is zero. @unittest.skipIf( - sys.platform.startswith(("freebsd", "wasi", "netbsd", "emscripten")) + sys.platform.startswith(("freebsd", "wasi", "netbsd", "emscripten", "cygwin")) or (sys.platform == "android" and platform.machine() == "x86_64") or support.linked_to_musl(), # gh-131032 f"this platform doesn't implement IEE 754-2008 properly") @@ -2743,6 +2738,7 @@ def test_fma_zero_result(self): self.assertIsNegativeZero(math.fma(y-x, -(x+y), -z)) self.assertIsPositiveZero(math.fma(x-y, -(x+y), z)) + @support.skip_on_newlib def test_fma_overflow(self): a = b = float.fromhex('0x1p512') c = float.fromhex('0x1p1023') @@ -2776,11 +2772,13 @@ def test_fma_overflow(self): c = float.fromhex('0x1.fffffffffffffp+1023') self.assertEqual(math.fma(a, b, -c), c) + @support.skip_on_newlib def test_fma_single_round(self): a = float.fromhex('0x1p-50') self.assertEqual(math.fma(a - 1.0, a + 1.0, 1.0), a*a) - def test_random(self): + @support.skip_on_newlib + def test_fma_random(self): # A collection of randomly generated inputs for which the naive FMA # (with two rounds) gives a different result from a singly-rounded FMA. diff --git a/Lib/test/test_mimetypes.py b/Lib/test/test_mimetypes.py index 607aff8418e..1a3b49b87b1 100644 --- a/Lib/test/test_mimetypes.py +++ b/Lib/test/test_mimetypes.py @@ -6,8 +6,9 @@ import unittest.mock from platform import win32_edition from test import support -from test.support import cpython_only, force_not_colorized, os_helper +from test.support import cpython_only, force_not_colorized, os_helper, requires_subprocess from test.support.import_helper import ensure_lazy_imports +from test.support.script_helper import assert_python_ok, assert_python_failure try: import _winapi @@ -30,50 +31,11 @@ def tearDownModule(): mimetypes.knownfiles = knownfiles -class MimeTypesTestCase(unittest.TestCase): +class MimeTypesModuleTestCase(unittest.TestCase): def setUp(self): - self.db = mimetypes.MimeTypes() - - def test_case_sensitivity(self): - eq = self.assertEqual - eq(self.db.guess_file_type("foobar.html"), ("text/html", None)) - eq(self.db.guess_type("scheme:foobar.html"), ("text/html", None)) - eq(self.db.guess_file_type("foobar.HTML"), ("text/html", None)) - eq(self.db.guess_type("scheme:foobar.HTML"), ("text/html", None)) - eq(self.db.guess_file_type("foobar.tgz"), ("application/x-tar", "gzip")) - eq(self.db.guess_type("scheme:foobar.tgz"), ("application/x-tar", "gzip")) - eq(self.db.guess_file_type("foobar.TGZ"), ("application/x-tar", "gzip")) - eq(self.db.guess_type("scheme:foobar.TGZ"), ("application/x-tar", "gzip")) - eq(self.db.guess_file_type("foobar.tar.Z"), ("application/x-tar", "compress")) - eq(self.db.guess_type("scheme:foobar.tar.Z"), ("application/x-tar", "compress")) - eq(self.db.guess_file_type("foobar.tar.z"), (None, None)) - eq(self.db.guess_type("scheme:foobar.tar.z"), (None, None)) - - def test_default_data(self): - eq = self.assertEqual - eq(self.db.guess_file_type("foo.html"), ("text/html", None)) - eq(self.db.guess_file_type("foo.HTML"), ("text/html", None)) - eq(self.db.guess_file_type("foo.tgz"), ("application/x-tar", "gzip")) - eq(self.db.guess_file_type("foo.tar.gz"), ("application/x-tar", "gzip")) - eq(self.db.guess_file_type("foo.tar.Z"), ("application/x-tar", "compress")) - eq(self.db.guess_file_type("foo.tar.bz2"), ("application/x-tar", "bzip2")) - eq(self.db.guess_file_type("foo.tar.xz"), ("application/x-tar", "xz")) - - def test_data_urls(self): - eq = self.assertEqual - guess_type = self.db.guess_type - eq(guess_type("data:invalidDataWithoutComma"), (None, None)) - eq(guess_type("data:,thisIsTextPlain"), ("text/plain", None)) - eq(guess_type("data:;base64,thisIsTextPlain"), ("text/plain", None)) - eq(guess_type("data:text/x-foo,thisIsTextXFoo"), ("text/x-foo", None)) - - def test_file_parsing(self): - eq = self.assertEqual - sio = io.StringIO("x-application/x-unittest pyunit\n") - self.db.readfp(sio) - eq(self.db.guess_file_type("foo.pyunit"), - ("x-application/x-unittest", None)) - eq(self.db.guess_extension("x-application/x-unittest"), ".pyunit") + mimetypes.inited = False + mimetypes._default_mime_types() + mimetypes._db = None def test_read_mime_types(self): eq = self.assertEqual @@ -108,100 +70,6 @@ def test_read_mime_types(self): mock_open.assert_called_with(filename, encoding='utf-8') eq(mime_dict[".Français"], "application/no-mans-land") - def test_non_standard_types(self): - eq = self.assertEqual - # First try strict - eq(self.db.guess_file_type('foo.xul', strict=True), (None, None)) - # And then non-strict - eq(self.db.guess_file_type('foo.xul', strict=False), ('text/xul', None)) - eq(self.db.guess_file_type('foo.XUL', strict=False), ('text/xul', None)) - eq(self.db.guess_file_type('foo.invalid', strict=False), (None, None)) - eq(self.db.guess_extension('image/jpeg', strict=False), '.jpg') - eq(self.db.guess_extension('image/JPEG', strict=False), '.jpg') - - def test_filename_with_url_delimiters(self): - # bpo-38449: URL delimiters cases should be handled also. - # They would have different mime types if interpreted as URL as - # compared to when interpreted as filename because of the semicolon. - eq = self.assertEqual - gzip_expected = ('application/x-tar', 'gzip') - for name in ( - ';1.tar.gz', - '?1.tar.gz', - '#1.tar.gz', - '#1#.tar.gz', - ';1#.tar.gz', - ';&1=123;?.tar.gz', - '?k1=v1&k2=v2.tar.gz', - ): - for prefix in ('', '/', '\\', - 'c:', 'c:/', 'c:\\', 'c:/d/', 'c:\\d\\', - '//share/server/', '\\\\share\\server\\'): - path = prefix + name - with self.subTest(path=path): - eq(self.db.guess_file_type(path), gzip_expected) - eq(self.db.guess_type(path), gzip_expected) - expected = (None, None) if os.name == 'nt' else gzip_expected - for prefix in ('//', '\\\\', '//share/', '\\\\share\\'): - path = prefix + name - with self.subTest(path=path): - eq(self.db.guess_file_type(path), expected) - eq(self.db.guess_type(path), expected) - eq(self.db.guess_file_type(r" \"\`;b&b&c |.tar.gz"), gzip_expected) - eq(self.db.guess_type(r" \"\`;b&b&c |.tar.gz"), gzip_expected) - - eq(self.db.guess_file_type(r'foo/.tar.gz'), (None, 'gzip')) - eq(self.db.guess_type(r'foo/.tar.gz'), (None, 'gzip')) - expected = (None, 'gzip') if os.name == 'nt' else gzip_expected - eq(self.db.guess_file_type(r'foo\.tar.gz'), expected) - eq(self.db.guess_type(r'foo\.tar.gz'), expected) - eq(self.db.guess_type(r'scheme:foo\.tar.gz'), gzip_expected) - - def test_url(self): - result = self.db.guess_type('http://example.com/host.html') - result = self.db.guess_type('http://host.html') - msg = 'URL only has a host name, not a file' - self.assertSequenceEqual(result, (None, None), msg) - result = self.db.guess_type('http://example.com/host.html') - msg = 'Should be text/html' - self.assertSequenceEqual(result, ('text/html', None), msg) - result = self.db.guess_type('http://example.com/host.html#x.tar') - self.assertSequenceEqual(result, ('text/html', None)) - result = self.db.guess_type('http://example.com/host.html?q=x.tar') - self.assertSequenceEqual(result, ('text/html', None)) - - def test_guess_all_types(self): - # First try strict. Use a set here for testing the results because if - # test_urllib2 is run before test_mimetypes, global state is modified - # such that the 'all' set will have more items in it. - all = self.db.guess_all_extensions('text/plain', strict=True) - self.assertTrue(set(all) >= {'.bat', '.c', '.h', '.ksh', '.pl', '.txt'}) - self.assertEqual(len(set(all)), len(all)) # no duplicates - # And now non-strict - all = self.db.guess_all_extensions('image/jpeg', strict=False) - self.assertEqual(all, ['.jpg', '.jpe', '.jpeg']) - # And now for no hits - all = self.db.guess_all_extensions('image/jpg', strict=True) - self.assertEqual(all, []) - # And now for type existing in both strict and non-strict mappings. - self.db.add_type('test-type', '.strict-ext') - self.db.add_type('test-type', '.non-strict-ext', strict=False) - all = self.db.guess_all_extensions('test-type', strict=False) - self.assertEqual(all, ['.strict-ext', '.non-strict-ext']) - all = self.db.guess_all_extensions('test-type') - self.assertEqual(all, ['.strict-ext']) - # Test that changing the result list does not affect the global state - all.append('.no-such-ext') - all = self.db.guess_all_extensions('test-type') - self.assertNotIn('.no-such-ext', all) - - def test_encoding(self): - filename = support.findfile("mime.types") - mimes = mimetypes.MimeTypes([filename]) - exts = mimes.guess_all_extensions('application/vnd.geocube+xml', - strict=True) - self.assertEqual(exts, ['.g3', '.g\xb3']) - def test_init_reinitializes(self): # Issue 4936: make sure an init starts clean # First, put some poison into the types table @@ -340,6 +208,205 @@ def test_init_stability(self): self.assertEqual(types_map, mimetypes.types_map) self.assertEqual(common_types, mimetypes.common_types) + def test_init_files(self): + guess_file_type = mimetypes.guess_file_type + self.assertEqual(guess_file_type("file.test2")[0], None) + + filename = support.findfile("mime.types2") + mimetypes.init([filename]) + self.assertEqual(guess_file_type("file.test2")[0], "testing/test2") + + mimetypes.init() + self.assertEqual(guess_file_type("file.test2")[0], None) + + def test_init_knownfiles(self): + guess_file_type = mimetypes.guess_file_type + self.assertEqual(guess_file_type("file.test2")[0], None) + + filename = support.findfile("mime.types2") + mimetypes.knownfiles = [filename, "non-existent"] + self.addCleanup(mimetypes.knownfiles.clear) + + mimetypes.init() + self.assertEqual(guess_file_type("file.test2")[0], "testing/test2") + + def test_added_types_are_used(self): + mimetypes.add_type('testing/default-type', '') + mime_type, _ = mimetypes.guess_type('') + self.assertEqual(mime_type, 'testing/default-type') + + mime_type, _ = mimetypes.guess_type('test.myext') + self.assertEqual(mime_type, None) + + mimetypes.add_type('testing/type', '.myext') + mime_type, _ = mimetypes.guess_type('test.myext') + self.assertEqual(mime_type, 'testing/type') + + def test_add_type_with_undotted_extension_not_supported(self): + msg = "Extension 'undotted' must start with '.'" + with self.assertRaisesRegex(ValueError, msg): + mimetypes.add_type("testing/type", "undotted") + with self.assertRaisesRegex(ValueError, msg): + mimetypes.add_type("", "undotted") + + +class MimeTypesClassTestCase(unittest.TestCase): + def setUp(self): + self.db = mimetypes.MimeTypes() + + def test_init_files(self): + guess_file_type = self.db.guess_file_type + self.assertEqual(guess_file_type("file.test2")[0], None) + + filename = support.findfile("mime.types2") + db = mimetypes.MimeTypes([filename]) + guess_file_type = db.guess_file_type + self.assertEqual(guess_file_type("file.test2")[0], "testing/test2") + + def test_init_knownfiles(self): + filename = support.findfile("mime.types2") + mimetypes.knownfiles = [filename, "non-existent"] + self.addCleanup(mimetypes.knownfiles.clear) + + db = mimetypes.MimeTypes() + guess_file_type = db.guess_file_type + self.assertEqual(guess_file_type("file.test2")[0], None) + + def test_case_sensitivity(self): + eq = self.assertEqual + eq(self.db.guess_file_type("foobar.html"), ("text/html", None)) + eq(self.db.guess_type("scheme:foobar.html"), ("text/html", None)) + eq(self.db.guess_file_type("foobar.HTML"), ("text/html", None)) + eq(self.db.guess_type("scheme:foobar.HTML"), ("text/html", None)) + eq(self.db.guess_file_type("foobar.tgz"), ("application/x-tar", "gzip")) + eq(self.db.guess_type("scheme:foobar.tgz"), ("application/x-tar", "gzip")) + eq(self.db.guess_file_type("foobar.TGZ"), ("application/x-tar", "gzip")) + eq(self.db.guess_type("scheme:foobar.TGZ"), ("application/x-tar", "gzip")) + eq(self.db.guess_file_type("foobar.tar.Z"), ("application/x-tar", "compress")) + eq(self.db.guess_type("scheme:foobar.tar.Z"), ("application/x-tar", "compress")) + eq(self.db.guess_file_type("foobar.tar.z"), (None, None)) + eq(self.db.guess_type("scheme:foobar.tar.z"), (None, None)) + + def test_default_data(self): + eq = self.assertEqual + eq(self.db.guess_file_type("foo.html"), ("text/html", None)) + eq(self.db.guess_file_type("foo.HTML"), ("text/html", None)) + eq(self.db.guess_file_type("foo.tgz"), ("application/x-tar", "gzip")) + eq(self.db.guess_file_type("foo.tar.gz"), ("application/x-tar", "gzip")) + eq(self.db.guess_file_type("foo.tar.Z"), ("application/x-tar", "compress")) + eq(self.db.guess_file_type("foo.tar.bz2"), ("application/x-tar", "bzip2")) + eq(self.db.guess_file_type("foo.tar.xz"), ("application/x-tar", "xz")) + + def test_data_urls(self): + eq = self.assertEqual + guess_type = self.db.guess_type + eq(guess_type("data:invalidDataWithoutComma"), (None, None)) + eq(guess_type("data:,thisIsTextPlain"), ("text/plain", None)) + eq(guess_type("data:;base64,thisIsTextPlain"), ("text/plain", None)) + eq(guess_type("data:text/x-foo,thisIsTextXFoo"), ("text/x-foo", None)) + + def test_file_parsing(self): + eq = self.assertEqual + sio = io.StringIO("x-application/x-unittest pyunit\n") + self.db.readfp(sio) + eq(self.db.guess_file_type("foo.pyunit"), + ("x-application/x-unittest", None)) + eq(self.db.guess_extension("x-application/x-unittest"), ".pyunit") + + def test_non_standard_types(self): + eq = self.assertEqual + # First try strict + eq(self.db.guess_file_type('foo.xul', strict=True), (None, None)) + # And then non-strict + eq(self.db.guess_file_type('foo.xul', strict=False), ('text/xul', None)) + eq(self.db.guess_file_type('foo.XUL', strict=False), ('text/xul', None)) + eq(self.db.guess_file_type('foo.invalid', strict=False), (None, None)) + eq(self.db.guess_extension('image/jpeg', strict=False), '.jpg') + eq(self.db.guess_extension('image/JPEG', strict=False), '.jpg') + + def test_filename_with_url_delimiters(self): + # bpo-38449: URL delimiters cases should be handled also. + # They would have different mime types if interpreted as URL as + # compared to when interpreted as filename because of the semicolon. + eq = self.assertEqual + gzip_expected = ('application/x-tar', 'gzip') + for name in ( + ';1.tar.gz', + '?1.tar.gz', + '#1.tar.gz', + '#1#.tar.gz', + ';1#.tar.gz', + ';&1=123;?.tar.gz', + '?k1=v1&k2=v2.tar.gz', + ): + for prefix in ('', '/', '\\', + 'c:', 'c:/', 'c:\\', 'c:/d/', 'c:\\d\\', + '//share/server/', '\\\\share\\server\\'): + path = prefix + name + with self.subTest(path=path): + eq(self.db.guess_file_type(path), gzip_expected) + eq(self.db.guess_type(path), gzip_expected) + expected = (None, None) if os.name == 'nt' else gzip_expected + for prefix in ('//', '\\\\', '//share/', '\\\\share\\'): + path = prefix + name + with self.subTest(path=path): + eq(self.db.guess_file_type(path), expected) + eq(self.db.guess_type(path), expected) + eq(self.db.guess_file_type(r" \"\`;b&b&c |.tar.gz"), gzip_expected) + eq(self.db.guess_type(r" \"\`;b&b&c |.tar.gz"), gzip_expected) + + eq(self.db.guess_file_type(r'foo/.tar.gz'), (None, 'gzip')) + eq(self.db.guess_type(r'foo/.tar.gz'), (None, 'gzip')) + expected = (None, 'gzip') if os.name == 'nt' else gzip_expected + eq(self.db.guess_file_type(r'foo\.tar.gz'), expected) + eq(self.db.guess_type(r'foo\.tar.gz'), expected) + eq(self.db.guess_type(r'scheme:foo\.tar.gz'), gzip_expected) + + def test_url(self): + result = self.db.guess_type('http://example.com/host.html') + result = self.db.guess_type('http://host.html') + msg = 'URL only has a host name, not a file' + self.assertSequenceEqual(result, (None, None), msg) + result = self.db.guess_type('http://example.com/host.html') + msg = 'Should be text/html' + self.assertSequenceEqual(result, ('text/html', None), msg) + result = self.db.guess_type('http://example.com/host.html#x.tar') + self.assertSequenceEqual(result, ('text/html', None)) + result = self.db.guess_type('http://example.com/host.html?q=x.tar') + self.assertSequenceEqual(result, ('text/html', None)) + + def test_guess_all_types(self): + # First try strict. Use a set here for testing the results because if + # test_urllib2 is run before test_mimetypes, global state is modified + # such that the 'all' set will have more items in it. + all = self.db.guess_all_extensions('text/plain', strict=True) + self.assertTrue(set(all) >= {'.bat', '.c', '.h', '.ksh', '.pl', '.txt'}) + self.assertEqual(len(set(all)), len(all)) # no duplicates + # And now non-strict + all = self.db.guess_all_extensions('image/jpeg', strict=False) + self.assertEqual(all, ['.jpg', '.jpe', '.jpeg']) + # And now for no hits + all = self.db.guess_all_extensions('image/jpg', strict=True) + self.assertEqual(all, []) + # And now for type existing in both strict and non-strict mappings. + self.db.add_type('test-type', '.strict-ext') + self.db.add_type('test-type', '.non-strict-ext', strict=False) + all = self.db.guess_all_extensions('test-type', strict=False) + self.assertEqual(all, ['.strict-ext', '.non-strict-ext']) + all = self.db.guess_all_extensions('test-type') + self.assertEqual(all, ['.strict-ext']) + # Test that changing the result list does not affect the global state + all.append('.no-such-ext') + all = self.db.guess_all_extensions('test-type') + self.assertNotIn('.no-such-ext', all) + + def test_encoding(self): + filename = support.findfile("mime.types") + mimes = mimetypes.MimeTypes([filename]) + exts = mimes.guess_all_extensions('application/vnd.geocube+xml', + strict=True) + self.assertEqual(exts, ['.g3', '.g\xb3']) + def test_path_like_ob(self): filename = "LICENSE.txt" filepath = os_helper.FakePath(filename) @@ -377,25 +444,6 @@ def test_keywords_args_api(self): self.assertEqual(self.db.guess_all_extensions( type='image/jpeg', strict=True), ['.jpg', '.jpe', '.jpeg']) - def test_added_types_are_used(self): - mimetypes.add_type('testing/default-type', '') - mime_type, _ = mimetypes.guess_type('') - self.assertEqual(mime_type, 'testing/default-type') - - mime_type, _ = mimetypes.guess_type('test.myext') - self.assertEqual(mime_type, None) - - mimetypes.add_type('testing/type', '.myext') - mime_type, _ = mimetypes.guess_type('test.myext') - self.assertEqual(mime_type, 'testing/type') - - def test_add_type_with_undotted_extension_not_supported(self): - msg = "Extension 'undotted' must start with '.'" - with self.assertRaisesRegex(ValueError, msg): - mimetypes.add_type("testing/type", "undotted") - with self.assertRaisesRegex(ValueError, msg): - mimetypes.add_type("", "undotted") - @unittest.skipUnless(sys.platform.startswith("win"), "Windows only") class Win32MimeTypesTestCase(unittest.TestCase): @@ -511,5 +559,59 @@ def test_invocation_error(self): self.assertEqual(result, expected) +@requires_subprocess() +class CommandLineSubprocessTest(unittest.TestCase): + def test_help(self): + rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', '--help') + self.assertIn(b'mimetypes', stdout) + self.assertIn(b'--extension', stdout) + self.assertIn(b'--lenient', stdout) + + def test_type_lookup(self): + rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', 'foo.pdf') + self.assertEqual(stdout.strip(), b'type: application/pdf encoding: None') + self.assertEqual(stderr, b'') + + def test_type_lookup_unknown(self): + rc, stdout, stderr = assert_python_failure('-m', 'mimetypes', 'foo.unknownext12345') + self.assertEqual(stdout.strip(), b'error: media type unknown for foo.unknownext12345') + self.assertEqual(stderr, b'') + + def test_extension_flag(self): + rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', '-e', 'image/jpeg') + self.assertEqual(stdout.strip(), b'.jpg') + self.assertEqual(stderr, b'') + + def test_extension_flag_unknown(self): + rc, stdout, stderr = assert_python_failure('-m', 'mimetypes', '-e', 'image/unknowntype12345') + self.assertEqual(stdout.strip(), b'error: unknown type image/unknowntype12345') + self.assertEqual(stderr, b'') + + def test_lenient_flag(self): + rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', '-e', '--lenient', 'text/xul') + self.assertIn(b'.xul', stdout) + self.assertEqual(stderr, b'') + + def test_multiple_inputs(self): + rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', 'foo.pdf', 'foo.png') + self.assertIn(b'type: application/pdf encoding: None', stdout) + self.assertIn(b'type: image/png encoding: None', stdout) + self.assertEqual(stderr, b'') + + def test_multiple_inputs_with_error(self): + rc, stdout, stderr = assert_python_failure( + '-m', 'mimetypes', 'foo.pdf', 'foo.unknownext12345' + ) + self.assertIn(b'type: application/pdf encoding: None', stdout) + self.assertIn(b'error: media type unknown for foo.unknownext12345', stdout) + self.assertEqual(stderr, b'') + + @force_not_colorized + def test_unknown_flag(self): + rc, stdout, stderr = assert_python_failure('-m', 'mimetypes', '--unknown-flag', 'foo.pdf') + self.assertEqual(stdout, b'') + self.assertIn(b'error: unrecognized arguments: --unknown-flag', stderr) + + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_msvcrt.py b/Lib/test/test_msvcrt.py index 1c6905bd1ee..fef86ce323e 100644 --- a/Lib/test/test_msvcrt.py +++ b/Lib/test/test_msvcrt.py @@ -4,6 +4,7 @@ import unittest from textwrap import dedent +from test import support from test.support import os_helper, requires_resource from test.support.os_helper import TESTFN, TESTFN_ASCII @@ -67,8 +68,12 @@ def run_in_separated_process(self, code): # Run test in a separated process to avoid stdin conflicts. # See: gh-110147 cmd = [sys.executable, '-c', code] - subprocess.run(cmd, check=True, capture_output=True, - creationflags=subprocess.CREATE_NEW_CONSOLE) + try: + subprocess.run(cmd, check=True, capture_output=True, + creationflags=subprocess.CREATE_NEW_CONSOLE) + except subprocess.CalledProcessError as exc: + support.skip_on_low_desktop_heap_memory_subprocess(exc.returncode) + raise def test_kbhit(self): code = dedent(''' diff --git a/Lib/test/test_multiprocessing_forkserver/__init__.py b/Lib/test/test_multiprocessing_forkserver/__init__.py index 7b1b884ab29..c58375e2861 100644 --- a/Lib/test/test_multiprocessing_forkserver/__init__.py +++ b/Lib/test/test_multiprocessing_forkserver/__init__.py @@ -6,7 +6,7 @@ if support.PGO: raise unittest.SkipTest("test is not helpful for PGO") -if sys.platform == "win32": +if sys.platform in ("win32", "cygwin"): raise unittest.SkipTest("forkserver is not available on Windows") if not support.has_fork_support: diff --git a/Lib/test/test_os/test_os.py b/Lib/test/test_os/test_os.py index 7e670e5a139..68cb32cd40b 100644 --- a/Lib/test/test_os/test_os.py +++ b/Lib/test/test_os/test_os.py @@ -1867,7 +1867,9 @@ def test_walk_bad_dir2(self): walk_it = self.walk(self.tmp1_path, follow_symlinks=True) if self.is_fwalk: - self.assertRaises(NotADirectoryError, next, walk_it) + with self.assertRaises(OSError) as cm: + next(walk_it) + self.assertIn(cm.exception.errno, (errno.ENOTDIR, errno.EINVAL)) self.assertRaises(StopIteration, next, walk_it) @unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()') @@ -2137,6 +2139,94 @@ def test_mode(self): self.assertEqual(os.stat(path).st_mode & 0o777, 0o555) self.assertEqual(os.stat(parent).st_mode & 0o777, 0o775) + @unittest.skipIf( + support.is_emscripten or support.is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_mode_with_parent_mode(self): + # Test the parent_mode parameter + parent = os.path.join(os_helper.TESTFN, 'dir1') + path = os.path.join(parent, 'dir2') + with os_helper.temp_umask(0o002): + # Specify mode for both leaf and parent directories + os.makedirs(path, 0o770, parent_mode=0o750) + self.assertTrue(os.path.exists(path)) + self.assertTrue(os.path.isdir(path)) + if os.name != 'nt': + # Leaf directory gets the mode parameter + self.assertEqual(os.stat(path).st_mode & 0o777, 0o770) + # Parent directory gets the parent_mode parameter + self.assertEqual(os.stat(parent).st_mode & 0o777, 0o750) + + @unittest.skipIf( + support.is_emscripten or support.is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_parent_mode_deep_hierarchy(self): + # Test parent_mode with deep directory hierarchy + base = os.path.join(os_helper.TESTFN, 'dir1', 'dir2', 'dir3') + with os_helper.temp_umask(0o002): + os.makedirs(base, 0o755, parent_mode=0o700) + self.assertTrue(os.path.exists(base)) + if os.name != 'nt': + # Check that all parent directories have parent_mode + level1 = os.path.join(os_helper.TESTFN, 'dir1') + level2 = os.path.join(level1, 'dir2') + self.assertEqual(os.stat(level1).st_mode & 0o777, 0o700) + self.assertEqual(os.stat(level2).st_mode & 0o777, 0o700) + # Leaf directory has the regular mode + self.assertEqual(os.stat(base).st_mode & 0o777, 0o755) + + @unittest.skipIf( + support.is_emscripten or support.is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_parent_mode_same_as_mode(self): + # Test emulating Python 3.6 behavior by setting parent_mode=mode + parent = os.path.join(os_helper.TESTFN, 'dir1') + path = os.path.join(parent, 'dir2') + with os_helper.temp_umask(0o002): + os.makedirs(path, 0o705, parent_mode=0o705) + self.assertTrue(os.path.exists(path)) + if os.name != 'nt': + # Both directories should have the same mode + self.assertEqual(os.stat(path).st_mode & 0o777, 0o705) + self.assertEqual(os.stat(parent).st_mode & 0o777, 0o705) + + @unittest.skipIf( + support.is_emscripten or support.is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_parent_mode_combined_with_umask(self): + # parent_mode, like mode, is combined with the process umask; it does + # not bypass it. + parent = os.path.join(os_helper.TESTFN, 'dir1') + path = os.path.join(parent, 'dir2') + with os_helper.temp_umask(0o022): + os.makedirs(path, 0o777, parent_mode=0o777) + self.assertTrue(os.path.isdir(path)) + if os.name != 'nt': + # 0o777 is masked down to 0o755 by the 0o022 umask, for both + # the leaf (mode) and the parent (parent_mode). + self.assertEqual(os.stat(path).st_mode & 0o777, 0o755) + self.assertEqual(os.stat(parent).st_mode & 0o777, 0o755) + @unittest.skipIf( support.is_wasi, "WASI's umask is a stub." @@ -2210,15 +2300,9 @@ def test_win32_mkdir_700(self): ) def tearDown(self): - path = os.path.join(os_helper.TESTFN, 'dir1', 'dir2', 'dir3', - 'dir4', 'dir5', 'dir6') - # If the tests failed, the bottom-most directory ('../dir6') - # may not have been created, so we look for the outermost directory - # that exists. - while not os.path.exists(path) and path != os_helper.TESTFN: - path = os.path.dirname(path) - - os.removedirs(path) + # Remove the whole tree regardless of which sub-directories a test + # created and regardless of their permission bits. + os_helper.rmtree(os_helper.TESTFN) @unittest.skipUnless(hasattr(os, "chown"), "requires os.chown()") @@ -2269,6 +2353,8 @@ def test_chown_with_root(self): @requires_non_root_user @unittest.skipUnless(len(all_users) > 1, "test needs and more than one user") + @unittest.skipIf(sys.platform == 'cygwin', + 'chown() can set any uid on Cygwin') def test_chown_without_permission(self): uid_1, uid_2 = all_users[:2] gid = os.stat(os_helper.TESTFN).st_gid @@ -4051,10 +4137,11 @@ def test_timerfd_non_blocking(self): initial_expiration = 0.1 os.timerfd_settime(fd, initial=initial_expiration, interval=0) - # read() raises OSError with errno is EAGAIN for non-blocking timer. - with self.assertRaises(OSError) as ctx: - self.read_count_signaled(fd) - self.assertEqual(ctx.exception.errno, errno.EAGAIN) + if sys.platform != 'cygwin': + # read() raises OSError with errno is EAGAIN for non-blocking timer. + with self.assertRaises(OSError) as ctx: + self.read_count_signaled(fd) + self.assertEqual(ctx.exception.errno, errno.EAGAIN) # Wait more than 0.1 seconds time.sleep(initial_expiration + 0.1) @@ -4235,12 +4322,19 @@ def test_timerfd_ns_initval(self): # 2nd call next_expiration_ns, interval_ns2 = os.timerfd_settime_ns(fd, initial=initial_expiration_ns, interval=interval_ns) - self.assertEqual(interval_ns2, interval_ns) + CYGWIN = (sys.platform == 'cygwin') + if not CYGWIN: + self.assertEqual(interval_ns2, interval_ns) + else: + self.assertEqual(interval_ns2, 0) self.assertEqual(next_expiration_ns, initial_expiration_ns) # timerfd_gettime next_expiration_ns, interval_ns2 = os.timerfd_gettime_ns(fd) - self.assertEqual(interval_ns2, interval_ns) + if not CYGWIN: + self.assertEqual(interval_ns2, interval_ns) + else: + self.assertEqual(interval_ns2, 0) self.assertLessEqual(next_expiration_ns, initial_expiration_ns) self.assertAlmostEqual(next_expiration_ns, initial_expiration_ns, delta=limit_error) diff --git a/Lib/test/test_os/test_posix.py b/Lib/test/test_os/test_posix.py index 0e8495a4eff..1395156539a 100644 --- a/Lib/test/test_os/test_posix.py +++ b/Lib/test/test_os/test_posix.py @@ -142,8 +142,8 @@ def test_initgroups(self): self.assertRaises(TypeError, posix.initgroups, "foo", 3, object()) # If a non-privileged user invokes it, it should fail with OSError - # EPERM. - if os.getuid() != 0: + # EPERM. On Cygwin, initgroups(name, 13) does not fail. + if os.getuid() != 0 and sys.platform != 'cygwin': try: name = pwd.getpwuid(posix.getuid()).pw_name except KeyError: @@ -597,7 +597,9 @@ def test_sysconf(self): posix.sysconf(1.23) arg_max = posix.sysconf("SC_ARG_MAX") - self.assertGreater(arg_max, 0) + # SC_ARG_MAX is -1 on Cygwin + if sys.platform != 'cygwin': + self.assertGreater(arg_max, 0) self.assertEqual( posix.sysconf(posix.sysconf_names["SC_ARG_MAX"]), arg_max) @@ -1602,6 +1604,34 @@ def test_pidfd_open(self): self.assertEqual(cm.exception.errno, errno.EINVAL) os.close(os.pidfd_open(os.getpid(), 0)) + @unittest.skipUnless(hasattr(os, "pidfd_getfd"), "pidfd_getfd unavailable") + def test_pidfd_getfd(self): + fd = os.open(__file__, os.O_RDONLY) + self.addCleanup(os.close, fd) + pidfd = os.pidfd_open(os.getpid(), 0) + self.addCleanup(os.close, pidfd) + try: + dupfd = os.pidfd_getfd(pidfd, fd) + except OSError as exc: + if exc.errno == errno.ENOSYS: + self.skipTest("system does not support pidfd_getfd") + if isinstance(exc, PermissionError): + self.skipTest(f"pidfd_getfd syscall blocked: {exc!r}") + raise + self.addCleanup(os.close, dupfd) + + self.assertFalse(os.get_inheritable(dupfd)) # PEP 446 + self.assertEqual(os.fstat(fd), os.fstat(dupfd)) + + with self.assertRaises(OSError) as cm: + os.pidfd_getfd(-1, 0) + self.assertEqual(cm.exception.errno, errno.EBADF) + + with self.assertRaises(OSError) as cm: + bad_fd = os_helper.make_bad_fd() + os.pidfd_getfd(pidfd, bad_fd) + self.assertEqual(cm.exception.errno, errno.EBADF) + @os_helper.skip_unless_hardlink @os_helper.skip_unless_symlink def test_link_follow_symlinks(self): @@ -1943,6 +1973,14 @@ def test_no_such_executable(self): # directories in the $PATH that are not accessible. except (FileNotFoundError, PermissionError) as exc: self.assertEqual(exc.filename, no_such_executable) + + # On Cygwin, os.posix_spawn() creates a child process even if the + # executable doesn't exist. We have to reap this process. + if sys.platform == 'cygwin': + for _ in support.sleeping_retry(support.SHORT_TIMEOUT): + pid, status = os.waitpid(-1, os.WNOHANG) + if pid != 0: + break else: pid2, status = os.waitpid(pid, 0) self.assertEqual(pid2, pid) diff --git a/Lib/test/test_pathlib/test_pathlib.py b/Lib/test/test_pathlib/test_pathlib.py index 09d1b5d725e..2cb4876f5c6 100644 --- a/Lib/test/test_pathlib/test_pathlib.py +++ b/Lib/test/test_pathlib/test_pathlib.py @@ -2492,6 +2492,116 @@ def my_mkdir(path, mode=0o777): self.assertNotIn(str(p12), concurrently_created) self.assertTrue(p.exists()) + @unittest.skipIf( + is_emscripten or is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_mkdir_parents_umask(self): + # Test that parent directories respect umask when parent_mode is not set + p = self.cls(self.base, 'umasktest', 'child') + self.assertFalse(p.exists()) + if os.name != 'nt': + with os_helper.temp_umask(0o002): + p.mkdir(0o755, parents=True) + self.assertTrue(p.exists()) + # Leaf directory gets the specified mode + self.assertEqual(p.stat().st_mode & 0o777, 0o755) + # Parent directory respects umask (0o777 & ~0o002 = 0o775) + self.assertEqual(p.parent.stat().st_mode & 0o777, 0o775) + + @unittest.skipIf( + is_emscripten or is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_mkdir_with_parent_mode(self): + # Test the parent_mode parameter + p = self.cls(self.base, 'newdirPM', 'subdirPM') + self.assertFalse(p.exists()) + if os.name != 'nt': + with os_helper.temp_umask(0o022): + # Specify different modes for parent and leaf directories + p.mkdir(0o755, parents=True, parent_mode=0o750) + self.assertTrue(p.exists()) + self.assertTrue(p.is_dir()) + # Leaf directory gets the mode parameter + self.assertEqual(p.stat().st_mode & 0o777, 0o755) + # Parent directory gets the parent_mode parameter + self.assertEqual(p.parent.stat().st_mode & 0o777, 0o750) + + @unittest.skipIf( + is_emscripten or is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_mkdir_parent_mode_deep_hierarchy(self): + # Test parent_mode with deep directory hierarchy + p = self.cls(self.base, 'level1PM', 'level2PM', 'level3PM') + self.assertFalse(p.exists()) + if os.name != 'nt': + with os_helper.temp_umask(0o022): + p.mkdir(0o755, parents=True, parent_mode=0o700) + self.assertTrue(p.exists()) + # Check that all parent directories have parent_mode + level1 = self.cls(self.base, 'level1PM') + level2 = level1 / 'level2PM' + self.assertEqual(level1.stat().st_mode & 0o777, 0o700) + self.assertEqual(level2.stat().st_mode & 0o777, 0o700) + # Leaf directory has the regular mode + self.assertEqual(p.stat().st_mode & 0o777, 0o755) + + @unittest.skipIf( + is_emscripten or is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_mkdir_parent_mode_combined_with_umask(self): + # parent_mode, like mode, is combined with the process umask; it does + # not bypass it. + p = self.cls(self.base, 'umaskPM', 'child') + self.assertFalse(p.exists()) + if os.name != 'nt': + with os_helper.temp_umask(0o022): + p.mkdir(0o777, parents=True, parent_mode=0o777) + self.assertTrue(p.exists()) + # 0o777 is masked down to 0o755 by the 0o022 umask, for both + # the leaf (mode) and the parent (parent_mode). + self.assertEqual(p.stat().st_mode & 0o777, 0o755) + self.assertEqual(p.parent.stat().st_mode & 0o777, 0o755) + + @unittest.skipIf( + is_emscripten or is_wasi, + "umask is not implemented on Emscripten/WASI." + ) + @unittest.skipIf( + sys.platform == "android", + "Android filesystem may not honor requested permissions." + ) + def test_mkdir_parent_mode_same_as_mode(self): + # Test setting parent_mode same as mode + p = self.cls(self.base, 'samedirPM', 'subdirPM') + self.assertFalse(p.exists()) + if os.name != 'nt': + with os_helper.temp_umask(0o022): + p.mkdir(0o705, parents=True, parent_mode=0o705) + self.assertTrue(p.exists()) + # Both directories should have the same mode + self.assertEqual(p.stat().st_mode & 0o777, 0o705) + self.assertEqual(p.parent.stat().st_mode & 0o777, 0o705) + @needs_symlinks def test_symlink_to(self): P = self.cls(self.base) diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py index d44e61f25f7..28748009f73 100644 --- a/Lib/test/test_peepholer.py +++ b/Lib/test/test_peepholer.py @@ -1127,8 +1127,8 @@ def test_import_from_doesnt_clobber_load_fast_borrow(self): def f(self): if x: pass self.x - from shutil import ExecError - print(ExecError) + from heapq import heapify_max + print(heapify_max) self.assertInBytecode(f, "LOAD_FAST_BORROW", "self") class DirectCfgOptimizerTests(CfgOptimizationTestCase): @@ -1307,10 +1307,10 @@ def test_build_empty_tuple(self): ('RETURN_VALUE', None, 0), ] after = [ - ('LOAD_CONST', 0, 0), + ('LOAD_COMMON_CONSTANT', opcode._common_constants.index(()), 0), ('RETURN_VALUE', None, 0), ] - self.cfg_optimization_test(before, after, consts=[], expected_consts=[()]) + self.cfg_optimization_test(before, after, consts=[], expected_consts=[]) def test_fold_tuple_of_constants(self): before = [ @@ -1365,10 +1365,10 @@ def test_fold_constant_intrinsic_list_to_tuple(self): ('RETURN_VALUE', None, 0) ] after = [ - ('LOAD_CONST', 0, 0), + ('LOAD_COMMON_CONSTANT', opcode._common_constants.index(()), 0), ('RETURN_VALUE', None, 0) ] - self.cfg_optimization_test(before, after, consts=[], expected_consts=[()]) + self.cfg_optimization_test(before, after, consts=[], expected_consts=[]) # multiple BUILD_LIST 0: ([], 1, [], 2) same = [ diff --git a/Lib/test/test_perf_profiler.py b/Lib/test/test_perf_profiler.py index 597e6599352..425c76dd01e 100644 --- a/Lib/test/test_perf_profiler.py +++ b/Lib/test/test_perf_profiler.py @@ -34,6 +34,21 @@ def supports_trampoline_profiling(): raise unittest.SkipTest("perf trampoline profiling not supported") +def _perf_env(**env_vars): + env = os.environ.copy() + # Keep perf's output stable regardless of the builder's perf config. + env.update( + { + "DEBUGINFOD_URLS": "", + "PERF_CONFIG": os.devnull, + } + ) + if env_vars: + env.update(env_vars) + env["PYTHON_JIT"] = "0" + return env + + class TestPerfTrampoline(unittest.TestCase): def setUp(self): super().setUp() @@ -63,13 +78,12 @@ def baz(): """ with temp_dir() as script_dir: script = make_script(script_dir, "perftest", code) - env = {**os.environ, "PYTHON_JIT": "0"} with subprocess.Popen( [sys.executable, "-Xperf", script], text=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, - env=env, + env=_perf_env(), ) as process: stdout, stderr = process.communicate() @@ -132,13 +146,12 @@ def baz(): """ with temp_dir() as script_dir: script = make_script(script_dir, "perftest", code) - env = {**os.environ, "PYTHON_JIT": "0"} with subprocess.Popen( [sys.executable, "-Xperf", script], text=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, - env=env, + env=_perf_env(), ) as process: stdout, stderr = process.communicate() @@ -198,13 +211,12 @@ def test_trampoline_works_after_fork_with_many_code_objects(self): """ with temp_dir() as script_dir: script = make_script(script_dir, "perftest", code) - env = {**os.environ, "PYTHON_JIT": "0"} with subprocess.Popen( [sys.executable, "-Xperf", script], text=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, - env=env, + env=_perf_env(), ) as process: stdout, stderr = process.communicate() @@ -242,13 +254,12 @@ def baz(): code = set_eval_hook + code with temp_dir() as script_dir: script = make_script(script_dir, "perftest", code) - env = {**os.environ, "PYTHON_JIT": "0"} with subprocess.Popen( [sys.executable, script], text=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, - env=env, + env=_perf_env(), ) as process: stdout, stderr = process.communicate() @@ -345,9 +356,12 @@ def perf_command_works(): "-c", 'print("hello")', ) - env = {**os.environ, "PYTHON_JIT": "0"} stdout = subprocess.check_output( - cmd, cwd=script_dir, text=True, stderr=subprocess.STDOUT, env=env + cmd, + cwd=script_dir, + text=True, + stderr=subprocess.STDOUT, + env=_perf_env(), ) except (subprocess.SubprocessError, OSError): return False @@ -359,43 +373,49 @@ def perf_command_works(): def run_perf(cwd, *args, use_jit=False, **env_vars): - env = os.environ.copy() - if env_vars: - env.update(env_vars) - env["PYTHON_JIT"] = "0" + env = _perf_env(**env_vars) output_file = cwd + "/perf_output.perf" - if not use_jit: - base_cmd = ( - "perf", - "record", - "--no-buildid", - "--no-buildid-cache", - "-g", - "--call-graph=fp", - "-o", output_file, - "--" - ) + base_cmd = [ + "perf", + "record", + "--no-buildid", + "--no-buildid-cache", + "-g", + "--call-graph=dwarf,65528" if use_jit else "--call-graph=fp", + ] + if use_jit: + perf_commands = [] + # Some builders have low perf_event_mlock_kb limits. + mmap_sizes = ("4M", "2M", "1M", "512K", "256K", "128K", None) + for mmap_size in mmap_sizes: + command = base_cmd.copy() + if mmap_size is not None: + command += ["-F99", "-k1", "-m", mmap_size] + else: + command += ["-F99", "-k1"] + command += ["-o", output_file, "--"] + perf_commands.append(command) else: - base_cmd = ( - "perf", - "record", - "--no-buildid", - "--no-buildid-cache", - "-g", - "--call-graph=dwarf,65528", - "-F99", - "-k1", - "-o", - output_file, - "--", + perf_commands = [base_cmd + ["-o", output_file, "--"]] + + mmap_pages_error = "try again with a smaller value of -m/--mmap_pages" + for index, base_cmd in enumerate(perf_commands): + proc = subprocess.run( + base_cmd + list(args), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + env=env, + text=True, ) - proc = subprocess.run( - base_cmd + args, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - env=env, - text=True, - ) + if ( + proc.returncode + and use_jit + and index != len(perf_commands) - 1 + and mmap_pages_error in proc.stderr + ): + continue + break + if proc.returncode: print(proc.stderr, file=sys.stderr) raise ValueError(f"Perf failed with return code {proc.returncode}") @@ -425,16 +445,34 @@ def run_perf(cwd, *args, use_jit=False, **env_vars): class TestPerfProfilerMixin: - def run_perf(self, script_dir, perf_mode, script): + PERF_CAPTURE_ATTEMPTS = 3 + + def run_perf(self, script_dir, script, activate_trampoline=True): raise NotImplementedError() + def run_perf_with_retries( + self, script_dir, script, expected_symbols=(), activate_trampoline=True + ): + stdout = stderr = "" + for _ in range(self.PERF_CAPTURE_ATTEMPTS): + stdout, stderr = self.run_perf( + script_dir, script, activate_trampoline=activate_trampoline + ) + if activate_trampoline and any( + symbol not in stdout for symbol in expected_symbols + ): + continue + break + return stdout, stderr + def test_python_calls_appear_in_the_stack_if_perf_activated(self): with temp_dir() as script_dir: code = """if 1: + from itertools import repeat + def foo(n): - x = 0 - for i in range(n): - x += i + for _ in repeat(None, n): + pass def bar(n): foo(n) @@ -442,23 +480,29 @@ def bar(n): def baz(n): bar(n) - baz(10000000) + baz(40000000) """ script = make_script(script_dir, "perftest", code) - stdout, stderr = self.run_perf(script_dir, script) - self.assertEqual(stderr, "") + expected_symbols = [ + f"py::foo:{script}", + f"py::bar:{script}", + f"py::baz:{script}", + ] + stdout, _ = self.run_perf_with_retries( + script_dir, script, expected_symbols + ) - self.assertIn(f"py::foo:{script}", stdout) - self.assertIn(f"py::bar:{script}", stdout) - self.assertIn(f"py::baz:{script}", stdout) + for expected_symbol in expected_symbols: + self.assertIn(expected_symbol, stdout) def test_python_calls_do_not_appear_in_the_stack_if_perf_deactivated(self): with temp_dir() as script_dir: code = """if 1: + from itertools import repeat + def foo(n): - x = 0 - for i in range(n): - x += i + for _ in repeat(None, n): + pass def bar(n): foo(n) @@ -466,13 +510,12 @@ def bar(n): def baz(n): bar(n) - baz(10000000) + baz(40000000) """ script = make_script(script_dir, "perftest", code) - stdout, stderr = self.run_perf( + stdout, _ = self.run_perf_with_retries( script_dir, script, activate_trampoline=False ) - self.assertEqual(stderr, "") self.assertNotIn(f"py::foo:{script}", stdout) self.assertNotIn(f"py::bar:{script}", stdout) @@ -542,13 +585,12 @@ def compile_trampolines_for_all_functions(): with temp_dir() as script_dir: script = make_script(script_dir, "perftest", code) - env = {**os.environ, "PYTHON_JIT": "0"} with subprocess.Popen( [sys.executable, "-Xperf", script], universal_newlines=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, - env=env, + env=_perf_env(), ) as process: stdout, stderr = process.communicate() diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py index 55a3c654aa0..48375cf459e 100644 --- a/Lib/test/test_pickle.py +++ b/Lib/test/test_pickle.py @@ -786,7 +786,11 @@ def test_invocation(self): 'b': ('character string', b'byte string'), 'c': 'string' } - expect = "{'a': [1, 2.0, (3+4j)], 'b': ('character string', b'byte string'), 'c': 'string'}" + expect = ''' + {'a': [1, 2.0, (3+4j)], + 'b': ('character string', b'byte string'), + 'c': 'string'} + ''' self.set_pickle_data(data) with self.subTest(data=data): diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py index f439782f53e..041c2072b9e 100644 --- a/Lib/test/test_pprint.py +++ b/Lib/test/test_pprint.py @@ -3,7 +3,6 @@ import collections import contextlib import dataclasses -import functools import io import itertools import pprint @@ -16,10 +15,6 @@ from test.support import cpython_only from test.support.import_helper import ensure_lazy_imports -# Pin pre-3.15 width/indent for existing formatting tests. -# compact=True keeps the legacy non-JSON-style container wrapping. -_pformat = functools.partial(pprint.pformat, indent=1, width=80, compact=True) - # list, tuple and dict subclasses that do or don't overwrite __repr__ class list2(list): pass @@ -169,6 +164,7 @@ def test_init(self): self.assertRaises(ValueError, pprint.PrettyPrinter, depth=0) self.assertRaises(ValueError, pprint.PrettyPrinter, depth=-1) self.assertRaises(ValueError, pprint.PrettyPrinter, width=0) + self.assertRaises(ValueError, pprint.PrettyPrinter, compact=True, expand=True) def test_basic(self): # Verify .isrecursive() and .isreadable() w/o recursion @@ -288,10 +284,10 @@ def test_same_as_repr(self): True, False, None, ..., ): native = repr(simple) - self.assertEqual(_pformat(simple), native) - self.assertEqual(_pformat(simple, width=1, indent=0) + self.assertEqual(pprint.pformat(simple), native) + self.assertEqual(pprint.pformat(simple, width=1, indent=0) .replace('\n', ' '), native) - self.assertEqual(_pformat(simple, underscore_numbers=True), native) + self.assertEqual(pprint.pformat(simple, underscore_numbers=True), native) self.assertEqual(pprint.saferepr(simple), native) def test_container_repr_override_called(self): @@ -322,8 +318,8 @@ def test_container_repr_override_called(self): ): native = repr(cont) expected = '*' * len(native) - self.assertEqual(_pformat(cont), expected) - self.assertEqual(_pformat(cont, width=1, indent=0), expected) + self.assertEqual(pprint.pformat(cont), expected) + self.assertEqual(pprint.pformat(cont, width=1, indent=0), expected) self.assertEqual(pprint.saferepr(cont), expected) def test_basic_line_wrap(self): @@ -344,7 +340,7 @@ def test_basic_line_wrap(self): 'read_io_runtime_us': 0, 'write_io_runtime_us': 43690}""" for type in [dict, dict2]: - self.assertEqual(_pformat(type(o)), exp) + self.assertEqual(pprint.pformat(type(o)), exp) exp = """\ frozendict({'RPM_cal': 0, @@ -354,7 +350,7 @@ def test_basic_line_wrap(self): 'main_code_runtime_us': 0, 'read_io_runtime_us': 0, 'write_io_runtime_us': 43690})""" - self.assertEqual(_pformat(frozendict(o)), exp) + self.assertEqual(pprint.pformat(frozendict(o)), exp) exp = """\ frozendict2({'RPM_cal': 0, 'RPM_cal2': 48059, @@ -363,79 +359,79 @@ def test_basic_line_wrap(self): 'main_code_runtime_us': 0, 'read_io_runtime_us': 0, 'write_io_runtime_us': 43690})""" - self.assertEqual(_pformat(frozendict2(o)), exp) + self.assertEqual(pprint.pformat(frozendict2(o)), exp) o = range(100) exp = 'dict_keys([%s])' % ',\n '.join(map(str, o)) keys = dict.fromkeys(o).keys() - self.assertEqual(_pformat(keys, width=1), exp) + self.assertEqual(pprint.pformat(keys), exp) keys = frozendict.fromkeys(o).keys() - self.assertEqual(_pformat(keys, width=1), exp) + self.assertEqual(pprint.pformat(keys), exp) o = range(100) exp = 'dict_values([%s])' % ',\n '.join(map(str, o)) values = {v: v for v in o}.values() - self.assertEqual(_pformat(values, width=1), exp) + self.assertEqual(pprint.pformat(values), exp) values = frozendict({v: v for v in o}).values() - self.assertEqual(_pformat(values, width=1), exp) + self.assertEqual(pprint.pformat(values), exp) o = range(100) exp = 'dict_items([%s])' % ',\n '.join("(%s, %s)" % (i, i) for i in o) items = {v: v for v in o}.items() - self.assertEqual(_pformat(items, width=11), exp) + self.assertEqual(pprint.pformat(items), exp) items = frozendict({v: v for v in o}).items() - self.assertEqual(_pformat(items, width=11), exp) + self.assertEqual(pprint.pformat(items), exp) o = range(100) exp = 'odict_keys([%s])' % ',\n '.join(map(str, o)) keys = collections.OrderedDict.fromkeys(o).keys() - self.assertEqual(_pformat(keys, width=1), exp) + self.assertEqual(pprint.pformat(keys), exp) o = range(100) exp = 'odict_values([%s])' % ',\n '.join(map(str, o)) values = collections.OrderedDict({v: v for v in o}).values() - self.assertEqual(_pformat(values, width=1), exp) + self.assertEqual(pprint.pformat(values), exp) o = range(100) exp = 'odict_items([%s])' % ',\n '.join("(%s, %s)" % (i, i) for i in o) items = collections.OrderedDict({v: v for v in o}).items() - self.assertEqual(_pformat(items, width=11), exp) + self.assertEqual(pprint.pformat(items), exp) o = range(100) exp = 'KeysView({%s})' % (': None,\n '.join(map(str, o)) + ': None') keys_view = KeysView(dict.fromkeys(o)) - self.assertEqual(_pformat(keys_view), exp) + self.assertEqual(pprint.pformat(keys_view), exp) o = range(100) exp = 'ItemsView({%s})' % (': None,\n '.join(map(str, o)) + ': None') items_view = ItemsView(dict.fromkeys(o)) - self.assertEqual(_pformat(items_view), exp) + self.assertEqual(pprint.pformat(items_view), exp) o = range(100) exp = 'MappingView({%s})' % (': None,\n '.join(map(str, o)) + ': None') mapping_view = MappingView(dict.fromkeys(o)) - self.assertEqual(_pformat(mapping_view), exp) + self.assertEqual(pprint.pformat(mapping_view), exp) o = range(100) exp = 'ValuesView({%s})' % (': None,\n '.join(map(str, o)) + ': None') values_view = ValuesView(dict.fromkeys(o)) - self.assertEqual(_pformat(values_view), exp) + self.assertEqual(pprint.pformat(values_view), exp) o = range(100) exp = '[%s]' % ',\n '.join(map(str, o)) for type in [list, list2]: - self.assertEqual(_pformat(type(o), width=1), exp) + self.assertEqual(pprint.pformat(type(o)), exp) o = tuple(range(100)) exp = '(%s)' % ',\n '.join(map(str, o)) for type in [tuple, tuple2]: - self.assertEqual(_pformat(type(o), width=1), exp) + self.assertEqual(pprint.pformat(type(o)), exp) # indent parameter o = range(100) exp = '[ %s]' % ',\n '.join(map(str, o)) for type in [list, list2]: - self.assertEqual(_pformat(type(o), indent=4, width=1), exp) + self.assertEqual(pprint.pformat(type(o), indent=4), exp) def test_nested_indentations(self): o1 = list(range(10)) @@ -444,13 +440,13 @@ def test_nested_indentations(self): expected = """\ [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], {'first': 1, 'second': 2, 'third': 3}]""" - self.assertEqual(pprint.pformat(o, indent=4, width=42, compact=True), expected) + self.assertEqual(pprint.pformat(o, indent=4, width=42), expected) expected = """\ [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], { 'first': 1, 'second': 2, 'third': 3}]""" - self.assertEqual(pprint.pformat(o, indent=4, width=41, compact=True), expected) + self.assertEqual(pprint.pformat(o, indent=4, width=41), expected) def test_width(self): expected = """\ @@ -464,15 +460,17 @@ def test_width(self): [[[[[1, 2, 3], '1 2']]]]]""" o = eval(expected) - self.assertEqual(_pformat(o, width=15), expected) - self.assertEqual(_pformat(o, width=16), expected) - self.assertEqual(_pformat(o, width=25), expected) - self.assertEqual(_pformat(o, width=14), """\ -[[[[[[1, 2, + self.assertEqual(pprint.pformat(o, width=15), expected) + self.assertEqual(pprint.pformat(o, width=16), expected) + self.assertEqual(pprint.pformat(o, width=25), expected) + self.assertEqual(pprint.pformat(o, width=14), """\ +[[[[[[1, + 2, 3], '1 ' '2']]]], - {1: [1, 2, + {1: [1, + 2, 3], 2: [12, 34]}, @@ -482,14 +480,15 @@ def test_width(self): 'ef',), set2({1, 23}), - [[[[[1, 2, + [[[[[1, + 2, 3], '1 ' '2']]]]]""") def test_integer(self): - self.assertEqual(_pformat(1234567), '1234567') - self.assertEqual(_pformat(1234567, underscore_numbers=True), '1_234_567') + self.assertEqual(pprint.pformat(1234567), '1234567') + self.assertEqual(pprint.pformat(1234567, underscore_numbers=True), '1_234_567') class Temperature(int): def __new__(cls, celsius_degrees): @@ -497,7 +496,7 @@ def __new__(cls, celsius_degrees): def __repr__(self): kelvin_degrees = self + 273.15 return f"{kelvin_degrees:.2f}°K" - self.assertEqual(_pformat(Temperature(1000)), '1273.15°K') + self.assertEqual(pprint.pformat(Temperature(1000)), '1273.15°K') def test_sorted_dict(self): # Starting in Python 2.5, pprint sorts dict displays by key regardless @@ -505,8 +504,8 @@ def test_sorted_dict(self): # Before the change, on 32-bit Windows pformat() gave order # 'a', 'c', 'b' here, so this test failed. d = {'a': 1, 'b': 1, 'c': 1} - self.assertEqual(_pformat(d), "{'a': 1, 'b': 1, 'c': 1}") - self.assertEqual(_pformat([d, d]), + self.assertEqual(pprint.pformat(d), "{'a': 1, 'b': 1, 'c': 1}") + self.assertEqual(pprint.pformat([d, d]), "[{'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 1}]") # The next one is kind of goofy. The sorted order depends on the @@ -514,42 +513,63 @@ def test_sorted_dict(self): # Python 2.5, this was in the test_same_as_repr() test. It's worth # keeping around for now because it's one of few tests of pprint # against a crazy mix of types. - self.assertEqual(_pformat({"xy\tab\n": (3,), 5: [[]], (): {}}), + self.assertEqual(pprint.pformat({"xy\tab\n": (3,), 5: [[]], (): {}}), r"{5: [[]], 'xy\tab\n': (3,), (): {}}") def test_sort_dict(self): d = dict.fromkeys('cba') - self.assertEqual(_pformat(d, sort_dicts=False), "{'c': None, 'b': None, 'a': None}") - self.assertEqual(_pformat([d, d], sort_dicts=False), + self.assertEqual(pprint.pformat(d, sort_dicts=False), "{'c': None, 'b': None, 'a': None}") + self.assertEqual(pprint.pformat([d, d], sort_dicts=False), "[{'c': None, 'b': None, 'a': None}, {'c': None, 'b': None, 'a': None}]") def test_ordered_dict(self): d = collections.OrderedDict() - self.assertEqual(_pformat(d, width=1), 'OrderedDict()') + self.assertEqual(pprint.pformat(d, width=1), 'OrderedDict()') d = collections.OrderedDict([]) - self.assertEqual(_pformat(d, width=1), 'OrderedDict()') + self.assertEqual(pprint.pformat(d, width=1), 'OrderedDict()') words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.OrderedDict(zip(words, itertools.count())) - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ -OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), - ('over', 5), ('a', 6), ('lazy', 7), ('dog', 8)])""") - self.assertEqual( - _pformat(d.keys(), sort_dicts=False), - "odict_keys(['the', 'quick', 'brown', 'fox', 'jumped', 'over', 'a', 'lazy', 'dog'])", - ) - self.assertEqual(_pformat(d.items(), sort_dicts=False), +OrderedDict([('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), + ('dog', 8)])""") + self.assertEqual(pprint.pformat(d.keys(), sort_dicts=False), +"""\ +odict_keys(['the', + 'quick', + 'brown', + 'fox', + 'jumped', + 'over', + 'a', + 'lazy', + 'dog'])""") + self.assertEqual(pprint.pformat(d.items(), sort_dicts=False), """\ -odict_items([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), - ('a', 6), ('lazy', 7), ('dog', 8)])""") - self.assertEqual(_pformat(d.values(), sort_dicts=False), +odict_items([('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), + ('dog', 8)])""") + self.assertEqual(pprint.pformat(d.values(), sort_dicts=False), "odict_values([0, 1, 2, 3, 4, 5, 6, 7, 8])") def test_mapping_proxy(self): words = 'the quick brown fox jumped over a lazy dog'.split() d = dict(zip(words, itertools.count())) m = types.MappingProxyType(d) - self.assertEqual(_pformat(m), """\ + self.assertEqual(pprint.pformat(m), """\ mappingproxy({'a': 6, 'brown': 2, 'dog': 8, @@ -561,81 +581,49 @@ def test_mapping_proxy(self): 'the': 0})""") d = collections.OrderedDict(zip(words, itertools.count())) m = types.MappingProxyType(d) - self.assertEqual(_pformat(m), """\ -mappingproxy(OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), - ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), + self.assertEqual(pprint.pformat(m), """\ +mappingproxy(OrderedDict([('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), ('dog', 8)]))""") def test_dict_views(self): for dict_class in (dict, collections.OrderedDict, collections.Counter): empty = dict_class({}) short = dict_class(dict(zip('edcba', 'edcba'))) - lengths = {"empty": empty, "short": short} + long = dict_class(dict((chr(x), chr(x)) for x in range(90, 64, -1))) + lengths = {"empty": empty, "short": short, "long": long} prefix = "odict" if dict_class is collections.OrderedDict else "dict" for name, d in lengths.items(): with self.subTest(length=name, prefix=prefix): + is_short = len(d) < 6 + joiner = ", " if is_short else ",\n " k = d.keys() v = d.values() i = d.items() - self.assertEqual(_pformat(k, sort_dicts=True), + self.assertEqual(pprint.pformat(k, sort_dicts=True), prefix + "_keys([%s])" % - ", ".join(repr(key) for key in sorted(k))) - self.assertEqual(_pformat(v, sort_dicts=True), + joiner.join(repr(key) for key in sorted(k))) + self.assertEqual(pprint.pformat(v, sort_dicts=True), prefix + "_values([%s])" % - ", ".join(repr(val) for val in sorted(v))) - self.assertEqual(_pformat(i, sort_dicts=True), + joiner.join(repr(val) for val in sorted(v))) + self.assertEqual(pprint.pformat(i, sort_dicts=True), prefix + "_items([%s])" % - ", ".join(repr(item) for item in sorted(i))) - self.assertEqual(_pformat(k, sort_dicts=False), + joiner.join(repr(item) for item in sorted(i))) + self.assertEqual(pprint.pformat(k, sort_dicts=False), prefix + "_keys([%s])" % - ", ".join(repr(key) for key in k)) - self.assertEqual(_pformat(v, sort_dicts=False), + joiner.join(repr(key) for key in k)) + self.assertEqual(pprint.pformat(v, sort_dicts=False), prefix + "_values([%s])" % - ", ".join(repr(val) for val in v)) - self.assertEqual(_pformat(i, sort_dicts=False), + joiner.join(repr(val) for val in v)) + self.assertEqual(pprint.pformat(i, sort_dicts=False), prefix + "_items([%s])" % - ", ".join(repr(item) for item in i)) - - # Long case: views wrap with compact-mode packing. - long = dict((chr(x), chr(x)) for x in range(90, 64, -1)) - sorted_keys = ( - "['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',\n" - " 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']" - ) - unsorted_keys = ( - "['Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K',\n" - " 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A']" - ) - sorted_items = ( - "[('A', 'A'), ('B', 'B'), ('C', 'C'), ('D', 'D'), ('E', 'E'), ('F', 'F'),\n" - " ('G', 'G'), ('H', 'H'), ('I', 'I'), ('J', 'J'), ('K', 'K'), ('L', 'L'),\n" - " ('M', 'M'), ('N', 'N'), ('O', 'O'), ('P', 'P'), ('Q', 'Q'), ('R', 'R'),\n" - " ('S', 'S'), ('T', 'T'), ('U', 'U'), ('V', 'V'), ('W', 'W'), ('X', 'X'),\n" - " ('Y', 'Y'), ('Z', 'Z')]" - ) - unsorted_items = ( - "[('Z', 'Z'), ('Y', 'Y'), ('X', 'X'), ('W', 'W'), ('V', 'V'), ('U', 'U'),\n" - " ('T', 'T'), ('S', 'S'), ('R', 'R'), ('Q', 'Q'), ('P', 'P'), ('O', 'O'),\n" - " ('N', 'N'), ('M', 'M'), ('L', 'L'), ('K', 'K'), ('J', 'J'), ('I', 'I'),\n" - " ('H', 'H'), ('G', 'G'), ('F', 'F'), ('E', 'E'), ('D', 'D'), ('C', 'C'),\n" - " ('B', 'B'), ('A', 'A')]" - ) - for dict_class in (dict, collections.OrderedDict, collections.Counter): - d = dict_class(long) - prefix = "odict" if dict_class is collections.OrderedDict else "dict" - with self.subTest(length="long", prefix=prefix): - self.assertEqual(_pformat(d.keys(), sort_dicts=True), - f"{prefix}_keys({sorted_keys})") - self.assertEqual(_pformat(d.values(), sort_dicts=True), - f"{prefix}_values({sorted_keys})") - self.assertEqual(_pformat(d.items(), sort_dicts=True), - f"{prefix}_items({sorted_items})") - self.assertEqual(_pformat(d.keys(), sort_dicts=False), - f"{prefix}_keys({unsorted_keys})") - self.assertEqual(_pformat(d.values(), sort_dicts=False), - f"{prefix}_values({unsorted_keys})") - self.assertEqual(_pformat(d.items(), sort_dicts=False), - f"{prefix}_items({unsorted_items})") + joiner.join(repr(item) for item in i)) def test_abc_views(self): empty = {} @@ -653,55 +641,55 @@ class MV(MappingView): pass s = sorted(i) joined_items = "({%s})" % joiner.join(["%r: %r" % (k, v) for (k, v) in i]) sorted_items = "({%s})" % joiner.join(["%r: %r" % (k, v) for (k, v) in s]) - self.assertEqual(_pformat(KeysView(d), sort_dicts=True), + self.assertEqual(pprint.pformat(KeysView(d), sort_dicts=True), KeysView.__name__ + sorted_items) - self.assertEqual(_pformat(ItemsView(d), sort_dicts=True), + self.assertEqual(pprint.pformat(ItemsView(d), sort_dicts=True), ItemsView.__name__ + sorted_items) - self.assertEqual(_pformat(MappingView(d), sort_dicts=True), + self.assertEqual(pprint.pformat(MappingView(d), sort_dicts=True), MappingView.__name__ + sorted_items) - self.assertEqual(_pformat(MV(d), sort_dicts=True), + self.assertEqual(pprint.pformat(MV(d), sort_dicts=True), MV.__name__ + sorted_items) - self.assertEqual(_pformat(ValuesView(d), sort_dicts=True), + self.assertEqual(pprint.pformat(ValuesView(d), sort_dicts=True), ValuesView.__name__ + sorted_items) - self.assertEqual(_pformat(KeysView(d), sort_dicts=False), + self.assertEqual(pprint.pformat(KeysView(d), sort_dicts=False), KeysView.__name__ + joined_items) - self.assertEqual(_pformat(ItemsView(d), sort_dicts=False), + self.assertEqual(pprint.pformat(ItemsView(d), sort_dicts=False), ItemsView.__name__ + joined_items) - self.assertEqual(_pformat(MappingView(d), sort_dicts=False), + self.assertEqual(pprint.pformat(MappingView(d), sort_dicts=False), MappingView.__name__ + joined_items) - self.assertEqual(_pformat(MV(d), sort_dicts=False), + self.assertEqual(pprint.pformat(MV(d), sort_dicts=False), MV.__name__ + joined_items) - self.assertEqual(_pformat(ValuesView(d), sort_dicts=False), + self.assertEqual(pprint.pformat(ValuesView(d), sort_dicts=False), ValuesView.__name__ + joined_items) def test_nested_views(self): d = {1: MappingView({1: MappingView({1: MappingView({1: 2})})})} self.assertEqual(repr(d), "{1: MappingView({1: MappingView({1: MappingView({1: 2})})})}") - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), "{1: MappingView({1: MappingView({1: MappingView({1: 2})})})}") - self.assertEqual(_pformat(d, depth=2), + self.assertEqual(pprint.pformat(d, depth=2), "{1: MappingView({1: {...}})}") d = {} d1 = {1: d.values()} d2 = {1: d1.values()} d3 = {1: d2.values()} - self.assertEqual(_pformat(d3), + self.assertEqual(pprint.pformat(d3), "{1: dict_values([dict_values([dict_values([])])])}") - self.assertEqual(_pformat(d3, depth=2), + self.assertEqual(pprint.pformat(d3, depth=2), "{1: dict_values([{...}])}") def test_unorderable_items_views(self): """Check that views with unorderable items have stable sorting.""" d = dict((((3+1j), 3), ((1+1j), (1+0j)), (1j, 0j), (500, None), (499, None))) iv = ItemsView(d) - self.assertEqual(_pformat(iv), - _pformat(iv)) - self.assertTrue(_pformat(iv).endswith(", 499: None, 500: None})"), - _pformat(iv)) - self.assertEqual(_pformat(d.items()), # Won't be equal unless _safe_tuple - _pformat(d.items())) # is used in _safe_repr - self.assertTrue(_pformat(d.items()).endswith(", (499, None), (500, None)])")) + self.assertEqual(pprint.pformat(iv), + pprint.pformat(iv)) + self.assertTrue(pprint.pformat(iv).endswith(", 499: None, 500: None})"), + pprint.pformat(iv)) + self.assertEqual(pprint.pformat(d.items()), # Won't be equal unless _safe_tuple + pprint.pformat(d.items())) # is used in _safe_repr + self.assertTrue(pprint.pformat(d.items()).endswith(", (499, None), (500, None)])")) def test_mapping_view_subclass_no_mapping(self): class BMV(MappingView): @@ -710,7 +698,7 @@ def __init__(self, d): self.mapping = self._mapping del self._mapping - self.assertRaises(AttributeError, _pformat, BMV({})) + self.assertRaises(AttributeError, pprint.pformat, BMV({})) def test_mapping_subclass_repr(self): """Test that mapping ABC views use their ._mapping's __repr__.""" @@ -734,10 +722,10 @@ def __repr__(self): self.assertEqual(repr(m), "MyMapping(['test', 1])") short_view_repr = "%s(MyMapping(['test', 1]))" self.assertEqual(repr(m.keys()), short_view_repr % "KeysView") - self.assertEqual(_pformat(m.items()), short_view_repr % "ItemsView") - self.assertEqual(_pformat(m.keys()), short_view_repr % "KeysView") - self.assertEqual(_pformat(MappingView(m)), short_view_repr % "MappingView") - self.assertEqual(_pformat(m.values()), short_view_repr % "ValuesView") + self.assertEqual(pprint.pformat(m.items()), short_view_repr % "ItemsView") + self.assertEqual(pprint.pformat(m.keys()), short_view_repr % "KeysView") + self.assertEqual(pprint.pformat(MappingView(m)), short_view_repr % "MappingView") + self.assertEqual(pprint.pformat(m.values()), short_view_repr % "ValuesView") alpha = "abcdefghijklmnopqrstuvwxyz" m = MyMapping(alpha) @@ -745,19 +733,19 @@ def __repr__(self): long_view_repr = "%%s(MyMapping([%s]))" % alpha_repr self.assertEqual(repr(m), "MyMapping([%s])" % alpha_repr) self.assertEqual(repr(m.keys()), long_view_repr % "KeysView") - self.assertEqual(_pformat(m.items()), long_view_repr % "ItemsView") - self.assertEqual(_pformat(m.keys()), long_view_repr % "KeysView") - self.assertEqual(_pformat(MappingView(m)), long_view_repr % "MappingView") - self.assertEqual(_pformat(m.values()), long_view_repr % "ValuesView") + self.assertEqual(pprint.pformat(m.items()), long_view_repr % "ItemsView") + self.assertEqual(pprint.pformat(m.keys()), long_view_repr % "KeysView") + self.assertEqual(pprint.pformat(MappingView(m)), long_view_repr % "MappingView") + self.assertEqual(pprint.pformat(m.values()), long_view_repr % "ValuesView") def test_empty_simple_namespace(self): ns = types.SimpleNamespace() - formatted = _pformat(ns) + formatted = pprint.pformat(ns) self.assertEqual(formatted, "namespace()") def test_small_simple_namespace(self): ns = types.SimpleNamespace(a=1, b=2) - formatted = _pformat(ns) + formatted = pprint.pformat(ns) self.assertEqual(formatted, "namespace(a=1, b=2)") def test_simple_namespace(self): @@ -772,7 +760,7 @@ def test_simple_namespace(self): lazy=7, dog=8, ) - formatted = pprint.pformat(ns, width=60, indent=4, compact=True) + formatted = pprint.pformat(ns, width=60, indent=4) self.assertEqual(formatted, """\ namespace(the=0, quick=1, @@ -797,7 +785,7 @@ class AdvancedNamespace(types.SimpleNamespace): pass lazy=7, dog=8, ) - formatted = _pformat(ns, width=60) + formatted = pprint.pformat(ns, width=60) self.assertEqual(formatted, """\ AdvancedNamespace(the=0, quick=1, @@ -811,17 +799,17 @@ class AdvancedNamespace(types.SimpleNamespace): pass def test_empty_dataclass(self): dc = dataclasses.make_dataclass("MyDataclass", ())() - formatted = _pformat(dc) + formatted = pprint.pformat(dc) self.assertEqual(formatted, "MyDataclass()") def test_small_dataclass(self): dc = dataclass1("text", 123) - formatted = _pformat(dc) + formatted = pprint.pformat(dc) self.assertEqual(formatted, "dataclass1(field1='text', field2=123, field3=False)") def test_larger_dataclass(self): dc = dataclass1("some fairly long text", int(1e10), True) - formatted = pprint.pformat([dc, dc], width=60, indent=4, compact=True) + formatted = pprint.pformat([dc, dc], width=60, indent=4) self.assertEqual(formatted, """\ [ dataclass1(field1='some fairly long text', field2=10000000000, @@ -832,12 +820,12 @@ def test_larger_dataclass(self): def test_dataclass_with_repr(self): dc = dataclass2() - formatted = _pformat(dc, width=20) + formatted = pprint.pformat(dc, width=20) self.assertEqual(formatted, "custom repr that doesn't fit within pprint width") def test_dataclass_no_repr(self): dc = dataclass3() - formatted = _pformat(dc, width=10) + formatted = pprint.pformat(dc, width=10) self.assertRegex( formatted, fr"<{re.escape(__name__)}.dataclass3 object at \w+>", @@ -846,7 +834,7 @@ def test_dataclass_no_repr(self): def test_recursive_dataclass(self): dc = dataclass4(None) dc.a = dc - formatted = _pformat(dc, width=10) + formatted = pprint.pformat(dc, width=10) self.assertEqual(formatted, """\ dataclass4(a=..., b=1)""") @@ -856,7 +844,7 @@ def test_cyclic_dataclass(self): dc6 = dataclass6(None) dc5.a = dc6 dc6.c = dc5 - formatted = _pformat(dc5, width=10) + formatted = pprint.pformat(dc5, width=10) self.assertEqual(formatted, """\ dataclass5(a=dataclass6(c=..., d=1), @@ -870,7 +858,7 @@ def test_subclassing(self): {'names with spaces': 'should be presented using repr()', others.should.not.be: like.this}""" - dotted_printer = DottedPrettyPrinter(indent=1, compact=True) + dotted_printer = DottedPrettyPrinter() self.assertEqual(dotted_printer.pformat(o), exp) # length(repr(obj)) < width @@ -882,29 +870,47 @@ def test_subclassing(self): self.assertEqual(dotted_printer.pformat(o2), exp2) def test_set_reprs(self): - self.assertEqual(_pformat(set()), 'set()') - self.assertEqual(_pformat(set(range(3))), '{0, 1, 2}') - self.assertEqual(_pformat(set(range(7)), width=20), '''\ -{0, 1, 2, 3, 4, 5, + self.assertEqual(pprint.pformat(set()), 'set()') + self.assertEqual(pprint.pformat(set(range(3))), '{0, 1, 2}') + self.assertEqual(pprint.pformat(set(range(7)), width=20), '''\ +{0, + 1, + 2, + 3, + 4, + 5, 6}''') - self.assertEqual(_pformat(set2(range(7)), width=20), '''\ -set2({0, 1, 2, 3, 4, - 5, 6})''') - self.assertEqual(_pformat(set3(range(7)), width=20), + self.assertEqual(pprint.pformat(set2(range(7)), width=20), '''\ +set2({0, + 1, + 2, + 3, + 4, + 5, + 6})''') + self.assertEqual(pprint.pformat(set3(range(7)), width=20), 'set3({0, 1, 2, 3, 4, 5, 6})') - self.assertEqual(_pformat(frozenset()), 'frozenset()') - self.assertEqual(_pformat(frozenset(range(3))), + self.assertEqual(pprint.pformat(frozenset()), 'frozenset()') + self.assertEqual(pprint.pformat(frozenset(range(3))), 'frozenset({0, 1, 2})') - self.assertEqual(_pformat(frozenset(range(7)), width=20), '''\ -frozenset({0, 1, 2, - 3, 4, 5, + self.assertEqual(pprint.pformat(frozenset(range(7)), width=20), '''\ +frozenset({0, + 1, + 2, + 3, + 4, + 5, 6})''') - self.assertEqual(_pformat(frozenset2(range(7)), width=20), '''\ -frozenset2({0, 1, 2, - 3, 4, 5, + self.assertEqual(pprint.pformat(frozenset2(range(7)), width=20), '''\ +frozenset2({0, + 1, + 2, + 3, + 4, + 5, 6})''') - self.assertEqual(_pformat(frozenset3(range(7)), width=20), + self.assertEqual(pprint.pformat(frozenset3(range(7)), width=20), 'frozenset3({0, 1, 2, 3, 4, 5, 6})') def test_set_of_sets_reprs(self): @@ -936,21 +942,21 @@ def test_set_of_sets_reprs(self): fs0 = frozenset() fs1 = frozenset(('abc', 'xyz')) data = frozenset((fs0, fs1)) - self.assertEqual(_pformat(data), + self.assertEqual(pprint.pformat(data), 'frozenset({%r, %r})' % (fs0, fs1)) - self.assertEqual(_pformat(data), repr(data)) + self.assertEqual(pprint.pformat(data), repr(data)) fs2 = frozenset(('one', 'two')) data = {fs2: frozenset((fs0, fs1))} - self.assertEqual(_pformat(data), + self.assertEqual(pprint.pformat(data), "{%r: frozenset({%r, %r})}" % (fs2, fs0, fs1)) - self.assertEqual(_pformat(data), repr(data)) + self.assertEqual(pprint.pformat(data), repr(data)) # Single-line, unordered: fs1 = frozenset(("xyz", "qwerty")) fs2 = frozenset(("abcd", "spam")) fs = frozenset((fs1, fs2)) - self.assertEqual(_pformat(fs), repr(fs)) + self.assertEqual(pprint.pformat(fs), repr(fs)) # Multiline, unordered: def check(res, invariants): @@ -960,7 +966,7 @@ def check(res, invariants): fs1 = frozenset(('regular string', 'other string')) fs2 = frozenset(('third string', 'one more string')) check( - _pformat(frozenset((fs1, fs2))), + pprint.pformat(frozenset((fs1, fs2))), [ """ frozenset({%r, @@ -975,7 +981,7 @@ def check(res, invariants): # Everything is multiline, unordered: check( - _pformat( + pprint.pformat( frozenset(( frozenset(( "xyz very-very long string", @@ -1022,16 +1028,16 @@ def test_depth(self): nested_tuple = (1, (2, (3, (4, (5, 6))))) nested_dict = {1: {2: {3: {4: {5: {6: 6}}}}}} nested_list = [1, [2, [3, [4, [5, [6, []]]]]]] - self.assertEqual(_pformat(nested_tuple), repr(nested_tuple)) - self.assertEqual(_pformat(nested_dict), repr(nested_dict)) - self.assertEqual(_pformat(nested_list), repr(nested_list)) + self.assertEqual(pprint.pformat(nested_tuple), repr(nested_tuple)) + self.assertEqual(pprint.pformat(nested_dict), repr(nested_dict)) + self.assertEqual(pprint.pformat(nested_list), repr(nested_list)) lv1_tuple = '(1, (...))' lv1_dict = '{1: {...}}' lv1_list = '[1, [...]]' - self.assertEqual(_pformat(nested_tuple, depth=1), lv1_tuple) - self.assertEqual(_pformat(nested_dict, depth=1), lv1_dict) - self.assertEqual(_pformat(nested_list, depth=1), lv1_list) + self.assertEqual(pprint.pformat(nested_tuple, depth=1), lv1_tuple) + self.assertEqual(pprint.pformat(nested_dict, depth=1), lv1_dict) + self.assertEqual(pprint.pformat(nested_list, depth=1), lv1_list) def test_sort_unorderable_values(self): # Issue 3976: sorted pprints fail for unorderable values. @@ -1041,24 +1047,24 @@ def test_sort_unorderable_values(self): skeys = sorted(keys, key=id) clean = lambda s: s.replace(' ', '').replace('\n','') - self.assertEqual(clean(_pformat(set(keys))), + self.assertEqual(clean(pprint.pformat(set(keys))), '{' + ','.join(map(repr, skeys)) + '}') - self.assertEqual(clean(_pformat(frozenset(keys))), + self.assertEqual(clean(pprint.pformat(frozenset(keys))), 'frozenset({' + ','.join(map(repr, skeys)) + '})') - self.assertEqual(clean(_pformat(dict.fromkeys(keys))), + self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys))), '{' + ','.join('%r:None' % k for k in skeys) + '}') - self.assertEqual(clean(_pformat(dict.fromkeys(keys).keys())), + self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys).keys())), 'dict_keys([' + ','.join('%r' % k for k in skeys) + '])') - self.assertEqual(clean(_pformat(dict.fromkeys(keys).items())), + self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys).items())), 'dict_items([' + ','.join('(%r,None)' % k for k in skeys) + '])') # Issue 10017: TypeError on user-defined types as dict keys. - self.assertEqual(_pformat({Unorderable: 0, 1: 0}), + self.assertEqual(pprint.pformat({Unorderable: 0, 1: 0}), '{1: 0, ' + repr(Unorderable) +': 0}') # Issue 14998: TypeError on tuples with NoneTypes as dict keys. keys = [(1,), (None,)] - self.assertEqual(_pformat(dict.fromkeys(keys, 0)), + self.assertEqual(pprint.pformat(dict.fromkeys(keys, 0)), '{%r: 0, %r: 0}' % tuple(sorted(keys, key=id))) def test_sort_orderable_and_unorderable_values(self): @@ -1071,24 +1077,24 @@ def test_sort_orderable_and_unorderable_values(self): self.assertEqual(sorted([b, a]), [a, b]) self.assertEqual(sorted([a, b]), [a, b]) # set - self.assertEqual(_pformat(set([b, a]), width=1), + self.assertEqual(pprint.pformat(set([b, a]), width=1), '{%r,\n %r}' % (a, b)) - self.assertEqual(_pformat(set([a, b]), width=1), + self.assertEqual(pprint.pformat(set([a, b]), width=1), '{%r,\n %r}' % (a, b)) # dict - self.assertEqual(_pformat(dict.fromkeys([b, a]), width=1), + self.assertEqual(pprint.pformat(dict.fromkeys([b, a]), width=1), '{%r: None,\n %r: None}' % (a, b)) - self.assertEqual(_pformat(dict.fromkeys([a, b]), width=1), + self.assertEqual(pprint.pformat(dict.fromkeys([a, b]), width=1), '{%r: None,\n %r: None}' % (a, b)) def test_str_wrap(self): # pprint tries to wrap strings intelligently fox = 'the quick brown fox jumped over a lazy dog' - self.assertEqual(_pformat(fox, width=19), """\ + self.assertEqual(pprint.pformat(fox, width=19), """\ ('the quick brown ' 'fox jumped over ' 'a lazy dog')""") - self.assertEqual(_pformat({'a': 1, 'b': fox, 'c': 2}, + self.assertEqual(pprint.pformat({'a': 1, 'b': fox, 'c': 2}, width=25), """\ {'a': 1, 'b': 'the quick brown ' @@ -1101,28 +1107,28 @@ def test_str_wrap(self): # - non-ASCII is allowed # - an apostrophe doesn't disrupt the pprint special = "Portons dix bons \"whiskys\"\nà l'avocat goujat\t qui fumait au zoo" - self.assertEqual(_pformat(special, width=68), repr(special)) - self.assertEqual(_pformat(special, width=31), """\ + self.assertEqual(pprint.pformat(special, width=68), repr(special)) + self.assertEqual(pprint.pformat(special, width=31), """\ ('Portons dix bons "whiskys"\\n' "à l'avocat goujat\\t qui " 'fumait au zoo')""") - self.assertEqual(_pformat(special, width=20), """\ + self.assertEqual(pprint.pformat(special, width=20), """\ ('Portons dix bons ' '"whiskys"\\n' "à l'avocat " 'goujat\\t qui ' 'fumait au zoo')""") - self.assertEqual(_pformat([[[[[special]]]]], width=35), """\ + self.assertEqual(pprint.pformat([[[[[special]]]]], width=35), """\ [[[[['Portons dix bons "whiskys"\\n' "à l'avocat goujat\\t qui " 'fumait au zoo']]]]]""") - self.assertEqual(_pformat([[[[[special]]]]], width=25), """\ + self.assertEqual(pprint.pformat([[[[[special]]]]], width=25), """\ [[[[['Portons dix bons ' '"whiskys"\\n' "à l'avocat " 'goujat\\t qui ' 'fumait au zoo']]]]]""") - self.assertEqual(_pformat([[[[[special]]]]], width=23), """\ + self.assertEqual(pprint.pformat([[[[[special]]]]], width=23), """\ [[[[['Portons dix ' 'bons "whiskys"\\n' "à l'avocat " @@ -1131,14 +1137,14 @@ def test_str_wrap(self): 'zoo']]]]]""") # An unwrappable string is formatted as its repr unwrappable = "x" * 100 - self.assertEqual(_pformat(unwrappable, width=80), repr(unwrappable)) - self.assertEqual(_pformat(''), "''") + self.assertEqual(pprint.pformat(unwrappable, width=80), repr(unwrappable)) + self.assertEqual(pprint.pformat(''), "''") # Check that the pprint is a usable repr special *= 10 for width in range(3, 40): - formatted = _pformat(special, width=width) + formatted = pprint.pformat(special, width=width) self.assertEqual(eval(formatted), special) - formatted = _pformat([special] * 2, width=width) + formatted = pprint.pformat([special] * 2, width=width) self.assertEqual(eval(formatted), [special] * 2) def test_compact(self): @@ -1151,7 +1157,7 @@ def test_compact(self): 14, 15], [], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]""" - self.assertEqual(_pformat(o, width=47, compact=True), expected) + self.assertEqual(pprint.pformat(o, width=47, compact=True), expected) def test_compact_width(self): levels = 20 @@ -1160,117 +1166,117 @@ def test_compact_width(self): for i in range(levels - 1): o = [o] for w in range(levels * 2 + 1, levels + 3 * number - 1): - lines = _pformat(o, width=w, compact=True).splitlines() + lines = pprint.pformat(o, width=w, compact=True).splitlines() maxwidth = max(map(len, lines)) self.assertLessEqual(maxwidth, w) self.assertGreater(maxwidth, w - 3) def test_bytes_wrap(self): - self.assertEqual(_pformat(b'', width=1), "b''") - self.assertEqual(_pformat(b'abcd', width=1), "b'abcd'") + self.assertEqual(pprint.pformat(b'', width=1), "b''") + self.assertEqual(pprint.pformat(b'abcd', width=1), "b'abcd'") letters = b'abcdefghijklmnopqrstuvwxyz' - self.assertEqual(_pformat(letters, width=29), repr(letters)) - self.assertEqual(_pformat(letters, width=19), """\ + self.assertEqual(pprint.pformat(letters, width=29), repr(letters)) + self.assertEqual(pprint.pformat(letters, width=19), """\ (b'abcdefghijkl' b'mnopqrstuvwxyz')""") - self.assertEqual(_pformat(letters, width=18), """\ + self.assertEqual(pprint.pformat(letters, width=18), """\ (b'abcdefghijkl' b'mnopqrstuvwx' b'yz')""") - self.assertEqual(_pformat(letters, width=16), """\ + self.assertEqual(pprint.pformat(letters, width=16), """\ (b'abcdefghijkl' b'mnopqrstuvwx' b'yz')""") special = bytes(range(16)) - self.assertEqual(_pformat(special, width=61), repr(special)) - self.assertEqual(_pformat(special, width=48), """\ + self.assertEqual(pprint.pformat(special, width=61), repr(special)) + self.assertEqual(pprint.pformat(special, width=48), """\ (b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") - self.assertEqual(_pformat(special, width=32), """\ + self.assertEqual(pprint.pformat(special, width=32), """\ (b'\\x00\\x01\\x02\\x03' b'\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") - self.assertEqual(_pformat(special, width=1), """\ + self.assertEqual(pprint.pformat(special, width=1), """\ (b'\\x00\\x01\\x02\\x03' b'\\x04\\x05\\x06\\x07' b'\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") - self.assertEqual(_pformat({'a': 1, 'b': letters, 'c': 2}, + self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2}, width=21), """\ {'a': 1, 'b': b'abcdefghijkl' b'mnopqrstuvwx' b'yz', 'c': 2}""") - self.assertEqual(_pformat({'a': 1, 'b': letters, 'c': 2}, + self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2}, width=20), """\ {'a': 1, 'b': b'abcdefgh' b'ijklmnop' b'qrstuvwxyz', 'c': 2}""") - self.assertEqual(_pformat([[[[[[letters]]]]]], width=25), """\ + self.assertEqual(pprint.pformat([[[[[[letters]]]]]], width=25), """\ [[[[[[b'abcdefghijklmnop' b'qrstuvwxyz']]]]]]""") - self.assertEqual(_pformat([[[[[[special]]]]]], width=41), """\ + self.assertEqual(pprint.pformat([[[[[[special]]]]]], width=41), """\ [[[[[[b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07' b'\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f']]]]]]""") # Check that the pprint is a usable repr for width in range(1, 64): - formatted = _pformat(special, width=width) + formatted = pprint.pformat(special, width=width) self.assertEqual(eval(formatted), special) - formatted = _pformat([special] * 2, width=width) + formatted = pprint.pformat([special] * 2, width=width) self.assertEqual(eval(formatted), [special] * 2) def test_bytearray_wrap(self): - self.assertEqual(_pformat(bytearray(), width=1), "bytearray(b'')") + self.assertEqual(pprint.pformat(bytearray(), width=1), "bytearray(b'')") letters = bytearray(b'abcdefghijklmnopqrstuvwxyz') - self.assertEqual(_pformat(letters, width=40), repr(letters)) - self.assertEqual(_pformat(letters, width=28), """\ + self.assertEqual(pprint.pformat(letters, width=40), repr(letters)) + self.assertEqual(pprint.pformat(letters, width=28), """\ bytearray(b'abcdefghijkl' b'mnopqrstuvwxyz')""") - self.assertEqual(_pformat(letters, width=27), """\ + self.assertEqual(pprint.pformat(letters, width=27), """\ bytearray(b'abcdefghijkl' b'mnopqrstuvwx' b'yz')""") - self.assertEqual(_pformat(letters, width=25), """\ + self.assertEqual(pprint.pformat(letters, width=25), """\ bytearray(b'abcdefghijkl' b'mnopqrstuvwx' b'yz')""") special = bytearray(range(16)) - self.assertEqual(_pformat(special, width=72), repr(special)) - self.assertEqual(_pformat(special, width=57), """\ + self.assertEqual(pprint.pformat(special, width=72), repr(special)) + self.assertEqual(pprint.pformat(special, width=57), """\ bytearray(b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") - self.assertEqual(_pformat(special, width=41), """\ + self.assertEqual(pprint.pformat(special, width=41), """\ bytearray(b'\\x00\\x01\\x02\\x03' b'\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") - self.assertEqual(_pformat(special, width=1), """\ + self.assertEqual(pprint.pformat(special, width=1), """\ bytearray(b'\\x00\\x01\\x02\\x03' b'\\x04\\x05\\x06\\x07' b'\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") - self.assertEqual(_pformat({'a': 1, 'b': letters, 'c': 2}, + self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2}, width=31), """\ {'a': 1, 'b': bytearray(b'abcdefghijkl' b'mnopqrstuvwx' b'yz'), 'c': 2}""") - self.assertEqual(_pformat([[[[[letters]]]]], width=37), """\ + self.assertEqual(pprint.pformat([[[[[letters]]]]], width=37), """\ [[[[[bytearray(b'abcdefghijklmnop' b'qrstuvwxyz')]]]]]""") - self.assertEqual(_pformat([[[[[special]]]]], width=50), """\ + self.assertEqual(pprint.pformat([[[[[special]]]]], width=50), """\ [[[[[bytearray(b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07' b'\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f')]]]]]""") def test_default_dict(self): d = collections.defaultdict(int) - self.assertEqual(_pformat(d, width=1), "defaultdict(, {})") + self.assertEqual(pprint.pformat(d, width=1), "defaultdict(, {})") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.defaultdict(int, zip(words, itertools.count())) - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ defaultdict(, {'a': 6, @@ -1285,15 +1291,15 @@ def test_default_dict(self): def test_counter(self): d = collections.Counter() - self.assertEqual(_pformat(d, width=1), "Counter()") + self.assertEqual(pprint.pformat(d, width=1), "Counter()") d = collections.Counter('senselessness') - self.assertEqual(_pformat(d, width=40), + self.assertEqual(pprint.pformat(d, width=40), """\ Counter({'s': 6, 'e': 4, 'n': 2, 'l': 1})""") - self.assertEqual(_pformat(d, indent=2, width=1), + self.assertEqual(pprint.pformat(d, indent=2, width=1), """\ Counter({ 's': 6, 'e': 4, @@ -1302,11 +1308,11 @@ def test_counter(self): def test_chainmap(self): d = collections.ChainMap() - self.assertEqual(_pformat(d, width=1), "ChainMap({})") + self.assertEqual(pprint.pformat(d, width=1), "ChainMap({})") words = 'the quick brown fox jumped over a lazy dog'.split() items = list(zip(words, itertools.count())) d = collections.ChainMap(dict(items)) - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ ChainMap({'a': 6, 'brown': 2, @@ -1318,7 +1324,7 @@ def test_chainmap(self): 'quick': 1, 'the': 0})""") d = collections.ChainMap(dict(items), collections.OrderedDict(items)) - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ ChainMap({'a': 6, 'brown': 2, @@ -1329,10 +1335,16 @@ def test_chainmap(self): 'over': 5, 'quick': 1, 'the': 0}, - OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), - ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), + OrderedDict([('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), ('dog', 8)]))""") - self.assertEqual(_pformat(d.keys()), + self.assertEqual(pprint.pformat(d.keys()), """\ KeysView(ChainMap({'a': 6, 'brown': 2, @@ -1343,10 +1355,16 @@ def test_chainmap(self): 'over': 5, 'quick': 1, 'the': 0}, - OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), - ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), + OrderedDict([('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), ('dog', 8)])))""") - self.assertEqual(_pformat(d.items()), + self.assertEqual(pprint.pformat(d.items()), """\ ItemsView(ChainMap({'a': 6, 'brown': 2, @@ -1357,10 +1375,16 @@ def test_chainmap(self): 'over': 5, 'quick': 1, 'the': 0}, - OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), - ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), + OrderedDict([('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), ('dog', 8)])))""") - self.assertEqual(_pformat(d.values()), + self.assertEqual(pprint.pformat(d.values()), """\ ValuesView(ChainMap({'a': 6, 'brown': 2, @@ -1371,34 +1395,52 @@ def test_chainmap(self): 'over': 5, 'quick': 1, 'the': 0}, - OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), - ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), + OrderedDict([('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), ('dog', 8)])))""") def test_deque(self): d = collections.deque() - self.assertEqual(_pformat(d, width=1), "deque([])") + self.assertEqual(pprint.pformat(d, width=1), "deque([])") d = collections.deque(maxlen=7) - self.assertEqual(_pformat(d, width=1), "deque([], maxlen=7)") + self.assertEqual(pprint.pformat(d, width=1), "deque([], maxlen=7)") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.deque(zip(words, itertools.count())) - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ -deque([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), - ('over', 5), ('a', 6), ('lazy', 7), ('dog', 8)])""") +deque([('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), + ('dog', 8)])""") d = collections.deque(zip(words, itertools.count()), maxlen=7) - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ -deque([('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), ('a', 6), - ('lazy', 7), ('dog', 8)], +deque([('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), + ('dog', 8)], maxlen=7)""") def test_user_dict(self): d = collections.UserDict() - self.assertEqual(_pformat(d, width=1), "{}") + self.assertEqual(pprint.pformat(d, width=1), "{}") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.UserDict(zip(words, itertools.count())) - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ {'a': 6, 'brown': 2, @@ -1409,7 +1451,7 @@ def test_user_dict(self): 'over': 5, 'quick': 1, 'the': 0}""") - self.assertEqual(_pformat(d.keys()), """\ + self.assertEqual(pprint.pformat(d.keys()), """\ KeysView({'a': 6, 'brown': 2, 'dog': 8, @@ -1419,7 +1461,7 @@ def test_user_dict(self): 'over': 5, 'quick': 1, 'the': 0})""") - self.assertEqual(_pformat(d.items()), """\ + self.assertEqual(pprint.pformat(d.items()), """\ ItemsView({'a': 6, 'brown': 2, 'dog': 8, @@ -1429,7 +1471,7 @@ def test_user_dict(self): 'over': 5, 'quick': 1, 'the': 0})""") - self.assertEqual(_pformat(d.values()), """\ + self.assertEqual(pprint.pformat(d.values()), """\ ValuesView({'a': 6, 'brown': 2, 'dog': 8, @@ -1442,24 +1484,31 @@ def test_user_dict(self): def test_user_list(self): d = collections.UserList() - self.assertEqual(_pformat(d, width=1), "[]") + self.assertEqual(pprint.pformat(d, width=1), "[]") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.UserList(zip(words, itertools.count())) - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ -[('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), - ('a', 6), ('lazy', 7), ('dog', 8)]""") +[('the', 0), + ('quick', 1), + ('brown', 2), + ('fox', 3), + ('jumped', 4), + ('over', 5), + ('a', 6), + ('lazy', 7), + ('dog', 8)]""") def test_user_string(self): d = collections.UserString('') - self.assertEqual(_pformat(d, width=1), "''") + self.assertEqual(pprint.pformat(d, width=1), "''") d = collections.UserString('the quick brown fox jumped over a lazy dog') - self.assertEqual(_pformat(d, width=20), + self.assertEqual(pprint.pformat(d, width=20), """\ ('the quick brown ' 'fox jumped over ' 'a lazy dog')""") - self.assertEqual(_pformat({1: d}, width=20), + self.assertEqual(pprint.pformat({1: d}, width=20), """\ {1: 'the quick ' 'brown fox ' @@ -1468,22 +1517,22 @@ def test_user_string(self): def test_template(self): d = t"" - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), "Template(strings=('',), interpolations=())") - self.assertEqual(_pformat(d), repr(d)) - self.assertEqual(_pformat(d, width=1), + self.assertEqual(pprint.pformat(d), repr(d)) + self.assertEqual(pprint.pformat(d, width=1), """\ Template(strings=('',), interpolations=())""") name = "World" d = t"Hello {name}" - self.assertEqual(_pformat(d), + self.assertEqual(pprint.pformat(d), """\ Template(strings=('Hello ', ''), interpolations=(Interpolation('World', 'name', None, ''),))""") ver = {3.13: False, 3.14: True} d = t"Hello { {"name": "Python", "version": ver}!s:z}!" - self.assertEqual(_pformat(d, width=1), + self.assertEqual(pprint.pformat(d, width=1), """\ Template(strings=('Hello ', '!'), @@ -1501,13 +1550,13 @@ def test_template(self): def test_expand_template(self): d = t"" self.assertEqual( - pprint.pformat(d), + pprint.pformat(d, expand=True), "Template(strings=('',), interpolations=())", ) name = "World" d = t"Hello {name}" self.assertEqual( - pprint.pformat(d, width=40, indent=4), + pprint.pformat(d, width=40, indent=4, expand=True), """\ Template( strings=('Hello ', ''), @@ -1524,7 +1573,7 @@ def test_expand_template(self): ver = {3.13: False, 3.14: True} d = t"Hello { {"name": "Python", "version": ver}!s:z}!" self.assertEqual( - pprint.pformat(d, width=40, indent=4), + pprint.pformat(d, width=40, indent=4, expand=True), """\ Template( strings=('Hello ', '!'), @@ -1565,7 +1614,8 @@ class DummyDataclass: corge=7, garply=(1, 2, 3, 4), ) - self.assertEqual(pprint.pformat(dummy_dataclass, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_dataclass, width=40, indent=4, + expand=True), """\ DummyDataclass( foo='foo', @@ -1585,7 +1635,8 @@ def test_expand_dict(self): "quux": ["foo", "bar", "baz"], "corge": 7, } - self.assertEqual(pprint.pformat(dummy_dict, width=40, indent=4, sort_dicts=False), + self.assertEqual(pprint.pformat(dummy_dict, width=40, indent=4, + expand=True, sort_dicts=False), """\ { 'foo': 'bar', @@ -1603,7 +1654,8 @@ def test_expand_ordered_dict(self): ("baz", 123), ] ) - self.assertEqual(pprint.pformat(dummy_ordered_dict, width=20, indent=4), + self.assertEqual(pprint.pformat(dummy_ordered_dict, width=20, indent=4, + expand=True), """\ OrderedDict([ ('foo', 1), @@ -1618,7 +1670,8 @@ def test_expand_list(self): "baz", "qux", ] - self.assertEqual(pprint.pformat(dummy_list, width=20, indent=4), + self.assertEqual(pprint.pformat(dummy_list, width=20, indent=4, + expand=True), """\ [ 'foo', @@ -1636,7 +1689,8 @@ def test_expand_tuple(self): 5, 6, ) - self.assertEqual(pprint.pformat(dummy_tuple, width=20, indent=4), + self.assertEqual(pprint.pformat(dummy_tuple, width=20, indent=4, + expand=True), """\ ( 'foo', @@ -1649,7 +1703,7 @@ def test_expand_tuple(self): def test_expand_single_element_tuple(self): self.assertEqual( - pprint.pformat((1,), width=1, indent=4), + pprint.pformat((1,), width=1, indent=4, expand=True), """\ ( 1, @@ -1663,7 +1717,8 @@ def test_expand_set(self): "qux", (1, 2, 3), } - self.assertEqual(pprint.pformat(dummy_set, width=20, indent=4), + self.assertEqual(pprint.pformat(dummy_set, width=20, indent=4, + expand=True), """\ { 'bar', @@ -1686,7 +1741,8 @@ def test_expand_frozenset(self): frozenset(dummy_set), } ) - self.assertEqual(pprint.pformat(dummy_frozenset, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_frozenset, width=40, indent=4, + expand=True), """\ frozenset({ frozenset({(1, 2, 3)}), @@ -1701,7 +1757,7 @@ def test_expand_frozendict(self): {"foo": "bar", "baz": 123, "qux": [1, 2]} ) self.assertEqual( - pprint.pformat(dummy_frozendict, width=20, indent=4), + pprint.pformat(dummy_frozendict, width=20, indent=4, expand=True), """\ frozendict({ 'baz': 123, @@ -1712,7 +1768,8 @@ def test_expand_frozendict(self): def test_expand_bytes(self): dummy_bytes = b"Hello world! foo bar baz 123 456 789" - self.assertEqual(pprint.pformat(dummy_bytes, width=20, indent=4), + self.assertEqual(pprint.pformat(dummy_bytes, width=20, indent=4, + expand=True), """\ ( b'Hello world!' @@ -1723,7 +1780,8 @@ def test_expand_bytes(self): def test_expand_bytearray(self): dummy_bytes = b"Hello world! foo bar baz 123 456 789" dummy_byte_array = bytearray(dummy_bytes) - self.assertEqual(pprint.pformat(dummy_byte_array, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_byte_array, width=40, indent=4, + expand=True), """\ bytearray( b'Hello world! foo bar baz 123 456' @@ -1739,7 +1797,8 @@ def test_expand_mappingproxy(self): "corge": 7, } dummy_mappingproxy = types.MappingProxyType(dummy_dict) - self.assertEqual(pprint.pformat(dummy_mappingproxy, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_mappingproxy, width=40, indent=4, + expand=True), """\ mappingproxy({ 'baz': 123, @@ -1760,7 +1819,8 @@ def test_expand_namespace(self): ), ) - self.assertEqual(pprint.pformat(dummy_namespace, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_namespace, width=40, indent=4, + expand=True), """\ namespace( foo='bar', @@ -1778,7 +1838,8 @@ def test_expand_defaultdict(self): dummy_defaultdict["foo"].append("baz") dummy_defaultdict["foo"].append("qux") dummy_defaultdict["bar"] = {"foo": "bar", "baz": None} - self.assertEqual(pprint.pformat(dummy_defaultdict, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_defaultdict, width=40, indent=4, + expand=True), """\ defaultdict(, { 'bar': {'baz': None, 'foo': 'bar'}, @@ -1795,7 +1856,8 @@ def test_expand_counter(self): 'd': 2, 'e': 1, })""" - self.assertEqual(pprint.pformat(dummy_counter, width=40, indent=4), expected) + self.assertEqual(pprint.pformat(dummy_counter, width=40, indent=4, + expand=True), expected) expected2 = """\ Counter({ @@ -1805,7 +1867,8 @@ def test_expand_counter(self): 'd': 2, 'e': 1, })""" - self.assertEqual(pprint.pformat(dummy_counter, width=20, indent=2), expected2) + self.assertEqual(pprint.pformat(dummy_counter, width=20, indent=2, + expand=True), expected2) def test_expand_chainmap(self): dummy_dict = { @@ -1821,7 +1884,8 @@ def test_expand_chainmap(self): {"corge": dummy_dict}, ) dummy_chainmap.maps.append({"garply": "waldo"}) - self.assertEqual(pprint.pformat(dummy_chainmap, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_chainmap, width=40, indent=4, + expand=True), """\ ChainMap( {'foo': 'bar'}, @@ -1863,7 +1927,8 @@ def test_expand_deque(self): dummy_deque.append(dummy_dict) dummy_deque.extend(dummy_list) dummy_deque.appendleft(dummy_set) - self.assertEqual(pprint.pformat(dummy_deque, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_deque, width=40, indent=4, + expand=True), """\ deque([ {(1, 2, 3)}, @@ -1894,7 +1959,8 @@ def __init__(self, *args, **kwargs): "corge": 7 }) dummy_userdict.access_count = 5 - self.assertEqual(pprint.pformat(dummy_userdict, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_userdict, width=40, indent=4, + expand=True), """\ { 'baz': 123, @@ -1914,7 +1980,8 @@ def __init__(self, *args, **kwargs): dummy_userlist = DummyUserList(["first", 2, {"key": "value"}, [4, 5, 6]]) - self.assertEqual(pprint.pformat(dummy_userlist, width=40, indent=4), + self.assertEqual(pprint.pformat(dummy_userlist, width=40, indent=4, + expand=True), """\ [ 'first', @@ -1926,7 +1993,7 @@ def __init__(self, *args, **kwargs): def test_expand_dict_keys(self): d = {"foo": 1, "bar": 2, "baz": 3, "qux": 4, "quux": 5} self.assertEqual( - pprint.pformat(d.keys(), width=20, indent=4), + pprint.pformat(d.keys(), width=20, indent=4, expand=True), """\ dict_keys([ 'bar', @@ -1940,7 +2007,7 @@ def test_expand_dict_keys(self): def test_expand_dict_values(self): d = {"foo": 1, "bar": 2, "baz": 3, "qux": 4, "quux": 5} self.assertEqual( - pprint.pformat(d.values(), width=20, indent=4), + pprint.pformat(d.values(), width=20, indent=4, expand=True), """\ dict_values([ 1, @@ -1954,7 +2021,7 @@ def test_expand_dict_values(self): def test_expand_dict_items(self): d = {"foo": 1, "bar": 2, "baz": 3, "qux": 4, "quux": 5} self.assertEqual( - pprint.pformat(d.items(), width=20, indent=4), + pprint.pformat(d.items(), width=20, indent=4, expand=True), """\ dict_items([ ('bar', 2), @@ -1968,7 +2035,7 @@ def test_expand_dict_items(self): def test_expand_str(self): s = "The quick brown fox jumped over the lazy dog " * 3 self.assertEqual( - pprint.pformat(s, width=40, indent=4), + pprint.pformat(s, width=40, indent=4, expand=True), """\ ( 'The quick brown fox jumped over ' diff --git a/Lib/test/test_profiling/test_sampling_profiler/test_binary_format.py b/Lib/test/test_profiling/test_sampling_profiler/test_binary_format.py index 1fbb4e2d6c6..5efc60a9211 100644 --- a/Lib/test/test_profiling/test_sampling_profiler/test_binary_format.py +++ b/Lib/test/test_profiling/test_sampling_profiler/test_binary_format.py @@ -975,7 +975,11 @@ def test_writer_total_samples_after_close_returns_zero(self): class TestBinaryFormatValidation(BinaryFormatTestBase): """Tests for malformed binary files.""" + HDR_OFF_SAMPLES = 28 HDR_OFF_THREADS = 32 + HDR_OFF_STR_TABLE = 36 + HDR_OFF_FRAME_TABLE = 44 + FILE_HEADER_PLACEHOLDER_SIZE = 64 def test_replay_rejects_more_threads_than_declared(self): """Replay rejects files with more unique threads than the header declares.""" @@ -1000,6 +1004,43 @@ def test_replay_rejects_more_threads_than_declared(self): "threads than declared in header (declared 1, found at least 2)", ) + def test_replay_rejects_sample_count_mismatch(self): + """Replay rejects files whose decoded samples disagree with the header.""" + samples = [[make_interpreter(0, [ + make_thread(1, [make_frame("sample.py", 10, "sample")]) + ])]] + filename = self.create_binary_file(samples, compression="none") + + with open(filename, "r+b") as raw: + raw.seek(self.HDR_OFF_SAMPLES) + raw.write(struct.pack("=I", 2)) + + with BinaryReader(filename) as reader: + self.assertEqual(reader.get_info()["sample_count"], 2) + with self.assertRaises(ValueError) as cm: + reader.replay_samples(RawCollector()) + self.assertEqual( + str(cm.exception), + "Sample count mismatch: header declares 2 samples " + "but replay decoded 1", + ) + + def test_replay_rejects_trailing_partial_sample_header(self): + """Replay rejects partial sample bytes instead of silently stopping.""" + filename = self.create_binary_file([], compression="none") + sample_data_end = self.FILE_HEADER_PLACEHOLDER_SIZE + 1 + + with open(filename, "r+b") as raw: + raw.seek(self.HDR_OFF_STR_TABLE) + raw.write(struct.pack("=Q", sample_data_end)) + raw.seek(self.HDR_OFF_FRAME_TABLE) + raw.write(struct.pack("=Q", sample_data_end)) + + with BinaryReader(filename) as reader: + with self.assertRaises(ValueError) as cm: + reader.replay_samples(RawCollector()) + self.assertEqual(str(cm.exception), "Truncated sample data: 1 trailing bytes") + class TestBinaryEncodings(BinaryFormatTestBase): """Tests specifically targeting different stack encodings.""" diff --git a/Lib/test/test_profiling/test_sampling_profiler/test_blocking.py b/Lib/test/test_profiling/test_sampling_profiler/test_blocking.py index 102eb51b556..1f4b6da3281 100644 --- a/Lib/test/test_profiling/test_sampling_profiler/test_blocking.py +++ b/Lib/test/test_profiling/test_sampling_profiler/test_blocking.py @@ -39,8 +39,9 @@ class TestBlockingModeStackAccuracy(unittest.TestCase): @classmethod def setUpClass(cls): # Test script that uses a generator consumed in a loop. - # When consume_generator is on the arithmetic lines (temp1, temp2, etc.), - # fibonacci_generator should NOT be in the stack at all. + # When consume_generator is the executing leaf frame on the arithmetic + # lines (temp1, temp2, etc.), fibonacci_generator should NOT be in the + # stack at all. # Line numbers are important here - see ARITHMETIC_LINES below. cls.generator_script = textwrap.dedent(''' def fibonacci_generator(n): @@ -65,29 +66,32 @@ def main(): main() ''') # Line numbers of the arithmetic operations in consume_generator. - # These are the lines where fibonacci_generator should NOT be in the stack. - # The socket injection code adds 7 lines before our script. - # temp1 = value + 1 -> line 17 - # temp2 = value * 2 -> line 18 - # temp3 = value - 1 -> line 19 - # result = ... -> line 20 - cls.ARITHMETIC_LINES = {17, 18, 19, 20} + # These are the lines where fibonacci_generator should NOT be in the + # stack when consume_generator is the executing leaf frame. They account + # for the socket prelude added by test_subprocess(). + # temp1 = value + 1 -> line 16 + # temp2 = value * 2 -> line 17 + # temp3 = value - 1 -> line 18 + # result = ... -> line 19 + cls.ARITHMETIC_LINES = {16, 17, 18, 19} def test_generator_not_under_consumer_arithmetic(self): """Test that fibonacci_generator doesn't appear when consume_generator does arithmetic. - When consume_generator is executing arithmetic lines (temp1, temp2, etc.), - fibonacci_generator should NOT be anywhere in the stack - it's not being - called at that point. + When consume_generator is the leaf frame on arithmetic lines (temp1, + temp2, etc.), fibonacci_generator should NOT be anywhere in the stack - + it's not being called at that point. Non-leaf frame line numbers are + caller/resume metadata, not proof that the frame is executing. Valid stacks: - - consume_generator at 'for value in gen:' line WITH fibonacci_generator - at the top (generator is yielding) + - fibonacci_generator at the top (generator is executing), with + consume_generator below it - consume_generator at arithmetic lines WITHOUT fibonacci_generator (we're just doing math, not calling the generator) Invalid stacks (indicate torn/inconsistent reads): - - consume_generator at arithmetic lines WITH fibonacci_generator + - consume_generator leaf frame at arithmetic lines WITH + fibonacci_generator anywhere in the stack Note: call_tree is ordered from bottom (index 0) to top (index -1). @@ -110,6 +114,8 @@ def test_generator_not_under_consumer_arithmetic(self): total_samples = 0 invalid_stacks = 0 arithmetic_samples = 0 + generator_samples = 0 + generator_not_leaf_samples = 0 for (call_tree, _thread_id), count in collector.stack_counter.items(): total_samples += count @@ -117,15 +123,21 @@ def test_generator_not_under_consumer_arithmetic(self): if not call_tree: continue - # Find consume_generator in the stack and check its line number - for i, (filename, lineno, funcname) in enumerate(call_tree): - if funcname == "consume_generator" and lineno in self.ARITHMETIC_LINES: - arithmetic_samples += count - # Check if fibonacci_generator appears anywhere in this stack - func_names = [frame[2] for frame in call_tree] - if "fibonacci_generator" in func_names: - invalid_stacks += count - break + # Non-leaf frame line numbers can point at resume locations while + # a callee is the executing leaf frame. + _, lineno, funcname = call_tree[-1] + func_names = [frame[2] for frame in call_tree] + + if "fibonacci_generator" in func_names: + generator_samples += count + if funcname != "fibonacci_generator": + generator_not_leaf_samples += count + + if funcname == "consume_generator" and lineno in self.ARITHMETIC_LINES: + arithmetic_samples += count + # Check if fibonacci_generator appears anywhere in this stack. + if "fibonacci_generator" in func_names: + invalid_stacks += count self.assertGreater(total_samples, 10, f"Expected at least 10 samples, got {total_samples}") @@ -134,8 +146,15 @@ def test_generator_not_under_consumer_arithmetic(self): self.assertGreater(arithmetic_samples, 0, f"Expected some samples on arithmetic lines, got {arithmetic_samples}") + self.assertGreater(generator_samples, 0, + f"Expected some samples in fibonacci_generator, got {generator_samples}") + + self.assertEqual(generator_not_leaf_samples, 0, + f"Found {generator_not_leaf_samples}/{generator_samples} stacks where " + f"fibonacci_generator appears but is not the leaf frame.") + self.assertEqual(invalid_stacks, 0, f"Found {invalid_stacks}/{arithmetic_samples} invalid stacks where " f"fibonacci_generator appears in the stack when consume_generator " - f"is on an arithmetic line. This indicates torn/inconsistent stack " - f"traces are being captured.") + f"is the leaf frame on an arithmetic line. This indicates " + f"torn/inconsistent stack traces are being captured.") diff --git a/Lib/test/test_profiling/test_sampling_profiler/test_integration.py b/Lib/test/test_profiling/test_sampling_profiler/test_integration.py index c6731e95639..3487647b766 100644 --- a/Lib/test/test_profiling/test_sampling_profiler/test_integration.py +++ b/Lib/test/test_profiling/test_sampling_profiler/test_integration.py @@ -686,8 +686,6 @@ def test_script_error_treatment(self): "-m", "profiling.sampling.cli", "run", - "-d", - "1", script_file.name, ], capture_output=True, diff --git a/Lib/test/test_profiling/test_sampling_profiler/test_live_collector_ui.py b/Lib/test/test_profiling/test_sampling_profiler/test_live_collector_ui.py index c0d39f487c8..59373a8d00c 100644 --- a/Lib/test/test_profiling/test_sampling_profiler/test_live_collector_ui.py +++ b/Lib/test/test_profiling/test_sampling_profiler/test_live_collector_ui.py @@ -835,8 +835,7 @@ def mock_init_curses_side_effect(self, n_times, mock_self, stdscr): # still failing for _ in range(n_times): mock_self.display.simulate_input(-1) - if n_times >= 500: - mock_self.display.simulate_input(ord('q')) + mock_self.display.simulate_input(ord('q')) def test_run_failed_module_live(self): """Test that running a existing module that fails exits with clean error.""" diff --git a/Lib/test/test_pwd.py b/Lib/test/test_pwd.py index aa090b464a7..bdf57776c82 100644 --- a/Lib/test/test_pwd.py +++ b/Lib/test/test_pwd.py @@ -1,3 +1,5 @@ +import random +import string import sys import unittest from test.support import import_helper @@ -56,59 +58,57 @@ def test_values_extended(self): def test_errors(self): self.assertRaises(TypeError, pwd.getpwuid) self.assertRaises(TypeError, pwd.getpwuid, 3.14) + self.assertRaises(TypeError, pwd.getpwuid, 0.0) + self.assertRaises(TypeError, pwd.getpwuid, 0, 0) + # should be out of uid_t range + self.assertRaises(KeyError, pwd.getpwuid, 2**128) + self.assertRaises(KeyError, pwd.getpwuid, -2**128) self.assertRaises(TypeError, pwd.getpwnam) self.assertRaises(TypeError, pwd.getpwnam, 42) - self.assertRaises(TypeError, pwd.getpwall, 42) + self.assertRaises(TypeError, pwd.getpwnam, b'root') + self.assertRaises(TypeError, pwd.getpwnam, 'root', 0) # embedded null character self.assertRaisesRegex(ValueError, 'null', pwd.getpwnam, 'a\x00b') + self.assertRaisesRegex(ValueError, 'null', pwd.getpwnam, 'root\x00') + self.assertRaises(UnicodeEncodeError, pwd.getpwnam, 'roo\udc74') + self.assertRaises(KeyError, pwd.getpwnam, '') + self.assertRaises(TypeError, pwd.getpwall, 42) - # try to get some errors - bynames = {} - byuids = {} - for (n, p, u, g, gecos, d, s) in pwd.getpwall(): - bynames[n] = u - byuids[u] = n - - allnames = list(bynames.keys()) - namei = 0 - fakename = allnames[namei] if allnames else "invaliduser" - while fakename in bynames: - chars = list(fakename) - for i in range(len(chars)): - if chars[i] == 'z': - chars[i] = 'A' - break - elif chars[i] == 'Z': - continue - else: - chars[i] = chr(ord(chars[i]) + 1) - break - else: - namei = namei + 1 - try: - fakename = allnames[namei] - except IndexError: - # should never happen... if so, just forget it - break - fakename = ''.join(chars) - - self.assertRaises(KeyError, pwd.getpwnam, fakename) - - # In some cases, byuids isn't a complete list of all users in the - # system, so if we try to pick a value not in byuids (via a perturbing - # loop, say), pwd.getpwuid() might still be able to find data for that - # uid. Using sys.maxint may provoke the same problems, but hopefully - # it will be a more repeatable failure. - fakeuid = sys.maxsize - self.assertNotIn(fakeuid, byuids) - self.assertRaises(KeyError, pwd.getpwuid, fakeuid) + # Find a non-existent user name. + # getpwall() will not necessarily report all existing users + # (typical for LDAP based directories in big organizations). + for _ in range(30): + fakename = ''.join(random.choices(string.ascii_lowercase, k=6)) + try: + pwd.getpwnam(fakename) + except KeyError: + break + else: + self.fail('Cannot find non-existent user name') + + # Find a non-existent uid. + maxuid = max(e.pw_uid for e in pwd.getpwall()) + if maxuid < 2**15: + maxuid = 2**15 + elif maxuid < 2**16: + maxuid = 2**16-1 + else: + maxuid = 2**31 + for _ in range(30): + fakeuid = random.randrange(maxuid) + try: + pwd.getpwuid(fakeuid) + except KeyError: + break + else: + self.fail('Cannot find non-existent uid') + + # On Cygwin, getpwuid(-1) returns 'Unknown+User' user + if sys.platform != 'cygwin': + # -1 shouldn't be a valid uid because it has a special meaning in many + # uid-related functions + self.assertRaises(KeyError, pwd.getpwuid, -1) - # -1 shouldn't be a valid uid because it has a special meaning in many - # uid-related functions - self.assertRaises(KeyError, pwd.getpwuid, -1) - # should be out of uid_t range - self.assertRaises(KeyError, pwd.getpwuid, 2**128) - self.assertRaises(KeyError, pwd.getpwuid, -2**128) if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_pydoc/test_pydoc.py b/Lib/test/test_pydoc/test_pydoc.py index 2e190d1b81b..5cd26923f75 100644 --- a/Lib/test/test_pydoc/test_pydoc.py +++ b/Lib/test/test_pydoc/test_pydoc.py @@ -2172,7 +2172,7 @@ def mock_getline(prompt): def test_keywords(self): self.assertEqual(sorted(pydoc.Helper.keywords), - sorted(keyword.kwlist)) + sorted(keyword.kwlist + ['lazy'])) def test_interact_empty_line_continues(self): # gh-138568: test pressing Enter without input should continue in help session diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py index 4fe2e02326f..060a509c1bd 100644 --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -276,7 +276,9 @@ def test_parse_again(self): expat.errors.XML_ERROR_FINISHED) @support.subTests('encoding', [ - 'utf-8', 'utf-16', 'utf-16be', 'utf-16le', + # built-in Expat encodings + 'iso-8859-1', 'utf-8', 'utf-16', 'utf-16be', 'utf-16le', + # 8-bit Python encodings 'iso8859-1', 'iso8859-2', 'iso8859-3', 'iso8859-4', 'iso8859-5', 'iso8859-6', 'iso8859-7', 'iso8859-8', 'iso8859-9', 'iso8859-10', 'iso8859-13', 'iso8859-14', 'iso8859-15', 'iso8859-16', @@ -288,8 +290,14 @@ def test_parse_again(self): 'mac-cyrillic', 'mac-greek', 'mac-iceland', 'mac-latin2', 'mac-roman', 'mac-turkish', 'koi8-r', 'koi8-t', 'koi8-u', 'kz1048', 'ptcp154', + # multi-byte Python encodings + "cp932", "cp949", "cp950", + "Big5","EUC-JP", "GB2312", "GBK", "johab", "Shift_JIS", + 'UTF8', 'utf-8-sig', + "Big5-HKSCS", "EUC_JIS-2004", "EUC_JISX0213", + "Shift_JIS-2004", "Shift_JISX0213", ]) - def test_supported_ecodings(self, encoding): + def test_supported_encodings(self, encoding): out = self.Outputter() parser = expat.ParserCreate() self._hookup_callbacks(parser, out) @@ -305,10 +313,10 @@ def test_supported_ecodings(self, encoding): ]) @support.subTests('encoding', [ - 'UTF-8', 'utf-8', 'utf-16', 'utf-16le', 'utf-16be', + 'UTF-8', 'utf-8', 'utf8', 'utf-16', 'utf-16le', 'utf-16be', 'koi8-u', 'cp1125', 'cp1251', 'iso8859-5', 'mac-cyrillic', ]) - def test_supported_ecodings2(self, encoding): + def test_supported_encodings2(self, encoding): out = self.Outputter() parser = expat.ParserCreate() self._hookup_callbacks(parser, out) @@ -324,29 +332,110 @@ def test_supported_ecodings2(self, encoding): "End element: 'корінь'", ]) + @support.subTests('encoding', [ + 'utf-8', 'utf-16', 'utf-16be', 'utf-16le', + ]) + def test_supported_non_bmp(self, encoding): + out = self.Outputter() + parser = expat.ParserCreate() + self._hookup_callbacks(parser, out) + c = '\U00020e6d\U00028e36' + data = (f'\n' + f'{c}').encode(encoding) + parser.Parse(data, True) + self.assertEqual(out.out, [ + ('XML declaration', ('1.0', encoding, -1)), + "Start element: 'root' {}", + f'Character data: {c!r}', + "End element: 'root'", + ]) + + @support.subTests('encoding', [ + 'UTF8', 'utf-8-sig', + "Big5-HKSCS", "EUC_JIS-2004", "EUC_JISX0213", + "Shift_JIS-2004", "Shift_JISX0213", + ]) + def test_unsupported_non_bmp(self, encoding): + parser = expat.ParserCreate() + c = '\U00020e6d\U00028e36' + data = (f'\n' + f'{c}').encode(encoding) + with self.assertRaises(expat.ExpatError): + parser.Parse(data, True) + @support.subTests('encoding', [ 'UTF-7', - "Big5-HKSCS", "Big5", - "cp932", "cp949", "cp950", - "EUC_JIS-2004", "EUC_JISX0213", "EUC-JP", "EUC-KR", - "GB18030", "GB2312", "GBK", + "unicode-escape", "raw-unicode-escape", + "EUC-KR", + "GB18030", + "HZ-GB-2312", + "ISO-2022-JP", "ISO-2022-JP-1", "ISO-2022-JP-2004", + "ISO-2022-JP-2", "ISO-2022-JP-3", "ISO-2022-JP-EXT", "ISO-2022-KR", - "johab", - "Shift_JIS", "Shift_JIS-2004", "Shift_JISX0213", ]) - def test_unsupportes_ecodings(self, encoding): + def test_unsupported_encodings(self, encoding): parser = expat.ParserCreate() data = (f'\n' '').encode(encoding) with self.assertRaises(ValueError): parser.Parse(data, True) - def test_unknown_ecoding(self): + parser = expat.ParserCreate() + data = (f'\n' + '').encode() + with self.assertRaises(ValueError): + parser.Parse(data, True) + + @support.subTests('encoding', [ + 'cp037', 'cp273', 'cp424', 'cp500', 'cp864', 'cp875', + 'cp1026', 'cp1140', + 'mac_arabic', 'mac_farsi', + ]) + def test_incompatible_encodings(self, encoding): + parser = expat.ParserCreate() + data = (f'\n' + '').encode(encoding) + with self.assertRaises(expat.ExpatError): + parser.Parse(data, True) + + parser = expat.ParserCreate() + data = (f'\n' + '').encode() + with self.assertRaisesRegex(expat.ExpatError, 'unknown encoding'): + parser.Parse(data, True) + + @support.subTests('encoding', [ + 'hex_codec', 'rot_13', + ]) + def test_non_text_encodings(self, encoding): + parser = expat.ParserCreate() + data = (f'\n' + '').encode() + with self.assertRaises(LookupError): + parser.Parse(data, True) + + def test_undefined_encoding(self): + parser = expat.ParserCreate() + data = b'\n' + with self.assertRaises(UnicodeError): + parser.Parse(data, True) + + def test_unknown_encoding(self): parser = expat.ParserCreate() data = b'\n' with self.assertRaises(LookupError): parser.Parse(data, True) + @support.subTests('sample,exception', [ + (b' \xa1', UnicodeDecodeError), # crashed + (b' \xa1 \xa1', expat.ExpatError), + ]) + def test_multibyte_encoding_errors(self, sample, exception): + parser = expat.ParserCreate() + data = b'\n' + sample + with self.assertRaises(exception): + parser.Parse(data, True) class NamespaceSeparatorTest(unittest.TestCase): def test_legal(self): @@ -821,7 +910,7 @@ def test_trigger_leak(self): def test_deeply_nested_content_model(self): # This should raise a RecursionError and not crash. # See https://github.com/python/cpython/issues/145986. - N = 500_000 + N = 800_000 data = ( b' None: + super().tearDown() + files_to_delete = set(pathlib.Path("/tmp/").glob("jit-*.dump")) + files_to_delete |= set(pathlib.Path("/tmp/").glob("jitted-*.so")) + files_to_delete -= self.jit_files + for file in files_to_delete: + file.unlink() + + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index 13a3487382d..59cb319b0a9 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -3580,8 +3580,6 @@ def test_module_all_attribute(self): if hasattr(os, 'statvfs') or os.name == 'nt': target_api.append('disk_usage') self.assertEqual(set(shutil.__all__), set(target_api)) - with self.assertWarns(DeprecationWarning): - from shutil import ExecError # noqa: F401 if __name__ == '__main__': diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index d6cc22558ec..2cad18a69ff 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -833,6 +833,8 @@ def test_itimer_real(self): # Issue 3864, unknown if this affects earlier versions of freebsd also @unittest.skipIf(sys.platform in ('netbsd5',) or is_apple_mobile, 'itimer not reliable (does not mix well with threading) on some BSDs.') + @unittest.skipIf(sys.platform == 'cygwin', + "Cygwin doesn't support ITIMER_VIRTUAL") def test_itimer_virtual(self): self.itimer = signal.ITIMER_VIRTUAL signal.signal(signal.SIGVTALRM, self.sig_vtalrm) @@ -850,6 +852,8 @@ def test_itimer_virtual(self): # and the handler should have been called self.assertEqual(self.hndl_called, True) + @unittest.skipIf(sys.platform == 'cygwin', + "Cygwin doesn't support ITIMER_PROF") def test_itimer_prof(self): self.itimer = signal.ITIMER_PROF signal.signal(signal.SIGPROF, self.sig_prof) diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index 0e6f352f49c..5fd65ad9992 100644 --- a/Lib/test/test_site.py +++ b/Lib/test/test_site.py @@ -187,20 +187,17 @@ def test_addsitedir(self): self.pth_file_tests(pth_file) def test_addsitedir_explicit_flush(self): - # addsitedir() reads .pth files and, with - # defer_processing_start_files=True, accumulates pending state - # without flushing. A subsequent process_startup_files() call - # then applies the paths and runs the import lines. + # StartupState.addsitedir() reads .pth files and accumulates pending + # state without flushing. A subsequent state.process() call then + # applies the paths and runs the import lines. pth_file = PthFile() # Ensure we have a clean slate. pth_file.cleanup(prep=True) with pth_file.create(): - # Pass defer_processing_start_files=True to prevent flushing. - site.addsitedir( - pth_file.base_dir, set(), - defer_processing_start_files=True) + state = site.StartupState(known_paths=set()) + state.addsitedir(pth_file.base_dir) self.assertNotIn(pth_file.imported, sys.modules) - site.process_startup_files() + state.process() self.pth_file_tests(pth_file) def test_addsitedir_dotfile(self): @@ -456,6 +453,7 @@ def cleanup(self, prep=False): if os.path.exists(self.bad_dir_path): os.rmdir(self.bad_dir_path) + class ImportSideEffectTests(unittest.TestCase): """Test side-effects from importing 'site'.""" @@ -545,7 +543,6 @@ def test_customization_modules_on_startup(self): output = subprocess.check_output([sys.executable, '-s', '-c', '""']) self.assertNotIn(eyecatcher, output.decode('utf-8')) - @unittest.skipUnless(hasattr(urllib.request, "HTTPSHandler"), 'need SSL support to download license') @test.support.requires_resource('network') @@ -915,29 +912,33 @@ class StartFileTests(unittest.TestCase): def setUp(self): self.enterContext(import_helper.DirsOnSysPath()) self.tmpdir = self.sitedir = self.enterContext(os_helper.temp_dir()) - # Each test gets its own _StartupState to drive the parser and - # processor methods directly. Defensively clear any _startup_state - # that a prior test may have left set via defer_processing_start_files - # without a corresponding process_startup_files() flush. - self.state = site._StartupState() - site._startup_state = None - self.addCleanup(self._reset_startup_state) - - def _reset_startup_state(self): - site._startup_state = None - - def _make_start(self, content, name='testpkg'): - """Write a .start file and return its basename.""" + # Each test gets its own StartupState to batch the parsing and + # explicitly invoke the processing. Seed with an empty known_paths + # so dedup is not influenced by the current sys.path. + self.state = site.StartupState(known_paths=set()) + + def _make_start(self, content, name='testpkg', basedir=None): + """Write a .start file and return its basename. + + ``basedir`` defaults to ``self.tmpdir``. Pass an explicit directory + when the .start file needs to live somewhere other than the test's + primary tmpdir (e.g. a nested user-site). + """ basename = f"{name}.start" - filepath = os.path.join(self.tmpdir, basename) + filepath = os.path.join(self.tmpdir if basedir is None else basedir, basename) with open(filepath, 'w', encoding='utf-8') as f: f.write(content) return basename - def _make_pth(self, content, name='testpkg'): - """Write a .pth file and return its basename.""" + def _make_pth(self, content, name='testpkg', basedir=None): + """Write a .pth file and return its basename. + + ``basedir`` defaults to ``self.tmpdir``. Pass an explicit directory + when the .pth file needs to live somewhere other than the test's + primary tmpdir (e.g. a nested user-site). + """ basename = f"{name}.pth" - filepath = os.path.join(self.tmpdir, basename) + filepath = os.path.join(self.tmpdir if basedir is None else basedir, basename) with open(filepath, 'w', encoding='utf-8') as f: f.write(content) return basename @@ -964,16 +965,17 @@ def _make_mod(self, contents, name='mod', *, package=False, on_path=False): sys.path.insert(0, extdir) return extdir - def _all_entrypoints(self): + def _all_entrypoints(self, state=None): """Flatten state._entrypoints into a list of (filename, entry) tuples.""" result = [] - for filename, entries in self.state._entrypoints.items(): + state = self.state if state is None else state + for filename, entries in state._entrypoints.items(): for entry in entries: result.append((filename, entry)) return result - def _just_entrypoints(self): - return [entry for filename, entry in self._all_entrypoints()] + def _just_entrypoints(self, state=None): + return [entry for filename, entry in self._all_entrypoints(state)] # There are two classes of tests here. Tests that start with `test_impl_` # know details about the implementation and they access non-public methods @@ -983,11 +985,25 @@ def _just_entrypoints(self): # integration semantics and functionality as a caller of the public # surfaces would see. - # --- _StartupState.read_start_file tests --- + # --- Basic StartupState implementation tests --- + + def test_impl_startupstate_defaults_to_sys_path(self): + sys.path.insert(0, self.sitedir) + state = site.StartupState() + self.assertIn(site.makepath(self.sitedir)[1], state._known_paths) + + def test_impl_startupstate_uses_supplied_known_paths(self): + known_paths = set() + state = site.StartupState(known_paths) + state.addsitedir(self.sitedir) + self.assertIs(state._known_paths, known_paths) + self.assertIn(site.makepath(self.sitedir)[1], known_paths) + + # --- StartupState._read_start_file tests --- def test_impl_read_start_file_basic(self): self._make_start("os.path:join\n", name='foo') - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') fullname = os.path.join(self.sitedir, 'foo.start') self.assertEqual( self.state._entrypoints[fullname], ['os.path:join'] @@ -995,7 +1011,7 @@ def test_impl_read_start_file_basic(self): def test_impl_read_start_file_multiple_entries(self): self._make_start("os.path:join\nos.path:exists\n", name='foo') - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') fullname = os.path.join(self.sitedir, 'foo.start') self.assertEqual( self.state._entrypoints[fullname], @@ -1004,7 +1020,7 @@ def test_impl_read_start_file_multiple_entries(self): def test_impl_read_start_file_comments_and_blanks(self): self._make_start("# a comment\n\nos.path:join\n \n", name='foo') - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') fullname = os.path.join(self.sitedir, 'foo.start') self.assertEqual( self.state._entrypoints[fullname], ['os.path:join'] @@ -1023,7 +1039,7 @@ def test_impl_read_start_file_accepts_all_non_blank_lines(self): "os.path:join\n" # valid ) self._make_start(content, name='foo') - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') fullname = os.path.join(self.sitedir, 'foo.start') self.assertEqual(self.state._entrypoints[fullname], [ 'os.path', @@ -1038,7 +1054,7 @@ def test_impl_read_start_file_empty(self): # (with an empty entry point list) so that it suppresses `import` # lines in any matching .pth file. self._make_start("", name='foo') - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') fullname = os.path.join(self.sitedir, 'foo.start') self.assertEqual(self.state._entrypoints, {fullname: []}) @@ -1046,13 +1062,13 @@ def test_impl_read_start_file_comments_only(self): # As with an empty file, a comments-only .start file is registered # as present so it can suppress matching .pth `import` lines. self._make_start("# just a comment\n# another\n", name='foo') - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') fullname = os.path.join(self.sitedir, 'foo.start') self.assertEqual(self.state._entrypoints, {fullname: []}) def test_impl_read_start_file_nonexistent(self): with captured_stderr(): - self.state.read_start_file(self.tmpdir, 'nonexistent.start') + self.state._read_start_file(self.tmpdir, 'nonexistent.start') self.assertEqual(self.state._entrypoints, {}) @unittest.skipUnless(hasattr(os, 'chflags'), 'test needs os.chflags()') @@ -1061,13 +1077,13 @@ def test_impl_read_start_file_hidden_flags(self): filepath = os.path.join(self.tmpdir, 'foo.start') st = os.stat(filepath) os.chflags(filepath, st.st_flags | stat.UF_HIDDEN) - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') self.assertEqual(self.state._entrypoints, {}) def test_impl_one_start_file_with_duplicates_not_deduplicated(self): # PEP 829: duplicate entry points are NOT deduplicated. self._make_start("os.path:join\nos.path:join\n", name='foo') - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') fullname = os.path.join(self.sitedir, 'foo.start') self.assertEqual( self.state._entrypoints[fullname], @@ -1077,8 +1093,8 @@ def test_impl_one_start_file_with_duplicates_not_deduplicated(self): def test_impl_two_start_files_with_duplicates_not_deduplicated(self): self._make_start("os.path:join", name="foo") self._make_start("os.path:join", name="bar") - self.state.read_start_file(self.sitedir, 'foo.start') - self.state.read_start_file(self.sitedir, 'bar.start') + self.state._read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'bar.start') self.assertEqual( self._just_entrypoints(), ['os.path:join', 'os.path:join'], @@ -1089,7 +1105,7 @@ def test_impl_read_start_file_accepts_utf8_bom(self): filepath = os.path.join(self.tmpdir, 'foo.start') with open(filepath, 'wb') as f: f.write(b'\xef\xbb\xbf' + b'os.path:join\n') - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') fullname = os.path.join(self.sitedir, 'foo.start') self.assertEqual( self.state._entrypoints[fullname], ['os.path:join'] @@ -1106,23 +1122,23 @@ def test_impl_read_start_file_invalid_utf8_silently_skipped(self): # Bare continuation byte -- invalid as a UTF-8 start byte. f.write(b'\x80\x80\x80\n') with captured_stderr() as err: - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_start_file(self.sitedir, 'foo.start') self.assertEqual(self.state._entrypoints, {}) self.assertEqual(err.getvalue(), "") - # --- _StartupState.read_pth_file tests --- + # --- StartupState._read_pth_file tests --- def test_impl_read_pth_file_paths(self): subdir = os.path.join(self.sitedir, 'mylib') os.mkdir(subdir) self._make_pth("mylib\n", name='foo') - self.state.read_pth_file(self.sitedir, 'foo.pth', set()) + self.state._read_pth_file(self.sitedir, 'foo.pth') fullname = os.path.join(self.sitedir, 'foo.pth') - self.assertIn(subdir, self.state._syspaths[fullname]) + self.assertIn((fullname, subdir), self.state._path_entries) def test_impl_read_pth_file_imports_collected(self): self._make_pth("import sys\n", name='foo') - self.state.read_pth_file(self.sitedir, 'foo.pth', set()) + self.state._read_pth_file(self.sitedir, 'foo.pth') fullname = os.path.join(self.sitedir, 'foo.pth') self.assertEqual( self.state._importexecs[fullname], ['import sys'] @@ -1130,23 +1146,21 @@ def test_impl_read_pth_file_imports_collected(self): def test_impl_read_pth_file_comments_and_blanks(self): self._make_pth("# comment\n\n \n", name='foo') - self.state.read_pth_file(self.sitedir, 'foo.pth', set()) - self.assertEqual(self.state._syspaths, {}) + self.state._read_pth_file(self.sitedir, 'foo.pth') + self.assertEqual(self.state._path_entries, []) self.assertEqual(self.state._importexecs, {}) def test_impl_read_pth_file_deduplication(self): subdir = os.path.join(self.sitedir, 'mylib') os.mkdir(subdir) - # An accumulator acts as a deduplication ledger. - known_paths = set() + # self.state._known_paths acts as the deduplication ledger across + # both reads. self._make_pth("mylib\n", name='a') self._make_pth("mylib\n", name='b') - self.state.read_pth_file(self.sitedir, 'a.pth', known_paths) - self.state.read_pth_file(self.sitedir, 'b.pth', known_paths) + self.state._read_pth_file(self.sitedir, 'a.pth') + self.state._read_pth_file(self.sitedir, 'b.pth') # There is only one entry across both files. - all_dirs = [] - for dirs in self.state._syspaths.values(): - all_dirs.extend(dirs) + all_dirs = [dir_ for filename, dir_ in self.state._path_entries] self.assertEqual(all_dirs, [subdir]) def test_impl_read_pth_file_bad_line_continues(self): @@ -1155,9 +1169,9 @@ def test_impl_read_pth_file_bad_line_continues(self): os.mkdir(subdir) self._make_pth("abc\x00def\ngoodpath\n", name='foo') with captured_stderr(): - self.state.read_pth_file(self.sitedir, 'foo.pth', set()) + self.state._read_pth_file(self.sitedir, 'foo.pth') fullname = os.path.join(self.sitedir, 'foo.pth') - self.assertIn(subdir, self.state._syspaths.get(fullname, [])) + self.assertIn((fullname, subdir), self.state._path_entries) def _flags_with_verbose(self, verbose): # Build a sys.flags clone with verbose overridden but every @@ -1179,7 +1193,7 @@ def test_impl_read_pth_file_parse_error_silent_by_default(self): mock.patch('sys.flags', self._flags_with_verbose(False)), captured_stderr() as err, ): - self.state.read_pth_file(self.sitedir, 'foo.pth', set()) + self.state._read_pth_file(self.sitedir, 'foo.pth') self.assertEqual(err.getvalue(), "") def test_impl_read_pth_file_parse_error_reported_under_verbose(self): @@ -1190,7 +1204,7 @@ def test_impl_read_pth_file_parse_error_reported_under_verbose(self): mock.patch('sys.flags', self._flags_with_verbose(True)), captured_stderr() as err, ): - self.state.read_pth_file(self.sitedir, 'foo.pth', set()) + self.state._read_pth_file(self.sitedir, 'foo.pth') out = err.getvalue() self.assertIn('Error in', out) self.assertIn('foo.pth', out) @@ -1210,11 +1224,11 @@ def test_impl_read_pth_file_locale_fallback(self): mock.patch('locale.getencoding', return_value='latin-1'), captured_stderr(), ): - self.state.read_pth_file(self.sitedir, 'foo.pth', set()) + self.state._read_pth_file(self.sitedir, 'foo.pth') fullname = os.path.join(self.sitedir, 'foo.pth') - self.assertIn(subdir, self.state._syspaths.get(fullname, [])) + self.assertIn((fullname, subdir), self.state._path_entries) - # --- _StartupState._execute_start_entrypoints tests --- + # --- StartupState._execute_start_entrypoints tests --- def test_impl_execute_entrypoints_with_callable(self): # An entry point with a callable. @@ -1294,23 +1308,26 @@ def bump(): import countmod self.assertEqual(countmod.call_count, 2) - # --- _StartupState._exec_imports tests --- + # --- StartupState._exec_imports tests --- def test_impl_exec_imports_suppressed_by_matching_start(self): # Import lines from foo.pth are suppressed when foo.start exists. self._make_mod("""\ call_count = 0 -def bump(): +def bump(incr=2): global call_count - call_count += 1 + call_count += incr """, name='countmod', package=False, on_path=True) - pth_fullname = os.path.join(self.sitedir, 'foo.pth') - start_fullname = os.path.join(self.sitedir, 'foo.start') - self.state._importexecs[pth_fullname] = ['import countmod; countmod.bump()'] - self.state._entrypoints[start_fullname] = ['os.path:join'] + self._make_start("countmod:bump\n", name='foo') + self._make_pth("import countmod; countmod.bump(1)\n", name='foo') + self.state._read_pth_file(self.sitedir, 'foo.pth') + self.state._read_start_file(self.sitedir, 'foo.start') self.state._exec_imports() + self.state._execute_start_entrypoints() import countmod - self.assertEqual(countmod.call_count, 0) + # This will be 2 because the entry point is called with no + # arguments, and the .pth import line is never exec'd. + self.assertEqual(countmod.call_count, 2) def test_impl_exec_imports_not_suppressed_by_different_start(self): # Import lines from foo.pth are NOT suppressed by bar.start. @@ -1337,24 +1354,24 @@ def startup(): global called called = True """, name='epmod', package=True, on_path=True) - self.state.read_pth_file(self.sitedir, 'foo.pth', set()) - self.state.read_start_file(self.sitedir, 'foo.start') + self.state._read_pth_file(self.sitedir, 'foo.pth') + self.state._read_start_file(self.sitedir, 'foo.start') self.state._exec_imports() import epmod self.assertFalse(epmod.called) - # --- _StartupState._extend_syspath tests --- + # --- StartupState._extend_syspath tests --- def test_impl_extend_syspath_existing_dir(self): subdir = os.path.join(self.sitedir, 'extlib') os.mkdir(subdir) - self.state._syspaths['test.pth'] = [subdir] + self.state._path_entries.append(('test.pth', subdir)) self.state._extend_syspath() self.assertIn(subdir, sys.path) def test_impl_extend_syspath_nonexistent_dir(self): nonesuch = os.path.join(self.sitedir, 'nosuchdir') - self.state._syspaths['test.pth'] = [nonesuch] + self.state._path_entries.append(('test.pth', nonesuch)) with captured_stderr() as err: self.state._extend_syspath() self.assertNotIn(nonesuch, sys.path) @@ -1405,37 +1422,13 @@ def test_addsitedir_dedups_paths_across_pth_files(self): def test_addsitedir_discovers_start_files(self): # addsitedir() should discover .start files and accumulate entries. - # With defer_processing_start_files=True the preserved state lives on - # site._startup_state and isn't flushed until the caller invokes - # process_startup_files(). self._make_start("os.path:join\n", name='foo') - site.addsitedir( - self.sitedir, set(), - defer_processing_start_files=True, - ) + state = site.StartupState(known_paths=set()) + state.addsitedir(self.sitedir) fullname = os.path.join(self.sitedir, 'foo.start') self.assertIn( - 'os.path:join', site._startup_state._entrypoints[fullname] - ) - - def test_impl_exec_imports_skips_when_matching_start(self): - # When foo.start exists, import lines in foo.pth are skipped - # at flush time by _StartupState._exec_imports(). - self._make_start("os.path:join\n", name='foo') - self._make_pth("import sys\n", name='foo') - site.addsitedir( - self.sitedir, set(), - defer_processing_start_files=True, - ) - pth_fullname = os.path.join(self.sitedir, 'foo.pth') - start_fullname = os.path.join(self.sitedir, 'foo.start') - # Import line was collected... - self.assertIn( - 'import sys', - site._startup_state._importexecs.get(pth_fullname, []), + 'os.path:join', state._entrypoints[fullname] ) - # ...but _exec_imports() will skip it because foo.start exists. - site._startup_state._exec_imports() def test_addsitedir_pth_paths_still_work_with_start(self): # Path lines in .pth files still work even when a .start file exists. @@ -1443,99 +1436,129 @@ def test_addsitedir_pth_paths_still_work_with_start(self): os.mkdir(subdir) self._make_start("os.path:join\n", name='foo') self._make_pth("mylib\n", name='foo') - site.addsitedir( - self.sitedir, set(), - defer_processing_start_files=True, - ) + state = site.StartupState(known_paths=set()) + state.addsitedir(self.sitedir) fullname = os.path.join(self.sitedir, 'foo.pth') - self.assertIn( - subdir, site._startup_state._syspaths.get(fullname, []) - ) + self.assertIn((fullname, subdir), state._path_entries) def test_addsitedir_start_alphabetical_order(self): # Multiple .start files are discovered alphabetically. - # _all_entrypoints() reads from self.state, so swap in the - # preserved batch state for the duration of the assertion. self._make_start("os.path:join\n", name='zzz') self._make_start("os.path:exists\n", name='aaa') - site.addsitedir( - self.sitedir, set(), - defer_processing_start_files=True, - ) - self.state = site._startup_state - all_entries = self._all_entrypoints() - entries = [entry for _, entry in all_entries] + state = site.StartupState(known_paths=set()) + state.addsitedir(self.sitedir) + entries = self._just_entrypoints(state) idx_a = entries.index('os.path:exists') idx_z = entries.index('os.path:join') self.assertLess(idx_a, idx_z) - def test_addsitedir_pth_before_start(self): - # PEP 829: .pth files are scanned before .start files. - # Create a .pth and .start with the same basename; verify - # the .pth data is collected before .start data. + def test_addsitedir_pth_and_start(self): + # Create a .pth and .start with the same basename; verify both the + # .pth data and .start data is collected. subdir = os.path.join(self.sitedir, 'mylib') os.mkdir(subdir) self._make_pth("mylib\n", name='foo') self._make_start("os.path:join\n", name='foo') - site.addsitedir( - self.sitedir, set(), - defer_processing_start_files=True, - ) + state = site.StartupState(known_paths=set()) + state.addsitedir(self.sitedir) # Both should be collected. pth_fullname = os.path.join(self.sitedir, 'foo.pth') start_fullname = os.path.join(self.sitedir, 'foo.start') - self.assertIn( - subdir, site._startup_state._syspaths.get(pth_fullname, []) - ) + self.assertIn((pth_fullname, subdir), state._path_entries) self.assertIn( 'os.path:join', - site._startup_state._entrypoints.get(start_fullname, []), + state._entrypoints.get(start_fullname, []), ) def test_impl_addsitedir_skips_dotfile_start(self): - # .start files starting with '.' are skipped. Defer flushing so - # the preserved batch state stays inspectable on - # site._startup_state; otherwise process_startup_files() would - # detach and consume it regardless of whether the dotfile was - # picked up. + # .start files starting with '.' are skipped. + # This will create `.hidden.start`. self._make_start("os.path:join\n", name='.hidden') - site.addsitedir( - self.sitedir, set(), - defer_processing_start_files=True, - ) - self.assertEqual(site._startup_state._entrypoints, {}) + state = site.StartupState(known_paths=set()) + state.addsitedir(self.sitedir) + self.assertEqual(state._entrypoints, {}) def test_addsitedir_standalone_flushes(self): - # When called with defer_processing_start_files=False (the - # default), addsitedir creates a per-call _StartupState and - # processes it before returning, so the caller sees the effect - # immediately. No batch state is left behind on - # site._startup_state. + # Standalone addsitedir creates a per-call StartupState and processes + # it before returning, so the caller sees the effect immediately. subdir = os.path.join(self.sitedir, 'flushlib') os.mkdir(subdir) self._make_pth("flushlib\n", name='foo') - site.addsitedir(self.sitedir) # known_paths=None + # No arguments means state is implied and processing is eager. + site.addsitedir(self.sitedir) self.assertIn(subdir, sys.path) - self.assertIsNone(site._startup_state) - def test_addsitedir_defer_does_not_flush(self): - # With defer_processing_start_files=True, addsitedir accumulates - # pending state but does not flush; sys.path is updated only when - # process_startup_files() is called explicitly. The accumulated - # state lives on the lazily-promoted site._startup_state. + def test_addsitedir_explicit_startup_state_does_not_flush(self): + # With an explicit StartupState, addsitedir accumulates pending state + # but does not flush it; sys.path is updated only when process() is + # called explicitly. subdir = os.path.join(self.sitedir, 'acclib') os.mkdir(subdir) self._make_pth("acclib\n", name='foo') - site.addsitedir( - self.sitedir, set(), - defer_processing_start_files=True, - ) + state = site.StartupState(known_paths=set()) + state.addsitedir(self.sitedir) # Path is pending, not yet on sys.path. self.assertNotIn(subdir, sys.path) fullname = os.path.join(self.sitedir, 'foo.pth') - self.assertIn( - subdir, site._startup_state._syspaths.get(fullname, []) - ) + self.assertIn((fullname, subdir), state._path_entries) + + def test_addsitedir_startup_state_preserves_site_relative_order(self): + # As pointed out by @ncoghlan in + # https://github.com/python/cpython/issues/150228#issuecomment-4528614952 + # a subtle ordering change was inadvertently introduced where the + # interspersing of the sitedirs with the sys.path extensions they defined + # was lost during batch mode. You'd see all the sitedirs, then all path + # extensions. This test ensures that the old interspersing behavior + # has been restored. + # + # Let's start by creating two sitedirs, each with an extension directory + # which will be added to sys.path by .pth files in the respective sitedirs. + sitedir2 = self.enterContext(os_helper.temp_dir()) + extdir1 = os.path.join(self.sitedir, 'ext1') + extdir2 = os.path.join(sitedir2, 'ext2') + os.mkdir(extdir1) + os.mkdir(extdir2) + self._make_pth(extdir1 + "\n", name='one') + self._make_pth(extdir2 + "\n", name='two', basedir=sitedir2) + # Now create an explicit batch, add each sitedir, then process the + # entire batch. + state = site.StartupState(known_paths=set()) + state.addsitedir(self.sitedir) + state.addsitedir(sitedir2) + state.process() + # Ensure that on sys.path we see this interspersed order: + # [sitedir1, extdir1, sitedir2, extdir2] + indexes = [ + sys.path.index(path) + for path in (self.sitedir, extdir1, sitedir2, extdir2) + ] + # If the index ordering is the same, we preserved the intersperse. + self.assertEqual(indexes, sorted(indexes)) + + def test_addsitedir_startup_state_paths_before_entrypoints(self): + # Ensure that sys.path extensions are available by the time + # .start file entry points are called. + extdir = self._make_mod("""\ +called = False +def hook(): + global called + called = True +""") + self.assertNotIn(extdir, sys.path) + self._make_pth("extdir\n", name='extlib') + self._make_start("mod:hook\n", name='extlib') + # Before the startup state is explicitly processed, neither + # the path extension is added, nor the entry point called. + state = site.StartupState(known_paths=set()) + state.addsitedir(self.sitedir) + self.assertNotIn(extdir, sys.path) + self.assertNotIn('mod', sys.modules) + # After processing the batch, sys.path is extended and + # the entry point was called. + state.process() + self.assertIn(extdir, sys.path) + import mod + self.assertTrue(mod.called) def test_pth_path_is_available_to_start_entrypoint(self): # Core PEP 829 invariant: all .pth path extensions are applied to @@ -1640,6 +1663,80 @@ def bootstrap(): self.assertIn(overlay, sys.path) self.assertIn(pkgdir, sys.path) + # gh-149819 + @unittest.skipUnless(site.ENABLE_USER_SITE, "requires user-site") + @support.requires_subprocess() + def test_pth_processed_when_sitedir_already_on_path(self): + # A .pth file in a site-packages directory must still be processed by + # site.main() when that directory is already on sys.path at + # interpreter start up, for example in a subprocess that inherits + # PYTHONPATH from its parent. Before the fix, main() seeded + # known_paths with all entries derived from removeduppaths(), and + # addsitedir() then skipped .pth processing for any directory already + # in known_paths. + user_base = self.tmpdir + user_site = site._get_path(user_base) + os.makedirs(user_site) + sentinel = "GH149819_PTH_RAN" + # Writing some text to stderr is the simplest observable side effect. + self._make_pth(f"""\ +import sys; sys.stderr.write({sentinel!r}); sys.stderr.flush() +""", + name='gh149819', + basedir=user_site) + with EnvironmentVarGuard() as env: + # PYTHONUSERBASE points USER_SITE at our temp directory so + # site.main() will call addsitedir() on it, rather than on the + # host interpreter's real user-site. + env['PYTHONUSERBASE'] = user_base + # PYTHONPATH puts that same directory on sys.path before + # site.main() runs in the subprocess. This is what triggers the + # bug: removeduppaths() records it in known_paths, and the unfixed + # addsitedir() then skips .pth processing. + env['PYTHONPATH'] = user_site + result = subprocess.run( + [sys.executable, '-c', ''], + capture_output=True, + check=True, + ) + self.assertIn(sentinel.encode(), result.stderr) + + @unittest.skipUnless(site.ENABLE_USER_SITE, "requires user-site") + @support.requires_subprocess() + def test_start_processed_when_sitedir_already_on_path(self): + # Companion to test_pth_processed_when_sitedir_already_on_path: + # the same dedup-guard skip in addsitedir() suppressed both .pth + # and .start file processing, so verify .start entry points also + # run for a site-packages directory inherited via PYTHONPATH. + user_base = self.tmpdir + user_site = site._get_path(user_base) + os.makedirs(user_site) + sentinel = "GH149819_START_RAN" + # The .start entry point resolves to a callable, so we write a + # tiny importable module that outputs the sentinel text. It lands in + # /extdir. That path is added to PYTHONPATH below so + # the subprocess can import it. + extdir = self._make_mod(f"""\ +import sys +def run(): + sys.stderr.write({sentinel!r}) + sys.stderr.flush() +""", name='gh149819mod') + self._make_start( + 'gh149819mod:run\n', name='gh149819', basedir=user_site + ) + with EnvironmentVarGuard() as env: + # See above for details. + env['PYTHONUSERBASE'] = user_base + env['PYTHONPATH'] = os.pathsep.join([user_site, extdir]) + result = subprocess.run( + [sys.executable, '-c', ''], + capture_output=True, + check=True, + ) + self.assertIn(sentinel.encode(), result.stderr) + + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 47830d0e964..94325f5a800 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1454,7 +1454,7 @@ def testIPv6toString(self): assertInvalid('1:2:3:4:5:6:') assertInvalid('1:2:3:4:5:6:7:8:0') # bpo-29972: inet_pton() doesn't fail on AIX - if not AIX: + if not AIX and sys.platform != 'cygwin': assertInvalid('1:2:3:4:5:6:7:8:') self.assertEqual(b'\x00' * 12 + b'\xfe\x2a\x17\x40', @@ -2001,7 +2001,8 @@ def test_getfqdn_filter_localhost(self): self.assertEqual(socket.getfqdn(), socket.getfqdn("::")) @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.') - @unittest.skipIf(sys.platform == 'win32', 'does not work on Windows') + @unittest.skipIf(sys.platform in ('win32', 'cygwin'), + 'does not work on Windows') @unittest.skipIf(AIX, 'Symbolic scope id does not work') @unittest.skipUnless(hasattr(socket, 'if_nameindex'), "test needs socket.if_nameindex()") @support.skip_android_selinux('if_nameindex') @@ -2035,7 +2036,7 @@ def test_getaddrinfo_ipv6_scopeid_numeric(self): self.assertEqual(sockaddr, ('ff02::1de:c0:face:8d', 1234, 0, ifindex)) @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.') - @unittest.skipIf(sys.platform == 'win32', 'does not work on Windows') + @unittest.skipIf(sys.platform in ('win32', 'cygwin'), 'does not work on Windows') @unittest.skipIf(AIX, 'Symbolic scope id does not work') @unittest.skipUnless(hasattr(socket, 'if_nameindex'), "test needs socket.if_nameindex()") @support.skip_android_selinux('if_nameindex') @@ -7190,12 +7191,6 @@ def test_aes_cbc(self): @support.requires_linux_version(4, 9) # see gh-73510 def test_aead_aes_gcm(self): - kernel_version = support._get_kernel_version("Linux") - if kernel_version is not None: - if kernel_version >= (6, 16) and kernel_version < (6, 18): - # See https://github.com/python/cpython/issues/139310. - self.skipTest("upstream Linux kernel issue") - key = bytes.fromhex('c939cc13397c1d37de6ae0e1cb7c423c') iv = bytes.fromhex('b3d8cc017cbb89b39e0f67e2') plain = bytes.fromhex('c3b3c41f113a31b73d9a5cd432103069') diff --git a/Lib/test/test_sqlite3/test_factory.py b/Lib/test/test_sqlite3/test_factory.py index 776659e3b16..a9abeab3193 100644 --- a/Lib/test/test_sqlite3/test_factory.py +++ b/Lib/test/test_sqlite3/test_factory.py @@ -146,6 +146,16 @@ def test_sqlite_row_index(self): with self.assertRaises(IndexError): row[complex()] # index must be int or string + def test_delete_connection_row_factory(self): + # gh-149738: deleting row_factory should raise an exception + with self.assertRaises(AttributeError): + del self.con.row_factory + + def test_delete_connection_text_factory(self): + # gh-149738: deleting text_factory should raise an exception + with self.assertRaises(AttributeError): + del self.con.text_factory + def test_sqlite_row_index_unicode(self): row = self.con.execute("select 1 as \xff").fetchone() self.assertEqual(row["\xff"], 1) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index f1f7a07701d..4f998ef2b02 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -638,6 +638,7 @@ def test_refcycle(self): del ss self.assertEqual(wr(), None) + @unittest.skipIf(sys.platform == 'cygwin', 'test hangs on Cygwin') def test_wrapped_unconnected(self): # Methods on an unconnected SSLSocket propagate the original # OSError raise by the underlying socket object. @@ -1606,6 +1607,59 @@ def dummycallback(sock, servername, ctx, cycle=ctx): gc.collect() self.assertIs(wr(), None) + @unittest.skipUnless(support.Py_GIL_DISABLED, + "test is only useful if the GIL is disabled") + @threading_helper.requires_working_threading() + def test_sni_callback_race(self): + # Replacing sni_callback while handshakes are in-flight must not + # crash (use-after-free on the callback in free-threaded builds). + client_ctx, server_ctx, hostname = testing_context() + + server_ctx.sni_callback = lambda *a: None + done = threading.Event() + + def do_handshakes(): + while not done.is_set(): + c_in = ssl.MemoryBIO() + c_out = ssl.MemoryBIO() + s_in = ssl.MemoryBIO() + s_out = ssl.MemoryBIO() + client = client_ctx.wrap_bio( + c_in, c_out, server_hostname=hostname) + server = server_ctx.wrap_bio(s_in, s_out, server_side=True) + for _ in range(50): + try: + client.do_handshake() + except ssl.SSLWantReadError: + pass + except ssl.SSLError: + break + if c_out.pending: + s_in.write(c_out.read()) + try: + server.do_handshake() + except ssl.SSLWantReadError: + pass + except ssl.SSLError: + break + if s_out.pending: + c_in.write(s_out.read()) + + def toggle_callback(): + while not done.is_set(): + server_ctx.sni_callback = lambda *a: None + server_ctx.sni_callback = None + + workers = max(4, (os.cpu_count() or 4) * 2) + threads = [threading.Thread(target=do_handshakes) + for _ in range(workers)] + threads.append(threading.Thread(target=toggle_callback)) + + with threading_helper.catch_threading_exception() as cm: + with threading_helper.start_threads(threads): + done.set() + self.assertIsNone(cm.exc_value) + def test_cert_store_stats(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) self.assertEqual(ctx.cert_store_stats(), @@ -3578,7 +3632,7 @@ def test_wrong_cert_tls13(self): OSError, 'alert unknown ca|EOF occurred|TLSV1_ALERT_UNKNOWN_CA|' 'closed by the remote host|Connection reset by peer|' - 'Broken pipe' + 'Broken pipe|Software caused connection abort' ): # TLS 1.3 perform client cert exchange after handshake s.write(b'data') @@ -4532,6 +4586,8 @@ def test_client_sigalgs_mismatch(self): ssl.SSLError, # On handshake failures, some systems raise a ConnectionResetError. ConnectionResetError, + # On handshake failures, Cygwin raises ConnectionAbortedError. + ConnectionAbortedError, # On handshake failures, macOS may raise a BrokenPipeError. # See https://github.com/python/cpython/issues/139504. BrokenPipeError, @@ -5640,19 +5696,26 @@ def run(self): def non_linux_skip_if_other_okay_error(self, err): if sys.platform in ("linux", "android"): return # Expect the full test setup to always work on Linux. - if (isinstance(err, ConnectionResetError) or + if (isinstance(err, (ConnectionResetError, ConnectionAbortedError)) or (isinstance(err, OSError) and err.errno == errno.EINVAL) or - re.search('wrong.version.number', str(getattr(err, "reason", "")), re.I) or - re.search('record.layer.failure', str(getattr(err, "reason", "")), re.I) + re.search( + # Matches the following error messages: + # '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)' + # '[SSL: RECORD_LAYER_FAILURE] record layer failure (_ssl.c:1109)' + # '[SSL: HTTP_REQUEST] http request (_ssl.c:1143)' + r'wrong.version.number|record.layer.failure|http.request', + str(getattr(err, "reason", "")), + re.IGNORECASE, + ) ): # On Windows the TCP RST leads to a ConnectionResetError # (ECONNRESET) which Linux doesn't appear to surface to userspace. # If wrap_socket() winds up on the "if connected:" path and doing # the actual wrapping... we get an SSLError from OpenSSL. This is # typically WRONG_VERSION_NUMBER. The same happens on iOS, but - # RECORD_LAYER_FAILURE is the error. + # RECORD_LAYER_FAILURE or HTTP_REQUEST is the error. # - # While appropriate, neither is the scenario we're specifically + # While appropriate, these scenarios aren't what we're specifically # trying to test. The way this test is written is known to work on # Linux. We'll skip it anywhere else that it does not present as # doing so. diff --git a/Lib/test/test_stable_abi_ctypes.py b/Lib/test/test_stable_abi_ctypes.py index ac5c4296c66..09ee2d53f98 100644 --- a/Lib/test/test_stable_abi_ctypes.py +++ b/Lib/test/test_stable_abi_ctypes.py @@ -1032,19 +1032,15 @@ def test_windows_feature_macros(self): 'PyOS_CheckStack', ) -EXPECTED_FEATURE_MACROS = set([ - 'HAVE_FORK', - 'MS_WINDOWS', - 'PY_HAVE_THREAD_NATIVE_ID', - 'Py_REF_DEBUG', - 'Py_TRACE_REFS', - 'USE_STACKCHECK', -]) -WINDOWS_FEATURE_MACROS = { - 'HAVE_FORK': False, - 'MS_WINDOWS': True, - 'PY_HAVE_THREAD_NATIVE_ID': True, - 'Py_REF_DEBUG': 'maybe', - 'Py_TRACE_REFS': 'maybe', - 'USE_STACKCHECK': 'maybe', -} +EXPECTED_FEATURE_MACROS = set(['HAVE_FORK', + 'MS_WINDOWS', + 'PY_HAVE_THREAD_NATIVE_ID', + 'Py_REF_DEBUG', + 'Py_TRACE_REFS', + 'USE_STACKCHECK']) +WINDOWS_FEATURE_MACROS = {'HAVE_FORK': False, + 'MS_WINDOWS': True, + 'PY_HAVE_THREAD_NATIVE_ID': True, + 'Py_REF_DEBUG': 'maybe', + 'Py_TRACE_REFS': 'maybe', + 'USE_STACKCHECK': 'maybe'} diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py index 677a87b51b9..700c5ac304f 100644 --- a/Lib/test/test_statistics.py +++ b/Lib/test/test_statistics.py @@ -16,7 +16,8 @@ import sys import unittest from test import support -from test.support import import_helper, requires_IEEE_754 +from test.support import (import_helper, requires_IEEE_754, + skip_if_double_rounding, skip_on_newlib) from decimal import Decimal from fractions import Fraction @@ -28,12 +29,6 @@ # === Helper functions and class === -# Test copied from Lib/test/test_math.py -# detect evidence of double-rounding: fsum is not always correctly -# rounded on machines that suffer from double rounding. -x, y = 1e16, 2.9999 # use temporary values to defeat peephole optimizer -HAVE_DOUBLE_ROUNDING = (x + y == 1e16 + 4) - def sign(x): """Return -1.0 for negatives, including -0.0, otherwise +1.0.""" return math.copysign(1, x) @@ -2796,9 +2791,9 @@ def test_sqrtprod_helper_function_fundamentals(self): self.assertEqual(sign(actual), sign(expected)) @requires_IEEE_754 - @unittest.skipIf(HAVE_DOUBLE_ROUNDING, - "accuracy not guaranteed on machines with double rounding") + @skip_if_double_rounding @support.cpython_only # Allow for a weaker sumprod() implementation + @skip_on_newlib def test_sqrtprod_helper_function_improved_accuracy(self): # Test a known example where accuracy is improved x, y, target = 0.8035720646477457, 0.7957468097636939, 0.7996498651651661 diff --git a/Lib/test/test_strptime.py b/Lib/test/test_strptime.py index 5ac28870455..e95cc6db170 100644 --- a/Lib/test/test_strptime.py +++ b/Lib/test/test_strptime.py @@ -19,6 +19,13 @@ else: glibc_ver = None +def skip_cygwin_locale(): + if sys.platform != 'cygwin': + return + loc = locale.getlocale(locale.LC_TIME)[0] + if loc in ('my_MM', 'or_IN'): + raise unittest.SkipTest('test fails on Cygwin') + class getlang_Tests(unittest.TestCase): """Test _getlang""" @@ -509,6 +516,8 @@ def test_bad_timezone(self): 'my_MM', 'or_IN', 'shn_MM', 'az_IR', 'byn_ER', 'wal_ET', 'lzh_TW') def test_date_time_locale(self): + skip_cygwin_locale() + # Test %c directive loc = locale.getlocale(locale.LC_TIME)[0] if glibc_ver and glibc_ver < (2, 31) and loc == 'br_FR': @@ -536,6 +545,8 @@ def test_date_time_locale(self): 'csb_PL', 'br_FR', 'gez_ET', 'brx_IN', 'my_MM', 'shn_MM') def test_date_time_locale2(self): + skip_cygwin_locale() + # Test %c directive loc = locale.getlocale(locale.LC_TIME)[0] if sys.platform.startswith('sunos'): @@ -550,6 +561,8 @@ def test_date_time_locale2(self): 'he_IL', 'eu_ES', 'ar_AE', 'az_IR', 'my_MM', 'or_IN', 'shn_MM', 'lzh_TW') def test_date_locale(self): + skip_cygwin_locale() + # Test %x directive now = time.time() self.roundtrip('%x', slice(0, 3), time.localtime(now)) @@ -567,6 +580,8 @@ def test_date_locale(self): @run_with_locales('LC_TIME', 'en_US', 'fr_FR', 'de_DE', 'ja_JP', 'eu_ES', 'ar_AE', 'my_MM', 'shn_MM', 'lzh_TW') def test_date_locale2(self): + skip_cygwin_locale() + # Test %x directive loc = locale.getlocale(locale.LC_TIME)[0] if sys.platform.startswith(('sunos', 'aix')): @@ -587,6 +602,8 @@ def test_date_locale2(self): 'ti_ET', 'tig_ER', 'wal_ET', 'lzh_TW', 'ar_SA', 'bg_BG') def test_time_locale(self): + skip_cygwin_locale() + # Test %X directive loc = locale.getlocale(locale.LC_TIME)[0] pos = slice(3, 6) diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 1a3db527d3d..f944084aaa6 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -3765,13 +3765,17 @@ def test_startupinfo_copy(self): self.assertEqual(startupinfo.wShowWindow, subprocess.SW_HIDE) self.assertEqual(startupinfo.lpAttributeList, {"handle_list": []}) + # CREATE_NEW_CONSOLE creates a "popup" window. + @support.requires_resource('gui') def test_creationflags(self): # creationflags argument CREATE_NEW_CONSOLE = 16 sys.stderr.write(" a DOS box should flash briefly ...\n") - subprocess.call(sys.executable + - ' -c "import time; time.sleep(0.25)"', - creationflags=CREATE_NEW_CONSOLE) + rc = subprocess.call(sys.executable + + ' -c "import time; time.sleep(0.25)"', + creationflags=CREATE_NEW_CONSOLE) + support.skip_on_low_desktop_heap_memory_subprocess(rc) + self.assertEqual(rc, 0) def test_invalid_args(self): # invalid arguments should raise ValueError diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py index e6433f76a97..e6f99581f0b 100644 --- a/Lib/test/test_sysconfig.py +++ b/Lib/test/test_sysconfig.py @@ -576,6 +576,12 @@ def test_linux_ext_suffix(self): expected_suffixes = 'x86_64-linux-gnu.so', 'x86_64-linux-musl.so' self.assertEndsWith(suffix, expected_suffixes) + @unittest.skipIf(sysconfig.get_config_var('PY_BUILTIN_HASHLIB_HASHES') is None, + 'PY_BUILTIN_HASHLIB_HASHES required for this test') + def test_PY_BUILTIN_HASHLIB_HASHES_in_vars(self): + vars = sysconfig.get_config_vars() + self.assertFalse(vars['PY_BUILTIN_HASHLIB_HASHES'].startswith('"')) + @unittest.skipUnless(sys.platform == 'android', 'Android-specific test') def test_android_ext_suffix(self): machine = platform.machine() diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 192c948edc6..62a262740a7 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -893,10 +893,39 @@ def test_extractall_hardlink_on_symlink(self): self._assert_on_file_content(hardlink_filepath, sha256_regtype) +class GzipReadTestBase: + + def test_read_with_extra_field(self): + with open(self.tarname, 'rb') as f: + data = bytearray(f.read()) + flags = data[3] + self.assertEqual(flags, 8) + data[3] = flags | 4 + data[10:10] = b'\x05\x00extra' + with open(tmpname, 'wb') as f: + f.write(data) + print(self.mode) + with tarfile.open(tmpname, mode=self.mode): + pass + + def test_read_with_file_comment(self): + with open(self.tarname, 'rb') as f: + data = bytearray(f.read()) + flags = data[3] + self.assertEqual(flags, 8) + data[3] = flags | 16 + i = data.index(0, 10) + 1 + data[i:i] = b'comment\x00' + with open(tmpname, 'wb') as f: + f.write(data) + with tarfile.open(tmpname, mode=self.mode): + pass + + class MiscReadTest(MiscReadTestBase, unittest.TestCase): test_fail_comp = None -class GzipMiscReadTest(GzipTest, MiscReadTestBase, unittest.TestCase): +class GzipMiscReadTest(GzipTest, GzipReadTestBase, MiscReadTestBase, unittest.TestCase): pass class Bz2MiscReadTest(Bz2Test, MiscReadTestBase, unittest.TestCase): @@ -970,7 +999,7 @@ def test_compare_members(self): finally: tar1.close() -class GzipStreamReadTest(GzipTest, StreamReadTest): +class GzipStreamReadTest(GzipTest, GzipReadTestBase, StreamReadTest): pass class Bz2StreamReadTest(Bz2Test, StreamReadTest): @@ -1313,6 +1342,27 @@ def _fs_supports_holes(): else: return False + def test_gnulong_dirname_strips_all_trailing_slashes(self): + # gh-149980: _proc_gnulong must normalize trailing slashes the same + # way _frombuf and _proc_builtin do (rstrip, not removesuffix), so + # a GNU long-name directory entry agrees with a short-name one. + long_name = "a" * 120 + "///" # > 100 bytes => GNUTYPE_LONGNAME + short_name = "b" * 20 + "///" + + buf = io.BytesIO() + with tarfile.open(fileobj=buf, mode="w", + format=tarfile.GNU_FORMAT) as tar: + for name in (short_name, long_name): + info = tarfile.TarInfo(name=name) + info.type = tarfile.DIRTYPE + tar.addfile(info) + + buf.seek(0) + with tarfile.open(fileobj=buf, mode="r") as tar: + names = [m.name for m in tar.getmembers()] + + self.assertEqual(names, ["b" * 20, "a" * 120]) + class PaxReadTest(LongnameTest, ReadTest, unittest.TestCase): @@ -3205,7 +3255,11 @@ def root_is_uid_gid_0(): import pwd, grp except ImportError: return False - if pwd.getpwuid(0)[0] != 'root': + try: + if pwd.getpwuid(0)[0] != 'root': + return False + except KeyError: + # On Cygwin, there is no root user (uid 0) return False if grp.getgrgid(0)[0] != 'root': return False @@ -3985,6 +4039,9 @@ def test_realpath_limit_attack(self): check_flag=False)): if sys.platform == 'win32': self.expect_exception((FileNotFoundError, FileExistsError)) + elif sys.platform == 'cygwin': + exc = self.expect_exception(OSError) + self.assertEqual(exc.errno, errno.ELOOP) elif self.raised_exception: # Cannot symlink/hardlink: tarfile falls back to getmember() self.expect_exception(KeyError) @@ -4006,7 +4063,8 @@ def test_realpath_limit_attack(self): # 206: ERROR_FILENAME_EXCED_RANGE self.assertIn(exc.winerror, (3, 5, 206)) else: - self.assertEqual(exc.errno, errno.ENAMETOOLONG) + self.assertIn(exc.errno, + (errno.ENAMETOOLONG, errno.ELOOP)) @symlink_test def test_parent_symlink2(self): diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py index 47450d3fd59..70731d3222c 100644 --- a/Lib/test/test_tcl.py +++ b/Lib/test/test_tcl.py @@ -54,7 +54,11 @@ def test_eval_null_in_result(self): def test_eval_surrogates_in_result(self): tcl = self.interp - self.assertEqual(tcl.eval(r'set a "<\ud83d\udcbb>"'), '<\U0001f4bb>') + result = tcl.eval(r'set a "<\ud83d\udcbb>"') + if sys.platform == 'win32' and tcl_version >= (9, 0): + self.assertEqual('<\ud83d\udcbb>', result) + else: + self.assertEqual('<\U0001f4bb>', result) def testEvalException(self): tcl = self.interp @@ -289,7 +293,11 @@ def test_evalfile_surrogates_in_result(self): set b "<\\ud83d\\udcbb>" """) tcl.evalfile(filename) - self.assertEqual(tcl.eval('set b'), '<\U0001f4bb>') + result = tcl.eval('set b') + if sys.platform == 'win32' and tcl_version >= (9, 0): + self.assertEqual('<\ud83d\udcbb>', result) + else: + self.assertEqual('<\U0001f4bb>', result) def testEvalFileException(self): tcl = self.interp diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py index b2b5390af33..3b081ecd4a3 100644 --- a/Lib/test/test_tempfile.py +++ b/Lib/test/test_tempfile.py @@ -332,7 +332,9 @@ def test_read_only_directory(self): with _inside_empty_temp_dir(): probe = os.path.join(tempfile.tempdir, 'probe') if os.name == 'nt': - cmd = ['icacls', tempfile.tempdir, '/deny', 'Everyone:(W)'] + # Use security identifier *S-1-1-0 instead + # of localized "Everyone" to not depend on the locale. + cmd = ['icacls', tempfile.tempdir, '/deny', '*S-1-1-0:(W)'] stdout = None if support.verbose > 1 else subprocess.DEVNULL subprocess.run(cmd, check=True, stdout=stdout) else: @@ -355,7 +357,9 @@ def test_read_only_directory(self): self.make_temp() finally: if os.name == 'nt': - cmd = ['icacls', tempfile.tempdir, '/grant:r', 'Everyone:(M)'] + # Use security identifier *S-1-1-0 instead + # of localized "Everyone" to not depend on the locale. + cmd = ['icacls', tempfile.tempdir, '/grant:r', '*S-1-1-0:(M)'] subprocess.run(cmd, check=True, stdout=stdout) else: os.chmod(tempfile.tempdir, oldmode) @@ -511,6 +515,8 @@ def test_noinherit(self): self.assertFalse(retval > 0, "child process reports failure %d"%retval) @unittest.skipUnless(has_textmode, "text mode not available") + @unittest.skipIf(sys.platform == "cygwin", + "truncate text mode is not supported on Cygwin") def test_textmode(self): # _mkstemp_inner can create files in text mode diff --git a/Lib/test/test_termios.py b/Lib/test/test_termios.py index ce8392a6ccd..3dcf5bd1379 100644 --- a/Lib/test/test_termios.py +++ b/Lib/test/test_termios.py @@ -1,3 +1,4 @@ +import contextlib import errno import os import sys @@ -11,6 +12,19 @@ termios = import_module('termios') +# Skip the test on ENOTTY error +@contextlib.contextmanager +def skip_enotty_error(testcase, func, platforms): + try: + yield + except termios.error as exc: + if (exc.args[0] == errno.ENOTTY + and sys.platform.startswith(platforms)): + testcase.skipTest(f'termios.{func}() is not supported ' + f'with pseudo-terminals (?) on {sys.platform}') + raise + + @unittest.skipUnless(hasattr(os, 'openpty'), "need os.openpty()") class TestFunctions(unittest.TestCase): @@ -90,7 +104,8 @@ def test_tcsetattr_errors(self): self.assertRaises(TypeError, termios.tcsetattr, self.fd, termios.TCSANOW, attrs2) self.assertRaises(TypeError, termios.tcsetattr, self.fd, termios.TCSANOW, object()) self.assertRaises(TypeError, termios.tcsetattr, self.fd, termios.TCSANOW) - self.assertRaisesTermiosError(errno.EINVAL, termios.tcsetattr, self.fd, -1, attrs) + if sys.platform != 'cygwin': + self.assertRaisesTermiosError(errno.EINVAL, termios.tcsetattr, self.fd, -1, attrs) self.assertRaises(OverflowError, termios.tcsetattr, self.fd, 2**1000, attrs) self.assertRaises(TypeError, termios.tcsetattr, self.fd, object(), attrs) self.assertRaisesTermiosError(errno.ENOTTY, termios.tcsetattr, self.bad_fd, termios.TCSANOW, attrs) @@ -101,14 +116,10 @@ def test_tcsetattr_errors(self): @support.skip_android_selinux('tcsendbreak') def test_tcsendbreak(self): - try: + with skip_enotty_error(self, 'tcsendbreak', + ('freebsd', 'netbsd', 'cygwin')): termios.tcsendbreak(self.fd, 1) - except termios.error as exc: - if exc.args[0] == errno.ENOTTY and sys.platform.startswith(('freebsd', "netbsd")): - self.skipTest('termios.tcsendbreak() is not supported ' - 'with pseudo-terminals (?) on this platform') - raise - termios.tcsendbreak(self.stream, 1) + termios.tcsendbreak(self.stream, 1) @support.skip_android_selinux('tcsendbreak') def test_tcsendbreak_errors(self): @@ -123,8 +134,9 @@ def test_tcsendbreak_errors(self): @support.skip_android_selinux('tcdrain') def test_tcdrain(self): - termios.tcdrain(self.fd) - termios.tcdrain(self.stream) + with skip_enotty_error(self, 'tcdrain', ('cygwin',)): + termios.tcdrain(self.fd) + termios.tcdrain(self.stream) @support.skip_android_selinux('tcdrain') def test_tcdrain_errors(self): @@ -149,6 +161,7 @@ def test_tcflush_errors(self): self.assertRaises(TypeError, termios.tcflush, object(), termios.TCIFLUSH) self.assertRaises(TypeError, termios.tcflush, self.fd) + @unittest.skipIf(sys.platform == 'cygwin', 'test fails on Cygwin') def test_tcflush_clear_input_or_output(self): wfd = self.fd rfd = self.master_fd @@ -176,14 +189,16 @@ def test_tcflush_clear_input_or_output(self): @support.skip_android_selinux('tcflow') def test_tcflow(self): - termios.tcflow(self.fd, termios.TCOOFF) - termios.tcflow(self.fd, termios.TCOON) - termios.tcflow(self.fd, termios.TCIOFF) - termios.tcflow(self.fd, termios.TCION) + with skip_enotty_error(self, 'tcflow', ('cygwin',)): + termios.tcflow(self.fd, termios.TCOOFF) + termios.tcflow(self.fd, termios.TCOON) + termios.tcflow(self.fd, termios.TCIOFF) + termios.tcflow(self.fd, termios.TCION) @support.skip_android_selinux('tcflow') def test_tcflow_errors(self): - self.assertRaisesTermiosError(errno.EINVAL, termios.tcflow, self.fd, -1) + if sys.platform != 'cygwin': + self.assertRaisesTermiosError(errno.EINVAL, termios.tcflow, self.fd, -1) self.assertRaises(OverflowError, termios.tcflow, self.fd, 2**1000) self.assertRaises(TypeError, termios.tcflow, self.fd, object()) self.assertRaisesTermiosError(errno.ENOTTY, termios.tcflow, self.bad_fd, termios.TCOON) diff --git a/Lib/test/test_tkinter/test_misc.py b/Lib/test/test_tkinter/test_misc.py index f017e94a8b3..2dc3bdfcec4 100644 --- a/Lib/test/test_tkinter/test_misc.py +++ b/Lib/test/test_tkinter/test_misc.py @@ -1,5 +1,7 @@ import collections.abc import functools +import platform +import sys import unittest import tkinter from tkinter import TclError @@ -578,12 +580,27 @@ def test_wm_attribute(self): def test_wm_iconbitmap(self): t = tkinter.Toplevel(self.root) + patchlevel = get_tk_patchlevel(t) + + if ( + t._windowingsystem == 'aqua' + and sys.platform == 'darwin' + and platform.machine() == 'x86_64' + and platform.mac_ver()[0].startswith('26.') + and ( + patchlevel[:3] <= (8, 6, 17) + or (9, 0) <= patchlevel[:3] <= (9, 0, 3) + ) + ): + # https://github.com/python/cpython/issues/146531 + # Tk bug 4a2070f0d3a99aa412bc582d386d575ca2f37323 + self.skipTest('wm iconbitmap hangs on macOS 26 Intel') + self.assertEqual(t.wm_iconbitmap(), '') t.wm_iconbitmap('hourglass') bug = False if t._windowingsystem == 'aqua': # Tk bug 13ac26b35dc55f7c37f70b39d59d7ef3e63017c8. - patchlevel = get_tk_patchlevel(t) if patchlevel < (8, 6, 17) or (9, 0) <= patchlevel < (9, 0, 2): bug = True if not bug: diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index bb64153b91c..7dc3364561d 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -4637,6 +4637,9 @@ def test_cross_language_mutable_on_immutable(self): (frozenset, 'remove', "Did you mean to use a 'set' object?"), (frozenset, 'update', "Did you mean to use a 'set' object?"), (frozendict, 'update', "Did you mean to use a 'dict' object?"), + (tuple, 'clear', "Did you mean to use a 'list' object?"), + (frozenset, 'clear', "Did you mean to use a 'set' object?"), + (frozendict, 'clear', "Did you mean to use a 'dict' object?"), ] for test_type, attr, expected in cases: with self.subTest(type=test_type.__name__, attr=attr): diff --git a/Lib/test/test_type_annotations.py b/Lib/test/test_type_annotations.py index d459f497e33..b751f825bb9 100644 --- a/Lib/test/test_type_annotations.py +++ b/Lib/test/test_type_annotations.py @@ -485,6 +485,13 @@ def test_comprehension_in_annotation(self): ns = run_code("x: [y for y in range(10)]") self.assertEqual(ns["__annotate__"](1), {"x": list(range(10))}) + def test_class_annotation_dunder_classdict(self): + ns = run_code(""" + class C: + __classdict__: int + """) + self.assertEqual(ns["C"].__annotations__, {"__classdict__": int}) + def test_future_annotations(self): code = """ from __future__ import annotations diff --git a/Lib/test/test_type_cache.py b/Lib/test/test_type_cache.py index 22ad9f6243e..849a2afd8ed 100644 --- a/Lib/test/test_type_cache.py +++ b/Lib/test/test_type_cache.py @@ -1,4 +1,5 @@ """ Tests for the internal type cache in CPython. """ +import collections.abc import dis import unittest import warnings @@ -114,6 +115,25 @@ class HolderSub(Holder): Holder.set_value() HolderSub.value + def test_abc_register_invalidates_subclass_versions(self): + class Parent: + pass + + class Child(Parent): + pass + + type_assign_version(Parent) + type_assign_version(Child) + parent_version = type_get_version(Parent) + child_version = type_get_version(Child) + if parent_version == 0 or child_version == 0: + self.skipTest("Could not assign valid type versions") + + collections.abc.Mapping.register(Parent) + + self.assertEqual(type_get_version(Parent), 0) + self.assertEqual(type_get_version(Child), 0) + @support.cpython_only class TypeCacheWithSpecializationTests(unittest.TestCase): def tearDown(self): diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py index 8ecb0df2f8e..ad25be3da8c 100644 --- a/Lib/test/test_unicodedata.py +++ b/Lib/test/test_unicodedata.py @@ -616,6 +616,34 @@ def test_issue10254(self): b = 'C\u0338' * 20 + '\xC7' self.assertEqual(self.db.normalize('NFC', a), b) + def test_long_combining_mark_run(self): + # gh-149079: avoid quadratic canonical ordering. + payload = "a" + ("\u0300\u0327" * 32) + nfd = "a" + ("\u0327" * 32) + ("\u0300" * 32) + nfc = "\u00e0" + ("\u0327" * 32) + ("\u0300" * 31) + + self.assertEqual(self.db.normalize("NFD", payload), nfd) + self.assertEqual(self.db.normalize("NFKD", payload), nfd) + self.assertEqual(self.db.normalize("NFC", payload), nfc) + self.assertEqual(self.db.normalize("NFKC", payload), nfc) + + def test_combining_mark_run_fast_paths(self): + # gh-149079: cover short runs and already-sorted long runs. + short_payload = "a" + ("\u0300\u0327" * 9) + "\u0300" + short_nfd = "a" + ("\u0327" * 9) + ("\u0300" * 10) + short_nfc = "\u00e0" + ("\u0327" * 9) + ("\u0300" * 9) + long_sorted = "a" + ("\u0327" * 30) + ("\u0300" * 30) + long_sorted_nfc = "\u00e0" + ("\u0327" * 30) + ("\u0300" * 29) + + self.assertEqual(self.db.normalize("NFD", short_payload), short_nfd) + self.assertEqual(self.db.normalize("NFKD", short_payload), short_nfd) + self.assertEqual(self.db.normalize("NFC", short_payload), short_nfc) + self.assertEqual(self.db.normalize("NFKC", short_payload), short_nfc) + self.assertEqual(self.db.normalize("NFD", long_sorted), long_sorted) + self.assertEqual(self.db.normalize("NFKD", long_sorted), long_sorted) + self.assertEqual(self.db.normalize("NFC", long_sorted), long_sorted_nfc) + self.assertEqual(self.db.normalize("NFKC", long_sorted), long_sorted_nfc) + def test_issue29456(self): # Fix #29456 u1176_str_a = '\u1100\u1176\u11a8' @@ -1106,6 +1134,22 @@ def test_failed_import_during_compiling(self): "(can't load unicodedata module)" self.assertIn(error, result.err.decode("ascii")) + def test_unicodedata_unload_reload(self): + # gh-149449: dropping unicodedata and running gc must not leave the + # cached _ucnhash_CAPI pointer dangling. + code = ( + "import gc, sys\n" + "assert '\\N{GRINNING FACE}'.encode(" + " 'ascii', errors='namereplace') == b'\\\\N{GRINNING FACE}'\n" + "compile(r\"x = '\\\\N{LATIN CAPITAL LETTER A}'\", '', 'exec')\n" + "del sys.modules['unicodedata']\n" + "gc.collect()\n" + "assert '\\N{WINKING FACE}'.encode(" + " 'ascii', errors='namereplace') == b'\\\\N{WINKING FACE}'\n" + "compile(r\"x = '\\\\N{LATIN CAPITAL LETTER B}'\", '', 'exec')\n" + ) + script_helper.assert_python_ok("-c", code) + def test_decimal_numeric_consistent(self): # Test that decimal and numeric are consistent, # i.e. if a character has a decimal value, diff --git a/Lib/test/test_unittest/testmock/testhelpers.py b/Lib/test/test_unittest/testmock/testhelpers.py index f8643552011..0e82c723ec3 100644 --- a/Lib/test/test_unittest/testmock/testhelpers.py +++ b/Lib/test/test_unittest/testmock/testhelpers.py @@ -1162,7 +1162,9 @@ def test_call_list_str(self): mock.foo.bar().baz('fish', cat='dog') expected = ( - "[call(1, 2), call.foo(a=3), call.foo.bar()," + "[call(1, 2),\n" + " call.foo(a=3),\n" + " call.foo.bar(),\n" " call.foo.bar().baz('fish', cat='dog')]" ) self.assertEqual(str(mock.mock_calls), expected) diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index a42787f261b..1ff5d7cf0c5 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -301,9 +301,9 @@ def test_sysconfig(self): self.assertEqual(out.strip(), expected, err) for attr, expected in ( ('executable', self.envpy()), - # Usually compare to sys.executable, but if we're running in our own - # venv then we really need to compare to our base executable - ('_base_executable', sys._base_executable), + # Usually compare to sys.prefix, but if we're running in our own + # venv then we really need to compare to our base prefix + ('base_prefix', sys.base_prefix), ): with self.subTest(attr): cmd[2] = f'import sys; print(sys.{attr})' @@ -500,6 +500,7 @@ def test_executable_symlinks(self): # gh-124651: test quoted strings @unittest.skipIf(os.name == 'nt', 'contains invalid characters on Windows') + @unittest.skipIf(sys.platform == 'cygwin', 'fail to locate cygpython DLL') def test_special_chars_bash(self): """ Test that the template strings are quoted properly (bash) @@ -714,6 +715,12 @@ def test_zippath_from_non_installed_posix(self): os.mkdir(bindir) python_exe = os.path.basename(sys.executable) shutil.copy2(sys.executable, os.path.join(bindir, python_exe)) + if sys.platform == 'cygwin': + # Copy libpython DLL + exe_path = os.path.dirname(sys.executable) + libpython_dll = sysconfig.get_config_var('DLLLIBRARY') + shutil.copy2(os.path.join(exe_path, libpython_dll), + os.path.join(bindir, libpython_dll)) libdir = os.path.join(non_installed_dir, platlibdir, self.lib[1]) os.makedirs(libdir) landmark = os.path.join(libdir, "os.py") @@ -916,10 +923,10 @@ def test_venvwlauncher(self): exename = exename.replace("python", "pythonw") envpyw = os.path.join(self.env_dir, self.bindir, exename) try: - subprocess.check_call([envpyw, "-c", "import sys; " - "assert sys._base_executable.endswith('%s')" % exename]) + subprocess.check_call([envpyw, "-c", "import fnmatch, sys; " + "assert fnmatch.fnmatch(sys._base_executable, '**/pythonw*.exe')"]) except subprocess.CalledProcessError: - self.fail("venvwlauncher.exe did not run %s" % exename) + self.fail("venvwlauncher.exe did not run pythonw.exe") @requireVenvCreate diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 3a41ea97a2e..acec4ec2ca2 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -1008,6 +1008,8 @@ def check(encoding, body=''): check("iso-8859-15", '\u20ac') check("cp437", '\u221a') check("mac-roman", '\u02da') + check('shift-jis-2004', '\u203e\u3406\uff66') + check('euc-jis-2004', '\u3406\uff66') def xml(encoding, body=''): return "%s" % (encoding, body) @@ -1026,6 +1028,12 @@ def bxml(encoding, body=''): 'mac-cyrillic', 'mac-greek', 'mac-iceland', 'mac-latin2', 'mac-roman', 'mac-turkish', 'koi8-r', 'koi8-t', 'koi8-u', 'kz1048', 'ptcp154', + 'big5', 'big5hkscs', + 'cp932', 'cp949', 'cp950', + 'euc-jp', 'euc-jis-2004', 'euc-jisx0213', + 'gb2312', 'gbk', 'johab', + 'shift-jis', 'shift-jis-2004', 'shift-jisx0213', + 'utf-8-sig', 'utf8', ] for encoding in supported_encodings: with self.subTest(encoding=encoding): @@ -1035,12 +1043,10 @@ def bxml(encoding, body=''): ('&#%d;' % ord(c)).encode()) unsupported_ascii_compatible_encodings = [ - 'big5', 'big5hkscs', - 'cp932', 'cp949', 'cp950', - 'euc-jp', 'euc-jis-2004', 'euc-jisx0213', 'euc-kr', - 'gb2312', 'gbk', 'gb18030', - 'iso2022-kr', 'johab', - 'shift-jis', 'shift-jis-2004', 'shift-jisx0213', + 'euc-kr', 'gb18030', + 'iso2022-jp', 'iso2022-jp-1', 'iso2022-jp-2', 'iso2022-jp-2004', + 'iso2022-jp-3', 'iso2022-jp-ext', + 'iso2022-kr', 'hz', 'utf-7', ] for encoding in unsupported_ascii_compatible_encodings: @@ -1058,6 +1064,17 @@ def bxml(encoding, body=''): self.assertRaises(ValueError, ET.XML, xml('undefined').encode('ascii')) self.assertRaises(LookupError, ET.XML, xml('xxx').encode('ascii')) + @support.subTests('sample,exception', [ + (b' \xa1', UnicodeDecodeError), # crashed + (b' \xa1 \xa1', None), # ET.ParseError + ]) + def test_multibyte_encoding_errors(self, sample, exception): + exception = exception or ET.ParseError + data = b'\n' + sample + with self.assertRaises(exception): + ET.XML(data) + def test_methods(self): # Test serialization methods. @@ -1281,7 +1298,15 @@ def check(p, expected, namespaces=None): {'': 'http://www.w3.org/2001/XMLSchema', 'ns': 'http://www.w3.org/2001/XMLSchema'}) - def test_processinginstruction(self): + def test_comment_serialization(self): + comm = ET.Comment(' & ham') + # comments are not escaped + self.assertEqual(ET.tostring(comm), b'') + self.assertEqual(ET.tostring(comm, method='html'), b'') + # no comments in text serialization + self.assertEqual(ET.tostring(comm, method='text'), b'') + + def test_processinginstruction_serialization(self): # Test ProcessingInstruction directly self.assertEqual(ET.tostring(ET.ProcessingInstruction('test', 'instruction')), @@ -1290,12 +1315,32 @@ def test_processinginstruction(self): b'') # Issue #2746 - + # processing instructions are not escaped self.assertEqual(ET.tostring(ET.PI('test', '')), b'?>') self.assertEqual(ET.tostring(ET.PI('test', '\xe3'), 'latin-1'), b"\n" b"\xe3?>") + pi = ET.PI('test', 'ham & eggs < spam') + self.assertEqual(ET.tostring(pi), b'') + self.assertEqual(ET.tostring(pi, method='html'), b'') + # no processing instructions in text serialization + self.assertEqual(ET.tostring(pi, method='text'), b'') + + def test_empty_attribute_serialization(self): + # empty attrs only work in html + elem = ET.Element('tag', attrib={'attr': None}) + self.assertRaises(TypeError, ET.tostring, elem) + self.assertEqual(ET.tostring(elem, method='html'), b'') + + @support.subTests('tag', ("script", "style", "xmp", "iframe", "noembed", "noframes")) + def test_html_cdata_elems_serialization(self, tag): + # content of raw text elements is not escaped in html + tag = tag.title() + elem = ET.Element(tag) + elem.text = '&ham' + self.assertEqual(ET.tostring(elem, method='html'), + ('<%s>&ham' % (tag, tag)).encode()) def test_html_empty_elems_serialization(self): # issue 15970 @@ -1311,6 +1356,14 @@ def test_html_empty_elems_serialization(self): method='html') self.assertEqual(serialized, expected) + def test_html_plaintext_serialization(self): + # content of plaintext is not escaped in html + # no end tag for plaintext + elem = ET.Element('PlainText') + elem.text = '&ham' + self.assertEqual(ET.tostring(elem, method='html'), + b'

<spam>&ham') + def test_dump_attribute_order(self): # See BPO 34160 e = ET.Element('cirriculum', status='public', company='example') @@ -3657,6 +3710,32 @@ def test_basic(self): doc = ET.XML("<root>a&amp;<sub>b&amp;</sub>c&amp;</root>") self.assertEqual(''.join(doc.itertext()), 'a&b&c&') + def test_comment(self): + e = ET.Element('root') + e.text = 'before' + comment = ET.Comment('comment') + self.assertEqual(comment.text, 'comment') + comment.tail = 'after' + e.append(comment) + self.assertEqual(''.join(e.itertext()), 'beforeafter') + self.assertEqual(list(e.iter()), [e, comment]) + self.assertEqual(list(e.iter('root')), [e]) + self.assertEqual(''.join(comment.itertext()), '') + self.assertEqual(list(comment.iter()), [comment]) + + def test_processinginstruction(self): + e = ET.Element('root') + e.text = 'before' + pi = ET.PI('test', 'instruction') + self.assertEqual(pi.text, 'test instruction') + pi.tail = 'after' + e.append(pi) + self.assertEqual(''.join(e.itertext()), 'beforeafter') + self.assertEqual(list(e.iter()), [e, pi]) + self.assertEqual(list(e.iter('root')), [e]) + self.assertEqual(''.join(pi.itertext()), '') + self.assertEqual(list(pi.iter()), [pi]) + def test_corners(self): # single root, no subelements a = ET.Element('a') diff --git a/Lib/test/test_zipfile/test_core.py b/Lib/test/test_zipfile/test_core.py index 0d407371f40..ffed328b171 100644 --- a/Lib/test/test_zipfile/test_core.py +++ b/Lib/test/test_zipfile/test_core.py @@ -1886,11 +1886,8 @@ def test_write_with_source_date_epoch(self): with zipfile.ZipFile(TESTFN, "r") as zf: zip_info = zf.getinfo("test_source_date_epoch.txt") - get_time = time.localtime(int(os.environ['SOURCE_DATE_EPOCH']))[:6] - # Compare each element of the date_time tuple - # Allow for a 1-second difference - for z_time, g_time in zip(zip_info.date_time, get_time): - self.assertAlmostEqual(z_time, g_time, delta=1) + expected_utc = (2025, 1, 1, 7, 19, 58) + self.assertEqual(zip_info.date_time, expected_utc) def test_write_without_source_date_epoch(self): with os_helper.EnvironmentVarGuard() as env: @@ -1901,9 +1898,13 @@ def test_write_without_source_date_epoch(self): with zipfile.ZipFile(TESTFN, "r") as zf: zip_info = zf.getinfo("test_no_source_date_epoch.txt") - current_time = time.localtime()[:6] - for z_time, c_time in zip(zip_info.date_time, current_time): - self.assertAlmostEqual(z_time, c_time, delta=2) + self.assertTimestampAlmostEqual(time.localtime(), zip_info.date_time, tolerance=2) + + def assertTimestampAlmostEqual(self, time1, time2, tolerance): + import datetime + dt1 = datetime.datetime(*time1[:6]) + dt2 = datetime.datetime(*time2[:6]) + self.assertLessEqual((dt1 - dt2).total_seconds(), tolerance) def test_close(self): """Check that the zipfile is closed after the 'with' block.""" @@ -3639,29 +3640,23 @@ def test_read_with_unsuitable_metadata_encoding(self): def test_read_after_append(self): newname = '\u56db' # Han 'four' - expected_names = [name.encode('shift_jis').decode('cp437') - for name in self.file_names[:2]] + self.file_names[2:] - expected_names.append(newname) - expected_content = (*self.file_content, b"newcontent") + newname2 = 'fünf' # representable in cp437, but still stored as UTF-8 + expected_names = [*self.file_names, newname, newname2] + mojibake_expected_names = [name.encode('shift_jis').decode('cp437') + if i < 2 else name + for i, name in enumerate(expected_names)] + expected_content = (*self.file_content, b"newcontent", b"newcontent2") with zipfile.ZipFile(TESTFN, "a") as zipfp: zipfp.writestr(newname, "newcontent") - self.assertEqual(sorted(zipfp.namelist()), sorted(expected_names)) + zipfp.writestr(newname2, "newcontent2") + self.assertEqual(sorted(zipfp.namelist()), sorted(mojibake_expected_names)) with zipfile.ZipFile(TESTFN, "r") as zipfp: - self._test_read(zipfp, expected_names, expected_content) + self._test_read(zipfp, mojibake_expected_names, expected_content) with zipfile.ZipFile(TESTFN, "r", metadata_encoding='shift_jis') as zipfp: - self.assertEqual(sorted(zipfp.namelist()), sorted(expected_names)) - for i, (name, content) in enumerate(zip(expected_names, expected_content)): - info = zipfp.getinfo(name) - self.assertEqual(info.filename, name) - self.assertEqual(info.file_size, len(content)) - if i < 2: - with self.assertRaises(zipfile.BadZipFile): - zipfp.read(name) - else: - self.assertEqual(zipfp.read(name), content) + self._test_read(zipfp, expected_names, expected_content) def test_write_with_metadata_encoding(self): ZF = zipfile.ZipFile @@ -3670,6 +3665,20 @@ def test_write_with_metadata_encoding(self): "^metadata_encoding is only"): ZF("nonesuch.zip", mode, metadata_encoding="shift_jis") + def test_add_comment(self): + with zipfile.ZipFile(TESTFN, "r") as zipfp: + mojibake_expected_names = zipfp.namelist() + + with zipfile.ZipFile(TESTFN, "a") as zipfp: + zipfp.comment = b'comment' + self.assertEqual(zipfp.namelist(), mojibake_expected_names) + + with zipfile.ZipFile(TESTFN, "r") as zipfp: + self._test_read(zipfp, mojibake_expected_names, self.file_content) + + with zipfile.ZipFile(TESTFN, "r", metadata_encoding='shift_jis') as zipfp: + self._test_read(zipfp, self.file_names, self.file_content) + def test_cli_with_metadata_encoding(self): errmsg = "Non-conforming encodings not supported with -c." args = ["--metadata-encoding=shift_jis", "-c", "nonesuch", "nonesuch"] diff --git a/Lib/test/tokenizedata/coding20731.py b/Lib/test/tokenizedata/coding20731.py index ca4962ee8ef..b0e227ad110 100644 --- a/Lib/test/tokenizedata/coding20731.py +++ b/Lib/test/tokenizedata/coding20731.py @@ -1,4 +1,4 @@ -#coding:latin1 - - - +#coding:latin1 + + + diff --git a/Lib/test/xmltestdata/expat224_utf8_bug.xml b/Lib/test/xmltestdata/expat224_utf8_bug.xml index 7880d96a979..d66a8e6b50f 100644 --- a/Lib/test/xmltestdata/expat224_utf8_bug.xml +++ b/Lib/test/xmltestdata/expat224_utf8_bug.xml @@ -1,2 +1,2 @@ -<a b='01234567890123456古人咏雪抽幽思骋妍辞竞险韵偶得一编奇绝辄擅美当时流声后代是以北门之风南山之雅梁园之简黄台之赋至今为作家称述尚矣及至洛阳之卧剡溪之兴灞桥之思亦皆传为故事钱塘沈履德先生隐居西湖两峰间孤高贞洁与雪同调方大雪满天皴肤粟背之际先生乃鹿中豹舄端居闭门或扶童曳杖踏遍六桥三竺时取古人诗讽咏之合唐宋元诸名家集句成诗得二百四十章联络通穿如出一人如呵一气气立于言表格备于篇中略无掇拾补凑之形非胸次包罗壮阔笔底驱走鲍谢欧苏诸公不能为此世称王荆公为集句擅长观其在钟山对雪仅题数篇未见有此噫嘻奇矣哉亦富矣哉予慕先生有袁安之节愧不能为慧可之立乃取新集命工传写使海内同好者知先生为博古传述之士而一新世人之耳目他日必有慕潜德阐幽光而剞劂以传者余实为之执殳矣 -弘治戊午仲冬望日慈溪杨子器衵于海虞官舍序毕诗部' /> +<a b='01234567890123456古人咏雪抽幽思骋妍辞竞险韵偶得一编奇绝辄擅美当时流声后代是以北门之风南山之雅梁园之简黄台之赋至今为作家称述尚矣及至洛阳之卧剡溪之兴灞桥之思亦皆传为故事钱塘沈履德先生隐居西湖两峰间孤高贞洁与雪同调方大雪满天皴肤粟背之际先生乃鹿中豹舄端居闭门或扶童曳杖踏遍六桥三竺时取古人诗讽咏之合唐宋元诸名家集句成诗得二百四十章联络通穿如出一人如呵一气气立于言表格备于篇中略无掇拾补凑之形非胸次包罗壮阔笔底驱走鲍谢欧苏诸公不能为此世称王荆公为集句擅长观其在钟山对雪仅题数篇未见有此噫嘻奇矣哉亦富矣哉予慕先生有袁安之节愧不能为慧可之立乃取新集命工传写使海内同好者知先生为博古传述之士而一新世人之耳目他日必有慕潜德阐幽光而剞劂以传者余实为之执殳矣 +弘治戊午仲冬望日慈溪杨子器衵于海虞官舍序毕诗部' /> diff --git a/Lib/traceback.py b/Lib/traceback.py index 88529e1c259..614a12f69b3 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -115,10 +115,10 @@ def extract_tb(tb, limit=None): This is useful for alternate formatting of stack traces. If 'limit' is omitted or None, all entries are extracted. A pre-processed stack trace entry is a FrameSummary object - containing attributes filename, lineno, name, and line - representing the information that is usually printed for a stack - trace. The line is a string with leading and trailing - whitespace stripped; if the source is not available it is None. + representing the information that is usually printed for a + stack trace. The line attribute is a string with + leading and trailing whitespace stripped; if the source is not + available the corresponding attribute is None. """ return StackSummary._extract_from_extended_frame_gen( _walk_tb_with_full_positions(tb), limit=limit) @@ -295,9 +295,8 @@ def extract_stack(f=None, limit=None): The return value has the same format as for extract_tb(). The optional 'f' and 'limit' arguments have the same meaning as for - print_stack(). Each item in the list is a quadruple (filename, - line number, function name, text), and the entries are in order - from oldest to newest stack frame. + print_stack(). Each item in the list is a FrameSummary object, + and the entries are in order from oldest to newest stack frame. """ if f is None: f = sys._getframe().f_back @@ -325,7 +324,7 @@ class FrameSummary: active when the frame was captured. - :attr:`name` The name of the function or method that was executing when the frame was captured. - - :attr:`line` The text from the linecache module for the + - :attr:`line` The text from the linecache module for the line of code that was running when the frame was captured. - :attr:`locals` Either None if locals were not supplied, or a dict mapping the name to the repr() of the variable. @@ -1053,7 +1052,7 @@ def _wlen(s: str) -> int: def _display_width(line, offset=None): - """Calculate the extra amount of width space the given source + """Calculate the amount of width space the given source code segment might take if it were to be displayed on a fixed width output device. Supports wide unicode characters and emojis.""" @@ -1134,7 +1133,7 @@ class TracebackException: def __init__(self, exc_type, exc_value, exc_traceback, *, limit=None, lookup_lines=True, capture_locals=False, compact=False, max_group_width=15, max_group_depth=10, save_exc_type=True, _seen=None): - # NB: we need to accept exc_traceback, exc_value, exc_traceback to + # NB: we need to accept exc_type, exc_value, exc_traceback to # permit backwards compat with the existing API, otherwise we # need stub thunk objects just to glue it together. # Handle loops in __cause__ or __context__. @@ -1775,6 +1774,10 @@ def print(self, *, file=None, chain=True, **kwargs): # frozendict -- mutable method on immutable type (user expected a dict) "update": ((frozenset, "Did you mean to use a 'set' object?", True), (frozendict, "Did you mean to use a 'dict' object?", True)), + # clear() -- shared across immutable container types (user expected the mutable counterpart) + "clear": ((tuple, "Did you mean to use a 'list' object?", True), + (frozenset, "Did you mean to use a 'set' object?", True), + (frozendict, "Did you mean to use a 'dict' object?", True)), # float -- bitwise operators belong to int "__or__": ((float, "Did you mean to use an 'int' object? Bitwise operators are not supported by 'float'.", True),), "__and__": ((float, "Did you mean to use an 'int' object? Bitwise operators are not supported by 'float'.", True),), diff --git a/Lib/types.py b/Lib/types.py index b4f9a5c5140..6c069591ab2 100644 --- a/Lib/types.py +++ b/Lib/types.py @@ -195,18 +195,19 @@ class Baz(list[str]): ... class DynamicClassAttribute: """Route attribute access on a class to __getattr__. - This is a descriptor, used to define attributes that act differently when - accessed through an instance and through a class. Instance access remains - normal, but access to an attribute through a class will be routed to the - class's __getattr__ method; this is done by raising AttributeError. - - This allows one to have properties active on an instance, and have virtual - attributes on the class with the same name. (Enum used this between Python - versions 3.4 - 3.9 .) - - Subclass from this to use a different method of accessing virtual attributes - and still be treated properly by the inspect module. (Enum uses this since - Python 3.10 .) + This is a descriptor, used to define attributes that act differently + when accessed through an instance and through a class. Instance access + remains normal, but access to an attribute through a class will be + routed to the class's __getattr__ method; this is done by raising + AttributeError. + + This allows one to have properties active on an instance, and have + virtual attributes on the class with the same name. (Enum used this + between Python versions 3.4 - 3.9 .) + + Subclass from this to use a different method of accessing virtual + attributes and still be treated properly by the inspect module. (Enum + uses this since Python 3.10 .) """ def __init__(self, fget=None, fset=None, fdel=None, doc=None): diff --git a/Lib/typing.py b/Lib/typing.py index 130e09be4b9..715d08e0e16 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -5,7 +5,7 @@ * Generic, Protocol, and internal machinery to support generic aliases. All subscripted types like X[int], Union[int, str] are generic aliases. * Various "special forms" that have unique meanings in type annotations: - NoReturn, Never, ClassVar, Self, Concatenate, Unpack, and others. + Any, Never, ClassVar, Self, Concatenate, Unpack, and others. * Classes whose instances can be type arguments to generic classes and functions: TypeVar, ParamSpec, TypeVarTuple. * Public helper functions: get_type_hints, overload, cast, final, and others. @@ -591,12 +591,12 @@ def __repr__(self): class Any(metaclass=_AnyMeta): """Special type indicating an unconstrained type. - - Any is compatible with every type. - - Any assumed to have all methods. - - All values assumed to be instances of Any. + - Any is assignable to every type. + - Any assumed to have all methods and attributes. + - All values are assignable to Any. Note that all the above statements are true from the point of view of - static type checkers. At runtime, Any should not be used with instance + static type checkers. At runtime, Any cannot be used with instance checks. """ @@ -715,7 +715,7 @@ class Starship: ClassVar accepts only types and cannot be further subscribed. - Note that ClassVar is not a class itself, and should not + Note that ClassVar is not a class itself, and cannot be used with isinstance() or issubclass(). """ item = _type_check(parameters, f'{self} accepts only single type.', allow_special_forms=True) @@ -745,7 +745,7 @@ class FastConnector(Connection): @_SpecialForm def Optional(self, parameters): - """Optional[X] is equivalent to Union[X, None].""" + """Optional[X] is equivalent to X | None.""" arg = _type_check(parameters, f"{self} requires a single type.") return Union[arg, type(None)] @@ -788,7 +788,7 @@ def open_helper(file: str, mode: MODE) -> str: def TypeAlias(self, parameters): """Special form for marking type aliases. - Use TypeAlias to indicate that an assignment should + TypeAlias can be used to indicate that an assignment should be recognized as a proper type alias definition by type checkers. @@ -1796,7 +1796,7 @@ class Movie(TypedDict): def foo(**kwargs: Unpack[Movie]): ... Note that there is only some runtime checking of this operator. Not - everything the runtime allows may be accepted by static type checkers. + everything the runtime allows is accepted by static type checkers. For more information, see PEPs 646 and 692. """ @@ -2307,7 +2307,7 @@ def runtime_checkable(cls): Such protocol can be used with isinstance() and issubclass(). Raise TypeError if applied to a non-protocol class. This allows a simple-minded structural check very similar to - one trick ponies in collections.abc such as Iterable. + one-trick ponies in collections.abc such as Iterable. For example:: @@ -2377,8 +2377,8 @@ def get_type_hints(obj, globalns=None, localns=None, include_extras=False, *, format=None): """Return type hints for an object. - This is often the same as obj.__annotations__, but it handles - forward references encoded as string literals and recursively replaces all + This is often the same as annotationlib.get_annotations(obj) or obj.__annotations__, + but it handles forward references encoded as string literals and recursively replaces all 'Annotated[T, ...]' with 'T' (unless 'include_extras=True'). The argument may be a module, class, method, or function. The annotations @@ -2590,7 +2590,7 @@ def get_args(tp): def is_typeddict(tp): - """Check if an annotation is a TypedDict class. + """Check if an object is a TypedDict class. For example:: @@ -2687,10 +2687,10 @@ def _overload_dummy(*args, **kwds): def overload(func): """Decorator for overloaded functions/methods. - In a stub file, place two or more stub definitions for the same - function in a row, each decorated with @overload. - - For example:: + In a non-stub file, place two or more stub definitions for the same + function in a row, each decorated with @overload, followed + by an implementation. The implementation should *not* + be decorated with @overload:: @overload def utf8(value: None) -> None: ... @@ -2698,10 +2698,11 @@ def utf8(value: None) -> None: ... def utf8(value: bytes) -> bytes: ... @overload def utf8(value: str) -> bytes: ... + def utf8(value): + ... # implementation goes here - In a non-stub file (i.e. a regular .py file), do the same but - follow it with an implementation. The implementation should *not* - be decorated with @overload:: + In a stub file or in an abstract method (for example, in a Protocol definition), + the implementation may be omitted:: @overload def utf8(value: None) -> None: ... @@ -2709,8 +2710,6 @@ def utf8(value: None) -> None: ... def utf8(value: bytes) -> bytes: ... @overload def utf8(value: str) -> bytes: ... - def utf8(value): - ... # implementation goes here The overloads for a function can be retrieved at runtime using the get_overloads() function. @@ -2746,7 +2745,7 @@ def final(f): """Decorator to indicate final methods and final classes. Use this decorator to indicate to type checkers that the decorated - method cannot be overridden, and decorated class cannot be subclassed. + method cannot be overridden, and the decorated class cannot be subclassed. For example:: @@ -2811,7 +2810,7 @@ class Disjoint3(Disjoint1, Disjoint2): pass # Type checker error V_co = TypeVar('V_co', covariant=True) # Any type covariant containers. VT_co = TypeVar('VT_co', covariant=True) # Value type covariant containers. T_contra = TypeVar('T_contra', contravariant=True) # Ditto contravariant. -# Internal type variable used for Type[]. +# Internal type bound to class object types. CT_co = TypeVar('CT_co', covariant=True, bound=type) @@ -2899,7 +2898,7 @@ class TeamUser(User): ... And a function that takes a class argument that's a subclass of User and returns an instance of the corresponding class:: - def new_user[U](user_class: Type[U]) -> U: + def new_user[U](user_class: type[U]) -> U: user = user_class() # (Here we could write the user object to a database) return user @@ -2912,7 +2911,7 @@ def new_user[U](user_class: Type[U]) -> U: @runtime_checkable class SupportsInt(Protocol): - """An ABC with one abstract method __int__.""" + """A protocol with one abstract method __int__.""" __slots__ = () @@ -2923,7 +2922,7 @@ def __int__(self) -> int: @runtime_checkable class SupportsFloat(Protocol): - """An ABC with one abstract method __float__.""" + """A protocol with one abstract method __float__.""" __slots__ = () @@ -2934,7 +2933,7 @@ def __float__(self) -> float: @runtime_checkable class SupportsComplex(Protocol): - """An ABC with one abstract method __complex__.""" + """A protocol with one abstract method __complex__.""" __slots__ = () @@ -2945,7 +2944,7 @@ def __complex__(self) -> complex: @runtime_checkable class SupportsBytes(Protocol): - """An ABC with one abstract method __bytes__.""" + """A protocol with one abstract method __bytes__.""" __slots__ = () @@ -2956,7 +2955,7 @@ def __bytes__(self) -> bytes: @runtime_checkable class SupportsIndex(Protocol): - """An ABC with one abstract method __index__.""" + """A protocol with one abstract method __index__.""" __slots__ = () @@ -2967,7 +2966,7 @@ def __index__(self) -> int: @runtime_checkable class SupportsAbs[T](Protocol): - """An ABC with one abstract method __abs__ that is covariant in its return type.""" + """A protocol with one abstract method __abs__ that is covariant in its return type.""" __slots__ = () @@ -2978,7 +2977,7 @@ def __abs__(self) -> T: @runtime_checkable class SupportsRound[T](Protocol): - """An ABC with one abstract method __round__ that is covariant in its return type.""" + """A protocol with one abstract method __round__ that is covariant in its return type.""" __slots__ = () @@ -3095,7 +3094,7 @@ def annotate(format): def NamedTuple(typename, fields, /): - """Typed version of namedtuple. + """Typed version of collections.namedtuple. Usage:: @@ -3107,8 +3106,8 @@ class Employee(NamedTuple): Employee = collections.namedtuple('Employee', ['name', 'id']) - The resulting class has an extra __annotations__ attribute, giving a - dict that maps field names to types. (The field names are also in + The types for each field name can be retrieved by calling + annotationlib.get_annotations(Employee). (The field names are also in the _fields attribute, which is part of the namedtuple API.) An alternative equivalent functional syntax is also accepted:: @@ -3161,7 +3160,7 @@ def __new__(cls, name, bases, ns, total=True, closed=None, This method is called when TypedDict is subclassed, or when TypedDict is instantiated. This way - TypedDict supports all three syntax forms described in its docstring. + TypedDict classes can be created through both class-based and functional syntax. Subclasses and instances of TypedDict return actual dictionaries. """ for base in bases: @@ -3315,14 +3314,22 @@ def TypedDict(typename, fields, /, *, total=True, closed=None, >>> Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first') True - The type info can be accessed via the Point2D.__annotations__ dict, and - the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets. + The type info can be accessed by calling annotationlib.get_annotations(Point2D), and + via the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets. TypedDict supports an additional equivalent form:: Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str}) By default, all keys must be present in a TypedDict. It is possible - to override this by specifying totality:: + to override this by using the NotRequired and Required special forms:: + + class Point2D(TypedDict): + x: int # the "x" key must always be present (Required is the default) + y: NotRequired[int] # the "y" key can be omitted + + This means that a Point2D TypedDict can have the "y" key omitted, but the "x" key must be present. + Items are required by default, so the Required special form is not necessary in this example. + In addition, the total argument to the TypedDict function can be used to make all items not required:: class Point2D(TypedDict, total=False): x: int @@ -3331,16 +3338,8 @@ class Point2D(TypedDict, total=False): This means that a Point2D TypedDict can have any of the keys omitted. A type checker is only expected to support a literal False or True as the value of the total argument. True is the default, and makes all items defined in the - class body be required. - - The Required and NotRequired special forms can also be used to mark - individual keys as being required or not required:: - - class Point2D(TypedDict): - x: int # the "x" key must always be present (Required is the default) - y: NotRequired[int] # the "y" key can be omitted - - See PEP 655 for more details on Required and NotRequired. + class body be required. The Required special form can be used to mark individual + keys as required in a total=False TypedDict. The ReadOnly special form can be used to mark individual keys as immutable for type checkers:: @@ -3374,7 +3373,7 @@ class Point3D(Point2D): by default, and it may not be used with the closed argument at the same time. - See PEP 728 for more information about closed and extra_items. + See PEPs 589, 655, 705, and 728 for more information. """ ns = {'__annotations__': dict(fields)} module = _caller() @@ -3404,7 +3403,7 @@ class Movie(TypedDict, total=False): year: int m = Movie( - title='The Matrix', # typechecker error if key is omitted + title='The Matrix', # type checker error if key is omitted year=1999, ) @@ -3426,7 +3425,7 @@ class Movie(TypedDict): year: NotRequired[int] m = Movie( - title='The Matrix', # typechecker error if key is omitted + title='The Matrix', # type checker error if key is omitted year=1999, ) """ @@ -3446,7 +3445,7 @@ class Movie(TypedDict): def mutate_movie(m: Movie) -> None: m["year"] = 1992 # allowed - m["title"] = "The Matrix" # typechecker error + m["title"] = "The Matrix" # type checker error There is no runtime checking for this property. """ @@ -3533,8 +3532,8 @@ class IO(Generic[AnyStr]): classes (text vs. binary, read vs. write vs. read/write, append-only, unbuffered). The TextIO and BinaryIO subclasses below capture the distinctions between text vs. binary, which is - pervasive in the interface; however we currently do not offer a - way to track the other distinctions in the type system. + pervasive in the interface. For more precise types, define a custom + Protocol. """ __slots__ = () @@ -3624,7 +3623,7 @@ def __exit__(self, type, value, traceback, /) -> None: class BinaryIO(IO[bytes]): - """Typed version of the return of open() in binary mode.""" + """Typed approximation of the return of open() in binary mode.""" __slots__ = () @@ -3638,7 +3637,7 @@ def __enter__(self) -> BinaryIO: class TextIO(IO[str]): - """Typed version of the return of open() in text mode.""" + """Typed approximation of the return of open() in text mode.""" __slots__ = () @@ -3705,7 +3704,7 @@ def dataclass_transform( field_specifiers: tuple[type[Any] | Callable[..., Any], ...] = (), **kwargs: Any, ) -> _IdentityCallable: - """Decorator to mark an object as providing dataclass-like behaviour. + """Decorator to mark an object as providing dataclass-like behavior. The decorator can be applied to a function, class, or metaclass. diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 16f3699e89e..56cdc37942d 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -3113,6 +3113,10 @@ def _mock_call(self, *args, **kwargs): return ret_value + def _increment_mock_call(self, /, *args, **kwargs): + with self._mock_calls_events_lock: + super()._increment_mock_call(*args, **kwargs) + def wait_until_called(self, *, timeout=_timeout_unset): """Wait until the mock object is called. diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py index 0653a43a8b1..bd2762d55ef 100644 --- a/Lib/venv/__init__.py +++ b/Lib/venv/__init__.py @@ -319,6 +319,14 @@ def setup_python(self, context): if not os.path.islink(path): os.chmod(path, 0o755) + if not self.symlinks and sys.platform == 'cygwin': + # Copy libpython DLL + libpython_dll = sysconfig.get_config_var('DLLLIBRARY') + if not os.path.exists(os.path.join(binpath, libpython_dll)): + exe_path = os.path.dirname(sys.executable) + shutil.copy(os.path.join(exe_path, libpython_dll), + os.path.join(binpath, libpython_dll)) + else: def setup_python(self, context): """ diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py index 85766e02b53..53727d7940b 100644 --- a/Lib/xml/etree/ElementTree.py +++ b/Lib/xml/etree/ElementTree.py @@ -8,8 +8,8 @@ 2. Element represents a single node in this tree. Interactions with the whole document (reading and writing to/from files) are - usually done on the ElementTree level. Interactions with a single XML element - and its sub-elements are done on the Element level. + usually done on the ElementTree level. Interactions with a single XML + element and its sub-elements are done on the Element level. Element is a flexible container object designed to store hierarchical data structures in memory. It can be described as a cross between a list and a @@ -277,7 +277,8 @@ def find(self, path, namespaces=None): """Find first matching element by tag name or path. *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. + *namespaces* is an optional mapping from namespace prefix to full + name. Return the first matching element, or None if no element was found. @@ -289,7 +290,8 @@ def findtext(self, path, default=None, namespaces=None): *path* is a string having either an element tag or an XPath, *default* is the value to return if the element was not found, - *namespaces* is an optional mapping from namespace prefix to full name. + *namespaces* is an optional mapping from namespace prefix to full + name. Return text content of first matching element, or default value if none was found. Note that if an element is found having no text @@ -302,7 +304,8 @@ def findall(self, path, namespaces=None): """Find all matching subelements by tag name or path. *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. + *namespaces* is an optional mapping from namespace prefix to full + name. Returns list containing all matching elements in document order. @@ -313,7 +316,8 @@ def iterfind(self, path, namespaces=None): """Find all matching subelements by tag name or path. *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. + *namespaces* is an optional mapping from namespace prefix to full + name. Return an iterable yielding all matching elements in document order. @@ -553,8 +557,8 @@ def _setroot(self, element): def parse(self, source, parser=None): """Load external XML document into element tree. - *source* is a file name or file object, *parser* is an optional parser - instance that defaults to XMLParser. + *source* is a file name or file object, *parser* is an optional + parser instance that defaults to XMLParser. ParseError is raised if the parser fails to parse the document. @@ -587,7 +591,8 @@ def parse(self, source, parser=None): def iter(self, tag=None): """Create and return tree iterator for the root element. - The iterator loops over all elements in this tree, in document order. + The iterator loops over all elements in this tree, in document + order. *tag* is a string with the tag name to iterate over (default is to return all elements). @@ -602,7 +607,8 @@ def find(self, path, namespaces=None): Same as getroot().find(path), which is Element.find() *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. + *namespaces* is an optional mapping from namespace prefix to full + name. Return the first matching element, or None if no element was found. @@ -624,7 +630,8 @@ def findtext(self, path, default=None, namespaces=None): Same as getroot().findtext(path), which is Element.findtext() *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. + *namespaces* is an optional mapping from namespace prefix to full + name. Return the first matching element, or None if no element was found. @@ -646,7 +653,8 @@ def findall(self, path, namespaces=None): Same as getroot().findall(path), which is Element.findall(). *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. + *namespaces* is an optional mapping from namespace prefix to full + name. Return list containing all matching elements in document order. @@ -693,24 +701,26 @@ def write(self, file_or_filename, """Write element tree to a file as XML. Arguments: - *file_or_filename* -- file name or a file object opened for writing + *file_or_filename* -- file name or a file object opened for + writing *encoding* -- the output encoding (default: US-ASCII) - *xml_declaration* -- bool indicating if an XML declaration should be - added to the output. If None, an XML declaration - is added if encoding IS NOT either of: - US-ASCII, UTF-8, or Unicode + *xml_declaration* -- bool indicating if an XML declaration should + be added to the output. If None, an XML + declaration is added if encoding IS NOT + either of: US-ASCII, UTF-8, or Unicode - *default_namespace* -- sets the default XML namespace (for "xmlns") + *default_namespace* -- sets the default XML namespace (for + "xmlns") *method* -- either "xml" (default), "html, "text", or "c14n" *short_empty_elements* -- controls the formatting of elements - that contain no content. If True (default) - they are emitted as a single self-closed - tag, otherwise they are emitted as a pair - of start/end tags + that contain no content. If True + (default) they are emitted as a single + self-closed tag, otherwise they are + emitted as a pair of start/end tags """ if self._root is None: @@ -907,17 +917,20 @@ def _serialize_xml(write, elem, qnames, namespaces, if elem.tail: write(_escape_cdata(elem.tail)) +_CDATA_CONTENT_ELEMENTS = {"script", "style", "xmp", "iframe", "noembed", + "noframes", "plaintext"} + HTML_EMPTY = {"area", "base", "basefont", "br", "col", "embed", "frame", "hr", "img", "input", "isindex", "link", "meta", "param", "source", - "track", "wbr"} + "track", "wbr", "plaintext"} def _serialize_html(write, elem, qnames, namespaces, **kwargs): tag = elem.tag text = elem.text if tag is Comment: - write("<!--%s-->" % _escape_cdata(text)) + write("<!--%s-->" % text) elif tag is ProcessingInstruction: - write("<?%s?>" % _escape_cdata(text)) + write("<?%s?>" % text) else: tag = qnames[tag] if tag is None: @@ -941,16 +954,19 @@ def _serialize_html(write, elem, qnames, namespaces, **kwargs): for k, v in items: if isinstance(k, QName): k = k.text - if isinstance(v, QName): - v = qnames[v.text] + k = qnames[k] + if v is None: + write(" %s" % k) # empty attr else: - v = _escape_attrib_html(v) - # FIXME: handle boolean attributes - write(" %s=\"%s\"" % (qnames[k], v)) + if isinstance(v, QName): + v = qnames[v.text] + else: + v = _escape_attrib_html(v) + write(" %s=\"%s\"" % (k, v)) write(">") ltag = tag.lower() if text: - if ltag == "script" or ltag == "style": + if ltag in _CDATA_CONTENT_ELEMENTS: write(text) else: write(_escape_cdata(text)) @@ -1083,9 +1099,9 @@ def tostring(element, encoding=None, method=None, *, is returned. Otherwise a bytestring is returned. *element* is an Element instance, *encoding* is an optional output - encoding defaulting to US-ASCII, *method* is an optional output which can - be one of "xml" (default), "html", "text" or "c14n", *default_namespace* - sets the default XML namespace (for "xmlns"). + encoding defaulting to US-ASCII, *method* is an optional output which + can be one of "xml" (default), "html", "text" or "c14n", + *default_namespace* sets the default XML namespace (for "xmlns"). Returns an (optionally) encoded string containing the XML data. @@ -1225,7 +1241,8 @@ def iterparse(source, events=None, parser=None): "end" events are reported. *source* is a filename or file object containing XML data, *events* is - a list of events to report back, *parser* is an optional parser instance. + a list of events to report back, *parser* is an optional parser + instance. Returns an iterator providing (event, elem) pairs. @@ -1761,10 +1778,11 @@ def flush(self): def canonicalize(xml_data=None, *, out=None, from_file=None, **options): """Convert XML to its C14N 2.0 serialised form. - If *out* is provided, it must be a file or file-like object that receives - the serialised canonical XML output (text, not bytes) through its ``.write()`` - method. To write to a file, open it in text mode with encoding "utf-8". - If *out* is not provided, this function returns the output as text string. + If *out* is provided, it must be a file or file-like object that + receives the serialised canonical XML output (text, not bytes) through + its ``.write()`` method. To write to a file, open it in text mode with + encoding "utf-8". If *out* is not provided, this function returns the + output as text string. Either *xml_data* (an XML string) or *from_file* (a file path or file-like object) must be provided as input. @@ -1798,19 +1816,22 @@ class C14NWriterTarget: Serialises parse events to XML C14N 2.0. The *write* function is used for writing out the resulting data stream - as text (not bytes). To write to a file, open it in text mode with encoding - "utf-8" and pass its ``.write`` method. + as text (not bytes). To write to a file, open it in text mode with + encoding "utf-8" and pass its ``.write`` method. Configuration options: - *with_comments*: set to true to include comments - - *strip_text*: set to true to strip whitespace before and after text content - - *rewrite_prefixes*: set to true to replace namespace prefixes by "n{number}" + - *strip_text*: set to true to strip whitespace before and after text + content + - *rewrite_prefixes*: set to true to replace namespace prefixes by + "n{number}" - *qname_aware_tags*: a set of qname aware tag names in which prefixes should be replaced in text content - - *qname_aware_attrs*: a set of qname aware attribute names in which prefixes - should be replaced in text content - - *exclude_attrs*: a set of attribute names that should not be serialised + - *qname_aware_attrs*: a set of qname aware attribute names in which + prefixes should be replaced in text content + - *exclude_attrs*: a set of attribute names that should not be + serialised - *exclude_tags*: a set of tag names that should not be serialised """ def __init__(self, write, *, diff --git a/Lib/zipfile/__init__.py b/Lib/zipfile/__init__.py index 86c3bc36b69..71e4dd4f6f6 100644 --- a/Lib/zipfile/__init__.py +++ b/Lib/zipfile/__init__.py @@ -566,8 +566,12 @@ def FileHeader(self, zip64=None): return header + filename + extra def _encodeFilenameFlags(self): + if self.flag_bits & _MASK_UTF_FILENAME: + encoding = 'ascii' + else: + encoding = 'cp437' try: - return self.filename.encode('ascii'), self.flag_bits + return self.filename.encode(encoding), self.flag_bits & ~_MASK_UTF_FILENAME except UnicodeEncodeError: return self.filename.encode('utf-8'), self.flag_bits | _MASK_UTF_FILENAME @@ -620,11 +624,12 @@ def _decodeExtra(self, filename_crc): def from_file(cls, filename, arcname=None, *, strict_timestamps=True): """Construct an appropriate ZipInfo for a file on the filesystem. - filename should be the path to a file or directory on the filesystem. + filename should be the path to a file or directory on the + filesystem. - arcname is the name which it will have within the archive (by default, - this will be the same as filename, but without a drive letter and with - leading path separators removed). + arcname is the name which it will have within the archive (by + default, this will be the same as filename, but without a drive + letter and with leading path separators removed). """ if isinstance(filename, os.PathLike): filename = os.fspath(filename) @@ -663,9 +668,12 @@ def _for_archive(self, archive): Return self. """ # gh-91279: Set the SOURCE_DATE_EPOCH to a specific timestamp - epoch = os.environ.get('SOURCE_DATE_EPOCH') - get_time = int(epoch) if epoch else time.time() - self.date_time = time.localtime(get_time)[:6] + source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') + + if source_date_epoch: + self.date_time = time.gmtime(int(source_date_epoch))[:6] + else: + self.date_time = time.localtime(time.time())[:6] self.compress_type = archive.compression self.compress_level = archive.compresslevel @@ -1392,19 +1400,19 @@ class ZipFile: mode: The mode can be either read 'r', write 'w', exclusive create 'x', or append 'a'. compression: ZIP_STORED (no compression), ZIP_DEFLATED (requires zlib), - ZIP_BZIP2 (requires bz2), ZIP_LZMA (requires lzma), or - ZIP_ZSTANDARD (requires compression.zstd). - allowZip64: if True ZipFile will create files with ZIP64 extensions when - needed, otherwise it will raise an exception when this would - be necessary. - compresslevel: None (default for the given compression type) or an integer - specifying the level to pass to the compressor. - When using ZIP_STORED or ZIP_LZMA this keyword has no effect. - When using ZIP_DEFLATED integers 0 through 9 are accepted. - When using ZIP_BZIP2 integers 1 through 9 are accepted. - When using ZIP_ZSTANDARD integers -7 though 22 are common, - see the CompressionParameter enum in compression.zstd for - details. + ZIP_BZIP2 (requires bz2), ZIP_LZMA (requires lzma), or + ZIP_ZSTANDARD (requires compression.zstd). + allowZip64: if True ZipFile will create files with ZIP64 extensions + when needed, otherwise it will raise an exception when this + would be necessary. + compresslevel: None (default for the given compression type) or + an integer specifying the level to pass to the compressor. + When using ZIP_STORED or ZIP_LZMA this keyword has no effect. + When using ZIP_DEFLATED integers 0 through 9 are accepted. + When using ZIP_BZIP2 integers 1 through 9 are accepted. + When using ZIP_ZSTANDARD integers -7 though 22 are common, + see the CompressionParameter enum in compression.zstd for + details. """ @@ -1414,8 +1422,8 @@ class ZipFile: def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True, metadata_encoding=None): - """Open the ZIP file with mode read 'r', write 'w', exclusive create 'x', - or append 'a'.""" + """Open the ZIP file with mode read 'r', write 'w', exclusive create + 'x', or append 'a'.""" if mode not in ('r', 'w', 'x', 'a'): raise ValueError("ZipFile requires mode 'r', 'w', 'x', or 'a'") @@ -1693,10 +1701,10 @@ def open(self, name, mode="r", pwd=None, *, force_zip64=False): pwd is the password to decrypt files (only used for reading). - When writing, if the file size is not known in advance but may exceed - 2 GiB, pass force_zip64 to use the ZIP64 format, which can handle large - files. If the size is known in advance, it is best to pass a ZipInfo - instance for name, with zinfo.file_size set. + When writing, if the file size is not known in advance but may + exceed 2 GiB, pass force_zip64 to use the ZIP64 format, which can + handle large files. If the size is known in advance, it is best to + pass a ZipInfo instance for name, with zinfo.file_size set. """ if mode not in {"r", "w"}: raise ValueError('open() requires mode "r" or "w"') @@ -1808,7 +1816,7 @@ def _open_to_write(self, zinfo, force_zip64=False): zinfo.compress_size = 0 zinfo.CRC = 0 - zinfo.flag_bits = 0x00 + zinfo.flag_bits = _MASK_UTF_FILENAME if zinfo.compress_type == ZIP_LZMA: # Compressed data includes an end-of-stream (EOS) marker zinfo.flag_bits |= _MASK_COMPRESS_OPTION_1 diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index d533723a502..d4df8fbc42d 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -359,9 +359,9 @@ def library_recipes(): ), ), dict( - name="SQLite 3.50.4", - url="https://www.sqlite.org/2025/sqlite-autoconf-3500400.tar.gz", - checksum="a3db587a1b92ee5ddac2f66b3edb41b26f9c867275782d46c3a088977d6a5b18", + name="SQLite 3.53.1", + url="https://www.sqlite.org/2026/sqlite-autoconf-3530100.tar.gz", + checksum="83e6b2020a034e9a7ad4a72feea59e1ad52f162e09cbd26735a3ffb98359fc4f", extra_cflags=('-Os ' '-DSQLITE_ENABLE_FTS5 ' '-DSQLITE_ENABLE_FTS4 ' diff --git a/Makefile.pre.in b/Makefile.pre.in index 9435bf534fb..2b34b009fd7 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -215,6 +215,8 @@ MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@ # the build, and is only listed here so it will be included in sysconfigdata. IPHONEOS_DEPLOYMENT_TARGET=@IPHONEOS_DEPLOYMENT_TARGET@ +BUILD_DETAILS=@BUILD_DETAILS@ + # Option to install to strip binaries STRIPFLAG=-s @@ -774,11 +776,11 @@ list-targets: .PHONY: build_all build_all: check-clean-src check-app-store-compliance $(BUILDPYTHON) platform sharedmods \ - gdbhooks Programs/_testembed scripts checksharedmods rundsymutil build-details.json + gdbhooks Programs/_testembed scripts checksharedmods rundsymutil $(BUILD_DETAILS) .PHONY: build_wasm build_wasm: check-clean-src $(BUILDPYTHON) platform sharedmods \ - python-config checksharedmods build-details.json + python-config checksharedmods $(BUILD_DETAILS) .PHONY: build_emscripten build_emscripten: build_wasm web_example web_example_pyrepl_jspi @@ -795,7 +797,7 @@ check-clean-src: echo "Building Python out of the source tree (in $(abs_builddir)) requires a clean source tree ($(abs_srcdir))" ; \ echo "Build artifacts such as .o files, executables, and Python/frozen_modules/*.h must not exist within $(srcdir)." ; \ echo "Try to run:" ; \ - echo " (cd \"$(srcdir)\" && make clean || git clean -fdx -e Doc/venv)" ; \ + echo " (cd \"$(srcdir)\" && make distclean || git clean -fdx -e Doc/venv)" ; \ exit 1; \ fi @@ -979,8 +981,8 @@ pybuilddir.txt: $(PYTHON_FOR_BUILD_DEPS) exit 1 ; \ fi -build-details.json: pybuilddir.txt - $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/build/generate-build-details.py `cat pybuilddir.txt`/build-details.json +$(BUILD_DETAILS): pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/build/generate-build-details.py `cat pybuilddir.txt`/$(BUILD_DETAILS) # Build static library $(LIBRARY): $(LIBRARY_OBJS) @@ -2349,7 +2351,7 @@ multissltest: all # Only the main install gets a build-details.json. .PHONY: install install: @FRAMEWORKINSTALLFIRST@ @INSTALLTARGETS@ @FRAMEWORKINSTALLLAST@ - $(INSTALL_DATA) `cat pybuilddir.txt`/build-details.json $(DESTDIR)$(LIBDEST); \ + $(INSTALL_DATA) `cat pybuilddir.txt`/$(BUILD_DETAILS) $(DESTDIR)$(LIBDEST); \ if test "x$(ENSUREPIP)" != "xno" ; then \ case $(ENSUREPIP) in \ upgrade) ensurepip="--upgrade" ;; \ @@ -3111,12 +3113,33 @@ config.status: $(srcdir)/configure .PRECIOUS: config.status $(BUILDPYTHON) Makefile Makefile.pre -Python/asm_trampoline.o: $(srcdir)/Python/asm_trampoline.S +Python/asm_trampoline_x86_64.o: $(srcdir)/Python/asm_trampoline_x86_64.S + $(CC) -c $(PY_CORE_CFLAGS) -o $@ $< + +Python/asm_trampoline_aarch64.o: $(srcdir)/Python/asm_trampoline_aarch64.S $(CC) -c $(PY_CORE_CFLAGS) -o $@ $< +Python/asm_trampoline_riscv64.o: $(srcdir)/Python/asm_trampoline_riscv64.S + $(CC) -c $(PY_CORE_CFLAGS) -o $@ $< + +# On macOS universal2 builds, $(PY_CORE_CFLAGS) contains "-arch arm64 -arch x86_64", +# which would produce fat .o files containing both architectures for each .S input. +# lipo -create then refuses to combine them because they share architectures. +# Build each per-arch object with a single -arch flag before merging with lipo. +Python/asm_trampoline_universal2.o: $(srcdir)/Python/asm_trampoline_aarch64.S $(srcdir)/Python/asm_trampoline_x86_64.S + $(CC) -c $(filter-out -arch arm64 x86_64,$(PY_CORE_CFLAGS)) -arch arm64 \ + -o Python/asm_trampoline_arm64-apple-darwin.o $(srcdir)/Python/asm_trampoline_aarch64.S + $(CC) -c $(filter-out -arch arm64 x86_64,$(PY_CORE_CFLAGS)) -arch x86_64 \ + -o Python/asm_trampoline_x86_64-apple-darwin.o $(srcdir)/Python/asm_trampoline_x86_64.S + lipo -create -output $@ \ + Python/asm_trampoline_arm64-apple-darwin.o \ + Python/asm_trampoline_x86_64-apple-darwin.o + rm -f Python/asm_trampoline_arm64-apple-darwin.o \ + Python/asm_trampoline_x86_64-apple-darwin.o + Python/emscripten_trampoline_inner.wasm: $(srcdir)/Python/emscripten_trampoline_inner.c # emcc has a path that ends with emsdk/upstream/emscripten/emcc, we're looking for emsdk/upstream/bin/clang. - $$(dirname $$(dirname $(CC)))/bin/clang -o $@ $< -mgc -O2 -Wl,--no-entry -Wl,--import-table -Wl,--import-memory -target wasm32-unknown-unknown -nostdlib + $$(em-config LLVM_ROOT)/clang -o $@ $< -mgc -O2 -Wl,--no-entry -Wl,--import-table -Wl,--import-memory -target wasm32-unknown-unknown -nostdlib Python/emscripten_trampoline_wasm.c: Python/emscripten_trampoline_inner.wasm $(PYTHON_FOR_REGEN) $(srcdir)/Platforms/emscripten/prepare_external_wasm.py $< $@ getWasmTrampolineModule diff --git a/Misc/ACKS b/Misc/ACKS index 234d0d2d0a2..14f0db75495 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -144,6 +144,7 @@ Bas van Beek Ian Beer Stefan Behnel Reimer Behrends +Tomi Belan Maxime Bélanger Ben Bell Thomas Bellman diff --git a/Misc/Brewfile b/Misc/Brewfile new file mode 100644 index 00000000000..c799f099957 --- /dev/null +++ b/Misc/Brewfile @@ -0,0 +1,14 @@ +brew "gdbm" +brew "mpdecimal" +brew "openssl@3.5" +brew "pkg-config" +brew "tcl-tk@9" +brew "xz" +brew "zstd" + +brew "bzip2" if OS.linux? +brew "libedit" if OS.linux? +brew "libffi" if OS.linux? +brew "ncurses" if OS.linux? +brew "unzip" if OS.linux? +brew "zlib-ng-compat" if OS.linux? diff --git a/Misc/NEWS.d/3.15.0a8.rst b/Misc/NEWS.d/3.15.0a8.rst index ff7930aeb29..28e9ca85166 100644 --- a/Misc/NEWS.d/3.15.0a8.rst +++ b/Misc/NEWS.d/3.15.0a8.rst @@ -180,16 +180,6 @@ dealing with contradictions in ``make_bottom``. .. -.. date: 2026-03-24-13-06-52 -.. gh-issue: 146369 -.. nonce: 6wDI6S -.. section: Core and Builtins - -Ensure ``-X lazy_imports=none`` and ``PYTHON_LAZY_IMPORTS=none`` override -:attr:`~module.__lazy_modules__`. Patch by Hugo van Kemenade. - -.. - .. date: 2026-03-22-19-30-00 .. gh-issue: 146308 .. nonce: AxnRVA @@ -350,7 +340,7 @@ Fix :func:`repr` for lists and tuples containing ``NULL``\ s. .. nonce: aB3xKm .. section: Core and Builtins -Fixed ``sys.lazy_modules`` to include lazy modules without submodules. Patch +Fixed :py:attr:`sys.lazy_modules` to include lazy modules without submodules. Patch by Bartosz Sławecki. .. diff --git a/Misc/NEWS.d/next/Build/2026-05-18-16-00-41.gh-issue-148260.UwFiIX.rst b/Misc/NEWS.d/next/Build/2026-05-18-16-00-41.gh-issue-148260.UwFiIX.rst new file mode 100644 index 00000000000..8248c24cbd5 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2026-05-18-16-00-41.gh-issue-148260.UwFiIX.rst @@ -0,0 +1,3 @@ +On Linux when Python is linked to the musl C library, use a thread stack +size of at least 1 MiB instead of musl default which is 128 kiB. Patch by +Victor Stinner. diff --git a/Misc/NEWS.d/next/Build/2026-05-19-12-45-23.gh-issue-131372.oJykeB.rst b/Misc/NEWS.d/next/Build/2026-05-19-12-45-23.gh-issue-131372.oJykeB.rst new file mode 100644 index 00000000000..912f4131af2 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2026-05-19-12-45-23.gh-issue-131372.oJykeB.rst @@ -0,0 +1,3 @@ +Add a :option:`--with-build-details-suffix` configure flag to allow Linux +distributions that co-install multiple versions of Python in the same tree +to avoid ``build-details.json`` clashes. diff --git a/Misc/NEWS.d/next/Build/2026-05-21-15-14-59.gh-issue-148294.VtFaW4.rst b/Misc/NEWS.d/next/Build/2026-05-21-15-14-59.gh-issue-148294.VtFaW4.rst new file mode 100644 index 00000000000..861261dd972 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2026-05-21-15-14-59.gh-issue-148294.VtFaW4.rst @@ -0,0 +1,2 @@ +Corrected the use of ``AC_PATH_TOOL`` in ``configure.ac`` to allow a C++ +compiler to be found on :envvar:`!PATH`. diff --git a/Misc/NEWS.d/next/Build/2026-05-27-14-28-36.gh-issue-115119.wotFWh.rst b/Misc/NEWS.d/next/Build/2026-05-27-14-28-36.gh-issue-115119.wotFWh.rst new file mode 100644 index 00000000000..04fdf3617f0 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2026-05-27-14-28-36.gh-issue-115119.wotFWh.rst @@ -0,0 +1 @@ +Fix the detection of libmpdec header when no .pc files are available. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-04-15-15-48-04.gh-issue-148450.2MEVqH.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-04-15-15-48-04.gh-issue-148450.2MEVqH.rst new file mode 100644 index 00000000000..2a7d0d9bb3a --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-04-15-15-48-04.gh-issue-148450.2MEVqH.rst @@ -0,0 +1 @@ +Fix ``abc.register()`` so it invalidates type version tags for registered classes. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-05-12-00-00.gh-issue-149321.remove-lazy-imports-none.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-05-12-00-00.gh-issue-149321.remove-lazy-imports-none.rst new file mode 100644 index 00000000000..44e96ce7be0 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-05-12-00-00.gh-issue-149321.remove-lazy-imports-none.rst @@ -0,0 +1 @@ +Do not support ``none`` as a lazy imports mode. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-10-16-43-50.gh-issue-148829.gscS14.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-10-16-43-50.gh-issue-148829.gscS14.rst new file mode 100644 index 00000000000..3f9b1ccb518 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-10-16-43-50.gh-issue-148829.gscS14.rst @@ -0,0 +1,2 @@ +:class:`sentinel` objects now support a ``repr=`` argument and their +:attr:`~sentinel.__module__` attribute is writable. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-11-18-20-41.gh-issue-148871.AeCbq7.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-11-18-20-41.gh-issue-148871.AeCbq7.rst new file mode 100644 index 00000000000..506e369f553 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-11-18-20-41.gh-issue-148871.AeCbq7.rst @@ -0,0 +1,3 @@ +The empty tuple ``()`` is now loaded via :opcode:`LOAD_COMMON_CONSTANT` +instead of :opcode:`LOAD_CONST`, removing it from per-code-object +:attr:`~codeobject.co_consts` tuples. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-13-06-54-41.gh-issue-149738.4BLFoH.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-13-06-54-41.gh-issue-149738.4BLFoH.rst new file mode 100644 index 00000000000..e62b681d716 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-13-06-54-41.gh-issue-149738.4BLFoH.rst @@ -0,0 +1,2 @@ +:mod:`sqlite3`: Disallow removing ``row_factory`` and ``text_factory`` attributes +of a connection to prevent a crash on a query. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-13-21-26-26.gh-issue-149805.IG6cza.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-13-21-26-26.gh-issue-149805.IG6cza.rst new file mode 100644 index 00000000000..02d050840ee --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-13-21-26-26.gh-issue-149805.IG6cza.rst @@ -0,0 +1,2 @@ +Fix a :exc:`SystemError` when compiling a compiling ``__classdict__`` class +annotation. Found by OSS-Fuzz in :oss-fuzz:`512907042`. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-14-19-41-03.gh-issue-149807.IwGaCo.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-14-19-41-03.gh-issue-149807.IwGaCo.rst new file mode 100644 index 00000000000..a94c737e736 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-14-19-41-03.gh-issue-149807.IwGaCo.rst @@ -0,0 +1,2 @@ +Fix ``hash(frozendict)``: compute the hash of each ``(key, value)`` pair +correctly. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-15-11-31-57.gh-issue-149816.ugN2rx.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-15-11-31-57.gh-issue-149816.ugN2rx.rst new file mode 100644 index 00000000000..016c17dd66b --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-15-11-31-57.gh-issue-149816.ugN2rx.rst @@ -0,0 +1 @@ +Fix a race condition in :class:`memoryview` with free-threading. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-16-11-03-54.gh-issue-149816.X_gqMT.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-16-11-03-54.gh-issue-149816.X_gqMT.rst new file mode 100644 index 00000000000..d35f0857a1a --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-16-11-03-54.gh-issue-149816.X_gqMT.rst @@ -0,0 +1 @@ +Fix a race condition in ``_PyBytes_FromList`` in free-threading mode. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-17-12-00-00.gh-issue-138325.h2XSfe.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-17-12-00-00.gh-issue-138325.h2XSfe.rst new file mode 100644 index 00000000000..0eb528c68d8 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-17-12-00-00.gh-issue-138325.h2XSfe.rst @@ -0,0 +1,3 @@ +Speed up converting a list to a tuple in the ``tuple(genexpr)`` fast path +and in starred tuple displays (e.g. ``(*a, *b)``) by stealing the list's +items into the tuple instead of copying them. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst new file mode 100644 index 00000000000..8d3b29d69cc --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst @@ -0,0 +1 @@ +Fix crash when faulthandler is imported more than once. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-16-54-54.gh-issue-150042.LSr5W8.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-16-54-54.gh-issue-150042.LSr5W8.rst new file mode 100644 index 00000000000..18a4fbd9dad --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-16-54-54.gh-issue-150042.LSr5W8.rst @@ -0,0 +1 @@ +Fix refleak in queue.SimpleQueue.put if memory allocation fails. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-17-16-51.gh-issue-150027.sJgLvd.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-17-16-51.gh-issue-150027.sJgLvd.rst new file mode 100644 index 00000000000..66446105da3 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-17-16-51.gh-issue-150027.sJgLvd.rst @@ -0,0 +1,2 @@ +Improve performance of :class:`frozenset` objects by avoiding copies during +construction. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-18-36-28.gh-issue-148587.-RD3z5.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-18-36-28.gh-issue-148587.-RD3z5.rst new file mode 100644 index 00000000000..d623dbdd75f --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-18-36-28.gh-issue-148587.-RD3z5.rst @@ -0,0 +1 @@ +:py:attr:`sys.lazy_modules` is now a set instead of a dict as initially spelled out in PEP 810. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-20-13-06-17.gh-issue-150146.i5m_SL.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-20-13-06-17.gh-issue-150146.i5m_SL.rst new file mode 100644 index 00000000000..f373f0bee70 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-20-13-06-17.gh-issue-150146.i5m_SL.rst @@ -0,0 +1,5 @@ +Fix a crash on a complex type variable substitution. + +``from typing import TypeVar; memoryview[TypeVar("")][*typing.Mapping[..., +...]]`` used to fail due to missing ``NULL`` check on ``_unpack_args`` C +function call. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-21-21-04-43.gh-issue-150208.VOkxRG.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-21-21-04-43.gh-issue-150208.VOkxRG.rst new file mode 100644 index 00000000000..e9bc1d9e976 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-21-21-04-43.gh-issue-150208.VOkxRG.rst @@ -0,0 +1,2 @@ +Avoid double-quoting string values from ``pyconfig.h`` in ``sysconfigdata`` +variables. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-22-17-09-28.gh-issue-150107.GD72-D.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-22-17-09-28.gh-issue-150107.GD72-D.rst new file mode 100644 index 00000000000..a13f249e48c --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-22-17-09-28.gh-issue-150107.GD72-D.rst @@ -0,0 +1,3 @@ +:mod:`asyncio`: ``sendfile()`` and ``sock_sendfile()`` event loop methods +now call ``file.seek(offset)`` if *file* has a ``seek()`` method, +even if *offset* is ``0`` (default value). diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-23-22-08-01.gh-issue-149449.2lhQFF.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-23-22-08-01.gh-issue-149449.2lhQFF.rst new file mode 100644 index 00000000000..7d11442468d --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-23-22-08-01.gh-issue-149449.2lhQFF.rst @@ -0,0 +1,3 @@ +Fix a use-after-free crash when the :mod:`unicodedata` module was removed +from :data:`sys.modules` and garbage-collected between calls that decode +``\N{...}`` escapes or use the ``namereplace`` codec error handler. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-24-14-45-00.gh-issue-149156.NP73rB.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-24-14-45-00.gh-issue-149156.NP73rB.rst new file mode 100644 index 00000000000..2cb091e2b16 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-24-14-45-00.gh-issue-149156.NP73rB.rst @@ -0,0 +1,3 @@ +Fix an intermittent crash after :func:`os.fork` when perf trampoline +profiling is enabled and the child returns through trampoline frames +inherited from the parent process. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-25-16-00-22.gh-issue-150374.Emu6d8.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-25-16-00-22.gh-issue-150374.Emu6d8.rst new file mode 100644 index 00000000000..7189ca186d2 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-25-16-00-22.gh-issue-150374.Emu6d8.rst @@ -0,0 +1 @@ +Fix double release of the import lock on lazy import reification errors. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-29-17-51-11.gh-issue-144774.jPcixe.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-29-17-51-11.gh-issue-144774.jPcixe.rst new file mode 100644 index 00000000000..3dd117e7d3c --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-29-17-51-11.gh-issue-144774.jPcixe.rst @@ -0,0 +1 @@ +Fix data race in :class:`BaseException` when an exception is copied while being mutated. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-06-01-19-21-01.gh-issue-150723.Hb3JDG.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-01-19-21-01.gh-issue-150723.Hb3JDG.rst new file mode 100644 index 00000000000..1920c8cdfce --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-01-19-21-01.gh-issue-150723.Hb3JDG.rst @@ -0,0 +1,4 @@ +Fix malformed perf jitdump thread ids on macOS. The ``thread_id`` field of the +``JR_CODE_LOAD`` record was written as a 64-bit value instead of the 32-bit +value required by the jitdump format, which shifted every following field and +prevented profilers from resolving Python frames. diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-06-01-19-24-12.gh-issue-150723.WlcL_-.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-01-19-24-12.gh-issue-150723.WlcL_-.rst new file mode 100644 index 00000000000..78c896b669c --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-01-19-24-12.gh-issue-150723.WlcL_-.rst @@ -0,0 +1,4 @@ +Fix perf jitdump timestamps on macOS. Events were stamped using +``CLOCK_MONOTONIC``, but macOS profilers timestamp their samples with +``mach_absolute_time()``. The mismatch prevented the JIT code mappings from +lining up with the samples, so no Python frame could be resolved. diff --git a/Misc/NEWS.d/next/Documentation/2023-09-16-23-42-27.gh-issue-109503.mZ-kdU.rst b/Misc/NEWS.d/next/Documentation/2023-09-16-23-42-27.gh-issue-109503.mZ-kdU.rst new file mode 100644 index 00000000000..c3c6c57569c --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2023-09-16-23-42-27.gh-issue-109503.mZ-kdU.rst @@ -0,0 +1,3 @@ +Fix documentation for :func:`shutil.move` on usage of +:func:`os.rename` since nonatomic move might be used even if the files are +on the same filesystem. Patch by Fang Li diff --git a/Misc/NEWS.d/next/Documentation/2026-05-23-17-27-41.gh-issue-150319.ol9tWK.rst b/Misc/NEWS.d/next/Documentation/2026-05-23-17-27-41.gh-issue-150319.ol9tWK.rst new file mode 100644 index 00000000000..d56ccbce2fa --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2026-05-23-17-27-41.gh-issue-150319.ol9tWK.rst @@ -0,0 +1,2 @@ +Generic builtin and standard library types now document the meaning of their +type parameters. diff --git a/Misc/NEWS.d/next/Library/2022-04-04-17-58-05.bpo-47216.gPyPte.rst b/Misc/NEWS.d/next/Library/2022-04-04-17-58-05.bpo-47216.gPyPte.rst new file mode 100644 index 00000000000..066e17c1c6e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-04-04-17-58-05.bpo-47216.gPyPte.rst @@ -0,0 +1,2 @@ +Added *mtime* option to :func:`gzip.open`, which will be passed +to the constructor of :class:`~gzip.GzipFile`. diff --git a/Misc/NEWS.d/next/Library/2023-02-26-14-07-18.gh-issue-91099._QPbEL.rst b/Misc/NEWS.d/next/Library/2023-02-26-14-07-18.gh-issue-91099._QPbEL.rst new file mode 100644 index 00000000000..d886e8ac603 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-02-26-14-07-18.gh-issue-91099._QPbEL.rst @@ -0,0 +1,2 @@ +:meth:`imaplib.IMAP4.login` now raises exceptions with :class:`str` instead of +:class:`bytes`. Patch by Florian Best. diff --git a/Misc/NEWS.d/next/Library/2024-03-17-22-16-53.gh-issue-115988.EshSDM.rst b/Misc/NEWS.d/next/Library/2024-03-17-22-16-53.gh-issue-115988.EshSDM.rst new file mode 100644 index 00000000000..4efde6a48c2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-03-17-22-16-53.gh-issue-115988.EshSDM.rst @@ -0,0 +1 @@ +:mod:`lzma` adds constants to support the newer BCJ filters for ARM64 and RISC-V. diff --git a/Misc/NEWS.d/next/Library/2024-07-02-20-57-43.gh-issue-121109.Tp6R2s.rst b/Misc/NEWS.d/next/Library/2024-07-02-20-57-43.gh-issue-121109.Tp6R2s.rst new file mode 100644 index 00000000000..eca6014e4a0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-07-02-20-57-43.gh-issue-121109.Tp6R2s.rst @@ -0,0 +1,2 @@ +Fix :mod:`tarfile` performance issue when reading archives in streaming mode +(e.g. ``r|*``). diff --git a/Misc/NEWS.d/next/Library/2024-11-02-02-02-31.gh-issue-107398.uUtA6Q.rst b/Misc/NEWS.d/next/Library/2024-11-02-02-02-31.gh-issue-107398.uUtA6Q.rst new file mode 100644 index 00000000000..d5af322d68d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-11-02-02-02-31.gh-issue-107398.uUtA6Q.rst @@ -0,0 +1 @@ +Fix :mod:`tarfile` stream mode exception when process the file with the gzip extra field. diff --git a/Misc/NEWS.d/next/Library/2025-05-01-16-44-16.gh-issue-72902.19qwJW.rst b/Misc/NEWS.d/next/Library/2025-05-01-16-44-16.gh-issue-72902.19qwJW.rst new file mode 100644 index 00000000000..2b7d8e44840 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-05-01-16-44-16.gh-issue-72902.19qwJW.rst @@ -0,0 +1,3 @@ +Optimize (~x1.4 speedup) :meth:`fractions.Fraction.from_decimal` and +:meth:`fractions.Fraction.from_float` for :class:`~decimal.Decimal` and +:class:`float` inputs, respectively. Patch by Sergey B Kirpichev. diff --git a/Misc/NEWS.d/next/Library/2025-05-19-20-29-35.gh-issue-133998.KmElUw.rst b/Misc/NEWS.d/next/Library/2025-05-19-20-29-35.gh-issue-133998.KmElUw.rst new file mode 100644 index 00000000000..77d92628bee --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-05-19-20-29-35.gh-issue-133998.KmElUw.rst @@ -0,0 +1,5 @@ +Fix :exc:`struct.error` exception when creating a file with +:class:`gzip.GzipFile` or compressing data with :func:`gzip.compress` +if the system time is outside the range 00:00:00 UTC, January 1, 1970 +through 06:28:15 UTC, February 7, 2106, or explicitly passed *mtime* +argument is outside the range ``0`` to ``2**32-1``. diff --git a/Misc/NEWS.d/next/Library/2025-05-19-21-08-25.gh-issue-134261.ravGYm.rst b/Misc/NEWS.d/next/Library/2025-05-19-21-08-25.gh-issue-134261.ravGYm.rst new file mode 100644 index 00000000000..bf552fee814 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-05-19-21-08-25.gh-issue-134261.ravGYm.rst @@ -0,0 +1 @@ +zip: On reproducible builds, ZipFile uses UTC instead of the local time when writing file datetimes to avoid underflows. diff --git a/Misc/NEWS.d/next/Library/2025-08-30-07-44-30.gh-issue-86533.pathlib.rst b/Misc/NEWS.d/next/Library/2025-08-30-07-44-30.gh-issue-86533.pathlib.rst new file mode 100644 index 00000000000..9c32671173e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-08-30-07-44-30.gh-issue-86533.pathlib.rst @@ -0,0 +1,4 @@ +The :func:`os.makedirs` function and :meth:`pathlib.Path.mkdir` method now have +a *parent_mode* parameter to specify the mode for intermediate directories when +creating parent directories. This allows one to match the behavior from Python +3.6 and earlier for :func:`os.makedirs`. diff --git a/Misc/NEWS.d/next/Library/2025-10-12-08-46-26.gh-issue-139398.hESOMl.rst b/Misc/NEWS.d/next/Library/2025-10-12-08-46-26.gh-issue-139398.hESOMl.rst new file mode 100644 index 00000000000..201b682d177 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-10-12-08-46-26.gh-issue-139398.hESOMl.rst @@ -0,0 +1,2 @@ +Add supported ``_sunder_`` names to the :func:`dir` method of the :mod:`enum` module +to support them in :term:`REPL` autocompletion. diff --git a/Misc/NEWS.d/next/Library/2025-10-20-09-12-18.gh-issue-140344.WjbYg-.rst b/Misc/NEWS.d/next/Library/2025-10-20-09-12-18.gh-issue-140344.WjbYg-.rst new file mode 100644 index 00000000000..ca3046941c6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-10-20-09-12-18.gh-issue-140344.WjbYg-.rst @@ -0,0 +1,11 @@ +The classes ``ast.slice``, ``ast.ExtSlice``, ``ast.Index``, ``ast.Suite``, ``ast.AugLoad``, +``ast.AugStore``, and ``ast.Param``, deprecated since Python 3.9, now issue +deprecation warnings on use. They are now scheduled for removal in Python 3.21. + +The ``dims`` property of ``ast.Tuple`` objects, deprecated since Python 3.9, +now issues a deprecation warning when accessed. The property is scheduled for +removal in Python 3.21. Use the (non-deprecated) ``elts`` property of +``ast.Tuple`` objects instead. + +The deprecated global names are also no longer imported by +``from ast import *``. diff --git a/Misc/NEWS.d/next/Library/2026-03-26-09-30-00.gh-issue-146452.Y2N6qZ8J.rst b/Misc/NEWS.d/next/Library/2026-03-26-09-30-00.gh-issue-146452.Y2N6qZ8J.rst new file mode 100644 index 00000000000..99f3cce3349 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-03-26-09-30-00.gh-issue-146452.Y2N6qZ8J.rst @@ -0,0 +1,2 @@ +Fix segfault in :mod:`pickle` when pickling a dictionary concurrently +mutated by another thread in the free-threaded build. diff --git a/Misc/NEWS.d/next/Library/2026-04-27-11-12-00.gh-issue-149046.74shDd.rst b/Misc/NEWS.d/next/Library/2026-04-27-11-12-00.gh-issue-149046.74shDd.rst new file mode 100644 index 00000000000..b05c4222e30 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-04-27-11-12-00.gh-issue-149046.74shDd.rst @@ -0,0 +1,2 @@ +:mod:`io`: Fix :class:`io.StringIO` serialization: no longer call ``str(obj)`` on :class:`str` +subclasses. Patch by Thomas Kowalski. diff --git a/Misc/NEWS.d/next/Library/2026-04-29-08-10-17.gh-issue-149056.jnaD4W.rst b/Misc/NEWS.d/next/Library/2026-04-29-08-10-17.gh-issue-149056.jnaD4W.rst new file mode 100644 index 00000000000..0026d02c876 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-04-29-08-10-17.gh-issue-149056.jnaD4W.rst @@ -0,0 +1,2 @@ +Fix :func:`json.load` not forwarding the *array_hook* argument to +:func:`json.loads`. Patch by Thomas Kowalski. diff --git a/Misc/NEWS.d/next/Library/2026-05-06-20-10-44.gh-issue-149464.3mPhcr.rst b/Misc/NEWS.d/next/Library/2026-05-06-20-10-44.gh-issue-149464.3mPhcr.rst new file mode 100644 index 00000000000..9f987d2a662 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-06-20-10-44.gh-issue-149464.3mPhcr.rst @@ -0,0 +1,3 @@ +Add :func:`os.pidfd_getfd` for duplicating a file descriptor from another +process via a pidfd. Available on Linux 5.6+. Patch by Maurycy +Pawłowski-Wieroński. diff --git a/Misc/NEWS.d/next/Library/2026-05-07-14-18-47.gh-issue-149489.bX9iHe.rst b/Misc/NEWS.d/next/Library/2026-05-07-14-18-47.gh-issue-149489.bX9iHe.rst new file mode 100644 index 00000000000..1550c893fd7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-07-14-18-47.gh-issue-149489.bX9iHe.rst @@ -0,0 +1,5 @@ +Fix :mod:`~xml.etree.ElementTree` serialization to HTML. The content of +comments, processing instructions and elements "xmp", "iframe", "noembed", +"noframes", and "plaintext" is no longer escaped. The "plaintext" element no +longer have the closing tag. Add support of empty attributes (with value +``None``). diff --git a/Misc/NEWS.d/next/Library/2026-05-08-07-51-54.gh-issue-80480.nnA4p1.rst b/Misc/NEWS.d/next/Library/2026-05-08-07-51-54.gh-issue-80480.nnA4p1.rst new file mode 100644 index 00000000000..2f7f15b169b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-08-07-51-54.gh-issue-80480.nnA4p1.rst @@ -0,0 +1,2 @@ +Remove deprecated ``'u'`` type code (:c:type:`wchar_t`) for the :mod:`array` +module. Use ``'w'`` format code instead (:c:type:`Py_UCS4`, always 4 bytes). diff --git a/Misc/NEWS.d/next/Library/2026-05-08-09-11-48.gh-issue-149534.Tw7eeY.rst b/Misc/NEWS.d/next/Library/2026-05-08-09-11-48.gh-issue-149534.Tw7eeY.rst new file mode 100644 index 00000000000..0938935a75d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-08-09-11-48.gh-issue-149534.Tw7eeY.rst @@ -0,0 +1 @@ +Fix merging of :class:`collections.defaultdict` and :class:`frozendict`. diff --git a/Misc/NEWS.d/next/Library/2026-05-08-16-44-20.gh-issue-149567.iiZKEj.rst b/Misc/NEWS.d/next/Library/2026-05-08-16-44-20.gh-issue-149567.iiZKEj.rst new file mode 100644 index 00000000000..e30563df79b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-08-16-44-20.gh-issue-149567.iiZKEj.rst @@ -0,0 +1,2 @@ +Remove the :exc:`!shutil.ExecError` exception which has been deprecated +since Python 3.14. diff --git a/Misc/NEWS.d/next/Library/2026-05-10-16-06-27.gh-issue-149609.yLKPXo.rst b/Misc/NEWS.d/next/Library/2026-05-10-16-06-27.gh-issue-149609.yLKPXo.rst new file mode 100644 index 00000000000..3acba7d2502 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-10-16-06-27.gh-issue-149609.yLKPXo.rst @@ -0,0 +1,3 @@ +Raise :exc:`DeprecationWarning` on using :class:`abc.abstractclassmethod`, +:class:`abc.abstractstaticmethod`, and :class:`abc.abstractproperty`, +schedule its removal for Python 3.21. diff --git a/Misc/NEWS.d/next/Library/2026-05-10-19-26-50.gh-issue-149584.x7Qm9A.rst b/Misc/NEWS.d/next/Library/2026-05-10-19-26-50.gh-issue-149584.x7Qm9A.rst new file mode 100644 index 00000000000..6734250fdd6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-10-19-26-50.gh-issue-149584.x7Qm9A.rst @@ -0,0 +1,4 @@ +Fix excessive overhead in the Tachyon profiler when inspecting a remote +process by avoiding repeated remote page-cache scans, batching predicted +remote reads, and reusing cached profiler result objects. Patch by Pablo +Galindo and Maurycy Pawłowski-Wieroński. diff --git a/Misc/NEWS.d/next/Library/2026-05-13-12-16-54.gh-issue-149473.nOQZqn.rst b/Misc/NEWS.d/next/Library/2026-05-13-12-16-54.gh-issue-149473.nOQZqn.rst new file mode 100644 index 00000000000..db624aba31a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-13-12-16-54.gh-issue-149473.nOQZqn.rst @@ -0,0 +1,2 @@ +Calling ``os.environ.clear()`` now emits ``os._clearenv`` auditing event. +Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Library/2026-05-13-23-18-39.gh-issue-149801.S_FfGr.rst b/Misc/NEWS.d/next/Library/2026-05-13-23-18-39.gh-issue-149801.S_FfGr.rst new file mode 100644 index 00000000000..f9e8538527d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-13-23-18-39.gh-issue-149801.S_FfGr.rst @@ -0,0 +1,2 @@ +Add IANA registered names and aliases with leading zeros before number (like +IBM00858, CP00858, IBM01140, CP01140) for corresponding codecs. diff --git a/Misc/NEWS.d/next/Library/2026-05-14-15-55-28.gh-issue-149816.ZaXQ0q.rst b/Misc/NEWS.d/next/Library/2026-05-14-15-55-28.gh-issue-149816.ZaXQ0q.rst new file mode 100644 index 00000000000..3ea70071ec3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-14-15-55-28.gh-issue-149816.ZaXQ0q.rst @@ -0,0 +1,2 @@ +Fix a race condition in ``_random.Random.__init__`` method in free-threading +mode. diff --git a/Misc/NEWS.d/next/Library/2026-05-14-17-01-19.gh-issue-62259.ytlFD5.rst b/Misc/NEWS.d/next/Library/2026-05-14-17-01-19.gh-issue-62259.ytlFD5.rst new file mode 100644 index 00000000000..d0af7736637 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-14-17-01-19.gh-issue-62259.ytlFD5.rst @@ -0,0 +1,9 @@ +Add support for multiple multi-byte encodings in the :mod:`XML parser +<xml.parsers.expat>`: "cp932", "cp949", "cp950", "Big5","EUC-JP", "GB2312", +"GBK", "johab", and "Shift_JIS". Add partial support (only BMP characters) +for multi-byte encodings "Big5-HKSCS", "EUC_JIS-2004", "EUC_JISX0213", +"Shift_JIS-2004", "Shift_JISX0213", "utf-8-sig" and non-standard aliases +like "UTF8" (without hyphen). The parser now raises :exc:`ValueError` for +known unsupported multi-byte encodings such us "ISO-2022-JP" or +"raw-unicode-escape" instead of failing later, when encounter non-ASCII +data. diff --git a/Misc/NEWS.d/next/Library/2026-05-15-16-28-00.gh-issue-149819.fixpth.rst b/Misc/NEWS.d/next/Library/2026-05-15-16-28-00.gh-issue-149819.fixpth.rst new file mode 100644 index 00000000000..66e6da0ecf0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-15-16-28-00.gh-issue-149819.fixpth.rst @@ -0,0 +1,4 @@ +Fix regression in :func:`site.addsitedir` where ``.pth`` files were no +longer processed in Python subprocesses. This happened because +:func:`site.main` seeded ``known_paths`` with entries inherited from +the parent process, causing ``addsitedir`` to skip ``.pth`` processing. diff --git a/Misc/NEWS.d/next/Library/2026-05-15-18-44-20.gh-issue-142349.fHK3v1.rst b/Misc/NEWS.d/next/Library/2026-05-15-18-44-20.gh-issue-142349.fHK3v1.rst new file mode 100644 index 00000000000..fa667c41109 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-15-18-44-20.gh-issue-142349.fHK3v1.rst @@ -0,0 +1 @@ +Add :keyword:`lazy` to the list of support topic by :func:`help`. diff --git a/Misc/NEWS.d/next/Library/2026-05-16-21-08-33.gh-issue-149921.I1yNML.rst b/Misc/NEWS.d/next/Library/2026-05-16-21-08-33.gh-issue-149921.I1yNML.rst new file mode 100644 index 00000000000..113bd1a802f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-16-21-08-33.gh-issue-149921.I1yNML.rst @@ -0,0 +1,2 @@ +Fix reference leaks in error paths of the :mod:`!_interpchannels` and +:mod:`!_interpqueues` extension modules. diff --git a/Misc/NEWS.d/next/Library/2026-05-16-22-00-00.gh-issue-146406.10e0da.rst b/Misc/NEWS.d/next/Library/2026-05-16-22-00-00.gh-issue-146406.10e0da.rst new file mode 100644 index 00000000000..8f65fecd85d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-16-22-00-00.gh-issue-146406.10e0da.rst @@ -0,0 +1,3 @@ +Add cross-language hints for ``.clear()`` on :class:`tuple`, +:class:`frozenset`, and :class:`frozendict`, suggesting the mutable +counterpart. Follow-up to :gh:`146406`. diff --git a/Misc/NEWS.d/next/Library/2026-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst b/Misc/NEWS.d/next/Library/2026-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst new file mode 100644 index 00000000000..2b71d9cf220 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-17-02-25-56.gh-issue-149571.LNyuWJ.rst @@ -0,0 +1,2 @@ +Fix the C implementation of :meth:`xml.etree.ElementTree.Element.itertext`: +it no longer emits text for comments and processing instructions. diff --git a/Misc/NEWS.d/next/Library/2026-05-17-22-37-02.gh-issue-88726.BAoL6j.rst b/Misc/NEWS.d/next/Library/2026-05-17-22-37-02.gh-issue-88726.BAoL6j.rst new file mode 100644 index 00000000000..ba9058d79c9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-17-22-37-02.gh-issue-88726.BAoL6j.rst @@ -0,0 +1,2 @@ +The :mod:`email` package now uses standard MIME charset names "gb2312" and +"big5" instead of non-standard names "eucgb2312_cn" and "big5_tw". diff --git a/Misc/NEWS.d/next/Library/2026-05-18-07-44-46.gh-issue-149995.vvtFHn.rst b/Misc/NEWS.d/next/Library/2026-05-18-07-44-46.gh-issue-149995.vvtFHn.rst new file mode 100644 index 00000000000..a8e412b578d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-18-07-44-46.gh-issue-149995.vvtFHn.rst @@ -0,0 +1 @@ +Update various docstrings in :mod:`typing`. diff --git a/Misc/NEWS.d/next/Library/2026-05-18-12-42-31.gh-issue-149816.F98iME.rst b/Misc/NEWS.d/next/Library/2026-05-18-12-42-31.gh-issue-149816.F98iME.rst new file mode 100644 index 00000000000..21e3ae0df57 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-18-12-42-31.gh-issue-149816.F98iME.rst @@ -0,0 +1,2 @@ +Fix a potential use after free condition in :func:`pickle.dumps` in free-threaded +mode when serializing lists. diff --git a/Misc/NEWS.d/next/Library/2026-05-18-13-43-06.gh-issue-79413.OpTXbV.rst b/Misc/NEWS.d/next/Library/2026-05-18-13-43-06.gh-issue-79413.OpTXbV.rst new file mode 100644 index 00000000000..8d62fda8b2b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-18-13-43-06.gh-issue-79413.OpTXbV.rst @@ -0,0 +1,3 @@ +Update :func:`dataclasses.make_dataclass` to add a *qualname* parameter. The +*qualname* parameter will be used to set the :attr:`!__qualname__` of the +created ``dataclass``. diff --git a/Misc/NEWS.d/next/Library/2026-05-18-17-17-20.gh-issue-149189.a8IooK.rst b/Misc/NEWS.d/next/Library/2026-05-18-17-17-20.gh-issue-149189.a8IooK.rst new file mode 100644 index 00000000000..bad027f2c71 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-18-17-17-20.gh-issue-149189.a8IooK.rst @@ -0,0 +1 @@ +Revert the changes to :mod:`pprint` defaults. Patch by Hugo van Kemenade. diff --git a/Misc/NEWS.d/next/Library/2026-05-18-22-45-54.gh-issue-149816.T68vc_.rst b/Misc/NEWS.d/next/Library/2026-05-18-22-45-54.gh-issue-149816.T68vc_.rst new file mode 100644 index 00000000000..9996cc7ec0e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-18-22-45-54.gh-issue-149816.T68vc_.rst @@ -0,0 +1 @@ +Fix race condition in :attr:`ssl.SSLContext.sni_callback` diff --git a/Misc/NEWS.d/next/Library/2026-05-19-12-00-00.gh-issue-149980.Kx7p2A.rst b/Misc/NEWS.d/next/Library/2026-05-19-12-00-00.gh-issue-149980.Kx7p2A.rst new file mode 100644 index 00000000000..b056f6a3cda --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-19-12-00-00.gh-issue-149980.Kx7p2A.rst @@ -0,0 +1,3 @@ +Fix :mod:`tarfile` so that GNU long-name directory entries have all +trailing slashes stripped from their names, matching the behavior for +short-name entries. Previously, only a single trailing slash was removed. diff --git a/Misc/NEWS.d/next/Library/2026-05-19-19-00-49.gh-issue-84353.ZU5zaQ.rst b/Misc/NEWS.d/next/Library/2026-05-19-19-00-49.gh-issue-84353.ZU5zaQ.rst new file mode 100644 index 00000000000..84fb12e2abd --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-19-19-00-49.gh-issue-84353.ZU5zaQ.rst @@ -0,0 +1,5 @@ +Preserve non-UTF-8 encoded filenames when appending to a +:class:`zipfile.ZipFile`. Previously, non-ASCII names stored in a legacy +encoding (without the UTF-8 flag bit set) could be corrupted when the +central directory was rewritten: they were decoded as cp437 and then +re-stored as UTF-8. diff --git a/Misc/NEWS.d/next/Library/2026-05-21-11-25-58.gh-issue-150175.8H4Caz.rst b/Misc/NEWS.d/next/Library/2026-05-21-11-25-58.gh-issue-150175.8H4Caz.rst new file mode 100644 index 00000000000..80fc80d4d50 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-21-11-25-58.gh-issue-150175.8H4Caz.rst @@ -0,0 +1,3 @@ +Fix race condition in :class:`unittest.mock.ThreadingMock` where +concurrent calls could lose increments to ``call_count`` and other +attributes due to a missing lock in ``_increment_mock_call``. diff --git a/Misc/NEWS.d/next/Library/2026-05-21-20-47-45.gh-issue-150157.ZvmO-bQZ.rst b/Misc/NEWS.d/next/Library/2026-05-21-20-47-45.gh-issue-150157.ZvmO-bQZ.rst new file mode 100644 index 00000000000..3a12e26cf73 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-21-20-47-45.gh-issue-150157.ZvmO-bQZ.rst @@ -0,0 +1,3 @@ +Fix a crash in free-threaded builds that occurs when pickling by name +objects without a ``__module__`` attribute while :data:`sys.modules` +is concurrently being modified. diff --git a/Misc/NEWS.d/next/Library/2026-05-22-15-30-00.gh-issue-132372.YP4a6x.rst b/Misc/NEWS.d/next/Library/2026-05-22-15-30-00.gh-issue-132372.YP4a6x.rst new file mode 100644 index 00000000000..bcd96e88eac --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-22-15-30-00.gh-issue-132372.YP4a6x.rst @@ -0,0 +1,2 @@ +Speed up :func:`logging.config.fileConfig` and +:func:`logging.config.dictConfig` when handling many existing loggers. diff --git a/Misc/NEWS.d/next/Library/2026-05-25-07-22-05.gh-issue-150372.9hLqhe.rst b/Misc/NEWS.d/next/Library/2026-05-25-07-22-05.gh-issue-150372.9hLqhe.rst new file mode 100644 index 00000000000..7b83bd8fe73 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-25-07-22-05.gh-issue-150372.9hLqhe.rst @@ -0,0 +1,2 @@ +:mod:`readline`: Fix a potential crash during tab completion caused by an +out-of-memory error during module initialization. diff --git a/Misc/NEWS.d/next/Library/2026-05-25-17-00-00.gh-issue-150406.jF3g63.rst b/Misc/NEWS.d/next/Library/2026-05-25-17-00-00.gh-issue-150406.jF3g63.rst new file mode 100644 index 00000000000..230e961abd3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-25-17-00-00.gh-issue-150406.jF3g63.rst @@ -0,0 +1,3 @@ +Fix a possible crash occurring during :mod:`socket` module initialization +when the system is out of memory on platforms without a reentrant +``gethostbyname``. diff --git a/Misc/NEWS.d/next/Library/2026-05-27-11-18-36.gh-issue-150228.pNPiO-.rst b/Misc/NEWS.d/next/Library/2026-05-27-11-18-36.gh-issue-150228.pNPiO-.rst new file mode 100644 index 00000000000..8c03989e90b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-27-11-18-36.gh-issue-150228.pNPiO-.rst @@ -0,0 +1,11 @@ +The new :class:`site.StartupState` class lets callers batch-process +:pep:`829` startup configuration files across multiple site directories +before any startup code runs, with public +:meth:`~site.StartupState.addsitedir`, +:meth:`~site.StartupState.addusersitepackages`, +:meth:`~site.StartupState.addsitepackages`, and +:meth:`~site.StartupState.process` methods. The signature of +:func:`site.addsitedir` is unchanged from Python 3.14. The +:data:`!defer_processing_start_files` argument and the +``process_startup_files()`` function added earlier in the 3.15 cycle have +been removed; use :class:`!site.StartupState` instead. diff --git a/Misc/NEWS.d/next/Library/2026-05-28-23-38-46.gh-issue-150478.qEr0E-.rst b/Misc/NEWS.d/next/Library/2026-05-28-23-38-46.gh-issue-150478.qEr0E-.rst new file mode 100644 index 00000000000..0ceae5e3139 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-28-23-38-46.gh-issue-150478.qEr0E-.rst @@ -0,0 +1,3 @@ +Add ``show_jit`` option to ``dis.dis`` to show JIT entry points in the +bytecode. This is useful for visualizing where JIT traces are entered from +the interpreter. diff --git a/Misc/NEWS.d/next/Library/2026-05-31-17-47-30.gh-issue-150685.EBB2mU.rst b/Misc/NEWS.d/next/Library/2026-05-31-17-47-30.gh-issue-150685.EBB2mU.rst new file mode 100644 index 00000000000..eb7f31112d0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-31-17-47-30.gh-issue-150685.EBB2mU.rst @@ -0,0 +1 @@ +Update bundled pip to 26.1.2 diff --git a/Misc/NEWS.d/next/Library/2026-06-01-08-12-34.gh-issue-150717.LVRJXH.rst b/Misc/NEWS.d/next/Library/2026-06-01-08-12-34.gh-issue-150717.LVRJXH.rst new file mode 100644 index 00000000000..da7171fcc72 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-06-01-08-12-34.gh-issue-150717.LVRJXH.rst @@ -0,0 +1,2 @@ +Avoid an unnecessary per-call memory allocation when matching :mod:`re` +patterns that have no capturing groups. Patch by Bernát Gábor. diff --git a/Misc/NEWS.d/next/Security/2026-04-27-16-36-11.gh-issue-149079.vKl-LM.rst b/Misc/NEWS.d/next/Security/2026-04-27-16-36-11.gh-issue-149079.vKl-LM.rst new file mode 100644 index 00000000000..4ed22b58f74 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2026-04-27-16-36-11.gh-issue-149079.vKl-LM.rst @@ -0,0 +1,5 @@ +Fix a potential denial of service in :func:`unicodedata.normalize`. The +canonical ordering step of Unicode normalization used a quadratic-time insertion +sort for reordering combining characters, which could be exploited with +crafted input containing many combining characters in non-canonical order. +Replaced with a linear-time counting sort for long runs. diff --git a/Misc/NEWS.d/next/Tests/2026-05-22-16-41-45.gh-issue-150114.UdMikH.rst b/Misc/NEWS.d/next/Tests/2026-05-22-16-41-45.gh-issue-150114.UdMikH.rst new file mode 100644 index 00000000000..a140bf92197 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2026-05-22-16-41-45.gh-issue-150114.UdMikH.rst @@ -0,0 +1,2 @@ +On Linux, regrtest now logs the total memory usage of all Python processes. +Read the private memory in ``/proc/pid/smaps``. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2026-05-25-15-39-53.gh-issue-150387.yzZ7jq.rst b/Misc/NEWS.d/next/Tests/2026-05-25-15-39-53.gh-issue-150387.yzZ7jq.rst new file mode 100644 index 00000000000..663a357a179 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2026-05-25-15-39-53.gh-issue-150387.yzZ7jq.rst @@ -0,0 +1,5 @@ +Fix hang in +``test.test_profiling.test_sampling_profiler.test_live_collector_ui.TestLiveModeErrors.test_run_failed_script_live`` +on slow buildbots. The test now always queues a final ``q`` keystroke so the +live TUI loop exits even when the profiler collects enough samples to enter +the post-finished input loop. diff --git a/Misc/NEWS.d/next/Tools-Demos/2026-05-22-18-51-09.gh-issue-150258.dh8GVK.rst b/Misc/NEWS.d/next/Tools-Demos/2026-05-22-18-51-09.gh-issue-150258.dh8GVK.rst new file mode 100644 index 00000000000..02cad6c4f53 --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2026-05-22-18-51-09.gh-issue-150258.dh8GVK.rst @@ -0,0 +1 @@ +Update the tooltip on the Tachyon flame graph to show both absolute and relative percentages. diff --git a/Misc/NEWS.d/next/Windows/2026-04-26-23-14-45.gh-issue-149029.oPTXP4.rst b/Misc/NEWS.d/next/Windows/2026-04-26-23-14-45.gh-issue-149029.oPTXP4.rst new file mode 100644 index 00000000000..6c4c6403b98 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2026-04-26-23-14-45.gh-issue-149029.oPTXP4.rst @@ -0,0 +1 @@ +Update Windows installer to ship with SQLite 3.53.1. diff --git a/Misc/NEWS.d/next/Windows/2026-04-29-14-44-51.gh-issue-138489.234aj6.rst b/Misc/NEWS.d/next/Windows/2026-04-29-14-44-51.gh-issue-138489.234aj6.rst new file mode 100644 index 00000000000..4afb8f737b6 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2026-04-29-14-44-51.gh-issue-138489.234aj6.rst @@ -0,0 +1,4 @@ +Windows distributions now include a :file:`build-details.json` file (see +:pep:`739`). The legacy installer does not install it, but all other +distributions from python.org and all preset configurations in the +``PC\layout`` script will include one. diff --git a/Misc/NEWS.d/next/Windows/2026-05-06-21-36-53.gh-issue-124111.m4OBX8.rst b/Misc/NEWS.d/next/Windows/2026-05-06-21-36-53.gh-issue-124111.m4OBX8.rst new file mode 100644 index 00000000000..9a57536f1dc --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2026-05-06-21-36-53.gh-issue-124111.m4OBX8.rst @@ -0,0 +1 @@ +Updated Windows builds to use Tcl/Tk 9.0.3. diff --git a/Misc/NEWS.d/next/Windows/2026-05-14-22-09-46.gh-issue-149786.UI-HZM.rst b/Misc/NEWS.d/next/Windows/2026-05-14-22-09-46.gh-issue-149786.UI-HZM.rst new file mode 100644 index 00000000000..64ca91a01f4 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2026-05-14-22-09-46.gh-issue-149786.UI-HZM.rst @@ -0,0 +1 @@ +Fixes virtual environment launchers on Windows free-threaded builds. diff --git a/Misc/NEWS.d/next/macOS/2026-04-26-23-15-09.gh-issue-149029.Lsx--T.rst b/Misc/NEWS.d/next/macOS/2026-04-26-23-15-09.gh-issue-149029.Lsx--T.rst new file mode 100644 index 00000000000..157a70f5e3c --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2026-04-26-23-15-09.gh-issue-149029.Lsx--T.rst @@ -0,0 +1 @@ +Update macOS installer to ship with SQLite version 3.53.1. diff --git a/Misc/NEWS.d/next/macOS/2026-05-31-10-40-00.gh-issue-150644.zLWyjj.rst b/Misc/NEWS.d/next/macOS/2026-05-31-10-40-00.gh-issue-150644.zLWyjj.rst new file mode 100644 index 00000000000..7452a7c765c --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2026-05-31-10-40-00.gh-issue-150644.zLWyjj.rst @@ -0,0 +1,3 @@ +When system logging is enabled (with ``config.use_system_logger``, messages +are now tagged as public. This allows the macOS 26 system logger to view +messages without special configuration. diff --git a/Misc/externals.spdx.json b/Misc/externals.spdx.json index 593fa01bf25..080330c1cb7 100644 --- a/Misc/externals.spdx.json +++ b/Misc/externals.spdx.json @@ -91,63 +91,63 @@ "checksums": [ { "algorithm": "SHA256", - "checksumValue": "fb5ab81f27612b0a7b4861ba655906c76dc85ee969e7a4905d2075aff931e8d0" + "checksumValue": "15e8fc7dc059f7b156e53629540951c2691acd71e027f6f8f66dacab5c66c884" } ], - "downloadLocation": "https://github.com/python/cpython-source-deps/archive/refs/tags/sqlite-3.50.4.0.tar.gz", + "downloadLocation": "https://github.com/python/cpython-source-deps/archive/refs/tags/sqlite-3.53.1.0.tar.gz", "externalRefs": [ { "referenceCategory": "SECURITY", - "referenceLocator": "cpe:2.3:a:sqlite:sqlite:3.50.4.0:*:*:*:*:*:*:*", + "referenceLocator": "cpe:2.3:a:sqlite:sqlite:3.53.1.0:*:*:*:*:*:*:*", "referenceType": "cpe23Type" } ], "licenseConcluded": "NOASSERTION", "name": "sqlite", "primaryPackagePurpose": "SOURCE", - "versionInfo": "3.50.4.0" + "versionInfo": "3.53.1.0" }, { - "SPDXID": "SPDXRef-PACKAGE-tcl-core", + "SPDXID": "SPDXRef-PACKAGE-tcl", "checksums": [ { "algorithm": "SHA256", - "checksumValue": "4c23f0dd3efcbe6f3a22c503a68d147617bb30c4f5290f1eb3eaacf0b460440b" + "checksumValue": "7a1d1f3a2b8f4484a9c2a027a157963c18f85a81785e85fcb5d1e3df6b6a4fd4" } ], - "downloadLocation": "https://github.com/python/cpython-source-deps/archive/refs/tags/tcl-core-8.6.15.0.tar.gz", + "downloadLocation": "https://github.com/python/cpython-source-deps/archive/refs/tags/tcl-9.0.3.0.tar.gz", "externalRefs": [ { "referenceCategory": "SECURITY", - "referenceLocator": "cpe:2.3:a:tcl_tk:tcl_tk:8.6.15.0:*:*:*:*:*:*:*", + "referenceLocator": "cpe:2.3:a:tcl_tk:tcl_tk:9.0.3.0:*:*:*:*:*:*:*", "referenceType": "cpe23Type" } ], "licenseConcluded": "NOASSERTION", - "name": "tcl-core", + "name": "tcl", "primaryPackagePurpose": "SOURCE", - "versionInfo": "8.6.15.0" + "versionInfo": "9.0.3.0" }, { "SPDXID": "SPDXRef-PACKAGE-tk", "checksums": [ { "algorithm": "SHA256", - "checksumValue": "0ae56d39bca92865f338529557a1e56d110594184b6dc5a91339c5675751e264" + "checksumValue": "54fb59df12c489c6264f5b7d3d7444b150d1e3d6561fd59cdb11483440cec000" } ], - "downloadLocation": "https://github.com/python/cpython-source-deps/archive/refs/tags/tk-8.6.15.0.tar.gz", + "downloadLocation": "https://github.com/python/cpython-source-deps/archive/refs/tags/tk-9.0.3.1.tar.gz", "externalRefs": [ { "referenceCategory": "SECURITY", - "referenceLocator": "cpe:2.3:a:tcl_tk:tcl_tk:8.6.15.0:*:*:*:*:*:*:*", + "referenceLocator": "cpe:2.3:a:tcl_tk:tcl_tk:9.0.3.1:*:*:*:*:*:*:*", "referenceType": "cpe23Type" } ], "licenseConcluded": "NOASSERTION", "name": "tk", "primaryPackagePurpose": "SOURCE", - "versionInfo": "8.6.15.0" + "versionInfo": "9.0.3.1" }, { "SPDXID": "SPDXRef-PACKAGE-xz", diff --git a/Misc/sbom.spdx.json b/Misc/sbom.spdx.json index 28a8b59f17c..5791592dc77 100644 --- a/Misc/sbom.spdx.json +++ b/Misc/sbom.spdx.json @@ -608,11 +608,11 @@ "checksums": [ { "algorithm": "SHA1", - "checksumValue": "0a0b7f3714167ad45ddf5a6a48d76f525a119c9c" + "checksumValue": "67a029736da5efe96f1b2d41b92f00934b955253" }, { "algorithm": "SHA256", - "checksumValue": "135d4afb4812468885c963c9c87a55ba5fae9181df4431af5fbad08588dda229" + "checksumValue": "0d80c2e3f5ff3b31ef0d435fc3196660df89ccf95bdcbb6545dc2f9df07bec9f" } ], "fileName": "Modules/_hacl/Lib_Memzero0.c" @@ -916,11 +916,11 @@ "checksums": [ { "algorithm": "SHA1", - "checksumValue": "63e47cc290c4ec887dca708000876ac37ee75ba0" + "checksumValue": "8d6a23f4e932cace0c67896bdda46cb24bf5e0ea" }, { "algorithm": "SHA256", - "checksumValue": "d09a6196d65c2645974100eb922002bd387d3ae13f2653780f82ed97a79af635" + "checksumValue": "25decbcadf1fef51f473daa4975a3754480fc903b03068bf95f149fb5349456e" } ], "fileName": "Modules/_hacl/libintvector.h" @@ -1024,14 +1024,14 @@ "checksums": [ { "algorithm": "SHA256", - "checksumValue": "61e48893f37cb2280d106cefacf6fb5afe84edf625fec39572d0ee94e1018f26" + "checksumValue": "d6db56a5d061dcc0890eabdbb5f58a9fa6c606d9f2fbbe9d626925b870ffadfb" } ], - "downloadLocation": "https://github.com/hacl-star/hacl-star/archive/8ba599b2f6c9701b3dc961db895b0856a2210f76.zip", + "downloadLocation": "https://github.com/hacl-star/hacl-star/archive/504c2987452f87fe44bce9b9f12e19d6e051761f.zip", "externalRefs": [ { "referenceCategory": "SECURITY", - "referenceLocator": "cpe:2.3:a:hacl-star:hacl-star:8ba599b2f6c9701b3dc961db895b0856a2210f76:*:*:*:*:*:*:*", + "referenceLocator": "cpe:2.3:a:hacl-star:hacl-star:504c2987452f87fe44bce9b9f12e19d6e051761f:*:*:*:*:*:*:*", "referenceType": "cpe23Type" } ], @@ -1039,7 +1039,7 @@ "name": "hacl-star", "originator": "Organization: HACL* Developers", "primaryPackagePurpose": "SOURCE", - "versionInfo": "8ba599b2f6c9701b3dc961db895b0856a2210f76" + "versionInfo": "504c2987452f87fe44bce9b9f12e19d6e051761f" }, { "SPDXID": "SPDXRef-PACKAGE-macholib", diff --git a/Modules/_abc.c b/Modules/_abc.c index 3c4e0280525..5826efbfecb 100644 --- a/Modules/_abc.c +++ b/Modules/_abc.c @@ -915,14 +915,14 @@ _abc.get_cache_token Returns the current ABC cache token. -The token is an opaque object (supporting equality testing) identifying the -current version of the ABC cache for virtual subclasses. The token changes -with every call to register() on any ABC. +The token is an opaque object (supporting equality testing) identifying +the current version of the ABC cache for virtual subclasses. The token +changes with every call to register() on any ABC. [clinic start generated code]*/ static PyObject * _abc_get_cache_token_impl(PyObject *module) -/*[clinic end generated code: output=c7d87841e033dacc input=70413d1c423ad9f9]*/ +/*[clinic end generated code: output=c7d87841e033dacc input=d87acc04492f6bf3]*/ { _abcmodule_state *state = get_abc_state(module); return PyLong_FromUnsignedLongLong(get_invalidation_counter(state)); diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 9679a7dde31..6620ee26449 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -955,12 +955,13 @@ Return the result this future represents. If the future has been cancelled, raises CancelledError. If the future's result isn't yet available, raises InvalidStateError. If -the future is done and has an exception set, this exception is raised. +the future is done and has an exception set, this exception is +raised. [clinic start generated code]*/ static PyObject * _asyncio_Future_result_impl(FutureObj *self) -/*[clinic end generated code: output=f35f940936a4b1e5 input=61d89f48e4c8b670]*/ +/*[clinic end generated code: output=f35f940936a4b1e5 input=ee20e126776cbb04]*/ { asyncio_state *state = get_asyncio_state_by_def((PyObject *)self); PyObject *result; @@ -1095,15 +1096,15 @@ _asyncio.Future.add_done_callback Add a callback to be run when the future becomes done. -The callback is called with a single argument - the future object. If -the future is already done when this is called, the callback is +The callback is called with a single argument - the future object. +If the future is already done when this is called, the callback is scheduled with call_soon. [clinic start generated code]*/ static PyObject * _asyncio_Future_add_done_callback_impl(FutureObj *self, PyTypeObject *cls, PyObject *fn, PyObject *context) -/*[clinic end generated code: output=922e9a4cbd601167 input=37d97f941beb7b3e]*/ +/*[clinic end generated code: output=922e9a4cbd601167 input=f4f6adb074cd3e0f]*/ { asyncio_state *state = get_asyncio_state_by_cls(cls); if (context == NULL) { @@ -1252,15 +1253,15 @@ _asyncio.Future.cancel Cancel the future and schedule callbacks. -If the future is already done or cancelled, return False. Otherwise, -change the future's state to cancelled, schedule the callbacks and -return True. +If the future is already done or cancelled, return False. +Otherwise, change the future's state to cancelled, schedule the +callbacks and return True. [clinic start generated code]*/ static PyObject * _asyncio_Future_cancel_impl(FutureObj *self, PyTypeObject *cls, PyObject *msg) -/*[clinic end generated code: output=074956f35904b034 input=44ab4003da839970]*/ +/*[clinic end generated code: output=074956f35904b034 input=0c9157547a964c4c]*/ { asyncio_state *state = get_asyncio_state_by_cls(cls); ENSURE_FUTURE_ALIVE(state, self) @@ -1292,13 +1293,13 @@ _asyncio.Future.done Return True if the future is done. -Done means either that a result / exception are available, or that the -future was cancelled. +Done means either that a result / exception are available, or that +the future was cancelled. [clinic start generated code]*/ static PyObject * _asyncio_Future_done_impl(FutureObj *self) -/*[clinic end generated code: output=244c5ac351145096 input=7204d3cc63bef7f3]*/ +/*[clinic end generated code: output=244c5ac351145096 input=acf2c2347f3c01d8]*/ { if (!future_is_alive(self) || self->fut_state == STATE_PENDING) { Py_RETURN_FALSE; @@ -1741,7 +1742,8 @@ static PyMethodDef FutureType_methods[] = { _ASYNCIO_FUTURE_DONE_METHODDEF _ASYNCIO_FUTURE_GET_LOOP_METHODDEF _ASYNCIO_FUTURE__MAKE_CANCELLED_ERROR_METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("Futures are generic over the type of their results")}, {NULL, NULL} /* Sentinel */ }; @@ -2926,7 +2928,8 @@ static PyMethodDef TaskType_methods[] = { _ASYNCIO_TASK_SET_NAME_METHODDEF _ASYNCIO_TASK_GET_CORO_METHODDEF _ASYNCIO_TASK_GET_CONTEXT_METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("Tasks are generic over the return type of their wrapped coroutines")}, {NULL, NULL} /* Sentinel */ }; @@ -3844,6 +3847,7 @@ _asyncio__leave_task_impl(PyObject *module, PyObject *loop, PyObject *task) /*[clinic input] +@permit_long_summary _asyncio._swap_current_task loop: object @@ -3858,7 +3862,7 @@ This is intended for use during eager coroutine execution. static PyObject * _asyncio__swap_current_task_impl(PyObject *module, PyObject *loop, PyObject *task) -/*[clinic end generated code: output=9f88de958df74c7e input=c9c72208d3d38b6c]*/ +/*[clinic end generated code: output=9f88de958df74c7e input=ec14ed25855e3068]*/ { _PyThreadStateImpl *ts = (_PyThreadStateImpl *)_PyThreadState_GET(); return swap_current_task(ts, loop, task); diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c index 329aa8e117e..a953f8bfa11 100644 --- a/Modules/_bisectmodule.c +++ b/Modules/_bisectmodule.c @@ -157,8 +157,8 @@ _bisect.bisect_right -> Py_ssize_t Return the index where to insert item x in list a, assuming a is sorted. The return value i is such that all e in a[:i] have e <= x, and all e in -a[i:] have e > x. So if x already appears in the list, a.insert(i, x) will -insert just after the rightmost x already there. +a[i:] have e > x. So if x already appears in the list, a.insert(i, x) +will insert just after the rightmost x already there. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. @@ -169,7 +169,7 @@ A custom key function can be supplied to customize the sort order. static Py_ssize_t _bisect_bisect_right_impl(PyObject *module, PyObject *a, PyObject *x, Py_ssize_t lo, Py_ssize_t hi, PyObject *key) -/*[clinic end generated code: output=3a4bc09cc7c8a73d input=b476bc45667273ac]*/ +/*[clinic end generated code: output=3a4bc09cc7c8a73d input=27717afe1a61bfaa]*/ { return internal_bisect_right(a, x, lo, hi, key); } @@ -338,8 +338,8 @@ _bisect.bisect_left -> Py_ssize_t Return the index where to insert item x in list a, assuming a is sorted. The return value i is such that all e in a[:i] have e < x, and all e in -a[i:] have e >= x. So if x already appears in the list, a.insert(i, x) will -insert just before the leftmost x already there. +a[i:] have e >= x. So if x already appears in the list, a.insert(i, x) +will insert just before the leftmost x already there. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. @@ -350,7 +350,7 @@ A custom key function can be supplied to customize the sort order. static Py_ssize_t _bisect_bisect_left_impl(PyObject *module, PyObject *a, PyObject *x, Py_ssize_t lo, Py_ssize_t hi, PyObject *key) -/*[clinic end generated code: output=70749d6e5cae9284 input=9b4d49b5ddecfad7]*/ +/*[clinic end generated code: output=70749d6e5cae9284 input=259fedbe35e882e1]*/ { return internal_bisect_left(a, x, lo, hi, key); } diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index 4bff90e6fd2..4cf8beed9ee 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -577,7 +577,6 @@ decompress(BZ2Decompressor *d, char *data, size_t len, Py_ssize_t max_length) } /*[clinic input] -@permit_long_docstring_body _bz2.BZ2Decompressor.decompress data: Py_buffer @@ -585,24 +584,25 @@ _bz2.BZ2Decompressor.decompress Decompress *data*, returning uncompressed data as bytes. -If *max_length* is nonnegative, returns at most *max_length* bytes of -decompressed data. If this limit is reached and further output can be -produced, *self.needs_input* will be set to ``False``. In this case, the next -call to *decompress()* may provide *data* as b'' to obtain more of the output. +If *max_length* is nonnegative, returns at most *max_length* bytes +of decompressed data. If this limit is reached and further output +can be produced, *self.needs_input* will be set to ``False``. In +this case, the next call to *decompress()* may provide *data* as b'' +to obtain more of the output. -If all of the input data was decompressed and returned (either because this -was less than *max_length* bytes, or because *max_length* was negative), -*self.needs_input* will be set to True. +If all of the input data was decompressed and returned (either +because this was less than *max_length* bytes, or because +*max_length* was negative), *self.needs_input* will be set to True. -Attempting to decompress data after the end of stream is reached raises an -EOFError. Any data found after the end of the stream is ignored and saved in -the unused_data attribute. +Attempting to decompress data after the end of stream is reached +raises an EOFError. Any data found after the end of the stream is +ignored and saved in the unused_data attribute. [clinic start generated code]*/ static PyObject * _bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=23e41045deb240a3 input=3703e78f91757655]*/ +/*[clinic end generated code: output=23e41045deb240a3 input=7f68faa9ff7a1b51]*/ { PyObject *result = NULL; diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index ff52bfd8291..272182f7bf4 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -55,14 +55,15 @@ _codecs.register Register a codec search function. -Search functions are expected to take one argument, the encoding name in -all lower case letters, and either return None, or a tuple of functions -(encoder, decoder, stream_reader, stream_writer) (or a CodecInfo object). +Search functions are expected to take one argument, the encoding +name in all lower case letters, and either return None, or a tuple +of functions (encoder, decoder, stream_reader, stream_writer) (or +a CodecInfo object). [clinic start generated code]*/ static PyObject * _codecs_register(PyObject *module, PyObject *search_function) -/*[clinic end generated code: output=d1bf21e99db7d6d3 input=369578467955cae4]*/ +/*[clinic end generated code: output=d1bf21e99db7d6d3 input=2321d8c8c0420dfc]*/ { if (PyCodec_Register(search_function)) return NULL; @@ -116,16 +117,16 @@ _codecs.encode Encodes obj using the codec registered for encoding. The default encoding is 'utf-8'. errors may be given to set a -different error handling scheme. Default is 'strict' meaning that encoding -errors raise a ValueError. Other possible values are 'ignore', 'replace' -and 'backslashreplace' as well as any other name registered with -codecs.register_error that can handle ValueErrors. +different error handling scheme. Default is 'strict' meaning that +encoding errors raise a ValueError. Other possible values are 'ignore', +'replace' and 'backslashreplace' as well as any other name registered +with codecs.register_error that can handle ValueErrors. [clinic start generated code]*/ static PyObject * _codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=385148eb9a067c86 input=cd5b685040ff61f0]*/ +/*[clinic end generated code: output=385148eb9a067c86 input=e5271d443e391d7f]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -143,16 +144,16 @@ _codecs.decode Decodes obj using the codec registered for encoding. Default encoding is 'utf-8'. errors may be given to set a -different error handling scheme. Default is 'strict' meaning that encoding -errors raise a ValueError. Other possible values are 'ignore', 'replace' -and 'backslashreplace' as well as any other name registered with -codecs.register_error that can handle ValueErrors. +different error handling scheme. Default is 'strict' meaning that +encoding errors raise a ValueError. Other possible values are 'ignore', +'replace' and 'backslashreplace' as well as any other name registered +with codecs.register_error that can handle ValueErrors. [clinic start generated code]*/ static PyObject * _codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=679882417dc3a0bd input=7702c0cc2fa1add6]*/ +/*[clinic end generated code: output=679882417dc3a0bd input=3e6254628f9ca538]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -962,14 +963,15 @@ _codecs.register_error Register the specified error handler under the name errors. handler must be a callable object, that will be called with an exception -instance containing information about the location of the encoding/decoding -error and must return a (replacement, new position) tuple. +instance containing information about the location of the +encoding/decoding error and must return a (replacement, new position) +tuple. [clinic start generated code]*/ static PyObject * _codecs_register_error_impl(PyObject *module, const char *errors, PyObject *handler) -/*[clinic end generated code: output=fa2f7d1879b3067d input=5e6709203c2e33fe]*/ +/*[clinic end generated code: output=fa2f7d1879b3067d input=5bea01dfe835d9d8]*/ { if (PyCodec_RegisterError(errors, handler)) return NULL; @@ -1007,13 +1009,13 @@ _codecs.lookup_error lookup_error(errors) -> handler -Return the error handler for the specified error handling name or raise a -LookupError, if no handler exists under this name. +Return the error handler for the specified error handling name or raise +a LookupError, if no handler exists under this name. [clinic start generated code]*/ static PyObject * _codecs_lookup_error_impl(PyObject *module, const char *name) -/*[clinic end generated code: output=087f05dc0c9a98cc input=4775dd65e6235aba]*/ +/*[clinic end generated code: output=087f05dc0c9a98cc input=86cfb6a7a9c67113]*/ { return PyCodec_LookupError(name); } diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 4ff05727ebc..c5d4879312b 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1077,6 +1077,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n) } /*[clinic input] +@permit_long_summary @critical_section _collections.deque.rotate as deque_rotate @@ -1089,7 +1090,7 @@ Rotate the deque n steps to the right. If n is negative, rotates left. static PyObject * deque_rotate_impl(dequeobject *deque, Py_ssize_t n) -/*[clinic end generated code: output=96c2402a371eb15d input=5bf834296246e002]*/ +/*[clinic end generated code: output=96c2402a371eb15d input=3543c3b2297de8f1]*/ { if (!_deque_rotate(deque, n)) Py_RETURN_NONE; @@ -1854,7 +1855,7 @@ static PyMethodDef deque_methods[] = { DEQUE_ROTATE_METHODDEF DEQUE___SIZEOF___METHODDEF {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, PyDoc_STR("deques are generic over the type of their contents")}, {NULL, NULL} /* sentinel */ }; @@ -2330,6 +2331,12 @@ defdict_reduce(PyObject *op, PyObject *Py_UNUSED(dummy)) return result; } + +PyDoc_STRVAR(defdict_class_getitem_doc, +"defaultdicts are generic over two types, signifying (respectively) the types \ +of the dictionary's keys and values"); + + static PyMethodDef defdict_methods[] = { {"__missing__", defdict_missing, METH_O, defdict_missing_doc}, @@ -2340,7 +2347,7 @@ static PyMethodDef defdict_methods[] = { {"__reduce__", defdict_reduce, METH_NOARGS, reduce_doc}, {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, - PyDoc_STR("See PEP 585")}, + defdict_class_getitem_doc}, {NULL} }; @@ -2420,7 +2427,7 @@ defdict_or(PyObject* left, PyObject* right) self = right; other = left; } - if (!PyDict_Check(other)) { + if (!PyAnyDict_Check(other)) { Py_RETURN_NOTIMPLEMENTED; } // Like copy(), this calls the object's class. diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 98ac821c525..e891249668c 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -708,7 +708,7 @@ StructUnionType_paramfunc(ctypes_state *st, CDataObject *self) } assert(stginfo); /* Cannot be NULL for structure/union instances */ - parg->tag = 'V'; + parg->tag = "V"; parg->pffi_type = &stginfo->ffi_type_pointer; parg->value.p = ptr; parg->size = self->b_size; @@ -1282,7 +1282,7 @@ PyCPointerType_paramfunc(ctypes_state *st, CDataObject *self) if (parg == NULL) return NULL; - parg->tag = 'P'; + parg->tag = "P"; parg->pffi_type = &ffi_type_pointer; parg->obj = Py_NewRef(self); parg->value.p = *(void **)self->b_ptr; @@ -1703,7 +1703,7 @@ PyCArrayType_paramfunc(ctypes_state *st, CDataObject *self) PyCArgObject *p = PyCArgObject_new(st); if (p == NULL) return NULL; - p->tag = 'P'; + p->tag = "P"; p->pffi_type = &ffi_type_pointer; p->value.p = (char *)self->b_ptr; p->obj = Py_NewRef(self); @@ -1909,7 +1909,7 @@ c_wchar_p_from_param_impl(PyObject *type, PyTypeObject *cls, PyObject *value) if (parg == NULL) return NULL; parg->pffi_type = &ffi_type_pointer; - parg->tag = 'Z'; + parg->tag = "Z"; parg->obj = fd->setfunc(&parg->value, value, 0); if (parg->obj == NULL) { Py_DECREF(parg); @@ -1998,7 +1998,7 @@ c_char_p_from_param_impl(PyObject *type, PyTypeObject *cls, PyObject *value) if (parg == NULL) return NULL; parg->pffi_type = &ffi_type_pointer; - parg->tag = 'z'; + parg->tag = "z"; parg->obj = fd->setfunc(&parg->value, value, 0); if (parg->obj == NULL) { Py_DECREF(parg); @@ -2092,7 +2092,7 @@ c_void_p_from_param_impl(PyObject *type, PyTypeObject *cls, PyObject *value) if (parg == NULL) return NULL; parg->pffi_type = &ffi_type_pointer; - parg->tag = 'P'; + parg->tag = "P"; parg->obj = fd->setfunc(&parg->value, value, sizeof(void*)); if (parg->obj == NULL) { Py_DECREF(parg); @@ -2110,7 +2110,7 @@ c_void_p_from_param_impl(PyObject *type, PyTypeObject *cls, PyObject *value) if (parg == NULL) return NULL; parg->pffi_type = &ffi_type_pointer; - parg->tag = 'z'; + parg->tag = "z"; parg->obj = fd->setfunc(&parg->value, value, 0); if (parg->obj == NULL) { Py_DECREF(parg); @@ -2127,7 +2127,7 @@ c_void_p_from_param_impl(PyObject *type, PyTypeObject *cls, PyObject *value) if (parg == NULL) return NULL; parg->pffi_type = &ffi_type_pointer; - parg->tag = 'Z'; + parg->tag = "Z"; parg->obj = fd->setfunc(&parg->value, value, 0); if (parg->obj == NULL) { Py_DECREF(parg); @@ -2152,7 +2152,7 @@ c_void_p_from_param_impl(PyObject *type, PyTypeObject *cls, PyObject *value) if (PyCArg_CheckExact(st, value)) { /* byref(c_xxx()) */ PyCArgObject *a = (PyCArgObject *)value; - if (a->tag == 'P') { + if (strcmp(a->tag, "P") == 0) { return Py_NewRef(value); } } @@ -2165,7 +2165,7 @@ c_void_p_from_param_impl(PyObject *type, PyTypeObject *cls, PyObject *value) if (parg == NULL) return NULL; parg->pffi_type = &ffi_type_pointer; - parg->tag = 'P'; + parg->tag = "P"; Py_INCREF(value); // Function pointers don't change their contents, no need to lock parg->value.p = *(void **)func->b_ptr; @@ -2191,7 +2191,7 @@ c_void_p_from_param_impl(PyObject *type, PyTypeObject *cls, PyObject *value) if (parg == NULL) return NULL; parg->pffi_type = &ffi_type_pointer; - parg->tag = 'Z'; + parg->tag = "Z"; parg->obj = Py_NewRef(value); /* Remember: b_ptr points to where the pointer is stored! */ Py_BEGIN_CRITICAL_SECTION(value); @@ -2332,7 +2332,8 @@ PyCSimpleType_paramfunc(ctypes_state *st, CDataObject *self) if (parg == NULL) return NULL; - parg->tag = fmt[0]; + assert(strcmp(fd->code, fmt) == 0); + parg->tag = fd->code; parg->pffi_type = fd->pffi_type; parg->obj = Py_NewRef(self); memcpy(&parg->value, self->b_ptr, self->b_size); @@ -2578,7 +2579,8 @@ PyCSimpleType_from_param_impl(PyObject *type, PyTypeObject *cls, if (parg == NULL) return NULL; - parg->tag = fmt[0]; + assert(strcmp(fd->code, fmt) == 0); + parg->tag = fd->code; parg->pffi_type = fd->pffi_type; parg->obj = fd->setfunc(&parg->value, value, info->size); if (parg->obj) @@ -2832,7 +2834,7 @@ PyCFuncPtrType_paramfunc(ctypes_state *st, CDataObject *self) if (parg == NULL) return NULL; - parg->tag = 'P'; + parg->tag = "P"; parg->pffi_type = &ffi_type_pointer; parg->obj = Py_NewRef(self); parg->value.p = *(void **)self->b_ptr; @@ -4303,7 +4305,7 @@ _byref(ctypes_state *st, PyObject *obj) return NULL; } - parg->tag = 'P'; + parg->tag = "P"; parg->pffi_type = &ffi_type_pointer; parg->obj = obj; parg->value.p = ((CDataObject *)obj)->b_ptr; @@ -5303,7 +5305,7 @@ Array_length(PyObject *myself) static PyMethodDef Array_methods[] = { {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, PyDoc_STR("Arrays are generic over the type of their elements")}, { NULL, NULL } }; diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c index a0c9d8b70fe..991ff0d675c 100644 --- a/Modules/_ctypes/_ctypes_test.c +++ b/Modules/_ctypes/_ctypes_test.c @@ -446,7 +446,7 @@ EXPORT(char *)my_strtok(char *token, const char *delim) return strtok(token, delim); } -EXPORT(char *)my_strchr(const char *s, int c) +EXPORT(const char *) my_strchr(const char *s, int c) { return strchr(s, c); } diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index e208e27c5db..e453cfeec9c 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -468,7 +468,7 @@ PyCArgObject_new(ctypes_state *st) if (p == NULL) return NULL; p->pffi_type = NULL; - p->tag = '\0'; + p->tag = ""; p->obj = NULL; memset(&p->value, 0, sizeof(p->value)); PyObject_GC_Track(p); @@ -512,45 +512,50 @@ static PyObject * PyCArg_repr(PyObject *op) { PyCArgObject *self = _PyCArgObject_CAST(op); - switch(self->tag) { + + if (strlen(self->tag) != 1) { + goto generic; + } + + switch(self->tag[0]) { case 'b': case 'B': - return PyUnicode_FromFormat("<cparam '%c' (%d)>", + return PyUnicode_FromFormat("<cparam '%s' (%d)>", self->tag, self->value.b); case 'h': case 'H': - return PyUnicode_FromFormat("<cparam '%c' (%d)>", + return PyUnicode_FromFormat("<cparam '%s' (%d)>", self->tag, self->value.h); case 'i': case 'I': - return PyUnicode_FromFormat("<cparam '%c' (%d)>", + return PyUnicode_FromFormat("<cparam '%s' (%d)>", self->tag, self->value.i); case 'l': case 'L': - return PyUnicode_FromFormat("<cparam '%c' (%ld)>", + return PyUnicode_FromFormat("<cparam '%s' (%ld)>", self->tag, self->value.l); case 'q': case 'Q': - return PyUnicode_FromFormat("<cparam '%c' (%lld)>", + return PyUnicode_FromFormat("<cparam '%s' (%lld)>", self->tag, self->value.q); case 'd': case 'f': { - PyObject *f = PyFloat_FromDouble((self->tag == 'f') ? self->value.f : self->value.d); + PyObject *f = PyFloat_FromDouble((strcmp(self->tag, "f") == 0) ? self->value.f : self->value.d); if (f == NULL) { return NULL; } - PyObject *result = PyUnicode_FromFormat("<cparam '%c' (%R)>", self->tag, f); + PyObject *result = PyUnicode_FromFormat("<cparam '%s' (%R)>", self->tag, f); Py_DECREF(f); return result; } case 'c': if (is_literal_char((unsigned char)self->value.c)) { - return PyUnicode_FromFormat("<cparam '%c' ('%c')>", + return PyUnicode_FromFormat("<cparam '%s' ('%c')>", self->tag, self->value.c); } else { - return PyUnicode_FromFormat("<cparam '%c' ('\\x%02x')>", + return PyUnicode_FromFormat("<cparam '%s' ('\\x%02x')>", self->tag, (unsigned char)self->value.c); } @@ -561,20 +566,16 @@ PyCArg_repr(PyObject *op) case 'z': case 'Z': case 'P': - return PyUnicode_FromFormat("<cparam '%c' (%p)>", + return PyUnicode_FromFormat("<cparam '%s' (%p)>", self->tag, self->value.p); - break; default: - if (is_literal_char((unsigned char)self->tag)) { - return PyUnicode_FromFormat("<cparam '%c' at %p>", - (unsigned char)self->tag, (void *)self); - } - else { - return PyUnicode_FromFormat("<cparam 0x%02x at %p>", - (unsigned char)self->tag, (void *)self); - } + break; } + +generic: + return PyUnicode_FromFormat("<cparam '%s' at %p>", + self->tag, (void *)self); } static PyMemberDef PyCArgType_members[] = { @@ -1807,7 +1808,7 @@ _ctypes_byref_impl(PyObject *module, PyObject *obj, Py_ssize_t offset) if (parg == NULL) return NULL; - parg->tag = 'P'; + parg->tag = "P"; parg->pffi_type = &ffi_type_pointer; parg->obj = Py_NewRef(obj); parg->value.p = (char *)((CDataObject *)obj)->b_ptr + offset; diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index 7b6b7f08582..248559aa364 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -494,7 +494,7 @@ PyObject *_ctypes_callproc(ctypes_state *st, struct tagPyCArgObject { PyObject_HEAD ffi_type *pffi_type; - char tag; + const char *tag; union { char c; char b; @@ -511,7 +511,7 @@ struct tagPyCArgObject { long double G[2]; } value; PyObject *obj; - Py_ssize_t size; /* for the 'V' tag */ + Py_ssize_t size; /* for the "V" tag */ }; #define _PyCArgObject_CAST(op) ((PyCArgObject *)(op)) diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c index 83802605e1f..52411e41353 100644 --- a/Modules/_curses_panel.c +++ b/Modules/_curses_panel.c @@ -360,17 +360,17 @@ _curses_panel_panel_bottom_impl(PyCursesPanelObject *self) } /*[clinic input] -@permit_long_docstring_body _curses_panel.panel.hide Hide the panel. -This does not delete the object, it just makes the window on screen invisible. +This does not delete the object, it just makes the window on screen +invisible. [clinic start generated code]*/ static PyObject * _curses_panel_panel_hide_impl(PyCursesPanelObject *self) -/*[clinic end generated code: output=a7bbbd523e1eab49 input=9071b463a39a1a6a]*/ +/*[clinic end generated code: output=a7bbbd523e1eab49 input=9456aca9b264dde1]*/ { int rtn = hide_panel(self->pan); return curses_panel_panel_check_err(self, rtn, "hide_panel", "hide"); @@ -772,12 +772,13 @@ _curses_panel.update_panels Updates the virtual screen after changes in the panel stack. -This does not call curses.doupdate(), so you'll have to do this yourself. +This does not call curses.doupdate(), so you'll have to do this +yourself. [clinic start generated code]*/ static PyObject * _curses_panel_update_panels_impl(PyObject *module) -/*[clinic end generated code: output=2f3b4c2e03d90ded input=5299624c9a708621]*/ +/*[clinic end generated code: output=2f3b4c2e03d90ded input=0d0db79f05ec3ef4]*/ { PyCursesInitialised; update_panels(); diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 000d7318557..4438e384aab 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -1359,7 +1359,6 @@ _curses_window_bkgdset_impl(PyCursesWindowObject *self, PyObject *ch, } /*[clinic input] -@permit_long_docstring_body _curses.window.border ls: object(c_default="NULL") = _curses.ACS_VLINE @@ -1382,10 +1381,10 @@ _curses.window.border Draw a border around the edges of the window. -Each parameter specifies the character to use for a specific part of the -border. The characters can be specified as integers or as one-character -strings. A 0 value for any parameter will cause the default character to be -used for that parameter. +Each parameter specifies the character to use for a specific part of +the border. The characters can be specified as integers or as +one-character strings. A 0 value for any parameter will cause the +default character to be used for that parameter. [clinic start generated code]*/ static PyObject * @@ -1393,7 +1392,7 @@ _curses_window_border_impl(PyCursesWindowObject *self, PyObject *ls, PyObject *rs, PyObject *ts, PyObject *bs, PyObject *tl, PyObject *tr, PyObject *bl, PyObject *br) -/*[clinic end generated code: output=670ef38d3d7c2aa3 input=adaafca87488ee35]*/ +/*[clinic end generated code: output=670ef38d3d7c2aa3 input=42568c1458221d24]*/ { chtype ch[8]; int i, rtn; @@ -1436,14 +1435,15 @@ _curses.window.box Draw a border around the edges of the window. -Similar to border(), but both ls and rs are verch and both ts and bs are -horch. The default corner characters are always used by this function. +Similar to border(), but both ls and rs are verch and both ts and bs +are horch. The default corner characters are always used by this +function. [clinic start generated code]*/ static PyObject * _curses_window_box_impl(PyCursesWindowObject *self, int group_right_1, PyObject *verch, PyObject *horch) -/*[clinic end generated code: output=f3fcb038bb287192 input=f00435f9c8c98f60]*/ +/*[clinic end generated code: output=f3fcb038bb287192 input=e11acb7dbf6790b6]*/ { chtype ch1 = 0, ch2 = 0; if (group_right_1) { @@ -1596,7 +1596,6 @@ _curses_window_delch_impl(PyCursesWindowObject *self, int group_right_1, } /*[clinic input] -@permit_long_docstring_body _curses.window.derwin [ @@ -1613,15 +1612,15 @@ _curses.window.derwin Create a sub-window (window-relative coordinates). -derwin() is the same as calling subwin(), except that begin_y and begin_x -are relative to the origin of the window, rather than relative to the entire -screen. +derwin() is the same as calling subwin(), except that begin_y and +begin_x are relative to the origin of the window, rather than +relative to the entire screen. [clinic start generated code]*/ static PyObject * _curses_window_derwin_impl(PyCursesWindowObject *self, int group_left_1, int nlines, int ncols, int begin_y, int begin_x) -/*[clinic end generated code: output=7924b112d9f70d6e input=ebe95ded1c284c8e]*/ +/*[clinic end generated code: output=7924b112d9f70d6e input=6efb50722be444ba]*/ { WINDOW *win; @@ -1731,7 +1730,6 @@ curses_check_signals_on_input_error(PyCursesWindowObject *self, } /*[clinic input] -@permit_long_docstring_body _curses.window.getch [ @@ -1744,15 +1742,16 @@ _curses.window.getch Get a character code from terminal keyboard. -The integer returned does not have to be in ASCII range: function keys, -keypad keys and so on return numbers higher than 256. In no-delay mode, -1 -is returned if there is no input, else getch() waits until a key is pressed. +The integer returned does not have to be in ASCII range: function +keys, keypad keys and so on return numbers higher than 256. In +no-delay mode, -1 is returned if there is no input, else getch() +waits until a key is pressed. [clinic start generated code]*/ static PyObject * _curses_window_getch_impl(PyCursesWindowObject *self, int group_right_1, int y, int x) -/*[clinic end generated code: output=e1639e87d545e676 input=9a053077373e2a30]*/ +/*[clinic end generated code: output=e1639e87d545e676 input=0dc5ff40e079787a]*/ { int rtn; @@ -1779,7 +1778,6 @@ _curses_window_getch_impl(PyCursesWindowObject *self, int group_right_1, } /*[clinic input] -@permit_long_docstring_body _curses.window.getkey [ @@ -1792,15 +1790,16 @@ _curses.window.getkey Get a character (string) from terminal keyboard. -Returning a string instead of an integer, as getch() does. Function keys, -keypad keys and other special keys return a multibyte string containing the -key name. In no-delay mode, an exception is raised if there is no input. +Returning a string instead of an integer, as getch() does. Function +keys, keypad keys and other special keys return a multibyte string +containing the key name. In no-delay mode, an exception is raised +if there is no input. [clinic start generated code]*/ static PyObject * _curses_window_getkey_impl(PyCursesWindowObject *self, int group_right_1, int y, int x) -/*[clinic end generated code: output=8490a182db46b10f input=5177f03fb6c31ea6]*/ +/*[clinic end generated code: output=8490a182db46b10f input=bd24a7da1ed9c73b]*/ { int rtn; @@ -2021,7 +2020,6 @@ _curses_window_hline_impl(PyCursesWindowObject *self, int group_left_1, } /*[clinic input] -@permit_long_docstring_body _curses.window.insch [ @@ -2042,15 +2040,15 @@ _curses.window.insch Insert a character before the current or specified position. -All characters to the right of the cursor are shifted one position right, with -the rightmost characters on the line being lost. +All characters to the right of the cursor are shifted one position +right, with the rightmost characters on the line being lost. [clinic start generated code]*/ static PyObject * _curses_window_insch_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *ch, int group_right_1, long attr) -/*[clinic end generated code: output=ade8cfe3a3bf3e34 input=3f2a230cb09fed5a]*/ +/*[clinic end generated code: output=ade8cfe3a3bf3e34 input=d662a0f96f33e15a]*/ { int rtn; chtype ch_ = 0; @@ -2072,7 +2070,6 @@ _curses_window_insch_impl(PyCursesWindowObject *self, int group_left_1, } /*[clinic input] -@permit_long_docstring_body _curses.window.inch [ @@ -2085,13 +2082,14 @@ _curses.window.inch Return the character at the given position in the window. -The bottom 8 bits are the character proper, and upper bits are the attributes. +The bottom 8 bits are the character proper, and upper bits are the +attributes. [clinic start generated code]*/ static PyObject * _curses_window_inch_impl(PyCursesWindowObject *self, int group_right_1, int y, int x) -/*[clinic end generated code: output=97ca8581baaafd06 input=a5846f315464dc86]*/ +/*[clinic end generated code: output=97ca8581baaafd06 input=7a03956d94dc9a69]*/ { chtype rtn; const char *funcname; @@ -2183,18 +2181,18 @@ _curses.window.insstr Insert the string before the current or specified position. -Insert a character string (as many characters as will fit on the line) -before the character under the cursor. All characters to the right of -the cursor are shifted right, with the rightmost characters on the line -being lost. The cursor position does not change (after moving to y, x, -if specified). +Insert a character string (as many characters as will fit on the +line) before the character under the cursor. All characters to the +right of the cursor are shifted right, with the rightmost characters +on the line being lost. The cursor position does not change (after +moving to y, x, if specified). [clinic start generated code]*/ static PyObject * _curses_window_insstr_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *str, int group_right_1, long attr) -/*[clinic end generated code: output=c259a5265ad0b777 input=6827cddc6340a7f3]*/ +/*[clinic end generated code: output=c259a5265ad0b777 input=dbfbdd3892155ea6]*/ { int rtn; int strtype; @@ -2260,7 +2258,6 @@ _curses_window_insstr_impl(PyCursesWindowObject *self, int group_left_1, } /*[clinic input] -@permit_long_docstring_body _curses.window.insnstr [ @@ -2284,19 +2281,19 @@ _curses.window.insnstr Insert at most n characters of the string. -Insert a character string (as many characters as will fit on the line) -before the character under the cursor, up to n characters. If n is zero -or negative, the entire string is inserted. All characters to the right -of the cursor are shifted right, with the rightmost characters on the line -being lost. The cursor position does not change (after moving to y, x, if -specified). +Insert a character string (as many characters as will fit on the +line) before the character under the cursor, up to n characters. If +n is zero or negative, the entire string is inserted. All +characters to the right of the cursor are shifted right, with the +rightmost characters on the line being lost. The cursor position +does not change (after moving to y, x, if specified). [clinic start generated code]*/ static PyObject * _curses_window_insnstr_impl(PyCursesWindowObject *self, int group_left_1, int y, int x, PyObject *str, int n, int group_right_1, long attr) -/*[clinic end generated code: output=971a32ea6328ec8b input=dcdc554102fbcd5d]*/ +/*[clinic end generated code: output=971a32ea6328ec8b input=fd0a9b65b84b385f]*/ { int rtn; int strtype; @@ -2361,7 +2358,7 @@ _curses_window_insnstr_impl(PyCursesWindowObject *self, int group_left_1, } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary _curses.window.is_linetouched line: int @@ -2370,12 +2367,13 @@ _curses.window.is_linetouched Return True if the specified line was modified, otherwise return False. -Raise a curses.error exception if line is not valid for the given window. +Raise a curses.error exception if line is not valid for the given +window. [clinic start generated code]*/ static PyObject * _curses_window_is_linetouched_impl(PyCursesWindowObject *self, int line) -/*[clinic end generated code: output=ad4a4edfee2db08c input=af71c040b951c467]*/ +/*[clinic end generated code: output=ad4a4edfee2db08c input=18924dfac25ab7f1]*/ { int erg; erg = is_linetouched(self->win, line); @@ -2388,7 +2386,6 @@ _curses_window_is_linetouched_impl(PyCursesWindowObject *self, int line) #ifdef py_is_pad /*[clinic input] -@permit_long_docstring_body _curses.window.noutrefresh [ @@ -2403,9 +2400,9 @@ _curses.window.noutrefresh Mark for refresh but wait. -This function updates the data structure representing the desired state of the -window, but does not force an update of the physical screen. To accomplish -that, call doupdate(). +This function updates the data structure representing the desired +state of the window, but does not force an update of the physical +screen. To accomplish that, call doupdate(). [clinic start generated code]*/ static PyObject * @@ -2413,22 +2410,21 @@ _curses_window_noutrefresh_impl(PyCursesWindowObject *self, int group_right_1, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) -/*[clinic end generated code: output=809a1f3c6a03e23e input=b39fe8fc79b9980b]*/ +/*[clinic end generated code: output=809a1f3c6a03e23e input=8b4c74bf55008803]*/ #else /*[clinic input] -@permit_long_docstring_body _curses.window.noutrefresh Mark for refresh but wait. -This function updates the data structure representing the desired state of the -window, but does not force an update of the physical screen. To accomplish -that, call doupdate(). +This function updates the data structure representing the desired +state of the window, but does not force an update of the physical +screen. To accomplish that, call doupdate(). [clinic start generated code]*/ static PyObject * _curses_window_noutrefresh_impl(PyCursesWindowObject *self) -/*[clinic end generated code: output=6ef6dec666643fee input=6a9f59ae5e4c139e]*/ +/*[clinic end generated code: output=6ef6dec666643fee input=a7c6306f8af9d0dd]*/ #endif { int rtn; @@ -2461,7 +2457,6 @@ _curses_window_noutrefresh_impl(PyCursesWindowObject *self) } /*[clinic input] -@permit_long_docstring_body _curses.window.overlay destwin: object(type="PyCursesWindowObject *", subclass_of="clinic_state()->window_type") @@ -2478,14 +2473,15 @@ _curses.window.overlay Overlay the window on top of destwin. -The windows need not be the same size, only the overlapping region is copied. -This copy is non-destructive, which means that the current background -character does not overwrite the old contents of destwin. +The windows need not be the same size, only the overlapping region +is copied. This copy is non-destructive, which means that the +current background character does not overwrite the old contents of +destwin. -To get fine-grained control over the copied region, the second form of -overlay() can be used. sminrow and smincol are the upper-left coordinates -of the source window, and the other variables mark a rectangle in the -destination window. +To get fine-grained control over the copied region, the second form +of overlay() can be used. sminrow and smincol are the upper-left +coordinates of the source window, and the other variables mark +a rectangle in the destination window. [clinic start generated code]*/ static PyObject * @@ -2493,7 +2489,7 @@ _curses_window_overlay_impl(PyCursesWindowObject *self, PyCursesWindowObject *destwin, int group_right_1, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol) -/*[clinic end generated code: output=82bb2c4cb443ca58 input=dd6af34deb892a65]*/ +/*[clinic end generated code: output=82bb2c4cb443ca58 input=da0cec7f7bda1b3f]*/ { int rtn; @@ -2509,7 +2505,6 @@ _curses_window_overlay_impl(PyCursesWindowObject *self, } /*[clinic input] -@permit_long_docstring_body _curses.window.overwrite destwin: object(type="PyCursesWindowObject *", subclass_of="clinic_state()->window_type") @@ -2526,14 +2521,15 @@ _curses.window.overwrite Overwrite the window on top of destwin. -The windows need not be the same size, in which case only the overlapping -region is copied. This copy is destructive, which means that the current -background character overwrites the old contents of destwin. +The windows need not be the same size, in which case only the +overlapping region is copied. This copy is destructive, which means +that the current background character overwrites the old contents of +destwin. -To get fine-grained control over the copied region, the second form of -overwrite() can be used. sminrow and smincol are the upper-left coordinates -of the source window, the other variables mark a rectangle in the destination -window. +To get fine-grained control over the copied region, the second form +of overwrite() can be used. sminrow and smincol are the upper-left +coordinates of the source window, the other variables mark +a rectangle in the destination window. [clinic start generated code]*/ static PyObject * @@ -2542,7 +2538,7 @@ _curses_window_overwrite_impl(PyCursesWindowObject *self, int group_right_1, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol) -/*[clinic end generated code: output=12ae007d1681be28 input=e84d8ebdf1c09596]*/ +/*[clinic end generated code: output=12ae007d1681be28 input=4244ab8a97087898]*/ { int rtn; @@ -2558,6 +2554,7 @@ _curses_window_overwrite_impl(PyCursesWindowObject *self, } /*[clinic input] +@permit_long_summary _curses.window.putwin file: object @@ -2570,7 +2567,7 @@ This information can be later retrieved using the getwin() function. static PyObject * _curses_window_putwin_impl(PyCursesWindowObject *self, PyObject *file) -/*[clinic end generated code: output=fdae68ac59b0281b input=0608648e09c8ea0a]*/ +/*[clinic end generated code: output=fdae68ac59b0281b input=959fc85a9e4a31c2]*/ { /* We have to simulate this by writing to a temporary FILE*, then reading back, then writing to the argument file. */ @@ -2626,7 +2623,6 @@ _curses_window_redrawln_impl(PyCursesWindowObject *self, int beg, int num) } /*[clinic input] -@permit_long_docstring_body _curses.window.refresh [ @@ -2642,23 +2638,24 @@ _curses.window.refresh Update the display immediately. Synchronize actual screen with previous drawing/deleting methods. -The 6 optional arguments can only be specified when the window is a pad -created with newpad(). The additional parameters are needed to indicate -what part of the pad and screen are involved. pminrow and pmincol specify -the upper left-hand corner of the rectangle to be displayed in the pad. -sminrow, smincol, smaxrow, and smaxcol specify the edges of the rectangle to -be displayed on the screen. The lower right-hand corner of the rectangle to -be displayed in the pad is calculated from the screen coordinates, since the -rectangles must be the same size. Both rectangles must be entirely contained -within their respective structures. Negative values of pminrow, pmincol, -sminrow, or smincol are treated as if they were zero. +The 6 optional arguments can only be specified when the window is +a pad created with newpad(). The additional parameters are needed +to indicate what part of the pad and screen are involved. pminrow +and pmincol specify the upper left-hand corner of the rectangle to +be displayed in the pad. sminrow, smincol, smaxrow, and smaxcol +specify the edges of the rectangle to be displayed on the screen. +The lower right-hand corner of the rectangle to be displayed in the +pad is calculated from the screen coordinates, since the rectangles +must be the same size. Both rectangles must be entirely contained +within their respective structures. Negative values of pminrow, +pmincol, sminrow, or smincol are treated as if they were zero. [clinic start generated code]*/ static PyObject * _curses_window_refresh_impl(PyCursesWindowObject *self, int group_right_1, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) -/*[clinic end generated code: output=42199543115e6e63 input=65405c03290496a6]*/ +/*[clinic end generated code: output=42199543115e6e63 input=ff2e900c6b2696b1]*/ { int rtn; @@ -2711,7 +2708,6 @@ _curses_window_setscrreg_impl(PyCursesWindowObject *self, int top, } /*[clinic input] -@permit_long_docstring_body _curses.window.subwin [ @@ -2728,14 +2724,14 @@ _curses.window.subwin Create a sub-window (screen-relative coordinates). -By default, the sub-window will extend from the specified position to the -lower right corner of the window. +By default, the sub-window will extend from the specified position +to the lower right corner of the window. [clinic start generated code]*/ static PyObject * _curses_window_subwin_impl(PyCursesWindowObject *self, int group_left_1, int nlines, int ncols, int begin_y, int begin_x) -/*[clinic end generated code: output=93e898afc348f59a input=5292cf610e2f3585]*/ +/*[clinic end generated code: output=93e898afc348f59a input=07b5058cb8820595]*/ { WINDOW *win; const char *funcname; @@ -2763,7 +2759,6 @@ _curses_window_subwin_impl(PyCursesWindowObject *self, int group_left_1, } /*[clinic input] -@permit_long_docstring_body _curses.window.scroll [ @@ -2774,13 +2769,14 @@ _curses.window.scroll Scroll the screen or scrolling region. -Scroll upward if the argument is positive and downward if it is negative. +Scroll upward if the argument is positive and downward if it is +negative. [clinic start generated code]*/ static PyObject * _curses_window_scroll_impl(PyCursesWindowObject *self, int group_right_1, int lines) -/*[clinic end generated code: output=4541a8a11852d360 input=386456524c550113]*/ +/*[clinic end generated code: output=4541a8a11852d360 input=d8d81a5b52b9b40f]*/ { int rtn; const char *funcname; @@ -2796,7 +2792,6 @@ _curses_window_scroll_impl(PyCursesWindowObject *self, int group_right_1, } /*[clinic input] -@permit_long_docstring_body _curses.window.touchline start: int @@ -2808,14 +2803,15 @@ _curses.window.touchline Pretend count lines have been changed, starting with line start. -If changed is supplied, it specifies whether the affected lines are marked -as having been changed (changed=True) or unchanged (changed=False). +If changed is supplied, it specifies whether the affected lines are +marked as having been changed (changed=True) or unchanged +(changed=False). [clinic start generated code]*/ static PyObject * _curses_window_touchline_impl(PyCursesWindowObject *self, int start, int count, int group_right_1, int changed) -/*[clinic end generated code: output=65d05b3f7438c61d input=36e13b6f5eb591f5]*/ +/*[clinic end generated code: output=65d05b3f7438c61d input=e0dc62f90d9dea55]*/ { int rtn; const char *funcname; @@ -3182,20 +3178,20 @@ _curses.cbreak Enter cbreak mode. -In cbreak mode (sometimes called "rare" mode) normal tty line buffering is -turned off and characters are available to be read one by one. However, -unlike raw mode, special characters (interrupt, quit, suspend, and flow -control) retain their effects on the tty driver and calling program. -Calling first raw() then cbreak() leaves the terminal in cbreak mode. +In cbreak mode (sometimes called "rare" mode) normal tty line buffering +is turned off and characters are available to be read one by one. +However, unlike raw mode, special characters (interrupt, quit, suspend, +and flow control) retain their effects on the tty driver and calling +program. Calling first raw() then cbreak() leaves the terminal in +cbreak mode. [clinic start generated code]*/ static PyObject * _curses_cbreak_impl(PyObject *module, int flag) -/*[clinic end generated code: output=9f9dee9664769751 input=c7d0bddda93016c1]*/ +/*[clinic end generated code: output=9f9dee9664769751 input=42d81687f11ddbf3]*/ NoArgOrFlagNoReturnFunctionBody(cbreak, flag) /*[clinic input] -@permit_long_docstring_body _curses.color_content color_number: color @@ -3204,13 +3200,14 @@ _curses.color_content Return the red, green, and blue (RGB) components of the specified color. -A 3-tuple is returned, containing the R, G, B values for the given color, -which will be between 0 (no component) and 1000 (maximum amount of component). +A 3-tuple is returned, containing the R, G, B values for the given +color, which will be between 0 (no component) and 1000 (maximum amount +of component). [clinic start generated code]*/ static PyObject * _curses_color_content_impl(PyObject *module, int color_number) -/*[clinic end generated code: output=17b466df7054e0de input=baffe25b351eb916]*/ +/*[clinic end generated code: output=17b466df7054e0de input=c95fb50093fa0be0]*/ { _CURSES_COLOR_VAL_TYPE r,g,b; @@ -3236,12 +3233,13 @@ _curses.color_pair Return the attribute value for displaying text in the specified color. This attribute value can be combined with A_STANDOUT, A_REVERSE, and the -other A_* attributes. pair_number() is the counterpart to this function. +other A_* attributes. pair_number() is the counterpart to this +function. [clinic start generated code]*/ static PyObject * _curses_color_pair_impl(PyObject *module, int pair_number) -/*[clinic end generated code: output=60718abb10ce9feb input=6034e9146f343802]*/ +/*[clinic end generated code: output=60718abb10ce9feb input=cf74bb81d3cc3370]*/ { PyCursesStatefulInitialised(module); PyCursesStatefulInitialisedColor(module); @@ -3259,14 +3257,14 @@ _curses.curs_set Set the cursor state. If the terminal supports the visibility requested, the previous cursor -state is returned; otherwise, an exception is raised. On many terminals, -the "visible" mode is an underline cursor and the "very visible" mode is -a block cursor. +state is returned; otherwise, an exception is raised. On many +terminals, the "visible" mode is an underline cursor and the "very +visible" mode is a block cursor. [clinic start generated code]*/ static PyObject * _curses_curs_set_impl(PyObject *module, int visibility) -/*[clinic end generated code: output=ee8e62483b1d6cd4 input=81a7924a65d29504]*/ +/*[clinic end generated code: output=ee8e62483b1d6cd4 input=e010767a328f322b]*/ { int erg; @@ -3301,14 +3299,15 @@ _curses.def_shell_mode Save the current terminal mode as the "shell" mode. -The "shell" mode is the mode when the running program is not using curses. +The "shell" mode is the mode when the running program is not using +curses. Subsequent calls to reset_shell_mode() will restore this mode. [clinic start generated code]*/ static PyObject * _curses_def_shell_mode_impl(PyObject *module) -/*[clinic end generated code: output=d6e42f5c768f860f input=5ead21f6f0baa894]*/ +/*[clinic end generated code: output=d6e42f5c768f860f input=3809f85615c0b693]*/ NoArgNoReturnFunctionBody(def_shell_mode) /*[clinic input] @@ -3350,12 +3349,13 @@ _curses.echo Enter echo mode. -In echo mode, each character input is echoed to the screen as it is entered. +In echo mode, each character input is echoed to the screen as it is +entered. [clinic start generated code]*/ static PyObject * _curses_echo_impl(PyObject *module, int flag) -/*[clinic end generated code: output=03acb2ddfa6c8729 input=86cd4d5bb1d569c0]*/ +/*[clinic end generated code: output=03acb2ddfa6c8729 input=b4e9064326da9da4]*/ NoArgOrFlagNoReturnFunctionBody(echo, flag) /*[clinic input] @@ -3389,17 +3389,17 @@ _curses_erasechar_impl(PyObject *module) } /*[clinic input] -@permit_long_docstring_body _curses.flash Flash the screen. -That is, change it to reverse-video and then change it back in a short interval. +That is, change it to reverse-video and then change it back in a short +interval. [clinic start generated code]*/ static PyObject * _curses_flash_impl(PyObject *module) -/*[clinic end generated code: output=488b8a0ebd9ea9b8 input=dd33d718e6edf436]*/ +/*[clinic end generated code: output=488b8a0ebd9ea9b8 input=90878e305432add9]*/ NoArgNoReturnFunctionBody(flash) /*[clinic input] @@ -3407,13 +3407,13 @@ _curses.flushinp Flush all input buffers. -This throws away any typeahead that has been typed by the user and has not -yet been processed by the program. +This throws away any typeahead that has been typed by the user and has +not yet been processed by the program. [clinic start generated code]*/ static PyObject * _curses_flushinp_impl(PyObject *module) -/*[clinic end generated code: output=7e7a1fc1473960f5 input=59d042e705cef5ec]*/ +/*[clinic end generated code: output=7e7a1fc1473960f5 input=3a63c7213be8043c]*/ NoArgNoReturnVoidFunctionBody(flushinp) #ifdef getsyx @@ -3599,6 +3599,7 @@ _curses_has_colors_impl(PyObject *module) NoArgTrueFalseFunctionBody(has_colors) /*[clinic input] +@permit_long_summary _curses.has_ic Return True if the terminal has insert- and delete-character capabilities. @@ -3606,7 +3607,7 @@ Return True if the terminal has insert- and delete-character capabilities. static PyObject * _curses_has_ic_impl(PyObject *module) -/*[clinic end generated code: output=6be24da9cb1268fe input=9bc2d3a797cc7324]*/ +/*[clinic end generated code: output=6be24da9cb1268fe input=e37fa080d879f7a9]*/ NoArgTrueFalseFunctionBody(has_ic) /*[clinic input] @@ -3622,6 +3623,7 @@ NoArgTrueFalseFunctionBody(has_il) #ifdef HAVE_CURSES_HAS_KEY /*[clinic input] +@permit_long_summary _curses.has_key key: int @@ -3633,7 +3635,7 @@ Return True if the current terminal type recognizes a key with that value. static PyObject * _curses_has_key_impl(PyObject *module, int key) -/*[clinic end generated code: output=19ad48319414d0b1 input=78bd44acf1a4997c]*/ +/*[clinic end generated code: output=19ad48319414d0b1 input=046ac6c72bbc9587]*/ { PyCursesStatefulInitialised(module); @@ -3688,13 +3690,14 @@ _curses.init_pair Change the definition of a color-pair. -If the color-pair was previously initialized, the screen is refreshed and -all occurrences of that color-pair are changed to the new definition. +If the color-pair was previously initialized, the screen is refreshed +and all occurrences of that color-pair are changed to the new +definition. [clinic start generated code]*/ static PyObject * _curses_init_pair_impl(PyObject *module, int pair_number, int fg, int bg) -/*[clinic end generated code: output=a0bba03d2bbc3ee6 input=54b421b44c12c389]*/ +/*[clinic end generated code: output=a0bba03d2bbc3ee6 input=5486c3a105130dae]*/ { PyCursesStatefulInitialised(module); PyCursesStatefulInitialisedColor(module); @@ -3914,14 +3917,14 @@ _curses.get_escdelay Gets the curses ESCDELAY setting. -Gets the number of milliseconds to wait after reading an escape character, -to distinguish between an individual escape character entered on the -keyboard from escape sequences sent by cursor and function keys. +Gets the number of milliseconds to wait after reading an escape +character, to distinguish between an individual escape character entered +on the keyboard from escape sequences sent by cursor and function keys. [clinic start generated code]*/ static PyObject * _curses_get_escdelay_impl(PyObject *module) -/*[clinic end generated code: output=222fa1a822555d60 input=be2d5b3dd974d0a4]*/ +/*[clinic end generated code: output=222fa1a822555d60 input=b39eeae4b8f169ab]*/ { return PyLong_FromLong(ESCDELAY); } @@ -3933,14 +3936,14 @@ _curses.set_escdelay Sets the curses ESCDELAY setting. -Sets the number of milliseconds to wait after reading an escape character, -to distinguish between an individual escape character entered on the -keyboard from escape sequences sent by cursor and function keys. +Sets the number of milliseconds to wait after reading an escape +character, to distinguish between an individual escape character entered +on the keyboard from escape sequences sent by cursor and function keys. [clinic start generated code]*/ static PyObject * _curses_set_escdelay_impl(PyObject *module, int ms) -/*[clinic end generated code: output=43818efbf7980ac4 input=7796fe19f111e250]*/ +/*[clinic end generated code: output=43818efbf7980ac4 input=cc2529bcdda3b06c]*/ { if (ms <= 0) { PyErr_SetString(PyExc_ValueError, "ms must be > 0"); @@ -3955,13 +3958,13 @@ _curses.get_tabsize Gets the curses TABSIZE setting. -Gets the number of columns used by the curses library when converting a tab -character to spaces as it adds the tab to a window. +Gets the number of columns used by the curses library when converting +a tab character to spaces as it adds the tab to a window. [clinic start generated code]*/ static PyObject * _curses_get_tabsize_impl(PyObject *module) -/*[clinic end generated code: output=7e9e51fb6126fbdf input=74af86bf6c9f5d7e]*/ +/*[clinic end generated code: output=7e9e51fb6126fbdf input=58bdaacb337c103b]*/ { return PyLong_FromLong(TABSIZE); } @@ -3973,13 +3976,13 @@ _curses.set_tabsize Sets the curses TABSIZE setting. -Sets the number of columns used by the curses library when converting a tab -character to spaces as it adds the tab to a window. +Sets the number of columns used by the curses library when converting +a tab character to spaces as it adds the tab to a window. [clinic start generated code]*/ static PyObject * _curses_set_tabsize_impl(PyObject *module, int size) -/*[clinic end generated code: output=c1de5a76c0daab1e input=78cba6a3021ad061]*/ +/*[clinic end generated code: output=c1de5a76c0daab1e input=34c1be9a78cd28a2]*/ { if (size <= 0) { PyErr_SetString(PyExc_ValueError, "size must be > 0"); @@ -4087,18 +4090,17 @@ _curses_killchar_impl(PyObject *module) } /*[clinic input] -@permit_long_docstring_body _curses.longname Return the terminfo long name field describing the current terminal. -The maximum length of a verbose description is 128 characters. It is defined -only after the call to initscr(). +The maximum length of a verbose description is 128 characters. It is +defined only after the call to initscr(). [clinic start generated code]*/ static PyObject * _curses_longname_impl(PyObject *module) -/*[clinic end generated code: output=fdf30433727ef568 input=5de06852f2230ddb]*/ +/*[clinic end generated code: output=fdf30433727ef568 input=a924fabba0de78a6]*/ NoArgReturnStringFunctionBody(longname) /*[clinic input] @@ -4133,13 +4135,13 @@ _curses.mouseinterval Set and retrieve the maximum time between press and release in a click. Set the maximum time that can elapse between press and release events in -order for them to be recognized as a click, and return the previous interval -value. +order for them to be recognized as a click, and return the previous +interval value. [clinic start generated code]*/ static PyObject * _curses_mouseinterval_impl(PyObject *module, int interval) -/*[clinic end generated code: output=c4f5ff04354634c5 input=75aaa3f0db10ac4e]*/ +/*[clinic end generated code: output=c4f5ff04354634c5 input=b90249254389c080]*/ { PyCursesStatefulInitialised(module); int value = mouseinterval(interval); @@ -4160,14 +4162,15 @@ _curses.mousemask Set the mouse events to be reported, and return a tuple (availmask, oldmask). Return a tuple (availmask, oldmask). availmask indicates which of the -specified mouse events can be reported; on complete failure it returns 0. -oldmask is the previous value of the given window's mouse event mask. -If this function is never called, no mouse events are ever reported. +specified mouse events can be reported; on complete failure it returns +0. oldmask is the previous value of the given window's mouse event +mask. If this function is never called, no mouse events are ever +reported. [clinic start generated code]*/ static PyObject * _curses_mousemask_impl(PyObject *module, unsigned long newmask) -/*[clinic end generated code: output=9406cf1b8a36e485 input=b92ff4fbe5ce61b1]*/ +/*[clinic end generated code: output=9406cf1b8a36e485 input=78990ec6c52aa888]*/ { mmask_t oldmask, availmask; @@ -4249,14 +4252,14 @@ _curses.newwin Return a new window. -By default, the window will extend from the specified position to the lower -right corner of the screen. +By default, the window will extend from the specified position to the +lower right corner of the screen. [clinic start generated code]*/ static PyObject * _curses_newwin_impl(PyObject *module, int nlines, int ncols, int group_right_1, int begin_y, int begin_x) -/*[clinic end generated code: output=c1e0a8dc8ac2826c input=29312c15a72a003d]*/ +/*[clinic end generated code: output=c1e0a8dc8ac2826c input=a1517cbfea4ab24b]*/ { WINDOW *win; @@ -4281,13 +4284,14 @@ _curses.nl Enter newline mode. -This mode translates the return key into newline on input, and translates -newline into return and line-feed on output. Newline mode is initially on. +This mode translates the return key into newline on input, and +translates newline into return and line-feed on output. Newline mode +is initially on. [clinic start generated code]*/ static PyObject * _curses_nl_impl(PyObject *module, int flag) -/*[clinic end generated code: output=b39cc0ffc9015003 input=18e3e9c6e8cfcf6f]*/ +/*[clinic end generated code: output=b39cc0ffc9015003 input=3fb21dcf55521ee4]*/ NoArgOrFlagNoReturnFunctionBody(nl, flag) /*[clinic input] @@ -4321,13 +4325,13 @@ _curses.nonl Leave newline mode. -Disable translation of return into newline on input, and disable low-level -translation of newline into newline/return on output. +Disable translation of return into newline on input, and disable +low-level translation of newline into newline/return on output. [clinic start generated code]*/ static PyObject * _curses_nonl_impl(PyObject *module) -/*[clinic end generated code: output=99e917e9715770c6 input=9d37dd122d3022fc]*/ +/*[clinic end generated code: output=99e917e9715770c6 input=75cce08e4b6b3ef1]*/ NoArgNoReturnFunctionBody(nonl) /*[clinic input] @@ -4358,6 +4362,7 @@ _curses_noraw_impl(PyObject *module) NoArgNoReturnFunctionBody(noraw) /*[clinic input] +@permit_long_summary _curses.pair_content pair_number: pair @@ -4369,7 +4374,7 @@ Return a tuple (fg, bg) containing the colors for the requested color pair. static PyObject * _curses_pair_content_impl(PyObject *module, int pair_number) -/*[clinic end generated code: output=4a726dd0e6885f3f input=03970f840fc7b739]*/ +/*[clinic end generated code: output=4a726dd0e6885f3f input=faede9e26f1f2ca4]*/ { _CURSES_COLOR_NUM_TYPE f, b; @@ -4393,6 +4398,7 @@ _curses_pair_content_impl(PyObject *module, int pair_number) } /*[clinic input] +@permit_long_summary _curses.pair_number attr: int @@ -4405,7 +4411,7 @@ color_pair() is the counterpart to this function. static PyObject * _curses_pair_number_impl(PyObject *module, int attr) -/*[clinic end generated code: output=85bce7d65c0aa3f4 input=d478548e33f5e61a]*/ +/*[clinic end generated code: output=85bce7d65c0aa3f4 input=b11152a78c2f9abf]*/ { PyCursesStatefulInitialised(module); PyCursesStatefulInitialisedColor(module); @@ -4414,6 +4420,7 @@ _curses_pair_number_impl(PyObject *module, int attr) } /*[clinic input] +@permit_long_summary _curses.putp string: str(accept={robuffer}) @@ -4426,7 +4433,7 @@ Note that the output of putp() always goes to standard output. static PyObject * _curses_putp_impl(PyObject *module, const char *string) -/*[clinic end generated code: output=e98081d1b8eb5816 input=1601faa828b44cb3]*/ +/*[clinic end generated code: output=e98081d1b8eb5816 input=2f3b9e0f22829ee7]*/ { return curses_check_err(module, putp(string), "putp", NULL); } @@ -4539,13 +4546,13 @@ _curses.raw Enter raw mode. In raw mode, normal line buffering and processing of interrupt, quit, -suspend, and flow control keys are turned off; characters are presented to -curses input functions one by one. +suspend, and flow control keys are turned off; characters are presented +to curses input functions one by one. [clinic start generated code]*/ static PyObject * _curses_raw_impl(PyObject *module, int flag) -/*[clinic end generated code: output=a750e4b342be015b input=4b447701389fb4df]*/ +/*[clinic end generated code: output=a750e4b342be015b input=18a7de7eef16987a]*/ NoArgOrFlagNoReturnFunctionBody(raw, flag) /*[clinic input] @@ -4595,13 +4602,13 @@ _curses.resizeterm Resize the standard and current windows to the specified dimensions. -Adjusts other bookkeeping data used by the curses library that record the -window dimensions (in particular the SIGWINCH handler). +Adjusts other bookkeeping data used by the curses library that record +the window dimensions (in particular the SIGWINCH handler). [clinic start generated code]*/ static PyObject * _curses_resizeterm_impl(PyObject *module, short nlines, short ncols) -/*[clinic end generated code: output=4de3abab50c67f02 input=414e92a63e3e9899]*/ +/*[clinic end generated code: output=4de3abab50c67f02 input=7f0f077df2da1cf5]*/ { PyObject *result; int code; @@ -4623,7 +4630,6 @@ _curses_resizeterm_impl(PyObject *module, short nlines, short ncols) #ifdef HAVE_CURSES_RESIZE_TERM /*[clinic input] -@permit_long_docstring_body _curses.resize_term nlines: short @@ -4635,15 +4641,16 @@ _curses.resize_term Backend function used by resizeterm(), performing most of the work. When resizing the windows, resize_term() blank-fills the areas that are -extended. The calling application should fill in these areas with appropriate -data. The resize_term() function attempts to resize all windows. However, -due to the calling convention of pads, it is not possible to resize these -without additional interaction with the application. +extended. The calling application should fill in these areas with +appropriate data. The resize_term() function attempts to resize all +windows. However, due to the calling convention of pads, it is not +possible to resize these without additional interaction with the +application. [clinic start generated code]*/ static PyObject * _curses_resize_term_impl(PyObject *module, short nlines, short ncols) -/*[clinic end generated code: output=46c6d749fa291dbd input=ebfa840f6b5f03fa]*/ +/*[clinic end generated code: output=46c6d749fa291dbd input=ff4baaf2320c8ac9]*/ { PyObject *result; int code; @@ -4701,21 +4708,22 @@ _curses_setsyx_impl(PyObject *module, int y, int x) #endif /*[clinic input] +@permit_long_summary _curses.start_color Initializes eight basic colors and global variables COLORS and COLOR_PAIRS. -Must be called if the programmer wants to use colors, and before any other -color manipulation routine is called. It is good practice to call this -routine right after initscr(). +Must be called if the programmer wants to use colors, and before any +other color manipulation routine is called. It is good practice to call +this routine right after initscr(). -It also restores the colors on the terminal to the values they had when the -terminal was just turned on. +It also restores the colors on the terminal to the values they had when +the terminal was just turned on. [clinic start generated code]*/ static PyObject * _curses_start_color_impl(PyObject *module) -/*[clinic end generated code: output=8b772b41d8090ede input=0ca0ecb2b77e1a12]*/ +/*[clinic end generated code: output=8b772b41d8090ede input=7daacc6b6baba643]*/ { PyCursesStatefulInitialised(module); @@ -4804,13 +4812,13 @@ _curses.tigetnum Return the value of the numeric capability. -The value -2 is returned if capname is not a numeric capability, or -1 if -it is canceled or absent from the terminal description. +The value -2 is returned if capname is not a numeric capability, or -1 +if it is canceled or absent from the terminal description. [clinic start generated code]*/ static PyObject * _curses_tigetnum_impl(PyObject *module, const char *capname) -/*[clinic end generated code: output=46f8b0a1b5dff42f input=5cdf2f410b109720]*/ +/*[clinic end generated code: output=46f8b0a1b5dff42f input=87a64beec16ae077]*/ { PyCursesStatefulSetupTermCalled(module); @@ -4826,13 +4834,13 @@ _curses.tigetstr Return the value of the string capability. -None is returned if capname is not a string capability, or is canceled or -absent from the terminal description. +None is returned if capname is not a string capability, or is canceled +or absent from the terminal description. [clinic start generated code]*/ static PyObject * _curses_tigetstr_impl(PyObject *module, const char *capname) -/*[clinic end generated code: output=f22b576ad60248f3 input=36644df25c73c0a7]*/ +/*[clinic end generated code: output=f22b576ad60248f3 input=00bf0feda2207724]*/ { PyCursesStatefulSetupTermCalled(module); @@ -5030,7 +5038,6 @@ _curses_unget_wch(PyObject *module, PyObject *ch) #ifdef HAVE_CURSES_USE_ENV /*[clinic input] -@permit_long_docstring_body _curses.use_env flag: bool @@ -5038,19 +5045,19 @@ _curses.use_env Use environment variables LINES and COLUMNS. -If used, this function should be called before initscr() or newterm() are -called. +If used, this function should be called before initscr() or newterm() +are called. -When flag is False, the values of lines and columns specified in the terminfo -database will be used, even if environment variables LINES and COLUMNS (used -by default) are set, or if curses is running in a window (in which case -default behavior would be to use the window size if LINES and COLUMNS are -not set). +When flag is False, the values of lines and columns specified in the +terminfo database will be used, even if environment variables LINES and +COLUMNS (used by default) are set, or if curses is running in a window +(in which case default behavior would be to use the window size if LINES +and COLUMNS are not set). [clinic start generated code]*/ static PyObject * _curses_use_env_impl(PyObject *module, int flag) -/*[clinic end generated code: output=b2c445e435c0b164 input=eaa9047ec73c27d3]*/ +/*[clinic end generated code: output=b2c445e435c0b164 input=8e8feed746cf7fc1]*/ { use_env(flag); Py_RETURN_NONE; @@ -5078,6 +5085,7 @@ _curses_use_default_colors_impl(PyObject *module) } /*[clinic input] +@permit_long_summary _curses.assume_default_colors fg: int bg: int @@ -5093,7 +5101,7 @@ Use this to support transparency in your application. static PyObject * _curses_assume_default_colors_impl(PyObject *module, int fg, int bg) -/*[clinic end generated code: output=54985397a7d2b3a5 input=7fe301712ef3e9fb]*/ +/*[clinic end generated code: output=54985397a7d2b3a5 input=8945333c09893cf2]*/ { int code; @@ -5162,6 +5170,7 @@ make_ncurses_version(PyTypeObject *type) #endif /* NCURSES_VERSION */ /*[clinic input] +@permit_long_summary _curses.has_extended_color_support Return True if the module supports extended colors; otherwise, return False. @@ -5172,7 +5181,7 @@ that support more than 16 colors (e.g. xterm-256color). static PyObject * _curses_has_extended_color_support_impl(PyObject *module) -/*[clinic end generated code: output=68f1be2b57d92e22 input=4b905f046e35ee9f]*/ +/*[clinic end generated code: output=68f1be2b57d92e22 input=40d673471c5056f0]*/ { return PyBool_FromLong(_NCURSES_EXTENDED_COLOR_FUNCS); } diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 163e499d957..59af7afcfcc 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3325,7 +3325,6 @@ datetime_date_today_impl(PyTypeObject *type) } /*[clinic input] -@permit_long_docstring_body @classmethod datetime.date.fromtimestamp @@ -3334,13 +3333,13 @@ datetime.date.fromtimestamp Create a date from a POSIX timestamp. -The timestamp is a number, e.g. created via time.time(), that is interpreted -as local time. +The timestamp is a number, e.g. created via time.time(), that is +interpreted as local time. [clinic start generated code]*/ static PyObject * datetime_date_fromtimestamp_impl(PyTypeObject *type, PyObject *timestamp) -/*[clinic end generated code: output=59def4e32c028fb6 input=55ff6940f0a8339f]*/ +/*[clinic end generated code: output=59def4e32c028fb6 input=15720eef43b169a1]*/ { return date_fromtimestamp(type, timestamp); } @@ -3476,6 +3475,7 @@ datetime_date_fromisocalendar_impl(PyTypeObject *type, int year, int week, } /*[clinic input] +@permit_long_summary @classmethod datetime.date.strptime @@ -3492,7 +3492,7 @@ For a list of supported format codes, see the documentation: static PyObject * datetime_date_strptime_impl(PyTypeObject *type, PyObject *string, PyObject *format) -/*[clinic end generated code: output=454d473bee2d5161 input=31d57bb789433e99]*/ +/*[clinic end generated code: output=454d473bee2d5161 input=2db8f0b2b5242deb]*/ { PyObject *result; @@ -4744,6 +4744,7 @@ datetime_time_impl(PyTypeObject *type, int hour, int minute, int second, } /*[clinic input] +@permit_long_summary @classmethod datetime.time.strptime @@ -4760,7 +4761,7 @@ For a list of supported format codes, see the documentation: static PyObject * datetime_time_strptime_impl(PyTypeObject *type, PyObject *string, PyObject *format) -/*[clinic end generated code: output=ae05a9bc0241d3bf input=82ba425ecacc54aa]*/ +/*[clinic end generated code: output=ae05a9bc0241d3bf input=f01d0b9eb5383da5]*/ { PyObject *result; @@ -4856,8 +4857,8 @@ datetime.time.isoformat Return the time formatted according to ISO. -The full format is 'HH:MM:SS.mmmmmm+zz:zz'. By default, the fractional -part is omitted if self.microsecond == 0. +The full format is 'HH:MM:SS.mmmmmm+zz:zz'. By default, the +fractional part is omitted if self.microsecond == 0. The optional argument timespec specifies the number of additional terms of the time to include. Valid options are 'auto', 'hours', @@ -4866,7 +4867,7 @@ terms of the time to include. Valid options are 'auto', 'hours', static PyObject * datetime_time_isoformat_impl(PyDateTime_Time *self, const char *timespec) -/*[clinic end generated code: output=2bcc7cab65c35545 input=afbbbd953d10ad07]*/ +/*[clinic end generated code: output=2bcc7cab65c35545 input=0efae103081060f4]*/ { char buf[100]; @@ -4927,14 +4928,14 @@ datetime_time_isoformat_impl(PyDateTime_Time *self, const char *timespec) } /*[clinic input] -@permit_long_docstring_body datetime.time.strftime format: unicode Format using strftime(). -The date part of the timestamp passed to underlying strftime should not be used. +The date part of the timestamp passed to underlying strftime should +not be used. For a list of supported format codes, see the documentation: https://docs.python.org/3/library/datetime.html#format-codes @@ -4942,7 +4943,7 @@ For a list of supported format codes, see the documentation: static PyObject * datetime_time_strftime_impl(PyDateTime_Time *self, PyObject *format) -/*[clinic end generated code: output=10f65af20e2a78c7 input=c4a5bbecd798654b]*/ +/*[clinic end generated code: output=10f65af20e2a78c7 input=184e1c0d7d356c5d]*/ { PyObject *result; PyObject *tuple; @@ -5510,15 +5511,15 @@ datetime.datetime.__new__ A combination of a date and a time. -The year, month and day arguments are required. tzinfo may be None, or an -instance of a tzinfo subclass. The remaining arguments may be ints. +The year, month and day arguments are required. tzinfo may be None, or +an instance of a tzinfo subclass. The remaining arguments may be ints. [clinic start generated code]*/ static PyObject * datetime_datetime_impl(PyTypeObject *type, int year, int month, int day, int hour, int minute, int second, int microsecond, PyObject *tzinfo, int fold) -/*[clinic end generated code: output=47983ddb47d36037 input=2af468d7a9c1e568]*/ +/*[clinic end generated code: output=47983ddb47d36037 input=c7fd85dcf6fe9691]*/ { return new_datetime_ex2(year, month, day, hour, minute, second, microsecond, @@ -5735,7 +5736,6 @@ datetime_datetime_utcnow_impl(PyTypeObject *type) } /*[clinic input] -@permit_long_docstring_body @classmethod datetime.datetime.fromtimestamp @@ -5744,14 +5744,14 @@ datetime.datetime.fromtimestamp Create a datetime from a POSIX timestamp. -The timestamp is a number, e.g. created via time.time(), that is interpreted -as local time. +The timestamp is a number, e.g. created via time.time(), that is +interpreted as local time. [clinic start generated code]*/ static PyObject * datetime_datetime_fromtimestamp_impl(PyTypeObject *type, PyObject *timestamp, PyObject *tzinfo) -/*[clinic end generated code: output=9c47ea2b2ebdaded input=d6b5b2095c5a34b2]*/ +/*[clinic end generated code: output=9c47ea2b2ebdaded input=7a2bc81a049ea287]*/ { PyObject *self; if (check_tzinfo_subclass(tzinfo) < 0) diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 6b07ef74cfa..a9f4f27d9eb 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -431,13 +431,14 @@ _dbm.dbm.setdefault Return the value for key if present, otherwise default. -If key is not in the database, it is inserted with default as the value. +If key is not in the database, it is inserted with default as the +value. [clinic start generated code]*/ static PyObject * _dbm_dbm_setdefault_impl(dbmobject *self, PyTypeObject *cls, const char *key, Py_ssize_t key_length, PyObject *default_value) -/*[clinic end generated code: output=9c2f6ea6d0fb576c input=c01510ef7571e13b]*/ +/*[clinic end generated code: output=9c2f6ea6d0fb576c input=81224965c110f830]*/ { datum dbm_key, val; Py_ssize_t tmp_size; diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 0a8308d9ebc..4db1b60be77 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -188,7 +188,7 @@ find_state_ternary(PyObject *left, PyObject *right, PyObject *modulus) * sizeof(size_t) == sizeof(mpd_uint_t) == sizeof(mpd_ssize_t) */ -#ifdef TEST_COVERAGE +#ifdef Py_DEBUG #undef Py_LOCAL_INLINE #define Py_LOCAL_INLINE Py_LOCAL #endif @@ -939,13 +939,13 @@ _decimal.Context.Etop Return a value equal to Emax - prec + 1. -This is the maximum exponent if the _clamp field of the context is set -to 1 (IEEE clamp mode). Etop() must not be negative. +This is the maximum exponent if the _clamp field of the context is +set to 1 (IEEE clamp mode). Etop() must not be negative. [clinic start generated code]*/ static PyObject * _decimal_Context_Etop_impl(PyObject *self) -/*[clinic end generated code: output=f0a3f6e1b829074e input=838a4409316ec728]*/ +/*[clinic end generated code: output=f0a3f6e1b829074e input=35b9defc69d5e5d1]*/ { return PyLong_FromSsize_t(mpd_etop(CTX(self))); } @@ -2997,6 +2997,7 @@ PyDecType_FromSequenceExact(PyTypeObject *type, PyObject *v, PyDecType_FromSequenceExact((st)->PyDec_Type, sequence, context) /*[clinic input] +@permit_long_docstring_body @classmethod _decimal.Decimal.from_float @@ -3022,7 +3023,7 @@ Decimal.from_float(0.1) is not the same as Decimal('0.1'). static PyObject * _decimal_Decimal_from_float_impl(PyTypeObject *type, PyTypeObject *cls, PyObject *pyfloat) -/*[clinic end generated code: output=fcb7d55d2f9dc790 input=03bc8dbe963e52ca]*/ +/*[clinic end generated code: output=fcb7d55d2f9dc790 input=29abf05dd8fe79e4]*/ { PyObject *context; PyObject *result; @@ -3068,6 +3069,8 @@ PyDecType_FromNumberExact(PyTypeObject *type, PyTypeObject *cls, } /*[clinic input] +@permit_long_summary +@permit_long_docstring_body @classmethod _decimal.Decimal.from_number @@ -3088,7 +3091,7 @@ Class method that converts a real number to a decimal number, exactly. static PyObject * _decimal_Decimal_from_number_impl(PyTypeObject *type, PyTypeObject *cls, PyObject *number) -/*[clinic end generated code: output=4d3ec722b7acfd8b input=271cb4feb3148804]*/ +/*[clinic end generated code: output=4d3ec722b7acfd8b input=34ff3696955d3def]*/ { PyObject *context; PyObject *result; @@ -3959,6 +3962,7 @@ dec_as_long(PyObject *dec, PyObject *context, int round) } /*[clinic input] +@permit_long_summary _decimal.Decimal.as_integer_ratio cls: defining_class @@ -3971,7 +3975,7 @@ Raise OverflowError on infinities and a ValueError on NaNs. static PyObject * _decimal_Decimal_as_integer_ratio_impl(PyObject *self, PyTypeObject *cls) -/*[clinic end generated code: output=eb49c512701f844b input=07e33d8852184761]*/ +/*[clinic end generated code: output=eb49c512701f844b input=136f1dc585ca8d80]*/ { PyObject *numerator = NULL; PyObject *denominator = NULL; @@ -4146,17 +4150,17 @@ _decimal.Decimal.to_integral_exact = _decimal.Decimal.to_integral_value Round to the nearest integer. -Decimal.to_integral_exact() signals Inexact or Rounded as appropriate -if rounding occurs. The rounding mode is determined by the rounding -parameter if given, else by the given context. If neither parameter is -given, then the rounding mode of the current default context is used. +This method signals Inexact or Rounded as appropriate if rounding +occurs. The rounding mode is determined by the rounding parameter +if given, else by the given context. If neither parameter is given, +then the rounding mode of the current default context is used. [clinic start generated code]*/ static PyObject * _decimal_Decimal_to_integral_exact_impl(PyObject *self, PyTypeObject *cls, PyObject *rounding, PyObject *context) -/*[clinic end generated code: output=543a39a02eea9917 input=fabce7a744b8087c]*/ +/*[clinic end generated code: output=543a39a02eea9917 input=d4d8abe543393de1]*/ { PyObject *result; uint32_t status = 0; @@ -4791,13 +4795,14 @@ _decimal.Decimal.sqrt = _decimal.Decimal.exp Return the square root of the argument to full precision. -The result is correctly rounded using the ROUND_HALF_EVEN rounding mode. +The result is correctly rounded using the ROUND_HALF_EVEN rounding +mode. [clinic start generated code]*/ static PyObject * _decimal_Decimal_sqrt_impl(PyObject *self, PyTypeObject *cls, PyObject *context) -/*[clinic end generated code: output=deb1280077b5e586 input=3a76afbd39dc20b9]*/ +/*[clinic end generated code: output=deb1280077b5e586 input=c565a7216e9605e7]*/ Dec_UnaryFuncVA(mpd_qsqrt) /* Binary arithmetic functions, optional context arg */ @@ -4853,6 +4858,7 @@ _decimal_Decimal_max_impl(PyObject *self, PyTypeObject *cls, PyObject *other, Dec_BinaryFuncVA(mpd_qmax) /*[clinic input] +@permit_long_summary _decimal.Decimal.max_mag = _decimal.Decimal.compare As the max() method, but compares the absolute values of the operands. @@ -4861,7 +4867,7 @@ As the max() method, but compares the absolute values of the operands. static PyObject * _decimal_Decimal_max_mag_impl(PyObject *self, PyTypeObject *cls, PyObject *other, PyObject *context) -/*[clinic end generated code: output=f71f2c27d9bc7cac input=88b105e66cf138c5]*/ +/*[clinic end generated code: output=f71f2c27d9bc7cac input=5f81b9da49b45e5d]*/ Dec_BinaryFuncVA(mpd_qmax_mag) /*[clinic input] @@ -4880,6 +4886,7 @@ _decimal_Decimal_min_impl(PyObject *self, PyTypeObject *cls, PyObject *other, Dec_BinaryFuncVA(mpd_qmin) /*[clinic input] +@permit_long_summary _decimal.Decimal.min_mag = _decimal.Decimal.compare As the min() method, but compares the absolute values of the operands. @@ -4888,7 +4895,7 @@ As the min() method, but compares the absolute values of the operands. static PyObject * _decimal_Decimal_min_mag_impl(PyObject *self, PyTypeObject *cls, PyObject *other, PyObject *context) -/*[clinic end generated code: output=018562ad1c22aae3 input=351fa3c0e592746a]*/ +/*[clinic end generated code: output=018562ad1c22aae3 input=94c29817c7f16db7]*/ Dec_BinaryFuncVA(mpd_qmin_mag) /*[clinic input] @@ -4896,16 +4903,16 @@ _decimal.Decimal.next_toward = _decimal.Decimal.compare Returns the number closest to self, in the direction towards other. -If the two operands are unequal, return the number closest to the first -operand in the direction of the second operand. If both operands are -numerically equal, return a copy of the first operand with the sign set -to be the same as the sign of the second operand. +If the two operands are unequal, return the number closest to the +first operand in the direction of the second operand. If both +operands are numerically equal, return a copy of the first operand +with the sign set to be the same as the sign of the second operand. [clinic start generated code]*/ static PyObject * _decimal_Decimal_next_toward_impl(PyObject *self, PyTypeObject *cls, PyObject *other, PyObject *context) -/*[clinic end generated code: output=71d879bca8bc1019 input=fdf0091ea6e9e416]*/ +/*[clinic end generated code: output=71d879bca8bc1019 input=adc5d453fc140341]*/ Dec_BinaryFuncVA(mpd_qnext_toward) /*[clinic input] @@ -4914,10 +4921,10 @@ _decimal.Decimal.remainder_near = _decimal.Decimal.compare Return the remainder from dividing self by other. This differs from self % other in that the sign of the remainder is -chosen so as to minimize its absolute value. More precisely, the return -value is self - n * other where n is the integer nearest to the exact -value of self / other, and if two integers are equally near then the -even one is chosen. +chosen so as to minimize its absolute value. More precisely, the +return value is self - n * other where n is the integer nearest to +the exact value of self / other, and if two integers are equally +near then the even one is chosen. If the result is zero then its sign will be the sign of self. [clinic start generated code]*/ @@ -4925,7 +4932,7 @@ If the result is zero then its sign will be the sign of self. static PyObject * _decimal_Decimal_remainder_near_impl(PyObject *self, PyTypeObject *cls, PyObject *other, PyObject *context) -/*[clinic end generated code: output=d3fbb4985f2077fa input=eb5a8dfe3470b794]*/ +/*[clinic end generated code: output=d3fbb4985f2077fa input=dcb66d4afa0c77c3]*/ Dec_BinaryFuncVA(mpd_qrem_near) /* Ternary arithmetic functions, optional context arg */ @@ -4992,6 +4999,7 @@ _decimal_Decimal_is_infinite_impl(PyObject *self) Dec_BoolFunc(mpd_isinfinite) /*[clinic input] +@permit_long_summary _decimal.Decimal.is_nan Return True if the argument is a (quiet or signaling) NaN, else False. @@ -4999,7 +5007,7 @@ Return True if the argument is a (quiet or signaling) NaN, else False. static PyObject * _decimal_Decimal_is_nan_impl(PyObject *self) -/*[clinic end generated code: output=b704e8b49a164388 input=795e5dac85976994]*/ +/*[clinic end generated code: output=b704e8b49a164388 input=b7d8f0d59fe2332a]*/ Dec_BoolFunc(mpd_isnan) /*[clinic input] @@ -5153,13 +5161,13 @@ _decimal.Decimal.radix Return Decimal(10). -This is the radix (base) in which the Decimal class does -all its arithmetic. Included for compatibility with the specification. +This is the radix (base) in which the Decimal class does all its +arithmetic. Included for compatibility with the specification. [clinic start generated code]*/ static PyObject * _decimal_Decimal_radix_impl(PyObject *self, PyTypeObject *cls) -/*[clinic end generated code: output=40a3bc7ec3d99228 input=b0d4cb9f870bbac1]*/ +/*[clinic end generated code: output=40a3bc7ec3d99228 input=d1cdbdbbbdefdec2]*/ { decimal_state *state = PyType_GetModuleState(cls); return _dec_mpd_radix(state); @@ -5250,15 +5258,15 @@ _decimal.Decimal.logb = _decimal.Decimal.exp Return the adjusted exponent of the operand as a Decimal instance. -If the operand is a zero, then Decimal('-Infinity') is returned and the -DivisionByZero condition is raised. If the operand is an infinity then -Decimal('Infinity') is returned. +If the operand is a zero, then Decimal('-Infinity') is returned and +the DivisionByZero condition is raised. If the operand is an +infinity then Decimal('Infinity') is returned. [clinic start generated code]*/ static PyObject * _decimal_Decimal_logb_impl(PyObject *self, PyTypeObject *cls, PyObject *context) -/*[clinic end generated code: output=36b0bda09e934245 input=a8df027d1b8a2b17]*/ +/*[clinic end generated code: output=36b0bda09e934245 input=eeafa6bbf8d8a013]*/ Dec_UnaryFuncVA(mpd_qlogb) /*[clinic input] @@ -5280,14 +5288,15 @@ The returned value is one of the following ten strings: * '+Normal', indicating that the operand is a positive normal number. * '+Infinity', indicating that the operand is positive infinity. - * 'NaN', indicating that the operand is a quiet NaN (Not a Number). + * 'NaN', indicating that the operand is a quiet NaN (Not a + Number). * 'sNaN', indicating that the operand is a signaling NaN. [clinic start generated code]*/ static PyObject * _decimal_Decimal_number_class_impl(PyObject *self, PyTypeObject *cls, PyObject *context) -/*[clinic end generated code: output=1ac82412e0849c52 input=447095d2677fa0ca]*/ +/*[clinic end generated code: output=1ac82412e0849c52 input=0b59852b43c521aa]*/ { const char *cp; @@ -5303,19 +5312,19 @@ _decimal.Decimal.to_eng_string = _decimal.Decimal.exp Convert to an engineering-type string. -Engineering notation has an exponent which is a multiple of 3, so there -are up to 3 digits left of the decimal place. For example, +Engineering notation has an exponent which is a multiple of 3, so +there are up to 3 digits left of the decimal place. For example, Decimal('123E+1') is converted to Decimal('1.23E+3'). -The value of context.capitals determines whether the exponent sign is -lower or upper case. Otherwise, the context does not affect the +The value of context.capitals determines whether the exponent sign +is lower or upper case. Otherwise, the context does not affect the operation. [clinic start generated code]*/ static PyObject * _decimal_Decimal_to_eng_string_impl(PyObject *self, PyTypeObject *cls, PyObject *context) -/*[clinic end generated code: output=901f128d437ae5c0 input=b2cb7e01e268e45d]*/ +/*[clinic end generated code: output=901f128d437ae5c0 input=111db4de6561f211]*/ { PyObject *result; mpd_ssize_t size; @@ -5343,31 +5352,31 @@ _decimal.Decimal.compare_total = _decimal.Decimal.compare Compare two operands using their abstract representation. -Similar to the compare() method, but the result -gives a total ordering on Decimal instances. Two Decimal instances with -the same numeric value but different representations compare unequal -in this ordering: +Similar to the compare() method, but the result gives a total +ordering on Decimal instances. Two Decimal instances with the same +numeric value but different representations compare unequal in this +ordering: >>> Decimal('12.0').compare_total(Decimal('12')) Decimal('-1') -Quiet and signaling NaNs are also included in the total ordering. The -result of this function is Decimal('0') if both operands have the same -representation, Decimal('-1') if the first operand is lower in the -total order than the second, and Decimal('1') if the first operand is -higher in the total order than the second operand. See the -specification for details of the total order. +Quiet and signaling NaNs are also included in the total ordering. +The result of this function is Decimal('0') if both operands have +the same representation, Decimal('-1') if the first operand is lower +in the total order than the second, and Decimal('1') if the first +operand is higher in the total order than the second operand. See +the specification for details of the total order. This operation is unaffected by context and is quiet: no flags are -changed and no rounding is performed. As an exception, the C version -may raise InvalidOperation if the second operand cannot be converted -exactly. +changed and no rounding is performed. As an exception, the C +version may raise InvalidOperation if the second operand cannot be +converted exactly. [clinic start generated code]*/ static PyObject * _decimal_Decimal_compare_total_impl(PyObject *self, PyTypeObject *cls, PyObject *other, PyObject *context) -/*[clinic end generated code: output=83649010bad7815f input=6f3111ec5fdbf3c1]*/ +/*[clinic end generated code: output=83649010bad7815f input=d795bf204b9ff2a8]*/ Dec_BinaryFuncVA_NO_CTX(mpd_compare_total) /*[clinic input] @@ -5516,18 +5525,19 @@ _decimal.Decimal.rotate = _decimal.Decimal.compare Returns a rotated copy of self's digits, value-of-other times. -The second operand must be an integer in the range -precision through -precision. The absolute value of the second operand gives the number of -places to rotate. If the second operand is positive then rotation is to -the left; otherwise rotation is to the right. The coefficient of the -first operand is padded on the left with zeros to length precision if -necessary. The sign and exponent of the first operand are unchanged. +The second operand must be an integer in the range -precision +through precision. The absolute value of the second operand gives +the number of places to rotate. If the second operand is positive +then rotation is to the left; otherwise rotation is to the right. +The coefficient of the first operand is padded on the left with +zeros to length precision if necessary. The sign and exponent of +the first operand are unchanged. [clinic start generated code]*/ static PyObject * _decimal_Decimal_rotate_impl(PyObject *self, PyTypeObject *cls, PyObject *other, PyObject *context) -/*[clinic end generated code: output=09f2737082882b83 input=cde7b032eac43f0b]*/ +/*[clinic end generated code: output=09f2737082882b83 input=4bc840d51842934c]*/ Dec_BinaryFuncVA(mpd_qrotate) /*[clinic input] @@ -5550,18 +5560,18 @@ _decimal.Decimal.shift = _decimal.Decimal.compare Returns a shifted copy of self's digits, value-of-other times. -The second operand must be an integer in the range -precision through -precision. The absolute value of the second operand gives the number -of places to shift. If the second operand is positive, then the shift -is to the left; otherwise the shift is to the right. Digits shifted -into the coefficient are zeros. The sign and exponent of the first -operand are unchanged. +The second operand must be an integer in the range -precision +through precision. The absolute value of the second operand gives +the number of places to shift. If the second operand is positive, +then the shift is to the left; otherwise the shift is to the right. +Digits shifted into the coefficient are zeros. The sign and +exponent of the first operand are unchanged. [clinic start generated code]*/ static PyObject * _decimal_Decimal_shift_impl(PyObject *self, PyTypeObject *cls, PyObject *other, PyObject *context) -/*[clinic end generated code: output=82e061a0d9ecc4f5 input=501759c2522cb78e]*/ +/*[clinic end generated code: output=82e061a0d9ecc4f5 input=c05f3fd69fc1f9f9]*/ Dec_BinaryFuncVA(mpd_qshift) /*[clinic input] @@ -5589,18 +5599,18 @@ that of the right-hand operand. Also unlike other operations, quantize never signals Underflow, even if the result is subnormal and inexact. -If the exponent of the second operand is larger than that of the first, -then rounding may be necessary. In this case, the rounding mode is -determined by the rounding argument if given, else by the given context -argument; if neither argument is given, the rounding mode of the -current thread's context is used. +If the exponent of the second operand is larger than that of the +first, then rounding may be necessary. In this case, the rounding +mode is determined by the rounding argument if given, else by the +given context argument; if neither argument is given, the rounding +mode of the current thread's context is used. [clinic start generated code]*/ static PyObject * _decimal_Decimal_quantize_impl(PyObject *self, PyTypeObject *cls, PyObject *w, PyObject *rounding, PyObject *context) -/*[clinic end generated code: output=fc51edf458559913 input=1166e6311e047b74]*/ +/*[clinic end generated code: output=fc51edf458559913 input=7838b0a5f684adb8]*/ { PyObject *a, *b; PyObject *result; @@ -6629,14 +6639,14 @@ _decimal.Context.remainder_near = _decimal.Context.add Return x - y * n. -Here n is the integer nearest the exact value of x / y (if the result -is 0 then its sign will be the sign of x). +Here n is the integer nearest the exact value of x / y (if the +result is 0 then its sign will be the sign of x). [clinic start generated code]*/ static PyObject * _decimal_Context_remainder_near_impl(PyObject *context, PyTypeObject *cls, PyObject *x, PyObject *y) -/*[clinic end generated code: output=7f18c535a12cf8ac input=bafb6327bb314c5c]*/ +/*[clinic end generated code: output=7f18c535a12cf8ac input=60342558000d4be6]*/ DecCtx_BinaryFunc(mpd_qrem_near) /*[clinic input] @@ -6723,13 +6733,14 @@ restrictions hold: * all three arguments must be integral * 'b' must be nonnegative * at least one of 'a' or 'b' must be nonzero - * modulo must be nonzero and less than 10**prec in absolute value + * modulo must be nonzero and less than 10**prec in absolute + value [clinic start generated code]*/ static PyObject * _decimal_Context_power_impl(PyObject *context, PyTypeObject *cls, PyObject *base, PyObject *exp, PyObject *mod) -/*[clinic end generated code: output=d06d40c37cdd69dc input=2a70edd03317c666]*/ +/*[clinic end generated code: output=d06d40c37cdd69dc input=178a254468ec189b]*/ { PyObject *a, *b, *c = NULL; PyObject *result; @@ -7276,6 +7287,7 @@ _decimal_Context_copy_sign_impl(PyObject *context, PyTypeObject *cls, } /*[clinic input] +@permit_long_docstring_body _decimal.Context.logical_and = _decimal.Context.add Applies the logical operation 'and' between each operand's digits. @@ -7305,7 +7317,7 @@ The operands must be both logical numbers. static PyObject * _decimal_Context_logical_and_impl(PyObject *context, PyTypeObject *cls, PyObject *x, PyObject *y) -/*[clinic end generated code: output=009dfa08ecaa2ac8 input=bcb7d3d6ab7530de]*/ +/*[clinic end generated code: output=009dfa08ecaa2ac8 input=9f8a93a31b9d7088]*/ DecCtx_BinaryFunc(mpd_qand) /*[clinic input] @@ -7342,6 +7354,7 @@ _decimal_Context_logical_or_impl(PyObject *context, PyTypeObject *cls, DecCtx_BinaryFunc(mpd_qor) /*[clinic input] +@permit_long_docstring_body _decimal.Context.logical_xor = _decimal.Context.add Applies the logical operation 'xor' between each operand's digits. @@ -7371,7 +7384,7 @@ The operands must be both logical numbers. static PyObject * _decimal_Context_logical_xor_impl(PyObject *context, PyTypeObject *cls, PyObject *x, PyObject *y) -/*[clinic end generated code: output=23cd81fdcd865d5a input=fcaaf828c1d2d089]*/ +/*[clinic end generated code: output=23cd81fdcd865d5a input=119412854ae58440]*/ DecCtx_BinaryFunc(mpd_qxor) /*[clinic input] diff --git a/Modules/_decimal/clinic/_decimal.c.h b/Modules/_decimal/clinic/_decimal.c.h index b09200845d1..c803006ad44 100644 --- a/Modules/_decimal/clinic/_decimal.c.h +++ b/Modules/_decimal/clinic/_decimal.c.h @@ -36,8 +36,8 @@ PyDoc_STRVAR(_decimal_Context_Etop__doc__, "\n" "Return a value equal to Emax - prec + 1.\n" "\n" -"This is the maximum exponent if the _clamp field of the context is set\n" -"to 1 (IEEE clamp mode). Etop() must not be negative."); +"This is the maximum exponent if the _clamp field of the context is\n" +"set to 1 (IEEE clamp mode). Etop() must not be negative."); #define _DECIMAL_CONTEXT_ETOP_METHODDEF \ {"Etop", (PyCFunction)_decimal_Context_Etop, METH_NOARGS, _decimal_Context_Etop__doc__}, @@ -1092,10 +1092,10 @@ PyDoc_STRVAR(_decimal_Decimal_to_integral_exact__doc__, "\n" "Round to the nearest integer.\n" "\n" -"Decimal.to_integral_exact() signals Inexact or Rounded as appropriate\n" -"if rounding occurs. The rounding mode is determined by the rounding\n" -"parameter if given, else by the given context. If neither parameter is\n" -"given, then the rounding mode of the current default context is used."); +"This method signals Inexact or Rounded as appropriate if rounding\n" +"occurs. The rounding mode is determined by the rounding parameter\n" +"if given, else by the given context. If neither parameter is given,\n" +"then the rounding mode of the current default context is used."); #define _DECIMAL_DECIMAL_TO_INTEGRAL_EXACT_METHODDEF \ {"to_integral_exact", _PyCFunction_CAST(_decimal_Decimal_to_integral_exact), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_to_integral_exact__doc__}, @@ -1638,7 +1638,8 @@ PyDoc_STRVAR(_decimal_Decimal_sqrt__doc__, "\n" "Return the square root of the argument to full precision.\n" "\n" -"The result is correctly rounded using the ROUND_HALF_EVEN rounding mode."); +"The result is correctly rounded using the ROUND_HALF_EVEN rounding\n" +"mode."); #define _DECIMAL_DECIMAL_SQRT_METHODDEF \ {"sqrt", _PyCFunction_CAST(_decimal_Decimal_sqrt), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_sqrt__doc__}, @@ -2113,10 +2114,10 @@ PyDoc_STRVAR(_decimal_Decimal_next_toward__doc__, "\n" "Returns the number closest to self, in the direction towards other.\n" "\n" -"If the two operands are unequal, return the number closest to the first\n" -"operand in the direction of the second operand. If both operands are\n" -"numerically equal, return a copy of the first operand with the sign set\n" -"to be the same as the sign of the second operand."); +"If the two operands are unequal, return the number closest to the\n" +"first operand in the direction of the second operand. If both\n" +"operands are numerically equal, return a copy of the first operand\n" +"with the sign set to be the same as the sign of the second operand."); #define _DECIMAL_DECIMAL_NEXT_TOWARD_METHODDEF \ {"next_toward", _PyCFunction_CAST(_decimal_Decimal_next_toward), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_next_toward__doc__}, @@ -2185,10 +2186,10 @@ PyDoc_STRVAR(_decimal_Decimal_remainder_near__doc__, "Return the remainder from dividing self by other.\n" "\n" "This differs from self % other in that the sign of the remainder is\n" -"chosen so as to minimize its absolute value. More precisely, the return\n" -"value is self - n * other where n is the integer nearest to the exact\n" -"value of self / other, and if two integers are equally near then the\n" -"even one is chosen.\n" +"chosen so as to minimize its absolute value. More precisely, the\n" +"return value is self - n * other where n is the integer nearest to\n" +"the exact value of self / other, and if two integers are equally\n" +"near then the even one is chosen.\n" "\n" "If the result is zero then its sign will be the sign of self."); @@ -2671,8 +2672,8 @@ PyDoc_STRVAR(_decimal_Decimal_radix__doc__, "\n" "Return Decimal(10).\n" "\n" -"This is the radix (base) in which the Decimal class does\n" -"all its arithmetic. Included for compatibility with the specification."); +"This is the radix (base) in which the Decimal class does all its\n" +"arithmetic. Included for compatibility with the specification."); #define _DECIMAL_DECIMAL_RADIX_METHODDEF \ {"radix", _PyCFunction_CAST(_decimal_Decimal_radix), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_radix__doc__}, @@ -2812,9 +2813,9 @@ PyDoc_STRVAR(_decimal_Decimal_logb__doc__, "\n" "Return the adjusted exponent of the operand as a Decimal instance.\n" "\n" -"If the operand is a zero, then Decimal(\'-Infinity\') is returned and the\n" -"DivisionByZero condition is raised. If the operand is an infinity then\n" -"Decimal(\'Infinity\') is returned."); +"If the operand is a zero, then Decimal(\'-Infinity\') is returned and\n" +"the DivisionByZero condition is raised. If the operand is an\n" +"infinity then Decimal(\'Infinity\') is returned."); #define _DECIMAL_DECIMAL_LOGB_METHODDEF \ {"logb", _PyCFunction_CAST(_decimal_Decimal_logb), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_logb__doc__}, @@ -2894,7 +2895,8 @@ PyDoc_STRVAR(_decimal_Decimal_number_class__doc__, " * \'+Normal\', indicating that the operand is a positive normal\n" " number.\n" " * \'+Infinity\', indicating that the operand is positive infinity.\n" -" * \'NaN\', indicating that the operand is a quiet NaN (Not a Number).\n" +" * \'NaN\', indicating that the operand is a quiet NaN (Not a\n" +" Number).\n" " * \'sNaN\', indicating that the operand is a signaling NaN."); #define _DECIMAL_DECIMAL_NUMBER_CLASS_METHODDEF \ @@ -2961,12 +2963,12 @@ PyDoc_STRVAR(_decimal_Decimal_to_eng_string__doc__, "\n" "Convert to an engineering-type string.\n" "\n" -"Engineering notation has an exponent which is a multiple of 3, so there\n" -"are up to 3 digits left of the decimal place. For example,\n" +"Engineering notation has an exponent which is a multiple of 3, so\n" +"there are up to 3 digits left of the decimal place. For example,\n" "Decimal(\'123E+1\') is converted to Decimal(\'1.23E+3\').\n" "\n" -"The value of context.capitals determines whether the exponent sign is\n" -"lower or upper case. Otherwise, the context does not affect the\n" +"The value of context.capitals determines whether the exponent sign\n" +"is lower or upper case. Otherwise, the context does not affect the\n" "operation."); #define _DECIMAL_DECIMAL_TO_ENG_STRING_METHODDEF \ @@ -3033,25 +3035,25 @@ PyDoc_STRVAR(_decimal_Decimal_compare_total__doc__, "\n" "Compare two operands using their abstract representation.\n" "\n" -"Similar to the compare() method, but the result\n" -"gives a total ordering on Decimal instances. Two Decimal instances with\n" -"the same numeric value but different representations compare unequal\n" -"in this ordering:\n" +"Similar to the compare() method, but the result gives a total\n" +"ordering on Decimal instances. Two Decimal instances with the same\n" +"numeric value but different representations compare unequal in this\n" +"ordering:\n" "\n" " >>> Decimal(\'12.0\').compare_total(Decimal(\'12\'))\n" " Decimal(\'-1\')\n" "\n" -"Quiet and signaling NaNs are also included in the total ordering. The\n" -"result of this function is Decimal(\'0\') if both operands have the same\n" -"representation, Decimal(\'-1\') if the first operand is lower in the\n" -"total order than the second, and Decimal(\'1\') if the first operand is\n" -"higher in the total order than the second operand. See the\n" -"specification for details of the total order.\n" +"Quiet and signaling NaNs are also included in the total ordering.\n" +"The result of this function is Decimal(\'0\') if both operands have\n" +"the same representation, Decimal(\'-1\') if the first operand is lower\n" +"in the total order than the second, and Decimal(\'1\') if the first\n" +"operand is higher in the total order than the second operand. See\n" +"the specification for details of the total order.\n" "\n" "This operation is unaffected by context and is quiet: no flags are\n" -"changed and no rounding is performed. As an exception, the C version\n" -"may raise InvalidOperation if the second operand cannot be converted\n" -"exactly."); +"changed and no rounding is performed. As an exception, the C\n" +"version may raise InvalidOperation if the second operand cannot be\n" +"converted exactly."); #define _DECIMAL_DECIMAL_COMPARE_TOTAL_METHODDEF \ {"compare_total", _PyCFunction_CAST(_decimal_Decimal_compare_total), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_compare_total__doc__}, @@ -3544,12 +3546,13 @@ PyDoc_STRVAR(_decimal_Decimal_rotate__doc__, "\n" "Returns a rotated copy of self\'s digits, value-of-other times.\n" "\n" -"The second operand must be an integer in the range -precision through\n" -"precision. The absolute value of the second operand gives the number of\n" -"places to rotate. If the second operand is positive then rotation is to\n" -"the left; otherwise rotation is to the right. The coefficient of the\n" -"first operand is padded on the left with zeros to length precision if\n" -"necessary. The sign and exponent of the first operand are unchanged."); +"The second operand must be an integer in the range -precision\n" +"through precision. The absolute value of the second operand gives\n" +"the number of places to rotate. If the second operand is positive\n" +"then rotation is to the left; otherwise rotation is to the right.\n" +"The coefficient of the first operand is padded on the left with\n" +"zeros to length precision if necessary. The sign and exponent of\n" +"the first operand are unchanged."); #define _DECIMAL_DECIMAL_ROTATE_METHODDEF \ {"rotate", _PyCFunction_CAST(_decimal_Decimal_rotate), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_rotate__doc__}, @@ -3686,12 +3689,12 @@ PyDoc_STRVAR(_decimal_Decimal_shift__doc__, "\n" "Returns a shifted copy of self\'s digits, value-of-other times.\n" "\n" -"The second operand must be an integer in the range -precision through\n" -"precision. The absolute value of the second operand gives the number\n" -"of places to shift. If the second operand is positive, then the shift\n" -"is to the left; otherwise the shift is to the right. Digits shifted\n" -"into the coefficient are zeros. The sign and exponent of the first\n" -"operand are unchanged."); +"The second operand must be an integer in the range -precision\n" +"through precision. The absolute value of the second operand gives\n" +"the number of places to shift. If the second operand is positive,\n" +"then the shift is to the left; otherwise the shift is to the right.\n" +"Digits shifted into the coefficient are zeros. The sign and\n" +"exponent of the first operand are unchanged."); #define _DECIMAL_DECIMAL_SHIFT_METHODDEF \ {"shift", _PyCFunction_CAST(_decimal_Decimal_shift), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_shift__doc__}, @@ -3774,11 +3777,11 @@ PyDoc_STRVAR(_decimal_Decimal_quantize__doc__, "Also unlike other operations, quantize never signals Underflow, even\n" "if the result is subnormal and inexact.\n" "\n" -"If the exponent of the second operand is larger than that of the first,\n" -"then rounding may be necessary. In this case, the rounding mode is\n" -"determined by the rounding argument if given, else by the given context\n" -"argument; if neither argument is given, the rounding mode of the\n" -"current thread\'s context is used."); +"If the exponent of the second operand is larger than that of the\n" +"first, then rounding may be necessary. In this case, the rounding\n" +"mode is determined by the rounding argument if given, else by the\n" +"given context argument; if neither argument is given, the rounding\n" +"mode of the current thread\'s context is used."); #define _DECIMAL_DECIMAL_QUANTIZE_METHODDEF \ {"quantize", _PyCFunction_CAST(_decimal_Decimal_quantize), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Decimal_quantize__doc__}, @@ -5197,8 +5200,8 @@ PyDoc_STRVAR(_decimal_Context_remainder_near__doc__, "\n" "Return x - y * n.\n" "\n" -"Here n is the integer nearest the exact value of x / y (if the result\n" -"is 0 then its sign will be the sign of x)."); +"Here n is the integer nearest the exact value of x / y (if the\n" +"result is 0 then its sign will be the sign of x)."); #define _DECIMAL_CONTEXT_REMAINDER_NEAR_METHODDEF \ {"remainder_near", _PyCFunction_CAST(_decimal_Context_remainder_near), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Context_remainder_near__doc__}, @@ -5336,7 +5339,8 @@ PyDoc_STRVAR(_decimal_Context_power__doc__, " * all three arguments must be integral\n" " * \'b\' must be nonnegative\n" " * at least one of \'a\' or \'b\' must be nonzero\n" -" * modulo must be nonzero and less than 10**prec in absolute value"); +" * modulo must be nonzero and less than 10**prec in absolute\n" +" value"); #define _DECIMAL_CONTEXT_POWER_METHODDEF \ {"power", _PyCFunction_CAST(_decimal_Context_power), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _decimal_Context_power__doc__}, @@ -6980,4 +6984,4 @@ _decimal_Context_same_quantum(PyObject *context, PyTypeObject *cls, PyObject *co #ifndef _DECIMAL_CONTEXT_APPLY_METHODDEF #define _DECIMAL_CONTEXT_APPLY_METHODDEF #endif /* !defined(_DECIMAL_CONTEXT_APPLY_METHODDEF) */ -/*[clinic end generated code: output=b288181c82fdc9f1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0eb835634388294e input=a9049054013a1b77]*/ diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 9e794be5c10..f827274eeff 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2297,6 +2297,10 @@ elementiter_next(PyObject *op) return NULL; } if (it->gettext) { + if (elem->tag != Py_None && !PyUnicode_Check(elem->tag)) { + Py_DECREF(elem); + continue; + } text = element_get_text(elem); goto gettext; } @@ -2570,6 +2574,7 @@ treebuilder_dealloc(PyObject *self) /* helpers for handling of arbitrary element-like objects */ /*[clinic input] +@permit_long_summary _elementtree._set_factories comment_factory: object @@ -2584,7 +2589,7 @@ For internal use only. static PyObject * _elementtree__set_factories_impl(PyObject *module, PyObject *comment_factory, PyObject *pi_factory) -/*[clinic end generated code: output=813b408adee26535 input=99d17627aea7fb3b]*/ +/*[clinic end generated code: output=813b408adee26535 input=0f415cb6b821f768]*/ { elementtreestate *st = get_elementtree_state(module); PyObject *old; diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index c702eecc700..b4595c55d51 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -860,7 +860,8 @@ static PyMethodDef partial_methods[] = { {"__reduce__", partial_reduce, METH_NOARGS}, {"__setstate__", partial_setstate, METH_O}, {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, + PyDoc_STR("partial is generic over the wrapped function's return type")}, {NULL, NULL} /* sentinel */ }; @@ -1060,7 +1061,6 @@ _functools_cmp_to_key_impl(PyObject *module, PyObject *mycmp) /*[clinic input] @permit_long_summary -@permit_long_docstring_body _functools.reduce function as func: object @@ -1070,9 +1070,9 @@ _functools.reduce Apply a function of two arguments cumulatively to the items of an iterable, from left to right. -This effectively reduces the iterable to a single value. If initial is present, -it is placed before the items of the iterable in the calculation, and serves as -a default when the iterable is empty. +This effectively reduces the iterable to a single value. If initial is +present, it is placed before the items of the iterable in the +calculation, and serves as a default when the iterable is empty. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1 + 2) + 3) + 4) + 5). @@ -1081,7 +1081,7 @@ calculates ((((1 + 2) + 3) + 4) + 5). static PyObject * _functools_reduce_impl(PyObject *module, PyObject *func, PyObject *seq, PyObject *result) -/*[clinic end generated code: output=30d898fe1267c79d input=5c9088c98ffe2793]*/ +/*[clinic end generated code: output=30d898fe1267c79d input=ff4d5c73100e72e8]*/ { PyObject *args, *it; diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index faffe8d28c5..20d48202165 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -520,14 +520,14 @@ _gdbm.gdbm.firstkey Return the starting key for the traversal. -It's possible to loop over every key in the database using this method -and the nextkey() method. The traversal is ordered by GDBM's internal -hash values, and won't be sorted by the key values. +It's possible to loop over every key in the database using this +method and the nextkey() method. The traversal is ordered by GDBM's +internal hash values, and won't be sorted by the key values. [clinic start generated code]*/ static PyObject * _gdbm_gdbm_firstkey_impl(gdbmobject *self, PyTypeObject *cls) -/*[clinic end generated code: output=139275e9c8b60827 input=aad5a7c886c542f5]*/ +/*[clinic end generated code: output=139275e9c8b60827 input=ba40f0d81eae0f35]*/ { PyObject *v; datum key; @@ -556,8 +556,8 @@ _gdbm.gdbm.nextkey Returns the key that follows key in the traversal. -The following code prints every key in the database db, without having -to create a list in memory that contains them all: +The following code prints every key in the database db, without +having to create a list in memory that contains them all: k = db.firstkey() while k is not None: @@ -568,7 +568,7 @@ to create a list in memory that contains them all: static PyObject * _gdbm_gdbm_nextkey_impl(gdbmobject *self, PyTypeObject *cls, const char *key, Py_ssize_t key_length) -/*[clinic end generated code: output=c81a69300ef41766 input=181f1130d5bfeb1e]*/ +/*[clinic end generated code: output=c81a69300ef41766 input=78293a913b02387e]*/ { PyObject *v; datum dbm_key, nextkey; @@ -599,14 +599,14 @@ Reorganize the database. If you have carried out a lot of deletions and would like to shrink the space used by the GDBM file, this routine will reorganize the -database. GDBM will not shorten the length of a database file except -by using this reorganization; otherwise, deleted file space will be -kept and reused as new (key,value) pairs are added. +database. GDBM will not shorten the length of a database file +except by using this reorganization; otherwise, deleted file space +will be kept and reused as new (key,value) pairs are added. [clinic start generated code]*/ static PyObject * _gdbm_gdbm_reorganize_impl(gdbmobject *self, PyTypeObject *cls) -/*[clinic end generated code: output=d77c69e8e3dd644a input=3e3ca0d2ea787861]*/ +/*[clinic end generated code: output=d77c69e8e3dd644a input=d7fcf03051c6f7cd]*/ { _gdbm_state *state = PyType_GetModuleState(cls); assert(state != NULL); diff --git a/Modules/_hacl/Lib_Memzero0.c b/Modules/_hacl/Lib_Memzero0.c index f94e0e2254a..7ab722e737c 100644 --- a/Modules/_hacl/Lib_Memzero0.c +++ b/Modules/_hacl/Lib_Memzero0.c @@ -31,7 +31,7 @@ #include <string.h> #endif -#if defined(__FreeBSD__) || defined(__NetBSD__) +#if defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__NetBSD__) #include <strings.h> #endif @@ -57,7 +57,7 @@ void Lib_Memzero0_memzero0(void *dst, uint64_t len) { SecureZeroMemory(dst, len_); #elif defined(__APPLE__) && defined(__MACH__) && defined(APPLE_HAS_MEMSET_S) memset_s(dst, len_, 0, len_); - #elif (defined(__linux__) && !defined(LINUX_NO_EXPLICIT_BZERO)) || defined(__FreeBSD__) || defined(__OpenBSD__) + #elif (defined(__linux__) && !defined(LINUX_NO_EXPLICIT_BZERO)) || defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__OpenBSD__) explicit_bzero(dst, len_); #elif defined(__NetBSD__) explicit_memset(dst, 0, len_); diff --git a/Modules/_hacl/libintvector.h b/Modules/_hacl/libintvector.h index 6db5253eee4..75ec2e05898 100644 --- a/Modules/_hacl/libintvector.h +++ b/Modules/_hacl/libintvector.h @@ -802,6 +802,18 @@ vector128 Lib_IntVector_Intrinsics_vec128_xor(vector128 x0, vector128 x1) { #if defined(HACL_CAN_COMPILE_VEC128) #include <altivec.h> + +/* GCC's AltiVec extension hijacks 'bool' as '__vector __bool int'. + Restore C99/C11 scalar bool for HACL* code. */ +#if defined(__GNUC__) && !defined(__clang__) +#undef bool +#define bool _Bool +#undef true +#define true 1 +#undef false +#define false 0 +#endif + #include <string.h> // for memcpy #include <stdint.h> diff --git a/Modules/_hacl/refresh.sh b/Modules/_hacl/refresh.sh index 72ceb27b7f7..c73bd4ee90f 100755 --- a/Modules/_hacl/refresh.sh +++ b/Modules/_hacl/refresh.sh @@ -22,7 +22,7 @@ fi # Update this when updating to a new version after verifying that the changes # the update brings in are good. -expected_hacl_star_rev=8ba599b2f6c9701b3dc961db895b0856a2210f76 +expected_hacl_star_rev=504c2987452f87fe44bce9b9f12e19d6e051761f hacl_dir="$(realpath "$1")" cd "$(dirname "$0")" diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index fa3eceb74d1..f895c903748 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -2369,18 +2369,17 @@ _hashlib_HMAC_digest_impl(HMACobject *self) /*[clinic input] @permit_long_summary -@permit_long_docstring_body _hashlib.HMAC.hexdigest Return hexadecimal digest of the bytes passed to the update() method so far. -This may be used to exchange the value safely in email or other non-binary -environments. +This may be used to exchange the value safely in email or other +non-binary environments. [clinic start generated code]*/ static PyObject * _hashlib_HMAC_hexdigest_impl(HMACobject *self) -/*[clinic end generated code: output=80d825be1eaae6a7 input=5e48db83ab1a4d19]*/ +/*[clinic end generated code: output=80d825be1eaae6a7 input=e37a84c36a43787c]*/ { unsigned char buf[EVP_MAX_MD_SIZE]; Py_ssize_t n = _hmac_digest(self, buf); @@ -2540,8 +2539,8 @@ _hashlib.get_fips_mode -> int Determine the OpenSSL FIPS mode of operation. For OpenSSL 3.0.0 and newer it returns the state of the default provider -in the default OSSL context. It's not quite the same as FIPS_mode() but good -enough for unittests. +in the default OSSL context. It's not quite the same as FIPS_mode() but +good enough for unittests. Effectively any non-zero return value indicates FIPS mode; values other than 1 may have additional significance. @@ -2549,7 +2548,7 @@ values other than 1 may have additional significance. static int _hashlib_get_fips_mode_impl(PyObject *module) -/*[clinic end generated code: output=87eece1bab4d3fa9 input=2db61538c41c6fef]*/ +/*[clinic end generated code: output=87eece1bab4d3fa9 input=a6cdb6901421d122]*/ { #ifdef Py_HAS_OPENSSL3_SUPPORT diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index c705376f4ed..014c8386949 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -247,6 +247,7 @@ _heapq_heapreplace_impl(PyObject *module, PyObject *heap, PyObject *item) } /*[clinic input] +@permit_long_summary @critical_section heap _heapq.heappushpop @@ -262,7 +263,7 @@ a separate call to heappop(). static PyObject * _heapq_heappushpop_impl(PyObject *module, PyObject *heap, PyObject *item) -/*[clinic end generated code: output=67231dc98ed5774f input=db05c81b1dd92c44]*/ +/*[clinic end generated code: output=67231dc98ed5774f input=491178a1c7d417ba]*/ { PyObject *returnitem; int cmp; @@ -593,13 +594,13 @@ _heapq.heappushpop_max Maxheap variant of heappushpop. -The combined action runs more efficiently than heappush_max() followed by -a separate call to heappop_max(). +The combined action runs more efficiently than heappush_max() +followed by a separate call to heappop_max(). [clinic start generated code]*/ static PyObject * _heapq_heappushpop_max_impl(PyObject *module, PyObject *heap, PyObject *item) -/*[clinic end generated code: output=ff0019f0941aca0d input=24d0defa6fd6df4a]*/ +/*[clinic end generated code: output=ff0019f0941aca0d input=52030929667a4c08]*/ { PyObject *returnitem; int cmp; diff --git a/Modules/_interpchannelsmodule.c b/Modules/_interpchannelsmodule.c index 3c356cb40d2..c6d107d243d 100644 --- a/Modules/_interpchannelsmodule.c +++ b/Modules/_interpchannelsmodule.c @@ -2586,6 +2586,7 @@ static PyObject * _channelid_from_xid(_PyXIData_t *data) { struct _channelid_xid *xid = (struct _channelid_xid *)_PyXIData_DATA(data); + PyObject *cidobj = NULL; // It might not be imported yet, so we can't use _get_current_module(). PyObject *mod = PyImport_ImportModule(MODULE_NAME_STR); @@ -2595,11 +2596,10 @@ _channelid_from_xid(_PyXIData_t *data) assert(mod != Py_None); module_state *state = get_module_state(mod); if (state == NULL) { - return NULL; + goto done; } // Note that we do not preserve the "resolve" flag. - PyObject *cidobj = NULL; int err = newchannelid(state->ChannelIDType, xid->cid, xid->end, _global_channels(), 0, 0, (channelid **)&cidobj); diff --git a/Modules/_interpqueuesmodule.c b/Modules/_interpqueuesmodule.c index 777b6854749..9979cd3457e 100644 --- a/Modules/_interpqueuesmodule.c +++ b/Modules/_interpqueuesmodule.c @@ -1363,6 +1363,7 @@ _queueobj_from_xid(_PyXIData_t *data) if (mod == NULL) { mod = PyImport_ImportModule(MODULE_NAME_STR); if (mod == NULL) { + Py_DECREF(qidobj); return NULL; } } @@ -1552,12 +1553,13 @@ _interpqueues.destroy Clear and destroy the queue. -Afterward attempts to use the queue will behave as though it never existed. +Afterward attempts to use the queue will behave as though it never +existed. [clinic start generated code]*/ static PyObject * _interpqueues_destroy_impl(PyObject *module, int64_t qid) -/*[clinic end generated code: output=46b35623f080cbff input=8632bba87f81e3e9]*/ +/*[clinic end generated code: output=46b35623f080cbff input=75136ad807e28677]*/ { int err = queue_destroy(&_globals.queues, qid); if (handle_queue_error(err, module, qid)) { diff --git a/Modules/_interpretersmodule.c b/Modules/_interpretersmodule.c index 4c9be1d525d..e7a91ced48f 100644 --- a/Modules/_interpretersmodule.c +++ b/Modules/_interpretersmodule.c @@ -1219,7 +1219,8 @@ _interpreters.run_func Execute the body of the provided function in the identified interpreter. Code objects are also supported. In both cases, closures and args -are not supported. Methods and other callables are not supported either. +are not supported. Methods and other callables are not supported +either. (See _interpreters.exec().) [clinic start generated code]*/ @@ -1227,7 +1228,7 @@ are not supported. Methods and other callables are not supported either. static PyObject * _interpreters_run_func_impl(PyObject *module, PyObject *id, PyObject *func, PyObject *shared, int restricted) -/*[clinic end generated code: output=131f7202ca4a0c5e input=2d62bb9b9eaf4948]*/ +/*[clinic end generated code: output=131f7202ca4a0c5e input=162b29823b33d5cc]*/ { #define FUNCNAME MODULE_NAME_STR ".run_func" PyThreadState *tstate = _PyThreadState_GET(); @@ -1374,6 +1375,7 @@ _interpreters_is_running_impl(PyObject *module, PyObject *id, int restricted) /*[clinic input] +@permit_long_summary _interpreters.get_config id: object * @@ -1384,7 +1386,7 @@ Return a representation of the config used to initialize the interpreter. static PyObject * _interpreters_get_config_impl(PyObject *module, PyObject *id, int restricted) -/*[clinic end generated code: output=56773353b9b7224a input=59519a01c22d96d1]*/ +/*[clinic end generated code: output=56773353b9b7224a input=8272d9ea9e4fb42a]*/ { if (id == Py_None) { id = NULL; @@ -1490,19 +1492,19 @@ _interpreters_decref_impl(PyObject *module, PyObject *id, int restricted) /*[clinic input] -@permit_long_docstring_body _interpreters.capture_exception exc as exc_arg: object = None Return a snapshot of an exception. -If "exc" is None then the current exception, if any, is used (but not cleared). -The returned snapshot is the same as what _interpreters.exec() returns. +If "exc" is None then the current exception, if any, is used (but not +cleared). The returned snapshot is the same as what +_interpreters.exec() returns. [clinic start generated code]*/ static PyObject * _interpreters_capture_exception_impl(PyObject *module, PyObject *exc_arg) -/*[clinic end generated code: output=ef3f5393ef9c88a6 input=6c4dcb78fb722217]*/ +/*[clinic end generated code: output=ef3f5393ef9c88a6 input=4e6289f8f2a47b5b]*/ { PyObject *exc = exc_arg; if (exc == NULL || exc == Py_None) { diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index 32c55f8e225..03e6fbe0888 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -70,7 +70,6 @@ PyDoc_STRVAR(module_doc, /*[clinic input] module _io -@permit_long_docstring_body _io.open file: object mode: str = "r" @@ -86,112 +85,113 @@ Open file and return a stream. Raise OSError upon failure. file is either a text or byte string giving the name (and the path if the file isn't in the current working directory) of the file to be opened or an integer file descriptor of the file to be -wrapped. (If a file descriptor is given, it is closed when the +wrapped. (If a file descriptor is given, it is closed when the returned I/O object is closed, unless closefd is set to False.) mode is an optional string that specifies the mode in which the file -is opened. It defaults to 'r' which means open for reading in text +is opened. It defaults to 'r' which means open for reading in text mode. Other common values are 'w' for writing (truncating the file if it already exists), 'x' for creating and writing to a new file, and 'a' for appending (which on some Unix systems, means that all writes append to the end of the file regardless of the current seek position). In text mode, if encoding is not specified the encoding used is platform -dependent: locale.getencoding() is called to get the current locale encoding. -(For reading and writing raw bytes use binary mode and leave encoding -unspecified.) The available modes are: +dependent: locale.getencoding() is called to get the current locale +encoding. (For reading and writing raw bytes use binary mode and leave +encoding unspecified.) The available modes are: -========= =============================================================== +========= ========================================================== Character Meaning ---------- --------------------------------------------------------------- +--------- ---------------------------------------------------------- 'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and open it for writing -'a' open for writing, appending to the end of the file if it exists +'a' open for writing, appending to the end of the file if it + exists 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing) -========= =============================================================== +========= ========================================================== -The default mode is 'rt' (open for reading text). For binary random +The default mode is 'rt' (open for reading text). For binary random access, the mode 'w+b' opens and truncates the file to 0 bytes, while -'r+b' opens the file without truncation. The 'x' mode implies 'w' and +'r+b' opens the file without truncation. The 'x' mode implies 'w' and raises an `FileExistsError` if the file already exists. Python distinguishes between files opened in binary and text modes, -even when the underlying operating system doesn't. Files opened in +even when the underlying operating system doesn't. Files opened in binary mode (appending 'b' to the mode argument) return contents as -bytes objects without any decoding. In text mode (the default, or when +bytes objects without any decoding. In text mode (the default, or when 't' is appended to the mode argument), the contents of the file are returned as strings, the bytes having been first decoded using a platform-dependent encoding or using the specified encoding if given. buffering is an optional integer used to set the buffering policy. -Pass 0 to switch buffering off (only allowed in binary mode), 1 to select -line buffering (only usable in text mode), and an integer > 1 to indicate -the size of a fixed-size chunk buffer. When no buffering argument is -given, the default buffering policy works as follows: +Pass 0 to switch buffering off (only allowed in binary mode), 1 to +select line buffering (only usable in text mode), and an integer > 1 to +indicate the size of a fixed-size chunk buffer. When no buffering +argument is given, the default buffering policy works as follows: * Binary files are buffered in fixed-size chunks; the size of the buffer - is max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE) - when the device block size is available. - On most systems, the buffer will typically be 128 kilobytes long. + is max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE) when the device + block size is available. + On most systems, the buffer will typically be 128 kilobytes long. * "Interactive" text files (files for which isatty() returns True) use line buffering. Other text files use the policy described above for binary files. encoding is the name of the encoding used to decode or encode the -file. This should only be used in text mode. The default encoding is +file. This should only be used in text mode. The default encoding is platform dependent, but any encoding supported by Python can be passed. See the codecs module for the list of supported encodings. errors is an optional string that specifies how encoding errors are to -be handled---this argument should not be used in binary mode. Pass +be handled---this argument should not be used in binary mode. Pass 'strict' to raise a ValueError exception if there is an encoding error (the default of None has the same effect), or pass 'ignore' to ignore -errors. (Note that ignoring encoding errors can lead to data loss.) +errors. (Note that ignoring encoding errors can lead to data loss.) See the documentation for codecs.register or run 'help(codecs.Codec)' for a list of the permitted encoding error strings. newline controls how universal newlines works (it only applies to text -mode). It can be None, '', '\n', '\r', and '\r\n'. It works as +mode). It can be None, '', '\n', '\r', and '\r\n'. It works as follows: -* On input, if newline is None, universal newlines mode is - enabled. Lines in the input can end in '\n', '\r', or '\r\n', and - these are translated into '\n' before being returned to the - caller. If it is '', universal newline mode is enabled, but line - endings are returned to the caller untranslated. If it has any of - the other legal values, input lines are only terminated by the given - string, and the line ending is returned to the caller untranslated. +* On input, if newline is None, universal newlines mode is enabled. + Lines in the input can end in '\n', '\r', or '\r\n', and these are + translated into '\n' before being returned to the caller. If it is + '', universal newline mode is enabled, but line endings are returned + to the caller untranslated. If it has any of the other legal values, + input lines are only terminated by the given string, and the line + ending is returned to the caller untranslated. * On output, if newline is None, any '\n' characters written are - translated to the system default line separator, os.linesep. If - newline is '' or '\n', no translation takes place. If newline is any + translated to the system default line separator, os.linesep. If + newline is '' or '\n', no translation takes place. If newline is any of the other legal values, any '\n' characters written are translated to the given string. If closefd is False, the underlying file descriptor will be kept open -when the file is closed. This does not work when a file name is given +when the file is closed. This does not work when a file name is given and must be True in that case. -A custom opener can be used by passing a callable as *opener*. The +A custom opener can be used by passing a callable as *opener*. The underlying file descriptor for the file object is then obtained by -calling *opener* with (*file*, *flags*). *opener* must return an open +calling *opener* with (*file*, *flags*). *opener* must return an open file descriptor (passing os.open as *opener* results in functionality similar to passing None). open() returns a file object whose type depends on the mode, and through which the standard file operations such as reading and writing -are performed. When open() is used to open a file in a text mode ('w', -'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open +are performed. When open() is used to open a file in a text mode ('w', +'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open a file in a binary mode, the returned class varies: in read binary mode, it returns a BufferedReader; in write binary and append binary modes, it returns a BufferedWriter, and in read/write mode, it returns a BufferedRandom. It is also possible to use a string or bytearray as a file for both -reading and writing. For strings StringIO can be used like a file +reading and writing. For strings StringIO can be used like a file opened in a text mode, and for bytes a BytesIO can be used like a file opened in a binary mode. [clinic start generated code]*/ @@ -200,7 +200,7 @@ static PyObject * _io_open_impl(PyObject *module, PyObject *file, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd, PyObject *opener) -/*[clinic end generated code: output=aefafc4ce2b46dc0 input=8629579a442a99e3]*/ +/*[clinic end generated code: output=aefafc4ce2b46dc0 input=b3cefa70bef404b3]*/ { size_t i; @@ -499,21 +499,20 @@ _io_text_encoding_impl(PyObject *module, PyObject *encoding, int stacklevel) /*[clinic input] -@permit_long_docstring_body _io.open_code path : unicode Opens the provided file with the intent to import the contents. -This may perform extra validation beyond open(), but is otherwise interchangeable -with calling open(path, 'rb'). +This may perform extra validation beyond open(), but is otherwise +interchangeable with calling open(path, 'rb'). [clinic start generated code]*/ static PyObject * _io_open_code_impl(PyObject *module, PyObject *path) -/*[clinic end generated code: output=2fe4ecbd6f3d6844 input=53d38a37d780d034]*/ +/*[clinic end generated code: output=2fe4ecbd6f3d6844 input=2803c35aeb63c719]*/ { return PyFile_OpenCodeObject(path); } diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 0fdae7b2d21..5537947f6a5 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -1509,7 +1509,9 @@ buffered_iternext(PyObject *op) tp == state->PyBufferedRandom_Type) { /* Skip method call overhead for speed */ + Py_BEGIN_CRITICAL_SECTION(self); line = _buffered_readline(self, -1); + Py_END_CRITICAL_SECTION(); } else { line = PyObject_CallMethodNoArgs((PyObject *)self, diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index d088bb0efac..8cdcbd0d89c 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -488,13 +488,13 @@ _io.BytesIO.read1 Read at most size bytes, returned as a bytes object. -If the size argument is negative or omitted, read until EOF is reached. -Return an empty bytes object at EOF. +If the size argument is negative or omitted, read until EOF is +reached. Return an empty bytes object at EOF. [clinic start generated code]*/ static PyObject * _io_BytesIO_read1_impl(bytesio *self, Py_ssize_t size) -/*[clinic end generated code: output=d0f843285aa95f1c input=a08fc9e507ab380c]*/ +/*[clinic end generated code: output=d0f843285aa95f1c input=796ff4e0efccc4d9]*/ { return _io_BytesIO_read_impl(self, size); } @@ -792,13 +792,13 @@ _io.BytesIO.writelines Write lines to the file. Note that newlines are not added. lines can be any iterable object -producing bytes-like objects. This is equivalent to calling write() for -each element. +producing bytes-like objects. This is equivalent to calling write() +for each element. [clinic start generated code]*/ static PyObject * _io_BytesIO_writelines_impl(bytesio *self, PyObject *lines) -/*[clinic end generated code: output=03a43a75773bc397 input=5d6a616ae39dc9ca]*/ +/*[clinic end generated code: output=03a43a75773bc397 input=d265f76533b058e7]*/ { PyObject *it, *item; diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h index 90b80af3018..f0363806438 100644 --- a/Modules/_io/clinic/_iomodule.c.h +++ b/Modules/_io/clinic/_iomodule.c.h @@ -18,112 +18,113 @@ PyDoc_STRVAR(_io_open__doc__, "file is either a text or byte string giving the name (and the path\n" "if the file isn\'t in the current working directory) of the file to\n" "be opened or an integer file descriptor of the file to be\n" -"wrapped. (If a file descriptor is given, it is closed when the\n" +"wrapped. (If a file descriptor is given, it is closed when the\n" "returned I/O object is closed, unless closefd is set to False.)\n" "\n" "mode is an optional string that specifies the mode in which the file\n" -"is opened. It defaults to \'r\' which means open for reading in text\n" +"is opened. It defaults to \'r\' which means open for reading in text\n" "mode. Other common values are \'w\' for writing (truncating the file if\n" "it already exists), \'x\' for creating and writing to a new file, and\n" "\'a\' for appending (which on some Unix systems, means that all writes\n" "append to the end of the file regardless of the current seek position).\n" "In text mode, if encoding is not specified the encoding used is platform\n" -"dependent: locale.getencoding() is called to get the current locale encoding.\n" -"(For reading and writing raw bytes use binary mode and leave encoding\n" -"unspecified.) The available modes are:\n" +"dependent: locale.getencoding() is called to get the current locale\n" +"encoding. (For reading and writing raw bytes use binary mode and leave\n" +"encoding unspecified.) The available modes are:\n" "\n" -"========= ===============================================================\n" +"========= ==========================================================\n" "Character Meaning\n" -"--------- ---------------------------------------------------------------\n" +"--------- ----------------------------------------------------------\n" "\'r\' open for reading (default)\n" "\'w\' open for writing, truncating the file first\n" "\'x\' create a new file and open it for writing\n" -"\'a\' open for writing, appending to the end of the file if it exists\n" +"\'a\' open for writing, appending to the end of the file if it\n" +" exists\n" "\'b\' binary mode\n" "\'t\' text mode (default)\n" "\'+\' open a disk file for updating (reading and writing)\n" -"========= ===============================================================\n" +"========= ==========================================================\n" "\n" -"The default mode is \'rt\' (open for reading text). For binary random\n" +"The default mode is \'rt\' (open for reading text). For binary random\n" "access, the mode \'w+b\' opens and truncates the file to 0 bytes, while\n" -"\'r+b\' opens the file without truncation. The \'x\' mode implies \'w\' and\n" +"\'r+b\' opens the file without truncation. The \'x\' mode implies \'w\' and\n" "raises an `FileExistsError` if the file already exists.\n" "\n" "Python distinguishes between files opened in binary and text modes,\n" -"even when the underlying operating system doesn\'t. Files opened in\n" +"even when the underlying operating system doesn\'t. Files opened in\n" "binary mode (appending \'b\' to the mode argument) return contents as\n" -"bytes objects without any decoding. In text mode (the default, or when\n" +"bytes objects without any decoding. In text mode (the default, or when\n" "\'t\' is appended to the mode argument), the contents of the file are\n" "returned as strings, the bytes having been first decoded using a\n" "platform-dependent encoding or using the specified encoding if given.\n" "\n" "buffering is an optional integer used to set the buffering policy.\n" -"Pass 0 to switch buffering off (only allowed in binary mode), 1 to select\n" -"line buffering (only usable in text mode), and an integer > 1 to indicate\n" -"the size of a fixed-size chunk buffer. When no buffering argument is\n" -"given, the default buffering policy works as follows:\n" +"Pass 0 to switch buffering off (only allowed in binary mode), 1 to\n" +"select line buffering (only usable in text mode), and an integer > 1 to\n" +"indicate the size of a fixed-size chunk buffer. When no buffering\n" +"argument is given, the default buffering policy works as follows:\n" "\n" "* Binary files are buffered in fixed-size chunks; the size of the buffer\n" -" is max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE)\n" -" when the device block size is available.\n" -" On most systems, the buffer will typically be 128 kilobytes long.\n" +" is max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE) when the device\n" +" block size is available.\n" +" On most systems, the buffer will typically be 128 kilobytes long.\n" "\n" "* \"Interactive\" text files (files for which isatty() returns True)\n" " use line buffering. Other text files use the policy described above\n" " for binary files.\n" "\n" "encoding is the name of the encoding used to decode or encode the\n" -"file. This should only be used in text mode. The default encoding is\n" +"file. This should only be used in text mode. The default encoding is\n" "platform dependent, but any encoding supported by Python can be\n" "passed. See the codecs module for the list of supported encodings.\n" "\n" "errors is an optional string that specifies how encoding errors are to\n" -"be handled---this argument should not be used in binary mode. Pass\n" +"be handled---this argument should not be used in binary mode. Pass\n" "\'strict\' to raise a ValueError exception if there is an encoding error\n" "(the default of None has the same effect), or pass \'ignore\' to ignore\n" -"errors. (Note that ignoring encoding errors can lead to data loss.)\n" +"errors. (Note that ignoring encoding errors can lead to data loss.)\n" "See the documentation for codecs.register or run \'help(codecs.Codec)\'\n" "for a list of the permitted encoding error strings.\n" "\n" "newline controls how universal newlines works (it only applies to text\n" -"mode). It can be None, \'\', \'\\n\', \'\\r\', and \'\\r\\n\'. It works as\n" +"mode). It can be None, \'\', \'\\n\', \'\\r\', and \'\\r\\n\'. It works as\n" "follows:\n" "\n" -"* On input, if newline is None, universal newlines mode is\n" -" enabled. Lines in the input can end in \'\\n\', \'\\r\', or \'\\r\\n\', and\n" -" these are translated into \'\\n\' before being returned to the\n" -" caller. If it is \'\', universal newline mode is enabled, but line\n" -" endings are returned to the caller untranslated. If it has any of\n" -" the other legal values, input lines are only terminated by the given\n" -" string, and the line ending is returned to the caller untranslated.\n" +"* On input, if newline is None, universal newlines mode is enabled.\n" +" Lines in the input can end in \'\\n\', \'\\r\', or \'\\r\\n\', and these are\n" +" translated into \'\\n\' before being returned to the caller. If it is\n" +" \'\', universal newline mode is enabled, but line endings are returned\n" +" to the caller untranslated. If it has any of the other legal values,\n" +" input lines are only terminated by the given string, and the line\n" +" ending is returned to the caller untranslated.\n" "\n" "* On output, if newline is None, any \'\\n\' characters written are\n" -" translated to the system default line separator, os.linesep. If\n" -" newline is \'\' or \'\\n\', no translation takes place. If newline is any\n" +" translated to the system default line separator, os.linesep. If\n" +" newline is \'\' or \'\\n\', no translation takes place. If newline is any\n" " of the other legal values, any \'\\n\' characters written are translated\n" " to the given string.\n" "\n" "If closefd is False, the underlying file descriptor will be kept open\n" -"when the file is closed. This does not work when a file name is given\n" +"when the file is closed. This does not work when a file name is given\n" "and must be True in that case.\n" "\n" -"A custom opener can be used by passing a callable as *opener*. The\n" +"A custom opener can be used by passing a callable as *opener*. The\n" "underlying file descriptor for the file object is then obtained by\n" -"calling *opener* with (*file*, *flags*). *opener* must return an open\n" +"calling *opener* with (*file*, *flags*). *opener* must return an open\n" "file descriptor (passing os.open as *opener* results in functionality\n" "similar to passing None).\n" "\n" "open() returns a file object whose type depends on the mode, and\n" "through which the standard file operations such as reading and writing\n" -"are performed. When open() is used to open a file in a text mode (\'w\',\n" -"\'r\', \'wt\', \'rt\', etc.), it returns a TextIOWrapper. When used to open\n" +"are performed. When open() is used to open a file in a text mode (\'w\',\n" +"\'r\', \'wt\', \'rt\', etc.), it returns a TextIOWrapper. When used to open\n" "a file in a binary mode, the returned class varies: in read binary\n" "mode, it returns a BufferedReader; in write binary and append binary\n" "modes, it returns a BufferedWriter, and in read/write mode, it returns\n" "a BufferedRandom.\n" "\n" "It is also possible to use a string or bytearray as a file for both\n" -"reading and writing. For strings StringIO can be used like a file\n" +"reading and writing. For strings StringIO can be used like a file\n" "opened in a text mode, and for bytes a BytesIO can be used like a file\n" "opened in a binary mode."); @@ -352,8 +353,8 @@ PyDoc_STRVAR(_io_open_code__doc__, "\n" "Opens the provided file with the intent to import the contents.\n" "\n" -"This may perform extra validation beyond open(), but is otherwise interchangeable\n" -"with calling open(path, \'rb\')."); +"This may perform extra validation beyond open(), but is otherwise\n" +"interchangeable with calling open(path, \'rb\')."); #define _IO_OPEN_CODE_METHODDEF \ {"open_code", _PyCFunction_CAST(_io_open_code), METH_FASTCALL|METH_KEYWORDS, _io_open_code__doc__}, @@ -410,4 +411,4 @@ _io_open_code(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec exit: return return_value; } -/*[clinic end generated code: output=7a8e032c0424bce2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5190d11f0803bfe8 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bytesio.c.h b/Modules/_io/clinic/bytesio.c.h index 6595dc937bb..fad11ea6c9f 100644 --- a/Modules/_io/clinic/bytesio.c.h +++ b/Modules/_io/clinic/bytesio.c.h @@ -254,8 +254,8 @@ PyDoc_STRVAR(_io_BytesIO_read1__doc__, "\n" "Read at most size bytes, returned as a bytes object.\n" "\n" -"If the size argument is negative or omitted, read until EOF is reached.\n" -"Return an empty bytes object at EOF."); +"If the size argument is negative or omitted, read until EOF is\n" +"reached. Return an empty bytes object at EOF."); #define _IO_BYTESIO_READ1_METHODDEF \ {"read1", _PyCFunction_CAST(_io_BytesIO_read1), METH_FASTCALL, _io_BytesIO_read1__doc__}, @@ -529,8 +529,8 @@ PyDoc_STRVAR(_io_BytesIO_writelines__doc__, "Write lines to the file.\n" "\n" "Note that newlines are not added. lines can be any iterable object\n" -"producing bytes-like objects. This is equivalent to calling write() for\n" -"each element."); +"producing bytes-like objects. This is equivalent to calling write()\n" +"for each element."); #define _IO_BYTESIO_WRITELINES_METHODDEF \ {"writelines", (PyCFunction)_io_BytesIO_writelines, METH_O, _io_BytesIO_writelines__doc__}, @@ -637,4 +637,4 @@ _io_BytesIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=daa81dfdae5ccc57 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=eac3911e207aaf45 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/fileio.c.h b/Modules/_io/clinic/fileio.c.h index 96c31ce8d6f..890b6bc3fac 100644 --- a/Modules/_io/clinic/fileio.c.h +++ b/Modules/_io/clinic/fileio.c.h @@ -15,8 +15,8 @@ PyDoc_STRVAR(_io_FileIO_close__doc__, "\n" "Close the file.\n" "\n" -"A closed file cannot be used for further I/O operations. close() may be\n" -"called more than once without error."); +"A closed file cannot be used for further I/O operations. close()\n" +"may be called more than once without error."); #define _IO_FILEIO_CLOSE_METHODDEF \ {"close", _PyCFunction_CAST(_io_FileIO_close), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_close__doc__}, @@ -41,16 +41,19 @@ PyDoc_STRVAR(_io_FileIO___init____doc__, "Open a file.\n" "\n" "The mode can be \'r\' (default), \'w\', \'x\' or \'a\' for reading,\n" -"writing, exclusive creation or appending. The file will be created if it\n" -"doesn\'t exist when opened for writing or appending; it will be truncated\n" -"when opened for writing. A FileExistsError will be raised if it already\n" -"exists when opened for creating. Opening a file for creating implies\n" -"writing so this mode behaves in a similar way to \'w\'.Add a \'+\' to the mode\n" -"to allow simultaneous reading and writing. A custom opener can be used by\n" -"passing a callable as *opener*. The underlying file descriptor for the file\n" -"object is then obtained by calling opener with (*name*, *flags*).\n" -"*opener* must return an open file descriptor (passing os.open as *opener*\n" -"results in functionality similar to passing None)."); +"writing, exclusive creation or appending. The file will be created\n" +"if it doesn\'t exist when opened for writing or appending; it will be\n" +"truncated when opened for writing. A FileExistsError will be raised\n" +"if it already exists when opened for creating. Opening a file for\n" +"creating implies writing so this mode behaves in a similar way to\n" +"\'w\'. Add a \'+\' to the mode to allow simultaneous reading and\n" +"writing.\n" +"\n" +"A custom opener can be used by passing a callable as *opener*.\n" +"The underlying file descriptor for the file object is then obtained\n" +"by calling opener with (*name*, *flags*). *opener* must return\n" +"an open file descriptor (passing os.open as *opener* results in\n" +"functionality similar to passing None)."); static int _io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode, @@ -270,11 +273,13 @@ PyDoc_STRVAR(_io_FileIO_readall__doc__, "\n" "Read all data from the file, returned as bytes.\n" "\n" -"Reads until either there is an error or read() returns size 0 (indicates EOF).\n" -"If the file is already at EOF, returns an empty bytes object.\n" +"Reads until either there is an error or read() returns size 0\n" +"(indicates EOF). If the file is already at EOF, returns an empty\n" +"bytes object.\n" "\n" -"In non-blocking mode, returns as much data as could be read before EAGAIN. If no\n" -"data is available (EAGAIN is returned before bytes are read) returns None."); +"In non-blocking mode, returns as much data as could be read before\n" +"EAGAIN. If no data is available (EAGAIN is returned before bytes\n" +"are read) returns None."); #define _IO_FILEIO_READALL_METHODDEF \ {"readall", _PyCFunction_CAST(_io_FileIO_readall), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_readall__doc__}, @@ -298,14 +303,14 @@ PyDoc_STRVAR(_io_FileIO_read__doc__, "\n" "Read at most size bytes, returned as bytes.\n" "\n" -"If size is less than 0, read all bytes in the file making multiple read calls.\n" -"See ``FileIO.readall``.\n" +"If size is less than 0, read all bytes in the file making multiple\n" +"read calls. See ``FileIO.readall``.\n" "\n" -"Attempts to make only one system call, retrying only per PEP 475 (EINTR). This\n" -"means less data may be returned than requested.\n" +"Attempts to make only one system call, retrying only per PEP 475\n" +"(EINTR). This means less data may be returned than requested.\n" "\n" -"In non-blocking mode, returns None if no data is available. Return an empty\n" -"bytes object at EOF."); +"In non-blocking mode, returns None if no data is available. Return\n" +"an empty bytes object at EOF."); #define _IO_FILEIO_READ_METHODDEF \ {"read", _PyCFunction_CAST(_io_FileIO_read), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_read__doc__}, @@ -358,8 +363,8 @@ PyDoc_STRVAR(_io_FileIO_write__doc__, "Write buffer b to file, return number of bytes written.\n" "\n" "Only makes one system call, so not all of the data may be written.\n" -"The number of bytes actually written is returned. In non-blocking mode,\n" -"returns None if the write would block."); +"The number of bytes actually written is returned. In non-blocking\n" +"mode, returns None if the write would block."); #define _IO_FILEIO_WRITE_METHODDEF \ {"write", _PyCFunction_CAST(_io_FileIO_write), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_write__doc__}, @@ -412,11 +417,12 @@ PyDoc_STRVAR(_io_FileIO_seek__doc__, "\n" "Move to new file position and return the file position.\n" "\n" -"Argument offset is a byte count. Optional argument whence defaults to\n" -"SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values\n" -"are SEEK_CUR or 1 (move relative to current position, positive or negative),\n" -"and SEEK_END or 2 (move relative to end of file, usually negative, although\n" -"many platforms allow seeking beyond the end of a file).\n" +"Argument offset is a byte count. Optional argument whence defaults\n" +"to SEEK_SET or 0 (offset from start of file, offset should be >= 0);\n" +"other values are SEEK_CUR or 1 (move relative to current position,\n" +"positive or negative), and SEEK_END or 2 (move relative to end of\n" +"file, usually negative, although many platforms allow seeking beyond\n" +"the end of a file).\n" "\n" "Note that not all file objects are seekable."); @@ -547,4 +553,4 @@ _io_FileIO_isatty(PyObject *self, PyObject *Py_UNUSED(ignored)) #ifndef _IO_FILEIO_TRUNCATE_METHODDEF #define _IO_FILEIO_TRUNCATE_METHODDEF #endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */ -/*[clinic end generated code: output=2e48f3df2f189170 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=453d584e2e72f986 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/iobase.c.h b/Modules/_io/clinic/iobase.c.h index 402448545df..e4438c26431 100644 --- a/Modules/_io/clinic/iobase.c.h +++ b/Modules/_io/clinic/iobase.c.h @@ -19,11 +19,13 @@ PyDoc_STRVAR(_io__IOBase_seek__doc__, " whence\n" " The relative position to seek from.\n" "\n" -"The offset is interpreted relative to the position indicated by whence.\n" -"Values for whence are:\n" +"The offset is interpreted relative to the position indicated by\n" +"whence. Values for whence are:\n" "\n" -"* os.SEEK_SET or 0 -- start of stream (the default); offset should be zero or positive\n" -"* os.SEEK_CUR or 1 -- current stream position; offset may be negative\n" +"* os.SEEK_SET or 0 -- start of stream (the default); offset should\n" +" be zero or positive\n" +"* os.SEEK_CUR or 1 -- current stream position; offset may be\n" +" negative\n" "* os.SEEK_END or 2 -- end of stream; offset is usually negative\n" "\n" "Return the new absolute position."); @@ -103,8 +105,8 @@ PyDoc_STRVAR(_io__IOBase_truncate__doc__, "\n" "Truncate file to size bytes.\n" "\n" -"File pointer is left unchanged. Size defaults to the current IO position\n" -"as reported by tell(). Return the new size."); +"File pointer is left unchanged. Size defaults to the current IO\n" +"position as reported by tell(). Return the new size."); #define _IO__IOBASE_TRUNCATE_METHODDEF \ {"truncate", _PyCFunction_CAST(_io__IOBase_truncate), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__IOBase_truncate__doc__}, @@ -443,4 +445,4 @@ _io__RawIOBase_readall(PyObject *self, PyObject *Py_UNUSED(ignored)) { return _io__RawIOBase_readall_impl(self); } -/*[clinic end generated code: output=9359e74d95534bef input=a9049054013a1b77]*/ +/*[clinic end generated code: output=28c06bb6db32c096 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/stringio.c.h b/Modules/_io/clinic/stringio.c.h index 83165e5f7ad..d6d4afb9b63 100644 --- a/Modules/_io/clinic/stringio.c.h +++ b/Modules/_io/clinic/stringio.c.h @@ -179,7 +179,8 @@ PyDoc_STRVAR(_io_StringIO_seek__doc__, "\n" "Change stream position.\n" "\n" -"Seek to character offset pos relative to position indicated by whence:\n" +"Seek to character offset pos relative to position indicated by\n" +"whence:\n" " 0 Start of stream (the default). pos should be >= 0;\n" " 1 Current position - pos must be 0;\n" " 2 End of stream - pos must be 0.\n" @@ -550,4 +551,4 @@ _io_StringIO_newlines_get(PyObject *self, void *Py_UNUSED(context)) return return_value; } -/*[clinic end generated code: output=bccc25ef8e6ce9ef input=a9049054013a1b77]*/ +/*[clinic end generated code: output=730c34b2a6c0500b input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/textio.c.h b/Modules/_io/clinic/textio.c.h index 3898a9c2982..9407076b850 100644 --- a/Modules/_io/clinic/textio.c.h +++ b/Modules/_io/clinic/textio.c.h @@ -16,7 +16,8 @@ PyDoc_STRVAR(_io__TextIOBase_detach__doc__, "\n" "Separate the underlying buffer from the TextIOBase and return it.\n" "\n" -"After the underlying buffer has been detached, the TextIO is in an unusable state."); +"After the underlying buffer has been detached, the TextIO is in\n" +"an unusable state."); #define _IO__TEXTIOBASE_DETACH_METHODDEF \ {"detach", _PyCFunction_CAST(_io__TextIOBase_detach), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__TextIOBase_detach__doc__}, @@ -40,8 +41,8 @@ PyDoc_STRVAR(_io__TextIOBase_read__doc__, "\n" "Read at most size characters from stream.\n" "\n" -"Read from underlying buffer until we have size characters or we hit EOF.\n" -"If size is negative or omitted, read until EOF."); +"Read from underlying buffer until we have size characters or we hit\n" +"EOF. If size is negative or omitted, read until EOF."); #define _IO__TEXTIOBASE_READ_METHODDEF \ {"read", _PyCFunction_CAST(_io__TextIOBase_read), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__TextIOBase_read__doc__}, @@ -964,8 +965,8 @@ PyDoc_STRVAR(_io_TextIOWrapper_tell__doc__, "\n" "Return the stream position as an opaque number.\n" "\n" -"The return value of tell() can be given as input to seek(), to restore a\n" -"previous stream position."); +"The return value of tell() can be given as input to seek(), to\n" +"restore a previous stream position."); #define _IO_TEXTIOWRAPPER_TELL_METHODDEF \ {"tell", (PyCFunction)_io_TextIOWrapper_tell, METH_NOARGS, _io_TextIOWrapper_tell__doc__}, @@ -1328,4 +1329,4 @@ _io_TextIOWrapper__CHUNK_SIZE_set(PyObject *self, PyObject *value, void *Py_UNUS return return_value; } -/*[clinic end generated code: output=c38e6cd5ff4b7eea input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f900b42090c9781c input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/winconsoleio.c.h b/Modules/_io/clinic/winconsoleio.c.h index 7af5923b6c1..bd8073cd0af 100644 --- a/Modules/_io/clinic/winconsoleio.c.h +++ b/Modules/_io/clinic/winconsoleio.c.h @@ -46,9 +46,9 @@ PyDoc_STRVAR(_io__WindowsConsoleIO___init____doc__, "\n" "Open a console buffer by file descriptor.\n" "\n" -"The mode can be \'rb\' (default), or \'wb\' for reading or writing bytes. All\n" -"other mode characters will be ignored. Mode \'b\' will be assumed if it is\n" -"omitted. The *opener* parameter is always ignored."); +"The mode can be \'rb\' (default), or \'wb\' for reading or writing\n" +"bytes. All other mode characters will be ignored. Mode \'b\' will be\n" +"assumed if it is omitted. The *opener* parameter is always ignored."); static int _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, @@ -463,4 +463,4 @@ _io__WindowsConsoleIO_isatty(PyObject *self, PyObject *Py_UNUSED(ignored)) #ifndef _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF #define _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF #endif /* !defined(_IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF) */ -/*[clinic end generated code: output=ce50bcd905f1f213 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=dfe49dd71f4f4b1d input=a9049054013a1b77]*/ diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 5d7741fdd83..3aeb30dfe24 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -153,13 +153,13 @@ _io.FileIO.close Close the file. -A closed file cannot be used for further I/O operations. close() may be -called more than once without error. +A closed file cannot be used for further I/O operations. close() +may be called more than once without error. [clinic start generated code]*/ static PyObject * _io_FileIO_close_impl(fileio *self, PyTypeObject *cls) -/*[clinic end generated code: output=c30cbe9d1f23ca58 input=70da49e63db7c64d]*/ +/*[clinic end generated code: output=c30cbe9d1f23ca58 input=b405751dc4163da3]*/ { PyObject *res; int rc; @@ -231,22 +231,25 @@ _io.FileIO.__init__ Open a file. The mode can be 'r' (default), 'w', 'x' or 'a' for reading, -writing, exclusive creation or appending. The file will be created if it -doesn't exist when opened for writing or appending; it will be truncated -when opened for writing. A FileExistsError will be raised if it already -exists when opened for creating. Opening a file for creating implies -writing so this mode behaves in a similar way to 'w'.Add a '+' to the mode -to allow simultaneous reading and writing. A custom opener can be used by -passing a callable as *opener*. The underlying file descriptor for the file -object is then obtained by calling opener with (*name*, *flags*). -*opener* must return an open file descriptor (passing os.open as *opener* -results in functionality similar to passing None). +writing, exclusive creation or appending. The file will be created +if it doesn't exist when opened for writing or appending; it will be +truncated when opened for writing. A FileExistsError will be raised +if it already exists when opened for creating. Opening a file for +creating implies writing so this mode behaves in a similar way to +'w'. Add a '+' to the mode to allow simultaneous reading and +writing. + +A custom opener can be used by passing a callable as *opener*. +The underlying file descriptor for the file object is then obtained +by calling opener with (*name*, *flags*). *opener* must return +an open file descriptor (passing os.open as *opener* results in +functionality similar to passing None). [clinic start generated code]*/ static int _io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode, int closefd, PyObject *opener) -/*[clinic end generated code: output=23413f68e6484bbd input=588aac967e0ba74b]*/ +/*[clinic end generated code: output=23413f68e6484bbd input=bac4efcd8f930bf3]*/ { #ifdef MS_WINDOWS wchar_t *widename = NULL; @@ -725,7 +728,6 @@ new_buffersize(fileio *self, size_t currentsize) } /*[clinic input] -@permit_long_docstring_body _io.FileIO.readall cls: defining_class @@ -733,16 +735,18 @@ _io.FileIO.readall Read all data from the file, returned as bytes. -Reads until either there is an error or read() returns size 0 (indicates EOF). -If the file is already at EOF, returns an empty bytes object. +Reads until either there is an error or read() returns size 0 +(indicates EOF). If the file is already at EOF, returns an empty +bytes object. -In non-blocking mode, returns as much data as could be read before EAGAIN. If no -data is available (EAGAIN is returned before bytes are read) returns None. +In non-blocking mode, returns as much data as could be read before +EAGAIN. If no data is available (EAGAIN is returned before bytes +are read) returns None. [clinic start generated code]*/ static PyObject * _io_FileIO_readall_impl(fileio *self, PyTypeObject *cls) -/*[clinic end generated code: output=d546737ec895c462 input=cecda40bf9961299]*/ +/*[clinic end generated code: output=d546737ec895c462 input=65d05bd0169f2df5]*/ { Py_off_t pos, end; PyBytesWriter *writer; @@ -850,7 +854,6 @@ _io_FileIO_readall_impl(fileio *self, PyTypeObject *cls) } /*[clinic input] -@permit_long_docstring_body _io.FileIO.read cls: defining_class size: Py_ssize_t(accept={int, NoneType}) = -1 @@ -858,19 +861,19 @@ _io.FileIO.read Read at most size bytes, returned as bytes. -If size is less than 0, read all bytes in the file making multiple read calls. -See ``FileIO.readall``. +If size is less than 0, read all bytes in the file making multiple +read calls. See ``FileIO.readall``. -Attempts to make only one system call, retrying only per PEP 475 (EINTR). This -means less data may be returned than requested. +Attempts to make only one system call, retrying only per PEP 475 +(EINTR). This means less data may be returned than requested. -In non-blocking mode, returns None if no data is available. Return an empty -bytes object at EOF. +In non-blocking mode, returns None if no data is available. Return +an empty bytes object at EOF. [clinic start generated code]*/ static PyObject * _io_FileIO_read_impl(fileio *self, PyTypeObject *cls, Py_ssize_t size) -/*[clinic end generated code: output=bbd749c7c224143e input=752d1ad3db8564a5]*/ +/*[clinic end generated code: output=bbd749c7c224143e input=c7baa3b440af9337]*/ { if (self->fd < 0) return err_closed(); @@ -916,13 +919,13 @@ _io.FileIO.write Write buffer b to file, return number of bytes written. Only makes one system call, so not all of the data may be written. -The number of bytes actually written is returned. In non-blocking mode, -returns None if the write would block. +The number of bytes actually written is returned. In non-blocking +mode, returns None if the write would block. [clinic start generated code]*/ static PyObject * _io_FileIO_write_impl(fileio *self, PyTypeObject *cls, Py_buffer *b) -/*[clinic end generated code: output=927e25be80f3b77b input=2776314f043088f5]*/ +/*[clinic end generated code: output=927e25be80f3b77b input=233f1f70f9e8b09e]*/ { Py_ssize_t n; int err; @@ -1016,7 +1019,6 @@ portable_lseek(fileio *self, PyObject *posobj, int whence, bool suppress_pipe_er } /*[clinic input] -@permit_long_docstring_body _io.FileIO.seek pos: object whence: int = 0 @@ -1024,18 +1026,19 @@ _io.FileIO.seek Move to new file position and return the file position. -Argument offset is a byte count. Optional argument whence defaults to -SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values -are SEEK_CUR or 1 (move relative to current position, positive or negative), -and SEEK_END or 2 (move relative to end of file, usually negative, although -many platforms allow seeking beyond the end of a file). +Argument offset is a byte count. Optional argument whence defaults +to SEEK_SET or 0 (offset from start of file, offset should be >= 0); +other values are SEEK_CUR or 1 (move relative to current position, +positive or negative), and SEEK_END or 2 (move relative to end of +file, usually negative, although many platforms allow seeking beyond +the end of a file). Note that not all file objects are seekable. [clinic start generated code]*/ static PyObject * _io_FileIO_seek_impl(fileio *self, PyObject *pos, int whence) -/*[clinic end generated code: output=c976acdf054e6655 input=f077c492a84c9e62]*/ +/*[clinic end generated code: output=c976acdf054e6655 input=f165a1b4f5d494ad]*/ { if (self->fd < 0) return err_closed(); @@ -1063,6 +1066,7 @@ _io_FileIO_tell_impl(fileio *self) #ifdef HAVE_FTRUNCATE /*[clinic input] +@permit_long_summary _io.FileIO.truncate cls: defining_class size as posobj: object = None @@ -1076,7 +1080,7 @@ The current file position is changed to the value of size. static PyObject * _io_FileIO_truncate_impl(fileio *self, PyTypeObject *cls, PyObject *posobj) -/*[clinic end generated code: output=d936732a49e8d5a2 input=c367fb45d6bb2c18]*/ +/*[clinic end generated code: output=d936732a49e8d5a2 input=8f22152bcf900ed2]*/ { Py_off_t pos; int ret; diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index f036ea503b1..1253f124108 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -93,7 +93,6 @@ iobase_unsupported(_PyIO_State *state, const char *message) /* Positioning */ /*[clinic input] -@permit_long_docstring_body _io._IOBase.seek cls: defining_class offset: int(unused=True) @@ -104,11 +103,13 @@ _io._IOBase.seek Change the stream position to the given byte offset. -The offset is interpreted relative to the position indicated by whence. -Values for whence are: +The offset is interpreted relative to the position indicated by +whence. Values for whence are: -* os.SEEK_SET or 0 -- start of stream (the default); offset should be zero or positive -* os.SEEK_CUR or 1 -- current stream position; offset may be negative +* os.SEEK_SET or 0 -- start of stream (the default); offset should + be zero or positive +* os.SEEK_CUR or 1 -- current stream position; offset may be + negative * os.SEEK_END or 2 -- end of stream; offset is usually negative Return the new absolute position. @@ -117,7 +118,7 @@ Return the new absolute position. static PyObject * _io__IOBase_seek_impl(PyObject *self, PyTypeObject *cls, int Py_UNUSED(offset), int Py_UNUSED(whence)) -/*[clinic end generated code: output=8bd74ea6538ded53 input=a21b5aad416ff6a9]*/ +/*[clinic end generated code: output=8bd74ea6538ded53 input=22eaf07a7a0ee289]*/ { _PyIO_State *state = get_io_state_by_cls(cls); return iobase_unsupported(state, "seek"); @@ -144,14 +145,14 @@ _io._IOBase.truncate Truncate file to size bytes. -File pointer is left unchanged. Size defaults to the current IO position -as reported by tell(). Return the new size. +File pointer is left unchanged. Size defaults to the current IO +position as reported by tell(). Return the new size. [clinic start generated code]*/ static PyObject * _io__IOBase_truncate_impl(PyObject *self, PyTypeObject *cls, PyObject *Py_UNUSED(size)) -/*[clinic end generated code: output=2013179bff1fe8ef input=660ac20936612c27]*/ +/*[clinic end generated code: output=2013179bff1fe8ef input=5b3b6ab3c7abd806]*/ { _PyIO_State *state = get_io_state_by_cls(cls); return iobase_unsupported(state, "truncate"); diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c index 5debae5b424..b8601383ad0 100644 --- a/Modules/_io/stringio.c +++ b/Modules/_io/stringio.c @@ -225,7 +225,9 @@ write_str(stringio *self, PyObject *obj) if (self->state == STATE_ACCUMULATING) { if (self->string_size == self->pos) { - if (PyUnicodeWriter_WriteStr(self->writer, decoded)) + // gh-149046: Avoid PyUnicodeWriter_WriteStr() which calls str(obj) + // on str subclasses + if (_PyUnicodeWriter_WriteStr((_PyUnicodeWriter*)self->writer, decoded)) goto fail; goto success; } @@ -497,7 +499,8 @@ _io.StringIO.seek Change stream position. -Seek to character offset pos relative to position indicated by whence: +Seek to character offset pos relative to position indicated by +whence: 0 Start of stream (the default). pos should be >= 0; 1 Current position - pos must be 0; 2 End of stream - pos must be 0. @@ -506,7 +509,7 @@ Returns the new absolute position. static PyObject * _io_StringIO_seek_impl(stringio *self, Py_ssize_t pos, int whence) -/*[clinic end generated code: output=e9e0ac9a8ae71c25 input=c75ced09343a00d7]*/ +/*[clinic end generated code: output=e9e0ac9a8ae71c25 input=ffef24668fd71a5d]*/ { CHECK_INITIALIZED(self); CHECK_CLOSED(self); diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 347bfe97661..e80b75066c5 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -53,19 +53,19 @@ _unsupported(_PyIO_State *state, const char *message) } /*[clinic input] -@permit_long_docstring_body _io._TextIOBase.detach cls: defining_class / Separate the underlying buffer from the TextIOBase and return it. -After the underlying buffer has been detached, the TextIO is in an unusable state. +After the underlying buffer has been detached, the TextIO is in +an unusable state. [clinic start generated code]*/ static PyObject * _io__TextIOBase_detach_impl(PyObject *self, PyTypeObject *cls) -/*[clinic end generated code: output=50915f40c609eaa4 input=8cd0652c17d7f015]*/ +/*[clinic end generated code: output=50915f40c609eaa4 input=8099c088abcb87d8]*/ { _PyIO_State *state = get_io_state_by_cls(cls); return _unsupported(state, "detach"); @@ -79,14 +79,14 @@ _io._TextIOBase.read Read at most size characters from stream. -Read from underlying buffer until we have size characters or we hit EOF. -If size is negative or omitted, read until EOF. +Read from underlying buffer until we have size characters or we hit +EOF. If size is negative or omitted, read until EOF. [clinic start generated code]*/ static PyObject * _io__TextIOBase_read_impl(PyObject *self, PyTypeObject *cls, int Py_UNUSED(size)) -/*[clinic end generated code: output=51a5178a309ce647 input=f5e37720f9fc563f]*/ +/*[clinic end generated code: output=51a5178a309ce647 input=c9fd4cc1cf1b4614]*/ { _PyIO_State *state = get_io_state_by_cls(cls); return _unsupported(state, "read"); @@ -2727,13 +2727,13 @@ _io.TextIOWrapper.tell Return the stream position as an opaque number. -The return value of tell() can be given as input to seek(), to restore a -previous stream position. +The return value of tell() can be given as input to seek(), to +restore a previous stream position. [clinic start generated code]*/ static PyObject * _io_TextIOWrapper_tell_impl(textio *self) -/*[clinic end generated code: output=4f168c08bf34ad5f input=415d6b4e4f8e6e8c]*/ +/*[clinic end generated code: output=4f168c08bf34ad5f input=aeece020f747fd92]*/ { PyObject *res; PyObject *posobj = NULL; diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c index 677d7e85d4e..4cd71094e8f 100644 --- a/Modules/_io/winconsoleio.c +++ b/Modules/_io/winconsoleio.c @@ -315,16 +315,16 @@ _io._WindowsConsoleIO.__init__ Open a console buffer by file descriptor. -The mode can be 'rb' (default), or 'wb' for reading or writing bytes. All -other mode characters will be ignored. Mode 'b' will be assumed if it is -omitted. The *opener* parameter is always ignored. +The mode can be 'rb' (default), or 'wb' for reading or writing +bytes. All other mode characters will be ignored. Mode 'b' will be +assumed if it is omitted. The *opener* parameter is always ignored. [clinic start generated code]*/ static int _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, const char *mode, int closefd, PyObject *opener) -/*[clinic end generated code: output=3fd9cbcdd8d95429 input=7a3eed6bbe998fd9]*/ +/*[clinic end generated code: output=3fd9cbcdd8d95429 input=f31100e2cd724617]*/ { const char *s; wchar_t *name = NULL; @@ -673,12 +673,13 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { maxlen += 1; Py_BLOCK_THREADS newbuf = (wchar_t*)PyMem_Realloc(buf, maxlen * sizeof(wchar_t)); - Py_UNBLOCK_THREADS if (!newbuf) { sig = -1; PyErr_NoMemory(); + Py_UNBLOCK_THREADS break; } + Py_UNBLOCK_THREADS buf = newbuf; /* Only advance by n and not BUFSIZ in this case */ off += n; diff --git a/Modules/_json.c b/Modules/_json.c index 1f454768355..6c4f3883463 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -657,14 +657,14 @@ JSON string. Unescapes all valid JSON string escape sequences and raises ValueError on attempt to decode an invalid string. If strict is False then literal control characters are allowed in the string. -Returns a tuple of the decoded string and the index of the character in s -after the end quote. +Returns a tuple of the decoded string and the index of the character in +s after the end quote. [clinic start generated code]*/ static PyObject * py_scanstring_impl(PyObject *module, PyObject *pystr, Py_ssize_t end, int strict) -/*[clinic end generated code: output=961740cfae07cdb3 input=cff59e47498f4d8e]*/ +/*[clinic end generated code: output=961740cfae07cdb3 input=6d5abb5947ccc297]*/ { Py_ssize_t next_end = -1; PyObject *rval = scanstring_unicode(pystr, end, strict, &next_end); diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index 00ee68dcea2..4335a8bb162 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -26,6 +26,19 @@ #error "The maximum block size accepted by liblzma is SIZE_MAX." #endif + +/* + * If the lzma.h we're building against is so old as not to define these, this + * provides their equivalent values so that the names remain defined in Python + * regardless of the header versions used at build time. + */ +#ifndef LZMA_FILTER_ARM64 +#define LZMA_FILTER_ARM64 LZMA_VLI_C(0x0A) +#endif +#ifndef LZMA_FILTER_RISCV +#define LZMA_FILTER_RISCV LZMA_VLI_C(0x0B) +#endif + /* On success, return value >= 0 On failure, return -1 */ static inline Py_ssize_t @@ -373,6 +386,8 @@ lzma_filter_converter(_lzma_state *state, PyObject *spec, void *ptr) case LZMA_FILTER_ARM: case LZMA_FILTER_ARMTHUMB: case LZMA_FILTER_SPARC: + case LZMA_FILTER_ARM64: + case LZMA_FILTER_RISCV: f->options = parse_filter_spec_bcj(state, spec); return f->options != NULL; default: @@ -491,7 +506,9 @@ build_filter_spec(const lzma_filter *f) case LZMA_FILTER_IA64: case LZMA_FILTER_ARM: case LZMA_FILTER_ARMTHUMB: - case LZMA_FILTER_SPARC: { + case LZMA_FILTER_SPARC: + case LZMA_FILTER_ARM64: + case LZMA_FILTER_RISCV: { lzma_options_bcj *options = f->options; if (options) { ADD_FIELD(options, start_offset); @@ -1106,7 +1123,6 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) } /*[clinic input] -@permit_long_docstring_body _lzma.LZMADecompressor.decompress data: Py_buffer @@ -1114,24 +1130,25 @@ _lzma.LZMADecompressor.decompress Decompress *data*, returning uncompressed data as bytes. -If *max_length* is nonnegative, returns at most *max_length* bytes of -decompressed data. If this limit is reached and further output can be -produced, *self.needs_input* will be set to ``False``. In this case, the next -call to *decompress()* may provide *data* as b'' to obtain more of the output. +If *max_length* is nonnegative, returns at most *max_length* bytes +of decompressed data. If this limit is reached and further output +can be produced, *self.needs_input* will be set to ``False``. In +this case, the next call to *decompress()* may provide *data* as b'' +to obtain more of the output. -If all of the input data was decompressed and returned (either because this -was less than *max_length* bytes, or because *max_length* was negative), -*self.needs_input* will be set to True. +If all of the input data was decompressed and returned (either +because this was less than *max_length* bytes, or because +*max_length* was negative), *self.needs_input* will be set to True. -Attempting to decompress data after the end of stream is reached raises an -EOFError. Any data found after the end of the stream is ignored and saved in -the unused_data attribute. +Attempting to decompress data after the end of stream is reached +raises an EOFError. Any data found after the end of the stream is +ignored and saved in the unused_data attribute. [clinic start generated code]*/ static PyObject * _lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=ef4e20ec7122241d input=d5cbd45801b4b8b0]*/ +/*[clinic end generated code: output=ef4e20ec7122241d input=0eb62669c4315dee]*/ { PyObject *result = NULL; @@ -1544,6 +1561,8 @@ lzma_exec(PyObject *module) ADD_INT_PREFIX_MACRO(module, FILTER_ARMTHUMB); ADD_INT_PREFIX_MACRO(module, FILTER_SPARC); ADD_INT_PREFIX_MACRO(module, FILTER_POWERPC); + ADD_INT_PREFIX_MACRO(module, FILTER_ARM64); + ADD_INT_PREFIX_MACRO(module, FILTER_RISCV); ADD_INT_PREFIX_MACRO(module, MF_HC3); ADD_INT_PREFIX_MACRO(module, MF_HC4); ADD_INT_PREFIX_MACRO(module, MF_BT2); diff --git a/Modules/_multiprocessing/clinic/posixshmem.c.h b/Modules/_multiprocessing/clinic/posixshmem.c.h index a545ff4d80f..a4d7273aea7 100644 --- a/Modules/_multiprocessing/clinic/posixshmem.c.h +++ b/Modules/_multiprocessing/clinic/posixshmem.c.h @@ -50,9 +50,9 @@ PyDoc_STRVAR(_posixshmem_shm_unlink__doc__, "\n" "Remove a shared memory object (similar to unlink()).\n" "\n" -"Remove a shared memory object name, and, once all processes have unmapped\n" -"the object, de-allocates and destroys the contents of the associated memory\n" -"region."); +"Remove a shared memory object name, and, once all processes have\n" +"unmapped the object, de-allocates and destroys the contents of the\n" +"associated memory region."); #define _POSIXSHMEM_SHM_UNLINK_METHODDEF \ {"shm_unlink", (PyCFunction)_posixshmem_shm_unlink, METH_O, _posixshmem_shm_unlink__doc__}, @@ -86,4 +86,4 @@ _posixshmem_shm_unlink(PyObject *module, PyObject *arg) #ifndef _POSIXSHMEM_SHM_UNLINK_METHODDEF #define _POSIXSHMEM_SHM_UNLINK_METHODDEF #endif /* !defined(_POSIXSHMEM_SHM_UNLINK_METHODDEF) */ -/*[clinic end generated code: output=74588a5abba6e36c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e69afacce7b0595e input=a9049054013a1b77]*/ diff --git a/Modules/_multiprocessing/posixshmem.c b/Modules/_multiprocessing/posixshmem.c index ab45e4136c7..22b4af21266 100644 --- a/Modules/_multiprocessing/posixshmem.c +++ b/Modules/_multiprocessing/posixshmem.c @@ -81,15 +81,15 @@ _posixshmem.shm_unlink Remove a shared memory object (similar to unlink()). -Remove a shared memory object name, and, once all processes have unmapped -the object, de-allocates and destroys the contents of the associated memory -region. +Remove a shared memory object name, and, once all processes have +unmapped the object, de-allocates and destroys the contents of the +associated memory region. [clinic start generated code]*/ static PyObject * _posixshmem_shm_unlink_impl(PyObject *module, PyObject *path) -/*[clinic end generated code: output=42f8b23d134b9ff5 input=298369d013dcad63]*/ +/*[clinic end generated code: output=42f8b23d134b9ff5 input=cf7a30ec6503cf78]*/ { int rv; int async_err = 0; diff --git a/Modules/_opcode.c b/Modules/_opcode.c index dedf17f76df..2a34559fd1f 100644 --- a/Modules/_opcode.c +++ b/Modules/_opcode.c @@ -119,7 +119,7 @@ _opcode_has_const_impl(PyObject *module, int opcode) } /*[clinic input] - +@permit_long_summary _opcode.has_name -> bool opcode: int @@ -129,7 +129,7 @@ Return True if the opcode accesses an attribute by name, False otherwise. static int _opcode_has_name_impl(PyObject *module, int opcode) -/*[clinic end generated code: output=b49a83555c2fa517 input=448aa5e4bcc947ba]*/ +/*[clinic end generated code: output=b49a83555c2fa517 input=8faf669024d97fad]*/ { return IS_VALID_OPCODE(opcode) && OPCODE_HAS_NAME(opcode); } diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 9874f9475ac..a5595be251a 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2055,22 +2055,34 @@ whichmodule(PickleState *st, PyObject *global, PyObject *global_name, PyObject * return NULL; } if (PyDict_CheckExact(modules)) { + PyObject *found_name = NULL; + int error = 0; i = 0; + Py_BEGIN_CRITICAL_SECTION(modules); while (PyDict_Next(modules, &i, &module_name, &module)) { Py_INCREF(module_name); Py_INCREF(module); if (_checkmodule(module_name, module, global, dotted_path) == 0) { Py_DECREF(module); - Py_DECREF(modules); - return module_name; + found_name = module_name; + break; } Py_DECREF(module); Py_DECREF(module_name); if (PyErr_Occurred()) { - Py_DECREF(modules); - return NULL; + error = 1; + break; } } + Py_END_CRITICAL_SECTION(); + if (error) { + Py_DECREF(modules); + return NULL; + } + if (found_name != NULL) { + Py_DECREF(modules); + return found_name; + } } else { PyObject *iterator = PyObject_GetIter(modules); @@ -3179,7 +3191,7 @@ static int batch_list_exact(PickleState *state, PicklerObject *self, PyObject *obj) { PyObject *item = NULL; - Py_ssize_t this_batch, total; + Py_ssize_t this_batch, total, list_size; const char append_op = APPEND; const char appends_op = APPENDS; @@ -3188,14 +3200,18 @@ batch_list_exact(PickleState *state, PicklerObject *self, PyObject *obj) assert(obj != NULL); assert(self->proto > 0); assert(PyList_CheckExact(obj)); - assert(PyList_GET_SIZE(obj)); + + list_size = PyList_GET_SIZE(obj); /* Write in batches of BATCHSIZE. */ total = 0; do { - if (PyList_GET_SIZE(obj) - total == 1) { - item = PyList_GET_ITEM(obj, total); - Py_INCREF(item); + if (list_size - total == 1) { + item = PyList_GetItemRef(obj, total); + if (item == NULL) { + _PyErr_FormatNote("when serializing %T item %zd", obj, total); + return -1; + } int err = save(state, self, item, 0); Py_DECREF(item); if (err < 0) { @@ -3210,8 +3226,11 @@ batch_list_exact(PickleState *state, PicklerObject *self, PyObject *obj) if (_Pickler_Write(self, &mark_op, 1) < 0) return -1; while (total < PyList_GET_SIZE(obj)) { - item = PyList_GET_ITEM(obj, total); - Py_INCREF(item); + item = PyList_GetItemRef(obj, total); + if (item == NULL) { + _PyErr_FormatNote("when serializing %T item %zd", obj, total); + return -1; + } int err = save(state, self, item, 0); Py_DECREF(item); if (err < 0) { @@ -3224,8 +3243,14 @@ batch_list_exact(PickleState *state, PicklerObject *self, PyObject *obj) } if (_Pickler_Write(self, &appends_op, 1) < 0) return -1; + if (PyList_GET_SIZE(obj) != list_size) { + PyErr_Format( + PyExc_RuntimeError, + "list changed size during iteration"); + return -1; + } - } while (total < PyList_GET_SIZE(obj)); + } while (total < list_size); return 0; } @@ -3452,7 +3477,7 @@ batch_dict(PickleState *state, PicklerObject *self, PyObject *iter, PyObject *or * Note that this currently doesn't work for protocol 0. */ static int -batch_dict_exact(PickleState *state, PicklerObject *self, PyObject *obj) +batch_dict_exact_impl(PickleState *state, PicklerObject *self, PyObject *obj) { PyObject *key = NULL, *value = NULL; int i; @@ -3525,6 +3550,18 @@ batch_dict_exact(PickleState *state, PicklerObject *self, PyObject *obj) return -1; } +/* gh-146452: Wrap the dict iteration in a critical section to prevent + concurrent mutation from invalidating PyDict_Next() iteration state. */ +static int +batch_dict_exact(PickleState *state, PicklerObject *self, PyObject *obj) +{ + int ret; + Py_BEGIN_CRITICAL_SECTION(obj); + ret = batch_dict_exact_impl(state, self, obj); + Py_END_CRITICAL_SECTION(); + return ret; +} + static int save_dict(PickleState *state, PicklerObject *self, PyObject *obj) { diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 9867f077fae..ddc27c4a5b7 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -962,7 +962,6 @@ do_fork_exec(char *const exec_array[], } /*[clinic input] -@permit_long_docstring_body _posixsubprocess.fork_exec as subprocess_fork_exec args as process_args: object executable_list: object @@ -990,15 +989,15 @@ _posixsubprocess.fork_exec as subprocess_fork_exec Spawn a fresh new child process. -Fork a child process, close parent file descriptors as appropriate in the -child and duplicate the few that are needed before calling exec() in the -child process. +Fork a child process, close parent file descriptors as appropriate in +the child and duplicate the few that are needed before calling exec() in +the child process. -If close_fds is True, close file descriptors 3 and higher, except those listed -in the sorted tuple pass_fds. +If close_fds is True, close file descriptors 3 and higher, except those +listed in the sorted tuple pass_fds. -The preexec_fn, if supplied, will be called immediately before closing file -descriptors and exec. +The preexec_fn, if supplied, will be called immediately before closing +file descriptors and exec. WARNING: preexec_fn is NOT SAFE if your application uses threads. It may trigger infrequent, difficult to debug deadlocks. @@ -1023,7 +1022,7 @@ subprocess_fork_exec_impl(PyObject *module, PyObject *process_args, PyObject *extra_groups_packed, PyObject *uid_object, int child_umask, PyObject *preexec_fn) -/*[clinic end generated code: output=288464dc56e373c7 input=58e0db771686f4f6]*/ +/*[clinic end generated code: output=288464dc56e373c7 input=5e56eac3e036e349]*/ { PyObject *converted_args = NULL, *fast_args = NULL; PyObject *preexec_fn_args_tuple = NULL; diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c index ed925f3525a..af54e42a6af 100644 --- a/Modules/_queuemodule.c +++ b/Modules/_queuemodule.c @@ -154,8 +154,6 @@ RingBuf_Get(RingBuf *buf) } // Returns 0 on success or -1 if the buffer failed to grow. -// -// Steals a reference to item. static int RingBuf_Put(RingBuf *buf, PyObject *item) { @@ -165,11 +163,10 @@ RingBuf_Put(RingBuf *buf, PyObject *item) // Buffer is full, grow it. if (resize_ringbuf(buf, buf->items_cap * 2) < 0) { PyErr_NoMemory(); - Py_DECREF(item); return -1; } } - buf->items[buf->put_idx] = item; + buf->items[buf->put_idx] = Py_NewRef(item); buf->put_idx = (buf->put_idx + 1) % buf->items_cap; buf->num_items++; return 0; @@ -276,16 +273,13 @@ maybe_handoff_item(void *arg, void *park_arg, int has_more_waiters) { HandoffData *data = (HandoffData*)arg; PyObject **item = (PyObject**)park_arg; - if (item == NULL) { - // No threads were waiting - data->handed_off = false; - } - else { + data->queue->has_threads_waiting = has_more_waiters; + + data->handed_off = item != NULL; + if (data->handed_off) { // There was at least one waiting thread, hand off the item - *item = data->item; - data->handed_off = true; + *item = Py_NewRef(data->item); } - data->queue->has_threads_waiting = has_more_waiters; } /*[clinic input] @@ -297,31 +291,33 @@ _queue.SimpleQueue.put Put the item on the queue. -The optional 'block' and 'timeout' arguments are ignored, as this method -never blocks. They are provided for compatibility with the Queue class. +The optional 'block' and 'timeout' arguments are ignored, as this +method never blocks. They are provided for compatibility with the +Queue class. [clinic start generated code]*/ static PyObject * _queue_SimpleQueue_put_impl(simplequeueobject *self, PyObject *item, int block, PyObject *timeout) -/*[clinic end generated code: output=4333136e88f90d8b input=a16dbb33363c0fa8]*/ +/*[clinic end generated code: output=4333136e88f90d8b input=9f9ff270a74670c3]*/ { - HandoffData data = { - .handed_off = 0, - .item = Py_NewRef(item), - .queue = self, - }; if (self->has_threads_waiting) { + HandoffData data = { + .handed_off = 0, + .item = item, + .queue = self, + }; // Try to hand the item off directly if there are threads waiting _PyParkingLot_Unpark(&self->has_threads_waiting, maybe_handoff_item, &data); - } - if (!data.handed_off) { - if (RingBuf_Put(&self->buf, item) < 0) { - return NULL; + if (data.handed_off) { + Py_RETURN_NONE; } } + if (RingBuf_Put(&self->buf, item) < 0) { + return NULL; + } Py_RETURN_NONE; } @@ -365,10 +361,11 @@ _queue.SimpleQueue.get Remove and return an item from the queue. -If optional args 'block' is true and 'timeout' is None (the default), -block if necessary until an item is available. If 'timeout' is -a non-negative number, it blocks at most 'timeout' seconds and raises -the Empty exception if no item was available within that time. +If optional args 'block' is true and 'timeout' is None (the +default), block if necessary until an item is available. If +'timeout' is a non-negative number, it blocks at most 'timeout' +seconds and raises the Empty exception if no item was available +within that time. Otherwise ('block' is false), return an item if one is immediately available, else raise the Empty exception ('timeout' is ignored in that case). @@ -378,7 +375,7 @@ in that case). static PyObject * _queue_SimpleQueue_get_impl(simplequeueobject *self, PyTypeObject *cls, int block, PyObject *timeout_obj) -/*[clinic end generated code: output=5c2cca914cd1e55b input=f7836c65e5839c51]*/ +/*[clinic end generated code: output=5c2cca914cd1e55b input=afa0889bbc6b4761]*/ { PyTime_t endtime = 0; @@ -553,7 +550,7 @@ static PyMethodDef simplequeue_methods[] = { _QUEUE_SIMPLEQUEUE_QSIZE_METHODDEF _QUEUE_SIMPLEQUEUE___SIZEOF___METHODDEF {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, PyDoc_STR("SimpleQueues are generic over the type of their contents")}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 0fb73481651..a06966be23b 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -123,9 +123,9 @@ typedef struct { /*[clinic input] module _random -class _random.Random "RandomObject *" "_randomstate_type(type)->Random_Type" +class _random.Random "RandomObject *" "(PyTypeObject *)_randomstate_type(Py_TYPE(self))->Random_Type" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=70a2c99619474983]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=f04bcbfba61a322e]*/ /* Random methods */ @@ -549,27 +549,20 @@ _random_Random_getrandbits_impl(RandomObject *self, uint64_t k) return result; } -static int -random_init(PyObject *self, PyObject *args, PyObject *kwds) -{ - PyObject *arg = NULL; - _randomstate *state = _randomstate_type(Py_TYPE(self)); - - if ((Py_IS_TYPE(self, (PyTypeObject *)state->Random_Type) || - Py_TYPE(self)->tp_init == ((PyTypeObject*)state->Random_Type)->tp_init) && - !_PyArg_NoKeywords("Random", kwds)) { - return -1; - } - - if (PyTuple_GET_SIZE(args) > 1) { - PyErr_SetString(PyExc_TypeError, "Random() requires 0 or 1 argument"); - return -1; - } +/*[clinic input] +@critical_section +@text_signature "($self, [seed])" +_random.Random.__init__ as random_init - if (PyTuple_GET_SIZE(args) == 1) - arg = PyTuple_GET_ITEM(args, 0); + seed: object = NULL + / +[clinic start generated code]*/ - return random_seed(RandomObject_CAST(self), arg); +static int +random_init_impl(RandomObject *self, PyObject *seed) +/*[clinic end generated code: output=260734a3739c394f input=e516bf32e8a05e28]*/ +{ + return random_seed(self, seed); } diff --git a/Modules/_remote_debugging/_remote_debugging.h b/Modules/_remote_debugging/_remote_debugging.h index 7369cd1514c..635e6e20890 100644 --- a/Modules/_remote_debugging/_remote_debugging.h +++ b/Modules/_remote_debugging/_remote_debugging.h @@ -30,6 +30,7 @@ extern "C" { #include "internal/pycore_llist.h" // struct llist_node #include "internal/pycore_long.h" // _PyLong_GetZero #include "internal/pycore_pyerrors.h" // _PyErr_FormatFromCause +#include "internal/pycore_pyhash.h" // _Py_HashPointerRaw #include "internal/pycore_stackref.h" // Py_TAG_BITS #include "../../Python/remote_debug.h" @@ -179,7 +180,7 @@ typedef enum _WIN32_THREADSTATE { #define set_exception_cause(unwinder, exc_type, message) \ do { \ assert(PyErr_Occurred() && "function returned -1 without setting exception"); \ - if (unwinder->debug) { \ + if (unwinder->debug && !_Py_RemoteDebug_HasPermissionError()) { \ _set_debug_exception_cause(exc_type, message); \ } \ } while (0) @@ -215,6 +216,8 @@ typedef struct { PyObject *file_name; int first_lineno; PyObject *linetable; // bytes + PyObject *last_frame_info; + ptrdiff_t last_addrq; uintptr_t addr_code_adaptive; } CachedCodeMetadata; @@ -224,11 +227,41 @@ typedef struct { typedef struct { uint64_t thread_id; // 0 = empty slot + uintptr_t thread_state_addr; uintptr_t addrs[FRAME_CACHE_MAX_FRAMES]; Py_ssize_t num_addrs; + PyObject *thread_id_obj; // owned reference, NULL if empty PyObject *frame_list; // owned reference, NULL if empty } FrameCacheEntry; +#define INTERPRETER_THREAD_CACHE_SIZE 32 +#if (INTERPRETER_THREAD_CACHE_SIZE & (INTERPRETER_THREAD_CACHE_SIZE - 1)) != 0 +# error "INTERPRETER_THREAD_CACHE_SIZE must be a power of two" +#endif + +// The two per-interpreter L2 caches below are split into per-field tables so +// that a writer rebinding one slot cannot leave stale data in a field owned by +// the other when the slot is reused across interpreters. +typedef struct { + uintptr_t interpreter_addr; + uintptr_t thread_state_addr; +} InterpreterTstateCacheEntry; +typedef struct { + uintptr_t interpreter_addr; + uint64_t code_object_generation; +} InterpreterGenerationCacheEntry; + +// Carries already-read thread state and/or frame buffers across helpers so the +// downstream callee can skip a remote read. Address fields are caller-supplied +// inputs; buffer pointers (tstate, frame) are NULL unless a prior batched read +// successfully populated them. +typedef struct { + const char *tstate; + uintptr_t tstate_addr; + const char *frame; + uintptr_t frame_addr; +} RemoteReadPrefetch; + /* Statistics for profiling performance analysis */ typedef struct { uint64_t total_samples; // Total number of get_stack_trace calls @@ -242,14 +275,44 @@ typedef struct { uint64_t code_object_cache_hits; // Code object cache hits uint64_t code_object_cache_misses; // Code object cache misses uint64_t stale_cache_invalidations; // Times stale entries were cleared + uint64_t batched_read_attempts; // Batched remote-read attempts + uint64_t batched_read_successes; // Attempts that read all requested segments + uint64_t batched_read_misses; // Attempts that fell back or partially read + uint64_t batched_read_segments_requested; // Segments requested by batched reads + uint64_t batched_read_segments_completed; // Segments completed by batched reads } UnwinderStats; +#if defined(__GNUC__) || defined(__clang__) +# define REMOTE_DEBUG_UNLIKELY(value) __builtin_expect(!!(value), 0) +#else +# define REMOTE_DEBUG_UNLIKELY(value) (value) +#endif + /* Stats tracking macros - no-op when stats collection is disabled */ #define STATS_INC(unwinder, field) \ - do { if ((unwinder)->collect_stats) (unwinder)->stats.field++; } while(0) + do { if (REMOTE_DEBUG_UNLIKELY((unwinder)->collect_stats)) (unwinder)->stats.field++; } while(0) #define STATS_ADD(unwinder, field, val) \ - do { if ((unwinder)->collect_stats) (unwinder)->stats.field += (val); } while(0) + do { if (REMOTE_DEBUG_UNLIKELY((unwinder)->collect_stats)) (unwinder)->stats.field += (val); } while(0) + +#if HAVE_PROCESS_VM_READV +# define STATS_BATCHED_READ(unwinder, requested, completed) \ + do { \ + if (REMOTE_DEBUG_UNLIKELY((unwinder)->collect_stats)) { \ + (unwinder)->stats.batched_read_attempts++; \ + (unwinder)->stats.batched_read_segments_requested += (uint64_t)(requested); \ + (unwinder)->stats.batched_read_segments_completed += (uint64_t)(completed); \ + if ((completed) == (requested)) { \ + (unwinder)->stats.batched_read_successes++; \ + } \ + else { \ + (unwinder)->stats.batched_read_misses++; \ + } \ + } \ + } while(0) +#else +# define STATS_BATCHED_READ(unwinder, requested, completed) ((void)0) +#endif typedef struct { PyTypeObject *RemoteDebugging_Type; @@ -290,7 +353,6 @@ typedef struct { struct _Py_AsyncioModuleDebugOffsets async_debug_offsets; uintptr_t interpreter_addr; uintptr_t tstate_addr; - uint64_t code_object_generation; _Py_hashtable_t *code_object_cache; int debug; int only_active_thread; @@ -302,9 +364,17 @@ typedef struct { int cache_frames; int collect_stats; // whether to collect statistics uint32_t stale_invalidation_counter; // counter for throttling frame_cache_invalidate_stale + // L1 single-entry shortcut over cached_tstates[]: most workloads sample one + // interpreter, so check these pairs before hashing into the table below. + uintptr_t cached_tstate_interpreter_addr; + uintptr_t cached_tstate_addr; + uintptr_t cached_generation_interpreter_addr; + uint64_t cached_code_object_generation; RemoteDebuggingState *cached_state; FrameCacheEntry *frame_cache; // preallocated array of FRAME_CACHE_MAX_THREADS entries UnwinderStats stats; // statistics for performance analysis + InterpreterTstateCacheEntry cached_tstates[INTERPRETER_THREAD_CACHE_SIZE]; + InterpreterGenerationCacheEntry cached_generations[INTERPRETER_THREAD_CACHE_SIZE]; #ifdef Py_GIL_DISABLED uint32_t tlbc_generation; _Py_hashtable_t *tlbc_cache; @@ -361,11 +431,13 @@ typedef struct { typedef struct { /* Inputs */ uintptr_t frame_addr; // Starting frame address + uintptr_t thread_state_addr; // Owning thread state address uintptr_t base_frame_addr; // Sentinel at bottom (for validation) uintptr_t gc_frame; // GC frame address (0 if not tracking) uintptr_t last_profiled_frame; // Last cached frame (0 if no cache) StackChunkList *chunks; // Pre-copied stack chunks int skip_first_frame; // Skip frame_addr itself (continue from its caller) + RemoteReadPrefetch prefetch; // Optional already-read thread/frame buffers /* Outputs */ PyObject *frame_info; // List to append FrameInfo objects @@ -548,6 +620,7 @@ extern int process_frame_chain( extern int frame_cache_init(RemoteUnwinderObject *unwinder); extern void frame_cache_cleanup(RemoteUnwinderObject *unwinder); extern FrameCacheEntry *frame_cache_find(RemoteUnwinderObject *unwinder, uint64_t thread_id); +extern FrameCacheEntry *frame_cache_find_by_tstate(RemoteUnwinderObject *unwinder, uintptr_t tstate_addr); extern int clear_last_profiled_frames(RemoteUnwinderObject *unwinder); extern void frame_cache_invalidate_stale(RemoteUnwinderObject *unwinder, PyObject *result); extern int frame_cache_lookup_and_extend( @@ -566,6 +639,7 @@ extern int frame_cache_store( PyObject *frame_list, const uintptr_t *addrs, Py_ssize_t num_addrs, + uintptr_t thread_state_addr, uintptr_t base_frame_addr, uintptr_t last_frame_visited); @@ -605,7 +679,8 @@ extern PyObject* unwind_stack_for_thread( uintptr_t *current_tstate, uintptr_t gil_holder_tstate, uintptr_t gc_frame, - uintptr_t main_thread_tstate + uintptr_t main_thread_tstate, + const RemoteReadPrefetch *prefetch ); /* Thread stopping functions (for blocking mode) */ diff --git a/Modules/_remote_debugging/asyncio.c b/Modules/_remote_debugging/asyncio.c index fc7487d4044..44a9a3cbce0 100644 --- a/Modules/_remote_debugging/asyncio.c +++ b/Modules/_remote_debugging/asyncio.c @@ -22,35 +22,38 @@ _Py_RemoteDebug_GetAsyncioDebugAddress(proc_handle_t* handle) address = search_windows_map_for_section(handle, "AsyncioD", L"_asyncio", NULL); if (address == 0) { - // Error out: 'python' substring covers both executable and DLL - PyObject *exc = PyErr_GetRaisedException(); - PyErr_SetString(PyExc_RuntimeError, "Failed to find the AsyncioDebug section in the process."); - _PyErr_ChainExceptions1(exc); + if (!_Py_RemoteDebug_HasPermissionError()) { + PyObject *exc = PyErr_GetRaisedException(); + PyErr_SetString(PyExc_RuntimeError, "Failed to find the AsyncioDebug section in the process."); + _PyErr_ChainExceptions1(exc); + } } #elif defined(__linux__) && HAVE_PROCESS_VM_READV // On Linux, search for asyncio debug in executable or DLL address = search_linux_map_for_section(handle, "AsyncioDebug", "python", NULL); if (address == 0) { - // Error out: 'python' substring covers both executable and DLL - PyObject *exc = PyErr_GetRaisedException(); - PyErr_SetString(PyExc_RuntimeError, "Failed to find the AsyncioDebug section in the process."); - _PyErr_ChainExceptions1(exc); + if (!_Py_RemoteDebug_HasPermissionError()) { + PyObject *exc = PyErr_GetRaisedException(); + PyErr_SetString(PyExc_RuntimeError, "Failed to find the AsyncioDebug section in the process."); + _PyErr_ChainExceptions1(exc); + } } #elif defined(__APPLE__) && TARGET_OS_OSX // On macOS, try libpython first, then fall back to python address = search_map_for_section(handle, "AsyncioDebug", "libpython", NULL); - if (address == 0) { + if (address == 0 && !_Py_RemoteDebug_HasPermissionError()) { PyErr_Clear(); address = search_map_for_section(handle, "AsyncioDebug", "python", NULL); } if (address == 0) { - // Error out: 'python' substring covers both executable and DLL - PyObject *exc = PyErr_GetRaisedException(); - PyErr_SetString(PyExc_RuntimeError, "Failed to find the AsyncioDebug section in the process."); - _PyErr_ChainExceptions1(exc); + if (!_Py_RemoteDebug_HasPermissionError()) { + PyObject *exc = PyErr_GetRaisedException(); + PyErr_SetString(PyExc_RuntimeError, "Failed to find the AsyncioDebug section in the process."); + _PyErr_ChainExceptions1(exc); + } } #else Py_UNREACHABLE(); @@ -96,10 +99,12 @@ ensure_async_debug_offsets(RemoteUnwinderObject *unwinder) return -1; } if (result < 0) { - PyErr_Clear(); - PyErr_SetString(PyExc_RuntimeError, "AsyncioDebug section not available"); - set_exception_cause(unwinder, PyExc_RuntimeError, - "AsyncioDebug section unavailable - asyncio module may not be loaded in target process"); + if (!_Py_RemoteDebug_HasPermissionError()) { + PyErr_Clear(); + PyErr_SetString(PyExc_RuntimeError, "AsyncioDebug section not available"); + set_exception_cause(unwinder, PyExc_RuntimeError, + "AsyncioDebug section unavailable - asyncio module may not be loaded in target process"); + } return -1; } @@ -218,7 +223,7 @@ parse_task_name( if ((GET_MEMBER(unsigned long, type_obj, unwinder->debug_offsets.type_object.tp_flags) & Py_TPFLAGS_LONG_SUBCLASS)) { long res = read_py_long(unwinder, task_name_addr); - if (res == -1) { + if (res == -1 && PyErr_Occurred()) { set_exception_cause(unwinder, PyExc_RuntimeError, "Task name PyLong parsing failed"); return NULL; } diff --git a/Modules/_remote_debugging/binary_io_reader.c b/Modules/_remote_debugging/binary_io_reader.c index 972b197cfba..ce1c3d232c9 100644 --- a/Modules/_remote_debugging/binary_io_reader.c +++ b/Modules/_remote_debugging/binary_io_reader.c @@ -380,7 +380,22 @@ binary_reader_open(PyObject *path) Py_fclose(fp); goto error; } + if (st.st_size < 0) { + PyErr_SetString(PyExc_IOError, "Invalid negative file size"); + Py_fclose(fp); + goto error; + } + if ((uintmax_t)st.st_size > SIZE_MAX) { + PyErr_SetString(PyExc_OverflowError, "File is too large to map"); + Py_fclose(fp); + goto error; + } reader->mapped_size = st.st_size; + if (reader->mapped_size == 0) { + PyErr_SetString(PyExc_ValueError, "File too small for header"); + Py_fclose(fp); + goto error; + } /* Map the file into memory. * MAP_POPULATE (Linux-only) pre-faults all pages at mmap time, which: @@ -424,7 +439,10 @@ binary_reader_open(PyObject *path) } #endif - (void)Py_fclose(fp); + if (Py_fclose(fp) != 0) { + PyErr_SetFromErrno(PyExc_IOError); + goto error; + } uint8_t *data = reader->mapped_data; size_t file_size = reader->mapped_size; @@ -444,7 +462,15 @@ binary_reader_open(PyObject *path) PyErr_SetFromErrno(PyExc_IOError); goto error; } + if ((uint64_t)file_size_off > SIZE_MAX) { + PyErr_SetString(PyExc_OverflowError, "File is too large to read"); + goto error; + } reader->file_size = (size_t)file_size_off; + if (reader->file_size == 0) { + PyErr_SetString(PyExc_ValueError, "File too small for header"); + goto error; + } if (FSEEK64(reader->fp, 0, SEEK_SET) != 0) { PyErr_SetFromErrno(PyExc_IOError); goto error; @@ -456,8 +482,18 @@ binary_reader_open(PyObject *path) goto error; } - if (fread(reader->file_data, 1, reader->file_size, reader->fp) != reader->file_size) { - PyErr_SetFromErrno(PyExc_IOError); + size_t nread = fread(reader->file_data, 1, reader->file_size, reader->fp); + if (nread != reader->file_size) { + int err = errno; + if (ferror(reader->fp) && err != 0) { + errno = err; + PyErr_SetFromErrno(PyExc_IOError); + } + else { + PyErr_Format(PyExc_ValueError, + "Unexpected end of file: read %zu of %zu bytes", + nread, reader->file_size); + } goto error; } @@ -944,10 +980,16 @@ invoke_progress_callback(PyObject *callback, Py_ssize_t current, uint32_t total) Py_ssize_t binary_reader_replay(BinaryReader *reader, PyObject *collector, PyObject *progress_callback) { - if (!PyObject_HasAttrString(collector, "collect")) { + PyObject *collect_method; + int has_collect = PyObject_GetOptionalAttrString(collector, "collect", &collect_method); + if (has_collect < 0) { + return -1; + } + if (has_collect == 0) { PyErr_SetString(PyExc_TypeError, "Collector must have a collect() method"); return -1; } + Py_DECREF(collect_method); /* Get module state for struct sequence types */ PyObject *module = PyImport_ImportModule("_remote_debugging"); @@ -973,7 +1015,10 @@ binary_reader_replay(BinaryReader *reader, PyObject *collector, PyObject *progre while (offset < reader->sample_data_size) { /* Read thread_id (8 bytes) + interpreter_id (4 bytes) + encoding byte */ if (reader->sample_data_size - offset < SAMPLE_HEADER_FIXED_SIZE) { - break; /* End of data */ + PyErr_Format(PyExc_ValueError, + "Truncated sample data: %zu trailing bytes", + reader->sample_data_size - offset); + return -1; } /* Use memcpy to avoid strict aliasing violations, then byte-swap if needed */ @@ -1019,6 +1064,11 @@ binary_reader_replay(BinaryReader *reader, PyObject *collector, PyObject *progre count, max_possible_samples); return -1; } + if ((uint64_t)count > (uint64_t)PY_SSIZE_T_MAX - (uint64_t)replayed) { + PyErr_SetString(PyExc_OverflowError, + "Sample count exceeds Py_ssize_t maximum"); + return -1; + } reader->stats.repeat_records++; reader->stats.repeat_samples += count; @@ -1149,6 +1199,11 @@ binary_reader_replay(BinaryReader *reader, PyObject *collector, PyObject *progre return -1; } Py_DECREF(timestamps_list); + if (replayed == PY_SSIZE_T_MAX) { + PyErr_SetString(PyExc_OverflowError, + "Sample count exceeds Py_ssize_t maximum"); + return -1; + } replayed++; reader->stats.total_samples++; break; @@ -1167,6 +1222,13 @@ binary_reader_replay(BinaryReader *reader, PyObject *collector, PyObject *progre } } + if ((uint64_t)replayed != reader->sample_count) { + PyErr_Format(PyExc_ValueError, + "Sample count mismatch: header declares %u samples but replay decoded %zd", + reader->sample_count, replayed); + return -1; + } + /* Final progress callback at 100% */ if (invoke_progress_callback(progress_callback, replayed, reader->sample_count) < 0) { return -1; diff --git a/Modules/_remote_debugging/binary_io_writer.c b/Modules/_remote_debugging/binary_io_writer.c index c31ed7d7464..341f9f7dc8a 100644 --- a/Modules/_remote_debugging/binary_io_writer.c +++ b/Modules/_remote_debugging/binary_io_writer.c @@ -108,7 +108,15 @@ fwrite_checked_allow_threads(const void *data, size_t size, FILE *fp) written = fwrite(data, 1, size, fp); Py_END_ALLOW_THREADS if (written != size) { - PyErr_SetFromErrno(PyExc_IOError); + int err = errno; + if (ferror(fp) && err != 0) { + errno = err; + PyErr_SetFromErrno(PyExc_IOError); + } + else { + PyErr_Format(PyExc_IOError, + "short write: wrote %zu of %zu bytes", written, size); + } return -1; } return 0; @@ -366,6 +374,11 @@ writer_intern_string(BinaryWriter *writer, PyObject *string, uint32_t *index) return 0; } + if (writer->string_count >= UINT32_MAX) { + PyErr_SetString(PyExc_OverflowError, + "too many strings for binary format"); + return -1; + } if (writer->string_count >= writer->string_capacity) { if (grow_parallel_arrays((void **)&writer->strings, (void **)&writer->string_lengths, @@ -380,6 +393,12 @@ writer_intern_string(BinaryWriter *writer, PyObject *string, uint32_t *index) if (!str_data) { return -1; } + if ((uintmax_t)str_len > UINT32_MAX) { + PyErr_Format(PyExc_OverflowError, + "string length %zd exceeds binary format maximum %u", + str_len, UINT32_MAX); + return -1; + } char *str_copy = PyMem_Malloc(str_len + 1); if (!str_copy) { @@ -422,6 +441,11 @@ writer_intern_frame(BinaryWriter *writer, const FrameEntry *entry, uint32_t *ind return 0; } + if (writer->frame_count >= UINT32_MAX) { + PyErr_SetString(PyExc_OverflowError, + "too many frames for binary format"); + return -1; + } if (GROW_ARRAY(writer->frame_entries, writer->frame_count, writer->frame_capacity, FrameEntry) < 0) { return -1; @@ -466,6 +490,11 @@ writer_get_or_create_thread_entry(BinaryWriter *writer, uint64_t thread_id, } } + if (writer->thread_count >= UINT32_MAX) { + PyErr_SetString(PyExc_OverflowError, + "too many threads for binary format"); + return NULL; + } if (writer->thread_count >= writer->thread_capacity) { ThreadEntry *new_entries = grow_array(writer->thread_entries, &writer->thread_capacity, @@ -600,6 +629,11 @@ flush_pending_rle(BinaryWriter *writer, ThreadEntry *entry) if (!entry->has_pending_rle || entry->pending_rle_count == 0) { return 0; } + if (entry->pending_rle_count > UINT32_MAX - writer->total_samples) { + PyErr_SetString(PyExc_OverflowError, + "too many samples for binary format"); + return -1; + } /* Write RLE record: * [thread_id: 8] [interpreter_id: 4] [STACK_REPEAT: 1] [count: varint] @@ -644,6 +678,12 @@ write_sample_with_encoding(BinaryWriter *writer, ThreadEntry *entry, const uint32_t *frame_indices, size_t stack_depth, size_t shared_count, size_t pop_count, size_t push_count) { + if (writer->total_samples == UINT32_MAX) { + PyErr_SetString(PyExc_OverflowError, + "too many samples for binary format"); + return -1; + } + /* Header: thread_id(8) + interpreter_id(4) + encoding(1) + delta(varint) + status(1) */ uint8_t header_buf[SAMPLE_HEADER_MAX_SIZE]; memcpy(header_buf + SMP_OFF_THREAD_ID, &entry->thread_id, SMP_SIZE_THREAD_ID); diff --git a/Modules/_remote_debugging/clinic/module.c.h b/Modules/_remote_debugging/clinic/module.c.h index d56622fb82a..d01f3d13e85 100644 --- a/Modules/_remote_debugging/clinic/module.c.h +++ b/Modules/_remote_debugging/clinic/module.c.h @@ -21,33 +21,37 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder___init____doc__, "\n" "Args:\n" " pid: Process ID of the target Python process to debug\n" -" all_threads: If True, initialize state for all threads in the process.\n" -" If False, only initialize for the main thread.\n" +" all_threads: If True, initialize state for all threads in the\n" +" process. If False, only initialize for the main thread.\n" " only_active_thread: If True, only sample the thread holding the GIL.\n" -" mode: Profiling mode: 0=WALL (wall-time), 1=CPU (cpu-time), 2=GIL (gil-time).\n" -" Cannot be used together with all_threads=True.\n" -" debug: If True, chain exceptions to explain the sequence of events that\n" -" lead to the exception.\n" -" skip_non_matching_threads: If True, skip threads that don\'t match the selected mode.\n" -" If False, include all threads regardless of mode.\n" -" native: If True, include artificial \"<native>\" frames to denote calls to\n" -" non-Python code.\n" -" gc: If True, include artificial \"<GC>\" frames to denote active garbage\n" -" collection.\n" -" opcodes: If True, gather bytecode opcode information for instruction-level\n" -" profiling.\n" -" cache_frames: If True, enable frame caching optimization to avoid re-reading\n" -" unchanged parent frames between samples.\n" -" stats: If True, collect statistics about cache hits, memory reads, etc.\n" -" Use get_stats() to retrieve the collected statistics.\n" -"\n" -"The RemoteUnwinder provides functionality to inspect and debug a running Python\n" -"process, including examining thread states, stack frames and other runtime data.\n" +" mode: Profiling mode: 0=WALL (wall-time), 1=CPU (cpu-time), 2=GIL\n" +" (gil-time). Cannot be used together with all_threads=True.\n" +" debug: If True, chain exceptions to explain the sequence of events\n" +" that lead to the exception.\n" +" skip_non_matching_threads: If True, skip threads that don\'t match\n" +" the selected mode. If False, include all threads regardless of\n" +" mode.\n" +" native: If True, include artificial \"<native>\" frames to denote\n" +" calls to non-Python code.\n" +" gc: If True, include artificial \"<GC>\" frames to denote active\n" +" garbage collection.\n" +" opcodes: If True, gather bytecode opcode information for\n" +" instruction-level profiling.\n" +" cache_frames: If True, enable frame caching optimization to avoid\n" +" re-reading unchanged parent frames between samples.\n" +" stats: If True, collect statistics about cache hits, memory reads,\n" +" etc. Use get_stats() to retrieve the collected statistics.\n" +"\n" +"The RemoteUnwinder provides functionality to inspect and debug a running\n" +"Python process, including examining thread states, stack frames and\n" +"other runtime data.\n" "\n" "Raises:\n" " PermissionError: If access to the target process is denied\n" -" OSError: If unable to attach to the target process or access its memory\n" -" RuntimeError: If unable to read debug information from the target process\n" +" OSError: If unable to attach to the target process or access its\n" +" memory\n" +" RuntimeError: If unable to read debug information from the target\n" +" process\n" " ValueError: If both all_threads and only_active_thread are True"); static int @@ -217,16 +221,21 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_get_stack_trace__doc__, "\n" "Returns stack traces for all interpreters and threads in process.\n" "\n" -"Each element in the returned list is a tuple of (interpreter_id, thread_list), where:\n" +"Each element in the returned list is a tuple of (interpreter_id,\n" +"thread_list), where:\n" "- interpreter_id is the interpreter identifier\n" -"- thread_list is a list of tuples (thread_id, frame_list) for threads in that interpreter\n" +"- thread_list is a list of tuples (thread_id, frame_list) for\n" +" threads in that interpreter\n" " - thread_id is the OS thread identifier\n" -" - frame_list is a list of tuples (function_name, filename, line_number) representing\n" -" the Python stack frames for that thread, ordered from most recent to oldest\n" +" - frame_list is a list of tuples (function_name, filename,\n" +" line_number) representing the Python stack frames for that\n" +" thread, ordered from most recent to oldest\n" "\n" "The threads returned depend on the initialization parameters:\n" -"- If only_active_thread was True: returns only the thread holding the GIL across all interpreters\n" -"- If all_threads was True: returns all threads across all interpreters\n" +"- If only_active_thread was True: returns only the thread holding\n" +" the GIL across all interpreters\n" +"- If all_threads was True: returns all threads across all\n" +" interpreters\n" "- Otherwise: returns only the main thread of each interpreter\n" "\n" "Example:\n" @@ -250,10 +259,12 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_get_stack_trace__doc__, " ]\n" "\n" "Raises:\n" -" RuntimeError: If there is an error copying memory from the target process\n" +" RuntimeError: If there is an error copying memory from the\n" +" target process\n" " OSError: If there is an error accessing the target process\n" " PermissionError: If access to the target process is denied\n" -" UnicodeDecodeError: If there is an error decoding strings from the target process"); +" UnicodeDecodeError: If there is an error decoding strings from\n" +" the target process"); #define _REMOTE_DEBUGGING_REMOTEUNWINDER_GET_STACK_TRACE_METHODDEF \ {"get_stack_trace", (PyCFunction)_remote_debugging_RemoteUnwinder_get_stack_trace, METH_NOARGS, _remote_debugging_RemoteUnwinder_get_stack_trace__doc__}, @@ -279,20 +290,25 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_get_all_awaited_by__doc__, "\n" "Get all tasks and their awaited_by relationships from the remote process.\n" "\n" -"This provides a tree structure showing which tasks are waiting for other tasks.\n" +"This provides a tree structure showing which tasks are waiting for\n" +"other tasks.\n" "\n" "For each task, returns:\n" -"1. The call stack frames leading to where the task is currently executing\n" +"1. The call stack frames leading to where the task is currently\n" +" executing\n" "2. The name of the task\n" -"3. A list of tasks that this task is waiting for, with their own frames/names/etc\n" +"3. A list of tasks that this task is waiting for, with their own\n" +" frames/names/etc\n" "\n" "Returns a list of [frames, task_name, subtasks] where:\n" -"- frames: List of (func_name, filename, lineno) showing the call stack\n" +"- frames: List of (func_name, filename, lineno) showing the call\n" +" stack\n" "- task_name: String identifier for the task\n" "- subtasks: List of tasks being awaited by this task, in same format\n" "\n" "Raises:\n" -" RuntimeError: If AsyncioDebug section is not available in the remote process\n" +" RuntimeError: If AsyncioDebug section is not available in the\n" +" remote process\n" " MemoryError: If memory allocation fails\n" " OSError: If reading from the remote process fails\n" "\n" @@ -336,14 +352,16 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_get_async_stack_trace__doc__, "\n" "Get the currently running async tasks and their dependency graphs from the remote process.\n" "\n" -"This returns information about running tasks and all tasks that are waiting for them,\n" -"forming a complete dependency graph for each thread\'s active task.\n" +"This returns information about running tasks and all tasks that are\n" +"waiting for them, forming a complete dependency graph for each\n" +"thread\'s active task.\n" "\n" -"For each thread with a running task, returns the running task plus all tasks that\n" -"transitively depend on it (tasks waiting for the running task, tasks waiting for\n" -"those tasks, etc.).\n" +"For each thread with a running task, returns the running task plus\n" +"all tasks that transitively depend on it (tasks waiting for the\n" +"running task, tasks waiting for those tasks, etc.).\n" "\n" -"Returns a list of per-thread results, where each thread result contains:\n" +"Returns a list of per-thread results, where each thread result\n" +"contains:\n" "- Thread ID\n" "- List of task information for the running task and all its waiters\n" "\n" @@ -354,11 +372,13 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_get_async_stack_trace__doc__, "- List of tasks waiting for this task (recursive structure)\n" "\n" "Raises:\n" -" RuntimeError: If AsyncioDebug section is not available in the target process\n" +" RuntimeError: If AsyncioDebug section is not available in the\n" +" target process\n" " MemoryError: If memory allocation fails\n" " OSError: If reading from the remote process fails\n" "\n" -"Example output (similar structure to get_all_awaited_by but only for running tasks):\n" +"Example output (similar structure to get_all_awaited_by but only for\n" +"running tasks):\n" "[\n" " (140234, [\n" " (4345585712, \'main_task\',\n" @@ -403,16 +423,34 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_get_stats__doc__, " - total_samples: Total number of get_stack_trace calls\n" " - frame_cache_hits: Full cache hits (entire stack unchanged)\n" " - frame_cache_misses: Cache misses requiring full walk\n" -" - frame_cache_partial_hits: Partial hits (stopped at cached frame)\n" +" - frame_cache_partial_hits: Partial hits (stopped at cached\n" +" frame)\n" " - frames_read_from_cache: Total frames retrieved from cache\n" -" - frames_read_from_memory: Total frames read from remote memory\n" +" - frames_read_from_memory: Total frames read from remote\n" +" memory\n" " - memory_reads: Total remote memory read operations\n" " - memory_bytes_read: Total bytes read from remote memory\n" " - code_object_cache_hits: Code object cache hits\n" " - code_object_cache_misses: Code object cache misses\n" -" - stale_cache_invalidations: Times stale cache entries were cleared\n" -" - frame_cache_hit_rate: Percentage of samples that hit the cache\n" -" - code_object_cache_hit_rate: Percentage of code object lookups that hit cache\n" +" - stale_cache_invalidations: Times stale cache entries were\n" +" cleared\n" +" - batched_read_attempts: Batched remote-read attempts\n" +" - batched_read_successes: Attempts that read all requested\n" +" segments\n" +" - batched_read_misses: Attempts that fell back or partially\n" +" read\n" +" - batched_read_segments_requested: Segments requested by\n" +" batched reads\n" +" - batched_read_segments_completed: Segments completed by\n" +" batched reads\n" +" - frame_cache_hit_rate: Percentage of samples that hit the\n" +" cache\n" +" - code_object_cache_hit_rate: Percentage of code object\n" +" lookups that hit cache\n" +" - batched_read_success_rate: Percentage of batched reads\n" +" that completed all segments\n" +" - batched_read_segment_completion_rate: Percentage of\n" +" requested segments read by batched reads\n" "\n" "Raises:\n" " RuntimeError: If stats collection was not enabled (stats=False)"); @@ -442,9 +480,11 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_pause_threads__doc__, "Pause all threads in the target process.\n" "\n" "This stops all threads in the target process to allow for consistent\n" -"memory reads during sampling. Must be paired with a call to resume_threads().\n" +"memory reads during sampling. Must be paired with a call to\n" +"resume_threads().\n" "\n" -"Returns True if threads were successfully paused, False if they were already paused.\n" +"Returns True if threads were successfully paused, False if they were\n" +"already paused.\n" "\n" "Raises:\n" " RuntimeError: If there is an error stopping the threads"); @@ -473,9 +513,11 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_resume_threads__doc__, "\n" "Resume all threads in the target process.\n" "\n" -"This resumes threads that were previously paused with pause_threads().\n" +"This resumes threads that were previously paused with\n" +"pause_threads().\n" "\n" -"Returns True if threads were successfully resumed, False if they were not paused."); +"Returns True if threads were successfully resumed, False if they\n" +"were not paused."); #define _REMOTE_DEBUGGING_REMOTEUNWINDER_RESUME_THREADS_METHODDEF \ {"resume_threads", (PyCFunction)_remote_debugging_RemoteUnwinder_resume_threads, METH_NOARGS, _remote_debugging_RemoteUnwinder_resume_threads__doc__}, @@ -503,16 +545,18 @@ PyDoc_STRVAR(_remote_debugging_GCMonitor___init____doc__, "\n" "Args:\n" " pid: Process ID of the target Python process to monitor\n" -" debug: If True, chain exceptions to explain the sequence of events that\n" -" lead to the exception.\n" +" debug: If True, chain exceptions to explain the sequence of\n" +" events that lead to the exception.\n" "\n" -"The GCMonitor provides functionality to read GC statistics from a running\n" -"Python process.\n" +"The GCMonitor provides functionality to read GC statistics from\n" +"a running Python process.\n" "\n" "Raises:\n" " PermissionError: If access to the target process is denied\n" -" OSError: If unable to attach to the target process or access its memory\n" -" RuntimeError: If unable to read debug information from the target process"); +" OSError: If unable to attach to the target process or access\n" +" its memory\n" +" RuntimeError: If unable to read debug information from the\n" +" target process"); static int _remote_debugging_GCMonitor___init___impl(GCMonitorObject *self, int pid, @@ -605,8 +649,8 @@ PyDoc_STRVAR(_remote_debugging_GCMonitor_get_gc_stats__doc__, " - duration: Total collection time, in seconds.\n" "\n" "Raises:\n" -" RuntimeError: If the target process cannot be inspected or if its\n" -" debug offsets or GC stats layout are incompatible."); +" RuntimeError: If the target process cannot be inspected or if\n" +" its debug offsets or GC stats layout are incompatible."); #define _REMOTE_DEBUGGING_GCMONITOR_GET_GC_STATS_METHODDEF \ {"get_gc_stats", _PyCFunction_CAST(_remote_debugging_GCMonitor_get_gc_stats), METH_FASTCALL|METH_KEYWORDS, _remote_debugging_GCMonitor_get_gc_stats__doc__}, @@ -681,7 +725,8 @@ PyDoc_STRVAR(_remote_debugging_BinaryWriter___init____doc__, "Arguments:\n" " filename: Path to output file\n" " sample_interval_us: Sampling interval in microseconds\n" -" start_time_us: Start timestamp in microseconds (from time.monotonic() * 1e6)\n" +" start_time_us: Start timestamp in microseconds (from\n" +" time.monotonic() * 1e6)\n" " compression: 0=none, 1=zstd (default: 0)\n" "\n" "Use as a context manager or call finalize() when done."); @@ -767,7 +812,8 @@ PyDoc_STRVAR(_remote_debugging_BinaryWriter_write_sample__doc__, "\n" "Arguments:\n" " stack_frames: List of InterpreterInfo objects\n" -" timestamp_us: Current timestamp in microseconds (from time.monotonic() * 1e6)"); +" timestamp_us: Current timestamp in microseconds (from\n" +" time.monotonic() * 1e6)"); #define _REMOTE_DEBUGGING_BINARYWRITER_WRITE_SAMPLE_METHODDEF \ {"write_sample", _PyCFunction_CAST(_remote_debugging_BinaryWriter_write_sample), METH_FASTCALL|METH_KEYWORDS, _remote_debugging_BinaryWriter_write_sample__doc__}, @@ -969,8 +1015,9 @@ PyDoc_STRVAR(_remote_debugging_BinaryWriter_get_stats__doc__, "\n" "Get encoding statistics for the writer.\n" "\n" -"Returns a dict with encoding statistics including repeat/full/suffix/pop-push\n" -"record counts, frames written/saved, and compression ratio."); +"Returns a dict with encoding statistics including\n" +"repeat/full/suffix/pop-push record counts, frames written/saved, and\n" +"compression ratio."); #define _REMOTE_DEBUGGING_BINARYWRITER_GET_STATS_METHODDEF \ {"get_stats", (PyCFunction)_remote_debugging_BinaryWriter_get_stats, METH_NOARGS, _remote_debugging_BinaryWriter_get_stats__doc__}, @@ -1148,8 +1195,8 @@ PyDoc_STRVAR(_remote_debugging_BinaryReader_get_stats__doc__, "\n" "Get reconstruction statistics from replay.\n" "\n" -"Returns a dict with statistics about record types decoded and samples\n" -"reconstructed during replay."); +"Returns a dict with statistics about record types decoded and\n" +"samples reconstructed during replay."); #define _REMOTE_DEBUGGING_BINARYREADER_GET_STATS_METHODDEF \ {"get_stats", (PyCFunction)_remote_debugging_BinaryReader_get_stats, METH_NOARGS, _remote_debugging_BinaryReader_get_stats__doc__}, @@ -1312,11 +1359,12 @@ PyDoc_STRVAR(_remote_debugging_get_child_pids__doc__, " If True, return all descendants (children, grandchildren, etc.).\n" " If False, return only direct children.\n" "\n" -"Returns a list of child process IDs. Returns an empty list if no children\n" -"are found.\n" +"Returns a list of child process IDs. Returns an empty list if no\n" +"children are found.\n" "\n" -"This function provides a snapshot of child processes at a moment in time.\n" -"Child processes may exit or new ones may be created after the list is returned.\n" +"This function provides a snapshot of child processes at a moment in\n" +"time. Child processes may exit or new ones may be created after the\n" +"list is returned.\n" "\n" "Raises:\n" " OSError: If unable to enumerate processes\n" @@ -1540,4 +1588,4 @@ _remote_debugging_get_gc_stats(PyObject *module, PyObject *const *args, Py_ssize exit: return return_value; } -/*[clinic end generated code: output=5e2a29746a0c5d65 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a3df14a6ab7f2998 input=a9049054013a1b77]*/ diff --git a/Modules/_remote_debugging/code_objects.c b/Modules/_remote_debugging/code_objects.c index 7b95c0f2d4f..ab889a130ee 100644 --- a/Modules/_remote_debugging/code_objects.c +++ b/Modules/_remote_debugging/code_objects.c @@ -47,7 +47,6 @@ cache_tlbc_array(RemoteUnwinderObject *unwinder, uintptr_t code_addr, uintptr_t // Read the TLBC array pointer if (read_ptr(unwinder, tlbc_array_addr, &tlbc_array_ptr) != 0) { - PyErr_SetString(PyExc_RuntimeError, "Failed to read TLBC array pointer"); set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to read TLBC array pointer"); return 0; // Read error } @@ -61,7 +60,6 @@ cache_tlbc_array(RemoteUnwinderObject *unwinder, uintptr_t code_addr, uintptr_t // Read the TLBC array size Py_ssize_t tlbc_size; if (_Py_RemoteDebug_PagedReadRemoteMemory(&unwinder->handle, tlbc_array_ptr, sizeof(tlbc_size), &tlbc_size) != 0) { - PyErr_SetString(PyExc_RuntimeError, "Failed to read TLBC array size"); set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to read TLBC array size"); return 0; // Read error } @@ -405,6 +403,8 @@ parse_code_object(RemoteUnwinderObject *unwinder, meta->func_name = func; meta->file_name = file; meta->linetable = linetable; + meta->last_frame_info = NULL; + meta->last_addrq = -1; meta->first_lineno = GET_MEMBER(int, code_object, unwinder->debug_offsets.code_object.firstlineno); meta->addr_code_adaptive = real_address + (uintptr_t)unwinder->debug_offsets.code_object.co_code_adaptive; @@ -432,7 +432,7 @@ parse_code_object(RemoteUnwinderObject *unwinder, #ifdef Py_GIL_DISABLED // Handle thread-local bytecode (TLBC) in free threading builds - if (ctx->tlbc_index == 0 || unwinder->debug_offsets.code_object.co_tlbc == 0 || unwinder == NULL) { + if (ctx->tlbc_index == 0 || unwinder == NULL || unwinder->debug_offsets.code_object.co_tlbc == 0) { // No TLBC or no unwinder - use main bytecode directly addrq = (uint16_t *)ip - (uint16_t *)meta->addr_code_adaptive; goto done_tlbc; @@ -482,6 +482,12 @@ parse_code_object(RemoteUnwinderObject *unwinder, addrq = (uint16_t *)ip - (uint16_t *)meta->addr_code_adaptive; #endif ; // Empty statement to avoid C23 extension warning + + if (!unwinder->opcodes && meta->last_frame_info != NULL && meta->last_addrq == addrq) { + *result = Py_NewRef(meta->last_frame_info); + return 0; + } + LocationInfo info = {0}; bool ok = parse_linetable(addrq, PyBytes_AS_STRING(meta->linetable), PyBytes_GET_SIZE(meta->linetable), @@ -529,6 +535,11 @@ parse_code_object(RemoteUnwinderObject *unwinder, goto error; } + if (!unwinder->opcodes) { + Py_XSETREF(meta->last_frame_info, Py_NewRef(tuple)); + meta->last_addrq = addrq; + } + *result = tuple; return 0; diff --git a/Modules/_remote_debugging/frame_cache.c b/Modules/_remote_debugging/frame_cache.c index b6566d7cff7..19fc406bca9 100644 --- a/Modules/_remote_debugging/frame_cache.c +++ b/Modules/_remote_debugging/frame_cache.c @@ -30,6 +30,7 @@ frame_cache_cleanup(RemoteUnwinderObject *unwinder) return; } for (int i = 0; i < FRAME_CACHE_MAX_THREADS; i++) { + Py_CLEAR(unwinder->frame_cache[i].thread_id_obj); Py_CLEAR(unwinder->frame_cache[i].frame_list); } PyMem_Free(unwinder->frame_cache); @@ -53,6 +54,21 @@ frame_cache_find(RemoteUnwinderObject *unwinder, uint64_t thread_id) return NULL; } +FrameCacheEntry * +frame_cache_find_by_tstate(RemoteUnwinderObject *unwinder, uintptr_t tstate_addr) +{ + if (!unwinder->frame_cache || tstate_addr == 0) { + return NULL; + } + for (int i = 0; i < FRAME_CACHE_MAX_THREADS; i++) { + if (unwinder->frame_cache[i].thread_state_addr == tstate_addr) { + assert(unwinder->frame_cache[i].num_addrs <= FRAME_CACHE_MAX_FRAMES); + return &unwinder->frame_cache[i]; + } + } + return NULL; +} + // Allocate a cache slot for a thread // Returns NULL if cache is full (graceful degradation) static FrameCacheEntry * @@ -127,8 +143,10 @@ frame_cache_invalidate_stale(RemoteUnwinderObject *unwinder, PyObject *result) } if (!found) { // Clear this entry + Py_CLEAR(unwinder->frame_cache[i].thread_id_obj); Py_CLEAR(unwinder->frame_cache[i].frame_list); unwinder->frame_cache[i].thread_id = 0; + unwinder->frame_cache[i].thread_state_addr = 0; unwinder->frame_cache[i].num_addrs = 0; STATS_INC(unwinder, stale_cache_invalidations); } @@ -216,6 +234,7 @@ frame_cache_store( PyObject *frame_list, const uintptr_t *addrs, Py_ssize_t num_addrs, + uintptr_t thread_state_addr, uintptr_t base_frame_addr, uintptr_t last_frame_visited) { @@ -257,6 +276,13 @@ frame_cache_store( return -1; } entry->thread_id = thread_id; + entry->thread_state_addr = thread_state_addr; + if (entry->thread_id_obj == NULL) { + entry->thread_id_obj = PyLong_FromUnsignedLongLong(thread_id); + if (entry->thread_id_obj == NULL) { + return -1; + } + } memcpy(entry->addrs, addrs, num_addrs * sizeof(uintptr_t)); entry->num_addrs = num_addrs; assert(entry->num_addrs == num_addrs); diff --git a/Modules/_remote_debugging/frames.c b/Modules/_remote_debugging/frames.c index bbdfce3f720..d73cd080dc4 100644 --- a/Modules/_remote_debugging/frames.c +++ b/Modules/_remote_debugging/frames.c @@ -56,12 +56,14 @@ process_single_stack_chunk( return -1; } - this_chunk = PyMem_RawRealloc(this_chunk, actual_size); - if (!this_chunk) { + char *tmp = PyMem_RawRealloc(this_chunk, actual_size); + if (!tmp) { + PyMem_RawFree(this_chunk); PyErr_NoMemory(); set_exception_cause(unwinder, PyExc_MemoryError, "Failed to reallocate stack chunk buffer"); return -1; } + this_chunk = tmp; if (_Py_RemoteDebug_PagedReadRemoteMemory(&unwinder->handle, chunk_addr, actual_size, this_chunk) < 0) { PyMem_RawFree(this_chunk); @@ -186,30 +188,16 @@ is_frame_valid( return 1; } -int -parse_frame_object( +static int +parse_frame_buffer( RemoteUnwinderObject *unwinder, PyObject** result, - uintptr_t address, + const char *frame, uintptr_t* address_of_code_object, uintptr_t* previous_frame ) { - char frame[SIZEOF_INTERP_FRAME]; *address_of_code_object = 0; - Py_ssize_t bytes_read = _Py_RemoteDebug_PagedReadRemoteMemory( - &unwinder->handle, - address, - SIZEOF_INTERP_FRAME, - frame - ); - if (bytes_read < 0) { - set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to read interpreter frame"); - return -1; - } - STATS_INC(unwinder, memory_reads); - STATS_ADD(unwinder, memory_bytes_read, SIZEOF_INTERP_FRAME); - *previous_frame = GET_MEMBER(uintptr_t, frame, unwinder->debug_offsets.interpreter_frame.previous); uintptr_t code_object = GET_MEMBER_NO_TAG(uintptr_t, frame, unwinder->debug_offsets.interpreter_frame.executable); int frame_valid = is_frame_valid(unwinder, (uintptr_t)frame, code_object); @@ -237,6 +225,31 @@ parse_frame_object( return parse_code_object(unwinder, result, &code_ctx); } +int +parse_frame_object( + RemoteUnwinderObject *unwinder, + PyObject** result, + uintptr_t address, + uintptr_t* address_of_code_object, + uintptr_t* previous_frame +) { + char frame[SIZEOF_INTERP_FRAME]; + Py_ssize_t bytes_read = _Py_RemoteDebug_ReadRemoteMemory( + &unwinder->handle, + address, + SIZEOF_INTERP_FRAME, + frame + ); + if (bytes_read < 0) { + set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to read interpreter frame"); + return -1; + } + STATS_INC(unwinder, memory_reads); + STATS_ADD(unwinder, memory_bytes_read, SIZEOF_INTERP_FRAME); + + return parse_frame_buffer(unwinder, result, frame, address_of_code_object, previous_frame); +} + int parse_frame_from_chunks( RemoteUnwinderObject *unwinder, @@ -312,15 +325,32 @@ process_frame_chain( } assert(frame_count <= MAX_FRAMES); - if (parse_frame_from_chunks(unwinder, &frame, frame_addr, &next_frame_addr, &stackpointer, ctx->chunks) < 0) { + if (ctx->chunks && ctx->chunks->count > 0) { + if (parse_frame_from_chunks(unwinder, &frame, frame_addr, &next_frame_addr, &stackpointer, ctx->chunks) == 0) { + goto parsed_frame; + } PyErr_Clear(); + } + { uintptr_t address_of_code_object = 0; - if (parse_frame_object(unwinder, &frame, frame_addr, &address_of_code_object, &next_frame_addr) < 0) { + int parse_result; + if (ctx->prefetch.frame && ctx->prefetch.frame_addr == frame_addr) { + parse_result = parse_frame_buffer( + unwinder, &frame, ctx->prefetch.frame, + &address_of_code_object, &next_frame_addr); + } + else { + parse_result = parse_frame_object( + unwinder, &frame, frame_addr, + &address_of_code_object, &next_frame_addr); + } + if (parse_result < 0) { set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to parse frame object in chain"); return -1; } } +parsed_frame: // Skip first frame if requested (used for cache miss continuation) if (ctx->skip_first_frame && frame_count == 1) { Py_XDECREF(frame); @@ -501,41 +531,37 @@ try_full_cache_hit( PyObject *current_frame = NULL; uintptr_t code_object_addr = 0; uintptr_t previous_frame = 0; - int parse_result = parse_frame_object(unwinder, &current_frame, ctx->frame_addr, + int parse_result; + if (ctx->prefetch.frame && ctx->prefetch.frame_addr == ctx->frame_addr) { + parse_result = parse_frame_buffer(unwinder, &current_frame, + ctx->prefetch.frame, &code_object_addr, &previous_frame); + } + else { + parse_result = parse_frame_object(unwinder, &current_frame, ctx->frame_addr, + &code_object_addr, &previous_frame); + } if (parse_result < 0) { return -1; } - Py_ssize_t cached_size = PyList_GET_SIZE(entry->frame_list); - PyObject *parent_slice = NULL; - if (cached_size > 1) { - parent_slice = PyList_GetSlice(entry->frame_list, 1, cached_size); - if (!parent_slice) { - Py_XDECREF(current_frame); - return -1; - } - } - if (current_frame != NULL) { if (PyList_Append(ctx->frame_info, current_frame) < 0) { Py_DECREF(current_frame); - Py_XDECREF(parent_slice); return -1; } Py_DECREF(current_frame); STATS_ADD(unwinder, frames_read_from_memory, 1); } - if (parent_slice) { - Py_ssize_t cur_size = PyList_GET_SIZE(ctx->frame_info); - int result = PyList_SetSlice(ctx->frame_info, cur_size, cur_size, parent_slice); - Py_DECREF(parent_slice); - if (result < 0) { + Py_ssize_t cached_size = PyList_GET_SIZE(entry->frame_list); + for (Py_ssize_t i = 1; i < cached_size; i++) { + PyObject *cached_frame = PyList_GET_ITEM(entry->frame_list, i); + if (PyList_Append(ctx->frame_info, cached_frame) < 0) { return -1; } - STATS_ADD(unwinder, frames_read_from_cache, cached_size - 1); } + STATS_ADD(unwinder, frames_read_from_cache, cached_size > 1 ? cached_size - 1 : 0); STATS_INC(unwinder, frame_cache_hits); return 1; @@ -606,7 +632,8 @@ collect_frames_with_cache( } if (frame_cache_store(unwinder, thread_id, ctx->frame_info, ctx->frame_addrs, ctx->num_addrs, - ctx->base_frame_addr, ctx->last_frame_visited) < 0) { + ctx->thread_state_addr, ctx->base_frame_addr, + ctx->last_frame_visited) < 0) { return -1; } diff --git a/Modules/_remote_debugging/module.c b/Modules/_remote_debugging/module.c index efdd2e1a2d7..984213d1881 100644 --- a/Modules/_remote_debugging/module.c +++ b/Modules/_remote_debugging/module.c @@ -166,6 +166,7 @@ cached_code_metadata_destroy(void *ptr) Py_DECREF(meta->func_name); Py_DECREF(meta->file_name); Py_DECREF(meta->linetable); + Py_XDECREF(meta->last_frame_info); PyMem_RawFree(meta); } @@ -279,7 +280,6 @@ class _remote_debugging.RemoteUnwinder "RemoteUnwinderObject *" "&RemoteUnwinder /*[clinic input] @permit_long_summary -@permit_long_docstring_body _remote_debugging.RemoteUnwinder.__init__ pid: int * @@ -298,33 +298,37 @@ Initialize a new RemoteUnwinder object for debugging a remote Python process. Args: pid: Process ID of the target Python process to debug - all_threads: If True, initialize state for all threads in the process. - If False, only initialize for the main thread. + all_threads: If True, initialize state for all threads in the + process. If False, only initialize for the main thread. only_active_thread: If True, only sample the thread holding the GIL. - mode: Profiling mode: 0=WALL (wall-time), 1=CPU (cpu-time), 2=GIL (gil-time). - Cannot be used together with all_threads=True. - debug: If True, chain exceptions to explain the sequence of events that - lead to the exception. - skip_non_matching_threads: If True, skip threads that don't match the selected mode. - If False, include all threads regardless of mode. - native: If True, include artificial "<native>" frames to denote calls to - non-Python code. - gc: If True, include artificial "<GC>" frames to denote active garbage - collection. - opcodes: If True, gather bytecode opcode information for instruction-level - profiling. - cache_frames: If True, enable frame caching optimization to avoid re-reading - unchanged parent frames between samples. - stats: If True, collect statistics about cache hits, memory reads, etc. - Use get_stats() to retrieve the collected statistics. - -The RemoteUnwinder provides functionality to inspect and debug a running Python -process, including examining thread states, stack frames and other runtime data. + mode: Profiling mode: 0=WALL (wall-time), 1=CPU (cpu-time), 2=GIL + (gil-time). Cannot be used together with all_threads=True. + debug: If True, chain exceptions to explain the sequence of events + that lead to the exception. + skip_non_matching_threads: If True, skip threads that don't match + the selected mode. If False, include all threads regardless of + mode. + native: If True, include artificial "<native>" frames to denote + calls to non-Python code. + gc: If True, include artificial "<GC>" frames to denote active + garbage collection. + opcodes: If True, gather bytecode opcode information for + instruction-level profiling. + cache_frames: If True, enable frame caching optimization to avoid + re-reading unchanged parent frames between samples. + stats: If True, collect statistics about cache hits, memory reads, + etc. Use get_stats() to retrieve the collected statistics. + +The RemoteUnwinder provides functionality to inspect and debug a running +Python process, including examining thread states, stack frames and +other runtime data. Raises: PermissionError: If access to the target process is denied - OSError: If unable to attach to the target process or access its memory - RuntimeError: If unable to read debug information from the target process + OSError: If unable to attach to the target process or access its + memory + RuntimeError: If unable to read debug information from the target + process ValueError: If both all_threads and only_active_thread are True [clinic start generated code]*/ @@ -337,7 +341,7 @@ _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self, int native, int gc, int opcodes, int cache_frames, int stats) -/*[clinic end generated code: output=0031f743f4b9ad52 input=8fb61b24102dec6e]*/ +/*[clinic end generated code: output=0031f743f4b9ad52 input=9d25ae328d62626d]*/ { // Validate that all_threads and only_active_thread are not both True if (all_threads && only_active_thread) { @@ -360,6 +364,10 @@ _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self, self->cache_frames = cache_frames; self->collect_stats = stats; self->stale_invalidation_counter = 0; + self->cached_tstate_interpreter_addr = 0; + self->cached_tstate_addr = 0; + memset(self->cached_tstates, 0, sizeof(self->cached_tstates)); + memset(self->cached_generations, 0, sizeof(self->cached_generations)); self->debug = debug; self->only_active_thread = only_active_thread; self->mode = mode; @@ -403,6 +411,9 @@ _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self, return -1; } if (async_debug_result < 0) { + if (_Py_RemoteDebug_HasPermissionError()) { + return -1; + } PyErr_Clear(); memset(&self->async_debug_offsets, 0, sizeof(self->async_debug_offsets)); self->async_debug_offsets_available = 0; @@ -473,23 +484,193 @@ _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self, return 0; } +static inline size_t +interpreter_thread_cache_index(uintptr_t interpreter_addr) +{ + // Direct-mapped table indexed by the remote interpreter address. Each entry + // stores the full address and verifies it on lookup, so hash collisions + // degrade to misses and cannot return a value from the wrong interpreter. + return (size_t)_Py_HashPointerRaw((const void *)interpreter_addr) + & (INTERPRETER_THREAD_CACHE_SIZE - 1); +} + +static inline uintptr_t +get_cached_tstate_for_interpreter( + RemoteUnwinderObject *self, + uintptr_t interpreter_addr) +{ + if (interpreter_addr == 0) { + return 0; + } + + if (self->cached_tstate_interpreter_addr == interpreter_addr) { + return self->cached_tstate_addr; + } + + InterpreterTstateCacheEntry *entry = + &self->cached_tstates[interpreter_thread_cache_index(interpreter_addr)]; + if (entry->interpreter_addr == interpreter_addr) { + self->cached_tstate_interpreter_addr = interpreter_addr; + self->cached_tstate_addr = entry->thread_state_addr; + return entry->thread_state_addr; + } + return 0; +} + +static inline void +set_cached_tstate_for_interpreter( + RemoteUnwinderObject *self, + uintptr_t interpreter_addr, + uintptr_t thread_state_addr) +{ + if (interpreter_addr == 0 || thread_state_addr == 0) { + return; + } + + self->cached_tstate_interpreter_addr = interpreter_addr; + self->cached_tstate_addr = thread_state_addr; + + InterpreterTstateCacheEntry *entry = + &self->cached_tstates[interpreter_thread_cache_index(interpreter_addr)]; + entry->interpreter_addr = interpreter_addr; + entry->thread_state_addr = thread_state_addr; +} + +static void +refresh_generation_caches_from_interp_state( + RemoteUnwinderObject *self, + uintptr_t interpreter_addr, + const char *interp_state_buffer) +{ + uint64_t code_object_generation = GET_MEMBER(uint64_t, interp_state_buffer, + self->debug_offsets.interpreter_state.code_object_generation); + + if (self->cached_generation_interpreter_addr == interpreter_addr) { + if (code_object_generation != self->cached_code_object_generation) { + self->cached_code_object_generation = code_object_generation; + _Py_hashtable_clear(self->code_object_cache); + } + } + else { + InterpreterGenerationCacheEntry *entry = + &self->cached_generations[interpreter_thread_cache_index(interpreter_addr)]; + // A slot rebound from another interpreter must be treated as changed: + // the code_object_cache is global, so even if the new generation + // numerically matches what the previous occupant had, stale entries + // from that occupant could still be served. + int changed = entry->interpreter_addr != interpreter_addr + || entry->code_object_generation != code_object_generation; + entry->interpreter_addr = interpreter_addr; + entry->code_object_generation = code_object_generation; + if (changed) { + _Py_hashtable_clear(self->code_object_cache); + } + self->cached_generation_interpreter_addr = interpreter_addr; + self->cached_code_object_generation = code_object_generation; + } + +#ifdef Py_GIL_DISABLED + uint32_t current_tlbc_generation = GET_MEMBER(uint32_t, interp_state_buffer, + self->debug_offsets.interpreter_state.tlbc_generation); + if (current_tlbc_generation != self->tlbc_generation) { + self->tlbc_generation = current_tlbc_generation; + _Py_hashtable_clear(self->tlbc_cache); + } +#endif +} + +static int +refresh_generation_caches_for_interpreter( + RemoteUnwinderObject *self, + uintptr_t interpreter_addr) +{ + char interp_state_buffer[INTERP_STATE_BUFFER_SIZE]; + if (_Py_RemoteDebug_ReadRemoteMemory( + &self->handle, + interpreter_addr, + INTERP_STATE_BUFFER_SIZE, + interp_state_buffer) < 0) { + set_exception_cause(self, PyExc_RuntimeError, + "Failed to read interpreter state buffer"); + return -1; + } + refresh_generation_caches_from_interp_state(self, interpreter_addr, interp_state_buffer); + return 0; +} + +static int +read_interp_state_and_maybe_thread_frame( + RemoteUnwinderObject *unwinder, + uintptr_t interpreter_addr, + char *interp_state_buffer, + char *tstate_buffer, + char *frame_buffer, + RemoteReadPrefetch *prefetch) +{ + prefetch->tstate = NULL; + prefetch->frame = NULL; + if (prefetch->tstate_addr != 0) { + size_t tstate_size = (size_t)unwinder->debug_offsets.thread_state.size; + _Py_RemoteReadSegment segments[3] = { + {interpreter_addr, interp_state_buffer, INTERP_STATE_BUFFER_SIZE}, + {prefetch->tstate_addr, tstate_buffer, tstate_size}, + {prefetch->frame_addr, frame_buffer, SIZEOF_INTERP_FRAME}, + }; + int nsegs = prefetch->frame_addr != 0 ? 3 : 2; + Py_ssize_t nread = _Py_RemoteDebug_BatchedReadRemoteMemory( + &unwinder->handle, segments, nsegs); + int completed = 0; + if (nread >= (Py_ssize_t)INTERP_STATE_BUFFER_SIZE) { + completed = 1; + Py_ssize_t with_tstate = (Py_ssize_t)INTERP_STATE_BUFFER_SIZE + + (Py_ssize_t)tstate_size; + if (nread >= with_tstate) { + completed = 2; + } + if (nsegs == 3 + && nread == with_tstate + (Py_ssize_t)SIZEOF_INTERP_FRAME) { + completed = 3; + } + } + STATS_BATCHED_READ(unwinder, nsegs, completed); + if (completed >= 1) { + if (completed >= 2) { + prefetch->tstate = tstate_buffer; + } + if (completed >= 3) { + prefetch->frame = frame_buffer; + } + return 0; + } + } + return _Py_RemoteDebug_ReadRemoteMemory( + &unwinder->handle, + interpreter_addr, + INTERP_STATE_BUFFER_SIZE, + interp_state_buffer); +} + /*[clinic input] -@permit_long_docstring_body @critical_section _remote_debugging.RemoteUnwinder.get_stack_trace Returns stack traces for all interpreters and threads in process. -Each element in the returned list is a tuple of (interpreter_id, thread_list), where: +Each element in the returned list is a tuple of (interpreter_id, +thread_list), where: - interpreter_id is the interpreter identifier -- thread_list is a list of tuples (thread_id, frame_list) for threads in that interpreter +- thread_list is a list of tuples (thread_id, frame_list) for + threads in that interpreter - thread_id is the OS thread identifier - - frame_list is a list of tuples (function_name, filename, line_number) representing - the Python stack frames for that thread, ordered from most recent to oldest + - frame_list is a list of tuples (function_name, filename, + line_number) representing the Python stack frames for that + thread, ordered from most recent to oldest The threads returned depend on the initialization parameters: -- If only_active_thread was True: returns only the thread holding the GIL across all interpreters -- If all_threads was True: returns all threads across all interpreters +- If only_active_thread was True: returns only the thread holding + the GIL across all interpreters +- If all_threads was True: returns all threads across all + interpreters - Otherwise: returns only the main thread of each interpreter Example: @@ -513,16 +694,18 @@ The threads returned depend on the initialization parameters: ] Raises: - RuntimeError: If there is an error copying memory from the target process + RuntimeError: If there is an error copying memory from the + target process OSError: If there is an error accessing the target process PermissionError: If access to the target process is denied - UnicodeDecodeError: If there is an error decoding strings from the target process + UnicodeDecodeError: If there is an error decoding strings from + the target process [clinic start generated code]*/ static PyObject * _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self) -/*[clinic end generated code: output=666192b90c69d567 input=bcff01c73cccc1c0]*/ +/*[clinic end generated code: output=666192b90c69d567 input=86a992b853f48aa9]*/ { STATS_INC(self, total_samples); @@ -537,15 +720,32 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self while (current_interpreter != 0) { // Read interpreter state to get the interpreter ID char interp_state_buffer[INTERP_STATE_BUFFER_SIZE]; - if (_Py_RemoteDebug_PagedReadRemoteMemory( - &self->handle, + char prefetched_tstate[SIZEOF_THREAD_STATE]; + char prefetched_frame[SIZEOF_INTERP_FRAME]; + RemoteReadPrefetch prefetch = {0}; + if (self->cache_frames) { + prefetch.tstate_addr = get_cached_tstate_for_interpreter( + self, current_interpreter); + } + if (prefetch.tstate_addr != 0) { + FrameCacheEntry *entry = frame_cache_find_by_tstate(self, prefetch.tstate_addr); + if (entry && entry->num_addrs > 0) { + prefetch.frame_addr = entry->addrs[0]; + } + } + + if (read_interp_state_and_maybe_thread_frame( + self, current_interpreter, - INTERP_STATE_BUFFER_SIZE, - interp_state_buffer) < 0) { + interp_state_buffer, + prefetched_tstate, + prefetched_frame, + &prefetch) < 0) { set_exception_cause(self, PyExc_RuntimeError, "Failed to read interpreter state buffer"); Py_CLEAR(result); goto exit; } + refresh_generation_caches_from_interp_state(self, current_interpreter, interp_state_buffer); uintptr_t gc_frame = 0; if (self->gc) { @@ -557,25 +757,6 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self int64_t interpreter_id = GET_MEMBER(int64_t, interp_state_buffer, self->debug_offsets.interpreter_state.id); - // Get code object generation from buffer - uint64_t code_object_generation = GET_MEMBER(uint64_t, interp_state_buffer, - self->debug_offsets.interpreter_state.code_object_generation); - - if (code_object_generation != self->code_object_generation) { - self->code_object_generation = code_object_generation; - _Py_hashtable_clear(self->code_object_cache); - } - -#ifdef Py_GIL_DISABLED - // Check TLBC generation and invalidate cache if needed - uint32_t current_tlbc_generation = GET_MEMBER(uint32_t, interp_state_buffer, - self->debug_offsets.interpreter_state.tlbc_generation); - if (current_tlbc_generation != self->tlbc_generation) { - self->tlbc_generation = current_tlbc_generation; - _Py_hashtable_clear(self->tlbc_cache); - } -#endif - // Create a list to hold threads for this interpreter PyObject *interpreter_threads = PyList_New(0); if (!interpreter_threads) { @@ -611,6 +792,9 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self // Target specific thread (only process first interpreter) current_tstate = self->tstate_addr; } + if (current_tstate != 0 && self->cache_frames) { + set_cached_tstate_for_interpreter(self, current_interpreter, current_tstate); + } // Acquire main thread state information uintptr_t main_thread_tstate = GET_MEMBER(uintptr_t, interp_state_buffer, @@ -621,7 +805,8 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self PyObject* frame_info = unwind_stack_for_thread(self, &current_tstate, gil_holder_tstate, gc_frame, - main_thread_tstate); + main_thread_tstate, + &prefetch); if (!frame_info) { // Check if this was an intentional skip due to mode-based filtering if ((self->mode == PROFILING_MODE_CPU || self->mode == PROFILING_MODE_GIL || @@ -720,26 +905,30 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self /*[clinic input] @permit_long_summary -@permit_long_docstring_body @critical_section _remote_debugging.RemoteUnwinder.get_all_awaited_by Get all tasks and their awaited_by relationships from the remote process. -This provides a tree structure showing which tasks are waiting for other tasks. +This provides a tree structure showing which tasks are waiting for +other tasks. For each task, returns: -1. The call stack frames leading to where the task is currently executing +1. The call stack frames leading to where the task is currently + executing 2. The name of the task -3. A list of tasks that this task is waiting for, with their own frames/names/etc +3. A list of tasks that this task is waiting for, with their own + frames/names/etc Returns a list of [frames, task_name, subtasks] where: -- frames: List of (func_name, filename, lineno) showing the call stack +- frames: List of (func_name, filename, lineno) showing the call + stack - task_name: String identifier for the task - subtasks: List of tasks being awaited by this task, in same format Raises: - RuntimeError: If AsyncioDebug section is not available in the remote process + RuntimeError: If AsyncioDebug section is not available in the + remote process MemoryError: If memory allocation fails OSError: If reading from the remote process fails @@ -766,11 +955,14 @@ Example output: static PyObject * _remote_debugging_RemoteUnwinder_get_all_awaited_by_impl(RemoteUnwinderObject *self) -/*[clinic end generated code: output=6a49cd345e8aec53 input=307f754cbe38250c]*/ +/*[clinic end generated code: output=6a49cd345e8aec53 input=c22bfee0612e0b69]*/ { if (ensure_async_debug_offsets(self) < 0) { return NULL; } + if (refresh_generation_caches_for_interpreter(self, self->interpreter_addr) < 0) { + return NULL; + } PyObject *result = PyList_New(0); if (result == NULL) { @@ -808,20 +1000,21 @@ _remote_debugging_RemoteUnwinder_get_all_awaited_by_impl(RemoteUnwinderObject *s /*[clinic input] @permit_long_summary -@permit_long_docstring_body @critical_section _remote_debugging.RemoteUnwinder.get_async_stack_trace Get the currently running async tasks and their dependency graphs from the remote process. -This returns information about running tasks and all tasks that are waiting for them, -forming a complete dependency graph for each thread's active task. +This returns information about running tasks and all tasks that are +waiting for them, forming a complete dependency graph for each +thread's active task. -For each thread with a running task, returns the running task plus all tasks that -transitively depend on it (tasks waiting for the running task, tasks waiting for -those tasks, etc.). +For each thread with a running task, returns the running task plus +all tasks that transitively depend on it (tasks waiting for the +running task, tasks waiting for those tasks, etc.). -Returns a list of per-thread results, where each thread result contains: +Returns a list of per-thread results, where each thread result +contains: - Thread ID - List of task information for the running task and all its waiters @@ -832,11 +1025,13 @@ Each task info contains: - List of tasks waiting for this task (recursive structure) Raises: - RuntimeError: If AsyncioDebug section is not available in the target process + RuntimeError: If AsyncioDebug section is not available in the + target process MemoryError: If memory allocation fails OSError: If reading from the remote process fails -Example output (similar structure to get_all_awaited_by but only for running tasks): +Example output (similar structure to get_all_awaited_by but only for +running tasks): [ # Thread 140234 results (140234, [ @@ -855,11 +1050,14 @@ Example output (similar structure to get_all_awaited_by but only for running tas static PyObject * _remote_debugging_RemoteUnwinder_get_async_stack_trace_impl(RemoteUnwinderObject *self) -/*[clinic end generated code: output=6433d52b55e87bbe input=6129b7d509a887c9]*/ +/*[clinic end generated code: output=6433d52b55e87bbe input=bc802e4221c99399]*/ { if (ensure_async_debug_offsets(self) < 0) { return NULL; } + if (refresh_generation_caches_for_interpreter(self, self->interpreter_addr) < 0) { + return NULL; + } PyObject *result = PyList_New(0); if (result == NULL) { @@ -881,7 +1079,6 @@ _remote_debugging_RemoteUnwinder_get_async_stack_trace_impl(RemoteUnwinderObject } /*[clinic input] -@permit_long_docstring_body @critical_section _remote_debugging.RemoteUnwinder.get_stats @@ -896,16 +1093,34 @@ RemoteUnwinder was created with stats=True. - total_samples: Total number of get_stack_trace calls - frame_cache_hits: Full cache hits (entire stack unchanged) - frame_cache_misses: Cache misses requiring full walk - - frame_cache_partial_hits: Partial hits (stopped at cached frame) + - frame_cache_partial_hits: Partial hits (stopped at cached + frame) - frames_read_from_cache: Total frames retrieved from cache - - frames_read_from_memory: Total frames read from remote memory + - frames_read_from_memory: Total frames read from remote + memory - memory_reads: Total remote memory read operations - memory_bytes_read: Total bytes read from remote memory - code_object_cache_hits: Code object cache hits - code_object_cache_misses: Code object cache misses - - stale_cache_invalidations: Times stale cache entries were cleared - - frame_cache_hit_rate: Percentage of samples that hit the cache - - code_object_cache_hit_rate: Percentage of code object lookups that hit cache + - stale_cache_invalidations: Times stale cache entries were + cleared + - batched_read_attempts: Batched remote-read attempts + - batched_read_successes: Attempts that read all requested + segments + - batched_read_misses: Attempts that fell back or partially + read + - batched_read_segments_requested: Segments requested by + batched reads + - batched_read_segments_completed: Segments completed by + batched reads + - frame_cache_hit_rate: Percentage of samples that hit the + cache + - code_object_cache_hit_rate: Percentage of code object + lookups that hit cache + - batched_read_success_rate: Percentage of batched reads + that completed all segments + - batched_read_segment_completion_rate: Percentage of + requested segments read by batched reads Raises: RuntimeError: If stats collection was not enabled (stats=False) @@ -913,7 +1128,7 @@ RemoteUnwinder was created with stats=True. static PyObject * _remote_debugging_RemoteUnwinder_get_stats_impl(RemoteUnwinderObject *self) -/*[clinic end generated code: output=21e36477122be2a0 input=75fef4134c12a8c9]*/ +/*[clinic end generated code: output=21e36477122be2a0 input=87905c65038fb06e]*/ { if (!self->collect_stats) { PyErr_SetString(PyExc_RuntimeError, @@ -948,9 +1163,24 @@ _remote_debugging_RemoteUnwinder_get_stats_impl(RemoteUnwinderObject *self) ADD_STAT(code_object_cache_hits); ADD_STAT(code_object_cache_misses); ADD_STAT(stale_cache_invalidations); + ADD_STAT(batched_read_attempts); + ADD_STAT(batched_read_successes); + ADD_STAT(batched_read_misses); + ADD_STAT(batched_read_segments_requested); + ADD_STAT(batched_read_segments_completed); #undef ADD_STAT +#define ADD_DERIVED_STAT(name, value) do { \ + PyObject *val = PyFloat_FromDouble(value); \ + if (!val || PyDict_SetItemString(result, name, val) < 0) { \ + Py_XDECREF(val); \ + Py_DECREF(result); \ + return NULL; \ + } \ + Py_DECREF(val); \ +} while(0) + // Calculate and add derived statistics // Hit rate is calculated as (hits + partial_hits) / total_cache_lookups double frame_cache_hit_rate = 0.0; @@ -959,41 +1189,49 @@ _remote_debugging_RemoteUnwinder_get_stats_impl(RemoteUnwinderObject *self) frame_cache_hit_rate = 100.0 * (double)(self->stats.frame_cache_hits + self->stats.frame_cache_partial_hits) / (double)total_cache_lookups; } - PyObject *hit_rate = PyFloat_FromDouble(frame_cache_hit_rate); - if (!hit_rate || PyDict_SetItemString(result, "frame_cache_hit_rate", hit_rate) < 0) { - Py_XDECREF(hit_rate); - Py_DECREF(result); - return NULL; - } - Py_DECREF(hit_rate); + ADD_DERIVED_STAT("frame_cache_hit_rate", frame_cache_hit_rate); double code_object_hit_rate = 0.0; uint64_t total_code_lookups = self->stats.code_object_cache_hits + self->stats.code_object_cache_misses; if (total_code_lookups > 0) { code_object_hit_rate = 100.0 * (double)self->stats.code_object_cache_hits / (double)total_code_lookups; } - PyObject *code_hit_rate = PyFloat_FromDouble(code_object_hit_rate); - if (!code_hit_rate || PyDict_SetItemString(result, "code_object_cache_hit_rate", code_hit_rate) < 0) { - Py_XDECREF(code_hit_rate); - Py_DECREF(result); - return NULL; + ADD_DERIVED_STAT("code_object_cache_hit_rate", code_object_hit_rate); + + double batched_read_success_rate = 0.0; + if (self->stats.batched_read_attempts > 0) { + batched_read_success_rate = + 100.0 * (double)self->stats.batched_read_successes + / (double)self->stats.batched_read_attempts; } - Py_DECREF(code_hit_rate); + ADD_DERIVED_STAT("batched_read_success_rate", batched_read_success_rate); + + double batched_read_segment_completion_rate = 0.0; + if (self->stats.batched_read_segments_requested > 0) { + batched_read_segment_completion_rate = + 100.0 * (double)self->stats.batched_read_segments_completed + / (double)self->stats.batched_read_segments_requested; + } + ADD_DERIVED_STAT("batched_read_segment_completion_rate", + batched_read_segment_completion_rate); + +#undef ADD_DERIVED_STAT return result; } /*[clinic input] -@permit_long_docstring_body @critical_section _remote_debugging.RemoteUnwinder.pause_threads Pause all threads in the target process. This stops all threads in the target process to allow for consistent -memory reads during sampling. Must be paired with a call to resume_threads(). +memory reads during sampling. Must be paired with a call to +resume_threads(). -Returns True if threads were successfully paused, False if they were already paused. +Returns True if threads were successfully paused, False if they were +already paused. Raises: RuntimeError: If there is an error stopping the threads @@ -1001,7 +1239,7 @@ Returns True if threads were successfully paused, False if they were already pau static PyObject * _remote_debugging_RemoteUnwinder_pause_threads_impl(RemoteUnwinderObject *self) -/*[clinic end generated code: output=aaf2bdc0a725750c input=d8a266f19a81c67e]*/ +/*[clinic end generated code: output=aaf2bdc0a725750c input=b91dde5517c9dde2]*/ { #ifdef Py_REMOTE_DEBUG_SUPPORTS_BLOCKING if (self->threads_stopped) { @@ -1023,20 +1261,21 @@ _remote_debugging_RemoteUnwinder_pause_threads_impl(RemoteUnwinderObject *self) } /*[clinic input] -@permit_long_docstring_body @critical_section _remote_debugging.RemoteUnwinder.resume_threads Resume all threads in the target process. -This resumes threads that were previously paused with pause_threads(). +This resumes threads that were previously paused with +pause_threads(). -Returns True if threads were successfully resumed, False if they were not paused. +Returns True if threads were successfully resumed, False if they +were not paused. [clinic start generated code]*/ static PyObject * _remote_debugging_RemoteUnwinder_resume_threads_impl(RemoteUnwinderObject *self) -/*[clinic end generated code: output=8d6781ea37095536 input=16baaaab007f4259]*/ +/*[clinic end generated code: output=8d6781ea37095536 input=130758d55d46897a]*/ { #ifdef Py_REMOTE_DEBUG_SUPPORTS_BLOCKING if (!self->threads_stopped) { @@ -1174,7 +1413,6 @@ class _remote_debugging.GCMonitor "GCMonitorObject *" "&GCMonitor_Type" /*[clinic input] @permit_long_summary -@permit_long_docstring_body _remote_debugging.GCMonitor.__init__ pid: int * @@ -1184,22 +1422,24 @@ Initialize a new GCMonitor object for monitoring GC events from remote process. Args: pid: Process ID of the target Python process to monitor - debug: If True, chain exceptions to explain the sequence of events that - lead to the exception. + debug: If True, chain exceptions to explain the sequence of + events that lead to the exception. -The GCMonitor provides functionality to read GC statistics from a running -Python process. +The GCMonitor provides functionality to read GC statistics from +a running Python process. Raises: PermissionError: If access to the target process is denied - OSError: If unable to attach to the target process or access its memory - RuntimeError: If unable to read debug information from the target process + OSError: If unable to attach to the target process or access + its memory + RuntimeError: If unable to read debug information from the + target process [clinic start generated code]*/ static int _remote_debugging_GCMonitor___init___impl(GCMonitorObject *self, int pid, int debug) -/*[clinic end generated code: output=2cdf351c2f6335db input=1185a48535b808be]*/ +/*[clinic end generated code: output=2cdf351c2f6335db input=03da0b2d3282ae1b]*/ { return init_runtime_offsets(&self->offsets, pid, debug); } @@ -1230,14 +1470,14 @@ Returns a list of GCStatsInfo objects with GC statistics data. - duration: Total collection time, in seconds. Raises: - RuntimeError: If the target process cannot be inspected or if its - debug offsets or GC stats layout are incompatible. + RuntimeError: If the target process cannot be inspected or if + its debug offsets or GC stats layout are incompatible. [clinic start generated code]*/ static PyObject * _remote_debugging_GCMonitor_get_gc_stats_impl(GCMonitorObject *self, int all_interpreters) -/*[clinic end generated code: output=f73f365725224f7a input=12f7c1a288cf2741]*/ +/*[clinic end generated code: output=f73f365725224f7a input=ec016bc4be6dd003]*/ { RemoteDebuggingState *st = RemoteDebugging_GetStateFromType(Py_TYPE(self)); return get_gc_stats(&self->offsets, all_interpreters, st->GCStatsInfo_Type); @@ -1474,7 +1714,6 @@ class _remote_debugging.BinaryWriter "BinaryWriterObject *" "&PyBinaryWriter_Typ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=e948838b90a2003c]*/ /*[clinic input] -@permit_long_docstring_body _remote_debugging.BinaryWriter.__init__ filename: object sample_interval_us: unsigned_long_long @@ -1487,7 +1726,8 @@ High-performance binary writer for profiling data. Arguments: filename: Path to output file sample_interval_us: Sampling interval in microseconds - start_time_us: Start timestamp in microseconds (from time.monotonic() * 1e6) + start_time_us: Start timestamp in microseconds (from + time.monotonic() * 1e6) compression: 0=none, 1=zstd (default: 0) Use as a context manager or call finalize() when done. @@ -1499,7 +1739,7 @@ _remote_debugging_BinaryWriter___init___impl(BinaryWriterObject *self, unsigned long long sample_interval_us, unsigned long long start_time_us, int compression) -/*[clinic end generated code: output=00446656ea2e5986 input=b92f0c77ba4cd274]*/ +/*[clinic end generated code: output=00446656ea2e5986 input=2e3f298c69fc7666]*/ { if (self->writer) { binary_writer_destroy(self->writer); @@ -1514,7 +1754,6 @@ _remote_debugging_BinaryWriter___init___impl(BinaryWriterObject *self, } /*[clinic input] -@permit_long_docstring_body _remote_debugging.BinaryWriter.write_sample stack_frames: object timestamp_us: unsigned_long_long @@ -1523,14 +1762,15 @@ Write a sample to the binary file. Arguments: stack_frames: List of InterpreterInfo objects - timestamp_us: Current timestamp in microseconds (from time.monotonic() * 1e6) + timestamp_us: Current timestamp in microseconds (from + time.monotonic() * 1e6) [clinic start generated code]*/ static PyObject * _remote_debugging_BinaryWriter_write_sample_impl(BinaryWriterObject *self, PyObject *stack_frames, unsigned long long timestamp_us) -/*[clinic end generated code: output=24d5b86679b4128f input=4e6d832d360bea46]*/ +/*[clinic end generated code: output=24d5b86679b4128f input=5033f1ae7fa135f1]*/ { if (!self->writer) { PyErr_SetString(PyExc_ValueError, "Writer is closed"); @@ -1653,18 +1893,18 @@ _remote_debugging_BinaryWriter___exit___impl(BinaryWriterObject *self, } /*[clinic input] -@permit_long_docstring_body _remote_debugging.BinaryWriter.get_stats Get encoding statistics for the writer. -Returns a dict with encoding statistics including repeat/full/suffix/pop-push -record counts, frames written/saved, and compression ratio. +Returns a dict with encoding statistics including +repeat/full/suffix/pop-push record counts, frames written/saved, and +compression ratio. [clinic start generated code]*/ static PyObject * _remote_debugging_BinaryWriter_get_stats_impl(BinaryWriterObject *self) -/*[clinic end generated code: output=06522cd52544df89 input=837c874ffdebd24c]*/ +/*[clinic end generated code: output=06522cd52544df89 input=a8bb8c8682ccd34b]*/ { if (!self->writer) { PyErr_SetString(PyExc_ValueError, "Writer is closed"); @@ -1829,13 +2069,13 @@ _remote_debugging.BinaryReader.get_stats Get reconstruction statistics from replay. -Returns a dict with statistics about record types decoded and samples -reconstructed during replay. +Returns a dict with statistics about record types decoded and +samples reconstructed during replay. [clinic start generated code]*/ static PyObject * _remote_debugging_BinaryReader_get_stats_impl(BinaryReaderObject *self) -/*[clinic end generated code: output=628b9ab5e4c4fd36 input=d8dd6654abd6c3c0]*/ +/*[clinic end generated code: output=628b9ab5e4c4fd36 input=15b8d8f89ccf3726]*/ { if (!self->reader) { PyErr_SetString(PyExc_ValueError, "Reader is closed"); @@ -1987,7 +2227,6 @@ _remote_debugging_zstd_available_impl(PyObject *module) * ============================================================================ */ /*[clinic input] -@permit_long_docstring_body _remote_debugging.get_child_pids pid: int @@ -1999,11 +2238,12 @@ _remote_debugging.get_child_pids Get all child process IDs of the given process. -Returns a list of child process IDs. Returns an empty list if no children -are found. +Returns a list of child process IDs. Returns an empty list if no +children are found. -This function provides a snapshot of child processes at a moment in time. -Child processes may exit or new ones may be created after the list is returned. +This function provides a snapshot of child processes at a moment in +time. Child processes may exit or new ones may be created after the +list is returned. Raises: OSError: If unable to enumerate processes @@ -2013,7 +2253,7 @@ Child processes may exit or new ones may be created after the list is returned. static PyObject * _remote_debugging_get_child_pids_impl(PyObject *module, int pid, int recursive) -/*[clinic end generated code: output=1ae2289c6b953e4b input=19d8d5d6e2b59e6e]*/ +/*[clinic end generated code: output=1ae2289c6b953e4b input=c6437b52e2fdd880]*/ { return enumerate_child_pids((pid_t)pid, recursive); } diff --git a/Modules/_remote_debugging/object_reading.c b/Modules/_remote_debugging/object_reading.c index b63b103a261..1cea96a2151 100644 --- a/Modules/_remote_debugging/object_reading.c +++ b/Modules/_remote_debugging/object_reading.c @@ -6,6 +6,7 @@ ******************************************************************************/ #include "_remote_debugging.h" +#include <limits.h> /* ============================================================================ * MEMORY READING FUNCTIONS @@ -264,26 +265,16 @@ read_py_long( Py_ssize_t inline_digits_space = SIZEOF_LONG_OBJ - ob_digit_offset; Py_ssize_t max_inline_digits = inline_digits_space / (Py_ssize_t)sizeof(digit); - // If the long object has inline digits that fit in our buffer, use them directly - digit *digits; + digit *digits = (digit *)PyMem_RawMalloc(size * sizeof(digit)); + if (!digits) { + PyErr_NoMemory(); + set_exception_cause(unwinder, PyExc_MemoryError, "Failed to allocate digits for PyLong"); + return -1; + } + if (size <= max_inline_digits && size <= _PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS) { - // For small integers, digits are inline in the long_value.ob_digit array - digits = (digit *)PyMem_RawMalloc(size * sizeof(digit)); - if (!digits) { - PyErr_NoMemory(); - set_exception_cause(unwinder, PyExc_MemoryError, "Failed to allocate digits for small PyLong"); - return -1; - } memcpy(digits, long_obj + ob_digit_offset, size * sizeof(digit)); } else { - // For larger integers, we need to read the digits separately - digits = (digit *)PyMem_RawMalloc(size * sizeof(digit)); - if (!digits) { - PyErr_NoMemory(); - set_exception_cause(unwinder, PyExc_MemoryError, "Failed to allocate digits for large PyLong"); - return -1; - } - bytes_read = _Py_RemoteDebug_PagedReadRemoteMemory( &unwinder->handle, address + (uintptr_t)unwinder->debug_offsets.long_object.ob_digit, @@ -296,19 +287,34 @@ read_py_long( } } - long long value = 0; + unsigned long limit = negative + ? (unsigned long)LONG_MAX + 1UL + : (unsigned long)LONG_MAX; + unsigned long value = 0; - // In theory this can overflow, but because of llvm/llvm-project#16778 - // we can't use __builtin_mul_overflow because it fails to link with - // __muloti4 on aarch64. In practice this is fine because all we're - // testing here are task numbers that would fit in a single byte. - for (Py_ssize_t i = 0; i < size; ++i) { - long long factor = digits[i] * (1UL << (Py_ssize_t)(shift * i)); - value += factor; + for (Py_ssize_t i = size; i-- > 0;) { + if (digits[i] >= PyLong_BASE) { + PyErr_Format(PyExc_RuntimeError, + "Invalid PyLong digit: %u (base %u)", digits[i], PyLong_BASE); + set_exception_cause(unwinder, PyExc_RuntimeError, + "Invalid PyLong digit (corrupted remote memory)"); + goto error; + } + if (value > ((limit - (unsigned long)digits[i]) >> shift)) { + PyErr_SetString(PyExc_OverflowError, + "Remote PyLong value does not fit in C long"); + set_exception_cause(unwinder, PyExc_OverflowError, + "Remote PyLong value is too large"); + goto error; + } + value = (value << shift) | (unsigned long)digits[i]; } PyMem_RawFree(digits); if (negative) { - value *= -1; + if (value == (unsigned long)LONG_MAX + 1UL) { + return LONG_MIN; + } + return -(long)value; } return (long)value; error: diff --git a/Modules/_remote_debugging/subprocess.c b/Modules/_remote_debugging/subprocess.c index 1b16dd8343f..cdad75e318b 100644 --- a/Modules/_remote_debugging/subprocess.c +++ b/Modules/_remote_debugging/subprocess.c @@ -223,8 +223,19 @@ get_child_pids_platform(pid_t target_pid, int recursive, pid_array_t *result) } /* Single pass: collect PIDs and their PPIDs together */ - struct dirent *entry; - while ((entry = readdir(proc_dir)) != NULL) { + for (;;) { + errno = 0; + struct dirent *entry = readdir(proc_dir); + if (entry == NULL) { + if (errno != 0) { + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, "/proc", + "Failed to read process directory '/proc': %s", + strerror(err)); + goto done; + } + break; + } /* Skip non-numeric entries (also skips . and ..) */ if (entry->d_name[0] < '1' || entry->d_name[0] > '9') { continue; @@ -245,7 +256,14 @@ get_child_pids_platform(pid_t target_pid, int recursive, pid_array_t *result) } } - closedir(proc_dir); + if (closedir(proc_dir) != 0) { + int err = errno; + proc_dir = NULL; + _set_debug_oserror_from_errno_with_filename(err, "/proc", + "Failed to close process directory '/proc': %s", + strerror(err)); + goto done; + } proc_dir = NULL; if (find_children_bfs(target_pid, recursive, @@ -358,7 +376,8 @@ get_child_pids_platform(pid_t target_pid, int recursive, pid_array_t *result) snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (snapshot == INVALID_HANDLE_VALUE) { - PyErr_SetFromWindowsErr(0); + DWORD error = GetLastError(); + PyErr_SetFromWindowsErr(error); goto done; } @@ -373,13 +392,23 @@ get_child_pids_platform(pid_t target_pid, int recursive, pid_array_t *result) /* Single pass: collect PIDs and PPIDs together */ PROCESSENTRY32 pe; pe.dwSize = sizeof(PROCESSENTRY32); - if (Process32First(snapshot, &pe)) { - do { - if (pid_array_append(&all_pids, (pid_t)pe.th32ProcessID) < 0 || - pid_array_append(&ppids, (pid_t)pe.th32ParentProcessID) < 0) { - goto done; - } - } while (Process32Next(snapshot, &pe)); + if (!Process32First(snapshot, &pe)) { + DWORD error = GetLastError(); + PyErr_SetFromWindowsErr(error); + goto done; + } + + do { + if (pid_array_append(&all_pids, (pid_t)pe.th32ProcessID) < 0 || + pid_array_append(&ppids, (pid_t)pe.th32ParentProcessID) < 0) { + goto done; + } + } while (Process32Next(snapshot, &pe)); + + DWORD error = GetLastError(); + if (error != ERROR_NO_MORE_FILES) { + PyErr_SetFromWindowsErr(error); + goto done; } CloseHandle(snapshot); diff --git a/Modules/_remote_debugging/threads.c b/Modules/_remote_debugging/threads.c index 4daa5e5f92b..81735e85395 100644 --- a/Modules/_remote_debugging/threads.c +++ b/Modules/_remote_debugging/threads.c @@ -289,28 +289,110 @@ typedef struct { unsigned int :24; } _thread_status; +static int +read_thread_state_and_maybe_frame( + RemoteUnwinderObject *unwinder, + uintptr_t tstate_addr, + size_t tstate_size, + char *tstate_buffer, + uintptr_t predicted_frame_addr, + char *frame_buffer, + int *frame_read) +{ + *frame_read = 0; + if (predicted_frame_addr != 0) { + _Py_RemoteReadSegment segments[2] = { + {tstate_addr, tstate_buffer, tstate_size}, + {predicted_frame_addr, frame_buffer, SIZEOF_INTERP_FRAME}, + }; + Py_ssize_t nread = _Py_RemoteDebug_BatchedReadRemoteMemory( + &unwinder->handle, segments, 2); + int completed = 0; + if (nread >= (Py_ssize_t)tstate_size) { + completed = 1; + if (nread == (Py_ssize_t)(tstate_size + SIZEOF_INTERP_FRAME)) { + completed = 2; + } + } + STATS_BATCHED_READ(unwinder, 2, completed); + if (completed >= 1) { + *frame_read = completed == 2; + return 0; + } + } + return _Py_RemoteDebug_ReadRemoteMemory( + &unwinder->handle, tstate_addr, tstate_size, tstate_buffer); +} + PyObject* unwind_stack_for_thread( RemoteUnwinderObject *unwinder, uintptr_t *current_tstate, uintptr_t gil_holder_tstate, uintptr_t gc_frame, - uintptr_t main_thread_tstate + uintptr_t main_thread_tstate, + const RemoteReadPrefetch *prefetch ) { PyObject *frame_info = NULL; PyObject *thread_id = NULL; PyObject *result = NULL; StackChunkList chunks = {0}; - char ts[SIZEOF_THREAD_STATE]; - int bytes_read = _Py_RemoteDebug_PagedReadRemoteMemory( - &unwinder->handle, *current_tstate, (size_t)unwinder->debug_offsets.thread_state.size, ts); - if (bytes_read < 0) { - set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to read thread state"); - goto error; + char local_ts[SIZEOF_THREAD_STATE]; + char local_prefetched_frame[SIZEOF_INTERP_FRAME]; + const char *ts; + RemoteReadPrefetch ctx_prefetch = {0}; + if (prefetch->tstate && prefetch->tstate_addr == *current_tstate) { + ts = prefetch->tstate; + if (prefetch->frame) { + ctx_prefetch.frame = prefetch->frame; + ctx_prefetch.frame_addr = prefetch->frame_addr; + } + } + else if (unwinder->cache_frames) { + uintptr_t predicted_frame_addr = 0; + int have_prefetched_frame = 0; + FrameCacheEntry *entry = frame_cache_find_by_tstate(unwinder, *current_tstate); + if (entry && entry->num_addrs > 0) { + predicted_frame_addr = entry->addrs[0]; + } + + int rc = read_thread_state_and_maybe_frame( + unwinder, + *current_tstate, + (size_t)unwinder->debug_offsets.thread_state.size, + local_ts, + predicted_frame_addr, + local_prefetched_frame, + &have_prefetched_frame); + if (rc < 0) { + set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to read thread state"); + goto error; + } + ts = local_ts; + if (have_prefetched_frame) { + ctx_prefetch.frame = local_prefetched_frame; + ctx_prefetch.frame_addr = predicted_frame_addr; + } + } + else { + int rc = _Py_RemoteDebug_ReadRemoteMemory( + &unwinder->handle, + *current_tstate, + (size_t)unwinder->debug_offsets.thread_state.size, + local_ts); + if (rc < 0) { + set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to read thread state"); + goto error; + } + ts = local_ts; } STATS_INC(unwinder, memory_reads); STATS_ADD(unwinder, memory_bytes_read, unwinder->debug_offsets.thread_state.size); + if (ctx_prefetch.frame) { + STATS_INC(unwinder, memory_reads); + STATS_ADD(unwinder, memory_bytes_read, SIZEOF_INTERP_FRAME); + } long tid = GET_MEMBER(long, ts, unwinder->debug_offsets.thread_state.native_thread_id); @@ -432,9 +514,11 @@ unwind_stack_for_thread( uintptr_t addrs[FRAME_CACHE_MAX_FRAMES]; FrameWalkContext ctx = { .frame_addr = frame_addr, + .thread_state_addr = *current_tstate, .base_frame_addr = base_frame_addr, .gc_frame = gc_frame, .chunks = &chunks, + .prefetch = ctx_prefetch, .frame_info = frame_info, .frame_addrs = addrs, .num_addrs = 0, @@ -469,10 +553,18 @@ unwind_stack_for_thread( *current_tstate = GET_MEMBER(uintptr_t, ts, unwinder->debug_offsets.thread_state.next); - thread_id = PyLong_FromLongLong(tid); + if (unwinder->cache_frames) { + FrameCacheEntry *entry = frame_cache_find(unwinder, (uint64_t)tid); + if (entry && entry->thread_id_obj) { + thread_id = Py_NewRef(entry->thread_id_obj); + } + } if (thread_id == NULL) { - set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to create thread ID"); - goto error; + thread_id = PyLong_FromLongLong(tid); + if (thread_id == NULL) { + set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to create thread ID"); + goto error; + } } RemoteDebuggingState *state = RemoteDebugging_GetStateFromObject((PyObject*)unwinder); @@ -568,8 +660,7 @@ read_thread_ids(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_ThreadsState *st DIR *dir = opendir(task_path); if (dir == NULL) { - st->tids = NULL; - st->count = 0; + _Py_RemoteDebug_InitThreadsState(unwinder, st); if (errno == ENOENT || errno == ESRCH) { PyErr_Format(PyExc_ProcessLookupError, "Process %d has terminated", unwinder->handle.pid); @@ -581,8 +672,21 @@ read_thread_ids(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_ThreadsState *st st->count = 0; - struct dirent *entry; - while ((entry = readdir(dir)) != NULL) { + for (;;) { + errno = 0; + struct dirent *entry = readdir(dir); + if (entry == NULL) { + if (errno != 0) { + int err = errno; + closedir(dir); + _Py_RemoteDebug_InitThreadsState(unwinder, st); + _set_debug_oserror_from_errno_with_filename(err, task_path, + "Failed to read process task directory '%s': %s", + task_path, strerror(err)); + return -1; + } + break; + } if (entry->d_name[0] < '1' || entry->d_name[0] > '9') { continue; } @@ -596,8 +700,7 @@ read_thread_ids(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_ThreadsState *st pid_t *new_tids = PyMem_RawRealloc(unwinder->thread_tids, new_cap * sizeof(pid_t)); if (new_tids == NULL) { closedir(dir); - st->tids = NULL; - st->count = 0; + _Py_RemoteDebug_InitThreadsState(unwinder, st); PyErr_NoMemory(); return -1; } @@ -607,8 +710,15 @@ read_thread_ids(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_ThreadsState *st unwinder->thread_tids[st->count++] = (pid_t)tid; } + if (closedir(dir) != 0) { + int err = errno; + _Py_RemoteDebug_InitThreadsState(unwinder, st); + _set_debug_oserror_from_errno_with_filename(err, task_path, + "Failed to close process task directory '%s': %s", + task_path, strerror(err)); + return -1; + } st->tids = unwinder->thread_tids; - closedir(dir); return 0; } @@ -621,28 +731,30 @@ detach_threads(_Py_RemoteDebug_ThreadsState *st, size_t up_to) } static int -seize_thread(pid_t tid) +seize_thread(pid_t tid, int *err) { if (ptrace(PTRACE_SEIZE, tid, NULL, 0) == 0) { return 0; } - if (errno == ESRCH) { + *err = errno; + if (*err == ESRCH) { return 1; // Thread gone, skip } - if (errno == EPERM) { + if (*err == EPERM) { // Thread may have exited, be in a special state, or already be traced. // Skip rather than fail - this avoids endless retry loops when // threads transiently become inaccessible. return 1; } - if (errno == EINVAL || errno == EIO) { + if (*err == EINVAL || *err == EIO) { // Fallback for older kernels if (ptrace(PTRACE_ATTACH, tid, NULL, NULL) == 0) { int status; waitpid(tid, &status, __WALL); return 0; } - if (errno == ESRCH || errno == EPERM) { + *err = errno; + if (*err == ESRCH || *err == EPERM) { return 1; // Thread gone or inaccessible } } @@ -656,39 +768,50 @@ _Py_RemoteDebug_StopAllThreads(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_T return -1; } - for (size_t i = 0; i < st->count; i++) { + size_t n_tids = st->count; + size_t seized = 0; + for (size_t i = 0; i < n_tids; i++) { pid_t tid = st->tids[i]; - int ret = seize_thread(tid); + int err = 0; + int ret = seize_thread(tid, &err); if (ret == 1) { continue; // Thread gone, skip } if (ret < 0) { - detach_threads(st, i); - PyErr_Format(PyExc_RuntimeError, "Failed to seize thread %d: %s", tid, strerror(errno)); - st->tids = NULL; - st->count = 0; + detach_threads(st, seized); + _set_debug_oserror_from_errno(err, + "Failed to seize thread %d: %s", tid, strerror(err)); + _Py_RemoteDebug_InitThreadsState(unwinder, st); return -1; } - - if (ptrace(PTRACE_INTERRUPT, tid, NULL, NULL) == -1 && errno != ESRCH) { - detach_threads(st, i + 1); - PyErr_Format(PyExc_RuntimeError, "Failed to interrupt thread %d: %s", tid, strerror(errno)); - st->tids = NULL; - st->count = 0; - return -1; + st->tids[seized++] = tid; + + if (ptrace(PTRACE_INTERRUPT, tid, NULL, NULL) == -1) { + err = errno; + if (err != ESRCH) { + detach_threads(st, seized); + _set_debug_oserror_from_errno(err, + "Failed to interrupt thread %d: %s", tid, strerror(err)); + _Py_RemoteDebug_InitThreadsState(unwinder, st); + return -1; + } } int status; - if (waitpid(tid, &status, __WALL) == -1 && errno != ECHILD && errno != ESRCH) { - detach_threads(st, i + 1); - PyErr_Format(PyExc_RuntimeError, "waitpid failed for thread %d: %s", tid, strerror(errno)); - st->tids = NULL; - st->count = 0; - return -1; + if (waitpid(tid, &status, __WALL) == -1) { + err = errno; + if (err != ECHILD && err != ESRCH) { + detach_threads(st, seized); + _set_debug_oserror_from_errno(err, + "waitpid failed for thread %d: %s", tid, strerror(err)); + _Py_RemoteDebug_InitThreadsState(unwinder, st); + return -1; + } } } + st->count = seized; return 0; } diff --git a/Modules/_sqlite/blob.c b/Modules/_sqlite/blob.c index 8dad9455623..2cc62751054 100644 --- a/Modules/_sqlite/blob.c +++ b/Modules/_sqlite/blob.c @@ -166,7 +166,6 @@ read_multiple(pysqlite_Blob *self, Py_ssize_t length, Py_ssize_t offset) /*[clinic input] -@permit_long_docstring_body _sqlite3.Blob.read as blob_read length: int = -1 @@ -175,14 +174,14 @@ _sqlite3.Blob.read as blob_read Read data at the current offset position. -If the end of the blob is reached, the data up to end of file will be returned. -When length is not specified, or is negative, Blob.read() will read until the -end of the blob. +If the end of the blob is reached, the data up to end of file will +be returned. When length is not specified, or is negative, +Blob.read() will read until the end of the blob. [clinic start generated code]*/ static PyObject * blob_read_impl(pysqlite_Blob *self, int length) -/*[clinic end generated code: output=1fc99b2541360dde input=e5715bcddbcfca5a]*/ +/*[clinic end generated code: output=1fc99b2541360dde input=6b745ad37720e556]*/ { if (!check_blob(self)) { return NULL; @@ -235,7 +234,6 @@ inner_write(pysqlite_Blob *self, const void *buf, Py_ssize_t len, /*[clinic input] -@permit_long_docstring_body _sqlite3.Blob.write as blob_write data: Py_buffer @@ -243,13 +241,13 @@ _sqlite3.Blob.write as blob_write Write data at the current offset. -This function cannot change the blob length. Writing beyond the end of the -blob will result in an exception being raised. +This function cannot change the blob length. Writing beyond the end +of the blob will result in an exception being raised. [clinic start generated code]*/ static PyObject * blob_write_impl(pysqlite_Blob *self, Py_buffer *data) -/*[clinic end generated code: output=b34cf22601b570b2 input=203d3458f244814b]*/ +/*[clinic end generated code: output=b34cf22601b570b2 input=0d372cb0240a5d49]*/ { if (!check_blob(self)) { return NULL; @@ -265,7 +263,6 @@ blob_write_impl(pysqlite_Blob *self, Py_buffer *data) /*[clinic input] -@permit_long_docstring_body _sqlite3.Blob.seek as blob_seek offset: int @@ -274,14 +271,15 @@ _sqlite3.Blob.seek as blob_seek Set the current access position to offset. -The origin argument defaults to os.SEEK_SET (absolute blob positioning). -Other values for origin are os.SEEK_CUR (seek relative to the current position) -and os.SEEK_END (seek relative to the blob's end). +The origin argument defaults to os.SEEK_SET (absolute blob +positioning). Other values for origin are os.SEEK_CUR (seek +relative to the current position) and os.SEEK_END (seek relative to +the blob's end). [clinic start generated code]*/ static PyObject * blob_seek_impl(pysqlite_Blob *self, int offset, int origin) -/*[clinic end generated code: output=854c5a0e208547a5 input=ee4d88e1dc0b1048]*/ +/*[clinic end generated code: output=854c5a0e208547a5 input=84aea1b6b48607dd]*/ { if (!check_blob(self)) { return NULL; diff --git a/Modules/_sqlite/clinic/blob.c.h b/Modules/_sqlite/clinic/blob.c.h index 921e7cbd7ff..929703257f0 100644 --- a/Modules/_sqlite/clinic/blob.c.h +++ b/Modules/_sqlite/clinic/blob.c.h @@ -31,9 +31,9 @@ PyDoc_STRVAR(blob_read__doc__, " length\n" " Read length in bytes.\n" "\n" -"If the end of the blob is reached, the data up to end of file will be returned.\n" -"When length is not specified, or is negative, Blob.read() will read until the\n" -"end of the blob."); +"If the end of the blob is reached, the data up to end of file will\n" +"be returned. When length is not specified, or is negative,\n" +"Blob.read() will read until the end of the blob."); #define BLOB_READ_METHODDEF \ {"read", _PyCFunction_CAST(blob_read), METH_FASTCALL, blob_read__doc__}, @@ -70,8 +70,8 @@ PyDoc_STRVAR(blob_write__doc__, "\n" "Write data at the current offset.\n" "\n" -"This function cannot change the blob length. Writing beyond the end of the\n" -"blob will result in an exception being raised."); +"This function cannot change the blob length. Writing beyond the end\n" +"of the blob will result in an exception being raised."); #define BLOB_WRITE_METHODDEF \ {"write", (PyCFunction)blob_write, METH_O, blob_write__doc__}, @@ -105,9 +105,10 @@ PyDoc_STRVAR(blob_seek__doc__, "\n" "Set the current access position to offset.\n" "\n" -"The origin argument defaults to os.SEEK_SET (absolute blob positioning).\n" -"Other values for origin are os.SEEK_CUR (seek relative to the current position)\n" -"and os.SEEK_END (seek relative to the blob\'s end)."); +"The origin argument defaults to os.SEEK_SET (absolute blob\n" +"positioning). Other values for origin are os.SEEK_CUR (seek\n" +"relative to the current position) and os.SEEK_END (seek relative to\n" +"the blob\'s end)."); #define BLOB_SEEK_METHODDEF \ {"seek", _PyCFunction_CAST(blob_seek), METH_FASTCALL, blob_seek__doc__}, @@ -211,4 +212,4 @@ blob_exit(PyObject *self, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=f03f4ba622b67ae0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b0e3d38063739b17 input=a9049054013a1b77]*/ diff --git a/Modules/_sqlite/clinic/connection.c.h b/Modules/_sqlite/clinic/connection.c.h index abb864eb030..b645bf3464b 100644 --- a/Modules/_sqlite/clinic/connection.c.h +++ b/Modules/_sqlite/clinic/connection.c.h @@ -685,13 +685,14 @@ PyDoc_STRVAR(pysqlite_connection_set_progress_handler__doc__, "\n" " progress_handler\n" " A callable that takes no arguments.\n" -" If the callable returns non-zero, the current query is terminated,\n" -" and an exception is raised.\n" +" If the callable returns non-zero, the current query is\n" +" terminated, and an exception is raised.\n" " n\n" " The number of SQLite virtual machine instructions that are\n" " executed between invocations of \'progress_handler\'.\n" "\n" -"If \'progress_handler\' is None or \'n\' is 0, the progress handler is disabled."); +"If \'progress_handler\' is None or \'n\' is 0, the progress handler is\n" +"disabled."); #define PYSQLITE_CONNECTION_SET_PROGRESS_HANDLER_METHODDEF \ {"set_progress_handler", _PyCFunction_CAST(pysqlite_connection_set_progress_handler), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_set_progress_handler__doc__}, @@ -1303,10 +1304,10 @@ PyDoc_STRVAR(serialize__doc__, " name\n" " Which database to serialize.\n" "\n" -"For an ordinary on-disk database file, the serialization is just a copy of the\n" -"disk file. For an in-memory database or a \"temp\" database, the serialization is\n" -"the same sequence of bytes which would be written to disk if that database\n" -"were backed up to disk."); +"For an ordinary on-disk database file, the serialization is just\n" +"a copy of the disk file. For an in-memory database or a \"temp\"\n" +"database, the serialization is the same sequence of bytes which\n" +"would be written to disk if that database were backed up to disk."); #define SERIALIZE_METHODDEF \ {"serialize", _PyCFunction_CAST(serialize), METH_FASTCALL|METH_KEYWORDS, serialize__doc__}, @@ -1392,12 +1393,13 @@ PyDoc_STRVAR(deserialize__doc__, " name\n" " Which database to reopen with the deserialization.\n" "\n" -"The deserialize interface causes the database connection to disconnect from the\n" -"target database, and then reopen it as an in-memory database based on the given\n" -"serialized data.\n" +"The deserialize interface causes the database connection to\n" +"disconnect from the target database, and then reopen it as\n" +"an in-memory database based on the given serialized data.\n" "\n" -"The deserialize interface will fail with SQLITE_BUSY if the database is\n" -"currently in a read transaction or is involved in a backup operation."); +"The deserialize interface will fail with SQLITE_BUSY if the database\n" +"is currently in a read transaction or is involved in a backup\n" +"operation."); #define DESERIALIZE_METHODDEF \ {"deserialize", _PyCFunction_CAST(deserialize), METH_FASTCALL|METH_KEYWORDS, deserialize__doc__}, @@ -1518,7 +1520,8 @@ PyDoc_STRVAR(pysqlite_connection_exit__doc__, "\n" "Called when the connection is used as a context manager.\n" "\n" -"If there was any exception, a rollback takes place; otherwise we commit."); +"If there was any exception, a rollback takes place; otherwise we\n" +"commit."); #define PYSQLITE_CONNECTION_EXIT_METHODDEF \ {"__exit__", _PyCFunction_CAST(pysqlite_connection_exit), METH_FASTCALL, pysqlite_connection_exit__doc__}, @@ -1556,12 +1559,12 @@ PyDoc_STRVAR(setlimit__doc__, " category\n" " The limit category to be set.\n" " limit\n" -" The new limit. If the new limit is a negative number, the limit is\n" -" unchanged.\n" +" The new limit. If the new limit is a negative number, the limit\n" +" is unchanged.\n" "\n" -"Attempts to increase a limit above its hard upper bound are silently truncated\n" -"to the hard upper bound. Regardless of whether or not the limit was changed,\n" -"the prior value of the limit is returned."); +"Attempts to increase a limit above its hard upper bound are silently\n" +"truncated to the hard upper bound. Regardless of whether or not the\n" +"limit was changed, the prior value of the limit is returned."); #define SETLIMIT_METHODDEF \ {"setlimit", _PyCFunction_CAST(setlimit), METH_FASTCALL, setlimit__doc__}, @@ -1722,4 +1725,4 @@ getconfig(PyObject *self, PyObject *arg) #ifndef DESERIALIZE_METHODDEF #define DESERIALIZE_METHODDEF #endif /* !defined(DESERIALIZE_METHODDEF) */ -/*[clinic end generated code: output=16d44c1d8a45e622 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1418b72751ef68fc input=a9049054013a1b77]*/ diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index bd44ff31b87..892740b05e5 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -557,6 +557,47 @@ pysqlite_connection_cursor_impl(pysqlite_Connection *self, PyObject *factory) return cursor; } +static PyObject * +connection_get_row_factory(PyObject *op, void *closure) +{ + pysqlite_Connection *self = (pysqlite_Connection *)op; + return Py_NewRef(self->row_factory); +} + +static int +connection_set_row_factory(PyObject *op, PyObject *value, void *closure) +{ + pysqlite_Connection *self = (pysqlite_Connection *)op; + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, + "cannot delete row_factory attribute"); + return -1; + } + Py_XSETREF(self->row_factory, Py_NewRef(value)); + return 0; +} + +static PyObject * +connection_get_text_factory(PyObject *op, void *closure) +{ + pysqlite_Connection *self = (pysqlite_Connection *)op; + return Py_NewRef(self->text_factory); +} + +static int +connection_set_text_factory(PyObject *op, PyObject *value, void *closure) +{ + pysqlite_Connection *self = (pysqlite_Connection *)op; + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, + "cannot delete text_factory attribute"); + return -1; + } + Py_XSETREF(self->text_factory, Py_NewRef(value)); + return 0; +} + + /*[clinic input] _sqlite3.Connection.blobopen as blobopen @@ -1561,14 +1602,13 @@ pysqlite_connection_set_authorizer_impl(pysqlite_Connection *self, } /*[clinic input] -@permit_long_docstring_body _sqlite3.Connection.set_progress_handler as pysqlite_connection_set_progress_handler cls: defining_class progress_handler as callable: object A callable that takes no arguments. - If the callable returns non-zero, the current query is terminated, - and an exception is raised. + If the callable returns non-zero, the current query is + terminated, and an exception is raised. / n: int The number of SQLite virtual machine instructions that are @@ -1576,14 +1616,15 @@ _sqlite3.Connection.set_progress_handler as pysqlite_connection_set_progress_han Set progress handler callback. -If 'progress_handler' is None or 'n' is 0, the progress handler is disabled. +If 'progress_handler' is None or 'n' is 0, the progress handler is +disabled. [clinic start generated code]*/ static PyObject * pysqlite_connection_set_progress_handler_impl(pysqlite_Connection *self, PyTypeObject *cls, PyObject *callable, int n) -/*[clinic end generated code: output=0739957fd8034a50 input=3ecce6c915922ad4]*/ +/*[clinic end generated code: output=0739957fd8034a50 input=fd0d5abb004f370f]*/ { if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { return NULL; @@ -1606,6 +1647,7 @@ pysqlite_connection_set_progress_handler_impl(pysqlite_Connection *self, } /*[clinic input] +@permit_long_summary _sqlite3.Connection.set_trace_callback as pysqlite_connection_set_trace_callback cls: defining_class @@ -1619,7 +1661,7 @@ static PyObject * pysqlite_connection_set_trace_callback_impl(pysqlite_Connection *self, PyTypeObject *cls, PyObject *callable) -/*[clinic end generated code: output=d91048c03bfcee05 input=f4f59bf2f87f2026]*/ +/*[clinic end generated code: output=d91048c03bfcee05 input=edfd7d890200a9cb]*/ { if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { return NULL; @@ -2212,7 +2254,6 @@ pysqlite_connection_create_collation_impl(pysqlite_Connection *self, #ifdef PY_SQLITE_HAVE_SERIALIZE /*[clinic input] -@permit_long_docstring_body _sqlite3.Connection.serialize as serialize * @@ -2221,15 +2262,15 @@ _sqlite3.Connection.serialize as serialize Serialize a database into a byte string. -For an ordinary on-disk database file, the serialization is just a copy of the -disk file. For an in-memory database or a "temp" database, the serialization is -the same sequence of bytes which would be written to disk if that database -were backed up to disk. +For an ordinary on-disk database file, the serialization is just +a copy of the disk file. For an in-memory database or a "temp" +database, the serialization is the same sequence of bytes which +would be written to disk if that database were backed up to disk. [clinic start generated code]*/ static PyObject * serialize_impl(pysqlite_Connection *self, const char *name) -/*[clinic end generated code: output=97342b0e55239dd3 input=963e617cdf75c747]*/ +/*[clinic end generated code: output=97342b0e55239dd3 input=7e48654e8e082fa8]*/ { if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { return NULL; @@ -2263,7 +2304,6 @@ serialize_impl(pysqlite_Connection *self, const char *name) } /*[clinic input] -@permit_long_docstring_body _sqlite3.Connection.deserialize as deserialize data: Py_buffer(accept={buffer, str}) @@ -2275,18 +2315,19 @@ _sqlite3.Connection.deserialize as deserialize Load a serialized database. -The deserialize interface causes the database connection to disconnect from the -target database, and then reopen it as an in-memory database based on the given -serialized data. +The deserialize interface causes the database connection to +disconnect from the target database, and then reopen it as +an in-memory database based on the given serialized data. -The deserialize interface will fail with SQLITE_BUSY if the database is -currently in a read transaction or is involved in a backup operation. +The deserialize interface will fail with SQLITE_BUSY if the database +is currently in a read transaction or is involved in a backup +operation. [clinic start generated code]*/ static PyObject * deserialize_impl(pysqlite_Connection *self, Py_buffer *data, const char *name) -/*[clinic end generated code: output=e394c798b98bad89 input=037e94599aaa5b5c]*/ +/*[clinic end generated code: output=e394c798b98bad89 input=5d20e028d98c0686]*/ { if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { return NULL; @@ -2359,13 +2400,14 @@ _sqlite3.Connection.__exit__ as pysqlite_connection_exit Called when the connection is used as a context manager. -If there was any exception, a rollback takes place; otherwise we commit. +If there was any exception, a rollback takes place; otherwise we +commit. [clinic start generated code]*/ static PyObject * pysqlite_connection_exit_impl(pysqlite_Connection *self, PyObject *exc_type, PyObject *exc_value, PyObject *exc_tb) -/*[clinic end generated code: output=0705200e9321202a input=bd66f1532c9c54a7]*/ +/*[clinic end generated code: output=0705200e9321202a input=8fdb0392ee6f3466]*/ { int commit = 0; PyObject* result; @@ -2400,26 +2442,25 @@ pysqlite_connection_exit_impl(pysqlite_Connection *self, PyObject *exc_type, } /*[clinic input] -@permit_long_docstring_body _sqlite3.Connection.setlimit as setlimit category: int The limit category to be set. limit: int - The new limit. If the new limit is a negative number, the limit is - unchanged. + The new limit. If the new limit is a negative number, the limit + is unchanged. / Set connection run-time limits. -Attempts to increase a limit above its hard upper bound are silently truncated -to the hard upper bound. Regardless of whether or not the limit was changed, -the prior value of the limit is returned. +Attempts to increase a limit above its hard upper bound are silently +truncated to the hard upper bound. Regardless of whether or not the +limit was changed, the prior value of the limit is returned. [clinic start generated code]*/ static PyObject * setlimit_impl(pysqlite_Connection *self, int category, int limit) -/*[clinic end generated code: output=0d208213f8d68ccd input=bf06e06a21eb37e2]*/ +/*[clinic end generated code: output=0d208213f8d68ccd input=5c2e430091206677]*/ { if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { return NULL; @@ -2620,6 +2661,10 @@ static PyGetSetDef connection_getset[] = { {"in_transaction", pysqlite_connection_get_in_transaction, NULL}, {"autocommit", get_autocommit, set_autocommit}, {"__text_signature__", get_sig, NULL}, + {"row_factory", connection_get_row_factory, + connection_set_row_factory}, + {"text_factory", connection_get_text_factory, + connection_set_text_factory}, {NULL} }; @@ -2667,8 +2712,6 @@ static struct PyMemberDef connection_members[] = {"InternalError", _Py_T_OBJECT, offsetof(pysqlite_Connection, InternalError), Py_READONLY}, {"ProgrammingError", _Py_T_OBJECT, offsetof(pysqlite_Connection, ProgrammingError), Py_READONLY}, {"NotSupportedError", _Py_T_OBJECT, offsetof(pysqlite_Connection, NotSupportedError), Py_READONLY}, - {"row_factory", _Py_T_OBJECT, offsetof(pysqlite_Connection, row_factory)}, - {"text_factory", _Py_T_OBJECT, offsetof(pysqlite_Connection, text_factory)}, {NULL} }; diff --git a/Modules/_sre/sre.c b/Modules/_sre/sre.c index 044eb6e5f1f..ee6cb4a371e 100644 --- a/Modules/_sre/sre.c +++ b/Modules/_sre/sre.c @@ -548,10 +548,16 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string, memset(state, 0, sizeof(SRE_STATE)); - state->mark = PyMem_New(const void *, pattern->groups * 2); - if (!state->mark) { - PyErr_NoMemory(); - goto err; + /* Patterns with no capturing groups never emit MARK opcodes and never + read state->mark (group 0's span comes from state->start/ptr), so skip + the allocation entirely -- state->mark stays NULL, which both the err + path and state_fini already free safely. */ + if (pattern->groups) { + state->mark = PyMem_New(const void *, pattern->groups * 2); + if (!state->mark) { + PyErr_NoMemory(); + goto err; + } } state->lastmark = -1; state->lastindex = -1; @@ -2587,6 +2593,7 @@ _pair(Py_ssize_t i1, Py_ssize_t i2) } /*[clinic input] +@permit_long_summary _sre.SRE_Match.span group: object(c_default="NULL") = 0 @@ -2597,7 +2604,7 @@ For match object m, return the 2-tuple (m.start(group), m.end(group)). static PyObject * _sre_SRE_Match_span_impl(MatchObject *self, PyObject *group) -/*[clinic end generated code: output=f02ae40594d14fe6 input=8fa6014e982d71d4]*/ +/*[clinic end generated code: output=f02ae40594d14fe6 input=834cfe444f0f55cf]*/ { Py_ssize_t index = match_getindex(self, group); @@ -3179,7 +3186,7 @@ static PyMethodDef pattern_methods[] = { _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF _SRE_SRE_PATTERN__FAIL_AFTER_METHODDEF {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, - PyDoc_STR("See PEP 585")}, + PyDoc_STR("Patterns are generic over the type of string they handle (str or bytes)")}, {NULL, NULL} }; @@ -3235,7 +3242,7 @@ static PyMethodDef match_methods[] = { _SRE_SRE_MATCH___COPY___METHODDEF _SRE_SRE_MATCH___DEEPCOPY___METHODDEF {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, - PyDoc_STR("See PEP 585")}, + PyDoc_STR("Matches are generic over the type of string which was matched (str or bytes)")}, {NULL, NULL} }; diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 3224ca7d0f9..f451c0ce736 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -26,6 +26,7 @@ #define OPENSSL_NO_DEPRECATED 1 #include "Python.h" +#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION() #include "pycore_fileutils.h" // _PyIsSelectable_fd() #include "pycore_long.h" // _PyLong_UnsignedLongLong_Converter() #include "pycore_pyerrors.h" // _PyErr_ChainExceptions1() @@ -2357,27 +2358,26 @@ _ssl__SSLSocket_compression_impl(PySSLSocket *self) } /*[clinic input] -@permit_long_docstring_body @critical_section @getter _ssl._SSLSocket.context This changes the context associated with the SSLSocket. -This is typically used from within a callback function set by the sni_callback -on the SSLContext to change the certificate information associated with the -SSLSocket before the cryptographic exchange handshake messages. +This is typically used from within a callback function set by the +sni_callback on the SSLContext to change the certificate information +associated with the SSLSocket before the cryptographic exchange +handshake messages. [clinic start generated code]*/ static PyObject * _ssl__SSLSocket_context_get_impl(PySSLSocket *self) -/*[clinic end generated code: output=d23e82f72f32e3d7 input=0cc8e773a079295e]*/ +/*[clinic end generated code: output=d23e82f72f32e3d7 input=b845dea1f9710ebe]*/ { return Py_NewRef(self->ctx); } /*[clinic input] -@permit_long_docstring_body @critical_section @setter _ssl._SSLSocket.context @@ -2385,7 +2385,7 @@ _ssl._SSLSocket.context static int _ssl__SSLSocket_context_set_impl(PySSLSocket *self, PyObject *value) -/*[clinic end generated code: output=6b0a6cc5cf33d9fe input=f7fc1674b660df96]*/ +/*[clinic end generated code: output=6b0a6cc5cf33d9fe input=48ece77724fd9dd4]*/ { if (PyObject_TypeCheck(value, self->ctx->state->PySSLContext_Type)) { Py_SETREF(self->ctx, (PySSLContext *)Py_NewRef(value)); @@ -2635,7 +2635,6 @@ _ssl__SSLSocket_uses_ktls_for_recv_impl(PySSLSocket *self) #ifdef BIO_get_ktls_send /*[clinic input] @permit_long_summary -@permit_long_docstring_body @critical_section _ssl._SSLSocket.sendfile fd: int @@ -2646,9 +2645,9 @@ _ssl._SSLSocket.sendfile Write size bytes from offset in the file descriptor fd to the SSL connection. -This method uses the zero-copy technique and returns the number of bytes -written. It should be called only when Kernel TLS is used for sending data in -the connection. +This method uses the zero-copy technique and returns the number of +bytes written. It should be called only when Kernel TLS is used for +sending data in the connection. The meaning of flags is platform dependent. [clinic start generated code]*/ @@ -2656,7 +2655,7 @@ The meaning of flags is platform dependent. static PyObject * _ssl__SSLSocket_sendfile_impl(PySSLSocket *self, int fd, Py_off_t offset, size_t size, int flags) -/*[clinic end generated code: output=0c6815b0719ca8d5 input=1f193e681bbae664]*/ +/*[clinic end generated code: output=0c6815b0719ca8d5 input=68c7fbf90c9a8a1b]*/ { Py_ssize_t retval; int sockstate; @@ -3175,22 +3174,22 @@ _ssl__SSLSocket_shutdown_impl(PySSLSocket *self) } /*[clinic input] -@permit_long_docstring_body @critical_section _ssl._SSLSocket.get_channel_binding cb_type: str = "tls-unique" Get channel binding data for current connection. -Raise ValueError if the requested `cb_type` is not supported. Return bytes -of the data or None if the data is not available (e.g. before the handshake). +Raise ValueError if the requested `cb_type` is not supported. +Return bytes of the data or None if the data is not available (e.g. +before the handshake). Only 'tls-unique' channel binding data from RFC 5929 is supported. [clinic start generated code]*/ static PyObject * _ssl__SSLSocket_get_channel_binding_impl(PySSLSocket *self, const char *cb_type) -/*[clinic end generated code: output=34bac9acb6a61d31 input=26fad522435ecca1]*/ +/*[clinic end generated code: output=34bac9acb6a61d31 input=bed81ef7936535a0]*/ { char buf[PySSL_CB_MAXLEN]; size_t len; @@ -5153,12 +5152,15 @@ _servername_callback(SSL *s, int *al, void *args) PyObject *result; /* The high-level ssl.SSLSocket object */ PyObject *ssl_socket; + PyObject *sni_cb; const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); PyGILState_STATE gstate = PyGILState_Ensure(); - if (sslctx->set_sni_cb == NULL) { - /* remove race condition in this the call back while if removing the - * callback is in progress */ + Py_BEGIN_CRITICAL_SECTION(sslctx); + sni_cb = Py_XNewRef(sslctx->set_sni_cb); + Py_END_CRITICAL_SECTION(); + + if (sni_cb == NULL) { PyGILState_Release(gstate); return SSL_TLSEXT_ERR_OK; } @@ -5185,7 +5187,7 @@ _servername_callback(SSL *s, int *al, void *args) goto error; if (servername == NULL) { - result = PyObject_CallFunctionObjArgs(sslctx->set_sni_cb, ssl_socket, + result = PyObject_CallFunctionObjArgs(sni_cb, ssl_socket, Py_None, sslctx, NULL); } else { @@ -5212,7 +5214,7 @@ _servername_callback(SSL *s, int *al, void *args) } Py_DECREF(servername_bytes); result = PyObject_CallFunctionObjArgs( - sslctx->set_sni_cb, ssl_socket, servername_str, + sni_cb, ssl_socket, servername_str, sslctx, NULL); Py_DECREF(servername_str); } @@ -5222,7 +5224,7 @@ _servername_callback(SSL *s, int *al, void *args) PyErr_FormatUnraisable("Exception ignored " "in ssl servername callback " "while calling set SNI callback %R", - sslctx->set_sni_cb); + sni_cb); *al = SSL_AD_HANDSHAKE_FAILURE; ret = SSL_TLSEXT_ERR_ALERT_FATAL; } @@ -5247,11 +5249,13 @@ _servername_callback(SSL *s, int *al, void *args) Py_DECREF(result); } + Py_DECREF(sni_cb); PyGILState_Release(gstate); return ret; error: Py_XDECREF(ssl_socket); + Py_XDECREF(sni_cb); *al = SSL_AD_INTERNAL_ERROR; ret = SSL_TLSEXT_ERR_ALERT_FATAL; PyGILState_Release(gstate); @@ -5260,22 +5264,22 @@ _servername_callback(SSL *s, int *al, void *args) /*[clinic input] @permit_long_summary -@permit_long_docstring_body @critical_section @getter _ssl._SSLContext.sni_callback Set a callback that will be called when a server name is provided by the SSL/TLS client in the SNI extension. -If the argument is None then the callback is disabled. The method is called -with the SSLSocket, the server name as a string, and the SSLContext object. +If the argument is None then the callback is disabled. The method +is called with the SSLSocket, the server name as a string, and the +SSLContext object. See RFC 6066 for details of the SNI extension. [clinic start generated code]*/ static PyObject * _ssl__SSLContext_sni_callback_get_impl(PySSLContext *self) -/*[clinic end generated code: output=961e6575cdfaf036 input=3aee06696b0874d9]*/ +/*[clinic end generated code: output=961e6575cdfaf036 input=a319bc8fc15d6fc8]*/ { PyObject *cb = self->set_sni_cb; if (cb == NULL) { @@ -5286,7 +5290,6 @@ _ssl__SSLContext_sni_callback_get_impl(PySSLContext *self) /*[clinic input] @permit_long_summary -@permit_long_docstring_body @critical_section @setter _ssl._SSLContext.sni_callback @@ -5294,27 +5297,25 @@ _ssl._SSLContext.sni_callback static int _ssl__SSLContext_sni_callback_set_impl(PySSLContext *self, PyObject *value) -/*[clinic end generated code: output=b32736c6b891f61a input=332def1d8c81d549]*/ +/*[clinic end generated code: output=b32736c6b891f61a input=402b43fb06c1139e]*/ { if (self->protocol == PY_SSL_VERSION_TLS_CLIENT) { PyErr_SetString(PyExc_ValueError, "sni_callback cannot be set on TLS_CLIENT context"); return -1; } - Py_CLEAR(self->set_sni_cb); - if (value == Py_None) { + if (!PyCallable_Check(value)) { SSL_CTX_set_tlsext_servername_callback(self->ctx, NULL); - } - else { - if (!PyCallable_Check(value)) { - SSL_CTX_set_tlsext_servername_callback(self->ctx, NULL); - PyErr_SetString(PyExc_TypeError, - "not a callable object"); + Py_CLEAR(self->set_sni_cb); + if (value != Py_None) { + PyErr_SetString(PyExc_TypeError, "not a callable object"); return -1; } - self->set_sni_cb = Py_NewRef(value); - SSL_CTX_set_tlsext_servername_callback(self->ctx, _servername_callback); + } + else { + Py_XSETREF(self->set_sni_cb, Py_NewRef(value)); SSL_CTX_set_tlsext_servername_arg(self->ctx, self); + SSL_CTX_set_tlsext_servername_callback(self->ctx, _servername_callback); } return 0; } @@ -5369,16 +5370,16 @@ _ssl._SSLContext.cert_store_stats Returns quantities of loaded X.509 certificates. -X.509 certificates with a CA extension and certificate revocation lists -inside the context's cert store. +X.509 certificates with a CA extension and certificate revocation +lists inside the context's cert store. -NOTE: Certificates in a capath directory aren't loaded unless they have -been used at least once. +NOTE: Certificates in a capath directory aren't loaded unless they +have been used at least once. [clinic start generated code]*/ static PyObject * _ssl__SSLContext_cert_store_stats_impl(PySSLContext *self) -/*[clinic end generated code: output=5f356f4d9cca874d input=d13c6e3f2b48539b]*/ +/*[clinic end generated code: output=5f356f4d9cca874d input=9e5094e094b892a3]*/ { X509_STORE *store; STACK_OF(X509_OBJECT) *objs; @@ -5421,16 +5422,16 @@ _ssl._SSLContext.get_ca_certs Returns a list of dicts with information of loaded CA certs. -If the optional argument is True, returns a DER-encoded copy of the CA -certificate. +If the optional argument is True, returns a DER-encoded copy of the +CA certificate. -NOTE: Certificates in a capath directory aren't loaded unless they have -been used at least once. +NOTE: Certificates in a capath directory aren't loaded unless they +have been used at least once. [clinic start generated code]*/ static PyObject * _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form) -/*[clinic end generated code: output=0d58f148f37e2938 input=eb0592909c9ad6e7]*/ +/*[clinic end generated code: output=0d58f148f37e2938 input=9f71af5aa4e67076]*/ { X509_STORE *store; STACK_OF(X509_OBJECT) *objs; @@ -6319,13 +6320,13 @@ _ssl.RAND_status Returns True if the OpenSSL PRNG has been seeded with enough data and False if not. -It is necessary to seed the PRNG with RAND_add() on some platforms before -using the ssl() function. +It is necessary to seed the PRNG with RAND_add() on some platforms +before using the ssl() function. [clinic start generated code]*/ static PyObject * _ssl_RAND_status_impl(PyObject *module) -/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=aba24a3f3af3b184]*/ +/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=52b061f4a24ff3a1]*/ { return PyBool_FromLong(RAND_status()); } @@ -6621,16 +6622,16 @@ _ssl.enum_certificates Retrieve certificates from Windows' cert store. -store_name may be one of 'CA', 'ROOT' or 'MY'. The system may provide -more cert storages, too. The function returns a list of (bytes, -encoding_type, trust) tuples. The encoding_type flag can be interpreted -with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either -a set of OIDs or the boolean True. +store_name may be one of 'CA', 'ROOT' or 'MY'. The system may +provide more cert storages, too. The function returns a list of +(bytes, encoding_type, trust) tuples. The encoding_type flag can be +interpreted with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The +trust setting is either a set of OIDs or the boolean True. [clinic start generated code]*/ static PyObject * _ssl_enum_certificates_impl(PyObject *module, const char *store_name) -/*[clinic end generated code: output=5134dc8bb3a3c893 input=263c22e6c6988cf3]*/ +/*[clinic end generated code: output=5134dc8bb3a3c893 input=ef81b4bd1b7ab8e9]*/ { HCERTSTORE hCollectionStore = NULL; PCCERT_CONTEXT pCertCtx = NULL; diff --git a/Modules/_struct.c b/Modules/_struct.c index 3a970d99bb3..8c611a708d0 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -2721,6 +2721,7 @@ pack_into_impl(PyObject *module, PyStructObject *s_object, Py_buffer *buffer, } /*[clinic input] +@permit_long_summary unpack format as s_object: cache_struct @@ -2735,12 +2736,13 @@ for more on format strings. static PyObject * unpack_impl(PyObject *module, PyStructObject *s_object, Py_buffer *buffer) -/*[clinic end generated code: output=48ddd4d88eca8551 input=7df28c5d0b5b6f4e]*/ +/*[clinic end generated code: output=48ddd4d88eca8551 input=53a60a65830bd1e1]*/ { return Struct_unpack_impl(s_object, buffer); } /*[clinic input] +@permit_long_summary unpack_from format as s_object: cache_struct @@ -2757,7 +2759,7 @@ help(struct) for more on format strings. static PyObject * unpack_from_impl(PyObject *module, PyStructObject *s_object, Py_buffer *buffer, Py_ssize_t offset) -/*[clinic end generated code: output=1042631674c6e0d3 input=599262b23559f6c5]*/ +/*[clinic end generated code: output=1042631674c6e0d3 input=3e46619756fb0293]*/ { return Struct_unpack_from_impl(s_object, buffer, offset); } diff --git a/Modules/_testcapi/import.c b/Modules/_testcapi/import.c index ebb1032fdd1..384a8f52da4 100644 --- a/Modules/_testcapi/import.c +++ b/Modules/_testcapi/import.c @@ -41,8 +41,6 @@ pyimport_setlazyimportsmode(PyObject *self, PyObject *args) PyImport_SetLazyImportsMode(PyImport_LAZY_NORMAL); } else if (strcmp(PyUnicode_AsUTF8(mode), "all") == 0) { PyImport_SetLazyImportsMode(PyImport_LAZY_ALL); - } else if (strcmp(PyUnicode_AsUTF8(mode), "none") == 0) { - PyImport_SetLazyImportsMode(PyImport_LAZY_NONE); } else { PyErr_SetString(PyExc_ValueError, "invalid mode"); return NULL; @@ -59,8 +57,6 @@ pyimport_getlazyimportsmode(PyObject *self, PyObject *args) return PyUnicode_FromString("normal"); case PyImport_LAZY_ALL: return PyUnicode_FromString("all"); - case PyImport_LAZY_NONE: - return PyUnicode_FromString("none"); default: PyErr_SetString(PyExc_ValueError, "unknown mode"); return NULL; diff --git a/Modules/_testcapi/mem.c b/Modules/_testcapi/mem.c index b4896f98451..7909476ac11 100644 --- a/Modules/_testcapi/mem.c +++ b/Modules/_testcapi/mem.c @@ -2,6 +2,28 @@ #include <stddef.h> +#if defined(__APPLE__) +# include <TargetConditionals.h> + // Older macOS SDKs do not define TARGET_OS_OSX +# if !defined(TARGET_OS_OSX) +# define TARGET_OS_OSX 1 +# endif +# if TARGET_OS_OSX +# include <errno.h> // errno, ESRCH +# include <libproc.h> // proc_pidinfo(), PROC_PIDTASKINFO +# include <sys/proc_info.h> // struct proc_taskinfo +# endif +#endif + +#ifdef __FreeBSD__ +# include <fcntl.h> // O_RDONLY +# include <kvm.h> // kvm_openfiles() +# include <limits.h> // _POSIX2_LINE_MAX +# include <sys/sysctl.h> // KERN_PROC_PID +# include <sys/user.h> // kinfo_proc definition +# include <unistd.h> // sysconf() +#endif + typedef struct { PyMemAllocatorEx alloc; @@ -684,6 +706,74 @@ tracemalloc_track_race(PyObject *self, PyObject *args) } +#if TARGET_OS_OSX || defined(__FreeBSD__) +// Return RSS only. Per-process swap usage isn't readily available +static PyObject* +get_process_memory_usage(PyObject *self, PyObject *args) +{ + int pid; + if (!PyArg_ParseTuple(args, "i", &pid)) { + return NULL; + } + +#if TARGET_OS_OSX + // macOS: proc_pidinfo(PROC_PIDTASKINFO).pti_resident_size + struct proc_taskinfo pti; + int ret = proc_pidinfo(pid, PROC_PIDTASKINFO, 0, &pti, sizeof(pti)); + if (ret <= 0) { + if (errno == 0) { + // proc_pidinfo() can return 0 without setting errno when the + // process does not exist. + errno = ESRCH; + } + return PyErr_SetFromErrno(PyExc_OSError); + } + + return PyLong_FromUnsignedLongLong(pti.pti_resident_size); +#else + // FreeBSD: kvm_getprocs(KERN_PROC_PID) and ki_rssize * page_size + long page_size = sysconf(_SC_PAGESIZE); + if (page_size <= 0) { + return PyErr_SetFromErrno(PyExc_OSError); + } + + // Using /dev/null for vmcore avoids needing dump file. + // NULL for kernel file uses running kernel. + char errbuf[_POSIX2_LINE_MAX]; + kvm_t *kd = kvm_openfiles(NULL, "/dev/null", NULL, O_RDONLY, errbuf); + if (kd == NULL) { + return PyErr_SetFromErrno(PyExc_OSError); + } + + // KERN_PROC_PID filters for the specific process ID. + int n_procs; + struct kinfo_proc *kp = kvm_getprocs(kd, KERN_PROC_PID, pid, &n_procs); + if (kp == NULL) { + PyErr_SetFromErrno(PyExc_OSError); + goto error; + } + if (n_procs <= 0) { + // Process with PID not found + errno = ESRCH; + PyErr_SetFromErrno(PyExc_OSError); + goto error; + } + assert(n_procs == 1); + + // ki_rssize is in pages. Convert to bytes. + size_t rss = (size_t)kp[0].ki_rssize * page_size; + kvm_close(kd); + + return PyLong_FromSize_t(rss); + +error: + kvm_close(kd); + return NULL; +#endif +} +#endif + + static PyMethodDef test_methods[] = { {"pymem_api_misuse", pymem_api_misuse, METH_NOARGS}, {"pymem_buffer_overflow", pymem_buffer_overflow, METH_NOARGS}, @@ -698,6 +788,9 @@ static PyMethodDef test_methods[] = { {"test_pymem_setrawallocators", test_pymem_setrawallocators, METH_NOARGS}, {"test_pyobject_new", test_pyobject_new, METH_NOARGS}, {"test_pyobject_setallocators", test_pyobject_setallocators, METH_NOARGS}, +#if TARGET_OS_OSX || defined(__FreeBSD__) + {"get_process_memory_usage", get_process_memory_usage, METH_VARARGS}, +#endif // Tracemalloc tests {"tracemalloc_track", tracemalloc_track, METH_VARARGS}, diff --git a/Modules/_testcapi/object.c b/Modules/_testcapi/object.c index c62dc1144df..09a548fd2e2 100644 --- a/Modules/_testcapi/object.c +++ b/Modules/_testcapi/object.c @@ -560,10 +560,11 @@ pysentinel_new(PyObject *self, PyObject *args) { const char *name; const char *module_name = NULL; - if (!PyArg_ParseTuple(args, "s|s", &name, &module_name)) { + const char *repr = NULL; + if (!PyArg_ParseTuple(args, "s|ss", &name, &module_name, &repr)) { return NULL; } - return PySentinel_New(name, module_name); + return PySentinel_New(name, module_name, repr); } static PyObject * diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c index b8a22c439e8..d0d1f1f1bc8 100644 --- a/Modules/_testinternalcapi.c +++ b/Modules/_testinternalcapi.c @@ -240,10 +240,17 @@ classify_address(uintptr_t addr, int jit_enabled, PyInterpreterState *interp) if (strncmp(base, "python", 6) == 0) { return "python"; } +#ifdef __CYGWIN__ + // Match Cygwin "cygpython3.16.dll" + if (strncmp(base, "cygpython", 9) == 0) { + return "python"; + } +#else // Match "libpython3.15.so.1.0" if (strncmp(base, "libpython", 9) == 0) { return "python"; } +#endif return "other"; } #ifdef _Py_JIT @@ -1105,7 +1112,7 @@ static PyObject * set_eval_frame_default(PyObject *self, PyObject *Py_UNUSED(args)) { module_state *state = get_module_state(self); - _PyInterpreterState_SetEvalFrameFunc(_PyInterpreterState_GET(), _PyEval_EvalFrameDefault); + _PyInterpreterState_SetEvalFrameFunc(_PyInterpreterState_GET(), NULL); Py_CLEAR(state->record_list); Py_RETURN_NONE; } diff --git a/Modules/_testinternalcapi/test_cases.c.h b/Modules/_testinternalcapi/test_cases.c.h index a2506524f0b..11dfcc68eb2 100644 --- a/Modules/_testinternalcapi/test_cases.c.h +++ b/Modules/_testinternalcapi/test_cases.c.h @@ -9314,7 +9314,7 @@ INSTRUCTION_STATS(LOAD_COMMON_CONSTANT); _PyStackRef value; assert(oparg < NUM_COMMON_CONSTANTS); - value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + value = PyStackRef_DupImmortal(tstate->interp->common_consts[oparg]); stack_pointer[0] = value; stack_pointer += 1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); @@ -12007,7 +12007,8 @@ v = stack_pointer[-4]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), - PyStackRef_AsPyObjectSteal(stop)); + PyStackRef_AsPyObjectSteal(stop), + Py_None); stack_pointer = _PyFrame_GetStackPointer(frame); int err; if (slice == NULL) { diff --git a/Modules/_testlimitedcapi/clinic/long.c.h b/Modules/_testlimitedcapi/clinic/long.c.h index ebaeb53921a..f9852aba266 100644 --- a/Modules/_testlimitedcapi/clinic/long.c.h +++ b/Modules/_testlimitedcapi/clinic/long.c.h @@ -84,8 +84,8 @@ PyDoc_STRVAR(_testlimitedcapi_test_long_as_size_t__doc__, "\n" "Test the PyLong_As{Size,Ssize}_t API.\n" "\n" -"At present this just tests that non-integer arguments are handled correctly.\n" -"It should be extended to test overflow handling."); +"At present this just tests that non-integer arguments are handled\n" +"correctly. It should be extended to test overflow handling."); #define _TESTLIMITEDCAPI_TEST_LONG_AS_SIZE_T_METHODDEF \ {"test_long_as_size_t", (PyCFunction)_testlimitedcapi_test_long_as_size_t, METH_NOARGS, _testlimitedcapi_test_long_as_size_t__doc__}, @@ -140,4 +140,4 @@ PyDoc_STRVAR(_testlimitedcapi_PyLong_AsInt__doc__, #define _TESTLIMITEDCAPI_PYLONG_ASINT_METHODDEF \ {"PyLong_AsInt", (PyCFunction)_testlimitedcapi_PyLong_AsInt, METH_O, _testlimitedcapi_PyLong_AsInt__doc__}, -/*[clinic end generated code: output=bc52b73c599f96c2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fb5c95bd0a4bdad8 input=a9049054013a1b77]*/ diff --git a/Modules/_testlimitedcapi/long.c b/Modules/_testlimitedcapi/long.c index 34bc7331da9..99b9e96760d 100644 --- a/Modules/_testlimitedcapi/long.c +++ b/Modules/_testlimitedcapi/long.c @@ -451,13 +451,13 @@ _testlimitedcapi.test_long_as_size_t Test the PyLong_As{Size,Ssize}_t API. -At present this just tests that non-integer arguments are handled correctly. -It should be extended to test overflow handling. +At present this just tests that non-integer arguments are handled +correctly. It should be extended to test overflow handling. [clinic start generated code]*/ static PyObject * _testlimitedcapi_test_long_as_size_t_impl(PyObject *module) -/*[clinic end generated code: output=297a9f14a42f55af input=8923d8f2038c46f4]*/ +/*[clinic end generated code: output=297a9f14a42f55af input=692e73744b35bf6e]*/ { size_t out_u; Py_ssize_t out_s; diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c index 128e3f79ecd..57ba61e67f1 100644 --- a/Modules/_testmultiphase.c +++ b/Modules/_testmultiphase.c @@ -141,14 +141,14 @@ _testmultiphase.StateAccessType.get_defining_module Return the module of the defining class. -Also tests that result of PyType_GetModuleByDef matches defining_class's -module. +Also tests that result of PyType_GetModuleByDef matches +defining_class's module. [clinic start generated code]*/ static PyObject * _testmultiphase_StateAccessType_get_defining_module_impl(StateAccessTypeObject *self, PyTypeObject *cls) -/*[clinic end generated code: output=ba2a14284a5d0921 input=d2c7245c8a9d06f8]*/ +/*[clinic end generated code: output=ba2a14284a5d0921 input=903e7f66555d65ae]*/ { PyObject *retval; retval = PyType_GetModule(cls); diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 135b5311101..7a34c5a5a0e 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -820,8 +820,8 @@ _thread.lock.acquire Lock the lock. -Without argument, this blocks if the lock is already -locked (even by the same thread), waiting for another thread to release +Without argument, this blocks if the lock is already locked +(even by the same thread), waiting for another thread to release the lock, and return True once the lock is acquired. With an argument, this will only block if the argument is true, and the return value reflects whether the lock is acquired. @@ -831,7 +831,7 @@ The blocking operation is interruptible. static PyObject * _thread_lock_acquire_impl(lockobject *self, int blocking, PyObject *timeoutobj) -/*[clinic end generated code: output=569d6b25d508bf6f input=13e999649bc1c798]*/ +/*[clinic end generated code: output=569d6b25d508bf6f input=73e75b3d2ec32677]*/ { PyTime_t timeout; @@ -1131,19 +1131,19 @@ _thread.RLock.release Release the lock. -Allows another thread that is blocked waiting for -the lock to acquire the lock. The lock must be in the locked state, +Allows another thread that is blocked waiting for the lock +to acquire the lock. The lock must be in the locked state, and must be locked by the same thread that unlocks it; otherwise a `RuntimeError` is raised. -Do note that if the lock was acquire()d several times in a row by the -current thread, release() needs to be called as many times for the lock -to be available for other threads. +Do note that if the lock was acquire()d several times in a row by +the current thread, release() needs to be called as many times for +the lock to be available for other threads. [clinic start generated code]*/ static PyObject * _thread_RLock_release_impl(rlockobject *self) -/*[clinic end generated code: output=51f4a013c5fae2c5 input=d425daf1a5782e63]*/ +/*[clinic end generated code: output=51f4a013c5fae2c5 input=7c188f60189be13a]*/ { if (_PyRecursiveMutex_TryUnlock(&self->lock) < 0) { PyErr_SetString(PyExc_RuntimeError, diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index bbe2a428454..58fdabecf16 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -3219,7 +3219,6 @@ _tkinter_create_impl(PyObject *module, const char *screenName, /*[clinic input] @permit_long_summary -@permit_long_docstring_body _tkinter.setbusywaitinterval new_val: int @@ -3227,12 +3226,13 @@ _tkinter.setbusywaitinterval Set the busy-wait interval in milliseconds between successive calls to Tcl_DoOneEvent in a threaded Python interpreter. -It should be set to a divisor of the maximum time between frames in an animation. +It should be set to a divisor of the maximum time between frames in +an animation. [clinic start generated code]*/ static PyObject * _tkinter_setbusywaitinterval_impl(PyObject *module, int new_val) -/*[clinic end generated code: output=42bf7757dc2d0ab6 input=07b82a04b56625e1]*/ +/*[clinic end generated code: output=42bf7757dc2d0ab6 input=0360dd95c8bd8619]*/ { if (new_val < 0) { PyErr_SetString(PyExc_ValueError, diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 56d83ea0dcb..a97b0e0bfee 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -11,6 +11,7 @@ module _tracemalloc /*[clinic input] +@permit_long_summary _tracemalloc.is_tracing Return True if the tracemalloc module is tracing Python memory allocations. @@ -18,7 +19,7 @@ Return True if the tracemalloc module is tracing Python memory allocations. static PyObject * _tracemalloc_is_tracing_impl(PyObject *module) -/*[clinic end generated code: output=2d763b42601cd3ef input=af104b0a00192f63]*/ +/*[clinic end generated code: output=2d763b42601cd3ef input=cac4fc9096babeac]*/ { return PyBool_FromLong(_PyTraceMalloc_IsTracing()); } @@ -153,6 +154,7 @@ _tracemalloc_get_tracemalloc_memory_impl(PyObject *module) /*[clinic input] +@permit_long_summary _tracemalloc.get_traced_memory Get the current size and peak size of memory blocks traced by tracemalloc. @@ -162,7 +164,7 @@ Returns a tuple: (current: int, peak: int). static PyObject * _tracemalloc_get_traced_memory_impl(PyObject *module) -/*[clinic end generated code: output=5b167189adb9e782 input=61ddb5478400ff66]*/ +/*[clinic end generated code: output=5b167189adb9e782 input=b06e7a1a4914fc21]*/ { return _PyTraceMalloc_GetTracedMemory(); } diff --git a/Modules/_winapi.c b/Modules/_winapi.c index ffa407b2f21..fc2c0890468 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -49,6 +49,13 @@ #include <crtdbg.h> #include "winreparse.h" +// PSAPI_VERSION=2 redirects GetProcessMemoryInfo() to +// K32GetProcessMemoryInfo() in kernel32.dll, so we don't need to link +// psapi.lib. See: +// https://learn.microsoft.com/windows/win32/api/psapi/nf-psapi-getprocessmemoryinfo +#define PSAPI_VERSION 2 +#include <psapi.h> // GetProcessMemoryInfo() + #if defined(MS_WIN32) && !defined(MS_WIN64) #define HANDLE_TO_PYNUM(handle) \ PyLong_FromUnsignedLong((unsigned long) handle) @@ -3080,6 +3087,61 @@ _winapi_ReportEvent_impl(PyObject *module, HANDLE handle, } +/*[clinic input] +_winapi.GetProcessMemoryInfo + handle: HANDLE + / + +Return the memory usage of the given process handle as a dict. +[clinic start generated code]*/ + +static PyObject * +_winapi_GetProcessMemoryInfo_impl(PyObject *module, HANDLE handle) +/*[clinic end generated code: output=00a5d09732e84120 input=5b90ad61cdc68d2a]*/ +{ + PROCESS_MEMORY_COUNTERS pmc; + if (!GetProcessMemoryInfo(handle, &pmc, sizeof(pmc))) { + return PyErr_SetFromWindowsErr(0); + } + + PyObject *result = PyDict_New(); + if (result == NULL) { + return NULL; + } + +#define ADD(ATTR) \ + do { \ + PyObject *obj = PyLong_FromSize_t(pmc.ATTR); \ + if (obj == NULL) { \ + goto error; \ + } \ + if (PyDict_SetItemString(result, #ATTR, obj) < 0) { \ + Py_DECREF(obj); \ + goto error; \ + } \ + Py_DECREF(obj); \ + } while (0) + + ADD(PageFaultCount); + ADD(PeakWorkingSetSize); + ADD(WorkingSetSize); + ADD(QuotaPeakPagedPoolUsage); + ADD(QuotaPagedPoolUsage); + ADD(QuotaPeakNonPagedPoolUsage); + ADD(QuotaNonPagedPoolUsage); + ADD(PagefileUsage); + ADD(PeakPagefileUsage); + +#undef ADD + + return result; + +error: + Py_DECREF(result); + return NULL; +} + + static PyMethodDef winapi_functions[] = { _WINAPI_CLOSEHANDLE_METHODDEF _WINAPI_CONNECTNAMEDPIPE_METHODDEF @@ -3130,6 +3192,7 @@ static PyMethodDef winapi_functions[] = { _WINAPI__MIMETYPES_READ_WINDOWS_REGISTRY_METHODDEF _WINAPI_NEEDCURRENTDIRECTORYFOREXEPATH_METHODDEF _WINAPI_COPYFILE2_METHODDEF + _WINAPI_GETPROCESSMEMORYINFO_METHODDEF {NULL, NULL} }; @@ -3226,6 +3289,7 @@ static int winapi_exec(PyObject *m) WINAPI_CONSTANT(F_DWORD, PROCESS_ALL_ACCESS); WINAPI_CONSTANT(F_DWORD, SYNCHRONIZE); WINAPI_CONSTANT(F_DWORD, PROCESS_DUP_HANDLE); + WINAPI_CONSTANT(F_DWORD, PROCESS_QUERY_LIMITED_INFORMATION); WINAPI_CONSTANT(F_DWORD, SEC_COMMIT); WINAPI_CONSTANT(F_DWORD, SEC_IMAGE); WINAPI_CONSTANT(F_DWORD, SEC_LARGE_PAGES); diff --git a/Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/expat224_utf8_bug.xml b/Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/expat224_utf8_bug.xml index 7880d96a979..d66a8e6b50f 100644 --- a/Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/expat224_utf8_bug.xml +++ b/Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/expat224_utf8_bug.xml @@ -1,2 +1,2 @@ -<a b='01234567890123456古人咏雪抽幽思骋妍辞竞险韵偶得一编奇绝辄擅美当时流声后代是以北门之风南山之雅梁园之简黄台之赋至今为作家称述尚矣及至洛阳之卧剡溪之兴灞桥之思亦皆传为故事钱塘沈履德先生隐居西湖两峰间孤高贞洁与雪同调方大雪满天皴肤粟背之际先生乃鹿中豹舄端居闭门或扶童曳杖踏遍六桥三竺时取古人诗讽咏之合唐宋元诸名家集句成诗得二百四十章联络通穿如出一人如呵一气气立于言表格备于篇中略无掇拾补凑之形非胸次包罗壮阔笔底驱走鲍谢欧苏诸公不能为此世称王荆公为集句擅长观其在钟山对雪仅题数篇未见有此噫嘻奇矣哉亦富矣哉予慕先生有袁安之节愧不能为慧可之立乃取新集命工传写使海内同好者知先生为博古传述之士而一新世人之耳目他日必有慕潜德阐幽光而剞劂以传者余实为之执殳矣 -弘治戊午仲冬望日慈溪杨子器衵于海虞官舍序毕诗部' /> +<a b='01234567890123456古人咏雪抽幽思骋妍辞竞险韵偶得一编奇绝辄擅美当时流声后代是以北门之风南山之雅梁园之简黄台之赋至今为作家称述尚矣及至洛阳之卧剡溪之兴灞桥之思亦皆传为故事钱塘沈履德先生隐居西湖两峰间孤高贞洁与雪同调方大雪满天皴肤粟背之际先生乃鹿中豹舄端居闭门或扶童曳杖踏遍六桥三竺时取古人诗讽咏之合唐宋元诸名家集句成诗得二百四十章联络通穿如出一人如呵一气气立于言表格备于篇中略无掇拾补凑之形非胸次包罗壮阔笔底驱走鲍谢欧苏诸公不能为此世称王荆公为集句擅长观其在钟山对雪仅题数篇未见有此噫嘻奇矣哉亦富矣哉予慕先生有袁安之节愧不能为慧可之立乃取新集命工传写使海内同好者知先生为博古传述之士而一新世人之耳目他日必有慕潜德阐幽光而剞劂以传者余实为之执殳矣 +弘治戊午仲冬望日慈溪杨子器衵于海虞官舍序毕诗部' /> diff --git a/Modules/_zstd/clinic/compressor.c.h b/Modules/_zstd/clinic/compressor.c.h index 4f8d93fd9e8..6775ba4826a 100644 --- a/Modules/_zstd/clinic/compressor.c.h +++ b/Modules/_zstd/clinic/compressor.c.h @@ -21,8 +21,8 @@ PyDoc_STRVAR(_zstd_ZstdCompressor_new__doc__, " zstd_dict\n" " A ZstdDict object, a pre-trained Zstandard dictionary.\n" "\n" -"Thread-safe at method level. For one-shot compression, use the compress()\n" -"function instead."); +"Thread-safe at method level. For one-shot compression, use the\n" +"compress() function instead."); static PyObject * _zstd_ZstdCompressor_new_impl(PyTypeObject *type, PyObject *level, @@ -105,9 +105,9 @@ PyDoc_STRVAR(_zstd_ZstdCompressor_compress__doc__, " Can be these 3 values ZstdCompressor.CONTINUE,\n" " ZstdCompressor.FLUSH_BLOCK, ZstdCompressor.FLUSH_FRAME\n" "\n" -"Return a chunk of compressed data if possible, or b\'\' otherwise. When you have\n" -"finished providing data to the compressor, call the flush() method to finish\n" -"the compression process."); +"Return a chunk of compressed data if possible, or b\'\' otherwise.\n" +"When you have finished providing data to the compressor, call the\n" +"flush() method to finish the compression process."); #define _ZSTD_ZSTDCOMPRESSOR_COMPRESS_METHODDEF \ {"compress", _PyCFunction_CAST(_zstd_ZstdCompressor_compress), METH_FASTCALL|METH_KEYWORDS, _zstd_ZstdCompressor_compress__doc__}, @@ -189,9 +189,9 @@ PyDoc_STRVAR(_zstd_ZstdCompressor_flush__doc__, " Can be these 2 values ZstdCompressor.FLUSH_FRAME,\n" " ZstdCompressor.FLUSH_BLOCK\n" "\n" -"Flush any remaining data left in internal buffers. Since Zstandard data\n" -"consists of one or more independent frames, the compressor object can still\n" -"be used after this method is called."); +"Flush any remaining data left in internal buffers. Since Zstandard\n" +"data consists of one or more independent frames, the compressor\n" +"object can still be used after this method is called."); #define _ZSTD_ZSTDCOMPRESSOR_FLUSH_METHODDEF \ {"flush", _PyCFunction_CAST(_zstd_ZstdCompressor_flush), METH_FASTCALL|METH_KEYWORDS, _zstd_ZstdCompressor_flush__doc__}, @@ -262,13 +262,14 @@ PyDoc_STRVAR(_zstd_ZstdCompressor_set_pledged_input_size__doc__, " size\n" " The size of the uncompressed data to be provided to the compressor.\n" "\n" -"This method can be used to ensure the header of the frame about to be written\n" -"includes the size of the data, unless the CompressionParameter.content_size_flag\n" -"is set to False. If last_mode != FLUSH_FRAME, then a RuntimeError is raised.\n" +"This method can be used to ensure the header of the frame about to\n" +"be written includes the size of the data, unless the\n" +"CompressionParameter.content_size_flag is set to False.\n" +"If last_mode != FLUSH_FRAME, then a RuntimeError is raised.\n" "\n" -"It is important to ensure that the pledged data size matches the actual data\n" -"size. If they do not match the compressed output data may be corrupted and the\n" -"final chunk written may be lost."); +"It is important to ensure that the pledged data size matches the\n" +"actual data size. If they do not match the compressed output data\n" +"may be corrupted and the final chunk written may be lost."); #define _ZSTD_ZSTDCOMPRESSOR_SET_PLEDGED_INPUT_SIZE_METHODDEF \ {"set_pledged_input_size", (PyCFunction)_zstd_ZstdCompressor_set_pledged_input_size, METH_O, _zstd_ZstdCompressor_set_pledged_input_size__doc__}, @@ -291,4 +292,4 @@ _zstd_ZstdCompressor_set_pledged_input_size(PyObject *self, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=c1d5c2cf06a8becd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1a5e21476885866c input=a9049054013a1b77]*/ diff --git a/Modules/_zstd/clinic/decompressor.c.h b/Modules/_zstd/clinic/decompressor.c.h index c6fdae74ab0..fe3b76b8bb3 100644 --- a/Modules/_zstd/clinic/decompressor.c.h +++ b/Modules/_zstd/clinic/decompressor.c.h @@ -20,8 +20,8 @@ PyDoc_STRVAR(_zstd_ZstdDecompressor_new__doc__, " options\n" " A dict object that contains advanced decompression parameters.\n" "\n" -"Thread-safe at method level. For one-shot decompression, use the decompress()\n" -"function instead."); +"Thread-safe at method level. For one-shot decompression, use the\n" +"decompress() function instead."); static PyObject * _zstd_ZstdDecompressor_new_impl(PyTypeObject *type, PyObject *zstd_dict, @@ -91,7 +91,8 @@ PyDoc_STRVAR(_zstd_ZstdDecompressor_unused_data__doc__, "A bytes object of un-consumed input data.\n" "\n" "When ZstdDecompressor object stops after a frame is\n" -"decompressed, unused input data after the frame. Otherwise this will be b\'\'."); +"decompressed, unused input data after the frame. Otherwise this\n" +"will be b\'\'."); #if defined(_zstd_ZstdDecompressor_unused_data_DOCSTR) # undef _zstd_ZstdDecompressor_unused_data_DOCSTR #endif @@ -129,18 +130,19 @@ PyDoc_STRVAR(_zstd_ZstdDecompressor_decompress__doc__, " output buffer is unlimited. When it is nonnegative, returns at\n" " most max_length bytes of decompressed data.\n" "\n" -"If *max_length* is nonnegative, returns at most *max_length* bytes of\n" -"decompressed data. If this limit is reached and further output can be\n" -"produced, *self.needs_input* will be set to ``False``. In this case, the next\n" -"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n" +"If *max_length* is nonnegative, returns at most *max_length* bytes\n" +"of decompressed data. If this limit is reached and further output\n" +"can be produced, *self.needs_input* will be set to ``False``. In\n" +"this case, the next call to *decompress()* may provide *data* as b\'\'\n" +"to obtain more of the output.\n" "\n" -"If all of the input data was decompressed and returned (either because this\n" -"was less than *max_length* bytes, or because *max_length* was negative),\n" -"*self.needs_input* will be set to True.\n" +"If all of the input data was decompressed and returned (either\n" +"because this was less than *max_length* bytes, or because\n" +"*max_length* was negative), *self.needs_input* will be set to True.\n" "\n" -"Attempting to decompress data after the end of a frame is reached raises an\n" -"EOFError. Any data found after the end of the frame is ignored and saved in\n" -"the self.unused_data attribute."); +"Attempting to decompress data after the end of a frame is reached\n" +"raises an EOFError. Any data found after the end of the frame is\n" +"ignored and saved in the self.unused_data attribute."); #define _ZSTD_ZSTDDECOMPRESSOR_DECOMPRESS_METHODDEF \ {"decompress", _PyCFunction_CAST(_zstd_ZstdDecompressor_decompress), METH_FASTCALL|METH_KEYWORDS, _zstd_ZstdDecompressor_decompress__doc__}, @@ -220,4 +222,4 @@ _zstd_ZstdDecompressor_decompress(PyObject *self, PyObject *const *args, Py_ssiz return return_value; } -/*[clinic end generated code: output=30c12ef047027ede input=a9049054013a1b77]*/ +/*[clinic end generated code: output=70bc308e86463751 input=a9049054013a1b77]*/ diff --git a/Modules/_zstd/clinic/zstddict.c.h b/Modules/_zstd/clinic/zstddict.c.h index 166d925a542..18b049e3cbe 100644 --- a/Modules/_zstd/clinic/zstddict.c.h +++ b/Modules/_zstd/clinic/zstddict.c.h @@ -21,8 +21,8 @@ PyDoc_STRVAR(_zstd_ZstdDict_new__doc__, " advanced cases. Otherwise, check that the content represents\n" " a Zstandard dictionary created by the zstd library or CLI.\n" "\n" -"The dictionary can be used for compression or decompression, and can be shared\n" -"by multiple ZstdCompressor or ZstdDecompressor objects."); +"The dictionary can be used for compression or decompression, and can be\n" +"shared by multiple ZstdCompressor or ZstdDecompressor objects."); static PyObject * _zstd_ZstdDict_new_impl(PyTypeObject *type, Py_buffer *dict_content, @@ -125,11 +125,11 @@ PyDoc_STRVAR(_zstd_ZstdDict_as_digested_dict__doc__, "Pass this attribute as zstd_dict argument:\n" "compress(dat, zstd_dict=zd.as_digested_dict)\n" "\n" -"1. Some advanced compression parameters of compressor may be overridden\n" -" by parameters of digested dictionary.\n" -"2. ZstdDict has a digested dictionaries cache for each compression level.\n" -" It\'s faster when loading again a digested dictionary with the same\n" -" compression level.\n" +"1. Some advanced compression parameters of compressor may be\n" +" overridden by parameters of digested dictionary.\n" +"2. ZstdDict has a digested dictionaries cache for each compression\n" +" level. It\'s faster when loading again a digested dictionary with\n" +" the same compression level.\n" "3. No need to use this for decompression."); #if defined(_zstd_ZstdDict_as_digested_dict_DOCSTR) # undef _zstd_ZstdDict_as_digested_dict_DOCSTR @@ -161,9 +161,10 @@ PyDoc_STRVAR(_zstd_ZstdDict_as_undigested_dict__doc__, "Pass this attribute as zstd_dict argument:\n" "compress(dat, zstd_dict=zd.as_undigested_dict)\n" "\n" -"1. The advanced compression parameters of compressor will not be overridden.\n" -"2. Loading an undigested dictionary is costly. If load an undigested dictionary\n" -" multiple times, consider reusing a compressor object.\n" +"1. The advanced compression parameters of compressor will not be\n" +" overridden.\n" +"2. Loading an undigested dictionary is costly. If load an undigested\n" +" dictionary multiple times, consider reusing a compressor object.\n" "3. No need to use this for decompression."); #if defined(_zstd_ZstdDict_as_undigested_dict_DOCSTR) # undef _zstd_ZstdDict_as_undigested_dict_DOCSTR @@ -195,9 +196,10 @@ PyDoc_STRVAR(_zstd_ZstdDict_as_prefix__doc__, "Pass this attribute as zstd_dict argument:\n" "compress(dat, zstd_dict=zd.as_prefix)\n" "\n" -"1. Prefix is compatible with long distance matching, while dictionary is not.\n" -"2. It only works for the first frame, then the compressor/decompressor will\n" -" return to no prefix state.\n" +"1. Prefix is compatible with long distance matching, while\n" +" dictionary is not.\n" +"2. It only works for the first frame, then the\n" +" compressor/decompressor will return to no prefix state.\n" "3. When decompressing, must use the same prefix as when compressing."); #if defined(_zstd_ZstdDict_as_prefix_DOCSTR) # undef _zstd_ZstdDict_as_prefix_DOCSTR @@ -222,4 +224,4 @@ _zstd_ZstdDict_as_prefix_get(PyObject *self, void *Py_UNUSED(context)) { return _zstd_ZstdDict_as_prefix_get_impl((ZstdDict *)self); } -/*[clinic end generated code: output=f41d9e2e2cc2928f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=49b66061b4fcdb5f input=a9049054013a1b77]*/ diff --git a/Modules/_zstd/compressor.c b/Modules/_zstd/compressor.c index 8a3cd182ab1..b2eb22d9ec8 100644 --- a/Modules/_zstd/compressor.c +++ b/Modules/_zstd/compressor.c @@ -332,14 +332,14 @@ _zstd.ZstdCompressor.__new__ as _zstd_ZstdCompressor_new Create a compressor object for compressing data incrementally. -Thread-safe at method level. For one-shot compression, use the compress() -function instead. +Thread-safe at method level. For one-shot compression, use the +compress() function instead. [clinic start generated code]*/ static PyObject * _zstd_ZstdCompressor_new_impl(PyTypeObject *type, PyObject *level, PyObject *options, PyObject *zstd_dict) -/*[clinic end generated code: output=cdef61eafecac3d7 input=92de0211ae20ffdc]*/ +/*[clinic end generated code: output=cdef61eafecac3d7 input=bbfeeaa06fd3bd4d]*/ { ZstdCompressor* self = PyObject_GC_New(ZstdCompressor, type); if (self == NULL) { @@ -583,7 +583,6 @@ compress_mt_continue_lock_held(ZstdCompressor *self, Py_buffer *data) } /*[clinic input] -@permit_long_docstring_body _zstd.ZstdCompressor.compress data: Py_buffer @@ -593,15 +592,15 @@ _zstd.ZstdCompressor.compress Provide data to the compressor object. -Return a chunk of compressed data if possible, or b'' otherwise. When you have -finished providing data to the compressor, call the flush() method to finish -the compression process. +Return a chunk of compressed data if possible, or b'' otherwise. +When you have finished providing data to the compressor, call the +flush() method to finish the compression process. [clinic start generated code]*/ static PyObject * _zstd_ZstdCompressor_compress_impl(ZstdCompressor *self, Py_buffer *data, int mode) -/*[clinic end generated code: output=ed7982d1cf7b4f98 input=6018ed6cc729cea6]*/ +/*[clinic end generated code: output=ed7982d1cf7b4f98 input=11726dff64d7b2f9]*/ { PyObject *ret; @@ -643,7 +642,6 @@ _zstd_ZstdCompressor_compress_impl(ZstdCompressor *self, Py_buffer *data, } /*[clinic input] -@permit_long_docstring_body _zstd.ZstdCompressor.flush mode: int(c_default="ZSTD_e_end") = ZstdCompressor.FLUSH_FRAME @@ -652,14 +650,14 @@ _zstd.ZstdCompressor.flush Finish the compression process. -Flush any remaining data left in internal buffers. Since Zstandard data -consists of one or more independent frames, the compressor object can still -be used after this method is called. +Flush any remaining data left in internal buffers. Since Zstandard +data consists of one or more independent frames, the compressor +object can still be used after this method is called. [clinic start generated code]*/ static PyObject * _zstd_ZstdCompressor_flush_impl(ZstdCompressor *self, int mode) -/*[clinic end generated code: output=b7cf2c8d64dcf2e3 input=a9871ec742d79003]*/ +/*[clinic end generated code: output=b7cf2c8d64dcf2e3 input=130e0b1eddf0f498]*/ { PyObject *ret; @@ -693,7 +691,7 @@ _zstd_ZstdCompressor_flush_impl(ZstdCompressor *self, int mode) /*[clinic input] -@permit_long_docstring_body +@permit_long_summary _zstd.ZstdCompressor.set_pledged_input_size size: zstd_contentsize @@ -702,19 +700,20 @@ _zstd.ZstdCompressor.set_pledged_input_size Set the uncompressed content size to be written into the frame header. -This method can be used to ensure the header of the frame about to be written -includes the size of the data, unless the CompressionParameter.content_size_flag -is set to False. If last_mode != FLUSH_FRAME, then a RuntimeError is raised. +This method can be used to ensure the header of the frame about to +be written includes the size of the data, unless the +CompressionParameter.content_size_flag is set to False. +If last_mode != FLUSH_FRAME, then a RuntimeError is raised. -It is important to ensure that the pledged data size matches the actual data -size. If they do not match the compressed output data may be corrupted and the -final chunk written may be lost. +It is important to ensure that the pledged data size matches the +actual data size. If they do not match the compressed output data +may be corrupted and the final chunk written may be lost. [clinic start generated code]*/ static PyObject * _zstd_ZstdCompressor_set_pledged_input_size_impl(ZstdCompressor *self, unsigned long long size) -/*[clinic end generated code: output=3a09e55cc0e3b4f9 input=b4c87bcbd5ce6111]*/ +/*[clinic end generated code: output=3a09e55cc0e3b4f9 input=714cd7a9aa10e2a8]*/ { // Error occurred while converting argument, should be unreachable assert(size != ZSTD_CONTENTSIZE_ERROR); diff --git a/Modules/_zstd/decompressor.c b/Modules/_zstd/decompressor.c index 46682b483ad..cb95ba89eb6 100644 --- a/Modules/_zstd/decompressor.c +++ b/Modules/_zstd/decompressor.c @@ -469,7 +469,6 @@ stream_decompress_lock_held(ZstdDecompressor *self, Py_buffer *data, /*[clinic input] -@permit_long_docstring_body @classmethod _zstd.ZstdDecompressor.__new__ as _zstd_ZstdDecompressor_new zstd_dict: object = None @@ -479,14 +478,14 @@ _zstd.ZstdDecompressor.__new__ as _zstd_ZstdDecompressor_new Create a decompressor object for decompressing data incrementally. -Thread-safe at method level. For one-shot decompression, use the decompress() -function instead. +Thread-safe at method level. For one-shot decompression, use the +decompress() function instead. [clinic start generated code]*/ static PyObject * _zstd_ZstdDecompressor_new_impl(PyTypeObject *type, PyObject *zstd_dict, PyObject *options) -/*[clinic end generated code: output=590ca65c1102ff4a input=ed8891edfd14cdaa]*/ +/*[clinic end generated code: output=590ca65c1102ff4a input=73879de69bf89f59]*/ { ZstdDecompressor* self = PyObject_GC_New(ZstdDecompressor, type); if (self == NULL) { @@ -571,19 +570,19 @@ ZstdDecompressor_dealloc(PyObject *ob) } /*[clinic input] -@permit_long_docstring_body @getter _zstd.ZstdDecompressor.unused_data A bytes object of un-consumed input data. When ZstdDecompressor object stops after a frame is -decompressed, unused input data after the frame. Otherwise this will be b''. +decompressed, unused input data after the frame. Otherwise this +will be b''. [clinic start generated code]*/ static PyObject * _zstd_ZstdDecompressor_unused_data_get_impl(ZstdDecompressor *self) -/*[clinic end generated code: output=f3a20940f11b6b09 input=37c2c531ab56f914]*/ +/*[clinic end generated code: output=f3a20940f11b6b09 input=0462065c5e60ba01]*/ { PyObject *ret; @@ -613,7 +612,6 @@ _zstd_ZstdDecompressor_unused_data_get_impl(ZstdDecompressor *self) /*[clinic input] @permit_long_summary -@permit_long_docstring_body _zstd.ZstdDecompressor.decompress data: Py_buffer @@ -625,25 +623,26 @@ _zstd.ZstdDecompressor.decompress Decompress *data*, returning uncompressed bytes if possible, or b'' otherwise. -If *max_length* is nonnegative, returns at most *max_length* bytes of -decompressed data. If this limit is reached and further output can be -produced, *self.needs_input* will be set to ``False``. In this case, the next -call to *decompress()* may provide *data* as b'' to obtain more of the output. +If *max_length* is nonnegative, returns at most *max_length* bytes +of decompressed data. If this limit is reached and further output +can be produced, *self.needs_input* will be set to ``False``. In +this case, the next call to *decompress()* may provide *data* as b'' +to obtain more of the output. -If all of the input data was decompressed and returned (either because this -was less than *max_length* bytes, or because *max_length* was negative), -*self.needs_input* will be set to True. +If all of the input data was decompressed and returned (either +because this was less than *max_length* bytes, or because +*max_length* was negative), *self.needs_input* will be set to True. -Attempting to decompress data after the end of a frame is reached raises an -EOFError. Any data found after the end of the frame is ignored and saved in -the self.unused_data attribute. +Attempting to decompress data after the end of a frame is reached +raises an EOFError. Any data found after the end of the frame is +ignored and saved in the self.unused_data attribute. [clinic start generated code]*/ static PyObject * _zstd_ZstdDecompressor_decompress_impl(ZstdDecompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=a4302b3c940dbec6 input=e5c905a774df1553]*/ +/*[clinic end generated code: output=a4302b3c940dbec6 input=4ddda5a0bdd00673]*/ { PyObject *ret; /* Thread-safe code */ diff --git a/Modules/_zstd/zstddict.c b/Modules/_zstd/zstddict.c index b0bfbdc886e..e1b9d998e69 100644 --- a/Modules/_zstd/zstddict.c +++ b/Modules/_zstd/zstddict.c @@ -23,7 +23,6 @@ class _zstd.ZstdDict "ZstdDict *" "&zstd_dict_type_spec" #define ZstdDict_CAST(op) ((ZstdDict *)op) /*[clinic input] -@permit_long_docstring_body @classmethod _zstd.ZstdDict.__new__ as _zstd_ZstdDict_new dict_content: Py_buffer @@ -37,14 +36,14 @@ _zstd.ZstdDict.__new__ as _zstd_ZstdDict_new Represents a Zstandard dictionary. -The dictionary can be used for compression or decompression, and can be shared -by multiple ZstdCompressor or ZstdDecompressor objects. +The dictionary can be used for compression or decompression, and can be +shared by multiple ZstdCompressor or ZstdDecompressor objects. [clinic start generated code]*/ static PyObject * _zstd_ZstdDict_new_impl(PyTypeObject *type, Py_buffer *dict_content, int is_raw) -/*[clinic end generated code: output=685b7406a48b0949 input=b132ee40b784c293]*/ +/*[clinic end generated code: output=685b7406a48b0949 input=3bb66063c0240433]*/ { /* All dictionaries must be at least 8 bytes */ if (dict_content->len < 8) { @@ -154,7 +153,6 @@ _zstd_ZstdDict_dict_content_get_impl(ZstdDict *self) } /*[clinic input] -@permit_long_docstring_body @getter _zstd.ZstdDict.as_digested_dict @@ -163,23 +161,22 @@ Load as a digested dictionary to compressor. Pass this attribute as zstd_dict argument: compress(dat, zstd_dict=zd.as_digested_dict) -1. Some advanced compression parameters of compressor may be overridden - by parameters of digested dictionary. -2. ZstdDict has a digested dictionaries cache for each compression level. - It's faster when loading again a digested dictionary with the same - compression level. +1. Some advanced compression parameters of compressor may be + overridden by parameters of digested dictionary. +2. ZstdDict has a digested dictionaries cache for each compression + level. It's faster when loading again a digested dictionary with + the same compression level. 3. No need to use this for decompression. [clinic start generated code]*/ static PyObject * _zstd_ZstdDict_as_digested_dict_get_impl(ZstdDict *self) -/*[clinic end generated code: output=09b086e7a7320dbb input=8d01ff0b8b043f2e]*/ +/*[clinic end generated code: output=09b086e7a7320dbb input=a9417d40f1d7fedd]*/ { return Py_BuildValue("Oi", self, DICT_TYPE_DIGESTED); } /*[clinic input] -@permit_long_docstring_body @getter _zstd.ZstdDict.as_undigested_dict @@ -188,21 +185,21 @@ Load as an undigested dictionary to compressor. Pass this attribute as zstd_dict argument: compress(dat, zstd_dict=zd.as_undigested_dict) -1. The advanced compression parameters of compressor will not be overridden. -2. Loading an undigested dictionary is costly. If load an undigested dictionary - multiple times, consider reusing a compressor object. +1. The advanced compression parameters of compressor will not be + overridden. +2. Loading an undigested dictionary is costly. If load an undigested + dictionary multiple times, consider reusing a compressor object. 3. No need to use this for decompression. [clinic start generated code]*/ static PyObject * _zstd_ZstdDict_as_undigested_dict_get_impl(ZstdDict *self) -/*[clinic end generated code: output=43c7a989e6d4253a input=b1bdb306c3798ad4]*/ +/*[clinic end generated code: output=43c7a989e6d4253a input=56443c9c4e589cd5]*/ { return Py_BuildValue("Oi", self, DICT_TYPE_UNDIGESTED); } /*[clinic input] -@permit_long_docstring_body @getter _zstd.ZstdDict.as_prefix @@ -211,15 +208,16 @@ Load as a prefix to compressor/decompressor. Pass this attribute as zstd_dict argument: compress(dat, zstd_dict=zd.as_prefix) -1. Prefix is compatible with long distance matching, while dictionary is not. -2. It only works for the first frame, then the compressor/decompressor will - return to no prefix state. +1. Prefix is compatible with long distance matching, while + dictionary is not. +2. It only works for the first frame, then the + compressor/decompressor will return to no prefix state. 3. When decompressing, must use the same prefix as when compressing. [clinic start generated code]*/ static PyObject * _zstd_ZstdDict_as_prefix_get_impl(ZstdDict *self) -/*[clinic end generated code: output=6f7130c356595a16 input=77966c012d15e6ab]*/ +/*[clinic end generated code: output=6f7130c356595a16 input=192681a899c6fad0]*/ { return Py_BuildValue("Oi", self, DICT_TYPE_PREFIX); } diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 646b73bd4af..9f613927be6 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -68,6 +68,7 @@ typedef struct { PyObject *str_write; PyObject *str___dict__; PyObject *str_iter; + PyObject *typecodes; } array_state; static array_state * @@ -292,49 +293,6 @@ BB_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) return 0; } -static PyObject * -u_getitem(arrayobject *ap, Py_ssize_t i) -{ - return PyUnicode_FromOrdinal(((wchar_t *) ap->ob_item)[i]); -} - -static int -u_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) -{ - if (!PyUnicode_Check(v)) { - PyErr_Format(PyExc_TypeError, - "array item must be a unicode character, not %T", - v); - return -1; - } - - Py_ssize_t len = PyUnicode_AsWideChar(v, NULL, 0); - if (len != 2) { - if (PyUnicode_GET_LENGTH(v) != 1) { - PyErr_Format(PyExc_TypeError, - "array item must be a unicode character, " - "not a string of length %zd", - PyUnicode_GET_LENGTH(v)); - } - else { - PyErr_Format(PyExc_TypeError, - "string %A cannot be converted to " - "a single wchar_t character", - v); - } - return -1; - } - - wchar_t w; - len = PyUnicode_AsWideChar(v, &w, 1); - assert(len == 1); - - if (i >= 0) { - ((wchar_t *)ap->ob_item)[i] = w; - } - return 0; -} - static PyObject * w_getitem(arrayobject *ap, Py_ssize_t i) { @@ -750,7 +708,6 @@ cd_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) DEFINE_COMPAREITEMS(b, signed char) DEFINE_COMPAREITEMS(BB, unsigned char) -DEFINE_COMPAREITEMS(u, wchar_t) DEFINE_COMPAREITEMS(w, Py_UCS4) DEFINE_COMPAREITEMS(h, short) DEFINE_COMPAREITEMS(HH, unsigned short) @@ -769,7 +726,6 @@ DEFINE_COMPAREITEMS(QQ, unsigned long long) static const struct arraydescr descriptors[] = { {"b", 1, b_getitem, b_setitem, b_compareitems, 1, 1}, {"B", 1, BB_getitem, BB_setitem, BB_compareitems, 1, 0}, - {"u", sizeof(wchar_t), u_getitem, u_setitem, u_compareitems, 0, 0}, {"w", sizeof(Py_UCS4), w_getitem, w_setitem, w_compareitems, 0, 0,}, {"h", sizeof(short), h_getitem, h_setitem, h_compareitems, 1, 1}, {"H", sizeof(short), HH_getitem, HH_setitem, HH_compareitems, 1, 0}, @@ -1534,13 +1490,13 @@ array.array.buffer_info Return a tuple (address, length) giving the current memory address and the length in items of the buffer used to hold array's contents. -The length should be multiplied by the itemsize attribute to calculate -the buffer length in bytes. +The length should be multiplied by the itemsize attribute to +calculate the buffer length in bytes. [clinic start generated code]*/ static PyObject * array_array_buffer_info_impl(arrayobject *self) -/*[clinic end generated code: output=9b2a4ec3ae7e98e7 input=63d9ad83ba60cda8]*/ +/*[clinic end generated code: output=9b2a4ec3ae7e98e7 input=c2771b9f6a8e1c86]*/ { PyObject* item1 = PyLong_FromVoidPtr(self->ob_item); if (item1 == NULL) { @@ -1572,19 +1528,18 @@ array_array_append_impl(arrayobject *self, PyObject *v) } /*[clinic input] -@permit_long_docstring_body array.array.byteswap Byteswap all items of the array. -If the items in the array are not 1, 2, 4, 8 or 16 bytes in size, RuntimeError -is raised. Note, that for complex types the order of +If the items in the array are not 1, 2, 4, 8 or 16 bytes in size, +RuntimeError is raised. Note, that for complex types the order of components (the real part, followed by imaginary part) is preserved. [clinic start generated code]*/ static PyObject * array_array_byteswap_impl(arrayobject *self) -/*[clinic end generated code: output=5f8236cbdf0d90b5 input=aafda275f48191d0]*/ +/*[clinic end generated code: output=5f8236cbdf0d90b5 input=8732f800e1b47bac]*/ { char *p; Py_ssize_t i; @@ -1967,7 +1922,6 @@ array_array_tobytes_impl(arrayobject *self) } /*[clinic input] -@permit_long_docstring_body array.array.fromunicode ustr: unicode @@ -1975,89 +1929,67 @@ array.array.fromunicode Extends this array with data from the unicode string ustr. -The array must be a unicode type array; otherwise a ValueError is raised. -Use array.frombytes(ustr.encode(...)) to append Unicode data to an array of -some other type. +The array must be a unicode type array; otherwise a ValueError is +raised. Use array.frombytes(ustr.encode(...)) to append Unicode +data to an array of some other type. [clinic start generated code]*/ static PyObject * array_array_fromunicode_impl(arrayobject *self, PyObject *ustr) -/*[clinic end generated code: output=24359f5e001a7f2b input=158d47c302f27ca1]*/ +/*[clinic end generated code: output=24359f5e001a7f2b input=01fa592ec7b948b6]*/ { const char *typecode = self->ob_descr->typecode; - if (strcmp(typecode, "u") != 0 && strcmp(typecode, "w") != 0) { + if (strcmp(typecode, "w") != 0) { PyErr_SetString(PyExc_ValueError, "fromunicode() may only be called on " - "unicode type arrays ('u' or 'w')"); + "unicode type ('w') arrays"); return NULL; } - if (strcmp(typecode, "u") == 0) { - Py_ssize_t ustr_length = PyUnicode_AsWideChar(ustr, NULL, 0); - assert(ustr_length > 0); - if (ustr_length > 1) { - ustr_length--; /* trim trailing NUL character */ - Py_ssize_t old_size = Py_SIZE(self); - if (array_resize(self, old_size + ustr_length) == -1) { - return NULL; - } + Py_ssize_t ustr_length = PyUnicode_GetLength(ustr); + Py_ssize_t old_size = Py_SIZE(self); + Py_ssize_t new_size = old_size + ustr_length; - // must not fail - PyUnicode_AsWideChar( - ustr, ((wchar_t *)self->ob_item) + old_size, ustr_length); - } + if (new_size < 0 || (size_t)new_size > PY_SSIZE_T_MAX / sizeof(Py_UCS4)) { + return PyErr_NoMemory(); } - else { // typecode == "w" - Py_ssize_t ustr_length = PyUnicode_GetLength(ustr); - Py_ssize_t old_size = Py_SIZE(self); - Py_ssize_t new_size = old_size + ustr_length; - - if (new_size < 0 || (size_t)new_size > PY_SSIZE_T_MAX / sizeof(Py_UCS4)) { - return PyErr_NoMemory(); - } - if (array_resize(self, new_size) == -1) { - return NULL; - } - - // must not fail - Py_UCS4 *u = PyUnicode_AsUCS4(ustr, ((Py_UCS4*)self->ob_item) + old_size, - ustr_length, 0); - assert(u != NULL); - (void)u; // Suppress unused_variable warning. + if (array_resize(self, new_size) == -1) { + return NULL; } + // must not fail + Py_UCS4 *u = PyUnicode_AsUCS4(ustr, ((Py_UCS4*)self->ob_item) + old_size, + ustr_length, 0); + assert(u != NULL); + (void)u; // Suppress unused_variable warning. + Py_RETURN_NONE; } /*[clinic input] -@permit_long_docstring_body array.array.tounicode Extends this array with data from the unicode string ustr. -Convert the array to a unicode string. The array must be a unicode type array; -otherwise a ValueError is raised. Use array.tobytes().decode() to obtain a -unicode string from an array of some other type. +Convert the array to a unicode string. The array must be a unicode +type array; otherwise a ValueError is raised. Use +array.tobytes().decode() to obtain a unicode string from an array of +some other type. [clinic start generated code]*/ static PyObject * array_array_tounicode_impl(arrayobject *self) -/*[clinic end generated code: output=08e442378336e1ef input=6690997213d219db]*/ +/*[clinic end generated code: output=08e442378336e1ef input=d4d5f398aa71a2be]*/ { const char *typecode = self->ob_descr->typecode; - if (strcmp(typecode, "u") != 0 && strcmp(typecode, "w") != 0) { + if (strcmp(typecode, "w") != 0) { PyErr_SetString(PyExc_ValueError, - "tounicode() may only be called on unicode type arrays ('u' or 'w')"); + "tounicode() may only be called on unicode type ('w') arrays"); return NULL; } - if (strcmp(typecode, "u") == 0) { - return PyUnicode_FromWideChar((wchar_t *) self->ob_item, Py_SIZE(self)); - } - else { // typecode == "w" - int byteorder = 0; // native byteorder - return PyUnicode_DecodeUTF32((const char *) self->ob_item, Py_SIZE(self) * 4, - NULL, &byteorder); - } + int byteorder = 0; // native byteorder + return PyUnicode_DecodeUTF32((const char *) self->ob_item, Py_SIZE(self) * 4, + NULL, &byteorder); } /*[clinic input] @@ -2133,15 +2065,6 @@ typecode_to_mformat_code(const char *typecode) case 'B': return UNSIGNED_INT8; - case 'u': - if (sizeof(wchar_t) == 2) { - return UTF16_LE + is_big_endian; - } - if (sizeof(wchar_t) == 4) { - return UTF32_LE + is_big_endian; - } - return UNKNOWN_FORMAT; - case 'w': return UTF32_LE + is_big_endian; @@ -2678,7 +2601,8 @@ static PyMethodDef array_methods[] = { ARRAY_ARRAY_TOBYTES_METHODDEF ARRAY_ARRAY_TOUNICODE_METHODDEF ARRAY_ARRAY___SIZEOF___METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("Arrays are generic over the type of their elements")}, {NULL, NULL} /* sentinel */ }; @@ -2696,7 +2620,7 @@ array_repr(PyObject *op) return PyUnicode_FromFormat("%s('%s')", _PyType_Name(Py_TYPE(a)), typecode); } - if (strcmp(typecode, "u") == 0 || strcmp(typecode, "w") == 0) { + if (strcmp(typecode, "w") == 0) { v = array_array_tounicode_impl(a); } else { v = array_array_tolist_impl(a); @@ -2966,9 +2890,6 @@ array_buffer_getbuf(PyObject *op, Py_buffer *view, int flags) view->internal = NULL; if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) { view->format = (char *)self->ob_descr->typecode; - if (sizeof(wchar_t) >= 4 && strcmp(self->ob_descr->typecode, "u") == 0) { - view->format = "w"; - } } self->ob_exports++; @@ -3003,16 +2924,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return NULL; } - if (strcmp(s, "u") == 0) { - if (PyErr_WarnEx(PyExc_DeprecationWarning, - "The 'u' type code is deprecated and " - "will be removed in Python 3.16", - 1)) { - return NULL; - } - } - - bool is_unicode = (strcmp(s, "u") == 0 || strcmp(s, "w") == 0); + bool is_unicode = (strcmp(s, "w") == 0); if (initial && !is_unicode) { if (PyUnicode_Check(initial)) { @@ -3022,7 +2934,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } else if (array_Check(initial, state)) { const char *is = ((arrayobject*)initial)->ob_descr->typecode; - if (strcmp(is, "u") == 0 || strcmp(is, "w") == 0) { + if (strcmp(is, "w") == 0) { PyErr_Format(PyExc_TypeError, "cannot use a unicode array to " "initialize an array with typecode '%s'", s); return NULL; @@ -3098,43 +3010,21 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_DECREF(v); } else if (initial != NULL && PyUnicode_Check(initial)) { - if (strcmp(s, "u") == 0) { - Py_ssize_t n; - wchar_t *ustr = PyUnicode_AsWideCharString(initial, &n); - if (ustr == NULL) { - Py_DECREF(a); - Py_XDECREF(it); - return NULL; - } - - if (n > 0) { - arrayobject *self = (arrayobject *)a; - // self->ob_item may be NULL but it is safe. - PyMem_Free(self->ob_item); - self->ob_item = (char *)ustr; - Py_SET_SIZE(self, n); - self->allocated = n; - } - else { - PyMem_Free(ustr); - } + assert(strcmp(descr->typecode, "w") == 0); + Py_ssize_t n = PyUnicode_GET_LENGTH(initial); + Py_UCS4 *ustr = PyUnicode_AsUCS4Copy(initial); + if (ustr == NULL) { + Py_DECREF(a); + Py_XDECREF(it); + return NULL; } - else { // s == "w" - Py_ssize_t n = PyUnicode_GET_LENGTH(initial); - Py_UCS4 *ustr = PyUnicode_AsUCS4Copy(initial); - if (ustr == NULL) { - Py_DECREF(a); - Py_XDECREF(it); - return NULL; - } - arrayobject *self = (arrayobject *)a; - // self->ob_item may be NULL but it is safe. - PyMem_Free(self->ob_item); - self->ob_item = (char *)ustr; - Py_SET_SIZE(self, n); - self->allocated = n; - } + arrayobject *self = (arrayobject *)a; + // self->ob_item may be NULL but it is safe. + PyMem_Free(self->ob_item); + self->ob_item = (char *)ustr; + Py_SET_SIZE(self, n); + self->allocated = n; } else if (initial != NULL && array_Check(initial, state) && len > 0) { arrayobject *self = (arrayobject *)a; @@ -3153,8 +3043,18 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } } Py_XDECREF(it); - PyErr_SetString(PyExc_ValueError, - "bad typecode (must be b, B, u, w, h, H, i, I, l, L, q, Q, e, f, d, Zf or Zd)"); + + PyObject *sep = PyUnicode_FromString(", "); + if (sep == NULL) { + return NULL; + } + PyObject *msg = PyObject_CallMethod(sep, "join", "(O)", state->typecodes); + Py_DECREF(sep); + if (msg == NULL) { + return NULL; + } + PyErr_Format(PyExc_ValueError, "bad typecode (must be: %S)", msg); + Py_DECREF(msg); return NULL; } @@ -3180,7 +3080,6 @@ The following type codes are defined:\n\ Type code C Type Minimum size in bytes\n\ 'b' signed integer 1\n\ 'B' unsigned integer 1\n\ - 'u' Unicode character 2 (see note)\n\ 'h' signed integer 2\n\ 'H' unsigned integer 2\n\ 'i' signed integer 2\n\ @@ -3195,9 +3094,6 @@ The following type codes are defined:\n\ 'Zf' float complex 8\n\ 'Zd' double complex 16\n\ \n\ -NOTE: The 'u' typecode corresponds to Python's unicode character. On\n\ -narrow builds this is 2-bytes on wide builds this is 4-bytes.\n\ -\n\ NOTE: The 'q' and 'Q' type codes are only available if the platform\n\ C compiler used to build Python supports 'long long', or, on Windows,\n\ '__int64'.\n\ @@ -3439,6 +3335,7 @@ array_traverse(PyObject *module, visitproc visit, void *arg) Py_VISIT(state->ArrayType); Py_VISIT(state->ArrayIterType); Py_VISIT(state->array_reconstructor); + Py_VISIT(state->typecodes); return 0; } @@ -3453,6 +3350,7 @@ array_clear(PyObject *module) Py_CLEAR(state->str_write); Py_CLEAR(state->str___dict__); Py_CLEAR(state->str_iter); + Py_CLEAR(state->typecodes); return 0; } @@ -3549,6 +3447,7 @@ array_modexec(PyObject *m) if (tuple == NULL) { return -1; } + state->typecodes = Py_NewRef(tuple); if (PyModule_Add(m, "typecodes", tuple) < 0) { return -1; } diff --git a/Modules/cjkcodecs/clinic/multibytecodec.c.h b/Modules/cjkcodecs/clinic/multibytecodec.c.h index b3663180d72..32588b0561e 100644 --- a/Modules/cjkcodecs/clinic/multibytecodec.c.h +++ b/Modules/cjkcodecs/clinic/multibytecodec.c.h @@ -14,10 +14,11 @@ PyDoc_STRVAR(_multibytecodec_MultibyteCodec_encode__doc__, "\n" "Return an encoded string version of \'input\'.\n" "\n" -"\'errors\' may be given to set a different error handling scheme. Default is\n" -"\'strict\' meaning that encoding errors raise a UnicodeEncodeError. Other possible\n" -"values are \'ignore\', \'replace\' and \'xmlcharrefreplace\' as well as any other name\n" -"registered with codecs.register_error that can handle UnicodeEncodeErrors."); +"\'errors\' may be given to set a different error handling scheme.\n" +"Default is \'strict\' meaning that encoding errors raise\n" +"a UnicodeEncodeError. Other possible values are \'ignore\', \'replace\'\n" +"and \'xmlcharrefreplace\' as well as any other name registered with\n" +"codecs.register_error that can handle UnicodeEncodeErrors."); #define _MULTIBYTECODEC_MULTIBYTECODEC_ENCODE_METHODDEF \ {"encode", _PyCFunction_CAST(_multibytecodec_MultibyteCodec_encode), METH_FASTCALL|METH_KEYWORDS, _multibytecodec_MultibyteCodec_encode__doc__}, @@ -103,9 +104,10 @@ PyDoc_STRVAR(_multibytecodec_MultibyteCodec_decode__doc__, "\n" "Decodes \'input\'.\n" "\n" -"\'errors\' may be given to set a different error handling scheme. Default is\n" -"\'strict\' meaning that encoding errors raise a UnicodeDecodeError. Other possible\n" -"values are \'ignore\' and \'replace\' as well as any other name registered with\n" +"\'errors\' may be given to set a different error handling scheme.\n" +"Default is \'strict\' meaning that encoding errors raise\n" +"a UnicodeDecodeError. Other possible values are \'ignore\' and\n" +"\'replace\' as well as any other name registered with\n" "codecs.register_error that is able to handle UnicodeDecodeErrors.\""); #define _MULTIBYTECODEC_MULTIBYTECODEC_DECODE_METHODDEF \ @@ -696,4 +698,4 @@ PyDoc_STRVAR(_multibytecodec___create_codec__doc__, #define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \ {"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__}, -/*[clinic end generated code: output=014f4f6bb9d29594 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a84b1544d7d01abb input=a9049054013a1b77]*/ diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index f1124147e2b..32c96c9d2cb 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -582,7 +582,6 @@ multibytecodec_encode(const MultibyteCodec *codec, } /*[clinic input] -@permit_long_docstring_body _multibytecodec.MultibyteCodec.encode input: object @@ -590,17 +589,18 @@ _multibytecodec.MultibyteCodec.encode Return an encoded string version of 'input'. -'errors' may be given to set a different error handling scheme. Default is -'strict' meaning that encoding errors raise a UnicodeEncodeError. Other possible -values are 'ignore', 'replace' and 'xmlcharrefreplace' as well as any other name -registered with codecs.register_error that can handle UnicodeEncodeErrors. +'errors' may be given to set a different error handling scheme. +Default is 'strict' meaning that encoding errors raise +a UnicodeEncodeError. Other possible values are 'ignore', 'replace' +and 'xmlcharrefreplace' as well as any other name registered with +codecs.register_error that can handle UnicodeEncodeErrors. [clinic start generated code]*/ static PyObject * _multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, PyObject *input, const char *errors) -/*[clinic end generated code: output=7b26652045ba56a9 input=0980aede2c564df8]*/ +/*[clinic end generated code: output=7b26652045ba56a9 input=980002ed1447697b]*/ { MultibyteCodec_State state; PyObject *errorcb, *r, *ucvt; @@ -648,7 +648,6 @@ _multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self, } /*[clinic input] -@permit_long_docstring_body _multibytecodec.MultibyteCodec.decode input: Py_buffer @@ -656,9 +655,10 @@ _multibytecodec.MultibyteCodec.decode Decodes 'input'. -'errors' may be given to set a different error handling scheme. Default is -'strict' meaning that encoding errors raise a UnicodeDecodeError. Other possible -values are 'ignore' and 'replace' as well as any other name registered with +'errors' may be given to set a different error handling scheme. +Default is 'strict' meaning that encoding errors raise +a UnicodeDecodeError. Other possible values are 'ignore' and +'replace' as well as any other name registered with codecs.register_error that is able to handle UnicodeDecodeErrors." [clinic start generated code]*/ @@ -666,7 +666,7 @@ static PyObject * _multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self, Py_buffer *input, const char *errors) -/*[clinic end generated code: output=ff419f65bad6cc77 input=2c657ef914600c7c]*/ +/*[clinic end generated code: output=ff419f65bad6cc77 input=dbf93d8bb98ca440]*/ { MultibyteCodec_State state; MultibyteDecodeBuffer buf; diff --git a/Modules/clinic/_abc.c.h b/Modules/clinic/_abc.c.h index 04681fa2206..fa1c57dc26b 100644 --- a/Modules/clinic/_abc.c.h +++ b/Modules/clinic/_abc.c.h @@ -146,9 +146,9 @@ PyDoc_STRVAR(_abc_get_cache_token__doc__, "\n" "Returns the current ABC cache token.\n" "\n" -"The token is an opaque object (supporting equality testing) identifying the\n" -"current version of the ABC cache for virtual subclasses. The token changes\n" -"with every call to register() on any ABC."); +"The token is an opaque object (supporting equality testing) identifying\n" +"the current version of the ABC cache for virtual subclasses. The token\n" +"changes with every call to register() on any ABC."); #define _ABC_GET_CACHE_TOKEN_METHODDEF \ {"get_cache_token", (PyCFunction)_abc_get_cache_token, METH_NOARGS, _abc_get_cache_token__doc__}, @@ -161,4 +161,4 @@ _abc_get_cache_token(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _abc_get_cache_token_impl(module); } -/*[clinic end generated code: output=1989b6716c950e17 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b05d599656aeb1e1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_asynciomodule.c.h b/Modules/clinic/_asynciomodule.c.h index 66953d74213..f07a09df5ac 100644 --- a/Modules/clinic/_asynciomodule.c.h +++ b/Modules/clinic/_asynciomodule.c.h @@ -90,7 +90,8 @@ PyDoc_STRVAR(_asyncio_Future_result__doc__, "\n" "If the future has been cancelled, raises CancelledError. If the\n" "future\'s result isn\'t yet available, raises InvalidStateError. If\n" -"the future is done and has an exception set, this exception is raised."); +"the future is done and has an exception set, this exception is\n" +"raised."); #define _ASYNCIO_FUTURE_RESULT_METHODDEF \ {"result", (PyCFunction)_asyncio_Future_result, METH_NOARGS, _asyncio_Future_result__doc__}, @@ -250,8 +251,8 @@ PyDoc_STRVAR(_asyncio_Future_add_done_callback__doc__, "\n" "Add a callback to be run when the future becomes done.\n" "\n" -"The callback is called with a single argument - the future object. If\n" -"the future is already done when this is called, the callback is\n" +"The callback is called with a single argument - the future object.\n" +"If the future is already done when this is called, the callback is\n" "scheduled with call_soon."); #define _ASYNCIO_FUTURE_ADD_DONE_CALLBACK_METHODDEF \ @@ -371,9 +372,9 @@ PyDoc_STRVAR(_asyncio_Future_cancel__doc__, "\n" "Cancel the future and schedule callbacks.\n" "\n" -"If the future is already done or cancelled, return False. Otherwise,\n" -"change the future\'s state to cancelled, schedule the callbacks and\n" -"return True."); +"If the future is already done or cancelled, return False.\n" +"Otherwise, change the future\'s state to cancelled, schedule the\n" +"callbacks and return True."); #define _ASYNCIO_FUTURE_CANCEL_METHODDEF \ {"cancel", _PyCFunction_CAST(_asyncio_Future_cancel), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _asyncio_Future_cancel__doc__}, @@ -465,8 +466,8 @@ PyDoc_STRVAR(_asyncio_Future_done__doc__, "\n" "Return True if the future is done.\n" "\n" -"Done means either that a result / exception are available, or that the\n" -"future was cancelled."); +"Done means either that a result / exception are available, or that\n" +"the future was cancelled."); #define _ASYNCIO_FUTURE_DONE_METHODDEF \ {"done", (PyCFunction)_asyncio_Future_done, METH_NOARGS, _asyncio_Future_done__doc__}, @@ -2232,4 +2233,4 @@ _asyncio_future_discard_from_awaited_by(PyObject *module, PyObject *const *args, exit: return return_value; } -/*[clinic end generated code: output=b69948ed810591d9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=32996fb47c48245b input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_bisectmodule.c.h b/Modules/clinic/_bisectmodule.c.h index 8f3492cd54b..454131faf41 100644 --- a/Modules/clinic/_bisectmodule.c.h +++ b/Modules/clinic/_bisectmodule.c.h @@ -16,8 +16,8 @@ PyDoc_STRVAR(_bisect_bisect_right__doc__, "Return the index where to insert item x in list a, assuming a is sorted.\n" "\n" "The return value i is such that all e in a[:i] have e <= x, and all e in\n" -"a[i:] have e > x. So if x already appears in the list, a.insert(i, x) will\n" -"insert just after the rightmost x already there.\n" +"a[i:] have e > x. So if x already appears in the list, a.insert(i, x)\n" +"will insert just after the rightmost x already there.\n" "\n" "Optional args lo (default 0) and hi (default len(a)) bound the\n" "slice of a to be searched.\n" @@ -245,8 +245,8 @@ PyDoc_STRVAR(_bisect_bisect_left__doc__, "Return the index where to insert item x in list a, assuming a is sorted.\n" "\n" "The return value i is such that all e in a[:i] have e < x, and all e in\n" -"a[i:] have e >= x. So if x already appears in the list, a.insert(i, x) will\n" -"insert just before the leftmost x already there.\n" +"a[i:] have e >= x. So if x already appears in the list, a.insert(i, x)\n" +"will insert just before the leftmost x already there.\n" "\n" "Optional args lo (default 0) and hi (default len(a)) bound the\n" "slice of a to be searched.\n" @@ -466,4 +466,4 @@ _bisect_insort_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, P exit: return return_value; } -/*[clinic end generated code: output=a3c44ed440dd6d81 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=62345f14c5c01639 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h index 2bc6524b6a9..30f2c7965e7 100644 --- a/Modules/clinic/_bz2module.c.h +++ b/Modules/clinic/_bz2module.c.h @@ -116,18 +116,19 @@ PyDoc_STRVAR(_bz2_BZ2Decompressor_decompress__doc__, "\n" "Decompress *data*, returning uncompressed data as bytes.\n" "\n" -"If *max_length* is nonnegative, returns at most *max_length* bytes of\n" -"decompressed data. If this limit is reached and further output can be\n" -"produced, *self.needs_input* will be set to ``False``. In this case, the next\n" -"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n" +"If *max_length* is nonnegative, returns at most *max_length* bytes\n" +"of decompressed data. If this limit is reached and further output\n" +"can be produced, *self.needs_input* will be set to ``False``. In\n" +"this case, the next call to *decompress()* may provide *data* as b\'\'\n" +"to obtain more of the output.\n" "\n" -"If all of the input data was decompressed and returned (either because this\n" -"was less than *max_length* bytes, or because *max_length* was negative),\n" -"*self.needs_input* will be set to True.\n" +"If all of the input data was decompressed and returned (either\n" +"because this was less than *max_length* bytes, or because\n" +"*max_length* was negative), *self.needs_input* will be set to True.\n" "\n" -"Attempting to decompress data after the end of stream is reached raises an\n" -"EOFError. Any data found after the end of the stream is ignored and saved in\n" -"the unused_data attribute."); +"Attempting to decompress data after the end of stream is reached\n" +"raises an EOFError. Any data found after the end of the stream is\n" +"ignored and saved in the unused_data attribute."); #define _BZ2_BZ2DECOMPRESSOR_DECOMPRESS_METHODDEF \ {"decompress", _PyCFunction_CAST(_bz2_BZ2Decompressor_decompress), METH_FASTCALL|METH_KEYWORDS, _bz2_BZ2Decompressor_decompress__doc__}, @@ -237,4 +238,4 @@ _bz2_BZ2Decompressor(PyTypeObject *type, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=552ac6d4c5a101b7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1dce5396d592bad7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index 9e2a7950ebd..4a40dc660b6 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -14,9 +14,10 @@ PyDoc_STRVAR(_codecs_register__doc__, "\n" "Register a codec search function.\n" "\n" -"Search functions are expected to take one argument, the encoding name in\n" -"all lower case letters, and either return None, or a tuple of functions\n" -"(encoder, decoder, stream_reader, stream_writer) (or a CodecInfo object)."); +"Search functions are expected to take one argument, the encoding\n" +"name in all lower case letters, and either return None, or a tuple\n" +"of functions (encoder, decoder, stream_reader, stream_writer) (or\n" +"a CodecInfo object)."); #define _CODECS_REGISTER_METHODDEF \ {"register", (PyCFunction)_codecs_register, METH_O, _codecs_register__doc__}, @@ -76,10 +77,10 @@ PyDoc_STRVAR(_codecs_encode__doc__, "Encodes obj using the codec registered for encoding.\n" "\n" "The default encoding is \'utf-8\'. errors may be given to set a\n" -"different error handling scheme. Default is \'strict\' meaning that encoding\n" -"errors raise a ValueError. Other possible values are \'ignore\', \'replace\'\n" -"and \'backslashreplace\' as well as any other name registered with\n" -"codecs.register_error that can handle ValueErrors."); +"different error handling scheme. Default is \'strict\' meaning that\n" +"encoding errors raise a ValueError. Other possible values are \'ignore\',\n" +"\'replace\' and \'backslashreplace\' as well as any other name registered\n" +"with codecs.register_error that can handle ValueErrors."); #define _CODECS_ENCODE_METHODDEF \ {"encode", _PyCFunction_CAST(_codecs_encode), METH_FASTCALL|METH_KEYWORDS, _codecs_encode__doc__}, @@ -179,10 +180,10 @@ PyDoc_STRVAR(_codecs_decode__doc__, "Decodes obj using the codec registered for encoding.\n" "\n" "Default encoding is \'utf-8\'. errors may be given to set a\n" -"different error handling scheme. Default is \'strict\' meaning that encoding\n" -"errors raise a ValueError. Other possible values are \'ignore\', \'replace\'\n" -"and \'backslashreplace\' as well as any other name registered with\n" -"codecs.register_error that can handle ValueErrors."); +"different error handling scheme. Default is \'strict\' meaning that\n" +"encoding errors raise a ValueError. Other possible values are \'ignore\',\n" +"\'replace\' and \'backslashreplace\' as well as any other name registered\n" +"with codecs.register_error that can handle ValueErrors."); #define _CODECS_DECODE_METHODDEF \ {"decode", _PyCFunction_CAST(_codecs_decode), METH_FASTCALL|METH_KEYWORDS, _codecs_decode__doc__}, @@ -2649,8 +2650,9 @@ PyDoc_STRVAR(_codecs_register_error__doc__, "Register the specified error handler under the name errors.\n" "\n" "handler must be a callable object, that will be called with an exception\n" -"instance containing information about the location of the encoding/decoding\n" -"error and must return a (replacement, new position) tuple."); +"instance containing information about the location of the\n" +"encoding/decoding error and must return a (replacement, new position)\n" +"tuple."); #define _CODECS_REGISTER_ERROR_METHODDEF \ {"register_error", _PyCFunction_CAST(_codecs_register_error), METH_FASTCALL, _codecs_register_error__doc__}, @@ -2745,8 +2747,8 @@ PyDoc_STRVAR(_codecs_lookup_error__doc__, "\n" "lookup_error(errors) -> handler\n" "\n" -"Return the error handler for the specified error handling name or raise a\n" -"LookupError, if no handler exists under this name."); +"Return the error handler for the specified error handling name or raise\n" +"a LookupError, if no handler exists under this name."); #define _CODECS_LOOKUP_ERROR_METHODDEF \ {"lookup_error", (PyCFunction)_codecs_lookup_error, METH_O, _codecs_lookup_error__doc__}, @@ -2866,4 +2868,4 @@ _codecs__normalize_encoding(PyObject *module, PyObject *const *args, Py_ssize_t #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=a968c493bb28be3e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=505edef891a06329 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_curses_panel.c.h b/Modules/clinic/_curses_panel.c.h index 75cf067c8aa..d8b2cba7fd3 100644 --- a/Modules/clinic/_curses_panel.c.h +++ b/Modules/clinic/_curses_panel.c.h @@ -28,7 +28,8 @@ PyDoc_STRVAR(_curses_panel_panel_hide__doc__, "\n" "Hide the panel.\n" "\n" -"This does not delete the object, it just makes the window on screen invisible."); +"This does not delete the object, it just makes the window on screen\n" +"invisible."); #define _CURSES_PANEL_PANEL_HIDE_METHODDEF \ {"hide", (PyCFunction)_curses_panel_panel_hide, METH_NOARGS, _curses_panel_panel_hide__doc__}, @@ -328,7 +329,8 @@ PyDoc_STRVAR(_curses_panel_update_panels__doc__, "\n" "Updates the virtual screen after changes in the panel stack.\n" "\n" -"This does not call curses.doupdate(), so you\'ll have to do this yourself."); +"This does not call curses.doupdate(), so you\'ll have to do this\n" +"yourself."); #define _CURSES_PANEL_UPDATE_PANELS_METHODDEF \ {"update_panels", (PyCFunction)_curses_panel_update_panels, METH_NOARGS, _curses_panel_update_panels__doc__}, @@ -341,4 +343,4 @@ _curses_panel_update_panels(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _curses_panel_update_panels_impl(module); } -/*[clinic end generated code: output=db2fe491582784aa input=a9049054013a1b77]*/ +/*[clinic end generated code: output=62f20ef03eefdf44 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cursesmodule.c.h b/Modules/clinic/_cursesmodule.c.h index e6f9798cdf1..eec9e82739b 100644 --- a/Modules/clinic/_cursesmodule.c.h +++ b/Modules/clinic/_cursesmodule.c.h @@ -422,10 +422,10 @@ PyDoc_STRVAR(_curses_window_border__doc__, " br\n" " Bottom-right corner.\n" "\n" -"Each parameter specifies the character to use for a specific part of the\n" -"border. The characters can be specified as integers or as one-character\n" -"strings. A 0 value for any parameter will cause the default character to be\n" -"used for that parameter."); +"Each parameter specifies the character to use for a specific part of\n" +"the border. The characters can be specified as integers or as\n" +"one-character strings. A 0 value for any parameter will cause the\n" +"default character to be used for that parameter."); #define _CURSES_WINDOW_BORDER_METHODDEF \ {"border", _PyCFunction_CAST(_curses_window_border), METH_FASTCALL, _curses_window_border__doc__}, @@ -500,8 +500,9 @@ PyDoc_STRVAR(_curses_window_box__doc__, " horch\n" " Top and bottom side.\n" "\n" -"Similar to border(), but both ls and rs are verch and both ts and bs are\n" -"horch. The default corner characters are always used by this function."); +"Similar to border(), but both ls and rs are verch and both ts and bs\n" +"are horch. The default corner characters are always used by this\n" +"function."); #define _CURSES_WINDOW_BOX_METHODDEF \ {"box", (PyCFunction)_curses_window_box, METH_VARARGS, _curses_window_box__doc__}, @@ -593,9 +594,9 @@ PyDoc_STRVAR(_curses_window_derwin__doc__, " begin_x\n" " Left side x-coordinate.\n" "\n" -"derwin() is the same as calling subwin(), except that begin_y and begin_x\n" -"are relative to the origin of the window, rather than relative to the entire\n" -"screen."); +"derwin() is the same as calling subwin(), except that begin_y and\n" +"begin_x are relative to the origin of the window, rather than\n" +"relative to the entire screen."); #define _CURSES_WINDOW_DERWIN_METHODDEF \ {"derwin", (PyCFunction)_curses_window_derwin, METH_VARARGS, _curses_window_derwin__doc__}, @@ -751,9 +752,10 @@ PyDoc_STRVAR(_curses_window_getch__doc__, " x\n" " X-coordinate.\n" "\n" -"The integer returned does not have to be in ASCII range: function keys,\n" -"keypad keys and so on return numbers higher than 256. In no-delay mode, -1\n" -"is returned if there is no input, else getch() waits until a key is pressed."); +"The integer returned does not have to be in ASCII range: function\n" +"keys, keypad keys and so on return numbers higher than 256. In\n" +"no-delay mode, -1 is returned if there is no input, else getch()\n" +"waits until a key is pressed."); #define _CURSES_WINDOW_GETCH_METHODDEF \ {"getch", (PyCFunction)_curses_window_getch, METH_VARARGS, _curses_window_getch__doc__}, @@ -798,9 +800,10 @@ PyDoc_STRVAR(_curses_window_getkey__doc__, " x\n" " X-coordinate.\n" "\n" -"Returning a string instead of an integer, as getch() does. Function keys,\n" -"keypad keys and other special keys return a multibyte string containing the\n" -"key name. In no-delay mode, an exception is raised if there is no input."); +"Returning a string instead of an integer, as getch() does. Function\n" +"keys, keypad keys and other special keys return a multibyte string\n" +"containing the key name. In no-delay mode, an exception is raised\n" +"if there is no input."); #define _CURSES_WINDOW_GETKEY_METHODDEF \ {"getkey", (PyCFunction)_curses_window_getkey, METH_VARARGS, _curses_window_getkey__doc__}, @@ -969,8 +972,8 @@ PyDoc_STRVAR(_curses_window_insch__doc__, " attr\n" " Attributes for the character.\n" "\n" -"All characters to the right of the cursor are shifted one position right, with\n" -"the rightmost characters on the line being lost."); +"All characters to the right of the cursor are shifted one position\n" +"right, with the rightmost characters on the line being lost."); #define _CURSES_WINDOW_INSCH_METHODDEF \ {"insch", (PyCFunction)_curses_window_insch, METH_VARARGS, _curses_window_insch__doc__}, @@ -1035,7 +1038,8 @@ PyDoc_STRVAR(_curses_window_inch__doc__, " x\n" " X-coordinate.\n" "\n" -"The bottom 8 bits are the character proper, and upper bits are the attributes."); +"The bottom 8 bits are the character proper, and upper bits are the\n" +"attributes."); #define _CURSES_WINDOW_INCH_METHODDEF \ {"inch", (PyCFunction)_curses_window_inch, METH_VARARGS, _curses_window_inch__doc__}, @@ -1084,11 +1088,11 @@ PyDoc_STRVAR(_curses_window_insstr__doc__, " attr\n" " Attributes for characters.\n" "\n" -"Insert a character string (as many characters as will fit on the line)\n" -"before the character under the cursor. All characters to the right of\n" -"the cursor are shifted right, with the rightmost characters on the line\n" -"being lost. The cursor position does not change (after moving to y, x,\n" -"if specified)."); +"Insert a character string (as many characters as will fit on the\n" +"line) before the character under the cursor. All characters to the\n" +"right of the cursor are shifted right, with the rightmost characters\n" +"on the line being lost. The cursor position does not change (after\n" +"moving to y, x, if specified)."); #define _CURSES_WINDOW_INSSTR_METHODDEF \ {"insstr", (PyCFunction)_curses_window_insstr, METH_VARARGS, _curses_window_insstr__doc__}, @@ -1159,12 +1163,12 @@ PyDoc_STRVAR(_curses_window_insnstr__doc__, " attr\n" " Attributes for characters.\n" "\n" -"Insert a character string (as many characters as will fit on the line)\n" -"before the character under the cursor, up to n characters. If n is zero\n" -"or negative, the entire string is inserted. All characters to the right\n" -"of the cursor are shifted right, with the rightmost characters on the line\n" -"being lost. The cursor position does not change (after moving to y, x, if\n" -"specified)."); +"Insert a character string (as many characters as will fit on the\n" +"line) before the character under the cursor, up to n characters. If\n" +"n is zero or negative, the entire string is inserted. All\n" +"characters to the right of the cursor are shifted right, with the\n" +"rightmost characters on the line being lost. The cursor position\n" +"does not change (after moving to y, x, if specified)."); #define _CURSES_WINDOW_INSNSTR_METHODDEF \ {"insnstr", (PyCFunction)_curses_window_insnstr, METH_VARARGS, _curses_window_insnstr__doc__}, @@ -1230,7 +1234,8 @@ PyDoc_STRVAR(_curses_window_is_linetouched__doc__, " line\n" " Line number.\n" "\n" -"Raise a curses.error exception if line is not valid for the given window."); +"Raise a curses.error exception if line is not valid for the given\n" +"window."); #define _CURSES_WINDOW_IS_LINETOUCHED_METHODDEF \ {"is_linetouched", (PyCFunction)_curses_window_is_linetouched, METH_O, _curses_window_is_linetouched__doc__}, @@ -1260,9 +1265,9 @@ PyDoc_STRVAR(_curses_window_noutrefresh__doc__, "noutrefresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])\n" "Mark for refresh but wait.\n" "\n" -"This function updates the data structure representing the desired state of the\n" -"window, but does not force an update of the physical screen. To accomplish\n" -"that, call doupdate()."); +"This function updates the data structure representing the desired\n" +"state of the window, but does not force an update of the physical\n" +"screen. To accomplish that, call doupdate()."); #define _CURSES_WINDOW_NOUTREFRESH_METHODDEF \ {"noutrefresh", (PyCFunction)_curses_window_noutrefresh, METH_VARARGS, _curses_window_noutrefresh__doc__}, @@ -1314,9 +1319,9 @@ PyDoc_STRVAR(_curses_window_noutrefresh__doc__, "\n" "Mark for refresh but wait.\n" "\n" -"This function updates the data structure representing the desired state of the\n" -"window, but does not force an update of the physical screen. To accomplish\n" -"that, call doupdate()."); +"This function updates the data structure representing the desired\n" +"state of the window, but does not force an update of the physical\n" +"screen. To accomplish that, call doupdate()."); #define _CURSES_WINDOW_NOUTREFRESH_METHODDEF \ {"noutrefresh", (PyCFunction)_curses_window_noutrefresh, METH_NOARGS, _curses_window_noutrefresh__doc__}, @@ -1336,14 +1341,15 @@ PyDoc_STRVAR(_curses_window_overlay__doc__, "overlay(destwin, [sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])\n" "Overlay the window on top of destwin.\n" "\n" -"The windows need not be the same size, only the overlapping region is copied.\n" -"This copy is non-destructive, which means that the current background\n" -"character does not overwrite the old contents of destwin.\n" +"The windows need not be the same size, only the overlapping region\n" +"is copied. This copy is non-destructive, which means that the\n" +"current background character does not overwrite the old contents of\n" +"destwin.\n" "\n" -"To get fine-grained control over the copied region, the second form of\n" -"overlay() can be used. sminrow and smincol are the upper-left coordinates\n" -"of the source window, and the other variables mark a rectangle in the\n" -"destination window."); +"To get fine-grained control over the copied region, the second form\n" +"of overlay() can be used. sminrow and smincol are the upper-left\n" +"coordinates of the source window, and the other variables mark\n" +"a rectangle in the destination window."); #define _CURSES_WINDOW_OVERLAY_METHODDEF \ {"overlay", (PyCFunction)_curses_window_overlay, METH_VARARGS, _curses_window_overlay__doc__}, @@ -1394,14 +1400,15 @@ PyDoc_STRVAR(_curses_window_overwrite__doc__, " dmaxcol])\n" "Overwrite the window on top of destwin.\n" "\n" -"The windows need not be the same size, in which case only the overlapping\n" -"region is copied. This copy is destructive, which means that the current\n" -"background character overwrites the old contents of destwin.\n" +"The windows need not be the same size, in which case only the\n" +"overlapping region is copied. This copy is destructive, which means\n" +"that the current background character overwrites the old contents of\n" +"destwin.\n" "\n" -"To get fine-grained control over the copied region, the second form of\n" -"overwrite() can be used. sminrow and smincol are the upper-left coordinates\n" -"of the source window, the other variables mark a rectangle in the destination\n" -"window."); +"To get fine-grained control over the copied region, the second form\n" +"of overwrite() can be used. sminrow and smincol are the upper-left\n" +"coordinates of the source window, the other variables mark\n" +"a rectangle in the destination window."); #define _CURSES_WINDOW_OVERWRITE_METHODDEF \ {"overwrite", (PyCFunction)_curses_window_overwrite, METH_VARARGS, _curses_window_overwrite__doc__}, @@ -1520,16 +1527,17 @@ PyDoc_STRVAR(_curses_window_refresh__doc__, "Update the display immediately.\n" "\n" "Synchronize actual screen with previous drawing/deleting methods.\n" -"The 6 optional arguments can only be specified when the window is a pad\n" -"created with newpad(). The additional parameters are needed to indicate\n" -"what part of the pad and screen are involved. pminrow and pmincol specify\n" -"the upper left-hand corner of the rectangle to be displayed in the pad.\n" -"sminrow, smincol, smaxrow, and smaxcol specify the edges of the rectangle to\n" -"be displayed on the screen. The lower right-hand corner of the rectangle to\n" -"be displayed in the pad is calculated from the screen coordinates, since the\n" -"rectangles must be the same size. Both rectangles must be entirely contained\n" -"within their respective structures. Negative values of pminrow, pmincol,\n" -"sminrow, or smincol are treated as if they were zero."); +"The 6 optional arguments can only be specified when the window is\n" +"a pad created with newpad(). The additional parameters are needed\n" +"to indicate what part of the pad and screen are involved. pminrow\n" +"and pmincol specify the upper left-hand corner of the rectangle to\n" +"be displayed in the pad. sminrow, smincol, smaxrow, and smaxcol\n" +"specify the edges of the rectangle to be displayed on the screen.\n" +"The lower right-hand corner of the rectangle to be displayed in the\n" +"pad is calculated from the screen coordinates, since the rectangles\n" +"must be the same size. Both rectangles must be entirely contained\n" +"within their respective structures. Negative values of pminrow,\n" +"pmincol, sminrow, or smincol are treated as if they were zero."); #define _CURSES_WINDOW_REFRESH_METHODDEF \ {"refresh", (PyCFunction)_curses_window_refresh, METH_VARARGS, _curses_window_refresh__doc__}, @@ -1627,8 +1635,8 @@ PyDoc_STRVAR(_curses_window_subwin__doc__, " begin_x\n" " Left side x-coordinate.\n" "\n" -"By default, the sub-window will extend from the specified position to the\n" -"lower right corner of the window."); +"By default, the sub-window will extend from the specified position\n" +"to the lower right corner of the window."); #define _CURSES_WINDOW_SUBWIN_METHODDEF \ {"subwin", (PyCFunction)_curses_window_subwin, METH_VARARGS, _curses_window_subwin__doc__}, @@ -1676,7 +1684,8 @@ PyDoc_STRVAR(_curses_window_scroll__doc__, " lines\n" " Number of lines to scroll.\n" "\n" -"Scroll upward if the argument is positive and downward if it is negative."); +"Scroll upward if the argument is positive and downward if it is\n" +"negative."); #define _CURSES_WINDOW_SCROLL_METHODDEF \ {"scroll", (PyCFunction)_curses_window_scroll, METH_VARARGS, _curses_window_scroll__doc__}, @@ -1715,8 +1724,9 @@ PyDoc_STRVAR(_curses_window_touchline__doc__, "touchline(start, count, [changed=True])\n" "Pretend count lines have been changed, starting with line start.\n" "\n" -"If changed is supplied, it specifies whether the affected lines are marked\n" -"as having been changed (changed=True) or unchanged (changed=False)."); +"If changed is supplied, it specifies whether the affected lines are\n" +"marked as having been changed (changed=True) or unchanged\n" +"(changed=False)."); #define _CURSES_WINDOW_TOUCHLINE_METHODDEF \ {"touchline", (PyCFunction)_curses_window_touchline, METH_VARARGS, _curses_window_touchline__doc__}, @@ -1910,11 +1920,12 @@ PyDoc_STRVAR(_curses_cbreak__doc__, " flag\n" " If false, the effect is the same as calling nocbreak().\n" "\n" -"In cbreak mode (sometimes called \"rare\" mode) normal tty line buffering is\n" -"turned off and characters are available to be read one by one. However,\n" -"unlike raw mode, special characters (interrupt, quit, suspend, and flow\n" -"control) retain their effects on the tty driver and calling program.\n" -"Calling first raw() then cbreak() leaves the terminal in cbreak mode."); +"In cbreak mode (sometimes called \"rare\" mode) normal tty line buffering\n" +"is turned off and characters are available to be read one by one.\n" +"However, unlike raw mode, special characters (interrupt, quit, suspend,\n" +"and flow control) retain their effects on the tty driver and calling\n" +"program. Calling first raw() then cbreak() leaves the terminal in\n" +"cbreak mode."); #define _CURSES_CBREAK_METHODDEF \ {"cbreak", _PyCFunction_CAST(_curses_cbreak), METH_FASTCALL, _curses_cbreak__doc__}, @@ -1954,8 +1965,9 @@ PyDoc_STRVAR(_curses_color_content__doc__, " color_number\n" " The number of the color (0 - (COLORS-1)).\n" "\n" -"A 3-tuple is returned, containing the R, G, B values for the given color,\n" -"which will be between 0 (no component) and 1000 (maximum amount of component)."); +"A 3-tuple is returned, containing the R, G, B values for the given\n" +"color, which will be between 0 (no component) and 1000 (maximum amount\n" +"of component)."); #define _CURSES_COLOR_CONTENT_METHODDEF \ {"color_content", (PyCFunction)_curses_color_content, METH_O, _curses_color_content__doc__}, @@ -1988,7 +2000,8 @@ PyDoc_STRVAR(_curses_color_pair__doc__, " The number of the color pair.\n" "\n" "This attribute value can be combined with A_STANDOUT, A_REVERSE, and the\n" -"other A_* attributes. pair_number() is the counterpart to this function."); +"other A_* attributes. pair_number() is the counterpart to this\n" +"function."); #define _CURSES_COLOR_PAIR_METHODDEF \ {"color_pair", (PyCFunction)_curses_color_pair, METH_O, _curses_color_pair__doc__}, @@ -2022,9 +2035,9 @@ PyDoc_STRVAR(_curses_curs_set__doc__, " 0 for invisible, 1 for normal visible, or 2 for very visible.\n" "\n" "If the terminal supports the visibility requested, the previous cursor\n" -"state is returned; otherwise, an exception is raised. On many terminals,\n" -"the \"visible\" mode is an underline cursor and the \"very visible\" mode is\n" -"a block cursor."); +"state is returned; otherwise, an exception is raised. On many\n" +"terminals, the \"visible\" mode is an underline cursor and the \"very\n" +"visible\" mode is a block cursor."); #define _CURSES_CURS_SET_METHODDEF \ {"curs_set", (PyCFunction)_curses_curs_set, METH_O, _curses_curs_set__doc__}, @@ -2076,7 +2089,8 @@ PyDoc_STRVAR(_curses_def_shell_mode__doc__, "\n" "Save the current terminal mode as the \"shell\" mode.\n" "\n" -"The \"shell\" mode is the mode when the running program is not using curses.\n" +"The \"shell\" mode is the mode when the running program is not using\n" +"curses.\n" "\n" "Subsequent calls to reset_shell_mode() will restore this mode."); @@ -2150,7 +2164,8 @@ PyDoc_STRVAR(_curses_echo__doc__, " flag\n" " If false, the effect is the same as calling noecho().\n" "\n" -"In echo mode, each character input is echoed to the screen as it is entered."); +"In echo mode, each character input is echoed to the screen as it is\n" +"entered."); #define _CURSES_ECHO_METHODDEF \ {"echo", _PyCFunction_CAST(_curses_echo), METH_FASTCALL, _curses_echo__doc__}, @@ -2223,7 +2238,8 @@ PyDoc_STRVAR(_curses_flash__doc__, "\n" "Flash the screen.\n" "\n" -"That is, change it to reverse-video and then change it back in a short interval."); +"That is, change it to reverse-video and then change it back in a short\n" +"interval."); #define _CURSES_FLASH_METHODDEF \ {"flash", (PyCFunction)_curses_flash, METH_NOARGS, _curses_flash__doc__}, @@ -2243,8 +2259,8 @@ PyDoc_STRVAR(_curses_flushinp__doc__, "\n" "Flush all input buffers.\n" "\n" -"This throws away any typeahead that has been typed by the user and has not\n" -"yet been processed by the program."); +"This throws away any typeahead that has been typed by the user and has\n" +"not yet been processed by the program."); #define _CURSES_FLUSHINP_METHODDEF \ {"flushinp", (PyCFunction)_curses_flushinp, METH_NOARGS, _curses_flushinp__doc__}, @@ -2614,8 +2630,9 @@ PyDoc_STRVAR(_curses_init_pair__doc__, " bg\n" " Background color number (-1 - (COLORS-1)).\n" "\n" -"If the color-pair was previously initialized, the screen is refreshed and\n" -"all occurrences of that color-pair are changed to the new definition."); +"If the color-pair was previously initialized, the screen is refreshed\n" +"and all occurrences of that color-pair are changed to the new\n" +"definition."); #define _CURSES_INIT_PAIR_METHODDEF \ {"init_pair", _PyCFunction_CAST(_curses_init_pair), METH_FASTCALL, _curses_init_pair__doc__}, @@ -2774,9 +2791,9 @@ PyDoc_STRVAR(_curses_get_escdelay__doc__, "\n" "Gets the curses ESCDELAY setting.\n" "\n" -"Gets the number of milliseconds to wait after reading an escape character,\n" -"to distinguish between an individual escape character entered on the\n" -"keyboard from escape sequences sent by cursor and function keys."); +"Gets the number of milliseconds to wait after reading an escape\n" +"character, to distinguish between an individual escape character entered\n" +"on the keyboard from escape sequences sent by cursor and function keys."); #define _CURSES_GET_ESCDELAY_METHODDEF \ {"get_escdelay", (PyCFunction)_curses_get_escdelay, METH_NOARGS, _curses_get_escdelay__doc__}, @@ -2803,9 +2820,9 @@ PyDoc_STRVAR(_curses_set_escdelay__doc__, " ms\n" " length of the delay in milliseconds.\n" "\n" -"Sets the number of milliseconds to wait after reading an escape character,\n" -"to distinguish between an individual escape character entered on the\n" -"keyboard from escape sequences sent by cursor and function keys."); +"Sets the number of milliseconds to wait after reading an escape\n" +"character, to distinguish between an individual escape character entered\n" +"on the keyboard from escape sequences sent by cursor and function keys."); #define _CURSES_SET_ESCDELAY_METHODDEF \ {"set_escdelay", (PyCFunction)_curses_set_escdelay, METH_O, _curses_set_escdelay__doc__}, @@ -2839,8 +2856,8 @@ PyDoc_STRVAR(_curses_get_tabsize__doc__, "\n" "Gets the curses TABSIZE setting.\n" "\n" -"Gets the number of columns used by the curses library when converting a tab\n" -"character to spaces as it adds the tab to a window."); +"Gets the number of columns used by the curses library when converting\n" +"a tab character to spaces as it adds the tab to a window."); #define _CURSES_GET_TABSIZE_METHODDEF \ {"get_tabsize", (PyCFunction)_curses_get_tabsize, METH_NOARGS, _curses_get_tabsize__doc__}, @@ -2867,8 +2884,8 @@ PyDoc_STRVAR(_curses_set_tabsize__doc__, " size\n" " rendered cell width of a tab character.\n" "\n" -"Sets the number of columns used by the curses library when converting a tab\n" -"character to spaces as it adds the tab to a window."); +"Sets the number of columns used by the curses library when converting\n" +"a tab character to spaces as it adds the tab to a window."); #define _CURSES_SET_TABSIZE_METHODDEF \ {"set_tabsize", (PyCFunction)_curses_set_tabsize, METH_O, _curses_set_tabsize__doc__}, @@ -3039,8 +3056,8 @@ PyDoc_STRVAR(_curses_longname__doc__, "\n" "Return the terminfo long name field describing the current terminal.\n" "\n" -"The maximum length of a verbose description is 128 characters. It is defined\n" -"only after the call to initscr()."); +"The maximum length of a verbose description is 128 characters. It is\n" +"defined only after the call to initscr()."); #define _CURSES_LONGNAME_METHODDEF \ {"longname", (PyCFunction)_curses_longname, METH_NOARGS, _curses_longname__doc__}, @@ -3097,8 +3114,8 @@ PyDoc_STRVAR(_curses_mouseinterval__doc__, " Time in milliseconds.\n" "\n" "Set the maximum time that can elapse between press and release events in\n" -"order for them to be recognized as a click, and return the previous interval\n" -"value."); +"order for them to be recognized as a click, and return the previous\n" +"interval value."); #define _CURSES_MOUSEINTERVAL_METHODDEF \ {"mouseinterval", (PyCFunction)_curses_mouseinterval, METH_O, _curses_mouseinterval__doc__}, @@ -3133,9 +3150,10 @@ PyDoc_STRVAR(_curses_mousemask__doc__, "Set the mouse events to be reported, and return a tuple (availmask, oldmask).\n" "\n" "Return a tuple (availmask, oldmask). availmask indicates which of the\n" -"specified mouse events can be reported; on complete failure it returns 0.\n" -"oldmask is the previous value of the given window\'s mouse event mask.\n" -"If this function is never called, no mouse events are ever reported."); +"specified mouse events can be reported; on complete failure it returns\n" +"0. oldmask is the previous value of the given window\'s mouse event\n" +"mask. If this function is never called, no mouse events are ever\n" +"reported."); #define _CURSES_MOUSEMASK_METHODDEF \ {"mousemask", (PyCFunction)_curses_mousemask, METH_O, _curses_mousemask__doc__}, @@ -3267,8 +3285,8 @@ PyDoc_STRVAR(_curses_newwin__doc__, " begin_x\n" " Left side x-coordinate.\n" "\n" -"By default, the window will extend from the specified position to the lower\n" -"right corner of the screen."); +"By default, the window will extend from the specified position to the\n" +"lower right corner of the screen."); #define _CURSES_NEWWIN_METHODDEF \ {"newwin", (PyCFunction)_curses_newwin, METH_VARARGS, _curses_newwin__doc__}, @@ -3318,8 +3336,9 @@ PyDoc_STRVAR(_curses_nl__doc__, " flag\n" " If false, the effect is the same as calling nonl().\n" "\n" -"This mode translates the return key into newline on input, and translates\n" -"newline into return and line-feed on output. Newline mode is initially on."); +"This mode translates the return key into newline on input, and\n" +"translates newline into return and line-feed on output. Newline mode\n" +"is initially on."); #define _CURSES_NL_METHODDEF \ {"nl", _PyCFunction_CAST(_curses_nl), METH_FASTCALL, _curses_nl__doc__}, @@ -3396,8 +3415,8 @@ PyDoc_STRVAR(_curses_nonl__doc__, "\n" "Leave newline mode.\n" "\n" -"Disable translation of return into newline on input, and disable low-level\n" -"translation of newline into newline/return on output."); +"Disable translation of return into newline on input, and disable\n" +"low-level translation of newline into newline/return on output."); #define _CURSES_NONL_METHODDEF \ {"nonl", (PyCFunction)_curses_nonl, METH_NOARGS, _curses_nonl__doc__}, @@ -3613,8 +3632,8 @@ PyDoc_STRVAR(_curses_raw__doc__, " If false, the effect is the same as calling noraw().\n" "\n" "In raw mode, normal line buffering and processing of interrupt, quit,\n" -"suspend, and flow control keys are turned off; characters are presented to\n" -"curses input functions one by one."); +"suspend, and flow control keys are turned off; characters are presented\n" +"to curses input functions one by one."); #define _CURSES_RAW_METHODDEF \ {"raw", _PyCFunction_CAST(_curses_raw), METH_FASTCALL, _curses_raw__doc__}, @@ -3712,8 +3731,8 @@ PyDoc_STRVAR(_curses_resizeterm__doc__, " ncols\n" " Width.\n" "\n" -"Adjusts other bookkeeping data used by the curses library that record the\n" -"window dimensions (in particular the SIGWINCH handler)."); +"Adjusts other bookkeeping data used by the curses library that record\n" +"the window dimensions (in particular the SIGWINCH handler)."); #define _CURSES_RESIZETERM_METHODDEF \ {"resizeterm", _PyCFunction_CAST(_curses_resizeterm), METH_FASTCALL, _curses_resizeterm__doc__}, @@ -3791,10 +3810,11 @@ PyDoc_STRVAR(_curses_resize_term__doc__, " Width.\n" "\n" "When resizing the windows, resize_term() blank-fills the areas that are\n" -"extended. The calling application should fill in these areas with appropriate\n" -"data. The resize_term() function attempts to resize all windows. However,\n" -"due to the calling convention of pads, it is not possible to resize these\n" -"without additional interaction with the application."); +"extended. The calling application should fill in these areas with\n" +"appropriate data. The resize_term() function attempts to resize all\n" +"windows. However, due to the calling convention of pads, it is not\n" +"possible to resize these without additional interaction with the\n" +"application."); #define _CURSES_RESIZE_TERM_METHODDEF \ {"resize_term", _PyCFunction_CAST(_curses_resize_term), METH_FASTCALL, _curses_resize_term__doc__}, @@ -3929,12 +3949,12 @@ PyDoc_STRVAR(_curses_start_color__doc__, "\n" "Initializes eight basic colors and global variables COLORS and COLOR_PAIRS.\n" "\n" -"Must be called if the programmer wants to use colors, and before any other\n" -"color manipulation routine is called. It is good practice to call this\n" -"routine right after initscr().\n" +"Must be called if the programmer wants to use colors, and before any\n" +"other color manipulation routine is called. It is good practice to call\n" +"this routine right after initscr().\n" "\n" -"It also restores the colors on the terminal to the values they had when the\n" -"terminal was just turned on."); +"It also restores the colors on the terminal to the values they had when\n" +"the terminal was just turned on."); #define _CURSES_START_COLOR_METHODDEF \ {"start_color", (PyCFunction)_curses_start_color, METH_NOARGS, _curses_start_color__doc__}, @@ -4036,8 +4056,8 @@ PyDoc_STRVAR(_curses_tigetnum__doc__, " capname\n" " The terminfo capability name.\n" "\n" -"The value -2 is returned if capname is not a numeric capability, or -1 if\n" -"it is canceled or absent from the terminal description."); +"The value -2 is returned if capname is not a numeric capability, or -1\n" +"if it is canceled or absent from the terminal description."); #define _CURSES_TIGETNUM_METHODDEF \ {"tigetnum", (PyCFunction)_curses_tigetnum, METH_O, _curses_tigetnum__doc__}, @@ -4079,8 +4099,8 @@ PyDoc_STRVAR(_curses_tigetstr__doc__, " capname\n" " The terminfo capability name.\n" "\n" -"None is returned if capname is not a string capability, or is canceled or\n" -"absent from the terminal description."); +"None is returned if capname is not a string capability, or is canceled\n" +"or absent from the terminal description."); #define _CURSES_TIGETSTR_METHODDEF \ {"tigetstr", (PyCFunction)_curses_tigetstr, METH_O, _curses_tigetstr__doc__}, @@ -4234,14 +4254,14 @@ PyDoc_STRVAR(_curses_use_env__doc__, "\n" "Use environment variables LINES and COLUMNS.\n" "\n" -"If used, this function should be called before initscr() or newterm() are\n" -"called.\n" +"If used, this function should be called before initscr() or newterm()\n" +"are called.\n" "\n" -"When flag is False, the values of lines and columns specified in the terminfo\n" -"database will be used, even if environment variables LINES and COLUMNS (used\n" -"by default) are set, or if curses is running in a window (in which case\n" -"default behavior would be to use the window size if LINES and COLUMNS are\n" -"not set)."); +"When flag is False, the values of lines and columns specified in the\n" +"terminfo database will be used, even if environment variables LINES and\n" +"COLUMNS (used by default) are set, or if curses is running in a window\n" +"(in which case default behavior would be to use the window size if LINES\n" +"and COLUMNS are not set)."); #define _CURSES_USE_ENV_METHODDEF \ {"use_env", (PyCFunction)_curses_use_env, METH_O, _curses_use_env__doc__}, @@ -4450,4 +4470,4 @@ _curses_has_extended_color_support(PyObject *module, PyObject *Py_UNUSED(ignored #ifndef _CURSES_ASSUME_DEFAULT_COLORS_METHODDEF #define _CURSES_ASSUME_DEFAULT_COLORS_METHODDEF #endif /* !defined(_CURSES_ASSUME_DEFAULT_COLORS_METHODDEF) */ -/*[clinic end generated code: output=135246e29163510c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e7c7932f4a4e9bce input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_datetimemodule.c.h b/Modules/clinic/_datetimemodule.c.h index ee621c150c3..fac41e7aefc 100644 --- a/Modules/clinic/_datetimemodule.c.h +++ b/Modules/clinic/_datetimemodule.c.h @@ -214,8 +214,8 @@ PyDoc_STRVAR(datetime_date_fromtimestamp__doc__, "\n" "Create a date from a POSIX timestamp.\n" "\n" -"The timestamp is a number, e.g. created via time.time(), that is interpreted\n" -"as local time."); +"The timestamp is a number, e.g. created via time.time(), that is\n" +"interpreted as local time."); #define DATETIME_DATE_FROMTIMESTAMP_METHODDEF \ {"fromtimestamp", (PyCFunction)datetime_date_fromtimestamp, METH_O|METH_CLASS, datetime_date_fromtimestamp__doc__}, @@ -897,8 +897,8 @@ PyDoc_STRVAR(datetime_time_isoformat__doc__, "\n" "Return the time formatted according to ISO.\n" "\n" -"The full format is \'HH:MM:SS.mmmmmm+zz:zz\'. By default, the fractional\n" -"part is omitted if self.microsecond == 0.\n" +"The full format is \'HH:MM:SS.mmmmmm+zz:zz\'. By default, the\n" +"fractional part is omitted if self.microsecond == 0.\n" "\n" "The optional argument timespec specifies the number of additional\n" "terms of the time to include. Valid options are \'auto\', \'hours\',\n" @@ -979,7 +979,8 @@ PyDoc_STRVAR(datetime_time_strftime__doc__, "\n" "Format using strftime().\n" "\n" -"The date part of the timestamp passed to underlying strftime should not be used.\n" +"The date part of the timestamp passed to underlying strftime should\n" +"not be used.\n" "\n" "For a list of supported format codes, see the documentation:\n" " https://docs.python.org/3/library/datetime.html#format-codes"); @@ -1269,8 +1270,8 @@ PyDoc_STRVAR(datetime_datetime__doc__, "\n" "A combination of a date and a time.\n" "\n" -"The year, month and day arguments are required. tzinfo may be None, or an\n" -"instance of a tzinfo subclass. The remaining arguments may be ints."); +"The year, month and day arguments are required. tzinfo may be None, or\n" +"an instance of a tzinfo subclass. The remaining arguments may be ints."); static PyObject * datetime_datetime_impl(PyTypeObject *type, int year, int month, int day, @@ -1491,8 +1492,8 @@ PyDoc_STRVAR(datetime_datetime_fromtimestamp__doc__, "\n" "Create a datetime from a POSIX timestamp.\n" "\n" -"The timestamp is a number, e.g. created via time.time(), that is interpreted\n" -"as local time."); +"The timestamp is a number, e.g. created via time.time(), that is\n" +"interpreted as local time."); #define DATETIME_DATETIME_FROMTIMESTAMP_METHODDEF \ {"fromtimestamp", _PyCFunction_CAST(datetime_datetime_fromtimestamp), METH_FASTCALL|METH_KEYWORDS|METH_CLASS, datetime_datetime_fromtimestamp__doc__}, @@ -2090,4 +2091,4 @@ datetime_datetime___reduce__(PyObject *self, PyObject *Py_UNUSED(ignored)) { return datetime_datetime___reduce___impl((PyDateTime_DateTime *)self); } -/*[clinic end generated code: output=69658acff6a43ac4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8f63509398651723 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h index 091ce9edc43..6c979a4b008 100644 --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -113,7 +113,8 @@ PyDoc_STRVAR(_dbm_dbm_setdefault__doc__, "\n" "Return the value for key if present, otherwise default.\n" "\n" -"If key is not in the database, it is inserted with default as the value."); +"If key is not in the database, it is inserted with default as the\n" +"value."); #define _DBM_DBM_SETDEFAULT_METHODDEF \ {"setdefault", _PyCFunction_CAST(_dbm_dbm_setdefault), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _dbm_dbm_setdefault__doc__}, @@ -246,4 +247,4 @@ dbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=279511ea7cda38dd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=677deecf525167a5 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_functoolsmodule.c.h b/Modules/clinic/_functoolsmodule.c.h index 87cdef2ad3c..5f350c864f0 100644 --- a/Modules/clinic/_functoolsmodule.c.h +++ b/Modules/clinic/_functoolsmodule.c.h @@ -77,9 +77,9 @@ PyDoc_STRVAR(_functools_reduce__doc__, "\n" "Apply a function of two arguments cumulatively to the items of an iterable, from left to right.\n" "\n" -"This effectively reduces the iterable to a single value. If initial is present,\n" -"it is placed before the items of the iterable in the calculation, and serves as\n" -"a default when the iterable is empty.\n" +"This effectively reduces the iterable to a single value. If initial is\n" +"present, it is placed before the items of the iterable in the\n" +"calculation, and serves as a default when the iterable is empty.\n" "\n" "For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])\n" "calculates ((((1 + 2) + 3) + 4) + 5)."); @@ -193,4 +193,4 @@ _functools__lru_cache_wrapper_cache_clear(PyObject *self, PyObject *Py_UNUSED(ig return return_value; } -/*[clinic end generated code: output=ac9e26d0a5a23d40 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6d8fdaeba4b520fa input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_gdbmmodule.c.h b/Modules/clinic/_gdbmmodule.c.h index 6fd6aa3da50..fe993cc328f 100644 --- a/Modules/clinic/_gdbmmodule.c.h +++ b/Modules/clinic/_gdbmmodule.c.h @@ -138,9 +138,9 @@ PyDoc_STRVAR(_gdbm_gdbm_firstkey__doc__, "\n" "Return the starting key for the traversal.\n" "\n" -"It\'s possible to loop over every key in the database using this method\n" -"and the nextkey() method. The traversal is ordered by GDBM\'s internal\n" -"hash values, and won\'t be sorted by the key values."); +"It\'s possible to loop over every key in the database using this\n" +"method and the nextkey() method. The traversal is ordered by GDBM\'s\n" +"internal hash values, and won\'t be sorted by the key values."); #define _GDBM_GDBM_FIRSTKEY_METHODDEF \ {"firstkey", _PyCFunction_CAST(_gdbm_gdbm_firstkey), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_firstkey__doc__}, @@ -171,8 +171,8 @@ PyDoc_STRVAR(_gdbm_gdbm_nextkey__doc__, "\n" "Returns the key that follows key in the traversal.\n" "\n" -"The following code prints every key in the database db, without having\n" -"to create a list in memory that contains them all:\n" +"The following code prints every key in the database db, without\n" +"having to create a list in memory that contains them all:\n" "\n" " k = db.firstkey()\n" " while k is not None:\n" @@ -226,9 +226,9 @@ PyDoc_STRVAR(_gdbm_gdbm_reorganize__doc__, "\n" "If you have carried out a lot of deletions and would like to shrink\n" "the space used by the GDBM file, this routine will reorganize the\n" -"database. GDBM will not shorten the length of a database file except\n" -"by using this reorganization; otherwise, deleted file space will be\n" -"kept and reused as new (key,value) pairs are added."); +"database. GDBM will not shorten the length of a database file\n" +"except by using this reorganization; otherwise, deleted file space\n" +"will be kept and reused as new (key,value) pairs are added."); #define _GDBM_GDBM_REORGANIZE_METHODDEF \ {"reorganize", _PyCFunction_CAST(_gdbm_gdbm_reorganize), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_reorganize__doc__}, @@ -389,4 +389,4 @@ dbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=8bca34ce9d4493dd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=429b5db24568292e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_hashopenssl.c.h b/Modules/clinic/_hashopenssl.c.h index 7ae7be185ec..17ed37bbd3b 100644 --- a/Modules/clinic/_hashopenssl.c.h +++ b/Modules/clinic/_hashopenssl.c.h @@ -1865,8 +1865,8 @@ PyDoc_STRVAR(_hashlib_HMAC_hexdigest__doc__, "\n" "Return hexadecimal digest of the bytes passed to the update() method so far.\n" "\n" -"This may be used to exchange the value safely in email or other non-binary\n" -"environments."); +"This may be used to exchange the value safely in email or other\n" +"non-binary environments."); #define _HASHLIB_HMAC_HEXDIGEST_METHODDEF \ {"hexdigest", (PyCFunction)_hashlib_HMAC_hexdigest, METH_NOARGS, _hashlib_HMAC_hexdigest__doc__}, @@ -1887,8 +1887,8 @@ PyDoc_STRVAR(_hashlib_get_fips_mode__doc__, "Determine the OpenSSL FIPS mode of operation.\n" "\n" "For OpenSSL 3.0.0 and newer it returns the state of the default provider\n" -"in the default OSSL context. It\'s not quite the same as FIPS_mode() but good\n" -"enough for unittests.\n" +"in the default OSSL context. It\'s not quite the same as FIPS_mode() but\n" +"good enough for unittests.\n" "\n" "Effectively any non-zero return value indicates FIPS mode;\n" "values other than 1 may have additional significance."); @@ -1986,4 +1986,4 @@ _hashlib_compare_digest(PyObject *module, PyObject *const *args, Py_ssize_t narg #ifndef _HASHLIB_OPENSSL_SHAKE_256_METHODDEF #define _HASHLIB_OPENSSL_SHAKE_256_METHODDEF #endif /* !defined(_HASHLIB_OPENSSL_SHAKE_256_METHODDEF) */ -/*[clinic end generated code: output=9ba35fcc33795b1e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=cf405e652a340bb2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_heapqmodule.c.h b/Modules/clinic/_heapqmodule.c.h index b43155b6c24..f3b8256efc0 100644 --- a/Modules/clinic/_heapqmodule.c.h +++ b/Modules/clinic/_heapqmodule.c.h @@ -326,8 +326,8 @@ PyDoc_STRVAR(_heapq_heappushpop_max__doc__, "\n" "Maxheap variant of heappushpop.\n" "\n" -"The combined action runs more efficiently than heappush_max() followed by\n" -"a separate call to heappop_max()."); +"The combined action runs more efficiently than heappush_max()\n" +"followed by a separate call to heappop_max()."); #define _HEAPQ_HEAPPUSHPOP_MAX_METHODDEF \ {"heappushpop_max", _PyCFunction_CAST(_heapq_heappushpop_max), METH_FASTCALL, _heapq_heappushpop_max__doc__}, @@ -358,4 +358,4 @@ _heapq_heappushpop_max(PyObject *module, PyObject *const *args, Py_ssize_t nargs exit: return return_value; } -/*[clinic end generated code: output=e83d50002c29a96d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=21e4f248ef6e83d6 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_interpqueuesmodule.c.h b/Modules/clinic/_interpqueuesmodule.c.h index 3f08a0cb6d3..6f27ea73b88 100644 --- a/Modules/clinic/_interpqueuesmodule.c.h +++ b/Modules/clinic/_interpqueuesmodule.c.h @@ -109,7 +109,8 @@ PyDoc_STRVAR(_interpqueues_destroy__doc__, "\n" "Clear and destroy the queue.\n" "\n" -"Afterward attempts to use the queue will behave as though it never existed."); +"Afterward attempts to use the queue will behave as though it never\n" +"existed."); #define _INTERPQUEUES_DESTROY_METHODDEF \ {"destroy", _PyCFunction_CAST(_interpqueues_destroy), METH_FASTCALL|METH_KEYWORDS, _interpqueues_destroy__doc__}, @@ -762,4 +763,4 @@ _interpqueues__register_heap_types(PyObject *module, PyObject *const *args, Py_s exit: return return_value; } -/*[clinic end generated code: output=64cea8e1063429b6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7e56e5b0c684d294 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_interpretersmodule.c.h b/Modules/clinic/_interpretersmodule.c.h index d70ffcea527..72792f9b583 100644 --- a/Modules/clinic/_interpretersmodule.c.h +++ b/Modules/clinic/_interpretersmodule.c.h @@ -541,7 +541,8 @@ PyDoc_STRVAR(_interpreters_run_func__doc__, "Execute the body of the provided function in the identified interpreter.\n" "\n" "Code objects are also supported. In both cases, closures and args\n" -"are not supported. Methods and other callables are not supported either.\n" +"are not supported. Methods and other callables are not supported\n" +"either.\n" "\n" "(See _interpreters.exec().)"); @@ -1139,8 +1140,9 @@ PyDoc_STRVAR(_interpreters_capture_exception__doc__, "\n" "Return a snapshot of an exception.\n" "\n" -"If \"exc\" is None then the current exception, if any, is used (but not cleared).\n" -"The returned snapshot is the same as what _interpreters.exec() returns."); +"If \"exc\" is None then the current exception, if any, is used (but not\n" +"cleared). The returned snapshot is the same as what\n" +"_interpreters.exec() returns."); #define _INTERPRETERS_CAPTURE_EXCEPTION_METHODDEF \ {"capture_exception", _PyCFunction_CAST(_interpreters_capture_exception), METH_FASTCALL|METH_KEYWORDS, _interpreters_capture_exception__doc__}, @@ -1198,4 +1200,4 @@ _interpreters_capture_exception(PyObject *module, PyObject *const *args, Py_ssiz exit: return return_value; } -/*[clinic end generated code: output=c80f73761f860f6c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8c3ca09c304378ad input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_json.c.h b/Modules/clinic/_json.c.h index cd37a236c76..d3ed1dfe051 100644 --- a/Modules/clinic/_json.c.h +++ b/Modules/clinic/_json.c.h @@ -16,8 +16,8 @@ PyDoc_STRVAR(py_scanstring__doc__, "ValueError on attempt to decode an invalid string. If strict is False\n" "then literal control characters are allowed in the string.\n" "\n" -"Returns a tuple of the decoded string and the index of the character in s\n" -"after the end quote."); +"Returns a tuple of the decoded string and the index of the character in\n" +"s after the end quote."); #define PY_SCANSTRING_METHODDEF \ {"scanstring", _PyCFunction_CAST(py_scanstring), METH_FASTCALL, py_scanstring__doc__}, @@ -125,4 +125,4 @@ py_encode_basestring(PyObject *module, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=5bdd16375c95a4d9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ea6e9a271d4ceaf2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index ebdc81a0dac..bba107e8f80 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -74,18 +74,19 @@ PyDoc_STRVAR(_lzma_LZMADecompressor_decompress__doc__, "\n" "Decompress *data*, returning uncompressed data as bytes.\n" "\n" -"If *max_length* is nonnegative, returns at most *max_length* bytes of\n" -"decompressed data. If this limit is reached and further output can be\n" -"produced, *self.needs_input* will be set to ``False``. In this case, the next\n" -"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n" +"If *max_length* is nonnegative, returns at most *max_length* bytes\n" +"of decompressed data. If this limit is reached and further output\n" +"can be produced, *self.needs_input* will be set to ``False``. In\n" +"this case, the next call to *decompress()* may provide *data* as b\'\'\n" +"to obtain more of the output.\n" "\n" -"If all of the input data was decompressed and returned (either because this\n" -"was less than *max_length* bytes, or because *max_length* was negative),\n" -"*self.needs_input* will be set to True.\n" +"If all of the input data was decompressed and returned (either\n" +"because this was less than *max_length* bytes, or because\n" +"*max_length* was negative), *self.needs_input* will be set to True.\n" "\n" -"Attempting to decompress data after the end of stream is reached raises an\n" -"EOFError. Any data found after the end of the stream is ignored and saved in\n" -"the unused_data attribute."); +"Attempting to decompress data after the end of stream is reached\n" +"raises an EOFError. Any data found after the end of the stream is\n" +"ignored and saved in the unused_data attribute."); #define _LZMA_LZMADECOMPRESSOR_DECOMPRESS_METHODDEF \ {"decompress", _PyCFunction_CAST(_lzma_LZMADecompressor_decompress), METH_FASTCALL|METH_KEYWORDS, _lzma_LZMADecompressor_decompress__doc__}, @@ -333,4 +334,4 @@ _lzma__decode_filter_properties(PyObject *module, PyObject *const *args, Py_ssiz return return_value; } -/*[clinic end generated code: output=6386084cb43d2533 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ffc6d673d858048c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_posixsubprocess.c.h b/Modules/clinic/_posixsubprocess.c.h index d52629cf6ea..e7e9707f182 100644 --- a/Modules/clinic/_posixsubprocess.c.h +++ b/Modules/clinic/_posixsubprocess.c.h @@ -14,15 +14,15 @@ PyDoc_STRVAR(subprocess_fork_exec__doc__, "\n" "Spawn a fresh new child process.\n" "\n" -"Fork a child process, close parent file descriptors as appropriate in the\n" -"child and duplicate the few that are needed before calling exec() in the\n" -"child process.\n" +"Fork a child process, close parent file descriptors as appropriate in\n" +"the child and duplicate the few that are needed before calling exec() in\n" +"the child process.\n" "\n" -"If close_fds is True, close file descriptors 3 and higher, except those listed\n" -"in the sorted tuple pass_fds.\n" +"If close_fds is True, close file descriptors 3 and higher, except those\n" +"listed in the sorted tuple pass_fds.\n" "\n" -"The preexec_fn, if supplied, will be called immediately before closing file\n" -"descriptors and exec.\n" +"The preexec_fn, if supplied, will be called immediately before closing\n" +"file descriptors and exec.\n" "\n" "WARNING: preexec_fn is NOT SAFE if your application uses threads.\n" " It may trigger infrequent, difficult to debug deadlocks.\n" @@ -150,4 +150,4 @@ subprocess_fork_exec(PyObject *module, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=942bc2748a9c2785 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=138941c284792aa1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_queuemodule.c.h b/Modules/clinic/_queuemodule.c.h index c9482f40acb..b67dd23f260 100644 --- a/Modules/clinic/_queuemodule.c.h +++ b/Modules/clinic/_queuemodule.c.h @@ -44,8 +44,9 @@ PyDoc_STRVAR(_queue_SimpleQueue_put__doc__, "\n" "Put the item on the queue.\n" "\n" -"The optional \'block\' and \'timeout\' arguments are ignored, as this method\n" -"never blocks. They are provided for compatibility with the Queue class."); +"The optional \'block\' and \'timeout\' arguments are ignored, as this\n" +"method never blocks. They are provided for compatibility with the\n" +"Queue class."); #define _QUEUE_SIMPLEQUEUE_PUT_METHODDEF \ {"put", _PyCFunction_CAST(_queue_SimpleQueue_put), METH_FASTCALL|METH_KEYWORDS, _queue_SimpleQueue_put__doc__}, @@ -188,10 +189,11 @@ PyDoc_STRVAR(_queue_SimpleQueue_get__doc__, "\n" "Remove and return an item from the queue.\n" "\n" -"If optional args \'block\' is true and \'timeout\' is None (the default),\n" -"block if necessary until an item is available. If \'timeout\' is\n" -"a non-negative number, it blocks at most \'timeout\' seconds and raises\n" -"the Empty exception if no item was available within that time.\n" +"If optional args \'block\' is true and \'timeout\' is None (the\n" +"default), block if necessary until an item is available. If\n" +"\'timeout\' is a non-negative number, it blocks at most \'timeout\'\n" +"seconds and raises the Empty exception if no item was available\n" +"within that time.\n" "Otherwise (\'block\' is false), return an item if one is immediately\n" "available, else raise the Empty exception (\'timeout\' is ignored\n" "in that case)."); @@ -388,4 +390,4 @@ _queue_SimpleQueue___sizeof__(PyObject *self, PyObject *Py_UNUSED(ignored)) exit: return return_value; } -/*[clinic end generated code: output=4af5d1b1ea31ac7d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8219fe2f2ed5f068 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_randommodule.c.h b/Modules/clinic/_randommodule.c.h index 2563a16aea0..ca9cad7a572 100644 --- a/Modules/clinic/_randommodule.c.h +++ b/Modules/clinic/_randommodule.c.h @@ -143,4 +143,35 @@ _random_Random_getrandbits(PyObject *self, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=7ce97b2194eecaf7 input=a9049054013a1b77]*/ + +static int +random_init_impl(RandomObject *self, PyObject *seed); + +static int +random_init(PyObject *self, PyObject *args, PyObject *kwargs) +{ + int return_value = -1; + PyTypeObject *base_tp = (PyTypeObject *)_randomstate_type(Py_TYPE(self))->Random_Type; + PyObject *seed = NULL; + + if ((Py_IS_TYPE(self, base_tp) || + Py_TYPE(self)->tp_new == base_tp->tp_new) && + !_PyArg_NoKeywords("Random", kwargs)) { + goto exit; + } + if (!_PyArg_CheckPositional("Random", PyTuple_GET_SIZE(args), 0, 1)) { + goto exit; + } + if (PyTuple_GET_SIZE(args) < 1) { + goto skip_optional; + } + seed = PyTuple_GET_ITEM(args, 0); +skip_optional: + Py_BEGIN_CRITICAL_SECTION(self); + return_value = random_init_impl((RandomObject *)self, seed); + Py_END_CRITICAL_SECTION(); + +exit: + return return_value; +} +/*[clinic end generated code: output=ec95f7df0c3f3c19 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index 8c35c8443b7..e337ed2390a 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -334,9 +334,10 @@ _ssl__SSLSocket_compression(PyObject *self, PyObject *Py_UNUSED(ignored)) PyDoc_STRVAR(_ssl__SSLSocket_context__doc__, "This changes the context associated with the SSLSocket.\n" "\n" -"This is typically used from within a callback function set by the sni_callback\n" -"on the SSLContext to change the certificate information associated with the\n" -"SSLSocket before the cryptographic exchange handshake messages."); +"This is typically used from within a callback function set by the\n" +"sni_callback on the SSLContext to change the certificate information\n" +"associated with the SSLSocket before the cryptographic exchange\n" +"handshake messages."); #if defined(_ssl__SSLSocket_context_DOCSTR) # undef _ssl__SSLSocket_context_DOCSTR #endif @@ -571,9 +572,9 @@ PyDoc_STRVAR(_ssl__SSLSocket_sendfile__doc__, "\n" "Write size bytes from offset in the file descriptor fd to the SSL connection.\n" "\n" -"This method uses the zero-copy technique and returns the number of bytes\n" -"written. It should be called only when Kernel TLS is used for sending data in\n" -"the connection.\n" +"This method uses the zero-copy technique and returns the number of\n" +"bytes written. It should be called only when Kernel TLS is used for\n" +"sending data in the connection.\n" "\n" "The meaning of flags is platform dependent."); @@ -762,8 +763,9 @@ PyDoc_STRVAR(_ssl__SSLSocket_get_channel_binding__doc__, "\n" "Get channel binding data for current connection.\n" "\n" -"Raise ValueError if the requested `cb_type` is not supported. Return bytes\n" -"of the data or None if the data is not available (e.g. before the handshake).\n" +"Raise ValueError if the requested `cb_type` is not supported.\n" +"Return bytes of the data or None if the data is not available (e.g.\n" +"before the handshake).\n" "Only \'tls-unique\' channel binding data from RFC 5929 is supported."); #define _SSL__SSLSOCKET_GET_CHANNEL_BINDING_METHODDEF \ @@ -2210,8 +2212,9 @@ _ssl__SSLContext_set_ecdh_curve(PyObject *self, PyObject *name) PyDoc_STRVAR(_ssl__SSLContext_sni_callback__doc__, "Set a callback that will be called when a server name is provided by the SSL/TLS client in the SNI extension.\n" "\n" -"If the argument is None then the callback is disabled. The method is called\n" -"with the SSLSocket, the server name as a string, and the SSLContext object.\n" +"If the argument is None then the callback is disabled. The method\n" +"is called with the SSLSocket, the server name as a string, and the\n" +"SSLContext object.\n" "\n" "See RFC 6066 for details of the SNI extension."); #if defined(_ssl__SSLContext_sni_callback_DOCSTR) @@ -2275,11 +2278,11 @@ PyDoc_STRVAR(_ssl__SSLContext_cert_store_stats__doc__, "\n" "Returns quantities of loaded X.509 certificates.\n" "\n" -"X.509 certificates with a CA extension and certificate revocation lists\n" -"inside the context\'s cert store.\n" +"X.509 certificates with a CA extension and certificate revocation\n" +"lists inside the context\'s cert store.\n" "\n" -"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n" -"been used at least once."); +"NOTE: Certificates in a capath directory aren\'t loaded unless they\n" +"have been used at least once."); #define _SSL__SSLCONTEXT_CERT_STORE_STATS_METHODDEF \ {"cert_store_stats", (PyCFunction)_ssl__SSLContext_cert_store_stats, METH_NOARGS, _ssl__SSLContext_cert_store_stats__doc__}, @@ -2305,11 +2308,11 @@ PyDoc_STRVAR(_ssl__SSLContext_get_ca_certs__doc__, "\n" "Returns a list of dicts with information of loaded CA certs.\n" "\n" -"If the optional argument is True, returns a DER-encoded copy of the CA\n" -"certificate.\n" +"If the optional argument is True, returns a DER-encoded copy of the\n" +"CA certificate.\n" "\n" -"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n" -"been used at least once."); +"NOTE: Certificates in a capath directory aren\'t loaded unless they\n" +"have been used at least once."); #define _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF \ {"get_ca_certs", _PyCFunction_CAST(_ssl__SSLContext_get_ca_certs), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext_get_ca_certs__doc__}, @@ -2970,8 +2973,8 @@ PyDoc_STRVAR(_ssl_RAND_status__doc__, "\n" "Returns True if the OpenSSL PRNG has been seeded with enough data and False if not.\n" "\n" -"It is necessary to seed the PRNG with RAND_add() on some platforms before\n" -"using the ssl() function."); +"It is necessary to seed the PRNG with RAND_add() on some platforms\n" +"before using the ssl() function."); #define _SSL_RAND_STATUS_METHODDEF \ {"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__}, @@ -3157,11 +3160,11 @@ PyDoc_STRVAR(_ssl_enum_certificates__doc__, "\n" "Retrieve certificates from Windows\' cert store.\n" "\n" -"store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may provide\n" -"more cert storages, too. The function returns a list of (bytes,\n" -"encoding_type, trust) tuples. The encoding_type flag can be interpreted\n" -"with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either\n" -"a set of OIDs or the boolean True."); +"store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may\n" +"provide more cert storages, too. The function returns a list of\n" +"(bytes, encoding_type, trust) tuples. The encoding_type flag can be\n" +"interpreted with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The\n" +"trust setting is either a set of OIDs or the boolean True."); #define _SSL_ENUM_CERTIFICATES_METHODDEF \ {"enum_certificates", _PyCFunction_CAST(_ssl_enum_certificates), METH_FASTCALL|METH_KEYWORDS, _ssl_enum_certificates__doc__}, @@ -3323,4 +3326,4 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=e29d5ada294f97bb input=a9049054013a1b77]*/ +/*[clinic end generated code: output=aef2e74b706c6106 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_testmultiphase.c.h b/Modules/clinic/_testmultiphase.c.h index 311b6409476..a0e4c664511 100644 --- a/Modules/clinic/_testmultiphase.c.h +++ b/Modules/clinic/_testmultiphase.c.h @@ -14,8 +14,8 @@ PyDoc_STRVAR(_testmultiphase_StateAccessType_get_defining_module__doc__, "\n" "Return the module of the defining class.\n" "\n" -"Also tests that result of PyType_GetModuleByDef matches defining_class\'s\n" -"module."); +"Also tests that result of PyType_GetModuleByDef matches\n" +"defining_class\'s module."); #define _TESTMULTIPHASE_STATEACCESSTYPE_GET_DEFINING_MODULE_METHODDEF \ {"get_defining_module", _PyCFunction_CAST(_testmultiphase_StateAccessType_get_defining_module), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _testmultiphase_StateAccessType_get_defining_module__doc__}, @@ -165,4 +165,4 @@ _testmultiphase_StateAccessType_get_count(PyObject *self, PyTypeObject *cls, PyO } return _testmultiphase_StateAccessType_get_count_impl((StateAccessTypeObject *)self, cls); } -/*[clinic end generated code: output=8eed2f14292ec986 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=aff91f6219a7baca input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_threadmodule.c.h b/Modules/clinic/_threadmodule.c.h index 8455f9929ba..926bea8e1e4 100644 --- a/Modules/clinic/_threadmodule.c.h +++ b/Modules/clinic/_threadmodule.c.h @@ -14,8 +14,8 @@ PyDoc_STRVAR(_thread_lock_acquire__doc__, "\n" "Lock the lock.\n" "\n" -"Without argument, this blocks if the lock is already\n" -"locked (even by the same thread), waiting for another thread to release\n" +"Without argument, this blocks if the lock is already locked\n" +"(even by the same thread), waiting for another thread to release\n" "the lock, and return True once the lock is acquired.\n" "With an argument, this will only block if the argument is true,\n" "and the return value reflects whether the lock is acquired.\n" @@ -445,14 +445,14 @@ PyDoc_STRVAR(_thread_RLock_release__doc__, "\n" "Release the lock.\n" "\n" -"Allows another thread that is blocked waiting for\n" -"the lock to acquire the lock. The lock must be in the locked state,\n" +"Allows another thread that is blocked waiting for the lock\n" +"to acquire the lock. The lock must be in the locked state,\n" "and must be locked by the same thread that unlocks it; otherwise a\n" "`RuntimeError` is raised.\n" "\n" -"Do note that if the lock was acquire()d several times in a row by the\n" -"current thread, release() needs to be called as many times for the lock\n" -"to be available for other threads."); +"Do note that if the lock was acquire()d several times in a row by\n" +"the current thread, release() needs to be called as many times for\n" +"the lock to be available for other threads."); #define _THREAD_RLOCK_RELEASE_METHODDEF \ {"release", (PyCFunction)_thread_RLock_release, METH_NOARGS, _thread_RLock_release__doc__}, @@ -740,4 +740,4 @@ _thread_set_name(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb #ifndef _THREAD_SET_NAME_METHODDEF #define _THREAD_SET_NAME_METHODDEF #endif /* !defined(_THREAD_SET_NAME_METHODDEF) */ -/*[clinic end generated code: output=1255a1520f43f97a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0f1707cbafc0e8f2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_tkinter.c.h b/Modules/clinic/_tkinter.c.h index 352c2b9e3d4..3147cf7f9d2 100644 --- a/Modules/clinic/_tkinter.c.h +++ b/Modules/clinic/_tkinter.c.h @@ -907,7 +907,8 @@ PyDoc_STRVAR(_tkinter_setbusywaitinterval__doc__, "\n" "Set the busy-wait interval in milliseconds between successive calls to Tcl_DoOneEvent in a threaded Python interpreter.\n" "\n" -"It should be set to a divisor of the maximum time between frames in an animation."); +"It should be set to a divisor of the maximum time between frames in\n" +"an animation."); #define _TKINTER_SETBUSYWAITINTERVAL_METHODDEF \ {"setbusywaitinterval", (PyCFunction)_tkinter_setbusywaitinterval, METH_O, _tkinter_setbusywaitinterval__doc__}, @@ -966,4 +967,4 @@ _tkinter_getbusywaitinterval(PyObject *module, PyObject *Py_UNUSED(ignored)) #ifndef _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #define _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #endif /* !defined(_TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF) */ -/*[clinic end generated code: output=052c067aa69237be input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c807adb73e305725 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h index 00cce91dca4..dd9dbffaa9a 100644 --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -2331,7 +2331,34 @@ _winapi_ReportEvent(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } +PyDoc_STRVAR(_winapi_GetProcessMemoryInfo__doc__, +"GetProcessMemoryInfo($module, handle, /)\n" +"--\n" +"\n" +"Return the memory usage of the given process handle as a dict."); + +#define _WINAPI_GETPROCESSMEMORYINFO_METHODDEF \ + {"GetProcessMemoryInfo", (PyCFunction)_winapi_GetProcessMemoryInfo, METH_O, _winapi_GetProcessMemoryInfo__doc__}, + +static PyObject * +_winapi_GetProcessMemoryInfo_impl(PyObject *module, HANDLE handle); + +static PyObject * +_winapi_GetProcessMemoryInfo(PyObject *module, PyObject *arg) +{ + PyObject *return_value = NULL; + HANDLE handle; + + if (!PyArg_Parse(arg, "" F_HANDLE ":GetProcessMemoryInfo", &handle)) { + goto exit; + } + return_value = _winapi_GetProcessMemoryInfo_impl(module, handle); + +exit: + return return_value; +} + #ifndef _WINAPI_GETSHORTPATHNAME_METHODDEF #define _WINAPI_GETSHORTPATHNAME_METHODDEF #endif /* !defined(_WINAPI_GETSHORTPATHNAME_METHODDEF) */ -/*[clinic end generated code: output=4ab94eaee93a0a90 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=07dfd4bbacaed4a8 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index eec47ab2b1f..1e9f317853d 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -292,8 +292,8 @@ PyDoc_STRVAR(array_array_buffer_info__doc__, "\n" "Return a tuple (address, length) giving the current memory address and the length in items of the buffer used to hold array\'s contents.\n" "\n" -"The length should be multiplied by the itemsize attribute to calculate\n" -"the buffer length in bytes."); +"The length should be multiplied by the itemsize attribute to\n" +"calculate the buffer length in bytes."); #define ARRAY_ARRAY_BUFFER_INFO_METHODDEF \ {"buffer_info", (PyCFunction)array_array_buffer_info, METH_NOARGS, array_array_buffer_info__doc__}, @@ -335,8 +335,8 @@ PyDoc_STRVAR(array_array_byteswap__doc__, "\n" "Byteswap all items of the array.\n" "\n" -"If the items in the array are not 1, 2, 4, 8 or 16 bytes in size, RuntimeError\n" -"is raised. Note, that for complex types the order of\n" +"If the items in the array are not 1, 2, 4, 8 or 16 bytes in size,\n" +"RuntimeError is raised. Note, that for complex types the order of\n" "components (the real part, followed by imaginary part) is preserved."); #define ARRAY_ARRAY_BYTESWAP_METHODDEF \ @@ -572,9 +572,9 @@ PyDoc_STRVAR(array_array_fromunicode__doc__, "\n" "Extends this array with data from the unicode string ustr.\n" "\n" -"The array must be a unicode type array; otherwise a ValueError is raised.\n" -"Use array.frombytes(ustr.encode(...)) to append Unicode data to an array of\n" -"some other type."); +"The array must be a unicode type array; otherwise a ValueError is\n" +"raised. Use array.frombytes(ustr.encode(...)) to append Unicode\n" +"data to an array of some other type."); #define ARRAY_ARRAY_FROMUNICODE_METHODDEF \ {"fromunicode", (PyCFunction)array_array_fromunicode, METH_O, array_array_fromunicode__doc__}, @@ -605,9 +605,10 @@ PyDoc_STRVAR(array_array_tounicode__doc__, "\n" "Extends this array with data from the unicode string ustr.\n" "\n" -"Convert the array to a unicode string. The array must be a unicode type array;\n" -"otherwise a ValueError is raised. Use array.tobytes().decode() to obtain a\n" -"unicode string from an array of some other type."); +"Convert the array to a unicode string. The array must be a unicode\n" +"type array; otherwise a ValueError is raised. Use\n" +"array.tobytes().decode() to obtain a unicode string from an array of\n" +"some other type."); #define ARRAY_ARRAY_TOUNICODE_METHODDEF \ {"tounicode", (PyCFunction)array_array_tounicode, METH_NOARGS, array_array_tounicode__doc__}, @@ -780,4 +781,4 @@ array_arrayiterator___setstate__(PyObject *self, PyObject *state) return return_value; } -/*[clinic end generated code: output=8699475b51151247 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=32784678e77ac658 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index 7f9e65baf12..ecb5257cf6b 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -644,7 +644,8 @@ PyDoc_STRVAR(cmath_log__doc__, "\n" "log(z[, base]) -> the logarithm of z to the given base.\n" "\n" -"If the base is not specified, returns the natural logarithm (base e) of z."); +"If the base is not specified, returns the natural logarithm (base e)\n" +"of z."); #define CMATH_LOG_METHODDEF \ {"log", _PyCFunction_CAST(cmath_log), METH_FASTCALL, cmath_log__doc__}, @@ -882,11 +883,12 @@ PyDoc_STRVAR(cmath_isclose__doc__, "\n" "Return True if a is close in value to b, and False otherwise.\n" "\n" -"For the values to be considered close, the difference between them must be\n" -"smaller than at least one of the tolerances.\n" +"For the values to be considered close, the difference between them must\n" +"be smaller than at least one of the tolerances.\n" "\n" -"-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is\n" -"not close to anything, even itself. inf and -inf are only close to themselves."); +"-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is,\n" +"NaN is not close to anything, even itself. inf and -inf are only close\n" +"to themselves."); #define CMATH_ISCLOSE_METHODDEF \ {"isclose", _PyCFunction_CAST(cmath_isclose), METH_FASTCALL|METH_KEYWORDS, cmath_isclose__doc__}, @@ -985,4 +987,4 @@ cmath_isclose(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec exit: return return_value; } -/*[clinic end generated code: output=631db17fb1c79d66 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7d5ad4cf258526cd input=a9049054013a1b77]*/ diff --git a/Modules/clinic/faulthandler.c.h b/Modules/clinic/faulthandler.c.h index e06cfdcfba2..07a9dd7dc56 100644 --- a/Modules/clinic/faulthandler.c.h +++ b/Modules/clinic/faulthandler.c.h @@ -334,9 +334,9 @@ PyDoc_STRVAR(faulthandler_dump_traceback_later__doc__, "\n" "Dump the traceback of all threads in timeout seconds.\n" "\n" -"If repeat is true, the tracebacks of all threads are dumped every timeout\n" -"seconds. If exit is true, call _exit(1) which is not safe. max_threads\n" -"caps the number of threads dumped."); +"If repeat is true, the tracebacks of all threads are dumped every\n" +"timeout seconds. If exit is true, call _exit(1) which is not safe.\n" +"max_threads caps the number of threads dumped."); #define FAULTHANDLER_DUMP_TRACEBACK_LATER_METHODDEF \ {"dump_traceback_later", _PyCFunction_CAST(faulthandler_dump_traceback_later), METH_FASTCALL|METH_KEYWORDS, faulthandler_dump_traceback_later__doc__}, @@ -782,4 +782,4 @@ faulthandler__raise_exception(PyObject *module, PyObject *const *args, Py_ssize_ #ifndef FAULTHANDLER__RAISE_EXCEPTION_METHODDEF #define FAULTHANDLER__RAISE_EXCEPTION_METHODDEF #endif /* !defined(FAULTHANDLER__RAISE_EXCEPTION_METHODDEF) */ -/*[clinic end generated code: output=2452d767c85130a6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=14815a5f8afe813f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/gcmodule.c.h b/Modules/clinic/gcmodule.c.h index 08275e35413..aa743c8f40a 100644 --- a/Modules/clinic/gcmodule.c.h +++ b/Modules/clinic/gcmodule.c.h @@ -376,8 +376,8 @@ PyDoc_STRVAR(gc_get_objects__doc__, " generation\n" " Generation to extract the objects from.\n" "\n" -"If generation is not None, return only the objects tracked by the collector\n" -"that are in that generation."); +"If generation is not None, return only the objects tracked by the\n" +"collector that are in that generation."); #define GC_GET_OBJECTS_METHODDEF \ {"get_objects", _PyCFunction_CAST(gc_get_objects), METH_FASTCALL|METH_KEYWORDS, gc_get_objects__doc__}, @@ -520,9 +520,10 @@ PyDoc_STRVAR(gc_freeze__doc__, "\n" "Freeze all current tracked objects and ignore them for future collections.\n" "\n" -"This can be used before a POSIX fork() call to make the gc copy-on-write friendly.\n" -"Note: collection before a POSIX fork() call may free pages for future allocation\n" -"which can cause copy-on-write."); +"This can be used before a POSIX fork() call to make the gc copy-on-write\n" +"friendly.\n" +"Note: collection before a POSIX fork() call may free pages for future\n" +"allocation which can cause copy-on-write."); #define GC_FREEZE_METHODDEF \ {"freeze", (PyCFunction)gc_freeze, METH_NOARGS, gc_freeze__doc__}, @@ -583,4 +584,4 @@ gc_get_freeze_count(PyObject *module, PyObject *Py_UNUSED(ignored)) exit: return return_value; } -/*[clinic end generated code: output=19738854607938db input=a9049054013a1b77]*/ +/*[clinic end generated code: output=756c0e7719b76971 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/hmacmodule.c.h b/Modules/clinic/hmacmodule.c.h index 1ceb2d809e8..a31d2ab7f04 100644 --- a/Modules/clinic/hmacmodule.c.h +++ b/Modules/clinic/hmacmodule.c.h @@ -187,8 +187,8 @@ PyDoc_STRVAR(_hmac_HMAC_hexdigest__doc__, "\n" "Return hexadecimal digest of the bytes passed to the update() method so far.\n" "\n" -"This may be used to exchange the value safely in email or other non-binary\n" -"environments.\n" +"This may be used to exchange the value safely in email or other\n" +"non-binary environments.\n" "\n" "This method may raise a MemoryError."); @@ -670,4 +670,4 @@ _hmac_compute_blake2b_32(PyObject *module, PyObject *const *args, Py_ssize_t nar exit: return return_value; } -/*[clinic end generated code: output=30c0614482d963f5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6ec5948df1c5569a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/itertoolsmodule.c.h b/Modules/clinic/itertoolsmodule.c.h index 49816bfcb42..d9917b47dc9 100644 --- a/Modules/clinic/itertoolsmodule.c.h +++ b/Modules/clinic/itertoolsmodule.c.h @@ -814,8 +814,8 @@ PyDoc_STRVAR(itertools_compress__doc__, "\n" "Return data elements corresponding to true selector elements.\n" "\n" -"Forms a shorter iterator from selected data elements using the selectors to\n" -"choose the data elements."); +"Forms a shorter iterator from selected data elements using the selectors\n" +"to choose the data elements."); static PyObject * itertools_compress_impl(PyTypeObject *type, PyObject *seq1, PyObject *seq2); @@ -980,4 +980,4 @@ itertools_count(PyTypeObject *type, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=7f385837b13edbeb input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a34a31f60100e0ff input=a9049054013a1b77]*/ diff --git a/Modules/clinic/mathmodule.c.h b/Modules/clinic/mathmodule.c.h index b023299dd9c..a5e583c180d 100644 --- a/Modules/clinic/mathmodule.c.h +++ b/Modules/clinic/mathmodule.c.h @@ -198,8 +198,9 @@ PyDoc_STRVAR(math_frexp__doc__, "\n" "Return the mantissa and exponent of x, as pair (m, e).\n" "\n" -"m is a float and e is an int, such that x = m * 2.**e.\n" -"If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0."); +"If x is a finite nonzero number, then m is a float with\n" +"0.5 <= abs(m) < 1.0 and an integer e is such that\n" +"x == m * 2**e exactly. Else, return (x, 0)."); #define MATH_FREXP_METHODDEF \ {"frexp", (PyCFunction)math_frexp, METH_O, math_frexp__doc__}, @@ -1043,8 +1044,8 @@ PyDoc_STRVAR(math_nextafter__doc__, "\n" "If steps is not specified or is None, it defaults to 1.\n" "\n" -"Raises a TypeError, if x or y is not a double, or if steps is not an integer.\n" -"Raises ValueError if steps is negative."); +"Raises a TypeError, if x or y is not a double, or if steps is not\n" +"an integer. Raises ValueError if steps is negative."); #define MATH_NEXTAFTER_METHODDEF \ {"nextafter", _PyCFunction_CAST(math_nextafter), METH_FASTCALL|METH_KEYWORDS, math_nextafter__doc__}, @@ -1163,4 +1164,4 @@ math_ulp(PyObject *module, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=23b2453ba77453e5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3452ce8caa2d1bd7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/overlapped.c.h b/Modules/clinic/overlapped.c.h index 7e2480bdace..ba41eab1565 100644 --- a/Modules/clinic/overlapped.c.h +++ b/Modules/clinic/overlapped.c.h @@ -529,8 +529,9 @@ PyDoc_STRVAR(_overlapped_Overlapped_getresult__doc__, "\n" "Retrieve result of operation.\n" "\n" -"If wait is true then it blocks until the operation is finished. If wait\n" -"is false and the operation is still pending then an error is raised."); +"If wait is true then it blocks until the operation is finished. If\n" +"wait is false and the operation is still pending then an error is\n" +"raised."); #define _OVERLAPPED_OVERLAPPED_GETRESULT_METHODDEF \ {"getresult", _PyCFunction_CAST(_overlapped_Overlapped_getresult), METH_FASTCALL, _overlapped_Overlapped_getresult__doc__}, @@ -1242,4 +1243,4 @@ _overlapped_Overlapped_WSARecvFromInto(PyObject *self, PyObject *const *args, Py return return_value; } -/*[clinic end generated code: output=3e4cb2b55342cd96 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0ecaf45a09539599 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index ad4c5dd1c9b..00a4f600918 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -512,9 +512,9 @@ PyDoc_STRVAR(os_chdir__doc__, "\n" "Change the current working directory to the specified path.\n" "\n" -"path may always be specified as a string.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -"If this functionality is unavailable, using it raises an exception."); +"path may always be specified as a string. On some platforms, path may\n" +"also be specified as an open file descriptor. If this functionality is\n" +"unavailable, using it raises an exception."); #define OS_CHDIR_METHODDEF \ {"chdir", _PyCFunction_CAST(os_chdir), METH_FASTCALL|METH_KEYWORDS, os_chdir__doc__}, @@ -649,14 +649,15 @@ PyDoc_STRVAR(os_chmod__doc__, "Change the access permissions of a file.\n" "\n" " path\n" -" Path to be modified. May always be specified as a str, bytes, or a path-like object.\n" -" On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception.\n" +" Path to be modified. May always be specified as a str, bytes, or\n" +" a path-like object. On some platforms, path may also be specified\n" +" as an open file descriptor. If this functionality is unavailable,\n" +" using it raises an exception.\n" " mode\n" " Operating-system mode bitfield.\n" -" Be careful when using number literals for *mode*. The conventional UNIX notation for\n" -" numeric modes uses an octal base, which needs to be indicated with a ``0o`` prefix in\n" -" Python.\n" +" Be careful when using number literals for *mode*. The conventional\n" +" UNIX notation for numeric modes uses an octal base, which needs to\n" +" be indicated with a ``0o`` prefix in Python.\n" " dir_fd\n" " If not None, it should be a file descriptor open to a directory,\n" " and path should be relative; path will then be relative to that\n" @@ -765,9 +766,9 @@ PyDoc_STRVAR(os_fchmod__doc__, " The file descriptor of the file to be modified.\n" " mode\n" " Operating-system mode bitfield.\n" -" Be careful when using number literals for *mode*. The conventional UNIX notation for\n" -" numeric modes uses an octal base, which needs to be indicated with a ``0o`` prefix in\n" -" Python.\n" +" Be careful when using number literals for *mode*. The conventional\n" +" UNIX notation for numeric modes uses an octal base, which needs to\n" +" be indicated with a ``0o`` prefix in Python.\n" "\n" "Equivalent to os.chmod(fd, mode)."); @@ -841,8 +842,8 @@ PyDoc_STRVAR(os_lchmod__doc__, "\n" "Change the access permissions of a file, without following symbolic links.\n" "\n" -"If path is a symlink, this affects the link itself rather than the target.\n" -"Equivalent to chmod(path, mode, follow_symlinks=False).\""); +"If path is a symlink, this affects the link itself rather than the\n" +"target. Equivalent to chmod(path, mode, follow_symlinks=False)."); #define OS_LCHMOD_METHODDEF \ {"lchmod", _PyCFunction_CAST(os_lchmod), METH_FASTCALL|METH_KEYWORDS, os_lchmod__doc__}, @@ -916,9 +917,9 @@ PyDoc_STRVAR(os_chflags__doc__, "\n" "Set file flags.\n" "\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, chflags will change flags on the symbolic link itself instead of the\n" -" file the link points to.\n" +"If follow_symlinks is False, and the last element of the path is\n" +"a symbolic link, chflags() will change flags on the symbolic link itself\n" +"instead of the file the link points to.\n" "follow_symlinks may not be implemented on your platform. If it is\n" "unavailable, using it will raise a NotImplementedError."); @@ -1329,10 +1330,11 @@ PyDoc_STRVAR(os_chown__doc__, "chown($module, /, path, uid, gid, *, dir_fd=None, follow_symlinks=True)\n" "--\n" "\n" -"Change the owner and group id of path to the numeric uid and gid.\\\n" +"Change the owner and group id of path to the numeric uid and gid.\n" "\n" " path\n" -" Path to be examined; can be string, bytes, a path-like object, or open-file-descriptor int.\n" +" Path to be examined; can be string, bytes, a path-like object, or\n" +" open-file-descriptor int.\n" " dir_fd\n" " If not None, it should be a file descriptor open to a directory,\n" " and path should be relative; path will then be relative to that\n" @@ -1342,18 +1344,19 @@ PyDoc_STRVAR(os_chown__doc__, " stat will examine the symbolic link itself instead of the file\n" " the link points to.\n" "\n" -"path may always be specified as a string.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception.\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, chown will modify the symbolic link itself instead of the file the\n" -" link points to.\n" +"path may always be specified as a string. On some platforms, path may\n" +"also be specified as an open file descriptor. If this functionality is\n" +"unavailable, using it raises an exception.\n" +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative to\n" +"that directory.\n" +"If follow_symlinks is False, and the last element of the path is\n" +"a symbolic link, chown will modify the symbolic link itself instead of\n" +"the file the link points to.\n" "It is an error to use dir_fd or follow_symlinks when specifying path as\n" -" an open file descriptor.\n" -"dir_fd and follow_symlinks may not be implemented on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError."); +"an open file descriptor.\n" +"dir_fd and follow_symlinks may not be implemented on your platform. If\n" +"they are unavailable, using them will raise a NotImplementedError."); #define OS_CHOWN_METHODDEF \ {"chown", _PyCFunction_CAST(os_chown), METH_FASTCALL|METH_KEYWORDS, os_chown__doc__}, @@ -1641,14 +1644,15 @@ PyDoc_STRVAR(os_link__doc__, "Create a hard link to a file.\n" "\n" "If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" -" descriptor open to a directory, and the respective path string (src or dst)\n" -" should be relative; the path will then be relative to that directory.\n" +"descriptor open to a directory, and the respective path string (src or\n" +"dst) should be relative; the path will then be relative to that\n" +"directory.\n" "If follow_symlinks is False, and the last element of src is a symbolic\n" -" link, link will create a link to the symbolic link itself instead of the\n" -" file the link points to.\n" -"src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your\n" -" platform. If they are unavailable, using them will raise a\n" -" NotImplementedError."); +"link, link will create a link to the symbolic link itself instead of the\n" +"file the link points to.\n" +"src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on\n" +"your platform. If they are unavailable, using them will raise\n" +"a NotImplementedError."); #define OS_LINK_METHODDEF \ {"link", _PyCFunction_CAST(os_link), METH_FASTCALL|METH_KEYWORDS, os_link__doc__}, @@ -1750,13 +1754,13 @@ PyDoc_STRVAR(os_listdir__doc__, "\n" "Return a list containing the names of the files in the directory.\n" "\n" -"path can be specified as either str, bytes, or a path-like object. If path is bytes,\n" -" the filenames returned will also be bytes; in all other circumstances\n" -" the filenames returned will be str.\n" +"path can be specified as either str, bytes, or a path-like object. If\n" +"path is bytes, the filenames returned will also be bytes; in all other\n" +"circumstances the filenames returned will be str.\n" "If path is None, uses the path=\'.\'.\n" -"On some platforms, path may also be specified as an open file descriptor;\\\n" -" the file descriptor must refer to a directory.\n" -" If this functionality is unavailable, using it raises NotImplementedError.\n" +"On some platforms, path may also be specified as an open file\n" +"descriptor; the file descriptor must refer to a directory. If this\n" +"functionality is unavailable, using it raises NotImplementedError.\n" "\n" "The list is in arbitrary order. It does not include the special\n" "entries \'.\' and \'..\' even if they are present in the directory."); @@ -2709,13 +2713,14 @@ PyDoc_STRVAR(os_mkdir__doc__, "\n" "Create a directory.\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError.\n" +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative to\n" +"that directory.\n" +"dir_fd may not be implemented on your platform. If it is unavailable,\n" +"using it will raise a NotImplementedError.\n" "\n" -"The mode argument is ignored on Windows. Where it is used, the current umask\n" -"value is first masked out."); +"The mode argument is ignored on Windows. Where it is used, the current\n" +"umask value is first masked out."); #define OS_MKDIR_METHODDEF \ {"mkdir", _PyCFunction_CAST(os_mkdir), METH_FASTCALL|METH_KEYWORDS, os_mkdir__doc__}, @@ -2981,10 +2986,11 @@ PyDoc_STRVAR(os_rename__doc__, "Rename a file or directory.\n" "\n" "If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" -" descriptor open to a directory, and the respective path string (src or dst)\n" -" should be relative; the path will then be relative to that directory.\n" +"descriptor open to a directory, and the respective path string (src or\n" +"dst) should be relative; the path will then be relative to that\n" +"directory.\n" "src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError."); +"If they are unavailable, using them will raise a NotImplementedError."); #define OS_RENAME_METHODDEF \ {"rename", _PyCFunction_CAST(os_rename), METH_FASTCALL|METH_KEYWORDS, os_rename__doc__}, @@ -3075,10 +3081,11 @@ PyDoc_STRVAR(os_replace__doc__, "Rename a file or directory, overwriting the destination.\n" "\n" "If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" -" descriptor open to a directory, and the respective path string (src or dst)\n" -" should be relative; the path will then be relative to that directory.\n" +"descriptor open to a directory, and the respective path string (src or\n" +"dst) should be relative; the path will then be relative to that\n" +"directory.\n" "src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError."); +"If they are unavailable, using them will raise a NotImplementedError."); #define OS_REPLACE_METHODDEF \ {"replace", _PyCFunction_CAST(os_replace), METH_FASTCALL|METH_KEYWORDS, os_replace__doc__}, @@ -3168,10 +3175,11 @@ PyDoc_STRVAR(os_rmdir__doc__, "\n" "Remove a directory.\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative\n" +"to that directory.\n" "dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); +"If it is unavailable, using it will raise a NotImplementedError."); #define OS_RMDIR_METHODDEF \ {"rmdir", _PyCFunction_CAST(os_rmdir), METH_FASTCALL|METH_KEYWORDS, os_rmdir__doc__}, @@ -3426,10 +3434,11 @@ PyDoc_STRVAR(os_unlink__doc__, "\n" "Remove a file (same as remove()).\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative to\n" +"that directory.\n" "dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); +"If it is unavailable, using it will raise a NotImplementedError."); #define OS_UNLINK_METHODDEF \ {"unlink", _PyCFunction_CAST(os_unlink), METH_FASTCALL|METH_KEYWORDS, os_unlink__doc__}, @@ -3503,10 +3512,11 @@ PyDoc_STRVAR(os_remove__doc__, "\n" "Remove a file (same as unlink()).\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative\n" +"to that directory.\n" "dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); +"If it is unavailable, using it will raise a NotImplementedError."); #define OS_REMOVE_METHODDEF \ {"remove", _PyCFunction_CAST(os_remove), METH_FASTCALL|METH_KEYWORDS, os_remove__doc__}, @@ -3606,27 +3616,28 @@ PyDoc_STRVAR(os_utime__doc__, "\n" "Set the access and modified time of path.\n" "\n" -"path may always be specified as a string.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception.\n" +"path may always be specified as a string. On some platforms, path may\n" +"also be specified as an open file descriptor. If this functionality is\n" +"unavailable, using it raises an exception.\n" "\n" "If times is not None, it must be a tuple (atime, mtime);\n" -" atime and mtime should be expressed as float seconds since the epoch.\n" +"atime and mtime should be expressed as float seconds since the epoch.\n" "If ns is specified, it must be a tuple (atime_ns, mtime_ns);\n" -" atime_ns and mtime_ns should be expressed as integer nanoseconds\n" -" since the epoch.\n" +"atime_ns and mtime_ns should be expressed as integer nanoseconds\n" +"since the epoch.\n" "If times is None and ns is unspecified, utime uses the current time.\n" "Specifying tuples for both times and ns is an error.\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, utime will modify the symbolic link itself instead of the file the\n" -" link points to.\n" -"It is an error to use dir_fd or follow_symlinks when specifying path\n" -" as an open file descriptor.\n" +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative to\n" +"that directory.\n" +"If follow_symlinks is False, and the last element of the path is\n" +"a symbolic link, utime will modify the symbolic link itself instead of\n" +"the file the link points to.\n" +"It is an error to use dir_fd or follow_symlinks when specifying path as\n" +"an open file descriptor.\n" "dir_fd and follow_symlinks may not be available on your platform.\n" -" If they are unavailable, using them will raise a NotImplementedError."); +"If they are unavailable, using them will raise a NotImplementedError."); #define OS_UTIME_METHODDEF \ {"utime", _PyCFunction_CAST(os_utime), METH_FASTCALL|METH_KEYWORDS, os_utime__doc__}, @@ -3929,7 +3940,8 @@ PyDoc_STRVAR(os_posix_spawn__doc__, " resetids\n" " If the value is `true` the POSIX_SPAWN_RESETIDS will be activated.\n" " setsid\n" -" If the value is `true` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP will be activated.\n" +" If the value is `true` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP\n" +" will be activated.\n" " setsigmask\n" " The sigmask to use with the POSIX_SPAWN_SETSIGMASK flag.\n" " setsigdef\n" @@ -4082,7 +4094,8 @@ PyDoc_STRVAR(os_posix_spawnp__doc__, " resetids\n" " If the value is `True` the POSIX_SPAWN_RESETIDS will be activated.\n" " setsid\n" -" If the value is `True` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP will be activated.\n" +" If the value is `True` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP\n" +" will be activated.\n" " setsigmask\n" " The sigmask to use with the POSIX_SPAWN_SETSIGMASK flag.\n" " setsigdef\n" @@ -4953,8 +4966,8 @@ PyDoc_STRVAR(os_posix_openpt__doc__, "Open and return a file descriptor for a master pseudo-terminal device.\n" "\n" "Performs a posix_openpt() C function call. The oflag argument is used to\n" -"set file status flags and file access modes as specified in the manual page\n" -"of posix_openpt() of your system."); +"set file status flags and file access modes as specified in the manual\n" +"page of posix_openpt() of your system."); #define OS_POSIX_OPENPT_METHODDEF \ {"posix_openpt", (PyCFunction)os_posix_openpt, METH_O, os_posix_openpt__doc__}, @@ -5411,9 +5424,9 @@ PyDoc_STRVAR(os_initgroups__doc__, "\n" "Initialize the group access list.\n" "\n" -"Call the system initgroups() to initialize the group access list with all of\n" -"the groups of which the specified username is a member, plus the specified\n" -"group id."); +"Call the system initgroups() to initialize the group access list with\n" +"all of the groups of which the specified username is a member, plus the\n" +"specified group id."); #define OS_INITGROUPS_METHODDEF \ {"initgroups", _PyCFunction_CAST(os_initgroups), METH_FASTCALL, os_initgroups__doc__}, @@ -5457,9 +5470,9 @@ PyDoc_STRVAR(os_initgroups__doc__, "\n" "Initialize the group access list.\n" "\n" -"Call the system initgroups() to initialize the group access list with all of\n" -"the groups of which the specified username is a member, plus the specified\n" -"group id."); +"Call the system initgroups() to initialize the group access list with\n" +"all of the groups of which the specified username is a member, plus the\n" +"specified group id."); #define OS_INITGROUPS_METHODDEF \ {"initgroups", _PyCFunction_CAST(os_initgroups), METH_FASTCALL, os_initgroups__doc__}, @@ -5612,7 +5625,8 @@ PyDoc_STRVAR(os_getppid__doc__, "Return the parent\'s process id.\n" "\n" "If the parent process has already exited, Windows machines will still\n" -"return its id; others systems will return the id of the \'init\' process (1)."); +"return its id; others systems will return the id of the \'init\' proces\n" +"(1)."); #define OS_GETPPID_METHODDEF \ {"getppid", (PyCFunction)os_getppid, METH_NOARGS, os_getppid__doc__}, @@ -6162,8 +6176,8 @@ PyDoc_STRVAR(os_waitid__doc__, " Constructed from the ORing of one or more of WEXITED, WSTOPPED\n" " or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT.\n" "\n" -"Returns either waitid_result or None if WNOHANG is specified and there are\n" -"no children in a waitable state."); +"Returns either waitid_result or None if WNOHANG is specified and there\n" +"are no children in a waitable state."); #define OS_WAITID_METHODDEF \ {"waitid", _PyCFunction_CAST(os_waitid), METH_FASTCALL, os_waitid__doc__}, @@ -6324,8 +6338,8 @@ PyDoc_STRVAR(os_pidfd_open__doc__, "\n" "Return a file descriptor referring to the process *pid*.\n" "\n" -"The descriptor can be used to perform process management without races and\n" -"signals."); +"The descriptor can be used to perform process management without races\n" +"and signals."); #define OS_PIDFD_OPEN_METHODDEF \ {"pidfd_open", _PyCFunction_CAST(os_pidfd_open), METH_FASTCALL|METH_KEYWORDS, os_pidfd_open__doc__}, @@ -6393,6 +6407,93 @@ os_pidfd_open(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec #endif /* (defined(__linux__) && defined(__NR_pidfd_open) && !(defined(__ANDROID__) && __ANDROID_API__ < 31)) */ +#if (defined(__linux__) && defined(__NR_pidfd_getfd) && !(defined(__ANDROID__) && __ANDROID_API__ < 31)) + +PyDoc_STRVAR(os_pidfd_getfd__doc__, +"pidfd_getfd($module, /, pidfd, targetfd, *, flags=0)\n" +"--\n" +"\n" +"Duplicate a file descriptor from the process referred to by *pidfd*.\n" +"\n" +" pidfd\n" +" A process file descriptor.\n" +" targetfd\n" +" The file descriptor to duplicate from the target process.\n" +" flags\n" +" Reserved, must be 0."); + +#define OS_PIDFD_GETFD_METHODDEF \ + {"pidfd_getfd", _PyCFunction_CAST(os_pidfd_getfd), METH_FASTCALL|METH_KEYWORDS, os_pidfd_getfd__doc__}, + +static PyObject * +os_pidfd_getfd_impl(PyObject *module, int pidfd, int targetfd, + unsigned int flags); + +static PyObject * +os_pidfd_getfd(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) + + #define NUM_KEYWORDS 3 + static struct { + PyGC_Head _this_is_not_used; + PyObject_VAR_HEAD + Py_hash_t ob_hash; + PyObject *ob_item[NUM_KEYWORDS]; + } _kwtuple = { + .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) + .ob_hash = -1, + .ob_item = { &_Py_ID(pidfd), &_Py_ID(targetfd), &_Py_ID(flags), }, + }; + #undef NUM_KEYWORDS + #define KWTUPLE (&_kwtuple.ob_base.ob_base) + + #else // !Py_BUILD_CORE + # define KWTUPLE NULL + #endif // !Py_BUILD_CORE + + static const char * const _keywords[] = {"pidfd", "targetfd", "flags", NULL}; + static _PyArg_Parser _parser = { + .keywords = _keywords, + .fname = "pidfd_getfd", + .kwtuple = KWTUPLE, + }; + #undef KWTUPLE + PyObject *argsbuf[3]; + Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2; + int pidfd; + int targetfd; + unsigned int flags = 0; + + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, + /*minpos*/ 2, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf); + if (!args) { + goto exit; + } + pidfd = PyLong_AsInt(args[0]); + if (pidfd == -1 && PyErr_Occurred()) { + goto exit; + } + targetfd = PyLong_AsInt(args[1]); + if (targetfd == -1 && PyErr_Occurred()) { + goto exit; + } + if (!noptargs) { + goto skip_optional_kwonly; + } + if (!_PyLong_UnsignedInt_Converter(args[2], &flags)) { + goto exit; + } +skip_optional_kwonly: + return_value = os_pidfd_getfd_impl(module, pidfd, targetfd, flags); + +exit: + return return_value; +} + +#endif /* (defined(__linux__) && defined(__NR_pidfd_getfd) && !(defined(__ANDROID__) && __ANDROID_API__ < 31)) */ + #if defined(HAVE_SETNS) PyDoc_STRVAR(os_setns__doc__, @@ -6549,8 +6650,9 @@ PyDoc_STRVAR(os_readlink__doc__, "\n" "Return a string representing the path to which the symbolic link points.\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -"and path should be relative; path will then be relative to that directory.\n" +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative to\n" +"that directory.\n" "\n" "dir_fd may not be implemented on your platform. If it is unavailable,\n" "using it will raise a NotImplementedError."); @@ -6632,14 +6734,15 @@ PyDoc_STRVAR(os_symlink__doc__, "Create a symbolic link pointing to src named dst.\n" "\n" "target_is_directory is required on Windows if the target is to be\n" -" interpreted as a directory. (On Windows, symlink requires\n" -" Windows 6.0 or greater, and raises a NotImplementedError otherwise.)\n" -" target_is_directory is ignored on non-Windows platforms.\n" +"interpreted as a directory. (On Windows, symlink requires Windows 6.0\n" +"or greater, and raises a NotImplementedError otherwise.)\n" +"target_is_directory is ignored on non-Windows platforms.\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative\n" +"to that directory.\n" +"dir_fd may not be implemented on your platform. If it is unavailable,\n" +"using it will raise a NotImplementedError."); #define OS_SYMLINK_METHODDEF \ {"symlink", _PyCFunction_CAST(os_symlink), METH_FASTCALL|METH_KEYWORDS, os_symlink__doc__}, @@ -7307,10 +7410,11 @@ PyDoc_STRVAR(os_open__doc__, "\n" "Open a file for low level IO. Returns a file descriptor (integer).\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative to\n" +"that directory.\n" +"dir_fd may not be implemented on your platform. If it is unavailable,\n" +"using it will raise a NotImplementedError."); #define OS_OPEN_METHODDEF \ {"open", _PyCFunction_CAST(os_open), METH_FASTCALL|METH_KEYWORDS, os_open__doc__}, @@ -7684,7 +7788,8 @@ PyDoc_STRVAR(os_lseek__doc__, " - SEEK_CUR: seek from the current file position.\n" " - SEEK_END: seek from the end of the file.\n" "\n" -"The return value is the number of bytes relative to the beginning of the file."); +"The return value is the number of bytes relative to the beginning of\n" +"the file."); #define OS_LSEEK_METHODDEF \ {"lseek", _PyCFunction_CAST(os_lseek), METH_FASTCALL, os_lseek__doc__}, @@ -7775,15 +7880,15 @@ PyDoc_STRVAR(os_readinto__doc__, "\n" "Read into a buffer object from a file descriptor.\n" "\n" -"The buffer should be mutable and bytes-like. On success, returns the number of\n" -"bytes read. Less bytes may be read than the size of the buffer. The underlying\n" -"system call will be retried when interrupted by a signal, unless the signal\n" -"handler raises an exception. Other errors will not be retried and an error will\n" -"be raised.\n" +"The buffer should be mutable and bytes-like. On success, returns the\n" +"number of bytes read. Less bytes may be read than the size of the\n" +"buffer. The underlying system call will be retried when interrupted by\n" +"a signal, unless the signal handler raises an exception. Other errors\n" +"will not be retried and an error will be raised.\n" "\n" -"Returns 0 if *fd* is at end of file or if the provided *buffer* has length 0\n" -"(which can be used to check for errors without reading data). Never returns\n" -"negative."); +"Returns 0 if *fd* is at end of file or if the provided *buffer* has\n" +"length 0 (which can be used to check for errors without reading data).\n" +"Never returns negative."); #define OS_READINTO_METHODDEF \ {"readinto", _PyCFunction_CAST(os_readinto), METH_FASTCALL, os_readinto__doc__}, @@ -7938,14 +8043,15 @@ PyDoc_STRVAR(os_preadv__doc__, "\n" "Reads from a file descriptor into a number of mutable bytes-like objects.\n" "\n" -"Combines the functionality of readv() and pread(). As readv(), it will\n" -"transfer data into each buffer until it is full and then move on to the next\n" -"buffer in the sequence to hold the rest of the data. Its fourth argument,\n" -"specifies the file offset at which the input operation is to be performed. It\n" -"will return the total number of bytes read (which can be less than the total\n" -"capacity of all the objects).\n" +"Combines the functionality of readv() and pread(). As readv(), it will\n" +"transfer data into each buffer until it is full and then move on to the\n" +"next buffer in the sequence to hold the rest of the data. Its fourth\n" +"argument, specifies the file offset at which the input operation is to\n" +"be performed. It will return the total number of bytes read (which can\n" +"be less than the total capacity of all the objects).\n" "\n" -"The flags argument contains a bitwise OR of zero or more of the following flags:\n" +"The flags argument contains a bitwise OR of zero or more of the\n" +"following flags:\n" "\n" "- RWF_HIPRI\n" "- RWF_NOWAIT\n" @@ -8679,14 +8785,16 @@ PyDoc_STRVAR(os_pwritev__doc__, "\n" "Writes the contents of bytes-like objects to a file descriptor at a given offset.\n" "\n" -"Combines the functionality of writev() and pwrite(). All buffers must be a sequence\n" -"of bytes-like objects. Buffers are processed in array order. Entire contents of first\n" -"buffer is written before proceeding to second, and so on. The operating system may\n" -"set a limit (sysconf() value SC_IOV_MAX) on the number of buffers that can be used.\n" -"This function writes the contents of each object to the file descriptor and returns\n" -"the total number of bytes written.\n" +"Combines the functionality of writev() and pwrite(). All buffers must be\n" +"a sequence of bytes-like objects. Buffers are processed in array order.\n" +"Entire contents of first buffer is written before proceeding to second,\n" +"and so on. The operating system may set a limit (sysconf() value\n" +"SC_IOV_MAX) on the number of buffers that can be used.\n" +"This function writes the contents of each object to the file descriptor\n" +"and returns the total number of bytes written.\n" "\n" -"The flags argument contains a bitwise OR of zero or more of the following flags:\n" +"The flags argument contains a bitwise OR of zero or more of the\n" +"following flags:\n" "\n" "- RWF_DSYNC\n" "- RWF_SYNC\n" @@ -9001,10 +9109,11 @@ PyDoc_STRVAR(os_mkfifo__doc__, "\n" "Create a \"fifo\" (a POSIX named pipe).\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative to\n" +"that directory.\n" +"dir_fd may not be implemented on your platform. If it is unavailable,\n" +"using it will raise a NotImplementedError."); #define OS_MKFIFO_METHODDEF \ {"mkfifo", _PyCFunction_CAST(os_mkfifo), METH_FASTCALL|METH_KEYWORDS, os_mkfifo__doc__}, @@ -9096,17 +9205,18 @@ PyDoc_STRVAR(os_mknod__doc__, "\n" "Create a node in the file system.\n" "\n" -"Create a node in the file system (file, device special file or named pipe)\n" -"at path. mode specifies both the permissions to use and the\n" +"Create a node in the file system (file, device special file or named\n" +"pipe) at path. mode specifies both the permissions to use and the\n" "type of node to be created, being combined (bitwise OR) with one of\n" -"S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. If S_IFCHR or S_IFBLK is set on mode,\n" -"device defines the newly created device special file (probably using\n" -"os.makedev()). Otherwise device is ignored.\n" +"S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. If S_IFCHR or S_IFBLK is set\n" +"on mode, device defines the newly created device special file (probably\n" +"using os.makedev()). Otherwise device is ignored.\n" "\n" -"If dir_fd is not None, it should be a file descriptor open to a directory,\n" -" and path should be relative; path will then be relative to that directory.\n" -"dir_fd may not be implemented on your platform.\n" -" If it is unavailable, using it will raise a NotImplementedError."); +"If dir_fd is not None, it should be a file descriptor open to\n" +"a directory, and path should be relative; path will then be relative\n" +"to that directory.\n" +"dir_fd may not be implemented on your platform. If it is unavailable,\n" +"using it will raise a NotImplementedError."); #define OS_MKNOD_METHODDEF \ {"mknod", _PyCFunction_CAST(os_mknod), METH_FASTCALL|METH_KEYWORDS, os_mknod__doc__}, @@ -9352,8 +9462,9 @@ PyDoc_STRVAR(os_truncate__doc__, "\n" "Truncate a file, specified by path, to a specific length.\n" "\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception."); +"On some platforms, path may also be specified as an open file\n" +"descriptor. If this functionality is unavailable, using it raises\n" +"an exception."); #define OS_TRUNCATE_METHODDEF \ {"truncate", _PyCFunction_CAST(os_truncate), METH_FASTCALL|METH_KEYWORDS, os_truncate__doc__}, @@ -9427,7 +9538,8 @@ PyDoc_STRVAR(os_posix_fallocate__doc__, "Ensure a file has allocated at least a particular number of bytes on disk.\n" "\n" "Ensure that the file specified by fd encompasses a range of bytes\n" -"starting at offset bytes from the beginning and continuing for length bytes."); +"starting at offset bytes from the beginning and continuing for length\n" +"bytes."); #define OS_POSIX_FALLOCATE_METHODDEF \ {"posix_fallocate", _PyCFunction_CAST(os_posix_fallocate), METH_FASTCALL, os_posix_fallocate__doc__}, @@ -9473,8 +9585,8 @@ PyDoc_STRVAR(os_posix_fadvise__doc__, "\n" "Announce an intention to access data in a specific pattern.\n" "\n" -"Announce an intention to access data in a specific pattern, thus allowing\n" -"the kernel to make optimizations.\n" +"Announce an intention to access data in a specific pattern, thus\n" +"allowing the kernel to make optimizations.\n" "The advice applies to the region of the file specified by fd starting at\n" "offset and continuing for length bytes.\n" "advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL,\n" @@ -10296,8 +10408,9 @@ PyDoc_STRVAR(os_statvfs__doc__, "Perform a statvfs system call on the given path.\n" "\n" "path may always be specified as a string.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception."); +"On some platforms, path may also be specified as an open file\n" +"descriptor. If this functionality is unavailable, using it raises\n" +"an exception."); #define OS_STATVFS_METHODDEF \ {"statvfs", _PyCFunction_CAST(os_statvfs), METH_FASTCALL|METH_KEYWORDS, os_statvfs__doc__}, @@ -10480,8 +10593,9 @@ PyDoc_STRVAR(os_pathconf__doc__, "Return the configuration limit name for the file or directory path.\n" "\n" "If there is no limit, return -1.\n" -"On some platforms, path may also be specified as an open file descriptor.\n" -" If this functionality is unavailable, using it raises an exception."); +"On some platforms, path may also be specified as an open file\n" +"descriptor. If this functionality is unavailable, using it raises\n" +"an exception."); #define OS_PATHCONF_METHODDEF \ {"pathconf", _PyCFunction_CAST(os_pathconf), METH_FASTCALL|METH_KEYWORDS, os_pathconf__doc__}, @@ -10624,8 +10738,8 @@ PyDoc_STRVAR(os_abort__doc__, "\n" "Abort the interpreter immediately.\n" "\n" -"This function \'dumps core\' or otherwise fails in the hardest way possible\n" -"on the hosting operating system. This function never returns."); +"This function \'dumps core\' or otherwise fails in the hardest way\n" +"possible on the hosting operating system. This function never returns."); #define OS_ABORT_METHODDEF \ {"abort", (PyCFunction)os_abort, METH_NOARGS, os_abort__doc__}, @@ -11013,10 +11127,11 @@ PyDoc_STRVAR(os_getxattr__doc__, "\n" "Return the value of extended attribute attribute on path.\n" "\n" -"path may be either a string, a path-like object, or an open file descriptor.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, getxattr will examine the symbolic link itself instead of the file\n" -" the link points to."); +"path may be either a string, a path-like object, or an open file\n" +"descriptor.\n" +"If follow_symlinks is False, and the last element of the path is\n" +"a symbolic link, getxattr will examine the symbolic link itself\n" +"instead of the file the link points to."); #define OS_GETXATTR_METHODDEF \ {"getxattr", _PyCFunction_CAST(os_getxattr), METH_FASTCALL|METH_KEYWORDS, os_getxattr__doc__}, @@ -11103,10 +11218,11 @@ PyDoc_STRVAR(os_setxattr__doc__, "\n" "Set extended attribute attribute on path to value.\n" "\n" -"path may be either a string, a path-like object, or an open file descriptor.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, setxattr will modify the symbolic link itself instead of the file\n" -" the link points to."); +"path may be either a string, a path-like object, or an open file\n" +"descriptor.\n" +"If follow_symlinks is False, and the last element of the path is\n" +"a symbolic link, setxattr will modify the symbolic link itself instead\n" +"of the file the link points to."); #define OS_SETXATTR_METHODDEF \ {"setxattr", _PyCFunction_CAST(os_setxattr), METH_FASTCALL|METH_KEYWORDS, os_setxattr__doc__}, @@ -11214,10 +11330,11 @@ PyDoc_STRVAR(os_removexattr__doc__, "\n" "Remove extended attribute attribute on path.\n" "\n" -"path may be either a string, a path-like object, or an open file descriptor.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, removexattr will modify the symbolic link itself instead of the file\n" -" the link points to."); +"path may be either a string, a path-like object, or an open file\n" +"descriptor.\n" +"If follow_symlinks is False, and the last element of the path is\n" +"a symbolic link, removexattr will modify the symbolic link itself\n" +"instead of the file the link points to."); #define OS_REMOVEXATTR_METHODDEF \ {"removexattr", _PyCFunction_CAST(os_removexattr), METH_FASTCALL|METH_KEYWORDS, os_removexattr__doc__}, @@ -11303,11 +11420,12 @@ PyDoc_STRVAR(os_listxattr__doc__, "\n" "Return a list of extended attributes on path.\n" "\n" -"path may be either None, a string, a path-like object, or an open file descriptor.\n" -"if path is None, listxattr will examine the current directory.\n" -"If follow_symlinks is False, and the last element of the path is a symbolic\n" -" link, listxattr will examine the symbolic link itself instead of the file\n" -" the link points to."); +"path may be either None, a string, a path-like object, or an open file\n" +"descriptor. If path is None, listxattr will examine the current\n" +"directory.\n" +"If follow_symlinks is False, and the last element of the path is\n" +"a symbolic link, listxattr will examine the symbolic link itself instead\n" +"of the file the link points to."); #define OS_LISTXATTR_METHODDEF \ {"listxattr", _PyCFunction_CAST(os_listxattr), METH_FASTCALL|METH_KEYWORDS, os_listxattr__doc__}, @@ -12329,9 +12447,9 @@ PyDoc_STRVAR(os_scandir__doc__, "\n" "Return an iterator of DirEntry objects for given path.\n" "\n" -"path can be specified as either str, bytes, or a path-like object. If path\n" -"is bytes, the names of yielded DirEntry objects will also be bytes; in\n" -"all other circumstances they will be str.\n" +"path can be specified as either str, bytes, or a path-like object. If\n" +"path is bytes, the names of yielded DirEntry objects will also be bytes;\n" +"in all other circumstances they will be str.\n" "\n" "If path is None, uses the path=\'.\'."); @@ -12403,9 +12521,9 @@ PyDoc_STRVAR(os_fspath__doc__, "\n" "Return the file system path representation of the object.\n" "\n" -"If the object is str or bytes, then allow it to pass through as-is. If the\n" -"object defines __fspath__(), then return the result of that method. All other\n" -"types raise a TypeError."); +"If the object is str or bytes, then allow it to pass through as-is. If\n" +"the object defines __fspath__(), then return the result of that method.\n" +"All other types raise a TypeError."); #define OS_FSPATH_METHODDEF \ {"fspath", _PyCFunction_CAST(os_fspath), METH_FASTCALL|METH_KEYWORDS, os_fspath__doc__}, @@ -12699,8 +12817,8 @@ PyDoc_STRVAR(os_waitstatus_to_exitcode__doc__, "On Windows, return status shifted right by 8 bits.\n" "\n" "On Unix, if the process is being traced or if waitpid() was called with\n" -"WUNTRACED option, the caller must first check if WIFSTOPPED(status) is true.\n" -"This function must not be called if WIFSTOPPED(status) is true."); +"WUNTRACED option, the caller must first check if WIFSTOPPED(status) is\n" +"true. This function must not be called if WIFSTOPPED(status) is true."); #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF \ {"waitstatus_to_exitcode", _PyCFunction_CAST(os_waitstatus_to_exitcode), METH_FASTCALL|METH_KEYWORDS, os_waitstatus_to_exitcode__doc__}, @@ -13296,6 +13414,10 @@ os__emscripten_log(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py #define OS_PIDFD_OPEN_METHODDEF #endif /* !defined(OS_PIDFD_OPEN_METHODDEF) */ +#ifndef OS_PIDFD_GETFD_METHODDEF + #define OS_PIDFD_GETFD_METHODDEF +#endif /* !defined(OS_PIDFD_GETFD_METHODDEF) */ + #ifndef OS_SETNS_METHODDEF #define OS_SETNS_METHODDEF #endif /* !defined(OS_SETNS_METHODDEF) */ @@ -13611,4 +13733,4 @@ os__emscripten_log(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py #ifndef OS__EMSCRIPTEN_LOG_METHODDEF #define OS__EMSCRIPTEN_LOG_METHODDEF #endif /* !defined(OS__EMSCRIPTEN_LOG_METHODDEF) */ -/*[clinic end generated code: output=e709b8b783fbc261 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=250ea2e34fdd133f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index ff2e28269dc..1a07726d303 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -218,8 +218,9 @@ PyDoc_STRVAR(pyexpat_xmlparser_GetInputContext__doc__, "\n" "Return the untranslated text of the input that caused the current event.\n" "\n" -"If the event was generated by a large amount of text (such as a start tag\n" -"for an element with many attributes), not all of the text may be available."); +"If the event was generated by a large amount of text (such as\n" +"a start tag for an element with many attributes), not all of the\n" +"text may be available."); #define PYEXPAT_XMLPARSER_GETINPUTCONTEXT_METHODDEF \ {"GetInputContext", (PyCFunction)pyexpat_xmlparser_GetInputContext, METH_NOARGS, pyexpat_xmlparser_GetInputContext__doc__}, @@ -357,9 +358,10 @@ PyDoc_STRVAR(pyexpat_xmlparser_UseForeignDTD__doc__, "\n" "Allows the application to provide an artificial external subset if one is not specified as part of the document instance.\n" "\n" -"This readily allows the use of a \'default\' document type controlled by the\n" -"application, while still getting the advantage of providing document type\n" -"information to the parser. \'flag\' defaults to True if not provided."); +"This readily allows the use of a \'default\' document type controlled\n" +"by the application, while still getting the advantage of providing\n" +"document type information to the parser. \'flag\' defaults to True if\n" +"not provided."); #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF \ {"UseForeignDTD", _PyCFunction_CAST(pyexpat_xmlparser_UseForeignDTD), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_UseForeignDTD__doc__}, @@ -417,14 +419,15 @@ PyDoc_STRVAR(pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThresho "\n" "Sets the number of output bytes needed to activate protection against billion laughs attacks.\n" "\n" -"The number of output bytes includes amplification from entity expansion\n" -"and reading DTD files.\n" +"The number of output bytes includes amplification from entity\n" +"expansion and reading DTD files.\n" "\n" -"Parser objects usually have a protection activation threshold of 8 MiB,\n" -"but the actual default value depends on the underlying Expat library.\n" +"Parser objects usually have a protection activation threshold of\n" +"8 MiB, but the actual default value depends on the underlying Expat\n" +"library.\n" "\n" -"Activation thresholds below 4 MiB are known to break support for DITA 1.3\n" -"payload and are hence not recommended."); +"Activation thresholds below 4 MiB are known to break support for\n" +"DITA 1.3 payload and are hence not recommended."); #define PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONACTIVATIONTHRESHOLD_METHODDEF \ {"SetBillionLaughsAttackProtectionActivationThreshold", _PyCFunction_CAST(pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold__doc__}, @@ -479,18 +482,21 @@ PyDoc_STRVAR(pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplificat "\n" "Sets the maximum tolerated amplification factor for protection against billion laughs attacks.\n" "\n" -"The amplification factor is calculated as \"(direct + indirect) / direct\"\n" -"while parsing, where \"direct\" is the number of bytes read from the primary\n" -"document in parsing and \"indirect\" is the number of bytes added by expanding\n" -"entities and reading external DTD files, combined.\n" +"The amplification factor is calculated as \"(direct + indirect) /\n" +"direct\" while parsing, where \"direct\" is the number of bytes read\n" +"from the primary document in parsing and \"indirect\" is the number of\n" +"bytes added by expanding entities and reading external DTD files,\n" +"combined.\n" "\n" -"The \'max_factor\' value must be a non-NaN floating point value greater than\n" -"or equal to 1.0. Amplification factors greater than 30,000 can be observed\n" -"in the middle of parsing even with benign files in practice. In particular,\n" -"the activation threshold should be carefully chosen to avoid false positives.\n" +"The \'max_factor\' value must be a non-NaN floating point value\n" +"greater than or equal to 1.0. Amplification factors greater than\n" +"30,000 can be observed in the middle of parsing even with benign\n" +"files in practice. In particular, the activation threshold should\n" +"be carefully chosen to avoid false positives.\n" "\n" "Parser objects usually have a maximum amplification factor of 100,\n" -"but the actual default value depends on the underlying Expat library."); +"but the actual default value depends on the underlying Expat\n" +"library."); #define PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONMAXIMUMAMPLIFICATION_METHODDEF \ {"SetBillionLaughsAttackProtectionMaximumAmplification", _PyCFunction_CAST(pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification__doc__}, @@ -551,8 +557,9 @@ PyDoc_STRVAR(pyexpat_xmlparser_SetAllocTrackerActivationThreshold__doc__, "\n" "Sets the number of allocated bytes of dynamic memory needed to activate protection against disproportionate use of RAM.\n" "\n" -"Parser objects usually have an allocation activation threshold of 64 MiB,\n" -"but the actual default value depends on the underlying Expat library."); +"Parser objects usually have an allocation activation threshold of\n" +"64 MiB, but the actual default value depends on the underlying Expat\n" +"library."); #define PYEXPAT_XMLPARSER_SETALLOCTRACKERACTIVATIONTHRESHOLD_METHODDEF \ {"SetAllocTrackerActivationThreshold", _PyCFunction_CAST(pyexpat_xmlparser_SetAllocTrackerActivationThreshold), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_SetAllocTrackerActivationThreshold__doc__}, @@ -606,18 +613,20 @@ PyDoc_STRVAR(pyexpat_xmlparser_SetAllocTrackerMaximumAmplification__doc__, "\n" "Sets the maximum amplification factor between direct input and bytes of dynamic memory allocated.\n" "\n" -"The amplification factor is calculated as \"allocated / direct\" while parsing,\n" -"where \"direct\" is the number of bytes read from the primary document in parsing\n" -"and \"allocated\" is the number of bytes of dynamic memory allocated in the parser\n" -"hierarchy.\n" +"The amplification factor is calculated as \"allocated / direct\" while\n" +"parsing, where \"direct\" is the number of bytes read from the primary\n" +"document in parsing and \"allocated\" is the number of bytes of\n" +"dynamic memory allocated in the parser hierarchy.\n" "\n" -"The \'max_factor\' value must be a non-NaN floating point value greater than\n" -"or equal to 1.0. Amplification factors greater than 100.0 can be observed\n" -"near the start of parsing even with benign files in practice. In particular,\n" -"the activation threshold should be carefully chosen to avoid false positives.\n" +"The \'max_factor\' value must be a non-NaN floating point value\n" +"greater than or equal to 1.0. Amplification factors greater than\n" +"100.0 can be observed near the start of parsing even with benign\n" +"files in practice. In particular, the activation threshold should\n" +"be carefully chosen to avoid false positives.\n" "\n" "Parser objects usually have a maximum amplification factor of 100,\n" -"but the actual default value depends on the underlying Expat library."); +"but the actual default value depends on the underlying Expat\n" +"library."); #define PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF \ {"SetAllocTrackerMaximumAmplification", _PyCFunction_CAST(pyexpat_xmlparser_SetAllocTrackerMaximumAmplification), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_SetAllocTrackerMaximumAmplification__doc__}, @@ -830,4 +839,4 @@ pyexpat_ErrorString(PyObject *module, PyObject *arg) #ifndef PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF #define PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF) */ -/*[clinic end generated code: output=81101a16a409daf6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=270a0bfe3300e8a1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/selectmodule.c.h b/Modules/clinic/selectmodule.c.h index 3952054e9e3..c1c8ad40e72 100644 --- a/Modules/clinic/selectmodule.c.h +++ b/Modules/clinic/selectmodule.c.h @@ -16,7 +16,8 @@ PyDoc_STRVAR(select_select__doc__, "\n" "Wait until one or more file descriptors are ready for some kind of I/O.\n" "\n" -"The first three arguments are iterables of file descriptors to be waited for:\n" +"The first three arguments are iterables of file descriptors to be waited\n" +"for:\n" "rlist -- wait until ready for reading\n" "wlist -- wait until ready for writing\n" "xlist -- wait for an \"exceptional condition\"\n" @@ -29,9 +30,9 @@ PyDoc_STRVAR(select_select__doc__, "a non-integer to specify fractions of seconds. If it is absent\n" "or None, the call will never time out.\n" "\n" -"The return value is a tuple of three lists corresponding to the first three\n" -"arguments; each contains the subset of the corresponding file descriptors\n" -"that are ready.\n" +"The return value is a tuple of three lists corresponding to the first\n" +"three arguments; each contains the subset of the corresponding file\n" +"descriptors that are ready.\n" "\n" "*** IMPORTANT NOTICE ***\n" "On Windows, only sockets are supported; on Unix, all file\n" @@ -214,8 +215,8 @@ PyDoc_STRVAR(select_poll_poll__doc__, " The maximum time to wait in milliseconds, or else None (or a negative\n" " value) to wait indefinitely.\n" "\n" -"Returns a list containing any descriptors that have events or errors to\n" -"report, as a list of (fd, event) 2-tuples."); +"Returns a list containing any descriptors that have events or errors\n" +"to report, as a list of (fd, event) 2-tuples."); #define SELECT_POLL_POLL_METHODDEF \ {"poll", _PyCFunction_CAST(select_poll_poll), METH_FASTCALL, select_poll_poll__doc__}, @@ -396,11 +397,11 @@ PyDoc_STRVAR(select_devpoll_poll__doc__, "Polls the set of registered file descriptors.\n" "\n" " timeout\n" -" The maximum time to wait in milliseconds, or else None (or a negative\n" -" value) to wait indefinitely.\n" +" The maximum time to wait in milliseconds, or else None (or\n" +" a negative value) to wait indefinitely.\n" "\n" -"Returns a list containing any descriptors that have events or errors to\n" -"report, as a list of (fd, event) 2-tuples."); +"Returns a list containing any descriptors that have events or errors\n" +"to report, as a list of (fd, event) 2-tuples."); #define SELECT_DEVPOLL_POLL_METHODDEF \ {"poll", _PyCFunction_CAST(select_devpoll_poll), METH_FASTCALL, select_devpoll_poll__doc__}, @@ -498,8 +499,8 @@ PyDoc_STRVAR(select_poll__doc__, "\n" "Returns a polling object.\n" "\n" -"This object supports registering and unregistering file descriptors, and then\n" -"polling them for I/O events."); +"This object supports registering and unregistering file descriptors, and\n" +"then polling them for I/O events."); #define SELECT_POLL_METHODDEF \ {"poll", (PyCFunction)select_poll, METH_NOARGS, select_poll__doc__}, @@ -523,8 +524,8 @@ PyDoc_STRVAR(select_devpoll__doc__, "\n" "Returns a polling object.\n" "\n" -"This object supports registering and unregistering file descriptors, and then\n" -"polling them for I/O events."); +"This object supports registering and unregistering file descriptors, and\n" +"then polling them for I/O events."); #define SELECT_DEVPOLL_METHODDEF \ {"devpoll", (PyCFunction)select_devpoll, METH_NOARGS, select_devpoll__doc__}, @@ -978,8 +979,8 @@ PyDoc_STRVAR(select_epoll_poll__doc__, " maxevents\n" " the maximum number of events returned; -1 means no limit\n" "\n" -"Returns a list containing any descriptors that have events to report,\n" -"as a list of (fd, events) 2-tuples."); +"Returns a list containing any descriptors that have events to\n" +"report, as a list of (fd, events) 2-tuples."); #define SELECT_EPOLL_POLL_METHODDEF \ {"poll", _PyCFunction_CAST(select_epoll_poll), METH_FASTCALL|METH_KEYWORDS, select_epoll_poll__doc__}, @@ -1399,4 +1400,4 @@ select_kqueue_control(PyObject *self, PyObject *const *args, Py_ssize_t nargs) #ifndef SELECT_KQUEUE_CONTROL_METHODDEF #define SELECT_KQUEUE_CONTROL_METHODDEF #endif /* !defined(SELECT_KQUEUE_CONTROL_METHODDEF) */ -/*[clinic end generated code: output=52e3be5cc66cf1b6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a1ac666294fd14bd input=a9049054013a1b77]*/ diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h index 9fd24d15bf2..ca470334460 100644 --- a/Modules/clinic/signalmodule.c.h +++ b/Modules/clinic/signalmodule.c.h @@ -138,11 +138,12 @@ PyDoc_STRVAR(signal_signal__doc__, "Set the action for the given signal.\n" "\n" "The action can be SIG_DFL, SIG_IGN, or a callable Python object.\n" -"The previous action is returned. See getsignal() for possible return values.\n" +"The previous action is returned. See getsignal() for possible return\n" +"values.\n" "\n" "*** IMPORTANT NOTICE ***\n" -"A signal handler function is called with two arguments:\n" -"the first is the signal number, the second is the interrupted stack frame."); +"A signal handler function is called with two arguments: the first is\n" +"the signal number, the second is the interrupted stack frame."); #define SIGNAL_SIGNAL_METHODDEF \ {"signal", _PyCFunction_CAST(signal_signal), METH_FASTCALL, signal_signal__doc__}, @@ -362,8 +363,8 @@ PyDoc_STRVAR(signal_setitimer__doc__, "\n" "Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF).\n" "\n" -"The timer will fire after value seconds and after that every interval seconds.\n" -"The itimer can be cleared by setting seconds to zero.\n" +"The timer will fire after value seconds and after that every interval\n" +"seconds. The itimer can be cleared by setting seconds to zero.\n" "\n" "Returns old values as a tuple: (delay, interval)."); @@ -508,8 +509,8 @@ PyDoc_STRVAR(signal_sigwait__doc__, "Wait for a signal.\n" "\n" "Suspend execution of the calling thread until the delivery of one of the\n" -"signals specified in the signal set sigset. The function accepts the signal\n" -"and returns the signal number."); +"signals specified in the signal set sigset. The function accepts the\n" +"signal and returns the signal number."); #define SIGNAL_SIGWAIT_METHODDEF \ {"sigwait", (PyCFunction)signal_sigwait, METH_O, signal_sigwait__doc__}, @@ -794,4 +795,4 @@ signal_pidfd_send_signal(PyObject *module, PyObject *const *args, Py_ssize_t nar #ifndef SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF #define SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF #endif /* !defined(SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF) */ -/*[clinic end generated code: output=42e20d118435d7fa input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0731d6f05c42c09a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/socketmodule.c.h b/Modules/clinic/socketmodule.c.h index e0cc1c50dcb..b565e7516d5 100644 --- a/Modules/clinic/socketmodule.c.h +++ b/Modules/clinic/socketmodule.c.h @@ -36,7 +36,8 @@ PyDoc_STRVAR(_socket_socket_send__doc__, "Send a data string to the socket.\n" "\n" "For the optional flags argument, see the Unix manual.\n" -"Return the number of bytes sent; this may be less than len(data) if the network is busy."); +"Return the number of bytes sent; this may be less than len(data) if\n" +"the network is busy."); #define _SOCKET_SOCKET_SEND_METHODDEF \ {"send", _PyCFunction_CAST(_socket_socket_send), METH_FASTCALL, _socket_socket_send__doc__}, @@ -84,7 +85,8 @@ PyDoc_STRVAR(_socket_socket_sendall__doc__, "\n" "For the optional flags argument, see the Unix manual.\n" "This calls send() repeatedly until all data is sent.\n" -"If an error occurs, it\'s impossible to tell how much data has been sent."); +"If an error occurs, it\'s impossible to tell how much data has been\n" +"sent."); #define _SOCKET_SOCKET_SENDALL_METHODDEF \ {"sendall", _PyCFunction_CAST(_socket_socket_sendall), METH_FASTCALL, _socket_socket_sendall__doc__}, @@ -140,13 +142,13 @@ PyDoc_STRVAR(_socket_socket_sendmsg__doc__, "data as an iterable of bytes-like objects (e.g. bytes objects).\n" "The ancdata argument specifies the ancillary data (control messages)\n" "as an iterable of zero or more tuples (cmsg_level, cmsg_type,\n" -"cmsg_data), where cmsg_level and cmsg_type are integers specifying the\n" -"protocol level and protocol-specific type respectively, and cmsg_data\n" -"is a bytes-like object holding the associated data. The flags\n" -"argument defaults to 0 and has the same meaning as for send(). If\n" -"address is supplied and not None, it sets a destination address for\n" -"the message. The return value is the number of bytes of non-ancillary\n" -"data sent."); +"cmsg_data), where cmsg_level and cmsg_type are integers specifying\n" +"the protocol level and protocol-specific type respectively, and\n" +"cmsg_data is a bytes-like object holding the associated data. The\n" +"flags argument defaults to 0 and has the same meaning as for send().\n" +"If address is supplied and not None, it sets a destination address\n" +"for the message. The return value is the number of bytes of\n" +"non-ancillary data sent."); #define _SOCKET_SOCKET_SENDMSG_METHODDEF \ {"sendmsg", _PyCFunction_CAST(_socket_socket_sendmsg), METH_FASTCALL, _socket_socket_sendmsg__doc__}, @@ -541,4 +543,4 @@ _socket_if_indextoname(PyObject *module, PyObject *arg) #ifndef _SOCKET_IF_INDEXTONAME_METHODDEF #define _SOCKET_IF_INDEXTONAME_METHODDEF #endif /* !defined(_SOCKET_IF_INDEXTONAME_METHODDEF) */ -/*[clinic end generated code: output=36051ebf6ad1e6f8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0b1fa78ac6589353 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/termios.c.h b/Modules/clinic/termios.c.h index 83f5a4f6e9f..35522bef1dc 100644 --- a/Modules/clinic/termios.c.h +++ b/Modules/clinic/termios.c.h @@ -270,7 +270,8 @@ PyDoc_STRVAR(termios_tcsetwinsize__doc__, "Set the tty winsize for file descriptor fd.\n" "\n" "The winsize to be set is taken from the winsize argument, which\n" -"is a two-item tuple (ws_row, ws_col) like the one returned by tcgetwinsize()."); +"is a two-item tuple (ws_row, ws_col) like the one returned by\n" +"tcgetwinsize()."); #define TERMIOS_TCSETWINSIZE_METHODDEF \ {"tcsetwinsize", (PyCFunction)(void(*)(void))termios_tcsetwinsize, METH_FASTCALL, termios_tcsetwinsize__doc__}, @@ -299,4 +300,4 @@ termios_tcsetwinsize(PyObject *module, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=c6c6192583b0da36 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d2176c4d9043d3cc input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index f8fd111754a..620e483d5a7 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -503,8 +503,8 @@ PyDoc_STRVAR(zlib_Decompress_decompress__doc__, " Unconsumed input data will be stored in\n" " the unconsumed_tail attribute.\n" "\n" -"After calling this function, some of the input data may still be stored in\n" -"internal buffers for later processing.\n" +"After calling this function, some of the input data may still be\n" +"stored in internal buffers for later processing.\n" "Call the flush() method to clear these buffers."); #define ZLIB_DECOMPRESS_DECOMPRESS_METHODDEF \ @@ -914,18 +914,19 @@ PyDoc_STRVAR(zlib__ZlibDecompressor_decompress__doc__, "\n" "Decompress *data*, returning uncompressed data as bytes.\n" "\n" -"If *max_length* is nonnegative, returns at most *max_length* bytes of\n" -"decompressed data. If this limit is reached and further output can be\n" -"produced, *self.needs_input* will be set to ``False``. In this case, the next\n" -"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n" +"If *max_length* is nonnegative, returns at most *max_length* bytes\n" +"of decompressed data. If this limit is reached and further output\n" +"can be produced, *self.needs_input* will be set to ``False``. In\n" +"this case, the next call to *decompress()* may provide *data* as b\'\'\n" +"to obtain more of the output.\n" "\n" -"If all of the input data was decompressed and returned (either because this\n" -"was less than *max_length* bytes, or because *max_length* was negative),\n" -"*self.needs_input* will be set to True.\n" +"If all of the input data was decompressed and returned (either\n" +"because this was less than *max_length* bytes, or because\n" +"*max_length* was negative), *self.needs_input* will be set to True.\n" "\n" -"Attempting to decompress data after the end of stream is reached raises an\n" -"EOFError. Any data found after the end of the stream is ignored and saved in\n" -"the unused_data attribute."); +"Attempting to decompress data after the end of stream is reached\n" +"raises an EOFError. Any data found after the end of the stream is\n" +"ignored and saved in the unused_data attribute."); #define ZLIB__ZLIBDECOMPRESSOR_DECOMPRESS_METHODDEF \ {"decompress", _PyCFunction_CAST(zlib__ZlibDecompressor_decompress), METH_FASTCALL|METH_KEYWORDS, zlib__ZlibDecompressor_decompress__doc__}, @@ -1402,4 +1403,4 @@ zlib_crc32_combine(PyObject *module, PyObject *const *args, Py_ssize_t nargs) #ifndef ZLIB_DECOMPRESS___DEEPCOPY___METHODDEF #define ZLIB_DECOMPRESS___DEEPCOPY___METHODDEF #endif /* !defined(ZLIB_DECOMPRESS___DEEPCOPY___METHODDEF) */ -/*[clinic end generated code: output=13627e14206d3552 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c9a60fe6600a2e4d input=a9049054013a1b77]*/ diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 1e9f9ae051a..7c736f4610b 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -948,12 +948,13 @@ cmath.log log(z[, base]) -> the logarithm of z to the given base. -If the base is not specified, returns the natural logarithm (base e) of z. +If the base is not specified, returns the natural logarithm (base e) +of z. [clinic start generated code]*/ static PyObject * cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj) -/*[clinic end generated code: output=4effdb7d258e0d94 input=e1f81d4fcfd26497]*/ +/*[clinic end generated code: output=4effdb7d258e0d94 input=eb25de0757baf4a0]*/ { Py_complex y; @@ -1162,7 +1163,6 @@ cmath_isinf_impl(PyObject *module, Py_complex z) } /*[clinic input] -@permit_long_docstring_body cmath.isclose -> bool a: Py_complex @@ -1179,17 +1179,18 @@ Determine whether two complex numbers are close in value. Return True if a is close in value to b, and False otherwise. -For the values to be considered close, the difference between them must be -smaller than at least one of the tolerances. +For the values to be considered close, the difference between them must +be smaller than at least one of the tolerances. --inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is -not close to anything, even itself. inf and -inf are only close to themselves. +-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, +NaN is not close to anything, even itself. inf and -inf are only close +to themselves. [clinic start generated code]*/ static int cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b, double rel_tol, double abs_tol) -/*[clinic end generated code: output=8a2486cc6e0014d1 input=0d45feea7c626f47]*/ +/*[clinic end generated code: output=8a2486cc6e0014d1 input=301b56c90d9a79de]*/ { double diff; diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 1b4f0c2302d..7c727d8c2d4 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -795,9 +795,9 @@ faulthandler.dump_traceback_later Dump the traceback of all threads in timeout seconds. -If repeat is true, the tracebacks of all threads are dumped every timeout -seconds. If exit is true, call _exit(1) which is not safe. max_threads -caps the number of threads dumped. +If repeat is true, the tracebacks of all threads are dumped every +timeout seconds. If exit is true, call _exit(1) which is not safe. +max_threads caps the number of threads dumped. [clinic start generated code]*/ static PyObject * @@ -805,7 +805,7 @@ faulthandler_dump_traceback_later_impl(PyObject *module, PyObject *timeout_obj, int repeat, PyObject *file, int exit, Py_ssize_t max_threads) -/*[clinic end generated code: output=543a0f3807113394 input=6836555ee157ddb4]*/ +/*[clinic end generated code: output=543a0f3807113394 input=32aaf7437d0928db]*/ { PyTime_t timeout, timeout_us; int fd; @@ -1349,21 +1349,6 @@ faulthandler__stack_overflow_impl(PyObject *module) #endif /* defined(FAULTHANDLER_USE_ALT_STACK) && defined(HAVE_SIGACTION) */ -static int -faulthandler_traverse(PyObject *module, visitproc visit, void *arg) -{ - Py_VISIT(thread.file); -#ifdef FAULTHANDLER_USER - if (user_signals != NULL) { - for (size_t signum=0; signum < Py_NSIG; signum++) - Py_VISIT(user_signals[signum].file); - } -#endif - Py_VISIT(fatal_error.file); - return 0; -} - - #ifdef MS_WINDOWS /*[clinic input] faulthandler._raise_exception @@ -1459,7 +1444,6 @@ static struct PyModuleDef module_def = { .m_name = "faulthandler", .m_doc = module_doc, .m_methods = module_methods, - .m_traverse = faulthandler_traverse, .m_slots = faulthandler_slots }; diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 18bddf46a74..12f93ac0fde 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -326,13 +326,13 @@ gc.get_objects Return a list of objects tracked by the collector (excluding the list returned). -If generation is not None, return only the objects tracked by the collector -that are in that generation. +If generation is not None, return only the objects tracked by the +collector that are in that generation. [clinic start generated code]*/ static PyObject * gc_get_objects_impl(PyObject *module, Py_ssize_t generation) -/*[clinic end generated code: output=48b35fea4ba6cb0e input=a887f1d9924be7cf]*/ +/*[clinic end generated code: output=48b35fea4ba6cb0e input=89bca0d4a64e0135]*/ { if (PySys_Audit("gc.get_objects", "n", generation) < 0) { return NULL; @@ -440,19 +440,20 @@ gc_is_finalized_impl(PyObject *module, PyObject *obj) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary gc.freeze Freeze all current tracked objects and ignore them for future collections. -This can be used before a POSIX fork() call to make the gc copy-on-write friendly. -Note: collection before a POSIX fork() call may free pages for future allocation -which can cause copy-on-write. +This can be used before a POSIX fork() call to make the gc copy-on-write +friendly. +Note: collection before a POSIX fork() call may free pages for future +allocation which can cause copy-on-write. [clinic start generated code]*/ static PyObject * gc_freeze_impl(PyObject *module) -/*[clinic end generated code: output=502159d9cdc4c139 input=11fb59b0a75dcf3d]*/ +/*[clinic end generated code: output=502159d9cdc4c139 input=02674706fc9c0de6]*/ { PyInterpreterState *interp = _PyInterpreterState_GET(); _PyGC_Freeze(interp); diff --git a/Modules/hmacmodule.c b/Modules/hmacmodule.c index b39a8f99ed9..0f9eca2f73b 100644 --- a/Modules/hmacmodule.c +++ b/Modules/hmacmodule.c @@ -942,20 +942,19 @@ _hmac_HMAC_digest_impl(HMACObject *self) /*[clinic input] @permit_long_summary -@permit_long_docstring_body _hmac.HMAC.hexdigest Return hexadecimal digest of the bytes passed to the update() method so far. -This may be used to exchange the value safely in email or other non-binary -environments. +This may be used to exchange the value safely in email or other +non-binary environments. This method may raise a MemoryError. [clinic start generated code]*/ static PyObject * _hmac_HMAC_hexdigest_impl(HMACObject *self) -/*[clinic end generated code: output=6659807a09ae14ec input=6e0e796e38d82fc8]*/ +/*[clinic end generated code: output=6659807a09ae14ec input=9097dce732ed808f]*/ { assert(self->digest_size <= Py_hmac_hash_max_digest_size); uint8_t digest[Py_hmac_hash_max_digest_size]; diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index a6bfa78a461..0dd31dfbc5a 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -107,6 +107,7 @@ typedef struct { #define batchedobject_CAST(op) ((batchedobject *)(op)) /*[clinic input] +@permit_long_summary @classmethod itertools.batched.__new__ as batched_new iterable: object @@ -136,7 +137,7 @@ than n. static PyObject * batched_new_impl(PyTypeObject *type, PyObject *iterable, Py_ssize_t n, int strict) -/*[clinic end generated code: output=c6de11b061529d3e input=7814b47e222f5467]*/ +/*[clinic end generated code: output=c6de11b061529d3e input=b31d8be8e8577a34]*/ { PyObject *it; batchedobject *bo; @@ -437,6 +438,7 @@ typedef struct { static PyObject *_grouper_create(groupbyobject *, PyObject *); /*[clinic input] +@permit_long_summary @classmethod itertools.groupby.__new__ @@ -452,7 +454,7 @@ make an iterator that returns consecutive keys and groups from the iterable static PyObject * itertools_groupby_impl(PyTypeObject *type, PyObject *it, PyObject *keyfunc) -/*[clinic end generated code: output=cbb1ae3a90fd4141 input=6b3d123e87ff65a1]*/ +/*[clinic end generated code: output=cbb1ae3a90fd4141 input=9f89fe625b20ef1a]*/ { groupbyobject *gbo; @@ -1950,10 +1952,14 @@ Return a chain object whose .__next__() method returns elements from the\n\ first iterable until it is exhausted, then elements from the next\n\ iterable, until all of the iterables are exhausted."); +PyDoc_STRVAR(chain_class_getitem_doc, +"chain is generic over the type of its contents.\n\ +This is the union of the types of the input iterable contents."); + static PyMethodDef chain_methods[] = { ITERTOOLS_CHAIN_FROM_ITERABLE_METHODDEF {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, chain_class_getitem_doc}, {NULL, NULL} /* sentinel */ }; @@ -3163,13 +3169,13 @@ itertools.compress.__new__ selectors as seq2: object Return data elements corresponding to true selector elements. -Forms a shorter iterator from selected data elements using the selectors to -choose the data elements. +Forms a shorter iterator from selected data elements using the selectors +to choose the data elements. [clinic start generated code]*/ static PyObject * itertools_compress_impl(PyTypeObject *type, PyObject *seq1, PyObject *seq2) -/*[clinic end generated code: output=7e67157212ed09e0 input=79596d7cd20c77e5]*/ +/*[clinic end generated code: output=7e67157212ed09e0 input=32ca4347dbc46749]*/ { PyObject *data=NULL, *selectors=NULL; compressobject *lz; @@ -3427,6 +3433,7 @@ slow_mode: when cnt == PY_SSIZE_T_MAX, step is not int(1), or cnt is a float. */ /*[clinic input] +@permit_long_summary @classmethod itertools.count.__new__ start as long_cnt: object(c_default="NULL") = 0 @@ -3444,7 +3451,7 @@ Equivalent to: static PyObject * itertools_count_impl(PyTypeObject *type, PyObject *long_cnt, PyObject *long_step) -/*[clinic end generated code: output=09a9250aebd00b1c input=d7a85eec18bfcd94]*/ +/*[clinic end generated code: output=09a9250aebd00b1c input=91e4b12c0e88b9f4]*/ { countobject *lz; int fast_mode; diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 6b7fc004d0d..5636a00afe1 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -1438,13 +1438,14 @@ math.frexp Return the mantissa and exponent of x, as pair (m, e). -m is a float and e is an int, such that x = m * 2.**e. -If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0. +If x is a finite nonzero number, then m is a float with +0.5 <= abs(m) < 1.0 and an integer e is such that +x == m * 2**e exactly. Else, return (x, 0). [clinic start generated code]*/ static PyObject * math_frexp_impl(PyObject *module, double x) -/*[clinic end generated code: output=03e30d252a15ad4a input=96251c9e208bc6e9]*/ +/*[clinic end generated code: output=03e30d252a15ad4a input=215cf8ea28a0959b]*/ { int i; /* deal with special cases directly, to sidestep platform @@ -2541,6 +2542,7 @@ math_isnan_impl(PyObject *module, double x) /*[clinic input] +@permit_long_summary math.isinf x: double @@ -2551,7 +2553,7 @@ Return True if x is a positive or negative infinity, and False otherwise. static PyObject * math_isinf_impl(PyObject *module, double x) -/*[clinic end generated code: output=9f00cbec4de7b06b input=32630e4212cf961f]*/ +/*[clinic end generated code: output=9f00cbec4de7b06b input=8584152a71a3aea9]*/ { return PyBool_FromLong((long)isinf(x)); } @@ -2831,7 +2833,7 @@ math_prod_impl(PyObject *module, PyObject *iterable, PyObject *start) /*[clinic input] -@permit_long_docstring_body +@permit_long_summary math.nextafter x: double @@ -2844,13 +2846,13 @@ Return the floating-point value the given number of steps after x towards y. If steps is not specified or is None, it defaults to 1. -Raises a TypeError, if x or y is not a double, or if steps is not an integer. -Raises ValueError if steps is negative. +Raises a TypeError, if x or y is not a double, or if steps is not +an integer. Raises ValueError if steps is negative. [clinic start generated code]*/ static PyObject * math_nextafter_impl(PyObject *module, double x, double y, PyObject *steps) -/*[clinic end generated code: output=cc6511f02afc099e input=cc8f0dad1b27a8a4]*/ +/*[clinic end generated code: output=cc6511f02afc099e input=3a9151e6b1e9f346]*/ { #if defined(_AIX) if (x == y) { diff --git a/Modules/overlapped.c b/Modules/overlapped.c index 51aee5afd35..255576cc057 100644 --- a/Modules/overlapped.c +++ b/Modules/overlapped.c @@ -885,13 +885,14 @@ _overlapped.Overlapped.getresult Retrieve result of operation. -If wait is true then it blocks until the operation is finished. If wait -is false and the operation is still pending then an error is raised. +If wait is true then it blocks until the operation is finished. If +wait is false and the operation is still pending then an error is +raised. [clinic start generated code]*/ static PyObject * _overlapped_Overlapped_getresult_impl(OverlappedObject *self, BOOL wait) -/*[clinic end generated code: output=8c9bd04d08994f6c input=aa5b03e9897ca074]*/ +/*[clinic end generated code: output=8c9bd04d08994f6c input=852fbd817cbd2b3d]*/ { DWORD transferred = 0; BOOL ret; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 5bd53c2146a..a06479fa60c 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2365,7 +2365,7 @@ PyDoc_STRVAR(stat_result__doc__, "stat_result: Result from stat, fstat, or lstat.\n\n\ This object may be accessed either as a tuple of\n\ (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime)\n\ -or via the attributes st_mode, st_ino, st_dev, st_nlink, st_uid, and so on.\n\ +or via the attributes st_mode, st_ino, st_dev, st_nlink, and so on.\n\ \n\ Posix/windows: If your platform supports st_blksize, st_blocks, st_rdev,\n\ or st_flags, they are available as attributes only.\n\ @@ -3925,14 +3925,14 @@ os.chdir Change the current working directory to the specified path. -path may always be specified as a string. -On some platforms, path may also be specified as an open file descriptor. -If this functionality is unavailable, using it raises an exception. +path may always be specified as a string. On some platforms, path may +also be specified as an open file descriptor. If this functionality is +unavailable, using it raises an exception. [clinic start generated code]*/ static PyObject * os_chdir_impl(PyObject *module, path_t *path) -/*[clinic end generated code: output=3be6400eee26eaae input=a74ceab5d72adf74]*/ +/*[clinic end generated code: output=3be6400eee26eaae input=64673c342e4369f1]*/ { int result; @@ -4045,15 +4045,16 @@ win32_fchmod(int fd, int mode) os.chmod path: path_t(allow_fd='PATH_HAVE_FCHMOD') - Path to be modified. May always be specified as a str, bytes, or a path-like object. - On some platforms, path may also be specified as an open file descriptor. - If this functionality is unavailable, using it raises an exception. + Path to be modified. May always be specified as a str, bytes, or + a path-like object. On some platforms, path may also be specified + as an open file descriptor. If this functionality is unavailable, + using it raises an exception. mode: int Operating-system mode bitfield. - Be careful when using number literals for *mode*. The conventional UNIX notation for - numeric modes uses an octal base, which needs to be indicated with a ``0o`` prefix in - Python. + Be careful when using number literals for *mode*. The conventional + UNIX notation for numeric modes uses an octal base, which needs to + be indicated with a ``0o`` prefix in Python. * @@ -4080,7 +4081,7 @@ dir_fd and follow_symlinks may not be implemented on your platform. static PyObject * os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=5cf6a94915cc7bff input=fcf115d174b9f3d8]*/ +/*[clinic end generated code: output=5cf6a94915cc7bff input=7b6e2eeadd8bf199]*/ { int result; @@ -4216,9 +4217,9 @@ os.fchmod The file descriptor of the file to be modified. mode: int Operating-system mode bitfield. - Be careful when using number literals for *mode*. The conventional UNIX notation for - numeric modes uses an octal base, which needs to be indicated with a ``0o`` prefix in - Python. + Be careful when using number literals for *mode*. The conventional + UNIX notation for numeric modes uses an octal base, which needs to + be indicated with a ``0o`` prefix in Python. Change the access permissions of the file given by file descriptor fd. @@ -4227,7 +4228,7 @@ Equivalent to os.chmod(fd, mode). static PyObject * os_fchmod_impl(PyObject *module, int fd, int mode) -/*[clinic end generated code: output=afd9bc05b4e426b3 input=b5594618bbbc22df]*/ +/*[clinic end generated code: output=afd9bc05b4e426b3 input=d24331f9fdc17f49]*/ { int res; @@ -4261,6 +4262,7 @@ os_fchmod_impl(PyObject *module, int fd, int mode) #if defined(HAVE_LCHMOD) || defined(MS_WINDOWS) /*[clinic input] +@permit_long_summary os.lchmod path: path_t @@ -4268,13 +4270,13 @@ os.lchmod Change the access permissions of a file, without following symbolic links. -If path is a symlink, this affects the link itself rather than the target. -Equivalent to chmod(path, mode, follow_symlinks=False)." +If path is a symlink, this affects the link itself rather than the +target. Equivalent to chmod(path, mode, follow_symlinks=False). [clinic start generated code]*/ static PyObject * os_lchmod_impl(PyObject *module, path_t *path, int mode) -/*[clinic end generated code: output=082344022b51a1d5 input=90c5663c7465d24f]*/ +/*[clinic end generated code: output=082344022b51a1d5 input=13110fb62911b015]*/ { int res; if (PySys_Audit("os.chmod", "Oii", path->object, mode, -1) < 0) { @@ -4312,9 +4314,9 @@ os.chflags Set file flags. -If follow_symlinks is False, and the last element of the path is a symbolic - link, chflags will change flags on the symbolic link itself instead of the - file the link points to. +If follow_symlinks is False, and the last element of the path is +a symbolic link, chflags() will change flags on the symbolic link itself +instead of the file the link points to. follow_symlinks may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. @@ -4323,7 +4325,7 @@ unavailable, using it will raise a NotImplementedError. static PyObject * os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, int follow_symlinks) -/*[clinic end generated code: output=85571c6737661ce9 input=0327e29feb876236]*/ +/*[clinic end generated code: output=85571c6737661ce9 input=31391927707be1de]*/ { int result; @@ -4473,7 +4475,8 @@ os_fdatasync_impl(PyObject *module, int fd) os.chown path : path_t(allow_fd='PATH_HAVE_FCHOWN') - Path to be examined; can be string, bytes, a path-like object, or open-file-descriptor int. + Path to be examined; can be string, bytes, a path-like object, or + open-file-descriptor int. uid: uid_t @@ -4481,7 +4484,7 @@ os.chown * - dir_fd : dir_fd(requires='fchownat') = None + dir_fd: dir_fd(requires='fchownat') = None If not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. @@ -4491,27 +4494,28 @@ os.chown stat will examine the symbolic link itself instead of the file the link points to. -Change the owner and group id of path to the numeric uid and gid.\ +Change the owner and group id of path to the numeric uid and gid. -path may always be specified as a string. -On some platforms, path may also be specified as an open file descriptor. - If this functionality is unavailable, using it raises an exception. -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. -If follow_symlinks is False, and the last element of the path is a symbolic - link, chown will modify the symbolic link itself instead of the file the - link points to. +path may always be specified as a string. On some platforms, path may +also be specified as an open file descriptor. If this functionality is +unavailable, using it raises an exception. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative to +that directory. +If follow_symlinks is False, and the last element of the path is +a symbolic link, chown will modify the symbolic link itself instead of +the file the link points to. It is an error to use dir_fd or follow_symlinks when specifying path as - an open file descriptor. -dir_fd and follow_symlinks may not be implemented on your platform. - If they are unavailable, using them will raise a NotImplementedError. +an open file descriptor. +dir_fd and follow_symlinks may not be implemented on your platform. If +they are unavailable, using them will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=4beadab0db5f70cd input=b08c5ec67996a97d]*/ +/*[clinic end generated code: output=4beadab0db5f70cd input=509c91b7a0e72f52]*/ { int result; @@ -4795,7 +4799,6 @@ os_getcwdb_impl(PyObject *module) #ifdef HAVE_LINK /*[clinic input] -@permit_long_docstring_body os.link src : path_t @@ -4808,20 +4811,21 @@ os.link Create a hard link to a file. If either src_dir_fd or dst_dir_fd is not None, it should be a file - descriptor open to a directory, and the respective path string (src or dst) - should be relative; the path will then be relative to that directory. +descriptor open to a directory, and the respective path string (src or +dst) should be relative; the path will then be relative to that +directory. If follow_symlinks is False, and the last element of src is a symbolic - link, link will create a link to the symbolic link itself instead of the - file the link points to. -src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your - platform. If they are unavailable, using them will raise a - NotImplementedError. +link, link will create a link to the symbolic link itself instead of the +file the link points to. +src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on +your platform. If they are unavailable, using them will raise +a NotImplementedError. [clinic start generated code]*/ static PyObject * os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks) -/*[clinic end generated code: output=7f00f6007fd5269a input=e2a50a6497050e44]*/ +/*[clinic end generated code: output=7f00f6007fd5269a input=a28e6866fbd20a01]*/ { #ifdef MS_WINDOWS BOOL result = FALSE; @@ -5115,30 +5119,28 @@ _posix_listdir(path_t *path, PyObject *list) /*[clinic input] -@permit_long_docstring_body os.listdir path : path_t(nullable=True, allow_fd='PATH_HAVE_FDOPENDIR') = None Return a list containing the names of the files in the directory. -path can be specified as either str, bytes, or a path-like object. If path is bytes, - the filenames returned will also be bytes; in all other circumstances - the filenames returned will be str. +path can be specified as either str, bytes, or a path-like object. If +path is bytes, the filenames returned will also be bytes; in all other +circumstances the filenames returned will be str. If path is None, uses the path='.'. -On some platforms, path may also be specified as an open file descriptor;\ - the file descriptor must refer to a directory. - If this functionality is unavailable, using it raises NotImplementedError. +On some platforms, path may also be specified as an open file +descriptor; the file descriptor must refer to a directory. If this +functionality is unavailable, using it raises NotImplementedError. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory. - [clinic start generated code]*/ static PyObject * os_listdir_impl(PyObject *module, path_t *path) -/*[clinic end generated code: output=293045673fcd1a75 input=0bd1728387391b9a]*/ +/*[clinic end generated code: output=293045673fcd1a75 input=4eefe7c6a42ec9b2]*/ { if (PySys_Audit("os.listdir", "O", path->object ? path->object : Py_None) < 0) { @@ -5597,6 +5599,7 @@ os__getfinalpathname_impl(PyObject *module, path_t *path) } /*[clinic input] +@permit_long_summary os._findfirstfile path: path_t / @@ -5605,7 +5608,7 @@ A function to get the real file name without accessing the file in Windows. static PyObject * os__findfirstfile_impl(PyObject *module, path_t *path) -/*[clinic end generated code: output=106dd3f0779c83dd input=0734dff70f60e1a8]*/ +/*[clinic end generated code: output=106dd3f0779c83dd input=48c319aaa48d05d4]*/ { PyObject *result; HANDLE hFindFile; @@ -6159,22 +6162,21 @@ os.mkdir dir_fd : dir_fd(requires='mkdirat') = None -# "mkdir(path, mode=0o777, *, dir_fd=None)\n\n\ - Create a directory. -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. -dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative to +that directory. +dir_fd may not be implemented on your platform. If it is unavailable, +using it will raise a NotImplementedError. -The mode argument is ignored on Windows. Where it is used, the current umask -value is first masked out. +The mode argument is ignored on Windows. Where it is used, the current +umask value is first masked out. [clinic start generated code]*/ static PyObject * os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=a70446903abe821f input=a61722e1576fab03]*/ +/*[clinic end generated code: output=a70446903abe821f input=30270d369599634b]*/ { int result; #ifdef MS_WINDOWS @@ -6428,7 +6430,6 @@ internal_rename(path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int is /*[clinic input] -@permit_long_docstring_body os.rename src : path_t @@ -6440,38 +6441,39 @@ os.rename Rename a file or directory. If either src_dir_fd or dst_dir_fd is not None, it should be a file - descriptor open to a directory, and the respective path string (src or dst) - should be relative; the path will then be relative to that directory. +descriptor open to a directory, and the respective path string (src or +dst) should be relative; the path will then be relative to that +directory. src_dir_fd and dst_dir_fd, may not be implemented on your platform. - If they are unavailable, using them will raise a NotImplementedError. +If they are unavailable, using them will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=59e803072cf41230 input=11aae8c091162766]*/ +/*[clinic end generated code: output=59e803072cf41230 input=7d320d687c715fd6]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 0); } /*[clinic input] -@permit_long_docstring_body os.replace = os.rename Rename a file or directory, overwriting the destination. If either src_dir_fd or dst_dir_fd is not None, it should be a file - descriptor open to a directory, and the respective path string (src or dst) - should be relative; the path will then be relative to that directory. +descriptor open to a directory, and the respective path string (src or +dst) should be relative; the path will then be relative to that +directory. src_dir_fd and dst_dir_fd, may not be implemented on your platform. - If they are unavailable, using them will raise a NotImplementedError. +If they are unavailable, using them will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=1968c02e7857422b input=78d6c8087e90994c]*/ +/*[clinic end generated code: output=1968c02e7857422b input=44ed6b762d5953fc]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 1); } @@ -6486,15 +6488,16 @@ os.rmdir Remove a directory. -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative +to that directory. dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. +If it is unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_rmdir_impl(PyObject *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=080eb54f506e8301 input=38c8b375ca34a7e2]*/ +/*[clinic end generated code: output=080eb54f506e8301 input=84325211e33a98e0]*/ { int result; #ifdef HAVE_UNLINKAT @@ -6665,16 +6668,17 @@ os.unlink Remove a file (same as remove()). -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative to +that directory. dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. +If it is unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_unlink_impl(PyObject *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=621797807b9963b1 input=d7bcde2b1b2a2552]*/ +/*[clinic end generated code: output=621797807b9963b1 input=1a2ef2579207eab1]*/ { int result; #ifdef HAVE_UNLINKAT @@ -6726,15 +6730,16 @@ os.remove = os.unlink Remove a file (same as unlink()). -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative +to that directory. dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. +If it is unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_remove_impl(PyObject *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=a8535b28f0068883 input=e05c5ab55cd30983]*/ +/*[clinic end generated code: output=a8535b28f0068883 input=9f6e66912126bd56]*/ { return os_unlink_impl(module, path, dir_fd); } @@ -7056,38 +7061,37 @@ os.utime dir_fd: dir_fd(requires='futimensat') = None follow_symlinks: bool=True -# "utime(path, times=None, *[, ns], dir_fd=None, follow_symlinks=True)\n\ - Set the access and modified time of path. -path may always be specified as a string. -On some platforms, path may also be specified as an open file descriptor. - If this functionality is unavailable, using it raises an exception. +path may always be specified as a string. On some platforms, path may +also be specified as an open file descriptor. If this functionality is +unavailable, using it raises an exception. If times is not None, it must be a tuple (atime, mtime); - atime and mtime should be expressed as float seconds since the epoch. +atime and mtime should be expressed as float seconds since the epoch. If ns is specified, it must be a tuple (atime_ns, mtime_ns); - atime_ns and mtime_ns should be expressed as integer nanoseconds - since the epoch. +atime_ns and mtime_ns should be expressed as integer nanoseconds +since the epoch. If times is None and ns is unspecified, utime uses the current time. Specifying tuples for both times and ns is an error. -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. -If follow_symlinks is False, and the last element of the path is a symbolic - link, utime will modify the symbolic link itself instead of the file the - link points to. -It is an error to use dir_fd or follow_symlinks when specifying path - as an open file descriptor. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative to +that directory. +If follow_symlinks is False, and the last element of the path is +a symbolic link, utime will modify the symbolic link itself instead of +the file the link points to. +It is an error to use dir_fd or follow_symlinks when specifying path as +an open file descriptor. dir_fd and follow_symlinks may not be available on your platform. - If they are unavailable, using them will raise a NotImplementedError. +If they are unavailable, using them will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=cfcac69d027b82cf input=2fbd62a2f228f8f4]*/ +/*[clinic end generated code: output=cfcac69d027b82cf input=5ab470b2bc250788]*/ { #ifdef MS_WINDOWS HANDLE hFile; @@ -7244,6 +7248,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, /*[clinic input] +@permit_long_summary os._exit status: int @@ -7253,7 +7258,7 @@ Exit to the system with specified status, without normal exit processing. static PyObject * os__exit_impl(PyObject *module, int status) -/*[clinic end generated code: output=116e52d9c2260d54 input=5e6d57556b0c4a62]*/ +/*[clinic end generated code: output=116e52d9c2260d54 input=c35d282acfebe8fd]*/ { _exit(status); return NULL; /* Make gcc -Wall happy */ @@ -8057,7 +8062,8 @@ os.posix_spawn resetids: bool = False If the value is `true` the POSIX_SPAWN_RESETIDS will be activated. setsid: bool = False - If the value is `true` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP will be activated. + If the value is `true` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP + will be activated. setsigmask: object(c_default='NULL') = () The sigmask to use with the POSIX_SPAWN_SETSIGMASK flag. setsigdef: object(c_default='NULL') = () @@ -8074,7 +8080,7 @@ os_posix_spawn_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *setpgroup, int resetids, int setsid, PyObject *setsigmask, PyObject *setsigdef, PyObject *scheduler) -/*[clinic end generated code: output=14a1098c566bc675 input=69e7c9ebbdcf94a5]*/ +/*[clinic end generated code: output=14a1098c566bc675 input=c7592dcbc96e8114]*/ { return py_posix_spawn(0, module, path, argv, env, file_actions, setpgroup, resetids, setsid, setsigmask, setsigdef, @@ -8103,7 +8109,8 @@ os.posix_spawnp resetids: bool = False If the value is `True` the POSIX_SPAWN_RESETIDS will be activated. setsid: bool = False - If the value is `True` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP will be activated. + If the value is `True` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP + will be activated. setsigmask: object(c_default='NULL') = () The sigmask to use with the POSIX_SPAWN_SETSIGMASK flag. setsigdef: object(c_default='NULL') = () @@ -8120,7 +8127,7 @@ os_posix_spawnp_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *setpgroup, int resetids, int setsid, PyObject *setsigmask, PyObject *setsigdef, PyObject *scheduler) -/*[clinic end generated code: output=7b9aaefe3031238d input=a5c057527c6881a5]*/ +/*[clinic end generated code: output=7b9aaefe3031238d input=43ccc1452cae2be3]*/ { return py_posix_spawn(1, module, path, argv, env, file_actions, setpgroup, resetids, setsid, setsigmask, setsigdef, @@ -9156,13 +9163,13 @@ os.posix_openpt -> int Open and return a file descriptor for a master pseudo-terminal device. Performs a posix_openpt() C function call. The oflag argument is used to -set file status flags and file access modes as specified in the manual page -of posix_openpt() of your system. +set file status flags and file access modes as specified in the manual +page of posix_openpt() of your system. [clinic start generated code]*/ static int os_posix_openpt_impl(PyObject *module, int oflag) -/*[clinic end generated code: output=ee0bc2624305fc79 input=0de33d0e29693caa]*/ +/*[clinic end generated code: output=ee0bc2624305fc79 input=3ce4eb297fa64307]*/ { int fd; @@ -9437,6 +9444,7 @@ os_openpty_impl(PyObject *module) #if defined(HAVE_LOGIN_TTY) || defined(HAVE_FALLBACK_LOGIN_TTY) /*[clinic input] +@permit_long_summary os.login_tty fd: fildes @@ -9451,7 +9459,7 @@ calling process; close fd. static PyObject * os_login_tty_impl(PyObject *module, int fd) -/*[clinic end generated code: output=495a79911b4cc1bc input=5f298565099903a2]*/ +/*[clinic end generated code: output=495a79911b4cc1bc input=b102a7c36e8baf00]*/ { #ifdef HAVE_LOGIN_TTY if (login_tty(fd) == -1) { @@ -9806,14 +9814,14 @@ os.initgroups Initialize the group access list. -Call the system initgroups() to initialize the group access list with all of -the groups of which the specified username is a member, plus the specified -group id. +Call the system initgroups() to initialize the group access list with +all of the groups of which the specified username is a member, plus the +specified group id. [clinic start generated code]*/ static PyObject * os_initgroups_impl(PyObject *module, PyObject *oname, int gid) -/*[clinic end generated code: output=7f074d30a425fd3a input=984e60c7fed88cb4]*/ +/*[clinic end generated code: output=7f074d30a425fd3a input=35f2d4fb7fcc0bdf]*/ #else /*[clinic input] os.initgroups @@ -9824,14 +9832,14 @@ os.initgroups Initialize the group access list. -Call the system initgroups() to initialize the group access list with all of -the groups of which the specified username is a member, plus the specified -group id. +Call the system initgroups() to initialize the group access list with +all of the groups of which the specified username is a member, plus the +specified group id. [clinic start generated code]*/ static PyObject * os_initgroups_impl(PyObject *module, PyObject *oname, gid_t gid) -/*[clinic end generated code: output=59341244521a9e3f input=17d8fbe2dea42ca4]*/ +/*[clinic end generated code: output=59341244521a9e3f input=7e4514dff4526a95]*/ #endif { const char *username = PyBytes_AS_STRING(oname); @@ -10028,12 +10036,13 @@ os.getppid Return the parent's process id. If the parent process has already exited, Windows machines will still -return its id; others systems will return the id of the 'init' process (1). +return its id; others systems will return the id of the 'init' proces +(1). [clinic start generated code]*/ static PyObject * os_getppid_impl(PyObject *module) -/*[clinic end generated code: output=43b2a946a8c603b4 input=e637cb87539c030e]*/ +/*[clinic end generated code: output=43b2a946a8c603b4 input=e17c1de18f41316b]*/ { #ifdef MS_WINDOWS return win32_getppid(); @@ -10587,13 +10596,13 @@ os.waitid Returns the result of waiting for a process or processes. -Returns either waitid_result or None if WNOHANG is specified and there are -no children in a waitable state. +Returns either waitid_result or None if WNOHANG is specified and there +are no children in a waitable state. [clinic start generated code]*/ static PyObject * os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options) -/*[clinic end generated code: output=5d2e1c0bde61f4d8 input=d8e7f76e052b7920]*/ +/*[clinic end generated code: output=5d2e1c0bde61f4d8 input=14956bc8d102b5db]*/ { PyObject *result; int res; @@ -10760,13 +10769,13 @@ os.pidfd_open Return a file descriptor referring to the process *pid*. -The descriptor can be used to perform process management without races and -signals. +The descriptor can be used to perform process management without races +and signals. [clinic start generated code]*/ static PyObject * os_pidfd_open_impl(PyObject *module, pid_t pid, unsigned int flags) -/*[clinic end generated code: output=5c7252698947dc41 input=c3fd99ce947ccfef]*/ +/*[clinic end generated code: output=5c7252698947dc41 input=03058b32c389f874]*/ { int fd = syscall(__NR_pidfd_open, pid, flags); if (fd < 0) { @@ -10777,6 +10786,35 @@ os_pidfd_open_impl(PyObject *module, pid_t pid, unsigned int flags) #endif +#if defined(__linux__) && defined(__NR_pidfd_getfd) && \ + !(defined(__ANDROID__) && __ANDROID_API__ < 31) +/*[clinic input] +os.pidfd_getfd + pidfd: int + A process file descriptor. + targetfd: int + The file descriptor to duplicate from the target process. + * + flags: unsigned_int = 0 + Reserved, must be 0. + +Duplicate a file descriptor from the process referred to by *pidfd*. +[clinic start generated code]*/ + +static PyObject * +os_pidfd_getfd_impl(PyObject *module, int pidfd, int targetfd, + unsigned int flags) +/*[clinic end generated code: output=e1a1415a13c7137f input=ef6417fb10deb1cc]*/ +{ + int fd = syscall(__NR_pidfd_getfd, pidfd, targetfd, flags); + if (fd < 0) { + return posix_error(); + } + return PyLong_FromLong(fd); +} +#endif + + #ifdef HAVE_SETNS /*[clinic input] os.setns @@ -10845,8 +10883,9 @@ os.readlink Return a string representing the path to which the symbolic link points. -If dir_fd is not None, it should be a file descriptor open to a directory, -and path should be relative; path will then be relative to that directory. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative to +that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. @@ -10854,7 +10893,7 @@ using it will raise a NotImplementedError. static PyObject * os_readlink_impl(PyObject *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=d21b732a2e814030 input=113c87e0db1ecaf2]*/ +/*[clinic end generated code: output=d21b732a2e814030 input=03d10130870dbca8]*/ { #if defined(HAVE_READLINK) char buffer[MAXPATHLEN+1]; @@ -11049,26 +11088,25 @@ os.symlink * dir_fd: dir_fd(requires='symlinkat')=None -# "symlink(src, dst, target_is_directory=False, *, dir_fd=None)\n\n\ - Create a symbolic link pointing to src named dst. target_is_directory is required on Windows if the target is to be - interpreted as a directory. (On Windows, symlink requires - Windows 6.0 or greater, and raises a NotImplementedError otherwise.) - target_is_directory is ignored on non-Windows platforms. +interpreted as a directory. (On Windows, symlink requires Windows 6.0 +or greater, and raises a NotImplementedError otherwise.) +target_is_directory is ignored on non-Windows platforms. -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. -dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative +to that directory. +dir_fd may not be implemented on your platform. If it is unavailable, +using it will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_symlink_impl(PyObject *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd) -/*[clinic end generated code: output=08ca9f3f3cf960f6 input=e820ec4472547bc3]*/ +/*[clinic end generated code: output=08ca9f3f3cf960f6 input=71b75467b31c45f7]*/ { #ifdef MS_WINDOWS DWORD result; @@ -11627,19 +11665,18 @@ os.open -> int * dir_fd: dir_fd(requires='openat') = None -# "open(path, flags, mode=0o777, *, dir_fd=None)\n\n\ - Open a file for low level IO. Returns a file descriptor (integer). -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. -dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative to +that directory. +dir_fd may not be implemented on your platform. If it is unavailable, +using it will raise a NotImplementedError. [clinic start generated code]*/ static int os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd) -/*[clinic end generated code: output=abc7227888c8bc73 input=ad8623b29acd2934]*/ +/*[clinic end generated code: output=abc7227888c8bc73 input=75f7b4eaf92f2225]*/ { int fd; int async_err = 0; @@ -11913,7 +11950,6 @@ os_lockf_impl(PyObject *module, int fd, int command, Py_off_t length) /*[clinic input] -@permit_long_docstring_body os.lseek -> Py_off_t fd: int @@ -11929,12 +11965,13 @@ os.lseek -> Py_off_t Set the position of a file descriptor. Return the new position. -The return value is the number of bytes relative to the beginning of the file. +The return value is the number of bytes relative to the beginning of +the file. [clinic start generated code]*/ static Py_off_t os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how) -/*[clinic end generated code: output=971e1efb6b30bd2f input=4a3de549f07e1c40]*/ +/*[clinic end generated code: output=971e1efb6b30bd2f input=32ea0788da7cb44b]*/ { Py_off_t result; @@ -11998,7 +12035,6 @@ os_read_impl(PyObject *module, int fd, Py_ssize_t length) } /*[clinic input] -@permit_long_docstring_body os.readinto -> Py_ssize_t fd: int buffer: Py_buffer(accept={rwbuffer}) @@ -12006,20 +12042,20 @@ os.readinto -> Py_ssize_t Read into a buffer object from a file descriptor. -The buffer should be mutable and bytes-like. On success, returns the number of -bytes read. Less bytes may be read than the size of the buffer. The underlying -system call will be retried when interrupted by a signal, unless the signal -handler raises an exception. Other errors will not be retried and an error will -be raised. +The buffer should be mutable and bytes-like. On success, returns the +number of bytes read. Less bytes may be read than the size of the +buffer. The underlying system call will be retried when interrupted by +a signal, unless the signal handler raises an exception. Other errors +will not be retried and an error will be raised. -Returns 0 if *fd* is at end of file or if the provided *buffer* has length 0 -(which can be used to check for errors without reading data). Never returns -negative. +Returns 0 if *fd* is at end of file or if the provided *buffer* has +length 0 (which can be used to check for errors without reading data). +Never returns negative. [clinic start generated code]*/ static Py_ssize_t os_readinto_impl(PyObject *module, int fd, Py_buffer *buffer) -/*[clinic end generated code: output=8091a3513c683a80 input=a770382bd3d32f9a]*/ +/*[clinic end generated code: output=8091a3513c683a80 input=2a5f8b212cb5730c]*/ { assert(buffer->len >= 0); Py_ssize_t result = _Py_read(fd, buffer->buf, buffer->len); @@ -12203,7 +12239,7 @@ os_pread_impl(PyObject *module, int fd, Py_ssize_t length, Py_off_t offset) #if defined(HAVE_PREADV) || defined (HAVE_PREADV2) /*[clinic input] -@permit_long_docstring_body +@permit_long_summary os.preadv -> Py_ssize_t fd: int @@ -12214,14 +12250,15 @@ os.preadv -> Py_ssize_t Reads from a file descriptor into a number of mutable bytes-like objects. -Combines the functionality of readv() and pread(). As readv(), it will -transfer data into each buffer until it is full and then move on to the next -buffer in the sequence to hold the rest of the data. Its fourth argument, -specifies the file offset at which the input operation is to be performed. It -will return the total number of bytes read (which can be less than the total -capacity of all the objects). +Combines the functionality of readv() and pread(). As readv(), it will +transfer data into each buffer until it is full and then move on to the +next buffer in the sequence to hold the rest of the data. Its fourth +argument, specifies the file offset at which the input operation is to +be performed. It will return the total number of bytes read (which can +be less than the total capacity of all the objects). -The flags argument contains a bitwise OR of zero or more of the following flags: +The flags argument contains a bitwise OR of zero or more of the +following flags: - RWF_HIPRI - RWF_NOWAIT @@ -12233,7 +12270,7 @@ Using non-zero flags requires Linux 4.6 or newer. static Py_ssize_t os_preadv_impl(PyObject *module, int fd, PyObject *buffers, Py_off_t offset, int flags) -/*[clinic end generated code: output=26fc9c6e58e7ada5 input=34fb3b9ca06f7ba7]*/ +/*[clinic end generated code: output=26fc9c6e58e7ada5 input=bbc70c63b4f4e877]*/ { Py_ssize_t cnt, n; int async_err = 0; @@ -12570,6 +12607,7 @@ os_sendfile_impl(PyObject *module, int out_fd, int in_fd, PyObject *offobj, #if defined(__APPLE__) /*[clinic input] +@permit_long_summary os._fcopyfile in_fd: int @@ -12582,7 +12620,7 @@ Efficiently copy content or metadata of 2 regular file descriptors (macOS). static PyObject * os__fcopyfile_impl(PyObject *module, int in_fd, int out_fd, int flags) -/*[clinic end generated code: output=c9d1a35a992e401b input=1e34638a86948795]*/ +/*[clinic end generated code: output=c9d1a35a992e401b input=80b53ad8863c9101]*/ { int ret; @@ -12771,6 +12809,7 @@ os_pipe2_impl(PyObject *module, int flags) #ifdef HAVE_WRITEV /*[clinic input] +@permit_long_summary os.writev -> Py_ssize_t fd: int buffers: object @@ -12784,7 +12823,7 @@ buffers must be a sequence of bytes-like objects. static Py_ssize_t os_writev_impl(PyObject *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=56565cfac3aac15b input=5b8d17fe4189d2fe]*/ +/*[clinic end generated code: output=56565cfac3aac15b input=5771a0f0c2b326f2]*/ { Py_ssize_t cnt; Py_ssize_t result; @@ -12860,7 +12899,6 @@ os_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset) #if defined(HAVE_PWRITEV) || defined (HAVE_PWRITEV2) /*[clinic input] @permit_long_summary -@permit_long_docstring_body os.pwritev -> Py_ssize_t fd: int @@ -12871,14 +12909,16 @@ os.pwritev -> Py_ssize_t Writes the contents of bytes-like objects to a file descriptor at a given offset. -Combines the functionality of writev() and pwrite(). All buffers must be a sequence -of bytes-like objects. Buffers are processed in array order. Entire contents of first -buffer is written before proceeding to second, and so on. The operating system may -set a limit (sysconf() value SC_IOV_MAX) on the number of buffers that can be used. -This function writes the contents of each object to the file descriptor and returns -the total number of bytes written. +Combines the functionality of writev() and pwrite(). All buffers must be +a sequence of bytes-like objects. Buffers are processed in array order. +Entire contents of first buffer is written before proceeding to second, +and so on. The operating system may set a limit (sysconf() value +SC_IOV_MAX) on the number of buffers that can be used. +This function writes the contents of each object to the file descriptor +and returns the total number of bytes written. -The flags argument contains a bitwise OR of zero or more of the following flags: +The flags argument contains a bitwise OR of zero or more of the +following flags: - RWF_DSYNC - RWF_SYNC @@ -12892,7 +12932,7 @@ Using non-zero flags requires Linux 4.7 or newer. static Py_ssize_t os_pwritev_impl(PyObject *module, int fd, PyObject *buffers, Py_off_t offset, int flags) -/*[clinic end generated code: output=e3dd3e9d11a6a5c7 input=7de72245873f56bf]*/ +/*[clinic end generated code: output=e3dd3e9d11a6a5c7 input=b2e352a22f030e9a]*/ { Py_ssize_t cnt; Py_ssize_t result; @@ -13105,15 +13145,16 @@ os.mkfifo Create a "fifo" (a POSIX named pipe). -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. -dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative to +that directory. +dir_fd may not be implemented on your platform. If it is unavailable, +using it will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=ce41cfad0e68c940 input=73032e98a36e0e19]*/ +/*[clinic end generated code: output=ce41cfad0e68c940 input=d2fb917c01e888d6]*/ { int result; int async_err = 0; @@ -13156,7 +13197,6 @@ os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd) #if defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV) /*[clinic input] -@permit_long_docstring_body os.mknod path: path_t @@ -13167,23 +13207,24 @@ os.mknod Create a node in the file system. -Create a node in the file system (file, device special file or named pipe) -at path. mode specifies both the permissions to use and the +Create a node in the file system (file, device special file or named +pipe) at path. mode specifies both the permissions to use and the type of node to be created, being combined (bitwise OR) with one of -S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. If S_IFCHR or S_IFBLK is set on mode, -device defines the newly created device special file (probably using -os.makedev()). Otherwise device is ignored. +S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. If S_IFCHR or S_IFBLK is set +on mode, device defines the newly created device special file (probably +using os.makedev()). Otherwise device is ignored. -If dir_fd is not None, it should be a file descriptor open to a directory, - and path should be relative; path will then be relative to that directory. -dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. +If dir_fd is not None, it should be a file descriptor open to +a directory, and path should be relative; path will then be relative +to that directory. +dir_fd may not be implemented on your platform. If it is unavailable, +using it will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, int dir_fd) -/*[clinic end generated code: output=92e55d3ca8917461 input=7121c4723d22545b]*/ +/*[clinic end generated code: output=92e55d3ca8917461 input=7d0099e85c6b4cba]*/ { int result; int async_err = 0; @@ -13352,13 +13393,14 @@ os.truncate Truncate a file, specified by path, to a specific length. -On some platforms, path may also be specified as an open file descriptor. - If this functionality is unavailable, using it raises an exception. +On some platforms, path may also be specified as an open file +descriptor. If this functionality is unavailable, using it raises +an exception. [clinic start generated code]*/ static PyObject * os_truncate_impl(PyObject *module, path_t *path, Py_off_t length) -/*[clinic end generated code: output=43009c8df5c0a12b input=77229cf0b50a9b77]*/ +/*[clinic end generated code: output=43009c8df5c0a12b input=ce33fd7808a511c4]*/ { int result; #ifdef MS_WINDOWS @@ -13401,6 +13443,7 @@ os_truncate_impl(PyObject *module, path_t *path, Py_off_t length) OSs, support was dropped in WASI preview2. */ #if defined(HAVE_POSIX_FALLOCATE) && !defined(__wasi__) /*[clinic input] +@permit_long_summary os.posix_fallocate fd: int @@ -13411,13 +13454,14 @@ os.posix_fallocate Ensure a file has allocated at least a particular number of bytes on disk. Ensure that the file specified by fd encompasses a range of bytes -starting at offset bytes from the beginning and continuing for length bytes. +starting at offset bytes from the beginning and continuing for length +bytes. [clinic start generated code]*/ static PyObject * os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length) -/*[clinic end generated code: output=73f107139564aa9d input=d7a2ef0ab2ca52fb]*/ +/*[clinic end generated code: output=73f107139564aa9d input=c718971d18b96896]*/ { int result; int async_err = 0; @@ -13452,8 +13496,8 @@ os.posix_fadvise Announce an intention to access data in a specific pattern. -Announce an intention to access data in a specific pattern, thus allowing -the kernel to make optimizations. +Announce an intention to access data in a specific pattern, thus +allowing the kernel to make optimizations. The advice applies to the region of the file specified by fd starting at offset and continuing for length bytes. advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL, @@ -13464,7 +13508,7 @@ POSIX_FADV_DONTNEED. static PyObject * os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length, int advice) -/*[clinic end generated code: output=412ef4aa70c98642 input=0fbe554edc2f04b5]*/ +/*[clinic end generated code: output=412ef4aa70c98642 input=961b01a4518ef727]*/ { int result; int async_err = 0; @@ -13663,6 +13707,10 @@ static PyObject * os__clearenv_impl(PyObject *module) /*[clinic end generated code: output=2d6705d62c014b51 input=47d2fa7f323c43ca]*/ { + if (PySys_Audit("os._clearenv", NULL) < 0) { + return NULL; + } + errno = 0; int err = clearenv(); if (err) { @@ -13720,6 +13768,7 @@ os_WCOREDUMP_impl(PyObject *module, int status) #ifdef WIFCONTINUED /*[clinic input] +@permit_long_summary os.WIFCONTINUED -> bool status: int @@ -13732,7 +13781,7 @@ job control stop. static int os_WIFCONTINUED_impl(PyObject *module, int status) -/*[clinic end generated code: output=1e35295d844364bd input=e777e7d38eb25bd9]*/ +/*[clinic end generated code: output=1e35295d844364bd input=7b577845a0f8b12f]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -13845,6 +13894,7 @@ os_WTERMSIG_impl(PyObject *module, int status) #ifdef WSTOPSIG /*[clinic input] +@permit_long_summary os.WSTOPSIG -> int status: int @@ -13854,7 +13904,7 @@ Return the signal that stopped the process that provided the status value. static int os_WSTOPSIG_impl(PyObject *module, int status) -/*[clinic end generated code: output=0ab7586396f5d82b input=46ebf1d1b293c5c1]*/ +/*[clinic end generated code: output=0ab7586396f5d82b input=4698db1a6a320433]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -14045,13 +14095,14 @@ os.statvfs Perform a statvfs system call on the given path. path may always be specified as a string. -On some platforms, path may also be specified as an open file descriptor. - If this functionality is unavailable, using it raises an exception. +On some platforms, path may also be specified as an open file +descriptor. If this functionality is unavailable, using it raises +an exception. [clinic start generated code]*/ static PyObject * os_statvfs_impl(PyObject *module, path_t *path) -/*[clinic end generated code: output=87106dd1beb8556e input=3f5c35791c669bd9]*/ +/*[clinic end generated code: output=87106dd1beb8556e input=1cfd9a4fd36f7425]*/ { int result; @@ -14100,6 +14151,7 @@ os_statvfs_impl(PyObject *module, path_t *path) #ifdef MS_WINDOWS /*[clinic input] +@permit_long_summary os._getdiskusage path: path_t @@ -14109,7 +14161,7 @@ Return disk usage statistics about the given path as a (total, free) tuple. static PyObject * os__getdiskusage_impl(PyObject *module, path_t *path) -/*[clinic end generated code: output=3bd3991f5e5c5dfb input=6af8d1b7781cc042]*/ +/*[clinic end generated code: output=3bd3991f5e5c5dfb input=aee7e38bc3e7fb08]*/ { BOOL retval; ULARGE_INTEGER _, total, free; @@ -14330,13 +14382,14 @@ os.pathconf -> long Return the configuration limit name for the file or directory path. If there is no limit, return -1. -On some platforms, path may also be specified as an open file descriptor. - If this functionality is unavailable, using it raises an exception. +On some platforms, path may also be specified as an open file +descriptor. If this functionality is unavailable, using it raises +an exception. [clinic start generated code]*/ static long os_pathconf_impl(PyObject *module, path_t *path, int name) -/*[clinic end generated code: output=5bedee35b293a089 input=6f6072f57b10c787]*/ +/*[clinic end generated code: output=5bedee35b293a089 input=e86f6eacfa006426]*/ { long limit; @@ -15141,13 +15194,13 @@ os.abort Abort the interpreter immediately. -This function 'dumps core' or otherwise fails in the hardest way possible -on the hosting operating system. This function never returns. +This function 'dumps core' or otherwise fails in the hardest way +possible on the hosting operating system. This function never returns. [clinic start generated code]*/ static PyObject * os_abort_impl(PyObject *module) -/*[clinic end generated code: output=dcf52586dad2467c input=cf2c7d98bc504047]*/ +/*[clinic end generated code: output=dcf52586dad2467c input=ee8bd0ed690440ab]*/ { abort(); /*NOTREACHED*/ @@ -15356,6 +15409,7 @@ os_setresgid_impl(PyObject *module, gid_t rgid, gid_t egid, gid_t sgid) #ifdef HAVE_GETRESUID /*[clinic input] +@permit_long_summary os.getresuid Return a tuple of the current process's real, effective, and saved user ids. @@ -15363,7 +15417,7 @@ Return a tuple of the current process's real, effective, and saved user ids. static PyObject * os_getresuid_impl(PyObject *module) -/*[clinic end generated code: output=8e0becff5dece5bf input=41ccfa8e1f6517ad]*/ +/*[clinic end generated code: output=8e0becff5dece5bf input=ddf95881f492cb97]*/ { uid_t ruid, euid, suid; if (getresuid(&ruid, &euid, &suid) < 0) @@ -15408,17 +15462,18 @@ os.getxattr Return the value of extended attribute attribute on path. -path may be either a string, a path-like object, or an open file descriptor. -If follow_symlinks is False, and the last element of the path is a symbolic - link, getxattr will examine the symbolic link itself instead of the file - the link points to. +path may be either a string, a path-like object, or an open file +descriptor. +If follow_symlinks is False, and the last element of the path is +a symbolic link, getxattr will examine the symbolic link itself +instead of the file the link points to. [clinic start generated code]*/ static PyObject * os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=5f2f44200a43cff2 input=025789491708f7eb]*/ +/*[clinic end generated code: output=5f2f44200a43cff2 input=db1021ed738d9754]*/ { if (fd_and_follow_symlinks_invalid("getxattr", path->is_fd, follow_symlinks)) return NULL; @@ -15465,7 +15520,6 @@ os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, /*[clinic input] -@permit_long_docstring_body os.setxattr path: path_t(allow_fd=True) @@ -15477,17 +15531,18 @@ os.setxattr Set extended attribute attribute on path to value. -path may be either a string, a path-like object, or an open file descriptor. -If follow_symlinks is False, and the last element of the path is a symbolic - link, setxattr will modify the symbolic link itself instead of the file - the link points to. +path may be either a string, a path-like object, or an open file +descriptor. +If follow_symlinks is False, and the last element of the path is +a symbolic link, setxattr will modify the symbolic link itself instead +of the file the link points to. [clinic start generated code]*/ static PyObject * os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks) -/*[clinic end generated code: output=98b83f63fdde26bb input=4098e6f68699f3d7]*/ +/*[clinic end generated code: output=98b83f63fdde26bb input=6c4ee6724e8947a4]*/ { ssize_t result; @@ -15530,17 +15585,18 @@ os.removexattr Remove extended attribute attribute on path. -path may be either a string, a path-like object, or an open file descriptor. -If follow_symlinks is False, and the last element of the path is a symbolic - link, removexattr will modify the symbolic link itself instead of the file - the link points to. +path may be either a string, a path-like object, or an open file +descriptor. +If follow_symlinks is False, and the last element of the path is +a symbolic link, removexattr will modify the symbolic link itself +instead of the file the link points to. [clinic start generated code]*/ static PyObject * os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=521a51817980cda6 input=3d9a7d36fe2f7c4e]*/ +/*[clinic end generated code: output=521a51817980cda6 input=a7ec62a86aa83f01]*/ { ssize_t result; @@ -15569,7 +15625,6 @@ os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, /*[clinic input] -@permit_long_docstring_body os.listxattr path: path_t(allow_fd=True, nullable=True) = None @@ -15578,16 +15633,17 @@ os.listxattr Return a list of extended attributes on path. -path may be either None, a string, a path-like object, or an open file descriptor. -if path is None, listxattr will examine the current directory. -If follow_symlinks is False, and the last element of the path is a symbolic - link, listxattr will examine the symbolic link itself instead of the file - the link points to. +path may be either None, a string, a path-like object, or an open file +descriptor. If path is None, listxattr will examine the current +directory. +If follow_symlinks is False, and the last element of the path is +a symbolic link, listxattr will examine the symbolic link itself instead +of the file the link points to. [clinic start generated code]*/ static PyObject * os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks) -/*[clinic end generated code: output=bebdb4e2ad0ce435 input=48aa9ac8be47dea1]*/ +/*[clinic end generated code: output=bebdb4e2ad0ce435 input=cb4a6414afaa99bd]*/ { Py_ssize_t i; PyObject *result = NULL; @@ -16490,7 +16546,7 @@ static PyMemberDef DirEntry_members[] = { {"name", Py_T_OBJECT_EX, offsetof(DirEntry, name), Py_READONLY, "the entry's base filename, relative to scandir() \"path\" argument"}, {"path", Py_T_OBJECT_EX, offsetof(DirEntry, path), Py_READONLY, - "the entry's full path name; equivalent to os.path.join(scandir_path, entry.name)"}, + "the entry's full path name; equivalent to\nos.path.join(scandir_path, entry.name)"}, {NULL} }; @@ -16505,7 +16561,7 @@ static PyMethodDef DirEntry_methods[] = { OS_DIRENTRY_INODE_METHODDEF OS_DIRENTRY___FSPATH___METHODDEF {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, PyDoc_STR("DirEntry is generic over the type of the path (str or bytes)")}, {NULL} }; @@ -16984,16 +17040,16 @@ os.scandir Return an iterator of DirEntry objects for given path. -path can be specified as either str, bytes, or a path-like object. If path -is bytes, the names of yielded DirEntry objects will also be bytes; in -all other circumstances they will be str. +path can be specified as either str, bytes, or a path-like object. If +path is bytes, the names of yielded DirEntry objects will also be bytes; +in all other circumstances they will be str. If path is None, uses the path='.'. [clinic start generated code]*/ static PyObject * os_scandir_impl(PyObject *module, path_t *path) -/*[clinic end generated code: output=6eb2668b675ca89e input=6bdd312708fc3bb0]*/ +/*[clinic end generated code: output=6eb2668b675ca89e input=6ab9600993f51577]*/ { ScandirIterator *iterator; #ifdef MS_WINDOWS @@ -17140,21 +17196,20 @@ PyOS_FSPath(PyObject *path) } /*[clinic input] -@permit_long_docstring_body os.fspath path: object Return the file system path representation of the object. -If the object is str or bytes, then allow it to pass through as-is. If the -object defines __fspath__(), then return the result of that method. All other -types raise a TypeError. +If the object is str or bytes, then allow it to pass through as-is. If +the object defines __fspath__(), then return the result of that method. +All other types raise a TypeError. [clinic start generated code]*/ static PyObject * os_fspath_impl(PyObject *module, PyObject *path) -/*[clinic end generated code: output=c3c3b78ecff2914f input=f608743e60a3211e]*/ +/*[clinic end generated code: output=c3c3b78ecff2914f input=d3c54404240d5da0]*/ { return PyOS_FSPath(path); } @@ -17331,13 +17386,13 @@ On Unix: On Windows, return status shifted right by 8 bits. On Unix, if the process is being traced or if waitpid() was called with -WUNTRACED option, the caller must first check if WIFSTOPPED(status) is true. -This function must not be called if WIFSTOPPED(status) is true. +WUNTRACED option, the caller must first check if WIFSTOPPED(status) is +true. This function must not be called if WIFSTOPPED(status) is true. [clinic start generated code]*/ static PyObject * os_waitstatus_to_exitcode_impl(PyObject *module, PyObject *status_obj) -/*[clinic end generated code: output=db50b1b0ba3c7153 input=7fe2d7fdaea3db42]*/ +/*[clinic end generated code: output=db50b1b0ba3c7153 input=3b44a23f5090006c]*/ { #ifndef MS_WINDOWS int status = PyLong_AsInt(status_obj); @@ -17606,6 +17661,7 @@ static PyMethodDef posix_methods[] = { OS_WAITID_METHODDEF OS_WAITPID_METHODDEF OS_PIDFD_OPEN_METHODDEF + OS_PIDFD_GETFD_METHODDEF OS_GETSID_METHODDEF OS_SETSID_METHODDEF OS_SETPGID_METHODDEF diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 64314e5dff9..53d42ad50e3 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -4,6 +4,7 @@ #include "Python.h" #include "pycore_ceval.h" // _Py_EnterRecursiveCall() +#include "pycore_codecs.h" // _PyCodec_LookupTextEncoding() #include "pycore_import.h" // _PyImport_SetModule() #include "pycore_pyhash.h" // _Py_HashSecret #include "pycore_traceback.h" // _PyTraceback_Add() @@ -830,6 +831,7 @@ get_parse_result(pyexpat_state *state, xmlparseobject *self, int rv) #define MAX_CHUNK_SIZE (1 << 20) /*[clinic input] +@permit_long_summary pyexpat.xmlparser.SetReparseDeferralEnabled enabled: bool @@ -841,7 +843,7 @@ Enable/Disable reparse deferral; enabled by default with Expat >=2.6.0. static PyObject * pyexpat_xmlparser_SetReparseDeferralEnabled_impl(xmlparseobject *self, int enabled) -/*[clinic end generated code: output=5ec539e3b63c8c49 input=021eb9e0bafc32c5]*/ +/*[clinic end generated code: output=5ec539e3b63c8c49 input=6d3743500dcee799]*/ { #if XML_COMBINED_VERSION >= 20600 XML_SetReparseDeferralEnabled(self->itself, enabled ? XML_TRUE : XML_FALSE); @@ -1053,18 +1055,19 @@ pyexpat_xmlparser_GetBase_impl(xmlparseobject *self) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary pyexpat.xmlparser.GetInputContext Return the untranslated text of the input that caused the current event. -If the event was generated by a large amount of text (such as a start tag -for an element with many attributes), not all of the text may be available. +If the event was generated by a large amount of text (such as +a start tag for an element with many attributes), not all of the +text may be available. [clinic start generated code]*/ static PyObject * pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self) -/*[clinic end generated code: output=a88026d683fc22cc input=925cea010fdfa682]*/ +/*[clinic end generated code: output=a88026d683fc22cc input=a672f48f09bb73d2]*/ { if (self->in_callback) { int offset, size; @@ -1191,7 +1194,6 @@ pyexpat_xmlparser_SetParamEntityParsing_impl(xmlparseobject *self, int flag) #if XML_COMBINED_VERSION >= 19505 /*[clinic input] @permit_long_summary -@permit_long_docstring_body pyexpat.xmlparser.UseForeignDTD cls: defining_class @@ -1200,15 +1202,16 @@ pyexpat.xmlparser.UseForeignDTD Allows the application to provide an artificial external subset if one is not specified as part of the document instance. -This readily allows the use of a 'default' document type controlled by the -application, while still getting the advantage of providing document type -information to the parser. 'flag' defaults to True if not provided. +This readily allows the use of a 'default' document type controlled +by the application, while still getting the advantage of providing +document type information to the parser. 'flag' defaults to True if +not provided. [clinic start generated code]*/ static PyObject * pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, PyTypeObject *cls, int flag) -/*[clinic end generated code: output=d7d98252bd25a20f input=c2264845d8c0029c]*/ +/*[clinic end generated code: output=d7d98252bd25a20f input=2920baa5bf24714d]*/ { pyexpat_state *state = PyType_GetModuleState(cls); enum XML_Error rc; @@ -1268,7 +1271,6 @@ set_maximum_amplification(xmlparseobject *self, #if XML_COMBINED_VERSION >= 20400 /*[clinic input] @permit_long_summary -@permit_long_docstring_body pyexpat.xmlparser.SetBillionLaughsAttackProtectionActivationThreshold cls: defining_class @@ -1277,21 +1279,22 @@ pyexpat.xmlparser.SetBillionLaughsAttackProtectionActivationThreshold Sets the number of output bytes needed to activate protection against billion laughs attacks. -The number of output bytes includes amplification from entity expansion -and reading DTD files. +The number of output bytes includes amplification from entity +expansion and reading DTD files. -Parser objects usually have a protection activation threshold of 8 MiB, -but the actual default value depends on the underlying Expat library. +Parser objects usually have a protection activation threshold of +8 MiB, but the actual default value depends on the underlying Expat +library. -Activation thresholds below 4 MiB are known to break support for DITA 1.3 -payload and are hence not recommended. +Activation thresholds below 4 MiB are known to break support for +DITA 1.3 payload and are hence not recommended. [clinic start generated code]*/ static PyObject * pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold_impl(xmlparseobject *self, PyTypeObject *cls, unsigned long long threshold) -/*[clinic end generated code: output=0c082342f1c78114 input=fa2f91f26b62a42a]*/ +/*[clinic end generated code: output=0c082342f1c78114 input=8d84b0e3a873cdba]*/ { return set_activation_threshold( self, cls, threshold, @@ -1303,7 +1306,6 @@ pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold_impl(xmlpa #if XML_COMBINED_VERSION >= 20400 /*[clinic input] @permit_long_summary -@permit_long_docstring_body pyexpat.xmlparser.SetBillionLaughsAttackProtectionMaximumAmplification cls: defining_class @@ -1312,25 +1314,28 @@ pyexpat.xmlparser.SetBillionLaughsAttackProtectionMaximumAmplification Sets the maximum tolerated amplification factor for protection against billion laughs attacks. -The amplification factor is calculated as "(direct + indirect) / direct" -while parsing, where "direct" is the number of bytes read from the primary -document in parsing and "indirect" is the number of bytes added by expanding -entities and reading external DTD files, combined. +The amplification factor is calculated as "(direct + indirect) / +direct" while parsing, where "direct" is the number of bytes read +from the primary document in parsing and "indirect" is the number of +bytes added by expanding entities and reading external DTD files, +combined. -The 'max_factor' value must be a non-NaN floating point value greater than -or equal to 1.0. Amplification factors greater than 30,000 can be observed -in the middle of parsing even with benign files in practice. In particular, -the activation threshold should be carefully chosen to avoid false positives. +The 'max_factor' value must be a non-NaN floating point value +greater than or equal to 1.0. Amplification factors greater than +30,000 can be observed in the middle of parsing even with benign +files in practice. In particular, the activation threshold should +be carefully chosen to avoid false positives. Parser objects usually have a maximum amplification factor of 100, -but the actual default value depends on the underlying Expat library. +but the actual default value depends on the underlying Expat +library. [clinic start generated code]*/ static PyObject * pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification_impl(xmlparseobject *self, PyTypeObject *cls, float max_factor) -/*[clinic end generated code: output=c590439eadf463fa input=cc1e97c1fd2bd950]*/ +/*[clinic end generated code: output=c590439eadf463fa input=d0f11971c5b9e98b]*/ { return set_maximum_amplification( self, cls, max_factor, @@ -1342,7 +1347,6 @@ pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification_impl(xmlp #if XML_COMBINED_VERSION >= 20702 /*[clinic input] @permit_long_summary -@permit_long_docstring_body pyexpat.xmlparser.SetAllocTrackerActivationThreshold cls: defining_class @@ -1351,15 +1355,16 @@ pyexpat.xmlparser.SetAllocTrackerActivationThreshold Sets the number of allocated bytes of dynamic memory needed to activate protection against disproportionate use of RAM. -Parser objects usually have an allocation activation threshold of 64 MiB, -but the actual default value depends on the underlying Expat library. +Parser objects usually have an allocation activation threshold of +64 MiB, but the actual default value depends on the underlying Expat +library. [clinic start generated code]*/ static PyObject * pyexpat_xmlparser_SetAllocTrackerActivationThreshold_impl(xmlparseobject *self, PyTypeObject *cls, unsigned long long threshold) -/*[clinic end generated code: output=bed7e93207ba08c5 input=b7a7a3e3d054286a]*/ +/*[clinic end generated code: output=bed7e93207ba08c5 input=4728360b545de87a]*/ { return set_activation_threshold( self, cls, threshold, @@ -1371,7 +1376,6 @@ pyexpat_xmlparser_SetAllocTrackerActivationThreshold_impl(xmlparseobject *self, #if XML_COMBINED_VERSION >= 20702 /*[clinic input] @permit_long_summary -@permit_long_docstring_body pyexpat.xmlparser.SetAllocTrackerMaximumAmplification cls: defining_class @@ -1380,25 +1384,27 @@ pyexpat.xmlparser.SetAllocTrackerMaximumAmplification Sets the maximum amplification factor between direct input and bytes of dynamic memory allocated. -The amplification factor is calculated as "allocated / direct" while parsing, -where "direct" is the number of bytes read from the primary document in parsing -and "allocated" is the number of bytes of dynamic memory allocated in the parser -hierarchy. +The amplification factor is calculated as "allocated / direct" while +parsing, where "direct" is the number of bytes read from the primary +document in parsing and "allocated" is the number of bytes of +dynamic memory allocated in the parser hierarchy. -The 'max_factor' value must be a non-NaN floating point value greater than -or equal to 1.0. Amplification factors greater than 100.0 can be observed -near the start of parsing even with benign files in practice. In particular, -the activation threshold should be carefully chosen to avoid false positives. +The 'max_factor' value must be a non-NaN floating point value +greater than or equal to 1.0. Amplification factors greater than +100.0 can be observed near the start of parsing even with benign +files in practice. In particular, the activation threshold should +be carefully chosen to avoid false positives. Parser objects usually have a maximum amplification factor of 100, -but the actual default value depends on the underlying Expat library. +but the actual default value depends on the underlying Expat +library. [clinic start generated code]*/ static PyObject * pyexpat_xmlparser_SetAllocTrackerMaximumAmplification_impl(xmlparseobject *self, PyTypeObject *cls, float max_factor) -/*[clinic end generated code: output=6e44bd48c9b112a0 input=c6af7ccb76ae5c6b]*/ +/*[clinic end generated code: output=6e44bd48c9b112a0 input=dd23ea3ef2069b69]*/ { return set_maximum_amplification( self, cls, max_factor, @@ -1433,6 +1439,60 @@ static struct PyMethodDef xmlparse_methods[] = { Make it as simple as possible. */ +typedef struct { + int map[256]; + char name[0]; +} pyexpat_encoding_info; + +static pyexpat_encoding_info * +pyexpat_encoding_create(const char *name, PyObject *mapping) +{ + if (!PyTuple_Check(mapping) || PyTuple_GET_SIZE(mapping) != 256) { + PyErr_SetString(PyExc_ValueError, + "_expat_decoding_table must be a 256-tuple of integers"); + return NULL; + } + pyexpat_encoding_info *info = (pyexpat_encoding_info *)PyMem_Malloc( + sizeof(pyexpat_encoding_info) + strlen(name) + 1); + if (info == NULL) { + PyErr_NoMemory(); + return NULL; + } + for (int i = 0; i < 256; i++) { + int j = PyLong_AsInt(PyTuple_GET_ITEM(mapping, i)); + if (j == -1 && PyErr_Occurred()) { + PyMem_Free(info); + return NULL; + } + info->map[i] = j; + } + strcpy(info->name, name); + return info; +} + +static int +pyexpat_encoding_convert(void *data, const char *s) +{ + if (PyErr_Occurred()) { + return -1; + } + pyexpat_encoding_info *info = (pyexpat_encoding_info *)data; + int i = (unsigned char)s[0]; + assert(info->map[i] < -1); + PyObject *u = PyUnicode_Decode(s, -info->map[i], info->name, NULL); + if (u == NULL) { + return -1; + } + if (PyUnicode_GET_LENGTH(u) != 1) { + Py_DECREF(u); + return -1; + } + Py_UCS4 ch = PyUnicode_ReadChar(u, 0); + Py_DECREF(u); + return (int)ch; +} + + static const unsigned char template_buffer[256] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -1465,6 +1525,43 @@ PyUnknownEncodingHandler(void *encodingHandlerData, if (PyErr_Occurred()) return XML_STATUS_ERROR; + PyObject *codec = _PyCodec_LookupTextEncoding(name, NULL); + if (codec == NULL) { + return XML_STATUS_ERROR; + } + if (!PyTuple_CheckExact(codec)) { + PyObject *attr; + if (PyObject_GetOptionalAttrString(codec, "_expat_decoding_table", &attr) < 0) { + Py_DECREF(codec); + return XML_STATUS_ERROR; + } + if (attr != NULL) { + if (attr == Py_False) { + Py_DECREF(attr); + Py_DECREF(codec); + PyErr_Format(PyExc_ValueError, + "encoding '%s' is not supported", + name); + return XML_STATUS_ERROR; + } + pyexpat_encoding_info *data = pyexpat_encoding_create(name, attr); + Py_DECREF(attr); + if (data == NULL) { + Py_DECREF(codec); + return XML_STATUS_ERROR; + } + for (i = 0; i < 256; i++) { + info->map[i] = data->map[i]; + } + info->data = data; + info->convert = pyexpat_encoding_convert; + info->release = PyMem_Free; + Py_DECREF(codec); + return XML_STATUS_OK; + } + } + Py_DECREF(codec); + u = PyUnicode_Decode((const char*) template_buffer, 256, name, "replace"); if (u == NULL) { Py_XDECREF(u); @@ -1473,8 +1570,9 @@ PyUnknownEncodingHandler(void *encodingHandlerData, if (PyUnicode_GET_LENGTH(u) != 256) { Py_DECREF(u); - PyErr_SetString(PyExc_ValueError, - "multi-byte encodings are not supported"); + PyErr_Format(PyExc_ValueError, + "multi-byte encoding '%s' is not supported", + name); return XML_STATUS_ERROR; } diff --git a/Modules/readline.c b/Modules/readline.c index 488332f548e..c580d2022fc 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -432,6 +432,7 @@ readline_append_history_file_impl(PyObject *module, int nelements, /* Set history length */ /*[clinic input] +@permit_long_summary readline.set_history_length length: int @@ -444,7 +445,7 @@ A negative length is used to inhibit history truncation. static PyObject * readline_set_history_length_impl(PyObject *module, int length) -/*[clinic end generated code: output=e161a53e45987dc7 input=b8901bf16488b760]*/ +/*[clinic end generated code: output=e161a53e45987dc7 input=8d02c81b38ef81ec]*/ { FT_ATOMIC_STORE_INT_RELAXED(_history_length, length); Py_RETURN_NONE; @@ -453,6 +454,7 @@ readline_set_history_length_impl(PyObject *module, int length) /* Get history length */ /*[clinic input] +@permit_long_summary readline.get_history_length Return the maximum number of lines that will be written to the history file. @@ -460,7 +462,7 @@ Return the maximum number of lines that will be written to the history file. static PyObject * readline_get_history_length_impl(PyObject *module) -/*[clinic end generated code: output=83a2eeae35b6d2b9 input=5dce2eeba4327817]*/ +/*[clinic end generated code: output=83a2eeae35b6d2b9 input=a65823e732ebfa9d]*/ { int history_length = FT_ATOMIC_LOAD_INT_RELAXED(_history_length); return PyLong_FromLong(history_length); @@ -1404,6 +1406,10 @@ setup_readline(readlinestate *mod_state) completer_word_break_characters = strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); /* All nonalphanums except '.' */ + + if (!completer_word_break_characters) { + goto error; + } #ifdef WITH_EDITLINE // libedit uses rl_basic_word_break_characters instead of // rl_completer_word_break_characters as complete delimiter @@ -1447,6 +1453,10 @@ setup_readline(readlinestate *mod_state) RESTORE_LOCALE(saved_locale) return 0; + +error: + RESTORE_LOCALE(saved_locale) + return -1; } /* Wrapper around GNU readline that handles signals differently. */ diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index eb3148ef246..2c56dbc6a54 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -242,7 +242,6 @@ set2list(fd_set *set, pylist fd2obj[FD_SETSIZE + 1]) #endif /* FD_SETSIZE > 1024 */ /*[clinic input] -@permit_long_docstring_body select.select rlist: object @@ -253,7 +252,8 @@ select.select Wait until one or more file descriptors are ready for some kind of I/O. -The first three arguments are iterables of file descriptors to be waited for: +The first three arguments are iterables of file descriptors to be waited +for: rlist -- wait until ready for reading wlist -- wait until ready for writing xlist -- wait for an "exceptional condition" @@ -266,9 +266,9 @@ The optional 4th argument specifies a timeout in seconds; it may be a non-integer to specify fractions of seconds. If it is absent or None, the call will never time out. -The return value is a tuple of three lists corresponding to the first three -arguments; each contains the subset of the corresponding file descriptors -that are ready. +The return value is a tuple of three lists corresponding to the first +three arguments; each contains the subset of the corresponding file +descriptors that are ready. *** IMPORTANT NOTICE *** On Windows, only sockets are supported; on Unix, all file @@ -278,7 +278,7 @@ descriptors can be used. static PyObject * select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist, PyObject *xlist, PyObject *timeout_obj) -/*[clinic end generated code: output=2b3cfa824f7ae4cf input=b0403de75cd11cc1]*/ +/*[clinic end generated code: output=2b3cfa824f7ae4cf input=cc93e9bb9ffacbaf]*/ { #ifdef SELECT_USES_HEAP pylist *rfd2obj, *wfd2obj, *efd2obj; @@ -616,13 +616,13 @@ select.poll.poll Polls the set of registered file descriptors. -Returns a list containing any descriptors that have events or errors to -report, as a list of (fd, event) 2-tuples. +Returns a list containing any descriptors that have events or errors +to report, as a list of (fd, event) 2-tuples. [clinic start generated code]*/ static PyObject * select_poll_poll_impl(pollObject *self, PyObject *timeout_obj) -/*[clinic end generated code: output=876e837d193ed7e4 input=54310631457efdec]*/ +/*[clinic end generated code: output=876e837d193ed7e4 input=e0a9c0aa283de8c8]*/ { PyObject *result_list = NULL; int poll_result, i, j; @@ -975,19 +975,19 @@ select_devpoll_unregister_impl(devpollObject *self, int fd) @critical_section select.devpoll.poll timeout as timeout_obj: object = None - The maximum time to wait in milliseconds, or else None (or a negative - value) to wait indefinitely. + The maximum time to wait in milliseconds, or else None (or + a negative value) to wait indefinitely. / Polls the set of registered file descriptors. -Returns a list containing any descriptors that have events or errors to -report, as a list of (fd, event) 2-tuples. +Returns a list containing any descriptors that have events or errors +to report, as a list of (fd, event) 2-tuples. [clinic start generated code]*/ static PyObject * select_devpoll_poll_impl(devpollObject *self, PyObject *timeout_obj) -/*[clinic end generated code: output=2654e5457cca0b3c input=fe7a3f6dcbc118c5]*/ +/*[clinic end generated code: output=2654e5457cca0b3c input=9e1672658d728539]*/ { struct dvpoll dvp; PyObject *result_list = NULL; @@ -1233,18 +1233,17 @@ static PyType_Spec devpoll_Type_spec = { /*[clinic input] -@permit_long_docstring_body select.poll Returns a polling object. -This object supports registering and unregistering file descriptors, and then -polling them for I/O events. +This object supports registering and unregistering file descriptors, and +then polling them for I/O events. [clinic start generated code]*/ static PyObject * select_poll_impl(PyObject *module) -/*[clinic end generated code: output=16a665a4e1d228c5 input=5e07eea8ad564e7f]*/ +/*[clinic end generated code: output=16a665a4e1d228c5 input=0aefd4527e99e0aa]*/ { return (PyObject *)newPollObject(module); } @@ -1252,18 +1251,17 @@ select_poll_impl(PyObject *module) #ifdef HAVE_SYS_DEVPOLL_H /*[clinic input] -@permit_long_docstring_body select.devpoll Returns a polling object. -This object supports registering and unregistering file descriptors, and then -polling them for I/O events. +This object supports registering and unregistering file descriptors, and +then polling them for I/O events. [clinic start generated code]*/ static PyObject * select_devpoll_impl(PyObject *module) -/*[clinic end generated code: output=ea9213cc87fd9581 input=048506faef19d947]*/ +/*[clinic end generated code: output=ea9213cc87fd9581 input=4c2ac27d10248526]*/ { return (PyObject *)newDevPollObject(module); } @@ -1540,6 +1538,7 @@ pyepoll_internal_ctl(int epfd, int op, int fd, unsigned int events) } /*[clinic input] +@permit_long_summary select.epoll.register fd: fildes @@ -1555,7 +1554,7 @@ The epoll interface supports all file descriptors that support poll. static PyObject * select_epoll_register_impl(pyEpoll_Object *self, int fd, unsigned int eventmask) -/*[clinic end generated code: output=318e5e6386520599 input=a5071b71edfe3578]*/ +/*[clinic end generated code: output=318e5e6386520599 input=9f0c9ebb25a4fc8f]*/ { return pyepoll_internal_ctl(self->epfd, EPOLL_CTL_ADD, fd, eventmask); } @@ -1606,14 +1605,14 @@ select.epoll.poll Wait for events on the epoll file descriptor. -Returns a list containing any descriptors that have events to report, -as a list of (fd, events) 2-tuples. +Returns a list containing any descriptors that have events to +report, as a list of (fd, events) 2-tuples. [clinic start generated code]*/ static PyObject * select_epoll_poll_impl(pyEpoll_Object *self, PyObject *timeout_obj, int maxevents) -/*[clinic end generated code: output=e02d121a20246c6c input=deafa7f04a60ebe0]*/ +/*[clinic end generated code: output=e02d121a20246c6c input=911ddc16978a9159]*/ { int nfds, i; PyObject *elist = NULL, *etuple = NULL; diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index fb548b8ca00..8456239dee2 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -450,7 +450,6 @@ signal_raise_signal_impl(PyObject *module, int signalnum) } /*[clinic input] -@permit_long_docstring_body signal.signal signalnum: int @@ -460,16 +459,17 @@ signal.signal Set the action for the given signal. The action can be SIG_DFL, SIG_IGN, or a callable Python object. -The previous action is returned. See getsignal() for possible return values. +The previous action is returned. See getsignal() for possible return +values. *** IMPORTANT NOTICE *** -A signal handler function is called with two arguments: -the first is the signal number, the second is the interrupted stack frame. +A signal handler function is called with two arguments: the first is +the signal number, the second is the interrupted stack frame. [clinic start generated code]*/ static PyObject * signal_signal_impl(PyObject *module, int signalnum, PyObject *handler) -/*[clinic end generated code: output=b44cfda43780f3a1 input=7608656f34fa378b]*/ +/*[clinic end generated code: output=b44cfda43780f3a1 input=99ce4035ec56ffc1]*/ { _signal_module_state *modstate = get_signal_state(module); PyObject *old_handler; @@ -839,7 +839,6 @@ PySignal_SetWakeupFd(int fd) #ifdef HAVE_SETITIMER /*[clinic input] -@permit_long_docstring_body signal.setitimer which: int @@ -849,8 +848,8 @@ signal.setitimer Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF). -The timer will fire after value seconds and after that every interval seconds. -The itimer can be cleared by setting seconds to zero. +The timer will fire after value seconds and after that every interval +seconds. The itimer can be cleared by setting seconds to zero. Returns old values as a tuple: (delay, interval). [clinic start generated code]*/ @@ -858,7 +857,7 @@ Returns old values as a tuple: (delay, interval). static PyObject * signal_setitimer_impl(PyObject *module, int which, PyObject *seconds, PyObject *interval) -/*[clinic end generated code: output=65f9dcbddc35527b input=ab5bf2b8f5cff3f4]*/ +/*[clinic end generated code: output=65f9dcbddc35527b input=bd9f0d2ed8614193]*/ { _signal_module_state *modstate = get_signal_state(module); @@ -1019,13 +1018,13 @@ signal.sigwait Wait for a signal. Suspend execution of the calling thread until the delivery of one of the -signals specified in the signal set sigset. The function accepts the signal -and returns the signal number. +signals specified in the signal set sigset. The function accepts the +signal and returns the signal number. [clinic start generated code]*/ static PyObject * signal_sigwait_impl(PyObject *module, sigset_t sigset) -/*[clinic end generated code: output=f43770699d682f96 input=a6fbd47b1086d119]*/ +/*[clinic end generated code: output=f43770699d682f96 input=91773742dd416a3e]*/ { int err, signum; diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index f5993fc8fda..3eaa8cf7548 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -654,10 +654,6 @@ class _socket.socket "PySocketSockObject *" "clinic_state()->sock_type" [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=2db2489bd2219fd8]*/ -#define clinic_state() (find_module_state_by_def(type)) -#include "clinic/socketmodule.c.h" -#undef clinic_state - /* XXX There's a problem here: *static* functions are not supposed to have a Py prefix (or use CapitalizedWords). Later... */ @@ -688,6 +684,18 @@ class _socket.socket "PySocketSockObject *" "clinic_state()->sock_type" #define IS_SELECTABLE(s) (_PyIsSelectable_fd((s)->sock_fd) || (s)->sock_timeout <= 0) #endif +// SCM_RIGHTS, sendmsg(), recvmsg() and sethostname() don't work properly on +// Cygwin: disable these features. +#ifdef __CYGWIN__ +# undef CMSG_LEN +# undef SCM_RIGHTS +# undef HAVE_SETHOSTNAME +#endif + +#define clinic_state() (find_module_state_by_def(type)) +#include "clinic/socketmodule.c.h" +#undef clinic_state + static PyObject* select_error(void) { @@ -4620,7 +4628,6 @@ sock_send_impl(PySocketSockObject *s, void *data) } /*[clinic input] -@permit_long_docstring_body _socket.socket.send self as s: self(type="PySocketSockObject *") data as pbuf: Py_buffer @@ -4630,12 +4637,13 @@ _socket.socket.send Send a data string to the socket. For the optional flags argument, see the Unix manual. -Return the number of bytes sent; this may be less than len(data) if the network is busy. +Return the number of bytes sent; this may be less than len(data) if +the network is busy. [clinic start generated code]*/ static PyObject * _socket_socket_send_impl(PySocketSockObject *s, Py_buffer *pbuf, int flags) -/*[clinic end generated code: output=3ddf83f17d0c875b input=e776a48af2e3d615]*/ +/*[clinic end generated code: output=3ddf83f17d0c875b input=d2b8af9bf99cfafb]*/ { struct sock_send ctx; @@ -4665,13 +4673,14 @@ Send a data string to the socket. For the optional flags argument, see the Unix manual. This calls send() repeatedly until all data is sent. -If an error occurs, it's impossible to tell how much data has been sent. +If an error occurs, it's impossible to tell how much data has been +sent. [clinic start generated code]*/ static PyObject * _socket_socket_sendall_impl(PySocketSockObject *s, Py_buffer *pbuf, int flags) -/*[clinic end generated code: output=ec92861424d3faa8 input=732b15b9ca64dce6]*/ +/*[clinic end generated code: output=ec92861424d3faa8 input=2600de13b4614893]*/ { char *buf; @@ -4921,20 +4930,20 @@ The buffers argument specifies the non-ancillary data as an iterable of bytes-like objects (e.g. bytes objects). The ancdata argument specifies the ancillary data (control messages) as an iterable of zero or more tuples (cmsg_level, cmsg_type, -cmsg_data), where cmsg_level and cmsg_type are integers specifying the -protocol level and protocol-specific type respectively, and cmsg_data -is a bytes-like object holding the associated data. The flags -argument defaults to 0 and has the same meaning as for send(). If -address is supplied and not None, it sets a destination address for -the message. The return value is the number of bytes of non-ancillary -data sent. +cmsg_data), where cmsg_level and cmsg_type are integers specifying +the protocol level and protocol-specific type respectively, and +cmsg_data is a bytes-like object holding the associated data. The +flags argument defaults to 0 and has the same meaning as for send(). +If address is supplied and not None, it sets a destination address +for the message. The return value is the number of bytes of +non-ancillary data sent. [clinic start generated code]*/ static PyObject * _socket_socket_sendmsg_impl(PySocketSockObject *s, PyObject *data_arg, PyObject *cmsg_arg, int flags, PyObject *addr_arg) -/*[clinic end generated code: output=3b4cb1110644ce39 input=479c13d90bd2f88b]*/ +/*[clinic end generated code: output=3b4cb1110644ce39 input=8ae408971a3aa329]*/ { Py_ssize_t i, ndatabufs = 0, ncmsgs, ncmsgbufs = 0; @@ -7310,6 +7319,7 @@ _socket_if_nametoindex_impl(PyObject *module, PyObject *oname) /*[clinic input] +@permit_long_summary _socket.if_indextoname if_index as index: NET_IFINDEX / @@ -7319,7 +7329,7 @@ Returns the interface name corresponding to the interface index if_index. static PyObject * _socket_if_indextoname_impl(PyObject *module, NET_IFINDEX index) -/*[clinic end generated code: output=e48bc324993052e0 input=c93f753d0cf6d7d1]*/ +/*[clinic end generated code: output=e48bc324993052e0 input=2a0026b271cd43ae]*/ { errno = ENXIO; // in case 'if_indextoname' does not set errno char name[IF_NAMESIZE + 1]; @@ -9283,6 +9293,9 @@ socket_exec(PyObject *m) /* Initialize gethostbyname lock */ #if defined(USE_GETHOSTBYNAME_LOCK) netdb_lock = PyThread_allocate_lock(); + if (netdb_lock == NULL) { + goto error; + } #endif #ifdef MS_WINDOWS diff --git a/Modules/termios.c b/Modules/termios.c index 95b9c920f39..38743e176f0 100644 --- a/Modules/termios.c +++ b/Modules/termios.c @@ -312,6 +312,7 @@ termios_tcsendbreak_impl(PyObject *module, int fd, int duration) } /*[clinic input] +@permit_long_summary termios.tcdrain fd: fildes @@ -322,7 +323,7 @@ Wait until all output written to file descriptor fd has been transmitted. static PyObject * termios_tcdrain_impl(PyObject *module, int fd) -/*[clinic end generated code: output=5fd86944c6255955 input=c99241b140b32447]*/ +/*[clinic end generated code: output=5fd86944c6255955 input=d1557e60b5ec66c5]*/ { termiosmodulestate *state = PyModule_GetState(module); int r; @@ -474,7 +475,6 @@ termios_tcgetwinsize_impl(PyObject *module, int fd) } /*[clinic input] -@permit_long_docstring_body termios.tcsetwinsize fd: fildes @@ -484,12 +484,13 @@ termios.tcsetwinsize Set the tty winsize for file descriptor fd. The winsize to be set is taken from the winsize argument, which -is a two-item tuple (ws_row, ws_col) like the one returned by tcgetwinsize(). +is a two-item tuple (ws_row, ws_col) like the one returned by +tcgetwinsize(). [clinic start generated code]*/ static PyObject * termios_tcsetwinsize_impl(PyObject *module, int fd, PyObject *winsz) -/*[clinic end generated code: output=2ac3c9bb6eda83e1 input=9a163c4e06fc4a41]*/ +/*[clinic end generated code: output=2ac3c9bb6eda83e1 input=efc9beb16d06382a]*/ { if (!PySequence_Check(winsz) || PySequence_Size(winsz) != 2) { PyErr_SetString(PyExc_TypeError, diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 25e744d7da2..d90bf1f2ef9 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -820,12 +820,15 @@ time_strftime1(time_char **outbuf, size_t *bufsize, PyErr_NoMemory(); return NULL; } - *outbuf = (time_char *)PyMem_Realloc(*outbuf, - *bufsize*sizeof(time_char)); - if (*outbuf == NULL) { + time_char *tmp = (time_char *)PyMem_Realloc(*outbuf, + *bufsize*sizeof(time_char)); + if (tmp == NULL) { + PyMem_Free(*outbuf); + *outbuf = NULL; PyErr_NoMemory(); return NULL; } + *outbuf = tmp; #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) errno = 0; #endif diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index 55b33a76e7a..60df6821693 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -291,6 +291,7 @@ unicodedata_UCD_numeric_impl(PyObject *self, int chr, } /*[clinic input] +@permit_long_summary unicodedata.UCD.category self: self @@ -302,7 +303,7 @@ Returns the general category assigned to the character chr as string. static PyObject * unicodedata_UCD_category_impl(PyObject *self, int chr) -/*[clinic end generated code: output=8571539ee2e6783a input=27d6f3d85050bc06]*/ +/*[clinic end generated code: output=8571539ee2e6783a input=1d729c67299e8a31]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -316,6 +317,7 @@ unicodedata_UCD_category_impl(PyObject *self, int chr) } /*[clinic input] +@permit_long_summary unicodedata.UCD.bidirectional self: self @@ -329,7 +331,7 @@ If no such value is defined, an empty string is returned. static PyObject * unicodedata_UCD_bidirectional_impl(PyObject *self, int chr) -/*[clinic end generated code: output=d36310ce2039bb92 input=b3d8f42cebfcf475]*/ +/*[clinic end generated code: output=d36310ce2039bb92 input=838f8a2203bd2990]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -373,6 +375,7 @@ unicodedata_UCD_combining_impl(PyObject *self, int chr) } /*[clinic input] +@permit_long_summary unicodedata.UCD.mirrored -> int self: self @@ -387,7 +390,7 @@ character in bidirectional text, 0 otherwise. static int unicodedata_UCD_mirrored_impl(PyObject *self, int chr) -/*[clinic end generated code: output=2532dbf8121b50e6 input=5dd400d351ae6f3b]*/ +/*[clinic end generated code: output=2532dbf8121b50e6 input=6db28989e49cd9c8]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -403,6 +406,7 @@ unicodedata_UCD_mirrored_impl(PyObject *self, int chr) } /*[clinic input] +@permit_long_summary unicodedata.UCD.east_asian_width self: self @@ -414,7 +418,7 @@ Returns the east asian width assigned to the character chr as string. static PyObject * unicodedata_UCD_east_asian_width_impl(PyObject *self, int chr) -/*[clinic end generated code: output=484e8537d9ee8197 input=c4854798aab026e0]*/ +/*[clinic end generated code: output=484e8537d9ee8197 input=207c5f68fa475516]*/ { int index; Py_UCS4 c = (Py_UCS4)chr; @@ -552,19 +556,80 @@ get_decomp_record(PyObject *self, Py_UCS4 code, (*index)++; } +/* Small combining runs are usually cheaper with insertion sort. */ +#define CANONICAL_ORDERING_COUNTING_SORT_THRESHOLD 20 + +static void +canonical_ordering_sort_insertion(int kind, void *data, + Py_ssize_t start, Py_ssize_t end) +{ + for (Py_ssize_t i = start + 1; i < end; i++) { + Py_UCS4 code = PyUnicode_READ(kind, data, i); + unsigned char combining = _getrecord_ex(code)->combining; + Py_ssize_t j = i; + + while (j > start) { + Py_UCS4 previous = PyUnicode_READ(kind, data, j - 1); + if (_getrecord_ex(previous)->combining <= combining) { + break; + } + PyUnicode_WRITE(kind, data, j, previous); + j--; + } + if (j != i) { + PyUnicode_WRITE(kind, data, j, code); + } + } +} + +static void +canonical_ordering_sort_counting(int kind, void *data, + Py_ssize_t start, Py_ssize_t end, + Py_UCS4 *sortbuf) +{ + Py_ssize_t counts[256] = {0}; + Py_ssize_t run_length = end - start; + Py_ssize_t total = 0; + + for (Py_ssize_t i = start; i < end; i++) { + Py_UCS4 code = PyUnicode_READ(kind, data, i); + unsigned char combining = _getrecord_ex(code)->combining; + counts[combining]++; + } + + for (size_t i = 0; i < Py_ARRAY_LENGTH(counts); i++) { + Py_ssize_t count = counts[i]; + counts[i] = total; + total += count; + } + + /* Reuse counts[] as the next output slot for each CCC. */ + for (Py_ssize_t i = start; i < end; i++) { + Py_UCS4 code = PyUnicode_READ(kind, data, i); + unsigned char combining = _getrecord_ex(code)->combining; + sortbuf[counts[combining]++] = code; + } + for (Py_ssize_t i = 0; i < run_length; i++) { + PyUnicode_WRITE(kind, data, start + i, sortbuf[i]); + } +} + static PyObject* nfd_nfkd(PyObject *self, PyObject *input, int k) { PyObject *result; Py_UCS4 *output; Py_ssize_t i, o, osize; - int kind; - const void *data; + int input_kind, result_kind; + const void *input_data; + void *result_data; /* Longest decomposition in Unicode 3.2: U+FDFA */ Py_UCS4 stack[20]; Py_ssize_t space, isize; int index, prefix, count, stackptr; unsigned char prev, cur; + Py_UCS4 *sortbuf = NULL; + Py_ssize_t sortbuflen = 0; stackptr = 0; isize = PyUnicode_GET_LENGTH(input); @@ -584,11 +649,11 @@ nfd_nfkd(PyObject *self, PyObject *input, int k) return NULL; } i = o = 0; - kind = PyUnicode_KIND(input); - data = PyUnicode_DATA(input); + input_kind = PyUnicode_KIND(input); + input_data = PyUnicode_DATA(input); while (i < isize) { - stack[stackptr++] = PyUnicode_READ(kind, data, i++); + stack[stackptr++] = PyUnicode_READ(input_kind, input_data, i++); while(stackptr) { Py_UCS4 code = stack[--stackptr]; /* Hangul Decomposition adds three characters in @@ -656,34 +721,64 @@ nfd_nfkd(PyObject *self, PyObject *input, int k) if (!result) return NULL; - kind = PyUnicode_KIND(result); - data = PyUnicode_DATA(result); + result_kind = PyUnicode_KIND(result); + result_data = PyUnicode_DATA(result); - /* Sort canonically. */ + /* Sort each consecutive combining-character run canonically. */ i = 0; - prev = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining; - for (i++; i < PyUnicode_GET_LENGTH(result); i++) { - cur = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining; - if (prev == 0 || cur == 0 || prev <= cur) { - prev = cur; + while (i < o) { + Py_ssize_t run_length, run_start; + int needs_sort = 0; + + Py_UCS4 ch = PyUnicode_READ(result_kind, result_data, i); + prev = _getrecord_ex(ch)->combining; + if (prev == 0) { + i++; continue; } - /* Non-canonical order. Need to switch *i with previous. */ - o = i - 1; - while (1) { - Py_UCS4 tmp = PyUnicode_READ(kind, data, o+1); - PyUnicode_WRITE(kind, data, o+1, - PyUnicode_READ(kind, data, o)); - PyUnicode_WRITE(kind, data, o, tmp); - o--; - if (o < 0) - break; - prev = _getrecord_ex(PyUnicode_READ(kind, data, o))->combining; - if (prev == 0 || prev <= cur) + + run_start = i++; + while (i < o) { + Py_UCS4 ch = PyUnicode_READ(result_kind, result_data, i); + cur = _getrecord_ex(ch)->combining; + if (cur == 0) { break; + } + if (prev > cur) { + needs_sort = 1; + } + prev = cur; + i++; } - prev = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining; + if (!needs_sort) { + continue; + } + + run_length = i - run_start; + if (run_length < CANONICAL_ORDERING_COUNTING_SORT_THRESHOLD) { + canonical_ordering_sort_insertion(result_kind, result_data, + run_start, i); + continue; + } + + if (run_length > sortbuflen) { + Py_UCS4 *new_sortbuf = PyMem_Resize(sortbuf, + Py_UCS4, + run_length); + if (new_sortbuf == NULL) { + PyErr_NoMemory(); + PyMem_Free(sortbuf); + Py_DECREF(result); + return NULL; + } + sortbuf = new_sortbuf; + sortbuflen = run_length; + } + + canonical_ordering_sort_counting(result_kind, result_data, + run_start, i, sortbuf); } + PyMem_Free(sortbuf); return result; } @@ -911,6 +1006,7 @@ is_normalized_quickcheck(PyObject *self, PyObject *input, bool nfc, bool k, } /*[clinic input] +@permit_long_summary unicodedata.UCD.is_normalized self: self @@ -926,7 +1022,7 @@ Valid values for form are 'NFC', 'NFKC', 'NFD', and 'NFKD'. static PyObject * unicodedata_UCD_is_normalized_impl(PyObject *self, PyObject *form, PyObject *input) -/*[clinic end generated code: output=11e5a3694e723ca5 input=a544f14cea79e508]*/ +/*[clinic end generated code: output=11e5a3694e723ca5 input=de66aa679265300b]*/ { if (PyUnicode_GET_LENGTH(input) == 0) { /* special case empty input strings. */ @@ -1543,32 +1639,17 @@ capi_getcode(const char* name, int namelen, Py_UCS4* code, return _check_alias_and_seq(code, with_named_seq); } -static void -unicodedata_destroy_capi(PyObject *capsule) -{ - void *capi = PyCapsule_GetPointer(capsule, PyUnicodeData_CAPSULE_NAME); - PyMem_Free(capi); -} - static PyObject * unicodedata_create_capi(void) { - _PyUnicode_Name_CAPI *capi = PyMem_Malloc(sizeof(_PyUnicode_Name_CAPI)); - if (capi == NULL) { - PyErr_NoMemory(); - return NULL; - } - capi->getname = capi_getucname; - capi->getcode = capi_getcode; - - PyObject *capsule = PyCapsule_New(capi, - PyUnicodeData_CAPSULE_NAME, - unicodedata_destroy_capi); - if (capsule == NULL) { - PyMem_Free(capi); - } - return capsule; -}; + // Statically allocated so that any cached pointers stay valid after unicodedata + // is removed from sys.modules and the capsule is gc'd (gh-149449). + static _PyUnicode_Name_CAPI capi = { + .getname = capi_getucname, + .getcode = capi_getcode, + }; + return PyCapsule_New(&capi, PyUnicodeData_CAPSULE_NAME, NULL); +} /* -------------------------------------------------------------------- */ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 9c5820fbe97..0a6732835eb 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -858,7 +858,7 @@ save_unconsumed_input(compobject *self, Py_buffer *data, int err) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary zlib.Decompress.decompress cls: defining_class @@ -872,15 +872,15 @@ zlib.Decompress.decompress Return a bytes object containing the decompressed version of the data. -After calling this function, some of the input data may still be stored in -internal buffers for later processing. +After calling this function, some of the input data may still be +stored in internal buffers for later processing. Call the flush() method to clear these buffers. [clinic start generated code]*/ static PyObject * zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=b024a93c2c922d57 input=77de124bd2a2ecc0]*/ +/*[clinic end generated code: output=b024a93c2c922d57 input=9035027c9e4be7fd]*/ { int err = Z_OK; Py_ssize_t ibuflen; @@ -1675,7 +1675,6 @@ decompress(ZlibDecompressor *self, uint8_t *data, } /*[clinic input] -@permit_long_docstring_body zlib._ZlibDecompressor.decompress data: Py_buffer @@ -1683,25 +1682,26 @@ zlib._ZlibDecompressor.decompress Decompress *data*, returning uncompressed data as bytes. -If *max_length* is nonnegative, returns at most *max_length* bytes of -decompressed data. If this limit is reached and further output can be -produced, *self.needs_input* will be set to ``False``. In this case, the next -call to *decompress()* may provide *data* as b'' to obtain more of the output. +If *max_length* is nonnegative, returns at most *max_length* bytes +of decompressed data. If this limit is reached and further output +can be produced, *self.needs_input* will be set to ``False``. In +this case, the next call to *decompress()* may provide *data* as b'' +to obtain more of the output. -If all of the input data was decompressed and returned (either because this -was less than *max_length* bytes, or because *max_length* was negative), -*self.needs_input* will be set to True. +If all of the input data was decompressed and returned (either +because this was less than *max_length* bytes, or because +*max_length* was negative), *self.needs_input* will be set to True. -Attempting to decompress data after the end of stream is reached raises an -EOFError. Any data found after the end of the stream is ignored and saved in -the unused_data attribute. +Attempting to decompress data after the end of stream is reached +raises an EOFError. Any data found after the end of the stream is +ignored and saved in the unused_data attribute. [clinic start generated code]*/ static PyObject * zlib__ZlibDecompressor_decompress_impl(ZlibDecompressor *self, Py_buffer *data, Py_ssize_t max_length) -/*[clinic end generated code: output=ac00dcf73e843e99 input=c9278e791be1152b]*/ +/*[clinic end generated code: output=ac00dcf73e843e99 input=d7862eade3f29d56]*/ { PyObject *result = NULL; diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index e698d260795..696ddad8efa 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -1620,6 +1620,7 @@ bytearray_take_bytes_impl(PyByteArrayObject *self, PyObject *n) /*[clinic input] +@permit_long_summary @critical_section bytearray.translate @@ -1630,14 +1631,15 @@ bytearray.translate Return a copy with each character mapped by the given translation table. -All characters occurring in the optional argument delete are removed. -The remaining characters are mapped through the given translation table. +All characters occurring in the optional argument delete are +removed. The remaining characters are mapped through the given +translation table. [clinic start generated code]*/ static PyObject * bytearray_translate_impl(PyByteArrayObject *self, PyObject *table, PyObject *deletechars) -/*[clinic end generated code: output=b6a8f01c2a74e446 input=cd6fa93ca04e05bc]*/ +/*[clinic end generated code: output=b6a8f01c2a74e446 input=e30d2ae004365ed9]*/ { char *input, *output; const char *table_chars; @@ -1727,7 +1729,6 @@ bytearray_translate_impl(PyByteArrayObject *self, PyObject *table, /*[clinic input] @permit_long_summary -@permit_long_docstring_body @staticmethod bytearray.maketrans @@ -1737,15 +1738,15 @@ bytearray.maketrans Return a translation table usable for the bytes or bytearray translate method. -The returned table will be one where each byte in frm is mapped to the byte at -the same position in to. +The returned table will be one where each byte in frm is mapped to +the byte at the same position in to. The bytes objects frm and to must be of the same length. [clinic start generated code]*/ static PyObject * bytearray_maketrans_impl(Py_buffer *frm, Py_buffer *to) -/*[clinic end generated code: output=1df267d99f56b15e input=1146b43a592eca13]*/ +/*[clinic end generated code: output=1df267d99f56b15e input=c2f5f6e7e6b0221d]*/ { return _Py_bytes_maketrans(frm, to); } @@ -1785,8 +1786,8 @@ bytearray.split sep: object = None The delimiter according which to split the bytearray. - None (the default value) means split on ASCII whitespace characters - (space, tab, return, newline, formfeed, vertical tab). + None (the default value) means split on ASCII whitespace + characters (space, tab, return, newline, formfeed, vertical tab). maxsplit: Py_ssize_t = -1 Maximum number of splits to do. -1 (the default value) means no limit. @@ -1797,7 +1798,7 @@ Return a list of the sections in the bytearray, using sep as the delimiter. static PyObject * bytearray_split_impl(PyByteArrayObject *self, PyObject *sep, Py_ssize_t maxsplit) -/*[clinic end generated code: output=833e2cf385d9a04d input=dd9f6e2910cc3a34]*/ +/*[clinic end generated code: output=833e2cf385d9a04d input=45605178023b52ac]*/ { PyObject *list = NULL; @@ -1829,7 +1830,6 @@ bytearray_split_impl(PyByteArrayObject *self, PyObject *sep, } /*[clinic input] -@permit_long_docstring_body @critical_section bytearray.partition @@ -1838,17 +1838,18 @@ bytearray.partition Partition the bytearray into three parts using the given separator. -This will search for the separator sep in the bytearray. If the separator is -found, returns a 3-tuple containing the part before the separator, the -separator itself, and the part after it as new bytearray objects. +This will search for the separator sep in the bytearray. If the +separator is found, returns a 3-tuple containing the part before the +separator, the separator itself, and the part after it as new +bytearray objects. -If the separator is not found, returns a 3-tuple containing the copy of the -original bytearray object and two empty bytearray objects. +If the separator is not found, returns a 3-tuple containing the copy +of the original bytearray object and two empty bytearray objects. [clinic start generated code]*/ static PyObject * bytearray_partition_impl(PyByteArrayObject *self, PyObject *sep) -/*[clinic end generated code: output=b5fa1e03f10cfccb input=b87276af883f39d9]*/ +/*[clinic end generated code: output=b5fa1e03f10cfccb input=d76673ed03acf5dd]*/ { PyObject *bytesep, *result; @@ -1868,7 +1869,6 @@ bytearray_partition_impl(PyByteArrayObject *self, PyObject *sep) } /*[clinic input] -@permit_long_docstring_body @critical_section bytearray.rpartition @@ -1877,18 +1877,19 @@ bytearray.rpartition Partition the bytearray into three parts using the given separator. -This will search for the separator sep in the bytearray, starting at the end. -If the separator is found, returns a 3-tuple containing the part before the -separator, the separator itself, and the part after it as new bytearray -objects. +This will search for the separator sep in the bytearray, starting at +the end. If the separator is found, returns a 3-tuple containing +the part before the separator, the separator itself, and the part +after it as new bytearray objects. -If the separator is not found, returns a 3-tuple containing two empty bytearray -objects and the copy of the original bytearray object. +If the separator is not found, returns a 3-tuple containing two +empty bytearray objects and the copy of the original bytearray +object. [clinic start generated code]*/ static PyObject * bytearray_rpartition_impl(PyByteArrayObject *self, PyObject *sep) -/*[clinic end generated code: output=0186ce7b1ef61289 input=5bdcfc4c333bcfab]*/ +/*[clinic end generated code: output=0186ce7b1ef61289 input=b9216a2074174a36]*/ { PyObject *bytesep, *result; @@ -1909,19 +1910,19 @@ bytearray_rpartition_impl(PyByteArrayObject *self, PyObject *sep) /*[clinic input] @permit_long_summary -@permit_long_docstring_body @critical_section bytearray.rsplit = bytearray.split Return a list of the sections in the bytearray, using sep as the delimiter. -Splitting is done starting at the end of the bytearray and working to the front. +Splitting is done starting at the end of the bytearray and working +to the front. [clinic start generated code]*/ static PyObject * bytearray_rsplit_impl(PyByteArrayObject *self, PyObject *sep, Py_ssize_t maxsplit) -/*[clinic end generated code: output=a55e0b5a03cb6190 input=60e9abf305128ff4]*/ +/*[clinic end generated code: output=a55e0b5a03cb6190 input=e201671c9a0c19ee]*/ { PyObject *list = NULL; @@ -2392,7 +2393,6 @@ bytearray_strip_impl_helper(PyByteArrayObject* self, PyObject* bytes, int stript } /*[clinic input] -@permit_long_docstring_body @critical_section bytearray.strip @@ -2401,12 +2401,13 @@ bytearray.strip Strip leading and trailing bytes contained in the argument. -If the argument is omitted or None, strip leading and trailing ASCII whitespace. +If the argument is omitted or None, strip leading and trailing ASCII +whitespace. [clinic start generated code]*/ static PyObject * bytearray_strip_impl(PyByteArrayObject *self, PyObject *bytes) -/*[clinic end generated code: output=760412661a34ad5a input=6acaf88b2ec9daa7]*/ +/*[clinic end generated code: output=760412661a34ad5a input=f4ec5fa609df7d14]*/ { return bytearray_strip_impl_helper(self, bytes, BOTHSTRIP); } @@ -2506,11 +2507,11 @@ bytearray.decode encoding: str(c_default="NULL") = 'utf-8' The encoding with which to decode the bytearray. errors: str(c_default="NULL") = 'strict' - The error handling scheme to use for the handling of decoding errors. - The default is 'strict' meaning that decoding errors raise a - UnicodeDecodeError. Other possible values are 'ignore' and 'replace' - as well as any other name registered with codecs.register_error that - can handle UnicodeDecodeErrors. + The error handling scheme to use for the handling of decoding + errors. The default is 'strict' meaning that decoding errors + raise a UnicodeDecodeError. Other possible values are 'ignore' + and 'replace' as well as any other name registered with + codecs.register_error that can handle UnicodeDecodeErrors. Decode the bytearray using the codec registered for encoding. [clinic start generated code]*/ @@ -2518,7 +2519,7 @@ Decode the bytearray using the codec registered for encoding. static PyObject * bytearray_decode_impl(PyByteArrayObject *self, const char *encoding, const char *errors) -/*[clinic end generated code: output=f57d43f4a00b42c5 input=86c303ee376b8453]*/ +/*[clinic end generated code: output=f57d43f4a00b42c5 input=e51ce9b82b51e2ca]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -2550,14 +2551,15 @@ bytearray.join Concatenate any number of bytes/bytearray objects. -The bytearray whose method is called is inserted in between each pair. +The bytearray whose method is called is inserted in between each +pair. The result is returned as a new bytearray object. [clinic start generated code]*/ static PyObject * bytearray_join_impl(PyByteArrayObject *self, PyObject *iterable_of_bytes) -/*[clinic end generated code: output=0ced382b5846a7ee input=49627e07ca31ca26]*/ +/*[clinic end generated code: output=0ced382b5846a7ee input=0a31db349efcd7fa]*/ { PyObject *ret; self->ob_exports++; // this protects `self` from being cleared/resized if `iterable_of_bytes` is a custom iterator @@ -2588,7 +2590,6 @@ bytearray_rjust(PyObject *self, PyObject *const *args, Py_ssize_t nargs) /*[clinic input] @permit_long_summary -@permit_long_docstring_body @critical_section bytearray.splitlines @@ -2596,13 +2597,13 @@ bytearray.splitlines Return a list of the lines in the bytearray, breaking at line boundaries. -Line breaks are not included in the resulting list unless keepends is given and -true. +Line breaks are not included in the resulting list unless keepends +is given and true. [clinic start generated code]*/ static PyObject * bytearray_splitlines_impl(PyByteArrayObject *self, int keepends) -/*[clinic end generated code: output=4223c94b895f6ad9 input=21bc3f02bf1be832]*/ +/*[clinic end generated code: output=4223c94b895f6ad9 input=cc2bb740eed19f27]*/ { return stringlib_splitlines( (PyObject*) self, PyByteArray_AS_STRING(self), @@ -2620,12 +2621,13 @@ bytearray.fromhex Create a bytearray object from a string of hexadecimal numbers. Spaces between two numbers are accepted. -Example: bytearray.fromhex('B9 01EF') -> bytearray(b'\\xb9\\x01\\xef') +Example: + bytearray.fromhex('B9 01EF') -> bytearray(b'\\xb9\\x01\\xef') [clinic start generated code]*/ static PyObject * bytearray_fromhex_impl(PyTypeObject *type, PyObject *string) -/*[clinic end generated code: output=8f0f0b6d30fb3ba0 input=7e314e5b2d7ab484]*/ +/*[clinic end generated code: output=8f0f0b6d30fb3ba0 input=2243a8b0b9e66cd5]*/ { PyObject *result = _PyBytes_FromHex(string, type == &PyByteArray_Type); if (type != &PyByteArray_Type && result != NULL) { @@ -2641,8 +2643,8 @@ bytearray.hex sep: object = NULL An optional single character or byte to separate hex bytes. bytes_per_sep: Py_ssize_t = 1 - How many bytes between separators. Positive values count from the - right, negative values count from the left. + How many bytes between separators. Positive values count from + the right, negative values count from the left. Create a string of hexadecimal numbers from a bytearray object. @@ -2661,7 +2663,7 @@ Create a string of hexadecimal numbers from a bytearray object. static PyObject * bytearray_hex_impl(PyByteArrayObject *self, PyObject *sep, Py_ssize_t bytes_per_sep) -/*[clinic end generated code: output=c9563921aff1262b input=d2b23ef057cfcad5]*/ +/*[clinic end generated code: output=c9563921aff1262b input=9ed746203691e894]*/ { char* argbuf = PyByteArray_AS_STRING(self); Py_ssize_t arglen = PyByteArray_GET_SIZE(self); diff --git a/Objects/bytes_methods.c b/Objects/bytes_methods.c index 56a461d0dd0..414afeb7bb0 100644 --- a/Objects/bytes_methods.c +++ b/Objects/bytes_methods.c @@ -277,8 +277,8 @@ _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len) PyDoc_STRVAR_shared(_Py_title__doc__, "B.title() -> copy of B\n\ \n\ -Return a titlecased version of B, i.e. ASCII words start with uppercase\n\ -characters, all remaining cased characters have lowercase."); +Return a titlecased version of B, i.e. ASCII words start with\n\ +uppercase characters, all remaining cased characters have lowercase."); void _Py_bytes_title(char *result, const char *s, Py_ssize_t len) diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index cd8417e2583..f63185e1428 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -11,6 +11,7 @@ #include "pycore_global_objects.h"// _Py_GET_GLOBAL_OBJECT() #include "pycore_initconfig.h" // _PyStatus_OK() #include "pycore_long.h" // _PyLong_DigitValue +#include "pycore_list.h" // _PyList_GetItemRef #include "pycore_object.h" // _PyObject_GC_TRACK #include "pycore_pymem.h" // PYMEM_CLEANBYTE #include "pycore_strhex.h" // _Py_strhex_with_sep() @@ -1848,12 +1849,13 @@ bytes___bytes___impl(PyBytesObject *self) #define BOTHSTRIP 2 /*[clinic input] +@permit_long_summary bytes.split sep: object = None The delimiter according which to split the bytes. - None (the default value) means split on ASCII whitespace characters - (space, tab, return, newline, formfeed, vertical tab). + None (the default value) means split on ASCII whitespace + characters (space, tab, return, newline, formfeed, vertical tab). maxsplit: Py_ssize_t = -1 Maximum number of splits to do. -1 (the default value) means no limit. @@ -1863,7 +1865,7 @@ Return a list of the sections in the bytes, using sep as the delimiter. static PyObject * bytes_split_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit) -/*[clinic end generated code: output=52126b5844c1d8ef input=8b809b39074abbfa]*/ +/*[clinic end generated code: output=52126b5844c1d8ef input=330ff95d92544b05]*/ { Py_ssize_t len = PyBytes_GET_SIZE(self), n; const char *s = PyBytes_AS_STRING(self), *sub; @@ -1885,7 +1887,6 @@ bytes_split_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit) } /*[clinic input] -@permit_long_docstring_body bytes.partition sep: Py_buffer @@ -1893,17 +1894,17 @@ bytes.partition Partition the bytes into three parts using the given separator. -This will search for the separator sep in the bytes. If the separator is found, -returns a 3-tuple containing the part before the separator, the separator -itself, and the part after it. +This will search for the separator sep in the bytes. If the +separator is found, returns a 3-tuple containing the part before the +separator, the separator itself, and the part after it. -If the separator is not found, returns a 3-tuple containing the original bytes -object and two empty bytes objects. +If the separator is not found, returns a 3-tuple containing the +original bytes object and two empty bytes objects. [clinic start generated code]*/ static PyObject * bytes_partition_impl(PyBytesObject *self, Py_buffer *sep) -/*[clinic end generated code: output=f532b392a17ff695 input=31c55a0cebaf7722]*/ +/*[clinic end generated code: output=f532b392a17ff695 input=2e6e551ea4f8b95a]*/ { return stringlib_partition( (PyObject*) self, @@ -1913,7 +1914,6 @@ bytes_partition_impl(PyBytesObject *self, Py_buffer *sep) } /*[clinic input] -@permit_long_docstring_body bytes.rpartition sep: Py_buffer @@ -1921,17 +1921,18 @@ bytes.rpartition Partition the bytes into three parts using the given separator. -This will search for the separator sep in the bytes, starting at the end. If -the separator is found, returns a 3-tuple containing the part before the -separator, the separator itself, and the part after it. +This will search for the separator sep in the bytes, starting at the +end. If the separator is found, returns a 3-tuple containing the +part before the separator, the separator itself, and the part after +it. -If the separator is not found, returns a 3-tuple containing two empty bytes -objects and the original bytes object. +If the separator is not found, returns a 3-tuple containing two +empty bytes objects and the original bytes object. [clinic start generated code]*/ static PyObject * bytes_rpartition_impl(PyBytesObject *self, Py_buffer *sep) -/*[clinic end generated code: output=191b114cbb028e50 input=9ea5a3ab0b02bf52]*/ +/*[clinic end generated code: output=191b114cbb028e50 input=f7d24f722a5470a4]*/ { return stringlib_rpartition( (PyObject*) self, @@ -1941,17 +1942,18 @@ bytes_rpartition_impl(PyBytesObject *self, Py_buffer *sep) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary bytes.rsplit = bytes.split Return a list of the sections in the bytes, using sep as the delimiter. -Splitting is done starting at the end of the bytes and working to the front. +Splitting is done starting at the end of the bytes and working to +the front. [clinic start generated code]*/ static PyObject * bytes_rsplit_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit) -/*[clinic end generated code: output=ba698d9ea01e1c8f input=55b6eaea1f3d7046]*/ +/*[clinic end generated code: output=ba698d9ea01e1c8f input=ba9bee56285f43e4]*/ { Py_ssize_t len = PyBytes_GET_SIZE(self), n; const char *s = PyBytes_AS_STRING(self), *sub; @@ -2171,7 +2173,6 @@ do_argstrip(PyBytesObject *self, int striptype, PyObject *bytes) } /*[clinic input] -@permit_long_docstring_body bytes.strip bytes: object = None @@ -2179,12 +2180,13 @@ bytes.strip Strip leading and trailing bytes contained in the argument. -If the argument is omitted or None, strip leading and trailing ASCII whitespace. +If the argument is omitted or None, strip leading and trailing ASCII +whitespace. [clinic start generated code]*/ static PyObject * bytes_strip_impl(PyBytesObject *self, PyObject *bytes) -/*[clinic end generated code: output=c7c228d3bd104a1b input=71904cd278c0ee03]*/ +/*[clinic end generated code: output=c7c228d3bd104a1b input=9ffea5f752032bd0]*/ { return do_argstrip(self, BOTHSTRIP, bytes); } @@ -2244,6 +2246,7 @@ bytes_count_impl(PyBytesObject *self, PyObject *sub, Py_ssize_t start, /*[clinic input] +@permit_long_summary bytes.translate table: object @@ -2253,14 +2256,15 @@ bytes.translate Return a copy with each character mapped by the given translation table. -All characters occurring in the optional argument delete are removed. -The remaining characters are mapped through the given translation table. +All characters occurring in the optional argument delete are +removed. The remaining characters are mapped through the given +translation table. [clinic start generated code]*/ static PyObject * bytes_translate_impl(PyBytesObject *self, PyObject *table, PyObject *deletechars) -/*[clinic end generated code: output=43be3437f1956211 input=0ecdf159f654233c]*/ +/*[clinic end generated code: output=43be3437f1956211 input=bddcdef0a87895d2]*/ { const char *input; char *output; @@ -2378,7 +2382,6 @@ bytes_translate_impl(PyBytesObject *self, PyObject *table, /*[clinic input] @permit_long_summary -@permit_long_docstring_body @staticmethod bytes.maketrans @@ -2388,15 +2391,15 @@ bytes.maketrans Return a translation table usable for the bytes or bytearray translate method. -The returned table will be one where each byte in frm is mapped to the byte at -the same position in to. +The returned table will be one where each byte in frm is mapped to +the byte at the same position in to. The bytes objects frm and to must be of the same length. [clinic start generated code]*/ static PyObject * bytes_maketrans_impl(Py_buffer *frm, Py_buffer *to) -/*[clinic end generated code: output=a36f6399d4b77f6f input=a06b75f44d933fb3]*/ +/*[clinic end generated code: output=a36f6399d4b77f6f input=3a577e5badfea8f7]*/ { return _Py_bytes_maketrans(frm, to); } @@ -2431,6 +2434,7 @@ bytes_replace_impl(PyBytesObject *self, Py_buffer *old, Py_buffer *new, /** End DALKE **/ /*[clinic input] +@permit_long_summary bytes.removeprefix as bytes_removeprefix prefix: Py_buffer @@ -2438,13 +2442,14 @@ bytes.removeprefix as bytes_removeprefix Return a bytes object with the given prefix string removed if present. -If the bytes starts with the prefix string, return bytes[len(prefix):]. -Otherwise, return a copy of the original bytes. +If the bytes starts with the prefix string, return +bytes[len(prefix):]. Otherwise, return a copy of the original +bytes. [clinic start generated code]*/ static PyObject * bytes_removeprefix_impl(PyBytesObject *self, Py_buffer *prefix) -/*[clinic end generated code: output=f006865331a06ab6 input=0c93bac817a8502c]*/ +/*[clinic end generated code: output=f006865331a06ab6 input=3a2672bcee61d7a7]*/ { const char *self_start = PyBytes_AS_STRING(self); Py_ssize_t self_len = PyBytes_GET_SIZE(self); @@ -2467,6 +2472,7 @@ bytes_removeprefix_impl(PyBytesObject *self, Py_buffer *prefix) } /*[clinic input] +@permit_long_summary bytes.removesuffix as bytes_removesuffix suffix: Py_buffer @@ -2474,14 +2480,14 @@ bytes.removesuffix as bytes_removesuffix Return a bytes object with the given suffix string removed if present. -If the bytes ends with the suffix string and that suffix is not empty, -return bytes[:-len(prefix)]. Otherwise, return a copy of the original -bytes. +If the bytes ends with the suffix string and that suffix is not +empty, return bytes[:-len(prefix)]. Otherwise, return a copy of the +original bytes. [clinic start generated code]*/ static PyObject * bytes_removesuffix_impl(PyBytesObject *self, Py_buffer *suffix) -/*[clinic end generated code: output=d887d308e3242eeb input=9f4e1da8c637bbf1]*/ +/*[clinic end generated code: output=d887d308e3242eeb input=04df5f18a36f69d7]*/ { const char *self_start = PyBytes_AS_STRING(self); Py_ssize_t self_len = PyBytes_GET_SIZE(self); @@ -2561,11 +2567,11 @@ bytes.decode encoding: str(c_default="NULL") = 'utf-8' The encoding with which to decode the bytes. errors: str(c_default="NULL") = 'strict' - The error handling scheme to use for the handling of decoding errors. - The default is 'strict' meaning that decoding errors raise a - UnicodeDecodeError. Other possible values are 'ignore' and 'replace' - as well as any other name registered with codecs.register_error that - can handle UnicodeDecodeErrors. + The error handling scheme to use for the handling of decoding + errors. The default is 'strict' meaning that decoding errors + raise a UnicodeDecodeError. Other possible values are 'ignore' + and 'replace' as well as any other name registered with + codecs.register_error that can handle UnicodeDecodeErrors. Decode the bytes using the codec registered for encoding. [clinic start generated code]*/ @@ -2573,27 +2579,27 @@ Decode the bytes using the codec registered for encoding. static PyObject * bytes_decode_impl(PyBytesObject *self, const char *encoding, const char *errors) -/*[clinic end generated code: output=5649a53dde27b314 input=958174769d2a40ca]*/ +/*[clinic end generated code: output=5649a53dde27b314 input=94e9b8524f1d7f37]*/ { return PyUnicode_FromEncodedObject((PyObject*)self, encoding, errors); } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary bytes.splitlines keepends: bool = False Return a list of the lines in the bytes, breaking at line boundaries. -Line breaks are not included in the resulting list unless keepends is given and -true. +Line breaks are not included in the resulting list unless keepends +is given and true. [clinic start generated code]*/ static PyObject * bytes_splitlines_impl(PyBytesObject *self, int keepends) -/*[clinic end generated code: output=3484149a5d880ffb input=d17968d2a355fe55]*/ +/*[clinic end generated code: output=3484149a5d880ffb input=8734672f34430514]*/ { return stringlib_splitlines( (PyObject*) self, PyBytes_AS_STRING(self), @@ -2744,8 +2750,8 @@ bytes.hex sep: object = NULL An optional single character or byte to separate hex bytes. bytes_per_sep: Py_ssize_t = 1 - How many bytes between separators. Positive values count from the - right, negative values count from the left. + How many bytes between separators. Positive values count from + the right, negative values count from the left. Create a string of hexadecimal numbers from a bytes object. @@ -2763,7 +2769,7 @@ Create a string of hexadecimal numbers from a bytes object. static PyObject * bytes_hex_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t bytes_per_sep) -/*[clinic end generated code: output=588821f02cb9d8f5 input=bd8eceb755d8230f]*/ +/*[clinic end generated code: output=588821f02cb9d8f5 input=b8d40cf203d172dc]*/ { const char *argbuf = PyBytes_AS_STRING(self); Py_ssize_t arglen = PyBytes_GET_SIZE(self); @@ -2991,8 +2997,10 @@ _PyBytes_FromList(PyObject *x) size = _PyBytesWriter_GetAllocated(writer); for (Py_ssize_t i = 0; i < PyList_GET_SIZE(x); i++) { - PyObject *item = PyList_GET_ITEM(x, i); - Py_INCREF(item); + PyObject *item = _PyList_GetItemRef((PyListObject *)x, i); + if (item == NULL) { + goto error; + } Py_ssize_t value = PyNumber_AsSsize_t(item, NULL); Py_DECREF(item); if (value == -1 && PyErr_Occurred()) diff --git a/Objects/clinic/bytearrayobject.c.h b/Objects/clinic/bytearrayobject.c.h index 64603adcc11..41ce82c05c5 100644 --- a/Objects/clinic/bytearrayobject.c.h +++ b/Objects/clinic/bytearrayobject.c.h @@ -679,8 +679,9 @@ PyDoc_STRVAR(bytearray_translate__doc__, " table\n" " Translation table, which must be a bytes object of length 256.\n" "\n" -"All characters occurring in the optional argument delete are removed.\n" -"The remaining characters are mapped through the given translation table."); +"All characters occurring in the optional argument delete are\n" +"removed. The remaining characters are mapped through the given\n" +"translation table."); #define BYTEARRAY_TRANSLATE_METHODDEF \ {"translate", _PyCFunction_CAST(bytearray_translate), METH_FASTCALL|METH_KEYWORDS, bytearray_translate__doc__}, @@ -750,8 +751,8 @@ PyDoc_STRVAR(bytearray_maketrans__doc__, "\n" "Return a translation table usable for the bytes or bytearray translate method.\n" "\n" -"The returned table will be one where each byte in frm is mapped to the byte at\n" -"the same position in to.\n" +"The returned table will be one where each byte in frm is mapped to\n" +"the byte at the same position in to.\n" "\n" "The bytes objects frm and to must be of the same length."); @@ -901,8 +902,8 @@ PyDoc_STRVAR(bytearray_split__doc__, "\n" " sep\n" " The delimiter according which to split the bytearray.\n" -" None (the default value) means split on ASCII whitespace characters\n" -" (space, tab, return, newline, formfeed, vertical tab).\n" +" None (the default value) means split on ASCII whitespace\n" +" characters (space, tab, return, newline, formfeed, vertical tab).\n" " maxsplit\n" " Maximum number of splits to do.\n" " -1 (the default value) means no limit."); @@ -991,12 +992,13 @@ PyDoc_STRVAR(bytearray_partition__doc__, "\n" "Partition the bytearray into three parts using the given separator.\n" "\n" -"This will search for the separator sep in the bytearray. If the separator is\n" -"found, returns a 3-tuple containing the part before the separator, the\n" -"separator itself, and the part after it as new bytearray objects.\n" +"This will search for the separator sep in the bytearray. If the\n" +"separator is found, returns a 3-tuple containing the part before the\n" +"separator, the separator itself, and the part after it as new\n" +"bytearray objects.\n" "\n" -"If the separator is not found, returns a 3-tuple containing the copy of the\n" -"original bytearray object and two empty bytearray objects."); +"If the separator is not found, returns a 3-tuple containing the copy\n" +"of the original bytearray object and two empty bytearray objects."); #define BYTEARRAY_PARTITION_METHODDEF \ {"partition", (PyCFunction)bytearray_partition, METH_O, bytearray_partition__doc__}, @@ -1022,13 +1024,14 @@ PyDoc_STRVAR(bytearray_rpartition__doc__, "\n" "Partition the bytearray into three parts using the given separator.\n" "\n" -"This will search for the separator sep in the bytearray, starting at the end.\n" -"If the separator is found, returns a 3-tuple containing the part before the\n" -"separator, the separator itself, and the part after it as new bytearray\n" -"objects.\n" +"This will search for the separator sep in the bytearray, starting at\n" +"the end. If the separator is found, returns a 3-tuple containing\n" +"the part before the separator, the separator itself, and the part\n" +"after it as new bytearray objects.\n" "\n" -"If the separator is not found, returns a 3-tuple containing two empty bytearray\n" -"objects and the copy of the original bytearray object."); +"If the separator is not found, returns a 3-tuple containing two\n" +"empty bytearray objects and the copy of the original bytearray\n" +"object."); #define BYTEARRAY_RPARTITION_METHODDEF \ {"rpartition", (PyCFunction)bytearray_rpartition, METH_O, bytearray_rpartition__doc__}, @@ -1056,13 +1059,14 @@ PyDoc_STRVAR(bytearray_rsplit__doc__, "\n" " sep\n" " The delimiter according which to split the bytearray.\n" -" None (the default value) means split on ASCII whitespace characters\n" -" (space, tab, return, newline, formfeed, vertical tab).\n" +" None (the default value) means split on ASCII whitespace\n" +" characters (space, tab, return, newline, formfeed, vertical tab).\n" " maxsplit\n" " Maximum number of splits to do.\n" " -1 (the default value) means no limit.\n" "\n" -"Splitting is done starting at the end of the bytearray and working to the front."); +"Splitting is done starting at the end of the bytearray and working\n" +"to the front."); #define BYTEARRAY_RSPLIT_METHODDEF \ {"rsplit", _PyCFunction_CAST(bytearray_rsplit), METH_FASTCALL|METH_KEYWORDS, bytearray_rsplit__doc__}, @@ -1364,7 +1368,8 @@ PyDoc_STRVAR(bytearray_strip__doc__, "\n" "Strip leading and trailing bytes contained in the argument.\n" "\n" -"If the argument is omitted or None, strip leading and trailing ASCII whitespace."); +"If the argument is omitted or None, strip leading and trailing ASCII\n" +"whitespace."); #define BYTEARRAY_STRIP_METHODDEF \ {"strip", _PyCFunction_CAST(bytearray_strip), METH_FASTCALL, bytearray_strip__doc__}, @@ -1475,11 +1480,11 @@ PyDoc_STRVAR(bytearray_decode__doc__, " encoding\n" " The encoding with which to decode the bytearray.\n" " errors\n" -" The error handling scheme to use for the handling of decoding errors.\n" -" The default is \'strict\' meaning that decoding errors raise a\n" -" UnicodeDecodeError. Other possible values are \'ignore\' and \'replace\'\n" -" as well as any other name registered with codecs.register_error that\n" -" can handle UnicodeDecodeErrors."); +" The error handling scheme to use for the handling of decoding\n" +" errors. The default is \'strict\' meaning that decoding errors\n" +" raise a UnicodeDecodeError. Other possible values are \'ignore\'\n" +" and \'replace\' as well as any other name registered with\n" +" codecs.register_error that can handle UnicodeDecodeErrors."); #define BYTEARRAY_DECODE_METHODDEF \ {"decode", _PyCFunction_CAST(bytearray_decode), METH_FASTCALL|METH_KEYWORDS, bytearray_decode__doc__}, @@ -1578,7 +1583,8 @@ PyDoc_STRVAR(bytearray_join__doc__, "\n" "Concatenate any number of bytes/bytearray objects.\n" "\n" -"The bytearray whose method is called is inserted in between each pair.\n" +"The bytearray whose method is called is inserted in between each\n" +"pair.\n" "\n" "The result is returned as a new bytearray object."); @@ -1606,8 +1612,8 @@ PyDoc_STRVAR(bytearray_splitlines__doc__, "\n" "Return a list of the lines in the bytearray, breaking at line boundaries.\n" "\n" -"Line breaks are not included in the resulting list unless keepends is given and\n" -"true."); +"Line breaks are not included in the resulting list unless keepends\n" +"is given and true."); #define BYTEARRAY_SPLITLINES_METHODDEF \ {"splitlines", _PyCFunction_CAST(bytearray_splitlines), METH_FASTCALL|METH_KEYWORDS, bytearray_splitlines__doc__}, @@ -1678,7 +1684,8 @@ PyDoc_STRVAR(bytearray_fromhex__doc__, "Create a bytearray object from a string of hexadecimal numbers.\n" "\n" "Spaces between two numbers are accepted.\n" -"Example: bytearray.fromhex(\'B9 01EF\') -> bytearray(b\'\\\\xb9\\\\x01\\\\xef\')"); +"Example:\n" +" bytearray.fromhex(\'B9 01EF\') -> bytearray(b\'\\\\xb9\\\\x01\\\\xef\')"); #define BYTEARRAY_FROMHEX_METHODDEF \ {"fromhex", (PyCFunction)bytearray_fromhex, METH_O|METH_CLASS, bytearray_fromhex__doc__}, @@ -1705,8 +1712,8 @@ PyDoc_STRVAR(bytearray_hex__doc__, " sep\n" " An optional single character or byte to separate hex bytes.\n" " bytes_per_sep\n" -" How many bytes between separators. Positive values count from the\n" -" right, negative values count from the left.\n" +" How many bytes between separators. Positive values count from\n" +" the right, negative values count from the left.\n" "\n" "Example:\n" ">>> value = bytearray([0xb9, 0x01, 0xef])\n" @@ -1875,4 +1882,4 @@ bytearray_sizeof(PyObject *self, PyObject *Py_UNUSED(ignored)) { return bytearray_sizeof_impl((PyByteArrayObject *)self); } -/*[clinic end generated code: output=2cacb323147202b9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6dc315d35de3e670 input=a9049054013a1b77]*/ diff --git a/Objects/clinic/bytesobject.c.h b/Objects/clinic/bytesobject.c.h index 4ff696be91b..ee2b737f9e6 100644 --- a/Objects/clinic/bytesobject.c.h +++ b/Objects/clinic/bytesobject.c.h @@ -35,8 +35,8 @@ PyDoc_STRVAR(bytes_split__doc__, "\n" " sep\n" " The delimiter according which to split the bytes.\n" -" None (the default value) means split on ASCII whitespace characters\n" -" (space, tab, return, newline, formfeed, vertical tab).\n" +" None (the default value) means split on ASCII whitespace\n" +" characters (space, tab, return, newline, formfeed, vertical tab).\n" " maxsplit\n" " Maximum number of splits to do.\n" " -1 (the default value) means no limit."); @@ -122,12 +122,12 @@ PyDoc_STRVAR(bytes_partition__doc__, "\n" "Partition the bytes into three parts using the given separator.\n" "\n" -"This will search for the separator sep in the bytes. If the separator is found,\n" -"returns a 3-tuple containing the part before the separator, the separator\n" -"itself, and the part after it.\n" +"This will search for the separator sep in the bytes. If the\n" +"separator is found, returns a 3-tuple containing the part before the\n" +"separator, the separator itself, and the part after it.\n" "\n" -"If the separator is not found, returns a 3-tuple containing the original bytes\n" -"object and two empty bytes objects."); +"If the separator is not found, returns a 3-tuple containing the\n" +"original bytes object and two empty bytes objects."); #define BYTES_PARTITION_METHODDEF \ {"partition", (PyCFunction)bytes_partition, METH_O, bytes_partition__doc__}, @@ -161,12 +161,13 @@ PyDoc_STRVAR(bytes_rpartition__doc__, "\n" "Partition the bytes into three parts using the given separator.\n" "\n" -"This will search for the separator sep in the bytes, starting at the end. If\n" -"the separator is found, returns a 3-tuple containing the part before the\n" -"separator, the separator itself, and the part after it.\n" +"This will search for the separator sep in the bytes, starting at the\n" +"end. If the separator is found, returns a 3-tuple containing the\n" +"part before the separator, the separator itself, and the part after\n" +"it.\n" "\n" -"If the separator is not found, returns a 3-tuple containing two empty bytes\n" -"objects and the original bytes object."); +"If the separator is not found, returns a 3-tuple containing two\n" +"empty bytes objects and the original bytes object."); #define BYTES_RPARTITION_METHODDEF \ {"rpartition", (PyCFunction)bytes_rpartition, METH_O, bytes_rpartition__doc__}, @@ -202,13 +203,14 @@ PyDoc_STRVAR(bytes_rsplit__doc__, "\n" " sep\n" " The delimiter according which to split the bytes.\n" -" None (the default value) means split on ASCII whitespace characters\n" -" (space, tab, return, newline, formfeed, vertical tab).\n" +" None (the default value) means split on ASCII whitespace\n" +" characters (space, tab, return, newline, formfeed, vertical tab).\n" " maxsplit\n" " Maximum number of splits to do.\n" " -1 (the default value) means no limit.\n" "\n" -"Splitting is done starting at the end of the bytes and working to the front."); +"Splitting is done starting at the end of the bytes and working to\n" +"the front."); #define BYTES_RSPLIT_METHODDEF \ {"rsplit", _PyCFunction_CAST(bytes_rsplit), METH_FASTCALL|METH_KEYWORDS, bytes_rsplit__doc__}, @@ -523,7 +525,8 @@ PyDoc_STRVAR(bytes_strip__doc__, "\n" "Strip leading and trailing bytes contained in the argument.\n" "\n" -"If the argument is omitted or None, strip leading and trailing ASCII whitespace."); +"If the argument is omitted or None, strip leading and trailing ASCII\n" +"whitespace."); #define BYTES_STRIP_METHODDEF \ {"strip", _PyCFunction_CAST(bytes_strip), METH_FASTCALL, bytes_strip__doc__}, @@ -677,8 +680,9 @@ PyDoc_STRVAR(bytes_translate__doc__, " table\n" " Translation table, which must be a bytes object of length 256.\n" "\n" -"All characters occurring in the optional argument delete are removed.\n" -"The remaining characters are mapped through the given translation table."); +"All characters occurring in the optional argument delete are\n" +"removed. The remaining characters are mapped through the given\n" +"translation table."); #define BYTES_TRANSLATE_METHODDEF \ {"translate", _PyCFunction_CAST(bytes_translate), METH_FASTCALL|METH_KEYWORDS, bytes_translate__doc__}, @@ -746,8 +750,8 @@ PyDoc_STRVAR(bytes_maketrans__doc__, "\n" "Return a translation table usable for the bytes or bytearray translate method.\n" "\n" -"The returned table will be one where each byte in frm is mapped to the byte at\n" -"the same position in to.\n" +"The returned table will be one where each byte in frm is mapped to\n" +"the byte at the same position in to.\n" "\n" "The bytes objects frm and to must be of the same length."); @@ -893,8 +897,9 @@ PyDoc_STRVAR(bytes_removeprefix__doc__, "\n" "Return a bytes object with the given prefix string removed if present.\n" "\n" -"If the bytes starts with the prefix string, return bytes[len(prefix):].\n" -"Otherwise, return a copy of the original bytes."); +"If the bytes starts with the prefix string, return\n" +"bytes[len(prefix):]. Otherwise, return a copy of the original\n" +"bytes."); #define BYTES_REMOVEPREFIX_METHODDEF \ {"removeprefix", (PyCFunction)bytes_removeprefix, METH_O, bytes_removeprefix__doc__}, @@ -928,9 +933,9 @@ PyDoc_STRVAR(bytes_removesuffix__doc__, "\n" "Return a bytes object with the given suffix string removed if present.\n" "\n" -"If the bytes ends with the suffix string and that suffix is not empty,\n" -"return bytes[:-len(prefix)]. Otherwise, return a copy of the original\n" -"bytes."); +"If the bytes ends with the suffix string and that suffix is not\n" +"empty, return bytes[:-len(prefix)]. Otherwise, return a copy of the\n" +"original bytes."); #define BYTES_REMOVESUFFIX_METHODDEF \ {"removesuffix", (PyCFunction)bytes_removesuffix, METH_O, bytes_removesuffix__doc__}, @@ -1069,11 +1074,11 @@ PyDoc_STRVAR(bytes_decode__doc__, " encoding\n" " The encoding with which to decode the bytes.\n" " errors\n" -" The error handling scheme to use for the handling of decoding errors.\n" -" The default is \'strict\' meaning that decoding errors raise a\n" -" UnicodeDecodeError. Other possible values are \'ignore\' and \'replace\'\n" -" as well as any other name registered with codecs.register_error that\n" -" can handle UnicodeDecodeErrors."); +" The error handling scheme to use for the handling of decoding\n" +" errors. The default is \'strict\' meaning that decoding errors\n" +" raise a UnicodeDecodeError. Other possible values are \'ignore\'\n" +" and \'replace\' as well as any other name registered with\n" +" codecs.register_error that can handle UnicodeDecodeErrors."); #define BYTES_DECODE_METHODDEF \ {"decode", _PyCFunction_CAST(bytes_decode), METH_FASTCALL|METH_KEYWORDS, bytes_decode__doc__}, @@ -1170,8 +1175,8 @@ PyDoc_STRVAR(bytes_splitlines__doc__, "\n" "Return a list of the lines in the bytes, breaking at line boundaries.\n" "\n" -"Line breaks are not included in the resulting list unless keepends is given and\n" -"true."); +"Line breaks are not included in the resulting list unless keepends\n" +"is given and true."); #define BYTES_SPLITLINES_METHODDEF \ {"splitlines", _PyCFunction_CAST(bytes_splitlines), METH_FASTCALL|METH_KEYWORDS, bytes_splitlines__doc__}, @@ -1267,8 +1272,8 @@ PyDoc_STRVAR(bytes_hex__doc__, " sep\n" " An optional single character or byte to separate hex bytes.\n" " bytes_per_sep\n" -" How many bytes between separators. Positive values count from the\n" -" right, negative values count from the left.\n" +" How many bytes between separators. Positive values count from\n" +" the right, negative values count from the left.\n" "\n" "Example:\n" ">>> value = b\'\\xb9\\x01\\xef\'\n" @@ -1450,4 +1455,4 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=b252801ff04a89b3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c20458db7a2123db input=a9049054013a1b77]*/ diff --git a/Objects/clinic/codeobject.c.h b/Objects/clinic/codeobject.c.h index 0cd6e0b5662..88333e9d336 100644 --- a/Objects/clinic/codeobject.c.h +++ b/Objects/clinic/codeobject.c.h @@ -414,7 +414,8 @@ PyDoc_STRVAR(code__varname_from_oparg__doc__, "\n" "(internal-only) Return the local variable name for the given oparg.\n" "\n" -"WARNING: this method is for internal use only and may change or go away."); +"WARNING: this method is for internal use only and may change or go\n" +"away."); #define CODE__VARNAME_FROM_OPARG_METHODDEF \ {"_varname_from_oparg", _PyCFunction_CAST(code__varname_from_oparg), METH_FASTCALL|METH_KEYWORDS, code__varname_from_oparg__doc__}, @@ -470,4 +471,4 @@ code__varname_from_oparg(PyObject *self, PyObject *const *args, Py_ssize_t nargs exit: return return_value; } -/*[clinic end generated code: output=c5c6e40fc357defe input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5c22e29e430401b4 input=a9049054013a1b77]*/ diff --git a/Objects/clinic/exceptions.c.h b/Objects/clinic/exceptions.c.h index 9baac8b1cc6..5047a673e57 100644 --- a/Objects/clinic/exceptions.c.h +++ b/Objects/clinic/exceptions.c.h @@ -44,7 +44,7 @@ BaseException___setstate__(PyObject *self, PyObject *state) { PyObject *return_value = NULL; - Py_BEGIN_CRITICAL_SECTION(self); + Py_BEGIN_CRITICAL_SECTION(state); return_value = BaseException___setstate___impl((PyBaseExceptionObject *)self, state); Py_END_CRITICAL_SECTION(); @@ -380,4 +380,4 @@ BaseExceptionGroup_subgroup(PyObject *self, PyObject *matcher_value) return return_value; } -/*[clinic end generated code: output=fcf70b3b71f3d14a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e63b88d0443b4f92 input=a9049054013a1b77]*/ diff --git a/Objects/clinic/floatobject.c.h b/Objects/clinic/floatobject.c.h index c0ae9d3ff9b..8768555c909 100644 --- a/Objects/clinic/floatobject.c.h +++ b/Objects/clinic/floatobject.c.h @@ -291,8 +291,8 @@ PyDoc_STRVAR(float___getformat____doc__, "It exists mainly to be used in Python\'s test suite.\n" "\n" "This function returns whichever of \'IEEE, big-endian\' or \'IEEE,\n" -"little-endian\' best describes the format of floating-point numbers used by the\n" -"C type named by typestr."); +"little-endian\' best describes the format of floating-point numbers\n" +"used by the C type named by typestr."); #define FLOAT___GETFORMAT___METHODDEF \ {"__getformat__", (PyCFunction)float___getformat__, METH_O|METH_CLASS, float___getformat____doc__}, @@ -353,4 +353,4 @@ float___format__(PyObject *self, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=f0b2af257213c8b0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5d7b0bf9e47ff997 input=a9049054013a1b77]*/ diff --git a/Objects/clinic/listobject.c.h b/Objects/clinic/listobject.c.h index 26ba5b95433..f3821ef5f70 100644 --- a/Objects/clinic/listobject.c.h +++ b/Objects/clinic/listobject.c.h @@ -200,11 +200,11 @@ PyDoc_STRVAR(list_sort__doc__, "\n" "Sort the list in ascending order and return None.\n" "\n" -"The sort is in-place (i.e. the list itself is modified) and stable (i.e. the\n" -"order of two equal elements is maintained).\n" +"The sort is in-place (i.e. the list itself is modified) and stable\n" +"(i.e. the order of two equal elements is maintained).\n" "\n" -"If a key function is given, apply it once to each list item and sort them,\n" -"ascending or descending, according to their function values.\n" +"If a key function is given, apply it once to each list item and sort\n" +"them, ascending or descending, according to their function values.\n" "\n" "The reverse flag can be set to sort in descending order."); @@ -468,4 +468,4 @@ list___reversed__(PyObject *self, PyObject *Py_UNUSED(ignored)) { return list___reversed___impl((PyListObject *)self); } -/*[clinic end generated code: output=ae13fc2b56dc27c2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=06c21b0bffbe8d84 input=a9049054013a1b77]*/ diff --git a/Objects/clinic/longobject.c.h b/Objects/clinic/longobject.c.h index c88772030ec..52ecaffa1f4 100644 --- a/Objects/clinic/longobject.c.h +++ b/Objects/clinic/longobject.c.h @@ -262,19 +262,20 @@ PyDoc_STRVAR(int_to_bytes__doc__, "Return an array of bytes representing an integer.\n" "\n" " length\n" -" Length of bytes object to use. An OverflowError is raised if the\n" -" integer is not representable with the given number of bytes. Default\n" -" is length 1.\n" +" Length of bytes object to use. An OverflowError is raised if\n" +" the integer is not representable with the given number of bytes.\n" +" Default is length 1.\n" " byteorder\n" -" The byte order used to represent the integer. If byteorder is \'big\',\n" -" the most significant byte is at the beginning of the byte array. If\n" -" byteorder is \'little\', the most significant byte is at the end of the\n" -" byte array. To request the native byte order of the host system, use\n" -" sys.byteorder as the byte order value. Default is to use \'big\'.\n" +" The byte order used to represent the integer. If byteorder is\n" +" \'big\', the most significant byte is at the beginning of the byte\n" +" array. If byteorder is \'little\', the most significant byte is at\n" +" the end of the byte array. To request the native byte order of\n" +" the host system, use sys.byteorder as the byte order value.\n" +" Default is to use \'big\'.\n" " signed\n" -" Determines whether two\'s complement is used to represent the integer.\n" -" If signed is False and a negative integer is given, an OverflowError\n" -" is raised."); +" Determines whether two\'s complement is used to represent the\n" +" integer. If signed is False and a negative integer is given,\n" +" an OverflowError is raised."); #define INT_TO_BYTES_METHODDEF \ {"to_bytes", _PyCFunction_CAST(int_to_bytes), METH_FASTCALL|METH_KEYWORDS, int_to_bytes__doc__}, @@ -383,17 +384,19 @@ PyDoc_STRVAR(int_from_bytes__doc__, "\n" " bytes\n" " Holds the array of bytes to convert. The argument must either\n" -" support the buffer protocol or be an iterable object producing bytes.\n" -" Bytes and bytearray are examples of built-in objects that support the\n" -" buffer protocol.\n" +" support the buffer protocol or be an iterable object producing\n" +" bytes. Bytes and bytearray are examples of built-in objects that\n" +" support the buffer protocol.\n" " byteorder\n" -" The byte order used to represent the integer. If byteorder is \'big\',\n" -" the most significant byte is at the beginning of the byte array. If\n" -" byteorder is \'little\', the most significant byte is at the end of the\n" -" byte array. To request the native byte order of the host system, use\n" -" sys.byteorder as the byte order value. Default is to use \'big\'.\n" +" The byte order used to represent the integer. If byteorder is\n" +" \'big\', the most significant byte is at the beginning of the byte\n" +" array. If byteorder is \'little\', the most significant byte is at\n" +" the end of the byte array. To request the native byte order of\n" +" the host system, use sys.byteorder as the byte order value.\n" +" Default is to use \'big\'.\n" " signed\n" -" Indicates whether two\'s complement is used to represent the integer."); +" Indicates whether two\'s complement is used to represent the\n" +" integer."); #define INT_FROM_BYTES_METHODDEF \ {"from_bytes", _PyCFunction_CAST(int_from_bytes), METH_FASTCALL|METH_KEYWORDS|METH_CLASS, int_from_bytes__doc__}, @@ -490,4 +493,4 @@ int_is_integer(PyObject *self, PyObject *Py_UNUSED(ignored)) { return int_is_integer_impl(self); } -/*[clinic end generated code: output=e68f4e23ead3f649 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d95766fb7ff46963 input=a9049054013a1b77]*/ diff --git a/Objects/clinic/memoryobject.c.h b/Objects/clinic/memoryobject.c.h index d97c626532c..a0cf3243edc 100644 --- a/Objects/clinic/memoryobject.c.h +++ b/Objects/clinic/memoryobject.c.h @@ -259,11 +259,12 @@ PyDoc_STRVAR(memoryview_tobytes__doc__, "\n" "Return the data in the buffer as a byte string.\n" "\n" -"Order can be {\'C\', \'F\', \'A\'}. When order is \'C\' or \'F\', the data of the\n" -"original array is converted to C or Fortran order. For contiguous views,\n" -"\'A\' returns an exact copy of the physical memory. In particular, in-memory\n" -"Fortran order is preserved. For non-contiguous views, the data is converted\n" -"to C first. order=None is the same as order=\'C\'."); +"Order can be {\'C\', \'F\', \'A\'}. When order is \'C\' or \'F\', the data of\n" +"the original array is converted to C or Fortran order. For\n" +"contiguous views, \'A\' returns an exact copy of the physical memory.\n" +"In particular, in-memory Fortran order is preserved. For\n" +"non-contiguous views, the data is converted to C first. order=None\n" +"is the same as order=\'C\'."); #define MEMORYVIEW_TOBYTES_METHODDEF \ {"tobytes", _PyCFunction_CAST(memoryview_tobytes), METH_FASTCALL|METH_KEYWORDS, memoryview_tobytes__doc__}, @@ -348,8 +349,8 @@ PyDoc_STRVAR(memoryview_hex__doc__, " sep\n" " An optional single character or byte to separate hex bytes.\n" " bytes_per_sep\n" -" How many bytes between separators. Positive values count from the\n" -" right, negative values count from the left.\n" +" How many bytes between separators. Positive values count from\n" +" the right, negative values count from the left.\n" "\n" "Example:\n" ">>> value = memoryview(b\'\\xb9\\x01\\xef\')\n" @@ -505,4 +506,4 @@ memoryview_index(PyObject *self, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=348b6ddb98a1f412 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3abf9c80cd49229a input=a9049054013a1b77]*/ diff --git a/Objects/clinic/odictobject.c.h b/Objects/clinic/odictobject.c.h index 894e9be91bb..92129e64448 100644 --- a/Objects/clinic/odictobject.c.h +++ b/Objects/clinic/odictobject.c.h @@ -268,7 +268,8 @@ PyDoc_STRVAR(OrderedDict_popitem__doc__, "\n" "Remove and return a (key, value) pair from the dictionary.\n" "\n" -"Pairs are returned in LIFO order if last is true or FIFO order if false."); +"Pairs are returned in LIFO order if last is true or FIFO order if\n" +"false."); #define ORDEREDDICT_POPITEM_METHODDEF \ {"popitem", _PyCFunction_CAST(OrderedDict_popitem), METH_FASTCALL|METH_KEYWORDS, OrderedDict_popitem__doc__}, @@ -451,4 +452,4 @@ OrderedDict_move_to_end(PyObject *self, PyObject *const *args, Py_ssize_t nargs, exit: return return_value; } -/*[clinic end generated code: output=7bc997ca7900f06f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=89f7e92de998f9a4 input=a9049054013a1b77]*/ diff --git a/Objects/clinic/sentinelobject.c.h b/Objects/clinic/sentinelobject.c.h index 51fd35a5979..f8503194ae5 100644 --- a/Objects/clinic/sentinelobject.c.h +++ b/Objects/clinic/sentinelobject.c.h @@ -2,33 +2,71 @@ preserve [clinic start generated code]*/ -#include "pycore_modsupport.h" // _PyArg_CheckPositional() +#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) +# include "pycore_gc.h" // PyGC_Head +# include "pycore_runtime.h" // _Py_ID() +#endif +#include "pycore_modsupport.h" // _PyArg_UnpackKeywords() static PyObject * -sentinel_new_impl(PyTypeObject *type, PyObject *name); +sentinel_new_impl(PyTypeObject *type, PyObject *name, PyObject *repr); static PyObject * sentinel_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - PyTypeObject *base_tp = &PySentinel_Type; + #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) + + #define NUM_KEYWORDS 1 + static struct { + PyGC_Head _this_is_not_used; + PyObject_VAR_HEAD + Py_hash_t ob_hash; + PyObject *ob_item[NUM_KEYWORDS]; + } _kwtuple = { + .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) + .ob_hash = -1, + .ob_item = { &_Py_ID(repr), }, + }; + #undef NUM_KEYWORDS + #define KWTUPLE (&_kwtuple.ob_base.ob_base) + + #else // !Py_BUILD_CORE + # define KWTUPLE NULL + #endif // !Py_BUILD_CORE + + static const char * const _keywords[] = {"", "repr", NULL}; + static _PyArg_Parser _parser = { + .keywords = _keywords, + .fname = "sentinel", + .kwtuple = KWTUPLE, + }; + #undef KWTUPLE + PyObject *argsbuf[2]; + PyObject * const *fastargs; + Py_ssize_t nargs = PyTuple_GET_SIZE(args); + Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1; PyObject *name; + PyObject *repr = Py_None; - if ((type == base_tp || type->tp_init == base_tp->tp_init) && - !_PyArg_NoKeywords("sentinel", kwargs)) { + fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, + /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf); + if (!fastargs) { goto exit; } - if (!_PyArg_CheckPositional("sentinel", PyTuple_GET_SIZE(args), 1, 1)) { + if (!PyUnicode_Check(fastargs[0])) { + _PyArg_BadArgument("sentinel", "argument 1", "str", fastargs[0]); goto exit; } - if (!PyUnicode_Check(PyTuple_GET_ITEM(args, 0))) { - _PyArg_BadArgument("sentinel", "argument 1", "str", PyTuple_GET_ITEM(args, 0)); - goto exit; + name = fastargs[0]; + if (!noptargs) { + goto skip_optional_kwonly; } - name = PyTuple_GET_ITEM(args, 0); - return_value = sentinel_new_impl(type, name); + repr = fastargs[1]; +skip_optional_kwonly: + return_value = sentinel_new_impl(type, name, repr); exit: return return_value; } -/*[clinic end generated code: output=7f28fc0bf0259cba input=a9049054013a1b77]*/ +/*[clinic end generated code: output=958842ece254c82f input=a9049054013a1b77]*/ diff --git a/Objects/clinic/unicodeobject.c.h b/Objects/clinic/unicodeobject.c.h index 4b53e24fb7d..d0753b38843 100644 --- a/Objects/clinic/unicodeobject.c.h +++ b/Objects/clinic/unicodeobject.c.h @@ -33,8 +33,8 @@ PyDoc_STRVAR(unicode_title__doc__, "\n" "Return a version of the string where each word is titlecased.\n" "\n" -"More specifically, words start with uppercased characters and all remaining\n" -"cased characters have lower case."); +"More specifically, words start with uppercased characters and all\n" +"remaining cased characters have lower case."); #define UNICODE_TITLE_METHODDEF \ {"title", (PyCFunction)unicode_title, METH_NOARGS, unicode_title__doc__}, @@ -54,8 +54,8 @@ PyDoc_STRVAR(unicode_capitalize__doc__, "\n" "Return a capitalized version of the string.\n" "\n" -"More specifically, make the first character have upper case and the rest lower\n" -"case."); +"More specifically, make the first character have upper case and the\n" +"rest lower case."); #define UNICODE_CAPITALIZE_METHODDEF \ {"capitalize", (PyCFunction)unicode_capitalize, METH_NOARGS, unicode_capitalize__doc__}, @@ -93,7 +93,8 @@ PyDoc_STRVAR(unicode_center__doc__, "\n" "Return a centered string of length width.\n" "\n" -"Padding is done using the specified fill character (default is a space)."); +"Padding is done using the specified fill character (default is\n" +"a space)."); #define UNICODE_CENTER_METHODDEF \ {"center", _PyCFunction_CAST(unicode_center), METH_FASTCALL, unicode_center__doc__}, @@ -142,7 +143,8 @@ PyDoc_STRVAR(unicode_count__doc__, "\n" "Return the number of non-overlapping occurrences of substring sub in string S[start:end].\n" "\n" -"Optional arguments start and end are interpreted as in slice notation."); +"Optional arguments start and end are interpreted as in slice\n" +"notation."); #define UNICODE_COUNT_METHODDEF \ {"count", _PyCFunction_CAST(unicode_count), METH_FASTCALL, unicode_count__doc__}, @@ -202,8 +204,8 @@ PyDoc_STRVAR(unicode_encode__doc__, " errors\n" " The error handling scheme to use for encoding errors.\n" " The default is \'strict\' meaning that encoding errors raise a\n" -" UnicodeEncodeError. Other possible values are \'ignore\', \'replace\' and\n" -" \'xmlcharrefreplace\' as well as any other name registered with\n" +" UnicodeEncodeError. Other possible values are \'ignore\', \'replace\'\n" +" and \'xmlcharrefreplace\' as well as any other name registered with\n" " codecs.register_error that can handle UnicodeEncodeErrors."); #define UNICODE_ENCODE_METHODDEF \ @@ -368,8 +370,8 @@ PyDoc_STRVAR(unicode_find__doc__, "\n" "Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n" "\n" -"Optional arguments start and end are interpreted as in slice notation.\n" -"Return -1 on failure."); +"Optional arguments start and end are interpreted as in slice\n" +"notation. Return -1 on failure."); #define UNICODE_FIND_METHODDEF \ {"find", _PyCFunction_CAST(unicode_find), METH_FASTCALL, unicode_find__doc__}, @@ -424,8 +426,8 @@ PyDoc_STRVAR(unicode_index__doc__, "\n" "Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n" "\n" -"Optional arguments start and end are interpreted as in slice notation.\n" -"Raises ValueError when the substring is not found."); +"Optional arguments start and end are interpreted as in slice\n" +"notation. Raises ValueError when the substring is not found."); #define UNICODE_INDEX_METHODDEF \ {"index", _PyCFunction_CAST(unicode_index), METH_FASTCALL, unicode_index__doc__}, @@ -501,8 +503,8 @@ PyDoc_STRVAR(unicode_islower__doc__, "\n" "Return True if the string is a lowercase string, False otherwise.\n" "\n" -"A string is lowercase if all cased characters in the string are lowercase and\n" -"there is at least one cased character in the string."); +"A string is lowercase if all cased characters in the string are\n" +"lowercase and there is at least one cased character in the string."); #define UNICODE_ISLOWER_METHODDEF \ {"islower", (PyCFunction)unicode_islower, METH_NOARGS, unicode_islower__doc__}, @@ -522,8 +524,8 @@ PyDoc_STRVAR(unicode_isupper__doc__, "\n" "Return True if the string is an uppercase string, False otherwise.\n" "\n" -"A string is uppercase if all cased characters in the string are uppercase and\n" -"there is at least one cased character in the string."); +"A string is uppercase if all cased characters in the string are\n" +"uppercase and there is at least one cased character in the string."); #define UNICODE_ISUPPER_METHODDEF \ {"isupper", (PyCFunction)unicode_isupper, METH_NOARGS, unicode_isupper__doc__}, @@ -564,8 +566,8 @@ PyDoc_STRVAR(unicode_isspace__doc__, "\n" "Return True if the string is a whitespace string, False otherwise.\n" "\n" -"A string is whitespace if all characters in the string are whitespace and there\n" -"is at least one character in the string."); +"A string is whitespace if all characters in the string are\n" +"whitespace and there is at least one character in the string."); #define UNICODE_ISSPACE_METHODDEF \ {"isspace", (PyCFunction)unicode_isspace, METH_NOARGS, unicode_isspace__doc__}, @@ -585,8 +587,8 @@ PyDoc_STRVAR(unicode_isalpha__doc__, "\n" "Return True if the string is an alphabetic string, False otherwise.\n" "\n" -"A string is alphabetic if all characters in the string are alphabetic and there\n" -"is at least one character in the string."); +"A string is alphabetic if all characters in the string are\n" +"alphabetic and there is at least one character in the string."); #define UNICODE_ISALPHA_METHODDEF \ {"isalpha", (PyCFunction)unicode_isalpha, METH_NOARGS, unicode_isalpha__doc__}, @@ -606,8 +608,8 @@ PyDoc_STRVAR(unicode_isalnum__doc__, "\n" "Return True if the string is an alpha-numeric string, False otherwise.\n" "\n" -"A string is alpha-numeric if all characters in the string are alpha-numeric and\n" -"there is at least one character in the string."); +"A string is alpha-numeric if all characters in the string are\n" +"alpha-numeric and there is at least one character in the string."); #define UNICODE_ISALNUM_METHODDEF \ {"isalnum", (PyCFunction)unicode_isalnum, METH_NOARGS, unicode_isalnum__doc__}, @@ -627,8 +629,8 @@ PyDoc_STRVAR(unicode_isdecimal__doc__, "\n" "Return True if the string is a decimal string, False otherwise.\n" "\n" -"A string is a decimal string if all characters in the string are decimal and\n" -"there is at least one character in the string."); +"A string is a decimal string if all characters in the string are\n" +"decimal and there is at least one character in the string."); #define UNICODE_ISDECIMAL_METHODDEF \ {"isdecimal", (PyCFunction)unicode_isdecimal, METH_NOARGS, unicode_isdecimal__doc__}, @@ -648,8 +650,8 @@ PyDoc_STRVAR(unicode_isdigit__doc__, "\n" "Return True if the string is a digit string, False otherwise.\n" "\n" -"A string is a digit string if all characters in the string are digits and there\n" -"is at least one character in the string."); +"A string is a digit string if all characters in the string are\n" +"digits and there is at least one character in the string."); #define UNICODE_ISDIGIT_METHODDEF \ {"isdigit", (PyCFunction)unicode_isdigit, METH_NOARGS, unicode_isdigit__doc__}, @@ -669,8 +671,8 @@ PyDoc_STRVAR(unicode_isnumeric__doc__, "\n" "Return True if the string is a numeric string, False otherwise.\n" "\n" -"A string is numeric if all characters in the string are numeric and there is at\n" -"least one character in the string."); +"A string is numeric if all characters in the string are numeric and\n" +"there is at least one character in the string."); #define UNICODE_ISNUMERIC_METHODDEF \ {"isnumeric", (PyCFunction)unicode_isnumeric, METH_NOARGS, unicode_isnumeric__doc__}, @@ -690,8 +692,8 @@ PyDoc_STRVAR(unicode_isidentifier__doc__, "\n" "Return True if the string is a valid Python identifier, False otherwise.\n" "\n" -"Call keyword.iskeyword(s) to test whether string s is a reserved identifier,\n" -"such as \"def\" or \"class\"."); +"Call keyword.iskeyword(s) to test whether string s is a reserved\n" +"identifier, such as \"def\" or \"class\"."); #define UNICODE_ISIDENTIFIER_METHODDEF \ {"isidentifier", (PyCFunction)unicode_isidentifier, METH_NOARGS, unicode_isidentifier__doc__}, @@ -731,8 +733,8 @@ PyDoc_STRVAR(unicode_join__doc__, "\n" "Concatenate any number of strings.\n" "\n" -"The string whose method is called is inserted in between each given string.\n" -"The result is returned as a new string.\n" +"The string whose method is called is inserted in between each given\n" +"string. The result is returned as a new string.\n" "\n" "Example: \'.\'.join([\'ab\', \'pq\', \'rs\']) -> \'ab.pq.rs\'"); @@ -745,7 +747,8 @@ PyDoc_STRVAR(unicode_ljust__doc__, "\n" "Return a left-justified string of length width.\n" "\n" -"Padding is done using the specified fill character (default is a space)."); +"Padding is done using the specified fill character (default is\n" +"a space)."); #define UNICODE_LJUST_METHODDEF \ {"ljust", _PyCFunction_CAST(unicode_ljust), METH_FASTCALL, unicode_ljust__doc__}, @@ -1008,8 +1011,9 @@ PyDoc_STRVAR(unicode_removeprefix__doc__, "\n" "Return a str with the given prefix string removed if present.\n" "\n" -"If the string starts with the prefix string, return string[len(prefix):].\n" -"Otherwise, return a copy of the original string."); +"If the string starts with the prefix string, return\n" +"string[len(prefix):]. Otherwise, return a copy of the original\n" +"string."); #define UNICODE_REMOVEPREFIX_METHODDEF \ {"removeprefix", (PyCFunction)unicode_removeprefix, METH_O, unicode_removeprefix__doc__}, @@ -1040,9 +1044,9 @@ PyDoc_STRVAR(unicode_removesuffix__doc__, "\n" "Return a str with the given suffix string removed if present.\n" "\n" -"If the string ends with the suffix string and that suffix is not empty,\n" -"return string[:-len(suffix)]. Otherwise, return a copy of the original\n" -"string."); +"If the string ends with the suffix string and that suffix is not\n" +"empty, return string[:-len(suffix)]. Otherwise, return a copy of\n" +"the original string."); #define UNICODE_REMOVESUFFIX_METHODDEF \ {"removesuffix", (PyCFunction)unicode_removesuffix, METH_O, unicode_removesuffix__doc__}, @@ -1073,8 +1077,8 @@ PyDoc_STRVAR(unicode_rfind__doc__, "\n" "Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n" "\n" -"Optional arguments start and end are interpreted as in slice notation.\n" -"Return -1 on failure."); +"Optional arguments start and end are interpreted as in slice\n" +"notation. Return -1 on failure."); #define UNICODE_RFIND_METHODDEF \ {"rfind", _PyCFunction_CAST(unicode_rfind), METH_FASTCALL, unicode_rfind__doc__}, @@ -1129,8 +1133,8 @@ PyDoc_STRVAR(unicode_rindex__doc__, "\n" "Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n" "\n" -"Optional arguments start and end are interpreted as in slice notation.\n" -"Raises ValueError when the substring is not found."); +"Optional arguments start and end are interpreted as in slice\n" +"notation. Raises ValueError when the substring is not found."); #define UNICODE_RINDEX_METHODDEF \ {"rindex", _PyCFunction_CAST(unicode_rindex), METH_FASTCALL, unicode_rindex__doc__}, @@ -1185,7 +1189,8 @@ PyDoc_STRVAR(unicode_rjust__doc__, "\n" "Return a right-justified string of length width.\n" "\n" -"Padding is done using the specified fill character (default is a space)."); +"Padding is done using the specified fill character (default is\n" +"a space)."); #define UNICODE_RJUST_METHODDEF \ {"rjust", _PyCFunction_CAST(unicode_rjust), METH_FASTCALL, unicode_rjust__doc__}, @@ -1237,18 +1242,18 @@ PyDoc_STRVAR(unicode_split__doc__, " sep\n" " The separator used to split the string.\n" "\n" -" When set to None (the default value), will split on any whitespace\n" -" character (including \\n \\r \\t \\f and spaces) and will discard\n" -" empty strings from the result.\n" +" When set to None (the default value), will split on any\n" +" whitespace character (including \\n \\r \\t \\f and spaces) and\n" +" will discard empty strings from the result.\n" " maxsplit\n" " Maximum number of splits.\n" " -1 (the default value) means no limit.\n" "\n" "Splitting starts at the front of the string and works to the end.\n" "\n" -"Note, str.split() is mainly useful for data that has been intentionally\n" -"delimited. With natural text that includes punctuation, consider using\n" -"the regular expression module."); +"Note, str.split() is mainly useful for data that has been\n" +"intentionally delimited. With natural text that includes\n" +"punctuation, consider using the regular expression module."); #define UNICODE_SPLIT_METHODDEF \ {"split", _PyCFunction_CAST(unicode_split), METH_FASTCALL|METH_KEYWORDS, unicode_split__doc__}, @@ -1331,12 +1336,12 @@ PyDoc_STRVAR(unicode_partition__doc__, "\n" "Partition the string into three parts using the given separator.\n" "\n" -"This will search for the separator in the string. If the separator is found,\n" -"returns a 3-tuple containing the part before the separator, the separator\n" -"itself, and the part after it.\n" +"This will search for the separator in the string. If the separator\n" +"is found, returns a 3-tuple containing the part before the\n" +"separator, the separator itself, and the part after it.\n" "\n" -"If the separator is not found, returns a 3-tuple containing the original string\n" -"and two empty strings."); +"If the separator is not found, returns a 3-tuple containing\n" +"the original string and two empty strings."); #define UNICODE_PARTITION_METHODDEF \ {"partition", (PyCFunction)unicode_partition, METH_O, unicode_partition__doc__}, @@ -1347,12 +1352,13 @@ PyDoc_STRVAR(unicode_rpartition__doc__, "\n" "Partition the string into three parts using the given separator.\n" "\n" -"This will search for the separator in the string, starting at the end. If\n" -"the separator is found, returns a 3-tuple containing the part before the\n" -"separator, the separator itself, and the part after it.\n" +"This will search for the separator in the string, starting at the\n" +"end. If the separator is found, returns a 3-tuple containing the\n" +"part before the separator, the separator itself, and the part after\n" +"it.\n" "\n" -"If the separator is not found, returns a 3-tuple containing two empty strings\n" -"and the original string."); +"If the separator is not found, returns a 3-tuple containing two\n" +"empty strings and the original string."); #define UNICODE_RPARTITION_METHODDEF \ {"rpartition", (PyCFunction)unicode_rpartition, METH_O, unicode_rpartition__doc__}, @@ -1366,9 +1372,9 @@ PyDoc_STRVAR(unicode_rsplit__doc__, " sep\n" " The separator used to split the string.\n" "\n" -" When set to None (the default value), will split on any whitespace\n" -" character (including \\n \\r \\t \\f and spaces) and will discard\n" -" empty strings from the result.\n" +" When set to None (the default value), will split on any\n" +" whitespace character (including \\n \\r \\t \\f and spaces) and\n" +" will discard empty strings from the result.\n" " maxsplit\n" " Maximum number of splits.\n" " -1 (the default value) means no limit.\n" @@ -1456,8 +1462,8 @@ PyDoc_STRVAR(unicode_splitlines__doc__, "\n" "Return a list of the lines in the string, breaking at line boundaries.\n" "\n" -"Line breaks are not included in the resulting list unless keepends is given and\n" -"true."); +"Line breaks are not included in the resulting list unless keepends\n" +"is given and true."); #define UNICODE_SPLITLINES_METHODDEF \ {"splitlines", _PyCFunction_CAST(unicode_splitlines), METH_FASTCALL|METH_KEYWORDS, unicode_splitlines__doc__}, @@ -1543,13 +1549,14 @@ PyDoc_STRVAR(unicode_maketrans__doc__, "\n" "Return a translation table usable for str.translate().\n" "\n" -"If there is only one argument, it must be a dictionary mapping Unicode\n" -"ordinals (integers) or characters to Unicode ordinals, strings or None.\n" -"Character keys will be then converted to ordinals.\n" -"If there are two arguments, they must be strings of equal length, and\n" -"in the resulting dictionary, each character in x will be mapped to the\n" -"character at the same position in y. If there is a third argument, it\n" -"must be a string, whose characters will be mapped to None in the result."); +"If there is only one argument, it must be a dictionary mapping\n" +"Unicode ordinals (integers) or characters to Unicode ordinals,\n" +"strings or None. Character keys will be then converted to ordinals.\n" +"If there are two arguments, they must be strings of equal length,\n" +"and in the resulting dictionary, each character in x will be mapped\n" +"to the character at the same position in y. If there is a third\n" +"argument, it must be a string, whose characters will be mapped to\n" +"None in the result."); #define UNICODE_MAKETRANS_METHODDEF \ {"maketrans", _PyCFunction_CAST(unicode_maketrans), METH_FASTCALL|METH_STATIC, unicode_maketrans__doc__}, @@ -1599,12 +1606,13 @@ PyDoc_STRVAR(unicode_translate__doc__, "Replace each character in the string using the given translation table.\n" "\n" " table\n" -" Translation table, which must be a mapping of Unicode ordinals to\n" -" Unicode ordinals, strings, or None.\n" +" Translation table, which must be a mapping of Unicode ordinals\n" +" to Unicode ordinals, strings, or None.\n" "\n" -"The table must implement lookup/indexing via __getitem__, for instance a\n" -"dictionary or list. If this operation raises LookupError, the character is\n" -"left untouched. Characters mapped to None are deleted."); +"The table must implement lookup/indexing via __getitem__, for\n" +"instance a dictionary or list. If this operation raises\n" +"LookupError, the character is left untouched. Characters mapped to\n" +"None are deleted."); #define UNICODE_TRANSLATE_METHODDEF \ {"translate", (PyCFunction)unicode_translate, METH_O, unicode_translate__doc__}, @@ -1908,4 +1916,4 @@ unicode_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=13eaf65699ea9fc9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9d243c63e951e31d input=a9049054013a1b77]*/ diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 8be85b1accb..4ede8de6e8a 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -2840,12 +2840,13 @@ code._varname_from_oparg (internal-only) Return the local variable name for the given oparg. -WARNING: this method is for internal use only and may change or go away. +WARNING: this method is for internal use only and may change or go +away. [clinic start generated code]*/ static PyObject * code__varname_from_oparg_impl(PyCodeObject *self, int oparg) -/*[clinic end generated code: output=1fd1130413184206 input=c5fa3ee9bac7d4ca]*/ +/*[clinic end generated code: output=1fd1130413184206 input=6ba7d6df0d566463]*/ { PyObject *name = PyTuple_GetItem(self->co_localsplusnames, oparg); if (name == NULL) { diff --git a/Objects/descrobject.c b/Objects/descrobject.c index a5926616eeb..30444b7d677 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -1178,7 +1178,7 @@ static PyMethodDef mappingproxy_methods[] = { {"copy", mappingproxy_copy, METH_NOARGS, PyDoc_STR("D.copy() -> a shallow copy of D")}, {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, - PyDoc_STR("See PEP 585")}, + PyDoc_STR("mappingproxy objects are generic over two types, signifying (respectively) the types of their keys and values")}, {"__reversed__", mappingproxy_reversed, METH_NOARGS, PyDoc_STR("D.__reversed__() -> reverse iterator")}, {0} diff --git a/Objects/dictobject.c b/Objects/dictobject.c index b33a273dac3..e279c8765dd 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -3083,10 +3083,12 @@ clear_lock_held(PyObject *op) set_keys(mp, Py_EMPTY_KEYS); n = oldkeys->dk_nentries; for (i = 0; i < n; i++) { - Py_CLEAR(oldvalues->values[i]); + PyObject *tmp = oldvalues->values[i]; + FT_ATOMIC_STORE_PTR_RELEASE(oldvalues->values[i], NULL); + Py_XDECREF(tmp); } free_values(oldvalues, IS_DICT_SHARED(mp)); - dictkeys_decref(oldkeys, false); + dictkeys_decref(oldkeys, IS_DICT_SHARED(mp)); } ASSERT_CONSISTENT(mp); } @@ -3890,6 +3892,7 @@ PyDict_Items(PyObject *dict) } /*[clinic input] +@permit_long_summary @classmethod dict.fromkeys iterable: object @@ -3901,7 +3904,7 @@ Create a new dictionary with keys from iterable and values set to value. static PyObject * dict_fromkeys_impl(PyTypeObject *type, PyObject *iterable, PyObject *value) -/*[clinic end generated code: output=8fb98e4b10384999 input=382ba4855d0f74c3]*/ +/*[clinic end generated code: output=8fb98e4b10384999 input=3903715eb48b287e]*/ { return _PyDict_FromKeys((PyObject *)type, iterable, value); } @@ -5127,7 +5130,8 @@ static PyMethodDef mapp_methods[] = { DICT_CLEAR_METHODDEF DICT_COPY_METHODDEF DICT___REVERSED___METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("dicts are generic over two types, signifying (respectively) the types of their keys and values")}, {NULL, NULL} /* sentinel */ }; @@ -8195,7 +8199,8 @@ static PyMethodDef frozendict_methods[] = { DICT_FROMKEYS_METHODDEF FROZENDICT_COPY_METHODDEF DICT___REVERSED___METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("frozendicts are generic over two types, signifying (respectively) the types of the frozendict's keys and values")}, {"__getnewargs__", frozendict_getnewargs, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; @@ -8228,6 +8233,39 @@ _shuffle_bits(Py_uhash_t h) return ((h ^ 89869747UL) ^ (h << 16)) * 3644798167UL; } +// Compute hash((key, value)). +// Code copied from tuple_hash(). +static Py_hash_t +frozendict_pair_hash(Py_hash_t key_hash, PyObject *value) +{ + assert(key_hash != -1); + + const Py_ssize_t len = 2; + Py_uhash_t acc = _PyTuple_HASH_XXPRIME_5; + + Py_uhash_t lane = key_hash; + acc += lane * _PyTuple_HASH_XXPRIME_2; + acc = _PyTuple_HASH_XXROTATE(acc); + acc *= _PyTuple_HASH_XXPRIME_1; + + lane = PyObject_Hash(value); + if (lane == (Py_uhash_t)-1) { + return -1; + } + acc += lane * _PyTuple_HASH_XXPRIME_2; + acc = _PyTuple_HASH_XXROTATE(acc); + acc *= _PyTuple_HASH_XXPRIME_1; + + /* Add input length, mangled to keep the historical value of hash(()). */ + acc += len ^ (_PyTuple_HASH_XXPRIME_5 ^ 3527539UL); + + if (acc == (Py_uhash_t)-1) { + acc = 1546275796; + } + return acc; +} + + // Code copied from frozenset_hash() static Py_hash_t frozendict_hash(PyObject *op) @@ -8241,20 +8279,15 @@ frozendict_hash(PyObject *op) PyDictObject *mp = _PyAnyDict_CAST(op); Py_uhash_t hash = 0; - PyObject *key, *value; // borrowed refs + PyObject *value; // borrowed ref Py_ssize_t pos = 0; - while (PyDict_Next(op, &pos, &key, &value)) { - Py_hash_t key_hash = PyObject_Hash(key); - if (key_hash == -1) { - return -1; - } - hash ^= _shuffle_bits(key_hash); - - Py_hash_t value_hash = PyObject_Hash(value); - if (value_hash == -1) { + Py_hash_t key_hash; + while (_PyDict_Next(op, &pos, NULL, &value, &key_hash)) { + Py_hash_t pair_hash = frozendict_pair_hash(key_hash, value); + if (pair_hash == -1) { return -1; } - hash ^= _shuffle_bits(value_hash); + hash ^= _shuffle_bits(pair_hash); } /* Factor in the number of active entries */ diff --git a/Objects/enumobject.c b/Objects/enumobject.c index 364d508dd01..fc53f1bfee8 100644 --- a/Objects/enumobject.c +++ b/Objects/enumobject.c @@ -290,7 +290,7 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling."); static PyMethodDef enum_methods[] = { {"__reduce__", enum_reduce, METH_NOARGS, reduce_doc}, {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, PyDoc_STR("'enumerate' objects are generic over the type of their values")}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 5e5e87cd6d7..34a7844c857 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -225,7 +225,7 @@ BaseException___reduce___impl(PyBaseExceptionObject *self) */ /*[clinic input] -@critical_section +@critical_section state BaseException.__setstate__ state: object / @@ -233,7 +233,7 @@ BaseException.__setstate__ static PyObject * BaseException___setstate___impl(PyBaseExceptionObject *self, PyObject *state) -/*[clinic end generated code: output=f3834889950453ab input=5524b61cfe9b9856]*/ +/*[clinic end generated code: output=f3834889950453ab input=f9b1aea70382cdb6]*/ { PyObject *d_key, *d_value; Py_ssize_t i = 0; @@ -1743,7 +1743,8 @@ static PyMemberDef BaseExceptionGroup_members[] = { static PyMethodDef BaseExceptionGroup_methods[] = { {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, + PyDoc_STR("Exception groups are generic over the type of their contained exceptions")}, BASEEXCEPTIONGROUP_DERIVE_METHODDEF BASEEXCEPTIONGROUP_SPLIT_METHODDEF BASEEXCEPTIONGROUP_SUBGROUP_METHODDEF diff --git a/Objects/floatobject.c b/Objects/floatobject.c index d91468dddde..17e6a729dcd 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -1670,7 +1670,6 @@ float___getnewargs___impl(PyObject *self) /*[clinic input] -@permit_long_docstring_body @classmethod float.__getformat__ @@ -1683,13 +1682,13 @@ You probably don't want to use this function. It exists mainly to be used in Python's test suite. This function returns whichever of 'IEEE, big-endian' or 'IEEE, -little-endian' best describes the format of floating-point numbers used by the -C type named by typestr. +little-endian' best describes the format of floating-point numbers +used by the C type named by typestr. [clinic start generated code]*/ static PyObject * float___getformat___impl(PyTypeObject *type, const char *typestr) -/*[clinic end generated code: output=2bfb987228cc9628 input=0ae1ba35d192f704]*/ +/*[clinic end generated code: output=2bfb987228cc9628 input=eb1cf45e9bddab72]*/ { if (strcmp(typestr, "double") != 0 && strcmp(typestr, "float") != 0) { PyErr_SetString(PyExc_ValueError, diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 5ae85c5bca6..f60cdb2dd1b 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -1890,6 +1890,7 @@ frame_trace_set_impl(PyFrameObject *self, PyObject *value) } /*[clinic input] +@permit_long_summary @critical_section @getter frame.f_generator as frame_generator @@ -1899,7 +1900,7 @@ Return the generator or coroutine associated with this frame, or None. static PyObject * frame_generator_get_impl(PyFrameObject *self) -/*[clinic end generated code: output=97aeb2392562e55b input=00a2bd008b239ab0]*/ +/*[clinic end generated code: output=97aeb2392562e55b input=3ffba57ba10f84be]*/ { if (self->f_frame->owner == FRAME_OWNED_BY_GENERATOR) { PyObject *gen = (PyObject *)_PyGen_GetGeneratorFromFrame(self->f_frame); diff --git a/Objects/genericaliasobject.c b/Objects/genericaliasobject.c index e3bc8eb2739..9c797e8dd6f 100644 --- a/Objects/genericaliasobject.c +++ b/Objects/genericaliasobject.c @@ -412,6 +412,9 @@ _Py_subs_parameters(PyObject *self, PyObject *args, PyObject *parameters, PyObje self); } item = _unpack_args(item); + if (item == NULL) { + return NULL; + } for (Py_ssize_t i = 0; i < nparams; i++) { PyObject *param = PyTuple_GET_ITEM(parameters, i); PyObject *prepare, *tmp; diff --git a/Objects/genobject.c b/Objects/genobject.c index 8c5d720c0b9..38d49334345 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -1023,7 +1023,8 @@ static PyMethodDef gen_methods[] = { {"throw", _PyCFunction_CAST(gen_throw), METH_FASTCALL, throw_doc}, {"close", gen_close, METH_NOARGS, close_doc}, {"__sizeof__", gen_sizeof, METH_NOARGS, sizeof__doc__}, - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("generators are generic over the types of their yield, send, and return values")}, {NULL, NULL} /* Sentinel */ }; @@ -1374,7 +1375,8 @@ static PyMethodDef coro_methods[] = { {"throw",_PyCFunction_CAST(gen_throw), METH_FASTCALL, coro_throw_doc}, {"close", gen_close, METH_NOARGS, coro_close_doc}, {"__sizeof__", gen_sizeof, METH_NOARGS, sizeof__doc__}, - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("coroutines are generic over the types of their yield, send, and return values")}, {NULL, NULL} /* Sentinel */ }; @@ -1820,7 +1822,7 @@ static PyMethodDef async_gen_methods[] = { {"aclose", async_gen_aclose, METH_NOARGS, async_aclose_doc}, {"__sizeof__", gen_sizeof, METH_NOARGS, sizeof__doc__}, {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, PyDoc_STR("async generators are generic over the types of their yield and send values")}, {NULL, NULL} /* Sentinel */ }; diff --git a/Objects/interpolationobject.c b/Objects/interpolationobject.c index b58adb693f0..e37724fb785 100644 --- a/Objects/interpolationobject.c +++ b/Objects/interpolationobject.c @@ -138,7 +138,7 @@ static PyMethodDef interpolation_methods[] = { {"__reduce__", interpolation_reduce, METH_NOARGS, PyDoc_STR("__reduce__() -> (cls, state)")}, {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, PyDoc_STR("Interpolations are generic over the types of their values")}, {NULL, NULL}, }; diff --git a/Objects/lazyimportobject.c b/Objects/lazyimportobject.c index 451f335e033..fa1eb25047d 100644 --- a/Objects/lazyimportobject.c +++ b/Objects/lazyimportobject.c @@ -135,7 +135,7 @@ PyDoc_STRVAR(lazy_import_doc, "lazy_import(builtins, name, fromlist=None, /)\n" "--\n" "\n" -"Represents a deferred import that will be resolved on first use.\n" +"Represents a lazy import that will be resolved on first use.\n" "\n" "Instances of this object accessed from the global scope will be\n" "automatically imported based upon their name and then replaced with\n" diff --git a/Objects/listobject.c b/Objects/listobject.c index 10e25bbdcdc..8a9c9bda682 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -2922,7 +2922,6 @@ unsafe_tuple_compare(PyObject *v, PyObject *w, MergeState *ms) * duplicated). */ /*[clinic input] -@permit_long_docstring_body @critical_section list.sort @@ -2932,18 +2931,18 @@ list.sort Sort the list in ascending order and return None. -The sort is in-place (i.e. the list itself is modified) and stable (i.e. the -order of two equal elements is maintained). +The sort is in-place (i.e. the list itself is modified) and stable +(i.e. the order of two equal elements is maintained). -If a key function is given, apply it once to each list item and sort them, -ascending or descending, according to their function values. +If a key function is given, apply it once to each list item and sort +them, ascending or descending, according to their function values. The reverse flag can be set to sort in descending order. [clinic start generated code]*/ static PyObject * list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse) -/*[clinic end generated code: output=57b9f9c5e23fbe42 input=e4f6b6069181ad7d]*/ +/*[clinic end generated code: output=57b9f9c5e23fbe42 input=c145526281e1fb9f]*/ { MergeState ms; Py_ssize_t nremaining; @@ -3611,7 +3610,8 @@ static PyMethodDef list_methods[] = { LIST_COUNT_METHODDEF LIST_REVERSE_METHODDEF LIST_SORT_METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("lists are generic over the type of their contents")}, {NULL, NULL} /* sentinel */ }; @@ -3793,16 +3793,13 @@ list_ass_subscript_lock_held(PyObject *_self, PyObject *item, PyObject *value) lim = Py_SIZE(self) - cur - 1; } - memmove(self->ob_item + cur - i, - self->ob_item + cur + 1, - lim * sizeof(PyObject *)); + ptr_wise_atomic_memmove(self, self->ob_item + cur - i, + self->ob_item + cur + 1, lim); } cur = start + (size_t)slicelength * step; if (cur < (size_t)Py_SIZE(self)) { - memmove(self->ob_item + cur - slicelength, - self->ob_item + cur, - (Py_SIZE(self) - cur) * - sizeof(PyObject *)); + ptr_wise_atomic_memmove(self, self->ob_item + cur - slicelength, + self->ob_item + cur, Py_SIZE(self) - cur); } Py_SET_SIZE(self, Py_SIZE(self) - slicelength); diff --git a/Objects/longobject.c b/Objects/longobject.c index 549cf0b8f12..6e6011cb19a 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -6367,20 +6367,21 @@ int_as_integer_ratio_impl(PyObject *self) int.to_bytes length: Py_ssize_t(allow_negative=False) = 1 - Length of bytes object to use. An OverflowError is raised if the - integer is not representable with the given number of bytes. Default - is length 1. + Length of bytes object to use. An OverflowError is raised if + the integer is not representable with the given number of bytes. + Default is length 1. byteorder: unicode(c_default="NULL") = "big" - The byte order used to represent the integer. If byteorder is 'big', - the most significant byte is at the beginning of the byte array. If - byteorder is 'little', the most significant byte is at the end of the - byte array. To request the native byte order of the host system, use - sys.byteorder as the byte order value. Default is to use 'big'. + The byte order used to represent the integer. If byteorder is + 'big', the most significant byte is at the beginning of the byte + array. If byteorder is 'little', the most significant byte is at + the end of the byte array. To request the native byte order of + the host system, use sys.byteorder as the byte order value. + Default is to use 'big'. * signed as is_signed: bool = False - Determines whether two's complement is used to represent the integer. - If signed is False and a negative integer is given, an OverflowError - is raised. + Determines whether two's complement is used to represent the + integer. If signed is False and a negative integer is given, + an OverflowError is raised. Return an array of bytes representing an integer. [clinic start generated code]*/ @@ -6388,7 +6389,7 @@ Return an array of bytes representing an integer. static PyObject * int_to_bytes_impl(PyObject *self, Py_ssize_t length, PyObject *byteorder, int is_signed) -/*[clinic end generated code: output=89c801df114050a3 input=66f9d0c20529b44f]*/ +/*[clinic end generated code: output=89c801df114050a3 input=c74a93c07b2f6526]*/ { int little_endian; if (byteorder == NULL) @@ -6424,18 +6425,20 @@ int.from_bytes bytes as bytes_obj: object Holds the array of bytes to convert. The argument must either - support the buffer protocol or be an iterable object producing bytes. - Bytes and bytearray are examples of built-in objects that support the - buffer protocol. + support the buffer protocol or be an iterable object producing + bytes. Bytes and bytearray are examples of built-in objects that + support the buffer protocol. byteorder: unicode(c_default="NULL") = "big" - The byte order used to represent the integer. If byteorder is 'big', - the most significant byte is at the beginning of the byte array. If - byteorder is 'little', the most significant byte is at the end of the - byte array. To request the native byte order of the host system, use - sys.byteorder as the byte order value. Default is to use 'big'. + The byte order used to represent the integer. If byteorder is + 'big', the most significant byte is at the beginning of the byte + array. If byteorder is 'little', the most significant byte is at + the end of the byte array. To request the native byte order of + the host system, use sys.byteorder as the byte order value. + Default is to use 'big'. * signed as is_signed: bool = False - Indicates whether two's complement is used to represent the integer. + Indicates whether two's complement is used to represent the + integer. Return the integer represented by the given array of bytes. [clinic start generated code]*/ @@ -6443,7 +6446,7 @@ Return the integer represented by the given array of bytes. static PyObject * int_from_bytes_impl(PyTypeObject *type, PyObject *bytes_obj, PyObject *byteorder, int is_signed) -/*[clinic end generated code: output=efc5d68e31f9314f input=2ff527997fe7b0c5]*/ +/*[clinic end generated code: output=efc5d68e31f9314f input=95801e50b942e164]*/ { int little_endian; PyObject *long_obj, *bytes; @@ -6508,6 +6511,7 @@ long_long_getter(PyObject *self, void *Py_UNUSED(ignored)) } /*[clinic input] +@permit_long_summary int.is_integer Returns True. Exists for duck type compatibility with float.is_integer. @@ -6515,7 +6519,7 @@ Returns True. Exists for duck type compatibility with float.is_integer. static PyObject * int_is_integer_impl(PyObject *self) -/*[clinic end generated code: output=90f8e794ce5430ef input=7e41c4d4416e05f2]*/ +/*[clinic end generated code: output=90f8e794ce5430ef input=aacf01a2c81c0244]*/ { Py_RETURN_TRUE; } @@ -6597,7 +6601,8 @@ If x is not a number or if base is given, then x must be a string,\n\ bytes, or bytearray instance representing an integer literal in the\n\ given base. The literal can be preceded by '+' or '-' and be surrounded\n\ by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\n\ -Base 0 means to interpret the base from the string as an integer literal.\n\ +Base 0 means to interpret the base from the string as an integer\n\ +iteral.\n\ >>> int('0b100', base=0)\n\ 4"); diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index c0fd0b8b2f0..d92c7daff15 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -1629,11 +1629,7 @@ memory_getbuf(PyObject *_self, Py_buffer *view, int flags) view->obj = Py_NewRef(self); -#ifdef Py_GIL_DISABLED - _Py_atomic_add_ssize(&self->exports, 1); -#else - self->exports++; -#endif + FT_ATOMIC_ADD_SSIZE(self->exports, 1); return 0; } @@ -1642,11 +1638,7 @@ static void memory_releasebuf(PyObject *_self, Py_buffer *view) { PyMemoryViewObject *self = (PyMemoryViewObject *)_self; -#ifdef Py_GIL_DISABLED - _Py_atomic_add_ssize(&self->exports, -1); -#else - self->exports--; -#endif + FT_ATOMIC_ADD_SSIZE(self->exports, -1); return; /* PyBuffer_Release() decrements view->obj after this function returns. */ } @@ -2347,23 +2339,23 @@ memoryview_tolist_impl(PyMemoryViewObject *self) } /*[clinic input] -@permit_long_docstring_body memoryview.tobytes order: str(accept={str, NoneType}, c_default="NULL") = 'C' Return the data in the buffer as a byte string. -Order can be {'C', 'F', 'A'}. When order is 'C' or 'F', the data of the -original array is converted to C or Fortran order. For contiguous views, -'A' returns an exact copy of the physical memory. In particular, in-memory -Fortran order is preserved. For non-contiguous views, the data is converted -to C first. order=None is the same as order='C'. +Order can be {'C', 'F', 'A'}. When order is 'C' or 'F', the data of +the original array is converted to C or Fortran order. For +contiguous views, 'A' returns an exact copy of the physical memory. +In particular, in-memory Fortran order is preserved. For +non-contiguous views, the data is converted to C first. order=None +is the same as order='C'. [clinic start generated code]*/ static PyObject * memoryview_tobytes_impl(PyMemoryViewObject *self, const char *order) -/*[clinic end generated code: output=1288b62560a32a23 input=23c9faf372cfdbcc]*/ +/*[clinic end generated code: output=1288b62560a32a23 input=119c70aa91791dc8]*/ { Py_buffer *src = VIEW_ADDR(self); char ord = 'C'; @@ -2404,8 +2396,8 @@ memoryview.hex sep: object = NULL An optional single character or byte to separate hex bytes. bytes_per_sep: Py_ssize_t = 1 - How many bytes between separators. Positive values count from the - right, negative values count from the left. + How many bytes between separators. Positive values count from + the right, negative values count from the left. Return the data in the buffer as a str of hexadecimal numbers. @@ -2424,7 +2416,7 @@ Return the data in the buffer as a str of hexadecimal numbers. static PyObject * memoryview_hex_impl(PyMemoryViewObject *self, PyObject *sep, Py_ssize_t bytes_per_sep) -/*[clinic end generated code: output=c9bb00c7a8e86056 input=dc48a56ed3b058ae]*/ +/*[clinic end generated code: output=c9bb00c7a8e86056 input=3f1c5d08906e3b70]*/ { Py_buffer *src = VIEW_ADDR(self); @@ -2434,9 +2426,9 @@ memoryview_hex_impl(PyMemoryViewObject *self, PyObject *sep, // Prevent 'self' from being freed if computing len(sep) mutates 'self' // in _Py_strhex_with_sep(). // See: https://github.com/python/cpython/issues/143195. - self->exports++; + FT_ATOMIC_ADD_SSIZE(self->exports, 1); PyObject *ret = _Py_strhex_with_sep(src->buf, src->len, sep, bytes_per_sep); - self->exports--; + FT_ATOMIC_ADD_SSIZE(self->exports, -1); return ret; } @@ -3363,9 +3355,9 @@ memory_hash(PyObject *_self) if (view->obj != NULL) { // Prevent 'self' from being freed when computing the item's hash. // See https://github.com/python/cpython/issues/142664. - self->exports++; + FT_ATOMIC_ADD_SSIZE(self->exports, 1); Py_hash_t h = PyObject_Hash(view->obj); - self->exports--; + FT_ATOMIC_ADD_SSIZE(self->exports, -1); if (h == -1) { /* Keep the original error message */ return -1; @@ -3587,7 +3579,8 @@ static PyMethodDef memory_methods[] = { MEMORYVIEW_INDEX_METHODDEF {"__enter__", memory_enter, METH_NOARGS, NULL}, {"__exit__", memory_exit, METH_VARARGS, memory_exit_doc}, - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("memoryviews are generic over the type of their underlying data")}, {NULL, NULL} }; diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index f7b83c1d111..f447403ef31 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -1299,6 +1299,33 @@ _PyModule_IsPossiblyShadowing(PyObject *origin) return result; } +// Check if `name` is a lazily pending submodule of module `m`. +// Returns a new reference on success, or NULL with no error set. +static PyObject * +try_load_lazy_submodule(PyModuleObject *m, PyObject *name) +{ + PyObject *mod_name; + int rc = PyDict_GetItemRef(m->md_dict, &_Py_ID(__name__), &mod_name); + if (rc <= 0) { + return NULL; + } + if (!PyUnicode_Check(mod_name)) { + Py_DECREF(mod_name); + return NULL; + } + PyObject *result = _PyImport_TryLoadLazySubmodule(mod_name, name); + Py_DECREF(mod_name); + if (result == NULL) { + PyErr_Clear(); + return NULL; + } + if (PyDict_SetItem(m->md_dict, name, result) < 0) { + Py_DECREF(result); + return NULL; + } + return result; +} + PyObject* _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress) { @@ -1363,6 +1390,13 @@ _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress) PyErr_Clear(); } assert(m->md_dict != NULL); + attr = try_load_lazy_submodule(m, name); + if (attr != NULL) { + return attr; + } + if (PyErr_Occurred()) { + return NULL; + } if (PyDict_GetItemRef(m->md_dict, &_Py_ID(__getattr__), &getattr) < 0) { return NULL; } diff --git a/Objects/odictobject.c b/Objects/odictobject.c index b391283e837..6f05395b18d 100644 --- a/Objects/odictobject.c +++ b/Objects/odictobject.c @@ -1149,12 +1149,13 @@ OrderedDict.popitem Remove and return a (key, value) pair from the dictionary. -Pairs are returned in LIFO order if last is true or FIFO order if false. +Pairs are returned in LIFO order if last is true or FIFO order if +false. [clinic start generated code]*/ static PyObject * OrderedDict_popitem_impl(PyODictObject *self, int last) -/*[clinic end generated code: output=98e7d986690d49eb input=8aafc7433e0a40e7]*/ +/*[clinic end generated code: output=98e7d986690d49eb input=ebf1cc91579c9e54]*/ { PyObject *key, *value; _ODictNode *node; diff --git a/Objects/sentinelobject.c b/Objects/sentinelobject.c index e7e9f60e3ed..77bffbc397b 100644 --- a/Objects/sentinelobject.c +++ b/Objects/sentinelobject.c @@ -14,6 +14,7 @@ typedef struct { PyObject_HEAD PyObject *name; PyObject *module; + PyObject *repr; } sentinelobject; #define sentinelobject_CAST(op) \ @@ -46,7 +47,7 @@ caller(void) } static PyObject * -sentinel_new_with_module(PyTypeObject *type, PyObject *name, PyObject *module) +sentinel_new_with_module(PyTypeObject *type, PyObject *name, PyObject *module, PyObject *repr) { assert(PyUnicode_Check(name)); @@ -56,6 +57,7 @@ sentinel_new_with_module(PyTypeObject *type, PyObject *name, PyObject *module) } self->name = Py_NewRef(name); self->module = Py_NewRef(module); + self->repr = Py_XNewRef(repr); _PyObject_GC_TRACK(self); return (PyObject *)self; } @@ -66,37 +68,56 @@ sentinel.__new__ as sentinel_new name: object(subclass_of='&PyUnicode_Type') / + * + repr: object = None [clinic start generated code]*/ static PyObject * -sentinel_new_impl(PyTypeObject *type, PyObject *name) -/*[clinic end generated code: output=4af55c6048bed30d input=3ab75704f39c119c]*/ +sentinel_new_impl(PyTypeObject *type, PyObject *name, PyObject *repr) +/*[clinic end generated code: output=1eb7fab52e57d8c8 input=28cab6c468997b35]*/ { + if (repr == Py_None) { + repr = NULL; + } + else if (!PyUnicode_Check(repr)) { + _PyArg_BadArgument("sentinel", "argument 'repr'", "str or None", repr); + return NULL; + } PyObject *module = caller(); - PyObject *self = sentinel_new_with_module(type, name, module); + PyObject *self = sentinel_new_with_module(type, name, module, repr); Py_DECREF(module); return self; } PyObject * -PySentinel_New(const char *name, const char *module_name) +PySentinel_New(const char *name, const char *module_name, const char *repr) { PyObject *name_obj = PyUnicode_FromString(name); if (name_obj == NULL) { return NULL; } + PyObject *repr_obj = NULL; + if (repr != NULL) { + repr_obj = PyUnicode_FromString(repr); + if (repr_obj == NULL) { + Py_DECREF(name_obj); + return NULL; + } + } PyObject *module_obj = module_name == NULL ? Py_None : PyUnicode_FromString(module_name); if (module_obj == NULL) { Py_DECREF(name_obj); + Py_XDECREF(repr_obj); return NULL; } PyObject *sentinel = sentinel_new_with_module( - &PySentinel_Type, name_obj, module_obj); + &PySentinel_Type, name_obj, module_obj, repr_obj); Py_DECREF(module_obj); Py_DECREF(name_obj); + Py_XDECREF(repr_obj); return sentinel; } @@ -106,6 +127,7 @@ sentinel_clear(PyObject *op) sentinelobject *self = sentinelobject_CAST(op); Py_CLEAR(self->name); Py_CLEAR(self->module); + Py_CLEAR(self->repr); return 0; } @@ -123,6 +145,7 @@ sentinel_traverse(PyObject *op, visitproc visit, void *arg) sentinelobject *self = sentinelobject_CAST(op); Py_VISIT(self->name); Py_VISIT(self->module); + Py_VISIT(self->repr); return 0; } @@ -130,6 +153,9 @@ static PyObject * sentinel_repr(PyObject *op) { sentinelobject *self = sentinelobject_CAST(op); + if (self->repr != NULL) { + return Py_NewRef(self->repr); + } return Py_NewRef(self->name); } @@ -161,7 +187,7 @@ static PyMethodDef sentinel_methods[] = { static PyMemberDef sentinel_members[] = { {"__name__", Py_T_OBJECT_EX, offsetof(sentinelobject, name), Py_READONLY}, - {"__module__", Py_T_OBJECT_EX, offsetof(sentinelobject, module), Py_READONLY}, + {"__module__", Py_T_OBJECT_EX, offsetof(sentinelobject, module), 0}, {NULL} }; @@ -170,7 +196,7 @@ static PyNumberMethods sentinel_as_number = { }; PyDoc_STRVAR(sentinel_doc, -"sentinel(name, /)\n" +"sentinel(name, /, *, repr=None)\n" "--\n\n" "Create a unique sentinel object with the given name."); diff --git a/Objects/setobject.c b/Objects/setobject.c index 1e630563604..50c5f66c2af 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -1545,6 +1545,16 @@ set_swap_bodies(PySetObject *a, PySetObject *b) FT_ATOMIC_STORE_PTR_RELEASE(b->table, b_table); } +PyObject * +_PySet_Freeze(PyObject *set) +{ + assert(set != NULL); + assert(PySet_CheckExact(set)); + assert(_PyObject_IsUniquelyReferenced(set)); + set->ob_type = &PyFrozenSet_Type; + return Py_NewRef(set); +} + /*[clinic input] @critical_section set.copy @@ -2111,6 +2121,7 @@ set_difference(PySetObject *so, PyObject *other) } /*[clinic input] +@permit_long_summary set.difference as set_difference_multi so: setobject *others: array @@ -2121,7 +2132,7 @@ Return a new set with elements in the set that are not in the others. static PyObject * set_difference_multi_impl(PySetObject *so, PyObject * const *others, Py_ssize_t others_length) -/*[clinic end generated code: output=b0d33fb05d5477a7 input=c1eb448d483416ad]*/ +/*[clinic end generated code: output=b0d33fb05d5477a7 input=e0fbedbf79d91d4e]*/ { Py_ssize_t i; PyObject *result, *other; @@ -2293,6 +2304,7 @@ set_symmetric_difference_update_impl(PySetObject *so, PyObject *other) } /*[clinic input] +@permit_long_summary @critical_section so other set.symmetric_difference so: setobject @@ -2304,7 +2316,7 @@ Return a new set with elements in either the set or other but not both. static PyObject * set_symmetric_difference_impl(PySetObject *so, PyObject *other) -/*[clinic end generated code: output=270ee0b5d42b0797 input=624f6e7bbdf70db1]*/ +/*[clinic end generated code: output=270ee0b5d42b0797 input=8c29b0be90d47feb]*/ { PySetObject *result = (PySetObject *)make_new_set_basetype(Py_TYPE(so), NULL); if (result == NULL) { @@ -2790,7 +2802,8 @@ static PyMethodDef set_methods[] = { SET_SYMMETRIC_DIFFERENCE_UPDATE_METHODDEF SET_UNION_METHODDEF SET_UPDATE_METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("sets are generic over the type of their elements")}, {NULL, NULL} /* sentinel */ }; @@ -2894,7 +2907,8 @@ static PyMethodDef frozenset_methods[] = { SET___SIZEOF___METHODDEF SET_SYMMETRIC_DIFFERENCE_METHODDEF SET_UNION_METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + PyDoc_STR("frozensets are generic over the type of their elements")}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c index 95f10815687..91d1753b822 100644 --- a/Objects/sliceobject.c +++ b/Objects/sliceobject.c @@ -117,8 +117,8 @@ PyObject _Py_EllipsisObject = _PyObject_HEAD_INIT(&PyEllipsis_Type); index is present. */ -static PySliceObject * -_PyBuildSlice_Consume2(PyObject *start, PyObject *stop, PyObject *step) +PyObject * +_PyBuildSlice_ConsumeRefs(PyObject *start, PyObject *stop, PyObject *step) { assert(start != NULL && stop != NULL && step != NULL); PySliceObject *obj = _Py_FREELIST_POP(PySliceObject, slices); @@ -131,13 +131,14 @@ _PyBuildSlice_Consume2(PyObject *start, PyObject *stop, PyObject *step) obj->start = start; obj->stop = stop; - obj->step = Py_NewRef(step); + obj->step = step; _PyObject_GC_TRACK(obj); - return obj; + return (PyObject *)obj; error: Py_DECREF(start); Py_DECREF(stop); + Py_DECREF(step); return NULL; } @@ -153,15 +154,8 @@ PySlice_New(PyObject *start, PyObject *stop, PyObject *step) if (stop == NULL) { stop = Py_None; } - return (PyObject *)_PyBuildSlice_Consume2(Py_NewRef(start), - Py_NewRef(stop), step); -} - -PyObject * -_PyBuildSlice_ConsumeRefs(PyObject *start, PyObject *stop) -{ - assert(start != NULL && stop != NULL); - return (PyObject *)_PyBuildSlice_Consume2(start, stop, Py_None); + return _PyBuildSlice_ConsumeRefs(Py_NewRef(start), + Py_NewRef(stop), Py_NewRef(step)); } PyObject * @@ -177,9 +171,7 @@ _PySlice_FromIndices(Py_ssize_t istart, Py_ssize_t istop) return NULL; } - slice = PySlice_New(start, end, NULL); - Py_DECREF(start); - Py_DECREF(end); + slice = _PyBuildSlice_ConsumeRefs(start, end, Py_None); return slice; } @@ -342,7 +334,9 @@ PyDoc_STRVAR(slice_doc, "slice(stop)\n\ slice(start, stop[, step])\n\ \n\ -Create a slice object. This is used for extended slicing (e.g. a[0:10:2])."); +Create a slice object.\n\ +\n\ +This is used for extended slicing (e.g. a[0:10:2])."); static void slice_dealloc(PyObject *op) @@ -570,7 +564,8 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling."); static PyMethodDef slice_methods[] = { {"indices", slice_indices, METH_O, slice_indices_doc}, {"__reduce__", slice_reduce, METH_NOARGS, reduce_doc}, - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, "See PEP 585"}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, + "slices are generic over the types of their start, end, and step values"}, {NULL, NULL} }; diff --git a/Objects/templateobject.c b/Objects/templateobject.c index a05208e4c8f..1609e82b444 100644 --- a/Objects/templateobject.c +++ b/Objects/templateobject.c @@ -372,7 +372,11 @@ template_reduce(PyObject *op, PyObject *Py_UNUSED(dummy)) static PyMethodDef template_methods[] = { {"__reduce__", template_reduce, METH_NOARGS, NULL}, {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, + // note that this is not supported in typeshed, and it is not clear if the + // type for this is a simple TypeVar or a TypeVarTuple + // for details, see: https://github.com/python/typeshed/issues/14878 + PyDoc_STR("Template supports [] for generic usage")}, {NULL, NULL}, }; diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 94230002427..7ad83e37bd7 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -363,6 +363,9 @@ tuple_repr(PyObject *self) https://github.com/Cyan4973/xxHash/blob/master/doc/xxhash_spec.md The constants for the hash function are defined in pycore_tuple.h. + + If you update this code, update also frozendict_pair_hash() which copied + this code. */ static Py_hash_t @@ -951,11 +954,17 @@ tuple___getnewargs___impl(PyTupleObject *self) return Py_BuildValue("(N)", tuple_slice(self, 0, Py_SIZE(self))); } + +PyDoc_STRVAR(tuple_class_getitem_doc, +"Tuples are generic over the types of their contents.\n\n\ +For example, use ``tuple[int, str]`` for a pair whose first element is an int and second element is a string.\n\n\ +Tuples also support the form ``tuple[T, ...]`` to indicate an arbitrary length tuple of elements of type T."); + static PyMethodDef tuple_methods[] = { TUPLE___GETNEWARGS___METHODDEF TUPLE_INDEX_METHODDEF TUPLE_COUNT_METHODDEF - {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, tuple_class_getitem_doc}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 7cca137f74b..e0464fe6475 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -6490,9 +6490,25 @@ set_flags_recursive(PyTypeObject *self, unsigned long mask, unsigned long flags) void _PyType_SetFlagsRecursive(PyTypeObject *self, unsigned long mask, unsigned long flags) { + BEGIN_TYPE_LOCK(); + /* Ideally, changing flags and invalidating the old version tag would + happen in one step. But type_modified_unlocked() is re-entrant and + cannot run with the world stopped, so we must invalidate first. + Immutable/static-builtin types are skipped because + set_flags_recursive() does not modify them. */ + if (!PyType_HasFeature(self, Py_TPFLAGS_IMMUTABLETYPE) && + (self->tp_flags & mask) != flags) + { + type_modified_unlocked(self); + } + /* Keep TYPE_LOCK held while waiting for stop-the-world so no thread + can reassign a version tag before the flag update. */ + type_lock_prevent_release(); types_stop_world(); set_flags_recursive(self, mask, flags); types_start_world(); + type_lock_allow_release(); + END_TYPE_LOCK(); } /* This is similar to PyObject_GenericGetAttr(), @@ -12925,7 +12941,8 @@ PyDoc_STRVAR(super_doc, "super() -> same as super(__class__, <first argument>)\n" "super(type) -> unbound super object\n" "super(type, obj) -> bound super object; requires isinstance(obj, type)\n" -"super(type, type2) -> bound super object; requires issubclass(type2, type)\n" +"super(type, type2) -> bound super object; requires\n" +" issubclass(type2, type)\n" "Typical use to call a cooperative superclass method:\n" "class C(B):\n" " def meth(self, arg):\n" diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index b92743a884a..3c689761de9 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -10794,35 +10794,33 @@ replace(PyObject *self, PyObject *str1, /* --- Unicode Object Methods --------------------------------------------- */ /*[clinic input] -@permit_long_docstring_body str.title as unicode_title Return a version of the string where each word is titlecased. -More specifically, words start with uppercased characters and all remaining -cased characters have lower case. +More specifically, words start with uppercased characters and all +remaining cased characters have lower case. [clinic start generated code]*/ static PyObject * unicode_title_impl(PyObject *self) -/*[clinic end generated code: output=c75ae03809574902 input=533ce0eb6a7f5d1b]*/ +/*[clinic end generated code: output=c75ae03809574902 input=2a07e2c7df94627a]*/ { return case_operation(self, do_title); } /*[clinic input] -@permit_long_docstring_body str.capitalize as unicode_capitalize Return a capitalized version of the string. -More specifically, make the first character have upper case and the rest lower -case. +More specifically, make the first character have upper case and the +rest lower case. [clinic start generated code]*/ static PyObject * unicode_capitalize_impl(PyObject *self) -/*[clinic end generated code: output=e49a4c333cdb7667 input=a4a15ade41f6f9e9]*/ +/*[clinic end generated code: output=e49a4c333cdb7667 input=e50e50ed45a654cf]*/ { if (PyUnicode_GET_LENGTH(self) == 0) return unicode_result_unchanged(self); @@ -10876,12 +10874,13 @@ str.center as unicode_center Return a centered string of length width. -Padding is done using the specified fill character (default is a space). +Padding is done using the specified fill character (default is +a space). [clinic start generated code]*/ static PyObject * unicode_center_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar) -/*[clinic end generated code: output=420c8859effc7c0c input=b42b247eb26e6519]*/ +/*[clinic end generated code: output=420c8859effc7c0c input=df91017dfd186a78]*/ { Py_ssize_t marg, left; @@ -11441,13 +11440,14 @@ str.count as unicode_count -> Py_ssize_t Return the number of non-overlapping occurrences of substring sub in string S[start:end]. -Optional arguments start and end are interpreted as in slice notation. +Optional arguments start and end are interpreted as in slice +notation. [clinic start generated code]*/ static Py_ssize_t unicode_count_impl(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end) -/*[clinic end generated code: output=8fcc3aef0b18edbf input=8590716ee228b935]*/ +/*[clinic end generated code: output=8fcc3aef0b18edbf input=c9209e05438cc352]*/ { assert(PyUnicode_Check(str)); assert(PyUnicode_Check(substr)); @@ -11520,8 +11520,8 @@ str.encode as unicode_encode errors: str(c_default="NULL") = 'strict' The error handling scheme to use for encoding errors. The default is 'strict' meaning that encoding errors raise a - UnicodeEncodeError. Other possible values are 'ignore', 'replace' and - 'xmlcharrefreplace' as well as any other name registered with + UnicodeEncodeError. Other possible values are 'ignore', 'replace' + and 'xmlcharrefreplace' as well as any other name registered with codecs.register_error that can handle UnicodeEncodeErrors. Encode the string using the codec registered for encoding. @@ -11529,7 +11529,7 @@ Encode the string using the codec registered for encoding. static PyObject * unicode_encode_impl(PyObject *self, const char *encoding, const char *errors) -/*[clinic end generated code: output=bf78b6e2a9470e3c input=f0a9eb293d08fe02]*/ +/*[clinic end generated code: output=bf78b6e2a9470e3c input=b85a9645cb33b729]*/ { return PyUnicode_AsEncodedString(self, encoding, errors); } @@ -11626,14 +11626,14 @@ str.find as unicode_find = str.count Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end]. -Optional arguments start and end are interpreted as in slice notation. -Return -1 on failure. +Optional arguments start and end are interpreted as in slice +notation. Return -1 on failure. [clinic start generated code]*/ static Py_ssize_t unicode_find_impl(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end) -/*[clinic end generated code: output=51dbe6255712e278 input=3a9d650fe4c24695]*/ +/*[clinic end generated code: output=51dbe6255712e278 input=f57e93c59d1ee927]*/ { Py_ssize_t result = any_find_slice(str, substr, start, end, 1); if (result < 0) { @@ -11690,14 +11690,14 @@ str.index as unicode_index = str.count Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end]. -Optional arguments start and end are interpreted as in slice notation. -Raises ValueError when the substring is not found. +Optional arguments start and end are interpreted as in slice +notation. Raises ValueError when the substring is not found. [clinic start generated code]*/ static Py_ssize_t unicode_index_impl(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end) -/*[clinic end generated code: output=77558288837cdf40 input=ae5e48f69ed75b06]*/ +/*[clinic end generated code: output=77558288837cdf40 input=5900ab84de55e628]*/ { Py_ssize_t result = any_find_slice(str, substr, start, end, 1); if (result == -1) { @@ -11710,6 +11710,7 @@ unicode_index_impl(PyObject *str, PyObject *substr, Py_ssize_t start, } /*[clinic input] +@permit_long_summary str.isascii as unicode_isascii Return True if all characters in the string are ASCII, False otherwise. @@ -11720,24 +11721,23 @@ Empty string is ASCII too. static PyObject * unicode_isascii_impl(PyObject *self) -/*[clinic end generated code: output=c5910d64b5a8003f input=5a43cbc6399621d5]*/ +/*[clinic end generated code: output=c5910d64b5a8003f input=dc74e1ced821159f]*/ { return PyBool_FromLong(PyUnicode_IS_ASCII(self)); } /*[clinic input] -@permit_long_docstring_body str.islower as unicode_islower Return True if the string is a lowercase string, False otherwise. -A string is lowercase if all cased characters in the string are lowercase and -there is at least one cased character in the string. +A string is lowercase if all cased characters in the string are +lowercase and there is at least one cased character in the string. [clinic start generated code]*/ static PyObject * unicode_islower_impl(PyObject *self) -/*[clinic end generated code: output=dbd41995bd005b81 input=c6fc0295241a1aaa]*/ +/*[clinic end generated code: output=dbd41995bd005b81 input=1879b48dfc628366]*/ { Py_ssize_t i, length; int kind; @@ -11770,18 +11770,17 @@ unicode_islower_impl(PyObject *self) } /*[clinic input] -@permit_long_docstring_body str.isupper as unicode_isupper Return True if the string is an uppercase string, False otherwise. -A string is uppercase if all cased characters in the string are uppercase and -there is at least one cased character in the string. +A string is uppercase if all cased characters in the string are +uppercase and there is at least one cased character in the string. [clinic start generated code]*/ static PyObject * unicode_isupper_impl(PyObject *self) -/*[clinic end generated code: output=049209c8e7f15f59 input=8d5cb33e67efde72]*/ +/*[clinic end generated code: output=049209c8e7f15f59 input=77d29904aef0e3a0]*/ { Py_ssize_t i, length; int kind; @@ -11870,18 +11869,17 @@ unicode_istitle_impl(PyObject *self) } /*[clinic input] -@permit_long_docstring_body str.isspace as unicode_isspace Return True if the string is a whitespace string, False otherwise. -A string is whitespace if all characters in the string are whitespace and there -is at least one character in the string. +A string is whitespace if all characters in the string are +whitespace and there is at least one character in the string. [clinic start generated code]*/ static PyObject * unicode_isspace_impl(PyObject *self) -/*[clinic end generated code: output=163a63bfa08ac2b9 input=44fe05e248c6e159]*/ +/*[clinic end generated code: output=163a63bfa08ac2b9 input=29e09560fc23fbeb]*/ { Py_ssize_t i, length; int kind; @@ -11909,18 +11907,17 @@ unicode_isspace_impl(PyObject *self) } /*[clinic input] -@permit_long_docstring_body str.isalpha as unicode_isalpha Return True if the string is an alphabetic string, False otherwise. -A string is alphabetic if all characters in the string are alphabetic and there -is at least one character in the string. +A string is alphabetic if all characters in the string are +alphabetic and there is at least one character in the string. [clinic start generated code]*/ static PyObject * unicode_isalpha_impl(PyObject *self) -/*[clinic end generated code: output=cc81b9ac3883ec4f input=c233000624a56e0d]*/ +/*[clinic end generated code: output=cc81b9ac3883ec4f input=9906a07f3e04892e]*/ { Py_ssize_t i, length; int kind; @@ -11947,18 +11944,18 @@ unicode_isalpha_impl(PyObject *self) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary str.isalnum as unicode_isalnum Return True if the string is an alpha-numeric string, False otherwise. -A string is alpha-numeric if all characters in the string are alpha-numeric and -there is at least one character in the string. +A string is alpha-numeric if all characters in the string are +alpha-numeric and there is at least one character in the string. [clinic start generated code]*/ static PyObject * unicode_isalnum_impl(PyObject *self) -/*[clinic end generated code: output=a5a23490ffc3660c input=5d63ba9c9bafdb6b]*/ +/*[clinic end generated code: output=a5a23490ffc3660c input=892f64ebc171fd4f]*/ { int kind; const void *data; @@ -11987,18 +11984,17 @@ unicode_isalnum_impl(PyObject *self) } /*[clinic input] -@permit_long_docstring_body str.isdecimal as unicode_isdecimal Return True if the string is a decimal string, False otherwise. -A string is a decimal string if all characters in the string are decimal and -there is at least one character in the string. +A string is a decimal string if all characters in the string are +decimal and there is at least one character in the string. [clinic start generated code]*/ static PyObject * unicode_isdecimal_impl(PyObject *self) -/*[clinic end generated code: output=fb2dcdb62d3fc548 input=8e84a58b414935a3]*/ +/*[clinic end generated code: output=fb2dcdb62d3fc548 input=63b0453c48cad0af]*/ { Py_ssize_t i, length; int kind; @@ -12025,18 +12021,17 @@ unicode_isdecimal_impl(PyObject *self) } /*[clinic input] -@permit_long_docstring_body str.isdigit as unicode_isdigit Return True if the string is a digit string, False otherwise. -A string is a digit string if all characters in the string are digits and there -is at least one character in the string. +A string is a digit string if all characters in the string are +digits and there is at least one character in the string. [clinic start generated code]*/ static PyObject * unicode_isdigit_impl(PyObject *self) -/*[clinic end generated code: output=10a6985311da6858 input=99e284affb54d4a0]*/ +/*[clinic end generated code: output=10a6985311da6858 input=353b03747b062e4b]*/ { Py_ssize_t i, length; int kind; @@ -12064,18 +12059,17 @@ unicode_isdigit_impl(PyObject *self) } /*[clinic input] -@permit_long_docstring_body str.isnumeric as unicode_isnumeric Return True if the string is a numeric string, False otherwise. -A string is numeric if all characters in the string are numeric and there is at -least one character in the string. +A string is numeric if all characters in the string are numeric and +there is at least one character in the string. [clinic start generated code]*/ static PyObject * unicode_isnumeric_impl(PyObject *self) -/*[clinic end generated code: output=9172a32d9013051a input=e9f5b6b8b29b0ee6]*/ +/*[clinic end generated code: output=9172a32d9013051a input=83b2a072ed7aff48]*/ { Py_ssize_t i, length; int kind; @@ -12145,18 +12139,18 @@ PyUnicode_IsIdentifier(PyObject *self) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary str.isidentifier as unicode_isidentifier Return True if the string is a valid Python identifier, False otherwise. -Call keyword.iskeyword(s) to test whether string s is a reserved identifier, -such as "def" or "class". +Call keyword.iskeyword(s) to test whether string s is a reserved +identifier, such as "def" or "class". [clinic start generated code]*/ static PyObject * unicode_isidentifier_impl(PyObject *self) -/*[clinic end generated code: output=fe585a9666572905 input=86315dd889d7bd04]*/ +/*[clinic end generated code: output=fe585a9666572905 input=cabde62c20a3be6b]*/ { return PyBool_FromLong(PyUnicode_IsIdentifier(self)); } @@ -12196,7 +12190,6 @@ unicode_isprintable_impl(PyObject *self) } /*[clinic input] -@permit_long_docstring_body str.join as unicode_join iterable: object @@ -12204,15 +12197,15 @@ str.join as unicode_join Concatenate any number of strings. -The string whose method is called is inserted in between each given string. -The result is returned as a new string. +The string whose method is called is inserted in between each given +string. The result is returned as a new string. Example: '.'.join(['ab', 'pq', 'rs']) -> 'ab.pq.rs' [clinic start generated code]*/ static PyObject * unicode_join(PyObject *self, PyObject *iterable) -/*[clinic end generated code: output=6857e7cecfe7bf98 input=bac724ed412ef3f8]*/ +/*[clinic end generated code: output=6857e7cecfe7bf98 input=fd330a11ee845fb2]*/ { return PyUnicode_Join(self, iterable); } @@ -12232,12 +12225,13 @@ str.ljust as unicode_ljust Return a left-justified string of length width. -Padding is done using the specified fill character (default is a space). +Padding is done using the specified fill character (default is +a space). [clinic start generated code]*/ static PyObject * unicode_ljust_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar) -/*[clinic end generated code: output=1cce0e0e0a0b84b3 input=3ab599e335e60a32]*/ +/*[clinic end generated code: output=1cce0e0e0a0b84b3 input=8a55f06694c20ed6]*/ { if (PyUnicode_GET_LENGTH(self) >= width) return unicode_result_unchanged(self); @@ -12593,7 +12587,6 @@ unicode_replace_impl(PyObject *self, PyObject *old, PyObject *new, } /*[clinic input] -@permit_long_docstring_body str.removeprefix as unicode_removeprefix prefix: unicode @@ -12601,13 +12594,14 @@ str.removeprefix as unicode_removeprefix Return a str with the given prefix string removed if present. -If the string starts with the prefix string, return string[len(prefix):]. -Otherwise, return a copy of the original string. +If the string starts with the prefix string, return +string[len(prefix):]. Otherwise, return a copy of the original +string. [clinic start generated code]*/ static PyObject * unicode_removeprefix_impl(PyObject *self, PyObject *prefix) -/*[clinic end generated code: output=f1e5945e9763bcb9 input=1989a856dbb813f1]*/ +/*[clinic end generated code: output=f1e5945e9763bcb9 input=90d162724944bfa7]*/ { int match = tailmatch(self, prefix, 0, PY_SSIZE_T_MAX, -1); if (match == -1) { @@ -12628,14 +12622,14 @@ str.removesuffix as unicode_removesuffix Return a str with the given suffix string removed if present. -If the string ends with the suffix string and that suffix is not empty, -return string[:-len(suffix)]. Otherwise, return a copy of the original -string. +If the string ends with the suffix string and that suffix is not +empty, return string[:-len(suffix)]. Otherwise, return a copy of +the original string. [clinic start generated code]*/ static PyObject * unicode_removesuffix_impl(PyObject *self, PyObject *suffix) -/*[clinic end generated code: output=d36629e227636822 input=12cc32561e769be4]*/ +/*[clinic end generated code: output=d36629e227636822 input=6efc96152d4bfcd5]*/ { int match = tailmatch(self, suffix, 0, PY_SSIZE_T_MAX, +1); if (match == -1) { @@ -12745,14 +12739,14 @@ str.rfind as unicode_rfind = str.count Return the highest index in S where substring sub is found, such that sub is contained within S[start:end]. -Optional arguments start and end are interpreted as in slice notation. -Return -1 on failure. +Optional arguments start and end are interpreted as in slice +notation. Return -1 on failure. [clinic start generated code]*/ static Py_ssize_t unicode_rfind_impl(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end) -/*[clinic end generated code: output=880b29f01dd014c8 input=7f7e97d5cd3299a2]*/ +/*[clinic end generated code: output=880b29f01dd014c8 input=2e67789533baf2f5]*/ { Py_ssize_t result = any_find_slice(str, substr, start, end, -1); if (result < 0) { @@ -12767,14 +12761,14 @@ str.rindex as unicode_rindex = str.count Return the highest index in S where substring sub is found, such that sub is contained within S[start:end]. -Optional arguments start and end are interpreted as in slice notation. -Raises ValueError when the substring is not found. +Optional arguments start and end are interpreted as in slice +notation. Raises ValueError when the substring is not found. [clinic start generated code]*/ static Py_ssize_t unicode_rindex_impl(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end) -/*[clinic end generated code: output=5f3aef124c867fe1 input=0363a324740b3e62]*/ +/*[clinic end generated code: output=5f3aef124c867fe1 input=e29d446c8234c9d9]*/ { Py_ssize_t result = any_find_slice(str, substr, start, end, -1); if (result == -1) { @@ -12795,12 +12789,13 @@ str.rjust as unicode_rjust Return a right-justified string of length width. -Padding is done using the specified fill character (default is a space). +Padding is done using the specified fill character (default is +a space). [clinic start generated code]*/ static PyObject * unicode_rjust_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar) -/*[clinic end generated code: output=804a1a57fbe8d5cf input=d05f550b5beb1f72]*/ +/*[clinic end generated code: output=804a1a57fbe8d5cf input=1256a8d659589907]*/ { if (PyUnicode_GET_LENGTH(self) >= width) return unicode_result_unchanged(self); @@ -12824,9 +12819,9 @@ str.split as unicode_split sep: object = None The separator used to split the string. - When set to None (the default value), will split on any whitespace - character (including \n \r \t \f and spaces) and will discard - empty strings from the result. + When set to None (the default value), will split on any + whitespace character (including \n \r \t \f and spaces) and + will discard empty strings from the result. maxsplit: Py_ssize_t = -1 Maximum number of splits. -1 (the default value) means no limit. @@ -12835,15 +12830,15 @@ Return a list of the substrings in the string, using sep as the separator string Splitting starts at the front of the string and works to the end. -Note, str.split() is mainly useful for data that has been intentionally -delimited. With natural text that includes punctuation, consider using -the regular expression module. +Note, str.split() is mainly useful for data that has been +intentionally delimited. With natural text that includes +punctuation, consider using the regular expression module. [clinic start generated code]*/ static PyObject * unicode_split_impl(PyObject *self, PyObject *sep, Py_ssize_t maxsplit) -/*[clinic end generated code: output=3a65b1db356948dc input=2c1fd08a78e038b8]*/ +/*[clinic end generated code: output=3a65b1db356948dc input=288cfd6bc8828f5a]*/ { if (sep == Py_None) return split(self, NULL, maxsplit); @@ -12960,7 +12955,6 @@ PyUnicode_RPartition(PyObject *str_obj, PyObject *sep_obj) } /*[clinic input] -@permit_long_docstring_body str.partition as unicode_partition sep: object @@ -12968,38 +12962,38 @@ str.partition as unicode_partition Partition the string into three parts using the given separator. -This will search for the separator in the string. If the separator is found, -returns a 3-tuple containing the part before the separator, the separator -itself, and the part after it. +This will search for the separator in the string. If the separator +is found, returns a 3-tuple containing the part before the +separator, the separator itself, and the part after it. -If the separator is not found, returns a 3-tuple containing the original string -and two empty strings. +If the separator is not found, returns a 3-tuple containing +the original string and two empty strings. [clinic start generated code]*/ static PyObject * unicode_partition(PyObject *self, PyObject *sep) -/*[clinic end generated code: output=e4ced7bd253ca3c4 input=4d854b520d7b0e97]*/ +/*[clinic end generated code: output=e4ced7bd253ca3c4 input=e45faa8c26270cb1]*/ { return PyUnicode_Partition(self, sep); } /*[clinic input] -@permit_long_docstring_body str.rpartition as unicode_rpartition = str.partition Partition the string into three parts using the given separator. -This will search for the separator in the string, starting at the end. If -the separator is found, returns a 3-tuple containing the part before the -separator, the separator itself, and the part after it. +This will search for the separator in the string, starting at the +end. If the separator is found, returns a 3-tuple containing the +part before the separator, the separator itself, and the part after +it. -If the separator is not found, returns a 3-tuple containing two empty strings -and the original string. +If the separator is not found, returns a 3-tuple containing two +empty strings and the original string. [clinic start generated code]*/ static PyObject * unicode_rpartition(PyObject *self, PyObject *sep) -/*[clinic end generated code: output=1aa13cf1156572aa input=a6adabe91e75b486]*/ +/*[clinic end generated code: output=1aa13cf1156572aa input=53a7f8cb19975b7c]*/ { return PyUnicode_RPartition(self, sep); } @@ -13038,20 +13032,20 @@ unicode_rsplit_impl(PyObject *self, PyObject *sep, Py_ssize_t maxsplit) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary str.splitlines as unicode_splitlines keepends: bool = False Return a list of the lines in the string, breaking at line boundaries. -Line breaks are not included in the resulting list unless keepends is given and -true. +Line breaks are not included in the resulting list unless keepends +is given and true. [clinic start generated code]*/ static PyObject * unicode_splitlines_impl(PyObject *self, int keepends) -/*[clinic end generated code: output=f664dcdad153ec40 input=39eeafbfef61c827]*/ +/*[clinic end generated code: output=f664dcdad153ec40 input=b45ea0f87645a06d]*/ { return PyUnicode_Splitlines(self, keepends); } @@ -13130,18 +13124,19 @@ str.maketrans as unicode_maketrans Return a translation table usable for str.translate(). -If there is only one argument, it must be a dictionary mapping Unicode -ordinals (integers) or characters to Unicode ordinals, strings or None. -Character keys will be then converted to ordinals. -If there are two arguments, they must be strings of equal length, and -in the resulting dictionary, each character in x will be mapped to the -character at the same position in y. If there is a third argument, it -must be a string, whose characters will be mapped to None in the result. +If there is only one argument, it must be a dictionary mapping +Unicode ordinals (integers) or characters to Unicode ordinals, +strings or None. Character keys will be then converted to ordinals. +If there are two arguments, they must be strings of equal length, +and in the resulting dictionary, each character in x will be mapped +to the character at the same position in y. If there is a third +argument, it must be a string, whose characters will be mapped to +None in the result. [clinic start generated code]*/ static PyObject * unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z) -/*[clinic end generated code: output=a925c89452bd5881 input=7bfbf529a293c6c5]*/ +/*[clinic end generated code: output=a925c89452bd5881 input=66bc00a1b4258a6e]*/ { PyObject *new = NULL, *key, *value; Py_ssize_t i = 0; @@ -13221,24 +13216,25 @@ unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary str.translate as unicode_translate table: object - Translation table, which must be a mapping of Unicode ordinals to - Unicode ordinals, strings, or None. + Translation table, which must be a mapping of Unicode ordinals + to Unicode ordinals, strings, or None. / Replace each character in the string using the given translation table. -The table must implement lookup/indexing via __getitem__, for instance a -dictionary or list. If this operation raises LookupError, the character is -left untouched. Characters mapped to None are deleted. +The table must implement lookup/indexing via __getitem__, for +instance a dictionary or list. If this operation raises +LookupError, the character is left untouched. Characters mapped to +None are deleted. [clinic start generated code]*/ static PyObject * unicode_translate(PyObject *self, PyObject *table) -/*[clinic end generated code: output=3cb448ff2fd96bf3 input=699e5fa0ebf9f5e9]*/ +/*[clinic end generated code: output=3cb448ff2fd96bf3 input=48cf0efe06bc1b75]*/ { return _PyUnicode_TranslateCharmap(self, table, "ignore"); } @@ -13434,6 +13430,7 @@ Return a formatted version of the string, using substitutions from mapping.\n\ The substitutions are identified by braces ('{' and '}')."); /*[clinic input] +@permit_long_summary str.__format__ as unicode___format__ format_spec: unicode @@ -13444,7 +13441,7 @@ Return a formatted version of the string as described by format_spec. static PyObject * unicode___format___impl(PyObject *self, PyObject *format_spec) -/*[clinic end generated code: output=45fceaca6d2ba4c8 input=5e135645d167a214]*/ +/*[clinic end generated code: output=45fceaca6d2ba4c8 input=77a2a19f3f7969f2]*/ { _PyUnicodeWriter writer; int ret; diff --git a/Objects/unionobject.c b/Objects/unionobject.c index 0f6b1e44bc2..1dc2927b6e6 100644 --- a/Objects/unionobject.c +++ b/Objects/unionobject.c @@ -518,7 +518,8 @@ union_mro_entries(PyObject *self, PyObject *args) static PyMethodDef union_methods[] = { {"__mro_entries__", union_mro_entries, METH_O}, - {"__class_getitem__", union_class_getitem, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", union_class_getitem, METH_O|METH_CLASS, + PyDoc_STR("Create a union containing the given types")}, {0} }; diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c index 61fa3ddad0b..8446a2dbcf7 100644 --- a/Objects/weakrefobject.c +++ b/Objects/weakrefobject.c @@ -491,7 +491,8 @@ static PyMemberDef weakref_members[] = { static PyMethodDef weakref_methods[] = { {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, + PyDoc_STR("Weakrefs are generic over the type of the referenced object.")}, {NULL} /* Sentinel */ }; diff --git a/PC/_wmimodule.cpp b/PC/_wmimodule.cpp index 86df2c7183c..b9a229b1398 100644 --- a/PC/_wmimodule.cpp +++ b/PC/_wmimodule.cpp @@ -224,20 +224,19 @@ wait_event(HANDLE event, DWORD timeout) /*[clinic input] -@permit_long_docstring_body _wmi.exec_query query: unicode Runs a WMI query against the local machine. -This returns a single string with 'name=value' pairs in a flat array separated -by null characters. +This returns a single string with 'name=value' pairs in a flat array +separated by null characters. [clinic start generated code]*/ static PyObject * _wmi_exec_query_impl(PyObject *module, PyObject *query) -/*[clinic end generated code: output=a62303d5bb5e003f input=621f5c50c56d06d0]*/ +/*[clinic end generated code: output=a62303d5bb5e003f input=a8d5710acdfbf515]*/ /*[clinic end generated code]*/ { diff --git a/PC/clinic/_wmimodule.cpp.h b/PC/clinic/_wmimodule.cpp.h index 38d52d0329d..6c18990f056 100644 --- a/PC/clinic/_wmimodule.cpp.h +++ b/PC/clinic/_wmimodule.cpp.h @@ -14,8 +14,8 @@ PyDoc_STRVAR(_wmi_exec_query__doc__, "\n" "Runs a WMI query against the local machine.\n" "\n" -"This returns a single string with \'name=value\' pairs in a flat array separated\n" -"by null characters."); +"This returns a single string with \'name=value\' pairs in a flat array\n" +"separated by null characters."); #define _WMI_EXEC_QUERY_METHODDEF \ {"exec_query", _PyCFunction_CAST(_wmi_exec_query), METH_FASTCALL|METH_KEYWORDS, _wmi_exec_query__doc__}, @@ -72,4 +72,4 @@ _wmi_exec_query(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj exit: return return_value; } -/*[clinic end generated code: output=802bcbcba69e8d0e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f246d0e568cc2d2c input=a9049054013a1b77]*/ diff --git a/PC/layout/main.py b/PC/layout/main.py index cb0c23c3b69..eeeb4b89657 100644 --- a/PC/layout/main.py +++ b/PC/layout/main.py @@ -22,6 +22,7 @@ __path__ = [str(Path(__file__).resolve().parent)] from .support.appxmanifest import * +from .support.builddetails import * from .support.catalog import * from .support.constants import * from .support.filesets import * @@ -317,6 +318,9 @@ def _c(d): for dest, src in get_appx_layout(ns): yield dest, src + for dest, src in get_builddetails(ns): + yield dest, src + if ns.include_cat: if ns.flat_dlls: yield ns.include_cat.name, ns.include_cat diff --git a/PC/layout/support/builddetails.py b/PC/layout/support/builddetails.py new file mode 100644 index 00000000000..6ef860eeb04 --- /dev/null +++ b/PC/layout/support/builddetails.py @@ -0,0 +1,119 @@ +import io +import json +from . import constants + +_LEVELS = { + 0xA0: "alpha", + 0xB0: "beta", + 0xC0: "candidate", + 0xF0: "final", +} + + +_TEMPLATE = { + "schema_version": "1.0", + "base_prefix": ".", + "base_interpreter": "python.exe", + "platform": None, # Set later + "language": { + "version": f"{constants.VER_MAJOR}.{constants.VER_MINOR}", + "version_info": { + "major": constants.VER_MAJOR, + "minor": constants.VER_MINOR, + "micro": constants.VER_MICRO, + "releaselevel": _LEVELS.get(constants.VER_FIELD4 & 0xF0, "final"), + "serial": constants.VER_FIELD4 & 0x0F, + }, + }, + "implementation": { + "name": "cpython", + "cache_tag": f"cpython-{constants.VER_MAJOR}{constants.VER_MINOR}", + "version": { + "major": constants.VER_MAJOR, + "minor": constants.VER_MINOR, + "micro": constants.VER_MICRO, + "releaselevel": _LEVELS.get(constants.VER_FIELD4 & 0xF0, "final"), + "serial": constants.VER_FIELD4 & 0x0F, + }, + "hexversion": constants.VER_HEXVERSION, + }, + "abi": { + "flags": [], + "extension_suffix": ".pyd", + "stable_abi_suffix": ".pyd", + }, + "suffixes": { + "source": [".py", ".pyw"], + "bytecode": [".pyc"], + "extensions": [".pyd"], + }, + "libpython": { + "dynamic": constants.PYTHON_DLL_NAME, + "dynamic_stableabi": constants.PYTHON_STABLE_DLL_NAME, + "link_extensions": True, + }, + "c_api": { + }, +} + + +def _with_d(path): + pre, sep, post = path.partition(".") + return pre + "_d" + sep + post + + +def _add_d(data, *args): + for a in args[:-1]: + data = data[a] + a = args[-1] + v = data[a] + if isinstance(v, list): + data[a] = [_with_d(i) for i in data[a]] + else: + data[a] = _with_d(data[a]) + + +def get_builddetails(ns): + if not ns.include_builddetails_json: + return + + details = dict(_TEMPLATE) + + plat = { + "win32": "win32", + "amd64": "win-amd64", + "arm64": "win-arm64", + }.get(ns.arch, ns.arch) + + pyd_abi_flags = "" + if ns.include_freethreaded: + details["abi"]["flags"].append("t") + pyd_abi_flags += "t" + if ns.debug: + details["abi"]["flags"].append("d") + + norm_plat = plat.replace("-", "_") + ext_suffix = f".cp{constants.VER_MAJOR}{constants.VER_MINOR}{pyd_abi_flags}-{norm_plat}.pyd" + details["abi"]["extension_suffix"] = ext_suffix + details["suffixes"]["extensions"].insert(0, ext_suffix) + + details["platform"] = plat + + if ns.include_dev: + details["c_api"]["headers"] = "Include" + + if ns.include_freethreaded: + details["libpython"]["dynamic"] = constants.FREETHREADED_PYTHON_DLL_NAME + details["libpython"]["dynamic_stableabi"] = constants.FREETHREADED_PYTHON_STABLE_DLL_NAME + + if ns.debug: + _add_d(details, "base_interpreter") + _add_d(details, "abi", "stable_abi_suffix") + _add_d(details, "abi", "extension_suffix") + _add_d(details, "suffixes", "extensions") + _add_d(details, "libpython", "dynamic") + _add_d(details, "libpython", "dynamic_stableabi") + + buffer = io.StringIO() + json.dump(details, buffer, indent=2) + yield "build-details.json", ("build-details.json", buffer.getvalue().encode()) diff --git a/PC/layout/support/constants.py b/PC/layout/support/constants.py index 6b8c915e519..cb16f534685 100644 --- a/PC/layout/support/constants.py +++ b/PC/layout/support/constants.py @@ -23,6 +23,14 @@ def _unpack_hexversion(): return _read_patchlevel_version(pathlib.Path(os.getenv("PYTHONINCLUDE"))) except OSError: pass + # Manual search for a '-s <source dir>` arument + try: + src = sys.argv[sys.argv.index("-s") + 1] + return _read_patchlevel_version(pathlib.Path(src) / "Include") + except (IndexError, ValueError): + pass + except OSError: + pass return struct.pack(">i", sys.hexversion) @@ -68,6 +76,7 @@ def check_patchlevel_version(sources): VER_MAJOR, VER_MINOR, VER_MICRO, VER_FIELD4 = _unpack_hexversion() +VER_HEXVERSION = (VER_MAJOR << 24) | (VER_MINOR << 16) | (VER_MICRO << 8) | (VER_FIELD4) VER_SUFFIX = _get_suffix(VER_FIELD4) VER_FIELD3 = VER_MICRO << 8 | VER_FIELD4 VER_DOT = "{}.{}".format(VER_MAJOR, VER_MINOR) diff --git a/PC/layout/support/options.py b/PC/layout/support/options.py index e8c39338542..f67d8ba04d9 100644 --- a/PC/layout/support/options.py +++ b/PC/layout/support/options.py @@ -39,6 +39,7 @@ def public(f): "install-json": {"help": "a PyManager __install__.json file"}, "install-embed-json": {"help": "a PyManager __install__.json file for embeddable distro"}, "install-test-json": {"help": "a PyManager __install__.json for the test distro"}, + "builddetails-json": {"help": "a PEP 739 build-details.json"}, } @@ -69,6 +70,7 @@ def public(f): "props", "nuspec", "alias", + "builddetails-json", ], }, "iot": {"help": "Windows IoT Core", "options": ["alias", "stable", "pip"]}, @@ -85,6 +87,7 @@ def public(f): "symbols", "html-doc", "alias", + "builddetails-json", ], }, "embed": { @@ -96,6 +99,7 @@ def public(f): "flat-dlls", "underpth", "precompile", + "builddetails-json", ], }, "pymanager": { @@ -108,7 +112,9 @@ def public(f): "venv", "dev", "html-doc", + "alias", "install-json", + "builddetails-json", ], }, "pymanager-test": { @@ -123,7 +129,9 @@ def public(f): "html-doc", "symbols", "tests", + "alias", "install-test-json", + "builddetails-json", ], }, } diff --git a/PC/layout/support/pymanager.py b/PC/layout/support/pymanager.py index 831d49ea3f9..f6316e0295c 100644 --- a/PC/layout/support/pymanager.py +++ b/PC/layout/support/pymanager.py @@ -66,8 +66,9 @@ def calculate_install_json(ns, *, for_embed=False, for_test=False): if ns.include_freethreaded: # Free-threaded distro comes with a tag suffix TAG_SUFFIX = "t" - TARGET = f"python{VER_MAJOR}.{VER_MINOR}t.exe" - TARGETW = f"pythonw{VER_MAJOR}.{VER_MINOR}t.exe" + if not ns.include_alias: + TARGET = f"python{VER_MAJOR}.{VER_MINOR}t.exe" + TARGETW = f"pythonw{VER_MAJOR}.{VER_MINOR}t.exe" DISPLAY_TAGS.append("free-threaded") FILE_SUFFIX = f"t-{ns.arch}" diff --git a/PC/python_uwp.cpp b/PC/python_uwp.cpp index 8cdb8d722cd..1b44216dc20 100644 --- a/PC/python_uwp.cpp +++ b/PC/python_uwp.cpp @@ -13,6 +13,7 @@ #if defined(__clang__) #define _SILENCE_CLANG_COROUTINE_MESSAGE #endif +#define _SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS #include <appmodel.h> #include <winrt\Windows.ApplicationModel.h> diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index 405285b65dd..f6ba3d0fef3 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -56,9 +56,9 @@ set libraries=%libraries% bzip2-1.0.8 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.4.4 if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-3.5.6 set libraries=%libraries% mpdecimal-4.0.0 -set libraries=%libraries% sqlite-3.50.4.0 -if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.15.0 -if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.15.0 +set libraries=%libraries% sqlite-3.53.1.0 +if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-9.0.3.0 +if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-9.0.3.1 set libraries=%libraries% xz-5.8.1.1 set libraries=%libraries% zlib-ng-2.2.4 set libraries=%libraries% zstd-1.5.7 @@ -80,7 +80,7 @@ echo.Fetching external binaries... set binaries= if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi-3.4.4 if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-3.5.6 -if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.15.0 +if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-9.0.3.0 if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06 if NOT "%IncludeLLVM%"=="false" set binaries=%binaries% llvm-21.1.4.0 diff --git a/PCbuild/python.props b/PCbuild/python.props index f70321f887e..edcda8fd8fc 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -98,7 +98,7 @@ <Import Project="$(ExternalProps)" Condition="$(ExternalProps) != '' and Exists('$(ExternalProps)')" /> <PropertyGroup> - <sqlite3Dir Condition="$(sqlite3Dir) == ''">$(ExternalsDir)sqlite-3.50.4.0\</sqlite3Dir> + <sqlite3Dir Condition="$(sqlite3Dir) == ''">$(ExternalsDir)sqlite-3.53.1.0\</sqlite3Dir> <bz2Dir Condition="$(bz2Dir) == ''">$(ExternalsDir)bzip2-1.0.8\</bz2Dir> <lzmaDir Condition="$(lzmaDir) == ''">$(ExternalsDir)xz-5.8.1.1\</lzmaDir> <libffiDir Condition="$(libffiDir) == ''">$(ExternalsDir)libffi-3.4.4\</libffiDir> diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj index 70dabaa3c8b..417ede34c54 100644 --- a/PCbuild/python.vcxproj +++ b/PCbuild/python.vcxproj @@ -135,6 +135,14 @@ set PYTHONPATH=$(PySourcePath)Lib "$(OutDir)$(PyExeName)$(PyDebugExt).exe" "$(PySourcePath)PC\validate_ucrtbase.py" $(UcrtName)' ContinueOnError="true" /> </Target> + <Target Name="CopyFreethreadedBinary" AfterTargets="AfterBuild" + Condition="$(DisableGil) == 'true' and $(Configuration) != 'PGInstrument'"> + <Message Text="Duplicating $(TargetPath) to $(PyExeName)$(MajorVersionNumber).$(MinorVersionNumber)t$(PyDebugExt).exe for free-threaded compatibility" /> + <Copy SourceFiles="$(TargetPath)" + DestinationFiles="$(OutDir)\$(PyExeName)$(MajorVersionNumber).$(MinorVersionNumber)t$(PyDebugExt).exe" + SkipUnchangedFiles="true" + UseHardLinksIfPossible="true" /> + </Target> <Target Name="GeneratePythonBat" AfterTargets="AfterBuild"> <PropertyGroup> <_Content>@rem This script invokes the most recently built Python with all arguments diff --git a/PCbuild/pythonw.vcxproj b/PCbuild/pythonw.vcxproj index c6a5b8ce90a..244cdf622ad 100644 --- a/PCbuild/pythonw.vcxproj +++ b/PCbuild/pythonw.vcxproj @@ -115,4 +115,12 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> + <Target Name="CopyFreethreadedBinary" AfterTargets="AfterBuild" + Condition="$(DisableGil) == 'true' and $(Configuration) != 'PGInstrument'"> + <Message Text="Duplicating $(TargetPath) to $(PyWExeName)$(MajorVersionNumber).$(MinorVersionNumber)t$(PyDebugExt).exe for free-threaded compatibility" /> + <Copy SourceFiles="$(TargetPath)" + DestinationFiles="$(OutDir)\$(PyWExeName)$(MajorVersionNumber).$(MinorVersionNumber)t$(PyDebugExt).exe" + SkipUnchangedFiles="true" + UseHardLinksIfPossible="true" /> + </Target> </Project> \ No newline at end of file diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt index 14aac0b0dc8..ea8adf21c27 100644 --- a/PCbuild/readme.txt +++ b/PCbuild/readme.txt @@ -242,12 +242,12 @@ _ssl again when building. _sqlite3 - Wraps SQLite 3.50.4, which is itself built by sqlite3.vcxproj + Wraps SQLite 3.53.1, which is itself built by sqlite3.vcxproj Homepage: https://www.sqlite.org/ _tkinter - Wraps version 8.6.15 of the Tk windowing system, which is downloaded + Wraps version 9.0.3 of the Tk windowing system, which is downloaded from our binaries repository at https://github.com/python/cpython-bin-deps. diff --git a/PCbuild/tcltk.props b/PCbuild/tcltk.props index a1da1155b88..28e8c0db4d1 100644 --- a/PCbuild/tcltk.props +++ b/PCbuild/tcltk.props @@ -2,7 +2,7 @@ <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="pyproject.props" Condition="$(__PyProject_Props_Imported) != 'true'" /> <PropertyGroup> - <TclVersion Condition="$(TclVersion) == ''">8.6.15.0</TclVersion> + <TclVersion Condition="$(TclVersion) == ''">9.0.3.0</TclVersion> <TkVersion Condition="$(TkVersion) == ''">$(TclVersion)</TkVersion> <TclMajorVersion>$([System.Version]::Parse($(TclVersion)).Major)</TclMajorVersion> <TclMinorVersion>$([System.Version]::Parse($(TclVersion)).Minor)</TclMinorVersion> @@ -12,7 +12,9 @@ <TkMinorVersion>$([System.Version]::Parse($(TkVersion)).Minor)</TkMinorVersion> <TkPatchLevel>$([System.Version]::Parse($(TkVersion)).Build)</TkPatchLevel> <TkRevision>$([System.Version]::Parse($(TkVersion)).Revision)</TkRevision> - <tclDir Condition="$(tclDir) == ''">$(ExternalsDir)tcl-core-$(TclVersion)\</tclDir> + <!-- Back compat hack. If you're here wondering about -core vs not, do us both a favor and just override the whole tclDir variable --> + <tclDir Condition="$(tclDir) == '' and $(TclMajorVersion) == '8'">$(ExternalsDir)tcl-core-$(TclVersion)\</tclDir> + <tclDir Condition="$(tclDir) == ''">$(ExternalsDir)tcl-$(TclVersion)\</tclDir> <tkDir Condition="$(tkDir) == ''">$(ExternalsDir)tk-$(TkVersion)\</tkDir> <tcltkDir Condition="$(tcltkDir) == ''">$(ExternalsDir)tcltk-$(TclVersion)\$(ArchName)\</tcltkDir> <tcltkSuffix Condition="'$(TclMajorVersion)' == '8'">t</tcltkSuffix> diff --git a/PCbuild/venvlauncher.vcxproj b/PCbuild/venvlauncher.vcxproj index abaf3a979af..a2e8ffa82b1 100644 --- a/PCbuild/venvlauncher.vcxproj +++ b/PCbuild/venvlauncher.vcxproj @@ -89,10 +89,13 @@ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="pyproject.props" /> </ImportGroup> - <PropertyGroup Label="UserMacros" /> + <PropertyGroup Label="UserMacros"> + <ExeName>$(PyExeName)$(PyDebugExt).exe</ExeName> + <ExeName Condition="$(DisableGil) == 'true'">$(PyExeName)$(MajorVersionNumber).$(MinorVersionNumber)t$(PyDebugExt).exe</ExeName> + </PropertyGroup> <ItemDefinitionGroup> <ClCompile> - <PreprocessorDefinitions>EXENAME=L"$(PyExeName)$(PyDebugExt).exe";_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>EXENAME=L"$(ExeName)";_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <ResourceCompile> diff --git a/PCbuild/venvwlauncher.vcxproj b/PCbuild/venvwlauncher.vcxproj index c58280deb8a..f2aaf83fe2b 100644 --- a/PCbuild/venvwlauncher.vcxproj +++ b/PCbuild/venvwlauncher.vcxproj @@ -89,10 +89,13 @@ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="pyproject.props" /> </ImportGroup> - <PropertyGroup Label="UserMacros" /> + <PropertyGroup Label="UserMacros"> + <ExeName>$(PyWExeName)$(PyDebugExt).exe</ExeName> + <ExeName Condition="$(DisableGil) == 'true'">$(PyWExeName)$(MajorVersionNumber).$(MinorVersionNumber)t$(PyDebugExt).exe</ExeName> + </PropertyGroup> <ItemDefinitionGroup> <ClCompile> - <PreprocessorDefinitions>EXENAME=L"$(PyWExeName)$(PyDebugExt).exe";_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>EXENAME=L"$(ExeName)";_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> <ResourceCompile> diff --git a/Platforms/Android/__main__.py b/Platforms/Android/__main__.py index d2546cf76c2..5c41aaca6eb 100755 --- a/Platforms/Android/__main__.py +++ b/Platforms/Android/__main__.py @@ -220,7 +220,7 @@ def unpack_deps(host, prefix_dir, cache_dir): "bzip2-1.0.8-3", "libffi-3.4.4-3", "openssl-3.5.6-0", - "sqlite-3.50.4-0", + "sqlite-3.53.1-0", "xz-5.4.6-1", "zstd-1.5.7-2" ]: diff --git a/Platforms/Apple/testbed/__main__.py b/Platforms/Apple/testbed/__main__.py index 0dd77ab8b82..b3eed38571d 100644 --- a/Platforms/Apple/testbed/__main__.py +++ b/Platforms/Apple/testbed/__main__.py @@ -21,7 +21,7 @@ LOG_PREFIX_REGEX = re.compile( r"^\d{4}-\d{2}-\d{2}" # YYYY-MM-DD r"\s+\d+:\d{2}:\d{2}\.\d+\+\d{4}" # HH:MM:SS.ssssss+ZZZZ - r"\s+iOSTestbed\[\d+:\w+\]" # Process/thread ID + r"\s+iOSTestbed\[\d+:\w+\] " # Process/thread ID ) diff --git a/Programs/_testembed.c b/Programs/_testembed.c index 278984ddb17..7246cc06fff 100644 --- a/Programs/_testembed.c +++ b/Programs/_testembed.c @@ -41,8 +41,13 @@ char **main_argv; #define PROGRAM "test_embed" /* Use path starting with "./" avoids a search along the PATH */ -#define PROGRAM_NAME L"./_testembed" -#define PROGRAM_NAME_UTF8 "./_testembed" +#ifdef __CYGWIN__ +# define PROGRAM_NAME L"./_testembed.exe" +# define PROGRAM_NAME_UTF8 "./_testembed.exe" +#else +# define PROGRAM_NAME L"./_testembed" +# define PROGRAM_NAME_UTF8 "./_testembed" +#endif #define INIT_LOOPS 4 diff --git a/Python/asm_trampoline_aarch64.S b/Python/asm_trampoline_aarch64.S new file mode 100644 index 00000000000..b3aeb728de2 --- /dev/null +++ b/Python/asm_trampoline_aarch64.S @@ -0,0 +1,77 @@ +/* + * References: + * - https://developer.arm.com/documentation/101028/0012/5--Feature-test-macros + * - https://github.com/ARM-software/abi-aa/blob/main/aaelf64/aaelf64.rst + */ + +#if defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1 + #define BTI_J hint 36 /* bti j: for jumps, IE br instructions */ + #define BTI_C hint 34 /* bti c: for calls, IE bl instructions */ + #define GNU_PROPERTY_AARCH64_BTI 1 /* bit 0 GNU Notes is for BTI support */ +#else + #define BTI_J + #define BTI_C + #define GNU_PROPERTY_AARCH64_BTI 0 +#endif + +#if defined(__ARM_FEATURE_PAC_DEFAULT) + #if __ARM_FEATURE_PAC_DEFAULT & 1 + #define SIGN_LR hint 25 /* paciasp: sign with the A key */ + #define VERIFY_LR hint 29 /* autiasp: verify with the A key */ + #elif __ARM_FEATURE_PAC_DEFAULT & 2 + #define SIGN_LR hint 27 /* pacibsp: sign with the b key */ + #define VERIFY_LR hint 31 /* autibsp: verify with the b key */ + #endif + #define GNU_PROPERTY_AARCH64_POINTER_AUTH 2 /* bit 1 GNU Notes is for PAC support */ +#else + #define SIGN_LR BTI_C + #define VERIFY_LR + #define GNU_PROPERTY_AARCH64_POINTER_AUTH 0 +#endif + +#if defined(__ARM_FEATURE_GCS_DEFAULT) && __ARM_FEATURE_GCS_DEFAULT == 1 + #define GNU_PROPERTY_AARCH64_GCS 4 /* bit 2 GNU Notes is for GCS support */ +#else + #define GNU_PROPERTY_AARCH64_GCS 0 +#endif + + .text +#if defined(__aarch64__) && defined(__AARCH64EL__) && !defined(__ILP32__) +#if defined(__APPLE__) + .globl __Py_trampoline_func_start +__Py_trampoline_func_start: +#else + .globl _Py_trampoline_func_start +_Py_trampoline_func_start: +#endif + SIGN_LR + stp x29, x30, [sp, -16]! + mov x29, sp + blr x3 + ldp x29, x30, [sp], 16 + VERIFY_LR + ret +#if defined(__APPLE__) + .globl __Py_trampoline_func_end +__Py_trampoline_func_end: +#else + .globl _Py_trampoline_func_end +_Py_trampoline_func_end: + .section .note.GNU-stack,"",@progbits +#endif + +/* Add the BTI, PAC and GCS support to GNU Notes section */ +#if GNU_PROPERTY_AARCH64_BTI != 0 || GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 || GNU_PROPERTY_AARCH64_GCS != 0 + .pushsection .note.gnu.property, "a"; /* Start a new allocatable section */ + .balign 8; /* align it on a byte boundry */ + .long 4; /* size of "GNU\0" */ + .long 0x10; /* size of descriptor */ + .long 0x5; /* NT_GNU_PROPERTY_TYPE_0 */ + .asciz "GNU"; + .long 0xc0000000; /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ + .long 4; /* Four bytes of data */ + .long (GNU_PROPERTY_AARCH64_BTI|GNU_PROPERTY_AARCH64_POINTER_AUTH|GNU_PROPERTY_AARCH64_GCS); /* BTI, PAC or GCS is enabled */ + .long 0; /* padding for 8 byte alignment */ + .popsection; /* end the section */ +#endif +#endif // __aarch64__ && __AARCH64EL__ && !__ILP32__ diff --git a/Python/asm_trampoline_riscv64.S b/Python/asm_trampoline_riscv64.S new file mode 100644 index 00000000000..6125ba95373 --- /dev/null +++ b/Python/asm_trampoline_riscv64.S @@ -0,0 +1,12 @@ + .text + .globl _Py_trampoline_func_start +_Py_trampoline_func_start: + addi sp,sp,-16 + sd ra,8(sp) + jalr a3 + ld ra,8(sp) + addi sp,sp,16 + jr ra + .globl _Py_trampoline_func_end +_Py_trampoline_func_end: + .section .note.GNU-stack,"",@progbits diff --git a/Python/asm_trampoline_x86_64.S b/Python/asm_trampoline_x86_64.S new file mode 100644 index 00000000000..0e6b11589ea --- /dev/null +++ b/Python/asm_trampoline_x86_64.S @@ -0,0 +1,45 @@ + .text +#ifdef __x86_64__ +#if defined(__APPLE__) + .globl __Py_trampoline_func_start +__Py_trampoline_func_start: +#else + .globl _Py_trampoline_func_start +_Py_trampoline_func_start: +#endif +#if defined(__CET__) && (__CET__ & 1) + endbr64 +#endif + push %rbp + mov %rsp, %rbp + call *%rcx + pop %rbp + ret +#if defined(__APPLE__) + .globl __Py_trampoline_func_end +__Py_trampoline_func_end: +#else + .globl _Py_trampoline_func_end +_Py_trampoline_func_end: + .section .note.GNU-stack,"",@progbits +#endif +# Note for indicating the assembly code supports CET +#if defined(__CET__) && (__CET__ & 1) + .section .note.gnu.property,"a" + .align 8 + .long 1f - 0f + .long 4f - 1f + .long 5 +0: + .string "GNU" +1: + .align 8 + .long 0xc0000002 + .long 3f - 2f +2: + .long 0x3 +3: + .align 8 +4: +#endif +#endif // __x86_64__ diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 35b30a24331..d5129bf6a5a 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -252,7 +252,6 @@ PyDoc_STRVAR(build_class_doc, Internal helper function used by the class statement."); /*[clinic input] -@permit_long_docstring_body __import__ as builtin___import__ name: object @@ -273,15 +272,16 @@ should be a list of names to emulate ``from name import ...``, or an empty list to emulate ``import name``. When importing a module from a package, note that __import__('A.B', ...) returns package A when fromlist is empty, but its submodule B when -fromlist is not empty. The level argument is used to determine whether to -perform absolute or relative imports: 0 is absolute, while a positive number -is the number of parent directories to search relative to the current module. +fromlist is not empty. The level argument is used to determine whether +to perform absolute or relative imports: 0 is absolute, while a positive +number is the number of parent directories to search relative to the +current module. [clinic start generated code]*/ static PyObject * builtin___import___impl(PyObject *module, PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level) -/*[clinic end generated code: output=4febeda88a0cd245 input=01a3283590eae93a]*/ +/*[clinic end generated code: output=4febeda88a0cd245 input=e3096a230383f72d]*/ { return PyImport_ImportModuleLevelObject(name, globals, locals, fromlist, level); @@ -299,15 +299,15 @@ __lazy_import__ as builtin___lazy_import__ Lazily imports a module. -Returns either the module to be imported or a imp.lazy_module object which -indicates the module to be lazily imported. +Returns either the module to be imported or a imp.lazy_module object +which indicates the module to be lazily imported. [clinic start generated code]*/ static PyObject * builtin___lazy_import___impl(PyObject *module, PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level) -/*[clinic end generated code: output=300f1771094b9e8c input=9394874f340b2948]*/ +/*[clinic end generated code: output=300f1771094b9e8c input=9c85cccd6a885b9b]*/ { PyObject *builtins; PyThreadState *tstate = PyThreadState_GET(); @@ -696,8 +696,9 @@ PyDoc_STRVAR(filter_doc, "filter(function, iterable, /)\n\ --\n\ \n\ -Return an iterator yielding those items of iterable for which function(item)\n\ -is true. If function is None, return the items that are true."); +Return an iterator yielding those items of iterable for which\n\ +function(item) is true. If function is None, return the items that\n\ +are true."); PyTypeObject PyFilter_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) @@ -770,6 +771,7 @@ builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec) } /*[clinic input] +@permit_long_summary chr as builtin_chr i: object @@ -780,7 +782,7 @@ Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff. static PyObject * builtin_chr(PyObject *module, PyObject *i) -/*[clinic end generated code: output=d34f25b8035a9b10 input=f919867f0ba2f496]*/ +/*[clinic end generated code: output=d34f25b8035a9b10 input=a9b255f2d2e503f0]*/ { int overflow; long v = PyLong_AsLongAndOverflow(i, &overflow); @@ -804,6 +806,7 @@ builtin_chr(PyObject *module, PyObject *i) /*[clinic input] +@permit_long_summary compile as builtin_compile source: object @@ -818,23 +821,24 @@ compile as builtin_compile Compile source into a code object that can be executed by exec() or eval(). -The source code may represent a Python module, statement or expression. +The source code may represent a Python module, statement or +expression. The filename will be used for run-time error messages. The mode must be 'exec' to compile a module, 'single' to compile a single (interactive) statement, or 'eval' to compile an expression. -The flags argument, if present, controls which future statements influence -the compilation of the code. +The flags argument, if present, controls which future statements +influence the compilation of the code. The dont_inherit argument, if true, stops the compilation inheriting the effects of any future statements in effect in the code calling -compile; if absent or false these statements do influence the compilation, -in addition to any features explicitly specified. +compile; if absent or false these statements do influence the +compilation, in addition to any features explicitly specified. [clinic start generated code]*/ static PyObject * builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, const char *mode, int flags, int dont_inherit, int optimize, PyObject *modname, int feature_version) -/*[clinic end generated code: output=9a0dce1945917a86 input=ddeae1e0253459dc]*/ +/*[clinic end generated code: output=9a0dce1945917a86 input=444c4fe466a97279]*/ { PyObject *source_copy; const char *str; @@ -982,10 +986,10 @@ PyDoc_STRVAR(dir_doc, "dir([object]) -> list of strings\n" "\n" "If called without an argument, return the names in the current scope.\n" -"Else, return an alphabetized list of names comprising (some of) the attributes\n" -"of the given object, and of attributes reachable from it.\n" -"If the object supplies a method named __dir__, it will be used; otherwise\n" -"the default dir() logic is used and returns:\n" +"Else, return an alphabetized list of names comprising (some of) the\n" +"attributes of the given object, and of attributes reachable from it.\n" +"If the object supplies a method named __dir__, it will be used;\n" +"otherwise the default dir() logic is used and returns:\n" " for a module object: the module's attributes.\n" " for a class object: its attributes, and recursively the attributes\n" " of its bases.\n" @@ -1326,9 +1330,11 @@ builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs) PyDoc_STRVAR(getattr_doc, "getattr(object, name[, default]) -> value\n\ \n\ -Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\ -When a default argument is given, it is returned when the attribute doesn't\n\ -exist; without it, an exception is raised in that case."); +Get a named attribute from an object.\n\ +\n\ +getattr(x, 'y') is equivalent to x.y.\n\ +When a default argument is given, it is returned when the attribute\n\ +doesn't exist; without it, an exception is raised in that case."); /*[clinic input] @@ -1336,13 +1342,13 @@ globals as builtin_globals Return the dictionary containing the current scope's global variables. -NOTE: Updates to this dictionary *will* affect name lookups in the current -global scope and vice-versa. +NOTE: Updates to this dictionary *will* affect name lookups in the +current global scope and vice-versa. [clinic start generated code]*/ static PyObject * builtin_globals_impl(PyObject *module) -/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/ +/*[clinic end generated code: output=e5dd1527067b94d2 input=6d725a9b48d1eaeb]*/ { PyObject *globals; if (_PyEval_GetFrame() != NULL) { @@ -1695,8 +1701,8 @@ PyDoc_STRVAR(map_doc, Make an iterator that computes the function using arguments from\n\ each of the iterables. Stops when the shortest iterable is exhausted.\n\ \n\ -If strict is true and one of the arguments is exhausted before the others,\n\ -raise a ValueError."); +If strict is true and one of the arguments is exhausted before the\n\ +others, raise a ValueError."); PyTypeObject PyMap_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) @@ -1783,8 +1789,8 @@ builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs) PyDoc_STRVAR(next_doc, "next(iterator[, default])\n\ \n\ -Return the next item from the iterator. If default is given and the iterator\n\ -is exhausted, it is returned instead of raising StopIteration."); +Return the next item from the iterator. If default is given and the\n\ +iterator is exhausted, it is returned instead of raising StopIteration."); /*[clinic input] @@ -1907,7 +1913,8 @@ iter(callable, sentinel) -> iterator\n\ \n\ Get an iterator from an object. In the first form, the argument must\n\ supply its own iterator, or be a sequence.\n\ -In the second form, the callable is called until it returns the sentinel."); +In the second form, the callable is called until it returns the\n\ +sentinel."); /*[clinic input] @@ -2001,14 +2008,15 @@ locals as builtin_locals Return a dictionary containing the current scope's local variables. -NOTE: Whether or not updates to this dictionary will affect name lookups in -the local scope and vice-versa is *implementation dependent* and not -covered by any backwards compatibility guarantees. +NOTE: Whether or not updates to this dictionary will affect name +lookups in the local scope and vice-versa is *implementation +dependent* and not covered by any backwards compatibility +guarantees. [clinic start generated code]*/ static PyObject * builtin_locals_impl(PyObject *module) -/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/ +/*[clinic end generated code: output=b46c94015ce11448 input=989cc75c22167c42]*/ { PyObject *locals; if (_PyEval_GetFrame() != NULL) { @@ -2260,6 +2268,7 @@ builtin_ord(PyObject *module, PyObject *c) /*[clinic input] +@permit_long_summary pow as builtin_pow base: object @@ -2268,14 +2277,14 @@ pow as builtin_pow Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments -Some types, such as ints, are able to use a more efficient algorithm when -invoked using the three argument form. +Some types, such as ints, are able to use a more efficient algorithm +when invoked using the three argument form. [clinic start generated code]*/ static PyObject * builtin_pow_impl(PyObject *module, PyObject *base, PyObject *exp, PyObject *mod) -/*[clinic end generated code: output=3ca1538221bbf15f input=435dbd48a12efb23]*/ +/*[clinic end generated code: output=3ca1538221bbf15f input=0cd5c3ecc8003aec]*/ { return PyNumber_Power(base, exp, mod); } @@ -2396,13 +2405,14 @@ Read a string from standard input. The trailing newline is stripped. The prompt string, if given, is printed to standard output without a trailing newline before reading input. -If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError. +If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise +EOFError. On *nix systems, readline is used if available. [clinic start generated code]*/ static PyObject * builtin_input_impl(PyObject *module, PyObject *prompt) -/*[clinic end generated code: output=83db5a191e7a0d60 input=159c46d4ae40977e]*/ +/*[clinic end generated code: output=83db5a191e7a0d60 input=ebb939c954639427]*/ { PyObject *fin = NULL; PyObject *fout = NULL; @@ -2670,13 +2680,14 @@ round as builtin_round Round a number to a given precision in decimal digits. -The return value is an integer if ndigits is omitted or None. Otherwise -the return value has the same type as the number. ndigits may be negative. +The return value is an integer if ndigits is omitted or None. +Otherwise the return value has the same type as the number. ndigits +may be negative. [clinic start generated code]*/ static PyObject * builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits) -/*[clinic end generated code: output=ff0d9dd176c02ede input=275678471d7aca15]*/ +/*[clinic end generated code: output=ff0d9dd176c02ede input=bdcb7c67bf4a4320]*/ { PyObject *result; if (ndigits == Py_None) { @@ -2708,8 +2719,8 @@ sorted as builtin_sorted Return a new list containing all items from the iterable in ascending order. -A custom key function can be supplied to customize the sort order, and the -reverse flag can be set to request the result in descending order. +A custom key function can be supplied to customize the sort order, and +the reverse flag can be set to request the result in descending order. [end disabled clinic input]*/ PyDoc_STRVAR(builtin_sorted__doc__, @@ -2843,6 +2854,7 @@ cs_to_double(CompensatedSum total) } /*[clinic input] +@permit_long_summary sum as builtin_sum iterable: object @@ -2852,13 +2864,13 @@ sum as builtin_sum Return the sum of a 'start' value (default: 0) plus an iterable of numbers When the iterable is empty, return the start value. -This function is intended specifically for use with numeric values and may -reject non-numeric types. +This function is intended specifically for use with numeric values and +may reject non-numeric types. [clinic start generated code]*/ static PyObject * builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start) -/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/ +/*[clinic end generated code: output=df758cec7d1d302f input=d464d57815196b73]*/ { PyObject *result = start; PyObject *temp, *item, *iter; @@ -3094,6 +3106,7 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start) /*[clinic input] +@permit_long_summary isinstance as builtin_isinstance obj: object @@ -3102,15 +3115,15 @@ isinstance as builtin_isinstance Return whether an object is an instance of a class or of a subclass thereof. -A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to -check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B) -or ...`` etc. +A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the +target to check against. This is equivalent to ``isinstance(x, A) or +isinstance(x, B) or ...`` etc. [clinic start generated code]*/ static PyObject * builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple) -/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/ +/*[clinic end generated code: output=6faf01472c13b003 input=5d74d547df498f38]*/ { int retval; @@ -3130,15 +3143,15 @@ issubclass as builtin_issubclass Return whether 'cls' is derived from another class or is the same class. -A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to -check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B) -or ...``. +A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the +target to check against. This is equivalent to ``issubclass(x, A) or +issubclass(x, B) or ...``. [clinic start generated code]*/ static PyObject * builtin_issubclass_impl(PyObject *module, PyObject *cls, PyObject *class_or_tuple) -/*[clinic end generated code: output=358412410cd7a250 input=a24b9f3d58c370d6]*/ +/*[clinic end generated code: output=358412410cd7a250 input=a91ce96345a6705d]*/ { int retval; @@ -3368,13 +3381,13 @@ PyDoc_STRVAR(zip_doc, "zip(*iterables, strict=False)\n\ --\n\ \n\ -The zip object yields n-length tuples, where n is the number of iterables\n\ -passed as positional arguments to zip(). The i-th element in every tuple\n\ -comes from the i-th iterable argument to zip(). This continues until the\n\ -shortest argument is exhausted.\n\ +The zip object yields n-length tuples, where n is the number of\n\ +iterables passed as positional arguments to zip(). The i-th element\n\ +in every tuple comes from the i-th iterable argument to zip(). This\n\ +continues until the shortest argument is exhausted.\n\ \n\ -If strict is true and one of the arguments is exhausted before the others,\n\ -raise a ValueError.\n\ +If strict is true and one of the arguments is exhausted before the\n\ +others, raise a ValueError.\n\ \n\ >>> list(zip('abcdefg', range(3), range(4)))\n\ [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]"); diff --git a/Python/bytecodes.c b/Python/bytecodes.c index f7487c71369..993d2317514 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1116,7 +1116,8 @@ dummy_func( op(_STORE_SLICE, (v, container, start, stop -- )) { PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), - PyStackRef_AsPyObjectSteal(stop)); + PyStackRef_AsPyObjectSteal(stop), + Py_None); int err; if (slice == NULL) { err = 1; @@ -1973,7 +1974,7 @@ dummy_func( inst(LOAD_COMMON_CONSTANT, ( -- value)) { // Keep in sync with _common_constants in opcode.py assert(oparg < NUM_COMMON_CONSTANTS); - value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + value = PyStackRef_DupImmortal(tstate->interp->common_consts[oparg]); } inst(LOAD_BUILD_CLASS, ( -- bc)) { diff --git a/Python/ceval.c b/Python/ceval.c index a080ae42b93..a9b31affca9 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -49,20 +49,6 @@ _Py_ReachedRecursionLimitWithMargin(PyThreadState *tstate, int margin_count) #endif } -void -_Py_EnterRecursiveCallUnchecked(PyThreadState *tstate) -{ - uintptr_t here_addr = _Py_get_machine_stack_pointer(); - _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate; -#if _Py_STACK_GROWS_DOWN - if (here_addr < _tstate->c_stack_hard_limit) { -#else - if (here_addr > _tstate->c_stack_hard_limit) { -#endif - Py_FatalError("Unchecked stack overflow."); - } -} - #if defined(__s390x__) # define Py_C_STACK_SIZE 320000 #elif defined(_WIN32) @@ -278,7 +264,7 @@ PyUnstable_ThreadState_ResetStackProtection(PyThreadState *tstate) /* The function _Py_EnterRecursiveCallTstate() only calls _Py_CheckRecursiveCall() - if the stack pointer is between the stack base and c_stack_hard_limit. */ + if the stack pointer is beyond c_stack_soft_limit. */ int _Py_CheckRecursiveCall(PyThreadState *tstate, const char *where) { @@ -287,16 +273,21 @@ _Py_CheckRecursiveCall(PyThreadState *tstate, const char *where) assert(_tstate->c_stack_soft_limit != 0); assert(_tstate->c_stack_hard_limit != 0); #if _Py_STACK_GROWS_DOWN - assert(here_addr >= _tstate->c_stack_hard_limit - _PyOS_STACK_MARGIN_BYTES); if (here_addr < _tstate->c_stack_hard_limit) { - /* Overflowing while handling an overflow. Give up. */ + if (here_addr < _tstate->c_stack_hard_limit - _PyOS_STACK_MARGIN_BYTES) { + // Far out of bounds -- Assume stack switching has occurred + return 0; + } int kbytes_used = (int)(_tstate->c_stack_top - here_addr)/1024; #else - assert(here_addr <= _tstate->c_stack_hard_limit + _PyOS_STACK_MARGIN_BYTES); if (here_addr > _tstate->c_stack_hard_limit) { - /* Overflowing while handling an overflow. Give up. */ + if (here_addr > _tstate->c_stack_hard_limit + _PyOS_STACK_MARGIN_BYTES) { + // Far out of bounds -- Assume stack switching has occurred + return 0; + } int kbytes_used = (int)(here_addr - _tstate->c_stack_top)/1024; #endif + /* Too much stack used to safely raise an exception. Give up. */ char buffer[80]; snprintf(buffer, 80, "Unrecoverable stack overflow (used %d kB)%s", kbytes_used, where); Py_FatalError(buffer); @@ -1006,6 +997,14 @@ _Py_assert_within_stack_bounds( abort(); } } +#ifdef _Py_JIT +void +_Py_jit_assert_within_stack_bounds( + _PyInterpreterFrame *frame, _PyStackRef *stack_pointer, int lineno +) { + _Py_assert_within_stack_bounds(frame, stack_pointer, "executor_cases.c.h", lineno); +} +#endif #endif int _Py_CheckRecursiveCallPy( @@ -1146,19 +1145,6 @@ _PyEval_GetIter(_PyStackRef iterable, _PyStackRef *index_or_null, int yield_from return PyStackRef_FromPyObjectSteal(iter_o); } -Py_NO_INLINE int -_Py_ReachedRecursionLimit(PyThreadState *tstate) { - uintptr_t here_addr = _Py_get_machine_stack_pointer(); - _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate; - assert(_tstate->c_stack_hard_limit != 0); -#if _Py_STACK_GROWS_DOWN - return here_addr <= _tstate->c_stack_soft_limit; -#else - return here_addr >= _tstate->c_stack_soft_limit; -#endif -} - - #if (defined(__GNUC__) && __GNUC__ >= 10 && !defined(__clang__)) && defined(__x86_64__) /* * gh-129987: The SLP autovectorizer can cause poor code generation for @@ -1169,7 +1155,7 @@ _Py_ReachedRecursionLimit(PyThreadState *tstate) { * (prior to GCC 9, 40% performance drop), so we have to selectively disable * it. */ -#define DONT_SLP_VECTORIZE __attribute__((optimize ("no-tree-slp-vectorize"))) +#define DONT_SLP_VECTORIZE __attribute__((optimize ("no-tree-slp-vectorize", "no-omit-frame-pointer"))) #else #define DONT_SLP_VECTORIZE #endif @@ -3072,12 +3058,8 @@ _PyEval_LazyImportName(PyThreadState *tstate, PyObject *builtins, PyObject *fromlist, PyObject *level, int lazy) { PyObject *res = NULL; - PyImport_LazyImportsMode mode = PyImport_GetLazyImportsMode(); // Check if global policy overrides the local syntax - switch (mode) { - case PyImport_LAZY_NONE: - lazy = 0; - break; + switch (PyImport_GetLazyImportsMode()) { case PyImport_LAZY_ALL: if (!lazy) { lazy = is_lazy_import_module_level(); @@ -3087,11 +3069,15 @@ _PyEval_LazyImportName(PyThreadState *tstate, PyObject *builtins, break; } - if (!lazy && mode != PyImport_LAZY_NONE && is_lazy_import_module_level()) { + if (!lazy) { // See if __lazy_modules__ forces this to be lazy. - lazy = check_lazy_import_compatibility(tstate, globals, name, level); - if (lazy < 0) { - return NULL; + // __lazy_modules__ only applies at module level; exec() inside + // functions or classes should remain eager. + if (is_lazy_import_module_level()) { + lazy = check_lazy_import_compatibility(tstate, globals, name, level); + if (lazy < 0) { + return NULL; + } } } diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index c61690e8bd7..37479c4cb4e 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -268,10 +268,10 @@ GETITEM(PyObject *v, Py_ssize_t i) { #if defined(Py_DEBUG) && !defined(_Py_JIT) // This allows temporary stack "overflows", provided it's all in the cache at any point of time. -#define WITHIN_STACK_BOUNDS_IGNORING_CACHE() \ - (frame->owner == FRAME_OWNED_BY_INTERPRETER || (STACK_LEVEL() >= 0 && (STACK_LEVEL()) <= STACK_SIZE())) +#define ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(F, L) \ + assert(frame->owner == FRAME_OWNED_BY_INTERPRETER || (STACK_LEVEL() >= 0 && (STACK_LEVEL()) <= STACK_SIZE())) #else -#define WITHIN_STACK_BOUNDS_IGNORING_CACHE WITHIN_STACK_BOUNDS +#define ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE ASSERT_WITHIN_STACK_BOUNDS #endif /* Data access macros */ diff --git a/Python/clinic/bltinmodule.c.h b/Python/clinic/bltinmodule.c.h index e6b845cd375..4a38e0df617 100644 --- a/Python/clinic/bltinmodule.c.h +++ b/Python/clinic/bltinmodule.c.h @@ -25,9 +25,10 @@ PyDoc_STRVAR(builtin___import____doc__, "empty list to emulate ``import name``.\n" "When importing a module from a package, note that __import__(\'A.B\', ...)\n" "returns package A when fromlist is empty, but its submodule B when\n" -"fromlist is not empty. The level argument is used to determine whether to\n" -"perform absolute or relative imports: 0 is absolute, while a positive number\n" -"is the number of parent directories to search relative to the current module."); +"fromlist is not empty. The level argument is used to determine whether\n" +"to perform absolute or relative imports: 0 is absolute, while a positive\n" +"number is the number of parent directories to search relative to the\n" +"current module."); #define BUILTIN___IMPORT___METHODDEF \ {"__import__", _PyCFunction_CAST(builtin___import__), METH_FASTCALL|METH_KEYWORDS, builtin___import____doc__}, @@ -120,8 +121,8 @@ PyDoc_STRVAR(builtin___lazy_import____doc__, "\n" "Lazily imports a module.\n" "\n" -"Returns either the module to be imported or a imp.lazy_module object which\n" -"indicates the module to be lazily imported."); +"Returns either the module to be imported or a imp.lazy_module object\n" +"which indicates the module to be lazily imported."); #define BUILTIN___LAZY_IMPORT___METHODDEF \ {"__lazy_import__", _PyCFunction_CAST(builtin___lazy_import__), METH_FASTCALL|METH_KEYWORDS, builtin___lazy_import____doc__}, @@ -339,16 +340,17 @@ PyDoc_STRVAR(builtin_compile__doc__, "\n" "Compile source into a code object that can be executed by exec() or eval().\n" "\n" -"The source code may represent a Python module, statement or expression.\n" +"The source code may represent a Python module, statement or\n" +"expression.\n" "The filename will be used for run-time error messages.\n" "The mode must be \'exec\' to compile a module, \'single\' to compile a\n" "single (interactive) statement, or \'eval\' to compile an expression.\n" -"The flags argument, if present, controls which future statements influence\n" -"the compilation of the code.\n" +"The flags argument, if present, controls which future statements\n" +"influence the compilation of the code.\n" "The dont_inherit argument, if true, stops the compilation inheriting\n" "the effects of any future statements in effect in the code calling\n" -"compile; if absent or false these statements do influence the compilation,\n" -"in addition to any features explicitly specified."); +"compile; if absent or false these statements do influence the\n" +"compilation, in addition to any features explicitly specified."); #define BUILTIN_COMPILE_METHODDEF \ {"compile", _PyCFunction_CAST(builtin_compile), METH_FASTCALL|METH_KEYWORDS, builtin_compile__doc__}, @@ -683,8 +685,8 @@ PyDoc_STRVAR(builtin_globals__doc__, "\n" "Return the dictionary containing the current scope\'s global variables.\n" "\n" -"NOTE: Updates to this dictionary *will* affect name lookups in the current\n" -"global scope and vice-versa."); +"NOTE: Updates to this dictionary *will* affect name lookups in the\n" +"current global scope and vice-versa."); #define BUILTIN_GLOBALS_METHODDEF \ {"globals", (PyCFunction)builtin_globals, METH_NOARGS, builtin_globals__doc__}, @@ -910,9 +912,10 @@ PyDoc_STRVAR(builtin_locals__doc__, "\n" "Return a dictionary containing the current scope\'s local variables.\n" "\n" -"NOTE: Whether or not updates to this dictionary will affect name lookups in\n" -"the local scope and vice-versa is *implementation dependent* and not\n" -"covered by any backwards compatibility guarantees."); +"NOTE: Whether or not updates to this dictionary will affect name\n" +"lookups in the local scope and vice-versa is *implementation\n" +"dependent* and not covered by any backwards compatibility\n" +"guarantees."); #define BUILTIN_LOCALS_METHODDEF \ {"locals", (PyCFunction)builtin_locals, METH_NOARGS, builtin_locals__doc__}, @@ -959,8 +962,8 @@ PyDoc_STRVAR(builtin_pow__doc__, "\n" "Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments\n" "\n" -"Some types, such as ints, are able to use a more efficient algorithm when\n" -"invoked using the three argument form."); +"Some types, such as ints, are able to use a more efficient algorithm\n" +"when invoked using the three argument form."); #define BUILTIN_POW_METHODDEF \ {"pow", _PyCFunction_CAST(builtin_pow), METH_FASTCALL|METH_KEYWORDS, builtin_pow__doc__}, @@ -1136,7 +1139,8 @@ PyDoc_STRVAR(builtin_input__doc__, "The prompt string, if given, is printed to standard output without a\n" "trailing newline before reading input.\n" "\n" -"If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.\n" +"If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise\n" +"EOFError.\n" "On *nix systems, readline is used if available."); #define BUILTIN_INPUT_METHODDEF \ @@ -1182,8 +1186,9 @@ PyDoc_STRVAR(builtin_round__doc__, "\n" "Round a number to a given precision in decimal digits.\n" "\n" -"The return value is an integer if ndigits is omitted or None. Otherwise\n" -"the return value has the same type as the number. ndigits may be negative."); +"The return value is an integer if ndigits is omitted or None.\n" +"Otherwise the return value has the same type as the number. ndigits\n" +"may be negative."); #define BUILTIN_ROUND_METHODDEF \ {"round", _PyCFunction_CAST(builtin_round), METH_FASTCALL|METH_KEYWORDS, builtin_round__doc__}, @@ -1251,8 +1256,8 @@ PyDoc_STRVAR(builtin_sum__doc__, "Return the sum of a \'start\' value (default: 0) plus an iterable of numbers\n" "\n" "When the iterable is empty, return the start value.\n" -"This function is intended specifically for use with numeric values and may\n" -"reject non-numeric types."); +"This function is intended specifically for use with numeric values and\n" +"may reject non-numeric types."); #define BUILTIN_SUM_METHODDEF \ {"sum", _PyCFunction_CAST(builtin_sum), METH_FASTCALL|METH_KEYWORDS, builtin_sum__doc__}, @@ -1319,9 +1324,9 @@ PyDoc_STRVAR(builtin_isinstance__doc__, "\n" "Return whether an object is an instance of a class or of a subclass thereof.\n" "\n" -"A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to\n" -"check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)\n" -"or ...`` etc."); +"A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the\n" +"target to check against. This is equivalent to ``isinstance(x, A) or\n" +"isinstance(x, B) or ...`` etc."); #define BUILTIN_ISINSTANCE_METHODDEF \ {"isinstance", _PyCFunction_CAST(builtin_isinstance), METH_FASTCALL, builtin_isinstance__doc__}, @@ -1354,9 +1359,9 @@ PyDoc_STRVAR(builtin_issubclass__doc__, "\n" "Return whether \'cls\' is derived from another class or is the same class.\n" "\n" -"A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to\n" -"check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)\n" -"or ...``."); +"A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the\n" +"target to check against. This is equivalent to ``issubclass(x, A) or\n" +"issubclass(x, B) or ...``."); #define BUILTIN_ISSUBCLASS_METHODDEF \ {"issubclass", _PyCFunction_CAST(builtin_issubclass), METH_FASTCALL, builtin_issubclass__doc__}, @@ -1382,4 +1387,4 @@ builtin_issubclass(PyObject *module, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=f1fc836a63d89826 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=84efa9c5cc737ce5 input=a9049054013a1b77]*/ diff --git a/Python/clinic/context.c.h b/Python/clinic/context.c.h index 5ed74e6e6dd..ece7341d65d 100644 --- a/Python/clinic/context.c.h +++ b/Python/clinic/context.c.h @@ -10,8 +10,8 @@ PyDoc_STRVAR(_contextvars_Context_get__doc__, "\n" "Return the value for `key` if `key` has the value in the context object.\n" "\n" -"If `key` does not exist, return `default`. If `default` is not given,\n" -"return None."); +"If `key` does not exist, return `default`. If `default` is not\n" +"given, return None."); #define _CONTEXTVARS_CONTEXT_GET_METHODDEF \ {"get", _PyCFunction_CAST(_contextvars_Context_get), METH_FASTCALL, _contextvars_Context_get__doc__}, @@ -122,10 +122,12 @@ PyDoc_STRVAR(_contextvars_ContextVar_get__doc__, "\n" "Return a value for the context variable for the current context.\n" "\n" -"If there is no value for the variable in the current context, the method will:\n" -" * return the value of the default argument of the method, if provided; or\n" -" * return the default value for the context variable, if it was created\n" -" with one; or\n" +"If there is no value for the variable in the current context, the\n" +"method will:\n" +" * return the value of the default argument of the method, if\n" +" provided; or\n" +" * return the default value for the context variable, if it was\n" +" created with one; or\n" " * raise a LookupError."); #define _CONTEXTVARS_CONTEXTVAR_GET_METHODDEF \ @@ -160,10 +162,11 @@ PyDoc_STRVAR(_contextvars_ContextVar_set__doc__, "\n" "Call to set a new value for the context variable in the current context.\n" "\n" -"The required value argument is the new value for the context variable.\n" +"The required value argument is the new value for the context\n" +"variable.\n" "\n" -"Returns a Token object that can be used to restore the variable to its previous\n" -"value via the `ContextVar.reset()` method."); +"Returns a Token object that can be used to restore the variable to\n" +"its previous value via the `ContextVar.reset()` method."); #define _CONTEXTVARS_CONTEXTVAR_SET_METHODDEF \ {"set", (PyCFunction)_contextvars_ContextVar_set, METH_O, _contextvars_ContextVar_set__doc__}, @@ -187,8 +190,8 @@ PyDoc_STRVAR(_contextvars_ContextVar_reset__doc__, "\n" "Reset the context variable.\n" "\n" -"The variable is reset to the value it had before the `ContextVar.set()` that\n" -"created the token was used."); +"The variable is reset to the value it had before the\n" +"`ContextVar.set()` that created the token was used."); #define _CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF \ {"reset", (PyCFunction)_contextvars_ContextVar_reset, METH_O, _contextvars_ContextVar_reset__doc__}, @@ -256,4 +259,4 @@ token_exit(PyObject *self, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=3a04b2fddf24c3e9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=90ec3e4375804e9b input=a9049054013a1b77]*/ diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h index de62714ebdd..2e4e178b308 100644 --- a/Python/clinic/import.c.h +++ b/Python/clinic/import.c.h @@ -34,8 +34,9 @@ PyDoc_STRVAR(_imp_acquire_lock__doc__, "\n" "Acquires the interpreter\'s import lock for the current thread.\n" "\n" -"This lock should be used by import hooks to ensure thread-safety when importing\n" -"modules. On platforms without threads, this function does nothing."); +"This lock should be used by import hooks to ensure thread-safety when\n" +"importing modules. On platforms without threads, this function does\n" +"nothing."); #define _IMP_ACQUIRE_LOCK_METHODDEF \ {"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__}, @@ -664,4 +665,4 @@ _imp__set_lazy_attributes(PyObject *module, PyObject *const *args, Py_ssize_t na #ifndef _IMP_EXEC_DYNAMIC_METHODDEF #define _IMP_EXEC_DYNAMIC_METHODDEF #endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */ -/*[clinic end generated code: output=5fa42f580441b3fa input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0974db098d601372 input=a9049054013a1b77]*/ diff --git a/Python/clinic/marshal.c.h b/Python/clinic/marshal.c.h index 6c00b2b31b0..ec0d2eb8a2a 100644 --- a/Python/clinic/marshal.c.h +++ b/Python/clinic/marshal.c.h @@ -195,8 +195,8 @@ PyDoc_STRVAR(marshal_dumps__doc__, " allow_code\n" " Allow to write code objects.\n" "\n" -"Raise a ValueError exception if value has (or contains an object that has) an\n" -"unsupported type."); +"Raise a ValueError exception if value has (or contains an object that\n" +"has) an unsupported type."); #define MARSHAL_DUMPS_METHODDEF \ {"dumps", _PyCFunction_CAST(marshal_dumps), METH_FASTCALL|METH_KEYWORDS, marshal_dumps__doc__}, @@ -280,8 +280,8 @@ PyDoc_STRVAR(marshal_loads__doc__, " allow_code\n" " Allow to load code objects.\n" "\n" -"If no valid value is found, raise EOFError, ValueError or TypeError. Extra\n" -"bytes in the input are ignored."); +"If no valid value is found, raise EOFError, ValueError or TypeError.\n" +"Extra bytes in the input are ignored."); #define MARSHAL_LOADS_METHODDEF \ {"loads", _PyCFunction_CAST(marshal_loads), METH_FASTCALL|METH_KEYWORDS, marshal_loads__doc__}, @@ -351,4 +351,4 @@ marshal_loads(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec return return_value; } -/*[clinic end generated code: output=3e4bfc070a3c78ac input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a574570c3717f60e input=a9049054013a1b77]*/ diff --git a/Python/clinic/sysmodule.c.h b/Python/clinic/sysmodule.c.h index 6609a88c1a9..0c72760f69a 100644 --- a/Python/clinic/sysmodule.c.h +++ b/Python/clinic/sysmodule.c.h @@ -1367,7 +1367,8 @@ PyDoc_STRVAR(sys__stats_dump__doc__, "\n" "Dump stats to file, and clears the stats.\n" "\n" -"Return False if no statistics were not dumped because stats gathering was off."); +"Return False if no statistics were not dumped because stats gathering\n" +"was off."); #define SYS__STATS_DUMP_METHODDEF \ {"_stats_dump", (PyCFunction)sys__stats_dump, METH_NOARGS, sys__stats_dump__doc__}, @@ -1515,16 +1516,16 @@ PyDoc_STRVAR(sys_remote_exec__doc__, "Executes a file containing Python code in a given remote Python process.\n" "\n" "This function returns immediately, and the code will be executed by the\n" -"target process\'s main thread at the next available opportunity, similarly\n" -"to how signals are handled. There is no interface to determine when the\n" -"code has been executed. The caller is responsible for making sure that\n" -"the file still exists whenever the remote process tries to read it and that\n" -"it hasn\'t been overwritten.\n" +"target process\'s main thread at the next available opportunity,\n" +"similarly to how signals are handled. There is no interface to\n" +"determine when the code has been executed. The caller is responsible\n" +"for making sure that the file still exists whenever the remote process\n" +"tries to read it and that it hasn\'t been overwritten.\n" "\n" -"The remote process must be running a CPython interpreter of the same major\n" -"and minor version as the local process. If either the local or remote\n" -"interpreter is pre-release (alpha, beta, or release candidate) then the\n" -"local and remote interpreters must be the same exact version.\n" +"The remote process must be running a CPython interpreter of the same\n" +"major and minor version as the local process. If either the local or\n" +"remote interpreter is pre-release (alpha, beta, or release candidate)\n" +"then the local and remote interpreters must be the same exact version.\n" "\n" "Args:\n" " pid (int): The process ID of the target Python process.\n" @@ -1886,8 +1887,8 @@ PyDoc_STRVAR(sys_set_lazy_imports__doc__, "\n" "The mode parameter must be one of the following strings:\n" "- \"all\": All top-level imports become potentially lazy\n" -"- \"none\": All lazy imports are suppressed (even explicitly marked ones)\n" -"- \"normal\": Only explicitly marked imports (with \'lazy\' keyword) are lazy\n" +"- \"normal\": Only explicitly marked imports (with \'lazy\' keyword) are\n" +" lazy\n" "\n" "In addition to the mode, lazy imports can be controlled via the filter\n" "provided to sys.set_lazy_imports_filter"); @@ -1951,7 +1952,6 @@ PyDoc_STRVAR(sys_get_lazy_imports__doc__, "Gets the global lazy imports mode.\n" "\n" "Returns \"all\" if all top level imports are potentially lazy.\n" -"Returns \"none\" if all explicitly marked lazy imports are suppressed.\n" "Returns \"normal\" if only explicitly marked imports are lazy."); #define SYS_GET_LAZY_IMPORTS_METHODDEF \ @@ -2089,4 +2089,4 @@ _jit_is_active(PyObject *module, PyObject *Py_UNUSED(ignored)) #ifndef SYS_GETANDROIDAPILEVEL_METHODDEF #define SYS_GETANDROIDAPILEVEL_METHODDEF #endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */ -/*[clinic end generated code: output=ba849b6e4b9f1ba3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8a4482f9c5c493e5 input=a9049054013a1b77]*/ diff --git a/Python/codecs.c b/Python/codecs.c index 0bde56c0ac6..a522e6b8806 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -10,6 +10,7 @@ Copyright (c) Corporation for National Research Initiatives. #include "Python.h" #include "pycore_call.h" // _PyObject_CallNoArgs() +#include "pycore_codecs.h" // export _PyCodec_LookupTextEncoding() #include "pycore_interp.h" // PyInterpreterState.codec_search_path #include "pycore_pyerrors.h" // _PyErr_FormatNote() #include "pycore_pystate.h" // _PyInterpreterState_GET() diff --git a/Python/codegen.c b/Python/codegen.c index 529c1733598..205c49cff18 100644 --- a/Python/codegen.c +++ b/Python/codegen.c @@ -3953,22 +3953,45 @@ maybe_optimize_function_call(compiler *c, expr_ty e, jump_target_label end) if (! (func->kind == Name_kind && asdl_seq_LEN(args) == 1 && - asdl_seq_LEN(kwds) == 0 && - asdl_seq_GET(args, 0)->kind == GeneratorExp_kind)) + asdl_seq_LEN(kwds) == 0)) { return 0; } - expr_ty generator_exp = asdl_seq_GET(args, 0); - PySTEntryObject *generator_entry = _PySymtable_Lookup(SYMTABLE(c), (void *)generator_exp); + location loc = LOC(func); + + expr_ty arg_expr = asdl_seq_GET(args, 0); + + if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "frozenset") + && (arg_expr->kind == Set_kind || arg_expr->kind == SetComp_kind)) { + NEW_JUMP_TARGET_LABEL(c, skip_optimization); + + ADDOP_I(c, loc, COPY, 1); + ADDOP_I(c, loc, LOAD_COMMON_CONSTANT, CONSTANT_BUILTIN_FROZENSET); + ADDOP_COMPARE(c, loc, Is); + ADDOP_JUMP(c, loc, POP_JUMP_IF_FALSE, skip_optimization); + ADDOP(c, loc, POP_TOP); + + VISIT(c, expr, arg_expr); + ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_BUILD_FROZENSET); + + ADDOP_JUMP(c, loc, JUMP, end); + + USE_LABEL(c, skip_optimization); + return 1; + } + + if (arg_expr->kind != GeneratorExp_kind) { + return 0; + } + + PySTEntryObject *generator_entry = _PySymtable_Lookup(SYMTABLE(c), (void *)arg_expr); if (generator_entry->ste_coroutine) { Py_DECREF(generator_entry); return 0; } Py_DECREF(generator_entry); - location loc = LOC(func); - int optimized = 0; NEW_JUMP_TARGET_LABEL(c, skip_optimization); @@ -3994,6 +4017,9 @@ maybe_optimize_function_call(compiler *c, expr_ty e, jump_target_label end) else if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "set")) { const_oparg = CONSTANT_BUILTIN_SET; } + else if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "frozenset")) { + const_oparg = CONSTANT_BUILTIN_FROZENSET; + } if (const_oparg != -1) { ADDOP_I(c, loc, COPY, 1); // the function ADDOP_I(c, loc, LOAD_COMMON_CONSTANT, const_oparg); @@ -4003,10 +4029,10 @@ maybe_optimize_function_call(compiler *c, expr_ty e, jump_target_label end) if (const_oparg == CONSTANT_BUILTIN_TUPLE || const_oparg == CONSTANT_BUILTIN_LIST) { ADDOP_I(c, loc, BUILD_LIST, 0); - } else if (const_oparg == CONSTANT_BUILTIN_SET) { + } else if (const_oparg == CONSTANT_BUILTIN_SET || const_oparg == CONSTANT_BUILTIN_FROZENSET) { ADDOP_I(c, loc, BUILD_SET, 0); } - VISIT(c, expr, generator_exp); + VISIT(c, expr, arg_expr); NEW_JUMP_TARGET_LABEL(c, loop); NEW_JUMP_TARGET_LABEL(c, cleanup); @@ -4017,7 +4043,7 @@ maybe_optimize_function_call(compiler *c, expr_ty e, jump_target_label end) if (const_oparg == CONSTANT_BUILTIN_TUPLE || const_oparg == CONSTANT_BUILTIN_LIST) { ADDOP_I(c, loc, LIST_APPEND, 3); ADDOP_JUMP(c, loc, JUMP, loop); - } else if (const_oparg == CONSTANT_BUILTIN_SET) { + } else if (const_oparg == CONSTANT_BUILTIN_SET || const_oparg == CONSTANT_BUILTIN_FROZENSET) { ADDOP_I(c, loc, SET_ADD, 3); ADDOP_JUMP(c, loc, JUMP, loop); } @@ -4029,7 +4055,8 @@ maybe_optimize_function_call(compiler *c, expr_ty e, jump_target_label end) ADDOP(c, NO_LOCATION, POP_ITER); if (const_oparg != CONSTANT_BUILTIN_TUPLE && const_oparg != CONSTANT_BUILTIN_LIST && - const_oparg != CONSTANT_BUILTIN_SET) { + const_oparg != CONSTANT_BUILTIN_SET && + const_oparg != CONSTANT_BUILTIN_FROZENSET) { ADDOP_LOAD_CONST(c, loc, initial_res == Py_True ? Py_False : Py_True); } ADDOP_JUMP(c, loc, JUMP, end); @@ -4044,6 +4071,9 @@ maybe_optimize_function_call(compiler *c, expr_ty e, jump_target_label end) } else if (const_oparg == CONSTANT_BUILTIN_SET) { // result is already a set } + else if (const_oparg == CONSTANT_BUILTIN_FROZENSET) { + ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_BUILD_FROZENSET); + } else { ADDOP_LOAD_CONST(c, loc, initial_res); } diff --git a/Python/context.c b/Python/context.c index 62b582f271f..593e6ef9003 100644 --- a/Python/context.c +++ b/Python/context.c @@ -618,6 +618,7 @@ context_tp_contains(PyObject *op, PyObject *key) /*[clinic input] +@permit_long_summary _contextvars.Context.get key: object default: object = None @@ -625,14 +626,14 @@ _contextvars.Context.get Return the value for `key` if `key` has the value in the context object. -If `key` does not exist, return `default`. If `default` is not given, -return None. +If `key` does not exist, return `default`. If `default` is not +given, return None. [clinic start generated code]*/ static PyObject * _contextvars_Context_get_impl(PyContext *self, PyObject *key, PyObject *default_value) -/*[clinic end generated code: output=0c54aa7664268189 input=c8eeb81505023995]*/ +/*[clinic end generated code: output=0c54aa7664268189 input=d669a0d56fabb0a5]*/ { if (context_check_key_type(key)) { return NULL; @@ -1006,23 +1007,24 @@ contextvar_tp_repr(PyObject *op) /*[clinic input] -@permit_long_docstring_body _contextvars.ContextVar.get default: object = NULL / Return a value for the context variable for the current context. -If there is no value for the variable in the current context, the method will: - * return the value of the default argument of the method, if provided; or - * return the default value for the context variable, if it was created - with one; or +If there is no value for the variable in the current context, the +method will: + * return the value of the default argument of the method, if + provided; or + * return the default value for the context variable, if it was + created with one; or * raise a LookupError. [clinic start generated code]*/ static PyObject * _contextvars_ContextVar_get_impl(PyContextVar *self, PyObject *default_value) -/*[clinic end generated code: output=0746bd0aa2ced7bf input=da66664d5d0af4ad]*/ +/*[clinic end generated code: output=0746bd0aa2ced7bf input=83814c6aef4a9fe3]*/ { PyObject *val; if (PyContextVar_Get((PyObject *)self, default_value, &val) < 0) { @@ -1038,41 +1040,41 @@ _contextvars_ContextVar_get_impl(PyContextVar *self, PyObject *default_value) } /*[clinic input] -@permit_long_docstring_body +@permit_long_summary _contextvars.ContextVar.set value: object / Call to set a new value for the context variable in the current context. -The required value argument is the new value for the context variable. +The required value argument is the new value for the context +variable. -Returns a Token object that can be used to restore the variable to its previous -value via the `ContextVar.reset()` method. +Returns a Token object that can be used to restore the variable to +its previous value via the `ContextVar.reset()` method. [clinic start generated code]*/ static PyObject * _contextvars_ContextVar_set_impl(PyContextVar *self, PyObject *value) -/*[clinic end generated code: output=1b562d35cc79c806 input=73ebbbfc7c98f6cd]*/ +/*[clinic end generated code: output=1b562d35cc79c806 input=04ef8dcd810f5be6]*/ { return PyContextVar_Set((PyObject *)self, value); } /*[clinic input] -@permit_long_docstring_body _contextvars.ContextVar.reset token: object / Reset the context variable. -The variable is reset to the value it had before the `ContextVar.set()` that -created the token was used. +The variable is reset to the value it had before the +`ContextVar.set()` that created the token was used. [clinic start generated code]*/ static PyObject * _contextvars_ContextVar_reset_impl(PyContextVar *self, PyObject *token) -/*[clinic end generated code: output=3205d2bdff568521 input=b8bc514a9245242a]*/ +/*[clinic end generated code: output=3205d2bdff568521 input=dd33cfcb18c00e37]*/ { if (!PyContextToken_CheckExact(token)) { PyErr_Format(PyExc_TypeError, @@ -1098,7 +1100,8 @@ static PyMethodDef PyContextVar_methods[] = { _CONTEXTVARS_CONTEXTVAR_SET_METHODDEF _CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, + PyDoc_STR("ContextVars are generic over the type of their contained values")}, {NULL, NULL} }; @@ -1264,7 +1267,8 @@ token_exit_impl(PyContextToken *self, PyObject *type, PyObject *val, static PyMethodDef PyContextTokenType_methods[] = { {"__class_getitem__", Py_GenericAlias, - METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + METH_O|METH_CLASS, + PyDoc_STR("Tokens are generic over the same type as the ContextVar which created them.")}, TOKEN_ENTER_METHODDEF TOKEN_EXIT_METHODDEF {NULL} diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index efa61d7de74..3d27fd67090 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -10,37 +10,37 @@ case _NOP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _NOP_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _NOP_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _NOP_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -48,13 +48,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_PERIODIC_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); int err = check_periodics(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -66,7 +66,7 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -74,7 +74,7 @@ case _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -89,7 +89,7 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -97,7 +97,7 @@ case _RESUME_CHECK_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { UOP_STAT_INC(uopcode, miss); @@ -123,13 +123,13 @@ } #endif SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RESUME_CHECK_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { @@ -160,13 +160,13 @@ #endif _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RESUME_CHECK_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; #if defined(__EMSCRIPTEN__) @@ -202,13 +202,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RESUME_CHECK_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -249,7 +249,7 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -257,7 +257,7 @@ case _LOAD_FAST_CHECK_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = CURRENT_OPARG(); _PyStackRef value_s = GETLOCAL(oparg); @@ -274,13 +274,13 @@ value = PyStackRef_DUP(value_s); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_CHECK_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -302,13 +302,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_CHECK_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -333,13 +333,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 0; assert(oparg == CURRENT_OPARG()); @@ -347,13 +347,13 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_0_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 0; @@ -363,13 +363,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_0_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -381,13 +381,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 1; assert(oparg == CURRENT_OPARG()); @@ -395,13 +395,13 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 1; @@ -411,13 +411,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -429,13 +429,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 2; assert(oparg == CURRENT_OPARG()); @@ -443,13 +443,13 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_2_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 2; @@ -459,13 +459,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_2_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -477,13 +477,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 3; assert(oparg == CURRENT_OPARG()); @@ -491,13 +491,13 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_3_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 3; @@ -507,13 +507,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -525,13 +525,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_4_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 4; assert(oparg == CURRENT_OPARG()); @@ -539,13 +539,13 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_4_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; @@ -555,13 +555,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_4_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -573,13 +573,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_5_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 5; assert(oparg == CURRENT_OPARG()); @@ -587,13 +587,13 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_5_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 5; @@ -603,13 +603,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_5_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -621,13 +621,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_6_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 6; assert(oparg == CURRENT_OPARG()); @@ -635,13 +635,13 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_6_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 6; @@ -651,13 +651,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_6_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -669,13 +669,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_7_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 7; assert(oparg == CURRENT_OPARG()); @@ -683,13 +683,13 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_7_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 7; @@ -699,13 +699,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_7_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -717,26 +717,26 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = CURRENT_OPARG(); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -745,13 +745,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -762,13 +762,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 0; assert(oparg == CURRENT_OPARG()); @@ -776,13 +776,13 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_0_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 0; @@ -792,13 +792,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_0_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -810,13 +810,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 1; assert(oparg == CURRENT_OPARG()); @@ -824,13 +824,13 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 1; @@ -840,13 +840,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -858,13 +858,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 2; assert(oparg == CURRENT_OPARG()); @@ -872,13 +872,13 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_2_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 2; @@ -888,13 +888,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_2_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -906,13 +906,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 3; assert(oparg == CURRENT_OPARG()); @@ -920,13 +920,13 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_3_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 3; @@ -936,13 +936,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -954,13 +954,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_4_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 4; assert(oparg == CURRENT_OPARG()); @@ -968,13 +968,13 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_4_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; @@ -984,13 +984,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_4_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1002,13 +1002,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_5_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 5; assert(oparg == CURRENT_OPARG()); @@ -1016,13 +1016,13 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_5_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 5; @@ -1032,13 +1032,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_5_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1050,13 +1050,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_6_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 6; assert(oparg == CURRENT_OPARG()); @@ -1064,13 +1064,13 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_6_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 6; @@ -1080,13 +1080,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_6_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1098,13 +1098,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_7_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 7; assert(oparg == CURRENT_OPARG()); @@ -1112,13 +1112,13 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_7_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 7; @@ -1128,13 +1128,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_7_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1146,26 +1146,26 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = CURRENT_OPARG(); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1174,13 +1174,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_BORROW_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1191,26 +1191,26 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_AND_CLEAR_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = CURRENT_OPARG(); value = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_AND_CLEAR_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1219,13 +1219,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FAST_AND_CLEAR_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1236,26 +1236,26 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = CURRENT_OPARG(); PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1264,13 +1264,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1281,13 +1281,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 0; assert(oparg == CURRENT_OPARG()); @@ -1296,13 +1296,13 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_0_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 0; @@ -1313,13 +1313,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_0_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1332,13 +1332,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 1; assert(oparg == CURRENT_OPARG()); @@ -1347,13 +1347,13 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 1; @@ -1364,13 +1364,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1383,13 +1383,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 2; assert(oparg == CURRENT_OPARG()); @@ -1398,13 +1398,13 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_2_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 2; @@ -1415,13 +1415,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_2_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1434,13 +1434,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = 3; assert(oparg == CURRENT_OPARG()); @@ -1449,13 +1449,13 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_3_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 3; @@ -1466,13 +1466,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1485,13 +1485,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = CURRENT_OPARG(); assert(oparg < _PY_NSMALLPOSINTS); @@ -1499,13 +1499,13 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1515,13 +1515,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SMALL_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1533,13 +1533,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = 0; @@ -1552,13 +1552,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_0_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1570,13 +1570,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_0_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1590,13 +1590,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_0_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1612,13 +1612,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = 1; @@ -1631,13 +1631,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_1_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1649,13 +1649,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_1_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1669,13 +1669,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_1_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1691,13 +1691,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = 2; @@ -1710,13 +1710,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_2_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1728,13 +1728,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_2_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1748,13 +1748,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_2_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1770,13 +1770,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = 3; @@ -1789,13 +1789,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_3_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1807,13 +1807,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_3_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1827,13 +1827,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_3_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1849,13 +1849,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_4_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = 4; @@ -1868,13 +1868,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_4_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1886,13 +1886,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_4_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1906,13 +1906,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_4_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1928,13 +1928,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_5_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = 5; @@ -1947,13 +1947,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_5_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1965,13 +1965,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_5_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1985,13 +1985,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_5_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2007,13 +2007,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_6_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = 6; @@ -2026,13 +2026,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_6_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2044,13 +2044,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_6_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2064,13 +2064,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_6_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2086,13 +2086,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_7_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = 7; @@ -2105,13 +2105,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_7_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2123,13 +2123,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_7_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2143,13 +2143,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_7_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2165,13 +2165,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; oparg = CURRENT_OPARG(); @@ -2183,13 +2183,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2200,13 +2200,13 @@ trash = tmp; _tos_cache0 = trash; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2219,13 +2219,13 @@ _tos_cache1 = trash; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_FAST_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef trash; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2240,13 +2240,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -2257,13 +2257,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_NOP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; assert(PyStackRef_IsNull(value) || (!PyStackRef_RefcountOnObject(value)) || @@ -2271,26 +2271,26 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_NOP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; assert(PyStackRef_IsNull(value) || (!PyStackRef_RefcountOnObject(value)) || _Py_IsImmortal((PyStackRef_AsPyObjectBorrow(value)))); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_NOP_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2299,13 +2299,13 @@ _Py_IsImmortal((PyStackRef_AsPyObjectBorrow(value)))); _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_NOP_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2316,13 +2316,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_INT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value))); @@ -2330,26 +2330,26 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_INT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value))); PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_INT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2358,13 +2358,13 @@ PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc); _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_INT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2375,13 +2375,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_FLOAT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value))); @@ -2389,26 +2389,26 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_FLOAT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value))); PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_FLOAT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2417,13 +2417,13 @@ PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc); _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_FLOAT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2434,13 +2434,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_UNICODE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value))); @@ -2448,26 +2448,26 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_UNICODE_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value))); PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_UNICODE_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2476,13 +2476,13 @@ PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc); _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_UNICODE_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2493,13 +2493,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_TOP_OPARG_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; @@ -2512,37 +2512,37 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_NULL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef res; res = PyStackRef_NULL; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_NULL_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; res = PyStackRef_NULL; _tos_cache1 = res; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_NULL_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2551,13 +2551,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _END_FOR_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -2568,13 +2568,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_ITER_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef index_or_null; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2589,13 +2589,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _END_SEND_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef index_or_null; _PyStackRef receiver; @@ -2620,13 +2620,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_NEGATIVE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -2650,13 +2650,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_NEGATIVE_FLOAT_INPLACE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -2674,13 +2674,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_NEGATIVE_FLOAT_INPLACE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -2697,13 +2697,13 @@ _tos_cache1 = v; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_NEGATIVE_FLOAT_INPLACE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -2722,13 +2722,13 @@ _tos_cache1 = res; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_NOT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; @@ -2739,13 +2739,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_NOT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2755,13 +2755,13 @@ ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_NOT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2773,13 +2773,13 @@ _tos_cache1 = res; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_NOT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2793,13 +2793,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2824,13 +2824,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_BOOL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; if (!PyStackRef_BoolCheck(value)) { @@ -2843,13 +2843,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_BOOL_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -2862,13 +2862,13 @@ STAT_INC(TO_BOOL, hit); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_BOOL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2884,13 +2884,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_BOOL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2909,13 +2909,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_INT_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -2929,13 +2929,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_INT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -2948,13 +2948,13 @@ _tos_cache1 = v; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -2969,13 +2969,13 @@ _tos_cache1 = res; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_LIST_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -2989,13 +2989,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_LIST_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -3011,13 +3011,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_LIST_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3033,13 +3033,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = nos; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_LIST_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3058,13 +3058,13 @@ _tos_cache1 = nos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_LIST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -3077,13 +3077,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_LIST_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -3096,13 +3096,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_LIST_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3118,13 +3118,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_LIST_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3143,13 +3143,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_SLICE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -3162,13 +3162,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_SLICE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -3181,13 +3181,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_SLICE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3203,13 +3203,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_SLICE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3228,13 +3228,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_LIST_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3249,13 +3249,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_LIST_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3269,13 +3269,13 @@ _tos_cache1 = v; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_LIST_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3291,13 +3291,13 @@ _tos_cache1 = res; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_NONE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; @@ -3312,13 +3312,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_NONE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3333,13 +3333,13 @@ res = PyStackRef_False; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_NONE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3357,13 +3357,13 @@ _tos_cache1 = res; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_NONE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3384,13 +3384,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_COMPACT_ASCII_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -3409,13 +3409,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_COMPACT_ASCII_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -3437,13 +3437,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_COMPACT_ASCII_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3466,13 +3466,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = nos; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_COMPACT_ASCII_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3499,13 +3499,13 @@ _tos_cache1 = nos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_UNICODE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -3519,13 +3519,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_UNICODE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -3541,13 +3541,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_UNICODE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3563,13 +3563,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = nos; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_UNICODE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3588,13 +3588,13 @@ _tos_cache1 = nos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_UNICODE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -3607,13 +3607,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_UNICODE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -3626,13 +3626,13 @@ } _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_UNICODE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3648,13 +3648,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_UNICODE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3673,13 +3673,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_STR_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3693,13 +3693,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_STR_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3712,13 +3712,13 @@ _tos_cache1 = v; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TO_BOOL_STR_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3733,13 +3733,13 @@ _tos_cache1 = res; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _REPLACE_WITH_TRUE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3751,13 +3751,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _REPLACE_WITH_TRUE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3768,13 +3768,13 @@ _tos_cache1 = v; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _REPLACE_WITH_TRUE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3787,13 +3787,13 @@ _tos_cache1 = res; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNARY_INVERT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -3817,13 +3817,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_INT_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -3837,13 +3837,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_INT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; left = stack_pointer[-1]; @@ -3859,13 +3859,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_INT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3881,13 +3881,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = left; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_INT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3906,13 +3906,13 @@ _tos_cache1 = left; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_INT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -3925,13 +3925,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_INT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -3944,13 +3944,13 @@ } _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_INT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3966,13 +3966,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_INT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3991,13 +3991,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_OVERFLOWED_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -4012,13 +4012,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_OVERFLOWED_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; left = stack_pointer[-1]; @@ -4035,13 +4035,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_OVERFLOWED_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -4058,13 +4058,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = left; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_OVERFLOWED_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -4084,13 +4084,13 @@ _tos_cache1 = left; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_OVERFLOWED_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -4104,13 +4104,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_OVERFLOWED_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -4124,13 +4124,13 @@ } _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_OVERFLOWED_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -4147,13 +4147,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_OVERFLOWED_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -4173,13 +4173,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4207,13 +4207,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4243,13 +4243,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4279,13 +4279,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4313,13 +4313,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4349,13 +4349,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4385,13 +4385,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4419,13 +4419,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4455,13 +4455,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4491,13 +4491,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_INPLACE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4520,13 +4520,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_INPLACE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4551,13 +4551,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_INPLACE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4582,13 +4582,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_INPLACE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4611,13 +4611,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_INPLACE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4642,13 +4642,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_INPLACE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4673,13 +4673,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_INPLACE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4702,13 +4702,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_INPLACE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4733,13 +4733,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_INPLACE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4764,13 +4764,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_INPLACE_RIGHT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4793,13 +4793,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_INPLACE_RIGHT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4824,13 +4824,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_INT_INPLACE_RIGHT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4855,13 +4855,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4884,13 +4884,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4915,13 +4915,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4946,13 +4946,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -4975,13 +4975,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5006,13 +5006,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5037,13 +5037,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_FLOAT_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -5057,13 +5057,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_FLOAT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; left = stack_pointer[-1]; @@ -5079,13 +5079,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_FLOAT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -5101,13 +5101,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = left; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_FLOAT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -5126,13 +5126,13 @@ _tos_cache1 = left; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FLOAT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -5145,13 +5145,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FLOAT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -5164,13 +5164,13 @@ } _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FLOAT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -5186,13 +5186,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FLOAT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -5211,13 +5211,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5247,13 +5247,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5287,13 +5287,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5327,13 +5327,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5363,13 +5363,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5403,13 +5403,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5443,13 +5443,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5479,13 +5479,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5519,13 +5519,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5559,13 +5559,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_INPLACE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5583,13 +5583,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_INPLACE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5608,13 +5608,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_INPLACE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5632,13 +5632,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5656,13 +5656,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5681,13 +5681,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5705,13 +5705,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5729,13 +5729,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5754,13 +5754,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5778,13 +5778,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5802,13 +5802,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5827,13 +5827,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5851,13 +5851,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5875,13 +5875,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5900,13 +5900,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5924,13 +5924,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5948,13 +5948,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5973,13 +5973,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -5997,13 +5997,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_TRUEDIV_FLOAT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6048,13 +6048,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6076,13 +6076,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6108,13 +6108,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6140,13 +6140,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6168,13 +6168,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6200,13 +6200,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6232,13 +6232,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_UNICODE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6265,13 +6265,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_UNICODE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6302,13 +6302,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_ADD_UNICODE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6339,13 +6339,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_INPLACE_ADD_UNICODE_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6391,13 +6391,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_LHS_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; left = stack_pointer[-2]; PyObject *descr = (PyObject *)CURRENT_OPERAND0_64(); @@ -6415,13 +6415,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_LHS_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; left = stack_pointer[-1]; @@ -6441,13 +6441,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_LHS_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6467,13 +6467,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = left; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_LHS_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6496,13 +6496,13 @@ _tos_cache1 = left; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_RHS_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; right = stack_pointer[-1]; PyObject *descr = (PyObject *)CURRENT_OPERAND0_64(); @@ -6520,13 +6520,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_RHS_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef _stack_item_0 = _tos_cache0; right = _stack_item_0; @@ -6546,13 +6546,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_RHS_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6572,13 +6572,13 @@ _tos_cache1 = right; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_RHS_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6601,13 +6601,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_EXTEND_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6644,13 +6644,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_EXTEND_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -6689,13 +6689,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_SLICE_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef stop; _PyStackRef start; _PyStackRef container; @@ -6786,13 +6786,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_SLICE_r30: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef stop; _PyStackRef start; _PyStackRef container; @@ -6811,7 +6811,8 @@ ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), - PyStackRef_AsPyObjectSteal(stop)); + PyStackRef_AsPyObjectSteal(stop), + Py_None); stack_pointer = _PyFrame_GetStackPointer(frame); int err; if (slice == NULL) { @@ -6846,13 +6847,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_LIST_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef res; @@ -6910,13 +6911,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_LIST_SLICE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef res; @@ -6951,13 +6952,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_STR_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef str_st; _PyStackRef res; @@ -6997,13 +6998,13 @@ _tos_cache1 = s; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_USTR_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef str_st; _PyStackRef res; @@ -7049,13 +7050,13 @@ _tos_cache1 = s; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_TUPLE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -7069,13 +7070,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_TUPLE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -7091,13 +7092,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_TUPLE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7113,13 +7114,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = nos; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_TUPLE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7138,13 +7139,13 @@ _tos_cache1 = nos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_TUPLE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -7157,13 +7158,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_TUPLE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -7176,13 +7177,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_TUPLE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7198,13 +7199,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_TUPLE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7223,13 +7224,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef tuple_st; sub_st = stack_pointer[-1]; @@ -7254,13 +7255,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7288,13 +7289,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7323,13 +7324,13 @@ _tos_cache1 = sub_st; _tos_cache0 = tuple_st; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7362,13 +7363,13 @@ _tos_cache1 = tuple_st; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_TUPLE_INT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef res; @@ -7393,13 +7394,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_TUPLE_INT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef res; @@ -7425,13 +7426,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_TUPLE_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef res; @@ -7456,13 +7457,13 @@ _tos_cache1 = ts; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_DICT_SUBSCRIPT_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -7481,13 +7482,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_DICT_SUBSCRIPT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -7509,13 +7510,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_DICT_SUBSCRIPT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7538,13 +7539,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = nos; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_DICT_SUBSCRIPT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7571,13 +7572,13 @@ _tos_cache1 = nos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_DICT_STORE_SUBSCRIPT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -7597,13 +7598,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_DICT_STORE_SUBSCRIPT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -7626,13 +7627,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_DICT_STORE_SUBSCRIPT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7658,13 +7659,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_DICT_STORE_SUBSCRIPT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7691,13 +7692,13 @@ _tos_cache1 = nos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_ANY_DICT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -7710,13 +7711,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_ANY_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -7729,13 +7730,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_ANY_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7751,13 +7752,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_ANY_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7776,13 +7777,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_DICT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -7795,13 +7796,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -7814,13 +7815,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7836,13 +7837,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7861,13 +7862,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FROZENDICT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -7880,13 +7881,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FROZENDICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -7899,13 +7900,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FROZENDICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7921,13 +7922,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FROZENDICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7946,13 +7947,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_DICT_KNOWN_HASH_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef dict_st; _PyStackRef res; @@ -7987,13 +7988,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_DICT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef dict_st; _PyStackRef res; @@ -8027,13 +8028,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_CHECK_FUNC_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef container; _PyStackRef getitem; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8079,13 +8080,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = container; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_INIT_CALL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef getitem; _PyStackRef sub; _PyStackRef container; @@ -8103,13 +8104,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_INIT_CALL_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef getitem; _PyStackRef sub; _PyStackRef container; @@ -8128,13 +8129,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_INIT_CALL_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef getitem; _PyStackRef sub; _PyStackRef container; @@ -8154,13 +8155,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_SUBSCR_INIT_CALL_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef getitem; _PyStackRef sub; _PyStackRef container; @@ -8179,13 +8180,13 @@ new_frame = PyStackRef_Wrap(pushed_frame); _tos_cache0 = new_frame; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LIST_APPEND_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef v; _PyStackRef list; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8199,13 +8200,13 @@ JUMP_TO_ERROR(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_ADD_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef v; _PyStackRef set; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8231,13 +8232,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_SUBSCR_r30: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub; _PyStackRef container; _PyStackRef v; @@ -8277,13 +8278,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_SUBSCR_LIST_INT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef value; @@ -8344,13 +8345,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_SUBSCR_DICT_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub; _PyStackRef dict_st; _PyStackRef value; @@ -8390,13 +8391,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_SUBSCR_DICT_KNOWN_HASH_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub; _PyStackRef dict_st; _PyStackRef value; @@ -8438,13 +8439,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DELETE_SUBSCR_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef sub; _PyStackRef container; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8477,13 +8478,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_INTRINSIC_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef v; @@ -8509,13 +8510,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_INTRINSIC_2_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value1_st; _PyStackRef value2_st; _PyStackRef res; @@ -8549,13 +8550,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_HEAP_SAFE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; value = PyStackRef_MakeHeapSafe(value); @@ -8563,26 +8564,26 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_HEAP_SAFE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; value = PyStackRef_MakeHeapSafe(value); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_HEAP_SAFE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8591,13 +8592,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_HEAP_SAFE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8608,13 +8609,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RETURN_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef retval; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8636,13 +8637,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GET_AITER_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef obj; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8704,13 +8705,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GET_ANEXT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef aiter; _PyStackRef awaitable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8732,13 +8733,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GET_AWAITABLE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8764,13 +8765,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SEND_GEN_FRAME_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef v; _PyStackRef receiver; _PyStackRef gen_frame; @@ -8810,13 +8811,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = receiver; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_IS_NONE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; val = stack_pointer[-1]; if (!PyStackRef_IsNone(val)) { @@ -8828,13 +8829,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_IS_NONE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; _PyStackRef _stack_item_0 = _tos_cache0; val = _stack_item_0; @@ -8846,13 +8847,13 @@ } _tos_cache0 = val; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_IS_NONE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8867,13 +8868,13 @@ _tos_cache1 = val; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_IS_NONE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8891,13 +8892,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_NOT_NULL_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; nos = stack_pointer[-2]; if (PyStackRef_IsNull(nos)) { @@ -8910,13 +8911,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_NOT_NULL_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -8931,13 +8932,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_NOT_NULL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8952,13 +8953,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = nos; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_NOT_NULL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8976,7 +8977,7 @@ _tos_cache1 = nos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -8984,7 +8985,7 @@ case _SEND_VIRTUAL_TIER_TWO_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef none; _PyStackRef null_or_index; _PyStackRef iter; @@ -9018,13 +9019,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SEND_VIRTUAL_TIER_TWO_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef none; _PyStackRef null_or_index; _PyStackRef iter; @@ -9063,13 +9064,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SEND_VIRTUAL_TIER_TWO_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef none; _PyStackRef null_or_index; _PyStackRef iter; @@ -9111,13 +9112,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SEND_VIRTUAL_TIER_TWO_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef none; _PyStackRef null_or_index; _PyStackRef iter; @@ -9160,13 +9161,13 @@ _tos_cache1 = null_or_index; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_3OS_ASYNC_GEN_ASEND_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; iter = stack_pointer[-3]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); @@ -9181,13 +9182,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_3OS_ASYNC_GEN_ASEND_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; iter = stack_pointer[-2]; @@ -9204,13 +9205,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_3OS_ASYNC_GEN_ASEND_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9229,13 +9230,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_3OS_ASYNC_GEN_ASEND_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9254,7 +9255,7 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -9262,7 +9263,7 @@ case _SEND_ASYNC_GEN_TIER_TWO_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef v; _PyStackRef null_in; _PyStackRef iter; @@ -9315,13 +9316,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _YIELD_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef retval; _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9360,13 +9361,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _POP_EXCEPT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef exc_value; _PyStackRef _stack_item_0 = _tos_cache0; exc_value = _stack_item_0; @@ -9385,58 +9386,58 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_COMMON_CONSTANT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = CURRENT_OPARG(); assert(oparg < NUM_COMMON_CONSTANTS); - value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + value = PyStackRef_DupImmortal(tstate->interp->common_consts[oparg]); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_COMMON_CONSTANT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); assert(oparg < NUM_COMMON_CONSTANTS); - value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + value = PyStackRef_DupImmortal(tstate->interp->common_consts[oparg]); _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_COMMON_CONSTANT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); assert(oparg < NUM_COMMON_CONSTANTS); - value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + value = PyStackRef_DupImmortal(tstate->interp->common_consts[oparg]); _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_BUILD_CLASS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bc; int err; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -9459,13 +9460,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_NAME_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef v; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -9518,13 +9519,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DELETE_NAME_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); @@ -9553,13 +9554,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef *top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9581,13 +9582,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_TWO_TUPLE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef val1; _PyStackRef val0; @@ -9619,13 +9620,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef val1; _PyStackRef val0; @@ -9641,13 +9642,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef val1; _PyStackRef val0; @@ -9662,13 +9663,13 @@ _tos_cache1 = val0; _tos_cache0 = val1; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef val1; _PyStackRef val0; @@ -9685,13 +9686,13 @@ _tos_cache1 = val1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef val2; _PyStackRef val1; @@ -9710,13 +9711,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef val2; _PyStackRef val1; @@ -9734,13 +9735,13 @@ _tos_cache1 = val1; _tos_cache0 = val2; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_TUPLE_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef *values; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9769,13 +9770,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_UNIQUE_TUPLE_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef *values; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9796,13 +9797,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_SEQUENCE_LIST_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef *values; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9841,13 +9842,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _UNPACK_EX_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef seq; _PyStackRef *top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9869,13 +9870,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_ATTR_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef v; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9910,13 +9911,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DELETE_ATTR_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -9941,13 +9942,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_GLOBAL_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef v; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -9972,13 +9973,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DELETE_GLOBAL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -10000,13 +10001,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_LOCALS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef locals; PyObject *l = LOCALS(); if (l == NULL) { @@ -10020,13 +10021,13 @@ locals = PyStackRef_FromPyObjectNew(l); _tos_cache0 = locals; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_LOCALS_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef locals; _PyStackRef _stack_item_0 = _tos_cache0; PyObject *l = LOCALS(); @@ -10045,13 +10046,13 @@ _tos_cache1 = locals; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_LOCALS_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef locals; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10073,7 +10074,7 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -10081,7 +10082,7 @@ case _LOAD_NAME_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef v; oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); @@ -10123,13 +10124,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_GLOBAL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *res; oparg = CURRENT_OPARG(); res = &stack_pointer[0]; @@ -10147,13 +10148,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += 1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_NULL_CONDITIONAL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *null; oparg = CURRENT_OPARG(); null = &stack_pointer[0]; @@ -10163,13 +10164,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += (oparg & 1); ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_GLOBALS_VERSION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); uint16_t version = (uint16_t)CURRENT_OPERAND0_16(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { @@ -10185,13 +10186,13 @@ } assert(keys->dk_kind == DICT_KEYS_UNICODE); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_GLOBALS_VERSION_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; uint16_t version = (uint16_t)CURRENT_OPERAND0_16(); PyDictObject *dict = (PyDictObject *)GLOBALS(); @@ -10211,13 +10212,13 @@ assert(keys->dk_kind == DICT_KEYS_UNICODE); _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_GLOBALS_VERSION_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint16_t version = (uint16_t)CURRENT_OPERAND0_16(); @@ -10241,13 +10242,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_GLOBALS_VERSION_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -10275,13 +10276,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_GLOBAL_MODULE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0_16(); uint16_t index = (uint16_t)CURRENT_OPERAND1_16(); @@ -10321,13 +10322,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_GLOBAL_BUILTINS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0_16(); uint16_t index = (uint16_t)CURRENT_OPERAND1_16(); @@ -10366,13 +10367,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DELETE_FAST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); _PyStackRef v = GETLOCAL(oparg); if (PyStackRef_IsNull(v)) { @@ -10394,13 +10395,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_CELL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); PyObject *initial = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *cell = PyCell_New(initial); @@ -10417,13 +10418,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DELETE_DEREF_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); PyObject *cell = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *oldobj = PyCell_SwapTakeRef((PyCellObject *)cell, NULL); @@ -10441,13 +10442,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_FROM_DICT_OR_DEREF_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef class_dict_st; _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10490,13 +10491,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_DEREF_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; oparg = CURRENT_OPARG(); PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); @@ -10517,13 +10518,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_DEREF_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef v; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -10541,13 +10542,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_FREE_VARS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); PyCodeObject *co = _PyFrame_GetCode(frame); assert(PyStackRef_FunctionCheck(frame->f_funcobj)); @@ -10560,13 +10561,13 @@ frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_FREE_VARS_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); PyCodeObject *co = _PyFrame_GetCode(frame); @@ -10581,13 +10582,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_FREE_VARS_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); @@ -10604,13 +10605,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_FREE_VARS_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -10629,13 +10630,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BUILD_STRING_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *pieces; _PyStackRef str; oparg = CURRENT_OPARG(); @@ -10656,13 +10657,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BUILD_INTERPOLATION_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *format; _PyStackRef str; _PyStackRef value; @@ -10713,13 +10714,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BUILD_TEMPLATE_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef interpolations; _PyStackRef strings; _PyStackRef template; @@ -10755,13 +10756,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BUILD_TUPLE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *values; _PyStackRef tup; oparg = CURRENT_OPARG(); @@ -10776,13 +10777,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BUILD_LIST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *values; _PyStackRef list; oparg = CURRENT_OPARG(); @@ -10801,13 +10802,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LIST_EXTEND_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable_st; _PyStackRef list_st; _PyStackRef i; @@ -10846,13 +10847,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_UPDATE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef set; _PyStackRef i; @@ -10878,13 +10879,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BUILD_SET_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *values; _PyStackRef set; oparg = CURRENT_OPARG(); @@ -10937,13 +10938,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BUILD_MAP_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *values; _PyStackRef map; oparg = CURRENT_OPARG(); @@ -10964,13 +10965,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -oparg*2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SETUP_ANNOTATIONS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); if (LOCALS() == NULL) { _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, @@ -11014,13 +11015,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DICT_UPDATE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef update; _PyStackRef dict; _PyStackRef upd; @@ -11067,13 +11068,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DICT_MERGE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef update; _PyStackRef dict; _PyStackRef callable; @@ -11108,13 +11109,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAP_ADD_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef key; _PyStackRef dict_st; @@ -11149,13 +11150,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SUPER_ATTR_ATTR_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_st; _PyStackRef class_st; _PyStackRef global_super_st; @@ -11220,13 +11221,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_TYPE_VERSION_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; nos = stack_pointer[-2]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0_32(); @@ -11247,13 +11248,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_TYPE_VERSION_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -11277,13 +11278,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_TYPE_VERSION_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11308,13 +11309,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = nos; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_TYPE_VERSION_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11343,13 +11344,13 @@ _tos_cache1 = nos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_LOAD_SUPER_ATTR_METHOD_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef class_st; _PyStackRef global_super_st; oparg = CURRENT_OPARG(); @@ -11374,13 +11375,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_LOAD_SUPER_ATTR_METHOD_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef class_st; _PyStackRef global_super_st; _PyStackRef _stack_item_0 = _tos_cache0; @@ -11408,13 +11409,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_LOAD_SUPER_ATTR_METHOD_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef class_st; _PyStackRef global_super_st; _PyStackRef _stack_item_0 = _tos_cache0; @@ -11445,13 +11446,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_LOAD_SUPER_ATTR_METHOD_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef class_st; _PyStackRef global_super_st; _PyStackRef _stack_item_0 = _tos_cache0; @@ -11483,13 +11484,13 @@ _tos_cache1 = class_st; _tos_cache0 = global_super_st; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SUPER_ATTR_METHOD_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_st; _PyStackRef class_st; _PyStackRef global_super_st; @@ -11555,13 +11556,13 @@ _tos_cache0 = attr; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef *self_or_null; @@ -11611,13 +11612,13 @@ stack_pointer[-1] = attr; stack_pointer += (oparg&1); ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_VERSION_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0_32(); @@ -11632,13 +11633,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_VERSION_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -11653,13 +11654,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_VERSION_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11677,13 +11678,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_VERSION_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11704,13 +11705,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_VERSION_LOCKED_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0_32(); @@ -11729,13 +11730,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_VERSION_LOCKED_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -11754,13 +11755,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_VERSION_LOCKED_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11782,13 +11783,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_VERSION_LOCKED_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11813,13 +11814,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *type = (PyObject *)CURRENT_OPERAND0_64(); @@ -11833,13 +11834,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -11853,13 +11854,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11876,13 +11877,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11902,13 +11903,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -11923,13 +11924,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -11944,13 +11945,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11968,13 +11969,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11995,13 +11996,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_INSTANCE_VALUE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef o; @@ -12034,13 +12035,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_INSTANCE_VALUE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef o; @@ -12074,13 +12075,13 @@ _tos_cache1 = o; _tos_cache0 = attr; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_INSTANCE_VALUE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef o; @@ -12118,13 +12119,13 @@ _tos_cache1 = attr; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_MODULE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef o; @@ -12177,13 +12178,13 @@ _tos_cache0 = attr; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_WITH_HINT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef o; @@ -12265,13 +12266,13 @@ _tos_cache0 = attr; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_SLOT_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef o; @@ -12302,13 +12303,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_SLOT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef o; @@ -12340,13 +12341,13 @@ _tos_cache1 = o; _tos_cache0 = attr; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_SLOT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef o; @@ -12382,13 +12383,13 @@ _tos_cache1 = attr; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_ATTR_CLASS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0_32(); @@ -12408,13 +12409,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_ATTR_CLASS_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -12435,13 +12436,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_ATTR_CLASS_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12466,13 +12467,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_ATTR_CLASS_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12501,13 +12502,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_CLASS_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12531,13 +12532,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_PROPERTY_FRAME_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef new_frame; oparg = CURRENT_OPARG(); @@ -12566,13 +12567,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_PROPERTY_FRAME_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12602,13 +12603,13 @@ new_frame = PyStackRef_Wrap(pushed_frame); _tos_cache0 = new_frame; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_PROPERTY_FRAME_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12642,13 +12643,13 @@ _tos_cache1 = new_frame; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_PROPERTY_FRAME_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12686,13 +12687,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_FRAME_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12729,13 +12730,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_DORV_NO_DICT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -12754,13 +12755,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_DORV_NO_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -12779,13 +12780,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_DORV_NO_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12807,13 +12808,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_DORV_NO_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12838,13 +12839,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_ATTR_INSTANCE_VALUE_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef value; _PyStackRef o; @@ -12878,13 +12879,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOCK_OBJECT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; value = stack_pointer[-1]; if (!LOCK_OBJECT(PyStackRef_AsPyObjectBorrow(value))) { @@ -12896,13 +12897,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOCK_OBJECT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -12914,13 +12915,13 @@ } _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOCK_OBJECT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12935,13 +12936,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOCK_OBJECT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12959,13 +12960,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_ATTR_WITH_HINT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef value; _PyStackRef o; @@ -13050,13 +13051,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _STORE_ATTR_SLOT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef value; _PyStackRef o; @@ -13091,13 +13092,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COMPARE_OP_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -13148,13 +13149,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COMPARE_OP_FLOAT_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -13178,13 +13179,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COMPARE_OP_FLOAT_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -13209,13 +13210,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COMPARE_OP_FLOAT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -13239,13 +13240,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COMPARE_OP_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -13273,13 +13274,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COMPARE_OP_STR_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -13305,13 +13306,13 @@ _tos_cache1 = l; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _IS_OP_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef b; @@ -13330,13 +13331,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _IS_OP_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef b; @@ -13356,13 +13357,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _IS_OP_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef b; @@ -13381,13 +13382,13 @@ _tos_cache1 = l; _tos_cache0 = b; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CONTAINS_OP_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef b; @@ -13420,13 +13421,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_ANY_SET_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -13439,13 +13440,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_ANY_SET_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -13458,13 +13459,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_ANY_SET_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13480,13 +13481,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_ANY_SET_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13505,13 +13506,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_SET_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -13524,13 +13525,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_SET_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -13543,13 +13544,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_SET_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13565,13 +13566,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_SET_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13590,13 +13591,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FROZENSET_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -13609,13 +13610,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FROZENSET_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -13628,13 +13629,13 @@ } _tos_cache0 = tos; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FROZENSET_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13650,13 +13651,13 @@ _tos_cache1 = tos; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_FROZENSET_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13675,13 +13676,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CONTAINS_OP_SET_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef b; @@ -13716,13 +13717,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CONTAINS_OP_DICT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef b; @@ -13757,13 +13758,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_EG_MATCH_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef match_type_st; _PyStackRef exc_value_st; _PyStackRef rest; @@ -13833,13 +13834,13 @@ _tos_cache0 = rest; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_EXC_MATCH_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef right; _PyStackRef left; _PyStackRef b; @@ -13876,13 +13877,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _IMPORT_NAME_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef fromlist; _PyStackRef level; _PyStackRef res; @@ -13939,13 +13940,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _IMPORT_FROM_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef from; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -13983,7 +13984,7 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -13993,7 +13994,7 @@ case _IS_NONE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef b; _PyStackRef _stack_item_0 = _tos_cache0; @@ -14018,7 +14019,7 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -14026,7 +14027,7 @@ case _GET_LEN_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef obj; _PyStackRef len; _PyStackRef _stack_item_0 = _tos_cache0; @@ -14053,13 +14054,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MATCH_CLASS_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef names; _PyStackRef type; _PyStackRef subject; @@ -14107,13 +14108,13 @@ stack_pointer[-3] = attrs; stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MATCH_MAPPING_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; @@ -14124,13 +14125,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MATCH_MAPPING_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef subject; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -14140,13 +14141,13 @@ _tos_cache1 = res; _tos_cache0 = subject; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MATCH_MAPPING_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef subject; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -14158,13 +14159,13 @@ _tos_cache1 = subject; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MATCH_SEQUENCE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; @@ -14175,13 +14176,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MATCH_SEQUENCE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef subject; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -14191,13 +14192,13 @@ _tos_cache1 = res; _tos_cache0 = subject; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MATCH_SEQUENCE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef subject; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -14209,13 +14210,13 @@ _tos_cache1 = subject; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MATCH_KEYS_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef keys; _PyStackRef subject; _PyStackRef values_or_none; @@ -14242,13 +14243,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GET_ITER_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef iter; _PyStackRef index_or_null; @@ -14274,13 +14275,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_ITERATOR_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; iterable = stack_pointer[-1]; PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable)); @@ -14294,13 +14295,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_ITERATOR_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef _stack_item_0 = _tos_cache0; iterable = _stack_item_0; @@ -14314,13 +14315,13 @@ STAT_INC(GET_ITER, hit); _tos_cache0 = iterable; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_ITERATOR_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14337,13 +14338,13 @@ _tos_cache1 = iterable; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_ITERATOR_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14363,13 +14364,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_ITER_VIRTUAL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; iterable = stack_pointer[-1]; PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable)); @@ -14383,13 +14384,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_ITER_VIRTUAL_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef _stack_item_0 = _tos_cache0; iterable = _stack_item_0; @@ -14403,13 +14404,13 @@ STAT_INC(GET_ITER, hit); _tos_cache0 = iterable; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_ITER_VIRTUAL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14426,13 +14427,13 @@ _tos_cache1 = iterable; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_ITER_VIRTUAL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14452,37 +14453,37 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_TAGGED_ZERO_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef zero; zero = PyStackRef_TagInt(0); _tos_cache0 = zero; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_TAGGED_ZERO_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef zero; _PyStackRef _stack_item_0 = _tos_cache0; zero = PyStackRef_TagInt(0); _tos_cache1 = zero; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_TAGGED_ZERO_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef zero; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14491,13 +14492,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GET_ITER_TRAD_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iterable; _PyStackRef iter; _PyStackRef index_or_null; @@ -14524,7 +14525,7 @@ _tos_cache0 = iter; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -14532,7 +14533,7 @@ case _FOR_ITER_TIER_TWO_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -14570,13 +14571,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_ITER_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; iter = stack_pointer[-2]; PyObject *expected_type = (PyObject *)CURRENT_OPERAND0_64(); @@ -14591,13 +14592,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_ITER_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; iter = stack_pointer[-1]; @@ -14614,13 +14615,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_ITER_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14637,13 +14638,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TYPE_ITER_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14663,13 +14664,13 @@ _tos_cache1 = iter; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_NEXT_INLINE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef next; _PyStackRef _stack_item_0 = _tos_cache0; @@ -14716,13 +14717,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_ITER_VIRTUAL_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; iter = stack_pointer[-2]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); @@ -14736,13 +14737,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_ITER_VIRTUAL_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; iter = stack_pointer[-1]; @@ -14758,13 +14759,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_ITER_VIRTUAL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14780,13 +14781,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_ITER_VIRTUAL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14805,13 +14806,13 @@ _tos_cache1 = iter; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_NOT_NULL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; null_or_index = stack_pointer[-1]; if (PyStackRef_IsNull(null_or_index)) { @@ -14823,13 +14824,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_NOT_NULL_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef _stack_item_0 = _tos_cache0; null_or_index = _stack_item_0; @@ -14841,13 +14842,13 @@ } _tos_cache0 = null_or_index; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_NOT_NULL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14862,13 +14863,13 @@ _tos_cache1 = null_or_index; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_TOS_NOT_NULL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -14886,7 +14887,7 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -14894,7 +14895,7 @@ case _FOR_ITER_VIRTUAL_TIER_TWO_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -14936,7 +14937,7 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -14944,7 +14945,7 @@ case _ITER_CHECK_LIST_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -14968,13 +14969,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_LIST_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15001,13 +15002,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_LIST_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15035,13 +15036,13 @@ _tos_cache1 = null_or_index; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_LIST_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15073,7 +15074,7 @@ _tos_cache1 = iter; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -15081,7 +15082,7 @@ case _GUARD_NOT_EXHAUSTED_LIST_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -15100,13 +15101,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_LIST_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15127,13 +15128,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_LIST_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15154,13 +15155,13 @@ _tos_cache1 = null_or_index; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_LIST_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15184,7 +15185,7 @@ _tos_cache1 = iter; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -15192,7 +15193,7 @@ case _ITER_NEXT_LIST_TIER_TWO_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -15234,13 +15235,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_TUPLE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -15257,13 +15258,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_TUPLE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15282,13 +15283,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_TUPLE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15307,13 +15308,13 @@ _tos_cache1 = null_or_index; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_TUPLE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15335,7 +15336,7 @@ _tos_cache1 = iter; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -15343,7 +15344,7 @@ case _GUARD_NOT_EXHAUSTED_TUPLE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -15360,13 +15361,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_TUPLE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15385,13 +15386,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_TUPLE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15410,13 +15411,13 @@ _tos_cache1 = null_or_index; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_TUPLE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15438,13 +15439,13 @@ _tos_cache1 = iter; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_NEXT_TUPLE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -15462,13 +15463,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_NEXT_TUPLE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -15487,13 +15488,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_NEXT_TUPLE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -15511,13 +15512,13 @@ _tos_cache1 = null_or_index; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_RANGE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; iter = stack_pointer[-2]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); @@ -15538,13 +15539,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_RANGE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; iter = stack_pointer[-1]; @@ -15568,13 +15569,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_RANGE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -15599,13 +15600,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_CHECK_RANGE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -15634,7 +15635,7 @@ _tos_cache1 = iter; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -15642,7 +15643,7 @@ case _GUARD_NOT_EXHAUSTED_RANGE_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; iter = stack_pointer[-2]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); @@ -15657,13 +15658,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_RANGE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; iter = stack_pointer[-1]; @@ -15680,13 +15681,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_RANGE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -15703,13 +15704,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOT_EXHAUSTED_RANGE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -15729,13 +15730,13 @@ _tos_cache1 = iter; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_NEXT_RANGE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-2]; @@ -15760,13 +15761,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_NEXT_RANGE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef next; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15795,13 +15796,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ITER_NEXT_RANGE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef next; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15830,13 +15831,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FOR_ITER_GEN_FRAME_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef gen_frame; oparg = CURRENT_OPARG(); @@ -15866,13 +15867,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FOR_ITER_GEN_FRAME_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef gen_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15905,13 +15906,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FOR_ITER_GEN_FRAME_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef iter; _PyStackRef gen_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15945,13 +15946,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = iter; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _INSERT_NULL_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self; _PyStackRef *method_and_self; _PyStackRef _stack_item_0 = _tos_cache0; @@ -15962,13 +15963,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += 2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_SPECIAL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *method_and_self; oparg = CURRENT_OPARG(); method_and_self = &stack_pointer[-2]; @@ -15997,13 +15998,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _WITH_EXCEPT_START_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; _PyStackRef lasti; _PyStackRef exit_self; @@ -16055,13 +16056,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_EXC_INFO_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; @@ -16081,13 +16082,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_EXC_INFO_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; @@ -16106,13 +16107,13 @@ _tos_cache1 = new_exc; _tos_cache0 = prev_exc; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_EXC_INFO_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; @@ -16133,13 +16134,13 @@ _tos_cache1 = prev_exc; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -16154,13 +16155,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -16175,13 +16176,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -16199,13 +16200,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -16226,13 +16227,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_KEYS_VERSION_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t keys_version = (uint32_t)CURRENT_OPERAND0_32(); @@ -16248,13 +16249,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_KEYS_VERSION_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -16270,13 +16271,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_KEYS_VERSION_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -16295,13 +16296,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_KEYS_VERSION_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -16323,13 +16324,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_WITH_VALUES_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16347,13 +16348,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_WITH_VALUES_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16370,13 +16371,13 @@ _tos_cache1 = self; _tos_cache0 = attr; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_WITH_VALUES_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16395,13 +16396,13 @@ _tos_cache1 = attr; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_NO_DICT_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16420,13 +16421,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_NO_DICT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16444,13 +16445,13 @@ _tos_cache1 = self; _tos_cache0 = attr; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_NO_DICT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16470,13 +16471,13 @@ _tos_cache1 = attr; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -16494,13 +16495,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -16519,13 +16520,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_ATTR_METHOD_LAZY_DICT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; owner = stack_pointer[-1]; uint16_t dictoffset = (uint16_t)CURRENT_OPERAND0_16(); @@ -16540,13 +16541,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_ATTR_METHOD_LAZY_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -16561,13 +16562,13 @@ } _tos_cache0 = owner; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_ATTR_METHOD_LAZY_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -16585,13 +16586,13 @@ _tos_cache1 = owner; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_ATTR_METHOD_LAZY_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -16612,13 +16613,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_LAZY_DICT_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16636,13 +16637,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_LAZY_DICT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16659,13 +16660,13 @@ _tos_cache1 = self; _tos_cache0 = attr; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_ATTR_METHOD_LAZY_DICT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -16684,13 +16685,13 @@ _tos_cache1 = attr; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAYBE_EXPAND_METHOD_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -16715,7 +16716,7 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer[-2 - oparg] = callable; stack_pointer[-1 - oparg] = self_or_null; - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -16725,7 +16726,7 @@ case _PY_FRAME_GENERAL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -16760,13 +16761,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_FUNCTION_VERSION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -16784,13 +16785,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_FUNCTION_VERSION_INLINE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); uint32_t func_version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *callable_o = (PyObject *)CURRENT_OPERAND1_64(); assert(PyFunction_Check(callable_o)); @@ -16801,13 +16802,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_FUNCTION_VERSION_INLINE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t func_version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *callable_o = (PyObject *)CURRENT_OPERAND1_64(); @@ -16821,13 +16822,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_FUNCTION_VERSION_INLINE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t func_version = (uint32_t)CURRENT_OPERAND0_32(); @@ -16844,13 +16845,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_FUNCTION_VERSION_INLINE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -16870,13 +16871,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_METHOD_VERSION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -16906,13 +16907,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _EXPAND_METHOD_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -16934,13 +16935,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_NOT_PY_CALLABLE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -16956,13 +16957,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_NON_PY_GENERAL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -17000,13 +17001,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -17023,13 +17024,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -17050,26 +17051,26 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_PEP_523_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); if (IS_PEP523_HOOKED(tstate)) { UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_PEP_523_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; if (IS_PEP523_HOOKED(tstate)) { UOP_STAT_INC(uopcode, miss); @@ -17079,13 +17080,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_PEP_523_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (IS_PEP523_HOOKED(tstate)) { @@ -17098,13 +17099,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_PEP_523_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -17120,13 +17121,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_FUNCTION_EXACT_ARGS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -17142,13 +17143,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_STACK_SPACE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -17161,26 +17162,26 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_RECURSION_REMAINING_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); if (tstate->py_recursion_remaining <= 1) { UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_RECURSION_REMAINING_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; if (tstate->py_recursion_remaining <= 1) { UOP_STAT_INC(uopcode, miss); @@ -17190,13 +17191,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_RECURSION_REMAINING_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (tstate->py_recursion_remaining <= 1) { @@ -17209,13 +17210,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_RECURSION_REMAINING_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -17231,13 +17232,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _INIT_CALL_PY_EXACT_ARGS_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -17260,13 +17261,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _INIT_CALL_PY_EXACT_ARGS_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -17289,13 +17290,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _INIT_CALL_PY_EXACT_ARGS_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -17318,13 +17319,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _INIT_CALL_PY_EXACT_ARGS_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -17347,13 +17348,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _INIT_CALL_PY_EXACT_ARGS_4_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -17376,13 +17377,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _INIT_CALL_PY_EXACT_ARGS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -17404,13 +17405,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PUSH_FRAME_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; new_frame = _stack_item_0; @@ -17426,13 +17427,13 @@ DTRACE_FUNCTION_ENTRY(); LLTRACE_RESUME_FRAME(); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_NULL_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; null = stack_pointer[-2]; if (!PyStackRef_IsNull(null)) { @@ -17445,13 +17446,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_NULL_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; null = stack_pointer[-1]; @@ -17466,13 +17467,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_NULL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17487,13 +17488,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = null; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_NOS_NULL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17511,13 +17512,13 @@ _tos_cache1 = null; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_THIRD_NULL_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; null = stack_pointer[-3]; if (!PyStackRef_IsNull(null)) { @@ -17531,13 +17532,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_THIRD_NULL_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; null = stack_pointer[-2]; @@ -17553,13 +17554,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_THIRD_NULL_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17577,13 +17578,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_THIRD_NULL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17601,13 +17602,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = null; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_TYPE_1_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; callable = stack_pointer[-3]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); @@ -17622,13 +17623,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_TYPE_1_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; callable = stack_pointer[-2]; @@ -17645,13 +17646,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_TYPE_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17670,13 +17671,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_TYPE_1_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17695,13 +17696,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = callable; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_TYPE_1_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef res; _PyStackRef a; @@ -17717,13 +17718,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_TYPE_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef res; _PyStackRef a; @@ -17740,13 +17741,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_TYPE_1_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef res; _PyStackRef a; @@ -17764,13 +17765,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_TYPE_1_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef res; _PyStackRef a; @@ -17787,13 +17788,13 @@ _tos_cache1 = a; _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_STR_1_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; callable = stack_pointer[-3]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); @@ -17808,13 +17809,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_STR_1_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; callable = stack_pointer[-2]; @@ -17831,13 +17832,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_STR_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17856,13 +17857,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_STR_1_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17881,13 +17882,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = callable; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_STR_1_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef res; _PyStackRef a; @@ -17919,13 +17920,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_TUPLE_1_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; callable = stack_pointer[-3]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); @@ -17940,13 +17941,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_TUPLE_1_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; callable = stack_pointer[-2]; @@ -17963,13 +17964,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_TUPLE_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -17988,13 +17989,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_TUPLE_1_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -18013,13 +18014,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = callable; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_TUPLE_1_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef res; _PyStackRef a; @@ -18051,13 +18052,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_OBJECT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -18082,13 +18083,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _ALLOCATE_OBJECT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -18129,13 +18130,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CREATE_INIT_FRAME_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self; _PyStackRef init; @@ -18171,13 +18172,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _EXIT_INIT_CHECK_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef should_be_none; _PyStackRef _stack_item_0 = _tos_cache0; should_be_none = _stack_item_0; @@ -18197,13 +18198,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_BUILTIN_CLASS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -18220,13 +18221,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_BUILTIN_CLASS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -18261,13 +18262,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_BUILTIN_O_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -18294,13 +18295,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_BUILTIN_O_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -18336,13 +18337,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_BUILTIN_FAST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -18358,13 +18359,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_BUILTIN_FAST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -18400,13 +18401,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_BUILTIN_FAST_WITH_KEYWORDS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -18422,13 +18423,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -18460,13 +18461,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_LEN_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; callable = stack_pointer[-3]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); @@ -18482,13 +18483,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_LEN_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; callable = stack_pointer[-2]; @@ -18506,13 +18507,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_LEN_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -18532,13 +18533,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_LEN_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -18558,13 +18559,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = callable; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_LEN_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef callable; _PyStackRef res; @@ -18604,13 +18605,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_ISINSTANCE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; callable = stack_pointer[-4]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); @@ -18626,13 +18627,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_ISINSTANCE_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; callable = stack_pointer[-3]; @@ -18650,13 +18651,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_ISINSTANCE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -18676,13 +18677,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_ISINSTANCE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -18702,13 +18703,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_ISINSTANCE_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef cls; _PyStackRef instance; _PyStackRef null; @@ -18758,13 +18759,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_LIST_APPEND_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; callable = stack_pointer[-3]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); @@ -18780,13 +18781,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_LIST_APPEND_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; callable = stack_pointer[-2]; @@ -18804,13 +18805,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_LIST_APPEND_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -18830,13 +18831,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_LIST_APPEND_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -18856,13 +18857,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = callable; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_LIST_APPEND_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef self; _PyStackRef callable; @@ -18896,13 +18897,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_LIST_APPEND_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef self; _PyStackRef callable; @@ -18940,13 +18941,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_LIST_APPEND_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef self; _PyStackRef callable; @@ -18987,13 +18988,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_LIST_APPEND_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef arg; _PyStackRef self; _PyStackRef callable; @@ -19035,13 +19036,13 @@ _tos_cache1 = c; _tos_cache0 = none; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_METHOD_DESCRIPTOR_O_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -19078,13 +19079,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_METHOD_DESCRIPTOR_O_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -19126,26 +19127,26 @@ stack_pointer[-2 - oparg] = res; stack_pointer += -1 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_RECURSION_LIMIT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); if (_Py_ReachedRecursionLimit(tstate)) { UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_RECURSION_LIMIT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; if (_Py_ReachedRecursionLimit(tstate)) { UOP_STAT_INC(uopcode, miss); @@ -19155,13 +19156,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_RECURSION_LIMIT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (_Py_ReachedRecursionLimit(tstate)) { @@ -19174,13 +19175,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_RECURSION_LIMIT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -19196,13 +19197,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_METHOD_DESCRIPTOR_O_INLINE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef callable; _PyStackRef res; @@ -19238,13 +19239,13 @@ stack_pointer[-1 - oparg] = res; stack_pointer += -oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -19282,13 +19283,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -19331,13 +19332,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_INLINE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_st; _PyStackRef callable; @@ -19372,13 +19373,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_METHOD_DESCRIPTOR_NOARGS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -19415,13 +19416,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_METHOD_DESCRIPTOR_NOARGS_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -19460,13 +19461,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_METHOD_DESCRIPTOR_NOARGS_INLINE_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef callable; _PyStackRef res; @@ -19499,13 +19500,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -19542,13 +19543,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_METHOD_DESCRIPTOR_FAST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -19591,13 +19592,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_METHOD_DESCRIPTOR_FAST_INLINE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef self_st; _PyStackRef callable; @@ -19633,7 +19634,7 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -19641,7 +19642,7 @@ case _MAYBE_EXPAND_METHOD_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -19671,7 +19672,7 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer[-2 - oparg] = callable; stack_pointer[-1 - oparg] = self_or_null; - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -19679,7 +19680,7 @@ case _PY_FRAME_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef kwnames; _PyStackRef *args; _PyStackRef self_or_null; @@ -19728,13 +19729,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_FUNCTION_VERSION_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -19756,13 +19757,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_METHOD_VERSION_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef null; _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -19798,13 +19799,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _EXPAND_METHOD_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef self_or_null; _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -19832,13 +19833,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_NOT_PY_CALLABLE_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -19858,13 +19859,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_KW_NON_PY_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef kwnames; _PyStackRef *args; _PyStackRef self_or_null; @@ -19908,13 +19909,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -3 - oparg; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_CALLARGS_A_TUPLE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef callargs; _PyStackRef func; _PyStackRef _stack_item_0 = _tos_cache0; @@ -19955,7 +19956,7 @@ _tos_cache1 = callargs; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -19963,7 +19964,7 @@ case _CHECK_IS_PY_CALLABLE_EX_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_st; func_st = stack_pointer[-4]; PyObject *func = PyStackRef_AsPyObjectBorrow(func_st); @@ -19983,13 +19984,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_PY_CALLABLE_EX_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_st; _PyStackRef _stack_item_0 = _tos_cache0; func_st = stack_pointer[-3]; @@ -20012,13 +20013,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_PY_CALLABLE_EX_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_st; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -20044,13 +20045,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_PY_CALLABLE_EX_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_st; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -20077,13 +20078,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _PY_FRAME_EX_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef kwargs_st; _PyStackRef callargs_st; _PyStackRef func_st; @@ -20123,13 +20124,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_NOT_PY_CALLABLE_EX_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_st; func_st = stack_pointer[-4]; PyObject *func = PyStackRef_AsPyObjectBorrow(func_st); @@ -20144,13 +20145,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_NOT_PY_CALLABLE_EX_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_st; _PyStackRef _stack_item_0 = _tos_cache0; func_st = stack_pointer[-3]; @@ -20167,13 +20168,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_NOT_PY_CALLABLE_EX_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_st; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -20192,13 +20193,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_IS_NOT_PY_CALLABLE_EX_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_st; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -20217,13 +20218,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CALL_FUNCTION_EX_NON_PY_GENERAL_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef kwargs_st; _PyStackRef callargs_st; _PyStackRef null; @@ -20274,13 +20275,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_FUNCTION_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef codeobj_st; _PyStackRef func; _PyStackRef co; @@ -20308,13 +20309,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_FUNCTION_ATTRIBUTE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_in; _PyStackRef attr_st; _PyStackRef func_out; @@ -20334,13 +20335,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_FUNCTION_ATTRIBUTE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_in; _PyStackRef attr_st; _PyStackRef func_out; @@ -20361,13 +20362,13 @@ SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_FUNCTION_ATTRIBUTE_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_in; _PyStackRef attr_st; _PyStackRef func_out; @@ -20387,13 +20388,13 @@ *ptr = attr; _tos_cache0 = func_out; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_FUNCTION_ATTRIBUTE_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef func_in; _PyStackRef attr_st; _PyStackRef func_out; @@ -20415,13 +20416,13 @@ _tos_cache1 = func_out; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RETURN_GENERATOR_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef res; assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); @@ -20452,13 +20453,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BUILD_SLICE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef *args; _PyStackRef slice; oparg = CURRENT_OPARG(); @@ -20486,13 +20487,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CONVERT_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef result; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20521,13 +20522,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FORMAT_SIMPLE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20558,13 +20559,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FORMAT_WITH_SPEC_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef fmt_spec; _PyStackRef value; _PyStackRef res; @@ -20598,13 +20599,13 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_1_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; bottom = stack_pointer[-1]; @@ -20614,13 +20615,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20629,13 +20630,13 @@ _tos_cache1 = top; _tos_cache0 = bottom; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20646,13 +20647,13 @@ _tos_cache1 = bottom; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_2_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; bottom = stack_pointer[-2]; @@ -20663,13 +20664,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_2_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20681,13 +20682,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_2_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20698,13 +20699,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = bottom; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_3_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; bottom = stack_pointer[-3]; @@ -20715,13 +20716,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_3_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20733,13 +20734,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20750,13 +20751,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_3_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20771,13 +20772,13 @@ stack_pointer[0] = bottom; stack_pointer += 1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COPY_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef bottom; _PyStackRef top; oparg = CURRENT_OPARG(); @@ -20785,13 +20786,13 @@ top = PyStackRef_DUP(bottom); _tos_cache0 = top; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _BINARY_OP_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef rhs; _PyStackRef lhs; _PyStackRef res; @@ -20825,13 +20826,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_2_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; top = stack_pointer[-1]; @@ -20844,13 +20845,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_2_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20864,13 +20865,13 @@ SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_2_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20883,13 +20884,13 @@ _tos_cache1 = top; _tos_cache0 = bottom; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_2_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20904,13 +20905,13 @@ _tos_cache1 = bottom; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_3_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; top = stack_pointer[-1]; @@ -20924,13 +20925,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_3_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20945,13 +20946,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20967,13 +20968,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_3_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; _PyStackRef _stack_item_0 = _tos_cache0; @@ -20988,13 +20989,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = bottom; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SWAP_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef bottom; _PyStackRef _stack_item_0 = _tos_cache0; @@ -21007,7 +21008,7 @@ _tos_cache0 = top; SET_CURRENT_CACHED_VALUES(1); stack_pointer[-1 - (oparg-2)] = bottom; - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } @@ -21031,7 +21032,7 @@ case _GUARD_IS_TRUE_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; flag = stack_pointer[-1]; int is_true = PyStackRef_IsTrue(flag); @@ -21045,13 +21046,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_TRUE_POP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; flag = _stack_item_0; @@ -21062,13 +21063,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_TRUE_POP_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21082,13 +21083,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_TRUE_POP_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21105,13 +21106,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_FALSE_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; flag = stack_pointer[-1]; int is_false = PyStackRef_IsFalse(flag); @@ -21125,13 +21126,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_FALSE_POP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; flag = _stack_item_0; @@ -21142,13 +21143,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_FALSE_POP_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21162,13 +21163,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_FALSE_POP_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21185,13 +21186,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_4_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = 4; assert(oparg == CURRENT_OPARG()); @@ -21212,13 +21213,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_4_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; @@ -21236,13 +21237,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_4_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21263,13 +21264,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_4_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21293,13 +21294,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_5_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = 5; assert(oparg == CURRENT_OPARG()); @@ -21320,13 +21321,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_5_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 5; @@ -21344,13 +21345,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_5_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21371,13 +21372,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_5_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21401,13 +21402,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_6_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = 6; assert(oparg == CURRENT_OPARG()); @@ -21428,13 +21429,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_6_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 6; @@ -21452,13 +21453,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_6_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21479,13 +21480,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_6_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21509,13 +21510,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_7_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = 7; assert(oparg == CURRENT_OPARG()); @@ -21536,13 +21537,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_7_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 7; @@ -21560,13 +21561,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_7_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21587,13 +21588,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_7_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21617,13 +21618,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = CURRENT_OPARG(); flag = stack_pointer[-1]; @@ -21643,13 +21644,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -21666,13 +21667,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21692,13 +21693,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_SET_POP_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21721,13 +21722,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_4_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = 4; assert(oparg == CURRENT_OPARG()); @@ -21748,13 +21749,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_4_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; @@ -21772,13 +21773,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_4_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21799,13 +21800,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_4_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21829,13 +21830,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_5_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = 5; assert(oparg == CURRENT_OPARG()); @@ -21856,13 +21857,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_5_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 5; @@ -21880,13 +21881,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_5_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21907,13 +21908,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_5_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -21937,13 +21938,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_6_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = 6; assert(oparg == CURRENT_OPARG()); @@ -21964,13 +21965,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_6_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 6; @@ -21988,13 +21989,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_6_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22015,13 +22016,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_6_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22045,13 +22046,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_7_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = 7; assert(oparg == CURRENT_OPARG()); @@ -22072,13 +22073,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_7_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 7; @@ -22096,13 +22097,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_7_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22123,13 +22124,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_7_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22153,13 +22154,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; oparg = CURRENT_OPARG(); flag = stack_pointer[-1]; @@ -22179,13 +22180,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -22202,13 +22203,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22228,13 +22229,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_BIT_IS_UNSET_POP_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef flag; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22257,13 +22258,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_NONE_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; val = stack_pointer[-1]; int is_none = PyStackRef_IsNone(val); @@ -22282,13 +22283,13 @@ SET_CURRENT_CACHED_VALUES(0); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_NONE_POP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; _PyStackRef _stack_item_0 = _tos_cache0; val = _stack_item_0; @@ -22304,13 +22305,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_NONE_POP_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22334,13 +22335,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_NONE_POP_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22368,13 +22369,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IS_NOT_NONE_POP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef val; _PyStackRef _stack_item_0 = _tos_cache0; val = _stack_item_0; @@ -22391,44 +22392,44 @@ _tos_cache1 = PyStackRef_ZERO_BITS; _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _JUMP_TO_TOP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); JUMP_TO_JUMP_TARGET(); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_IP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0_64(); frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_IP_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0_64(); frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_IP_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0_64(); @@ -22436,13 +22437,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SET_IP_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -22452,13 +22453,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_STACK_SPACE_OPERAND_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); uint32_t framesize = (uint32_t)CURRENT_OPERAND0_32(); assert(framesize <= INT_MAX); if (!_PyThreadState_HasStackSpace(tstate, framesize)) { @@ -22467,13 +22468,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_STACK_SPACE_OPERAND_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t framesize = (uint32_t)CURRENT_OPERAND0_32(); assert(framesize <= INT_MAX); @@ -22485,13 +22486,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_STACK_SPACE_OPERAND_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t framesize = (uint32_t)CURRENT_OPERAND0_32(); @@ -22506,13 +22507,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_STACK_SPACE_OPERAND_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -22530,13 +22531,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SAVE_RETURN_OFFSET_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); @@ -22545,13 +22546,13 @@ frame->return_offset = oparg; #endif SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SAVE_RETURN_OFFSET_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); #if TIER_ONE @@ -22562,13 +22563,13 @@ #endif _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SAVE_RETURN_OFFSET_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); @@ -22581,13 +22582,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SAVE_RETURN_OFFSET_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -22602,13 +22603,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _EXIT_TRACE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); PyObject *exit_p = (PyObject *)CURRENT_OPERAND0_64(); _PyExitData *exit = (_PyExitData *)exit_p; #if defined(Py_DEBUG) && !defined(_Py_JIT) @@ -22634,7 +22635,7 @@ case _EXIT_TRACE_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0_64(); _PyExitData *exit = (_PyExitData *)exit_p; @@ -22668,7 +22669,7 @@ case _EXIT_TRACE_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0_64(); @@ -22705,7 +22706,7 @@ case _EXIT_TRACE_r30: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -22745,7 +22746,7 @@ case _DYNAMIC_EXIT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); PyObject *exit_p = (PyObject *)CURRENT_OPERAND0_64(); #if defined(Py_DEBUG) && !defined(_Py_JIT) _PyExitData *exit = (_PyExitData *)exit_p; @@ -22768,7 +22769,7 @@ case _DYNAMIC_EXIT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0_64(); #if defined(Py_DEBUG) && !defined(_Py_JIT) @@ -22799,7 +22800,7 @@ case _DYNAMIC_EXIT_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0_64(); @@ -22833,7 +22834,7 @@ case _DYNAMIC_EXIT_r30: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -22870,20 +22871,20 @@ case _CHECK_VALIDITY_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); if (!current_executor->vm_data.valid) { UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_VALIDITY_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; if (!current_executor->vm_data.valid) { UOP_STAT_INC(uopcode, miss); @@ -22893,13 +22894,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_VALIDITY_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (!current_executor->vm_data.valid) { @@ -22912,13 +22913,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _CHECK_VALIDITY_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -22934,25 +22935,25 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_INLINE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0_64(); value = PyStackRef_FromPyObjectNew(ptr); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_INLINE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0_64(); @@ -22960,13 +22961,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_INLINE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -22976,25 +22977,25 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_INLINE_BORROW_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0_64(); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_INLINE_BORROW_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0_64(); @@ -23002,13 +23003,13 @@ _tos_cache1 = value; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _LOAD_CONST_INLINE_BORROW_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -23018,13 +23019,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RROT_3_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef middle; _PyStackRef bottom; @@ -23041,13 +23042,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RROT_3_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef middle; _PyStackRef bottom; @@ -23065,13 +23066,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RROT_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef middle; _PyStackRef bottom; @@ -23090,13 +23091,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _RROT_3_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef top; _PyStackRef middle; _PyStackRef bottom; @@ -23114,13 +23115,13 @@ _tos_cache1 = middle; _tos_cache0 = bottom; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _START_EXECUTOR_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); PyObject *executor = (PyObject *)CURRENT_OPERAND0_64(); #ifndef _Py_JIT assert(current_executor == (_PyExecutorObject*)executor); @@ -23140,46 +23141,46 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_WARM_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); current_executor->vm_data.cold = false; SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_WARM_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; current_executor->vm_data.cold = false; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_WARM_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; current_executor->vm_data.cold = false; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _MAKE_WARM_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23188,35 +23189,35 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FATAL_ERROR_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); assert(0); Py_FatalError("Fatal error uop executed."); SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FATAL_ERROR_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; assert(0); Py_FatalError("Fatal error uop executed."); _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FATAL_ERROR_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; assert(0); @@ -23224,13 +23225,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _FATAL_ERROR_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23240,13 +23241,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _DEOPT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); SET_CURRENT_CACHED_VALUES(0); GOTO_TIER_ONE((frame->owner == FRAME_OWNED_BY_INTERPRETER) ? _Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS_PTR : _PyFrame_GetBytecode(frame) + CURRENT_TARGET()); @@ -23254,7 +23255,7 @@ case _DEOPT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; stack_pointer[0] = _stack_item_0; stack_pointer += 1; @@ -23266,7 +23267,7 @@ case _DEOPT_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; stack_pointer[0] = _stack_item_0; @@ -23280,7 +23281,7 @@ case _DEOPT_r30: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23296,7 +23297,7 @@ case _HANDLE_PENDING_AND_DEOPT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -23306,7 +23307,7 @@ case _HANDLE_PENDING_AND_DEOPT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; stack_pointer[0] = _stack_item_0; stack_pointer += 1; @@ -23320,7 +23321,7 @@ case _HANDLE_PENDING_AND_DEOPT_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; stack_pointer[0] = _stack_item_0; @@ -23336,7 +23337,7 @@ case _HANDLE_PENDING_AND_DEOPT_r30: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23354,7 +23355,7 @@ case _ERROR_POP_N_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); oparg = CURRENT_OPARG(); uint32_t target = (uint32_t)CURRENT_OPERAND0_32(); assert(oparg == 0); @@ -23365,68 +23366,68 @@ case _SPILL_OR_RELOAD_r01: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _tos_cache0 = stack_pointer[-1]; SET_CURRENT_CACHED_VALUES(1); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r02: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _tos_cache1 = stack_pointer[-1]; _tos_cache0 = stack_pointer[-2]; SET_CURRENT_CACHED_VALUES(2); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r03: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _tos_cache2 = stack_pointer[-1]; _tos_cache1 = stack_pointer[-2]; _tos_cache0 = stack_pointer[-3]; SET_CURRENT_CACHED_VALUES(3); stack_pointer += -3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r10: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; SET_CURRENT_CACHED_VALUES(0); stack_pointer[0] = _stack_item_0; stack_pointer += 1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r12: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache1 = _stack_item_0; _tos_cache0 = stack_pointer[-1]; SET_CURRENT_CACHED_VALUES(2); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r13: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache2 = _stack_item_0; _tos_cache1 = stack_pointer[-1]; @@ -23434,13 +23435,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r20: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; SET_CURRENT_CACHED_VALUES(0); @@ -23448,13 +23449,13 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r21: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _tos_cache0 = _stack_item_1; @@ -23462,13 +23463,13 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r23: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _tos_cache2 = _stack_item_1; @@ -23477,13 +23478,13 @@ SET_CURRENT_CACHED_VALUES(3); stack_pointer += -1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r30: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23493,13 +23494,13 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r31: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23509,13 +23510,13 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _SPILL_OR_RELOAD_r32: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23525,13 +23526,13 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TIER2_RESUME_CHECK_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { UOP_STAT_INC(uopcode, miss); @@ -23548,13 +23549,13 @@ JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TIER2_RESUME_CHECK_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { @@ -23575,13 +23576,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TIER2_RESUME_CHECK_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; #if defined(__EMSCRIPTEN__) @@ -23606,13 +23607,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _TIER2_RESUME_CHECK_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23641,13 +23642,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _COLD_EXIT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyExitData *exit = tstate->jit_exit; assert(exit != NULL); assert(frame->owner < FRAME_OWNED_BY_INTERPRETER); @@ -23684,7 +23685,7 @@ case _COLD_DYNAMIC_EXIT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _Py_CODEUNIT *target = frame->instr_ptr; SET_CURRENT_CACHED_VALUES(0); GOTO_TIER_ONE(target); @@ -23692,7 +23693,7 @@ case _GUARD_CODE_VERSION__PUSH_FRAME_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *code = PyStackRef_AsPyObjectBorrow(frame->f_executable); assert(PyCode_Check(code)); @@ -23704,13 +23705,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION__PUSH_FRAME_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *code = PyStackRef_AsPyObjectBorrow(frame->f_executable); @@ -23725,13 +23726,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION__PUSH_FRAME_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); @@ -23749,13 +23750,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION__PUSH_FRAME_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23776,13 +23777,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_YIELD_VALUE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *code = PyStackRef_AsPyObjectBorrow(frame->f_executable); assert(PyCode_Check(code)); @@ -23795,13 +23796,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_YIELD_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *code = PyStackRef_AsPyObjectBorrow(frame->f_executable); @@ -23817,13 +23818,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_YIELD_VALUE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); @@ -23842,13 +23843,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_YIELD_VALUE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23870,13 +23871,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_RETURN_VALUE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *code = PyStackRef_AsPyObjectBorrow(frame->f_executable); assert(PyCode_Check(code)); @@ -23889,13 +23890,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_RETURN_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *code = PyStackRef_AsPyObjectBorrow(frame->f_executable); @@ -23911,13 +23912,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_RETURN_VALUE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); @@ -23936,13 +23937,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_RETURN_VALUE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -23964,13 +23965,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_RETURN_GENERATOR_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *code = PyStackRef_AsPyObjectBorrow(frame->f_executable); assert(PyCode_Check(code)); @@ -23983,13 +23984,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_RETURN_GENERATOR_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); PyObject *code = PyStackRef_AsPyObjectBorrow(frame->f_executable); @@ -24005,13 +24006,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_RETURN_GENERATOR_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t version = (uint32_t)CURRENT_OPERAND0_32(); @@ -24030,13 +24031,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_CODE_VERSION_RETURN_GENERATOR_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -24058,13 +24059,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP__PUSH_FRAME_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); _Py_CODEUNIT *target = frame->instr_ptr; if (target != (_Py_CODEUNIT *)ip) { @@ -24075,13 +24076,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP__PUSH_FRAME_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); _Py_CODEUNIT *target = frame->instr_ptr; @@ -24095,13 +24096,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP__PUSH_FRAME_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); @@ -24118,13 +24119,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP__PUSH_FRAME_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -24144,13 +24145,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_YIELD_VALUE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); _Py_CODEUNIT *target = frame->instr_ptr + 1 + INLINE_CACHE_ENTRIES_SEND; if (target != (_Py_CODEUNIT *)ip) { @@ -24162,13 +24163,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_YIELD_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); _Py_CODEUNIT *target = frame->instr_ptr + 1 + INLINE_CACHE_ENTRIES_SEND; @@ -24183,13 +24184,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_YIELD_VALUE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); @@ -24207,13 +24208,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_YIELD_VALUE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -24234,13 +24235,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_RETURN_VALUE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); _Py_CODEUNIT *target = frame->instr_ptr + frame->return_offset; if (target != (_Py_CODEUNIT *)ip) { @@ -24252,13 +24253,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_RETURN_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); _Py_CODEUNIT *target = frame->instr_ptr + frame->return_offset; @@ -24273,13 +24274,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_RETURN_VALUE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); @@ -24297,13 +24298,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_RETURN_VALUE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -24324,13 +24325,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_RETURN_GENERATOR_r00: { CHECK_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); _Py_CODEUNIT *target = frame->instr_ptr + frame->return_offset; if (target != (_Py_CODEUNIT *)ip) { @@ -24342,13 +24343,13 @@ } } SET_CURRENT_CACHED_VALUES(0); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_RETURN_GENERATOR_r11: { CHECK_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); _Py_CODEUNIT *target = frame->instr_ptr + frame->return_offset; @@ -24363,13 +24364,13 @@ } _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_RETURN_GENERATOR_r22: { CHECK_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *ip = (PyObject *)CURRENT_OPERAND0_64(); @@ -24387,13 +24388,13 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } case _GUARD_IP_RETURN_GENERATOR_r33: { CHECK_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -24414,7 +24415,7 @@ _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(3); - assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); + ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__); break; } diff --git a/Python/flowgraph.c b/Python/flowgraph.c index 224426b7aa4..eb0faf8cd18 100644 --- a/Python/flowgraph.c +++ b/Python/flowgraph.c @@ -11,6 +11,7 @@ #include "pycore_opcode_utils.h" #include "pycore_opcode_metadata.h" // OPCODE_HAS_ARG, etc #include "pycore_pystate.h" // _PyInterpreterState_GET() +#include "pycore_stackref.h" // PyStackRef_AsPyObjectBorrow() #include <stdbool.h> @@ -1330,7 +1331,8 @@ get_const_value(int opcode, int oparg, PyObject *co_consts) } if (opcode == LOAD_COMMON_CONSTANT) { assert(oparg < NUM_COMMON_CONSTANTS); - return Py_NewRef(_PyInterpreterState_GET()->common_consts[oparg]); + return PyStackRef_AsPyObjectBorrow( + _PyInterpreterState_GET()->common_consts[oparg]); } if (constant == NULL) { @@ -1468,6 +1470,10 @@ maybe_instr_make_load_common_const(cfg_instr *instr, PyObject *newconst) && PyUnicode_GET_LENGTH(newconst) == 0) { oparg = CONSTANT_EMPTY_STR; } + else if (PyTuple_CheckExact(newconst) + && PyTuple_GET_SIZE(newconst) == 0) { + oparg = CONSTANT_EMPTY_TUPLE; + } else if (PyLong_CheckExact(newconst)) { int overflow; long val = PyLong_AsLongAndOverflow(newconst, &overflow); diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 53e09a8f452..94384d5db3c 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -9313,7 +9313,7 @@ INSTRUCTION_STATS(LOAD_COMMON_CONSTANT); _PyStackRef value; assert(oparg < NUM_COMMON_CONSTANTS); - value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + value = PyStackRef_DupImmortal(tstate->interp->common_consts[oparg]); stack_pointer[0] = value; stack_pointer += 1; ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); @@ -12004,7 +12004,8 @@ v = stack_pointer[-4]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), - PyStackRef_AsPyObjectSteal(stop)); + PyStackRef_AsPyObjectSteal(stop), + Py_None); stack_pointer = _PyFrame_GetStackPointer(frame); int err; if (slice == NULL) { diff --git a/Python/hamt.c b/Python/hamt.c index e4719e71a52..95998ae5062 100644 --- a/Python/hamt.c +++ b/Python/hamt.c @@ -702,6 +702,7 @@ hamt_node_bitmap_assoc(PyHamtNode_Bitmap *self, PyHamtNode_Bitmap *ret = hamt_node_bitmap_clone(self); if (ret == NULL) { + Py_DECREF(sub_node); return NULL; } Py_SETREF(ret->b_array[val_idx], (PyObject*)sub_node); @@ -994,6 +995,7 @@ hamt_node_bitmap_without(PyHamtNode_Bitmap *self, PyHamtNode_Bitmap *clone = hamt_node_bitmap_clone(self); if (clone == NULL) { + Py_DECREF(sub_node); return W_ERROR; } diff --git a/Python/import.c b/Python/import.c index 60a5ee6e770..82d15ad0683 100644 --- a/Python/import.c +++ b/Python/import.c @@ -94,6 +94,8 @@ static struct _inittab *inittab_copy = NULL; (interp)->imports.modules_by_index #define LAZY_MODULES(interp) \ (interp)->imports.lazy_modules +#define LAZY_PENDING_SUBMODULES(interp) \ + (interp)->imports.lazy_pending_submodules #define IMPORTLIB(interp) \ (interp)->imports.importlib #define OVERRIDE_MULTI_INTERP_EXTENSIONS_CHECK(interp) \ @@ -271,8 +273,11 @@ import_get_module(PyThreadState *tstate, PyObject *name) PyObject * _PyImport_InitLazyModules(PyInterpreterState *interp) { - assert(LAZY_MODULES(interp) == NULL); - LAZY_MODULES(interp) = PyDict_New(); + assert(LAZY_MODULES(interp) == NULL && + LAZY_PENDING_SUBMODULES(interp) == NULL); + + LAZY_PENDING_SUBMODULES(interp) = PyDict_New(); + LAZY_MODULES(interp) = PySet_New(0); return LAZY_MODULES(interp); } @@ -280,6 +285,7 @@ void _PyImport_ClearLazyModules(PyInterpreterState *interp) { Py_CLEAR(LAZY_MODULES(interp)); + Py_CLEAR(LAZY_PENDING_SUBMODULES(interp)); } static int @@ -2162,6 +2168,7 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0, struct _Py_ext_module_loader_result res; int rc = _PyImport_RunModInitFunc(p0, info, &res); + bool main_error = false; if (rc < 0) { /* We discard res.def. */ assert(res.module == NULL); @@ -2186,7 +2193,8 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0, // obmalloc, so we create a copy here. filename = _PyUnicode_Copy(info->filename); if (filename == NULL) { - return NULL; + main_error = true; + goto main_finally; } } else { @@ -2232,6 +2240,7 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0, main_tstate, info->path, info->name, def, &singlephase); if (cached == NULL) { assert(PyErr_Occurred()); + main_error = true; goto main_finally; } } @@ -2247,7 +2256,7 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0, // gh-144601: The exception object can't be transferred across // interpreters. Instead, we print out an unraisable exception, and // then raise a different exception for the calling interpreter. - if (rc < 0) { + if (rc < 0 || main_error) { assert(PyErr_Occurred()); PyErr_FormatUnraisable("Exception while importing from subinterpreter"); } @@ -2256,7 +2265,7 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0, /* Any module we got from the init function will have to be * reloaded in the subinterpreter. */ mod = NULL; - if (rc < 0) { + if (rc < 0 || main_error) { PyErr_SetString(PyExc_ImportError, "failed to import from subinterpreter due to exception"); goto error; @@ -2271,6 +2280,9 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0, if (rc < 0) { goto error; } + if (main_error) { + goto error; + } if (res.kind == _Py_ext_module_kind_MULTIPHASE) { assert_multiphase_def(def); @@ -3928,7 +3940,6 @@ _PyImport_LoadLazyImportTstate(PyThreadState *tstate, PyObject *lazy_import) return NULL; } else if (PySet_Add(importing, lazy_import) < 0) { - _PyImport_ReleaseLock(interp); goto error; } @@ -4049,7 +4060,7 @@ _PyImport_LoadLazyImportTstate(PyThreadState *tstate, PyObject *lazy_import) // Create a cause exception showing where the lazy import was declared. PyObject *msg = PyUnicode_FromFormat( - "deferred import of '%U' raised an exception during resolution", + "lazy import of '%U' raised an exception during resolution", import_name ); Py_DECREF(import_name); // Done with import_name. @@ -4326,20 +4337,10 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, return final_mod; } -static PyObject * -get_mod_dict(PyObject *module) -{ - if (PyModule_Check(module)) { - return Py_NewRef(_PyModule_GetDict(module)); - } - - return PyObject_GetAttr(module, &_Py_ID(__dict__)); -} - // ensure we have the set for the parent module name in sys.lazy_modules. // Returns a new reference. static PyObject * -ensure_lazy_submodules(PyDictObject *lazy_modules, PyObject *parent) +ensure_lazy_pending_submodules(PyDictObject *lazy_modules, PyObject *parent) { PyObject *lazy_submodules; Py_BEGIN_CRITICAL_SECTION(lazy_modules); @@ -4358,27 +4359,28 @@ ensure_lazy_submodules(PyDictObject *lazy_modules, PyObject *parent) return lazy_submodules; } +// Records all parent-child relationships in lazy_pending_submodules +// for a lazily imported module name. When a parent module's attribute +// is accessed, _Py_module_getattro_impl will check lazy_pending_submodules +// and trigger the import. static int -register_lazy_on_parent(PyThreadState *tstate, PyObject *name, - PyObject *builtins) +register_lazy_on_parent(PyThreadState *tstate, PyObject *name) { int ret = -1; PyObject *parent = NULL; PyObject *child = NULL; - PyObject *parent_module = NULL; - PyObject *parent_dict = NULL; PyInterpreterState *interp = tstate->interp; - PyObject *lazy_modules = LAZY_MODULES(interp); - assert(lazy_modules != NULL); + PyObject *lazy_pending_submodules = LAZY_PENDING_SUBMODULES(interp); + assert(lazy_pending_submodules != NULL); Py_INCREF(name); while (true) { Py_ssize_t dot = PyUnicode_FindChar(name, '.', 0, PyUnicode_GET_LENGTH(name), -1); if (dot < 0) { - PyObject *lazy_submodules = ensure_lazy_submodules( - (PyDictObject *)lazy_modules, name); + PyObject *lazy_submodules = ensure_lazy_pending_submodules( + (PyDictObject *)lazy_pending_submodules, name); if (lazy_submodules == NULL) { goto done; } @@ -4387,9 +4389,6 @@ register_lazy_on_parent(PyThreadState *tstate, PyObject *name, goto done; } parent = PyUnicode_Substring(name, 0, dot); - // If `parent` is NULL then this has hit the end of the import, no - // more "parent.child" in the import name. The entire import will be - // resolved lazily. if (parent == NULL) { goto done; } @@ -4399,9 +4398,8 @@ register_lazy_on_parent(PyThreadState *tstate, PyObject *name, goto done; } - // Record the child as being lazily imported from the parent. - PyObject *lazy_submodules = ensure_lazy_submodules( - (PyDictObject *)lazy_modules, parent); + PyObject *lazy_submodules = ensure_lazy_pending_submodules( + (PyDictObject *)lazy_pending_submodules, parent); if (lazy_submodules == NULL) { goto done; } @@ -4412,44 +4410,11 @@ register_lazy_on_parent(PyThreadState *tstate, PyObject *name, } Py_DECREF(lazy_submodules); - // Add the lazy import for the child to the parent. - Py_XSETREF(parent_module, PyImport_GetModule(parent)); - if (parent_module != NULL) { - Py_XSETREF(parent_dict, get_mod_dict(parent_module)); - if (parent_dict == NULL) { - goto done; - } - if (PyDict_CheckExact(parent_dict)) { - int contains = PyDict_Contains(parent_dict, child); - if (contains < 0) { - goto done; - } - if (!contains) { - PyObject *lazy_module_attr = _PyLazyImport_New( - tstate->current_frame, builtins, parent, child - ); - if (lazy_module_attr == NULL) { - goto done; - } - if (PyDict_SetItem(parent_dict, child, - lazy_module_attr) < 0) { - Py_DECREF(lazy_module_attr); - goto done; - } - Py_DECREF(lazy_module_attr); - } - } - ret = 0; - goto done; - } - Py_SETREF(name, parent); parent = NULL; } done: - Py_XDECREF(parent_dict); - Py_XDECREF(parent_module); Py_XDECREF(child); Py_XDECREF(parent); Py_XDECREF(name); @@ -4458,17 +4423,73 @@ register_lazy_on_parent(PyThreadState *tstate, PyObject *name, static int register_from_lazy_on_parent(PyThreadState *tstate, PyObject *abs_name, - PyObject *from, PyObject *builtins) + PyObject *from) { PyObject *fromname = PyUnicode_FromFormat("%U.%U", abs_name, from); if (fromname == NULL) { return -1; } - int res = register_lazy_on_parent(tstate, fromname, builtins); + + // Add the module name to sys.lazy_modules set (PEP 810). + PyObject *lazy_modules = LAZY_MODULES(tstate->interp); + if (PySet_Add(lazy_modules, fromname) < 0) { + Py_DECREF(fromname); + return -1; + } + + int res = register_lazy_on_parent(tstate, fromname); Py_DECREF(fromname); return res; } +PyObject * +_PyImport_TryLoadLazySubmodule(PyObject *mod_name, PyObject *attr_name) +{ + PyInterpreterState *interp = _PyInterpreterState_GET(); + PyObject *lazy_pending = LAZY_PENDING_SUBMODULES(interp); + if (lazy_pending == NULL) { + return NULL; + } + + PyObject *pending_set; + int rc = PyDict_GetItemRef(lazy_pending, mod_name, &pending_set); + if (rc <= 0) { + return NULL; + } + + int contains = PySet_Contains(pending_set, attr_name); + if (contains <= 0) { + Py_DECREF(pending_set); + return NULL; + } + + PyObject *full_name = PyUnicode_FromFormat("%U.%U", mod_name, attr_name); + if (full_name == NULL) { + Py_DECREF(pending_set); + return NULL; + } + + PyObject *mod = PyImport_ImportModuleLevelObject( + full_name, NULL, NULL, NULL, 0); + if (mod == NULL) { + Py_DECREF(pending_set); + Py_DECREF(full_name); + return NULL; + } + Py_DECREF(mod); + + if (PySet_Discard(pending_set, attr_name) < 0) { + Py_DECREF(pending_set); + Py_DECREF(full_name); + return NULL; + } + Py_DECREF(pending_set); + + PyObject *submod = PyImport_GetModule(full_name); + Py_DECREF(full_name); + return submod; +} + PyObject * _PyImport_LazyImportModuleLevelObject(PyThreadState *tstate, PyObject *name, PyObject *builtins, @@ -4555,9 +4576,15 @@ _PyImport_LazyImportModuleLevelObject(PyThreadState *tstate, Py_DECREF(abs_name); return NULL; } + + // Add the module name to sys.lazy_modules set (PEP 810). + PyObject *lazy_modules = LAZY_MODULES(tstate->interp); + if (PySet_Add(lazy_modules, abs_name) < 0) { + goto error; + } + if (fromlist && PyUnicode_Check(fromlist)) { - if (register_from_lazy_on_parent(tstate, abs_name, fromlist, - builtins) < 0) { + if (register_from_lazy_on_parent(tstate, abs_name, fromlist) < 0) { goto error; } } @@ -4565,14 +4592,13 @@ _PyImport_LazyImportModuleLevelObject(PyThreadState *tstate, PyTuple_GET_SIZE(fromlist)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(fromlist); i++) { if (register_from_lazy_on_parent(tstate, abs_name, - PyTuple_GET_ITEM(fromlist, i), - builtins) < 0) + PyTuple_GET_ITEM(fromlist, i)) < 0) { goto error; } } } - else if (register_lazy_on_parent(tstate, abs_name, builtins) < 0) { + else if (register_lazy_on_parent(tstate, abs_name) < 0) { goto error; } @@ -4791,6 +4817,7 @@ _PyImport_ClearCore(PyInterpreterState *interp) Py_CLEAR(IMPORTLIB(interp)); Py_CLEAR(IMPORT_FUNC(interp)); Py_CLEAR(LAZY_IMPORT_FUNC(interp)); + Py_CLEAR(interp->imports.lazy_pending_submodules); Py_CLEAR(interp->imports.lazy_modules); Py_CLEAR(interp->imports.lazy_importing_modules); Py_CLEAR(interp->imports.lazy_imports_filter); @@ -5003,18 +5030,18 @@ _imp_lock_held_impl(PyObject *module) } /*[clinic input] -@permit_long_docstring_body _imp.acquire_lock Acquires the interpreter's import lock for the current thread. -This lock should be used by import hooks to ensure thread-safety when importing -modules. On platforms without threads, this function does nothing. +This lock should be used by import hooks to ensure thread-safety when +importing modules. On platforms without threads, this function does +nothing. [clinic start generated code]*/ static PyObject * _imp_acquire_lock_impl(PyObject *module) -/*[clinic end generated code: output=1aff58cb0ee1b026 input=e1a4ef049d34e7dd]*/ +/*[clinic end generated code: output=1aff58cb0ee1b026 input=60e9c1b4ab471ead]*/ { PyInterpreterState *interp = _PyInterpreterState_GET(); _PyImport_AcquireLock(interp); @@ -5172,6 +5199,7 @@ _imp_init_frozen_impl(PyObject *module, PyObject *name) } /*[clinic input] +@permit_long_summary _imp.find_frozen name: unicode @@ -5192,7 +5220,7 @@ The returned info (a 2-tuple): static PyObject * _imp_find_frozen_impl(PyObject *module, PyObject *name, int withdata) -/*[clinic end generated code: output=8c1c3c7f925397a5 input=22a8847c201542fd]*/ +/*[clinic end generated code: output=8c1c3c7f925397a5 input=30a7a50da49eca97]*/ { struct frozen_info info; frozen_status status = find_frozen(name, &info); @@ -5379,6 +5407,7 @@ _imp__override_frozen_modules_for_tests_impl(PyObject *module, int override) } /*[clinic input] +@permit_long_summary _imp._override_multi_interp_extensions_check override: int @@ -5392,7 +5421,7 @@ _imp._override_multi_interp_extensions_check static PyObject * _imp__override_multi_interp_extensions_check_impl(PyObject *module, int override) -/*[clinic end generated code: output=3ff043af52bbf280 input=e086a2ea181f92ae]*/ +/*[clinic end generated code: output=3ff043af52bbf280 input=24f23f8510a7f6e7]*/ { PyInterpreterState *interp = _PyInterpreterState_GET(); if (_Py_IsMainInterpreter(interp)) { @@ -5580,46 +5609,6 @@ _imp_source_hash_impl(PyObject *module, long key, Py_buffer *source) return PyBytes_FromStringAndSize(hash.data, sizeof(hash.data)); } -static int -publish_lazy_imports_on_module(PyThreadState *tstate, - PyObject *lazy_submodules, - PyObject *name, - PyObject *module_dict) -{ - PyObject *builtins = _PyEval_GetBuiltins(tstate); - PyObject *attr_name; - Py_ssize_t pos = 0; - Py_hash_t hash; - - // Enumerate the set of lazy submodules which have been imported from the - // parent module. - while (_PySet_NextEntryRef(lazy_submodules, &pos, &attr_name, &hash)) { - if (_PyDict_Contains_KnownHash(module_dict, attr_name, hash)) { - Py_DECREF(attr_name); - continue; - } - // Create a new lazy module attr for the subpackage which was - // previously lazily imported. - PyObject *lazy_module_attr = _PyLazyImport_New(tstate->current_frame, builtins, - name, attr_name); - if (lazy_module_attr == NULL) { - Py_DECREF(attr_name); - return -1; - } - - // Publish on the module that was just imported. - if (PyDict_SetItem(module_dict, attr_name, - lazy_module_attr) < 0) { - Py_DECREF(lazy_module_attr); - Py_DECREF(attr_name); - return -1; - } - Py_DECREF(lazy_module_attr); - Py_DECREF(attr_name); - } - return 0; -} - /*[clinic input] _imp._set_lazy_attributes modobj: object @@ -5633,43 +5622,11 @@ _imp__set_lazy_attributes_impl(PyObject *module, PyObject *modobj, PyObject *name) /*[clinic end generated code: output=3369bb3242b1f043 input=38ea6f30956dd7d6]*/ { - PyThreadState *tstate = _PyThreadState_GET(); - PyObject *module_dict = NULL; - PyObject *ret = NULL; - PyObject *lazy_modules = LAZY_MODULES(tstate->interp); - assert(lazy_modules != NULL); - - PyObject *lazy_submodules; - if (PyDict_GetItemRef(lazy_modules, name, &lazy_submodules) < 0) { + PyInterpreterState *interp = _PyInterpreterState_GET(); + if (PySet_Discard(LAZY_MODULES(interp), name) < 0) { return NULL; } - else if (lazy_submodules == NULL) { - Py_RETURN_NONE; - } - - module_dict = get_mod_dict(modobj); - if (module_dict == NULL || !PyDict_CheckExact(module_dict)) { - Py_DECREF(lazy_submodules); - goto done; - } - - assert(PyAnySet_CheckExact(lazy_submodules)); - Py_BEGIN_CRITICAL_SECTION(lazy_submodules); - publish_lazy_imports_on_module(tstate, lazy_submodules, name, module_dict); - Py_END_CRITICAL_SECTION(); - Py_DECREF(lazy_submodules); - - // once a module is imported it is removed from sys.lazy_modules - if (PyDict_DelItem(lazy_modules, name) < 0) { - goto error; - } - -done: - ret = Py_NewRef(Py_None); - -error: - Py_XDECREF(module_dict); - return ret; + Py_RETURN_NONE; } PyDoc_STRVAR(doc_imp, diff --git a/Python/initconfig.c b/Python/initconfig.c index a996fb117aa..eb0a5ef7aa0 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -455,7 +455,7 @@ static const char usage_xoptions[] = " log imports of already-loaded modules; also #e{PYTHONPROFILEIMPORTTIME}\n" "#s{-X} #L{int_max_str_digits}#b{=N}: limit the size of int<->str conversions;\n" " 0 disables the limit; also #e{PYTHONINTMAXSTRDIGITS}\n" -"#s{-X} #L{lazy_imports}#b{=[all|none|normal]}: control global lazy imports;\n" +"#s{-X} #L{lazy_imports}#b{=[all|normal]}: control global lazy imports;\n" " default is #B{normal}; also #e{PYTHON_LAZY_IMPORTS}\n" "#s{-X} #L{no_debug_ranges}: don't include extra location information in code objects;\n" " also #e{PYTHONNODEBUGRANGES}\n" @@ -1065,7 +1065,8 @@ config_check_consistency(const PyConfig *config) assert(config->int_max_str_digits >= 0); // cpu_count can be -1 if the user doesn't override it. assert(config->cpu_count != 0); - // lazy_imports can be -1 (default), 0 (off), or 1 (on). + // lazy_imports can be -1 (default) or 1 (on). 0 is rejected later + // for embedders with an error message. assert(config->lazy_imports >= -1 && config->lazy_imports <= 1); // config->use_frozen_modules is initialized later // by _PyConfig_InitImportConfig(). @@ -2437,15 +2438,12 @@ config_init_lazy_imports(PyConfig *config) if (strcmp(env, "all") == 0) { lazy_imports = 1; } - else if (strcmp(env, "none") == 0) { - lazy_imports = 0; - } else if (strcmp(env, "normal") == 0) { lazy_imports = -1; } else { return _PyStatus_ERR("PYTHON_LAZY_IMPORTS: invalid value; " - "expected 'all', 'none', or 'normal'"); + "expected 'all' or 'normal'"); } config->lazy_imports = lazy_imports; } @@ -2455,15 +2453,12 @@ config_init_lazy_imports(PyConfig *config) if (wcscmp(x_value, L"all") == 0) { lazy_imports = 1; } - else if (wcscmp(x_value, L"none") == 0) { - lazy_imports = 0; - } else if (wcscmp(x_value, L"normal") == 0) { lazy_imports = -1; } else { return _PyStatus_ERR("-X lazy_imports: invalid value; " - "expected 'all', 'none', or 'normal'"); + "expected 'all' or 'normal'"); } config->lazy_imports = lazy_imports; } @@ -3688,6 +3683,44 @@ PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, } +#ifdef __CYGWIN__ +// Cygwin strips ".exe" suffix from argv[0]. +// Add again the ".exe" suffix. +static PyStatus +config_argv0_add_exe(PyConfig *config) +{ + if (config->argv.length < 1) { + return _PyStatus_OK(); + } + const wchar_t *argv0 = config->argv.items[0]; + size_t len = wcslen(argv0); + if (len >= 5 && wcscmp(argv0 + len - 4, L".exe") == 0) { + return _PyStatus_OK(); + } + + wchar_t *exe = PyMem_RawMalloc((len + 4 + 1) * sizeof(wchar_t)); + if (exe == NULL) { + return _PyStatus_NO_MEMORY(); + } + wcscpy(exe, argv0); + wcscat(exe, L".exe"); + + FILE *fp = _Py_wfopen(exe, L"rb"); + if (fp != NULL) { + fclose(fp); + + PyMem_RawFree(config->argv.items[0]); + config->argv.items[0] = exe; + } + else { + PyMem_RawFree(exe); + } + + return _PyStatus_OK(); +} +#endif + + /* Read the configuration into PyConfig from: * Command line arguments @@ -3707,6 +3740,13 @@ _PyConfig_Read(PyConfig *config, int compute_path_config) config_get_global_vars(config); +#ifdef __CYGWIN__ + status = config_argv0_add_exe(config); + if (_PyStatus_EXCEPTION(status)) { + return status; + } +#endif + if (config->orig_argv.length == 0 && !(config->argv.length == 1 && wcscmp(config->argv.items[0], L"") == 0)) diff --git a/Python/instrumentation.c b/Python/instrumentation.c index 51bcbfdb3b6..0af2070b5cd 100644 --- a/Python/instrumentation.c +++ b/Python/instrumentation.c @@ -2630,8 +2630,9 @@ capi_call_instrumentation(PyMonitoringState *state, PyObject *codelike, int32_t PyErr_SetString(PyExc_ValueError, "offset must be non-negative"); return -1; } + PyObject *offset_obj = NULL; if (event != PY_MONITORING_EVENT_LINE) { - PyObject *offset_obj = PyLong_FromLong(offset); + offset_obj = PyLong_FromLong(offset); if (offset_obj == NULL) { return -1; } @@ -2672,6 +2673,7 @@ capi_call_instrumentation(PyMonitoringState *state, PyObject *codelike, int32_t } } } + Py_XDECREF(offset_obj); return err; } diff --git a/Python/intrinsics.c b/Python/intrinsics.c index 9cfc285c6a5..f081f33cc83 100644 --- a/Python/intrinsics.c +++ b/Python/intrinsics.c @@ -7,6 +7,9 @@ #include "pycore_genobject.h" // _PyAsyncGenValueWrapperNew #include "pycore_interpframe.h" // _PyFrame_GetLocals() #include "pycore_intrinsics.h" // INTRINSIC_PRINT +#include "pycore_list.h" // _PyList_AsTupleAndClear() +#include "pycore_object.h" // _PyObject_IsUniquelyReferenced() +#include "pycore_setobject.h" // _PySet_Freeze() #include "pycore_pyerrors.h" // _PyErr_SetString() #include "pycore_runtime.h" // _Py_ID() #include "pycore_typevarobject.h" // _Py_make_typevar() @@ -190,8 +193,12 @@ unary_pos(PyThreadState* unused, PyObject *value) static PyObject * list_to_tuple(PyThreadState* unused, PyObject *v) { - assert(PyList_Check(v)); - return PyTuple_FromArray(((PyListObject *)v)->ob_item, Py_SIZE(v)); + /* INTRINSIC_LIST_TO_TUPLE is only emitted by the compiler for a + freshly-built, uniquely-referenced temporary list, so steal its items + into the tuple instead of copying them. */ + assert(PyList_CheckExact(v)); + assert(_PyObject_IsUniquelyReferenced(v)); + return _PyList_AsTupleAndClear((PyListObject *)v); } static PyObject * @@ -201,6 +208,14 @@ make_typevar(PyThreadState* Py_UNUSED(ignored), PyObject *v) return _Py_make_typevar(v, NULL, NULL); } +static PyObject * +make_frozenset(PyThreadState* Py_UNUSED(ignored), PyObject *set) +{ + assert(PySet_CheckExact(set)); + assert(_PyObject_IsUniquelyReferenced(set)); + return _PySet_Freeze(set); +} + #define INTRINSIC_FUNC_ENTRY(N, F) \ [N] = {F, #N}, @@ -219,6 +234,7 @@ _PyIntrinsics_UnaryFunctions[] = { INTRINSIC_FUNC_ENTRY(INTRINSIC_TYPEVARTUPLE, _Py_make_typevartuple) INTRINSIC_FUNC_ENTRY(INTRINSIC_SUBSCRIPT_GENERIC, _Py_subscript_generic) INTRINSIC_FUNC_ENTRY(INTRINSIC_TYPEALIAS, _Py_make_typealias) + INTRINSIC_FUNC_ENTRY(INTRINSIC_BUILD_FROZENSET, make_frozenset) }; diff --git a/Python/jit.c b/Python/jit.c index 67dd88f5100..50e606a7a09 100644 --- a/Python/jit.c +++ b/Python/jit.c @@ -33,7 +33,7 @@ #include "pycore_jit.h" -// Memory management stuff: //////////////////////////////////////////////////// +// Memory management stuff: /////////////////////////////////////////////////// #ifndef MS_WINDOWS #include <sys/mman.h> @@ -743,4 +743,14 @@ _PyJIT_Free(_PyExecutorObject *executor) } } +// Avoid excessive bloat due to asserts in stencils +int +_Py_jit_assertion_failure(int line) +{ + printf("Assertion failure at line %d of executor_cases.c.h", line); + fflush(stdout); + abort(); + return 0; +} + #endif // _Py_JIT diff --git a/Python/marshal.c b/Python/marshal.c index 990afefe0d3..9688d426419 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -2061,7 +2061,6 @@ marshal_load_impl(PyObject *module, PyObject *file, int allow_code) /*[clinic input] @permit_long_summary -@permit_long_docstring_body marshal.dumps value: object @@ -2075,14 +2074,14 @@ marshal.dumps Return the bytes object that would be written to a file by dump(value, file). -Raise a ValueError exception if value has (or contains an object that has) an -unsupported type. +Raise a ValueError exception if value has (or contains an object that +has) an unsupported type. [clinic start generated code]*/ static PyObject * marshal_dumps_impl(PyObject *module, PyObject *value, int version, int allow_code) -/*[clinic end generated code: output=115f90da518d1d49 input=80cd3f30c1637ade]*/ +/*[clinic end generated code: output=115f90da518d1d49 input=dc1edcafd43124c5]*/ { return _PyMarshal_WriteObjectToString(value, version, allow_code); } @@ -2098,13 +2097,13 @@ marshal.loads Convert the bytes-like object to a value. -If no valid value is found, raise EOFError, ValueError or TypeError. Extra -bytes in the input are ignored. +If no valid value is found, raise EOFError, ValueError or TypeError. +Extra bytes in the input are ignored. [clinic start generated code]*/ static PyObject * marshal_loads_impl(PyObject *module, Py_buffer *bytes, int allow_code) -/*[clinic end generated code: output=62c0c538d3edc31f input=14de68965b45aaa7]*/ +/*[clinic end generated code: output=62c0c538d3edc31f input=286f1dbd6811d2ad]*/ { RFILE rf; char *s = bytes->buf; diff --git a/Python/optimizer.c b/Python/optimizer.c index db258fff22c..e95e4b5e24b 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -663,44 +663,6 @@ is_terminator(const _PyUOpInstruction *uop) ); } -static PyObject * -record_trace_transform_to_type(PyObject *value) -{ - PyObject *tp = Py_NewRef((PyObject *)Py_TYPE(value)); - Py_DECREF(value); - return tp; -} - -/* _RECORD_NOS_GEN_FUNC and _RECORD_3OS_GEN_FUNC record the raw receiver. - * If it is a generator, return its function object; otherwise return NULL. - */ -static PyObject * -record_trace_transform_gen_func(PyObject *value) -{ - PyObject *func = NULL; - if (PyGen_Check(value)) { - _PyStackRef f = ((PyGenObject *)value)->gi_iframe.f_funcobj; - if (!PyStackRef_IsNull(f)) { - func = Py_NewRef(PyStackRef_AsPyObjectBorrow(f)); - } - } - Py_DECREF(value); - return func; -} - -/* _RECORD_BOUND_METHOD records the raw callable. - * Keep it only for bound methods; otherwise return NULL. - */ -static PyObject * -record_trace_transform_bound_method(PyObject *value) -{ - if (Py_TYPE(value) == &PyMethod_Type) { - return value; - } - Py_DECREF(value); - return NULL; -} - /* Returns 1 on success (added to trace), 0 on trace end. */ // gh-142543: inlining this function causes stack overflows diff --git a/Python/optimizer_bytecodes.c b/Python/optimizer_bytecodes.c index 96dbaea5a57..edb4c644bcc 100644 --- a/Python/optimizer_bytecodes.c +++ b/Python/optimizer_bytecodes.c @@ -2,6 +2,7 @@ #include "pycore_long.h" #include "pycore_opcode_utils.h" #include "pycore_optimizer.h" +#include "pycore_stackref.h" #include "pycore_typeobject.h" #include "pycore_uops.h" #include "pycore_uop_ids.h" @@ -870,15 +871,11 @@ dummy_func(void) { op(_LOAD_COMMON_CONSTANT, (-- value)) { assert(oparg < NUM_COMMON_CONSTANTS); - PyObject *val = _PyInterpreterState_GET()->common_consts[oparg]; - if (_Py_IsImmortal(val)) { - ADD_OP(_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)val); - value = PyJitRef_Borrow(sym_new_const(ctx, val)); - } - else { - ADD_OP(_LOAD_CONST_INLINE, 0, (uintptr_t)val); - value = sym_new_const(ctx, val); - } + PyObject *val = PyStackRef_AsPyObjectBorrow( + _PyInterpreterState_GET()->common_consts[oparg]); + assert(_Py_IsImmortal(val)); + ADD_OP(_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)val); + value = PyJitRef_Borrow(sym_new_const(ctx, val)); } op(_LOAD_SMALL_INT, (-- value)) { @@ -2378,7 +2375,7 @@ dummy_func(void) { res = sym_new_type(ctx, &PyLong_Type); Py_ssize_t length = sym_tuple_length(arg); - // Not a tuple, check if it's a const string + // Not a tuple, check if it's another immutable const with known length if (length < 0 && sym_is_const(ctx, arg)) { PyObject *const_val = sym_get_const(ctx, arg); if (const_val != NULL) { @@ -2388,6 +2385,12 @@ dummy_func(void) { else if (PyBytes_CheckExact(const_val)) { length = PyBytes_GET_SIZE(const_val); } + else if (PyFrozenDict_CheckExact(const_val)) { + length = PyDict_GET_SIZE(const_val); + } + else if (PyFrozenSet_CheckExact(const_val)) { + length = PySet_GET_SIZE(const_val); + } } } diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index f336549d2ed..8895e02d47b 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -1991,15 +1991,11 @@ case _LOAD_COMMON_CONSTANT: { JitOptRef value; assert(oparg < NUM_COMMON_CONSTANTS); - PyObject *val = _PyInterpreterState_GET()->common_consts[oparg]; - if (_Py_IsImmortal(val)) { - ADD_OP(_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)val); - value = PyJitRef_Borrow(sym_new_const(ctx, val)); - } - else { - ADD_OP(_LOAD_CONST_INLINE, 0, (uintptr_t)val); - value = sym_new_const(ctx, val); - } + PyObject *val = PyStackRef_AsPyObjectBorrow( + _PyInterpreterState_GET()->common_consts[oparg]); + assert(_Py_IsImmortal(val)); + ADD_OP(_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)val); + value = PyJitRef_Borrow(sym_new_const(ctx, val)); CHECK_STACK_BOUNDS(1); stack_pointer[0] = value; stack_pointer += 1; @@ -4636,12 +4632,13 @@ length = PyUnicode_GET_LENGTH(const_val); } else if (PyBytes_CheckExact(const_val)) { - CHECK_STACK_BOUNDS(-2); - stack_pointer[-3] = res; - stack_pointer += -2; - ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__); length = PyBytes_GET_SIZE(const_val); - stack_pointer += 2; + } + else if (PyFrozenDict_CheckExact(const_val)) { + length = PyDict_GET_SIZE(const_val); + } + else if (PyFrozenSet_CheckExact(const_val)) { + length = PySet_GET_SIZE(const_val); } } } diff --git a/Python/perf_jit_trampoline.c b/Python/perf_jit_trampoline.c index 0c460282fec..32b14719954 100644 --- a/Python/perf_jit_trampoline.c +++ b/Python/perf_jit_trampoline.c @@ -82,6 +82,9 @@ #if defined(__linux__) # include <sys/syscall.h> // System call interface #endif +#if defined(__APPLE__) +# include <mach/mach_time.h> // mach_absolute_time, mach_timebase_info +#endif // ============================================================================= // CONSTANTS AND CONFIGURATION @@ -217,11 +220,7 @@ struct BaseEvent { typedef struct { struct BaseEvent base; // Common event header uint32_t process_id; // Process ID where code was generated -#if defined(__APPLE__) - uint64_t thread_id; // Thread ID where code was generated -#else uint32_t thread_id; // Thread ID where code was generated -#endif uint64_t vma; // Virtual memory address where code is loaded uint64_t code_address; // Address of the actual machine code uint64_t code_size; // Size of the machine code in bytes @@ -295,7 +294,9 @@ static PerfMapJitState perf_jit_map_state; // ============================================================================= /* Time conversion constant */ +#if !defined(__APPLE__) static const intptr_t nanoseconds_per_second = 1000000000; +#endif /* * Get current monotonic time in nanoseconds @@ -307,6 +308,18 @@ static const intptr_t nanoseconds_per_second = 1000000000; * Returns: Current monotonic time in nanoseconds since an arbitrary epoch */ static int64_t get_current_monotonic_ticks(void) { +#if defined(__APPLE__) + // On macOS the jitdump file is consumed by profilers (such as samply) that + // timestamp their samples using mach_absolute_time(). The jitdump event + // timestamps must use the same clock domain, otherwise the JIT code + // mappings cannot be lined up with the samples. + static mach_timebase_info_data_t timebase = {0, 0}; + if (timebase.denom == 0) { + (void)mach_timebase_info(&timebase); + } + uint64_t ticks = mach_absolute_time(); + return (int64_t)(ticks * timebase.numer / timebase.denom); +#else struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { Py_UNREACHABLE(); // Should never fail on supported systems @@ -318,6 +331,7 @@ static int64_t get_current_monotonic_ticks(void) { result *= nanoseconds_per_second; result += ts.tv_nsec; return result; +#endif } /* @@ -652,7 +666,12 @@ static void perf_map_jit_write_entry_with_name( ev.base.time_stamp = get_current_monotonic_ticks(); ev.process_id = getpid(); #if defined(__APPLE__) - pthread_threadid_np(NULL, &ev.thread_id); + // The jitdump format defines the thread id field as a 32-bit value, but + // pthread_threadid_np() returns a 64-bit id. Truncate it to 32 bits to + // keep the record layout identical to other platforms. + uint64_t thread_id = 0; + pthread_threadid_np(NULL, &thread_id); + ev.thread_id = (uint32_t)thread_id; #else ev.thread_id = syscall(SYS_gettid); // Get thread ID via system call #endif diff --git a/Python/perf_trampoline.c b/Python/perf_trampoline.c index 58c61e64bfc..d90b789c2b5 100644 --- a/Python/perf_trampoline.c +++ b/Python/perf_trampoline.c @@ -210,9 +210,8 @@ enum perf_trampoline_type { static void free_code_arenas(void); static void -perf_trampoline_reset_state(void) +perf_trampoline_clear_code_watcher(void) { - free_code_arenas(); if (code_watcher_id >= 0) { PyCode_ClearWatcher(code_watcher_id); code_watcher_id = -1; @@ -220,6 +219,13 @@ perf_trampoline_reset_state(void) extra_code_index = -1; } +static void +perf_trampoline_reset_state(void) +{ + free_code_arenas(); + perf_trampoline_clear_code_watcher(); +} + static int perf_trampoline_code_watcher(PyCodeEvent event, PyCodeObject *co) { @@ -621,9 +627,10 @@ _PyPerfTrampoline_AfterFork_Child(void) // After fork, Fini may leave the old code watcher registered // if trampolined code objects from the parent still exist // (trampoline_refcount > 0). Clear it unconditionally before - // Init registers a new one, to prevent two watchers sharing - // the same globals and double-decrementing trampoline_refcount. - perf_trampoline_reset_state(); + // Init registers a new one, but keep the old arenas mapped: the + // child may still need to return through trampoline frames that + // were on the C stack at fork(). + perf_trampoline_clear_code_watcher(); _PyPerfTrampoline_Init(1); } } diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 46579a45f4c..97511d2daf2 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -28,6 +28,7 @@ #include "pycore_runtime.h" // _Py_ID() #include "pycore_runtime_init.h" // _PyRuntimeState_INIT #include "pycore_setobject.h" // _PySet_NextEntry() +#include "pycore_stackref.h" // PyStackRef_FromPyObjectBorrow() #include "pycore_stats.h" // _PyStats_InterpInit() #include "pycore_sysmodule.h" // _PySys_ClearAttrString() #include "pycore_traceback.h" // PyUnstable_TracebackThreads() @@ -878,22 +879,28 @@ pycore_init_builtins(PyThreadState *tstate) goto error; } - interp->common_consts[CONSTANT_ASSERTIONERROR] = PyExc_AssertionError; - interp->common_consts[CONSTANT_NOTIMPLEMENTEDERROR] = PyExc_NotImplementedError; - interp->common_consts[CONSTANT_BUILTIN_TUPLE] = (PyObject *)&PyTuple_Type; - interp->common_consts[CONSTANT_BUILTIN_ALL] = all; - interp->common_consts[CONSTANT_BUILTIN_ANY] = any; - interp->common_consts[CONSTANT_BUILTIN_LIST] = (PyObject *)&PyList_Type; - interp->common_consts[CONSTANT_BUILTIN_SET] = (PyObject *)&PySet_Type; - interp->common_consts[CONSTANT_NONE] = Py_None; - interp->common_consts[CONSTANT_EMPTY_STR] = + PyObject *common_objs[NUM_COMMON_CONSTANTS] = {NULL}; + common_objs[CONSTANT_ASSERTIONERROR] = PyExc_AssertionError; + common_objs[CONSTANT_NOTIMPLEMENTEDERROR] = PyExc_NotImplementedError; + common_objs[CONSTANT_BUILTIN_TUPLE] = (PyObject *)&PyTuple_Type; + common_objs[CONSTANT_BUILTIN_ALL] = all; + common_objs[CONSTANT_BUILTIN_ANY] = any; + common_objs[CONSTANT_BUILTIN_LIST] = (PyObject *)&PyList_Type; + common_objs[CONSTANT_BUILTIN_SET] = (PyObject *)&PySet_Type; + common_objs[CONSTANT_NONE] = Py_None; + common_objs[CONSTANT_EMPTY_STR] = Py_GetConstantBorrowed(Py_CONSTANT_EMPTY_STR); - interp->common_consts[CONSTANT_TRUE] = Py_True; - interp->common_consts[CONSTANT_FALSE] = Py_False; - interp->common_consts[CONSTANT_MINUS_ONE] = + common_objs[CONSTANT_TRUE] = Py_True; + common_objs[CONSTANT_FALSE] = Py_False; + common_objs[CONSTANT_MINUS_ONE] = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS - 1]; + common_objs[CONSTANT_BUILTIN_FROZENSET] = (PyObject *)&PyFrozenSet_Type; + common_objs[CONSTANT_EMPTY_TUPLE] = + Py_GetConstantBorrowed(Py_CONSTANT_EMPTY_TUPLE); for (int i = 0; i < NUM_COMMON_CONSTANTS; i++) { - assert(interp->common_consts[i] != NULL); + assert(common_objs[i] != NULL); + _Py_SetImmortal(common_objs[i]); + interp->common_consts[i] = PyStackRef_FromPyObjectBorrow(common_objs[i]); } PyObject *list_append = _PyType_Lookup(&PyList_Type, &_Py_ID(append)); @@ -1486,15 +1493,11 @@ init_interp_main(PyThreadState *tstate) // Initialize lazy imports based on configuration. Do this after site // module is imported to avoid circular imports during startup. - if (config->lazy_imports != -1) { - PyImport_LazyImportsMode lazy_mode; - if (config->lazy_imports == 1) { - lazy_mode = PyImport_LAZY_ALL; - } - else { - lazy_mode = PyImport_LAZY_NONE; - } - if (PyImport_SetLazyImportsMode(lazy_mode) < 0) { + if (config->lazy_imports == 0) { + return _PyStatus_ERR("PyConfig.lazy_imports=0 is not supported"); + } + if (config->lazy_imports == 1) { + if (PyImport_SetLazyImportsMode(PyImport_LAZY_ALL) < 0) { return _PyStatus_ERR("failed to set lazy imports mode"); } } @@ -3324,7 +3327,9 @@ apple_log_write_impl(PyObject *self, PyObject *args) // Pass the user-provided text through explicit %s formatting // to avoid % literals being interpreted as a formatting directive. - os_log_with_type(OS_LOG_DEFAULT, logtype, "%s", text); + // Using {public} ensures "dynamic" string messages are visible + // in the log without special configuration. + os_log_with_type(OS_LOG_DEFAULT, logtype, "%{public}s", text); Py_RETURN_NONE; } diff --git a/Python/pystate.c b/Python/pystate.c index 41c57a1c703..e3bee4ea68c 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -12,8 +12,9 @@ #include "pycore_freelist.h" // _PyObject_ClearFreeLists() #include "pycore_initconfig.h" // _PyStatus_OK() #include "pycore_interpframe.h" // _PyThreadState_HasStackSpace() -#include "pycore_object.h" // _PyType_InitCache() +#include "pycore_object.h" // _PyType_InitCache(), _Py_ClearImmortal() #include "pycore_obmalloc.h" // _PyMem_obmalloc_state_on_heap() +#include "pycore_opcode_utils.h" // NUM_COMMON_CONSTANTS #include "pycore_optimizer.h" // JIT_CLEANUP_THRESHOLD #include "pycore_parking_lot.h" // _PyParkingLot_AfterFork() #include "pycore_pyerrors.h" // _PyErr_Clear() @@ -21,7 +22,7 @@ #include "pycore_pymem.h" // _PyMem_DebugEnabled() #include "pycore_runtime.h" // _PyRuntime #include "pycore_runtime_init.h" // _PyRuntimeState_INIT -#include "pycore_stackref.h" // Py_STACKREF_DEBUG +#include "pycore_stackref.h" // PyStackRef_AsPyObjectBorrow() #include "pycore_stats.h" // FT_STAT_WORLD_STOP_INC() #include "pycore_time.h" // _PyTime_Init() #include "pycore_uniqueid.h" // _PyObject_FinalizePerThreadRefcounts() @@ -641,7 +642,7 @@ init_interpreter(PyInterpreterState *interp, // Trace fitness configuration init_policy(&interp->opt_config.fitness_initial, "PYTHON_JIT_FITNESS_INITIAL", - FITNESS_INITIAL, EXIT_QUALITY_CLOSE_LOOP, UOP_MAX_TRACE_LENGTH - 1); + FITNESS_INITIAL, EXIT_QUALITY_CLOSE_LOOP, FITNESS_INITIAL); interp->opt_config.specialization_enabled = !is_env_enabled("PYTHON_SPECIALIZATION_OFF"); interp->opt_config.uops_optimize_enabled = !is_env_disabled("PYTHON_UOPS_OPTIMIZE"); @@ -785,6 +786,36 @@ extern void _Py_stackref_report_leaks(PyInterpreterState *interp); #endif +static int +common_const_is_initialized(_PyStackRef ref) +{ +#if !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG) + return !PyStackRef_IsNull(ref); +#else + return ref.bits != 0 && !PyStackRef_IsNull(ref); +#endif +} + + +static void +common_constants_clear(PyInterpreterState *interp) +{ + for (int i = 0; i < NUM_COMMON_CONSTANTS; i++) { + _PyStackRef ref = interp->common_consts[i]; + if (!common_const_is_initialized(ref)) { + continue; + } + PyObject *obj = PyStackRef_AsPyObjectBorrow(ref); + PyStackRef_XCLOSE(ref); + interp->common_consts[i] = PyStackRef_NULL; + // Refcount reclamation skips heap immortals; release manually. + if (_Py_IsImmortal(obj) && !_Py_IsStaticImmortal(obj)) { + _Py_ClearImmortal(obj); + } + } +} + + static void interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate) { @@ -911,6 +942,7 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate) PyDict_Clear(interp->builtins); Py_CLEAR(interp->sysdict); Py_CLEAR(interp->builtins); + common_constants_clear(interp); #if !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG) # ifdef Py_STACKREF_CLOSE_DEBUG diff --git a/Python/record_functions.c.h b/Python/record_functions.c.h index 8cd87f00e80..98abe3d0505 100644 --- a/Python/record_functions.c.h +++ b/Python/record_functions.c.h @@ -259,19 +259,77 @@ const _Py_RecordFuncPtr _PyOpcode_RecordFunctions[9] = { [_RECORD_4OS_INDEX] = _PyOpcode_RecordFunction_4OS, }; +static PyObject * +_PyOpcode_RecordTransform_NOS_TYPE(PyObject *recorded_value) +{ + PyObject *transformed_value = NULL; + _PyStackRef nos; + nos = PyStackRef_FromPyObjectBorrow(recorded_value); + transformed_value = (PyObject *)Py_TYPE(PyStackRef_AsPyObjectBorrow(nos)); + Py_XINCREF(transformed_value); + Py_DECREF(recorded_value); + return transformed_value; +} + +static PyObject * +_PyOpcode_RecordTransform_TOS_TYPE(PyObject *recorded_value) +{ + PyObject *transformed_value = NULL; + _PyStackRef tos; + tos = PyStackRef_FromPyObjectBorrow(recorded_value); + transformed_value = (PyObject *)Py_TYPE(PyStackRef_AsPyObjectBorrow(tos)); + Py_XINCREF(transformed_value); + Py_DECREF(recorded_value); + return transformed_value; +} + +static PyObject * +_PyOpcode_RecordTransform_NOS_GEN_FUNC(PyObject *recorded_value) +{ + PyObject *transformed_value = NULL; + _PyStackRef nos; + nos = PyStackRef_FromPyObjectBorrow(recorded_value); + PyObject *obj = PyStackRef_AsPyObjectBorrow(nos); + if (PyGen_Check(obj)) { + PyGenObject *gen = (PyGenObject *)obj; + _PyStackRef func = gen->gi_iframe.f_funcobj; + if (!PyStackRef_IsNull(func)) { + transformed_value = (PyObject *)PyStackRef_AsPyObjectBorrow(func); + Py_XINCREF(transformed_value); + } + } + Py_DECREF(recorded_value); + return transformed_value; +} + +static PyObject * +_PyOpcode_RecordTransform_BOUND_METHOD(PyObject *recorded_value) +{ + PyObject *transformed_value = NULL; + _PyStackRef callable; + callable = PyStackRef_FromPyObjectBorrow(recorded_value); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); + if (Py_TYPE(callable_o) == &PyMethod_Type) { + transformed_value = (PyObject *)callable_o; + Py_XINCREF(transformed_value); + } + Py_DECREF(recorded_value); + return transformed_value; +} + PyObject * _PyOpcode_RecordTransformValue(int uop, PyObject *value) { - switch (uop) { - case _RECORD_TOS_TYPE: - case _RECORD_NOS_TYPE: - return record_trace_transform_to_type(value); - case _RECORD_NOS_GEN_FUNC: - case _RECORD_3OS_GEN_FUNC: - return record_trace_transform_gen_func(value); - case _RECORD_BOUND_METHOD: - return record_trace_transform_bound_method(value); - default: - return value; - } + switch (uop) { + case _RECORD_NOS_TYPE: + return _PyOpcode_RecordTransform_NOS_TYPE(value); + case _RECORD_TOS_TYPE: + return _PyOpcode_RecordTransform_TOS_TYPE(value); + case _RECORD_NOS_GEN_FUNC: + return _PyOpcode_RecordTransform_NOS_GEN_FUNC(value); + case _RECORD_BOUND_METHOD: + return _PyOpcode_RecordTransform_BOUND_METHOD(value); + default: + return value; + } } diff --git a/Python/remote_debug.h b/Python/remote_debug.h index 6c089a834dc..6fecc23502b 100644 --- a/Python/remote_debug.h +++ b/Python/remote_debug.h @@ -100,9 +100,16 @@ extern "C" { # define HAVE_PROCESS_VM_READV 0 #endif +static inline int +_Py_RemoteDebug_HasPermissionError(void) +{ + return PyErr_Occurred() + && PyErr_ExceptionMatches(PyExc_PermissionError); +} + #define _set_debug_exception_cause(exception, format, ...) \ do { \ - if (!PyErr_ExceptionMatches(PyExc_PermissionError)) { \ + if (!_Py_RemoteDebug_HasPermissionError()) { \ PyThreadState *tstate = _PyThreadState_GET(); \ if (!_PyErr_Occurred(tstate)) { \ _PyErr_Format(tstate, exception, format, ##__VA_ARGS__); \ @@ -112,6 +119,20 @@ extern "C" { } \ } while (0) +#define _set_debug_oserror_from_errno(err, format, ...) \ + do { \ + errno = (err); \ + PyErr_SetFromErrno(PyExc_OSError); \ + _set_debug_exception_cause(PyExc_OSError, format, ##__VA_ARGS__); \ + } while (0) + +#define _set_debug_oserror_from_errno_with_filename(err, filename, format, ...) \ + do { \ + errno = (err); \ + PyErr_SetFromErrnoWithFilename(PyExc_OSError, filename); \ + _set_debug_exception_cause(PyExc_OSError, format, ##__VA_ARGS__); \ + } while (0) + static inline size_t get_page_size(void) { size_t page_size = 0; @@ -147,6 +168,7 @@ typedef struct { int memfd; #endif page_cache_entry_t pages[MAX_PAGES]; + int page_cache_count; Py_ssize_t page_size; } proc_handle_t; @@ -169,7 +191,9 @@ _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address } char buf[sizeof(_Py_Debug_Cookie) - 1]; if (_Py_RemoteDebug_ReadRemoteMemory(handle, address, sizeof(buf), buf) != 0) { - PyErr_Clear(); + if (!_Py_RemoteDebug_HasPermissionError()) { + PyErr_Clear(); + } return 0; } return memcmp(buf, _Py_Debug_Cookie, sizeof(buf)) == 0; @@ -185,14 +209,16 @@ _Py_RemoteDebug_FreePageCache(proc_handle_t *handle) handle->pages[i].data = NULL; handle->pages[i].valid = 0; } + handle->page_cache_count = 0; } UNUSED static void _Py_RemoteDebug_ClearCache(proc_handle_t *handle) { - for (int i = 0; i < MAX_PAGES; i++) { + for (int i = 0; i < handle->page_cache_count; i++) { handle->pages[i].valid = 0; } + handle->page_cache_count = 0; } #if defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX @@ -202,6 +228,21 @@ static mach_port_t pid_to_task(pid_t pid); // Initialize the process handle UNUSED static int _Py_RemoteDebug_InitProcHandle(proc_handle_t *handle, pid_t pid) { + handle->pid = 0; +#if defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX + handle->task = 0; +#elif defined(MS_WINDOWS) + handle->hProcess = NULL; +#elif defined(__linux__) + handle->memfd = -1; +#endif + handle->page_size = get_page_size(); + handle->page_cache_count = 0; + for (int i = 0; i < MAX_PAGES; i++) { + handle->pages[i].data = NULL; + handle->pages[i].valid = 0; + } + handle->pid = pid; #if defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX handle->task = pid_to_task(handle->pid); @@ -214,18 +255,12 @@ _Py_RemoteDebug_InitProcHandle(proc_handle_t *handle, pid_t pid) { PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION | PROCESS_QUERY_INFORMATION | PROCESS_SUSPEND_RESUME, FALSE, pid); if (handle->hProcess == NULL) { - PyErr_SetFromWindowsErr(0); + DWORD error = GetLastError(); + PyErr_SetFromWindowsErr(error); _set_debug_exception_cause(PyExc_RuntimeError, "Failed to initialize Windows process handle"); return -1; } -#elif defined(__linux__) - handle->memfd = -1; #endif - handle->page_size = get_page_size(); - for (int i = 0; i < MAX_PAGES; i++) { - handle->pages[i].data = NULL; - handle->pages[i].valid = 0; - } return 0; } @@ -390,17 +425,19 @@ return_section_address_fat( size_t cpu_size = sizeof(cpu), abi64_size = sizeof(is_abi64); if (sysctlbyname("hw.cputype", &cpu, &cpu_size, NULL, 0) != 0) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno(err, "Failed to determine CPU type via sysctlbyname " "for fat binary analysis at 0x%lx: %s", - base, strerror(errno)); + base, strerror(err)); return 0; } if (sysctlbyname("hw.cpu64bit_capable", &is_abi64, &abi64_size, NULL, 0) != 0) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno(err, "Failed to determine CPU ABI capability via sysctlbyname " "for fat binary analysis at 0x%lx: %s", - base, strerror(errno)); + base, strerror(err)); return 0; } @@ -453,26 +490,29 @@ search_section_in_file(const char* secname, char* path, uintptr_t base, mach_vm_ { int fd = open(path, O_RDONLY); if (fd == -1) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, path, "Cannot open binary file '%s' for section '%s' search: %s", - path, secname, strerror(errno)); + path, secname, strerror(err)); return 0; } struct stat fs; if (fstat(fd, &fs) == -1) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, path, "Cannot get file size for binary '%s' during section '%s' search: %s", - path, secname, strerror(errno)); + path, secname, strerror(err)); close(fd); return 0; } void* map = mmap(0, fs.st_size, PROT_READ, MAP_SHARED, fd, 0); if (map == MAP_FAILED) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, path, "Cannot memory map binary file '%s' (size: %lld bytes) for section '%s' search: %s", - path, (long long)fs.st_size, secname, strerror(errno)); + path, (long long)fs.st_size, secname, strerror(err)); close(fd); return 0; } @@ -501,15 +541,21 @@ search_section_in_file(const char* secname, char* path, uintptr_t base, mach_vm_ } if (munmap(map, fs.st_size) != 0) { - PyErr_Format(PyExc_OSError, - "Failed to unmap binary file '%s' (size: %lld bytes): %s", - path, (long long)fs.st_size, strerror(errno)); + if (!PyErr_Occurred()) { + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, path, + "Failed to unmap binary file '%s' (size: %lld bytes): %s", + path, (long long)fs.st_size, strerror(err)); + } result = 0; } if (close(fd) != 0) { - PyErr_Format(PyExc_OSError, - "Failed to close binary file '%s': %s", - path, strerror(errno)); + if (!PyErr_Occurred()) { + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, path, + "Failed to close binary file '%s': %s", + path, strerror(err)); + } result = 0; } return result; @@ -554,14 +600,15 @@ search_map_for_section(proc_handle_t *handle, const char* secname, const char* s char map_filename[MAXPATHLEN + 1]; - while (mach_vm_region( - proc_ref, - &address, - &size, - VM_REGION_BASIC_INFO_64, - (vm_region_info_t)&region_info, - &count, - &object_name) == KERN_SUCCESS) + kern_return_t kr; + while ((kr = mach_vm_region( + proc_ref, + &address, + &size, + VM_REGION_BASIC_INFO_64, + (vm_region_info_t)&region_info, + &count, + &object_name)) == KERN_SUCCESS) { if ((region_info.protection & VM_PROT_READ) == 0 @@ -585,18 +632,32 @@ search_map_for_section(proc_handle_t *handle, const char* secname, const char* s } if (strncmp(filename, substr, strlen(substr)) == 0) { + PyErr_Clear(); uintptr_t result = search_section_in_file( secname, map_filename, address, size, proc_ref); - if (result != 0 - && (validator == NULL || validator(handle, result))) - { - return result; + if (result != 0) { + if (validator == NULL || validator(handle, result)) { + return result; + } + if (_Py_RemoteDebug_HasPermissionError()) { + return 0; + } + } + else if (_Py_RemoteDebug_HasPermissionError()) { + return 0; } } address += size; } + if (kr != KERN_INVALID_ADDRESS && !PyErr_Occurred()) { + PyErr_Format(PyExc_RuntimeError, + "mach_vm_region failed while searching PID %d for section '%s' " + "(kern_return_t: %d)", + handle->pid, secname, kr); + } + return 0; } @@ -619,25 +680,29 @@ search_elf_file_for_section( int fd = open(elf_file, O_RDONLY); if (fd < 0) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, elf_file, "Cannot open ELF file '%s' for section '%s' search: %s", - elf_file, secname, strerror(errno)); + elf_file, secname, strerror(err)); goto exit; } struct stat file_stats; if (fstat(fd, &file_stats) != 0) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, elf_file, "Cannot get file size for ELF file '%s' during section '%s' search: %s", - elf_file, secname, strerror(errno)); + elf_file, secname, strerror(err)); goto exit; } file_memory = mmap(NULL, file_stats.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (file_memory == MAP_FAILED) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, elf_file, "Cannot memory map ELF file '%s' (size: %lld bytes) for section '%s' search: %s", - elf_file, (long long)file_stats.st_size, secname, strerror(errno)); + elf_file, (long long)file_stats.st_size, secname, strerror(err)); + file_memory = NULL; goto exit; } @@ -694,12 +759,23 @@ search_elf_file_for_section( exit: if (file_memory != NULL) { - munmap(file_memory, file_stats.st_size); + if (munmap(file_memory, file_stats.st_size) != 0) { + if (!PyErr_Occurred()) { + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, elf_file, + "Failed to unmap ELF file '%s' (size: %lld bytes): %s", + elf_file, (long long)file_stats.st_size, strerror(err)); + } + result = 0; + } } if (fd >= 0 && close(fd) != 0) { - PyErr_Format(PyExc_OSError, - "Failed to close ELF file '%s': %s", - elf_file, strerror(errno)); + if (!PyErr_Occurred()) { + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, elf_file, + "Failed to close ELF file '%s': %s", + elf_file, strerror(err)); + } result = 0; } return result; @@ -714,9 +790,10 @@ search_linux_map_for_section(proc_handle_t *handle, const char* secname, const c FILE* maps_file = fopen(maps_file_path, "r"); if (maps_file == NULL) { - PyErr_Format(PyExc_OSError, + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, maps_file_path, "Cannot open process memory map file '%s' for PID %d section search: %s", - maps_file_path, handle->pid, strerror(errno)); + maps_file_path, handle->pid, strerror(err)); return 0; } @@ -783,20 +860,37 @@ search_linux_map_for_section(proc_handle_t *handle, const char* secname, const c if (strstr(filename, substr)) { PyErr_Clear(); retval = search_elf_file_for_section(handle, secname, start, path); - if (retval - && (validator == NULL || validator(handle, retval))) - { + if (retval) { + if (validator == NULL || validator(handle, retval)) { + break; + } + if (_Py_RemoteDebug_HasPermissionError()) { + retval = 0; + break; + } + } + else if (_Py_RemoteDebug_HasPermissionError()) { break; } retval = 0; } } + if (retval == 0 && !PyErr_Occurred() && ferror(maps_file)) { + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, maps_file_path, + "Failed to read process map file '%s' for PID %d section search: %s", + maps_file_path, handle->pid, strerror(err)); + } + PyMem_Free(line); if (fclose(maps_file) != 0) { - PyErr_Format(PyExc_OSError, - "Failed to close process map file '%s': %s", - maps_file_path, strerror(errno)); + if (!PyErr_Occurred()) { + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, maps_file_path, + "Failed to close process map file '%s': %s", + maps_file_path, strerror(err)); + } retval = 0; } @@ -819,9 +913,9 @@ static int is_process_alive(HANDLE hProcess) { static void* analyze_pe(const wchar_t* mod_path, BYTE* remote_base, const char* secname) { HANDLE hFile = CreateFileW(mod_path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { - PyErr_SetFromWindowsErr(0); DWORD error = GetLastError(); - PyErr_Format(PyExc_OSError, + PyErr_SetFromWindowsErr(error); + _set_debug_exception_cause(PyExc_OSError, "Cannot open PE file for section '%s' analysis (error %lu)", secname, error); return NULL; @@ -829,9 +923,9 @@ static void* analyze_pe(const wchar_t* mod_path, BYTE* remote_base, const char* HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, 0); if (!hMap) { - PyErr_SetFromWindowsErr(0); DWORD error = GetLastError(); - PyErr_Format(PyExc_OSError, + PyErr_SetFromWindowsErr(error); + _set_debug_exception_cause(PyExc_OSError, "Cannot create file mapping for PE file section '%s' analysis (error %lu)", secname, error); CloseHandle(hFile); @@ -840,9 +934,9 @@ static void* analyze_pe(const wchar_t* mod_path, BYTE* remote_base, const char* BYTE* mapView = (BYTE*)MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0); if (!mapView) { - PyErr_SetFromWindowsErr(0); DWORD error = GetLastError(); - PyErr_Format(PyExc_OSError, + PyErr_SetFromWindowsErr(error); + _set_debug_exception_cause(PyExc_OSError, "Cannot map view of PE file for section '%s' analysis (error %lu)", secname, error); CloseHandle(hMap); @@ -900,9 +994,9 @@ search_windows_map_for_section(proc_handle_t* handle, const char* secname, const } while (hProcSnap == INVALID_HANDLE_VALUE && GetLastError() == ERROR_BAD_LENGTH); if (hProcSnap == INVALID_HANDLE_VALUE) { - PyErr_SetFromWindowsErr(0); DWORD error = GetLastError(); - PyErr_Format(PyExc_PermissionError, + PyErr_SetFromWindowsErr(error); + _set_debug_exception_cause(PyExc_OSError, "Unable to create module snapshot for PID %d section '%s' " "search (error %lu). Check permissions or PID validity", handle->pid, secname, error); @@ -913,17 +1007,46 @@ search_windows_map_for_section(proc_handle_t* handle, const char* secname, const moduleEntry.dwSize = sizeof(moduleEntry); void* runtime_addr = NULL; - for (BOOL hasModule = Module32FirstW(hProcSnap, &moduleEntry); hasModule; hasModule = Module32NextW(hProcSnap, &moduleEntry)) { + if (!Module32FirstW(hProcSnap, &moduleEntry)) { + DWORD error = GetLastError(); + PyErr_SetFromWindowsErr(error); + _set_debug_exception_cause(PyExc_OSError, + "Unable to enumerate modules for PID %d section '%s' " + "search (error %lu)", + handle->pid, secname, error); + CloseHandle(hProcSnap); + return 0; + } + + do { // Look for either python executable or DLL if (wcsstr(moduleEntry.szModule, substr)) { + PyErr_Clear(); void *candidate = analyze_pe(moduleEntry.szExePath, moduleEntry.modBaseAddr, secname); - if (candidate != NULL - && (validator == NULL || validator(handle, (uintptr_t)candidate))) - { - runtime_addr = candidate; + if (candidate != NULL) { + if (validator == NULL || validator(handle, (uintptr_t)candidate)) { + runtime_addr = candidate; + break; + } + if (_Py_RemoteDebug_HasPermissionError()) { + break; + } + } + else if (_Py_RemoteDebug_HasPermissionError()) { break; } } + } while (Module32NextW(hProcSnap, &moduleEntry)); + + if (runtime_addr == NULL && !PyErr_Occurred()) { + DWORD error = GetLastError(); + if (error != ERROR_NO_MORE_FILES) { + PyErr_SetFromWindowsErr(error); + _set_debug_exception_cause(PyExc_OSError, + "Module enumeration failed for PID %d section '%s' " + "search (error %lu)", + handle->pid, secname, error); + } } CloseHandle(hProcSnap); @@ -944,24 +1067,28 @@ _Py_RemoteDebug_GetPyRuntimeAddress(proc_handle_t* handle) address = search_windows_map_for_section(handle, "PyRuntime", L"python", _Py_RemoteDebug_ValidatePyRuntimeCookie); if (address == 0) { - // Error out: 'python' substring covers both executable and DLL - PyObject *exc = PyErr_GetRaisedException(); - PyErr_Format(PyExc_RuntimeError, - "Failed to find the PyRuntime section in process %d on Windows platform", - handle->pid); - _PyErr_ChainExceptions1(exc); + if (!_Py_RemoteDebug_HasPermissionError()) { + // Error out: 'python' substring covers both executable and DLL + PyObject *exc = PyErr_GetRaisedException(); + PyErr_Format(PyExc_RuntimeError, + "Failed to find the PyRuntime section in process %d on Windows platform", + handle->pid); + _PyErr_ChainExceptions1(exc); + } } #elif defined(__linux__) && HAVE_PROCESS_VM_READV // On Linux, search for 'python' in executable or DLL address = search_linux_map_for_section(handle, "PyRuntime", "python", _Py_RemoteDebug_ValidatePyRuntimeCookie); if (address == 0) { - // Error out: 'python' substring covers both executable and DLL - PyObject *exc = PyErr_GetRaisedException(); - PyErr_Format(PyExc_RuntimeError, - "Failed to find the PyRuntime section in process %d on Linux platform", - handle->pid); - _PyErr_ChainExceptions1(exc); + if (!_Py_RemoteDebug_HasPermissionError()) { + // Error out: 'python' substring covers both executable and DLL + PyObject *exc = PyErr_GetRaisedException(); + PyErr_Format(PyExc_RuntimeError, + "Failed to find the PyRuntime section in process %d on Linux platform", + handle->pid); + _PyErr_ChainExceptions1(exc); + } } #elif defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX // On macOS, try libpython first, then fall back to python @@ -970,17 +1097,19 @@ _Py_RemoteDebug_GetPyRuntimeAddress(proc_handle_t* handle) PyErr_Clear(); address = search_map_for_section(handle, "PyRuntime", *candidate, _Py_RemoteDebug_ValidatePyRuntimeCookie); - if (address != 0) { + if (address != 0 || _Py_RemoteDebug_HasPermissionError()) { break; } } if (address == 0) { - PyObject *exc = PyErr_GetRaisedException(); - PyErr_Format(PyExc_RuntimeError, - "Failed to find the PyRuntime section in process %d " - "on macOS platform (tried both libpython and python)", - handle->pid); - _PyErr_ChainExceptions1(exc); + if (!_Py_RemoteDebug_HasPermissionError()) { + PyObject *exc = PyErr_GetRaisedException(); + PyErr_Format(PyExc_RuntimeError, + "Failed to find the PyRuntime section in process %d " + "on macOS platform (tried both libpython and python)", + handle->pid); + _PyErr_ChainExceptions1(exc); + } } #else _set_debug_exception_cause(PyExc_RuntimeError, @@ -1001,9 +1130,9 @@ open_proc_mem_fd(proc_handle_t *handle) handle->memfd = open(mem_file_path, O_RDWR); if (handle->memfd == -1) { - PyErr_SetFromErrno(PyExc_OSError); - _set_debug_exception_cause(PyExc_OSError, - "failed to open file %s: %s", mem_file_path, strerror(errno)); + int err = errno; + _set_debug_oserror_from_errno_with_filename(err, mem_file_path, + "failed to open file %s: %s", mem_file_path, strerror(err)); return -1; } return 0; @@ -1014,6 +1143,9 @@ open_proc_mem_fd(proc_handle_t *handle) static int read_remote_memory_fallback(proc_handle_t *handle, uintptr_t remote_address, size_t len, void* dst) { + if (len == 0) { + return 0; + } if (handle->memfd == -1) { if (open_proc_mem_fd(handle) < 0) { return -1; @@ -1031,14 +1163,23 @@ read_remote_memory_fallback(proc_handle_t *handle, uintptr_t remote_address, siz read_bytes = preadv(handle->memfd, local, 1, offset); if (read_bytes < 0) { + int err = errno; + errno = err; PyErr_SetFromErrno(PyExc_OSError); _set_debug_exception_cause(PyExc_OSError, "preadv failed for PID %d at address 0x%lx " "(size %zu, partial read %zd bytes): %s", - handle->pid, remote_address + result, len - result, result, strerror(errno)); + handle->pid, remote_address + result, len - result, result, strerror(err)); return -1; } + if (read_bytes == 0) { + PyErr_Format(PyExc_OSError, + "preadv returned 0 bytes for PID %d at address 0x%lx " + "(size %zu, partial read %zd bytes)", + handle->pid, remote_address + result, len - result, result); + return -1; + } result += read_bytes; } while ((size_t)read_bytes != local[0].iov_len); return 0; @@ -1050,11 +1191,15 @@ read_remote_memory_fallback(proc_handle_t *handle, uintptr_t remote_address, siz static int _Py_RemoteDebug_ReadRemoteMemory(proc_handle_t *handle, uintptr_t remote_address, size_t len, void* dst) { + if (len == 0) { + return 0; + } #ifdef MS_WINDOWS SIZE_T read_bytes = 0; SIZE_T result = 0; do { if (!ReadProcessMemory(handle->hProcess, (LPCVOID)(remote_address + result), (char*)dst + result, len - result, &read_bytes)) { + DWORD error = GetLastError(); // Check if the process is still alive: we need to be able to tell our caller // that the process is dead and not just that the read failed. if (!is_process_alive(handle->hProcess)) { @@ -1062,14 +1207,20 @@ _Py_RemoteDebug_ReadRemoteMemory(proc_handle_t *handle, uintptr_t remote_address PyErr_SetFromErrno(PyExc_OSError); return -1; } - PyErr_SetFromWindowsErr(0); - DWORD error = GetLastError(); + PyErr_SetFromWindowsErr(error); _set_debug_exception_cause(PyExc_OSError, "ReadProcessMemory failed for PID %d at address 0x%lx " "(size %zu, partial read %zu bytes): Windows error %lu", handle->pid, remote_address + result, len - result, result, error); return -1; } + if (read_bytes == 0) { + PyErr_Format(PyExc_OSError, + "ReadProcessMemory returned 0 bytes for PID %d at address 0x%lx " + "(size %zu, partial read %zu bytes)", + handle->pid, remote_address + result, len - result, result); + return -1; + } result += read_bytes; } while (result < len); return 0; @@ -1090,31 +1241,40 @@ _Py_RemoteDebug_ReadRemoteMemory(proc_handle_t *handle, uintptr_t remote_address read_bytes = process_vm_readv(handle->pid, local, 1, remote, 1, 0); if (read_bytes < 0) { - if (errno == ENOSYS) { + int err = errno; + if (err == ENOSYS) { return read_remote_memory_fallback(handle, remote_address, len, dst); } + errno = err; PyErr_SetFromErrno(PyExc_OSError); - if (errno == ESRCH) { + if (err == ESRCH) { return -1; } _set_debug_exception_cause(PyExc_OSError, "process_vm_readv failed for PID %d at address 0x%lx " "(size %zu, partial read %zd bytes): %s", - handle->pid, remote_address + result, len - result, result, strerror(errno)); + handle->pid, remote_address + result, len - result, result, strerror(err)); return -1; } + if (read_bytes == 0) { + PyErr_Format(PyExc_OSError, + "process_vm_readv returned 0 bytes for PID %d at address 0x%lx " + "(size %zu, partial read %zd bytes)", + handle->pid, remote_address + result, len - result, result); + return -1; + } result += read_bytes; } while ((size_t)read_bytes != local[0].iov_len); return 0; #elif defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX - Py_ssize_t result = -1; + mach_vm_size_t bytes_read = 0; kern_return_t kr = mach_vm_read_overwrite( handle->task, (mach_vm_address_t)remote_address, len, (mach_vm_address_t)dst, - (mach_vm_size_t*)&result); + &bytes_read); if (kr != KERN_SUCCESS) { switch (err_get_code(kr)) { @@ -1158,6 +1318,13 @@ _Py_RemoteDebug_ReadRemoteMemory(proc_handle_t *handle, uintptr_t remote_address } return -1; } + if (bytes_read != (mach_vm_size_t)len) { + PyErr_Format(PyExc_OSError, + "mach_vm_read_overwrite read %llu of %zu bytes for PID %d at " + "address 0x%lx", + (unsigned long long)bytes_read, len, handle->pid, remote_address); + return -1; + } return 0; #else Py_UNREACHABLE(); @@ -1169,6 +1336,9 @@ _Py_RemoteDebug_ReadRemoteMemory(proc_handle_t *handle, uintptr_t remote_address static int _Py_RemoteDebug_WriteRemoteMemoryFallback(proc_handle_t *handle, uintptr_t remote_address, size_t len, const void* src) { + if (len == 0) { + return 0; + } if (handle->memfd == -1) { if (open_proc_mem_fd(handle) < 0) { return -1; @@ -1186,10 +1356,19 @@ _Py_RemoteDebug_WriteRemoteMemoryFallback(proc_handle_t *handle, uintptr_t remot written = pwritev(handle->memfd, local, 1, offset); if (written < 0) { + int err = errno; + errno = err; PyErr_SetFromErrno(PyExc_OSError); return -1; } + if (written == 0) { + PyErr_Format(PyExc_OSError, + "pwritev wrote 0 bytes for PID %d at address 0x%lx " + "(size %zu, partial write %zd bytes)", + handle->pid, remote_address + result, len - result, result); + return -1; + } result += written; } while ((size_t)written != local[0].iov_len); return 0; @@ -1200,19 +1379,29 @@ _Py_RemoteDebug_WriteRemoteMemoryFallback(proc_handle_t *handle, uintptr_t remot UNUSED static int _Py_RemoteDebug_WriteRemoteMemory(proc_handle_t *handle, uintptr_t remote_address, size_t len, const void* src) { + if (len == 0) { + return 0; + } #ifdef MS_WINDOWS SIZE_T written = 0; SIZE_T result = 0; do { if (!WriteProcessMemory(handle->hProcess, (LPVOID)(remote_address + result), (const char*)src + result, len - result, &written)) { - PyErr_SetFromWindowsErr(0); DWORD error = GetLastError(); + PyErr_SetFromWindowsErr(error); _set_debug_exception_cause(PyExc_OSError, "WriteProcessMemory failed for PID %d at address 0x%lx " "(size %zu, partial write %zu bytes): Windows error %lu", handle->pid, remote_address + result, len - result, result, error); return -1; } + if (written == 0) { + PyErr_Format(PyExc_OSError, + "WriteProcessMemory wrote 0 bytes for PID %d at address 0x%lx " + "(size %zu, partial write %zu bytes)", + handle->pid, remote_address + result, len - result, result); + return -1; + } result += written; } while (result < len); return 0; @@ -1233,17 +1422,26 @@ _Py_RemoteDebug_WriteRemoteMemory(proc_handle_t *handle, uintptr_t remote_addres written = process_vm_writev(handle->pid, local, 1, remote, 1, 0); if (written < 0) { - if (errno == ENOSYS) { + int err = errno; + if (err == ENOSYS) { return _Py_RemoteDebug_WriteRemoteMemoryFallback(handle, remote_address, len, src); } + errno = err; PyErr_SetFromErrno(PyExc_OSError); _set_debug_exception_cause(PyExc_OSError, "process_vm_writev failed for PID %d at address 0x%lx " "(size %zu, partial write %zd bytes): %s", - handle->pid, remote_address + result, len - result, result, strerror(errno)); + handle->pid, remote_address + result, len - result, result, strerror(err)); return -1; } + if (written == 0) { + PyErr_Format(PyExc_OSError, + "process_vm_writev wrote 0 bytes for PID %d at address 0x%lx " + "(size %zu, partial write %zd bytes)", + handle->pid, remote_address + result, len - result, result); + return -1; + } result += written; } while ((size_t)written != local[0].iov_len); return 0; @@ -1287,8 +1485,9 @@ _Py_RemoteDebug_PagedReadRemoteMemory(proc_handle_t *handle, return _Py_RemoteDebug_ReadRemoteMemory(handle, addr, size, out); } - // Search for valid cached page - for (int i = 0; i < MAX_PAGES; i++) { + // Search only the pages used since the last clear. The cache is cleared + // between profiler samples, so entries are packed at the front. + for (int i = 0; i < handle->page_cache_count; i++) { page_cache_entry_t *entry = &handle->pages[i]; if (entry->valid && entry->page_addr == page_base) { memcpy(out, entry->data + offset_in_page, size); @@ -1296,33 +1495,31 @@ _Py_RemoteDebug_PagedReadRemoteMemory(proc_handle_t *handle, } } - // Find reusable slot - for (int i = 0; i < MAX_PAGES; i++) { - page_cache_entry_t *entry = &handle->pages[i]; - if (!entry->valid) { + if (handle->page_cache_count < MAX_PAGES) { + page_cache_entry_t *entry = &handle->pages[handle->page_cache_count]; + if (entry->data == NULL) { + entry->data = PyMem_RawMalloc(page_size); if (entry->data == NULL) { - entry->data = PyMem_RawMalloc(page_size); - if (entry->data == NULL) { - PyErr_NoMemory(); - _set_debug_exception_cause(PyExc_MemoryError, - "Cannot allocate %zu bytes for page cache entry " - "during read from PID %d at address 0x%lx", - page_size, handle->pid, addr); - return -1; - } - } - - if (_Py_RemoteDebug_ReadRemoteMemory(handle, page_base, page_size, entry->data) < 0) { - // Try to just copy the exact amount as a fallback - PyErr_Clear(); - goto fallback; + PyErr_NoMemory(); + _set_debug_exception_cause(PyExc_MemoryError, + "Cannot allocate %zu bytes for page cache entry " + "during read from PID %d at address 0x%lx", + page_size, handle->pid, addr); + return -1; } + } - entry->page_addr = page_base; - entry->valid = 1; - memcpy(out, entry->data + offset_in_page, size); - return 0; + if (_Py_RemoteDebug_ReadRemoteMemory(handle, page_base, page_size, entry->data) < 0) { + // Try to just copy the exact amount as a fallback + PyErr_Clear(); + goto fallback; } + + entry->page_addr = page_base; + entry->valid = 1; + handle->page_cache_count++; + memcpy(out, entry->data + offset_in_page, size); + return 0; } fallback: @@ -1330,6 +1527,49 @@ _Py_RemoteDebug_PagedReadRemoteMemory(proc_handle_t *handle, return _Py_RemoteDebug_ReadRemoteMemory(handle, addr, size, out); } +typedef struct { + uintptr_t remote_addr; + void *local_buf; + size_t size; +} _Py_RemoteReadSegment; + +#define _PY_REMOTE_DEBUG_MAX_BATCHED_SEGMENTS 4 + +// Batched read of multiple remote regions in a single syscall when supported. +// Returns total bytes read (>= 0) on success, -1 if batched reads are +// unavailable or the syscall failed. Callers compare the return value against +// cumulative segment sizes to determine which segments were fully populated. +UNUSED static Py_ssize_t +_Py_RemoteDebug_BatchedReadRemoteMemory( + proc_handle_t *handle, + const _Py_RemoteReadSegment *segments, + int nsegs) +{ +#if defined(__linux__) && HAVE_PROCESS_VM_READV + if (handle->memfd == -1 + && nsegs > 0 + && nsegs <= _PY_REMOTE_DEBUG_MAX_BATCHED_SEGMENTS) { + struct iovec local[_PY_REMOTE_DEBUG_MAX_BATCHED_SEGMENTS]; + struct iovec remote[_PY_REMOTE_DEBUG_MAX_BATCHED_SEGMENTS]; + for (int i = 0; i < nsegs; i++) { + local[i].iov_base = segments[i].local_buf; + local[i].iov_len = segments[i].size; + remote[i].iov_base = (void *)segments[i].remote_addr; + remote[i].iov_len = segments[i].size; + } + ssize_t nread = process_vm_readv(handle->pid, local, nsegs, remote, nsegs, 0); + if (nread >= 0) { + return (Py_ssize_t)nread; + } + } +#else + (void)handle; + (void)segments; + (void)nsegs; +#endif + return -1; +} + UNUSED static int _Py_RemoteDebug_ReadDebugOffsets( proc_handle_t *handle, diff --git a/Python/symtable.c b/Python/symtable.c index 2263a2d8db9..070e374101b 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -1708,7 +1708,7 @@ symtable_enter_type_param_block(struct symtable *st, identifier name, return 1; } -/* VISIT, VISIT_SEQ and VIST_SEQ_TAIL take an ASDL type as their second argument. +/* VISIT, VISIT_SEQ and VISIT_SEQ_TAIL take an ASDL type as their second argument. They use the ASDL name to synthesize the name of the C type and the visit function. @@ -2870,6 +2870,7 @@ symtable_visit_annotation(struct symtable *st, expr_ty annotation, void *key) int future_annotations = st->st_future->ff_features & CO_FUTURE_ANNOTATIONS; if (current_type == ClassBlock && !future_annotations) { st->st_cur->ste_can_see_class_scope = 1; + parent_ste->ste_needs_classdict = 1; if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(annotation))) { return 0; } diff --git a/Python/sysmodule.c b/Python/sysmodule.c index b75d9e864a1..f7e28086d84 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1863,6 +1863,7 @@ sys_mdebug_impl(PyObject *module, int flag) /*[clinic input] +@permit_long_summary sys.get_int_max_str_digits Return the maximum string digits limit for non-binary int<->str conversions. @@ -1870,7 +1871,7 @@ Return the maximum string digits limit for non-binary int<->str conversions. static PyObject * sys_get_int_max_str_digits_impl(PyObject *module) -/*[clinic end generated code: output=0042f5e8ae0e8631 input=61bf9f99bc8b112d]*/ +/*[clinic end generated code: output=0042f5e8ae0e8631 input=77fb74e987ba7ecb]*/ { PyInterpreterState *interp = _PyInterpreterState_GET(); return PyLong_FromLong(interp->long_state.max_str_digits); @@ -1878,6 +1879,7 @@ sys_get_int_max_str_digits_impl(PyObject *module) /*[clinic input] +@permit_long_summary sys.set_int_max_str_digits maxdigits: int @@ -1887,7 +1889,7 @@ Set the maximum string digits limit for non-binary int<->str conversions. static PyObject * sys_set_int_max_str_digits_impl(PyObject *module, int maxdigits) -/*[clinic end generated code: output=734d4c2511f2a56d input=d7e3f325db6910c5]*/ +/*[clinic end generated code: output=734d4c2511f2a56d input=d4c0bf50c466d57a]*/ { if (_PySys_SetIntMaxStrDigits(maxdigits) < 0) { return NULL; @@ -2099,6 +2101,7 @@ sys__getframe_impl(PyObject *module, int depth) } /*[clinic input] +@permit_long_summary sys._current_frames Return a dict mapping each thread's thread id to its current stack frame. @@ -2108,7 +2111,7 @@ This function should be used for specialized purposes only. static PyObject * sys__current_frames_impl(PyObject *module) -/*[clinic end generated code: output=d2a41ac0a0a3809a input=2a9049c5f5033691]*/ +/*[clinic end generated code: output=d2a41ac0a0a3809a input=e1ce34f43501e0d6]*/ { return _PyThread_CurrentFrames(); } @@ -2287,17 +2290,17 @@ sys__stats_clear_impl(PyObject *module) } /*[clinic input] -@permit_long_docstring_body sys._stats_dump -> bool Dump stats to file, and clears the stats. -Return False if no statistics were not dumped because stats gathering was off. +Return False if no statistics were not dumped because stats gathering +was off. [clinic start generated code]*/ static int sys__stats_dump_impl(PyObject *module) -/*[clinic end generated code: output=6e346b4ba0de4489 input=5a3ab40d2fb5af47]*/ +/*[clinic end generated code: output=6e346b4ba0de4489 input=7f3b7758cb59d2ff]*/ { int res = _Py_PrintSpecializationStats(1); _Py_StatsClear(); @@ -2441,16 +2444,16 @@ sys.remote_exec Executes a file containing Python code in a given remote Python process. This function returns immediately, and the code will be executed by the -target process's main thread at the next available opportunity, similarly -to how signals are handled. There is no interface to determine when the -code has been executed. The caller is responsible for making sure that -the file still exists whenever the remote process tries to read it and that -it hasn't been overwritten. +target process's main thread at the next available opportunity, +similarly to how signals are handled. There is no interface to +determine when the code has been executed. The caller is responsible +for making sure that the file still exists whenever the remote process +tries to read it and that it hasn't been overwritten. -The remote process must be running a CPython interpreter of the same major -and minor version as the local process. If either the local or remote -interpreter is pre-release (alpha, beta, or release candidate) then the -local and remote interpreters must be the same exact version. +The remote process must be running a CPython interpreter of the same +major and minor version as the local process. If either the local or +remote interpreter is pre-release (alpha, beta, or release candidate) +then the local and remote interpreters must be the same exact version. Args: pid (int): The process ID of the target Python process. @@ -2460,7 +2463,7 @@ local and remote interpreters must be the same exact version. static PyObject * sys_remote_exec_impl(PyObject *module, int pid, PyObject *script) -/*[clinic end generated code: output=7d94c56afe4a52c0 input=39908ca2c5fe1eb0]*/ +/*[clinic end generated code: output=7d94c56afe4a52c0 input=7bd58f8da20cb74c]*/ { PyObject *path; const char *debugger_script_path; @@ -2812,8 +2815,8 @@ Sets the global lazy imports mode. The mode parameter must be one of the following strings: - "all": All top-level imports become potentially lazy -- "none": All lazy imports are suppressed (even explicitly marked ones) -- "normal": Only explicitly marked imports (with 'lazy' keyword) are lazy +- "normal": Only explicitly marked imports (with 'lazy' keyword) are + lazy In addition to the mode, lazy imports can be controlled via the filter provided to sys.set_lazy_imports_filter @@ -2822,12 +2825,12 @@ provided to sys.set_lazy_imports_filter static PyObject * sys_set_lazy_imports_impl(PyObject *module, PyObject *mode) -/*[clinic end generated code: output=1ff34ba6c4feaf73 input=f04e70d8bf9fe4f6]*/ +/*[clinic end generated code: output=1ff34ba6c4feaf73 input=db3242f0ff6e5dcc]*/ { PyImport_LazyImportsMode lazy_mode; if (!PyUnicode_Check(mode)) { PyErr_SetString(PyExc_TypeError, - "mode must be a string: 'normal', 'all', or 'none'"); + "mode must be a string: 'normal' or 'all'"); return NULL; } if (PyUnicode_CompareWithASCIIString(mode, "normal") == 0) { @@ -2836,12 +2839,9 @@ sys_set_lazy_imports_impl(PyObject *module, PyObject *mode) else if (PyUnicode_CompareWithASCIIString(mode, "all") == 0) { lazy_mode = PyImport_LAZY_ALL; } - else if (PyUnicode_CompareWithASCIIString(mode, "none") == 0) { - lazy_mode = PyImport_LAZY_NONE; - } else { PyErr_SetString(PyExc_ValueError, - "mode must be 'normal', 'all', or 'none'"); + "mode must be 'normal' or 'all'"); return NULL; } @@ -2857,22 +2857,19 @@ sys.get_lazy_imports Gets the global lazy imports mode. Returns "all" if all top level imports are potentially lazy. -Returns "none" if all explicitly marked lazy imports are suppressed. Returns "normal" if only explicitly marked imports are lazy. [clinic start generated code]*/ static PyObject * sys_get_lazy_imports_impl(PyObject *module) -/*[clinic end generated code: output=4147dec48c51ae99 input=8cb574f1e4e3003c]*/ +/*[clinic end generated code: output=4147dec48c51ae99 input=6f8dd4f2c82893f2]*/ { switch (PyImport_GetLazyImportsMode()) { case PyImport_LAZY_NORMAL: return PyUnicode_FromString("normal"); case PyImport_LAZY_ALL: return PyUnicode_FromString("all"); - case PyImport_LAZY_NONE: - return PyUnicode_FromString("none"); default: PyErr_SetString(PyExc_RuntimeError, "unknown lazy imports mode"); return NULL; diff --git a/Tools/c-analyzer/cpython/ignored.tsv b/Tools/c-analyzer/cpython/ignored.tsv index ddfb93a424c..bf08e556820 100644 --- a/Tools/c-analyzer/cpython/ignored.tsv +++ b/Tools/c-analyzer/cpython/ignored.tsv @@ -327,6 +327,7 @@ Modules/pyexpat.c - error_info_of - Modules/pyexpat.c - handler_info - Modules/termios.c - termios_constants - Modules/timemodule.c init_timezone YEAR - +Modules/unicodedata.c unicodedata_create_capi capi - Objects/bytearrayobject.c - _PyByteArray_empty_string - Objects/complexobject.c - c_1 - Objects/exceptions.c - static_exceptions - diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 47d82c8e276..7436fd058a8 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -322,6 +322,16 @@ class Family: size: str members: list[Instruction] + def get_member_record_names(self) -> tuple[str, ...]: + seen: set[str] = set() + names: list[str] = [] + for member in self.members: + for part in member.parts: + if part.properties.records_value and part.name not in seen: + seen.add(part.name) + names.append(part.name) + return tuple(names) + def dump(self, indent: str) -> None: print(indent, self.name, "= ", ", ".join([m.name for m in self.members])) @@ -599,6 +609,7 @@ def has_error_without_pop(op: parser.CodeDef) -> bool: "PyStackRef_CLEAR", "PyStackRef_CLOSE_SPECIALIZED", "PyStackRef_DUP", + "PyStackRef_DupImmortal", "PyStackRef_False", "PyStackRef_FromPyObjectBorrow", "PyStackRef_FromPyObjectNew", @@ -616,6 +627,9 @@ def has_error_without_pop(op: parser.CodeDef) -> bool: "PyStackRef_RefcountOnObject", "PyStackRef_TYPE", "PyStackRef_True", + "PyBytes_GET_SIZE", + "PyDict_GET_SIZE", + "PySet_GET_SIZE", "PyTuple_GET_ITEM", "PyTuple_GET_SIZE", "PyType_HasFeature", diff --git a/Tools/cases_generator/record_function_generator.py b/Tools/cases_generator/record_function_generator.py index 118ffa6c89c..b5a028384ad 100644 --- a/Tools/cases_generator/record_function_generator.py +++ b/Tools/cases_generator/record_function_generator.py @@ -3,7 +3,9 @@ from analyzer import ( Analysis, + Family, Instruction, + Uop, analyze_files, CodeSection, ) @@ -19,7 +21,6 @@ from cwriter import CWriter from tier1_generator import write_uop, Emitter, declare_variable -from typing import TextIO from lexer import Token from stack import Stack, Storage @@ -28,16 +29,6 @@ # Must match MAX_RECORDED_VALUES in Include/internal/pycore_optimizer.h. MAX_RECORDED_VALUES = 3 -# Map `_RECORD_*` uops to the helper that converts a raw family-recorded -# value to the form the specialized member consumes. -_RECORD_TRANSFORM_HELPERS: dict[str, str] = { - "_RECORD_TOS_TYPE": "record_trace_transform_to_type", - "_RECORD_NOS_TYPE": "record_trace_transform_to_type", - "_RECORD_NOS_GEN_FUNC": "record_trace_transform_gen_func", - "_RECORD_3OS_GEN_FUNC": "record_trace_transform_gen_func", - "_RECORD_BOUND_METHOD": "record_trace_transform_bound_method", -} - # Recorder uops whose slot kind differs from the leading word of their name. _RECORD_SLOT_KIND_OVERRIDES: dict[str, str] = { "_RECORD_BOUND_METHOD": "CALLABLE", @@ -45,9 +36,11 @@ class RecorderEmitter(Emitter): - def __init__(self, out: CWriter): + def __init__(self, out: CWriter, target: str, incref: str): super().__init__(out, {}) self._replacers["RECORD_VALUE"] = self.record_value + self.target = target + self.incref = incref def record_value( self, @@ -57,13 +50,13 @@ def record_value( storage: Storage, inst: Instruction | None, ) -> bool: - lparen = next(tkn_iter) + next(tkn_iter) self.out.start_line() - self.emit("*recorded_value = (PyObject *)") + self.emit(f"{self.target} = (PyObject *)") emit_to(self.out, tkn_iter, "RPAREN") next(tkn_iter) # Semi colon self.emit(";\n") - self.emit("Py_INCREF(*recorded_value);\n") + self.emit(f"{self.incref}({self.target});\n") return True @@ -80,36 +73,39 @@ def get_instruction_record_names(inst: Instruction) -> list[str]: def get_family_record_names( - family_head: Instruction, - family_members: list[Instruction], + family: Family, instruction_records: dict[str, list[str]], record_slot_keys: dict[str, str], ) -> list[str]: - member_records = [instruction_records[m.name] for m in family_members] - head_records = instruction_records[family_head.name] + family_record_names = set(family.get_member_record_names()) + family_record_names.update(instruction_records[family.name]) records: list[str] = [] slot_index: dict[str, int] = {} def add(name: str) -> None: kind = record_slot_keys[name] + # Prefer the raw recorder if any family instruction uses it. + raw = f"_RECORD_{kind}" + source = raw if raw in family_record_names else name existing = slot_index.get(kind) if existing is None: slot_index[kind] = len(records) - records.append(name) - elif records[existing] != name: - raw = f"_RECORD_{kind}" + records.append(source) + elif records[existing] != source: if raw not in record_slot_keys: raise ValueError( - f"Family {family_head.name} has incompatible recorders for " - f"slot {kind}: {records[existing]} and {name}, " + f"Family {family.name} has incompatible recorders for " + f"slot {kind}: {records[existing]} and {source}, " f"and no raw recorder {raw} exists to use as a base." ) records[existing] = raw - for names in member_records: - for name in names: + for member in family.members: + for name in instruction_records[member.name]: add(name) - for name in head_records: + # Family head supplies any slots no member exercises, and may also + # conflict with members (resolved via the raw recorder above). + for name in instruction_records[family.name]: add(name) return records @@ -119,10 +115,11 @@ def get_record_consumer_layout( source_records: list[str], own_records: list[str], record_slot_keys: dict[str, str], -) -> tuple[list[int], int]: +) -> tuple[list[int], int, list[str]]: used = [False] * len(source_records) slot_map: list[int] = [] transform_mask = 0 + transform_names: list[str] = [] for i, own in enumerate(own_records): own_kind = record_slot_keys[own] for j, src in enumerate(source_records): @@ -131,13 +128,43 @@ def get_record_consumer_layout( slot_map.append(j) if src != own: transform_mask |= 1 << i + if own not in transform_names: + transform_names.append(own) break else: raise ValueError( f"Instruction {inst_name} has no compatible family slot for " f"{own} in {source_records}" ) - return slot_map, transform_mask + return slot_map, transform_mask, transform_names + + +def get_record_transform_input(uop: Uop) -> str: + inputs = [var for var in uop.stack.inputs if var.used] + if len(inputs) != 1 or inputs[0].is_array(): + raise ValueError( + f"Recorder transform for {uop.name} needs exactly one scalar input" + ) + return inputs[0].name + + +def generate_record_transform_function(uop: Uop, out: CWriter) -> None: + input_name = get_record_transform_input(uop) + out.emit("static PyObject *\n") + out.emit(f"_PyOpcode_RecordTransform{uop.name[7:]}(PyObject *recorded_value)\n") + out.emit("{\n") + out.emit("PyObject *transformed_value = NULL;\n") + for var in uop.stack.inputs: + if var.used: + declare_variable(var, out) + out.emit(f"{input_name} = PyStackRef_FromPyObjectBorrow(recorded_value);\n") + emitter = RecorderEmitter(out, "transformed_value", "Py_XINCREF") + emitter.emit_tokens(uop, Storage(Stack(), [], [], 0, False), None, False) + out.start_line() + out.emit("Py_DECREF(recorded_value);\n") + out.emit("return transformed_value;\n") + out.emit("}\n\n") + def generate_recorder_functions(filenames: list[str], analysis: Analysis, out: CWriter) -> None: write_header(__file__, filenames, out.out) @@ -149,7 +176,7 @@ def generate_recorder_functions(filenames: list[str], analysis: Analysis, out: C """ ) args = "_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, int oparg, PyObject **recorded_value" - emitter = RecorderEmitter(out) + emitter = RecorderEmitter(out, "*recorded_value", "Py_INCREF") nop = analysis.instructions["NOP"] for uop in analysis.uops.values(): if not uop.properties.records_value: @@ -177,8 +204,7 @@ def generate_recorder_tables(analysis: Analysis, out: CWriter) -> None: record_slot_keys = {name: get_record_slot_kind(name) for name in record_uop_names} family_record_table = { family.name: get_family_record_names( - analysis.instructions[family.name], - family.members, + family, instruction_records, record_slot_keys, ) @@ -188,12 +214,12 @@ def generate_recorder_tables(analysis: Analysis, out: CWriter) -> None: record_table: dict[str, list[str]] = {} record_consumer_table: dict[str, tuple[list[int], int]] = {} record_function_indexes: dict[str, int] = {} + record_transform_names: list[str] = [] for inst in analysis.instructions.values(): own_records = instruction_records[inst.name] # TRACE_RECORD runs before execution, but specialization may rewrite - # the opcode before translation. Record the raw family shape (union - # of head + members) so any opcode in the family can be translated - # from the same recorded layout. + # the opcode before translation. Use the shared family recording shape + # so any opcode in the family can be translated from the same layout. family = inst.family or analysis.families.get(inst.name) records = family_record_table[family.name] if family is not None else own_records if not records: @@ -208,9 +234,13 @@ def generate_recorder_tables(analysis: Analysis, out: CWriter) -> None: if name not in record_function_indexes: record_function_indexes[name] = len(record_function_indexes) + 1 if own_records: - record_consumer_table[inst.name] = get_record_consumer_layout( + slots, mask, transform_names = get_record_consumer_layout( inst.name, records, own_records, record_slot_keys ) + record_consumer_table[inst.name] = (slots, mask) + for name in transform_names: + if name not in record_transform_names: + record_transform_names.append(name) for name, index in record_function_indexes.items(): out.emit(f"#define {name}_INDEX {index}\n") @@ -238,37 +268,32 @@ def generate_recorder_tables(analysis: Analysis, out: CWriter) -> None: for name in record_function_indexes: out.emit(f" [{name}_INDEX] = _PyOpcode_RecordFunction{name[7:]},\n") out.emit("};\n") - generate_record_transform_dispatcher(record_uop_names, out) + out.emit("\n") + for name in record_transform_names: + generate_record_transform_function(analysis.uops[name], out) + generate_record_transform_dispatcher(record_transform_names, out) def generate_record_transform_dispatcher( - record_uop_names: list[str], out: CWriter + transform_names: list[str], out: CWriter ) -> None: """Emit a switch that converts a family-recorded value for a recorder uop. - Only `_RECORD_*` uops that need conversion get a case; the default - returns the input value unchanged. Helpers live in Python/optimizer.c. + Only `_RECORD_*` uops that need conversion get a case; the default returns + the input value unchanged. """ - cases: dict[str, list[str]] = {} - for record_name in record_uop_names: - helper = _RECORD_TRANSFORM_HELPERS.get(record_name) - if helper is None: - continue - cases.setdefault(helper, []).append(record_name) - out.emit("\n") out.emit( "PyObject *\n" "_PyOpcode_RecordTransformValue(int uop, PyObject *value)\n" "{\n" ) - out.emit(" switch (uop) {\n") - for helper, names in cases.items(): - for name in names: - out.emit(f" case {name}:\n") - out.emit(f" return {helper}(value);\n") - out.emit(" default:\n") - out.emit(" return value;\n") - out.emit(" }\n") + out.emit("switch (uop) {\n") + for name in transform_names: + out.emit(f"case {name}:\n") + out.emit(f" return _PyOpcode_RecordTransform{name[7:]}(value);\n") + out.emit("default:\n") + out.emit(" return value;\n") + out.emit("}\n") out.emit("}\n") diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 12da5bff254..b166b08b188 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -279,7 +279,7 @@ def generate_tier2( emitter = Tier2Emitter(out, analysis.labels, exit_depth) out.emit(f"case {uop.name}_r{inputs}{outputs}: {{\n") out.emit(f"CHECK_CURRENT_CACHED_VALUES({inputs});\n") - out.emit("assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());\n") + out.emit("ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__);\n") declare_variables(uop, out) stack = Stack() stack.push_cache([f"_tos_cache{i}" for i in range(inputs)], out) @@ -287,7 +287,7 @@ def generate_tier2( reachable, stack = write_uop(uop, emitter, stack, outputs) out.start_line() if reachable: - out.emit("assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());\n") + out.emit("ASSERT_WITHIN_STACK_BOUNDS_IGNORING_CACHE(__FILE__, __LINE__);\n") if not uop.properties.always_exits: out.emit("break;\n") out.start_line() diff --git a/Tools/clinic/libclinic/function.py b/Tools/clinic/libclinic/function.py index f981f0bcaf8..1c643caea98 100644 --- a/Tools/clinic/libclinic/function.py +++ b/Tools/clinic/libclinic/function.py @@ -173,12 +173,12 @@ def docstring_line_width(self) -> int: Pydoc adds indentation when displaying functions and methods. To keep the total width of within 80 characters, we use a - maximum of 76 characters for global functions and classes, - and 72 characters for methods. + maximum of 72 characters for global functions and classes, + and 68 characters for methods. """ if self.cls is not None and not self.kind.new_or_init: - return 72 - return 76 + return 68 + return 72 def __repr__(self) -> str: return f'<clinic.Function {self.name!r}>' diff --git a/Tools/inspection/benchmark_external_inspection.py b/Tools/inspection/benchmark_external_inspection.py index fee3435496d..8e367422a96 100644 --- a/Tools/inspection/benchmark_external_inspection.py +++ b/Tools/inspection/benchmark_external_inspection.py @@ -151,6 +151,45 @@ def create_threads(n): time.sleep(0.05) ''' +ASYNC_CODE = '''\ +import asyncio +import contextlib +import math + +def compute_slice(seed): + result = 0.0 + for i in range(2000): + result += math.sin(seed + i) * math.sqrt(i + 1) + return result + +async def leaf_task(seed): + total = 0.0 + while True: + total += compute_slice(seed) + await asyncio.sleep(0) + +async def parent_task(seed): + child = asyncio.create_task(leaf_task(seed + 1000), name=f"leaf-{seed}") + try: + while True: + compute_slice(seed) + await asyncio.sleep(0.001) + finally: + child.cancel() + with contextlib.suppress(asyncio.CancelledError): + await child + +async def main(): + tasks = [ + asyncio.create_task(parent_task(i), name=f"parent-{i}") + for i in range(8) + ] + await asyncio.gather(*tasks) + +if __name__ == "__main__": + asyncio.run(main()) +''' + CODE_EXAMPLES = { "basic": { "code": CODE, @@ -164,10 +203,29 @@ def create_threads(n): "code": CODE_WITH_TONS_OF_THREADS, "description": "Tons of threads doing mixed CPU/IO work", }, + "asyncio": { + "code": ASYNC_CODE, + "description": "Asyncio tasks with active and awaited coroutine chains", + }, +} + +OPERATIONS = { + "stack_trace": { + "method": "get_stack_trace", + "label": "get_stack_trace()", + }, + "async_stack_trace": { + "method": "get_async_stack_trace", + "label": "get_async_stack_trace()", + }, + "all_awaited_by": { + "method": "get_all_awaited_by", + "label": "get_all_awaited_by()", + }, } -def benchmark(unwinder, duration_seconds=10, blocking=False): +def benchmark(unwinder, duration_seconds=10, blocking=False, operation="stack_trace"): """Benchmark mode - measure raw sampling speed for specified duration""" sample_count = 0 fail_count = 0 @@ -175,11 +233,14 @@ def benchmark(unwinder, duration_seconds=10, blocking=False): start_time = time.perf_counter() end_time = start_time + duration_seconds total_attempts = 0 + operation_info = OPERATIONS[operation] + operation_method = getattr(unwinder, operation_info["method"]) colors = get_colors(can_colorize()) print( - f"{colors.BOLD_BLUE}Benchmarking sampling speed for {duration_seconds} seconds...{colors.RESET}" + f"{colors.BOLD_BLUE}Benchmarking {operation_info['label']} speed " + f"for {duration_seconds} seconds...{colors.RESET}" ) try: @@ -190,8 +251,8 @@ def benchmark(unwinder, duration_seconds=10, blocking=False): if blocking: unwinder.pause_threads() try: - stack_trace = unwinder.get_stack_trace() - if stack_trace: + sample = operation_method() + if sample: sample_count += 1 finally: if blocking: @@ -239,6 +300,7 @@ def benchmark(unwinder, duration_seconds=10, blocking=False): (sample_count / total_attempts) * 100 if total_attempts > 0 else 0 ), "total_work_time": total_work_time, + "operation": operation_info["label"], "avg_work_time_us": ( (total_work_time / total_attempts) * 1e6 if total_attempts > 0 else 0 ), @@ -252,7 +314,7 @@ def print_benchmark_results(results): colors = get_colors(can_colorize()) print(f"\n{colors.BOLD_GREEN}{'='*60}{colors.RESET}") - print(f"{colors.BOLD_GREEN}get_stack_trace() Benchmark Results{colors.RESET}") + print(f"{colors.BOLD_GREEN}{results['operation']} Benchmark Results{colors.RESET}") print(f"{colors.BOLD_GREEN}{'='*60}{colors.RESET}") # Basic statistics @@ -329,6 +391,8 @@ def parse_arguments(): %(prog)s -d 60 # Run basic benchmark for 60 seconds %(prog)s --code deep_static # Run deep static call stack benchmark %(prog)s --code deep_static -d 30 # Run deep static benchmark for 30 seconds + %(prog)s --operation async_stack_trace + %(prog)s --operation all_awaited_by Available code examples: {examples_desc} @@ -348,8 +412,15 @@ def parse_arguments(): "--code", "-c", choices=list(CODE_EXAMPLES.keys()), - default="basic", - help="Code example to benchmark (default: basic)", + default=None, + help="Code example to benchmark (default: basic, or asyncio for async operations)", + ) + + parser.add_argument( + "--operation", + choices=list(OPERATIONS.keys()), + default="stack_trace", + help="Remote unwinder operation to benchmark (default: stack_trace)", ) parser.add_argument( @@ -365,7 +436,10 @@ def parse_arguments(): help="Stop all threads before sampling for consistent snapshots", ) - return parser.parse_args() + args = parser.parse_args() + if args.code is None: + args.code = "asyncio" if args.operation != "stack_trace" else "basic" + return args def create_target_process(temp_file, code_example="basic"): @@ -420,6 +494,9 @@ def main(): print( f"{colors.CYAN}Benchmark Duration:{colors.RESET} {colors.YELLOW}{args.duration}{colors.RESET} seconds" ) + print( + f"{colors.CYAN}Operation:{colors.RESET} {colors.GREEN}{OPERATIONS[args.operation]['label']}{colors.RESET}" + ) print( f"{colors.CYAN}Blocking Mode:{colors.RESET} {colors.GREEN if args.blocking else colors.YELLOW}{'enabled' if args.blocking else 'disabled'}{colors.RESET}" ) @@ -451,7 +528,12 @@ def main(): unwinder = _remote_debugging.RemoteUnwinder( process.pid, cache_frames=True, **kwargs ) - results = benchmark(unwinder, duration_seconds=args.duration, blocking=args.blocking) + results = benchmark( + unwinder, + duration_seconds=args.duration, + blocking=args.blocking, + operation=args.operation, + ) finally: cleanup_process(process, temp_file_path) diff --git a/Tools/jit/template.c b/Tools/jit/template.c index afdd9b77e7c..72379165f3b 100644 --- a/Tools/jit/template.c +++ b/Tools/jit/template.c @@ -1,5 +1,9 @@ + #include "Python.h" +#undef assert +#define assert(TEST) ((TEST) ? 0 : _Py_jit_assertion_failure(__LINE__)) + #include "pycore_backoff.h" #include "pycore_call.h" #include "pycore_cell.h" @@ -36,6 +40,8 @@ #include "jit.h" +#undef assert +#define assert(TEST) ((TEST) ? 0 : _Py_jit_assertion_failure(__LINE__)) #undef CURRENT_OPERAND0_64 #define CURRENT_OPERAND0_64() (_operand0_64) @@ -115,7 +121,7 @@ do { \ #define TIER_TWO 2 #ifdef Py_DEBUG -#define ASSERT_WITHIN_STACK_BOUNDS(F, L) _Py_assert_within_stack_bounds(frame, stack_pointer, (F), (L)) +#define ASSERT_WITHIN_STACK_BOUNDS(F, L) _Py_jit_assert_within_stack_bounds(frame, stack_pointer, (L)) #else #define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0 #endif diff --git a/Tools/msi/dev/dev_files.wxs b/Tools/msi/dev/dev_files.wxs index 21f9c848cc6..a9039d03f5f 100644 --- a/Tools/msi/dev/dev_files.wxs +++ b/Tools/msi/dev/dev_files.wxs @@ -13,6 +13,9 @@ <Component Id="libs_python3.lib" Directory="libs" Guid="*"> <File Id="libs_python_stable.lib" Name="python$(var.MajorVersionNumber).lib" KeyPath="yes" /> </Component> + <Component Id="libs_python3t.lib" Directory="libs" Guid="*"> + <File Id="libs_python_abi3tcompat.lib" Name="python$(var.MajorVersionNumber)t.lib" KeyPath="yes" /> + </Component> <Component Id="libs_python.lib" Directory="libs" Guid="*"> <File Id="libs_python.lib" Name="python$(var.MajorVersionNumber)$(var.MinorVersionNumber).lib" KeyPath="yes" /> </Component> @@ -24,6 +27,9 @@ <Component Id="libs_python3_d.lib" Directory="libs" Guid="*"> <File Id="libs_python_stable_d.lib" Name="python$(var.MajorVersionNumber)_d.lib" /> </Component> + <Component Id="libs_python3t_d.lib" Directory="libs" Guid="*"> + <File Id="libs_python_abi3tcompat_d.lib" Name="python$(var.MajorVersionNumber)t_d.lib" /> + </Component> <Component Id="libs_python_d.lib" Directory="libs" Guid="*"> <File Id="libs_python_d.lib" Name="python$(var.MajorVersionNumber)$(var.MinorVersionNumber)_d.lib" /> </Component> diff --git a/Tools/msi/tcltk/tcltk_files.wxs b/Tools/msi/tcltk/tcltk_files.wxs index 5dad7c98d4f..7c7784741d9 100644 --- a/Tools/msi/tcltk/tcltk_files.wxs +++ b/Tools/msi/tcltk/tcltk_files.wxs @@ -10,11 +10,14 @@ <Component Id="_tkinter.lib" Directory="libs" Guid="*"> <File Name="_tkinter.lib" KeyPath="yes" /> </Component> - <Component Id="tcl86t.dll" Directory="DLLs" Guid="*"> - <File Name="tcl86t.dll" KeyPath="yes" /> + <Component Id="tcl90.dll" Directory="DLLs" Guid="*"> + <File Name="tcl90.dll" KeyPath="yes" /> </Component> - <Component Id="tk86t.dll" Directory="DLLs" Guid="*"> - <File Name="tk86t.dll" KeyPath="yes" /> + <Component Id="tcl9tk90.dll" Directory="DLLs" Guid="*"> + <File Name="tcl9tk90.dll" KeyPath="yes" /> + </Component> + <Component Id="libtommath.dll" Directory="DLLs" Guid="*"> + <File Name="libtommath.dll" KeyPath="yes" /> </Component> <Component Id="zlib1.dll" Directory="DLLs" Guid="*"> <File Name="zlib1.dll" KeyPath="yes" /> diff --git a/Tools/msi/testrelease.bat b/Tools/msi/testrelease.bat index 02bcca943cf..db98f690151 100644 --- a/Tools/msi/testrelease.bat +++ b/Tools/msi/testrelease.bat @@ -88,9 +88,7 @@ exit /B 0 ) @if not errorlevel 1 ( @echo Testing Tcl/tk - @set TCL_LIBRARY=%~2\Python\tcl\tcl8.6 "%~2\Python\python.exe" -m test -uall -v test_ttk_guionly test_tk test_idle > "%~2\tcltk.txt" 2>&1 - @set TCL_LIBRARY= ) @set EXITCODE=%ERRORLEVEL% diff --git a/configure b/configure index 4453237b06b..eb53b200bf7 100755 --- a/configure +++ b/configure @@ -828,6 +828,7 @@ MODULE__IO_FALSE MODULE__IO_TRUE MODULE_BUILDTYPE _PYTHREAD_NAME_MAXLEN +BUILD_DETAILS TEST_MODULES OPENSSL_LDFLAGS OPENSSL_LIBS @@ -1154,6 +1155,7 @@ with_openssl_rpath with_ssl_default_suites with_builtin_hashlib_hashes enable_test_modules +with_build_details_suffix ' ac_precious_vars='build_alias host_alias @@ -1989,6 +1991,10 @@ Optional Packages: --with-builtin-hashlib-hashes=md5,sha1,sha2,sha3,blake2 builtin hash modules, md5, sha1, sha2, sha3 (with shake), blake2 + --with-build-details-suffix= + rename build-details.json to permit multiple + colocated Python installs; optionally specify a + custom suffix (default: no) Some influential environment variables: PKG_CONFIG path to pkg-config utility @@ -4151,7 +4157,7 @@ then ac_sys_system=Linux ;; *-*-cygwin*) - ac_sys_system=Cygwin + ac_sys_system=CYGWIN ;; *-apple-ios*) ac_sys_system=iOS @@ -6640,7 +6646,7 @@ else case e in #( ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in notfound +for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( @@ -6689,7 +6695,7 @@ else case e in #( ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in notfound +for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( @@ -6721,7 +6727,7 @@ printf "%s\n" "no" >&6; } fi if test "x$ac_pt_CXX" = x; then - CXX="g++" + CXX="notfound" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6750,7 +6756,7 @@ else case e in #( ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in notfound +for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( @@ -6799,7 +6805,7 @@ else case e in #( ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in notfound +for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( @@ -6831,7 +6837,7 @@ printf "%s\n" "no" >&6; } fi if test "x$ac_pt_CXX" = x; then - CXX="c++" + CXX="notfound" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6860,7 +6866,7 @@ else case e in #( ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in notfound +for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( @@ -6909,7 +6915,7 @@ else case e in #( ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in notfound +for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( @@ -6941,7 +6947,7 @@ printf "%s\n" "no" >&6; } fi if test "x$ac_pt_CXX" = x; then - CXX="clang++" + CXX="notfound" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6970,7 +6976,7 @@ else case e in #( ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in notfound +for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( @@ -7019,7 +7025,7 @@ else case e in #( ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in notfound +for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( @@ -7051,7 +7057,7 @@ printf "%s\n" "no" >&6; } fi if test "x$ac_pt_CXX" = x; then - CXX="icpc" + CXX="notfound" else case $cross_compiling:$ac_tool_warned in yes:) @@ -7783,7 +7789,7 @@ printf "%s\n" "#define Py_ENABLE_SHARED 1" >>confdefs.h CYGWIN*) LDLIBRARY='libpython$(LDVERSION).dll.a' BLDLIBRARY='-L. -lpython$(LDVERSION)' - DLLLIBRARY='libpython$(LDVERSION).dll' + DLLLIBRARY='cygpython$(LDVERSION).dll' ;; SunOS*) LDLIBRARY='libpython$(LDVERSION).so' @@ -7842,7 +7848,7 @@ else # shared is disabled case $ac_sys_system in CYGWIN*) BLDLIBRARY='$(LIBRARY)' - LDLIBRARY='libpython$(LDVERSION).dll.a' + LDLIBRARY='libpython$(LDVERSION).a' ;; esac fi @@ -9861,6 +9867,61 @@ fi ;; esac +if test "$ac_sys_system" = "Linux" -a "$cross_compiling" = no; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thread stack size" >&5 +printf %s "checking for thread stack size... " >&6; } +if test ${ac_cv_thread_stack_size+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) + cat > conftest.c <<EOF +#include <pthread.h> + +int main() +{ + pthread_attr_t attrs; + size_t size; + + int rc = pthread_attr_init(&attrs); + if (rc != 0) { + return 2; + } + + rc = pthread_attr_getstacksize(&attrs, &size); + if (rc != 0) { + return 2; + } + + if (size < 1024 * 1024) { + return 1; + } + return 0; +} +EOF + + ac_cv_thread_stack_size=unknown + if $CC -pthread $CFLAGS conftest.c -o conftest &>/dev/null; then + ./conftest &>/dev/null + exitcode=$? + if test $exitcode -eq 1; then + ac_cv_thread_stack_size=1048576 + elif test $exitcode -eq 0; then + ac_cv_thread_stack_size="default" + fi + fi + rm -f conftest.c conftest + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_thread_stack_size" >&5 +printf "%s\n" "$ac_cv_thread_stack_size" >&6; } + + if test "$ac_cv_thread_stack_size" != "default" -a "$ac_cv_thread_stack_size" != "unknown"; then + LDFLAGS="$LDFLAGS -Wl,-z,stack-size=$ac_cv_thread_stack_size" + fi +fi + case $enable_wasm_dynamic_linking in #( yes) : ac_cv_func_dlopen=yes ;; #( @@ -14171,8 +14232,8 @@ then : fi;; CYGWIN*) - LDSHARED="gcc -shared -Wl,--enable-auto-image-base" - LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";; + LDSHARED='$(CC) -shared -Wl,--enable-auto-image-base' + LDCXXSHARED='$(CXX) -shared -Wl,--enable-auto-image-base';; *) LDSHARED="ld";; esac fi @@ -14356,17 +14417,35 @@ printf "%s\n" "$SHLIBS" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking perf trampoline" >&5 printf %s "checking perf trampoline... " >&6; } +PERF_TRAMPOLINE_OBJ="" case $PLATFORM_TRIPLET in #( x86_64-linux-gnu) : - perf_trampoline=yes ;; #( + perf_trampoline=yes + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_x86_64.o ;; #( aarch64-linux-gnu) : - perf_trampoline=yes ;; #( + perf_trampoline=yes + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_aarch64.o ;; #( darwin) : case $MACOSX_DEPLOYMENT_TARGET in #( 10.[0-9]|10.1[0-1]) : perf_trampoline=no ;; #( *) : perf_trampoline=yes + if test "${enable_universalsdk}" && test "$UNIVERSAL_ARCHS" = "universal2"; then + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_universal2.o + else + case "$host_cpu" in + x86_64) + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_x86_64.o + ;; + aarch64|arm64) + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_aarch64.o + ;; + *) + perf_trampoline=no + ;; + esac + fi ;; esac ;; #( *) : @@ -14382,7 +14461,6 @@ then : printf "%s\n" "#define PY_HAVE_PERF_TRAMPOLINE 1" >>confdefs.h - PERF_TRAMPOLINE_OBJ=Python/asm_trampoline.o fi @@ -16409,33 +16487,93 @@ save_LIBS=$LIBS CPPFLAGS="$CPPFLAGS $LIBMPDEC_CFLAGS" LIBS="$LIBS $LIBMPDEC_LIBS" + ac_fn_c_check_header_compile "$LINENO" "mpdecimal.h" "ac_cv_header_mpdecimal_h" "$ac_includes_default" +if test "x$ac_cv_header_mpdecimal_h" = xyes +then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mpd_version in -lmpdec" >&5 +printf %s "checking for mpd_version in -lmpdec... " >&6; } +if test ${ac_cv_lib_mpdec_mpd_version+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lmpdec $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char mpd_version (void); +int +main (void) +{ +return mpd_version (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_mpdec_mpd_version=yes +else case e in #( + e) ac_cv_lib_mpdec_mpd_version=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpdec_mpd_version" >&5 +printf "%s\n" "$ac_cv_lib_mpdec_mpd_version" >&6; } +if test "x$ac_cv_lib_mpdec_mpd_version" = xyes +then : + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include <mpdecimal.h> - #if MPD_VERSION_HEX < 0x02050000 - # error "mpdecimal 2.5.0 or higher required" - #endif + #include <mpdecimal.h> + #if MPD_VERSION_HEX < 0x02050000 + # error "mpdecimal 2.5.0 or higher required" + #endif int main (void) { -const char *x = mpd_version(); + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : have_mpdec=yes else case e in #( e) have_mpdec=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +else case e in #( + e) have_mpdec=no ;; +esac +fi + + +else case e in #( + e) have_mpdec=no ;; +esac +fi + if test "x$have_mpdec" = xyes then : @@ -16464,33 +16602,93 @@ save_LIBS=$LIBS CPPFLAGS="$CPPFLAGS $LIBMPDEC_CFLAGS" LIBS="$LIBS $LIBMPDEC_LIBS" + ac_fn_c_check_header_compile "$LINENO" "mpdecimal.h" "ac_cv_header_mpdecimal_h" "$ac_includes_default" +if test "x$ac_cv_header_mpdecimal_h" = xyes +then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mpd_version in -lmpdec" >&5 +printf %s "checking for mpd_version in -lmpdec... " >&6; } +if test ${ac_cv_lib_mpdec_mpd_version+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lmpdec $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char mpd_version (void); +int +main (void) +{ +return mpd_version (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_mpdec_mpd_version=yes +else case e in #( + e) ac_cv_lib_mpdec_mpd_version=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpdec_mpd_version" >&5 +printf "%s\n" "$ac_cv_lib_mpdec_mpd_version" >&6; } +if test "x$ac_cv_lib_mpdec_mpd_version" = xyes +then : + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - #include <mpdecimal.h> - #if MPD_VERSION_HEX < 0x02050000 - # error "mpdecimal 2.5.0 or higher required" - #endif + + #include <mpdecimal.h> + #if MPD_VERSION_HEX < 0x02050000 + # error "mpdecimal 2.5.0 or higher required" + #endif int main (void) { -const char *x = mpd_version(); + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : have_mpdec=yes else case e in #( e) have_mpdec=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +else case e in #( + e) have_mpdec=no ;; +esac +fi + + +else case e in #( + e) have_mpdec=no ;; +esac +fi + if test "x$have_mpdec" = xyes then : @@ -16515,12 +16713,6 @@ printf "%s\n" "yes" >&6; } have_mpdec=yes fi -# Disable forced inlining in debug builds, see GH-94847 -if test "x$with_pydebug" = xyes -then : - as_fn_append LIBMPDEC_CFLAGS " -DTEST_COVERAGE" -fi - # Check whether _decimal should use a coroutine-local or thread-local context { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-decimal-contextvar" >&5 printf %s "checking for --with-decimal-contextvar... " >&6; } @@ -19901,12 +20093,6 @@ if test "x$ac_cv_func_dup" = xyes then : printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" -if test "x$ac_cv_func_dup3" = xyes -then : - printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h - fi ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" if test "x$ac_cv_func_execv" = xyes @@ -20381,12 +20567,6 @@ if test "x$ac_cv_func_pipe" = xyes then : printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" -if test "x$ac_cv_func_pipe2" = xyes -then : - printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h - fi ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" if test "x$ac_cv_func_plock" = xyes @@ -21054,7 +21234,13 @@ fi # header definition prevents usage - autoconf doesn't use the headers), or # raise an error if used at runtime. Force these symbols off. if test "$ac_sys_system" != "iOS" ; then - ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +if test "x$ac_cv_func_dup3" = xyes +then : + printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" if test "x$ac_cv_func_getentropy" = xyes then : printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h @@ -21065,6 +21251,12 @@ if test "x$ac_cv_func_getgroups" = xyes then : printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +if test "x$ac_cv_func_pipe2" = xyes +then : + printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h + fi ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" if test "x$ac_cv_func_system" = xyes @@ -31660,6 +31852,50 @@ fi printf "%s\n" "$TEST_MODULES" >&6; } +# Check for --with-build-details-suffix +BUILD_DETAILS=build-details.json + +# Check whether --with-build-details-suffix was given. +if test ${with_build_details_suffix+y} +then : + withval=$with_build_details_suffix; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-build-details-suffix" >&5 +printf %s "checking for --with-build-details-suffix... " >&6; } + if test "x$with_build_details_suffix" = xno +then : + as_fn_error $? "invalid --with-build-details-suffix option: expected custom suffix or \"yes\", not \"no\"" "$LINENO" 5 + +fi + if test "x$with_build_details_suffix" = xyes +then : + + colocated_install=yes + threading_suffix="" + if [ "$ABI_THREAD" = "t" ]; then + threading_suffix=-free-threading + fi + debug_suffix="" + if [ "$Py_DEBUG" = "true" ]; then + debug_suffix=-debug + fi + BUILD_DETAILS=build-details.$MULTIARCH$threading_suffix$debug_suffix.json + +else case e in #( + e) + BUILD_DETAILS=build-details.$with_build_details_suffix.json + + ;; +esac +fi + + +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_build_details_suffix" >&5 +printf "%s\n" "$with_build_details_suffix" >&6; } +BUILD_DETAILS=$BUILD_DETAILS + + # gh-109054: Check if -latomic is needed to get <pyatomic.h> atomic functions. # On Linux aarch64, GCC may require programs and libraries to be linked # explicitly to libatomic. Call _Py_atomic_or_uint64() which may require @@ -31754,6 +31990,7 @@ case "$ac_sys_system" in iOS) _PYTHREAD_NAME_MAXLEN=63;; FreeBSD*) _PYTHREAD_NAME_MAXLEN=19;; # gh-131268 OpenBSD*) _PYTHREAD_NAME_MAXLEN=23;; # gh-131268 + CYGWIN*) _PYTHREAD_NAME_MAXLEN=16;; *) _PYTHREAD_NAME_MAXLEN=;; esac if test -n "$_PYTHREAD_NAME_MAXLEN"; then @@ -34376,6 +34613,15 @@ fi printf "%s\n" "$py_cv_module__hashlib" >&6; } +case $ac_sys_system in #( + # On FreeBSD, _testcapi.get_process_memory_usage() calls kvm_openfiles() + # and so needs libkvm. + FreeBSD*) : + LIBKVM="-lkvm" + ;; #( + *) : + ;; +esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module _testcapi" >&5 printf %s "checking for stdlib extension module _testcapi... " >&6; } @@ -34402,7 +34648,7 @@ fi then : - as_fn_append MODULE_BLOCK "MODULE__TESTCAPI_LDFLAGS=$LIBATOMIC$as_nl" + as_fn_append MODULE_BLOCK "MODULE__TESTCAPI_LDFLAGS=$LIBATOMIC $LIBKVM$as_nl" fi if test "$py_cv_module__testcapi" = yes; then diff --git a/configure.ac b/configure.ac index 87e8abdf385..b2f3f721005 100644 --- a/configure.ac +++ b/configure.ac @@ -334,7 +334,7 @@ then ac_sys_system=Linux ;; *-*-cygwin*) - ac_sys_system=Cygwin + ac_sys_system=CYGWIN ;; *-apple-ios*) ac_sys_system=iOS @@ -1137,10 +1137,10 @@ preset_cxx="$CXX" if test -z "$CXX" then case "$ac_cv_cc_name" in - gcc) AC_PATH_TOOL([CXX], [g++], [g++], [notfound]) ;; - cc) AC_PATH_TOOL([CXX], [c++], [c++], [notfound]) ;; - clang) AC_PATH_TOOL([CXX], [clang++], [clang++], [notfound]) ;; - icc) AC_PATH_TOOL([CXX], [icpc], [icpc], [notfound]) ;; + gcc) AC_PATH_TOOL([CXX], [g++], [notfound]) ;; + cc) AC_PATH_TOOL([CXX], [c++], [notfound]) ;; + clang) AC_PATH_TOOL([CXX], [clang++], [notfound]) ;; + icc) AC_PATH_TOOL([CXX], [icpc], [notfound]) ;; esac if test "$CXX" = "notfound" then @@ -1591,7 +1591,7 @@ if test $enable_shared = "yes"; then CYGWIN*) LDLIBRARY='libpython$(LDVERSION).dll.a' BLDLIBRARY='-L. -lpython$(LDVERSION)' - DLLLIBRARY='libpython$(LDVERSION).dll' + DLLLIBRARY='cygpython$(LDVERSION).dll' ;; SunOS*) LDLIBRARY='libpython$(LDVERSION).so' @@ -1650,7 +1650,7 @@ else # shared is disabled case $ac_sys_system in CYGWIN*) BLDLIBRARY='$(LIBRARY)' - LDLIBRARY='libpython$(LDVERSION).dll.a' + LDLIBRARY='libpython$(LDVERSION).a' ;; esac fi @@ -2462,6 +2462,54 @@ AS_CASE([$ac_sys_system], ] ) +dnl On Linux, check the thread stack size. musl (ex: Alpine Linux) uses +dnl a default thread stack size of 128 kB, whereas the glibc uses 8 MiB. +dnl Python needs at least 1 MiB. +if test "$ac_sys_system" = "Linux" -a "$cross_compiling" = no; then + AC_CACHE_CHECK([for thread stack size], [ac_cv_thread_stack_size], [ + cat > conftest.c <<EOF +#include <pthread.h> + +int main() +{ + pthread_attr_t attrs; + size_t size; + + int rc = pthread_attr_init(&attrs); + if (rc != 0) { + return 2; + } + + rc = pthread_attr_getstacksize(&attrs, &size); + if (rc != 0) { + return 2; + } + + if (size < 1024 * 1024) { + return 1; + } + return 0; +} +EOF + + ac_cv_thread_stack_size=unknown + if $CC -pthread $CFLAGS conftest.c -o conftest &>/dev/null; then + ./conftest &>/dev/null + exitcode=$? + if test $exitcode -eq 1; then + ac_cv_thread_stack_size=1048576 + elif test $exitcode -eq 0; then + ac_cv_thread_stack_size="default" + fi + fi + rm -f conftest.c conftest + ]) + + if test "$ac_cv_thread_stack_size" != "default" -a "$ac_cv_thread_stack_size" != "unknown"; then + LDFLAGS="$LDFLAGS -Wl,-z,stack-size=$ac_cv_thread_stack_size" + fi +fi + AS_CASE([$enable_wasm_dynamic_linking], [yes], [ac_cv_func_dlopen=yes], [no], [ac_cv_func_dlopen=no], @@ -3646,8 +3694,8 @@ then dnl not implemented yet ]);; CYGWIN*) - LDSHARED="gcc -shared -Wl,--enable-auto-image-base" - LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";; + LDSHARED='$(CC) -shared -Wl,--enable-auto-image-base' + LDCXXSHARED='$(CXX) -shared -Wl,--enable-auto-image-base';; *) LDSHARED="ld";; esac fi @@ -3818,12 +3866,30 @@ AC_MSG_RESULT([$SHLIBS]) dnl perf trampoline is Linux and macOS specific and requires an arch-specific dnl trampoline in assembly. AC_MSG_CHECKING([perf trampoline]) +PERF_TRAMPOLINE_OBJ="" AS_CASE([$PLATFORM_TRIPLET], - [x86_64-linux-gnu], [perf_trampoline=yes], - [aarch64-linux-gnu], [perf_trampoline=yes], + [x86_64-linux-gnu], [perf_trampoline=yes + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_x86_64.o], + [aarch64-linux-gnu], [perf_trampoline=yes + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_aarch64.o], [darwin], [AS_CASE([$MACOSX_DEPLOYMENT_TARGET], [[10.[0-9]|10.1[0-1]]], [perf_trampoline=no], - [perf_trampoline=yes] + [perf_trampoline=yes + if test "${enable_universalsdk}" && test "$UNIVERSAL_ARCHS" = "universal2"; then + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_universal2.o + else + case "$host_cpu" in + x86_64) + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_x86_64.o + ;; + aarch64|arm64) + PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_aarch64.o + ;; + *) + perf_trampoline=no + ;; + esac + fi] )], [perf_trampoline=no] ) @@ -3831,7 +3897,6 @@ AC_MSG_RESULT([$perf_trampoline]) AS_VAR_IF([perf_trampoline], [yes], [ AC_DEFINE([PY_HAVE_PERF_TRAMPOLINE], [1], [Define to 1 if you have the perf trampoline.]) - PERF_TRAMPOLINE_OBJ=Python/asm_trampoline.o ]) AC_SUBST([PERF_TRAMPOLINE_OBJ]) @@ -4315,16 +4380,19 @@ PKG_CHECK_MODULES([LIBMPDEC], [libmpdec >= 2.5.0], [have_mpdec=yes], [ WITH_SAVE_ENV([ CPPFLAGS="$CPPFLAGS $LIBMPDEC_CFLAGS" LIBS="$LIBS $LIBMPDEC_LIBS" - - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([ - #include <mpdecimal.h> - #if MPD_VERSION_HEX < 0x02050000 - # error "mpdecimal 2.5.0 or higher required" - #endif - ], [const char *x = mpd_version();])], - [have_mpdec=yes], - [have_mpdec=no]) + AC_CHECK_HEADER([mpdecimal.h], [ + AC_CHECK_LIB([mpdec], [mpd_version], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([ + #include <mpdecimal.h> + #if MPD_VERSION_HEX < 0x02050000 + # error "mpdecimal 2.5.0 or higher required" + #endif + ], [])], + [have_mpdec=yes], + [have_mpdec=no]) + ], [have_mpdec=no]) + ], [have_mpdec=no]) AS_VAR_IF([have_mpdec], [yes], [ LIBMPDEC_CFLAGS=${LIBMPDEC_CFLAGS-""} @@ -4333,11 +4401,6 @@ PKG_CHECK_MODULES([LIBMPDEC], [libmpdec >= 2.5.0], [have_mpdec=yes], [ ]) ]) -# Disable forced inlining in debug builds, see GH-94847 -AS_VAR_IF( - [with_pydebug], [yes], - [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DTEST_COVERAGE"])]) - # Check whether _decimal should use a coroutine-local or thread-local context AC_MSG_CHECKING([for --with-decimal-contextvar]) AC_ARG_WITH( @@ -5337,7 +5400,7 @@ fi AC_CHECK_FUNCS([ \ accept4 alarm bind_textdomain_codeset chmod chown clearenv \ clock closefrom close_range confstr \ - copy_file_range ctermid dladdr dup dup3 execv explicit_bzero explicit_memset \ + copy_file_range ctermid dladdr dup execv explicit_bzero explicit_memset \ faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ @@ -5347,7 +5410,7 @@ AC_CHECK_FUNCS([ \ getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ - pipe2 plock poll ppoll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + plock poll ppoll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ posix_spawn_file_actions_addclosefrom_np \ pread preadv preadv2 process_vm_readv \ pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ @@ -5384,7 +5447,7 @@ fi # header definition prevents usage - autoconf doesn't use the headers), or # raise an error if used at runtime. Force these symbols off. if test "$ac_sys_system" != "iOS" ; then - AC_CHECK_FUNCS([getentropy getgroups system]) + AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) fi AC_CHECK_DECL([dirfd], @@ -7775,6 +7838,40 @@ AC_ARG_ENABLE([test-modules], AC_MSG_RESULT([$TEST_MODULES]) AC_SUBST([TEST_MODULES]) +# Check for --with-build-details-suffix +BUILD_DETAILS=build-details.json +AC_ARG_WITH([build-details-suffix], + [AS_HELP_STRING( + [--with-build-details-suffix=], + [rename build-details.json to permit multiple colocated Python installs; optionally specify a custom suffix (default: no)] + )], + [ + AC_MSG_CHECKING([for --with-build-details-suffix]) + AS_VAR_IF( + [with_build_details_suffix], [no], + [AC_MSG_ERROR([invalid --with-build-details-suffix option: expected custom suffix or "yes", not "no"])] + ) + AS_VAR_IF( + [with_build_details_suffix], [yes], [ + colocated_install=yes + threading_suffix="" + if [[ "$ABI_THREAD" = "t" ]]; then + threading_suffix=-free-threading + fi + debug_suffix="" + if [[ "$Py_DEBUG" = "true" ]]; then + debug_suffix=-debug + fi + BUILD_DETAILS=build-details.$MULTIARCH$threading_suffix$debug_suffix.json + ], [ + BUILD_DETAILS=build-details.$with_build_details_suffix.json + ] + ) + ] +) +AC_MSG_RESULT([$with_build_details_suffix]) +AC_SUBST([BUILD_DETAILS], [$BUILD_DETAILS]) + # gh-109054: Check if -latomic is needed to get <pyatomic.h> atomic functions. # On Linux aarch64, GCC may require programs and libraries to be linked # explicitly to libatomic. Call _Py_atomic_or_uint64() which may require @@ -7850,6 +7947,7 @@ case "$ac_sys_system" in iOS) _PYTHREAD_NAME_MAXLEN=63;; FreeBSD*) _PYTHREAD_NAME_MAXLEN=19;; # gh-131268 OpenBSD*) _PYTHREAD_NAME_MAXLEN=23;; # gh-131268 + CYGWIN*) _PYTHREAD_NAME_MAXLEN=16;; *) _PYTHREAD_NAME_MAXLEN=;; esac if test -n "$_PYTHREAD_NAME_MAXLEN"; then @@ -8328,10 +8426,15 @@ PY_STDLIB_MOD([_hashlib], [], [test "$ac_cv_working_openssl_hashlib" = yes], [$OPENSSL_INCLUDES], [$OPENSSL_LDFLAGS $OPENSSL_LDFLAGS_RPATH $LIBCRYPTO_LIBS]) dnl test modules +AS_CASE([$ac_sys_system], + # On FreeBSD, _testcapi.get_process_memory_usage() calls kvm_openfiles() + # and so needs libkvm. + [FreeBSD*], [LIBKVM="-lkvm"] +) PY_STDLIB_MOD([_testcapi], [test "$TEST_MODULES" = yes], dnl Modules/_testcapi needs -latomic for 32bit AIX build - [], [], [$LIBATOMIC]) + [], [], [$LIBATOMIC $LIBKVM]) PY_STDLIB_MOD([_testclinic], [test "$TEST_MODULES" = yes]) PY_STDLIB_MOD([_testclinic_limited], [test "$TEST_MODULES" = yes]) PY_STDLIB_MOD([_testlimitedcapi], [test "$TEST_MODULES" = yes])